[Trac #976] hardware docs lacking

Zarro Boogs per Child bugtracker at laptop.org
Sun Mar 4 18:33:55 EST 2007


#976: hardware docs lacking
---------------------------+------------------------------------------------
 Reporter:  AlbertCahalan  |        Owner:  blizzard 
     Type:  defect         |       Status:  new      
 Priority:  normal         |    Milestone:  Untriaged
Component:  distro         |   Resolution:           
 Keywords:                 |  
---------------------------+------------------------------------------------
Comment (by AlbertCahalan):

 OK, let's go to the obvious place:
 http://wiki.laptop.org/go/Hardware_specification

 I'll go down the list generally, and spot check a few things that I'm
 particularly interested in. I note that unofficial users are unable to
 edit this page, which is irritating and may explain the lack of polish.

 BTest-2 has no hardware documentation. There is documentation for BTest-1
 though, which I will assume to be mostly the same. I hate to make that
 assumption; there was an FPGA-to-ASIC conversion I believe. Hopefully I'll
 find a software-available way to tell BTest-1 from BTest2 that doesn't
 rely on firmware.

 After much link clicking, I guess that 31505E_gx_databook.zip on AMD's
 site might contain the instruction set for the CPU. It does, and more.
 That should have been clear before I downloaded and unzipped the file. To
 me, "datasheet" (your link name, which I didn't use) and "databook"
 suggest stuff like thermal design rules and physical package
 specifications. (or, alternately, marketing fluff)

 I didn't find the Geode-specific instructions that you mention.

 GAM_DATA is an unexplained 24 bits. Taking a random guess (which is
 dangerous with hardware), one could assume that this is an 8-bit to 8-bit
 lookup table that has red/green/blue values in groups of three. No mention
 is made of what happens when a 5-bit color channel from 15-bit RGB is
 looked up in the 8-bit table. Does a 5-bit 0x1f get looked up like an
 8-bit 0xff, an 8-bit 0xf8, and 8-bit 0x1f, or what? (later, I'll be
 looking for what the LCD takes as input)

 Yes, the document describing the error should be available. I'd also like
 a link to the "freely available errata document" which I did not find. The
 X driver isn't documentation.

 Going on to the next part, I see you have a link to an AMD CS5536
 "datasheet". Again it is not immediately obvious that this is the document
 I might want to read, and I can't quickly check with my web browser. Until
 I open the document, I don't know that audio is included. Actually, I
 still don't know if this is in fact the audio that is in use on the XO; I
 recall something about a pair of audio chips with a special DC ability.
 I'll assume (bad) that the IDE and floppy are totally unused... though
 perhaps you used floppy signals as GPIO.

 Division of duties between SMM/SMI on the CPU, the CS5536, and the KB3700
 is mentioned. It appears that all 3 are capable of handling writes to the
 keyboard port. From additional examination of all 3 documents it may turn
 out that this is not the case, but that could involve some guessing about
 how the XO is wired up.

 I have yet to find out what the EC firmware is using all those timers for,
 if anything, or even what the EC firmware does at all. I notice a second
 set of audio hardware, but of course it might not be connected on the XO.

 DRAM is normally examined/configured at boot via an I2C bus. I see no
 mention of how to operate an I2C bus for this purpose, how to address the
 DRAM chips, or what can be done with the DRAM chips.

 The "BIOS" really isn't a BIOS, but anyway... no mention is made of where
 the various things are located in the SPI-interface flash. (the addresses)
 Perhaps this is implicitly documented in a linker script somewhere (poor),
 but there isn't even a link to the firmware source.

 Mass storage is mentioned. There is no mention of how to program it. I'd
 need to know the erase block size, the level of hardware-provided error
 correction (none?) and expected error rates, the addresses of various
 hardware registers, the ability to DMA or memory-map the storage, if
 software would see an erase as setting all 0 bits or all 1 bits, if it
 shows up on PCI or as an undiscoverable object in the address space, etc.
 This part is almost 100% undocumented.

 There is no whitepoint provided for the display. There are no CIE-XYZ
 coordinates for the primary colors, nor any light spectrum info
 (intensity, spread, diffusion, distortion, cut-offs at red and blue) that
 might help us to guess.

 Non-linearity of the display is not discussed. An LCD is not like a CRT,
 but normally it is not perfectly linear either. An equation would be good.

 What is the color of the most upper-left pixel? What is the color of the
 one to the right of that? What is the color of the pixel below the most
 upper-left one?

 "quincunx-sampled" is probably a bad term to use. It's been used for a
 red/green checkerboard of addressible pixels (shape: 5-sided as a square
 with one corner cut off) with blue squares (45-degree orientation)
 whereever odd-numbered vertical wires meet odd-numbered horizontal wires.

 On to the DCON, It's not clear if
 git://git.infradead.org/users/jcrouse/geode.git is Verilog, VHDL, or only
 a Linux kernel driver. I'd rather not download the whole thing to find
 out, but I'll guess it's just a driver. Drivers are not documentation. Web
 browsers don't support git.

 /sys/devices/platform/dcon/output is documented as a color/mono switch.
 That looks like the driver and/or hardware prevents me from sending
 unmangled data to the display. I can assume (very bad!) that "color" mode
 will average the value of a pixel with the values of 4 neighbors, and that
 "mono" mode will perform some undocumented color-to-greyscale
 approximation. It appears that I can't just make a green pixel use my
 green data, which would allow me to do any desired anti-aliasing in
 software. This isn't at all clear though, and I certainly don't know if
 the apparent limitation is driver-related or hardware related.
 DCONIOC_SETREG is mentioned, but, um, forget anything? There is no mention
 of the actual DCON registers.

 The keyboard connection is not mentioned. It could be PS/2... or not.

 The touchpad connection is also not mentioned. Worse yet, the protocol is
 not mentioned. Do we get raw uncalibrated data? Is it some well-known PS/2
 protocol? How can we tell what mode the touchpad is in? Do we get pressure
 data in either mode? If so, with what range of values and how linear is
 it?

 The directional pad and game keys show up exactly how? As a USB HID
 device? As an old-style PC joystick? As an SMI and a pollable I2C
 location? As status lines for the otherwise unused floppy device? I can
 think of other ways until I die of old age.

 Ah, it looks like the AD1888 and SSM2211 are used for sound. That's about
 the 3rd audio device. Well, there are 6 different AD1888 parts, but they
 seem to be the same from software. The connection between the AD1888 and
 SSM2211 is not documented; I might guess (bad!) that LINE_OUT_L and
 LINE_OUT_R are the connection and that max output power causes no
 distortion or damage. A link to the AC'97 spec would have been helpful; it
 is an implied part of the AD1888 documentation. I haven't any clue how the
 microphone or external jack might be connected.

 Marvell stuff is a well-known problem. There has been a suggestion that
 only an embedded RTOS must remain secret, yet the rest of the firmware has
 not been released. This is suspicious. Of course, with proper hardware
 documentation, we could just write our own firmware. From
 http://wiki.laptop.org/go/Libertas_Boot2_Flash I can guess that this
 device is on an internal USB connection. I hear than an ARM9 chip is
 there, but there is no list of supported instructions. To even plan the
 creation of a replacement RTOS, we need some basic info. There is no
 mention of DMA or MMU features, but it isn't reasonable to just assume
 that neither one exists. I wonder if there are restrictions on where the
 CPU can access code and data; perhaps it is a Harvard Architecture design.
 Perhaps the ARM9 core can execute instructions from the 128 MB of main
 system RAM. Perhaps there is only DMA access to the main system RAM, under
 full control of the ARM9 or more controlled by the main system CPU.

 There is no programming info for the status indicators. Probably they are
 connected to GPIO pins on various random unrelated chips. The back-light
 control button isn't even mentioned, never mind documented.

 The video camera chipset isn't even mentioned. It could be PCI, USB, or
 some custom hack. I don't know the model of the camera. I don't know if
 the camera is fully self-contained or if there is a controller of some
 kind. All I know is "640x480 resolution, 30FPS". I can't do anything with
 that.

 The microphone has a "selectable sensor-input mode". How do I select?
 (what memory address, what value...) The expected kernel-level interface
 and Sugar-level interface are also of interest.

 The SD Card slot shows up exactly how? I think it's on the DCON, but that
 isn't mentioned. Does it get a PCI function or device number to itself? I
 get zero information about how to operate the device or even detect that
 it exists. A link to the SD Card spec is needed as well.

 Is there an interface to the battery? Can I measure power usage for any
 parts of the laptop? (this would be really nice for finding gcc options
 for power-efficient code) Well, if so, how? I need to know what GPIO pins
 (or whatever) are used, and how to correctly interpret/operate them. BTW,
 I'd rather not need to bounce from spec to spec.

 The LinuxBIOS link goes to a generic LinuxBIOS site. You don't link to
 your build options, patches, linker scripts, flash tools, etc. There isn't
 even a link for Open Firmware.

-- 
Ticket URL: <http://dev.laptop.org/ticket/976#comment:2>
One Laptop Per Child <http://laptop.org/>



More information about the Bugs mailing list