pmdomain providers:

- mediatek: Fix spinlock recursion in probe
  - tegra: Use GENPD_FLAG_NO_STAY_ON to restore old behaviour
 -----BEGIN PGP SIGNATURE-----
 
 iQJLBAABCgA1FiEEugLDXPmKSktSkQsV/iaEJXNYjCkFAmkpnnwXHHVsZi5oYW5z
 c29uQGxpbmFyby5vcmcACgkQ/iaEJXNYjCmftBAAuVW8S8J+qHDsc7HPGAoGd9F8
 bzNLcXaBh1MeEcFBCtBsk1MWkBYqSufK+qZWBeTVrfE8dKKj61HQXGN3i+NGh0mE
 DLyscaD7E43DLMGNLRwRW04cuQjRTxOLfXGzSMp/SeDQXxmwvDvL4qIAGOkvQ93s
 WcNz7ThVFqpClYwaCPq+eC+oAVRucGQzFhIJrWAJD4pNeu97uFoHX+JQDUEuMhWO
 jSsno8eGIkzW5tahSZEvmI+M/VLjnLp48J5H+XdH6VHmgkw6F3TqQLfKh48zVQDh
 ACwyUr+lWMkcoZjZfjZ2kaePZ+9zQ7RqGrcxSUlX0kY0ZMEEpMEKAYndrPU5Engx
 7Y/XqLiamjhBvgSAN6NYnlQSyqLoWILoK7ivaVa3iakjaC4Hto4XopHbHOTp1Zsq
 ASRK9F4bLxwNeGQSiE1X0OngthvqOLBwancuUg71epq+YNZheWZi3ra8tALcSO1D
 SDQYAqD+yWEF2g1r0ZPdRvy2SzPnQhPu1QILsSNi1+XP+XGQySXZvFGB39+wqGZP
 ZZytlhLhWWhHvecVQc+6CLyc7COW7tvcsnk/8x/9oubUjCXMYXVzmlJoz9JThHhY
 DeZp77svDr7hy2WZ5Jn0v8ZdCXUoJxXKmKRuSXEts/wOPvNSWHJm+XPNO25RQSzn
 g+xxidSJf/oPiRX1/9I=
 =CrJQ
 -----END PGP SIGNATURE-----

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

Pull pmdomain fixes from Ulf Hansson:

 - mediatek: Fix spinlock recursion in probe

 - tegra: Use GENPD_FLAG_NO_STAY_ON to restore old behaviour

* tag 'pmdomain-v6.18-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/linux-pm:
  pmdomain: tegra: Add GENPD_FLAG_NO_STAY_ON flag
  pmdomains: mtk-pm-domains: Fix spinlock recursion in probe
This commit is contained in:
Linus Torvalds 2025-11-28 08:08:02 -08:00
commit f849f26f77
2 changed files with 16 additions and 3 deletions

View File

@ -748,6 +748,18 @@ static void scpsys_domain_cleanup(struct scpsys *scpsys)
} }
} }
static struct device_node *scpsys_get_legacy_regmap(struct device_node *np, const char *pn)
{
struct device_node *local_node;
for_each_child_of_node(np, local_node) {
if (of_property_present(local_node, pn))
return local_node;
}
return NULL;
}
static int scpsys_get_bus_protection_legacy(struct device *dev, struct scpsys *scpsys) static int scpsys_get_bus_protection_legacy(struct device *dev, struct scpsys *scpsys)
{ {
const u8 bp_blocks[3] = { const u8 bp_blocks[3] = {
@ -769,7 +781,7 @@ static int scpsys_get_bus_protection_legacy(struct device *dev, struct scpsys *s
* this makes it then possible to allocate the array of bus_prot * this makes it then possible to allocate the array of bus_prot
* regmaps and convert all to the new style handling. * regmaps and convert all to the new style handling.
*/ */
node = of_find_node_with_property(np, "mediatek,infracfg"); node = scpsys_get_legacy_regmap(np, "mediatek,infracfg");
if (node) { if (node) {
regmap[0] = syscon_regmap_lookup_by_phandle(node, "mediatek,infracfg"); regmap[0] = syscon_regmap_lookup_by_phandle(node, "mediatek,infracfg");
of_node_put(node); of_node_put(node);
@ -782,7 +794,7 @@ static int scpsys_get_bus_protection_legacy(struct device *dev, struct scpsys *s
regmap[0] = NULL; regmap[0] = NULL;
} }
node = of_find_node_with_property(np, "mediatek,smi"); node = scpsys_get_legacy_regmap(np, "mediatek,smi");
if (node) { if (node) {
smi_np = of_parse_phandle(node, "mediatek,smi", 0); smi_np = of_parse_phandle(node, "mediatek,smi", 0);
of_node_put(node); of_node_put(node);
@ -800,7 +812,7 @@ static int scpsys_get_bus_protection_legacy(struct device *dev, struct scpsys *s
regmap[1] = NULL; regmap[1] = NULL;
} }
node = of_find_node_with_property(np, "mediatek,infracfg-nao"); node = scpsys_get_legacy_regmap(np, "mediatek,infracfg-nao");
if (node) { if (node) {
regmap[2] = syscon_regmap_lookup_by_phandle(node, "mediatek,infracfg-nao"); regmap[2] = syscon_regmap_lookup_by_phandle(node, "mediatek,infracfg-nao");
num_regmaps++; num_regmaps++;

View File

@ -184,6 +184,7 @@ tegra_powergate_add(struct tegra_bpmp *bpmp,
powergate->genpd.name = kstrdup(info->name, GFP_KERNEL); powergate->genpd.name = kstrdup(info->name, GFP_KERNEL);
powergate->genpd.power_on = tegra_powergate_power_on; powergate->genpd.power_on = tegra_powergate_power_on;
powergate->genpd.power_off = tegra_powergate_power_off; powergate->genpd.power_off = tegra_powergate_power_off;
powergate->genpd.flags = GENPD_FLAG_NO_STAY_ON;
err = pm_genpd_init(&powergate->genpd, NULL, off); err = pm_genpd_init(&powergate->genpd, NULL, off);
if (err < 0) { if (err < 0) {