On Tue, Aug 12, 2025 at 10:53 AM Lizhi Hou <lizhi.hou@xxxxxxx> wrote: > > > On 8/12/25 00:42, Lorenzo Pieralisi wrote: > > On Mon, Aug 11, 2025 at 08:26:11PM -0700, Lizhi Hou wrote: > >> On 8/11/25 01:42, Lorenzo Pieralisi wrote: > >> > >>> Hi Lizhi, Rob, > >>> > >>> while debugging something unrelated I noticed two issues > >>> (related) caused by the automatic generation of device nodes > >>> for PCI bridges. > >>> > >>> GICv5 interrupt controller DT top level node [1] does not have a "reg" > >>> property, because it represents the top level node, children (IRSes and ITSs) > >>> are nested. > >>> > >>> It does provide #address-cells since it has child nodes, so it has to > >>> have a "ranges" property as well. > >>> > >>> You have added code to automatically generate properties for PCI bridges > >>> and in particular this code [2] creates an interrupt-map property for > >>> the PCI bridges (other than the host bridge if it has got an OF node > >>> already). > >>> > >>> That code fails on GICv5, because the interrupt controller node does not > >>> have a "reg" property (and AFAIU it does not have to - as a matter of > >>> fact, INTx mapping works on GICv5 with the interrupt-map in the > >>> host bridge node containing zeros in the parent unit interrupt > >>> specifier #address-cells). > >> Does GICv5 have 'interrupt-controller' but not 'interrupt-map'? I think > >> of_irq_parse_raw will not check its parent in this case. > > But that's not the problem. GICv5 does not have an interrupt-map, > > the issue here is that GICv5 _is_ the parent and does not have > > a "reg" property. Why does the code in [2] check the reg property > > for the parent node while building the interrupt-map property for > > the PCI bridge ? > > Based on the document, if #address-cells is not zero, it needs to get > parent unit address. Maybe there is way to get the parent unit address > other than read 'reg'? Or maybe zero should be used as parent unit > address if 'reg' does not exist? > > Rob, Could you give us some advise on this? If there's no 'reg', then 'ranges' parent address can be used. If 'ranges' is boolean (i.e. 1:1), then shrug. Just use 0. Probably, 0 should just always be used because I don't think it ever matters.