1*010d6ae3SXiaoDong Huang /* 2*010d6ae3SXiaoDong Huang * Copyright (c) 2019, ARM Limited and Contributors. All rights reserved. 3*010d6ae3SXiaoDong Huang * 4*010d6ae3SXiaoDong Huang * SPDX-License-Identifier: BSD-3-Clause 5*010d6ae3SXiaoDong Huang */ 6*010d6ae3SXiaoDong Huang 7*010d6ae3SXiaoDong Huang #ifndef __PMU_H__ 8*010d6ae3SXiaoDong Huang #define __PMU_H__ 9*010d6ae3SXiaoDong Huang 10*010d6ae3SXiaoDong Huang /* Needed aligned 16 bytes for sp stack top */ 11*010d6ae3SXiaoDong Huang #define PSRAM_SP_TOP ((PMUSRAM_BASE + PMUSRAM_RSIZE) & ~0xf) 12*010d6ae3SXiaoDong Huang 13*010d6ae3SXiaoDong Huang /***************************************************************************** 14*010d6ae3SXiaoDong Huang * pmu con,reg 15*010d6ae3SXiaoDong Huang *****************************************************************************/ 16*010d6ae3SXiaoDong Huang #define PMU_WKUP_CFG0_LO 0x00 17*010d6ae3SXiaoDong Huang #define PMU_WKUP_CFG0_HI 0x04 18*010d6ae3SXiaoDong Huang #define PMU_WKUP_CFG1_LO 0x08 19*010d6ae3SXiaoDong Huang #define PMU_WKUP_CFG1_HI 0x0c 20*010d6ae3SXiaoDong Huang #define PMU_WKUP_CFG2_LO 0x10 21*010d6ae3SXiaoDong Huang 22*010d6ae3SXiaoDong Huang #define PMU_PWRDN_CON 0x18 23*010d6ae3SXiaoDong Huang #define PMU_PWRDN_ST 0x20 24*010d6ae3SXiaoDong Huang 25*010d6ae3SXiaoDong Huang #define PMU_PWRMODE_CORE_LO 0x24 26*010d6ae3SXiaoDong Huang #define PMU_PWRMODE_CORE_HI 0x28 27*010d6ae3SXiaoDong Huang #define PMU_PWRMODE_COMMON_CON_LO 0x2c 28*010d6ae3SXiaoDong Huang #define PMU_PWRMODE_COMMON_CON_HI 0x30 29*010d6ae3SXiaoDong Huang 30*010d6ae3SXiaoDong Huang #define PMU_SFT_CON 0x34 31*010d6ae3SXiaoDong Huang #define PMU_INT_ST 0x44 32*010d6ae3SXiaoDong Huang #define PMU_BUS_IDLE_REQ 0x64 33*010d6ae3SXiaoDong Huang #define PMU_BUS_IDLE_ST 0x6c 34*010d6ae3SXiaoDong Huang 35*010d6ae3SXiaoDong Huang #define PMU_OSC_CNT_LO 0x74 36*010d6ae3SXiaoDong Huang #define PMU_OSC_CNT_HI 0x78 37*010d6ae3SXiaoDong Huang #define PMU_PLLLOCK_CNT_LO 0x7c 38*010d6ae3SXiaoDong Huang #define PMU_PLLLOCK_CNT_HI 0x80 39*010d6ae3SXiaoDong Huang #define PMU_PLLRST_CNT_LO 0x84 40*010d6ae3SXiaoDong Huang #define PMU_PLLRST_CNT_HI 0x88 41*010d6ae3SXiaoDong Huang #define PMU_STABLE_CNT_LO 0x8c 42*010d6ae3SXiaoDong Huang #define PMU_STABLE_CNT_HI 0x90 43*010d6ae3SXiaoDong Huang #define PMU_WAKEUP_RST_CLR_LO 0x9c 44*010d6ae3SXiaoDong Huang #define PMU_WAKEUP_RST_CLR_HI 0xa0 45*010d6ae3SXiaoDong Huang 46*010d6ae3SXiaoDong Huang #define PMU_DDR_SREF_ST 0xa4 47*010d6ae3SXiaoDong Huang 48*010d6ae3SXiaoDong Huang #define PMU_SYS_REG0_LO 0xa8 49*010d6ae3SXiaoDong Huang #define PMU_SYS_REG0_HI 0xac 50*010d6ae3SXiaoDong Huang #define PMU_SYS_REG1_LO 0xb0 51*010d6ae3SXiaoDong Huang #define PMU_SYS_REG1_HI 0xb4 52*010d6ae3SXiaoDong Huang #define PMU_SYS_REG2_LO 0xb8 53*010d6ae3SXiaoDong Huang #define PMU_SYS_REG2_HI 0xbc 54*010d6ae3SXiaoDong Huang #define PMU_SYS_REG3_LO 0xc0 55*010d6ae3SXiaoDong Huang #define PMU_SYS_REG3_HI 0xc4 56*010d6ae3SXiaoDong Huang 57*010d6ae3SXiaoDong Huang #define PMU_SCU_PWRDN_CNT_LO 0xc8 58*010d6ae3SXiaoDong Huang #define PMU_SCU_PWRDN_CNT_HI 0xcc 59*010d6ae3SXiaoDong Huang #define PMU_SCU_PWRUP_CNT_LO 0xd0 60*010d6ae3SXiaoDong Huang #define PMU_SCU_PWRUP_CNT_HI 0xd4 61*010d6ae3SXiaoDong Huang 62*010d6ae3SXiaoDong Huang #define PMU_TIMEOUT_CNT_LO 0xd8 63*010d6ae3SXiaoDong Huang #define PMU_TIMEOUT_CNT_HI 0xdc 64*010d6ae3SXiaoDong Huang 65*010d6ae3SXiaoDong Huang #define PMU_CPUAPM_CON(cpu) (0xe0 + (cpu) * 0x4) 66*010d6ae3SXiaoDong Huang 67*010d6ae3SXiaoDong Huang #define CORES_PM_DISABLE 0x0 68*010d6ae3SXiaoDong Huang #define CLST_CPUS_MSK 0xf 69*010d6ae3SXiaoDong Huang 70*010d6ae3SXiaoDong Huang #define PD_CTR_LOOP 500 71*010d6ae3SXiaoDong Huang #define PD_CHECK_LOOP 500 72*010d6ae3SXiaoDong Huang #define WFEI_CHECK_LOOP 500 73*010d6ae3SXiaoDong Huang #define BUS_IDLE_LOOP 1000 74*010d6ae3SXiaoDong Huang 75*010d6ae3SXiaoDong Huang enum pmu_wkup_cfg2 { 76*010d6ae3SXiaoDong Huang pmu_cluster_wkup_en = 0, 77*010d6ae3SXiaoDong Huang pmu_gpio_wkup_en = 2, 78*010d6ae3SXiaoDong Huang pmu_sdio_wkup_en = 3, 79*010d6ae3SXiaoDong Huang pmu_sdmmc_wkup_en = 4, 80*010d6ae3SXiaoDong Huang pmu_uart0_wkup_en = 5, 81*010d6ae3SXiaoDong Huang pmu_timer_wkup_en = 6, 82*010d6ae3SXiaoDong Huang pmu_usbdev_wkup_en = 7, 83*010d6ae3SXiaoDong Huang pmu_sft_wkup_en = 8, 84*010d6ae3SXiaoDong Huang pmu_timeout_wkup_en = 10, 85*010d6ae3SXiaoDong Huang }; 86*010d6ae3SXiaoDong Huang 87*010d6ae3SXiaoDong Huang enum pmu_powermode_core_lo { 88*010d6ae3SXiaoDong Huang pmu_global_int_dis = 0, 89*010d6ae3SXiaoDong Huang pmu_core_src_gt = 1, 90*010d6ae3SXiaoDong Huang pmu_cpu0_pd = 3, 91*010d6ae3SXiaoDong Huang pmu_clr_core = 5, 92*010d6ae3SXiaoDong Huang pmu_scu_pd = 6, 93*010d6ae3SXiaoDong Huang pmu_l2_idle = 8, 94*010d6ae3SXiaoDong Huang pmu_l2_flush = 9, 95*010d6ae3SXiaoDong Huang pmu_clr_bus2main = 10, 96*010d6ae3SXiaoDong Huang pmu_clr_peri2msch = 11, 97*010d6ae3SXiaoDong Huang }; 98*010d6ae3SXiaoDong Huang 99*010d6ae3SXiaoDong Huang enum pmu_powermode_core_hi { 100*010d6ae3SXiaoDong Huang pmu_apll_pd_en = 3, 101*010d6ae3SXiaoDong Huang pmu_dpll_pd_en = 4, 102*010d6ae3SXiaoDong Huang pmu_cpll_pd_en = 5, 103*010d6ae3SXiaoDong Huang pmu_gpll_pd_en = 6, 104*010d6ae3SXiaoDong Huang pmu_npll_pd_en = 7, 105*010d6ae3SXiaoDong Huang }; 106*010d6ae3SXiaoDong Huang 107*010d6ae3SXiaoDong Huang enum pmu_powermode_common_lo { 108*010d6ae3SXiaoDong Huang pmu_mode_en = 0, 109*010d6ae3SXiaoDong Huang pmu_ddr_pd_en = 1, 110*010d6ae3SXiaoDong Huang pmu_wkup_rst = 3, 111*010d6ae3SXiaoDong Huang pmu_pll_pd = 4, 112*010d6ae3SXiaoDong Huang pmu_pmu_use_if = 6, 113*010d6ae3SXiaoDong Huang pmu_alive_use_if = 7, 114*010d6ae3SXiaoDong Huang pmu_osc_dis = 8, 115*010d6ae3SXiaoDong Huang pmu_input_clamp = 9, 116*010d6ae3SXiaoDong Huang pmu_sref_enter = 10, 117*010d6ae3SXiaoDong Huang pmu_ddrc_gt = 11, 118*010d6ae3SXiaoDong Huang pmu_ddrio_ret = 12, 119*010d6ae3SXiaoDong Huang pmu_ddrio_ret_deq = 13, 120*010d6ae3SXiaoDong Huang pmu_clr_pmu = 14, 121*010d6ae3SXiaoDong Huang pmu_clr_peri_pmu = 15, 122*010d6ae3SXiaoDong Huang }; 123*010d6ae3SXiaoDong Huang 124*010d6ae3SXiaoDong Huang enum pmu_powermode_common_hi { 125*010d6ae3SXiaoDong Huang pmu_clr_bus = 0, 126*010d6ae3SXiaoDong Huang pmu_clr_mmc = 1, 127*010d6ae3SXiaoDong Huang pmu_clr_msch = 2, 128*010d6ae3SXiaoDong Huang pmu_clr_nandc = 3, 129*010d6ae3SXiaoDong Huang pmu_clr_gmac = 4, 130*010d6ae3SXiaoDong Huang pmu_clr_vo = 5, 131*010d6ae3SXiaoDong Huang pmu_clr_vi = 6, 132*010d6ae3SXiaoDong Huang pmu_clr_gpu = 7, 133*010d6ae3SXiaoDong Huang pmu_clr_usb = 8, 134*010d6ae3SXiaoDong Huang pmu_clr_vpu = 9, 135*010d6ae3SXiaoDong Huang pmu_clr_crypto = 10, 136*010d6ae3SXiaoDong Huang pmu_wakeup_begin_cfg = 11, 137*010d6ae3SXiaoDong Huang pmu_peri_clk_src_gt = 12, 138*010d6ae3SXiaoDong Huang pmu_bus_clk_src_gt = 13, 139*010d6ae3SXiaoDong Huang }; 140*010d6ae3SXiaoDong Huang 141*010d6ae3SXiaoDong Huang enum pmu_pd_id { 142*010d6ae3SXiaoDong Huang PD_CPU0 = 0, 143*010d6ae3SXiaoDong Huang PD_CPU1 = 1, 144*010d6ae3SXiaoDong Huang PD_CPU2 = 2, 145*010d6ae3SXiaoDong Huang PD_CPU3 = 3, 146*010d6ae3SXiaoDong Huang PD_SCU = 4, 147*010d6ae3SXiaoDong Huang PD_USB = 5, 148*010d6ae3SXiaoDong Huang PD_DDR = 6, 149*010d6ae3SXiaoDong Huang PD_SDCARD = 8, 150*010d6ae3SXiaoDong Huang PD_CRYPTO = 9, 151*010d6ae3SXiaoDong Huang PD_GMAC = 10, 152*010d6ae3SXiaoDong Huang PD_MMC_NAND = 11, 153*010d6ae3SXiaoDong Huang PD_VPU = 12, 154*010d6ae3SXiaoDong Huang PD_VO = 13, 155*010d6ae3SXiaoDong Huang PD_VI = 14, 156*010d6ae3SXiaoDong Huang PD_GPU = 15, 157*010d6ae3SXiaoDong Huang PD_END = 16, 158*010d6ae3SXiaoDong Huang }; 159*010d6ae3SXiaoDong Huang 160*010d6ae3SXiaoDong Huang enum pmu_bus_id { 161*010d6ae3SXiaoDong Huang BUS_ID_BUS = 0, 162*010d6ae3SXiaoDong Huang BUS_ID_BUS2MAIN = 1, 163*010d6ae3SXiaoDong Huang BUS_ID_GPU = 2, 164*010d6ae3SXiaoDong Huang BUS_ID_CORE = 3, 165*010d6ae3SXiaoDong Huang BUS_ID_CRYPTO = 4, 166*010d6ae3SXiaoDong Huang BUS_ID_MMC = 5, 167*010d6ae3SXiaoDong Huang BUS_ID_GMAC = 6, 168*010d6ae3SXiaoDong Huang BUS_ID_VO = 7, 169*010d6ae3SXiaoDong Huang BUS_ID_VI = 8, 170*010d6ae3SXiaoDong Huang BUS_ID_SDCARD = 9, 171*010d6ae3SXiaoDong Huang BUS_ID_USB = 10, 172*010d6ae3SXiaoDong Huang BUS_ID_MSCH = 11, 173*010d6ae3SXiaoDong Huang BUS_ID_PERI = 12, 174*010d6ae3SXiaoDong Huang BUS_ID_PMU = 13, 175*010d6ae3SXiaoDong Huang BUS_ID_VPU = 14, 176*010d6ae3SXiaoDong Huang BUS_ID_PERI2MSCH = 15, 177*010d6ae3SXiaoDong Huang }; 178*010d6ae3SXiaoDong Huang 179*010d6ae3SXiaoDong Huang enum pmu_pd_state { 180*010d6ae3SXiaoDong Huang pmu_pd_on = 0, 181*010d6ae3SXiaoDong Huang pmu_pd_off = 1 182*010d6ae3SXiaoDong Huang }; 183*010d6ae3SXiaoDong Huang 184*010d6ae3SXiaoDong Huang enum pmu_bus_state { 185*010d6ae3SXiaoDong Huang bus_active = 0, 186*010d6ae3SXiaoDong Huang bus_idle = 1, 187*010d6ae3SXiaoDong Huang }; 188*010d6ae3SXiaoDong Huang 189*010d6ae3SXiaoDong Huang enum cores_pm_ctr_mode { 190*010d6ae3SXiaoDong Huang core_pwr_pd = 0, 191*010d6ae3SXiaoDong Huang core_pwr_wfi = 1, 192*010d6ae3SXiaoDong Huang core_pwr_wfi_int = 2 193*010d6ae3SXiaoDong Huang }; 194*010d6ae3SXiaoDong Huang 195*010d6ae3SXiaoDong Huang enum pmu_cores_pm_by_wfi { 196*010d6ae3SXiaoDong Huang core_pm_en = 0, 197*010d6ae3SXiaoDong Huang core_pm_int_wakeup_en, 198*010d6ae3SXiaoDong Huang core_pm_dis_int, 199*010d6ae3SXiaoDong Huang core_pm_sft_wakeup_en 200*010d6ae3SXiaoDong Huang }; 201*010d6ae3SXiaoDong Huang 202*010d6ae3SXiaoDong Huang /***************************************************************************** 203*010d6ae3SXiaoDong Huang * pmu_sgrf 204*010d6ae3SXiaoDong Huang *****************************************************************************/ 205*010d6ae3SXiaoDong Huang #define PMUSGRF_SOC_CON(i) ((i) * 0x4) 206*010d6ae3SXiaoDong Huang 207*010d6ae3SXiaoDong Huang /***************************************************************************** 208*010d6ae3SXiaoDong Huang * pmu_grf 209*010d6ae3SXiaoDong Huang *****************************************************************************/ 210*010d6ae3SXiaoDong Huang #define GPIO0A_IOMUX 0x0 211*010d6ae3SXiaoDong Huang #define GPIO0B_IOMUX 0x4 212*010d6ae3SXiaoDong Huang #define GPIO0C_IOMUX 0x8 213*010d6ae3SXiaoDong Huang #define GPIO0A_PULL 0x10 214*010d6ae3SXiaoDong Huang 215*010d6ae3SXiaoDong Huang #define GPIO0L_SMT 0x38 216*010d6ae3SXiaoDong Huang #define GPIO0H_SMT 0x3c 217*010d6ae3SXiaoDong Huang 218*010d6ae3SXiaoDong Huang #define PMUGRF_SOC_CON(i) (0x100 + (i) * 4) 219*010d6ae3SXiaoDong Huang 220*010d6ae3SXiaoDong Huang #define PMUGRF_PVTM_CON0 0x180 221*010d6ae3SXiaoDong Huang #define PMUGRF_PVTM_CON1 0x184 222*010d6ae3SXiaoDong Huang #define PMUGRF_PVTM_ST0 0x190 223*010d6ae3SXiaoDong Huang #define PMUGRF_PVTM_ST1 0x194 224*010d6ae3SXiaoDong Huang 225*010d6ae3SXiaoDong Huang #define PVTM_CALC_CNT 0x200 226*010d6ae3SXiaoDong Huang 227*010d6ae3SXiaoDong Huang #define PMUGRF_OS_REG(n) (0x200 + (n) * 4) 228*010d6ae3SXiaoDong Huang 229*010d6ae3SXiaoDong Huang #define GPIO0A6_IOMUX_MSK (0x3 << 12) 230*010d6ae3SXiaoDong Huang #define GPIO0A6_IOMUX_GPIO (0x0 << 12) 231*010d6ae3SXiaoDong Huang #define GPIO0A6_IOMUX_RSTOUT (0x1 << 12) 232*010d6ae3SXiaoDong Huang #define GPIO0A6_IOMUX_SHTDN (0x2 << 12) 233*010d6ae3SXiaoDong Huang 234*010d6ae3SXiaoDong Huang enum px30_pmugrf_pvtm_con0 { 235*010d6ae3SXiaoDong Huang pgrf_pvtm_st = 0, 236*010d6ae3SXiaoDong Huang pgrf_pvtm_en = 1, 237*010d6ae3SXiaoDong Huang pgrf_pvtm_div = 2, 238*010d6ae3SXiaoDong Huang }; 239*010d6ae3SXiaoDong Huang 240*010d6ae3SXiaoDong Huang /***************************************************************************** 241*010d6ae3SXiaoDong Huang * pmu_cru 242*010d6ae3SXiaoDong Huang *****************************************************************************/ 243*010d6ae3SXiaoDong Huang #define CRU_PMU_MODE 0x20 244*010d6ae3SXiaoDong Huang #define CRU_PMU_CLKSEL_CON 0x40 245*010d6ae3SXiaoDong Huang #define CRU_PMU_CLKSELS_CON(i) (CRU_PMU_CLKSEL_CON + (i) * 4) 246*010d6ae3SXiaoDong Huang #define CRU_PMU_CLKSEL_CON_CNT 5 247*010d6ae3SXiaoDong Huang #define CRU_PMU_CLKGATE_CON 0x80 248*010d6ae3SXiaoDong Huang #define CRU_PMU_CLKGATES_CON(i) (CRU_PMU_CLKGATE_CON + (i) * 4) 249*010d6ae3SXiaoDong Huang #define CRU_PMU_CLKGATE_CON_CNT 2 250*010d6ae3SXiaoDong Huang #define CRU_PMU_ATCS_CON 0xc0 251*010d6ae3SXiaoDong Huang #define CRU_PMU_ATCSS_CON(i) (CRU_PMU_ATCS_CON + (i) * 4) 252*010d6ae3SXiaoDong Huang #define CRU_PMU_ATCS_CON_CNT 2 253*010d6ae3SXiaoDong Huang 254*010d6ae3SXiaoDong Huang /***************************************************************************** 255*010d6ae3SXiaoDong Huang * pmusgrf 256*010d6ae3SXiaoDong Huang *****************************************************************************/ 257*010d6ae3SXiaoDong Huang #define PMUSGRF_RSTOUT_EN (0x7 << 10) 258*010d6ae3SXiaoDong Huang #define PMUSGRF_RSTOUT_FST 10 259*010d6ae3SXiaoDong Huang #define PMUSGRF_RSTOUT_TSADC 11 260*010d6ae3SXiaoDong Huang #define PMUSGRF_RSTOUT_WDT 12 261*010d6ae3SXiaoDong Huang 262*010d6ae3SXiaoDong Huang #define PMUGRF_SOC_CON2_US_WMSK (0x1fff << 16) 263*010d6ae3SXiaoDong Huang #define PMUGRF_SOC_CON2_MAX_341US 0x1fff 264*010d6ae3SXiaoDong Huang #define PMUGRF_SOC_CON2_200US 0x12c0 265*010d6ae3SXiaoDong Huang 266*010d6ae3SXiaoDong Huang #define PMUGRF_FAILSAFE_SHTDN_TSADC BIT(0) 267*010d6ae3SXiaoDong Huang #define PMUGRF_FAILSAFE_SHTDN_WDT BIT(1) 268*010d6ae3SXiaoDong Huang 269*010d6ae3SXiaoDong Huang /***************************************************************************** 270*010d6ae3SXiaoDong Huang * QOS 271*010d6ae3SXiaoDong Huang *****************************************************************************/ 272*010d6ae3SXiaoDong Huang #define CPU_AXI_QOS_ID_COREID 0x00 273*010d6ae3SXiaoDong Huang #define CPU_AXI_QOS_REVISIONID 0x04 274*010d6ae3SXiaoDong Huang #define CPU_AXI_QOS_PRIORITY 0x08 275*010d6ae3SXiaoDong Huang #define CPU_AXI_QOS_MODE 0x0c 276*010d6ae3SXiaoDong Huang #define CPU_AXI_QOS_BANDWIDTH 0x10 277*010d6ae3SXiaoDong Huang #define CPU_AXI_QOS_SATURATION 0x14 278*010d6ae3SXiaoDong Huang #define CPU_AXI_QOS_EXTCONTROL 0x18 279*010d6ae3SXiaoDong Huang #define CPU_AXI_QOS_NUM_REGS 0x07 280*010d6ae3SXiaoDong Huang 281*010d6ae3SXiaoDong Huang #define CPU_AXI_CPU_QOS_BASE 0xff508000 282*010d6ae3SXiaoDong Huang #define CPU_AXI_GPU_QOS_BASE 0xff520000 283*010d6ae3SXiaoDong Huang #define CPU_AXI_ISP_128M_QOS_BASE 0xff548000 284*010d6ae3SXiaoDong Huang #define CPU_AXI_ISP_RD_QOS_BASE 0xff548080 285*010d6ae3SXiaoDong Huang #define CPU_AXI_ISP_WR_QOS_BASE 0xff548100 286*010d6ae3SXiaoDong Huang #define CPU_AXI_ISP_M1_QOS_BASE 0xff548180 287*010d6ae3SXiaoDong Huang #define CPU_AXI_VIP_QOS_BASE 0xff548200 288*010d6ae3SXiaoDong Huang #define CPU_AXI_RGA_RD_QOS_BASE 0xff550000 289*010d6ae3SXiaoDong Huang #define CPU_AXI_RGA_WR_QOS_BASE 0xff550080 290*010d6ae3SXiaoDong Huang #define CPU_AXI_VOP_M0_QOS_BASE 0xff550100 291*010d6ae3SXiaoDong Huang #define CPU_AXI_VOP_M1_QOS_BASE 0xff550180 292*010d6ae3SXiaoDong Huang #define CPU_AXI_VPU_QOS_BASE 0xff558000 293*010d6ae3SXiaoDong Huang #define CPU_AXI_VPU_R128_QOS_BASE 0xff558080 294*010d6ae3SXiaoDong Huang #define CPU_AXI_DCF_QOS_BASE 0xff500000 295*010d6ae3SXiaoDong Huang #define CPU_AXI_DMAC_QOS_BASE 0xff500080 296*010d6ae3SXiaoDong Huang #define CPU_AXI_CRYPTO_QOS_BASE 0xff510000 297*010d6ae3SXiaoDong Huang #define CPU_AXI_GMAC_QOS_BASE 0xff518000 298*010d6ae3SXiaoDong Huang #define CPU_AXI_EMMC_QOS_BASE 0xff538000 299*010d6ae3SXiaoDong Huang #define CPU_AXI_NAND_QOS_BASE 0xff538080 300*010d6ae3SXiaoDong Huang #define CPU_AXI_SDIO_QOS_BASE 0xff538100 301*010d6ae3SXiaoDong Huang #define CPU_AXI_SFC_QOS_BASE 0xff538180 302*010d6ae3SXiaoDong Huang #define CPU_AXI_SDMMC_QOS_BASE 0xff52c000 303*010d6ae3SXiaoDong Huang #define CPU_AXI_USB_HOST_QOS_BASE 0xff540000 304*010d6ae3SXiaoDong Huang #define CPU_AXI_USB_OTG_QOS_BASE 0xff540080 305*010d6ae3SXiaoDong Huang 306*010d6ae3SXiaoDong Huang #define PX30_CPU_AXI_SAVE_QOS(array, base) do { \ 307*010d6ae3SXiaoDong Huang array[0] = mmio_read_32(base + CPU_AXI_QOS_ID_COREID); \ 308*010d6ae3SXiaoDong Huang array[1] = mmio_read_32(base + CPU_AXI_QOS_REVISIONID); \ 309*010d6ae3SXiaoDong Huang array[2] = mmio_read_32(base + CPU_AXI_QOS_PRIORITY); \ 310*010d6ae3SXiaoDong Huang array[3] = mmio_read_32(base + CPU_AXI_QOS_MODE); \ 311*010d6ae3SXiaoDong Huang array[4] = mmio_read_32(base + CPU_AXI_QOS_BANDWIDTH); \ 312*010d6ae3SXiaoDong Huang array[5] = mmio_read_32(base + CPU_AXI_QOS_SATURATION); \ 313*010d6ae3SXiaoDong Huang array[6] = mmio_read_32(base + CPU_AXI_QOS_EXTCONTROL); \ 314*010d6ae3SXiaoDong Huang } while (0) 315*010d6ae3SXiaoDong Huang 316*010d6ae3SXiaoDong Huang #define PX30_CPU_AXI_RESTORE_QOS(array, base) do { \ 317*010d6ae3SXiaoDong Huang mmio_write_32(base + CPU_AXI_QOS_ID_COREID, array[0]); \ 318*010d6ae3SXiaoDong Huang mmio_write_32(base + CPU_AXI_QOS_REVISIONID, array[1]); \ 319*010d6ae3SXiaoDong Huang mmio_write_32(base + CPU_AXI_QOS_PRIORITY, array[2]); \ 320*010d6ae3SXiaoDong Huang mmio_write_32(base + CPU_AXI_QOS_MODE, array[3]); \ 321*010d6ae3SXiaoDong Huang mmio_write_32(base + CPU_AXI_QOS_BANDWIDTH, array[4]); \ 322*010d6ae3SXiaoDong Huang mmio_write_32(base + CPU_AXI_QOS_SATURATION, array[5]); \ 323*010d6ae3SXiaoDong Huang mmio_write_32(base + CPU_AXI_QOS_EXTCONTROL, array[6]); \ 324*010d6ae3SXiaoDong Huang } while (0) 325*010d6ae3SXiaoDong Huang 326*010d6ae3SXiaoDong Huang #define SAVE_QOS(array, NAME) \ 327*010d6ae3SXiaoDong Huang PX30_CPU_AXI_SAVE_QOS(array, CPU_AXI_##NAME##_QOS_BASE) 328*010d6ae3SXiaoDong Huang #define RESTORE_QOS(array, NAME) \ 329*010d6ae3SXiaoDong Huang PX30_CPU_AXI_RESTORE_QOS(array, CPU_AXI_##NAME##_QOS_BASE) 330*010d6ae3SXiaoDong Huang 331*010d6ae3SXiaoDong Huang #endif /* __PMU_H__ */ 332