IMX6SLL-EVK setting the register uSHDC3_VEND_SPEC.VSELECT to 1

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

IMX6SLL-EVK setting the register uSHDC3_VEND_SPEC.VSELECT to 1

1,001 Views
pandivijayaraj
Contributor I

Hi All,

 

I am interfacing an external WiFi module card supporting SDIO 3.0 with IMX6SLL-EVK host platform.

IMX6SLL-EVK host is running u-boot-2008.01  & Linux kernel 4.9.11.

The SDIO port used is uSDHC3.  The WIFI card is inserted with 1.8v operation settings.

When the WiFi card is inserted into the uSDHC3 slot, the MMC initialization tuning starts at 3.3v and some times its reaching 1.8v. sometimes it causes MMC handshake failure and MMC timeout crash.

To avoid this the uSDHC3 port should be starting with 1.8v SDIO signal settings.

I am trying to set the register value uSDHC3_VEND_SPEC.VSELECT to 1.

Where should it be done? Either in u-boot or kernel?

what are the device tree settings needed for uSDHC3 in iMX6SLL-EVK.dts file?

If it can be done in kernel, pls guide me @@to set this value.

Labels (4)
0 Kudos
3 Replies

644 Views
pandivijayaraj
Contributor I

Hi,

I have came across the below threads and started patching the u-boot and kernel according to the patches provided.

How to configure mmc/sdio 1.8v on imx6 linux 3.10.17 BSP 

i.MX6 SoloX SABRE SD - SD3 port - Unable to select NVCC_LOW 

First I have ported the kernel patch "L3.10.17_1.0.0_MX6SL_SDHC3_1v8_kernel"  to the 4.9.11 kernel which I have used for iMX6SLL-EVK. But it did not have any effect. Still the SDIO WiFi card receives 3.3V signal.

ubuntu@arm:~$ sudo cat /sys/kernel/debug/mmc2/ios
clock: 208000000 Hz
actual clock: 198000000 Hz
vdd: 18 (3.0 ~ 3.1 V)
bus mode: 2 (push-pull)
chip select: 0 (don't care)
power mode: 2 (on)
bus width: 2 (4 bits)
timing spec: 6 (sd uhs SDR104)
signal voltage: 1 (1.80 V)
driver type: 0 (driver type B)

The u-boot patch, I could not apply directly because the u-boot.2018.01 which is used for iMX6SLL-EVK has changes from the version patch provided.

ALso, I am observing that in the file "board/freescale/mx6sllevk/mx6sllevk.c" there is NO assignment for mux pad control "MUX_PAD_CTRL" for the USDHC pads. 

whereas the similar board file "board/freescale/mx6slevk/mx6slevk.c" has the assignments for all the uSDHCx ports as given below.

static iomux_v3_cfg_t const usdhc3_pads[] = { MX6_PAD_SD3_CLK__USDHC3_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL),     MX6_PAD_SD3_CMD__USDHC3_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL),     MX6_PAD_SD3_DAT0__USDHC3_DAT0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),     MX6_PAD_SD3_DAT1__USDHC3_DAT1 | MUX_PAD_CTRL(USDHC_PAD_CTRL),     MX6_PAD_SD3_DAT2__USDHC3_DAT2 | MUX_PAD_CTRL(USDHC_PAD_CTRL),     MX6_PAD_SD3_DAT3__USDHC3_DAT3 | MUX_PAD_CTRL(USDHC_PAD_CTRL),      /*CD pin*/     MX6_PAD_REF_CLK_32K__GPIO_3_22 | MUX_PAD_CTRL(NO_PAD_CTRL),};

should we need to assign similarly for the file "mx6sllevk.c" also? 

Also, what are the values to be assigned for all the _SD3_VSELECT macros defined in the file u-boot-2018.01/arch/arm/dts/imx6sll-pinfunc.h

#define MX6SLL_PAD_KEY_ROW6__SD3_VSELECT                          0x0058 0x0320 0x0000 0x6 0x0
#define MX6SLL_PAD_EPDC_PWR_IRQ__SD3_VSELECT                      0x00F8 0x03C0 0x0000 0x6 0x0
#define MX6SLL_PAD_I2C1_SDA__SD3_VSELECT                          0x01A0 0x0468 0x0000 0x4 0x0
#define MX6SLL_PAD_GPIO4_IO17__SD3_VSELECT                        0x0254 0x051C 0x0000 0x4 0x0

Should the same values be applied in kernel also?
kindly clarify this 

Regards,
Pandi Vijayaraj


0 Kudos

644 Views
max_tsai
NXP Employee
NXP Employee

hi Pandi,

--
Out of RESET, SD3 IF signals are set as high impedance inputs, and the pads can be programmed as 1.8V level (Low Voltage) by setting LVE = 1 in IOMUXC Pad Control Registers.

On our EVK board, the SD3 connector (J3) is powered from VCC_WiFi which is 3.15V. If the customer wants to fix the SD3 If at 1.8V, its power source shall be changed to 1.8V also.

--

6SLL can configure 1.8v by LVE.

pastedImage_6.png

To enable LVE for SD3_DATA0 is to change 0x170e9 to 0x4170e9. Kernel has similar setting on arch/arm/boot/dts/imx6sll-evk.dts

u-boot, arch/arm/dts/imx6sll-evk.dts

pinctrl_usdhc3_200mhz: usdhc3grp_200mhz {
fsl,pins = <
MX6SLL_PAD_SD3_CMD__SD3_CMD 0x170e9
MX6SLL_PAD_SD3_CLK__SD3_CLK 0x130f9
MX6SLL_PAD_SD3_DATA0__SD3_DATA0 0x170e9
MX6SLL_PAD_SD3_DATA1__SD3_DATA1 0x170e9
MX6SLL_PAD_SD3_DATA2__SD3_DATA2 0x170e9
MX6SLL_PAD_SD3_DATA3__SD3_DATA3 0x170e9
>;
};

Regarding "L3.10.17_1.0.0_MX6SL_SDHC3_1v8_kernel" it doesn't let mmc driver switch voltage by force 1.8v. 

Regards,

Max

0 Kudos

644 Views
igorpadykov
NXP Employee
NXP Employee

Hi Pandi

I believe one can set similar changes to file "mx6sllevk.c" also, but more proper way to

post this on uboot mail list

U-Boot Info Page 

Best regards
igor
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------

0 Kudos