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 移植 rtl8189es sdio wifi ,请教大神帮忙

insmod 8189es.ko

RTL871X: module init start
RTL871X: rtl8189es v4.3.18.2_17395.20160422
RTL871X: build time: Jun 16 2017 18:02:24
RTL871X: CHIP TYPE: RTL8188E
RTL871X: rtw_hal_config_rftype RF_Type is 3 TotalTxPath is 1
RTL871X: Chip Version Info: CHIP_8188E_Normal_Chip_TSMC_D_CUT_1T1R_RomVer(0)
RTL871X: EEPROM type is E-FUSE
RTL871X: =>_CardEnable
RTL871X: SetHwReg8188E: bMacPwrCtrlOn=1
RTL871X: <=_CardEnable
RTL871X: _ReadPROMContent: 9346CR=0x20, Boot from EFUSE, Autoload OK
RTL871X: =>_InitPowerOn_8188ES
RTL871X: =>_CardEnable
RTL871X: =>_CardEnable bMacPwrCtrlOn == _TRUE do nothing !!
RTL871X: <=_CardEnable
RTL871X: <=_InitPowerOn_8188ES
bFWReady == _FALSE call reset 8051...
RTL871X: =====> _8051Reset88E(): 8051 reset success .
RTL871X: efuse_read_phymap_from_txpktbuf bcnhead:0

卡死在这里面

Rtl8188e_hal_init.c文件中void efuse_read_phymap_from_txpktbuf 函数中lo32 = rtw_read32(adapter, REG_PKTBUF_DBG_DATA_L);这个函数中

