diff mbox series

[v9,01/22] dt-bindings: ARM: Mediatek: Add new document bindings of imp i2c wrapper controller

Message ID 20210524122053.17155-2-chun-jie.chen@mediatek.com (mailing list archive)
State New, archived
Headers show
Series Mediatek MT8192 clock support | expand

Commit Message

Chun-Jie Chen May 24, 2021, 12:20 p.m. UTC
This patch adds the new binding documentation of imp i2c wrapper controller
for Mediatek MT8192.

Signed-off-by: Weiyi Lu <weiyi.lu@mediatek.com>
Signed-off-by: chun-jie.chen <chun-jie.chen@mediatek.com>
---
 .../arm/mediatek/mediatek,imp_iic_wrap.yaml   | 80 +++++++++++++++++++
 1 file changed, 80 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/arm/mediatek/mediatek,imp_iic_wrap.yaml

Comments

Rob Herring (Arm) June 2, 2021, 5:12 p.m. UTC | #1
On Mon, May 24, 2021 at 08:20:32PM +0800, Chun-Jie Chen wrote:
> This patch adds the new binding documentation of imp i2c wrapper controller
> for Mediatek MT8192.
> 
> Signed-off-by: Weiyi Lu <weiyi.lu@mediatek.com>
> Signed-off-by: chun-jie.chen <chun-jie.chen@mediatek.com>
> ---
>  .../arm/mediatek/mediatek,imp_iic_wrap.yaml   | 80 +++++++++++++++++++
>  1 file changed, 80 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/arm/mediatek/mediatek,imp_iic_wrap.yaml
> 
> diff --git a/Documentation/devicetree/bindings/arm/mediatek/mediatek,imp_iic_wrap.yaml b/Documentation/devicetree/bindings/arm/mediatek/mediatek,imp_iic_wrap.yaml
> new file mode 100644
> index 000000000000..fb6cb9e60ee2
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/arm/mediatek/mediatek,imp_iic_wrap.yaml
> @@ -0,0 +1,80 @@
> +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/arm/mediatek/mediatek,imp_iic_wrap.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: MediaTek IMP I2C Wrapper Controller
> +
> +maintainers:
> +  - Chun-Jie Chen <chun-jie.chen@mediatek.com>
> +
> +description:
> +  The Mediatek imp i2c wrapper controller provides functional configurations and clocks to the system.
> +
> +properties:
> +  compatible:
> +    items:
> +      - enum:
> +          - mediatek,mt8192-imp_iic_wrap_c
> +          - mediatek,mt8192-imp_iic_wrap_e
> +          - mediatek,mt8192-imp_iic_wrap_s
> +          - mediatek,mt8192-imp_iic_wrap_ws
> +          - mediatek,mt8192-imp_iic_wrap_w
> +          - mediatek,mt8192-imp_iic_wrap_n

Looks to me like these are all the same h/w, but just have differing 
sets of clocks. That's not really a reason to have different 
compatibles. 

If you need to know what clocks are present, you can walk the DT for 
all 'clocks' properties matching this clock controller instance. Or use 
'clock-indices' to define which ones are present.

Rob
Chun-Jie Chen June 7, 2021, 5:20 a.m. UTC | #2
On Wed, 2021-06-02 at 12:12 -0500, Rob Herring wrote:
> On Mon, May 24, 2021 at 08:20:32PM +0800, Chun-Jie Chen wrote:
> > This patch adds the new binding documentation of imp i2c wrapper
> > controller
> > for Mediatek MT8192.
> > 
> > Signed-off-by: Weiyi Lu <weiyi.lu@mediatek.com>
> > Signed-off-by: chun-jie.chen <chun-jie.chen@mediatek.com>
> > ---
> >  .../arm/mediatek/mediatek,imp_iic_wrap.yaml   | 80
> > +++++++++++++++++++
> >  1 file changed, 80 insertions(+)
> >  create mode 100644
> > Documentation/devicetree/bindings/arm/mediatek/mediatek,imp_iic_wra
> > p.yaml
> > 
> > diff --git
> > a/Documentation/devicetree/bindings/arm/mediatek/mediatek,imp_iic_w
> > rap.yaml
> > b/Documentation/devicetree/bindings/arm/mediatek/mediatek,imp_iic_w
> > rap.yaml
> > new file mode 100644
> > index 000000000000..fb6cb9e60ee2
> > --- /dev/null
> > +++
> > b/Documentation/devicetree/bindings/arm/mediatek/mediatek,imp_iic_w
> > rap.yaml
> > @@ -0,0 +1,80 @@
> > +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
> > +%YAML 1.2
> > +---
> > +$id: 
> > http://devicetree.org/schemas/arm/mediatek/mediatek,imp_iic_wrap.yaml#
> > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > +
> > +title: MediaTek IMP I2C Wrapper Controller
> > +
> > +maintainers:
> > +  - Chun-Jie Chen <chun-jie.chen@mediatek.com>
> > +
> > +description:
> > +  The Mediatek imp i2c wrapper controller provides functional
> > configurations and clocks to the system.
> > +
> > +properties:
> > +  compatible:
> > +    items:
> > +      - enum:
> > +          - mediatek,mt8192-imp_iic_wrap_c
> > +          - mediatek,mt8192-imp_iic_wrap_e
> > +          - mediatek,mt8192-imp_iic_wrap_s
> > +          - mediatek,mt8192-imp_iic_wrap_ws
> > +          - mediatek,mt8192-imp_iic_wrap_w
> > +          - mediatek,mt8192-imp_iic_wrap_n
> 
> Looks to me like these are all the same h/w, but just have differing 
> sets of clocks. That's not really a reason to have different 
> compatibles. 
> 
> If you need to know what clocks are present, you can walk the DT for 
> all 'clocks' properties matching this clock controller instance. Or
> use 
> 'clock-indices' to define which ones are present.
> 
> Rob

