[LinuxBIOS] [PATCH] fix resource end in K8 amdk8/northbridge.c

Rudolf Marek r.marek at assembler.cz
Fri Oct 12 23:14:57 CEST 2007


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1


Hello

Sorry for the delay.

Uwe Hermann wrote:
> On Sat, Sep 29, 2007 at 02:02:48AM +0200, Rudolf Marek wrote:
>> Index: src/northbridge/amd/amdk8/northbridge.c
>> ===================================================================
>> --- src/northbridge/amd/amdk8/northbridge.c	(revision 2776)
>> +++ src/northbridge/amd/amdk8/northbridge.c	(working copy)
>> @@ -562,7 +562,7 @@
>>  	base  |= (resource->base >> 8) & 0xffffff00;
>>  	base  |= 3;
>>  	limit &= 0x00000048;
>> -	limit |= ((resource->base + resource->size) >> 8) & 0xffffff00;
>> +	limit |= (resource_end(resource) >> 8) & 0xffffff00;
>>  	limit |= (resource->index & 3) << 4;
>>  	limit |= (nodeid & 7);
>>  	f1_write_config32(reg + 0x4, limit);
> 
> What exactly is broken in the current code and how does it show? How can
> we test the effect of the fix?


Well I reverted the patch and have forgotten :/ Without the patch my machine
suffers random lockup, when DMA from SATA/IDE hit the 0xC0000-0xCFFFF RAM memory.

 BIOS-e820: 0000000000001000 - 00000000000a0000 (usable)
 BIOS-e820: 00000000000c0000 - 00000000000f0000 (usable)
 BIOS-e820: 0000000000100000 - 0000000040000000 (usable)

This is my memory layout.

Without the patch, when VGA is used you will get:
(I'm using my dump ressource util, which I have posted some time ago)

DRAM map: #0 0x0000000000 - 0x003fffffff Access: R/W  IntlvEN:0x0 IntlvSEL:0x0
Dstnode:0
DRAM map: #1 0x0000000000 - 0x0000ffffff Access: /  IntlvEN:0x0 IntlvSEL:0x0
Dstnode:1
DRAM map: #2 0x0000000000 - 0x0000ffffff Access: /  IntlvEN:0x0 IntlvSEL:0x0
Dstnode:2
DRAM map: #3 0x0000000000 - 0x0000ffffff Access: /  IntlvEN:0x0 IntlvSEL:0x0
Dstnode:3
DRAM map: #4 0x0000000000 - 0x0000ffffff Access: /  IntlvEN:0x0 IntlvSEL:0x0
Dstnode:4
DRAM map: #5 0x0000000000 - 0x0000ffffff Access: /  IntlvEN:0x0 IntlvSEL:0x0
Dstnode:5
DRAM map: #6 0x0000000000 - 0x0000ffffff Access: /  IntlvEN:0x0 IntlvSEL:0x0
Dstnode:6
DRAM map: #7 0x0000000000 - 0x0000ffffff Access: /  IntlvEN:0x0 IntlvSEL:0x0
Dstnode:7
MMIO map: #0 0x0000000000 - 0x000000ffff Access: /     Dstnode:0 DstLink 0

MMIO map: #1 0x0000000000 - 0x000000ffff Access: /     Dstnode:0 DstLink 0

MMIO map: #2 0x0000000000 - 0x000000ffff Access: /     Dstnode:0 DstLink 0

MMIO map: #3 0x0000000000 - 0x000000ffff Access: /     Dstnode:0 DstLink 0

MMIO map: #4 0x0000000000 - 0x000000ffff Access: /     Dstnode:0 DstLink 0

MMIO map: #5 0x00000a0000 - 0x00000cffff Access: R/W     Dstnode:0 DstLink 0


Mote the region size! it is 64kb larger than it should be...

MMIO map: #6 0x00e0000000 - 0x00f02fffff Access: R/W     Dstnode:0 DstLink 0

MMIO map: #7 0x00c0000000 - 0x00d7ffffff Access: R/W     Dstnode:0 DstLink 0

MMIO map: #0  0x001000 - 0x004fff Access: R/W   VGA Dstnode:0 DstLink 0

MMIO map: #1  0x000000 - 0x000fff Access: /    Dstnode:0 DstLink 0

MMIO map: #2  0x000000 - 0x000fff Access: /    Dstnode:0 DstLink 0

MMIO map: #3  0x000000 - 0x000fff Access: /    Dstnode:0 DstLink 0


So with the patch applied, it gets correct again:

MMIO map: #5 0x00000a0000 - 0x00000bffff Access: R/W     Dstnode:0 DstLink 0


Btw maybe you can take the util and put it to some SVN repo, it has proven useful ;)

Thanks,

Rudolf

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFHD+PR3J9wPJqZRNURAoHHAJ9wK4KkzmnRP1i3nq62KPeONehFbgCgxmri
vtbxueWcDK4mviJHBQFMs40=
=y1yi
-----END PGP SIGNATURE-----




More information about the coreboot mailing list