Dear all, One part of auto.c, I can't understand , hope you can tell me. In the "static unsigned int generate_row(uint8_t node, uint8_t row, uint8_t maxnodes)" function, how do I get the values of "static const unsigned int rows_4p[4][4]" array , I see an example :
/* Link0 of CPU0 to Link0 of CPU1 */ /* Link1 of CPU0 to Link2 of CPU2 */ /* Link2 of CPU1 to Link1 of CPU3 */ /* Link0 of CPU2 to Link0 of CPU3 */ static const unsigned int rows_4p[4][4] = { { 0x00070101, 0x00010202, 0x00030404, 0x00010204 }, { 0x00010202, 0x000b0101, 0x00010208, 0x00030808 }, { 0x00030808, 0x00010208, 0x000b0101, 0x00010202 }, { 0x00010204, 0x00030404, 0x00010202, 0x00070101 } };
but I still can't understand why?
* Huang-Jen Wang huangjen.wang@gmail.com [050617 09:29]:
One part of auto.c, I can't understand , hope you can tell me. In the "static unsigned int generate_row(uint8_t node, uint8_t row, uint8_t maxnodes)" function, how do I get the values of "static const unsigned int rows_4p[4][4]" array , I see an example :
/* Link0 of CPU0 to Link0 of CPU1 */ /* Link1 of CPU0 to Link2 of CPU2 */ /* Link2 of CPU1 to Link1 of CPU3 */ /* Link0 of CPU2 to Link0 of CPU3 */ static const unsigned int rows_4p[4][4] = { { 0x00070101, 0x00010202, 0x00030404, 0x00010204 }, { 0x00010202, 0x000b0101, 0x00010208, 0x00030808 }, { 0x00030808, 0x00010208, 0x000b0101, 0x00010202 }, { 0x00010204, 0x00030404, 0x00010202, 0x00070101 } };
but I still can't understand why?
It is the hypertransport routing table, describing how hypertransport packets are routed from each CPU to each other CPU. See the AMD K8 BKDG for the register description of the routing table entries.
BUT: This looks like an obsolete piece of code to me. Nowadays the routing table should be dynamically evaluated in coherent_ht.c
Stefan
Stefan, So the values of the array depend on the links of cpu to cpu? If I got an example : Link0 of CPU0 to Link1 of CPU1 Link1 of CPU0 to Link0 of CPU3 Link0 of CPU1 to Link0 of CPU2 Link2 of CPU2 to Link1 of CPU3
(L2) (L1) CPU2-------------CPU3 (L0) | | (L0) | | | | | | | | (L0)| | (L1) CPU1-------------CPU0------ (L1) (L0)
what are the values of the array?I hope I can realize from some examples... BTW, I search the keyword "AMD K8 BKDG(or AMD K8 BGDG)" in google, it has a little information, could you tell where can get more infromations? Thanks....
HJ Wang
On 6/17/05, Stefan Reinauer stepan@openbios.org wrote:
- Huang-Jen Wang huangjen.wang@gmail.com [050617 09:29]:
One part of auto.c, I can't understand , hope you can tell me. In the "static unsigned int generate_row(uint8_t node, uint8_t row, uint8_t maxnodes)" function, how do I get the values of "static const unsigned int rows_4p[4][4]" array , I see an example :
/* Link0 of CPU0 to Link0 of CPU1 */ /* Link1 of CPU0 to Link2 of CPU2 */ /* Link2 of CPU1 to Link1 of CPU3 */ /* Link0 of CPU2 to Link0 of CPU3 */ static const unsigned int rows_4p[4][4] = { { 0x00070101, 0x00010202, 0x00030404, 0x00010204 }, { 0x00010202, 0x000b0101, 0x00010208, 0x00030808 }, { 0x00030808, 0x00010208, 0x000b0101, 0x00010202 }, { 0x00010204, 0x00030404, 0x00010202, 0x00070101 } };
but I still can't understand why?
It is the hypertransport routing table, describing how hypertransport packets are routed from each CPU to each other CPU. See the AMD K8 BKDG for the register description of the routing table entries.
BUT: This looks like an obsolete piece of code to me. Nowadays the routing table should be dynamically evaluated in coherent_ht.c
Stefan
* Huang-Jen Wang huangjen.wang@gmail.com [050618 11:01]:
Stefan, So the values of the array depend on the links of cpu to cpu?
yes, indeed.
If I got an example : Link0 of CPU0 to Link1 of CPU1 Link1 of CPU0 to Link0 of CPU3 Link0 of CPU1 to Link0 of CPU2 Link2 of CPU2 to Link1 of CPU3
what are the values of the array? I hope I can realize from some examples...
http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/2609...
Check chapter 3.3.6: "Routing Table Node i Registers"
But note: since the topology is nowadays detected automatically, you don't need to care anyways...
BTW, I search the keyword "AMD K8 BKDG(or AMD K8 BGDG)" in google, it has a little information, could you tell where can get more infromations? Thanks....
Sorry,.. I was starting to use LinuxBIOS slang. The full name is "BIOS and Kernel Developer's Guide for AMD Athlon(tm)64 and AMD Opteron(tm) Processors".. BKDG is just so much quicker to write ;))
Regards, Stefan
next to do bout ht related is
make linuxbios support 1. more generic ht host bridge 2. ht-ht bridge 3. ht linked coprocessor....
YH
On 6/18/05, Stefan Reinauer stepan@openbios.org wrote:
- Huang-Jen Wang huangjen.wang@gmail.com [050618 11:01]:
Stefan, So the values of the array depend on the links of cpu to cpu?
yes, indeed.
If I got an example : Link0 of CPU0 to Link1 of CPU1 Link1 of CPU0 to Link0 of CPU3 Link0 of CPU1 to Link0 of CPU2 Link2 of CPU2 to Link1 of CPU3
what are the values of the array? I hope I can realize from some examples...
http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/2609...
Check chapter 3.3.6: "Routing Table Node i Registers"
But note: since the topology is nowadays detected automatically, you don't need to care anyways...
BTW, I search the keyword "AMD K8 BKDG(or AMD K8 BGDG)" in google, it has a little information, could you tell where can get more infromations? Thanks....
Sorry,.. I was starting to use LinuxBIOS slang. The full name is "BIOS and Kernel Developer's Guide for AMD Athlon(tm)64 and AMD Opteron(tm) Processors".. BKDG is just so much quicker to write ;))
Regards, Stefan
LinuxBIOS mailing list LinuxBIOS@openbios.org http://www.openbios.org/mailman/listinfo/linuxbios