Re: Lock-up with modprobe sdhci after suspending to ram

Pierre Ossman
2006-04-29T15:25:35Z

Jani-Matti Hätinen wrote:
>
> Ok, this is what I get on Loglevel 9.
> If I try to suspend with the module loaded and with a card in the reader I
> get:
> Stopping tasks: ================================|
> ipw2200: Failed to send CARD_DISABLE: Command timed out
> ACPI: PCI interrupt for device 0000:01:05.0 disabled
> sdhci [sdhci_suspend()]: Suspending...
> MMC: starting cmd 07 arg 00000000 flags 00000000
> sdhci [sdhci_send_command()]: Sending cmd (7)
>
> And if I modprobe sdhci after suspend&resume I get the following:
> First from the modprobe (not all of it is visible):
> sdhci: Sys addr: 0xffffffff | Version: 0x0000ffff
> sdhci: Blk size: 0x0000ffff | Blk cnt: 0x0000ffff
> sdhci: Argument: 0xffffffff | Trn mode: 0x0000ffff
> sdhci: Present: 0xffffffff | Host ctl: 0x000000ff
> sdhci: Power: 0x000000ff | Blk gap: 0x000000ff
> sdhci: Wake-up: 0x000000ff | Clock: 0x0000ffff
> sdhci: Timeout: 0x000000ff | Int stat: 0xffffffff
> sdhci: Int enab: 0xffffffff | Sig enab: 0xffffffff
> sdhci: AC12 err: 0x0000ffff | Slot int: 0x0000ffff
> sdhci: Caps: 0xffffffff | Max curr: 0xffffffff
> sdhci: ===========================================
>

Now this is horribly broken and would explain why things go south. I
guess the chip needs a reset early in the detection sequence to function
properly. Try putting:

sdhci_reset(host, SDHCI_RESET_ALL);

just before the driver does a readl() on the capabilities register (in
sdhci_probe_slot()).

> Also I just noticed that if the machine has been through at least one
> suspend&resume cycle, rebooting no longer works. All processes exit cleanly,
> but the system just hangs when it should shut down.
>

That's just probably a broken ACPI. Laptops tend to be buggy as hell.
File a report with the ACPI guys.

Rgds
Pierre