Xonar EEPROM Failure

From AlsaProject
Revision as of 09:37, 16 January 2009 by ClemensLadisch (talk | contribs) (new page)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Xonar D2(X) EEPROM Failure

Sometimes, Xonar D2 or D2X cards randomly fail to be recognized.

The driver refused to load or to install, and in Device Manager, the card is shown as an unknown sound card or as "C-Media Oxygen audio device". Putting the card into another slot or another computer does not help.

This happens when the EEPROM on the card gets overwritten.
(This EEPROM stores the PCI subsystem vendor and product IDs; when it gets overwritten, the main chip cannot read the subsystem IDs and uses a default ID (13F6:8788) which is not recognized by the Xonar driver.)

Causes

When the driver accesses the fourth DAC chip in a certain way, the EEPROM incorrectly thinks that it is accessed, too, and interprets the data that is sent as a write command.

Several factors must come together for this to happen:

  • The fourth DAC and the EEPROM share a certain data line from the CMI8788 (AV200) chip.
    (This happens only on the Xonar D2 and D2X, which adopted this design from C-Media's reference design; on later Xonar models, Asus has used a different communication method that does not use the shared pin.)
  • The driver writes some registers of the 4th DAC chip.
    (The Linux driver does this much more often than the Windows driver, so it is more likely that this problem occurs after you have run Linux.
    I have updated the Linux driver to never access the DAC this way, but the new driver version is not yet in any published kernel.)
  • The EEPROM chip thinks that it is being accessed. For this to happen, there must be a signal on the XEECS pin (which is not shared). In theory, this cannot happen, but it happens anyway, sometimes. Apparently, this is more likely with certain mainboards or computers, probably due to higher electric noise levels; the exact cause is unknown.

Restoring the EEPROM

I have written a small Linux program that tries to restore the original contents of the EEPROM:

  1. boot Linux (either from hard drisk or from a live CD);
  2. download the package directly from <http://www.alsa-project.org/~clemens/oxygen_restore_eeprom.tar.gz>, or download it from Windows and copy it over with a USB stick;
  3. open a console;
  4. unpack the package:
    tar xvzf oxygen_restore_eeprom.tar.gz
    cd oxygen_restore_eeprom
  5. run the program, as root:
    • either run first su, then ./oxygen_restore_eeprom_32
    • or run sudo ./oxygen_restore_eeprom_32
  6. follow the instructions on the screen.

The package also contains a 64-bit version (oxygen_restore_eeprom_64) for the unlikely case that you're running a 64-bit-only Linux.

Please [tell me] if it worked.

Warranty

none

Bug Reports

So far, five users have reported this problem:

http://vip.asus.com/forum/view.aspx?board_id=21&id=20080815123512921
http://vip.asus.com/forum/view.aspx?board_id=21&id=20081109201810093
http://vip.asus.com/forum/view.aspx?board_id=21&id=20090108020749752
http://bugzilla.novell.com/show_bug.cgi?id=462365