Commit c60cc2e4d974ee9815399c536c538162ae930cc5
Exists in
smarc-ti-linux-3.14.y
and in
1 other branch
Merge branch 'connectivity-ti-linux-3.14.y' of git://git.ti.com/connectivity-int…
…egration-tree/connectivity-ti-linux-kernel into ti-linux-3.14.y TI-Feature: connectivity TI-Tree: git://git.ti.com/connectivity-integration-tree/connectivity-ti-linux-kernel.git TI-Branch: connectivity-ti-linux-3.14.y * 'connectivity-ti-linux-3.14.y' of git://git.ti.com/connectivity-integration-tree/connectivity-ti-linux-kernel: ARM: DRA7: GMAC: Apply Errata i877 ARM: OMAP2+: GMAC: Fix clock domain flags ARM: OMAP2+: hwmod: Introduce ti,no-idle dt property Signed-off-by: Dan Murphy <dmurphy@ti.com>
Showing 7 changed files Side-by-side Diff
Documentation/devicetree/bindings/arm/omap/omap.txt
... | ... | @@ -25,6 +25,7 @@ |
25 | 25 | - ti,no-idle-on-init: When present, the module should not be idled at init |
26 | 26 | - ti,no_init: When present, the module is marked as disabled immediately and |
27 | 27 | no setup is done. |
28 | +- ti,no-idle: When present, the module is never allowed to idle. | |
28 | 29 | Example: |
29 | 30 | |
30 | 31 | spinlock@1 { |
arch/arm/boot/dts/am57xx-beagle-x15.dts
arch/arm/boot/dts/dra7-evm.dts
arch/arm/boot/dts/dra72-evm.dts
arch/arm/mach-omap2/clockdomains7xx_data.c
... | ... | @@ -482,7 +482,7 @@ |
482 | 482 | .dep_bit = DRA7XX_GMAC_STATDEP_SHIFT, |
483 | 483 | .wkdep_srcs = gmac_wkup_sleep_deps, |
484 | 484 | .sleepdep_srcs = gmac_wkup_sleep_deps, |
485 | - .flags = CLKDM_CAN_HWSUP_SWSUP, | |
485 | + .flags = CLKDM_CAN_SWSUP, | |
486 | 486 | }; |
487 | 487 | |
488 | 488 | static struct clockdomain l4cfg_7xx_clkdm = { |
arch/arm/mach-omap2/omap_hwmod.c
... | ... | @@ -2262,6 +2262,11 @@ |
2262 | 2262 | */ |
2263 | 2263 | static int _idle(struct omap_hwmod *oh) |
2264 | 2264 | { |
2265 | + if (oh->flags & HWMOD_NO_IDLE) { | |
2266 | + oh->_int_flags |= _HWMOD_SKIP_ENABLE; | |
2267 | + return 0; | |
2268 | + } | |
2269 | + | |
2265 | 2270 | pr_debug("omap_hwmod: %s: idling\n", oh->name); |
2266 | 2271 | |
2267 | 2272 | if (oh->_state != _HWMOD_STATE_ENABLED) { |
... | ... | @@ -2582,6 +2587,8 @@ |
2582 | 2587 | oh->flags |= HWMOD_INIT_NO_IDLE; |
2583 | 2588 | if (of_find_property(np, "ti,no-init", NULL)) |
2584 | 2589 | oh->flags |= HWMOD_NO_INIT; |
2590 | + if (of_find_property(np, "ti,no-idle", NULL)) | |
2591 | + oh->flags |= HWMOD_NO_IDLE; | |
2585 | 2592 | } |
2586 | 2593 | if (oh->flags & HWMOD_NO_INIT) |
2587 | 2594 | oh->_state = _HWMOD_STATE_DISABLED; |
... | ... | @@ -2710,7 +2717,7 @@ |
2710 | 2717 | * XXX HWMOD_INIT_NO_IDLE does not belong in hwmod data - |
2711 | 2718 | * it should be set by the core code as a runtime flag during startup |
2712 | 2719 | */ |
2713 | - if ((oh->flags & HWMOD_INIT_NO_IDLE) && | |
2720 | + if ((oh->flags & (HWMOD_INIT_NO_IDLE | HWMOD_NO_IDLE)) && | |
2714 | 2721 | (postsetup_state == _HWMOD_STATE_IDLE)) { |
2715 | 2722 | oh->_int_flags |= _HWMOD_SKIP_ENABLE; |
2716 | 2723 | postsetup_state = _HWMOD_STATE_ENABLED; |
arch/arm/mach-omap2/omap_hwmod.h
... | ... | @@ -522,6 +522,8 @@ |
522 | 522 | * default after losing context if no driver is present and using the |
523 | 523 | * hwmod. This will break subsequent suspend cycles but can be fixed by |
524 | 524 | * enabling then idling the unused hwmod after each suspend cycle. |
525 | + * HWMOD_NO_IDLE: Do not idle the hwmod at all. Useful to handle certain | |
526 | + * IPs like CPSW on DRA7, where clocks to this module cannot be disabled. | |
525 | 527 | */ |
526 | 528 | #define HWMOD_SWSUP_SIDLE (1 << 0) |
527 | 529 | #define HWMOD_SWSUP_MSTANDBY (1 << 1) |
... | ... | @@ -538,6 +540,7 @@ |
538 | 540 | #define HWMOD_SWSUP_SIDLE_ACT (1 << 12) |
539 | 541 | #define HWMOD_NO_INIT (1 << 13) |
540 | 542 | #define HWMOD_NEEDS_REIDLE (1 << 14) |
543 | +#define HWMOD_NO_IDLE (1 << 15) | |
541 | 544 | |
542 | 545 | /* |
543 | 546 | * omap_hwmod._int_flags definitions |