Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'pmdomain-v6.7' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/linux-pm

Pull pmdomain updates from Ulf Hansson:

- Move Kconfig files into the pmdomain subsystem

- Drop use of genpd's redundant ->opp_to_performance_state() callback

- amlogic:
- Add support for the T7 power-domains controller
- Fix mask for the second NNA mem power-domain

- bcm: Fixup ASB register read and comparison for bcm2835-power

- imx: Fix device link problem for consumers of the pgc power-domain

- mediatek: Add support for the MT8365 power domains

- qcom:
- Add support for the rpmhpds for SC8380XP power-domains
- Add support for the rpmhpds for SM8650 power-domains
- Add support for the rpmhpd clocks for SM7150
- Add support for the rpmpds for MSM8917 (families) power-domains

- starfive: Add support for the JH7110 AON PMU

* tag 'pmdomain-v6.7' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/linux-pm: (56 commits)
pmdomain: amlogic: Fix mask for the second NNA mem PD domain
pmdomain: qcom: rpmhpd: Add SC8380XP power domains
pmdomain: qcom: rpmhpd: Add SM8650 RPMh Power Domains
dt-bindings: power: rpmpd: Add SC8380XP support
dt-bindings: power: qcom,rpmhpd: Add GMXC PD index
dt-bindings: power: qcom,rpmpd: document the SM8650 RPMh Power Domains
pmdomain: imx: Make imx pgc power domain also set the fwnode
pmdomain: qcom: rpmpd: Add QM215 power domains
pmdomain: qcom: rpmpd: Add MSM8917 power domains
dt-bindings: power: rpmpd: Add MSM8917, MSM8937 and QM215
pmdomain: bcm: bcm2835-power: check if the ASB register is equal to enable
pmdomain: qcom: rpmhpd: Drop the ->opp_to_performance_state() callback
pmdomain: qcom: rpmpd: Drop the ->opp_to_performance_state() callback
pmdomain: qcom: cpr: Drop the ->opp_to_performance_state() callback
pmdomain: Use device_get_match_data()
pmdomain: ti: add missing of_node_put
pmdomain: mediatek: Add support for MT8365
pmdomain: mediatek: Add support for MTK_SCPD_STRICT_BUS_PROTECTION cap
pmdomain: mediatek: Add support for WAY_EN operations
pmdomain: mediatek: Unify configuration for infracfg and smi
...

