* [PATCH 0/3] i3c: renesas: Add support for the analog noise filter
@ 2026-10-20 9:36 Diogo Ivo
2026-10-20 9:36 ` [PATCH 1/3] dt-bindings: i3c: renesas,i3c: Document analog noise filter control Diogo Ivo
` (2 more replies)
0 siblings, 3 replies; 11+ messages in thread
From: Diogo Ivo @ 2026-10-20 9:36 UTC (permalink / raw)
To: Wolfram Sang, Tommaso Merciai, Alexandre Belloni, Frank Li,
Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Geert Uytterhoeven, Magnus Damm
Cc: linux-i3c, devicetree, linux-kernel, linux-renesas-soc, Diogo Ivo
Hi,
this series adds support for the analog noise filter on the input
terminals (I3C_SDA, I3C_SCL) of the Renesas I3C controller, present on
the RZ/G3L (R9A08G046) SoC. The filter is controlled through bit 0 of
the SYS_I3C_CFG register of the system controller (SYSC): when set,
the input signals bypass the analog filter and no noise reduction is
performed.
The filter is configured through the renesas,analog-noise-filter
phandle-array property, which references the system controller
together with the offset of the SYS_I3C_CFG register and the state of
the filter: 1 enables the filter, 0 bypasses it. The property is
optional: boards not providing it keep the filter at its reset value,
so the existing device trees remain valid.
The series first documents the new property in the bindings, then
adds driver support, and finally enables the filter on the RZ/G3L
device tree.
It is based on top of the series adding RZ/G3L I3C support [1] and
should be applied after it.
Signed-off-by: Diogo Ivo <diogo.ivo.sx@renesas.com>
[1]: https://lore.kernel.org/linux-i3c/20261020-divo-ssgrlpcsrc-2966-i3c-v1-0-30a47f25e515@renesas.com/
---
Diogo Ivo (3):
dt-bindings: i3c: renesas,i3c: Document analog noise filter control
i3c: renesas: Add support for the analog noise filter
arm64: dts: renesas: r9a08g046: Enable I3C analog noise filter
.../devicetree/bindings/i3c/renesas,i3c.yaml | 19 +++++++++++++++
arch/arm64/boot/dts/renesas/r9a08g046.dtsi | 1 +
drivers/i3c/master/renesas-i3c.c | 28 ++++++++++++++++++++++
3 files changed, 48 insertions(+)
---
base-commit: 8e9b15cbfa80490979fb075d7e46faa84bbb7f53
change-id: 20261020-divo-ssgrlpcsrc-2966-i3c-anf-fd3446c91f4e
Best regards,
--
Diogo Ivo <diogo.ivo.sx@renesas.com>
^ permalink raw reply [flat|nested] 11+ messages in thread* [PATCH 1/3] dt-bindings: i3c: renesas,i3c: Document analog noise filter control 2026-10-20 9:36 [PATCH 0/3] i3c: renesas: Add support for the analog noise filter Diogo Ivo @ 2026-10-20 9:36 ` Diogo Ivo 2026-10-20 19:18 ` Frank Li 2026-10-20 9:36 ` [PATCH 2/3] i3c: renesas: Add support for the analog noise filter Diogo Ivo 2026-10-20 9:36 ` [PATCH 3/3] arm64: dts: renesas: r9a08g046: Enable I3C " Diogo Ivo 2 siblings, 1 reply; 11+ messages in thread From: Diogo Ivo @ 2026-10-20 9:36 UTC (permalink / raw) To: Wolfram Sang, Tommaso Merciai, Alexandre Belloni, Frank Li, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Geert Uytterhoeven, Magnus Damm Cc: linux-i3c, devicetree, linux-kernel, linux-renesas-soc, Diogo Ivo The analog noise filter for the input terminals (I3C_SDA, I3C_SCL) of the Renesas I3C controller is controlled through the SYS_I3C_CFG register of the system controller. Document the renesas,analog-noise-filter property, which references the system controller together with the offset of the SYS_I3C_CFG register and the state of the filter: 1 enables the filter and 0 bypasses it. The property is optional: device trees not providing it keep the filter at its reset value. Signed-off-by: Diogo Ivo <diogo.ivo.sx@renesas.com> --- .../devicetree/bindings/i3c/renesas,i3c.yaml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Documentation/devicetree/bindings/i3c/renesas,i3c.yaml b/Documentation/devicetree/bindings/i3c/renesas,i3c.yaml index 08fcea89a015..381807844351 100644 --- a/Documentation/devicetree/bindings/i3c/renesas,i3c.yaml +++ b/Documentation/devicetree/bindings/i3c/renesas,i3c.yaml @@ -96,6 +96,25 @@ properties: - const: presetn - const: tresetn + renesas,analog-noise-filter: + $ref: /schemas/types.yaml#/definitions/phandle-array + description: + Analog noise filter for the I3C input signals (I3C_SDA, I3C_SCL), + controlled through the SYS_I3C_CFG register of the system + controller (SYSC). Three entries specifying the system controller, + the offset of the SYS_I3C_CFG register and the state of the filter. + If not present, the filter keeps its reset state. + items: + - items: + - description: phandle to the system controller node + - description: offset of the SYS_I3C_CFG register within the SYSC + - enum: [0, 1] + description: | + state of the analog noise filter: + - 1: enable the filter, performing noise reduction on the + I3C_SDA and I3C_SCL input signals + - 0: bypass the filter + required: - compatible - reg -- 2.56.0 ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 1/3] dt-bindings: i3c: renesas,i3c: Document analog noise filter control 2026-10-20 9:36 ` [PATCH 1/3] dt-bindings: i3c: renesas,i3c: Document analog noise filter control Diogo Ivo @ 2026-10-20 19:18 ` Frank Li 2026-10-26 16:21 ` Diogo Ivo 0 siblings, 1 reply; 11+ messages in thread From: Frank Li @ 2026-10-20 19:18 UTC (permalink / raw) To: Diogo Ivo Cc: Wolfram Sang, Tommaso Merciai, Alexandre Belloni, Frank Li, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Geert Uytterhoeven, Magnus Damm, linux-i3c, devicetree, linux-kernel, linux-renesas-soc On Tue, Oct 20, 2026 at 10:36:26AM +0100, Diogo Ivo wrote: > The analog noise filter for the input terminals (I3C_SDA, I3C_SCL) of > the Renesas I3C controller is controlled through the SYS_I3C_CFG > register of the system controller. Document the > renesas,analog-noise-filter property, which references the system > controller together with the offset of the SYS_I3C_CFG register and > the state of the filter: 1 enables the filter and 0 bypasses it. > > The property is optional: device trees not providing it keep the > filter at its reset value. > > Signed-off-by: Diogo Ivo <diogo.ivo.sx@renesas.com> > --- > .../devicetree/bindings/i3c/renesas,i3c.yaml | 19 +++++++++++++++++++ > 1 file changed, 19 insertions(+) > > diff --git a/Documentation/devicetree/bindings/i3c/renesas,i3c.yaml b/Documentation/devicetree/bindings/i3c/renesas,i3c.yaml > index 08fcea89a015..381807844351 100644 > --- a/Documentation/devicetree/bindings/i3c/renesas,i3c.yaml > +++ b/Documentation/devicetree/bindings/i3c/renesas,i3c.yaml > @@ -96,6 +96,25 @@ properties: > - const: presetn > - const: tresetn > > + renesas,analog-noise-filter: > + $ref: /schemas/types.yaml#/definitions/phandle-array I don't like this syscon property, look like it is one kind pad propterty. Is it possible model as pinctrl? Frank > + description: > + Analog noise filter for the I3C input signals (I3C_SDA, I3C_SCL), > + controlled through the SYS_I3C_CFG register of the system > + controller (SYSC). Three entries specifying the system controller, > + the offset of the SYS_I3C_CFG register and the state of the filter. > + If not present, the filter keeps its reset state. > + items: > + - items: > + - description: phandle to the system controller node > + - description: offset of the SYS_I3C_CFG register within the SYSC > + - enum: [0, 1] > + description: | > + state of the analog noise filter: > + - 1: enable the filter, performing noise reduction on the > + I3C_SDA and I3C_SCL input signals > + - 0: bypass the filter > + > required: > - compatible > - reg > > -- > 2.56.0 > ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 1/3] dt-bindings: i3c: renesas,i3c: Document analog noise filter control 2026-10-20 19:18 ` Frank Li @ 2026-10-26 16:21 ` Diogo Ivo 2026-10-26 20:33 ` Frank Li 0 siblings, 1 reply; 11+ messages in thread From: Diogo Ivo @ 2026-10-26 16:21 UTC (permalink / raw) To: Frank Li Cc: Wolfram Sang, Tommaso Merciai, Alexandre Belloni, Frank Li, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Geert Uytterhoeven, Magnus Damm, linux-i3c, devicetree, linux-kernel, linux-renesas-soc, Linus Walleij Hi Frank, On 10/20/2026 8:18 PM, Frank Li wrote: > On Tue, Oct 20, 2026 at 10:36:26AM +0100, Diogo Ivo wrote: >> The analog noise filter for the input terminals (I3C_SDA, I3C_SCL) of >> the Renesas I3C controller is controlled through the SYS_I3C_CFG >> register of the system controller. Document the >> renesas,analog-noise-filter property, which references the system >> controller together with the offset of the SYS_I3C_CFG register and >> the state of the filter: 1 enables the filter and 0 bypasses it. >> >> The property is optional: device trees not providing it keep the >> filter at its reset value. >> >> Signed-off-by: Diogo Ivo <diogo.ivo.sx@renesas.com> >> --- >> .../devicetree/bindings/i3c/renesas,i3c.yaml | 19 +++++++++++++++++++ >> 1 file changed, 19 insertions(+) >> >> diff --git a/Documentation/devicetree/bindings/i3c/renesas,i3c.yaml b/Documentation/devicetree/bindings/i3c/renesas,i3c.yaml >> index 08fcea89a015..381807844351 100644 >> --- a/Documentation/devicetree/bindings/i3c/renesas,i3c.yaml >> +++ b/Documentation/devicetree/bindings/i3c/renesas,i3c.yaml >> @@ -96,6 +96,25 @@ properties: >> - const: presetn >> - const: tresetn >> >> + renesas,analog-noise-filter: >> + $ref: /schemas/types.yaml#/definitions/phandle-array > > I don't like this syscon property, look like it is one kind pad propterty. > Is it possible model as pinctrl? On the RZ/G3L and RZ/G3S this filter is not controlled on the pin controller's address space but in the SYSC address space (hence the need for the sysc phandle). There are a few factors weighing against modeling this as pinctrl. The first is that the physical pads used by I3C are multiplexed between it and for example RIIC3, so we are not filtering the pad but the internal path of the I3C IP. The pinctrl does indeed have some controls for the pad's digital filters, that apply to whatever block is multiplexed to the pad. Besides this, even if it were moved to pinctrl we would still need the sysc reference, as the pfc driver would need a way to reference the sysc address space. With this, I think that having a DT property is the best approach. However, the form of the property can be changed if you are against this particular one. For example, the register offset can be moved to platform_data in the I3C driver: - renesas,analog-noise-filter = <&sysc 0/1> at the SoC level or I can also split it into two properties. What approach would work better here? Me I'm leaning towards having renesas,analog-digital-filter. Best regards, Diogo > > Frank > >> + description: >> + Analog noise filter for the I3C input signals (I3C_SDA, I3C_SCL), >> + controlled through the SYS_I3C_CFG register of the system >> + controller (SYSC). Three entries specifying the system controller, >> + the offset of the SYS_I3C_CFG register and the state of the filter. >> + If not present, the filter keeps its reset state. >> + items: >> + - items: >> + - description: phandle to the system controller node >> + - description: offset of the SYS_I3C_CFG register within the SYSC >> + - enum: [0, 1] >> + description: | >> + state of the analog noise filter: >> + - 1: enable the filter, performing noise reduction on the >> + I3C_SDA and I3C_SCL input signals >> + - 0: bypass the filter >> + >> required: >> - compatible >> - reg >> >> -- >> 2.56.0 >> ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 1/3] dt-bindings: i3c: renesas,i3c: Document analog noise filter control 2026-10-26 16:21 ` Diogo Ivo @ 2026-10-26 20:33 ` Frank Li 2026-10-27 10:34 ` Diogo Ivo 0 siblings, 1 reply; 11+ messages in thread From: Frank Li @ 2026-10-26 20:33 UTC (permalink / raw) To: Diogo Ivo Cc: Wolfram Sang, Tommaso Merciai, Alexandre Belloni, Frank Li, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Geert Uytterhoeven, Magnus Damm, linux-i3c, devicetree, linux-kernel, linux-renesas-soc, Linus Walleij On Mon, Oct 26, 2026 at 04:21:06PM +0000, Diogo Ivo wrote: > Hi Frank, > > On 10/20/2026 8:18 PM, Frank Li wrote: > > On Tue, Oct 20, 2026 at 10:36:26AM +0100, Diogo Ivo wrote: > > > The analog noise filter for the input terminals (I3C_SDA, I3C_SCL) of > > > the Renesas I3C controller is controlled through the SYS_I3C_CFG > > > register of the system controller. Document the > > > renesas,analog-noise-filter property, which references the system > > > controller together with the offset of the SYS_I3C_CFG register and > > > the state of the filter: 1 enables the filter and 0 bypasses it. > > > > > > The property is optional: device trees not providing it keep the > > > filter at its reset value. > > > > > > Signed-off-by: Diogo Ivo <diogo.ivo.sx@renesas.com> > > > --- > > > .../devicetree/bindings/i3c/renesas,i3c.yaml | 19 +++++++++++++++++++ > > > 1 file changed, 19 insertions(+) > > > > > > diff --git a/Documentation/devicetree/bindings/i3c/renesas,i3c.yaml b/Documentation/devicetree/bindings/i3c/renesas,i3c.yaml > > > index 08fcea89a015..381807844351 100644 > > > --- a/Documentation/devicetree/bindings/i3c/renesas,i3c.yaml > > > +++ b/Documentation/devicetree/bindings/i3c/renesas,i3c.yaml > > > @@ -96,6 +96,25 @@ properties: > > > - const: presetn > > > - const: tresetn > > > > > > + renesas,analog-noise-filter: > > > + $ref: /schemas/types.yaml#/definitions/phandle-array > > > > I don't like this syscon property, look like it is one kind pad propterty. > > Is it possible model as pinctrl? > > On the RZ/G3L and RZ/G3S this filter is not controlled on the pin > controller's address space but in the SYSC address space (hence the > need for the sysc phandle). > > There are a few factors weighing against modeling this as pinctrl. > > The first is that the physical pads used by I3C are multiplexed between it > and for example RIIC3, so we are not filtering the pad but the internal path > of the I3C IP. The pinctrl does indeed have some controls for the pad's > digital filters, that apply to whatever block is multiplexed to the pad. > > Besides this, even if it were moved to pinctrl we would still need the sysc > reference, as the pfc driver would need a way to reference the sysc address > space. System allows multi pinctrl devices. your syscon can work as pinctrl provider pinctrl-0 = <&your nomral pinctrl>, <&syscon i3c ... > ; The key problem is if model is resonable. Syscon is simple, but have not good abstract. Frank > > With this, I think that having a DT property is the best approach. However, > the form of the property can be changed if you are against this particular > one. For example, the register offset can be moved to platform_data in the > I3C driver: > > - renesas,analog-noise-filter = <&sysc 0/1> at the SoC level > > or I can also split it into two properties. > > What approach would work better here? Me I'm leaning towards having > renesas,analog-digital-filter. > > Best regards, > Diogo > > > > > Frank > > > > > + description: > > > + Analog noise filter for the I3C input signals (I3C_SDA, I3C_SCL), > > > + controlled through the SYS_I3C_CFG register of the system > > > + controller (SYSC). Three entries specifying the system controller, > > > + the offset of the SYS_I3C_CFG register and the state of the filter. > > > + If not present, the filter keeps its reset state. > > > + items: > > > + - items: > > > + - description: phandle to the system controller node > > > + - description: offset of the SYS_I3C_CFG register within the SYSC > > > + - enum: [0, 1] > > > + description: | > > > + state of the analog noise filter: > > > + - 1: enable the filter, performing noise reduction on the > > > + I3C_SDA and I3C_SCL input signals > > > + - 0: bypass the filter > > > + > > > required: > > > - compatible > > > - reg > > > > > > -- > > > 2.56.0 > > > > ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 1/3] dt-bindings: i3c: renesas,i3c: Document analog noise filter control 2026-10-26 20:33 ` Frank Li @ 2026-10-27 10:34 ` Diogo Ivo 2026-10-27 14:27 ` Frank Li 0 siblings, 1 reply; 11+ messages in thread From: Diogo Ivo @ 2026-10-27 10:34 UTC (permalink / raw) To: Frank Li Cc: Wolfram Sang, Tommaso Merciai, Alexandre Belloni, Frank Li, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Geert Uytterhoeven, Magnus Damm, linux-i3c, devicetree, linux-kernel, linux-renesas-soc, Linus Walleij On 10/26/2026 8:33 PM, Frank Li wrote: > On Mon, Oct 26, 2026 at 04:21:06PM +0000, Diogo Ivo wrote: >> Hi Frank, >> >> On 10/20/2026 8:18 PM, Frank Li wrote: >>> On Tue, Oct 20, 2026 at 10:36:26AM +0100, Diogo Ivo wrote: >>>> The analog noise filter for the input terminals (I3C_SDA, I3C_SCL) of >>>> the Renesas I3C controller is controlled through the SYS_I3C_CFG >>>> register of the system controller. Document the >>>> renesas,analog-noise-filter property, which references the system >>>> controller together with the offset of the SYS_I3C_CFG register and >>>> the state of the filter: 1 enables the filter and 0 bypasses it. >>>> >>>> The property is optional: device trees not providing it keep the >>>> filter at its reset value. >>>> >>>> Signed-off-by: Diogo Ivo <diogo.ivo.sx@renesas.com> >>>> --- >>>> .../devicetree/bindings/i3c/renesas,i3c.yaml | 19 +++++++++++++++++++ >>>> 1 file changed, 19 insertions(+) >>>> >>>> diff --git a/Documentation/devicetree/bindings/i3c/renesas,i3c.yaml b/Documentation/devicetree/bindings/i3c/renesas,i3c.yaml >>>> index 08fcea89a015..381807844351 100644 >>>> --- a/Documentation/devicetree/bindings/i3c/renesas,i3c.yaml >>>> +++ b/Documentation/devicetree/bindings/i3c/renesas,i3c.yaml >>>> @@ -96,6 +96,25 @@ properties: >>>> - const: presetn >>>> - const: tresetn >>>> >>>> + renesas,analog-noise-filter: >>>> + $ref: /schemas/types.yaml#/definitions/phandle-array >>> >>> I don't like this syscon property, look like it is one kind pad propterty. >>> Is it possible model as pinctrl? >> >> On the RZ/G3L and RZ/G3S this filter is not controlled on the pin >> controller's address space but in the SYSC address space (hence the >> need for the sysc phandle). >> >> There are a few factors weighing against modeling this as pinctrl. >> >> The first is that the physical pads used by I3C are multiplexed between it >> and for example RIIC3, so we are not filtering the pad but the internal path >> of the I3C IP. The pinctrl does indeed have some controls for the pad's >> digital filters, that apply to whatever block is multiplexed to the pad. >> >> Besides this, even if it were moved to pinctrl we would still need the sysc >> reference, as the pfc driver would need a way to reference the sysc address >> space. > > System allows multi pinctrl devices. your syscon can work as pinctrl provider > > pinctrl-0 = <&your nomral pinctrl>, <&syscon i3c ... > ; > > The key problem is if model is resonable. Syscon is simple, but have not > good abstract. Doing this in pinctrl is feasible, especially since the pinctrl driver on G3L already has a reference to syscon for clone channels. The question really is if this is what makes the most sense, as again we are not really controlling an external pin but something inside the IP block, so I'm still not fully convinced. Are there more opinions on this? Thanks, Diogo > Frank > >> >> With this, I think that having a DT property is the best approach. However, >> the form of the property can be changed if you are against this particular >> one. For example, the register offset can be moved to platform_data in the >> I3C driver: >> >> - renesas,analog-noise-filter = <&sysc 0/1> at the SoC level >> >> or I can also split it into two properties. >> >> What approach would work better here? Me I'm leaning towards having >> renesas,analog-digital-filter. >> >> Best regards, >> Diogo >> >>> >>> Frank >>> >>>> + description: >>>> + Analog noise filter for the I3C input signals (I3C_SDA, I3C_SCL), >>>> + controlled through the SYS_I3C_CFG register of the system >>>> + controller (SYSC). Three entries specifying the system controller, >>>> + the offset of the SYS_I3C_CFG register and the state of the filter. >>>> + If not present, the filter keeps its reset state. >>>> + items: >>>> + - items: >>>> + - description: phandle to the system controller node >>>> + - description: offset of the SYS_I3C_CFG register within the SYSC >>>> + - enum: [0, 1] >>>> + description: | >>>> + state of the analog noise filter: >>>> + - 1: enable the filter, performing noise reduction on the >>>> + I3C_SDA and I3C_SCL input signals >>>> + - 0: bypass the filter >>>> + >>>> required: >>>> - compatible >>>> - reg >>>> >>>> -- >>>> 2.56.0 >>>> >> ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 1/3] dt-bindings: i3c: renesas,i3c: Document analog noise filter control 2026-10-27 10:34 ` Diogo Ivo @ 2026-10-27 14:27 ` Frank Li 2026-10-28 11:10 ` Diogo Ivo 0 siblings, 1 reply; 11+ messages in thread From: Frank Li @ 2026-10-27 14:27 UTC (permalink / raw) To: Diogo Ivo Cc: Wolfram Sang, Tommaso Merciai, Alexandre Belloni, Frank Li, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Geert Uytterhoeven, Magnus Damm, linux-i3c, devicetree, linux-kernel, linux-renesas-soc, Linus Walleij On Tue, Oct 27, 2026 at 10:34:54AM +0000, Diogo Ivo wrote: > On 10/26/2026 8:33 PM, Frank Li wrote: > > On Mon, Oct 26, 2026 at 04:21:06PM +0000, Diogo Ivo wrote: > > > Hi Frank, > > > > > > On 10/20/2026 8:18 PM, Frank Li wrote: > > > > On Tue, Oct 20, 2026 at 10:36:26AM +0100, Diogo Ivo wrote: > > > > > The analog noise filter for the input terminals (I3C_SDA, I3C_SCL) of > > > > > the Renesas I3C controller is controlled through the SYS_I3C_CFG > > > > > register of the system controller. Document the > > > > > renesas,analog-noise-filter property, which references the system > > > > > controller together with the offset of the SYS_I3C_CFG register and > > > > > the state of the filter: 1 enables the filter and 0 bypasses it. > > > > > > > > > > The property is optional: device trees not providing it keep the > > > > > filter at its reset value. > > > > > > > > > > Signed-off-by: Diogo Ivo <diogo.ivo.sx@renesas.com> > > > > > --- > > > > > .../devicetree/bindings/i3c/renesas,i3c.yaml | 19 +++++++++++++++++++ > > > > > 1 file changed, 19 insertions(+) > > > > > > > > > > diff --git a/Documentation/devicetree/bindings/i3c/renesas,i3c.yaml b/Documentation/devicetree/bindings/i3c/renesas,i3c.yaml > > > > > index 08fcea89a015..381807844351 100644 > > > > > --- a/Documentation/devicetree/bindings/i3c/renesas,i3c.yaml > > > > > +++ b/Documentation/devicetree/bindings/i3c/renesas,i3c.yaml > > > > > @@ -96,6 +96,25 @@ properties: > > > > > - const: presetn > > > > > - const: tresetn > > > > > > > > > > + renesas,analog-noise-filter: > > > > > + $ref: /schemas/types.yaml#/definitions/phandle-array > > > > > > > > I don't like this syscon property, look like it is one kind pad propterty. > > > > Is it possible model as pinctrl? > > > > > > On the RZ/G3L and RZ/G3S this filter is not controlled on the pin > > > controller's address space but in the SYSC address space (hence the > > > need for the sysc phandle). > > > > > > There are a few factors weighing against modeling this as pinctrl. > > > > > > The first is that the physical pads used by I3C are multiplexed between it > > > and for example RIIC3, so we are not filtering the pad but the internal path > > > of the I3C IP. The pinctrl does indeed have some controls for the pad's > > > digital filters, that apply to whatever block is multiplexed to the pad. > > > > > > Besides this, even if it were moved to pinctrl we would still need the sysc > > > reference, as the pfc driver would need a way to reference the sysc address > > > space. > > > > System allows multi pinctrl devices. your syscon can work as pinctrl provider > > > > pinctrl-0 = <&your nomral pinctrl>, <&syscon i3c ... > ; > > > > The key problem is if model is resonable. Syscon is simple, but have not > > good abstract. > > Doing this in pinctrl is feasible, especially since the pinctrl driver on > G3L already has a reference to syscon for clone channels. The question > really is if this is what makes the most sense, as again we are not really > controlling an external pin but something inside the IP > block, I don't think so. Generally, PAD some property, like pull up/down, driver strength, some include glitch filter (capacitor or schmitter trigger), 'renesas,analog-noise-filter' like adjust some capacitor at PAD, only controler signal (register) is not in your pinctrl region. There are not analog-noise in side SOC's digtial part (Or we can't care it). Analog sigal generally existed in PHY and PAD. Frank > so I'm still not fully convinced. Are there more opinions on this? ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 1/3] dt-bindings: i3c: renesas,i3c: Document analog noise filter control 2026-10-27 14:27 ` Frank Li @ 2026-10-28 11:10 ` Diogo Ivo 2026-10-28 14:46 ` Frank Li 0 siblings, 1 reply; 11+ messages in thread From: Diogo Ivo @ 2026-10-28 11:10 UTC (permalink / raw) To: Frank Li Cc: Wolfram Sang, Tommaso Merciai, Alexandre Belloni, Frank Li, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Geert Uytterhoeven, Magnus Damm, linux-i3c, devicetree, linux-kernel, linux-renesas-soc, Linus Walleij On 10/27/2026 2:27 PM, Frank Li wrote: > On Tue, Oct 27, 2026 at 10:34:54AM +0000, Diogo Ivo wrote: >> On 10/26/2026 8:33 PM, Frank Li wrote: >>> On Mon, Oct 26, 2026 at 04:21:06PM +0000, Diogo Ivo wrote: >>>> Hi Frank, >>>> >>>> On 10/20/2026 8:18 PM, Frank Li wrote: >>>>> On Tue, Oct 20, 2026 at 10:36:26AM +0100, Diogo Ivo wrote: >>>>>> The analog noise filter for the input terminals (I3C_SDA, I3C_SCL) of >>>>>> the Renesas I3C controller is controlled through the SYS_I3C_CFG >>>>>> register of the system controller. Document the >>>>>> renesas,analog-noise-filter property, which references the system >>>>>> controller together with the offset of the SYS_I3C_CFG register and >>>>>> the state of the filter: 1 enables the filter and 0 bypasses it. >>>>>> >>>>>> The property is optional: device trees not providing it keep the >>>>>> filter at its reset value. >>>>>> >>>>>> Signed-off-by: Diogo Ivo <diogo.ivo.sx@renesas.com> >>>>>> --- >>>>>> .../devicetree/bindings/i3c/renesas,i3c.yaml | 19 +++++++++++++++++++ >>>>>> 1 file changed, 19 insertions(+) >>>>>> >>>>>> diff --git a/Documentation/devicetree/bindings/i3c/renesas,i3c.yaml b/Documentation/devicetree/bindings/i3c/renesas,i3c.yaml >>>>>> index 08fcea89a015..381807844351 100644 >>>>>> --- a/Documentation/devicetree/bindings/i3c/renesas,i3c.yaml >>>>>> +++ b/Documentation/devicetree/bindings/i3c/renesas,i3c.yaml >>>>>> @@ -96,6 +96,25 @@ properties: >>>>>> - const: presetn >>>>>> - const: tresetn >>>>>> >>>>>> + renesas,analog-noise-filter: >>>>>> + $ref: /schemas/types.yaml#/definitions/phandle-array >>>>> >>>>> I don't like this syscon property, look like it is one kind pad propterty. >>>>> Is it possible model as pinctrl? >>>> >>>> On the RZ/G3L and RZ/G3S this filter is not controlled on the pin >>>> controller's address space but in the SYSC address space (hence the >>>> need for the sysc phandle). >>>> >>>> There are a few factors weighing against modeling this as pinctrl. >>>> >>>> The first is that the physical pads used by I3C are multiplexed between it >>>> and for example RIIC3, so we are not filtering the pad but the internal path >>>> of the I3C IP. The pinctrl does indeed have some controls for the pad's >>>> digital filters, that apply to whatever block is multiplexed to the pad. >>>> >>>> Besides this, even if it were moved to pinctrl we would still need the sysc >>>> reference, as the pfc driver would need a way to reference the sysc address >>>> space. >>> >>> System allows multi pinctrl devices. your syscon can work as pinctrl provider >>> >>> pinctrl-0 = <&your nomral pinctrl>, <&syscon i3c ... > ; >>> >>> The key problem is if model is resonable. Syscon is simple, but have not >>> good abstract. >> >> Doing this in pinctrl is feasible, especially since the pinctrl driver on >> G3L already has a reference to syscon for clone channels. The question >> really is if this is what makes the most sense, as again we are not really >> controlling an external pin but something inside the IP >> block, > > I don't think so. Generally, PAD some property, like pull up/down, driver > strength, some include glitch filter (capacitor or schmitter trigger), > > 'renesas,analog-noise-filter' like adjust some capacitor at PAD, only > controler signal (register) is not in your pinctrl region. > > There are not analog-noise in side SOC's digtial part (Or we can't care it). > Analog sigal generally existed in PHY and PAD. On the RZ/G3L the analog filter is located after the pinmux, at the input of each I2C/I3C block. Each I2C and I3C block in G3L has a single register bit that controls if the analog filter is enabled for that specific block (so we have SYS_I2C0_CFG, SYS_I2C1_CFG, ..., SYS_I3C_CFG) each with a single bit that controls if the filter is enabled or not. However, for the I2C blocks they can be multiplexed to dozens of pads, and these pads don't each contain an i2c analog filter. Rather, the signal passes first by the external pad and pinmux and then it reaches the intended I2C or I3C IP block, where the analog filter is then located. For example, the P2_0 and P2_1 pads can be multiplexed between I3C and RIIC3, and each of these blocks then has its filter at the input of the IP block, and a single bit in the SYS register controls the filter for SDA and SCL together. Then, there is the problem that if we model this with pinctrl with a pad property then pinconf would not know which block's SYS register to write without coupling to pinmux. In this specific case of P2_0 and P2_1 pads without coupling pinconf and pinmux we could not determine whether we should write to SYS_I3C_CFG or SYS_I2C3_CFG. Then there is also the precedent of i2c-analog-filter being a controller node property rather than a pad/pinctrl property. For these reasons I believe that pinctrl is not the best way to model the I2C/I3C analog filters but please do let me know your thoughts. Geert, DT maintainers, do you have any preferences on what the best way to model this is? Best regards, Diogo > Frank > >> so I'm still not fully convinced. Are there more opinions on this? ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 1/3] dt-bindings: i3c: renesas,i3c: Document analog noise filter control 2026-10-28 11:10 ` Diogo Ivo @ 2026-10-28 14:46 ` Frank Li 0 siblings, 0 replies; 11+ messages in thread From: Frank Li @ 2026-10-28 14:46 UTC (permalink / raw) To: Diogo Ivo Cc: Wolfram Sang, Tommaso Merciai, Alexandre Belloni, Frank Li, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Geert Uytterhoeven, Magnus Damm, linux-i3c, devicetree, linux-kernel, linux-renesas-soc, Linus Walleij On Wed, Oct 28, 2026 at 11:10:07AM +0000, Diogo Ivo wrote: > On 10/27/2026 2:27 PM, Frank Li wrote: > > On Tue, Oct 27, 2026 at 10:34:54AM +0000, Diogo Ivo wrote: > > > On 10/26/2026 8:33 PM, Frank Li wrote: > > > > On Mon, Oct 26, 2026 at 04:21:06PM +0000, Diogo Ivo wrote: > > > > > Hi Frank, > > > > > > > > > > On 10/20/2026 8:18 PM, Frank Li wrote: > > > > > > On Tue, Oct 20, 2026 at 10:36:26AM +0100, Diogo Ivo wrote: > > > > > > > The analog noise filter for the input terminals (I3C_SDA, I3C_SCL) of > > > > > > > the Renesas I3C controller is controlled through the SYS_I3C_CFG > > > > > > > register of the system controller. Document the > > > > > > > renesas,analog-noise-filter property, which references the system > > > > > > > controller together with the offset of the SYS_I3C_CFG register and > > > > > > > the state of the filter: 1 enables the filter and 0 bypasses it. > > > > > > > > > > > > > > The property is optional: device trees not providing it keep the > > > > > > > filter at its reset value. > > > > > > > > > > > > > > Signed-off-by: Diogo Ivo <diogo.ivo.sx@renesas.com> > > > > > > > --- > > > > > > > .../devicetree/bindings/i3c/renesas,i3c.yaml | 19 +++++++++++++++++++ > > > > > > > 1 file changed, 19 insertions(+) > > > > > > > > > > > > > > diff --git a/Documentation/devicetree/bindings/i3c/renesas,i3c.yaml b/Documentation/devicetree/bindings/i3c/renesas,i3c.yaml > > > > > > > index 08fcea89a015..381807844351 100644 > > > > > > > --- a/Documentation/devicetree/bindings/i3c/renesas,i3c.yaml > > > > > > > +++ b/Documentation/devicetree/bindings/i3c/renesas,i3c.yaml > > > > > > > @@ -96,6 +96,25 @@ properties: > > > > > > > - const: presetn > > > > > > > - const: tresetn > > > > > > > > > > > > > > + renesas,analog-noise-filter: > > > > > > > + $ref: /schemas/types.yaml#/definitions/phandle-array > > > > > > > > > > > > I don't like this syscon property, look like it is one kind pad propterty. > > > > > > Is it possible model as pinctrl? > > > > > > > > > > On the RZ/G3L and RZ/G3S this filter is not controlled on the pin > > > > > controller's address space but in the SYSC address space (hence the > > > > > need for the sysc phandle). > > > > > > > > > > There are a few factors weighing against modeling this as pinctrl. > > > > > > > > > > The first is that the physical pads used by I3C are multiplexed between it > > > > > and for example RIIC3, so we are not filtering the pad but the internal path > > > > > of the I3C IP. The pinctrl does indeed have some controls for the pad's > > > > > digital filters, that apply to whatever block is multiplexed to the pad. > > > > > > > > > > Besides this, even if it were moved to pinctrl we would still need the sysc > > > > > reference, as the pfc driver would need a way to reference the sysc address > > > > > space. > > > > > > > > System allows multi pinctrl devices. your syscon can work as pinctrl provider > > > > > > > > pinctrl-0 = <&your nomral pinctrl>, <&syscon i3c ... > ; > > > > > > > > The key problem is if model is resonable. Syscon is simple, but have not > > > > good abstract. > > > > > > Doing this in pinctrl is feasible, especially since the pinctrl driver on > > > G3L already has a reference to syscon for clone channels. The question > > > really is if this is what makes the most sense, as again we are not really > > > controlling an external pin but something inside the IP > > > block, > > > > I don't think so. Generally, PAD some property, like pull up/down, driver > > strength, some include glitch filter (capacitor or schmitter trigger), > > > > 'renesas,analog-noise-filter' like adjust some capacitor at PAD, only > > controler signal (register) is not in your pinctrl region. > > > > There are not analog-noise in side SOC's digtial part (Or we can't care it). > > Analog sigal generally existed in PHY and PAD. > > On the RZ/G3L the analog filter is located after the pinmux, at the input of > each I2C/I3C block. Each I2C and I3C block in G3L has a single > register bit that controls if the analog filter is enabled for that specific > block (so we have SYS_I2C0_CFG, SYS_I2C1_CFG, ..., SYS_I3C_CFG) > each with a single bit that controls if the filter is enabled or not. > > However, for the I2C blocks they can be multiplexed to dozens of pads, and > these pads don't each contain an i2c analog filter. Rather, the signal > passes first by the external pad and pinmux and then it reaches the intended > I2C or I3C IP block, where the analog filter is then located. For example, > the P2_0 and P2_1 pads can be multiplexed between I3C and RIIC3, and each of > these blocks then has its filter at the input of the IP block, and a single > bit in the SYS register controls the filter for SDA and SCL together. The location in hardware is not important. What's most consider is choose/use which software model to descript your hardware. > Then, > there is the problem that if we model this with pinctrl with a pad property > then pinconf would not know which block's SYS register to write without > coupling to pinmux. In this specific case of P2_0 and P2_1 pads without > coupling pinconf and pinmux we could not determine whether we should write > to SYS_I3C_CFG or SYS_I2C3_CFG. coupling pinconf and pinmux is quite common. I remember pinctrl framework already consider that. > > Then there is also the precedent of i2c-analog-filter being a controller > node property rather than a pad/pinctrl property. > > For these reasons I believe that pinctrl is not the best way to model the > I2C/I3C analog filters but please do let me know your thoughts. But syscon is also not good, which basic have not any abstaction. Frank > > Geert, DT maintainers, do you have any preferences on what the best way to > model this is? > > Best regards, > Diogo > > > > Frank > > > > > so I'm still not fully convinced. Are there more opinions on this? > ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 2/3] i3c: renesas: Add support for the analog noise filter 2026-10-20 9:36 [PATCH 0/3] i3c: renesas: Add support for the analog noise filter Diogo Ivo 2026-10-20 9:36 ` [PATCH 1/3] dt-bindings: i3c: renesas,i3c: Document analog noise filter control Diogo Ivo @ 2026-10-20 9:36 ` Diogo Ivo 2026-10-20 9:36 ` [PATCH 3/3] arm64: dts: renesas: r9a08g046: Enable I3C " Diogo Ivo 2 siblings, 0 replies; 11+ messages in thread From: Diogo Ivo @ 2026-10-20 9:36 UTC (permalink / raw) To: Wolfram Sang, Tommaso Merciai, Alexandre Belloni, Frank Li, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Geert Uytterhoeven, Magnus Damm Cc: linux-i3c, devicetree, linux-kernel, linux-renesas-soc, Diogo Ivo The input terminals (I3C_SDA, I3C_SCL) of the Renesas I3C controller have an analog filter for noise removal, controlled through a bypass bit on the SYS_I3C_CFG register of the system controller (SYSC). Add support for configuring the filter through the renesas,analog-noise-filter Device Tree property, which references the system controller together with the offset of the SYS_I3C_CFG register and the state of the filter. Boards not providing the property keep the reset value of the filter. Signed-off-by: Diogo Ivo <diogo.ivo.sx@renesas.com> --- drivers/i3c/master/renesas-i3c.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/drivers/i3c/master/renesas-i3c.c b/drivers/i3c/master/renesas-i3c.c index 80a6df1151bf..80d360aa87ba 100644 --- a/drivers/i3c/master/renesas-i3c.c +++ b/drivers/i3c/master/renesas-i3c.c @@ -19,10 +19,12 @@ #include <linux/ioport.h> #include <linux/iopoll.h> #include <linux/list.h> +#include <linux/mfd/syscon.h> #include <linux/module.h> #include <linux/of.h> #include <linux/platform_device.h> #include <linux/pm_runtime.h> +#include <linux/regmap.h> #include <linux/reset.h> #include <linux/slab.h> #include "../internals.h" @@ -200,6 +202,9 @@ #define RENESAS_I3C_MAX_DEVS 8 #define I2C_INIT_MSG -1 +/* System controller registers */ +#define SYSC_SYS_I3C_CFG_AF_BYPASS BIT(0) + enum i3c_internal_state { I3C_INTERNAL_STATE_DISABLED, I3C_INTERNAL_STATE_CONTROLLER_IDLE, @@ -1466,6 +1471,8 @@ static const struct renesas_i3c_irq_desc renesas_i3c_irqs[] = { static int renesas_i3c_probe(struct platform_device *pdev) { struct renesas_i3c *i3c; + struct regmap *sysc; + unsigned int anf[2]; int ret, i; i3c = devm_kzalloc(&pdev->dev, sizeof(*i3c), GFP_KERNEL); @@ -1497,6 +1504,27 @@ static int renesas_i3c_probe(struct platform_device *pdev) return dev_err_probe(&pdev->dev, PTR_ERR(i3c->presetn), "Error: missing presetn ctrl\n"); + sysc = syscon_regmap_lookup_by_phandle_args(pdev->dev.of_node, + "renesas,analog-noise-filter", + ARRAY_SIZE(anf), anf); + if (IS_ERR(sysc) && PTR_ERR(sysc) != -ENOENT) + return dev_err_probe(&pdev->dev, PTR_ERR(sysc), + "Failed to lookup analog noise filter\n"); + + if (!IS_ERR(sysc)) { + /* + * The analog noise filter of the input terminals is bypassed + * when SYSC_SYS_I3C_CFG_AF_BYPASS is set and used when the + * bit is clear. + */ + u32 bypass = anf[1] ? 0 : SYSC_SYS_I3C_CFG_AF_BYPASS; + + ret = regmap_update_bits(sysc, anf[0], + SYSC_SYS_I3C_CFG_AF_BYPASS, bypass); + if (ret) + return ret; + } + spin_lock_init(&i3c->xferqueue.lock); INIT_LIST_HEAD(&i3c->xferqueue.list); -- 2.56.0 ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 3/3] arm64: dts: renesas: r9a08g046: Enable I3C analog noise filter 2026-10-20 9:36 [PATCH 0/3] i3c: renesas: Add support for the analog noise filter Diogo Ivo 2026-10-20 9:36 ` [PATCH 1/3] dt-bindings: i3c: renesas,i3c: Document analog noise filter control Diogo Ivo 2026-10-20 9:36 ` [PATCH 2/3] i3c: renesas: Add support for the analog noise filter Diogo Ivo @ 2026-10-20 9:36 ` Diogo Ivo 2 siblings, 0 replies; 11+ messages in thread From: Diogo Ivo @ 2026-10-20 9:36 UTC (permalink / raw) To: Wolfram Sang, Tommaso Merciai, Alexandre Belloni, Frank Li, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Geert Uytterhoeven, Magnus Damm Cc: linux-i3c, devicetree, linux-kernel, linux-renesas-soc, Diogo Ivo The input terminals of the I3C controller on the RZ/G3L SoC have an analog filter for noise removal, controlled through the SYS_I3C_CFG register of the system controller. Enable the filter through the renesas,analog-noise-filter property. Signed-off-by: Diogo Ivo <diogo.ivo.sx@renesas.com> --- arch/arm64/boot/dts/renesas/r9a08g046.dtsi | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/arm64/boot/dts/renesas/r9a08g046.dtsi b/arch/arm64/boot/dts/renesas/r9a08g046.dtsi index 1b0b95b12ef8..1968e18fa587 100644 --- a/arch/arm64/boot/dts/renesas/r9a08g046.dtsi +++ b/arch/arm64/boot/dts/renesas/r9a08g046.dtsi @@ -650,6 +650,7 @@ i3c: i3c@100e0000 { <&cpg R9A08G046_I3C_TRESETN>; reset-names = "presetn", "tresetn"; power-domains = <&cpg>; + renesas,analog-noise-filter = <&sysc 0x440 1>; #address-cells = <3>; #size-cells = <0>; status = "disabled"; -- 2.56.0 ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2026-10-28 14:47 UTC | newest] Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2026-10-20 9:36 [PATCH 0/3] i3c: renesas: Add support for the analog noise filter Diogo Ivo 2026-10-20 9:36 ` [PATCH 1/3] dt-bindings: i3c: renesas,i3c: Document analog noise filter control Diogo Ivo 2026-10-20 19:18 ` Frank Li 2026-10-26 16:21 ` Diogo Ivo 2026-10-26 20:33 ` Frank Li 2026-10-27 10:34 ` Diogo Ivo 2026-10-27 14:27 ` Frank Li 2026-10-28 11:10 ` Diogo Ivo 2026-10-28 14:46 ` Frank Li 2026-10-20 9:36 ` [PATCH 2/3] i3c: renesas: Add support for the analog noise filter Diogo Ivo 2026-10-20 9:36 ` [PATCH 3/3] arm64: dts: renesas: r9a08g046: Enable I3C " Diogo Ivo
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®