Merge tag 'copy-file-range-fixes-1' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux
[linux-2.6-microblaze.git] / drivers / mailbox / bcm-pdc-mailbox.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright 2016 Broadcom
4  */
5
6 /*
7  * Broadcom PDC Mailbox Driver
8  * The PDC provides a ring based programming interface to one or more hardware
9  * offload engines. For example, the PDC driver works with both SPU-M and SPU2
10  * cryptographic offload hardware. In some chips the PDC is referred to as MDE,
11  * and in others the FA2/FA+ hardware is used with this PDC driver.
12  *
13  * The PDC driver registers with the Linux mailbox framework as a mailbox
14  * controller, once for each PDC instance. Ring 0 for each PDC is registered as
15  * a mailbox channel. The PDC driver uses interrupts to determine when data
16  * transfers to and from an offload engine are complete. The PDC driver uses
17  * threaded IRQs so that response messages are handled outside of interrupt
18  * context.
19  *
20  * The PDC driver allows multiple messages to be pending in the descriptor
21  * rings. The tx_msg_start descriptor index indicates where the last message
22  * starts. The txin_numd value at this index indicates how many descriptor
23  * indexes make up the message. Similar state is kept on the receive side. When
24  * an rx interrupt indicates a response is ready, the PDC driver processes numd
25  * descriptors from the tx and rx ring, thus processing one response at a time.
26  */
27
28 #include <linux/errno.h>
29 #include <linux/module.h>
30 #include <linux/init.h>
31 #include <linux/slab.h>
32 #include <linux/debugfs.h>
33 #include <linux/interrupt.h>
34 #include <linux/wait.h>
35 #include <linux/platform_device.h>
36 #include <linux/io.h>
37 #include <linux/of.h>
38 #include <linux/of_device.h>
39 #include <linux/of_address.h>
40 #include <linux/of_irq.h>
41 #include <linux/mailbox_controller.h>
42 #include <linux/mailbox/brcm-message.h>
43 #include <linux/scatterlist.h>
44 #include <linux/dma-direction.h>
45 #include <linux/dma-mapping.h>
46 #include <linux/dmapool.h>
47
48 #define PDC_SUCCESS  0
49
50 #define RING_ENTRY_SIZE   sizeof(struct dma64dd)
51
52 /* # entries in PDC dma ring */
53 #define PDC_RING_ENTRIES  512
54 /*
55  * Minimum number of ring descriptor entries that must be free to tell mailbox
56  * framework that it can submit another request
57  */
58 #define PDC_RING_SPACE_MIN  15
59
60 #define PDC_RING_SIZE    (PDC_RING_ENTRIES * RING_ENTRY_SIZE)
61 /* Rings are 8k aligned */
62 #define RING_ALIGN_ORDER  13
63 #define RING_ALIGN        BIT(RING_ALIGN_ORDER)
64
65 #define RX_BUF_ALIGN_ORDER  5
66 #define RX_BUF_ALIGN        BIT(RX_BUF_ALIGN_ORDER)
67
68 /* descriptor bumping macros */
69 #define XXD(x, max_mask)              ((x) & (max_mask))
70 #define TXD(x, max_mask)              XXD((x), (max_mask))
71 #define RXD(x, max_mask)              XXD((x), (max_mask))
72 #define NEXTTXD(i, max_mask)          TXD((i) + 1, (max_mask))
73 #define PREVTXD(i, max_mask)          TXD((i) - 1, (max_mask))
74 #define NEXTRXD(i, max_mask)          RXD((i) + 1, (max_mask))
75 #define PREVRXD(i, max_mask)          RXD((i) - 1, (max_mask))
76 #define NTXDACTIVE(h, t, max_mask)    TXD((t) - (h), (max_mask))
77 #define NRXDACTIVE(h, t, max_mask)    RXD((t) - (h), (max_mask))
78
79 /* Length of BCM header at start of SPU msg, in bytes */
80 #define BCM_HDR_LEN  8
81
82 /*
83  * PDC driver reserves ringset 0 on each SPU for its own use. The driver does
84  * not currently support use of multiple ringsets on a single PDC engine.
85  */
86 #define PDC_RINGSET  0
87
88 /*
89  * Interrupt mask and status definitions. Enable interrupts for tx and rx on
90  * ring 0
91  */
92 #define PDC_RCVINT_0         (16 + PDC_RINGSET)
93 #define PDC_RCVINTEN_0       BIT(PDC_RCVINT_0)
94 #define PDC_INTMASK          (PDC_RCVINTEN_0)
95 #define PDC_LAZY_FRAMECOUNT  1
96 #define PDC_LAZY_TIMEOUT     10000
97 #define PDC_LAZY_INT  (PDC_LAZY_TIMEOUT | (PDC_LAZY_FRAMECOUNT << 24))
98 #define PDC_INTMASK_OFFSET   0x24
99 #define PDC_INTSTATUS_OFFSET 0x20
100 #define PDC_RCVLAZY0_OFFSET  (0x30 + 4 * PDC_RINGSET)
101 #define FA_RCVLAZY0_OFFSET   0x100
102
103 /*
104  * For SPU2, configure MDE_CKSUM_CONTROL to write 17 bytes of metadata
105  * before frame
106  */
107 #define PDC_SPU2_RESP_HDR_LEN  17
108 #define PDC_CKSUM_CTRL         BIT(27)
109 #define PDC_CKSUM_CTRL_OFFSET  0x400
110
111 #define PDC_SPUM_RESP_HDR_LEN  32
112
113 /*
114  * Sets the following bits for write to transmit control reg:
115  * 11    - PtyChkDisable - parity check is disabled
116  * 20:18 - BurstLen = 3 -> 2^7 = 128 byte data reads from memory
117  */
118 #define PDC_TX_CTL              0x000C0800
119
120 /* Bit in tx control reg to enable tx channel */
121 #define PDC_TX_ENABLE           0x1
122
123 /*
124  * Sets the following bits for write to receive control reg:
125  * 7:1   - RcvOffset - size in bytes of status region at start of rx frame buf
126  * 9     - SepRxHdrDescEn - place start of new frames only in descriptors
127  *                          that have StartOfFrame set
128  * 10    - OflowContinue - on rx FIFO overflow, clear rx fifo, discard all
129  *                         remaining bytes in current frame, report error
130  *                         in rx frame status for current frame
131  * 11    - PtyChkDisable - parity check is disabled
132  * 20:18 - BurstLen = 3 -> 2^7 = 128 byte data reads from memory
133  */
134 #define PDC_RX_CTL              0x000C0E00
135
136 /* Bit in rx control reg to enable rx channel */
137 #define PDC_RX_ENABLE           0x1
138
139 #define CRYPTO_D64_RS0_CD_MASK   ((PDC_RING_ENTRIES * RING_ENTRY_SIZE) - 1)
140
141 /* descriptor flags */
142 #define D64_CTRL1_EOT   BIT(28) /* end of descriptor table */
143 #define D64_CTRL1_IOC   BIT(29) /* interrupt on complete */
144 #define D64_CTRL1_EOF   BIT(30) /* end of frame */
145 #define D64_CTRL1_SOF   BIT(31) /* start of frame */
146
147 #define RX_STATUS_OVERFLOW       0x00800000
148 #define RX_STATUS_LEN            0x0000FFFF
149
150 #define PDC_TXREGS_OFFSET  0x200
151 #define PDC_RXREGS_OFFSET  0x220
152
153 /* Maximum size buffer the DMA engine can handle */
154 #define PDC_DMA_BUF_MAX 16384
155
156 enum pdc_hw {
157         FA_HW,          /* FA2/FA+ hardware (i.e. Northstar Plus) */
158         PDC_HW          /* PDC/MDE hardware (i.e. Northstar 2, Pegasus) */
159 };
160
161 struct pdc_dma_map {
162         void *ctx;          /* opaque context associated with frame */
163 };
164
165 /* dma descriptor */
166 struct dma64dd {
167         u32 ctrl1;      /* misc control bits */
168         u32 ctrl2;      /* buffer count and address extension */
169         u32 addrlow;    /* memory address of the date buffer, bits 31:0 */
170         u32 addrhigh;   /* memory address of the date buffer, bits 63:32 */
171 };
172
173 /* dma registers per channel(xmt or rcv) */
174 struct dma64_regs {
175         u32  control;   /* enable, et al */
176         u32  ptr;       /* last descriptor posted to chip */
177         u32  addrlow;   /* descriptor ring base address low 32-bits */
178         u32  addrhigh;  /* descriptor ring base address bits 63:32 */
179         u32  status0;   /* last rx descriptor written by hw */
180         u32  status1;   /* driver does not use */
181 };
182
183 /* cpp contortions to concatenate w/arg prescan */
184 #ifndef PAD
185 #define _PADLINE(line)  pad ## line
186 #define _XSTR(line)     _PADLINE(line)
187 #define PAD             _XSTR(__LINE__)
188 #endif  /* PAD */
189
190 /* dma registers. matches hw layout. */
191 struct dma64 {
192         struct dma64_regs dmaxmt;  /* dma tx */
193         u32          PAD[2];
194         struct dma64_regs dmarcv;  /* dma rx */
195         u32          PAD[2];
196 };
197
198 /* PDC registers */
199 struct pdc_regs {
200         u32  devcontrol;             /* 0x000 */
201         u32  devstatus;              /* 0x004 */
202         u32  PAD;
203         u32  biststatus;             /* 0x00c */
204         u32  PAD[4];
205         u32  intstatus;              /* 0x020 */
206         u32  intmask;                /* 0x024 */
207         u32  gptimer;                /* 0x028 */
208
209         u32  PAD;
210         u32  intrcvlazy_0;           /* 0x030 (Only in PDC, not FA2) */
211         u32  intrcvlazy_1;           /* 0x034 (Only in PDC, not FA2) */
212         u32  intrcvlazy_2;           /* 0x038 (Only in PDC, not FA2) */
213         u32  intrcvlazy_3;           /* 0x03c (Only in PDC, not FA2) */
214
215         u32  PAD[48];
216         u32  fa_intrecvlazy;         /* 0x100 (Only in FA2, not PDC) */
217         u32  flowctlthresh;          /* 0x104 */
218         u32  wrrthresh;              /* 0x108 */
219         u32  gmac_idle_cnt_thresh;   /* 0x10c */
220
221         u32  PAD[4];
222         u32  ifioaccessaddr;         /* 0x120 */
223         u32  ifioaccessbyte;         /* 0x124 */
224         u32  ifioaccessdata;         /* 0x128 */
225
226         u32  PAD[21];
227         u32  phyaccess;              /* 0x180 */
228         u32  PAD;
229         u32  phycontrol;             /* 0x188 */
230         u32  txqctl;                 /* 0x18c */
231         u32  rxqctl;                 /* 0x190 */
232         u32  gpioselect;             /* 0x194 */
233         u32  gpio_output_en;         /* 0x198 */
234         u32  PAD;                    /* 0x19c */
235         u32  txq_rxq_mem_ctl;        /* 0x1a0 */
236         u32  memory_ecc_status;      /* 0x1a4 */
237         u32  serdes_ctl;             /* 0x1a8 */
238         u32  serdes_status0;         /* 0x1ac */
239         u32  serdes_status1;         /* 0x1b0 */
240         u32  PAD[11];                /* 0x1b4-1dc */
241         u32  clk_ctl_st;             /* 0x1e0 */
242         u32  hw_war;                 /* 0x1e4 (Only in PDC, not FA2) */
243         u32  pwrctl;                 /* 0x1e8 */
244         u32  PAD[5];
245
246 #define PDC_NUM_DMA_RINGS   4
247         struct dma64 dmaregs[PDC_NUM_DMA_RINGS];  /* 0x0200 - 0x2fc */
248
249         /* more registers follow, but we don't use them */
250 };
251
252 /* structure for allocating/freeing DMA rings */
253 struct pdc_ring_alloc {
254         dma_addr_t  dmabase; /* DMA address of start of ring */
255         void       *vbase;   /* base kernel virtual address of ring */
256         u32         size;    /* ring allocation size in bytes */
257 };
258
259 /*
260  * context associated with a receive descriptor.
261  * @rxp_ctx: opaque context associated with frame that starts at each
262  *           rx ring index.
263  * @dst_sg:  Scatterlist used to form reply frames beginning at a given ring
264  *           index. Retained in order to unmap each sg after reply is processed.
265  * @rxin_numd: Number of rx descriptors associated with the message that starts
266  *             at a descriptor index. Not set for every index. For example,
267  *             if descriptor index i points to a scatterlist with 4 entries,
268  *             then the next three descriptor indexes don't have a value set.
269  * @resp_hdr: Virtual address of buffer used to catch DMA rx status
270  * @resp_hdr_daddr: physical address of DMA rx status buffer
271  */
272 struct pdc_rx_ctx {
273         void *rxp_ctx;
274         struct scatterlist *dst_sg;
275         u32  rxin_numd;
276         void *resp_hdr;
277         dma_addr_t resp_hdr_daddr;
278 };
279
280 /* PDC state structure */
281 struct pdc_state {
282         /* Index of the PDC whose state is in this structure instance */
283         u8 pdc_idx;
284
285         /* Platform device for this PDC instance */
286         struct platform_device *pdev;
287
288         /*
289          * Each PDC instance has a mailbox controller. PDC receives request
290          * messages through mailboxes, and sends response messages through the
291          * mailbox framework.
292          */
293         struct mbox_controller mbc;
294
295         unsigned int pdc_irq;
296
297         /* tasklet for deferred processing after DMA rx interrupt */
298         struct tasklet_struct rx_tasklet;
299
300         /* Number of bytes of receive status prior to each rx frame */
301         u32 rx_status_len;
302         /* Whether a BCM header is prepended to each frame */
303         bool use_bcm_hdr;
304         /* Sum of length of BCM header and rx status header */
305         u32 pdc_resp_hdr_len;
306
307         /* The base virtual address of DMA hw registers */
308         void __iomem *pdc_reg_vbase;
309
310         /* Pool for allocation of DMA rings */
311         struct dma_pool *ring_pool;
312
313         /* Pool for allocation of metadata buffers for response messages */
314         struct dma_pool *rx_buf_pool;
315
316         /*
317          * The base virtual address of DMA tx/rx descriptor rings. Corresponding
318          * DMA address and size of ring allocation.
319          */
320         struct pdc_ring_alloc tx_ring_alloc;
321         struct pdc_ring_alloc rx_ring_alloc;
322
323         struct pdc_regs *regs;    /* start of PDC registers */
324
325         struct dma64_regs *txregs_64; /* dma tx engine registers */
326         struct dma64_regs *rxregs_64; /* dma rx engine registers */
327
328         /*
329          * Arrays of PDC_RING_ENTRIES descriptors
330          * To use multiple ringsets, this needs to be extended
331          */
332         struct dma64dd   *txd_64;  /* tx descriptor ring */
333         struct dma64dd   *rxd_64;  /* rx descriptor ring */
334
335         /* descriptor ring sizes */
336         u32      ntxd;       /* # tx descriptors */
337         u32      nrxd;       /* # rx descriptors */
338         u32      nrxpost;    /* # rx buffers to keep posted */
339         u32      ntxpost;    /* max number of tx buffers that can be posted */
340
341         /*
342          * Index of next tx descriptor to reclaim. That is, the descriptor
343          * index of the oldest tx buffer for which the host has yet to process
344          * the corresponding response.
345          */
346         u32  txin;
347
348         /*
349          * Index of the first receive descriptor for the sequence of
350          * message fragments currently under construction. Used to build up
351          * the rxin_numd count for a message. Updated to rxout when the host
352          * starts a new sequence of rx buffers for a new message.
353          */
354         u32  tx_msg_start;
355
356         /* Index of next tx descriptor to post. */
357         u32  txout;
358
359         /*
360          * Number of tx descriptors associated with the message that starts
361          * at this tx descriptor index.
362          */
363         u32      txin_numd[PDC_RING_ENTRIES];
364
365         /*
366          * Index of next rx descriptor to reclaim. This is the index of
367          * the next descriptor whose data has yet to be processed by the host.
368          */
369         u32  rxin;
370
371         /*
372          * Index of the first receive descriptor for the sequence of
373          * message fragments currently under construction. Used to build up
374          * the rxin_numd count for a message. Updated to rxout when the host
375          * starts a new sequence of rx buffers for a new message.
376          */
377         u32  rx_msg_start;
378
379         /*
380          * Saved value of current hardware rx descriptor index.
381          * The last rx buffer written by the hw is the index previous to
382          * this one.
383          */
384         u32  last_rx_curr;
385
386         /* Index of next rx descriptor to post. */
387         u32  rxout;
388
389         struct pdc_rx_ctx rx_ctx[PDC_RING_ENTRIES];
390
391         /*
392          * Scatterlists used to form request and reply frames beginning at a
393          * given ring index. Retained in order to unmap each sg after reply
394          * is processed
395          */
396         struct scatterlist *src_sg[PDC_RING_ENTRIES];
397
398         struct dentry *debugfs_stats;  /* debug FS stats file for this PDC */
399
400         /* counters */
401         u32  pdc_requests;     /* number of request messages submitted */
402         u32  pdc_replies;      /* number of reply messages received */
403         u32  last_tx_not_done; /* too few tx descriptors to indicate done */
404         u32  tx_ring_full;     /* unable to accept msg because tx ring full */
405         u32  rx_ring_full;     /* unable to accept msg because rx ring full */
406         u32  txnobuf;          /* unable to create tx descriptor */
407         u32  rxnobuf;          /* unable to create rx descriptor */
408         u32  rx_oflow;         /* count of rx overflows */
409
410         /* hardware type - FA2 or PDC/MDE */
411         enum pdc_hw hw_type;
412 };
413
414 /* Global variables */
415
416 struct pdc_globals {
417         /* Actual number of SPUs in hardware, as reported by device tree */
418         u32 num_spu;
419 };
420
421 static struct pdc_globals pdcg;
422
423 /* top level debug FS directory for PDC driver */
424 static struct dentry *debugfs_dir;
425
426 static ssize_t pdc_debugfs_read(struct file *filp, char __user *ubuf,
427                                 size_t count, loff_t *offp)
428 {
429         struct pdc_state *pdcs;
430         char *buf;
431         ssize_t ret, out_offset, out_count;
432
433         out_count = 512;
434
435         buf = kmalloc(out_count, GFP_KERNEL);
436         if (!buf)
437                 return -ENOMEM;
438
439         pdcs = filp->private_data;
440         out_offset = 0;
441         out_offset += snprintf(buf + out_offset, out_count - out_offset,
442                                "SPU %u stats:\n", pdcs->pdc_idx);
443         out_offset += snprintf(buf + out_offset, out_count - out_offset,
444                                "PDC requests....................%u\n",
445                                pdcs->pdc_requests);
446         out_offset += snprintf(buf + out_offset, out_count - out_offset,
447                                "PDC responses...................%u\n",
448                                pdcs->pdc_replies);
449         out_offset += snprintf(buf + out_offset, out_count - out_offset,
450                                "Tx not done.....................%u\n",
451                                pdcs->last_tx_not_done);
452         out_offset += snprintf(buf + out_offset, out_count - out_offset,
453                                "Tx ring full....................%u\n",
454                                pdcs->tx_ring_full);
455         out_offset += snprintf(buf + out_offset, out_count - out_offset,
456                                "Rx ring full....................%u\n",
457                                pdcs->rx_ring_full);
458         out_offset += snprintf(buf + out_offset, out_count - out_offset,
459                                "Tx desc write fail. Ring full...%u\n",
460                                pdcs->txnobuf);
461         out_offset += snprintf(buf + out_offset, out_count - out_offset,
462                                "Rx desc write fail. Ring full...%u\n",
463                                pdcs->rxnobuf);
464         out_offset += snprintf(buf + out_offset, out_count - out_offset,
465                                "Receive overflow................%u\n",
466                                pdcs->rx_oflow);
467         out_offset += snprintf(buf + out_offset, out_count - out_offset,
468                                "Num frags in rx ring............%u\n",
469                                NRXDACTIVE(pdcs->rxin, pdcs->last_rx_curr,
470                                           pdcs->nrxpost));
471
472         if (out_offset > out_count)
473                 out_offset = out_count;
474
475         ret = simple_read_from_buffer(ubuf, count, offp, buf, out_offset);
476         kfree(buf);
477         return ret;
478 }
479
480 static const struct file_operations pdc_debugfs_stats = {
481         .owner = THIS_MODULE,
482         .open = simple_open,
483         .read = pdc_debugfs_read,
484 };
485
486 /**
487  * pdc_setup_debugfs() - Create the debug FS directories. If the top-level
488  * directory has not yet been created, create it now. Create a stats file in
489  * this directory for a SPU.
490  * @pdcs: PDC state structure
491  */
492 static void pdc_setup_debugfs(struct pdc_state *pdcs)
493 {
494         char spu_stats_name[16];
495
496         if (!debugfs_initialized())
497                 return;
498
499         snprintf(spu_stats_name, 16, "pdc%d_stats", pdcs->pdc_idx);
500         if (!debugfs_dir)
501                 debugfs_dir = debugfs_create_dir(KBUILD_MODNAME, NULL);
502
503         /* S_IRUSR == 0400 */
504         pdcs->debugfs_stats = debugfs_create_file(spu_stats_name, 0400,
505                                                   debugfs_dir, pdcs,
506                                                   &pdc_debugfs_stats);
507 }
508
509 static void pdc_free_debugfs(void)
510 {
511         debugfs_remove_recursive(debugfs_dir);
512         debugfs_dir = NULL;
513 }
514
515 /**
516  * pdc_build_rxd() - Build DMA descriptor to receive SPU result.
517  * @pdcs:      PDC state for SPU that will generate result
518  * @dma_addr:  DMA address of buffer that descriptor is being built for
519  * @buf_len:   Length of the receive buffer, in bytes
520  * @flags:     Flags to be stored in descriptor
521  */
522 static inline void
523 pdc_build_rxd(struct pdc_state *pdcs, dma_addr_t dma_addr,
524               u32 buf_len, u32 flags)
525 {
526         struct device *dev = &pdcs->pdev->dev;
527         struct dma64dd *rxd = &pdcs->rxd_64[pdcs->rxout];
528
529         dev_dbg(dev,
530                 "Writing rx descriptor for PDC %u at index %u with length %u. flags %#x\n",
531                 pdcs->pdc_idx, pdcs->rxout, buf_len, flags);
532
533         rxd->addrlow = cpu_to_le32(lower_32_bits(dma_addr));
534         rxd->addrhigh = cpu_to_le32(upper_32_bits(dma_addr));
535         rxd->ctrl1 = cpu_to_le32(flags);
536         rxd->ctrl2 = cpu_to_le32(buf_len);
537
538         /* bump ring index and return */
539         pdcs->rxout = NEXTRXD(pdcs->rxout, pdcs->nrxpost);
540 }
541
542 /**
543  * pdc_build_txd() - Build a DMA descriptor to transmit a SPU request to
544  * hardware.
545  * @pdcs:        PDC state for the SPU that will process this request
546  * @dma_addr:    DMA address of packet to be transmitted
547  * @buf_len:     Length of tx buffer, in bytes
548  * @flags:       Flags to be stored in descriptor
549  */
550 static inline void
551 pdc_build_txd(struct pdc_state *pdcs, dma_addr_t dma_addr, u32 buf_len,
552               u32 flags)
553 {
554         struct device *dev = &pdcs->pdev->dev;
555         struct dma64dd *txd = &pdcs->txd_64[pdcs->txout];
556
557         dev_dbg(dev,
558                 "Writing tx descriptor for PDC %u at index %u with length %u, flags %#x\n",
559                 pdcs->pdc_idx, pdcs->txout, buf_len, flags);
560
561         txd->addrlow = cpu_to_le32(lower_32_bits(dma_addr));
562         txd->addrhigh = cpu_to_le32(upper_32_bits(dma_addr));
563         txd->ctrl1 = cpu_to_le32(flags);
564         txd->ctrl2 = cpu_to_le32(buf_len);
565
566         /* bump ring index and return */
567         pdcs->txout = NEXTTXD(pdcs->txout, pdcs->ntxpost);
568 }
569
570 /**
571  * pdc_receive_one() - Receive a response message from a given SPU.
572  * @pdcs:    PDC state for the SPU to receive from
573  *
574  * When the return code indicates success, the response message is available in
575  * the receive buffers provided prior to submission of the request.
576  *
577  * Return:  PDC_SUCCESS if one or more receive descriptors was processed
578  *          -EAGAIN indicates that no response message is available
579  *          -EIO an error occurred
580  */
581 static int
582 pdc_receive_one(struct pdc_state *pdcs)
583 {
584         struct device *dev = &pdcs->pdev->dev;
585         struct mbox_controller *mbc;
586         struct mbox_chan *chan;
587         struct brcm_message mssg;
588         u32 len, rx_status;
589         u32 num_frags;
590         u8 *resp_hdr;    /* virtual addr of start of resp message DMA header */
591         u32 frags_rdy;   /* number of fragments ready to read */
592         u32 rx_idx;      /* ring index of start of receive frame */
593         dma_addr_t resp_hdr_daddr;
594         struct pdc_rx_ctx *rx_ctx;
595
596         mbc = &pdcs->mbc;
597         chan = &mbc->chans[0];
598         mssg.type = BRCM_MESSAGE_SPU;
599
600         /*
601          * return if a complete response message is not yet ready.
602          * rxin_numd[rxin] is the number of fragments in the next msg
603          * to read.
604          */
605         frags_rdy = NRXDACTIVE(pdcs->rxin, pdcs->last_rx_curr, pdcs->nrxpost);
606         if ((frags_rdy == 0) ||
607             (frags_rdy < pdcs->rx_ctx[pdcs->rxin].rxin_numd))
608                 /* No response ready */
609                 return -EAGAIN;
610
611         num_frags = pdcs->txin_numd[pdcs->txin];
612         WARN_ON(num_frags == 0);
613
614         dma_unmap_sg(dev, pdcs->src_sg[pdcs->txin],
615                      sg_nents(pdcs->src_sg[pdcs->txin]), DMA_TO_DEVICE);
616
617         pdcs->txin = (pdcs->txin + num_frags) & pdcs->ntxpost;
618
619         dev_dbg(dev, "PDC %u reclaimed %d tx descriptors",
620                 pdcs->pdc_idx, num_frags);
621
622         rx_idx = pdcs->rxin;
623         rx_ctx = &pdcs->rx_ctx[rx_idx];
624         num_frags = rx_ctx->rxin_numd;
625         /* Return opaque context with result */
626         mssg.ctx = rx_ctx->rxp_ctx;
627         rx_ctx->rxp_ctx = NULL;
628         resp_hdr = rx_ctx->resp_hdr;
629         resp_hdr_daddr = rx_ctx->resp_hdr_daddr;
630         dma_unmap_sg(dev, rx_ctx->dst_sg, sg_nents(rx_ctx->dst_sg),
631                      DMA_FROM_DEVICE);
632
633         pdcs->rxin = (pdcs->rxin + num_frags) & pdcs->nrxpost;
634
635         dev_dbg(dev, "PDC %u reclaimed %d rx descriptors",
636                 pdcs->pdc_idx, num_frags);
637
638         dev_dbg(dev,
639                 "PDC %u txin %u, txout %u, rxin %u, rxout %u, last_rx_curr %u\n",
640                 pdcs->pdc_idx, pdcs->txin, pdcs->txout, pdcs->rxin,
641                 pdcs->rxout, pdcs->last_rx_curr);
642
643         if (pdcs->pdc_resp_hdr_len == PDC_SPUM_RESP_HDR_LEN) {
644                 /*
645                  * For SPU-M, get length of response msg and rx overflow status.
646                  */
647                 rx_status = *((u32 *)resp_hdr);
648                 len = rx_status & RX_STATUS_LEN;
649                 dev_dbg(dev,
650                         "SPU response length %u bytes", len);
651                 if (unlikely(((rx_status & RX_STATUS_OVERFLOW) || (!len)))) {
652                         if (rx_status & RX_STATUS_OVERFLOW) {
653                                 dev_err_ratelimited(dev,
654                                                     "crypto receive overflow");
655                                 pdcs->rx_oflow++;
656                         } else {
657                                 dev_info_ratelimited(dev, "crypto rx len = 0");
658                         }
659                         return -EIO;
660                 }
661         }
662
663         dma_pool_free(pdcs->rx_buf_pool, resp_hdr, resp_hdr_daddr);
664
665         mbox_chan_received_data(chan, &mssg);
666
667         pdcs->pdc_replies++;
668         return PDC_SUCCESS;
669 }
670
671 /**
672  * pdc_receive() - Process as many responses as are available in the rx ring.
673  * @pdcs:  PDC state
674  *
675  * Called within the hard IRQ.
676  * Return:
677  */
678 static int
679 pdc_receive(struct pdc_state *pdcs)
680 {
681         int rx_status;
682
683         /* read last_rx_curr from register once */
684         pdcs->last_rx_curr =
685             (ioread32(&pdcs->rxregs_64->status0) &
686              CRYPTO_D64_RS0_CD_MASK) / RING_ENTRY_SIZE;
687
688         do {
689                 /* Could be many frames ready */
690                 rx_status = pdc_receive_one(pdcs);
691         } while (rx_status == PDC_SUCCESS);
692
693         return 0;
694 }
695
696 /**
697  * pdc_tx_list_sg_add() - Add the buffers in a scatterlist to the transmit
698  * descriptors for a given SPU. The scatterlist buffers contain the data for a
699  * SPU request message.
700  * @spu_idx:   The index of the SPU to submit the request to, [0, max_spu)
701  * @sg:        Scatterlist whose buffers contain part of the SPU request
702  *
703  * If a scatterlist buffer is larger than PDC_DMA_BUF_MAX, multiple descriptors
704  * are written for that buffer, each <= PDC_DMA_BUF_MAX byte in length.
705  *
706  * Return: PDC_SUCCESS if successful
707  *         < 0 otherwise
708  */
709 static int pdc_tx_list_sg_add(struct pdc_state *pdcs, struct scatterlist *sg)
710 {
711         u32 flags = 0;
712         u32 eot;
713         u32 tx_avail;
714
715         /*
716          * Num descriptors needed. Conservatively assume we need a descriptor
717          * for every entry in sg.
718          */
719         u32 num_desc;
720         u32 desc_w = 0; /* Number of tx descriptors written */
721         u32 bufcnt;     /* Number of bytes of buffer pointed to by descriptor */
722         dma_addr_t databufptr;  /* DMA address to put in descriptor */
723
724         num_desc = (u32)sg_nents(sg);
725
726         /* check whether enough tx descriptors are available */
727         tx_avail = pdcs->ntxpost - NTXDACTIVE(pdcs->txin, pdcs->txout,
728                                               pdcs->ntxpost);
729         if (unlikely(num_desc > tx_avail)) {
730                 pdcs->txnobuf++;
731                 return -ENOSPC;
732         }
733
734         /* build tx descriptors */
735         if (pdcs->tx_msg_start == pdcs->txout) {
736                 /* Start of frame */
737                 pdcs->txin_numd[pdcs->tx_msg_start] = 0;
738                 pdcs->src_sg[pdcs->txout] = sg;
739                 flags = D64_CTRL1_SOF;
740         }
741
742         while (sg) {
743                 if (unlikely(pdcs->txout == (pdcs->ntxd - 1)))
744                         eot = D64_CTRL1_EOT;
745                 else
746                         eot = 0;
747
748                 /*
749                  * If sg buffer larger than PDC limit, split across
750                  * multiple descriptors
751                  */
752                 bufcnt = sg_dma_len(sg);
753                 databufptr = sg_dma_address(sg);
754                 while (bufcnt > PDC_DMA_BUF_MAX) {
755                         pdc_build_txd(pdcs, databufptr, PDC_DMA_BUF_MAX,
756                                       flags | eot);
757                         desc_w++;
758                         bufcnt -= PDC_DMA_BUF_MAX;
759                         databufptr += PDC_DMA_BUF_MAX;
760                         if (unlikely(pdcs->txout == (pdcs->ntxd - 1)))
761                                 eot = D64_CTRL1_EOT;
762                         else
763                                 eot = 0;
764                 }
765                 sg = sg_next(sg);
766                 if (!sg)
767                         /* Writing last descriptor for frame */
768                         flags |= (D64_CTRL1_EOF | D64_CTRL1_IOC);
769                 pdc_build_txd(pdcs, databufptr, bufcnt, flags | eot);
770                 desc_w++;
771                 /* Clear start of frame after first descriptor */
772                 flags &= ~D64_CTRL1_SOF;
773         }
774         pdcs->txin_numd[pdcs->tx_msg_start] += desc_w;
775
776         return PDC_SUCCESS;
777 }
778
779 /**
780  * pdc_tx_list_final() - Initiate DMA transfer of last frame written to tx
781  * ring.
782  * @pdcs:  PDC state for SPU to process the request
783  *
784  * Sets the index of the last descriptor written in both the rx and tx ring.
785  *
786  * Return: PDC_SUCCESS
787  */
788 static int pdc_tx_list_final(struct pdc_state *pdcs)
789 {
790         /*
791          * write barrier to ensure all register writes are complete
792          * before chip starts to process new request
793          */
794         wmb();
795         iowrite32(pdcs->rxout << 4, &pdcs->rxregs_64->ptr);
796         iowrite32(pdcs->txout << 4, &pdcs->txregs_64->ptr);
797         pdcs->pdc_requests++;
798
799         return PDC_SUCCESS;
800 }
801
802 /**
803  * pdc_rx_list_init() - Start a new receive descriptor list for a given PDC.
804  * @pdcs:   PDC state for SPU handling request
805  * @dst_sg: scatterlist providing rx buffers for response to be returned to
806  *          mailbox client
807  * @ctx:    Opaque context for this request
808  *
809  * Posts a single receive descriptor to hold the metadata that precedes a
810  * response. For example, with SPU-M, the metadata is a 32-byte DMA header and
811  * an 8-byte BCM header. Moves the msg_start descriptor indexes for both tx and
812  * rx to indicate the start of a new message.
813  *
814  * Return:  PDC_SUCCESS if successful
815  *          < 0 if an error (e.g., rx ring is full)
816  */
817 static int pdc_rx_list_init(struct pdc_state *pdcs, struct scatterlist *dst_sg,
818                             void *ctx)
819 {
820         u32 flags = 0;
821         u32 rx_avail;
822         u32 rx_pkt_cnt = 1;     /* Adding a single rx buffer */
823         dma_addr_t daddr;
824         void *vaddr;
825         struct pdc_rx_ctx *rx_ctx;
826
827         rx_avail = pdcs->nrxpost - NRXDACTIVE(pdcs->rxin, pdcs->rxout,
828                                               pdcs->nrxpost);
829         if (unlikely(rx_pkt_cnt > rx_avail)) {
830                 pdcs->rxnobuf++;
831                 return -ENOSPC;
832         }
833
834         /* allocate a buffer for the dma rx status */
835         vaddr = dma_pool_zalloc(pdcs->rx_buf_pool, GFP_ATOMIC, &daddr);
836         if (unlikely(!vaddr))
837                 return -ENOMEM;
838
839         /*
840          * Update msg_start indexes for both tx and rx to indicate the start
841          * of a new sequence of descriptor indexes that contain the fragments
842          * of the same message.
843          */
844         pdcs->rx_msg_start = pdcs->rxout;
845         pdcs->tx_msg_start = pdcs->txout;
846
847         /* This is always the first descriptor in the receive sequence */
848         flags = D64_CTRL1_SOF;
849         pdcs->rx_ctx[pdcs->rx_msg_start].rxin_numd = 1;
850
851         if (unlikely(pdcs->rxout == (pdcs->nrxd - 1)))
852                 flags |= D64_CTRL1_EOT;
853
854         rx_ctx = &pdcs->rx_ctx[pdcs->rxout];
855         rx_ctx->rxp_ctx = ctx;
856         rx_ctx->dst_sg = dst_sg;
857         rx_ctx->resp_hdr = vaddr;
858         rx_ctx->resp_hdr_daddr = daddr;
859         pdc_build_rxd(pdcs, daddr, pdcs->pdc_resp_hdr_len, flags);
860         return PDC_SUCCESS;
861 }
862
863 /**
864  * pdc_rx_list_sg_add() - Add the buffers in a scatterlist to the receive
865  * descriptors for a given SPU. The caller must have already DMA mapped the
866  * scatterlist.
867  * @spu_idx:    Indicates which SPU the buffers are for
868  * @sg:         Scatterlist whose buffers are added to the receive ring
869  *
870  * If a receive buffer in the scatterlist is larger than PDC_DMA_BUF_MAX,
871  * multiple receive descriptors are written, each with a buffer <=
872  * PDC_DMA_BUF_MAX.
873  *
874  * Return: PDC_SUCCESS if successful
875  *         < 0 otherwise (e.g., receive ring is full)
876  */
877 static int pdc_rx_list_sg_add(struct pdc_state *pdcs, struct scatterlist *sg)
878 {
879         u32 flags = 0;
880         u32 rx_avail;
881
882         /*
883          * Num descriptors needed. Conservatively assume we need a descriptor
884          * for every entry from our starting point in the scatterlist.
885          */
886         u32 num_desc;
887         u32 desc_w = 0; /* Number of tx descriptors written */
888         u32 bufcnt;     /* Number of bytes of buffer pointed to by descriptor */
889         dma_addr_t databufptr;  /* DMA address to put in descriptor */
890
891         num_desc = (u32)sg_nents(sg);
892
893         rx_avail = pdcs->nrxpost - NRXDACTIVE(pdcs->rxin, pdcs->rxout,
894                                               pdcs->nrxpost);
895         if (unlikely(num_desc > rx_avail)) {
896                 pdcs->rxnobuf++;
897                 return -ENOSPC;
898         }
899
900         while (sg) {
901                 if (unlikely(pdcs->rxout == (pdcs->nrxd - 1)))
902                         flags = D64_CTRL1_EOT;
903                 else
904                         flags = 0;
905
906                 /*
907                  * If sg buffer larger than PDC limit, split across
908                  * multiple descriptors
909                  */
910                 bufcnt = sg_dma_len(sg);
911                 databufptr = sg_dma_address(sg);
912                 while (bufcnt > PDC_DMA_BUF_MAX) {
913                         pdc_build_rxd(pdcs, databufptr, PDC_DMA_BUF_MAX, flags);
914                         desc_w++;
915                         bufcnt -= PDC_DMA_BUF_MAX;
916                         databufptr += PDC_DMA_BUF_MAX;
917                         if (unlikely(pdcs->rxout == (pdcs->nrxd - 1)))
918                                 flags = D64_CTRL1_EOT;
919                         else
920                                 flags = 0;
921                 }
922                 pdc_build_rxd(pdcs, databufptr, bufcnt, flags);
923                 desc_w++;
924                 sg = sg_next(sg);
925         }
926         pdcs->rx_ctx[pdcs->rx_msg_start].rxin_numd += desc_w;
927
928         return PDC_SUCCESS;
929 }
930
931 /**
932  * pdc_irq_handler() - Interrupt handler called in interrupt context.
933  * @irq:      Interrupt number that has fired
934  * @data:     device struct for DMA engine that generated the interrupt
935  *
936  * We have to clear the device interrupt status flags here. So cache the
937  * status for later use in the thread function. Other than that, just return
938  * WAKE_THREAD to invoke the thread function.
939  *
940  * Return: IRQ_WAKE_THREAD if interrupt is ours
941  *         IRQ_NONE otherwise
942  */
943 static irqreturn_t pdc_irq_handler(int irq, void *data)
944 {
945         struct device *dev = (struct device *)data;
946         struct pdc_state *pdcs = dev_get_drvdata(dev);
947         u32 intstatus = ioread32(pdcs->pdc_reg_vbase + PDC_INTSTATUS_OFFSET);
948
949         if (unlikely(intstatus == 0))
950                 return IRQ_NONE;
951
952         /* Disable interrupts until soft handler runs */
953         iowrite32(0, pdcs->pdc_reg_vbase + PDC_INTMASK_OFFSET);
954
955         /* Clear interrupt flags in device */
956         iowrite32(intstatus, pdcs->pdc_reg_vbase + PDC_INTSTATUS_OFFSET);
957
958         /* Wakeup IRQ thread */
959         tasklet_schedule(&pdcs->rx_tasklet);
960         return IRQ_HANDLED;
961 }
962
963 /**
964  * pdc_tasklet_cb() - Tasklet callback that runs the deferred processing after
965  * a DMA receive interrupt. Reenables the receive interrupt.
966  * @data: PDC state structure
967  */
968 static void pdc_tasklet_cb(unsigned long data)
969 {
970         struct pdc_state *pdcs = (struct pdc_state *)data;
971
972         pdc_receive(pdcs);
973
974         /* reenable interrupts */
975         iowrite32(PDC_INTMASK, pdcs->pdc_reg_vbase + PDC_INTMASK_OFFSET);
976 }
977
978 /**
979  * pdc_ring_init() - Allocate DMA rings and initialize constant fields of
980  * descriptors in one ringset.
981  * @pdcs:    PDC instance state
982  * @ringset: index of ringset being used
983  *
984  * Return: PDC_SUCCESS if ring initialized
985  *         < 0 otherwise
986  */
987 static int pdc_ring_init(struct pdc_state *pdcs, int ringset)
988 {
989         int i;
990         int err = PDC_SUCCESS;
991         struct dma64 *dma_reg;
992         struct device *dev = &pdcs->pdev->dev;
993         struct pdc_ring_alloc tx;
994         struct pdc_ring_alloc rx;
995
996         /* Allocate tx ring */
997         tx.vbase = dma_pool_zalloc(pdcs->ring_pool, GFP_KERNEL, &tx.dmabase);
998         if (unlikely(!tx.vbase)) {
999                 err = -ENOMEM;
1000                 goto done;
1001         }
1002
1003         /* Allocate rx ring */
1004         rx.vbase = dma_pool_zalloc(pdcs->ring_pool, GFP_KERNEL, &rx.dmabase);
1005         if (unlikely(!rx.vbase)) {
1006                 err = -ENOMEM;
1007                 goto fail_dealloc;
1008         }
1009
1010         dev_dbg(dev, " - base DMA addr of tx ring      %pad", &tx.dmabase);
1011         dev_dbg(dev, " - base virtual addr of tx ring  %p", tx.vbase);
1012         dev_dbg(dev, " - base DMA addr of rx ring      %pad", &rx.dmabase);
1013         dev_dbg(dev, " - base virtual addr of rx ring  %p", rx.vbase);
1014
1015         memcpy(&pdcs->tx_ring_alloc, &tx, sizeof(tx));
1016         memcpy(&pdcs->rx_ring_alloc, &rx, sizeof(rx));
1017
1018         pdcs->rxin = 0;
1019         pdcs->rx_msg_start = 0;
1020         pdcs->last_rx_curr = 0;
1021         pdcs->rxout = 0;
1022         pdcs->txin = 0;
1023         pdcs->tx_msg_start = 0;
1024         pdcs->txout = 0;
1025
1026         /* Set descriptor array base addresses */
1027         pdcs->txd_64 = (struct dma64dd *)pdcs->tx_ring_alloc.vbase;
1028         pdcs->rxd_64 = (struct dma64dd *)pdcs->rx_ring_alloc.vbase;
1029
1030         /* Tell device the base DMA address of each ring */
1031         dma_reg = &pdcs->regs->dmaregs[ringset];
1032
1033         /* But first disable DMA and set curptr to 0 for both TX & RX */
1034         iowrite32(PDC_TX_CTL, &dma_reg->dmaxmt.control);
1035         iowrite32((PDC_RX_CTL + (pdcs->rx_status_len << 1)),
1036                   &dma_reg->dmarcv.control);
1037         iowrite32(0, &dma_reg->dmaxmt.ptr);
1038         iowrite32(0, &dma_reg->dmarcv.ptr);
1039
1040         /* Set base DMA addresses */
1041         iowrite32(lower_32_bits(pdcs->tx_ring_alloc.dmabase),
1042                   &dma_reg->dmaxmt.addrlow);
1043         iowrite32(upper_32_bits(pdcs->tx_ring_alloc.dmabase),
1044                   &dma_reg->dmaxmt.addrhigh);
1045
1046         iowrite32(lower_32_bits(pdcs->rx_ring_alloc.dmabase),
1047                   &dma_reg->dmarcv.addrlow);
1048         iowrite32(upper_32_bits(pdcs->rx_ring_alloc.dmabase),
1049                   &dma_reg->dmarcv.addrhigh);
1050
1051         /* Re-enable DMA */
1052         iowrite32(PDC_TX_CTL | PDC_TX_ENABLE, &dma_reg->dmaxmt.control);
1053         iowrite32((PDC_RX_CTL | PDC_RX_ENABLE | (pdcs->rx_status_len << 1)),
1054                   &dma_reg->dmarcv.control);
1055
1056         /* Initialize descriptors */
1057         for (i = 0; i < PDC_RING_ENTRIES; i++) {
1058                 /* Every tx descriptor can be used for start of frame. */
1059                 if (i != pdcs->ntxpost) {
1060                         iowrite32(D64_CTRL1_SOF | D64_CTRL1_EOF,
1061                                   &pdcs->txd_64[i].ctrl1);
1062                 } else {
1063                         /* Last descriptor in ringset. Set End of Table. */
1064                         iowrite32(D64_CTRL1_SOF | D64_CTRL1_EOF |
1065                                   D64_CTRL1_EOT, &pdcs->txd_64[i].ctrl1);
1066                 }
1067
1068                 /* Every rx descriptor can be used for start of frame */
1069                 if (i != pdcs->nrxpost) {
1070                         iowrite32(D64_CTRL1_SOF,
1071                                   &pdcs->rxd_64[i].ctrl1);
1072                 } else {
1073                         /* Last descriptor in ringset. Set End of Table. */
1074                         iowrite32(D64_CTRL1_SOF | D64_CTRL1_EOT,
1075                                   &pdcs->rxd_64[i].ctrl1);
1076                 }
1077         }
1078         return PDC_SUCCESS;
1079
1080 fail_dealloc:
1081         dma_pool_free(pdcs->ring_pool, tx.vbase, tx.dmabase);
1082 done:
1083         return err;
1084 }
1085
1086 static void pdc_ring_free(struct pdc_state *pdcs)
1087 {
1088         if (pdcs->tx_ring_alloc.vbase) {
1089                 dma_pool_free(pdcs->ring_pool, pdcs->tx_ring_alloc.vbase,
1090                               pdcs->tx_ring_alloc.dmabase);
1091                 pdcs->tx_ring_alloc.vbase = NULL;
1092         }
1093
1094         if (pdcs->rx_ring_alloc.vbase) {
1095                 dma_pool_free(pdcs->ring_pool, pdcs->rx_ring_alloc.vbase,
1096                               pdcs->rx_ring_alloc.dmabase);
1097                 pdcs->rx_ring_alloc.vbase = NULL;
1098         }
1099 }
1100
1101 /**
1102  * pdc_desc_count() - Count the number of DMA descriptors that will be required
1103  * for a given scatterlist. Account for the max length of a DMA buffer.
1104  * @sg:    Scatterlist to be DMA'd
1105  * Return: Number of descriptors required
1106  */
1107 static u32 pdc_desc_count(struct scatterlist *sg)
1108 {
1109         u32 cnt = 0;
1110
1111         while (sg) {
1112                 cnt += ((sg->length / PDC_DMA_BUF_MAX) + 1);
1113                 sg = sg_next(sg);
1114         }
1115         return cnt;
1116 }
1117
1118 /**
1119  * pdc_rings_full() - Check whether the tx ring has room for tx_cnt descriptors
1120  * and the rx ring has room for rx_cnt descriptors.
1121  * @pdcs:  PDC state
1122  * @tx_cnt: The number of descriptors required in the tx ring
1123  * @rx_cnt: The number of descriptors required i the rx ring
1124  *
1125  * Return: true if one of the rings does not have enough space
1126  *         false if sufficient space is available in both rings
1127  */
1128 static bool pdc_rings_full(struct pdc_state *pdcs, int tx_cnt, int rx_cnt)
1129 {
1130         u32 rx_avail;
1131         u32 tx_avail;
1132         bool full = false;
1133
1134         /* Check if the tx and rx rings are likely to have enough space */
1135         rx_avail = pdcs->nrxpost - NRXDACTIVE(pdcs->rxin, pdcs->rxout,
1136                                               pdcs->nrxpost);
1137         if (unlikely(rx_cnt > rx_avail)) {
1138                 pdcs->rx_ring_full++;
1139                 full = true;
1140         }
1141
1142         if (likely(!full)) {
1143                 tx_avail = pdcs->ntxpost - NTXDACTIVE(pdcs->txin, pdcs->txout,
1144                                                       pdcs->ntxpost);
1145                 if (unlikely(tx_cnt > tx_avail)) {
1146                         pdcs->tx_ring_full++;
1147                         full = true;
1148                 }
1149         }
1150         return full;
1151 }
1152
1153 /**
1154  * pdc_last_tx_done() - If both the tx and rx rings have at least
1155  * PDC_RING_SPACE_MIN descriptors available, then indicate that the mailbox
1156  * framework can submit another message.
1157  * @chan:  mailbox channel to check
1158  * Return: true if PDC can accept another message on this channel
1159  */
1160 static bool pdc_last_tx_done(struct mbox_chan *chan)
1161 {
1162         struct pdc_state *pdcs = chan->con_priv;
1163         bool ret;
1164
1165         if (unlikely(pdc_rings_full(pdcs, PDC_RING_SPACE_MIN,
1166                                     PDC_RING_SPACE_MIN))) {
1167                 pdcs->last_tx_not_done++;
1168                 ret = false;
1169         } else {
1170                 ret = true;
1171         }
1172         return ret;
1173 }
1174
1175 /**
1176  * pdc_send_data() - mailbox send_data function
1177  * @chan:       The mailbox channel on which the data is sent. The channel
1178  *              corresponds to a DMA ringset.
1179  * @data:       The mailbox message to be sent. The message must be a
1180  *              brcm_message structure.
1181  *
1182  * This function is registered as the send_data function for the mailbox
1183  * controller. From the destination scatterlist in the mailbox message, it
1184  * creates a sequence of receive descriptors in the rx ring. From the source
1185  * scatterlist, it creates a sequence of transmit descriptors in the tx ring.
1186  * After creating the descriptors, it writes the rx ptr and tx ptr registers to
1187  * initiate the DMA transfer.
1188  *
1189  * This function does the DMA map and unmap of the src and dst scatterlists in
1190  * the mailbox message.
1191  *
1192  * Return: 0 if successful
1193  *         -ENOTSUPP if the mailbox message is a type this driver does not
1194  *                      support
1195  *         < 0 if an error
1196  */
1197 static int pdc_send_data(struct mbox_chan *chan, void *data)
1198 {
1199         struct pdc_state *pdcs = chan->con_priv;
1200         struct device *dev = &pdcs->pdev->dev;
1201         struct brcm_message *mssg = data;
1202         int err = PDC_SUCCESS;
1203         int src_nent;
1204         int dst_nent;
1205         int nent;
1206         u32 tx_desc_req;
1207         u32 rx_desc_req;
1208
1209         if (unlikely(mssg->type != BRCM_MESSAGE_SPU))
1210                 return -ENOTSUPP;
1211
1212         src_nent = sg_nents(mssg->spu.src);
1213         if (likely(src_nent)) {
1214                 nent = dma_map_sg(dev, mssg->spu.src, src_nent, DMA_TO_DEVICE);
1215                 if (unlikely(nent == 0))
1216                         return -EIO;
1217         }
1218
1219         dst_nent = sg_nents(mssg->spu.dst);
1220         if (likely(dst_nent)) {
1221                 nent = dma_map_sg(dev, mssg->spu.dst, dst_nent,
1222                                   DMA_FROM_DEVICE);
1223                 if (unlikely(nent == 0)) {
1224                         dma_unmap_sg(dev, mssg->spu.src, src_nent,
1225                                      DMA_TO_DEVICE);
1226                         return -EIO;
1227                 }
1228         }
1229
1230         /*
1231          * Check if the tx and rx rings have enough space. Do this prior to
1232          * writing any tx or rx descriptors. Need to ensure that we do not write
1233          * a partial set of descriptors, or write just rx descriptors but
1234          * corresponding tx descriptors don't fit. Note that we want this check
1235          * and the entire sequence of descriptor to happen without another
1236          * thread getting in. The channel spin lock in the mailbox framework
1237          * ensures this.
1238          */
1239         tx_desc_req = pdc_desc_count(mssg->spu.src);
1240         rx_desc_req = pdc_desc_count(mssg->spu.dst);
1241         if (unlikely(pdc_rings_full(pdcs, tx_desc_req, rx_desc_req + 1)))
1242                 return -ENOSPC;
1243
1244         /* Create rx descriptors to SPU catch response */
1245         err = pdc_rx_list_init(pdcs, mssg->spu.dst, mssg->ctx);
1246         err |= pdc_rx_list_sg_add(pdcs, mssg->spu.dst);
1247
1248         /* Create tx descriptors to submit SPU request */
1249         err |= pdc_tx_list_sg_add(pdcs, mssg->spu.src);
1250         err |= pdc_tx_list_final(pdcs); /* initiate transfer */
1251
1252         if (unlikely(err))
1253                 dev_err(&pdcs->pdev->dev,
1254                         "%s failed with error %d", __func__, err);
1255
1256         return err;
1257 }
1258
1259 static int pdc_startup(struct mbox_chan *chan)
1260 {
1261         return pdc_ring_init(chan->con_priv, PDC_RINGSET);
1262 }
1263
1264 static void pdc_shutdown(struct mbox_chan *chan)
1265 {
1266         struct pdc_state *pdcs = chan->con_priv;
1267
1268         if (!pdcs)
1269                 return;
1270
1271         dev_dbg(&pdcs->pdev->dev,
1272                 "Shutdown mailbox channel for PDC %u", pdcs->pdc_idx);
1273         pdc_ring_free(pdcs);
1274 }
1275
1276 /**
1277  * pdc_hw_init() - Use the given initialization parameters to initialize the
1278  * state for one of the PDCs.
1279  * @pdcs:  state of the PDC
1280  */
1281 static
1282 void pdc_hw_init(struct pdc_state *pdcs)
1283 {
1284         struct platform_device *pdev;
1285         struct device *dev;
1286         struct dma64 *dma_reg;
1287         int ringset = PDC_RINGSET;
1288
1289         pdev = pdcs->pdev;
1290         dev = &pdev->dev;
1291
1292         dev_dbg(dev, "PDC %u initial values:", pdcs->pdc_idx);
1293         dev_dbg(dev, "state structure:                   %p",
1294                 pdcs);
1295         dev_dbg(dev, " - base virtual addr of hw regs    %p",
1296                 pdcs->pdc_reg_vbase);
1297
1298         /* initialize data structures */
1299         pdcs->regs = (struct pdc_regs *)pdcs->pdc_reg_vbase;
1300         pdcs->txregs_64 = (struct dma64_regs *)
1301             (((u8 *)pdcs->pdc_reg_vbase) +
1302                      PDC_TXREGS_OFFSET + (sizeof(struct dma64) * ringset));
1303         pdcs->rxregs_64 = (struct dma64_regs *)
1304             (((u8 *)pdcs->pdc_reg_vbase) +
1305                      PDC_RXREGS_OFFSET + (sizeof(struct dma64) * ringset));
1306
1307         pdcs->ntxd = PDC_RING_ENTRIES;
1308         pdcs->nrxd = PDC_RING_ENTRIES;
1309         pdcs->ntxpost = PDC_RING_ENTRIES - 1;
1310         pdcs->nrxpost = PDC_RING_ENTRIES - 1;
1311         iowrite32(0, &pdcs->regs->intmask);
1312
1313         dma_reg = &pdcs->regs->dmaregs[ringset];
1314
1315         /* Configure DMA but will enable later in pdc_ring_init() */
1316         iowrite32(PDC_TX_CTL, &dma_reg->dmaxmt.control);
1317
1318         iowrite32(PDC_RX_CTL + (pdcs->rx_status_len << 1),
1319                   &dma_reg->dmarcv.control);
1320
1321         /* Reset current index pointers after making sure DMA is disabled */
1322         iowrite32(0, &dma_reg->dmaxmt.ptr);
1323         iowrite32(0, &dma_reg->dmarcv.ptr);
1324
1325         if (pdcs->pdc_resp_hdr_len == PDC_SPU2_RESP_HDR_LEN)
1326                 iowrite32(PDC_CKSUM_CTRL,
1327                           pdcs->pdc_reg_vbase + PDC_CKSUM_CTRL_OFFSET);
1328 }
1329
1330 /**
1331  * pdc_hw_disable() - Disable the tx and rx control in the hw.
1332  * @pdcs: PDC state structure
1333  *
1334  */
1335 static void pdc_hw_disable(struct pdc_state *pdcs)
1336 {
1337         struct dma64 *dma_reg;
1338
1339         dma_reg = &pdcs->regs->dmaregs[PDC_RINGSET];
1340         iowrite32(PDC_TX_CTL, &dma_reg->dmaxmt.control);
1341         iowrite32(PDC_RX_CTL + (pdcs->rx_status_len << 1),
1342                   &dma_reg->dmarcv.control);
1343 }
1344
1345 /**
1346  * pdc_rx_buf_pool_create() - Pool of receive buffers used to catch the metadata
1347  * header returned with each response message.
1348  * @pdcs: PDC state structure
1349  *
1350  * The metadata is not returned to the mailbox client. So the PDC driver
1351  * manages these buffers.
1352  *
1353  * Return: PDC_SUCCESS
1354  *         -ENOMEM if pool creation fails
1355  */
1356 static int pdc_rx_buf_pool_create(struct pdc_state *pdcs)
1357 {
1358         struct platform_device *pdev;
1359         struct device *dev;
1360
1361         pdev = pdcs->pdev;
1362         dev = &pdev->dev;
1363
1364         pdcs->pdc_resp_hdr_len = pdcs->rx_status_len;
1365         if (pdcs->use_bcm_hdr)
1366                 pdcs->pdc_resp_hdr_len += BCM_HDR_LEN;
1367
1368         pdcs->rx_buf_pool = dma_pool_create("pdc rx bufs", dev,
1369                                             pdcs->pdc_resp_hdr_len,
1370                                             RX_BUF_ALIGN, 0);
1371         if (!pdcs->rx_buf_pool)
1372                 return -ENOMEM;
1373
1374         return PDC_SUCCESS;
1375 }
1376
1377 /**
1378  * pdc_interrupts_init() - Initialize the interrupt configuration for a PDC and
1379  * specify a threaded IRQ handler for deferred handling of interrupts outside of
1380  * interrupt context.
1381  * @pdcs:   PDC state
1382  *
1383  * Set the interrupt mask for transmit and receive done.
1384  * Set the lazy interrupt frame count to generate an interrupt for just one pkt.
1385  *
1386  * Return:  PDC_SUCCESS
1387  *          <0 if threaded irq request fails
1388  */
1389 static int pdc_interrupts_init(struct pdc_state *pdcs)
1390 {
1391         struct platform_device *pdev = pdcs->pdev;
1392         struct device *dev = &pdev->dev;
1393         struct device_node *dn = pdev->dev.of_node;
1394         int err;
1395
1396         /* interrupt configuration */
1397         iowrite32(PDC_INTMASK, pdcs->pdc_reg_vbase + PDC_INTMASK_OFFSET);
1398
1399         if (pdcs->hw_type == FA_HW)
1400                 iowrite32(PDC_LAZY_INT, pdcs->pdc_reg_vbase +
1401                           FA_RCVLAZY0_OFFSET);
1402         else
1403                 iowrite32(PDC_LAZY_INT, pdcs->pdc_reg_vbase +
1404                           PDC_RCVLAZY0_OFFSET);
1405
1406         /* read irq from device tree */
1407         pdcs->pdc_irq = irq_of_parse_and_map(dn, 0);
1408         dev_dbg(dev, "pdc device %s irq %u for pdcs %p",
1409                 dev_name(dev), pdcs->pdc_irq, pdcs);
1410
1411         err = devm_request_irq(dev, pdcs->pdc_irq, pdc_irq_handler, 0,
1412                                dev_name(dev), dev);
1413         if (err) {
1414                 dev_err(dev, "IRQ %u request failed with err %d\n",
1415                         pdcs->pdc_irq, err);
1416                 return err;
1417         }
1418         return PDC_SUCCESS;
1419 }
1420
1421 static const struct mbox_chan_ops pdc_mbox_chan_ops = {
1422         .send_data = pdc_send_data,
1423         .last_tx_done = pdc_last_tx_done,
1424         .startup = pdc_startup,
1425         .shutdown = pdc_shutdown
1426 };
1427
1428 /**
1429  * pdc_mb_init() - Initialize the mailbox controller.
1430  * @pdcs:  PDC state
1431  *
1432  * Each PDC is a mailbox controller. Each ringset is a mailbox channel. Kernel
1433  * driver only uses one ringset and thus one mb channel. PDC uses the transmit
1434  * complete interrupt to determine when a mailbox message has successfully been
1435  * transmitted.
1436  *
1437  * Return: 0 on success
1438  *         < 0 if there is an allocation or registration failure
1439  */
1440 static int pdc_mb_init(struct pdc_state *pdcs)
1441 {
1442         struct device *dev = &pdcs->pdev->dev;
1443         struct mbox_controller *mbc;
1444         int chan_index;
1445         int err;
1446
1447         mbc = &pdcs->mbc;
1448         mbc->dev = dev;
1449         mbc->ops = &pdc_mbox_chan_ops;
1450         mbc->num_chans = 1;
1451         mbc->chans = devm_kcalloc(dev, mbc->num_chans, sizeof(*mbc->chans),
1452                                   GFP_KERNEL);
1453         if (!mbc->chans)
1454                 return -ENOMEM;
1455
1456         mbc->txdone_irq = false;
1457         mbc->txdone_poll = true;
1458         mbc->txpoll_period = 1;
1459         for (chan_index = 0; chan_index < mbc->num_chans; chan_index++)
1460                 mbc->chans[chan_index].con_priv = pdcs;
1461
1462         /* Register mailbox controller */
1463         err = devm_mbox_controller_register(dev, mbc);
1464         if (err) {
1465                 dev_crit(dev,
1466                          "Failed to register PDC mailbox controller. Error %d.",
1467                          err);
1468                 return err;
1469         }
1470         return 0;
1471 }
1472
1473 /* Device tree API */
1474 static const int pdc_hw = PDC_HW;
1475 static const int fa_hw = FA_HW;
1476
1477 static const struct of_device_id pdc_mbox_of_match[] = {
1478         {.compatible = "brcm,iproc-pdc-mbox", .data = &pdc_hw},
1479         {.compatible = "brcm,iproc-fa2-mbox", .data = &fa_hw},
1480         { /* sentinel */ }
1481 };
1482 MODULE_DEVICE_TABLE(of, pdc_mbox_of_match);
1483
1484 /**
1485  * pdc_dt_read() - Read application-specific data from device tree.
1486  * @pdev:  Platform device
1487  * @pdcs:  PDC state
1488  *
1489  * Reads the number of bytes of receive status that precede each received frame.
1490  * Reads whether transmit and received frames should be preceded by an 8-byte
1491  * BCM header.
1492  *
1493  * Return: 0 if successful
1494  *         -ENODEV if device not available
1495  */
1496 static int pdc_dt_read(struct platform_device *pdev, struct pdc_state *pdcs)
1497 {
1498         struct device *dev = &pdev->dev;
1499         struct device_node *dn = pdev->dev.of_node;
1500         const struct of_device_id *match;
1501         const int *hw_type;
1502         int err;
1503
1504         err = of_property_read_u32(dn, "brcm,rx-status-len",
1505                                    &pdcs->rx_status_len);
1506         if (err < 0)
1507                 dev_err(dev,
1508                         "%s failed to get DMA receive status length from device tree",
1509                         __func__);
1510
1511         pdcs->use_bcm_hdr = of_property_read_bool(dn, "brcm,use-bcm-hdr");
1512
1513         pdcs->hw_type = PDC_HW;
1514
1515         match = of_match_device(of_match_ptr(pdc_mbox_of_match), dev);
1516         if (match != NULL) {
1517                 hw_type = match->data;
1518                 pdcs->hw_type = *hw_type;
1519         }
1520
1521         return 0;
1522 }
1523
1524 /**
1525  * pdc_probe() - Probe function for PDC driver.
1526  * @pdev:   PDC platform device
1527  *
1528  * Reserve and map register regions defined in device tree.
1529  * Allocate and initialize tx and rx DMA rings.
1530  * Initialize a mailbox controller for each PDC.
1531  *
1532  * Return: 0 if successful
1533  *         < 0 if an error
1534  */
1535 static int pdc_probe(struct platform_device *pdev)
1536 {
1537         int err = 0;
1538         struct device *dev = &pdev->dev;
1539         struct resource *pdc_regs;
1540         struct pdc_state *pdcs;
1541
1542         /* PDC state for one SPU */
1543         pdcs = devm_kzalloc(dev, sizeof(*pdcs), GFP_KERNEL);
1544         if (!pdcs) {
1545                 err = -ENOMEM;
1546                 goto cleanup;
1547         }
1548
1549         pdcs->pdev = pdev;
1550         platform_set_drvdata(pdev, pdcs);
1551         pdcs->pdc_idx = pdcg.num_spu;
1552         pdcg.num_spu++;
1553
1554         err = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(39));
1555         if (err) {
1556                 dev_warn(dev, "PDC device cannot perform DMA. Error %d.", err);
1557                 goto cleanup;
1558         }
1559
1560         /* Create DMA pool for tx ring */
1561         pdcs->ring_pool = dma_pool_create("pdc rings", dev, PDC_RING_SIZE,
1562                                           RING_ALIGN, 0);
1563         if (!pdcs->ring_pool) {
1564                 err = -ENOMEM;
1565                 goto cleanup;
1566         }
1567
1568         err = pdc_dt_read(pdev, pdcs);
1569         if (err)
1570                 goto cleanup_ring_pool;
1571
1572         pdc_regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1573         if (!pdc_regs) {
1574                 err = -ENODEV;
1575                 goto cleanup_ring_pool;
1576         }
1577         dev_dbg(dev, "PDC register region res.start = %pa, res.end = %pa",
1578                 &pdc_regs->start, &pdc_regs->end);
1579
1580         pdcs->pdc_reg_vbase = devm_ioremap_resource(&pdev->dev, pdc_regs);
1581         if (IS_ERR(pdcs->pdc_reg_vbase)) {
1582                 err = PTR_ERR(pdcs->pdc_reg_vbase);
1583                 dev_err(&pdev->dev, "Failed to map registers: %d\n", err);
1584                 goto cleanup_ring_pool;
1585         }
1586
1587         /* create rx buffer pool after dt read to know how big buffers are */
1588         err = pdc_rx_buf_pool_create(pdcs);
1589         if (err)
1590                 goto cleanup_ring_pool;
1591
1592         pdc_hw_init(pdcs);
1593
1594         /* Init tasklet for deferred DMA rx processing */
1595         tasklet_init(&pdcs->rx_tasklet, pdc_tasklet_cb, (unsigned long)pdcs);
1596
1597         err = pdc_interrupts_init(pdcs);
1598         if (err)
1599                 goto cleanup_buf_pool;
1600
1601         /* Initialize mailbox controller */
1602         err = pdc_mb_init(pdcs);
1603         if (err)
1604                 goto cleanup_buf_pool;
1605
1606         pdcs->debugfs_stats = NULL;
1607         pdc_setup_debugfs(pdcs);
1608
1609         dev_dbg(dev, "pdc_probe() successful");
1610         return PDC_SUCCESS;
1611
1612 cleanup_buf_pool:
1613         tasklet_kill(&pdcs->rx_tasklet);
1614         dma_pool_destroy(pdcs->rx_buf_pool);
1615
1616 cleanup_ring_pool:
1617         dma_pool_destroy(pdcs->ring_pool);
1618
1619 cleanup:
1620         return err;
1621 }
1622
1623 static int pdc_remove(struct platform_device *pdev)
1624 {
1625         struct pdc_state *pdcs = platform_get_drvdata(pdev);
1626
1627         pdc_free_debugfs();
1628
1629         tasklet_kill(&pdcs->rx_tasklet);
1630
1631         pdc_hw_disable(pdcs);
1632
1633         dma_pool_destroy(pdcs->rx_buf_pool);
1634         dma_pool_destroy(pdcs->ring_pool);
1635         return 0;
1636 }
1637
1638 static struct platform_driver pdc_mbox_driver = {
1639         .probe = pdc_probe,
1640         .remove = pdc_remove,
1641         .driver = {
1642                    .name = "brcm-iproc-pdc-mbox",
1643                    .of_match_table = of_match_ptr(pdc_mbox_of_match),
1644                    },
1645 };
1646 module_platform_driver(pdc_mbox_driver);
1647
1648 MODULE_AUTHOR("Rob Rice <rob.rice@broadcom.com>");
1649 MODULE_DESCRIPTION("Broadcom PDC mailbox driver");
1650 MODULE_LICENSE("GPL v2");