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

Configure Feed

Select the types of activity you want to include in your feed.

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

+25 -18
+4
Documentation/devicetree/bindings/power/mediatek,power-controller.yaml
··· 55 55 patternProperties: 56 56 "^power-domain@[0-9a-f]+$": 57 57 $ref: "#/$defs/power-domain-node" 58 + patternProperties: 59 + "^power-domain@[0-9a-f]+$": 60 + $ref: "#/$defs/power-domain-node" 61 + unevaluatedProperties: false 58 62 unevaluatedProperties: false 59 63 unevaluatedProperties: false 60 64 unevaluatedProperties: false
+20 -17
drivers/pmdomain/core.c
··· 2172 2172 } 2173 2173 2174 2174 genpd->gd = gd; 2175 - return 0; 2175 + device_initialize(&genpd->dev); 2176 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; 2183 + 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); 2177 2193 free: 2178 2194 if (genpd_is_cpu_domain(genpd)) 2179 2195 free_cpumask_var(genpd->cpus); ··· 2199 2183 2200 2184 static void genpd_free_data(struct generic_pm_domain *genpd) 2201 2185 { 2186 + put_device(&genpd->dev); 2187 + if (genpd->device_id != -ENXIO) 2188 + ida_free(&genpd_ida, genpd->device_id); 2202 2189 if (genpd_is_cpu_domain(genpd)) 2203 2190 free_cpumask_var(genpd->cpus); 2204 2191 if (genpd->free_states) ··· 2290 2271 if (ret) 2291 2272 return ret; 2292 2273 2293 - device_initialize(&genpd->dev); 2294 - 2295 - if (!genpd_is_dev_name_fw(genpd)) { 2296 - dev_set_name(&genpd->dev, "%s", genpd->name); 2297 - } else { 2298 - ret = ida_alloc(&genpd_ida, GFP_KERNEL); 2299 - if (ret < 0) { 2300 - put_device(&genpd->dev); 2301 - return ret; 2302 - } 2303 - genpd->device_id = ret; 2304 - dev_set_name(&genpd->dev, "%s_%u", genpd->name, genpd->device_id); 2305 - } 2306 - 2307 2274 mutex_lock(&gpd_list_lock); 2308 2275 list_add(&genpd->gpd_list_node, &gpd_list); 2309 2276 mutex_unlock(&gpd_list_lock); ··· 2330 2325 genpd_unlock(genpd); 2331 2326 genpd_debug_remove(genpd); 2332 2327 cancel_work_sync(&genpd->power_off_work); 2333 - if (genpd->device_id != -ENXIO) 2334 - ida_free(&genpd_ida, genpd->device_id); 2335 2328 genpd_free_data(genpd); 2336 2329 2337 2330 pr_debug("%s: removed %s\n", __func__, dev_name(&genpd->dev));
+1 -1
drivers/pmdomain/imx/gpcv2.c
··· 403 403 * already reaches target before udelay() 404 404 */ 405 405 regmap_read_bypassed(domain->regmap, domain->regs->hsk, &reg_val); 406 - udelay(5); 406 + udelay(10); 407 407 } 408 408 409 409 /* Disable reset clocks for all devices in the domain */