]> CyberLeo.Net >> Repos - FreeBSD/releng/10.2.git/blob - sys/arm/ti/ti_mmchs.c
- Copy stable/10@285827 to releng/10.2 in preparation for 10.2-RC1
[FreeBSD/releng/10.2.git] / sys / arm / ti / ti_mmchs.c
1 /*-
2  * Copyright (c) 2011
3  *      Ben Gray <ben.r.gray@gmail.com>.
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18  * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
19  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25  * SUCH DAMAGE.
26  */
27
28 /**
29  * Driver for the MMC/SD/SDIO module on the TI OMAP series of SoCs.
30  *
31  * This driver is heavily based on the SD/MMC driver for the AT91 (at91_mci.c).
32  *
33  * It's important to realise that the MMC state machine is already in the kernel
34  * and this driver only exposes the specific interfaces of the controller.
35  *
36  * This driver is still very much a work in progress, I've verified that basic
37  * sector reading can be performed. But I've yet to test it with a file system
38  * or even writing.  In addition I've only tested the driver with an SD card,
39  * I've no idea if MMC cards work.
40  *
41  */
42 #include <sys/cdefs.h>
43 __FBSDID("$FreeBSD$");
44
45 #include <sys/param.h>
46 #include <sys/systm.h>
47 #include <sys/bio.h>
48 #include <sys/bus.h>
49 #include <sys/conf.h>
50 #include <sys/endian.h>
51 #include <sys/kernel.h>
52 #include <sys/kthread.h>
53 #include <sys/lock.h>
54 #include <sys/malloc.h>
55 #include <sys/module.h>
56 #include <sys/mutex.h>
57 #include <sys/queue.h>
58 #include <sys/resource.h>
59 #include <sys/rman.h>
60 #include <sys/time.h>
61 #include <sys/timetc.h>
62 #include <sys/gpio.h>
63
64 #include <machine/bus.h>
65 #include <machine/cpu.h>
66 #include <machine/cpufunc.h>
67 #include <machine/resource.h>
68 #include <machine/intr.h>
69
70 #include <dev/mmc/bridge.h>
71 #include <dev/mmc/mmcreg.h>
72 #include <dev/mmc/mmcbrvar.h>
73
74 #include <dev/fdt/fdt_common.h>
75 #include <dev/ofw/openfirm.h>
76 #include <dev/ofw/ofw_bus.h>
77 #include <dev/ofw/ofw_bus_subr.h>
78
79 #include "gpio_if.h"
80
81 #include "mmcbr_if.h"
82 #include "mmcbus_if.h"
83
84 #include <arm/ti/ti_sdma.h>
85 #include <arm/ti/ti_edma3.h>
86 #include <arm/ti/ti_mmchs.h>
87 #include <arm/ti/ti_cpuid.h>
88 #include <arm/ti/ti_prcm.h>
89
90 #include <arm/ti/twl/twl.h>
91 #include <arm/ti/twl/twl_vreg.h>
92
93 #ifdef DEBUG
94 #define ti_mmchs_dbg(sc, fmt, args...) \
95         device_printf((sc)->sc_dev, fmt, ## args);
96 #else
97 #define ti_mmchs_dbg(sc, fmt, args...)
98 #endif
99
100 /**
101  *      Structure that stores the driver context
102  */
103 struct ti_mmchs_softc {
104         device_t                sc_dev;
105         uint32_t                device_id;
106         struct resource*        sc_irq_res;
107         struct resource*        sc_mem_res;
108
109         void*                   sc_irq_h;
110
111         bus_dma_tag_t           sc_dmatag;
112         bus_dmamap_t            sc_dmamap;
113         int                     sc_dmamapped;
114
115         unsigned int            sc_dmach_rd;
116         unsigned int            sc_dmach_wr;
117         int                     dma_rx_trig;
118         int                     dma_tx_trig;
119
120         device_t                sc_gpio_dev;
121         int                     sc_wp_gpio_pin;  /* GPIO pin for MMC write protect */
122
123         device_t                sc_vreg_dev;
124         const char*             sc_vreg_name;
125
126         struct mtx              sc_mtx;
127
128         struct mmc_host         host;
129         struct mmc_request*     req;
130         struct mmc_command*     curcmd;
131
132         int                     flags;
133 #define CMD_STARTED     1
134 #define STOP_STARTED    2
135
136         int                     bus_busy;  /* TODO: Needed ? */
137
138         void*                   sc_cmd_data_vaddr;
139         int                     sc_cmd_data_len;
140
141         /* The offset applied to each of the register base addresses, OMAP4
142          * register sets are offset 0x100 from the OMAP3 series.
143          */
144         unsigned long           sc_reg_off;
145
146         /* The physical address of the MMCHS_DATA register, used for the DMA xfers */
147         unsigned long           sc_data_reg_paddr;
148
149         /* The reference clock frequency */
150         unsigned int            sc_ref_freq;
151
152         enum mmc_power_mode     sc_cur_power_mode;
153 };
154
155 /**
156  *      Macros for driver mutex locking
157  */
158 #define TI_MMCHS_LOCK(_sc)              mtx_lock(&(_sc)->sc_mtx)
159 #define TI_MMCHS_UNLOCK(_sc)            mtx_unlock(&(_sc)->sc_mtx)
160 #define TI_MMCHS_LOCK_INIT(_sc) \
161         mtx_init(&_sc->sc_mtx, device_get_nameunit(_sc->sc_dev), \
162                  "ti_mmchs", MTX_DEF)
163 #define TI_MMCHS_LOCK_DESTROY(_sc)      mtx_destroy(&_sc->sc_mtx);
164 #define TI_MMCHS_ASSERT_LOCKED(_sc)     mtx_assert(&_sc->sc_mtx, MA_OWNED);
165 #define TI_MMCHS_ASSERT_UNLOCKED(_sc)   mtx_assert(&_sc->sc_mtx, MA_NOTOWNED);
166
167 static void ti_mmchs_start(struct ti_mmchs_softc *sc);
168
169 /**
170  *      ti_mmchs_read_4 - reads a 32-bit value from a register
171  *      ti_mmchs_write_4 - writes a 32-bit value to a register
172  *      @sc: pointer to the driver context
173  *      @off: register offset to read from
174  *      @val: the value to write into the register
175  *
176  *      LOCKING:
177  *      None
178  *
179  *      RETURNS:
180  *      The 32-bit value read from the register
181  */
182 static inline uint32_t
183 ti_mmchs_read_4(struct ti_mmchs_softc *sc, bus_size_t off)
184 {
185         return bus_read_4(sc->sc_mem_res, (sc->sc_reg_off + off));
186 }
187
188 static inline void
189 ti_mmchs_write_4(struct ti_mmchs_softc *sc, bus_size_t off, uint32_t val)
190 {
191         bus_write_4(sc->sc_mem_res, (sc->sc_reg_off + off), val);
192 }
193
194 /**
195  *      ti_mmchs_reset_controller -
196  *      @arg: caller supplied arg
197  *      @segs: array of segments (although in our case should only be one)
198  *      @nsegs: number of segments (in our case should be 1)
199  *      @error:
200  *
201  *
202  *
203  */
204 static void
205 ti_mmchs_reset_controller(struct ti_mmchs_softc *sc, uint32_t bit)
206 {
207         unsigned long attempts;
208         uint32_t sysctl;
209
210         ti_mmchs_dbg(sc, "reseting controller - bit 0x%08x\n", bit);
211
212         sysctl = ti_mmchs_read_4(sc, MMCHS_SYSCTL);
213         ti_mmchs_write_4(sc, MMCHS_SYSCTL, sysctl | bit);
214         /* 
215          * AM335x and OMAP4 >= ES2 have an updated reset logic.
216          * Monitor a 0->1 transition first.
217          */
218         if ((ti_chip() == CHIP_AM335X) || 
219             ((ti_chip() == CHIP_OMAP_4) && (ti_revision() > OMAP4430_REV_ES1_0))) {
220                 attempts = 10000;
221                 while (!(ti_mmchs_read_4(sc, MMCHS_SYSCTL) & bit) && (attempts-- > 0))
222                         continue;
223         }
224
225         attempts = 10000;
226         while ((ti_mmchs_read_4(sc, MMCHS_SYSCTL) & bit) && (attempts-- > 0))
227                 continue;
228
229         if (ti_mmchs_read_4(sc, MMCHS_SYSCTL) & bit)
230                 device_printf(sc->sc_dev, "Error - Timeout waiting on controller reset\n");
231 }
232
233 /**
234  *      ti_mmchs_getaddr - called by the DMA function to simply return the phys addr
235  *      @arg: caller supplied arg
236  *      @segs: array of segments (although in our case should only be one)
237  *      @nsegs: number of segments (in our case should be 1)
238  *      @error:
239  *
240  *      This function is called by bus_dmamap_load() after it has compiled an array
241  *      of segments, each segment is a phsyical chunk of memory. However in our case
242  *      we should only have one segment, because we don't (yet?) support DMA scatter
243  *      gather. To ensure we only have one segment, the DMA tag was created by
244  *      bus_dma_tag_create() (called from ti_mmchs_attach) with nsegments set to 1.
245  *
246  */
247 static void
248 ti_mmchs_getaddr(void *arg, bus_dma_segment_t *segs, int nsegs, int error)
249 {
250         if (error != 0)
251                 return;
252
253         *(bus_addr_t *)arg = segs[0].ds_addr;
254 }
255
256 #ifndef SOC_TI_AM335X
257 /**
258  *      ti_mmchs_dma_intr - interrupt handler for DMA events triggered by the controller
259  *      @ch: the dma channel number
260  *      @status: bit field of the status bytes
261  *      @data: callback data, in this case a pointer to the controller struct
262  *
263  *
264  *      LOCKING:
265  *      Called from interrupt context
266  *
267  */
268 static void
269 ti_mmchs_dma_intr(unsigned int ch, uint32_t status, void *data)
270 {
271         /* Ignore for now ... we don't need this interrupt as we already have the
272          * interrupt from the MMC controller.
273          */
274 }
275 #endif
276
277 /**
278  *      ti_mmchs_intr_xfer_compl - called if a 'transfer complete' IRQ was received
279  *      @sc: pointer to the driver context
280  *      @cmd: the command that was sent previously
281  *
282  *      This function is simply responsible for syncing up the DMA buffer.
283  *
284  *      LOCKING:
285  *      Called from interrupt context
286  *
287  *      RETURNS:
288  *      Return value indicates if the transaction is complete, not done = 0, done != 0
289  */
290 static int
291 ti_mmchs_intr_xfer_compl(struct ti_mmchs_softc *sc, struct mmc_command *cmd)
292 {
293         uint32_t cmd_reg;
294
295         /* Read command register to test whether this command was a read or write. */
296         cmd_reg = ti_mmchs_read_4(sc, MMCHS_CMD);
297
298         /* Sync-up the DMA buffer so the caller can access the new memory */
299         if (cmd_reg & MMCHS_CMD_DDIR) {
300                 bus_dmamap_sync(sc->sc_dmatag, sc->sc_dmamap, BUS_DMASYNC_POSTREAD);
301                 bus_dmamap_unload(sc->sc_dmatag, sc->sc_dmamap);
302         }
303         else {
304                 bus_dmamap_sync(sc->sc_dmatag, sc->sc_dmamap, BUS_DMASYNC_POSTWRITE);
305                 bus_dmamap_unload(sc->sc_dmatag, sc->sc_dmamap);
306         }
307         sc->sc_dmamapped--;
308
309         /* Debugging dump of the data received */
310 #if 0
311         {
312                 int i;
313                 uint8_t *p = (uint8_t*) sc->sc_cmd_data_vaddr;
314                 for (i=0; i<sc->sc_cmd_data_len; i++) {
315                         if ((i % 16) == 0)
316                                 printf("\n0x%04x : ", i);
317                         printf("%02X ", *p++);
318                 }
319                 printf("\n");
320         }
321 #endif
322
323         /* We are done, transfer complete */
324         return 1;
325 }
326
327 /**
328  *      ti_mmchs_intr_cmd_compl - called if a 'command complete' IRQ was received
329  *      @sc: pointer to the driver context
330  *      @cmd: the command that was sent previously
331  *
332  *
333  *      LOCKING:
334  *      Called from interrupt context
335  *
336  *      RETURNS:
337  *      Return value indicates if the transaction is complete, not done = 0, done != 0
338  */
339 static int
340 ti_mmchs_intr_cmd_compl(struct ti_mmchs_softc *sc, struct mmc_command *cmd)
341 {
342         uint32_t cmd_reg;
343
344         /* Copy the response into the request struct ... if a response was
345          * expected */
346         if (cmd != NULL && (cmd->flags & MMC_RSP_PRESENT)) {
347                 if (cmd->flags & MMC_RSP_136) {
348                         cmd->resp[3] = ti_mmchs_read_4(sc, MMCHS_RSP10);
349                         cmd->resp[2] = ti_mmchs_read_4(sc, MMCHS_RSP32);
350                         cmd->resp[1] = ti_mmchs_read_4(sc, MMCHS_RSP54);
351                         cmd->resp[0] = ti_mmchs_read_4(sc, MMCHS_RSP76);
352                 } else {
353                         cmd->resp[0] = ti_mmchs_read_4(sc, MMCHS_RSP10);
354                 }
355         }
356
357         /* Check if the command was expecting some data transfer, if not
358          * we are done. */
359         cmd_reg = ti_mmchs_read_4(sc, MMCHS_CMD);
360         return ((cmd_reg & MMCHS_CMD_DP) == 0);
361 }
362
363 /**
364  *      ti_mmchs_intr_error - handles error interrupts
365  *      @sc: pointer to the driver context
366  *      @cmd: the command that was sent previously
367  *      @stat_reg: the value that was in the status register
368  *
369  *
370  *      LOCKING:
371  *      Called from interrupt context
372  *
373  *      RETURNS:
374  *      Return value indicates if the transaction is complete, not done = 0, done != 0
375  */
376 static int
377 ti_mmchs_intr_error(struct ti_mmchs_softc *sc, struct mmc_command *cmd,
378                                          uint32_t stat_reg)
379 {
380         ti_mmchs_dbg(sc, "error in xfer - stat 0x%08x\n", stat_reg);
381
382         /* Ignore CRC errors on CMD2 and ACMD47, per relevant standards */
383         if ((stat_reg & MMCHS_STAT_CCRC) && (cmd->opcode == MMC_SEND_OP_COND ||
384             cmd->opcode == ACMD_SD_SEND_OP_COND))
385                 cmd->error = MMC_ERR_NONE;
386         else if (stat_reg & (MMCHS_STAT_CTO | MMCHS_STAT_DTO))
387                 cmd->error = MMC_ERR_TIMEOUT;
388         else if (stat_reg & (MMCHS_STAT_CCRC | MMCHS_STAT_DCRC))
389                 cmd->error = MMC_ERR_BADCRC;
390         else
391                 cmd->error = MMC_ERR_FAILED;
392
393         /* If a dma transaction we should also stop the dma transfer */
394         if (ti_mmchs_read_4(sc, MMCHS_CMD) & MMCHS_CMD_DE) {
395
396                 /* Abort the DMA transfer (DDIR bit tells direction) */
397                 if (ti_mmchs_read_4(sc, MMCHS_CMD) & MMCHS_CMD_DDIR)
398 #ifdef SOC_TI_AM335X
399                         printf("%s: DMA unimplemented\n", __func__);
400 #else
401                         ti_sdma_stop_xfer(sc->sc_dmach_rd);
402 #endif
403                 else
404 #ifdef SOC_TI_AM335X
405                         printf("%s: DMA unimplemented\n", __func__);
406 #else
407                         ti_sdma_stop_xfer(sc->sc_dmach_wr);
408 #endif
409
410                 /* If an error occure abort the DMA operation and free the dma map */
411                 if ((sc->sc_dmamapped > 0) && (cmd->error != MMC_ERR_NONE)) {
412                         bus_dmamap_unload(sc->sc_dmatag, sc->sc_dmamap);
413                         sc->sc_dmamapped--;
414                 }
415         }
416
417         /* Command error occured? ... if so issue a soft reset for the cmd fsm */
418         if (stat_reg & (MMCHS_STAT_CCRC | MMCHS_STAT_CTO)) {
419                 ti_mmchs_reset_controller(sc, MMCHS_SYSCTL_SRC);
420         }
421
422         /* Data error occured? ... if so issue a soft reset for the data line */
423         if (stat_reg & (MMCHS_STAT_DEB | MMCHS_STAT_DCRC | MMCHS_STAT_DTO)) {
424                 ti_mmchs_reset_controller(sc, MMCHS_SYSCTL_SRD);
425         }
426
427         /* On any error the command is cancelled ... so we are done */
428         return 1;
429 }
430
431 /**
432  *      ti_mmchs_intr - interrupt handler for MMC/SD/SDIO controller
433  *      @arg: pointer to the driver context
434  *
435  *      Interrupt handler for the MMC/SD/SDIO controller, responsible for handling
436  *      the IRQ and clearing the status flags.
437  *
438  *      LOCKING:
439  *      Called from interrupt context
440  *
441  *      RETURNS:
442  *      nothing
443  */
444 static void
445 ti_mmchs_intr(void *arg)
446 {
447         struct ti_mmchs_softc *sc = (struct ti_mmchs_softc *) arg;
448         uint32_t stat_reg;
449         int done = 0;
450
451         TI_MMCHS_LOCK(sc);
452
453         stat_reg = ti_mmchs_read_4(sc, MMCHS_STAT) & (ti_mmchs_read_4(sc,
454             MMCHS_IE) | MMCHS_STAT_ERRI);
455
456         if (sc->curcmd == NULL) {
457                 device_printf(sc->sc_dev, "Error: current cmd NULL, already done?\n");
458                 ti_mmchs_write_4(sc, MMCHS_STAT, stat_reg);
459                 TI_MMCHS_UNLOCK(sc);
460                 return;
461         }
462
463         if (stat_reg & MMCHS_STAT_ERRI) {
464                 /* An error has been tripped in the status register */
465                 done = ti_mmchs_intr_error(sc, sc->curcmd, stat_reg);
466
467         } else {
468
469                 /* NOTE: This implementation could be a bit inefficent, I don't think
470                  * it is necessary to handle both the 'command complete' and 'transfer
471                  * complete' for data transfers ... presumably just transfer complete
472                  * is enough.
473                  */
474
475                 /* No error */
476                 sc->curcmd->error = MMC_ERR_NONE;
477
478                 /* Check if the command completed */
479                 if (stat_reg & MMCHS_STAT_CC) {
480                         done = ti_mmchs_intr_cmd_compl(sc, sc->curcmd);
481                 }
482
483                 /* Check if the transfer has completed */
484                 if (stat_reg & MMCHS_STAT_TC) {
485                         done = ti_mmchs_intr_xfer_compl(sc, sc->curcmd);
486                 }
487
488         }
489
490         /* Clear all the interrupt status bits by writing the value back */
491         ti_mmchs_write_4(sc, MMCHS_STAT, stat_reg);
492
493         /* This may mark the command as done if there is no stop request */
494         /* TODO: This is a bit ugly, needs fix-up */
495         if (done) {
496                 ti_mmchs_start(sc);
497         }
498
499         TI_MMCHS_UNLOCK(sc);
500 }
501
502 #ifdef SOC_TI_AM335X
503 static void
504 ti_mmchs_edma3_rx_xfer_setup(struct ti_mmchs_softc *sc, uint32_t src_paddr,
505     uint32_t dst_paddr, uint16_t blk_size, uint16_t num_blks)
506 {
507         struct ti_edma3cc_param_set ps;
508
509         bzero(&ps, sizeof(struct ti_edma3cc_param_set));
510         ps.src          = src_paddr;
511         ps.dst          = dst_paddr;
512         ps.dstbidx      = 4;
513         ps.dstcidx      = blk_size;
514         ps.acnt         = 4;
515         ps.bcnt         = blk_size/4;
516         ps.ccnt         = num_blks;
517         ps.link         = 0xffff;
518         ps.opt.tcc      = sc->dma_rx_trig;
519         ps.opt.tcinten  = 1;
520         ps.opt.fwid     = 2; /* fifo width is 32 */
521         ps.opt.sam      = 1;
522         ps.opt.syncdim  = 1;
523
524         ti_edma3_param_write(sc->dma_rx_trig, &ps);
525         ti_edma3_enable_transfer_event(sc->dma_rx_trig);
526 }
527
528 static void
529 ti_mmchs_edma3_tx_xfer_setup(struct ti_mmchs_softc *sc, uint32_t src_paddr,
530     uint32_t dst_paddr, uint16_t blk_size, uint16_t num_blks)
531 {
532         struct ti_edma3cc_param_set ps;
533
534         bzero(&ps, sizeof(struct ti_edma3cc_param_set));
535         ps.src          = src_paddr;
536         ps.dst          = dst_paddr;
537         ps.srccidx      = blk_size;
538         ps.bcnt         = blk_size/4;
539         ps.ccnt         = num_blks;
540         ps.srcbidx      = 4;
541         ps.acnt         = 0x4;
542         ps.link         = 0xffff;
543         ps.opt.tcc      = sc->dma_tx_trig;
544         ps.opt.tcinten  = 1;
545         ps.opt.fwid     = 2; /* fifo width is 32 */
546         ps.opt.dam      = 1;
547         ps.opt.syncdim  = 1;
548
549         ti_edma3_param_write(sc->dma_tx_trig, &ps);
550         ti_edma3_enable_transfer_event(sc->dma_tx_trig);
551 }
552 #endif
553
554 /**
555  *      ti_mmchs_start_cmd - starts the given command
556  *      @sc: pointer to the driver context
557  *      @cmd: the command to start
558  *
559  *      The call tree for this function is
560  *              - ti_mmchs_start_cmd
561  *                      - ti_mmchs_start
562  *                              - ti_mmchs_request
563  *
564  *      LOCKING:
565  *      Caller should be holding the OMAP_MMC lock.
566  *
567  *      RETURNS:
568  *      nothing
569  */
570 static void
571 ti_mmchs_start_cmd(struct ti_mmchs_softc *sc, struct mmc_command *cmd)
572 {
573         uint32_t cmd_reg, con_reg, ise_reg;
574         struct mmc_data *data;
575         struct mmc_request *req;
576         void *vaddr;
577         bus_addr_t paddr;
578 #ifndef SOC_TI_AM335X
579         uint32_t pktsize;
580 #endif
581         sc->curcmd = cmd;
582         data = cmd->data;
583         req = cmd->mrq;
584
585         /* Ensure the STR and MIT bits are cleared, these are only used for special
586          * command types.
587          */
588         con_reg = ti_mmchs_read_4(sc, MMCHS_CON);
589         con_reg &= ~(MMCHS_CON_STR | MMCHS_CON_MIT);
590
591         /* Load the command into bits 29:24 of the CMD register */
592         cmd_reg = (uint32_t)(cmd->opcode & 0x3F) << 24;
593
594         /* Set the default set of interrupts */
595         ise_reg = (MMCHS_STAT_CERR | MMCHS_STAT_CTO | MMCHS_STAT_CC | MMCHS_STAT_CEB);
596
597         /* Enable CRC checking if requested */
598         if (cmd->flags & MMC_RSP_CRC)
599                 ise_reg |= MMCHS_STAT_CCRC;
600
601         /* Enable reply index checking if the response supports it */
602         if (cmd->flags & MMC_RSP_OPCODE)
603                 ise_reg |= MMCHS_STAT_CIE;
604
605         /* Set the expected response length */
606         if (MMC_RSP(cmd->flags) == MMC_RSP_NONE) {
607                 cmd_reg |= MMCHS_CMD_RSP_TYPE_NO;
608         } else {
609                 if (cmd->flags & MMC_RSP_136)
610                         cmd_reg |= MMCHS_CMD_RSP_TYPE_136;
611                 else if (cmd->flags & MMC_RSP_BUSY)
612                         cmd_reg |= MMCHS_CMD_RSP_TYPE_48_BSY;
613                 else
614                         cmd_reg |= MMCHS_CMD_RSP_TYPE_48;
615
616                 /* Enable command index/crc checks if necessary expected */
617                 if (cmd->flags & MMC_RSP_CRC)
618                         cmd_reg |= MMCHS_CMD_CCCE;
619                 if (cmd->flags & MMC_RSP_OPCODE)
620                         cmd_reg |= MMCHS_CMD_CICE;
621         }
622
623         /* Set the bits for the special commands CMD12 (MMC_STOP_TRANSMISSION) and
624          * CMD52 (SD_IO_RW_DIRECT) */
625         if (cmd->opcode == MMC_STOP_TRANSMISSION)
626                 cmd_reg |= MMCHS_CMD_CMD_TYPE_IO_ABORT;
627
628         /* Check if there is any data to write */
629         if (data == NULL) {
630                 /* Clear the block count */
631                 ti_mmchs_write_4(sc, MMCHS_BLK, 0);
632
633                 /* The no data case is fairly simple */
634                 ti_mmchs_write_4(sc, MMCHS_CON, con_reg);
635                 ti_mmchs_write_4(sc, MMCHS_IE, ise_reg);
636                 ti_mmchs_write_4(sc, MMCHS_ISE, ise_reg);
637                 ti_mmchs_write_4(sc, MMCHS_ARG, cmd->arg);
638                 ti_mmchs_write_4(sc, MMCHS_CMD, cmd_reg);
639                 return;
640         }
641
642         /* Indicate that data is present */
643         cmd_reg |= MMCHS_CMD_DP | MMCHS_CMD_MSBS | MMCHS_CMD_BCE;
644
645         /* Indicate a read operation */
646         if (data->flags & MMC_DATA_READ)
647                 cmd_reg |= MMCHS_CMD_DDIR;
648
649         /* Streaming mode */
650         if (data->flags & MMC_DATA_STREAM) {
651                 con_reg |= MMCHS_CON_STR;
652         }
653
654         /* Multi-block mode */
655         if (data->flags & MMC_DATA_MULTI) {
656                 cmd_reg |= MMCHS_CMD_MSBS;
657         }
658
659         /* Enable extra interrupt sources for the transfer */
660         ise_reg |= (MMCHS_STAT_TC | MMCHS_STAT_DTO | MMCHS_STAT_DEB | MMCHS_STAT_CEB);
661         if (cmd->flags & MMC_RSP_CRC)
662                 ise_reg |= MMCHS_STAT_DCRC;
663
664         /* Enable the DMA transfer bit */
665         cmd_reg |= MMCHS_CMD_DE;
666
667         /* Set the block size and block count */
668         ti_mmchs_write_4(sc, MMCHS_BLK, (1 << 16) | data->len);
669
670         /* Setup the DMA stuff */
671         if (data->flags & (MMC_DATA_READ | MMC_DATA_WRITE)) {
672
673                 vaddr = data->data;
674                 data->xfer_len = 0;
675
676                 /* Map the buffer buf into bus space using the dmamap map. */
677                 if (bus_dmamap_load(sc->sc_dmatag, sc->sc_dmamap, vaddr, data->len,
678                     ti_mmchs_getaddr, &paddr, 0) != 0) {
679
680                         if (req->cmd->flags & STOP_STARTED)
681                                 req->stop->error = MMC_ERR_NO_MEMORY;
682                         else
683                                 req->cmd->error = MMC_ERR_NO_MEMORY;
684                         sc->req = NULL;
685                         sc->curcmd = NULL;
686                         req->done(req);
687                         return;
688                 }
689
690 #ifndef SOC_TI_AM335X
691                 /* Calculate the packet size, the max packet size is 512 bytes
692                  * (or 128 32-bit elements).
693                  */
694                 pktsize = min((data->len / 4), (512 / 4));
695 #endif
696                 /* Sync the DMA buffer and setup the DMA controller */
697                 if (data->flags & MMC_DATA_READ) {
698                         bus_dmamap_sync(sc->sc_dmatag, sc->sc_dmamap, BUS_DMASYNC_PREREAD);
699 #ifdef SOC_TI_AM335X
700                         ti_mmchs_edma3_rx_xfer_setup(sc, sc->sc_data_reg_paddr, 
701                             paddr, data->len, 1);
702 #else
703                         ti_sdma_start_xfer_packet(sc->sc_dmach_rd, sc->sc_data_reg_paddr,
704                             paddr, 1, (data->len / 4), pktsize);
705 #endif
706                 } else {
707                         bus_dmamap_sync(sc->sc_dmatag, sc->sc_dmamap, BUS_DMASYNC_PREWRITE);
708 #ifdef SOC_TI_AM335X
709                         ti_mmchs_edma3_tx_xfer_setup(sc, paddr,
710                             sc->sc_data_reg_paddr, data->len, 1);
711 #else
712                         ti_sdma_start_xfer_packet(sc->sc_dmach_wr, paddr,
713                             sc->sc_data_reg_paddr, 1, (data->len / 4), pktsize);
714 #endif
715                 }
716
717                 /* Increase the mapped count */
718                 sc->sc_dmamapped++;
719
720                 sc->sc_cmd_data_vaddr = vaddr;
721                 sc->sc_cmd_data_len = data->len;
722         }
723
724         /* Finally kick off the command */
725         ti_mmchs_write_4(sc, MMCHS_CON, con_reg);
726         ti_mmchs_write_4(sc, MMCHS_IE, ise_reg);
727         ti_mmchs_write_4(sc, MMCHS_ISE, ise_reg);
728         ti_mmchs_write_4(sc, MMCHS_ARG, cmd->arg);
729         ti_mmchs_write_4(sc, MMCHS_CMD, cmd_reg);
730
731         /* and we're done */
732 }
733
734 /**
735  *      ti_mmchs_start - starts a request stored in the driver context
736  *      @sc: pointer to the driver context
737  *
738  *      This function is called by ti_mmchs_request() in response to a read/write
739  *      request from the MMC core module.
740  *
741  *      LOCKING:
742  *      Caller should be holding the OMAP_MMC lock.
743  *
744  *      RETURNS:
745  *      nothing
746  */
747 static void
748 ti_mmchs_start(struct ti_mmchs_softc *sc)
749 {
750         struct mmc_request *req;
751
752         /* Sanity check we have a request */
753         req = sc->req;
754         if (req == NULL)
755                 return;
756
757         /* assert locked */
758         if (!(sc->flags & CMD_STARTED)) {
759                 sc->flags |= CMD_STARTED;
760                 ti_mmchs_start_cmd(sc, req->cmd);
761                 return;
762         }
763
764         if (!(sc->flags & STOP_STARTED) && req->stop) {
765                 sc->flags |= STOP_STARTED;
766                 ti_mmchs_start_cmd(sc, req->stop);
767                 return;
768         }
769
770         /* We must be done -- bad idea to do this while locked? */
771         sc->req = NULL;
772         sc->curcmd = NULL;
773         req->done(req);
774 }
775
776 /**
777  *      ti_mmchs_request - entry point for all read/write/cmd requests
778  *      @brdev: mmc bridge device handle
779  *      @reqdev: the device doing the requesting ?
780  *      @req: the action requested
781  *
782  *      LOCKING:
783  *      None, internally takes the OMAP_MMC lock.
784  *
785  *      RETURNS:
786  *      0 on success
787  *      EBUSY if the driver is already performing a request
788  */
789 static int
790 ti_mmchs_request(device_t brdev, device_t reqdev, struct mmc_request *req)
791 {
792         struct ti_mmchs_softc *sc = device_get_softc(brdev);
793
794         TI_MMCHS_LOCK(sc);
795
796         /*
797          * XXX do we want to be able to queue up multiple commands?
798          * XXX sounds like a good idea, but all protocols are sync, so
799          * XXX maybe the idea is naive...
800          */
801         if (sc->req != NULL) {
802                 TI_MMCHS_UNLOCK(sc);
803                 return (EBUSY);
804         }
805
806         /* Store the request and start the command */
807         sc->req = req;
808         sc->flags = 0;
809         ti_mmchs_start(sc);
810
811         TI_MMCHS_UNLOCK(sc);
812
813         return (0);
814 }
815
816 /**
817  *      ti_mmchs_get_ro - returns the status of the read-only setting
818  *      @brdev: mmc bridge device handle
819  *      @reqdev: device doing the request
820  *
821  *      This function is relies on hint'ed values to determine which GPIO is used
822  *      to determine if the write protect is enabled. On the BeagleBoard the pin
823  *      is GPIO_23.
824  *
825  *      LOCKING:
826  *      -
827  *
828  *      RETURNS:
829  *      0 if not read-only
830  *      1 if read only
831  */
832 static int
833 ti_mmchs_get_ro(device_t brdev, device_t reqdev)
834 {
835         struct ti_mmchs_softc *sc = device_get_softc(brdev);
836         unsigned int readonly = 0;
837
838         TI_MMCHS_LOCK(sc);
839
840         if ((sc->sc_wp_gpio_pin != -1) && (sc->sc_gpio_dev != NULL)) {
841                 if (GPIO_PIN_GET(sc->sc_gpio_dev, sc->sc_wp_gpio_pin, &readonly) != 0)
842                         readonly = 0;
843                 else
844                         readonly = (readonly == 0) ? 0 : 1;
845         }
846
847         TI_MMCHS_UNLOCK(sc);
848
849         return (readonly);
850 }
851
852 /**
853  *      ti_mmchs_send_init_stream - sets bus/controller settings
854  *      @brdev: mmc bridge device handle
855  *      @reqdev: device doing the request
856  *
857  *      Send init stream sequence to card before sending IDLE command
858  *
859  *      LOCKING:
860  *
861  *
862  *      RETURNS:
863  *      0 if function succeeded
864  */
865 static void
866 ti_mmchs_send_init_stream(struct ti_mmchs_softc *sc)
867 {
868         unsigned long timeout;
869         uint32_t ie, ise, con;
870
871         ti_mmchs_dbg(sc, "Performing init sequence\n");
872
873         /* Prior to issuing any command, the MMCHS controller has to execute a
874          * special INIT procedure. The MMCHS controller has to generate a clock
875          * during 1ms. During the INIT procedure, the MMCHS controller generates 80
876          * clock periods. In order to keep the 1ms gap, the MMCHS controller should
877          * be configured to generate a clock whose frequency is smaller or equal to
878          * 80 KHz. If the MMCHS controller divider bitfield width doesn't allow to
879          * choose big values, the MMCHS controller driver should perform the INIT
880          * procedure twice or three times. Twice is generally enough.
881          *
882          * The INIt procedure is executed by setting MMCHS1.MMCHS_CON[1] INIT
883          * bitfield to 1 and by sending a dummy command, writing 0x00000000 in
884          * MMCHS1.MMCHS_CMD register.
885          */
886
887         /* Disable interrupt status events but enable interrupt generation.
888          * This doesn't seem right to me, but if the interrupt generation is not
889          * enabled the CC bit doesn't seem to be set in the STAT register.
890          */
891
892         /* Enable interrupt generation */
893         ie = ti_mmchs_read_4(sc, MMCHS_IE);
894         ti_mmchs_write_4(sc, MMCHS_IE, 0x307F0033);
895
896         /* Disable generation of status events (stops interrupt triggering) */
897         ise = ti_mmchs_read_4(sc, MMCHS_ISE);
898         ti_mmchs_write_4(sc, MMCHS_ISE, 0);
899
900         /* Set the initialise stream bit */
901         con = ti_mmchs_read_4(sc, MMCHS_CON);
902         con |= MMCHS_CON_INIT;
903         ti_mmchs_write_4(sc, MMCHS_CON, con);
904
905         /* Write a dummy command 0x00 */
906         ti_mmchs_write_4(sc, MMCHS_CMD, 0x00000000);
907
908         /* Loop waiting for the command to finish */
909         timeout = hz;
910         do {
911                 pause("MMCINIT", 1);
912                 if (timeout-- == 0) {
913                         device_printf(sc->sc_dev, "Error: first stream init timed out\n");
914                         break;
915                 }
916         } while (!(ti_mmchs_read_4(sc, MMCHS_STAT) & MMCHS_STAT_CC));
917
918         /* Clear the command complete status bit */
919         ti_mmchs_write_4(sc, MMCHS_STAT, MMCHS_STAT_CC);
920
921         /* Write another dummy command 0x00 */
922         ti_mmchs_write_4(sc, MMCHS_CMD, 0x00000000);
923
924         /* Loop waiting for the second command to finish */
925         timeout = hz;
926         do {
927                 pause("MMCINIT", 1);
928                 if (timeout-- == 0) {
929                         device_printf(sc->sc_dev, "Error: second stream init timed out\n");
930                         break;
931                 }
932         } while (!(ti_mmchs_read_4(sc, MMCHS_STAT) & MMCHS_STAT_CC));
933
934         /* Clear the stream init bit */
935         con &= ~MMCHS_CON_INIT;
936         ti_mmchs_write_4(sc, MMCHS_CON, con);
937
938         /* Clear the status register, then restore the IE and ISE registers */
939         ti_mmchs_write_4(sc, MMCHS_STAT, 0xffffffff);
940         ti_mmchs_read_4(sc, MMCHS_STAT);
941
942         ti_mmchs_write_4(sc, MMCHS_ISE, ise);
943         ti_mmchs_write_4(sc, MMCHS_IE, ie);
944 }
945
946 /**
947  *      ti_mmchs_update_ios - sets bus/controller settings
948  *      @brdev: mmc bridge device handle
949  *      @reqdev: device doing the request
950  *
951  *      Called to set the bus and controller settings that need to be applied to
952  *      the actual HW.  Currently this function just sets the bus width and the
953  *      clock speed.
954  *
955  *      LOCKING:
956  *
957  *
958  *      RETURNS:
959  *      0 if function succeeded
960  */
961 static int
962 ti_mmchs_update_ios(device_t brdev, device_t reqdev)
963 {
964         struct ti_mmchs_softc *sc;
965         struct mmc_host *host;
966         struct mmc_ios *ios;
967         uint32_t clkdiv;
968         uint32_t hctl_reg;
969         uint32_t con_reg;
970         uint32_t sysctl_reg;
971 #ifndef SOC_TI_AM335X
972         uint16_t mv;
973 #endif
974         unsigned long timeout;
975         int do_card_init = 0;
976
977         sc = device_get_softc(brdev);
978         host = &sc->host;
979         ios = &host->ios;
980
981         /* Read the initial values of the registers */
982         hctl_reg = ti_mmchs_read_4(sc, MMCHS_HCTL);
983         con_reg = ti_mmchs_read_4(sc, MMCHS_CON);
984
985         /* Set the bus width */
986         switch (ios->bus_width) {
987                 case bus_width_1:
988                         hctl_reg &= ~MMCHS_HCTL_DTW;
989                         con_reg &= ~MMCHS_CON_DW8;
990                         break;
991                 case bus_width_4:
992                         hctl_reg |= MMCHS_HCTL_DTW;
993                         con_reg &= ~MMCHS_CON_DW8;
994                         break;
995                 case bus_width_8:
996                         con_reg |= MMCHS_CON_DW8;
997                         break;
998         }
999
1000         /* Finally write all these settings back to the registers */
1001         ti_mmchs_write_4(sc, MMCHS_HCTL, hctl_reg);
1002         ti_mmchs_write_4(sc, MMCHS_CON, con_reg);
1003
1004         /* Check if we need to change the external voltage regulator */
1005         if (sc->sc_cur_power_mode != ios->power_mode) {
1006
1007                 if (ios->power_mode == power_up) {
1008
1009                         /* Set the power level */
1010                         hctl_reg = ti_mmchs_read_4(sc, MMCHS_HCTL);
1011                         hctl_reg &= ~(MMCHS_HCTL_SDVS_MASK | MMCHS_HCTL_SDBP);
1012
1013                         if ((ios->vdd == -1) || (ios->vdd >= vdd_240)) {
1014 #ifndef SOC_TI_AM335X
1015                                 mv = 3000;
1016 #endif
1017                                 hctl_reg |= MMCHS_HCTL_SDVS_V30;
1018                         } else {
1019 #ifndef SOC_TI_AM335X
1020                                 mv = 1800;
1021 #endif
1022                                 hctl_reg |= MMCHS_HCTL_SDVS_V18;
1023                         }
1024
1025                         ti_mmchs_write_4(sc, MMCHS_HCTL, hctl_reg);
1026
1027 #ifdef SOC_TI_AM335X
1028                         printf("%s: TWL unimplemented\n", __func__);
1029 #else
1030                         /* Set the desired voltage on the regulator */
1031                         if (sc->sc_vreg_dev && sc->sc_vreg_name)
1032                                 twl_vreg_set_voltage(sc->sc_vreg_dev, sc->sc_vreg_name, mv);
1033 #endif
1034                         /* Enable the bus power */
1035                         ti_mmchs_write_4(sc, MMCHS_HCTL, (hctl_reg | MMCHS_HCTL_SDBP));
1036                         timeout = hz;
1037                         while (!(ti_mmchs_read_4(sc, MMCHS_HCTL) & MMCHS_HCTL_SDBP)) {
1038                                 if (timeout-- == 0)
1039                                         break;
1040                                 pause("MMC_PWRON", 1);
1041                         }
1042
1043                 } else if (ios->power_mode == power_off) {
1044                         /* Disable the bus power */
1045                         hctl_reg = ti_mmchs_read_4(sc, MMCHS_HCTL);
1046                         ti_mmchs_write_4(sc, MMCHS_HCTL, (hctl_reg & ~MMCHS_HCTL_SDBP));
1047
1048 #ifdef SOC_TI_AM335X
1049                         printf("%s: TWL unimplemented\n", __func__);
1050 #else
1051                         /* Turn the power off on the voltage regulator */
1052                         if (sc->sc_vreg_dev && sc->sc_vreg_name)
1053                                 twl_vreg_set_voltage(sc->sc_vreg_dev, sc->sc_vreg_name, 0);
1054 #endif
1055                 } else if (ios->power_mode == power_on) {
1056                         /* Force a card re-initialisation sequence */
1057                         do_card_init = 1;
1058                 }
1059
1060                 /* Save the new power state */
1061                 sc->sc_cur_power_mode = ios->power_mode;
1062         }
1063
1064         /* need the MMCHS_SYSCTL register */
1065         sysctl_reg = ti_mmchs_read_4(sc, MMCHS_SYSCTL);
1066
1067         /* Just in case this hasn't been setup before, set the timeout to the default */
1068         sysctl_reg &= ~MMCHS_SYSCTL_DTO_MASK;
1069         sysctl_reg |= MMCHS_SYSCTL_DTO(0xe);
1070
1071         /* Disable the clock output while configuring the new clock */
1072         sysctl_reg &= ~(MMCHS_SYSCTL_ICE | MMCHS_SYSCTL_CEN);
1073         ti_mmchs_write_4(sc, MMCHS_SYSCTL, sysctl_reg);
1074
1075         /* bus mode? */
1076         if (ios->clock == 0) {
1077                 clkdiv = 0;
1078         } else {
1079                 clkdiv = sc->sc_ref_freq / ios->clock;
1080                 if (clkdiv < 1)
1081                         clkdiv = 1;
1082                 if ((sc->sc_ref_freq / clkdiv) > ios->clock)
1083                         clkdiv += 1;
1084                 if (clkdiv > 250)
1085                         clkdiv = 250;
1086         }
1087
1088         /* Set the new clock divider */
1089         sysctl_reg &= ~MMCHS_SYSCTL_CLKD_MASK;
1090         sysctl_reg |= MMCHS_SYSCTL_CLKD(clkdiv);
1091
1092         /* Write the new settings ... */
1093         ti_mmchs_write_4(sc, MMCHS_SYSCTL, sysctl_reg);
1094         /* ... write the internal clock enable bit ... */
1095         ti_mmchs_write_4(sc, MMCHS_SYSCTL, sysctl_reg | MMCHS_SYSCTL_ICE);
1096         /* ... wait for the clock to stablise ... */
1097         while (((sysctl_reg = ti_mmchs_read_4(sc, MMCHS_SYSCTL)) &
1098             MMCHS_SYSCTL_ICS) == 0) {
1099                 continue;
1100         }
1101         /* ... then enable */
1102         sysctl_reg |= MMCHS_SYSCTL_CEN;
1103         ti_mmchs_write_4(sc, MMCHS_SYSCTL, sysctl_reg);
1104
1105         /* If the power state has changed to 'power_on' then run the init sequence*/
1106         if (do_card_init) {
1107                 ti_mmchs_send_init_stream(sc);
1108         }
1109
1110         /* Set the bus mode (opendrain or normal) */
1111         con_reg = ti_mmchs_read_4(sc, MMCHS_CON);
1112         if (ios->bus_mode == opendrain)
1113                 con_reg |= MMCHS_CON_OD;
1114         else
1115                 con_reg &= ~MMCHS_CON_OD;
1116         ti_mmchs_write_4(sc, MMCHS_CON, con_reg);
1117
1118         return (0);
1119 }
1120
1121 /**
1122  *      ti_mmchs_acquire_host -
1123  *      @brdev: mmc bridge device handle
1124  *      @reqdev: device doing the request
1125  *
1126  *      TODO: Is this function needed ?
1127  *
1128  *      LOCKING:
1129  *      none
1130  *
1131  *      RETURNS:
1132  *      0 function succeeded
1133  *
1134  */
1135 static int
1136 ti_mmchs_acquire_host(device_t brdev, device_t reqdev)
1137 {
1138         struct ti_mmchs_softc *sc = device_get_softc(brdev);
1139         int err = 0;
1140
1141         TI_MMCHS_LOCK(sc);
1142
1143         while (sc->bus_busy) {
1144                 msleep(sc, &sc->sc_mtx, PZERO, "mmc", hz / 5);
1145         }
1146
1147         sc->bus_busy++;
1148
1149         TI_MMCHS_UNLOCK(sc);
1150
1151         return (err);
1152 }
1153
1154 /**
1155  *      ti_mmchs_release_host -
1156  *      @brdev: mmc bridge device handle
1157  *      @reqdev: device doing the request
1158  *
1159  *      TODO: Is this function needed ?
1160  *
1161  *      LOCKING:
1162  *      none
1163  *
1164  *      RETURNS:
1165  *      0 function succeeded
1166  *
1167  */
1168 static int
1169 ti_mmchs_release_host(device_t brdev, device_t reqdev)
1170 {
1171         struct ti_mmchs_softc *sc = device_get_softc(brdev);
1172
1173         TI_MMCHS_LOCK(sc);
1174
1175         sc->bus_busy--;
1176         wakeup(sc);
1177
1178         TI_MMCHS_UNLOCK(sc);
1179
1180         return (0);
1181 }
1182
1183 /**
1184  *      ti_mmchs_read_ivar - returns driver conf variables
1185  *      @bus:
1186  *      @child:
1187  *      @which: The variable to get the result for
1188  *      @result: Upon return will store the variable value
1189  *
1190  *
1191  *
1192  *      LOCKING:
1193  *      None, caller must hold locks
1194  *
1195  *      RETURNS:
1196  *      0 on success
1197  *      EINVAL if the variable requested is invalid
1198  */
1199 static int
1200 ti_mmchs_read_ivar(device_t bus, device_t child, int which, uintptr_t *result)
1201 {
1202         struct ti_mmchs_softc *sc = device_get_softc(bus);
1203
1204         switch (which) {
1205                 case MMCBR_IVAR_BUS_MODE:
1206                         *(int *)result = sc->host.ios.bus_mode;
1207                         break;
1208                 case MMCBR_IVAR_BUS_WIDTH:
1209                         *(int *)result = sc->host.ios.bus_width;
1210                         break;
1211                 case MMCBR_IVAR_CHIP_SELECT:
1212                         *(int *)result = sc->host.ios.chip_select;
1213                         break;
1214                 case MMCBR_IVAR_CLOCK:
1215                         *(int *)result = sc->host.ios.clock;
1216                         break;
1217                 case MMCBR_IVAR_F_MIN:
1218                         *(int *)result = sc->host.f_min;
1219                         break;
1220                 case MMCBR_IVAR_F_MAX:
1221                         *(int *)result = sc->host.f_max;
1222                         break;
1223                 case MMCBR_IVAR_HOST_OCR:
1224                         *(int *)result = sc->host.host_ocr;
1225                         break;
1226                 case MMCBR_IVAR_MODE:
1227                         *(int *)result = sc->host.mode;
1228                         break;
1229                 case MMCBR_IVAR_OCR:
1230                         *(int *)result = sc->host.ocr;
1231                         break;
1232                 case MMCBR_IVAR_POWER_MODE:
1233                         *(int *)result = sc->host.ios.power_mode;
1234                         break;
1235                 case MMCBR_IVAR_VDD:
1236                         *(int *)result = sc->host.ios.vdd;
1237                         break;
1238                 case MMCBR_IVAR_CAPS:
1239                         *(int *)result = sc->host.caps;
1240                         break;
1241                 case MMCBR_IVAR_MAX_DATA:
1242                         *(int *)result = 1;
1243                         break;
1244                 default:
1245                         return (EINVAL);
1246         }
1247         return (0);
1248 }
1249
1250 /**
1251  *      ti_mmchs_write_ivar - writes a driver conf variables
1252  *      @bus:
1253  *      @child:
1254  *      @which: The variable to set
1255  *      @value: The value to write into the variable
1256  *
1257  *
1258  *
1259  *      LOCKING:
1260  *      None, caller must hold locks
1261  *
1262  *      RETURNS:
1263  *      0 on success
1264  *      EINVAL if the variable requested is invalid
1265  */
1266 static int
1267 ti_mmchs_write_ivar(device_t bus, device_t child, int which, uintptr_t value)
1268 {
1269         struct ti_mmchs_softc *sc = device_get_softc(bus);
1270
1271         switch (which) {
1272                 case MMCBR_IVAR_BUS_MODE:
1273                         sc->host.ios.bus_mode = value;
1274                         break;
1275                 case MMCBR_IVAR_BUS_WIDTH:
1276                         sc->host.ios.bus_width = value;
1277                         break;
1278                 case MMCBR_IVAR_CHIP_SELECT:
1279                         sc->host.ios.chip_select = value;
1280                         break;
1281                 case MMCBR_IVAR_CLOCK:
1282                         sc->host.ios.clock = value;
1283                         break;
1284                 case MMCBR_IVAR_MODE:
1285                         sc->host.mode = value;
1286                         break;
1287                 case MMCBR_IVAR_OCR:
1288                         sc->host.ocr = value;
1289                         break;
1290                 case MMCBR_IVAR_POWER_MODE:
1291                         sc->host.ios.power_mode = value;
1292                         break;
1293                 case MMCBR_IVAR_VDD:
1294                         sc->host.ios.vdd = value;
1295                         break;
1296                         /* These are read-only */
1297                 case MMCBR_IVAR_CAPS:
1298                 case MMCBR_IVAR_HOST_OCR:
1299                 case MMCBR_IVAR_F_MIN:
1300                 case MMCBR_IVAR_F_MAX:
1301                 case MMCBR_IVAR_MAX_DATA:
1302                         return (EINVAL);
1303                 default:
1304                         return (EINVAL);
1305         }
1306         return (0);
1307 }
1308
1309 /**
1310  *      ti_mmchs_hw_init - initialises the MMC/SD/SIO controller
1311  *      @dev: mmc device handle
1312  *
1313  *      Called by the driver attach function during driver initialisation. This
1314  *      function is responsibly to setup the controller ready for transactions.
1315  *
1316  *      LOCKING:
1317  *      No locking, assumed to only be called during initialisation.
1318  *
1319  *      RETURNS:
1320  *      nothing
1321  */
1322 static void
1323 ti_mmchs_hw_init(device_t dev)
1324 {
1325         struct ti_mmchs_softc *sc = device_get_softc(dev);
1326         clk_ident_t clk;
1327         unsigned long timeout;
1328         uint32_t sysctl;
1329         uint32_t capa;
1330         uint32_t con, sysconfig;
1331
1332         /* 1: Enable the controller and interface/functional clocks */
1333         clk = MMC0_CLK + sc->device_id;
1334
1335         if (ti_prcm_clk_enable(clk) != 0) {
1336                 device_printf(dev, "Error: failed to enable MMC clock\n");
1337                 return;
1338         }
1339
1340         /* 1a: Get the frequency of the source clock */
1341         if (ti_prcm_clk_get_source_freq(clk, &sc->sc_ref_freq) != 0) {
1342                 device_printf(dev, "Error: failed to get source clock freq\n");
1343                 return;
1344         }
1345
1346         /* 2: Issue a softreset to the controller */
1347         sysconfig = ti_mmchs_read_4(sc, MMCHS_SYSCONFIG);
1348         sysconfig |= MMCHS_SYSCONFIG_SRST;
1349         ti_mmchs_write_4(sc, MMCHS_SYSCONFIG, sysconfig);
1350         timeout = 100;
1351         while ((ti_mmchs_read_4(sc, MMCHS_SYSSTATUS) & 0x01) == 0x0) {
1352                 DELAY(1000);
1353                 if (timeout-- == 0) {
1354                         device_printf(dev, "Error: reset operation timed out\n");
1355                         return;
1356                 }
1357         }
1358
1359         /* 3: Reset both the command and data state machines */
1360         sysctl = ti_mmchs_read_4(sc, MMCHS_SYSCTL);
1361         ti_mmchs_write_4(sc, MMCHS_SYSCTL, sysctl | MMCHS_SYSCTL_SRA);
1362         timeout = 100;
1363         while ((ti_mmchs_read_4(sc, MMCHS_SYSCTL) & MMCHS_SYSCTL_SRA) != 0x0) {
1364                 DELAY(1000);
1365                 if (timeout-- == 0) {
1366                         device_printf(dev, "Error: reset operation timed out\n");
1367                         return;
1368                 }
1369         }
1370
1371         /* 4: Set initial host configuration (1-bit mode, pwroff) and capabilities */
1372         ti_mmchs_write_4(sc, MMCHS_HCTL, MMCHS_HCTL_SDVS_V30);
1373
1374         capa = ti_mmchs_read_4(sc, MMCHS_CAPA);
1375         ti_mmchs_write_4(sc, MMCHS_CAPA, capa | MMCHS_CAPA_VS30 | MMCHS_CAPA_VS18);
1376
1377         /* 5: Set the initial bus configuration
1378          *       0  CTPL_MMC_SD      : Control Power for DAT1 line
1379          *       0  WPP_ACTIVE_HIGH  : Write protect polarity
1380          *       0  CDP_ACTIVE_HIGH  : Card detect polarity
1381          *       0  CTO_ENABLED      : MMC interrupt command
1382          *       0  DW8_DISABLED     : 8-bit mode MMC select
1383          *       0  MODE_FUNC        : Mode select
1384          *       0  STREAM_DISABLED  : Stream command
1385          *       0  HR_DISABLED      : Broadcast host response
1386          *       0  INIT_DISABLED    : Send initialization stream
1387          *       0  OD_DISABLED      : No Open Drain
1388          */
1389         con = ti_mmchs_read_4(sc, MMCHS_CON) & MMCHS_CON_DVAL_MASK;
1390         ti_mmchs_write_4(sc, MMCHS_CON, con);
1391
1392 }
1393
1394 /**
1395  *      ti_mmchs_fini - shutdown the MMC/SD/SIO controller
1396  *      @dev: mmc device handle
1397  *
1398  *      Responsible for shutting done the MMC controller, this function may be
1399  *      called as part of a reset sequence.
1400  *
1401  *      LOCKING:
1402  *      No locking, assumed to be called during tear-down/reset.
1403  *
1404  *      RETURNS:
1405  *      nothing
1406  */
1407 static void
1408 ti_mmchs_hw_fini(device_t dev)
1409 {
1410         struct ti_mmchs_softc *sc = device_get_softc(dev);
1411
1412         /* Disable all interrupts */
1413         ti_mmchs_write_4(sc, MMCHS_ISE, 0x00000000);
1414         ti_mmchs_write_4(sc, MMCHS_IE, 0x00000000);
1415
1416         /* Disable the functional and interface clocks */
1417         ti_prcm_clk_disable(MMC0_CLK + sc->device_id);
1418 }
1419
1420 /**
1421  *      ti_mmchs_init_dma_channels - initalise the DMA channels
1422  *      @sc: driver soft context
1423  *
1424  *      Attempts to activate an RX and TX DMA channel for the MMC device.
1425  *
1426  *      LOCKING:
1427  *      No locking, assumed to be called during tear-down/reset.
1428  *
1429  *      RETURNS:
1430  *      0 on success, a negative error code on failure.
1431  */
1432 static int
1433 ti_mmchs_init_dma_channels(struct ti_mmchs_softc *sc)
1434 {
1435 #ifdef SOC_TI_AM335X
1436         switch (sc->device_id) {
1437                 case 0:
1438                         sc->dma_tx_trig = TI_EDMA3_EVENT_SDTXEVT0;
1439                         sc->dma_rx_trig = TI_EDMA3_EVENT_SDRXEVT0;
1440                         break;
1441                 case 1:
1442                         sc->dma_tx_trig = TI_EDMA3_EVENT_SDTXEVT1;
1443                         sc->dma_rx_trig = TI_EDMA3_EVENT_SDRXEVT1;
1444                         break;
1445                 default:
1446                         return(EINVAL);
1447         }
1448
1449 #define EVTQNUM         0
1450         /* TODO EDMA3 have 3 queues, so we need some queue allocation call */
1451         ti_edma3_init(EVTQNUM);
1452         ti_edma3_request_dma_ch(sc->dma_tx_trig, sc->dma_tx_trig, EVTQNUM);
1453         ti_edma3_request_dma_ch(sc->dma_rx_trig, sc->dma_rx_trig, EVTQNUM);
1454 #else
1455         int err;
1456         uint32_t rev;
1457
1458         /* Get the current chip revision */
1459         rev = ti_revision();
1460         if ((OMAP_REV_DEVICE(rev) != OMAP4430_DEV) && (sc->device_id > 3))
1461                 return(EINVAL);
1462
1463         /* Get the DMA MMC triggers */
1464         switch (sc->device_id) {
1465                 case 1:
1466                         sc->dma_tx_trig = 60;
1467                         sc->dma_rx_trig = 61;
1468                         break;
1469                 case 2:
1470                         sc->dma_tx_trig = 46;
1471                         sc->dma_rx_trig = 47;
1472                         break;
1473                 case 3:
1474                         sc->dma_tx_trig = 76;
1475                         sc->dma_rx_trig = 77;
1476                         break;
1477                 /* The following are OMAP4 only */
1478                 case 4:
1479                         sc->dma_tx_trig = 56;
1480                         sc->dma_rx_trig = 57;
1481                         break;
1482                 case 5:
1483                         sc->dma_tx_trig = 58;
1484                         sc->dma_rx_trig = 59;
1485                         break;
1486                 default:
1487                         return(EINVAL);
1488         }
1489
1490         /* Activate a RX channel from the OMAP DMA driver */
1491         err = ti_sdma_activate_channel(&sc->sc_dmach_rd, ti_mmchs_dma_intr, sc);
1492         if (err != 0)
1493                 return(err);
1494
1495         /* Setup the RX channel for MMC data transfers */
1496         ti_sdma_set_xfer_burst(sc->sc_dmach_rd, TI_SDMA_BURST_NONE,
1497             TI_SDMA_BURST_64);
1498         ti_sdma_set_xfer_data_type(sc->sc_dmach_rd, TI_SDMA_DATA_32BITS_SCALAR);
1499         ti_sdma_sync_params(sc->sc_dmach_rd, sc->dma_rx_trig,
1500             TI_SDMA_SYNC_PACKET | TI_SDMA_SYNC_TRIG_ON_SRC);
1501         ti_sdma_set_addr_mode(sc->sc_dmach_rd, TI_SDMA_ADDR_CONSTANT,
1502             TI_SDMA_ADDR_POST_INCREMENT);
1503
1504         /* Activate and configure the TX DMA channel */
1505         err = ti_sdma_activate_channel(&sc->sc_dmach_wr, ti_mmchs_dma_intr, sc);
1506         if (err != 0)
1507                 return(err);
1508
1509         /* Setup the TX channel for MMC data transfers */
1510         ti_sdma_set_xfer_burst(sc->sc_dmach_wr, TI_SDMA_BURST_64,
1511             TI_SDMA_BURST_NONE);
1512         ti_sdma_set_xfer_data_type(sc->sc_dmach_wr, TI_SDMA_DATA_32BITS_SCALAR);
1513         ti_sdma_sync_params(sc->sc_dmach_wr, sc->dma_tx_trig,
1514             TI_SDMA_SYNC_PACKET | TI_SDMA_SYNC_TRIG_ON_DST);
1515         ti_sdma_set_addr_mode(sc->sc_dmach_wr, TI_SDMA_ADDR_POST_INCREMENT,
1516             TI_SDMA_ADDR_CONSTANT);
1517 #endif
1518         return(0);
1519 }
1520
1521 /**
1522  *      ti_mmchs_deactivate - deactivates the driver
1523  *      @dev: mmc device handle
1524  *
1525  *      Unmaps the register set and releases the IRQ resource.
1526  *
1527  *      LOCKING:
1528  *      None required
1529  *
1530  *      RETURNS:
1531  *      nothing
1532  */
1533 static void
1534 ti_mmchs_deactivate(device_t dev)
1535 {
1536         struct ti_mmchs_softc *sc= device_get_softc(dev);
1537
1538         /* Remove the IRQ handler */
1539         if (sc->sc_irq_h != NULL) {
1540                 bus_teardown_intr(dev, sc->sc_irq_res, sc->sc_irq_h);
1541                 sc->sc_irq_h = NULL;
1542         }
1543
1544         /* Do the generic detach */
1545         bus_generic_detach(sc->sc_dev);
1546
1547 #ifdef SOC_TI_AM335X
1548         printf("%s: DMA unimplemented\n", __func__);
1549 #else
1550         /* Deactivate the DMA channels */
1551         ti_sdma_deactivate_channel(sc->sc_dmach_rd);
1552         ti_sdma_deactivate_channel(sc->sc_dmach_wr);
1553 #endif
1554
1555         /* Unmap the MMC controller registers */
1556         if (sc->sc_mem_res != 0) {
1557                 bus_release_resource(dev, SYS_RES_MEMORY, rman_get_rid(sc->sc_irq_res),
1558                     sc->sc_mem_res);
1559                 sc->sc_mem_res = NULL;
1560         }
1561
1562         /* Release the IRQ resource */
1563         if (sc->sc_irq_res != NULL) {
1564                 bus_release_resource(dev, SYS_RES_IRQ, rman_get_rid(sc->sc_irq_res),
1565                     sc->sc_irq_res);
1566                 sc->sc_irq_res = NULL;
1567         }
1568
1569         return;
1570 }
1571
1572 /**
1573  *      ti_mmchs_activate - activates the driver
1574  *      @dev: mmc device handle
1575  *
1576  *      Maps in the register set and requests an IRQ handler for the MMC controller.
1577  *
1578  *      LOCKING:
1579  *      None required
1580  *
1581  *      RETURNS:
1582  *      0 on sucess
1583  *      ENOMEM if failed to map register set
1584  */
1585 static int
1586 ti_mmchs_activate(device_t dev)
1587 {
1588         struct ti_mmchs_softc *sc = device_get_softc(dev);
1589         int rid;
1590         int err;
1591
1592         /* Get the memory resource for the register mapping */
1593         rid = 0;
1594         sc->sc_mem_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid,
1595             RF_ACTIVE);
1596         if (sc->sc_mem_res == NULL)
1597                 panic("%s: Cannot map registers", device_get_name(dev));
1598
1599         /* Allocate an IRQ resource for the MMC controller */
1600         rid = 0;
1601         sc->sc_irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,
1602             RF_ACTIVE | RF_SHAREABLE);
1603         if (sc->sc_irq_res == NULL)
1604                 goto errout;
1605
1606         /* Allocate DMA tags and maps */
1607         err = bus_dma_tag_create(bus_get_dma_tag(dev), 1, 0,
1608             BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL,
1609             NULL, MAXPHYS, 1, MAXPHYS, BUS_DMA_ALLOCNOW, NULL,
1610             NULL, &sc->sc_dmatag);
1611         if (err != 0)
1612                 goto errout;
1613
1614         err = bus_dmamap_create(sc->sc_dmatag, 0,  &sc->sc_dmamap);
1615         if (err != 0)
1616                 goto errout;
1617
1618         /* Initialise the DMA channels to be used by the controller */
1619         err = ti_mmchs_init_dma_channels(sc);
1620         if (err != 0)
1621                 goto errout;
1622
1623         /* Set the register offset */
1624         if (ti_chip() == CHIP_OMAP_3)
1625                 sc->sc_reg_off = OMAP3_MMCHS_REG_OFFSET;
1626         else if (ti_chip() == CHIP_OMAP_4)
1627                 sc->sc_reg_off = OMAP4_MMCHS_REG_OFFSET;
1628         else if (ti_chip() == CHIP_AM335X)
1629                 sc->sc_reg_off = AM335X_MMCHS_REG_OFFSET;
1630         else
1631                 panic("Unknown OMAP device\n");
1632
1633         /* Get the physical address of the MMC data register, needed for DMA */
1634         sc->sc_data_reg_paddr = BUS_SPACE_PHYSADDR(sc->sc_mem_res, 
1635             sc->sc_reg_off + MMCHS_DATA);
1636
1637         /* Set the initial power state to off */
1638         sc->sc_cur_power_mode = power_off;
1639
1640         return (0);
1641
1642 errout:
1643         ti_mmchs_deactivate(dev);
1644         return (ENOMEM);
1645 }
1646
1647 /**
1648  *      ti_mmchs_probe - probe function for the driver
1649  *      @dev: mmc device handle
1650  *
1651  *
1652  *
1653  *      RETURNS:
1654  *      always returns 0
1655  */
1656 static int
1657 ti_mmchs_probe(device_t dev)
1658 {
1659
1660         if (!ofw_bus_status_okay(dev))
1661                 return (ENXIO);
1662
1663         if (!ofw_bus_is_compatible(dev, "ti,mmchs"))
1664                 return (ENXIO);
1665
1666         device_set_desc(dev, "TI MMC/SD/SDIO High Speed Interface");
1667         return (0);
1668 }
1669
1670 /**
1671  *      ti_mmchs_attach - attach function for the driver
1672  *      @dev: mmc device handle
1673  *
1674  *      Driver initialisation, sets-up the bus mappings, DMA mapping/channels and
1675  *      the actual controller by calling ti_mmchs_init().
1676  *
1677  *      RETURNS:
1678  *      Returns 0 on success or a negative error code.
1679  */
1680 static int
1681 ti_mmchs_attach(device_t dev)
1682 {
1683         struct ti_mmchs_softc *sc = device_get_softc(dev);
1684         int unit = device_get_unit(dev);
1685         phandle_t node;
1686         pcell_t did;
1687         int err;
1688
1689         /* Save the device and bus tag */
1690         sc->sc_dev = dev;
1691
1692         /* Get the mmchs device id from FDT */
1693         node = ofw_bus_get_node(dev);
1694         if ((OF_getprop(node, "mmchs-device-id", &did, sizeof(did))) <= 0) {
1695             device_printf(dev, "missing mmchs-device-id attribute in FDT\n");
1696                 return (ENXIO);
1697         }
1698         sc->device_id = fdt32_to_cpu(did);
1699
1700         /* Initiate the mtex lock */
1701         TI_MMCHS_LOCK_INIT(sc);
1702
1703         /* Indicate the DMA channels haven't yet been allocated */
1704         sc->sc_dmach_rd = (unsigned int)-1;
1705         sc->sc_dmach_wr = (unsigned int)-1;
1706
1707         /* Get the hint'ed write detect pin */
1708         /* TODO: take this from FDT */
1709         if (resource_int_value("ti_mmchs", unit, "wp_gpio", &sc->sc_wp_gpio_pin) != 0){
1710                 sc->sc_wp_gpio_pin = -1;
1711         } else {
1712                 /* Get the GPIO device, we need this for the write protect pin */
1713                 sc->sc_gpio_dev = devclass_get_device(devclass_find("gpio"), 0);
1714                 if (sc->sc_gpio_dev == NULL)
1715                         device_printf(dev, "Error: failed to get the GPIO device\n");
1716                 else
1717                         GPIO_PIN_SETFLAGS(sc->sc_gpio_dev, sc->sc_wp_gpio_pin,
1718                                           GPIO_PIN_INPUT);
1719         }
1720
1721         /* Get the TWL voltage regulator device, we need this to for setting the
1722          * voltage of the bus on certain OMAP platforms.
1723          */
1724         sc->sc_vreg_name = NULL;
1725
1726         /* TODO: add voltage regulator knob to FDT */
1727 #ifdef notyet
1728         sc->sc_vreg_dev = devclass_get_device(devclass_find("twl_vreg"), 0);
1729         if (sc->sc_vreg_dev == NULL) {
1730                 device_printf(dev, "Error: failed to get the votlage regulator"
1731                     " device\n");
1732                 sc->sc_vreg_name = NULL;
1733         }
1734 #endif
1735
1736         /* Activate the device */
1737         err = ti_mmchs_activate(dev);
1738         if (err)
1739                 goto out;
1740
1741         /* Initialise the controller */
1742         ti_mmchs_hw_init(dev);
1743
1744         /* Activate the interrupt and attach a handler */
1745         err = bus_setup_intr(dev, sc->sc_irq_res, INTR_TYPE_MISC | INTR_MPSAFE,
1746             NULL, ti_mmchs_intr, sc, &sc->sc_irq_h);
1747         if (err != 0)
1748                 goto out;
1749
1750         /* Add host details */
1751         sc->host.f_min = sc->sc_ref_freq / 1023;
1752         sc->host.f_max = sc->sc_ref_freq;
1753         sc->host.host_ocr = MMC_OCR_290_300 | MMC_OCR_300_310;
1754         sc->host.caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA;
1755
1756         device_add_child(dev, "mmc", 0);
1757
1758         err = bus_generic_attach(dev);
1759
1760 out:
1761         if (err) {
1762                 TI_MMCHS_LOCK_DESTROY(sc);
1763                 ti_mmchs_deactivate(dev);
1764
1765 #ifdef SOC_TI_AM335X
1766                 printf("%s: DMA unimplemented\n", __func__);
1767 #else
1768                 if (sc->sc_dmach_rd != (unsigned int)-1)
1769                         ti_sdma_deactivate_channel(sc->sc_dmach_rd);
1770                 if (sc->sc_dmach_wr != (unsigned int)-1)
1771                         ti_sdma_deactivate_channel(sc->sc_dmach_wr);
1772 #endif
1773         }
1774
1775         return (err);
1776 }
1777
1778 /**
1779  *      ti_mmchs_detach - dettach function for the driver
1780  *      @dev: mmc device handle
1781  *
1782  *      Shutdowns the controll and release resources allocated by the driver.
1783  *
1784  *      RETURNS:
1785  *      Always returns 0.
1786  */
1787 static int
1788 ti_mmchs_detach(device_t dev)
1789 {
1790 #ifndef SOC_TI_AM335X
1791         struct ti_mmchs_softc *sc = device_get_softc(dev);
1792 #endif
1793
1794         ti_mmchs_hw_fini(dev);
1795         ti_mmchs_deactivate(dev);
1796
1797 #ifdef SOC_TI_AM335X
1798                 printf("%s: DMA unimplemented\n", __func__);
1799 #else
1800         ti_sdma_deactivate_channel(sc->sc_dmach_wr);
1801         ti_sdma_deactivate_channel(sc->sc_dmach_rd);
1802 #endif
1803
1804         return (0);
1805 }
1806
1807 static device_method_t ti_mmchs_methods[] = {
1808         /* device_if */
1809         DEVMETHOD(device_probe, ti_mmchs_probe),
1810         DEVMETHOD(device_attach, ti_mmchs_attach),
1811         DEVMETHOD(device_detach, ti_mmchs_detach),
1812
1813         /* Bus interface */
1814         DEVMETHOD(bus_read_ivar,        ti_mmchs_read_ivar),
1815         DEVMETHOD(bus_write_ivar,       ti_mmchs_write_ivar),
1816
1817         /* mmcbr_if - MMC state machine callbacks */
1818         DEVMETHOD(mmcbr_update_ios, ti_mmchs_update_ios),
1819         DEVMETHOD(mmcbr_request, ti_mmchs_request),
1820         DEVMETHOD(mmcbr_get_ro, ti_mmchs_get_ro),
1821         DEVMETHOD(mmcbr_acquire_host, ti_mmchs_acquire_host),
1822         DEVMETHOD(mmcbr_release_host, ti_mmchs_release_host),
1823
1824         {0, 0},
1825 };
1826
1827 static driver_t ti_mmchs_driver = {
1828         "ti_mmchs",
1829         ti_mmchs_methods,
1830         sizeof(struct ti_mmchs_softc),
1831 };
1832 static devclass_t ti_mmchs_devclass;
1833
1834 DRIVER_MODULE(ti_mmchs, simplebus, ti_mmchs_driver, ti_mmchs_devclass, 0, 0);
1835 MODULE_DEPEND(ti_mmchs, ti_prcm, 1, 1, 1);
1836 #ifdef SOC_TI_AM335X
1837 MODULE_DEPEND(ti_mmchs, ti_edma, 1, 1, 1);
1838 #else
1839 MODULE_DEPEND(ti_mmchs, ti_sdma, 1, 1, 1);
1840 #endif
1841 MODULE_DEPEND(ti_mmchs, ti_gpio, 1, 1, 1);
1842
1843 /* FIXME: MODULE_DEPEND(ti_mmchs, twl_vreg, 1, 1, 1); */