Handhelds.org splash banner Handhelds.org logo by Chrysovalandes Sophocleous
Linux on HP iPAQ H3900

The H3900 is based on the Xscale pxa250 chip and roughly the same peripherals as the H3800.

For more information on the recent work on supporting the h39xx in Linux 2.6, see the wiki page.

Things that work

The h3900 is supported by Familiar 0.7.2 and later versions.

Here is the progress:

01/15/2003:
Audio playback is working.
12/20/2002:
Coded most of the h3900-uda1380 audio driver.
12/16/2002:
Added support for timing_increment_ns, now more pcmcia cards work. Jamey
Generate
11/14/2002:
Suspend and resume now seems to work. Phil Blundell.
Basically everything except MMC and sound is working now.
11/12/2002:
Phil reports that PCMCIA is working. Claims that the PXA250 PCMCIA errata made it unusable seem to have been exaggerated, although certainly some cards will not work with rev B pxa250 silicon.
11/6/2002:
Kicked off the frequency change so that CPU is running faster than bus speed (400MHz instead of 100MHz). Phil Blundell.
11/5/2002:
Displayed an image on the LCD and can control front light. Phil Blundell.
9/9/2002:
Kernel mounted a filesystem. Jamey Hicks
9/6/2002:
Kernel started booting. Crashes sometime after console_init(). Jamey Hicks.
8/23/02:
bootldr can read jffs2, and jump into kernel. Brian Avery.
zImage unzips itself, nothing after that. Jamey Hicks.
7/23/02:
jflash can erase and program flash. Brian Avery.
7/29/02:
BootBlaster can erase flash. Brian Avery.
7/24/2002:
BootBlaster can read flash on the H3900. Brian Avery
BootBlaster can read flash on the H3900 remotely controlled via ActiveSync. Sean Godsell

Things left to do (in no particular order)

Before we ported the bootldr to the H3800, we discovered that since PocketPC was initializing the memory controller, etc., that PocketPC would boot even if the firmware partition of flash was erased. So the strategy we took was to make sure we could jump to PocketPC from the bootldr in as few instructions as possible. The bootldr will jump to PocketPC without doing anything else if PocketPC is installed unless the action button is pressed (the center of the joypad) while the unit is reset.

BootBlaster

Brian Avery and Sean Godsell have started to work on this. 7/18/2002.
  • Get BootBlaster running on H3900. done 7/24/2002
  • Detect H3900 machine type done 7/24/2002
  • Dump all cotulla memory and peripheral controller registers done 7/26/2002
  • Read firmware from H3900 (and pass to bootldr team to disassemble) done 7/24/2002
  • Read all of flash for backup (48MB in two segments at CS0 and CS1)
  • Update code to enable VPPEN so flash can be erased and written. done 7/29/2002
  • Write new bootldr to flash.  done 8/5/2002

Bootldr

Vaibhav Bhandari (vaibhav@east.isi.edu) has volunteered to work on this. 7/22/2002.
  • Increment major version to 2.19.x done
  • Allocate H3900 machine type for Linux. done 7/24/2002
  • Update PocketPC signature to match PocketPC image on H3900 done
  • First pass conditionalizing on h3900 (done)
  • Add xscale support to boot-pxa250.s mostly done?
  • Need pxa250.h equiv of sa1100.h initial pass done
  • DRAM and onchip peripheral initialization dram done
  • Fix memory region addresses in bootconfig.h.done
  • Fix cache support in bootldr so that jffs2 scan will be fast but kernel will stil boot

JTAG

From the schematics, it looks like U102 is an unpopulated JTAG connector. U102 is kind of a card edge connector, right next to the battery connector. 12 big pads along the edge on the CPU side of the board, 12 big pads on the other side. Even pins on the CPU side of the board, with pin 2 near the SD slot end and pin 24 near the cradle end. Odd pins on the other side, pin 1 near the SD slot end and pin 23 near the cradle end.

CPU Jtag is available on these pins:

  • pin1: TCK
  • pin3: TDI
  • pin5: TDO
  • pin7: TMS
  • pin9: TRST#
  • pin12: ground
  • pin23: vstandby

    IMPORTANT:
            For the JTAG Programming to work the TRST# line must be tied high.  I jumper it to Vstanby on my setup.

There is a connector available for this: www.suyin.com.tw 12751S-24G2 (24 pin). I am trying to obtain some of these. -Jamey

JTAG tasks

  • Locate cotulla version of jflash.  done 8/15/2002 -- in cvs as jflash_pxa_linux
  • Add code to enable VPPEN on H3900. done 8/15/2002 -- in cvs as jflash_pxa_linux

Linux Kernel

Most of the peripherals are the same as on the H3800. Here are some known differences:
  • Allocate H3900 machine type for Linux. Value is 203.done 7/24/2002
  • Allocate iPAQ3 (h5400) machine type for Linux. Value is 220.done 8/22/2002
  • Implement arch/arm/mach-pxa/ipaq.c. h3900 parts done
  • Decide on strategy for arch/arm/mach-sa1100/*.c files used for h3900.
  • Decide on strategy for include/asm-arm/arch-sa1100/*.h files used for h3900. include asm/arch-sa1100/h3600*.h
  • Check all machine_is_h3xxx() and machine_is_h3800() calls done
  • Implement GPIO support for h3900. done
  • Update HAL support for h3900 done
  • Display: pxafb, decode wince regdump and fill in values for h3900 first cut done
  • LCD: turn on power to LCDdone
  • control frontlightdone
  • PCMCIA: drivers/pcmcia/pxa/*.c done
  • Update bluetooth drivers. done
  • Sound: UDA1380 instead of UDA1341.in progress: h3900-uda1380
  • SD/MMC: Uses Toshiba SD and SDIO core in ASIC3. Rumor has it specs and Linux drivers are available for this.

ASIC3

Known Problems

The pxa250 RTC registers are reset to zero by any reset other than a wakeup from sleep. Rebooting the ipaq will reset the system clock to Jan 1, 1970.

If the ipaq is suspended during charging, the LED will go on flashing indefinitely even when the battery is full.

Other notes

Optimising for Xscale

The xscale is instruction-set compatible with strongarm, but some things that perform well on strongarm will perform badly on the xscale. In particular, multi-word load and store instructions run slowly on xscale. These are used in the standar procedure call prolog and epilog, so all user-mode applications will have to be recompiled in order to perform well on xscale. Both Debian and Handhelds.org have plans to do this for their respective distributions. It is possible that xscale binaries will perform will in both time and space and so we can standardize on binaries optimized for xscale. If not, we will perform dual builds in order to support both strongarm and xscale.

Debian's gcc-3.2 defaults to -march=armv3 -mtune=xscale, which seems to give a good compromise between compatibility and performance. When building Familiar-specific binaries, where ARM7 compatibility is not important, -march=armv4 -mtune=xscale may be more appropriate.

This patch for gcc 3.2 improves the behaviour of -mtune=xscale somewhat. It is already included in the Debian package.

Both the kernel and glibc include a certain amount of assembler code that would benefit from being tuned for XScale. If you enjoy that kind of thing and would like to help out, get in touch with ipaq@handhelds.org.



$Id: h3900.html,v 1.33 2006/11/23 04:30:54 joshua Exp $