Ubuntu Forums ubuntu.com - launchpad.net - ubuntu help  

Go Back   Ubuntu Forums > The Ubuntu Forum Community > Main Support Categories > Hardware & Laptops
Register Reset Password Forum Help Forum Council Search Today's Posts Mark Forums Read

Ubuntu 9.10 is out!!!

When downloading Ubuntu 9.10 please consider using bittorrent to get your copy of Ubuntu.

The Ubuntu Developers Summit for Lucid Lynx will be held the week of 16-Nov-2009 till 20-Nov-2009 in Dallas, TX USA. Visit the the Ubuntu wiki for more information about UDS and how to participate remotely.

Hardware & Laptops
Problems with hardware & laptops not being detected or supported during or after install.

 
Thread Tools Display Modes
Old July 24th, 2008   #1
TheAlmightyCthulhu
Day Old Decaf
 
Join Date: Jul 2008
Location: R'lyeh
Beans: 50
Ubuntu 8.04 Hardy Heron
Send a message via Yahoo to TheAlmightyCthulhu
A possible bug in Foxconn boards BIOS affects Linux ACPI

Update: I just got off the phone with Foxconn, they called me from China (1 AM in Indiana, heh) and were asking if I would test an improved version of their BIOS based partially on the modifications I've made to mine, hopefully this all blows over, and regardless of who's fault it is or isn't, we can just go back to using our computers with full functionality.

Thanks to the community for helping me get the message to Foxconn.

Edit: Please tell Foxconn what you think of their behavior:

http://www.foxconnchannel.com/support/online.aspx

You need to put in an email, and then it will bring up a form, choose Complain/Suggest.

FOXCONN PHONE NUMBERS and LOCATIONS OF US-Based facilities

http://maps.google.com/maps?q=foxconn

Edit: Welcome Digg, Reddit, and Slashdot.

http://digg.com/linux_unix/Foxconn_d..._destroy_Linux
http://www.reddit.com/comments/6tcv8...their_bios_to/
http://linux.slashdot.org/article.pl.../07/25/1150218

Who is Foxconn and why must we get the message to them?

I've heard a lot of people ask, "Who the hell is Foxconn", if you use a PC, there's a good chance you have one of their boards, even if it's branded as MSI or some other brand, if you use a Nintendo Wii, XBOX 360, or Playstation 3, Foxconn made that motherboard, this isn't some little dodgy hardware maker with no name that we can afford to be quiet about.
------------
I have disassembled my BIOS to have a look around, and while I won't post all the results here, I'll tell you what I did find.

They have several different tables, a group for Windws XP and Vista, a group for 2000, a group for NT, Me, 95, 98, etc. that just errors out, and one for LINUX.

The one for Linux points to a badly written table that does not correspond to the board's ACPI implementation, causing weird kernel errors, strange system freezing, no suspend or hibernate, and other problems, using my modifications below, I've gotten it down to just crashing on the next reboot after having suspended, the horrible thing about disassembling any program is that you have no commenting, so it's hard to tell which does what, but I'll be damned if I'm going to buy a copy of Vista just to get the crashing caused by Foxconn's BIOS to stop, I am not going to be terrorized.

-----
How to fix:

Get Intel's BIOS ACPI source compiler:

sudo apt-get install iasl

Dump your DSDT table:

sudo cat /sys/firmware/acpi/tables/DSDT > dsdt.dat

Disassemble it:

iasl -d dsdt.dat

Open it in Gedit:

gedit dsdt.dsl

Fix Foxconn sabotage:

Find, the section that starts out with

Code:
            If (_OSI ("Windows 2000"))
            {
                Store (0x04, OSVR)
            }
Go down til you get to the first

