Skip to content

Commit fa4c221

Browse files
committed
Merge tag 'pmdomain-v6.13-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/linux-pm
Pull pmdomain fixes from Ulf Hansson: "Core: - Fix a couple of memory-leaks during genpd init/remove Providers: - imx: Adjust delay for gpcv2 to fix power up handshake - mediatek: Fix DT bindings by adding another nested power-domain layer" * tag 'pmdomain-v6.13-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/linux-pm: pmdomain: imx: gpcv2: Adjust delay after power up handshake pmdomain: core: Fix error path in pm_genpd_init() when ida alloc fails pmdomain: core: Add missing put_device() dt-bindings: power: mediatek: Add another nested power-domain layer
2 parents b8f5221 + 2379fb9 commit fa4c221

File tree

3 files changed

+25
-18
lines changed

3 files changed

+25
-18
lines changed

Documentation/devicetree/bindings/power/mediatek,power-controller.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ patternProperties:
5555
patternProperties:
5656
"^power-domain@[0-9a-f]+$":
5757
$ref: "#/$defs/power-domain-node"
58+
patternProperties:
59+
"^power-domain@[0-9a-f]+$":
60+
$ref: "#/$defs/power-domain-node"
61+
unevaluatedProperties: false
5862
unevaluatedProperties: false
5963
unevaluatedProperties: false
6064
unevaluatedProperties: false

drivers/pmdomain/core.c

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2172,8 +2172,24 @@ static int genpd_alloc_data(struct generic_pm_domain *genpd)
21722172
}
21732173

21742174
genpd->gd = gd;
2175-
return 0;
2175+
device_initialize(&genpd->dev);
2176+
2177+
if (!genpd_is_dev_name_fw(genpd)) {
2178+
dev_set_name(&genpd->dev, "%s", genpd->name);
2179+
} else {
2180+
ret = ida_alloc(&genpd_ida, GFP_KERNEL);
2181+
if (ret < 0)
2182+
goto put;
21762183

2184+
genpd->device_id = ret;
2185+
dev_set_name(&genpd->dev, "%s_%u", genpd->name, genpd->device_id);
2186+
}
2187+
2188+
return 0;
2189+
put:
2190+
put_device(&genpd->dev);
2191+
if (genpd->free_states == genpd_free_default_power_state)
2192+
kfree(genpd->states);
21772193
free:
21782194
if (genpd_is_cpu_domain(genpd))
21792195
free_cpumask_var(genpd->cpus);
@@ -2183,6 +2199,9 @@ static int genpd_alloc_data(struct generic_pm_domain *genpd)
21832199

21842200
static void genpd_free_data(struct generic_pm_domain *genpd)
21852201
{
2202+
put_device(&genpd->dev);
2203+
if (genpd->device_id != -ENXIO)
2204+
ida_free(&genpd_ida, genpd->device_id);
21862205
if (genpd_is_cpu_domain(genpd))
21872206
free_cpumask_var(genpd->cpus);
21882207
if (genpd->free_states)
@@ -2271,20 +2290,6 @@ int pm_genpd_init(struct generic_pm_domain *genpd,
22712290
if (ret)
22722291
return ret;
22732292

2274-
device_initialize(&genpd->dev);
2275-
2276-
if (!genpd_is_dev_name_fw(genpd)) {
2277-
dev_set_name(&genpd->dev, "%s", genpd->name);
2278-
} else {
2279-
ret = ida_alloc(&genpd_ida, GFP_KERNEL);
2280-
if (ret < 0) {
2281-
put_device(&genpd->dev);
2282-
return ret;
2283-
}
2284-
genpd->device_id = ret;
2285-
dev_set_name(&genpd->dev, "%s_%u", genpd->name, genpd->device_id);
2286-
}
2287-
22882293
mutex_lock(&gpd_list_lock);
22892294
list_add(&genpd->gpd_list_node, &gpd_list);
22902295
mutex_unlock(&gpd_list_lock);
@@ -2325,8 +2330,6 @@ static int genpd_remove(struct generic_pm_domain *genpd)
23252330
genpd_unlock(genpd);
23262331
genpd_debug_remove(genpd);
23272332
cancel_work_sync(&genpd->power_off_work);
2328-
if (genpd->device_id != -ENXIO)
2329-
ida_free(&genpd_ida, genpd->device_id);
23302333
genpd_free_data(genpd);
23312334

23322335
pr_debug("%s: removed %s\n", __func__, dev_name(&genpd->dev));

drivers/pmdomain/imx/gpcv2.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,7 @@ static int imx_pgc_power_up(struct generic_pm_domain *genpd)
403403
* already reaches target before udelay()
404404
*/
405405
regmap_read_bypassed(domain->regmap, domain->regs->hsk, &reg_val);
406-
udelay(5);
406+
udelay(10);
407407
}
408408

409409
/* Disable reset clocks for all devices in the domain */

0 commit comments

Comments
 (0)