Samsung SoC drivers for v6.19, part two

Two fixes for Exynos PMU (Power Management Unit) driver:
 
 1. Silence lockdep warning being actually a false positive, but quite
    disturbing during testing.  Issue was introduced in v6.18.
 
 2. Drop device refcount when requesting device regmap with
    exynos_get_pmu_regmap_by_phandle().  Issue was introduced much
    earlier (around v6.9), with code being rewritten in between.
 -----BEGIN PGP SIGNATURE-----
 
 iQJEBAABCgAuFiEE3dJiKD0RGyM7briowTdm5oaLg9cFAmkweagQHGtyemtAa2Vy
 bmVsLm9yZwAKCRDBN2bmhouD1+RXD/46XatAquz//HijWDIbcQyNuCEGkAy9CrgO
 HBZVJ3uGlA1o2YOYC5ZhNWXE5XeOTglIOweVwvQNFhdj/4LevZkvSr8bvcM24XEE
 yfZZcPtnTrbT1c4FD6LlAiPV3VqaIIYtzuG8MLOkuTqLjaadBR77nijfst/0/fkp
 eE9nUq6A8nwgkuGjnTuwspLlV0nOImevUdBPnXPoik2nNHQgyca1J9pA5AgSpghF
 Xwdf1WZ0F0bGZa3OnyOfqVms9Xdye/bRhkokAfUVKCIn3lLVsGih6xqzp3xEXpG4
 JSZlYZll71mB7v8knRZDIL3D2IGdEVaT/Sss0g4FePchJS6sokcUZVFMOc169Z+b
 Q5UiCpB+L1fkaOUBw6hD1/9VyatB9uHtXTeqZU9Qnnocl2xHsJip7ar6zAgPm0bG
 UUejo69S9/D6YQEAIT19cb42bsv3wOh4fKQxjc8MxLbcDYItVBJNXduSnDQuTfkc
 Wx8OJa9XxdL663law9G95bMquyp3TMGNommkBbZBOskja3FXmndicfhMAoCZKL/2
 mQYxnZPRZ1feLVjrnnCRTKXy89LiK9gT3iQ368tMb1c4af7alw2SlKAS018Mo6/h
 o5n+2bxEYpRi+d04rtivEJyyD3jSZ5FLxV61AwdumPrlLXM+FtwN21ZviKt3g89C
 6liRv6B2Aw==
 =lz9b
 -----END PGP SIGNATURE-----
gpgsig -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEEo6/YBQwIrVS28WGKmmx57+YAGNkFAmky7McACgkQmmx57+YA
 GNm8XQ/8CK+CAWApwsA35J/S69UjGvleDsPa2I+/XO2QMdMbfJCmCJ5xXtmr8195
 Mht2sXHs5p5pXvMc+nOsjoDj8aQnkK09e5UWh0TiuRhf+hJN53XBX+Qdc37tVmPg
 1N7Qa2fI1+g2W+DAwoADqDF0r7UmL+J5rG6Y3pgxVbCMNNd3FblkTdXiXpBwkVhy
 EiNbuVxsnH2BYB1e8+h4AJa1Hm/3uixxIePPQ+puH6zN9rJuAvaFNEBokpUeZJCi
 b99bOuU3XCH4amx9Wap9bH/1qaEuNEM29BG6dh7S5qDbzu0Jd6BLuEhC329wmVCi
 Hys0frqyc01zqgXEPrF7XWyTuvZIjp08I28VS/B1/XjfIh25bCZ95F4E7tIQ3D2G
 X1WcBvX/6DPQKElY5HtV8JMu1osvLHsUNCR9BHwVqllBpwFrYfDIMfkzUnPgNSnw
 Wg65yAeof3loev8b2mRhpbWf4n8y10780oflwe+2O9eZcI1vlUvzHLsHh6Pig2/j
 P6nDzFtW09Q697GTb4U5Tig2NKki7naxWOYJMt+QVrRGnjcYSZsByQrvSxtoI0WD
 KhfGF/2C6cxFQriBdY9wnVaqWwVooQg08PEfrDNQ7MUTfn8CMVz793QdPvaSNwmY
 oN+/845GObSxTpW9Rwzq7oRovakbCx64FmIqlwh9wHBtOY0VLvY=
 =34BB
 -----END PGP SIGNATURE-----

Merge tag 'samsung-drivers-6.19-2-late' of https://git.kernel.org/pub/scm/linux/kernel/git/krzk/linux into soc/drivers-late

Samsung SoC drivers for v6.19, part two

Two fixes for Exynos PMU (Power Management Unit) driver:

1. Silence lockdep warning being actually a false positive, but quite
   disturbing during testing.  Issue was introduced in v6.18.

2. Drop device refcount when requesting device regmap with
   exynos_get_pmu_regmap_by_phandle().  Issue was introduced much
   earlier (around v6.9), with code being rewritten in between.

* tag 'samsung-drivers-6.19-2-late' of https://git.kernel.org/pub/scm/linux/kernel/git/krzk/linux:
  soc: samsung: exynos-pmu: fix device leak on regmap lookup
  soc: samsung: exynos-pmu: Fix structure initialization

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
Arnd Bergmann 2025-12-05 15:31:33 +01:00
commit 68f9bbf4df
1 changed files with 5 additions and 4 deletions

View File

@ -346,6 +346,8 @@ struct regmap *exynos_get_pmu_regmap_by_phandle(struct device_node *np,
if (!dev) if (!dev)
return ERR_PTR(-EPROBE_DEFER); return ERR_PTR(-EPROBE_DEFER);
put_device(dev);
return syscon_node_to_regmap(pmu_np); return syscon_node_to_regmap(pmu_np);
} }
EXPORT_SYMBOL_GPL(exynos_get_pmu_regmap_by_phandle); EXPORT_SYMBOL_GPL(exynos_get_pmu_regmap_by_phandle);
@ -585,10 +587,6 @@ static int setup_cpuhp_and_cpuidle(struct device *dev)
if (!pmu_context->in_cpuhp) if (!pmu_context->in_cpuhp)
return -ENOMEM; return -ENOMEM;
raw_spin_lock_init(&pmu_context->cpupm_lock);
pmu_context->sys_inreboot = false;
pmu_context->sys_insuspend = false;
/* set PMU to power on */ /* set PMU to power on */
for_each_online_cpu(cpu) for_each_online_cpu(cpu)
gs101_cpuhp_pmu_online(cpu); gs101_cpuhp_pmu_online(cpu);
@ -657,6 +655,9 @@ static int exynos_pmu_probe(struct platform_device *pdev)
pmu_context->pmureg = regmap; pmu_context->pmureg = regmap;
pmu_context->dev = dev; pmu_context->dev = dev;
raw_spin_lock_init(&pmu_context->cpupm_lock);
pmu_context->sys_inreboot = false;
pmu_context->sys_insuspend = false;
if (pmu_context->pmu_data && pmu_context->pmu_data->pmu_cpuhp) { if (pmu_context->pmu_data && pmu_context->pmu_data->pmu_cpuhp) {
ret = setup_cpuhp_and_cpuidle(dev); ret = setup_cpuhp_and_cpuidle(dev);