AMD Geode/Troubleshooting

This page contains my troubleshooting notes for getting the video working with the Geode.

Problem description
The eBay page listed the issue as "I was able to boot Windows 98SE from a Compact Flash card and everything worked fine. It currently refuses to output a video signal that any of my monitors can recognise" which sounds like it could be anything.

It's a little difficult to tell what's wrong with an x86 computer without video output, so I just checked what I could.

Power supply
Connecting the board's 5V rail to my Gophert NPS-1601 power supply caused it to draw up to 1A of current then beep.

There were no short circuits or smoke. I'm assuming the beeping is from the board POSTing.

Looking at the voltage drop with an oscilloscope, there was jitter from current consumption but no huge drops that would cause a brownout.

Video output
Video output caused both my monitors to display a 'Input not supported' message twice during boot:


 * The first was quick just after boot and lasted a second or so, followed by a second of nothing
 * The second message lasts until you reset the board or pull power

This is different to a 'No input' message, so some signal must be generated that the monitor can recognize but still give a failure for.

RAM
In case some memory error was causing the machine to hang during video initialization I swapped the stick with a test one.

No difference at all, so I don't think anything's really wrong with the RAM.

Removing the RAM altogether caused long beeps, presumably by the BIOS.

The original RAM that came with the machine is a Transcend 512M DDR333 stick, and the test one is Kingston 256M DDR333 stick.

Serial output
I connected both a makeshift and proper null modem cable to the serial port on the device. There was no output on it, but my oscilloscope showed the transmit line being held low.

This doesn't mean necessarily mean anything, most BIOSes on consumer hardware (old and modern) don't output on the serial port. This is horrible on many levels ranging from accessibility to troubleshooting or just configuring things if you don't have a monitor.

Clock battery
I removed the clock battery and checked it with my multimeter. It was around 200mV, much lower than the 3V it should provide.

I figured this may have caused some kind of under-voltage data corruption, but booting without the battery doesn't do anything.

The battery is a Rayovac BR1632 (see Rayovac 6099 OEM Reference Guide for more details) coin battery. This is a size smaller than the standard 2032 battery you'd see in a computer so I haven't replaced it yet.

Visual inspection doesn't show any battery leakage on the battery, and I can't really check under the battery holder without de-soldering it. I'm going to assume there wasn't any damage from a leakage event.

Keyboard
I plugged in a standard PS/2 keyboard (a black Acer KB-2971 covered in grime). The system would allow toggling caps lock and num lock as well as make some beeps when pressing keys.

This confirms that the system is active and not physically dead.

Ethernet
I connected the machine to my computer using an Ethernet cable to see if some kind of network boot was being attempted.

No packets arrived at my machine, so it's definitely not trying to boot over the network.

BIOS
I removed the BIOS chip to see how this would affect things.

The system didn't respond to any keypresses and made no noise.

This confirms that the BIOS is responsible for all the behaviour seen so far.

VGA signals
Probing the VGA signal showed the following:


 * Vertical sync was a 60Hz square wave lasting for 40 microseconds
 * Horizontal sync was a 75.02KHz square wave lasting for 1.45 microseconds
 * Red green and blue were all flat signals around 200mV

This seems like the machine is outputting no graphics signal.

I didn't see any visible damage on the board's VGA section so this seems like a software issue.

USB powering
I measured powering over USB using my Color TFT USB Tester and it confirmed earlier measurements. The current hangs around 1A and peaks around 1.5A.

Measuring the DAC
The AMD Geode LX Processors Data Book explains that after video has been rendered it's output through an 8-bit DAC.

The following signals are used by the DAC:


 * DVREF - A 1.235V voltage reference
 * DRSET - A 1.21K current setting resistor
 * DAVdd - Four 3.3V analog power connections
 * DAVss - Four 0.0V analog ground connections
 * RED, GREEN, BLUE - Analog DAC output
 * DOTREF - 48MHz input clock

After looking at the OLPC XO-1 Schematics and AMD Geode LX EPIC RDK Schematics which both use LX processors and inspecting the PCM-9375 board itself I figured out the following:


 * The OLPC XO-1 uses a resistor voltage divider to generate DVREF
 * The AMD EPIC RDK and PCM-9375 use a LM4041AIM3-1.2 to generate DVREF
 * The OLPC XO-1 sends the DAC signals to the connector directly
 * The AMD EPIC RDK and PCM-9375 put inductors and ESD protection in front of the signals
 * The PCM-9375 has some capacitors in front of the signals
 * The OLPC XO-1 and AMD EPIC RDK connect the DOTREF to the CS5536 chip
 * I presume the PCM-9375 does that too

Most of the signals above are physically exposed balls under the Geode chip. Probing them shows:


 * DVREF hangs around 1.22V
 * DAVdd hangs around 3.3V
 * DOTREF is a 48MHz sine wave (possibly scope artifacts)

Everything looks fine here.

Booting FreeDOS
I ran QEMU with my CompactFlash card passed through as the hard drive.

Installing FreeDOS was fairly easy.

I added 'CTTY CON' to the autoexec and the command shell talked over serial.

Unfortunately all the DOS programs that use video graphics don't work.

Booting Linux
I ran QEMU with my CompactFlash card passed through as the hard drive again.

I installed Alpine Linux and configured it to use the serial port for communication.