Some module is divided to sub-modules which are designed in different
h/w blocks for different usage, and if we want to use the same
compatible to present these h/w blocks, we need to move the clock data
provided by these h/w blocks to dts, but we usually use different
compatible to get the h/w blocks data in
Mediatek's clock driver, so do you suggest to register clock provided
by different h/w blocks using same compatible?

Best Regards,
Chun-Jie
Matthias Brugger June 8, 2021, 2:45 p.m. UTC | #3
On 07/06/2021 07:20, Chun-Jie Chen wrote:
> On Wed, 2021-06-02 at 12:12 -0500, Rob Herring wrote:
>> On Mon, May 24, 2021 at 08:20:32PM +0800, Chun-Jie Chen wrote:
>>> This patch adds the new binding documentation of imp i2c wrapper
>>> controller
>>> for Mediatek MT8192.
>>>
>>> Signed-off-by: Weiyi Lu <weiyi.lu@mediatek.com>
>>> Signed-off-by: chun-jie.chen <chun-jie.chen@mediatek.com>
>>> ---
>>>  .../arm/mediatek/mediatek,imp_iic_wrap.yaml   | 80
>>> +++++++++++++++++++
>>>  1 file changed, 80 insertions(+)
>>>  create mode 100644
>>> Documentation/devicetree/bindings/arm/mediatek/mediatek,imp_iic_wra
>>> p.yaml
>>>
>>> diff --git
>>> a/Documentation/devicetree/bindings/arm/mediatek/mediatek,imp_iic_w
>>> rap.yaml
>>> b/Documentation/devicetree/bindings/arm/mediatek/mediatek,imp_iic_w
>>> rap.yaml
>>> new file mode 100644
>>> index 000000000000..fb6cb9e60ee2
>>> --- /dev/null
>>> +++
>>> b/Documentation/devicetree/bindings/arm/mediatek/mediatek,imp_iic_w
>>> rap.yaml
>>> @@ -0,0 +1,80 @@
>>> +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
>>> +%YAML 1.2
>>> +---
>>> +$id: 
>>> http://devicetree.org/schemas/arm/mediatek/mediatek,imp_iic_wrap.yaml#
>>> +$schema: http://devicetree.org/meta-schemas/core.yaml#
>>> +
>>> +title: MediaTek IMP I2C Wrapper Controller
>>> +
>>> +maintainers:
>>> +  - Chun-Jie Chen <chun-jie.chen@mediatek.com>
>>> +
>>> +description:
>>> +  The Mediatek imp i2c wrapper controller provides functional
>>> configurations and clocks to the system.
>>> +
>>> +properties:
>>> +  compatible:
>>> +    items:
>>> +      - enum:
>>> +          - mediatek,mt8192-imp_iic_wrap_c
>>> +          - mediatek,mt8192-imp_iic_wrap_e
>>> +          - mediatek,mt8192-imp_iic_wrap_s
>>> +          - mediatek,mt8192-imp_iic_wrap_ws
>>> +          - mediatek,mt8192-imp_iic_wrap_w
>>> +          - mediatek,mt8192-imp_iic_wrap_n
>>
>> Looks to me like these are all the same h/w, but just have differing 
>> sets of clocks. That's not really a reason to have different 
>> compatibles. 
>>
>> If you need to know what clocks are present, you can walk the DT for 
>> all 'clocks' properties matching this clock controller instance. Or
>> use 
>> 'clock-indices' to define which ones are present.
>>
>> Rob
> 
> Some module is divided to sub-modules which are designed in different
> h/w blocks for different usage, and if we want to use the same
> compatible to present these h/w blocks, we need to move the clock data
> provided by these h/w blocks to dts, but we usually use different
> compatible to get the h/w blocks data in
> Mediatek's clock driver, so do you suggest to register clock provided
> by different h/w blocks using same compatible?
> 

The mapping of them is as following:
imp_iic_wrap_c:  11007000
imp_iic_wrap_e:  11cb1000
imp_iic_wrap_s:  11d03000
imp_iic_wrap_ws: 11d23000
imp_iic_wrap_w:  11e01000
imp_iic_wrap_n:  11f02000

