diff mbox series

[v1,2/2] riscv: dts: starfive: add the missing monitor core

Message ID 20220711184325.1367393-3-mail@conchuod.ie (mailing list archive)
State New, archived
Headers show
Series Add the JH7100's Monitor Core | expand

Commit Message

Conor Dooley July 11, 2022, 6:43 p.m. UTC
From: Conor Dooley <conor.dooley@microchip.com>

The JH7100 has a 32 bit monitor core that is missing from the device
tree. Add it (and its cpu-map entry) to more accurately reflect the
actual topology of the SoC.

Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
---
 arch/riscv/boot/dts/starfive/jh7100.dtsi | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

Comments

Emil Renner Berthing July 12, 2022, 10:06 a.m. UTC | #1
On Mon, 11 Jul 2022 at 20:44, Conor Dooley <mail@conchuod.ie> wrote:
>
> From: Conor Dooley <conor.dooley@microchip.com>
>
> The JH7100 has a 32 bit monitor core that is missing from the device
> tree. Add it (and its cpu-map entry) to more accurately reflect the
> actual topology of the SoC.
>
> Signed-off-by: Conor Dooley <conor.dooley@microchip.com>

Reviewed-by: Emil Renner Berthing <emil.renner.berthing@canonical.com>

Thanks!
/Emil
> ---
>  arch/riscv/boot/dts/starfive/jh7100.dtsi | 21 +++++++++++++++++++++
>  1 file changed, 21 insertions(+)
>
> diff --git a/arch/riscv/boot/dts/starfive/jh7100.dtsi b/arch/riscv/boot/dts/starfive/jh7100.dtsi
> index c617a61e26e2..92fce5b66d3d 100644
> --- a/arch/riscv/boot/dts/starfive/jh7100.dtsi
> +++ b/arch/riscv/boot/dts/starfive/jh7100.dtsi
> @@ -67,6 +67,23 @@ cpu1_intc: interrupt-controller {
>                         };
>                 };
>
> +               E24: cpu@2 {
> +                       compatible = "sifive,e24", "riscv";
> +                       reg = <2>;
> +                       device_type = "cpu";
> +                       i-cache-block-size = <32>;
> +                       i-cache-sets = <256>;
> +                       i-cache-size = <16384>;
> +                       riscv,isa = "rv32imafc";
> +                       status = "disabled";
> +
> +                       cpu2_intc: interrupt-controller {
> +                               compatible = "riscv,cpu-intc";
> +                               interrupt-controller;
> +                               #interrupt-cells = <1>;
> +                       };
> +               };
> +
>                 cpu-map {
>                         cluster0 {
>                                 core0 {
> @@ -76,6 +93,10 @@ core0 {
>                                 core1 {
>                                         cpu = <&U74_1>;
>                                 };
> +
> +                               core2 {
> +                                       cpu = <&E24>;
> +                               };
>                         };
>                 };
>         };
> --
> 2.37.0
>
Icenowy Zheng July 13, 2022, 2:26 p.m. UTC | #2
在 2022-07-11星期一的 19:43 +0100,Conor Dooley写道:
> From: Conor Dooley <conor.dooley@microchip.com>
> 
> The JH7100 has a 32 bit monitor core that is missing from the device
> tree. Add it (and its cpu-map entry) to more accurately reflect the
> actual topology of the SoC.
> 
> Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
> ---
>  arch/riscv/boot/dts/starfive/jh7100.dtsi | 21 +++++++++++++++++++++
>  1 file changed, 21 insertions(+)
> 
> diff --git a/arch/riscv/boot/dts/starfive/jh7100.dtsi
> b/arch/riscv/boot/dts/starfive/jh7100.dtsi
> index c617a61e26e2..92fce5b66d3d 100644
> --- a/arch/riscv/boot/dts/starfive/jh7100.dtsi
> +++ b/arch/riscv/boot/dts/starfive/jh7100.dtsi
> @@ -67,6 +67,23 @@ cpu1_intc: interrupt-controller {
>                         };
>                 };
>  
> +               E24: cpu@2 {
> +                       compatible = "sifive,e24", "riscv";
> +                       reg = <2>;
> +                       device_type = "cpu";
> +                       i-cache-block-size = <32>;
> +                       i-cache-sets = <256>;
> +                       i-cache-size = <16384>;
> +                       riscv,isa = "rv32imafc";
> +                       status = "disabled";
> +
> +                       cpu2_intc: interrupt-controller {
> +                               compatible = "riscv,cpu-intc";
> +                               interrupt-controller;
> +                               #interrupt-cells = <1>;
> +                       };
> +               };
> +
>                 cpu-map {
>                         cluster0 {
>                                 core0 {
> @@ -76,6 +93,10 @@ core0 {
>                                 core1 {
>                                         cpu = <&U74_1>;
>                                 };
> +
> +                               core2 {
> +                                       cpu = <&E24>;
> +                               };

Sorry but I think this change makes the topology more inaccurate.

The E24 core is very independent, just another CPU core connected the
same bus -- even no coherency (E24 takes AHB, which is not coherency-
sensible). Even the TAP of it is independent with the U74 TAP.

And by default it does not boot any proper code (if a debugger is
attached, it will discover that the E24 is in consistently fault at 0x0
(mtvec is 0x0 and when fault it jumps to 0x0 and fault again), until
its clock is just shutdown by Linux cleaning up unused clocks.)

Personally I think it should be implemented as a remoteproc instead.

>                         };
>                 };
>         };
Conor Dooley July 13, 2022, 2:55 p.m. UTC | #3
On 13/07/2022 15:26, Icenowy Zheng wrote:
> 
> 在 2022-07-11星期一的 19:43 +0100,Conor Dooley写道:
>> From: Conor Dooley <conor.dooley@microchip.com>
>>
>> The JH7100 has a 32 bit monitor core that is missing from the device
>> tree. Add it (and its cpu-map entry) to more accurately reflect the
>> actual topology of the SoC.
>>
>> Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
>> ---
>>  arch/riscv/boot/dts/starfive/jh7100.dtsi | 21 +++++++++++++++++++++
>>  1 file changed, 21 insertions(+)
>>
>> diff --git a/arch/riscv/boot/dts/starfive/jh7100.dtsi
>> b/arch/riscv/boot/dts/starfive/jh7100.dtsi
>> index c617a61e26e2..92fce5b66d3d 100644
>> --- a/arch/riscv/boot/dts/starfive/jh7100.dtsi
>> +++ b/arch/riscv/boot/dts/starfive/jh7100.dtsi
>> @@ -67,6 +67,23 @@ cpu1_intc: interrupt-controller {
>>                         };
>>                 };
>>
>> +               E24: cpu@2 {
>> +                       compatible = "sifive,e24", "riscv";
>> +                       reg = <2>;
>> +                       device_type = "cpu";
>> +                       i-cache-block-size = <32>;
>> +                       i-cache-sets = <256>;
>> +                       i-cache-size = <16384>;
>> +                       riscv,isa = "rv32imafc";
>> +                       status = "disabled";
>> +
>> +                       cpu2_intc: interrupt-controller {
>> +                               compatible = "riscv,cpu-intc";
>> +                               interrupt-controller;
>> +                               #interrupt-cells = <1>;
>> +                       };
>> +               };
>> +
>>                 cpu-map {
>>                         cluster0 {
>>                                 core0 {
>> @@ -76,6 +93,10 @@ core0 {
>>                                 core1 {
>>                                         cpu = <&U74_1>;
>>                                 };
>> +
>> +                               core2 {
>> +                                       cpu = <&E24>;
>> +                               };
> 
> Sorry but I think this change makes the topology more inaccurate.
> 
> The E24 core is very independent, just another CPU core connected the
> same bus -- even no coherency (E24 takes AHB, which is not coherency-
> sensible). Even the TAP of it is independent with the U74 TAP.
> 
> And by default it does not boot any proper code (if a debugger is
> attached, it will discover that the E24 is in consistently fault at 0x0
> (mtvec is 0x0 and when fault it jumps to 0x0 and fault again), until
> its clock is just shutdown by Linux cleaning up unused clocks.)
> 
> Personally I think it should be implemented as a remoteproc instead.

Maybe I am missing something, but I don't quite get what the detail
of how we access this in code has to do with the devicetree?
It is added here in a disabled state, and will not be used by Linux.
The various SiFive SoCs & SiFive corecomplex users that have a hart
not capable of running Linux also have that hart documented in the
devicetree.
To me, what we are choosing to do with this hart does not really
matter very much, since this is a description of what the hardware
actually looks like.

Thanks,
Conor.
Icenowy Zheng July 13, 2022, 3:02 p.m. UTC | #4
在 2022-07-13星期三的 14:55 +0000,Conor.Dooley@microchip.com写道:
> On 13/07/2022 15:26, Icenowy Zheng wrote:
> > 
> > 在 2022-07-11星期一的 19:43 +0100,Conor Dooley写道:
> > > From: Conor Dooley <conor.dooley@microchip.com>
> > > 
> > > The JH7100 has a 32 bit monitor core that is missing from the
> > > device
> > > tree. Add it (and its cpu-map entry) to more accurately reflect
> > > the
> > > actual topology of the SoC.
> > > 
> > > Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
> > > ---
> > >  arch/riscv/boot/dts/starfive/jh7100.dtsi | 21
> > > +++++++++++++++++++++
> > >  1 file changed, 21 insertions(+)
> > > 
> > > diff --git a/arch/riscv/boot/dts/starfive/jh7100.dtsi
> > > b/arch/riscv/boot/dts/starfive/jh7100.dtsi
> > > index c617a61e26e2..92fce5b66d3d 100644
> > > --- a/arch/riscv/boot/dts/starfive/jh7100.dtsi
> > > +++ b/arch/riscv/boot/dts/starfive/jh7100.dtsi
> > > @@ -67,6 +67,23 @@ cpu1_intc: interrupt-controller {
> > >                         };
> > >                 };
> > > 
> > > +               E24: cpu@2 {
> > > +                       compatible = "sifive,e24", "riscv";
> > > +                       reg = <2>;
> > > +                       device_type = "cpu";
> > > +                       i-cache-block-size = <32>;
> > > +                       i-cache-sets = <256>;
> > > +                       i-cache-size = <16384>;
> > > +                       riscv,isa = "rv32imafc";
> > > +                       status = "disabled";
> > > +
> > > +                       cpu2_intc: interrupt-controller {
> > > +                               compatible = "riscv,cpu-intc";
> > > +                               interrupt-controller;
> > > +                               #interrupt-cells = <1>;
> > > +                       };
> > > +               };
> > > +
> > >                 cpu-map {
> > >                         cluster0 {
> > >                                 core0 {
> > > @@ -76,6 +93,10 @@ core0 {
> > >                                 core1 {
> > >                                         cpu = <&U74_1>;
> > >                                 };
> > > +
> > > +                               core2 {
> > > +                                       cpu = <&E24>;
> > > +                               };
> > 
> > Sorry but I think this change makes the topology more inaccurate.
> > 
> > The E24 core is very independent, just another CPU core connected
> > the
> > same bus -- even no coherency (E24 takes AHB, which is not
> > coherency-
> > sensible). Even the TAP of it is independent with the U74 TAP.
> > 
> > And by default it does not boot any proper code (if a debugger is
> > attached, it will discover that the E24 is in consistently fault at
> > 0x0
> > (mtvec is 0x0 and when fault it jumps to 0x0 and fault again),
> > until
> > its clock is just shutdown by Linux cleaning up unused clocks.)
> > 
> > Personally I think it should be implemented as a remoteproc
> > instead.
> 
> Maybe I am missing something, but I don't quite get what the detail
> of how we access this in code has to do with the devicetree?
> It is added here in a disabled state, and will not be used by Linux.
> The various SiFive SoCs & SiFive corecomplex users that have a hart
> not capable of running Linux also have that hart documented in the
> devicetree.
> To me, what we are choosing to do with this hart does not really
> matter very much, since this is a description of what the hardware
> actually looks like.

The E24 is not in the core complex at all. It's just a dedicate CPU
connected to another bus (well as I saw the document says the E24 bus
is maximum 2G, I doubt whether it's the same bus with the U74 one).

The U74 MC only allows S5 management cores to be part of it, not E24.

BTW I don't think a core complex can have multiple TAPs for multiple
harts, but E24 has its own TAP.

> 
> Thanks,
> Conor.
>
Conor Dooley July 13, 2022, 3:09 p.m. UTC | #5
On 13/07/2022 16:02, Icenowy Zheng wrote:
> 在 2022-07-13星期三的 14:55 +0000,Conor.Dooley@microchip.com写道:
>> On 13/07/2022 15:26, Icenowy Zheng wrote:
>>>
>>> 在 2022-07-11星期一的 19:43 +0100,Conor Dooley写道:
>>>> From: Conor Dooley <conor.dooley@microchip.com>
>>>>
>>>> The JH7100 has a 32 bit monitor core that is missing from the
>>>> device
>>>> tree. Add it (and its cpu-map entry) to more accurately reflect
>>>> the
>>>> actual topology of the SoC.
>>>>
>>>> Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
>>>> ---
>>>>  arch/riscv/boot/dts/starfive/jh7100.dtsi | 21
>>>> +++++++++++++++++++++
>>>>  1 file changed, 21 insertions(+)
>>>>
>>>> diff --git a/arch/riscv/boot/dts/starfive/jh7100.dtsi
>>>> b/arch/riscv/boot/dts/starfive/jh7100.dtsi
>>>> index c617a61e26e2..92fce5b66d3d 100644
>>>> --- a/arch/riscv/boot/dts/starfive/jh7100.dtsi
>>>> +++ b/arch/riscv/boot/dts/starfive/jh7100.dtsi
>>>> @@ -67,6 +67,23 @@ cpu1_intc: interrupt-controller {
>>>>                         };
>>>>                 };
>>>>
>>>> +               E24: cpu@2 {
>>>> +                       compatible = "sifive,e24", "riscv";
>>>> +                       reg = <2>;
>>>> +                       device_type = "cpu";
>>>> +                       i-cache-block-size = <32>;
>>>> +                       i-cache-sets = <256>;
>>>> +                       i-cache-size = <16384>;
>>>> +                       riscv,isa = "rv32imafc";
>>>> +                       status = "disabled";
>>>> +
>>>> +                       cpu2_intc: interrupt-controller {
>>>> +                               compatible = "riscv,cpu-intc";
>>>> +                               interrupt-controller;
>>>> +                               #interrupt-cells = <1>;
>>>> +                       };
>>>> +               };
>>>> +
>>>>                 cpu-map {
>>>>                         cluster0 {
>>>>                                 core0 {
>>>> @@ -76,6 +93,10 @@ core0 {
>>>>                                 core1 {
>>>>                                         cpu = <&U74_1>;
>>>>                                 };
>>>> +
>>>> +                               core2 {
>>>> +                                       cpu = <&E24>;
>>>> +                               };
>>>
>>> Sorry but I think this change makes the topology more inaccurate.
>>>
>>> The E24 core is very independent, just another CPU core connected
>>> the
>>> same bus -- even no coherency (E24 takes AHB, which is not
>>> coherency-
>>> sensible). Even the TAP of it is independent with the U74 TAP.
>>>
>>> And by default it does not boot any proper code (if a debugger is
>>> attached, it will discover that the E24 is in consistently fault at
>>> 0x0
>>> (mtvec is 0x0 and when fault it jumps to 0x0 and fault again),
>>> until
>>> its clock is just shutdown by Linux cleaning up unused clocks.)
>>>
>>> Personally I think it should be implemented as a remoteproc
>>> instead.
>>
>> Maybe I am missing something, but I don't quite get what the detail
>> of how we access this in code has to do with the devicetree?
>> It is added here in a disabled state, and will not be used by Linux.
>> The various SiFive SoCs & SiFive corecomplex users that have a hart
>> not capable of running Linux also have that hart documented in the
>> devicetree.
>> To me, what we are choosing to do with this hart does not really
>> matter very much, since this is a description of what the hardware
>> actually looks like.
> 
> The E24 is not in the core complex at all. It's just a dedicate CPU
> connected to another bus (well as I saw the document says the E24 bus
> is maximum 2G, I doubt whether it's the same bus with the U74 one).
> 
> The U74 MC only allows S5 management cores to be part of it, not E24.

So is the correct topology more like:
cpu-map {
        cluster0 {
                core0 {
                        cpu = <&U74_0>;
                };
                core1 {
                        cpu = <&U74_1>;
                };
        };
        cluster1 {
                core0 {
                        cpu = <&E24>;
                };
        };
};
Icenowy Zheng July 13, 2022, 3:12 p.m. UTC | #6
在 2022-07-13星期三的 15:09 +0000,Conor.Dooley@microchip.com写道:
> 
> 
> On 13/07/2022 16:02, Icenowy Zheng wrote:
> > 在 2022-07-13星期三的 14:55 +0000,Conor.Dooley@microchip.com写道:
> > > On 13/07/2022 15:26, Icenowy Zheng wrote:
> > > > 
> > > > 在 2022-07-11星期一的 19:43 +0100,Conor Dooley写道:
> > > > > From: Conor Dooley <conor.dooley@microchip.com>
> > > > > 
> > > > > The JH7100 has a 32 bit monitor core that is missing from the
> > > > > device
> > > > > tree. Add it (and its cpu-map entry) to more accurately
> > > > > reflect
> > > > > the
> > > > > actual topology of the SoC.
> > > > > 
> > > > > Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
> > > > > ---
> > > > >  arch/riscv/boot/dts/starfive/jh7100.dtsi | 21
> > > > > +++++++++++++++++++++
> > > > >  1 file changed, 21 insertions(+)
> > > > > 
> > > > > diff --git a/arch/riscv/boot/dts/starfive/jh7100.dtsi
> > > > > b/arch/riscv/boot/dts/starfive/jh7100.dtsi
> > > > > index c617a61e26e2..92fce5b66d3d 100644
> > > > > --- a/arch/riscv/boot/dts/starfive/jh7100.dtsi
> > > > > +++ b/arch/riscv/boot/dts/starfive/jh7100.dtsi
> > > > > @@ -67,6 +67,23 @@ cpu1_intc: interrupt-controller {
> > > > >                         };
> > > > >                 };
> > > > > 
> > > > > +               E24: cpu@2 {
> > > > > +                       compatible = "sifive,e24", "riscv";
> > > > > +                       reg = <2>;
> > > > > +                       device_type = "cpu";
> > > > > +                       i-cache-block-size = <32>;
> > > > > +                       i-cache-sets = <256>;
> > > > > +                       i-cache-size = <16384>;
> > > > > +                       riscv,isa = "rv32imafc";
> > > > > +                       status = "disabled";
> > > > > +
> > > > > +                       cpu2_intc: interrupt-controller {
> > > > > +                               compatible = "riscv,cpu-
> > > > > intc";
> > > > > +                               interrupt-controller;
> > > > > +                               #interrupt-cells = <1>;
> > > > > +                       };
> > > > > +               };
> > > > > +
> > > > >                 cpu-map {
> > > > >                         cluster0 {
> > > > >                                 core0 {
> > > > > @@ -76,6 +93,10 @@ core0 {
> > > > >                                 core1 {
> > > > >                                         cpu = <&U74_1>;
> > > > >                                 };
> > > > > +
> > > > > +                               core2 {
> > > > > +                                       cpu = <&E24>;
> > > > > +                               };
> > > > 
> > > > Sorry but I think this change makes the topology more
> > > > inaccurate.
> > > > 
> > > > The E24 core is very independent, just another CPU core
> > > > connected
> > > > the
> > > > same bus -- even no coherency (E24 takes AHB, which is not
> > > > coherency-
> > > > sensible). Even the TAP of it is independent with the U74 TAP.
> > > > 
> > > > And by default it does not boot any proper code (if a debugger
> > > > is
> > > > attached, it will discover that the E24 is in consistently
> > > > fault at
> > > > 0x0
> > > > (mtvec is 0x0 and when fault it jumps to 0x0 and fault again),
> > > > until
> > > > its clock is just shutdown by Linux cleaning up unused clocks.)
> > > > 
> > > > Personally I think it should be implemented as a remoteproc
> > > > instead.
> > > 
> > > Maybe I am missing something, but I don't quite get what the
> > > detail
> > > of how we access this in code has to do with the devicetree?
> > > It is added here in a disabled state, and will not be used by
> > > Linux.
> > > The various SiFive SoCs & SiFive corecomplex users that have a
> > > hart
> > > not capable of running Linux also have that hart documented in
> > > the
> > > devicetree.
> > > To me, what we are choosing to do with this hart does not really
> > > matter very much, since this is a description of what the
> > > hardware
> > > actually looks like.
> > 
> > The E24 is not in the core complex at all. It's just a dedicate CPU
> > connected to another bus (well as I saw the document says the E24
> > bus
> > is maximum 2G, I doubt whether it's the same bus with the U74 one).
> > 
> > The U74 MC only allows S5 management cores to be part of it, not
> > E24.
> 
> So is the correct topology more like:
> cpu-map {
>         cluster0 {
>                 core0 {
>                         cpu = <&U74_0>;
>                 };
>                 core1 {
>                         cpu = <&U74_1>;
>                 };
>         };
>         cluster1 {
>                 core0 {
>                         cpu = <&E24>;
>                 };
>         };
> };

Considering E24 seems to see a total different bus connected to it, I
don't think it even proper to add it to cpus node.

And I don't think it has a hart id of 2, as your node describes.

>
Icenowy Zheng July 13, 2022, 3:15 p.m. UTC | #7
在 2022-07-11星期一的 19:43 +0100,Conor Dooley写道:
> From: Conor Dooley <conor.dooley@microchip.com>
> 
> The JH7100 has a 32 bit monitor core that is missing from the device
> tree. Add it (and its cpu-map entry) to more accurately reflect the
> actual topology of the SoC.
> 
> Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
> ---
>  arch/riscv/boot/dts/starfive/jh7100.dtsi | 21 +++++++++++++++++++++
>  1 file changed, 21 insertions(+)
> 
> diff --git a/arch/riscv/boot/dts/starfive/jh7100.dtsi
> b/arch/riscv/boot/dts/starfive/jh7100.dtsi
> index c617a61e26e2..92fce5b66d3d 100644
> --- a/arch/riscv/boot/dts/starfive/jh7100.dtsi
> +++ b/arch/riscv/boot/dts/starfive/jh7100.dtsi
> @@ -67,6 +67,23 @@ cpu1_intc: interrupt-controller {
>                         };
>                 };
>  
> +               E24: cpu@2 {
> +                       compatible = "sifive,e24", "riscv";

Oh, by the way "sifive,e24" is not a documented compatible in the DT
binding.

If you really want to add it here, you need to add the compatible
string to the DT binding first.

> +                       reg = <2>;
> +                       device_type = "cpu";
> +                       i-cache-block-size = <32>;
> +                       i-cache-sets = <256>;
> +                       i-cache-size = <16384>;
> +                       riscv,isa = "rv32imafc";
> +                       status = "disabled";
> +
> +                       cpu2_intc: interrupt-controller {
> +                               compatible = "riscv,cpu-intc";
> +                               interrupt-controller;
> +                               #interrupt-cells = <1>;
> +                       };
> +               };
> +
>                 cpu-map {
>                         cluster0 {
>                                 core0 {
> @@ -76,6 +93,10 @@ core0 {
>                                 core1 {
>                                         cpu = <&U74_1>;
>                                 };
> +
> +                               core2 {
> +                                       cpu = <&E24>;
> +                               };
>                         };
>                 };
>         };
Conor Dooley July 13, 2022, 3:16 p.m. UTC | #8
On 13/07/2022 16:15, Icenowy Zheng wrote:
> 在 2022-07-11星期一的 19:43 +0100,Conor Dooley写道:
>> From: Conor Dooley <conor.dooley@microchip.com>
>>
>> The JH7100 has a 32 bit monitor core that is missing from the device
>> tree. Add it (and its cpu-map entry) to more accurately reflect the
>> actual topology of the SoC.
>>
>> Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
>> ---
>>  arch/riscv/boot/dts/starfive/jh7100.dtsi | 21 +++++++++++++++++++++
>>  1 file changed, 21 insertions(+)
>>
>> diff --git a/arch/riscv/boot/dts/starfive/jh7100.dtsi
>> b/arch/riscv/boot/dts/starfive/jh7100.dtsi
>> index c617a61e26e2..92fce5b66d3d 100644
>> --- a/arch/riscv/boot/dts/starfive/jh7100.dtsi
>> +++ b/arch/riscv/boot/dts/starfive/jh7100.dtsi
>> @@ -67,6 +67,23 @@ cpu1_intc: interrupt-controller {
>>                         };
>>                 };
>>  
>> +               E24: cpu@2 {
>> +                       compatible = "sifive,e24", "riscv";
> 
> Oh, by the way "sifive,e24" is not a documented compatible in the DT
> binding.
> 
> If you really want to add it here, you need to add the compatible
> string to the DT binding first.

Check patch 1/2.

> 
>> +                       reg = <2>;
>> +                       device_type = "cpu";
>> +                       i-cache-block-size = <32>;
>> +                       i-cache-sets = <256>;
>> +                       i-cache-size = <16384>;
>> +                       riscv,isa = "rv32imafc";
>> +                       status = "disabled";
>> +
>> +                       cpu2_intc: interrupt-controller {
>> +                               compatible = "riscv,cpu-intc";
>> +                               interrupt-controller;
>> +                               #interrupt-cells = <1>;
>> +                       };
>> +               };
>> +
>>                 cpu-map {
>>                         cluster0 {
>>                                 core0 {
>> @@ -76,6 +93,10 @@ core0 {
>>                                 core1 {
>>                                         cpu = <&U74_1>;
>>                                 };
>> +
>> +                               core2 {
>> +                                       cpu = <&E24>;
>> +                               };
>>                         };
>>                 };
>>         };
> 
>
Icenowy Zheng July 13, 2022, 3:20 p.m. UTC | #9
在 2022-07-13星期三的 15:16 +0000,Conor.Dooley@microchip.com写道:
> On 13/07/2022 16:15, Icenowy Zheng wrote:
> > 在 2022-07-11星期一的 19:43 +0100,Conor Dooley写道:
> > > From: Conor Dooley <conor.dooley@microchip.com>
> > > 
> > > The JH7100 has a 32 bit monitor core that is missing from the
> > > device
> > > tree. Add it (and its cpu-map entry) to more accurately reflect
> > > the
> > > actual topology of the SoC.
> > > 
> > > Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
> > > ---
> > >  arch/riscv/boot/dts/starfive/jh7100.dtsi | 21
> > > +++++++++++++++++++++
> > >  1 file changed, 21 insertions(+)
> > > 
> > > diff --git a/arch/riscv/boot/dts/starfive/jh7100.dtsi
> > > b/arch/riscv/boot/dts/starfive/jh7100.dtsi
> > > index c617a61e26e2..92fce5b66d3d 100644
> > > --- a/arch/riscv/boot/dts/starfive/jh7100.dtsi
> > > +++ b/arch/riscv/boot/dts/starfive/jh7100.dtsi
> > > @@ -67,6 +67,23 @@ cpu1_intc: interrupt-controller {
> > >                         };
> > >                 };
> > >  
> > > +               E24: cpu@2 {
> > > +                       compatible = "sifive,e24", "riscv";
> > 
> > Oh, by the way "sifive,e24" is not a documented compatible in the
> > DT
> > binding.
> > 
> > If you really want to add it here, you need to add the compatible
> > string to the DT binding first.
> 
> Check patch 1/2.

Oh sorry I forgot this.

Nevermind.

> 
> > 
> > > +                       reg = <2>;
> > > +                       device_type = "cpu";
> > > +                       i-cache-block-size = <32>;
> > > +                       i-cache-sets = <256>;
> > > +                       i-cache-size = <16384>;
> > > +                       riscv,isa = "rv32imafc";
> > > +                       status = "disabled";
> > > +
> > > +                       cpu2_intc: interrupt-controller {
> > > +                               compatible = "riscv,cpu-intc";
> > > +                               interrupt-controller;
> > > +                               #interrupt-cells = <1>;
> > > +                       };
> > > +               };
> > > +
> > >                 cpu-map {
> > >                         cluster0 {
> > >                                 core0 {
> > > @@ -76,6 +93,10 @@ core0 {
> > >                                 core1 {
> > >                                         cpu = <&U74_1>;
> > >                                 };
> > > +
> > > +                               core2 {
> > > +                                       cpu = <&E24>;
> > > +                               };
> > >                         };
> > >                 };
> > >         };
> > 
> >
Conor Dooley July 13, 2022, 3:21 p.m. UTC | #10
On 13/07/2022 16:12, Icenowy Zheng wrote:
> 在 2022-07-13星期三的 15:09 +0000,Conor.Dooley@microchip.com写道:
>>
>>
>> On 13/07/2022 16:02, Icenowy Zheng wrote:
>>> 在 2022-07-13星期三的 14:55 +0000,Conor.Dooley@microchip.com写道:
>>>> On 13/07/2022 15:26, Icenowy Zheng wrote:
>>>>>
>>>>> 在 2022-07-11星期一的 19:43 +0100,Conor Dooley写道:
>>>>>> From: Conor Dooley <conor.dooley@microchip.com>
>>>>>>
>>>>>> The JH7100 has a 32 bit monitor core that is missing from the
>>>>>> device
>>>>>> tree. Add it (and its cpu-map entry) to more accurately
>>>>>> reflect
>>>>>> the
>>>>>> actual topology of the SoC.
>>>>>>
>>>>>> Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
>>>>>> ---
>>>>>>  arch/riscv/boot/dts/starfive/jh7100.dtsi | 21
>>>>>> +++++++++++++++++++++
>>>>>>  1 file changed, 21 insertions(+)
>>>>>>
>>>>>> diff --git a/arch/riscv/boot/dts/starfive/jh7100.dtsi
>>>>>> b/arch/riscv/boot/dts/starfive/jh7100.dtsi
>>>>>> index c617a61e26e2..92fce5b66d3d 100644
>>>>>> --- a/arch/riscv/boot/dts/starfive/jh7100.dtsi
>>>>>> +++ b/arch/riscv/boot/dts/starfive/jh7100.dtsi
>>>>>> @@ -67,6 +67,23 @@ cpu1_intc: interrupt-controller {
>>>>>>                         };
>>>>>>                 };
>>>>>>
>>>>>> +               E24: cpu@2 {
>>>>>> +                       compatible = "sifive,e24", "riscv";
>>>>>> +                       reg = <2>;
>>>>>> +                       device_type = "cpu";
>>>>>> +                       i-cache-block-size = <32>;
>>>>>> +                       i-cache-sets = <256>;
>>>>>> +                       i-cache-size = <16384>;
>>>>>> +                       riscv,isa = "rv32imafc";
>>>>>> +                       status = "disabled";
>>>>>> +
>>>>>> +                       cpu2_intc: interrupt-controller {
>>>>>> +                               compatible = "riscv,cpu-
>>>>>> intc";
>>>>>> +                               interrupt-controller;
>>>>>> +                               #interrupt-cells = <1>;
>>>>>> +                       };
>>>>>> +               };
>>>>>> +
>>>>>>                 cpu-map {
>>>>>>                         cluster0 {
>>>>>>                                 core0 {
>>>>>> @@ -76,6 +93,10 @@ core0 {
>>>>>>                                 core1 {
>>>>>>                                         cpu = <&U74_1>;
>>>>>>                                 };
>>>>>> +
>>>>>> +                               core2 {
>>>>>> +                                       cpu = <&E24>;
>>>>>> +                               };
>>>>>
>>>>> Sorry but I think this change makes the topology more
>>>>> inaccurate.
>>>>>
>>>>> The E24 core is very independent, just another CPU core
>>>>> connected
>>>>> the
>>>>> same bus -- even no coherency (E24 takes AHB, which is not
>>>>> coherency-
>>>>> sensible). Even the TAP of it is independent with the U74 TAP.
>>>>>
>>>>> And by default it does not boot any proper code (if a debugger
>>>>> is
>>>>> attached, it will discover that the E24 is in consistently
>>>>> fault at
>>>>> 0x0
>>>>> (mtvec is 0x0 and when fault it jumps to 0x0 and fault again),
>>>>> until
>>>>> its clock is just shutdown by Linux cleaning up unused clocks.)
>>>>>
>>>>> Personally I think it should be implemented as a remoteproc
>>>>> instead.
>>>>
>>>> Maybe I am missing something, but I don't quite get what the
>>>> detail
>>>> of how we access this in code has to do with the devicetree?
>>>> It is added here in a disabled state, and will not be used by
>>>> Linux.
>>>> The various SiFive SoCs & SiFive corecomplex users that have a
>>>> hart
>>>> not capable of running Linux also have that hart documented in
>>>> the
>>>> devicetree.
>>>> To me, what we are choosing to do with this hart does not really
>>>> matter very much, since this is a description of what the
>>>> hardware
>>>> actually looks like.
>>>
>>> The E24 is not in the core complex at all. It's just a dedicate CPU
>>> connected to another bus (well as I saw the document says the E24
>>> bus
>>> is maximum 2G, I doubt whether it's the same bus with the U74 one).
>>>
>>> The U74 MC only allows S5 management cores to be part of it, not
>>> E24.
>>
>> So is the correct topology more like:
>> cpu-map {
>>         cluster0 {
>>                 core0 {
>>                         cpu = <&U74_0>;
>>                 };
>>                 core1 {
>>                         cpu = <&U74_1>;
>>                 };
>>         };
>>         cluster1 {
>>                 core0 {
>>                         cpu = <&E24>;
>>                 };
>>         };
>> };
> 
> Considering E24 seems to see a total different bus connected to it, I
> don't think it even proper to add it to cpus node.

Well, it is a CPU is it not? How one is supposed to document that a
CPU is not attached to the same buses I do not know however.

> 
> And I don't think it has a hart id of 2, as your node describes.

Do you have any idea what it would be then?
Icenowy Zheng July 13, 2022, 3:26 p.m. UTC | #11
在 2022-07-13星期三的 15:21 +0000,Conor.Dooley@microchip.com写道:
> On 13/07/2022 16:12, Icenowy Zheng wrote:
> > 在 2022-07-13星期三的 15:09 +0000,Conor.Dooley@microchip.com写道:
> > > 
> > > 
> > > On 13/07/2022 16:02, Icenowy Zheng wrote:
> > > > 在 2022-07-13星期三的 14:55 +0000,Conor.Dooley@microchip.com写道:
> > > > > On 13/07/2022 15:26, Icenowy Zheng wrote:
> > > > > > 
> > > > > > 在 2022-07-11星期一的 19:43 +0100,Conor Dooley写道:
> > > > > > > From: Conor Dooley <conor.dooley@microchip.com>
> > > > > > > 
> > > > > > > The JH7100 has a 32 bit monitor core that is missing from
> > > > > > > the
> > > > > > > device
> > > > > > > tree. Add it (and its cpu-map entry) to more accurately
> > > > > > > reflect
> > > > > > > the
> > > > > > > actual topology of the SoC.
> > > > > > > 
> > > > > > > Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
> > > > > > > ---
> > > > > > >  arch/riscv/boot/dts/starfive/jh7100.dtsi | 21
> > > > > > > +++++++++++++++++++++
> > > > > > >  1 file changed, 21 insertions(+)
> > > > > > > 
> > > > > > > diff --git a/arch/riscv/boot/dts/starfive/jh7100.dtsi
> > > > > > > b/arch/riscv/boot/dts/starfive/jh7100.dtsi
> > > > > > > index c617a61e26e2..92fce5b66d3d 100644
> > > > > > > --- a/arch/riscv/boot/dts/starfive/jh7100.dtsi
> > > > > > > +++ b/arch/riscv/boot/dts/starfive/jh7100.dtsi
> > > > > > > @@ -67,6 +67,23 @@ cpu1_intc: interrupt-controller {
> > > > > > >                         };
> > > > > > >                 };
> > > > > > > 
> > > > > > > +               E24: cpu@2 {
> > > > > > > +                       compatible = "sifive,e24",
> > > > > > > "riscv";
> > > > > > > +                       reg = <2>;
> > > > > > > +                       device_type = "cpu";
> > > > > > > +                       i-cache-block-size = <32>;
> > > > > > > +                       i-cache-sets = <256>;
> > > > > > > +                       i-cache-size = <16384>;
> > > > > > > +                       riscv,isa = "rv32imafc";
> > > > > > > +                       status = "disabled";
> > > > > > > +
> > > > > > > +                       cpu2_intc: interrupt-controller {
> > > > > > > +                               compatible = "riscv,cpu-
> > > > > > > intc";
> > > > > > > +                               interrupt-controller;
> > > > > > > +                               #interrupt-cells = <1>;
> > > > > > > +                       };
> > > > > > > +               };
> > > > > > > +
> > > > > > >                 cpu-map {
> > > > > > >                         cluster0 {
> > > > > > >                                 core0 {
> > > > > > > @@ -76,6 +93,10 @@ core0 {
> > > > > > >                                 core1 {
> > > > > > >                                         cpu = <&U74_1>;
> > > > > > >                                 };
> > > > > > > +
> > > > > > > +                               core2 {
> > > > > > > +                                       cpu = <&E24>;
> > > > > > > +                               };
> > > > > > 
> > > > > > Sorry but I think this change makes the topology more
> > > > > > inaccurate.
> > > > > > 
> > > > > > The E24 core is very independent, just another CPU core
> > > > > > connected
> > > > > > the
> > > > > > same bus -- even no coherency (E24 takes AHB, which is not
> > > > > > coherency-
> > > > > > sensible). Even the TAP of it is independent with the U74
> > > > > > TAP.
> > > > > > 
> > > > > > And by default it does not boot any proper code (if a
> > > > > > debugger
> > > > > > is
> > > > > > attached, it will discover that the E24 is in consistently
> > > > > > fault at
> > > > > > 0x0
> > > > > > (mtvec is 0x0 and when fault it jumps to 0x0 and fault
> > > > > > again),
> > > > > > until
> > > > > > its clock is just shutdown by Linux cleaning up unused
> > > > > > clocks.)
> > > > > > 
> > > > > > Personally I think it should be implemented as a remoteproc
> > > > > > instead.
> > > > > 
> > > > > Maybe I am missing something, but I don't quite get what the
> > > > > detail
> > > > > of how we access this in code has to do with the devicetree?
> > > > > It is added here in a disabled state, and will not be used by
> > > > > Linux.
> > > > > The various SiFive SoCs & SiFive corecomplex users that have
> > > > > a
> > > > > hart
> > > > > not capable of running Linux also have that hart documented
> > > > > in
> > > > > the
> > > > > devicetree.
> > > > > To me, what we are choosing to do with this hart does not
> > > > > really
> > > > > matter very much, since this is a description of what the
> > > > > hardware
> > > > > actually looks like.
> > > > 
> > > > The E24 is not in the core complex at all. It's just a dedicate
> > > > CPU
> > > > connected to another bus (well as I saw the document says the
> > > > E24
> > > > bus
> > > > is maximum 2G, I doubt whether it's the same bus with the U74
> > > > one).
> > > > 
> > > > The U74 MC only allows S5 management cores to be part of it,
> > > > not
> > > > E24.
> > > 
> > > So is the correct topology more like:
> > > cpu-map {
> > >         cluster0 {
> > >                 core0 {
> > >                         cpu = <&U74_0>;
> > >                 };
> > >                 core1 {
> > >                         cpu = <&U74_1>;
> > >                 };
> > >         };
> > >         cluster1 {
> > >                 core0 {
> > >                         cpu = <&E24>;
> > >                 };
> > >         };
> > > };
> > 
> > Considering E24 seems to see a total different bus connected to it,
> > I
> > don't think it even proper to add it to cpus node.
> 
> Well, it is a CPU is it not? How one is supposed to document that a
> CPU is not attached to the same buses I do not know however.

I don't think this kind of CPUs should exist in /cpus, they should just
be seen as peripherals as the main system. The speciality of FU[57]40's
management core is that they're in the same core complex with the CPU
cores that run Linux, just cores with a different capability that we
could not expand Linux to them.

> 
> > 
> > And I don't think it has a hart id of 2, as your node describes.
> 
> Do you have any idea what it would be then?

As I asked one of my friend who has JTAG access to JH7110, the hart id
is 0, the same with the first hart in U74-MC.
Conor Dooley July 13, 2022, 3:36 p.m. UTC | #12
Rob/Krzk,
Got a question about how to represent one of the cpu cores on
this SoC at the end of the mail

On 13/07/2022 16:26, Icenowy Zheng wrote:
> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
> 
> 在 2022-07-13星期三的 15:21 +0000,Conor.Dooley@microchip.com写道:
>> On 13/07/2022 16:12, Icenowy Zheng wrote:
>>> 在 2022-07-13星期三的 15:09 +0000,Conor.Dooley@microchip.com写道:
>>>>
>>>>
>>>> On 13/07/2022 16:02, Icenowy Zheng wrote:
>>>>> 在 2022-07-13星期三的 14:55 +0000,Conor.Dooley@microchip.com写道:
>>>>>> On 13/07/2022 15:26, Icenowy Zheng wrote:
>>>>>>> Sorry but I think this change makes the topology more
>>>>>>> inaccurate.
>>>>>>>
>>>>>>> The E24 core is very independent, just another CPU core
>>>>>>> connected
>>>>>>> the
>>>>>>> same bus -- even no coherency (E24 takes AHB, which is not
>>>>>>> coherency-
>>>>>>> sensible). Even the TAP of it is independent with the U74
>>>>>>> TAP.
>>>>>>>
>>>>>>> And by default it does not boot any proper code (if a
>>>>>>> debugger
>>>>>>> is
>>>>>>> attached, it will discover that the E24 is in consistently
>>>>>>> fault at
>>>>>>> 0x0
>>>>>>> (mtvec is 0x0 and when fault it jumps to 0x0 and fault
>>>>>>> again),
>>>>>>> until
>>>>>>> its clock is just shutdown by Linux cleaning up unused
>>>>>>> clocks.)
>>>>>>>
>>>>>>> Personally I think it should be implemented as a remoteproc
>>>>>>> instead.
>>>>>>
>>>>>> Maybe I am missing something, but I don't quite get what the
>>>>>> detail
>>>>>> of how we access this in code has to do with the devicetree?
>>>>>> It is added here in a disabled state, and will not be used by
>>>>>> Linux.
>>>>>> The various SiFive SoCs & SiFive corecomplex users that have
>>>>>> a
>>>>>> hart
>>>>>> not capable of running Linux also have that hart documented
>>>>>> in
>>>>>> the
>>>>>> devicetree.
>>>>>> To me, what we are choosing to do with this hart does not
>>>>>> really
>>>>>> matter very much, since this is a description of what the
>>>>>> hardware
>>>>>> actually looks like.
>>>>>
>>>>> The E24 is not in the core complex at all. It's just a dedicate
>>>>> CPU
>>>>> connected to another bus (well as I saw the document says the
>>>>> E24
>>>>> bus
>>>>> is maximum 2G, I doubt whether it's the same bus with the U74
>>>>> one).
>>>>>
>>>>> The U74 MC only allows S5 management cores to be part of it,
>>>>> not
>>>>> E24.
>>>>

---8<---

>>>
>>> Considering E24 seems to see a total different bus connected to it,
>>> I
>>> don't think it even proper to add it to cpus node.
>>
>> Well, it is a CPU is it not? How one is supposed to document that a
>> CPU is not attached to the same buses I do not know however.
> 
> I don't think this kind of CPUs should exist in /cpus, they should just
> be seen as peripherals as the main system. The speciality of FU[57]40's
> management core is that they're in the same core complex with the CPU
> cores that run Linux, just cores with a different capability that we
> could not expand Linux to them.

Maybe Rob or Krzysztof can shed some light on what would be the correct
way to depict this cpu.

> 
>>
>>>
>>> And I don't think it has a hart id of 2, as your node describes.
>>
>> Do you have any idea what it would be then?
> 
> As I asked one of my friend who has JTAG access to JH7110, the hart id
> is 0, the same with the first hart in U74-MC.

Hmm, my understanding is that the regs property needs to be unique, so
it'd have to stay as 2.

Thanks,
Conor.
diff mbox series

Patch

diff --git a/arch/riscv/boot/dts/starfive/jh7100.dtsi b/arch/riscv/boot/dts/starfive/jh7100.dtsi
index c617a61e26e2..92fce5b66d3d 100644
--- a/arch/riscv/boot/dts/starfive/jh7100.dtsi
+++ b/arch/riscv/boot/dts/starfive/jh7100.dtsi
@@ -67,6 +67,23 @@  cpu1_intc: interrupt-controller {
 			};
 		};
 
+		E24: cpu@2 {
+			compatible = "sifive,e24", "riscv";
+			reg = <2>;
+			device_type = "cpu";
+			i-cache-block-size = <32>;
+			i-cache-sets = <256>;
+			i-cache-size = <16384>;
+			riscv,isa = "rv32imafc";
+			status = "disabled";
+
+			cpu2_intc: interrupt-controller {
+				compatible = "riscv,cpu-intc";
+				interrupt-controller;
+				#interrupt-cells = <1>;
+			};
+		};
+
 		cpu-map {
 			cluster0 {
 				core0 {
@@ -76,6 +93,10 @@  core0 {
 				core1 {
 					cpu = <&U74_1>;
 				};
+
+				core2 {
+					cpu = <&E24>;
+				};
 			};
 		};
 	};