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.

AM335x Custom board WL18xx on mmc2/3

Other Parts Discussed in Thread: AM3352, TPS65910

I couln't bring up wifi on WL18xx on a custom board.


BT is working proper, have crosschecked WL_ENA and WL_IRQ hardware with oscilloscope -- seems to work under u-boot and linux.


Kernel is based on SDK 7...

here is my .dts file, which is working proper for all except WLAN:

Can you have a look at it and give some advice?

Many thanks in advance.

Reinhard

/*
 * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
 *
 * 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.
 */

/*
 * AM335x Starter Kit
 * http://www.ti.com/tool/tmdssk3358
 */

/dts-v1/;

#include "am33xx.dtsi"
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/pwm/pwm.h>


/ {
    model = "Knobloch TXT AM3352";
    compatible = "ti,am335x-evm", "ti,am33xx";

    cpus {
        cpu@0 {
            cpu0-supply = <&vdd1_reg>;
        };
    };

    memory {
        device_type = "memory";
        reg = <0x80000000 0x10000000>; /* 256 MB */
    };


        wlcore {
                compatible = "wlcore";  
                gpio = <28>; /* Bank0, pin28 */

                /*
                 * TODO: use edge irqs for suspend/resume.
                 * in newer kerenls, we seem to miss interrupts when
                 * working with edge irqs, so revert back to level irqs.
                 */
                platform-quirks = <1>;

                /* if a 12xx card is there, configure the clock to
                   WL12XX_REFCLOCK_38_XTAL */
                board-ref-clock = <4>;
        };



        kim {
                compatible = "kim";
                nshutdown_gpio = <97>;  /* Bank3, pin1 */
                dev_name = "/dev/ttyO3";
                flow_cntrl = <1>;
                baud_rate = <3000000>;
        };

        btwilink {
                compatible = "btwilink";
        };


    am33xx_pinmux: pinmux@44e10800 {
        pinctrl-names = "default";
        pinctrl-0 = <&clkout2_pin &clkout1_pin &ddr3_vtt_toggle &wlan_pins>;

        ddr3_vtt_toggle: ddr3_vtt_toggle {
            pinctrl-single,pins = <
                0x1ac 0x7    /* mcasp0_ahclkx.gpio3_21, OUTPUT | MODE7 */
            >;
        };

        i2c0_pins: pinmux_i2c0_pins {
            pinctrl-single,pins = <
                0x188 (PIN_INPUT | MUX_MODE0)    /* i2c0_sda.i2c0_sda */
                0x18c (PIN_INPUT | MUX_MODE0)    /* i2c0_scl.i2c0_scl */
            >;
        };

        uart0_pins: pinmux_uart0_pins {
            pinctrl-single,pins = <
                0x170 (PIN_INPUT_PULLUP | MUX_MODE0)    /* uart0_rxd.uart0_rxd */
                0x174 (PIN_OUTPUT_PULLDOWN | MUX_MODE0)    /* uart0_txd.uart0_txd */
            >;
        };


        uart2_pins_default: pinmux_uart2_pins_default {
            pinctrl-single,pins = <
                0x150 (PIN_INPUT_PULLUP | MUX_MODE1)    /* spi0_sclk.uart2_rxd */
                0x154 (PIN_OUTPUT_PULLDOWN | MUX_MODE1)    /* spi0_d0.uart2_txd */
            >;
        };


        uart2_pins_sleep: pinmux_uart2_pins_sleep {
            pinctrl-single,pins = <
                0x150 (PIN_INPUT_PULLDOWN | MUX_MODE7)    
                0x154 (PIN_INPUT_PULLDOWN | MUX_MODE7)    
            >;
        };



                uart3_pins_default: pinmux_uart3_pins_default {
                        pinctrl-single,pins = <
                                0x148 (PIN_INPUT | MUX_MODE3)        /* mdi0.uart3_ctsn */
                                0x14C (PIN_OUTPUT_PULLDOWN | MUX_MODE3)    /* mdc.uart3_rtsn */
                                0x134 (PIN_INPUT | MUX_MODE1)    /* mii1_rxd3.uart3_rxd */
                                0x138 (PIN_OUTPUT | MUX_MODE1)    /* mii1_rxd2.uart3_txd */
                        >;
                };

                uart3_pins_sleep: pinmux_uart3_pins_sleep {
                        pinctrl-single,pins = <
                                0x148 (PIN_INPUT_PULLDOWN | MUX_MODE7)
                                0x14C (PIN_INPUT_PULLDOWN | MUX_MODE7)
                                0x134 (PIN_INPUT_PULLDOWN | MUX_MODE7)
                                0x138 (PIN_INPUT_PULLDOWN | MUX_MODE7)
                        >;
                };

                mmc1_pins_default: pinmux_mmc1_pins {
                        pinctrl-single,pins = <
                                0x0F0 (PIN_INPUT_PULLUP | MUX_MODE0)    /* mmc0_dat3.mmc0_dat3 */
                                0x0F4 (PIN_INPUT_PULLUP | MUX_MODE0)    /* mmc0_dat2.mmc0_dat2 */
                                0x0F8 (PIN_INPUT_PULLUP | MUX_MODE0)    /* mmc0_dat1.mmc0_dat1 */
                                0x0FC (PIN_INPUT_PULLUP | MUX_MODE0)    /* mmc0_dat0.mmc0_dat0 */
                                0x100 (PIN_INPUT_PULLUP | MUX_MODE0)    /* mmc0_clk.mmc0_clk */
                                0x104 (PIN_INPUT_PULLUP | MUX_MODE0)    /* mmc0_cmd.mmc0_cmd */
                0x1A0 (PIN_OUTPUT | MUX_MODE7)    /* mcasp0_aclkr.gpio3_18 */
                0x1A8 (PIN_INPUT | MUX_MODE7) /* mcasp0_axr1.gpio3_20 */
                        >;
                };

                mmc1_pins_sleep: pinmux_mmc1_pins_sleep {
                        pinctrl-single,pins = <
                                0x0F0 (PIN_INPUT_PULLDOWN | MUX_MODE7)
                                0x0F4 (PIN_INPUT_PULLDOWN | MUX_MODE7)
                                0x0F8 (PIN_INPUT_PULLDOWN | MUX_MODE7)
                                0x0FC (PIN_INPUT_PULLDOWN | MUX_MODE7)
                                0x100 (PIN_INPUT_PULLDOWN | MUX_MODE7)
                                0x104 (PIN_INPUT_PULLDOWN | MUX_MODE7)
                0x1A0 (PIN_OUTPUT | MUX_MODE7)    /* mcasp0_aclkr.gpio3_18 */
                0x1A8 (PIN_INPUT | MUX_MODE7)    /* mcasp0_axr1.gpio3_20 */
                        >;
                };


            mmc3_pins_default: pinmux_mmc3_pins {
                pinctrl-single,pins = <
                0x118 (PIN_INPUT_PULLDOWN | MUX_MODE5)    /* mii1_rx_dv.mmc2_dat0, INPUT_PULLUP | MODE5 */
                0x11C (PIN_INPUT_PULLDOWN | MUX_MODE5)    /* mii1_txd3.mmc2_dat1, INPUT_PULLUP | MODE5 */
                0x120 (PIN_INPUT_PULLDOWN | MUX_MODE5)    /* mii1_txd2.mmc2_dat2, INPUT_PULLUP | MODE5 */
                0x108 (PIN_INPUT_PULLDOWN | MUX_MODE5)    /* mii1_col.mmc2_dat3, INPUT_PULLUP | MODE5 */
                0x114 (PIN_INPUT_PULLDOWN | MUX_MODE6)    /* mii1_tx_en.mmc2_cmd, INPUT_PULLUP | MODE6 */
                0x13C (PIN_INPUT_PULLDOWN | MUX_MODE6)    /* mii1_rxd1.mmc2_clk, INPUT_PULLUP | MODE6 */
            >;
        };


            mmc3_pins_sleep: pinmux_mmc3_pins_sleep {
                pinctrl-single,pins = <
                0x118 (PIN_INPUT_PULLDOWN | MUX_MODE7)    
                0x11C (PIN_INPUT_PULLDOWN | MUX_MODE7)
                0x120 (PIN_INPUT_PULLDOWN | MUX_MODE7)
                0x108 (PIN_INPUT_PULLDOWN | MUX_MODE7)
                0x114 (PIN_INPUT_PULLDOWN | MUX_MODE7)
                0x13C (PIN_INPUT_PULLDOWN | MUX_MODE7)
            >;
        };

        clkout1_pin: pinmux_clkout1_pin {
            pinctrl-single,pins = <
                0x1b0 (PIN_OUTPUT_PULLDOWN | MUX_MODE3)        /* xdma_event_intr0.clkout1 */
            >;
        };

        clkout2_pin: pinmux_clkout2_pin {
            pinctrl-single,pins = <
                0x1b4 (PIN_OUTPUT_PULLDOWN | MUX_MODE3)        /* xdma_event_intr1.clkout2 */
            >;
        };


        /* wl12xx/wl18xx card on mmc3 */
            wlan_pins: pinmux_wlan_pins {
                pinctrl-single,pins = <
                        0x110 (PIN_OUTPUT_PULLUP | MUX_MODE7)    /* mii1_rx_er.gpio3_2 (WL_EN) */
                        0x128 (PIN_INPUT_PULLUP | MUX_MODE7)    /* mii1_txd0.gpio0_28 (WLAN_IRQ) */
                        0x10C (PIN_OUTPUT_PULLUP | MUX_MODE7)    /* mii1_crs.gpio3_1 (BT_EN) */
            >;
        };

    };

    ocp {
        uart0: serial@44e09000 {
            pinctrl-names = "default";
            pinctrl-0 = <&uart0_pins>;

            status = "okay";
        };

        uart2: serial@48024000 {
            pinctrl-names = "default", "sleep";
            pinctrl-0 = <&uart2_pins_default>;
            pinctrl-1 = <&uart2_pins_sleep>;

            status = "okay";
        };

        uart3: serial@481a6000 {
            pinctrl-names = "default", "sleep";
            pinctrl-0 = <&uart3_pins_default>;
            pinctrl-1 = <&uart3_pins_sleep>;

            status = "okay";
        };

        i2c0: i2c@44e0b000 {
            pinctrl-names = "default";
            pinctrl-0 = <&i2c0_pins>;

            status = "okay";
            clock-frequency = <400000>;

            tps: tps@2d {
                reg = <0x2d>;
            };

            baseboard_eeprom: baseboard_eeprom@50 {
                compatible = "at,24c01";
                reg = <0x50>;
            };



        };

        musb: usb@47400000 {
            status = "okay";

            control@44e10000 {
                status = "okay";
            };

            usb-phy@47401300 {
                status = "okay";
            };

            usb-phy@47401b00 {
                status = "okay";
            };

            usb@47401000 {
                status = "okay";
            };

            usb@47401800 {
                status = "okay";
                dr_mode = "host";
            };

            dma-controller@07402000  {
                status = "okay";
            };
        };

    };

    vbat: fixedregulator@0 {
        compatible = "regulator-fixed";
        regulator-name = "vbat";
        regulator-min-microvolt = <5000000>;
        regulator-max-microvolt = <5000000>;
        regulator-boot-on;
    };

    lis3_reg: fixedregulator@1 {
        compatible = "regulator-fixed";
        regulator-name = "lis3_reg";
        regulator-boot-on;
    };

    wlan_en_reg: fixedregulator@9 {
            compatible = "regulator-fixed";
        regulator-name = "wlan-en-regulator";
        regulator-min-microvolt = <1800000>;
        regulator-max-microvolt = <1800000>;
        gpio = <&gpio3 2 0>;
        startup-delay-us = <70000>;
        /*enable-active-high; */
        regulator-boot-on;
    };
};


