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
that measures approximately 2" square. It includes an Ethernet
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
Intrinsyc website, http://www.intrinsyc.com.
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:
- CompactFlash+ slot (select PCMCIA in General Setup and any options
......@@ -14,24 +16,14 @@ Supported in this version:
Network Devices)
- 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
both BOOTP and TFTP. Detailed instructions should have come with your
evaluation kit on how to use the bootloader. This series of commands
will suffice:
make cerf_config
make xconfig
make zImage
make ARCH=arm CROSS_COMPILE=arm-linux- cerfcube_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux- zImage
make ARCH=arm CROSS_COMPILE=arm-linux- modules
cp arch/arm/boot/zImage <TFTP directory>
The default config uses a 4MB RAM disk located at 0xc0500000 as root.
Setting the board to mount root from a NFS partition works, too.
I-Gene Leong, Intrinsyc Software Inc.
ileong@intrinsyc.com
support@intrinsyc.com
This diff is collapsed.
This diff is collapsed.
......@@ -654,6 +654,17 @@ static struct init_tags {
{ 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)
{
struct tag *tags = (struct tag *)&init_tags;
......@@ -704,6 +715,7 @@ void __init setup_arch(char **cmdline_p)
* Set up various architecture-specific pointers
*/
init_arch_irq = mdesc->init_irq;
init_machine = mdesc->init_machine;
#ifdef CONFIG_VT
#if defined(CONFIG_VGA_CONSOLE)
......
......@@ -16,14 +16,14 @@
#define ENTER \
mov ip,sp ;\
stmfd sp!,{r4-r9,fp,ip,lr,pc} ;\
stmfd sp!,{r0,r4-r9,fp,ip,lr,pc} ;\
sub fp,ip,#4
#define EXIT \
LOADREGS(ea, fp, {r4 - r9, fp, sp, pc})
LOADREGS(ea, fp, {r0, r4 - r9, fp, sp, pc})
#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);
......
......@@ -20,13 +20,18 @@
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/delay.h>
#include <linux/device.h>
#include <linux/ioport.h>
#include <linux/pm.h>
#include <asm/hardware.h>
#include <asm/irq.h>
#include <asm/system.h>
#include <asm/pgtable.h>
#include <asm/mach/map.h>
#include <asm/arch/udc.h>
#include "generic.h"
/*
......@@ -138,3 +143,76 @@ void __init pxa_map_io(void)
iotable_init(standard_io_desc, ARRAY_SIZE(standard_io_desc));
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 */
#endif
static int __init idp_init(void)
static void __init idp_init(void)
{
printk("idp_init()\n");
return 0;
}
__initcall(idp_init);
static void __init idp_init_irq(void)
{
pxa_init_irq();
......@@ -119,4 +116,5 @@ MACHINE_START(PXA_IDP, "Accelent Xscale IDP")
BOOT_MEM(0xa0000000, 0x40000000, 0xfc000000)
MAPIO(idp_map_io)
INITIRQ(idp_init_irq)
INIT_MACHINE(idp_init)
MACHINE_END
......@@ -29,6 +29,7 @@
#include <asm/mach/irq.h>
#include <asm/arch/irq.h>
#include <asm/arch/udc.h>
#include <asm/hardware/sa1111.h>
#include "generic.h"
......@@ -88,6 +89,16 @@ static void __init lubbock_init_irq(void)
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[] = {
[0] = {
.start = 0x10000000,
......@@ -112,13 +123,12 @@ static struct platform_device *devices[] __initdata = {
&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 = {
/* virtual physical length type */
{ 0xf0000000, 0x08000000, 0x00100000, MT_DEVICE }, /* CPLD */
......@@ -157,4 +167,5 @@ MACHINE_START(LUBBOCK, "Intel DBPXA250 Development Platform")
BOOT_MEM(0xa0000000, 0x40000000, io_p2v(0x40000000))
MAPIO(lubbock_map_io)
INITIRQ(lubbock_init_irq)
INIT_MACHINE(lubbock_init)
MACHINE_END
......@@ -37,9 +37,9 @@ config SA1100_CERF
bool "CerfBoard"
depends on ARCH_SA1100
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:
<http://www.intrinsyc.com/products/referenceplatforms/cerfboard.html>.
<http://www.intrinsyc.com/products/cerfboard/>.
Say Y if configuring for an Intrinsyc CerfBoard.
Say N otherwise.
......@@ -60,15 +60,6 @@ config SA1100_CERF_FLASH_32MB
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
bool "Compaq iPAQ H3100"
depends on ARCH_SA1100
......
......@@ -19,24 +19,12 @@
static unsigned int 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_D1 GPIO_GPIO(1)
#define LED_D2 GPIO_GPIO(2)
#define LED_D3 GPIO_GPIO(3)
#define LED_MASK (LED_D0|LED_D1|LED_D2|LED_D3)
#endif
void cerf_leds_event(led_event_t evt)
{
unsigned long flags;
......
......@@ -126,6 +126,21 @@ ENTRY(cpu_arm720_reset)
__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
__arm720_setup: mov r0, #0
mcr p15, 0, r0, c7, c7, 0 @ invalidate caches
......@@ -169,6 +184,11 @@ cpu_arch_name: .asciz "armv4t"
cpu_elf_name: .asciz "v4"
.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
cpu_arm720_name:
.asciz "ARM720T"
......@@ -182,6 +202,22 @@ cpu_arm720_name:
.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
__arm720_proc_info:
.long 0x41807200 @ cpu_val
......
This diff is collapsed.
This diff is collapsed.
......@@ -109,29 +109,6 @@ config FB_SA1100
If you plan to use the LCD display with your SA-1100 system, say
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
tristate "CyberPro 2000/2010/5000 support"
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