Regards,
Matthias
Stephen Boyd June 10, 2021, 5:41 p.m. UTC | #4
Quoting Matthias Brugger (2021-06-08 07:45:49)
> 
> 
> On 07/06/2021 07:20, Chun-Jie Chen wrote:
> > On Wed, 2021-06-02 at 12:12 -0500, Rob Herring wrote:
> >>> +
> >>> +description:
> >>> +  The Mediatek imp i2c wrapper controller provides functional
> >>> configurations and clocks to the system.
> >>> +
> >>> +properties:
> >>> +  compatible:
> >>> +    items:
> >>> +      - enum:
> >>> +          - mediatek,mt8192-imp_iic_wrap_c
> >>> +          - mediatek,mt8192-imp_iic_wrap_e
> >>> +          - mediatek,mt8192-imp_iic_wrap_s
> >>> +          - mediatek,mt8192-imp_iic_wrap_ws
> >>> +          - mediatek,mt8192-imp_iic_wrap_w
> >>> +          - mediatek,mt8192-imp_iic_wrap_n
> >>
> >> Looks to me like these are all the same h/w, but just have differing 
> >> sets of clocks. That's not really a reason to have different 
> >> compatibles. 
> >>
> >> If you need to know what clocks are present, you can walk the DT for 
> >> all 'clocks' properties matching this clock controller instance. Or
> >> use 
> >> 'clock-indices' to define which ones are present.

Is the idea to use clock-indices and then list all the clock ids in
there and match them up at driver probe time to register the clocks
provided by the IO region? Feels like we'll do a lot of parsing at each
boot to match up structures and register clks with the clk framework.

If it's like other SoCs then the clk id maps to a hard macro for a type
of clk, and those hard macros have been glued together with other clks
and then partitioned into different IO regions to make up a clock
controller. Or maybe in this case, those clk hard macros have been
scattered into each IP block like SPI, i2c, uart, etc. so that the clock
controller doesn't really exist and merely the gates and rate control
(mux/divider) for the clk that's clocking some particular IP block all
live inside the IP wrapper. If it's this case then I hope there are a
bunch of PLLs that are fixed rate so that the i2c clk doesn't have to go
outside the wrapper to change frequency (of which there should be two
"standard" frequencies anyway).

> >>
> >> Rob
> > 
> > Some module is divided to sub-modules which are designed in different
> > h/w blocks for different usage, and if we want to use the same
> > compatible to present these h/w blocks, we need to move the clock data
> > provided by these h/w blocks to dts, but we usually use different
> > compatible to get the h/w blocks data in
> > Mediatek's clock driver, so do you suggest to register clock provided
> > by different h/w blocks using same compatible?
> > 
> 
> The mapping of them is as following:
> imp_iic_wrap_c:  11007000
> imp_iic_wrap_e:  11cb1000
> imp_iic_wrap_s:  11d03000
> imp_iic_wrap_ws: 11d23000
> imp_iic_wrap_w:  11e01000
> imp_iic_wrap_n:  11f02000
> 

Sure. What is their purpose though? Are they simply a bunch of different
i2c clks?
Matthias Brugger June 11, 2021, 9:56 a.m. UTC | #5
On 10/06/2021 19:41, Stephen Boyd wrote:
> Quoting Matthias Brugger (2021-06-08 07:45:49)
>>
>>
>> On 07/06/2021 07:20, Chun-Jie Chen wrote:
>>> On Wed, 2021-06-02 at 12:12 -0500, Rob Herring wrote:
>>>>> +
>>>>> +description:
>>>>> +  The Mediatek imp i2c wrapper controller provides functional
>>>>> configurations and clocks to the system.
>>>>> +
>>>>> +properties:
>>>>> +  compatible:
>>>>> +    items:
>>>>> +      - enum:
>>>>> +          - mediatek,mt8192-imp_iic_wrap_c
>>>>> +          - mediatek,mt8192-imp_iic_wrap_e
>>>>> +          - mediatek,mt8192-imp_iic_wrap_s
>>>>> +          - mediatek,mt8192-imp_iic_wrap_ws
>>>>> +          - mediatek,mt8192-imp_iic_wrap_w
>>>>> +          - mediatek,mt8192-imp_iic_wrap_n
>>>>
>>>> Looks to me like these are all the same h/w, but just have differing 
>>>> sets of clocks. That's not really a reason to have different 
>>>> compatibles. 
>>>>
>>>> If you need to know what clocks are present, you can walk the DT for 
>>>> all 'clocks' properties matching this clock controller instance. Or
>>>> use 
>>>> 'clock-indices' to define which ones are present.
> 
> Is the idea to use clock-indices and then list all the clock ids in
> there and match them up at driver probe time to register the clocks
> provided by the IO region? Feels like we'll do a lot of parsing at each
> boot to match up structures and register clks with the clk framework.
> 
> If it's like other SoCs then the clk id maps to a hard macro for a type
> of clk, and those hard macros have been glued together with other clks
> and then partitioned into different IO regions to make up a clock
> controller. Or maybe in this case, those clk hard macros have been
> scattered into each IP block like SPI, i2c, uart, etc. so that the clock
> controller doesn't really exist and merely the gates and rate control
> (mux/divider) for the clk that's clocking some particular IP block all
> live inside the IP wrapper. If it's this case then I hope there are a
> bunch of PLLs that are fixed rate so that the i2c clk doesn't have to go
> outside the wrapper to change frequency (of which there should be two
> "standard" frequencies anyway).
> 
>>>>
>>>> Rob
>>>
>>> Some module is divided to sub-modules which are designed in different
>>> h/w blocks for different usage, and if we want to use the same
>>> compatible to present these h/w blocks, we need to move the clock data
>>> provided by these h/w blocks to dts, but we usually use different
>>> compatible to get the h/w blocks data in
>>> Mediatek's clock driver, so do you suggest to register clock provided
>>> by different h/w blocks using same compatible?
>>>
>>
>> The mapping of them is as following:
>> imp_iic_wrap_c:  11007000
>> imp_iic_wrap_e:  11cb1000
>> imp_iic_wrap_s:  11d03000
>> imp_iic_wrap_ws: 11d23000
>> imp_iic_wrap_w:  11e01000
>> imp_iic_wrap_n:  11f02000
>>
> 
> Sure. What is their purpose though? Are they simply a bunch of different
> i2c clks?
> 

