ARM Linux on Assabet

Image of Assabet illustrating location of base station and connectors This page describes a method for installing ARM Linux on the Intel Assabet (SA-1110 evaluation) board. This page is not a substitute for the Intel documentation; rather, it is intended to point out the items which may be of interest to Linux developers. Please consult the Intel® StrongARM® SA-1110 Microprocessor Development Board User's Guide (order number 278278-005) before acting on any information presented here.


Introduction

An overview of Linux running on the Intel Assabet board is currently scheduled to be published as part of the ICES Technical Report series later this year. The document is available online, and may serve as a good introduction to the hardware for new kernel developers.
assabet-linux-report.ps (html)
950 kilobytes - released: 11 September, 2000
Technical report describing the port of ARM Linux to the Assabet board.

Hardware Setup

The behavior of the hardware, bootloader, and kernel can vary based on the presence of the SA-1111 Microprocessor Development Module, Neponset. If you will be using this board with Assabet, be sure to read the Neponset-specific sections below.

  1. Preparing the Board

    Perhaps to help dull product VPs along the path to the realization, "hey, this StrongARM could work in a PDA!", Intel has cleverly packaged Assabet to look like a bulky palmtop. As an engineer, you are unswayed by such fashionable trappings, so feel free to rip all of that plastic off. You won't need the Li-Ion battery, and you may wish to remove the LCD/touchscreen. Obviously, the LCD data and resistive touchscreen cables are fragile; be gentle when removing the fasteners on the board receptacles. A bare Assabet appears in figure 1. (You'll appreciate this after you've hit the reset switch enough times.)

Image of Assabet illustrating StrataFlash, reset, and LEDs
  1. Install Angel

    Your board may have a copy of a WindowsCE bootloader pre-installed. You can determine whether this is the case or not by opening the StrataFlash sockets and examining the labels on each memory component. The recommended process for manipulating the memories is documented in the User's Guide, §2.3.

    Begin by removing all power from the board, and removing the jumper for the master power clip (if installed), as shown in figure 2. Socket E11 is the part labelled StrataFlash in this figure; open it by sliding the middle panel away from the notch ("down" in the figure), then lifting the doors. (A similar procedure applies to socket E12, directly opposite on the other side of the board.)

    The WindowsCE parts have a label similar to, "WinCE E- Boot V3.0 L". ("L" will be installed in the socket shown in figure 2, "H" on the other side.) Remove these parts with the suction part selector (looks like a pen, comes in a tube). Replace them with the parts labelled, "Angel DB1110B 207D L" (again, "L" on the side shown in figure 2, "H" on the other).

  1. Power and Serial Connections

    Power, JTAG, RS232, and POTS connections are all made through a custom 14-pin header named "base station" in the board documentation. This header and the cables which mate with it are shown in figure 1. Connect the serial cable to your development workstation. On the SA-1110, this header is attached to serial port 1.

    When power is applied, LED D4 (green, rightmost LED in figure 2) will illuminate. Angel will then activate LED D8 (green, next to D4). After interrupts have been initialized, Angel will strobe LED D9 (red, next to D8) four times. The reset sequence is described in more detail in the file DB1110_diag.txt, included with the Angel distribution.

  2. Install Neponset

    The SA-1111 Development Module attaches using either of the two 140-pin connectors found on Assabet. Test points, switches, and other components on both boards are more easily accessible if Neponset is mounted in the manner shown in figure 3.

    Note the settings of switchpack SW2, as these affect port selection, bus speed, and other important parameters. The switch meanings are documented in the file readme.txt in the Angel distribution, but are briefly summarized here.

    switch off on
    SW2-1reserved
    SW2-2reserved
    SW2-3 debug port is UART3 debug port is UART1b (on Neponset)
    SW2-4 bus speed is 103MHz bus speed is 51MHz (clamped to 51MHz if PLL==147MHz)
    SW2-5 flash device page mode enabled flash device page mode disabled
    SW2-6 Angel fast boot mode Angel debug mode (see DB1110_diag.txt)
    SW2-7 PLL==206MHz PLL==147MHz
    SW2-8 boot from flash on Neponset boot from flash on Assabet

    In general, all switches can be left in the off position, except for SW2-8, which can be left on.

