ARM: OMAP2+: omap_device: add fail hook for runtime_pm when bad data is detected
authorNishanth Menon <nm@ti.com>
Wed, 4 Dec 2013 01:39:13 +0000 (19:39 -0600)
committerKevin Hilman <khilman@linaro.org>
Tue, 10 Dec 2013 17:39:52 +0000 (09:39 -0800)
commitf5c33b070de3fdb8ad995b767ad0e3487cf0d242
treef97d808d0009da823a7c54695cdbee45cfb027cc
parent3daf65c0ed7660f75da927c250163c26c9043f1b
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>
arch/arm/mach-omap2/omap_device.c
arch/arm/mach-omap2/omap_device.h