diff options
author | Kevin Hilman <khilman@baylibre.com> | 2023-10-02 15:13:11 -0700 |
---|---|---|
committer | Kevin Hilman <khilman@baylibre.com> | 2023-11-01 16:19:55 -0700 |
commit | 352a1b98d79884d2279ed03643bc1ada9d1cb361 (patch) | |
tree | f9574ded957cb3e6ae37f0649440b5c36b48795c | |
parent | 590b0e3ec6373c43d8633c91e33b06bc6cbbb321 (diff) | |
download | linux-wip/ti-genpd-grouping.tar.gz |
WIP: TI SCI: use subdomains for MAIN, MCU, WKUPwip/ti-genpd-grouping
-rw-r--r-- | arch/arm64/boot/dts/ti/k3-am62-main.dtsi | 12 | ||||
-rw-r--r-- | arch/arm64/boot/dts/ti/k3-am62-mcu.dtsi | 20 | ||||
-rw-r--r-- | arch/arm64/boot/dts/ti/k3-am62-wakeup.dtsi | 10 | ||||
-rw-r--r-- | drivers/genpd/ti/ti_sci_pm_domains.c | 14 |
4 files changed, 38 insertions, 18 deletions
diff --git a/arch/arm64/boot/dts/ti/k3-am62-main.dtsi b/arch/arm64/boot/dts/ti/k3-am62-main.dtsi index 33b6aadc90836..128ec952e2fb5 100644 --- a/arch/arm64/boot/dts/ti/k3-am62-main.dtsi +++ b/arch/arm64/boot/dts/ti/k3-am62-main.dtsi @@ -155,7 +155,17 @@ reg-names = "debug_messages"; reg = <0x00 0x44043000 0x00 0xfe0>; - k3_pds: power-controller { + k3_pds: power-controller@1 { + compatible = "ti,sci-pm-domain"; + #power-domain-cells = <2>; + }; + + k3_mcu_pds: power-controller@2 { + compatible = "ti,sci-pm-domain"; + #power-domain-cells = <2>; + }; + + k3_wkup_pds: power-controller@3 { compatible = "ti,sci-pm-domain"; #power-domain-cells = <2>; }; diff --git a/arch/arm64/boot/dts/ti/k3-am62-mcu.dtsi b/arch/arm64/boot/dts/ti/k3-am62-mcu.dtsi index 19fc38157d94e..5c7e2673e06b1 100644 --- a/arch/arm64/boot/dts/ti/k3-am62-mcu.dtsi +++ b/arch/arm64/boot/dts/ti/k3-am62-mcu.dtsi @@ -30,7 +30,7 @@ reg = <0x00 0x4800000 0x00 0x400>; clocks = <&k3_clks 35 2>; clock-names = "fck"; - power-domains = <&k3_pds 35 TI_SCI_PD_EXCLUSIVE>; + power-domains = <&k3_mcu_pds 35 TI_SCI_PD_EXCLUSIVE>; ti,timer-pwm; status = "reserved"; }; @@ -40,7 +40,7 @@ reg = <0x00 0x4810000 0x00 0x400>; clocks = <&k3_clks 48 2>; clock-names = "fck"; - power-domains = <&k3_pds 48 TI_SCI_PD_EXCLUSIVE>; + power-domains = <&k3_mcu_pds 48 TI_SCI_PD_EXCLUSIVE>; ti,timer-pwm; status = "reserved"; }; @@ -50,7 +50,7 @@ reg = <0x00 0x4820000 0x00 0x400>; clocks = <&k3_clks 49 2>; clock-names = "fck"; - power-domains = <&k3_pds 49 TI_SCI_PD_EXCLUSIVE>; + power-domains = <&k3_mcu_pds 49 TI_SCI_PD_EXCLUSIVE>; ti,timer-pwm; status = "reserved"; }; @@ -60,7 +60,7 @@ reg = <0x00 0x4830000 0x00 0x400>; clocks = <&k3_clks 50 2>; clock-names = "fck"; - power-domains = <&k3_pds 50 TI_SCI_PD_EXCLUSIVE>; + power-domains = <&k3_mcu_pds 50 TI_SCI_PD_EXCLUSIVE>; ti,timer-pwm; status = "reserved"; }; @@ -69,7 +69,7 @@ compatible = "ti,am64-uart", "ti,am654-uart"; reg = <0x00 0x04a00000 0x00 0x100>; interrupts = <GIC_SPI 185 IRQ_TYPE_LEVEL_HIGH>; - power-domains = <&k3_pds 149 TI_SCI_PD_EXCLUSIVE>; + power-domains = <&k3_mcu_pds 149 TI_SCI_PD_EXCLUSIVE>; clocks = <&k3_clks 149 0>; clock-names = "fclk"; status = "disabled"; @@ -81,7 +81,7 @@ interrupts = <GIC_SPI 107 IRQ_TYPE_LEVEL_HIGH>; #address-cells = <1>; #size-cells = <0>; - power-domains = <&k3_pds 106 TI_SCI_PD_EXCLUSIVE>; + power-domains = <&k3_mcu_pds 106 TI_SCI_PD_EXCLUSIVE>; clocks = <&k3_clks 106 2>; clock-names = "fck"; status = "disabled"; @@ -93,7 +93,7 @@ interrupts = <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>; #address-cells = <1>; #size-cells = <0>; - power-domains = <&k3_pds 147 TI_SCI_PD_EXCLUSIVE>; + power-domains = <&k3_mcu_pds 147 TI_SCI_PD_EXCLUSIVE>; clocks = <&k3_clks 147 0>; status = "disabled"; }; @@ -104,7 +104,7 @@ interrupts = <GIC_SPI 177 IRQ_TYPE_LEVEL_HIGH>; #address-cells = <1>; #size-cells = <0>; - power-domains = <&k3_pds 148 TI_SCI_PD_EXCLUSIVE>; + power-domains = <&k3_mcu_pds 148 TI_SCI_PD_EXCLUSIVE>; clocks = <&k3_clks 148 0>; status = "disabled"; }; @@ -132,7 +132,7 @@ #interrupt-cells = <2>; ti,ngpio = <24>; ti,davinci-gpio-unbanked = <0>; - power-domains = <&k3_pds 79 TI_SCI_PD_EXCLUSIVE>; + power-domains = <&k3_mcu_pds 79 TI_SCI_PD_EXCLUSIVE>; clocks = <&k3_clks 79 0>; clock-names = "gpio"; }; @@ -141,7 +141,7 @@ compatible = "ti,j7-rti-wdt"; reg = <0x00 0x04880000 0x00 0x100>; clocks = <&k3_clks 131 0>; - power-domains = <&k3_pds 131 TI_SCI_PD_EXCLUSIVE>; + power-domains = <&k3_mcu_pds 131 TI_SCI_PD_EXCLUSIVE>; assigned-clocks = <&k3_clks 131 0>; assigned-clock-parents = <&k3_clks 131 2>; /* Tightly coupled to M4F */ diff --git a/arch/arm64/boot/dts/ti/k3-am62-wakeup.dtsi b/arch/arm64/boot/dts/ti/k3-am62-wakeup.dtsi index eae0528871862..0d95a42bdfaa1 100644 --- a/arch/arm64/boot/dts/ti/k3-am62-wakeup.dtsi +++ b/arch/arm64/boot/dts/ti/k3-am62-wakeup.dtsi @@ -23,7 +23,7 @@ compatible = "ti,am64-uart", "ti,am654-uart"; reg = <0x00 0x2b300000 0x00 0x100>; interrupts = <GIC_SPI 186 IRQ_TYPE_LEVEL_HIGH>; - power-domains = <&k3_pds 114 TI_SCI_PD_EXCLUSIVE>; + power-domains = <&k3_wkup_pds 114 TI_SCI_PD_EXCLUSIVE>; clocks = <&k3_clks 114 0>; clock-names = "fclk"; status = "disabled"; @@ -35,7 +35,7 @@ interrupts = <GIC_SPI 165 IRQ_TYPE_LEVEL_HIGH>; #address-cells = <1>; #size-cells = <0>; - power-domains = <&k3_pds 107 TI_SCI_PD_EXCLUSIVE>; + power-domains = <&k3_wkup_pds 107 TI_SCI_PD_EXCLUSIVE>; clocks = <&k3_clks 107 4>; clock-names = "fck"; status = "disabled"; @@ -47,7 +47,7 @@ interrupts = <GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH>; clocks = <&k3_clks 117 6> , <&k3_clks 117 0>; clock-names = "vbus", "osc32k"; - power-domains = <&k3_pds 117 TI_SCI_PD_EXCLUSIVE>; + power-domains = <&k3_wkup_pds 117 TI_SCI_PD_EXCLUSIVE>; wakeup-source; }; @@ -55,7 +55,7 @@ compatible = "ti,j7-rti-wdt"; reg = <0x00 0x2b000000 0x00 0x100>; clocks = <&k3_clks 132 0>; - power-domains = <&k3_pds 132 TI_SCI_PD_EXCLUSIVE>; + power-domains = <&k3_wkup_pds 132 TI_SCI_PD_EXCLUSIVE>; assigned-clocks = <&k3_clks 132 0>; assigned-clock-parents = <&k3_clks 132 2>; /* Used by DM firmware */ @@ -66,7 +66,7 @@ compatible = "ti,j7200-vtm"; reg = <0x00 0xb00000 0x00 0x400>, <0x00 0xb01000 0x00 0x400>; - power-domains = <&k3_pds 95 TI_SCI_PD_EXCLUSIVE>; + power-domains = <&k3_wkup_pds 95 TI_SCI_PD_EXCLUSIVE>; #thermal-sensor-cells = <1>; }; }; diff --git a/drivers/genpd/ti/ti_sci_pm_domains.c b/drivers/genpd/ti/ti_sci_pm_domains.c index a33ec7eaf23d1..856c407be7fd2 100644 --- a/drivers/genpd/ti/ti_sci_pm_domains.c +++ b/drivers/genpd/ti/ti_sci_pm_domains.c @@ -23,12 +23,14 @@ * @dev: pointer to dev for the driver for devm allocs * @pd_list: list of all the power domains on the device * @data: onecell data for genpd core + * @pd: generic_pm_domain for use with the genpd framework */ struct ti_sci_genpd_provider { const struct ti_sci_handle *ti_sci; struct device *dev; struct list_head pd_list; struct genpd_onecell_data data; + struct generic_pm_domain genpd; }; /** @@ -189,9 +191,17 @@ static int ti_sci_pm_domain_probe(struct platform_device *pdev) pd_provider->data.num_domains = max_id + 1; pd_provider->data.xlate = ti_sci_pd_xlate; - list_for_each_entry(pd, &pd_provider->pd_list, node) + pd_provider->genpd.name = devm_kasprintf(dev, GFP_KERNEL, "%s", + pdev->dev.of_node->full_name); + pm_genpd_init(&pd_provider->genpd, NULL, true); + dev_dbg(dev, "pd_provider: name: %s, full_name: %s, num: %u\n", + pdev->dev.of_node->name, + pdev->dev.of_node->full_name, + pd_provider->data.num_domains); + list_for_each_entry(pd, &pd_provider->pd_list, node) { pd_provider->data.domains[pd->idx] = &pd->pd; - + pm_genpd_add_subdomain(&pd_provider->genpd, &pd->pd); + } return of_genpd_add_provider_onecell(dev->of_node, &pd_provider->data); } |