xref: /freebsd/sys/arm/ti/ti_sdma.c (revision c697fb7f)
1 /*-
2  * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3  *
4  * Copyright (c) 2011
5  *	Ben Gray <ben.r.gray@gmail.com>.
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  *
17  * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20  * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
21  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27  * SUCH DAMAGE.
28  */
29 
30 #include <sys/cdefs.h>
31 __FBSDID("$FreeBSD$");
32 
33 #include <sys/param.h>
34 #include <sys/systm.h>
35 #include <sys/bus.h>
36 #include <sys/kernel.h>
37 #include <sys/lock.h>
38 #include <sys/interrupt.h>
39 #include <sys/module.h>
40 #include <sys/malloc.h>
41 #include <sys/mutex.h>
42 #include <sys/rman.h>
43 #include <sys/queue.h>
44 #include <sys/taskqueue.h>
45 #include <sys/timetc.h>
46 #include <machine/bus.h>
47 #include <machine/intr.h>
48 
49 #include <dev/ofw/openfirm.h>
50 #include <dev/ofw/ofw_bus.h>
51 #include <dev/ofw/ofw_bus_subr.h>
52 
53 #include <arm/ti/ti_cpuid.h>
54 #include <arm/ti/ti_prcm.h>
55 #include <arm/ti/ti_sdma.h>
56 #include <arm/ti/ti_sdmareg.h>
57 
58 /**
59  *	Kernel functions for using the DMA controller
60  *
61  *
62  *	DMA TRANSFERS:
63  *	A DMA transfer block consists of a number of frames (FN). Each frame
64  *	consists of a number of elements, and each element can have a size of 8, 16,
65  *	or 32 bits.
66  *
67  *	OMAP44xx and newer chips support linked list (aka scatter gather) transfers,
68  *	where a linked list of source/destination pairs can be placed in memory
69  *	for the H/W to process.  Earlier chips only allowed you to chain multiple
70  *	channels together.  However currently this linked list feature is not
71  *	supported by the driver.
72  *
73  */
74 
75 /**
76  *	Data structure per DMA channel.
77  *
78  *
79  */
80 struct ti_sdma_channel {
81 
82 	/*
83 	 * The configuration registers for the given channel, these are modified
84 	 * by the set functions and only written to the actual registers when a
85 	 * transaction is started.
86 	 */
87 	uint32_t		reg_csdp;
88 	uint32_t		reg_ccr;
89 	uint32_t		reg_cicr;
90 
91 	/* Set when one of the configuration registers above change */
92 	uint32_t		need_reg_write;
93 
94 	/* Callback function used when an interrupt is tripped on the given channel */
95 	void (*callback)(unsigned int ch, uint32_t ch_status, void *data);
96 
97 	/* Callback data passed in the callback ... duh */
98 	void*			callback_data;
99 
100 };
101 
102 /**
103  *	DMA driver context, allocated and stored globally, this driver is not
104  *	intetned to ever be unloaded (see ti_sdma_sc).
105  *
106  */
107 struct ti_sdma_softc {
108 	device_t		sc_dev;
109 	struct resource*	sc_irq_res;
110 	struct resource*	sc_mem_res;
111 
112 	/*
113 	 * I guess in theory we should have a mutex per DMA channel for register
114 	 * modifications. But since we know we are never going to be run on a SMP
115 	 * system, we can use just the single lock for all channels.
116 	 */
117 	struct mtx		sc_mtx;
118 
119 	/* Stores the H/W revision read from the registers */
120 	uint32_t		sc_hw_rev;
121 
122 	/*
123 	 * Bits in the sc_active_channels data field indicate if the channel has
124 	 * been activated.
125 	 */
126 	uint32_t		sc_active_channels;
127 
128 	struct ti_sdma_channel sc_channel[NUM_DMA_CHANNELS];
129 
130 };
131 
132 static struct ti_sdma_softc *ti_sdma_sc = NULL;
133 
134 /**
135  *	Macros for driver mutex locking
136  */
137 #define TI_SDMA_LOCK(_sc)             mtx_lock_spin(&(_sc)->sc_mtx)
138 #define TI_SDMA_UNLOCK(_sc)           mtx_unlock_spin(&(_sc)->sc_mtx)
139 #define TI_SDMA_LOCK_INIT(_sc) \
140 	mtx_init(&_sc->sc_mtx, device_get_nameunit(_sc->sc_dev), \
141 	         "ti_sdma", MTX_SPIN)
142 #define TI_SDMA_LOCK_DESTROY(_sc)     mtx_destroy(&_sc->sc_mtx);
143 #define TI_SDMA_ASSERT_LOCKED(_sc)    mtx_assert(&_sc->sc_mtx, MA_OWNED);
144 #define TI_SDMA_ASSERT_UNLOCKED(_sc)  mtx_assert(&_sc->sc_mtx, MA_NOTOWNED);
145 
146 /**
147  *	Function prototypes
148  *
149  */
150 static void ti_sdma_intr(void *);
151 
152 /**
153  *	ti_sdma_read_4 - reads a 32-bit value from one of the DMA registers
154  *	@sc: DMA device context
155  *	@off: The offset of a register from the DMA register address range
156  *
157  *
158  *	RETURNS:
159  *	32-bit value read from the register.
160  */
161 static inline uint32_t
162 ti_sdma_read_4(struct ti_sdma_softc *sc, bus_size_t off)
163 {
164 	return bus_read_4(sc->sc_mem_res, off);
165 }
166 
167 /**
168  *	ti_sdma_write_4 - writes a 32-bit value to one of the DMA registers
169  *	@sc: DMA device context
170  *	@off: The offset of a register from the DMA register address range
171  *
172  *
173  *	RETURNS:
174  *	32-bit value read from the register.
175  */
176 static inline void
177 ti_sdma_write_4(struct ti_sdma_softc *sc, bus_size_t off, uint32_t val)
178 {
179 	bus_write_4(sc->sc_mem_res, off, val);
180 }
181 
182 /**
183  *	ti_sdma_is_omap3_rev - returns true if H/W is from OMAP3 series
184  *	@sc: DMA device context
185  *
186  */
187 static inline int
188 ti_sdma_is_omap3_rev(struct ti_sdma_softc *sc)
189 {
190 	return (sc->sc_hw_rev == DMA4_OMAP3_REV);
191 }
192 
193 /**
194  *	ti_sdma_is_omap4_rev - returns true if H/W is from OMAP4 series
195  *	@sc: DMA device context
196  *
197  */
198 static inline int
199 ti_sdma_is_omap4_rev(struct ti_sdma_softc *sc)
200 {
201 	return (sc->sc_hw_rev == DMA4_OMAP4_REV);
202 }
203 
204 /**
205  *	ti_sdma_intr - interrupt handler for all 4 DMA IRQs
206  *	@arg: ignored
207  *
208  *	Called when any of the four DMA IRQs are triggered.
209  *
210  *	LOCKING:
211  *	DMA registers protected by internal mutex
212  *
213  *	RETURNS:
214  *	nothing
215  */
216 static void
217 ti_sdma_intr(void *arg)
218 {
219 	struct ti_sdma_softc *sc = ti_sdma_sc;
220 	uint32_t intr;
221 	uint32_t csr;
222 	unsigned int ch, j;
223 	struct ti_sdma_channel* channel;
224 
225 	TI_SDMA_LOCK(sc);
226 
227 	for (j = 0; j < NUM_DMA_IRQS; j++) {
228 
229 		/* Get the flag interrupts (enabled) */
230 		intr = ti_sdma_read_4(sc, DMA4_IRQSTATUS_L(j));
231 		intr &= ti_sdma_read_4(sc, DMA4_IRQENABLE_L(j));
232 		if (intr == 0x00000000)
233 			continue;
234 
235 		/* Loop through checking the status bits */
236 		for (ch = 0; ch < NUM_DMA_CHANNELS; ch++) {
237 			if (intr & (1 << ch)) {
238 				channel = &sc->sc_channel[ch];
239 
240 				/* Read the CSR regsiter and verify we don't have a spurious IRQ */
241 				csr = ti_sdma_read_4(sc, DMA4_CSR(ch));
242 				if (csr == 0) {
243 					device_printf(sc->sc_dev, "Spurious DMA IRQ for channel "
244 					              "%d\n", ch);
245 					continue;
246 				}
247 
248 				/* Sanity check this channel is active */
249 				if ((sc->sc_active_channels & (1 << ch)) == 0) {
250 					device_printf(sc->sc_dev, "IRQ %d for a non-activated "
251 					              "channel %d\n", j, ch);
252 					continue;
253 				}
254 
255 				/* Check the status error codes */
256 				if (csr & DMA4_CSR_DROP)
257 					device_printf(sc->sc_dev, "Synchronization event drop "
258 					              "occurred during the transfer on channel %u\n",
259 								  ch);
260 				if (csr & DMA4_CSR_SECURE_ERR)
261 					device_printf(sc->sc_dev, "Secure transaction error event "
262 					              "on channel %u\n", ch);
263 				if (csr & DMA4_CSR_MISALIGNED_ADRS_ERR)
264 					device_printf(sc->sc_dev, "Misaligned address error event "
265 					              "on channel %u\n", ch);
266 				if (csr & DMA4_CSR_TRANS_ERR) {
267 					device_printf(sc->sc_dev, "Transaction error event on "
268 					              "channel %u\n", ch);
269 					/*
270 					 * Apparently according to linux code, there is an errata
271 					 * that says the channel is not disabled upon this error.
272 					 * They explicitly disable the channel here .. since I
273 					 * haven't seen the errata, I'm going to ignore for now.
274 					 */
275 				}
276 
277 				/* Clear the status flags for the IRQ */
278 				ti_sdma_write_4(sc, DMA4_CSR(ch), DMA4_CSR_CLEAR_MASK);
279 				ti_sdma_write_4(sc, DMA4_IRQSTATUS_L(j), (1 << ch));
280 
281 				/* Call the callback for the given channel */
282 				if (channel->callback)
283 					channel->callback(ch, csr, channel->callback_data);
284 			}
285 		}
286 	}
287 
288 	TI_SDMA_UNLOCK(sc);
289 
290 	return;
291 }
292 
293 /**
294  *	ti_sdma_activate_channel - activates a DMA channel
295  *	@ch: upon return contains the channel allocated
296  *	@callback: a callback function to associate with the channel
297  *	@data: optional data supplied when the callback is called
298  *
299  *	Simply activates a channel be enabling and writing default values to the
300  *	channel's register set.  It doesn't start a transaction, just populates the
301  *	internal data structures and sets defaults.
302  *
303  *	Note this function doesn't enable interrupts, for that you need to call
304  *	ti_sdma_enable_channel_irq(). If not using IRQ to detect the end of the
305  *	transfer, you can use ti_sdma_status_poll() to detect a change in the
306  *	status.
307  *
308  *	A channel must be activated before any of the other DMA functions can be
309  *	called on it.
310  *
311  *	LOCKING:
312  *	DMA registers protected by internal mutex
313  *
314  *	RETURNS:
315  *	0 on success, otherwise an error code
316  */
317 int
318 ti_sdma_activate_channel(unsigned int *ch,
319                           void (*callback)(unsigned int ch, uint32_t status, void *data),
320                           void *data)
321 {
322 	struct ti_sdma_softc *sc = ti_sdma_sc;
323 	struct ti_sdma_channel *channel = NULL;
324 	uint32_t addr;
325 	unsigned int i;
326 
327 	/* Sanity check */
328 	if (sc == NULL)
329 		return (ENOMEM);
330 
331 	if (ch == NULL)
332 		return (EINVAL);
333 
334 	TI_SDMA_LOCK(sc);
335 
336 	/* Check to see if all channels are in use */
337 	if (sc->sc_active_channels == 0xffffffff) {
338 		TI_SDMA_UNLOCK(sc);
339 		return (ENOMEM);
340 	}
341 
342 	/* Find the first non-active channel */
343 	for (i = 0; i < NUM_DMA_CHANNELS; i++) {
344 		if (!(sc->sc_active_channels & (0x1 << i))) {
345 			sc->sc_active_channels |= (0x1 << i);
346 			*ch = i;
347 			break;
348 		}
349 	}
350 
351 	/* Get the channel struct and populate the fields */
352 	channel = &sc->sc_channel[*ch];
353 
354 	channel->callback = callback;
355 	channel->callback_data = data;
356 
357 	channel->need_reg_write = 1;
358 
359 	/* Set the default configuration for the DMA channel */
360 	channel->reg_csdp = DMA4_CSDP_DATA_TYPE(0x2)
361 		| DMA4_CSDP_SRC_BURST_MODE(0)
362 		| DMA4_CSDP_DST_BURST_MODE(0)
363 		| DMA4_CSDP_SRC_ENDIANISM(0)
364 		| DMA4_CSDP_DST_ENDIANISM(0)
365 		| DMA4_CSDP_WRITE_MODE(0)
366 		| DMA4_CSDP_SRC_PACKED(0)
367 		| DMA4_CSDP_DST_PACKED(0);
368 
369 	channel->reg_ccr = DMA4_CCR_DST_ADDRESS_MODE(1)
370 		| DMA4_CCR_SRC_ADDRESS_MODE(1)
371 		| DMA4_CCR_READ_PRIORITY(0)
372 		| DMA4_CCR_WRITE_PRIORITY(0)
373 		| DMA4_CCR_SYNC_TRIGGER(0)
374 		| DMA4_CCR_FRAME_SYNC(0)
375 		| DMA4_CCR_BLOCK_SYNC(0);
376 
377 	channel->reg_cicr = DMA4_CICR_TRANS_ERR_IE
378 		| DMA4_CICR_SECURE_ERR_IE
379 		| DMA4_CICR_SUPERVISOR_ERR_IE
380 		| DMA4_CICR_MISALIGNED_ADRS_ERR_IE;
381 
382 	/* Clear all the channel registers, this should abort any transaction */
383 	for (addr = DMA4_CCR(*ch); addr <= DMA4_COLOR(*ch); addr += 4)
384 		ti_sdma_write_4(sc, addr, 0x00000000);
385 
386 	TI_SDMA_UNLOCK(sc);
387 
388 	return 0;
389 }
390 
391 /**
392  *	ti_sdma_deactivate_channel - deactivates a channel
393  *	@ch: the channel to deactivate
394  *
395  *
396  *
397  *	LOCKING:
398  *	DMA registers protected by internal mutex
399  *
400  *	RETURNS:
401  *	EH_HANDLED or EH_NOT_HANDLED
402  */
403 int
404 ti_sdma_deactivate_channel(unsigned int ch)
405 {
406 	struct ti_sdma_softc *sc = ti_sdma_sc;
407 	unsigned int j;
408 	unsigned int addr;
409 
410 	/* Sanity check */
411 	if (sc == NULL)
412 		return (ENOMEM);
413 
414 	TI_SDMA_LOCK(sc);
415 
416 	/* First check if the channel is currently active */
417 	if ((sc->sc_active_channels & (1 << ch)) == 0) {
418 		TI_SDMA_UNLOCK(sc);
419 		return (EBUSY);
420 	}
421 
422 	/* Mark the channel as inactive */
423 	sc->sc_active_channels &= ~(1 << ch);
424 
425 	/* Disable all DMA interrupts for the channel. */
426 	ti_sdma_write_4(sc, DMA4_CICR(ch), 0);
427 
428 	/* Make sure the DMA transfer is stopped. */
429 	ti_sdma_write_4(sc, DMA4_CCR(ch), 0);
430 
431 	/* Clear the CSR register and IRQ status register */
432 	ti_sdma_write_4(sc, DMA4_CSR(ch), DMA4_CSR_CLEAR_MASK);
433 	for (j = 0; j < NUM_DMA_IRQS; j++) {
434 		ti_sdma_write_4(sc, DMA4_IRQSTATUS_L(j), (1 << ch));
435 	}
436 
437 	/* Clear all the channel registers, this should abort any transaction */
438 	for (addr = DMA4_CCR(ch); addr <= DMA4_COLOR(ch); addr += 4)
439 		ti_sdma_write_4(sc, addr, 0x00000000);
440 
441 	TI_SDMA_UNLOCK(sc);
442 
443 	return 0;
444 }
445 
446 /**
447  *	ti_sdma_disable_channel_irq - disables IRQ's on the given channel
448  *	@ch: the channel to disable IRQ's on
449  *
450  *	Disable interrupt generation for the given channel.
451  *
452  *	LOCKING:
453  *	DMA registers protected by internal mutex
454  *
455  *	RETURNS:
456  *	EH_HANDLED or EH_NOT_HANDLED
457  */
458 int
459 ti_sdma_disable_channel_irq(unsigned int ch)
460 {
461 	struct ti_sdma_softc *sc = ti_sdma_sc;
462 	uint32_t irq_enable;
463 	unsigned int j;
464 
465 	/* Sanity check */
466 	if (sc == NULL)
467 		return (ENOMEM);
468 
469 	TI_SDMA_LOCK(sc);
470 
471 	if ((sc->sc_active_channels & (1 << ch)) == 0) {
472 		TI_SDMA_UNLOCK(sc);
473 		return (EINVAL);
474 	}
475 
476 	/* Disable all the individual error conditions */
477 	sc->sc_channel[ch].reg_cicr = 0x0000;
478 	ti_sdma_write_4(sc, DMA4_CICR(ch), 0x0000);
479 
480 	/* Disable the channel interrupt enable */
481 	for (j = 0; j < NUM_DMA_IRQS; j++) {
482 		irq_enable = ti_sdma_read_4(sc, DMA4_IRQENABLE_L(j));
483 		irq_enable &= ~(1 << ch);
484 
485 		ti_sdma_write_4(sc, DMA4_IRQENABLE_L(j), irq_enable);
486 	}
487 
488 	/* Indicate the registers need to be rewritten on the next transaction */
489 	sc->sc_channel[ch].need_reg_write = 1;
490 
491 	TI_SDMA_UNLOCK(sc);
492 
493 	return (0);
494 }
495 
496 /**
497  *	ti_sdma_disable_channel_irq - enables IRQ's on the given channel
498  *	@ch: the channel to enable IRQ's on
499  *	@flags: bitmask of interrupt types to enable
500  *
501  *	Flags can be a bitmask of the following options:
502  *		DMA_IRQ_FLAG_DROP
503  *		DMA_IRQ_FLAG_HALF_FRAME_COMPL
504  *		DMA_IRQ_FLAG_FRAME_COMPL
505  *		DMA_IRQ_FLAG_START_LAST_FRAME
506  *		DMA_IRQ_FLAG_BLOCK_COMPL
507  *		DMA_IRQ_FLAG_ENDOF_PKT
508  *		DMA_IRQ_FLAG_DRAIN
509  *
510  *
511  *	LOCKING:
512  *	DMA registers protected by internal mutex
513  *
514  *	RETURNS:
515  *	EH_HANDLED or EH_NOT_HANDLED
516  */
517 int
518 ti_sdma_enable_channel_irq(unsigned int ch, uint32_t flags)
519 {
520 	struct ti_sdma_softc *sc = ti_sdma_sc;
521 	uint32_t irq_enable;
522 
523 	/* Sanity check */
524 	if (sc == NULL)
525 		return (ENOMEM);
526 
527 	TI_SDMA_LOCK(sc);
528 
529 	if ((sc->sc_active_channels & (1 << ch)) == 0) {
530 		TI_SDMA_UNLOCK(sc);
531 		return (EINVAL);
532 	}
533 
534 	/* Always enable the error interrupts if we have interrupts enabled */
535 	flags |= DMA4_CICR_TRANS_ERR_IE | DMA4_CICR_SECURE_ERR_IE |
536 	         DMA4_CICR_SUPERVISOR_ERR_IE | DMA4_CICR_MISALIGNED_ADRS_ERR_IE;
537 
538 	sc->sc_channel[ch].reg_cicr = flags;
539 
540 	/* Write the values to the register */
541 	ti_sdma_write_4(sc, DMA4_CICR(ch), flags);
542 
543 	/* Enable the channel interrupt enable */
544 	irq_enable = ti_sdma_read_4(sc, DMA4_IRQENABLE_L(0));
545 	irq_enable |= (1 << ch);
546 
547 	ti_sdma_write_4(sc, DMA4_IRQENABLE_L(0), irq_enable);
548 
549 	/* Indicate the registers need to be rewritten on the next transaction */
550 	sc->sc_channel[ch].need_reg_write = 1;
551 
552 	TI_SDMA_UNLOCK(sc);
553 
554 	return (0);
555 }
556 
557 /**
558  *	ti_sdma_get_channel_status - returns the status of a given channel
559  *	@ch: the channel number to get the status of
560  *	@status: upon return will contain the status bitmask, see below for possible
561  *	         values.
562  *
563  *	      DMA_STATUS_DROP
564  *	      DMA_STATUS_HALF
565  *	      DMA_STATUS_FRAME
566  *	      DMA_STATUS_LAST
567  *	      DMA_STATUS_BLOCK
568  *	      DMA_STATUS_SYNC
569  *	      DMA_STATUS_PKT
570  *	      DMA_STATUS_TRANS_ERR
571  *	      DMA_STATUS_SECURE_ERR
572  *	      DMA_STATUS_SUPERVISOR_ERR
573  *	      DMA_STATUS_MISALIGNED_ADRS_ERR
574  *	      DMA_STATUS_DRAIN_END
575  *
576  *
577  *	LOCKING:
578  *	DMA registers protected by internal mutex
579  *
580  *	RETURNS:
581  *	EH_HANDLED or EH_NOT_HANDLED
582  */
583 int
584 ti_sdma_get_channel_status(unsigned int ch, uint32_t *status)
585 {
586 	struct ti_sdma_softc *sc = ti_sdma_sc;
587 	uint32_t csr;
588 
589 	/* Sanity check */
590 	if (sc == NULL)
591 		return (ENOMEM);
592 
593 	TI_SDMA_LOCK(sc);
594 
595 	if ((sc->sc_active_channels & (1 << ch)) == 0) {
596 		TI_SDMA_UNLOCK(sc);
597 		return (EINVAL);
598 	}
599 
600 	TI_SDMA_UNLOCK(sc);
601 
602 	csr = ti_sdma_read_4(sc, DMA4_CSR(ch));
603 
604 	if (status != NULL)
605 		*status = csr;
606 
607 	return (0);
608 }
609 
610 /**
611  *	ti_sdma_start_xfer - starts a DMA transfer
612  *	@ch: the channel number to set the endianness of
613  *	@src_paddr: the source phsyical address
614  *	@dst_paddr: the destination phsyical address
615  *	@frmcnt: the number of frames per block
616  *	@elmcnt: the number of elements in a frame, an element is either an 8, 16
617  *           or 32-bit value as defined by ti_sdma_set_xfer_burst()
618  *
619  *
620  *	LOCKING:
621  *	DMA registers protected by internal mutex
622  *
623  *	RETURNS:
624  *	EH_HANDLED or EH_NOT_HANDLED
625  */
626 int
627 ti_sdma_start_xfer(unsigned int ch, unsigned int src_paddr,
628                     unsigned long dst_paddr,
629                     unsigned int frmcnt, unsigned int elmcnt)
630 {
631 	struct ti_sdma_softc *sc = ti_sdma_sc;
632 	struct ti_sdma_channel *channel;
633 	uint32_t ccr;
634 
635 	/* Sanity check */
636 	if (sc == NULL)
637 		return (ENOMEM);
638 
639 	TI_SDMA_LOCK(sc);
640 
641 	if ((sc->sc_active_channels & (1 << ch)) == 0) {
642 		TI_SDMA_UNLOCK(sc);
643 		return (EINVAL);
644 	}
645 
646 	channel = &sc->sc_channel[ch];
647 
648 	/* a) Write the CSDP register */
649 	ti_sdma_write_4(sc, DMA4_CSDP(ch),
650 	    channel->reg_csdp | DMA4_CSDP_WRITE_MODE(1));
651 
652 	/* b) Set the number of element per frame CEN[23:0] */
653 	ti_sdma_write_4(sc, DMA4_CEN(ch), elmcnt);
654 
655 	/* c) Set the number of frame per block CFN[15:0] */
656 	ti_sdma_write_4(sc, DMA4_CFN(ch), frmcnt);
657 
658 	/* d) Set the Source/dest start address index CSSA[31:0]/CDSA[31:0] */
659 	ti_sdma_write_4(sc, DMA4_CSSA(ch), src_paddr);
660 	ti_sdma_write_4(sc, DMA4_CDSA(ch), dst_paddr);
661 
662 	/* e) Write the CCR register */
663 	ti_sdma_write_4(sc, DMA4_CCR(ch), channel->reg_ccr);
664 
665 	/* f)  - Set the source element index increment CSEI[15:0] */
666 	ti_sdma_write_4(sc, DMA4_CSE(ch), 0x0001);
667 
668 	/*     - Set the source frame index increment CSFI[15:0] */
669 	ti_sdma_write_4(sc, DMA4_CSF(ch), 0x0001);
670 
671 	/*     - Set the destination element index increment CDEI[15:0]*/
672 	ti_sdma_write_4(sc, DMA4_CDE(ch), 0x0001);
673 
674 	/* - Set the destination frame index increment CDFI[31:0] */
675 	ti_sdma_write_4(sc, DMA4_CDF(ch), 0x0001);
676 
677 	/* Clear the status register */
678 	ti_sdma_write_4(sc, DMA4_CSR(ch), 0x1FFE);
679 
680 	/* Write the start-bit and away we go */
681 	ccr = ti_sdma_read_4(sc, DMA4_CCR(ch));
682 	ccr |= (1 << 7);
683 	ti_sdma_write_4(sc, DMA4_CCR(ch), ccr);
684 
685 	/* Clear the reg write flag */
686 	channel->need_reg_write = 0;
687 
688 	TI_SDMA_UNLOCK(sc);
689 
690 	return (0);
691 }
692 
693 /**
694  *	ti_sdma_start_xfer_packet - starts a packet DMA transfer
695  *	@ch: the channel number to use for the transfer
696  *	@src_paddr: the source physical address
697  *	@dst_paddr: the destination physical address
698  *	@frmcnt: the number of frames to transfer
699  *	@elmcnt: the number of elements in a frame, an element is either an 8, 16
700  *           or 32-bit value as defined by ti_sdma_set_xfer_burst()
701  *	@pktsize: the number of elements in each transfer packet
702  *
703  *	The @frmcnt and @elmcnt define the overall number of bytes to transfer,
704  *	typically @frmcnt is 1 and @elmcnt contains the total number of elements.
705  *	@pktsize is the size of each individual packet, there might be multiple
706  *	packets per transfer.  i.e. for the following with element size of 32-bits
707  *
708  *		frmcnt = 1, elmcnt = 512, pktsize = 128
709  *
710  *	       Total transfer bytes = 1 * 512 = 512 elements or 2048 bytes
711  *	       Packets transferred   = 128 / 512 = 4
712  *
713  *
714  *	LOCKING:
715  *	DMA registers protected by internal mutex
716  *
717  *	RETURNS:
718  *	EH_HANDLED or EH_NOT_HANDLED
719  */
720 int
721 ti_sdma_start_xfer_packet(unsigned int ch, unsigned int src_paddr,
722                            unsigned long dst_paddr, unsigned int frmcnt,
723                            unsigned int elmcnt, unsigned int pktsize)
724 {
725 	struct ti_sdma_softc *sc = ti_sdma_sc;
726 	struct ti_sdma_channel *channel;
727 	uint32_t ccr;
728 
729 	/* Sanity check */
730 	if (sc == NULL)
731 		return (ENOMEM);
732 
733 	TI_SDMA_LOCK(sc);
734 
735 	if ((sc->sc_active_channels & (1 << ch)) == 0) {
736 		TI_SDMA_UNLOCK(sc);
737 		return (EINVAL);
738 	}
739 
740 	channel = &sc->sc_channel[ch];
741 
742 	/* a) Write the CSDP register */
743 	if (channel->need_reg_write)
744 		ti_sdma_write_4(sc, DMA4_CSDP(ch),
745 		    channel->reg_csdp | DMA4_CSDP_WRITE_MODE(1));
746 
747 	/* b) Set the number of elements to transfer CEN[23:0] */
748 	ti_sdma_write_4(sc, DMA4_CEN(ch), elmcnt);
749 
750 	/* c) Set the number of frames to transfer CFN[15:0] */
751 	ti_sdma_write_4(sc, DMA4_CFN(ch), frmcnt);
752 
753 	/* d) Set the Source/dest start address index CSSA[31:0]/CDSA[31:0] */
754 	ti_sdma_write_4(sc, DMA4_CSSA(ch), src_paddr);
755 	ti_sdma_write_4(sc, DMA4_CDSA(ch), dst_paddr);
756 
757 	/* e) Write the CCR register */
758 	ti_sdma_write_4(sc, DMA4_CCR(ch),
759 	    channel->reg_ccr | DMA4_CCR_PACKET_TRANS);
760 
761 	/* f)  - Set the source element index increment CSEI[15:0] */
762 	ti_sdma_write_4(sc, DMA4_CSE(ch), 0x0001);
763 
764 	/*     - Set the packet size, this is dependent on the sync source */
765 	if (channel->reg_ccr & DMA4_CCR_SEL_SRC_DST_SYNC(1))
766 		ti_sdma_write_4(sc, DMA4_CSF(ch), pktsize);
767 	else
768 		ti_sdma_write_4(sc, DMA4_CDF(ch), pktsize);
769 
770 	/* - Set the destination frame index increment CDFI[31:0] */
771 	ti_sdma_write_4(sc, DMA4_CDE(ch), 0x0001);
772 
773 	/* Clear the status register */
774 	ti_sdma_write_4(sc, DMA4_CSR(ch), 0x1FFE);
775 
776 	/* Write the start-bit and away we go */
777 	ccr = ti_sdma_read_4(sc, DMA4_CCR(ch));
778 	ccr |= (1 << 7);
779 	ti_sdma_write_4(sc, DMA4_CCR(ch), ccr);
780 
781 	/* Clear the reg write flag */
782 	channel->need_reg_write = 0;
783 
784 	TI_SDMA_UNLOCK(sc);
785 
786 	return (0);
787 }
788 
789 /**
790  *	ti_sdma_stop_xfer - stops any currently active transfers
791  *	@ch: the channel number to set the endianness of
792  *
793  *	This function call is effectively a NOP if no transaction is in progress.
794  *
795  *	LOCKING:
796  *	DMA registers protected by internal mutex
797  *
798  *	RETURNS:
799  *	EH_HANDLED or EH_NOT_HANDLED
800  */
801 int
802 ti_sdma_stop_xfer(unsigned int ch)
803 {
804 	struct ti_sdma_softc *sc = ti_sdma_sc;
805 	unsigned int j;
806 
807 	/* Sanity check */
808 	if (sc == NULL)
809 		return (ENOMEM);
810 
811 	TI_SDMA_LOCK(sc);
812 
813 	if ((sc->sc_active_channels & (1 << ch)) == 0) {
814 		TI_SDMA_UNLOCK(sc);
815 		return (EINVAL);
816 	}
817 
818 	/* Disable all DMA interrupts for the channel. */
819 	ti_sdma_write_4(sc, DMA4_CICR(ch), 0);
820 
821 	/* Make sure the DMA transfer is stopped. */
822 	ti_sdma_write_4(sc, DMA4_CCR(ch), 0);
823 
824 	/* Clear the CSR register and IRQ status register */
825 	ti_sdma_write_4(sc, DMA4_CSR(ch), DMA4_CSR_CLEAR_MASK);
826 	for (j = 0; j < NUM_DMA_IRQS; j++) {
827 		ti_sdma_write_4(sc, DMA4_IRQSTATUS_L(j), (1 << ch));
828 	}
829 
830 	/* Configuration registers need to be re-written on the next xfer */
831 	sc->sc_channel[ch].need_reg_write = 1;
832 
833 	TI_SDMA_UNLOCK(sc);
834 
835 	return (0);
836 }
837 
838 /**
839  *	ti_sdma_set_xfer_endianess - sets the endianness of subsequent transfers
840  *	@ch: the channel number to set the endianness of
841  *	@src: the source endianness (either DMA_ENDIAN_LITTLE or DMA_ENDIAN_BIG)
842  *	@dst: the destination endianness (either DMA_ENDIAN_LITTLE or DMA_ENDIAN_BIG)
843  *
844  *
845  *	LOCKING:
846  *	DMA registers protected by internal mutex
847  *
848  *	RETURNS:
849  *	EH_HANDLED or EH_NOT_HANDLED
850  */
851 int
852 ti_sdma_set_xfer_endianess(unsigned int ch, unsigned int src, unsigned int dst)
853 {
854 	struct ti_sdma_softc *sc = ti_sdma_sc;
855 
856 	/* Sanity check */
857 	if (sc == NULL)
858 		return (ENOMEM);
859 
860 	TI_SDMA_LOCK(sc);
861 
862 	if ((sc->sc_active_channels & (1 << ch)) == 0) {
863 		TI_SDMA_UNLOCK(sc);
864 		return (EINVAL);
865 	}
866 
867 	sc->sc_channel[ch].reg_csdp &= ~DMA4_CSDP_SRC_ENDIANISM(1);
868 	sc->sc_channel[ch].reg_csdp |= DMA4_CSDP_SRC_ENDIANISM(src);
869 
870 	sc->sc_channel[ch].reg_csdp &= ~DMA4_CSDP_DST_ENDIANISM(1);
871 	sc->sc_channel[ch].reg_csdp |= DMA4_CSDP_DST_ENDIANISM(dst);
872 
873 	sc->sc_channel[ch].need_reg_write = 1;
874 
875 	TI_SDMA_UNLOCK(sc);
876 
877 	return 0;
878 }
879 
880 /**
881  *	ti_sdma_set_xfer_burst - sets the source and destination element size
882  *	@ch: the channel number to set the burst settings of
883  *	@src: the source endianness (either DMA_BURST_NONE, DMA_BURST_16, DMA_BURST_32
884  *	      or DMA_BURST_64)
885  *	@dst: the destination endianness (either DMA_BURST_NONE, DMA_BURST_16,
886  *	      DMA_BURST_32 or DMA_BURST_64)
887  *
888  *	This function sets the size of the elements for all subsequent transfers.
889  *
890  *	LOCKING:
891  *	DMA registers protected by internal mutex
892  *
893  *	RETURNS:
894  *	EH_HANDLED or EH_NOT_HANDLED
895  */
896 int
897 ti_sdma_set_xfer_burst(unsigned int ch, unsigned int src, unsigned int dst)
898 {
899 	struct ti_sdma_softc *sc = ti_sdma_sc;
900 
901 	/* Sanity check */
902 	if (sc == NULL)
903 		return (ENOMEM);
904 
905 	TI_SDMA_LOCK(sc);
906 
907 	if ((sc->sc_active_channels & (1 << ch)) == 0) {
908 		TI_SDMA_UNLOCK(sc);
909 		return (EINVAL);
910 	}
911 
912 	sc->sc_channel[ch].reg_csdp &= ~DMA4_CSDP_SRC_BURST_MODE(0x3);
913 	sc->sc_channel[ch].reg_csdp |= DMA4_CSDP_SRC_BURST_MODE(src);
914 
915 	sc->sc_channel[ch].reg_csdp &= ~DMA4_CSDP_DST_BURST_MODE(0x3);
916 	sc->sc_channel[ch].reg_csdp |= DMA4_CSDP_DST_BURST_MODE(dst);
917 
918 	sc->sc_channel[ch].need_reg_write = 1;
919 
920 	TI_SDMA_UNLOCK(sc);
921 
922 	return 0;
923 }
924 
925 /**
926  *	ti_sdma_set_xfer_data_type - driver attach function
927  *	@ch: the channel number to set the endianness of
928  *	@type: the xfer data type (either DMA_DATA_8BITS_SCALAR, DMA_DATA_16BITS_SCALAR
929  *	       or DMA_DATA_32BITS_SCALAR)
930  *
931  *
932  *	LOCKING:
933  *	DMA registers protected by internal mutex
934  *
935  *	RETURNS:
936  *	EH_HANDLED or EH_NOT_HANDLED
937  */
938 int
939 ti_sdma_set_xfer_data_type(unsigned int ch, unsigned int type)
940 {
941 	struct ti_sdma_softc *sc = ti_sdma_sc;
942 
943 	/* Sanity check */
944 	if (sc == NULL)
945 		return (ENOMEM);
946 
947 	TI_SDMA_LOCK(sc);
948 
949 	if ((sc->sc_active_channels & (1 << ch)) == 0) {
950 		TI_SDMA_UNLOCK(sc);
951 		return (EINVAL);
952 	}
953 
954 	sc->sc_channel[ch].reg_csdp &= ~DMA4_CSDP_DATA_TYPE(0x3);
955 	sc->sc_channel[ch].reg_csdp |= DMA4_CSDP_DATA_TYPE(type);
956 
957 	sc->sc_channel[ch].need_reg_write = 1;
958 
959 	TI_SDMA_UNLOCK(sc);
960 
961 	return 0;
962 }
963 
964 /**
965  *	ti_sdma_set_callback - driver attach function
966  *	@dev: dma device handle
967  *
968  *
969  *
970  *	LOCKING:
971  *	DMA registers protected by internal mutex
972  *
973  *	RETURNS:
974  *	EH_HANDLED or EH_NOT_HANDLED
975  */
976 int
977 ti_sdma_set_callback(unsigned int ch,
978                       void (*callback)(unsigned int ch, uint32_t status, void *data),
979                       void *data)
980 {
981 	struct ti_sdma_softc *sc = ti_sdma_sc;
982 
983 	/* Sanity check */
984 	if (sc == NULL)
985 		return (ENOMEM);
986 
987 	TI_SDMA_LOCK(sc);
988 
989 	if ((sc->sc_active_channels & (1 << ch)) == 0) {
990 		TI_SDMA_UNLOCK(sc);
991 		return (EINVAL);
992 	}
993 
994 	sc->sc_channel[ch].callback = callback;
995 	sc->sc_channel[ch].callback_data = data;
996 
997 	sc->sc_channel[ch].need_reg_write = 1;
998 
999 	TI_SDMA_UNLOCK(sc);
1000 
1001 	return 0;
1002 }
1003 
1004 /**
1005  *	ti_sdma_sync_params - sets channel sync settings
1006  *	@ch: the channel number to set the sync on
1007  *	@trigger: the number of the sync trigger, this depends on what other H/W
1008  *	          module is triggering/receiving the DMA transactions
1009  *	@mode: flags describing the sync mode to use, it may have one or more of
1010  *	          the following bits set; TI_SDMA_SYNC_FRAME,
1011  *	          TI_SDMA_SYNC_BLOCK, TI_SDMA_SYNC_TRIG_ON_SRC.
1012  *
1013  *
1014  *
1015  *	LOCKING:
1016  *	DMA registers protected by internal mutex
1017  *
1018  *	RETURNS:
1019  *	EH_HANDLED or EH_NOT_HANDLED
1020  */
1021 int
1022 ti_sdma_sync_params(unsigned int ch, unsigned int trigger, unsigned int mode)
1023 {
1024 	struct ti_sdma_softc *sc = ti_sdma_sc;
1025 	uint32_t ccr;
1026 
1027 	/* Sanity check */
1028 	if (sc == NULL)
1029 		return (ENOMEM);
1030 
1031 	TI_SDMA_LOCK(sc);
1032 
1033 	if ((sc->sc_active_channels & (1 << ch)) == 0) {
1034 		TI_SDMA_UNLOCK(sc);
1035 		return (EINVAL);
1036 	}
1037 
1038 	ccr = sc->sc_channel[ch].reg_ccr;
1039 
1040 	ccr &= ~DMA4_CCR_SYNC_TRIGGER(0x7F);
1041 	ccr |= DMA4_CCR_SYNC_TRIGGER(trigger + 1);
1042 
1043 	if (mode & TI_SDMA_SYNC_FRAME)
1044 		ccr |= DMA4_CCR_FRAME_SYNC(1);
1045 	else
1046 		ccr &= ~DMA4_CCR_FRAME_SYNC(1);
1047 
1048 	if (mode & TI_SDMA_SYNC_BLOCK)
1049 		ccr |= DMA4_CCR_BLOCK_SYNC(1);
1050 	else
1051 		ccr &= ~DMA4_CCR_BLOCK_SYNC(1);
1052 
1053 	if (mode & TI_SDMA_SYNC_TRIG_ON_SRC)
1054 		ccr |= DMA4_CCR_SEL_SRC_DST_SYNC(1);
1055 	else
1056 		ccr &= ~DMA4_CCR_SEL_SRC_DST_SYNC(1);
1057 
1058 	sc->sc_channel[ch].reg_ccr = ccr;
1059 
1060 	sc->sc_channel[ch].need_reg_write = 1;
1061 
1062 	TI_SDMA_UNLOCK(sc);
1063 
1064 	return 0;
1065 }
1066 
1067 /**
1068  *	ti_sdma_set_addr_mode - driver attach function
1069  *	@ch: the channel number to set the endianness of
1070  *	@rd_mode: the xfer source addressing mode (either DMA_ADDR_CONSTANT,
1071  *	          DMA_ADDR_POST_INCREMENT, DMA_ADDR_SINGLE_INDEX or
1072  *	          DMA_ADDR_DOUBLE_INDEX)
1073  *	@wr_mode: the xfer destination addressing mode (either DMA_ADDR_CONSTANT,
1074  *	          DMA_ADDR_POST_INCREMENT, DMA_ADDR_SINGLE_INDEX or
1075  *	          DMA_ADDR_DOUBLE_INDEX)
1076  *
1077  *
1078  *	LOCKING:
1079  *	DMA registers protected by internal mutex
1080  *
1081  *	RETURNS:
1082  *	EH_HANDLED or EH_NOT_HANDLED
1083  */
1084 int
1085 ti_sdma_set_addr_mode(unsigned int ch, unsigned int src_mode,
1086                        unsigned int dst_mode)
1087 {
1088 	struct ti_sdma_softc *sc = ti_sdma_sc;
1089 	uint32_t ccr;
1090 
1091 	/* Sanity check */
1092 	if (sc == NULL)
1093 		return (ENOMEM);
1094 
1095 	TI_SDMA_LOCK(sc);
1096 
1097 	if ((sc->sc_active_channels & (1 << ch)) == 0) {
1098 		TI_SDMA_UNLOCK(sc);
1099 		return (EINVAL);
1100 	}
1101 
1102 	ccr = sc->sc_channel[ch].reg_ccr;
1103 
1104 	ccr &= ~DMA4_CCR_SRC_ADDRESS_MODE(0x3);
1105 	ccr |= DMA4_CCR_SRC_ADDRESS_MODE(src_mode);
1106 
1107 	ccr &= ~DMA4_CCR_DST_ADDRESS_MODE(0x3);
1108 	ccr |= DMA4_CCR_DST_ADDRESS_MODE(dst_mode);
1109 
1110 	sc->sc_channel[ch].reg_ccr = ccr;
1111 
1112 	sc->sc_channel[ch].need_reg_write = 1;
1113 
1114 	TI_SDMA_UNLOCK(sc);
1115 
1116 	return 0;
1117 }
1118 
1119 /**
1120  *	ti_sdma_probe - driver probe function
1121  *	@dev: dma device handle
1122  *
1123  *
1124  *
1125  *	RETURNS:
1126  *	Always returns 0.
1127  */
1128 static int
1129 ti_sdma_probe(device_t dev)
1130 {
1131 
1132 	if (!ofw_bus_status_okay(dev))
1133 		return (ENXIO);
1134 
1135 	if (!ofw_bus_is_compatible(dev, "ti,omap4430-sdma"))
1136 		return (ENXIO);
1137 
1138 	device_set_desc(dev, "TI sDMA Controller");
1139 	return (0);
1140 }
1141 
1142 /**
1143  *	ti_sdma_attach - driver attach function
1144  *	@dev: dma device handle
1145  *
1146  *	Initialises memory mapping/pointers to the DMA register set and requests
1147  *	IRQs. This is effectively the setup function for the driver.
1148  *
1149  *	RETURNS:
1150  *	0 on success or a negative error code failure.
1151  */
1152 static int
1153 ti_sdma_attach(device_t dev)
1154 {
1155 	struct ti_sdma_softc *sc = device_get_softc(dev);
1156 	unsigned int timeout;
1157 	unsigned int i;
1158 	int      rid;
1159 	void    *ihl;
1160 	int      err;
1161 
1162 	/* Setup the basics */
1163 	sc->sc_dev = dev;
1164 
1165 	/* No channels active at the moment */
1166 	sc->sc_active_channels = 0x00000000;
1167 
1168 	/* Mutex to protect the shared data structures */
1169 	TI_SDMA_LOCK_INIT(sc);
1170 
1171 	/* Get the memory resource for the register mapping */
1172 	rid = 0;
1173 	sc->sc_mem_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, RF_ACTIVE);
1174 	if (sc->sc_mem_res == NULL)
1175 		panic("%s: Cannot map registers", device_get_name(dev));
1176 
1177 	/* Enable the interface and functional clocks */
1178 	ti_prcm_clk_enable(SDMA_CLK);
1179 
1180 	/* Read the sDMA revision register and sanity check it's known */
1181 	sc->sc_hw_rev = ti_sdma_read_4(sc, DMA4_REVISION);
1182 	device_printf(dev, "sDMA revision %08x\n", sc->sc_hw_rev);
1183 
1184 	if (!ti_sdma_is_omap4_rev(sc) && !ti_sdma_is_omap3_rev(sc)) {
1185 		device_printf(sc->sc_dev, "error - unknown sDMA H/W revision\n");
1186 		return (EINVAL);
1187 	}
1188 
1189 	/* Disable all interrupts */
1190 	for (i = 0; i < NUM_DMA_IRQS; i++) {
1191 		ti_sdma_write_4(sc, DMA4_IRQENABLE_L(i), 0x00000000);
1192 	}
1193 
1194 	/* Soft-reset is only supported on pre-OMAP44xx devices */
1195 	if (ti_sdma_is_omap3_rev(sc)) {
1196 
1197 		/* Soft-reset */
1198 		ti_sdma_write_4(sc, DMA4_OCP_SYSCONFIG, 0x0002);
1199 
1200 		/* Set the timeout to 100ms*/
1201 		timeout = (hz < 10) ? 1 : ((100 * hz) / 1000);
1202 
1203 		/* Wait for DMA reset to complete */
1204 		while ((ti_sdma_read_4(sc, DMA4_SYSSTATUS) & 0x1) == 0x0) {
1205 
1206 			/* Sleep for a tick */
1207 			pause("DMARESET", 1);
1208 
1209 			if (timeout-- == 0) {
1210 				device_printf(sc->sc_dev, "sDMA reset operation timed out\n");
1211 				return (EINVAL);
1212 			}
1213 		}
1214 	}
1215 
1216 	/*
1217 	 * Install interrupt handlers for the for possible interrupts. Any channel
1218 	 * can trip one of the four IRQs
1219 	 */
1220 	rid = 0;
1221 	sc->sc_irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,
1222 	    RF_ACTIVE | RF_SHAREABLE);
1223 	if (sc->sc_irq_res == NULL)
1224 		panic("Unable to setup the dma irq handler.\n");
1225 
1226 	err = bus_setup_intr(dev, sc->sc_irq_res, INTR_TYPE_MISC | INTR_MPSAFE,
1227 	    NULL, ti_sdma_intr, NULL, &ihl);
1228 	if (err)
1229 		panic("%s: Cannot register IRQ", device_get_name(dev));
1230 
1231 	/* Store the DMA structure globally ... this driver should never be unloaded */
1232 	ti_sdma_sc = sc;
1233 
1234 	return (0);
1235 }
1236 
1237 static device_method_t ti_sdma_methods[] = {
1238 	DEVMETHOD(device_probe, ti_sdma_probe),
1239 	DEVMETHOD(device_attach, ti_sdma_attach),
1240 	{0, 0},
1241 };
1242 
1243 static driver_t ti_sdma_driver = {
1244 	"ti_sdma",
1245 	ti_sdma_methods,
1246 	sizeof(struct ti_sdma_softc),
1247 };
1248 static devclass_t ti_sdma_devclass;
1249 
1250 DRIVER_MODULE(ti_sdma, simplebus, ti_sdma_driver, ti_sdma_devclass, 0, 0);
1251 MODULE_DEPEND(ti_sdma, ti_prcm, 1, 1, 1);
1252