Module Name: src Committed By: ryo Date: Fri Jun 23 08:43:59 UTC 2017
Modified Files: src/sys/dev/sdmmc: sdhc.c sdhcreg.h Log Message: fix problem for ESDHC/USDHC due to change of r1.96 on ESDHC/USDHC, even if the iosize is less than SDHC_HOST_CTL_VERSION, specver must be an appropriate value. To generate a diff of this commit: cvs rdiff -u -r1.100 -r1.101 src/sys/dev/sdmmc/sdhc.c cvs rdiff -u -r1.18 -r1.19 src/sys/dev/sdmmc/sdhcreg.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/sdmmc/sdhc.c diff -u src/sys/dev/sdmmc/sdhc.c:1.100 src/sys/dev/sdmmc/sdhc.c:1.101 --- src/sys/dev/sdmmc/sdhc.c:1.100 Sat Apr 22 21:49:41 2017 +++ src/sys/dev/sdmmc/sdhc.c Fri Jun 23 08:43:59 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: sdhc.c,v 1.100 2017/04/22 21:49:41 jmcneill Exp $ */ +/* $NetBSD: sdhc.c,v 1.101 2017/06/23 08:43:59 ryo Exp $ */ /* $OpenBSD: sdhc.c,v 1.25 2009/01/13 19:44:20 grange Exp $ */ /* @@ -23,7 +23,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sdhc.c,v 1.100 2017/04/22 21:49:41 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sdhc.c,v 1.101 2017/06/23 08:43:59 ryo Exp $"); #ifdef _KERNEL_OPT #include "opt_sdmmc.h" @@ -292,42 +292,41 @@ sdhc_host_found(struct sdhc_softc *sc, b callout_init(&hp->tuning_timer, CALLOUT_MPSAFE); callout_setfunc(&hp->tuning_timer, sdhc_tuning_timer, hp); - if (iosize <= SDHC_HOST_CTL_VERSION) { - aprint_normal_dev(sc->sc_dev, "SDHC NO-VERS"); - hp->specver = -1; + if (ISSET(hp->sc->sc_flags, SDHC_FLAG_USDHC)) { + sdhcver = SDHC_SPEC_VERS_300 << SDHC_SPEC_VERS_SHIFT; + } else if (ISSET(hp->sc->sc_flags, SDHC_FLAG_ENHANCED)) { + sdhcver = HREAD4(hp, SDHC_ESDHC_HOST_CTL_VERSION); + } else if (iosize <= SDHC_HOST_CTL_VERSION) { + sdhcver = SDHC_SPEC_NOVERS << SDHC_SPEC_VERS_SHIFT; } else { - if (ISSET(hp->sc->sc_flags, SDHC_FLAG_USDHC)) { - sdhcver = SDHC_SPEC_VERS_300 << SDHC_SPEC_VERS_SHIFT; - } else if (ISSET(hp->sc->sc_flags, SDHC_FLAG_ENHANCED)) { - sdhcver = HREAD4(hp, SDHC_ESDHC_HOST_CTL_VERSION); - } else - sdhcver = HREAD2(hp, SDHC_HOST_CTL_VERSION); - aprint_normal_dev(sc->sc_dev, "SDHC "); - hp->specver = SDHC_SPEC_VERSION(sdhcver); - switch (SDHC_SPEC_VERSION(sdhcver)) { - case SDHC_SPEC_VERS_100: - aprint_normal("1.0"); - break; - - case SDHC_SPEC_VERS_200: - aprint_normal("2.0"); - break; - - case SDHC_SPEC_VERS_300: - aprint_normal("3.0"); - break; - - case SDHC_SPEC_VERS_400: - aprint_normal("4.0"); - break; - - default: - aprint_normal("unknown version(0x%x)", - SDHC_SPEC_VERSION(sdhcver)); - break; - } - aprint_normal(", rev %u", SDHC_VENDOR_VERSION(sdhcver)); + sdhcver = HREAD2(hp, SDHC_HOST_CTL_VERSION); + } + aprint_normal_dev(sc->sc_dev, "SDHC "); + hp->specver = SDHC_SPEC_VERSION(sdhcver); + switch (SDHC_SPEC_VERSION(sdhcver)) { + case SDHC_SPEC_VERS_100: + aprint_normal("1.0"); + break; + case SDHC_SPEC_VERS_200: + aprint_normal("2.0"); + break; + case SDHC_SPEC_VERS_300: + aprint_normal("3.0"); + break; + case SDHC_SPEC_VERS_400: + aprint_normal("4.0"); + break; + case SDHC_SPEC_NOVERS: + hp->specver = -1; + aprint_normal("NO-VERS"); + break; + default: + aprint_normal("unknown version(0x%x)", + SDHC_SPEC_VERSION(sdhcver)); + break; } + if (SDHC_SPEC_VERSION(sdhcver) != SDHC_SPEC_NOVERS) + aprint_normal(", rev %u", SDHC_VENDOR_VERSION(sdhcver)); /* * Reset the host controller and enable interrupts. Index: src/sys/dev/sdmmc/sdhcreg.h diff -u src/sys/dev/sdmmc/sdhcreg.h:1.18 src/sys/dev/sdmmc/sdhcreg.h:1.19 --- src/sys/dev/sdmmc/sdhcreg.h:1.18 Thu Dec 31 11:53:19 2015 +++ src/sys/dev/sdmmc/sdhcreg.h Fri Jun 23 08:43:59 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: sdhcreg.h,v 1.18 2015/12/31 11:53:19 ryo Exp $ */ +/* $NetBSD: sdhcreg.h,v 1.19 2017/06/23 08:43:59 ryo Exp $ */ /* $OpenBSD: sdhcreg.h,v 1.4 2006/07/30 17:20:40 fgsch Exp $ */ /* @@ -246,6 +246,7 @@ #define SDHC_SPEC_VERS_200 0x01 #define SDHC_SPEC_VERS_300 0x02 #define SDHC_SPEC_VERS_400 0x03 +#define SDHC_SPEC_NOVERS 0xff /* dummy */ /* SDHC_CAPABILITIES decoding */ #define SDHC_BASE_V3_FREQ_KHZ(cap) \