Commit 8fcc774fc72910fa26767ae8ca2da3d64ae80a01

Authored by Bartlomiej Zolnierkiewicz
Committed by Kukjin Kim
1 parent c645a598f9

ARM: EXYNOS: add exynos3250 PMU support

This patch prepares the PMU code for the future:
- suspend/resume (S2R) support
- cpuidle AFTR/W-AFTR modes support
on Exynos3250.

Cc: Vikas Sajjan <vikas.sajjan@samsung.com>
Reviewed-by: Pankaj Dubey <pankaj.dubey@samsung.com>
Acked-by: Kyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
[kgene.kim@samsung.com: fixed coding style]
Signed-off-by: Kukjin Kim <kgene.kim@samsung.com>

Showing 2 changed files with 295 additions and 0 deletions Side-by-side Diff

arch/arm/mach-exynos/pmu.c
... ... @@ -31,6 +31,7 @@
31 31  
32 32 void (*pmu_init)(void);
33 33 void (*powerdown_conf)(enum sys_powerdown);
  34 + void (*powerdown_conf_extra)(enum sys_powerdown);
34 35 };
35 36  
36 37 struct exynos_pmu_context {
... ... @@ -51,6 +52,92 @@
51 52 return readl_relaxed(pmu_base_addr + offset);
52 53 }
53 54  
  55 +static struct exynos_pmu_conf exynos3250_pmu_config[] = {
  56 + /* { .offset = offset, .val = { AFTR, W-AFTR, SLEEP } */
  57 + { EXYNOS3_ARM_CORE0_SYS_PWR_REG, { 0x0, 0x0, 0x2} },
  58 + { EXYNOS3_DIS_IRQ_ARM_CORE0_LOCAL_SYS_PWR_REG, { 0x0, 0x0, 0x0} },
  59 + { EXYNOS3_DIS_IRQ_ARM_CORE0_CENTRAL_SYS_PWR_REG, { 0x0, 0x0, 0x0} },
  60 + { EXYNOS3_ARM_CORE1_SYS_PWR_REG, { 0x0, 0x0, 0x2} },
  61 + { EXYNOS3_DIS_IRQ_ARM_CORE1_LOCAL_SYS_PWR_REG, { 0x0, 0x0, 0x0} },
  62 + { EXYNOS3_DIS_IRQ_ARM_CORE1_CENTRAL_SYS_PWR_REG, { 0x0, 0x0, 0x0} },
  63 + { EXYNOS3_ISP_ARM_SYS_PWR_REG, { 0x1, 0x0, 0x0} },
  64 + { EXYNOS3_DIS_IRQ_ISP_ARM_LOCAL_SYS_PWR_REG, { 0x0, 0x0, 0x0} },
  65 + { EXYNOS3_DIS_IRQ_ISP_ARM_CENTRAL_SYS_PWR_REG, { 0x0, 0x0, 0x0} },
  66 + { EXYNOS3_ARM_COMMON_SYS_PWR_REG, { 0x0, 0x0, 0x2} },
  67 + { EXYNOS3_ARM_L2_SYS_PWR_REG, { 0x0, 0x0, 0x3} },
  68 + { EXYNOS3_CMU_ACLKSTOP_SYS_PWR_REG, { 0x1, 0x1, 0x0} },
  69 + { EXYNOS3_CMU_SCLKSTOP_SYS_PWR_REG, { 0x1, 0x1, 0x0} },
  70 + { EXYNOS3_CMU_RESET_SYS_PWR_REG, { 0x1, 0x1, 0x0} },
  71 + { EXYNOS3_DRAM_FREQ_DOWN_SYS_PWR_REG, { 0x1, 0x1, 0x1} },
  72 + { EXYNOS3_DDRPHY_DLLOFF_SYS_PWR_REG, { 0x1, 0x1, 0x1} },
  73 + { EXYNOS3_LPDDR_PHY_DLL_LOCK_SYS_PWR_REG, { 0x1, 0x1, 0x1} },
  74 + { EXYNOS3_CMU_ACLKSTOP_COREBLK_SYS_PWR_REG, { 0x1, 0x0, 0x0} },
  75 + { EXYNOS3_CMU_SCLKSTOP_COREBLK_SYS_PWR_REG, { 0x1, 0x0, 0x0} },
  76 + { EXYNOS3_CMU_RESET_COREBLK_SYS_PWR_REG, { 0x1, 0x1, 0x0} },
  77 + { EXYNOS3_APLL_SYSCLK_SYS_PWR_REG, { 0x1, 0x0, 0x0} },
  78 + { EXYNOS3_MPLL_SYSCLK_SYS_PWR_REG, { 0x1, 0x0, 0x0} },
  79 + { EXYNOS3_BPLL_SYSCLK_SYS_PWR_REG, { 0x1, 0x0, 0x0} },
  80 + { EXYNOS3_VPLL_SYSCLK_SYS_PWR_REG, { 0x1, 0x1, 0x0} },
  81 + { EXYNOS3_EPLL_SYSCLK_SYS_PWR_REG, { 0x1, 0x0, 0x0} },
  82 + { EXYNOS3_UPLL_SYSCLK_SYS_PWR_REG, { 0x1, 0x1, 0x1} },
  83 + { EXYNOS3_EPLLUSER_SYSCLK_SYS_PWR_REG, { 0x1, 0x0, 0x0} },
  84 + { EXYNOS3_MPLLUSER_SYSCLK_SYS_PWR_REG, { 0x1, 0x0, 0x0} },
  85 + { EXYNOS3_BPLLUSER_SYSCLK_SYS_PWR_REG, { 0x1, 0x0, 0x0} },
  86 + { EXYNOS3_CMU_CLKSTOP_CAM_SYS_PWR_REG, { 0x1, 0x0, 0x0} },
  87 + { EXYNOS3_CMU_CLKSTOP_MFC_SYS_PWR_REG, { 0x1, 0x0, 0x0} },
  88 + { EXYNOS3_CMU_CLKSTOP_G3D_SYS_PWR_REG, { 0x1, 0x0, 0x0} },
  89 + { EXYNOS3_CMU_CLKSTOP_LCD0_SYS_PWR_REG, { 0x1, 0x0, 0x0} },
  90 + { EXYNOS3_CMU_CLKSTOP_ISP_SYS_PWR_REG, { 0x1, 0x0, 0x0} },
  91 + { EXYNOS3_CMU_CLKSTOP_MAUDIO_SYS_PWR_REG, { 0x1, 0x0, 0x0} },
  92 + { EXYNOS3_CMU_RESET_CAM_SYS_PWR_REG, { 0x1, 0x0, 0x0} },
  93 + { EXYNOS3_CMU_RESET_MFC_SYS_PWR_REG, { 0x1, 0x0, 0x0} },
  94 + { EXYNOS3_CMU_RESET_G3D_SYS_PWR_REG, { 0x1, 0x0, 0x0} },
  95 + { EXYNOS3_CMU_RESET_LCD0_SYS_PWR_REG, { 0x1, 0x0, 0x0} },
  96 + { EXYNOS3_CMU_RESET_ISP_SYS_PWR_REG, { 0x1, 0x0, 0x0} },
  97 + { EXYNOS3_CMU_RESET_MAUDIO_SYS_PWR_REG, { 0x1, 0x0, 0x0} },
  98 + { EXYNOS3_TOP_BUS_SYS_PWR_REG, { 0x3, 0x0, 0x0} },
  99 + { EXYNOS3_TOP_RETENTION_SYS_PWR_REG, { 0x1, 0x1, 0x1} },
  100 + { EXYNOS3_TOP_PWR_SYS_PWR_REG, { 0x3, 0x3, 0x3} },
  101 + { EXYNOS3_TOP_BUS_COREBLK_SYS_PWR_REG, { 0x3, 0x0, 0x0} },
  102 + { EXYNOS3_TOP_RETENTION_COREBLK_SYS_PWR_REG, { 0x1, 0x1, 0x1} },
  103 + { EXYNOS3_TOP_PWR_COREBLK_SYS_PWR_REG, { 0x3, 0x3, 0x3} },
  104 + { EXYNOS3_LOGIC_RESET_SYS_PWR_REG, { 0x1, 0x1, 0x0} },
  105 + { EXYNOS3_OSCCLK_GATE_SYS_PWR_REG, { 0x1, 0x1, 0x1} },
  106 + { EXYNOS3_LOGIC_RESET_COREBLK_SYS_PWR_REG, { 0x1, 0x1, 0x0} },
  107 + { EXYNOS3_OSCCLK_GATE_COREBLK_SYS_PWR_REG, { 0x1, 0x0, 0x1} },
  108 + { EXYNOS3_PAD_RETENTION_DRAM_SYS_PWR_REG, { 0x1, 0x1, 0x0} },
  109 + { EXYNOS3_PAD_RETENTION_MAUDIO_SYS_PWR_REG, { 0x1, 0x1, 0x0} },
  110 + { EXYNOS3_PAD_RETENTION_GPIO_SYS_PWR_REG, { 0x1, 0x1, 0x0} },
  111 + { EXYNOS3_PAD_RETENTION_UART_SYS_PWR_REG, { 0x1, 0x1, 0x0} },
  112 + { EXYNOS3_PAD_RETENTION_MMC0_SYS_PWR_REG, { 0x1, 0x1, 0x0} },
  113 + { EXYNOS3_PAD_RETENTION_MMC1_SYS_PWR_REG, { 0x1, 0x1, 0x0} },
  114 + { EXYNOS3_PAD_RETENTION_MMC2_SYS_PWR_REG, { 0x1, 0x1, 0x0} },
  115 + { EXYNOS3_PAD_RETENTION_SPI_SYS_PWR_REG, { 0x1, 0x1, 0x0} },
  116 + { EXYNOS3_PAD_RETENTION_EBIA_SYS_PWR_REG, { 0x1, 0x1, 0x0} },
  117 + { EXYNOS3_PAD_RETENTION_EBIB_SYS_PWR_REG, { 0x1, 0x1, 0x0} },
  118 + { EXYNOS3_PAD_RETENTION_JTAG_SYS_PWR_REG, { 0x1, 0x1, 0x0} },
  119 + { EXYNOS3_PAD_ISOLATION_SYS_PWR_REG, { 0x1, 0x1, 0x0} },
  120 + { EXYNOS3_PAD_ALV_SEL_SYS_PWR_REG, { 0x1, 0x1, 0x0} },
  121 + { EXYNOS3_XUSBXTI_SYS_PWR_REG, { 0x1, 0x1, 0x0} },
  122 + { EXYNOS3_XXTI_SYS_PWR_REG, { 0x1, 0x1, 0x0} },
  123 + { EXYNOS3_EXT_REGULATOR_SYS_PWR_REG, { 0x1, 0x1, 0x0} },
  124 + { EXYNOS3_EXT_REGULATOR_COREBLK_SYS_PWR_REG, { 0x1, 0x1, 0x0} },
  125 + { EXYNOS3_GPIO_MODE_SYS_PWR_REG, { 0x1, 0x1, 0x0} },
  126 + { EXYNOS3_GPIO_MODE_MAUDIO_SYS_PWR_REG, { 0x1, 0x1, 0x0} },
  127 + { EXYNOS3_TOP_ASB_RESET_SYS_PWR_REG, { 0x1, 0x1, 0x0} },
  128 + { EXYNOS3_TOP_ASB_ISOLATION_SYS_PWR_REG, { 0x1, 0x1, 0x0} },
  129 + { EXYNOS3_TOP_ASB_RESET_COREBLK_SYS_PWR_REG, { 0x1, 0x1, 0x0} },
  130 + { EXYNOS3_TOP_ASB_ISOLATION_COREBLK_SYS_PWR_REG, { 0x1, 0x1, 0x0} },
  131 + { EXYNOS3_CAM_SYS_PWR_REG, { 0x7, 0x0, 0x0} },
  132 + { EXYNOS3_MFC_SYS_PWR_REG, { 0x7, 0x0, 0x0} },
  133 + { EXYNOS3_G3D_SYS_PWR_REG, { 0x7, 0x0, 0x0} },
  134 + { EXYNOS3_LCD0_SYS_PWR_REG, { 0x7, 0x0, 0x0} },
  135 + { EXYNOS3_ISP_SYS_PWR_REG, { 0x7, 0x0, 0x0} },
  136 + { EXYNOS3_MAUDIO_SYS_PWR_REG, { 0x7, 0x0, 0x0} },
  137 + { EXYNOS3_CMU_SYSCLK_ISP_SYS_PWR_REG, { 0x1, 0x0, 0x0} },
  138 + { PMU_TABLE_END,},
  139 +};
  140 +
