>
>
> So it can be handled as you proposed in CB:59395 or we can define weak
> function e.g. get_max_subordinate(int current) which return 0xff by
> default and can be overriden in soc code to return real allowed max
> subordinate no.
>
> int __weak get_max_subordinate(int current) { return 0xff;};
>
> and in src/device/pci_device.c
>
> subordinate = get_max_subordinate(primary); // instead of subordinate =
> 0xff; /* MAX PCI_BUS number here */


I chose to have it directly in the devicetree over weak functions as the
the soc specific override function would essentially be a loop over the
devicetree struct which seems more fragile when things are being appended
to it (scan_bus).


On Tue, Mar 22, 2022 at 2:11 PM Mariusz Szafrański via coreboot <
[email protected]> wrote:

> W dniu 22.03.2022 o 12:38, Arthur Heymans pisze:
> > sidenote: it also looks like the hardware really does not like to have
> > PCI bridges on a IIO stack set a subordinate
> > value larger than the IIO stack 'MaxBus' (basically a stack-level
> > subordinate bus?). So scanning PCI busses needs some care.
> > See https://review.coreboot.org/c/coreboot/+/59395
>
> Each stack can have preassigned PCI bus range. window from busbase (pci
> bus no of first root bus on stack) to IIO stack 'MaxBus' inclusive. If
> MaxBus<busbase - no range assigned.
>
> So you can logically (and with big simplification) imagine this as there
> exists preconfigured 'virtual bridge' between CPU and stack PCI root
> buses with secondary set to busbase and subordinate set to 'MaxBus'
> (same for io window/mem below 4G window/mem above 4G - one of each type
> per each stack)
>
> There can also exists stacks marked as disabled or reserved with or
> without defined pci bus ranges. PCI bus no defined in disabled or
> reserved stacks should not be used/accessed. Access can cause
> hang/lookup or very long delays. So only bus ranges defined in "enabled"
> stacks should be used.
>
> So it can be handled as you proposed in CB:59395 or we can define weak
> function e.g. get_max_subordinate(int current) which return 0xff by
> default and can be overriden in soc code to return real allowed max
> subordinate no.
>
> int __weak get_max_subordinate(int current) { return 0xff;};
>
> and in src/device/pci_device.c
>
> subordinate = get_max_subordinate(primary); // instead of subordinate =
> 0xff; /* MAX PCI_BUS number here */
>
> Mariusz
>
> _______________________________________________
> coreboot mailing list -- [email protected]
> To unsubscribe send an email to [email protected]
>
_______________________________________________
coreboot mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to