1d2912cb1SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
28bd22949SKevin Hilman /*
38bd22949SKevin Hilman * OMAP2/3 Power Management Routines
48bd22949SKevin Hilman *
58bd22949SKevin Hilman * Copyright (C) 2008 Nokia Corporation
68bd22949SKevin Hilman * Jouni Hogander
78bd22949SKevin Hilman */
88bd22949SKevin Hilman #ifndef __ARCH_ARM_MACH_OMAP2_PM_H
98bd22949SKevin Hilman #define __ARCH_ARM_MACH_OMAP2_PM_H
108bd22949SKevin Hilman
110c0a5d61SThara Gopinath #include <linux/err.h>
120c0a5d61SThara Gopinath
1372e06d08SPaul Walmsley #include "powerdomain.h"
14331b93f4SPeter 'p2' De Schrijver
15164e0cbfSDaniel Lezcano #ifdef CONFIG_CPU_IDLE
16164e0cbfSDaniel Lezcano extern int __init omap3_idle_init(void);
17164e0cbfSDaniel Lezcano extern int __init omap4_idle_init(void);
18164e0cbfSDaniel Lezcano #else
omap3_idle_init(void)19164e0cbfSDaniel Lezcano static inline int omap3_idle_init(void)
20164e0cbfSDaniel Lezcano {
21164e0cbfSDaniel Lezcano return 0;
22164e0cbfSDaniel Lezcano }
23164e0cbfSDaniel Lezcano
omap4_idle_init(void)24164e0cbfSDaniel Lezcano static inline int omap4_idle_init(void)
25164e0cbfSDaniel Lezcano {
26164e0cbfSDaniel Lezcano return 0;
27164e0cbfSDaniel Lezcano }
28164e0cbfSDaniel Lezcano #endif
29164e0cbfSDaniel Lezcano
3027d59a4aSTero Kristo extern void *omap3_secure_ram_storage;
31c40552bcSKevin Hilman extern void omap3_pm_off_mode_enable(int);
32*8c0956aaSPeter Zijlstra extern void omap_sram_idle(bool rcuidle);
3392206fd2SPaul Walmsley extern int omap_pm_clkdms_setup(struct clockdomain *clkdm, void *unused);
3427d59a4aSTero Kristo
3568d4778cSTero Kristo extern int omap3_pm_get_suspend_state(struct powerdomain *pwrdm);
3668d4778cSTero Kristo extern int omap3_pm_set_suspend_state(struct powerdomain *pwrdm, int state);
3768d4778cSTero Kristo
38ebfa88cfSLoïc Minier extern u32 enable_off_mode;
39ae559d87SManjunatha GK
40ae559d87SManjunatha GK #if defined(CONFIG_PM_DEBUG) && defined(CONFIG_DEBUG_FS)
41331b93f4SPeter 'p2' De Schrijver extern void pm_dbg_update_time(struct powerdomain *pwrdm, int prev);
428bd22949SKevin Hilman #else
43331b93f4SPeter 'p2' De Schrijver #define pm_dbg_update_time(pwrdm, prev) do {} while (0);
448bd22949SKevin Hilman #endif /* CONFIG_PM_DEBUG */
458bd22949SKevin Hilman
4646e130d2SJean Pihet /* 24xx */
478bd22949SKevin Hilman extern void omap24xx_cpu_suspend(u32 dll_ctrl, void __iomem *sdrc_dlla_ctrl,
488bd22949SKevin Hilman void __iomem *sdrc_power);
498bd22949SKevin Hilman extern unsigned int omap24xx_cpu_suspend_sz;
5046e130d2SJean Pihet
5146e130d2SJean Pihet /* 3xxx */
52cbe26349SRussell King extern void omap34xx_cpu_suspend(int save_state);
5346e130d2SJean Pihet
5446e130d2SJean Pihet /* omap3_do_wfi function pointer and size, for copy to SRAM */
5546e130d2SJean Pihet extern void omap3_do_wfi(void);
5646e130d2SJean Pihet extern unsigned int omap3_do_wfi_sz;
5746e130d2SJean Pihet /* ... and its pointer from SRAM after copy */
5846e130d2SJean Pihet extern void (*omap3_do_wfi_sram)(void);
5946e130d2SJean Pihet
6041d9d44dSDave Gerlach extern struct am33xx_pm_sram_addr am33xx_pm_sram;
6141d9d44dSDave Gerlach extern struct am33xx_pm_sram_addr am43xx_pm_sram;
6241d9d44dSDave Gerlach
6346e130d2SJean Pihet extern void omap3_save_scratchpad_contents(void);
648bd22949SKevin Hilman
65458e999eSNishanth Menon #define PM_RTA_ERRATUM_i608 (1 << 0)
66cc1b6028SEduardo Valentin #define PM_SDRC_WAKEUP_ERRATUM_i583 (1 << 1)
67856c3c5bSPaul Walmsley #define PM_PER_MEMORIES_ERRATUM_i582 (1 << 2)
68458e999eSNishanth Menon
698cdfd834SNishanth Menon #if defined(CONFIG_PM) && defined(CONFIG_ARCH_OMAP3)
708cdfd834SNishanth Menon extern u16 pm34xx_errata;
718cdfd834SNishanth Menon #define IS_PM34XX_ERRATUM(id) (pm34xx_errata & (id))
72c4236d2eSPeter 'p2' De Schrijver extern void enable_omap3630_toggle_l2_on_restore(void);
738cdfd834SNishanth Menon #else
748cdfd834SNishanth Menon #define IS_PM34XX_ERRATUM(id) 0
enable_omap3630_toggle_l2_on_restore(void)75c4236d2eSPeter 'p2' De Schrijver static inline void enable_omap3630_toggle_l2_on_restore(void) { }
768cdfd834SNishanth Menon #endif /* defined(CONFIG_PM) && defined(CONFIG_ARCH_OMAP3) */
778cdfd834SNishanth Menon
78ff999b8aSSantosh Shilimkar #define PM_OMAP4_ROM_SMP_BOOT_ERRATUM_GICD (1 << 0)
796099dd37SRajendra Nayak #define PM_OMAP4_CPU_OSWR_DISABLE (1 << 1)
80ff999b8aSSantosh Shilimkar
816d785c96SNishanth Menon #if defined(CONFIG_PM) && (defined(CONFIG_ARCH_OMAP4) ||\
826d785c96SNishanth Menon defined(CONFIG_SOC_OMAP5) || defined(CONFIG_SOC_DRA7XX))
83c9621844STero Kristo extern u16 pm44xx_errata;
84c9621844STero Kristo #define IS_PM44XX_ERRATUM(id) (pm44xx_errata & (id))
85c9621844STero Kristo #else
86c9621844STero Kristo #define IS_PM44XX_ERRATUM(id) 0
87c9621844STero Kristo #endif
88c9621844STero Kristo
89d44fa156STony Lindgren #define OMAP4_VP_CONFIG_ERROROFFSET 0x00
90d44fa156STony Lindgren #define OMAP4_VP_VSTEPMIN_VSTEPMIN 0x01
91d44fa156STony Lindgren #define OMAP4_VP_VSTEPMAX_VSTEPMAX 0x04
92d44fa156STony Lindgren #define OMAP4_VP_VLIMITTO_TIMEOUT_US 200
93d44fa156STony Lindgren
947fb149ffSJean Pihet #ifdef CONFIG_POWER_AVS_OMAP
950c0a5d61SThara Gopinath extern int omap_devinit_smartreflex(void);
960c0a5d61SThara Gopinath #else
omap_devinit_smartreflex(void)970c0a5d61SThara Gopinath static inline int omap_devinit_smartreflex(void)
980c0a5d61SThara Gopinath {
990c0a5d61SThara Gopinath return -EINVAL;
1000c0a5d61SThara Gopinath }
1010c0a5d61SThara Gopinath #endif
1020c0a5d61SThara Gopinath
103fbc319f6SThara Gopinath #ifdef CONFIG_TWL4030_CORE
104fbc319f6SThara Gopinath extern int omap3_twl_init(void);
1057bc3ed9aSThara Gopinath extern int omap4_twl_init(void);
106fbc319f6SThara Gopinath #else
omap3_twl_init(void)107fbc319f6SThara Gopinath static inline int omap3_twl_init(void)
108fbc319f6SThara Gopinath {
109fbc319f6SThara Gopinath return -EINVAL;
110fbc319f6SThara Gopinath }
omap4_twl_init(void)1117bc3ed9aSThara Gopinath static inline int omap4_twl_init(void)
1127bc3ed9aSThara Gopinath {
1137bc3ed9aSThara Gopinath return -EINVAL;
1147bc3ed9aSThara Gopinath }
115fbc319f6SThara Gopinath #endif
116fbc319f6SThara Gopinath
117d44fa156STony Lindgren #if IS_ENABLED(CONFIG_MFD_CPCAP)
118d44fa156STony Lindgren extern int omap4_cpcap_init(void);
119d44fa156STony Lindgren #else
omap4_cpcap_init(void)120d44fa156STony Lindgren static inline int omap4_cpcap_init(void)
121d44fa156STony Lindgren {
122d44fa156STony Lindgren return -EINVAL;
123d44fa156STony Lindgren }
124d44fa156STony Lindgren #endif
125d44fa156STony Lindgren
126908b75e8STero Kristo #ifdef CONFIG_PM
127908b75e8STero Kristo extern void omap_pm_get_oscillator(u32 *tstart, u32 *tshut);
128908b75e8STero Kristo #else
omap_pm_get_oscillator(u32 * tstart,u32 * tshut)12974d29168SKevin Hilman static inline void omap_pm_get_oscillator(u32 *tstart, u32 *tshut) { *tstart = *tshut = 0; }
130908b75e8STero Kristo #endif
131908b75e8STero Kristo
1322e4b62dcSDave Gerlach #ifdef CONFIG_SUSPEND
1332e4b62dcSDave Gerlach void omap_common_suspend_init(void *pm_suspend);
1342e4b62dcSDave Gerlach #else
omap_common_suspend_init(void * pm_suspend)1352e4b62dcSDave Gerlach static inline void omap_common_suspend_init(void *pm_suspend)
1362e4b62dcSDave Gerlach {
1372e4b62dcSDave Gerlach }
1382e4b62dcSDave Gerlach #endif /* CONFIG_SUSPEND */
1398bd22949SKevin Hilman #endif
140