Code:
        }
        Else
        {
Past that you should see Linux alongside Windows NT, which is above another Else that leads to Windows Me.

Should look like:

Code:
            If (MCTH (_OS, "Linux"))

            {
                Store (0x3, OSVR)
            }
Change it to:
Code:
            If (_OSI ("Linux"))
            {
                Store (Zero, OSVR)
            }
Copy the section, and remove it and the other characters (CAREFULLY PRESERVING SYNTAX!!!!)

Then move the Linux section to right underneath Windows 2006 section.

It will look about like this now:

Code:
Name (OSVR, Ones)
    Method (OSFL, 0, NotSerialized)
    {
        If (LNotEqual (OSVR, Ones))
        {
            Return (OSVR)
        }

        If (LEqual (PICM, Zero))
        {
            Store (0xAC, DBG8)
        }

        Store (One, OSVR)
        If (CondRefOf (_OSI, Local1))
        {
            If (_OSI ("Windows 2000"))
            {
                Store (0x04, OSVR)
            }

            If (_OSI ("Windows 2001"))
            {
                Store (Zero, OSVR)
            }

            If (_OSI ("Windows 2001 SP1"))
            {
                Store (Zero, OSVR)
            }

            If (_OSI ("Windows 2001 SP2"))
            {
                Store (Zero, OSVR)
            }

            If (_OSI ("Windows 2001.1"))
            {
                Store (Zero, OSVR)
            }

            If (_OSI ("Windows 2001.1 SP1"))
            {
                Store (Zero, OSVR)
            }

            If (_OSI ("Windows 2006"))
            {
                Store (Zero, OSVR)
            }

            If (_OSI ("Linux"))
            {
                Store (Zero, OSVR)
            }
        }
        Else
        {
            If (MCTH (_OS, "Microsoft Windows NT"))
            {
                Store (0x04, OSVR)
            }
            Else
            {
                If (MCTH (_OS, "Microsoft WindowsME: Millennium Edition"))
                {
                    Store (0x02, OSVR)
                }
            }
        }

        Return (OSVR)
    }
Don't recompile it yet, or this will happen:

Code:
dsdt.dsl  6379:             Acquire (MUTE, 0x03E8)
Warning  1103 -                                 ^ Possible operator timeout is ignored

dsdt.dsl  6393:             Acquire (MUTE, 0x03E8)
Warning  1103 -                                 ^ Possible operator timeout is ignored

dsdt.dsl  6408:             Acquire (MUTE, 0x03E8)
Warning  1103 -                                 ^ Possible operator timeout is ignored

dsdt.dsl  6423:             Acquire (MUTE, 0x0FFF)
Warning  1103 -                                 ^ Possible operator timeout is ignored

dsdt.dsl  6437:             Acquire (MUTE, 0x03E8)
Warning  1103 -                                 ^ Possible operator timeout is ignored

dsdt.dsl  6452:             Acquire (MUTE, 0x03E8)
Warning  1103 -                                 ^ Possible operator timeout is ignored

dsdt.dsl  6467:             Acquire (MUTE, 0x03E8)
Warning  1103 -                                 ^ Possible operator timeout is ignored

Compilation complete. 0 Errors, 7 Warnings, 0 Remarks, 77 Optimizations
These are bogus mutes that are harmless to Windows (it ignores them), but crash Linux sporadically, soooo....

Find and replace all seven occurences of Acquire (MUTE, 0x03E8) and replace with Acquire (MUTE, 0xFFFF), it appears they're trying to crash the kernel by locking a region of memory that shouldn't be locked, but without access to their source code comments, I can only speculate, this tells it to lock a memory address that is always reserved instead. ;)

Now compile it

iasl -tc dsdt.dsl

