[LinuxBIOS] [patch 4/4] AMD Geode GX/LX: CS5536 Southbridge

Marc Jones marc.jones at amd.com
Wed May 2 18:33:32 CEST 2007


Corey is correct on both comments.


All BIOS use port 80 as the debug port (including LinuxBIOS). An out to 
port 80 is noisy, especially in a bios debug environment. What makes it 
a delay is that it is a serializing read/write (it can't be pre-fetchand 
and can't be in the cache etc). In this particular case it is an 
arbitrary delay to wait for smbus devices to respond. I say arbitrary 
because it will change as the pci and glbus (internal geode bus) speeds 
change based on memory and pci loading. An inb is as good an arbitrary 
delay as an outb.

I don't think that this delay should there at all but I wasn't prepared 
to rewrite the entire section. It would be equivalent to poll the SMBus 
controllers IO register.

I think it would be in the best interest of LinuxBIOS to not have any 
outb(0x80, 0x80) delays. Either they should be inb if it can be an 
arbitrary delay or they should be changed to TSC based delays. See 
\LinuxBIOSv2\src\x86\tsc\delay_tysc.c

</soapbox>


Marc



Corey Osgood wrote:
> Uwe Hermann wrote:
>> On Tue, May 01, 2007 at 04:48:31PM -0600, Marc Jones wrote:
>>> Index: LinuxBIOSv2/src/southbridge/amd/cs5536/cs5536_smbus2.h
>>> ===================================================================
>>> --- LinuxBIOSv2.orig/src/southbridge/amd/cs5536/cs5536_smbus2.h	2007-04-30 15:14:24.000000000 -0600
>>> +++ LinuxBIOSv2/src/southbridge/amd/cs5536/cs5536_smbus2.h	2007-04-30 15:14:24.000000000 -0600
>> [...]
>>>  static void smbus_delay(void)
>>>  {
>>> -	outb(0x80, 0x80);
>>> +	inb(0x80);
>>>  }
>> Why? Please document this in the code (what, how, why). Did you perform
>> measurements? Why did the outb() not work?
> 
> There may be other reasons, but outb and inb both provide enough of a
> delay for smbus use. By using inb, you don't clear a potentially helpful
> post code.
> 
>>> Index: LinuxBIOSv2/src/mainboard/amd/norwich/auto.c
>>> ===================================================================
>>> --- /dev/null	1970-01-01 00:00:00.000000000 +0000
>>> +++ LinuxBIOSv2/src/mainboard/amd/norwich/auto.c	2007-05-01
> 01:32:02.000000000 -0600
>> [...]
>>> +#define POST_CODE(x) outb(x, 0x80)
>> Why this? We have a post_code() function in src/console/console.c.
>>
> 
> Isn't src/console/console.c for post ram init?
> 
> -Corey
> 
> 

-- 
Marc Jones
Senior Software Engineer
(970) 226-9684 Office
mailto:Marc.Jones at amd.com
http://www.amd.com/embeddedprocessors






More information about the coreboot mailing list