While working with the Wlink18 driver, we have serious issues where the driver crashes when we bring the interface down and up again in another configuration, i.e. from station mode to access point mode. When or a while after bringing the interface up, the driver might crash – randomly. The Wifi module is connected to a FreeScale i.MX 28.0 running 3.8.13. Please find the device tree attached.
When the driver crashes we get the following errors:
[ 502.613125] wlcore: ERROR timeout waiting for the hardware to complete initialization
[ 513.707031] wlcore: ERROR timeout waiting for the hardware to complete initialization
[ 513.739968] wlcore: ERROR firmware boot failed despite 3 retries
[etc]
After such a crash, the wlink18 is braindead; We need a hard reboot of the whole device, there is no other way to get the Wlink working. Does anyone have experience with those issues? Are we having a configuration issue or is this a (known?) issue in the driver?
/*
* Copyright 2012 Freescale Semiconductor, Inc.
*
* The code contained herein is licensed under the GNU General Public
* License. You may obtain a copy of the GNU General Public License
* Version 2 or later at the following locations:
*
* http://www.opensource.org/licenses/gpl-license.html
* http://www.gnu.org/copyleft/gpl.html
*/
/dts-v1/;
/include/ "imx28.dtsi"
/ {
model = "Mastervolt IRIS ES";
compatible = "fsl,imx28";
memory {
reg = <0x40000000 0x08000000>;
};
wlan_irq:wlan_irq@0 {
/* bogus */
pinctrl-names = "default";
/* ? */
interrupt-parent = <&gpio2>;
interrupts = <19 0x01>;
interrupt-controller;
#interrupt-cells = <2>;
reg = <0x20>;
/* generic */
compatible = "wlcore";
status = "okay";
/* actual used?! */
irq = <113>;
board-tcxo-clock = <5>;
board-ref-clock = <1>; /* BOARD reference clock, See /include/linux/wl12xx.h for more info*/
platform-quirks = <1>;
};
apb@80000000 {
apbh@80000000 {
gpmi-nand@8000c000 {
pinctrl-names = "default";
pinctrl-0 = <&gpmi_pins_a &gpmi_status_cfg
&gpmi_iris_cfg>;
status = "okay";
};
ssp0: ssp@80010000 {
compatible = "fsl,imx28-mmc";
pinctrl-names = "default";
pinctrl-0 = <&mmc0_4bit_pins_a
&mmc0_cd_cfg &mmc0_sck_cfg>;
bus-width = <4>;
wp-gpios = <&gpio2 12 0>;
vmmc-supply = <®_vddio_sd0>;
non-removable;
status = "okay";
};
ssp1: ssp@80012000 {
compatible = "fsl,imx28-mmc";
bus-width = <8>;
wp-gpios = <&gpio0 28 0>;
};
pinctrl@80018000 {
pinctrl-names = "default";
pinctrl-0 = <&hog_pins_a>;
hog_pins_a: hog@0 {
reg = <0>;
fsl,pinmux-ids = <
0x20d3 /* MX28_PAD_SSP1_CMD__GPIO_2_13 */
0x20f3 /* MX28_PAD_SSP1_DATA3__GPIO_2_15 */
0x40d3 /* MX28_PAD_ENET0_RX_CLK__GPIO_4_13 */
0x20c3 /* MX28_PAD_SSP1_SCK__GPIO_2_12 */
0x31c3 /* MX28_PAD_PWM3__GPIO_3_28 */
0x31e3 /* MX28_PAD_LCD_RESET__GPIO_3_30 */
0x3083 /* MX28_PAD_AUART2_RX__GPIO_3_8 */
0x3093 /* MX28_PAD_AUART2_TX__GPIO_3_9 */
>;
fsl,drive-strength = <0>;
fsl,voltage = <1>;
fsl,pull-up = <0>;
};
gpmi_iris_cfg: gpmi_iris_cfg {
fsl,pinmux-ids = <
0x0100 /* MX28_PAD_GPMI_CE0N__GPMI_CE0N */
0x0140 /* MX28_PAD_GPMI_RDY0__GPMI_READY0 */
>;
fsl,drive-strength = <0>;
fsl,pull-up = <1>;
};
};
};
apbx@80040000 {
duart: serial@80074000 {
pinctrl-names = "default";
pinctrl-0 = <&duart_pins_a>;
status = "okay";
};
auart0: serial@8006a000 {
pinctrl-names = "default";
pinctrl-0 = <&auart0_pins_a>;
status = "okay";
};
auart4: serial@80072000 {
pinctrl-names = "default";
pinctrl-0 = <&auart4_2pins_a>;
status = "okay";
};
};
};
regulators {
compatible = "simple-bus";
reg_3p3v: 3p3v {
compatible = "regulator-fixed";
regulator-name = "3P3V";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-always-on;
};
/* WLAN*/
reg_vddio_sd0: vddio-sd0 {
compatible = "regulator-fixed";
regulator-name = "vddio-sd0";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
gpio = <&gpio2 19 0>;
/* WLAN card specific delay */
startup-delay-us = <70000>;
enable-active-high;
};
reg_fec_3v3: fec-3v3 {
compatible = "regulator-fixed";
regulator-name = "fec-3v3";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
gpio = <&gpio2 15 0>;
};
};
};