diff mbox series

arm64: dts: amlogic: Fix IR Controller register area for Meson-GX/AXG/G12 series SoCs

Message ID 20230922080546.26442-1-zelong.dong@amlogic.com (mailing list archive)
State New, archived
Headers show
Series arm64: dts: amlogic: Fix IR Controller register area for Meson-GX/AXG/G12 series SoCs | expand

Commit Message

zelong dong Sept. 22, 2023, 8:05 a.m. UTC
From: Zelong Dong <zelong.dong@amlogic.com>

Amloic Meson-6 SoC only has one IR Controller, since then, there are 2 IR
Controllers in every SoCs, one is Legacy IR Controller (same as Meson-6's one),
the new one is Multi-Format IR Controller (abbreviated "MF-IR",
which supports more than one IR Protocol). MF-IR was updated several times,
so different SoCs could be got different register sizes.

There are all IR Controller register areas from upstream's SoCs:
                              Legacy IR             MF-IR
Meson-6                  | <0xc8100480 0x20> |       NULL        |
Meson-8/8B/8M2           | <0xc8100480 0x20> | <0xc8100580 0x30> |
Meson-GXBB               | <0xc8100480 0x20> | <0xc8100580 0x44> |
Meson-GXM/GXL  	         | <0xc8100480 0x20> | <0xc8100580 0x54> |
Meson-AXG/G12A/G12B/SM1  | <0xff808000 0x20> | <0xff808040 0x58> |

About Meson-IR driver, MF-IR was supported from Meson-8, which was distinguished
by compatible string (of_device_is_compatible(node, "amlogic,meson6-ir")),
and only one register (macro 'IR_DEC_REG2') was added because controller worked
in raw decoder mode, later registers are unused, so we recommend that register
size should be 0x24 if MF-IR is in use.

There are 2 ways to fix.

MF-IR is in use:
  Meson-8/8B/8M2/GXBB/GXM/GXL: <0xc8100580 0x24>
  Meson-AXG/G12A/G12B/SM1:     <0xff808040 0x24>

Legacy IR is in use:
  Meson-8/8B/8M2/GXBB/GXM/GXL: <0xc8100480 0x20>
  Meson-AXG/G12A/G12B/SM1:     <0xff808000 0x20>

Fixes: 2bfe8412c5388a ("arm64: dts: meson-g12a: Add IR nodes")
Fixes: 7bd46a79aad549 ("ARM64: dts: meson-axg: enable IR controller")
Fixes: c58d77855f0069 ("ARM64: dts: meson-gxbb: Add Infrared Remote Controller decoder")
Link: https://lore.kernel.org/all/20160820095424.636-5-martin.blumenstingl@googlemail.com/
Signed-off-by: Zelong Dong <zelong.dong@amlogic.com>
---
 arch/arm64/boot/dts/amlogic/meson-axg.dtsi        | 4 ++--
 arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi | 4 ++--
 arch/arm64/boot/dts/amlogic/meson-gx.dtsi         | 2 +-
 3 files changed, 5 insertions(+), 5 deletions(-)

Comments

Neil Armstrong Sept. 29, 2023, 4 a.m. UTC | #1
Hi,

Le 22/09/2023 à 10:05, zelong dong a écrit :
> From: Zelong Dong <zelong.dong@amlogic.com>
> 
> Amloic Meson-6 SoC only has one IR Controller, since then, there are 2 IR
> Controllers in every SoCs, one is Legacy IR Controller (same as Meson-6's one),
> the new one is Multi-Format IR Controller (abbreviated "MF-IR",
> which supports more than one IR Protocol). MF-IR was updated several times,
> so different SoCs could be got different register sizes.
> 
> There are all IR Controller register areas from upstream's SoCs:
>                                Legacy IR             MF-IR
> Meson-6                  | <0xc8100480 0x20> |       NULL        |
> Meson-8/8B/8M2           | <0xc8100480 0x20> | <0xc8100580 0x30> |
> Meson-GXBB               | <0xc8100480 0x20> | <0xc8100580 0x44> |
> Meson-GXM/GXL  	         | <0xc8100480 0x20> | <0xc8100580 0x54> |
> Meson-AXG/G12A/G12B/SM1  | <0xff808000 0x20> | <0xff808040 0x58> |
> 
> About Meson-IR driver, MF-IR was supported from Meson-8, which was distinguished
> by compatible string (of_device_is_compatible(node, "amlogic,meson6-ir")),
> and only one register (macro 'IR_DEC_REG2') was added because controller worked
> in raw decoder mode, later registers are unused, so we recommend that register
> size should be 0x24 if MF-IR is in use.
> 
> There are 2 ways to fix.
> 
> MF-IR is in use:
>    Meson-8/8B/8M2/GXBB/GXM/GXL: <0xc8100580 0x24>
>    Meson-AXG/G12A/G12B/SM1:     <0xff808040 0x24>
> 
> Legacy IR is in use:
>    Meson-8/8B/8M2/GXBB/GXM/GXL: <0xc8100480 0x20>
>    Meson-AXG/G12A/G12B/SM1:     <0xff808000 0x20>

This is slighly confusing, so you mean since Meson-8 there's 2 IR controllers
which have the same register mapping, and both works with the "amlogic,meson6-ir" compatible ?

So why should we switch to the MF-IR address ? what does it exactly change ?

If we want to be clean:
- both should be added, legacy IR with current address + reg size change
- a new compatible should be added for the MF IR, with "amlogic,meson6-ir" as fallback to take in account they are compatible
- a new node should be added for the MR IR
- DTs should be switch to the MF IR label instead of the legacy IR

With this we would be able to take advantage of the MR IF functionalities while keeping driver functionnal
with old DTs and new DTs with old kernels.

Thanks,
Neil

> 
> Fixes: 2bfe8412c5388a ("arm64: dts: meson-g12a: Add IR nodes")
> Fixes: 7bd46a79aad549 ("ARM64: dts: meson-axg: enable IR controller")
> Fixes: c58d77855f0069 ("ARM64: dts: meson-gxbb: Add Infrared Remote Controller decoder")
> Link: https://lore.kernel.org/all/20160820095424.636-5-martin.blumenstingl@googlemail.com/
> Signed-off-by: Zelong Dong <zelong.dong@amlogic.com>
> ---
>   arch/arm64/boot/dts/amlogic/meson-axg.dtsi        | 4 ++--
>   arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi | 4 ++--
>   arch/arm64/boot/dts/amlogic/meson-gx.dtsi         | 2 +-
>   3 files changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/arch/arm64/boot/dts/amlogic/meson-axg.dtsi b/arch/arm64/boot/dts/amlogic/meson-axg.dtsi
> index 768d0ed78dbe..dd8c58e74322 100644
> --- a/arch/arm64/boot/dts/amlogic/meson-axg.dtsi
> +++ b/arch/arm64/boot/dts/amlogic/meson-axg.dtsi
> @@ -1705,9 +1705,9 @@ pwm_AO_ab: pwm@7000 {
>   				status = "disabled";
>   			};
>   
> -			ir: ir@8000 {
> +			ir: ir@8040 {
>   				compatible = "amlogic,meson-gxbb-ir";
> -				reg = <0x0 0x8000 0x0 0x20>;
> +				reg = <0x0 0x8040 0x0 0x24>;
>   				interrupts = <GIC_SPI 196 IRQ_TYPE_EDGE_RISING>;
>   				status = "disabled";
>   			};
> diff --git a/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi b/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi
> index ff68b911b729..e12cea5fa889 100644
> --- a/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi
> +++ b/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi
> @@ -2084,9 +2084,9 @@ pwm_AO_ab: pwm@7000 {
>   				status = "disabled";
>   			};
>   
> -			ir: ir@8000 {
> +			ir: ir@8040 {
>   				compatible = "amlogic,meson-gxbb-ir";
> -				reg = <0x0 0x8000 0x0 0x20>;
> +				reg = <0x0 0x8040 0x0 0x24>;
>   				interrupts = <GIC_SPI 196 IRQ_TYPE_EDGE_RISING>;
>   				status = "disabled";
>   			};
> diff --git a/arch/arm64/boot/dts/amlogic/meson-gx.dtsi b/arch/arm64/boot/dts/amlogic/meson-gx.dtsi
> index 2673f0dbafe7..0c04e34a0923 100644
> --- a/arch/arm64/boot/dts/amlogic/meson-gx.dtsi
> +++ b/arch/arm64/boot/dts/amlogic/meson-gx.dtsi
> @@ -506,7 +506,7 @@ pwm_AO_ab: pwm@550 {
>   
>   			ir: ir@580 {
>   				compatible = "amlogic,meson-gx-ir", "amlogic,meson-gxbb-ir";
> -				reg = <0x0 0x00580 0x0 0x40>;
> +				reg = <0x0 0x00580 0x0 0x24>;
>   				interrupts = <GIC_SPI 196 IRQ_TYPE_EDGE_RISING>;
>   				status = "disabled";
>   			};
zelong dong Oct. 7, 2023, 8:50 a.m. UTC | #2
在 2023/9/29 12:00, Neil Armstrong 写道:
> Hi,
> 
> Le 22/09/2023 à 10:05, zelong dong a écrit :
>> From: Zelong Dong <zelong.dong@amlogic.com>
>>
>> Amloic Meson-6 SoC only has one IR Controller, since then, there are 2 IR
>> Controllers in every SoCs, one is Legacy IR Controller (same as 
>> Meson-6's one),
>> the new one is Multi-Format IR Controller (abbreviated "MF-IR",
>> which supports more than one IR Protocol). MF-IR was updated several 
>> times,
>> so different SoCs could be got different register sizes.
>>
>> There are all IR Controller register areas from upstream's SoCs:
>>                     Legacy IR          MF-IR
>> Meson-6               | <0xc8100480 0x20> |     NULL     |
>> Meson-8/8B/8M2           | <0xc8100480 0x20> | <0xc8100580 0x30> |
>> Meson-GXBB             | <0xc8100480 0x20> | <0xc8100580 0x44> |
>> Meson-GXM/GXL            | <0xc8100480 0x20> | <0xc8100580 0x54> |
>> Meson-AXG/G12A/G12B/SM1           | <0xff808000 0x20> | <0xff808040 0x58> |
>>
>> About Meson-IR driver, MF-IR was supported from Meson-8, which was 
>> distinguished
>> by compatible string (of_device_is_compatible(node, 
>> "amlogic,meson6-ir")),
>> and only one register (macro 'IR_DEC_REG2') was added because 
>> controller worked
>> in raw decoder mode, later registers are unused, so we recommend that 
>> register
>> size should be 0x24 if MF-IR is in use.
>>
>> There are 2 ways to fix.
>>
>> MF-IR is in use:
>>    Meson-8/8B/8M2/GXBB/GXM/GXL: <0xc8100580 0x24>
>>    Meson-AXG/G12A/G12B/SM1:     <0xff808040 0x24>
>>
>> Legacy IR is in use:
>>    Meson-8/8B/8M2/GXBB/GXM/GXL: <0xc8100480 0x20>
>>    Meson-AXG/G12A/G12B/SM1:     <0xff808000 0x20>
> 
> This is slighly confusing, so you mean since Meson-8 there's 2 IR 
> controllers
> which have the same register mapping, and both works with the 
> "amlogic,meson6-ir" compatible ?

They are not the same register mapping but similar.
Compatible "amlogic,meson6-ir" only works with legacy IR, other 
compatibles work with MF-IR.
Please refer to 
https://lore.kernel.org/all/20160820095424.636-5-martin.blumenstingl@googlemail.com/

> 
> So why should we switch to the MF-IR address ? what does it exactly 
> change ?

In raw decoder mode, it's not necessarily to switch to MF-IR, you could 
use "amlogic,meson6-ir" with legacy IR register area.
This patch is for fix the wrong relation between compatible and register 
area. If compatible is "amlogic,meson-gxbb-ir", the register should be 
from MF-IR.

> 
> If we want to be clean:
> - both should be added, legacy IR with current address + reg size change
> - a new compatible should be added for the MF IR, with 
> "amlogic,meson6-ir" as fallback to take in account they are compatible
> - a new node should be added for the MR IR
> - DTs should be switch to the MF IR label instead of the legacy IR
> 
> With this we would be able to take advantage of the MR IF 
> functionalities while keeping driver functionnal
> with old DTs and new DTs with old kernels.

Legacy IR and MF-IR share the same IRQ number, so I recommend that chose 
one to use. Do they both need to be added?
In a word, this patch is not for new function, just fix the wrong 
register addr.
> 
> Thanks,
> Neil
> 
>>
>> Fixes: 2bfe8412c5388a ("arm64: dts: meson-g12a: Add IR nodes")
>> Fixes: 7bd46a79aad549 ("ARM64: dts: meson-axg: enable IR controller")
>> Fixes: c58d77855f0069 ("ARM64: dts: meson-gxbb: Add Infrared Remote 
>> Controller decoder")
>> Link: 
>> https://lore.kernel.org/all/20160820095424.636-5-martin.blumenstingl@googlemail.com/
>> Signed-off-by: Zelong Dong <zelong.dong@amlogic.com>
>> ---
>>   arch/arm64/boot/dts/amlogic/meson-axg.dtsi        | 4 ++--
>>   arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi | 4 ++--
>>   arch/arm64/boot/dts/amlogic/meson-gx.dtsi         | 2 +-
>>   3 files changed, 5 insertions(+), 5 deletions(-)
>>
>> diff --git a/arch/arm64/boot/dts/amlogic/meson-axg.dtsi 
>> b/arch/arm64/boot/dts/amlogic/meson-axg.dtsi
>> index 768d0ed78dbe..dd8c58e74322 100644
>> --- a/arch/arm64/boot/dts/amlogic/meson-axg.dtsi
>> +++ b/arch/arm64/boot/dts/amlogic/meson-axg.dtsi
>> @@ -1705,9 +1705,9 @@ pwm_AO_ab: pwm@7000 {
>>                               status = "disabled";
>>                       };
>>
>> -                     ir: ir@8000 {
>> +                     ir: ir@8040 {
>>                               compatible = "amlogic,meson-gxbb-ir";
>> -                             reg = <0x0 0x8000 0x0 0x20>;
>> +                             reg = <0x0 0x8040 0x0 0x24>;
>>                               interrupts = <GIC_SPI 196 
>> IRQ_TYPE_EDGE_RISING>;
>>                               status = "disabled";
>>                       };
>> diff --git a/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi 
>> b/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi
>> index ff68b911b729..e12cea5fa889 100644
>> --- a/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi
>> +++ b/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi
>> @@ -2084,9 +2084,9 @@ pwm_AO_ab: pwm@7000 {
>>                               status = "disabled";
>>                       };
>>
>> -                     ir: ir@8000 {
>> +                     ir: ir@8040 {
>>                               compatible = "amlogic,meson-gxbb-ir";
>> -                             reg = <0x0 0x8000 0x0 0x20>;
>> +                             reg = <0x0 0x8040 0x0 0x24>;
>>                               interrupts = <GIC_SPI 196 
>> IRQ_TYPE_EDGE_RISING>;
>>                               status = "disabled";
>>                       };
>> diff --git a/arch/arm64/boot/dts/amlogic/meson-gx.dtsi 
>> b/arch/arm64/boot/dts/amlogic/meson-gx.dtsi
>> index 2673f0dbafe7..0c04e34a0923 100644
>> --- a/arch/arm64/boot/dts/amlogic/meson-gx.dtsi
>> +++ b/arch/arm64/boot/dts/amlogic/meson-gx.dtsi
>> @@ -506,7 +506,7 @@ pwm_AO_ab: pwm@550 {
>>
>>                       ir: ir@580 {
>>                               compatible = "amlogic,meson-gx-ir", 
>> "amlogic,meson-gxbb-ir";
>> -                             reg = <0x0 0x00580 0x0 0x40>;
>> +                             reg = <0x0 0x00580 0x0 0x24>;
>>                               interrupts = <GIC_SPI 196 
>> IRQ_TYPE_EDGE_RISING>;
>>                               status = "disabled";
>>                       };
>
diff mbox series

Patch

diff --git a/arch/arm64/boot/dts/amlogic/meson-axg.dtsi b/arch/arm64/boot/dts/amlogic/meson-axg.dtsi
index 768d0ed78dbe..dd8c58e74322 100644
--- a/arch/arm64/boot/dts/amlogic/meson-axg.dtsi
+++ b/arch/arm64/boot/dts/amlogic/meson-axg.dtsi
@@ -1705,9 +1705,9 @@  pwm_AO_ab: pwm@7000 {
 				status = "disabled";
 			};
 
-			ir: ir@8000 {
+			ir: ir@8040 {
 				compatible = "amlogic,meson-gxbb-ir";
-				reg = <0x0 0x8000 0x0 0x20>;
+				reg = <0x0 0x8040 0x0 0x24>;
 				interrupts = <GIC_SPI 196 IRQ_TYPE_EDGE_RISING>;
 				status = "disabled";
 			};
diff --git a/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi b/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi
index ff68b911b729..e12cea5fa889 100644
--- a/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi
+++ b/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi
@@ -2084,9 +2084,9 @@  pwm_AO_ab: pwm@7000 {
 				status = "disabled";
 			};
 
-			ir: ir@8000 {
+			ir: ir@8040 {
 				compatible = "amlogic,meson-gxbb-ir";
-				reg = <0x0 0x8000 0x0 0x20>;
+				reg = <0x0 0x8040 0x0 0x24>;
 				interrupts = <GIC_SPI 196 IRQ_TYPE_EDGE_RISING>;
 				status = "disabled";
 			};
diff --git a/arch/arm64/boot/dts/amlogic/meson-gx.dtsi b/arch/arm64/boot/dts/amlogic/meson-gx.dtsi
index 2673f0dbafe7..0c04e34a0923 100644
--- a/arch/arm64/boot/dts/amlogic/meson-gx.dtsi
+++ b/arch/arm64/boot/dts/amlogic/meson-gx.dtsi
@@ -506,7 +506,7 @@  pwm_AO_ab: pwm@550 {
 
 			ir: ir@580 {
 				compatible = "amlogic,meson-gx-ir", "amlogic,meson-gxbb-ir";
-				reg = <0x0 0x00580 0x0 0x40>;
+				reg = <0x0 0x00580 0x0 0x24>;
 				interrupts = <GIC_SPI 196 IRQ_TYPE_EDGE_RISING>;
 				status = "disabled";
 			};