Fix Clock
This page describes how to fix a secure XO laptop locked up due to a problem with the Real Time Clock.
Problem Description
XO laptops with this problem show one of two symptoms:
- The power LED turns on, but the screen never turns on (not even the backlight). The microphone LED may flash briefly, but stays off. This symptom can only happen with OFW versions Q2D05 and Q2D06.
- The laptop screen lights up and shows "Invalid System Date" and then powers off. This symptom can happen with any OFW version, but Q2D05 and Q2D06 usually exhibit the first symptom instead.
The problem is caused by bad date information stored in the Real Time Clock (RTC) chip. There are three ways that the date could become bad:
- The factory did not set the date. This is rare.
- The user explicitly set the date to an incorrect value, either by mistake or as an attempt to defeat activation security. This is also rare.
- The RTC chip lost all power. This should have been rare, because the RTC chip has a "coin cell" backup battery that powers the RTC chip when the AC and the main battery are not present. Unfortunately, some of the early production machines were manufactured with a defective holder for the coin cell battery. On those machines, the coin cell battery can become loose or even pop out entirely during normal shipping and handling.
"RTC chip lost power" is by far the most common cause of the problem.
Repair Process
Fixing the problem has three phases:
- Securing the battery in the holder so the problem doesn't happen again
- Setting the date
- Updating Open Firmware to the current version.
What You Will Need
See the disassembly guide. To secure the battery, you will need some glue as described later.
The requirements for the rest of the repair depend on which of the two symptoms the system displays.
- If the screen does not turn on (symptom 1), you will a special hardware adapter - an OLPC serial adapter - and a second working computer (XO or otherwise).
- If the screen does turn on (symptom 2), you will need a "developer key" for this machine, on a USB storage stick.
Fix the loose battery
To access the Real Time Clock battery, follow the instruction for removing the back cover.
First, you must re-seat the coin cell battery in its holder and secure it so it doesn't come out again. One way to secure it is to put a drop of glue where the battery contacts the holder, away from the metallic contact. The best glue that Mitch has found for this purpose is clear solvent-based household cement. Technically, it is "nitro cellulose" cement. It is also known as "model airplane glue", marketed under various trade names such as "Duco Cement", "Tarzan's Grip". Loctite "Stik'n Seal", etc. (Alleskleber, in Germany, maybe?) The solvent in this kind of cement is toxic and flammable, so keep it away from children! Stronger adhesives like epoxy or cyanoacrylate (super glue) would probably work too, but it might be difficult to remove the battery later without damaging the holder. Don't even think of "Gorilla Glue"; that's polyurethane, which foams as it cures. RTV silicone would be good, except that the common variety releases corrosive acetic acid as it cures - if it smells like vinegar, don't use it on electronics. Ordinary "white glue" (PVA, or polyvinyl acetate) will probably work, but it flows easily and goes down underneath the battery - that is probably okay if you are careful not to use too much. Hot melt glue doesn't work, because it doesn't stick very well to these materials.
Serial Procedure - for symptom 1 (screen does not turn on)
You will need to disassemble the laptop to access the motherboard.
Hook the laptop up to another one through the serial port
- Using an OLPC serial adapter, connect the laptop to your personal laptop. On the laptop's motherboard, the serial adapter should be connected to J1. J1 is a small white connector near the wireless module.
- Use a program like minicom (for Linux) or HyperTerminal (for Windows) to access the laptop serially
- The serial port settings should be 115200 baud, 8 data bits, no parity, and 1 stop bit
It is suggested practice to test communications with a known good laptop before debugging broken ones!
Getting to the prompt
All these commands are typed on the "other" laptop that is connected serially to the one with the bad clock
- Power on the laptop under test. You should see "Page Fault" on the serial terminal, followed by an "ok" prompt. If you don't see "Page Fault", there are several possibilities:
- If you don't see anything on the serial terminal, either
- The serial terminal is not connected correctly, or
- Something else is wrong with the machine - the machine is quite quite dead and it's not an instance of the symptom 1 RTC problem.
- If you see a lot of startup messages, but the last one isn't "Page Fault" followed by "ok", then the machine is largely working, but the problem is not symptom 1 RTC problem. If the screen comes on, you should be following the "Developer Key Procedure" below, not this serial procedure.
- If you don't see anything on the serial terminal, either
- To set the date, do the following commands at the ok prompt (hitting enter after each one):
ok select /rtc ok decimal ok sec min hour day month year set-time
- sec, min, hour, day, etc in the previous command should be numbers correlating to the current date. For the current time:
ok 52 20 09 24 11 2024 set-time
- Insert a USB key containing the latest firwmare version. You will need to download the .rom file and place it on the key.
- To update the firmware, type the following command line at the ok prompt, substituting the correct .rom filename:
ok probe-pci probe-usb flash u:\q2d16.rom
- The machine should reboot automatically afterwards. You can then remove the USB stick, and the system should work correctly. You can disconnect the serial adapter and reassemble the machine.
How to set up an XO as a serial terminal
Instead of using a non-XO computer to connect to the laptop being repaired, you may also use an XO.
- Install any build (650 or later)
- Boot the laptop, and connect to the internet.
- Go to the terminal and type: yum install minicom
- After it is done, set up minicom by typing: minicom -s
- Go to 'Serial port setup' and hit enter.
- Press 'a' and change it to /dev/ttyUSB0, and then hit enter twice.
- Go to 'Modem and dialing' and hit enter.
- Clear the contents of both 'Init string' and 'Reset string' (you get to those by hitting 'a' and 'b'
- Hit enter to get back to the 'configuration' menu.
- Go to 'Save setup as..' and hit enter.
- Name the setup as 'USB0' and hit enter.
- Go to 'Exit from Minicom' and hit enter.
- Now, to open minicom with the settings you want all you have to do is type: minicom USB0
Developer Key Procedure - for symptom 2 (screen turns on)
All these commands are typed on the OLPC keyboard of the laptop that has the bad clock
- Get a "developer key" for this machine and put it on a USB storage stick
- Also put the latest firwmare version on the USB storage stick. You will need to download the .rom file and place it on the key.
- Insert the USB stick into the laptop
- Power on the laptop
- When the screen says "Type the Esc key to interrupt automatic startup", type the upper left key on the XO keyboard before the countdown expires. You should get an "ok" prompt. (If you don't see that message, something is wrong with the developer key.)
- Type these commands to set the date (hitting enter after each one):
ok select /rtc ok decimal ok sec min hour day month year set-time
- sec, min, hour, etc. should be numbers correlating to the current date
- Type this command to update the firmware, substituting the correct .rom filename:
ok flash u:\q2d16.rom
- The machine should reboot automatically afterwards. You can then remove the USB stick, and the system should work correctly. You can reassemble the machine.
If collection fails
If the laptop boots, but immediately displays a system clock error and shuts down before the collector script runs:
- Set up a serial terminal
- Power on the XO
- On the other computer/XO, immediately press "i" to interrupt the startup sequence
- Reset the system time (hitting enter after each command):
ok select /rtc ok decimal ok sec min hour day month year set-time
- Power off the XO and then collect the UUID as outlined above