I recompiled Linux enabled the Geode LX video driver and set Alpine to use that.

Somehow VGA worked and displayed a login prompt, but degraded over time until it was unreadable.

Probing the signals showed very weak square waves on the DAC analog outputs.

Probing desoldered analog signals
I figured the analog outputs were being pulled low somehow.

I desoldered the inductors and capacitors so the analog signals weren't loading any current.

Probing the signals showed no difference.

I attempted to solder things back together but it ended with ripped pads. I had a webcam acting as a microscope that didn't magnify well and blocked my motion, and too large of a soldering iron tip that I couldn't position properly. I also lacked a lot of experience and didn't know what to do.

In short I managed to:


 * Lose three capacitors
 * Desolder two inductors
 * Rip a set of pads for an inductor
 * Rip a pad on one of the analog output capacitors
 * Burn a lot of plastic

Not a great move on my part.

Probing desoldered signals again
After a long hiatus I took a look at the signals again. At this point I don't see any signals at all, even after attempting to patch drivers to output test signals. Still my monitor detects Linux. Interestingly my USB to VGA setup detects both BIOS and Linux. Maybe the 'Input not supported' is related to HSYNC/VSYNC polarity?

I believe the capacitors I desoldered were connected between analog ground and the red/green/blue signals. I'd imagine they're very low values around 10pF or something.

Soldering the inductors back seems like the next step so I can hopefully try to reproduce the Alpine Linux login prompt.

I did probe the area with a multimeter. I think the middle ESD diode has failed. Could that be pulling things low?

Rebuilding solder failure
I managed to spend a lot of time and effort rebuilding the stuff I messed up to the point it works again. I actually couldn't find the ceramic capacitors I ordered so I skipped them.

Alpine Linux does give a nice login prompt again.

Looking at the ESD diodes again shows they have correct values, so it was likely just me measuring an incomplete circuit.

More tests and measurements
I did a lot of software tests:


 * Entering test mode gives a blank screen
 * Datasheet seems wrong: "MBD_MSR_DIAG[18:16] = 101h" should be "MSR_DIAG_VP[18:16] = 0b101"
 * Still, DAC test mode doesn't seem to work for me
 * DAC status registers always say the DAC is below 0.35V
 * VGA to HDMI gives the same weird signal on a monitor
 * One time VGA output was proper white
 * Another time VGA output was blue
 * Another time it didn't show up at all

I did the following measurements:


 * The DVREF shunt looks okay and produces the correct voltage
 * The DVREF shunt has a 12nF cap in parallel
 * The DVREF shunt has 13k to the 3V3 rail
 * The DRSET resistor is 1.21K to GND
 * The VGA resistors seem fine and correct values
 * When external DVREF is used, the shunt drops to 800mV, the rail somehow drops to 960mV

I reflowed some solder pins that looked a little lacking to me. I managed to break the second Ethernet chip doing this. Fixing it would require running wires for some PCI lines probably. I put nail polish on the exposed pins to protect from the elements.

I put some contact cleaner on the VGA connector pins and that didn't help.

Even more measurements
Still heading down this trail of madness:

I removed a capacitor and replaced a resistor with a wire, this fixed the DAVdd rail I think.
 * DAVdd drops to around when Linux initializes video
 * Bridging DAVdd and the 3V line causes Linux to display white text

At this point I believe the DAC is working, so the problem might be related to clocking.

I added in a fresh clock battery and it had no effect.

BIOS modding
I checked the VGA output and it seems fine when Linux uses it, but during boot it just doesn't use VGA out at all. It's seemingly likely that the BIOS is deciding not to output to VGA. I decided to try flashing a known good BIOS, and if that didn't help I'd tweak the settings using a BIOS editor.

I installed FreeDOS 1.2 and used the following commands in AUTOEXEC.BAT to output over serial:

MODE COM1: 9600,N,8,1,P CTTY COM1

This didn't work in FreeDOS 1.3 for some reason, perhaps its serial is broken.

I downloaded the following tools:

I downloaded the following BIOS versions: I also found a warning on CRT support with BIOS 1.17 and how to make a CRT-only PCM-5862E BIOS.
 * awdbedit-1.0_bin.zip
 * CBROM32_198.EXE (listed as CBROM 1.98)
 * modbin62.04.03.exe
 * awd829.EXE
 * awdflash899.exe
 * Awdflash.exe
 * 9375f113.zip
 * 9375f114.zip
 * 9375v115.zip
 * 9375v117.zip
 * 9375V115.BIN
 * 9375V116.BIN
 * 9375V117.BIN
 * 9375V118.BIN

Using modbin6 I was able to check the BIOS settings and found that it's already set to CRT and doesn't have the broken default 1.17 has, so I'm not even sure this method is going to work.

Using awdbedit I was able to decompress and extract parts of the BIOS.

I wasn't able to use any version of awdflash to flash any BIOS, at least I didn't think it worked. It requires VGA output to display its menus. I might try Uniflash or flashrom in the future.

This is also risky in case I break the BIOS. The chip is a PM49FL004TJ chip and I don't have a flasher for it.

I ordered 5 of those chips off eBay, my plan is to hot swap the chip and use that for BIOS foolery and keep the current one as a known good.

Future ideas
Here's some things I'll try:


 * Check TFT panel signals
 * BIOS flash