(You shouldn't get any warnings,there are any warnings or ERRORS, go find out what you did wrong!)

And install it and configure the kernel to use it:

sudo cp dsdt.aml /etc/initramfs-tools/DSDT.aml

sudo update-initramfs -c -k all

All future kernels should automatically find it there and build it.

REBOOT
--------------

This doesn't seem to help get rid of the suspend/resume and then reboot issue, but it appears to fix the rest, their BIOS is damned sloppy it's hard to really even tell what you're doing in there.

Use this advice at your own risk.

So there you have it!

Edit: Complained to the Federal Trade Commission

http://www.ftc.gov


Foxconn
458 E. Lambert Road Fullerton
Fullerton, CA
92835

FOXCONN PHONE NUMBER: 714-871-9968

Company sold me a computer motherboard, model G33M-S, claiming that it was compliant with ACPI versions 1.0, 2.0, and 3.0.

Linux and FreeBSD do not work with this motherboard due to it's ACPI configuration, using a disassembler program, I have found that it detects Linux specifically and points it to bad DSDT tables, thereby corrupting it's hardware support, changing this and setting the system to override the BIOS ACPI DSDT tables with a customized version that passes the Windows versions to Linux gives Linux ACPI support stated on the box, I am complaining because I feel this violates an anti-trust provision in the Microsoft settlement, I further believe that Microsoft is giving Foxconn incentives to cripple their motherboards if you try to boot to a non-Windows OS.


We have received your complaint.

Thank you for contacting the FTC. Your complaint has been entered into Consumer Sentinel, a secure online database available to thousands of civil and criminal law enforcement agencies worldwide. Your reference number is:
19642372


Edit: Full correspondence with Foxconn

Me:

ACPI issues, cannot reboot after having used suspend

Jul 22 08:37:53 ryan-pc kernel: ACPI: FACS 7FFBE000, 0040
Jul 22 08:37:53 ryan-pc kernel: ACPI: FACS 7FFBE000, 0040
Jul 22 08:37:53 ryan-pc kernel: ACPI: FACS 7FFBE000, 0040
Jul 22 08:37:53 ryan-pc kernel: ACPI: FACS 7FFBE000, 0040
Jul 22 08:37:53 ryan-pc kernel: ACPI Warning (tbutils-0217): Incorrect checksum in table [OEMB] - 70, should be 69 [20070126]

I get these messages in my system log at boot, I also fail to reboot after having used suspend in a session, it hangs and plays a continued beep on the PC speaker.


Foxconn:

Dear Ryan:

Do you get the same beep codes if you were to remove all RAM out and then turn the system ON again?


Me:

No, because then I wouldn't be able to boot into Linux, suspend to RAM, to get the ACPI failure, have syslogd pollute my /var/log/messages file with it, or read about it in my system log.

In particular, the number of quirks that the kernel has to use, and this invalid checksum are what has me nervous.

If you need me to attach the full contents of /var/log/messages, I can do so.


Foxconn:

Dear Ryan:

This board was never certified for Linux. It is only certified for Vista. See URL below. So please test under Vista. Does this issue also occured under Vista or Winxp?

http://www.foxconnchannel.com/produc...ification.aspx


Me:

Well, this is a replacement for a dead Intel board (a 945g that fully supported ACPI), Vista was never really up for consideration, and I'm not about to go buy a copy to find out.

The ACPI specs are there for a reason, and broken BIOS's like what is in this motherboard are the reason standard ACPI does not work, I've taken the liberty of filing the report in kernel.org, Red Hat, and Canonical's Ubuntu bug tracking systems, and posting the contents of my kernel error log on my blog, which is in the first several results if you Google search "Foxconn G33M" or "Foxconn G33M-s", "Foxconn Linux", etc, as well as prominently in other search formats, so hopefully this will save other people from a bad purchase, and hopefully kernel.org can work around your broken BIOS in 2.6.26, as I understand that kernel is more forgiving of poorly written BIOSes built for Windows.

I've already gotten several dozen hits on those pages, so you guys are only hurting yourselves in the long run, by using bad BIOS ROMs, as people like me are quite vocal when dealing with a bad product.


Foxconn:

Dear Ryan,

Making idle treats is not going to solve anything.

As already stated this model has not been certified under Linux nor supported.

As you are unhappy with the product- using a non-support operating system nor certified, please contact your reseller for a refund.


Me:

Yeah, well, I allege that you guys thoroughly suck.

Learn how to write a BIOS before you go selling hardware with falsified specs.


Me:

I've been debugging your AMI BIOS, and the ACPI support on it is far from within compliance with the standards, I've dumped out the debugging data into Canonical's Launchpad bug tracking system so that we may be able to support some sort of a workaround for the bad ACPI tables in your BIOS, I would hope that you will be part of the solution instead of the problem, alienating customers and telling them to go buy a copy of Windows Vista is not service, your product claims to be ACPI compliant and is not, therefore you are falsely advertising it with features it isn't capable of.

I would ask that you issue an update that doesn't make it dependent upon Windows Hardware Error Architecture, but that decision is up to you.

Please find all relevant data here:

Bug #251338 in Ubuntu: “Bad ACPI support on Foxconn G33M/G33M-S motherboards with AMI BIOS”
https://bugs.launchpad.net/ubuntu/+s...ux/+bug/251338

I appreciate your consideration in this matter.

-Ryan


Foxconn:

Dear Ryan,

You are incorrect in that the motherboard is not ACPI complaint. If it were not, then it would not have received Microsoft Certification for WHQL.

Refer to:
http://winqual.microsoft.com/HCL/Pro...33M-S&oid=3179

As already stated, this model has not been certified under Linux nor supported.

It has been marketed as a Microsoft Certified Motherboard for their operating systems.


Me:

I've found separate DSDT tables that the BIOS hands to Linux specifically, changing it to point to the DSDT tables Vista gets fixes all Linux issues with this board.

So while I accept that you've gotten some kind of Microsoft Certification (doesn't surprise me), that does not make your board ACPI capable, just that Windows is better at coping with glitches custom tailored to it, for this purpose.