54 141 static const struct exynos_pmu_conf exynos4210_pmu_config[] = {
55 142 /* { .offset = offset, .val = { AFTR, LPA, SLEEP } */
56 143 { S5P_ARM_CORE0_LOWPWR, { 0x0, 0x0, 0x2 } },
... ... @@ -495,6 +582,44 @@
495 582 { PMU_TABLE_END,},
496 583 };
497 584  
  585 +static unsigned int const exynos3250_list_feed[] = {
  586 + EXYNOS3_ARM_CORE_OPTION(0),
  587 + EXYNOS3_ARM_CORE_OPTION(1),
  588 + EXYNOS3_ARM_CORE_OPTION(2),
  589 + EXYNOS3_ARM_CORE_OPTION(3),
  590 + EXYNOS3_ARM_COMMON_OPTION,
  591 + EXYNOS3_TOP_PWR_OPTION,
  592 + EXYNOS3_CORE_TOP_PWR_OPTION,
  593 + S5P_CAM_OPTION,
  594 + S5P_MFC_OPTION,
  595 + S5P_G3D_OPTION,
  596 + S5P_LCD0_OPTION,
  597 + S5P_ISP_OPTION,
  598 +};
  599 +
  600 +static void exynos3250_powerdown_conf_extra(enum sys_powerdown mode)
  601 +{
  602 + unsigned int i;
  603 + unsigned int tmp;
  604 +
  605 + /* Enable only SC_FEEDBACK */
  606 + for (i = 0; i < ARRAY_SIZE(exynos3250_list_feed); i++) {
  607 + tmp = pmu_raw_readl(exynos3250_list_feed[i]);
  608 + tmp &= ~(EXYNOS3_OPTION_USE_SC_COUNTER);
  609 + tmp |= EXYNOS3_OPTION_USE_SC_FEEDBACK;
  610 + pmu_raw_writel(tmp, exynos3250_list_feed[i]);
  611 + }
  612 +
  613 + if (mode != SYS_SLEEP)
  614 + return;
  615 +
  616 + pmu_raw_writel(XUSBXTI_DURATION, EXYNOS3_XUSBXTI_DURATION);
  617 + pmu_raw_writel(XXTI_DURATION, EXYNOS3_XXTI_DURATION);
  618 + pmu_raw_writel(EXT_REGULATOR_DURATION, EXYNOS3_EXT_REGULATOR_DURATION);
  619 + pmu_raw_writel(EXT_REGULATOR_COREBLK_DURATION,
  620 + EXYNOS3_EXT_REGULATOR_COREBLK_DURATION);
  621 +}
  622 +
