Fix Clock
This page is on how to fix the real-time clock on a secure laptop.
Problem Description
Laptops with this problem show 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.
- The laptop screen lights up and shows "Invalid System Date" and then powers off. In this case, if you have a developer key, you can reflash with new firmware
According to Mitch Bradley, there are two different issues with RTC date:
- Prior to Q2D05, the firmware would turn on the screen, but wouldn't let you boot anything if the RTC date was less than Aug 2007
- >= Q2D05 will still display the message saying that the date is wrong, but will proceed to boot actos.
- Q2D06 will not turn on the screen at all if the RTC month field is 0.
Early production machines had firmware version Q2D04, Q2D05, and Q2D06, which had a bug that caused the machine not to start if the Real Time Clock chip's date had been reset to 0. This could happen if that chip lost all power, including its backup power from an internal "coin cell" battery.
To make matters worse, some of the early units were manufactured with defective holders for that coin cell battery, so that the battery could became loose or even pop out entirely.
To diagnose the problem, remove the back cover from the laptop (exposing the motherboard). If the coin cell battery is loose (you can easily remove it with your fingers) or out of its holder and the system is an early production unit, this is probably the problem. To be completely sure, you must connect a serial terminal to J1 on the motherboard, via a special low-voltage interface adapter. If the system has this problem, you will see "Page Fault" on the serial console shortly after power up.
The problem can possibly be circumvented by presenting a "developer key" for this machine, on a USB storage stick, at power-on time.
If you can't get a developer key for this machine, fixing this requires opening up the laptop and exposing its circuit boards, having a second laptop (XO or otherwise), *plus* having a unique little hardware board called a "serial to USB converter", and some skill in working with bare computer boards. The following instructions are for repair technicians, not for the public!
Accessing the Motherboard
Step 1
Open the laptop and flip the screen up. Rotate it a 90 degree angle as shown in the sequence below. Next, remove the screws from the bottom of the screen - there are two on each side (right/left) of the XO, so make sure to get all four.
Step 2
Remove the two green panels from the side of the XO. Slide them upwards and lift them off as shown.
Step 3
Finally, pull off the front panel. It is tabbed, so it can simply be pulled out. Pull the bottom out (where the screws came out), and gently slide the piece downwards and out.
Step 4
To get the screen out, remove the four screws highlighted.
Step 5
Next, carefully slide the screen out, pulling the bottom out. Do not tug it or let go, as it will still be connected to the motherboard by two cables.
Step 6
Access the motherboard by removing the back plate. Keep the screen out of the way until the replacement is complete.
Fix the loose battery
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" and "Tarzan's Grip". Loctite "Stik'n Seal" is a consumer adhesive; solvents are toluene and hexane (keep away from children!). It's extremely flammable, as well. Stock number is 01-23782, 1 oz. metal tube. (Alleskleber, in Germany, maybe?) 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 acetic acid as it cures, which is corrosive.
Hook the laptop up to another one through the serial port
- Using a low voltage serial to usb converter, connect the laptop to your personal laptop
- Use a program like minicom to access the laptop serially
- The serial port settings should be 115200 baud, 8 data bits, no parity, and 1 stop bit
How to set up an XO as a serial terminal
- Install any build 650 or later
- Boot the laptop, and connect to the internet.
- Go to the terminal and: yum install minicom
- After it is done, type: minicom -s (to set up minicom)
- 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, all you have to do is type: minicom USB0 (this will open minicom to the settings you want)
Upgrade the Firmware
- Insert a USB key containing the latest firwmare version.
- Connect a serial terminal (115200,8,n,1) and power on the machine. You should see "Page Fault" on the serial terminal (if the laptop has Q2D05 or Q2D06), followed by an "ok" prompt.
- Type the following command line at the ok prompt, substituting the correct .rom filename:
ok probe-pci probe-usb flash u:\q2d14.rom
Set the clock to the correct date
All these commands are typed on the laptop that is connected serially to the one with the bad clock
- power up the laptop (one with the bad clock), and hit ‘i’ a bunch (on the laptop connected serially) after seeing ‘Forth’ (easy to miss, just re-try)
- Then, do the following commands at the ok prompt. (hitting enter after each one)
- ok debug secure-startup (sets a break point at secure startup)
- ok resume (runs and breaks at secure start up)
- f (gives a forth 'ok' prompt)
- ok clock-node @ iselect
- ok decimal
- ok sec min hour day month year set-time (sec, min, hour, etc. should be numbers correlating to the current date) (e.g. 00 48 3 13 12 2007 set-time)
- power off (the laptop with the bad clock), and try booting.