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

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

Pull pmdomain updates from Ulf Hansson:
"Core:
- Move the generic PM domain and its governor to the pmdomain
subsystem
- Drop the unused pm_genpd_opp_to_performance_state()

Providers:
- Convert some providers to let the ->remove() callback return void
- amlogic: Add support for G12A ISP power domain
- arm: Move the SCPI power-domain driver to the pmdomain subsystem
- arm: Move Kconfig options to the pmdomain subsystem
- qcom: Update part number to X1E80100 for the rpmhpd"

* tag 'pmdomain-v6.8' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/linux-pm:
PM: domains: Move genpd and its governor to the pmdomain subsystem
PM: domains: Drop redundant header for genpd
PM: domains: Drop the unused pm_genpd_opp_to_performance_state()
PM: domains: fix domain_governor kernel-doc warnings
pmdomain: xilinx/zynqmp: Convert to platform remove callback returning void
pmdomain: qcom-cpr: Convert to platform remove callback returning void
pmdomain: imx93-pd: Convert to platform remove callback returning void
pmdomain: imx93-blk-ctrl: Convert to platform remove callback returning void
pmdomain: imx8mp-blk-ctrl: Convert to platform remove callback returning void
pmdomain: imx8m-blk-ctrl: Convert to platform remove callback returning void
pmdomain: imx-gpcv2: Convert to platform remove callback returning void
pmdomain: imx-gpc: Convert to platform remove callback returning void
pmdomain: imx-pgc: Convert to platform remove callback returning void
pmdomain: amlogic: meson-ee-pwrc: add support for G12A ISP power domain
dt-bindings: power: meson-g12a-power: document ISP power domain
firmware: arm_scpi: Move power-domain driver to the pmdomain dir
pmdomain: arm_scmi: Move Kconfig options to the pmdomain subsystem
pmdomain: qcom: rpmhpd: Update part number to X1E80100
dt-bindings: power: rpmpd: Update part number to X1E80100

