The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/rtsx/rtsx.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

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

Cache object: 3d9865137f0b5f2b6b1d7dc7c7ba26bf


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.