Image of Neponset illustrating switchpack SW2 and SMC91C96
Image of Neponset illustrating various ports, slots, and jumpers
  1. Fixing Neponset

    Unforunately, many copies of Neponset contain a show-stopping bug involving the on-board Philips UDA1341 audio codec. The bug involves the L3 MODE signal coming from the SA-1111, which is available from the dual-function pin PWM1. Phase 4 Neponset boards incorrectly route this signal to PWM0, thus preventing any configuration of the codec from software. These boards actually include a green jumper wire from a lifted pad on the UDA1341 (the MODE pin) to J7, marked in figure 4. An examination of the schematics (sheet 9 o 11) reveals that J7 is attached to... PWM0.

    Fortunately, there is a simple fix. Unsolder the jumper wire at J7, and move it to the immediately adjacent J4. (If you orient the board as it appears in figure 4, you'll be moving the wire to the pin directly to the right of where it is when attached to J7.)

Firmware Setup

It is possible to modify the contents of the StrataFlash memories without the use of an external programmer. This capability, offered through the JTAG lines in the base station header, can be convenient for bootloader developers, or for users who have accidentally corrupted their only copy of Angel. =) (If neither of these describe you, feel free to skip to the next section.)

  1. Power and JTAG Connections

    Attach the custom 14-pin connector to the base station, as shown in figure 1. Attach the 25-pin parallel connector to an available parallel port on your development workstation. Connect the power supply to the base station.

  2. Programming

    Intel provides a win32 JTAG programming utility, which has been ported to Linux by Nicolas Pitre:

    Both versions include a copy of Angel (Angel.bin), and autosense for available parallel ports.

Software Setup

