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

hwspinlock: qcom: Add support for mmio usage to sfpb-mutex

Allow sfpb-mutex to use mmio in addition to syscon.

Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
Reviewed-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Link: https://lore.kernel.org/r/20220707102040.1859-1-ansuelsmth@gmail.com

authored by

Christian Marangi and committed by
Bjorn Andersson
cdab30b4 0e01d176

+23 -5
+23 -5
drivers/hwspinlock/qcom_hwspinlock.c
··· 19 19 #define QCOM_MUTEX_APPS_PROC_ID 1 20 20 #define QCOM_MUTEX_NUM_LOCKS 32 21 21 22 + struct qcom_hwspinlock_of_data { 23 + u32 offset; 24 + u32 stride; 25 + }; 26 + 22 27 static int qcom_hwspinlock_trylock(struct hwspinlock *lock) 23 28 { 24 29 struct regmap_field *field = lock->priv; ··· 68 63 .unlock = qcom_hwspinlock_unlock, 69 64 }; 70 65 66 + static const struct qcom_hwspinlock_of_data of_sfpb_mutex = { 67 + .offset = 0x4, 68 + .stride = 0x4, 69 + }; 70 + 71 + /* All modern platform has offset 0 and stride of 4k */ 72 + static const struct qcom_hwspinlock_of_data of_tcsr_mutex = { 73 + .offset = 0, 74 + .stride = 0x1000, 75 + }; 76 + 71 77 static const struct of_device_id qcom_hwspinlock_of_match[] = { 72 - { .compatible = "qcom,sfpb-mutex" }, 73 - { .compatible = "qcom,tcsr-mutex" }, 78 + { .compatible = "qcom,sfpb-mutex", .data = &of_sfpb_mutex }, 79 + { .compatible = "qcom,tcsr-mutex", .data = &of_tcsr_mutex }, 74 80 { } 75 81 }; 76 82 MODULE_DEVICE_TABLE(of, qcom_hwspinlock_of_match); ··· 128 112 static struct regmap *qcom_hwspinlock_probe_mmio(struct platform_device *pdev, 129 113 u32 *offset, u32 *stride) 130 114 { 115 + const struct qcom_hwspinlock_of_data *data; 131 116 struct device *dev = &pdev->dev; 132 117 void __iomem *base; 133 118 134 - /* All modern platform has offset 0 and stride of 4k */ 135 - *offset = 0; 136 - *stride = 0x1000; 119 + data = of_device_get_match_data(dev); 120 + 121 + *offset = data->offset; 122 + *stride = data->stride; 137 123 138 124 base = devm_platform_ioremap_resource(pdev, 0); 139 125 if (IS_ERR(base))