linux/drivers/spi/spi-qup.c
<<
>>
Prefs
   1/*
   2 * Copyright (c) 2008-2014, The Linux foundation. All rights reserved.
   3 *
   4 * This program is free software; you can redistribute it and/or modify
   5 * it under the terms of the GNU General Public License rev 2 and
   6 * only rev 2 as published by the free Software foundation.
   7 *
   8 * This program is distributed in the hope that it will be useful,
   9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10 * MERCHANTABILITY or fITNESS fOR A PARTICULAR PURPOSE.  See the
  11 * GNU General Public License for more details.
  12 */
  13
  14#include <linux/clk.h>
  15#include <linux/delay.h>
  16#include <linux/err.h>
  17#include <linux/interrupt.h>
  18#include <linux/io.h>
  19#include <linux/list.h>
  20#include <linux/module.h>
  21#include <linux/of.h>
  22#include <linux/platform_device.h>
  23#include <linux/pm_runtime.h>
  24#include <linux/spi/spi.h>
  25#include <linux/dmaengine.h>
  26#include <linux/dma-mapping.h>
  27
  28#define QUP_CONFIG                      0x0000
  29#define QUP_STATE                       0x0004
  30#define QUP_IO_M_MODES                  0x0008
  31#define QUP_SW_RESET                    0x000c
  32#define QUP_OPERATIONAL                 0x0018
  33#define QUP_ERROR_FLAGS                 0x001c
  34#define QUP_ERROR_FLAGS_EN              0x0020
  35#define QUP_OPERATIONAL_MASK            0x0028
  36#define QUP_HW_VERSION                  0x0030
  37#define QUP_MX_OUTPUT_CNT               0x0100
  38#define QUP_OUTPUT_FIFO                 0x0110
  39#define QUP_MX_WRITE_CNT                0x0150
  40#define QUP_MX_INPUT_CNT                0x0200
  41#define QUP_MX_READ_CNT                 0x0208
  42#define QUP_INPUT_FIFO                  0x0218
  43
  44#define SPI_CONFIG                      0x0300
  45#define SPI_IO_CONTROL                  0x0304
  46#define SPI_ERROR_FLAGS                 0x0308
  47#define SPI_ERROR_FLAGS_EN              0x030c
  48
  49/* QUP_CONFIG fields */
  50#define QUP_CONFIG_SPI_MODE             (1 << 8)
  51#define QUP_CONFIG_CLOCK_AUTO_GATE      BIT(13)
  52#define QUP_CONFIG_NO_INPUT             BIT(7)
  53#define QUP_CONFIG_NO_OUTPUT            BIT(6)
  54#define QUP_CONFIG_N                    0x001f
  55
  56/* QUP_STATE fields */
  57#define QUP_STATE_VALID                 BIT(2)
  58#define QUP_STATE_RESET                 0
  59#define QUP_STATE_RUN                   1
  60#define QUP_STATE_PAUSE                 3
  61#define QUP_STATE_MASK                  3
  62#define QUP_STATE_CLEAR                 2
  63
  64#define QUP_HW_VERSION_2_1_1            0x20010001
  65
  66/* QUP_IO_M_MODES fields */
  67#define QUP_IO_M_PACK_EN                BIT(15)
  68#define QUP_IO_M_UNPACK_EN              BIT(14)
  69#define QUP_IO_M_INPUT_MODE_MASK_SHIFT  12
  70#define QUP_IO_M_OUTPUT_MODE_MASK_SHIFT 10
  71#define QUP_IO_M_INPUT_MODE_MASK        (3 << QUP_IO_M_INPUT_MODE_MASK_SHIFT)
  72#define QUP_IO_M_OUTPUT_MODE_MASK       (3 << QUP_IO_M_OUTPUT_MODE_MASK_SHIFT)
  73
  74#define QUP_IO_M_OUTPUT_BLOCK_SIZE(x)   (((x) & (0x03 << 0)) >> 0)
  75#define QUP_IO_M_OUTPUT_FIFO_SIZE(x)    (((x) & (0x07 << 2)) >> 2)
  76#define QUP_IO_M_INPUT_BLOCK_SIZE(x)    (((x) & (0x03 << 5)) >> 5)
  77#define QUP_IO_M_INPUT_FIFO_SIZE(x)     (((x) & (0x07 << 7)) >> 7)
  78
  79#define QUP_IO_M_MODE_FIFO              0
  80#define QUP_IO_M_MODE_BLOCK             1
  81#define QUP_IO_M_MODE_DMOV              2
  82#define QUP_IO_M_MODE_BAM               3
  83
  84/* QUP_OPERATIONAL fields */
  85#define QUP_OP_MAX_INPUT_DONE_FLAG      BIT(11)
  86#define QUP_OP_MAX_OUTPUT_DONE_FLAG     BIT(10)
  87#define QUP_OP_IN_SERVICE_FLAG          BIT(9)
  88#define QUP_OP_OUT_SERVICE_FLAG         BIT(8)
  89#define QUP_OP_IN_FIFO_FULL             BIT(7)
  90#define QUP_OP_OUT_FIFO_FULL            BIT(6)
  91#define QUP_OP_IN_FIFO_NOT_EMPTY        BIT(5)
  92#define QUP_OP_OUT_FIFO_NOT_EMPTY       BIT(4)
  93
  94/* QUP_ERROR_FLAGS and QUP_ERROR_FLAGS_EN fields */
  95#define QUP_ERROR_OUTPUT_OVER_RUN       BIT(5)
  96#define QUP_ERROR_INPUT_UNDER_RUN       BIT(4)
  97#define QUP_ERROR_OUTPUT_UNDER_RUN      BIT(3)
  98#define QUP_ERROR_INPUT_OVER_RUN        BIT(2)
  99
 100/* SPI_CONFIG fields */
 101#define SPI_CONFIG_HS_MODE              BIT(10)
 102#define SPI_CONFIG_INPUT_FIRST          BIT(9)
 103#define SPI_CONFIG_LOOPBACK             BIT(8)
 104
 105/* SPI_IO_CONTROL fields */
 106#define SPI_IO_C_FORCE_CS               BIT(11)
 107#define SPI_IO_C_CLK_IDLE_HIGH          BIT(10)
 108#define SPI_IO_C_MX_CS_MODE             BIT(8)
 109#define SPI_IO_C_CS_N_POLARITY_0        BIT(4)
 110#define SPI_IO_C_CS_SELECT(x)           (((x) & 3) << 2)
 111#define SPI_IO_C_CS_SELECT_MASK         0x000c
 112#define SPI_IO_C_TRISTATE_CS            BIT(1)
 113#define SPI_IO_C_NO_TRI_STATE           BIT(0)
 114
 115/* SPI_ERROR_FLAGS and SPI_ERROR_FLAGS_EN fields */
 116#define SPI_ERROR_CLK_OVER_RUN          BIT(1)
 117#define SPI_ERROR_CLK_UNDER_RUN         BIT(0)
 118
 119#define SPI_NUM_CHIPSELECTS             4
 120
 121#define SPI_MAX_DMA_XFER                (SZ_64K - 64)
 122
 123/* high speed mode is when bus rate is greater then 26MHz */
 124#define SPI_HS_MIN_RATE                 26000000
 125#define SPI_MAX_RATE                    50000000
 126
 127#define SPI_DELAY_THRESHOLD             1
 128#define SPI_DELAY_RETRY                 10
 129
 130struct spi_qup {
 131        void __iomem            *base;
 132        struct device           *dev;
 133        struct clk              *cclk;  /* core clock */
 134        struct clk              *iclk;  /* interface clock */
 135        int                     irq;
 136        spinlock_t              lock;
 137
 138        int                     in_fifo_sz;
 139        int                     out_fifo_sz;
 140        int                     in_blk_sz;
 141        int                     out_blk_sz;
 142
 143        struct spi_transfer     *xfer;
 144        struct completion       done;
 145        int                     error;
 146        int                     w_size; /* bytes per SPI word */
 147        int                     n_words;
 148        int                     tx_bytes;
 149        int                     rx_bytes;
 150        int                     qup_v1;
 151
 152        int                     use_dma;
 153        struct dma_slave_config rx_conf;
 154        struct dma_slave_config tx_conf;
 155};
 156
 157
 158static inline bool spi_qup_is_valid_state(struct spi_qup *controller)
 159{
 160        u32 opstate = readl_relaxed(controller->base + QUP_STATE);
 161
 162        return opstate & QUP_STATE_VALID;
 163}
 164
 165static int spi_qup_set_state(struct spi_qup *controller, u32 state)
 166{
 167        unsigned long loop;
 168        u32 cur_state;
 169
 170        loop = 0;
 171        while (!spi_qup_is_valid_state(controller)) {
 172
 173                usleep_range(SPI_DELAY_THRESHOLD, SPI_DELAY_THRESHOLD * 2);
 174
 175                if (++loop > SPI_DELAY_RETRY)
 176                        return -EIO;
 177        }
 178
 179        if (loop)
 180                dev_dbg(controller->dev, "invalid state for %ld,us %d\n",
 181                        loop, state);
 182
 183        cur_state = readl_relaxed(controller->base + QUP_STATE);
 184        /*
 185         * Per spec: for PAUSE_STATE to RESET_STATE, two writes
 186         * of (b10) are required
 187         */
 188        if (((cur_state & QUP_STATE_MASK) == QUP_STATE_PAUSE) &&
 189            (state == QUP_STATE_RESET)) {
 190                writel_relaxed(QUP_STATE_CLEAR, controller->base + QUP_STATE);
 191                writel_relaxed(QUP_STATE_CLEAR, controller->base + QUP_STATE);
 192        } else {
 193                cur_state &= ~QUP_STATE_MASK;
 194                cur_state |= state;
 195                writel_relaxed(cur_state, controller->base + QUP_STATE);
 196        }
 197
 198        loop = 0;
 199        while (!spi_qup_is_valid_state(controller)) {
 200
 201                usleep_range(SPI_DELAY_THRESHOLD, SPI_DELAY_THRESHOLD * 2);
 202
 203                if (++loop > SPI_DELAY_RETRY)
 204                        return -EIO;
 205        }
 206
 207        return 0;
 208}
 209
 210static void spi_qup_fifo_read(struct spi_qup *controller,
 211                            struct spi_transfer *xfer)
 212{
 213        u8 *rx_buf = xfer->rx_buf;
 214        u32 word, state;
 215        int idx, shift, w_size;
 216
 217        w_size = controller->w_size;
 218
 219        while (controller->rx_bytes < xfer->len) {
 220
 221                state = readl_relaxed(controller->base + QUP_OPERATIONAL);
 222                if (0 == (state & QUP_OP_IN_FIFO_NOT_EMPTY))
 223                        break;
 224
 225                word = readl_relaxed(controller->base + QUP_INPUT_FIFO);
 226
 227                if (!rx_buf) {
 228                        controller->rx_bytes += w_size;
 229                        continue;
 230                }
 231
 232                for (idx = 0; idx < w_size; idx++, controller->rx_bytes++) {
 233                        /*
 234                         * The data format depends on bytes per SPI word:
 235                         *  4 bytes: 0x12345678
 236                         *  2 bytes: 0x00001234
 237                         *  1 byte : 0x00000012
 238                         */
 239                        shift = BITS_PER_BYTE;
 240                        shift *= (w_size - idx - 1);
 241                        rx_buf[controller->rx_bytes] = word >> shift;
 242                }
 243        }
 244}
 245
 246static void spi_qup_fifo_write(struct spi_qup *controller,
 247                            struct spi_transfer *xfer)
 248{
 249        const u8 *tx_buf = xfer->tx_buf;
 250        u32 word, state, data;
 251        int idx, w_size;
 252
 253        w_size = controller->w_size;
 254
 255        while (controller->tx_bytes < xfer->len) {
 256
 257                state = readl_relaxed(controller->base + QUP_OPERATIONAL);
 258                if (state & QUP_OP_OUT_FIFO_FULL)
 259                        break;
 260
 261                word = 0;
 262                for (idx = 0; idx < w_size; idx++, controller->tx_bytes++) {
 263
 264                        if (!tx_buf) {
 265                                controller->tx_bytes += w_size;
 266                                break;
 267                        }
 268
 269                        data = tx_buf[controller->tx_bytes];
 270                        word |= data << (BITS_PER_BYTE * (3 - idx));
 271                }
 272
 273                writel_relaxed(word, controller->base + QUP_OUTPUT_FIFO);
 274        }
 275}
 276
 277static void spi_qup_dma_done(void *data)
 278{
 279        struct spi_qup *qup = data;
 280
 281        complete(&qup->done);
 282}
 283
 284static int spi_qup_prep_sg(struct spi_master *master, struct spi_transfer *xfer,
 285                           enum dma_transfer_direction dir,
 286                           dma_async_tx_callback callback)
 287{
 288        struct spi_qup *qup = spi_master_get_devdata(master);
 289        unsigned long flags = DMA_PREP_INTERRUPT | DMA_PREP_FENCE;
 290        struct dma_async_tx_descriptor *desc;
 291        struct scatterlist *sgl;
 292        struct dma_chan *chan;
 293        dma_cookie_t cookie;
 294        unsigned int nents;
 295
 296        if (dir == DMA_MEM_TO_DEV) {
 297                chan = master->dma_tx;
 298                nents = xfer->tx_sg.nents;
 299                sgl = xfer->tx_sg.sgl;
 300        } else {
 301                chan = master->dma_rx;
 302                nents = xfer->rx_sg.nents;
 303                sgl = xfer->rx_sg.sgl;
 304        }
 305
 306        desc = dmaengine_prep_slave_sg(chan, sgl, nents, dir, flags);
 307        if (!desc)
 308                return -EINVAL;
 309
 310        desc->callback = callback;
 311        desc->callback_param = qup;
 312
 313        cookie = dmaengine_submit(desc);
 314
 315        return dma_submit_error(cookie);
 316}
 317
 318static void spi_qup_dma_terminate(struct spi_master *master,
 319                                  struct spi_transfer *xfer)
 320{
 321        if (xfer->tx_buf)
 322                dmaengine_terminate_all(master->dma_tx);
 323        if (xfer->rx_buf)
 324                dmaengine_terminate_all(master->dma_rx);
 325}
 326
 327static int spi_qup_do_dma(struct spi_master *master, struct spi_transfer *xfer)
 328{
 329        dma_async_tx_callback rx_done = NULL, tx_done = NULL;
 330        int ret;
 331
 332        if (xfer->rx_buf)
 333                rx_done = spi_qup_dma_done;
 334        else if (xfer->tx_buf)
 335                tx_done = spi_qup_dma_done;
 336
 337        if (xfer->rx_buf) {
 338                ret = spi_qup_prep_sg(master, xfer, DMA_DEV_TO_MEM, rx_done);
 339                if (ret)
 340                        return ret;
 341
 342                dma_async_issue_pending(master->dma_rx);
 343        }
 344
 345        if (xfer->tx_buf) {
 346                ret = spi_qup_prep_sg(master, xfer, DMA_MEM_TO_DEV, tx_done);
 347                if (ret)
 348                        return ret;
 349
 350                dma_async_issue_pending(master->dma_tx);
 351        }
 352
 353        return 0;
 354}
 355
 356static int spi_qup_do_pio(struct spi_master *master, struct spi_transfer *xfer)
 357{
 358        struct spi_qup *qup = spi_master_get_devdata(master);
 359        int ret;
 360
 361        ret = spi_qup_set_state(qup, QUP_STATE_RUN);
 362        if (ret) {
 363                dev_warn(qup->dev, "cannot set RUN state\n");
 364                return ret;
 365        }
 366
 367        ret = spi_qup_set_state(qup, QUP_STATE_PAUSE);
 368        if (ret) {
 369                dev_warn(qup->dev, "cannot set PAUSE state\n");
 370                return ret;
 371        }
 372
 373        spi_qup_fifo_write(qup, xfer);
 374
 375        return 0;
 376}
 377
 378static irqreturn_t spi_qup_qup_irq(int irq, void *dev_id)
 379{
 380        struct spi_qup *controller = dev_id;
 381        struct spi_transfer *xfer;
 382        u32 opflags, qup_err, spi_err;
 383        unsigned long flags;
 384        int error = 0;
 385
 386        spin_lock_irqsave(&controller->lock, flags);
 387        xfer = controller->xfer;
 388        controller->xfer = NULL;
 389        spin_unlock_irqrestore(&controller->lock, flags);
 390
 391        qup_err = readl_relaxed(controller->base + QUP_ERROR_FLAGS);
 392        spi_err = readl_relaxed(controller->base + SPI_ERROR_FLAGS);
 393        opflags = readl_relaxed(controller->base + QUP_OPERATIONAL);
 394
 395        writel_relaxed(qup_err, controller->base + QUP_ERROR_FLAGS);
 396        writel_relaxed(spi_err, controller->base + SPI_ERROR_FLAGS);
 397        writel_relaxed(opflags, controller->base + QUP_OPERATIONAL);
 398
 399        if (!xfer) {
 400                dev_err_ratelimited(controller->dev, "unexpected irq %08x %08x %08x\n",
 401                                    qup_err, spi_err, opflags);
 402                return IRQ_HANDLED;
 403        }
 404
 405        if (qup_err) {
 406                if (qup_err & QUP_ERROR_OUTPUT_OVER_RUN)
 407                        dev_warn(controller->dev, "OUTPUT_OVER_RUN\n");
 408                if (qup_err & QUP_ERROR_INPUT_UNDER_RUN)
 409                        dev_warn(controller->dev, "INPUT_UNDER_RUN\n");
 410                if (qup_err & QUP_ERROR_OUTPUT_UNDER_RUN)
 411                        dev_warn(controller->dev, "OUTPUT_UNDER_RUN\n");
 412                if (qup_err & QUP_ERROR_INPUT_OVER_RUN)
 413                        dev_warn(controller->dev, "INPUT_OVER_RUN\n");
 414
 415                error = -EIO;
 416        }
 417
 418        if (spi_err) {
 419                if (spi_err & SPI_ERROR_CLK_OVER_RUN)
 420                        dev_warn(controller->dev, "CLK_OVER_RUN\n");
 421                if (spi_err & SPI_ERROR_CLK_UNDER_RUN)
 422                        dev_warn(controller->dev, "CLK_UNDER_RUN\n");
 423
 424                error = -EIO;
 425        }
 426
 427        if (!controller->use_dma) {
 428                if (opflags & QUP_OP_IN_SERVICE_FLAG)
 429                        spi_qup_fifo_read(controller, xfer);
 430
 431                if (opflags & QUP_OP_OUT_SERVICE_FLAG)
 432                        spi_qup_fifo_write(controller, xfer);
 433        }
 434
 435        spin_lock_irqsave(&controller->lock, flags);
 436        controller->error = error;
 437        controller->xfer = xfer;
 438        spin_unlock_irqrestore(&controller->lock, flags);
 439
 440        if (controller->rx_bytes == xfer->len || error)
 441                complete(&controller->done);
 442
 443        return IRQ_HANDLED;
 444}
 445
 446static u32
 447spi_qup_get_mode(struct spi_master *master, struct spi_transfer *xfer)
 448{
 449        struct spi_qup *qup = spi_master_get_devdata(master);
 450        u32 mode;
 451
 452        qup->w_size = 4;
 453
 454        if (xfer->bits_per_word <= 8)
 455                qup->w_size = 1;
 456        else if (xfer->bits_per_word <= 16)
 457                qup->w_size = 2;
 458
 459        qup->n_words = xfer->len / qup->w_size;
 460
 461        if (qup->n_words <= (qup->in_fifo_sz / sizeof(u32)))
 462                mode = QUP_IO_M_MODE_FIFO;
 463        else
 464                mode = QUP_IO_M_MODE_BLOCK;
 465
 466        return mode;
 467}
 468
 469/* set clock freq ... bits per word */
 470static int spi_qup_io_config(struct spi_device *spi, struct spi_transfer *xfer)
 471{
 472        struct spi_qup *controller = spi_master_get_devdata(spi->master);
 473        u32 config, iomode, mode, control;
 474        int ret, n_words;
 475
 476        if (spi->mode & SPI_LOOP && xfer->len > controller->in_fifo_sz) {
 477                dev_err(controller->dev, "too big size for loopback %d > %d\n",
 478                        xfer->len, controller->in_fifo_sz);
 479                return -EIO;
 480        }
 481
 482        ret = clk_set_rate(controller->cclk, xfer->speed_hz);
 483        if (ret) {
 484                dev_err(controller->dev, "fail to set frequency %d",
 485                        xfer->speed_hz);
 486                return -EIO;
 487        }
 488
 489        if (spi_qup_set_state(controller, QUP_STATE_RESET)) {
 490                dev_err(controller->dev, "cannot set RESET state\n");
 491                return -EIO;
 492        }
 493
 494        mode = spi_qup_get_mode(spi->master, xfer);
 495        n_words = controller->n_words;
 496
 497        if (mode == QUP_IO_M_MODE_FIFO) {
 498                writel_relaxed(n_words, controller->base + QUP_MX_READ_CNT);
 499                writel_relaxed(n_words, controller->base + QUP_MX_WRITE_CNT);
 500                /* must be zero for FIFO */
 501                writel_relaxed(0, controller->base + QUP_MX_INPUT_CNT);
 502                writel_relaxed(0, controller->base + QUP_MX_OUTPUT_CNT);
 503        } else if (!controller->use_dma) {
 504                writel_relaxed(n_words, controller->base + QUP_MX_INPUT_CNT);
 505                writel_relaxed(n_words, controller->base + QUP_MX_OUTPUT_CNT);
 506                /* must be zero for BLOCK and BAM */
 507                writel_relaxed(0, controller->base + QUP_MX_READ_CNT);
 508                writel_relaxed(0, controller->base + QUP_MX_WRITE_CNT);
 509        } else {
 510                mode = QUP_IO_M_MODE_BAM;
 511                writel_relaxed(0, controller->base + QUP_MX_READ_CNT);
 512                writel_relaxed(0, controller->base + QUP_MX_WRITE_CNT);
 513
 514                if (!controller->qup_v1) {
 515                        void __iomem *input_cnt;
 516
 517                        input_cnt = controller->base + QUP_MX_INPUT_CNT;
 518                        /*
 519                         * for DMA transfers, both QUP_MX_INPUT_CNT and
 520                         * QUP_MX_OUTPUT_CNT must be zero to all cases but one.
 521                         * That case is a non-balanced transfer when there is
 522                         * only a rx_buf.
 523                         */
 524                        if (xfer->tx_buf)
 525                                writel_relaxed(0, input_cnt);
 526                        else
 527                                writel_relaxed(n_words, input_cnt);
 528
 529                        writel_relaxed(0, controller->base + QUP_MX_OUTPUT_CNT);
 530                }
 531        }
 532
 533        iomode = readl_relaxed(controller->base + QUP_IO_M_MODES);
 534        /* Set input and output transfer mode */
 535        iomode &= ~(QUP_IO_M_INPUT_MODE_MASK | QUP_IO_M_OUTPUT_MODE_MASK);
 536
 537        if (!controller->use_dma)
 538                iomode &= ~(QUP_IO_M_PACK_EN | QUP_IO_M_UNPACK_EN);
 539        else
 540                iomode |= QUP_IO_M_PACK_EN | QUP_IO_M_UNPACK_EN;
 541
 542        iomode |= (mode << QUP_IO_M_OUTPUT_MODE_MASK_SHIFT);
 543        iomode |= (mode << QUP_IO_M_INPUT_MODE_MASK_SHIFT);
 544
 545        writel_relaxed(iomode, controller->base + QUP_IO_M_MODES);
 546
 547        control = readl_relaxed(controller->base + SPI_IO_CONTROL);
 548
 549        if (spi->mode & SPI_CPOL)
 550                control |= SPI_IO_C_CLK_IDLE_HIGH;
 551        else
 552                control &= ~SPI_IO_C_CLK_IDLE_HIGH;
 553
 554        writel_relaxed(control, controller->base + SPI_IO_CONTROL);
 555
 556        config = readl_relaxed(controller->base + SPI_CONFIG);
 557
 558        if (spi->mode & SPI_LOOP)
 559                config |= SPI_CONFIG_LOOPBACK;
 560        else
 561                config &= ~SPI_CONFIG_LOOPBACK;
 562
 563        if (spi->mode & SPI_CPHA)
 564                config &= ~SPI_CONFIG_INPUT_FIRST;
 565        else
 566                config |= SPI_CONFIG_INPUT_FIRST;
 567
 568        /*
 569         * HS_MODE improves signal stability for spi-clk high rates,
 570         * but is invalid in loop back mode.
 571         */
 572        if ((xfer->speed_hz >= SPI_HS_MIN_RATE) && !(spi->mode & SPI_LOOP))
 573                config |= SPI_CONFIG_HS_MODE;
 574        else
 575                config &= ~SPI_CONFIG_HS_MODE;
 576
 577        writel_relaxed(config, controller->base + SPI_CONFIG);
 578
 579        config = readl_relaxed(controller->base + QUP_CONFIG);
 580        config &= ~(QUP_CONFIG_NO_INPUT | QUP_CONFIG_NO_OUTPUT | QUP_CONFIG_N);
 581        config |= xfer->bits_per_word - 1;
 582        config |= QUP_CONFIG_SPI_MODE;
 583
 584        if (controller->use_dma) {
 585                if (!xfer->tx_buf)
 586                        config |= QUP_CONFIG_NO_OUTPUT;
 587                if (!xfer->rx_buf)
 588                        config |= QUP_CONFIG_NO_INPUT;
 589        }
 590
 591        writel_relaxed(config, controller->base + QUP_CONFIG);
 592
 593        /* only write to OPERATIONAL_MASK when register is present */
 594        if (!controller->qup_v1) {
 595                u32 mask = 0;
 596
 597                /*
 598                 * mask INPUT and OUTPUT service flags to prevent IRQs on FIFO
 599                 * status change in BAM mode
 600                 */
 601
 602                if (mode == QUP_IO_M_MODE_BAM)
 603                        mask = QUP_OP_IN_SERVICE_FLAG | QUP_OP_OUT_SERVICE_FLAG;
 604
 605                writel_relaxed(mask, controller->base + QUP_OPERATIONAL_MASK);
 606        }
 607
 608        return 0;
 609}
 610
 611static int spi_qup_transfer_one(struct spi_master *master,
 612                              struct spi_device *spi,
 613                              struct spi_transfer *xfer)
 614{
 615        struct spi_qup *controller = spi_master_get_devdata(master);
 616        unsigned long timeout, flags;
 617        int ret = -EIO;
 618
 619        ret = spi_qup_io_config(spi, xfer);
 620        if (ret)
 621                return ret;
 622
 623        timeout = DIV_ROUND_UP(xfer->speed_hz, MSEC_PER_SEC);
 624        timeout = DIV_ROUND_UP(xfer->len * 8, timeout);
 625        timeout = 100 * msecs_to_jiffies(timeout);
 626
 627        reinit_completion(&controller->done);
 628
 629        spin_lock_irqsave(&controller->lock, flags);
 630        controller->xfer     = xfer;
 631        controller->error    = 0;
 632        controller->rx_bytes = 0;
 633        controller->tx_bytes = 0;
 634        spin_unlock_irqrestore(&controller->lock, flags);
 635
 636        if (controller->use_dma)
 637                ret = spi_qup_do_dma(master, xfer);
 638        else
 639                ret = spi_qup_do_pio(master, xfer);
 640
 641        if (ret)
 642                goto exit;
 643
 644        if (spi_qup_set_state(controller, QUP_STATE_RUN)) {
 645                dev_warn(controller->dev, "cannot set EXECUTE state\n");
 646                goto exit;
 647        }
 648
 649        if (!wait_for_completion_timeout(&controller->done, timeout))
 650                ret = -ETIMEDOUT;
 651
 652exit:
 653        spi_qup_set_state(controller, QUP_STATE_RESET);
 654        spin_lock_irqsave(&controller->lock, flags);
 655        controller->xfer = NULL;
 656        if (!ret)
 657                ret = controller->error;
 658        spin_unlock_irqrestore(&controller->lock, flags);
 659
 660        if (ret && controller->use_dma)
 661                spi_qup_dma_terminate(master, xfer);
 662
 663        return ret;
 664}
 665
 666static bool spi_qup_can_dma(struct spi_master *master, struct spi_device *spi,
 667                            struct spi_transfer *xfer)
 668{
 669        struct spi_qup *qup = spi_master_get_devdata(master);
 670        size_t dma_align = dma_get_cache_alignment();
 671        u32 mode;
 672
 673        qup->use_dma = 0;
 674
 675        if (xfer->rx_buf && (xfer->len % qup->in_blk_sz ||
 676            IS_ERR_OR_NULL(master->dma_rx) ||
 677            !IS_ALIGNED((size_t)xfer->rx_buf, dma_align)))
 678                return false;
 679
 680        if (xfer->tx_buf && (xfer->len % qup->out_blk_sz ||
 681            IS_ERR_OR_NULL(master->dma_tx) ||
 682            !IS_ALIGNED((size_t)xfer->tx_buf, dma_align)))
 683                return false;
 684
 685        mode = spi_qup_get_mode(master, xfer);
 686        if (mode == QUP_IO_M_MODE_FIFO)
 687                return false;
 688
 689        qup->use_dma = 1;
 690
 691        return true;
 692}
 693
 694static void spi_qup_release_dma(struct spi_master *master)
 695{
 696        if (!IS_ERR_OR_NULL(master->dma_rx))
 697                dma_release_channel(master->dma_rx);
 698        if (!IS_ERR_OR_NULL(master->dma_tx))
 699                dma_release_channel(master->dma_tx);
 700}
 701
 702static int spi_qup_init_dma(struct spi_master *master, resource_size_t base)
 703{
 704        struct spi_qup *spi = spi_master_get_devdata(master);
 705        struct dma_slave_config *rx_conf = &spi->rx_conf,
 706                                *tx_conf = &spi->tx_conf;
 707        struct device *dev = spi->dev;
 708        int ret;
 709
 710        /* allocate dma resources, if available */
 711        master->dma_rx = dma_request_slave_channel_reason(dev, "rx");
 712        if (IS_ERR(master->dma_rx))
 713                return PTR_ERR(master->dma_rx);
 714
 715        master->dma_tx = dma_request_slave_channel_reason(dev, "tx");
 716        if (IS_ERR(master->dma_tx)) {
 717                ret = PTR_ERR(master->dma_tx);
 718                goto err_tx;
 719        }
 720
 721        /* set DMA parameters */
 722        rx_conf->direction = DMA_DEV_TO_MEM;
 723        rx_conf->device_fc = 1;
 724        rx_conf->src_addr = base + QUP_INPUT_FIFO;
 725        rx_conf->src_maxburst = spi->in_blk_sz;
 726
 727        tx_conf->direction = DMA_MEM_TO_DEV;
 728        tx_conf->device_fc = 1;
 729        tx_conf->dst_addr = base + QUP_OUTPUT_FIFO;
 730        tx_conf->dst_maxburst = spi->out_blk_sz;
 731
 732        ret = dmaengine_slave_config(master->dma_rx, rx_conf);
 733        if (ret) {
 734                dev_err(dev, "failed to configure RX channel\n");
 735                goto err;
 736        }
 737
 738        ret = dmaengine_slave_config(master->dma_tx, tx_conf);
 739        if (ret) {
 740                dev_err(dev, "failed to configure TX channel\n");
 741                goto err;
 742        }
 743
 744        return 0;
 745
 746err:
 747        dma_release_channel(master->dma_tx);
 748err_tx:
 749        dma_release_channel(master->dma_rx);
 750        return ret;
 751}
 752
 753static int spi_qup_probe(struct platform_device *pdev)
 754{
 755        struct spi_master *master;
 756        struct clk *iclk, *cclk;
 757        struct spi_qup *controller;
 758        struct resource *res;
 759        struct device *dev;
 760        void __iomem *base;
 761        u32 max_freq, iomode, num_cs;
 762        int ret, irq, size;
 763
 764        dev = &pdev->dev;
 765        res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 766        base = devm_ioremap_resource(dev, res);
 767        if (IS_ERR(base))
 768                return PTR_ERR(base);
 769
 770        irq = platform_get_irq(pdev, 0);
 771        if (irq < 0)
 772                return irq;
 773
 774        cclk = devm_clk_get(dev, "core");
 775        if (IS_ERR(cclk))
 776                return PTR_ERR(cclk);
 777
 778        iclk = devm_clk_get(dev, "iface");
 779        if (IS_ERR(iclk))
 780                return PTR_ERR(iclk);
 781
 782        /* This is optional parameter */
 783        if (of_property_read_u32(dev->of_node, "spi-max-frequency", &max_freq))
 784                max_freq = SPI_MAX_RATE;
 785
 786        if (!max_freq || max_freq > SPI_MAX_RATE) {
 787                dev_err(dev, "invalid clock frequency %d\n", max_freq);
 788                return -ENXIO;
 789        }
 790
 791        ret = clk_prepare_enable(cclk);
 792        if (ret) {
 793                dev_err(dev, "cannot enable core clock\n");
 794                return ret;
 795        }
 796
 797        ret = clk_prepare_enable(iclk);
 798        if (ret) {
 799                clk_disable_unprepare(cclk);
 800                dev_err(dev, "cannot enable iface clock\n");
 801                return ret;
 802        }
 803
 804        master = spi_alloc_master(dev, sizeof(struct spi_qup));
 805        if (!master) {
 806                clk_disable_unprepare(cclk);
 807                clk_disable_unprepare(iclk);
 808                dev_err(dev, "cannot allocate master\n");
 809                return -ENOMEM;
 810        }
 811
 812        /* use num-cs unless not present or out of range */
 813        if (of_property_read_u32(dev->of_node, "num-cs", &num_cs) ||
 814            num_cs > SPI_NUM_CHIPSELECTS)
 815                master->num_chipselect = SPI_NUM_CHIPSELECTS;
 816        else
 817                master->num_chipselect = num_cs;
 818
 819        master->bus_num = pdev->id;
 820        master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH | SPI_LOOP;
 821        master->bits_per_word_mask = SPI_BPW_RANGE_MASK(4, 32);
 822        master->max_speed_hz = max_freq;
 823        master->transfer_one = spi_qup_transfer_one;
 824        master->dev.of_node = pdev->dev.of_node;
 825        master->auto_runtime_pm = true;
 826        master->dma_alignment = dma_get_cache_alignment();
 827        master->max_dma_len = SPI_MAX_DMA_XFER;
 828
 829        platform_set_drvdata(pdev, master);
 830
 831        controller = spi_master_get_devdata(master);
 832
 833        controller->dev = dev;
 834        controller->base = base;
 835        controller->iclk = iclk;
 836        controller->cclk = cclk;
 837        controller->irq = irq;
 838
 839        ret = spi_qup_init_dma(master, res->start);
 840        if (ret == -EPROBE_DEFER)
 841                goto error;
 842        else if (!ret)
 843                master->can_dma = spi_qup_can_dma;
 844
 845        /* set v1 flag if device is version 1 */
 846        if (of_device_is_compatible(dev->of_node, "qcom,spi-qup-v1.1.1"))
 847                controller->qup_v1 = 1;
 848
 849        spin_lock_init(&controller->lock);
 850        init_completion(&controller->done);
 851
 852        iomode = readl_relaxed(base + QUP_IO_M_MODES);
 853
 854        size = QUP_IO_M_OUTPUT_BLOCK_SIZE(iomode);
 855        if (size)
 856                controller->out_blk_sz = size * 16;
 857        else
 858                controller->out_blk_sz = 4;
 859
 860        size = QUP_IO_M_INPUT_BLOCK_SIZE(iomode);
 861        if (size)
 862                controller->in_blk_sz = size * 16;
 863        else
 864                controller->in_blk_sz = 4;
 865
 866        size = QUP_IO_M_OUTPUT_FIFO_SIZE(iomode);
 867        controller->out_fifo_sz = controller->out_blk_sz * (2 << size);
 868
 869        size = QUP_IO_M_INPUT_FIFO_SIZE(iomode);
 870        controller->in_fifo_sz = controller->in_blk_sz * (2 << size);
 871
 872        dev_info(dev, "IN:block:%d, fifo:%d, OUT:block:%d, fifo:%d\n",
 873                 controller->in_blk_sz, controller->in_fifo_sz,
 874                 controller->out_blk_sz, controller->out_fifo_sz);
 875
 876        writel_relaxed(1, base + QUP_SW_RESET);
 877
 878        ret = spi_qup_set_state(controller, QUP_STATE_RESET);
 879        if (ret) {
 880                dev_err(dev, "cannot set RESET state\n");
 881                goto error_dma;
 882        }
 883
 884        writel_relaxed(0, base + QUP_OPERATIONAL);
 885        writel_relaxed(0, base + QUP_IO_M_MODES);
 886
 887        if (!controller->qup_v1)
 888                writel_relaxed(0, base + QUP_OPERATIONAL_MASK);
 889
 890        writel_relaxed(SPI_ERROR_CLK_UNDER_RUN | SPI_ERROR_CLK_OVER_RUN,
 891                       base + SPI_ERROR_FLAGS_EN);
 892
 893        /* if earlier version of the QUP, disable INPUT_OVERRUN */
 894        if (controller->qup_v1)
 895                writel_relaxed(QUP_ERROR_OUTPUT_OVER_RUN |
 896                        QUP_ERROR_INPUT_UNDER_RUN | QUP_ERROR_OUTPUT_UNDER_RUN,
 897                        base + QUP_ERROR_FLAGS_EN);
 898
 899        writel_relaxed(0, base + SPI_CONFIG);
 900        writel_relaxed(SPI_IO_C_NO_TRI_STATE, base + SPI_IO_CONTROL);
 901
 902        ret = devm_request_irq(dev, irq, spi_qup_qup_irq,
 903                               IRQF_TRIGGER_HIGH, pdev->name, controller);
 904        if (ret)
 905                goto error_dma;
 906
 907        pm_runtime_set_autosuspend_delay(dev, MSEC_PER_SEC);
 908        pm_runtime_use_autosuspend(dev);
 909        pm_runtime_set_active(dev);
 910        pm_runtime_enable(dev);
 911
 912        ret = devm_spi_register_master(dev, master);
 913        if (ret)
 914                goto disable_pm;
 915
 916        return 0;
 917
 918disable_pm:
 919        pm_runtime_disable(&pdev->dev);
 920error_dma:
 921        spi_qup_release_dma(master);
 922error:
 923        clk_disable_unprepare(cclk);
 924        clk_disable_unprepare(iclk);
 925        spi_master_put(master);
 926        return ret;
 927}
 928
 929#ifdef CONFIG_PM
 930static int spi_qup_pm_suspend_runtime(struct device *device)
 931{
 932        struct spi_master *master = dev_get_drvdata(device);
 933        struct spi_qup *controller = spi_master_get_devdata(master);
 934        u32 config;
 935
 936        /* Enable clocks auto gaiting */
 937        config = readl(controller->base + QUP_CONFIG);
 938        config |= QUP_CONFIG_CLOCK_AUTO_GATE;
 939        writel_relaxed(config, controller->base + QUP_CONFIG);
 940        return 0;
 941}
 942
 943static int spi_qup_pm_resume_runtime(struct device *device)
 944{
 945        struct spi_master *master = dev_get_drvdata(device);
 946        struct spi_qup *controller = spi_master_get_devdata(master);
 947        u32 config;
 948
 949        /* Disable clocks auto gaiting */
 950        config = readl_relaxed(controller->base + QUP_CONFIG);
 951        config &= ~QUP_CONFIG_CLOCK_AUTO_GATE;
 952        writel_relaxed(config, controller->base + QUP_CONFIG);
 953        return 0;
 954}
 955#endif /* CONFIG_PM */
 956
 957#ifdef CONFIG_PM_SLEEP
 958static int spi_qup_suspend(struct device *device)
 959{
 960        struct spi_master *master = dev_get_drvdata(device);
 961        struct spi_qup *controller = spi_master_get_devdata(master);
 962        int ret;
 963
 964        ret = spi_master_suspend(master);
 965        if (ret)
 966                return ret;
 967
 968        ret = spi_qup_set_state(controller, QUP_STATE_RESET);
 969        if (ret)
 970                return ret;
 971
 972        clk_disable_unprepare(controller->cclk);
 973        clk_disable_unprepare(controller->iclk);
 974        return 0;
 975}
 976
 977static int spi_qup_resume(struct device *device)
 978{
 979        struct spi_master *master = dev_get_drvdata(device);
 980        struct spi_qup *controller = spi_master_get_devdata(master);
 981        int ret;
 982
 983        ret = clk_prepare_enable(controller->iclk);
 984        if (ret)
 985                return ret;
 986
 987        ret = clk_prepare_enable(controller->cclk);
 988        if (ret)
 989                return ret;
 990
 991        ret = spi_qup_set_state(controller, QUP_STATE_RESET);
 992        if (ret)
 993                return ret;
 994
 995        return spi_master_resume(master);
 996}
 997#endif /* CONFIG_PM_SLEEP */
 998
 999static int spi_qup_remove(struct platform_device *pdev)
