Hi

W dniu 22.03.2022 o 10:30, Arthur Heymans pisze:
Hi
 

e.g. if we got from HOB info that physical stack x has preallocated PCI buses 0x20..0x2f, io form 0x2000..0x2fff, mem 0xd0000000..0xdfffffff, mem 0x10000000000...0x1ffffffffff and there are 2 root buses 0x20 and 0x28 instead of adding one domain with "physical" stack we added two domains with "virtual" stacks:

stack x1 with virtually preallocated PCI buses 0x20..0x27, ip form 0x2000..0x27ff, mem 0xd0000000..0xd7ffffff, mem 0x10000000000...0x17fffffffff
stack x2 with virtually preallocated PCI buses 0x28..0x2f, ip form 0x2800..0x2fff, mem 0xd7000000..0xdfffffff, mem 0x18000000000...0x1ffffffffff

Each one with only one root bus without this link_list->next "complexity"

This only works if the downstream resources fit in this split virtual allocation, which you can't know before reading all downstream resources.
Especially for mem32 resources the resource allocation is already tight so I think this can get ugly.
Today most resources are mem64 "ready" and above 4G window is big enough so using "prefer 64bit strategy" practically eliminates this tight on mem32 range

At some point of time I was thinking about something called "subdomains" concept to cover this multiple root buses in one domain case so to make something like:

    domain 0  //domain
        domain 1 //subdomain
             first root bus from stack x and its downstream devices
        end
        domain 2 //subdomain
            second root bus from stack x and its downstream devices
        end
    end
    domain ...
        ...
    end
    ...


T8he way I understood it, domains are a set of resource windows to be constrained and then distributed over children and in this case children over multiple PCI root busses.
I have some doubts that subdomains map the situation correctly/efficiently, because it has essentially the same problem as knowing how to split the resources between domains correctly.
As I stated it was never implemented as subdomain level device is more a "bridge device" than "domain device"

OTOH, does it even make sense to map this in the devicetree? The way FSP reports stacks is generated at runtime and differs depending on the hardware configuration.
So having a static structure mapping that may not be interesting?

Arthur

It depends if few ms in boot time does matter.

It also depends on SoCs familly. Didn`t checked xeon but on SoCs I was worked on most of stack configuration was common to whole family with only minor differences on 1 or 2 stacks.

Mariusz