Commit 8a917d2fc80b7c45ce0146ff134168646274a9bd

Authored by Kalle Jokiniemi
Committed by Kevin Hilman
1 parent ba50ea7eb9

ARM: OMAP: SMS: save/restore of SMS_SYSCONFIG for off-mode

The SMS_SYSCONFIG register gets reset in off mode, added a
save/restore mechanism for that.

Signed-off-by: Kalle Jokiniemi <kalle.jokiniemi@digia.com>
Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>

Showing 3 changed files with 30 additions and 0 deletions Side-by-side Diff

arch/arm/mach-omap2/pm34xx.c
... ... @@ -399,6 +399,7 @@
399 399 omap3_core_restore_context();
400 400 omap3_prcm_restore_context();
401 401 omap3_sram_restore_context();
  402 + omap2_sms_restore_context();
402 403 }
403 404 if (per_next_state < PWRDM_POWER_ON) {
404 405 per_prev_state =
arch/arm/mach-omap2/sdrc.c
... ... @@ -37,12 +37,38 @@
37 37 void __iomem *omap2_sdrc_base;
38 38 void __iomem *omap2_sms_base;
39 39  
  40 +struct omap2_sms_regs {
  41 + u32 sms_sysconfig;
  42 +};
  43 +
  44 +static struct omap2_sms_regs sms_context;
  45 +
40 46 /* SDRC_POWER register bits */
41 47 #define SDRC_POWER_EXTCLKDIS_SHIFT 3
42 48 #define SDRC_POWER_PWDENA_SHIFT 2
43 49 #define SDRC_POWER_PAGEPOLICY_SHIFT 0
44 50  
45 51 /**
  52 + * omap2_sms_save_context - Save SMS registers
  53 + *
  54 + * Save SMS registers that need to be restored after off mode.
  55 + */
  56 +void omap2_sms_save_context(void)
  57 +{
  58 + sms_context.sms_sysconfig = sms_read_reg(SMS_SYSCONFIG);
  59 +}
  60 +
  61 +/**
  62 + * omap2_sms_restore_context - Restore SMS registers
  63 + *
  64 + * Restore SMS registers that need to be Restored after off mode.
  65 + */
  66 +void omap2_sms_restore_context(void)
  67 +{
  68 + sms_write_reg(sms_context.sms_sysconfig, SMS_SYSCONFIG);
  69 +}
  70 +
  71 +/**
46 72 * omap2_sdrc_get_params - return SDRC register values for a given clock rate
47 73 * @r: SDRC clock rate (in Hz)
48 74 * @sdrc_cs0: chip select 0 ram timings **
... ... @@ -132,5 +158,6 @@
132 158 l = (1 << SDRC_POWER_EXTCLKDIS_SHIFT) |
133 159 (1 << SDRC_POWER_PAGEPOLICY_SHIFT);
134 160 sdrc_write_reg(l, SDRC_POWER);
  161 + omap2_sms_save_context();
135 162 }
arch/arm/plat-omap/include/plat/sdrc.h
... ... @@ -120,6 +120,8 @@
120 120 int omap2_sdrc_get_params(unsigned long r,
121 121 struct omap_sdrc_params **sdrc_cs0,
122 122 struct omap_sdrc_params **sdrc_cs1);
  123 +void omap2_sms_save_context(void);
  124 +void omap2_sms_restore_context(void);
123 125  
124 126 #ifdef CONFIG_ARCH_OMAP2
125 127