All of lore.kernel.org
 help / color / mirror / Atom feed
* libertas_sdio and pxamci suspend issue
@ 2014-08-20 13:41 Daniel Mack
  2014-08-20 13:57 ` Ulf Hansson
  0 siblings, 1 reply; 2+ messages in thread
From: Daniel Mack @ 2014-08-20 13:41 UTC (permalink / raw)
  To: linux-wireless; +Cc: Johannes Berg, libertas-dev, Linux MMC List, James Cameron

Hi,

I'm currently updating the kernel of a PXA3xx platform that used to be
bases on 3.0. On that, a libertas is connected to the PXA mci controller
via SDIO.

The card itself works fine on both the old version and 3.16, but on
3.16, I see the following error when trying to put the system to suspend:

[   13.459502] mmc0: new SDIO card at address 0001
[   15.103333] libertas_sdio: Libertas SDIO driver
[   15.107864] libertas_sdio: Copyright Pierre Ossman
[   15.660291] libertas_sdio mmc0:0001:1 (unregistered net_device):
00:19:88:21:f6:22, fw 9.70.20p0, cap 0x00000303
[   15.675960] libertas_sdio mmc0:0001:1 wlan0: Marvell WLAN 802.11 adapter
[   15.684075] cfg80211: Calling CRDA to update world regulatory domain

# echo mem >/sys/power/state
[   18.617456] PM: Syncing filesystems ... done.
[   18.634231] Freezing user space processes ... (elapsed 0.000 seconds)
done.
[   18.641312] Freezing remaining freezable tasks ... (elapsed 0.007
seconds) done.
[   18.658322] dpm_run_callback(): pm_generic_suspend+0x0/0x38 returns -38
[   18.665136] PM: Device mmc0:0001:1 failed to suspend: error -38
[   18.671035] PM: Some devices failed to suspend, or early wake event
detected


The problem is caused by libertas' if_sdio_suspend() returning -ENOSYS here:

       /* If we're powered off anyway, just let the mmc layer remove the
         * card. */
        if (!lbs_iface_active(card->priv))
                return -ENOSYS;


According to the comment, the code assumes the function is called from
the mmc layer, which isn't the case - the stack trace leading to this
function looks like this:

[   15.767603] [<bf019048>] (if_sdio_suspend [libertas_sdio]) from
[<c0285980>] (pm_generic_suspend+0x2c/0x38)
[   15.779843] [<c0285980>] (pm_generic_suspend) from [<c0286c1c>]
(dpm_run_callback.isra.21+0x18/0x44)
[   15.790863] [<c0286c1c>] (dpm_run_callback.isra.21) from [<c0287cdc>]
(__device_suspend+0x148/0x220)
[   15.800039] [<c0287cdc>] (__device_suspend) from [<c0288478>]
(dpm_suspend+0xa8/0x204)
[   15.808464] [<c0288478>] (dpm_suspend) from [<c00410c8>]
(suspend_devices_and_enter+0x3c/0x300)
[   15.817858] [<c00410c8>] (suspend_devices_and_enter) from
[<c0041458>] (pm_suspend+0xcc/0x1b0)
[   15.827037] [<c0041458>] (pm_suspend) from [<c0040360>]
(state_store+0xb8/0xdc)
[   15.834678] [<c0040360>] (state_store) from [<c022891c>]
(kobj_attr_store+0x14/0x20)
[   15.842664] [<c022891c>] (kobj_attr_store) from [<c00ebcc0>]
(sysfs_kf_write+0x3c/0x48)
[   15.851209] [<c00ebcc0>] (sysfs_kf_write) from [<c00eaed8>]
(kernfs_fop_write+0x100/0x158)
[   15.860039] [<c00eaed8>] (kernfs_fop_write) from [<c009766c>]
(vfs_write+0xb4/0x188)
[   15.868335] [<c009766c>] (vfs_write) from [<c0097bec>]
(SyS_write+0x3c/0x7c)
[   15.875949] [<c0097bec>] (SyS_write) from [<c00092e0>]
(ret_fast_syscall+0x0/0x2c)


Bisecting is tricky due to other details unfortunately.

Any ideas?


Thanks,
Daniel

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2014-08-20 13:57 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-08-20 13:41 libertas_sdio and pxamci suspend issue Daniel Mack
2014-08-20 13:57 ` Ulf Hansson

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.