1000{
1001        struct spi_master *master = dev_get_drvdata(&pdev->dev);
1002        struct spi_qup *controller = spi_master_get_devdata(master);
1003        int ret;
1004
1005        ret = pm_runtime_get_sync(&pdev->dev);
1006        if (ret < 0)
1007                return ret;
1008
1009        ret = spi_qup_set_state(controller, QUP_STATE_RESET);
1010        if (ret)
1011                return ret;
1012
1013        spi_qup_release_dma(master);
1014
1015        clk_disable_unprepare(controller->cclk);
1016        clk_disable_unprepare(controller->iclk);
1017
1018        pm_runtime_put_noidle(&pdev->dev);
1019        pm_runtime_disable(&pdev->dev);
1020        return 0;
1021}
1022
1023static const struct of_device_id spi_qup_dt_match[] = {
1024        { .compatible = "qcom,spi-qup-v1.1.1", },
1025        { .compatible = "qcom,spi-qup-v2.1.1", },
1026        { .compatible = "qcom,spi-qup-v2.2.1", },
1027        { }
1028};
1029MODULE_DEVICE_TABLE(of, spi_qup_dt_match);
1030
1031static const struct dev_pm_ops spi_qup_dev_pm_ops = {
1032        SET_SYSTEM_SLEEP_PM_OPS(spi_qup_suspend, spi_qup_resume)
1033        SET_RUNTIME_PM_OPS(spi_qup_pm_suspend_runtime,
1034                           spi_qup_pm_resume_runtime,
1035                           NULL)
1036};
1037
1038static struct platform_driver spi_qup_driver = {
1039        .driver = {
1040                .name           = "spi_qup",
1041                .pm             = &spi_qup_dev_pm_ops,
1042                .of_match_table = spi_qup_dt_match,
1043        },
1044        .probe = spi_qup_probe,
1045        .remove = spi_qup_remove,
1046};
1047module_platform_driver(spi_qup_driver);
1048
1049MODULE_LICENSE("GPL v2");
1050MODULE_ALIAS("platform:spi_qup");
1051