On Fri, May 05, 2017 at 02:26:51PM +0200, Mark Kettenis wrote:
> I'm working on support for the SDHC controller on the Rockchip RK3399
> such that I can use the onboard eMMC on the Firefly-RK3399. This
> controller is based on the Arasan eMMC 5.1 "IP", which has a standard
> SDHC 3.0 interface. However there are some minor quirks.
>
> Setting the signalling voltage to 1.8V (which is the only setting the
> device supports) doesn't work. For this reason, I add a hook to
> override the sdhc_signal_voltage() function just like we did for the
> sdhc_card_detect() function a while ago.
>
> I also can't get the double-data rate mode to work. So I added a flag
> that disables the DDR52 mode when set. My intention is to remove that
> flag again if I get DDR52 to work on my board.
>
> ok?
I thought you didn't want too many quirks in there. :) No objections
though, ok by me apart from a whitespace thing.
>
>
> Index: dev/sdmmc/sdhc.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/sdmmc/sdhc.c,v
> retrieving revision 1.54
> diff -u -p -r1.54 sdhc.c
> --- dev/sdmmc/sdhc.c 6 Apr 2017 03:15:29 -0000 1.54
> +++ dev/sdmmc/sdhc.c 5 May 2017 12:17:48 -0000
> @@ -25,6 +25,7 @@
> #include <sys/device.h>
> #include <sys/kernel.h>
> #include <sys/malloc.h>
> +#include <sys/proc.h>
> #include <sys/systm.h>
>
> #include <dev/sdmmc/sdhcreg.h>
> @@ -317,6 +318,9 @@ sdhc_host_found(struct sdhc_softc *sc, b
> saa.caps |= SMC_CAPS_MMC_DDR52;
> }
>
> + if (ISSET(sc->sc_flags, SDHC_F_NODDR50))
> + saa.caps &= ~SMC_CAPS_MMC_DDR52;
Replace those 4 spaces with a tab.
> +
> hp->sdmmc = config_found(&sc->sc_dev, &saa, NULL);
> if (hp->sdmmc == NULL) {
> error = 0;
> @@ -683,6 +687,9 @@ int
> sdhc_signal_voltage(sdmmc_chipset_handle_t sch, int signal_voltage)
> {
> struct sdhc_host *hp = sch;
> +
> + if (hp->sc->sc_signal_voltage)
> + return hp->sc->sc_signal_voltage(hp->sc, signal_voltage);
>
> if (SDHC_SPEC_VERSION(hp->version) < SDHC_SPEC_V3)
> return EINVAL;
> Index: dev/sdmmc/sdhcvar.h
> ===================================================================
> RCS file: /cvs/src/sys/dev/sdmmc/sdhcvar.h,v
> retrieving revision 1.9
> diff -u -p -r1.9 sdhcvar.h
> --- dev/sdmmc/sdhcvar.h 30 Apr 2016 11:32:23 -0000 1.9
> +++ dev/sdmmc/sdhcvar.h 5 May 2017 12:17:48 -0000
> @@ -32,6 +32,7 @@ struct sdhc_softc {
> bus_dma_tag_t sc_dmat;
>
> int (*sc_card_detect)(struct sdhc_softc *);
> + int (*sc_signal_voltage)(struct sdhc_softc *, int);
> };
>
> /* Host controller functions called by the attachment driver. */
> @@ -45,5 +46,6 @@ void sdhc_needs_discover(struct sdhc_sof
>
> /* flag values */
> #define SDHC_F_NOPWR0 (1 << 0)
> +#define SDHC_F_NODDR50 (1 << 1)
>
> #endif
>