forked from Minki/linux
Merge branch 'spear/dt' into next/dt
This is a rebased version of parts of git://git.stlinux.com/spear/linux-2.6.git spear-v3.5 which was accidentally based on the linux-next tree and mixed too many different things. The pinctrl related changes from the same branch are now in the spear/pinctrl branch of arm-soc. There are a few non-DT cleanups mixed in here, but fundamentally it's all related to the DT conversion. * spear/dt: (9 commits) ARM: spear: remove most mach/*.h header contents SPEAr: Update defconfigs SPEAr: Add PL080 DMA support for 3xx and 6xx ARM: SPEAr3xx: Add device-tree support to SPEAr3xx architecture SPEAr3xx: Replace printk() with pr_*() SPEAr6xx: Add compilation support for dtbs using 'make dtbs' SPEAr3xx: Add clock instance of usb hosts - ehci and ohci 0 and 1 SPEAr: Use CLKDEV_INIT for defining clk_lookups ARM: SPEAr600: Change FSMC and SMI clock names Signed-off-by: Arnd Bergmann <arnd@arndb.de> [olof: rebuilt branch due to drop of an early merge] Signed-off-by: Olof Johansson <olof@lixom.net>
This commit is contained in:
commit
19f36bfa00
@ -1,5 +1,5 @@
|
||||
What: /sys/bus/usb/drivers/usbtmc/devices/*/interface_capabilities
|
||||
What: /sys/bus/usb/drivers/usbtmc/devices/*/device_capabilities
|
||||
What: /sys/bus/usb/drivers/usbtmc/*/interface_capabilities
|
||||
What: /sys/bus/usb/drivers/usbtmc/*/device_capabilities
|
||||
Date: August 2008
|
||||
Contact: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
Description:
|
||||
@ -12,8 +12,8 @@ Description:
|
||||
The files are read only.
|
||||
|
||||
|
||||
What: /sys/bus/usb/drivers/usbtmc/devices/*/usb488_interface_capabilities
|
||||
What: /sys/bus/usb/drivers/usbtmc/devices/*/usb488_device_capabilities
|
||||
What: /sys/bus/usb/drivers/usbtmc/*/usb488_interface_capabilities
|
||||
What: /sys/bus/usb/drivers/usbtmc/*/usb488_device_capabilities
|
||||
Date: August 2008
|
||||
Contact: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
Description:
|
||||
@ -27,7 +27,7 @@ Description:
|
||||
The files are read only.
|
||||
|
||||
|
||||
What: /sys/bus/usb/drivers/usbtmc/devices/*/TermChar
|
||||
What: /sys/bus/usb/drivers/usbtmc/*/TermChar
|
||||
Date: August 2008
|
||||
Contact: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
Description:
|
||||
@ -40,7 +40,7 @@ Description:
|
||||
sent to the device or not.
|
||||
|
||||
|
||||
What: /sys/bus/usb/drivers/usbtmc/devices/*/TermCharEnabled
|
||||
What: /sys/bus/usb/drivers/usbtmc/*/TermCharEnabled
|
||||
Date: August 2008
|
||||
Contact: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
Description:
|
||||
@ -51,7 +51,7 @@ Description:
|
||||
published by the USB-IF.
|
||||
|
||||
|
||||
What: /sys/bus/usb/drivers/usbtmc/devices/*/auto_abort
|
||||
What: /sys/bus/usb/drivers/usbtmc/*/auto_abort
|
||||
Date: August 2008
|
||||
Contact: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
Description:
|
||||
|
18
Documentation/ABI/testing/sysfs-block-rssd
Normal file
18
Documentation/ABI/testing/sysfs-block-rssd
Normal file
@ -0,0 +1,18 @@
|
||||
What: /sys/block/rssd*/registers
|
||||
Date: March 2012
|
||||
KernelVersion: 3.3
|
||||
Contact: Asai Thambi S P <asamymuthupa@micron.com>
|
||||
Description: This is a read-only file. Dumps below driver information and
|
||||
hardware registers.
|
||||
- S ACTive
|
||||
- Command Issue
|
||||
- Allocated
|
||||
- Completed
|
||||
- PORT IRQ STAT
|
||||
- HOST IRQ STAT
|
||||
|
||||
What: /sys/block/rssd*/status
|
||||
Date: April 2012
|
||||
KernelVersion: 3.4
|
||||
Contact: Asai Thambi S P <asamymuthupa@micron.com>
|
||||
Description: This is a read-only file. Indicates the status of the device.
|
8
Documentation/ABI/testing/sysfs-cfq-target-latency
Normal file
8
Documentation/ABI/testing/sysfs-cfq-target-latency
Normal file
@ -0,0 +1,8 @@
|
||||
What: /sys/block/<device>/iosched/target_latency
|
||||
Date: March 2012
|
||||
contact: Tao Ma <boyu.mt@taobao.com>
|
||||
Description:
|
||||
The /sys/block/<device>/iosched/target_latency only exists
|
||||
when the user sets cfq to /sys/block/<device>/scheduler.
|
||||
It contains an estimated latency time for the cfq. cfq will
|
||||
use it to calculate the time slice used for every task.
|
@ -17,14 +17,14 @@ Introduction
|
||||
SPEAr (Platform)
|
||||
- SPEAr3XX (3XX SOC series, based on ARM9)
|
||||
- SPEAr300 (SOC)
|
||||
- SPEAr300_EVB (Evaluation Board)
|
||||
- SPEAr300 Evaluation Board
|
||||
- SPEAr310 (SOC)
|
||||
- SPEAr310_EVB (Evaluation Board)
|
||||
- SPEAr310 Evaluation Board
|
||||
- SPEAr320 (SOC)
|
||||
- SPEAr320_EVB (Evaluation Board)
|
||||
- SPEAr320 Evaluation Board
|
||||
- SPEAr6XX (6XX SOC series, based on ARM9)
|
||||
- SPEAr600 (SOC)
|
||||
- SPEAr600_EVB (Evaluation Board)
|
||||
- SPEAr600 Evaluation Board
|
||||
- SPEAr13XX (13XX SOC series, based on ARM CORTEXA9)
|
||||
- SPEAr1300 (SOC)
|
||||
|
||||
@ -51,10 +51,11 @@ Introduction
|
||||
Common file for machines of spear3xx family is mach-spear3xx/spear3xx.c and for
|
||||
spear6xx is mach-spear6xx/spear6xx.c. mach-spear* also contain soc/machine
|
||||
specific files, like spear300.c, spear310.c, spear320.c and spear600.c.
|
||||
mach-spear* also contains board specific files for each machine type.
|
||||
mach-spear* doesn't contains board specific files as they fully support
|
||||
Flattened Device Tree.
|
||||
|
||||
|
||||
Document Author
|
||||
---------------
|
||||
|
||||
Viresh Kumar, (c) 2010 ST Microelectronics
|
||||
Viresh Kumar <viresh.kumar@st.com>, (c) 2010-2012 ST Microelectronics
|
||||
|
@ -34,8 +34,7 @@ Current Status: linux-2.6.34-mmotm(development version of 2010/April)
|
||||
|
||||
Features:
|
||||
- accounting anonymous pages, file caches, swap caches usage and limiting them.
|
||||
- private LRU and reclaim routine. (system's global LRU and private LRU
|
||||
work independently from each other)
|
||||
- pages are linked to per-memcg LRU exclusively, and there is no global LRU.
|
||||
- optionally, memory+swap usage can be accounted and limited.
|
||||
- hierarchical accounting
|
||||
- soft limit
|
||||
@ -154,7 +153,7 @@ updated. page_cgroup has its own LRU on cgroup.
|
||||
2.2.1 Accounting details
|
||||
|
||||
All mapped anon pages (RSS) and cache pages (Page Cache) are accounted.
|
||||
Some pages which are never reclaimable and will not be on the global LRU
|
||||
Some pages which are never reclaimable and will not be on the LRU
|
||||
are not accounted. We just account pages under usual VM management.
|
||||
|
||||
RSS pages are accounted at page_fault unless they've already been accounted
|
||||
|
@ -6,3 +6,21 @@ Boards with the ST SPEAr600 SoC shall have the following properties:
|
||||
Required root node property:
|
||||
|
||||
compatible = "st,spear600";
|
||||
|
||||
Boards with the ST SPEAr300 SoC shall have the following properties:
|
||||
|
||||
Required root node property:
|
||||
|
||||
compatible = "st,spear300";
|
||||
|
||||
Boards with the ST SPEAr310 SoC shall have the following properties:
|
||||
|
||||
Required root node property:
|
||||
|
||||
compatible = "st,spear310";
|
||||
|
||||
Boards with the ST SPEAr320 SoC shall have the following properties:
|
||||
|
||||
Required root node property:
|
||||
|
||||
compatible = "st,spear320";
|
||||
|
@ -531,3 +531,11 @@ Why: There appear to be no production users of the get_robust_list syscall,
|
||||
of ASLR. It was only ever intended for debugging, so it should be
|
||||
removed.
|
||||
Who: Kees Cook <keescook@chromium.org>
|
||||
|
||||
----------------------------
|
||||
|
||||
What: setitimer accepts user NULL pointer (value)
|
||||
When: 3.6
|
||||
Why: setitimer is not returning -EFAULT if user pointer is NULL. This
|
||||
violates the spec.
|
||||
Who: Sasikantha Babu <sasikanth.v19@gmail.com>
|
||||
|
@ -114,7 +114,7 @@ members are defined:
|
||||
struct file_system_type {
|
||||
const char *name;
|
||||
int fs_flags;
|
||||
struct dentry (*mount) (struct file_system_type *, int,
|
||||
struct dentry *(*mount) (struct file_system_type *, int,
|
||||
const char *, void *);
|
||||
void (*kill_sb) (struct super_block *);
|
||||
struct module *owner;
|
||||
|
@ -43,7 +43,9 @@ ALC680
|
||||
|
||||
ALC882/883/885/888/889
|
||||
======================
|
||||
N/A
|
||||
acer-aspire-4930g Acer Aspire 4930G/5930G/6530G/6930G/7730G
|
||||
acer-aspire-8930g Acer Aspire 8330G/6935G
|
||||
acer-aspire Acer Aspire others
|
||||
|
||||
ALC861/660
|
||||
==========
|
||||
|
@ -168,6 +168,28 @@ that if the completion handler or anyone else tries to resubmit it
|
||||
they will get a -EPERM error. Thus you can be sure that when
|
||||
usb_kill_urb() returns, the URB is totally idle.
|
||||
|
||||
There is a lifetime issue to consider. An URB may complete at any
|
||||
time, and the completion handler may free the URB. If this happens
|
||||
while usb_unlink_urb or usb_kill_urb is running, it will cause a
|
||||
memory-access violation. The driver is responsible for avoiding this,
|
||||
which often means some sort of lock will be needed to prevent the URB
|
||||
from being deallocated while it is still in use.
|
||||
|
||||
On the other hand, since usb_unlink_urb may end up calling the
|
||||
completion handler, the handler must not take any lock that is held
|
||||
when usb_unlink_urb is invoked. The general solution to this problem
|
||||
is to increment the URB's reference count while holding the lock, then
|
||||
drop the lock and call usb_unlink_urb or usb_kill_urb, and then
|
||||
decrement the URB's reference count. You increment the reference
|
||||
count by calling
|
||||
|
||||
struct urb *usb_get_urb(struct urb *urb)
|
||||
|
||||
(ignore the return value; it is the same as the argument) and
|
||||
decrement the reference count by calling usb_free_urb. Of course,
|
||||
none of this is necessary if there's no danger of the URB being freed
|
||||
by the completion handler.
|
||||
|
||||
|
||||
1.7. What about the completion handler?
|
||||
|
||||
|
@ -183,10 +183,10 @@ An input control transfer to get a port status.
|
||||
d5ea89a0 3575914555 S Ci:1:001:0 s a3 00 0000 0003 0004 4 <
|
||||
d5ea89a0 3575914560 C Ci:1:001:0 0 4 = 01050000
|
||||
|
||||
An output bulk transfer to send a SCSI command 0x5E in a 31-byte Bulk wrapper
|
||||
to a storage device at address 5:
|
||||
An output bulk transfer to send a SCSI command 0x28 (READ_10) in a 31-byte
|
||||
Bulk wrapper to a storage device at address 5:
|
||||
|
||||
dd65f0e8 4128379752 S Bo:1:005:2 -115 31 = 55534243 5e000000 00000000 00000600 00000000 00000000 00000000 000000
|
||||
dd65f0e8 4128379752 S Bo:1:005:2 -115 31 = 55534243 ad000000 00800000 80010a28 20000000 20000040 00000000 000000
|
||||
dd65f0e8 4128379808 C Bo:1:005:2 0 31 >
|
||||
|
||||
* Raw binary format and API
|
||||
|
21
MAINTAINERS
21
MAINTAINERS
@ -1521,8 +1521,8 @@ M: Gustavo Padovan <gustavo@padovan.org>
|
||||
M: Johan Hedberg <johan.hedberg@gmail.com>
|
||||
L: linux-bluetooth@vger.kernel.org
|
||||
W: http://www.bluez.org/
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/padovan/bluetooth.git
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/jh/bluetooth.git
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth.git
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git
|
||||
S: Maintained
|
||||
F: drivers/bluetooth/
|
||||
|
||||
@ -1532,8 +1532,8 @@ M: Gustavo Padovan <gustavo@padovan.org>
|
||||
M: Johan Hedberg <johan.hedberg@gmail.com>
|
||||
L: linux-bluetooth@vger.kernel.org
|
||||
W: http://www.bluez.org/
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/padovan/bluetooth.git
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/jh/bluetooth.git
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth.git
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git
|
||||
S: Maintained
|
||||
F: net/bluetooth/
|
||||
F: include/net/bluetooth/
|
||||
@ -4533,8 +4533,7 @@ S: Supported
|
||||
F: drivers/net/ethernet/myricom/myri10ge/
|
||||
|
||||
NATSEMI ETHERNET DRIVER (DP8381x)
|
||||
M: Tim Hockin <thockin@hockin.org>
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
F: drivers/net/ethernet/natsemi/natsemi.c
|
||||
|
||||
NATIVE INSTRUMENTS USB SOUND INTERFACE DRIVER
|
||||
@ -4803,6 +4802,7 @@ F: arch/arm/mach-omap2/clockdomain2xxx_3xxx.c
|
||||
F: arch/arm/mach-omap2/clockdomain44xx.c
|
||||
|
||||
OMAP AUDIO SUPPORT
|
||||
M: Peter Ujfalusi <peter.ujfalusi@ti.com>
|
||||
M: Jarkko Nikula <jarkko.nikula@bitmer.com>
|
||||
L: alsa-devel@alsa-project.org (subscribers-only)
|
||||
L: linux-omap@vger.kernel.org
|
||||
@ -5117,6 +5117,11 @@ F: drivers/i2c/busses/i2c-pca-*
|
||||
F: include/linux/i2c-algo-pca.h
|
||||
F: include/linux/i2c-pca-platform.h
|
||||
|
||||
PCDP - PRIMARY CONSOLE AND DEBUG PORT
|
||||
M: Khalid Aziz <khalid.aziz@hp.com>
|
||||
S: Maintained
|
||||
F: drivers/firmware/pcdp.*
|
||||
|
||||
PCI ERROR RECOVERY
|
||||
M: Linas Vepstas <linasvepstas@gmail.com>
|
||||
L: linux-pci@vger.kernel.org
|
||||
@ -6466,6 +6471,7 @@ S: Odd Fixes
|
||||
F: drivers/staging/olpc_dcon/
|
||||
|
||||
STAGING - OZMO DEVICES USB OVER WIFI DRIVER
|
||||
M: Rupesh Gujare <rgujare@ozmodevices.com>
|
||||
M: Chris Kelly <ckelly@ozmodevices.com>
|
||||
S: Maintained
|
||||
F: drivers/staging/ozwpan/
|
||||
@ -7461,8 +7467,7 @@ F: include/linux/wm97xx.h
|
||||
|
||||
WOLFSON MICROELECTRONICS DRIVERS
|
||||
M: Mark Brown <broonie@opensource.wolfsonmicro.com>
|
||||
M: Ian Lartey <ian@opensource.wolfsonmicro.com>
|
||||
M: Dimitris Papastamos <dp@opensource.wolfsonmicro.com>
|
||||
L: patches@opensource.wolfsonmicro.com
|
||||
T: git git://opensource.wolfsonmicro.com/linux-2.6-asoc
|
||||
T: git git://opensource.wolfsonmicro.com/linux-2.6-audioplus
|
||||
W: http://opensource.wolfsonmicro.com/content/linux-drivers-wolfson-devices
|
||||
|
2
Makefile
2
Makefile
@ -1,7 +1,7 @@
|
||||
VERSION = 3
|
||||
PATCHLEVEL = 4
|
||||
SUBLEVEL = 0
|
||||
EXTRAVERSION = -rc2
|
||||
EXTRAVERSION = -rc3
|
||||
NAME = Saber-toothed Squirrel
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
@ -3,6 +3,7 @@
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <asm/barrier.h>
|
||||
#include <asm/cmpxchg.h>
|
||||
|
||||
/*
|
||||
* Atomic operations that C can't guarantee us. Useful for
|
||||
@ -168,73 +169,6 @@ static __inline__ long atomic64_sub_return(long i, atomic64_t * v)
|
||||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
* Atomic exchange routines.
|
||||
*/
|
||||
|
||||
#define __ASM__MB
|
||||
#define ____xchg(type, args...) __xchg ## type ## _local(args)
|
||||
#define ____cmpxchg(type, args...) __cmpxchg ## type ## _local(args)
|
||||
#include <asm/xchg.h>
|
||||
|
||||
#define xchg_local(ptr,x) \
|
||||
({ \
|
||||
__typeof__(*(ptr)) _x_ = (x); \
|
||||
(__typeof__(*(ptr))) __xchg_local((ptr), (unsigned long)_x_, \
|
||||
sizeof(*(ptr))); \
|
||||
})
|
||||
|
||||
#define cmpxchg_local(ptr, o, n) \
|
||||
({ \
|
||||
__typeof__(*(ptr)) _o_ = (o); \
|
||||
__typeof__(*(ptr)) _n_ = (n); \
|
||||
(__typeof__(*(ptr))) __cmpxchg_local((ptr), (unsigned long)_o_, \
|
||||
(unsigned long)_n_, \
|
||||
sizeof(*(ptr))); \
|
||||
})
|
||||
|
||||
#define cmpxchg64_local(ptr, o, n) \
|
||||
({ \
|
||||
BUILD_BUG_ON(sizeof(*(ptr)) != 8); \
|
||||
cmpxchg_local((ptr), (o), (n)); \
|
||||
})
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
#undef __ASM__MB
|
||||
#define __ASM__MB "\tmb\n"
|
||||
#endif
|
||||
#undef ____xchg
|
||||
#undef ____cmpxchg
|
||||
#define ____xchg(type, args...) __xchg ##type(args)
|
||||
#define ____cmpxchg(type, args...) __cmpxchg ##type(args)
|
||||
#include <asm/xchg.h>
|
||||
|
||||
#define xchg(ptr,x) \
|
||||
({ \
|
||||
__typeof__(*(ptr)) _x_ = (x); \
|
||||
(__typeof__(*(ptr))) __xchg((ptr), (unsigned long)_x_, \
|
||||
sizeof(*(ptr))); \
|
||||
})
|
||||
|
||||
#define cmpxchg(ptr, o, n) \
|
||||
({ \
|
||||
__typeof__(*(ptr)) _o_ = (o); \
|
||||
__typeof__(*(ptr)) _n_ = (n); \
|
||||
(__typeof__(*(ptr))) __cmpxchg((ptr), (unsigned long)_o_, \
|
||||
(unsigned long)_n_, sizeof(*(ptr)));\
|
||||
})
|
||||
|
||||
#define cmpxchg64(ptr, o, n) \
|
||||
({ \
|
||||
BUILD_BUG_ON(sizeof(*(ptr)) != 8); \
|
||||
cmpxchg((ptr), (o), (n)); \
|
||||
})
|
||||
|
||||
#undef __ASM__MB
|
||||
#undef ____cmpxchg
|
||||
|
||||
#define __HAVE_ARCH_CMPXCHG 1
|
||||
|
||||
#define atomic64_cmpxchg(v, old, new) (cmpxchg(&((v)->counter), old, new))
|
||||
#define atomic64_xchg(v, new) (xchg(&((v)->counter), new))
|
||||
|
||||
|
71
arch/alpha/include/asm/cmpxchg.h
Normal file
71
arch/alpha/include/asm/cmpxchg.h
Normal file
@ -0,0 +1,71 @@
|
||||
#ifndef _ALPHA_CMPXCHG_H
|
||||
#define _ALPHA_CMPXCHG_H
|
||||
|
||||
/*
|
||||
* Atomic exchange routines.
|
||||
*/
|
||||
|
||||
#define __ASM__MB
|
||||
#define ____xchg(type, args...) __xchg ## type ## _local(args)
|
||||
#define ____cmpxchg(type, args...) __cmpxchg ## type ## _local(args)
|
||||
#include <asm/xchg.h>
|
||||
|
||||
#define xchg_local(ptr, x) \
|
||||
({ \
|
||||
__typeof__(*(ptr)) _x_ = (x); \
|
||||
(__typeof__(*(ptr))) __xchg_local((ptr), (unsigned long)_x_, \
|
||||
sizeof(*(ptr))); \
|
||||
})
|
||||
|
||||
#define cmpxchg_local(ptr, o, n) \
|
||||
({ \
|
||||
__typeof__(*(ptr)) _o_ = (o); \
|
||||
__typeof__(*(ptr)) _n_ = (n); \
|
||||
(__typeof__(*(ptr))) __cmpxchg_local((ptr), (unsigned long)_o_, \
|
||||
(unsigned long)_n_, \
|
||||
sizeof(*(ptr))); \
|
||||
})
|
||||
|
||||
#define cmpxchg64_local(ptr, o, n) \
|
||||
({ \
|
||||
BUILD_BUG_ON(sizeof(*(ptr)) != 8); \
|
||||
cmpxchg_local((ptr), (o), (n)); \
|
||||
})
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
#undef __ASM__MB
|
||||
#define __ASM__MB "\tmb\n"
|
||||
#endif
|
||||
#undef ____xchg
|
||||
#undef ____cmpxchg
|
||||
#define ____xchg(type, args...) __xchg ##type(args)
|
||||
#define ____cmpxchg(type, args...) __cmpxchg ##type(args)
|
||||
#include <asm/xchg.h>
|
||||
|
||||
#define xchg(ptr, x) \
|
||||
({ \
|
||||
__typeof__(*(ptr)) _x_ = (x); \
|
||||
(__typeof__(*(ptr))) __xchg((ptr), (unsigned long)_x_, \
|
||||
sizeof(*(ptr))); \
|
||||
})
|
||||
|
||||
#define cmpxchg(ptr, o, n) \
|
||||
({ \
|
||||
__typeof__(*(ptr)) _o_ = (o); \
|
||||
__typeof__(*(ptr)) _n_ = (n); \
|
||||
(__typeof__(*(ptr))) __cmpxchg((ptr), (unsigned long)_o_, \
|
||||
(unsigned long)_n_, sizeof(*(ptr)));\
|
||||
})
|
||||
|
||||
#define cmpxchg64(ptr, o, n) \
|
||||
({ \
|
||||
BUILD_BUG_ON(sizeof(*(ptr)) != 8); \
|
||||
cmpxchg((ptr), (o), (n)); \
|
||||
})
|
||||
|
||||
#undef __ASM__MB
|
||||
#undef ____cmpxchg
|
||||
|
||||
#define __HAVE_ARCH_CMPXCHG 1
|
||||
|
||||
#endif /* _ALPHA_CMPXCHG_H */
|
@ -1,10 +1,10 @@
|
||||
#ifndef _ALPHA_ATOMIC_H
|
||||
#ifndef _ALPHA_CMPXCHG_H
|
||||
#error Do not include xchg.h directly!
|
||||
#else
|
||||
/*
|
||||
* xchg/xchg_local and cmpxchg/cmpxchg_local share the same code
|
||||
* except that local version do not have the expensive memory barrier.
|
||||
* So this file is included twice from asm/system.h.
|
||||
* So this file is included twice from asm/cmpxchg.h.
|
||||
*/
|
||||
|
||||
/*
|
||||
|
@ -77,6 +77,8 @@ int atags_to_fdt(void *atag_list, void *fdt, int total_space)
|
||||
} else if (atag->hdr.tag == ATAG_MEM) {
|
||||
if (memcount >= sizeof(mem_reg_property)/4)
|
||||
continue;
|
||||
if (!atag->u.mem.size)
|
||||
continue;
|
||||
mem_reg_property[memcount++] = cpu_to_fdt32(atag->u.mem.start);
|
||||
mem_reg_property[memcount++] = cpu_to_fdt32(atag->u.mem.size);
|
||||
} else if (atag->hdr.tag == ATAG_INITRD2) {
|
||||
|
@ -273,7 +273,7 @@ restart: adr r0, LC0
|
||||
add r0, r0, #0x100
|
||||
mov r1, r6
|
||||
sub r2, sp, r6
|
||||
blne atags_to_fdt
|
||||
bleq atags_to_fdt
|
||||
|
||||
ldmfd sp!, {r0-r3, ip, lr}
|
||||
sub sp, sp, #0x10000
|
||||
|
@ -55,7 +55,6 @@
|
||||
#interrupt-cells = <2>;
|
||||
compatible = "atmel,at91rm9200-aic";
|
||||
interrupt-controller;
|
||||
interrupt-parent;
|
||||
reg = <0xfffff000 0x200>;
|
||||
};
|
||||
|
||||
|
@ -56,7 +56,6 @@
|
||||
#interrupt-cells = <2>;
|
||||
compatible = "atmel,at91rm9200-aic";
|
||||
interrupt-controller;
|
||||
interrupt-parent;
|
||||
reg = <0xfffff000 0x200>;
|
||||
};
|
||||
|
||||
|
@ -54,7 +54,6 @@
|
||||
#interrupt-cells = <2>;
|
||||
compatible = "atmel,at91rm9200-aic";
|
||||
interrupt-controller;
|
||||
interrupt-parent;
|
||||
reg = <0xfffff000 0x200>;
|
||||
};
|
||||
|
||||
|
@ -24,7 +24,6 @@
|
||||
#interrupt-cells = <3>;
|
||||
#address-cells = <1>;
|
||||
interrupt-controller;
|
||||
interrupt-parent;
|
||||
reg = <0xa0411000 0x1000>,
|
||||
<0xa0410100 0x100>;
|
||||
};
|
||||
|
@ -89,7 +89,6 @@
|
||||
#size-cells = <0>;
|
||||
#address-cells = <1>;
|
||||
interrupt-controller;
|
||||
interrupt-parent;
|
||||
reg = <0xfff11000 0x1000>,
|
||||
<0xfff10100 0x100>;
|
||||
};
|
||||
|
183
arch/arm/boot/dts/spear300-evb.dts
Normal file
183
arch/arm/boot/dts/spear300-evb.dts
Normal file
@ -0,0 +1,183 @@
|
||||
/*
|
||||
* DTS file for SPEAr300 Evaluation Baord
|
||||
*
|
||||
* Copyright 2012 Viresh Kumar <viresh.kumar@st.com>
|
||||
*
|
||||
* The code contained herein is licensed under the GNU General Public
|
||||
* License. You may obtain a copy of the GNU General Public License
|
||||
* Version 2 or later at the following locations:
|
||||
*
|
||||
* http://www.opensource.org/licenses/gpl-license.html
|
||||
* http://www.gnu.org/copyleft/gpl.html
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
/include/ "spear300.dtsi"
|
||||
|
||||
/ {
|
||||
model = "ST SPEAr300 Evaluation Board";
|
||||
compatible = "st,spear300-evb", "st,spear300";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
memory {
|
||||
reg = <0 0x40000000>;
|
||||
};
|
||||
|
||||
ahb {
|
||||
clcd@60000000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
dma@fc400000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
fsmc: flash@94000000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
gmac: eth@e0800000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
sdhci@70000000 {
|
||||
int-gpio = <&gpio1 0 0>;
|
||||
power-gpio = <&gpio1 2 1>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
smi: flash@fc000000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
spi0: spi@d0100000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
ehci@e1800000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
ohci@e1900000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
ohci@e2100000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
apb {
|
||||
gpio0: gpio@fc980000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
gpio1: gpio@a9000000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
i2c0: i2c@d0180000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
kbd@a0000000 {
|
||||
linux,keymap = < 0x00010000
|
||||
0x00020100
|
||||
0x00030200
|
||||
0x00040300
|
||||
0x00050400
|
||||
0x00060500
|
||||
0x00070600
|
||||
0x00080700
|
||||
0x00090800
|
||||
0x000a0001
|
||||
0x000c0101
|
||||
0x000d0201
|
||||
0x000e0301
|
||||
0x000f0401
|
||||
0x00100501
|
||||
0x00110601
|
||||
0x00120701
|
||||
0x00130801
|
||||
0x00140002
|
||||
0x00150102
|
||||
0x00160202
|
||||
0x00170302
|
||||
0x00180402
|
||||
0x00190502
|
||||
0x001a0602
|
||||
0x001b0702
|
||||
0x001c0802
|
||||
0x001d0003
|
||||
0x001e0103
|
||||
0x001f0203
|
||||
0x00200303
|
||||
0x00210403
|
||||
0x00220503
|
||||
0x00230603
|
||||
0x00240703
|
||||
0x00250803
|
||||
0x00260004
|
||||
0x00270104
|
||||
0x00280204
|
||||
0x00290304
|
||||
0x002a0404
|
||||
0x002b0504
|
||||
0x002c0604
|
||||
0x002d0704
|
||||
0x002e0804
|
||||
0x002f0005
|
||||
0x00300105
|
||||
0x00310205
|
||||
0x00320305
|
||||
0x00330405
|
||||
0x00340505
|
||||
0x00350605
|
||||
0x00360705
|
||||
0x00370805
|
||||
0x00380006
|
||||
0x00390106
|
||||
0x003a0206
|
||||
0x003b0306
|
||||
0x003c0406
|
||||
0x003d0506
|
||||
0x003e0606
|
||||
0x003f0706
|
||||
0x00400806
|
||||
0x00410007
|
||||
0x00420107
|
||||
0x00430207
|
||||
0x00440307
|
||||
0x00450407
|
||||
0x00460507
|
||||
0x00470607
|
||||
0x00480707
|
||||
0x00490807
|
||||
0x004a0008
|
||||
0x004b0108
|
||||
0x004c0208
|
||||
0x004d0308
|
||||
0x004e0408
|
||||
0x004f0508
|
||||
0x00500608
|
||||
0x00510708
|
||||
0x00520808 >;
|
||||
autorepeat;
|
||||
st,mode = <0>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
rtc@fc900000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
serial@d0000000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
wdt@fc880000 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
72
arch/arm/boot/dts/spear300.dtsi
Normal file
72
arch/arm/boot/dts/spear300.dtsi
Normal file
@ -0,0 +1,72 @@
|
||||
/*
|
||||
* DTS file for SPEAr300 SoC
|
||||
*
|
||||
* Copyright 2012 Viresh Kumar <viresh.kumar@st.com>
|
||||
*
|
||||
* The code contained herein is licensed under the GNU General Public
|
||||
* License. You may obtain a copy of the GNU General Public License
|
||||
* Version 2 or later at the following locations:
|
||||
*
|
||||
* http://www.opensource.org/licenses/gpl-license.html
|
||||
* http://www.gnu.org/copyleft/gpl.html
|
||||
*/
|
||||
|
||||
/include/ "spear3xx.dtsi"
|
||||
|
||||
/ {
|
||||
ahb {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "simple-bus";
|
||||
ranges = <0x60000000 0x60000000 0x50000000
|
||||
0xd0000000 0xd0000000 0x30000000>;
|
||||
|
||||
clcd@60000000 {
|
||||
compatible = "arm,clcd-pl110", "arm,primecell";
|
||||
reg = <0x60000000 0x1000>;
|
||||
interrupts = <30>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
fsmc: flash@94000000 {
|
||||
compatible = "st,spear600-fsmc-nand";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
reg = <0x94000000 0x1000 /* FSMC Register */
|
||||
0x80000000 0x0010>; /* NAND Base */
|
||||
reg-names = "fsmc_regs", "nand_data";
|
||||
st,ale-off = <0x20000>;
|
||||
st,cle-off = <0x10000>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
sdhci@70000000 {
|
||||
compatible = "st,sdhci-spear";
|
||||
reg = <0x70000000 0x100>;
|
||||
interrupts = <1>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
apb {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "simple-bus";
|
||||
ranges = <0xa0000000 0xa0000000 0x10000000
|
||||
0xd0000000 0xd0000000 0x30000000>;
|
||||
|
||||
gpio1: gpio@a9000000 {
|
||||
#gpio-cells = <2>;
|
||||
compatible = "arm,pl061", "arm,primecell";
|
||||
gpio-controller;
|
||||
reg = <0xa9000000 0x1000>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
kbd@a0000000 {
|
||||
compatible = "st,spear300-kbd";
|
||||
reg = <0xa0000000 0x1000>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
111
arch/arm/boot/dts/spear310-evb.dts
Normal file
111
arch/arm/boot/dts/spear310-evb.dts
Normal file
@ -0,0 +1,111 @@
|
||||
/*
|
||||
* DTS file for SPEAr310 Evaluation Baord
|
||||
*
|
||||
* Copyright 2012 Viresh Kumar <viresh.kumar@st.com>
|
||||
*
|
||||
* The code contained herein is licensed under the GNU General Public
|
||||
* License. You may obtain a copy of the GNU General Public License
|
||||
* Version 2 or later at the following locations:
|
||||
*
|
||||
* http://www.opensource.org/licenses/gpl-license.html
|
||||
* http://www.gnu.org/copyleft/gpl.html
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
/include/ "spear310.dtsi"
|
||||
|
||||
/ {
|
||||
model = "ST SPEAr310 Evaluation Board";
|
||||
compatible = "st,spear310-evb", "st,spear310";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
memory {
|
||||
reg = <0 0x40000000>;
|
||||
};
|
||||
|
||||
ahb {
|
||||
dma@fc400000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
fsmc: flash@44000000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
gmac: eth@e0800000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
smi: flash@fc000000 {
|
||||
status = "okay";
|
||||
clock-rate=<50000000>;
|
||||
|
||||
flash@f8000000 {
|
||||
label = "m25p64";
|
||||
reg = <0xf8000000 0x800000>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
st,smi-fast-mode;
|
||||
};
|
||||
};
|
||||
|
||||
spi0: spi@d0100000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
ehci@e1800000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
ohci@e1900000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
ohci@e2100000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
apb {
|
||||
gpio0: gpio@fc980000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
i2c0: i2c@d0180000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
rtc@fc900000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
serial@d0000000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
serial@b2000000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
serial@b2080000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
serial@b2100000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
serial@b2180000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
serial@b2200000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
wdt@fc880000 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
75
arch/arm/boot/dts/spear310.dtsi
Normal file
75
arch/arm/boot/dts/spear310.dtsi
Normal file
@ -0,0 +1,75 @@
|
||||
/*
|
||||
* DTS file for SPEAr310 SoC
|
||||
*
|
||||
* Copyright 2012 Viresh Kumar <viresh.kumar@st.com>
|
||||
*
|
||||
* The code contained herein is licensed under the GNU General Public
|
||||
* License. You may obtain a copy of the GNU General Public License
|
||||
* Version 2 or later at the following locations:
|
||||
*
|
||||
* http://www.opensource.org/licenses/gpl-license.html
|
||||
* http://www.gnu.org/copyleft/gpl.html
|
||||
*/
|
||||
|
||||
/include/ "spear3xx.dtsi"
|
||||
|
||||
/ {
|
||||
ahb {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "simple-bus";
|
||||
ranges = <0x40000000 0x40000000 0x10000000
|
||||
0xb0000000 0xb0000000 0x10000000
|
||||
0xd0000000 0xd0000000 0x30000000>;
|
||||
|
||||
fsmc: flash@44000000 {
|
||||
compatible = "st,spear600-fsmc-nand";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
reg = <0x44000000 0x1000 /* FSMC Register */
|
||||
0x40000000 0x0010>; /* NAND Base */
|
||||
reg-names = "fsmc_regs", "nand_data";
|
||||
st,ale-off = <0x10000>;
|
||||
st,cle-off = <0x20000>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
apb {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "simple-bus";
|
||||
ranges = <0xb0000000 0xb0000000 0x10000000
|
||||
0xd0000000 0xd0000000 0x30000000>;
|
||||
|
||||
serial@b2000000 {
|
||||
compatible = "arm,pl011", "arm,primecell";
|
||||
reg = <0xb2000000 0x1000>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
serial@b2080000 {
|
||||
compatible = "arm,pl011", "arm,primecell";
|
||||
reg = <0xb2080000 0x1000>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
serial@b2100000 {
|
||||
compatible = "arm,pl011", "arm,primecell";
|
||||
reg = <0xb2100000 0x1000>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
serial@b2180000 {
|
||||
compatible = "arm,pl011", "arm,primecell";
|
||||
reg = <0xb2180000 0x1000>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
serial@b2200000 {
|
||||
compatible = "arm,pl011", "arm,primecell";
|
||||
reg = <0xb2200000 0x1000>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
112
arch/arm/boot/dts/spear320-evb.dts
Normal file
112
arch/arm/boot/dts/spear320-evb.dts
Normal file
@ -0,0 +1,112 @@
|
||||
/*
|
||||
* DTS file for SPEAr320 Evaluation Baord
|
||||
*
|
||||
* Copyright 2012 Viresh Kumar <viresh.kumar@st.com>
|
||||
*
|
||||
* The code contained herein is licensed under the GNU General Public
|
||||
* License. You may obtain a copy of the GNU General Public License
|
||||
* Version 2 or later at the following locations:
|
||||
*
|
||||
* http://www.opensource.org/licenses/gpl-license.html
|
||||
* http://www.gnu.org/copyleft/gpl.html
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
/include/ "spear320.dtsi"
|
||||
|
||||
/ {
|
||||
model = "ST SPEAr300 Evaluation Board";
|
||||
compatible = "st,spear300-evb", "st,spear300";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
memory {
|
||||
reg = <0 0x40000000>;
|
||||
};
|
||||
|
||||
ahb {
|
||||
clcd@90000000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
dma@fc400000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
fsmc: flash@4c000000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
gmac: eth@e0800000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
sdhci@70000000 {
|
||||
power-gpio = <&gpio0 2 1>;
|
||||
power_always_enb;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
smi: flash@fc000000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
spi0: spi@d0100000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
spi1: spi@a5000000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
spi2: spi@a6000000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
ehci@e1800000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
ohci@e1900000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
ohci@e2100000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
apb {
|
||||
gpio0: gpio@fc980000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
i2c0: i2c@d0180000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
i2c1: i2c@a7000000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
rtc@fc900000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
serial@d0000000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
serial@a3000000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
serial@a4000000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
wdt@fc880000 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
90
arch/arm/boot/dts/spear320.dtsi
Normal file
90
arch/arm/boot/dts/spear320.dtsi
Normal file
@ -0,0 +1,90 @@
|
||||
/*
|
||||
* DTS file for SPEAr320 SoC
|
||||
*
|
||||
* Copyright 2012 Viresh Kumar <viresh.kumar@st.com>
|
||||
*
|
||||
* The code contained herein is licensed under the GNU General Public
|
||||
* License. You may obtain a copy of the GNU General Public License
|
||||
* Version 2 or later at the following locations:
|
||||
*
|
||||
* http://www.opensource.org/licenses/gpl-license.html
|
||||
* http://www.gnu.org/copyleft/gpl.html
|
||||
*/
|
||||
|
||||
/include/ "spear3xx.dtsi"
|
||||
|
||||
/ {
|
||||
ahb {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "simple-bus";
|
||||
ranges = <0x40000000 0x40000000 0x70000000
|
||||
0xd0000000 0xd0000000 0x30000000>;
|
||||
|
||||
clcd@90000000 {
|
||||
compatible = "arm,clcd-pl110", "arm,primecell";
|
||||
reg = <0x90000000 0x1000>;
|
||||
interrupts = <33>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
fsmc: flash@4c000000 {
|
||||
compatible = "st,spear600-fsmc-nand";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
reg = <0x4c000000 0x1000 /* FSMC Register */
|
||||
0x50000000 0x0010>; /* NAND Base */
|
||||
reg-names = "fsmc_regs", "nand_data";
|
||||
st,ale-off = <0x20000>;
|
||||
st,cle-off = <0x10000>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
sdhci@70000000 {
|
||||
compatible = "st,sdhci-spear";
|
||||
reg = <0x70000000 0x100>;
|
||||
interrupts = <29>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
spi1: spi@a5000000 {
|
||||
compatible = "arm,pl022", "arm,primecell";
|
||||
reg = <0xa5000000 0x1000>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
spi2: spi@a6000000 {
|
||||
compatible = "arm,pl022", "arm,primecell";
|
||||
reg = <0xa6000000 0x1000>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
apb {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "simple-bus";
|
||||
ranges = <0xa0000000 0xa0000000 0x10000000
|
||||
0xd0000000 0xd0000000 0x30000000>;
|
||||
|
||||
i2c1: i2c@a7000000 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "snps,designware-i2c";
|
||||
reg = <0xa7000000 0x1000>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
serial@a3000000 {
|
||||
compatible = "arm,pl011", "arm,primecell";
|
||||
reg = <0xa3000000 0x1000>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
serial@a4000000 {
|
||||
compatible = "arm,pl011", "arm,primecell";
|
||||
reg = <0xa4000000 0x1000>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
144
arch/arm/boot/dts/spear3xx.dtsi
Normal file
144
arch/arm/boot/dts/spear3xx.dtsi
Normal file
@ -0,0 +1,144 @@
|
||||
/*
|
||||
* DTS file for all SPEAr3xx SoCs
|
||||
*
|
||||
* Copyright 2012 Viresh Kumar <viresh.kumar@st.com>
|
||||
*
|
||||
* The code contained herein is licensed under the GNU General Public
|
||||
* License. You may obtain a copy of the GNU General Public License
|
||||
* Version 2 or later at the following locations:
|
||||
*
|
||||
* http://www.opensource.org/licenses/gpl-license.html
|
||||
* http://www.gnu.org/copyleft/gpl.html
|
||||
*/
|
||||
|
||||
/include/ "skeleton.dtsi"
|
||||
|
||||
/ {
|
||||
interrupt-parent = <&vic>;
|
||||
|
||||
cpus {
|
||||
cpu@0 {
|
||||
compatible = "arm,arm926ejs";
|
||||
};
|
||||
};
|
||||
|
||||
memory {
|
||||
device_type = "memory";
|
||||
reg = <0 0x40000000>;
|
||||
};
|
||||
|
||||
ahb {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "simple-bus";
|
||||
ranges = <0xd0000000 0xd0000000 0x30000000>;
|
||||
|
||||
vic: interrupt-controller@f1100000 {
|
||||
compatible = "arm,pl190-vic";
|
||||
interrupt-controller;
|
||||
reg = <0xf1100000 0x1000>;
|
||||
#interrupt-cells = <1>;
|
||||
};
|
||||
|
||||
dma@fc400000 {
|
||||
compatible = "arm,pl080", "arm,primecell";
|
||||
reg = <0xfc400000 0x1000>;
|
||||
interrupt-parent = <&vic>;
|
||||
interrupts = <8>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
gmac: eth@e0800000 {
|
||||
compatible = "st,spear600-gmac";
|
||||
reg = <0xe0800000 0x8000>;
|
||||
interrupts = <23 22>;
|
||||
interrupt-names = "macirq", "eth_wake_irq";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
smi: flash@fc000000 {
|
||||
compatible = "st,spear600-smi";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
reg = <0xfc000000 0x1000>;
|
||||
interrupts = <9>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
spi0: spi@d0100000 {
|
||||
compatible = "arm,pl022", "arm,primecell";
|
||||
reg = <0xd0100000 0x1000>;
|
||||
interrupts = <20>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
ehci@e1800000 {
|
||||
compatible = "st,spear600-ehci", "usb-ehci";
|
||||
reg = <0xe1800000 0x1000>;
|
||||
interrupts = <26>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
ohci@e1900000 {
|
||||
compatible = "st,spear600-ohci", "usb-ohci";
|
||||
reg = <0xe1900000 0x1000>;
|
||||
interrupts = <25>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
ohci@e2100000 {
|
||||
compatible = "st,spear600-ohci", "usb-ohci";
|
||||
reg = <0xe2100000 0x1000>;
|
||||
interrupts = <27>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
apb {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "simple-bus";
|
||||
ranges = <0xd0000000 0xd0000000 0x30000000>;
|
||||
|
||||
gpio0: gpio@fc980000 {
|
||||
compatible = "arm,pl061", "arm,primecell";
|
||||
reg = <0xfc980000 0x1000>;
|
||||
interrupts = <11>;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c0: i2c@d0180000 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "snps,designware-i2c";
|
||||
reg = <0xd0180000 0x1000>;
|
||||
interrupts = <21>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
rtc@fc900000 {
|
||||
compatible = "st,spear-rtc";
|
||||
reg = <0xfc900000 0x1000>;
|
||||
interrupts = <10>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
serial@d0000000 {
|
||||
compatible = "arm,pl011", "arm,primecell";
|
||||
reg = <0xd0000000 0x1000>;
|
||||
interrupts = <19>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
wdt@fc880000 {
|
||||
compatible = "arm,sp805", "arm,primecell";
|
||||
reg = <0xfc880000 0x1000>;
|
||||
interrupts = <12>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
@ -24,6 +24,10 @@
|
||||
};
|
||||
|
||||
ahb {
|
||||
dma@fc400000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
gmac: ethernet@e0800000 {
|
||||
phy-mode = "gmii";
|
||||
status = "okay";
|
||||
|
@ -45,6 +45,14 @@
|
||||
#interrupt-cells = <1>;
|
||||
};
|
||||
|
||||
dma@fc400000 {
|
||||
compatible = "arm,pl080", "arm,primecell";
|
||||
reg = <0xfc400000 0x1000>;
|
||||
interrupt-parent = <&vic1>;
|
||||
interrupts = <10>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
gmac: ethernet@e0800000 {
|
||||
compatible = "st,spear600-gmac";
|
||||
reg = <0xe0800000 0x8000>;
|
||||
|
@ -427,19 +427,18 @@ int __init vic_of_init(struct device_node *node, struct device_node *parent)
|
||||
|
||||
/*
|
||||
* Handle each interrupt in a single VIC. Returns non-zero if we've
|
||||
* handled at least one interrupt. This does a single read of the
|
||||
* status register and handles all interrupts in order from LSB first.
|
||||
* handled at least one interrupt. This reads the status register
|
||||
* before handling each interrupt, which is necessary given that
|
||||
* handle_IRQ may briefly re-enable interrupts for soft IRQ handling.
|
||||
*/
|
||||
static int handle_one_vic(struct vic_device *vic, struct pt_regs *regs)
|
||||
{
|
||||
u32 stat, irq;
|
||||
int handled = 0;
|
||||
|
||||
stat = readl_relaxed(vic->base + VIC_IRQ_STATUS);
|
||||
while (stat) {
|
||||
while ((stat = readl_relaxed(vic->base + VIC_IRQ_STATUS))) {
|
||||
irq = ffs(stat) - 1;
|
||||
handle_IRQ(irq_find_mapping(vic->domain, irq), regs);
|
||||
stat &= ~(1 << irq);
|
||||
handled = 1;
|
||||
}
|
||||
|
||||
|
@ -2,33 +2,67 @@ CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_BSD_PROCESS_ACCT=y
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_KALLSYMS_EXTRA_PASS=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_MODVERSIONS=y
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
CONFIG_PLAT_SPEAR=y
|
||||
CONFIG_BOARD_SPEAR300_EVB=y
|
||||
CONFIG_BOARD_SPEAR310_EVB=y
|
||||
CONFIG_BOARD_SPEAR320_EVB=y
|
||||
CONFIG_MACH_SPEAR300=y
|
||||
CONFIG_MACH_SPEAR310=y
|
||||
CONFIG_MACH_SPEAR320=y
|
||||
CONFIG_BINFMT_MISC=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||
CONFIG_MTD=y
|
||||
CONFIG_MTD_NAND=y
|
||||
CONFIG_MTD_NAND_FSMC=y
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_SIZE=16384
|
||||
CONFIG_NETDEVICES=y
|
||||
# CONFIG_NET_VENDOR_BROADCOM is not set
|
||||
# CONFIG_NET_VENDOR_CIRRUS is not set
|
||||
# CONFIG_NET_VENDOR_FARADAY is not set
|
||||
# CONFIG_NET_VENDOR_INTEL is not set
|
||||
# CONFIG_NET_VENDOR_MICREL is not set
|
||||
# CONFIG_NET_VENDOR_NATSEMI is not set
|
||||
# CONFIG_NET_VENDOR_SEEQ is not set
|
||||
# CONFIG_NET_VENDOR_SMSC is not set
|
||||
CONFIG_STMMAC_ETH=y
|
||||
# CONFIG_WLAN is not set
|
||||
CONFIG_INPUT_FF_MEMLESS=y
|
||||
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
|
||||
# CONFIG_INPUT_KEYBOARD is not set
|
||||
# CONFIG_KEYBOARD_ATKBD is not set
|
||||
CONFIG_KEYBOARD_SPEAR=y
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
CONFIG_SERIAL_AMBA_PL011=y
|
||||
CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
CONFIG_RAW_DRIVER=y
|
||||
CONFIG_MAX_RAW_DEVS=8192
|
||||
CONFIG_I2C=y
|
||||
CONFIG_I2C_DESIGNWARE_PLATFORM=y
|
||||
CONFIG_SPI=y
|
||||
CONFIG_SPI_PL022=y
|
||||
CONFIG_GPIO_SYSFS=y
|
||||
CONFIG_GPIO_PL061=y
|
||||
# CONFIG_HWMON is not set
|
||||
CONFIG_WATCHDOG=y
|
||||
CONFIG_ARM_SP805_WATCHDOG=y
|
||||
CONFIG_FB=y
|
||||
CONFIG_FB_ARMCLCD=y
|
||||
# CONFIG_HID_SUPPORT is not set
|
||||
# CONFIG_USB_SUPPORT is not set
|
||||
CONFIG_USB=y
|
||||
# CONFIG_USB_DEVICE_CLASS is not set
|
||||
CONFIG_USB_EHCI_HCD=y
|
||||
CONFIG_USB_OHCI_HCD=y
|
||||
CONFIG_MMC=y
|
||||
CONFIG_MMC_SDHCI=y
|
||||
CONFIG_MMC_SDHCI_SPEAR=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_DMADEVICES=y
|
||||
CONFIG_AMBA_PL08X=y
|
||||
CONFIG_DMATEST=m
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_EXT2_FS_XATTR=y
|
||||
CONFIG_EXT2_FS_SECURITY=y
|
||||
@ -39,8 +73,6 @@ CONFIG_MSDOS_FS=m
|
||||
CONFIG_VFAT_FS=m
|
||||
CONFIG_FAT_DEFAULT_IOCHARSET="ascii"
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
CONFIG_NLS=y
|
||||
CONFIG_NLS_DEFAULT="utf8"
|
||||
CONFIG_NLS_CODEPAGE_437=y
|
||||
CONFIG_NLS_ASCII=m
|
||||
@ -48,6 +80,4 @@ CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_FS=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_DEBUG_SPINLOCK=y
|
||||
CONFIG_DEBUG_SPINLOCK_SLEEP=y
|
||||
CONFIG_DEBUG_INFO=y
|
||||
# CONFIG_CRC32 is not set
|
||||
|
@ -2,29 +2,58 @@ CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_BSD_PROCESS_ACCT=y
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_KALLSYMS_EXTRA_PASS=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_MODVERSIONS=y
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
CONFIG_PLAT_SPEAR=y
|
||||
CONFIG_ARCH_SPEAR6XX=y
|
||||
CONFIG_BOARD_SPEAR600_EVB=y
|
||||
CONFIG_BOARD_SPEAR600_DT=y
|
||||
CONFIG_BINFMT_MISC=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||
CONFIG_MTD=y
|
||||
CONFIG_MTD_NAND=y
|
||||
CONFIG_MTD_NAND_FSMC=y
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_SIZE=16384
|
||||
CONFIG_NETDEVICES=y
|
||||
# CONFIG_NET_VENDOR_BROADCOM is not set
|
||||
# CONFIG_NET_VENDOR_CIRRUS is not set
|
||||
# CONFIG_NET_VENDOR_FARADAY is not set
|
||||
# CONFIG_NET_VENDOR_INTEL is not set
|
||||
# CONFIG_NET_VENDOR_MICREL is not set
|
||||
# CONFIG_NET_VENDOR_NATSEMI is not set
|
||||
# CONFIG_NET_VENDOR_SEEQ is not set
|
||||
# CONFIG_NET_VENDOR_SMSC is not set
|
||||
CONFIG_STMMAC_ETH=y
|
||||
# CONFIG_WLAN is not set
|
||||
CONFIG_INPUT_FF_MEMLESS=y
|
||||
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
|
||||
# CONFIG_INPUT_KEYBOARD is not set
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
CONFIG_SERIAL_AMBA_PL011=y
|
||||
CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
CONFIG_RAW_DRIVER=y
|
||||
CONFIG_MAX_RAW_DEVS=8192
|
||||
CONFIG_I2C=y
|
||||
CONFIG_I2C_DESIGNWARE_PLATFORM=y
|
||||
CONFIG_SPI=y
|
||||
CONFIG_SPI_PL022=y
|
||||
CONFIG_GPIO_SYSFS=y
|
||||
CONFIG_GPIO_PL061=y
|
||||
# CONFIG_HWMON is not set
|
||||
CONFIG_WATCHDOG=y
|
||||
CONFIG_ARM_SP805_WATCHDOG=y
|
||||
# CONFIG_HID_SUPPORT is not set
|
||||
# CONFIG_USB_SUPPORT is not set
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_EHCI_HCD=y
|
||||
CONFIG_USB_OHCI_HCD=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_DMADEVICES=y
|
||||
CONFIG_AMBA_PL08X=y
|
||||
CONFIG_DMATEST=m
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_EXT2_FS_XATTR=y
|
||||
CONFIG_EXT2_FS_SECURITY=y
|
||||
@ -35,8 +64,6 @@ CONFIG_MSDOS_FS=m
|
||||
CONFIG_VFAT_FS=m
|
||||
CONFIG_FAT_DEFAULT_IOCHARSET="ascii"
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
CONFIG_NLS=y
|
||||
CONFIG_NLS_DEFAULT="utf8"
|
||||
CONFIG_NLS_CODEPAGE_437=y
|
||||
CONFIG_NLS_ASCII=m
|
||||
@ -44,6 +71,4 @@ CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_FS=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_DEBUG_SPINLOCK=y
|
||||
CONFIG_DEBUG_SPINLOCK_SLEEP=y
|
||||
CONFIG_DEBUG_INFO=y
|
||||
# CONFIG_CRC32 is not set
|
||||
|
@ -14,7 +14,7 @@
|
||||
#define JUMP_LABEL_NOP "nop"
|
||||
#endif
|
||||
|
||||
static __always_inline bool arch_static_branch(struct jump_label_key *key)
|
||||
static __always_inline bool arch_static_branch(struct static_key *key)
|
||||
{
|
||||
asm goto("1:\n\t"
|
||||
JUMP_LABEL_NOP "\n\t"
|
||||
|
@ -523,7 +523,21 @@ int __init arm_add_memory(phys_addr_t start, unsigned long size)
|
||||
*/
|
||||
size -= start & ~PAGE_MASK;
|
||||
bank->start = PAGE_ALIGN(start);
|
||||
bank->size = size & PAGE_MASK;
|
||||
|
||||
#ifndef CONFIG_LPAE
|
||||
if (bank->start + size < bank->start) {
|
||||
printk(KERN_CRIT "Truncating memory at 0x%08llx to fit in "
|
||||
"32-bit physical address space\n", (long long)start);
|
||||
/*
|
||||
* To ensure bank->start + bank->size is representable in
|
||||
* 32 bits, we use ULONG_MAX as the upper limit rather than 4GB.
|
||||
* This means we lose a page after masking.
|
||||
*/
|
||||
size = ULONG_MAX - bank->start;
|
||||
}
|
||||
#endif
|
||||
|
||||
bank->size = size & PAGE_MASK;
|
||||
|
||||
/*
|
||||
* Check whether this memory region has non-zero size or
|
||||
|
@ -118,10 +118,14 @@ static int twd_cpufreq_transition(struct notifier_block *nb,
|
||||
* The twd clock events must be reprogrammed to account for the new
|
||||
* frequency. The timer is local to a cpu, so cross-call to the
|
||||
* changing cpu.
|
||||
*
|
||||
* Only wait for it to finish, if the cpu is active to avoid
|
||||
* deadlock when cpu1 is spinning on while(!cpu_active(cpu1)) during
|
||||
* booting of that cpu.
|
||||
*/
|
||||
if (state == CPUFREQ_POSTCHANGE || state == CPUFREQ_RESUMECHANGE)
|
||||
smp_call_function_single(freqs->cpu, twd_update_frequency,
|
||||
NULL, 1);
|
||||
NULL, cpu_active(freqs->cpu));
|
||||
|
||||
return NOTIFY_OK;
|
||||
}
|
||||
|
@ -368,6 +368,7 @@ comment "Flattened Device Tree based board for EXYNOS SoCs"
|
||||
|
||||
config MACH_EXYNOS4_DT
|
||||
bool "Samsung Exynos4 Machine using device tree"
|
||||
depends on ARCH_EXYNOS4
|
||||
select CPU_EXYNOS4210
|
||||
select USE_OF
|
||||
select ARM_AMBA
|
||||
@ -380,6 +381,7 @@ config MACH_EXYNOS4_DT
|
||||
|
||||
config MACH_EXYNOS5_DT
|
||||
bool "SAMSUNG EXYNOS5 Machine using device tree"
|
||||
depends on ARCH_EXYNOS5
|
||||
select SOC_EXYNOS5250
|
||||
select USE_OF
|
||||
select ARM_AMBA
|
||||
|
@ -212,6 +212,8 @@
|
||||
#define IRQ_MFC EXYNOS4_IRQ_MFC
|
||||
#define IRQ_SDO EXYNOS4_IRQ_SDO
|
||||
|
||||
#define IRQ_I2S0 EXYNOS4_IRQ_I2S0
|
||||
|
||||
#define IRQ_ADC EXYNOS4_IRQ_ADC0
|
||||
#define IRQ_TC EXYNOS4_IRQ_PEN0
|
||||
|
||||
|
@ -89,6 +89,10 @@
|
||||
#define EXYNOS4_PA_MDMA1 0x12840000
|
||||
#define EXYNOS4_PA_PDMA0 0x12680000
|
||||
#define EXYNOS4_PA_PDMA1 0x12690000
|
||||
#define EXYNOS5_PA_MDMA0 0x10800000
|
||||
#define EXYNOS5_PA_MDMA1 0x11C10000
|
||||
#define EXYNOS5_PA_PDMA0 0x121A0000
|
||||
#define EXYNOS5_PA_PDMA1 0x121B0000
|
||||
|
||||
#define EXYNOS4_PA_SYSMMU_MDMA 0x10A40000
|
||||
#define EXYNOS4_PA_SYSMMU_SSS 0x10A50000
|
||||
|
@ -255,9 +255,15 @@
|
||||
|
||||
/* For EXYNOS5250 */
|
||||
|
||||
#define EXYNOS5_APLL_LOCK EXYNOS_CLKREG(0x00000)
|
||||
#define EXYNOS5_APLL_CON0 EXYNOS_CLKREG(0x00100)
|
||||
#define EXYNOS5_CLKSRC_CPU EXYNOS_CLKREG(0x00200)
|
||||
#define EXYNOS5_CLKMUX_STATCPU EXYNOS_CLKREG(0x00400)
|
||||
#define EXYNOS5_CLKDIV_CPU0 EXYNOS_CLKREG(0x00500)
|
||||
#define EXYNOS5_CLKDIV_CPU1 EXYNOS_CLKREG(0x00504)
|
||||
#define EXYNOS5_CLKDIV_STATCPU0 EXYNOS_CLKREG(0x00600)
|
||||
#define EXYNOS5_CLKDIV_STATCPU1 EXYNOS_CLKREG(0x00604)
|
||||
|
||||
#define EXYNOS5_MPLL_CON0 EXYNOS_CLKREG(0x04100)
|
||||
#define EXYNOS5_CLKSRC_CORE1 EXYNOS_CLKREG(0x04204)
|
||||
|
||||
|
@ -45,7 +45,7 @@ static const struct of_dev_auxdata exynos5250_auxdata_lookup[] __initconst = {
|
||||
"exynos4210-uart.3", NULL),
|
||||
OF_DEV_AUXDATA("arm,pl330", EXYNOS5_PA_PDMA0, "dma-pl330.0", NULL),
|
||||
OF_DEV_AUXDATA("arm,pl330", EXYNOS5_PA_PDMA1, "dma-pl330.1", NULL),
|
||||
OF_DEV_AUXDATA("arm,pl330", EXYNOS5_PA_PDMA1, "dma-pl330.2", NULL),
|
||||
OF_DEV_AUXDATA("arm,pl330", EXYNOS5_PA_MDMA1, "dma-pl330.2", NULL),
|
||||
{},
|
||||
};
|
||||
|
||||
|
@ -307,49 +307,7 @@ static struct i2c_board_info i2c1_devs[] __initdata = {
|
||||
};
|
||||
|
||||
/* TSP */
|
||||
static u8 mxt_init_vals[] = {
|
||||
/* MXT_GEN_COMMAND(6) */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* MXT_GEN_POWER(7) */
|
||||
0x20, 0xff, 0x32,
|
||||
/* MXT_GEN_ACQUIRE(8) */
|
||||
0x0a, 0x00, 0x05, 0x00, 0x00, 0x00, 0x09, 0x23,
|
||||
/* MXT_TOUCH_MULTI(9) */
|
||||
0x00, 0x00, 0x00, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x02, 0x00,
|
||||
0x00, 0x01, 0x01, 0x0e, 0x0a, 0x0a, 0x0a, 0x0a, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00,
|
||||
/* MXT_TOUCH_KEYARRAY(15) */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00,
|
||||
0x00,
|
||||
/* MXT_SPT_GPIOPWM(19) */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* MXT_PROCI_GRIPFACE(20) */
|
||||
0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x28, 0x04,
|
||||
0x0f, 0x0a,
|
||||
/* MXT_PROCG_NOISE(22) */
|
||||
0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x23, 0x00,
|
||||
0x00, 0x05, 0x0f, 0x19, 0x23, 0x2d, 0x03,
|
||||
/* MXT_TOUCH_PROXIMITY(23) */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* MXT_PROCI_ONETOUCH(24) */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* MXT_SPT_SELFTEST(25) */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
/* MXT_PROCI_TWOTOUCH(27) */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* MXT_SPT_CTECONFIG(28) */
|
||||
0x00, 0x00, 0x02, 0x08, 0x10, 0x00,
|
||||
};
|
||||
|
||||
static struct mxt_platform_data mxt_platform_data = {
|
||||
.config = mxt_init_vals,
|
||||
.config_length = ARRAY_SIZE(mxt_init_vals),
|
||||
|
||||
.x_line = 18,
|
||||
.y_line = 11,
|
||||
.x_size = 1024,
|
||||
@ -571,7 +529,7 @@ static struct regulator_init_data __initdata max8997_ldo7_data = {
|
||||
|
||||
static struct regulator_init_data __initdata max8997_ldo8_data = {
|
||||
.constraints = {
|
||||
.name = "VUSB/VDAC_3.3V_C210",
|
||||
.name = "VUSB+VDAC_3.3V_C210",
|
||||
.min_uV = 3300000,
|
||||
.max_uV = 3300000,
|
||||
.valid_ops_mask = REGULATOR_CHANGE_STATUS,
|
||||
@ -1347,6 +1305,7 @@ static struct platform_device *nuri_devices[] __initdata = {
|
||||
|
||||
static void __init nuri_map_io(void)
|
||||
{
|
||||
clk_xusbxti.rate = 24000000;
|
||||
exynos_init_io(NULL, 0);
|
||||
s3c24xx_init_clocks(24000000);
|
||||
s3c24xx_init_uarts(nuri_uartcfgs, ARRAY_SIZE(nuri_uartcfgs));
|
||||
@ -1379,7 +1338,6 @@ static void __init nuri_machine_init(void)
|
||||
nuri_camera_init();
|
||||
|
||||
nuri_ehci_init();
|
||||
clk_xusbxti.rate = 24000000;
|
||||
|
||||
/* Last */
|
||||
platform_add_devices(nuri_devices, ARRAY_SIZE(nuri_devices));
|
||||
|
@ -29,6 +29,7 @@
|
||||
#include <asm/mach-types.h>
|
||||
|
||||
#include <plat/regs-serial.h>
|
||||
#include <plat/clock.h>
|
||||
#include <plat/cpu.h>
|
||||
#include <plat/devs.h>
|
||||
#include <plat/iic.h>
|
||||
@ -1057,6 +1058,7 @@ static struct platform_device *universal_devices[] __initdata = {
|
||||
|
||||
static void __init universal_map_io(void)
|
||||
{
|
||||
clk_xusbxti.rate = 24000000;
|
||||
exynos_init_io(NULL, 0);
|
||||
s3c24xx_init_clocks(24000000);
|
||||
s3c24xx_init_uarts(universal_uartcfgs, ARRAY_SIZE(universal_uartcfgs));
|
||||
|
@ -86,9 +86,6 @@ static void __init halibut_init(void)
|
||||
static void __init halibut_fixup(struct tag *tags, char **cmdline,
|
||||
struct meminfo *mi)
|
||||
{
|
||||
mi->nr_banks=1;
|
||||
mi->bank[0].start = PHYS_OFFSET;
|
||||
mi->bank[0].size = (101*1024*1024);
|
||||
}
|
||||
|
||||
static void __init halibut_map_io(void)
|
||||
|
@ -12,6 +12,7 @@
|
||||
|
||||
#include <asm/io.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/system_info.h>
|
||||
|
||||
#include <mach/msm_fb.h>
|
||||
#include <mach/vreg.h>
|
||||
|
@ -19,6 +19,7 @@
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/clkdev.h>
|
||||
|
||||
#include <asm/system_info.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
|
@ -121,7 +121,7 @@ int msm_proc_comm(unsigned cmd, unsigned *data1, unsigned *data2)
|
||||
* and unknown state. This function should be called early to
|
||||
* wait on the ARM9.
|
||||
*/
|
||||
void __init proc_comm_boot_wait(void)
|
||||
void __devinit proc_comm_boot_wait(void)
|
||||
{
|
||||
void __iomem *base = MSM_SHARED_RAM_BASE;
|
||||
|
||||
|
@ -165,83 +165,3 @@ int omap2_select_table_rate(struct clk *clk, unsigned long rate)
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_CPU_FREQ
|
||||
/*
|
||||
* Walk PRCM rate table and fillout cpufreq freq_table
|
||||
* XXX This should be replaced by an OPP layer in the near future
|
||||
*/
|
||||
static struct cpufreq_frequency_table *freq_table;
|
||||
|
||||
void omap2_clk_init_cpufreq_table(struct cpufreq_frequency_table **table)
|
||||
{
|
||||
const struct prcm_config *prcm;
|
||||
int i = 0;
|
||||
int tbl_sz = 0;
|
||||
|
||||
if (!cpu_is_omap24xx())
|
||||
return;
|
||||
|
||||
for (prcm = rate_table; prcm->mpu_speed; prcm++) {
|
||||
if (!(prcm->flags & cpu_mask))
|
||||
continue;
|
||||
if (prcm->xtal_speed != sclk->rate)
|
||||
continue;
|
||||
|
||||
/* don't put bypass rates in table */
|
||||
if (prcm->dpll_speed == prcm->xtal_speed)
|
||||
continue;
|
||||
|
||||
tbl_sz++;
|
||||
}
|
||||
|
||||
/*
|
||||
* XXX Ensure that we're doing what CPUFreq expects for this error
|
||||
* case and the following one
|
||||
*/
|
||||
if (tbl_sz == 0) {
|
||||
pr_warning("%s: no matching entries in rate_table\n",
|
||||
__func__);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Include the CPUFREQ_TABLE_END terminator entry */
|
||||
tbl_sz++;
|
||||
|
||||
freq_table = kzalloc(sizeof(struct cpufreq_frequency_table) * tbl_sz,
|
||||
GFP_ATOMIC);
|
||||
if (!freq_table) {
|
||||
pr_err("%s: could not kzalloc frequency table\n", __func__);
|
||||
return;
|
||||
}
|
||||
|
||||
for (prcm = rate_table; prcm->mpu_speed; prcm++) {
|
||||
if (!(prcm->flags & cpu_mask))
|
||||
continue;
|
||||
if (prcm->xtal_speed != sclk->rate)
|
||||
continue;
|
||||
|
||||
/* don't put bypass rates in table */
|
||||
if (prcm->dpll_speed == prcm->xtal_speed)
|
||||
continue;
|
||||
|
||||
freq_table[i].index = i;
|
||||
freq_table[i].frequency = prcm->mpu_speed / 1000;
|
||||
i++;
|
||||
}
|
||||
|
||||
freq_table[i].index = i;
|
||||
freq_table[i].frequency = CPUFREQ_TABLE_END;
|
||||
|
||||
*table = &freq_table[0];
|
||||
}
|
||||
|
||||
void omap2_clk_exit_cpufreq_table(struct cpufreq_frequency_table **table)
|
||||
{
|
||||
if (!cpu_is_omap24xx())
|
||||
return;
|
||||
|
||||
kfree(freq_table);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -536,10 +536,5 @@ struct clk_functions omap2_clk_functions = {
|
||||
.clk_set_rate = omap2_clk_set_rate,
|
||||
.clk_set_parent = omap2_clk_set_parent,
|
||||
.clk_disable_unused = omap2_clk_disable_unused,
|
||||
#ifdef CONFIG_CPU_FREQ
|
||||
/* These will be removed when the OPP code is integrated */
|
||||
.clk_init_cpufreq_table = omap2_clk_init_cpufreq_table,
|
||||
.clk_exit_cpufreq_table = omap2_clk_exit_cpufreq_table,
|
||||
#endif
|
||||
};
|
||||
|
||||
|
@ -146,14 +146,6 @@ extern const struct clksel_rate gpt_sys_rates[];
|
||||
extern const struct clksel_rate gfx_l3_rates[];
|
||||
extern const struct clksel_rate dsp_ick_rates[];
|
||||
|
||||
#if defined(CONFIG_ARCH_OMAP2) && defined(CONFIG_CPU_FREQ)
|
||||
extern void omap2_clk_init_cpufreq_table(struct cpufreq_frequency_table **table);
|
||||
extern void omap2_clk_exit_cpufreq_table(struct cpufreq_frequency_table **table);
|
||||
#else
|
||||
#define omap2_clk_init_cpufreq_table 0
|
||||
#define omap2_clk_exit_cpufreq_table 0
|
||||
#endif
|
||||
|
||||
extern const struct clkops clkops_omap2_iclk_dflt_wait;
|
||||
extern const struct clkops clkops_omap2_iclk_dflt;
|
||||
extern const struct clkops clkops_omap2_iclk_idle_only;
|
||||
|
@ -33,8 +33,6 @@
|
||||
#include <mach/irqs.h>
|
||||
#include <mach/dma.h>
|
||||
|
||||
static u64 dma_dmamask = DMA_BIT_MASK(32);
|
||||
|
||||
static u8 pdma0_peri[] = {
|
||||
DMACH_UART0_RX,
|
||||
DMACH_UART0_TX,
|
||||
|
@ -484,8 +484,8 @@ static struct wm8994_pdata wm8994_platform_data = {
|
||||
.gpio_defaults[8] = 0x0100,
|
||||
.gpio_defaults[9] = 0x0100,
|
||||
.gpio_defaults[10] = 0x0100,
|
||||
.ldo[0] = { S5PV210_MP03(6), NULL, &wm8994_ldo1_data }, /* XM0FRNB_2 */
|
||||
.ldo[1] = { 0, NULL, &wm8994_ldo2_data },
|
||||
.ldo[0] = { S5PV210_MP03(6), &wm8994_ldo1_data }, /* XM0FRNB_2 */
|
||||
.ldo[1] = { 0, &wm8994_ldo2_data },
|
||||
};
|
||||
|
||||
/* GPIO I2C PMIC */
|
||||
|
@ -674,8 +674,8 @@ static struct wm8994_pdata wm8994_platform_data = {
|
||||
.gpio_defaults[8] = 0x0100,
|
||||
.gpio_defaults[9] = 0x0100,
|
||||
.gpio_defaults[10] = 0x0100,
|
||||
.ldo[0] = { S5PV210_MP03(6), NULL, &wm8994_ldo1_data }, /* XM0FRNB_2 */
|
||||
.ldo[1] = { 0, NULL, &wm8994_ldo2_data },
|
||||
.ldo[0] = { S5PV210_MP03(6), &wm8994_ldo1_data }, /* XM0FRNB_2 */
|
||||
.ldo[1] = { 0, &wm8994_ldo2_data },
|
||||
};
|
||||
|
||||
/* GPIO I2C PMIC */
|
||||
|
@ -5,39 +5,19 @@
|
||||
if ARCH_SPEAR3XX
|
||||
|
||||
menu "SPEAr3xx Implementations"
|
||||
config BOARD_SPEAR300_EVB
|
||||
bool "SPEAr300 Evaluation Board"
|
||||
select MACH_SPEAR300
|
||||
help
|
||||
Supports ST SPEAr300 Evaluation Board
|
||||
|
||||
config BOARD_SPEAR310_EVB
|
||||
bool "SPEAr310 Evaluation Board"
|
||||
select MACH_SPEAR310
|
||||
help
|
||||
Supports ST SPEAr310 Evaluation Board
|
||||
|
||||
config BOARD_SPEAR320_EVB
|
||||
bool "SPEAr320 Evaluation Board"
|
||||
select MACH_SPEAR320
|
||||
help
|
||||
Supports ST SPEAr320 Evaluation Board
|
||||
|
||||
endmenu
|
||||
|
||||
config MACH_SPEAR300
|
||||
bool "SPEAr300"
|
||||
bool "SPEAr300 Machine support with Device Tree"
|
||||
help
|
||||
Supports ST SPEAr300 Machine
|
||||
Supports ST SPEAr300 machine configured via the device-tree
|
||||
|
||||
config MACH_SPEAR310
|
||||
bool "SPEAr310"
|
||||
bool "SPEAr310 Machine support with Device Tree"
|
||||
help
|
||||
Supports ST SPEAr310 Machine
|
||||
Supports ST SPEAr310 machine configured via the device-tree
|
||||
|
||||
config MACH_SPEAR320
|
||||
bool "SPEAr320"
|
||||
bool "SPEAr320 Machine support with Device Tree"
|
||||
help
|
||||
Supports ST SPEAr320 Machine
|
||||
|
||||
Supports ST SPEAr320 machine configured via the device-tree
|
||||
endmenu
|
||||
endif #ARCH_SPEAR3XX
|
||||
|
@ -3,24 +3,13 @@
|
||||
#
|
||||
|
||||
# common files
|
||||
obj-y += spear3xx.o clock.o
|
||||
obj-$(CONFIG_ARCH_SPEAR3XX) += spear3xx.o clock.o
|
||||
|
||||
# spear300 specific files
|
||||
obj-$(CONFIG_MACH_SPEAR300) += spear300.o
|
||||
|
||||
# spear300 boards files
|
||||
obj-$(CONFIG_BOARD_SPEAR300_EVB) += spear300_evb.o
|
||||
|
||||
|
||||
# spear310 specific files
|
||||
obj-$(CONFIG_MACH_SPEAR310) += spear310.o
|
||||
|
||||
# spear310 boards files
|
||||
obj-$(CONFIG_BOARD_SPEAR310_EVB) += spear310_evb.o
|
||||
|
||||
|
||||
# spear320 specific files
|
||||
obj-$(CONFIG_MACH_SPEAR320) += spear320.o
|
||||
|
||||
# spear320 boards files
|
||||
obj-$(CONFIG_BOARD_SPEAR320_EVB) += spear320_evb.o
|
||||
|
@ -1,3 +1,7 @@
|
||||
zreladdr-y += 0x00008000
|
||||
params_phys-y := 0x00000100
|
||||
initrd_phys-y := 0x00800000
|
||||
|
||||
dtb-$(CONFIG_MACH_SPEAR300) += spear300-evb.dtb
|
||||
dtb-$(CONFIG_MACH_SPEAR310) += spear310-evb.dtb
|
||||
dtb-$(CONFIG_MACH_SPEAR320) += spear320-evb.dtb
|
||||
|
@ -11,12 +11,112 @@
|
||||
* warranty of any kind, whether express or implied.
|
||||
*/
|
||||
|
||||
#include <linux/clkdev.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/of_platform.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <plat/clock.h>
|
||||
#include <mach/misc_regs.h>
|
||||
#include <mach/spear.h>
|
||||
|
||||
#define PLL1_CTR (MISC_BASE + 0x008)
|
||||
#define PLL1_FRQ (MISC_BASE + 0x00C)
|
||||
#define PLL1_MOD (MISC_BASE + 0x010)
|
||||
#define PLL2_CTR (MISC_BASE + 0x014)
|
||||
/* PLL_CTR register masks */
|
||||
#define PLL_ENABLE 2
|
||||
#define PLL_MODE_SHIFT 4
|
||||
#define PLL_MODE_MASK 0x3
|
||||
#define PLL_MODE_NORMAL 0
|
||||
#define PLL_MODE_FRACTION 1
|
||||
#define PLL_MODE_DITH_DSB 2
|
||||
#define PLL_MODE_DITH_SSB 3
|
||||
|
||||
#define PLL2_FRQ (MISC_BASE + 0x018)
|
||||
/* PLL FRQ register masks */
|
||||
#define PLL_DIV_N_SHIFT 0
|
||||
#define PLL_DIV_N_MASK 0xFF
|
||||
#define PLL_DIV_P_SHIFT 8
|
||||
#define PLL_DIV_P_MASK 0x7
|
||||
#define PLL_NORM_FDBK_M_SHIFT 24
|
||||
#define PLL_NORM_FDBK_M_MASK 0xFF
|
||||
#define PLL_DITH_FDBK_M_SHIFT 16
|
||||
#define PLL_DITH_FDBK_M_MASK 0xFFFF
|
||||
|
||||
#define PLL2_MOD (MISC_BASE + 0x01C)
|
||||
#define PLL_CLK_CFG (MISC_BASE + 0x020)
|
||||
#define CORE_CLK_CFG (MISC_BASE + 0x024)
|
||||
/* CORE CLK CFG register masks */
|
||||
#define PLL_HCLK_RATIO_SHIFT 10
|
||||
#define PLL_HCLK_RATIO_MASK 0x3
|
||||
#define HCLK_PCLK_RATIO_SHIFT 8
|
||||
#define HCLK_PCLK_RATIO_MASK 0x3
|
||||
|
||||
#define PERIP_CLK_CFG (MISC_BASE + 0x028)
|
||||
/* PERIP_CLK_CFG register masks */
|
||||
#define UART_CLK_SHIFT 4
|
||||
#define UART_CLK_MASK 0x1
|
||||
#define FIRDA_CLK_SHIFT 5
|
||||
#define FIRDA_CLK_MASK 0x3
|
||||
#define GPT0_CLK_SHIFT 8
|
||||
#define GPT1_CLK_SHIFT 11
|
||||
#define GPT2_CLK_SHIFT 12
|
||||
#define GPT_CLK_MASK 0x1
|
||||
#define AUX_CLK_PLL3_VAL 0
|
||||
#define AUX_CLK_PLL1_VAL 1
|
||||
|
||||
#define PERIP1_CLK_ENB (MISC_BASE + 0x02C)
|
||||
/* PERIP1_CLK_ENB register masks */
|
||||
#define UART_CLK_ENB 3
|
||||
#define SSP_CLK_ENB 5
|
||||
#define I2C_CLK_ENB 7
|
||||
#define JPEG_CLK_ENB 8
|
||||
#define FIRDA_CLK_ENB 10
|
||||
#define GPT1_CLK_ENB 11
|
||||
#define GPT2_CLK_ENB 12
|
||||
#define ADC_CLK_ENB 15
|
||||
#define RTC_CLK_ENB 17
|
||||
#define GPIO_CLK_ENB 18
|
||||
#define DMA_CLK_ENB 19
|
||||
#define SMI_CLK_ENB 21
|
||||
#define GMAC_CLK_ENB 23
|
||||
#define USBD_CLK_ENB 24
|
||||
#define USBH_CLK_ENB 25
|
||||
#define C3_CLK_ENB 31
|
||||
|
||||
#define RAS_CLK_ENB (MISC_BASE + 0x034)
|
||||
|
||||
#define PRSC1_CLK_CFG (MISC_BASE + 0x044)
|
||||
#define PRSC2_CLK_CFG (MISC_BASE + 0x048)
|
||||
#define PRSC3_CLK_CFG (MISC_BASE + 0x04C)
|
||||
/* gpt synthesizer register masks */
|
||||
#define GPT_MSCALE_SHIFT 0
|
||||
#define GPT_MSCALE_MASK 0xFFF
|
||||
#define GPT_NSCALE_SHIFT 12
|
||||
#define GPT_NSCALE_MASK 0xF
|
||||
|
||||
#define AMEM_CLK_CFG (MISC_BASE + 0x050)
|
||||
#define EXPI_CLK_CFG (MISC_BASE + 0x054)
|
||||
#define CLCD_CLK_SYNT (MISC_BASE + 0x05C)
|
||||
#define FIRDA_CLK_SYNT (MISC_BASE + 0x060)
|
||||
#define UART_CLK_SYNT (MISC_BASE + 0x064)
|
||||
#define GMAC_CLK_SYNT (MISC_BASE + 0x068)
|
||||
#define RAS1_CLK_SYNT (MISC_BASE + 0x06C)
|
||||
#define RAS2_CLK_SYNT (MISC_BASE + 0x070)
|
||||
#define RAS3_CLK_SYNT (MISC_BASE + 0x074)
|
||||
#define RAS4_CLK_SYNT (MISC_BASE + 0x078)
|
||||
/* aux clk synthesiser register masks for irda to ras4 */
|
||||
#define AUX_SYNT_ENB 31
|
||||
#define AUX_EQ_SEL_SHIFT 30
|
||||
#define AUX_EQ_SEL_MASK 1
|
||||
#define AUX_EQ1_SEL 0
|
||||
#define AUX_EQ2_SEL 1
|
||||
#define AUX_XSCALE_SHIFT 16
|
||||
#define AUX_XSCALE_MASK 0xFFF
|
||||
#define AUX_YSCALE_SHIFT 0
|
||||
#define AUX_YSCALE_MASK 0xFFF
|
||||
|
||||
/* root clks */
|
||||
/* 32 KHz oscillator clock */
|
||||
@ -411,6 +511,21 @@ static struct clk usbd_clk = {
|
||||
.recalc = &follow_parent,
|
||||
};
|
||||
|
||||
/* clock derived from usbh clk */
|
||||
/* usbh0 clock */
|
||||
static struct clk usbh0_clk = {
|
||||
.flags = ALWAYS_ENABLED,
|
||||
.pclk = &usbh_clk,
|
||||
.recalc = &follow_parent,
|
||||
};
|
||||
|
||||
/* usbh1 clock */
|
||||
static struct clk usbh1_clk = {
|
||||
.flags = ALWAYS_ENABLED,
|
||||
.pclk = &usbh_clk,
|
||||
.recalc = &follow_parent,
|
||||
};
|
||||
|
||||
/* clock derived from ahb clk */
|
||||
/* apb masks structure */
|
||||
static struct bus_clk_masks apb_masks = {
|
||||
@ -652,109 +767,126 @@ static struct clk pwm_clk = {
|
||||
|
||||
/* array of all spear 3xx clock lookups */
|
||||
static struct clk_lookup spear_clk_lookups[] = {
|
||||
{ .con_id = "apb_pclk", .clk = &dummy_apb_pclk},
|
||||
CLKDEV_INIT(NULL, "apb_pclk", &dummy_apb_pclk),
|
||||
/* root clks */
|
||||
{ .con_id = "osc_32k_clk", .clk = &osc_32k_clk},
|
||||
{ .con_id = "osc_24m_clk", .clk = &osc_24m_clk},
|
||||
CLKDEV_INIT(NULL, "osc_32k_clk", &osc_32k_clk),
|
||||
CLKDEV_INIT(NULL, "osc_24m_clk", &osc_24m_clk),
|
||||
/* clock derived from 32 KHz osc clk */
|
||||
{ .dev_id = "rtc-spear", .clk = &rtc_clk},
|
||||
CLKDEV_INIT("fc900000.rtc", NULL, &rtc_clk),
|
||||
/* clock derived from 24 MHz osc clk */
|
||||
{ .con_id = "pll1_clk", .clk = &pll1_clk},
|
||||
{ .con_id = "pll3_48m_clk", .clk = &pll3_48m_clk},
|
||||
{ .dev_id = "wdt", .clk = &wdt_clk},
|
||||
CLKDEV_INIT(NULL, "pll1_clk", &pll1_clk),
|
||||
CLKDEV_INIT(NULL, "pll3_48m_clk", &pll3_48m_clk),
|
||||
CLKDEV_INIT("fc880000.wdt", NULL, &wdt_clk),
|
||||
/* clock derived from pll1 clk */
|
||||
{ .con_id = "cpu_clk", .clk = &cpu_clk},
|
||||
{ .con_id = "ahb_clk", .clk = &ahb_clk},
|
||||
{ .con_id = "uart_synth_clk", .clk = &uart_synth_clk},
|
||||
{ .con_id = "firda_synth_clk", .clk = &firda_synth_clk},
|
||||
{ .con_id = "gpt0_synth_clk", .clk = &gpt0_synth_clk},
|
||||
{ .con_id = "gpt1_synth_clk", .clk = &gpt1_synth_clk},
|
||||
{ .con_id = "gpt2_synth_clk", .clk = &gpt2_synth_clk},
|
||||
{ .dev_id = "uart", .clk = &uart_clk},
|
||||
{ .dev_id = "firda", .clk = &firda_clk},
|
||||
{ .dev_id = "gpt0", .clk = &gpt0_clk},
|
||||
{ .dev_id = "gpt1", .clk = &gpt1_clk},
|
||||
{ .dev_id = "gpt2", .clk = &gpt2_clk},
|
||||
CLKDEV_INIT(NULL, "cpu_clk", &cpu_clk),
|
||||
CLKDEV_INIT(NULL, "ahb_clk", &ahb_clk),
|
||||
CLKDEV_INIT(NULL, "uart_synth_clk", &uart_synth_clk),
|
||||
CLKDEV_INIT(NULL, "firda_synth_clk", &firda_synth_clk),
|
||||
CLKDEV_INIT(NULL, "gpt0_synth_clk", &gpt0_synth_clk),
|
||||
CLKDEV_INIT(NULL, "gpt1_synth_clk", &gpt1_synth_clk),
|
||||
CLKDEV_INIT(NULL, "gpt2_synth_clk", &gpt2_synth_clk),
|
||||
CLKDEV_INIT("d0000000.serial", NULL, &uart_clk),
|
||||
CLKDEV_INIT("firda", NULL, &firda_clk),
|
||||
CLKDEV_INIT("gpt0", NULL, &gpt0_clk),
|
||||
CLKDEV_INIT("gpt1", NULL, &gpt1_clk),
|
||||
CLKDEV_INIT("gpt2", NULL, &gpt2_clk),
|
||||
/* clock derived from pll3 clk */
|
||||
{ .dev_id = "designware_udc", .clk = &usbd_clk},
|
||||
{ .con_id = "usbh_clk", .clk = &usbh_clk},
|
||||
CLKDEV_INIT("designware_udc", NULL, &usbd_clk),
|
||||
CLKDEV_INIT(NULL, "usbh_clk", &usbh_clk),
|
||||
/* clock derived from usbh clk */
|
||||
CLKDEV_INIT(NULL, "usbh.0_clk", &usbh0_clk),
|
||||
CLKDEV_INIT(NULL, "usbh.1_clk", &usbh1_clk),
|
||||
/* clock derived from ahb clk */
|
||||
{ .con_id = "apb_clk", .clk = &apb_clk},
|
||||
{ .dev_id = "i2c_designware.0", .clk = &i2c_clk},
|
||||
{ .dev_id = "dma", .clk = &dma_clk},
|
||||
{ .dev_id = "jpeg", .clk = &jpeg_clk},
|
||||
{ .dev_id = "gmac", .clk = &gmac_clk},
|
||||
{ .dev_id = "smi", .clk = &smi_clk},
|
||||
{ .dev_id = "c3", .clk = &c3_clk},
|
||||
CLKDEV_INIT(NULL, "apb_clk", &apb_clk),
|
||||
CLKDEV_INIT("d0180000.i2c", NULL, &i2c_clk),
|
||||
CLKDEV_INIT("fc400000.dma", NULL, &dma_clk),
|
||||
CLKDEV_INIT("jpeg", NULL, &jpeg_clk),
|
||||
CLKDEV_INIT("e0800000.eth", NULL, &gmac_clk),
|
||||
CLKDEV_INIT("fc000000.flash", NULL, &smi_clk),
|
||||
CLKDEV_INIT("c3", NULL, &c3_clk),
|
||||
/* clock derived from apb clk */
|
||||
{ .dev_id = "adc", .clk = &adc_clk},
|
||||
{ .dev_id = "ssp-pl022.0", .clk = &ssp0_clk},
|
||||
{ .dev_id = "gpio", .clk = &gpio_clk},
|
||||
CLKDEV_INIT("adc", NULL, &adc_clk),
|
||||
CLKDEV_INIT("d0100000.spi", NULL, &ssp0_clk),
|
||||
CLKDEV_INIT("fc980000.gpio", NULL, &gpio_clk),
|
||||
};
|
||||
|
||||
/* array of all spear 300 clock lookups */
|
||||
#ifdef CONFIG_MACH_SPEAR300
|
||||
static struct clk_lookup spear300_clk_lookups[] = {
|
||||
{ .dev_id = "clcd", .clk = &clcd_clk},
|
||||
{ .con_id = "fsmc", .clk = &fsmc_clk},
|
||||
{ .dev_id = "gpio1", .clk = &gpio1_clk},
|
||||
{ .dev_id = "keyboard", .clk = &kbd_clk},
|
||||
{ .dev_id = "sdhci", .clk = &sdhci_clk},
|
||||
CLKDEV_INIT("60000000.clcd", NULL, &clcd_clk),
|
||||
CLKDEV_INIT("94000000.flash", NULL, &fsmc_clk),
|
||||
CLKDEV_INIT("a9000000.gpio", NULL, &gpio1_clk),
|
||||
CLKDEV_INIT("a0000000.kbd", NULL, &kbd_clk),
|
||||
CLKDEV_INIT("70000000.sdhci", NULL, &sdhci_clk),
|
||||
};
|
||||
|
||||
void __init spear300_clk_init(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(spear_clk_lookups); i++)
|
||||
clk_register(&spear_clk_lookups[i]);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(spear300_clk_lookups); i++)
|
||||
clk_register(&spear300_clk_lookups[i]);
|
||||
|
||||
clk_init();
|
||||
}
|
||||
#endif
|
||||
|
||||
/* array of all spear 310 clock lookups */
|
||||
#ifdef CONFIG_MACH_SPEAR310
|
||||
static struct clk_lookup spear310_clk_lookups[] = {
|
||||
{ .con_id = "fsmc", .clk = &fsmc_clk},
|
||||
{ .con_id = "emi", .clk = &emi_clk},
|
||||
{ .dev_id = "uart1", .clk = &uart1_clk},
|
||||
{ .dev_id = "uart2", .clk = &uart2_clk},
|
||||
{ .dev_id = "uart3", .clk = &uart3_clk},
|
||||
{ .dev_id = "uart4", .clk = &uart4_clk},
|
||||
{ .dev_id = "uart5", .clk = &uart5_clk},
|
||||
CLKDEV_INIT("44000000.flash", NULL, &fsmc_clk),
|
||||
CLKDEV_INIT(NULL, "emi", &emi_clk),
|
||||
CLKDEV_INIT("b2000000.serial", NULL, &uart1_clk),
|
||||
CLKDEV_INIT("b2080000.serial", NULL, &uart2_clk),
|
||||
CLKDEV_INIT("b2100000.serial", NULL, &uart3_clk),
|
||||
CLKDEV_INIT("b2180000.serial", NULL, &uart4_clk),
|
||||
CLKDEV_INIT("b2200000.serial", NULL, &uart5_clk),
|
||||
};
|
||||
|
||||
void __init spear310_clk_init(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(spear_clk_lookups); i++)
|
||||
clk_register(&spear_clk_lookups[i]);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(spear310_clk_lookups); i++)
|
||||
clk_register(&spear310_clk_lookups[i]);
|
||||
|
||||
clk_init();
|
||||
}
|
||||
#endif
|
||||
|
||||
/* array of all spear 320 clock lookups */
|
||||
#ifdef CONFIG_MACH_SPEAR320
|
||||
static struct clk_lookup spear320_clk_lookups[] = {
|
||||
{ .dev_id = "clcd", .clk = &clcd_clk},
|
||||
{ .con_id = "fsmc", .clk = &fsmc_clk},
|
||||
{ .dev_id = "i2c_designware.1", .clk = &i2c1_clk},
|
||||
{ .con_id = "emi", .clk = &emi_clk},
|
||||
{ .dev_id = "pwm", .clk = &pwm_clk},
|
||||
{ .dev_id = "sdhci", .clk = &sdhci_clk},
|
||||
{ .dev_id = "c_can_platform.0", .clk = &can0_clk},
|
||||
{ .dev_id = "c_can_platform.1", .clk = &can1_clk},
|
||||
{ .dev_id = "ssp-pl022.1", .clk = &ssp1_clk},
|
||||
{ .dev_id = "ssp-pl022.2", .clk = &ssp2_clk},
|
||||
{ .dev_id = "uart1", .clk = &uart1_clk},
|
||||
{ .dev_id = "uart2", .clk = &uart2_clk},
|
||||
CLKDEV_INIT("90000000.clcd", NULL, &clcd_clk),
|
||||
CLKDEV_INIT("4c000000.flash", NULL, &fsmc_clk),
|
||||
CLKDEV_INIT("a7000000.i2c", NULL, &i2c1_clk),
|
||||
CLKDEV_INIT(NULL, "emi", &emi_clk),
|
||||
CLKDEV_INIT("pwm", NULL, &pwm_clk),
|
||||
CLKDEV_INIT("70000000.sdhci", NULL, &sdhci_clk),
|
||||
CLKDEV_INIT("c_can_platform.0", NULL, &can0_clk),
|
||||
CLKDEV_INIT("c_can_platform.1", NULL, &can1_clk),
|
||||
CLKDEV_INIT("a5000000.spi", NULL, &ssp1_clk),
|
||||
CLKDEV_INIT("a6000000.spi", NULL, &ssp2_clk),
|
||||
CLKDEV_INIT("a3000000.serial", NULL, &uart1_clk),
|
||||
CLKDEV_INIT("a4000000.serial", NULL, &uart2_clk),
|
||||
};
|
||||
#endif
|
||||
|
||||
void __init spear3xx_clk_init(void)
|
||||
void __init spear320_clk_init(void)
|
||||
{
|
||||
int i, cnt;
|
||||
struct clk_lookup *lookups;
|
||||
|
||||
if (machine_is_spear300()) {
|
||||
cnt = ARRAY_SIZE(spear300_clk_lookups);
|
||||
lookups = spear300_clk_lookups;
|
||||
} else if (machine_is_spear310()) {
|
||||
cnt = ARRAY_SIZE(spear310_clk_lookups);
|
||||
lookups = spear310_clk_lookups;
|
||||
} else {
|
||||
cnt = ARRAY_SIZE(spear320_clk_lookups);
|
||||
lookups = spear320_clk_lookups;
|
||||
}
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(spear_clk_lookups); i++)
|
||||
clk_register(&spear_clk_lookups[i]);
|
||||
|
||||
for (i = 0; i < cnt; i++)
|
||||
clk_register(&lookups[i]);
|
||||
for (i = 0; i < ARRAY_SIZE(spear320_clk_lookups); i++)
|
||||
clk_register(&spear320_clk_lookups[i]);
|
||||
|
||||
clk_init();
|
||||
}
|
||||
#endif
|
||||
|
@ -14,6 +14,7 @@
|
||||
#ifndef __MACH_GENERIC_H
|
||||
#define __MACH_GENERIC_H
|
||||
|
||||
#include <linux/amba/pl08x.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/amba/bus.h>
|
||||
@ -21,26 +22,15 @@
|
||||
#include <asm/mach/map.h>
|
||||
#include <plat/padmux.h>
|
||||
|
||||
/* spear3xx declarations */
|
||||
/*
|
||||
* Each GPT has 2 timer channels
|
||||
* Following GPT channels will be used as clock source and clockevent
|
||||
*/
|
||||
#define SPEAR_GPT0_BASE SPEAR3XX_ML1_TMR_BASE
|
||||
#define SPEAR_GPT0_CHAN0_IRQ SPEAR3XX_IRQ_CPU_GPT1_1
|
||||
#define SPEAR_GPT0_CHAN1_IRQ SPEAR3XX_IRQ_CPU_GPT1_2
|
||||
|
||||
/* Add spear3xx family device structure declarations here */
|
||||
extern struct amba_device spear3xx_gpio_device;
|
||||
extern struct amba_device spear3xx_uart_device;
|
||||
extern struct sys_timer spear3xx_timer;
|
||||
extern struct pl022_ssp_controller pl022_plat_data;
|
||||
extern struct pl08x_platform_data pl080_plat_data;
|
||||
|
||||
/* Add spear3xx family function declarations here */
|
||||
void __init spear3xx_clk_init(void);
|
||||
void __init spear_setup_timer(void);
|
||||
void __init spear_setup_timer(resource_size_t base, int irq);
|
||||
void __init spear3xx_map_io(void);
|
||||
void __init spear3xx_init_irq(void);
|
||||
void __init spear3xx_init(void);
|
||||
void __init spear3xx_dt_init_irq(void);
|
||||
|
||||
void spear_restart(char, const char *);
|
||||
|
||||
@ -99,9 +89,6 @@ extern struct pmx_dev spear3xx_pmx_plgpio_45_46_49_50;
|
||||
|
||||
/* spear300 declarations */
|
||||
#ifdef CONFIG_MACH_SPEAR300
|
||||
/* Add spear300 machine device structure declarations here */
|
||||
extern struct amba_device spear300_gpio1_device;
|
||||
|
||||
/* pad mux modes */
|
||||
extern struct pmx_mode spear300_nand_mode;
|
||||
extern struct pmx_mode spear300_nor_mode;
|
||||
@ -133,16 +120,13 @@ extern struct pmx_dev spear300_pmx_telecom_sdhci_4bit;
|
||||
extern struct pmx_dev spear300_pmx_telecom_sdhci_8bit;
|
||||
extern struct pmx_dev spear300_pmx_gpio1;
|
||||
|
||||
/* Add spear300 machine function declarations here */
|
||||
void __init spear300_init(struct pmx_mode *pmx_mode, struct pmx_dev **pmx_devs,
|
||||
u8 pmx_dev_count);
|
||||
/* Add spear300 machine declarations here */
|
||||
void __init spear300_clk_init(void);
|
||||
|
||||
#endif /* CONFIG_MACH_SPEAR300 */
|
||||
|
||||
/* spear310 declarations */
|
||||
#ifdef CONFIG_MACH_SPEAR310
|
||||
/* Add spear310 machine device structure declarations here */
|
||||
|
||||
/* pad mux devices */
|
||||
extern struct pmx_dev spear310_pmx_emi_cs_0_1_4_5;
|
||||
extern struct pmx_dev spear310_pmx_emi_cs_2_3;
|
||||
@ -153,16 +137,13 @@ extern struct pmx_dev spear310_pmx_fsmc;
|
||||
extern struct pmx_dev spear310_pmx_rs485_0_1;
|
||||
extern struct pmx_dev spear310_pmx_tdm0;
|
||||
|
||||
/* Add spear310 machine function declarations here */
|
||||
void __init spear310_init(struct pmx_mode *pmx_mode, struct pmx_dev **pmx_devs,
|
||||
u8 pmx_dev_count);
|
||||
/* Add spear310 machine declarations here */
|
||||
void __init spear310_clk_init(void);
|
||||
|
||||
#endif /* CONFIG_MACH_SPEAR310 */
|
||||
|
||||
/* spear320 declarations */
|
||||
#ifdef CONFIG_MACH_SPEAR320
|
||||
/* Add spear320 machine device structure declarations here */
|
||||
|
||||
/* pad mux modes */
|
||||
extern struct pmx_mode spear320_auto_net_smii_mode;
|
||||
extern struct pmx_mode spear320_auto_net_mii_mode;
|
||||
@ -193,9 +174,8 @@ extern struct pmx_dev spear320_pmx_smii0;
|
||||
extern struct pmx_dev spear320_pmx_smii1;
|
||||
extern struct pmx_dev spear320_pmx_i2c1;
|
||||
|
||||
/* Add spear320 machine function declarations here */
|
||||
void __init spear320_init(struct pmx_mode *pmx_mode, struct pmx_dev **pmx_devs,
|
||||
u8 pmx_dev_count);
|
||||
/* Add spear320 machine declarations here */
|
||||
void __init spear320_clk_init(void);
|
||||
|
||||
#endif /* CONFIG_MACH_SPEAR320 */
|
||||
|
||||
|
@ -1,23 +1 @@
|
||||
/*
|
||||
* arch/arm/mach-spear3xx/include/mach/hardware.h
|
||||
*
|
||||
* Hardware definitions for SPEAr3xx machine family
|
||||
*
|
||||
* Copyright (C) 2009 ST Microelectronics
|
||||
* Viresh Kumar<viresh.kumar@st.com>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef __MACH_HARDWARE_H
|
||||
#define __MACH_HARDWARE_H
|
||||
|
||||
#include <plat/hardware.h>
|
||||
#include <mach/spear.h>
|
||||
|
||||
/* Vitual to physical translation of statically mapped space */
|
||||
#define IO_ADDRESS(x) (x | 0xF0000000)
|
||||
|
||||
#endif /* __MACH_HARDWARE_H */
|
||||
/* empty */
|
||||
|
@ -14,141 +14,15 @@
|
||||
#ifndef __MACH_IRQS_H
|
||||
#define __MACH_IRQS_H
|
||||
|
||||
/* SPEAr3xx IRQ definitions */
|
||||
#define SPEAR3XX_IRQ_HW_ACCEL_MOD_0 0
|
||||
/* FIXME: probe all these from DT */
|
||||
#define SPEAR3XX_IRQ_INTRCOMM_RAS_ARM 1
|
||||
#define SPEAR3XX_IRQ_CPU_GPT1_1 2
|
||||
#define SPEAR3XX_IRQ_CPU_GPT1_2 3
|
||||
#define SPEAR3XX_IRQ_BASIC_GPT1_1 4
|
||||
#define SPEAR3XX_IRQ_BASIC_GPT1_2 5
|
||||
#define SPEAR3XX_IRQ_BASIC_GPT2_1 6
|
||||
#define SPEAR3XX_IRQ_BASIC_GPT2_2 7
|
||||
#define SPEAR3XX_IRQ_BASIC_DMA 8
|
||||
#define SPEAR3XX_IRQ_BASIC_SMI 9
|
||||
#define SPEAR3XX_IRQ_BASIC_RTC 10
|
||||
#define SPEAR3XX_IRQ_BASIC_GPIO 11
|
||||
#define SPEAR3XX_IRQ_BASIC_WDT 12
|
||||
#define SPEAR3XX_IRQ_DDR_CONTROLLER 13
|
||||
#define SPEAR3XX_IRQ_SYS_ERROR 14
|
||||
#define SPEAR3XX_IRQ_WAKEUP_RCV 15
|
||||
#define SPEAR3XX_IRQ_JPEG 16
|
||||
#define SPEAR3XX_IRQ_IRDA 17
|
||||
#define SPEAR3XX_IRQ_ADC 18
|
||||
#define SPEAR3XX_IRQ_UART 19
|
||||
#define SPEAR3XX_IRQ_SSP 20
|
||||
#define SPEAR3XX_IRQ_I2C 21
|
||||
#define SPEAR3XX_IRQ_MAC_1 22
|
||||
#define SPEAR3XX_IRQ_MAC_2 23
|
||||
#define SPEAR3XX_IRQ_USB_DEV 24
|
||||
#define SPEAR3XX_IRQ_USB_H_OHCI_0 25
|
||||
#define SPEAR3XX_IRQ_USB_H_EHCI_0 26
|
||||
#define SPEAR3XX_IRQ_USB_H_EHCI_1 SPEAR3XX_IRQ_USB_H_EHCI_0
|
||||
#define SPEAR3XX_IRQ_USB_H_OHCI_1 27
|
||||
#define SPEAR3XX_IRQ_GEN_RAS_1 28
|
||||
#define SPEAR3XX_IRQ_GEN_RAS_2 29
|
||||
#define SPEAR3XX_IRQ_GEN_RAS_3 30
|
||||
#define SPEAR3XX_IRQ_HW_ACCEL_MOD_1 31
|
||||
#define SPEAR3XX_IRQ_VIC_END 32
|
||||
|
||||
#define SPEAR3XX_VIRQ_START SPEAR3XX_IRQ_VIC_END
|
||||
|
||||
/* SPEAr300 Virtual irq definitions */
|
||||
/* IRQs sharing IRQ_GEN_RAS_1 */
|
||||
#define SPEAR300_VIRQ_IT_PERS_S (SPEAR3XX_VIRQ_START + 0)
|
||||
#define SPEAR300_VIRQ_IT_CHANGE_S (SPEAR3XX_VIRQ_START + 1)
|
||||
#define SPEAR300_VIRQ_I2S (SPEAR3XX_VIRQ_START + 2)
|
||||
#define SPEAR300_VIRQ_TDM (SPEAR3XX_VIRQ_START + 3)
|
||||
#define SPEAR300_VIRQ_CAMERA_L (SPEAR3XX_VIRQ_START + 4)
|
||||
#define SPEAR300_VIRQ_CAMERA_F (SPEAR3XX_VIRQ_START + 5)
|
||||
#define SPEAR300_VIRQ_CAMERA_V (SPEAR3XX_VIRQ_START + 6)
|
||||
#define SPEAR300_VIRQ_KEYBOARD (SPEAR3XX_VIRQ_START + 7)
|
||||
#define SPEAR300_VIRQ_GPIO1 (SPEAR3XX_VIRQ_START + 8)
|
||||
|
||||
/* IRQs sharing IRQ_GEN_RAS_3 */
|
||||
#define SPEAR300_IRQ_CLCD SPEAR3XX_IRQ_GEN_RAS_3
|
||||
|
||||
/* IRQs sharing IRQ_INTRCOMM_RAS_ARM */
|
||||
#define SPEAR300_IRQ_SDHCI SPEAR3XX_IRQ_INTRCOMM_RAS_ARM
|
||||
|
||||
/* SPEAr310 Virtual irq definitions */
|
||||
/* IRQs sharing IRQ_GEN_RAS_1 */
|
||||
#define SPEAR310_VIRQ_SMII0 (SPEAR3XX_VIRQ_START + 0)
|
||||
#define SPEAR310_VIRQ_SMII1 (SPEAR3XX_VIRQ_START + 1)
|
||||
#define SPEAR310_VIRQ_SMII2 (SPEAR3XX_VIRQ_START + 2)
|
||||
#define SPEAR310_VIRQ_SMII3 (SPEAR3XX_VIRQ_START + 3)
|
||||
#define SPEAR310_VIRQ_WAKEUP_SMII0 (SPEAR3XX_VIRQ_START + 4)
|
||||
#define SPEAR310_VIRQ_WAKEUP_SMII1 (SPEAR3XX_VIRQ_START + 5)
|
||||
#define SPEAR310_VIRQ_WAKEUP_SMII2 (SPEAR3XX_VIRQ_START + 6)
|
||||
#define SPEAR310_VIRQ_WAKEUP_SMII3 (SPEAR3XX_VIRQ_START + 7)
|
||||
|
||||
/* IRQs sharing IRQ_GEN_RAS_2 */
|
||||
#define SPEAR310_VIRQ_UART1 (SPEAR3XX_VIRQ_START + 8)
|
||||
#define SPEAR310_VIRQ_UART2 (SPEAR3XX_VIRQ_START + 9)
|
||||
#define SPEAR310_VIRQ_UART3 (SPEAR3XX_VIRQ_START + 10)
|
||||
#define SPEAR310_VIRQ_UART4 (SPEAR3XX_VIRQ_START + 11)
|
||||
#define SPEAR310_VIRQ_UART5 (SPEAR3XX_VIRQ_START + 12)
|
||||
|
||||
/* IRQs sharing IRQ_GEN_RAS_3 */
|
||||
#define SPEAR310_VIRQ_EMI (SPEAR3XX_VIRQ_START + 13)
|
||||
#define SPEAR310_VIRQ_PLGPIO (SPEAR3XX_VIRQ_START + 14)
|
||||
|
||||
/* IRQs sharing IRQ_INTRCOMM_RAS_ARM */
|
||||
#define SPEAR310_VIRQ_TDM_HDLC (SPEAR3XX_VIRQ_START + 15)
|
||||
#define SPEAR310_VIRQ_RS485_0 (SPEAR3XX_VIRQ_START + 16)
|
||||
#define SPEAR310_VIRQ_RS485_1 (SPEAR3XX_VIRQ_START + 17)
|
||||
|
||||
/* SPEAr320 Virtual irq definitions */
|
||||
/* IRQs sharing IRQ_GEN_RAS_1 */
|
||||
#define SPEAR320_VIRQ_EMI (SPEAR3XX_VIRQ_START + 0)
|
||||
#define SPEAR320_VIRQ_CLCD (SPEAR3XX_VIRQ_START + 1)
|
||||
#define SPEAR320_VIRQ_SPP (SPEAR3XX_VIRQ_START + 2)
|
||||
|
||||
/* IRQs sharing IRQ_GEN_RAS_2 */
|
||||
#define SPEAR320_IRQ_SDHCI SPEAR3XX_IRQ_GEN_RAS_2
|
||||
|
||||
/* IRQs sharing IRQ_GEN_RAS_3 */
|
||||
#define SPEAR320_VIRQ_PLGPIO (SPEAR3XX_VIRQ_START + 3)
|
||||
#define SPEAR320_VIRQ_I2S_PLAY (SPEAR3XX_VIRQ_START + 4)
|
||||
#define SPEAR320_VIRQ_I2S_REC (SPEAR3XX_VIRQ_START + 5)
|
||||
|
||||
/* IRQs sharing IRQ_INTRCOMM_RAS_ARM */
|
||||
#define SPEAR320_VIRQ_CANU (SPEAR3XX_VIRQ_START + 6)
|
||||
#define SPEAR320_VIRQ_CANL (SPEAR3XX_VIRQ_START + 7)
|
||||
#define SPEAR320_VIRQ_UART1 (SPEAR3XX_VIRQ_START + 8)
|
||||
#define SPEAR320_VIRQ_UART2 (SPEAR3XX_VIRQ_START + 9)
|
||||
#define SPEAR320_VIRQ_SSP1 (SPEAR3XX_VIRQ_START + 10)
|
||||
#define SPEAR320_VIRQ_SSP2 (SPEAR3XX_VIRQ_START + 11)
|
||||
#define SPEAR320_VIRQ_SMII0 (SPEAR3XX_VIRQ_START + 12)
|
||||
#define SPEAR320_VIRQ_MII1_SMII1 (SPEAR3XX_VIRQ_START + 13)
|
||||
#define SPEAR320_VIRQ_WAKEUP_SMII0 (SPEAR3XX_VIRQ_START + 14)
|
||||
#define SPEAR320_VIRQ_WAKEUP_MII1_SMII1 (SPEAR3XX_VIRQ_START + 15)
|
||||
#define SPEAR320_VIRQ_I2C1 (SPEAR3XX_VIRQ_START + 16)
|
||||
|
||||
/*
|
||||
* GPIO pins virtual irqs
|
||||
* Use the lowest number for the GPIO virtual IRQs base on which subarchs
|
||||
* we have compiled in
|
||||
*/
|
||||
#if defined(CONFIG_MACH_SPEAR310)
|
||||
#define SPEAR3XX_GPIO_INT_BASE (SPEAR3XX_VIRQ_START + 18)
|
||||
#elif defined(CONFIG_MACH_SPEAR320)
|
||||
#define SPEAR3XX_GPIO_INT_BASE (SPEAR3XX_VIRQ_START + 17)
|
||||
#else
|
||||
#define SPEAR3XX_GPIO_INT_BASE (SPEAR3XX_VIRQ_START + 9)
|
||||
#endif
|
||||
|
||||
#define SPEAR300_GPIO1_INT_BASE (SPEAR3XX_GPIO_INT_BASE + 8)
|
||||
#define SPEAR3XX_PLGPIO_COUNT 102
|
||||
|
||||
#if defined(CONFIG_MACH_SPEAR310) || defined(CONFIG_MACH_SPEAR320)
|
||||
#define SPEAR3XX_PLGPIO_INT_BASE (SPEAR3XX_GPIO_INT_BASE + 8)
|
||||
#define SPEAR3XX_GPIO_INT_END (SPEAR3XX_PLGPIO_INT_BASE + \
|
||||
SPEAR3XX_PLGPIO_COUNT)
|
||||
#else
|
||||
#define SPEAR3XX_GPIO_INT_END (SPEAR300_GPIO1_INT_BASE + 8)
|
||||
#endif
|
||||
|
||||
#define SPEAR3XX_VIRQ_END SPEAR3XX_GPIO_INT_END
|
||||
#define NR_IRQS SPEAR3XX_VIRQ_END
|
||||
#define NR_IRQS 160
|
||||
|
||||
#endif /* __MACH_IRQS_H */
|
||||
|
@ -14,151 +14,7 @@
|
||||
#ifndef __MACH_MISC_REGS_H
|
||||
#define __MACH_MISC_REGS_H
|
||||
|
||||
#include <mach/hardware.h>
|
||||
|
||||
#define MISC_BASE IOMEM(VA_SPEAR3XX_ICM3_MISC_REG_BASE)
|
||||
|
||||
#define SOC_CFG_CTR (MISC_BASE + 0x000)
|
||||
#define DIAG_CFG_CTR (MISC_BASE + 0x004)
|
||||
#define PLL1_CTR (MISC_BASE + 0x008)
|
||||
#define PLL1_FRQ (MISC_BASE + 0x00C)
|
||||
#define PLL1_MOD (MISC_BASE + 0x010)
|
||||
#define PLL2_CTR (MISC_BASE + 0x014)
|
||||
/* PLL_CTR register masks */
|
||||
#define PLL_ENABLE 2
|
||||
#define PLL_MODE_SHIFT 4
|
||||
#define PLL_MODE_MASK 0x3
|
||||
#define PLL_MODE_NORMAL 0
|
||||
#define PLL_MODE_FRACTION 1
|
||||
#define PLL_MODE_DITH_DSB 2
|
||||
#define PLL_MODE_DITH_SSB 3
|
||||
|
||||
#define PLL2_FRQ (MISC_BASE + 0x018)
|
||||
/* PLL FRQ register masks */
|
||||
#define PLL_DIV_N_SHIFT 0
|
||||
#define PLL_DIV_N_MASK 0xFF
|
||||
#define PLL_DIV_P_SHIFT 8
|
||||
#define PLL_DIV_P_MASK 0x7
|
||||
#define PLL_NORM_FDBK_M_SHIFT 24
|
||||
#define PLL_NORM_FDBK_M_MASK 0xFF
|
||||
#define PLL_DITH_FDBK_M_SHIFT 16
|
||||
#define PLL_DITH_FDBK_M_MASK 0xFFFF
|
||||
|
||||
#define PLL2_MOD (MISC_BASE + 0x01C)
|
||||
#define PLL_CLK_CFG (MISC_BASE + 0x020)
|
||||
#define CORE_CLK_CFG (MISC_BASE + 0x024)
|
||||
/* CORE CLK CFG register masks */
|
||||
#define PLL_HCLK_RATIO_SHIFT 10
|
||||
#define PLL_HCLK_RATIO_MASK 0x3
|
||||
#define HCLK_PCLK_RATIO_SHIFT 8
|
||||
#define HCLK_PCLK_RATIO_MASK 0x3
|
||||
|
||||
#define PERIP_CLK_CFG (MISC_BASE + 0x028)
|
||||
/* PERIP_CLK_CFG register masks */
|
||||
#define UART_CLK_SHIFT 4
|
||||
#define UART_CLK_MASK 0x1
|
||||
#define FIRDA_CLK_SHIFT 5
|
||||
#define FIRDA_CLK_MASK 0x3
|
||||
#define GPT0_CLK_SHIFT 8
|
||||
#define GPT1_CLK_SHIFT 11
|
||||
#define GPT2_CLK_SHIFT 12
|
||||
#define GPT_CLK_MASK 0x1
|
||||
#define AUX_CLK_PLL3_VAL 0
|
||||
#define AUX_CLK_PLL1_VAL 1
|
||||
|
||||
#define PERIP1_CLK_ENB (MISC_BASE + 0x02C)
|
||||
/* PERIP1_CLK_ENB register masks */
|
||||
#define UART_CLK_ENB 3
|
||||
#define SSP_CLK_ENB 5
|
||||
#define I2C_CLK_ENB 7
|
||||
#define JPEG_CLK_ENB 8
|
||||
#define FIRDA_CLK_ENB 10
|
||||
#define GPT1_CLK_ENB 11
|
||||
#define GPT2_CLK_ENB 12
|
||||
#define ADC_CLK_ENB 15
|
||||
#define RTC_CLK_ENB 17
|
||||
#define GPIO_CLK_ENB 18
|
||||
#define DMA_CLK_ENB 19
|
||||
#define SMI_CLK_ENB 21
|
||||
#define GMAC_CLK_ENB 23
|
||||
#define USBD_CLK_ENB 24
|
||||
#define USBH_CLK_ENB 25
|
||||
#define C3_CLK_ENB 31
|
||||
|
||||
#define SOC_CORE_ID (MISC_BASE + 0x030)
|
||||
#define RAS_CLK_ENB (MISC_BASE + 0x034)
|
||||
#define PERIP1_SOF_RST (MISC_BASE + 0x038)
|
||||
/* PERIP1_SOF_RST register masks */
|
||||
#define JPEG_SOF_RST 8
|
||||
|
||||
#define SOC_USER_ID (MISC_BASE + 0x03C)
|
||||
#define RAS_SOF_RST (MISC_BASE + 0x040)
|
||||
#define PRSC1_CLK_CFG (MISC_BASE + 0x044)
|
||||
#define PRSC2_CLK_CFG (MISC_BASE + 0x048)
|
||||
#define PRSC3_CLK_CFG (MISC_BASE + 0x04C)
|
||||
/* gpt synthesizer register masks */
|
||||
#define GPT_MSCALE_SHIFT 0
|
||||
#define GPT_MSCALE_MASK 0xFFF
|
||||
#define GPT_NSCALE_SHIFT 12
|
||||
#define GPT_NSCALE_MASK 0xF
|
||||
|
||||
#define AMEM_CLK_CFG (MISC_BASE + 0x050)
|
||||
#define EXPI_CLK_CFG (MISC_BASE + 0x054)
|
||||
#define CLCD_CLK_SYNT (MISC_BASE + 0x05C)
|
||||
#define FIRDA_CLK_SYNT (MISC_BASE + 0x060)
|
||||
#define UART_CLK_SYNT (MISC_BASE + 0x064)
|
||||
#define GMAC_CLK_SYNT (MISC_BASE + 0x068)
|
||||
#define RAS1_CLK_SYNT (MISC_BASE + 0x06C)
|
||||
#define RAS2_CLK_SYNT (MISC_BASE + 0x070)
|
||||
#define RAS3_CLK_SYNT (MISC_BASE + 0x074)
|
||||
#define RAS4_CLK_SYNT (MISC_BASE + 0x078)
|
||||
/* aux clk synthesiser register masks for irda to ras4 */
|
||||
#define AUX_SYNT_ENB 31
|
||||
#define AUX_EQ_SEL_SHIFT 30
|
||||
#define AUX_EQ_SEL_MASK 1
|
||||
#define AUX_EQ1_SEL 0
|
||||
#define AUX_EQ2_SEL 1
|
||||
#define AUX_XSCALE_SHIFT 16
|
||||
#define AUX_XSCALE_MASK 0xFFF
|
||||
#define AUX_YSCALE_SHIFT 0
|
||||
#define AUX_YSCALE_MASK 0xFFF
|
||||
|
||||
#define ICM1_ARB_CFG (MISC_BASE + 0x07C)
|
||||
#define ICM2_ARB_CFG (MISC_BASE + 0x080)
|
||||
#define ICM3_ARB_CFG (MISC_BASE + 0x084)
|
||||
#define ICM4_ARB_CFG (MISC_BASE + 0x088)
|
||||
#define ICM5_ARB_CFG (MISC_BASE + 0x08C)
|
||||
#define ICM6_ARB_CFG (MISC_BASE + 0x090)
|
||||
#define ICM7_ARB_CFG (MISC_BASE + 0x094)
|
||||
#define ICM8_ARB_CFG (MISC_BASE + 0x098)
|
||||
#define ICM9_ARB_CFG (MISC_BASE + 0x09C)
|
||||
#define DMA_CHN_CFG (MISC_BASE + 0x0A0)
|
||||
#define USB2_PHY_CFG (MISC_BASE + 0x0A4)
|
||||
#define GMAC_CFG_CTR (MISC_BASE + 0x0A8)
|
||||
#define EXPI_CFG_CTR (MISC_BASE + 0x0AC)
|
||||
#define PRC1_LOCK_CTR (MISC_BASE + 0x0C0)
|
||||
#define PRC2_LOCK_CTR (MISC_BASE + 0x0C4)
|
||||
#define PRC3_LOCK_CTR (MISC_BASE + 0x0C8)
|
||||
#define PRC4_LOCK_CTR (MISC_BASE + 0x0CC)
|
||||
#define PRC1_IRQ_CTR (MISC_BASE + 0x0D0)
|
||||
#define PRC2_IRQ_CTR (MISC_BASE + 0x0D4)
|
||||
#define PRC3_IRQ_CTR (MISC_BASE + 0x0D8)
|
||||
#define PRC4_IRQ_CTR (MISC_BASE + 0x0DC)
|
||||
#define PWRDOWN_CFG_CTR (MISC_BASE + 0x0E0)
|
||||
#define COMPSSTL_1V8_CFG (MISC_BASE + 0x0E4)
|
||||
#define COMPSSTL_2V5_CFG (MISC_BASE + 0x0E8)
|
||||
#define COMPCOR_3V3_CFG (MISC_BASE + 0x0EC)
|
||||
#define SSTLPAD_CFG_CTR (MISC_BASE + 0x0F0)
|
||||
#define BIST1_CFG_CTR (MISC_BASE + 0x0F4)
|
||||
#define BIST2_CFG_CTR (MISC_BASE + 0x0F8)
|
||||
#define BIST3_CFG_CTR (MISC_BASE + 0x0FC)
|
||||
#define BIST4_CFG_CTR (MISC_BASE + 0x100)
|
||||
#define BIST5_CFG_CTR (MISC_BASE + 0x104)
|
||||
#define BIST1_STS_RES (MISC_BASE + 0x108)
|
||||
#define BIST2_STS_RES (MISC_BASE + 0x10C)
|
||||
#define BIST3_STS_RES (MISC_BASE + 0x110)
|
||||
#define BIST4_STS_RES (MISC_BASE + 0x114)
|
||||
#define BIST5_STS_RES (MISC_BASE + 0x118)
|
||||
#define SYSERR_CFG_CTR (MISC_BASE + 0x11C)
|
||||
|
||||
#endif /* __MACH_MISC_REGS_H */
|
||||
|
@ -15,60 +15,27 @@
|
||||
#define __MACH_SPEAR3XX_H
|
||||
|
||||
#include <asm/memory.h>
|
||||
#include <mach/spear300.h>
|
||||
#include <mach/spear310.h>
|
||||
#include <mach/spear320.h>
|
||||
|
||||
#define SPEAR3XX_ML_SDRAM_BASE UL(0x00000000)
|
||||
|
||||
#define SPEAR3XX_ICM9_BASE UL(0xC0000000)
|
||||
|
||||
/* ICM1 - Low speed connection */
|
||||
#define SPEAR3XX_ICM1_2_BASE UL(0xD0000000)
|
||||
#define VA_SPEAR3XX_ICM1_2_BASE UL(0xFD000000)
|
||||
#define SPEAR3XX_ICM1_UART_BASE UL(0xD0000000)
|
||||
#define VA_SPEAR3XX_ICM1_UART_BASE IO_ADDRESS(SPEAR3XX_ICM1_UART_BASE)
|
||||
#define SPEAR3XX_ICM1_ADC_BASE UL(0xD0080000)
|
||||
#define VA_SPEAR3XX_ICM1_UART_BASE (VA_SPEAR3XX_ICM1_2_BASE | SPEAR3XX_ICM1_UART_BASE)
|
||||
#define SPEAR3XX_ICM1_SSP_BASE UL(0xD0100000)
|
||||
#define SPEAR3XX_ICM1_I2C_BASE UL(0xD0180000)
|
||||
#define SPEAR3XX_ICM1_JPEG_BASE UL(0xD0800000)
|
||||
#define SPEAR3XX_ICM1_IRDA_BASE UL(0xD1000000)
|
||||
#define SPEAR3XX_ICM1_SRAM_BASE UL(0xD2800000)
|
||||
|
||||
/* ICM2 - Application Subsystem */
|
||||
#define SPEAR3XX_ICM2_HWACCEL0_BASE UL(0xD8800000)
|
||||
#define SPEAR3XX_ICM2_HWACCEL1_BASE UL(0xD9000000)
|
||||
|
||||
/* ICM4 - High Speed Connection */
|
||||
#define SPEAR3XX_ICM4_BASE UL(0xE0000000)
|
||||
#define SPEAR3XX_ICM4_MII_BASE UL(0xE0800000)
|
||||
#define SPEAR3XX_ICM4_USBD_FIFO_BASE UL(0xE1000000)
|
||||
#define SPEAR3XX_ICM4_USBD_CSR_BASE UL(0xE1100000)
|
||||
#define SPEAR3XX_ICM4_USBD_PLDT_BASE UL(0xE1200000)
|
||||
#define SPEAR3XX_ICM4_USB_EHCI0_1_BASE UL(0xE1800000)
|
||||
#define SPEAR3XX_ICM4_USB_OHCI0_BASE UL(0xE1900000)
|
||||
#define SPEAR3XX_ICM4_USB_OHCI1_BASE UL(0xE2100000)
|
||||
#define SPEAR3XX_ICM4_USB_ARB_BASE UL(0xE2800000)
|
||||
|
||||
/* ML1 - Multi Layer CPU Subsystem */
|
||||
#define SPEAR3XX_ICM3_ML1_2_BASE UL(0xF0000000)
|
||||
#define SPEAR3XX_ML1_TMR_BASE UL(0xF0000000)
|
||||
#define SPEAR3XX_ML1_VIC_BASE UL(0xF1100000)
|
||||
#define VA_SPEAR3XX_ML1_VIC_BASE IO_ADDRESS(SPEAR3XX_ML1_VIC_BASE)
|
||||
#define VA_SPEAR6XX_ML_CPU_BASE UL(0xF0000000)
|
||||
#define SPEAR3XX_CPU_TMR_BASE UL(0xF0000000)
|
||||
|
||||
/* ICM3 - Basic Subsystem */
|
||||
#define SPEAR3XX_ICM3_SMEM_BASE UL(0xF8000000)
|
||||
#define SPEAR3XX_ICM3_SMI_CTRL_BASE UL(0xFC000000)
|
||||
#define VA_SPEAR3XX_ICM3_SMI_CTRL_BASE UL(0xFC000000)
|
||||
#define SPEAR3XX_ICM3_DMA_BASE UL(0xFC400000)
|
||||
#define SPEAR3XX_ICM3_SDRAM_CTRL_BASE UL(0xFC600000)
|
||||
#define SPEAR3XX_ICM3_TMR0_BASE UL(0xFC800000)
|
||||
#define SPEAR3XX_ICM3_WDT_BASE UL(0xFC880000)
|
||||
#define SPEAR3XX_ICM3_RTC_BASE UL(0xFC900000)
|
||||
#define SPEAR3XX_ICM3_GPIO_BASE UL(0xFC980000)
|
||||
#define SPEAR3XX_ICM3_SYS_CTRL_BASE UL(0xFCA00000)
|
||||
#define VA_SPEAR3XX_ICM3_SYS_CTRL_BASE IO_ADDRESS(SPEAR3XX_ICM3_SYS_CTRL_BASE)
|
||||
#define VA_SPEAR3XX_ICM3_SYS_CTRL_BASE (VA_SPEAR3XX_ICM3_SMI_CTRL_BASE | SPEAR3XX_ICM3_SYS_CTRL_BASE)
|
||||
#define SPEAR3XX_ICM3_MISC_REG_BASE UL(0xFCA80000)
|
||||
#define VA_SPEAR3XX_ICM3_MISC_REG_BASE IO_ADDRESS(SPEAR3XX_ICM3_MISC_REG_BASE)
|
||||
#define SPEAR3XX_ICM3_TMR1_BASE UL(0xFCB00000)
|
||||
#define VA_SPEAR3XX_ICM3_MISC_REG_BASE (VA_SPEAR3XX_ICM3_SMI_CTRL_BASE | SPEAR3XX_ICM3_MISC_REG_BASE)
|
||||
|
||||
/* Debug uart for linux, will be used for debug and uncompress messages */
|
||||
#define SPEAR_DBG_UART_BASE SPEAR3XX_ICM1_UART_BASE
|
||||
|
@ -1,54 +0,0 @@
|
||||
/*
|
||||
* arch/arm/mach-spear3xx/include/mach/spear300.h
|
||||
*
|
||||
* SPEAr300 Machine specific definition
|
||||
*
|
||||
* Copyright (C) 2009 ST Microelectronics
|
||||
* Viresh Kumar<viresh.kumar@st.com>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_MACH_SPEAR300
|
||||
|
||||
#ifndef __MACH_SPEAR300_H
|
||||
#define __MACH_SPEAR300_H
|
||||
|
||||
/* Base address of various IPs */
|
||||
#define SPEAR300_TELECOM_BASE UL(0x50000000)
|
||||
|
||||
/* Interrupt registers offsets and masks */
|
||||
#define SPEAR300_INT_ENB_MASK_REG 0x54
|
||||
#define SPEAR300_INT_STS_MASK_REG 0x58
|
||||
#define SPEAR300_IT_PERS_S_IRQ_MASK (1 << 0)
|
||||
#define SPEAR300_IT_CHANGE_S_IRQ_MASK (1 << 1)
|
||||
#define SPEAR300_I2S_IRQ_MASK (1 << 2)
|
||||
#define SPEAR300_TDM_IRQ_MASK (1 << 3)
|
||||
#define SPEAR300_CAMERA_L_IRQ_MASK (1 << 4)
|
||||
#define SPEAR300_CAMERA_F_IRQ_MASK (1 << 5)
|
||||
#define SPEAR300_CAMERA_V_IRQ_MASK (1 << 6)
|
||||
#define SPEAR300_KEYBOARD_IRQ_MASK (1 << 7)
|
||||
#define SPEAR300_GPIO1_IRQ_MASK (1 << 8)
|
||||
|
||||
#define SPEAR300_SHIRQ_RAS1_MASK 0x1FF
|
||||
|
||||
#define SPEAR300_CLCD_BASE UL(0x60000000)
|
||||
#define SPEAR300_SDHCI_BASE UL(0x70000000)
|
||||
#define SPEAR300_NAND_0_BASE UL(0x80000000)
|
||||
#define SPEAR300_NAND_1_BASE UL(0x84000000)
|
||||
#define SPEAR300_NAND_2_BASE UL(0x88000000)
|
||||
#define SPEAR300_NAND_3_BASE UL(0x8c000000)
|
||||
#define SPEAR300_NOR_0_BASE UL(0x90000000)
|
||||
#define SPEAR300_NOR_1_BASE UL(0x91000000)
|
||||
#define SPEAR300_NOR_2_BASE UL(0x92000000)
|
||||
#define SPEAR300_NOR_3_BASE UL(0x93000000)
|
||||
#define SPEAR300_FSMC_BASE UL(0x94000000)
|
||||
#define SPEAR300_SOC_CONFIG_BASE UL(0x99000000)
|
||||
#define SPEAR300_KEYBOARD_BASE UL(0xA0000000)
|
||||
#define SPEAR300_GPIO_BASE UL(0xA9000000)
|
||||
|
||||
#endif /* __MACH_SPEAR300_H */
|
||||
|
||||
#endif /* CONFIG_MACH_SPEAR300 */
|
@ -1,58 +0,0 @@
|
||||
/*
|
||||
* arch/arm/mach-spear3xx/include/mach/spear310.h
|
||||
*
|
||||
* SPEAr310 Machine specific definition
|
||||
*
|
||||
* Copyright (C) 2009 ST Microelectronics
|
||||
* Viresh Kumar<viresh.kumar@st.com>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_MACH_SPEAR310
|
||||
|
||||
#ifndef __MACH_SPEAR310_H
|
||||
#define __MACH_SPEAR310_H
|
||||
|
||||
#define SPEAR310_NAND_BASE UL(0x40000000)
|
||||
#define SPEAR310_FSMC_BASE UL(0x44000000)
|
||||
#define SPEAR310_UART1_BASE UL(0xB2000000)
|
||||
#define SPEAR310_UART2_BASE UL(0xB2080000)
|
||||
#define SPEAR310_UART3_BASE UL(0xB2100000)
|
||||
#define SPEAR310_UART4_BASE UL(0xB2180000)
|
||||
#define SPEAR310_UART5_BASE UL(0xB2200000)
|
||||
#define SPEAR310_HDLC_BASE UL(0xB2800000)
|
||||
#define SPEAR310_RS485_0_BASE UL(0xB3000000)
|
||||
#define SPEAR310_RS485_1_BASE UL(0xB3800000)
|
||||
#define SPEAR310_SOC_CONFIG_BASE UL(0xB4000000)
|
||||
|
||||
/* Interrupt registers offsets and masks */
|
||||
#define SPEAR310_INT_STS_MASK_REG 0x04
|
||||
#define SPEAR310_SMII0_IRQ_MASK (1 << 0)
|
||||
#define SPEAR310_SMII1_IRQ_MASK (1 << 1)
|
||||
#define SPEAR310_SMII2_IRQ_MASK (1 << 2)
|
||||
#define SPEAR310_SMII3_IRQ_MASK (1 << 3)
|
||||
#define SPEAR310_WAKEUP_SMII0_IRQ_MASK (1 << 4)
|
||||
#define SPEAR310_WAKEUP_SMII1_IRQ_MASK (1 << 5)
|
||||
#define SPEAR310_WAKEUP_SMII2_IRQ_MASK (1 << 6)
|
||||
#define SPEAR310_WAKEUP_SMII3_IRQ_MASK (1 << 7)
|
||||
#define SPEAR310_UART1_IRQ_MASK (1 << 8)
|
||||
#define SPEAR310_UART2_IRQ_MASK (1 << 9)
|
||||
#define SPEAR310_UART3_IRQ_MASK (1 << 10)
|
||||
#define SPEAR310_UART4_IRQ_MASK (1 << 11)
|
||||
#define SPEAR310_UART5_IRQ_MASK (1 << 12)
|
||||
#define SPEAR310_EMI_IRQ_MASK (1 << 13)
|
||||
#define SPEAR310_TDM_HDLC_IRQ_MASK (1 << 14)
|
||||
#define SPEAR310_RS485_0_IRQ_MASK (1 << 15)
|
||||
#define SPEAR310_RS485_1_IRQ_MASK (1 << 16)
|
||||
|
||||
#define SPEAR310_SHIRQ_RAS1_MASK 0x000FF
|
||||
#define SPEAR310_SHIRQ_RAS2_MASK 0x01F00
|
||||
#define SPEAR310_SHIRQ_RAS3_MASK 0x02000
|
||||
#define SPEAR310_SHIRQ_INTRCOMM_RAS_MASK 0x1C000
|
||||
|
||||
#endif /* __MACH_SPEAR310_H */
|
||||
|
||||
#endif /* CONFIG_MACH_SPEAR310 */
|
@ -1,67 +0,0 @@
|
||||
/*
|
||||
* arch/arm/mach-spear3xx/include/mach/spear320.h
|
||||
*
|
||||
* SPEAr320 Machine specific definition
|
||||
*
|
||||
* Copyright (C) 2009 ST Microelectronics
|
||||
* Viresh Kumar<viresh.kumar@st.com>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_MACH_SPEAR320
|
||||
|
||||
#ifndef __MACH_SPEAR320_H
|
||||
#define __MACH_SPEAR320_H
|
||||
|
||||
#define SPEAR320_EMI_CTRL_BASE UL(0x40000000)
|
||||
#define SPEAR320_FSMC_BASE UL(0x4C000000)
|
||||
#define SPEAR320_NAND_BASE UL(0x50000000)
|
||||
#define SPEAR320_I2S_BASE UL(0x60000000)
|
||||
#define SPEAR320_SDHCI_BASE UL(0x70000000)
|
||||
#define SPEAR320_CLCD_BASE UL(0x90000000)
|
||||
#define SPEAR320_PAR_PORT_BASE UL(0xA0000000)
|
||||
#define SPEAR320_CAN0_BASE UL(0xA1000000)
|
||||
#define SPEAR320_CAN1_BASE UL(0xA2000000)
|
||||
#define SPEAR320_UART1_BASE UL(0xA3000000)
|
||||
#define SPEAR320_UART2_BASE UL(0xA4000000)
|
||||
#define SPEAR320_SSP0_BASE UL(0xA5000000)
|
||||
#define SPEAR320_SSP1_BASE UL(0xA6000000)
|
||||
#define SPEAR320_I2C_BASE UL(0xA7000000)
|
||||
#define SPEAR320_PWM_BASE UL(0xA8000000)
|
||||
#define SPEAR320_SMII0_BASE UL(0xAA000000)
|
||||
#define SPEAR320_SMII1_BASE UL(0xAB000000)
|
||||
#define SPEAR320_SOC_CONFIG_BASE UL(0xB3000000)
|
||||
|
||||
/* Interrupt registers offsets and masks */
|
||||
#define SPEAR320_INT_STS_MASK_REG 0x04
|
||||
#define SPEAR320_INT_CLR_MASK_REG 0x04
|
||||
#define SPEAR320_INT_ENB_MASK_REG 0x08
|
||||
#define SPEAR320_GPIO_IRQ_MASK (1 << 0)
|
||||
#define SPEAR320_I2S_PLAY_IRQ_MASK (1 << 1)
|
||||
#define SPEAR320_I2S_REC_IRQ_MASK (1 << 2)
|
||||
#define SPEAR320_EMI_IRQ_MASK (1 << 7)
|
||||
#define SPEAR320_CLCD_IRQ_MASK (1 << 8)
|
||||
#define SPEAR320_SPP_IRQ_MASK (1 << 9)
|
||||
#define SPEAR320_SDHCI_IRQ_MASK (1 << 10)
|
||||
#define SPEAR320_CAN_U_IRQ_MASK (1 << 11)
|
||||
#define SPEAR320_CAN_L_IRQ_MASK (1 << 12)
|
||||
#define SPEAR320_UART1_IRQ_MASK (1 << 13)
|
||||
#define SPEAR320_UART2_IRQ_MASK (1 << 14)
|
||||
#define SPEAR320_SSP1_IRQ_MASK (1 << 15)
|
||||
#define SPEAR320_SSP2_IRQ_MASK (1 << 16)
|
||||
#define SPEAR320_SMII0_IRQ_MASK (1 << 17)
|
||||
#define SPEAR320_MII1_SMII1_IRQ_MASK (1 << 18)
|
||||
#define SPEAR320_WAKEUP_SMII0_IRQ_MASK (1 << 19)
|
||||
#define SPEAR320_WAKEUP_MII1_SMII1_IRQ_MASK (1 << 20)
|
||||
#define SPEAR320_I2C1_IRQ_MASK (1 << 21)
|
||||
|
||||
#define SPEAR320_SHIRQ_RAS1_MASK 0x000380
|
||||
#define SPEAR320_SHIRQ_RAS3_MASK 0x000007
|
||||
#define SPEAR320_SHIRQ_INTRCOMM_RAS_MASK 0x3FF800
|
||||
|
||||
#endif /* __MACH_SPEAR320_H */
|
||||
|
||||
#endif /* CONFIG_MACH_SPEAR320 */
|
@ -3,21 +3,62 @@
|
||||
*
|
||||
* SPEAr300 machine source file
|
||||
*
|
||||
* Copyright (C) 2009 ST Microelectronics
|
||||
* Viresh Kumar<viresh.kumar@st.com>
|
||||
* Copyright (C) 2009-2012 ST Microelectronics
|
||||
* Viresh Kumar <viresh.kumar@st.com>
|
||||
*
|
||||
* 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 <linux/types.h>
|
||||
#include <linux/amba/pl061.h>
|
||||
#include <linux/ptrace.h>
|
||||
#include <asm/irq.h>
|
||||
#define pr_fmt(fmt) "SPEAr300: " fmt
|
||||
|
||||
#include <linux/amba/pl08x.h>
|
||||
#include <linux/of_platform.h>
|
||||
#include <asm/hardware/vic.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <plat/shirq.h>
|
||||
#include <mach/generic.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/spear.h>
|
||||
|
||||
/* Base address of various IPs */
|
||||
#define SPEAR300_TELECOM_BASE UL(0x50000000)
|
||||
|
||||
/* Interrupt registers offsets and masks */
|
||||
#define SPEAR300_INT_ENB_MASK_REG 0x54
|
||||
#define SPEAR300_INT_STS_MASK_REG 0x58
|
||||
#define SPEAR300_IT_PERS_S_IRQ_MASK (1 << 0)
|
||||
#define SPEAR300_IT_CHANGE_S_IRQ_MASK (1 << 1)
|
||||
#define SPEAR300_I2S_IRQ_MASK (1 << 2)
|
||||
#define SPEAR300_TDM_IRQ_MASK (1 << 3)
|
||||
#define SPEAR300_CAMERA_L_IRQ_MASK (1 << 4)
|
||||
#define SPEAR300_CAMERA_F_IRQ_MASK (1 << 5)
|
||||
#define SPEAR300_CAMERA_V_IRQ_MASK (1 << 6)
|
||||
#define SPEAR300_KEYBOARD_IRQ_MASK (1 << 7)
|
||||
#define SPEAR300_GPIO1_IRQ_MASK (1 << 8)
|
||||
|
||||
#define SPEAR300_SHIRQ_RAS1_MASK 0x1FF
|
||||
|
||||
#define SPEAR300_SOC_CONFIG_BASE UL(0x99000000)
|
||||
|
||||
|
||||
/* SPEAr300 Virtual irq definitions */
|
||||
/* IRQs sharing IRQ_GEN_RAS_1 */
|
||||
#define SPEAR300_VIRQ_IT_PERS_S (SPEAR3XX_VIRQ_START + 0)
|
||||
#define SPEAR300_VIRQ_IT_CHANGE_S (SPEAR3XX_VIRQ_START + 1)
|
||||
#define SPEAR300_VIRQ_I2S (SPEAR3XX_VIRQ_START + 2)
|
||||
#define SPEAR300_VIRQ_TDM (SPEAR3XX_VIRQ_START + 3)
|
||||
#define SPEAR300_VIRQ_CAMERA_L (SPEAR3XX_VIRQ_START + 4)
|
||||
#define SPEAR300_VIRQ_CAMERA_F (SPEAR3XX_VIRQ_START + 5)
|
||||
#define SPEAR300_VIRQ_CAMERA_V (SPEAR3XX_VIRQ_START + 6)
|
||||
#define SPEAR300_VIRQ_KEYBOARD (SPEAR3XX_VIRQ_START + 7)
|
||||
#define SPEAR300_VIRQ_GPIO1 (SPEAR3XX_VIRQ_START + 8)
|
||||
|
||||
/* IRQs sharing IRQ_GEN_RAS_3 */
|
||||
#define SPEAR300_IRQ_CLCD SPEAR3XX_IRQ_GEN_RAS_3
|
||||
|
||||
/* IRQs sharing IRQ_INTRCOMM_RAS_ARM */
|
||||
#define SPEAR300_IRQ_SDHCI SPEAR3XX_IRQ_INTRCOMM_RAS_ARM
|
||||
|
||||
/* pad multiplexing support */
|
||||
/* muxing registers */
|
||||
@ -423,45 +464,275 @@ static struct spear_shirq shirq_ras1 = {
|
||||
},
|
||||
};
|
||||
|
||||
/* Add spear300 specific devices here */
|
||||
/* arm gpio1 device registration */
|
||||
static struct pl061_platform_data gpio1_plat_data = {
|
||||
.gpio_base = 8,
|
||||
.irq_base = SPEAR300_GPIO1_INT_BASE,
|
||||
/* padmux devices to enable */
|
||||
static struct pmx_dev *spear300_evb_pmx_devs[] = {
|
||||
/* spear3xx specific devices */
|
||||
&spear3xx_pmx_i2c,
|
||||
&spear3xx_pmx_ssp_cs,
|
||||
&spear3xx_pmx_ssp,
|
||||
&spear3xx_pmx_mii,
|
||||
&spear3xx_pmx_uart0,
|
||||
|
||||
/* spear300 specific devices */
|
||||
&spear300_pmx_fsmc_2_chips,
|
||||
&spear300_pmx_clcd,
|
||||
&spear300_pmx_telecom_sdhci_4bit,
|
||||
&spear300_pmx_gpio1,
|
||||
};
|
||||
|
||||
AMBA_APB_DEVICE(spear300_gpio1, "gpio1", 0, SPEAR300_GPIO_BASE,
|
||||
{SPEAR300_VIRQ_GPIO1}, &gpio1_plat_data);
|
||||
/* DMAC platform data's slave info */
|
||||
struct pl08x_channel_data spear300_dma_info[] = {
|
||||
{
|
||||
.bus_id = "uart0_rx",
|
||||
.min_signal = 2,
|
||||
.max_signal = 2,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "uart0_tx",
|
||||
.min_signal = 3,
|
||||
.max_signal = 3,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ssp0_rx",
|
||||
.min_signal = 8,
|
||||
.max_signal = 8,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ssp0_tx",
|
||||
.min_signal = 9,
|
||||
.max_signal = 9,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "i2c_rx",
|
||||
.min_signal = 10,
|
||||
.max_signal = 10,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "i2c_tx",
|
||||
.min_signal = 11,
|
||||
.max_signal = 11,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "irda",
|
||||
.min_signal = 12,
|
||||
.max_signal = 12,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "adc",
|
||||
.min_signal = 13,
|
||||
.max_signal = 13,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "to_jpeg",
|
||||
.min_signal = 14,
|
||||
.max_signal = 14,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "from_jpeg",
|
||||
.min_signal = 15,
|
||||
.max_signal = 15,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ras0_rx",
|
||||
.min_signal = 0,
|
||||
.max_signal = 0,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ras0_tx",
|
||||
.min_signal = 1,
|
||||
.max_signal = 1,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ras1_rx",
|
||||
.min_signal = 2,
|
||||
.max_signal = 2,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ras1_tx",
|
||||
.min_signal = 3,
|
||||
.max_signal = 3,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ras2_rx",
|
||||
.min_signal = 4,
|
||||
.max_signal = 4,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ras2_tx",
|
||||
.min_signal = 5,
|
||||
.max_signal = 5,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ras3_rx",
|
||||
.min_signal = 6,
|
||||
.max_signal = 6,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ras3_tx",
|
||||
.min_signal = 7,
|
||||
.max_signal = 7,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ras4_rx",
|
||||
.min_signal = 8,
|
||||
.max_signal = 8,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ras4_tx",
|
||||
.min_signal = 9,
|
||||
.max_signal = 9,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ras5_rx",
|
||||
.min_signal = 10,
|
||||
.max_signal = 10,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ras5_tx",
|
||||
.min_signal = 11,
|
||||
.max_signal = 11,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ras6_rx",
|
||||
.min_signal = 12,
|
||||
.max_signal = 12,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ras6_tx",
|
||||
.min_signal = 13,
|
||||
.max_signal = 13,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ras7_rx",
|
||||
.min_signal = 14,
|
||||
.max_signal = 14,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ras7_tx",
|
||||
.min_signal = 15,
|
||||
.max_signal = 15,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
},
|
||||
};
|
||||
|
||||
/* spear300 routines */
|
||||
void __init spear300_init(struct pmx_mode *pmx_mode, struct pmx_dev **pmx_devs,
|
||||
u8 pmx_dev_count)
|
||||
/* Add SPEAr300 auxdata to pass platform data */
|
||||
static struct of_dev_auxdata spear300_auxdata_lookup[] __initdata = {
|
||||
OF_DEV_AUXDATA("arm,pl022", SPEAR3XX_ICM1_SSP_BASE, NULL,
|
||||
&pl022_plat_data),
|
||||
OF_DEV_AUXDATA("arm,pl080", SPEAR3XX_ICM3_DMA_BASE, NULL,
|
||||
&pl080_plat_data),
|
||||
{}
|
||||
};
|
||||
|
||||
static void __init spear300_dt_init(void)
|
||||
{
|
||||
int ret = 0;
|
||||
int ret = -EINVAL;
|
||||
|
||||
/* call spear3xx family common init function */
|
||||
spear3xx_init();
|
||||
pl080_plat_data.slave_channels = spear300_dma_info;
|
||||
pl080_plat_data.num_slave_channels = ARRAY_SIZE(spear300_dma_info);
|
||||
|
||||
of_platform_populate(NULL, of_default_bus_match_table,
|
||||
spear300_auxdata_lookup, NULL);
|
||||
|
||||
/* shared irq registration */
|
||||
shirq_ras1.regs.base = ioremap(SPEAR300_TELECOM_BASE, SZ_4K);
|
||||
if (shirq_ras1.regs.base) {
|
||||
ret = spear_shirq_register(&shirq_ras1);
|
||||
if (ret)
|
||||
printk(KERN_ERR "Error registering Shared IRQ\n");
|
||||
pr_err("Error registering Shared IRQ\n");
|
||||
}
|
||||
|
||||
/* pmx initialization */
|
||||
pmx_driver.mode = pmx_mode;
|
||||
pmx_driver.devs = pmx_devs;
|
||||
pmx_driver.devs_count = pmx_dev_count;
|
||||
if (of_machine_is_compatible("st,spear300-evb")) {
|
||||
/* pmx initialization */
|
||||
pmx_driver.mode = &spear300_photo_frame_mode;
|
||||
pmx_driver.devs = spear300_evb_pmx_devs;
|
||||
pmx_driver.devs_count = ARRAY_SIZE(spear300_evb_pmx_devs);
|
||||
|
||||
pmx_driver.base = ioremap(SPEAR300_SOC_CONFIG_BASE, SZ_4K);
|
||||
if (pmx_driver.base) {
|
||||
ret = pmx_register(&pmx_driver);
|
||||
if (ret)
|
||||
pr_err("padmux: registration failed. err no: %d\n",
|
||||
ret);
|
||||
/* Free Mapping, device selection already done */
|
||||
iounmap(pmx_driver.base);
|
||||
}
|
||||
|
||||
pmx_driver.base = ioremap(SPEAR300_SOC_CONFIG_BASE, SZ_4K);
|
||||
if (pmx_driver.base) {
|
||||
ret = pmx_register(&pmx_driver);
|
||||
if (ret)
|
||||
printk(KERN_ERR "padmux: registration failed. err no"
|
||||
": %d\n", ret);
|
||||
/* Free Mapping, device selection already done */
|
||||
iounmap(pmx_driver.base);
|
||||
pr_err("Initialization Failed");
|
||||
}
|
||||
}
|
||||
|
||||
static const char * const spear300_dt_board_compat[] = {
|
||||
"st,spear300",
|
||||
"st,spear300-evb",
|
||||
NULL,
|
||||
};
|
||||
|
||||
static void __init spear300_map_io(void)
|
||||
{
|
||||
spear3xx_map_io();
|
||||
spear300_clk_init();
|
||||
}
|
||||
|
||||
DT_MACHINE_START(SPEAR300_DT, "ST SPEAr300 SoC with Flattened Device Tree")
|
||||
.map_io = spear300_map_io,
|
||||
.init_irq = spear3xx_dt_init_irq,
|
||||
.handle_irq = vic_handle_irq,
|
||||
.timer = &spear3xx_timer,
|
||||
.init_machine = spear300_dt_init,
|
||||
.restart = spear_restart,
|
||||
.dt_compat = spear300_dt_board_compat,
|
||||
MACHINE_END
|
||||
|
@ -1,75 +0,0 @@
|
||||
/*
|
||||
* arch/arm/mach-spear3xx/spear300_evb.c
|
||||
*
|
||||
* SPEAr300 evaluation board source file
|
||||
*
|
||||
* Copyright (C) 2009 ST Microelectronics
|
||||
* Viresh Kumar<viresh.kumar@st.com>
|
||||
*
|
||||
* 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 <asm/hardware/vic.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <mach/generic.h>
|
||||
#include <mach/hardware.h>
|
||||
|
||||
/* padmux devices to enable */
|
||||
static struct pmx_dev *pmx_devs[] = {
|
||||
/* spear3xx specific devices */
|
||||
&spear3xx_pmx_i2c,
|
||||
&spear3xx_pmx_ssp_cs,
|
||||
&spear3xx_pmx_ssp,
|
||||
&spear3xx_pmx_mii,
|
||||
&spear3xx_pmx_uart0,
|
||||
|
||||
/* spear300 specific devices */
|
||||
&spear300_pmx_fsmc_2_chips,
|
||||
&spear300_pmx_clcd,
|
||||
&spear300_pmx_telecom_sdhci_4bit,
|
||||
&spear300_pmx_gpio1,
|
||||
};
|
||||
|
||||
static struct amba_device *amba_devs[] __initdata = {
|
||||
/* spear3xx specific devices */
|
||||
&spear3xx_gpio_device,
|
||||
&spear3xx_uart_device,
|
||||
|
||||
/* spear300 specific devices */
|
||||
&spear300_gpio1_device,
|
||||
};
|
||||
|
||||
static struct platform_device *plat_devs[] __initdata = {
|
||||
/* spear3xx specific devices */
|
||||
|
||||
/* spear300 specific devices */
|
||||
};
|
||||
|
||||
static void __init spear300_evb_init(void)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
/* call spear300 machine init function */
|
||||
spear300_init(&spear300_photo_frame_mode, pmx_devs,
|
||||
ARRAY_SIZE(pmx_devs));
|
||||
|
||||
/* Add Platform Devices */
|
||||
platform_add_devices(plat_devs, ARRAY_SIZE(plat_devs));
|
||||
|
||||
/* Add Amba Devices */
|
||||
for (i = 0; i < ARRAY_SIZE(amba_devs); i++)
|
||||
amba_device_register(amba_devs[i], &iomem_resource);
|
||||
}
|
||||
|
||||
MACHINE_START(SPEAR300, "ST-SPEAR300-EVB")
|
||||
.atag_offset = 0x100,
|
||||
.map_io = spear3xx_map_io,
|
||||
.init_irq = spear3xx_init_irq,
|
||||
.handle_irq = vic_handle_irq,
|
||||
.timer = &spear3xx_timer,
|
||||
.init_machine = spear300_evb_init,
|
||||
.restart = spear_restart,
|
||||
MACHINE_END
|
@ -3,19 +3,84 @@
|
||||
*
|
||||
* SPEAr310 machine source file
|
||||
*
|
||||
* Copyright (C) 2009 ST Microelectronics
|
||||
* Viresh Kumar<viresh.kumar@st.com>
|
||||
* Copyright (C) 2009-2012 ST Microelectronics
|
||||
* Viresh Kumar <viresh.kumar@st.com>
|
||||
*
|
||||
* 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 <linux/ptrace.h>
|
||||
#include <asm/irq.h>
|
||||
#define pr_fmt(fmt) "SPEAr310: " fmt
|
||||
|
||||
#include <linux/amba/pl08x.h>
|
||||
#include <linux/amba/serial.h>
|
||||
#include <linux/of_platform.h>
|
||||
#include <asm/hardware/vic.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <plat/shirq.h>
|
||||
#include <mach/generic.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/spear.h>
|
||||
|
||||
#define SPEAR310_UART1_BASE UL(0xB2000000)
|
||||
#define SPEAR310_UART2_BASE UL(0xB2080000)
|
||||
#define SPEAR310_UART3_BASE UL(0xB2100000)
|
||||
#define SPEAR310_UART4_BASE UL(0xB2180000)
|
||||
#define SPEAR310_UART5_BASE UL(0xB2200000)
|
||||
#define SPEAR310_SOC_CONFIG_BASE UL(0xB4000000)
|
||||
|
||||
/* Interrupt registers offsets and masks */
|
||||
#define SPEAR310_INT_STS_MASK_REG 0x04
|
||||
#define SPEAR310_SMII0_IRQ_MASK (1 << 0)
|
||||
#define SPEAR310_SMII1_IRQ_MASK (1 << 1)
|
||||
#define SPEAR310_SMII2_IRQ_MASK (1 << 2)
|
||||
#define SPEAR310_SMII3_IRQ_MASK (1 << 3)
|
||||
#define SPEAR310_WAKEUP_SMII0_IRQ_MASK (1 << 4)
|
||||
#define SPEAR310_WAKEUP_SMII1_IRQ_MASK (1 << 5)
|
||||
#define SPEAR310_WAKEUP_SMII2_IRQ_MASK (1 << 6)
|
||||
#define SPEAR310_WAKEUP_SMII3_IRQ_MASK (1 << 7)
|
||||
#define SPEAR310_UART1_IRQ_MASK (1 << 8)
|
||||
#define SPEAR310_UART2_IRQ_MASK (1 << 9)
|
||||
#define SPEAR310_UART3_IRQ_MASK (1 << 10)
|
||||
#define SPEAR310_UART4_IRQ_MASK (1 << 11)
|
||||
#define SPEAR310_UART5_IRQ_MASK (1 << 12)
|
||||
#define SPEAR310_EMI_IRQ_MASK (1 << 13)
|
||||
#define SPEAR310_TDM_HDLC_IRQ_MASK (1 << 14)
|
||||
#define SPEAR310_RS485_0_IRQ_MASK (1 << 15)
|
||||
#define SPEAR310_RS485_1_IRQ_MASK (1 << 16)
|
||||
|
||||
#define SPEAR310_SHIRQ_RAS1_MASK 0x000FF
|
||||
#define SPEAR310_SHIRQ_RAS2_MASK 0x01F00
|
||||
#define SPEAR310_SHIRQ_RAS3_MASK 0x02000
|
||||
#define SPEAR310_SHIRQ_INTRCOMM_RAS_MASK 0x1C000
|
||||
|
||||
/* SPEAr310 Virtual irq definitions */
|
||||
/* IRQs sharing IRQ_GEN_RAS_1 */
|
||||
#define SPEAR310_VIRQ_SMII0 (SPEAR3XX_VIRQ_START + 0)
|
||||
#define SPEAR310_VIRQ_SMII1 (SPEAR3XX_VIRQ_START + 1)
|
||||
#define SPEAR310_VIRQ_SMII2 (SPEAR3XX_VIRQ_START + 2)
|
||||
#define SPEAR310_VIRQ_SMII3 (SPEAR3XX_VIRQ_START + 3)
|
||||
#define SPEAR310_VIRQ_WAKEUP_SMII0 (SPEAR3XX_VIRQ_START + 4)
|
||||
#define SPEAR310_VIRQ_WAKEUP_SMII1 (SPEAR3XX_VIRQ_START + 5)
|
||||
#define SPEAR310_VIRQ_WAKEUP_SMII2 (SPEAR3XX_VIRQ_START + 6)
|
||||
#define SPEAR310_VIRQ_WAKEUP_SMII3 (SPEAR3XX_VIRQ_START + 7)
|
||||
|
||||
/* IRQs sharing IRQ_GEN_RAS_2 */
|
||||
#define SPEAR310_VIRQ_UART1 (SPEAR3XX_VIRQ_START + 8)
|
||||
#define SPEAR310_VIRQ_UART2 (SPEAR3XX_VIRQ_START + 9)
|
||||
#define SPEAR310_VIRQ_UART3 (SPEAR3XX_VIRQ_START + 10)
|
||||
#define SPEAR310_VIRQ_UART4 (SPEAR3XX_VIRQ_START + 11)
|
||||
#define SPEAR310_VIRQ_UART5 (SPEAR3XX_VIRQ_START + 12)
|
||||
|
||||
/* IRQs sharing IRQ_GEN_RAS_3 */
|
||||
#define SPEAR310_VIRQ_EMI (SPEAR3XX_VIRQ_START + 13)
|
||||
#define SPEAR310_VIRQ_PLGPIO (SPEAR3XX_VIRQ_START + 14)
|
||||
|
||||
/* IRQs sharing IRQ_INTRCOMM_RAS_ARM */
|
||||
#define SPEAR310_VIRQ_TDM_HDLC (SPEAR3XX_VIRQ_START + 15)
|
||||
#define SPEAR310_VIRQ_RS485_0 (SPEAR3XX_VIRQ_START + 16)
|
||||
#define SPEAR310_VIRQ_RS485_1 (SPEAR3XX_VIRQ_START + 17)
|
||||
|
||||
|
||||
/* pad multiplexing support */
|
||||
/* muxing registers */
|
||||
@ -255,17 +320,271 @@ static struct spear_shirq shirq_intrcomm_ras = {
|
||||
},
|
||||
};
|
||||
|
||||
/* Add spear310 specific devices here */
|
||||
/* padmux devices to enable */
|
||||
static struct pmx_dev *spear310_evb_pmx_devs[] = {
|
||||
/* spear3xx specific devices */
|
||||
&spear3xx_pmx_i2c,
|
||||
&spear3xx_pmx_ssp,
|
||||
&spear3xx_pmx_gpio_pin0,
|
||||
&spear3xx_pmx_gpio_pin1,
|
||||
&spear3xx_pmx_gpio_pin2,
|
||||
&spear3xx_pmx_gpio_pin3,
|
||||
&spear3xx_pmx_gpio_pin4,
|
||||
&spear3xx_pmx_gpio_pin5,
|
||||
&spear3xx_pmx_uart0,
|
||||
|
||||
/* spear310 routines */
|
||||
void __init spear310_init(struct pmx_mode *pmx_mode, struct pmx_dev **pmx_devs,
|
||||
u8 pmx_dev_count)
|
||||
/* spear310 specific devices */
|
||||
&spear310_pmx_emi_cs_0_1_4_5,
|
||||
&spear310_pmx_emi_cs_2_3,
|
||||
&spear310_pmx_uart1,
|
||||
&spear310_pmx_uart2,
|
||||
&spear310_pmx_uart3_4_5,
|
||||
&spear310_pmx_fsmc,
|
||||
&spear310_pmx_rs485_0_1,
|
||||
&spear310_pmx_tdm0,
|
||||
};
|
||||
|
||||
/* DMAC platform data's slave info */
|
||||
struct pl08x_channel_data spear310_dma_info[] = {
|
||||
{
|
||||
.bus_id = "uart0_rx",
|
||||
.min_signal = 2,
|
||||
.max_signal = 2,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "uart0_tx",
|
||||
.min_signal = 3,
|
||||
.max_signal = 3,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ssp0_rx",
|
||||
.min_signal = 8,
|
||||
.max_signal = 8,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ssp0_tx",
|
||||
.min_signal = 9,
|
||||
.max_signal = 9,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "i2c_rx",
|
||||
.min_signal = 10,
|
||||
.max_signal = 10,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "i2c_tx",
|
||||
.min_signal = 11,
|
||||
.max_signal = 11,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "irda",
|
||||
.min_signal = 12,
|
||||
.max_signal = 12,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "adc",
|
||||
.min_signal = 13,
|
||||
.max_signal = 13,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "to_jpeg",
|
||||
.min_signal = 14,
|
||||
.max_signal = 14,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "from_jpeg",
|
||||
.min_signal = 15,
|
||||
.max_signal = 15,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "uart1_rx",
|
||||
.min_signal = 0,
|
||||
.max_signal = 0,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "uart1_tx",
|
||||
.min_signal = 1,
|
||||
.max_signal = 1,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "uart2_rx",
|
||||
.min_signal = 2,
|
||||
.max_signal = 2,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "uart2_tx",
|
||||
.min_signal = 3,
|
||||
.max_signal = 3,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "uart3_rx",
|
||||
.min_signal = 4,
|
||||
.max_signal = 4,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "uart3_tx",
|
||||
.min_signal = 5,
|
||||
.max_signal = 5,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "uart4_rx",
|
||||
.min_signal = 6,
|
||||
.max_signal = 6,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "uart4_tx",
|
||||
.min_signal = 7,
|
||||
.max_signal = 7,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "uart5_rx",
|
||||
.min_signal = 8,
|
||||
.max_signal = 8,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "uart5_tx",
|
||||
.min_signal = 9,
|
||||
.max_signal = 9,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ras5_rx",
|
||||
.min_signal = 10,
|
||||
.max_signal = 10,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ras5_tx",
|
||||
.min_signal = 11,
|
||||
.max_signal = 11,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ras6_rx",
|
||||
.min_signal = 12,
|
||||
.max_signal = 12,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ras6_tx",
|
||||
.min_signal = 13,
|
||||
.max_signal = 13,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ras7_rx",
|
||||
.min_signal = 14,
|
||||
.max_signal = 14,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ras7_tx",
|
||||
.min_signal = 15,
|
||||
.max_signal = 15,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
},
|
||||
};
|
||||
|
||||
/* uart devices plat data */
|
||||
static struct amba_pl011_data spear310_uart_data[] = {
|
||||
{
|
||||
.dma_filter = pl08x_filter_id,
|
||||
.dma_tx_param = "uart1_tx",
|
||||
.dma_rx_param = "uart1_rx",
|
||||
}, {
|
||||
.dma_filter = pl08x_filter_id,
|
||||
.dma_tx_param = "uart2_tx",
|
||||
.dma_rx_param = "uart2_rx",
|
||||
}, {
|
||||
.dma_filter = pl08x_filter_id,
|
||||
.dma_tx_param = "uart3_tx",
|
||||
.dma_rx_param = "uart3_rx",
|
||||
}, {
|
||||
.dma_filter = pl08x_filter_id,
|
||||
.dma_tx_param = "uart4_tx",
|
||||
.dma_rx_param = "uart4_rx",
|
||||
}, {
|
||||
.dma_filter = pl08x_filter_id,
|
||||
.dma_tx_param = "uart5_tx",
|
||||
.dma_rx_param = "uart5_rx",
|
||||
},
|
||||
};
|
||||
|
||||
/* Add SPEAr310 auxdata to pass platform data */
|
||||
static struct of_dev_auxdata spear310_auxdata_lookup[] __initdata = {
|
||||
OF_DEV_AUXDATA("arm,pl022", SPEAR3XX_ICM1_SSP_BASE, NULL,
|
||||
&pl022_plat_data),
|
||||
OF_DEV_AUXDATA("arm,pl080", SPEAR3XX_ICM3_DMA_BASE, NULL,
|
||||
&pl080_plat_data),
|
||||
OF_DEV_AUXDATA("arm,pl011", SPEAR310_UART1_BASE, NULL,
|
||||
&spear310_uart_data[0]),
|
||||
OF_DEV_AUXDATA("arm,pl011", SPEAR310_UART2_BASE, NULL,
|
||||
&spear310_uart_data[1]),
|
||||
OF_DEV_AUXDATA("arm,pl011", SPEAR310_UART3_BASE, NULL,
|
||||
&spear310_uart_data[2]),
|
||||
OF_DEV_AUXDATA("arm,pl011", SPEAR310_UART4_BASE, NULL,
|
||||
&spear310_uart_data[3]),
|
||||
OF_DEV_AUXDATA("arm,pl011", SPEAR310_UART5_BASE, NULL,
|
||||
&spear310_uart_data[4]),
|
||||
{}
|
||||
};
|
||||
|
||||
static void __init spear310_dt_init(void)
|
||||
{
|
||||
void __iomem *base;
|
||||
int ret = 0;
|
||||
|
||||
/* call spear3xx family common init function */
|
||||
spear3xx_init();
|
||||
pl080_plat_data.slave_channels = spear310_dma_info;
|
||||
pl080_plat_data.num_slave_channels = ARRAY_SIZE(spear310_dma_info);
|
||||
|
||||
of_platform_populate(NULL, of_default_bus_match_table,
|
||||
spear310_auxdata_lookup, NULL);
|
||||
|
||||
/* shared irq registration */
|
||||
base = ioremap(SPEAR310_SOC_CONFIG_BASE, SZ_4K);
|
||||
@ -274,35 +593,59 @@ void __init spear310_init(struct pmx_mode *pmx_mode, struct pmx_dev **pmx_devs,
|
||||
shirq_ras1.regs.base = base;
|
||||
ret = spear_shirq_register(&shirq_ras1);
|
||||
if (ret)
|
||||
printk(KERN_ERR "Error registering Shared IRQ 1\n");
|
||||
pr_err("Error registering Shared IRQ 1\n");
|
||||
|
||||
/* shirq 2 */
|
||||
shirq_ras2.regs.base = base;
|
||||
ret = spear_shirq_register(&shirq_ras2);
|
||||
if (ret)
|
||||
printk(KERN_ERR "Error registering Shared IRQ 2\n");
|
||||
pr_err("Error registering Shared IRQ 2\n");
|
||||
|
||||
/* shirq 3 */
|
||||
shirq_ras3.regs.base = base;
|
||||
ret = spear_shirq_register(&shirq_ras3);
|
||||
if (ret)
|
||||
printk(KERN_ERR "Error registering Shared IRQ 3\n");
|
||||
pr_err("Error registering Shared IRQ 3\n");
|
||||
|
||||
/* shirq 4 */
|
||||
shirq_intrcomm_ras.regs.base = base;
|
||||
ret = spear_shirq_register(&shirq_intrcomm_ras);
|
||||
if (ret)
|
||||
printk(KERN_ERR "Error registering Shared IRQ 4\n");
|
||||
pr_err("Error registering Shared IRQ 4\n");
|
||||
}
|
||||
|
||||
/* pmx initialization */
|
||||
pmx_driver.base = base;
|
||||
pmx_driver.mode = pmx_mode;
|
||||
pmx_driver.devs = pmx_devs;
|
||||
pmx_driver.devs_count = pmx_dev_count;
|
||||
if (of_machine_is_compatible("st,spear310-evb")) {
|
||||
/* pmx initialization */
|
||||
pmx_driver.base = base;
|
||||
pmx_driver.mode = NULL;
|
||||
pmx_driver.devs = spear310_evb_pmx_devs;
|
||||
pmx_driver.devs_count = ARRAY_SIZE(spear310_evb_pmx_devs);
|
||||
|
||||
ret = pmx_register(&pmx_driver);
|
||||
if (ret)
|
||||
printk(KERN_ERR "padmux: registration failed. err no: %d\n",
|
||||
ret);
|
||||
ret = pmx_register(&pmx_driver);
|
||||
if (ret)
|
||||
pr_err("padmux: registration failed. err no: %d\n",
|
||||
ret);
|
||||
}
|
||||
}
|
||||
|
||||
static const char * const spear310_dt_board_compat[] = {
|
||||
"st,spear310",
|
||||
"st,spear310-evb",
|
||||
NULL,
|
||||
};
|
||||
|
||||
static void __init spear310_map_io(void)
|
||||
{
|
||||
spear3xx_map_io();
|
||||
spear310_clk_init();
|
||||
}
|
||||
|
||||
DT_MACHINE_START(SPEAR310_DT, "ST SPEAr310 SoC with Flattened Device Tree")
|
||||
.map_io = spear310_map_io,
|
||||
.init_irq = spear3xx_dt_init_irq,
|
||||
.handle_irq = vic_handle_irq,
|
||||
.timer = &spear3xx_timer,
|
||||
.init_machine = spear310_dt_init,
|
||||
.restart = spear_restart,
|
||||
.dt_compat = spear310_dt_board_compat,
|
||||
MACHINE_END
|
||||
|
@ -1,81 +0,0 @@
|
||||
/*
|
||||
* arch/arm/mach-spear3xx/spear310_evb.c
|
||||
*
|
||||
* SPEAr310 evaluation board source file
|
||||
*
|
||||
* Copyright (C) 2009 ST Microelectronics
|
||||
* Viresh Kumar<viresh.kumar@st.com>
|
||||
*
|
||||
* 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 <asm/hardware/vic.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <mach/generic.h>
|
||||
#include <mach/hardware.h>
|
||||
|
||||
/* padmux devices to enable */
|
||||
static struct pmx_dev *pmx_devs[] = {
|
||||
/* spear3xx specific devices */
|
||||
&spear3xx_pmx_i2c,
|
||||
&spear3xx_pmx_ssp,
|
||||
&spear3xx_pmx_gpio_pin0,
|
||||
&spear3xx_pmx_gpio_pin1,
|
||||
&spear3xx_pmx_gpio_pin2,
|
||||
&spear3xx_pmx_gpio_pin3,
|
||||
&spear3xx_pmx_gpio_pin4,
|
||||
&spear3xx_pmx_gpio_pin5,
|
||||
&spear3xx_pmx_uart0,
|
||||
|
||||
/* spear310 specific devices */
|
||||
&spear310_pmx_emi_cs_0_1_4_5,
|
||||
&spear310_pmx_emi_cs_2_3,
|
||||
&spear310_pmx_uart1,
|
||||
&spear310_pmx_uart2,
|
||||
&spear310_pmx_uart3_4_5,
|
||||
&spear310_pmx_fsmc,
|
||||
&spear310_pmx_rs485_0_1,
|
||||
&spear310_pmx_tdm0,
|
||||
};
|
||||
|
||||
static struct amba_device *amba_devs[] __initdata = {
|
||||
/* spear3xx specific devices */
|
||||
&spear3xx_gpio_device,
|
||||
&spear3xx_uart_device,
|
||||
|
||||
/* spear310 specific devices */
|
||||
};
|
||||
|
||||
static struct platform_device *plat_devs[] __initdata = {
|
||||
/* spear3xx specific devices */
|
||||
|
||||
/* spear310 specific devices */
|
||||
};
|
||||
|
||||
static void __init spear310_evb_init(void)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
/* call spear310 machine init function */
|
||||
spear310_init(NULL, pmx_devs, ARRAY_SIZE(pmx_devs));
|
||||
|
||||
/* Add Platform Devices */
|
||||
platform_add_devices(plat_devs, ARRAY_SIZE(plat_devs));
|
||||
|
||||
/* Add Amba Devices */
|
||||
for (i = 0; i < ARRAY_SIZE(amba_devs); i++)
|
||||
amba_device_register(amba_devs[i], &iomem_resource);
|
||||
}
|
||||
|
||||
MACHINE_START(SPEAR310, "ST-SPEAR310-EVB")
|
||||
.atag_offset = 0x100,
|
||||
.map_io = spear3xx_map_io,
|
||||
.init_irq = spear3xx_init_irq,
|
||||
.handle_irq = vic_handle_irq,
|
||||
.timer = &spear3xx_timer,
|
||||
.init_machine = spear310_evb_init,
|
||||
.restart = spear_restart,
|
||||
MACHINE_END
|
@ -3,19 +3,85 @@
|
||||
*
|
||||
* SPEAr320 machine source file
|
||||
*
|
||||
* Copyright (C) 2009 ST Microelectronics
|
||||
* Viresh Kumar<viresh.kumar@st.com>
|
||||
* Copyright (C) 2009-2012 ST Microelectronics
|
||||
* Viresh Kumar <viresh.kumar@st.com>
|
||||
*
|
||||
* 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 <linux/ptrace.h>
|
||||
#include <asm/irq.h>
|
||||
#define pr_fmt(fmt) "SPEAr320: " fmt
|
||||
|
||||
#include <linux/amba/pl022.h>
|
||||
#include <linux/amba/pl08x.h>
|
||||
#include <linux/amba/serial.h>
|
||||
#include <linux/of_platform.h>
|
||||
#include <asm/hardware/vic.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <plat/shirq.h>
|
||||
#include <mach/generic.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/spear.h>
|
||||
|
||||
#define SPEAR320_UART1_BASE UL(0xA3000000)
|
||||
#define SPEAR320_UART2_BASE UL(0xA4000000)
|
||||
#define SPEAR320_SSP0_BASE UL(0xA5000000)
|
||||
#define SPEAR320_SSP1_BASE UL(0xA6000000)
|
||||
#define SPEAR320_SOC_CONFIG_BASE UL(0xB3000000)
|
||||
|
||||
/* Interrupt registers offsets and masks */
|
||||
#define SPEAR320_INT_STS_MASK_REG 0x04
|
||||
#define SPEAR320_INT_CLR_MASK_REG 0x04
|
||||
#define SPEAR320_INT_ENB_MASK_REG 0x08
|
||||
#define SPEAR320_GPIO_IRQ_MASK (1 << 0)
|
||||
#define SPEAR320_I2S_PLAY_IRQ_MASK (1 << 1)
|
||||
#define SPEAR320_I2S_REC_IRQ_MASK (1 << 2)
|
||||
#define SPEAR320_EMI_IRQ_MASK (1 << 7)
|
||||
#define SPEAR320_CLCD_IRQ_MASK (1 << 8)
|
||||
#define SPEAR320_SPP_IRQ_MASK (1 << 9)
|
||||
#define SPEAR320_SDHCI_IRQ_MASK (1 << 10)
|
||||
#define SPEAR320_CAN_U_IRQ_MASK (1 << 11)
|
||||
#define SPEAR320_CAN_L_IRQ_MASK (1 << 12)
|
||||
#define SPEAR320_UART1_IRQ_MASK (1 << 13)
|
||||
#define SPEAR320_UART2_IRQ_MASK (1 << 14)
|
||||
#define SPEAR320_SSP1_IRQ_MASK (1 << 15)
|
||||
#define SPEAR320_SSP2_IRQ_MASK (1 << 16)
|
||||
#define SPEAR320_SMII0_IRQ_MASK (1 << 17)
|
||||
#define SPEAR320_MII1_SMII1_IRQ_MASK (1 << 18)
|
||||
#define SPEAR320_WAKEUP_SMII0_IRQ_MASK (1 << 19)
|
||||
#define SPEAR320_WAKEUP_MII1_SMII1_IRQ_MASK (1 << 20)
|
||||
#define SPEAR320_I2C1_IRQ_MASK (1 << 21)
|
||||
|
||||
#define SPEAR320_SHIRQ_RAS1_MASK 0x000380
|
||||
#define SPEAR320_SHIRQ_RAS3_MASK 0x000007
|
||||
#define SPEAR320_SHIRQ_INTRCOMM_RAS_MASK 0x3FF800
|
||||
|
||||
/* SPEAr320 Virtual irq definitions */
|
||||
/* IRQs sharing IRQ_GEN_RAS_1 */
|
||||
#define SPEAR320_VIRQ_EMI (SPEAR3XX_VIRQ_START + 0)
|
||||
#define SPEAR320_VIRQ_CLCD (SPEAR3XX_VIRQ_START + 1)
|
||||
#define SPEAR320_VIRQ_SPP (SPEAR3XX_VIRQ_START + 2)
|
||||
|
||||
/* IRQs sharing IRQ_GEN_RAS_2 */
|
||||
#define SPEAR320_IRQ_SDHCI SPEAR3XX_IRQ_GEN_RAS_2
|
||||
|
||||
/* IRQs sharing IRQ_GEN_RAS_3 */
|
||||
#define SPEAR320_VIRQ_PLGPIO (SPEAR3XX_VIRQ_START + 3)
|
||||
#define SPEAR320_VIRQ_I2S_PLAY (SPEAR3XX_VIRQ_START + 4)
|
||||
#define SPEAR320_VIRQ_I2S_REC (SPEAR3XX_VIRQ_START + 5)
|
||||
|
||||
/* IRQs sharing IRQ_INTRCOMM_RAS_ARM */
|
||||
#define SPEAR320_VIRQ_CANU (SPEAR3XX_VIRQ_START + 6)
|
||||
#define SPEAR320_VIRQ_CANL (SPEAR3XX_VIRQ_START + 7)
|
||||
#define SPEAR320_VIRQ_UART1 (SPEAR3XX_VIRQ_START + 8)
|
||||
#define SPEAR320_VIRQ_UART2 (SPEAR3XX_VIRQ_START + 9)
|
||||
#define SPEAR320_VIRQ_SSP1 (SPEAR3XX_VIRQ_START + 10)
|
||||
#define SPEAR320_VIRQ_SSP2 (SPEAR3XX_VIRQ_START + 11)
|
||||
#define SPEAR320_VIRQ_SMII0 (SPEAR3XX_VIRQ_START + 12)
|
||||
#define SPEAR320_VIRQ_MII1_SMII1 (SPEAR3XX_VIRQ_START + 13)
|
||||
#define SPEAR320_VIRQ_WAKEUP_SMII0 (SPEAR3XX_VIRQ_START + 14)
|
||||
#define SPEAR320_VIRQ_WAKEUP_MII1_SMII1 (SPEAR3XX_VIRQ_START + 15)
|
||||
#define SPEAR320_VIRQ_I2C1 (SPEAR3XX_VIRQ_START + 16)
|
||||
|
||||
/* pad multiplexing support */
|
||||
/* muxing registers */
|
||||
@ -508,17 +574,271 @@ static struct spear_shirq shirq_intrcomm_ras = {
|
||||
},
|
||||
};
|
||||
|
||||
/* Add spear320 specific devices here */
|
||||
/* padmux devices to enable */
|
||||
static struct pmx_dev *spear320_evb_pmx_devs[] = {
|
||||
/* spear3xx specific devices */
|
||||
&spear3xx_pmx_i2c,
|
||||
&spear3xx_pmx_ssp,
|
||||
&spear3xx_pmx_mii,
|
||||
&spear3xx_pmx_uart0,
|
||||
|
||||
/* spear320 routines */
|
||||
void __init spear320_init(struct pmx_mode *pmx_mode, struct pmx_dev **pmx_devs,
|
||||
u8 pmx_dev_count)
|
||||
/* spear320 specific devices */
|
||||
&spear320_pmx_fsmc,
|
||||
&spear320_pmx_sdhci,
|
||||
&spear320_pmx_i2s,
|
||||
&spear320_pmx_uart1,
|
||||
&spear320_pmx_uart2,
|
||||
&spear320_pmx_can,
|
||||
&spear320_pmx_pwm0,
|
||||
&spear320_pmx_pwm1,
|
||||
&spear320_pmx_pwm2,
|
||||
&spear320_pmx_mii1,
|
||||
};
|
||||
|
||||
/* DMAC platform data's slave info */
|
||||
struct pl08x_channel_data spear320_dma_info[] = {
|
||||
{
|
||||
.bus_id = "uart0_rx",
|
||||
.min_signal = 2,
|
||||
.max_signal = 2,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "uart0_tx",
|
||||
.min_signal = 3,
|
||||
.max_signal = 3,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ssp0_rx",
|
||||
.min_signal = 8,
|
||||
.max_signal = 8,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ssp0_tx",
|
||||
.min_signal = 9,
|
||||
.max_signal = 9,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "i2c0_rx",
|
||||
.min_signal = 10,
|
||||
.max_signal = 10,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "i2c0_tx",
|
||||
.min_signal = 11,
|
||||
.max_signal = 11,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "irda",
|
||||
.min_signal = 12,
|
||||
.max_signal = 12,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "adc",
|
||||
.min_signal = 13,
|
||||
.max_signal = 13,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "to_jpeg",
|
||||
.min_signal = 14,
|
||||
.max_signal = 14,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "from_jpeg",
|
||||
.min_signal = 15,
|
||||
.max_signal = 15,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ssp1_rx",
|
||||
.min_signal = 0,
|
||||
.max_signal = 0,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB2,
|
||||
}, {
|
||||
.bus_id = "ssp1_tx",
|
||||
.min_signal = 1,
|
||||
.max_signal = 1,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB2,
|
||||
}, {
|
||||
.bus_id = "ssp2_rx",
|
||||
.min_signal = 2,
|
||||
.max_signal = 2,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB2,
|
||||
}, {
|
||||
.bus_id = "ssp2_tx",
|
||||
.min_signal = 3,
|
||||
.max_signal = 3,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB2,
|
||||
}, {
|
||||
.bus_id = "uart1_rx",
|
||||
.min_signal = 4,
|
||||
.max_signal = 4,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB2,
|
||||
}, {
|
||||
.bus_id = "uart1_tx",
|
||||
.min_signal = 5,
|
||||
.max_signal = 5,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB2,
|
||||
}, {
|
||||
.bus_id = "uart2_rx",
|
||||
.min_signal = 6,
|
||||
.max_signal = 6,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB2,
|
||||
}, {
|
||||
.bus_id = "uart2_tx",
|
||||
.min_signal = 7,
|
||||
.max_signal = 7,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB2,
|
||||
}, {
|
||||
.bus_id = "i2c1_rx",
|
||||
.min_signal = 8,
|
||||
.max_signal = 8,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB2,
|
||||
}, {
|
||||
.bus_id = "i2c1_tx",
|
||||
.min_signal = 9,
|
||||
.max_signal = 9,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB2,
|
||||
}, {
|
||||
.bus_id = "i2c2_rx",
|
||||
.min_signal = 10,
|
||||
.max_signal = 10,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB2,
|
||||
}, {
|
||||
.bus_id = "i2c2_tx",
|
||||
.min_signal = 11,
|
||||
.max_signal = 11,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB2,
|
||||
}, {
|
||||
.bus_id = "i2s_rx",
|
||||
.min_signal = 12,
|
||||
.max_signal = 12,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB2,
|
||||
}, {
|
||||
.bus_id = "i2s_tx",
|
||||
.min_signal = 13,
|
||||
.max_signal = 13,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB2,
|
||||
}, {
|
||||
.bus_id = "rs485_rx",
|
||||
.min_signal = 14,
|
||||
.max_signal = 14,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB2,
|
||||
}, {
|
||||
.bus_id = "rs485_tx",
|
||||
.min_signal = 15,
|
||||
.max_signal = 15,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB2,
|
||||
},
|
||||
};
|
||||
|
||||
static struct pl022_ssp_controller spear320_ssp_data[] = {
|
||||
{
|
||||
.bus_id = 1,
|
||||
.enable_dma = 1,
|
||||
.dma_filter = pl08x_filter_id,
|
||||
.dma_tx_param = "ssp1_tx",
|
||||
.dma_rx_param = "ssp1_rx",
|
||||
.num_chipselect = 2,
|
||||
}, {
|
||||
.bus_id = 2,
|
||||
.enable_dma = 1,
|
||||
.dma_filter = pl08x_filter_id,
|
||||
.dma_tx_param = "ssp2_tx",
|
||||
.dma_rx_param = "ssp2_rx",
|
||||
.num_chipselect = 2,
|
||||
}
|
||||
};
|
||||
|
||||
static struct amba_pl011_data spear320_uart_data[] = {
|
||||
{
|
||||
.dma_filter = pl08x_filter_id,
|
||||
.dma_tx_param = "uart1_tx",
|
||||
.dma_rx_param = "uart1_rx",
|
||||
}, {
|
||||
.dma_filter = pl08x_filter_id,
|
||||
.dma_tx_param = "uart2_tx",
|
||||
.dma_rx_param = "uart2_rx",
|
||||
},
|
||||
};
|
||||
|
||||
/* Add SPEAr310 auxdata to pass platform data */
|
||||
static struct of_dev_auxdata spear320_auxdata_lookup[] __initdata = {
|
||||
OF_DEV_AUXDATA("arm,pl022", SPEAR3XX_ICM1_SSP_BASE, NULL,
|
||||
&pl022_plat_data),
|
||||
OF_DEV_AUXDATA("arm,pl080", SPEAR3XX_ICM3_DMA_BASE, NULL,
|
||||
&pl080_plat_data),
|
||||
OF_DEV_AUXDATA("arm,pl022", SPEAR320_SSP0_BASE, NULL,
|
||||
&spear320_ssp_data[0]),
|
||||
OF_DEV_AUXDATA("arm,pl022", SPEAR320_SSP1_BASE, NULL,
|
||||
&spear320_ssp_data[1]),
|
||||
OF_DEV_AUXDATA("arm,pl011", SPEAR320_UART1_BASE, NULL,
|
||||
&spear320_uart_data[0]),
|
||||
OF_DEV_AUXDATA("arm,pl011", SPEAR320_UART2_BASE, NULL,
|
||||
&spear320_uart_data[1]),
|
||||
{}
|
||||
};
|
||||
|
||||
static void __init spear320_dt_init(void)
|
||||
{
|
||||
void __iomem *base;
|
||||
int ret = 0;
|
||||
|
||||
/* call spear3xx family common init function */
|
||||
spear3xx_init();
|
||||
pl080_plat_data.slave_channels = spear320_dma_info;
|
||||
pl080_plat_data.num_slave_channels = ARRAY_SIZE(spear320_dma_info);
|
||||
|
||||
of_platform_populate(NULL, of_default_bus_match_table,
|
||||
spear320_auxdata_lookup, NULL);
|
||||
|
||||
/* shared irq registration */
|
||||
base = ioremap(SPEAR320_SOC_CONFIG_BASE, SZ_4K);
|
||||
@ -527,29 +847,53 @@ void __init spear320_init(struct pmx_mode *pmx_mode, struct pmx_dev **pmx_devs,
|
||||
shirq_ras1.regs.base = base;
|
||||
ret = spear_shirq_register(&shirq_ras1);
|
||||
if (ret)
|
||||
printk(KERN_ERR "Error registering Shared IRQ 1\n");
|
||||
pr_err("Error registering Shared IRQ 1\n");
|
||||
|
||||
/* shirq 3 */
|
||||
shirq_ras3.regs.base = base;
|
||||
ret = spear_shirq_register(&shirq_ras3);
|
||||
if (ret)
|
||||
printk(KERN_ERR "Error registering Shared IRQ 3\n");
|
||||
pr_err("Error registering Shared IRQ 3\n");
|
||||
|
||||
/* shirq 4 */
|
||||
shirq_intrcomm_ras.regs.base = base;
|
||||
ret = spear_shirq_register(&shirq_intrcomm_ras);
|
||||
if (ret)
|
||||
printk(KERN_ERR "Error registering Shared IRQ 4\n");
|
||||
pr_err("Error registering Shared IRQ 4\n");
|
||||
}
|
||||
|
||||
/* pmx initialization */
|
||||
pmx_driver.base = base;
|
||||
pmx_driver.mode = pmx_mode;
|
||||
pmx_driver.devs = pmx_devs;
|
||||
pmx_driver.devs_count = pmx_dev_count;
|
||||
if (of_machine_is_compatible("st,spear320-evb")) {
|
||||
/* pmx initialization */
|
||||
pmx_driver.base = base;
|
||||
pmx_driver.mode = &spear320_auto_net_mii_mode;
|
||||
pmx_driver.devs = spear320_evb_pmx_devs;
|
||||
pmx_driver.devs_count = ARRAY_SIZE(spear320_evb_pmx_devs);
|
||||
|
||||
ret = pmx_register(&pmx_driver);
|
||||
if (ret)
|
||||
printk(KERN_ERR "padmux: registration failed. err no: %d\n",
|
||||
ret);
|
||||
ret = pmx_register(&pmx_driver);
|
||||
if (ret)
|
||||
pr_err("padmux: registration failed. err no: %d\n",
|
||||
ret);
|
||||
}
|
||||
}
|
||||
|
||||
static const char * const spear320_dt_board_compat[] = {
|
||||
"st,spear320",
|
||||
"st,spear320-evb",
|
||||
NULL,
|
||||
};
|
||||
|
||||
static void __init spear320_map_io(void)
|
||||
{
|
||||
spear3xx_map_io();
|
||||
spear320_clk_init();
|
||||
}
|
||||
|
||||
DT_MACHINE_START(SPEAR320_DT, "ST SPEAr320 SoC with Flattened Device Tree")
|
||||
.map_io = spear320_map_io,
|
||||
.init_irq = spear3xx_dt_init_irq,
|
||||
.handle_irq = vic_handle_irq,
|
||||
.timer = &spear3xx_timer,
|
||||
.init_machine = spear320_dt_init,
|
||||
.restart = spear_restart,
|
||||
.dt_compat = spear320_dt_board_compat,
|
||||
MACHINE_END
|
||||
|
@ -1,79 +0,0 @@
|
||||
/*
|
||||
* arch/arm/mach-spear3xx/spear320_evb.c
|
||||
*
|
||||
* SPEAr320 evaluation board source file
|
||||
*
|
||||
* Copyright (C) 2009 ST Microelectronics
|
||||
* Viresh Kumar<viresh.kumar@st.com>
|
||||
*
|
||||
* 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 <asm/hardware/vic.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <mach/generic.h>
|
||||
#include <mach/hardware.h>
|
||||
|
||||
/* padmux devices to enable */
|
||||
static struct pmx_dev *pmx_devs[] = {
|
||||
/* spear3xx specific devices */
|
||||
&spear3xx_pmx_i2c,
|
||||
&spear3xx_pmx_ssp,
|
||||
&spear3xx_pmx_mii,
|
||||
&spear3xx_pmx_uart0,
|
||||
|
||||
/* spear320 specific devices */
|
||||
&spear320_pmx_fsmc,
|
||||
&spear320_pmx_sdhci,
|
||||
&spear320_pmx_i2s,
|
||||
&spear320_pmx_uart1,
|
||||
&spear320_pmx_uart2,
|
||||
&spear320_pmx_can,
|
||||
&spear320_pmx_pwm0,
|
||||
&spear320_pmx_pwm1,
|
||||
&spear320_pmx_pwm2,
|
||||
&spear320_pmx_mii1,
|
||||
};
|
||||
|
||||
static struct amba_device *amba_devs[] __initdata = {
|
||||
/* spear3xx specific devices */
|
||||
&spear3xx_gpio_device,
|
||||
&spear3xx_uart_device,
|
||||
|
||||
/* spear320 specific devices */
|
||||
};
|
||||
|
||||
static struct platform_device *plat_devs[] __initdata = {
|
||||
/* spear3xx specific devices */
|
||||
|
||||
/* spear320 specific devices */
|
||||
};
|
||||
|
||||
static void __init spear320_evb_init(void)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
/* call spear320 machine init function */
|
||||
spear320_init(&spear320_auto_net_mii_mode, pmx_devs,
|
||||
ARRAY_SIZE(pmx_devs));
|
||||
|
||||
/* Add Platform Devices */
|
||||
platform_add_devices(plat_devs, ARRAY_SIZE(plat_devs));
|
||||
|
||||
/* Add Amba Devices */
|
||||
for (i = 0; i < ARRAY_SIZE(amba_devs); i++)
|
||||
amba_device_register(amba_devs[i], &iomem_resource);
|
||||
}
|
||||
|
||||
MACHINE_START(SPEAR320, "ST-SPEAR320-EVB")
|
||||
.atag_offset = 0x100,
|
||||
.map_io = spear3xx_map_io,
|
||||
.init_irq = spear3xx_init_irq,
|
||||
.handle_irq = vic_handle_irq,
|
||||
.timer = &spear3xx_timer,
|
||||
.init_machine = spear320_evb_init,
|
||||
.restart = spear_restart,
|
||||
MACHINE_END
|
@ -3,83 +3,25 @@
|
||||
*
|
||||
* SPEAr3XX machines common source file
|
||||
*
|
||||
* Copyright (C) 2009 ST Microelectronics
|
||||
* Viresh Kumar<viresh.kumar@st.com>
|
||||
* Copyright (C) 2009-2012 ST Microelectronics
|
||||
* Viresh Kumar <viresh.kumar@st.com>
|
||||
*
|
||||
* 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 <linux/types.h>
|
||||
#include <linux/amba/pl061.h>
|
||||
#include <linux/ptrace.h>
|
||||
#define pr_fmt(fmt) "SPEAr3xx: " fmt
|
||||
|
||||
#include <linux/amba/pl022.h>
|
||||
#include <linux/amba/pl08x.h>
|
||||
#include <linux/of_irq.h>
|
||||
#include <linux/io.h>
|
||||
#include <asm/hardware/pl080.h>
|
||||
#include <asm/hardware/vic.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <plat/pl080.h>
|
||||
#include <mach/generic.h>
|
||||
#include <mach/hardware.h>
|
||||
|
||||
/* Add spear3xx machines common devices here */
|
||||
/* gpio device registration */
|
||||
static struct pl061_platform_data gpio_plat_data = {
|
||||
.gpio_base = 0,
|
||||
.irq_base = SPEAR3XX_GPIO_INT_BASE,
|
||||
};
|
||||
|
||||
AMBA_APB_DEVICE(spear3xx_gpio, "gpio", 0, SPEAR3XX_ICM3_GPIO_BASE,
|
||||
{SPEAR3XX_IRQ_BASIC_GPIO}, &gpio_plat_data);
|
||||
|
||||
/* uart device registration */
|
||||
AMBA_APB_DEVICE(spear3xx_uart, "uart", 0, SPEAR3XX_ICM1_UART_BASE,
|
||||
{SPEAR3XX_IRQ_UART}, NULL);
|
||||
|
||||
/* Do spear3xx familiy common initialization part here */
|
||||
void __init spear3xx_init(void)
|
||||
{
|
||||
/* nothing to do for now */
|
||||
}
|
||||
|
||||
/* This will initialize vic */
|
||||
void __init spear3xx_init_irq(void)
|
||||
{
|
||||
vic_init((void __iomem *)VA_SPEAR3XX_ML1_VIC_BASE, 0, ~0, 0);
|
||||
}
|
||||
|
||||
/* Following will create static virtual/physical mappings */
|
||||
struct map_desc spear3xx_io_desc[] __initdata = {
|
||||
{
|
||||
.virtual = VA_SPEAR3XX_ICM1_UART_BASE,
|
||||
.pfn = __phys_to_pfn(SPEAR3XX_ICM1_UART_BASE),
|
||||
.length = SZ_4K,
|
||||
.type = MT_DEVICE
|
||||
}, {
|
||||
.virtual = VA_SPEAR3XX_ML1_VIC_BASE,
|
||||
.pfn = __phys_to_pfn(SPEAR3XX_ML1_VIC_BASE),
|
||||
.length = SZ_4K,
|
||||
.type = MT_DEVICE
|
||||
}, {
|
||||
.virtual = VA_SPEAR3XX_ICM3_SYS_CTRL_BASE,
|
||||
.pfn = __phys_to_pfn(SPEAR3XX_ICM3_SYS_CTRL_BASE),
|
||||
.length = SZ_4K,
|
||||
.type = MT_DEVICE
|
||||
}, {
|
||||
.virtual = VA_SPEAR3XX_ICM3_MISC_REG_BASE,
|
||||
.pfn = __phys_to_pfn(SPEAR3XX_ICM3_MISC_REG_BASE),
|
||||
.length = SZ_4K,
|
||||
.type = MT_DEVICE
|
||||
},
|
||||
};
|
||||
|
||||
/* This will create static memory mapping for selected devices */
|
||||
void __init spear3xx_map_io(void)
|
||||
{
|
||||
iotable_init(spear3xx_io_desc, ARRAY_SIZE(spear3xx_io_desc));
|
||||
|
||||
/* This will initialize clock framework */
|
||||
spear3xx_clk_init();
|
||||
}
|
||||
#include <mach/spear.h>
|
||||
|
||||
/* pad multiplexing support */
|
||||
/* devices */
|
||||
@ -506,6 +448,68 @@ struct pmx_dev spear3xx_pmx_plgpio_45_46_49_50 = {
|
||||
};
|
||||
#endif /* CONFIG_MACH_SPEAR310 || CONFIG_MACH_SPEAR320 */
|
||||
|
||||
/* ssp device registration */
|
||||
struct pl022_ssp_controller pl022_plat_data = {
|
||||
.bus_id = 0,
|
||||
.enable_dma = 1,
|
||||
.dma_filter = pl08x_filter_id,
|
||||
.dma_tx_param = "ssp0_tx",
|
||||
.dma_rx_param = "ssp0_rx",
|
||||
/*
|
||||
* This is number of spi devices that can be connected to spi. There are
|
||||
* two type of chipselects on which slave devices can work. One is chip
|
||||
* select provided by spi masters other is controlled through external
|
||||
* gpio's. We can't use chipselect provided from spi master (because as
|
||||
* soon as FIFO becomes empty, CS is disabled and transfer ends). So
|
||||
* this number now depends on number of gpios available for spi. each
|
||||
* slave on each master requires a separate gpio pin.
|
||||
*/
|
||||
.num_chipselect = 2,
|
||||
};
|
||||
|
||||
/* dmac device registration */
|
||||
struct pl08x_platform_data pl080_plat_data = {
|
||||
.memcpy_channel = {
|
||||
.bus_id = "memcpy",
|
||||
.cctl = (PL080_BSIZE_16 << PL080_CONTROL_SB_SIZE_SHIFT | \
|
||||
PL080_BSIZE_16 << PL080_CONTROL_DB_SIZE_SHIFT | \
|
||||
PL080_WIDTH_32BIT << PL080_CONTROL_SWIDTH_SHIFT | \
|
||||
PL080_WIDTH_32BIT << PL080_CONTROL_DWIDTH_SHIFT | \
|
||||
PL080_CONTROL_PROT_BUFF | PL080_CONTROL_PROT_CACHE | \
|
||||
PL080_CONTROL_PROT_SYS),
|
||||
},
|
||||
.lli_buses = PL08X_AHB1,
|
||||
.mem_buses = PL08X_AHB1,
|
||||
.get_signal = pl080_get_signal,
|
||||
.put_signal = pl080_put_signal,
|
||||
};
|
||||
|
||||
/*
|
||||
* Following will create 16MB static virtual/physical mappings
|
||||
* PHYSICAL VIRTUAL
|
||||
* 0xD0000000 0xFD000000
|
||||
* 0xFC000000 0xFC000000
|
||||
*/
|
||||
struct map_desc spear3xx_io_desc[] __initdata = {
|
||||
{
|
||||
.virtual = VA_SPEAR3XX_ICM1_2_BASE,
|
||||
.pfn = __phys_to_pfn(SPEAR3XX_ICM1_2_BASE),
|
||||
.length = SZ_16M,
|
||||
.type = MT_DEVICE
|
||||
}, {
|
||||
.virtual = VA_SPEAR3XX_ICM3_SMI_CTRL_BASE,
|
||||
.pfn = __phys_to_pfn(SPEAR3XX_ICM3_SMI_CTRL_BASE),
|
||||
.length = SZ_16M,
|
||||
.type = MT_DEVICE
|
||||
},
|
||||
};
|
||||
|
||||
/* This will create static memory mapping for selected devices */
|
||||
void __init spear3xx_map_io(void)
|
||||
{
|
||||
iotable_init(spear3xx_io_desc, ARRAY_SIZE(spear3xx_io_desc));
|
||||
}
|
||||
|
||||
static void __init spear3xx_timer_init(void)
|
||||
{
|
||||
char pclk_name[] = "pll3_48m_clk";
|
||||
@ -530,9 +534,19 @@ static void __init spear3xx_timer_init(void)
|
||||
clk_put(gpt_clk);
|
||||
clk_put(pclk);
|
||||
|
||||
spear_setup_timer();
|
||||
spear_setup_timer(SPEAR3XX_CPU_TMR_BASE, SPEAR3XX_IRQ_CPU_GPT1_1);
|
||||
}
|
||||
|
||||
struct sys_timer spear3xx_timer = {
|
||||
.init = spear3xx_timer_init,
|
||||
};
|
||||
|
||||
static const struct of_device_id vic_of_match[] __initconst = {
|
||||
{ .compatible = "arm,pl190-vic", .data = vic_of_init, },
|
||||
{ /* Sentinel */ }
|
||||
};
|
||||
|
||||
void __init spear3xx_dt_init_irq(void)
|
||||
{
|
||||
of_irq_init(vic_of_match);
|
||||
}
|
||||
|
@ -1,3 +1,5 @@
|
||||
zreladdr-y += 0x00008000
|
||||
params_phys-y := 0x00000100
|
||||
initrd_phys-y := 0x00800000
|
||||
|
||||
dtb-$(CONFIG_BOARD_SPEAR600_DT) += spear600-evb.dtb
|
||||
|
@ -16,6 +16,112 @@
|
||||
#include <linux/kernel.h>
|
||||
#include <plat/clock.h>
|
||||
#include <mach/misc_regs.h>
|
||||
#include <mach/spear.h>
|
||||
|
||||
#define PLL1_CTR (MISC_BASE + 0x008)
|
||||
#define PLL1_FRQ (MISC_BASE + 0x00C)
|
||||
#define PLL1_MOD (MISC_BASE + 0x010)
|
||||
#define PLL2_CTR (MISC_BASE + 0x014)
|
||||
/* PLL_CTR register masks */
|
||||
#define PLL_ENABLE 2
|
||||
#define PLL_MODE_SHIFT 4
|
||||
#define PLL_MODE_MASK 0x3
|
||||
#define PLL_MODE_NORMAL 0
|
||||
#define PLL_MODE_FRACTION 1
|
||||
#define PLL_MODE_DITH_DSB 2
|
||||
#define PLL_MODE_DITH_SSB 3
|
||||
|
||||
#define PLL2_FRQ (MISC_BASE + 0x018)
|
||||
/* PLL FRQ register masks */
|
||||
#define PLL_DIV_N_SHIFT 0
|
||||
#define PLL_DIV_N_MASK 0xFF
|
||||
#define PLL_DIV_P_SHIFT 8
|
||||
#define PLL_DIV_P_MASK 0x7
|
||||
#define PLL_NORM_FDBK_M_SHIFT 24
|
||||
#define PLL_NORM_FDBK_M_MASK 0xFF
|
||||
#define PLL_DITH_FDBK_M_SHIFT 16
|
||||
#define PLL_DITH_FDBK_M_MASK 0xFFFF
|
||||
|
||||
#define PLL2_MOD (MISC_BASE + 0x01C)
|
||||
#define PLL_CLK_CFG (MISC_BASE + 0x020)
|
||||
#define CORE_CLK_CFG (MISC_BASE + 0x024)
|
||||
/* CORE CLK CFG register masks */
|
||||
#define PLL_HCLK_RATIO_SHIFT 10
|
||||
#define PLL_HCLK_RATIO_MASK 0x3
|
||||
#define HCLK_PCLK_RATIO_SHIFT 8
|
||||
#define HCLK_PCLK_RATIO_MASK 0x3
|
||||
|
||||
#define PERIP_CLK_CFG (MISC_BASE + 0x028)
|
||||
/* PERIP_CLK_CFG register masks */
|
||||
#define CLCD_CLK_SHIFT 2
|
||||
#define CLCD_CLK_MASK 0x3
|
||||
#define UART_CLK_SHIFT 4
|
||||
#define UART_CLK_MASK 0x1
|
||||
#define FIRDA_CLK_SHIFT 5
|
||||
#define FIRDA_CLK_MASK 0x3
|
||||
#define GPT0_CLK_SHIFT 8
|
||||
#define GPT1_CLK_SHIFT 10
|
||||
#define GPT2_CLK_SHIFT 11
|
||||
#define GPT3_CLK_SHIFT 12
|
||||
#define GPT_CLK_MASK 0x1
|
||||
#define AUX_CLK_PLL3_VAL 0
|
||||
#define AUX_CLK_PLL1_VAL 1
|
||||
|
||||
#define PERIP1_CLK_ENB (MISC_BASE + 0x02C)
|
||||
/* PERIP1_CLK_ENB register masks */
|
||||
#define UART0_CLK_ENB 3
|
||||
#define UART1_CLK_ENB 4
|
||||
#define SSP0_CLK_ENB 5
|
||||
#define SSP1_CLK_ENB 6
|
||||
#define I2C_CLK_ENB 7
|
||||
#define JPEG_CLK_ENB 8
|
||||
#define FSMC_CLK_ENB 9
|
||||
#define FIRDA_CLK_ENB 10
|
||||
#define GPT2_CLK_ENB 11
|
||||
#define GPT3_CLK_ENB 12
|
||||
#define GPIO2_CLK_ENB 13
|
||||
#define SSP2_CLK_ENB 14
|
||||
#define ADC_CLK_ENB 15
|
||||
#define GPT1_CLK_ENB 11
|
||||
#define RTC_CLK_ENB 17
|
||||
#define GPIO1_CLK_ENB 18
|
||||
#define DMA_CLK_ENB 19
|
||||
#define SMI_CLK_ENB 21
|
||||
#define CLCD_CLK_ENB 22
|
||||
#define GMAC_CLK_ENB 23
|
||||
#define USBD_CLK_ENB 24
|
||||
#define USBH0_CLK_ENB 25
|
||||
#define USBH1_CLK_ENB 26
|
||||
|
||||
#define PRSC1_CLK_CFG (MISC_BASE + 0x044)
|
||||
#define PRSC2_CLK_CFG (MISC_BASE + 0x048)
|
||||
#define PRSC3_CLK_CFG (MISC_BASE + 0x04C)
|
||||
/* gpt synthesizer register masks */
|
||||
#define GPT_MSCALE_SHIFT 0
|
||||
#define GPT_MSCALE_MASK 0xFFF
|
||||
#define GPT_NSCALE_SHIFT 12
|
||||
#define GPT_NSCALE_MASK 0xF
|
||||
|
||||
#define AMEM_CLK_CFG (MISC_BASE + 0x050)
|
||||
#define EXPI_CLK_CFG (MISC_BASE + 0x054)
|
||||
#define CLCD_CLK_SYNT (MISC_BASE + 0x05C)
|
||||
#define FIRDA_CLK_SYNT (MISC_BASE + 0x060)
|
||||
#define UART_CLK_SYNT (MISC_BASE + 0x064)
|
||||
#define GMAC_CLK_SYNT (MISC_BASE + 0x068)
|
||||
#define RAS1_CLK_SYNT (MISC_BASE + 0x06C)
|
||||
#define RAS2_CLK_SYNT (MISC_BASE + 0x070)
|
||||
#define RAS3_CLK_SYNT (MISC_BASE + 0x074)
|
||||
#define RAS4_CLK_SYNT (MISC_BASE + 0x078)
|
||||
/* aux clk synthesiser register masks for irda to ras4 */
|
||||
#define AUX_SYNT_ENB 31
|
||||
#define AUX_EQ_SEL_SHIFT 30
|
||||
#define AUX_EQ_SEL_MASK 1
|
||||
#define AUX_EQ1_SEL 0
|
||||
#define AUX_EQ2_SEL 1
|
||||
#define AUX_XSCALE_SHIFT 16
|
||||
#define AUX_XSCALE_MASK 0xFFF
|
||||
#define AUX_YSCALE_SHIFT 0
|
||||
#define AUX_YSCALE_MASK 0xFFF
|
||||
|
||||
/* root clks */
|
||||
/* 32 KHz oscillator clock */
|
||||
@ -623,53 +729,53 @@ static struct clk dummy_apb_pclk;
|
||||
|
||||
/* array of all spear 6xx clock lookups */
|
||||
static struct clk_lookup spear_clk_lookups[] = {
|
||||
{ .con_id = "apb_pclk", .clk = &dummy_apb_pclk},
|
||||
CLKDEV_INIT(NULL, "apb_pclk", &dummy_apb_pclk),
|
||||
/* root clks */
|
||||
{ .con_id = "osc_32k_clk", .clk = &osc_32k_clk},
|
||||
{ .con_id = "osc_30m_clk", .clk = &osc_30m_clk},
|
||||
CLKDEV_INIT(NULL, "osc_32k_clk", &osc_32k_clk),
|
||||
CLKDEV_INIT(NULL, "osc_30m_clk", &osc_30m_clk),
|
||||
/* clock derived from 32 KHz os clk */
|
||||
{ .dev_id = "rtc-spear", .clk = &rtc_clk},
|
||||
CLKDEV_INIT("rtc-spear", NULL, &rtc_clk),
|
||||
/* clock derived from 30 MHz os clk */
|
||||
{ .con_id = "pll1_clk", .clk = &pll1_clk},
|
||||
{ .con_id = "pll3_48m_clk", .clk = &pll3_48m_clk},
|
||||
{ .dev_id = "wdt", .clk = &wdt_clk},
|
||||
CLKDEV_INIT(NULL, "pll1_clk", &pll1_clk),
|
||||
CLKDEV_INIT(NULL, "pll3_48m_clk", &pll3_48m_clk),
|
||||
CLKDEV_INIT("wdt", NULL, &wdt_clk),
|
||||
/* clock derived from pll1 clk */
|
||||
{ .con_id = "cpu_clk", .clk = &cpu_clk},
|
||||
{ .con_id = "ahb_clk", .clk = &ahb_clk},
|
||||
{ .con_id = "uart_synth_clk", .clk = &uart_synth_clk},
|
||||
{ .con_id = "firda_synth_clk", .clk = &firda_synth_clk},
|
||||
{ .con_id = "clcd_synth_clk", .clk = &clcd_synth_clk},
|
||||
{ .con_id = "gpt0_synth_clk", .clk = &gpt0_synth_clk},
|
||||
{ .con_id = "gpt2_synth_clk", .clk = &gpt2_synth_clk},
|
||||
{ .con_id = "gpt3_synth_clk", .clk = &gpt3_synth_clk},
|
||||
{ .dev_id = "d0000000.serial", .clk = &uart0_clk},
|
||||
{ .dev_id = "d0080000.serial", .clk = &uart1_clk},
|
||||
{ .dev_id = "firda", .clk = &firda_clk},
|
||||
{ .dev_id = "clcd", .clk = &clcd_clk},
|
||||
{ .dev_id = "gpt0", .clk = &gpt0_clk},
|
||||
{ .dev_id = "gpt1", .clk = &gpt1_clk},
|
||||
{ .dev_id = "gpt2", .clk = &gpt2_clk},
|
||||
{ .dev_id = "gpt3", .clk = &gpt3_clk},
|
||||
CLKDEV_INIT(NULL, "cpu_clk", &cpu_clk),
|
||||
CLKDEV_INIT(NULL, "ahb_clk", &ahb_clk),
|
||||
CLKDEV_INIT(NULL, "uart_synth_clk", &uart_synth_clk),
|
||||
CLKDEV_INIT(NULL, "firda_synth_clk", &firda_synth_clk),
|
||||
CLKDEV_INIT(NULL, "clcd_synth_clk", &clcd_synth_clk),
|
||||
CLKDEV_INIT(NULL, "gpt0_synth_clk", &gpt0_synth_clk),
|
||||
CLKDEV_INIT(NULL, "gpt2_synth_clk", &gpt2_synth_clk),
|
||||
CLKDEV_INIT(NULL, "gpt3_synth_clk", &gpt3_synth_clk),
|
||||
CLKDEV_INIT("d0000000.serial", NULL, &uart0_clk),
|
||||
CLKDEV_INIT("d0080000.serial", NULL, &uart1_clk),
|
||||
CLKDEV_INIT("firda", NULL, &firda_clk),
|
||||
CLKDEV_INIT("clcd", NULL, &clcd_clk),
|
||||
CLKDEV_INIT("gpt0", NULL, &gpt0_clk),
|
||||
CLKDEV_INIT("gpt1", NULL, &gpt1_clk),
|
||||
CLKDEV_INIT("gpt2", NULL, &gpt2_clk),
|
||||
CLKDEV_INIT("gpt3", NULL, &gpt3_clk),
|
||||
/* clock derived from pll3 clk */
|
||||
{ .dev_id = "designware_udc", .clk = &usbd_clk},
|
||||
{ .con_id = "usbh.0_clk", .clk = &usbh0_clk},
|
||||
{ .con_id = "usbh.1_clk", .clk = &usbh1_clk},
|
||||
CLKDEV_INIT("designware_udc", NULL, &usbd_clk),
|
||||
CLKDEV_INIT(NULL, "usbh.0_clk", &usbh0_clk),
|
||||
CLKDEV_INIT(NULL, "usbh.1_clk", &usbh1_clk),
|
||||
/* clock derived from ahb clk */
|
||||
{ .con_id = "apb_clk", .clk = &apb_clk},
|
||||
{ .dev_id = "d0200000.i2c", .clk = &i2c_clk},
|
||||
{ .dev_id = "dma", .clk = &dma_clk},
|
||||
{ .dev_id = "jpeg", .clk = &jpeg_clk},
|
||||
{ .dev_id = "gmac", .clk = &gmac_clk},
|
||||
{ .dev_id = "smi", .clk = &smi_clk},
|
||||
{ .dev_id = "fsmc-nand", .clk = &fsmc_clk},
|
||||
CLKDEV_INIT(NULL, "apb_clk", &apb_clk),
|
||||
CLKDEV_INIT("d0200000.i2c", NULL, &i2c_clk),
|
||||
CLKDEV_INIT("fc400000.dma", NULL, &dma_clk),
|
||||
CLKDEV_INIT("jpeg", NULL, &jpeg_clk),
|
||||
CLKDEV_INIT("gmac", NULL, &gmac_clk),
|
||||
CLKDEV_INIT("fc000000.flash", NULL, &smi_clk),
|
||||
CLKDEV_INIT("d1800000.flash", NULL, &fsmc_clk),
|
||||
/* clock derived from apb clk */
|
||||
{ .dev_id = "adc", .clk = &adc_clk},
|
||||
{ .dev_id = "ssp-pl022.0", .clk = &ssp0_clk},
|
||||
{ .dev_id = "ssp-pl022.1", .clk = &ssp1_clk},
|
||||
{ .dev_id = "ssp-pl022.2", .clk = &ssp2_clk},
|
||||
{ .dev_id = "f0100000.gpio", .clk = &gpio0_clk},
|
||||
{ .dev_id = "fc980000.gpio", .clk = &gpio1_clk},
|
||||
{ .dev_id = "d8100000.gpio", .clk = &gpio2_clk},
|
||||
CLKDEV_INIT("adc", NULL, &adc_clk),
|
||||
CLKDEV_INIT("ssp-pl022.0", NULL, &ssp0_clk),
|
||||
CLKDEV_INIT("ssp-pl022.1", NULL, &ssp1_clk),
|
||||
CLKDEV_INIT("ssp-pl022.2", NULL, &ssp2_clk),
|
||||
CLKDEV_INIT("f0100000.gpio", NULL, &gpio0_clk),
|
||||
CLKDEV_INIT("fc980000.gpio", NULL, &gpio1_clk),
|
||||
CLKDEV_INIT("d8100000.gpio", NULL, &gpio2_clk),
|
||||
};
|
||||
|
||||
void __init spear6xx_clk_init(void)
|
||||
|
@ -15,34 +15,9 @@
|
||||
#define __MACH_GENERIC_H
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/amba/bus.h>
|
||||
#include <asm/mach/time.h>
|
||||
#include <asm/mach/map.h>
|
||||
|
||||
/*
|
||||
* Each GPT has 2 timer channels
|
||||
* Following GPT channels will be used as clock source and clockevent
|
||||
*/
|
||||
#define SPEAR_GPT0_BASE SPEAR6XX_CPU_TMR_BASE
|
||||
#define SPEAR_GPT0_CHAN0_IRQ IRQ_CPU_GPT1_1
|
||||
#define SPEAR_GPT0_CHAN1_IRQ IRQ_CPU_GPT1_2
|
||||
|
||||
/* Add spear6xx family device structure declarations here */
|
||||
extern struct amba_device gpio_device[];
|
||||
extern struct amba_device uart_device[];
|
||||
extern struct sys_timer spear6xx_timer;
|
||||
|
||||
/* Add spear6xx family function declarations here */
|
||||
void __init spear_setup_timer(void);
|
||||
void __init spear6xx_map_io(void);
|
||||
void __init spear6xx_init_irq(void);
|
||||
void __init spear6xx_init(void);
|
||||
void __init spear600_init(void);
|
||||
void __init spear_setup_timer(resource_size_t base, int irq);
|
||||
void spear_restart(char, const char *);
|
||||
void __init spear6xx_clk_init(void);
|
||||
|
||||
void spear_restart(char, const char *);
|
||||
|
||||
/* Add spear600 machine device structure declarations here */
|
||||
|
||||
#endif /* __MACH_GENERIC_H */
|
||||
|
@ -1,23 +1 @@
|
||||
/*
|
||||
* arch/arm/mach-spear6xx/include/mach/hardware.h
|
||||
*
|
||||
* Hardware definitions for SPEAr6xx machine family
|
||||
*
|
||||
* Copyright (C) 2009 ST Microelectronics
|
||||
* Rajeev Kumar<rajeev-dlh.kumar@st.com>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef __MACH_HARDWARE_H
|
||||
#define __MACH_HARDWARE_H
|
||||
|
||||
#include <plat/hardware.h>
|
||||
#include <mach/spear.h>
|
||||
|
||||
/* Vitual to physical translation of statically mapped space */
|
||||
#define IO_ADDRESS(x) (x | 0xF0000000)
|
||||
|
||||
#endif /* __MACH_HARDWARE_H */
|
||||
/* empty */
|
||||
|
@ -16,82 +16,13 @@
|
||||
|
||||
/* IRQ definitions */
|
||||
/* VIC 1 */
|
||||
#define IRQ_INTRCOMM_SW_IRQ 0
|
||||
#define IRQ_INTRCOMM_CPU_1 1
|
||||
#define IRQ_INTRCOMM_CPU_2 2
|
||||
#define IRQ_INTRCOMM_RAS2A11_1 3
|
||||
#define IRQ_INTRCOMM_RAS2A11_2 4
|
||||
#define IRQ_INTRCOMM_RAS2A12_1 5
|
||||
#define IRQ_INTRCOMM_RAS2A12_2 6
|
||||
#define IRQ_GEN_RAS_0 7
|
||||
#define IRQ_GEN_RAS_1 8
|
||||
#define IRQ_GEN_RAS_2 9
|
||||
#define IRQ_GEN_RAS_3 10
|
||||
#define IRQ_GEN_RAS_4 11
|
||||
#define IRQ_GEN_RAS_5 12
|
||||
#define IRQ_GEN_RAS_6 13
|
||||
#define IRQ_GEN_RAS_7 14
|
||||
#define IRQ_GEN_RAS_8 15
|
||||
/* FIXME: probe this from DT */
|
||||
#define IRQ_CPU_GPT1_1 16
|
||||
#define IRQ_CPU_GPT1_2 17
|
||||
#define IRQ_LOCAL_GPIO 18
|
||||
#define IRQ_PLL_UNLOCK 19
|
||||
#define IRQ_JPEG 20
|
||||
#define IRQ_FSMC 21
|
||||
#define IRQ_IRDA 22
|
||||
#define IRQ_RESERVED 23
|
||||
#define IRQ_UART_0 24
|
||||
#define IRQ_UART_1 25
|
||||
#define IRQ_SSP_1 26
|
||||
#define IRQ_SSP_2 27
|
||||
#define IRQ_I2C 28
|
||||
#define IRQ_GEN_RAS_9 29
|
||||
#define IRQ_GEN_RAS_10 30
|
||||
#define IRQ_GEN_RAS_11 31
|
||||
|
||||
/* VIC 2 */
|
||||
#define IRQ_APPL_GPT1_1 32
|
||||
#define IRQ_APPL_GPT1_2 33
|
||||
#define IRQ_APPL_GPT2_1 34
|
||||
#define IRQ_APPL_GPT2_2 35
|
||||
#define IRQ_APPL_GPIO 36
|
||||
#define IRQ_APPL_SSP 37
|
||||
#define IRQ_APPL_ADC 38
|
||||
#define IRQ_APPL_RESERVED 39
|
||||
#define IRQ_AHB_EXP_MASTER 40
|
||||
#define IRQ_DDR_CONTROLLER 41
|
||||
#define IRQ_BASIC_DMA 42
|
||||
#define IRQ_BASIC_RESERVED1 43
|
||||
#define IRQ_BASIC_SMI 44
|
||||
#define IRQ_BASIC_CLCD 45
|
||||
#define IRQ_EXP_AHB_1 46
|
||||
#define IRQ_EXP_AHB_2 47
|
||||
#define IRQ_BASIC_GPT1_1 48
|
||||
#define IRQ_BASIC_GPT1_2 49
|
||||
#define IRQ_BASIC_RTC 50
|
||||
#define IRQ_BASIC_GPIO 51
|
||||
#define IRQ_BASIC_WDT 52
|
||||
#define IRQ_BASIC_RESERVED 53
|
||||
#define IRQ_AHB_EXP_SLAVE 54
|
||||
#define IRQ_GMAC_1 55
|
||||
#define IRQ_GMAC_2 56
|
||||
#define IRQ_USB_DEV 57
|
||||
#define IRQ_USB_H_OHCI_0 58
|
||||
#define IRQ_USB_H_EHCI_0 59
|
||||
#define IRQ_USB_H_OHCI_1 60
|
||||
#define IRQ_USB_H_EHCI_1 61
|
||||
#define IRQ_EXP_AHB_3 62
|
||||
#define IRQ_EXP_AHB_4 63
|
||||
|
||||
#define IRQ_VIC_END 64
|
||||
|
||||
/* GPIO pins virtual irqs */
|
||||
#define SPEAR_GPIO_INT_BASE IRQ_VIC_END
|
||||
#define SPEAR_GPIO0_INT_BASE SPEAR_GPIO_INT_BASE
|
||||
#define SPEAR_GPIO1_INT_BASE (SPEAR_GPIO0_INT_BASE + 8)
|
||||
#define SPEAR_GPIO2_INT_BASE (SPEAR_GPIO1_INT_BASE + 8)
|
||||
#define SPEAR_GPIO_INT_END (SPEAR_GPIO2_INT_BASE + 8)
|
||||
#define VIRTUAL_IRQS (SPEAR_GPIO_INT_END - IRQ_VIC_END)
|
||||
#define NR_IRQS (IRQ_VIC_END + VIRTUAL_IRQS)
|
||||
#define VIRTUAL_IRQS 24
|
||||
#define NR_IRQS (IRQ_VIC_END + VIRTUAL_IRQS)
|
||||
|
||||
#endif /* __MACH_IRQS_H */
|
||||
|
@ -14,161 +14,7 @@
|
||||
#ifndef __MACH_MISC_REGS_H
|
||||
#define __MACH_MISC_REGS_H
|
||||
|
||||
#include <mach/hardware.h>
|
||||
|
||||
#define MISC_BASE IOMEM(VA_SPEAR6XX_ICM3_MISC_REG_BASE)
|
||||
|
||||
#define SOC_CFG_CTR (MISC_BASE + 0x000)
|
||||
#define DIAG_CFG_CTR (MISC_BASE + 0x004)
|
||||
#define PLL1_CTR (MISC_BASE + 0x008)
|
||||
#define PLL1_FRQ (MISC_BASE + 0x00C)
|
||||
#define PLL1_MOD (MISC_BASE + 0x010)
|
||||
#define PLL2_CTR (MISC_BASE + 0x014)
|
||||
/* PLL_CTR register masks */
|
||||
#define PLL_ENABLE 2
|
||||
#define PLL_MODE_SHIFT 4
|
||||
#define PLL_MODE_MASK 0x3
|
||||
#define PLL_MODE_NORMAL 0
|
||||
#define PLL_MODE_FRACTION 1
|
||||
#define PLL_MODE_DITH_DSB 2
|
||||
#define PLL_MODE_DITH_SSB 3
|
||||
|
||||
#define PLL2_FRQ (MISC_BASE + 0x018)
|
||||
/* PLL FRQ register masks */
|
||||
#define PLL_DIV_N_SHIFT 0
|
||||
#define PLL_DIV_N_MASK 0xFF
|
||||
#define PLL_DIV_P_SHIFT 8
|
||||
#define PLL_DIV_P_MASK 0x7
|
||||
#define PLL_NORM_FDBK_M_SHIFT 24
|
||||
#define PLL_NORM_FDBK_M_MASK 0xFF
|
||||
#define PLL_DITH_FDBK_M_SHIFT 16
|
||||
#define PLL_DITH_FDBK_M_MASK 0xFFFF
|
||||
|
||||
#define PLL2_MOD (MISC_BASE + 0x01C)
|
||||
#define PLL_CLK_CFG (MISC_BASE + 0x020)
|
||||
#define CORE_CLK_CFG (MISC_BASE + 0x024)
|
||||
/* CORE CLK CFG register masks */
|
||||
#define PLL_HCLK_RATIO_SHIFT 10
|
||||
#define PLL_HCLK_RATIO_MASK 0x3
|
||||
#define HCLK_PCLK_RATIO_SHIFT 8
|
||||
#define HCLK_PCLK_RATIO_MASK 0x3
|
||||
|
||||
#define PERIP_CLK_CFG (MISC_BASE + 0x028)
|
||||
/* PERIP_CLK_CFG register masks */
|
||||
#define CLCD_CLK_SHIFT 2
|
||||
#define CLCD_CLK_MASK 0x3
|
||||
#define UART_CLK_SHIFT 4
|
||||
#define UART_CLK_MASK 0x1
|
||||
#define FIRDA_CLK_SHIFT 5
|
||||
#define FIRDA_CLK_MASK 0x3
|
||||
#define GPT0_CLK_SHIFT 8
|
||||
#define GPT1_CLK_SHIFT 10
|
||||
#define GPT2_CLK_SHIFT 11
|
||||
#define GPT3_CLK_SHIFT 12
|
||||
#define GPT_CLK_MASK 0x1
|
||||
#define AUX_CLK_PLL3_VAL 0
|
||||
#define AUX_CLK_PLL1_VAL 1
|
||||
|
||||
#define PERIP1_CLK_ENB (MISC_BASE + 0x02C)
|
||||
/* PERIP1_CLK_ENB register masks */
|
||||
#define UART0_CLK_ENB 3
|
||||
#define UART1_CLK_ENB 4
|
||||
#define SSP0_CLK_ENB 5
|
||||
#define SSP1_CLK_ENB 6
|
||||
#define I2C_CLK_ENB 7
|
||||
#define JPEG_CLK_ENB 8
|
||||
#define FSMC_CLK_ENB 9
|
||||
#define FIRDA_CLK_ENB 10
|
||||
#define GPT2_CLK_ENB 11
|
||||
#define GPT3_CLK_ENB 12
|
||||
#define GPIO2_CLK_ENB 13
|
||||
#define SSP2_CLK_ENB 14
|
||||
#define ADC_CLK_ENB 15
|
||||
#define GPT1_CLK_ENB 11
|
||||
#define RTC_CLK_ENB 17
|
||||
#define GPIO1_CLK_ENB 18
|
||||
#define DMA_CLK_ENB 19
|
||||
#define SMI_CLK_ENB 21
|
||||
#define CLCD_CLK_ENB 22
|
||||
#define GMAC_CLK_ENB 23
|
||||
#define USBD_CLK_ENB 24
|
||||
#define USBH0_CLK_ENB 25
|
||||
#define USBH1_CLK_ENB 26
|
||||
|
||||
#define SOC_CORE_ID (MISC_BASE + 0x030)
|
||||
#define RAS_CLK_ENB (MISC_BASE + 0x034)
|
||||
#define PERIP1_SOF_RST (MISC_BASE + 0x038)
|
||||
/* PERIP1_SOF_RST register masks */
|
||||
#define JPEG_SOF_RST 8
|
||||
|
||||
#define SOC_USER_ID (MISC_BASE + 0x03C)
|
||||
#define RAS_SOF_RST (MISC_BASE + 0x040)
|
||||
#define PRSC1_CLK_CFG (MISC_BASE + 0x044)
|
||||
#define PRSC2_CLK_CFG (MISC_BASE + 0x048)
|
||||
#define PRSC3_CLK_CFG (MISC_BASE + 0x04C)
|
||||
/* gpt synthesizer register masks */
|
||||
#define GPT_MSCALE_SHIFT 0
|
||||
#define GPT_MSCALE_MASK 0xFFF
|
||||
#define GPT_NSCALE_SHIFT 12
|
||||
#define GPT_NSCALE_MASK 0xF
|
||||
|
||||
#define AMEM_CLK_CFG (MISC_BASE + 0x050)
|
||||
#define EXPI_CLK_CFG (MISC_BASE + 0x054)
|
||||
#define CLCD_CLK_SYNT (MISC_BASE + 0x05C)
|
||||
#define FIRDA_CLK_SYNT (MISC_BASE + 0x060)
|
||||
#define UART_CLK_SYNT (MISC_BASE + 0x064)
|
||||
#define GMAC_CLK_SYNT (MISC_BASE + 0x068)
|
||||
#define RAS1_CLK_SYNT (MISC_BASE + 0x06C)
|
||||
#define RAS2_CLK_SYNT (MISC_BASE + 0x070)
|
||||
#define RAS3_CLK_SYNT (MISC_BASE + 0x074)
|
||||
#define RAS4_CLK_SYNT (MISC_BASE + 0x078)
|
||||
/* aux clk synthesiser register masks for irda to ras4 */
|
||||
#define AUX_SYNT_ENB 31
|
||||
#define AUX_EQ_SEL_SHIFT 30
|
||||
#define AUX_EQ_SEL_MASK 1
|
||||
#define AUX_EQ1_SEL 0
|
||||
#define AUX_EQ2_SEL 1
|
||||
#define AUX_XSCALE_SHIFT 16
|
||||
#define AUX_XSCALE_MASK 0xFFF
|
||||
#define AUX_YSCALE_SHIFT 0
|
||||
#define AUX_YSCALE_MASK 0xFFF
|
||||
|
||||
#define ICM1_ARB_CFG (MISC_BASE + 0x07C)
|
||||
#define ICM2_ARB_CFG (MISC_BASE + 0x080)
|
||||
#define ICM3_ARB_CFG (MISC_BASE + 0x084)
|
||||
#define ICM4_ARB_CFG (MISC_BASE + 0x088)
|
||||
#define ICM5_ARB_CFG (MISC_BASE + 0x08C)
|
||||
#define ICM6_ARB_CFG (MISC_BASE + 0x090)
|
||||
#define ICM7_ARB_CFG (MISC_BASE + 0x094)
|
||||
#define ICM8_ARB_CFG (MISC_BASE + 0x098)
|
||||
#define ICM9_ARB_CFG (MISC_BASE + 0x09C)
|
||||
#define DMA_CHN_CFG (MISC_BASE + 0x0A0)
|
||||
#define USB2_PHY_CFG (MISC_BASE + 0x0A4)
|
||||
#define GMAC_CFG_CTR (MISC_BASE + 0x0A8)
|
||||
#define EXPI_CFG_CTR (MISC_BASE + 0x0AC)
|
||||
#define PRC1_LOCK_CTR (MISC_BASE + 0x0C0)
|
||||
#define PRC2_LOCK_CTR (MISC_BASE + 0x0C4)
|
||||
#define PRC3_LOCK_CTR (MISC_BASE + 0x0C8)
|
||||
#define PRC4_LOCK_CTR (MISC_BASE + 0x0CC)
|
||||
#define PRC1_IRQ_CTR (MISC_BASE + 0x0D0)
|
||||
#define PRC2_IRQ_CTR (MISC_BASE + 0x0D4)
|
||||
#define PRC3_IRQ_CTR (MISC_BASE + 0x0D8)
|
||||
#define PRC4_IRQ_CTR (MISC_BASE + 0x0DC)
|
||||
#define PWRDOWN_CFG_CTR (MISC_BASE + 0x0E0)
|
||||
#define COMPSSTL_1V8_CFG (MISC_BASE + 0x0E4)
|
||||
#define COMPSSTL_2V5_CFG (MISC_BASE + 0x0E8)
|
||||
#define COMPCOR_3V3_CFG (MISC_BASE + 0x0EC)
|
||||
#define SSTLPAD_CFG_CTR (MISC_BASE + 0x0F0)
|
||||
#define BIST1_CFG_CTR (MISC_BASE + 0x0F4)
|
||||
#define BIST2_CFG_CTR (MISC_BASE + 0x0F8)
|
||||
#define BIST3_CFG_CTR (MISC_BASE + 0x0FC)
|
||||
#define BIST4_CFG_CTR (MISC_BASE + 0x100)
|
||||
#define BIST5_CFG_CTR (MISC_BASE + 0x104)
|
||||
#define BIST1_STS_RES (MISC_BASE + 0x108)
|
||||
#define BIST2_STS_RES (MISC_BASE + 0x10C)
|
||||
#define BIST3_STS_RES (MISC_BASE + 0x110)
|
||||
#define BIST4_STS_RES (MISC_BASE + 0x114)
|
||||
#define BIST5_STS_RES (MISC_BASE + 0x118)
|
||||
#define SYSERR_CFG_CTR (MISC_BASE + 0x11C)
|
||||
|
||||
#endif /* __MACH_MISC_REGS_H */
|
||||
|
@ -15,69 +15,26 @@
|
||||
#define __MACH_SPEAR6XX_H
|
||||
|
||||
#include <asm/memory.h>
|
||||
#include <mach/spear600.h>
|
||||
|
||||
#define SPEAR6XX_ML_SDRAM_BASE UL(0x00000000)
|
||||
/* ICM1 - Low speed connection */
|
||||
#define SPEAR6XX_ICM1_BASE UL(0xD0000000)
|
||||
|
||||
#define VA_SPEAR6XX_ICM1_BASE UL(0xFD000000)
|
||||
#define SPEAR6XX_ICM1_UART0_BASE UL(0xD0000000)
|
||||
#define VA_SPEAR6XX_ICM1_UART0_BASE IO_ADDRESS(SPEAR6XX_ICM1_UART0_BASE)
|
||||
|
||||
#define SPEAR6XX_ICM1_UART1_BASE UL(0xD0080000)
|
||||
#define SPEAR6XX_ICM1_SSP0_BASE UL(0xD0100000)
|
||||
#define SPEAR6XX_ICM1_SSP1_BASE UL(0xD0180000)
|
||||
#define SPEAR6XX_ICM1_I2C_BASE UL(0xD0200000)
|
||||
#define SPEAR6XX_ICM1_JPEG_BASE UL(0xD0800000)
|
||||
#define SPEAR6XX_ICM1_IRDA_BASE UL(0xD1000000)
|
||||
#define SPEAR6XX_ICM1_FSMC_BASE UL(0xD1800000)
|
||||
#define SPEAR6XX_ICM1_NAND_BASE UL(0xD2000000)
|
||||
#define SPEAR6XX_ICM1_SRAM_BASE UL(0xD2800000)
|
||||
|
||||
/* ICM2 - Application Subsystem */
|
||||
#define SPEAR6XX_ICM2_BASE UL(0xD8000000)
|
||||
#define SPEAR6XX_ICM2_TMR0_BASE UL(0xD8000000)
|
||||
#define SPEAR6XX_ICM2_TMR1_BASE UL(0xD8080000)
|
||||
#define SPEAR6XX_ICM2_GPIO_BASE UL(0xD8100000)
|
||||
#define SPEAR6XX_ICM2_SSP2_BASE UL(0xD8180000)
|
||||
#define SPEAR6XX_ICM2_ADC_BASE UL(0xD8200000)
|
||||
#define VA_SPEAR6XX_ICM1_UART0_BASE (VA_SPEAR6XX_ICM1_2_BASE | SPEAR6XX_ICM1_UART0_BASE)
|
||||
|
||||
/* ML-1, 2 - Multi Layer CPU Subsystem */
|
||||
#define SPEAR6XX_ML_CPU_BASE UL(0xF0000000)
|
||||
#define VA_SPEAR6XX_ML_CPU_BASE UL(0xF0000000)
|
||||
#define SPEAR6XX_CPU_TMR_BASE UL(0xF0000000)
|
||||
#define SPEAR6XX_CPU_GPIO_BASE UL(0xF0100000)
|
||||
#define SPEAR6XX_CPU_VIC_SEC_BASE UL(0xF1000000)
|
||||
#define VA_SPEAR6XX_CPU_VIC_SEC_BASE IO_ADDRESS(SPEAR6XX_CPU_VIC_SEC_BASE)
|
||||
#define SPEAR6XX_CPU_VIC_PRI_BASE UL(0xF1100000)
|
||||
#define VA_SPEAR6XX_CPU_VIC_PRI_BASE IO_ADDRESS(SPEAR6XX_CPU_VIC_PRI_BASE)
|
||||
|
||||
/* ICM3 - Basic Subsystem */
|
||||
#define SPEAR6XX_ICM3_BASE UL(0xF8000000)
|
||||
#define SPEAR6XX_ICM3_SMEM_BASE UL(0xF8000000)
|
||||
#define SPEAR6XX_ICM3_SMI_CTRL_BASE UL(0xFC000000)
|
||||
#define SPEAR6XX_ICM3_CLCD_BASE UL(0xFC200000)
|
||||
#define VA_SPEAR6XX_ICM3_SMI_CTRL_BASE UL(0xFC000000)
|
||||
#define SPEAR6XX_ICM3_DMA_BASE UL(0xFC400000)
|
||||
#define SPEAR6XX_ICM3_SDRAM_CTRL_BASE UL(0xFC600000)
|
||||
#define SPEAR6XX_ICM3_TMR_BASE UL(0xFC800000)
|
||||
#define SPEAR6XX_ICM3_WDT_BASE UL(0xFC880000)
|
||||
#define SPEAR6XX_ICM3_RTC_BASE UL(0xFC900000)
|
||||
#define SPEAR6XX_ICM3_GPIO_BASE UL(0xFC980000)
|
||||
#define SPEAR6XX_ICM3_SYS_CTRL_BASE UL(0xFCA00000)
|
||||
#define VA_SPEAR6XX_ICM3_SYS_CTRL_BASE IO_ADDRESS(SPEAR6XX_ICM3_SYS_CTRL_BASE)
|
||||
#define VA_SPEAR6XX_ICM3_SYS_CTRL_BASE (VA_SPEAR6XX_ICM3_SMI_CTRL_BASE | SPEAR6XX_ICM3_SYS_CTRL_BASE)
|
||||
#define SPEAR6XX_ICM3_MISC_REG_BASE UL(0xFCA80000)
|
||||
#define VA_SPEAR6XX_ICM3_MISC_REG_BASE IO_ADDRESS(SPEAR6XX_ICM3_MISC_REG_BASE)
|
||||
|
||||
/* ICM4 - High Speed Connection */
|
||||
#define SPEAR6XX_ICM4_BASE UL(0xE0000000)
|
||||
#define SPEAR6XX_ICM4_GMAC_BASE UL(0xE0800000)
|
||||
#define SPEAR6XX_ICM4_USBD_FIFO_BASE UL(0xE1000000)
|
||||
#define SPEAR6XX_ICM4_USBD_CSR_BASE UL(0xE1100000)
|
||||
#define SPEAR6XX_ICM4_USBD_PLDT_BASE UL(0xE1200000)
|
||||
#define SPEAR6XX_ICM4_USB_EHCI0_BASE UL(0xE1800000)
|
||||
#define SPEAR6XX_ICM4_USB_OHCI0_BASE UL(0xE1900000)
|
||||
#define SPEAR6XX_ICM4_USB_EHCI1_BASE UL(0xE2000000)
|
||||
#define SPEAR6XX_ICM4_USB_OHCI1_BASE UL(0xE2100000)
|
||||
#define SPEAR6XX_ICM4_USB_ARB_BASE UL(0xE2800000)
|
||||
#define VA_SPEAR6XX_ICM3_MISC_REG_BASE (VA_SPEAR6XX_ICM3_SMI_CTRL_BASE | SPEAR6XX_ICM3_MISC_REG_BASE)
|
||||
|
||||
/* Debug uart for linux, will be used for debug and uncompress messages */
|
||||
#define SPEAR_DBG_UART_BASE SPEAR6XX_ICM1_UART0_BASE
|
||||
|
@ -1,21 +0,0 @@
|
||||
/*
|
||||
* arch/arm/mach-spear66xx/include/mach/spear600.h
|
||||
*
|
||||
* SPEAr600 Machine specific definition
|
||||
*
|
||||
* Copyright (C) 2009 ST Microelectronics
|
||||
* Viresh Kumar<viresh.kumar@st.com>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_MACH_SPEAR600
|
||||
|
||||
#ifndef __MACH_SPEAR600_H
|
||||
#define __MACH_SPEAR600_H
|
||||
|
||||
#endif /* __MACH_SPEAR600_H */
|
||||
|
||||
#endif /* CONFIG_MACH_SPEAR600 */
|
@ -13,41 +13,404 @@
|
||||
* warranty of any kind, whether express or implied.
|
||||
*/
|
||||
|
||||
#include <linux/amba/pl08x.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_address.h>
|
||||
#include <linux/of_irq.h>
|
||||
#include <linux/of_platform.h>
|
||||
#include <asm/hardware/pl080.h>
|
||||
#include <asm/hardware/vic.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/time.h>
|
||||
#include <asm/mach/map.h>
|
||||
#include <plat/pl080.h>
|
||||
#include <mach/generic.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/spear.h>
|
||||
|
||||
/* Following will create static virtual/physical mappings */
|
||||
static struct map_desc spear6xx_io_desc[] __initdata = {
|
||||
/* dmac device registration */
|
||||
static struct pl08x_channel_data spear600_dma_info[] = {
|
||||
{
|
||||
.virtual = VA_SPEAR6XX_ICM1_UART0_BASE,
|
||||
.pfn = __phys_to_pfn(SPEAR6XX_ICM1_UART0_BASE),
|
||||
.length = SZ_4K,
|
||||
.bus_id = "ssp1_rx",
|
||||
.min_signal = 0,
|
||||
.max_signal = 0,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ssp1_tx",
|
||||
.min_signal = 1,
|
||||
.max_signal = 1,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "uart0_rx",
|
||||
.min_signal = 2,
|
||||
.max_signal = 2,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "uart0_tx",
|
||||
.min_signal = 3,
|
||||
.max_signal = 3,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "uart1_rx",
|
||||
.min_signal = 4,
|
||||
.max_signal = 4,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "uart1_tx",
|
||||
.min_signal = 5,
|
||||
.max_signal = 5,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ssp2_rx",
|
||||
.min_signal = 6,
|
||||
.max_signal = 6,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB2,
|
||||
}, {
|
||||
.bus_id = "ssp2_tx",
|
||||
.min_signal = 7,
|
||||
.max_signal = 7,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB2,
|
||||
}, {
|
||||
.bus_id = "ssp0_rx",
|
||||
.min_signal = 8,
|
||||
.max_signal = 8,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ssp0_tx",
|
||||
.min_signal = 9,
|
||||
.max_signal = 9,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "i2c_rx",
|
||||
.min_signal = 10,
|
||||
.max_signal = 10,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "i2c_tx",
|
||||
.min_signal = 11,
|
||||
.max_signal = 11,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "irda",
|
||||
.min_signal = 12,
|
||||
.max_signal = 12,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "adc",
|
||||
.min_signal = 13,
|
||||
.max_signal = 13,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB2,
|
||||
}, {
|
||||
.bus_id = "to_jpeg",
|
||||
.min_signal = 14,
|
||||
.max_signal = 14,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "from_jpeg",
|
||||
.min_signal = 15,
|
||||
.max_signal = 15,
|
||||
.muxval = 0,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ras0_rx",
|
||||
.min_signal = 0,
|
||||
.max_signal = 0,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ras0_tx",
|
||||
.min_signal = 1,
|
||||
.max_signal = 1,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ras1_rx",
|
||||
.min_signal = 2,
|
||||
.max_signal = 2,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ras1_tx",
|
||||
.min_signal = 3,
|
||||
.max_signal = 3,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ras2_rx",
|
||||
.min_signal = 4,
|
||||
.max_signal = 4,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ras2_tx",
|
||||
.min_signal = 5,
|
||||
.max_signal = 5,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ras3_rx",
|
||||
.min_signal = 6,
|
||||
.max_signal = 6,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ras3_tx",
|
||||
.min_signal = 7,
|
||||
.max_signal = 7,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ras4_rx",
|
||||
.min_signal = 8,
|
||||
.max_signal = 8,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ras4_tx",
|
||||
.min_signal = 9,
|
||||
.max_signal = 9,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ras5_rx",
|
||||
.min_signal = 10,
|
||||
.max_signal = 10,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ras5_tx",
|
||||
.min_signal = 11,
|
||||
.max_signal = 11,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ras6_rx",
|
||||
.min_signal = 12,
|
||||
.max_signal = 12,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ras6_tx",
|
||||
.min_signal = 13,
|
||||
.max_signal = 13,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ras7_rx",
|
||||
.min_signal = 14,
|
||||
.max_signal = 14,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ras7_tx",
|
||||
.min_signal = 15,
|
||||
.max_signal = 15,
|
||||
.muxval = 1,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB1,
|
||||
}, {
|
||||
.bus_id = "ext0_rx",
|
||||
.min_signal = 0,
|
||||
.max_signal = 0,
|
||||
.muxval = 2,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB2,
|
||||
}, {
|
||||
.bus_id = "ext0_tx",
|
||||
.min_signal = 1,
|
||||
.max_signal = 1,
|
||||
.muxval = 2,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB2,
|
||||
}, {
|
||||
.bus_id = "ext1_rx",
|
||||
.min_signal = 2,
|
||||
.max_signal = 2,
|
||||
.muxval = 2,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB2,
|
||||
}, {
|
||||
.bus_id = "ext1_tx",
|
||||
.min_signal = 3,
|
||||
.max_signal = 3,
|
||||
.muxval = 2,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB2,
|
||||
}, {
|
||||
.bus_id = "ext2_rx",
|
||||
.min_signal = 4,
|
||||
.max_signal = 4,
|
||||
.muxval = 2,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB2,
|
||||
}, {
|
||||
.bus_id = "ext2_tx",
|
||||
.min_signal = 5,
|
||||
.max_signal = 5,
|
||||
.muxval = 2,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB2,
|
||||
}, {
|
||||
.bus_id = "ext3_rx",
|
||||
.min_signal = 6,
|
||||
.max_signal = 6,
|
||||
.muxval = 2,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB2,
|
||||
}, {
|
||||
.bus_id = "ext3_tx",
|
||||
.min_signal = 7,
|
||||
.max_signal = 7,
|
||||
.muxval = 2,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB2,
|
||||
}, {
|
||||
.bus_id = "ext4_rx",
|
||||
.min_signal = 8,
|
||||
.max_signal = 8,
|
||||
.muxval = 2,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB2,
|
||||
}, {
|
||||
.bus_id = "ext4_tx",
|
||||
.min_signal = 9,
|
||||
.max_signal = 9,
|
||||
.muxval = 2,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB2,
|
||||
}, {
|
||||
.bus_id = "ext5_rx",
|
||||
.min_signal = 10,
|
||||
.max_signal = 10,
|
||||
.muxval = 2,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB2,
|
||||
}, {
|
||||
.bus_id = "ext5_tx",
|
||||
.min_signal = 11,
|
||||
.max_signal = 11,
|
||||
.muxval = 2,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB2,
|
||||
}, {
|
||||
.bus_id = "ext6_rx",
|
||||
.min_signal = 12,
|
||||
.max_signal = 12,
|
||||
.muxval = 2,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB2,
|
||||
}, {
|
||||
.bus_id = "ext6_tx",
|
||||
.min_signal = 13,
|
||||
.max_signal = 13,
|
||||
.muxval = 2,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB2,
|
||||
}, {
|
||||
.bus_id = "ext7_rx",
|
||||
.min_signal = 14,
|
||||
.max_signal = 14,
|
||||
.muxval = 2,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB2,
|
||||
}, {
|
||||
.bus_id = "ext7_tx",
|
||||
.min_signal = 15,
|
||||
.max_signal = 15,
|
||||
.muxval = 2,
|
||||
.cctl = 0,
|
||||
.periph_buses = PL08X_AHB2,
|
||||
},
|
||||
};
|
||||
|
||||
struct pl08x_platform_data pl080_plat_data = {
|
||||
.memcpy_channel = {
|
||||
.bus_id = "memcpy",
|
||||
.cctl = (PL080_BSIZE_16 << PL080_CONTROL_SB_SIZE_SHIFT | \
|
||||
PL080_BSIZE_16 << PL080_CONTROL_DB_SIZE_SHIFT | \
|
||||
PL080_WIDTH_32BIT << PL080_CONTROL_SWIDTH_SHIFT | \
|
||||
PL080_WIDTH_32BIT << PL080_CONTROL_DWIDTH_SHIFT | \
|
||||
PL080_CONTROL_PROT_BUFF | PL080_CONTROL_PROT_CACHE | \
|
||||
PL080_CONTROL_PROT_SYS),
|
||||
},
|
||||
.lli_buses = PL08X_AHB1,
|
||||
.mem_buses = PL08X_AHB1,
|
||||
.get_signal = pl080_get_signal,
|
||||
.put_signal = pl080_put_signal,
|
||||
.slave_channels = spear600_dma_info,
|
||||
.num_slave_channels = ARRAY_SIZE(spear600_dma_info),
|
||||
};
|
||||
|
||||
/*
|
||||
* Following will create 16MB static virtual/physical mappings
|
||||
* PHYSICAL VIRTUAL
|
||||
* 0xF0000000 0xF0000000
|
||||
* 0xF1000000 0xF1000000
|
||||
* 0xD0000000 0xFD000000
|
||||
* 0xFC000000 0xFC000000
|
||||
*/
|
||||
struct map_desc spear6xx_io_desc[] __initdata = {
|
||||
{
|
||||
.virtual = VA_SPEAR6XX_ML_CPU_BASE,
|
||||
.pfn = __phys_to_pfn(SPEAR6XX_ML_CPU_BASE),
|
||||
.length = 2 * SZ_16M,
|
||||
.type = MT_DEVICE
|
||||
}, {
|
||||
.virtual = VA_SPEAR6XX_ICM1_BASE,
|
||||
.pfn = __phys_to_pfn(SPEAR6XX_ICM1_BASE),
|
||||
.length = SZ_16M,
|
||||
.type = MT_DEVICE
|
||||
}, {
|
||||
.virtual = VA_SPEAR6XX_CPU_VIC_PRI_BASE,
|
||||
.pfn = __phys_to_pfn(SPEAR6XX_CPU_VIC_PRI_BASE),
|
||||
.length = SZ_4K,
|
||||
.type = MT_DEVICE
|
||||
}, {
|
||||
.virtual = VA_SPEAR6XX_CPU_VIC_SEC_BASE,
|
||||
.pfn = __phys_to_pfn(SPEAR6XX_CPU_VIC_SEC_BASE),
|
||||
.length = SZ_4K,
|
||||
.type = MT_DEVICE
|
||||
}, {
|
||||
.virtual = VA_SPEAR6XX_ICM3_SYS_CTRL_BASE,
|
||||
.pfn = __phys_to_pfn(SPEAR6XX_ICM3_SYS_CTRL_BASE),
|
||||
.length = SZ_4K,
|
||||
.type = MT_DEVICE
|
||||
}, {
|
||||
.virtual = VA_SPEAR6XX_ICM3_MISC_REG_BASE,
|
||||
.pfn = __phys_to_pfn(SPEAR6XX_ICM3_MISC_REG_BASE),
|
||||
.length = SZ_4K,
|
||||
.virtual = VA_SPEAR6XX_ICM3_SMI_CTRL_BASE,
|
||||
.pfn = __phys_to_pfn(SPEAR6XX_ICM3_SMI_CTRL_BASE),
|
||||
.length = SZ_16M,
|
||||
.type = MT_DEVICE
|
||||
},
|
||||
};
|
||||
@ -85,16 +448,24 @@ static void __init spear6xx_timer_init(void)
|
||||
clk_put(gpt_clk);
|
||||
clk_put(pclk);
|
||||
|
||||
spear_setup_timer();
|
||||
spear_setup_timer(SPEAR6XX_CPU_TMR_BASE, IRQ_CPU_GPT1_1);
|
||||
}
|
||||
|
||||
struct sys_timer spear6xx_timer = {
|
||||
.init = spear6xx_timer_init,
|
||||
};
|
||||
|
||||
/* Add auxdata to pass platform data */
|
||||
struct of_dev_auxdata spear6xx_auxdata_lookup[] __initdata = {
|
||||
OF_DEV_AUXDATA("arm,pl080", SPEAR6XX_ICM3_DMA_BASE, NULL,
|
||||
&pl080_plat_data),
|
||||
{}
|
||||
};
|
||||
|
||||
static void __init spear600_dt_init(void)
|
||||
{
|
||||
of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
|
||||
of_platform_populate(NULL, of_default_bus_match_table,
|
||||
spear6xx_auxdata_lookup, NULL);
|
||||
}
|
||||
|
||||
static const char *spear600_dt_board_compat[] = {
|
||||
|
@ -723,7 +723,7 @@ config CPU_HIGH_VECTOR
|
||||
bool "Select the High exception vector"
|
||||
help
|
||||
Say Y here to select high exception vector(0xFFFF0000~).
|
||||
The exception vector can be vary depending on the platform
|
||||
The exception vector can vary depending on the platform
|
||||
design in nommu mode. If your platform needs to select
|
||||
high exception vector, say Y.
|
||||
Otherwise or if you are unsure, say N, and the low exception
|
||||
|
@ -320,7 +320,7 @@ retry:
|
||||
*/
|
||||
|
||||
perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, addr);
|
||||
if (flags & FAULT_FLAG_ALLOW_RETRY) {
|
||||
if (!(fault & VM_FAULT_ERROR) && flags & FAULT_FLAG_ALLOW_RETRY) {
|
||||
if (fault & VM_FAULT_MAJOR) {
|
||||
tsk->maj_flt++;
|
||||
perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MAJ, 1,
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include <asm/sections.h>
|
||||
#include <asm/page.h>
|
||||
#include <asm/setup.h>
|
||||
#include <asm/traps.h>
|
||||
#include <asm/mach/arch.h>
|
||||
|
||||
#include "mm.h"
|
||||
@ -39,6 +40,7 @@ void __init sanity_check_meminfo(void)
|
||||
*/
|
||||
void __init paging_init(struct machine_desc *mdesc)
|
||||
{
|
||||
early_trap_init((void *)CONFIG_VECTORS_BASE);
|
||||
bootmem_init();
|
||||
}
|
||||
|
||||
|
@ -254,6 +254,18 @@ __v7_setup:
|
||||
ldr r6, =NMRR @ NMRR
|
||||
mcr p15, 0, r5, c10, c2, 0 @ write PRRR
|
||||
mcr p15, 0, r6, c10, c2, 1 @ write NMRR
|
||||
#endif
|
||||
#ifndef CONFIG_ARM_THUMBEE
|
||||
mrc p15, 0, r0, c0, c1, 0 @ read ID_PFR0 for ThumbEE
|
||||
and r0, r0, #(0xf << 12) @ ThumbEE enabled field
|
||||
teq r0, #(1 << 12) @ check if ThumbEE is present
|
||||
bne 1f
|
||||
mov r5, #0
|
||||
mcr p14, 6, r5, c1, c0, 0 @ Initialize TEEHBR to 0
|
||||
mrc p14, 6, r0, c0, c0, 0 @ load TEECR
|
||||
orr r0, r0, #1 @ set the 1st bit in order to
|
||||
mcr p14, 6, r0, c0, c0, 0 @ stop userspace TEEHBR access
|
||||
1:
|
||||
#endif
|
||||
adr r5, v7_crval
|
||||
ldmia r5, {r5, r6}
|
||||
|
@ -398,32 +398,6 @@ struct clk dummy_ck = {
|
||||
.ops = &clkops_null,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_CPU_FREQ
|
||||
void clk_init_cpufreq_table(struct cpufreq_frequency_table **table)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
if (!arch_clock || !arch_clock->clk_init_cpufreq_table)
|
||||
return;
|
||||
|
||||
spin_lock_irqsave(&clockfw_lock, flags);
|
||||
arch_clock->clk_init_cpufreq_table(table);
|
||||
spin_unlock_irqrestore(&clockfw_lock, flags);
|
||||
}
|
||||
|
||||
void clk_exit_cpufreq_table(struct cpufreq_frequency_table **table)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
if (!arch_clock || !arch_clock->clk_exit_cpufreq_table)
|
||||
return;
|
||||
|
||||
spin_lock_irqsave(&clockfw_lock, flags);
|
||||
arch_clock->clk_exit_cpufreq_table(table);
|
||||
spin_unlock_irqrestore(&clockfw_lock, flags);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
*
|
||||
*/
|
||||
|
@ -272,8 +272,6 @@ struct clk {
|
||||
#endif
|
||||
};
|
||||
|
||||
struct cpufreq_frequency_table;
|
||||
|
||||
struct clk_functions {
|
||||
int (*clk_enable)(struct clk *clk);
|
||||
void (*clk_disable)(struct clk *clk);
|
||||
@ -283,10 +281,6 @@ struct clk_functions {
|
||||
void (*clk_allow_idle)(struct clk *clk);
|
||||
void (*clk_deny_idle)(struct clk *clk);
|
||||
void (*clk_disable_unused)(struct clk *clk);
|
||||
#ifdef CONFIG_CPU_FREQ
|
||||
void (*clk_init_cpufreq_table)(struct cpufreq_frequency_table **);
|
||||
void (*clk_exit_cpufreq_table)(struct cpufreq_frequency_table **);
|
||||
#endif
|
||||
};
|
||||
|
||||
extern int mpurate;
|
||||
@ -301,10 +295,6 @@ extern void recalculate_root_clocks(void);
|
||||
extern unsigned long followparent_recalc(struct clk *clk);
|
||||
extern void clk_enable_init_clocks(void);
|
||||
unsigned long omap_fixed_divisor_recalc(struct clk *clk);
|
||||
#ifdef CONFIG_CPU_FREQ
|
||||
extern void clk_init_cpufreq_table(struct cpufreq_frequency_table **table);
|
||||
extern void clk_exit_cpufreq_table(struct cpufreq_frequency_table **table);
|
||||
#endif
|
||||
extern struct clk *omap_clk_get_by_name(const char *name);
|
||||
extern int omap_clk_enable_autoidle_all(void);
|
||||
extern int omap_clk_disable_autoidle_all(void);
|
||||
|
@ -302,6 +302,7 @@ comment "Power management"
|
||||
config SAMSUNG_PM_DEBUG
|
||||
bool "S3C2410 PM Suspend debug"
|
||||
depends on PM
|
||||
select DEBUG_LL
|
||||
help
|
||||
Say Y here if you want verbose debugging from the PM Suspend and
|
||||
Resume code. See <file:Documentation/arm/Samsung-S3C24XX/Suspend.txt>
|
||||
|
@ -9,9 +9,10 @@ choice
|
||||
default ARCH_SPEAR3XX
|
||||
|
||||
config ARCH_SPEAR3XX
|
||||
bool "SPEAr3XX"
|
||||
bool "ST SPEAr3xx with Device Tree"
|
||||
select ARM_VIC
|
||||
select CPU_ARM926T
|
||||
select USE_OF
|
||||
help
|
||||
Supports for ARM's SPEAR3XX family
|
||||
|
||||
|
@ -3,6 +3,6 @@
|
||||
#
|
||||
|
||||
# Common support
|
||||
obj-y := clock.o restart.o time.o
|
||||
obj-y := clock.o restart.o time.o pl080.o
|
||||
|
||||
obj-$(CONFIG_ARCH_SPEAR3XX) += shirq.o padmux.o
|
||||
|
@ -12,7 +12,7 @@
|
||||
*/
|
||||
|
||||
#include <linux/amba/serial.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/spear.h>
|
||||
|
||||
.macro addruart, rp, rv, tmp
|
||||
mov \rp, #SPEAR_DBG_UART_BASE @ Physical base
|
||||
|
@ -1,17 +0,0 @@
|
||||
/*
|
||||
* arch/arm/plat-spear/include/plat/hardware.h
|
||||
*
|
||||
* Hardware definitions for SPEAr
|
||||
*
|
||||
* Copyright (C) 2010 ST Microelectronics
|
||||
* Viresh Kumar<viresh.kumar@st.com>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef __PLAT_HARDWARE_H
|
||||
#define __PLAT_HARDWARE_H
|
||||
|
||||
#endif /* __PLAT_HARDWARE_H */
|
21
arch/arm/plat-spear/include/plat/pl080.h
Normal file
21
arch/arm/plat-spear/include/plat/pl080.h
Normal file
@ -0,0 +1,21 @@
|
||||
/*
|
||||
* arch/arm/plat-spear/include/plat/pl080.h
|
||||
*
|
||||
* DMAC pl080 definitions for SPEAr platform
|
||||
*
|
||||
* Copyright (C) 2012 ST Microelectronics
|
||||
* Viresh Kumar <viresh.kumar@st.com>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef __PLAT_PL080_H
|
||||
#define __PLAT_PL080_H
|
||||
|
||||
struct pl08x_dma_chan;
|
||||
int pl080_get_signal(struct pl08x_dma_chan *ch);
|
||||
void pl080_put_signal(struct pl08x_dma_chan *ch);
|
||||
|
||||
#endif /* __PLAT_PL080_H */
|
@ -13,7 +13,7 @@
|
||||
|
||||
#include <linux/io.h>
|
||||
#include <linux/amba/serial.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/spear.h>
|
||||
|
||||
#ifndef __PLAT_UNCOMPRESS_H
|
||||
#define __PLAT_UNCOMPRESS_H
|
||||
|
80
arch/arm/plat-spear/pl080.c
Normal file
80
arch/arm/plat-spear/pl080.c
Normal file
@ -0,0 +1,80 @@
|
||||
/*
|
||||
* arch/arm/plat-spear/pl080.c
|
||||
*
|
||||
* DMAC pl080 definitions for SPEAr platform
|
||||
*
|
||||
* Copyright (C) 2012 ST Microelectronics
|
||||
* Viresh Kumar <viresh.kumar@st.com>
|
||||
*
|
||||
* 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 <linux/amba/pl08x.h>
|
||||
#include <linux/amba/bus.h>
|
||||
#include <linux/bug.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/spinlock_types.h>
|
||||
#include <mach/spear.h>
|
||||
#include <mach/misc_regs.h>
|
||||
|
||||
static spinlock_t lock = __SPIN_LOCK_UNLOCKED(x);
|
||||
|
||||
struct {
|
||||
unsigned char busy;
|
||||
unsigned char val;
|
||||
} signals[16] = {{0, 0}, };
|
||||
|
||||
int pl080_get_signal(struct pl08x_dma_chan *ch)
|
||||
{
|
||||
const struct pl08x_channel_data *cd = ch->cd;
|
||||
unsigned int signal = cd->min_signal, val;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&lock, flags);
|
||||
|
||||
/* Return if signal is already acquired by somebody else */
|
||||
if (signals[signal].busy &&
|
||||
(signals[signal].val != cd->muxval)) {
|
||||
spin_unlock_irqrestore(&lock, flags);
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
/* If acquiring for the first time, configure it */
|
||||
if (!signals[signal].busy) {
|
||||
val = readl(DMA_CHN_CFG);
|
||||
|
||||
/*
|
||||
* Each request line has two bits in DMA_CHN_CFG register. To
|
||||
* goto the bits of current request line, do left shift of
|
||||
* value by 2 * signal number.
|
||||
*/
|
||||
val &= ~(0x3 << (signal * 2));
|
||||
val |= cd->muxval << (signal * 2);
|
||||
writel(val, DMA_CHN_CFG);
|
||||
}
|
||||
|
||||
signals[signal].busy++;
|
||||
signals[signal].val = cd->muxval;
|
||||
spin_unlock_irqrestore(&lock, flags);
|
||||
|
||||
return signal;
|
||||
}
|
||||
|
||||
void pl080_put_signal(struct pl08x_dma_chan *ch)
|
||||
{
|
||||
const struct pl08x_channel_data *cd = ch->cd;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&lock, flags);
|
||||
|
||||
/* if signal is not used */
|
||||
if (!signals[cd->min_signal].busy)
|
||||
BUG();
|
||||
|
||||
signals[cd->min_signal].busy--;
|
||||
|
||||
spin_unlock_irqrestore(&lock, flags);
|
||||
}
|
@ -13,7 +13,7 @@
|
||||
#include <linux/io.h>
|
||||
#include <asm/system_misc.h>
|
||||
#include <asm/hardware/sp810.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/spear.h>
|
||||
#include <mach/generic.h>
|
||||
|
||||
void spear_restart(char mode, const char *cmd)
|
||||
|
@ -15,14 +15,13 @@
|
||||
#include <linux/err.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/time.h>
|
||||
#include <linux/irq.h>
|
||||
#include <asm/mach/time.h>
|
||||
#include <mach/generic.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/irqs.h>
|
||||
|
||||
/*
|
||||
* We would use TIMER0 and TIMER1 as clockevent and clocksource.
|
||||
@ -175,7 +174,7 @@ static struct irqaction spear_timer_irq = {
|
||||
.handler = spear_timer_interrupt
|
||||
};
|
||||
|
||||
static void __init spear_clockevent_init(void)
|
||||
static void __init spear_clockevent_init(int irq)
|
||||
{
|
||||
u32 tick_rate;
|
||||
|
||||
@ -195,19 +194,19 @@ static void __init spear_clockevent_init(void)
|
||||
|
||||
clockevents_register_device(&clkevt);
|
||||
|
||||
setup_irq(SPEAR_GPT0_CHAN0_IRQ, &spear_timer_irq);
|
||||
setup_irq(irq, &spear_timer_irq);
|
||||
}
|
||||
|
||||
void __init spear_setup_timer(void)
|
||||
void __init spear_setup_timer(resource_size_t base, int irq)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (!request_mem_region(SPEAR_GPT0_BASE, SZ_1K, "gpt0")) {
|
||||
if (!request_mem_region(base, SZ_1K, "gpt0")) {
|
||||
pr_err("%s:cannot get IO addr\n", __func__);
|
||||
return;
|
||||
}
|
||||
|
||||
gpt_base = (void __iomem *)ioremap(SPEAR_GPT0_BASE, SZ_1K);
|
||||
gpt_base = ioremap(base, SZ_1K);
|
||||
if (!gpt_base) {
|
||||
pr_err("%s:ioremap failed for gpt\n", __func__);
|
||||
goto err_mem;
|
||||
@ -225,7 +224,7 @@ void __init spear_setup_timer(void)
|
||||
goto err_clk;
|
||||
}
|
||||
|
||||
spear_clockevent_init();
|
||||
spear_clockevent_init(irq);
|
||||
spear_clocksource_init();
|
||||
|
||||
return;
|
||||
@ -235,5 +234,5 @@ err_clk:
|
||||
err_iomap:
|
||||
iounmap(gpt_base);
|
||||
err_mem:
|
||||
release_mem_region(SPEAR_GPT0_BASE, SZ_1K);
|
||||
release_mem_region(base, SZ_1K);
|
||||
}
|
||||
|
@ -42,10 +42,6 @@
|
||||
/* This number is used when no interrupt has been assigned */
|
||||
#define NO_IRQ 0
|
||||
|
||||
struct irq_data;
|
||||
extern irq_hw_number_t irqd_to_hwirq(struct irq_data *d);
|
||||
extern irq_hw_number_t virq_to_hw(unsigned int virq);
|
||||
|
||||
extern void __init init_pic_c64xplus(void);
|
||||
|
||||
extern void init_IRQ(void);
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user