That would be need to be answered by MediaTek as I don't have access to any
documentation.

Regards,
Matthias
Chun-Jie Chen June 15, 2021, 2:34 a.m. UTC | #6
On Fri, 2021-06-11 at 11:56 +0200, Matthias Brugger wrote:
> 
> On 10/06/2021 19:41, Stephen Boyd wrote:
> > Quoting Matthias Brugger (2021-06-08 07:45:49)
> > > 
> > > 
> > > On 07/06/2021 07:20, Chun-Jie Chen wrote:
> > > > On Wed, 2021-06-02 at 12:12 -0500, Rob Herring wrote:
> > > > > > +
> > > > > > +description:
> > > > > > +  The Mediatek imp i2c wrapper controller provides
> > > > > > functional
> > > > > > configurations and clocks to the system.
> > > > > > +
> > > > > > +properties:
> > > > > > +  compatible:
> > > > > > +    items:
> > > > > > +      - enum:
> > > > > > +          - mediatek,mt8192-imp_iic_wrap_c
> > > > > > +          - mediatek,mt8192-imp_iic_wrap_e
> > > > > > +          - mediatek,mt8192-imp_iic_wrap_s
> > > > > > +          - mediatek,mt8192-imp_iic_wrap_ws
> > > > > > +          - mediatek,mt8192-imp_iic_wrap_w
> > > > > > +          - mediatek,mt8192-imp_iic_wrap_n
> > > > > 
> > > > > Looks to me like these are all the same h/w, but just have
> > > > > differing 
> > > > > sets of clocks. That's not really a reason to have different 
> > > > > compatibles. 
> > > > > 
> > > > > If you need to know what clocks are present, you can walk the
> > > > > DT for 
> > > > > all 'clocks' properties matching this clock controller
> > > > > instance. Or
> > > > > use 
> > > > > 'clock-indices' to define which ones are present.
> > 
> > Is the idea to use clock-indices and then list all the clock ids in
> > there and match them up at driver probe time to register the clocks
> > provided by the IO region? Feels like we'll do a lot of parsing at
> > each
> > boot to match up structures and register clks with the clk
> > framework.
> > 
> > If it's like other SoCs then the clk id maps to a hard macro for a
> > type
> > of clk, and those hard macros have been glued together with other
> > clks
> > and then partitioned into different IO regions to make up a clock
> > controller. Or maybe in this case, those clk hard macros have been
> > scattered into each IP block like SPI, i2c, uart, etc. so that the
> > clock
> > controller doesn't really exist and merely the gates and rate
> > control
> > (mux/divider) for the clk that's clocking some particular IP block
> > all
> > live inside the IP wrapper. If it's this case then I hope there are
> > a
> > bunch of PLLs that are fixed rate so that the i2c clk doesn't have
> > to go
> > outside the wrapper to change frequency (of which there should be
> > two
> > "standard" frequencies anyway).
> > 
> > > > > 
> > > > > Rob
> > > > 
> > > > Some module is divided to sub-modules which are designed in
> > > > different
> > > > h/w blocks for different usage, and if we want to use the same
> > > > compatible to present these h/w blocks, we need to move the
> > > > clock data
> > > > provided by these h/w blocks to dts, but we usually use
> > > > different
> > > > compatible to get the h/w blocks data in
> > > > Mediatek's clock driver, so do you suggest to register clock
> > > > provided
> > > > by different h/w blocks using same compatible?
> > > > 
> > > 
> > > The mapping of them is as following:
> > > imp_iic_wrap_c:  11007000
> > > imp_iic_wrap_e:  11cb1000
> > > imp_iic_wrap_s:  11d03000
> > > imp_iic_wrap_ws: 11d23000
> > > imp_iic_wrap_w:  11e01000
> > > imp_iic_wrap_n:  11f02000
> > > 
> > 
> > Sure. What is their purpose though? Are they simply a bunch of
> > different
> > i2c clks?
> > 
> 
> That would be need to be answered by MediaTek as I don't have access
> to any
> documentation.
> 
> Regards,
> Matthias

We describe which clock controllers are exist in dts and
get the clock data provided by clock controller in driver data
by matching device compatible.

The clock data contains several clocks which includes the clock index,
parent clock source and the details of reg control inside the IP block
of clock controller.

In MT8192 platform, some IP block is divide to several sub-blocks and
each sub-block provides clock control by itself.

