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