diff options
author | Arnd Bergmann <arnd@arndb.de> | 2017-10-19 22:44:20 +0200 |
---|---|---|
committer | Arnd Bergmann <arnd@arndb.de> | 2017-10-19 22:44:20 +0200 |
commit | a1bc4e7cee3f69955d20c1e10bb62b1803e5db6e (patch) | |
tree | 2acfda1550bf6bcf3cd12015252d0de4139fdcd5 /arch/arm/mach-omap2/omap_hwmod.c | |
parent | 82e3c83e23ff0d08de575e359b5eb5e50c7f894f (diff) | |
parent | 28fd7e99257c7d8ff41544a6ee23c96cc10799e0 (diff) |
Merge tag 'omap-for-v4.15/soc-signed' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap into next/soc
Pull "OMAP soc changes for omaps for v4.15 merge window" from Tony Lindgren:
SoC changes for omaps for v4.15 merge window that are mostly non-urgent
fixes and clean-up in preparation for dropping more platform data later
on:
- Fix am33xx/am437x MMC address space offsets
- Fix overwriting clkctrl and modulemode values when dts data is
used
- Drop unused platform init code for omap_init_hdq
- Drop unused struct omap_hwmod_mux_info
- Remove duplicate define for dra722 es1.0 silicon revision
- Add support for dra71x es2.1
- Make omap_dma_dev_info __initdata
- A series of fixes for Coccinelle found issues
* tag 'omap-for-v4.15/soc-signed' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap:
ARM: OMAP: Fix typos in two comment lines in _omap_dm_timer_request()
ARM: OMAP: Use kcalloc() in omap_system_dma_probe()
ARM: OMAP: Improve a size determination in two functions
ARM: OMAP: Delete an error message for a failed memory allocation in two functions
ARM: OMAP2+: make omap_dma_dev_info __initdata
ARM: DRA722: Add support for DRA71x Silicon Rev 2.1
ARM: DRA722: remove redundant definition of 1.0 device
ARM: OMAP2+: Drop unused omap_hwmod_mux_info
ARM: OMAP2+: Drop unused omap_init_hdq
ARM: OMAP2+: Fix overwriting of clkctrl and modulemode values
ARM: OMAP2+: Fix MMC address space mismatch for am33xx and am43xx
Diffstat (limited to 'arch/arm/mach-omap2/omap_hwmod.c')
-rw-r--r-- | arch/arm/mach-omap2/omap_hwmod.c | 49 |
1 files changed, 41 insertions, 8 deletions
diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c index 2dbd63239c54..d50101d44795 100644 --- a/arch/arm/mach-omap2/omap_hwmod.c +++ b/arch/arm/mach-omap2/omap_hwmod.c @@ -994,6 +994,34 @@ static int _enable_clocks(struct omap_hwmod *oh) } /** + * _omap4_clkctrl_managed_by_clkfwk - true if clkctrl managed by clock framework + * @oh: struct omap_hwmod * + */ +static bool _omap4_clkctrl_managed_by_clkfwk(struct omap_hwmod *oh) +{ + if (oh->prcm.omap4.flags & HWMOD_OMAP4_CLKFWK_CLKCTR_CLOCK) + return true; + + return false; +} + +/** + * _omap4_has_clkctrl_clock - returns true if a module has clkctrl clock + * @oh: struct omap_hwmod * + */ +static bool _omap4_has_clkctrl_clock(struct omap_hwmod *oh) +{ + if (oh->prcm.omap4.clkctrl_offs) + return true; + + if (!oh->prcm.omap4.clkctrl_offs && + oh->prcm.omap4.flags & HWMOD_OMAP4_ZERO_CLKCTRL_OFFSET) + return true; + + return false; +} + +/** * _disable_clocks - disable hwmod main clock and interface clocks * @oh: struct omap_hwmod * * @@ -1030,7 +1058,8 @@ static int _disable_clocks(struct omap_hwmod *oh) */ static void _omap4_enable_module(struct omap_hwmod *oh) { - if (!oh->clkdm || !oh->prcm.omap4.modulemode) + if (!oh->clkdm || !oh->prcm.omap4.modulemode || + _omap4_clkctrl_managed_by_clkfwk(oh)) return; pr_debug("omap_hwmod: %s: %s: %d\n", @@ -1061,8 +1090,10 @@ static int _omap4_wait_target_disable(struct omap_hwmod *oh) if (oh->flags & HWMOD_NO_IDLEST) return 0; - if (!oh->prcm.omap4.clkctrl_offs && - !(oh->prcm.omap4.flags & HWMOD_OMAP4_ZERO_CLKCTRL_OFFSET)) + if (_omap4_clkctrl_managed_by_clkfwk(oh)) + return 0; + + if (!_omap4_has_clkctrl_clock(oh)) return 0; return omap_cm_wait_module_idle(oh->clkdm->prcm_partition, @@ -1847,7 +1878,8 @@ static int _omap4_disable_module(struct omap_hwmod *oh) { int v; - if (!oh->clkdm || !oh->prcm.omap4.modulemode) + if (!oh->clkdm || !oh->prcm.omap4.modulemode || + _omap4_clkctrl_managed_by_clkfwk(oh)) return -EINVAL; /* @@ -2829,8 +2861,10 @@ static int _omap4_wait_target_ready(struct omap_hwmod *oh) if (!_find_mpu_rt_port(oh)) return 0; - if (!oh->prcm.omap4.clkctrl_offs && - !(oh->prcm.omap4.flags & HWMOD_OMAP4_ZERO_CLKCTRL_OFFSET)) + if (_omap4_clkctrl_managed_by_clkfwk(oh)) + return 0; + + if (!_omap4_has_clkctrl_clock(oh)) return 0; /* XXX check module SIDLEMODE, hardreset status */ @@ -2986,8 +3020,7 @@ static int _omap4_disable_direct_prcm(struct omap_hwmod *oh) if (!oh) return -EINVAL; - oh->prcm.omap4.clkctrl_offs = 0; - oh->prcm.omap4.modulemode = 0; + oh->prcm.omap4.flags |= HWMOD_OMAP4_CLKFWK_CLKCTR_CLOCK; return 0; } |