Completed Projects

Booting Linux

Many thanks to Nikolay Petukhov ! Thanks to his TT2 kernel, I first booted Linux on my Palm. I downloaded his 'garux_usb.prc' kernel (also here), took my favorite binary editor to transform the TT2 hardware check into a TT1 check and it booted perfectly ! (find the 1st '0x00 0x32' sequence and replace '0x32' by '0x31')

The palm once in its cradle, the CDCEther module should load and you will ping the Palm on 192.168.5.31. I then telneted to it and played a little as you can see on the logs below. The only difference between the TT1 and the TT2 seems to have been detected properly: 16MB of RAM instead of 32MB.

My kernel, initrd, and sources are available here.

Notes: root password = root, you can mount NFS FS with 'mount 192.168.5.1:/tmp /mnt -o nolock,nfsvers=2'

~ # cat /proc/version 
Linux version 2.6.11-omap1-palmtt2 (root@red.localdomain) (gcc version 3.4.4 20041218 (prerelease) (Debian 3.4.3-1)) #19 Tue Nov 1 20:20:35 CET 2005

~ # free
total used free shared buffers
Mem: 14456 2272 12184 0 0
Swap: 0 0 0
Total: 14456 2272 12184

~ # ps
PID Uid VmSize Stat Command
1 root 172 S init
2 root SWN [ksoftirqd/0]
3 root SW< [events/0]
4 root SW< [khelper]
9 root SW< [kthread]
16 root SW< [kblockd/0]
43 root SW [pdflush]
44 root SW [pdflush]
46 root SW< [aio/0]
45 root SW [kswapd0]
710 root 208 S /bin/sh /etc/init.d/rcS
713 root 220 S /bin/sh /etc/init.d/rcS
727 root 156 S /sbin/getty -L ttyS2 57600
728 root 112 S /sbin/telnetd
729 root 248 S -sh
732 root 264 R -sh

~ # dmesg
Linux version 2.6.11-omap1-palmtt2 (root@red.localdomain) (gcc version 3.4.4 20041218 (prerelease) (Debian 3.4.3-1)) #19 Tue Nov 1 20:20:35 CET 2005
CPU: ARM925Tid(wt) [54029152] revision 2 (ARMv4T)
CPU0: D VIVT write-back cache
CPU0: I cache: 16384 bytes, associativity 2, 16 byte lines, 512 sets
CPU0: D cache: 8192 bytes, associativity 2, 16 byte lines, 256 sets
Machine: Generic OMAP1510/1610/1710
Warning: bad configuration page, trying to continue
Memory policy: ECC disabled, Data cache writethrough
OMAP_DIE_ID_0: 0x4f8d0b12
OMAP_DIE_ID_1: 0xb718c83c DIE_REV: 12
OMAP_PRODUCTION_ID_0: 0x00000000
OMAP_PRODUCTION_ID_1: 0x00000000 JTAG_ID: 0x0000
OMAP32_ID_0: 0x03310115
OMAP32_ID_1: 0x3b47002f
JTAG_ID: 0xb470 DIE_REV: 12
OMAP1510 revision 12 handled as 15xx id: b718c83c4f8d0b12
On node 0 totalpages: 4096
DMA zone: 4096 pages, LIFO batch:1
Normal zone: 0 pages, LIFO batch:1
HighMem zone: 0 pages, LIFO batch:1
Built 1 zonelists
Kernel command line: rw mem=16M console=tty0
Total of 64 interrupts in 2 interrupt banks
PID hash table entries: 128 (order: 7, 2048 bytes)
Console: colour dummy device 80x30
Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)
Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)
Memory: 16MB = 16MB total
Memory: 14184KB available (1401K code, 314K data, 248K init)
Calibrating delay loop... 59.80 BogoMIPS (lpj=299008)
Mount-cache hash table entries: 512 (order: 0, 4096 bytes)
CPU: Testing write buffer coherency: ok
NET: Registered protocol family 16
DMA support for OMAP1510 initialized
OMAP1510 GPIO hardware
Initializing OMAP McBSP system
USB: hmc 0, usb0 2 wires (dev)
NetWinder Floating Point Emulator V0.97 (double precision)
omapfb: configured for panel generic1510
OMAP LCD controller initialized.
Console: switching to colour frame buffer device 80x53
OMAP framebuffer initialized vram=262144
Serial: 8250/16550 driver : 1.90 $ 4 ports, IRQ sharing disabled
ttyS0 at MMIO 0xfffb0000 (irq = 46) is a ST16654
ttyS1 at MMIO 0xfffb0800 (irq = 47) is a ST16654
ttyS2 at MMIO 0xfffb9800 (irq = 15) is a ST16654
io scheduler noop registered
RAMDISK driver initialized: 8 RAM disks of 4096K size 1024 blocksize
udc: OMAP UDC driver, version: 4 October 2004 (iso) (dma)
udc: OMAP UDC rev 2.5
funx_mux_ctrl_0:f040040
Mod_conf_ctrl_0:b208000
udc: hmc mode 0, transceiver (unknown)
udc: fifo mode 3, 648 bytes not used
usb0: Ethernet Gadget, version: Equinox 2004
usb0: using omap_udc, OUT ep2out-bulk IN ep1in-bulk STATUS ep3in-int
usb0: MAC de:61:02:71:63:02
usb0: HOST MAC 32:d9:25:6e:f8:53
mice: PS/2 mouse device common for all mice
NET: Registered protocol family 2
IP: routing cache hash table of 512 buckets, 4Kbytes
TCP established hash table entries: 1024 (order: 1, 8192 bytes)
TCP bind hash table entries: 1024 (order: 0, 4096 bytes)
TCP: Hash tables configured (established 1024 bind 1024)
NET: Registered protocol family 1
NET: Registered protocol family 17
Freeing init memory: 248K
udc: USB reset done, gadget ether
usb0: full speed config #1: 100 mA, Ethernet Gadget, using CDC Ethernet