#include "tps65910.dtsi"

&tps {
    vcc1-supply = <&vbat>;
    vcc2-supply = <&vbat>;
    vcc3-supply = <&vbat>;
    vcc4-supply = <&vbat>;
    vcc5-supply = <&vbat>;
    vcc6-supply = <&vbat>;
    vcc7-supply = <&vbat>;
    vccio-supply = <&vbat>;

    regulators {
        vrtc_reg: regulator@0 {
            regulator-always-on;
        };

        vio_reg: regulator@1 {
            regulator-always-on;
        };

        vdd1_reg: regulator@2 {
            /* VDD_MPU voltage limits 0.95V - 1.325V with +/-4% tolerance */
            regulator-name = "vdd_mpu";
            regulator-min-microvolt = <912500>;
            regulator-max-microvolt = <1378000>;
            regulator-boot-on;
            regulator-always-on;
        };

        vdd2_reg: regulator@3 {
            /* VDD_CORE voltage limits 0.95V - 1.1V with +/-4% tolerance */
            regulator-name = "vdd_core";
            regulator-min-microvolt = <912500>;
            regulator-max-microvolt = <1150000>;
            regulator-boot-on;
            regulator-always-on;
        };

        vdd3_reg: regulator@4 {
            regulator-always-on;
        };

        vdig1_reg: regulator@5 {
            regulator-always-on;
        };

        vdig2_reg: regulator@6 {
            regulator-always-on;
        };

        vpll_reg: regulator@7 {
            regulator-always-on;
        };

        vdac_reg: regulator@8 {
            regulator-always-on;
        };

        vaux1_reg: regulator@9 {
            regulator-always-on;
        };

        vaux2_reg: regulator@10 {
            regulator-always-on;
        };

        vaux33_reg: regulator@11 {
            regulator-always-on;
        };

        vmmc_reg: regulator@12 {
                regulator-name = "vmmc_reg";
            regulator-min-microvolt = <1800000>;
            regulator-max-microvolt = <3300000>;
            regulator-always-on;
        };
    };
};


