Commit 1c23361e authored by Linus Torvalds's avatar Linus Torvalds

Merge bk://bk.arm.linux.org.uk/linux-2.6-rmk

into home.osdl.org:/home/torvalds/v2.5/linux
parents d00ea9a1 b7c5d0b8
*** The StrongARM version of the CerfBoard/Cube has been discontinued ***
The Intrinsyc CerfBoard is a StrongARM 1110-based computer on a board The Intrinsyc CerfBoard is a StrongARM 1110-based computer on a board
that measures approximately 2" square. It includes an Ethernet that measures approximately 2" square. It includes an Ethernet
controller, an RS232-compatible serial port, a USB function port, and controller, an RS232-compatible serial port, a USB function port, and
...@@ -5,7 +7,7 @@ one CompactFlash+ slot on the back. Pictures can be found at the ...@@ -5,7 +7,7 @@ one CompactFlash+ slot on the back. Pictures can be found at the
Intrinsyc website, http://www.intrinsyc.com. Intrinsyc website, http://www.intrinsyc.com.
This document describes the support in the Linux kernel for the This document describes the support in the Linux kernel for the
Intrinsyc CerfBoard as of version 2.4.0-test4-np1. Intrinsyc CerfBoard.
Supported in this version: Supported in this version:
- CompactFlash+ slot (select PCMCIA in General Setup and any options - CompactFlash+ slot (select PCMCIA in General Setup and any options
...@@ -14,24 +16,14 @@ Supported in this version: ...@@ -14,24 +16,14 @@ Supported in this version:
Network Devices) Network Devices)
- Serial ports with a serial console (hardcoded to 38400 8N1) - Serial ports with a serial console (hardcoded to 38400 8N1)
Not supported in this version (yet):
- LCD driver/touchscreen interface
- UDC (a driver exists right now, but is unstable and slow and only
works with the Linux USB)
In order to get this kernel onto your Cerf, you need a server that runs In order to get this kernel onto your Cerf, you need a server that runs
both BOOTP and TFTP. Detailed instructions should have come with your both BOOTP and TFTP. Detailed instructions should have come with your
evaluation kit on how to use the bootloader. This series of commands evaluation kit on how to use the bootloader. This series of commands
will suffice: will suffice:
make cerf_config make ARCH=arm CROSS_COMPILE=arm-linux- cerfcube_defconfig
make xconfig make ARCH=arm CROSS_COMPILE=arm-linux- zImage
make zImage make ARCH=arm CROSS_COMPILE=arm-linux- modules
cp arch/arm/boot/zImage <TFTP directory> cp arch/arm/boot/zImage <TFTP directory>
The default config uses a 4MB RAM disk located at 0xc0500000 as root. support@intrinsyc.com
Setting the board to mount root from a NFS partition works, too.
I-Gene Leong, Intrinsyc Software Inc.
ileong@intrinsyc.com
This diff is collapsed.
This diff is collapsed.
...@@ -654,6 +654,17 @@ static struct init_tags { ...@@ -654,6 +654,17 @@ static struct init_tags {
{ 0, ATAG_NONE } { 0, ATAG_NONE }
}; };
static void (*init_machine)(void) __initdata;
static int __init customize_machine(void)
{
/* customizes platform devices, or adds new ones */
if (init_machine)
init_machine();
return 0;
}
arch_initcall(customize_machine);
void __init setup_arch(char **cmdline_p) void __init setup_arch(char **cmdline_p)
{ {
struct tag *tags = (struct tag *)&init_tags; struct tag *tags = (struct tag *)&init_tags;
...@@ -704,6 +715,7 @@ void __init setup_arch(char **cmdline_p) ...@@ -704,6 +715,7 @@ void __init setup_arch(char **cmdline_p)
* Set up various architecture-specific pointers * Set up various architecture-specific pointers
*/ */
init_arch_irq = mdesc->init_irq; init_arch_irq = mdesc->init_irq;
init_machine = mdesc->init_machine;
#ifdef CONFIG_VT #ifdef CONFIG_VT
#if defined(CONFIG_VGA_CONSOLE) #if defined(CONFIG_VGA_CONSOLE)
......
...@@ -16,14 +16,14 @@ ...@@ -16,14 +16,14 @@
#define ENTER \ #define ENTER \
mov ip,sp ;\ mov ip,sp ;\
stmfd sp!,{r4-r9,fp,ip,lr,pc} ;\ stmfd sp!,{r0,r4-r9,fp,ip,lr,pc} ;\
sub fp,ip,#4 sub fp,ip,#4
#define EXIT \ #define EXIT \
LOADREGS(ea, fp, {r4 - r9, fp, sp, pc}) LOADREGS(ea, fp, {r0, r4 - r9, fp, sp, pc})
#define EXITEQ \ #define EXITEQ \
LOADREGS(eqea, fp, {r4 - r9, fp, sp, pc}) LOADREGS(eqea, fp, {r0, r4 - r9, fp, sp, pc})
/* /*
* Prototype: void memcpy(void *to,const void *from,unsigned long n); * Prototype: void memcpy(void *to,const void *from,unsigned long n);
......
...@@ -20,13 +20,18 @@ ...@@ -20,13 +20,18 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/device.h>
#include <linux/ioport.h>
#include <linux/pm.h> #include <linux/pm.h>
#include <asm/hardware.h> #include <asm/hardware.h>
#include <asm/irq.h>
#include <asm/system.h> #include <asm/system.h>
#include <asm/pgtable.h> #include <asm/pgtable.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <asm/arch/udc.h>
#include "generic.h" #include "generic.h"
/* /*
...@@ -138,3 +143,76 @@ void __init pxa_map_io(void) ...@@ -138,3 +143,76 @@ void __init pxa_map_io(void)
iotable_init(standard_io_desc, ARRAY_SIZE(standard_io_desc)); iotable_init(standard_io_desc, ARRAY_SIZE(standard_io_desc));
get_clk_frequency_khz(1); get_clk_frequency_khz(1);
} }
static struct resource pxamci_resources[] = {
[0] = {
.start = 0x41100000,
.end = 0x41100fff,
.flags = IORESOURCE_MEM,
},
[1] = {
.start = IRQ_MMC,
.end = IRQ_MMC,
.flags = IORESOURCE_IRQ,
},
};
static u64 pxamci_dmamask = 0xffffffffUL;
static struct platform_device pxamci_device = {
.name = "pxamci",
.id = 0,
.dev = {
.dma_mask = &pxamci_dmamask,
},
.num_resources = ARRAY_SIZE(pxamci_resources),
.resource = pxamci_resources,
};
static struct pxa2xx_udc_mach_info pxa_udc_info;
void __init pxa_set_udc_info(struct pxa2xx_udc_mach_info *info)
{
memcpy(&pxa_udc_info, info, sizeof *info);
}
EXPORT_SYMBOL(pxa_set_udc_info);
static struct resource pxa2xx_udc_resources[] = {
[0] = {
.start = 0x40600000,
.end = 0x4060ffff,
.flags = IORESOURCE_MEM,
},
[1] = {
.start = IRQ_USB,
.end = IRQ_USB,
.flags = IORESOURCE_IRQ,
},
};
static u64 udc_dma_mask = ~(u32)0;
static struct platform_device udc_device = {
.name = "pxa2xx_udc",
.id = 0,
.resource = pxa2xx_udc_resources,
.num_resources = ARRAY_SIZE(pxa2xx_udc_resources),
.dev = {
.platform_data = &pxa_udc_info,
.dma_mask = &udc_dma_mask,
}
};
static struct platform_device *devices[] __initdata = {
&pxamci_device,
&udc_device,
};
static int __init pxa_init(void)
{
return platform_add_devices(devices, ARRAY_SIZE(devices));
}
subsys_initcall(pxa_init);
...@@ -54,14 +54,11 @@ unsigned int idp_control_port_shadow = ((0x7 << 21) | /* LCD power */ ...@@ -54,14 +54,11 @@ unsigned int idp_control_port_shadow = ((0x7 << 21) | /* LCD power */
#endif #endif
static int __init idp_init(void) static void __init idp_init(void)
{ {
printk("idp_init()\n"); printk("idp_init()\n");
return 0;
} }
__initcall(idp_init);
static void __init idp_init_irq(void) static void __init idp_init_irq(void)
{ {
pxa_init_irq(); pxa_init_irq();
...@@ -119,4 +116,5 @@ MACHINE_START(PXA_IDP, "Accelent Xscale IDP") ...@@ -119,4 +116,5 @@ MACHINE_START(PXA_IDP, "Accelent Xscale IDP")
BOOT_MEM(0xa0000000, 0x40000000, 0xfc000000) BOOT_MEM(0xa0000000, 0x40000000, 0xfc000000)
MAPIO(idp_map_io) MAPIO(idp_map_io)
INITIRQ(idp_init_irq) INITIRQ(idp_init_irq)
INIT_MACHINE(idp_init)
MACHINE_END MACHINE_END
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include <asm/mach/irq.h> #include <asm/mach/irq.h>
#include <asm/arch/irq.h> #include <asm/arch/irq.h>
#include <asm/arch/udc.h>
#include <asm/hardware/sa1111.h> #include <asm/hardware/sa1111.h>
#include "generic.h" #include "generic.h"
...@@ -88,6 +89,16 @@ static void __init lubbock_init_irq(void) ...@@ -88,6 +89,16 @@ static void __init lubbock_init_irq(void)
set_irq_type(IRQ_GPIO(0), IRQT_FALLING); set_irq_type(IRQ_GPIO(0), IRQT_FALLING);
} }
static int lubbock_udc_is_connected(void)
{
return (LUB_MISC_RD & (1 << 9)) == 0;
}
static struct pxa2xx_udc_mach_info udc_info __initdata = {
.udc_is_connected = lubbock_udc_is_connected,
// no D+ pullup; lubbock can't connect/disconnect in software
};
static struct resource sa1111_resources[] = { static struct resource sa1111_resources[] = {
[0] = { [0] = {
.start = 0x10000000, .start = 0x10000000,
...@@ -112,13 +123,12 @@ static struct platform_device *devices[] __initdata = { ...@@ -112,13 +123,12 @@ static struct platform_device *devices[] __initdata = {
&sa1111_device, &sa1111_device,
}; };
static int __init lubbock_init(void) static void __init lubbock_init(void)
{ {
return platform_add_devices(devices, ARRAY_SIZE(devices)); pxa_set_udc_info(&udc_info);
(void) platform_add_devices(devices, ARRAY_SIZE(devices));
} }
subsys_initcall(lubbock_init);
static struct map_desc lubbock_io_desc[] __initdata = { static struct map_desc lubbock_io_desc[] __initdata = {
/* virtual physical length type */ /* virtual physical length type */
{ 0xf0000000, 0x08000000, 0x00100000, MT_DEVICE }, /* CPLD */ { 0xf0000000, 0x08000000, 0x00100000, MT_DEVICE }, /* CPLD */
...@@ -157,4 +167,5 @@ MACHINE_START(LUBBOCK, "Intel DBPXA250 Development Platform") ...@@ -157,4 +167,5 @@ MACHINE_START(LUBBOCK, "Intel DBPXA250 Development Platform")
BOOT_MEM(0xa0000000, 0x40000000, io_p2v(0x40000000)) BOOT_MEM(0xa0000000, 0x40000000, io_p2v(0x40000000))
MAPIO(lubbock_map_io) MAPIO(lubbock_map_io)
INITIRQ(lubbock_init_irq) INITIRQ(lubbock_init_irq)
INIT_MACHINE(lubbock_init)
MACHINE_END MACHINE_END
...@@ -37,9 +37,9 @@ config SA1100_CERF ...@@ -37,9 +37,9 @@ config SA1100_CERF
bool "CerfBoard" bool "CerfBoard"
depends on ARCH_SA1100 depends on ARCH_SA1100
help help
The Intrinsyc CerfBoard is based on the StrongARM 1110. The Intrinsyc CerfBoard is based on the StrongARM 1110 (Discontinued).
More information is available at: More information is available at:
<http://www.intrinsyc.com/products/referenceplatforms/cerfboard.html>. <http://www.intrinsyc.com/products/cerfboard/>.
Say Y if configuring for an Intrinsyc CerfBoard. Say Y if configuring for an Intrinsyc CerfBoard.
Say N otherwise. Say N otherwise.
...@@ -60,15 +60,6 @@ config SA1100_CERF_FLASH_32MB ...@@ -60,15 +60,6 @@ config SA1100_CERF_FLASH_32MB
endchoice endchoice
config SA1100_CERF_CPLD
bool "Cerf w/CPLD support (CerfPDA)"
depends on SA1100_CERF
help
Say Y here to support the Linux CerfPDA development kit from
Intrinsyc. This is a StrongARM-1110-based reference platform for
designing custom PDAs. Product info is at
<http://www.intrinsyc.com/products/referencedesigns/cerfpda.asp>.
config SA1100_H3100 config SA1100_H3100
bool "Compaq iPAQ H3100" bool "Compaq iPAQ H3100"
depends on ARCH_SA1100 depends on ARCH_SA1100
......
...@@ -19,24 +19,12 @@ ...@@ -19,24 +19,12 @@
static unsigned int led_state; static unsigned int led_state;
static unsigned int hw_led_state; static unsigned int hw_led_state;
#ifdef CONFIG_SA1100_CERF_CPLD
#define LED_D0 GPIO_GPIO(0)
#define LED_D1 GPIO_GPIO(0)
#define LED_D2 GPIO_GPIO(0)
#define LED_D3 GPIO_GPIO(0)
#define LED_MASK (LED_D0|LED_D1|LED_D2|LED_D3)
#else
#define LED_D0 GPIO_GPIO(0) #define LED_D0 GPIO_GPIO(0)
#define LED_D1 GPIO_GPIO(1) #define LED_D1 GPIO_GPIO(1)
#define LED_D2 GPIO_GPIO(2) #define LED_D2 GPIO_GPIO(2)
#define LED_D3 GPIO_GPIO(3) #define LED_D3 GPIO_GPIO(3)
#define LED_MASK (LED_D0|LED_D1|LED_D2|LED_D3) #define LED_MASK (LED_D0|LED_D1|LED_D2|LED_D3)
#endif
void cerf_leds_event(led_event_t evt) void cerf_leds_event(led_event_t evt)
{ {
unsigned long flags; unsigned long flags;
......
...@@ -126,6 +126,21 @@ ENTRY(cpu_arm720_reset) ...@@ -126,6 +126,21 @@ ENTRY(cpu_arm720_reset)
__INIT __INIT
.type __arm710_setup, #function
__arm710_setup: mov r0, #0
mcr p15, 0, r0, c7, c7, 0 @ invalidate caches
mcr p15, 0, r0, c8, c7, 0 @ flush TLB (v4)
mcr p15, 0, r4, c2, c0 @ load page table pointer
mov r0, #0x1f @ Domains 0, 1 = client
mcr p15, 0, r0, c3, c0 @ load domain access register
mrc p15, 0, r0, c1, c0 @ get control register
bic r0, r0, #0x0e00 @ ..V. ..RS BLDP WCAM
orr r0, r0, #0x0100 @ .... .... .111 .... (old)
orr r0, r0, #0x003d @ .... ..01 ..11 1101 (new)
mov pc, lr @ __ret (head-armv.S)
.size __arm710_setup, . - __arm710_setup
.type __arm720_setup, #function .type __arm720_setup, #function
__arm720_setup: mov r0, #0 __arm720_setup: mov r0, #0
mcr p15, 0, r0, c7, c7, 0 @ invalidate caches mcr p15, 0, r0, c7, c7, 0 @ invalidate caches
...@@ -169,6 +184,11 @@ cpu_arch_name: .asciz "armv4t" ...@@ -169,6 +184,11 @@ cpu_arch_name: .asciz "armv4t"
cpu_elf_name: .asciz "v4" cpu_elf_name: .asciz "v4"
.size cpu_elf_name, . - cpu_elf_name .size cpu_elf_name, . - cpu_elf_name
.type cpu_arm710_name, #object
cpu_arm710_name:
.asciz "ARM710T"
.size cpu_arm710_name, . - cpu_arm710_name
.type cpu_arm720_name, #object .type cpu_arm720_name, #object
cpu_arm720_name: cpu_arm720_name:
.asciz "ARM720T" .asciz "ARM720T"
...@@ -182,6 +202,22 @@ cpu_arm720_name: ...@@ -182,6 +202,22 @@ cpu_arm720_name:
.section ".proc.info", #alloc, #execinstr .section ".proc.info", #alloc, #execinstr
.type __arm710_proc_info, #object
__arm710_proc_info:
.long 0x41807100 @ cpu_val
.long 0xffffff00 @ cpu_mask
.long 0x00000c1e @ section_mmu_flags
b __arm710_setup @ cpu_flush
.long cpu_arch_name @ arch_name
.long cpu_elf_name @ elf_name
.long HWCAP_SWP | HWCAP_HALF | HWCAP_THUMB @ elf_hwcap
.long cpu_arm710_name @ name
.long arm720_processor_functions
.long v4_tlb_fns
.long v4wt_user_fns
.long v4_cache_fns
.size __arm710_proc_info, . - __arm710_proc_info
.type __arm720_proc_info, #object .type __arm720_proc_info, #object
__arm720_proc_info: __arm720_proc_info:
.long 0x41807200 @ cpu_val .long 0x41807200 @ cpu_val
......
This diff is collapsed.
This diff is collapsed.
...@@ -109,29 +109,6 @@ config FB_SA1100 ...@@ -109,29 +109,6 @@ config FB_SA1100
If you plan to use the LCD display with your SA-1100 system, say If you plan to use the LCD display with your SA-1100 system, say
Y here. Y here.
choice
prompt "CerfBoard LCD Display Size"
depends on FB_SA1100 && SA1100_CERF
default CERF_LCD_57_A
config CERF_LCD_38_A
bool "3.8_Color"
config CERF_LCD_38_B
bool "3.8_Mono"
config CERF_LCD_57_A
bool "5.7"
config CERF_LCD_72_A
bool "7.2"
endchoice
config SA1100_CERF_LCD_BACKLIGHT
bool "Cerfboard Backlight (CerfPDA)"
depends on FB_SA1100 && SA1100_CERF_CPLD
config FB_CYBER2000 config FB_CYBER2000
tristate "CyberPro 2000/2010/5000 support" tristate "CyberPro 2000/2010/5000 support"
depends on FB && PCI depends on FB && PCI
......
This diff is collapsed.
This diff is collapsed.
/*
* linux/include/asm-arm/arch-pxa/udc.h
*
* This supports machine-specific differences in how the PXA2xx
* USB Device Controller (UDC) is wired.
*
* It is set in linux/arch/arm/mach-pxa/<machine>.c and used in
* the probe routine of linux/drivers/usb/gadget/pxa2xx_udc.c
*/
struct pxa2xx_udc_mach_info {
int (*udc_is_connected)(void); /* do we see host? */
void (*udc_command)(int cmd);
#define PXA2XX_UDC_CMD_CONNECT 0 /* let host see us */
#define PXA2XX_UDC_CMD_DISCONNECT 1 /* so host won't see us */
};
extern void pxa_set_udc_info(struct pxa2xx_udc_mach_info *info);
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment