mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-26 02:39:48 +00:00
hwspinlock updates for v5.6
This continues the transition of drivers to device managed resources and removal of unnecessary PM runtime integration, with cleanups to the SIRF, OMAP and Qualcomm hwspinlock drivers. It also adds Baolin as reviewer in MAINTAINERS. -----BEGIN PGP SIGNATURE----- iQJPBAABCAA5FiEEBd4DzF816k8JZtUlCx85Pw2ZrcUFAl45AgAbHGJqb3JuLmFu ZGVyc3NvbkBsaW5hcm8ub3JnAAoJEAsfOT8Nma3FuiEQAK5KV+f14XUNnLffNtof /O3hV3VTjeDuSnZfHpHToCB7Nv3TXLYt3zG79IoxMQEOBJJYWxJiXimWOZ1oSSwg YBPym1/35c4upmp23Yq3VJRjtRZHPB37AbVrfrEKpAKN3RjwyXHBagpNIjJ0A6A3 oyW756O1bHcqecloBP1D8BOM6+uFx7aNXpsuVIVg5S5vc8QuhYzDvjWMIUT1jbZz yKH+vAq9AgWzHo6RQaAzw35WqP6mSXvWaVpPTzzadz9aHxr497x64dHhk/beU72U 4/j4WOs2cINlmu7I+24YYFxewhfMtTcX5cQU4Ty/odso0O5XJQNplG8yhFyxFSnZ pWC+/2fQ6JuXgVB+nUARpxhqgPnBSHkDhh5219MIHAB5sM5CA3Extv3RcdCLFhVz TyrmVHxj0fX5iEdczpBp41aSMdkZ1XvhX9493FukTNhujfTlU2UVmDHLqXrPTlVX Rtyxnr7b9ulTA7cp5IAdOcce8jyZrRa9HjU+BWOzQFgX4Wc5n5MCveV8g92vc4rW h51JbuMcCn+JpFny/5O0Yq9T9mvymmX+W0G6zfx3ka28tV4F4yFnhWoVgtq23g/O PLoikfz3+EkFbuExxyLVfthb5wZXBhN62PShrr123zxvXBoqwIyyYEnVxzHRtcVd qF5wvqEpvBZBd5KP1KlYzL3f =TkSA -----END PGP SIGNATURE----- Merge tag 'hwlock-v5.6' of git://git.kernel.org/pub/scm/linux/kernel/git/andersson/remoteproc Pull hwspinlock updates from Bjorn Andersson: "This continues the transition of drivers to device managed resources and removal of unnecessary PM runtime integration, with cleanups to the SIRF, OMAP and Qualcomm hwspinlock drivers. It also adds Baolin as reviewer in MAINTAINERS" * tag 'hwlock-v5.6' of git://git.kernel.org/pub/scm/linux/kernel/git/andersson/remoteproc: hwspinlock: sirf: Use devm_hwspin_lock_register() to register hwlock controller hwspinlock: sirf: Remove redundant PM runtime functions hwspinlock: sirf: Change to use devm_platform_ioremap_resource() hwspinlock: omap: Use devm_kzalloc() to allocate memory hwspinlock: omap: Change to use devm_platform_ioremap_resource() hwspinlock: qcom: Use devm_hwspin_lock_register() to register hwlock controller hwspinlock: qcom: Remove redundant PM runtime functions hwspinlock: stm32: convert to devm_platform_ioremap_resource MAINTAINERS: Add myself as reviewer for the hwspinlock subsystem
This commit is contained in:
commit
685097986b
5 changed files with 22 additions and 89 deletions
|
@ -7378,6 +7378,7 @@ F: drivers/hwtracing/
|
|||
HARDWARE SPINLOCK CORE
|
||||
M: Ohad Ben-Cohen <ohad@wizery.com>
|
||||
M: Bjorn Andersson <bjorn.andersson@linaro.org>
|
||||
R: Baolin Wang <baolin.wang7@gmail.com>
|
||||
L: linux-remoteproc@vger.kernel.org
|
||||
S: Maintained
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/andersson/remoteproc.git hwspinlock-next
|
||||
|
|
|
@ -76,7 +76,6 @@ static int omap_hwspinlock_probe(struct platform_device *pdev)
|
|||
struct device_node *node = pdev->dev.of_node;
|
||||
struct hwspinlock_device *bank;
|
||||
struct hwspinlock *hwlock;
|
||||
struct resource *res;
|
||||
void __iomem *io_base;
|
||||
int num_locks, i, ret;
|
||||
/* Only a single hwspinlock block device is supported */
|
||||
|
@ -85,13 +84,9 @@ static int omap_hwspinlock_probe(struct platform_device *pdev)
|
|||
if (!node)
|
||||
return -ENODEV;
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
if (!res)
|
||||
return -ENODEV;
|
||||
|
||||
io_base = ioremap(res->start, resource_size(res));
|
||||
if (!io_base)
|
||||
return -ENOMEM;
|
||||
io_base = devm_platform_ioremap_resource(pdev, 0);
|
||||
if (IS_ERR(io_base))
|
||||
return PTR_ERR(io_base);
|
||||
|
||||
/*
|
||||
* make sure the module is enabled and clocked before reading
|
||||
|
@ -101,7 +96,7 @@ static int omap_hwspinlock_probe(struct platform_device *pdev)
|
|||
ret = pm_runtime_get_sync(&pdev->dev);
|
||||
if (ret < 0) {
|
||||
pm_runtime_put_noidle(&pdev->dev);
|
||||
goto iounmap_base;
|
||||
goto runtime_err;
|
||||
}
|
||||
|
||||
/* Determine number of locks */
|
||||
|
@ -114,20 +109,21 @@ static int omap_hwspinlock_probe(struct platform_device *pdev)
|
|||
*/
|
||||
ret = pm_runtime_put(&pdev->dev);
|
||||
if (ret < 0)
|
||||
goto iounmap_base;
|
||||
goto runtime_err;
|
||||
|
||||
/* one of the four lsb's must be set, and nothing else */
|
||||
if (hweight_long(i & 0xf) != 1 || i > 8) {
|
||||
ret = -EINVAL;
|
||||
goto iounmap_base;
|
||||
goto runtime_err;
|
||||
}
|
||||
|
||||
num_locks = i * 32; /* actual number of locks in this device */
|
||||
|
||||
bank = kzalloc(struct_size(bank, lock, num_locks), GFP_KERNEL);
|
||||
bank = devm_kzalloc(&pdev->dev, struct_size(bank, lock, num_locks),
|
||||
GFP_KERNEL);
|
||||
if (!bank) {
|
||||
ret = -ENOMEM;
|
||||
goto iounmap_base;
|
||||
goto runtime_err;
|
||||
}
|
||||
|
||||
platform_set_drvdata(pdev, bank);
|
||||
|
@ -138,25 +134,21 @@ static int omap_hwspinlock_probe(struct platform_device *pdev)
|
|||
ret = hwspin_lock_register(bank, &pdev->dev, &omap_hwspinlock_ops,
|
||||
base_id, num_locks);
|
||||
if (ret)
|
||||
goto reg_fail;
|
||||
goto runtime_err;
|
||||
|
||||
dev_dbg(&pdev->dev, "Registered %d locks with HwSpinlock core\n",
|
||||
num_locks);
|
||||
|
||||
return 0;
|
||||
|
||||
reg_fail:
|
||||
kfree(bank);
|
||||
iounmap_base:
|
||||
runtime_err:
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
iounmap(io_base);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int omap_hwspinlock_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct hwspinlock_device *bank = platform_get_drvdata(pdev);
|
||||
void __iomem *io_base = bank->lock[0].priv - LOCK_BASE_OFFSET;
|
||||
int ret;
|
||||
|
||||
ret = hwspin_lock_unregister(bank);
|
||||
|
@ -166,8 +158,6 @@ static int omap_hwspinlock_remove(struct platform_device *pdev)
|
|||
}
|
||||
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
iounmap(io_base);
|
||||
kfree(bank);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -12,7 +12,6 @@
|
|||
#include <linux/of.h>
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <linux/regmap.h>
|
||||
|
||||
#include "hwspinlock_internal.h"
|
||||
|
@ -122,35 +121,12 @@ static int qcom_hwspinlock_probe(struct platform_device *pdev)
|
|||
regmap, field);
|
||||
}
|
||||
|
||||
pm_runtime_enable(&pdev->dev);
|
||||
|
||||
ret = hwspin_lock_register(bank, &pdev->dev, &qcom_hwspinlock_ops,
|
||||
0, QCOM_MUTEX_NUM_LOCKS);
|
||||
if (ret)
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int qcom_hwspinlock_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct hwspinlock_device *bank = platform_get_drvdata(pdev);
|
||||
int ret;
|
||||
|
||||
ret = hwspin_lock_unregister(bank);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "%s failed: %d\n", __func__, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
|
||||
return 0;
|
||||
return devm_hwspin_lock_register(&pdev->dev, bank, &qcom_hwspinlock_ops,
|
||||
0, QCOM_MUTEX_NUM_LOCKS);
|
||||
}
|
||||
|
||||
static struct platform_driver qcom_hwspinlock_driver = {
|
||||
.probe = qcom_hwspinlock_probe,
|
||||
.remove = qcom_hwspinlock_remove,
|
||||
.driver = {
|
||||
.name = "qcom_hwspinlock",
|
||||
.of_match_table = qcom_hwspinlock_of_match,
|
||||
|
|
|
@ -9,7 +9,6 @@
|
|||
#include <linux/module.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/hwspinlock.h>
|
||||
|
@ -56,7 +55,7 @@ static int sirf_hwspinlock_probe(struct platform_device *pdev)
|
|||
{
|
||||
struct sirf_hwspinlock *hwspin;
|
||||
struct hwspinlock *hwlock;
|
||||
int idx, ret;
|
||||
int idx;
|
||||
|
||||
if (!pdev->dev.of_node)
|
||||
return -ENODEV;
|
||||
|
@ -69,9 +68,9 @@ static int sirf_hwspinlock_probe(struct platform_device *pdev)
|
|||
return -ENOMEM;
|
||||
|
||||
/* retrieve io base */
|
||||
hwspin->io_base = of_iomap(pdev->dev.of_node, 0);
|
||||
if (!hwspin->io_base)
|
||||
return -ENOMEM;
|
||||
hwspin->io_base = devm_platform_ioremap_resource(pdev, 0);
|
||||
if (IS_ERR(hwspin->io_base))
|
||||
return PTR_ERR(hwspin->io_base);
|
||||
|
||||
for (idx = 0; idx < HW_SPINLOCK_NUMBER; idx++) {
|
||||
hwlock = &hwspin->bank.lock[idx];
|
||||
|
@ -80,39 +79,9 @@ static int sirf_hwspinlock_probe(struct platform_device *pdev)
|
|||
|
||||
platform_set_drvdata(pdev, hwspin);
|
||||
|
||||
pm_runtime_enable(&pdev->dev);
|
||||
|
||||
ret = hwspin_lock_register(&hwspin->bank, &pdev->dev,
|
||||
&sirf_hwspinlock_ops, 0,
|
||||
HW_SPINLOCK_NUMBER);
|
||||
if (ret)
|
||||
goto reg_failed;
|
||||
|
||||
return 0;
|
||||
|
||||
reg_failed:
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
iounmap(hwspin->io_base);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int sirf_hwspinlock_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct sirf_hwspinlock *hwspin = platform_get_drvdata(pdev);
|
||||
int ret;
|
||||
|
||||
ret = hwspin_lock_unregister(&hwspin->bank);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "%s failed: %d\n", __func__, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
|
||||
iounmap(hwspin->io_base);
|
||||
|
||||
return 0;
|
||||
return devm_hwspin_lock_register(&pdev->dev, &hwspin->bank,
|
||||
&sirf_hwspinlock_ops, 0,
|
||||
HW_SPINLOCK_NUMBER);
|
||||
}
|
||||
|
||||
static const struct of_device_id sirf_hwpinlock_ids[] = {
|
||||
|
@ -123,7 +92,6 @@ MODULE_DEVICE_TABLE(of, sirf_hwpinlock_ids);
|
|||
|
||||
static struct platform_driver sirf_hwspinlock_driver = {
|
||||
.probe = sirf_hwspinlock_probe,
|
||||
.remove = sirf_hwspinlock_remove,
|
||||
.driver = {
|
||||
.name = "atlas7_hwspinlock",
|
||||
.of_match_table = of_match_ptr(sirf_hwpinlock_ids),
|
||||
|
|
|
@ -58,12 +58,10 @@ static int stm32_hwspinlock_probe(struct platform_device *pdev)
|
|||
{
|
||||
struct stm32_hwspinlock *hw;
|
||||
void __iomem *io_base;
|
||||
struct resource *res;
|
||||
size_t array_size;
|
||||
int i, ret;
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
io_base = devm_ioremap_resource(&pdev->dev, res);
|
||||
io_base = devm_platform_ioremap_resource(pdev, 0);
|
||||
if (IS_ERR(io_base))
|
||||
return PTR_ERR(io_base);
|
||||
|
||||
|
|
Loading…
Reference in a new issue