This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AM4372: detection of SDIO-based WiFi module

Part Number: AM4372

Hi,

We are using an AM4372-based custom design with a Silicon Labs WFM200 WiFi module connected via MMC3 as SDIO. The module is not being detected by Linux as SDIO device and so we are trying to understand what is going wrong. From an electrical and pin connections point everything seems to be fine.

First question:

The WFM200 module has a bit of a tricky way to enter SDIO mode (by default it is in SPI mode) and, to exclude this as a potential reason for our problems, we would like to do enhanced testing with the reset and delay pins of the module from the Linux prompt.

Will shdci-omap detect a new SDIO module at runtime or does this only work during boot?

Second question:

Below our devicetree configuration. We have removed any special options like wakeup etc. just to get the basic function work first.

Do you have any comments or ideas if this may cause the SDIO module not being detected?

mmc3_pins: mmc3_pins {
		pinctrl-single,pins = <
			AM4372_IOPAD(0x88C, PIN_INPUT | MUX_MODE3) // (A12) mmc0_clk.mmc0_clk 
			AM4372_IOPAD(0x888, PIN_INPUT | MUX_MODE3) // (B12) mmc0_cmd.mmc0_cmd 
			AM4372_IOPAD(0x844, PIN_INPUT | MUX_MODE3) // (C5) mmc0_dat0.mmc0_dat0 
			AM4372_IOPAD(0x848, PIN_INPUT | MUX_MODE3) // (C6) mmc0_dat1.mmc0_dat1 
			AM4372_IOPAD(0x84C, PIN_INPUT | MUX_MODE3) // (A4) mmc0_dat2.mmc0_dat2 
			AM4372_IOPAD(0x878, PIN_INPUT | MUX_MODE3) // (A3) mmc0_dat3.mmc0_dat3 
		>;
	};


&mmc3 {
	status = "okay";
	dmas = <&edma_xbar 30 0 1>,
		   <&edma_xbar 31 0 2>;
	dma-names = "tx", "rx";
	pinctrl-names = "default";
	pinctrl-0 = <&mmc3_pins>;
	vmmc-supply = <&dcdc4>;
	bus-width = <4>;
	cap-power-off-card;
	ti,non-removable;
	#address-cells = <1>;
	#size-cells = <0>;

	wfx: wfx@1 { 
		compatible = "silabs,wfx-sdio";
		reg = <1>;
	};	
};

