From: Kyle Evans <kvans32@gmail.com>
To: Arend van Spriel <arend.vanspriel@broadcom.com>
Cc: Kyle Evans <kvans32@gmail.com>, linux-wireless@vger.kernel.org
Subject: Re: sdio failure to initialize on warm boot.
Date: Fri, 19 Jan 2018 11:05:54 -0500 [thread overview]
Message-ID: <20180119160554.GA4162@localhost.localdomain> (raw)
In-Reply-To: <5A61AA9E.6000505@broadcom.com>
* Arend van Spriel <arend.vanspriel@broadcom.com>:
> On 1/18/2018 6:50 PM, Kyle Evans wrote:
> > * Arend van Spriel <arend.vanspriel@broadcom.com>:
> >> On 1/12/2018 9:18 PM, Kyle Evans wrote:
> >>> 2) After reboot I get this nasty error...
> >>> [ 0.000000] Kernel command line: console=tty0 selinux=0
> >>> video=1280x800 root=/dev/mmcblk1p1 brcmfmac.bebug=0x20000
> >>> [ 2.269750] mmc0: Invalid maximum block size, assuming 512 bytes
> >>> [ 2.330010] mmc0: SDHCI controller on c8000000.sdhci [c8000000.sdhci]
> >>> using ADMA
> >>> [ 2.645242] mmc0: error -110 whilst initialising SDIO card
> >>
> >> Ok. I suppose you mean a warm reboot. So I suppose the card is not
> >> properly power cycled. If your SDHCI controller driver (is it
> >> sdhci-acpi?) is loaded as a module, you could try to unload it and load
> >> it again. Let me know if that works for you to confirm my guess.
> >
> > Your guess is correct. The following brings up wifi after failure to do
> > so during warm boot.
> >
> > modprobe -r sdhci-tegra; modprobe sdhci-tegra;
>
> Do you know if your uses a device tree and where I can find it?
> Typically, there is a GPIO to the wifi device that needs to be toggled
> using mmc powerseq.
I had a hunch this is was the next step. This device did not ship with a
DT, but I have one in the works. My initial trial & error has been met
with error.
This is what I have so far, which is wrong since adding pwrseq (boot panic):
sdhci@c8000000 {
compatible = "nvidia,tegra20-sdhci";
reg = <0xc8000000 0x200>;
interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&tegra_car TEGRA20_CLK_SDMMC1>;
resets = <&tegra_car 14>;
reset-names = "sdhci";
status = "okay";
//power-gpios = <&gpio TEGRA_GPIO(K, 6) GPIO_ACTIVE_HIGH>;
bus-width = <4>;
keep-power-in-suspend;
non-removable;
mmc-pwrseq = <&wlan_rst>;
brcmf: wifi@1 {
compatible = "brcm,bcm4329-fmac";
interrupt-parent = <&gpio>;
interrupts = <TEGRA_GPIO(Y, 6) GPIO_ACTIVE_HIGH>,
<TEGRA_GPIO(S, 0) GPIO_ACTIVE_HIGH>;
interrupt-names = "host-wake";
};
};
wlan_rst: sdhci0_pwrseq {
compatible = "mmc-pwrseq-simple";
reset-gpios = <&gpio TEGRA_GPIO(K, 6) GPIO_ACTIVE_LOW>;
};
This stuff is from a pre-DT kernel:
#define TF101_WLAN_RST TEGRA_GPIO_PK6
#define TF101_WLAN_WOW TEGRA_GPIO_PS0
#define TF101_SDIO_WOW TEGRA_GPIO_PY6
static struct embedded_sdio_data embedded_sdio_data1 = {
.cccr = {
.sdio_vsn = 2,
.multi_block = 1,
.low_speed = 0,
.wide_bus = 0,
.high_power = 1,
.high_speed = 1,
},
.cis = {
.vendor = 0x02d0,
.device = 0x4329,
},
}
static struct tegra_sdhci_platform_data tegra_sdhci_platform_data1 = {
.mmc_data = {
.register_status_notify = tf101_wifi_status_register,
.embedded_sdio = &embedded_sdio_data1,
.built_in = 0,
},
.wow_gpio = TF101_SDIO_WOW,
.cd_gpio = -1,
.wp_gpio = -1,
.power_gpio = -1,
.max_clk_limit = 40000000,
}
static int tf101_wifi_power(int on)
{
pr_debug("%s: %d\n", __func__, on);
#if 0
gpio_set_value(TF101_WLAN_PWR, on);
mdelay(100);
#endif
gpio_set_value(TF101_WLAN_RST, on);
mdelay(200);
return 0;
}
static int __init tf101_wifi_init(void)
{
//gpio_request(TF101_WLAN_PWR, "wlan_power");
gpio_request(TF101_WLAN_RST, "wlan_rst");
gpio_request(TF101_WLAN_WOW, "bcmsdh_sdmmc");
//tegra_gpio_enable(TF101_WLAN_PWR);
tegra_gpio_enable(TF101_WLAN_RST);
tegra_gpio_enable(TF101_WLAN_WOW);
//gpio_direction_output(TF101_WLAN_PWR, 0);
gpio_direction_output(TF101_WLAN_RST, 0);
gpio_direction_input(TF101_WLAN_WOW);
platform_device_register(&tf101_wifi_device);
device_init_wakeup(&tf101_wifi_device.dev, 1);
device_set_wakeup_enable(&tf101_wifi_device.dev, 0);
return 0;
}
static struct resource tf101_bcm4329_rfkill_resources[] = {
{
.name = "bcm4329_nshutdown_gpio",
.start = TEGRA_GPIO_PU0,
.end = TEGRA_GPIO_PU0,
.flags = IORESOURCE_IO,
},
};
static struct resource tf101_bluesleep_resources[] = {
[0] = {
.name = "gpio_host_wake",
.start = TEGRA_GPIO_PU6,
.end = TEGRA_GPIO_PU6,
.flags = IORESOURCE_IO,
},
[1] = {
.name = "gpio_ext_wake",
.start = TEGRA_GPIO_PU1,
.end = TEGRA_GPIO_PU1,
.flags = IORESOURCE_IO,
},
[2] = {
.name = "host_wake",
.start = TEGRA_GPIO_TO_IRQ(TEGRA_GPIO_PU6),
.end = TEGRA_GPIO_TO_IRQ(TEGRA_GPIO_PU6),
.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE,
},
};
Asside from getting reboot to work, I am at a loss where to put all of
the wakeup sources and rfkill nodes.
S,0 - WLAN_WOW
Y,6 - SDIO_WOW
U,6 - bt host_wake
U,1 - bt ext_wake
U,0 - rfkill
Thanks,
Kyle
>
> Regards,
> Arend
>
next prev parent reply other threads:[~2018-01-19 13:33 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-01-09 12:51 brcmfmac4329-sdio firmware load failed Kyle Evans
2018-01-10 8:47 ` Arend van Spriel
2018-01-12 20:18 ` Kyle Evans
2018-01-13 9:19 ` Arend van Spriel
2018-01-16 1:20 ` Kyle Evans
2018-01-16 20:18 ` Arend van Spriel
2018-01-18 17:50 ` sdio failure to initialize on warm boot Kyle Evans
2018-01-19 8:21 ` Arend van Spriel
2018-01-19 16:05 ` Kyle Evans [this message]
2018-01-22 9:22 ` Arend van Spriel
2018-01-26 10:45 ` Kyle Evans
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180119160554.GA4162@localhost.localdomain \
--to=kvans32@gmail.com \
--cc=arend.vanspriel@broadcom.com \
--cc=linux-wireless@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.