进入函数,进一步跟中到 sdio_read32 ------  sd_read32  -------   mmc_wait_for_req  -------  wait_for_completion 函数中

  • 应该对相关MMC模块时钟使能了吧?防止写入未使能模块寄存器带来的卡住现象。

    另外,看你描述,你卡住的地方是不是到信号交互的时候了?确认一下关联的pinmux管教模式设置是对的先

  • 谢谢 大神帮忙,mmc总线使能了,系统启动打印信息

    ~ # dmesg | grep mmc
     omap_hsmmc.0: alias fck already exists
     omap_hsmmc.2: alias fck already exists
    mmc1: new high speed SDIO card at address 0001

    //SDIO WIFI
    /* Module pin mux for wlan and bluetooth */
    static struct pinmux_config mmc2_wl12xx_pin_mux[] = {
     {"gpmc_a1.mmc2_dat0", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP},
     {"gpmc_a2.mmc2_dat1", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP},
     {"gpmc_a3.mmc2_dat2", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP},
    // {"gpmc_ad15.mmc2_dat3", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP},
     {"gpmc_csn3.mmc2_cmd", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP},
     {"gpmc_clk.mmc2_clk", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP},
     {"gpmc_a4.gpio1_20", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT_PULLUP},//WL_REG_ON
     //{"gpmc_a5.gpio1_21", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT},//bt_en
     {NULL, 0},
    };
    配置
  • 还会卡在 获取MAC地址那里

  • 把SD卡的CMD的log打开,看看哪个命令没有应答。

  • RTL871X: rtw_macaddr_cfg mac addr:a0:2c:36:05:d6:35


    RTL871X: <3>_sd_write: FAIL(-110)! ADDR=0x14 Size=4(4)
    RTL871X: bDriverStopped:True, bSurpriseRemoved:False, bup:0, hw_init_completed:0
    RTL871X: rtw_wiphy_alloc(phy0)
    RTL871X: rtw_wdev_alloc(padapter=e0a63000)
    RTL871X: rtw_wiphy_register(phy0)
    RTL871X: rtw_ndev_init(wlan0) if1 mac_addr=a0:2c:36:05:d6:35
    RTL871X: module init ret=0
    卡在 rtw_macaddr_cfg mac addr:a0:2c:36:05:d6:35 一段时间后 大约8分钟后,会往下运行。
     ifconfig wlan0 up
    RTL871X: +871x_drv - drv_open, bup=0
    RTL871X: +rtl8188es_hal_init
    RTL871X: FW does not exit before power on!!
    RTL871X: =>_InitPowerOn_8188ES
    RTL871X: =>_CardEnable
    RTL871X: =>_CardEnable bMacPwrCtrlOn == _TRUE do nothing !!
    RTL871X: <=_CardEnable
    RTL871X: <=_InitPowerOn_8188ES
    RTL871X: PowerOnCheck: val_mix:0x0000063f, res:0x0000063f
    RTL871X: PowerOnCheck: 0x100 the result of cmd52 and cmd53 is the same.
    RTL871X: PowerOnCheck: 0x1B8 test Pass.
    RTL871X: Power on ok!
    RTL871X: _init_available_page_threshold(): Enable Tx FIFO Page Threshold H:0x4f4f,N:0x4f4f,L:0x5454
    RTL871X: rtl8188e_FirmwareDownload fw:NIC, size: 15028
    RTL871X: rtl8188e_FirmwareDownload: fw_ver=17 fw_subver=0000 sig=0x88e1, Month=15, Date=19, Hour=94, Minute=3a
    RTL871X: polling_fwdl_chksum: Checksum report OK! (1, 0ms), REG_MCUFWDL:0x00030005
    RTL871X: =====> _8051Reset88E(): 8051 reset success .
    RTL871X: _FWFreeToGo: Polling FW ready OK! (1, 10ms), REG_MCUFWDL:0x000300c6
    RTL871X: FWDL success. write_fw:1, 3990ms
    ==> rtl8188e_iol_efuse_patch
    RTL871X: HalDetectPwrDownMode(): PDN=0
    RTL871X: Set RF Chip ID to RF_6052 and RF type to 3.
    RTL871X: pDM_Odm TxPowerTrackControl = 1

    RTL871X: DISABLE_BB_RF=0
    RTL871X: IS_HARDWARE_TYPE_8188ES=1
    RTL871X: -rtl8188es_hal_init
    RTL871X: rtl8188es_hal_init in 274600ms
    RTL871X: wlan0Port-0  set opmode = 2

    RTL871X: <3>_sd_write: FAIL(-110)! ADDR=0x14 Size=4(4)
    还会卡住
  • CMD53 命令没有应答
  • 你可以看看这个帖子,应该可以解决你的问题:http://www.deyisupport.com/question_answer/dsp_arm/sitara_arm/f/25/t/130138.aspx

    最近在V3S这个平台上也遇到这个问题 

  • 这个帖子我看过了,我代码里面没有dts  ,像他们那么配置的地方

  • 之前我也碰到过,不过我碰到的原因是DMA的channel设置不正确导致了CMD53存在问题。

    http://www.deyisupport.com/question_answer/dsp_arm/sitara_arm/f/25/p/130138/365058.aspx#365058

  • 大神,请问一下,你们设置MMC2 ,设置的dts,在什么地方设置的

    我的设置:

    //SDIO WIFI
    /* Module pin mux for wlan and bluetooth */
    static struct pinmux_config mmc2_wl12xx_pin_mux[] = {
     {"gpmc_a1.mmc2_dat0", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP},
     {"gpmc_a2.mmc2_dat1", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP},
     {"gpmc_a3.mmc2_dat2", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP},
     {"gpmc_ad15.mmc2_dat3", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP},
     {"gpmc_csn3.mmc2_cmd", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP},
     {"gpmc_clk.mmc2_clk", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP},
     {"gpmc_a4.gpio1_20", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT_PULLUP},//WL_REG_ON
     //{"gpmc_a5.gpio1_21", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT},//bt_en
     {NULL, 0},
    };
    static void wl12xx_init(int evm_id, int profile)
    {
     struct device *dev;
     struct omap_mmc_platform_data *pdata;
     int ret;
     /* Register WLAN and BT enable pins based on the evm board revision */
     
     /*
     if (gp_evm_revision == GP_EVM_REV_IS_1_1A) {
      am335xevm_wlan_data.wlan_enable_gpio = GPIO_TO_PIN(1, 16);
      am335xevm_wlan_data.bt_enable_gpio = GPIO_TO_PIN(3, 21);
     }
     else {
      am335xevm_wlan_data.wlan_enable_gpio = GPIO_TO_PIN(1, 30);
      am335xevm_wlan_data.bt_enable_gpio = GPIO_TO_PIN(1, 31);
     }
     wl12xx_bluetooth_enable();
    */
    am335xevm_wlan_data.wlan_enable_gpio = GPIO_TO_PIN(1, 20);
     if (wl12xx_set_platform_data(&am335xevm_wlan_data))
      pr_err("error setting wl12xx data\n");
     dev = am335x_mmc[1].dev;
     if (!dev) {
      pr_err("wl12xx mmc device initialization failed\n");
      goto out;
     }
     pdata = dev->platform_data;
     if (!pdata) {
      pr_err("Platfrom data of wl12xx device not set\n");
      goto out;
     }
     ret = gpio_request_one(am335xevm_wlan_data.wlan_enable_gpio,
      GPIOF_OUT_INIT_LOW, "wlan_en");
     if (ret) {
      pr_err("Error requesting wlan enable gpio: %d\n", ret);
      goto out;
     }
    /*
     if (gp_evm_revision == GP_EVM_REV_IS_1_1A)
      setup_pin_mux(wl12xx_pin_mux_evm_rev1_1a);
     else
      setup_pin_mux(wl12xx_pin_mux_evm_rev1_0);
    */
     pdata->slots[0].set_power = wl12xx_set_power;
    out:
     return;
    }

    static void mmc2_rtl8189eus_init(int evm_id, int profile)
    {
     setup_pin_mux(mmc2_wl12xx_pin_mux);

     am335x_mmc[1].mmc = 3;
     am335x_mmc[1].name = "rtl8189es";
     am335x_mmc[1].caps = MMC_CAP_4_BIT_DATA | MMC_CAP_NONREMOVABLE | MMC_CAP_SD_HIGHSPEED;
     am335x_mmc[1].nonremovable = true;
     am335x_mmc[1].gpio_cd = -EINVAL;
     am335x_mmc[1].gpio_wp = -EINVAL;
     am335x_mmc[1].ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34; /* 3V3 */
    }

    static struct evm_dev_cfg embedsky_evm_dev_cfg[] = {
     
     {mmc2_rtl8189eus_init, DEV_ON_BASEBOARD, (PROFILE_ALL)},
     {mmc0_init, DEV_ON_BASEBOARD, (PROFILE_ALL)},
     //sct{enable_ehrpwm1A,DEV_ON_BASEBOARD, PROFILE_0 },
     //sct{enable_ecap2,DEV_ON_BASEBOARD, PROFILE_0},
     //sct{lcdc_init, DEV_ON_BASEBOARD, PROFILE_0},
     //sct{tsc_init, DEV_ON_BASEBOARD, PROFILE_0},
     {i2c0_init, DEV_ON_BASEBOARD, PROFILE_0},
     //{i2c1_init, DEV_ON_BASEBOARD, PROFILE_0},
    //sct#ifdef CONFIG_RTL8211
     {rgmii1_init, DEV_ON_BASEBOARD, PROFILE_ALL},//网卡端口初始化
     {rgmii2_init, DEV_ON_BASEBOARD, PROFILE_ALL},//sct
     
    //sct#else
    //sct {mii1_init, DEV_ON_BASEBOARD, PROFILE_ALL},//网卡端口初始化
    //sct#endif
     {usb0_init, DEV_ON_BASEBOARD, PROFILE_ALL},
     {usb1_init, DEV_ON_BASEBOARD, PROFILE_ALL},
     {evm_nand_init, DEV_ON_BASEBOARD,PROFILE_ALL},
     {evm_gpmc_init,DEV_ON_BASEBOARD,PROFILE_ALL},//sct
     //sct{mcasp1_init, DEV_ON_BASEBOARD, PROFILE_0},//sound
     
     //{spi0_init, DEV_ON_BASEBOARD, PROFILE_2},
     //sct{spi1_init, DEV_ON_BASEBOARD, PROFILE_0},
     
     {wl12xx_init, DEV_ON_BASEBOARD, (PROFILE_0)},  //蓝牙
    //sct#ifdef CONFIG_KEYBOARD_GPIO
    //sct {gpio_keys_init,  DEV_ON_BASEBOARD, PROFILE_0},
    //sct#endif /* CONFIG_KEYBOARD_GPIO */
     {gpio_led_init,  DEV_ON_BASEBOARD, PROFILE_0},//
    //#ifdef CONFIG_UART_AUTO
     {d_can_init, DEV_ON_BASEBOARD, PROFILE_0},
     {uart1_init, DEV_ON_BASEBOARD, PROFILE_0},
     
     {uart2_init, DEV_ON_BASEBOARD, PROFILE_0},//
     
     {wl12xx_init,  DEV_ON_BASEBOARD, (PROFILE_ALL)},
    // {i2c2_init, DEV_ON_BASEBOARD, PROFILE_ALL},
    //#else
    //#if 1
    // {uart1_init, DEV_ON_BASEBOARD, PROFILE_0},
    //#elif defined(CONFIG_D_CAN)
    // {d_can_init, DEV_ON_BASEBOARD, PROFILE_0},
    //#endif
    //#if 1
    // {uart2_init, DEV_ON_BASEBOARD, PROFILE_0},
    //#elif defined(CONFIG_I2C2)
    // {i2c2_init, DEV_ON_BASEBOARD, PROFILE_ALL},
    //#endif
    //#endif  /*CONFIG_UART_AUTO*/
     {uart4_init, DEV_ON_BASEBOARD, PROFILE_0},
     {uart5_init, DEV_ON_BASEBOARD, PROFILE_0},//SCT
     //SCT{haptics_init, DEV_ON_DGHTR_BRD, (PROFILE_4)},
     {evm_gpioint_init, DEV_ON_BASEBOARD, PROFILE_ALL},//SCT
     {spi_gpio_init, DEV_ON_BASEBOARD, PROFILE_ALL},
     {NULL, 0, 0},
    };
  • 已经解决了

x 出现错误。请重试或与管理员联系。