[PATCH v0 3/5] arm64: dts: aspeed: Add initial AST2700 SoC device tree
Ryan Chen
ryan_chen at aspeedtech.com
Mon Jun 16 00:52:16 PDT 2025
> Subject: Re: [PATCH v0 3/5] arm64: dts: aspeed: Add initial AST2700 SoC device
> tree
>
> On 16/06/2025 08:54, Ryan Chen wrote:
> >> Subject: Re: [PATCH v0 3/5] arm64: dts: aspeed: Add initial AST2700
> >> SoC device tree
> >>
> >> On 16/06/2025 08:32, Ryan Chen wrote:
> >>>>>
> >>>>> But I don't know your previous "NAK, never tested" mean.
> >>>>> I did make CHECK_DTBS=y arch/arm64/boot/dts/aspeed/ don't see the
> >>>>> fail with
> >>>>> intc0: interrupt-controller at 12100000 {
> >>>>> compatible = "simple-mfd";
> >>>>>
> >>>>> So, could you point me more test instruction for this?
> >>>> See syscon.yaml. And writing bindings or talks on conferences:
> >>>> simple-mfd cannot be alone.
> >>>>
> >>>
> >>> intc0: interrupt-controller at 12100000 { Sorry, do you mean
> >>> add by following?
> >>> compatible = "aspeed,intc-controller", "simple-mfd";
> >>> .....
> >>> intc0_11: interrupt-controller at 1b00 {
> >>> compatible = "aspeed,ast2700-intc-ic";
> >>> ......
> >>> };
> >>> };
> >>
> >> Maybe, but you said this is base address, so how can it be some
> >> separate device?
> >>
> >> I mean really, don't add fake nodes just to satisfy some device instantiation.
> >> Describe what this really is. That is the job of DTS. Not some fake nodes.
> >
> >
> > Understood. Let me explain more about the hardware layout.
> > The interrupt controller space is decoded starting from 0x12100000,
> > which includes both a set of global configuration registers and
> > individual interrupt controller instances.
> >
> > The region at 0x12100000 contains global interrupt control registers
> > (e.g., protect config, interrupt routing etc.).
>
> This does not explain me why global controller registers are a BUS or MFD as
> you claimed here.
> >
> > The actual interrupt controller logic starts at 0x12101b00, where each
> > sub-controller instance (e.g., intc0_11, intc0_12, etc.) has its own set of
> registers.
>
> I don't know what is a "global controller register" and "own set of registers". If
> you have device spanning over multiple memory blocks, device takes multiple
> 'reg' entries for example. There are many other configurations, depending on
> real hardware and relationships. Just look at other DTS.
Here are two possible representations of the interrupt controller layout for the AST2700 platform:
Please advise which approach would be more appropriate or preferred?
Option 1: Hierarchical representation with a parent node
This models the entire interrupt controller registers space (start from 0x12100000),
where the parent node includes the global register area and acts as a container for per-instance sub-controllers:
intc0: interrupt-controller at 12100000 {
compatible = "aspeed,intc-controller";
reg = <0 0x12100000 0x4000>;
...................
intc0_11: interrupt-controller at 1b00 {
compatible = "aspeed,ast2700-intc-ic";
reg = <0x1b00 0x100>;
................... };
};
And I find the others dtsi have global register use syscon ex.
https://github.com/torvalds/linux/blob/master/arch/arm64/boot/dts/sprd/ums512.dtsi#L177-L192
Option 2: Flat representation with only the per-domain node
This focuses on just the interrupt controller logic at 0x12101b00, skipping the global register modeling:
intc0_11: interrupt-controller at 12101b00 {
compatible = "aspeed,ast2700-intc-ic";
reg = <0 0x12101b00 0x100>;
...................
};
>
> Best regards,
> Krzysztof
More information about the linux-arm-kernel
mailing list