mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2024-12-28 00:33:16 +00:00
pmdomain core:
- Fix a couple of memory-leaks during genpd init/remove pmdomain providers: - imx: Adjust delay for gpcv2 to fix power up handshake - mediatek: Fix DT bindings by adding another nested power-domain layer -----BEGIN PGP SIGNATURE----- iQJLBAABCgA1FiEEugLDXPmKSktSkQsV/iaEJXNYjCkFAmdSt34XHHVsZi5oYW5z c29uQGxpbmFyby5vcmcACgkQ/iaEJXNYjCndLxAA1LCeZzCj2nolAmr6W0MZcH2/ RWqiAMIecjAcLDVp5y0Ld9dV/c44AWRzxc2kE8L1EehDlVATWZlNo6p4c2EPCJhh C0SXJx3Dh7MLJuwNxTno8cxUKsKVArFUd6X4jbiPoDNgKfMYols/9N9KdR/QCbFI SEwpwJlerOn6UeTAP7nEattelX/4CjamzwDqVoScIANIN3wuDXrVmgdTpjZPLmyM HWYTwraA6gqzEcp/QkfyoFasWWFBD4eQgGssbb6qnxeqWUnGON1VJLOuC2QDIQS/ 4swsS08rG3SrKnbvXepOnb6ToW7L7KR8qbjc02sDrrTPp9lrmPIt7XG1thcOhxYw wUXpVUM48AbgfRnZct870HUiZ1aWE0SswsOMlLTv7G5zIILKb+huKvnN0dMHJn70 flno1+ORGQs+flHRN8DhmZop9wYa+62xljIFSjTJkoFkq7VGLKWevqZE28L8CGY+ VwXoc2gn+qPaJs7mhNOyk/v11CQEWxVMM2dRhXrAjK5/h/wnQGdavwbpdLdla5rL mV9E0bEPeafYrWIfQHnEGOOZWpsK2seAJx2+0kE38/0d1UVzFlxPMjyakLeURvYG bsJRwxkEjTb4TkmyRbyFQPps99L1vOy/T1wvT01lgM2BrPtyeeJK1XaA2O16B/WE 0gjYeGq59UYFhrAHOok= =fCUR -----END PGP SIGNATURE----- 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
This commit is contained in:
commit
fa4c221fa1
@ -55,6 +55,10 @@ patternProperties:
|
||||
patternProperties:
|
||||
"^power-domain@[0-9a-f]+$":
|
||||
$ref: "#/$defs/power-domain-node"
|
||||
patternProperties:
|
||||
"^power-domain@[0-9a-f]+$":
|
||||
$ref: "#/$defs/power-domain-node"
|
||||
unevaluatedProperties: false
|
||||
unevaluatedProperties: false
|
||||
unevaluatedProperties: false
|
||||
unevaluatedProperties: false
|
||||
|
@ -2172,8 +2172,24 @@ static int genpd_alloc_data(struct generic_pm_domain *genpd)
|
||||
}
|
||||
|
||||
genpd->gd = gd;
|
||||
return 0;
|
||||
device_initialize(&genpd->dev);
|
||||
|
||||
if (!genpd_is_dev_name_fw(genpd)) {
|
||||
dev_set_name(&genpd->dev, "%s", genpd->name);
|
||||
} else {
|
||||
ret = ida_alloc(&genpd_ida, GFP_KERNEL);
|
||||
if (ret < 0)
|
||||
goto put;
|
||||
|
||||
genpd->device_id = ret;
|
||||
dev_set_name(&genpd->dev, "%s_%u", genpd->name, genpd->device_id);
|
||||
}
|
||||
|
||||
return 0;
|
||||
put:
|
||||
put_device(&genpd->dev);
|
||||
if (genpd->free_states == genpd_free_default_power_state)
|
||||
kfree(genpd->states);
|
||||
free:
|
||||
if (genpd_is_cpu_domain(genpd))
|
||||
free_cpumask_var(genpd->cpus);
|
||||
@ -2183,6 +2199,9 @@ static int genpd_alloc_data(struct generic_pm_domain *genpd)
|
||||
|
||||
static void genpd_free_data(struct generic_pm_domain *genpd)
|
||||
{
|
||||
put_device(&genpd->dev);
|
||||
if (genpd->device_id != -ENXIO)
|
||||
ida_free(&genpd_ida, genpd->device_id);
|
||||
if (genpd_is_cpu_domain(genpd))
|
||||
free_cpumask_var(genpd->cpus);
|
||||
if (genpd->free_states)
|
||||
@ -2271,20 +2290,6 @@ int pm_genpd_init(struct generic_pm_domain *genpd,
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
device_initialize(&genpd->dev);
|
||||
|
||||
if (!genpd_is_dev_name_fw(genpd)) {
|
||||
dev_set_name(&genpd->dev, "%s", genpd->name);
|
||||
} else {
|
||||
ret = ida_alloc(&genpd_ida, GFP_KERNEL);
|
||||
if (ret < 0) {
|
||||
put_device(&genpd->dev);
|
||||
return ret;
|
||||
}
|
||||
genpd->device_id = ret;
|
||||
dev_set_name(&genpd->dev, "%s_%u", genpd->name, genpd->device_id);
|
||||
}
|
||||
|
||||
mutex_lock(&gpd_list_lock);
|
||||
list_add(&genpd->gpd_list_node, &gpd_list);
|
||||
mutex_unlock(&gpd_list_lock);
|
||||
@ -2325,8 +2330,6 @@ static int genpd_remove(struct generic_pm_domain *genpd)
|
||||
genpd_unlock(genpd);
|
||||
genpd_debug_remove(genpd);
|
||||
cancel_work_sync(&genpd->power_off_work);
|
||||
if (genpd->device_id != -ENXIO)
|
||||
ida_free(&genpd_ida, genpd->device_id);
|
||||
genpd_free_data(genpd);
|
||||
|
||||
pr_debug("%s: removed %s\n", __func__, dev_name(&genpd->dev));
|
||||
|
@ -403,7 +403,7 @@ static int imx_pgc_power_up(struct generic_pm_domain *genpd)
|
||||
* already reaches target before udelay()
|
||||
*/
|
||||
regmap_read_bypassed(domain->regmap, domain->regs->hsk, ®_val);
|
||||
udelay(5);
|
||||
udelay(10);
|
||||
}
|
||||
|
||||
/* Disable reset clocks for all devices in the domain */
|
||||
|
Loading…
Reference in New Issue
Block a user