diff options
author | Rajendra Nayak <rnayak@ti.com> | 2013-07-29 01:01:50 -0400 |
---|---|---|
committer | Paul Walmsley <paul@pwsan.com> | 2013-07-30 07:13:36 -0400 |
commit | f66e329d889fce165074f677509d449fc92ff7b9 (patch) | |
tree | 4f491601aee180af3f8dec87bdf49393038ca1a3 /arch/arm/mach-omap2/omap_device.c | |
parent | 7dedd346941d317b6b313de4746ad0354006e68b (diff) |
ARM: OMAP2+: Avoid idling memory controllers with no drivers
Memory controllers in OMAP (like GPMC and EMIF) have the hwmods marked with
HWMOD_INIT_NO_IDLE and are left in enabled state post initial setup.
Even if they have drivers missing, avoid idling them as part of
omap_device_late_idle()
Signed-off-by: Rajendra Nayak <rnayak@ti.com>
Tested-by: Mark Jackson <mpfj-list@newflow.co.uk>
Signed-off-by: Paul Walmsley <paul@pwsan.com>
Diffstat (limited to 'arch/arm/mach-omap2/omap_device.c')
-rw-r--r-- | arch/arm/mach-omap2/omap_device.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/arch/arm/mach-omap2/omap_device.c b/arch/arm/mach-omap2/omap_device.c index 5cc92874be7e..1c82cdedd358 100644 --- a/arch/arm/mach-omap2/omap_device.c +++ b/arch/arm/mach-omap2/omap_device.c | |||
@@ -842,6 +842,7 @@ static int __init omap_device_late_idle(struct device *dev, void *data) | |||
842 | { | 842 | { |
843 | struct platform_device *pdev = to_platform_device(dev); | 843 | struct platform_device *pdev = to_platform_device(dev); |
844 | struct omap_device *od = to_omap_device(pdev); | 844 | struct omap_device *od = to_omap_device(pdev); |
845 | int i; | ||
845 | 846 | ||
846 | if (!od) | 847 | if (!od) |
847 | return 0; | 848 | return 0; |
@@ -850,6 +851,15 @@ static int __init omap_device_late_idle(struct device *dev, void *data) | |||
850 | * If omap_device state is enabled, but has no driver bound, | 851 | * If omap_device state is enabled, but has no driver bound, |
851 | * idle it. | 852 | * idle it. |
852 | */ | 853 | */ |
854 | |||
855 | /* | ||
856 | * Some devices (like memory controllers) are always kept | ||
857 | * enabled, and should not be idled even with no drivers. | ||
858 | */ | ||
859 | for (i = 0; i < od->hwmods_cnt; i++) | ||
860 | if (od->hwmods[i]->flags & HWMOD_INIT_NO_IDLE) | ||
861 | return 0; | ||
862 | |||
853 | if (od->_driver_status != BUS_NOTIFY_BOUND_DRIVER) { | 863 | if (od->_driver_status != BUS_NOTIFY_BOUND_DRIVER) { |
854 | if (od->_state == OMAP_DEVICE_STATE_ENABLED) { | 864 | if (od->_state == OMAP_DEVICE_STATE_ENABLED) { |
855 | dev_warn(dev, "%s: enabled but no driver. Idling\n", | 865 | dev_warn(dev, "%s: enabled but no driver. Idling\n", |