Unix Technical Forum

questions: identify AMD CPUs, acpi/MP bios

This is a discussion on questions: identify AMD CPUs, acpi/MP bios within the mailing.openbsd.tech forums, part of the OpenBSD category; --> (reposted to tech@ by request) I'm leaving for a vacation in the morning so this is in lieu of ...


Go Back   Unix Technical Forum > Unix Operating Systems > OpenBSD > mailing.openbsd.tech

FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #1 (permalink)  
Old 04-15-2008, 09:30 PM
Geoff Steckel
 
Posts: n/a
Default questions: identify AMD CPUs, acpi/MP bios

(reposted to tech@ by request)
I'm leaving for a vacation in the morning so this is in lieu of
anything more systematic like filing bug reports.

I have just spent a couple of days trying to get a AMD Athlon5600X2
on an Elitegroup AMD690GM-M2 working. Getting the MP kernel to boot
took a lot of debugging.

a)
The arch/i386/machdep.c cpuid decode in identifycpu() tries to be all things
to all cpus. It doesn't follow the spec in AMD docs 25481 and 33610
particularly decoding the extended family and extended model fields
which become significant when the family field == 0xF.

First, does this matter? Probably not right now, as long as
the amd_family6_setup is adequate for all newer CPUs. The algorithms
for assigning ICUs to CPUs might suffer, but I really don't know.

The documents noted above list the cpuid signatures of all recent chips,
so a simple enumeration would probably suffice with defaults for the
major families.

b) x86 BIOSes are quirky at best. The BIOS on the board mentioned
1) puts the RDSP pointer in type 2 BIOS space (reserved) not in type
3 BIOS space (ACPI) so the search algorithm in acpi_machdep.c
doesn't find it causing a crash later. Luckily acpidump(8) does
a brute force search and does find it. It appears that the behavior
of the BIOS is legal.
2) the RDSP block may advertise itself as revision 2 but have a NULL
xdsp physical pointer (64 bit) while having a correct 32 bit pointer.
The code assumes that a revision 2 RDSP must have a valid 64 bit pointer
which causes a crash.

c) acpi.c assumes that there must be an RDSP block so it uses whatever
NULL happens to result from the acpi_machdep scan.

d) i386/bios.c smbios_find_table's cookie code for finding cached entries
can't work right - 0xfff mask instead of 0xff. The encoding (+1 or +2
base?) is unclear. It's likely that the cacheing feature is never used.

e) There are a number of almost-duplicate "temporarily map a block of physical
space into kernel space" routines scattered about multiple architectures
and multiple places in some architectures which probably should be
(garbage) collected.

If these are known issues there's no point in me going any further.
If any of these are new issues I'll file a bug & fix after I get back.
I'll be glad to supply diffs now. They are very full of
#ifdef BIOS_DEBUG printfs. Amazing what you'll find out when you
ask the machine to tell you what's happening.

------ don't read any further if you are easily annoyed ------
I realize that a lot of the code I was fighting with is inherited
from other projects and was not written by OpenBSD people, so
this is not a criticism of the people or the project.

This experience has validated once more some rules developed
over my 40+ years of programming:

All "should never happen" failures must have printfs at minimum to
clue the helpless about where the "can't happen" happened.
No unusual or unexpected failure may be silent.

A lack of checks for null pointers before use has a high debugging cost.
As the certified geniuses who invented the ARPAnet said:
be extremely precise sending out
be extremely accepting receiving BUT validate, validate, validate

Combining cacheing, 'find first', and 'find next' code in the same routine
is in my very rigid and uncompromising mind a fatal design error of
the genus "conflation of similar but incompatible goals".

geoff steckel
Omnivore Technology

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On
Forum Jump


All times are GMT. The time now is 06:18 PM.


Powered by vBulletin® Version 3.6.5
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.2.0
www.UnixAdminTalk.com