Foxconn:

Dear Ryan,

Stop sending us these!!!


Me:

Your BIOS is actually pretty shoddy, I've taken the liberty of posting everything that's wrong with the DSDT lookup tables and how to fix some of it so the community that has already purchased your filth can make do with it, also, it's now pretty much impossible to google Foxconn and Linux in the same sentence without getting hit by the truth, that your boards aren't good enough to handle it.

Have a very nice day.


Foxconn:

Dear Ryan,

Surely this is the way to ask for us to attempt to fix something that is not supported in the first place.


Me:

Would it be so difficult? I mean really? I suppose you've never heard of building a happy customer base vs. just angering everyone that deals with your products to the point they make sure others don't make the mistake of buying them.

You know, I have several computers, and they all support any OS I want to put there, as well they should, if you can't fix the damaged BIOS you put there intentionally, can you at least put a big thing on the site that says no LInux support so people won't make the mistake of buying your stuff?

Your DSDT table looks like it was written by a first year computer science student, it is scary, I will not just shut up and go away until I feel like I've been done right, this can end up on Digg, Slashdot, filed with the FTC that you are passing bad ACPI data on to Linux specifically.

I saw you targeting Linux with an intentionally broken ACPI table, you also have one for NT and ME, a separate one for newer NT variants like 2000, XP, Vista, and 2003/2008 Server, I'm sure that if you actually wrote to Intel ACPI specs instead of whatever quirks you can get away with for 8 versions of Windows and then go to the trouble of giving a botched table to Linux (How much *is* Microsoft paying you?) it would end up working a lot better, but I have this idea you don't want it to.

Last edited by TheAlmightyCthulhu; July 26th, 2008 at 12:55 PM..
TheAlmightyCthulhu is offline  
Old July 24th, 2008   #2
quinnten83
Dipped in Ubuntu
 
quinnten83's Avatar
 
Join Date: May 2007
Location: Netherlands
Beans: 542
Ubuntu 9.04 Jaunty Jackalope
Re: Foxconn deliberately sabotaging their BIOS to destroy Linux ACPI

And now in English....?
__________________
Approach life & cooking with reckless abandon.
quinnten83 is offline  
Old July 24th, 2008   #3
TheAlmightyCthulhu
Day Old Decaf
 
Join Date: Jul 2008
Location: R'lyeh
Beans: 50
Ubuntu 8.04 Hardy Heron
Send a message via Yahoo to TheAlmightyCthulhu
Re: Foxconn deliberately sabotaging their BIOS to destroy Linux ACPI

Quote:
Originally Posted by quinnten83 View Post
And now in English....?
They detect Linux, give it a bad DSDT table, one that looks ok at a glance, but broken in subtle ways so that some of it works, but not correctly.

You call them to ask why their board won't run Linux.

They tell you to buy Vista.

They're basically rubbing Microsoft's back. (To keep this G rated)
TheAlmightyCthulhu is offline  
Old July 24th, 2008   #4
gunashekar
A Carafe of Ubuntu
 
gunashekar's Avatar
 
Join Date: Oct 2007
Location: Chennai, India
Beans: 84
Ubuntu 9.10 Karmic Koala
Send a message via Yahoo to gunashekar
Re: Foxconn deliberately sabotaging their BIOS to destroy Linux ACPI