&gpio0 {
    ti,no-reset;
};

&gpio3 {
    ti,no-reset;
};

&mmc1 {
        status = "okay";  
        vmmc-supply = <&vmmc_reg>;
        bus-width = <4>;
        pinctrl-names = "default", "sleep";
        pinctrl-0 = <&mmc1_pins_default>;
        pinctrl-1 = <&mmc1_pins_sleep>;
    cd-gpios = <&gpio3 20 GPIO_ACTIVE_LOW>;
};

&edma {
    /* Map eDMA MMC2 Events from Crossbar */
    ti,edma-xbar-event-map =  <1 12
                   2 13>;
};

&mmc3 {
        /* these are on the crossbar and are outlined in the
           xbar-event-map element */
        dmas = <&edma 12
                &edma 13>;
        dma-names = "tx", "rx";   

        status = "okay";
        vmmc-supply = <&wlan_en_reg>;  
        bus-width = <4>;
    pinctrl-names = "default", "sleep";
    pinctrl-0 = <&mmc3_pins_default>;
    pinctrl-1 = <&mmc3_pins_sleep>;

        ti,non-removable;
        ti,needs-special-hs-handling;
        cap-power-off-card;
        keep-power-in-suspend;
};

  • Hi Reinhard,

    The MMC2 clock probably needs to be enabled.

  • Hi Biser,

    sorry for chasing you,

    but I think clock is enabled I can meassure that Signal on TIWL18xx.

    Or do you talk about MMC2 module?

    When yes how is this done in DT ?

    Regards Reinhard

  • As Steve suggested here, this can be done in <u-boot>/arch/arm/cpu/armv7/am33xx/clock_am33xx.c.

    Best regards,
    Miroslav

  • Hi Reinhard,

    Have you already solved this problem?

    I also met the same issue. Thus, would you please share the solution for us?

    Best regards.

    Kaka

  • Reinhard & Kaka,

    I have the same issue. Did you resolve it? What is the solution?

    Regards,

    Shu

  • Hi Shu,

    We could connect the Wi-Fi module to Sitara via MMC2 by revising the Device tree file.

    * There is no problem for the SDIO settings of Sitara, however I had a mistake for setting for GPIOs for controlling the Wi-Fi module. Thus, we could not connect it at first even though revising the Device tree file.

    Best regards.

    Kaka 

  • Thanks for you reply.

    We had a hard time to turn on the MMC2 for our Wifi chip. Except the device tree changes, what else I have to change? In uBoot? we enabled the clock in clock_am33xx.c.

    Regards,

    Shu

  • Hi Shu,

    We have not especially changed for SDK except for the device tree.  We had experimentally disabled the mmc1 in uboot. However, we could use the mmc1 after booting up the linux. Thus, I think that you need not modify the uboot.

    And how about confirm whether the linux can call the initialized driver for mmc by added the following function to ~/kernel/drivers/mmc/host/omap_hsmmc.c?

    *********************************

    static int omap_hsmmc_probe(struct platform_device *pdev) {

      printk("@@@@@@@@@@ %s:%d %s()\n",__FILE__,__LINE__,__func__);  //Output the log

      struct omap_mmc_platform_data *pdata = pdev->dev.platform_data;

    ***********************************

    And did you set the correct DMA evnt for mmc2? I refered to the following URL.

     http://stackoverflow.com/questions/21405216/set-mmc2-on-beaglebone-black

    Best regards.

    Kaka

  • Hello ,

    Could you share your Device Tree? I'm having problems with SDIO, my module can not be instantiated and I get the following messages in the kernel:

    [ 16.001652] mmc2: queuing unknown CIS tuple 0x0f (0 bytes)
    [ 16.008434] mmc2: queuing unknown CIS tuple 0x03 (0 bytes)
    [ 16.109094] mmc2: queuing unknown CIS tuple 0x01 (0 bytes)
    [ 16.114937] mmc2: queuing unknown CIS tuple 0x10 (0 bytes)
    [ 16.121380] mmc2: queuing unknown CIS tuple 0x3f (0 bytes)
    [ 16.214230] mmc2: queuing unknown CIS tuple 0x04 (0 bytes)
    [ 16.222749] mmc2: queuing unknown CIS tuple 0x01 (0 bytes)
    [ 16.229188] mmc2: queuing unknown CIS tuple 0x3f (0 bytes)
    [ 16.324856] mmc2: queuing unknown CIS tuple 0x01 (0 bytes)
    [ 16.330800] mmc2: queuing unknown CIS tuple 0x06 (0 bytes)
    [ 19.083682] mmc2: error -22 whilst initialising SDIO card

    Thank you,

    Fabio.