+1942 -929
+2 -1
Documentation/devicetree/bindings/power/amlogic,meson-sec-pwrc.yaml
··· 12 12 - Jianxin Pan <jianxin.pan@amlogic.com> 13 13 14 14 description: |+ 15 - Secure Power Domains used in Meson A1/C1/S4 & C3 SoCs, and should be the child node 15 + Secure Power Domains used in Meson A1/C1/S4 & C3/T7 SoCs, and should be the child node 16 16 of secure-monitor. 17 17 18 18 properties: ··· 21 21 - amlogic,meson-a1-pwrc 22 22 - amlogic,meson-s4-pwrc 23 23 - amlogic,c3-pwrc 24 + - amlogic,t7-pwrc 24 25 25 26 "#power-domain-cells": 26 27 const: 1
+6
Documentation/devicetree/bindings/power/mediatek,power-controller.yaml
··· 31 31 - mediatek,mt8188-power-controller 32 32 - mediatek,mt8192-power-controller 33 33 - mediatek,mt8195-power-controller 34 + - mediatek,mt8365-power-controller 34 35 35 36 '#power-domain-cells': 36 37 const: 1 ··· 89 88 "include/dt-bindings/power/mediatek,mt8188-power.h" - for MT8188 type power domain. 90 89 "include/dt-bindings/power/mt8192-power.h" - for MT8192 type power domain. 91 90 "include/dt-bindings/power/mt8195-power.h" - for MT8195 type power domain. 91 + "include/dt-bindings/power/mediatek,mt8365-power.h" - for MT8365 type power domain. 92 92 maxItems: 1 93 93 94 94 clocks: ··· 116 114 mediatek,infracfg: 117 115 $ref: /schemas/types.yaml#/definitions/phandle 118 116 description: phandle to the device containing the INFRACFG register range. 117 + 118 + mediatek,infracfg-nao: 119 + $ref: /schemas/types.yaml#/definitions/phandle 120 + description: phandle to the device containing the INFRACFG-NAO register range. 119 121 120 122 mediatek,smi: 121 123 $ref: /schemas/types.yaml#/definitions/phandle
+46 -36
Documentation/devicetree/bindings/power/qcom,rpmpd.yaml
··· 15 15 16 16 properties: 17 17 compatible: 18 - enum: 19 - - qcom,mdm9607-rpmpd 20 - - qcom,msm8226-rpmpd 21 - - qcom,msm8909-rpmpd 22 - - qcom,msm8916-rpmpd 23 - - qcom,msm8939-rpmpd 24 - - qcom,msm8953-rpmpd 25 - - qcom,msm8976-rpmpd 26 - - qcom,msm8994-rpmpd 27 - - qcom,msm8996-rpmpd 28 - - qcom,msm8998-rpmpd 29 - - qcom,qcm2290-rpmpd 30 - - qcom,qcs404-rpmpd 31 - - qcom,qdu1000-rpmhpd 32 - - qcom,sa8155p-rpmhpd 33 - - qcom,sa8540p-rpmhpd 34 - - qcom,sa8775p-rpmhpd 35 - - qcom,sdm660-rpmpd 36 - - qcom,sc7180-rpmhpd 37 - - qcom,sc7280-rpmhpd 38 - - qcom,sc8180x-rpmhpd 39 - - qcom,sc8280xp-rpmhpd 40 - - qcom,sdm670-rpmhpd 41 - - qcom,sdm845-rpmhpd 42 - - qcom,sdx55-rpmhpd 43 - - qcom,sdx65-rpmhpd 44 - - qcom,sdx75-rpmhpd 45 - - qcom,sm6115-rpmpd 46 - - qcom,sm6125-rpmpd 47 - - qcom,sm6350-rpmhpd 48 - - qcom,sm6375-rpmpd 49 - - qcom,sm8150-rpmhpd 50 - - qcom,sm8250-rpmhpd 51 - - qcom,sm8350-rpmhpd 52 - - qcom,sm8450-rpmhpd 53 - - qcom,sm8550-rpmhpd 18 + oneOf: 19 + - enum: 20 + - qcom,mdm9607-rpmpd 21 + - qcom,msm8226-rpmpd 22 + - qcom,msm8909-rpmpd 23 + - qcom,msm8916-rpmpd 24 + - qcom,msm8917-rpmpd 25 + - qcom,msm8939-rpmpd 26 + - qcom,msm8953-rpmpd 27 + - qcom,msm8976-rpmpd 28 + - qcom,msm8994-rpmpd 29 + - qcom,msm8996-rpmpd 30 + - qcom,msm8998-rpmpd 31 + - qcom,qcm2290-rpmpd 32 + - qcom,qcs404-rpmpd 33 + - qcom,qdu1000-rpmhpd 34 + - qcom,qm215-rpmpd 35 + - qcom,sa8155p-rpmhpd 36 + - qcom,sa8540p-rpmhpd 37 + - qcom,sa8775p-rpmhpd 38 + - qcom,sc7180-rpmhpd 39 + - qcom,sc7280-rpmhpd 40 + - qcom,sc8180x-rpmhpd 41 + - qcom,sc8280xp-rpmhpd 42 + - qcom,sc8380xp-rpmhpd 43 + - qcom,sdm660-rpmpd 44 + - qcom,sdm670-rpmhpd 45 + - qcom,sdm845-rpmhpd 46 + - qcom,sdx55-rpmhpd 47 + - qcom,sdx65-rpmhpd 48 + - qcom,sdx75-rpmhpd 49 + - qcom,sm6115-rpmpd 50 + - qcom,sm6125-rpmpd 51 + - qcom,sm6350-rpmhpd 52 + - qcom,sm6375-rpmpd 53 + - qcom,sm7150-rpmhpd 54 + - qcom,sm8150-rpmhpd 55 + - qcom,sm8250-rpmhpd 56 + - qcom,sm8350-rpmhpd 57 + - qcom,sm8450-rpmhpd 58 + - qcom,sm8550-rpmhpd 59 + - qcom,sm8650-rpmhpd 60 + - items: 61 + - enum: 62 + - qcom,msm8937-rpmpd 63 + - const: qcom,msm8917-rpmpd 54 64 55 65 '#power-domain-cells': 56 66 const: 1
+3 -3
MAINTAINERS
··· 1798 1798 F: drivers/mmc/host/owl-mmc.c 1799 1799 F: drivers/net/ethernet/actions/ 1800 1800 F: drivers/pinctrl/actions/* 1801 - F: drivers/soc/actions/ 1801 + F: drivers/pmdomain/actions/ 1802 1802 F: include/dt-bindings/power/owl-* 1803 1803 F: include/dt-bindings/reset/actions,* 1804 1804 F: include/linux/soc/actions/ ··· 20605 20605 20606 20606 STARFIVE JH71XX PMU CONTROLLER DRIVER 20607 20607 M: Walker Chen <walker.chen@starfivetech.com> 20608 + M: Changhuang Liang <changhuang.liang@starfivetech.com> 20608 20609 S: Supported 20609 20610 F: Documentation/devicetree/bindings/power/starfive* 20610 - F: drivers/pmdomain/starfive/jh71xx-pmu.c 20611 + F: drivers/pmdomain/starfive/ 20611 20612 F: include/dt-bindings/power/starfive,jh7110-pmu.h 20612 20613 20613 20614 STARFIVE SOC DRIVERS ··· 20616 20615 S: Maintained 20617 20616 T: git https://git.kernel.org/pub/scm/linux/kernel/git/conor/linux.git/ 20618 20617 F: Documentation/devicetree/bindings/soc/starfive/ 20619 - F: drivers/soc/starfive/ 20620 20618 20621 20619 STARFIVE TRNG DRIVER 20622 20620 M: Jia Jie Ho <jiajie.ho@starfivetech.com>
+2
drivers/Kconfig
··· 175 175 176 176 source "drivers/soc/Kconfig" 177 177 178 + source "drivers/pmdomain/Kconfig" 179 + 178 180 source "drivers/devfreq/Kconfig" 179 181 180 182 source "drivers/extcon/Kconfig"
-6
drivers/firmware/imx/Kconfig
··· 22 22 23 23 This driver manages the IPC interface between host CPU and the 24 24 SCU firmware running on M4. 25 - 26 - config IMX_SCU_PD 27 - bool "IMX SCU Power Domain driver" 28 - depends on IMX_SCU 29 - help 30 - The System Controller Firmware (SCFW) based power domain driver.
+21
drivers/pmdomain/Kconfig
··· 1 + # SPDX-License-Identifier: GPL-2.0-only 2 + menu "PM Domains" 3 + 4 + source "drivers/pmdomain/actions/Kconfig" 5 + source "drivers/pmdomain/amlogic/Kconfig" 6 + source "drivers/pmdomain/apple/Kconfig" 7 + source "drivers/pmdomain/bcm/Kconfig" 8 + source "drivers/pmdomain/imx/Kconfig" 9 + source "drivers/pmdomain/mediatek/Kconfig" 10 + source "drivers/pmdomain/qcom/Kconfig" 11 + source "drivers/pmdomain/renesas/Kconfig" 12 + source "drivers/pmdomain/rockchip/Kconfig" 13 + source "drivers/pmdomain/samsung/Kconfig" 14 + source "drivers/pmdomain/st/Kconfig" 15 + source "drivers/pmdomain/starfive/Kconfig" 16 + source "drivers/pmdomain/sunxi/Kconfig" 17 + source "drivers/pmdomain/tegra/Kconfig" 18 + source "drivers/pmdomain/ti/Kconfig" 19 + source "drivers/pmdomain/xilinx/Kconfig" 20 + 21 + endmenu
+5 -11
drivers/pmdomain/actions/owl-sps.c
··· 8 8 * Copyright (c) 2017 Andreas Färber 9 9 */ 10 10 11 + #include <linux/mod_devicetable.h> 11 12 #include <linux/of_address.h> 12 - #include <linux/of_platform.h> 13 + #include <linux/platform_device.h> 14 + #include <linux/property.h> 13 15 #include <linux/pm_domain.h> 14 16 #include <linux/soc/actions/owl-sps.h> 15 17 #include <dt-bindings/power/owl-s500-powergate.h> ··· 98 96 99 97 static int owl_sps_probe(struct platform_device *pdev) 100 98 { 101 - const struct of_device_id *match; 102 99 const struct owl_sps_info *sps_info; 103 100 struct owl_sps *sps; 104 101 int i, ret; 105 102 106 - if (!pdev->dev.of_node) { 107 - dev_err(&pdev->dev, "no device node\n"); 108 - return -ENODEV; 109 - } 110 - 111 - match = of_match_device(pdev->dev.driver->of_match_table, &pdev->dev); 112 - if (!match || !match->data) { 103 + sps_info = device_get_match_data(&pdev->dev); 104 + if (!sps_info) { 113 105 dev_err(&pdev->dev, "unknown compatible or missing data\n"); 114 106 return -EINVAL; 115 107 } 116 - 117 - sps_info = match->data; 118 108 119 109 sps = devm_kzalloc(&pdev->dev, 120 110 struct_size(sps, domains, sps_info->num_domains),
+39
drivers/pmdomain/amlogic/Kconfig
··· 1 + # SPDX-License-Identifier: GPL-2.0-only 2 + menu "Amlogic PM Domains" 3 + 4 + config MESON_GX_PM_DOMAINS 5 + tristate "Amlogic Meson GX Power Domains driver" 6 + depends on ARCH_MESON || COMPILE_TEST 7 + depends on PM && OF 8 + default ARCH_MESON 9 + select PM_GENERIC_DOMAINS 10 + select PM_GENERIC_DOMAINS_OF 11 + help 12 + Say yes to expose Amlogic Meson GX Power Domains as 13 + Generic Power Domains. 14 + 15 + config MESON_EE_PM_DOMAINS 16 + tristate "Amlogic Meson Everything-Else Power Domains driver" 17 + depends on ARCH_MESON || COMPILE_TEST 18 + depends on PM && OF 19 + default ARCH_MESON 20 + select PM_GENERIC_DOMAINS 21 + select PM_GENERIC_DOMAINS_OF 22 + help 23 + Say yes to expose Amlogic Meson Everything-Else Power Domains as 24 + Generic Power Domains. 25 + 26 + config MESON_SECURE_PM_DOMAINS 27 + tristate "Amlogic Meson Secure Power Domains driver" 28 + depends on (ARCH_MESON || COMPILE_TEST) && MESON_SM 29 + depends on PM && OF 30 + depends on HAVE_ARM_SMCCC 31 + default ARCH_MESON 32 + select PM_GENERIC_DOMAINS 33 + select PM_GENERIC_DOMAINS_OF 34 + help 35 + Support for the power controller on Amlogic A1/C1 series. 36 + Say yes to expose Amlogic Meson Secure Power Domains as Generic 37 + Power Domains. 38 + 39 + endmenu
+1 -1
drivers/pmdomain/amlogic/meson-ee-pwrc.c
··· 228 228 229 229 static struct meson_ee_pwrc_mem_domain g12a_pwrc_mem_nna[] = { 230 230 { G12A_HHI_NANOQ_MEM_PD_REG0, GENMASK(31, 0) }, 231 - { G12A_HHI_NANOQ_MEM_PD_REG1, GENMASK(23, 0) }, 231 + { G12A_HHI_NANOQ_MEM_PD_REG1, GENMASK(31, 0) }, 232 232 }; 233 233 234 234 #define VPU_PD(__name, __top_pd, __mem, __is_pwr_off, __resets, __clks) \
+114 -13
drivers/pmdomain/amlogic/meson-secure-pwrc.c
··· 13 13 #include <dt-bindings/power/meson-a1-power.h> 14 14 #include <dt-bindings/power/amlogic,c3-pwrc.h> 15 15 #include <dt-bindings/power/meson-s4-power.h> 16 + #include <dt-bindings/power/amlogic,t7-pwrc.h> 16 17 #include <linux/arm-smccc.h> 17 18 #include <linux/firmware/meson/meson_sm.h> 18 19 #include <linux/module.h> 19 20 20 21 #define PWRC_ON 1 21 22 #define PWRC_OFF 0 23 + #define PWRC_NO_PARENT UINT_MAX 22 24 23 25 struct meson_secure_pwrc_domain { 24 26 struct generic_pm_domain base; 25 27 unsigned int index; 28 + unsigned int parent; 26 29 struct meson_secure_pwrc *pwrc; 27 30 }; 28 31 ··· 37 34 38 35 struct meson_secure_pwrc_domain_desc { 39 36 unsigned int index; 37 + unsigned int parent; 40 38 unsigned int flags; 41 39 char *name; 42 40 bool (*is_off)(struct meson_secure_pwrc_domain *pwrc_domain); ··· 94 90 { \ 95 91 .name = #__name, \ 96 92 .index = PWRC_##__name##_ID, \ 97 - .is_off = pwrc_secure_is_off, \ 93 + .is_off = pwrc_secure_is_off, \ 98 94 .flags = __flag, \ 95 + .parent = PWRC_NO_PARENT, \ 96 + } 97 + 98 + #define TOP_PD(__name, __flag, __parent) \ 99 + [PWRC_##__name##_ID] = \ 100 + { \ 101 + .name = #__name, \ 102 + .index = PWRC_##__name##_ID, \ 103 + .is_off = pwrc_secure_is_off, \ 104 + .flags = __flag, \ 105 + .parent = __parent, \ 99 106 } 100 107 101 108 static struct meson_secure_pwrc_domain_desc a1_pwrc_domains[] = { ··· 137 122 }; 138 123 139 124 static struct meson_secure_pwrc_domain_desc c3_pwrc_domains[] = { 140 - SEC_PD(C3_NNA, 0), 141 - SEC_PD(C3_AUDIO, GENPD_FLAG_ALWAYS_ON), 142 - SEC_PD(C3_SDIOA, GENPD_FLAG_ALWAYS_ON), 143 - SEC_PD(C3_EMMC, GENPD_FLAG_ALWAYS_ON), 144 - SEC_PD(C3_USB_COMB, GENPD_FLAG_ALWAYS_ON), 145 - SEC_PD(C3_SDCARD, GENPD_FLAG_ALWAYS_ON), 146 - SEC_PD(C3_ETH, GENPD_FLAG_ALWAYS_ON), 147 - SEC_PD(C3_GE2D, GENPD_FLAG_ALWAYS_ON), 148 - SEC_PD(C3_CVE, GENPD_FLAG_ALWAYS_ON), 149 - SEC_PD(C3_GDC_WRAP, GENPD_FLAG_ALWAYS_ON), 150 - SEC_PD(C3_ISP_TOP, GENPD_FLAG_ALWAYS_ON), 151 - SEC_PD(C3_MIPI_ISP_WRAP, GENPD_FLAG_ALWAYS_ON), 125 + SEC_PD(C3_NNA, 0), 126 + SEC_PD(C3_AUDIO, 0), 127 + SEC_PD(C3_SDIOA, 0), 128 + SEC_PD(C3_EMMC, 0), 129 + SEC_PD(C3_USB_COMB, 0), 130 + SEC_PD(C3_SDCARD, 0), 131 + /* ETH is for ethernet online wakeup, and should be always on */ 132 + SEC_PD(C3_ETH, GENPD_FLAG_ALWAYS_ON), 133 + SEC_PD(C3_GE2D, 0), 134 + SEC_PD(C3_CVE, 0), 135 + SEC_PD(C3_GDC_WRAP, 0), 136 + SEC_PD(C3_ISP_TOP, 0), 137 + SEC_PD(C3_MIPI_ISP_WRAP, 0), 152 138 SEC_PD(C3_VCODEC, 0), 153 139 }; 154 140 ··· 163 147 SEC_PD(S4_ETH, GENPD_FLAG_ALWAYS_ON), 164 148 SEC_PD(S4_DEMOD, 0), 165 149 SEC_PD(S4_AUDIO, 0), 150 + }; 151 + 152 + static struct meson_secure_pwrc_domain_desc t7_pwrc_domains[] = { 153 + SEC_PD(T7_DSPA, 0), 154 + SEC_PD(T7_DSPB, 0), 155 + TOP_PD(T7_DOS_HCODEC, 0, PWRC_T7_NIC3_ID), 156 + TOP_PD(T7_DOS_HEVC, 0, PWRC_T7_NIC3_ID), 157 + TOP_PD(T7_DOS_VDEC, 0, PWRC_T7_NIC3_ID), 158 + TOP_PD(T7_DOS_WAVE, 0, PWRC_T7_NIC3_ID), 159 + SEC_PD(T7_VPU_HDMI, 0), 160 + SEC_PD(T7_USB_COMB, 0), 161 + SEC_PD(T7_PCIE, 0), 162 + TOP_PD(T7_GE2D, 0, PWRC_T7_NIC3_ID), 163 + /* SRAMA is used as ATF runtime memory, and should be always on */ 164 + SEC_PD(T7_SRAMA, GENPD_FLAG_ALWAYS_ON), 165 + /* SRAMB is used as ATF runtime memory, and should be always on */ 166 + SEC_PD(T7_SRAMB, GENPD_FLAG_ALWAYS_ON), 167 + SEC_PD(T7_HDMIRX, 0), 168 + SEC_PD(T7_VI_CLK1, 0), 169 + SEC_PD(T7_VI_CLK2, 0), 170 + /* ETH is for ethernet online wakeup, and should be always on */ 171 + SEC_PD(T7_ETH, GENPD_FLAG_ALWAYS_ON), 172 + SEC_PD(T7_ISP, 0), 173 + SEC_PD(T7_MIPI_ISP, 0), 174 + TOP_PD(T7_GDC, 0, PWRC_T7_NIC3_ID), 175 + TOP_PD(T7_DEWARP, 0, PWRC_T7_NIC3_ID), 176 + SEC_PD(T7_SDIO_A, 0), 177 + SEC_PD(T7_SDIO_B, 0), 178 + SEC_PD(T7_EMMC, 0), 179 + TOP_PD(T7_MALI_SC0, 0, PWRC_T7_NNA_TOP_ID), 180 + TOP_PD(T7_MALI_SC1, 0, PWRC_T7_NNA_TOP_ID), 181 + TOP_PD(T7_MALI_SC2, 0, PWRC_T7_NNA_TOP_ID), 182 + TOP_PD(T7_MALI_SC3, 0, PWRC_T7_NNA_TOP_ID), 183 + SEC_PD(T7_MALI_TOP, 0), 184 + TOP_PD(T7_NNA_CORE0, 0, PWRC_T7_NNA_TOP_ID), 185 + TOP_PD(T7_NNA_CORE1, 0, PWRC_T7_NNA_TOP_ID), 186 + TOP_PD(T7_NNA_CORE2, 0, PWRC_T7_NNA_TOP_ID), 187 + TOP_PD(T7_NNA_CORE3, 0, PWRC_T7_NNA_TOP_ID), 188 + SEC_PD(T7_NNA_TOP, 0), 189 + SEC_PD(T7_DDR0, GENPD_FLAG_ALWAYS_ON), 190 + SEC_PD(T7_DDR1, GENPD_FLAG_ALWAYS_ON), 191 + /* DMC0 is for DDR PHY ana/dig and DMC, and should be always on */ 192 + SEC_PD(T7_DMC0, GENPD_FLAG_ALWAYS_ON), 193 + /* DMC1 is for DDR PHY ana/dig and DMC, and should be always on */ 194 + SEC_PD(T7_DMC1, GENPD_FLAG_ALWAYS_ON), 195 + /* NOC is related to clk bus, and should be always on */ 196 + SEC_PD(T7_NOC, GENPD_FLAG_ALWAYS_ON), 197 + /* NIC is for the Arm NIC-400 interconnect, and should be always on */ 198 + SEC_PD(T7_NIC2, GENPD_FLAG_ALWAYS_ON), 199 + SEC_PD(T7_NIC3, 0), 200 + /* CPU accesses the interleave data to the ddr need cci, and should be always on */ 201 + SEC_PD(T7_CCI, GENPD_FLAG_ALWAYS_ON), 202 + SEC_PD(T7_MIPI_DSI0, 0), 203 + SEC_PD(T7_SPICC0, 0), 204 + SEC_PD(T7_SPICC1, 0), 205 + SEC_PD(T7_SPICC2, 0), 206 + SEC_PD(T7_SPICC3, 0), 207 + SEC_PD(T7_SPICC4, 0), 208 + SEC_PD(T7_SPICC5, 0), 209 + SEC_PD(T7_EDP0, 0), 210 + SEC_PD(T7_EDP1, 0), 211 + SEC_PD(T7_MIPI_DSI1, 0), 212 + SEC_PD(T7_AUDIO, 0), 166 213 }; 167 214 168 215 static int meson_secure_pwrc_probe(struct platform_device *pdev) ··· 280 201 281 202 dom->pwrc = pwrc; 282 203 dom->index = match->domains[i].index; 204 + dom->parent = match->domains[i].parent; 283 205 dom->base.name = match->domains[i].name; 284 206 dom->base.flags = match->domains[i].flags; 285 207 dom->base.power_on = meson_secure_pwrc_on; 286 208 dom->base.power_off = meson_secure_pwrc_off; 287 209 210 + if (match->domains[i].is_off(dom) && (dom->base.flags & GENPD_FLAG_ALWAYS_ON)) 211 + meson_secure_pwrc_on(&dom->base); 212 + 288 213 pm_genpd_init(&dom->base, NULL, match->domains[i].is_off(dom)); 289 214 290 215 pwrc->xlate.domains[i] = &dom->base; 216 + } 217 + 218 + for (i = 0; i < match->count; i++) { 219 + struct meson_secure_pwrc_domain *dom = pwrc->domains; 220 + 221 + if (!match->domains[i].name || match->domains[i].parent == PWRC_NO_PARENT) 222 + continue; 223 + 224 + pm_genpd_add_subdomain(&dom[dom[i].parent].base, &dom[i].base); 291 225 } 292 226 293 227 return of_genpd_add_provider_onecell(pdev->dev.of_node, &pwrc->xlate); ··· 321 229 .count = ARRAY_SIZE(s4_pwrc_domains), 322 230 }; 323 231 232 + static struct meson_secure_pwrc_domain_data amlogic_secure_t7_pwrc_data = { 233 + .domains = t7_pwrc_domains, 234 + .count = ARRAY_SIZE(t7_pwrc_domains), 235 + }; 236 + 324 237 static const struct of_device_id meson_secure_pwrc_match_table[] = { 325 238 { 326 239 .compatible = "amlogic,meson-a1-pwrc", ··· 338 241 { 339 242 .compatible = "amlogic,meson-s4-pwrc", 340 243 .data = &meson_secure_s4_pwrc_data, 244 + }, 245 + { 246 + .compatible = "amlogic,t7-pwrc", 247 + .data = &amlogic_secure_t7_pwrc_data, 341 248 }, 342 249 { /* sentinel */ } 343 250 };
+18
drivers/pmdomain/apple/Kconfig
··· 1 + # SPDX-License-Identifier: GPL-2.0-only 2 + 3 + if ARCH_APPLE || COMPILE_TEST 4 + 5 + config APPLE_PMGR_PWRSTATE 6 + bool "Apple SoC PMGR power state control" 7 + depends on PM 8 + select REGMAP 9 + select MFD_SYSCON 10 + select PM_GENERIC_DOMAINS 11 + select RESET_CONTROLLER 12 + default ARCH_APPLE 13 + help 14 + The PMGR block in Apple SoCs provides high-level power state 15 + controls for SoC devices. This driver manages them through the 16 + generic power domain framework, and also provides reset support. 17 + 18 + endif
+42
drivers/pmdomain/bcm/Kconfig
··· 1 + # SPDX-License-Identifier: GPL-2.0-only 2 + menu "Broadcom PM Domains" 3 + 4 + config BCM2835_POWER 5 + bool "BCM2835 power domain driver" 6 + depends on ARCH_BCM2835 || (COMPILE_TEST && OF) 7 + default y if ARCH_BCM2835 8 + select PM_GENERIC_DOMAINS if PM 9 + select RESET_CONTROLLER 10 + help 11 + This enables support for the BCM2835 power domains and reset 12 + controller. Any usage of power domains by the Raspberry Pi 13 + firmware means that Linux usage of the same power domain 14 + must be accessed using the RASPBERRYPI_POWER driver 15 + 16 + config RASPBERRYPI_POWER 17 + bool "Raspberry Pi power domain driver" 18 + depends on ARCH_BCM2835 || (COMPILE_TEST && OF) 19 + depends on RASPBERRYPI_FIRMWARE=y 20 + select PM_GENERIC_DOMAINS if PM 21 + help 22 + This enables support for the RPi power domains which can be enabled 23 + or disabled via the RPi firmware. 24 + 25 + config BCM_PMB 26 + bool "Broadcom PMB (Power Management Bus) driver" 27 + depends on ARCH_BCMBCA || (COMPILE_TEST && OF) 28 + default ARCH_BCMBCA 29 + select PM_GENERIC_DOMAINS if PM 30 + help 31 + This enables support for the Broadcom's PMB (Power Management Bus) that 32 + is used for disabling and enabling SoC devices. 33 + 34 + config BCM63XX_POWER 35 + bool "BCM63xx power domain driver" 36 + depends on BMIPS_GENERIC || (COMPILE_TEST && OF) 37 + select PM_GENERIC_DOMAINS if PM 38 + help 39 + This enables support for the BCM63xx power domains controller on 40 + BCM6318, BCM6328, BCM6362 and BCM63268 SoCs. 41 + 42 + endmenu
+1 -1
drivers/pmdomain/bcm/bcm2835-power.c
··· 175 175 } 176 176 writel(PM_PASSWORD | val, base + reg); 177 177 178 - while (readl(base + reg) & ASB_ACK) { 178 + while (!!(readl(base + reg) & ASB_ACK) == enable) { 179 179 cpu_relax(); 180 180 if (ktime_get_ns() - start >= 1000) 181 181 return -ETIMEDOUT;
+29
drivers/pmdomain/imx/Kconfig
··· 1 + # SPDX-License-Identifier: GPL-2.0-only 2 + menu "i.MX PM Domains" 3 + 4 + config IMX_GPCV2_PM_DOMAINS 5 + bool "i.MX GPCv2 PM domains" 6 + depends on ARCH_MXC || (COMPILE_TEST && OF) 7 + depends on PM 8 + select PM_GENERIC_DOMAINS 9 + select REGMAP_MMIO 10 + default y if SOC_IMX7D 11 + 12 + config IMX8M_BLK_CTRL 13 + bool 14 + default SOC_IMX8M && IMX_GPCV2_PM_DOMAINS 15 + depends on PM_GENERIC_DOMAINS 16 + depends on COMMON_CLK 17 + 18 + config IMX9_BLK_CTRL 19 + bool 20 + default SOC_IMX9 && IMX_GPCV2_PM_DOMAINS 21 + depends on PM_GENERIC_DOMAINS 22 + 23 + config IMX_SCU_PD 24 + bool "IMX SCU Power Domain driver" 25 + depends on IMX_SCU 26 + help 27 + The System Controller Firmware (SCFW) based power domain driver. 28 + 29 + endmenu
+4 -4
drivers/pmdomain/imx/gpc.c
··· 7 7 #include <linux/clk.h> 8 8 #include <linux/delay.h> 9 9 #include <linux/io.h> 10 - #include <linux/of_device.h> 10 + #include <linux/of.h> 11 11 #include <linux/platform_device.h> 12 12 #include <linux/pm_domain.h> 13 + #include <linux/property.h> 13 14 #include <linux/regmap.h> 14 15 #include <linux/regulator/consumer.h> 15 16 ··· 404 403 405 404 static int imx_gpc_probe(struct platform_device *pdev) 406 405 { 407 - const struct of_device_id *of_id = 408 - of_match_device(imx_gpc_dt_ids, &pdev->dev); 409 - const struct imx_gpc_dt_data *of_id_data = of_id->data; 406 + const struct imx_gpc_dt_data *of_id_data = device_get_match_data(&pdev->dev); 410 407 struct device_node *pgc_node; 411 408 struct regmap *regmap; 412 409 void __iomem *base; ··· 497 498 498 499 pd_pdev->dev.parent = &pdev->dev; 499 500 pd_pdev->dev.of_node = np; 501 + pd_pdev->dev.fwnode = of_fwnode_handle(np); 500 502 501 503 ret = platform_device_add(pd_pdev); 502 504 if (ret) {
+29
drivers/pmdomain/mediatek/Kconfig
··· 1 + # SPDX-License-Identifier: GPL-2.0-only 2 + 3 + menu "MediaTek PM Domains" 4 + depends on ARCH_MEDIATEK || COMPILE_TEST 5 + 6 + config MTK_SCPSYS 7 + bool "MediaTek SCPSYS Support" 8 + default ARCH_MEDIATEK 9 + depends on OF 10 + select REGMAP 11 + select MTK_INFRACFG 12 + select PM_GENERIC_DOMAINS if PM 13 + help 14 + Say yes here to add support for the MediaTek SCPSYS power domain 15 + driver. 16 + 17 + config MTK_SCPSYS_PM_DOMAINS 18 + bool "MediaTek SCPSYS generic power domain" 19 + default ARCH_MEDIATEK 20 + depends on PM 21 + select PM_GENERIC_DOMAINS 22 + select REGMAP 23 + help 24 + Say y here to enable power domain support. 25 + In order to meet high performance and low power requirements, the System 26 + Control Processor System (SCPSYS) has several power management related 27 + tasks in the system. 28 + 29 + endmenu
+8 -8
drivers/pmdomain/mediatek/mt6795-pm-domains.h
··· 46 46 .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND, 47 47 .sram_pdn_bits = GENMASK(11, 8), 48 48 .sram_pdn_ack_bits = GENMASK(12, 12), 49 - .bp_infracfg = { 50 - BUS_PROT_UPDATE_TOPAXI(MT8173_TOP_AXI_PROT_EN_MM_M0 | 51 - MT8173_TOP_AXI_PROT_EN_MM_M1), 49 + .bp_cfg = { 50 + BUS_PROT_INFRA_UPDATE_TOPAXI(MT8173_TOP_AXI_PROT_EN_MM_M0 | 51 + MT8173_TOP_AXI_PROT_EN_MM_M1), 52 52 }, 53 53 }, 54 54 [MT6795_POWER_DOMAIN_MJC] = { ··· 95 95 .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND, 96 96 .sram_pdn_bits = GENMASK(13, 8), 97 97 .sram_pdn_ack_bits = GENMASK(21, 16), 98 - .bp_infracfg = { 99 - BUS_PROT_UPDATE_TOPAXI(MT8173_TOP_AXI_PROT_EN_MFG_S | 100 - MT8173_TOP_AXI_PROT_EN_MFG_M0 | 101 - MT8173_TOP_AXI_PROT_EN_MFG_M1 | 102 - MT8173_TOP_AXI_PROT_EN_MFG_SNOOP_OUT), 98 + .bp_cfg = { 99 + BUS_PROT_INFRA_UPDATE_TOPAXI(MT8173_TOP_AXI_PROT_EN_MFG_S | 100 + MT8173_TOP_AXI_PROT_EN_MFG_M0 | 101 + MT8173_TOP_AXI_PROT_EN_MFG_M1 | 102 + MT8173_TOP_AXI_PROT_EN_MFG_SNOOP_OUT), 103 103 }, 104 104 }, 105 105 };
+10 -10
drivers/pmdomain/mediatek/mt8167-pm-domains.h
··· 22 22 .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND, 23 23 .sram_pdn_bits = GENMASK(11, 8), 24 24 .sram_pdn_ack_bits = GENMASK(12, 12), 25 - .bp_infracfg = { 26 - BUS_PROT_UPDATE_TOPAXI(MT8167_TOP_AXI_PROT_EN_MM_EMI | 27 - MT8167_TOP_AXI_PROT_EN_MCU_MM), 25 + .bp_cfg = { 26 + BUS_PROT_INFRA_UPDATE_TOPAXI(MT8167_TOP_AXI_PROT_EN_MM_EMI | 27 + MT8167_TOP_AXI_PROT_EN_MCU_MM), 28 28 }, 29 29 .caps = MTK_SCPD_ACTIVE_WAKEUP, 30 30 }, ··· 56 56 .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND, 57 57 .sram_pdn_bits = 0, 58 58 .sram_pdn_ack_bits = 0, 59 - .bp_infracfg = { 60 - BUS_PROT_UPDATE_TOPAXI(MT8167_TOP_AXI_PROT_EN_MCU_MFG | 61 - MT8167_TOP_AXI_PROT_EN_MFG_EMI), 59 + .bp_cfg = { 60 + BUS_PROT_INFRA_UPDATE_TOPAXI(MT8167_TOP_AXI_PROT_EN_MCU_MFG | 61 + MT8167_TOP_AXI_PROT_EN_MFG_EMI), 62 62 }, 63 63 }, 64 64 [MT8167_POWER_DOMAIN_MFG_2D] = { ··· 88 88 .sram_pdn_bits = GENMASK(8, 8), 89 89 .sram_pdn_ack_bits = 0, 90 90 .caps = MTK_SCPD_ACTIVE_WAKEUP, 91 - .bp_infracfg = { 92 - BUS_PROT_UPDATE_TOPAXI(MT8167_TOP_AXI_PROT_EN_CONN_EMI | 93 - MT8167_TOP_AXI_PROT_EN_CONN_MCU | 94 - MT8167_TOP_AXI_PROT_EN_MCU_CONN), 91 + .bp_cfg = { 92 + BUS_PROT_INFRA_UPDATE_TOPAXI(MT8167_TOP_AXI_PROT_EN_CONN_EMI | 93 + MT8167_TOP_AXI_PROT_EN_CONN_MCU | 94 + MT8167_TOP_AXI_PROT_EN_MCU_CONN), 95 95 }, 96 96 }, 97 97 };
+8 -8
drivers/pmdomain/mediatek/mt8173-pm-domains.h
··· 46 46 .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND, 47 47 .sram_pdn_bits = GENMASK(11, 8), 48 48 .sram_pdn_ack_bits = GENMASK(12, 12), 49 - .bp_infracfg = { 50 - BUS_PROT_UPDATE_TOPAXI(MT8173_TOP_AXI_PROT_EN_MM_M0 | 51 - MT8173_TOP_AXI_PROT_EN_MM_M1), 49 + .bp_cfg = { 50 + BUS_PROT_INFRA_UPDATE_TOPAXI(MT8173_TOP_AXI_PROT_EN_MM_M0 | 51 + MT8173_TOP_AXI_PROT_EN_MM_M1), 52 52 }, 53 53 }, 54 54 [MT8173_POWER_DOMAIN_VENC_LT] = { ··· 106 106 .pwr_sta2nd_offs = SPM_PWR_STATUS_2ND, 107 107 .sram_pdn_bits = GENMASK(13, 8), 108 108 .sram_pdn_ack_bits = GENMASK(21, 16), 109 - .bp_infracfg = { 110 - BUS_PROT_UPDATE_TOPAXI(MT8173_TOP_AXI_PROT_EN_MFG_S | 111 - MT8173_TOP_AXI_PROT_EN_MFG_M0 | 112 - MT8173_TOP_AXI_PROT_EN_MFG_M1 | 113 - MT8173_TOP_AXI_PROT_EN_MFG_SNOOP_OUT), 109 + .bp_cfg = { 110 + BUS_PROT_INFRA_UPDATE_TOPAXI(MT8173_TOP_AXI_PROT_EN_MFG_S | 111 + MT8173_TOP_AXI_PROT_EN_MFG_M0 | 112 + MT8173_TOP_AXI_PROT_EN_MFG_M1 | 113 + MT8173_TOP_AXI_PROT_EN_MFG_SNOOP_OUT), 114 114 }, 115 115 }, 116 116 };
+77 -48
drivers/pmdomain/mediatek/mt8183-pm-domains.h
··· 28 28 .pwr_sta2nd_offs = 0x0184, 29 29 .sram_pdn_bits = 0, 30 30 .sram_pdn_ack_bits = 0, 31 - .bp_infracfg = { 32 - BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_CONN, MT8183_TOP_AXI_PROT_EN_SET, 33 - MT8183_TOP_AXI_PROT_EN_CLR, MT8183_TOP_AXI_PROT_EN_STA1), 31 + .bp_cfg = { 32 + BUS_PROT_WR(INFRA, 33 + MT8183_TOP_AXI_PROT_EN_CONN, 34 + MT8183_TOP_AXI_PROT_EN_SET, 35 + MT8183_TOP_AXI_PROT_EN_CLR, 36 + MT8183_TOP_AXI_PROT_EN_STA1), 34 37 }, 35 38 }, 36 39 [MT8183_POWER_DOMAIN_MFG_ASYNC] = { ··· 82 79 .pwr_sta2nd_offs = 0x0184, 83 80 .sram_pdn_bits = GENMASK(8, 8), 84 81 .sram_pdn_ack_bits = GENMASK(12, 12), 85 - .bp_infracfg = { 86 - BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_1_MFG, MT8183_TOP_AXI_PROT_EN_1_SET, 87 - MT8183_TOP_AXI_PROT_EN_1_CLR, MT8183_TOP_AXI_PROT_EN_STA1_1), 88 - BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_MFG, MT8183_TOP_AXI_PROT_EN_SET, 89 - MT8183_TOP_AXI_PROT_EN_CLR, MT8183_TOP_AXI_PROT_EN_STA1), 82 + .bp_cfg = { 83 + BUS_PROT_WR(INFRA, 84 + MT8183_TOP_AXI_PROT_EN_1_MFG, 85 + MT8183_TOP_AXI_PROT_EN_1_SET, 86 + MT8183_TOP_AXI_PROT_EN_1_CLR, 87 + MT8183_TOP_AXI_PROT_EN_STA1_1), 88 + BUS_PROT_WR(INFRA, 89 + MT8183_TOP_AXI_PROT_EN_MFG, 90 + MT8183_TOP_AXI_PROT_EN_SET, 91 + MT8183_TOP_AXI_PROT_EN_CLR, 92 + MT8183_TOP_AXI_PROT_EN_STA1), 90 93 }, 91 94 }, 92 95 [MT8183_POWER_DOMAIN_DISP] = { ··· 103 94 .pwr_sta2nd_offs = 0x0184, 104 95 .sram_pdn_bits = GENMASK(8, 8), 105 96 .sram_pdn_ack_bits = GENMASK(12, 12), 106 - .bp_infracfg = { 107 - BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_1_DISP, MT8183_TOP_AXI_PROT_EN_1_SET, 108 - MT8183_TOP_AXI_PROT_EN_1_CLR, MT8183_TOP_AXI_PROT_EN_STA1_1), 109 - BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_DISP, MT8183_TOP_AXI_PROT_EN_SET, 110 - MT8183_TOP_AXI_PROT_EN_CLR, MT8183_TOP_AXI_PROT_EN_STA1), 111 - }, 112 - .bp_smi = { 113 - BUS_PROT_WR(MT8183_SMI_COMMON_SMI_CLAMP_DISP, 97 + .bp_cfg = { 98 + BUS_PROT_WR(INFRA, 99 + MT8183_TOP_AXI_PROT_EN_1_DISP, 100 + MT8183_TOP_AXI_PROT_EN_1_SET, 101 + MT8183_TOP_AXI_PROT_EN_1_CLR, 102 + MT8183_TOP_AXI_PROT_EN_STA1_1), 103 + BUS_PROT_WR(INFRA, 104 + MT8183_TOP_AXI_PROT_EN_DISP, 105 + MT8183_TOP_AXI_PROT_EN_SET, 106 + MT8183_TOP_AXI_PROT_EN_CLR, 107 + MT8183_TOP_AXI_PROT_EN_STA1), 108 + BUS_PROT_WR(SMI, 109 + MT8183_SMI_COMMON_SMI_CLAMP_DISP, 114 110 MT8183_SMI_COMMON_CLAMP_EN_SET, 115 111 MT8183_SMI_COMMON_CLAMP_EN_CLR, 116 112 MT8183_SMI_COMMON_CLAMP_EN), ··· 129 115 .pwr_sta2nd_offs = 0x0184, 130 116 .sram_pdn_bits = GENMASK(9, 8), 131 117 .sram_pdn_ack_bits = GENMASK(13, 12), 132 - .bp_infracfg = { 133 - BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_MM_CAM, MT8183_TOP_AXI_PROT_EN_MM_SET, 134 - MT8183_TOP_AXI_PROT_EN_MM_CLR, MT8183_TOP_AXI_PROT_EN_MM_STA1), 135 - BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_CAM, MT8183_TOP_AXI_PROT_EN_SET, 136 - MT8183_TOP_AXI_PROT_EN_CLR, MT8183_TOP_AXI_PROT_EN_STA1), 137 - BUS_PROT_WR_IGN(MT8183_TOP_AXI_PROT_EN_MM_CAM_2ND, 118 + .bp_cfg = { 119 + BUS_PROT_WR(INFRA, 120 + MT8183_TOP_AXI_PROT_EN_MM_CAM, 121 + MT8183_TOP_AXI_PROT_EN_MM_SET, 122 + MT8183_TOP_AXI_PROT_EN_MM_CLR, 123 + MT8183_TOP_AXI_PROT_EN_MM_STA1), 124 + BUS_PROT_WR(INFRA, 125 + MT8183_TOP_AXI_PROT_EN_CAM, 126 + MT8183_TOP_AXI_PROT_EN_SET, 127 + MT8183_TOP_AXI_PROT_EN_CLR, 128 + MT8183_TOP_AXI_PROT_EN_STA1), 129 + BUS_PROT_WR_IGN(INFRA, 130 + MT8183_TOP_AXI_PROT_EN_MM_CAM_2ND, 138 131 MT8183_TOP_AXI_PROT_EN_MM_SET, 139 132 MT8183_TOP_AXI_PROT_EN_MM_CLR, 140 133 MT8183_TOP_AXI_PROT_EN_MM_STA1), 141 - }, 142 - .bp_smi = { 143 - BUS_PROT_WR(MT8183_SMI_COMMON_SMI_CLAMP_CAM, 134 + BUS_PROT_WR(SMI, 135 + MT8183_SMI_COMMON_SMI_CLAMP_CAM, 144 136 MT8183_SMI_COMMON_CLAMP_EN_SET, 145 137 MT8183_SMI_COMMON_CLAMP_EN_CLR, 146 138 MT8183_SMI_COMMON_CLAMP_EN), ··· 160 140 .pwr_sta2nd_offs = 0x0184, 161 141 .sram_pdn_bits = GENMASK(9, 8), 162 142 .sram_pdn_ack_bits = GENMASK(13, 12), 163 - .bp_infracfg = { 164 - BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_MM_ISP, 143 + .bp_cfg = { 144 + BUS_PROT_WR(INFRA, 145 + MT8183_TOP_AXI_PROT_EN_MM_ISP, 165 146 MT8183_TOP_AXI_PROT_EN_MM_SET, 166 147 MT8183_TOP_AXI_PROT_EN_MM_CLR, 167 148 MT8183_TOP_AXI_PROT_EN_MM_STA1), 168 - BUS_PROT_WR_IGN(MT8183_TOP_AXI_PROT_EN_MM_ISP_2ND, 149 + BUS_PROT_WR_IGN(INFRA, 150 + MT8183_TOP_AXI_PROT_EN_MM_ISP_2ND, 169 151 MT8183_TOP_AXI_PROT_EN_MM_SET, 170 152 MT8183_TOP_AXI_PROT_EN_MM_CLR, 171 153 MT8183_TOP_AXI_PROT_EN_MM_STA1), 172 - }, 173 - .bp_smi = { 174 - BUS_PROT_WR(MT8183_SMI_COMMON_SMI_CLAMP_ISP, 154 + BUS_PROT_WR(SMI, 155 + MT8183_SMI_COMMON_SMI_CLAMP_ISP, 175 156 MT8183_SMI_COMMON_CLAMP_EN_SET, 176 157 MT8183_SMI_COMMON_CLAMP_EN_CLR, 177 158 MT8183_SMI_COMMON_CLAMP_EN), ··· 186 165 .pwr_sta2nd_offs = 0x0184, 187 166 .sram_pdn_bits = GENMASK(8, 8), 188 167 .sram_pdn_ack_bits = GENMASK(12, 12), 189 - .bp_smi = { 190 - BUS_PROT_WR(MT8183_SMI_COMMON_SMI_CLAMP_VDEC, 168 + .bp_cfg = { 169 + BUS_PROT_WR(SMI, 170 + MT8183_SMI_COMMON_SMI_CLAMP_VDEC, 191 171 MT8183_SMI_COMMON_CLAMP_EN_SET, 192 172 MT8183_SMI_COMMON_CLAMP_EN_CLR, 193 173 MT8183_SMI_COMMON_CLAMP_EN), ··· 202 180 .pwr_sta2nd_offs = 0x0184, 203 181 .sram_pdn_bits = GENMASK(11, 8), 204 182 .sram_pdn_ack_bits = GENMASK(15, 12), 205 - .bp_smi = { 206 - BUS_PROT_WR(MT8183_SMI_COMMON_SMI_CLAMP_VENC, 183 + .bp_cfg = { 184 + BUS_PROT_WR(SMI, 185 + MT8183_SMI_COMMON_SMI_CLAMP_VENC, 207 186 MT8183_SMI_COMMON_CLAMP_EN_SET, 208 187 MT8183_SMI_COMMON_CLAMP_EN_CLR, 209 188 MT8183_SMI_COMMON_CLAMP_EN), ··· 218 195 .pwr_sta2nd_offs = 0x0184, 219 196 .sram_pdn_bits = GENMASK(8, 8), 220 197 .sram_pdn_ack_bits = GENMASK(12, 12), 221 - .bp_infracfg = { 222 - BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_MM_VPU_TOP, 198 + .bp_cfg = { 199 + BUS_PROT_WR(INFRA, 200 + MT8183_TOP_AXI_PROT_EN_MM_VPU_TOP, 223 201 MT8183_TOP_AXI_PROT_EN_MM_SET, 224 202 MT8183_TOP_AXI_PROT_EN_MM_CLR, 225 203 MT8183_TOP_AXI_PROT_EN_MM_STA1), 226 - BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_VPU_TOP, 204 + BUS_PROT_WR(INFRA, 205 + MT8183_TOP_AXI_PROT_EN_VPU_TOP, 227 206 MT8183_TOP_AXI_PROT_EN_SET, 228 207 MT8183_TOP_AXI_PROT_EN_CLR, 229 208 MT8183_TOP_AXI_PROT_EN_STA1), 230 - BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_MM_VPU_TOP_2ND, 209 + BUS_PROT_WR(INFRA, 210 + MT8183_TOP_AXI_PROT_EN_MM_VPU_TOP_2ND, 231 211 MT8183_TOP_AXI_PROT_EN_MM_SET, 232 212 MT8183_TOP_AXI_PROT_EN_MM_CLR, 233 213 MT8183_TOP_AXI_PROT_EN_MM_STA1), 234 - }, 235 - .bp_smi = { 236 - BUS_PROT_WR(MT8183_SMI_COMMON_SMI_CLAMP_VPU_TOP, 214 + BUS_PROT_WR(SMI, 215 + MT8183_SMI_COMMON_SMI_CLAMP_VPU_TOP, 237 216 MT8183_SMI_COMMON_CLAMP_EN_SET, 238 217 MT8183_SMI_COMMON_CLAMP_EN_CLR, 239 218 MT8183_SMI_COMMON_CLAMP_EN), ··· 249 224 .pwr_sta2nd_offs = 0x0184, 250 225 .sram_pdn_bits = GENMASK(11, 8), 251 226 .sram_pdn_ack_bits = GENMASK(13, 12), 252 - .bp_infracfg = { 253 - BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_MCU_VPU_CORE0, 227 + .bp_cfg = { 228 + BUS_PROT_WR(INFRA, 229 + MT8183_TOP_AXI_PROT_EN_MCU_VPU_CORE0, 254 230 MT8183_TOP_AXI_PROT_EN_MCU_SET, 255 231 MT8183_TOP_AXI_PROT_EN_MCU_CLR, 256 232 MT8183_TOP_AXI_PROT_EN_MCU_STA1), 257 - BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_MCU_VPU_CORE0_2ND, 233 + BUS_PROT_WR(INFRA, 234 + MT8183_TOP_AXI_PROT_EN_MCU_VPU_CORE0_2ND, 258 235 MT8183_TOP_AXI_PROT_EN_MCU_SET, 259 236 MT8183_TOP_AXI_PROT_EN_MCU_CLR, 260 237 MT8183_TOP_AXI_PROT_EN_MCU_STA1), ··· 271 244 .pwr_sta2nd_offs = 0x0184, 272 245 .sram_pdn_bits = GENMASK(11, 8), 273 246 .sram_pdn_ack_bits = GENMASK(13, 12), 274 - .bp_infracfg = { 275 - BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_MCU_VPU_CORE1, 247 + .bp_cfg = { 248 + BUS_PROT_WR(INFRA, 249 + MT8183_TOP_AXI_PROT_EN_MCU_VPU_CORE1, 276 250 MT8183_TOP_AXI_PROT_EN_MCU_SET, 277 251 MT8183_TOP_AXI_PROT_EN_MCU_CLR, 278 252 MT8183_TOP_AXI_PROT_EN_MCU_STA1), 279 - BUS_PROT_WR(MT8183_TOP_AXI_PROT_EN_MCU_VPU_CORE1_2ND, 253 + BUS_PROT_WR(INFRA, 254 + MT8183_TOP_AXI_PROT_EN_MCU_VPU_CORE1_2ND, 280 255 MT8183_TOP_AXI_PROT_EN_MCU_SET, 281 256 MT8183_TOP_AXI_PROT_EN_MCU_CLR, 282 257 MT8183_TOP_AXI_PROT_EN_MCU_STA1),
+130 -106
drivers/pmdomain/mediatek/mt8186-pm-domains.h
··· 33 33 .pwr_sta2nd_offs = 0x170, 34 34 .sram_pdn_bits = BIT(8), 35 35 .sram_pdn_ack_bits = BIT(12), 36 - .bp_infracfg = { 37 - BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_MFG1_STEP1, 38 - MT8186_TOP_AXI_PROT_EN_1_SET, 39 - MT8186_TOP_AXI_PROT_EN_1_CLR, 40 - MT8186_TOP_AXI_PROT_EN_1_STA), 41 - BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_MFG1_STEP2, 42 - MT8186_TOP_AXI_PROT_EN_SET, 43 - MT8186_TOP_AXI_PROT_EN_CLR, 44 - MT8186_TOP_AXI_PROT_EN_STA), 45 - BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_MFG1_STEP3, 46 - MT8186_TOP_AXI_PROT_EN_SET, 47 - MT8186_TOP_AXI_PROT_EN_CLR, 48 - MT8186_TOP_AXI_PROT_EN_STA), 49 - BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_MFG1_STEP4, 50 - MT8186_TOP_AXI_PROT_EN_1_SET, 51 - MT8186_TOP_AXI_PROT_EN_1_CLR, 52 - MT8186_TOP_AXI_PROT_EN_1_STA), 36 + .bp_cfg = { 37 + BUS_PROT_WR_IGN(INFRA, 38 + MT8186_TOP_AXI_PROT_EN_1_MFG1_STEP1, 39 + MT8186_TOP_AXI_PROT_EN_1_SET, 40 + MT8186_TOP_AXI_PROT_EN_1_CLR, 41 + MT8186_TOP_AXI_PROT_EN_1_STA), 42 + BUS_PROT_WR_IGN(INFRA, 43 + MT8186_TOP_AXI_PROT_EN_MFG1_STEP2, 44 + MT8186_TOP_AXI_PROT_EN_SET, 45 + MT8186_TOP_AXI_PROT_EN_CLR, 46 + MT8186_TOP_AXI_PROT_EN_STA), 47 + BUS_PROT_WR_IGN(INFRA, 48 + MT8186_TOP_AXI_PROT_EN_MFG1_STEP3, 49 + MT8186_TOP_AXI_PROT_EN_SET, 50 + MT8186_TOP_AXI_PROT_EN_CLR, 51 + MT8186_TOP_AXI_PROT_EN_STA), 52 + BUS_PROT_WR_IGN(INFRA, 53 + MT8186_TOP_AXI_PROT_EN_1_MFG1_STEP4, 54 + MT8186_TOP_AXI_PROT_EN_1_SET, 55 + MT8186_TOP_AXI_PROT_EN_1_CLR, 56 + MT8186_TOP_AXI_PROT_EN_1_STA), 53 57 }, 54 58 .caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_DOMAIN_SUPPLY, 55 59 }, ··· 105 101 .pwr_sta2nd_offs = 0x170, 106 102 .sram_pdn_bits = BIT(8), 107 103 .sram_pdn_ack_bits = BIT(12), 108 - .bp_infracfg = { 109 - BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_DIS_STEP1, 110 - MT8186_TOP_AXI_PROT_EN_1_SET, 111 - MT8186_TOP_AXI_PROT_EN_1_CLR, 112 - MT8186_TOP_AXI_PROT_EN_1_STA), 113 - BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_DIS_STEP2, 114 - MT8186_TOP_AXI_PROT_EN_SET, 115 - MT8186_TOP_AXI_PROT_EN_CLR, 116 - MT8186_TOP_AXI_PROT_EN_STA), 104 + .bp_cfg = { 105 + BUS_PROT_WR_IGN(INFRA, 106 + MT8186_TOP_AXI_PROT_EN_1_DIS_STEP1, 107 + MT8186_TOP_AXI_PROT_EN_1_SET, 108 + MT8186_TOP_AXI_PROT_EN_1_CLR, 109 + MT8186_TOP_AXI_PROT_EN_1_STA), 110 + BUS_PROT_WR_IGN(INFRA, 111 + MT8186_TOP_AXI_PROT_EN_DIS_STEP2, 112 + MT8186_TOP_AXI_PROT_EN_SET, 113 + MT8186_TOP_AXI_PROT_EN_CLR, 114 + MT8186_TOP_AXI_PROT_EN_STA), 117 115 }, 118 116 }, 119 117 [MT8186_POWER_DOMAIN_IMG] = { ··· 126 120 .pwr_sta2nd_offs = 0x170, 127 121 .sram_pdn_bits = BIT(8), 128 122 .sram_pdn_ack_bits = BIT(12), 129 - .bp_infracfg = { 130 - BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_IMG_STEP1, 131 - MT8186_TOP_AXI_PROT_EN_1_SET, 132 - MT8186_TOP_AXI_PROT_EN_1_CLR, 133 - MT8186_TOP_AXI_PROT_EN_1_STA), 134 - BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_IMG_STEP2, 135 - MT8186_TOP_AXI_PROT_EN_1_SET, 136 - MT8186_TOP_AXI_PROT_EN_1_CLR, 137 - MT8186_TOP_AXI_PROT_EN_1_STA), 123 + .bp_cfg = { 124 + BUS_PROT_WR_IGN(INFRA, 125 + MT8186_TOP_AXI_PROT_EN_1_IMG_STEP1, 126 + MT8186_TOP_AXI_PROT_EN_1_SET, 127 + MT8186_TOP_AXI_PROT_EN_1_CLR, 128 + MT8186_TOP_AXI_PROT_EN_1_STA), 129 + BUS_PROT_WR_IGN(INFRA, 130 + MT8186_TOP_AXI_PROT_EN_1_IMG_STEP2, 131 + MT8186_TOP_AXI_PROT_EN_1_SET, 132 + MT8186_TOP_AXI_PROT_EN_1_CLR, 133 + MT8186_TOP_AXI_PROT_EN_1_STA), 138 134 }, 139 135 .caps = MTK_SCPD_KEEP_DEFAULT_OFF, 140 136 }, ··· 158 150 .pwr_sta2nd_offs = 0x170, 159 151 .sram_pdn_bits = BIT(8), 160 152 .sram_pdn_ack_bits = BIT(12), 161 - .bp_infracfg = { 162 - BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_IPE_STEP1, 163 - MT8186_TOP_AXI_PROT_EN_1_SET, 164 - MT8186_TOP_AXI_PROT_EN_1_CLR, 165 - MT8186_TOP_AXI_PROT_EN_1_STA), 166 - BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_IPE_STEP2, 167 - MT8186_TOP_AXI_PROT_EN_1_SET, 168 - MT8186_TOP_AXI_PROT_EN_1_CLR, 169 - MT8186_TOP_AXI_PROT_EN_1_STA), 153 + .bp_cfg = { 154 + BUS_PROT_WR_IGN(INFRA, 155 + MT8186_TOP_AXI_PROT_EN_1_IPE_STEP1, 156 + MT8186_TOP_AXI_PROT_EN_1_SET, 157 + MT8186_TOP_AXI_PROT_EN_1_CLR, 158 + MT8186_TOP_AXI_PROT_EN_1_STA), 159 + BUS_PROT_WR_IGN(INFRA, 160 + MT8186_TOP_AXI_PROT_EN_1_IPE_STEP2, 161 + MT8186_TOP_AXI_PROT_EN_1_SET, 162 + MT8186_TOP_AXI_PROT_EN_1_CLR, 163 + MT8186_TOP_AXI_PROT_EN_1_STA), 170 164 }, 171 165 .caps = MTK_SCPD_KEEP_DEFAULT_OFF, 172 166 }, ··· 180 170 .pwr_sta2nd_offs = 0x170, 181 171 .sram_pdn_bits = BIT(8), 182 172 .sram_pdn_ack_bits = BIT(12), 183 - .bp_infracfg = { 184 - BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_CAM_STEP1, 185 - MT8186_TOP_AXI_PROT_EN_1_SET, 186 - MT8186_TOP_AXI_PROT_EN_1_CLR, 187 - MT8186_TOP_AXI_PROT_EN_1_STA), 188 - BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_CAM_STEP2, 189 - MT8186_TOP_AXI_PROT_EN_1_SET, 190 - MT8186_TOP_AXI_PROT_EN_1_CLR, 191 - MT8186_TOP_AXI_PROT_EN_1_STA), 173 + .bp_cfg = { 174 + BUS_PROT_WR_IGN(INFRA, 175 + MT8186_TOP_AXI_PROT_EN_1_CAM_STEP1, 176 + MT8186_TOP_AXI_PROT_EN_1_SET, 177 + MT8186_TOP_AXI_PROT_EN_1_CLR, 178 + MT8186_TOP_AXI_PROT_EN_1_STA), 179 + BUS_PROT_WR_IGN(INFRA, 180 + MT8186_TOP_AXI_PROT_EN_1_CAM_STEP2, 181 + MT8186_TOP_AXI_PROT_EN_1_SET, 182 + MT8186_TOP_AXI_PROT_EN_1_CLR, 183 + MT8186_TOP_AXI_PROT_EN_1_STA), 192 184 }, 193 185 .caps = MTK_SCPD_KEEP_DEFAULT_OFF, 194 186 }, ··· 222 210 .pwr_sta2nd_offs = 0x170, 223 211 .sram_pdn_bits = BIT(8), 224 212 .sram_pdn_ack_bits = BIT(12), 225 - .bp_infracfg = { 226 - BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_VENC_STEP1, 227 - MT8186_TOP_AXI_PROT_EN_1_SET, 228 - MT8186_TOP_AXI_PROT_EN_1_CLR, 229 - MT8186_TOP_AXI_PROT_EN_1_STA), 230 - BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_VENC_STEP2, 231 - MT8186_TOP_AXI_PROT_EN_1_SET, 232 - MT8186_TOP_AXI_PROT_EN_1_CLR, 233 - MT8186_TOP_AXI_PROT_EN_1_STA), 213 + .bp_cfg = { 214 + BUS_PROT_WR_IGN(INFRA, 215 + MT8186_TOP_AXI_PROT_EN_1_VENC_STEP1, 216 + MT8186_TOP_AXI_PROT_EN_1_SET, 217 + MT8186_TOP_AXI_PROT_EN_1_CLR, 218 + MT8186_TOP_AXI_PROT_EN_1_STA), 219 + BUS_PROT_WR_IGN(INFRA, 220 + MT8186_TOP_AXI_PROT_EN_1_VENC_STEP2, 221 + MT8186_TOP_AXI_PROT_EN_1_SET, 222 + MT8186_TOP_AXI_PROT_EN_1_CLR, 223 + MT8186_TOP_AXI_PROT_EN_1_STA), 234 224 }, 235 225 .caps = MTK_SCPD_KEEP_DEFAULT_OFF, 236 226 }, ··· 244 230 .pwr_sta2nd_offs = 0x170, 245 231 .sram_pdn_bits = BIT(8), 246 232 .sram_pdn_ack_bits = BIT(12), 247 - .bp_infracfg = { 248 - BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_VDEC_STEP1, 249 - MT8186_TOP_AXI_PROT_EN_1_SET, 250 - MT8186_TOP_AXI_PROT_EN_1_CLR, 251 - MT8186_TOP_AXI_PROT_EN_1_STA), 252 - BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_VDEC_STEP2, 253 - MT8186_TOP_AXI_PROT_EN_1_SET, 254 - MT8186_TOP_AXI_PROT_EN_1_CLR, 255 - MT8186_TOP_AXI_PROT_EN_1_STA), 233 + .bp_cfg = { 234 + BUS_PROT_WR_IGN(INFRA, 235 + MT8186_TOP_AXI_PROT_EN_1_VDEC_STEP1, 236 + MT8186_TOP_AXI_PROT_EN_1_SET, 237 + MT8186_TOP_AXI_PROT_EN_1_CLR, 238 + MT8186_TOP_AXI_PROT_EN_1_STA), 239 + BUS_PROT_WR_IGN(INFRA, 240 + MT8186_TOP_AXI_PROT_EN_1_VDEC_STEP2, 241 + MT8186_TOP_AXI_PROT_EN_1_SET, 242 + MT8186_TOP_AXI_PROT_EN_1_CLR, 243 + MT8186_TOP_AXI_PROT_EN_1_STA), 256 244 }, 257 245 .caps = MTK_SCPD_KEEP_DEFAULT_OFF, 258 246 }, ··· 266 250 .pwr_sta2nd_offs = 0x170, 267 251 .sram_pdn_bits = BIT(8), 268 252 .sram_pdn_ack_bits = BIT(12), 269 - .bp_infracfg = { 270 - BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_2_WPE_STEP1, 271 - MT8186_TOP_AXI_PROT_EN_2_SET, 272 - MT8186_TOP_AXI_PROT_EN_2_CLR, 273 - MT8186_TOP_AXI_PROT_EN_2_STA), 274 - BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_2_WPE_STEP2, 275 - MT8186_TOP_AXI_PROT_EN_2_SET, 276 - MT8186_TOP_AXI_PROT_EN_2_CLR, 277 - MT8186_TOP_AXI_PROT_EN_2_STA), 253 + .bp_cfg = { 254 + BUS_PROT_WR_IGN(INFRA, 255 + MT8186_TOP_AXI_PROT_EN_2_WPE_STEP1, 256 + MT8186_TOP_AXI_PROT_EN_2_SET, 257 + MT8186_TOP_AXI_PROT_EN_2_CLR, 258 + MT8186_TOP_AXI_PROT_EN_2_STA), 259 + BUS_PROT_WR_IGN(INFRA, 260 + MT8186_TOP_AXI_PROT_EN_2_WPE_STEP2, 261 + MT8186_TOP_AXI_PROT_EN_2_SET, 262 + MT8186_TOP_AXI_PROT_EN_2_CLR, 263 + MT8186_TOP_AXI_PROT_EN_2_STA), 278 264 }, 279 265 .caps = MTK_SCPD_KEEP_DEFAULT_OFF, 280 266 }, ··· 286 268 .ctl_offs = 0x304, 287 269 .pwr_sta_offs = 0x16C, 288 270 .pwr_sta2nd_offs = 0x170, 289 - .bp_infracfg = { 290 - BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_1_CONN_ON_STEP1, 291 - MT8186_TOP_AXI_PROT_EN_1_SET, 292 - MT8186_TOP_AXI_PROT_EN_1_CLR, 293 - MT8186_TOP_AXI_PROT_EN_1_STA), 294 - BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_CONN_ON_STEP2, 295 - MT8186_TOP_AXI_PROT_EN_SET, 296 - MT8186_TOP_AXI_PROT_EN_CLR, 297 - MT8186_TOP_AXI_PROT_EN_STA), 298 - BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_CONN_ON_STEP3, 299 - MT8186_TOP_AXI_PROT_EN_SET, 300 - MT8186_TOP_AXI_PROT_EN_CLR, 301 - MT8186_TOP_AXI_PROT_EN_STA), 302 - BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_CONN_ON_STEP4, 303 - MT8186_TOP_AXI_PROT_EN_SET, 304 - MT8186_TOP_AXI_PROT_EN_CLR, 305 - MT8186_TOP_AXI_PROT_EN_STA), 271 + .bp_cfg = { 272 + BUS_PROT_WR_IGN(INFRA, 273 + MT8186_TOP_AXI_PROT_EN_1_CONN_ON_STEP1, 274 + MT8186_TOP_AXI_PROT_EN_1_SET, 275 + MT8186_TOP_AXI_PROT_EN_1_CLR, 276 + MT8186_TOP_AXI_PROT_EN_1_STA), 277 + BUS_PROT_WR_IGN(INFRA, 278 + MT8186_TOP_AXI_PROT_EN_CONN_ON_STEP2, 279 + MT8186_TOP_AXI_PROT_EN_SET, 280 + MT8186_TOP_AXI_PROT_EN_CLR, 281 + MT8186_TOP_AXI_PROT_EN_STA), 282 + BUS_PROT_WR_IGN(INFRA, 283 + MT8186_TOP_AXI_PROT_EN_CONN_ON_STEP3, 284 + MT8186_TOP_AXI_PROT_EN_SET, 285 + MT8186_TOP_AXI_PROT_EN_CLR, 286 + MT8186_TOP_AXI_PROT_EN_STA), 287 + BUS_PROT_WR_IGN(INFRA, 288 + MT8186_TOP_AXI_PROT_EN_CONN_ON_STEP4, 289 + MT8186_TOP_AXI_PROT_EN_SET, 290 + MT8186_TOP_AXI_PROT_EN_CLR, 291 + MT8186_TOP_AXI_PROT_EN_STA), 306 292 }, 307 293 .caps = MTK_SCPD_KEEP_DEFAULT_OFF | MTK_SCPD_ACTIVE_WAKEUP, 308 294 }, ··· 342 320 .pwr_sta2nd_offs = 0x170, 343 321 .sram_pdn_bits = BIT(8), 344 322 .sram_pdn_ack_bits = BIT(12), 345 - .bp_infracfg = { 346 - BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_3_ADSP_TOP_STEP1, 347 - MT8186_TOP_AXI_PROT_EN_3_SET, 348 - MT8186_TOP_AXI_PROT_EN_3_CLR, 349 - MT8186_TOP_AXI_PROT_EN_3_STA), 350 - BUS_PROT_WR_IGN(MT8186_TOP_AXI_PROT_EN_3_ADSP_TOP_STEP2, 351 - MT8186_TOP_AXI_PROT_EN_3_SET, 352 - MT8186_TOP_AXI_PROT_EN_3_CLR, 353 - MT8186_TOP_AXI_PROT_EN_3_STA), 323 + .bp_cfg = { 324 + BUS_PROT_WR_IGN(INFRA, 325 + MT8186_TOP_AXI_PROT_EN_3_ADSP_TOP_STEP1, 326 + MT8186_TOP_AXI_PROT_EN_3_SET, 327 + MT8186_TOP_AXI_PROT_EN_3_CLR, 328 + MT8186_TOP_AXI_PROT_EN_3_STA), 329 + BUS_PROT_WR_IGN(INFRA, 330 + MT8186_TOP_AXI_PROT_EN_3_ADSP_TOP_STEP2, 331 + MT8186_TOP_AXI_PROT_EN_3_SET, 332 + MT8186_TOP_AXI_PROT_EN_3_CLR, 333 + MT8186_TOP_AXI_PROT_EN_3_STA), 354 334 }, 355 335 .caps = MTK_SCPD_SRAM_ISO | MTK_SCPD_ACTIVE_WAKEUP, 356 336 },
+141 -82
drivers/pmdomain/mediatek/mt8188-pm-domains.h
··· 33 33 .pwr_sta2nd_offs = 0x178, 34 34 .sram_pdn_bits = BIT(8), 35 35 .sram_pdn_ack_bits = BIT(12), 36 - .bp_infracfg = { 37 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MFG1_STEP1, 36 + .bp_cfg = { 37 + BUS_PROT_WR(INFRA, 38 + MT8188_TOP_AXI_PROT_EN_MFG1_STEP1, 38 39 MT8188_TOP_AXI_PROT_EN_SET, 39 40 MT8188_TOP_AXI_PROT_EN_CLR, 40 41 MT8188_TOP_AXI_PROT_EN_STA), 41 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_MFG1_STEP2, 42 + BUS_PROT_WR(INFRA, 43 + MT8188_TOP_AXI_PROT_EN_2_MFG1_STEP2, 42 44 MT8188_TOP_AXI_PROT_EN_2_SET, 43 45 MT8188_TOP_AXI_PROT_EN_2_CLR, 44 46 MT8188_TOP_AXI_PROT_EN_2_STA), 45 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_1_MFG1_STEP3, 47 + BUS_PROT_WR(INFRA, 48 + MT8188_TOP_AXI_PROT_EN_1_MFG1_STEP3, 46 49 MT8188_TOP_AXI_PROT_EN_1_SET, 47 50 MT8188_TOP_AXI_PROT_EN_1_CLR, 48 51 MT8188_TOP_AXI_PROT_EN_1_STA), 49 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_MFG1_STEP4, 52 + BUS_PROT_WR(INFRA, 53 + MT8188_TOP_AXI_PROT_EN_2_MFG1_STEP4, 50 54 MT8188_TOP_AXI_PROT_EN_2_SET, 51 55 MT8188_TOP_AXI_PROT_EN_2_CLR, 52 56 MT8188_TOP_AXI_PROT_EN_2_STA), 53 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MFG1_STEP5, 57 + BUS_PROT_WR(INFRA, 58 + MT8188_TOP_AXI_PROT_EN_MFG1_STEP5, 54 59 MT8188_TOP_AXI_PROT_EN_SET, 55 60 MT8188_TOP_AXI_PROT_EN_CLR, 56 61 MT8188_TOP_AXI_PROT_EN_STA), 57 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_MFG1_STEP6, 62 + BUS_PROT_WR(INFRA, 63 + MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_MFG1_STEP6, 58 64 MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_SET, 59 65 MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_CLR, 60 66 MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_STA), ··· 105 99 .pwr_sta2nd_offs = 0x178, 106 100 .sram_pdn_bits = BIT(8), 107 101 .sram_pdn_ack_bits = BIT(12), 108 - .bp_infracfg = { 109 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_PEXTP_MAC_P0_STEP1, 102 + .bp_cfg = { 103 + BUS_PROT_WR(INFRA, 104 + MT8188_TOP_AXI_PROT_EN_PEXTP_MAC_P0_STEP1, 110 105 MT8188_TOP_AXI_PROT_EN_SET, 111 106 MT8188_TOP_AXI_PROT_EN_CLR, 112 107 MT8188_TOP_AXI_PROT_EN_STA), 113 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_PEXTP_MAC_P0_STEP2, 108 + BUS_PROT_WR(INFRA, 109 + MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_PEXTP_MAC_P0_STEP2, 114 110 MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_SET, 115 111 MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_CLR, 116 112 MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_STA), ··· 143 135 .pwr_sta2nd_offs = 0x170, 144 136 .sram_pdn_bits = BIT(8), 145 137 .sram_pdn_ack_bits = BIT(12), 146 - .bp_infracfg = { 147 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_ETHER_STEP1, 138 + .bp_cfg = { 139 + BUS_PROT_WR(INFRA, 140 + MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_ETHER_STEP1, 148 141 MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_SET, 149 142 MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_CLR, 150 143 MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_STA), ··· 160 151 .pwr_sta2nd_offs = 0x170, 161 152 .sram_pdn_bits = BIT(8), 162 153 .sram_pdn_ack_bits = BIT(12), 163 - .bp_infracfg = { 164 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_HDMI_TX_STEP1, 154 + .bp_cfg = { 155 + BUS_PROT_WR(INFRA, 156 + MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_HDMI_TX_STEP1, 165 157 MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_SET, 166 158 MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_CLR, 167 159 MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_STA), ··· 175 165 .ctl_offs = 0x35C, 176 166 .pwr_sta_offs = 0x16C, 177 167 .pwr_sta2nd_offs = 0x170, 178 - .bp_infracfg = { 179 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_ADSP_AO_STEP1, 168 + .bp_cfg = { 169 + BUS_PROT_WR(INFRA, 170 + MT8188_TOP_AXI_PROT_EN_2_ADSP_AO_STEP1, 180 171 MT8188_TOP_AXI_PROT_EN_2_SET, 181 172 MT8188_TOP_AXI_PROT_EN_2_CLR, 182 173 MT8188_TOP_AXI_PROT_EN_2_STA), 183 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_ADSP_AO_STEP2, 174 + BUS_PROT_WR(INFRA, 175 + MT8188_TOP_AXI_PROT_EN_2_ADSP_AO_STEP2, 184 176 MT8188_TOP_AXI_PROT_EN_2_SET, 185 177 MT8188_TOP_AXI_PROT_EN_2_CLR, 186 178 MT8188_TOP_AXI_PROT_EN_2_STA), ··· 197 185 .pwr_sta2nd_offs = 0x170, 198 186 .sram_pdn_bits = BIT(8), 199 187 .sram_pdn_ack_bits = BIT(12), 200 - .bp_infracfg = { 201 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_ADSP_INFRA_STEP1, 188 + .bp_cfg = { 189 + BUS_PROT_WR(INFRA, 190 + MT8188_TOP_AXI_PROT_EN_2_ADSP_INFRA_STEP1, 202 191 MT8188_TOP_AXI_PROT_EN_2_SET, 203 192 MT8188_TOP_AXI_PROT_EN_2_CLR, 204 193 MT8188_TOP_AXI_PROT_EN_2_STA), 205 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_ADSP_INFRA_STEP2, 194 + BUS_PROT_WR(INFRA, 195 + MT8188_TOP_AXI_PROT_EN_2_ADSP_INFRA_STEP2, 206 196 MT8188_TOP_AXI_PROT_EN_2_SET, 207 197 MT8188_TOP_AXI_PROT_EN_2_CLR, 208 198 MT8188_TOP_AXI_PROT_EN_2_STA), ··· 219 205 .pwr_sta2nd_offs = 0x170, 220 206 .sram_pdn_bits = BIT(8), 221 207 .sram_pdn_ack_bits = BIT(12), 222 - .bp_infracfg = { 223 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_ADSP_STEP1, 208 + .bp_cfg = { 209 + BUS_PROT_WR(INFRA, 210 + MT8188_TOP_AXI_PROT_EN_2_ADSP_STEP1, 224 211 MT8188_TOP_AXI_PROT_EN_2_SET, 225 212 MT8188_TOP_AXI_PROT_EN_2_CLR, 226 213 MT8188_TOP_AXI_PROT_EN_2_STA), 227 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_ADSP_STEP2, 214 + BUS_PROT_WR(INFRA, 215 + MT8188_TOP_AXI_PROT_EN_2_ADSP_STEP2, 228 216 MT8188_TOP_AXI_PROT_EN_2_SET, 229 217 MT8188_TOP_AXI_PROT_EN_2_CLR, 230 218 MT8188_TOP_AXI_PROT_EN_2_STA), ··· 241 225 .pwr_sta2nd_offs = 0x170, 242 226 .sram_pdn_bits = BIT(8), 243 227 .sram_pdn_ack_bits = BIT(12), 244 - .bp_infracfg = { 245 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_AUDIO_STEP1, 228 + .bp_cfg = { 229 + BUS_PROT_WR(INFRA, 230 + MT8188_TOP_AXI_PROT_EN_2_AUDIO_STEP1, 246 231 MT8188_TOP_AXI_PROT_EN_2_SET, 247 232 MT8188_TOP_AXI_PROT_EN_2_CLR, 248 233 MT8188_TOP_AXI_PROT_EN_2_STA), 249 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_AUDIO_STEP2, 234 + BUS_PROT_WR(INFRA, 235 + MT8188_TOP_AXI_PROT_EN_2_AUDIO_STEP2, 250 236 MT8188_TOP_AXI_PROT_EN_2_SET, 251 237 MT8188_TOP_AXI_PROT_EN_2_CLR, 252 238 MT8188_TOP_AXI_PROT_EN_2_STA), ··· 263 245 .pwr_sta2nd_offs = 0x170, 264 246 .sram_pdn_bits = BIT(8), 265 247 .sram_pdn_ack_bits = BIT(12), 266 - .bp_infracfg = { 267 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_AUDIO_ASRC_STEP1, 248 + .bp_cfg = { 249 + BUS_PROT_WR(INFRA, 250 + MT8188_TOP_AXI_PROT_EN_2_AUDIO_ASRC_STEP1, 268 251 MT8188_TOP_AXI_PROT_EN_2_SET, 269 252 MT8188_TOP_AXI_PROT_EN_2_CLR, 270 253 MT8188_TOP_AXI_PROT_EN_2_STA), 271 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_AUDIO_ASRC_STEP2, 254 + BUS_PROT_WR(INFRA, 255 + MT8188_TOP_AXI_PROT_EN_2_AUDIO_ASRC_STEP2, 272 256 MT8188_TOP_AXI_PROT_EN_2_SET, 273 257 MT8188_TOP_AXI_PROT_EN_2_CLR, 274 258 MT8188_TOP_AXI_PROT_EN_2_STA), ··· 285 265 .pwr_sta2nd_offs = 0x170, 286 266 .sram_pdn_bits = BIT(8), 287 267 .sram_pdn_ack_bits = BIT(12), 288 - .bp_infracfg = { 289 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_VPPSYS0_STEP1, 268 + .bp_cfg = { 269 + BUS_PROT_WR(INFRA, 270 + MT8188_TOP_AXI_PROT_EN_VPPSYS0_STEP1, 290 271 MT8188_TOP_AXI_PROT_EN_SET, 291 272 MT8188_TOP_AXI_PROT_EN_CLR, 292 273 MT8188_TOP_AXI_PROT_EN_STA), 293 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_VPPSYS0_STEP2, 274 + BUS_PROT_WR(INFRA, 275 + MT8188_TOP_AXI_PROT_EN_MM_2_VPPSYS0_STEP2, 294 276 MT8188_TOP_AXI_PROT_EN_MM_2_SET, 295 277 MT8188_TOP_AXI_PROT_EN_MM_2_CLR, 296 278 MT8188_TOP_AXI_PROT_EN_MM_2_STA), 297 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_VPPSYS0_STEP3, 279 + BUS_PROT_WR(INFRA, 280 + MT8188_TOP_AXI_PROT_EN_VPPSYS0_STEP3, 298 281 MT8188_TOP_AXI_PROT_EN_SET, 299 282 MT8188_TOP_AXI_PROT_EN_CLR, 300 283 MT8188_TOP_AXI_PROT_EN_STA), 301 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_VPPSYS0_STEP4, 284 + BUS_PROT_WR(INFRA, 285 + MT8188_TOP_AXI_PROT_EN_MM_2_VPPSYS0_STEP4, 302 286 MT8188_TOP_AXI_PROT_EN_MM_2_SET, 303 287 MT8188_TOP_AXI_PROT_EN_MM_2_CLR, 304 288 MT8188_TOP_AXI_PROT_EN_MM_2_STA), 305 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_VPPSYS0_STEP5, 289 + BUS_PROT_WR(INFRA, 290 + MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_VPPSYS0_STEP5, 306 291 MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_SET, 307 292 MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_CLR, 308 293 MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_STA), ··· 321 296 .pwr_sta2nd_offs = 0x170, 322 297 .sram_pdn_bits = BIT(8), 323 298 .sram_pdn_ack_bits = BIT(12), 324 - .bp_infracfg = { 325 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VDOSYS0_STEP1, 299 + .bp_cfg = { 300 + BUS_PROT_WR(INFRA, 301 + MT8188_TOP_AXI_PROT_EN_MM_VDOSYS0_STEP1, 326 302 MT8188_TOP_AXI_PROT_EN_MM_SET, 327 303 MT8188_TOP_AXI_PROT_EN_MM_CLR, 328 304 MT8188_TOP_AXI_PROT_EN_MM_STA), 329 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_VDOSYS0_STEP2, 305 + BUS_PROT_WR(INFRA, 306 + MT8188_TOP_AXI_PROT_EN_VDOSYS0_STEP2, 330 307 MT8188_TOP_AXI_PROT_EN_SET, 331 308 MT8188_TOP_AXI_PROT_EN_CLR, 332 309 MT8188_TOP_AXI_PROT_EN_STA), 333 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_VDOSYS0_STEP3, 310 + BUS_PROT_WR(INFRA, 311 + MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_VDOSYS0_STEP3, 334 312 MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_SET, 335 313 MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_CLR, 336 314 MT8188_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_STA), ··· 347 319 .pwr_sta2nd_offs = 0x170, 348 320 .sram_pdn_bits = BIT(8), 349 321 .sram_pdn_ack_bits = BIT(12), 350 - .bp_infracfg = { 351 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VDOSYS1_STEP1, 322 + .bp_cfg = { 323 + BUS_PROT_WR(INFRA, 324 + MT8188_TOP_AXI_PROT_EN_MM_VDOSYS1_STEP1, 352 325 MT8188_TOP_AXI_PROT_EN_MM_SET, 353 326 MT8188_TOP_AXI_PROT_EN_MM_CLR, 354 327 MT8188_TOP_AXI_PROT_EN_MM_STA), 355 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VDOSYS1_STEP2, 328 + BUS_PROT_WR(INFRA, 329 + MT8188_TOP_AXI_PROT_EN_MM_VDOSYS1_STEP2, 356 330 MT8188_TOP_AXI_PROT_EN_MM_SET, 357 331 MT8188_TOP_AXI_PROT_EN_MM_CLR, 358 332 MT8188_TOP_AXI_PROT_EN_MM_STA), 359 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_VDOSYS1_STEP3, 333 + BUS_PROT_WR(INFRA, 334 + MT8188_TOP_AXI_PROT_EN_MM_2_VDOSYS1_STEP3, 360 335 MT8188_TOP_AXI_PROT_EN_MM_2_SET, 361 336 MT8188_TOP_AXI_PROT_EN_MM_2_CLR, 362 337 MT8188_TOP_AXI_PROT_EN_MM_2_STA), ··· 373 342 .pwr_sta2nd_offs = 0x170, 374 343 .sram_pdn_bits = BIT(8), 375 344 .sram_pdn_ack_bits = BIT(12), 376 - .bp_infracfg = { 377 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_DP_TX_STEP1, 345 + .bp_cfg = { 346 + BUS_PROT_WR(INFRA, 347 + MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_DP_TX_STEP1, 378 348 MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_SET, 379 349 MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_CLR, 380 350 MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_STA), ··· 390 358 .pwr_sta2nd_offs = 0x170, 391 359 .sram_pdn_bits = BIT(8), 392 360 .sram_pdn_ack_bits = BIT(12), 393 - .bp_infracfg = { 394 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_EDP_TX_STEP1, 361 + .bp_cfg = { 362 + BUS_PROT_WR(INFRA, 363 + MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_EDP_TX_STEP1, 395 364 MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_SET, 396 365 MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_CLR, 397 366 MT8188_TOP_AXI_PROT_EN_INFRA_VDNR_STA), ··· 407 374 .pwr_sta2nd_offs = 0x170, 408 375 .sram_pdn_bits = BIT(8), 409 376 .sram_pdn_ack_bits = BIT(12), 410 - .bp_infracfg = { 411 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VPPSYS1_STEP1, 377 + .bp_cfg = { 378 + BUS_PROT_WR(INFRA, 379 + MT8188_TOP_AXI_PROT_EN_MM_VPPSYS1_STEP1, 412 380 MT8188_TOP_AXI_PROT_EN_MM_SET, 413 381 MT8188_TOP_AXI_PROT_EN_MM_CLR, 414 382 MT8188_TOP_AXI_PROT_EN_MM_STA), 415 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VPPSYS1_STEP2, 383 + BUS_PROT_WR(INFRA, 384 + MT8188_TOP_AXI_PROT_EN_MM_VPPSYS1_STEP2, 416 385 MT8188_TOP_AXI_PROT_EN_MM_SET, 417 386 MT8188_TOP_AXI_PROT_EN_MM_CLR, 418 387 MT8188_TOP_AXI_PROT_EN_MM_STA), 419 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_VPPSYS1_STEP3, 388 + BUS_PROT_WR(INFRA, 389 + MT8188_TOP_AXI_PROT_EN_MM_2_VPPSYS1_STEP3, 420 390 MT8188_TOP_AXI_PROT_EN_MM_2_SET, 421 391 MT8188_TOP_AXI_PROT_EN_MM_2_CLR, 422 392 MT8188_TOP_AXI_PROT_EN_MM_2_STA), ··· 433 397 .pwr_sta2nd_offs = 0x170, 434 398 .sram_pdn_bits = BIT(8), 435 399 .sram_pdn_ack_bits = BIT(12), 436 - .bp_infracfg = { 437 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_WPE_STEP1, 400 + .bp_cfg = { 401 + BUS_PROT_WR(INFRA, 402 + MT8188_TOP_AXI_PROT_EN_MM_2_WPE_STEP1, 438 403 MT8188_TOP_AXI_PROT_EN_MM_2_SET, 439 404 MT8188_TOP_AXI_PROT_EN_MM_2_CLR, 440 405 MT8188_TOP_AXI_PROT_EN_MM_2_STA), 441 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_WPE_STEP2, 406 + BUS_PROT_WR(INFRA, 407 + MT8188_TOP_AXI_PROT_EN_MM_2_WPE_STEP2, 442 408 MT8188_TOP_AXI_PROT_EN_MM_2_SET, 443 409 MT8188_TOP_AXI_PROT_EN_MM_2_CLR, 444 410 MT8188_TOP_AXI_PROT_EN_MM_2_STA), ··· 455 417 .pwr_sta2nd_offs = 0x170, 456 418 .sram_pdn_bits = BIT(8), 457 419 .sram_pdn_ack_bits = BIT(12), 458 - .bp_infracfg = { 459 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VDEC0_STEP1, 420 + .bp_cfg = { 421 + BUS_PROT_WR(INFRA, 422 + MT8188_TOP_AXI_PROT_EN_MM_VDEC0_STEP1, 460 423 MT8188_TOP_AXI_PROT_EN_MM_SET, 461 424 MT8188_TOP_AXI_PROT_EN_MM_CLR, 462 425 MT8188_TOP_AXI_PROT_EN_MM_STA), 463 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_VDEC0_STEP2, 426 + BUS_PROT_WR(INFRA, 427 + MT8188_TOP_AXI_PROT_EN_MM_2_VDEC0_STEP2, 464 428 MT8188_TOP_AXI_PROT_EN_MM_2_SET, 465 429 MT8188_TOP_AXI_PROT_EN_MM_2_CLR, 466 430 MT8188_TOP_AXI_PROT_EN_MM_2_STA), ··· 477 437 .pwr_sta2nd_offs = 0x170, 478 438 .sram_pdn_bits = BIT(8), 479 439 .sram_pdn_ack_bits = BIT(12), 480 - .bp_infracfg = { 481 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VDEC1_STEP1, 440 + .bp_cfg = { 441 + BUS_PROT_WR(INFRA, 442 + MT8188_TOP_AXI_PROT_EN_MM_VDEC1_STEP1, 482 443 MT8188_TOP_AXI_PROT_EN_MM_SET, 483 444 MT8188_TOP_AXI_PROT_EN_MM_CLR, 484 445 MT8188_TOP_AXI_PROT_EN_MM_STA), 485 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VDEC1_STEP2, 446 + BUS_PROT_WR(INFRA, 447 + MT8188_TOP_AXI_PROT_EN_MM_VDEC1_STEP2, 486 448 MT8188_TOP_AXI_PROT_EN_MM_SET, 487 449 MT8188_TOP_AXI_PROT_EN_MM_CLR, 488 450 MT8188_TOP_AXI_PROT_EN_MM_STA), ··· 499 457 .pwr_sta2nd_offs = 0x170, 500 458 .sram_pdn_bits = BIT(8), 501 459 .sram_pdn_ack_bits = BIT(12), 502 - .bp_infracfg = { 503 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VENC_STEP1, 460 + .bp_cfg = { 461 + BUS_PROT_WR(INFRA, 462 + MT8188_TOP_AXI_PROT_EN_MM_VENC_STEP1, 504 463 MT8188_TOP_AXI_PROT_EN_MM_SET, 505 464 MT8188_TOP_AXI_PROT_EN_MM_CLR, 506 465 MT8188_TOP_AXI_PROT_EN_MM_STA), 507 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_VENC_STEP2, 466 + BUS_PROT_WR(INFRA, 467 + MT8188_TOP_AXI_PROT_EN_MM_VENC_STEP2, 508 468 MT8188_TOP_AXI_PROT_EN_MM_SET, 509 469 MT8188_TOP_AXI_PROT_EN_MM_CLR, 510 470 MT8188_TOP_AXI_PROT_EN_MM_STA), 511 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_VENC_STEP3, 471 + BUS_PROT_WR(INFRA, 472 + MT8188_TOP_AXI_PROT_EN_MM_2_VENC_STEP3, 512 473 MT8188_TOP_AXI_PROT_EN_MM_2_SET, 513 474 MT8188_TOP_AXI_PROT_EN_MM_2_CLR, 514 475 MT8188_TOP_AXI_PROT_EN_MM_2_STA), ··· 524 479 .ctl_offs = 0x3A4, 525 480 .pwr_sta_offs = 0x16C, 526 481 .pwr_sta2nd_offs = 0x170, 527 - .bp_infracfg = { 528 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_IMG_VCORE_STEP1, 482 + .bp_cfg = { 483 + BUS_PROT_WR(INFRA, 484 + MT8188_TOP_AXI_PROT_EN_MM_IMG_VCORE_STEP1, 529 485 MT8188_TOP_AXI_PROT_EN_MM_SET, 530 486 MT8188_TOP_AXI_PROT_EN_MM_CLR, 531 487 MT8188_TOP_AXI_PROT_EN_MM_STA), 532 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_IMG_VCORE_STEP2, 488 + BUS_PROT_WR(INFRA, 489 + MT8188_TOP_AXI_PROT_EN_MM_IMG_VCORE_STEP2, 533 490 MT8188_TOP_AXI_PROT_EN_MM_SET, 534 491 MT8188_TOP_AXI_PROT_EN_MM_CLR, 535 492 MT8188_TOP_AXI_PROT_EN_MM_STA), 536 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_IMG_VCORE_STEP3, 493 + BUS_PROT_WR(INFRA, 494 + MT8188_TOP_AXI_PROT_EN_MM_2_IMG_VCORE_STEP3, 537 495 MT8188_TOP_AXI_PROT_EN_MM_2_SET, 538 496 MT8188_TOP_AXI_PROT_EN_MM_2_CLR, 539 497 MT8188_TOP_AXI_PROT_EN_MM_2_STA), ··· 551 503 .pwr_sta2nd_offs = 0x170, 552 504 .sram_pdn_bits = BIT(8), 553 505 .sram_pdn_ack_bits = BIT(12), 554 - .bp_infracfg = { 555 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_IMG_MAIN_STEP1, 506 + .bp_cfg = { 507 + BUS_PROT_WR(INFRA, 508 + MT8188_TOP_AXI_PROT_EN_MM_2_IMG_MAIN_STEP1, 556 509 MT8188_TOP_AXI_PROT_EN_MM_2_SET, 557 510 MT8188_TOP_AXI_PROT_EN_MM_2_CLR, 558 511 MT8188_TOP_AXI_PROT_EN_MM_2_STA), 559 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_IMG_MAIN_STEP2, 512 + BUS_PROT_WR(INFRA, 513 + MT8188_TOP_AXI_PROT_EN_MM_2_IMG_MAIN_STEP2, 560 514 MT8188_TOP_AXI_PROT_EN_MM_2_SET, 561 515 MT8188_TOP_AXI_PROT_EN_MM_2_CLR, 562 516 MT8188_TOP_AXI_PROT_EN_MM_2_STA), ··· 591 541 .ctl_offs = 0x3A0, 592 542 .pwr_sta_offs = 0x16C, 593 543 .pwr_sta2nd_offs = 0x170, 594 - .bp_infracfg = { 595 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_CAM_VCORE_STEP1, 544 + .bp_cfg = { 545 + BUS_PROT_WR(INFRA, 546 + MT8188_TOP_AXI_PROT_EN_MM_CAM_VCORE_STEP1, 596 547 MT8188_TOP_AXI_PROT_EN_MM_SET, 597 548 MT8188_TOP_AXI_PROT_EN_MM_CLR, 598 549 MT8188_TOP_AXI_PROT_EN_MM_STA), 599 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_CAM_VCORE_STEP2, 550 + BUS_PROT_WR(INFRA, 551 + MT8188_TOP_AXI_PROT_EN_2_CAM_VCORE_STEP2, 600 552 MT8188_TOP_AXI_PROT_EN_2_SET, 601 553 MT8188_TOP_AXI_PROT_EN_2_CLR, 602 554 MT8188_TOP_AXI_PROT_EN_2_STA), 603 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_1_CAM_VCORE_STEP3, 555 + BUS_PROT_WR(INFRA, 556 + MT8188_TOP_AXI_PROT_EN_1_CAM_VCORE_STEP3, 604 557 MT8188_TOP_AXI_PROT_EN_1_SET, 605 558 MT8188_TOP_AXI_PROT_EN_1_CLR, 606 559 MT8188_TOP_AXI_PROT_EN_1_STA), 607 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_CAM_VCORE_STEP4, 560 + BUS_PROT_WR(INFRA, 561 + MT8188_TOP_AXI_PROT_EN_MM_CAM_VCORE_STEP4, 608 562 MT8188_TOP_AXI_PROT_EN_MM_SET, 609 563 MT8188_TOP_AXI_PROT_EN_MM_CLR, 610 564 MT8188_TOP_AXI_PROT_EN_MM_STA), 611 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_CAM_VCORE_STEP5, 565 + BUS_PROT_WR(INFRA, 566 + MT8188_TOP_AXI_PROT_EN_MM_2_CAM_VCORE_STEP5, 612 567 MT8188_TOP_AXI_PROT_EN_MM_2_SET, 613 568 MT8188_TOP_AXI_PROT_EN_MM_2_CLR, 614 569 MT8188_TOP_AXI_PROT_EN_MM_2_STA), ··· 628 573 .pwr_sta2nd_offs = 0x170, 629 574 .sram_pdn_bits = BIT(8), 630 575 .sram_pdn_ack_bits = BIT(12), 631 - .bp_infracfg = { 632 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_CAM_MAIN_STEP1, 576 + .bp_cfg = { 577 + BUS_PROT_WR(INFRA, 578 + MT8188_TOP_AXI_PROT_EN_MM_2_CAM_MAIN_STEP1, 633 579 MT8188_TOP_AXI_PROT_EN_MM_2_SET, 634 580 MT8188_TOP_AXI_PROT_EN_MM_2_CLR, 635 581 MT8188_TOP_AXI_PROT_EN_MM_2_STA), 636 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_CAM_MAIN_STEP2, 582 + BUS_PROT_WR(INFRA, 583 + MT8188_TOP_AXI_PROT_EN_2_CAM_MAIN_STEP2, 637 584 MT8188_TOP_AXI_PROT_EN_2_SET, 638 585 MT8188_TOP_AXI_PROT_EN_2_CLR, 639 586 MT8188_TOP_AXI_PROT_EN_2_STA), 640 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_MM_2_CAM_MAIN_STEP3, 587 + BUS_PROT_WR(INFRA, 588 + MT8188_TOP_AXI_PROT_EN_MM_2_CAM_MAIN_STEP3, 641 589 MT8188_TOP_AXI_PROT_EN_MM_2_SET, 642 590 MT8188_TOP_AXI_PROT_EN_MM_2_CLR, 643 591 MT8188_TOP_AXI_PROT_EN_MM_2_STA), 644 - BUS_PROT_WR(MT8188_TOP_AXI_PROT_EN_2_CAM_MAIN_STEP4, 592 + BUS_PROT_WR(INFRA, 593 + MT8188_TOP_AXI_PROT_EN_2_CAM_MAIN_STEP4, 645 594 MT8188_TOP_AXI_PROT_EN_2_SET, 646 595 MT8188_TOP_AXI_PROT_EN_2_CLR, 647 596 MT8188_TOP_AXI_PROT_EN_2_STA),
+71 -41
drivers/pmdomain/mediatek/mt8192-pm-domains.h
··· 19 19 .pwr_sta2nd_offs = 0x0170, 20 20 .sram_pdn_bits = GENMASK(8, 8), 21 21 .sram_pdn_ack_bits = GENMASK(12, 12), 22 - .bp_infracfg = { 23 - BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_2_AUDIO, 22 + .bp_cfg = { 23 + BUS_PROT_WR(INFRA, 24 + MT8192_TOP_AXI_PROT_EN_2_AUDIO, 24 25 MT8192_TOP_AXI_PROT_EN_2_SET, 25 26 MT8192_TOP_AXI_PROT_EN_2_CLR, 26 27 MT8192_TOP_AXI_PROT_EN_2_STA1), ··· 35 34 .pwr_sta2nd_offs = 0x0170, 36 35 .sram_pdn_bits = 0, 37 36 .sram_pdn_ack_bits = 0, 38 - .bp_infracfg = { 39 - BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_CONN, 37 + .bp_cfg = { 38 + BUS_PROT_WR(INFRA, 39 + MT8192_TOP_AXI_PROT_EN_CONN, 40 40 MT8192_TOP_AXI_PROT_EN_SET, 41 41 MT8192_TOP_AXI_PROT_EN_CLR, 42 42 MT8192_TOP_AXI_PROT_EN_STA1), 43 - BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_CONN_2ND, 43 + BUS_PROT_WR(INFRA, 44 + MT8192_TOP_AXI_PROT_EN_CONN_2ND, 44 45 MT8192_TOP_AXI_PROT_EN_SET, 45 46 MT8192_TOP_AXI_PROT_EN_CLR, 46 47 MT8192_TOP_AXI_PROT_EN_STA1), 47 - BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_1_CONN, 48 + BUS_PROT_WR(INFRA, 49 + MT8192_TOP_AXI_PROT_EN_1_CONN, 48 50 MT8192_TOP_AXI_PROT_EN_1_SET, 49 51 MT8192_TOP_AXI_PROT_EN_1_CLR, 50 52 MT8192_TOP_AXI_PROT_EN_1_STA1), ··· 72 68 .pwr_sta2nd_offs = 0x0170, 73 69 .sram_pdn_bits = GENMASK(8, 8), 74 70 .sram_pdn_ack_bits = GENMASK(12, 12), 75 - .bp_infracfg = { 76 - BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_1_MFG1, 71 + .bp_cfg = { 72 + BUS_PROT_WR(INFRA, 73 + MT8192_TOP_AXI_PROT_EN_1_MFG1, 77 74 MT8192_TOP_AXI_PROT_EN_1_SET, 78 75 MT8192_TOP_AXI_PROT_EN_1_CLR, 79 76 MT8192_TOP_AXI_PROT_EN_1_STA1), 80 - BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_2_MFG1, 77 + BUS_PROT_WR(INFRA, 78 + MT8192_TOP_AXI_PROT_EN_2_MFG1, 81 79 MT8192_TOP_AXI_PROT_EN_2_SET, 82 80 MT8192_TOP_AXI_PROT_EN_2_CLR, 83 81 MT8192_TOP_AXI_PROT_EN_2_STA1), 84 - BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MFG1, 82 + BUS_PROT_WR(INFRA, 83 + MT8192_TOP_AXI_PROT_EN_MFG1, 85 84 MT8192_TOP_AXI_PROT_EN_SET, 86 85 MT8192_TOP_AXI_PROT_EN_CLR, 87 86 MT8192_TOP_AXI_PROT_EN_STA1), 88 - BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_2_MFG1_2ND, 87 + BUS_PROT_WR(INFRA, 88 + MT8192_TOP_AXI_PROT_EN_2_MFG1_2ND, 89 89 MT8192_TOP_AXI_PROT_EN_2_SET, 90 90 MT8192_TOP_AXI_PROT_EN_2_CLR, 91 91 MT8192_TOP_AXI_PROT_EN_2_STA1), ··· 149 141 .pwr_sta2nd_offs = 0x0170, 150 142 .sram_pdn_bits = GENMASK(8, 8), 151 143 .sram_pdn_ack_bits = GENMASK(12, 12), 152 - .bp_infracfg = { 153 - BUS_PROT_WR_IGN(MT8192_TOP_AXI_PROT_EN_MM_DISP, 144 + .bp_cfg = { 145 + BUS_PROT_WR_IGN(INFRA, 146 + MT8192_TOP_AXI_PROT_EN_MM_DISP, 154 147 MT8192_TOP_AXI_PROT_EN_MM_SET, 155 148 MT8192_TOP_AXI_PROT_EN_MM_CLR, 156 149 MT8192_TOP_AXI_PROT_EN_MM_STA1), 157 - BUS_PROT_WR_IGN(MT8192_TOP_AXI_PROT_EN_MM_2_DISP, 150 + BUS_PROT_WR_IGN(INFRA, 151 + MT8192_TOP_AXI_PROT_EN_MM_2_DISP, 158 152 MT8192_TOP_AXI_PROT_EN_MM_2_SET, 159 153 MT8192_TOP_AXI_PROT_EN_MM_2_CLR, 160 154 MT8192_TOP_AXI_PROT_EN_MM_2_STA1), 161 - BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_DISP, 155 + BUS_PROT_WR(INFRA, 156 + MT8192_TOP_AXI_PROT_EN_DISP, 162 157 MT8192_TOP_AXI_PROT_EN_SET, 163 158 MT8192_TOP_AXI_PROT_EN_CLR, 164 159 MT8192_TOP_AXI_PROT_EN_STA1), 165 - BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_DISP_2ND, 160 + BUS_PROT_WR(INFRA, 161 + MT8192_TOP_AXI_PROT_EN_MM_DISP_2ND, 166 162 MT8192_TOP_AXI_PROT_EN_MM_SET, 167 163 MT8192_TOP_AXI_PROT_EN_MM_CLR, 168 164 MT8192_TOP_AXI_PROT_EN_MM_STA1), 169 - BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_2_DISP_2ND, 165 + BUS_PROT_WR(INFRA, 166 + MT8192_TOP_AXI_PROT_EN_MM_2_DISP_2ND, 170 167 MT8192_TOP_AXI_PROT_EN_MM_2_SET, 171 168 MT8192_TOP_AXI_PROT_EN_MM_2_CLR, 172 169 MT8192_TOP_AXI_PROT_EN_MM_2_STA1), ··· 185 172 .pwr_sta2nd_offs = 0x0170, 186 173 .sram_pdn_bits = GENMASK(8, 8), 187 174 .sram_pdn_ack_bits = GENMASK(12, 12), 188 - .bp_infracfg = { 189 - BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_IPE, 175 + .bp_cfg = { 176 + BUS_PROT_WR(INFRA, 177 + MT8192_TOP_AXI_PROT_EN_MM_IPE, 190 178 MT8192_TOP_AXI_PROT_EN_MM_SET, 191 179 MT8192_TOP_AXI_PROT_EN_MM_CLR, 192 180 MT8192_TOP_AXI_PROT_EN_MM_STA1), 193 - BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_IPE_2ND, 181 + BUS_PROT_WR(INFRA, 182 + MT8192_TOP_AXI_PROT_EN_MM_IPE_2ND, 194 183 MT8192_TOP_AXI_PROT_EN_MM_SET, 195 184 MT8192_TOP_AXI_PROT_EN_MM_CLR, 196 185 MT8192_TOP_AXI_PROT_EN_MM_STA1), ··· 206 191 .pwr_sta2nd_offs = 0x0170, 207 192 .sram_pdn_bits = GENMASK(8, 8), 208 193 .sram_pdn_ack_bits = GENMASK(12, 12), 209 - .bp_infracfg = { 210 - BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_2_ISP, 194 + .bp_cfg = { 195 + BUS_PROT_WR(INFRA, 196 + MT8192_TOP_AXI_PROT_EN_MM_2_ISP, 211 197 MT8192_TOP_AXI_PROT_EN_MM_2_SET, 212 198 MT8192_TOP_AXI_PROT_EN_MM_2_CLR, 213 199 MT8192_TOP_AXI_PROT_EN_MM_2_STA1), 214 - BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_2_ISP_2ND, 200 + BUS_PROT_WR(INFRA, 201 + MT8192_TOP_AXI_PROT_EN_MM_2_ISP_2ND, 215 202 MT8192_TOP_AXI_PROT_EN_MM_2_SET, 216 203 MT8192_TOP_AXI_PROT_EN_MM_2_CLR, 217 204 MT8192_TOP_AXI_PROT_EN_MM_2_STA1), ··· 227 210 .pwr_sta2nd_offs = 0x0170, 228 211 .sram_pdn_bits = GENMASK(8, 8), 229 212 .sram_pdn_ack_bits = GENMASK(12, 12), 230 - .bp_infracfg = { 231 - BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_ISP2, 213 + .bp_cfg = { 214 + BUS_PROT_WR(INFRA, 215 + MT8192_TOP_AXI_PROT_EN_MM_ISP2, 232 216 MT8192_TOP_AXI_PROT_EN_MM_SET, 233 217 MT8192_TOP_AXI_PROT_EN_MM_CLR, 234 218 MT8192_TOP_AXI_PROT_EN_MM_STA1), 235 - BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_ISP2_2ND, 219 + BUS_PROT_WR(INFRA, 220 + MT8192_TOP_AXI_PROT_EN_MM_ISP2_2ND, 236 221 MT8192_TOP_AXI_PROT_EN_MM_SET, 237 222 MT8192_TOP_AXI_PROT_EN_MM_CLR, 238 223 MT8192_TOP_AXI_PROT_EN_MM_STA1), ··· 248 229 .pwr_sta2nd_offs = 0x0170, 249 230 .sram_pdn_bits = GENMASK(8, 8), 250 231 .sram_pdn_ack_bits = GENMASK(12, 12), 251 - .bp_infracfg = { 252 - BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_2_MDP, 232 + .bp_cfg = { 233 + BUS_PROT_WR(INFRA, 234 + MT8192_TOP_AXI_PROT_EN_MM_2_MDP, 253 235 MT8192_TOP_AXI_PROT_EN_MM_2_SET, 254 236 MT8192_TOP_AXI_PROT_EN_MM_2_CLR, 255 237 MT8192_TOP_AXI_PROT_EN_MM_2_STA1), 256 - BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_2_MDP_2ND, 238 + BUS_PROT_WR(INFRA, 239 + MT8192_TOP_AXI_PROT_EN_MM_2_MDP_2ND, 257 240 MT8192_TOP_AXI_PROT_EN_MM_2_SET, 258 241 MT8192_TOP_AXI_PROT_EN_MM_2_CLR, 259 242 MT8192_TOP_AXI_PROT_EN_MM_2_STA1), ··· 269 248 .pwr_sta2nd_offs = 0x0170, 270 249 .sram_pdn_bits = GENMASK(8, 8), 271 250 .sram_pdn_ack_bits = GENMASK(12, 12), 272 - .bp_infracfg = { 273 - BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_VENC, 251 + .bp_cfg = { 252 + BUS_PROT_WR(INFRA, 253 + MT8192_TOP_AXI_PROT_EN_MM_VENC, 274 254 MT8192_TOP_AXI_PROT_EN_MM_SET, 275 255 MT8192_TOP_AXI_PROT_EN_MM_CLR, 276 256 MT8192_TOP_AXI_PROT_EN_MM_STA1), 277 - BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_VENC_2ND, 257 + BUS_PROT_WR(INFRA, 258 + MT8192_TOP_AXI_PROT_EN_MM_VENC_2ND, 278 259 MT8192_TOP_AXI_PROT_EN_MM_SET, 279 260 MT8192_TOP_AXI_PROT_EN_MM_CLR, 280 261 MT8192_TOP_AXI_PROT_EN_MM_STA1), ··· 290 267 .pwr_sta2nd_offs = 0x0170, 291 268 .sram_pdn_bits = GENMASK(8, 8), 292 269 .sram_pdn_ack_bits = GENMASK(12, 12), 293 - .bp_infracfg = { 294 - BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_VDEC, 270 + .bp_cfg = { 271 + BUS_PROT_WR(INFRA, 272 + MT8192_TOP_AXI_PROT_EN_MM_VDEC, 295 273 MT8192_TOP_AXI_PROT_EN_MM_SET, 296 274 MT8192_TOP_AXI_PROT_EN_MM_CLR, 297 275 MT8192_TOP_AXI_PROT_EN_MM_STA1), 298 - BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_VDEC_2ND, 276 + BUS_PROT_WR(INFRA, 277 + MT8192_TOP_AXI_PROT_EN_MM_VDEC_2ND, 299 278 MT8192_TOP_AXI_PROT_EN_MM_SET, 300 279 MT8192_TOP_AXI_PROT_EN_MM_CLR, 301 280 MT8192_TOP_AXI_PROT_EN_MM_STA1), ··· 320 295 .pwr_sta2nd_offs = 0x0170, 321 296 .sram_pdn_bits = GENMASK(8, 8), 322 297 .sram_pdn_ack_bits = GENMASK(12, 12), 323 - .bp_infracfg = { 324 - BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_2_CAM, 298 + .bp_cfg = { 299 + BUS_PROT_WR(INFRA, 300 + MT8192_TOP_AXI_PROT_EN_2_CAM, 325 301 MT8192_TOP_AXI_PROT_EN_2_SET, 326 302 MT8192_TOP_AXI_PROT_EN_2_CLR, 327 303 MT8192_TOP_AXI_PROT_EN_2_STA1), 328 - BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_CAM, 304 + BUS_PROT_WR(INFRA, 305 + MT8192_TOP_AXI_PROT_EN_MM_CAM, 329 306 MT8192_TOP_AXI_PROT_EN_MM_SET, 330 307 MT8192_TOP_AXI_PROT_EN_MM_CLR, 331 308 MT8192_TOP_AXI_PROT_EN_MM_STA1), 332 - BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_1_CAM, 309 + BUS_PROT_WR(INFRA, 310 + MT8192_TOP_AXI_PROT_EN_1_CAM, 333 311 MT8192_TOP_AXI_PROT_EN_1_SET, 334 312 MT8192_TOP_AXI_PROT_EN_1_CLR, 335 313 MT8192_TOP_AXI_PROT_EN_1_STA1), 336 - BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_MM_CAM_2ND, 314 + BUS_PROT_WR(INFRA, 315 + MT8192_TOP_AXI_PROT_EN_MM_CAM_2ND, 337 316 MT8192_TOP_AXI_PROT_EN_MM_SET, 338 317 MT8192_TOP_AXI_PROT_EN_MM_CLR, 339 318 MT8192_TOP_AXI_PROT_EN_MM_STA1), 340 - BUS_PROT_WR(MT8192_TOP_AXI_PROT_EN_VDNR_CAM, 319 + BUS_PROT_WR(INFRA, 320 + MT8192_TOP_AXI_PROT_EN_VDNR_CAM, 341 321 MT8192_TOP_AXI_PROT_EN_VDNR_SET, 342 322 MT8192_TOP_AXI_PROT_EN_VDNR_CLR, 343 323 MT8192_TOP_AXI_PROT_EN_VDNR_STA1),
+126 -73
drivers/pmdomain/mediatek/mt8195-pm-domains.h
··· 23 23 .pwr_sta2nd_offs = 0x178, 24 24 .sram_pdn_bits = GENMASK(8, 8), 25 25 .sram_pdn_ack_bits = GENMASK(12, 12), 26 - .bp_infracfg = { 27 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_VDNR_PCIE_MAC_P0, 26 + .bp_cfg = { 27 + BUS_PROT_WR(INFRA, 28 + MT8195_TOP_AXI_PROT_EN_VDNR_PCIE_MAC_P0, 28 29 MT8195_TOP_AXI_PROT_EN_VDNR_SET, 29 30 MT8195_TOP_AXI_PROT_EN_VDNR_CLR, 30 31 MT8195_TOP_AXI_PROT_EN_VDNR_STA1), 31 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_VDNR_1_PCIE_MAC_P0, 32 + BUS_PROT_WR(INFRA, 33 + MT8195_TOP_AXI_PROT_EN_VDNR_1_PCIE_MAC_P0, 32 34 MT8195_TOP_AXI_PROT_EN_VDNR_1_SET, 33 35 MT8195_TOP_AXI_PROT_EN_VDNR_1_CLR, 34 36 MT8195_TOP_AXI_PROT_EN_VDNR_1_STA1), ··· 44 42 .pwr_sta2nd_offs = 0x178, 45 43 .sram_pdn_bits = GENMASK(8, 8), 46 44 .sram_pdn_ack_bits = GENMASK(12, 12), 47 - .bp_infracfg = { 48 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_VDNR_PCIE_MAC_P1, 45 + .bp_cfg = { 46 + BUS_PROT_WR(INFRA, 47 + MT8195_TOP_AXI_PROT_EN_VDNR_PCIE_MAC_P1, 49 48 MT8195_TOP_AXI_PROT_EN_VDNR_SET, 50 49 MT8195_TOP_AXI_PROT_EN_VDNR_CLR, 51 50 MT8195_TOP_AXI_PROT_EN_VDNR_STA1), 52 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_VDNR_1_PCIE_MAC_P1, 51 + BUS_PROT_WR(INFRA, 52 + MT8195_TOP_AXI_PROT_EN_VDNR_1_PCIE_MAC_P1, 53 53 MT8195_TOP_AXI_PROT_EN_VDNR_1_SET, 54 54 MT8195_TOP_AXI_PROT_EN_VDNR_1_CLR, 55 55 MT8195_TOP_AXI_PROT_EN_VDNR_1_STA1), ··· 99 95 .pwr_sta2nd_offs = 0x170, 100 96 .sram_pdn_bits = GENMASK(8, 8), 101 97 .sram_pdn_ack_bits = GENMASK(12, 12), 102 - .bp_infracfg = { 103 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_2_ADSP, 98 + .bp_cfg = { 99 + BUS_PROT_WR(INFRA, 100 + MT8195_TOP_AXI_PROT_EN_2_ADSP, 104 101 MT8195_TOP_AXI_PROT_EN_2_SET, 105 102 MT8195_TOP_AXI_PROT_EN_2_CLR, 106 103 MT8195_TOP_AXI_PROT_EN_2_STA1), ··· 116 111 .pwr_sta2nd_offs = 0x170, 117 112 .sram_pdn_bits = GENMASK(8, 8), 118 113 .sram_pdn_ack_bits = GENMASK(12, 12), 119 - .bp_infracfg = { 120 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_2_AUDIO, 114 + .bp_cfg = { 115 + BUS_PROT_WR(INFRA, 116 + MT8195_TOP_AXI_PROT_EN_2_AUDIO, 121 117 MT8195_TOP_AXI_PROT_EN_2_SET, 122 118 MT8195_TOP_AXI_PROT_EN_2_CLR, 123 119 MT8195_TOP_AXI_PROT_EN_2_STA1), ··· 142 136 .pwr_sta2nd_offs = 0x178, 143 137 .sram_pdn_bits = GENMASK(8, 8), 144 138 .sram_pdn_ack_bits = GENMASK(12, 12), 145 - .bp_infracfg = { 146 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MFG1, 139 + .bp_cfg = { 140 + BUS_PROT_WR(INFRA, 141 + MT8195_TOP_AXI_PROT_EN_MFG1, 147 142 MT8195_TOP_AXI_PROT_EN_SET, 148 143 MT8195_TOP_AXI_PROT_EN_CLR, 149 144 MT8195_TOP_AXI_PROT_EN_STA1), 150 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_2_MFG1, 145 + BUS_PROT_WR(INFRA, 146 + MT8195_TOP_AXI_PROT_EN_2_MFG1, 151 147 MT8195_TOP_AXI_PROT_EN_2_SET, 152 148 MT8195_TOP_AXI_PROT_EN_2_CLR, 153 149 MT8195_TOP_AXI_PROT_EN_2_STA1), 154 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_1_MFG1, 150 + BUS_PROT_WR(INFRA, 151 + MT8195_TOP_AXI_PROT_EN_1_MFG1, 155 152 MT8195_TOP_AXI_PROT_EN_1_SET, 156 153 MT8195_TOP_AXI_PROT_EN_1_CLR, 157 154 MT8195_TOP_AXI_PROT_EN_1_STA1), 158 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_2_MFG1_2ND, 155 + BUS_PROT_WR(INFRA, 156 + MT8195_TOP_AXI_PROT_EN_2_MFG1_2ND, 159 157 MT8195_TOP_AXI_PROT_EN_2_SET, 160 158 MT8195_TOP_AXI_PROT_EN_2_CLR, 161 159 MT8195_TOP_AXI_PROT_EN_2_STA1), 162 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MFG1_2ND, 160 + BUS_PROT_WR(INFRA, 161 + MT8195_TOP_AXI_PROT_EN_MFG1_2ND, 163 162 MT8195_TOP_AXI_PROT_EN_SET, 164 163 MT8195_TOP_AXI_PROT_EN_CLR, 165 164 MT8195_TOP_AXI_PROT_EN_STA1), 166 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_MFG1, 165 + BUS_PROT_WR(INFRA, 166 + MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_MFG1, 167 167 MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_SET, 168 168 MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_CLR, 169 169 MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_STA1), ··· 234 222 .pwr_sta2nd_offs = 0x170, 235 223 .sram_pdn_bits = GENMASK(8, 8), 236 224 .sram_pdn_ack_bits = GENMASK(12, 12), 237 - .bp_infracfg = { 238 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_VPPSYS0, 225 + .bp_cfg = { 226 + BUS_PROT_WR(INFRA, 227 + MT8195_TOP_AXI_PROT_EN_VPPSYS0, 239 228 MT8195_TOP_AXI_PROT_EN_SET, 240 229 MT8195_TOP_AXI_PROT_EN_CLR, 241 230 MT8195_TOP_AXI_PROT_EN_STA1), 242 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_2_VPPSYS0, 231 + BUS_PROT_WR(INFRA, 232 + MT8195_TOP_AXI_PROT_EN_MM_2_VPPSYS0, 243 233 MT8195_TOP_AXI_PROT_EN_MM_2_SET, 244 234 MT8195_TOP_AXI_PROT_EN_MM_2_CLR, 245 235 MT8195_TOP_AXI_PROT_EN_MM_2_STA1), 246 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_VPPSYS0_2ND, 236 + BUS_PROT_WR(INFRA, 237 + MT8195_TOP_AXI_PROT_EN_VPPSYS0_2ND, 247 238 MT8195_TOP_AXI_PROT_EN_SET, 248 239 MT8195_TOP_AXI_PROT_EN_CLR, 249 240 MT8195_TOP_AXI_PROT_EN_STA1), 250 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_2_VPPSYS0_2ND, 241 + BUS_PROT_WR(INFRA, 242 + MT8195_TOP_AXI_PROT_EN_MM_2_VPPSYS0_2ND, 251 243 MT8195_TOP_AXI_PROT_EN_MM_2_SET, 252 244 MT8195_TOP_AXI_PROT_EN_MM_2_CLR, 253 245 MT8195_TOP_AXI_PROT_EN_MM_2_STA1), 254 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_VPPSYS0, 246 + BUS_PROT_WR(INFRA, 247 + MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_VPPSYS0, 255 248 MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_SET, 256 249 MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_CLR, 257 250 MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_STA1), ··· 270 253 .pwr_sta2nd_offs = 0x170, 271 254 .sram_pdn_bits = GENMASK(8, 8), 272 255 .sram_pdn_ack_bits = GENMASK(12, 12), 273 - .bp_infracfg = { 274 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_VDOSYS0, 256 + .bp_cfg = { 257 + BUS_PROT_WR(INFRA, 258 + MT8195_TOP_AXI_PROT_EN_MM_VDOSYS0, 275 259 MT8195_TOP_AXI_PROT_EN_MM_SET, 276 260 MT8195_TOP_AXI_PROT_EN_MM_CLR, 277 261 MT8195_TOP_AXI_PROT_EN_MM_STA1), 278 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_VDOSYS0, 262 + BUS_PROT_WR(INFRA, 263 + MT8195_TOP_AXI_PROT_EN_VDOSYS0, 279 264 MT8195_TOP_AXI_PROT_EN_SET, 280 265 MT8195_TOP_AXI_PROT_EN_CLR, 281 266 MT8195_TOP_AXI_PROT_EN_STA1), 282 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_VDOSYS0, 267 + BUS_PROT_WR(INFRA, 268 + MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_VDOSYS0, 283 269 MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_SET, 284 270 MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_CLR, 285 271 MT8195_TOP_AXI_PROT_EN_SUB_INFRA_VDNR_STA1), ··· 296 276 .pwr_sta2nd_offs = 0x170, 297 277 .sram_pdn_bits = GENMASK(8, 8), 298 278 .sram_pdn_ack_bits = GENMASK(12, 12), 299 - .bp_infracfg = { 300 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_VPPSYS1, 279 + .bp_cfg = { 280 + BUS_PROT_WR(INFRA, 281 + MT8195_TOP_AXI_PROT_EN_MM_VPPSYS1, 301 282 MT8195_TOP_AXI_PROT_EN_MM_SET, 302 283 MT8195_TOP_AXI_PROT_EN_MM_CLR, 303 284 MT8195_TOP_AXI_PROT_EN_MM_STA1), 304 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_VPPSYS1_2ND, 285 + BUS_PROT_WR(INFRA, 286 + MT8195_TOP_AXI_PROT_EN_MM_VPPSYS1_2ND, 305 287 MT8195_TOP_AXI_PROT_EN_MM_SET, 306 288 MT8195_TOP_AXI_PROT_EN_MM_CLR, 307 289 MT8195_TOP_AXI_PROT_EN_MM_STA1), 308 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_2_VPPSYS1, 290 + BUS_PROT_WR(INFRA, 291 + MT8195_TOP_AXI_PROT_EN_MM_2_VPPSYS1, 309 292 MT8195_TOP_AXI_PROT_EN_MM_2_SET, 310 293 MT8195_TOP_AXI_PROT_EN_MM_2_CLR, 311 294 MT8195_TOP_AXI_PROT_EN_MM_2_STA1), ··· 322 299 .pwr_sta2nd_offs = 0x170, 323 300 .sram_pdn_bits = GENMASK(8, 8), 324 301 .sram_pdn_ack_bits = GENMASK(12, 12), 325 - .bp_infracfg = { 326 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_VDOSYS1, 302 + .bp_cfg = { 303 + BUS_PROT_WR(INFRA, 304 + MT8195_TOP_AXI_PROT_EN_MM_VDOSYS1, 327 305 MT8195_TOP_AXI_PROT_EN_MM_SET, 328 306 MT8195_TOP_AXI_PROT_EN_MM_CLR, 329 307 MT8195_TOP_AXI_PROT_EN_MM_STA1), 330 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_VDOSYS1_2ND, 308 + BUS_PROT_WR(INFRA, 309 + MT8195_TOP_AXI_PROT_EN_MM_VDOSYS1_2ND, 331 310 MT8195_TOP_AXI_PROT_EN_MM_SET, 332 311 MT8195_TOP_AXI_PROT_EN_MM_CLR, 333 312 MT8195_TOP_AXI_PROT_EN_MM_STA1), 334 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_2_VDOSYS1, 313 + BUS_PROT_WR(INFRA, 314 + MT8195_TOP_AXI_PROT_EN_MM_2_VDOSYS1, 335 315 MT8195_TOP_AXI_PROT_EN_MM_2_SET, 336 316 MT8195_TOP_AXI_PROT_EN_MM_2_CLR, 337 317 MT8195_TOP_AXI_PROT_EN_MM_2_STA1), ··· 348 322 .pwr_sta2nd_offs = 0x170, 349 323 .sram_pdn_bits = GENMASK(8, 8), 350 324 .sram_pdn_ack_bits = GENMASK(12, 12), 351 - .bp_infracfg = { 352 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_VDNR_1_DP_TX, 325 + .bp_cfg = { 326 + BUS_PROT_WR(INFRA, 327 + MT8195_TOP_AXI_PROT_EN_VDNR_1_DP_TX, 353 328 MT8195_TOP_AXI_PROT_EN_VDNR_1_SET, 354 329 MT8195_TOP_AXI_PROT_EN_VDNR_1_CLR, 355 330 MT8195_TOP_AXI_PROT_EN_VDNR_1_STA1), ··· 365 338 .pwr_sta2nd_offs = 0x170, 366 339 .sram_pdn_bits = GENMASK(8, 8), 367 340 .sram_pdn_ack_bits = GENMASK(12, 12), 368 - .bp_infracfg = { 369 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_VDNR_1_EPD_TX, 341 + .bp_cfg = { 342 + BUS_PROT_WR(INFRA, 343 + MT8195_TOP_AXI_PROT_EN_VDNR_1_EPD_TX, 370 344 MT8195_TOP_AXI_PROT_EN_VDNR_1_SET, 371 345 MT8195_TOP_AXI_PROT_EN_VDNR_1_CLR, 372 346 MT8195_TOP_AXI_PROT_EN_VDNR_1_STA1), ··· 392 364 .pwr_sta2nd_offs = 0x170, 393 365 .sram_pdn_bits = GENMASK(8, 8), 394 366 .sram_pdn_ack_bits = GENMASK(12, 12), 395 - .bp_infracfg = { 396 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_2_WPESYS, 367 + .bp_cfg = { 368 + BUS_PROT_WR(INFRA, 369 + MT8195_TOP_AXI_PROT_EN_MM_2_WPESYS, 397 370 MT8195_TOP_AXI_PROT_EN_MM_2_SET, 398 371 MT8195_TOP_AXI_PROT_EN_MM_2_CLR, 399 372 MT8195_TOP_AXI_PROT_EN_MM_2_STA1), 400 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_WPESYS, 373 + BUS_PROT_WR(INFRA, 374 + MT8195_TOP_AXI_PROT_EN_MM_WPESYS, 401 375 MT8195_TOP_AXI_PROT_EN_MM_SET, 402 376 MT8195_TOP_AXI_PROT_EN_MM_CLR, 403 377 MT8195_TOP_AXI_PROT_EN_MM_STA1), 404 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_2_WPESYS_2ND, 378 + BUS_PROT_WR(INFRA, 379 + MT8195_TOP_AXI_PROT_EN_MM_2_WPESYS_2ND, 405 380 MT8195_TOP_AXI_PROT_EN_MM_2_SET, 406 381 MT8195_TOP_AXI_PROT_EN_MM_2_CLR, 407 382 MT8195_TOP_AXI_PROT_EN_MM_2_STA1), ··· 418 387 .pwr_sta2nd_offs = 0x170, 419 388 .sram_pdn_bits = GENMASK(8, 8), 420 389 .sram_pdn_ack_bits = GENMASK(12, 12), 421 - .bp_infracfg = { 422 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_VDEC0, 390 + .bp_cfg = { 391 + BUS_PROT_WR(INFRA, 392 + MT8195_TOP_AXI_PROT_EN_MM_VDEC0, 423 393 MT8195_TOP_AXI_PROT_EN_MM_SET, 424 394 MT8195_TOP_AXI_PROT_EN_MM_CLR, 425 395 MT8195_TOP_AXI_PROT_EN_MM_STA1), 426 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_2_VDEC0, 396 + BUS_PROT_WR(INFRA, 397 + MT8195_TOP_AXI_PROT_EN_MM_2_VDEC0, 427 398 MT8195_TOP_AXI_PROT_EN_MM_2_SET, 428 399 MT8195_TOP_AXI_PROT_EN_MM_2_CLR, 429 400 MT8195_TOP_AXI_PROT_EN_MM_2_STA1), 430 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_VDEC0_2ND, 401 + BUS_PROT_WR(INFRA, 402 + MT8195_TOP_AXI_PROT_EN_MM_VDEC0_2ND, 431 403 MT8195_TOP_AXI_PROT_EN_MM_SET, 432 404 MT8195_TOP_AXI_PROT_EN_MM_CLR, 433 405 MT8195_TOP_AXI_PROT_EN_MM_STA1), 434 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_2_VDEC0_2ND, 406 + BUS_PROT_WR(INFRA, 407 + MT8195_TOP_AXI_PROT_EN_MM_2_VDEC0_2ND, 435 408 MT8195_TOP_AXI_PROT_EN_MM_2_SET, 436 409 MT8195_TOP_AXI_PROT_EN_MM_2_CLR, 437 410 MT8195_TOP_AXI_PROT_EN_MM_2_STA1), ··· 450 415 .pwr_sta2nd_offs = 0x170, 451 416 .sram_pdn_bits = GENMASK(8, 8), 452 417 .sram_pdn_ack_bits = GENMASK(12, 12), 453 - .bp_infracfg = { 454 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_VDEC1, 418 + .bp_cfg = { 419 + BUS_PROT_WR(INFRA, 420 + MT8195_TOP_AXI_PROT_EN_MM_VDEC1, 455 421 MT8195_TOP_AXI_PROT_EN_MM_SET, 456 422 MT8195_TOP_AXI_PROT_EN_MM_CLR, 457 423 MT8195_TOP_AXI_PROT_EN_MM_STA1), 458 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_VDEC1_2ND, 424 + BUS_PROT_WR(INFRA, 425 + MT8195_TOP_AXI_PROT_EN_MM_VDEC1_2ND, 459 426 MT8195_TOP_AXI_PROT_EN_MM_SET, 460 427 MT8195_TOP_AXI_PROT_EN_MM_CLR, 461 428 MT8195_TOP_AXI_PROT_EN_MM_STA1), ··· 472 435 .pwr_sta2nd_offs = 0x170, 473 436 .sram_pdn_bits = GENMASK(8, 8), 474 437 .sram_pdn_ack_bits = GENMASK(12, 12), 475 - .bp_infracfg = { 476 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_2_VDEC2, 438 + .bp_cfg = { 439 + BUS_PROT_WR(INFRA, 440 + MT8195_TOP_AXI_PROT_EN_MM_2_VDEC2, 477 441 MT8195_TOP_AXI_PROT_EN_MM_2_SET, 478 442 MT8195_TOP_AXI_PROT_EN_MM_2_CLR, 479 443 MT8195_TOP_AXI_PROT_EN_MM_2_STA1), 480 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_2_VDEC2_2ND, 444 + BUS_PROT_WR(INFRA, 445 + MT8195_TOP_AXI_PROT_EN_MM_2_VDEC2_2ND, 481 446 MT8195_TOP_AXI_PROT_EN_MM_2_SET, 482 447 MT8195_TOP_AXI_PROT_EN_MM_2_CLR, 483 448 MT8195_TOP_AXI_PROT_EN_MM_2_STA1), ··· 494 455 .pwr_sta2nd_offs = 0x170, 495 456 .sram_pdn_bits = GENMASK(8, 8), 496 457 .sram_pdn_ack_bits = GENMASK(12, 12), 497 - .bp_infracfg = { 498 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_VENC, 458 + .bp_cfg = { 459 + BUS_PROT_WR(INFRA, 460 + MT8195_TOP_AXI_PROT_EN_MM_VENC, 499 461 MT8195_TOP_AXI_PROT_EN_MM_SET, 500 462 MT8195_TOP_AXI_PROT_EN_MM_CLR, 501 463 MT8195_TOP_AXI_PROT_EN_MM_STA1), 502 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_VENC_2ND, 464 + BUS_PROT_WR(INFRA, 465 + MT8195_TOP_AXI_PROT_EN_MM_VENC_2ND, 503 466 MT8195_TOP_AXI_PROT_EN_MM_SET, 504 467 MT8195_TOP_AXI_PROT_EN_MM_CLR, 505 468 MT8195_TOP_AXI_PROT_EN_MM_STA1), 506 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_2_VENC, 469 + BUS_PROT_WR(INFRA, 470 + MT8195_TOP_AXI_PROT_EN_MM_2_VENC, 507 471 MT8195_TOP_AXI_PROT_EN_MM_2_SET, 508 472 MT8195_TOP_AXI_PROT_EN_MM_2_CLR, 509 473 MT8195_TOP_AXI_PROT_EN_MM_2_STA1), ··· 521 479 .pwr_sta2nd_offs = 0x170, 522 480 .sram_pdn_bits = GENMASK(8, 8), 523 481 .sram_pdn_ack_bits = GENMASK(12, 12), 524 - .bp_infracfg = { 525 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_VENC_CORE1, 482 + .bp_cfg = { 483 + BUS_PROT_WR(INFRA, 484 + MT8195_TOP_AXI_PROT_EN_MM_VENC_CORE1, 526 485 MT8195_TOP_AXI_PROT_EN_MM_SET, 527 486 MT8195_TOP_AXI_PROT_EN_MM_CLR, 528 487 MT8195_TOP_AXI_PROT_EN_MM_STA1), 529 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_2_VENC_CORE1, 488 + BUS_PROT_WR(INFRA, 489 + MT8195_TOP_AXI_PROT_EN_MM_2_VENC_CORE1, 530 490 MT8195_TOP_AXI_PROT_EN_MM_2_SET, 531 491 MT8195_TOP_AXI_PROT_EN_MM_2_CLR, 532 492 MT8195_TOP_AXI_PROT_EN_MM_2_STA1), ··· 543 499 .pwr_sta2nd_offs = 0x170, 544 500 .sram_pdn_bits = GENMASK(8, 8), 545 501 .sram_pdn_ack_bits = GENMASK(12, 12), 546 - .bp_infracfg = { 547 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_IMG, 502 + .bp_cfg = { 503 + BUS_PROT_WR(INFRA, 504 + MT8195_TOP_AXI_PROT_EN_MM_IMG, 548 505 MT8195_TOP_AXI_PROT_EN_MM_SET, 549 506 MT8195_TOP_AXI_PROT_EN_MM_CLR, 550 507 MT8195_TOP_AXI_PROT_EN_MM_STA1), 551 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_IMG_2ND, 508 + BUS_PROT_WR(INFRA, 509 + MT8195_TOP_AXI_PROT_EN_MM_IMG_2ND, 552 510 MT8195_TOP_AXI_PROT_EN_MM_SET, 553 511 MT8195_TOP_AXI_PROT_EN_MM_CLR, 554 512 MT8195_TOP_AXI_PROT_EN_MM_STA1), ··· 575 529 .pwr_sta2nd_offs = 0x170, 576 530 .sram_pdn_bits = GENMASK(8, 8), 577 531 .sram_pdn_ack_bits = GENMASK(12, 12), 578 - .bp_infracfg = { 579 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_IPE, 532 + .bp_cfg = { 533 + BUS_PROT_WR(INFRA, 534 + MT8195_TOP_AXI_PROT_EN_MM_IPE, 580 535 MT8195_TOP_AXI_PROT_EN_MM_SET, 581 536 MT8195_TOP_AXI_PROT_EN_MM_CLR, 582 537 MT8195_TOP_AXI_PROT_EN_MM_STA1), 583 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_2_IPE, 538 + BUS_PROT_WR(INFRA, 539 + MT8195_TOP_AXI_PROT_EN_MM_2_IPE, 584 540 MT8195_TOP_AXI_PROT_EN_MM_2_SET, 585 541 MT8195_TOP_AXI_PROT_EN_MM_2_CLR, 586 542 MT8195_TOP_AXI_PROT_EN_MM_2_STA1), ··· 597 549 .pwr_sta2nd_offs = 0x170, 598 550 .sram_pdn_bits = GENMASK(8, 8), 599 551 .sram_pdn_ack_bits = GENMASK(12, 12), 600 - .bp_infracfg = { 601 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_2_CAM, 552 + .bp_cfg = { 553 + BUS_PROT_WR(INFRA, 554 + MT8195_TOP_AXI_PROT_EN_2_CAM, 602 555 MT8195_TOP_AXI_PROT_EN_2_SET, 603 556 MT8195_TOP_AXI_PROT_EN_2_CLR, 604 557 MT8195_TOP_AXI_PROT_EN_2_STA1), 605 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_CAM, 558 + BUS_PROT_WR(INFRA, 559 + MT8195_TOP_AXI_PROT_EN_MM_CAM, 606 560 MT8195_TOP_AXI_PROT_EN_MM_SET, 607 561 MT8195_TOP_AXI_PROT_EN_MM_CLR, 608 562 MT8195_TOP_AXI_PROT_EN_MM_STA1), 609 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_1_CAM, 563 + BUS_PROT_WR(INFRA, 564 + MT8195_TOP_AXI_PROT_EN_1_CAM, 610 565 MT8195_TOP_AXI_PROT_EN_1_SET, 611 566 MT8195_TOP_AXI_PROT_EN_1_CLR, 612 567 MT8195_TOP_AXI_PROT_EN_1_STA1), 613 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_CAM_2ND, 568 + BUS_PROT_WR(INFRA, 569 + MT8195_TOP_AXI_PROT_EN_MM_CAM_2ND, 614 570 MT8195_TOP_AXI_PROT_EN_MM_SET, 615 571 MT8195_TOP_AXI_PROT_EN_MM_CLR, 616 572 MT8195_TOP_AXI_PROT_EN_MM_STA1), 617 - BUS_PROT_WR(MT8195_TOP_AXI_PROT_EN_MM_2_CAM, 573 + BUS_PROT_WR(INFRA, 574 + MT8195_TOP_AXI_PROT_EN_MM_2_CAM, 618 575 MT8195_TOP_AXI_PROT_EN_MM_2_SET, 619 576 MT8195_TOP_AXI_PROT_EN_MM_2_CLR, 620 577 MT8195_TOP_AXI_PROT_EN_MM_2_STA1),
+197
drivers/pmdomain/mediatek/mt8365-pm-domains.h
··· 1 + /* SPDX-License-Identifier: GPL-2.0-only */ 2 + 3 + #ifndef __SOC_MEDIATEK_MT8365_PM_DOMAINS_H 4 + #define __SOC_MEDIATEK_MT8365_PM_DOMAINS_H 5 + 6 + #include "mtk-pm-domains.h" 7 + #include <dt-bindings/power/mediatek,mt8365-power.h> 8 + 9 + /* 10 + * MT8365 power domain support 11 + */ 12 + 13 + #define MT8365_BUS_PROT_INFRA_WR_TOPAXI(_mask) \ 14 + BUS_PROT_WR(INFRA, _mask, \ 15 + MT8365_INFRA_TOPAXI_PROTECTEN_SET, \ 16 + MT8365_INFRA_TOPAXI_PROTECTEN_CLR, \ 17 + MT8365_INFRA_TOPAXI_PROTECTEN_STA1) 18 + 19 + #define MT8365_BUS_PROT_INFRA_WR_TOPAXI_1(_mask) \ 20 + BUS_PROT_WR(INFRA, _mask, \ 21 + MT8365_INFRA_TOPAXI_PROTECTEN_1_SET, \ 22 + MT8365_INFRA_TOPAXI_PROTECTEN_1_CLR, \ 23 + MT8365_INFRA_TOPAXI_PROTECTEN_1_STA1) 24 + 25 + #define MT8365_BUS_PROT_SMI_WR_CLAMP_EN_PORT(port) \ 26 + BUS_PROT_WR(SMI, BIT(port), \ 27 + MT8365_SMI_COMMON_CLAMP_EN_SET, \ 28 + MT8365_SMI_COMMON_CLAMP_EN_CLR, \ 29 + MT8365_SMI_COMMON_CLAMP_EN) 30 + 31 + #define MT8365_BUS_PROT_WAY_EN(_set_mask, _set, _sta_mask, _sta) \ 32 + _BUS_PROT(_set_mask, _set, _set, _sta_mask, _sta, \ 33 + BUS_PROT_COMPONENT_INFRA | \ 34 + BUS_PROT_STA_COMPONENT_INFRA_NAO | \ 35 + BUS_PROT_INVERTED | \ 36 + BUS_PROT_REG_UPDATE) 37 + 38 + static const struct scpsys_domain_data scpsys_domain_data_mt8365[] = { 39 + [MT8365_POWER_DOMAIN_MM] = { 40 + .name = "mm", 41 + .sta_mask = PWR_STATUS_DISP, 42 + .ctl_offs = 0x30c, 43 + .pwr_sta_offs = 0x0180, 44 + .pwr_sta2nd_offs = 0x0184, 45 + .sram_pdn_bits = GENMASK(8, 8), 46 + .sram_pdn_ack_bits = GENMASK(12, 12), 47 + .bp_cfg = { 48 + MT8365_BUS_PROT_INFRA_WR_TOPAXI_1( 49 + MT8365_INFRA_TOPAXI_PROTECTEN_1_MM2INFRA_AXI_GALS_MST_0 | 50 + MT8365_INFRA_TOPAXI_PROTECTEN_1_MM2INFRA_AXI_GALS_MST_1), 51 + MT8365_BUS_PROT_INFRA_WR_TOPAXI( 52 + MT8365_INFRA_TOPAXI_PROTECTEN_MM_M0 | 53 + MT8365_INFRA_TOPAXI_PROTECTEN_MDMCU_M1 | 54 + MT8365_INFRA_TOPAXI_PROTECTEN_MM2INFRA_AXI_GALS_SLV_0 | 55 + MT8365_INFRA_TOPAXI_PROTECTEN_MM2INFRA_AXI_GALS_SLV_1), 56 + MT8365_BUS_PROT_WAY_EN( 57 + MT8365_INFRA_TOPAXI_SI0_WAY_EN_MMAPB_S, 58 + MT8365_INFRA_TOPAXI_SI0_CTL, 59 + MT8365_INFRA_NAO_TOPAXI_SI0_CTRL_UPDATED, 60 + MT8365_INFRA_NAO_TOPAXI_SI0_STA), 61 + MT8365_BUS_PROT_WAY_EN( 62 + MT8365_INFRA_TOPAXI_SI2_WAY_EN_PERI_M1, 63 + MT8365_INFRA_TOPAXI_SI2_CTL, 64 + MT8365_INFRA_NAO_TOPAXI_SI2_CTRL_UPDATED, 65 + MT8365_INFRA_NAO_TOPAXI_SI2_STA), 66 + MT8365_BUS_PROT_INFRA_WR_TOPAXI( 67 + MT8365_INFRA_TOPAXI_PROTECTEN_MMAPB_S), 68 + }, 69 + .caps = MTK_SCPD_STRICT_BUS_PROTECTION | MTK_SCPD_HAS_INFRA_NAO, 70 + }, 71 + [MT8365_POWER_DOMAIN_VENC] = { 72 + .name = "venc", 73 + .sta_mask = PWR_STATUS_VENC, 74 + .ctl_offs = 0x0304, 75 + .pwr_sta_offs = 0x0180, 76 + .pwr_sta2nd_offs = 0x0184, 77 + .sram_pdn_bits = GENMASK(8, 8), 78 + .sram_pdn_ack_bits = GENMASK(12, 12), 79 + .bp_cfg = { 80 + MT8365_BUS_PROT_SMI_WR_CLAMP_EN_PORT(1), 81 + }, 82 + }, 83 + [MT8365_POWER_DOMAIN_AUDIO] = { 84 + .name = "audio", 85 + .sta_mask = PWR_STATUS_AUDIO, 86 + .ctl_offs = 0x0314, 87 + .pwr_sta_offs = 0x0180, 88 + .pwr_sta2nd_offs = 0x0184, 89 + .sram_pdn_bits = GENMASK(12, 8), 90 + .sram_pdn_ack_bits = GENMASK(17, 13), 91 + .bp_cfg = { 92 + MT8365_BUS_PROT_INFRA_WR_TOPAXI_1( 93 + MT8365_INFRA_TOPAXI_PROTECTEN_1_PWRDNREQ_MP1_L2C_AFIFO | 94 + MT8365_INFRA_TOPAXI_PROTECTEN_1_AUDIO_BUS_AUDIO_M), 95 + }, 96 + .caps = MTK_SCPD_ACTIVE_WAKEUP, 97 + }, 98 + [MT8365_POWER_DOMAIN_CONN] = { 99 + .name = "conn", 100 + .sta_mask = PWR_STATUS_CONN, 101 + .ctl_offs = 0x032c, 102 + .pwr_sta_offs = 0x0180, 103 + .pwr_sta2nd_offs = 0x0184, 104 + .sram_pdn_bits = 0, 105 + .sram_pdn_ack_bits = 0, 106 + .bp_cfg = { 107 + MT8365_BUS_PROT_INFRA_WR_TOPAXI( 108 + MT8365_INFRA_TOPAXI_PROTECTEN_AP2CONN_AHB), 109 + MT8365_BUS_PROT_INFRA_WR_TOPAXI_1( 110 + MT8365_INFRA_TOPAXI_PROTECTEN_1_CONN2INFRA_AXI_GALS_MST), 111 + MT8365_BUS_PROT_INFRA_WR_TOPAXI( 112 + MT8365_INFRA_TOPAXI_PROTECTEN_CONN2INFRA_AHB), 113 + MT8365_BUS_PROT_INFRA_WR_TOPAXI_1( 114 + MT8365_INFRA_TOPAXI_PROTECTEN_1_INFRA2CONN_AHB_GALS_SLV), 115 + }, 116 + .caps = MTK_SCPD_ACTIVE_WAKEUP | MTK_SCPD_KEEP_DEFAULT_OFF, 117 + }, 118 + [MT8365_POWER_DOMAIN_MFG] = { 119 + .name = "mfg", 120 + .sta_mask = PWR_STATUS_MFG, 121 + .ctl_offs = 0x0338, 122 + .pwr_sta_offs = 0x0180, 123 + .pwr_sta2nd_offs = 0x0184, 124 + .sram_pdn_bits = GENMASK(9, 8), 125 + .sram_pdn_ack_bits = GENMASK(13, 12), 126 + .bp_cfg = { 127 + MT8365_BUS_PROT_INFRA_WR_TOPAXI(BIT(25)), 128 + MT8365_BUS_PROT_INFRA_WR_TOPAXI( 129 + MT8365_INFRA_TOPAXI_PROTECTEN_MFG_M0 | 130 + MT8365_INFRA_TOPAXI_PROTECTEN_INFRA2MFG), 131 + }, 132 + }, 133 + [MT8365_POWER_DOMAIN_CAM] = { 134 + .name = "cam", 135 + .sta_mask = BIT(25), 136 + .ctl_offs = 0x0344, 137 + .pwr_sta_offs = 0x0180, 138 + .pwr_sta2nd_offs = 0x0184, 139 + .sram_pdn_bits = GENMASK(9, 8), 140 + .sram_pdn_ack_bits = GENMASK(13, 12), 141 + .bp_cfg = { 142 + MT8365_BUS_PROT_INFRA_WR_TOPAXI_1( 143 + MT8365_INFRA_TOPAXI_PROTECTEN_1_CAM2MM_AXI_GALS_MST), 144 + MT8365_BUS_PROT_SMI_WR_CLAMP_EN_PORT(2), 145 + }, 146 + }, 147 + [MT8365_POWER_DOMAIN_VDEC] = { 148 + .name = "vdec", 149 + .sta_mask = BIT(31), 150 + .ctl_offs = 0x0370, 151 + .pwr_sta_offs = 0x0180, 152 + .pwr_sta2nd_offs = 0x0184, 153 + .sram_pdn_bits = GENMASK(8, 8), 154 + .sram_pdn_ack_bits = GENMASK(12, 12), 155 + .bp_cfg = { 156 + MT8365_BUS_PROT_SMI_WR_CLAMP_EN_PORT(3), 157 + }, 158 + }, 159 + [MT8365_POWER_DOMAIN_APU] = { 160 + .name = "apu", 161 + .sta_mask = BIT(16), 162 + .ctl_offs = 0x0378, 163 + .pwr_sta_offs = 0x0180, 164 + .pwr_sta2nd_offs = 0x0184, 165 + .sram_pdn_bits = GENMASK(14, 8), 166 + .sram_pdn_ack_bits = GENMASK(21, 15), 167 + .bp_cfg = { 168 + MT8365_BUS_PROT_INFRA_WR_TOPAXI_1( 169 + MT8365_INFRA_TOPAXI_PROTECTEN_1_APU2AP | 170 + MT8365_INFRA_TOPAXI_PROTECTEN_1_APU_CBIP_GALS_MST), 171 + MT8365_BUS_PROT_SMI_WR_CLAMP_EN_PORT(4), 172 + }, 173 + }, 174 + [MT8365_POWER_DOMAIN_DSP] = { 175 + .name = "dsp", 176 + .sta_mask = BIT(17), 177 + .ctl_offs = 0x037C, 178 + .pwr_sta_offs = 0x0180, 179 + .pwr_sta2nd_offs = 0x0184, 180 + .sram_pdn_bits = GENMASK(11, 8), 181 + .sram_pdn_ack_bits = GENMASK(15, 12), 182 + .bp_cfg = { 183 + MT8365_BUS_PROT_INFRA_WR_TOPAXI_1( 184 + MT8365_INFRA_TOPAXI_PROTECTEN_1_PWRDNREQ_INFRA_GALS_ADB | 185 + MT8365_INFRA_TOPAXI_PROTECTEN_1_AUDIO_BUS_DSP_M | 186 + MT8365_INFRA_TOPAXI_PROTECTEN_1_AUDIO_BUS_DSP_S), 187 + }, 188 + .caps = MTK_SCPD_ACTIVE_WAKEUP, 189 + }, 190 + }; 191 + 192 + static const struct scpsys_soc_data mt8365_scpsys_data = { 193 + .domains_data = scpsys_domain_data_mt8365, 194 + .num_domains = ARRAY_SIZE(scpsys_domain_data_mt8365), 195 + }; 196 + 197 + #endif /* __SOC_MEDIATEK_MT8365_PM_DOMAINS_H */
+111 -54
drivers/pmdomain/mediatek/mtk-pm-domains.c
··· 24 24 #include "mt8188-pm-domains.h" 25 25 #include "mt8192-pm-domains.h" 26 26 #include "mt8195-pm-domains.h" 27 + #include "mt8365-pm-domains.h" 27 28 28 29 #define MTK_POLL_DELAY_US 10 29 30 #define MTK_POLL_TIMEOUT USEC_PER_SEC ··· 45 44 struct clk_bulk_data *clks; 46 45 int num_subsys_clks; 47 46 struct clk_bulk_data *subsys_clks; 47 + struct regmap *infracfg_nao; 48 48 struct regmap *infracfg; 49 49 struct regmap *smi; 50 50 struct regulator *supply; ··· 120 118 MTK_POLL_TIMEOUT); 121 119 } 122 120 123 - static int _scpsys_bus_protect_enable(const struct scpsys_bus_prot_data *bpd, struct regmap *regmap) 121 + static struct regmap *scpsys_bus_protect_get_regmap(struct scpsys_domain *pd, 122 + const struct scpsys_bus_prot_data *bpd) 124 123 { 125 - int i, ret; 124 + if (bpd->flags & BUS_PROT_COMPONENT_SMI) 125 + return pd->smi; 126 + else 127 + return pd->infracfg; 128 + } 126 129 127 - for (i = 0; i < SPM_MAX_BUS_PROT_DATA; i++) { 128 - u32 val, mask = bpd[i].bus_prot_mask; 130 + static struct regmap *scpsys_bus_protect_get_sta_regmap(struct scpsys_domain *pd, 131 + const struct scpsys_bus_prot_data *bpd) 132 + { 133 + if (bpd->flags & BUS_PROT_STA_COMPONENT_INFRA_NAO) 134 + return pd->infracfg_nao; 135 + else 136 + return scpsys_bus_protect_get_regmap(pd, bpd); 137 + } 129 138 130 - if (!mask) 131 - break; 139 + static int scpsys_bus_protect_clear(struct scpsys_domain *pd, 140 + const struct scpsys_bus_prot_data *bpd) 141 + { 142 + struct regmap *sta_regmap = scpsys_bus_protect_get_sta_regmap(pd, bpd); 143 + struct regmap *regmap = scpsys_bus_protect_get_regmap(pd, bpd); 144 + u32 sta_mask = bpd->bus_prot_sta_mask; 145 + u32 expected_ack; 146 + u32 val; 132 147 133 - if (bpd[i].bus_prot_reg_update) 134 - regmap_set_bits(regmap, bpd[i].bus_prot_set, mask); 135 - else 136 - regmap_write(regmap, bpd[i].bus_prot_set, mask); 148 + expected_ack = (bpd->flags & BUS_PROT_STA_COMPONENT_INFRA_NAO ? sta_mask : 0); 137 149 138 - ret = regmap_read_poll_timeout(regmap, bpd[i].bus_prot_sta, 139 - val, (val & mask) == mask, 140 - MTK_POLL_DELAY_US, MTK_POLL_TIMEOUT); 141 - if (ret) 142 - return ret; 143 - } 150 + if (bpd->flags & BUS_PROT_REG_UPDATE) 151 + regmap_clear_bits(regmap, bpd->bus_prot_clr, bpd->bus_prot_set_clr_mask); 152 + else 153 + regmap_write(regmap, bpd->bus_prot_clr, bpd->bus_prot_set_clr_mask); 144 154 145 - return 0; 155 + if (bpd->flags & BUS_PROT_IGNORE_CLR_ACK) 156 + return 0; 157 + 158 + return regmap_read_poll_timeout(sta_regmap, bpd->bus_prot_sta, 159 + val, (val & sta_mask) == expected_ack, 160 + MTK_POLL_DELAY_US, MTK_POLL_TIMEOUT); 161 + } 162 + 163 + static int scpsys_bus_protect_set(struct scpsys_domain *pd, 164 + const struct scpsys_bus_prot_data *bpd) 165 + { 166 + struct regmap *sta_regmap = scpsys_bus_protect_get_sta_regmap(pd, bpd); 167 + struct regmap *regmap = scpsys_bus_protect_get_regmap(pd, bpd); 168 + u32 sta_mask = bpd->bus_prot_sta_mask; 169 + u32 val; 170 + 171 + if (bpd->flags & BUS_PROT_REG_UPDATE) 172 + regmap_set_bits(regmap, bpd->bus_prot_set, bpd->bus_prot_set_clr_mask); 173 + else 174 + regmap_write(regmap, bpd->bus_prot_set, bpd->bus_prot_set_clr_mask); 175 + 176 + return regmap_read_poll_timeout(sta_regmap, bpd->bus_prot_sta, 177 + val, (val & sta_mask) == sta_mask, 178 + MTK_POLL_DELAY_US, MTK_POLL_TIMEOUT); 146 179 } 147 180 148 181 static int scpsys_bus_protect_enable(struct scpsys_domain *pd) 149 182 { 150 - int ret; 183 + for (int i = 0; i < SPM_MAX_BUS_PROT_DATA; i++) { 184 + const struct scpsys_bus_prot_data *bpd = &pd->data->bp_cfg[i]; 185 + int ret; 151 186 152 - ret = _scpsys_bus_protect_enable(pd->data->bp_infracfg, pd->infracfg); 153 - if (ret) 154 - return ret; 187 + if (!bpd->bus_prot_set_clr_mask) 188 + break; 155 189 156 - return _scpsys_bus_protect_enable(pd->data->bp_smi, pd->smi); 157 - } 158 - 159 - static int _scpsys_bus_protect_disable(const struct scpsys_bus_prot_data *bpd, 160 - struct regmap *regmap) 161 - { 162 - int i, ret; 163 - 164 - for (i = SPM_MAX_BUS_PROT_DATA - 1; i >= 0; i--) { 165 - u32 val, mask = bpd[i].bus_prot_mask; 166 - 167 - if (!mask) 168 - continue; 169 - 170 - if (bpd[i].bus_prot_reg_update) 171 - regmap_clear_bits(regmap, bpd[i].bus_prot_clr, mask); 190 + if (bpd->flags & BUS_PROT_INVERTED) 191 + ret = scpsys_bus_protect_clear(pd, bpd); 172 192 else 173 - regmap_write(regmap, bpd[i].bus_prot_clr, mask); 174 - 175 - if (bpd[i].ignore_clr_ack) 176 - continue; 177 - 178 - ret = regmap_read_poll_timeout(regmap, bpd[i].bus_prot_sta, 179 - val, !(val & mask), 180 - MTK_POLL_DELAY_US, MTK_POLL_TIMEOUT); 193 + ret = scpsys_bus_protect_set(pd, bpd); 181 194 if (ret) 182 195 return ret; 183 196 } ··· 202 185 203 186 static int scpsys_bus_protect_disable(struct scpsys_domain *pd) 204 187 { 205 - int ret; 188 + for (int i = SPM_MAX_BUS_PROT_DATA - 1; i >= 0; i--) { 189 + const struct scpsys_bus_prot_data *bpd = &pd->data->bp_cfg[i]; 190 + int ret; 206 191 207 - ret = _scpsys_bus_protect_disable(pd->data->bp_smi, pd->smi); 208 - if (ret) 209 - return ret; 192 + if (!bpd->bus_prot_set_clr_mask) 193 + continue; 210 194 211 - return _scpsys_bus_protect_disable(pd->data->bp_infracfg, pd->infracfg); 195 + if (bpd->flags & BUS_PROT_INVERTED) 196 + ret = scpsys_bus_protect_set(pd, bpd); 197 + else 198 + ret = scpsys_bus_protect_clear(pd, bpd); 199 + if (ret) 200 + return ret; 201 + } 202 + 203 + return 0; 212 204 } 213 205 214 206 static int scpsys_regulator_enable(struct regulator *supply) ··· 263 237 regmap_clear_bits(scpsys->base, pd->data->ctl_offs, PWR_ISO_BIT); 264 238 regmap_set_bits(scpsys->base, pd->data->ctl_offs, PWR_RST_B_BIT); 265 239 266 - ret = clk_bulk_prepare_enable(pd->num_subsys_clks, pd->subsys_clks); 267 - if (ret) 268 - goto err_pwr_ack; 240 + /* 241 + * In few Mediatek platforms(e.g. MT6779), the bus protect policy is 242 + * stricter, which leads to bus protect release must be prior to bus 243 + * access. 244 + */ 245 + if (!MTK_SCPD_CAPS(pd, MTK_SCPD_STRICT_BUS_PROTECTION)) { 246 + ret = clk_bulk_prepare_enable(pd->num_subsys_clks, 247 + pd->subsys_clks); 248 + if (ret) 249 + goto err_pwr_ack; 250 + } 269 251 270 252 ret = scpsys_sram_enable(pd); 271 253 if (ret < 0) ··· 283 249 if (ret < 0) 284 250 goto err_disable_sram; 285 251 252 + if (MTK_SCPD_CAPS(pd, MTK_SCPD_STRICT_BUS_PROTECTION)) { 253 + ret = clk_bulk_prepare_enable(pd->num_subsys_clks, 254 + pd->subsys_clks); 255 + if (ret) 256 + goto err_enable_bus_protect; 257 + } 258 + 286 259 return 0; 287 260 261 + err_enable_bus_protect: 262 + scpsys_bus_protect_enable(pd); 288 263 err_disable_sram: 289 264 scpsys_sram_disable(pd); 290 265 err_disable_subsys_clks: 291 - clk_bulk_disable_unprepare(pd->num_subsys_clks, pd->subsys_clks); 266 + if (!MTK_SCPD_CAPS(pd, MTK_SCPD_STRICT_BUS_PROTECTION)) 267 + clk_bulk_disable_unprepare(pd->num_subsys_clks, 268 + pd->subsys_clks); 292 269 err_pwr_ack: 293 270 clk_bulk_disable_unprepare(pd->num_clks, pd->clks); 294 271 err_reg: ··· 416 371 of_node_put(smi_node); 417 372 if (IS_ERR(pd->smi)) 418 373 return ERR_CAST(pd->smi); 374 + } 375 + 376 + if (MTK_SCPD_CAPS(pd, MTK_SCPD_HAS_INFRA_NAO)) { 377 + pd->infracfg_nao = syscon_regmap_lookup_by_phandle(node, "mediatek,infracfg-nao"); 378 + if (IS_ERR(pd->infracfg_nao)) 379 + return ERR_CAST(pd->infracfg_nao); 380 + } else { 381 + pd->infracfg_nao = NULL; 419 382 } 420 383 421 384 num_clks = of_clk_get_parent_count(node); ··· 652 599 { 653 600 .compatible = "mediatek,mt8195-power-controller", 654 601 .data = &mt8195_scpsys_data, 602 + }, 603 + { 604 + .compatible = "mediatek,mt8365-power-controller", 605 + .data = &mt8365_scpsys_data, 655 606 }, 656 607 { } 657 608 };
+31 -20
drivers/pmdomain/mediatek/mtk-pm-domains.h
··· 11 11 /* can't set MTK_SCPD_KEEP_DEFAULT_OFF at the same time */ 12 12 #define MTK_SCPD_ALWAYS_ON BIT(5) 13 13 #define MTK_SCPD_EXT_BUCK_ISO BIT(6) 14 + #define MTK_SCPD_HAS_INFRA_NAO BIT(7) 15 + #define MTK_SCPD_STRICT_BUS_PROTECTION BIT(8) 14 16 #define MTK_SCPD_CAPS(_scpd, _x) ((_scpd)->data->caps & (_x)) 15 17 16 18 #define SPM_VDE_PWR_CON 0x0210 ··· 44 42 45 43 #define SPM_MAX_BUS_PROT_DATA 6 46 44 47 - #define _BUS_PROT(_mask, _set, _clr, _sta, _update, _ignore) { \ 48 - .bus_prot_mask = (_mask), \ 45 + enum scpsys_bus_prot_flags { 46 + BUS_PROT_REG_UPDATE = BIT(1), 47 + BUS_PROT_IGNORE_CLR_ACK = BIT(2), 48 + BUS_PROT_INVERTED = BIT(3), 49 + BUS_PROT_COMPONENT_INFRA = BIT(4), 50 + BUS_PROT_COMPONENT_SMI = BIT(5), 51 + BUS_PROT_STA_COMPONENT_INFRA_NAO = BIT(6), 52 + }; 53 + 54 + #define _BUS_PROT(_set_clr_mask, _set, _clr, _sta_mask, _sta, _flags) { \ 55 + .bus_prot_set_clr_mask = (_set_clr_mask), \ 49 56 .bus_prot_set = _set, \ 50 57 .bus_prot_clr = _clr, \ 58 + .bus_prot_sta_mask = (_sta_mask), \ 51 59 .bus_prot_sta = _sta, \ 52 - .bus_prot_reg_update = _update, \ 53 - .ignore_clr_ack = _ignore, \ 60 + .flags = _flags \ 54 61 } 55 62 56 - #define BUS_PROT_WR(_mask, _set, _clr, _sta) \ 57 - _BUS_PROT(_mask, _set, _clr, _sta, false, false) 63 + #define BUS_PROT_WR(_hwip, _mask, _set, _clr, _sta) \ 64 + _BUS_PROT(_mask, _set, _clr, _mask, _sta, BUS_PROT_COMPONENT_##_hwip) 58 65 59 - #define BUS_PROT_WR_IGN(_mask, _set, _clr, _sta) \ 60 - _BUS_PROT(_mask, _set, _clr, _sta, false, true) 66 + #define BUS_PROT_WR_IGN(_hwip, _mask, _set, _clr, _sta) \ 67 + _BUS_PROT(_mask, _set, _clr, _mask, _sta, \ 68 + BUS_PROT_COMPONENT_##_hwip | BUS_PROT_IGNORE_CLR_ACK) 61 69 62 - #define BUS_PROT_UPDATE(_mask, _set, _clr, _sta) \ 63 - _BUS_PROT(_mask, _set, _clr, _sta, true, false) 70 + #define BUS_PROT_UPDATE(_hwip, _mask, _set, _clr, _sta) \ 71 + _BUS_PROT(_mask, _set, _clr, _mask, _sta, \ 72 + BUS_PROT_COMPONENT_##_hwip | BUS_PROT_REG_UPDATE) 64 73 65 - #define BUS_PROT_UPDATE_TOPAXI(_mask) \ 66 - BUS_PROT_UPDATE(_mask, \ 74 + #define BUS_PROT_INFRA_UPDATE_TOPAXI(_mask) \ 75 + BUS_PROT_UPDATE(INFRA, _mask, \ 67 76 INFRA_TOPAXI_PROTECTEN, \ 68 77 INFRA_TOPAXI_PROTECTEN, \ 69 78 INFRA_TOPAXI_PROTECTSTA1) 70 79 71 80 struct scpsys_bus_prot_data { 72 - u32 bus_prot_mask; 81 + u32 bus_prot_set_clr_mask; 73 82 u32 bus_prot_set; 74 83 u32 bus_prot_clr; 84 + u32 bus_prot_sta_mask; 75 85 u32 bus_prot_sta; 76 - bool bus_prot_reg_update; 77 - bool ignore_clr_ack; 86 + u8 flags; 78 87 }; 79 88 80 89 /** ··· 98 85 * @ext_buck_iso_offs: The offset for external buck isolation 99 86 * @ext_buck_iso_mask: The mask for external buck isolation 100 87 * @caps: The flag for active wake-up action. 101 - * @bp_infracfg: bus protection for infracfg subsystem 102 - * @bp_smi: bus protection for smi subsystem 88 + * @bp_cfg: bus protection configuration for any subsystem 103 89 */ 104 90 struct scpsys_domain_data { 105 91 const char *name; ··· 108 96 u32 sram_pdn_ack_bits; 109 97 int ext_buck_iso_offs; 110 98 u32 ext_buck_iso_mask; 111 - u8 caps; 112 - const struct scpsys_bus_prot_data bp_infracfg[SPM_MAX_BUS_PROT_DATA]; 113 - const struct scpsys_bus_prot_data bp_smi[SPM_MAX_BUS_PROT_DATA]; 99 + u16 caps; 100 + const struct scpsys_bus_prot_data bp_cfg[SPM_MAX_BUS_PROT_DATA]; 114 101 int pwr_sta_offs; 115 102 int pwr_sta2nd_offs; 116 103 };
+41
drivers/pmdomain/qcom/Kconfig
··· 1 + # SPDX-License-Identifier: GPL-2.0-only 2 + menu "Qualcomm PM Domains" 3 + 4 + config QCOM_CPR 5 + tristate "QCOM Core Power Reduction (CPR) support" 6 + depends on ARCH_QCOM && HAS_IOMEM 7 + select PM_OPP 8 + select REGMAP 9 + help 10 + Say Y here to enable support for the CPR hardware found on Qualcomm 11 + SoCs like QCS404. 12 + 13 + This driver populates CPU OPPs tables and makes adjustments to the 14 + tables based on feedback from the CPR hardware. If you want to do 15 + CPUfrequency scaling say Y here. 16 + 17 + To compile this driver as a module, choose M here: the module will 18 + be called qcom-cpr 19 + 20 + config QCOM_RPMHPD 21 + tristate "Qualcomm RPMh Power domain driver" 22 + depends on QCOM_RPMH && QCOM_COMMAND_DB 23 + help 24 + QCOM RPMh Power domain driver to support power-domains with 25 + performance states. The driver communicates a performance state 26 + value to RPMh which then translates it into corresponding voltage 27 + for the voltage rail. 28 + 29 + config QCOM_RPMPD 30 + tristate "Qualcomm RPM Power domain driver" 31 + depends on PM && OF 32 + depends on QCOM_SMD_RPM 33 + select PM_GENERIC_DOMAINS 34 + select PM_GENERIC_DOMAINS_OF 35 + help 36 + QCOM RPM Power domain driver to support power-domains with 37 + performance states. The driver communicates a performance state 38 + value to RPM which then translates it into corresponding voltage 39 + for the voltage rail. 40 + 41 + endmenu
-7
drivers/pmdomain/qcom/cpr.c
··· 1424 1424 .acc_desc = &qcs404_acc_desc, 1425 1425 }; 1426 1426 1427 - static unsigned int cpr_get_performance_state(struct generic_pm_domain *genpd, 1428 - struct dev_pm_opp *opp) 1429 - { 1430 - return dev_pm_opp_get_level(opp); 1431 - } 1432 - 1433 1427 static int cpr_power_off(struct generic_pm_domain *domain) 1434 1428 { 1435 1429 struct cpr_drv *drv = container_of(domain, struct cpr_drv, pd); ··· 1692 1698 drv->pd.power_off = cpr_power_off; 1693 1699 drv->pd.power_on = cpr_power_on; 1694 1700 drv->pd.set_performance_state = cpr_set_performance_state; 1695 - drv->pd.opp_to_performance_state = cpr_get_performance_state; 1696 1701 drv->pd.attach_dev = cpr_pd_attach_dev; 1697 1702 1698 1703 ret = pm_genpd_init(&drv->pd, NULL, true);
+76 -7
drivers/pmdomain/qcom/rpmhpd.c
··· 197 197 .res_name = "nsp1.lvl", 198 198 }; 199 199 200 + static struct rpmhpd nsp2 = { 201 + .pd = { .name = "nsp2", }, 202 + .res_name = "nsp2.lvl", 203 + }; 204 + 200 205 static struct rpmhpd qphy = { 201 206 .pd = { .name = "qphy", }, 202 207 .res_name = "qphy.lvl", 208 + }; 209 + 210 + static struct rpmhpd gmxc = { 211 + .pd = { .name = "gmxc", }, 212 + .res_name = "gmxc.lvl", 203 213 }; 204 214 205 215 /* SA8540P RPMH powerdomains */ ··· 347 337 .num_pds = ARRAY_SIZE(sm6350_rpmhpds), 348 338 }; 349 339 340 + /* SM7150 RPMH powerdomains */ 341 + static struct rpmhpd *sm7150_rpmhpds[] = { 342 + [RPMHPD_CX] = &cx_w_mx_parent, 343 + [RPMHPD_CX_AO] = &cx_ao_w_mx_parent, 344 + [RPMHPD_GFX] = &gfx, 345 + [RPMHPD_LCX] = &lcx, 346 + [RPMHPD_LMX] = &lmx, 347 + [RPMHPD_MX] = &mx, 348 + [RPMHPD_MX_AO] = &mx_ao, 349 + [RPMHPD_MSS] = &mss, 350 + }; 351 + 352 + static const struct rpmhpd_desc sm7150_desc = { 353 + .rpmhpds = sm7150_rpmhpds, 354 + .num_pds = ARRAY_SIZE(sm7150_rpmhpds), 355 + }; 356 + 350 357 /* SM8150 RPMH powerdomains */ 351 358 static struct rpmhpd *sm8150_rpmhpds[] = { 352 359 [SM8150_CX] = &cx_w_mx_parent, ··· 485 458 .num_pds = ARRAY_SIZE(sm8550_rpmhpds), 486 459 }; 487 460 461 + /* SM8650 RPMH powerdomains */ 462 + static struct rpmhpd *sm8650_rpmhpds[] = { 463 + [RPMHPD_CX] = &cx, 464 + [RPMHPD_CX_AO] = &cx_ao, 465 + [RPMHPD_EBI] = &ebi, 466 + [RPMHPD_GFX] = &gfx, 467 + [RPMHPD_LCX] = &lcx, 468 + [RPMHPD_LMX] = &lmx, 469 + [RPMHPD_MMCX] = &mmcx_w_cx_parent, 470 + [RPMHPD_MMCX_AO] = &mmcx_ao_w_cx_parent, 471 + [RPMHPD_MSS] = &mss, 472 + [RPMHPD_MX] = &mx, 473 + [RPMHPD_MX_AO] = &mx_ao, 474 + [RPMHPD_MXC] = &mxc, 475 + [RPMHPD_MXC_AO] = &mxc_ao, 476 + [RPMHPD_NSP] = &nsp, 477 + [RPMHPD_NSP2] = &nsp2, 478 + }; 479 + 480 + static const struct rpmhpd_desc sm8650_desc = { 481 + .rpmhpds = sm8650_rpmhpds, 482 + .num_pds = ARRAY_SIZE(sm8650_rpmhpds), 483 + }; 484 + 488 485 /* QDU1000/QRU1000 RPMH powerdomains */ 489 486 static struct rpmhpd *qdu1000_rpmhpds[] = { 490 487 [QDU1000_CX] = &cx, ··· 598 547 .num_pds = ARRAY_SIZE(sc8280xp_rpmhpds), 599 548 }; 600 549 550 + /* SC8380xp RPMH powerdomains */ 551 + static struct rpmhpd *sc8380xp_rpmhpds[] = { 552 + [RPMHPD_CX] = &cx, 553 + [RPMHPD_CX_AO] = &cx_ao, 554 + [RPMHPD_EBI] = &ebi, 555 + [RPMHPD_GFX] = &gfx, 556 + [RPMHPD_LCX] = &lcx, 557 + [RPMHPD_LMX] = &lmx, 558 + [RPMHPD_MMCX] = &mmcx, 559 + [RPMHPD_MMCX_AO] = &mmcx_ao, 560 + [RPMHPD_MX] = &mx, 561 + [RPMHPD_MX_AO] = &mx_ao, 562 + [RPMHPD_NSP] = &nsp, 563 + [RPMHPD_MXC] = &mxc, 564 + [RPMHPD_GMXC] = &gmxc, 565 + }; 566 + 567 + static const struct rpmhpd_desc sc8380xp_desc = { 568 + .rpmhpds = sc8380xp_rpmhpds, 569 + .num_pds = ARRAY_SIZE(sc8380xp_rpmhpds), 570 + }; 571 + 601 572 static const struct of_device_id rpmhpd_match_table[] = { 602 573 { .compatible = "qcom,qdu1000-rpmhpd", .data = &qdu1000_desc }, 603 574 { .compatible = "qcom,sa8155p-rpmhpd", .data = &sa8155p_desc }, ··· 629 556 { .compatible = "qcom,sc7280-rpmhpd", .data = &sc7280_desc }, 630 557 { .compatible = "qcom,sc8180x-rpmhpd", .data = &sc8180x_desc }, 631 558 { .compatible = "qcom,sc8280xp-rpmhpd", .data = &sc8280xp_desc }, 559 + { .compatible = "qcom,sc8380xp-rpmhpd", .data = &sc8380xp_desc }, 632 560 { .compatible = "qcom,sdm670-rpmhpd", .data = &sdm670_desc }, 633 561 { .compatible = "qcom,sdm845-rpmhpd", .data = &sdm845_desc }, 634 562 { .compatible = "qcom,sdx55-rpmhpd", .data = &sdx55_desc}, 635 563 { .compatible = "qcom,sdx65-rpmhpd", .data = &sdx65_desc}, 636 564 { .compatible = "qcom,sdx75-rpmhpd", .data = &sdx75_desc}, 637 565 { .compatible = "qcom,sm6350-rpmhpd", .data = &sm6350_desc }, 566 + { .compatible = "qcom,sm7150-rpmhpd", .data = &sm7150_desc }, 638 567 { .compatible = "qcom,sm8150-rpmhpd", .data = &sm8150_desc }, 639 568 { .compatible = "qcom,sm8250-rpmhpd", .data = &sm8250_desc }, 640 569 { .compatible = "qcom,sm8350-rpmhpd", .data = &sm8350_desc }, 641 570 { .compatible = "qcom,sm8450-rpmhpd", .data = &sm8450_desc }, 642 571 { .compatible = "qcom,sm8550-rpmhpd", .data = &sm8550_desc }, 572 + { .compatible = "qcom,sm8650-rpmhpd", .data = &sm8650_desc }, 643 573 { } 644 574 }; 645 575 MODULE_DEVICE_TABLE(of, rpmhpd_match_table); ··· 801 725 return ret; 802 726 } 803 727 804 - static unsigned int rpmhpd_get_performance_state(struct generic_pm_domain *genpd, 805 - struct dev_pm_opp *opp) 806 - { 807 - return dev_pm_opp_get_level(opp); 808 - } 809 - 810 728 static int rpmhpd_update_level_mapping(struct rpmhpd *rpmhpd) 811 729 { 812 730 int i; ··· 890 820 rpmhpds[i]->pd.power_off = rpmhpd_power_off; 891 821 rpmhpds[i]->pd.power_on = rpmhpd_power_on; 892 822 rpmhpds[i]->pd.set_performance_state = rpmhpd_set_performance_state; 893 - rpmhpds[i]->pd.opp_to_performance_state = rpmhpd_get_performance_state; 894 823 pm_genpd_init(&rpmhpds[i]->pd, NULL, true); 895 824 896 825 data->domains[i] = &rpmhpds[i]->pd;
+91 -7
drivers/pmdomain/qcom/rpmpd.c
··· 105 105 .key = KEY_CORNER, 106 106 }; 107 107 108 + static struct rpmpd cx_s1a_lvl_ao; 109 + static struct rpmpd cx_s1a_lvl = { 110 + .pd = { .name = "cx", }, 111 + .peer = &cx_s1a_lvl_ao, 112 + .res_type = RPMPD_SMPA, 113 + .res_id = 1, 114 + .key = KEY_LEVEL, 115 + }; 116 + 117 + static struct rpmpd cx_s1a_lvl_ao = { 118 + .pd = { .name = "cx_ao", }, 119 + .peer = &cx_s1a_lvl, 120 + .active_only = true, 121 + .res_type = RPMPD_SMPA, 122 + .res_id = 1, 123 + .key = KEY_LEVEL, 124 + }; 125 + 108 126 static struct rpmpd cx_s2a_corner_ao; 109 127 static struct rpmpd cx_s2a_corner = { 110 128 .pd = { .name = "cx", }, ··· 198 180 .key = KEY_FLOOR_CORNER, 199 181 }; 200 182 183 + static struct rpmpd cx_s1a_vfl = { 184 + .pd = { .name = "cx_vfl", }, 185 + .res_type = RPMPD_SMPA, 186 + .res_id = 1, 187 + .key = KEY_FLOOR_LEVEL, 188 + }; 189 + 201 190 static struct rpmpd cx_s2a_vfc = { 202 191 .pd = { .name = "cx_vfc", }, 203 192 .res_type = RPMPD_SMPA, ··· 264 239 }; 265 240 266 241 /* MX */ 242 + static struct rpmpd mx_l2a_lvl_ao; 243 + static struct rpmpd mx_l2a_lvl = { 244 + .pd = { .name = "mx", }, 245 + .peer = &mx_l2a_lvl_ao, 246 + .res_type = RPMPD_LDOA, 247 + .res_id = 2, 248 + .key = KEY_LEVEL, 249 + }; 250 + 251 + static struct rpmpd mx_l2a_lvl_ao = { 252 + .pd = { .name = "mx_ao", }, 253 + .peer = &mx_l2a_lvl, 254 + .active_only = true, 255 + .res_type = RPMPD_LDOA, 256 + .res_id = 2, 257 + .key = KEY_LEVEL, 258 + }; 259 + 267 260 static struct rpmpd mx_l3a_corner_ao; 268 261 static struct rpmpd mx_l3a_corner = { 269 262 .pd = { .name = "mx", }, ··· 298 255 .res_type = RPMPD_LDOA, 299 256 .res_id = 3, 300 257 .key = KEY_CORNER, 258 + }; 259 + 260 + static struct rpmpd mx_l3a_lvl_ao; 261 + static struct rpmpd mx_l3a_lvl = { 262 + .pd = { .name = "mx", }, 263 + .peer = &mx_l3a_lvl_ao, 264 + .res_type = RPMPD_LDOA, 265 + .res_id = 3, 266 + .key = KEY_LEVEL, 267 + }; 268 + 269 + static struct rpmpd mx_l3a_lvl_ao = { 270 + .pd = { .name = "mx_ao", }, 271 + .peer = &mx_l3a_lvl, 272 + .active_only = true, 273 + .res_type = RPMPD_LDOA, 274 + .res_id = 3, 275 + .key = KEY_LEVEL, 301 276 }; 302 277 303 278 static struct rpmpd mx_l12a_lvl_ao; ··· 633 572 .max_state = MAX_CORNER_RPMPD_STATE, 634 573 }; 635 574 575 + static struct rpmpd *msm8917_rpmpds[] = { 576 + [MSM8917_VDDCX] = &cx_s2a_lvl, 577 + [MSM8917_VDDCX_AO] = &cx_s2a_lvl_ao, 578 + [MSM8917_VDDCX_VFL] = &cx_s2a_vfl, 579 + [MSM8917_VDDMX] = &mx_l3a_lvl, 580 + [MSM8917_VDDMX_AO] = &mx_l3a_lvl_ao, 581 + }; 582 + 583 + static const struct rpmpd_desc msm8917_desc = { 584 + .rpmpds = msm8917_rpmpds, 585 + .num_pds = ARRAY_SIZE(msm8917_rpmpds), 586 + .max_state = RPM_SMD_LEVEL_TURBO, 587 + }; 588 + 636 589 static struct rpmpd *msm8953_rpmpds[] = { 637 590 [MSM8953_VDDMD] = &md_s1a_lvl, 638 591 [MSM8953_VDDMD_AO] = &md_s1a_lvl_ao, ··· 747 672 .max_state = RPM_SMD_LEVEL_BINNING, 748 673 }; 749 674 675 + static struct rpmpd *qm215_rpmpds[] = { 676 + [QM215_VDDCX] = &cx_s1a_lvl, 677 + [QM215_VDDCX_AO] = &cx_s1a_lvl_ao, 678 + [QM215_VDDCX_VFL] = &cx_s1a_vfl, 679 + [QM215_VDDMX] = &mx_l2a_lvl, 680 + [QM215_VDDMX_AO] = &mx_l2a_lvl_ao, 681 + }; 682 + 683 + static const struct rpmpd_desc qm215_desc = { 684 + .rpmpds = qm215_rpmpds, 685 + .num_pds = ARRAY_SIZE(qm215_rpmpds), 686 + .max_state = RPM_SMD_LEVEL_TURBO, 687 + }; 688 + 750 689 static struct rpmpd *sdm660_rpmpds[] = { 751 690 [SDM660_VDDCX] = &cx_rwcx0_lvl, 752 691 [SDM660_VDDCX_AO] = &cx_rwcx0_lvl_ao, ··· 853 764 { .compatible = "qcom,msm8226-rpmpd", .data = &msm8226_desc }, 854 765 { .compatible = "qcom,msm8909-rpmpd", .data = &msm8916_desc }, 855 766 { .compatible = "qcom,msm8916-rpmpd", .data = &msm8916_desc }, 767 + { .compatible = "qcom,msm8917-rpmpd", .data = &msm8917_desc }, 856 768 { .compatible = "qcom,msm8939-rpmpd", .data = &msm8939_desc }, 857 769 { .compatible = "qcom,msm8953-rpmpd", .data = &msm8953_desc }, 858 770 { .compatible = "qcom,msm8976-rpmpd", .data = &msm8976_desc }, ··· 862 772 { .compatible = "qcom,msm8998-rpmpd", .data = &msm8998_desc }, 863 773 { .compatible = "qcom,qcm2290-rpmpd", .data = &qcm2290_desc }, 864 774 { .compatible = "qcom,qcs404-rpmpd", .data = &qcs404_desc }, 775 + { .compatible = "qcom,qm215-rpmpd", .data = &qm215_desc }, 865 776 { .compatible = "qcom,sdm660-rpmpd", .data = &sdm660_desc }, 866 777 { .compatible = "qcom,sm6115-rpmpd", .data = &sm6115_desc }, 867 778 { .compatible = "qcom,sm6125-rpmpd", .data = &sm6125_desc }, ··· 999 908 return ret; 1000 909 } 1001 910 1002 - static unsigned int rpmpd_get_performance(struct generic_pm_domain *genpd, 1003 - struct dev_pm_opp *opp) 1004 - { 1005 - return dev_pm_opp_get_level(opp); 1006 - } 1007 - 1008 911 static int rpmpd_probe(struct platform_device *pdev) 1009 912 { 1010 913 int i; ··· 1044 959 rpmpds[i]->pd.power_off = rpmpd_power_off; 1045 960 rpmpds[i]->pd.power_on = rpmpd_power_on; 1046 961 rpmpds[i]->pd.set_performance_state = rpmpd_set_performance; 1047 - rpmpds[i]->pd.opp_to_performance_state = rpmpd_get_performance; 1048 962 pm_genpd_init(&rpmpds[i]->pd, NULL, true); 1049 963 1050 964 data->domains[i] = &rpmpds[i]->pd;
+109
drivers/pmdomain/renesas/Kconfig
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + if SOC_RENESAS 3 + 4 + config SYSC_RCAR 5 + bool "System Controller support for R-Car" if COMPILE_TEST 6 + 7 + config SYSC_RCAR_GEN4 8 + bool "System Controller support for R-Car Gen4" if COMPILE_TEST 9 + 10 + config SYSC_R8A77995 11 + bool "System Controller support for R-Car D3" if COMPILE_TEST 12 + select SYSC_RCAR 13 + 14 + config SYSC_R8A7794 15 + bool "System Controller support for R-Car E2" if COMPILE_TEST 16 + select SYSC_RCAR 17 + 18 + config SYSC_R8A77990 19 + bool "System Controller support for R-Car E3" if COMPILE_TEST 20 + select SYSC_RCAR 21 + 22 + config SYSC_R8A7779 23 + bool "System Controller support for R-Car H1" if COMPILE_TEST 24 + select SYSC_RCAR 25 + 26 + config SYSC_R8A7790 27 + bool "System Controller support for R-Car H2" if COMPILE_TEST 28 + select SYSC_RCAR 29 + 30 + config SYSC_R8A7795 31 + bool "System Controller support for R-Car H3" if COMPILE_TEST 32 + select SYSC_RCAR 33 + 34 + config SYSC_R8A7791 35 + bool "System Controller support for R-Car M2-W/N" if COMPILE_TEST 36 + select SYSC_RCAR 37 + 38 + config SYSC_R8A77965 39 + bool "System Controller support for R-Car M3-N" if COMPILE_TEST 40 + select SYSC_RCAR 41 + 42 + config SYSC_R8A77960 43 + bool "System Controller support for R-Car M3-W" if COMPILE_TEST 44 + select SYSC_RCAR 45 + 46 + config SYSC_R8A77961 47 + bool "System Controller support for R-Car M3-W+" if COMPILE_TEST 48 + select SYSC_RCAR 49 + 50 + config SYSC_R8A779F0 51 + bool "System Controller support for R-Car S4-8" if COMPILE_TEST 52 + select SYSC_RCAR_GEN4 53 + 54 + config SYSC_R8A7792 55 + bool "System Controller support for R-Car V2H" if COMPILE_TEST 56 + select SYSC_RCAR 57 + 58 + config SYSC_R8A77980 59 + bool "System Controller support for R-Car V3H" if COMPILE_TEST 60 + select SYSC_RCAR 61 + 62 + config SYSC_R8A77970 63 + bool "System Controller support for R-Car V3M" if COMPILE_TEST 64 + select SYSC_RCAR 65 + 66 + config SYSC_R8A779A0 67 + bool "System Controller support for R-Car V3U" if COMPILE_TEST 68 + select SYSC_RCAR_GEN4 69 + 70 + config SYSC_R8A779G0 71 + bool "System Controller support for R-Car V4H" if COMPILE_TEST 72 + select SYSC_RCAR_GEN4 73 + 74 + config SYSC_RMOBILE 75 + bool "System Controller support for R-Mobile" if COMPILE_TEST 76 + 77 + config SYSC_R8A77470 78 + bool "System Controller support for RZ/G1C" if COMPILE_TEST 79 + select SYSC_RCAR 80 + 81 + config SYSC_R8A7745 82 + bool "System Controller support for RZ/G1E" if COMPILE_TEST 83 + select SYSC_RCAR 84 + 85 + config SYSC_R8A7742 86 + bool "System Controller support for RZ/G1H" if COMPILE_TEST 87 + select SYSC_RCAR 88 + 89 + config SYSC_R8A7743 90 + bool "System Controller support for RZ/G1M" if COMPILE_TEST 91 + select SYSC_RCAR 92 + 93 + config SYSC_R8A774C0 94 + bool "System Controller support for RZ/G2E" if COMPILE_TEST 95 + select SYSC_RCAR 96 + 97 + config SYSC_R8A774E1 98 + bool "System Controller support for RZ/G2H" if COMPILE_TEST 99 + select SYSC_RCAR 100 + 101 + config SYSC_R8A774A1 102 + bool "System Controller support for RZ/G2M" if COMPILE_TEST 103 + select SYSC_RCAR 104 + 105 + config SYSC_R8A774B1 106 + bool "System Controller support for RZ/G2N" if COMPILE_TEST 107 + select SYSC_RCAR 108 + 109 + endif
+1 -1
drivers/pmdomain/renesas/rmobile-sysc.c
··· 190 190 191 191 /* PM domains containing other special devices */ 192 192 for_each_matching_node_and_match(np, special_ids, &id) 193 - add_special_pd(np, (enum pd_types)id->data); 193 + add_special_pd(np, (uintptr_t)id->data); 194 194 } 195 195 196 196 static void __init put_special_pds(void)
+16
drivers/pmdomain/rockchip/Kconfig
··· 1 + # SPDX-License-Identifier: GPL-2.0-only 2 + if ARCH_ROCKCHIP || COMPILE_TEST 3 + 4 + config ROCKCHIP_PM_DOMAINS 5 + bool "Rockchip generic power domain" 6 + depends on PM 7 + select PM_GENERIC_DOMAINS 8 + help 9 + Say y here to enable power domain support. 10 + In order to meet high performance and low power requirements, a power 11 + management unit is designed or saving power when RK3288 in low power 12 + mode. The RK3288 PMU is dedicated for managing the power of the whole chip. 13 + 14 + If unsure, say N. 15 + 16 + endif
+4 -9
drivers/pmdomain/rockchip/pm-domains.c
··· 9 9 #include <linux/iopoll.h> 10 10 #include <linux/err.h> 11 11 #include <linux/mutex.h> 12 + #include <linux/platform_device.h> 12 13 #include <linux/pm_clock.h> 13 14 #include <linux/pm_domain.h> 15 + #include <linux/property.h> 16 + #include <linux/of.h> 14 17 #include <linux/of_address.h> 15 18 #include <linux/of_clk.h> 16 - #include <linux/of_platform.h> 17 19 #include <linux/clk.h> 18 20 #include <linux/regmap.h> 19 21 #include <linux/mfd/syscon.h> ··· 859 857 struct device_node *node; 860 858 struct device *parent; 861 859 struct rockchip_pmu *pmu; 862 - const struct of_device_id *match; 863 860 const struct rockchip_pmu_info *pmu_info; 864 861 int error; 865 862 ··· 867 866 return -ENODEV; 868 867 } 869 868 870 - match = of_match_device(dev->driver->of_match_table, dev); 871 - if (!match || !match->data) { 872 - dev_err(dev, "missing pmu data\n"); 873 - return -EINVAL; 874 - } 875 - 876 - pmu_info = match->data; 869 + pmu_info = device_get_match_data(dev); 877 870 878 871 pmu = devm_kzalloc(dev, 879 872 struct_size(pmu, domains, pmu_info->num_domains),
+8
drivers/pmdomain/samsung/Kconfig
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + if SOC_SAMSUNG 3 + 4 + config EXYNOS_PM_DOMAINS 5 + bool "Exynos PM domains" if COMPILE_TEST 6 + depends on (ARCH_EXYNOS && PM_GENERIC_DOMAINS) || COMPILE_TEST 7 + 8 + endif
+5
drivers/pmdomain/st/Kconfig
··· 1 + # SPDX-License-Identifier: GPL-2.0-only 2 + config UX500_PM_DOMAIN 3 + bool "ST-Ericsson ux500 Power Domain" 4 + depends on ARCH_U8500 || COMPILE_TEST 5 + default ARCH_U8500
+1 -1
drivers/pmdomain/st/Makefile
··· 1 1 # SPDX-License-Identifier: GPL-2.0-only 2 - obj-$(CONFIG_ARCH_U8500) += ste-ux500-pm-domain.o 2 + obj-$(CONFIG_UX500_PM_DOMAIN) += ste-ux500-pm-domain.o
+110 -29
drivers/pmdomain/starfive/jh71xx-pmu.c
··· 2 2 /* 3 3 * StarFive JH71XX PMU (Power Management Unit) Controller Driver 4 4 * 5 - * Copyright (C) 2022 StarFive Technology Co., Ltd. 5 + * Copyright (C) 2022-2023 StarFive Technology Co., Ltd. 6 6 */ 7 7 8 8 #include <linux/interrupt.h> ··· 10 10 #include <linux/iopoll.h> 11 11 #include <linux/module.h> 12 12 #include <linux/of.h> 13 - #include <linux/of_device.h> 14 13 #include <linux/platform_device.h> 15 14 #include <linux/pm_domain.h> 16 15 #include <dt-bindings/power/starfive,jh7110-pmu.h> ··· 22 23 #define JH71XX_PMU_CURR_POWER_MODE 0x80 23 24 #define JH71XX_PMU_EVENT_STATUS 0x88 24 25 #define JH71XX_PMU_INT_STATUS 0x8C 26 + 27 + /* aon pmu register offset */ 28 + #define JH71XX_AON_PMU_SWITCH 0x00 25 29 26 30 /* sw encourage cfg */ 27 31 #define JH71XX_PMU_SW_ENCOURAGE_EN_LO 0x05 ··· 53 51 u8 bit; 54 52 }; 55 53 54 + struct jh71xx_pmu; 55 + struct jh71xx_pmu_dev; 56 + 56 57 struct jh71xx_pmu_match_data { 57 58 const struct jh71xx_domain_info *domain_info; 58 59 int num_domains; 60 + unsigned int pmu_status; 61 + int (*pmu_parse_irq)(struct platform_device *pdev, 62 + struct jh71xx_pmu *pmu); 63 + int (*pmu_set_state)(struct jh71xx_pmu_dev *pmd, 64 + u32 mask, bool on); 59 65 }; 60 66 61 67 struct jh71xx_pmu { ··· 89 79 if (!mask) 90 80 return -EINVAL; 91 81 92 - *is_on = readl(pmu->base + JH71XX_PMU_CURR_POWER_MODE) & mask; 82 + *is_on = readl(pmu->base + pmu->match_data->pmu_status) & mask; 93 83 94 84 return 0; 95 85 } 96 86 97 - static int jh71xx_pmu_set_state(struct jh71xx_pmu_dev *pmd, u32 mask, bool on) 87 + static int jh7110_pmu_set_state(struct jh71xx_pmu_dev *pmd, u32 mask, bool on) 98 88 { 99 89 struct jh71xx_pmu *pmu = pmd->pmu; 100 90 unsigned long flags; ··· 102 92 u32 mode; 103 93 u32 encourage_lo; 104 94 u32 encourage_hi; 105 - bool is_on; 106 95 int ret; 107 - 108 - ret = jh71xx_pmu_get_state(pmd, mask, &is_on); 109 - if (ret) { 110 - dev_dbg(pmu->dev, "unable to get current state for %s\n", 111 - pmd->genpd.name); 112 - return ret; 113 - } 114 - 115 - if (is_on == on) { 116 - dev_dbg(pmu->dev, "pm domain [%s] is already %sable status.\n", 117 - pmd->genpd.name, on ? "en" : "dis"); 118 - return 0; 119 - } 120 96 121 97 spin_lock_irqsave(&pmu->lock, flags); 122 98 ··· 160 164 } 161 165 162 166 return 0; 167 + } 168 + 169 + static int jh7110_aon_pmu_set_state(struct jh71xx_pmu_dev *pmd, u32 mask, bool on) 170 + { 171 + struct jh71xx_pmu *pmu = pmd->pmu; 172 + unsigned long flags; 173 + u32 val; 174 + 175 + spin_lock_irqsave(&pmu->lock, flags); 176 + val = readl(pmu->base + JH71XX_AON_PMU_SWITCH); 177 + 178 + if (on) 179 + val |= mask; 180 + else 181 + val &= ~mask; 182 + 183 + writel(val, pmu->base + JH71XX_AON_PMU_SWITCH); 184 + spin_unlock_irqrestore(&pmu->lock, flags); 185 + 186 + return 0; 187 + } 188 + 189 + static int jh71xx_pmu_set_state(struct jh71xx_pmu_dev *pmd, u32 mask, bool on) 190 + { 191 + struct jh71xx_pmu *pmu = pmd->pmu; 192 + const struct jh71xx_pmu_match_data *match_data = pmu->match_data; 193 + bool is_on; 194 + int ret; 195 + 196 + ret = jh71xx_pmu_get_state(pmd, mask, &is_on); 197 + if (ret) { 198 + dev_dbg(pmu->dev, "unable to get current state for %s\n", 199 + pmd->genpd.name); 200 + return ret; 201 + } 202 + 203 + if (is_on == on) { 204 + dev_dbg(pmu->dev, "pm domain [%s] is already %sable status.\n", 205 + pmd->genpd.name, on ? "en" : "dis"); 206 + return 0; 207 + } 208 + 209 + return match_data->pmu_set_state(pmd, mask, on); 163 210 } 164 211 165 212 static int jh71xx_pmu_on(struct generic_pm_domain *genpd) ··· 265 226 return IRQ_HANDLED; 266 227 } 267 228 229 + static int jh7110_pmu_parse_irq(struct platform_device *pdev, struct jh71xx_pmu *pmu) 230 + { 231 + struct device *dev = &pdev->dev; 232 + int ret; 233 + 234 + pmu->irq = platform_get_irq(pdev, 0); 235 + if (pmu->irq < 0) 236 + return pmu->irq; 237 + 238 + ret = devm_request_irq(dev, pmu->irq, jh71xx_pmu_interrupt, 239 + 0, pdev->name, pmu); 240 + if (ret) 241 + dev_err(dev, "failed to request irq\n"); 242 + 243 + jh71xx_pmu_int_enable(pmu, JH71XX_PMU_INT_ALL_MASK & ~JH71XX_PMU_INT_PCH_FAIL, true); 244 + 245 + return 0; 246 + } 247 + 268 248 static int jh71xx_pmu_init_domain(struct jh71xx_pmu *pmu, int index) 269 249 { 270 250 struct jh71xx_pmu_dev *pmd; ··· 333 275 if (IS_ERR(pmu->base)) 334 276 return PTR_ERR(pmu->base); 335 277 336 - pmu->irq = platform_get_irq(pdev, 0); 337 - if (pmu->irq < 0) 338 - return pmu->irq; 339 - 340 - ret = devm_request_irq(dev, pmu->irq, jh71xx_pmu_interrupt, 341 - 0, pdev->name, pmu); 342 - if (ret) 343 - dev_err(dev, "failed to request irq\n"); 278 + spin_lock_init(&pmu->lock); 344 279 345 280 match_data = of_device_get_match_data(dev); 346 281 if (!match_data) 347 282 return -EINVAL; 283 + 284 + if (match_data->pmu_parse_irq) { 285 + ret = match_data->pmu_parse_irq(pdev, pmu); 286 + if (ret) { 287 + dev_err(dev, "failed to parse irq\n"); 288 + return ret; 289 + } 290 + } 348 291 349 292 pmu->genpd = devm_kcalloc(dev, match_data->num_domains, 350 293 sizeof(struct generic_pm_domain *), ··· 365 306 return ret; 366 307 } 367 308 } 368 - 369 - spin_lock_init(&pmu->lock); 370 - jh71xx_pmu_int_enable(pmu, JH71XX_PMU_INT_ALL_MASK & ~JH71XX_PMU_INT_PCH_FAIL, true); 371 309 372 310 ret = of_genpd_add_provider_onecell(np, &pmu->genpd_data); 373 311 if (ret) { ··· 413 357 static const struct jh71xx_pmu_match_data jh7110_pmu = { 414 358 .num_domains = ARRAY_SIZE(jh7110_power_domains), 415 359 .domain_info = jh7110_power_domains, 360 + .pmu_status = JH71XX_PMU_CURR_POWER_MODE, 361 + .pmu_parse_irq = jh7110_pmu_parse_irq, 362 + .pmu_set_state = jh7110_pmu_set_state, 363 + }; 364 + 365 + static const struct jh71xx_domain_info jh7110_aon_power_domains[] = { 366 + [JH7110_AON_PD_DPHY_TX] = { 367 + .name = "DPHY-TX", 368 + .bit = 30, 369 + }, 370 + [JH7110_AON_PD_DPHY_RX] = { 371 + .name = "DPHY-RX", 372 + .bit = 31, 373 + }, 374 + }; 375 + 376 + static const struct jh71xx_pmu_match_data jh7110_aon_pmu = { 377 + .num_domains = ARRAY_SIZE(jh7110_aon_power_domains), 378 + .domain_info = jh7110_aon_power_domains, 379 + .pmu_status = JH71XX_AON_PMU_SWITCH, 380 + .pmu_set_state = jh7110_aon_pmu_set_state, 416 381 }; 417 382 418 383 static const struct of_device_id jh71xx_pmu_of_match[] = { 419 384 { 420 385 .compatible = "starfive,jh7110-pmu", 421 386 .data = (void *)&jh7110_pmu, 387 + }, { 388 + .compatible = "starfive,jh7110-aon-syscon", 389 + .data = (void *)&jh7110_aon_pmu, 422 390 }, { 423 391 /* sentinel */ 424 392 } ··· 459 379 builtin_platform_driver(jh71xx_pmu_driver); 460 380 461 381 MODULE_AUTHOR("Walker Chen <walker.chen@starfivetech.com>"); 382 + MODULE_AUTHOR("Changhuang Liang <changhuang.liang@starfivetech.com>"); 462 383 MODULE_DESCRIPTION("StarFive JH71XX PMU Driver"); 463 384 MODULE_LICENSE("GPL");
+10
drivers/pmdomain/sunxi/Kconfig
··· 1 + # SPDX-License-Identifier: GPL-2.0-only 2 + 3 + config SUN20I_PPU 4 + bool "Allwinner D1 PPU power domain driver" 5 + depends on ARCH_SUNXI || COMPILE_TEST 6 + depends on PM 7 + select PM_GENERIC_DOMAINS 8 + help 9 + Say y to enable the PPU power domain driver. This saves power 10 + when certain peripherals, such as the video engine, are idle.
+6
drivers/pmdomain/tegra/Kconfig
··· 1 + # SPDX-License-Identifier: GPL-2.0-only 2 + 3 + config SOC_TEGRA_POWERGATE_BPMP 4 + def_bool y 5 + depends on PM_GENERIC_DOMAINS 6 + depends on TEGRA_BPMP
+22
drivers/pmdomain/ti/Kconfig
··· 1 + # SPDX-License-Identifier: GPL-2.0-only 2 + 3 + config OMAP2PLUS_PRM 4 + bool 5 + depends on ARCH_OMAP2PLUS 6 + default ARCH_OMAP2PLUS 7 + 8 + if SOC_TI 9 + 10 + config TI_SCI_PM_DOMAINS 11 + tristate "TI SCI PM Domains Driver" 12 + depends on TI_SCI_PROTOCOL 13 + depends on PM_GENERIC_DOMAINS 14 + help 15 + Generic power domain implementation for TI device implementing 16 + the TI SCI protocol. 17 + 18 + To compile this as a module, choose M here. The module will be 19 + called ti_sci_pm_domains. Note this is needed early in boot before 20 + rootfs may be available. 21 + 22 + endif
+1 -1
drivers/pmdomain/ti/Makefile
··· 1 1 # SPDX-License-Identifier: GPL-2.0 2 - obj-$(CONFIG_ARCH_OMAP2PLUS) += omap_prm.o 2 + obj-$(CONFIG_OMAP2PLUS_PRM) += omap_prm.o 3 3 obj-$(CONFIG_TI_SCI_PM_DOMAINS) += ti_sci_pm_domains.o
+6 -2
drivers/pmdomain/ti/ti_sci_pm_domains.c
··· 153 153 max_id = args.args[0]; 154 154 155 155 pd = devm_kzalloc(dev, sizeof(*pd), GFP_KERNEL); 156 - if (!pd) 156 + if (!pd) { 157 + of_node_put(np); 157 158 return -ENOMEM; 159 + } 158 160 159 161 pd->pd.name = devm_kasprintf(dev, GFP_KERNEL, 160 162 "pd:%d", 161 163 args.args[0]); 162 - if (!pd->pd.name) 164 + if (!pd->pd.name) { 165 + of_node_put(np); 163 166 return -ENOMEM; 167 + } 164 168 165 169 pd->pd.power_off = ti_sci_pd_power_off; 166 170 pd->pd.power_on = ti_sci_pd_power_on;
+10
drivers/pmdomain/xilinx/Kconfig
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + 3 + config ZYNQMP_PM_DOMAINS 4 + bool "Enable Zynq MPSoC generic PM domains" 5 + default y 6 + depends on PM && ZYNQMP_FIRMWARE 7 + select PM_GENERIC_DOMAINS 8 + help 9 + Say yes to enable device power management through PM domains 10 + If in doubt, say N.
-2
drivers/soc/Kconfig
··· 1 1 # SPDX-License-Identifier: GPL-2.0-only 2 2 menu "SOC (System On Chip) specific Drivers" 3 3 4 - source "drivers/soc/actions/Kconfig" 5 4 source "drivers/soc/amlogic/Kconfig" 6 5 source "drivers/soc/apple/Kconfig" 7 6 source "drivers/soc/aspeed/Kconfig" ··· 23 24 source "drivers/soc/rockchip/Kconfig" 24 25 source "drivers/soc/samsung/Kconfig" 25 26 source "drivers/soc/sifive/Kconfig" 26 - source "drivers/soc/starfive/Kconfig" 27 27 source "drivers/soc/sunxi/Kconfig" 28 28 source "drivers/soc/tegra/Kconfig" 29 29 source "drivers/soc/ti/Kconfig"
drivers/soc/actions/Kconfig drivers/pmdomain/actions/Kconfig
-35
drivers/soc/amlogic/Kconfig
··· 26 26 Say yes to support decoding of Amlogic Meson GX SoC family 27 27 information about the type, package and version. 28 28 29 - config MESON_GX_PM_DOMAINS 30 - tristate "Amlogic Meson GX Power Domains driver" 31 - depends on ARCH_MESON || COMPILE_TEST 32 - depends on PM && OF 33 - default ARCH_MESON 34 - select PM_GENERIC_DOMAINS 35 - select PM_GENERIC_DOMAINS_OF 36 - help 37 - Say yes to expose Amlogic Meson GX Power Domains as 38 - Generic Power Domains. 39 - 40 - config MESON_EE_PM_DOMAINS 41 - tristate "Amlogic Meson Everything-Else Power Domains driver" 42 - depends on ARCH_MESON || COMPILE_TEST 43 - depends on PM && OF 44 - default ARCH_MESON 45 - select PM_GENERIC_DOMAINS 46 - select PM_GENERIC_DOMAINS_OF 47 - help 48 - Say yes to expose Amlogic Meson Everything-Else Power Domains as 49 - Generic Power Domains. 50 - 51 - config MESON_SECURE_PM_DOMAINS 52 - tristate "Amlogic Meson Secure Power Domains driver" 53 - depends on (ARCH_MESON || COMPILE_TEST) && MESON_SM 54 - depends on PM && OF 55 - depends on HAVE_ARM_SMCCC 56 - default ARCH_MESON 57 - select PM_GENERIC_DOMAINS 58 - select PM_GENERIC_DOMAINS_OF 59 - help 60 - Support for the power controller on Amlogic A1/C1 series. 61 - Say yes to expose Amlogic Meson Secure Power Domains as Generic 62 - Power Domains. 63 - 64 29 config MESON_MX_SOCINFO 65 30 bool "Amlogic Meson MX SoC Information driver" 66 31 depends on (ARM && ARCH_MESON) || COMPILE_TEST
-13
drivers/soc/apple/Kconfig
··· 4 4 5 5 menu "Apple SoC drivers" 6 6 7 - config APPLE_PMGR_PWRSTATE 8 - bool "Apple SoC PMGR power state control" 9 - depends on PM 10 - select REGMAP 11 - select MFD_SYSCON 12 - select PM_GENERIC_DOMAINS 13 - select RESET_CONTROLLER 14 - default ARCH_APPLE 15 - help 16 - The PMGR block in Apple SoCs provides high-level power state 17 - controls for SoC devices. This driver manages them through the 18 - generic power domain framework, and also provides reset support. 19 - 20 7 config APPLE_RTKIT 21 8 tristate "Apple RTKit co-processor IPC protocol" 22 9 depends on MAILBOX
-51
drivers/soc/bcm/Kconfig
··· 1 1 # SPDX-License-Identifier: GPL-2.0-only 2 2 menu "Broadcom SoC drivers" 3 3 4 - config BCM2835_POWER 5 - bool "BCM2835 power domain driver" 6 - depends on ARCH_BCM2835 || (COMPILE_TEST && OF) 7 - default y if ARCH_BCM2835 8 - select PM_GENERIC_DOMAINS if PM 9 - select RESET_CONTROLLER 10 - help 11 - This enables support for the BCM2835 power domains and reset 12 - controller. Any usage of power domains by the Raspberry Pi 13 - firmware means that Linux usage of the same power domain 14 - must be accessed using the RASPBERRYPI_POWER driver 15 - 16 - config RASPBERRYPI_POWER 17 - bool "Raspberry Pi power domain driver" 18 - depends on ARCH_BCM2835 || (COMPILE_TEST && OF) 19 - depends on RASPBERRYPI_FIRMWARE=y 20 - select PM_GENERIC_DOMAINS if PM 21 - help 22 - This enables support for the RPi power domains which can be enabled 23 - or disabled via the RPi firmware. 24 - 25 - config SOC_BCM63XX 26 - bool "Broadcom 63xx SoC drivers" 27 - depends on BMIPS_GENERIC || COMPILE_TEST 28 - help 29 - Enables drivers for the Broadcom 63xx series of chips. 30 - Drivers can be enabled individually within this menu. 31 - 32 - If unsure, say N. 33 - 34 4 config SOC_BRCMSTB 35 5 bool "Broadcom STB SoC drivers" 36 6 depends on ARM || ARM64 || BMIPS_GENERIC || COMPILE_TEST ··· 11 41 can be enabled individually within this menu. 12 42 13 43 If unsure, say N. 14 - 15 - config BCM_PMB 16 - bool "Broadcom PMB (Power Management Bus) driver" 17 - depends on ARCH_BCMBCA || (COMPILE_TEST && OF) 18 - default ARCH_BCMBCA 19 - select PM_GENERIC_DOMAINS if PM 20 - help 21 - This enables support for the Broadcom's PMB (Power Management Bus) that 22 - is used for disabling and enabling SoC devices. 23 - 24 - if SOC_BCM63XX 25 - 26 - config BCM63XX_POWER 27 - bool "BCM63xx power domain driver" 28 - depends on BMIPS_GENERIC || (COMPILE_TEST && OF) 29 - select PM_GENERIC_DOMAINS if PM 30 - help 31 - This enables support for the BCM63xx power domains controller on 32 - BCM6318, BCM6328, BCM6362 and BCM63268 SoCs. 33 - 34 - endif # SOC_BCM63XX 35 44 36 45 source "drivers/soc/bcm/brcmstb/Kconfig" 37 46
-19
drivers/soc/imx/Kconfig
··· 1 1 # SPDX-License-Identifier: GPL-2.0-only 2 2 menu "i.MX SoC drivers" 3 3 4 - config IMX_GPCV2_PM_DOMAINS 5 - bool "i.MX GPCv2 PM domains" 6 - depends on ARCH_MXC || (COMPILE_TEST && OF) 7 - depends on PM 8 - select PM_GENERIC_DOMAINS 9 - select REGMAP_MMIO 10 - default y if SOC_IMX7D 11 - 12 4 config SOC_IMX8M 13 5 tristate "i.MX8M SoC family support" 14 6 depends on ARCH_MXC || COMPILE_TEST ··· 19 27 select SOC_BUS 20 28 help 21 29 If you say yes here, you get support for the NXP i.MX9 family 22 - 23 - config IMX8M_BLK_CTRL 24 - bool 25 - default SOC_IMX8M && IMX_GPCV2_PM_DOMAINS 26 - depends on PM_GENERIC_DOMAINS 27 - depends on COMMON_CLK 28 - 29 - config IMX9_BLK_CTRL 30 - bool 31 - default SOC_IMX9 && IMX_GPCV2_PM_DOMAINS 32 - depends on PM_GENERIC_DOMAINS 33 30 34 31 endmenu
-23
drivers/soc/mediatek/Kconfig
··· 49 49 default ARCH_MEDIATEK 50 50 depends on REGULATOR 51 51 52 - config MTK_SCPSYS 53 - bool "MediaTek SCPSYS Support" 54 - default ARCH_MEDIATEK 55 - depends on OF 56 - select REGMAP 57 - select MTK_INFRACFG 58 - select PM_GENERIC_DOMAINS if PM 59 - help 60 - Say yes here to add support for the MediaTek SCPSYS power domain 61 - driver. 62 - 63 - config MTK_SCPSYS_PM_DOMAINS 64 - bool "MediaTek SCPSYS generic power domain" 65 - default ARCH_MEDIATEK 66 - depends on PM 67 - select PM_GENERIC_DOMAINS 68 - select REGMAP 69 - help 70 - Say y here to enable power domain support. 71 - In order to meet high performance and low power requirements, the System 72 - Control Processor System (SCPSYS) has several power management related 73 - tasks in the system. 74 - 75 52 config MTK_MMSYS 76 53 tristate "MediaTek MMSYS Support" 77 54 default ARCH_MEDIATEK
-37
drivers/soc/qcom/Kconfig
··· 26 26 resource on a RPM-hardened platform must use this database to get 27 27 SoC specific identifier and information for the shared resources. 28 28 29 - config QCOM_CPR 30 - tristate "QCOM Core Power Reduction (CPR) support" 31 - depends on ARCH_QCOM && HAS_IOMEM 32 - select PM_OPP 33 - select REGMAP 34 - help 35 - Say Y here to enable support for the CPR hardware found on Qualcomm 36 - SoCs like QCS404. 37 - 38 - This driver populates CPU OPPs tables and makes adjustments to the 39 - tables based on feedback from the CPR hardware. If you want to do 40 - CPUfrequency scaling say Y here. 41 - 42 - To compile this driver as a module, choose M here: the module will 43 - be called qcom-cpr 44 - 45 29 config QCOM_GENI_SE 46 30 tristate "QCOM GENI Serial Engine Driver" 47 31 depends on ARCH_QCOM || COMPILE_TEST ··· 140 156 internal bus to transmit state requests for shared resources. A set 141 157 of hardware components aggregate requests for these resources and 142 158 help apply the aggregated state on the resource. 143 - 144 - config QCOM_RPMHPD 145 - tristate "Qualcomm RPMh Power domain driver" 146 - depends on QCOM_RPMH && QCOM_COMMAND_DB 147 - help 148 - QCOM RPMh Power domain driver to support power-domains with 149 - performance states. The driver communicates a performance state 150 - value to RPMh which then translates it into corresponding voltage 151 - for the voltage rail. 152 - 153 - config QCOM_RPMPD 154 - tristate "Qualcomm RPM Power domain driver" 155 - depends on PM && OF 156 - depends on QCOM_SMD_RPM 157 - select PM_GENERIC_DOMAINS 158 - select PM_GENERIC_DOMAINS_OF 159 - help 160 - QCOM RPM Power domain driver to support power-domains with 161 - performance states. The driver communicates a performance state 162 - value to RPM which then translates it into corresponding voltage 163 - for the voltage rail. 164 159 165 160 config QCOM_SMEM 166 161 tristate "Qualcomm Shared Memory Manager (SMEM)"
-105
drivers/soc/renesas/Kconfig
··· 353 353 config RST_RCAR 354 354 bool "Reset Controller support for R-Car" if COMPILE_TEST 355 355 356 - config SYSC_RCAR 357 - bool "System Controller support for R-Car" if COMPILE_TEST 358 - 359 - config SYSC_RCAR_GEN4 360 - bool "System Controller support for R-Car Gen4" if COMPILE_TEST 361 - 362 - config SYSC_R8A77995 363 - bool "System Controller support for R-Car D3" if COMPILE_TEST 364 - select SYSC_RCAR 365 - 366 - config SYSC_R8A7794 367 - bool "System Controller support for R-Car E2" if COMPILE_TEST 368 - select SYSC_RCAR 369 - 370 - config SYSC_R8A77990 371 - bool "System Controller support for R-Car E3" if COMPILE_TEST 372 - select SYSC_RCAR 373 - 374 - config SYSC_R8A7779 375 - bool "System Controller support for R-Car H1" if COMPILE_TEST 376 - select SYSC_RCAR 377 - 378 - config SYSC_R8A7790 379 - bool "System Controller support for R-Car H2" if COMPILE_TEST 380 - select SYSC_RCAR 381 - 382 - config SYSC_R8A7795 383 - bool "System Controller support for R-Car H3" if COMPILE_TEST 384 - select SYSC_RCAR 385 - 386 - config SYSC_R8A7791 387 - bool "System Controller support for R-Car M2-W/N" if COMPILE_TEST 388 - select SYSC_RCAR 389 - 390 - config SYSC_R8A77965 391 - bool "System Controller support for R-Car M3-N" if COMPILE_TEST 392 - select SYSC_RCAR 393 - 394 - config SYSC_R8A77960 395 - bool "System Controller support for R-Car M3-W" if COMPILE_TEST 396 - select SYSC_RCAR 397 - 398 - config SYSC_R8A77961 399 - bool "System Controller support for R-Car M3-W+" if COMPILE_TEST 400 - select SYSC_RCAR 401 - 402 - config SYSC_R8A779F0 403 - bool "System Controller support for R-Car S4-8" if COMPILE_TEST 404 - select SYSC_RCAR_GEN4 405 - 406 - config SYSC_R8A7792 407 - bool "System Controller support for R-Car V2H" if COMPILE_TEST 408 - select SYSC_RCAR 409 - 410 - config SYSC_R8A77980 411 - bool "System Controller support for R-Car V3H" if COMPILE_TEST 412 - select SYSC_RCAR 413 - 414 - config SYSC_R8A77970 415 - bool "System Controller support for R-Car V3M" if COMPILE_TEST 416 - select SYSC_RCAR 417 - 418 - config SYSC_R8A779A0 419 - bool "System Controller support for R-Car V3U" if COMPILE_TEST 420 - select SYSC_RCAR_GEN4 421 - 422 - config SYSC_R8A779G0 423 - bool "System Controller support for R-Car V4H" if COMPILE_TEST 424 - select SYSC_RCAR_GEN4 425 - 426 - config SYSC_RMOBILE 427 - bool "System Controller support for R-Mobile" if COMPILE_TEST 428 - 429 - config SYSC_R8A77470 430 - bool "System Controller support for RZ/G1C" if COMPILE_TEST 431 - select SYSC_RCAR 432 - 433 - config SYSC_R8A7745 434 - bool "System Controller support for RZ/G1E" if COMPILE_TEST 435 - select SYSC_RCAR 436 - 437 - config SYSC_R8A7742 438 - bool "System Controller support for RZ/G1H" if COMPILE_TEST 439 - select SYSC_RCAR 440 - 441 - config SYSC_R8A7743 442 - bool "System Controller support for RZ/G1M" if COMPILE_TEST 443 - select SYSC_RCAR 444 - 445 - config SYSC_R8A774C0 446 - bool "System Controller support for RZ/G2E" if COMPILE_TEST 447 - select SYSC_RCAR 448 - 449 - config SYSC_R8A774E1 450 - bool "System Controller support for RZ/G2H" if COMPILE_TEST 451 - select SYSC_RCAR 452 - 453 - config SYSC_R8A774A1 454 - bool "System Controller support for RZ/G2M" if COMPILE_TEST 455 - select SYSC_RCAR 456 - 457 - config SYSC_R8A774B1 458 - bool "System Controller support for RZ/G2N" if COMPILE_TEST 459 - select SYSC_RCAR 460 - 461 356 endif # SOC_RENESAS
-12
drivers/soc/rockchip/Kconfig
··· 22 22 necessary for the io domain setting of the SoC to match the 23 23 voltage supplied by the regulators. 24 24 25 - config ROCKCHIP_PM_DOMAINS 26 - bool "Rockchip generic power domain" 27 - depends on PM 28 - select PM_GENERIC_DOMAINS 29 - help 30 - Say y here to enable power domain support. 31 - In order to meet high performance and low power requirements, a power 32 - management unit is designed or saving power when RK3288 in low power 33 - mode. The RK3288 PMU is dedicated for managing the power of the whole chip. 34 - 35 - If unsure, say N. 36 - 37 25 config ROCKCHIP_DTPM 38 26 tristate "Rockchip DTPM hierarchy" 39 27 depends on DTPM && m
-4
drivers/soc/samsung/Kconfig
··· 48 48 bool "Exynos PMU ARMv7-specific driver extensions" if COMPILE_TEST 49 49 depends on EXYNOS_PMU 50 50 51 - config EXYNOS_PM_DOMAINS 52 - bool "Exynos PM domains" if COMPILE_TEST 53 - depends on (ARCH_EXYNOS && PM_GENERIC_DOMAINS) || COMPILE_TEST 54 - 55 51 config SAMSUNG_PM_CHECK 56 52 bool "S3C2410 PM Suspend Memory CRC" 57 53 depends on PM && (ARCH_S3C64XX || ARCH_S5PV210)
+2 -2
drivers/soc/starfive/Kconfig drivers/pmdomain/starfive/Kconfig
··· 3 3 config JH71XX_PMU 4 4 bool "Support PMU for StarFive JH71XX Soc" 5 5 depends on PM 6 - depends on SOC_STARFIVE || COMPILE_TEST 7 - default SOC_STARFIVE 6 + depends on ARCH_STARFIVE || COMPILE_TEST 7 + default ARCH_STARFIVE 8 8 select PM_GENERIC_DOMAINS 9 9 help 10 10 Say 'y' here to enable support power domain support.
-9
drivers/soc/sunxi/Kconfig
··· 19 19 Say y here to enable the SRAM controller support. This 20 20 device is responsible on mapping the SRAM in the sunXi SoCs 21 21 whether to the CPU/DMA, or to the devices. 22 - 23 - config SUN20I_PPU 24 - bool "Allwinner D1 PPU power domain driver" 25 - depends on ARCH_SUNXI || COMPILE_TEST 26 - depends on PM 27 - select PM_GENERIC_DOMAINS 28 - help 29 - Say y to enable the PPU power domain driver. This saves power 30 - when certain peripherals, such as the video engine, are idle.
-5
drivers/soc/tegra/Kconfig
··· 152 152 select PM_GENERIC_DOMAINS 153 153 select REGMAP 154 154 155 - config SOC_TEGRA_POWERGATE_BPMP 156 - def_bool y 157 - depends on PM_GENERIC_DOMAINS 158 - depends on TEGRA_BPMP 159 - 160 155 config SOC_TEGRA20_VOLTAGE_COUPLER 161 156 bool "Voltage scaling support for Tegra20 SoCs" 162 157 depends on ARCH_TEGRA_2x_SOC || COMPILE_TEST
-12
drivers/soc/ti/Kconfig
··· 50 50 to communicate and use the Wakeup M3 for PM features like suspend 51 51 resume and boots it using wkup_m3_rproc driver. 52 52 53 - config TI_SCI_PM_DOMAINS 54 - tristate "TI SCI PM Domains Driver" 55 - depends on TI_SCI_PROTOCOL 56 - depends on PM_GENERIC_DOMAINS 57 - help 58 - Generic power domain implementation for TI device implementing 59 - the TI SCI protocol. 60 - 61 - To compile this as a module, choose M here. The module will be 62 - called ti_sci_pm_domains. Note this is needed early in boot before 63 - rootfs may be available. 64 - 65 53 config TI_K3_RINGACC 66 54 tristate "K3 Ring accelerator Sub System" 67 55 depends on ARCH_K3 || COMPILE_TEST
-9
drivers/soc/xilinx/Kconfig
··· 16 16 17 17 If in doubt, say N. 18 18 19 - config ZYNQMP_PM_DOMAINS 20 - bool "Enable Zynq MPSoC generic PM domains" 21 - default y 22 - depends on PM && ZYNQMP_FIRMWARE 23 - select PM_GENERIC_DOMAINS 24 - help 25 - Say yes to enable device power management through PM domains 26 - If in doubt, say N. 27 - 28 19 config XLNX_EVENT_MANAGER 29 20 bool "Enable Xilinx Event Management Driver" 30 21 depends on ZYNQMP_FIRMWARE
+63
include/dt-bindings/power/amlogic,t7-pwrc.h
··· 1 + /* SPDX-License-Identifier: (GPL-2.0-only OR MIT) */ 2 + /* 3 + * Copyright (c) 2023 Amlogic, Inc. 4 + * Author: Hongyu Chen <hongyu.chen1@amlogic.com> 5 + */ 6 + #ifndef _DT_BINDINGS_AMLOGIC_T7_POWER_H 7 + #define _DT_BINDINGS_AMLOGIC_T7_POWER_H 8 + 9 + #define PWRC_T7_DSPA_ID 0 10 + #define PWRC_T7_DSPB_ID 1 11 + #define PWRC_T7_DOS_HCODEC_ID 2 12 + #define PWRC_T7_DOS_HEVC_ID 3 13 + #define PWRC_T7_DOS_VDEC_ID 4 14 + #define PWRC_T7_DOS_WAVE_ID 5 15 + #define PWRC_T7_VPU_HDMI_ID 6 16 + #define PWRC_T7_USB_COMB_ID 7 17 + #define PWRC_T7_PCIE_ID 8 18 + #define PWRC_T7_GE2D_ID 9 19 + #define PWRC_T7_SRAMA_ID 10 20 + #define PWRC_T7_SRAMB_ID 11 21 + #define PWRC_T7_HDMIRX_ID 12 22 + #define PWRC_T7_VI_CLK1_ID 13 23 + #define PWRC_T7_VI_CLK2_ID 14 24 + #define PWRC_T7_ETH_ID 15 25 + #define PWRC_T7_ISP_ID 16 26 + #define PWRC_T7_MIPI_ISP_ID 17 27 + #define PWRC_T7_GDC_ID 18 28 + #define PWRC_T7_CVE_ID 18 29 + #define PWRC_T7_DEWARP_ID 19 30 + #define PWRC_T7_SDIO_A_ID 20 31 + #define PWRC_T7_SDIO_B_ID 21 32 + #define PWRC_T7_EMMC_ID 22 33 + #define PWRC_T7_MALI_SC0_ID 23 34 + #define PWRC_T7_MALI_SC1_ID 24 35 + #define PWRC_T7_MALI_SC2_ID 25 36 + #define PWRC_T7_MALI_SC3_ID 26 37 + #define PWRC_T7_MALI_TOP_ID 27 38 + #define PWRC_T7_NNA_CORE0_ID 28 39 + #define PWRC_T7_NNA_CORE1_ID 29 40 + #define PWRC_T7_NNA_CORE2_ID 30 41 + #define PWRC_T7_NNA_CORE3_ID 31 42 + #define PWRC_T7_NNA_TOP_ID 32 43 + #define PWRC_T7_DDR0_ID 33 44 + #define PWRC_T7_DDR1_ID 34 45 + #define PWRC_T7_DMC0_ID 35 46 + #define PWRC_T7_DMC1_ID 36 47 + #define PWRC_T7_NOC_ID 37 48 + #define PWRC_T7_NIC2_ID 38 49 + #define PWRC_T7_NIC3_ID 39 50 + #define PWRC_T7_CCI_ID 40 51 + #define PWRC_T7_MIPI_DSI0_ID 41 52 + #define PWRC_T7_SPICC0_ID 42 53 + #define PWRC_T7_SPICC1_ID 43 54 + #define PWRC_T7_SPICC2_ID 44 55 + #define PWRC_T7_SPICC3_ID 45 56 + #define PWRC_T7_SPICC4_ID 46 57 + #define PWRC_T7_SPICC5_ID 47 58 + #define PWRC_T7_EDP0_ID 48 59 + #define PWRC_T7_EDP1_ID 49 60 + #define PWRC_T7_MIPI_DSI1_ID 50 61 + #define PWRC_T7_AUDIO_ID 51 62 + 63 + #endif
+19
include/dt-bindings/power/mediatek,mt8365-power.h
··· 1 + /* SPDX-License-Identifier: (GPL-2.0 OR MIT) */ 2 + /* 3 + * Copyright (c) 2022 MediaTek Inc. 4 + */ 5 + 6 + #ifndef _DT_BINDINGS_POWER_MT8365_POWER_H 7 + #define _DT_BINDINGS_POWER_MT8365_POWER_H 8 + 9 + #define MT8365_POWER_DOMAIN_MM 0 10 + #define MT8365_POWER_DOMAIN_CONN 1 11 + #define MT8365_POWER_DOMAIN_MFG 2 12 + #define MT8365_POWER_DOMAIN_AUDIO 3 13 + #define MT8365_POWER_DOMAIN_CAM 4 14 + #define MT8365_POWER_DOMAIN_DSP 5 15 + #define MT8365_POWER_DOMAIN_VDEC 6 16 + #define MT8365_POWER_DOMAIN_VENC 7 17 + #define MT8365_POWER_DOMAIN_APU 8 18 + 19 + #endif /* _DT_BINDINGS_POWER_MT8365_POWER_H */
+2
include/dt-bindings/power/qcom,rpmhpd.h
··· 26 26 #define RPMHPD_QPHY 16 27 27 #define RPMHPD_DDR 17 28 28 #define RPMHPD_XO 18 29 + #define RPMHPD_NSP2 19 30 + #define RPMHPD_GMXC 20 29 31 30 32 #endif
+21
include/dt-bindings/power/qcom-rpmpd.h
··· 278 278 #define MSM8909_VDDMX MSM8916_VDDMX 279 279 #define MSM8909_VDDMX_AO MSM8916_VDDMX_AO 280 280 281 + /* MSM8917 Power Domain Indexes */ 282 + #define MSM8917_VDDCX 0 283 + #define MSM8917_VDDCX_AO 1 284 + #define MSM8917_VDDCX_VFL 2 285 + #define MSM8917_VDDMX 3 286 + #define MSM8917_VDDMX_AO 4 287 + 288 + /* MSM8937 Power Domain Indexes */ 289 + #define MSM8937_VDDCX MSM8917_VDDCX 290 + #define MSM8937_VDDCX_AO MSM8917_VDDCX_AO 291 + #define MSM8937_VDDCX_VFL MSM8917_VDDCX_VFL 292 + #define MSM8937_VDDMX MSM8917_VDDMX 293 + #define MSM8937_VDDMX_AO MSM8917_VDDMX_AO 294 + 295 + /* QM215 Power Domain Indexes */ 296 + #define QM215_VDDCX MSM8917_VDDCX 297 + #define QM215_VDDCX_AO MSM8917_VDDCX_AO 298 + #define QM215_VDDCX_VFL MSM8917_VDDCX_VFL 299 + #define QM215_VDDMX MSM8917_VDDMX 300 + #define QM215_VDDMX_AO MSM8917_VDDMX_AO 301 + 281 302 /* MSM8953 Power Domain Indexes */ 282 303 #define MSM8953_VDDMD 0 283 304 #define MSM8953_VDDMD_AO 1
+5 -1
include/dt-bindings/power/starfive,jh7110-pmu.h
··· 1 1 /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */ 2 2 /* 3 - * Copyright (C) 2022 StarFive Technology Co., Ltd. 3 + * Copyright (C) 2022-2023 StarFive Technology Co., Ltd. 4 4 * Author: Walker Chen <walker.chen@starfivetech.com> 5 5 */ 6 6 #ifndef __DT_BINDINGS_POWER_JH7110_POWER_H__ ··· 13 13 #define JH7110_PD_VOUT 4 14 14 #define JH7110_PD_ISP 5 15 15 #define JH7110_PD_VENC 6 16 + 17 + /* AON Power Domain */ 18 + #define JH7110_AON_PD_DPHY_TX 0 19 + #define JH7110_AON_PD_DPHY_RX 1 16 20 17 21 #endif
+41
include/linux/soc/mediatek/infracfg.h
··· 2 2 #ifndef __SOC_MEDIATEK_INFRACFG_H 3 3 #define __SOC_MEDIATEK_INFRACFG_H 4 4 5 + #define MT8365_INFRA_TOPAXI_PROTECTEN_STA1 0x228 6 + #define MT8365_INFRA_TOPAXI_PROTECTEN_SET 0x2a0 7 + #define MT8365_INFRA_TOPAXI_PROTECTEN_CLR 0x2a4 8 + #define MT8365_INFRA_TOPAXI_PROTECTEN_MM_M0 BIT(1) 9 + #define MT8365_INFRA_TOPAXI_PROTECTEN_MDMCU_M1 BIT(2) 10 + #define MT8365_INFRA_TOPAXI_PROTECTEN_MMAPB_S BIT(6) 11 + #define MT8365_INFRA_TOPAXI_PROTECTEN_MM2INFRA_AXI_GALS_SLV_0 BIT(10) 12 + #define MT8365_INFRA_TOPAXI_PROTECTEN_MM2INFRA_AXI_GALS_SLV_1 BIT(11) 13 + #define MT8365_INFRA_TOPAXI_PROTECTEN_AP2CONN_AHB BIT(13) 14 + #define MT8365_INFRA_TOPAXI_PROTECTEN_CONN2INFRA_AHB BIT(14) 15 + #define MT8365_INFRA_TOPAXI_PROTECTEN_MFG_M0 BIT(21) 16 + #define MT8365_INFRA_TOPAXI_PROTECTEN_INFRA2MFG BIT(22) 17 + #define MT8365_INFRA_TOPAXI_PROTECTEN_1_STA1 0x258 18 + #define MT8365_INFRA_TOPAXI_PROTECTEN_1_SET 0x2a8 19 + #define MT8365_INFRA_TOPAXI_PROTECTEN_1_CLR 0x2ac 20 + #define MT8365_INFRA_TOPAXI_PROTECTEN_1_APU2AP BIT(2) 21 + #define MT8365_INFRA_TOPAXI_PROTECTEN_1_MM2INFRA_AXI_GALS_MST_0 BIT(16) 22 + #define MT8365_INFRA_TOPAXI_PROTECTEN_1_MM2INFRA_AXI_GALS_MST_1 BIT(17) 23 + #define MT8365_INFRA_TOPAXI_PROTECTEN_1_CONN2INFRA_AXI_GALS_MST BIT(18) 24 + #define MT8365_INFRA_TOPAXI_PROTECTEN_1_CAM2MM_AXI_GALS_MST BIT(19) 25 + #define MT8365_INFRA_TOPAXI_PROTECTEN_1_APU_CBIP_GALS_MST BIT(20) 26 + #define MT8365_INFRA_TOPAXI_PROTECTEN_1_INFRA2CONN_AHB_GALS_SLV BIT(21) 27 + #define MT8365_INFRA_TOPAXI_PROTECTEN_1_PWRDNREQ_INFRA_GALS_ADB BIT(24) 28 + #define MT8365_INFRA_TOPAXI_PROTECTEN_1_PWRDNREQ_MP1_L2C_AFIFO BIT(27) 29 + #define MT8365_INFRA_TOPAXI_PROTECTEN_1_AUDIO_BUS_AUDIO_M BIT(28) 30 + #define MT8365_INFRA_TOPAXI_PROTECTEN_1_AUDIO_BUS_DSP_M BIT(30) 31 + #define MT8365_INFRA_TOPAXI_PROTECTEN_1_AUDIO_BUS_DSP_S BIT(31) 32 + 33 + #define MT8365_INFRA_NAO_TOPAXI_SI0_STA 0x0 34 + #define MT8365_INFRA_NAO_TOPAXI_SI0_CTRL_UPDATED BIT(24) 35 + #define MT8365_INFRA_NAO_TOPAXI_SI2_STA 0x28 36 + #define MT8365_INFRA_NAO_TOPAXI_SI2_CTRL_UPDATED BIT(14) 37 + #define MT8365_INFRA_TOPAXI_SI0_CTL 0x200 38 + #define MT8365_INFRA_TOPAXI_SI0_WAY_EN_MMAPB_S BIT(6) 39 + #define MT8365_INFRA_TOPAXI_SI2_CTL 0x234 40 + #define MT8365_INFRA_TOPAXI_SI2_WAY_EN_PERI_M1 BIT(5) 41 + 42 + #define MT8365_SMI_COMMON_CLAMP_EN 0x3c0 43 + #define MT8365_SMI_COMMON_CLAMP_EN_SET 0x3c4 44 + #define MT8365_SMI_COMMON_CLAMP_EN_CLR 0x3c8 45 + 5 46 #define MT8195_TOP_AXI_PROT_EN_STA1 0x228 6 47 #define MT8195_TOP_AXI_PROT_EN_1_STA1 0x258 7 48 #define MT8195_TOP_AXI_PROT_EN_SET 0x2a0