Best Regards,
Chun-Jie
Chen-Yu Tsai June 18, 2021, 6:32 a.m. UTC | #7
On Wed, Jun 16, 2021 at 2:34 AM Chun-Jie Chen
<chun-jie.chen@mediatek.com> wrote:
>
> On Fri, 2021-06-11 at 11:56 +0200, Matthias Brugger wrote:
> >
> > On 10/06/2021 19:41, Stephen Boyd wrote:
> > > Quoting Matthias Brugger (2021-06-08 07:45:49)
> > > >
> > > >
> > > > On 07/06/2021 07:20, Chun-Jie Chen wrote:
> > > > > On Wed, 2021-06-02 at 12:12 -0500, Rob Herring wrote:
> > > > > > > +
> > > > > > > +description:
> > > > > > > +  The Mediatek imp i2c wrapper controller provides
> > > > > > > functional
> > > > > > > configurations and clocks to the system.
> > > > > > > +
> > > > > > > +properties:
> > > > > > > +  compatible:
> > > > > > > +    items:
> > > > > > > +      - enum:
> > > > > > > +          - mediatek,mt8192-imp_iic_wrap_c
> > > > > > > +          - mediatek,mt8192-imp_iic_wrap_e
> > > > > > > +          - mediatek,mt8192-imp_iic_wrap_s
> > > > > > > +          - mediatek,mt8192-imp_iic_wrap_ws
> > > > > > > +          - mediatek,mt8192-imp_iic_wrap_w
> > > > > > > +          - mediatek,mt8192-imp_iic_wrap_n
> > > > > >
> > > > > > Looks to me like these are all the same h/w, but just have
> > > > > > differing
> > > > > > sets of clocks. That's not really a reason to have different
> > > > > > compatibles.
> > > > > >
> > > > > > If you need to know what clocks are present, you can walk the
> > > > > > DT for
> > > > > > all 'clocks' properties matching this clock controller
> > > > > > instance. Or
> > > > > > use
> > > > > > 'clock-indices' to define which ones are present.
> > >
> > > Is the idea to use clock-indices and then list all the clock ids in
> > > there and match them up at driver probe time to register the clocks
> > > provided by the IO region? Feels like we'll do a lot of parsing at
> > > each
> > > boot to match up structures and register clks with the clk
> > > framework.
> > >
> > > If it's like other SoCs then the clk id maps to a hard macro for a
> > > type
> > > of clk, and those hard macros have been glued together with other
> > > clks
> > > and then partitioned into different IO regions to make up a clock
> > > controller. Or maybe in this case, those clk hard macros have been
> > > scattered into each IP block like SPI, i2c, uart, etc. so that the
> > > clock
> > > controller doesn't really exist and merely the gates and rate
> > > control
> > > (mux/divider) for the clk that's clocking some particular IP block
> > > all
> > > live inside the IP wrapper. If it's this case then I hope there are
> > > a
> > > bunch of PLLs that are fixed rate so that the i2c clk doesn't have
> > > to go
> > > outside the wrapper to change frequency (of which there should be
> > > two
> > > "standard" frequencies anyway).
> > >
> > > > > >
> > > > > > Rob
> > > > >
> > > > > Some module is divided to sub-modules which are designed in
> > > > > different
> > > > > h/w blocks for different usage, and if we want to use the same
> > > > > compatible to present these h/w blocks, we need to move the
> > > > > clock data
> > > > > provided by these h/w blocks to dts, but we usually use
> > > > > different
> > > > > compatible to get the h/w blocks data in
> > > > > Mediatek's clock driver, so do you suggest to register clock
> > > > > provided
> > > > > by different h/w blocks using same compatible?
> > > > >
> > > >
> > > > The mapping of them is as following:
> > > > imp_iic_wrap_c:  11007000
> > > > imp_iic_wrap_e:  11cb1000
> > > > imp_iic_wrap_s:  11d03000
> > > > imp_iic_wrap_ws: 11d23000
> > > > imp_iic_wrap_w:  11e01000
> > > > imp_iic_wrap_n:  11f02000
> > > >
> > >
> > > Sure. What is their purpose though? Are they simply a bunch of
> > > different
> > > i2c clks?
> > >
> >
> > That would be need to be answered by MediaTek as I don't have access
> > to any
> > documentation.
> >
> > Regards,
> > Matthias
>
> We describe which clock controllers are exist in dts and
> get the clock data provided by clock controller in driver data
> by matching device compatible.
>
> The clock data contains several clocks which includes the clock index,
> parent clock source and the details of reg control inside the IP block
> of clock controller.
>
> In MT8192 platform, some IP block is divide to several sub-blocks and
> each sub-block provides clock control by itself.

Some more information:

Based on what I read in the datasheets, I'm guessing that MediaTek groups
the I2C controllers into several groups and places them in different parts
of the die. The suffix of imp_iic_wrap_XXX is likely pointing to the
placement of the group. And the imp_iic_wrap_XXX is what the name suggests
a wrapper around the group of I2C controllers. The wrapper contains clock
and reset controls, as well as other things that I can't make out.


