Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
5157e5c7
Commit
5157e5c7
authored
Apr 21, 2004
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://bk.arm.linux.org.uk/linux-2.6-rmk
into ppc970.osdl.org:/home/torvalds/v2.6/linux
parents
a8588521
d8371fcd
Changes
21
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
1825 additions
and
7 deletions
+1825
-7
arch/arm/Kconfig
arch/arm/Kconfig
+10
-5
arch/arm/Makefile
arch/arm/Makefile
+1
-0
arch/arm/boot/Makefile
arch/arm/boot/Makefile
+3
-0
arch/arm/kernel/debug.S
arch/arm/kernel/debug.S
+29
-0
arch/arm/kernel/entry-armv.S
arch/arm/kernel/entry-armv.S
+31
-0
arch/arm/mach-versatile/Makefile
arch/arm/mach-versatile/Makefile
+5
-0
arch/arm/mach-versatile/core.c
arch/arm/mach-versatile/core.c
+507
-0
arch/arm/mm/Kconfig
arch/arm/mm/Kconfig
+3
-2
include/asm-arm/arch-versatile/dma.h
include/asm-arm/arch-versatile/dma.h
+27
-0
include/asm-arm/arch-versatile/hardware.h
include/asm-arm/arch-versatile/hardware.h
+45
-0
include/asm-arm/arch-versatile/io.h
include/asm-arm/arch-versatile/io.h
+29
-0
include/asm-arm/arch-versatile/irqs.h
include/asm-arm/arch-versatile/irqs.h
+211
-0
include/asm-arm/arch-versatile/memory.h
include/asm-arm/arch-versatile/memory.h
+61
-0
include/asm-arm/arch-versatile/param.h
include/asm-arm/arch-versatile/param.h
+19
-0
include/asm-arm/arch-versatile/platform.h
include/asm-arm/arch-versatile/platform.h
+488
-0
include/asm-arm/arch-versatile/serial.h
include/asm-arm/arch-versatile/serial.h
+37
-0
include/asm-arm/arch-versatile/system.h
include/asm-arm/arch-versatile/system.h
+51
-0
include/asm-arm/arch-versatile/time.h
include/asm-arm/arch-versatile/time.h
+158
-0
include/asm-arm/arch-versatile/timex.h
include/asm-arm/arch-versatile/timex.h
+23
-0
include/asm-arm/arch-versatile/uncompress.h
include/asm-arm/arch-versatile/uncompress.h
+54
-0
include/asm-arm/arch-versatile/vmalloc.h
include/asm-arm/arch-versatile/vmalloc.h
+33
-0
No files found.
arch/arm/Kconfig
View file @
5157e5c7
...
...
@@ -145,6 +145,11 @@ config ARCH_S3C2410
config ARCH_OMAP
bool "TI OMAP"
config ARCH_VERSATILE_PB
bool "Versatile PB"
help
This enables support for ARM Ltd Versatile PB board.
endchoice
source "arch/arm/mach-clps711x/Kconfig"
...
...
@@ -262,7 +267,7 @@ config ICST525
config ARM_AMBA
bool
depends on ARCH_INTEGRATOR
depends on ARCH_INTEGRATOR
|| ARCH_VERSATILE_PB
default y
config ISA
...
...
@@ -514,7 +519,7 @@ config CMDLINE
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 || ARCH_INTEGRATOR || ARCH_CDB89712 || ARCH_P720T || ARCH_OMAP
depends on ARCH_NETWINDER || ARCH_EBSA110 || ARCH_EBSA285 || ARCH_FTVPCI || ARCH_SHARK || ARCH_CO285 || ARCH_SA1100 || ARCH_LUBBOCK || ARCH_PXA_IDP || ARCH_INTEGRATOR || ARCH_CDB89712 || ARCH_P720T || ARCH_OMAP
|| ARCH_VERSATILE_PB
help
If you say Y here, the LEDs on your machine will be used
to provide useful information about your current system status.
...
...
@@ -527,8 +532,8 @@ config LEDS
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 || 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 || ARCH_INTEGRATOR || ARCH_CDB89712 || ARCH_P720T || ARCH_OMAP
bool "Timer LED" if LEDS && (ARCH_NETWINDER || ARCH_EBSA285 || ARCH_SHARK || ARCH_CO285 || ARCH_SA1100 || ARCH_LUBBOCK || ARCH_PXA_IDP || ARCH_INTEGRATOR || ARCH_P720T
|| ARCH_VERSATILE_PB
)
depends on ARCH_NETWINDER || ARCH_EBSA110 || ARCH_EBSA285 || ARCH_FTVPCI || ARCH_SHARK || ARCH_CO285 || ARCH_SA1100 || ARCH_LUBBOCK || ARCH_PXA_IDP || ARCH_INTEGRATOR || ARCH_CDB89712 || ARCH_P720T || ARCH_OMAP
|| ARCH_VERSATILE_PB
default y if ARCH_EBSA110
help
If you say Y here, one of the system LEDs (the green one on the
...
...
@@ -543,7 +548,7 @@ config LEDS_TIMER
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 || ARCH_INTEGRATOR || ARCH_P720T)
depends on LEDS && (ARCH_NETWINDER || ARCH_EBSA285 || ARCH_SHARK || ARCH_CO285 || ARCH_SA1100 || ARCH_LUBBOCK || ARCH_PXA_IDP || ARCH_INTEGRATOR || ARCH_P720T
|| ARCH_VERSATILE_PB
)
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
...
...
arch/arm/Makefile
View file @
5157e5c7
...
...
@@ -94,6 +94,7 @@ textaddr-$(CONFIG_ARCH_FORTUNET) := 0xc0008000
machine-$(CONFIG_ARCH_ADIFCC)
:=
adifcc
machine-$(CONFIG_ARCH_OMAP)
:=
omap
machine-$(CONFIG_ARCH_S3C2410)
:=
s3c2410
machine-$(CONFIG_ARCH_VERSATILE_PB)
:=
versatile
TEXTADDR
:=
$
(
textaddr-y
)
ifeq
($(incdir-y),)
...
...
arch/arm/boot/Makefile
View file @
5157e5c7
...
...
@@ -56,6 +56,9 @@ params_phys-$(CONFIG_ARCH_OMAP) := 0x10000100
initrd_phys-$(CONFIG_ARCH_OMAP)
:=
0x10800000
zreladdr-$(CONFIG_ARCH_S3C2410)
:=
0x30008000
params_phys-$(CONFIG_ARCH_S3C2410)
:=
0x30000100
zreladdr-$(CONFIG_ARCH_VERSATILE_PB)
:=
0x00008000
params_phys-$(CONFIG_ARCH_VERSATILE_PB)
:=
0x00000100
initrd_phys-$(CONFIG_ARCH_VERSATILE_PB)
:=
0x00800000
ZRELADDR
:=
$
(
zreladdr-y
)
ZTEXTADDR
:=
$
(
ztextaddr-y
)
...
...
arch/arm/kernel/debug.S
View file @
5157e5c7
...
...
@@ -550,6 +550,35 @@
1002
:
@
exit
busyuart
.
endm
#elif defined(CONFIG_ARCH_VERSATILE_PB)
#include <asm/hardware/amba_serial.h>
.
macro
addruart
,
rx
mrc
p15
,
0
,
\
rx
,
c1
,
c0
tst
\
rx
,
#
1
@
MMU
enabled
?
moveq
\
rx
,
#
0x10000000
movne
\
rx
,
#
0xf1000000
@
virtual
base
orr
\
rx
,
\
rx
,
#
0x001F0000
orr
\
rx
,
\
rx
,
#
0x00001000
.
endm
.
macro
senduart
,
rd
,
rx
strb
\
rd
,
[
\
rx
,
#
UART01x_DR
]
.
endm
.
macro
waituart
,
rd
,
rx
1001
:
ldr
\
rd
,
[
\
rx
,
#
0x18
]
@
UARTFLG
tst
\
rd
,
#
1
<<
5
@
UARTFLGUTXFF
-
1
when
full
bne
1001
b
.
endm
.
macro
busyuart
,
rd
,
rx
1001
:
ldr
\
rd
,
[
\
rx
,
#
0x18
]
@
UARTFLG
tst
\
rd
,
#
1
<<
3
@
UARTFLGUBUSY
-
1
when
busy
bne
1001
b
.
endm
#else
#error Unknown architecture
#endif
...
...
arch/arm/kernel/entry-armv.S
View file @
5157e5c7
...
...
@@ -463,6 +463,37 @@ ENTRY(soft_irq_mask)
.
macro
irq_prio_table
.
endm
#elif defined(CONFIG_ARCH_VERSATILE_PB)
.
macro
disable_fiq
.
endm
.
macro
get_irqnr_and_base
,
irqnr
,
irqstat
,
base
,
tmp
ldr
\
base
,
=
IO_ADDRESS
(
VERSATILE_VIC_BASE
)
ldr
\
irqstat
,
[
\
base
,
#
VIC_IRQ_STATUS
]
@
get
masked
status
mov
\
irqnr
,
#
0
teq
\
irqstat
,
#
0
beq
1003
f
1001
:
tst
\
irqstat
,
#
15
bne
1002
f
add
\
irqnr
,
\
irqnr
,
#
4
movs
\
irqstat
,
\
irqstat
,
lsr
#
4
bne
1001
b
1002
:
tst
\
irqstat
,
#
1
bne
1003
f
add
\
irqnr
,
\
irqnr
,
#
1
movs
\
irqstat
,
\
irqstat
,
lsr
#
1
bne
1002
b
1003
:
/
*
EQ
will
be
set
if
no
irqs
pending
*/
@
clz
\
irqnr
,
\
irqstat
@
1003
:
/
*
EQ
will
be
set
if
we
reach
MAXIRQNUM
*/
.
endm
.
macro
irq_prio_table
.
endm
#elif defined(CONFIG_ARCH_CLPS711X)
#include <asm/hardware/clps7111.h>
...
...
arch/arm/mach-versatile/Makefile
0 → 100644
View file @
5157e5c7
#
# Makefile for the linux kernel.
#
obj-y
:=
core.o
arch/arm/mach-versatile/core.c
0 → 100644
View file @
5157e5c7
/*
* linux/arch/arm/mach-versatile/core.c
*
* Copyright (C) 1999 - 2003 ARM Limited
* Copyright (C) 2000 Deep Blue Solutions Ltd
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <linux/init.h>
#include <linux/device.h>
#include <linux/sysdev.h>
#include <asm/hardware.h>
#include <asm/io.h>
#include <asm/irq.h>
#include <asm/leds.h>
#include <asm/mach-types.h>
#include <asm/hardware/amba.h>
#include <asm/mach/arch.h>
#include <asm/mach/flash.h>
#include <asm/mach/irq.h>
#include <asm/mach/map.h>
#include <asm/mach/mmc.h>
/*
* All IO addresses are mapped onto VA 0xFFFx.xxxx, where x.xxxx
* is the (PA >> 12).
*
* Setup a VA for the Versatile Vectored Interrupt Controller.
*/
#define VA_VIC_BASE IO_ADDRESS(VERSATILE_VIC_BASE)
#define VA_SIC_BASE IO_ADDRESS(VERSATILE_SIC_BASE)
static
void
vic_mask_irq
(
unsigned
int
irq
)
{
irq
-=
IRQ_VIC_START
;
writel
(
1
<<
irq
,
VA_VIC_BASE
+
VIC_IRQ_ENABLE_CLEAR
);
}
static
void
vic_unmask_irq
(
unsigned
int
irq
)
{
irq
-=
IRQ_VIC_START
;
writel
(
1
<<
irq
,
VA_VIC_BASE
+
VIC_IRQ_ENABLE
);
}
static
struct
irqchip
vic_chip
=
{
.
ack
=
vic_mask_irq
,
.
mask
=
vic_mask_irq
,
.
unmask
=
vic_unmask_irq
,
};
static
void
sic_mask_irq
(
unsigned
int
irq
)
{
irq
-=
IRQ_SIC_START
;
writel
(
1
<<
irq
,
VA_SIC_BASE
+
SIC_IRQ_ENABLE_CLEAR
);
}
static
void
sic_unmask_irq
(
unsigned
int
irq
)
{
irq
-=
IRQ_SIC_START
;
writel
(
1
<<
irq
,
VA_SIC_BASE
+
SIC_IRQ_ENABLE_SET
);
}
static
struct
irqchip
sic_chip
=
{
.
ack
=
sic_mask_irq
,
.
mask
=
sic_mask_irq
,
.
unmask
=
sic_unmask_irq
,
};
static
void
sic_handle_irq
(
unsigned
int
irq
,
struct
irqdesc
*
desc
,
struct
pt_regs
*
regs
)
{
unsigned
long
status
=
readl
(
VA_SIC_BASE
+
SIC_IRQ_STATUS
);
if
(
status
==
0
)
{
do_bad_IRQ
(
irq
,
desc
,
regs
);
return
;
}
do
{
irq
=
ffs
(
status
)
-
1
;
status
&=
~
(
1
<<
irq
);
irq
+=
IRQ_SIC_START
;
desc
=
irq_desc
+
irq
;
desc
->
handle
(
irq
,
desc
,
regs
);
}
while
(
status
);
}
#if 1
#define IRQ_MMCI0A IRQ_VICSOURCE22
#define IRQ_MMCI1A IRQ_VICSOURCE23
#define IRQ_AACI IRQ_VICSOURCE24
#define IRQ_ETH IRQ_VICSOURCE25
#define PIC_MASK 0xFFD00000
#else
#define IRQ_MMCI0A IRQ_SIC_MMCI0A
#define IRQ_MMCI1A IRQ_SIC_MMCI1A
#define IRQ_AACI IRQ_SIC_AACI
#define IRQ_ETH IRQ_SIC_ETH
#define PIC_MASK 0
#endif
static
void
__init
versatile_init_irq
(
void
)
{
unsigned
int
i
,
value
;
/* Disable all interrupts initially. */
writel
(
0
,
VA_VIC_BASE
+
VIC_INT_SELECT
);
writel
(
0
,
VA_VIC_BASE
+
VIC_IRQ_ENABLE
);
writel
(
~
0
,
VA_VIC_BASE
+
VIC_IRQ_ENABLE_CLEAR
);
writel
(
0
,
VA_VIC_BASE
+
VIC_IRQ_STATUS
);
writel
(
0
,
VA_VIC_BASE
+
VIC_ITCR
);
writel
(
~
0
,
VA_VIC_BASE
+
VIC_IRQ_SOFT_CLEAR
);
/*
* Make sure we clear all existing interrupts
*/
writel
(
0
,
VA_VIC_BASE
+
VIC_VECT_ADDR
);
for
(
i
=
0
;
i
<
19
;
i
++
)
{
value
=
readl
(
VA_VIC_BASE
+
VIC_VECT_ADDR
);
writel
(
value
,
VA_VIC_BASE
+
VIC_VECT_ADDR
);
}
for
(
i
=
0
;
i
<
16
;
i
++
)
{
value
=
readl
(
VA_VIC_BASE
+
VIC_VECT_CNTL0
+
(
i
*
4
));
writel
(
value
|
VICVectCntl_Enable
|
i
,
VA_VIC_BASE
+
VIC_VECT_CNTL0
+
(
i
*
4
));
}
writel
(
32
,
VA_VIC_BASE
+
VIC_DEF_VECT_ADDR
);
for
(
i
=
IRQ_VIC_START
;
i
<=
IRQ_VIC_END
;
i
++
)
{
if
(
i
!=
IRQ_VICSOURCE31
)
{
set_irq_chip
(
i
,
&
vic_chip
);
set_irq_handler
(
i
,
do_level_IRQ
);
set_irq_flags
(
i
,
IRQF_VALID
|
IRQF_PROBE
);
}
}
set_irq_handler
(
IRQ_VICSOURCE31
,
sic_handle_irq
);
vic_unmask_irq
(
IRQ_VICSOURCE31
);
/* Do second interrupt controller */
writel
(
~
0
,
VA_SIC_BASE
+
SIC_IRQ_ENABLE_CLEAR
);
for
(
i
=
IRQ_SIC_START
;
i
<=
IRQ_SIC_END
;
i
++
)
{
if
((
PIC_MASK
&
(
1
<<
(
i
-
IRQ_SIC_START
)))
==
0
)
{
set_irq_chip
(
i
,
&
sic_chip
);
set_irq_handler
(
i
,
do_level_IRQ
);
set_irq_flags
(
i
,
IRQF_VALID
|
IRQF_PROBE
);
}
}
/*
* Interrupts on secondary controller from 0 to 8 are routed to
* source 31 on PIC.
* Interrupts from 21 to 31 are routed directly to the VIC on
* the corresponding number on primary controller. This is controlled
* by setting PIC_ENABLEx.
*/
writel
(
PIC_MASK
,
VA_SIC_BASE
+
SIC_INT_PIC_ENABLE
);
}
static
struct
map_desc
versatile_io_desc
[]
__initdata
=
{
{
IO_ADDRESS
(
VERSATILE_SYS_BASE
),
VERSATILE_SYS_BASE
,
SZ_4K
,
MT_DEVICE
},
{
IO_ADDRESS
(
VERSATILE_SIC_BASE
),
VERSATILE_SIC_BASE
,
SZ_4K
,
MT_DEVICE
},
{
IO_ADDRESS
(
VERSATILE_VIC_BASE
),
VERSATILE_VIC_BASE
,
SZ_4K
,
MT_DEVICE
},
{
IO_ADDRESS
(
VERSATILE_SCTL_BASE
),
VERSATILE_SCTL_BASE
,
SZ_4K
*
9
,
MT_DEVICE
},
#ifdef CONFIG_DEBUG_LL
{
IO_ADDRESS
(
VERSATILE_UART0_BASE
),
VERSATILE_UART0_BASE
,
SZ_4K
,
MT_DEVICE
},
#endif
#ifdef FIXME
{
PCI_MEMORY_VADDR
,
PHYS_PCI_MEM_BASE
,
SZ_16M
,
MT_DEVICE
},
{
PCI_CONFIG_VADDR
,
PHYS_PCI_CONFIG_BASE
,
SZ_16M
,
MT_DEVICE
},
{
PCI_V3_VADDR
,
PHYS_PCI_V3_BASE
,
SZ_512K
,
MT_DEVICE
},
{
PCI_IO_VADDR
,
PHYS_PCI_IO_BASE
,
SZ_64K
,
MT_DEVICE
},
#endif
};
static
void
__init
versatile_map_io
(
void
)
{
iotable_init
(
versatile_io_desc
,
ARRAY_SIZE
(
versatile_io_desc
));
}
#define VERSATILE_REFCOUNTER (IO_ADDRESS(VERSATILE_SYS_BASE) + VERSATILE_SYS_24MHz_OFFSET)
/*
* This is the VersatilePB sched_clock implementation. This has
* a resolution of 41.7ns, and a maximum value of about 179s.
*/
unsigned
long
long
sched_clock
(
void
)
{
unsigned
long
long
v
;
v
=
(
unsigned
long
long
)
readl
(
VERSATILE_REFCOUNTER
)
*
125
;
do_div
(
v
,
3
);
return
v
;
}
#define VERSATILE_FLASHCTRL (IO_ADDRESS(VERSATILE_SYS_BASE) + VERSATILE_SYS_FLASH_OFFSET)
static
int
versatile_flash_init
(
void
)
{
u32
val
;
val
=
__raw_readl
(
VERSATILE_FLASHCTRL
);
val
&=
~
VERSATILE_FLASHPROG_FLVPPEN
;
__raw_writel
(
val
,
VERSATILE_FLASHCTRL
);
return
0
;
}
static
void
versatile_flash_exit
(
void
)
{
u32
val
;
val
=
__raw_readl
(
VERSATILE_FLASHCTRL
);
val
&=
~
VERSATILE_FLASHPROG_FLVPPEN
;
__raw_writel
(
val
,
VERSATILE_FLASHCTRL
);
}
static
void
versatile_flash_set_vpp
(
int
on
)
{
u32
val
;
val
=
__raw_readl
(
VERSATILE_FLASHCTRL
);
if
(
on
)
val
|=
VERSATILE_FLASHPROG_FLVPPEN
;
else
val
&=
~
VERSATILE_FLASHPROG_FLVPPEN
;
__raw_writel
(
val
,
VERSATILE_FLASHCTRL
);
}
static
struct
flash_platform_data
versatile_flash_data
=
{
.
map_name
=
"cfi_probe"
,
.
width
=
4
,
.
init
=
versatile_flash_init
,
.
exit
=
versatile_flash_exit
,
.
set_vpp
=
versatile_flash_set_vpp
,
};
static
struct
resource
versatile_flash_resource
=
{
.
start
=
VERSATILE_FLASH_BASE
,
.
end
=
VERSATILE_FLASH_BASE
+
VERSATILE_FLASH_SIZE
,
.
flags
=
IORESOURCE_MEM
,
};
static
struct
platform_device
versatile_flash_device
=
{
.
name
=
"armflash"
,
.
id
=
0
,
.
dev
=
{
.
platform_data
=
&
versatile_flash_data
,
},
.
num_resources
=
1
,
.
resource
=
&
versatile_flash_resource
,
};
static
struct
resource
smc91x_resources
[]
=
{
[
0
]
=
{
.
start
=
VERSATILE_ETH_BASE
,
.
end
=
VERSATILE_ETH_BASE
+
SZ_64K
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
IRQ_ETH
,
.
end
=
IRQ_ETH
,
.
flags
=
IORESOURCE_IRQ
,
},
};
static
struct
platform_device
smc91x_device
=
{
.
name
=
"smc91x"
,
.
id
=
0
,
.
num_resources
=
ARRAY_SIZE
(
smc91x_resources
),
.
resource
=
smc91x_resources
,
};
#define VERSATILE_SYSMCI (IO_ADDRESS(VERSATILE_SYS_BASE) + VERSATILE_SYS_MCI_OFFSET)
static
unsigned
int
mmc_status
(
struct
device
*
dev
)
{
struct
amba_device
*
adev
=
container_of
(
dev
,
struct
amba_device
,
dev
);
u32
mask
;
if
(
adev
->
res
.
start
==
VERSATILE_MMCI0_BASE
)
mask
=
1
;
else
mask
=
2
;
return
readl
(
VERSATILE_SYSMCI
)
&
mask
;
}
static
struct
mmc_platform_data
mmc0_plat_data
=
{
.
mclk
=
33000000
,
.
ocr_mask
=
MMC_VDD_32_33
|
MMC_VDD_33_34
,
.
status
=
mmc_status
,
};
static
struct
mmc_platform_data
mmc1_plat_data
=
{
.
mclk
=
33000000
,
.
ocr_mask
=
MMC_VDD_32_33
|
MMC_VDD_33_34
,
.
status
=
mmc_status
,
};
#define AMBA_DEVICE(name,busid,base,plat) \
static struct amba_device name##_device = { \
.dev = { \
.coherent_dma_mask = ~0, \
.bus_id = busid, \
.platform_data = plat, \
}, \
.res = { \
.start = VERSATILE_##base##_BASE, \
.end = (VERSATILE_##base##_BASE) + SZ_4K - 1,\
.flags = IORESOURCE_MEM, \
}, \
.irq = base##_IRQ, \
.dma = base##_DMA, \
}
#define AACI_IRQ { IRQ_AACI, NO_IRQ }
#define AACI_DMA { 0x80, 0x81 }
#define MMCI0_IRQ { IRQ_MMCI0A,IRQ_SIC_MMCI0B }
#define MMCI0_DMA { 0x84, 0 }
#define KMI0_IRQ { IRQ_SIC_KMI0, NO_IRQ }
#define KMI0_DMA { 0, 0 }
#define KMI1_IRQ { IRQ_SIC_KMI1, NO_IRQ }
#define KMI1_DMA { 0, 0 }
#define UART3_IRQ { IRQ_SIC_UART3, NO_IRQ }
#define UART3_DMA { 0x86, 0x87 }
#define SCI1_IRQ { IRQ_SIC_SCI3, NO_IRQ }
#define SCI1_DMA { 0x88, 0x89 }
#define MMCI1_IRQ { IRQ_MMCI1A, IRQ_SIC_MMCI1B }
#define MMCI1_DMA { 0x85, 0 }
/*
* These devices are connected directly to the multi-layer AHB switch
*/
#define SMC_IRQ { NO_IRQ, NO_IRQ }
#define SMC_DMA { 0, 0 }
#define MPMC_IRQ { NO_IRQ, NO_IRQ }
#define MPMC_DMA { 0, 0 }
#define CLCD_IRQ { IRQ_CLCDINT, NO_IRQ }
#define CLCD_DMA { 0, 0 }
#define DMAC_IRQ { IRQ_DMAINT, NO_IRQ }
#define DMAC_DMA { 0, 0 }
/*
* These devices are connected via the core APB bridge
*/
#define SCTL_IRQ { NO_IRQ, NO_IRQ }
#define SCTL_DMA { 0, 0 }
#define WATCHDOG_IRQ { IRQ_WDOGINT, NO_IRQ }
#define WATCHDOG_DMA { 0, 0 }
#define GPIO0_IRQ { IRQ_GPIOINT0, NO_IRQ }
#define GPIO0_DMA { 0, 0 }
#define GPIO1_IRQ { IRQ_GPIOINT1, NO_IRQ }
#define GPIO1_DMA { 0, 0 }
#define GPIO2_IRQ { IRQ_GPIOINT2, NO_IRQ }
#define GPIO2_DMA { 0, 0 }
#define GPIO3_IRQ { IRQ_GPIOINT3, NO_IRQ }
#define GPIO3_DMA { 0, 0 }
#define RTC_IRQ { IRQ_RTCINT, NO_IRQ }
#define RTC_DMA { 0, 0 }
/*
* These devices are connected via the DMA APB bridge
*/
#define SCI_IRQ { IRQ_SCIINT, NO_IRQ }
#define SCI_DMA { 7, 6 }
#define UART0_IRQ { IRQ_UARTINT0, NO_IRQ }
#define UART0_DMA { 15, 14 }
#define UART1_IRQ { IRQ_UARTINT1, NO_IRQ }
#define UART1_DMA { 13, 12 }
#define UART2_IRQ { IRQ_UARTINT2, NO_IRQ }
#define UART2_DMA { 11, 10 }
#define SSP_IRQ { IRQ_SSPINT, NO_IRQ }
#define SSP_DMA { 9, 8 }
/* FPGA Primecells */
AMBA_DEVICE
(
aaci
,
"fpga:04"
,
AACI
,
NULL
);
AMBA_DEVICE
(
mmc0
,
"fpga:05"
,
MMCI0
,
&
mmc0_plat_data
);
AMBA_DEVICE
(
kmi0
,
"fpga:06"
,
KMI0
,
NULL
);
AMBA_DEVICE
(
kmi1
,
"fpga:07"
,
KMI1
,
NULL
);
AMBA_DEVICE
(
uart3
,
"fpga:09"
,
UART3
,
NULL
);
AMBA_DEVICE
(
sci1
,
"fpga:0a"
,
SCI1
,
NULL
);
AMBA_DEVICE
(
mmc1
,
"fpga:0b"
,
MMCI1
,
&
mmc1_plat_data
);
/* DevChip Primecells */
AMBA_DEVICE
(
smc
,
"dev:00"
,
SMC
,
NULL
);
AMBA_DEVICE
(
mpmc
,
"dev:10"
,
MPMC
,
NULL
);
AMBA_DEVICE
(
clcd
,
"dev:20"
,
CLCD
,
NULL
);
AMBA_DEVICE
(
dmac
,
"dev:30"
,
DMAC
,
NULL
);
AMBA_DEVICE
(
sctl
,
"dev:e0"
,
SCTL
,
NULL
);
AMBA_DEVICE
(
wdog
,
"dev:e1"
,
WATCHDOG
,
NULL
);
AMBA_DEVICE
(
gpio0
,
"dev:e4"
,
GPIO0
,
NULL
);
AMBA_DEVICE
(
gpio1
,
"dev:e5"
,
GPIO1
,
NULL
);
AMBA_DEVICE
(
gpio2
,
"dev:e6"
,
GPIO2
,
NULL
);
AMBA_DEVICE
(
gpio3
,
"dev:e7"
,
GPIO3
,
NULL
);
AMBA_DEVICE
(
rtc
,
"dev:e8"
,
RTC
,
NULL
);
AMBA_DEVICE
(
sci0
,
"dev:f0"
,
SCI
,
NULL
);
AMBA_DEVICE
(
uart0
,
"dev:f1"
,
UART0
,
NULL
);
AMBA_DEVICE
(
uart1
,
"dev:f2"
,
UART1
,
NULL
);
AMBA_DEVICE
(
uart2
,
"dev:f3"
,
UART2
,
NULL
);
AMBA_DEVICE
(
ssp0
,
"dev:f4"
,
SSP
,
NULL
);
static
struct
amba_device
*
amba_devs
[]
__initdata
=
{
&
dmac_device
,
&
uart0_device
,
&
uart1_device
,
&
uart2_device
,
&
uart3_device
,
&
smc_device
,
&
mpmc_device
,
&
clcd_device
,
&
sctl_device
,
&
wdog_device
,
&
gpio0_device
,
&
gpio1_device
,
&
gpio2_device
,
&
gpio3_device
,
&
rtc_device
,
&
sci0_device
,
&
ssp0_device
,
&
aaci_device
,
&
mmc0_device
,
&
kmi0_device
,
&
kmi1_device
,
&
sci1_device
,
&
mmc1_device
,
};
#define VA_LEDS_BASE (IO_ADDRESS(VERSATILE_SYS_BASE) + VERSATILE_SYS_LED_OFFSET)
static
void
versatile_leds_event
(
led_event_t
ledevt
)
{
unsigned
long
flags
;
u32
val
;
local_irq_save
(
flags
);
val
=
readl
(
VA_LEDS_BASE
);
switch
(
ledevt
)
{
case
led_idle_start
:
val
=
val
&
~
VERSATILE_SYS_LED0
;
break
;
case
led_idle_end
:
val
=
val
|
VERSATILE_SYS_LED0
;
break
;
case
led_timer
:
val
=
val
^
VERSATILE_SYS_LED1
;
break
;
case
led_halted
:
val
=
0
;
break
;
default:
break
;
}
writel
(
val
,
VA_LEDS_BASE
);
local_irq_restore
(
flags
);
}
static
void
__init
versatile_init
(
void
)
{
int
i
;
platform_add_device
(
&
versatile_flash_device
);
platform_add_device
(
&
smc91x_device
);
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
amba_devs
);
i
++
)
{
struct
amba_device
*
d
=
amba_devs
[
i
];
amba_device_register
(
d
,
&
iomem_resource
);
}
leds_event
=
versatile_leds_event
;
}
MACHINE_START
(
VERSATILE_PB
,
"ARM-Versatile PB"
)
MAINTAINER
(
"ARM Ltd/Deep Blue Solutions Ltd"
)
BOOT_MEM
(
0x00000000
,
0x101f1000
,
0xf11f1000
)
BOOT_PARAMS
(
0x00000100
)
MAPIO
(
versatile_map_io
)
INITIRQ
(
versatile_init_irq
)
INIT_MACHINE
(
versatile_init
)
MACHINE_END
arch/arm/mm/Kconfig
View file @
5157e5c7
...
...
@@ -114,8 +114,9 @@ config CPU_ARM925T
# ARM926T
config CPU_ARM926T
bool "Support ARM926T processor"
depends on ARCH_INTEGRATOR || ARCH_OMAP1610
bool "Support ARM926T processor" if ARCH_INTEGRATOR
depends on ARCH_INTEGRATOR || ARCH_VERSATILE_PB || ARCH_OMAP1610
default y if ARCH_VERSATILE_PB
select CPU_32v5
select CPU_ABRT_EV5TJ
select CPU_COPY_V4WB
...
...
include/asm-arm/arch-versatile/dma.h
0 → 100644
View file @
5157e5c7
/*
* linux/include/asm-arm/arch-versatile/dma.h
*
* Copyright (C) 2003 ARM Limited.
* Copyright (C) 1997,1998 Russell King
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef __ASM_ARCH_DMA_H
#define __ASM_ARCH_DMA_H
#define MAX_DMA_ADDRESS 0xffffffff
#define MAX_DMA_CHANNELS 0
#endif
/* _ASM_ARCH_DMA_H */
include/asm-arm/arch-versatile/hardware.h
0 → 100644
View file @
5157e5c7
/*
* linux/include/asm-arm/arch-versatile/hardware.h
*
* This file contains the hardware definitions of the Versatile PB board.
*
* Copyright (C) 2003 ARM Limited.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef __ASM_ARCH_HARDWARE_H
#define __ASM_ARCH_HARDWARE_H
#include <asm/sizes.h>
#include <asm/arch/platform.h>
// FIXME = PCI settings need to be fixed!!!!!
/*
* Similar to above, but for PCI addresses (memory, IO, Config and the
* V3 chip itself). WARNING: this has to mirror definitions in platform.h
*/
#define PCI_MEMORY_VADDR 0xe8000000
#define PCI_CONFIG_VADDR 0xec000000
#define PCI_V3_VADDR 0xed000000
#define PCI_IO_VADDR 0xee000000
#define PCIO_BASE PCI_IO_VADDR
#define PCIMEM_BASE PCI_MEMORY_VADDR
/* macro to get at IO space when running virtually */
#define IO_ADDRESS(x) (((x) & 0x0fffffff) + (((x) >> 4) & 0x0f000000) + 0xf0000000)
#endif
include/asm-arm/arch-versatile/io.h
0 → 100644
View file @
5157e5c7
/*
* linux/include/asm-arm/arch-versatile/io.h
*
* Copyright (C) 2003 ARM Limited
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef __ASM_ARM_ARCH_IO_H
#define __ASM_ARM_ARCH_IO_H
#define IO_SPACE_LIMIT 0xffff
#define __io(a) ((a))
#define __mem_pci(a) ((unsigned long)(a))
#define __mem_isa(a) ((unsigned long)(a))
#endif
include/asm-arm/arch-versatile/irqs.h
0 → 100644
View file @
5157e5c7
/*
* linux/include/asm-arm/arch-versatile/irqs.h
*
* Copyright (C) 2003 ARM Limited
* Copyright (C) 2000 Deep Blue Solutions Ltd.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <asm/arch/platform.h>
/*
* IRQ interrupts definitions are the same the INT definitions
* held within platform.h
*/
#define IRQ_VIC_START 0
#define IRQ_WDOGINT (IRQ_VIC_START + INT_WDOGINT)
#define IRQ_SOFTINT (IRQ_VIC_START + INT_SOFTINT)
#define IRQ_COMMRx (IRQ_VIC_START + INT_COMMRx)
#define IRQ_COMMTx (IRQ_VIC_START + INT_COMMTx)
#define IRQ_TIMERINT0_1 (IRQ_VIC_START + INT_TIMERINT0_1)
#define IRQ_TIMERINT2_3 (IRQ_VIC_START + INT_TIMERINT2_3)
#define IRQ_GPIOINT0 (IRQ_VIC_START + INT_GPIOINT0)
#define IRQ_GPIOINT1 (IRQ_VIC_START + INT_GPIOINT1)
#define IRQ_GPIOINT2 (IRQ_VIC_START + INT_GPIOINT2)
#define IRQ_GPIOINT3 (IRQ_VIC_START + INT_GPIOINT3)
#define IRQ_RTCINT (IRQ_VIC_START + INT_RTCINT)
#define IRQ_SSPINT (IRQ_VIC_START + INT_SSPINT)
#define IRQ_UARTINT0 (IRQ_VIC_START + INT_UARTINT0)
#define IRQ_UARTINT1 (IRQ_VIC_START + INT_UARTINT1)
#define IRQ_UARTINT2 (IRQ_VIC_START + INT_UARTINT2)
#define IRQ_SCIINT (IRQ_VIC_START + INT_SCIINT)
#define IRQ_CLCDINT (IRQ_VIC_START + INT_CLCDINT)
#define IRQ_DMAINT (IRQ_VIC_START + INT_DMAINT)
#define IRQ_PWRFAILINT (IRQ_VIC_START + INT_PWRFAILINT)
#define IRQ_MBXINT (IRQ_VIC_START + INT_MBXINT)
#define IRQ_GNDINT (IRQ_VIC_START + INT_GNDINT)
#define IRQ_VICSOURCE21 (IRQ_VIC_START + INT_VICSOURCE21)
#define IRQ_VICSOURCE22 (IRQ_VIC_START + INT_VICSOURCE22)
#define IRQ_VICSOURCE23 (IRQ_VIC_START + INT_VICSOURCE23)
#define IRQ_VICSOURCE24 (IRQ_VIC_START + INT_VICSOURCE24)
#define IRQ_VICSOURCE25 (IRQ_VIC_START + INT_VICSOURCE25)
#define IRQ_VICSOURCE26 (IRQ_VIC_START + INT_VICSOURCE26)
#define IRQ_VICSOURCE27 (IRQ_VIC_START + INT_VICSOURCE27)
#define IRQ_VICSOURCE28 (IRQ_VIC_START + INT_VICSOURCE28)
#define IRQ_VICSOURCE29 (IRQ_VIC_START + INT_VICSOURCE29)
#define IRQ_VICSOURCE30 (IRQ_VIC_START + INT_VICSOURCE30)
#define IRQ_VICSOURCE31 (IRQ_VIC_START + INT_VICSOURCE31)
#define IRQ_VIC_END (IRQ_VIC_START + 31)
#define IRQMASK_WDOGINT INTMASK_WDOGINT
#define IRQMASK_SOFTINT INTMASK_SOFTINT
#define IRQMASK_COMMRx INTMASK_COMMRx
#define IRQMASK_COMMTx INTMASK_COMMTx
#define IRQMASK_TIMERINT0_1 INTMASK_TIMERINT0_1
#define IRQMASK_TIMERINT2_3 INTMASK_TIMERINT2_3
#define IRQMASK_GPIOINT0 INTMASK_GPIOINT0
#define IRQMASK_GPIOINT1 INTMASK_GPIOINT1
#define IRQMASK_GPIOINT2 INTMASK_GPIOINT2
#define IRQMASK_GPIOINT3 INTMASK_GPIOINT3
#define IRQMASK_RTCINT INTMASK_RTCINT
#define IRQMASK_SSPINT INTMASK_SSPINT
#define IRQMASK_UARTINT0 INTMASK_UARTINT0
#define IRQMASK_UARTINT1 INTMASK_UARTINT1
#define IRQMASK_UARTINT2 INTMASK_UARTINT2
#define IRQMASK_SCIINT INTMASK_SCIINT
#define IRQMASK_CLCDINT INTMASK_CLCDINT
#define IRQMASK_DMAINT INTMASK_DMAINT
#define IRQMASK_PWRFAILINT INTMASK_PWRFAILINT
#define IRQMASK_MBXINT INTMASK_MBXINT
#define IRQMASK_GNDINT INTMASK_GNDINT
#define IRQMASK_VICSOURCE21 INTMASK_VICSOURCE21
#define IRQMASK_VICSOURCE22 INTMASK_VICSOURCE22
#define IRQMASK_VICSOURCE23 INTMASK_VICSOURCE23
#define IRQMASK_VICSOURCE24 INTMASK_VICSOURCE24
#define IRQMASK_VICSOURCE25 INTMASK_VICSOURCE25
#define IRQMASK_VICSOURCE26 INTMASK_VICSOURCE26
#define IRQMASK_VICSOURCE27 INTMASK_VICSOURCE27
#define IRQMASK_VICSOURCE28 INTMASK_VICSOURCE28
#define IRQMASK_VICSOURCE29 INTMASK_VICSOURCE29
#define IRQMASK_VICSOURCE30 INTMASK_VICSOURCE30
#define IRQMASK_VICSOURCE31 INTMASK_VICSOURCE31
/*
* FIQ interrupts definitions are the same the INT definitions.
*/
#define FIQ_WDOGINT INT_WDOGINT
#define FIQ_SOFTINT INT_SOFTINT
#define FIQ_COMMRx INT_COMMRx
#define FIQ_COMMTx INT_COMMTx
#define FIQ_TIMERINT0_1 INT_TIMERINT0_1
#define FIQ_TIMERINT2_3 INT_TIMERINT2_3
#define FIQ_GPIOINT0 INT_GPIOINT0
#define FIQ_GPIOINT1 INT_GPIOINT1
#define FIQ_GPIOINT2 INT_GPIOINT2
#define FIQ_GPIOINT3 INT_GPIOINT3
#define FIQ_RTCINT INT_RTCINT
#define FIQ_SSPINT INT_SSPINT
#define FIQ_UARTINT0 INT_UARTINT0
#define FIQ_UARTINT1 INT_UARTINT1
#define FIQ_UARTINT2 INT_UARTINT2
#define FIQ_SCIINT INT_SCIINT
#define FIQ_CLCDINT INT_CLCDINT
#define FIQ_DMAINT INT_DMAINT
#define FIQ_PWRFAILINT INT_PWRFAILINT
#define FIQ_MBXINT INT_MBXINT
#define FIQ_GNDINT INT_GNDINT
#define FIQ_VICSOURCE21 INT_VICSOURCE21
#define FIQ_VICSOURCE22 INT_VICSOURCE22
#define FIQ_VICSOURCE23 INT_VICSOURCE23
#define FIQ_VICSOURCE24 INT_VICSOURCE24
#define FIQ_VICSOURCE25 INT_VICSOURCE25
#define FIQ_VICSOURCE26 INT_VICSOURCE26
#define FIQ_VICSOURCE27 INT_VICSOURCE27
#define FIQ_VICSOURCE28 INT_VICSOURCE28
#define FIQ_VICSOURCE29 INT_VICSOURCE29
#define FIQ_VICSOURCE30 INT_VICSOURCE30
#define FIQ_VICSOURCE31 INT_VICSOURCE31
#define FIQMASK_WDOGINT INTMASK_WDOGINT
#define FIQMASK_SOFTINT INTMASK_SOFTINT
#define FIQMASK_COMMRx INTMASK_COMMRx
#define FIQMASK_COMMTx INTMASK_COMMTx
#define FIQMASK_TIMERINT0_1 INTMASK_TIMERINT0_1
#define FIQMASK_TIMERINT2_3 INTMASK_TIMERINT2_3
#define FIQMASK_GPIOINT0 INTMASK_GPIOINT0
#define FIQMASK_GPIOINT1 INTMASK_GPIOINT1
#define FIQMASK_GPIOINT2 INTMASK_GPIOINT2
#define FIQMASK_GPIOINT3 INTMASK_GPIOINT3
#define FIQMASK_RTCINT INTMASK_RTCINT
#define FIQMASK_SSPINT INTMASK_SSPINT
#define FIQMASK_UARTINT0 INTMASK_UARTINT0
#define FIQMASK_UARTINT1 INTMASK_UARTINT1
#define FIQMASK_UARTINT2 INTMASK_UARTINT2
#define FIQMASK_SCIINT INTMASK_SCIINT
#define FIQMASK_CLCDINT INTMASK_CLCDINT
#define FIQMASK_DMAINT INTMASK_DMAINT
#define FIQMASK_PWRFAILINT INTMASK_PWRFAILINT
#define FIQMASK_MBXINT INTMASK_MBXINT
#define FIQMASK_GNDINT INTMASK_GNDINT
#define FIQMASK_VICSOURCE21 INTMASK_VICSOURCE21
#define FIQMASK_VICSOURCE22 INTMASK_VICSOURCE22
#define FIQMASK_VICSOURCE23 INTMASK_VICSOURCE23
#define FIQMASK_VICSOURCE24 INTMASK_VICSOURCE24
#define FIQMASK_VICSOURCE25 INTMASK_VICSOURCE25
#define FIQMASK_VICSOURCE26 INTMASK_VICSOURCE26
#define FIQMASK_VICSOURCE27 INTMASK_VICSOURCE27
#define FIQMASK_VICSOURCE28 INTMASK_VICSOURCE28
#define FIQMASK_VICSOURCE29 INTMASK_VICSOURCE29
#define FIQMASK_VICSOURCE30 INTMASK_VICSOURCE30
#define FIQMASK_VICSOURCE31 INTMASK_VICSOURCE31
/*
* Secondary interrupt controller
*/
#define IRQ_SIC_START 32
#define IRQ_SIC_MMCI0B (IRQ_SIC_START + SIC_INT_MMCI0B)
#define IRQ_SIC_MMCI1B (IRQ_SIC_START + SIC_INT_MMCI1B)
#define IRQ_SIC_KMI0 (IRQ_SIC_START + SIC_INT_KMI0)
#define IRQ_SIC_KMI1 (IRQ_SIC_START + SIC_INT_KMI1)
#define IRQ_SIC_SCI3 (IRQ_SIC_START + SIC_INT_SCI3)
#define IRQ_SIC_UART3 (IRQ_SIC_START + SIC_INT_UART3)
#define IRQ_SIC_CLCD (IRQ_SIC_START + SIC_INT_CLCD)
#define IRQ_SIC_TOUCH (IRQ_SIC_START + SIC_INT_TOUCH)
#define IRQ_SIC_KEYPAD (IRQ_SIC_START + SIC_INT_KEYPAD)
#define IRQ_SIC_DoC (IRQ_SIC_START + SIC_INT_DoC)
#define IRQ_SIC_MMCI0A (IRQ_SIC_START + SIC_INT_MMCI0A)
#define IRQ_SIC_MMCI1A (IRQ_SIC_START + SIC_INT_MMCI1A)
#define IRQ_SIC_AACI (IRQ_SIC_START + SIC_INT_AACI)
#define IRQ_SIC_ETH (IRQ_SIC_START + SIC_INT_ETH)
#define IRQ_SIC_USB (IRQ_SIC_START + SIC_INT_USB)
#define IRQ_SIC_PCI0 (IRQ_SIC_START + SIC_INT_PCI0)
#define IRQ_SIC_PCI1 (IRQ_SIC_START + SIC_INT_PCI1)
#define IRQ_SIC_PCI2 (IRQ_SIC_START + SIC_INT_PCI2)
#define IRQ_SIC_PCI3 (IRQ_SIC_START + SIC_INT_PCI3)
#define IRQ_SIC_END 63
#define SIC_IRQMASK_MMCI0B SIC_INTMASK_MMCI0B
#define SIC_IRQMASK_MMCI1B SIC_INTMASK_MMCI1B
#define SIC_IRQMASK_KMI0 SIC_INTMASK_KMI0
#define SIC_IRQMASK_KMI1 SIC_INTMASK_KMI1
#define SIC_IRQMASK_SCI3 SIC_INTMASK_SCI3
#define SIC_IRQMASK_UART3 SIC_INTMASK_UART3
#define SIC_IRQMASK_CLCD SIC_INTMASK_CLCD
#define SIC_IRQMASK_TOUCH SIC_INTMASK_TOUCH
#define SIC_IRQMASK_KEYPAD SIC_INTMASK_KEYPAD
#define SIC_IRQMASK_DoC SIC_INTMASK_DoC
#define SIC_IRQMASK_MMCI0A SIC_INTMASK_MMCI0A
#define SIC_IRQMASK_MMCI1A SIC_INTMASK_MMCI1A
#define SIC_IRQMASK_AACI SIC_INTMASK_AACI
#define SIC_IRQMASK_ETH SIC_INTMASK_ETH
#define SIC_IRQMASK_USB SIC_INTMASK_USB
#define SIC_IRQMASK_PCI0 SIC_INTMASK_PCI0
#define SIC_IRQMASK_PCI1 SIC_INTMASK_PCI1
#define SIC_IRQMASK_PCI2 SIC_INTMASK_PCI2
#define SIC_IRQMASK_PCI3 SIC_INTMASK_PCI3
#define NR_IRQS 64
include/asm-arm/arch-versatile/memory.h
0 → 100644
View file @
5157e5c7
/*
* linux/include/asm-arm/arch-versatile/memory.h
*
* Copyright (C) 2003 ARM Limited
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef __ASM_ARCH_MMU_H
#define __ASM_ARCH_MMU_H
/*
* Task size: 3GB
*/
#define TASK_SIZE (0xbf000000UL)
#define TASK_SIZE_26 (0x04000000UL)
/*
* This decides where the kernel will search for a free chunk of vm
* space during mmap's.
*/
#define TASK_UNMAPPED_BASE (0x40000000)
/*
* Page offset: 3GB
*/
#define PAGE_OFFSET (0xc0000000UL)
#define PHYS_OFFSET (0x00000000UL)
/*
* On Versatile PB, the dram is contiguous
*/
#define __virt_to_phys__is_a_macro
#define __virt_to_phys(vpage) ((vpage) - PAGE_OFFSET)
#define __phys_to_virt__is_a_macro
#define __phys_to_virt(ppage) ((ppage) + PAGE_OFFSET)
/*
* Virtual view <-> DMA view memory address translations
* virt_to_bus: Used to translate the virtual address to an
* address suitable to be passed to set_dma_addr
* bus_to_virt: Used to convert an address for DMA operations
* to an address that the kernel can use.
*/
#define __virt_to_bus__is_a_macro
#define __virt_to_bus(x) ((x) - PAGE_OFFSET)
#define __bus_to_virt__is_a_macro
#define __bus_to_virt(x) ((x) + PAGE_OFFSET)
#endif
include/asm-arm/arch-versatile/param.h
0 → 100644
View file @
5157e5c7
/*
* linux/include/asm-arm/arch-versatile/param.h
*
* Copyright (C) 2002 ARM Limited
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
include/asm-arm/arch-versatile/platform.h
0 → 100644
View file @
5157e5c7
/*
* linux/include/asm-arm/arch-versatile/platform.h
*
* Copyright (c) ARM Limited 2003. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef __address_h
#define __address_h 1
/*
* Memory definitions
*/
#define VERSATILE_BOOT_ROM_LO 0x30000000
/* DoC Base (64Mb)...*/
#define VERSATILE_BOOT_ROM_HI 0x30000000
#define VERSATILE_BOOT_ROM_BASE VERSATILE_BOOT_ROM_HI
/* Normal position */
#define VERSATILE_BOOT_ROM_SIZE SZ_64M
#define VERSATILE_SSRAM_BASE
/* VERSATILE_SSMC_BASE ? */
#define VERSATILE_SSRAM_SIZE SZ_2M
#define VERSATILE_FLASH_BASE 0x34000000
#define VERSATILE_FLASH_SIZE SZ_64M
/*
* SDRAM
*/
#define VERSATILE_SDRAM_BASE 0x00000000
/*
* Logic expansion modules
*
*/
/* ------------------------------------------------------------------------
* Versatile PB Registers
* ------------------------------------------------------------------------
*
*/
#define VERSATILE_SYS_ID_OFFSET 0x00
#define VERSATILE_SYS_SW_OFFSET 0x04
#define VERSATILE_SYS_LED_OFFSET 0x08
#define VERSATILE_SYS_OSC0_OFFSET 0x0C
#define VERSATILE_SYS_OSC1_OFFSET 0x10
#define VERSATILE_SYS_OSC2_OFFSET 0x14
#define VERSATILE_SYS_OSC3_OFFSET 0x18
#define VERSATILE_SYS_OSC4_OFFSET 0x1C
#define VERSATILE_SYS_LOCK_OFFSET 0x20
#define VERSATILE_SYS_100HZ_OFFSET 0x24
#define VERSATILE_SYS_CFGDATA1_OFFSET 0x28
#define VERSATILE_SYS_CFGDATA2_OFFSET 0x2C
#define VERSATILE_SYS_FLAGS_OFFSET 0x30
#define VERSATILE_SYS_FLAGSSET_OFFSET 0x30
#define VERSATILE_SYS_FLAGSCLR_OFFSET 0x34
#define VERSATILE_SYS_NVFLAGS_OFFSET 0x38
#define VERSATILE_SYS_NVFLAGSSET_OFFSET 0x38
#define VERSATILE_SYS_NVFLAGSCLR_OFFSET 0x3C
#define VERSATILE_SYS_RESETCTL_OFFSET 0x40
#define VERSATILE_SYS_PICCTL_OFFSET 0x44
#define VERSATILE_SYS_MCI_OFFSET 0x48
#define VERSATILE_SYS_FLASH_OFFSET 0x4C
#define VERSATILE_SYS_CLCD_OFFSET 0x50
#define VERSATILE_SYS_CLCDSER_OFFSET 0x54
#define VERSATILE_SYS_BOOTCS_OFFSET 0x58
#define VERSATILE_SYS_24MHz_OFFSET 0x5C
#define VERSATILE_SYS_MISC_OFFSET 0x60
#define VERSATILE_SYS_TEST_OSC0_OFFSET 0x80
#define VERSATILE_SYS_TEST_OSC1_OFFSET 0x84
#define VERSATILE_SYS_TEST_OSC2_OFFSET 0x88
#define VERSATILE_SYS_TEST_OSC3_OFFSET 0x8C
#define VERSATILE_SYS_TEST_OSC4_OFFSET 0x90
#define VERSATILE_SYS_BASE 0x10000000
#define VERSATILE_SYS_ID (VERSATILE_SYS_BASE + VERSATILE_SYS_ID_OFFSET)
#define VERSATILE_SYS_SW (VERSATILE_SYS_BASE + VERSATILE_SYS_SW_OFFSET)
#define VERSATILE_SYS_LED (VERSATILE_SYS_BASE + VERSATILE_SYS_LED_OFFSET)
#define VERSATILE_SYS_OSC0 (VERSATILE_SYS_BASE + VERSATILE_SYS_OSC0_OFFSET)
#define VERSATILE_SYS_OSC1 (VERSATILE_SYS_BASE + VERSATILE_SYS_OSC1_OFFSET)
#define VERSATILE_SYS_OSC2 (VERSATILE_SYS_BASE + VERSATILE_SYS_OSC2_OFFSET)
#define VERSATILE_SYS_OSC3 (VERSATILE_SYS_BASE + VERSATILE_SYS_OSC3_OFFSET)
#define VERSATILE_SYS_OSC4 (VERSATILE_SYS_BASE + VERSATILE_SYS_OSC4_OFFSET)
#define VERSATILE_SYS_LOCK (VERSATILE_SYS_BASE + VERSATILE_SYS_LOCK_OFFSET)
#define VERSATILE_SYS_100HZ (VERSATILE_SYS_BASE + VERSATILE_SYS_100HZ_OFFSET)
#define VERSATILE_SYS_CFGDATA1 (VERSATILE_SYS_BASE + VERSATILE_SYS_CFGDATA1_OFFSET)
#define VERSATILE_SYS_CFGDATA2 (VERSATILE_SYS_BASE + VERSATILE_SYS_CFGDATA2_OFFSET)
#define VERSATILE_SYS_FLAGS (VERSATILE_SYS_BASE + VERSATILE_SYS_FLAGS_OFFSET)
#define VERSATILE_SYS_FLAGSSET (VERSATILE_SYS_BASE + VERSATILE_SYS_FLAGSSET_OFFSET)
#define VERSATILE_SYS_FLAGSCLR (VERSATILE_SYS_BASE + VERSATILE_SYS_FLAGSCLR_OFFSET)
#define VERSATILE_SYS_NVFLAGS (VERSATILE_SYS_BASE + VERSATILE_SYS_NVFLAGS_OFFSET)
#define VERSATILE_SYS_NVFLAGSSET (VERSATILE_SYS_BASE + VERSATILE_SYS_NVFLAGSSET_OFFSET)
#define VERSATILE_SYS_NVFLAGSCLR (VERSATILE_SYS_BASE + VERSATILE_SYS_NVFLAGSCLR_OFFSET)
#define VERSATILE_SYS_RESETCTL (VERSATILE_SYS_BASE + VERSATILE_SYS_RESETCTL_OFFSET)
#define VERSATILE_SYS_PICCTL (VERSATILE_SYS_BASE + VERSATILE_SYS_PICCTL_OFFSET)
#define VERSATILE_SYS_MCI (VERSATILE_SYS_BASE + VERSATILE_SYS_MCI_OFFSET)
#define VERSATILE_SYS_FLASH (VERSATILE_SYS_BASE + VERSATILE_SYS_FLASH_OFFSET)
#define VERSATILE_SYS_CLCD (VERSATILE_SYS_BASE + VERSATILE_SYS_CLCD_OFFSET)
#define VERSATILE_SYS_CLCDSER (VERSATILE_SYS_BASE + VERSATILE_SYS_CLCDSER_OFFSET)
#define VERSATILE_SYS_BOOTCS (VERSATILE_SYS_BASE + VERSATILE_SYS_BOOTCS_OFFSET)
#define VERSATILE_SYS_24MHz (VERSATILE_SYS_BASE + VERSATILE_SYS_24MHz_OFFSET)
#define VERSATILE_SYS_MISC (VERSATILE_SYS_BASE + VERSATILE_SYS_MISC_OFFSET)
#define VERSATILE_SYS_TEST_OSC0 (VERSATILE_SYS_BASE + VERSATILE_SYS_TEST_OSC0_OFFSET)
#define VERSATILE_SYS_TEST_OSC1 (VERSATILE_SYS_BASE + VERSATILE_SYS_TEST_OSC1_OFFSET)
#define VERSATILE_SYS_TEST_OSC2 (VERSATILE_SYS_BASE + VERSATILE_SYS_TEST_OSC2_OFFSET)
#define VERSATILE_SYS_TEST_OSC3 (VERSATILE_SYS_BASE + VERSATILE_SYS_TEST_OSC3_OFFSET)
#define VERSATILE_SYS_TEST_OSC4 (VERSATILE_SYS_BASE + VERSATILE_SYS_TEST_OSC4_OFFSET)
/*
* Values for VERSATILE_SYS_RESET_CTRL
*/
#define VERSATILE_SYS_CTRL_RESET_CONFIGCLR 0x01
#define VERSATILE_SYS_CTRL_RESET_CONFIGINIT 0x02
#define VERSATILE_SYS_CTRL_RESET_DLLRESET 0x03
#define VERSATILE_SYS_CTRL_RESET_PLLRESET 0x04
#define VERSATILE_SYS_CTRL_RESET_POR 0x05
#define VERSATILE_SYS_CTRL_RESET_DoC 0x06
#define VERSATILE_SYS_CTRL_LED (1 << 0)
/* ------------------------------------------------------------------------
* Versatile PB control registers
* ------------------------------------------------------------------------
*/
/*
* VERSATILE_IDFIELD
*
* 31:24 = manufacturer (0x41 = ARM)
* 23:16 = architecture (0x08 = AHB system bus, ASB processor bus)
* 15:12 = FPGA (0x3 = XVC600 or XVC600E)
* 11:4 = build value
* 3:0 = revision number (0x1 = rev B (AHB))
*/
/*
* VERSATILE_SYS_LOCK
* control access to SYS_OSCx, SYS_CFGDATAx, SYS_RESETCTL,
* SYS_CLD, SYS_BOOTCS
*/
#define VERSATILE_SYS_LOCK_LOCKED (1 << 16)
#define VERSATILE_SYS_LOCKVAL_MASK 0xFFFF
/* write 0xA05F to enable write access */
/*
* VERSATILE_SYS_FLASH
*/
#define VERSATILE_FLASHPROG_FLVPPEN (1 << 0)
/* Enable writing to flash */
/*
* VERSATILE_INTREG
* - used to acknowledge and control MMCI and UART interrupts
*/
#define VERSATILE_INTREG_WPROT 0x00
/* MMC protection status (no interrupt generated) */
#define VERSATILE_INTREG_RI0 0x01
/* Ring indicator UART0 is asserted, */
#define VERSATILE_INTREG_CARDIN 0x08
/* MMCI card in detect */
/* write 1 to acknowledge and clear */
#define VERSATILE_INTREG_RI1 0x02
/* Ring indicator UART1 is asserted, */
#define VERSATILE_INTREG_CARDINSERT 0x03
/* Signal insertion of MMC card */
/*
* VERSATILE peripheral addresses
*/
#define VERSATILE_PCI_CORE_BASE 0x10001000
/* PCI core control */
#define VERSATILE_I2C_BASE 0x10002000
/* I2C control */
#define VERSATILE_SIC_BASE 0x10003000
/* Secondary interrupt controller */
#define VERSATILE_AACI_BASE 0x10004000
/* Audio */
#define VERSATILE_MMCI0_BASE 0x10005000
/* MMC interface */
#define VERSATILE_KMI0_BASE 0x10006000
/* KMI interface */
#define VERSATILE_KMI1_BASE 0x10007000
/* KMI 2nd interface */
#define VERSATILE_CHAR_LCD_BASE 0x10008000
/* Character LCD */
#define VERSATILE_UART3_BASE 0x10009000
/* UART 3 */
#define VERSATILE_SCI1_BASE 0x1000A000
#define VERSATILE_MMCI1_BASE 0x1000B000
/* MMC Interface */
/* 0x1000C000 - 0x1000CFFF = reserved */
#define VERSATILE_ETH_BASE 0x10010000
/* Ethernet */
#define VERSATILE_USB_BASE 0x10020000
/* USB */
/* 0x10030000 - 0x100FFFFF = reserved */
#define VERSATILE_SMC_BASE 0x10100000
/* SMC */
#define VERSATILE_MPMC_BASE 0x10110000
/* MPMC */
#define VERSATILE_CLCD_BASE 0x10120000
/* CLCD */
#define VERSATILE_DMAC_BASE 0x10130000
/* DMA controller */
#define VERSATILE_VIC_BASE 0x10140000
/* Vectored interrupt controller */
#define VERSATILE_PERIPH_BASE 0x10150000
/* off-chip peripherals alias from */
/* 0x10000000 - 0x100FFFFF */
#define VERSATILE_AHBM_BASE 0x101D0000
/* AHB monitor */
#define VERSATILE_SCTL_BASE 0x101E0000
/* System controller */
#define VERSATILE_WATCHDOG_BASE 0x101E1000
/* Watchdog */
#define VERSATILE_TIMER0_1_BASE 0x101E2000
/* Timer 0 and 1 */
#define VERSATILE_TIMER2_3_BASE 0x101E3000
/* Timer 2 and 3 */
#define VERSATILE_GPIO0_BASE 0x101E4000
/* GPIO port 0 */
#define VERSATILE_GPIO1_BASE 0x101E5000
/* GPIO port 1 */
#define VERSATILE_GPIO2_BASE 0x101E6000
/* GPIO port 2 */
#define VERSATILE_GPIO3_BASE 0x101E7000
/* GPIO port 3 */
#define VERSATILE_RTC_BASE 0x101E8000
/* Real Time Clock */
/* 0x101E9000 - reserved */
#define VERSATILE_SCI_BASE 0x101F0000
/* Smart card controller */
#define VERSATILE_UART0_BASE 0x101F1000
/* Uart 0 */
#define VERSATILE_UART1_BASE 0x101F2000
/* Uart 1 */
#define VERSATILE_UART2_BASE 0x101F3000
/* Uart 2 */
#define VERSATILE_SSP_BASE 0x101F4000
/* Synchronous Serial Port */
#define VERSATILE_SSMC_BASE 0x20000000
/* SSMC */
#define VERSATILE_MBX_BASE 0x40000000
/* MBX */
#define VERSATILE_PCI_BASE 0x41000000
/* PCI Interface */
#define VERSATILE_SDRAM67_BASE 0x70000000
/* SDRAM banks 6 and 7 */
#define VERSATILE_LT_BASE 0x80000000
/* Logic Tile expansion */
/*
* Disk on Chip
*/
#define VERSATILE_DOC_BASE 0x2C000000
#define VERSATILE_DOC_SIZE (16 << 20)
#define VERSATILE_DOC_PAGE_SIZE 512
#define VERSATILE_DOC_TOTAL_PAGES (DOC_SIZE / PAGE_SIZE)
#define ERASE_UNIT_PAGES 32
#define START_PAGE 0x80
/*
* LED settings, bits [7:0]
*/
#define VERSATILE_SYS_LED0 (1 << 0)
#define VERSATILE_SYS_LED1 (1 << 1)
#define VERSATILE_SYS_LED2 (1 << 2)
#define VERSATILE_SYS_LED3 (1 << 3)
#define VERSATILE_SYS_LED4 (1 << 4)
#define VERSATILE_SYS_LED5 (1 << 5)
#define VERSATILE_SYS_LED6 (1 << 6)
#define VERSATILE_SYS_LED7 (1 << 7)
#define ALL_LEDS 0xFF
#define LED_BANK VERSATILE_SYS_LED
/*
* Control registers
*/
#define VERSATILE_IDFIELD_OFFSET 0x0
/* Versatile build information */
#define VERSATILE_FLASHPROG_OFFSET 0x4
/* Flash devices */
#define VERSATILE_INTREG_OFFSET 0x8
/* Interrupt control */
#define VERSATILE_DECODE_OFFSET 0xC
/* Fitted logic modules */
/* ------------------------------------------------------------------------
* Versatile PB Interrupt Controller - control registers
* ------------------------------------------------------------------------
*
* Offsets from interrupt controller base
*
* System Controller interrupt controller base is
*
* VERSATILE_IC_BASE
*
* Core Module interrupt controller base is
*
* VERSATILE_SYS_IC
*
*/
#define VIC_IRQ_STATUS 0
#define VIC_FIQ_STATUS 0x04
#define VIC_IRQ_RAW_STATUS 0x08
#define VIC_INT_SELECT 0x0C
/* 1 = FIQ, 0 = IRQ */
#define VIC_IRQ_ENABLE 0x10
/* 1 = enable, 0 = disable */
#define VIC_IRQ_ENABLE_CLEAR 0x14
#define VIC_IRQ_SOFT 0x18
#define VIC_IRQ_SOFT_CLEAR 0x1C
#define VIC_PROTECT 0x20
#define VIC_VECT_ADDR 0x30
#define VIC_DEF_VECT_ADDR 0x34
#define VIC_VECT_ADDR0 0x100
/* 0 to 15 */
#define VIC_VECT_CNTL0 0x200
/* 0 to 15 */
#define VIC_ITCR 0x300
/* VIC test control register */
#define VIC_FIQ_RAW_STATUS 0x08
#define VIC_FIQ_ENABLE 0x10
/* 1 = enable, 0 = disable */
#define VIC_FIQ_ENABLE_CLEAR 0x14
#define VIC_FIQ_SOFT 0x18
#define VIC_FIQ_SOFT_CLEAR 0x1C
#define SIC_IRQ_STATUS 0
#define SIC_IRQ_RAW_STATUS 0x04
#define SIC_IRQ_ENABLE 0x08
#define SIC_IRQ_ENABLE_SET 0x08
#define SIC_IRQ_ENABLE_CLEAR 0x0C
#define SIC_INT_SOFT_SET 0x10
#define SIC_INT_SOFT_CLEAR 0x14
#define SIC_INT_PIC_ENABLE 0x20
/* read status of pass through mask */
#define SIC_INT_PIC_ENABLES 0x20
/* set interrupt pass through bits */
#define SIC_INT_PIC_ENABLEC 0x24
/* Clear interrupt pass through bits */
#define VICVectCntl_Enable (1 << 5)
/* ------------------------------------------------------------------------
* Interrupts - bit assignment (primary)
* ------------------------------------------------------------------------
*/
#define INT_WDOGINT 0
/* Watchdog timer */
#define INT_SOFTINT 1
/* Software interrupt */
#define INT_COMMRx 2
/* Debug Comm Rx interrupt */
#define INT_COMMTx 3
/* Debug Comm Tx interrupt */
#define INT_TIMERINT0_1 4
/* Timer 0 and 1 */
#define INT_TIMERINT2_3 5
/* Timer 2 and 3 */
#define INT_GPIOINT0 6
/* GPIO 0 */
#define INT_GPIOINT1 7
/* GPIO 1 */
#define INT_GPIOINT2 8
/* GPIO 2 */
#define INT_GPIOINT3 9
/* GPIO 3 */
#define INT_RTCINT 10
/* Real Time Clock */
#define INT_SSPINT 11
/* Synchronous Serial Port */
#define INT_UARTINT0 12
/* UART 0 on development chip */
#define INT_UARTINT1 13
/* UART 1 on development chip */
#define INT_UARTINT2 14
/* UART 2 on development chip */
#define INT_SCIINT 15
/* Smart Card Interface */
#define INT_CLCDINT 16
/* CLCD controller */
#define INT_DMAINT 17
/* DMA controller */
#define INT_PWRFAILINT 18
/* Power failure */
#define INT_MBXINT 19
/* Graphics processor */
#define INT_GNDINT 20
/* Reserved */
/* External interrupt signals from logic tiles or secondary controller */
#define INT_VICSOURCE21 21
/* Disk on Chip */
#define INT_VICSOURCE22 22
/* MCI0A */
#define INT_VICSOURCE23 23
/* MCI1A */
#define INT_VICSOURCE24 24
/* AACI */
#define INT_VICSOURCE25 25
/* Ethernet */
#define INT_VICSOURCE26 26
/* USB */
#define INT_VICSOURCE27 27
/* PCI 0 */
#define INT_VICSOURCE28 28
/* PCI 1 */
#define INT_VICSOURCE29 29
/* PCI 2 */
#define INT_VICSOURCE30 30
/* PCI 3 */
#define INT_VICSOURCE31 31
/* SIC source */
/*
* Interrupt bit positions
*
*/
#define INTMASK_WDOGINT (1 << INT_WDOGINT)
#define INTMASK_SOFTINT (1 << INT_SOFTINT)
#define INTMASK_COMMRx (1 << INT_COMMRx)
#define INTMASK_COMMTx (1 << INT_COMMTx)
#define INTMASK_TIMERINT0_1 (1 << INT_TIMERINT0_1)
#define INTMASK_TIMERINT2_3 (1 << INT_TIMERINT2_3)
#define INTMASK_GPIOINT0 (1 << INT_GPIOINT0)
#define INTMASK_GPIOINT1 (1 << INT_GPIOINT1)
#define INTMASK_GPIOINT2 (1 << INT_GPIOINT2)
#define INTMASK_GPIOINT3 (1 << INT_GPIOINT3)
#define INTMASK_RTCINT (1 << INT_RTCINT)
#define INTMASK_SSPINT (1 << INT_SSPINT)
#define INTMASK_UARTINT0 (1 << INT_UARTINT0)
#define INTMASK_UARTINT1 (1 << INT_UARTINT1)
#define INTMASK_UARTINT2 (1 << INT_UARTINT2)
#define INTMASK_SCIINT (1 << INT_SCIINT)
#define INTMASK_CLCDINT (1 << INT_CLCDINT)
#define INTMASK_DMAINT (1 << INT_DMAINT)
#define INTMASK_PWRFAILINT (1 << INT_PWRFAILINT)
#define INTMASK_MBXINT (1 << INT_MBXINT)
#define INTMASK_GNDINT (1 << INT_GNDINT)
#define INTMASK_VICSOURCE21 (1 << INT_VICSOURCE21)
#define INTMASK_VICSOURCE22 (1 << INT_VICSOURCE22)
#define INTMASK_VICSOURCE23 (1 << INT_VICSOURCE23)
#define INTMASK_VICSOURCE24 (1 << INT_VICSOURCE24)
#define INTMASK_VICSOURCE25 (1 << INT_VICSOURCE25)
#define INTMASK_VICSOURCE26 (1 << INT_VICSOURCE26)
#define INTMASK_VICSOURCE27 (1 << INT_VICSOURCE27)
#define INTMASK_VICSOURCE28 (1 << INT_VICSOURCE28)
#define INTMASK_VICSOURCE29 (1 << INT_VICSOURCE29)
#define INTMASK_VICSOURCE30 (1 << INT_VICSOURCE30)
#define INTMASK_VICSOURCE31 (1 << INT_VICSOURCE31)
#define VERSATILE_SC_VALID_INT 0x003FFFFF
#define MAXIRQNUM 31
#define MAXFIQNUM 31
#define MAXSWINUM 31
/* ------------------------------------------------------------------------
* Interrupts - bit assignment (secondary)
* ------------------------------------------------------------------------
*/
#define SIC_INT_MMCI0B 1
/* Multimedia Card 0B */
#define SIC_INT_MMCI1B 2
/* Multimedia Card 1B */
#define SIC_INT_KMI0 3
/* Keyboard/Mouse port 0 */
#define SIC_INT_KMI1 4
/* Keyboard/Mouse port 1 */
#define SIC_INT_SCI3 5
/* Smart Card interface */
#define SIC_INT_UART3 6
/* UART 3 empty or data available */
#define SIC_INT_CLCD 7
/* Character LCD */
#define SIC_INT_TOUCH 8
/* Touchscreen */
#define SIC_INT_KEYPAD 9
/* Key pressed on display keypad */
/* 10:20 - reserved */
#define SIC_INT_DoC 21
/* Disk on Chip memory controller */
#define SIC_INT_MMCI0A 22
/* MMC 0A */
#define SIC_INT_MMCI1A 23
/* MMC 1A */
#define SIC_INT_AACI 24
/* Audio Codec */
#define SIC_INT_ETH 25
/* Ethernet controller */
#define SIC_INT_USB 26
/* USB controller */
#define SIC_INT_PCI0 27
#define SIC_INT_PCI1 28
#define SIC_INT_PCI2 29
#define SIC_INT_PCI3 30
#define SIC_INTMASK_MMCI0B (1 << SIC_INT_MMCI0B)
#define SIC_INTMASK_MMCI1B (1 << SIC_INT_MMCI1B)
#define SIC_INTMASK_KMI0 (1 << SIC_INT_KMI0)
#define SIC_INTMASK_KMI1 (1 << SIC_INT_KMI1)
#define SIC_INTMASK_SCI3 (1 << SIC_INT_SCI3)
#define SIC_INTMASK_UART3 (1 << SIC_INT_UART3)
#define SIC_INTMASK_CLCD (1 << SIC_INT_CLCD)
#define SIC_INTMASK_TOUCH (1 << SIC_INT_TOUCH)
#define SIC_INTMASK_KEYPAD (1 << SIC_INT_KEYPAD)
#define SIC_INTMASK_DoC (1 << SIC_INT_DoC)
#define SIC_INTMASK_MMCI0A (1 << SIC_INT_MMCI0A)
#define SIC_INTMASK_MMCI1A (1 << SIC_INT_MMCI1A)
#define SIC_INTMASK_AACI (1 << SIC_INT_AACI)
#define SIC_INTMASK_ETH (1 << SIC_INT_ETH)
#define SIC_INTMASK_USB (1 << SIC_INT_USB)
#define SIC_INTMASK_PCI0 (1 << SIC_INT_PCI0)
#define SIC_INTMASK_PCI1 (1 << SIC_INT_PCI1)
#define SIC_INTMASK_PCI2 (1 << SIC_INT_PCI2)
#define SIC_INTMASK_PCI3 (1 << SIC_INT_PCI3)
/*
* Application Flash
*
*/
#define FLASH_BASE VERSATILE_FLASH_BASE
#define FLASH_SIZE VERSATILE_FLASH_SIZE
#define FLASH_END (FLASH_BASE + FLASH_SIZE - 1)
#define FLASH_BLOCK_SIZE SZ_128K
/*
* Boot Flash
*
*/
#define EPROM_BASE VERSATILE_BOOT_ROM_HI
#define EPROM_SIZE VERSATILE_BOOT_ROM_SIZE
#define EPROM_END (EPROM_BASE + EPROM_SIZE - 1)
/*
* Clean base - dummy
*
*/
#define CLEAN_BASE EPROM_BASE
/*
* System controller bit assignment
*/
#define VERSATILE_REFCLK 0
#define VERSATILE_TIMCLK 1
#define VERSATILE_TIMER1_EnSel 15
#define VERSATILE_TIMER2_EnSel 17
#define VERSATILE_TIMER3_EnSel 19
#define VERSATILE_TIMER4_EnSel 21
#define MAX_TIMER 2
#define MAX_PERIOD 699050
#define TICKS_PER_uSEC 1
/*
* These are useconds NOT ticks.
*
*/
#define mSEC_1 1000
#define mSEC_5 (mSEC_1 * 5)
#define mSEC_10 (mSEC_1 * 10)
#define mSEC_25 (mSEC_1 * 25)
#define SEC_1 (mSEC_1 * 1000)
#define VERSATILE_CSR_BASE 0x10000000
#define VERSATILE_CSR_SIZE 0x10000000
#endif
/* END */
include/asm-arm/arch-versatile/serial.h
0 → 100644
View file @
5157e5c7
/*
* linux/include/asm-arm/arch-versatile/serial.h
*
* Copyright (C) 2003 ARM Limited
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef __ASM_ARCH_SERIAL_H
#define __ASM_ARCH_SERIAL_H
/*
* This assumes you have a 14.7456 MHz clock UART.
*/
#define BASE_BAUD 115200
/* UART CLK PORT IRQ FLAGS */
#define STD_SERIAL_PORT_DEFNS \
{ 0, BASE_BAUD, 0, 0, ASYNC_SKIP_TEST },
/* ttyS0 */
\
{ 0, BASE_BAUD, 0, 0, ASYNC_SKIP_TEST },
/* ttyS1 */
\
{ 0, BASE_BAUD, 0, 0, ASYNC_SKIP_TEST },
/* ttyS2 */
\
{ 0, BASE_BAUD, 0, 0, ASYNC_SKIP_TEST },
/* ttyS3 */
#define EXTRA_SERIAL_PORT_DEFNS
#endif
include/asm-arm/arch-versatile/system.h
0 → 100644
View file @
5157e5c7
/*
* linux/include/asm-arm/arch-versatile/system.h
*
* Copyright (C) 2003 ARM Limited
* Copyright (C) 2000 Deep Blue Solutions Ltd
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef __ASM_ARCH_SYSTEM_H
#define __ASM_ARCH_SYSTEM_H
#include <asm/hardware.h>
#include <asm/io.h>
#include <asm/arch/platform.h>
static
inline
void
arch_idle
(
void
)
{
/*
* This should do all the clock switching
* and wait for interrupt tricks
*/
cpu_do_idle
();
}
static
inline
void
arch_reset
(
char
mode
)
{
unsigned
int
hdr_ctrl
=
(
IO_ADDRESS
(
VERSATILE_SYS_BASE
)
+
VERSATILE_SYS_RESETCTL_OFFSET
);
unsigned
int
val
;
/*
* To reset, we hit the on-board reset register
* in the system FPGA
*/
val
=
__raw_readl
(
hdr_ctrl
);
val
|=
VERSATILE_SYS_CTRL_RESET_CONFIGCLR
;
__raw_writel
(
val
,
hdr_ctrl
);
}
#endif
include/asm-arm/arch-versatile/time.h
0 → 100644
View file @
5157e5c7
/*
* linux/include/asm-arm/arch-versatile/time.h
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <asm/system.h>
#include <asm/leds.h>
/*
* Where is the timer (VA)?
*/
#define TIMER0_VA_BASE IO_ADDRESS(VERSATILE_TIMER0_1_BASE)
#define TIMER1_VA_BASE (IO_ADDRESS(VERSATILE_TIMER0_1_BASE) + 0x20)
#define TIMER2_VA_BASE IO_ADDRESS(VERSATILE_TIMER2_3_BASE)
#define TIMER3_VA_BASE (IO_ADDRESS(VERSATILE_TIMER2_3_BASE) + 0x20)
#define VA_IC_BASE IO_ADDRESS(VERSATILE_VIC_BASE)
/*
* How long is the timer interval?
*/
#define TIMER_INTERVAL (TICKS_PER_uSEC * mSEC_10)
#if TIMER_INTERVAL >= 0x100000
#define TIMER_RELOAD (TIMER_INTERVAL >> 8)
/* Divide by 256 */
#define TIMER_CTRL 0x88
/* Enable, Clock / 256 */
#define TICKS2USECS(x) (256 * (x) / TICKS_PER_uSEC)
#elif TIMER_INTERVAL >= 0x10000
#define TIMER_RELOAD (TIMER_INTERVAL >> 4)
/* Divide by 16 */
#define TIMER_CTRL 0x84
/* Enable, Clock / 16 */
#define TICKS2USECS(x) (16 * (x) / TICKS_PER_uSEC)
#else
#define TIMER_RELOAD (TIMER_INTERVAL)
#define TIMER_CTRL 0x80
/* Enable */
#define TICKS2USECS(x) ((x) / TICKS_PER_uSEC)
#endif
#define TIMER_CTRL_IE (1 << 5)
/* Interrupt Enable */
/*
* What does it look like?
*/
typedef
struct
TimerStruct
{
unsigned
long
TimerLoad
;
unsigned
long
TimerValue
;
unsigned
long
TimerControl
;
unsigned
long
TimerClear
;
}
TimerStruct_t
;
extern
unsigned
long
(
*
gettimeoffset
)(
void
);
/*
* Returns number of ms since last clock interrupt. Note that interrupts
* will have been disabled by do_gettimeoffset()
*/
static
unsigned
long
versatile_gettimeoffset
(
void
)
{
volatile
TimerStruct_t
*
timer0
=
(
TimerStruct_t
*
)
TIMER0_VA_BASE
;
unsigned
long
ticks1
,
ticks2
,
status
;
/*
* Get the current number of ticks. Note that there is a race
* condition between us reading the timer and checking for
* an interrupt. We get around this by ensuring that the
* counter has not reloaded between our two reads.
*/
ticks2
=
timer0
->
TimerValue
&
0xffff
;
do
{
ticks1
=
ticks2
;
status
=
__raw_readl
(
VA_IC_BASE
+
VIC_IRQ_RAW_STATUS
);
ticks2
=
timer0
->
TimerValue
&
0xffff
;
}
while
(
ticks2
>
ticks1
);
/*
* Number of ticks since last interrupt.
*/
ticks1
=
TIMER_RELOAD
-
ticks2
;
/*
* Interrupt pending? If so, we've reloaded once already.
*
* FIXME: Need to check this is effectively timer 0 that expires
*/
if
(
status
&
IRQMASK_TIMERINT0_1
)
ticks1
+=
TIMER_RELOAD
;
/*
* Convert the ticks to usecs
*/
return
TICKS2USECS
(
ticks1
);
}
/*
* IRQ handler for the timer
*/
static
irqreturn_t
versatile_timer_interrupt
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
{
volatile
TimerStruct_t
*
timer0
=
(
volatile
TimerStruct_t
*
)
TIMER0_VA_BASE
;
// ...clear the interrupt
timer0
->
TimerClear
=
1
;
do_leds
();
do_timer
(
regs
);
do_profile
(
regs
);
return
IRQ_HANDLED
;
}
/*
* Set up timer interrupt, and return the current time in seconds.
*/
void
__init
time_init
(
void
)
{
volatile
TimerStruct_t
*
timer0
=
(
volatile
TimerStruct_t
*
)
TIMER0_VA_BASE
;
volatile
TimerStruct_t
*
timer1
=
(
volatile
TimerStruct_t
*
)
TIMER1_VA_BASE
;
volatile
TimerStruct_t
*
timer2
=
(
volatile
TimerStruct_t
*
)
TIMER2_VA_BASE
;
volatile
TimerStruct_t
*
timer3
=
(
volatile
TimerStruct_t
*
)
TIMER3_VA_BASE
;
/*
* set clock frequency:
* VERSATILE_REFCLK is 32KHz
* VERSATILE_TIMCLK is 1MHz
*/
*
(
volatile
unsigned
int
*
)
IO_ADDRESS
(
VERSATILE_SCTL_BASE
)
|=
((
VERSATILE_TIMCLK
<<
VERSATILE_TIMER1_EnSel
)
|
(
VERSATILE_TIMCLK
<<
VERSATILE_TIMER2_EnSel
)
|
(
VERSATILE_TIMCLK
<<
VERSATILE_TIMER3_EnSel
)
|
(
VERSATILE_TIMCLK
<<
VERSATILE_TIMER4_EnSel
));
timer_irq
.
handler
=
versatile_timer_interrupt
;
/*
* Initialise to a known state (all timers off)
*/
timer0
->
TimerControl
=
0
;
timer1
->
TimerControl
=
0
;
timer2
->
TimerControl
=
0
;
timer3
->
TimerControl
=
0
;
timer0
->
TimerLoad
=
TIMER_RELOAD
;
timer0
->
TimerValue
=
TIMER_RELOAD
;
timer0
->
TimerControl
=
TIMER_CTRL
|
0x40
|
TIMER_CTRL_IE
;
/* periodic + IE */
/*
* Make irqs happen for the system timer
*/
setup_irq
(
IRQ_TIMERINT0_1
,
&
timer_irq
);
gettimeoffset
=
versatile_gettimeoffset
;
}
include/asm-arm/arch-versatile/timex.h
0 → 100644
View file @
5157e5c7
/*
* linux/include/asm-arm/arch-versatile/timex.h
*
* Versatile PB architecture timex specifications
*
* Copyright (C) 2003 ARM Limited
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#define CLOCK_TICK_RATE (50000000 / 16)
include/asm-arm/arch-versatile/uncompress.h
0 → 100644
View file @
5157e5c7
/*
* linux/include/asm-arm/arch-versatile/uncompress.h
*
* Copyright (C) 2003 ARM Limited
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <linux/kernel.h>
#define AMBA_UART_DR (*(volatile unsigned char *)0x101F1000)
#define AMBA_UART_LCRH (*(volatile unsigned char *)0x101F102C)
#define AMBA_UART_CR (*(volatile unsigned char *)0x101F1030)
#define AMBA_UART_FR (*(volatile unsigned char *)0x101F1018)
/*
* This does not append a newline
*/
static
void
puts
(
const
char
*
s
)
{
while
(
*
s
)
{
while
(
AMBA_UART_FR
&
(
1
<<
5
))
barrier
();
AMBA_UART_DR
=
*
s
;
if
(
*
s
==
'\n'
)
{
while
(
AMBA_UART_FR
&
(
1
<<
5
))
barrier
();
AMBA_UART_DR
=
'\r'
;
}
s
++
;
}
while
(
AMBA_UART_FR
&
(
1
<<
3
))
barrier
();
}
/*
* nothing to do
*/
#define arch_decomp_setup()
#define arch_decomp_wdog()
include/asm-arm/arch-versatile/vmalloc.h
0 → 100644
View file @
5157e5c7
/*
* linux/include/asm-arm/arch-versatile/vmalloc.h
*
* Copyright (C) 2003 ARM Limited
* Copyright (C) 2000 Russell King.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/*
* Just any arbitrary offset to the start of the vmalloc VM area: the
* current 8MB value just means that there will be a 8MB "hole" after the
* physical memory until the kernel virtual memory starts. That means that
* any out-of-bounds memory accesses will hopefully be caught.
* The vmalloc() routines leaves a hole of 4kB between each vmalloced
* area for the same reason. ;)
*/
#define VMALLOC_OFFSET (8*1024*1024)
#define VMALLOC_START (((unsigned long)high_memory + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1))
#define VMALLOC_VMADDR(x) ((unsigned long)(x))
#define VMALLOC_END (PAGE_OFFSET + 0x18000000)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment