eMMC 4.51

John Tobias john.tobias.ph at gmail.com
Tue Oct 8 22:00:58 EDT 2013


Hello,

I am using git://gitorious.org/thierryreding/linux-next.git to boot my
custom board based on iMX6 sololite. My board has SanDisk iNAND 4.51
I/F and wifi module (Marvel SD8797). The latest update of
sdhci-esdhc-imx.c supports DDR50/SDR50/SDR104 and I would like to use
it for my device.

In my .dts file, I have the following settings:

/* WIFI module */
&usdhc2 {
pinctrl-names = "default", "state_100mhz", "state_200mhz";
pinctrl-0 = <&pinctrl_usdhc2_2_default>;
pinctrl-1 = <&pinctrl_usdhc2_3_100mhz>;
pinctrl-2 = <&pinctrl_usdhc2_4_200mhz>;
bus-width = <4>;
status = "okay";
};

/* eMMC module  */
&usdhc4 {
pinctrl-names = "default", "state_100mhz", "state_200mhz";
pinctrl-0 = <&pinctrl_usdhc4_2_default>;
pinctrl-1 = <&pinctrl_usdhc4_3_100mhz>;
pinctrl-2 = <&pinctrl_usdhc4_4_200mhz>;
bus-width = <8>;
status = "okay";
compatible = "fsl,imx6sl-usdhc", "fsl,imx6q-usdhc";
reg = <0x0219c000 0x4000>;
};

Then, in my .dtsi file:

usdhc2 {
/*WIFI pinmux */
pinctrl_usdhc2_2_default: default {
fsl,pins = <
EVT1_PAD_SD2_CMD__SD2_CMD     0x17039
EVT1_PAD_SD2_CLK__SD2_CLK     0x17039
EVT1_PAD_SD2_DATA0__SD2_DATA0 0x17039
EVT1_PAD_SD2_DATA1__SD2_DATA1 0x17039
EVT1_PAD_SD2_DATA2__SD2_DATA2 0x17039
EVT1_PAD_SD2_DATA3__SD2_DATA3 0x17039
>;
};

pinctrl_usdhc2_3_100mhz: state_100mhz { /* 100Mhz */
fsl,pins = <
EVT1_PAD_SD2_CMD__SD2_CMD 0x170B9
EVT1_PAD_SD2_CLK__SD2_CLK 0x100B9
EVT1_PAD_SD2_DATA0__SD2_DATA0 0x170B9
EVT1_PAD_SD2_DATA1__SD2_DATA1 0x170B9
EVT1_PAD_SD2_DATA2__SD2_DATA2 0x170B9
EVT1_PAD_SD2_DATA3__SD2_DATA3 0x170B9
>;
};

pinctrl_usdhc2_4_200mhz: state_200mhz { /* 200Mhz */
fsl,pins = <
EVT1_PAD_SD2_CMD__SD2_CMD 0x170F9
EVT1_PAD_SD2_CLK__SD2_CLK 0x100F9
EVT1_PAD_SD2_DATA0__SD2_DATA0 0x170F9
EVT1_PAD_SD2_DATA1__SD2_DATA1 0x170F9
EVT1_PAD_SD2_DATA2__SD2_DATA2 0x170F9
EVT1_PAD_SD2_DATA3__SD2_DATA3 0x170F9
>;
};
};

usdhc4 {
/* eMMC pinmux */
pinctrl_usdhc4_2_default: default {
fsl,pins = <
EVT1_PAD_EPDC_BDR1__SD4_CMD       0x17039
EVT1_PAD_EPDC_BDR0__SD4_CLK       0x10039
EVT1_PAD_EPDC_PWR_COM__SD4_DATA0  0x17039
EVT1_PAD_EPDC_PWR_IRQ__SD4_DATA1  0x17039
EVT1_PAD_EPDC_PWR_STAT__SD4_DATA2 0x17039
EVT1_PAD_EPDC_PWR_WAKE__SD4_DATA3 0x17039
EVT1_PAD_FEC_MDC__SD4_DATA4 0x17039
EVT1_PAD_FEC_RX_DATA0__SD4_DATA5  0x17039
EVT1_PAD_FEC_TX_EN__SD4_DATA6     0x17039
EVT1_PAD_FEC_TX_DATA1__SD4_DATA7  0x17039
>;
};

pinctrl_usdhc4_3_100mhz: state_100mhz { /* 100Mhz */
fsl,pins = <
EVT1_PAD_EPDC_BDR1__SD4_CMD 0x170B9
EVT1_PAD_EPDC_BDR0__SD4_CLK   0x100B9
EVT1_PAD_EPDC_PWR_COM__SD4_DATA0 0x170B9
EVT1_PAD_EPDC_PWR_IRQ__SD4_DATA1 0x170B9
EVT1_PAD_EPDC_PWR_STAT__SD4_DATA2 0x170B9
EVT1_PAD_EPDC_PWR_WAKE__SD4_DATA3 0x170B9
EVT1_PAD_FEC_MDC__SD4_DATA4 0x170B9
EVT1_PAD_FEC_RX_DATA0__SD4_DATA5  0x170B9
EVT1_PAD_FEC_TX_EN__SD4_DATA6     0x170B9
EVT1_PAD_FEC_TX_DATA1__SD4_DATA7  0x170B9
>;
};

pinctrl_usdhc4_4_200mhz: state_200mhz { /* 200Mhz */
fsl,pins = <
EVT1_PAD_EPDC_BDR1__SD4_CMD 0x170F9
EVT1_PAD_EPDC_BDR0__SD4_CLK   0x100F9
EVT1_PAD_EPDC_PWR_COM__SD4_DATA0 0x170F9
EVT1_PAD_EPDC_PWR_IRQ__SD4_DATA1 0x170F9
EVT1_PAD_EPDC_PWR_STAT__SD4_DATA2 0x170F9
EVT1_PAD_EPDC_PWR_WAKE__SD4_DATA3 0x170F9
EVT1_PAD_FEC_MDC__SD4_DATA4 0x170F9
EVT1_PAD_FEC_RX_DATA0__SD4_DATA5  0x170F9
EVT1_PAD_FEC_TX_EN__SD4_DATA6     0x170F9
EVT1_PAD_FEC_TX_DATA1__SD4_DATA7  0x170F9
>;
};
};


1. After using the said pinmux settings, the sdhci-esdh-imx controller
wasn't able to configure it correctly due the the group name for the
two port were the same (default, state_100mhz, state_200mhz).

2. Then, I temporarily disabled usdhc4 to test if the driver able to
enable the SDR50 for my wifi. Then, I was getting the following
errors:

[    1.655024] mmc0: error -110 whilst initialising SDIO card
[    3.746340] mmc0: error -110 whilst initialising SDIO card
[    3.818624] mmc0: host doesn't support card's voltages
[    3.823783] mmc0: error -22 whilst initialising SDIO card
[    3.901670] mmc0: host doesn't support card's voltages
[    3.906862] mmc0: error -22 whilst initialising SDIO card
[   34.307777] mmc0: host doesn't support card's voltages
[   34.312980] mmc0: error -22 whilst initialising SDIO card

3. Then, I tried the eMMC to see if the driver able to enable the
DDR50. After booting it, the kernel detect the eMMC only in hight
speed mode.


I would like to know if anyone here can help me to figure out how to
enable the DDR50 for my eMMC and SDR50 for my wifi as well.

Regards,

john



More information about the linux-arm-kernel mailing list