ChenYu
Matthias Brugger June 18, 2021, 1:50 p.m. UTC | #8
On 18/06/2021 08:32, Chen-Yu Tsai wrote:
> On Wed, Jun 16, 2021 at 2:34 AM Chun-Jie Chen
> <chun-jie.chen@mediatek.com> wrote:
>>
>> On Fri, 2021-06-11 at 11:56 +0200, Matthias Brugger wrote:
>>>
>>> On 10/06/2021 19:41, Stephen Boyd wrote:
>>>> Quoting Matthias Brugger (2021-06-08 07:45:49)
>>>>>
>>>>>
>>>>> On 07/06/2021 07:20, Chun-Jie Chen wrote:
>>>>>> On Wed, 2021-06-02 at 12:12 -0500, Rob Herring wrote:
>>>>>>>> +
>>>>>>>> +description:
>>>>>>>> +  The Mediatek imp i2c wrapper controller provides
>>>>>>>> functional
>>>>>>>> configurations and clocks to the system.
>>>>>>>> +
>>>>>>>> +properties:
>>>>>>>> +  compatible:
>>>>>>>> +    items:
>>>>>>>> +      - enum:
>>>>>>>> +          - mediatek,mt8192-imp_iic_wrap_c
>>>>>>>> +          - mediatek,mt8192-imp_iic_wrap_e
>>>>>>>> +          - mediatek,mt8192-imp_iic_wrap_s
>>>>>>>> +          - mediatek,mt8192-imp_iic_wrap_ws
>>>>>>>> +          - mediatek,mt8192-imp_iic_wrap_w
>>>>>>>> +          - mediatek,mt8192-imp_iic_wrap_n
>>>>>>>
>>>>>>> Looks to me like these are all the same h/w, but just have
>>>>>>> differing
>>>>>>> sets of clocks. That's not really a reason to have different
>>>>>>> compatibles.
>>>>>>>
>>>>>>> If you need to know what clocks are present, you can walk the
>>>>>>> DT for
>>>>>>> all 'clocks' properties matching this clock controller
>>>>>>> instance. Or
>>>>>>> use
>>>>>>> 'clock-indices' to define which ones are present.
>>>>
>>>> Is the idea to use clock-indices and then list all the clock ids in
>>>> there and match them up at driver probe time to register the clocks
>>>> provided by the IO region? Feels like we'll do a lot of parsing at
>>>> each
>>>> boot to match up structures and register clks with the clk
>>>> framework.
>>>>
>>>> If it's like other SoCs then the clk id maps to a hard macro for a
>>>> type
>>>> of clk, and those hard macros have been glued together with other
>>>> clks
>>>> and then partitioned into different IO regions to make up a clock
>>>> controller. Or maybe in this case, those clk hard macros have been
>>>> scattered into each IP block like SPI, i2c, uart, etc. so that the
>>>> clock
>>>> controller doesn't really exist and merely the gates and rate
>>>> control
>>>> (mux/divider) for the clk that's clocking some particular IP block
>>>> all
>>>> live inside the IP wrapper. If it's this case then I hope there are
>>>> a
>>>> bunch of PLLs that are fixed rate so that the i2c clk doesn't have
>>>> to go
>>>> outside the wrapper to change frequency (of which there should be
>>>> two
>>>> "standard" frequencies anyway).
>>>>
>>>>>>>
>>>>>>> Rob
>>>>>>
>>>>>> Some module is divided to sub-modules which are designed in
>>>>>> different
>>>>>> h/w blocks for different usage, and if we want to use the same
>>>>>> compatible to present these h/w blocks, we need to move the
>>>>>> clock data
>>>>>> provided by these h/w blocks to dts, but we usually use
>>>>>> different
>>>>>> compatible to get the h/w blocks data in
>>>>>> Mediatek's clock driver, so do you suggest to register clock
>>>>>> provided
>>>>>> by different h/w blocks using same compatible?
>>>>>>
>>>>>
>>>>> The mapping of them is as following:
>>>>> imp_iic_wrap_c:  11007000
>>>>> imp_iic_wrap_e:  11cb1000
>>>>> imp_iic_wrap_s:  11d03000
>>>>> imp_iic_wrap_ws: 11d23000
>>>>> imp_iic_wrap_w:  11e01000
>>>>> imp_iic_wrap_n:  11f02000
>>>>>
>>>>
>>>> Sure. What is their purpose though? Are they simply a bunch of
>>>> different
>>>> i2c clks?
>>>>
>>>
>>> That would be need to be answered by MediaTek as I don't have access
>>> to any
>>> documentation.
>>>
>>> Regards,
>>> Matthias
>>
>> We describe which clock controllers are exist in dts and
>> get the clock data provided by clock controller in driver data
>> by matching device compatible.
>>
>> The clock data contains several clocks which includes the clock index,
>> parent clock source and the details of reg control inside the IP block
>> of clock controller.
>>
>> In MT8192 platform, some IP block is divide to several sub-blocks and
>> each sub-block provides clock control by itself.
> 
> Some more information:
> 
> Based on what I read in the datasheets, I'm guessing that MediaTek groups
> the I2C controllers into several groups and places them in different parts
> of the die. The suffix of imp_iic_wrap_XXX is likely pointing to the
> placement of the group. And the imp_iic_wrap_XXX is what the name suggests
> a wrapper around the group of I2C controllers. The wrapper contains clock
> and reset controls, as well as other things that I can't make out.
> 

