1 // SPDX-License-Identifier: GPL-2.0+
3 * drivers/usb/musb/ux500_dma.c
5 * U8500 DMA support code
7 * Copyright (C) 2009 STMicroelectronics
8 * Copyright (C) 2011 ST-Ericsson SA
10 * Mian Yousaf Kaukab <mian.yousaf.kaukab@stericsson.com>
11 * Praveena Nadahally <praveen.nadahally@stericsson.com>
12 * Rajaram Regupathy <ragupathy.rajaram@stericsson.com>
15 #include <linux/device.h>
16 #include <linux/interrupt.h>
17 #include <linux/platform_device.h>
18 #include <linux/dma-mapping.h>
19 #include <linux/dmaengine.h>
20 #include <linux/pfn.h>
21 #include <linux/sizes.h>
22 #include <linux/platform_data/usb-musb-ux500.h>
23 #include "musb_core.h"
25 static const char *iep_chan_names
[] = { "iep_1_9", "iep_2_10", "iep_3_11", "iep_4_12",
26 "iep_5_13", "iep_6_14", "iep_7_15", "iep_8" };
27 static const char *oep_chan_names
[] = { "oep_1_9", "oep_2_10", "oep_3_11", "oep_4_12",
28 "oep_5_13", "oep_6_14", "oep_7_15", "oep_8" };
30 struct ux500_dma_channel
{
31 struct dma_channel channel
;
32 struct ux500_dma_controller
*controller
;
33 struct musb_hw_ep
*hw_ep
;
34 struct dma_chan
*dma_chan
;
42 struct ux500_dma_controller
{
43 struct dma_controller controller
;
44 struct ux500_dma_channel rx_channel
[UX500_MUSB_DMA_NUM_RX_TX_CHANNELS
];
45 struct ux500_dma_channel tx_channel
[UX500_MUSB_DMA_NUM_RX_TX_CHANNELS
];
50 /* Work function invoked from DMA callback to handle rx transfers. */
51 static void ux500_dma_callback(void *private_data
)
53 struct dma_channel
*channel
= private_data
;
54 struct ux500_dma_channel
*ux500_channel
= channel
->private_data
;
55 struct musb_hw_ep
*hw_ep
= ux500_channel
->hw_ep
;
56 struct musb
*musb
= hw_ep
->musb
;
59 dev_dbg(musb
->controller
, "DMA rx transfer done on hw_ep=%d\n",
62 spin_lock_irqsave(&musb
->lock
, flags
);
63 ux500_channel
->channel
.actual_len
= ux500_channel
->cur_len
;
64 ux500_channel
->channel
.status
= MUSB_DMA_STATUS_FREE
;
65 musb_dma_completion(musb
, hw_ep
->epnum
, ux500_channel
->is_tx
);
66 spin_unlock_irqrestore(&musb
->lock
, flags
);
70 static bool ux500_configure_channel(struct dma_channel
*channel
,
71 u16 packet_sz
, u8 mode
,
72 dma_addr_t dma_addr
, u32 len
)
74 struct ux500_dma_channel
*ux500_channel
= channel
->private_data
;
75 struct musb_hw_ep
*hw_ep
= ux500_channel
->hw_ep
;
76 struct dma_chan
*dma_chan
= ux500_channel
->dma_chan
;
77 struct dma_async_tx_descriptor
*dma_desc
;
78 enum dma_transfer_direction direction
;
79 struct scatterlist sg
;
80 struct dma_slave_config slave_conf
;
81 enum dma_slave_buswidth addr_width
;
82 struct musb
*musb
= ux500_channel
->controller
->private_data
;
83 dma_addr_t usb_fifo_addr
= (musb
->io
.fifo_offset(hw_ep
->epnum
) +
84 ux500_channel
->controller
->phy_base
);
86 dev_dbg(musb
->controller
,
87 "packet_sz=%d, mode=%d, dma_addr=0x%llx, len=%d is_tx=%d\n",
88 packet_sz
, mode
, (unsigned long long) dma_addr
,
89 len
, ux500_channel
->is_tx
);
91 ux500_channel
->cur_len
= len
;
93 sg_init_table(&sg
, 1);
94 sg_set_page(&sg
, pfn_to_page(PFN_DOWN(dma_addr
)), len
,
95 offset_in_page(dma_addr
));
96 sg_dma_address(&sg
) = dma_addr
;
97 sg_dma_len(&sg
) = len
;
99 direction
= ux500_channel
->is_tx
? DMA_MEM_TO_DEV
: DMA_DEV_TO_MEM
;
100 addr_width
= (len
& 0x3) ? DMA_SLAVE_BUSWIDTH_1_BYTE
:
101 DMA_SLAVE_BUSWIDTH_4_BYTES
;
103 slave_conf
.direction
= direction
;
104 slave_conf
.src_addr
= usb_fifo_addr
;
105 slave_conf
.src_addr_width
= addr_width
;
106 slave_conf
.src_maxburst
= 16;
107 slave_conf
.dst_addr
= usb_fifo_addr
;
108 slave_conf
.dst_addr_width
= addr_width
;
109 slave_conf
.dst_maxburst
= 16;
110 slave_conf
.device_fc
= false;
112 dmaengine_slave_config(dma_chan
, &slave_conf
);
114 dma_desc
= dmaengine_prep_slave_sg(dma_chan
, &sg
, 1, direction
,
115 DMA_PREP_INTERRUPT
| DMA_CTRL_ACK
);
119 dma_desc
->callback
= ux500_dma_callback
;
120 dma_desc
->callback_param
= channel
;
121 ux500_channel
->cookie
= dma_desc
->tx_submit(dma_desc
);
123 dma_async_issue_pending(dma_chan
);
128 static struct dma_channel
*ux500_dma_channel_allocate(struct dma_controller
*c
,
129 struct musb_hw_ep
*hw_ep
, u8 is_tx
)
131 struct ux500_dma_controller
*controller
= container_of(c
,
132 struct ux500_dma_controller
, controller
);
133 struct ux500_dma_channel
*ux500_channel
= NULL
;
134 struct musb
*musb
= controller
->private_data
;
135 u8 ch_num
= hw_ep
->epnum
- 1;
137 /* 8 DMA channels (0 - 7). Each DMA channel can only be allocated
138 * to specified hw_ep. For example DMA channel 0 can only be allocated
144 if (ch_num
>= UX500_MUSB_DMA_NUM_RX_TX_CHANNELS
)
147 ux500_channel
= is_tx
? &(controller
->tx_channel
[ch_num
]) :
148 &(controller
->rx_channel
[ch_num
]) ;
150 /* Check if channel is already used. */
151 if (ux500_channel
->is_allocated
)
154 ux500_channel
->hw_ep
= hw_ep
;
155 ux500_channel
->is_allocated
= 1;
157 dev_dbg(musb
->controller
, "hw_ep=%d, is_tx=0x%x, channel=%d\n",
158 hw_ep
->epnum
, is_tx
, ch_num
);
160 return &(ux500_channel
->channel
);
163 static void ux500_dma_channel_release(struct dma_channel
*channel
)
165 struct ux500_dma_channel
*ux500_channel
= channel
->private_data
;
166 struct musb
*musb
= ux500_channel
->controller
->private_data
;
168 dev_dbg(musb
->controller
, "channel=%d\n", ux500_channel
->ch_num
);
170 if (ux500_channel
->is_allocated
) {
171 ux500_channel
->is_allocated
= 0;
172 channel
->status
= MUSB_DMA_STATUS_FREE
;
173 channel
->actual_len
= 0;
177 static int ux500_dma_is_compatible(struct dma_channel
*channel
,
178 u16 maxpacket
, void *buf
, u32 length
)
180 if ((maxpacket
& 0x3) ||
181 ((unsigned long int) buf
& 0x3) ||
189 static int ux500_dma_channel_program(struct dma_channel
*channel
,
190 u16 packet_sz
, u8 mode
,
191 dma_addr_t dma_addr
, u32 len
)
195 BUG_ON(channel
->status
== MUSB_DMA_STATUS_UNKNOWN
||
196 channel
->status
== MUSB_DMA_STATUS_BUSY
);
198 channel
->status
= MUSB_DMA_STATUS_BUSY
;
199 channel
->actual_len
= 0;
200 ret
= ux500_configure_channel(channel
, packet_sz
, mode
, dma_addr
, len
);
202 channel
->status
= MUSB_DMA_STATUS_FREE
;
207 static int ux500_dma_channel_abort(struct dma_channel
*channel
)
209 struct ux500_dma_channel
*ux500_channel
= channel
->private_data
;
210 struct ux500_dma_controller
*controller
= ux500_channel
->controller
;
211 struct musb
*musb
= controller
->private_data
;
212 void __iomem
*epio
= musb
->endpoints
[ux500_channel
->hw_ep
->epnum
].regs
;
215 dev_dbg(musb
->controller
, "channel=%d, is_tx=%d\n",
216 ux500_channel
->ch_num
, ux500_channel
->is_tx
);
218 if (channel
->status
== MUSB_DMA_STATUS_BUSY
) {
219 if (ux500_channel
->is_tx
) {
220 csr
= musb_readw(epio
, MUSB_TXCSR
);
221 csr
&= ~(MUSB_TXCSR_AUTOSET
|
224 musb_writew(epio
, MUSB_TXCSR
, csr
);
226 csr
= musb_readw(epio
, MUSB_RXCSR
);
227 csr
&= ~(MUSB_RXCSR_AUTOCLEAR
|
230 musb_writew(epio
, MUSB_RXCSR
, csr
);
233 dmaengine_terminate_all(ux500_channel
->dma_chan
);
234 channel
->status
= MUSB_DMA_STATUS_FREE
;
239 static void ux500_dma_controller_stop(struct ux500_dma_controller
*controller
)
241 struct ux500_dma_channel
*ux500_channel
;
242 struct dma_channel
*channel
;
245 for (ch_num
= 0; ch_num
< UX500_MUSB_DMA_NUM_RX_TX_CHANNELS
; ch_num
++) {
246 channel
= &controller
->rx_channel
[ch_num
].channel
;
247 ux500_channel
= channel
->private_data
;
249 ux500_dma_channel_release(channel
);
251 if (ux500_channel
->dma_chan
)
252 dma_release_channel(ux500_channel
->dma_chan
);
255 for (ch_num
= 0; ch_num
< UX500_MUSB_DMA_NUM_RX_TX_CHANNELS
; ch_num
++) {
256 channel
= &controller
->tx_channel
[ch_num
].channel
;
257 ux500_channel
= channel
->private_data
;
259 ux500_dma_channel_release(channel
);
261 if (ux500_channel
->dma_chan
)
262 dma_release_channel(ux500_channel
->dma_chan
);
266 static int ux500_dma_controller_start(struct ux500_dma_controller
*controller
)
268 struct ux500_dma_channel
*ux500_channel
= NULL
;
269 struct musb
*musb
= controller
->private_data
;
270 struct device
*dev
= musb
->controller
;
271 struct musb_hdrc_platform_data
*plat
= dev_get_platdata(dev
);
272 struct ux500_musb_board_data
*data
;
273 struct dma_channel
*dma_channel
= NULL
;
280 struct ux500_dma_channel
*channel_array
;
284 dev_err(musb
->controller
, "No platform data\n");
288 data
= plat
->board_data
;
291 dma_cap_set(DMA_SLAVE
, mask
);
293 /* Prepare the loop for RX channels */
294 channel_array
= controller
->rx_channel
;
295 param_array
= data
? data
->dma_rx_param_array
: NULL
;
296 chan_names
= (char **)iep_chan_names
;
298 for (dir
= 0; dir
< 2; dir
++) {
300 ch_num
< UX500_MUSB_DMA_NUM_RX_TX_CHANNELS
;
302 ux500_channel
= &channel_array
[ch_num
];
303 ux500_channel
->controller
= controller
;
304 ux500_channel
->ch_num
= ch_num
;
305 ux500_channel
->is_tx
= is_tx
;
307 dma_channel
= &(ux500_channel
->channel
);
308 dma_channel
->private_data
= ux500_channel
;
309 dma_channel
->status
= MUSB_DMA_STATUS_FREE
;
310 dma_channel
->max_len
= SZ_16M
;
312 ux500_channel
->dma_chan
=
313 dma_request_slave_channel(dev
, chan_names
[ch_num
]);
315 if (!ux500_channel
->dma_chan
)
316 ux500_channel
->dma_chan
=
317 dma_request_channel(mask
,
322 param_array
[ch_num
] :
325 if (!ux500_channel
->dma_chan
) {
326 ERR("Dma pipe allocation error dir=%d ch=%d\n",
329 /* Release already allocated channels */
330 ux500_dma_controller_stop(controller
);
337 /* Prepare the loop for TX channels */
338 channel_array
= controller
->tx_channel
;
339 param_array
= data
? data
->dma_tx_param_array
: NULL
;
340 chan_names
= (char **)oep_chan_names
;
347 void ux500_dma_controller_destroy(struct dma_controller
*c
)
349 struct ux500_dma_controller
*controller
= container_of(c
,
350 struct ux500_dma_controller
, controller
);
352 ux500_dma_controller_stop(controller
);
355 EXPORT_SYMBOL_GPL(ux500_dma_controller_destroy
);
357 struct dma_controller
*
358 ux500_dma_controller_create(struct musb
*musb
, void __iomem
*base
)
360 struct ux500_dma_controller
*controller
;
361 struct platform_device
*pdev
= to_platform_device(musb
->controller
);
362 struct resource
*iomem
;
365 controller
= kzalloc(sizeof(*controller
), GFP_KERNEL
);
369 controller
->private_data
= musb
;
371 /* Save physical address for DMA controller. */
372 iomem
= platform_get_resource(pdev
, IORESOURCE_MEM
, 0);
374 dev_err(musb
->controller
, "no memory resource defined\n");
378 controller
->phy_base
= (dma_addr_t
) iomem
->start
;
380 controller
->controller
.channel_alloc
= ux500_dma_channel_allocate
;
381 controller
->controller
.channel_release
= ux500_dma_channel_release
;
382 controller
->controller
.channel_program
= ux500_dma_channel_program
;
383 controller
->controller
.channel_abort
= ux500_dma_channel_abort
;
384 controller
->controller
.is_compatible
= ux500_dma_is_compatible
;
386 ret
= ux500_dma_controller_start(controller
);
389 return &controller
->controller
;
396 EXPORT_SYMBOL_GPL(ux500_dma_controller_create
);