]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/dev/rtsx/rtsx.c
Improve handling of alternate settings in the USB stack.
[FreeBSD/FreeBSD.git] / sys / dev / rtsx / rtsx.c
1 /*-
2  * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3  *
4  * Copyright (c) 2006 Uwe Stuehler <uwe@openbsd.org>
5  * Copyright (c) 2012 Stefan Sperling <stsp@openbsd.org>
6  * Copyright (c) 2020 Henri Hennebert <hlh@restart.be>
7  * Copyright (c) 2020 Gary Jennejohn <gj@freebsd.org>
8  * Copyright (c) 2020 Jesper Schmitz Mouridsen <jsm@FreeBSD.org>
9  * All rights reserved.
10  *
11  * Patch from:
12  * - Lutz Bichler <Lutz.Bichler@gmail.com>
13  *
14  * Base on OpenBSD /sys/dev/pci/rtsx_pci.c & /dev/ic/rtsx.c
15  *      on Linux   /drivers/mmc/host/rtsx_pci_sdmmc.c,
16  *                 /include/linux/rtsx_pci.h &
17  *                 /drivers/misc/cardreader/rtsx_pcr.c
18  *      on NetBSD  /sys/dev/ic/rtsx.c
19  *
20  * Permission to use, copy, modify, and distribute this software for any
21  * purpose with or without fee is hereby granted, provided that the above
22  * copyright notice and this permission notice appear in all copies.
23  *
24  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
25  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
28  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34  * SUCH DAMAGE.
35  */
36
37 #include <sys/cdefs.h>
38 __FBSDID("$FreeBSD$");
39
40 #include <sys/param.h>
41 #include <sys/module.h>
42 #include <sys/systm.h> /* For FreeBSD 11 */
43 #include <sys/types.h> /* For FreeBSD 11 */
44 #include <sys/errno.h>
45 #include <sys/kernel.h>
46 #include <sys/bus.h>
47 #include <sys/endian.h>
48 #include <machine/bus.h>
49 #include <sys/mutex.h>
50 #include <sys/rman.h>
51 #include <sys/queue.h>
52 #include <sys/taskqueue.h>
53 #include <sys/sysctl.h>
54 #include <dev/pci/pcivar.h>
55 #include <dev/pci/pcireg.h>
56 #include <dev/mmc/bridge.h>
57 #include <dev/mmc/mmcreg.h>
58 #include <dev/mmc/mmcbrvar.h>
59 #include <machine/_inttypes.h>
60
61 #include "opt_mmccam.h"
62
63 #ifdef MMCCAM
64 #include <cam/cam.h>
65 #include <cam/cam_ccb.h>
66 #include <cam/cam_debug.h>
67 #include <cam/cam_sim.h>
68 #include <cam/cam_xpt_sim.h>
69 #endif /* MMCCAM */
70
71 #include "rtsxreg.h"
72
73 /* The softc holds our per-instance data. */
74 struct rtsx_softc {
75         struct mtx      rtsx_mtx;               /* device mutex */
76         device_t        rtsx_dev;               /* device */
77         uint16_t        rtsx_flags;             /* device flags */
78         uint16_t        rtsx_device_id;         /* device ID */
79         device_t        rtsx_mmc_dev;           /* device of mmc bus */
80         uint32_t        rtsx_intr_enabled;      /* enabled interrupts */
81         uint32_t        rtsx_intr_status;       /* soft interrupt status */
82         int             rtsx_irq_res_id;        /* bus IRQ resource id */
83         struct resource *rtsx_irq_res;          /* bus IRQ resource */
84         void            *rtsx_irq_cookie;       /* bus IRQ resource cookie */
85         struct callout  rtsx_timeout_callout;   /* callout for timeout */
86         int             rtsx_timeout;           /* interrupt timeout value */
87         void            (*rtsx_intr_trans_ok)(struct rtsx_softc *sc);
88                                                 /* function to call if transfer succeed */
89         void            (*rtsx_intr_trans_ko)(struct rtsx_softc *sc);
90                                                 /* function to call if transfer fail */
91         struct timeout_task
92                         rtsx_card_insert_task;  /* card insert delayed task */
93         struct task     rtsx_card_remove_task;  /* card remove task */
94
95         int             rtsx_res_id;            /* bus memory resource id */
96         struct resource *rtsx_res;              /* bus memory resource */
97         int             rtsx_res_type;          /* bus memory resource type */
98         bus_space_tag_t rtsx_btag;              /* host register set tag */
99         bus_space_handle_t rtsx_bhandle;        /* host register set handle */
100
101         bus_dma_tag_t   rtsx_cmd_dma_tag;       /* DMA tag for command transfer */
102         bus_dmamap_t    rtsx_cmd_dmamap;        /* DMA map for command transfer */
103         void            *rtsx_cmd_dmamem;       /* DMA mem for command transfer */
104         bus_addr_t      rtsx_cmd_buffer;        /* device visible address of the DMA segment */
105         int             rtsx_cmd_index;         /* index in rtsx_cmd_buffer */
106
107         bus_dma_tag_t   rtsx_data_dma_tag;      /* DMA tag for data transfer */
108         bus_dmamap_t    rtsx_data_dmamap;       /* DMA map for data transfer */
109         void            *rtsx_data_dmamem;      /* DMA mem for data transfer */
110         bus_addr_t      rtsx_data_buffer;       /* device visible address of the DMA segment */
111
112 #ifdef MMCCAM
113         struct cam_devq         *rtsx_devq;     /* CAM queue of requests */
114         struct cam_sim          *rtsx_sim;      /* descriptor of our SCSI Interface Modules (SIM) */
115         struct mtx              rtsx_sim_mtx;   /* SIM mutex */
116         union ccb               *rtsx_ccb;      /* CAM control block */
117         struct mmc_request      rtsx_cam_req;   /* CAM MMC request */
118 #endif /* MMCCAM */
119
120         struct mmc_request *rtsx_req;           /* MMC request */
121         struct mmc_host rtsx_host;              /* host parameters */
122         int             rtsx_pcie_cap;          /* PCIe capability offset */
123         int8_t          rtsx_bus_busy;          /* bus busy status */
124         int8_t          rtsx_ios_bus_width;     /* current host.ios.bus_width */
125         int32_t         rtsx_ios_clock;         /* current host.ios.clock */
126         int8_t          rtsx_ios_power_mode;    /* current host.ios.power mode */
127         int8_t          rtsx_ios_timing;        /* current host.ios.timing */
128         int8_t          rtsx_ios_vccq;          /* current host.ios.vccq */
129         uint8_t         rtsx_read_only;         /* card read only status */
130         uint8_t         rtsx_inversion;         /* inversion of card detection and read only status */
131         uint8_t         rtsx_force_timing;      /* force bus_timing_uhs_sdr50 */
132         uint8_t         rtsx_debug;             /* print debugging */
133 #ifdef MMCCAM
134         uint8_t         rtsx_cam_status;        /* CAM status - 1 if card in use */
135 #endif /* MMCCAM */
136         uint64_t        rtsx_read_count;        /* count of read operations */
137         uint64_t        rtsx_write_count;       /* count of write operations */
138         bool            rtsx_discovery_mode;    /* are we in discovery mode? */
139         bool            rtsx_tuning_mode;       /* are we tuning */
140         bool            rtsx_double_clk;        /* double clock freqency */
141         bool            rtsx_vpclk;             /* voltage at Pulse-width Modulation(PWM) clock? */
142         uint8_t         rtsx_ssc_depth;         /* Spread spectrum clocking depth */
143         uint8_t         rtsx_card_drive_sel;    /* value for RTSX_CARD_DRIVE_SEL */
144         uint8_t         rtsx_sd30_drive_sel_3v3;/* value for RTSX_SD30_DRIVE_SEL */
145 };
146
147 /* rtsx_flags values */
148 #define RTSX_F_DEFAULT          0x0000
149 #define RTSX_F_CARD_PRESENT     0x0001
150 #define RTSX_F_SDIO_SUPPORT     0x0002
151 #define RTSX_F_VERSION_A        0x0004
152 #define RTSX_F_VERSION_B        0x0008
153 #define RTSX_F_VERSION_C        0x0010
154 #define RTSX_F_VERSION_D        0x0020
155 #define RTSX_F_8411B_QFN48      0x0040
156 #define RTSX_F_REVERSE_SOCKET   0x0080
157
158 #define RTSX_REALTEK            0x10ec
159 #define RTSX_RTS5209            0x5209
160 #define RTSX_RTS5227            0x5227
161 #define RTSX_RTS5229            0x5229
162 #define RTSX_RTS522A            0x522a
163 #define RTSX_RTS525A            0x525a
164 #define RTSX_RTS5249            0x5249
165 #define RTSX_RTL8402            0x5286
166 #define RTSX_RTL8411            0x5289
167 #define RTSX_RTL8411B           0x5287
168
169 #define RTSX_VERSION            "2.0c"
170
171 static const struct rtsx_device {
172         uint16_t        vendor_id;
173         uint16_t        device_id;
174         const char      *desc;
175 } rtsx_devices[] = {
176         { RTSX_REALTEK, RTSX_RTS5209,   RTSX_VERSION " Realtek RTS5209 PCI MMC/SD Card Reader"},
177         { RTSX_REALTEK, RTSX_RTS5227,   RTSX_VERSION " Realtek RTS5227 PCI MMC/SD Card Reader"},
178         { RTSX_REALTEK, RTSX_RTS5229,   RTSX_VERSION " Realtek RTS5229 PCI MMC/SD Card Reader"},
179         { RTSX_REALTEK, RTSX_RTS522A,   RTSX_VERSION " Realtek RTS522A PCI MMC/SD Card Reader"},
180         { RTSX_REALTEK, RTSX_RTS525A,   RTSX_VERSION " Realtek RTS525A PCI MMC/SD Card Reader"},
181         { RTSX_REALTEK, RTSX_RTS5249,   RTSX_VERSION " Realtek RTS5249 PCI MMC/SD Card Reader"},
182         { RTSX_REALTEK, RTSX_RTL8402,   RTSX_VERSION " Realtek RTL8402 PCI MMC/SD Card Reader"},
183         { RTSX_REALTEK, RTSX_RTL8411,   RTSX_VERSION " Realtek RTL8411 PCI MMC/SD Card Reader"},
184         { RTSX_REALTEK, RTSX_RTL8411B,  RTSX_VERSION " Realtek RTL8411B PCI MMC/SD Card Reader"},
185         { 0,            0,              NULL}
186 };
187
188 static int      rtsx_dma_alloc(struct rtsx_softc *sc);
189 static void     rtsx_dmamap_cb(void *arg, bus_dma_segment_t *segs, int nsegs, int error);
190 static void     rtsx_dma_free(struct rtsx_softc *sc);
191 static void     rtsx_intr(void *arg);
192 static void     rtsx_handle_card_present(struct rtsx_softc *sc);
193 static void     rtsx_card_task(void *arg, int pending __unused);
194 static bool     rtsx_is_card_present(struct rtsx_softc *sc);
195 static int      rtsx_init(struct rtsx_softc *sc);
196 static int      rtsx_map_sd_drive(int index);
197 static int      rtsx_rts5227_fill_driving(struct rtsx_softc *sc);
198 static int      rtsx_rts5249_fill_driving(struct rtsx_softc *sc);
199 static int      rtsx_read(struct rtsx_softc *, uint16_t, uint8_t *);
200 static int      rtsx_read_cfg(struct rtsx_softc *sc, uint8_t func, uint16_t addr, uint32_t *val);
201 static int      rtsx_write(struct rtsx_softc *sc, uint16_t addr, uint8_t mask, uint8_t val);
202 static int      rtsx_read_phy(struct rtsx_softc *sc, uint8_t addr, uint16_t *val);
203 static int      rtsx_write_phy(struct rtsx_softc *sc, uint8_t addr, uint16_t val);
204 static int      rtsx_bus_power_off(struct rtsx_softc *sc);
205 static int      rtsx_bus_power_on(struct rtsx_softc *sc);
206 static int      rtsx_set_bus_width(struct rtsx_softc *sc, enum mmc_bus_width width);
207 static int      rtsx_set_sd_timing(struct rtsx_softc *sc, enum mmc_bus_timing timing);
208 static int      rtsx_set_sd_clock(struct rtsx_softc *sc, uint32_t freq);
209 static int      rtsx_stop_sd_clock(struct rtsx_softc *sc);
210 static int      rtsx_switch_sd_clock(struct rtsx_softc *sc, uint8_t clk, uint8_t n, uint8_t div, uint8_t mcu);
211 static void     rtsx_sd_change_tx_phase(struct rtsx_softc *sc, uint8_t sample_point);
212 static void     rtsx_sd_change_rx_phase(struct rtsx_softc *sc, uint8_t sample_point);
213 static void     rtsx_sd_tuning_rx_phase(struct rtsx_softc *sc, uint32_t *phase_map);
214 static int      rtsx_sd_tuning_rx_cmd(struct rtsx_softc *sc, uint8_t sample_point);
215 static int      rtsx_sd_tuning_rx_cmd_wait(struct rtsx_softc *sc, struct mmc_command *cmd);
216 static void     rtsx_sd_tuning_rx_cmd_wakeup(struct rtsx_softc *sc);
217 static void     rtsx_sd_wait_data_idle(struct rtsx_softc *sc);
218 static uint8_t  rtsx_sd_search_final_rx_phase(struct rtsx_softc *sc, uint32_t phase_map);
219 static int      rtsx_sd_get_rx_phase_len(uint32_t phase_map, int start_bit);
220 #if 0   /* For led */
221 static int      rtsx_led_enable(struct rtsx_softc *sc);
222 static int      rtsx_led_disable(struct rtsx_softc *sc);
223 #endif  /* For led */
224 static uint8_t  rtsx_response_type(uint16_t mmc_rsp);
225 static void     rtsx_init_cmd(struct rtsx_softc *sc, struct mmc_command *cmd);
226 static void     rtsx_push_cmd(struct rtsx_softc *sc, uint8_t cmd, uint16_t reg,
227                               uint8_t mask, uint8_t data);
228 static void     rtsx_set_cmd_data_len(struct rtsx_softc *sc, uint16_t block_cnt, uint16_t byte_cnt);
229 static void     rtsx_send_cmd(struct rtsx_softc *sc);
230 static void     rtsx_ret_resp(struct rtsx_softc *sc);
231 static void     rtsx_set_resp(struct rtsx_softc *sc, struct mmc_command *cmd);
232 static void     rtsx_stop_cmd(struct rtsx_softc *sc);
233 static void     rtsx_clear_error(struct rtsx_softc *sc);
234 static void     rtsx_req_done(struct rtsx_softc *sc);
235 static int      rtsx_send_req(struct rtsx_softc *sc, struct mmc_command *cmd);
236 static int      rtsx_xfer_short(struct rtsx_softc *sc, struct mmc_command *cmd);
237 static void     rtsx_ask_ppbuf_part1(struct rtsx_softc *sc);
238 static void     rtsx_get_ppbuf_part1(struct rtsx_softc *sc);
239 static void     rtsx_get_ppbuf_part2(struct rtsx_softc *sc);
240 static void     rtsx_put_ppbuf_part1(struct rtsx_softc *sc);
241 static void     rtsx_put_ppbuf_part2(struct rtsx_softc *sc);
242 static void     rtsx_write_ppbuf(struct rtsx_softc *sc);
243 static int      rtsx_xfer(struct rtsx_softc *sc, struct mmc_command *cmd);
244 static void     rtsx_xfer_begin(struct rtsx_softc *sc);
245 static void     rtsx_xfer_start(struct rtsx_softc *sc);
246 static void     rtsx_xfer_finish(struct rtsx_softc *sc);
247 static void     rtsx_timeout(void *arg);
248
249 #ifdef MMCCAM
250 static void     rtsx_cam_action(struct cam_sim *sim, union ccb *ccb);
251 static void     rtsx_cam_poll(struct cam_sim *sim);
252 static void     rtsx_cam_set_tran_settings(struct rtsx_softc *sc, union ccb *ccb);
253 static void     rtsx_cam_request(struct rtsx_softc *sc, union ccb *ccb);
254 #endif /* MMCCAM */
255
256 static int      rtsx_read_ivar(device_t bus, device_t child, int which, uintptr_t *result);
257 static int      rtsx_write_ivar(device_t bus, device_t child, int which, uintptr_t value);
258
259 static int      rtsx_mmcbr_update_ios(device_t bus, device_t child __unused);
260 static int      rtsx_mmcbr_switch_vccq(device_t bus, device_t child __unused);
261 static int      rtsx_mmcbr_tune(device_t bus, device_t child __unused, bool hs400 __unused);
262 static int      rtsx_mmcbr_retune(device_t bus, device_t child __unused, bool reset __unused);
263 static int      rtsx_mmcbr_request(device_t bus, device_t child __unused, struct mmc_request *req);
264 static int      rtsx_mmcbr_get_ro(device_t bus, device_t child __unused);
265 static int      rtsx_mmcbr_acquire_host(device_t bus, device_t child __unused);
266 static int      rtsx_mmcbr_release_host(device_t bus, device_t child __unused);
267
268 static int      rtsx_probe(device_t dev);
269 static int      rtsx_attach(device_t dev);
270 static int      rtsx_detach(device_t dev);
271 static int      rtsx_shutdown(device_t dev);
272 static int      rtsx_suspend(device_t dev);
273 static int      rtsx_resume(device_t dev);
274
275 #define RTSX_LOCK_INIT(_sc)     mtx_init(&(_sc)->rtsx_mtx,      \
276                                          device_get_nameunit(sc->rtsx_dev), "rtsx", MTX_DEF)
277 #define RTSX_LOCK(_sc)          mtx_lock(&(_sc)->rtsx_mtx)
278 #define RTSX_UNLOCK(_sc)        mtx_unlock(&(_sc)->rtsx_mtx)
279 #define RTSX_LOCK_DESTROY(_sc)  mtx_destroy(&(_sc)->rtsx_mtx)
280
281 #define RTSX_SDCLK_OFF                  0
282 #define RTSX_SDCLK_250KHZ          250000
283 #define RTSX_SDCLK_400KHZ          400000
284 #define RTSX_SDCLK_25MHZ         25000000
285 #define RTSX_SDCLK_50MHZ         50000000
286 #define RTSX_SDCLK_100MHZ       100000000
287 #define RTSX_SDCLK_208MHZ       208000000
288
289 #define RTSX_MIN_DIV_N          80
290 #define RTSX_MAX_DIV_N          208
291
292 #define RTSX_MAX_DATA_BLKLEN    512
293
294 #define RTSX_DMA_ALIGN          4
295 #define RTSX_HOSTCMD_MAX        256
296 #define RTSX_DMA_CMD_BIFSIZE    (sizeof(uint32_t) * RTSX_HOSTCMD_MAX)
297 #define RTSX_DMA_DATA_BUFSIZE   MAXPHYS
298
299 #define ISSET(t, f) ((t) & (f))
300
301 #define READ4(sc, reg)                                          \
302         (bus_space_read_4((sc)->rtsx_btag, (sc)->rtsx_bhandle, (reg)))
303 #define WRITE4(sc, reg, val)                                    \
304         (bus_space_write_4((sc)->rtsx_btag, (sc)->rtsx_bhandle, (reg), (val)))
305
306 #define RTSX_READ(sc, reg, val)                                 \
307         do {                                                    \
308                 int err = rtsx_read((sc), (reg), (val));        \
309                 if (err)                                        \
310                         return (err);                           \
311         } while (0)
312
313 #define RTSX_WRITE(sc, reg, val)                                \
314         do {                                                    \
315                 int err = rtsx_write((sc), (reg), 0xff, (val)); \
316                 if (err)                                        \
317                         return (err);                           \
318         } while (0)
319 #define RTSX_CLR(sc, reg, bits)                                 \
320         do {                                                    \
321                 int err = rtsx_write((sc), (reg), (bits), 0);   \
322                 if (err)                                        \
323                         return (err);                           \
324         } while (0)
325
326 #define RTSX_SET(sc, reg, bits)                                 \
327         do {                                                    \
328                 int err = rtsx_write((sc), (reg), (bits), 0xff);\
329                 if (err)                                        \
330                         return (err);                           \
331         } while (0)
332
333 #define RTSX_BITOP(sc, reg, mask, bits)                         \
334         do {                                                    \
335                 int err = rtsx_write((sc), (reg), (mask), (bits));      \
336                 if (err)                                        \
337                         return (err);                           \
338         } while (0)
339
340 /*
341  * We use two DMA buffers: a command buffer and a data buffer.
342  *
343  * The command buffer contains a command queue for the host controller,
344  * which describes SD/MMC commands to run, and other parameters. The chip
345  * runs the command queue when a special bit in the RTSX_HCBAR register is
346  * set and signals completion with the RTSX_TRANS_OK_INT interrupt.
347  * Each command is encoded as a 4 byte sequence containing command number
348  * (read, write, or check a host controller register), a register address,
349  * and a data bit-mask and value.
350  * SD/MMC commands which do not transfer any data from/to the card only use
351  * the command buffer.
352  *
353  * The data buffer is used for transfer longer than 512. Data transfer is
354  * controlled via the RTSX_HDBAR register and completion is signalled by
355  * the RTSX_TRANS_OK_INT interrupt.
356  *
357  * The chip is unable to perform DMA above 4GB.
358  */
359
360 /*
361  * Main commands in the usual seqence used:
362  *
363  * CMD0         Go idle state
364  * CMD8         Send interface condition
365  * CMD55        Application Command for next ACMD
366  * ACMD41       Send Operation Conditions Register (OCR: voltage profile of the card)
367  * CMD2         Send Card Identification (CID) Register
368  * CMD3         Send relative address
369  * CMD9         Send Card Specific Data (CSD)
370  * CMD13        Send status (32 bits -  bit 25: card password protected)
371  * CMD7         Select card (before Get card SCR)
372  * ACMD51       Send SCR (SD CARD Configuration Register - [51:48]: Bus widths supported)
373  * CMD6         SD switch function
374  * ACMD13       Send SD status (512 bits)
375  * ACMD42       Set/Clear card detect
376  * ACMD6        Set bus width
377  * CMD19        Send tuning block
378  * CMD12        Stop transmission
379  *
380  * CMD17        Read single block (<=512)
381  * CMD18        Read multiple blocks (>512)
382  * CMD24        Write single block (<=512)
383  * CMD25        Write multiple blocks (>512)
384  *
385  * CMD52        IO R/W direct
386  * CMD5         Send Operation Conditions
387  */
388
389 static int
390 rtsx_dma_alloc(struct rtsx_softc *sc)
391 {
392         int     error = 0;
393
394         error = bus_dma_tag_create(bus_get_dma_tag(sc->rtsx_dev), /* inherit from parent */
395             RTSX_DMA_ALIGN, 0,          /* alignment, boundary */
396             BUS_SPACE_MAXADDR_32BIT,    /* lowaddr */
397             BUS_SPACE_MAXADDR,          /* highaddr */
398             NULL, NULL,                 /* filter, filterarg */
399             RTSX_DMA_CMD_BIFSIZE, 1,    /* maxsize, nsegments */
400             RTSX_DMA_CMD_BIFSIZE,       /* maxsegsize */
401             0,                          /* flags */
402             NULL, NULL,                 /* lockfunc, lockarg */
403             &sc->rtsx_cmd_dma_tag);
404         if (error) {
405                 device_printf(sc->rtsx_dev,
406                               "Can't create cmd parent DMA tag\n");
407                 return (error);
408         }
409         error = bus_dmamem_alloc(sc->rtsx_cmd_dma_tag,          /* DMA tag */
410             &sc->rtsx_cmd_dmamem,                               /* will hold the KVA pointer */
411             BUS_DMA_COHERENT | BUS_DMA_WAITOK | BUS_DMA_ZERO,   /* flags */
412             &sc->rtsx_cmd_dmamap);                              /* DMA map */
413         if (error) {
414                 device_printf(sc->rtsx_dev,
415                               "Can't create DMA map for command transfer\n");
416                 goto destroy_cmd_dma_tag;
417
418         }
419         error = bus_dmamap_load(sc->rtsx_cmd_dma_tag,   /* DMA tag */
420             sc->rtsx_cmd_dmamap,        /* DMA map */
421             sc->rtsx_cmd_dmamem,        /* KVA pointer to be mapped */
422             RTSX_DMA_CMD_BIFSIZE,       /* size of buffer */
423             rtsx_dmamap_cb,             /* callback */
424             &sc->rtsx_cmd_buffer,       /* first arg of callback */
425             0);                         /* flags */
426         if (error || sc->rtsx_cmd_buffer == 0) {
427                 device_printf(sc->rtsx_dev,
428                               "Can't load DMA memory for command transfer\n");
429                 error = (error) ? error : EFAULT;
430                 goto destroy_cmd_dmamem_alloc;
431         }
432
433         error = bus_dma_tag_create(bus_get_dma_tag(sc->rtsx_dev),       /* inherit from parent */
434             RTSX_DMA_DATA_BUFSIZE, 0,   /* alignment, boundary */
435             BUS_SPACE_MAXADDR_32BIT,    /* lowaddr */
436             BUS_SPACE_MAXADDR,          /* highaddr */
437             NULL, NULL,                 /* filter, filterarg */
438             RTSX_DMA_DATA_BUFSIZE, 1,   /* maxsize, nsegments */
439             RTSX_DMA_DATA_BUFSIZE,      /* maxsegsize */
440             0,                          /* flags */
441             NULL, NULL,                 /* lockfunc, lockarg */
442             &sc->rtsx_data_dma_tag);
443         if (error) {
444                 device_printf(sc->rtsx_dev,
445                               "Can't create data parent DMA tag\n");
446                 goto destroy_cmd_dmamap_load;
447         }
448         error = bus_dmamem_alloc(sc->rtsx_data_dma_tag,         /* DMA tag */
449             &sc->rtsx_data_dmamem,                              /* will hold the KVA pointer */
450             BUS_DMA_WAITOK | BUS_DMA_ZERO,                      /* flags */
451             &sc->rtsx_data_dmamap);                             /* DMA map */
452         if (error) {
453                 device_printf(sc->rtsx_dev,
454                               "Can't create DMA map for data transfer\n");
455                 goto destroy_data_dma_tag;
456         }
457         error = bus_dmamap_load(sc->rtsx_data_dma_tag,  /* DMA tag */
458             sc->rtsx_data_dmamap,       /* DMA map */
459             sc->rtsx_data_dmamem,       /* KVA pointer to be mapped */
460             RTSX_DMA_DATA_BUFSIZE,      /* size of buffer */
461             rtsx_dmamap_cb,             /* callback */
462             &sc->rtsx_data_buffer,      /* first arg of callback */
463             0);                         /* flags */
464         if (error || sc->rtsx_data_buffer == 0) {
465                 device_printf(sc->rtsx_dev,
466                               "Can't load DMA memory for data transfer\n");
467                 error = (error) ? error : EFAULT;
468                 goto destroy_data_dmamem_alloc;
469         }
470         return (error);
471
472  destroy_data_dmamem_alloc:
473         bus_dmamem_free(sc->rtsx_data_dma_tag, sc->rtsx_data_dmamem, sc->rtsx_data_dmamap);
474  destroy_data_dma_tag:
475         bus_dma_tag_destroy(sc->rtsx_data_dma_tag);
476  destroy_cmd_dmamap_load:
477         bus_dmamap_unload(sc->rtsx_cmd_dma_tag, sc->rtsx_cmd_dmamap);
478  destroy_cmd_dmamem_alloc:
479         bus_dmamem_free(sc->rtsx_cmd_dma_tag, sc->rtsx_cmd_dmamem, sc->rtsx_cmd_dmamap);
480  destroy_cmd_dma_tag:
481         bus_dma_tag_destroy(sc->rtsx_cmd_dma_tag);
482
483         return (error);
484 }
485
486 static void
487 rtsx_dmamap_cb(void *arg, bus_dma_segment_t *segs, int nsegs, int error)
488 {
489         if (error) {
490                 printf("rtsx_dmamap_cb: error %d\n", error);
491                 return;
492         }
493         *(bus_addr_t *)arg = segs[0].ds_addr;
494 }
495
496 static void
497 rtsx_dma_free(struct rtsx_softc *sc)
498 {
499         if (sc->rtsx_cmd_dma_tag != NULL) {
500                 if (sc->rtsx_cmd_dmamap != NULL)
501                         bus_dmamap_unload(sc->rtsx_cmd_dma_tag,
502                                           sc->rtsx_cmd_dmamap);
503                 if (sc->rtsx_cmd_dmamem != NULL)
504                         bus_dmamem_free(sc->rtsx_cmd_dma_tag,
505                                         sc->rtsx_cmd_dmamem,
506                                         sc->rtsx_cmd_dmamap);
507                 sc->rtsx_cmd_dmamap = NULL;
508                 sc->rtsx_cmd_dmamem = NULL;
509                 sc->rtsx_cmd_buffer = 0;
510                 bus_dma_tag_destroy(sc->rtsx_cmd_dma_tag);
511                 sc->rtsx_cmd_dma_tag = NULL;
512         }
513         if (sc->rtsx_data_dma_tag != NULL) {
514                 if (sc->rtsx_data_dmamap != NULL)
515                         bus_dmamap_unload(sc->rtsx_data_dma_tag,
516                                           sc->rtsx_data_dmamap);
517                 if (sc->rtsx_data_dmamem != NULL)
518                         bus_dmamem_free(sc->rtsx_data_dma_tag,
519                                         sc->rtsx_data_dmamem,
520                                         sc->rtsx_data_dmamap);
521                 sc->rtsx_data_dmamap = NULL;
522                 sc->rtsx_data_dmamem = NULL;
523                 sc->rtsx_data_buffer = 0;
524                 bus_dma_tag_destroy(sc->rtsx_data_dma_tag);
525                 sc->rtsx_data_dma_tag = NULL;
526         }
527 }
528
529 static void
530 rtsx_intr(void *arg)
531 {
532         struct rtsx_softc *sc = arg;
533         uint32_t        enabled;
534         uint32_t        status;
535
536         RTSX_LOCK(sc);
537
538         enabled = sc->rtsx_intr_enabled;
539         status = READ4(sc, RTSX_BIPR);  /* read Bus Interrupt Pending Register */
540         sc->rtsx_intr_status = status;
541
542         if (bootverbose)
543                 device_printf(sc->rtsx_dev, "Interrupt handler - enabled: 0x%08x, status: 0x%08x\n", enabled, status);
544
545         /* Ack interrupts. */
546         WRITE4(sc, RTSX_BIPR, status);
547
548         if (((enabled & status) == 0) || status == 0xffffffff) {
549                 device_printf(sc->rtsx_dev, "Spurious interrupt - enabled: 0x%08x, status: 0x%08x\n", enabled, status);
550                 RTSX_UNLOCK(sc);
551                 return;
552         }
553
554         /* Detect write protect. */
555         if (status & RTSX_SD_WRITE_PROTECT)
556                 sc->rtsx_read_only = 1;
557         else
558                 sc->rtsx_read_only = 0;
559
560         /* Start task to handle SD card status change (from dwmmc.c). */
561         if (status & RTSX_SD_INT) {
562                 device_printf(sc->rtsx_dev, "Interrupt card inserted/removed\n");
563                 rtsx_handle_card_present(sc);
564         }
565
566         if (sc->rtsx_req == NULL) {
567                 RTSX_UNLOCK(sc);
568                 return;
569         }
570
571         if (status & RTSX_TRANS_OK_INT) {
572                 sc->rtsx_req->cmd->error = MMC_ERR_NONE;
573                 if (sc->rtsx_intr_trans_ok != NULL)
574                         sc->rtsx_intr_trans_ok(sc);
575         } else if (status & RTSX_TRANS_FAIL_INT) {
576                 uint8_t stat1;
577                 sc->rtsx_req->cmd->error = MMC_ERR_FAILED;
578                 if (rtsx_read(sc, RTSX_SD_STAT1, &stat1) == 0 &&
579                     (stat1 & RTSX_SD_CRC_ERR)) {
580                         device_printf(sc->rtsx_dev, "CRC error\n");
581                         sc->rtsx_req->cmd->error = MMC_ERR_BADCRC;
582                 }
583                 if (!sc->rtsx_tuning_mode)
584                         device_printf(sc->rtsx_dev, "Transfer fail - status: 0x%08x\n", status);
585                 rtsx_stop_cmd(sc);
586                 if (sc->rtsx_intr_trans_ko != NULL)
587                         sc->rtsx_intr_trans_ko(sc);
588         }
589
590         RTSX_UNLOCK(sc);
591 }
592
593 /*
594  * Function called from the IRQ handler (from dwmmc.c).
595  */
596 static void
597 rtsx_handle_card_present(struct rtsx_softc *sc)
598 {
599         bool    was_present;
600         bool    is_present;
601
602 #ifdef MMCCAM
603         was_present = sc->rtsx_cam_status;
604 #else
605         was_present = sc->rtsx_mmc_dev != NULL;
606 #endif /* MMCCAM */
607         is_present = rtsx_is_card_present(sc);
608         if (is_present)
609                 device_printf(sc->rtsx_dev, "Card present\n");
610         else
611                 device_printf(sc->rtsx_dev, "Card absent\n");
612
613         if (!was_present && is_present) {
614                 /*
615                  * The delay is to debounce the card insert
616                  * (sometimes the card detect pin stabilizes
617                  * before the other pins have made good contact).
618                  */
619                 taskqueue_enqueue_timeout(taskqueue_swi_giant,
620                                           &sc->rtsx_card_insert_task, -hz);
621         } else if (was_present && !is_present) {
622                 taskqueue_enqueue(taskqueue_swi_giant, &sc->rtsx_card_remove_task);
623         }
624 }
625
626 /*
627  * This funtion is called at startup.
628  */
629 static void
630 rtsx_card_task(void *arg, int pending __unused)
631 {
632         struct rtsx_softc *sc = arg;
633
634         RTSX_LOCK(sc);
635
636         if (rtsx_is_card_present(sc)) {
637                 sc->rtsx_flags |= RTSX_F_CARD_PRESENT;
638                 /* Card is present, attach if necessary. */
639 #ifdef MMCCAM
640                 if (sc->rtsx_cam_status == 0) {
641                         union ccb       *ccb;
642                         uint32_t        pathid;
643 #else
644                 if (sc->rtsx_mmc_dev == NULL) {
645 #endif /* MMCCAM */
646                         if (bootverbose)
647                                 device_printf(sc->rtsx_dev, "Card inserted\n");
648
649                         sc->rtsx_read_count = sc->rtsx_write_count = 0;
650 #ifdef MMCCAM
651                         sc->rtsx_cam_status = 1;
652                         pathid = cam_sim_path(sc->rtsx_sim);
653                         ccb = xpt_alloc_ccb_nowait();
654                         if (ccb == NULL) {
655                                 device_printf(sc->rtsx_dev, "Unable to alloc CCB for rescan\n");
656                                 RTSX_UNLOCK(sc);
657                                 return;
658                         }
659                         /*
660                          * We create a rescan request for BUS:0:0, since the card
661                          * will be at lun 0.
662                          */
663                         if (xpt_create_path(&ccb->ccb_h.path, NULL, pathid,
664                                             /* target */ 0, /* lun */ 0) != CAM_REQ_CMP) {
665                                 device_printf(sc->rtsx_dev, "Unable to create path for rescan\n");
666                                 RTSX_UNLOCK(sc);
667                                 xpt_free_ccb(ccb);
668                                 return;
669                         }
670                         RTSX_UNLOCK(sc);
671                         xpt_rescan(ccb);
672 #else
673                         sc->rtsx_mmc_dev = device_add_child(sc->rtsx_dev, "mmc", -1);
674                         RTSX_UNLOCK(sc);
675                         if (sc->rtsx_mmc_dev == NULL) {
676                                 device_printf(sc->rtsx_dev, "Adding MMC bus failed\n");
677                         } else {
678                                 device_set_ivars(sc->rtsx_mmc_dev, sc);
679                                 device_probe_and_attach(sc->rtsx_mmc_dev);
680                         }
681 #endif /* MMCCAM */
682                 } else
683                         RTSX_UNLOCK(sc);
684         } else {
685                 sc->rtsx_flags &= ~RTSX_F_CARD_PRESENT;
686                 /* Card isn't present, detach if necessary. */
687 #ifdef MMCCAM
688                 if (sc->rtsx_cam_status != 0) {
689                         union ccb       *ccb;
690                         uint32_t        pathid;
691 #else
692                 if (sc->rtsx_mmc_dev != NULL) {
693 #endif /* MMCCAM */
694                         if (bootverbose)
695                                 device_printf(sc->rtsx_dev, "Card removed\n");
696
697                         if (sc->rtsx_debug)
698                                 device_printf(sc->rtsx_dev, "Read count: %" PRIu64 ", write count: %" PRIu64 "\n",
699                                               sc->rtsx_read_count, sc->rtsx_write_count);
700 #ifdef MMCCAM
701                         sc->rtsx_cam_status = 0;
702                         pathid = cam_sim_path(sc->rtsx_sim);
703                         ccb = xpt_alloc_ccb_nowait();
704                         if (ccb == NULL) {
705                                 device_printf(sc->rtsx_dev, "Unable to alloc CCB for rescan\n");
706                                 RTSX_UNLOCK(sc);
707                                 return;
708                         }
709                         /*
710                          * We create a rescan request for BUS:0:0, since the card
711                          * will be at lun 0.
712                          */
713                         if (xpt_create_path(&ccb->ccb_h.path, NULL, pathid,
714                                             /* target */ 0, /* lun */ 0) != CAM_REQ_CMP) {
715                                 device_printf(sc->rtsx_dev, "Unable to create path for rescan\n");
716                                 RTSX_UNLOCK(sc);
717                                 xpt_free_ccb(ccb);
718                                 return;
719                         }
720                         RTSX_UNLOCK(sc);
721                         xpt_rescan(ccb);
722 #else
723                         RTSX_UNLOCK(sc);
724                         if (device_delete_child(sc->rtsx_dev, sc->rtsx_mmc_dev))
725                                 device_printf(sc->rtsx_dev, "Detaching MMC bus failed\n");
726                         sc->rtsx_mmc_dev = NULL;
727 #endif /* MMCCAM */
728                 } else
729                         RTSX_UNLOCK(sc);
730         }
731 }
732
733 static bool
734 rtsx_is_card_present(struct rtsx_softc *sc)
735 {
736         uint32_t status;
737
738         status = READ4(sc, RTSX_BIPR);
739         if (sc->rtsx_inversion == 0)
740                 return (status & RTSX_SD_EXIST);
741         else
742                 return !(status & RTSX_SD_EXIST);
743 }
744
745 static int
746 rtsx_init(struct rtsx_softc *sc)
747 {
748         bool    rtsx_init_debug = false;
749         uint8_t version;
750         uint8_t val;
751         int     error;
752
753         sc->rtsx_host.host_ocr = RTSX_SUPPORTED_VOLTAGE;
754         sc->rtsx_host.f_min = RTSX_SDCLK_250KHZ;
755         sc->rtsx_host.f_max = RTSX_SDCLK_208MHZ;
756         sc->rtsx_host.caps = MMC_CAP_4_BIT_DATA | MMC_CAP_HSPEED |
757                 MMC_CAP_UHS_SDR12 | MMC_CAP_UHS_SDR25;
758
759         sc->rtsx_host.caps |= MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR104;
760         if (sc->rtsx_device_id == RTSX_RTS5209)
761                 sc->rtsx_host.caps |= MMC_CAP_8_BIT_DATA;
762         pci_find_cap(sc->rtsx_dev, PCIY_EXPRESS, &(sc->rtsx_pcie_cap));
763
764         /*
765          * Check IC version.
766          */
767         switch (sc->rtsx_device_id) {
768         case RTSX_RTS5229:
769                 /* Read IC version from dummy register. */
770                 RTSX_READ(sc, RTSX_DUMMY_REG, &version);
771                 if ((version & 0x0F) == RTSX_IC_VERSION_C)
772                         sc->rtsx_flags |= RTSX_F_VERSION_C;
773                 break;
774         case RTSX_RTS522A:
775                 /* Read IC version from dummy register. */
776                 RTSX_READ(sc, RTSX_DUMMY_REG, &version);
777                 if ((version & 0x0F) == RTSX_IC_VERSION_A)
778                         sc->rtsx_flags |= RTSX_F_VERSION_A;
779                 break;
780         case RTSX_RTS525A:
781                 /* Read IC version from dummy register. */
782                 RTSX_READ(sc, RTSX_DUMMY_REG, &version);
783                 if ((version & 0x0F) == RTSX_IC_VERSION_A)
784                         sc->rtsx_flags |= RTSX_F_VERSION_A;
785                 break;
786         case RTSX_RTL8411B:
787                 RTSX_READ(sc, RTSX_RTL8411B_PACKAGE, &version);
788                 if (version & RTSX_RTL8411B_QFN48)
789                         sc->rtsx_flags |= RTSX_F_8411B_QFN48;
790                 break;
791         }
792
793         /*
794          * Fetch vendor settings.
795          */
796         /*
797          * Normally OEMs will set vendor setting to the config space
798          * of Realtek card reader in BIOS stage. This statement reads
799          * the setting and configure the internal registers according
800          * to it, to improve card reader's compatibility condition.
801          */
802         sc->rtsx_card_drive_sel = RTSX_CARD_DRIVE_DEFAULT;
803         switch (sc->rtsx_device_id) {
804                 uint32_t reg;
805                 uint32_t reg1;
806                 uint8_t  reg3;
807         case RTSX_RTS5209:
808                 sc->rtsx_card_drive_sel = RTSX_RTS5209_CARD_DRIVE_DEFAULT;
809                 sc->rtsx_sd30_drive_sel_3v3 = RTSX_DRIVER_TYPE_D;
810                 reg = pci_read_config(sc->rtsx_dev, RTSX_PCR_SETTING_REG2, 4);
811                 if (!(reg & 0x80)) {
812                         sc->rtsx_card_drive_sel = (reg >> 8) & 0x3F;
813                         sc->rtsx_sd30_drive_sel_3v3 = reg & 0x07;
814                 } else {
815                         device_printf(sc->rtsx_dev, "pci_read_config() error - reg: 0x%08x\n", reg);
816                 }
817                 if (bootverbose || rtsx_init_debug)
818                         device_printf(sc->rtsx_dev, "card_drive_sel: 0x%02x, sd30_drive_sel_3v3: 0x%02x\n",
819                                       sc->rtsx_card_drive_sel, sc->rtsx_sd30_drive_sel_3v3);
820                 break;
821         case RTSX_RTS5227:
822         case RTSX_RTS522A:
823                 sc->rtsx_sd30_drive_sel_3v3 = RTSX_CFG_DRIVER_TYPE_B;
824                 reg = pci_read_config(sc->rtsx_dev, RTSX_PCR_SETTING_REG1, 4);
825                 if (!(reg & 0x1000000)) {
826                         sc->rtsx_card_drive_sel &= 0x3F;
827                         sc->rtsx_card_drive_sel |= ((reg >> 25) & 0x01) << 6;
828                         reg = pci_read_config(sc->rtsx_dev, RTSX_PCR_SETTING_REG2, 4);
829                         sc->rtsx_sd30_drive_sel_3v3 = (reg >> 5) & 0x03;
830                         if (reg & 0x4000)
831                                 sc->rtsx_flags |= RTSX_F_REVERSE_SOCKET;
832                 } else {
833                         device_printf(sc->rtsx_dev, "pci_read_config() error - reg: 0x%08x\n", reg);
834                 }
835                 if (bootverbose || rtsx_init_debug)
836                         device_printf(sc->rtsx_dev,
837                                       "card_drive_sel: 0x%02x, sd30_drive_sel_3v3: 0x%02x, reverse_socket is %s\n",
838                                       sc->rtsx_card_drive_sel, sc->rtsx_sd30_drive_sel_3v3,
839                                       (sc->rtsx_flags & RTSX_F_REVERSE_SOCKET) ? "true" : "false");
840                 break;
841         case RTSX_RTS5229:
842                 sc->rtsx_sd30_drive_sel_3v3 = RTSX_DRIVER_TYPE_D;
843                 reg = pci_read_config(sc->rtsx_dev, RTSX_PCR_SETTING_REG1, 4);
844                 if (!(reg & 0x1000000)) {
845                         sc->rtsx_card_drive_sel &= 0x3F;
846                         sc->rtsx_card_drive_sel |= ((reg >> 25) & 0x01) << 6;
847                         reg = pci_read_config(sc->rtsx_dev, RTSX_PCR_SETTING_REG2, 4);
848                         sc->rtsx_sd30_drive_sel_3v3 = rtsx_map_sd_drive((reg >> 5) & 0x03);
849                 } else {
850                         device_printf(sc->rtsx_dev, "pci_read_config() error - reg: 0x%08x\n", reg);
851                 }
852                 if (bootverbose || rtsx_init_debug)
853                         device_printf(sc->rtsx_dev, "card_drive_sel: 0x%02x, sd30_drive_sel_3v3: 0x%02x\n",
854                                       sc->rtsx_card_drive_sel, sc->rtsx_sd30_drive_sel_3v3);
855                 break;
856         case RTSX_RTS525A:
857         case RTSX_RTS5249:
858                 sc->rtsx_sd30_drive_sel_3v3 = RTSX_CFG_DRIVER_TYPE_B;
859                 reg = pci_read_config(sc->rtsx_dev, RTSX_PCR_SETTING_REG1, 4);
860                 if ((reg & 0x1000000)) {
861                         sc->rtsx_card_drive_sel &= 0x3F;
862                         sc->rtsx_card_drive_sel |= ((reg >> 25) & 0x01) << 6;
863                         reg = pci_read_config(sc->rtsx_dev, RTSX_PCR_SETTING_REG2, 4);
864                         sc->rtsx_sd30_drive_sel_3v3 = (reg >> 5) & 0x03;
865                         if (reg & 0x4000)
866                                 sc->rtsx_flags |= RTSX_F_REVERSE_SOCKET;
867                 } else {
868                         device_printf(sc->rtsx_dev, "pci_read_config() error - reg: 0x%08x\n", reg);
869                 }
870                 if (bootverbose || rtsx_init_debug)
871                         device_printf(sc->rtsx_dev,
872                                       "card_drive_sel = 0x%02x, sd30_drive_sel_3v3: 0x%02x, reverse_socket is %s\n",
873                                       sc->rtsx_card_drive_sel, sc->rtsx_sd30_drive_sel_3v3,
874                                       (sc->rtsx_flags & RTSX_F_REVERSE_SOCKET) ? "true" : "false");
875                 break;
876         case RTSX_RTL8402:
877         case RTSX_RTL8411:
878                 sc->rtsx_card_drive_sel = RTSX_RTL8411_CARD_DRIVE_DEFAULT;
879                 sc->rtsx_sd30_drive_sel_3v3 = RTSX_DRIVER_TYPE_D;
880                 reg1 = pci_read_config(sc->rtsx_dev, RTSX_PCR_SETTING_REG1, 4);
881                 if (reg1 & 0x1000000) {
882                         sc->rtsx_card_drive_sel &= 0x3F;
883                         sc->rtsx_card_drive_sel |= ((reg1 >> 25) & 0x01) << 6;
884                         reg3 = pci_read_config(sc->rtsx_dev, RTSX_PCR_SETTING_REG3, 1);
885                         sc->rtsx_sd30_drive_sel_3v3 = (reg3 >> 5) & 0x07;
886                 } else {
887                         device_printf(sc->rtsx_dev, "pci_read_config() error - reg1: 0x%08x\n", reg1);
888                 }
889                 if (bootverbose || rtsx_init_debug)
890                         device_printf(sc->rtsx_dev,
891                                       "card_drive_sel: 0x%02x, sd30_drive_sel_3v3: 0x%02x\n",
892                                       sc->rtsx_card_drive_sel, sc->rtsx_sd30_drive_sel_3v3);
893                 break;
894         case RTSX_RTL8411B:
895                 sc->rtsx_card_drive_sel = RTSX_RTL8411_CARD_DRIVE_DEFAULT;
896                 sc->rtsx_sd30_drive_sel_3v3 = RTSX_DRIVER_TYPE_D;
897                 reg = pci_read_config(sc->rtsx_dev, RTSX_PCR_SETTING_REG1, 4);
898                 if (!(reg & 0x1000000)) {
899                         sc->rtsx_sd30_drive_sel_3v3 = rtsx_map_sd_drive(reg & 0x03);
900                 } else {
901                         device_printf(sc->rtsx_dev, "pci_read_config() error - reg: 0x%08x\n", reg);
902                 }
903                 if (bootverbose || rtsx_init_debug)
904                         device_printf(sc->rtsx_dev,
905                                       "card_drive_sel: 0x%02x, sd30_drive_sel_3v3: 0x%02x\n",
906                                       sc->rtsx_card_drive_sel, sc->rtsx_sd30_drive_sel_3v3);
907                 break;
908         }
909
910         if (bootverbose || rtsx_init_debug)
911                 device_printf(sc->rtsx_dev, "rtsx_init() rtsx_flags: 0x%04x\n", sc->rtsx_flags);
912
913         /* Enable interrupts. */
914         sc->rtsx_intr_enabled = RTSX_TRANS_OK_INT_EN | RTSX_TRANS_FAIL_INT_EN | RTSX_SD_INT_EN | RTSX_MS_INT_EN;
915         WRITE4(sc, RTSX_BIER, sc->rtsx_intr_enabled);
916
917         /* Power on SSC clock. */
918         RTSX_CLR(sc, RTSX_FPDCTL, RTSX_SSC_POWER_DOWN);
919         /* Wait SSC power stable. */
920         DELAY(200);
921
922         /* Disable ASPM */
923         val = pci_read_config(sc->rtsx_dev, sc->rtsx_pcie_cap + PCIER_LINK_CTL, 1);
924         pci_write_config(sc->rtsx_dev, sc->rtsx_pcie_cap + PCIER_LINK_CTL, val & 0xfc, 1);
925
926         /*
927          * Optimize phy.
928          */
929         switch (sc->rtsx_device_id) {
930         case RTSX_RTS5209:
931                 /* Some magic numbers from Linux driver. */
932                 if ((error = rtsx_write_phy(sc, 0x00, 0xB966)))
933                         return (error);
934                 break;
935         case RTSX_RTS5227:
936                 RTSX_CLR(sc, RTSX_PM_CTRL3, RTSX_D3_DELINK_MODE_EN);
937
938                 /* Optimize RX sensitivity. */
939                 if ((error = rtsx_write_phy(sc, 0x00, 0xBA42)))
940                         return (error);
941                 break;
942         case RTSX_RTS5229:
943                 /* Optimize RX sensitivity. */
944                 if ((error = rtsx_write_phy(sc, 0x00, 0xBA42)))
945                         return (error);
946                 break;
947         case RTSX_RTS522A:
948                 RTSX_CLR(sc, RTSX_RTS522A_PM_CTRL3, RTSX_D3_DELINK_MODE_EN);
949                 if (sc->rtsx_flags & RTSX_F_VERSION_A) {
950                         if ((error = rtsx_write_phy(sc, RTSX_PHY_RCR2, RTSX_PHY_RCR2_INIT_27S)))
951                                 return (error);
952                 }
953                 if ((error = rtsx_write_phy(sc, RTSX_PHY_RCR1, RTSX_PHY_RCR1_INIT_27S)))
954                         return (error);
955                 if ((error = rtsx_write_phy(sc, RTSX_PHY_FLD0, RTSX_PHY_FLD0_INIT_27S)))
956                         return (error);
957                 if ((error = rtsx_write_phy(sc, RTSX_PHY_FLD3, RTSX_PHY_FLD3_INIT_27S)))
958                         return (error);
959                 if ((error = rtsx_write_phy(sc, RTSX_PHY_FLD4, RTSX_PHY_FLD4_INIT_27S)))
960                         return (error);
961                 break;
962         case RTSX_RTS525A:
963                 if ((error = rtsx_write_phy(sc, RTSX__PHY_FLD0,
964                                             RTSX__PHY_FLD0_CLK_REQ_20C | RTSX__PHY_FLD0_RX_IDLE_EN |
965                                             RTSX__PHY_FLD0_BIT_ERR_RSTN | RTSX__PHY_FLD0_BER_COUNT |
966                                             RTSX__PHY_FLD0_BER_TIMER | RTSX__PHY_FLD0_CHECK_EN)))
967                         return (error);
968                 if ((error = rtsx_write_phy(sc, RTSX__PHY_ANA03,
969                                             RTSX__PHY_ANA03_TIMER_MAX | RTSX__PHY_ANA03_OOBS_DEB_EN |
970                                             RTSX__PHY_CMU_DEBUG_EN)))
971                         return (error);
972                 if (sc->rtsx_flags & RTSX_F_VERSION_A)
973                         if ((error = rtsx_write_phy(sc, RTSX__PHY_REV0,
974                                                     RTSX__PHY_REV0_FILTER_OUT | RTSX__PHY_REV0_CDR_BYPASS_PFD |
975                                                     RTSX__PHY_REV0_CDR_RX_IDLE_BYPASS)))
976                                 return (error);
977                 break;
978         case RTSX_RTS5249:
979                 RTSX_CLR(sc, RTSX_PM_CTRL3, RTSX_D3_DELINK_MODE_EN);
980                 if ((error = rtsx_write_phy(sc, RTSX_PHY_REV,
981                                             RTSX_PHY_REV_RESV | RTSX_PHY_REV_RXIDLE_LATCHED |
982                                             RTSX_PHY_REV_P1_EN | RTSX_PHY_REV_RXIDLE_EN |
983                                             RTSX_PHY_REV_CLKREQ_TX_EN | RTSX_PHY_REV_RX_PWST |
984                                             RTSX_PHY_REV_CLKREQ_DT_1_0 | RTSX_PHY_REV_STOP_CLKRD |
985                                             RTSX_PHY_REV_STOP_CLKWR)))
986                         return (error);
987                 DELAY(10);
988                 if ((error = rtsx_write_phy(sc, RTSX_PHY_BPCR,
989                                             RTSX_PHY_BPCR_IBRXSEL | RTSX_PHY_BPCR_IBTXSEL |
990                                             RTSX_PHY_BPCR_IB_FILTER | RTSX_PHY_BPCR_CMIRROR_EN)))
991                         return (error);
992                 if ((error = rtsx_write_phy(sc, RTSX_PHY_PCR,
993                                             RTSX_PHY_PCR_FORCE_CODE | RTSX_PHY_PCR_OOBS_CALI_50 |
994                                             RTSX_PHY_PCR_OOBS_VCM_08 | RTSX_PHY_PCR_OOBS_SEN_90 |
995                                             RTSX_PHY_PCR_RSSI_EN | RTSX_PHY_PCR_RX10K)))
996                         return (error);
997                 if ((error = rtsx_write_phy(sc, RTSX_PHY_RCR2,
998                                             RTSX_PHY_RCR2_EMPHASE_EN | RTSX_PHY_RCR2_NADJR |
999                                             RTSX_PHY_RCR2_CDR_SR_2 | RTSX_PHY_RCR2_FREQSEL_12 |
1000                                             RTSX_PHY_RCR2_CDR_SC_12P | RTSX_PHY_RCR2_CALIB_LATE)))
1001                         return (error);
1002                 if ((error = rtsx_write_phy(sc, RTSX_PHY_FLD4,
1003                                             RTSX_PHY_FLD4_FLDEN_SEL | RTSX_PHY_FLD4_REQ_REF |
1004                                             RTSX_PHY_FLD4_RXAMP_OFF | RTSX_PHY_FLD4_REQ_ADDA |
1005                                             RTSX_PHY_FLD4_BER_COUNT | RTSX_PHY_FLD4_BER_TIMER |
1006                                             RTSX_PHY_FLD4_BER_CHK_EN)))
1007                         return (error);
1008                 if ((error = rtsx_write_phy(sc, RTSX_PHY_RDR,
1009                                             RTSX_PHY_RDR_RXDSEL_1_9 | RTSX_PHY_SSC_AUTO_PWD)))
1010                         return (error);
1011                 if ((error = rtsx_write_phy(sc, RTSX_PHY_RCR1,
1012                                             RTSX_PHY_RCR1_ADP_TIME_4 | RTSX_PHY_RCR1_VCO_COARSE)))
1013                         return (error);
1014                 if ((error = rtsx_write_phy(sc, RTSX_PHY_FLD3,
1015                                             RTSX_PHY_FLD3_TIMER_4 | RTSX_PHY_FLD3_TIMER_6 |
1016                                             RTSX_PHY_FLD3_RXDELINK)))
1017                         return (error);
1018                 if ((error = rtsx_write_phy(sc, RTSX_PHY_TUNE,
1019                                             RTSX_PHY_TUNE_TUNEREF_1_0 | RTSX_PHY_TUNE_VBGSEL_1252 |
1020                                             RTSX_PHY_TUNE_SDBUS_33 | RTSX_PHY_TUNE_TUNED18 |
1021                                             RTSX_PHY_TUNE_TUNED12 | RTSX_PHY_TUNE_TUNEA12)))
1022                         return (error);
1023                 break;
1024         }
1025
1026         /* Set mcu_cnt to 7 to ensure data can be sampled properly. */
1027         RTSX_BITOP(sc, RTSX_CLK_DIV, 0x07, 0x07);
1028
1029         /* Disable sleep mode. */
1030         RTSX_CLR(sc, RTSX_HOST_SLEEP_STATE,
1031                  RTSX_HOST_ENTER_S1 | RTSX_HOST_ENTER_S3);
1032
1033         /* Disable card clock. */
1034         RTSX_CLR(sc, RTSX_CARD_CLK_EN, RTSX_CARD_CLK_EN_ALL);
1035
1036         /* Reset delink mode. */
1037         RTSX_CLR(sc, RTSX_CHANGE_LINK_STATE,
1038                  RTSX_FORCE_RST_CORE_EN | RTSX_NON_STICKY_RST_N_DBG);
1039
1040         /* Card driving select. */
1041         RTSX_WRITE(sc, RTSX_CARD_DRIVE_SEL, sc->rtsx_card_drive_sel);
1042
1043         /* Enable SSC clock. */
1044         RTSX_WRITE(sc, RTSX_SSC_CTL1, RTSX_SSC_8X_EN | RTSX_SSC_SEL_4M);
1045         RTSX_WRITE(sc, RTSX_SSC_CTL2, 0x12);
1046
1047         /* Disable cd_pwr_save. */
1048         RTSX_BITOP(sc, RTSX_CHANGE_LINK_STATE, 0x16, RTSX_MAC_PHY_RST_N_DBG);
1049
1050         /* Clear Link Ready Interrupt. */
1051         RTSX_BITOP(sc, RTSX_IRQSTAT0, RTSX_LINK_READY_INT, RTSX_LINK_READY_INT);
1052
1053         /* Enlarge the estimation window of PERST# glitch
1054          * to reduce the chance of invalid card interrupt. */
1055         RTSX_WRITE(sc, RTSX_PERST_GLITCH_WIDTH, 0x80);
1056
1057         /* Set RC oscillator to 400K. */
1058         RTSX_CLR(sc, RTSX_RCCTL, RTSX_RCCTL_F_2M);
1059
1060         /* Enable interrupt write-clear (default is read-clear). */
1061         RTSX_CLR(sc, RTSX_NFTS_TX_CTRL, RTSX_INT_READ_CLR);
1062
1063         if (sc->rtsx_device_id == RTSX_RTS525A)
1064                 RTSX_BITOP(sc, RTSX_PM_CLK_FORCE_CTL, 1, 1);
1065
1066         /* OC power down. */
1067         RTSX_BITOP(sc, RTSX_FPDCTL, RTSX_SD_OC_POWER_DOWN, RTSX_SD_OC_POWER_DOWN);
1068
1069         /* Enable clk_request_n to enable clock power management */
1070         pci_write_config(sc->rtsx_dev, sc->rtsx_pcie_cap + PCIER_LINK_CTL + 1, 1, 1);
1071
1072         /* Enter L1 when host tx idle */
1073         pci_write_config(sc->rtsx_dev, 0x70F, 0x5B, 1);
1074
1075         /*
1076          * Specific extra init.
1077          */
1078         switch (sc->rtsx_device_id) {
1079                 uint16_t cap;
1080         case RTSX_RTS5209:
1081                 /* Turn off LED. */
1082                 RTSX_WRITE(sc, RTSX_CARD_GPIO, 0x03);
1083                 /* Reset ASPM state to default value. */
1084                 RTSX_CLR(sc, RTSX_ASPM_FORCE_CTL, RTSX_ASPM_FORCE_MASK);
1085                 /* Force CLKREQ# PIN to drive 0 to request clock. */
1086                 RTSX_BITOP(sc, RTSX_PETXCFG, 0x08, 0x08);
1087                 /* Configure GPIO as output. */
1088                 RTSX_WRITE(sc, RTSX_CARD_GPIO_DIR, 0x03);
1089                 /* Configure driving. */
1090                 RTSX_WRITE(sc, RTSX_SD30_CMD_DRIVE_SEL, sc->rtsx_sd30_drive_sel_3v3);
1091                 break;
1092         case RTSX_RTS5227:
1093                 /* Configure GPIO as output. */
1094                 RTSX_BITOP(sc, RTSX_GPIO_CTL, RTSX_GPIO_LED_ON, RTSX_GPIO_LED_ON);
1095                 /* Reset ASPM state to default value. */
1096                 RTSX_BITOP(sc, RTSX_ASPM_FORCE_CTL, RTSX_ASPM_FORCE_MASK, RTSX_FORCE_ASPM_NO_ASPM);
1097                 /* Switch LDO3318 source from DV33 to 3V3. */
1098                 RTSX_CLR(sc, RTSX_LDO_PWR_SEL, RTSX_LDO_PWR_SEL_DV33);
1099                 RTSX_BITOP(sc, RTSX_LDO_PWR_SEL, RTSX_LDO_PWR_SEL_DV33, RTSX_LDO_PWR_SEL_3V3);
1100                 /* Set default OLT blink period. */
1101                 RTSX_BITOP(sc, RTSX_OLT_LED_CTL, 0x0F, RTSX_OLT_LED_PERIOD);
1102                 /* Configure LTR. */
1103                 cap = pci_read_config(sc->rtsx_dev, sc->rtsx_pcie_cap + PCIER_DEVICE_CTL2, 2);
1104                 if (cap & PCIEM_CTL2_LTR_ENABLE)
1105                         RTSX_WRITE(sc, RTSX_LTR_CTL, 0xa3);
1106                 /* Configure OBFF. */
1107                 RTSX_BITOP(sc, RTSX_OBFF_CFG, RTSX_OBFF_EN_MASK, RTSX_OBFF_ENABLE);
1108                 /* Configure driving. */
1109                 if ((error = rtsx_rts5227_fill_driving(sc)))
1110                         return (error);
1111                 /* Configure force_clock_req. */
1112                 if (sc->rtsx_flags & RTSX_F_REVERSE_SOCKET)
1113                         RTSX_BITOP(sc, RTSX_PETXCFG, 0xB8, 0xB8);
1114                 else
1115                         RTSX_BITOP(sc, RTSX_PETXCFG, 0xB8, 0x88);
1116                 RTSX_CLR(sc, RTSX_PM_CTRL3, RTSX_D3_DELINK_MODE_EN);
1117                 /*!!! Added for reboot after Windows. */
1118                 RTSX_BITOP(sc, RTSX_PM_CTRL3, RTSX_PM_WAKE_EN, RTSX_PM_WAKE_EN);
1119                 break;
1120         case RTSX_RTS5229:
1121                 /* Configure GPIO as output. */
1122                 RTSX_BITOP(sc, RTSX_GPIO_CTL, RTSX_GPIO_LED_ON, RTSX_GPIO_LED_ON);
1123                 /* Reset ASPM state to default value. */
1124                 /*  With this reset: dd if=/dev/random of=/dev/mmcsd0 encounter a timeout. */
1125 //!!!           RTSX_BITOP(sc, RTSX_ASPM_FORCE_CTL, RTSX_ASPM_FORCE_MASK, RTSX_FORCE_ASPM_NO_ASPM);
1126                 /* Force CLKREQ# PIN to drive 0 to request clock. */
1127                 RTSX_BITOP(sc, RTSX_PETXCFG, 0x08, 0x08);
1128                 /* Switch LDO3318 source from DV33 to card_3v3. */
1129                 RTSX_CLR(sc, RTSX_LDO_PWR_SEL, RTSX_LDO_PWR_SEL_DV33);
1130                 RTSX_BITOP(sc, RTSX_LDO_PWR_SEL, RTSX_LDO_PWR_SEL_DV33, RTSX_LDO_PWR_SEL_3V3);
1131                 /* Set default OLT blink period. */
1132                 RTSX_BITOP(sc, RTSX_OLT_LED_CTL, 0x0F, RTSX_OLT_LED_PERIOD);
1133                 /* Configure driving. */
1134                 RTSX_WRITE(sc, RTSX_SD30_CMD_DRIVE_SEL, sc->rtsx_sd30_drive_sel_3v3);
1135                 break;
1136         case RTSX_RTS522A:
1137                 /* Add specific init from RTS5227. */
1138                 /* Configure GPIO as output. */
1139                 RTSX_BITOP(sc, RTSX_GPIO_CTL, RTSX_GPIO_LED_ON, RTSX_GPIO_LED_ON);
1140                 /* Reset ASPM state to default value. */
1141                 RTSX_BITOP(sc, RTSX_ASPM_FORCE_CTL, RTSX_ASPM_FORCE_MASK, RTSX_FORCE_ASPM_NO_ASPM);
1142                 /* Switch LDO3318 source from DV33 to 3V3. */
1143                 RTSX_CLR(sc, RTSX_LDO_PWR_SEL, RTSX_LDO_PWR_SEL_DV33);
1144                 RTSX_BITOP(sc, RTSX_LDO_PWR_SEL, RTSX_LDO_PWR_SEL_DV33, RTSX_LDO_PWR_SEL_3V3);
1145                 /* Set default OLT blink period. */
1146                 RTSX_BITOP(sc, RTSX_OLT_LED_CTL, 0x0F, RTSX_OLT_LED_PERIOD);
1147                 /* Configure LTR. */
1148                 cap = pci_read_config(sc->rtsx_dev, sc->rtsx_pcie_cap + PCIER_DEVICE_CTL2, 2);
1149                 if (cap & PCIEM_CTL2_LTR_ENABLE)
1150                         RTSX_WRITE(sc, RTSX_LTR_CTL, 0xa3);
1151                 /* Configure OBFF. */
1152                 RTSX_BITOP(sc, RTSX_OBFF_CFG, RTSX_OBFF_EN_MASK, RTSX_OBFF_ENABLE);
1153                 /* Configure driving. */
1154                 if ((error = rtsx_rts5227_fill_driving(sc)))
1155                         return (error);
1156                 /* Configure force_clock_req. */
1157                 if (sc->rtsx_flags & RTSX_F_REVERSE_SOCKET)
1158                         RTSX_BITOP(sc, RTSX_PETXCFG, 0xB8, 0xB8);
1159                 else
1160                         RTSX_BITOP(sc, RTSX_PETXCFG, 0xB8, 0x88);
1161                 RTSX_CLR(sc, RTSX_RTS522A_PM_CTRL3,  0x10);
1162
1163                 /* specific for RTS522A. */
1164                 RTSX_BITOP(sc, RTSX_FUNC_FORCE_CTL,
1165                            RTSX_FUNC_FORCE_UPME_XMT_DBG, RTSX_FUNC_FORCE_UPME_XMT_DBG);
1166                 RTSX_BITOP(sc, RTSX_PCLK_CTL, 0x04, 0x04);
1167                 RTSX_BITOP(sc, RTSX_PM_EVENT_DEBUG,
1168                            RTSX_PME_DEBUG_0, RTSX_PME_DEBUG_0);
1169                 RTSX_WRITE(sc, RTSX_PM_CLK_FORCE_CTL, 0x11);
1170                 break;
1171         case RTSX_RTS525A:
1172                 /* Add specific init from RTS5249. */
1173                 /* Rest L1SUB Config. */
1174                 RTSX_CLR(sc, RTSX_L1SUB_CONFIG3, 0xff);
1175                 /* Configure GPIO as output. */
1176                 RTSX_BITOP(sc, RTSX_GPIO_CTL, RTSX_GPIO_LED_ON, RTSX_GPIO_LED_ON);
1177                 /* Reset ASPM state to default value. */
1178                 RTSX_BITOP(sc, RTSX_ASPM_FORCE_CTL, RTSX_ASPM_FORCE_MASK, RTSX_FORCE_ASPM_NO_ASPM);
1179                 /* Switch LDO3318 source from DV33 to 3V3. */
1180                 RTSX_CLR(sc, RTSX_LDO_PWR_SEL, RTSX_LDO_PWR_SEL_DV33);
1181                 RTSX_BITOP(sc, RTSX_LDO_PWR_SEL, RTSX_LDO_PWR_SEL_DV33, RTSX_LDO_PWR_SEL_3V3);
1182                 /* Set default OLT blink period. */
1183                 RTSX_BITOP(sc, RTSX_OLT_LED_CTL, 0x0F, RTSX_OLT_LED_PERIOD);
1184                 /* Configure driving. */
1185                 if ((error = rtsx_rts5249_fill_driving(sc)))
1186                         return (error);
1187                 /* Configure force_clock_req. */
1188                 if (sc->rtsx_flags & RTSX_F_REVERSE_SOCKET)
1189                         RTSX_BITOP(sc, RTSX_PETXCFG, 0xB0, 0xB0);
1190                 else
1191                         RTSX_BITOP(sc, RTSX_PETXCFG, 0xB0, 0x80);
1192
1193                 /* Specifc for RTS525A. */
1194                 RTSX_BITOP(sc, RTSX_PCLK_CTL, RTSX_PCLK_MODE_SEL, RTSX_PCLK_MODE_SEL);
1195                 if (sc->rtsx_flags & RTSX_F_VERSION_A) {
1196                         RTSX_WRITE(sc, RTSX_L1SUB_CONFIG2, RTSX_L1SUB_AUTO_CFG);
1197                         RTSX_BITOP(sc, RTSX_RREF_CFG,
1198                                    RTSX_RREF_VBGSEL_MASK, RTSX_RREF_VBGSEL_1V25);
1199                         RTSX_BITOP(sc, RTSX_LDO_VIO_CFG,
1200                                    RTSX_LDO_VIO_TUNE_MASK, RTSX_LDO_VIO_1V7);
1201                         RTSX_BITOP(sc, RTSX_LDO_DV12S_CFG,
1202                                    RTSX_LDO_D12_TUNE_MASK, RTSX_LDO_D12_TUNE_DF);
1203                         RTSX_BITOP(sc, RTSX_LDO_AV12S_CFG,
1204                                    RTSX_LDO_AV12S_TUNE_MASK, RTSX_LDO_AV12S_TUNE_DF);
1205                         RTSX_BITOP(sc, RTSX_LDO_VCC_CFG0,
1206                                    RTSX_LDO_VCC_LMTVTH_MASK, RTSX_LDO_VCC_LMTVTH_2A);
1207                         RTSX_BITOP(sc, RTSX_OOBS_CONFIG,
1208                                    RTSX_OOBS_AUTOK_DIS | RTSX_OOBS_VAL_MASK, 0x89);
1209                 }
1210                 break;
1211         case RTSX_RTS5249:
1212                 /* Rest L1SUB Config. */
1213                 RTSX_CLR(sc, RTSX_L1SUB_CONFIG3, 0xff);
1214                 /* Configure GPIO as output. */
1215                 RTSX_BITOP(sc, RTSX_GPIO_CTL, RTSX_GPIO_LED_ON, RTSX_GPIO_LED_ON);
1216                 /* Reset ASPM state to default value. */
1217                 RTSX_BITOP(sc, RTSX_ASPM_FORCE_CTL, RTSX_ASPM_FORCE_MASK, RTSX_FORCE_ASPM_NO_ASPM);
1218                 /* Switch LDO3318 source from DV33 to 3V3. */
1219                 RTSX_CLR(sc, RTSX_LDO_PWR_SEL, RTSX_LDO_PWR_SEL_DV33);
1220                 RTSX_BITOP(sc, RTSX_LDO_PWR_SEL, RTSX_LDO_PWR_SEL_DV33, RTSX_LDO_PWR_SEL_3V3);
1221                 /* Set default OLT blink period. */
1222                 RTSX_BITOP(sc, RTSX_OLT_LED_CTL, 0x0F, RTSX_OLT_LED_PERIOD);
1223                 /* Configure driving. */
1224                 if ((error = rtsx_rts5249_fill_driving(sc)))
1225                         return (error);
1226                 /* Configure force_clock_req. */
1227                 if (sc->rtsx_flags & RTSX_F_REVERSE_SOCKET)
1228                         RTSX_BITOP(sc, RTSX_PETXCFG, 0xB0, 0xB0);
1229                 else
1230                         RTSX_BITOP(sc, RTSX_PETXCFG, 0xB0, 0x80);
1231                 break;
1232         case RTSX_RTL8402:
1233         case RTSX_RTL8411:
1234                 RTSX_WRITE(sc, RTSX_SD30_CMD_DRIVE_SEL, sc->rtsx_sd30_drive_sel_3v3);
1235                 RTSX_BITOP(sc, RTSX_CARD_PAD_CTL, RTSX_CD_DISABLE_MASK | RTSX_CD_AUTO_DISABLE,
1236                            RTSX_CD_ENABLE);
1237                 break;
1238         case RTSX_RTL8411B:
1239                 if (sc->rtsx_flags & RTSX_F_8411B_QFN48)
1240                         RTSX_WRITE(sc, RTSX_CARD_PULL_CTL3, 0xf5);
1241                 RTSX_WRITE(sc, RTSX_SD30_CMD_DRIVE_SEL, sc->rtsx_sd30_drive_sel_3v3);
1242                 /* Enable SD interrupt. */
1243                 RTSX_BITOP(sc, RTSX_CARD_PAD_CTL, RTSX_CD_DISABLE_MASK | RTSX_CD_AUTO_DISABLE,
1244                            RTSX_CD_ENABLE);
1245                 /* Clear hw_pfm_en to disable hardware PFM mode. */
1246                 RTSX_BITOP(sc, RTSX_FUNC_FORCE_CTL, 0x06, 0x00);
1247                 break;
1248         }
1249
1250         /*!!! Added for reboot after Windows. */
1251         rtsx_bus_power_off(sc);
1252         rtsx_set_sd_timing(sc, bus_timing_normal);
1253         rtsx_set_sd_clock(sc, 0);
1254         /*!!! Added for reboot after Windows. */
1255
1256         return (0);
1257 }
1258
1259 static int
1260 rtsx_map_sd_drive(int index)
1261 {
1262         uint8_t sd_drive[4] =
1263                 {
1264                  0x01,  /* Type D */
1265                  0x02,  /* Type C */
1266                  0x05,  /* Type A */
1267                  0x03   /* Type B */
1268                 };
1269         return (sd_drive[index]);
1270 }
1271
1272 /* For voltage 3v3. */
1273 static int
1274 rtsx_rts5227_fill_driving(struct rtsx_softc *sc)
1275 {
1276         u_char  driving_3v3[4][3] = {
1277                                      {0x13, 0x13, 0x13},
1278                                      {0x96, 0x96, 0x96},
1279                                      {0x7F, 0x7F, 0x7F},
1280                                      {0x96, 0x96, 0x96},
1281         };
1282         RTSX_WRITE(sc, RTSX_SD30_CLK_DRIVE_SEL, driving_3v3[sc->rtsx_sd30_drive_sel_3v3][0]);
1283         RTSX_WRITE(sc, RTSX_SD30_CMD_DRIVE_SEL, driving_3v3[sc->rtsx_sd30_drive_sel_3v3][1]);
1284         RTSX_WRITE(sc, RTSX_SD30_DAT_DRIVE_SEL, driving_3v3[sc->rtsx_sd30_drive_sel_3v3][2]);
1285
1286         return (0);
1287 }
1288
1289 /* For voltage 3v3. */
1290 static int
1291 rtsx_rts5249_fill_driving(struct rtsx_softc *sc)
1292 {
1293         u_char  driving_3v3[4][3] = {
1294                                      {0x11, 0x11, 0x18},
1295                                      {0x55, 0x55, 0x5C},
1296                                      {0xFF, 0xFF, 0xFF},
1297                                      {0x96, 0x96, 0x96},
1298         };
1299         RTSX_WRITE(sc, RTSX_SD30_CLK_DRIVE_SEL, driving_3v3[sc->rtsx_sd30_drive_sel_3v3][0]);
1300         RTSX_WRITE(sc, RTSX_SD30_CMD_DRIVE_SEL, driving_3v3[sc->rtsx_sd30_drive_sel_3v3][1]);
1301         RTSX_WRITE(sc, RTSX_SD30_DAT_DRIVE_SEL, driving_3v3[sc->rtsx_sd30_drive_sel_3v3][2]);
1302
1303         return (0);
1304 }
1305
1306 static int
1307 rtsx_read(struct rtsx_softc *sc, uint16_t addr, uint8_t *val)
1308 {
1309         int      tries = 1024;
1310         uint32_t reg;
1311
1312         WRITE4(sc, RTSX_HAIMR, RTSX_HAIMR_BUSY |
1313             (uint32_t)((addr & 0x3FFF) << 16));
1314
1315         while (tries--) {
1316                 reg = READ4(sc, RTSX_HAIMR);
1317                 if (!(reg & RTSX_HAIMR_BUSY))
1318                         break;
1319         }
1320         *val = (reg & 0xff);
1321
1322         return ((tries == 0) ? ETIMEDOUT : 0);
1323 }
1324
1325 static int
1326 rtsx_read_cfg(struct rtsx_softc *sc, uint8_t func, uint16_t addr, uint32_t *val)
1327 {
1328         int     tries = 1024;
1329         uint8_t data0, data1, data2, data3, rwctl;
1330
1331         RTSX_WRITE(sc, RTSX_CFGADDR0, addr);
1332         RTSX_WRITE(sc, RTSX_CFGADDR1, addr >> 8);
1333         RTSX_WRITE(sc, RTSX_CFGRWCTL, RTSX_CFG_BUSY | (func & 0x03 << 4));
1334
1335         while (tries--) {
1336                 RTSX_READ(sc, RTSX_CFGRWCTL, &rwctl);
1337                 if (!(rwctl & RTSX_CFG_BUSY))
1338                         break;
1339         }
1340
1341         if (tries == 0)
1342                 return (ETIMEDOUT);
1343
1344         RTSX_READ(sc, RTSX_CFGDATA0, &data0);
1345         RTSX_READ(sc, RTSX_CFGDATA1, &data1);
1346         RTSX_READ(sc, RTSX_CFGDATA2, &data2);
1347         RTSX_READ(sc, RTSX_CFGDATA3, &data3);
1348
1349         *val = (data3 << 24) | (data2 << 16) | (data1 << 8) | data0;
1350
1351         return (0);
1352 }
1353
1354 static int
1355 rtsx_write(struct rtsx_softc *sc, uint16_t addr, uint8_t mask, uint8_t val)
1356 {
1357         int      tries = 1024;
1358         uint32_t reg;
1359
1360         WRITE4(sc, RTSX_HAIMR,
1361             RTSX_HAIMR_BUSY | RTSX_HAIMR_WRITE |
1362             (uint32_t)(((addr & 0x3FFF) << 16) |
1363             (mask << 8) | val));
1364
1365         while (tries--) {
1366                 reg = READ4(sc, RTSX_HAIMR);
1367                 if (!(reg & RTSX_HAIMR_BUSY)) {
1368                         if (val != (reg & 0xff))
1369                                 return (EIO);
1370                         return (0);
1371                 }
1372         }
1373
1374         return (ETIMEDOUT);
1375 }
1376
1377 static int
1378 rtsx_read_phy(struct rtsx_softc *sc, uint8_t addr, uint16_t *val)
1379 {
1380         int     tries = 100000;
1381         uint8_t data0, data1, rwctl;
1382
1383         RTSX_WRITE(sc, RTSX_PHY_ADDR, addr);
1384         RTSX_WRITE(sc, RTSX_PHY_RWCTL, RTSX_PHY_BUSY | RTSX_PHY_READ);
1385
1386         while (tries--) {
1387                 RTSX_READ(sc, RTSX_PHY_RWCTL, &rwctl);
1388                 if (!(rwctl & RTSX_PHY_BUSY))
1389                         break;
1390         }
1391         if (tries == 0)
1392                 return (ETIMEDOUT);
1393
1394         RTSX_READ(sc, RTSX_PHY_DATA0, &data0);
1395         RTSX_READ(sc, RTSX_PHY_DATA1, &data1);
1396         *val = data1 << 8 | data0;
1397
1398         return (0);
1399 }
1400
1401 static int
1402 rtsx_write_phy(struct rtsx_softc *sc, uint8_t addr, uint16_t val)
1403 {
1404         int     tries = 100000;
1405         uint8_t rwctl;
1406
1407         RTSX_WRITE(sc, RTSX_PHY_DATA0, val);
1408         RTSX_WRITE(sc, RTSX_PHY_DATA1, val >> 8);
1409         RTSX_WRITE(sc, RTSX_PHY_ADDR, addr);
1410         RTSX_WRITE(sc, RTSX_PHY_RWCTL, RTSX_PHY_BUSY | RTSX_PHY_WRITE);
1411
1412         while (tries--) {
1413                 RTSX_READ(sc, RTSX_PHY_RWCTL, &rwctl);
1414                 if (!(rwctl & RTSX_PHY_BUSY))
1415                         break;
1416         }
1417
1418         return ((tries == 0) ? ETIMEDOUT : 0);
1419 }
1420
1421 /*
1422  * Notice that the meaning of RTSX_PWR_GATE_CTRL changes between RTS5209 and
1423  * RTS5229. In RTS5209 it is a mask of disabled power gates, while in RTS5229
1424  * it is a mask of *enabled* gates.
1425  */
1426 static int
1427 rtsx_bus_power_off(struct rtsx_softc *sc)
1428 {
1429         if (bootverbose || sc->rtsx_debug)
1430                 device_printf(sc->rtsx_dev, "rtsx_bus_power_off()\n");
1431
1432         /* Disable SD clock. */
1433         RTSX_CLR(sc, RTSX_CARD_CLK_EN, RTSX_SD_CLK_EN);
1434
1435         /* Disable SD output. */
1436         RTSX_CLR(sc, RTSX_CARD_OE, RTSX_SD_OUTPUT_EN);
1437
1438         /* Turn off power. */
1439         switch (sc->rtsx_device_id) {
1440         case RTSX_RTS5209:
1441                 RTSX_BITOP(sc, RTSX_CARD_PWR_CTL, RTSX_SD_PWR_MASK | RTSX_PMOS_STRG_MASK,
1442                            RTSX_SD_PWR_OFF | RTSX_PMOS_STRG_400mA);
1443                 RTSX_SET(sc, RTSX_PWR_GATE_CTRL, RTSX_LDO3318_OFF);
1444                 break;
1445         case RTSX_RTS5227:
1446         case RTSX_RTS5229:
1447         case RTSX_RTS522A:
1448                 RTSX_BITOP(sc, RTSX_CARD_PWR_CTL, RTSX_SD_PWR_MASK | RTSX_PMOS_STRG_MASK,
1449                            RTSX_SD_PWR_OFF | RTSX_PMOS_STRG_400mA);
1450                 RTSX_CLR(sc, RTSX_PWR_GATE_CTRL, RTSX_LDO3318_PWR_MASK);
1451                 break;
1452         case RTSX_RTL8402:
1453         case RTSX_RTL8411:
1454         case RTSX_RTL8411B:
1455                 RTSX_BITOP(sc, RTSX_CARD_PWR_CTL, RTSX_BPP_POWER_MASK,
1456                            RTSX_BPP_POWER_OFF);
1457                 RTSX_BITOP(sc, RTSX_LDO_CTL, RTSX_BPP_LDO_POWB,
1458                            RTSX_BPP_LDO_SUSPEND);
1459                 break;
1460         default:
1461                 RTSX_CLR(sc, RTSX_PWR_GATE_CTRL, RTSX_LDO3318_PWR_MASK);
1462                 RTSX_SET(sc, RTSX_CARD_PWR_CTL, RTSX_SD_PWR_OFF);
1463                 RTSX_CLR(sc, RTSX_CARD_PWR_CTL, RTSX_PMOS_STRG_800mA);
1464                 break;
1465         }
1466
1467         /* Disable pull control. */
1468         switch (sc->rtsx_device_id) {
1469         case RTSX_RTS5209:
1470                 RTSX_WRITE(sc, RTSX_CARD_PULL_CTL1, RTSX_PULL_CTL_DISABLE12);
1471                 RTSX_WRITE(sc, RTSX_CARD_PULL_CTL2, RTSX_PULL_CTL_DISABLE12);
1472                 RTSX_WRITE(sc, RTSX_CARD_PULL_CTL3, RTSX_PULL_CTL_DISABLE3);
1473                 break;
1474         case RTSX_RTS5227:
1475         case RTSX_RTS522A:
1476                 RTSX_WRITE(sc, RTSX_CARD_PULL_CTL2, RTSX_PULL_CTL_DISABLE12);
1477                 RTSX_WRITE(sc, RTSX_CARD_PULL_CTL3, RTSX_PULL_CTL_DISABLE3);
1478                 break;
1479         case RTSX_RTS5229:
1480                 RTSX_WRITE(sc, RTSX_CARD_PULL_CTL2, RTSX_PULL_CTL_DISABLE12);
1481                 if (sc->rtsx_flags & RTSX_F_VERSION_C)
1482                         RTSX_WRITE(sc, RTSX_CARD_PULL_CTL3, RTSX_PULL_CTL_DISABLE3_TYPE_C);
1483                 else
1484                         RTSX_WRITE(sc, RTSX_CARD_PULL_CTL3, RTSX_PULL_CTL_DISABLE3);
1485                 break;
1486         case RTSX_RTS525A:
1487         case RTSX_RTS5249:
1488                 RTSX_WRITE(sc, RTSX_CARD_PULL_CTL1, 0x66);
1489                 RTSX_WRITE(sc, RTSX_CARD_PULL_CTL2, RTSX_PULL_CTL_DISABLE12);
1490                 RTSX_WRITE(sc, RTSX_CARD_PULL_CTL3, RTSX_PULL_CTL_DISABLE3);
1491                 RTSX_WRITE(sc, RTSX_CARD_PULL_CTL4, 0x55);
1492                 break;
1493         case RTSX_RTL8402:
1494         case RTSX_RTL8411:
1495                 RTSX_WRITE(sc, RTSX_CARD_PULL_CTL1, 0x65);
1496                 RTSX_WRITE(sc, RTSX_CARD_PULL_CTL2, 0x55);
1497                 RTSX_WRITE(sc, RTSX_CARD_PULL_CTL3, 0x95);
1498                 RTSX_WRITE(sc, RTSX_CARD_PULL_CTL4, 0x09);
1499                 RTSX_WRITE(sc, RTSX_CARD_PULL_CTL5, 0x05);
1500                 RTSX_WRITE(sc, RTSX_CARD_PULL_CTL6, 0x04);
1501                 break;
1502         case RTSX_RTL8411B:
1503                 if (sc->rtsx_flags & RTSX_F_8411B_QFN48) {
1504                         RTSX_WRITE(sc, RTSX_CARD_PULL_CTL2, 0x55);
1505                         RTSX_WRITE(sc, RTSX_CARD_PULL_CTL3, 0xf5);
1506                         RTSX_WRITE(sc, RTSX_CARD_PULL_CTL6, 0x15);
1507                 } else {
1508                         RTSX_WRITE(sc, RTSX_CARD_PULL_CTL1, 0x65);
1509                         RTSX_WRITE(sc, RTSX_CARD_PULL_CTL2, 0x55);
1510                         RTSX_WRITE(sc, RTSX_CARD_PULL_CTL3, 0xd5);
1511                         RTSX_WRITE(sc, RTSX_CARD_PULL_CTL4, 0x59);
1512                         RTSX_WRITE(sc, RTSX_CARD_PULL_CTL5, 0x55);
1513                         RTSX_WRITE(sc, RTSX_CARD_PULL_CTL6, 0x15);
1514                 }
1515                 break;
1516         }
1517
1518         return (0);
1519 }
1520
1521 static int
1522 rtsx_bus_power_on(struct rtsx_softc *sc)
1523 {
1524         if (bootverbose || sc->rtsx_debug)
1525                 device_printf(sc->rtsx_dev, "rtsx_bus_power_on()\n");
1526
1527         /* Select SD card. */
1528         RTSX_BITOP(sc, RTSX_CARD_SELECT, 0x07, RTSX_SD_MOD_SEL);
1529         RTSX_BITOP(sc, RTSX_CARD_SHARE_MODE, RTSX_CARD_SHARE_MASK, RTSX_CARD_SHARE_48_SD);
1530
1531         /* Enable SD clock. */
1532         RTSX_BITOP(sc, RTSX_CARD_CLK_EN, RTSX_SD_CLK_EN,  RTSX_SD_CLK_EN);
1533
1534         /* Enable pull control. */
1535         switch (sc->rtsx_device_id) {
1536         case RTSX_RTS5209:
1537                 RTSX_WRITE(sc, RTSX_CARD_PULL_CTL1, RTSX_PULL_CTL_ENABLE12);
1538                 RTSX_WRITE(sc, RTSX_CARD_PULL_CTL2, RTSX_PULL_CTL_ENABLE12);
1539                 RTSX_WRITE(sc, RTSX_CARD_PULL_CTL3, RTSX_PULL_CTL_ENABLE3);
1540                 break;
1541         case RTSX_RTS5227:
1542         case RTSX_RTS522A:
1543                 RTSX_WRITE(sc, RTSX_CARD_PULL_CTL2, RTSX_PULL_CTL_ENABLE12);
1544                 RTSX_WRITE(sc, RTSX_CARD_PULL_CTL3, RTSX_PULL_CTL_ENABLE3);
1545                 break;
1546         case RTSX_RTS5229:
1547                 RTSX_WRITE(sc, RTSX_CARD_PULL_CTL2, RTSX_PULL_CTL_ENABLE12);
1548                 if (sc->rtsx_flags & RTSX_F_VERSION_C)
1549                         RTSX_WRITE(sc, RTSX_CARD_PULL_CTL3, RTSX_PULL_CTL_ENABLE3_TYPE_C);
1550                 else
1551                         RTSX_WRITE(sc, RTSX_CARD_PULL_CTL3, RTSX_PULL_CTL_ENABLE3);
1552                 break;
1553         case RTSX_RTS525A:
1554         case RTSX_RTS5249:
1555                 RTSX_WRITE(sc, RTSX_CARD_PULL_CTL1, 0x66);
1556                 RTSX_WRITE(sc, RTSX_CARD_PULL_CTL2, RTSX_PULL_CTL_ENABLE12);
1557                 RTSX_WRITE(sc, RTSX_CARD_PULL_CTL3, RTSX_PULL_CTL_ENABLE3);
1558                 RTSX_WRITE(sc, RTSX_CARD_PULL_CTL4, 0xaa);
1559                 break;
1560         case RTSX_RTL8402:
1561         case RTSX_RTL8411:
1562                 RTSX_WRITE(sc, RTSX_CARD_PULL_CTL1, 0xaa);
1563                 RTSX_WRITE(sc, RTSX_CARD_PULL_CTL2, 0xaa);
1564                 RTSX_WRITE(sc, RTSX_CARD_PULL_CTL3, 0xa9);
1565                 RTSX_WRITE(sc, RTSX_CARD_PULL_CTL4, 0x09);
1566                 RTSX_WRITE(sc, RTSX_CARD_PULL_CTL5, 0x09);
1567                 RTSX_WRITE(sc, RTSX_CARD_PULL_CTL6, 0x04);
1568                 break;
1569         case RTSX_RTL8411B:
1570                 if (sc->rtsx_flags & RTSX_F_8411B_QFN48) {
1571                         RTSX_WRITE(sc, RTSX_CARD_PULL_CTL2, 0xaa);
1572                         RTSX_WRITE(sc, RTSX_CARD_PULL_CTL3, 0xf9);
1573                         RTSX_WRITE(sc, RTSX_CARD_PULL_CTL6, 0x19);
1574                 } else {
1575                         RTSX_WRITE(sc, RTSX_CARD_PULL_CTL1, 0xaa);
1576                         RTSX_WRITE(sc, RTSX_CARD_PULL_CTL2, 0xaa);
1577                         RTSX_WRITE(sc, RTSX_CARD_PULL_CTL3, 0xd9);
1578                         RTSX_WRITE(sc, RTSX_CARD_PULL_CTL4, 0x59);
1579                         RTSX_WRITE(sc, RTSX_CARD_PULL_CTL5, 0x55);
1580                         RTSX_WRITE(sc, RTSX_CARD_PULL_CTL6, 0x15);
1581                 }
1582                 break;
1583         }
1584
1585         /*
1586          * To avoid a current peak, enable card power in two phases
1587          * with a delay in between.
1588          */
1589         switch (sc->rtsx_device_id) {
1590         case RTSX_RTS5209:
1591                 /* Partial power. */
1592                 RTSX_BITOP(sc, RTSX_CARD_PWR_CTL, RTSX_SD_PWR_MASK, RTSX_SD_PARTIAL_PWR_ON);
1593                 RTSX_BITOP(sc, RTSX_PWR_GATE_CTRL, RTSX_LDO3318_PWR_MASK, RTSX_LDO3318_VCC2);
1594
1595                 DELAY(200);
1596
1597                 /* Full power. */
1598                 RTSX_BITOP(sc, RTSX_CARD_PWR_CTL, RTSX_SD_PWR_MASK, RTSX_SD_PWR_ON);
1599                 RTSX_BITOP(sc, RTSX_PWR_GATE_CTRL, RTSX_LDO3318_PWR_MASK, RTSX_LDO3318_ON);
1600                 break;
1601         case RTSX_RTS5227:
1602         case RTSX_RTS522A:
1603                 /* Partial power. */
1604                 RTSX_BITOP(sc, RTSX_CARD_PWR_CTL, RTSX_SD_PWR_MASK, RTSX_SD_PARTIAL_PWR_ON);
1605                 RTSX_BITOP(sc, RTSX_PWR_GATE_CTRL, RTSX_LDO3318_PWR_MASK, RTSX_LDO3318_VCC1);
1606
1607                 DELAY(200);
1608
1609                 /* Full power. */
1610                 RTSX_BITOP(sc, RTSX_CARD_PWR_CTL, RTSX_SD_PWR_MASK, RTSX_SD_PWR_ON);
1611                 RTSX_BITOP(sc, RTSX_PWR_GATE_CTRL, RTSX_LDO3318_PWR_MASK,
1612                            RTSX_LDO3318_VCC1 | RTSX_LDO3318_VCC2);
1613                 RTSX_BITOP(sc, RTSX_CARD_OE, RTSX_SD_OUTPUT_EN, RTSX_SD_OUTPUT_EN);
1614                 RTSX_BITOP(sc, RTSX_CARD_OE, RTSX_MS_OUTPUT_EN, RTSX_MS_OUTPUT_EN);
1615                 break;
1616         case RTSX_RTS5229:
1617                 /* Partial power. */
1618                 RTSX_BITOP(sc, RTSX_CARD_PWR_CTL, RTSX_SD_PWR_MASK, RTSX_SD_PARTIAL_PWR_ON);
1619                 RTSX_BITOP(sc, RTSX_PWR_GATE_CTRL, RTSX_LDO3318_PWR_MASK, RTSX_LDO3318_VCC1);
1620
1621                 DELAY(200);
1622
1623                 /* Full power. */
1624                 RTSX_BITOP(sc, RTSX_CARD_PWR_CTL, RTSX_SD_PWR_MASK, RTSX_SD_PWR_ON);
1625                 RTSX_BITOP(sc, RTSX_PWR_GATE_CTRL, RTSX_LDO3318_PWR_MASK,
1626                            RTSX_LDO3318_VCC1 | RTSX_LDO3318_VCC2);
1627                 break;
1628         case RTSX_RTS525A:
1629                 RTSX_BITOP(sc, RTSX_LDO_VCC_CFG1, RTSX_LDO_VCC_TUNE_MASK, RTSX_LDO_VCC_3V3);
1630         case RTSX_RTS5249:
1631                 /* Partial power. */
1632                 RTSX_BITOP(sc, RTSX_CARD_PWR_CTL, RTSX_SD_PWR_MASK, RTSX_SD_PARTIAL_PWR_ON);
1633                 RTSX_BITOP(sc, RTSX_PWR_GATE_CTRL, RTSX_LDO3318_PWR_MASK, RTSX_LDO3318_VCC1);
1634
1635                 DELAY(200);
1636
1637                 /* Full power. */
1638                 RTSX_BITOP(sc, RTSX_CARD_PWR_CTL, RTSX_SD_PWR_MASK, RTSX_SD_PWR_ON);
1639                 RTSX_BITOP(sc, RTSX_PWR_GATE_CTRL, RTSX_LDO3318_PWR_MASK,
1640                            RTSX_LDO3318_VCC1 | RTSX_LDO3318_VCC2);
1641                 break;
1642         case RTSX_RTL8402:
1643         case RTSX_RTL8411:
1644         case RTSX_RTL8411B:
1645                 RTSX_BITOP(sc, RTSX_CARD_PWR_CTL, RTSX_BPP_POWER_MASK,
1646                            RTSX_BPP_POWER_5_PERCENT_ON);
1647                 RTSX_BITOP(sc, RTSX_LDO_CTL, RTSX_BPP_LDO_POWB,
1648                            RTSX_BPP_LDO_SUSPEND);
1649                 DELAY(150);
1650                 RTSX_BITOP(sc, RTSX_CARD_PWR_CTL, RTSX_BPP_POWER_MASK,
1651                            RTSX_BPP_POWER_10_PERCENT_ON);
1652                 DELAY(150);
1653                 RTSX_BITOP(sc, RTSX_CARD_PWR_CTL, RTSX_BPP_POWER_MASK,
1654                            RTSX_BPP_POWER_15_PERCENT_ON);
1655                 DELAY(150);
1656                 RTSX_BITOP(sc, RTSX_CARD_PWR_CTL, RTSX_BPP_POWER_MASK,
1657                            RTSX_BPP_POWER_ON);
1658                 RTSX_BITOP(sc, RTSX_LDO_CTL, RTSX_BPP_LDO_POWB,
1659                            RTSX_BPP_LDO_ON);
1660                 break;
1661         }
1662
1663         /* Enable SD card output. */
1664         RTSX_WRITE(sc, RTSX_CARD_OE, RTSX_SD_OUTPUT_EN);
1665
1666         DELAY(200);
1667
1668         return (0);
1669 }
1670
1671 /*
1672  * Set but width.
1673  */
1674 static int
1675 rtsx_set_bus_width(struct rtsx_softc *sc, enum mmc_bus_width width)
1676 {
1677         uint32_t bus_width;
1678
1679         switch (width) {
1680         case bus_width_1:
1681                 bus_width = RTSX_BUS_WIDTH_1;
1682                 break;
1683         case bus_width_4:
1684                 bus_width = RTSX_BUS_WIDTH_4;
1685                 break;
1686         case bus_width_8:
1687                 bus_width = RTSX_BUS_WIDTH_8;
1688                 break;
1689         default:
1690                 return (MMC_ERR_INVALID);
1691         }
1692         RTSX_BITOP(sc, RTSX_SD_CFG1, RTSX_BUS_WIDTH_MASK, bus_width);
1693
1694         if (bootverbose || sc->rtsx_debug) {
1695                 char *busw[] = {
1696                                 "1 bit",
1697                                 "4 bits",
1698                                 "8 bits"
1699                 };
1700                 device_printf(sc->rtsx_dev, "Setting bus width to %s\n", busw[bus_width]);
1701         }
1702         return (0);
1703 }
1704
1705 static int
1706 rtsx_set_sd_timing(struct rtsx_softc *sc, enum mmc_bus_timing timing)
1707 {
1708         if (timing == bus_timing_hs && sc->rtsx_force_timing) {
1709                 timing = bus_timing_uhs_sdr50;
1710                 sc->rtsx_ios_timing = timing;
1711         }
1712
1713         if (bootverbose || sc->rtsx_debug)
1714                 device_printf(sc->rtsx_dev, "rtsx_set_sd_timing(%u)\n", timing);
1715
1716         switch (timing) {
1717         case bus_timing_uhs_sdr50:
1718         case bus_timing_uhs_sdr104:
1719                 sc->rtsx_double_clk = false;
1720                 sc->rtsx_vpclk = true;
1721                 RTSX_BITOP(sc, RTSX_SD_CFG1, 0x0c | RTSX_SD_ASYNC_FIFO_NOT_RST,
1722                            RTSX_SD30_MODE | RTSX_SD_ASYNC_FIFO_NOT_RST);
1723                 RTSX_BITOP(sc, RTSX_CLK_CTL, RTSX_CLK_LOW_FREQ, RTSX_CLK_LOW_FREQ);
1724                 RTSX_WRITE(sc, RTSX_CARD_CLK_SOURCE,
1725                            RTSX_CRC_VAR_CLK0 | RTSX_SD30_FIX_CLK | RTSX_SAMPLE_VAR_CLK1);
1726                 RTSX_CLR(sc, RTSX_CLK_CTL, RTSX_CLK_LOW_FREQ);
1727                 break;
1728         case bus_timing_hs:
1729                 RTSX_BITOP(sc, RTSX_SD_CFG1, RTSX_SD_MODE_MASK, RTSX_SD20_MODE);
1730                 RTSX_BITOP(sc, RTSX_CLK_CTL, RTSX_CLK_LOW_FREQ, RTSX_CLK_LOW_FREQ);
1731                 RTSX_WRITE(sc, RTSX_CARD_CLK_SOURCE,
1732                            RTSX_CRC_FIX_CLK | RTSX_SD30_VAR_CLK0 | RTSX_SAMPLE_VAR_CLK1);
1733                 RTSX_CLR(sc, RTSX_CLK_CTL, RTSX_CLK_LOW_FREQ);
1734
1735                 RTSX_BITOP(sc, RTSX_SD_PUSH_POINT_CTL,
1736                            RTSX_SD20_TX_SEL_MASK, RTSX_SD20_TX_14_AHEAD);
1737                 RTSX_BITOP(sc, RTSX_SD_SAMPLE_POINT_CTL,
1738                            RTSX_SD20_RX_SEL_MASK, RTSX_SD20_RX_14_DELAY);
1739                 break;
1740         default:
1741                 RTSX_BITOP(sc, RTSX_SD_CFG1, RTSX_SD_MODE_MASK, RTSX_SD20_MODE);
1742                 RTSX_BITOP(sc, RTSX_CLK_CTL, RTSX_CLK_LOW_FREQ, RTSX_CLK_LOW_FREQ);
1743                 RTSX_WRITE(sc, RTSX_CARD_CLK_SOURCE,
1744                            RTSX_CRC_FIX_CLK | RTSX_SD30_VAR_CLK0 | RTSX_SAMPLE_VAR_CLK1);
1745                 RTSX_CLR(sc, RTSX_CLK_CTL, RTSX_CLK_LOW_FREQ);
1746
1747                 RTSX_WRITE(sc, RTSX_SD_PUSH_POINT_CTL, RTSX_SD20_TX_NEG_EDGE);
1748                 RTSX_BITOP(sc, RTSX_SD_SAMPLE_POINT_CTL,
1749                            RTSX_SD20_RX_SEL_MASK, RTSX_SD20_RX_POS_EDGE);
1750                 break;
1751         }
1752
1753         return (0);
1754 }
1755
1756 /*
1757  * Set or change SDCLK frequency or disable the SD clock.
1758  * Return zero on success.
1759  */
1760 static int
1761 rtsx_set_sd_clock(struct rtsx_softc *sc, uint32_t freq)
1762 {
1763         uint8_t clk;
1764         uint8_t clk_divider, n, div, mcu;
1765         int     error = 0;
1766
1767         if (bootverbose || sc->rtsx_debug)
1768                 device_printf(sc->rtsx_dev, "rtsx_set_sd_clock(%u)\n", freq);
1769
1770         if (freq == RTSX_SDCLK_OFF) {
1771                 error = rtsx_stop_sd_clock(sc);
1772                 return error;
1773         }
1774
1775         sc->rtsx_ssc_depth = RTSX_SSC_DEPTH_500K;
1776         sc->rtsx_discovery_mode = (freq <= 1000000) ? true : false;
1777
1778         if (sc->rtsx_discovery_mode) {
1779                 /* We use 250k(around) here, in discovery stage. */
1780                 clk_divider = RTSX_CLK_DIVIDE_128;
1781                 freq = 30000000;
1782         } else {
1783                 clk_divider = RTSX_CLK_DIVIDE_0;
1784         }
1785         RTSX_BITOP(sc, RTSX_SD_CFG1, RTSX_CLK_DIVIDE_MASK, clk_divider);
1786
1787         freq /= 1000000;
1788         if (sc->rtsx_discovery_mode || !sc->rtsx_double_clk)
1789                 clk = freq;
1790         else
1791                 clk = freq * 2;
1792
1793         switch (sc->rtsx_device_id) {
1794         case RTSX_RTL8402:
1795         case RTSX_RTL8411:
1796         case RTSX_RTL8411B:
1797                 n = clk * 4 / 5 - 2;
1798                 break;
1799         default:
1800                 n = clk - 2;
1801                 break;
1802         }
1803         if ((clk <= 2) || (n > RTSX_MAX_DIV_N))
1804                 return (MMC_ERR_INVALID);
1805
1806         mcu = 125 / clk + 3;
1807         if (mcu > 15)
1808                 mcu = 15;
1809
1810         /* Make sure that the SSC clock div_n is not less than RTSX_MIN_DIV_N. */
1811         div = RTSX_CLK_DIV_1;
1812         while ((n < RTSX_MIN_DIV_N) && (div < RTSX_CLK_DIV_8)) {
1813                 switch (sc->rtsx_device_id) {
1814                 case RTSX_RTL8402:
1815                 case RTSX_RTL8411:
1816                 case RTSX_RTL8411B:
1817                         n = (((n + 2) * 5 / 4) * 2) * 4 / 5 - 2;
1818                         break;
1819                 default:
1820                         n = (n + 2) * 2 - 2;
1821                         break;
1822                 }
1823                 div++;
1824         }
1825
1826         if (sc->rtsx_double_clk && sc->rtsx_ssc_depth > 1)
1827                 sc->rtsx_ssc_depth -= 1;
1828
1829         if (div > RTSX_CLK_DIV_1) {
1830                 if (sc->rtsx_ssc_depth > (div - 1))
1831                         sc->rtsx_ssc_depth -= (div - 1);
1832                 else
1833                         sc->rtsx_ssc_depth = RTSX_SSC_DEPTH_4M;
1834         }
1835
1836         /* Enable SD clock. */
1837         error = rtsx_switch_sd_clock(sc, clk, n, div, mcu);
1838
1839         return (error);
1840 }
1841
1842 static int
1843 rtsx_stop_sd_clock(struct rtsx_softc *sc)
1844 {
1845         RTSX_CLR(sc, RTSX_CARD_CLK_EN, RTSX_CARD_CLK_EN_ALL);
1846         RTSX_SET(sc, RTSX_SD_BUS_STAT, RTSX_SD_CLK_FORCE_STOP);
1847
1848         return (0);
1849 }
1850
1851 static int
1852 rtsx_switch_sd_clock(struct rtsx_softc *sc, uint8_t clk, uint8_t n, uint8_t div, uint8_t mcu)
1853 {
1854         if (bootverbose || sc->rtsx_debug) {
1855                 device_printf(sc->rtsx_dev, "rtsx_switch_sd_clock() - discovery-mode is %s, ssc_depth: %d\n",
1856                               (sc->rtsx_discovery_mode) ? "true" : "false", sc->rtsx_ssc_depth);
1857                 device_printf(sc->rtsx_dev, "rtsx_switch_sd_clock() - clk: %d, n: %d, div: %d, mcu: %d\n",
1858                               clk, n, div, mcu);
1859         }
1860
1861         RTSX_BITOP(sc, RTSX_CLK_CTL, RTSX_CLK_LOW_FREQ, RTSX_CLK_LOW_FREQ);
1862         RTSX_WRITE(sc, RTSX_CLK_DIV, (div << 4) | mcu);
1863         RTSX_CLR(sc, RTSX_SSC_CTL1, RTSX_RSTB);
1864         RTSX_BITOP(sc, RTSX_SSC_CTL2, RTSX_SSC_DEPTH_MASK, sc->rtsx_ssc_depth);
1865         RTSX_WRITE(sc, RTSX_SSC_DIV_N_0, n);
1866         RTSX_BITOP(sc, RTSX_SSC_CTL1, RTSX_RSTB, RTSX_RSTB);
1867         if (sc->rtsx_vpclk) {
1868                 RTSX_CLR(sc, RTSX_SD_VPCLK0_CTL, RTSX_PHASE_NOT_RESET);
1869                 RTSX_BITOP(sc, RTSX_SD_VPCLK0_CTL, RTSX_PHASE_NOT_RESET, RTSX_PHASE_NOT_RESET);
1870         }
1871
1872         /* Wait SSC clock stable. */
1873         DELAY(200);
1874
1875         RTSX_CLR(sc, RTSX_CLK_CTL, RTSX_CLK_LOW_FREQ);
1876
1877         return (0);
1878 }
1879
1880 static void
1881 rtsx_sd_change_tx_phase(struct rtsx_softc *sc, uint8_t sample_point)
1882 {
1883         if (bootverbose || sc->rtsx_debug)
1884                 device_printf(sc->rtsx_dev, "rtsx_sd_change_tx_phase() - sample_point: %d\n", sample_point);
1885
1886         rtsx_write(sc, RTSX_CLK_CTL, RTSX_CHANGE_CLK, RTSX_CHANGE_CLK);
1887         rtsx_write(sc, RTSX_SD_VPCLK0_CTL, RTSX_PHASE_SELECT_MASK, sample_point);
1888         rtsx_write(sc, RTSX_SD_VPCLK0_CTL, RTSX_PHASE_NOT_RESET, 0);
1889         rtsx_write(sc, RTSX_SD_VPCLK0_CTL, RTSX_PHASE_NOT_RESET, RTSX_PHASE_NOT_RESET);
1890         rtsx_write(sc, RTSX_CLK_CTL, RTSX_CHANGE_CLK, 0);
1891         rtsx_write(sc, RTSX_SD_CFG1, RTSX_SD_ASYNC_FIFO_NOT_RST, 0);
1892 }
1893
1894 static void
1895 rtsx_sd_change_rx_phase(struct rtsx_softc *sc, uint8_t sample_point)
1896 {
1897         if (bootverbose || sc->rtsx_debug == 2)
1898                 device_printf(sc->rtsx_dev, "rtsx_sd_change_rx_phase() - sample_point: %d\n", sample_point);
1899
1900         rtsx_write(sc, RTSX_CLK_CTL, RTSX_CHANGE_CLK, RTSX_CHANGE_CLK);
1901         rtsx_write(sc, RTSX_SD_VPCLK1_CTL, RTSX_PHASE_SELECT_MASK, sample_point);
1902         rtsx_write(sc, RTSX_SD_VPCLK1_CTL, RTSX_PHASE_NOT_RESET, 0);
1903         rtsx_write(sc, RTSX_SD_VPCLK1_CTL, RTSX_PHASE_NOT_RESET, RTSX_PHASE_NOT_RESET);
1904         rtsx_write(sc, RTSX_CLK_CTL, RTSX_CHANGE_CLK, 0);
1905         rtsx_write(sc, RTSX_SD_CFG1, RTSX_SD_ASYNC_FIFO_NOT_RST, 0);
1906 }
1907
1908 static void
1909 rtsx_sd_tuning_rx_phase(struct rtsx_softc *sc, uint32_t *phase_map)
1910 {
1911         uint32_t raw_phase_map = 0;
1912         int      i;
1913         int      error;
1914
1915         for (i = 0; i < RTSX_RX_PHASE_MAX; i++) {
1916                 error = rtsx_sd_tuning_rx_cmd(sc, (uint8_t)i);
1917                 if (error == 0)
1918                         raw_phase_map |= 1 << i;
1919         }
1920         if (phase_map != NULL)
1921                 *phase_map = raw_phase_map;
1922 }
1923
1924 static int
1925 rtsx_sd_tuning_rx_cmd(struct rtsx_softc *sc, uint8_t sample_point)
1926 {
1927         struct mmc_request req = {};
1928         struct mmc_command cmd = {};
1929         int     error = 0;
1930
1931         cmd.opcode = MMC_SEND_TUNING_BLOCK;
1932         cmd.arg = 0;
1933         req.cmd = &cmd;
1934
1935         RTSX_LOCK(sc);
1936
1937         sc->rtsx_req = &req;
1938
1939         rtsx_sd_change_rx_phase(sc, sample_point);
1940
1941         rtsx_write(sc, RTSX_SD_CFG3, RTSX_SD_RSP_80CLK_TIMEOUT_EN,
1942                    RTSX_SD_RSP_80CLK_TIMEOUT_EN);
1943
1944         rtsx_init_cmd(sc, &cmd);
1945         rtsx_set_cmd_data_len(sc, 1, 0x40);
1946         rtsx_push_cmd(sc, RTSX_WRITE_REG_CMD, RTSX_SD_CFG2, 0xff,
1947                       RTSX_SD_CALCULATE_CRC7 | RTSX_SD_CHECK_CRC16 |
1948                       RTSX_SD_NO_WAIT_BUSY_END | RTSX_SD_CHECK_CRC7 | RTSX_SD_RSP_LEN_6);
1949         rtsx_push_cmd(sc, RTSX_WRITE_REG_CMD, RTSX_SD_TRANSFER,
1950                       0xff, RTSX_TM_AUTO_TUNING | RTSX_SD_TRANSFER_START);
1951         rtsx_push_cmd(sc, RTSX_CHECK_REG_CMD, RTSX_SD_TRANSFER,
1952                       RTSX_SD_TRANSFER_END, RTSX_SD_TRANSFER_END);
1953
1954         /* Set interrupt post processing */
1955         sc->rtsx_intr_trans_ok = rtsx_sd_tuning_rx_cmd_wakeup;
1956         sc->rtsx_intr_trans_ko = rtsx_sd_tuning_rx_cmd_wakeup;
1957
1958         /* Run the command queue. */
1959         rtsx_send_cmd(sc);
1960
1961         error = rtsx_sd_tuning_rx_cmd_wait(sc, &cmd);
1962
1963         if (error) {
1964                 if (bootverbose || sc->rtsx_debug == 2)
1965                         device_printf(sc->rtsx_dev, "rtsx_sd_tuning_rx_cmd() - error: %d\n", error);
1966                 rtsx_sd_wait_data_idle(sc);
1967                 rtsx_clear_error(sc);
1968         }
1969         rtsx_write(sc, RTSX_SD_CFG3, RTSX_SD_RSP_80CLK_TIMEOUT_EN, 0);
1970
1971         sc->rtsx_req = NULL;
1972
1973         RTSX_UNLOCK(sc);
1974
1975         return (error);
1976 }
1977
1978 static int
1979 rtsx_sd_tuning_rx_cmd_wait(struct rtsx_softc *sc, struct mmc_command *cmd)
1980 {
1981         int     status;
1982         int     mask = RTSX_TRANS_OK_INT | RTSX_TRANS_FAIL_INT;
1983
1984         status = sc->rtsx_intr_status & mask;
1985         while (status == 0) {
1986                 if (msleep(&sc->rtsx_intr_status, &sc->rtsx_mtx, 0, "rtsxintr", sc->rtsx_timeout) == EWOULDBLOCK) {
1987                         cmd->error = MMC_ERR_TIMEOUT;
1988                         return (MMC_ERR_TIMEOUT);
1989                 }
1990                 status = sc->rtsx_intr_status & mask;
1991         }
1992         return (cmd->error);
1993 }
1994
1995 static void
1996 rtsx_sd_tuning_rx_cmd_wakeup(struct rtsx_softc *sc)
1997 {
1998         wakeup(&sc->rtsx_intr_status);
1999 }
2000
2001 static void
2002 rtsx_sd_wait_data_idle(struct rtsx_softc *sc)
2003 {
2004         int     i;
2005         uint8_t val;
2006
2007         for (i = 0; i < 100; i++) {
2008                 rtsx_read(sc, RTSX_SD_DATA_STATE, &val);
2009                 if (val & RTSX_SD_DATA_IDLE)
2010                         return;
2011                 DELAY(100);
2012         }
2013 }
2014
2015 static uint8_t
2016 rtsx_sd_search_final_rx_phase(struct rtsx_softc *sc, uint32_t phase_map)
2017 {
2018         int     start = 0, len = 0;
2019         int     start_final = 0, len_final = 0;
2020         uint8_t final_phase = 0xff;
2021
2022         while (start < RTSX_RX_PHASE_MAX) {
2023                 len = rtsx_sd_get_rx_phase_len(phase_map, start);
2024                 if (len_final < len) {
2025                         start_final = start;
2026                         len_final = len;
2027                 }
2028                 start += len ? len : 1;
2029         }
2030
2031         final_phase = (start_final + len_final / 2) % RTSX_RX_PHASE_MAX;
2032
2033         if (bootverbose || sc->rtsx_debug)
2034                 device_printf(sc->rtsx_dev,
2035                               "rtsx_sd_search_final_rx_phase() - phase_map: %x, start_final: %d, len_final: %d, final_phase: %d\n",
2036                               phase_map, start_final, len_final, final_phase);
2037
2038         return final_phase;
2039 }
2040
2041 static int
2042 rtsx_sd_get_rx_phase_len(uint32_t phase_map, int start_bit)
2043 {
2044         int     i;
2045
2046         for (i = 0; i < RTSX_RX_PHASE_MAX; i++) {
2047                 if ((phase_map & (1 << (start_bit + i) % RTSX_RX_PHASE_MAX)) == 0)
2048                         return i;
2049         }
2050         return RTSX_RX_PHASE_MAX;
2051 }
2052
2053 #if 0   /* For led */
2054 static int
2055 rtsx_led_enable(struct rtsx_softc *sc)
2056 {
2057         switch (sc->rtsx_device_id) {
2058         case RTSX_RTS5209:
2059                 RTSX_CLR(sc, RTSX_CARD_GPIO, RTSX_CARD_GPIO_LED_OFF);
2060                 RTSX_WRITE(sc, RTSX_CARD_AUTO_BLINK,
2061                            RTSX_LED_BLINK_EN | RTSX_LED_BLINK_SPEED);
2062                 break;
2063         case RTSX_RTL8411B:
2064                 RTSX_CLR(sc, RTSX_GPIO_CTL, 0x01);
2065                 RTSX_WRITE(sc, RTSX_CARD_AUTO_BLINK,
2066                            RTSX_LED_BLINK_EN | RTSX_LED_BLINK_SPEED);
2067                 break;
2068         default:
2069                 RTSX_SET(sc, RTSX_GPIO_CTL, RTSX_GPIO_LED_ON);
2070                 RTSX_SET(sc, RTSX_OLT_LED_CTL, RTSX_OLT_LED_AUTOBLINK);
2071                 break;
2072         }
2073
2074         return (0);
2075 }
2076
2077 static int
2078 rtsx_led_disable(struct rtsx_softc *sc)
2079 {
2080         switch (sc->rtsx_device_id) {
2081         case RTSX_RTS5209:
2082                 RTSX_CLR(sc, RTSX_CARD_AUTO_BLINK, RTSX_LED_BLINK_EN);
2083                 RTSX_WRITE(sc, RTSX_CARD_GPIO, RTSX_CARD_GPIO_LED_OFF);
2084                 break;
2085         case RTSX_RTL8411B:
2086                 RTSX_CLR(sc, RTSX_CARD_AUTO_BLINK, RTSX_LED_BLINK_EN);
2087                 RTSX_SET(sc, RTSX_GPIO_CTL, 0x01);
2088                 break;
2089         default:
2090                 RTSX_CLR(sc, RTSX_OLT_LED_CTL, RTSX_OLT_LED_AUTOBLINK);
2091                 RTSX_CLR(sc, RTSX_GPIO_CTL, RTSX_GPIO_LED_ON);
2092                 break;
2093         }
2094
2095         return (0);
2096 }
2097 #endif  /* For led */
2098
2099 static uint8_t
2100 rtsx_response_type(uint16_t mmc_rsp)
2101 {
2102         int     i;
2103         struct rsp_type {
2104                 uint16_t mmc_rsp;
2105                 uint8_t  rtsx_rsp;
2106         } rsp_types[] = {
2107                 { MMC_RSP_NONE, RTSX_SD_RSP_TYPE_R0 },
2108                 { MMC_RSP_R1,   RTSX_SD_RSP_TYPE_R1 },
2109                 { MMC_RSP_R1B,  RTSX_SD_RSP_TYPE_R1B },
2110                 { MMC_RSP_R2,   RTSX_SD_RSP_TYPE_R2 },
2111                 { MMC_RSP_R3,   RTSX_SD_RSP_TYPE_R3 },
2112                 { MMC_RSP_R4,   RTSX_SD_RSP_TYPE_R4 },
2113                 { MMC_RSP_R5,   RTSX_SD_RSP_TYPE_R5 },
2114                 { MMC_RSP_R6,   RTSX_SD_RSP_TYPE_R6 },
2115                 { MMC_RSP_R7,   RTSX_SD_RSP_TYPE_R7 }
2116         };
2117
2118         for (i = 0; i < nitems(rsp_types); i++) {
2119                 if (mmc_rsp == rsp_types[i].mmc_rsp)
2120                         return (rsp_types[i].rtsx_rsp);
2121         }
2122
2123         return (0);
2124 }
2125
2126 /*
2127  * Init command buffer with SD command index and argument.
2128  */
2129 static void
2130 rtsx_init_cmd(struct rtsx_softc *sc, struct mmc_command *cmd)
2131 {
2132         sc->rtsx_cmd_index = 0;
2133         rtsx_push_cmd(sc, RTSX_WRITE_REG_CMD, RTSX_SD_CMD0,
2134                       0xff, RTSX_SD_CMD_START  | cmd->opcode);
2135         rtsx_push_cmd(sc, RTSX_WRITE_REG_CMD, RTSX_SD_CMD1,
2136                      0xff, cmd->arg >> 24);
2137         rtsx_push_cmd(sc, RTSX_WRITE_REG_CMD, RTSX_SD_CMD2,
2138                       0xff, cmd->arg >> 16);
2139         rtsx_push_cmd(sc, RTSX_WRITE_REG_CMD, RTSX_SD_CMD3,
2140                      0xff, cmd->arg >> 8);
2141         rtsx_push_cmd(sc, RTSX_WRITE_REG_CMD, RTSX_SD_CMD4,
2142                      0xff, cmd->arg);
2143 }
2144
2145 /*
2146  * Append a properly encoded host command to the host command buffer.
2147  */
2148 static void
2149 rtsx_push_cmd(struct rtsx_softc *sc, uint8_t cmd, uint16_t reg,
2150               uint8_t mask, uint8_t data)
2151 {
2152         KASSERT(sc->rtsx_cmd_index < RTSX_HOSTCMD_MAX,
2153                 ("rtsx: Too many host commands (%d)\n", sc->rtsx_cmd_index));
2154
2155         uint32_t *cmd_buffer = (uint32_t *)(sc->rtsx_cmd_dmamem);
2156         cmd_buffer[sc->rtsx_cmd_index++] =
2157                 htole32((uint32_t)(cmd & 0x3) << 30) |
2158                 ((uint32_t)(reg & 0x3fff) << 16) |
2159                 ((uint32_t)(mask) << 8) |
2160                 ((uint32_t)data);
2161 }
2162
2163 /*
2164  * Queue commands to configure data transfer size.
2165  */
2166 static void
2167 rtsx_set_cmd_data_len(struct rtsx_softc *sc, uint16_t block_cnt, uint16_t byte_cnt)
2168 {
2169         rtsx_push_cmd(sc, RTSX_WRITE_REG_CMD, RTSX_SD_BLOCK_CNT_L,
2170                       0xff, block_cnt & 0xff);
2171         rtsx_push_cmd(sc, RTSX_WRITE_REG_CMD, RTSX_SD_BLOCK_CNT_H,
2172                       0xff, block_cnt >> 8);
2173         rtsx_push_cmd(sc, RTSX_WRITE_REG_CMD, RTSX_SD_BYTE_CNT_L,
2174                       0xff, byte_cnt & 0xff);
2175         rtsx_push_cmd(sc, RTSX_WRITE_REG_CMD, RTSX_SD_BYTE_CNT_H,
2176                       0xff, byte_cnt >> 8);
2177 }
2178
2179 /*
2180  * Run the command queue.
2181  */
2182 static void
2183 rtsx_send_cmd(struct rtsx_softc *sc)
2184 {
2185         if (bootverbose)
2186                 device_printf(sc->rtsx_dev, "rtsx_send_cmd()\n");
2187
2188         sc->rtsx_intr_status = 0;
2189
2190         /* Sync command DMA buffer. */
2191         bus_dmamap_sync(sc->rtsx_cmd_dma_tag, sc->rtsx_cmd_dmamap, BUS_DMASYNC_PREREAD);
2192         bus_dmamap_sync(sc->rtsx_cmd_dma_tag, sc->rtsx_cmd_dmamap, BUS_DMASYNC_PREWRITE);
2193
2194         /* Tell the chip where the command buffer is and run the commands. */
2195         WRITE4(sc, RTSX_HCBAR, (uint32_t)sc->rtsx_cmd_buffer);
2196         WRITE4(sc, RTSX_HCBCTLR,
2197                ((sc->rtsx_cmd_index * 4) & 0x00ffffff) | RTSX_START_CMD | RTSX_HW_AUTO_RSP);
2198 }
2199
2200 /*
2201  * Stop previous command.
2202  */
2203 static void
2204 rtsx_stop_cmd(struct rtsx_softc *sc)
2205 {
2206         /* Stop command transfer. */
2207         WRITE4(sc, RTSX_HCBCTLR, RTSX_STOP_CMD);
2208
2209         /* Stop DMA transfer. */
2210         WRITE4(sc, RTSX_HDBCTLR, RTSX_STOP_DMA);
2211
2212         rtsx_write(sc, RTSX_DMACTL, RTSX_DMA_RST, RTSX_DMA_RST);
2213
2214         rtsx_write(sc, RTSX_RBCTL, RTSX_RB_FLUSH, RTSX_RB_FLUSH);
2215 }
2216
2217 /*
2218  * Clear error.
2219  */
2220 static void
2221 rtsx_clear_error(struct rtsx_softc *sc)
2222 {
2223         /* Clear error. */
2224         rtsx_write(sc, RTSX_CARD_STOP, RTSX_SD_STOP | RTSX_SD_CLR_ERR,
2225                    RTSX_SD_STOP | RTSX_SD_CLR_ERR);
2226 }
2227
2228 /*
2229  * Signal end of request to mmc/mmcsd.
2230  */
2231 static void
2232 rtsx_req_done(struct rtsx_softc *sc)
2233 {
2234 #ifdef MMCCAM
2235         union ccb *ccb;
2236 #endif /* MMCCAM */
2237         struct mmc_request *req;
2238
2239         req = sc->rtsx_req;
2240         if (req->cmd->error == MMC_ERR_NONE) {
2241                 if (req->cmd->opcode == MMC_READ_SINGLE_BLOCK ||
2242                     req->cmd->opcode == MMC_READ_MULTIPLE_BLOCK)
2243                         sc->rtsx_read_count++;
2244                 else if (req->cmd->opcode == MMC_WRITE_BLOCK ||
2245                          req->cmd->opcode == MMC_WRITE_MULTIPLE_BLOCK)
2246                         sc->rtsx_write_count++;
2247         } else {
2248                 rtsx_clear_error(sc);
2249         }
2250         callout_stop(&sc->rtsx_timeout_callout);
2251         sc->rtsx_req = NULL;
2252 #ifdef MMCCAM
2253         ccb = sc->rtsx_ccb;
2254         sc->rtsx_ccb = NULL;
2255         ccb->ccb_h.status = (req->cmd->error == 0 ? CAM_REQ_CMP : CAM_REQ_CMP_ERR);
2256         xpt_done(ccb);
2257 #else
2258         req->done(req);
2259 #endif /* MMCCAM */
2260 }
2261
2262 /*
2263  * Send request.
2264  */
2265 static int
2266 rtsx_send_req(struct rtsx_softc *sc, struct mmc_command *cmd)
2267 {
2268         uint8_t  rsp_type;
2269         uint16_t reg;
2270
2271         if (bootverbose)
2272                 device_printf(sc->rtsx_dev, "rtsx_send_req() - CMD%d\n", cmd->opcode);
2273
2274         /* Convert response type. */
2275         rsp_type = rtsx_response_type(cmd->flags & MMC_RSP_MASK);
2276         if (rsp_type == 0) {
2277                 device_printf(sc->rtsx_dev, "Unknown rsp_type: 0x%lx\n", (cmd->flags & MMC_RSP_MASK));
2278                 cmd->error = MMC_ERR_INVALID;
2279                 return (MMC_ERR_INVALID);
2280         }
2281
2282         rtsx_init_cmd(sc, cmd);
2283
2284         /* Queue command to set response type. */
2285         rtsx_push_cmd(sc, RTSX_WRITE_REG_CMD, RTSX_SD_CFG2, 0xff, rsp_type);
2286
2287         /* Use the ping-pong buffer (cmd buffer) for commands which do not transfer data. */
2288         rtsx_push_cmd(sc, RTSX_WRITE_REG_CMD, RTSX_CARD_DATA_SOURCE,
2289                       0x01, RTSX_PINGPONG_BUFFER);
2290
2291         /* Queue commands to perform SD transfer. */
2292         rtsx_push_cmd(sc, RTSX_WRITE_REG_CMD, RTSX_SD_TRANSFER,
2293                       0xff, RTSX_TM_CMD_RSP | RTSX_SD_TRANSFER_START);
2294         rtsx_push_cmd(sc, RTSX_CHECK_REG_CMD, RTSX_SD_TRANSFER,
2295                       RTSX_SD_TRANSFER_END|RTSX_SD_STAT_IDLE,
2296                       RTSX_SD_TRANSFER_END|RTSX_SD_STAT_IDLE);
2297
2298         /* If needed queue commands to read back card status response. */
2299         if (rsp_type == RTSX_SD_RSP_TYPE_R2) {
2300                 /* Read data from ping-pong buffer. */
2301                 for (reg = RTSX_PPBUF_BASE2; reg < RTSX_PPBUF_BASE2 + 16; reg++)
2302                         rtsx_push_cmd(sc, RTSX_READ_REG_CMD, reg, 0, 0);
2303         } else if (rsp_type != RTSX_SD_RSP_TYPE_R0) {
2304                 /* Read data from SD_CMDx registers. */
2305                 for (reg = RTSX_SD_CMD0; reg <= RTSX_SD_CMD4; reg++)
2306                         rtsx_push_cmd(sc, RTSX_READ_REG_CMD, reg, 0, 0);
2307         }
2308         rtsx_push_cmd(sc, RTSX_READ_REG_CMD, RTSX_SD_STAT1, 0, 0);
2309
2310         /* Set transfer OK function. */
2311         if (sc->rtsx_intr_trans_ok == NULL)
2312                 sc->rtsx_intr_trans_ok = rtsx_ret_resp;
2313
2314         /* Run the command queue. */
2315         rtsx_send_cmd(sc);
2316
2317         return (0);
2318 }
2319
2320 /*
2321  * Return response of previous command (case cmd->data == NULL) and complete resquest.
2322  * This Function is called by the interrupt handler via sc->rtsx_intr_trans_ok.
2323  */
2324 static void
2325 rtsx_ret_resp(struct rtsx_softc *sc)
2326 {
2327         struct mmc_command *cmd;
2328
2329         cmd = sc->rtsx_req->cmd;
2330         rtsx_set_resp(sc, cmd);
2331         rtsx_req_done(sc);
2332 }
2333
2334 /*
2335  * Set response of previous command.
2336  */
2337 static void
2338 rtsx_set_resp(struct rtsx_softc *sc, struct mmc_command *cmd)
2339 {
2340         uint8_t  rsp_type;
2341
2342         rsp_type = rtsx_response_type(cmd->flags & MMC_RSP_MASK);
2343
2344         /* Sync command DMA buffer. */
2345         bus_dmamap_sync(sc->rtsx_cmd_dma_tag, sc->rtsx_cmd_dmamap, BUS_DMASYNC_POSTREAD);
2346         bus_dmamap_sync(sc->rtsx_cmd_dma_tag, sc->rtsx_cmd_dmamap, BUS_DMASYNC_POSTWRITE);
2347
2348         /* Copy card response into mmc response buffer. */
2349         if (ISSET(cmd->flags, MMC_RSP_PRESENT)) {
2350                 uint32_t *cmd_buffer = (uint32_t *)(sc->rtsx_cmd_dmamem);
2351
2352                 if (bootverbose) {
2353                         device_printf(sc->rtsx_dev, "cmd_buffer: 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",
2354                                       cmd_buffer[0], cmd_buffer[1], cmd_buffer[2], cmd_buffer[3], cmd_buffer[4]);
2355                 }
2356
2357                 if (rsp_type == RTSX_SD_RSP_TYPE_R2) {
2358                         /* First byte is CHECK_REG_CMD return value, skip it. */
2359                         unsigned char *ptr = (unsigned char *)cmd_buffer + 1;
2360                         int i;
2361
2362                         /*
2363                          * The controller offloads the last byte {CRC-7, end bit 1}
2364                          * of response type R2. Assign dummy CRC, 0, and end bit to this
2365                          * byte (ptr[16], goes into the LSB of resp[3] later).
2366                          */
2367                         ptr[16] = 0x01;
2368                         /* The second byte is the status of response, skip it. */
2369                         for (i = 0; i < 4; i++)
2370                                 cmd->resp[i] = be32dec(ptr + 1 + i * 4);
2371                 } else {
2372                         /*
2373                          * First byte is CHECK_REG_CMD return value, second
2374                          * one is the command op code -- we skip those.
2375                          */
2376                         cmd->resp[0] =
2377                                 ((be32toh(cmd_buffer[0]) & 0x0000ffff) << 16) |
2378                                 ((be32toh(cmd_buffer[1]) & 0xffff0000) >> 16);
2379                 }
2380
2381                 if (bootverbose)
2382                         device_printf(sc->rtsx_dev, "cmd->resp: 0x%08x 0x%08x 0x%08x 0x%08x\n",
2383                                       cmd->resp[0], cmd->resp[1], cmd->resp[2], cmd->resp[3]);
2384         }
2385 }
2386
2387 /*
2388  * Use the ping-pong buffer (cmd buffer) for transfer <= 512 bytes.
2389  */
2390 static int
2391 rtsx_xfer_short(struct rtsx_softc *sc, struct mmc_command *cmd)
2392 {
2393         int     read;
2394
2395         if (cmd->data == NULL || cmd->data->len == 0) {
2396                 cmd->error = MMC_ERR_INVALID;
2397                 return (MMC_ERR_INVALID);
2398         }
2399         cmd->data->xfer_len = (cmd->data->len > RTSX_MAX_DATA_BLKLEN) ?
2400                 RTSX_MAX_DATA_BLKLEN : cmd->data->len;
2401
2402         read = ISSET(cmd->data->flags, MMC_DATA_READ);
2403
2404         if (bootverbose)
2405                 device_printf(sc->rtsx_dev, "rtsx_xfer_short() - %s xfer: %ld bytes with block size %ld\n",
2406                               read ? "Read" : "Write",
2407                               (unsigned long)cmd->data->len, (unsigned long)cmd->data->xfer_len);
2408
2409         if (cmd->data->len > 512) {
2410                 device_printf(sc->rtsx_dev, "rtsx_xfer_short() - length too large: %ld > 512\n",
2411                               (unsigned long)cmd->data->len);
2412                 cmd->error = MMC_ERR_INVALID;
2413                 return (MMC_ERR_INVALID);
2414         }
2415
2416         if (read) {
2417                 if (sc->rtsx_discovery_mode)
2418                         rtsx_write(sc, RTSX_SD_CFG1, RTSX_CLK_DIVIDE_MASK, RTSX_CLK_DIVIDE_0);
2419
2420                 rtsx_init_cmd(sc, cmd);
2421
2422                 /* Queue commands to configure data transfer size. */
2423                 rtsx_set_cmd_data_len(sc, cmd->data->len / cmd->data->xfer_len, cmd->data->xfer_len);
2424
2425                 /* From Linux: rtsx_pci_sdmmc.c sd_read_data(). */
2426                 rtsx_push_cmd(sc, RTSX_WRITE_REG_CMD, RTSX_SD_CFG2, 0xff,
2427                               RTSX_SD_CALCULATE_CRC7 | RTSX_SD_CHECK_CRC16 |
2428                               RTSX_SD_NO_WAIT_BUSY_END | RTSX_SD_CHECK_CRC7 | RTSX_SD_RSP_LEN_6);
2429
2430                 /* Use the ping-pong buffer (cmd buffer). */
2431                 rtsx_push_cmd(sc, RTSX_WRITE_REG_CMD, RTSX_CARD_DATA_SOURCE,
2432                               0x01, RTSX_PINGPONG_BUFFER);
2433
2434                 /* Queue commands to perform SD transfer. */
2435                 rtsx_push_cmd(sc, RTSX_WRITE_REG_CMD, RTSX_SD_TRANSFER,
2436                               0xff, RTSX_TM_NORMAL_READ | RTSX_SD_TRANSFER_START);
2437                 rtsx_push_cmd(sc, RTSX_CHECK_REG_CMD, RTSX_SD_TRANSFER,
2438                               RTSX_SD_TRANSFER_END, RTSX_SD_TRANSFER_END);
2439
2440                 /* Set transfer OK function. */
2441                 sc->rtsx_intr_trans_ok = rtsx_ask_ppbuf_part1;
2442
2443                 /* Run the command queue. */
2444                 rtsx_send_cmd(sc);
2445         } else {
2446                 /* Set transfer OK function. */
2447                 sc->rtsx_intr_trans_ok = rtsx_put_ppbuf_part1;
2448
2449                 /* Run the command queue. */
2450                 rtsx_send_req(sc, cmd);
2451         }
2452
2453         return (0);
2454 }
2455
2456 /*
2457  * Use the ping-pong buffer (cmd buffer) for the transfer - first part <= 256 bytes.
2458  * This Function is called by the interrupt handler via sc->rtsx_intr_trans_ok.
2459  */
2460 static void
2461 rtsx_ask_ppbuf_part1(struct rtsx_softc *sc)
2462 {
2463         struct mmc_command *cmd;
2464         uint16_t reg = RTSX_PPBUF_BASE2;
2465         int      len;
2466         int      i;
2467
2468         cmd = sc->rtsx_req->cmd;
2469         len = (cmd->data->len > RTSX_HOSTCMD_MAX) ? RTSX_HOSTCMD_MAX : cmd->data->len;
2470
2471         sc->rtsx_cmd_index = 0;
2472         for (i = 0; i < len; i++) {
2473                 rtsx_push_cmd(sc, RTSX_READ_REG_CMD, reg++, 0, 0);
2474         }
2475
2476         /* Set transfer OK function. */
2477         sc->rtsx_intr_trans_ok = rtsx_get_ppbuf_part1;
2478
2479         /* Run the command queue. */
2480         rtsx_send_cmd(sc);
2481 }
2482
2483 /*
2484  * Get the data from the ping-pong buffer (cmd buffer) - first part <= 256 bytes.
2485  * This Function is called by the interrupt handler via sc->rtsx_intr_trans_ok.
2486  */
2487 static void
2488 rtsx_get_ppbuf_part1(struct rtsx_softc *sc)
2489 {
2490         struct mmc_command *cmd;
2491         uint8_t  *ptr;
2492         int      len;
2493
2494         cmd = sc->rtsx_req->cmd;
2495         ptr = cmd->data->data;
2496         len = (cmd->data->len > RTSX_HOSTCMD_MAX) ? RTSX_HOSTCMD_MAX : cmd->data->len;
2497
2498         /* Sync command DMA buffer. */
2499         bus_dmamap_sync(sc->rtsx_cmd_dma_tag, sc->rtsx_cmd_dmamap, BUS_DMASYNC_POSTREAD);
2500         bus_dmamap_sync(sc->rtsx_cmd_dma_tag, sc->rtsx_cmd_dmamap, BUS_DMASYNC_POSTWRITE);
2501
2502         memcpy(ptr, sc->rtsx_cmd_dmamem, len);
2503
2504         len = (cmd->data->len > RTSX_HOSTCMD_MAX) ? cmd->data->len - RTSX_HOSTCMD_MAX : 0;
2505
2506         /* Use the ping-pong buffer (cmd buffer) for the transfer - second part > 256 bytes. */
2507         if (len > 0) {
2508                 uint16_t reg = RTSX_PPBUF_BASE2 + RTSX_HOSTCMD_MAX;
2509                 int      i;
2510
2511                 sc->rtsx_cmd_index = 0;
2512                 for (i = 0; i < len; i++) {
2513                         rtsx_push_cmd(sc, RTSX_READ_REG_CMD, reg++, 0, 0);
2514                 }
2515
2516                 /* Set transfer OK function. */
2517                 sc->rtsx_intr_trans_ok = rtsx_get_ppbuf_part2;
2518
2519                 /* Run the command queue. */
2520                 rtsx_send_cmd(sc);
2521         } else {
2522                 if (bootverbose && cmd->opcode == ACMD_SEND_SCR) {
2523                         uint8_t *ptr = cmd->data->data;
2524                         device_printf(sc->rtsx_dev, "SCR: 0x%02x%02x%02x%02x%02x%02x%02x%02x\n",
2525                                       ptr[0], ptr[1], ptr[2], ptr[3],
2526                                       ptr[4], ptr[5], ptr[6], ptr[7]);
2527                 }
2528
2529                 if (sc->rtsx_discovery_mode)
2530                         rtsx_write(sc, RTSX_SD_CFG1, RTSX_CLK_DIVIDE_MASK, RTSX_CLK_DIVIDE_128);
2531
2532                 rtsx_req_done(sc);
2533         }
2534 }
2535
2536 /*
2537  * Get the data from the ping-pong buffer (cmd buffer) - second part > 256 bytes.
2538  * This Function is called by the interrupt handler via sc->rtsx_intr_trans_ok.
2539  */
2540 static void
2541 rtsx_get_ppbuf_part2(struct rtsx_softc *sc)
2542 {
2543         struct mmc_command *cmd;
2544         uint8_t *ptr;
2545         int     len;
2546
2547         cmd = sc->rtsx_req->cmd;
2548         ptr = cmd->data->data;
2549         ptr += RTSX_HOSTCMD_MAX;
2550         len = cmd->data->len - RTSX_HOSTCMD_MAX;
2551
2552         /* Sync command DMA buffer. */
2553         bus_dmamap_sync(sc->rtsx_cmd_dma_tag, sc->rtsx_cmd_dmamap, BUS_DMASYNC_POSTREAD);
2554         bus_dmamap_sync(sc->rtsx_cmd_dma_tag, sc->rtsx_cmd_dmamap, BUS_DMASYNC_POSTWRITE);
2555
2556         memcpy(ptr, sc->rtsx_cmd_dmamem, len);
2557
2558         if (sc->rtsx_discovery_mode)
2559                 rtsx_write(sc, RTSX_SD_CFG1, RTSX_CLK_DIVIDE_MASK, RTSX_CLK_DIVIDE_128);
2560
2561         rtsx_req_done(sc);
2562 }
2563
2564 /*
2565  * Use the ping-pong buffer (cmd buffer) for transfer - first part <= 256 bytes.
2566  * This Function is called by the interrupt handler via sc->rtsx_intr_trans_ok.
2567  */
2568 static void
2569 rtsx_put_ppbuf_part1(struct rtsx_softc *sc)
2570 {
2571         struct mmc_command *cmd;
2572         uint16_t reg = RTSX_PPBUF_BASE2;
2573         uint8_t  *ptr;
2574         int      len;
2575         int      i;
2576
2577         cmd = sc->rtsx_req->cmd;
2578         ptr = cmd->data->data;
2579         len = (cmd->data->len > RTSX_HOSTCMD_MAX) ? RTSX_HOSTCMD_MAX : cmd->data->len;
2580
2581         rtsx_set_resp(sc, cmd);
2582
2583         sc->rtsx_cmd_index = 0;
2584         for (i = 0; i < len; i++) {
2585                 rtsx_push_cmd(sc, RTSX_WRITE_REG_CMD, reg++, 0xff, *ptr);
2586                 ptr++;
2587         }
2588
2589         /* Set transfer OK function. */
2590         if (cmd->data->len > RTSX_HOSTCMD_MAX)
2591                 sc->rtsx_intr_trans_ok = rtsx_put_ppbuf_part2;
2592         else
2593                 sc->rtsx_intr_trans_ok = rtsx_write_ppbuf;
2594
2595         /* Run the command queue. */
2596         rtsx_send_cmd(sc);
2597 }
2598
2599 /*
2600  * Use the ping-pong buffer (cmd buffer) for transfer - second part > 256 bytes.
2601  * This Function is called by the interrupt handler via sc->rtsx_intr_trans_ok.
2602  */
2603 static void
2604 rtsx_put_ppbuf_part2(struct rtsx_softc *sc)
2605 {
2606         struct mmc_command *cmd;
2607         uint16_t reg = RTSX_PPBUF_BASE2 + RTSX_HOSTCMD_MAX;
2608         uint8_t  *ptr;
2609         int      len;
2610         int      i;
2611
2612         cmd = sc->rtsx_req->cmd;
2613         ptr = cmd->data->data;
2614         ptr += RTSX_HOSTCMD_MAX;
2615         len = cmd->data->len - RTSX_HOSTCMD_MAX;
2616
2617         sc->rtsx_cmd_index = 0;
2618         for (i = 0; i < len; i++) {
2619                 rtsx_push_cmd(sc, RTSX_WRITE_REG_CMD, reg++, 0xff, *ptr);
2620                 ptr++;
2621         }
2622
2623         /* Set transfer OK function. */
2624         sc->rtsx_intr_trans_ok = rtsx_write_ppbuf;
2625
2626         /* Run the command queue. */
2627         rtsx_send_cmd(sc);
2628 }
2629
2630 /*
2631  * Write the data previously given via the ping-pong buffer on the card.
2632  * This Function is called by the interrupt handler via sc->rtsx_intr_trans_ok.
2633  */
2634 static void
2635 rtsx_write_ppbuf(struct rtsx_softc *sc)
2636 {
2637         struct mmc_command *cmd;
2638
2639         cmd = sc->rtsx_req->cmd;
2640
2641         sc->rtsx_cmd_index = 0;
2642
2643         /* Queue commands to configure data transfer size. */
2644         rtsx_set_cmd_data_len(sc, cmd->data->len / cmd->data->xfer_len, cmd->data->xfer_len);
2645
2646         /* From Linux: rtsx_pci_sdmmc.c sd_write_data(). */
2647         rtsx_push_cmd(sc, RTSX_WRITE_REG_CMD, RTSX_SD_CFG2, 0xff,
2648                       RTSX_SD_CALCULATE_CRC7 | RTSX_SD_CHECK_CRC16 |
2649                       RTSX_SD_NO_WAIT_BUSY_END | RTSX_SD_CHECK_CRC7 | RTSX_SD_RSP_LEN_0);
2650
2651         rtsx_push_cmd(sc, RTSX_WRITE_REG_CMD, RTSX_SD_TRANSFER, 0xff,
2652                       RTSX_TM_AUTO_WRITE3 | RTSX_SD_TRANSFER_START);
2653         rtsx_push_cmd(sc, RTSX_CHECK_REG_CMD, RTSX_SD_TRANSFER,
2654                       RTSX_SD_TRANSFER_END, RTSX_SD_TRANSFER_END);
2655
2656         /* Set transfer OK function. */
2657         sc->rtsx_intr_trans_ok = rtsx_req_done;
2658
2659         /* Run the command queue. */
2660         rtsx_send_cmd(sc);
2661 }
2662
2663 /*
2664  * Use the data buffer for transfer > 512 bytes.
2665  */
2666 static int
2667 rtsx_xfer(struct rtsx_softc *sc, struct mmc_command *cmd)
2668 {
2669         int     read = ISSET(cmd->data->flags, MMC_DATA_READ);
2670
2671         cmd->data->xfer_len = (cmd->data->len > RTSX_MAX_DATA_BLKLEN) ?
2672                 RTSX_MAX_DATA_BLKLEN : cmd->data->len;
2673
2674         if (bootverbose)
2675                 device_printf(sc->rtsx_dev, "rtsx_xfer() - %s xfer: %ld bytes with block size %ld\n",
2676                               read ? "Read" : "Write",
2677                               (unsigned long)cmd->data->len, (unsigned long)cmd->data->xfer_len);
2678
2679         if (cmd->data->len > RTSX_DMA_DATA_BUFSIZE) {
2680                 device_printf(sc->rtsx_dev, "rtsx_xfer() length too large: %ld > %d\n",
2681                               (unsigned long)cmd->data->len, RTSX_DMA_DATA_BUFSIZE);
2682                 cmd->error = MMC_ERR_INVALID;
2683                 return (MMC_ERR_INVALID);
2684         }
2685
2686         if (!read) {
2687                 /* Set transfer OK function. */
2688                 sc->rtsx_intr_trans_ok = rtsx_xfer_begin;
2689
2690                 /* Run the command queue. */
2691                 rtsx_send_req(sc, cmd);
2692         } else {
2693                 rtsx_xfer_start(sc);
2694         }
2695
2696         return (0);
2697 }
2698
2699 /*
2700  * Get request response and start dma data transfer (write command).
2701  * This Function is called by the interrupt handler via sc->rtsx_intr_trans_ok.
2702  */
2703 static void
2704 rtsx_xfer_begin(struct rtsx_softc *sc)
2705 {
2706         struct mmc_command *cmd;
2707
2708         cmd = sc->rtsx_req->cmd;
2709
2710         if (bootverbose)
2711                 device_printf(sc->rtsx_dev, "rtsx_xfer_begin() - CMD%d\n", cmd->opcode);
2712
2713         rtsx_set_resp(sc, cmd);
2714         rtsx_xfer_start(sc);
2715 }
2716
2717 /*
2718  * Start dma data transfer.
2719  */
2720 static void
2721 rtsx_xfer_start(struct rtsx_softc *sc)
2722 {
2723         struct mmc_command *cmd;
2724         int     read;
2725         uint8_t cfg2;
2726         int     dma_dir;
2727         int     tmode;
2728
2729         cmd = sc->rtsx_req->cmd;
2730         read = ISSET(cmd->data->flags, MMC_DATA_READ);
2731
2732         /* Configure DMA transfer mode parameters. */
2733         if (cmd->opcode == MMC_READ_MULTIPLE_BLOCK)
2734                 cfg2 = RTSX_SD_CHECK_CRC16 | RTSX_SD_NO_WAIT_BUSY_END | RTSX_SD_RSP_LEN_6;
2735         else
2736                 cfg2 = RTSX_SD_CHECK_CRC16 | RTSX_SD_NO_WAIT_BUSY_END | RTSX_SD_RSP_LEN_0;
2737         if (read) {
2738                 dma_dir = RTSX_DMA_DIR_FROM_CARD;
2739                 /*
2740                  * Use transfer mode AUTO_READ1, which assume we not
2741                  * already send the read command and don't need to send
2742                  * CMD 12 manually after read.
2743                  */
2744                 tmode = RTSX_TM_AUTO_READ1;
2745                 cfg2 |= RTSX_SD_CALCULATE_CRC7 | RTSX_SD_CHECK_CRC7;
2746
2747                 rtsx_init_cmd(sc, cmd);
2748         } else {
2749                 dma_dir = RTSX_DMA_DIR_TO_CARD;
2750                 /*
2751                  * Use transfer mode AUTO_WRITE3, wich assumes we've already
2752                  * sent the write command and gotten the response, and will
2753                  * send CMD 12 manually after writing.
2754                  */
2755                 tmode = RTSX_TM_AUTO_WRITE3;
2756                 cfg2 |= RTSX_SD_NO_CALCULATE_CRC7 | RTSX_SD_NO_CHECK_CRC7;
2757
2758                 sc->rtsx_cmd_index = 0;
2759         }
2760
2761         /* Queue commands to configure data transfer size. */
2762         rtsx_set_cmd_data_len(sc, cmd->data->len / cmd->data->xfer_len, cmd->data->xfer_len);
2763
2764         /* Configure DMA controller. */
2765         rtsx_push_cmd(sc, RTSX_WRITE_REG_CMD, RTSX_IRQSTAT0,
2766                      RTSX_DMA_DONE_INT, RTSX_DMA_DONE_INT);
2767         rtsx_push_cmd(sc, RTSX_WRITE_REG_CMD, RTSX_DMATC3,
2768                      0xff, cmd->data->len >> 24);
2769         rtsx_push_cmd(sc, RTSX_WRITE_REG_CMD, RTSX_DMATC2,
2770                      0xff, cmd->data->len >> 16);
2771         rtsx_push_cmd(sc, RTSX_WRITE_REG_CMD, RTSX_DMATC1,
2772                      0xff, cmd->data->len >> 8);
2773         rtsx_push_cmd(sc, RTSX_WRITE_REG_CMD, RTSX_DMATC0,
2774                      0xff, cmd->data->len);
2775         rtsx_push_cmd(sc, RTSX_WRITE_REG_CMD, RTSX_DMACTL,
2776                      RTSX_DMA_EN | RTSX_DMA_DIR | RTSX_DMA_PACK_SIZE_MASK,
2777                      RTSX_DMA_EN | dma_dir | RTSX_DMA_512);
2778
2779         /* Use the DMA ring buffer for commands which transfer data. */
2780         rtsx_push_cmd(sc, RTSX_WRITE_REG_CMD, RTSX_CARD_DATA_SOURCE,
2781                       0x01, RTSX_RING_BUFFER);
2782
2783         /* Queue command to set response type. */
2784         rtsx_push_cmd(sc, RTSX_WRITE_REG_CMD, RTSX_SD_CFG2, 0xff, cfg2);
2785
2786         /* Queue commands to perform SD transfer. */
2787         rtsx_push_cmd(sc, RTSX_WRITE_REG_CMD, RTSX_SD_TRANSFER,
2788                       0xff, tmode | RTSX_SD_TRANSFER_START);
2789         rtsx_push_cmd(sc, RTSX_CHECK_REG_CMD, RTSX_SD_TRANSFER,
2790                       RTSX_SD_TRANSFER_END, RTSX_SD_TRANSFER_END);
2791
2792         /* Run the command queue. */
2793         rtsx_send_cmd(sc);
2794
2795         if (!read)
2796                 memcpy(sc->rtsx_data_dmamem, cmd->data->data, cmd->data->len);
2797
2798         /* Sync data DMA buffer. */
2799         bus_dmamap_sync(sc->rtsx_data_dma_tag, sc->rtsx_data_dmamap, BUS_DMASYNC_PREREAD);
2800         bus_dmamap_sync(sc->rtsx_data_dma_tag, sc->rtsx_data_dmamap, BUS_DMASYNC_PREWRITE);
2801
2802         /* Set transfer OK function. */
2803         sc->rtsx_intr_trans_ok = rtsx_xfer_finish;
2804
2805         /* Tell the chip where the data buffer is and run the transfer. */
2806         WRITE4(sc, RTSX_HDBAR, sc->rtsx_data_buffer);
2807         WRITE4(sc, RTSX_HDBCTLR, RTSX_TRIG_DMA | (read ? RTSX_DMA_READ : 0) |
2808                (cmd->data->len & 0x00ffffff));
2809 }
2810
2811 /*
2812  * Finish dma data transfer.
2813  * This Function is called by the interrupt handler via sc->rtsx_intr_trans_ok.
2814  */
2815 static void
2816 rtsx_xfer_finish(struct rtsx_softc *sc)
2817 {
2818         struct mmc_command *cmd;
2819         int     read;
2820
2821         cmd = sc->rtsx_req->cmd;
2822
2823         if (bootverbose)
2824                 device_printf(sc->rtsx_dev, "rtsx_xfer_finish() - CMD%d\n", cmd->opcode);
2825
2826         read = ISSET(cmd->data->flags, MMC_DATA_READ);
2827
2828         /* Sync data DMA buffer. */
2829         bus_dmamap_sync(sc->rtsx_data_dma_tag, sc->rtsx_data_dmamap, BUS_DMASYNC_POSTREAD);
2830         bus_dmamap_sync(sc->rtsx_data_dma_tag, sc->rtsx_data_dmamap, BUS_DMASYNC_POSTWRITE);
2831
2832         if (read) {
2833                 memcpy(cmd->data->data, sc->rtsx_data_dmamem, cmd->data->len);
2834                 rtsx_req_done(sc);
2835         } else {
2836                 /* Send CMD12 after AUTO_WRITE3 (see mmcsd_rw() in mmcsd.c) */
2837                 /* and complete request. */
2838                 sc->rtsx_intr_trans_ok = NULL;
2839                 rtsx_send_req(sc, sc->rtsx_req->stop);
2840         }
2841 }
2842
2843 /*
2844  * Manage request timeout.
2845  */
2846 static void
2847 rtsx_timeout(void *arg)
2848 {
2849         struct rtsx_softc *sc;
2850
2851         sc = (struct rtsx_softc *)arg;
2852         if (sc->rtsx_req != NULL) {
2853                 device_printf(sc->rtsx_dev, "Controller timeout for CMD%u\n",
2854                               sc->rtsx_req->cmd->opcode);
2855                 sc->rtsx_req->cmd->error = MMC_ERR_TIMEOUT;
2856                 rtsx_stop_cmd(sc);
2857                 rtsx_req_done(sc);
2858         } else {
2859                 device_printf(sc->rtsx_dev, "Controller timeout!\n");
2860         }
2861 }
2862
2863 #ifdef MMCCAM
2864 static void
2865 rtsx_cam_action(struct cam_sim *sim, union ccb *ccb)
2866 {
2867         struct rtsx_softc *sc;
2868
2869         sc = cam_sim_softc(sim);
2870         if (sc == NULL) {
2871                 ccb->ccb_h.status = CAM_SEL_TIMEOUT;
2872                 xpt_done(ccb);
2873                 return;
2874         }
2875         switch (ccb->ccb_h.func_code) {
2876         case XPT_PATH_INQ:
2877         {
2878                 struct ccb_pathinq *cpi = &ccb->cpi;
2879
2880                 cpi->version_num = 1;           /* SIM driver version number - now all drivers use 1 */
2881                 cpi->hba_inquiry = 0;           /* bitmask of features supported by the controller */
2882                 cpi->target_sprt = 0;           /* flags for target mode support */
2883                 cpi->hba_misc = PIM_NOBUSRESET | PIM_SEQSCAN;
2884                 cpi->hba_eng_cnt = 0;           /* HBA engine count - always set to 0 */
2885                 cpi->max_target = 0;            /* maximal supported target ID */
2886                 cpi->max_lun = 0;               /* maximal supported LUN ID */
2887                 cpi->initiator_id = 1;          /* the SCSI ID of the controller itself */
2888                 cpi->maxio = RTSX_DMA_DATA_BUFSIZE;                     /* maximum io size */
2889                 strncpy(cpi->sim_vid, "FreeBSD", SIM_IDLEN);            /* vendor ID of the SIM */
2890                 strncpy(cpi->hba_vid, "Realtek", HBA_IDLEN);            /* vendor ID of the HBA */
2891                 strncpy(cpi->dev_name, cam_sim_name(sim), DEV_IDLEN);   /* device name for SIM */
2892                 cpi->unit_number = cam_sim_unit(sim);                   /* controller unit number */
2893                 cpi->bus_id = cam_sim_bus(sim); /* bus number */
2894                 cpi->protocol = PROTO_MMCSD;
2895                 cpi->protocol_version = SCSI_REV_0;
2896                 cpi->transport = XPORT_MMCSD;
2897                 cpi->transport_version = 1;
2898
2899                 cpi->ccb_h.status = CAM_REQ_CMP;
2900                 break;
2901         }
2902         case XPT_GET_TRAN_SETTINGS:
2903         {
2904                 struct ccb_trans_settings *cts = &ccb->cts;
2905
2906                 if (bootverbose || sc->rtsx_debug)
2907                         device_printf(sc->rtsx_dev, "rtsx_cam_action() - got XPT_GET_TRAN_SETTINGS\n");
2908
2909                 cts->protocol = PROTO_MMCSD;
2910                 cts->protocol_version = 1;
2911                 cts->transport = XPORT_MMCSD;
2912                 cts->transport_version = 1;
2913                 cts->xport_specific.valid = 0;
2914                 cts->proto_specific.mmc.host_ocr = sc->rtsx_host.host_ocr;
2915                 cts->proto_specific.mmc.host_f_min = sc->rtsx_host.f_min;
2916                 cts->proto_specific.mmc.host_f_max = sc->rtsx_host.f_max;
2917                 cts->proto_specific.mmc.host_caps = sc->rtsx_host.caps;
2918 #if  __FreeBSD__ > 12
2919                 cts->proto_specific.mmc.host_max_data = RTSX_DMA_DATA_BUFSIZE / MMC_SECTOR_SIZE;
2920 #endif
2921                 memcpy(&cts->proto_specific.mmc.ios, &sc->rtsx_host.ios, sizeof(struct mmc_ios));
2922
2923                 ccb->ccb_h.status = CAM_REQ_CMP;
2924                 break;
2925         }
2926         case XPT_SET_TRAN_SETTINGS:
2927                 if (bootverbose || sc->rtsx_debug)
2928                         device_printf(sc->rtsx_dev, "rtsx_cam_action() - got XPT_SET_TRAN_SETTINGS\n");
2929
2930                 /* Apply settings and set ccb->ccb_h.status accordingly. */
2931                 rtsx_cam_set_tran_settings(sc, ccb);
2932                 break;
2933         case XPT_RESET_BUS:
2934                 if (bootverbose || sc->rtsx_debug)
2935                         device_printf(sc->rtsx_dev, "got XPT_RESET_BUS, ACK it...\n");
2936
2937                 ccb->ccb_h.status = CAM_REQ_CMP;
2938                 break;
2939         case XPT_MMC_IO:
2940                 /*
2941                  * Here is the HW-dependent part of sending
2942                  * the command to the underlying h/w.
2943                  * At some point in the future an interrupt comes
2944                  * and the request will be marked as completed.
2945                  */
2946                 ccb->ccb_h.status = CAM_REQ_INPROG;
2947
2948                 rtsx_cam_request(sc, ccb);
2949                 return;
2950         default:
2951                 ccb->ccb_h.status = CAM_REQ_INVALID;
2952                 break;
2953         }
2954         xpt_done(ccb);
2955         return;
2956 }
2957
2958 static void
2959 rtsx_cam_poll(struct cam_sim *sim)
2960 {
2961         return;
2962 }
2963
2964 /*
2965  *  Apply settings and set ccb->ccb_h.status accordingly.
2966 */
2967 static void
2968 rtsx_cam_set_tran_settings(struct rtsx_softc *sc, union ccb *ccb)
2969 {
2970         struct mmc_ios *ios;
2971         struct mmc_ios *new_ios;
2972         struct ccb_trans_settings_mmc *cts;
2973
2974         ios = &sc->rtsx_host.ios;
2975         cts = &ccb->cts.proto_specific.mmc;
2976         new_ios = &cts->ios;
2977
2978         /* Update only requested fields */
2979         if (cts->ios_valid & MMC_CLK) {
2980                 ios->clock = new_ios->clock;
2981                 sc->rtsx_ios_clock = -1;        /* To be updated by rtsx_mmcbr_update_ios(). */
2982                 if (bootverbose || sc->rtsx_debug)
2983                         device_printf(sc->rtsx_dev, "rtsx_cam_set_tran_settings() - clock: %u\n", ios->clock);
2984         }
2985         if (cts->ios_valid & MMC_VDD) {
2986                 ios->vdd = new_ios->vdd;
2987                 if (bootverbose || sc->rtsx_debug)
2988                         device_printf(sc->rtsx_dev, "rtsx_cam_set_tran_settings() - vdd: %d\n", ios->vdd);
2989         }
2990         if (cts->ios_valid & MMC_CS) {
2991                 ios->chip_select = new_ios->chip_select;
2992                 if (bootverbose || sc->rtsx_debug)
2993                         device_printf(sc->rtsx_dev, "rtsx_cam_set_tran_settings() - chip_select: %d\n", ios->chip_select);
2994         }
2995         if (cts->ios_valid & MMC_BW) {
2996                 ios->bus_width = new_ios->bus_width;
2997                 sc->rtsx_ios_bus_width = -1;    /* To be updated by rtsx_mmcbr_update_ios(). */
2998                 if (bootverbose || sc->rtsx_debug)
2999                         device_printf(sc->rtsx_dev, "rtsx_cam_set_tran_settings() - bus width: %d\n", ios->bus_width);
3000         }
3001         if (cts->ios_valid & MMC_PM) {
3002                 ios->power_mode = new_ios->power_mode;
3003                 sc->rtsx_ios_power_mode = -1;   /* To be updated by rtsx_mmcbr_update_ios(). */
3004                 if (bootverbose || sc->rtsx_debug)
3005                         device_printf(sc->rtsx_dev, "rtsx_cam_set_tran_settings() - power mode: %d\n", ios->power_mode);
3006         }
3007         if (cts->ios_valid & MMC_BT) {
3008                 ios->timing = new_ios->timing;
3009                 sc->rtsx_ios_timing = -1;       /* To be updated by rtsx_mmcbr_update_ios(). */
3010                 if (bootverbose || sc->rtsx_debug)
3011                         device_printf(sc->rtsx_dev, "rtsx_cam_set_tran_settings() - timing: %d\n", ios->timing);
3012         }
3013         if (cts->ios_valid & MMC_BM) {
3014                 ios->bus_mode = new_ios->bus_mode;
3015                 if (bootverbose || sc->rtsx_debug)
3016                         device_printf(sc->rtsx_dev, "rtsx_cam_set_tran_settings() - bus mode: %d\n", ios->bus_mode);
3017         }
3018 #if  __FreeBSD__ > 12
3019         if (cts->ios_valid & MMC_VCCQ) {
3020                 ios->vccq = new_ios->vccq;
3021                 sc->rtsx_ios_vccq = -1;         /* To be updated by rtsx_mmcbr_update_ios(). */
3022                 if (bootverbose || sc->rtsx_debug)
3023                         device_printf(sc->rtsx_dev, "rtsx_cam_set_tran_settings() - vccq: %d\n", ios->vccq);
3024         }
3025 #endif
3026         if (rtsx_mmcbr_update_ios(sc->rtsx_dev, NULL) == 0)
3027                 ccb->ccb_h.status = CAM_REQ_CMP;
3028         else
3029                 ccb->ccb_h.status = CAM_REQ_CMP_ERR;
3030
3031         return;
3032 }
3033
3034 /*
3035  * Build a request and run it.
3036  */
3037 static void
3038 rtsx_cam_request(struct rtsx_softc *sc, union ccb *ccb)
3039 {
3040         RTSX_LOCK(sc);
3041         if (sc->rtsx_ccb != NULL) {
3042                 RTSX_UNLOCK(sc);
3043                 ccb->ccb_h.status = CAM_BUSY;   /* i.e. CAM_REQ_CMP | CAM_REQ_CMP_ERR */ 
3044                 return;
3045         }
3046         sc->rtsx_ccb = ccb;
3047         sc->rtsx_cam_req.cmd = &ccb->mmcio.cmd;
3048         sc->rtsx_cam_req.stop = &ccb->mmcio.stop;
3049         RTSX_UNLOCK(sc);
3050
3051         rtsx_mmcbr_request(sc->rtsx_dev, NULL, &sc->rtsx_cam_req);
3052         return;
3053 }
3054 #endif /* MMCCAM */
3055
3056 static int
3057 rtsx_read_ivar(device_t bus, device_t child, int which, uintptr_t *result)
3058 {
3059         struct rtsx_softc *sc;
3060
3061         sc = device_get_softc(bus);
3062         switch (which) {
3063         case MMCBR_IVAR_BUS_MODE:               /* ivar  0 - 1 = opendrain, 2 = pushpull */
3064                 *result = sc->rtsx_host.ios.bus_mode;
3065                 break;
3066         case MMCBR_IVAR_BUS_WIDTH:              /* ivar  1 - 0 = 1b   2 = 4b, 3 = 8b */
3067                 *result = sc->rtsx_host.ios.bus_width;
3068                 break;
3069         case MMCBR_IVAR_CHIP_SELECT:            /* ivar  2 - O = dontcare, 1 = cs_high, 2 = cs_low */
3070                 *result = sc->rtsx_host.ios.chip_select;
3071                 break;
3072         case MMCBR_IVAR_CLOCK:                  /* ivar  3 - clock in Hz */
3073                 *result = sc->rtsx_host.ios.clock;
3074                 break;
3075         case MMCBR_IVAR_F_MIN:                  /* ivar  4 */
3076                 *result = sc->rtsx_host.f_min;
3077                 break;
3078         case MMCBR_IVAR_F_MAX:                  /* ivar  5 */
3079                 *result = sc->rtsx_host.f_max;
3080                 break;
3081         case MMCBR_IVAR_HOST_OCR:               /* ivar  6 - host operation conditions register */
3082                 *result = sc->rtsx_host.host_ocr;
3083                 break;
3084         case MMCBR_IVAR_MODE:                   /* ivar  7 - 0 = mode_mmc, 1 = mode_sd */
3085                 *result = sc->rtsx_host.mode;
3086                 break;
3087         case MMCBR_IVAR_OCR:                    /* ivar  8 - operation conditions register */
3088                 *result = sc->rtsx_host.ocr;
3089                 break;
3090         case MMCBR_IVAR_POWER_MODE:             /* ivar  9 - 0 = off, 1 = up, 2 = on */
3091                 *result = sc->rtsx_host.ios.power_mode;
3092                 break;
3093         case MMCBR_IVAR_VDD:                    /* ivar 11 - voltage power pin */
3094                 *result = sc->rtsx_host.ios.vdd;
3095                 break;
3096         case MMCBR_IVAR_VCCQ:                   /* ivar 12 - signaling: 0 = 1.20V, 1 = 1.80V, 2 = 3.30V */
3097                 *result = sc->rtsx_host.ios.vccq;
3098                 break;
3099         case MMCBR_IVAR_CAPS:                   /* ivar 13 */
3100                 *result = sc->rtsx_host.caps;
3101                 break;
3102         case MMCBR_IVAR_TIMING:                 /* ivar 14 - 0 = normal, 1 = timing_hs, ... */
3103                 *result = sc->rtsx_host.ios.timing;
3104                 break;
3105         case MMCBR_IVAR_MAX_DATA:               /* ivar 15 */
3106                 *result = RTSX_DMA_DATA_BUFSIZE / MMC_SECTOR_SIZE;
3107                 break;
3108         case MMCBR_IVAR_RETUNE_REQ:             /* ivar 10 */
3109         case MMCBR_IVAR_MAX_BUSY_TIMEOUT:       /* ivar 16 */
3110         default:
3111                 return (EINVAL);
3112         }
3113
3114         if (bootverbose)
3115                 device_printf(bus, "Read ivar #%d, value %#x / #%d\n",
3116                               which, *(int *)result, *(int *)result);
3117
3118         return (0);
3119 }
3120
3121 static int
3122 rtsx_write_ivar(device_t bus, device_t child, int which, uintptr_t value)
3123 {
3124         struct rtsx_softc *sc;
3125
3126         if (bootverbose)
3127                 device_printf(bus, "Write ivar #%d, value %#x / #%d\n",
3128                               which, (int)value, (int)value);
3129
3130         sc = device_get_softc(bus);
3131         switch (which) {
3132         case MMCBR_IVAR_BUS_MODE:               /* ivar  0 - 1 = opendrain, 2 = pushpull */
3133                 sc->rtsx_host.ios.bus_mode = value;
3134                 break;
3135         case MMCBR_IVAR_BUS_WIDTH:              /* ivar  1 - 0 = 1b   2 = 4b, 3 = 8b */
3136                 sc->rtsx_host.ios.bus_width = value;
3137                 sc->rtsx_ios_bus_width = -1;    /* To be updated on next rtsx_mmcbr_update_ios(). */
3138                 break;
3139         case MMCBR_IVAR_CHIP_SELECT:            /* ivar  2 - O = dontcare, 1 = cs_high, 2 = cs_low */
3140                 sc->rtsx_host.ios.chip_select = value;
3141                 break;
3142         case MMCBR_IVAR_CLOCK:                  /* ivar  3 - clock in Hz */
3143                 sc->rtsx_host.ios.clock = value;
3144                 sc->rtsx_ios_clock = -1;        /* To be updated on next rtsx_mmcbr_update_ios(). */
3145                 break;
3146         case MMCBR_IVAR_MODE:                   /* ivar  7 - 0 = mode_mmc, 1 = mode_sd */
3147                 sc->rtsx_host.mode = value;
3148                 break;
3149         case MMCBR_IVAR_OCR:                    /* ivar  8 - operation conditions register */
3150                 sc->rtsx_host.ocr = value;
3151                 break;
3152         case MMCBR_IVAR_POWER_MODE:             /* ivar  9 - 0 = off, 1 = up, 2 = on */
3153                 sc->rtsx_host.ios.power_mode = value;
3154                 sc->rtsx_ios_power_mode = -1;   /* To be updated on next rtsx_mmcbr_update_ios(). */
3155                 break;
3156         case MMCBR_IVAR_VDD:                    /* ivar 11 - voltage power pin */
3157                 sc->rtsx_host.ios.vdd = value;
3158                 break;
3159         case MMCBR_IVAR_VCCQ:                   /* ivar 12 - signaling: 0 = 1.20V, 1 = 1.80V, 2 = 3.30V */
3160                 sc->rtsx_host.ios.vccq = value;
3161                 sc->rtsx_ios_vccq = value;      /* rtsx_mmcbr_switch_vccq() will be called by mmc.c (MMCCAM undef). */
3162                 break;
3163         case MMCBR_IVAR_TIMING:                 /* ivar 14 - 0 = normal, 1 = timing_hs, ... */
3164                 sc->rtsx_host.ios.timing = value;
3165                 sc->rtsx_ios_timing = -1;       /* To be updated on next rtsx_mmcbr_update_ios(). */
3166                 break;
3167         /* These are read-only. */
3168         case MMCBR_IVAR_F_MIN:                  /* ivar  4 */
3169         case MMCBR_IVAR_F_MAX:                  /* ivar  5 */
3170         case MMCBR_IVAR_HOST_OCR:               /* ivar  6 - host operation conditions register */
3171         case MMCBR_IVAR_RETUNE_REQ:             /* ivar 10 */
3172         case MMCBR_IVAR_CAPS:                   /* ivar 13 */
3173         case MMCBR_IVAR_MAX_DATA:               /* ivar 15 */
3174         case MMCBR_IVAR_MAX_BUSY_TIMEOUT:       /* ivar 16 */
3175         default:
3176                 return (EINVAL);
3177         }
3178
3179         return (0);
3180 }
3181
3182 static int
3183 rtsx_mmcbr_update_ios(device_t bus, device_t child__unused)
3184 {
3185         struct rtsx_softc *sc;
3186         struct mmc_ios    *ios;
3187         int     error;
3188
3189         sc = device_get_softc(bus);
3190         ios = &sc->rtsx_host.ios;
3191
3192         if (bootverbose)
3193                 device_printf(bus, "rtsx_mmcbr_update_ios()\n");
3194
3195         /* if MMCBR_IVAR_BUS_WIDTH updated. */
3196         if (sc->rtsx_ios_bus_width < 0) {
3197                 sc->rtsx_ios_bus_width = ios->bus_width;
3198                 if ((error = rtsx_set_bus_width(sc, ios->bus_width)))
3199                         return (error);
3200         }
3201
3202         /* if MMCBR_IVAR_POWER_MODE updated. */
3203         if (sc->rtsx_ios_power_mode < 0) {
3204                 sc->rtsx_ios_power_mode = ios->power_mode;
3205                 switch (ios->power_mode) {
3206                 case power_off:
3207                         if ((error = rtsx_bus_power_off(sc)))
3208                                 return (error);
3209                         break;
3210                 case power_up:
3211                         if ((error = rtsx_bus_power_on(sc)))
3212                                 return (error);
3213                         break;
3214                 case power_on:
3215                         if ((error = rtsx_bus_power_on(sc)))
3216                                 return (error);
3217                         break;
3218                 }
3219         }
3220
3221         sc->rtsx_double_clk = true;
3222         sc->rtsx_vpclk = false;
3223
3224         /* if MMCBR_IVAR_TIMING updated. */
3225         if (sc->rtsx_ios_timing < 0) {
3226                 sc->rtsx_ios_timing = ios->timing;
3227                 if ((error = rtsx_set_sd_timing(sc, ios->timing)))
3228                         return (error);
3229         }
3230
3231         /* if MMCBR_IVAR_CLOCK updated, must be after rtsx_set_sd_timing() */
3232         if (sc->rtsx_ios_clock < 0) {
3233                 sc->rtsx_ios_clock = ios->clock;
3234                 if ((error = rtsx_set_sd_clock(sc, ios->clock)))
3235                         return (error);
3236         }
3237
3238         /* if MMCCAM and vccq updated */
3239         if (sc->rtsx_ios_vccq < 0) {
3240                 sc->rtsx_ios_vccq = ios->vccq;
3241                 if ((error = rtsx_mmcbr_switch_vccq(sc->rtsx_dev, NULL)))
3242                         return (error);
3243         }
3244
3245         return (0);
3246 }
3247
3248 /*
3249  * Set output stage logic power voltage.
3250  */
3251 static int
3252 rtsx_mmcbr_switch_vccq(device_t bus, device_t child __unused)
3253 {
3254         struct rtsx_softc *sc;
3255         int     vccq = 0;
3256         int     error;
3257
3258         sc = device_get_softc(bus);
3259
3260         switch (sc->rtsx_host.ios.vccq) {
3261         case vccq_120:
3262                 vccq = 120;
3263                 break;
3264         case vccq_180:
3265                 vccq = 180;
3266                 break;
3267         case vccq_330:
3268                 vccq = 330;
3269                 break;
3270         };
3271         /* It seems it is always vccq_330. */
3272         if (vccq == 330) {
3273                 switch (sc->rtsx_device_id) {
3274                         uint16_t val;
3275                 case RTSX_RTS5227:
3276                         if ((error = rtsx_write_phy(sc, 0x08, 0x4FE4)))
3277                                 return (error);
3278                         if ((error = rtsx_rts5227_fill_driving(sc)))
3279                                 return (error);
3280                         break;
3281                 case RTSX_RTS5209:
3282                 case RTSX_RTS5229:
3283                         RTSX_BITOP(sc, RTSX_SD30_CMD_DRIVE_SEL, RTSX_SD30_DRIVE_SEL_MASK, sc->rtsx_sd30_drive_sel_3v3);
3284                         if ((error = rtsx_write_phy(sc, 0x08, 0x4FE4)))
3285                                 return (error);
3286                         break;
3287                 case RTSX_RTS522A:
3288                         if ((error = rtsx_write_phy(sc, 0x08, 0x57E4)))
3289                                 return (error);
3290                         if ((error = rtsx_rts5227_fill_driving(sc)))
3291                                 return (error);
3292                         break;
3293                 case RTSX_RTS525A:
3294                         RTSX_BITOP(sc, RTSX_LDO_CONFIG2, RTSX_LDO_D3318_MASK, RTSX_LDO_D3318_33V);
3295                         RTSX_BITOP(sc, RTSX_SD_PAD_CTL, RTSX_SD_IO_USING_1V8, 0);
3296                         if ((error = rtsx_rts5249_fill_driving(sc)))
3297                                 return (error);
3298                         break;
3299                 case RTSX_RTS5249:
3300                         if ((error = rtsx_read_phy(sc, RTSX_PHY_TUNE, &val)))
3301                                 return (error);
3302                         if ((error = rtsx_write_phy(sc, RTSX_PHY_TUNE,
3303                                                     (val & RTSX_PHY_TUNE_VOLTAGE_MASK) | RTSX_PHY_TUNE_VOLTAGE_3V3)))
3304                                 return (error);
3305                         if ((error = rtsx_rts5249_fill_driving(sc)))
3306                                 return (error);
3307                         break;
3308                 case RTSX_RTL8402:
3309                         RTSX_BITOP(sc, RTSX_SD30_CMD_DRIVE_SEL, RTSX_SD30_DRIVE_SEL_MASK, sc->rtsx_sd30_drive_sel_3v3);
3310                         RTSX_BITOP(sc, RTSX_LDO_CTL,
3311                                    (RTSX_BPP_ASIC_MASK << RTSX_BPP_SHIFT_8402) | RTSX_BPP_PAD_MASK,
3312                                    (RTSX_BPP_ASIC_3V3 << RTSX_BPP_SHIFT_8402) | RTSX_BPP_PAD_3V3);
3313                         break;
3314                 case RTSX_RTL8411:
3315                 case RTSX_RTL8411B:
3316                         RTSX_BITOP(sc, RTSX_SD30_CMD_DRIVE_SEL, RTSX_SD30_DRIVE_SEL_MASK, sc->rtsx_sd30_drive_sel_3v3);
3317                         RTSX_BITOP(sc, RTSX_LDO_CTL,
3318                                    (RTSX_BPP_ASIC_MASK << RTSX_BPP_SHIFT_8411) | RTSX_BPP_PAD_MASK,
3319                                    (RTSX_BPP_ASIC_3V3 << RTSX_BPP_SHIFT_8411) | RTSX_BPP_PAD_3V3);
3320                         break;
3321                 }
3322                 DELAY(300);
3323         }
3324
3325         if (bootverbose || sc->rtsx_debug)
3326                 device_printf(sc->rtsx_dev, "rtsx_mmcbr_switch_vccq(%d)\n", vccq);
3327
3328         return (0);
3329 }
3330
3331 /*
3332  * Tune card if bus_timing_uhs_sdr50.
3333  */
3334 static int
3335 rtsx_mmcbr_tune(device_t bus, device_t child __unused, bool hs400)
3336 {
3337         struct rtsx_softc *sc;
3338         uint32_t raw_phase_map[RTSX_RX_TUNING_CNT] = {0};
3339         uint32_t phase_map;
3340         uint8_t  final_phase;
3341         int      i;
3342
3343         sc = device_get_softc(bus);
3344
3345         if (bootverbose || sc->rtsx_debug)
3346                 device_printf(sc->rtsx_dev, "rtsx_mmcbr_tune() - hs400 is %s\n",
3347                               (hs400) ? "true" : "false");
3348
3349         if (sc->rtsx_ios_timing != bus_timing_uhs_sdr50)
3350                 return (0);
3351
3352         sc->rtsx_tuning_mode = true;
3353
3354         switch (sc->rtsx_device_id) {
3355         case RTSX_RTS5209:
3356         case RTSX_RTS5227:
3357                 rtsx_sd_change_tx_phase(sc, 27);
3358                 break;
3359         case RTSX_RTS522A:
3360                 rtsx_sd_change_tx_phase(sc, 20);
3361                 break;
3362         case RTSX_RTS5229:
3363                 rtsx_sd_change_tx_phase(sc, 27);
3364                 break;
3365         case RTSX_RTS525A:
3366         case RTSX_RTS5249:
3367                 rtsx_sd_change_tx_phase(sc, 29);
3368                 break;
3369         case RTSX_RTL8402:
3370         case RTSX_RTL8411:
3371         case RTSX_RTL8411B:
3372                 rtsx_sd_change_tx_phase(sc, 7);
3373                 break;
3374         }
3375
3376         /* trying rx tuning for bus_timing_uhs_sdr50. */
3377         for (i = 0; i < RTSX_RX_TUNING_CNT; i++) {
3378                 rtsx_sd_tuning_rx_phase(sc, &(raw_phase_map[i]));
3379                 if (raw_phase_map[i] == 0)
3380                         break;
3381         }
3382
3383         phase_map = 0xffffffff;
3384         for (i = 0; i < RTSX_RX_TUNING_CNT; i++) {
3385                 if (bootverbose || sc->rtsx_debug)
3386                         device_printf(sc->rtsx_dev, "rtsx_mmcbr_tune() - RX raw_phase_map[%d]: 0x%08x\n",
3387                                       i, raw_phase_map[i]);
3388                 phase_map &= raw_phase_map[i];
3389         }
3390         if (bootverbose || sc->rtsx_debug)
3391                 device_printf(sc->rtsx_dev, "rtsx_mmcbr_tune() - RX phase_map: 0x%08x\n", phase_map);
3392
3393         if (phase_map) {
3394                 final_phase = rtsx_sd_search_final_rx_phase(sc, phase_map);
3395                 if (final_phase != 0xff) {
3396                         if (sc->rtsx_debug == 1) {
3397                                 sc->rtsx_debug = 2;
3398                                 rtsx_sd_change_rx_phase(sc, final_phase);
3399                                 sc->rtsx_debug = 1;
3400                         } else {
3401                                 rtsx_sd_change_rx_phase(sc, final_phase);
3402                         }
3403                 }
3404         }
3405
3406         sc->rtsx_tuning_mode = false;
3407
3408         return (0);
3409 }
3410
3411 static int
3412 rtsx_mmcbr_retune(device_t bus, device_t child __unused, bool reset __unused)
3413 {
3414         struct rtsx_softc *sc;
3415
3416         sc = device_get_softc(bus);
3417
3418         if (bootverbose)
3419                 device_printf(sc->rtsx_dev, "rtsx_mmcbr_retune()\n");
3420
3421         return (0);
3422 }
3423
3424 static int
3425 rtsx_mmcbr_request(device_t bus, device_t child __unused, struct mmc_request *req)
3426 {
3427         struct rtsx_softc  *sc;
3428         struct mmc_command *cmd;
3429         int     error;
3430
3431         sc = device_get_softc(bus);
3432
3433         RTSX_LOCK(sc);
3434         if (sc->rtsx_req != NULL) {
3435                 RTSX_UNLOCK(sc);
3436                 return (EBUSY);
3437         }
3438         sc->rtsx_req = req;
3439         cmd = req->cmd;
3440         cmd->error = error = MMC_ERR_NONE;
3441         sc->rtsx_intr_status = 0;
3442         sc->rtsx_intr_trans_ok = NULL;
3443         sc->rtsx_intr_trans_ko = rtsx_req_done;
3444
3445         if (bootverbose)
3446                 device_printf(sc->rtsx_dev, "rtsx_mmcbr_request(CMD%u arg %#x, flags %#x, dlen %u, dflags %#x)\n",
3447                               cmd->opcode, cmd->arg, cmd->flags,
3448                               cmd->data != NULL ? (unsigned int)cmd->data->len : 0,
3449                               cmd->data != NULL ? cmd->data->flags : 0);
3450
3451         /* Check if card present. */
3452         if (!ISSET(sc->rtsx_flags, RTSX_F_CARD_PRESENT)) {
3453                 cmd->error = error = MMC_ERR_FAILED;
3454                 goto end;
3455         }
3456
3457         /* Refuse SDIO probe if the chip doesn't support SDIO. */
3458         if (cmd->opcode == IO_SEND_OP_COND &&
3459             !ISSET(sc->rtsx_flags, RTSX_F_SDIO_SUPPORT)) {
3460                 cmd->error = error = MMC_ERR_INVALID;
3461                 goto end;
3462         }
3463
3464         /* Return MMC_ERR_TIMEOUT for SD_IO_RW_DIRECT and IO_SEND_OP_COND. */
3465         if (cmd->opcode == SD_IO_RW_DIRECT || cmd->opcode == IO_SEND_OP_COND) {
3466                 cmd->error = error = MMC_ERR_TIMEOUT;
3467                 goto end;
3468         }
3469
3470         /* Select SD card. */
3471         RTSX_BITOP(sc, RTSX_CARD_SELECT, 0x07, RTSX_SD_MOD_SEL);
3472         RTSX_BITOP(sc, RTSX_CARD_SHARE_MODE, RTSX_CARD_SHARE_MASK, RTSX_CARD_SHARE_48_SD);
3473
3474         if (cmd->data == NULL) {
3475                 DELAY(200);
3476                 error = rtsx_send_req(sc, cmd);
3477         } else if (cmd->data->len <= 512) {
3478                 error = rtsx_xfer_short(sc, cmd);
3479         } else {
3480                 error = rtsx_xfer(sc, cmd);
3481         }
3482  end:
3483         if (error == MMC_ERR_NONE) {
3484                 callout_reset(&sc->rtsx_timeout_callout, sc->rtsx_timeout * hz, rtsx_timeout, sc);
3485         } else {
3486                 rtsx_req_done(sc);
3487         }
3488         RTSX_UNLOCK(sc);
3489
3490         return (error);
3491 }
3492
3493 static int
3494 rtsx_mmcbr_get_ro(device_t bus, device_t child __unused)
3495 {
3496         struct rtsx_softc *sc;
3497
3498         sc = device_get_softc(bus);
3499
3500         if (sc->rtsx_inversion == 0)
3501                 return (sc->rtsx_read_only);
3502         else
3503                 return !(sc->rtsx_read_only);
3504 }
3505
3506 static int
3507 rtsx_mmcbr_acquire_host(device_t bus, device_t child __unused)
3508 {
3509         struct rtsx_softc *sc;
3510
3511         if (bootverbose)
3512                 device_printf(bus, "rtsx_mmcbr_acquire_host()\n");
3513
3514         sc = device_get_softc(bus);
3515         RTSX_LOCK(sc);
3516         while (sc->rtsx_bus_busy)
3517                 msleep(&sc->rtsx_bus_busy, &sc->rtsx_mtx, 0, "rtsxah", 0);
3518         sc->rtsx_bus_busy++;
3519         RTSX_UNLOCK(sc);
3520
3521         return (0);
3522 }
3523
3524 static int
3525 rtsx_mmcbr_release_host(device_t bus, device_t child __unused)
3526 {
3527         struct rtsx_softc *sc;
3528
3529         if (bootverbose)
3530                 device_printf(bus, "rtsx_mmcbr_release_host()\n");
3531
3532         sc = device_get_softc(bus);
3533         RTSX_LOCK(sc);
3534         sc->rtsx_bus_busy--;
3535         RTSX_UNLOCK(sc);
3536         wakeup(&sc->rtsx_bus_busy);
3537
3538         return (0);
3539 }
3540
3541 /*
3542  *
3543  * PCI Support Functions
3544  *
3545  */
3546
3547 /*
3548  * Compare the device ID (chip) of this device against the IDs that this driver
3549  * supports. If there is a match, set the description and return success.
3550  */
3551 static int
3552 rtsx_probe(device_t dev)
3553 {
3554         struct rtsx_softc *sc;
3555         uint16_t vendor_id;
3556         uint16_t device_id;
3557         int      i;
3558         int      result;
3559
3560         vendor_id = pci_get_vendor(dev);
3561         device_id = pci_get_device(dev);
3562
3563         result = ENXIO;
3564         for (i = 0; rtsx_devices[i].vendor_id != 0; i++) {
3565                 if (rtsx_devices[i].vendor_id == vendor_id &&
3566                     rtsx_devices[i].device_id == device_id) {
3567                         device_set_desc(dev, rtsx_devices[i].desc);
3568                         sc = device_get_softc(dev);
3569                         sc->rtsx_device_id = device_id;
3570                         result = BUS_PROBE_DEFAULT;
3571                         break;
3572                 }
3573         }
3574
3575         return (result);
3576 }
3577
3578 /*
3579  * Attach function is only called if the probe is successful.
3580  */
3581 static int
3582 rtsx_attach(device_t dev)
3583 {
3584         struct rtsx_softc       *sc = device_get_softc(dev);
3585         struct sysctl_ctx_list  *ctx;
3586         struct sysctl_oid_list  *tree;
3587         int                     msi_count = 1;
3588         uint32_t                sdio_cfg;
3589         int                     error;
3590
3591         if (bootverbose)
3592                 device_printf(dev, "Attach - Vendor ID: 0x%x - Device ID: 0x%x\n",
3593                               pci_get_vendor(dev), pci_get_device(dev));
3594
3595         sc->rtsx_dev = dev;
3596         sc->rtsx_req = NULL;
3597         sc->rtsx_timeout = 10;
3598         sc->rtsx_read_only = 0;
3599         sc->rtsx_force_timing = 0;
3600         sc->rtsx_debug = 0;
3601         sc->rtsx_read_count = 0;
3602         sc->rtsx_write_count = 0;
3603
3604         RTSX_LOCK_INIT(sc);
3605
3606         ctx = device_get_sysctl_ctx(dev);
3607         tree = SYSCTL_CHILDREN(device_get_sysctl_tree(dev));
3608         SYSCTL_ADD_INT(ctx, tree, OID_AUTO, "req_timeout", CTLFLAG_RW,
3609                        &sc->rtsx_timeout, 0, "Request timeout in seconds");
3610         SYSCTL_ADD_U8(ctx, tree, OID_AUTO, "read_only", CTLFLAG_RD,
3611                       &sc->rtsx_read_only, 0, "Card is write protected");
3612         SYSCTL_ADD_U8(ctx, tree, OID_AUTO, "inversion", CTLFLAG_RWTUN,
3613                       &sc->rtsx_inversion, 0, "Inversion of card detection and read only status");
3614         SYSCTL_ADD_U8(ctx, tree, OID_AUTO, "force_timing", CTLFLAG_RW,
3615                       &sc->rtsx_force_timing, 0, "Force bus_timing_uhs_sdr50");
3616         SYSCTL_ADD_U8(ctx, tree, OID_AUTO, "debug", CTLFLAG_RW,
3617                       &sc->rtsx_debug, 0, "Debugging flag");
3618         SYSCTL_ADD_U64(ctx, tree, OID_AUTO, "read_count", CTLFLAG_RD,
3619                        &sc->rtsx_read_count, 0, "Count of read operations");
3620         SYSCTL_ADD_U64(ctx, tree, OID_AUTO, "write_count", CTLFLAG_RD,
3621                        &sc->rtsx_write_count, 0, "Count of write operations");
3622
3623         /* Allocate IRQ. */
3624         sc->rtsx_irq_res_id = 0;
3625         if (pci_alloc_msi(dev, &msi_count) == 0)
3626                 sc->rtsx_irq_res_id = 1;
3627         sc->rtsx_irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &sc->rtsx_irq_res_id,
3628                                                   RF_ACTIVE | (sc->rtsx_irq_res_id != 0 ? 0 : RF_SHAREABLE));
3629         if (sc->rtsx_irq_res == NULL) {
3630                 device_printf(dev, "Can't allocate IRQ resources for %d\n", sc->rtsx_irq_res_id);
3631                 pci_release_msi(dev);
3632                 return (ENXIO);
3633         }
3634
3635         callout_init_mtx(&sc->rtsx_timeout_callout, &sc->rtsx_mtx, 0);
3636
3637         /* Allocate memory resource. */
3638         if (sc->rtsx_device_id == RTSX_RTS525A)
3639                 sc->rtsx_res_id = PCIR_BAR(1);
3640         else
3641                 sc->rtsx_res_id = PCIR_BAR(0);
3642         sc->rtsx_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &sc->rtsx_res_id, RF_ACTIVE);
3643         if (sc->rtsx_res == NULL) {
3644                 device_printf(dev, "Can't allocate memory resource for %d\n", sc->rtsx_res_id);
3645                 goto destroy_rtsx_irq_res;
3646         }
3647
3648         if (bootverbose)
3649                 device_printf(dev, "rtsx_irq_res_id: %d, rtsx_res_id: %d\n",
3650                               sc->rtsx_irq_res_id, sc->rtsx_res_id);
3651
3652         sc->rtsx_btag = rman_get_bustag(sc->rtsx_res);
3653         sc->rtsx_bhandle = rman_get_bushandle(sc->rtsx_res);
3654
3655         /* Activate the interrupt. */
3656         error = bus_setup_intr(dev, sc->rtsx_irq_res, INTR_TYPE_MISC | INTR_MPSAFE,
3657                                NULL, rtsx_intr, sc, &sc->rtsx_irq_cookie);
3658         if (error) {
3659                 device_printf(dev, "Can't set up irq [0x%x]!\n", error);
3660                 goto destroy_rtsx_res;
3661         }
3662         pci_enable_busmaster(dev);
3663
3664         if (rtsx_read_cfg(sc, 0, RTSX_SDIOCFG_REG, &sdio_cfg) == 0) {
3665                 if ((sdio_cfg & RTSX_SDIOCFG_SDIO_ONLY) ||
3666                     (sdio_cfg & RTSX_SDIOCFG_HAVE_SDIO))
3667                         sc->rtsx_flags |= RTSX_F_SDIO_SUPPORT;
3668         }
3669
3670         /* Allocate two DMA buffers: a command buffer and a data buffer. */
3671         error = rtsx_dma_alloc(sc);
3672         if (error) {
3673                 goto destroy_rtsx_irq;
3674         }
3675
3676         /* From dwmmc.c. */
3677         TIMEOUT_TASK_INIT(taskqueue_swi_giant, &sc->rtsx_card_insert_task, 0,
3678                           rtsx_card_task, sc);
3679         TASK_INIT(&sc->rtsx_card_remove_task, 0, rtsx_card_task, sc);
3680
3681 #ifdef MMCCAM
3682         sc->rtsx_ccb = NULL;
3683         sc->rtsx_cam_status = 0;
3684
3685         SYSCTL_ADD_U8(ctx, tree, OID_AUTO, "cam_status", CTLFLAG_RD,
3686                       &sc->rtsx_cam_status, 0, "driver cam card present");
3687         if ((sc->rtsx_devq = cam_simq_alloc(1)) == NULL) {
3688                 device_printf(dev, "Error during CAM queue allocation\n");
3689                 goto destroy_rtsx_irq;
3690         }
3691         mtx_init(&sc->rtsx_sim_mtx, "rtsxsim", NULL, MTX_DEF);
3692         sc->rtsx_sim = cam_sim_alloc(rtsx_cam_action, rtsx_cam_poll,
3693                                      "rtsx", sc, device_get_unit(dev),
3694                                      &sc->rtsx_sim_mtx, 1, 1, sc->rtsx_devq);
3695         if (sc->rtsx_sim == NULL) {
3696                 device_printf(dev, "Can't allocate CAM SIM\n");
3697                 goto destroy_rtsx_irq;
3698         }
3699         mtx_lock(&sc->rtsx_sim_mtx);
3700         if (xpt_bus_register(sc->rtsx_sim, dev, 0) != 0) {
3701                 device_printf(dev, "Can't register SCSI pass-through bus\n");
3702                 mtx_unlock(&sc->rtsx_sim_mtx);
3703                 goto destroy_rtsx_irq;
3704         }
3705         mtx_unlock(&sc->rtsx_sim_mtx);
3706 #endif /* MMCCAM */
3707
3708         /* Initialize device. */
3709         if (rtsx_init(sc)) {
3710                 device_printf(dev, "Error during rtsx_init()\n");
3711                 goto destroy_rtsx_irq;
3712         }
3713
3714         /*
3715          * Schedule a card detection as we won't get an interrupt
3716          * if the card is inserted when we attach
3717          */
3718         DELAY(500);
3719         if (rtsx_is_card_present(sc))
3720                 device_printf(sc->rtsx_dev, "Card present\n");
3721         else
3722                 device_printf(sc->rtsx_dev, "Card absent\n");
3723         rtsx_card_task(sc, 0);
3724
3725         if (bootverbose)
3726                 device_printf(dev, "Device attached\n");
3727
3728         return (0);
3729
3730  destroy_rtsx_irq:
3731         bus_teardown_intr(dev, sc->rtsx_irq_res, sc->rtsx_irq_cookie);
3732  destroy_rtsx_res:
3733         bus_release_resource(dev, SYS_RES_MEMORY, sc->rtsx_res_id,
3734                              sc->rtsx_res);
3735  destroy_rtsx_irq_res:
3736         callout_drain(&sc->rtsx_timeout_callout);
3737         bus_release_resource(dev, SYS_RES_IRQ, sc->rtsx_irq_res_id,
3738                              sc->rtsx_irq_res);
3739         pci_release_msi(dev);
3740         RTSX_LOCK_DESTROY(sc);
3741 #ifdef MMCCAM
3742         if (sc->rtsx_sim != NULL) {
3743                 mtx_lock(&sc->rtsx_sim_mtx);
3744                 xpt_bus_deregister(cam_sim_path(sc->rtsx_sim));
3745                 cam_sim_free(sc->rtsx_sim, FALSE);
3746                 mtx_unlock(&sc->rtsx_sim_mtx);
3747         }
3748         if (sc->rtsx_devq != NULL) {
3749                 mtx_destroy(&sc->rtsx_sim_mtx);
3750                 cam_simq_free(sc->rtsx_devq);
3751         }
3752 #endif /* MMCCAM */
3753
3754         return (ENXIO);
3755 }
3756
3757 static int
3758 rtsx_detach(device_t dev)
3759 {
3760         struct rtsx_softc *sc = device_get_softc(dev);
3761         int     error;
3762
3763         if (bootverbose)
3764                 device_printf(dev, "Detach - Vendor ID: 0x%x - Device ID: 0x%x\n",
3765                               pci_get_vendor(dev), pci_get_device(dev));
3766
3767         /* Disable interrupts. */
3768         sc->rtsx_intr_enabled = 0;
3769         WRITE4(sc, RTSX_BIER, sc->rtsx_intr_enabled);
3770
3771         /* Stop device. */
3772         error = device_delete_children(sc->rtsx_dev);
3773         sc->rtsx_mmc_dev = NULL;
3774         if (error)
3775                 return (error);
3776
3777         taskqueue_drain_timeout(taskqueue_swi_giant, &sc->rtsx_card_insert_task);
3778         taskqueue_drain(taskqueue_swi_giant, &sc->rtsx_card_remove_task);
3779
3780         /* Teardown the state in our softc created in our attach routine. */
3781         rtsx_dma_free(sc);
3782         if (sc->rtsx_res != NULL)
3783                 bus_release_resource(dev, SYS_RES_MEMORY, sc->rtsx_res_id,
3784                                      sc->rtsx_res);
3785         if (sc->rtsx_irq_cookie != NULL)
3786                 bus_teardown_intr(dev, sc->rtsx_irq_res, sc->rtsx_irq_cookie);
3787         if (sc->rtsx_irq_res != NULL) {
3788                 callout_drain(&sc->rtsx_timeout_callout);
3789                 bus_release_resource(dev, SYS_RES_IRQ, sc->rtsx_irq_res_id,
3790                                      sc->rtsx_irq_res);
3791                 pci_release_msi(dev);
3792         }
3793         RTSX_LOCK_DESTROY(sc);
3794 #ifdef MMCCAM
3795         if (sc->rtsx_sim != NULL) {
3796                 mtx_lock(&sc->rtsx_sim_mtx);
3797                 xpt_bus_deregister(cam_sim_path(sc->rtsx_sim));
3798                 cam_sim_free(sc->rtsx_sim, FALSE);
3799                 mtx_unlock(&sc->rtsx_sim_mtx);
3800         }
3801         if (sc->rtsx_devq != NULL) {
3802                 mtx_destroy(&sc->rtsx_sim_mtx);
3803                 cam_simq_free(sc->rtsx_devq);
3804         }
3805 #endif /* MMCCAM */
3806
3807         return (0);
3808 }
3809
3810 static int
3811 rtsx_shutdown(device_t dev)
3812 {
3813         if (bootverbose)
3814                 device_printf(dev, "Shutdown\n");
3815
3816         rtsx_detach(dev);
3817
3818         return (0);
3819 }
3820
3821 /*
3822  * Device suspend routine.
3823  */
3824 static int
3825 rtsx_suspend(device_t dev)
3826 {
3827         struct rtsx_softc *sc = device_get_softc(dev);
3828
3829         device_printf(dev, "Suspend\n");
3830
3831 #ifdef MMCCAM
3832         if (sc->rtsx_ccb != NULL) {
3833                 device_printf(dev, "Request in progress: CMD%u, rtsr_intr_status: 0x%08x\n",
3834                               sc->rtsx_ccb->mmcio.cmd.opcode, sc->rtsx_intr_status);
3835         }
3836 #else
3837         if (sc->rtsx_req != NULL) {
3838                 device_printf(dev, "Request in progress: CMD%u, rtsr_intr_status: 0x%08x\n",
3839                               sc->rtsx_req->cmd->opcode, sc->rtsx_intr_status);
3840         }
3841 #endif /* MMCCAM */
3842
3843         bus_generic_suspend(dev);
3844
3845         return (0);
3846 }
3847
3848 /*
3849  * Device resume routine.
3850  */
3851 static int
3852 rtsx_resume(device_t dev)
3853 {
3854         device_printf(dev, "Resume\n");
3855
3856         bus_generic_resume(dev);
3857
3858         return (0);
3859 }
3860
3861 static device_method_t rtsx_methods[] = {
3862         /* Device interface */
3863         DEVMETHOD(device_probe,         rtsx_probe),
3864         DEVMETHOD(device_attach,        rtsx_attach),
3865         DEVMETHOD(device_detach,        rtsx_detach),
3866         DEVMETHOD(device_shutdown,      rtsx_shutdown),
3867         DEVMETHOD(device_suspend,       rtsx_suspend),
3868         DEVMETHOD(device_resume,        rtsx_resume),
3869
3870         /* Bus interface */
3871         DEVMETHOD(bus_read_ivar,        rtsx_read_ivar),
3872         DEVMETHOD(bus_write_ivar,       rtsx_write_ivar),
3873
3874         /* MMC bridge interface */
3875         DEVMETHOD(mmcbr_update_ios,     rtsx_mmcbr_update_ios),
3876         DEVMETHOD(mmcbr_switch_vccq,    rtsx_mmcbr_switch_vccq),
3877         DEVMETHOD(mmcbr_tune,           rtsx_mmcbr_tune),
3878         DEVMETHOD(mmcbr_retune,         rtsx_mmcbr_retune),
3879         DEVMETHOD(mmcbr_request,        rtsx_mmcbr_request),
3880         DEVMETHOD(mmcbr_get_ro,         rtsx_mmcbr_get_ro),
3881         DEVMETHOD(mmcbr_acquire_host,   rtsx_mmcbr_acquire_host),
3882         DEVMETHOD(mmcbr_release_host,   rtsx_mmcbr_release_host),
3883
3884         DEVMETHOD_END
3885 };
3886
3887 static devclass_t rtsx_devclass;
3888
3889 DEFINE_CLASS_0(rtsx, rtsx_driver, rtsx_methods, sizeof(struct rtsx_softc));
3890 DRIVER_MODULE(rtsx, pci, rtsx_driver, rtsx_devclass, NULL, NULL);
3891 #ifndef MMCCAM
3892 MMC_DECLARE_BRIDGE(rtsx);
3893 #endif /* MMCCAM */