diff -uNr linux-2.6.5-orig/arch/arm/Kconfig linux-2.6.5/arch/arm/Kconfig --- linux-2.6.5-orig/arch/arm/Kconfig 2004-06-14 20:31:51.000000000 +0100 +++ linux-2.6.5/arch/arm/Kconfig 2004-06-14 20:33:06.000000000 +0100 @@ -500,7 +500,7 @@ config LEDS bool "Timer and CPU usage LEDs" - depends on ARCH_NETWINDER || ARCH_EBSA110 || ARCH_EBSA285 || ARCH_FTVPCI || ARCH_SHARK || ARCH_CO285 || ARCH_SA1100 || ARCH_LUBBOCK || ARCH_PXA_IDP || MACH_POODLE || ARCH_INTEGRATOR || ARCH_CDB89712 || ARCH_P720T + depends on ARCH_NETWINDER || ARCH_EBSA110 || ARCH_EBSA285 || ARCH_FTVPCI || ARCH_SHARK || ARCH_CO285 || ARCH_SA1100 || ARCH_LUBBOCK || ARCH_PXA_IDP || MACH_POODLE || MACH_HUSKY || ARCH_INTEGRATOR || ARCH_CDB89712 || ARCH_P720T help If you say Y here, the LEDs on your machine will be used to provide useful information about your current system status. @@ -513,8 +513,8 @@ system, but the driver will do nothing. config LEDS_TIMER - bool "Timer LED" if LEDS && (ARCH_NETWINDER || ARCH_EBSA285 || ARCH_SHARK || ARCH_CO285 || ARCH_SA1100 || ARCH_LUBBOCK || ARCH_PXA_IDP || MACH_POODLE || ARCH_INTEGRATOR || ARCH_P720T) - depends on ARCH_NETWINDER || ARCH_EBSA110 || ARCH_EBSA285 || ARCH_FTVPCI || ARCH_SHARK || ARCH_CO285 || ARCH_SA1100 || ARCH_LUBBOCK || ARCH_PXA_IDP || MACH_POODLE || ARCH_INTEGRATOR || ARCH_CDB89712 || ARCH_P720T + bool "Timer LED" if LEDS && (ARCH_NETWINDER || ARCH_EBSA285 || ARCH_SHARK || ARCH_CO285 || ARCH_SA1100 || ARCH_LUBBOCK || ARCH_PXA_IDP || MACH_POODLE || MACH_HUSKY || ARCH_INTEGRATOR || ARCH_P720T) + depends on ARCH_NETWINDER || ARCH_EBSA110 || ARCH_EBSA285 || ARCH_FTVPCI || ARCH_SHARK || ARCH_CO285 || ARCH_SA1100 || ARCH_LUBBOCK || ARCH_PXA_IDP || MACH_POODLE || MACH_HUSKY || ARCH_INTEGRATOR || ARCH_CDB89712 || ARCH_P720T default y if ARCH_EBSA110 help If you say Y here, one of the system LEDs (the green one on the @@ -529,7 +529,7 @@ config LEDS_CPU bool "CPU usage LED" - depends on LEDS && (ARCH_NETWINDER || ARCH_EBSA285 || ARCH_SHARK || ARCH_CO285 || ARCH_SA1100 || ARCH_LUBBOCK || ARCH_PXA_IDP || MACH_POODLE || ARCH_INTEGRATOR || ARCH_P720T) + depends on LEDS && (ARCH_NETWINDER || ARCH_EBSA285 || ARCH_SHARK || ARCH_CO285 || ARCH_SA1100 || ARCH_LUBBOCK || ARCH_PXA_IDP || MACH_POODLE || MACH_HUSKY || ARCH_INTEGRATOR || ARCH_P720T) help If you say Y here, the red LED will be used to give a good real time indication of CPU usage, by lighting whenever the idle task diff -uNr linux-2.6.5-orig/arch/arm/Makefile linux-2.6.5/arch/arm/Makefile --- linux-2.6.5-orig/arch/arm/Makefile 2004-06-14 20:31:51.000000000 +0100 +++ linux-2.6.5/arch/arm/Makefile 2004-06-14 20:33:06.000000000 +0100 @@ -54,8 +54,8 @@ tune-$(CONFIG_CPU_V6) :=-mtune=strongarm # Need -Uarm for gcc < 3.x -CFLAGS +=-mapcs-32 $(arch-y) $(tune-y) -mshort-load-bytes -msoft-float -Wa,-mno-fpu -Uarm -AFLAGS +=-mapcs-32 $(arch-y) $(tune-y) -msoft-float -Wa,-mno-fpu +CFLAGS +=-mapcs-32 $(arch-y) $(tune-y) -malignment-traps -msoft-float +AFLAGS +=-mapcs-32 $(arch-y) $(tune-y) -msoft-float #Default value DATAADDR := . diff -uNr linux-2.6.5-orig/arch/arm/boot/compressed/Makefile linux-2.6.5/arch/arm/boot/compressed/Makefile --- linux-2.6.5-orig/arch/arm/boot/compressed/Makefile 2004-06-14 20:31:52.000000000 +0100 +++ linux-2.6.5/arch/arm/boot/compressed/Makefile 2004-06-14 20:33:06.000000000 +0100 @@ -55,14 +55,18 @@ OBJS += head-xscale.o endif +ifeq ($(CONFIG_DEBUG_ICEDCC),y) +OBJS += ice-dcc.o +endif + SEDFLAGS = s/TEXT_START/$(ZTEXTADDR)/;s/LOAD_ADDR/$(ZRELADDR)/;s/BSS_START/$(ZBSSADDR)/ targets := vmlinux vmlinux.lds piggy piggy.gz piggy.o \ font.o head.o $(OBJS) EXTRA_CFLAGS := -fpic -EXTRA_AFLAGS := -traditional +EXTRA_AFLAGS := -LDFLAGS_vmlinux := -p -X \ +LDFLAGS_vmlinux := -p --no-undefined -X \ $(shell $(CC) $(CFLAGS) --print-libgcc-file-name) -T $(obj)/vmlinux: $(obj)/vmlinux.lds $(obj)/$(HEAD) $(obj)/piggy.o \ diff -uNr linux-2.6.5-orig/arch/arm/boot/compressed/head-xscale.S linux-2.6.5/arch/arm/boot/compressed/head-xscale.S --- linux-2.6.5-orig/arch/arm/boot/compressed/head-xscale.S 2004-06-14 20:31:52.000000000 +0100 +++ linux-2.6.5/arch/arm/boot/compressed/head-xscale.S 2004-06-14 20:33:06.000000000 +0100 @@ -52,6 +52,18 @@ mov r7, #MACH_TYPE_POODLE #endif +#ifdef CONFIG_MACH_CORGI +@ mov r7, #MACH_TYPE_CORGI + mov r7, #0xa7 + add r7, r7, #0x100 +#endif + +#ifdef CONFIG_MACH_HUSKY +@ mov r7, #MACH_TYPE_HUSKY + mov r7, #0xde + add r7, r7, #0x100 +#endif + #ifdef CONFIG_ARCH_IQ80310 /* * Crank the CPU up to 733MHz diff -uNr linux-2.6.5-orig/arch/arm/boot/compressed/head.S linux-2.6.5/arch/arm/boot/compressed/head.S --- linux-2.6.5-orig/arch/arm/boot/compressed/head.S 2004-06-14 20:31:53.000000000 +0100 +++ linux-2.6.5/arch/arm/boot/compressed/head.S 2004-06-14 20:33:06.000000000 +0100 @@ -10,6 +10,8 @@ #include #include +#define DEBUG 1 + /* * Debugging stuff * @@ -25,6 +27,12 @@ .macro writeb, rb str \rb, [r3, #0x160] .endm +#elif defined(CONFIG_DEBUG_ICEDCC) + .macro loadsp, rb + .endm + .macro writeb, rb + mcr p14, 0, \rb, c0, c1, 0 + .endm #elif defined(CONFIG_FOOTBRIDGE) .macro loadsp, rb mov \rb, #0x7c000000 @@ -67,6 +75,19 @@ .macro writeb, rb str \rb, [r3, #0x14] @ UTDR .endm +#elif defined(CONFIG_ARCH_IXP4XX) + .macro loadsp, rb + mov \rb, #0xc8000000 + .endm + .macro writeb, rb + str \rb, [r3, #0] +#elif defined(CONFIG_ARCH_LH7A40X) + .macro loadsp, rb + ldr \rb, =0x80000700 @ UART2 UARTBASE + .endm + .macro writeb, rb + strb \rb, [r3, #0] + .endm #else #error no serial architecture defined #endif @@ -332,11 +353,19 @@ mov r8, r0, lsr #18 mov r8, r8, lsl #18 @ start of RAM add r9, r8, #0x10000000 @ a reasonable RAM size - mov r1, #0x12 +@#ifdef CONFIG_CPU_XSCALE + mov r1, #0x02 +@#else +@ mov r1, #0x12 +@#endif orr r1, r1, #3 << 10 add r2, r3, #16384 1: cmp r1, r8 @ if virt > start of RAM - orrhs r1, r1, #0x0c @ set cacheable, bufferable +@#ifdef CONFIG_XSCALE_CACHE_ERRATA + orrhs r1, r1, #0x08 @ set cacheable, not bufferable +@#else +@ orrhs r1, r1, #0x0c @ set cacheable, bufferable +@#endif cmp r1, r9 @ if virt > end of RAM bichs r1, r1, #0x0c @ clear cacheable, bufferable str r1, [r0], #4 @ 1:1 mapping diff -uNr linux-2.6.5-orig/arch/arm/boot/compressed/vmlinux.lds.in linux-2.6.5/arch/arm/boot/compressed/vmlinux.lds.in --- linux-2.6.5-orig/arch/arm/boot/compressed/vmlinux.lds.in 2004-06-14 20:31:53.000000000 +0100 +++ linux-2.6.5/arch/arm/boot/compressed/vmlinux.lds.in 2004-06-14 20:33:06.000000000 +0100 @@ -47,7 +47,7 @@ .bss : { *(.bss) } _end = .; - .stack (NOLOAD) : { *(.stack) } + .stack : { *(.stack) } .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } diff -uNr linux-2.6.5-orig/arch/arm/mach-pxa/Kconfig linux-2.6.5/arch/arm/mach-pxa/Kconfig --- linux-2.6.5-orig/arch/arm/mach-pxa/Kconfig 2004-06-14 20:31:53.000000000 +0100 +++ linux-2.6.5/arch/arm/mach-pxa/Kconfig 2004-06-14 20:33:06.000000000 +0100 @@ -13,10 +13,23 @@ bool "SHARP Poodle" depends on ARCH_PXA +config MACH_CORGI + bool "SHARP Corgi (SL-C700)" + depends on ARCH_PXA + +config MACH_SHEPHERD + bool "SHARP Shepherd (SL-C750)" + depends on ARCH_PXA + +config MACH_HUSKY + bool "SHARP Husky (SL-C760)" + depends on ARCH_PXA + config SHARP_LOCOMO bool "SHARP LoCoMo support" default Y - depends MACH_POODLE + depends MACH_POODLE || MACH_CORGI || MACH_HUSKY + endmenu diff -uNr linux-2.6.5-orig/arch/arm/mach-pxa/Makefile linux-2.6.5/arch/arm/mach-pxa/Makefile --- linux-2.6.5-orig/arch/arm/mach-pxa/Makefile 2004-06-14 20:31:54.000000000 +0100 +++ linux-2.6.5/arch/arm/mach-pxa/Makefile 2004-06-14 20:33:06.000000000 +0100 @@ -9,12 +9,18 @@ obj-$(CONFIG_ARCH_LUBBOCK) += lubbock.o obj-$(CONFIG_ARCH_PXA_IDP) += idp.o obj-$(CONFIG_MACH_POODLE) += poodle.o +obj-$(CONFIG_MACH_CORGI) += corgi.o +obj-$(CONFIG_MACH_SHEPHERD) += corgi.o +obj-$(CONFIG_MACH_HUSKY) += corgi.o # Support for blinky lights led-y := leds.o led-$(CONFIG_ARCH_LUBBOCK) += leds-lubbock.o led-$(CONFIG_ARCH_PXA_IDP) += leds-idp.o led-$(CONFIG_MACH_POODLE) += leds-poodle.o +led-$(CONFIG_MACH_CORGI) += leds-corgi.o +led-$(CONFIG_MACH_SHEPHERD) += leds-corgi.o +led-$(CONFIG_MACH_HUSKY) += leds-corgi.o obj-$(CONFIG_LEDS) += $(led-y) diff -uNr linux-2.6.5-orig/arch/arm/mach-pxa/corgi.c linux-2.6.5/arch/arm/mach-pxa/corgi.c --- linux-2.6.5-orig/arch/arm/mach-pxa/corgi.c 1970-01-01 01:00:00.000000000 +0100 +++ linux-2.6.5/arch/arm/mach-pxa/corgi.c 2004-06-14 20:33:19.000000000 +0100 @@ -0,0 +1,178 @@ +/* + * linux/arch/arm/mach-pxa/corgi.c + * + * Support for the SHARP Corgi Board. + * + * Copyright: Lineo Japan Inc. + * + * Based on: + * linux/arch/arm/mach-pxa/lubbock.c + * + * Support for the Intel DBPXA250 Development Platform. + * + * Author: Nicolas Pitre + * Created: Jun 15, 2001 + * Copyright: MontaVista Software Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Change Log + * 12-Dec-2002 Sharp Corporation for Corgi + * 01-Apr-2003 Sharp for Shepherd + * + * Mar 10, 2004: Lots of changes to port to 2.6 by John Lenz + * + */ +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include "generic.h" + +static void __init scoop_init(void) +{ + +#define CORGI_SCP_INIT_DATA(adr,dat) (((adr)<<16)|(dat)) +#define CORGI_SCP_INIT_DATA_END ((unsigned long)-1) + static const unsigned long scp_init[] = + { + CORGI_SCP_INIT_DATA(CORGI_SCP_MCR,0x0140), // 00 + CORGI_SCP_INIT_DATA(CORGI_SCP_MCR,0x0100), + CORGI_SCP_INIT_DATA(CORGI_SCP_CDR,0x0000), // 04 + CORGI_SCP_INIT_DATA(CORGI_SCP_CPR,0x0000), // 0C + CORGI_SCP_INIT_DATA(CORGI_SCP_CCR,0x0000), // 10 + CORGI_SCP_INIT_DATA(CORGI_SCP_IMR,0x0000), // 18 + CORGI_SCP_INIT_DATA(CORGI_SCP_IRM,0x00FF), // 14 + CORGI_SCP_INIT_DATA(CORGI_SCP_ISR,0x0000), // 1C + CORGI_SCP_INIT_DATA(CORGI_SCP_IRM,0x0000), + CORGI_SCP_INIT_DATA(CORGI_SCP_GPCR,CORGI_SCP_IO_DIR), // 20 + CORGI_SCP_INIT_DATA(CORGI_SCP_GPWR,CORGI_SCP_IO_OUT), // 24 + CORGI_SCP_INIT_DATA_END + }; + int i; + for(i=0; scp_init[i] != CORGI_SCP_INIT_DATA_END; i++) + { + int adr = scp_init[i] >> 16; + CORGI_SCP_REG(adr) = scp_init[i] & 0xFFFF; + } +} + +static void __init corgi_init_irq(void) +{ + pxa_init_irq(); + + /* setup extra corgi irqs */ + + /* i2c initialize */ + //i2c_init(); RPP Fixme! + + /* scoop initialize */ + scoop_init(); + + /* initialize SSP & CS */ + /*pxa_ssp_init();*/ +} + +#if 0 +static void __init +fixup_corgi(struct machine_desc *desc, struct param_struct *params, + char **cmdline, struct meminfo *mi) +{ +#if defined(CONFIG_MACH_SHEPHERD) || defined(CONFIG_MACH_HUSKY) + SET_BANK (0, 0xa0000000, 64*1024*1024); +#else + SET_BANK (0, 0xa0000000, 32*1024*1024); +#endif + mi->nr_banks = 1; +#if defined(CONFIG_BLK_DEV_INITRD) + setup_ramdisk (1, 0, 0, 8192); + setup_initrd (__phys_to_virt(0xa1000000), 4*1024*1024); + ROOT_DEV = MKDEV(RAMDISK_MAJOR,0); +#elif defined(CONFIG_MTD) + ROOT_DEV = MKDEV(31, 0); /* /dev/mtdblock0 */ +#endif + +#ifdef CONFIG_SHARPSL_BOOTLDR_PARAMS + if (params->u1.s.page_size != PAGE_SIZE) { + params->u1.s.page_size = PAGE_SIZE; + params->u1.s.nr_pages = 32 * 1024 * 1024 / PAGE_SIZE; + params->u1.s.ramdisk_size = 0; + params->u1.s.flags = FLAG_READONLY | FLAG_RDLOAD | FLAG_RDPROMPT; + params->u1.s.rootdev = ROOT_DEV; + params->u1.s.initrd_start = 0; + params->u1.s.initrd_size = 0; + params->u1.s.rd_start = 0; + params->u1.s.system_rev = 0; + params->u1.s.system_serial_low = 0; + params->u1.s.system_serial_high = 0; + strcpy(params->commandline, CONFIG_CMDLINE); + } +#endif +} +#endif + +static struct map_desc corgi_io_desc[] __initdata = { + /* virtual physical length */ + { 0xf1000000, 0x08000000, 0x01000000, MT_DEVICE }, /* LCDC (readable for Qt driver) */ + { 0xf2000000, 0x10800000, 0x00001000, MT_DEVICE }, /* SCOOP */ + { 0xf2100000, 0x0C000000, 0x00001000, MT_DEVICE }, /* Nand Flash */ + { 0xef000000, 0x00000000, 0x00800000, MT_DEVICE }, /* Boot Flash */ +}; + +static void __init corgi_map_io(void) +{ + pxa_map_io(); + iotable_init(corgi_io_desc,ARRAY_SIZE(corgi_io_desc)); + +#if 0 + /* This enables the BTUART */ + CKEN |= CKEN7_BTUART; + set_GPIO_mode(GPIO42_BTRXD_MD); + set_GPIO_mode(GPIO43_BTTXD_MD); + set_GPIO_mode(GPIO44_BTCTS_MD); + set_GPIO_mode(GPIO45_BTRTS_MD); +#endif + + /* setup sleep mode values */ + PWER = 0x00000002; + PFER = 0x00000000; + PRER = 0x00000002; + PGSR0 = 0x0158C000; + PGSR1 = 0x00FF0080; + PGSR2 = 0x0001C004; + PCFR |= PCFR_OPDE; +} + +#if defined(CONFIG_MACH_SHEPHERD) +MACHINE_START(SHEPHERD, "SHARP Shepherd") +#elseif defined(CONFIG_MACH_HUSKY) +MACHINE_START(HUSKY, "SHARP Husky") +#else +MACHINE_START(CORGI, "SHARP Corgi") +#endif + BOOT_MEM(0xa0000000, 0x40000000, io_p2v(0x40000000)) +#ifdef CONFIG_SHARPSL_BOOTLDR_PARAMS + BOOT_PARAMS(0xa0000100) +#endif +/* FIXUP(fixup_corgi)*/ + MAPIO(corgi_map_io) + INITIRQ(corgi_init_irq) +MACHINE_END diff -uNr linux-2.6.5-orig/arch/arm/mach-pxa/leds-corgi.c linux-2.6.5/arch/arm/mach-pxa/leds-corgi.c --- linux-2.6.5-orig/arch/arm/mach-pxa/leds-corgi.c 1970-01-01 01:00:00.000000000 +0100 +++ linux-2.6.5/arch/arm/mach-pxa/leds-corgi.c 2004-06-14 20:33:19.000000000 +0100 @@ -0,0 +1,135 @@ +/* + * linux/arch/arm/mach-pxa/leds-corgi.c + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Copied from arch/arm/mach-sa1100/leds-collie.c + * ChangeLog: + * - John Lenz <4/27/04> - added support for new locomo device model + */ + +#include +#include +#include + +#include +#include +#include +#include + +#include "leds.h" + +#define LED_STATE_ENABLED 1 +#define LED_STATE_CLAIMED 2 + +static struct locomo_dev *locomo_dev = NULL; +static unsigned int led_state; +static unsigned int hw_led0_state = 0; +static unsigned int hw_led1_state = 0; + +#define LED_ONOFF_MASK (LOCOMO_LPT_TOFL|LOCOMO_LPT_TOFH) +#define LED_OFF(REG) ((REG)|=LOCOMO_LPT_TOFL) +#define LED_ON(REG) ((REG)=((REG)&~LED_ONOFF_MASK)|LOCOMO_LPT_TOFH) +#define LED_FLIP(REG) ((REG)^=LED_ONOFF_MASK) + +void corgi_leds_event(led_event_t evt) +{ + unsigned long flags; + + local_irq_save(flags); + + switch (evt) { + case led_start: + led_state = LED_STATE_ENABLED; + LED_ON(hw_led0_state); + LED_ON(hw_led1_state); + break; + + case led_stop: + led_state &= ~LED_STATE_ENABLED; + break; + + case led_claim: + led_state |= LED_STATE_CLAIMED; + LED_ON(hw_led0_state); + LED_ON(hw_led1_state); + break; + + case led_release: + led_state &= ~LED_STATE_CLAIMED; + LED_ON(hw_led0_state); + LED_ON(hw_led1_state); + break; + +#ifdef CONFIG_LEDS_TIMER + case led_timer: + if (!(led_state & LED_STATE_CLAIMED)) { + LED_FLIP(hw_led0_state); + } + break; +#endif + +#ifdef CONFIG_LEDS_CPU + case led_idle_start: + /* LED off when system is idle */ + if (!(led_state & LED_STATE_CLAIMED)) + LED_OFF(hw_led1_state); + break; + + case led_idle_end: + if (!(led_state & LED_STATE_CLAIMED)) + LED_ON(hw_led1_state); + break; +#endif + + default: + break; + } + + + if (locomo_dev && led_state & LED_STATE_ENABLED) { + locomo_writel(hw_led0_state, locomo_dev->mapbase + LOCOMO_LPT0); + locomo_writel(hw_led1_state, locomo_dev->mapbase + LOCOMO_LPT1); + } + + local_irq_restore(flags); +} + +static int corgiled_probe(struct locomo_dev *dev) { + /* set up the initial led states, since due to the init order, + * corgi_leds_event(led_start) might have been called before this */ + /*if (led_state & LED_STATE_ENABLED) { + //LCM_LPT0 = hw_led0_state; + locomo_writel(hw_led0_state, dev->mapbase + LOCOMO_LPT0); + //LCM_LPT1 = hw_led1_state; + locomo_writel(hw_led1_state, dev->mapbase + LOCOMO_LPT1); + }*/ + locomo_dev = dev; + return 0; +} + +static int corgiled_remove(struct locomo_dev *dev) { + locomo_dev = NULL; + return 0; +} + +static struct locomo_driver corgiled_driver = { + .drv = { + .name = "locomoled" + }, + .devid = LOCOMO_DEVID_LED, + .probe = corgiled_probe, + .remove = corgiled_remove, +}; + +static int __init corgiled_init(void) { + return locomo_driver_register(&corgiled_driver); +} + +device_initcall(corgiled_init); + +MODULE_AUTHOR("John Lenz "); +MODULE_DESCRIPTION("LoCoMo Corgi LED driver"); +MODULE_LICENSE("GPL"); diff -uNr linux-2.6.5-orig/arch/arm/mach-pxa/leds.c linux-2.6.5/arch/arm/mach-pxa/leds.c --- linux-2.6.5-orig/arch/arm/mach-pxa/leds.c 2004-06-14 20:31:54.000000000 +0100 +++ linux-2.6.5/arch/arm/mach-pxa/leds.c 2004-06-14 20:33:06.000000000 +0100 @@ -24,7 +24,8 @@ leds_event = idp_leds_event; if (machine_is_poodle()) leds_event = poodle_leds_event; - + if (machine_is_corgi()) + leds_event = corgi_leds_event; leds_event(led_start); return 0; } diff -uNr linux-2.6.5-orig/arch/arm/mach-pxa/leds.h linux-2.6.5/arch/arm/mach-pxa/leds.h --- linux-2.6.5-orig/arch/arm/mach-pxa/leds.h 2004-06-14 20:31:54.000000000 +0100 +++ linux-2.6.5/arch/arm/mach-pxa/leds.h 2004-06-14 20:33:06.000000000 +0100 @@ -10,3 +10,4 @@ extern void lubbock_leds_event(led_event_t evt); extern void idp_leds_event(led_event_t evt); extern void poodle_leds_event(led_event_t evt); +extern void corgi_leds_event(led_event_t evt); diff -uNr linux-2.6.5-orig/arch/arm/tools/mach-types linux-2.6.5/arch/arm/tools/mach-types --- linux-2.6.5-orig/arch/arm/tools/mach-types 2004-06-14 20:31:55.000000000 +0100 +++ linux-2.6.5/arch/arm/tools/mach-types 2004-06-14 20:33:06.000000000 +0100 @@ -485,3 +485,4 @@ vr1000 MACH_VR1000 VR1000 475 deisterpxa MACH_DEISTERPXA DEISTERPXA 476 bcm1160 MACH_BCM1160 BCM1160 477 +husky MACH_HUSKY HUSKY 478 \ No newline at end of file diff -uNr linux-2.6.5-orig/drivers/serial/8250.c linux-2.6.5/drivers/serial/8250.c --- linux-2.6.5-orig/drivers/serial/8250.c 2004-06-14 20:31:55.000000000 +0100 +++ linux-2.6.5/drivers/serial/8250.c 2004-06-14 20:33:06.000000000 +0100 @@ -169,7 +169,8 @@ { "ST16654", 64, UART_CLEAR_FIFO | UART_USE_FIFO | UART_STARTECH }, { "XR16850", 128, UART_CLEAR_FIFO | UART_USE_FIFO | UART_STARTECH }, { "RSA", 2048, UART_CLEAR_FIFO | UART_USE_FIFO }, - { "NS16550A", 16, UART_CLEAR_FIFO | UART_USE_FIFO | UART_NATSEMI } + { "NS16550A", 16, UART_CLEAR_FIFO | UART_USE_FIFO | UART_NATSEMI }, + { "XScale", 32, UART_CLEAR_FIFO | UART_USE_FIFO }, }; static _INLINE_ unsigned int serial_in(struct uart_8250_port *up, int offset) @@ -1499,6 +1500,8 @@ up->ier &= ~UART_IER_MSI; if (UART_ENABLE_MS(&up->port, termios->c_cflag)) up->ier |= UART_IER_MSI; + if (up->port.type == PORT_XSCALE) + up->ier |= UART_IER_UUE | UART_IER_RTOIE; serial_out(up, UART_IER, up->ier); @@ -1930,7 +1933,11 @@ * First save the UER then disable the interrupts */ ier = serial_in(up, UART_IER); - serial_out(up, UART_IER, 0); + + if (up->port.type == PORT_XSCALE) + serial_out(up, UART_IER, UART_IER_UUE); + else + serial_out(up, UART_IER, 0); /* * Now, do each character diff -uNr linux-2.6.5-orig/include/asm-arm/arch-pxa/corgi.h linux-2.6.5/include/asm-arm/arch-pxa/corgi.h --- linux-2.6.5-orig/include/asm-arm/arch-pxa/corgi.h 1970-01-01 01:00:00.000000000 +0100 +++ linux-2.6.5/include/asm-arm/arch-pxa/corgi.h 2004-06-14 20:33:19.000000000 +0100 @@ -0,0 +1,219 @@ +/* + * linux/include/asm-arm/arch-pxa/corgi.h + * + * (C) Copyright 2001 Lineo Japan, Inc. + * + * May be copied or modified under the terms of the GNU General Public + * License. See linux/COPYING for more information. + * + * Based on: + * + * linux/include/asm-arm/arch-sa1100/collie.h + * + * This file contains the hardware specific definitions for Collie + * + * (C) Copyright 2001 Lineo Japan, Inc. + * + * May be copied or modified under the terms of the GNU General Public + * License. See linux/COPYING for more information. + * + * ChangeLog: + * 04-06-2001 Lineo Japan, Inc. + * 04-16-2001 SHARP Corporation + * + * Mar 10, 2004: Updates to 2.6 by John Lenz + */ +#ifndef __ASM_ARCH_CORGI_H +#define __ASM_ARCH_CORGI_H 1 + +/* + * LCDC internal I/O mappings + * + * We have the following mapping: + * phys virt + * 08000000 f1000000 + */ + + + +/* + * SCOOP internal I/O mappings + * + * We have the following mapping: + * phys virt + * 10800000 f2000000 + */ + + +#define CF_BUF_CTRL_BASE 0xF2000000 + +#define CORGI_SCP_REG(adr) (*(volatile unsigned short*)(CF_BUF_CTRL_BASE+(adr))) + +#define CORGI_SCP_MCR 0x00 +#define CORGI_SCP_CDR 0x04 +#define CORGI_SCP_CSR 0x08 +#define CORGI_SCP_CPR 0x0C +#define CORGI_SCP_CCR 0x10 +#define CORGI_SCP_IRR 0x14 +#define CORGI_SCP_IRM 0x14 +#define CORGI_SCP_IMR 0x18 +#define CORGI_SCP_ISR 0x1C +#define CORGI_SCP_GPCR 0x20 +#define CORGI_SCP_GPWR 0x24 +#define CORGI_SCP_GPRR 0x28 +#define CORGI_SCP_REG_MCR CORGI_SCP_REG(CORGI_SCP_MCR) +#define CORGI_SCP_REG_CDR CORGI_SCP_REG(CORGI_SCP_CDR) +#define CORGI_SCP_REG_CSR CORGI_SCP_REG(CORGI_SCP_CSR) +#define CORGI_SCP_REG_CPR CORGI_SCP_REG(CORGI_SCP_CPR) +#define CORGI_SCP_REG_CCR CORGI_SCP_REG(CORGI_SCP_CCR) +#define CORGI_SCP_REG_IRR CORGI_SCP_REG(CORGI_SCP_IRR) +#define CORGI_SCP_REG_IRM CORGI_SCP_REG(CORGI_SCP_IRM) +#define CORGI_SCP_REG_IMR CORGI_SCP_REG(CORGI_SCP_IMR) +#define CORGI_SCP_REG_ISR CORGI_SCP_REG(CORGI_SCP_ISR) +#define CORGI_SCP_REG_GPCR CORGI_SCP_REG(CORGI_SCP_GPCR) +#define CORGI_SCP_REG_GPWR CORGI_SCP_REG(CORGI_SCP_GPWR) +#define CORGI_SCP_REG_GPRR CORGI_SCP_REG(CORGI_SCP_GPRR) + +#define CORGI_SCP_GPCR_PA22 ( 1 << 12 ) +#define CORGI_SCP_GPCR_PA21 ( 1 << 11 ) +#define CORGI_SCP_GPCR_PA20 ( 1 << 10 ) +#define CORGI_SCP_GPCR_PA19 ( 1 << 9 ) +#define CORGI_SCP_GPCR_PA18 ( 1 << 8 ) +#define CORGI_SCP_GPCR_PA17 ( 1 << 7 ) +#define CORGI_SCP_GPCR_PA16 ( 1 << 6 ) +#define CORGI_SCP_GPCR_PA15 ( 1 << 5 ) +#define CORGI_SCP_GPCR_PA14 ( 1 << 4 ) +#define CORGI_SCP_GPCR_PA13 ( 1 << 3 ) +#define CORGI_SCP_GPCR_PA12 ( 1 << 2 ) +#define CORGI_SCP_GPCR_PA11 ( 1 << 1 ) + + +/* + * GPIOs + */ +#define CORGI_SCP_LED_GREEN CORGI_SCP_GPCR_PA11 +#define CORGI_SCP_SWA CORGI_SCP_GPCR_PA12 +#define CORGI_SCP_SWB CORGI_SCP_GPCR_PA13 +#define CORGI_SCP_MUTE_L CORGI_SCP_GPCR_PA14 +#define CORGI_SCP_MUTE_R CORGI_SCP_GPCR_PA15 +#define CORGI_SCP_AKIN_PULLUP CORGI_SCP_GPCR_PA16 +#define CORGI_SCP_APM_ON CORGI_SCP_GPCR_PA17 +#define CORGI_SCP_BACKLIGHT_CONT CORGI_SCP_GPCR_PA18 +#define CORGI_SCP_MIC_BIAS CORGI_SCP_GPCR_PA19 + + +#define CORGI_SCP_IO_DIR ( CORGI_SCP_LED_GREEN | CORGI_SCP_MUTE_L | CORGI_SCP_MUTE_R | \ + CORGI_SCP_AKIN_PULLUP | CORGI_SCP_APM_ON | CORGI_SCP_BACKLIGHT_CONT | \ + CORGI_SCP_MIC_BIAS ) +#define CORGI_SCP_IO_OUT ( CORGI_SCP_MUTE_L | CORGI_SCP_MUTE_R ) +#define CORGI_GPIO_CO 16 + + +/* + * Flash Memory mappings + * + * We have the following mapping: + * phys virt + * boot ROM 00000000 ef000000 + * NAND Flash 0C000000 f2100000 + */ +#define NAND_FLASH_REG_BASE 0xf2100000 +#define CORGI_CPLD_REG(ofst) (*(volatile unsigned char*)(NAND_FLASH_REG_BASE+(ofst))) + +/* register offset */ +#define CORGI_ECCLPLB 0x00 /* line parity 7 - 0 bit */ +#define CORGI_ECCLPUB 0x04 /* line parity 15 - 8 bit */ +#define CORGI_ECCCP 0x08 /* column parity 5 - 0 bit */ +#define CORGI_ECCCNTR 0x0C /* ECC byte counter */ +#define CORGI_ECCCLRR 0x10 /* cleare ECC */ +#define CORGI_FLASHIO 0x14 /* Flash I/O */ +#define CORGI_FLASHCTL 0x18 /* Flash Control */ + +/* Flash control bit */ +#define CORGI_FLRYBY (1 << 5) +#define CORGI_FLCE1 (1 << 4) +#define CORGI_FLWP (1 << 3) +#define CORGI_FLALE (1 << 2) +#define CORGI_FLCLE (1 << 1) +#define CORGI_FLCE0 (1 << 0) + + + + +/* +CORGI_ * LED + */ +#define CORGI_GPIO_LED_ORANGE (13) +//#define CORGI_SCP_LED_GREEN CORGI_SCP_GPCR_PA11 + + +/* + * GPIOs + */ +/* PXA GPIOs */ +#define CORGI_GPIO_KEY_INT (0) /* key interrupt */ +#define CORGI_GPIO_AC_IN (1) +#define CORGI_GPIO_TP_INT (5) /* Touch Panel interrupt */ +#define CORGI_GPIO_WAKEUP (3) +#define CORGI_GPIO_IR_ON (22) +#define CORGI_GPIO_AK_INT (4) // Remote Controller +#define CORGI_GPIO_HP_IN GPIO_AK_INT +#define CORGI_GPIO_CF_IRQ (17) +//#define CORGI_GPIO_CF_PRDY (17) +#define CORGI_GPIO_LED_ORANGE (13) +#define CORGI_GPIO_CF_CD (14) +#define CORGI_GPIO_SD_PWR (33) +#define CORGI_GPIO_nSD_CLK (6) +#define CORGI_GPIO_nSD_WP (7) +#define CORGI_GPIO_nSD_INT (10) +#define CORGI_GPIO_nSD_DETECT (9) +#define CORGI_GPIO_MAIN_BAT_LOW (11) +#define CORGI_GPIO_BAT_COVER (11) +#define CORGI_GPIO_ADC_TEMP_ON (21) +#define CORGI_GPIO_CHRG_ON (38) +#define CORGI_GPIO_CHRG_FULL (16) +#define CORGI_GPIO_USB_PULLUP (45) +#define CORGI_GPIO_HSYNC (44) + +/* KeyBoard */ +#define CORGI_KEY_STROBE_NUM (12) +#define CORGI_KEY_SENSE_NUM (8) +#define CORGI_GPIO_ALL_STROBE_BIT (0x00003ffc) +#define CORGI_GPIO_HIGH_SENSE_BIT (0xfc000000) +#define CORGI_GPIO_HIGH_SENSE_RSHIFT (26) +#define CORGI_GPIO_LOW_SENSE_BIT (0x00000003) +#define CORGI_GPIO_LOW_SENSE_LSHIFT (6) +#define CORGI_GPIO_STROBE_BIT(a) GPIO_bit(66+(a)) +#define CORGI_GPIO_SENSE_BIT(a) GPIO_bit(58+(a)) +#define CORGI_GAFR_ALL_STROBE_BIT (0x0ffffff0) +#define CORGI_GAFR_HIGH_SENSE_BIT (0xfff00000) +#define CORGI_GAFR_LOW_SENSE_BIT (0x0000000f) +#define CORGI_GPIO_KEY_SENSE(a) (58+(a)) + + +/* + * Interrupts + */ +/* PXA GPIOs */ +#define CORGI_IRQ_GPIO_KEY_INT IRQ_GPIO(0) +#define CORGI_IRQ_GPIO_AC_IN IRQ_GPIO(1) +#define CORGI_IRQ_GPIO_AK_INT IRQ_GPIO(4) +#define CORGI_IRQ_GPIO_HP_IN IRQ_GPIO_AK_INT +#define CORGI_IRQ_GPIO_TP_INT IRQ_GPIO(5) +#define CORGI_IRQ_GPIO_WAKEUP IRQ_GPIO(3) +#define CORGI_IRQ_GPIO_CO IRQ_GPIO(16) +#define CORGI_IRQ_GPIO_CF_IRQ IRQ_GPIO(17) +#define CORGI_IRQ_GPIO_CF_CD IRQ_GPIO(14) +#define CORGI_IRQ_GPIO_nSD_INT IRQ_GPIO(10) +#define CORGI_IRQ_GPIO_nSD_DETECT IRQ_GPIO(9) +#define CORGI_IRQ_GPIO_MAIN_BAT_LOW IRQ_GPIO(11) +#define CORGI_IRQ_GPIO_KEY_SENSE(a) IRQ_GPIO(58+(a)) + + +// CS +#define CORGI_CS_MAX1111 1 +#define CORGI_CS_ADS7846 2 +#define CORGI_CS_LZ9JG18 3 + +#endif /* __ASM_ARCH_CORGI_H */ + diff -uNr linux-2.6.5-orig/include/asm-arm/thread_info.h linux-2.6.5/include/asm-arm/thread_info.h --- linux-2.6.5-orig/include/asm-arm/thread_info.h 2004-06-14 20:31:55.000000000 +0100 +++ linux-2.6.5/include/asm-arm/thread_info.h 2004-06-14 20:33:06.000000000 +0100 @@ -108,8 +108,8 @@ #define TI_CPU 20 #define TI_CPU_DOMAIN 24 #define TI_CPU_SAVE 28 -#define TI_USED_MATH 76 -#define TI_FPSTATE (TI_USED_MATH+16) +#define TI_USED_CP 76 +#define TI_FPSTATE (TI_USED_CP+16) #endif diff -uNr linux-2.6.5-orig/include/linux/serial_core.h linux-2.6.5/include/linux/serial_core.h --- linux-2.6.5-orig/include/linux/serial_core.h 2004-06-14 20:31:56.000000000 +0100 +++ linux-2.6.5/include/linux/serial_core.h 2004-06-14 20:33:06.000000000 +0100 @@ -38,7 +38,8 @@ #define PORT_16850 12 #define PORT_RSA 13 #define PORT_NS16550A 14 -#define PORT_MAX_8250 14 /* max port ID */ +#define PORT_XSCALE 15 +#define PORT_MAX_8250 15 /* max port ID */ /* * ARM specific type numbers. These are not currently guaranteed diff -uNr linux-2.6.5-orig/include/linux/serial_reg.h linux-2.6.5/include/linux/serial_reg.h --- linux-2.6.5-orig/include/linux/serial_reg.h 2004-06-14 20:31:56.000000000 +0100 +++ linux-2.6.5/include/linux/serial_reg.h 2004-06-14 20:33:06.000000000 +0100 @@ -141,7 +141,7 @@ #define UART_MSR_ANY_DELTA 0x0F /* Any of the delta bits! */ /* - * The Intel PXA2xx chip defines those bits + * The Intel XScale on-chip UARTs define these bits */ #define UART_IER_DMAE 0x80 /* DMA Requests Enable */ #define UART_IER_UUE 0x40 /* UART Unit Enable */ diff -uNr linux-2.6.5-orig/arch/arm/boot/Makefile linux-2.6.5/arch/arm/boot/Makefile --- linux-2.6.5-orig/arch/arm/boot/Makefile 2004-04-04 04:36:18.000000000 +0100 +++ linux-2.6.5/arch/arm/boot/Makefile 2004-06-14 21:36:21.000000000 +0100 @@ -69,6 +69,8 @@ ZBSSADDR := ALIGN(4) endif +OBJCOPYFLAGS_zImage := --pad-to `(arm-linux-readelf -l arch/arm/boot/compressed/vmlinux | grep LOAD | awk '{ print $$6 }')` + export ZTEXTADDR ZBSSADDR ZRELADDR INITRD_PHYS PARAMS_PHYS targets := Image zImage bootpImage