Is it possible to correct the problem and publish it? What legal issues will be there?
__________________
Gunashekar
"where knowledge is free"
Humanity Networks
Chennai India
gunashekar is offline  
Old July 24th, 2008   #5
bruce89
Tall Cafè Ubuntu
 
bruce89's Avatar
 
Join Date: Apr 2005
Location: Glasgow, Scotland
Beans: 2,488
Send a message via MSN to bruce89
Re: Foxconn deliberately sabotaging their BIOS to destroy Linux ACPI

Trustworthy Computing anyone?
__________________
GNOME en_GB committer.
bruce89 is offline  
Old July 24th, 2008   #6
klange
Ubuntu Extra Shot
 
klange's Avatar
 
Join Date: Apr 2007
Location: Ohio
Beans: 352
Send a message via ICQ to klange Send a message via AIM to klange Send a message via MSN to klange Send a message via Yahoo to klange Send a message via Skype™ to klange
Re: Foxconn deliberately sabotaging their BIOS to destroy Linux ACPI

That is quite dubious...
klange is offline  
Old July 24th, 2008   #7
TheAlmightyCthulhu
Day Old Decaf
 
Join Date: Jul 2008
Location: R'lyeh
Beans: 50
Ubuntu 8.04 Hardy Heron
Send a message via Yahoo to TheAlmightyCthulhu
Re: Foxconn deliberately sabotaging their BIOS to destroy Linux ACPI

Quote:
Originally Posted by gunashekar View Post
Is it possible to correct the problem and publish it? What legal issues will be there?
Probably distributing proprietary source code.

Uhhhm, I wouldn't want to patch the hardware for this (too much that could go wrong), but I'm pretty sure I could fix it up to run as a custom DSDT loaded by the kernel on boot, basically that will override the table the BIOS has given it.

I'm reverting back to Hardy Heron as the kernel patch that allows custom DSDT's is not in Intrepid quite yet, there I'll test it and see what happens.

it's a simple one-line change to redirect to the same tables that Windows XP and Vista get, so I'm thinking I could cook something up pretty quick.

Distributing? No, but I might be able to post how to do it in general enough terms.
TheAlmightyCthulhu is offline  
Old July 24th, 2008   #8
Polygon
Fresh Brewed Ubuntu
 
Polygon's Avatar
 
Join Date: Dec 2005
Location: Tucson, Arizona
My beans are hidden!
Ubuntu 8.10 Intrepid Ibex
Re: Foxconn deliberately sabotaging their BIOS to destroy Linux ACPI

posting before this gets dugg and the vast power of the internet makes foxconn crap their pants

anyway, that is very nasty. Maybe this should be posted on the kernel bug list as well, since they seem to be the ones who can actually write code to get around it
Polygon is offline  
Old July 24th, 2008   #9
TheAlmightyCthulhu
Day Old Decaf
 
Join Date: Jul 2008
Location: R'lyeh
Beans: 50
Ubuntu 8.04 Hardy Heron
Send a message via Yahoo to TheAlmightyCthulhu
Re: Foxconn deliberately sabotaging their BIOS to destroy Linux ACPI

Edit I posted this in OP instead

Last edited by TheAlmightyCthulhu; July 25th, 2008 at 02:54 AM..
TheAlmightyCthulhu is offline  
Old July 24th, 2008   #10
TheAlmightyCthulhu
Day Old Decaf
 
Join Date: Jul 2008
Location: R'lyeh
Beans: 50
Ubuntu 8.04 Hardy Heron
Send a message via Yahoo to TheAlmightyCthulhu
Re: Foxconn deliberately sabotaging their BIOS to destroy Linux ACPI

This silences all the warnings from Hardy's kernel and lets mmconfig work as well.

What it won't do, yet, is let you suspend or hibernate, but I'm pretty sure that with all the ACPI work being done in 2.6.26, that Intrepid will support bad Windows ACPI tables through Windows Hardware Error Architecture support.

(sigh)

But at least this fixes a few things now, and more to come.
TheAlmightyCthulhu is offline  

Bookmarks

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

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 06:41 PM.


vBulletin ©2000 - 2009, Jelsoft Enterprises Ltd. Ubuntu Logo, Ubuntu and Canonical © Canonical Ltd. Tango Icons © Tango Desktop Project. lingonberry