|
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.
|