Thanks for the clarification. If the wrapper contains more then just clocks,
then probably we will need a solution as done by MMSYS subsystem. Would be good
if you could work with MediaTek to find out what exactly this wrappers contain,
to get a better picture of if we need an additional driver or not.

Regards,
Matthias
Chun-Jie Chen June 28, 2021, 12:56 p.m. UTC | #9
On Fri, 2021-06-18 at 15:50 +0200, Matthias Brugger wrote:
> 
> On 18/06/2021 08:32, Chen-Yu Tsai wrote:
> > On Wed, Jun 16, 2021 at 2:34 AM Chun-Jie Chen
> > <chun-jie.chen@mediatek.com> wrote:
> > > 
> > > On Fri, 2021-06-11 at 11:56 +0200, Matthias Brugger wrote:
> > > > 
> > > > On 10/06/2021 19:41, Stephen Boyd wrote:
> > > > > Quoting Matthias Brugger (2021-06-08 07:45:49)
> > > > > > 
> > > > > > 
> > > > > > On 07/06/2021 07:20, Chun-Jie Chen wrote:
> > > > > > > On Wed, 2021-06-02 at 12:12 -0500, Rob Herring wrote:
> > > > > > > > > +
> > > > > > > > > +description:
> > > > > > > > > +  The Mediatek imp i2c wrapper controller provides
> > > > > > > > > functional
> > > > > > > > > configurations and clocks to the system.
> > > > > > > > > +
> > > > > > > > > +properties:
> > > > > > > > > +  compatible:
> > > > > > > > > +    items:
> > > > > > > > > +      - enum:
> > > > > > > > > +          - mediatek,mt8192-imp_iic_wrap_c
> > > > > > > > > +          - mediatek,mt8192-imp_iic_wrap_e
> > > > > > > > > +          - mediatek,mt8192-imp_iic_wrap_s
> > > > > > > > > +          - mediatek,mt8192-imp_iic_wrap_ws
> > > > > > > > > +          - mediatek,mt8192-imp_iic_wrap_w
> > > > > > > > > +          - mediatek,mt8192-imp_iic_wrap_n
> > > > > > > > 
> > > > > > > > Looks to me like these are all the same h/w, but just
> > > > > > > > have
> > > > > > > > differing
> > > > > > > > sets of clocks. That's not really a reason to have
> > > > > > > > different
> > > > > > > > compatibles.
> > > > > > > > 
> > > > > > > > If you need to know what clocks are present, you can
> > > > > > > > walk the
> > > > > > > > DT for
> > > > > > > > all 'clocks' properties matching this clock controller
> > > > > > > > instance. Or
> > > > > > > > use
> > > > > > > > 'clock-indices' to define which ones are present.
> > > > > 
> > > > > Is the idea to use clock-indices and then list all the clock
> > > > > ids in
> > > > > there and match them up at driver probe time to register the
> > > > > clocks
> > > > > provided by the IO region? Feels like we'll do a lot of
> > > > > parsing at
> > > > > each
> > > > > boot to match up structures and register clks with the clk
> > > > > framework.
> > > > > 
> > > > > If it's like other SoCs then the clk id maps to a hard macro
> > > > > for a
> > > > > type
> > > > > of clk, and those hard macros have been glued together with
> > > > > other
> > > > > clks
> > > > > and then partitioned into different IO regions to make up a
> > > > > clock
> > > > > controller. Or maybe in this case, those clk hard macros have
> > > > > been
> > > > > scattered into each IP block like SPI, i2c, uart, etc. so
> > > > > that the
> > > > > clock
> > > > > controller doesn't really exist and merely the gates and rate
> > > > > control
> > > > > (mux/divider) for the clk that's clocking some particular IP
> > > > > block
> > > > > all
> > > > > live inside the IP wrapper. If it's this case then I hope
> > > > > there are
> > > > > a
> > > > > bunch of PLLs that are fixed rate so that the i2c clk doesn't
> > > > > have
> > > > > to go
> > > > > outside the wrapper to change frequency (of which there
> > > > > should be
> > > > > two
> > > > > "standard" frequencies anyway).
> > > > > 
> > > > > > > > 
> > > > > > > > Rob
> > > > > > > 
> > > > > > > Some module is divided to sub-modules which are designed
> > > > > > > in
> > > > > > > different
> > > > > > > h/w blocks for different usage, and if we want to use the
> > > > > > > same
> > > > > > > compatible to present these h/w blocks, we need to move
> > > > > > > the
> > > > > > > clock data
> > > > > > > provided by these h/w blocks to dts, but we usually use
> > > > > > > different
> > > > > > > compatible to get the h/w blocks data in
> > > > > > > Mediatek's clock driver, so do you suggest to register
> > > > > > > clock
> > > > > > > provided
> > > > > > > by different h/w blocks using same compatible?
> > > > > > > 
> > > > > > 
> > > > > > The mapping of them is as following:
> > > > > > imp_iic_wrap_c:  11007000
> > > > > > imp_iic_wrap_e:  11cb1000
> > > > > > imp_iic_wrap_s:  11d03000
> > > > > > imp_iic_wrap_ws: 11d23000
> > > > > > imp_iic_wrap_w:  11e01000
> > > > > > imp_iic_wrap_n:  11f02000
> > > > > > 
> > > > > 
> > > > > Sure. What is their purpose though? Are they simply a bunch
> > > > > of
> > > > > different
> > > > > i2c clks?
> > > > > 
> > > > 
> > > > That would be need to be answered by MediaTek as I don't have
> > > > access
> > > > to any
> > > > documentation.
> > > > 
> > > > Regards,
> > > > Matthias
> > > 
> > > We describe which clock controllers are exist in dts and
> > > get the clock data provided by clock controller in driver data
> > > by matching device compatible.
> > > 
> > > The clock data contains several clocks which includes the clock
> > > index,
> > > parent clock source and the details of reg control inside the IP
> > > block
> > > of clock controller.
> > > 
> > > In MT8192 platform, some IP block is divide to several sub-blocks 
> > > and
> > > each sub-block provides clock control by itself.
> > 
> > Some more information:
> > 
> > Based on what I read in the datasheets, I'm guessing that MediaTek
> > groups
> > the I2C controllers into several groups and places them in
> > different parts
> > of the die. The suffix of imp_iic_wrap_XXX is likely pointing to
> > the
> > placement of the group. And the imp_iic_wrap_XXX is what the name
> > suggests
> > a wrapper around the group of I2C controllers. The wrapper contains
> > clock
> > and reset controls, as well as other things that I can't make out.
> > 
> 
> Thanks for the clarification. If the wrapper contains more then just
> clocks,
> then probably we will need a solution as done by MMSYS subsystem.
> Would be good
> if you could work with MediaTek to find out what exactly this
> wrappers contain,
> to get a better picture of if we need an additional driver or not.
> 
> Regards,
> Matthias

