Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0
0002 //
0003 // Copyright (c) 2011-2015 Samsung Electronics Co., Ltd.
0004 //      http://www.samsung.com/
0005 //
0006 // Exynos4 - CPU PMU(Power Management Unit) support
0007 
0008 #include <linux/soc/samsung/exynos-regs-pmu.h>
0009 #include <linux/soc/samsung/exynos-pmu.h>
0010 
0011 #include "exynos-pmu.h"
0012 
0013 static const struct exynos_pmu_conf exynos4210_pmu_config[] = {
0014     /* { .offset = offset, .val = { AFTR, LPA, SLEEP } */
0015     { S5P_ARM_CORE0_LOWPWR,         { 0x0, 0x0, 0x2 } },
0016     { S5P_DIS_IRQ_CORE0,            { 0x0, 0x0, 0x0 } },
0017     { S5P_DIS_IRQ_CENTRAL0,         { 0x0, 0x0, 0x0 } },
0018     { S5P_ARM_CORE1_LOWPWR,         { 0x0, 0x0, 0x2 } },
0019     { S5P_DIS_IRQ_CORE1,            { 0x0, 0x0, 0x0 } },
0020     { S5P_DIS_IRQ_CENTRAL1,         { 0x0, 0x0, 0x0 } },
0021     { S5P_ARM_COMMON_LOWPWR,        { 0x0, 0x0, 0x2 } },
0022     { S5P_L2_0_LOWPWR,          { 0x2, 0x2, 0x3 } },
0023     { S5P_L2_1_LOWPWR,          { 0x2, 0x2, 0x3 } },
0024     { S5P_CMU_ACLKSTOP_LOWPWR,      { 0x1, 0x0, 0x0 } },
0025     { S5P_CMU_SCLKSTOP_LOWPWR,      { 0x1, 0x0, 0x0 } },
0026     { S5P_CMU_RESET_LOWPWR,         { 0x1, 0x1, 0x0 } },
0027     { S5P_APLL_SYSCLK_LOWPWR,       { 0x1, 0x0, 0x0 } },
0028     { S5P_MPLL_SYSCLK_LOWPWR,       { 0x1, 0x0, 0x0 } },
0029     { S5P_VPLL_SYSCLK_LOWPWR,       { 0x1, 0x0, 0x0 } },
0030     { S5P_EPLL_SYSCLK_LOWPWR,       { 0x1, 0x1, 0x0 } },
0031     { S5P_CMU_CLKSTOP_GPS_ALIVE_LOWPWR, { 0x1, 0x1, 0x0 } },
0032     { S5P_CMU_RESET_GPSALIVE_LOWPWR,    { 0x1, 0x1, 0x0 } },
0033     { S5P_CMU_CLKSTOP_CAM_LOWPWR,       { 0x1, 0x1, 0x0 } },
0034     { S5P_CMU_CLKSTOP_TV_LOWPWR,        { 0x1, 0x1, 0x0 } },
0035     { S5P_CMU_CLKSTOP_MFC_LOWPWR,       { 0x1, 0x1, 0x0 } },
0036     { S5P_CMU_CLKSTOP_G3D_LOWPWR,       { 0x1, 0x1, 0x0 } },
0037     { S5P_CMU_CLKSTOP_LCD0_LOWPWR,      { 0x1, 0x1, 0x0 } },
0038     { S5P_CMU_CLKSTOP_LCD1_LOWPWR,      { 0x1, 0x1, 0x0 } },
0039     { S5P_CMU_CLKSTOP_MAUDIO_LOWPWR,    { 0x1, 0x1, 0x0 } },
0040     { S5P_CMU_CLKSTOP_GPS_LOWPWR,       { 0x1, 0x1, 0x0 } },
0041     { S5P_CMU_RESET_CAM_LOWPWR,     { 0x1, 0x1, 0x0 } },
0042     { S5P_CMU_RESET_TV_LOWPWR,      { 0x1, 0x1, 0x0 } },
0043     { S5P_CMU_RESET_MFC_LOWPWR,     { 0x1, 0x1, 0x0 } },
0044     { S5P_CMU_RESET_G3D_LOWPWR,     { 0x1, 0x1, 0x0 } },
0045     { S5P_CMU_RESET_LCD0_LOWPWR,        { 0x1, 0x1, 0x0 } },
0046     { S5P_CMU_RESET_LCD1_LOWPWR,        { 0x1, 0x1, 0x0 } },
0047     { S5P_CMU_RESET_MAUDIO_LOWPWR,      { 0x1, 0x1, 0x0 } },
0048     { S5P_CMU_RESET_GPS_LOWPWR,     { 0x1, 0x1, 0x0 } },
0049     { S5P_TOP_BUS_LOWPWR,           { 0x3, 0x0, 0x0 } },
0050     { S5P_TOP_RETENTION_LOWPWR,     { 0x1, 0x0, 0x1 } },
0051     { S5P_TOP_PWR_LOWPWR,           { 0x3, 0x0, 0x3 } },
0052     { S5P_LOGIC_RESET_LOWPWR,       { 0x1, 0x1, 0x0 } },
0053     { S5P_ONENAND_MEM_LOWPWR,       { 0x3, 0x0, 0x0 } },
0054     { S5P_MODIMIF_MEM_LOWPWR,       { 0x3, 0x0, 0x0 } },
0055     { S5P_G2D_ACP_MEM_LOWPWR,       { 0x3, 0x0, 0x0 } },
0056     { S5P_USBOTG_MEM_LOWPWR,        { 0x3, 0x0, 0x0 } },
0057     { S5P_HSMMC_MEM_LOWPWR,         { 0x3, 0x0, 0x0 } },
0058     { S5P_CSSYS_MEM_LOWPWR,         { 0x3, 0x0, 0x0 } },
0059     { S5P_SECSS_MEM_LOWPWR,         { 0x3, 0x0, 0x0 } },
0060     { S5P_PCIE_MEM_LOWPWR,          { 0x3, 0x0, 0x0 } },
0061     { S5P_SATA_MEM_LOWPWR,          { 0x3, 0x0, 0x0 } },
0062     { S5P_PAD_RETENTION_DRAM_LOWPWR,    { 0x1, 0x0, 0x0 } },
0063     { S5P_PAD_RETENTION_MAUDIO_LOWPWR,  { 0x1, 0x1, 0x0 } },
0064     { S5P_PAD_RETENTION_GPIO_LOWPWR,    { 0x1, 0x0, 0x0 } },
0065     { S5P_PAD_RETENTION_UART_LOWPWR,    { 0x1, 0x0, 0x0 } },
0066     { S5P_PAD_RETENTION_MMCA_LOWPWR,    { 0x1, 0x0, 0x0 } },
0067     { S5P_PAD_RETENTION_MMCB_LOWPWR,    { 0x1, 0x0, 0x0 } },
0068     { S5P_PAD_RETENTION_EBIA_LOWPWR,    { 0x1, 0x0, 0x0 } },
0069     { S5P_PAD_RETENTION_EBIB_LOWPWR,    { 0x1, 0x0, 0x0 } },
0070     { S5P_PAD_RETENTION_ISOLATION_LOWPWR,   { 0x1, 0x0, 0x0 } },
0071     { S5P_PAD_RETENTION_ALV_SEL_LOWPWR, { 0x1, 0x0, 0x0 } },
0072     { S5P_XUSBXTI_LOWPWR,           { 0x1, 0x1, 0x0 } },
0073     { S5P_XXTI_LOWPWR,          { 0x1, 0x1, 0x0 } },
0074     { S5P_EXT_REGULATOR_LOWPWR,     { 0x1, 0x1, 0x0 } },
0075     { S5P_GPIO_MODE_LOWPWR,         { 0x1, 0x0, 0x0 } },
0076     { S5P_GPIO_MODE_MAUDIO_LOWPWR,      { 0x1, 0x1, 0x0 } },
0077     { S5P_CAM_LOWPWR,           { 0x7, 0x0, 0x0 } },
0078     { S5P_TV_LOWPWR,            { 0x7, 0x0, 0x0 } },
0079     { S5P_MFC_LOWPWR,           { 0x7, 0x0, 0x0 } },
0080     { S5P_G3D_LOWPWR,           { 0x7, 0x0, 0x0 } },
0081     { S5P_LCD0_LOWPWR,          { 0x7, 0x0, 0x0 } },
0082     { S5P_LCD1_LOWPWR,          { 0x7, 0x0, 0x0 } },
0083     { S5P_MAUDIO_LOWPWR,            { 0x7, 0x7, 0x0 } },
0084     { S5P_GPS_LOWPWR,           { 0x7, 0x0, 0x0 } },
0085     { S5P_GPS_ALIVE_LOWPWR,         { 0x7, 0x0, 0x0 } },
0086     { PMU_TABLE_END,},
0087 };
0088 
0089 static const struct exynos_pmu_conf exynos4412_pmu_config[] = {
0090     { S5P_ARM_CORE0_LOWPWR,         { 0x0, 0x0, 0x2 } },
0091     { S5P_DIS_IRQ_CORE0,            { 0x0, 0x0, 0x0 } },
0092     { S5P_DIS_IRQ_CENTRAL0,         { 0x0, 0x0, 0x0 } },
0093     { S5P_ARM_CORE1_LOWPWR,         { 0x0, 0x0, 0x2 } },
0094     { S5P_DIS_IRQ_CORE1,            { 0x0, 0x0, 0x0 } },
0095     { S5P_DIS_IRQ_CENTRAL1,         { 0x0, 0x0, 0x0 } },
0096     { S5P_ISP_ARM_LOWPWR,           { 0x1, 0x0, 0x0 } },
0097     { S5P_DIS_IRQ_ISP_ARM_LOCAL_LOWPWR, { 0x0, 0x0, 0x0 } },
0098     { S5P_DIS_IRQ_ISP_ARM_CENTRAL_LOWPWR,   { 0x0, 0x0, 0x0 } },
0099     { S5P_ARM_COMMON_LOWPWR,        { 0x0, 0x0, 0x2 } },
0100     { S5P_L2_0_LOWPWR,          { 0x0, 0x0, 0x3 } },
0101     /* XXX_OPTION register should be set other field */
0102     { S5P_ARM_L2_0_OPTION,          { 0x10, 0x10, 0x0 } },
0103     { S5P_L2_1_LOWPWR,          { 0x0, 0x0, 0x3 } },
0104     { S5P_ARM_L2_1_OPTION,          { 0x10, 0x10, 0x0 } },
0105     { S5P_CMU_ACLKSTOP_LOWPWR,      { 0x1, 0x0, 0x0 } },
0106     { S5P_CMU_SCLKSTOP_LOWPWR,      { 0x1, 0x0, 0x0 } },
0107     { S5P_CMU_RESET_LOWPWR,         { 0x1, 0x1, 0x0 } },
0108     { S5P_DRAM_FREQ_DOWN_LOWPWR,        { 0x1, 0x1, 0x1 } },
0109     { S5P_DDRPHY_DLLOFF_LOWPWR,     { 0x1, 0x1, 0x1 } },
0110     { S5P_LPDDR_PHY_DLL_LOCK_LOWPWR,    { 0x1, 0x1, 0x1 } },
0111     { S5P_CMU_ACLKSTOP_COREBLK_LOWPWR,  { 0x1, 0x0, 0x0 } },
0112     { S5P_CMU_SCLKSTOP_COREBLK_LOWPWR,  { 0x1, 0x0, 0x0 } },
0113     { S5P_CMU_RESET_COREBLK_LOWPWR,     { 0x1, 0x1, 0x0 } },
0114     { S5P_APLL_SYSCLK_LOWPWR,       { 0x1, 0x0, 0x0 } },
0115     { S5P_MPLL_SYSCLK_LOWPWR,       { 0x1, 0x0, 0x0 } },
0116     { S5P_VPLL_SYSCLK_LOWPWR,       { 0x1, 0x0, 0x0 } },
0117     { S5P_EPLL_SYSCLK_LOWPWR,       { 0x1, 0x1, 0x0 } },
0118     { S5P_MPLLUSER_SYSCLK_LOWPWR,       { 0x1, 0x0, 0x0 } },
0119     { S5P_CMU_CLKSTOP_GPS_ALIVE_LOWPWR, { 0x1, 0x0, 0x0 } },
0120     { S5P_CMU_RESET_GPSALIVE_LOWPWR,    { 0x1, 0x0, 0x0 } },
0121     { S5P_CMU_CLKSTOP_CAM_LOWPWR,       { 0x1, 0x0, 0x0 } },
0122     { S5P_CMU_CLKSTOP_TV_LOWPWR,        { 0x1, 0x0, 0x0 } },
0123     { S5P_CMU_CLKSTOP_MFC_LOWPWR,       { 0x1, 0x0, 0x0 } },
0124     { S5P_CMU_CLKSTOP_G3D_LOWPWR,       { 0x1, 0x0, 0x0 } },
0125     { S5P_CMU_CLKSTOP_LCD0_LOWPWR,      { 0x1, 0x0, 0x0 } },
0126     { S5P_CMU_CLKSTOP_ISP_LOWPWR,       { 0x1, 0x0, 0x0 } },
0127     { S5P_CMU_CLKSTOP_MAUDIO_LOWPWR,    { 0x1, 0x0, 0x0 } },
0128     { S5P_CMU_CLKSTOP_GPS_LOWPWR,       { 0x1, 0x0, 0x0 } },
0129     { S5P_CMU_RESET_CAM_LOWPWR,     { 0x1, 0x0, 0x0 } },
0130     { S5P_CMU_RESET_TV_LOWPWR,      { 0x1, 0x0, 0x0 } },
0131     { S5P_CMU_RESET_MFC_LOWPWR,     { 0x1, 0x0, 0x0 } },
0132     { S5P_CMU_RESET_G3D_LOWPWR,     { 0x1, 0x0, 0x0 } },
0133     { S5P_CMU_RESET_LCD0_LOWPWR,        { 0x1, 0x0, 0x0 } },
0134     { S5P_CMU_RESET_ISP_LOWPWR,     { 0x1, 0x0, 0x0 } },
0135     { S5P_CMU_RESET_MAUDIO_LOWPWR,      { 0x1, 0x1, 0x0 } },
0136     { S5P_CMU_RESET_GPS_LOWPWR,     { 0x1, 0x0, 0x0 } },
0137     { S5P_TOP_BUS_LOWPWR,           { 0x3, 0x0, 0x0 } },
0138     { S5P_TOP_RETENTION_LOWPWR,     { 0x1, 0x0, 0x1 } },
0139     { S5P_TOP_PWR_LOWPWR,           { 0x3, 0x0, 0x3 } },
0140     { S5P_TOP_BUS_COREBLK_LOWPWR,       { 0x3, 0x0, 0x0 } },
0141     { S5P_TOP_RETENTION_COREBLK_LOWPWR, { 0x1, 0x0, 0x1 } },
0142     { S5P_TOP_PWR_COREBLK_LOWPWR,       { 0x3, 0x0, 0x3 } },
0143     { S5P_LOGIC_RESET_LOWPWR,       { 0x1, 0x1, 0x0 } },
0144     { S5P_OSCCLK_GATE_LOWPWR,       { 0x1, 0x0, 0x1 } },
0145     { S5P_LOGIC_RESET_COREBLK_LOWPWR,   { 0x1, 0x1, 0x0 } },
0146     { S5P_OSCCLK_GATE_COREBLK_LOWPWR,   { 0x1, 0x0, 0x1 } },
0147     { S5P_ONENAND_MEM_LOWPWR,       { 0x3, 0x0, 0x0 } },
0148     { S5P_ONENAND_MEM_OPTION,       { 0x10, 0x10, 0x0 } },
0149     { S5P_HSI_MEM_LOWPWR,           { 0x3, 0x0, 0x0 } },
0150     { S5P_HSI_MEM_OPTION,           { 0x10, 0x10, 0x0 } },
0151     { S5P_G2D_ACP_MEM_LOWPWR,       { 0x3, 0x0, 0x0 } },
0152     { S5P_G2D_ACP_MEM_OPTION,       { 0x10, 0x10, 0x0 } },
0153     { S5P_USBOTG_MEM_LOWPWR,        { 0x3, 0x0, 0x0 } },
0154     { S5P_USBOTG_MEM_OPTION,        { 0x10, 0x10, 0x0 } },
0155     { S5P_HSMMC_MEM_LOWPWR,         { 0x3, 0x0, 0x0 } },
0156     { S5P_HSMMC_MEM_OPTION,         { 0x10, 0x10, 0x0 } },
0157     { S5P_CSSYS_MEM_LOWPWR,         { 0x3, 0x0, 0x0 } },
0158     { S5P_CSSYS_MEM_OPTION,         { 0x10, 0x10, 0x0 } },
0159     { S5P_SECSS_MEM_LOWPWR,         { 0x3, 0x0, 0x0 } },
0160     { S5P_SECSS_MEM_OPTION,         { 0x10, 0x10, 0x0 } },
0161     { S5P_ROTATOR_MEM_LOWPWR,       { 0x3, 0x0, 0x0 } },
0162     { S5P_ROTATOR_MEM_OPTION,       { 0x10, 0x10, 0x0 } },
0163     { S5P_PAD_RETENTION_DRAM_LOWPWR,    { 0x1, 0x0, 0x0 } },
0164     { S5P_PAD_RETENTION_MAUDIO_LOWPWR,  { 0x1, 0x1, 0x0 } },
0165     { S5P_PAD_RETENTION_GPIO_LOWPWR,    { 0x1, 0x0, 0x0 } },
0166     { S5P_PAD_RETENTION_UART_LOWPWR,    { 0x1, 0x0, 0x0 } },
0167     { S5P_PAD_RETENTION_MMCA_LOWPWR,    { 0x1, 0x0, 0x0 } },
0168     { S5P_PAD_RETENTION_MMCB_LOWPWR,    { 0x1, 0x0, 0x0 } },
0169     { S5P_PAD_RETENTION_EBIA_LOWPWR,    { 0x1, 0x0, 0x0 } },
0170     { S5P_PAD_RETENTION_EBIB_LOWPWR,    { 0x1, 0x0, 0x0 } },
0171     { S5P_PAD_RETENTION_GPIO_COREBLK_LOWPWR, { 0x1, 0x0, 0x0 } },
0172     { S5P_PAD_RETENTION_ISOLATION_LOWPWR,   { 0x1, 0x0, 0x0 } },
0173     { S5P_PAD_ISOLATION_COREBLK_LOWPWR, { 0x1, 0x0, 0x0 } },
0174     { S5P_PAD_RETENTION_ALV_SEL_LOWPWR, { 0x1, 0x0, 0x0 } },
0175     { S5P_XUSBXTI_LOWPWR,           { 0x1, 0x1, 0x0 } },
0176     { S5P_XXTI_LOWPWR,          { 0x1, 0x1, 0x0 } },
0177     { S5P_EXT_REGULATOR_LOWPWR,     { 0x1, 0x1, 0x0 } },
0178     { S5P_GPIO_MODE_LOWPWR,         { 0x1, 0x0, 0x0 } },
0179     { S5P_GPIO_MODE_COREBLK_LOWPWR,     { 0x1, 0x0, 0x0 } },
0180     { S5P_GPIO_MODE_MAUDIO_LOWPWR,      { 0x1, 0x1, 0x0 } },
0181     { S5P_TOP_ASB_RESET_LOWPWR,     { 0x1, 0x1, 0x1 } },
0182     { S5P_TOP_ASB_ISOLATION_LOWPWR,     { 0x1, 0x0, 0x1 } },
0183     { S5P_CAM_LOWPWR,           { 0x7, 0x0, 0x0 } },
0184     { S5P_TV_LOWPWR,            { 0x7, 0x0, 0x0 } },
0185     { S5P_MFC_LOWPWR,           { 0x7, 0x0, 0x0 } },
0186     { S5P_G3D_LOWPWR,           { 0x7, 0x0, 0x0 } },
0187     { S5P_LCD0_LOWPWR,          { 0x7, 0x0, 0x0 } },
0188     { S5P_ISP_LOWPWR,           { 0x7, 0x0, 0x0 } },
0189     { S5P_MAUDIO_LOWPWR,            { 0x7, 0x7, 0x0 } },
0190     { S5P_GPS_LOWPWR,           { 0x7, 0x0, 0x0 } },
0191     { S5P_GPS_ALIVE_LOWPWR,         { 0x7, 0x0, 0x0 } },
0192     { S5P_CMU_SYSCLK_ISP_LOWPWR,        { 0x1, 0x0, 0x0 } },
0193     { S5P_CMU_SYSCLK_GPS_LOWPWR,        { 0x1, 0x0, 0x0 } },
0194     { S5P_ARM_CORE2_LOWPWR,         { 0x0, 0x0, 0x2 } },
0195     { S5P_DIS_IRQ_CORE2,            { 0x0, 0x0, 0x0 } },
0196     { S5P_DIS_IRQ_CENTRAL2,         { 0x0, 0x0, 0x0 } },
0197     { S5P_ARM_CORE3_LOWPWR,         { 0x0, 0x0, 0x2 } },
0198     { S5P_DIS_IRQ_CORE3,            { 0x0, 0x0, 0x0 } },
0199     { S5P_DIS_IRQ_CENTRAL3,         { 0x0, 0x0, 0x0 } },
0200     { PMU_TABLE_END,},
0201 };
0202 
0203 const struct exynos_pmu_data exynos4210_pmu_data = {
0204     .pmu_config = exynos4210_pmu_config,
0205 };
0206 
0207 const struct exynos_pmu_data exynos4412_pmu_data = {
0208     .pmu_config     = exynos4412_pmu_config,
0209 };