498 623 static unsigned int const exynos5_list_both_cnt_feed[] = {
499 624 EXYNOS5_ARM_CORE0_OPTION,
500 625 EXYNOS5_ARM_CORE1_OPTION,
... ... @@ -632,6 +757,9 @@
632 757 pmu_data->pmu_config[i].offset);
633 758 }
634 759  
  760 + if (pmu_data->powerdown_conf_extra)
  761 + pmu_data->powerdown_conf_extra(mode);
  762 +
635 763 if (pmu_data->pmu_config_extra) {
636 764 for (i = 0; pmu_data->pmu_config_extra[i].offset != PMU_TABLE_END; i++)
637 765 pmu_raw_writel(pmu_data->pmu_config_extra[i].val[mode],
... ... @@ -639,6 +767,36 @@
639 767 }
640 768 }
641 769  
  770 +static void exynos3250_pmu_init(void)
  771 +{
  772 + unsigned int value;
  773 +
  774 + /*
  775 + * To prevent from issuing new bus request form L2 memory system
  776 + * If core status is power down, should be set '1' to L2 power down
  777 + */
  778 + value = pmu_raw_readl(EXYNOS3_ARM_COMMON_OPTION);
  779 + value |= EXYNOS3_OPTION_SKIP_DEACTIVATE_ACEACP_IN_PWDN;
  780 + pmu_raw_writel(value, EXYNOS3_ARM_COMMON_OPTION);
  781 +
  782 + /* Enable USE_STANDBY_WFI for all CORE */
  783 + pmu_raw_writel(S5P_USE_STANDBY_WFI_ALL, S5P_CENTRAL_SEQ_OPTION);
  784 +
  785 + /*
  786 + * Set PSHOLD port for output high
  787 + */
  788 + value = pmu_raw_readl(S5P_PS_HOLD_CONTROL);
  789 + value |= S5P_PS_HOLD_OUTPUT_HIGH;
  790 + pmu_raw_writel(value, S5P_PS_HOLD_CONTROL);
  791 +
  792 + /*
  793 + * Enable signal for PSHOLD port
  794 + */
  795 + value = pmu_raw_readl(S5P_PS_HOLD_CONTROL);
  796 + value |= S5P_PS_HOLD_EN;
  797 + pmu_raw_writel(value, S5P_PS_HOLD_CONTROL);
  798 +}
  799 +