+100 -141
+1 -1
Documentation/devicetree/bindings/power/qcom,rpmpd.yaml
··· 39 39 - qcom,sc7280-rpmhpd 40 40 - qcom,sc8180x-rpmhpd 41 41 - qcom,sc8280xp-rpmhpd 42 - - qcom,sc8380xp-rpmhpd 43 42 - qcom,sdm660-rpmpd 44 43 - qcom,sdm670-rpmhpd 45 44 - qcom,sdm845-rpmhpd ··· 56 57 - qcom,sm8450-rpmhpd 57 58 - qcom,sm8550-rpmhpd 58 59 - qcom,sm8650-rpmhpd 60 + - qcom,x1e80100-rpmhpd 59 61 - items: 60 62 - enum: 61 63 - qcom,msm8937-rpmpd
+1 -9
MAINTAINERS
··· 8875 8875 F: drivers/i2c/muxes/i2c-demux-pinctrl.c 8876 8876 8877 8877 GENERIC PM DOMAINS 8878 - M: "Rafael J. Wysocki" <rafael@kernel.org> 8879 - M: Kevin Hilman <khilman@kernel.org> 8880 8878 M: Ulf Hansson <ulf.hansson@linaro.org> 8881 8879 L: linux-pm@vger.kernel.org 8882 8880 S: Supported 8883 8881 F: Documentation/devicetree/bindings/power/power?domain* 8884 - F: drivers/base/power/domain*.c 8885 - F: include/linux/pm_domain.h 8886 - 8887 - GENERIC PM DOMAIN PROVIDERS 8888 - M: Ulf Hansson <ulf.hansson@linaro.org> 8889 - L: linux-pm@vger.kernel.org 8890 - S: Supported 8891 8882 T: git git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/linux-pm.git 8892 8883 F: drivers/pmdomain/ 8884 + F: include/linux/pm_domain.h 8893 8885 8894 8886 GENERIC RADIX TREE 8895 8887 M: Kent Overstreet <kent.overstreet@linux.dev>
-1
drivers/base/power/Makefile
··· 2 2 obj-$(CONFIG_PM) += sysfs.o generic_ops.o common.o qos.o runtime.o wakeirq.o 3 3 obj-$(CONFIG_PM_SLEEP) += main.o wakeup.o wakeup_stats.o 4 4 obj-$(CONFIG_PM_TRACE_RTC) += trace.o 5 - obj-$(CONFIG_PM_GENERIC_DOMAINS) += domain.o domain_governor.o 6 5 obj-$(CONFIG_HAVE_CLK) += clock_ops.o 7 6 obj-$(CONFIG_PM_QOS_KUNIT_TEST) += qos-test.o 8 7
-34
drivers/base/power/domain.c drivers/pmdomain/core.c
··· 23 23 #include <linux/cpu.h> 24 24 #include <linux/debugfs.h> 25 25 26 - #include "power.h" 27 - 28 26 #define GENPD_RETRY_MAX_MS 250 /* Approximate */ 29 27 30 28 #define GENPD_DEV_CALLBACK(genpd, type, callback, dev) \ ··· 3039 3041 return 0; 3040 3042 } 3041 3043 EXPORT_SYMBOL_GPL(of_genpd_parse_idle_states); 3042 - 3043 - /** 3044 - * pm_genpd_opp_to_performance_state - Gets performance state of the genpd from its OPP node. 3045 - * 3046 - * @genpd_dev: Genpd's device for which the performance-state needs to be found. 3047 - * @opp: struct dev_pm_opp of the OPP for which we need to find performance 3048 - * state. 3049 - * 3050 - * Returns performance state encoded in the OPP of the genpd. This calls 3051 - * platform specific genpd->opp_to_performance_state() callback to translate 3052 - * power domain OPP to performance state. 3053 - * 3054 - * Returns performance state on success and 0 on failure. 3055 - */ 3056 - unsigned int pm_genpd_opp_to_performance_state(struct device *genpd_dev, 3057 - struct dev_pm_opp *opp) 3058 - { 3059 - struct generic_pm_domain *genpd = NULL; 3060 - int state; 3061 - 3062 - genpd = container_of(genpd_dev, struct generic_pm_domain, dev); 3063 - 3064 - if (unlikely(!genpd->opp_to_performance_state)) 3065 - return 0; 3066 - 3067 - genpd_lock(genpd); 3068 - state = genpd->opp_to_performance_state(genpd, opp); 3069 - genpd_unlock(genpd); 3070 - 3071 - return state; 3072 - } 3073 - EXPORT_SYMBOL_GPL(pm_genpd_opp_to_performance_state); 3074 3044 3075 3045 static int __init genpd_bus_init(void) 3076 3046 {
+6 -2
drivers/base/power/domain_governor.c drivers/pmdomain/governor.c
··· 49 49 /** 50 50 * default_suspend_ok - Default PM domain governor routine to suspend devices. 51 51 * @dev: Device to check. 52 + * 53 + * Returns: true if OK to suspend, false if not OK to suspend 52 54 */ 53 55 static bool default_suspend_ok(struct device *dev) 54 56 { ··· 263 261 * @now: current ktime. 264 262 * 265 263 * This routine must be executed under the PM domain's lock. 264 + * 265 + * Returns: true if OK to power down, false if not OK to power down 266 266 */ 267 267 static bool _default_power_down_ok(struct dev_pm_domain *pd, ktime_t now) 268 268 { ··· 410 406 .power_down_ok = default_power_down_ok, 411 407 }; 412 408 413 - /** 414 - * pm_genpd_gov_always_on - A governor implementing an always-on policy 409 + /* 410 + * pm_domain_always_on_gov - A governor implementing an always-on policy 415 411 */ 416 412 struct dev_power_governor pm_domain_always_on_gov = { 417 413 .suspend_ok = default_suspend_ok,
-9
drivers/firmware/Kconfig
··· 28 28 This protocol library provides interface for all the client drivers 29 29 making use of the features offered by the SCP. 30 30 31 - config ARM_SCPI_POWER_DOMAIN 32 - tristate "SCPI power domain driver" 33 - depends on ARM_SCPI_PROTOCOL || (COMPILE_TEST && OF) 34 - default y 35 - select PM_GENERIC_DOMAINS if PM 36 - help 37 - This enables support for the SCPI power domains which can be 38 - enabled or disabled via the SCP firmware 39 - 40 31 config ARM_SDE_INTERFACE 41 32 bool "ARM Software Delegated Exception Interface (SDEI)" 42 33 depends on ARM64
-1
drivers/firmware/Makefile
··· 3 3 # Makefile for the linux kernel. 4 4 # 5 5 obj-$(CONFIG_ARM_SCPI_PROTOCOL) += arm_scpi.o 6 - obj-$(CONFIG_ARM_SCPI_POWER_DOMAIN) += scpi_pm_domain.o 7 6 obj-$(CONFIG_ARM_SDE_INTERFACE) += arm_sdei.o 8 7 obj-$(CONFIG_DMI) += dmi_scan.o 9 8 obj-$(CONFIG_DMI_SYSFS) += dmi-sysfs.o
-25
drivers/firmware/arm_scmi/Kconfig
··· 168 168 169 169 endif #ARM_SCMI_PROTOCOL 170 170 171 - config ARM_SCMI_POWER_DOMAIN 172 - tristate "SCMI power domain driver" 173 - depends on ARM_SCMI_PROTOCOL || (COMPILE_TEST && OF) 174 - default y 175 - select PM_GENERIC_DOMAINS if PM 176 - help 177 - This enables support for the SCMI power domains which can be 178 - enabled or disabled via the SCP firmware 179 - 180 - This driver can also be built as a module. If so, the module 181 - will be called scmi_pm_domain. Note this may needed early in boot 182 - before rootfs may be available. 183 - 184 - config ARM_SCMI_PERF_DOMAIN 185 - tristate "SCMI performance domain driver" 186 - depends on ARM_SCMI_PROTOCOL || (COMPILE_TEST && OF) 187 - default y 188 - select PM_GENERIC_DOMAINS if PM 189 - help 190 - This enables support for the SCMI performance domains which can be 191 - enabled or disabled via the SCP firmware. 192 - 193 - This driver can also be built as a module. If so, the module will be 194 - called scmi_perf_domain. 195 - 196 171 config ARM_SCMI_POWER_CONTROL 197 172 tristate "SCMI system power control driver" 198 173 depends on ARM_SCMI_PROTOCOL || (COMPILE_TEST && OF)
drivers/firmware/scpi_pm_domain.c drivers/pmdomain/arm/scpi_pm_domain.c
+1
drivers/pmdomain/Kconfig
··· 4 4 source "drivers/pmdomain/actions/Kconfig" 5 5 source "drivers/pmdomain/amlogic/Kconfig" 6 6 source "drivers/pmdomain/apple/Kconfig" 7 + source "drivers/pmdomain/arm/Kconfig" 7 8 source "drivers/pmdomain/bcm/Kconfig" 8 9 source "drivers/pmdomain/imx/Kconfig" 9 10 source "drivers/pmdomain/mediatek/Kconfig"
+1
drivers/pmdomain/Makefile
··· 16 16 obj-y += tegra/ 17 17 obj-y += ti/ 18 18 obj-y += xilinx/ 19 + obj-y += core.o governor.o
+16
drivers/pmdomain/amlogic/meson-ee-pwrc.c
··· 47 47 48 48 #define G12A_HHI_NANOQ_MEM_PD_REG0 (0x43 << 2) 49 49 #define G12A_HHI_NANOQ_MEM_PD_REG1 (0x44 << 2) 50 + #define G12A_HHI_ISP_MEM_PD_REG0 (0x45 << 2) 51 + #define G12A_HHI_ISP_MEM_PD_REG1 (0x46 << 2) 50 52 51 53 struct meson_ee_pwrc; 52 54 struct meson_ee_pwrc_domain; ··· 115 113 .sleep_mask = BIT(16) | BIT(17), 116 114 .iso_reg = GX_AO_RTI_GEN_PWR_ISO0, 117 115 .iso_mask = BIT(16) | BIT(17), 116 + }; 117 + 118 + static struct meson_ee_pwrc_top_domain g12a_pwrc_isp = { 119 + .sleep_reg = GX_AO_RTI_GEN_PWR_SLEEP0, 120 + .sleep_mask = BIT(18) | BIT(19), 121 + .iso_reg = GX_AO_RTI_GEN_PWR_ISO0, 122 + .iso_mask = BIT(18) | BIT(19), 118 123 }; 119 124 120 125 /* Memory PD Domains */ ··· 240 231 { G12A_HHI_NANOQ_MEM_PD_REG1, GENMASK(31, 0) }, 241 232 }; 242 233 234 + static struct meson_ee_pwrc_mem_domain g12a_pwrc_mem_isp[] = { 235 + { G12A_HHI_ISP_MEM_PD_REG0, GENMASK(31, 0) }, 236 + { G12A_HHI_ISP_MEM_PD_REG1, GENMASK(31, 0) }, 237 + }; 238 + 243 239 #define VPU_PD(__name, __top_pd, __mem, __is_pwr_off, __resets, __clks) \ 244 240 { \ 245 241 .name = __name, \ ··· 282 268 pwrc_ee_is_powered_off, 11, 2), 283 269 [PWRC_G12A_ETH_ID] = MEM_PD("ETH", meson_pwrc_mem_eth), 284 270 [PWRC_G12A_NNA_ID] = TOP_PD("NNA", &g12a_pwrc_nna, g12a_pwrc_mem_nna, 271 + pwrc_ee_is_powered_off), 272 + [PWRC_G12A_ISP_ID] = TOP_PD("ISP", &g12a_pwrc_isp, g12a_pwrc_mem_isp, 285 273 pwrc_ee_is_powered_off), 286 274 }; 287 275
+37
drivers/pmdomain/arm/Kconfig
··· 1 + # SPDX-License-Identifier: GPL-2.0-only 2 + config ARM_SCMI_PERF_DOMAIN 3 + tristate "SCMI performance domain driver" 4 + depends on ARM_SCMI_PROTOCOL || (COMPILE_TEST && OF) 5 + default y 6 + select PM_GENERIC_DOMAINS if PM 7 + help 8 + This enables support for the SCMI performance domains which can be 9 + enabled or disabled via the SCP firmware. 10 + 11 + This driver can also be built as a module. If so, the module will be 12 + called scmi_perf_domain. 13 + 14 + config ARM_SCMI_POWER_DOMAIN 15 + tristate "SCMI power domain driver" 16 + depends on ARM_SCMI_PROTOCOL || (COMPILE_TEST && OF) 17 + default y 18 + select PM_GENERIC_DOMAINS if PM 19 + help 20 + This enables support for the SCMI power domains which can be 21 + enabled or disabled via the SCP firmware 22 + 23 + This driver can also be built as a module. If so, the module 24 + will be called scmi_pm_domain. Note this may needed early in boot 25 + before rootfs may be available. 26 + 27 + config ARM_SCPI_POWER_DOMAIN 28 + tristate "SCPI power domain driver" 29 + depends on ARM_SCPI_PROTOCOL || (COMPILE_TEST && OF) 30 + default y 31 + select PM_GENERIC_DOMAINS if PM 32 + help 33 + This enables support for the SCPI power domains which can be 34 + enabled or disabled via the SCP firmware 35 + 36 + This driver can also be built as a module. If so, the module will be 37 + called scpi_pm_domain.
+1
drivers/pmdomain/arm/Makefile
··· 2 2 3 3 obj-$(CONFIG_ARM_SCMI_PERF_DOMAIN) += scmi_perf_domain.o 4 4 obj-$(CONFIG_ARM_SCMI_POWER_DOMAIN) += scmi_pm_domain.o 5 + obj-$(CONFIG_ARM_SCPI_POWER_DOMAIN) += scpi_pm_domain.o
+15 -13
drivers/pmdomain/imx/gpc.c
··· 212 212 return ret; 213 213 } 214 214 215 - static int imx_pgc_power_domain_remove(struct platform_device *pdev) 215 + static void imx_pgc_power_domain_remove(struct platform_device *pdev) 216 216 { 217 217 struct imx_pm_domain *domain = pdev->dev.platform_data; 218 218 ··· 221 221 pm_genpd_remove(&domain->base); 222 222 imx_pgc_put_clocks(domain); 223 223 } 224 - 225 - return 0; 226 224 } 227 225 228 226 static const struct platform_device_id imx_pgc_power_domain_id[] = { ··· 233 235 .name = "imx-pgc-pd", 234 236 }, 235 237 .probe = imx_pgc_power_domain_probe, 236 - .remove = imx_pgc_power_domain_remove, 238 + .remove_new = imx_pgc_power_domain_remove, 237 239 .id_table = imx_pgc_power_domain_id, 238 240 }; 239 241 builtin_platform_driver(imx_pgc_power_domain_driver) ··· 509 511 return 0; 510 512 } 511 513 512 - static int imx_gpc_remove(struct platform_device *pdev) 514 + static void imx_gpc_remove(struct platform_device *pdev) 513 515 { 514 516 struct device_node *pgc_node; 515 517 int ret; ··· 519 521 /* bail out if DT too old and doesn't provide the necessary info */ 520 522 if (!of_property_read_bool(pdev->dev.of_node, "#power-domain-cells") && 521 523 !pgc_node) 522 - return 0; 524 + return; 523 525 524 526 /* 525 527 * If the old DT binding is used the toplevel driver needs to ··· 529 531 of_genpd_del_provider(pdev->dev.of_node); 530 532 531 533 ret = pm_genpd_remove(&imx_gpc_domains[GPC_PGC_DOMAIN_PU].base); 532 - if (ret) 533 - return ret; 534 + if (ret) { 535 + dev_err(&pdev->dev, "Failed to remove PU power domain (%pe)\n", 536 + ERR_PTR(ret)); 537 + return; 538 + } 534 539 imx_pgc_put_clocks(&imx_gpc_domains[GPC_PGC_DOMAIN_PU]); 535 540 536 541 ret = pm_genpd_remove(&imx_gpc_domains[GPC_PGC_DOMAIN_ARM].base); 537 - if (ret) 538 - return ret; 542 + if (ret) { 543 + dev_err(&pdev->dev, "Failed to remove ARM power domain (%pe)\n", 544 + ERR_PTR(ret)); 545 + return; 546 + } 539 547 } 540 - 541 - return 0; 542 548 } 543 549 544 550 static struct platform_driver imx_gpc_driver = { ··· 551 549 .of_match_table = imx_gpc_dt_ids, 552 550 }, 553 551 .probe = imx_gpc_probe, 554 - .remove = imx_gpc_remove, 552 + .remove_new = imx_gpc_remove, 555 553 }; 556 554 builtin_platform_driver(imx_gpc_driver)
+2 -4
drivers/pmdomain/imx/gpcv2.c
··· 1373 1373 return ret; 1374 1374 } 1375 1375 1376 - static int imx_pgc_domain_remove(struct platform_device *pdev) 1376 + static void imx_pgc_domain_remove(struct platform_device *pdev) 1377 1377 { 1378 1378 struct imx_pgc_domain *domain = pdev->dev.platform_data; 1379 1379 ··· 1385 1385 domain->bits.map, 0); 1386 1386 1387 1387 pm_runtime_disable(domain->dev); 1388 - 1389 - return 0; 1390 1388 } 1391 1389 1392 1390 #ifdef CONFIG_PM_SLEEP ··· 1428 1430 .pm = &imx_pgc_domain_pm_ops, 1429 1431 }, 1430 1432 .probe = imx_pgc_domain_probe, 1431 - .remove = imx_pgc_domain_remove, 1433 + .remove_new = imx_pgc_domain_remove, 1432 1434 .id_table = imx_pgc_domain_id, 1433 1435 }; 1434 1436 builtin_platform_driver(imx_pgc_domain_driver)
+2 -4
drivers/pmdomain/imx/imx8m-blk-ctrl.c
··· 330 330 return ret; 331 331 } 332 332 333 - static int imx8m_blk_ctrl_remove(struct platform_device *pdev) 333 + static void imx8m_blk_ctrl_remove(struct platform_device *pdev) 334 334 { 335 335 struct imx8m_blk_ctrl *bc = dev_get_drvdata(&pdev->dev); 336 336 int i; ··· 347 347 dev_pm_genpd_remove_notifier(bc->bus_power_dev); 348 348 349 349 dev_pm_domain_detach(bc->bus_power_dev, true); 350 - 351 - return 0; 352 350 } 353 351 354 352 #ifdef CONFIG_PM_SLEEP ··· 886 888 887 889 static struct platform_driver imx8m_blk_ctrl_driver = { 888 890 .probe = imx8m_blk_ctrl_probe, 889 - .remove = imx8m_blk_ctrl_remove, 891 + .remove_new = imx8m_blk_ctrl_remove, 890 892 .driver = { 891 893 .name = "imx8m-blk-ctrl", 892 894 .pm = &imx8m_blk_ctrl_pm_ops,
+2 -4
drivers/pmdomain/imx/imx8mp-blk-ctrl.c
··· 760 760 return ret; 761 761 } 762 762 763 - static int imx8mp_blk_ctrl_remove(struct platform_device *pdev) 763 + static void imx8mp_blk_ctrl_remove(struct platform_device *pdev) 764 764 { 765 765 struct imx8mp_blk_ctrl *bc = dev_get_drvdata(&pdev->dev); 766 766 int i; ··· 777 777 dev_pm_genpd_remove_notifier(bc->bus_power_dev); 778 778 779 779 dev_pm_domain_detach(bc->bus_power_dev, true); 780 - 781 - return 0; 782 780 } 783 781 784 782 #ifdef CONFIG_PM_SLEEP ··· 854 856 855 857 static struct platform_driver imx8mp_blk_ctrl_driver = { 856 858 .probe = imx8mp_blk_ctrl_probe, 857 - .remove = imx8mp_blk_ctrl_remove, 859 + .remove_new = imx8mp_blk_ctrl_remove, 858 860 .driver = { 859 861 .name = "imx8mp-blk-ctrl", 860 862 .pm = &imx8mp_blk_ctrl_pm_ops,
+2 -4
drivers/pmdomain/imx/imx93-blk-ctrl.c
··· 306 306 return ret; 307 307 } 308 308 309 - static int imx93_blk_ctrl_remove(struct platform_device *pdev) 309 + static void imx93_blk_ctrl_remove(struct platform_device *pdev) 310 310 { 311 311 struct imx93_blk_ctrl *bc = dev_get_drvdata(&pdev->dev); 312 312 int i; ··· 318 318 319 319 pm_genpd_remove(&domain->genpd); 320 320 } 321 - 322 - return 0; 323 321 } 324 322 325 323 static const struct imx93_blk_ctrl_domain_data imx93_media_blk_ctl_domain_data[] = { ··· 436 438 437 439 static struct platform_driver imx93_blk_ctrl_driver = { 438 440 .probe = imx93_blk_ctrl_probe, 439 - .remove = imx93_blk_ctrl_remove, 441 + .remove_new = imx93_blk_ctrl_remove, 440 442 .driver = { 441 443 .name = "imx93-blk-ctrl", 442 444 .of_match_table = imx93_blk_ctrl_of_match,
+2 -4
drivers/pmdomain/imx/imx93-pd.c
··· 83 83 return 0; 84 84 }; 85 85 86 - static int imx93_pd_remove(struct platform_device *pdev) 86 + static void imx93_pd_remove(struct platform_device *pdev) 87 87 { 88 88 struct imx93_power_domain *domain = platform_get_drvdata(pdev); 89 89 struct device *dev = &pdev->dev; ··· 94 94 95 95 of_genpd_del_provider(np); 96 96 pm_genpd_remove(&domain->genpd); 97 - 98 - return 0; 99 97 } 100 98 101 99 static int imx93_pd_probe(struct platform_device *pdev) ··· 165 167 .of_match_table = imx93_pd_ids, 166 168 }, 167 169 .probe = imx93_pd_probe, 168 - .remove = imx93_pd_remove, 170 + .remove_new = imx93_pd_remove, 169 171 }; 170 172 module_platform_driver(imx93_power_domain_driver); 171 173
+2 -4
drivers/pmdomain/qcom/cpr.c
··· 1712 1712 return ret; 1713 1713 } 1714 1714 1715 - static int cpr_remove(struct platform_device *pdev) 1715 + static void cpr_remove(struct platform_device *pdev) 1716 1716 { 1717 1717 struct cpr_drv *drv = platform_get_drvdata(pdev); 1718 1718 ··· 1725 1725 pm_genpd_remove(&drv->pd); 1726 1726 1727 1727 debugfs_remove_recursive(drv->debugfs); 1728 - 1729 - return 0; 1730 1728 } 1731 1729 1732 1730 static const struct of_device_id cpr_match_table[] = { ··· 1735 1737 1736 1738 static struct platform_driver cpr_driver = { 1737 1739 .probe = cpr_probe, 1738 - .remove = cpr_remove, 1740 + .remove_new = cpr_remove, 1739 1741 .driver = { 1740 1742 .name = "qcom-cpr", 1741 1743 .of_match_table = cpr_match_table,
+6 -6
drivers/pmdomain/qcom/rpmhpd.c
··· 598 598 .num_pds = ARRAY_SIZE(sc8280xp_rpmhpds), 599 599 }; 600 600 601 - /* SC8380xp RPMH powerdomains */ 602 - static struct rpmhpd *sc8380xp_rpmhpds[] = { 601 + /* X1E80100 RPMH powerdomains */ 602 + static struct rpmhpd *x1e80100_rpmhpds[] = { 603 603 [RPMHPD_CX] = &cx, 604 604 [RPMHPD_CX_AO] = &cx_ao, 605 605 [RPMHPD_EBI] = &ebi, ··· 615 615 [RPMHPD_GMXC] = &gmxc, 616 616 }; 617 617 618 - static const struct rpmhpd_desc sc8380xp_desc = { 619 - .rpmhpds = sc8380xp_rpmhpds, 620 - .num_pds = ARRAY_SIZE(sc8380xp_rpmhpds), 618 + static const struct rpmhpd_desc x1e80100_desc = { 619 + .rpmhpds = x1e80100_rpmhpds, 620 + .num_pds = ARRAY_SIZE(x1e80100_rpmhpds), 621 621 }; 622 622 623 623 static const struct of_device_id rpmhpd_match_table[] = { ··· 629 629 { .compatible = "qcom,sc7280-rpmhpd", .data = &sc7280_desc }, 630 630 { .compatible = "qcom,sc8180x-rpmhpd", .data = &sc8180x_desc }, 631 631 { .compatible = "qcom,sc8280xp-rpmhpd", .data = &sc8280xp_desc }, 632 - { .compatible = "qcom,sc8380xp-rpmhpd", .data = &sc8380xp_desc }, 633 632 { .compatible = "qcom,sdm670-rpmhpd", .data = &sdm670_desc }, 634 633 { .compatible = "qcom,sdm845-rpmhpd", .data = &sdm845_desc }, 635 634 { .compatible = "qcom,sdx55-rpmhpd", .data = &sdx55_desc}, ··· 642 643 { .compatible = "qcom,sm8450-rpmhpd", .data = &sm8450_desc }, 643 644 { .compatible = "qcom,sm8550-rpmhpd", .data = &sm8550_desc }, 644 645 { .compatible = "qcom,sm8650-rpmhpd", .data = &sm8650_desc }, 646 + { .compatible = "qcom,x1e80100-rpmhpd", .data = &x1e80100_desc }, 645 647 { } 646 648 }; 647 649 MODULE_DEVICE_TABLE(of, rpmhpd_match_table);
+2 -4
drivers/pmdomain/xilinx/zynqmp-pm-domains.c
··· 293 293 return 0; 294 294 } 295 295 296 - static int zynqmp_gpd_remove(struct platform_device *pdev) 296 + static void zynqmp_gpd_remove(struct platform_device *pdev) 297 297 { 298 298 of_genpd_del_provider(pdev->dev.parent->of_node); 299 - 300 - return 0; 301 299 } 302 300 303 301 static void zynqmp_gpd_sync_state(struct device *dev) ··· 313 315 .sync_state = zynqmp_gpd_sync_state, 314 316 }, 315 317 .probe = zynqmp_gpd_probe, 316 - .remove = zynqmp_gpd_remove, 318 + .remove_new = zynqmp_gpd_remove, 317 319 }; 318 320 module_platform_driver(zynqmp_power_domain_driver); 319 321
+1
include/dt-bindings/power/meson-g12a-power.h
··· 10 10 #define PWRC_G12A_VPU_ID 0 11 11 #define PWRC_G12A_ETH_ID 1 12 12 #define PWRC_G12A_NNA_ID 2 13 + #define PWRC_G12A_ISP_ID 3 13 14 14 15 #endif
-12
include/linux/pm_domain.h
··· 118 118 }; 119 119 120 120 struct genpd_lock_ops; 121 - struct dev_pm_opp; 122 121 struct opp_table; 123 122 124 123 struct generic_pm_domain { ··· 145 146 int (*power_on)(struct generic_pm_domain *domain); 146 147 struct raw_notifier_head power_notifiers; /* Power on/off notifiers */ 147 148 struct opp_table *opp_table; /* OPP table of the genpd */ 148 - unsigned int (*opp_to_performance_state)(struct generic_pm_domain *genpd, 149 - struct dev_pm_opp *opp); 150 149 int (*set_performance_state)(struct generic_pm_domain *genpd, 151 150 unsigned int state); 152 151 struct gpd_dev_ops dev_ops; ··· 345 348 struct generic_pm_domain *of_genpd_remove_last(struct device_node *np); 346 349 int of_genpd_parse_idle_states(struct device_node *dn, 347 350 struct genpd_power_state **states, int *n); 348 - unsigned int pm_genpd_opp_to_performance_state(struct device *genpd_dev, 349 - struct dev_pm_opp *opp); 350 351 351 352 int genpd_dev_pm_attach(struct device *dev); 352 353 struct device *genpd_dev_pm_attach_by_id(struct device *dev, ··· 388 393 struct genpd_power_state **states, int *n) 389 394 { 390 395 return -ENODEV; 391 - } 392 - 393 - static inline unsigned int 394 - pm_genpd_opp_to_performance_state(struct device *genpd_dev, 395 - struct dev_pm_opp *opp) 396 - { 397 - return 0; 398 396 } 399 397 400 398 static inline int genpd_dev_pm_attach(struct device *dev)