Because there is a fair amount of overlap between the setup procedure for previous boards and that for Assabet, this page does not attempt to address topics such as cross-compiler building. Please refer to the following documentation: The following material assumes a working build environment. In general, a toolchain which works for the SA-1100 should be fine on the SA-1110. Specifically, the 1110 is an instance of the ARM v4 architecture. When running the kernel described below, it operates in little endian mode; therefore, the toolchain target should be armv4l.
  1. Obtaining the Kernel Source

    Support for Assabet and Neponset is included in the 2.5 kernel series via the ARM Linux project. Please note, new kernel releases appear more frequently than do updates to this page; always check for the latest updates.

    [check for newer release]
    [check for newer release]

    The file linux/Documentation/arm/SA1100/Assabet contains build instructions for the kernel.

  2. Errata

    No errata remain outstanding at this time.

  3. Loading the Kernel

    Probably the easiest way to boot Assabet is by using Nicolas Pitre's angelboot utility. The following .angelrc configuration is compatible with the current patch:

    device /dev/ttyS0
    options "9600 8N1"
    baud 115200
    image arch/arm/boot/zImage
    base 0xc0008000
    entry 0xc0008000
    otherfile ramdisk_img.gz
    otherbase 0xc0800000
    r0 0x00000000
    r1 0x00000019
    exec minicom
    
    The ramdisk referred to in the configuration was also assembled by Nicolas Pitre. A ramdisk which includes PCMCIA support as well as some additional tools is available here.

    Please verify that your terminal package is configured for the correct serial device at 9600bps, 8 data bits, no parity, 1 stop bit, and no flow control. For minicom, these items may be configured by invoking the program as minicom -s, then selecting the Serial port setup menu item.

    If you compiled in LED support when you built your kernel, you should see LED D8 strobing regularly after boot, and LED D9 illuminating during system activity. If you compiled in support for frame buffer devices, you should see Tux on the LCD console.

  4. Bleeding Edge

    Support for Assabet and Neponset in the handhelds.org bootldr is available here.

    linux-2.5.5-rmk1-jd1.patch.gz
    5.7 kilobytes - released: 7 March, 2002
    (ARM Linux patches 1044/1, 1045/1, and 1046/1.) Resubmit of momentary switch driver, first attempt corrupted by mailer.

    Customizable use of the Assabet momentary switches is now available via switchd.

  5. Obsolete Items

    Artifacts here appear for posterity only; please use more recent patches as a basis for development work.

    linux-2.5.0-rmk4-jd1a.patch.gz
    5 kilobytes - released: 21 December, 2001
    (ARM Linux patch 844/1.) Updates switch support for new UCB1x00 framework, provides support for Spot, Assabet, Neponset.

    linux-2.4.9-ac9-rmk1-np1-jd1.patch.gz
    4 kilobytes - released: 11 September, 2001
    Adds support for UCB1200 driver framework to SA-1100 switches driver.

    linux-2.4.3-rmk1-np1-jd1.patch.gz
    1 kilobyte - released: 17 April, 2001
    Adds support for PCMCIA timing adjustment during processor core clock scaling.

    linux-2.4.0-test10-rmk2-np2-jd1.patch.gz
    2.9 kilobytes - released: 21 November, 2000
    Fixes "bad mode in prefetch abort handler" bug and card detect event mask bug in socket driver.

    linux-2.4.0-test9-rmk2-np3-jd2.patch.gz
    13.6 kilobytes - released: 9 November, 2000
    Cleanup of SA-1100 socket driver (again). Addresses iPAQ H3600 Vcc issues.

    linux-2.4.0-test9-rmk2-np3-jd1.patch.gz
    9.4 kilobytes - released: 7 November, 2000
    Major cleanup of SA-1100 PCMCIA socket driver.

    linux-2.4.0-test9-rmk1-np2-jd1.patch.gz
    10 kilobytes - released: 26 October, 2000
    SA-1111 SAC support for UDA1341 driver, again. Neponset PCMCIA fixes, courtesy of George Davis. SA-1100 switches userland filesystem interface and interim UCB1300 support.

    linux-2.4.0-test9-rmk1-np1-jd1.patch.gz
    8 kilobytes - released: 19 October, 2000
    SA-1111 SAC support for UDA1341 and SA-1100 DMA drivers, again. Relies on ZONE_DMA support from 2.4.0-test9-rmk1-np1, not kernel relocation approach from 2.4.0-test8-rmk4-np3-jd2.

    linux-2.4.0-test8-rmk4-np3-jd2.patch.gz
    10 kilobytes - released: 6 October, 2000
    ZONE_DMA/kernel relocation fix for SA-1111 DMA bug. Includes magic SysRq-style debug switch driver. Contains consistent_alloc() fix by Nicolas Pitre.

    linux-2.4.0-test8-rmk4-np3-jd1.patch.gz
    8 kilobytes - released: 1 October, 2000
    Interim fix for SA-1111 DMA bug in UDA1341 driver.

    linux-2.4.0-test8-rmk2-np3-jd1.patch.gz
    6.4 kilobytes - released: 26 September, 2000
    SA-1111 SAC-related changes for the UDA1341 driver and SA-1100 DMA code (again). 32kHz and 44.1kHz sampling rates now supported on UDA1341. Warning: playback causes segmentation faults and other catastrophic errors; this appears to affect 2.4.0-test8-rmk2-np1 through -np3, but was not observed in -rmk1.

    linux-2.4.0-test8-rmk1-np1-jd1.patch.gz
    12 kilobytes - released: 11 September, 2000
    IRQ and memory allocation fixes to PCMCIA socket driver, updates SA-1111 Serial Audio Controller to match changes in SA-1100 DMA API. Intermittent audio corruption on playback observed. Does not yet address known hardware bugs in SA-1111 DMA.

    linux-2.4.0-test6-rmk5-np2-jd1.patch.gz
    3.8 kilobytes - released: 29 August, 2000
    Removes static memory mappings for PCMCIA I/O, attribute, and common memory spaces. Replaces with on-demand mapping.

    linux-2.4.0-test5-rmk1-np1-jd1.patch.gz
    9.2 kilobytes - released: 2 August, 2000
    Introduces early support for the SA-1111 Serial Audio Controller to the UDA1341 driver. Recording and playback using DMA transfers are functional, but occasional DMA lockups and audio corruption are present.

    linux-2.4.0-test2-ac1-rmk2-np3-jd1.patch.gz
    527 bytes - released: 14 July, 2000
    Corrects Neponset kernel configuration omission and serial driver parity bug.

    linux-2.4.0-test1-ac7-rmk1-np6-jd1.patch.gz
    292 bytes - released: 16 June, 2000
    Corrects interrupt handling problem on the SA-1111 which can cause system lockup.

    linux-2.3.99-pre8-rmk1-np5-jd1.patch.gz
    10 kilobytes - released: 30 May, 2000
    Boot-time detection of Neponset (in kernel and in decompressor), Neponset serial port setup (console on UART3), Neponset LEDs. Supports SA-1111 RAB clocking, SA-1111 interrupt handling, and SA-1111 PCMCIA (using the MAX1600 power controller). Minor fix for IRQ "0" assignment for PCMCIA client drivers.

    linux-2.3.99-pre8-rmk1-np5-jd1a.patch.gz
    512 bytes - released: 30 May, 2000
    Patch to pcnet_cs for use on Neponset only. Programs Socket LP-E CF+ card to perform DMA transfers in byte mode rather than word mode. Do not use on standalone Assabet.

    linux-2.3.99-pre3-rmk1-np3-assabet1.patch.gz
    142 kilobytes - released: 13 April, 2000
    Initial release. Kernel boots, but serial output ceases following userland startup. Supports on-board LEDs, begins nomenclature change from "SA-1100" to "SA-11x0".


(old) main · group · software · itsy · spot This work sponsored by the National Science Foundation.
Updated 7 March, 2002 - <john+@cs.cmu.edu>