/proc # cat cpuinfo
Processor : ARM925Tid(wt) rev 2 (v4l)
BogoMIPS : 59.80
Features : swp half thumb
CPU implementer : 0x54
CPU architecture: 4T
CPU variant : 0x0
CPU part : 0x915
CPU revision : 2
Cache type : write-back
Cache clean : cp15 c7 ops
Cache lockdown : not supported
Cache format : Harvard
I size : 16384
I assoc : 2
I line length : 16
I sets : 512
D size : 8192
D assoc : 2
D line length : 16
D sets : 256

Hardware : Generic OMAP1510/1610/1710
Revision : 15100015
Serial : 4f82342342b718c83c

What's next ? Nothing :-( The Tungsten has not enough flash and RAM to be usable under Linux. So, wait for the next PalmOS/Linux device or buy a Zaurus!



TT Processor info

A TI OMAP 1510 was used for the Palm Tungsten T which has two processors inside: one ARM 925T CPU (300 MIPS at 144 MHz), and a TI C55x DSP with up to 400 MIPS at 200 Mhz !

Here are the details:

TMS320C55x DSP Core

  • Up to 200 MHz (maximum frequency)
  • One/two instructions executed per cycle
  • 32K x 16-bit on-chip dual-access RAM (DARAM) (64 KB)
  • 48K x 16-bit on-chip single-access RAM (SARAM) (96 KB)
  • 16 KB I-cache, 8 KB D-cache
  • Video hardware accelerators for DCT, iDCT, pixel interpolation, and motion estimation for video compression

TI925T ARM9TDMI Core

  • Up to 175 MHz (maximum frequency)
  • 16KB I-cache; 8KB D-cache
  • 192-KB of shared internal SRAM - frame buffer
  • Support for 32-bit and 16-bit (Thumb mode) instruction sets for increased code density
  • Data and program MMUs
  • Two 64-entry translation look-aside buffers (TLBs) for MMUs
  • 17-word write buffer

Memory Traffic Controller (TC)

  • 16-bit EMIFS external memory interface
  • 16-bit EMIFF external memory interface

9-Channel System DMA Controller
Digital Phase-Locked Loop (DPLL) for MPU/DSP/TC Clocking Control
Comprehensive Power-Saving Modes for MPU/DSP/TC
IEEE Standard 1149.1 (JTAG) Boundary Scan Logic
Application Subsystem

  • Three 32-bit timers and watchdog timer 
  • 32-kHz timer
  • Level1/Level2 interrupt handlers
  • USB1.1 host interface with up to 3 ports
  • USB1.1 function interface
  • One integrated USB transceiver for either host or function
  • Multichannel buffered serial port (McBSP)
  • I2C master and slave interface
  • Micro-wure serial interface
  • MMC/SD interface
  • HDQ/1-wire interface
  • Camera interface for CMOS sensors
  • ETM9 trace module for TI925T debug
  • Keyboard matrix interface (6 x 5 or 8 x 8)
  • Up to 10 MPU general-purpose I/Os 
  • Pulse-width tone (PWT) interface
  • Pulse-width light (PWL) interface
  • Two LED pulse generators
  • Real-time clock
  • LCD controller with dedicated system DMA channel
  • Two multichannel buffered serial ports
  • Two multichannel serial interfaces
  • Three UARTs (one supporting SIR mode for IrDA)
  • Four interprocessor mailboxes
  • Up to 14 shared general-purpose I/Os

Photo

Gnome calendar on the TT

What's inside ?

You'll find nice take apart instructions here.

Documentation

ARM 925T documentation : http://www.arm.com

TI C5xx DSP : http://focus.ti.com/docs/prod/folders/print/omap5910.html ?

OMAP 1510 Peripherals : no real documentation found !

MontaVista has made Linux Kernel patches to run Linux on the OMAP1510. You can look at the source and learn at ftp://source.mvista.com/pub/omap/2.4/.

Also the OMAP5910's datasheet can be useful. It can be downloaded here or there.

Another Linux OMAP Page: http://www.muru.com/linux/omap/ and a bitkeeper tree which seems to be active: http://linux-omap.bkbits.net/

Linux on Tungsten project: http://www.likid.org/palm/