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
nexedi
linux
Commits
b8df0ea2
Commit
b8df0ea2
authored
Nov 02, 2011
by
Arnd Bergmann
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'picoxcell/soc' into next/soc
parents
884897e6
76780127
Changes
26
Hide whitespace changes
Inline
Side-by-side
Showing
26 changed files
with
1341 additions
and
0 deletions
+1341
-0
Documentation/devicetree/bindings/arm/picoxcell.txt
Documentation/devicetree/bindings/arm/picoxcell.txt
+24
-0
arch/arm/Kconfig
arch/arm/Kconfig
+18
-0
arch/arm/Makefile
arch/arm/Makefile
+1
-0
arch/arm/boot/dts/picoxcell-pc3x2.dtsi
arch/arm/boot/dts/picoxcell-pc3x2.dtsi
+249
-0
arch/arm/boot/dts/picoxcell-pc3x3.dtsi
arch/arm/boot/dts/picoxcell-pc3x3.dtsi
+365
-0
arch/arm/boot/dts/picoxcell-pc7302-pc3x2.dts
arch/arm/boot/dts/picoxcell-pc7302-pc3x2.dts
+86
-0
arch/arm/boot/dts/picoxcell-pc7302-pc3x3.dts
arch/arm/boot/dts/picoxcell-pc7302-pc3x3.dts
+92
-0
arch/arm/mach-picoxcell/Makefile
arch/arm/mach-picoxcell/Makefile
+3
-0
arch/arm/mach-picoxcell/Makefile.boot
arch/arm/mach-picoxcell/Makefile.boot
+1
-0
arch/arm/mach-picoxcell/common.c
arch/arm/mach-picoxcell/common.c
+55
-0
arch/arm/mach-picoxcell/common.h
arch/arm/mach-picoxcell/common.h
+18
-0
arch/arm/mach-picoxcell/include/mach/debug-macro.S
arch/arm/mach-picoxcell/include/mach/debug-macro.S
+35
-0
arch/arm/mach-picoxcell/include/mach/entry-macro.S
arch/arm/mach-picoxcell/include/mach/entry-macro.S
+19
-0
arch/arm/mach-picoxcell/include/mach/gpio.h
arch/arm/mach-picoxcell/include/mach/gpio.h
+1
-0
arch/arm/mach-picoxcell/include/mach/hardware.h
arch/arm/mach-picoxcell/include/mach/hardware.h
+21
-0
arch/arm/mach-picoxcell/include/mach/io.h
arch/arm/mach-picoxcell/include/mach/io.h
+22
-0
arch/arm/mach-picoxcell/include/mach/irqs.h
arch/arm/mach-picoxcell/include/mach/irqs.h
+25
-0
arch/arm/mach-picoxcell/include/mach/map.h
arch/arm/mach-picoxcell/include/mach/map.h
+25
-0
arch/arm/mach-picoxcell/include/mach/memory.h
arch/arm/mach-picoxcell/include/mach/memory.h
+1
-0
arch/arm/mach-picoxcell/include/mach/picoxcell_soc.h
arch/arm/mach-picoxcell/include/mach/picoxcell_soc.h
+25
-0
arch/arm/mach-picoxcell/include/mach/system.h
arch/arm/mach-picoxcell/include/mach/system.h
+31
-0
arch/arm/mach-picoxcell/include/mach/timex.h
arch/arm/mach-picoxcell/include/mach/timex.h
+25
-0
arch/arm/mach-picoxcell/include/mach/uncompress.h
arch/arm/mach-picoxcell/include/mach/uncompress.h
+21
-0
arch/arm/mach-picoxcell/include/mach/vmalloc.h
arch/arm/mach-picoxcell/include/mach/vmalloc.h
+14
-0
arch/arm/mach-picoxcell/io.c
arch/arm/mach-picoxcell/io.c
+32
-0
arch/arm/mach-picoxcell/time.c
arch/arm/mach-picoxcell/time.c
+132
-0
No files found.
Documentation/devicetree/bindings/arm/picoxcell.txt
0 → 100644
View file @
b8df0ea2
Picochip picoXcell device tree bindings.
========================================
Required root node properties:
- compatible:
- "picochip,pc7302-pc3x3" : PC7302 development board with PC3X3 device.
- "picochip,pc7302-pc3x2" : PC7302 development board with PC3X2 device.
- "picochip,pc3x3" : picoXcell PC3X3 device based board.
- "picochip,pc3x2" : picoXcell PC3X2 device based board.
Timers required properties:
- compatible = "picochip,pc3x2-timer"
- interrupts : The single IRQ line for the timer.
- clock-freq : The frequency in HZ of the timer.
- reg : The register bank for the timer.
Note: two timers are required - one for the scheduler clock and one for the
event tick/NOHZ.
VIC required properties:
- compatible = "arm,pl192-vic".
- interrupt-controller.
- reg : The register bank for the device.
- #interrupt-cells : Must be 1.
arch/arm/Kconfig
View file @
b8df0ea2
...
...
@@ -643,6 +643,24 @@ config ARCH_TEGRA
This enables support for NVIDIA Tegra based systems (Tegra APX,
Tegra 6xx and Tegra 2 series).
config ARCH_PICOXCELL
bool "Picochip picoXcell"
select ARCH_REQUIRE_GPIOLIB
select ARM_PATCH_PHYS_VIRT
select ARM_VIC
select CPU_V6K
select DW_APB_TIMER
select GENERIC_CLOCKEVENTS
select GENERIC_GPIO
select HAVE_SCHED_CLOCK
select HAVE_TCM
select NO_IOPORT
select USE_OF
help
This enables support for systems based on the Picochip picoXcell
family of Femtocell devices. The picoxcell support requires device tree
for all boards.
config ARCH_PNX4008
bool "Philips Nexperia PNX4008 Mobile"
select CPU_ARM926T
...
...
arch/arm/Makefile
View file @
b8df0ea2
...
...
@@ -169,6 +169,7 @@ machine-$(CONFIG_ARCH_OMAP2) := omap2
machine-$(CONFIG_ARCH_OMAP3)
:=
omap2
machine-$(CONFIG_ARCH_OMAP4)
:=
omap2
machine-$(CONFIG_ARCH_ORION5X)
:=
orion5x
machine-$(CONFIG_ARCH_PICOXCELL)
:=
picoxcell
machine-$(CONFIG_ARCH_PNX4008)
:=
pnx4008
machine-$(CONFIG_ARCH_PRIMA2)
:=
prima2
machine-$(CONFIG_ARCH_PXA)
:=
pxa
...
...
arch/arm/boot/dts/picoxcell-pc3x2.dtsi
0 → 100644
View file @
b8df0ea2
/*
*
Copyright
(
C
)
2011
Picochip
,
Jamie
Iles
*
*
This
software
is
licensed
under
the
terms
of
the
GNU
General
Public
*
License
version
2
,
as
published
by
the
Free
Software
Foundation
,
and
*
may
be
copied
,
distributed
,
and
modified
under
those
terms
.
*
*
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
.
*/
/
include
/
"skeleton.dtsi"
/
{
model
=
"Picochip picoXcell PC3X2"
;
compatible
=
"picochip,pc3x2"
;
#
address
-
cells
=
<
1
>;
#
size
-
cells
=
<
1
>;
cpus
{
#
address
-
cells
=
<
1
>;
#
size
-
cells
=
<
0
>;
cpu
@
0
{
compatible
=
"arm,1176jz-s"
;
clock
-
frequency
=
<
400000000
>;
reg
=
<
0
>;
d
-
cache
-
line
-
size
=
<
32
>;
d
-
cache
-
size
=
<
32768
>;
i
-
cache
-
line
-
size
=
<
32
>;
i
-
cache
-
size
=
<
32768
>;
};
};
clocks
{
#
address
-
cells
=
<
1
>;
#
size
-
cells
=
<
1
>;
ranges
;
pclk
:
clock
@
0
{
compatible
=
"fixed-clock"
;
clock
-
outputs
=
"bus"
,
"pclk"
;
clock
-
frequency
=
<
200000000
>;
ref
-
clock
=
<&
ref_clk
>,
"ref"
;
};
};
paxi
{
compatible
=
"simple-bus"
;
#
address
-
cells
=
<
1
>;
#
size
-
cells
=
<
1
>;
ranges
=
<
0
0x80000000
0x400000
>;
emac
:
gem
@
30000
{
compatible
=
"cadence,gem"
;
reg
=
<
0x30000
0x10000
>;
interrupts
=
<
31
>;
};
dmac1
:
dmac
@
40000
{
compatible
=
"snps,dw-dmac"
;
reg
=
<
0x40000
0x10000
>;
interrupts
=
<
25
>;
};
dmac2
:
dmac
@
50000
{
compatible
=
"snps,dw-dmac"
;
reg
=
<
0x50000
0x10000
>;
interrupts
=
<
26
>;
};
vic0
:
interrupt
-
controller
@
60000
{
compatible
=
"arm,pl192-vic"
;
interrupt
-
controller
;
reg
=
<
0x60000
0x1000
>;
#
interrupt
-
cells
=
<
1
>;
};
vic1
:
interrupt
-
controller
@
64000
{
compatible
=
"arm,pl192-vic"
;
interrupt
-
controller
;
reg
=
<
0x64000
0x1000
>;
#
interrupt
-
cells
=
<
1
>;
};
fuse
:
picoxcell
-
fuse
@
80000
{
compatible
=
"picoxcell,fuse-pc3x2"
;
reg
=
<
0x80000
0x10000
>;
};
ssi
:
picoxcell
-
spi
@
90000
{
compatible
=
"picoxcell,spi"
;
reg
=
<
0x90000
0x10000
>;
interrupt
-
parent
=
<&
vic0
>;
interrupts
=
<
10
>;
};
ipsec
:
spacc
@
100000
{
compatible
=
"picochip,spacc-ipsec"
;
reg
=
<
0x100000
0x10000
>;
interrupt
-
parent
=
<&
vic0
>;
interrupts
=
<
24
>;
ref
-
clock
=
<&
pclk
>,
"ref"
;
};
srtp
:
spacc
@
140000
{
compatible
=
"picochip,spacc-srtp"
;
reg
=
<
0x140000
0x10000
>;
interrupt
-
parent
=
<&
vic0
>;
interrupts
=
<
23
>;
};
l2_engine
:
spacc
@
180000
{
compatible
=
"picochip,spacc-l2"
;
reg
=
<
0x180000
0x10000
>;
interrupt
-
parent
=
<&
vic0
>;
interrupts
=
<
22
>;
ref
-
clock
=
<&
pclk
>,
"ref"
;
};
apb
{
compatible
=
"simple-bus"
;
#
address
-
cells
=
<
1
>;
#
size
-
cells
=
<
1
>;
ranges
=
<
0
0x200000
0x80000
>;
rtc0
:
rtc
@
00000
{
compatible
=
"picochip,pc3x2-rtc"
;
clock
-
freq
=
<
200000000
>;
reg
=
<
0x00000
0xf
>;
interrupt
-
parent
=
<&
vic1
>;
interrupts
=
<
8
>;
};
timer0
:
timer
@
10000
{
compatible
=
"picochip,pc3x2-timer"
;
interrupt
-
parent
=
<&
vic0
>;
interrupts
=
<
4
>;
clock
-
freq
=
<
200000000
>;
reg
=
<
0x10000
0x14
>;
};
timer1
:
timer
@
10014
{
compatible
=
"picochip,pc3x2-timer"
;
interrupt
-
parent
=
<&
vic0
>;
interrupts
=
<
5
>;
clock
-
freq
=
<
200000000
>;
reg
=
<
0x10014
0x14
>;
};
timer2
:
timer
@
10028
{
compatible
=
"picochip,pc3x2-timer"
;
interrupt
-
parent
=
<&
vic0
>;
interrupts
=
<
6
>;
clock
-
freq
=
<
200000000
>;
reg
=
<
0x10028
0x14
>;
};
timer3
:
timer
@
1003
c
{
compatible
=
"picochip,pc3x2-timer"
;
interrupt
-
parent
=
<&
vic0
>;
interrupts
=
<
7
>;
clock
-
freq
=
<
200000000
>;
reg
=
<
0x1003c
0x14
>;
};
gpio
:
gpio
@
20000
{
compatible
=
"snps,dw-apb-gpio"
;
reg
=
<
0x20000
0x1000
>;
#
address
-
cells
=
<
1
>;
#
size
-
cells
=
<
0
>;
reg
-
io
-
width
=
<
4
>;
banka
:
gpio
-
controller
@
0
{
compatible
=
"snps,dw-apb-gpio-bank"
;
gpio
-
controller
;
#
gpio
-
cells
=
<
2
>;
gpio
-
generic
,
nr
-
gpio
=
<
8
>;
regoffset
-
dat
=
<
0x50
>;
regoffset
-
set
=
<
0x00
>;
regoffset
-
dirout
=
<
0x04
>;
};
bankb
:
gpio
-
controller
@
1
{
compatible
=
"snps,dw-apb-gpio-bank"
;
gpio
-
controller
;
#
gpio
-
cells
=
<
2
>;
gpio
-
generic
,
nr
-
gpio
=
<
8
>;
regoffset
-
dat
=
<
0x54
>;
regoffset
-
set
=
<
0x0c
>;
regoffset
-
dirout
=
<
0x10
>;
};
};
uart0
:
uart
@
30000
{
compatible
=
"snps,dw-apb-uart"
;
reg
=
<
0x30000
0x1000
>;
interrupt
-
parent
=
<&
vic1
>;
interrupts
=
<
10
>;
clock
-
frequency
=
<
3686400
>;
reg
-
shift
=
<
2
>;
reg
-
io
-
width
=
<
4
>;
};
uart1
:
uart
@
40000
{
compatible
=
"snps,dw-apb-uart"
;
reg
=
<
0x40000
0x1000
>;
interrupt
-
parent
=
<&
vic1
>;
interrupts
=
<
9
>;
clock
-
frequency
=
<
3686400
>;
reg
-
shift
=
<
2
>;
reg
-
io
-
width
=
<
4
>;
};
wdog
:
watchdog
@
50000
{
compatible
=
"snps,dw-apb-wdg"
;
reg
=
<
0x50000
0x10000
>;
interrupt
-
parent
=
<&
vic0
>;
interrupts
=
<
11
>;
bus
-
clock
=
<&
pclk
>,
"bus"
;
};
};
};
rwid
-
axi
{
#
address
-
cells
=
<
1
>;
#
size
-
cells
=
<
1
>;
compatible
=
"simple-bus"
;
ranges
;
ebi
@
50000000
{
compatible
=
"simple-bus"
;
#
address
-
cells
=
<
2
>;
#
size
-
cells
=
<
1
>;
ranges
=
<
0
0
0x40000000
0x08000000
1
0
0x48000000
0x08000000
2
0
0x50000000
0x08000000
3
0
0x58000000
0x08000000
>;
};
axi2pico
@
c0000000
{
compatible
=
"picochip,axi2pico-pc3x2"
;
reg
=
<
0xc0000000
0x10000
>;
interrupts
=
<
13
14
15
16
17
18
19
20
21
>;
};
};
};
arch/arm/boot/dts/picoxcell-pc3x3.dtsi
0 → 100644
View file @
b8df0ea2
/*
*
Copyright
(
C
)
2011
Picochip
,
Jamie
Iles
*
*
This
software
is
licensed
under
the
terms
of
the
GNU
General
Public
*
License
version
2
,
as
published
by
the
Free
Software
Foundation
,
and
*
may
be
copied
,
distributed
,
and
modified
under
those
terms
.
*
*
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
.
*/
/
include
/
"skeleton.dtsi"
/
{
model
=
"Picochip picoXcell PC3X3"
;
compatible
=
"picochip,pc3x3"
;
#
address
-
cells
=
<
1
>;
#
size
-
cells
=
<
1
>;
cpus
{
#
address
-
cells
=
<
1
>;
#
size
-
cells
=
<
0
>;
cpu
@
0
{
compatible
=
"arm,1176jz-s"
;
cpu
-
clock
=
<&
arm_clk
>,
"cpu"
;
reg
=
<
0
>;
d
-
cache
-
line
-
size
=
<
32
>;
d
-
cache
-
size
=
<
32768
>;
i
-
cache
-
line
-
size
=
<
32
>;
i
-
cache
-
size
=
<
32768
>;
};
};
clocks
{
#
address
-
cells
=
<
1
>;
#
size
-
cells
=
<
1
>;
ranges
;
clkgate
:
clkgate
@
800
a0048
{
#
address
-
cells
=
<
1
>;
#
size
-
cells
=
<
0
>;
reg
=
<
0x800a0048
4
>;
compatible
=
"picochip,pc3x3-clk-gate"
;
tzprot_clk
:
clock
@
0
{
compatible
=
"picochip,pc3x3-gated-clk"
;
clock
-
outputs
=
"bus"
;
picochip
,
clk
-
disable
-
bit
=
<
0
>;
clock
-
frequency
=
<
200000000
>;
ref
-
clock
=
<&
ref_clk
>,
"ref"
;
};
spi_clk
:
clock
@
1
{
compatible
=
"picochip,pc3x3-gated-clk"
;
clock
-
outputs
=
"bus"
;
picochip
,
clk
-
disable
-
bit
=
<
1
>;
clock
-
frequency
=
<
200000000
>;
ref
-
clock
=
<&
ref_clk
>,
"ref"
;
};
dmac0_clk
:
clock
@
2
{
compatible
=
"picochip,pc3x3-gated-clk"
;
clock
-
outputs
=
"bus"
;
picochip
,
clk
-
disable
-
bit
=
<
2
>;
clock
-
frequency
=
<
200000000
>;
ref
-
clock
=
<&
ref_clk
>,
"ref"
;
};
dmac1_clk
:
clock
@
3
{
compatible
=
"picochip,pc3x3-gated-clk"
;
clock
-
outputs
=
"bus"
;
picochip
,
clk
-
disable
-
bit
=
<
3
>;
clock
-
frequency
=
<
200000000
>;
ref
-
clock
=
<&
ref_clk
>,
"ref"
;
};
ebi_clk
:
clock
@
4
{
compatible
=
"picochip,pc3x3-gated-clk"
;
clock
-
outputs
=
"bus"
;
picochip
,
clk
-
disable
-
bit
=
<
4
>;
clock
-
frequency
=
<
200000000
>;
ref
-
clock
=
<&
ref_clk
>,
"ref"
;
};
ipsec_clk
:
clock
@
5
{
compatible
=
"picochip,pc3x3-gated-clk"
;
clock
-
outputs
=
"bus"
;
picochip
,
clk
-
disable
-
bit
=
<
5
>;
clock
-
frequency
=
<
200000000
>;
ref
-
clock
=
<&
ref_clk
>,
"ref"
;
};
l2_clk
:
clock
@
6
{
compatible
=
"picochip,pc3x3-gated-clk"
;
clock
-
outputs
=
"bus"
;
picochip
,
clk
-
disable
-
bit
=
<
6
>;
clock
-
frequency
=
<
200000000
>;
ref
-
clock
=
<&
ref_clk
>,
"ref"
;
};
trng_clk
:
clock
@
7
{
compatible
=
"picochip,pc3x3-gated-clk"
;
clock
-
outputs
=
"bus"
;
picochip
,
clk
-
disable
-
bit
=
<
7
>;
clock
-
frequency
=
<
200000000
>;
ref
-
clock
=
<&
ref_clk
>,
"ref"
;
};
fuse_clk
:
clock
@
8
{
compatible
=
"picochip,pc3x3-gated-clk"
;
clock
-
outputs
=
"bus"
;
picochip
,
clk
-
disable
-
bit
=
<
8
>;
clock
-
frequency
=
<
200000000
>;
ref
-
clock
=
<&
ref_clk
>,
"ref"
;
};
otp_clk
:
clock
@
9
{
compatible
=
"picochip,pc3x3-gated-clk"
;
clock
-
outputs
=
"bus"
;
picochip
,
clk
-
disable
-
bit
=
<
9
>;
clock
-
frequency
=
<
200000000
>;
ref
-
clock
=
<&
ref_clk
>,
"ref"
;
};
};
arm_clk
:
clock
@
11
{
compatible
=
"picochip,pc3x3-pll"
;
reg
=
<
0x800a0050
0x8
>;
picochip
,
min
-
freq
=
<
140000000
>;
picochip
,
max
-
freq
=
<
700000000
>;
ref
-
clock
=
<&
ref_clk
>,
"ref"
;
clock
-
outputs
=
"cpu"
;
};
pclk
:
clock
@
12
{
compatible
=
"fixed-clock"
;
clock
-
outputs
=
"bus"
,
"pclk"
;
clock
-
frequency
=
<
200000000
>;
ref
-
clock
=
<&
ref_clk
>,
"ref"
;
};
};
paxi
{
compatible
=
"simple-bus"
;
#
address
-
cells
=
<
1
>;
#
size
-
cells
=
<
1
>;
ranges
=
<
0
0x80000000
0x400000
>;
emac
:
gem
@
30000
{
compatible
=
"cadence,gem"
;
reg
=
<
0x30000
0x10000
>;
interrupt
-
parent
=
<&
vic0
>;
interrupts
=
<
31
>;
};
dmac1
:
dmac
@
40000
{
compatible
=
"snps,dw-dmac"
;
reg
=
<
0x40000
0x10000
>;
interrupt
-
parent
=
<&
vic0
>;
interrupts
=
<
25
>;
};
dmac2
:
dmac
@
50000
{
compatible
=
"snps,dw-dmac"
;
reg
=
<
0x50000
0x10000
>;
interrupt
-
parent
=
<&
vic0
>;
interrupts
=
<
26
>;
};
vic0
:
interrupt
-
controller
@
60000
{
compatible
=
"arm,pl192-vic"
;
interrupt
-
controller
;
reg
=
<
0x60000
0x1000
>;
#
interrupt
-
cells
=
<
1
>;
};
vic1
:
interrupt
-
controller
@
64000
{
compatible
=
"arm,pl192-vic"
;
interrupt
-
controller
;
reg
=
<
0x64000
0x1000
>;
#
interrupt
-
cells
=
<
1
>;
};
fuse
:
picoxcell
-
fuse
@
80000
{
compatible
=
"picoxcell,fuse-pc3x3"
;
reg
=
<
0x80000
0x10000
>;
};
ssi
:
picoxcell
-
spi
@
90000
{
compatible
=
"picoxcell,spi"
;
reg
=
<
0x90000
0x10000
>;
interrupt
-
parent
=
<&
vic0
>;
interrupts
=
<
10
>;
};
ipsec
:
spacc
@
100000
{
compatible
=
"picochip,spacc-ipsec"
;
reg
=
<
0x100000
0x10000
>;
interrupt
-
parent
=
<&
vic0
>;
interrupts
=
<
24
>;
ref
-
clock
=
<&
ipsec_clk
>,
"ref"
;
};
srtp
:
spacc
@
140000
{
compatible
=
"picochip,spacc-srtp"
;
reg
=
<
0x140000
0x10000
>;
interrupt
-
parent
=
<&
vic0
>;
interrupts
=
<
23
>;
};
l2_engine
:
spacc
@
180000
{
compatible
=
"picochip,spacc-l2"
;
reg
=
<
0x180000
0x10000
>;
interrupt
-
parent
=
<&
vic0
>;
interrupts
=
<
22
>;
ref
-
clock
=
<&
l2_clk
>,
"ref"
;
};
apb
{
compatible
=
"simple-bus"
;
#
address
-
cells
=
<
1
>;
#
size
-
cells
=
<
1
>;
ranges
=
<
0
0x200000
0x80000
>;
rtc0
:
rtc
@
00000
{
compatible
=
"picochip,pc3x2-rtc"
;
clock
-
freq
=
<
200000000
>;
reg
=
<
0x00000
0xf
>;
interrupt
-
parent
=
<&
vic0
>;
interrupts
=
<
8
>;
};
timer0
:
timer
@
10000
{
compatible
=
"picochip,pc3x2-timer"
;
interrupt
-
parent
=
<&
vic0
>;
interrupts
=
<
4
>;
clock
-
freq
=
<
200000000
>;
reg
=
<
0x10000
0x14
>;
};
timer1
:
timer
@
10014
{
compatible
=
"picochip,pc3x2-timer"
;
interrupt
-
parent
=
<&
vic0
>;
interrupts
=
<
5
>;
clock
-
freq
=
<
200000000
>;
reg
=
<
0x10014
0x14
>;
};
gpio
:
gpio
@
20000
{
compatible
=
"snps,dw-apb-gpio"
;
reg
=
<
0x20000
0x1000
>;
#
address
-
cells
=
<
1
>;
#
size
-
cells
=
<
0
>;
reg
-
io
-
width
=
<
4
>;
banka
:
gpio
-
controller
@
0
{
compatible
=
"snps,dw-apb-gpio-bank"
;
gpio
-
controller
;
#
gpio
-
cells
=
<
2
>;
gpio
-
generic
,
nr
-
gpio
=
<
8
>;
regoffset
-
dat
=
<
0x50
>;
regoffset
-
set
=
<
0x00
>;
regoffset
-
dirout
=
<
0x04
>;
};
bankb
:
gpio
-
controller
@
1
{
compatible
=
"snps,dw-apb-gpio-bank"
;
gpio
-
controller
;
#
gpio
-
cells
=
<
2
>;
gpio
-
generic
,
nr
-
gpio
=
<
16
>;
regoffset
-
dat
=
<
0x54
>;
regoffset
-
set
=
<
0x0c
>;
regoffset
-
dirout
=
<
0x10
>;
};
bankd
:
gpio
-
controller
@
2
{
compatible
=
"snps,dw-apb-gpio-bank"
;
gpio
-
controller
;
#
gpio
-
cells
=
<
2
>;
gpio
-
generic
,
nr
-
gpio
=
<
30
>;
regoffset
-
dat
=
<
0x5c
>;
regoffset
-
set
=
<
0x24
>;
regoffset
-
dirout
=
<
0x28
>;
};
};
uart0
:
uart
@
30000
{
compatible
=
"snps,dw-apb-uart"
;
reg
=
<
0x30000
0x1000
>;
interrupt
-
parent
=
<&
vic1
>;
interrupts
=
<
10
>;
clock
-
frequency
=
<
3686400
>;
reg
-
shift
=
<
2
>;
reg
-
io
-
width
=
<
4
>;
};
uart1
:
uart
@
40000
{
compatible
=
"snps,dw-apb-uart"
;
reg
=
<
0x40000
0x1000
>;
interrupt
-
parent
=
<&
vic1
>;
interrupts
=
<
9
>;
clock
-
frequency
=
<
3686400
>;
reg
-
shift
=
<
2
>;
reg
-
io
-
width
=
<
4
>;
};
wdog
:
watchdog
@
50000
{
compatible
=
"snps,dw-apb-wdg"
;
reg
=
<
0x50000
0x10000
>;
interrupt
-
parent
=
<&
vic0
>;
interrupts
=
<
11
>;
bus
-
clock
=
<&
pclk
>,
"bus"
;
};
timer2
:
timer
@
60000
{
compatible
=
"picochip,pc3x2-timer"
;
interrupt
-
parent
=
<&
vic0
>;
interrupts
=
<
6
>;
clock
-
freq
=
<
200000000
>;
reg
=
<
0x60000
0x14
>;
};
timer3
:
timer
@
60014
{
compatible
=
"picochip,pc3x2-timer"
;
interrupt
-
parent
=
<&
vic0
>;
interrupts
=
<
7
>;
clock
-
freq
=
<
200000000
>;
reg
=
<
0x60014
0x14
>;
};
};
};
rwid
-
axi
{
#
address
-
cells
=
<
1
>;
#
size
-
cells
=
<
1
>;
compatible
=
"simple-bus"
;
ranges
;
ebi
@
50000000
{
compatible
=
"simple-bus"
;
#
address
-
cells
=
<
2
>;
#
size
-
cells
=
<
1
>;
ranges
=
<
0
0
0x40000000
0x08000000
1
0
0x48000000
0x08000000
2
0
0x50000000
0x08000000
3
0
0x58000000
0x08000000
>;
};
axi2pico
@
c0000000
{
compatible
=
"picochip,axi2pico-pc3x3"
;
reg
=
<
0xc0000000
0x10000
>;
interrupt
-
parent
=
<&
vic0
>;
interrupts
=
<
13
14
15
16
17
18
19
20
21
>;
};
otp
@
ffff8000
{
compatible
=
"picochip,otp-pc3x3"
;
reg
=
<
0xffff8000
0x8000
>;
};
};
};
arch/arm/boot/dts/picoxcell-pc7302-pc3x2.dts
0 → 100644
View file @
b8df0ea2
/*
*
Copyright
(
C
)
2011
Picochip
,
Jamie
Iles
*
*
This
software
is
licensed
under
the
terms
of
the
GNU
General
Public
*
License
version
2
,
as
published
by
the
Free
Software
Foundation
,
and
*
may
be
copied
,
distributed
,
and
modified
under
those
terms
.
*
*
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
.
*/
/
dts
-
v1
/;
/
include
/
"picoxcell-pc3x2.dtsi"
/
{
model
=
"Picochip PC7302 (PC3X2)"
;
compatible
=
"picochip,pc7302-pc3x2"
,
"picochip,pc3x2"
;
memory
{
device_type
=
"memory"
;
reg
=
<
0x0
0x08000000
>;
};
chosen
{
linux
,
stdout
-
path
=
&
uart0
;
};
clocks
{
ref_clk
:
clock
@
1
{
compatible
=
"fixed-clock"
;
clock
-
outputs
=
"ref"
;
clock
-
frequency
=
<
20000000
>;
};
};
rwid
-
axi
{
ebi
@
50000000
{
nand
:
gpio
-
nand
@
2
,
0
{
compatible
=
"gpio-control-nand"
;
#
address
-
cells
=
<
1
>;
#
size
-
cells
=
<
1
>;
reg
=
<
2
0x0000
0x1000
>;
bus
-
clock
=
<&
pclk
>,
"bus"
;
gpio
-
control
-
nand
,
io
-
sync
-
reg
=
<
0x00000000
0x80220000
>;
gpios
=
<&
banka
1
0
/*
rdy
*/
&
banka
2
0
/*
nce
*/
&
banka
3
0
/*
ale
*/
&
banka
4
0
/*
cle
*/
0
/*
nwp
*/>;
boot
@
100000
{
label
=
"Boot"
;
reg
=
<
0x100000
0x80000
>;
};
redundant
-
boot
@
200000
{
label
=
"Redundant Boot"
;
reg
=
<
0x200000
0x80000
>;
};
boot
-
env
@
300000
{
label
=
"Boot Evironment"
;
reg
=
<
0x300000
0x20000
>;
};
redundant
-
boot
-
env
@
320000
{
label
=
"Redundant Boot Environment"
;
reg
=
<
0x300000
0x20000
>;
};
kernel
@
380000
{
label
=
"Kernel"
;
reg
=
<
0x380000
0x800000
>;
};
fs
@
b80000
{
label
=
"File System"
;
reg
=
<
0xb80000
0xf480000
>;
};
};
};
};
};
arch/arm/boot/dts/picoxcell-pc7302-pc3x3.dts
0 → 100644
View file @
b8df0ea2
/*
*
Copyright
(
C
)
2011
Picochip
,
Jamie
Iles
*
*
This
software
is
licensed
under
the
terms
of
the
GNU
General
Public
*
License
version
2
,
as
published
by
the
Free
Software
Foundation
,
and
*
may
be
copied
,
distributed
,
and
modified
under
those
terms
.
*
*
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
.
*/
/
dts
-
v1
/;
/
include
/
"picoxcell-pc3x3.dtsi"
/
{
model
=
"Picochip PC7302 (PC3X3)"
;
compatible
=
"picochip,pc7302-pc3x3"
,
"picochip,pc3x3"
;
memory
{
device_type
=
"memory"
;
reg
=
<
0x0
0x08000000
>;
};
chosen
{
linux
,
stdout
-
path
=
&
uart0
;
};
clocks
{
ref_clk
:
clock
@
10
{
compatible
=
"fixed-clock"
;
clock
-
outputs
=
"ref"
;
clock
-
frequency
=
<
20000000
>;
};
clkgate
:
clkgate
@
800
a0048
{
clock
@
4
{
picochip
,
clk
-
no
-
disable
;
};
};
};
rwid
-
axi
{
ebi
@
50000000
{
nand
:
gpio
-
nand
@
2
,
0
{
compatible
=
"gpio-control-nand"
;
#
address
-
cells
=
<
1
>;
#
size
-
cells
=
<
1
>;
reg
=
<
2
0x0000
0x1000
>;
bus
-
clock
=
<&
ebi_clk
>,
"bus"
;
gpio
-
control
-
nand
,
io
-
sync
-
reg
=
<
0x00000000
0x80220000
>;
gpios
=
<&
banka
1
0
/*
rdy
*/
&
banka
2
0
/*
nce
*/
&
banka
3
0
/*
ale
*/
&
banka
4
0
/*
cle
*/
0
/*
nwp
*/>;
boot
@
100000
{
label
=
"Boot"
;
reg
=
<
0x100000
0x80000
>;
};
redundant
-
boot
@
200000
{
label
=
"Redundant Boot"
;
reg
=
<
0x200000
0x80000
>;
};
boot
-
env
@
300000
{
label
=
"Boot Evironment"
;
reg
=
<
0x300000
0x20000
>;
};
redundant
-
boot
-
env
@
320000
{
label
=
"Redundant Boot Environment"
;
reg
=
<
0x300000
0x20000
>;
};
kernel
@
380000
{
label
=
"Kernel"
;
reg
=
<
0x380000
0x800000
>;
};
fs
@
b80000
{
label
=
"File System"
;
reg
=
<
0xb80000
0xf480000
>;
};
};
};
};
};
arch/arm/mach-picoxcell/Makefile
0 → 100644
View file @
b8df0ea2
obj-y
:=
common.o
obj-y
+=
time.o
obj-y
+=
io.o
arch/arm/mach-picoxcell/Makefile.boot
0 → 100644
View file @
b8df0ea2
zreladdr-y
:=
0x00008000
arch/arm/mach-picoxcell/common.c
0 → 100644
View file @
b8df0ea2
/*
* Copyright (c) 2011 Picochip Ltd., Jamie Iles
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* All enquiries to support@picochip.com
*/
#include <linux/irq.h>
#include <linux/irqdomain.h>
#include <linux/of.h>
#include <linux/of_address.h>
#include <linux/of_platform.h>
#include <asm/mach/arch.h>
#include <asm/hardware/vic.h>
#include <mach/map.h>
#include <mach/picoxcell_soc.h>
#include "common.h"
static
void
__init
picoxcell_init_machine
(
void
)
{
of_platform_populate
(
NULL
,
of_default_bus_match_table
,
NULL
,
NULL
);
}
static
const
char
*
picoxcell_dt_match
[]
=
{
"picochip,pc3x2"
,
"picochip,pc3x3"
,
NULL
};
static
const
struct
of_device_id
vic_of_match
[]
__initconst
=
{
{
.
compatible
=
"arm,pl192-vic"
},
{
/* Sentinel */
}
};
static
void
__init
picoxcell_init_irq
(
void
)
{
vic_init
(
IO_ADDRESS
(
PICOXCELL_VIC0_BASE
),
0
,
~
0
,
0
);
vic_init
(
IO_ADDRESS
(
PICOXCELL_VIC1_BASE
),
32
,
~
0
,
0
);
irq_domain_generate_simple
(
vic_of_match
,
PICOXCELL_VIC0_BASE
,
0
);
irq_domain_generate_simple
(
vic_of_match
,
PICOXCELL_VIC1_BASE
,
32
);
}
DT_MACHINE_START
(
PICOXCELL
,
"Picochip picoXcell"
)
.
map_io
=
picoxcell_map_io
,
.
nr_irqs
=
ARCH_NR_IRQS
,
.
init_irq
=
picoxcell_init_irq
,
.
timer
=
&
picoxcell_timer
,
.
init_machine
=
picoxcell_init_machine
,
.
dt_compat
=
picoxcell_dt_match
,
MACHINE_END
arch/arm/mach-picoxcell/common.h
0 → 100644
View file @
b8df0ea2
/*
* Copyright (c) 2011 Picochip Ltd., Jamie Iles
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* All enquiries to support@picochip.com
*/
#ifndef __PICOXCELL_COMMON_H__
#define __PICOXCELL_COMMON_H__
#include <asm/mach/time.h>
extern
struct
sys_timer
picoxcell_timer
;
extern
void
picoxcell_map_io
(
void
);
#endif
/* __PICOXCELL_COMMON_H__ */
arch/arm/mach-picoxcell/include/mach/debug-macro.S
0 → 100644
View file @
b8df0ea2
/*
*
Copyright
(
c
)
2011
Picochip
Ltd
.
,
Jamie
Iles
*
*
This
program
is
free
software
; you can redistribute it and/or modify
*
it
under
the
terms
of
the
GNU
General
Public
License
version
2
as
*
published
by
the
Free
Software
Foundation
.
*
*
Derived
from
arch
/
arm
/
mach
-
davinci
/
include
/
mach
/
debug
-
macro
.
S
to
use
32
-
bit
*
accesses
to
the
8250
.
*/
#include <linux/serial_reg.h>
#include <mach/hardware.h>
#include <mach/map.h>
#define UART_SHIFT 2
.
macro
addruart
,
rp
,
rv
ldr
\
rv
,
=
PHYS_TO_IO
(
PICOXCELL_UART1_BASE
)
ldr
\
rp
,
=
PICOXCELL_UART1_BASE
.
endm
.
macro
senduart
,
rd
,
rx
str
\
rd
,
[
\
rx
,
#
UART_TX
<<
UART_SHIFT
]
.
endm
.
macro
busyuart
,
rd
,
rx
1002
:
ldr
\
rd
,
[
\
rx
,
#
UART_LSR
<<
UART_SHIFT
]
and
\
rd
,
\
rd
,
#
UART_LSR_TEMT
|
UART_LSR_THRE
teq
\
rd
,
#
UART_LSR_TEMT
|
UART_LSR_THRE
bne
1002
b
.
endm
/
*
The
UART
's don'
t
have
any
flow
control
IO
's wired up. */
.
macro
waituart
,
rd
,
rx
.
endm
arch/arm/mach-picoxcell/include/mach/entry-macro.S
0 → 100644
View file @
b8df0ea2
/*
*
entry
-
macro
.
S
*
*
Copyright
(
c
)
2011
Picochip
Ltd
.
,
Jamie
Iles
*
*
Low
-
level
IRQ
helper
macros
for
picoXcell
platforms
*
*
This
file
is
licensed
under
the
terms
of
the
GNU
General
Public
*
License
version
2
.
This
program
is
licensed
"as is"
without
any
*
warranty
of
any
kind
,
whether
express
or
implied
.
*/
#include <mach/hardware.h>
#include <mach/irqs.h>
#include <mach/map.h>
#define VA_VIC0 IO_ADDRESS(PICOXCELL_VIC0_BASE)
#define VA_VIC1 IO_ADDRESS(PICOXCELL_VIC1_BASE)
#include <asm/entry-macro-vic2.S>
arch/arm/mach-picoxcell/include/mach/gpio.h
0 → 100644
View file @
b8df0ea2
/* empty */
arch/arm/mach-picoxcell/include/mach/hardware.h
0 → 100644
View file @
b8df0ea2
/*
* Copyright (c) 2011 Picochip Ltd., Jamie Iles
*
* This file contains the hardware definitions of the picoXcell SoC devices.
*
* 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.
*/
#ifndef __ASM_ARCH_HARDWARE_H
#define __ASM_ARCH_HARDWARE_H
#include <mach/picoxcell_soc.h>
#endif
arch/arm/mach-picoxcell/include/mach/io.h
0 → 100644
View file @
b8df0ea2
/*
* Copyright (c) 2011 Picochip Ltd., Jamie Iles
*
* 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.
*/
#ifndef __ASM_ARM_ARCH_IO_H
#define __ASM_ARM_ARCH_IO_H
/* No ioports, but needed for driver compatibility. */
#define __io(a) __typesafe_io(a)
/* No PCI possible on picoxcell. */
#define __mem_pci(a) (a)
#endif
/* __ASM_ARM_ARCH_IO_H */
arch/arm/mach-picoxcell/include/mach/irqs.h
0 → 100644
View file @
b8df0ea2
/*
* Copyright (c) 2011 Picochip Ltd., Jamie Iles
*
* This file contains the hardware definitions of the picoXcell SoC devices.
*
* 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.
*/
#ifndef __MACH_IRQS_H
#define __MACH_IRQS_H
#define ARCH_NR_IRQS 64
#define NR_IRQS (128 + ARCH_NR_IRQS)
#define IRQ_VIC0_BASE 0
#define IRQ_VIC1_BASE 32
#endif
/* __MACH_IRQS_H */
arch/arm/mach-picoxcell/include/mach/map.h
0 → 100644
View file @
b8df0ea2
/*
* Copyright (c) 2011 Picochip Ltd., Jamie Iles
*
* 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.
*/
#ifndef __PICOXCELL_MAP_H__
#define __PICOXCELL_MAP_H__
#define PHYS_TO_IO(x) (((x) & 0x00ffffff) | 0xfe000000)
#ifdef __ASSEMBLY__
#define IO_ADDRESS(x) PHYS_TO_IO((x))
#else
#define IO_ADDRESS(x) (void __iomem __force *)(PHYS_TO_IO((x)))
#endif
#endif
/* __PICOXCELL_MAP_H__ */
arch/arm/mach-picoxcell/include/mach/memory.h
0 → 100644
View file @
b8df0ea2
/* empty */
arch/arm/mach-picoxcell/include/mach/picoxcell_soc.h
0 → 100644
View file @
b8df0ea2
/*
* Copyright (c) 2011 Picochip Ltd., Jamie Iles
*
* This file contains the hardware definitions of the picoXcell SoC devices.
*
* 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.
*/
#ifndef __PICOXCELL_SOC_H__
#define __PICOXCELL_SOC_H__
#define PICOXCELL_UART1_BASE 0x80230000
#define PICOXCELL_PERIPH_BASE 0x80000000
#define PICOXCELL_PERIPH_LENGTH SZ_4M
#define PICOXCELL_VIC0_BASE 0x80060000
#define PICOXCELL_VIC1_BASE 0x80064000
#endif
/* __PICOXCELL_SOC_H__ */
arch/arm/mach-picoxcell/include/mach/system.h
0 → 100644
View file @
b8df0ea2
/*
* Copyright (c) 2011 Picochip Ltd., Jamie Iles
*
* 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.
*/
#ifndef __ASM_ARCH_SYSTEM_H
#define __ASM_ARCH_SYSTEM_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
(
int
mode
,
const
char
*
cmd
)
{
/* Watchdog reset to go here. */
}
#endif
/* __ASM_ARCH_SYSTEM_H */
arch/arm/mach-picoxcell/include/mach/timex.h
0 → 100644
View file @
b8df0ea2
/*
* Copyright (c) 2011 Picochip Ltd., Jamie Iles
*
* 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 __TIMEX_H__
#define __TIMEX_H__
/* Bogus value to allow the kernel to compile. */
#define CLOCK_TICK_RATE 1000000
#endif
/* __TIMEX_H__ */
arch/arm/mach-picoxcell/include/mach/uncompress.h
0 → 100644
View file @
b8df0ea2
/*
* Copyright (c) 2011 Picochip Ltd., Jamie Iles
*
* 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 putc(c)
#define flush()
#define arch_decomp_setup()
#define arch_decomp_wdog()
arch/arm/mach-picoxcell/include/mach/vmalloc.h
0 → 100644
View file @
b8df0ea2
/*
* Copyright (c) 2011 Picochip Ltd., Jamie Iles
*
* 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.
*/
#define VMALLOC_END 0xfe000000UL
arch/arm/mach-picoxcell/io.c
0 → 100644
View file @
b8df0ea2
/*
* Copyright (c) 2011 Picochip Ltd., Jamie Iles
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* All enquiries to support@picochip.com
*/
#include <linux/io.h>
#include <linux/mm.h>
#include <linux/module.h>
#include <linux/of.h>
#include <asm/mach/map.h>
#include <mach/map.h>
#include <mach/picoxcell_soc.h>
#include "common.h"
void
__init
picoxcell_map_io
(
void
)
{
struct
map_desc
io_map
=
{
.
virtual
=
PHYS_TO_IO
(
PICOXCELL_PERIPH_BASE
),
.
pfn
=
__phys_to_pfn
(
PICOXCELL_PERIPH_BASE
),
.
length
=
PICOXCELL_PERIPH_LENGTH
,
.
type
=
MT_DEVICE
,
};
iotable_init
(
&
io_map
,
1
);
}
arch/arm/mach-picoxcell/time.c
0 → 100644
View file @
b8df0ea2
/*
* Copyright (c) 2011 Picochip Ltd., Jamie Iles
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* All enquiries to support@picochip.com
*/
#include <linux/dw_apb_timer.h>
#include <linux/of.h>
#include <linux/of_address.h>
#include <linux/of_irq.h>
#include <linux/sched.h>
#include <asm/mach/time.h>
#include <asm/sched_clock.h>
#include "common.h"
static
void
timer_get_base_and_rate
(
struct
device_node
*
np
,
void
__iomem
**
base
,
u32
*
rate
)
{
*
base
=
of_iomap
(
np
,
0
);
if
(
!*
base
)
panic
(
"Unable to map regs for %s"
,
np
->
name
);
if
(
of_property_read_u32
(
np
,
"clock-freq"
,
rate
))
panic
(
"No clock-freq property for %s"
,
np
->
name
);
}
static
void
picoxcell_add_clockevent
(
struct
device_node
*
event_timer
)
{
void
__iomem
*
iobase
;
struct
dw_apb_clock_event_device
*
ced
;
u32
irq
,
rate
;
irq
=
irq_of_parse_and_map
(
event_timer
,
0
);
if
(
irq
==
NO_IRQ
)
panic
(
"No IRQ for clock event timer"
);
timer_get_base_and_rate
(
event_timer
,
&
iobase
,
&
rate
);
ced
=
dw_apb_clockevent_init
(
0
,
event_timer
->
name
,
300
,
iobase
,
irq
,
rate
);
if
(
!
ced
)
panic
(
"Unable to initialise clockevent device"
);
dw_apb_clockevent_register
(
ced
);
}
static
void
picoxcell_add_clocksource
(
struct
device_node
*
source_timer
)
{
void
__iomem
*
iobase
;
struct
dw_apb_clocksource
*
cs
;
u32
rate
;
timer_get_base_and_rate
(
source_timer
,
&
iobase
,
&
rate
);
cs
=
dw_apb_clocksource_init
(
300
,
source_timer
->
name
,
iobase
,
rate
);
if
(
!
cs
)
panic
(
"Unable to initialise clocksource device"
);
dw_apb_clocksource_start
(
cs
);
dw_apb_clocksource_register
(
cs
);
}
static
DEFINE_CLOCK_DATA
(
cd
);
static
void
__iomem
*
sched_io_base
;
unsigned
long
long
notrace
sched_clock
(
void
)
{
cycle_t
cyc
=
sched_io_base
?
__raw_readl
(
sched_io_base
)
:
0
;
return
cyc_to_sched_clock
(
&
cd
,
cyc
,
(
u32
)
~
0
);
}
static
void
notrace
picoxcell_update_sched_clock
(
void
)
{
cycle_t
cyc
=
sched_io_base
?
__raw_readl
(
sched_io_base
)
:
0
;
update_sched_clock
(
&
cd
,
cyc
,
(
u32
)
~
0
);
}
static
const
struct
of_device_id
picoxcell_rtc_ids
[]
__initconst
=
{
{
.
compatible
=
"picochip,pc3x2-rtc"
},
{
/* Sentinel */
},
};
static
void
picoxcell_init_sched_clock
(
void
)
{
struct
device_node
*
sched_timer
;
u32
rate
;
sched_timer
=
of_find_matching_node
(
NULL
,
picoxcell_rtc_ids
);
if
(
!
sched_timer
)
panic
(
"No RTC for sched clock to use"
);
timer_get_base_and_rate
(
sched_timer
,
&
sched_io_base
,
&
rate
);
of_node_put
(
sched_timer
);
init_sched_clock
(
&
cd
,
picoxcell_update_sched_clock
,
32
,
rate
);
}
static
const
struct
of_device_id
picoxcell_timer_ids
[]
__initconst
=
{
{
.
compatible
=
"picochip,pc3x2-timer"
},
{},
};
static
void
__init
picoxcell_timer_init
(
void
)
{
struct
device_node
*
event_timer
,
*
source_timer
;
event_timer
=
of_find_matching_node
(
NULL
,
picoxcell_timer_ids
);
if
(
!
event_timer
)
panic
(
"No timer for clockevent"
);
picoxcell_add_clockevent
(
event_timer
);
source_timer
=
of_find_matching_node
(
event_timer
,
picoxcell_timer_ids
);
if
(
!
source_timer
)
panic
(
"No timer for clocksource"
);
picoxcell_add_clocksource
(
source_timer
);
of_node_put
(
source_timer
);
picoxcell_init_sched_clock
();
}
struct
sys_timer
picoxcell_timer
=
{
.
init
=
picoxcell_timer_init
,
};
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