Thank you and regards
Peter

 

  • Hi Peter,

    Your query has been assigned to the expert. Due to the US holidays, the response will be delayed.

  • Hello Peter,

    * What version of Linux are you using?

    * I cannot support Silicon Labs parts or software on this forum. I can take a look at the MMC portion of your question, but you may need to reach out to Silicon Labs for assistance on how to get their part working with a Linux system.

    I do not see "silabs,wfx-sdio" in AM437x Linux Processor SDK 6.3 drivers/ or Documentation/devicetree/bindings/ so I am guessing the driver was not upstreamed for Linux 4.19? I am not sure how Silicon Labs distributes their software or documents it.

    By checking arch/arm/boot/dts/am4372.dtsi we see device tree mmc3 --> 0x4781_0000. By checking the AM437x Technical Reference Manual (TRM) Memory Map, that is associated with MMCSD2. Is there a reason your device tree pinmuxing is for mmc0_xxx instead of mmc2_xxx?

    Regards,

    Nick

  • Hello Nick,

    I fully understand that you cannot support a competitor's product but we need to start somewhere and so I prefer to start with the hardware which we are not going to change and then to move on to see if the additional part is working or if we need to replace it in our design.

    We are using Linux kernel 4.19.59 from your am437x-evm-06.01.00.08 SDK. On top there is a Debian Linux but I do not think this should make a difference in this case.

    In our design we have mmc1 which is the on-board eMMC, mmc2 which is for the SD card and mmc3 which is supposed to be the SDIO for the WiFi. I have attached the dts file (renamed to match your upload filter)  for full reference. However you are correct, we have named peripheral MMC0 as mmc1 and so on. In any case, the first 2 mmcs are working fine.

    The SiLabs driver is not part of the standard Linux kernel. You need to build it manually and then add it as a module. In any case, please correct me if my understanding is wrong, even if there was no driver at all, the SDIO controller of the connected device should be detected as such and only if this happens, then we need to care about driver and driver settings. If this is correct, then - at least for the moment it does not matter if I have a WFM200 or for example a WL1805 connected.

    From my SDIO configuration in the dts, is there anything which looks strange to you or something missing? Or should these settings be fine to detect a correctly working SDIO device?

    In general, does your SDIO driver only detect new SDIO devices once at boot time or - similar to an mmc card - at any time they are connected? If only once, is there a command to force the driver to scan the SDIO bus again once Linux it up?

    Regards
    Peter

    dts-file.txt
    /*
     * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/
     * Copyright (C) 2020 SMaBiT GmbH - http://www.smabit.eu
     *
     * This program is free software; you can redistribute it and/or modify
     * it under the terms of the GNU General Public License version 2 as
     * published by the Free Software Foundation.
     */
    
    /* AM437x SMAWAY */
    
    /dts-v1/;
    
    #include "am4372.dtsi"
    #include "am4372x-sma.dtsi"
    #include <dt-bindings/pinctrl/am43xx.h>
    #include <dt-bindings/pwm/pwm.h>
    #include <dt-bindings/gpio/gpio.h>
    #include <dt-bindings/input/input.h>
    #include <dt-bindings/interrupt-controller/irq.h>
    
    / {
    	model = "SMaBiT SMaWay";
    	compatible = "ti,am437x-gp-evm","ti,am4372","ti,am43","smabit,smaway";
    
    	aliases {
    	
    	};
    
    	chosen {
    		stdout-path = &uart0;
    	};
    
    	leds {
    		compatible = "gpio-leds";
    
    		pinctrl-names = "default";
    		pinctrl-0 = <&leds_pins>;
    
    		led0 {
    			label = "am437x-smaway:red:led0";
    			gpios = <&gpio3 17 GPIO_ACTIVE_HIGH>;
    			// linux,default-trigger = "heartbeat"; 
    			default-state = "off";
    		};
    
    		led1 {
    			label = "am437x-smaway:green:led1";
    			gpios = <&gpio0 6 GPIO_ACTIVE_HIGH>;
    			default-state = "off";
    		};
    
    		led2 {
    			label = "am437x-smaway:blue:led2";
    			gpios = <&gpio0 7 GPIO_ACTIVE_HIGH>;
    			default-state = "off";
    		};
    	};
    
    	/*
    	wfx_pwrseq {
    		compatible = "mmc-pwrseq-simple";
    		pinctrl-names = "default";
    		pinctrl-0 = <&wfx_reset>;
    		reset-gpios = <&gpio5 30 GPIO_ACTIVE_LOW>;
    	};
    	*/
    
    	// fixed 12MHz oscillator
    	refclk: oscillator {
    		#clock-cells = <0>;
    		compatible = "fixed-clock";
    		clock-frequency = <12000000>;
    	};
    
    	// fixed 32k external oscillator clock
        clk_32k_rtc: clk_32k_rtc {
    		#clock-cells = <0>;
    		compatible = "fixed-clock";
    		clock-frequency = <32768>;    
    	};
    };
    
    &am43xx_pinmux {
    	pinctrl-names = "default", "sleep";
    
    	i2c0_pins: i2c0_pins { 
    		pinctrl-single,pins = <
    			AM4372_IOPAD(0x988, PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE0)  // i2c0_sda.i2c0_sda 
    			AM4372_IOPAD(0x98c, PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE0)  // i2c0_scl.i2c0_scl 
    		>;
    	};
    
    	i2c1_pins: i2c1_pins { // I2C Mikrobus A
    		pinctrl-single,pins = <
    			AM4372_IOPAD(0xa08, PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE3) // (AE18) cam0_data0.I2C1_SDA 
    			AM4372_IOPAD(0xa0c, PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE3) // (AB18) cam0_data1.I2C1_SCL 
    		>;
    	};
    
    	i2c2_pins: i2c2_pins { // I2C Mikrobus B
    		pinctrl-single,pins = <
    			AM4372_IOPAD(0x9e8, PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE3) // (AB20) cam1_data0.I2C2_SDA 
    			AM4372_IOPAD(0x9ec, PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE3) // (AC21) cam1_data1.I2C2_SCL 
    
    		>;
    	};
    
    	spi2_pins: spi2_pins {
    		pinctrl-single,pins = <
    			AM4372_IOPAD(0x9d0, PIN_OUTPUT | MUX_MODE4) // (AD24) cam1_data8.spi2_d0 
    			AM4372_IOPAD(0x9dc, PIN_OUTPUT | MUX_MODE4) // (AE21) cam1_pclk.spi2_sclk 
    			AM4372_IOPAD(0x9e0, PIN_OUTPUT | MUX_MODE4) // (AC25) cam1_field.spi2_cs1 
    			AM4372_IOPAD(0x9e4, PIN_OUTPUT | MUX_MODE4) // (AB25) cam1_wen.spi2_d1 
    		>;
    	};
    
    	spi4_pins: spi4_pins {
    		pinctrl-single,pins = <
    			AM4372_IOPAD(0xa50, PIN_OUTPUT | MUX_MODE0) // (P25) spi4_sclk.spi4_sclk 
    			AM4372_IOPAD(0xa54, PIN_OUTPUT | MUX_MODE0) // (R24) spi4_d0.spi4_d0 
    			AM4372_IOPAD(0xa58, PIN_OUTPUT | MUX_MODE0) // (P24) spi4_d1.spi4_d1 
    			AM4372_IOPAD(0xa5c, PIN_OUTPUT | MUX_MODE0) // (N25) spi4_cs0.spi4_cs0 
    		>;
    	};
    
    	mmc1_pins: pinmux_mmc1_pins {
    		pinctrl-single,pins = <
    			AM4372_IOPAD(0x900, PIN_INPUT | MUX_MODE0) // (D1) mmc0_clk.mmc0_clk 
    			AM4372_IOPAD(0x904, PIN_INPUT | MUX_MODE0) // (D2) mmc0_cmd.mmc0_cmd 
    			AM4372_IOPAD(0x8fc, PIN_INPUT | MUX_MODE0) // (C1) mmc0_dat0.mmc0_dat0 
    			AM4372_IOPAD(0x8f8, PIN_INPUT | MUX_MODE0) // (C2) mmc0_dat1.mmc0_dat1 
    			AM4372_IOPAD(0x8f4, PIN_INPUT | MUX_MODE0) // (B2) mmc0_dat2.mmc0_dat2 
    			AM4372_IOPAD(0x8f0, PIN_INPUT | MUX_MODE0) // (B1) mmc0_dat3.mmc0_dat3 
    		>;
    	};
    
    	mmc2_pins: pinmux_mmc2_pins {
    		pinctrl-single,pins = <
    			AM4372_IOPAD(0x880, PIN_INPUT_PULLUP | MUX_MODE2) // (B9) gpmc_csn1.mmc1_clk 
    			AM4372_IOPAD(0x884, PIN_INPUT_PULLUP | MUX_MODE2) // (F10) gpmc_csn2.mmc1_cmd 
    			AM4372_IOPAD(0x820, PIN_INPUT_PULLUP | MUX_MODE2) // (B10) gpmc_ad8.mmc1_dat0 
    			AM4372_IOPAD(0x824, PIN_INPUT_PULLUP | MUX_MODE2) // (A10) gpmc_ad9.mmc1_dat1 
    			AM4372_IOPAD(0x828, PIN_INPUT_PULLUP | MUX_MODE2) // (F11) gpmc_ad10.mmc1_dat2 
    			AM4372_IOPAD(0x82c, PIN_INPUT_PULLUP | MUX_MODE2) // (D11) gpmc_ad11.mmc1_dat3 
    			AM4372_IOPAD(0x830, PIN_INPUT_PULLUP | MUX_MODE2) // (E11) gpmc_ad12.mmc1_dat4 
    			AM4372_IOPAD(0x834, PIN_INPUT_PULLUP | MUX_MODE2) // (C11) gpmc_ad13.mmc1_dat5 
    			AM4372_IOPAD(0x838, PIN_INPUT_PULLUP | MUX_MODE2) // (B11) gpmc_ad14.mmc1_dat6 
    			AM4372_IOPAD(0x83c, PIN_INPUT_PULLUP | MUX_MODE2) // (A11) gpmc_ad15.mmc1_dat7 
    		>;
    	};
    
        mmc3_pins: mmc3_pins {  // WiFi SDIO
    		pinctrl-single,pins = <
    			AM4372_IOPAD(0x88C, PIN_INPUT | MUX_MODE3) // (A12) mmc0_clk.mmc0_clk 
    			AM4372_IOPAD(0x888, PIN_INPUT | MUX_MODE3) // (B12) mmc0_cmd.mmc0_cmd 
    			AM4372_IOPAD(0x844, PIN_INPUT | MUX_MODE3) // (C5) mmc0_dat0.mmc0_dat0 
    			AM4372_IOPAD(0x848, PIN_INPUT | MUX_MODE3) // (C6) mmc0_dat1.mmc0_dat1 
    			AM4372_IOPAD(0x84C, PIN_INPUT | MUX_MODE3) // (A4) mmc0_dat2.mmc0_dat2 
    			AM4372_IOPAD(0x878, PIN_INPUT | MUX_MODE3) // (A3) mmc0_dat3.mmc0_dat3 
    		>;
    	};
    
    	davinci_mdio_default: davinci_mdio_default {
    		pinctrl-single,pins = <
    			// MDIO 
    			AM4372_IOPAD(0x948, PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE0)	// mdio_data.mdio_data 
    			AM4372_IOPAD(0x94c, PIN_OUTPUT_PULLUP | MUX_MODE0)					// mdio_clk.mdio_clk 
    		>;
    	};
    
        davinci_mdio_sleep: davinci_mdio_sleep {
    		pinctrl-single,pins = <
    			// MDIO 
    			AM4372_IOPAD(0x948, PIN_INPUT_PULLDOWN | MUX_MODE7)			// mdio_data.mdio_data 
    			AM4372_IOPAD(0x94c, PIN_INPUT_PULLDOWN | MUX_MODE7)			// mdio_clk.mdio_clk 
    		>;
    	};
    
    	uart0_pins_default: uart0_pins_default { // Serial console
    		pinctrl-single,pins = <
    			AM4372_IOPAD(0x970, PIN_INPUT_PULLUP | SLEWCTRL_FAST | DS0_PULL_UP_DOWN_EN | MUX_MODE0) // uart0_rxd.uart0_rxd 
    			AM4372_IOPAD(0x974, PIN_INPUT | PULL_DISABLE | SLEWCTRL_FAST | DS0_PULL_UP_DOWN_EN | MUX_MODE0) // uart0_txd.uart0_txd 
    		>;
    	};
    
    	uart1_pins_default: uart1_pins_default { // Mikrobus A
    		pinctrl-single,pins = <
    			AM4372_IOPAD(0x980, PIN_INPUT | MUX_MODE0) 			// (K21) uart1_rxd.uart1_rxd 
    			AM4372_IOPAD(0x984, PIN_OUTPUT | MUX_MODE0) 		// (L21) uart1_txd.uart1_txd 
    			/* Disabled. Only enable if dcan0 is disabled. */
    			/* AM4372_IOPAD(0x978, PIN_INPUT | MUX_MODE0) */	// (K22) uart1_ctsn.uart1_ctsn 
    			/* AM4372_IOPAD(0x97c, PIN_OUTPUT | MUX_MODE0) */	// (L22) uart1_rtsn.uart1_rtsn 
    		>;
    	};
    
    	uart2_pins_default: uart2_pins_default { // CC152
    		pinctrl-single,pins = <
    			AM4372_IOPAD(0x9f8, PIN_INPUT | MUX_MODE2) 	// (AD22) cam1_data4.uart2_rxd 
    			AM4372_IOPAD(0x9fc, PIN_OUTPUT | MUX_MODE2) // (AE23) cam1_data5.uart2_txd 
    		>;
    	};
    
    	uart3_pins_default: uart3_pins_default { // Mikrobus B
    		pinctrl-single,pins = <
    			AM4372_IOPAD(0xa28, PIN_INPUT | MUX_MODE0) // (H25) uart3_rxd.uart3_rxd 
    			AM4372_IOPAD(0xa2c, PIN_OUTPUT | MUX_MODE0) // (H24) uart3_txd.uart3_txd 
    		>;
    	};
    	
    	mii1_pins_default: mii1_pins_default {
    		pinctrl-single,pins = <
    			AM4372_IOPAD(0x908, PIN_INPUT | MUX_MODE0) // (D16) mii1_col.gmii1_col 
    			AM4372_IOPAD(0x90c, PIN_INPUT | MUX_MODE0) // (B14) mii1_crs.gmii1_crs 
    			AM4372_IOPAD(0x910, PIN_INPUT | MUX_MODE0) // (B13) mii1_rx_er.gmii1_rxer 
    			AM4372_IOPAD(0x914, PIN_OUTPUT | MUX_MODE0) // (A13) mii1_tx_en.gmii1_txen 
    			AM4372_IOPAD(0x918, PIN_INPUT | MUX_MODE0) // (A15) mii1_rx_dv.gmii1_rxdv 
    			AM4372_IOPAD(0x92c, PIN_INPUT | MUX_MODE0) // (D14) mii1_tx_clk.gmii1_txclk 
    			AM4372_IOPAD(0x930, PIN_INPUT | MUX_MODE0) // (D13) mii1_rx_clk.gmii1_rxclk 
    			AM4372_IOPAD(0x928, PIN_OUTPUT | MUX_MODE0) // (B15) mii1_txd0.gmii1_txd0 
    			AM4372_IOPAD(0x924, PIN_OUTPUT | MUX_MODE0) // (A14) mii1_txd1.gmii1_txd1 
    			AM4372_IOPAD(0x920, PIN_OUTPUT | MUX_MODE0) // (C13) mii1_txd2.gmii1_txd2 
    			AM4372_IOPAD(0x91c, PIN_OUTPUT | MUX_MODE0) // (C16) mii1_txd3.gmii1_txd3 
    			AM4372_IOPAD(0x940, PIN_INPUT | MUX_MODE0) // (F17) mii1_rxd0.gmii1_rxd0 
    			AM4372_IOPAD(0x93c, PIN_INPUT | MUX_MODE0) // (B16) mii1_rxd1.gmii1_rxd1 
    			AM4372_IOPAD(0x938, PIN_INPUT | MUX_MODE0) // (E16) mii1_rxd2.gmii1_rxd2 
    			AM4372_IOPAD(0x934, PIN_INPUT | MUX_MODE0) // (C14) mii1_rxd3.gmii1_rxd3 
    		>;
    	};
    
    	mii1_pins_sleep: mii1_pins_sleep {
    		pinctrl-single,pins = <
    			AM4372_IOPAD(0x908, PIN_INPUT | MUX_MODE0) // (D16) mii1_col.gmii1_col 
    			AM4372_IOPAD(0x90c, PIN_INPUT | MUX_MODE0) // (B14) mii1_crs.gmii1_crs 
    			AM4372_IOPAD(0x910, PIN_INPUT | MUX_MODE0) // (B13) mii1_rx_er.gmii1_rxer 
    			AM4372_IOPAD(0x914, PIN_OUTPUT | MUX_MODE0) // (A13) mii1_tx_en.gmii1_txen 
    			AM4372_IOPAD(0x918, PIN_INPUT | MUX_MODE0) // (A15) mii1_rx_dv.gmii1_rxdv 
    			AM4372_IOPAD(0x92c, PIN_INPUT | MUX_MODE0) // (D14) mii1_tx_clk.gmii1_txclk 
    			AM4372_IOPAD(0x930, PIN_INPUT | MUX_MODE0) // (D13) mii1_rx_clk.gmii1_rxclk 
    			AM4372_IOPAD(0x928, PIN_OUTPUT | MUX_MODE0) // (B15) mii1_txd0.gmii1_txd0 
    			AM4372_IOPAD(0x924, PIN_OUTPUT | MUX_MODE0) // (A14) mii1_txd1.gmii1_txd1 
    			AM4372_IOPAD(0x920, PIN_OUTPUT | MUX_MODE0) // (C13) mii1_txd2.gmii1_txd2 
    			AM4372_IOPAD(0x91c, PIN_OUTPUT | MUX_MODE0) // (C16) mii1_txd3.gmii1_txd3 
    			AM4372_IOPAD(0x940, PIN_INPUT | MUX_MODE0) // (F17) mii1_rxd0.gmii1_rxd0 
    			AM4372_IOPAD(0x93c, PIN_INPUT | MUX_MODE0) // (B16) mii1_rxd1.gmii1_rxd1 
    			AM4372_IOPAD(0x938, PIN_INPUT | MUX_MODE0) // (E16) mii1_rxd2.gmii1_rxd2 
    			AM4372_IOPAD(0x934, PIN_INPUT | MUX_MODE0) // (C14) mii1_rxd3.gmii1_rxd3 
    		>;
    	};
    	
    	dcan1_pins_default: dcan1_pins_default {
    		pinctrl-single,pins = <
    			AM4372_IOPAD(0x978, PIN_OUTPUT | MUX_MODE2) 		// K22 dcan0_tx P7 pin
    			AM4372_IOPAD(0x97c, PIN_INPUT | MUX_MODE2) 			// L22 dcan0_rx P7 pin 
    		>;
    	};
    	
    	gpio0_pins: gpio0_pins {
    	pinctrl-single,pins = <
    	        AM4372_IOPAD(0x954, PIN_OUTPUT_PULLDOWN | MUX_MODE7) // T22 gpio0_3 GSM module reset
                AM4372_IOPAD(0x958, PIN_OUTPUT_PULLUP | MUX_MODE7) 	// T21 gpio0_4 GSM module power supply
                AM4372_IOPAD(0xA6C, PIN_OUTPUT_PULLUP | MUX_MODE9) 	// T23 gpio0_23 GSM module power on
    		>;
    	};
    	
    	gpio1_pins: gpio1_pins {
    		pinctrl-single,pins = <
    			AM4372_IOPAD(0x800, PIN_OUTPUT | MUX_MODE7)  		// B5 gpio1_0 J3 pin 6
                AM4372_IOPAD(0x804, PIN_OUTPUT_PULLUP | MUX_MODE7)  // A5 gpio1_1 WiFi SDIO mode control
                AM4372_IOPAD(0x808, PIN_INPUT | MUX_MODE7)   		// B6 gpio1_2 WiFi IRQ
    			AM4372_IOPAD(0x810, PIN_INPUT | MUX_MODE7)   		// B7 gpio1_4 LAN IRQ
    			AM4372_IOPAD(0x814, PIN_OUTPUT | MUX_MODE7)  		// A7 gpio1_5 J3 pin 9
    			AM4372_IOPAD(0x818, PIN_OUTPUT | MUX_MODE7)  		// C8 gpio1_6 J3 pin 7
    			AM4372_IOPAD(0x81C, PIN_OUTPUT | MUX_MODE7)  		// B8 gpio1_7 J3 pin 4
    			AM4372_IOPAD(0x968, PIN_INPUT | MUX_MODE5) 	 		// L25 gpio1_8 uart0_ctsn.timer7 
    			AM4372_IOPAD(0x840, PIN_OUTPUT | MUX_MODE7) 		// C3 gpio1_16 J3 pin 8
    			AM4372_IOPAD(0x864, PIN_OUTPUT | MUX_MODE7)  		// B4 gpio1_25 J3 pin 10
    			AM4372_IOPAD(0x87C, PIN_OUTPUT | MUX_MODE7)  		// A8 gpio1_29 J3 pin 5
    		>;
    	};
    	
    	gpio2_pins: gpio2_pins {
    		pinctrl-single,pins = <
            	AM4372_IOPAD(0x890, PIN_OUTPUT | MUX_MODE7)  		// A9 gpio2_2 J3 pin 3
    		>;
    	};
    
    	gpio3_pins: gpio3_pins {
    		pinctrl-single,pins = <
    			AM4372_IOPAD(0x990, PIN_INPUT | MUX_MODE7) 			// N24 gpio3_14 SD-card detection
                AM4372_IOPAD(0xa68, PIN_OUTPUT_PULLUP | MUX_MODE7)  // P20 gpio3_23 CC1352 reset pin
    		>;
    	};
    
    	gpio4_pins: gpio4_pins {
    		pinctrl-single,pins = <
    			AM4372_IOPAD(0x9B8, PIN_INPUT | MUX_MODE7)  		// AC18 gpio4_2 
    			AM4372_IOPAD(0x9C0, PIN_INPUT | MUX_MODE7)  		// AC20 gpio4_4 
    			AM4372_IOPAD(0x9d4, PIN_INPUT | MUX_MODE7)  		// AD25 gpio4_9 GSM module sense
    			AM4372_IOPAD(0xA00, PIN_OUTPUT | MUX_MODE7) 		// AD23 gpio4_20 CC1352 backdoor pin
    			AM4372_IOPAD(0xA04, PIN_INPUT | MUX_MODE7)  		// AE24 gpio4_21 CC1352 CTS pin
    		>;
    	};
    
        gpio5_pins: gpio5_pins {
    		pinctrl-single,pins = <
    			AM4372_IOPAD(0xa38, PIN_INPUT | MUX_MODE7) 				// D25 gpio5_8 IRQ Mikrobus B
    			AM4372_IOPAD(0xa3c, PIN_OUTPUT | MUX_MODE7) 			// F24 gpio5_9 reset Mikrobus B
    			AM4372_IOPAD(0xa44, PIN_OUTPUT | MUX_MODE7) 			// F23 gpio5_11 reset Mikrobus A
    			AM4372_IOPAD(0xa48, PIN_INPUT | MUX_MODE7) 				// E25 gpio5_12 irq Mikrobus A
    			AM4372_IOPAD(0xA4C, PIN_INPUT | MUX_MODE7)  			// E24 gpio5_13 push button 
    			AM4372_IOPAD(0x874, PIN_OUTPUT | MUX_MODE9)   	// B3 gpio5_31 32KHz or LOW for WIFI module mode  
    			AM4372_IOPAD(0x870, PIN_OUTPUT_PULLUP | MUX_MODE9)  	// A2 gpio5_30 WiFi module reset 
    		>;
    	};
    
        wfx_reset: wfx_reset {
    		pinctrl-single,pins = <
    			/* AM4372_IOPAD(0x870, PIN_OUTPUT_PULLUP | MUX_MODE9)  // A2 gpio5_30 This pin is RESET for WIFI module mode */
    		>;
    	};
    
        wfx_wakeup: wfx_wakeup {
    		pinctrl-single,pins = <
    			AM4372_IOPAD(0x80C, PIN_OUTPUT | MUX_MODE7)   // A6 gpio1_3 This pin is WUP for WIFI module mode 
    		>;
    	};     
    
    	leds_pins: leds_pins {
    		pinctrl-single,pins = <
    			AM4372_IOPAD(0x99C, PIN_OUTPUT | MUX_MODE7) // M24 gpio3_17 red 
                AM4372_IOPAD(0x960, PIN_OUTPUT | MUX_MODE7) // R25 gpio0_6  green 	
                AM4372_IOPAD(0x964, PIN_OUTPUT | MUX_MODE7) // G24 gpio0_7  blue 
    		>;
    	};	
    
    	timer1_pins_default: timer1_pins_default {
    		pinctrl-single,pins = <
    			// Disable GPIO1_8 before enabling timer 
    			/* AM4372_IOPAD(0x968, PIN_INPUT | MUX_MODE5) // (L25) uart0_ctsn.timer7 */
    		>;
    	};
    };
    
    &uart0 {
    	status = "okay";
    	pinctrl-names = "default";
    	pinctrl-0 = <&uart0_pins_default>;
    };
    
    &uart1 {
    	status = "okay";
    	pinctrl-names = "default";
    	pinctrl-0 = <&uart1_pins_default>;
    };
    
    &uart2 {
    	status = "okay";
    	pinctrl-names = "default";
    	pinctrl-0 = <&uart2_pins_default>;
    };
    
    &uart3 {
    	status = "okay";
    	pinctrl-names = "default";
    	pinctrl-0 = <&uart3_pins_default>;
    };
    
    &i2c0 {
    	status = "okay";
    	pinctrl-names = "default";
    	pinctrl-0 = <&i2c0_pins>;
    	clock-frequency = <100000>;
    
    	tps65218: tps65218@24 {
    		reg = <0x24>;
    		compatible = "ti,tps65218";
    		interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
    		interrupt-controller;
    		#interrupt-cells = <2>;
    
    		dcdc1: regulator-dcdc1 {
    			compatible = "ti,tps65218-dcdc1";
    			regulator-name = "vdd_core";
    			regulator-min-microvolt = <912000>;
    			regulator-max-microvolt = <1144000>;
    			regulator-boot-on;
    			regulator-always-on;
    		};
    
    		dcdc2: regulator-dcdc2 {
    			compatible = "ti,tps65218-dcdc2";
    			regulator-name = "vdd_mpu";
    			regulator-min-microvolt = <912000>;
    			regulator-max-microvolt = <1144000>;
    			regulator-boot-on;
    			regulator-always-on;
    		};
    
    		dcdc3: regulator-dcdc3 {
    			compatible = "ti,tps65218-dcdc3";
    			regulator-name = "vdcdc3";
    			regulator-min-microvolt = <1350000>;
    			regulator-max-microvolt = <1350000>;
    			regulator-boot-on;
    			regulator-always-on;
    		};
    
    		dcdc4: regulator-dcdc4 {
    			compatible = "ti,tps65218-dcdc4";
    			regulator-name = "vdcdc4";
    			regulator-min-microvolt = <3300000>;                  
    			regulator-max-microvolt = <3300000>;                  
    			regulator-boot-on;
    			regulator-always-on;
    		};
    
    		dcdc5: regulator-dcdc5 {
    			compatible = "ti,tps65218-dcdc5";
    			regulator-name = "v1_0bat";
    			regulator-min-microvolt = <1000000>;
    			regulator-max-microvolt = <1000000>;
    			regulator-boot-on;
    			regulator-always-on;
    			regulator-state-mem {
    			regulator-on-in-suspend;
    			};
    		};
    
    		dcdc6: regulator-dcdc6 {
    			compatible = "ti,tps65218-dcdc6";
    			regulator-name = "v1_8bat";
    			regulator-min-microvolt = <1800000>;
    			regulator-max-microvolt = <1800000>;
    			regulator-boot-on;
    			regulator-always-on;
    			regulator-state-mem {
    			regulator-on-in-suspend;
    			};
    		};
    
    		ldo1: regulator-ldo1 {
    			compatible = "ti,tps65218-ldo1";
    			regulator-min-microvolt = <2100000>;
    			regulator-max-microvolt = <2100000>;
    			regulator-boot-on;
    			regulator-always-on;
    		};
    	};
    };
    
    &i2c1 {
    	status = "okay";
    	pinctrl-names = "default";
    	pinctrl-0 = <&i2c1_pins>;
    };
    
    &i2c2 {
    	status = "okay";
    	pinctrl-names = "default";
    	pinctrl-0 = <&i2c2_pins>;
    };
    
    &epwmss0 {
    	status = "okay";
    };
    
    &tscadc {
    	status = "okay";
    
    	adc {
    		ti,adc-channels = <0 1 2 3 4 5 6 7>;
    	};
    };
    
    &gpio0 {
    	status = "okay";
    	pinctrl-names = "default";
    	pinctrl-0 = <&gpio0_pins>;
    };
    
    &gpio1 {
    	status = "okay";
    	pinctrl-names = "default";
    	pinctrl-0 = <&gpio1_pins>;	
    };
    
    &gpio2 {
    	status = "okay";
    	pinctrl-names = "default";
    	pinctrl-0 = <&gpio2_pins>;
    };
    
    &gpio3 {
    	status = "okay";
    	pinctrl-names = "default";
    	pinctrl-0 = <&gpio3_pins>;
    };
    
    &gpio4 {
    	status = "okay";
    	pinctrl-names = "default";
    	pinctrl-0 = <&gpio4_pins>;
    };
    
    &gpio5 {
    	status = "okay";
    	pinctrl-names = "default";
    	pinctrl-0 = <&gpio5_pins>;
    };
    
    &mmc1 {
    	status = "okay";
        vmmc-supply = <&dcdc4>;
    	bus-width = <4>;
    	pinctrl-names = "default";
    	pinctrl-0 = <&mmc1_pins>;
    	cd-gpios = <&gpio3 14 GPIO_ACTIVE_LOW>;
    };
    
    &mmc2 {
    	status = "okay";
    	vmmc-supply = <&dcdc4>;
    	bus-width = <8>;
    	pinctrl-names = "default";
    	pinctrl-0 = <&mmc2_pins>;
    	ti,non-removable;
    };
    
    &mmc3 {   //SDIO WIFI
    	status = "okay";
    	dmas = <&edma_xbar 30 0 1>,
    		   <&edma_xbar 31 0 2>;
    	dma-names = "tx", "rx";
    	//mmc-pwrseq = <&wfx_pwrseq>;
    	pinctrl-names = "default";
    	pinctrl-0 = <&mmc3_pins>;
    	vmmc-supply = <&dcdc4>;
    	bus-width = <4>;
    	//#address-size = <1>;
    	//#size = <0>;
    	cap-power-off-card;
    	ti,non-removable;
    	#address-cells = <1>;
    	#size-cells = <0>;
    	//max-frequency = <1000000>;
    
    	wfx: wfx@1 { 
    		//compatible = "silabs,wf200";
    		compatible = "silabs,wfx-sdio";
    		reg = <1>;
    		//pinctrl-0 = <&wfx_wakeup>;		
    		//wakeup-gpios = <&gpio1 3 GPIO_ACTIVE_LOW>;
    	};	
    };
    
    &usb2_phy1 {
    	status = "okay";
    };
    
    &usb1 {
    	dr_mode = "host";
    	status = "okay";
    };
    
    &usb2_phy2 {
    	status = "okay";
    };
    
    &usb2 {
    	dr_mode = "host";
    	status = "okay";
    };
    
    &mac {
    	slaves = <1>;
    	pinctrl-names = "default", "sleep";
    	pinctrl-0 = <&mii1_pins_default>;
    	pinctrl-1 = <&mii1_pins_sleep>;
    	status = "okay";
    };
    
    &davinci_mdio {
    	pinctrl-names = "default", "sleep";
    	pinctrl-0 = <&davinci_mdio_default>;
    	pinctrl-1 = <&davinci_mdio_sleep>;
    	status = "okay";
    };
    
    &cpsw_emac0 {
    	phy_id = <&davinci_mdio>, <0>;
    	phy-mode = "mii";
    };
    
    &elm {
    	status = "okay";
    };
    
    &uart0 {
    	status = "okay";
    	pinctrl-names = "default";
    	pinctrl-0 = <&uart0_pins_default>;
    };
    
    &rtc {
    	clocks = <&clk_32k_rtc>, <&clk_32768_ck>;
    	clock-names = "ext-clk", "int-clk";
    	status = "okay";
    };
    
    &cpu {
    	cpu0-supply = <&dcdc2>;
    };
    
    &wkup_m3_ipc {
    	ti,set-io-isolation;
    	ti,scale-data-fw = "am43x-evm-scale-data.bin";
    };
    
    &sgx {
    	status = "okay";
    };
    
    &dcan1{
    	status = "okay";
    	pinctrl-names = "default";
    	pinctrl-0 = <&dcan1_pins_default>;
    };
    
    &spi0 {
    	#address-cells = <1>;
        #size-cells = <0>;
    
    	status = "okay";
    	pinctrl-names = "default";
    	pinctrl-0 = <&spi2_pins>;
    };
    
    &spi1 {
    	#address-cells = <1>;
        #size-cells = <0>;
    
    	status = "okay";
    	pinctrl-names = "default";
    	pinctrl-0 = <&spi4_pins>;
    };
    

  • Hello Peter,

    I was confused by the "mmc0_xxx" comments for the pinmuxing under mmc3_pins. But it looks like your pinmuxing is correct, and the comments just weren't updated to say "mmc2_xxx".

    I will need a day or so to take a closer look at the rest of your questions. Feel free to ping me if I have not gotten back to you by the end of the week.

    Regards,

    Nick

  • Friendly reminder ;-)