diff options
Diffstat (limited to 'arch/arm/mach-omap2/control.c')
| -rw-r--r-- | arch/arm/mach-omap2/control.c | 33 |
1 files changed, 30 insertions, 3 deletions
diff --git a/arch/arm/mach-omap2/control.c b/arch/arm/mach-omap2/control.c index a8d20eef2306..1fa3294b6048 100644 --- a/arch/arm/mach-omap2/control.c +++ b/arch/arm/mach-omap2/control.c | |||
| @@ -16,15 +16,18 @@ | |||
| 16 | #include <linux/io.h> | 16 | #include <linux/io.h> |
| 17 | 17 | ||
| 18 | #include <plat/common.h> | 18 | #include <plat/common.h> |
| 19 | #include <plat/control.h> | ||
| 20 | #include <plat/sdrc.h> | 19 | #include <plat/sdrc.h> |
| 20 | |||
| 21 | #include "cm-regbits-34xx.h" | 21 | #include "cm-regbits-34xx.h" |
| 22 | #include "prm-regbits-34xx.h" | 22 | #include "prm-regbits-34xx.h" |
| 23 | #include "cm.h" | 23 | #include "cm.h" |
| 24 | #include "prm.h" | 24 | #include "prm.h" |
| 25 | #include "sdrc.h" | 25 | #include "sdrc.h" |
| 26 | #include "pm.h" | ||
| 27 | #include "control.h" | ||
| 26 | 28 | ||
| 27 | static void __iomem *omap2_ctrl_base; | 29 | static void __iomem *omap2_ctrl_base; |
| 30 | static void __iomem *omap4_ctrl_pad_base; | ||
| 28 | 31 | ||
| 29 | #if defined(CONFIG_ARCH_OMAP3) && defined(CONFIG_PM) | 32 | #if defined(CONFIG_ARCH_OMAP3) && defined(CONFIG_PM) |
| 30 | struct omap3_scratchpad { | 33 | struct omap3_scratchpad { |
| @@ -137,6 +140,7 @@ static struct omap3_control_regs control_context; | |||
| 137 | #endif /* CONFIG_ARCH_OMAP3 && CONFIG_PM */ | 140 | #endif /* CONFIG_ARCH_OMAP3 && CONFIG_PM */ |
| 138 | 141 | ||
| 139 | #define OMAP_CTRL_REGADDR(reg) (omap2_ctrl_base + (reg)) | 142 | #define OMAP_CTRL_REGADDR(reg) (omap2_ctrl_base + (reg)) |
| 143 | #define OMAP4_CTRL_PAD_REGADDR(reg) (omap4_ctrl_pad_base + (reg)) | ||
| 140 | 144 | ||
| 141 | void __init omap2_set_globals_control(struct omap_globals *omap2_globals) | 145 | void __init omap2_set_globals_control(struct omap_globals *omap2_globals) |
| 142 | { | 146 | { |
| @@ -145,6 +149,12 @@ void __init omap2_set_globals_control(struct omap_globals *omap2_globals) | |||
| 145 | omap2_ctrl_base = ioremap(omap2_globals->ctrl, SZ_4K); | 149 | omap2_ctrl_base = ioremap(omap2_globals->ctrl, SZ_4K); |
| 146 | WARN_ON(!omap2_ctrl_base); | 150 | WARN_ON(!omap2_ctrl_base); |
| 147 | } | 151 | } |
| 152 | |||
| 153 | /* Static mapping, never released */ | ||
| 154 | if (omap2_globals->ctrl_pad) { | ||
| 155 | omap4_ctrl_pad_base = ioremap(omap2_globals->ctrl_pad, SZ_4K); | ||
| 156 | WARN_ON(!omap4_ctrl_pad_base); | ||
| 157 | } | ||
| 148 | } | 158 | } |
| 149 | 159 | ||
| 150 | void __iomem *omap_ctrl_base_get(void) | 160 | void __iomem *omap_ctrl_base_get(void) |
| @@ -182,6 +192,23 @@ void omap_ctrl_writel(u32 val, u16 offset) | |||
| 182 | __raw_writel(val, OMAP_CTRL_REGADDR(offset)); | 192 | __raw_writel(val, OMAP_CTRL_REGADDR(offset)); |
| 183 | } | 193 | } |
| 184 | 194 | ||
| 195 | /* | ||
| 196 | * On OMAP4 control pad are not addressable from control | ||
| 197 | * core base. So the common omap_ctrl_read/write APIs breaks | ||
| 198 | * Hence export separate APIs to manage the omap4 pad control | ||
| 199 | * registers. This APIs will work only for OMAP4 | ||
| 200 | */ | ||
| 201 | |||
| 202 | u32 omap4_ctrl_pad_readl(u16 offset) | ||
| 203 | { | ||
| 204 | return __raw_readl(OMAP4_CTRL_PAD_REGADDR(offset)); | ||
| 205 | } | ||
| 206 | |||
| 207 | void omap4_ctrl_pad_writel(u32 val, u16 offset) | ||
| 208 | { | ||
| 209 | __raw_writel(val, OMAP4_CTRL_PAD_REGADDR(offset)); | ||
| 210 | } | ||
| 211 | |||
| 185 | #if defined(CONFIG_ARCH_OMAP3) && defined(CONFIG_PM) | 212 | #if defined(CONFIG_ARCH_OMAP3) && defined(CONFIG_PM) |
| 186 | /* | 213 | /* |
| 187 | * Clears the scratchpad contents in case of cold boot- | 214 | * Clears the scratchpad contents in case of cold boot- |
| @@ -190,7 +217,7 @@ void omap_ctrl_writel(u32 val, u16 offset) | |||
| 190 | void omap3_clear_scratchpad_contents(void) | 217 | void omap3_clear_scratchpad_contents(void) |
| 191 | { | 218 | { |
| 192 | u32 max_offset = OMAP343X_SCRATCHPAD_ROM_OFFSET; | 219 | u32 max_offset = OMAP343X_SCRATCHPAD_ROM_OFFSET; |
| 193 | u32 *v_addr; | 220 | void __iomem *v_addr; |
| 194 | u32 offset = 0; | 221 | u32 offset = 0; |
| 195 | v_addr = OMAP2_L4_IO_ADDRESS(OMAP343X_SCRATCHPAD_ROM); | 222 | v_addr = OMAP2_L4_IO_ADDRESS(OMAP343X_SCRATCHPAD_ROM); |
| 196 | if (prm_read_mod_reg(OMAP3430_GR_MOD, OMAP3_PRM_RSTST_OFFSET) & | 223 | if (prm_read_mod_reg(OMAP3430_GR_MOD, OMAP3_PRM_RSTST_OFFSET) & |
| @@ -206,7 +233,7 @@ void omap3_clear_scratchpad_contents(void) | |||
| 206 | /* Populate the scratchpad structure with restore structure */ | 233 | /* Populate the scratchpad structure with restore structure */ |
| 207 | void omap3_save_scratchpad_contents(void) | 234 | void omap3_save_scratchpad_contents(void) |
| 208 | { | 235 | { |
| 209 | void * __iomem scratchpad_address; | 236 | void __iomem *scratchpad_address; |
| 210 | u32 arm_context_addr; | 237 | u32 arm_context_addr; |
| 211 | struct omap3_scratchpad scratchpad_contents; | 238 | struct omap3_scratchpad scratchpad_contents; |
| 212 | struct omap3_scratchpad_prcm_block prcm_block_contents; | 239 | struct omap3_scratchpad_prcm_block prcm_block_contents; |