+ Kewei

Hi Matthias,

After discuss with i2c owenr(Kewei) in mediatek, although the HW block
of imp_iic_wrap_XXX contains more than just clock, but we only use the
clock part in this HW block and just consider that imp_iic_wrap_XXX is
a pure clock provider.

Thanks!
Best Regards,
Chun-Jie
diff mbox series

Patch

diff --git a/Documentation/devicetree/bindings/arm/mediatek/mediatek,imp_iic_wrap.yaml b/Documentation/devicetree/bindings/arm/mediatek/mediatek,imp_iic_wrap.yaml
new file mode 100644
index 000000000000..fb6cb9e60ee2
--- /dev/null
+++ b/Documentation/devicetree/bindings/arm/mediatek/mediatek,imp_iic_wrap.yaml
@@ -0,0 +1,80 @@ 
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/arm/mediatek/mediatek,imp_iic_wrap.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: MediaTek IMP I2C Wrapper Controller
+
+maintainers:
+  - Chun-Jie Chen <chun-jie.chen@mediatek.com>
+
+description:
+  The Mediatek imp i2c wrapper controller provides functional configurations and clocks to the system.
+
+properties:
+  compatible:
+    items:
+      - enum:
+          - mediatek,mt8192-imp_iic_wrap_c
+          - mediatek,mt8192-imp_iic_wrap_e
+          - mediatek,mt8192-imp_iic_wrap_s
+          - mediatek,mt8192-imp_iic_wrap_ws
+          - mediatek,mt8192-imp_iic_wrap_w
+          - mediatek,mt8192-imp_iic_wrap_n
+      - const: syscon
+
+  reg:
+    maxItems: 1
+
+  '#clock-cells':
+    const: 1
+
+required:
+  - compatible
+  - reg
+
+additionalProperties: false
+
+examples:
+  - |
+    imp_iic_wrap_c: syscon@11007000 {
+        compatible = "mediatek,mt8192-imp_iic_wrap_c", "syscon";
+        reg = <0x11007000 0x1000>;
+        #clock-cells = <1>;
+    };
+
+  - |
+    imp_iic_wrap_e: syscon@11cb1000 {
+        compatible = "mediatek,mt8192-imp_iic_wrap_e", "syscon";
+        reg = <0x11cb1000 0x1000>;
+        #clock-cells = <1>;
+    };
+
+  - |
+    imp_iic_wrap_s: syscon@11d03000 {
+        compatible = "mediatek,mt8192-imp_iic_wrap_s", "syscon";
+        reg = <0x11d03000 0x1000>;
+        #clock-cells = <1>;
+    };
+
+  - |
+    imp_iic_wrap_ws: syscon@11d23000 {
+        compatible = "mediatek,mt8192-imp_iic_wrap_ws", "syscon";
+        reg = <0x11d23000 0x1000>;
+        #clock-cells = <1>;
+    };
+
+  - |
+    imp_iic_wrap_w: syscon@11e01000 {
+        compatible = "mediatek,mt8192-imp_iic_wrap_w", "syscon";
+        reg = <0x11e01000 0x1000>;
+        #clock-cells = <1>;
+    };
+
+  - |
+    imp_iic_wrap_n: syscon@11f02000 {
+        compatible = "mediatek,mt8192-imp_iic_wrap_n", "syscon";
+        reg = <0x11f02000 0x1000>;
+        #clock-cells = <1>;
+    };