summaryrefslogtreecommitdiff
path: root/arch/arm/mach-omap2/omap_device.h
diff options
context:
space:
mode:
authorNishanth Menon <nm@ti.com>2013-12-03 19:39:13 -0600
committerKevin Hilman <khilman@linaro.org>2013-12-10 09:39:52 -0800
commitf5c33b070de3fdb8ad995b767ad0e3487cf0d242 (patch)
treef97d808d0009da823a7c54695cdbee45cfb027cc /arch/arm/mach-omap2/omap_device.h
parent3daf65c0ed7660f75da927c250163c26c9043f1b (diff)
downloadlwn-f5c33b070de3fdb8ad995b767ad0e3487cf0d242.tar.gz
lwn-f5c33b070de3fdb8ad995b767ad0e3487cf0d242.zip
ARM: OMAP2+: omap_device: add fail hook for runtime_pm when bad data is detected
Due to the cross dependencies between hwmod for automanaged device information for OMAP and dts node definitions, we can run into scenarios where the dts node is defined, however it's hwmod entry is yet to be added. In these cases: a) omap_device does not register a pm_domain (since it cannot find hwmod entry). b) driver does not know about (a), does a pm_runtime_get_sync which never fails c) It then tries to do some operation on the device (such as read the revision register (as part of probe) without clock or adequate OMAP generic PM operation performed for enabling the module. This causes a crash such as that reported in: https://bugzilla.kernel.org/show_bug.cgi?id=66441 When 'ti,hwmod' is provided in dt node, it is expected that the device will not function without the OMAP's power automanagement. Hence, when we hit a fail condition (due to hwmod entries not present or other similar scenario), fail at pm_domain level due to lack of data, provide enough information for it to be fixed, however, it allows for the driver to take appropriate measures to prevent crash. Reported-by: Tobias Jakobi <tjakobi@math.uni-bielefeld.de> Signed-off-by: Nishanth Menon <nm@ti.com> Acked-by: Kevin Hilman <khilman@linaro.org> Acked-by: Tony Lindgren <tony@atomide.com> Signed-off-by: Kevin Hilman <khilman@linaro.org>
Diffstat (limited to 'arch/arm/mach-omap2/omap_device.h')
-rw-r--r--arch/arm/mach-omap2/omap_device.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/arch/arm/mach-omap2/omap_device.h b/arch/arm/mach-omap2/omap_device.h
index 17ca1aec2710..78c02b355179 100644
--- a/arch/arm/mach-omap2/omap_device.h
+++ b/arch/arm/mach-omap2/omap_device.h
@@ -29,6 +29,7 @@
#include "omap_hwmod.h"
extern struct dev_pm_domain omap_device_pm_domain;
+extern struct dev_pm_domain omap_device_fail_pm_domain;
/* omap_device._state values */
#define OMAP_DEVICE_STATE_UNKNOWN 0