Module Name: src Committed By: martin Date: Thu Jun 14 19:57:24 UTC 2018
Modified Files: src/share/man/man4 [netbsd-8]: rtsx.4 src/sys/dev/ic [netbsd-8]: rtsx.c rtsxreg.h rtsxvar.h src/sys/dev/pci [netbsd-8]: pcidevs rtsx_pci.c Log Message: Pull up following revision(s) (requested by maya in ticket #878): share/man/man4/rtsx.4: revision 1.5 sys/dev/pci/pcidevs: revision 1.1331 sys/dev/ic/rtsxreg.h: revision 1.3 sys/dev/ic/rtsxvar.h: revision 1.3 sys/dev/pci/rtsx_pci.c: revision 1.7 sys/dev/ic/rtsx.c: revision 1.3 add realtek RT525A PCI-E card reader found in my Dell XPS 15 9550. rtsx(4): Add support for RT525A, from openbsd. ok rkujawa Denote RTS525A, bump date To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.4.8.1 src/share/man/man4/rtsx.4 cvs rdiff -u -r1.2 -r1.2.12.1 src/sys/dev/ic/rtsx.c src/sys/dev/ic/rtsxreg.h \ src/sys/dev/ic/rtsxvar.h cvs rdiff -u -r1.1289.2.7 -r1.1289.2.8 src/sys/dev/pci/pcidevs cvs rdiff -u -r1.6 -r1.6.10.1 src/sys/dev/pci/rtsx_pci.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/share/man/man4/rtsx.4 diff -u src/share/man/man4/rtsx.4:1.4 src/share/man/man4/rtsx.4:1.4.8.1 --- src/share/man/man4/rtsx.4:1.4 Wed Oct 29 14:33:23 2014 +++ src/share/man/man4/rtsx.4 Thu Jun 14 19:57:23 2018 @@ -1,10 +1,10 @@ -.\" $NetBSD: rtsx.4,v 1.4 2014/10/29 14:33:23 nonaka Exp $ +.\" $NetBSD: rtsx.4,v 1.4.8.1 2018/06/14 19:57:23 martin Exp $ .\" $OpenBSD: rtsx.4,v 1.6 2014/05/18 10:52:17 stsp Exp $ .\" .\" Theo de Raadt, 2006. Public Domain. .\" Stefan Sperling, 2012. Public Domain. .\" -.Dd October 29, 2014 +.Dd April 24, 2018 .Dt RTSX 4 .Os .Sh NAME @@ -17,7 +17,7 @@ The .Nm driver provides support for the Realtek RTS5209, RTS5227, RTS5229, -RTL8402, RTL8411 and RTL8411B SD card readers. +RTS525A, RTL8402, RTL8411 and RTL8411B SD card readers. .Pp The .Xr sdmmc 4 Index: src/sys/dev/ic/rtsx.c diff -u src/sys/dev/ic/rtsx.c:1.2 src/sys/dev/ic/rtsx.c:1.2.12.1 --- src/sys/dev/ic/rtsx.c:1.2 Wed Oct 29 14:24:09 2014 +++ src/sys/dev/ic/rtsx.c Thu Jun 14 19:57:24 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: rtsx.c,v 1.2 2014/10/29 14:24:09 nonaka Exp $ */ +/* $NetBSD: rtsx.c,v 1.2.12.1 2018/06/14 19:57:24 martin Exp $ */ /* $OpenBSD: rtsx.c,v 1.10 2014/08/19 17:55:03 phessler Exp $ */ /* @@ -23,7 +23,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rtsx.c,v 1.2 2014/10/29 14:24:09 nonaka Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rtsx.c,v 1.2.12.1 2018/06/14 19:57:24 martin Exp $"); #include <sys/param.h> #include <sys/device.h> @@ -560,7 +560,9 @@ rtsx_bus_power_off(struct rtsx_softc *sc disable3 = RTSX_PULL_CTL_DISABLE3; if (RTSX_IS_RTS5209(sc)) RTSX_SET(sc, RTSX_PWR_GATE_CTRL, RTSX_LDO3318_OFF); - else if (RTSX_IS_RTS5227(sc) || RTSX_IS_RTS5229(sc)) { + else if (RTSX_IS_RTS5227(sc) + || RTSX_IS_RTS5229(sc) + || RTSX_IS_RTS525A(sc)) { RTSX_CLR(sc, RTSX_PWR_GATE_CTRL, RTSX_LDO3318_VCC1 | RTSX_LDO3318_VCC2); if (RTSX_IS_RTS5229_TYPE_C(sc)) @@ -578,7 +580,10 @@ rtsx_bus_power_off(struct rtsx_softc *sc RTSX_CLR(sc, RTSX_CARD_PWR_CTL, RTSX_PMOS_STRG_800mA); /* Disable pull control. */ - if (RTSX_IS_RTS5209(sc) || RTSX_IS_RTS5227(sc) || RTSX_IS_RTS5229(sc)) { + if (RTSX_IS_RTS5209(sc) + || RTSX_IS_RTS5227(sc) + || RTSX_IS_RTS5229(sc) + || RTSX_IS_RTS525A(sc)) { RTSX_WRITE(sc, RTSX_CARD_PULL_CTL1, RTSX_PULL_CTL_DISABLE12); RTSX_WRITE(sc, RTSX_CARD_PULL_CTL2, RTSX_PULL_CTL_DISABLE12); RTSX_WRITE(sc, RTSX_CARD_PULL_CTL3, disable3); @@ -612,13 +617,23 @@ rtsx_bus_power_on(struct rtsx_softc *sc) { uint8_t enable3; + if (RTSX_IS_RTS525A(sc)) { + int err = rtsx_write(sc, RTSX_LDO_VCC_CFG1, RTSX_LDO_VCC_TUNE_MASK, + RTSX_LDO_VCC_3V3); + if (err) + return err; + } + /* Select SD card. */ RTSX_WRITE(sc, RTSX_CARD_SELECT, RTSX_SD_MOD_SEL); RTSX_WRITE(sc, RTSX_CARD_SHARE_MODE, RTSX_CARD_SHARE_48_SD); RTSX_SET(sc, RTSX_CARD_CLK_EN, RTSX_SD_CLK_EN); /* Enable pull control. */ - if (RTSX_IS_RTS5209(sc) || RTSX_IS_RTS5227(sc) || RTSX_IS_RTS5229(sc)) { + if (RTSX_IS_RTS5209(sc) + || RTSX_IS_RTS5227(sc) + || RTSX_IS_RTS5229(sc) + || RTSX_IS_RTS525A(sc)) { RTSX_WRITE(sc, RTSX_CARD_PULL_CTL1, RTSX_PULL_CTL_ENABLE12); RTSX_WRITE(sc, RTSX_CARD_PULL_CTL2, RTSX_PULL_CTL_ENABLE12); if (RTSX_IS_RTS5229_TYPE_C(sc)) @@ -653,7 +668,10 @@ rtsx_bus_power_on(struct rtsx_softc *sc) * delay in between. */ - if (RTSX_IS_RTS5209(sc) || RTSX_IS_RTS5227(sc) || RTSX_IS_RTS5229(sc)) { + if (RTSX_IS_RTS5209(sc) + || RTSX_IS_RTS5227(sc) + || RTSX_IS_RTS5229(sc) + || RTSX_IS_RTS525A(sc)) { /* Partial power. */ RTSX_SET(sc, RTSX_CARD_PWR_CTL, RTSX_SD_PARTIAL_PWR_ON); if (RTSX_IS_RTS5209(sc)) Index: src/sys/dev/ic/rtsxreg.h diff -u src/sys/dev/ic/rtsxreg.h:1.2 src/sys/dev/ic/rtsxreg.h:1.2.12.1 --- src/sys/dev/ic/rtsxreg.h:1.2 Wed Oct 29 14:24:09 2014 +++ src/sys/dev/ic/rtsxreg.h Thu Jun 14 19:57:24 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: rtsxreg.h,v 1.2 2014/10/29 14:24:09 nonaka Exp $ */ +/* $NetBSD: rtsxreg.h,v 1.2.12.1 2018/06/14 19:57:24 martin Exp $ */ /* $OpenBSD: rtsxreg.h,v 1.3 2013/11/26 20:33:16 deraadt Exp $ */ /* @@ -544,6 +544,14 @@ #define RTSX_DUMMY_REG 0xFE90 +#define RTSX_LDO_VCC_CFG1 0xFF73 +#define RTSX_LDO_VCC_REF_TUNE_MASK 0x30 +#define RTSX_LDO_VCC_REF_1V2 0x20 +#define RTSX_LDO_VCC_TUNE_MASK 0x07 +#define RTSX_LDO_VCC_1V8 0x04 +#define RTSX_LDO_VCC_3V3 0x07 +#define RTSX_LDO_VCC_LMT_EN 0x08 + #define RTSX_SG_INT 0x04 #define RTSX_SG_END 0x02 #define RTSX_SG_VALID 0x01 Index: src/sys/dev/ic/rtsxvar.h diff -u src/sys/dev/ic/rtsxvar.h:1.2 src/sys/dev/ic/rtsxvar.h:1.2.12.1 --- src/sys/dev/ic/rtsxvar.h:1.2 Wed Oct 29 14:24:09 2014 +++ src/sys/dev/ic/rtsxvar.h Thu Jun 14 19:57:24 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: rtsxvar.h,v 1.2 2014/10/29 14:24:09 nonaka Exp $ */ +/* $NetBSD: rtsxvar.h,v 1.2.12.1 2018/06/14 19:57:24 martin Exp $ */ /* $OpenBSD: rtsxvar.h,v 1.3 2014/08/19 17:55:03 phessler Exp $ */ /* @@ -57,10 +57,11 @@ struct rtsx_softc { #define RTSX_F_5227 __BIT(3) #define RTSX_F_5229 __BIT(4) #define RTSX_F_5229_TYPE_C __BIT(5) -#define RTSX_F_8402 __BIT(6) -#define RTSX_F_8411 __BIT(7) -#define RTSX_F_8411B __BIT(8) -#define RTSX_F_8411B_QFN48 __BIT(9) +#define RTSX_F_525A __BIT(6) +#define RTSX_F_8402 __BIT(7) +#define RTSX_F_8411 __BIT(8) +#define RTSX_F_8411B __BIT(9) +#define RTSX_F_8411B_QFN48 __BIT(10) }; #define RTSX_IS_RTS5209(sc) (((sc)->sc_flags & RTSX_F_5209) == RTSX_F_5209) @@ -69,6 +70,7 @@ struct rtsx_softc { #define RTSX_IS_RTS5229_TYPE_C(sc) \ (((sc)->sc_flags & (RTSX_F_5229|RTSX_F_5229_TYPE_C)) == \ (RTSX_F_5229|RTSX_F_5229_TYPE_C)) +#define RTSX_IS_RTS525A(sc) (((sc)->sc_flags & RTSX_F_525A) == RTSX_F_525A) #define RTSX_IS_RTL8402(sc) (((sc)->sc_flags & RTSX_F_8402) == RTSX_F_8402) #define RTSX_IS_RTL8411(sc) (((sc)->sc_flags & RTSX_F_8411) == RTSX_F_8411) #define RTSX_IS_RTL8411B(sc) \ Index: src/sys/dev/pci/pcidevs diff -u src/sys/dev/pci/pcidevs:1.1289.2.7 src/sys/dev/pci/pcidevs:1.1289.2.8 --- src/sys/dev/pci/pcidevs:1.1289.2.7 Thu Jun 7 18:12:17 2018 +++ src/sys/dev/pci/pcidevs Thu Jun 14 19:57:24 2018 @@ -1,4 +1,4 @@ -$NetBSD: pcidevs,v 1.1289.2.7 2018/06/07 18:12:17 martin Exp $ +$NetBSD: pcidevs,v 1.1289.2.8 2018/06/14 19:57:24 martin Exp $ /* * Copyright (c) 1995, 1996 Christopher G. Demetriou @@ -6509,6 +6509,7 @@ product REALTEK RTS5209 0x5209 RTS5209 product REALTEK RTS5227 0x5227 RTS5227 PCI-E Card Reader product REALTEK RTS5229 0x5229 RTS5229 PCI-E Card Reader product REALTEK RTS5249 0x5249 RTS5249 PCI-E Card Reader +product REALTEK RTS525A 0x525A RTS525A PCI-E Card Reader product REALTEK RTL8402 0x5286 RTL8402 PCI-E Card Reader product REALTEK RTL8411B 0x5287 RTL8411B PCI-E Card Reader product REALTEK RTL8411 0x5289 RTL8411 PCI-E Card Reader Index: src/sys/dev/pci/rtsx_pci.c diff -u src/sys/dev/pci/rtsx_pci.c:1.6 src/sys/dev/pci/rtsx_pci.c:1.6.10.1 --- src/sys/dev/pci/rtsx_pci.c:1.6 Thu Jul 7 06:55:41 2016 +++ src/sys/dev/pci/rtsx_pci.c Thu Jun 14 19:57:24 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: rtsx_pci.c,v 1.6 2016/07/07 06:55:41 msaitoh Exp $ */ +/* $NetBSD: rtsx_pci.c,v 1.6.10.1 2018/06/14 19:57:24 martin Exp $ */ /* $OpenBSD: rtsx_pci.c,v 1.7 2014/08/19 17:55:03 phessler Exp $ */ @@ -20,7 +20,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rtsx_pci.c,v 1.6 2016/07/07 06:55:41 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rtsx_pci.c,v 1.6.10.1 2018/06/14 19:57:24 martin Exp $"); #include <sys/param.h> #include <sys/device.h> @@ -36,7 +36,8 @@ __KERNEL_RCSID(0, "$NetBSD: rtsx_pci.c,v #include <dev/sdmmc/sdmmcvar.h> -#define RTSX_PCI_BAR 0x10 +#define RTSX_PCI_BAR 0x10 +#define RTSX_PCI_BAR_525A 0x14 struct rtsx_pci_softc { struct rtsx_softc sc; @@ -78,6 +79,7 @@ rtsx_pci_match(device_t parent, cfdata_t case PCI_PRODUCT_REALTEK_RTS5209: case PCI_PRODUCT_REALTEK_RTS5227: case PCI_PRODUCT_REALTEK_RTS5229: + case PCI_PRODUCT_REALTEK_RTS525A: case PCI_PRODUCT_REALTEK_RTL8402: case PCI_PRODUCT_REALTEK_RTL8411: case PCI_PRODUCT_REALTEK_RTL8411B: @@ -100,11 +102,40 @@ rtsx_pci_attach(device_t parent, device_ bus_space_handle_t ioh; bus_size_t size; uint32_t flags; + int bar = RTSX_PCI_BAR; char intrbuf[PCI_INTRSTR_LEN]; sc->sc.sc_dev = self; sc->sc_pc = pc; + switch (PCI_PRODUCT(pa->pa_id)) { + case PCI_PRODUCT_REALTEK_RTS5209: + flags = RTSX_F_5209; + break; + case PCI_PRODUCT_REALTEK_RTS5227: + flags = RTSX_F_5227; + break; + case PCI_PRODUCT_REALTEK_RTS5229: + flags = RTSX_F_5229; + break; + case PCI_PRODUCT_REALTEK_RTS525A: + flags = RTSX_F_525A; + bar = RTSX_PCI_BAR_525A; + break; + case PCI_PRODUCT_REALTEK_RTL8402: + flags = RTSX_F_8402; + break; + case PCI_PRODUCT_REALTEK_RTL8411: + flags = RTSX_F_8411; + break; + case PCI_PRODUCT_REALTEK_RTL8411B: + flags = RTSX_F_8411B; + break; + default: + flags = 0; + break; + } + pci_aprint_devinfo(pa, NULL); if ((pci_conf_read(pc, tag, RTSX_CFG_PCI) & RTSX_CFG_ASIC) != 0) { @@ -112,7 +143,7 @@ rtsx_pci_attach(device_t parent, device_ return; } - if (pci_mapreg_map(pa, RTSX_PCI_BAR, PCI_MAPREG_TYPE_MEM, 0, + if (pci_mapreg_map(pa, bar, PCI_MAPREG_TYPE_MEM, 0, &iot, &ioh, NULL, &size)) { aprint_error_dev(self, "couldn't map registers\n"); return; @@ -139,30 +170,6 @@ rtsx_pci_attach(device_t parent, device_ /* Power up the device */ pci_set_powerstate(pc, tag, PCI_PMCSR_STATE_D0); - switch (PCI_PRODUCT(pa->pa_id)) { - case PCI_PRODUCT_REALTEK_RTS5209: - flags = RTSX_F_5209; - break; - case PCI_PRODUCT_REALTEK_RTS5227: - flags = RTSX_F_5227; - break; - case PCI_PRODUCT_REALTEK_RTS5229: - flags = RTSX_F_5229; - break; - case PCI_PRODUCT_REALTEK_RTL8402: - flags = RTSX_F_8402; - break; - case PCI_PRODUCT_REALTEK_RTL8411: - flags = RTSX_F_8411; - break; - case PCI_PRODUCT_REALTEK_RTL8411B: - flags = RTSX_F_8411B; - break; - default: - flags = 0; - break; - } - if (rtsx_attach(&sc->sc, iot, ioh, size, pa->pa_dmat, flags) != 0) { aprint_error_dev(self, "couldn't initialize chip\n"); return;