642 800 static void exynos5250_pmu_init(void)
643 801 {
644 802 unsigned int value;
... ... @@ -717,6 +875,12 @@
717 875 }
718 876  
719 877  
  878 +static const struct exynos_pmu_data exynos3250_pmu_data = {
  879 + .pmu_config = exynos3250_pmu_config,
  880 + .pmu_init = exynos3250_pmu_init,
  881 + .powerdown_conf_extra = exynos3250_powerdown_conf_extra,
  882 +};
  883 +
720 884 static const struct exynos_pmu_data exynos4210_pmu_data = {
721 885 .pmu_config = exynos4210_pmu_config,
722 886 };
... ... @@ -747,6 +911,9 @@
747 911 */
748 912 static const struct of_device_id exynos_pmu_of_device_ids[] = {
749 913 {
  914 + .compatible = "samsung,exynos3250-pmu",
  915 + .data = &exynos3250_pmu_data,
  916 + }, {
750 917 .compatible = "samsung,exynos4210-pmu",
751 918 .data = &exynos4210_pmu_data,
752 919 }, {
arch/arm/mach-exynos/regs-pmu.h
... ... @@ -19,7 +19,20 @@
19 19 #define S5P_CENTRAL_SEQ_OPTION 0x0208
20 20  
21 21 #define S5P_USE_STANDBY_WFI0 (1 << 16)
  22 +#define S5P_USE_STANDBY_WFI1 (1 << 17)
  23 +#define S5P_USE_STANDBY_WFI2 (1 << 19)
  24 +#define S5P_USE_STANDBY_WFI3 (1 << 20)
22 25 #define S5P_USE_STANDBY_WFE0 (1 << 24)
  26 +#define S5P_USE_STANDBY_WFE1 (1 << 25)
  27 +#define S5P_USE_STANDBY_WFE2 (1 << 27)
  28 +#define S5P_USE_STANDBY_WFE3 (1 << 28)
  29 +
  30 +#define S5P_USE_STANDBY_WFI_ALL \
  31 + (S5P_USE_STANDBY_WFI0 | S5P_USE_STANDBY_WFI1 | \
  32 + S5P_USE_STANDBY_WFI2 | S5P_USE_STANDBY_WFI3 | \
  33 + S5P_USE_STANDBY_WFE0 | S5P_USE_STANDBY_WFE1 | \
  34 + S5P_USE_STANDBY_WFE2 | S5P_USE_STANDBY_WFE3)
  35 +
23 36 #define S5P_USE_DELAYED_RESET_ASSERTION BIT(12)
24 37  
25 38 #define EXYNOS_CORE_PO_RESET(n) ((1 << 4) << n)
... ... @@ -154,6 +167,17 @@
154 167 #define S5P_PAD_RET_EBIA_OPTION 0x3188
155 168 #define S5P_PAD_RET_EBIB_OPTION 0x31A8
156 169  
  170 +#define S5P_PS_HOLD_CONTROL 0x330C
  171 +#define S5P_PS_HOLD_EN (1 << 31)
  172 +#define S5P_PS_HOLD_OUTPUT_HIGH (3 << 8)
  173 +
  174 +#define S5P_CAM_OPTION 0x3C08
  175 +#define S5P_MFC_OPTION 0x3C48
  176 +#define S5P_G3D_OPTION 0x3C68
  177 +#define S5P_LCD0_OPTION 0x3C88
  178 +#define S5P_LCD1_OPTION 0x3CA8
  179 +#define S5P_ISP_OPTION S5P_LCD1_OPTION
  180 +
157 181 #define S5P_CORE_LOCAL_PWR_EN 0x3
158 182 #define S5P_CORE_WAKEUP_FROM_LOCAL_CFG (0x3 << 8)
159 183  
... ... @@ -213,6 +237,110 @@
213 237 #define S5P_ARM_CORE3_LOWPWR 0x1030
214 238 #define S5P_DIS_IRQ_CORE3 0x1034
215 239 #define S5P_DIS_IRQ_CENTRAL3 0x1038
  240 +
  241 +/* Only for EXYNOS3XXX */
  242 +#define EXYNOS3_ARM_CORE0_SYS_PWR_REG 0x1000
  243 +#define EXYNOS3_DIS_IRQ_ARM_CORE0_LOCAL_SYS_PWR_REG 0x1004
  244 +#define EXYNOS3_DIS_IRQ_ARM_CORE0_CENTRAL_SYS_PWR_REG 0x1008
  245 +#define EXYNOS3_ARM_CORE1_SYS_PWR_REG 0x1010
  246 +#define EXYNOS3_DIS_IRQ_ARM_CORE1_LOCAL_SYS_PWR_REG 0x1014
  247 +#define EXYNOS3_DIS_IRQ_ARM_CORE1_CENTRAL_SYS_PWR_REG 0x1018
  248 +#define EXYNOS3_ISP_ARM_SYS_PWR_REG 0x1050
  249 +#define EXYNOS3_DIS_IRQ_ISP_ARM_LOCAL_SYS_PWR_REG 0x1054
  250 +#define EXYNOS3_DIS_IRQ_ISP_ARM_CENTRAL_SYS_PWR_REG 0x1058
  251 +#define EXYNOS3_ARM_COMMON_SYS_PWR_REG 0x1080
  252 +#define EXYNOS3_ARM_L2_SYS_PWR_REG 0x10C0
  253 +#define EXYNOS3_CMU_ACLKSTOP_SYS_PWR_REG 0x1100
  254 +#define EXYNOS3_CMU_SCLKSTOP_SYS_PWR_REG 0x1104
  255 +#define EXYNOS3_CMU_RESET_SYS_PWR_REG 0x110C
  256 +#define EXYNOS3_CMU_ACLKSTOP_COREBLK_SYS_PWR_REG 0x1110
  257 +#define EXYNOS3_CMU_SCLKSTOP_COREBLK_SYS_PWR_REG 0x1114
  258 +#define EXYNOS3_CMU_RESET_COREBLK_SYS_PWR_REG 0x111C
  259 +#define EXYNOS3_APLL_SYSCLK_SYS_PWR_REG 0x1120
  260 +#define EXYNOS3_MPLL_SYSCLK_SYS_PWR_REG 0x1124
  261 +#define EXYNOS3_VPLL_SYSCLK_SYS_PWR_REG 0x1128
  262 +#define EXYNOS3_EPLL_SYSCLK_SYS_PWR_REG 0x112C
  263 +#define EXYNOS3_MPLLUSER_SYSCLK_SYS_PWR_REG 0x1130
  264 +#define EXYNOS3_BPLLUSER_SYSCLK_SYS_PWR_REG 0x1134
  265 +#define EXYNOS3_EPLLUSER_SYSCLK_SYS_PWR_REG 0x1138
  266 +#define EXYNOS3_CMU_CLKSTOP_CAM_SYS_PWR_REG 0x1140
  267 +#define EXYNOS3_CMU_CLKSTOP_MFC_SYS_PWR_REG 0x1148
  268 +#define EXYNOS3_CMU_CLKSTOP_G3D_SYS_PWR_REG 0x114C
  269 +#define EXYNOS3_CMU_CLKSTOP_LCD0_SYS_PWR_REG 0x1150
  270 +#define EXYNOS3_CMU_CLKSTOP_ISP_SYS_PWR_REG 0x1154
  271 +#define EXYNOS3_CMU_CLKSTOP_MAUDIO_SYS_PWR_REG 0x1158
  272 +#define EXYNOS3_CMU_RESET_CAM_SYS_PWR_REG 0x1160
  273 +#define EXYNOS3_CMU_RESET_MFC_SYS_PWR_REG 0x1168
  274 +#define EXYNOS3_CMU_RESET_G3D_SYS_PWR_REG 0x116C
  275 +#define EXYNOS3_CMU_RESET_LCD0_SYS_PWR_REG 0x1170
  276 +#define EXYNOS3_CMU_RESET_ISP_SYS_PWR_REG 0x1174
  277 +#define EXYNOS3_CMU_RESET_MAUDIO_SYS_PWR_REG 0x1178
  278 +#define EXYNOS3_TOP_BUS_SYS_PWR_REG 0x1180
  279 +#define EXYNOS3_TOP_RETENTION_SYS_PWR_REG 0x1184
  280 +#define EXYNOS3_TOP_PWR_SYS_PWR_REG 0x1188
  281 +#define EXYNOS3_TOP_BUS_COREBLK_SYS_PWR_REG 0x1190
  282 +#define EXYNOS3_TOP_RETENTION_COREBLK_SYS_PWR_REG 0x1194
  283 +#define EXYNOS3_TOP_PWR_COREBLK_SYS_PWR_REG 0x1198
  284 +#define EXYNOS3_LOGIC_RESET_SYS_PWR_REG 0x11A0
  285 +#define EXYNOS3_OSCCLK_GATE_SYS_PWR_REG 0x11A4
  286 +#define EXYNOS3_LOGIC_RESET_COREBLK_SYS_PWR_REG 0x11B0
  287 +#define EXYNOS3_OSCCLK_GATE_COREBLK_SYS_PWR_REG 0x11B4
  288 +#define EXYNOS3_PAD_RETENTION_DRAM_SYS_PWR_REG 0x1200
  289 +#define EXYNOS3_PAD_RETENTION_MAUDIO_SYS_PWR_REG 0x1204
  290 +#define EXYNOS3_PAD_RETENTION_SPI_SYS_PWR_REG 0x1208
  291 +#define EXYNOS3_PAD_RETENTION_MMC2_SYS_PWR_REG 0x1218
  292 +#define EXYNOS3_PAD_RETENTION_GPIO_SYS_PWR_REG 0x1220
  293 +#define EXYNOS3_PAD_RETENTION_UART_SYS_PWR_REG 0x1224
  294 +#define EXYNOS3_PAD_RETENTION_MMC0_SYS_PWR_REG 0x1228
  295 +#define EXYNOS3_PAD_RETENTION_MMC1_SYS_PWR_REG 0x122C
  296 +#define EXYNOS3_PAD_RETENTION_EBIA_SYS_PWR_REG 0x1230
  297 +#define EXYNOS3_PAD_RETENTION_EBIB_SYS_PWR_REG 0x1234
  298 +#define EXYNOS3_PAD_RETENTION_JTAG_SYS_PWR_REG 0x1238
  299 +#define EXYNOS3_PAD_ISOLATION_SYS_PWR_REG 0x1240
  300 +#define EXYNOS3_PAD_ALV_SEL_SYS_PWR_REG 0x1260
  301 +#define EXYNOS3_XUSBXTI_SYS_PWR_REG 0x1280
  302 +#define EXYNOS3_XXTI_SYS_PWR_REG 0x1284
  303 +#define EXYNOS3_EXT_REGULATOR_SYS_PWR_REG 0x12C0
  304 +#define EXYNOS3_EXT_REGULATOR_COREBLK_SYS_PWR_REG 0x12C4
  305 +#define EXYNOS3_GPIO_MODE_SYS_PWR_REG 0x1300
  306 +#define EXYNOS3_GPIO_MODE_MAUDIO_SYS_PWR_REG 0x1340
  307 +#define EXYNOS3_TOP_ASB_RESET_SYS_PWR_REG 0x1344
  308 +#define EXYNOS3_TOP_ASB_ISOLATION_SYS_PWR_REG 0x1348
  309 +#define EXYNOS3_TOP_ASB_RESET_COREBLK_SYS_PWR_REG 0x1350
  310 +#define EXYNOS3_TOP_ASB_ISOLATION_COREBLK_SYS_PWR_REG 0x1354
  311 +#define EXYNOS3_CAM_SYS_PWR_REG 0x1380
  312 +#define EXYNOS3_MFC_SYS_PWR_REG 0x1388
  313 +#define EXYNOS3_G3D_SYS_PWR_REG 0x138C
  314 +#define EXYNOS3_LCD0_SYS_PWR_REG 0x1390
  315 +#define EXYNOS3_ISP_SYS_PWR_REG 0x1394
  316 +#define EXYNOS3_MAUDIO_SYS_PWR_REG 0x1398
  317 +#define EXYNOS3_DRAM_FREQ_DOWN_SYS_PWR_REG 0x13B0
  318 +#define EXYNOS3_DDRPHY_DLLOFF_SYS_PWR_REG 0x13B4
  319 +#define EXYNOS3_CMU_SYSCLK_ISP_SYS_PWR_REG 0x13B8
  320 +#define EXYNOS3_LPDDR_PHY_DLL_LOCK_SYS_PWR_REG 0x13C0
  321 +#define EXYNOS3_BPLL_SYSCLK_SYS_PWR_REG 0x13C4
  322 +#define EXYNOS3_UPLL_SYSCLK_SYS_PWR_REG 0x13C8
  323 +
  324 +#define EXYNOS3_ARM_CORE0_OPTION 0x2008
  325 +#define EXYNOS3_ARM_CORE_OPTION(_nr) \
  326 + (EXYNOS3_ARM_CORE0_OPTION + ((_nr) * 0x80))
  327 +
  328 +#define EXYNOS3_ARM_COMMON_OPTION 0x2408
  329 +#define EXYNOS3_TOP_PWR_OPTION 0x2C48
  330 +#define EXYNOS3_CORE_TOP_PWR_OPTION 0x2CA8
  331 +#define EXYNOS3_XUSBXTI_DURATION 0x341C
  332 +#define EXYNOS3_XXTI_DURATION 0x343C
  333 +#define EXYNOS3_EXT_REGULATOR_DURATION 0x361C
  334 +#define EXYNOS3_EXT_REGULATOR_COREBLK_DURATION 0x363C
  335 +#define XUSBXTI_DURATION 0x00000BB8
  336 +#define XXTI_DURATION XUSBXTI_DURATION
  337 +#define EXT_REGULATOR_DURATION 0x00001D4C
  338 +#define EXT_REGULATOR_COREBLK_DURATION EXT_REGULATOR_DURATION
  339 +
  340 +/* for XXX_OPTION */
  341 +#define EXYNOS3_OPTION_USE_SC_COUNTER (1 << 0)
  342 +#define EXYNOS3_OPTION_USE_SC_FEEDBACK (1 << 1)
  343 +#define EXYNOS3_OPTION_SKIP_DEACTIVATE_ACEACP_IN_PWDN (1 << 7)
216 344  
217 345 /* For EXYNOS5 */
218 346