-----Original Message----- From: coreboot-bounces@coreboot.org [mailto:coreboot-bounces@coreboot.org] On Behalf Of Marc Jones Sent: Friday, November 21, 2008 10:19 AM To: Coreboot Subject: Re: [coreboot] HT chains fixup
On Thu, Nov 20, 2008 at 4:31 PM, Peter Stuge peter@stuge.se wrote:
How does HT unit arbitration work at power up? Ie. what determines the order of unit 0:s?
Physical placement. Since it's point-to-point, they hide in each other's shadows when they have equal UnitIDs.
The devices all come up with wiith unitid of 0 and are scanned depth first just as pci bridges are. The unitids can be set automatically but usually some devices are set specifically. The subtractive device is normally left as device 0. In the case or Serengeti it is 6 for historical reasons ( think there was a early 8111 bug that required the setting).
I think it's confusing to compare it to PCI since the meaning of depth is different until UnitIDs are assigned. It's not clear to me what it means to set the values depth first in a case like this:
<-> is an ht link
k8 <-> 8132 <-> 8132 <-> 8111
Since the 8132s are tunnels and consume 2 UnitIDs each, how do you decide which UnitIDs to assign to them. Until you get to the 8111 (end of chain), you don't know how many to skip.
at the beginning the UnitIDs are assigned:
k8 <-> 0 <-> 0 <-> 0
And only the first responds. You choose some "safe" place to put it, and continue.
k8 <-> 0xa <-> 0 <-> 0
Now the second one is visible. You choose to increment the UnitID (2 were consumed)
k8 <-> 0xa <-> 0xc <-> 0
Then you set the last one (cave) to 0x6 for historical reasons.
k8 <-> 0xa <-> 0xc <-> 0x6
There's nothing that says that that was the right way. I could have easily used any other safe value, or moved the UnitIDs after I knew how many each device consumed. These would be just as valid:
k8 <-> 0xc <-> 0xa <-> 0x6 k8 <-> 0x8 <-> 0xa <-> 0x6
etc.
I realize that this is somewhat contrived since I can't say I've ever seen a board like that, but it would be easy to build.
Thanks, Myles