The TCSR mutex bindings allow device to be described only with address
space (so it uses MMIO, not syscon regmap). This seems reasonable, as
TCSR mutex is actually a dedicated IO address space, and it also fixes
DT schema checks:
qcom-msm8974-sony-xperia-rhine-amami.dtb: tcsr-mutex: 'reg' is a required property
qcom-msm8974-sony-xperia-rhine-amami.dtb: tcsr-mutex: 'syscon' does not match any of the regexes: 'pinctrl-[0-9]+'
Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
---
arch/arm/boot/dts/qcom-msm8974.dtsi | 14 ++++----------
1 file changed, 4 insertions(+), 10 deletions(-)
diff --git a/arch/arm/boot/dts/qcom-msm8974.dtsi b/arch/arm/boot/dts/qcom-msm8974.dtsi
index a4e12daf3eeb..7bc19b5375f6 100644
--- a/arch/arm/boot/dts/qcom-msm8974.dtsi
+++ b/arch/arm/boot/dts/qcom-msm8974.dtsi
@@ -1194,7 +1194,7 @@ remoteproc_mss: remoteproc@fc880000 {
resets = <&gcc GCC_MSS_RESTART>;
reset-names = "mss_restart";
- qcom,halt-regs = <&tcsr_mutex_block 0x1180 0x1200 0x1280>;
+ qcom,halt-regs = <&tcsr_mutex 0x1180 0x1200 0x1280>;
qcom,smem-states = <&modem_smp2p_out 0>;
qcom,smem-state-names = "stop";
@@ -1233,9 +1233,10 @@ smd-edge {
};
};
- tcsr_mutex_block: syscon@fd484000 {
- compatible = "syscon";
+ tcsr_mutex: hwlock@fd484000 {
+ compatible = "qcom,msm8974-tcsr-mutex", "qcom,tcsr-mutex", "syscon";
reg = <0xfd484000 0x2000>;
+ #hwlock-cells = <1>;
};
tcsr: syscon@fd4a0000 {
@@ -1719,13 +1720,6 @@ reboot-mode {
};
};
- tcsr_mutex: tcsr-mutex {
- compatible = "qcom,tcsr-mutex";
- syscon = <&tcsr_mutex_block 0 0x80>;
-
- #hwlock-cells = <1>;
- };
-
thermal-zones {
cpu0-thermal {
polling-delay-passive = <250>;
--
2.34.1
Hi,
On 20.09.2022 18:04, Krzysztof Kozlowski wrote:
> - tcsr_mutex: tcsr-mutex {
> - compatible = "qcom,tcsr-mutex";
> - syscon = <&tcsr_mutex_block 0 0x80>;
I'm looking and don't understand where does this information go, is it
lost in the conversion? I mean those "0 0x80" parameters to syscon
reference.
Looking at the code of qcom_hwspinlock driver those seem to be read by
qcom_hwspinlock_probe_syscon() [1] using of_property_read_u32_index()
as base and stride values and those would be 0 nad 0x80 respectively as
is now.
But without syscon reference, in mmio mode, code goes through
qcom_hwspinlock_probe_mmio() few lines below, which says
/* All modern platform has offset 0 and stride of 4k */
*offset = 0;
*stride = 0x1000;
So after this conversion stride value will jump from 0x80 to 0x1000,
which does not seem to be 1 to 1 identical conversion to me, unless I am
missing something.
Perhaps msm8974 does not fall into category of "All modern platform"?
[1]
https://elixir.bootlin.com/linux/latest/source/drivers/hwspinlock/qcom_hwspinlock.c#L73
--
Regards
Alexey Minnekhanov
On 21/09/2022 22:55, Alexey Minnekhanov wrote:
> Hi,
>
> On 20.09.2022 18:04, Krzysztof Kozlowski wrote:
>
>> - tcsr_mutex: tcsr-mutex {
>> - compatible = "qcom,tcsr-mutex";
>> - syscon = <&tcsr_mutex_block 0 0x80>;
>
> I'm looking and don't understand where does this information go, is it
> lost in the conversion? I mean those "0 0x80" parameters to syscon
> reference.
This compatible is using:
of_msm8226_tcsr_mutex
.stride = 0x80,
Best regards,
Krzysztof
© 2016 - 2026 Red Hat, Inc.