mvebu soc changes for v3.10
- use the mvebu-mbus driver - prep for LPAE support Depends: - mvebu/cleanup (tags/cleanup_for_v3.10) - mvebu/drivers (tags/drivers_for_v3.10) -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.19 (GNU/Linux) iQEcBAABAgAGBQJRbApqAAoJEAi3KVZQDZAeiUkH+gI3KNnIEmwbMANGy+zdX70Y mVj5X51MkXCawqNPLT6KYTO16Ap8STBXDxLfQfll1BuIeATgQgqs8dCcykiYQ4me 45Hj9+6uZhfPpN43u4syFPoYaLSAMT9Oe/9ntcpdnyu4fEsRmGGh2Dg8bhYcG1B2 +IVB67qSJ3vU0D2bcqsbSPuSu9MW2Qloc5+SMR74TcsyseZw10kbvL6cdwi9DpNt ru2c/bXqO88U1pmeedJ8Cxl0KGFDhocYWV6orqph+2jIxuCDYd7DjOXFKeMHwcDX lj54wMUyp8EzTs+huhnK3qL6waXTyccmMDDvgIL6WiFywvklTOJOFz0BnfHIHpk= =RK7u -----END PGP SIGNATURE----- Merge tag 'tags/soc_for_v3.10' into mvebu/dt Pulling in mvebu branches which contain changes to armada*.dts? files for LPAE conversion. mvebu soc changes for v3.10 - use the mvebu-mbus driver - prep for LPAE support Depends: - mvebu/cleanup (tags/cleanup_for_v3.10) - mvebu/drivers (tags/drivers_for_v3.10)
This commit is contained in:
commit
b757f17e91
8
CREDITS
8
CREDITS
@ -1510,6 +1510,14 @@ D: Natsemi ethernet
|
||||
D: Cobalt Networks (x86) support
|
||||
D: This-and-That
|
||||
|
||||
N: Mark M. Hoffman
|
||||
E: mhoffman@lightlink.com
|
||||
D: asb100, lm93 and smsc47b397 hardware monitoring drivers
|
||||
D: hwmon subsystem core
|
||||
D: hwmon subsystem maintainer
|
||||
D: i2c-sis96x and i2c-stub SMBus drivers
|
||||
S: USA
|
||||
|
||||
N: Dirk Hohndel
|
||||
E: hohndel@suse.de
|
||||
D: The XFree86[tm] Project
|
||||
|
@ -13,9 +13,6 @@ Required parent device properties:
|
||||
4 = active high level-sensitive
|
||||
8 = active low level-sensitive
|
||||
|
||||
Optional parent device properties:
|
||||
- reg : contains the PRCMU mailbox address for the AB8500 i2c port
|
||||
|
||||
The AB8500 consists of a large and varied group of sub-devices:
|
||||
|
||||
Device IRQ Names Supply Names Description
|
||||
@ -86,9 +83,8 @@ Non-standard child device properties:
|
||||
- stericsson,amic2-bias-vamic1 : Analoge Mic wishes to use a non-standard Vamic
|
||||
- stericsson,earpeice-cmv : Earpeice voltage (only: 950 | 1100 | 1270 | 1580)
|
||||
|
||||
ab8500@5 {
|
||||
ab8500 {
|
||||
compatible = "stericsson,ab8500";
|
||||
reg = <5>; /* mailbox 5 is i2c */
|
||||
interrupts = <0 40 0x4>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
|
@ -11,6 +11,9 @@ Required properties:
|
||||
- "nvidia,tegra20-uart"
|
||||
- "nxp,lpc3220-uart"
|
||||
- "ibm,qpace-nwp-serial"
|
||||
- "altr,16550-FIFO32"
|
||||
- "altr,16550-FIFO64"
|
||||
- "altr,16550-FIFO128"
|
||||
- "serial" if the port type is unknown.
|
||||
- reg : offset and length of the register set for the device.
|
||||
- interrupts : should contain uart interrupt.
|
||||
|
@ -23,7 +23,7 @@ Supported chips:
|
||||
Datasheet: Publicly available at the Maxim website
|
||||
http://www.maxim-ic.com/
|
||||
* Microchip (TelCom) TCN75
|
||||
Prefix: 'lm75'
|
||||
Prefix: 'tcn75'
|
||||
Addresses scanned: none
|
||||
Datasheet: Publicly available at the Microchip website
|
||||
http://www.microchip.com/
|
||||
|
@ -5,7 +5,7 @@ Supported adapters:
|
||||
Documentation:
|
||||
http://www.diolan.com/i2c/u2c12.html
|
||||
|
||||
Author: Guenter Roeck <guenter.roeck@ericsson.com>
|
||||
Author: Guenter Roeck <linux@roeck-us.net>
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
@ -3,10 +3,26 @@ ALPS Touchpad Protocol
|
||||
|
||||
Introduction
|
||||
------------
|
||||
Currently the ALPS touchpad driver supports five protocol versions in use by
|
||||
ALPS touchpads, called versions 1, 2, 3, 4 and 5.
|
||||
|
||||
Currently the ALPS touchpad driver supports four protocol versions in use by
|
||||
ALPS touchpads, called versions 1, 2, 3, and 4. Information about the various
|
||||
protocol versions is contained in the following sections.
|
||||
Since roughly mid-2010 several new ALPS touchpads have been released and
|
||||
integrated into a variety of laptops and netbooks. These new touchpads
|
||||
have enough behavior differences that the alps_model_data definition
|
||||
table, describing the properties of the different versions, is no longer
|
||||
adequate. The design choices were to re-define the alps_model_data
|
||||
table, with the risk of regression testing existing devices, or isolate
|
||||
the new devices outside of the alps_model_data table. The latter design
|
||||
choice was made. The new touchpad signatures are named: "Rushmore",
|
||||
"Pinnacle", and "Dolphin", which you will see in the alps.c code.
|
||||
For the purposes of this document, this group of ALPS touchpads will
|
||||
generically be called "new ALPS touchpads".
|
||||
|
||||
We experimented with probing the ACPI interface _HID (Hardware ID)/_CID
|
||||
(Compatibility ID) definition as a way to uniquely identify the
|
||||
different ALPS variants but there did not appear to be a 1:1 mapping.
|
||||
In fact, it appeared to be an m:n mapping between the _HID and actual
|
||||
hardware type.
|
||||
|
||||
Detection
|
||||
---------
|
||||
@ -20,9 +36,13 @@ If the E6 report is successful, the touchpad model is identified using the "E7
|
||||
report" sequence: E8-E7-E7-E7-E9. The response is the model signature and is
|
||||
matched against known models in the alps_model_data_array.
|
||||
|
||||
With protocol versions 3 and 4, the E7 report model signature is always
|
||||
73-02-64. To differentiate between these versions, the response from the
|
||||
"Enter Command Mode" sequence must be inspected as described below.
|
||||
For older touchpads supporting protocol versions 3 and 4, the E7 report
|
||||
model signature is always 73-02-64. To differentiate between these
|
||||
versions, the response from the "Enter Command Mode" sequence must be
|
||||
inspected as described below.
|
||||
|
||||
The new ALPS touchpads have an E7 signature of 73-03-50 or 73-03-0A but
|
||||
seem to be better differentiated by the EC Command Mode response.
|
||||
|
||||
Command Mode
|
||||
------------
|
||||
@ -47,6 +67,14 @@ address of the register being read, and the third contains the value of the
|
||||
register. Registers are written by writing the value one nibble at a time
|
||||
using the same encoding used for addresses.
|
||||
|
||||
For the new ALPS touchpads, the EC command is used to enter command
|
||||
mode. The response in the new ALPS touchpads is significantly different,
|
||||
and more important in determining the behavior. This code has been
|
||||
separated from the original alps_model_data table and put in the
|
||||
alps_identify function. For example, there seem to be two hardware init
|
||||
sequences for the "Dolphin" touchpads as determined by the second byte
|
||||
of the EC response.
|
||||
|
||||
Packet Format
|
||||
-------------
|
||||
|
||||
@ -187,3 +215,28 @@ There are several things worth noting here.
|
||||
well.
|
||||
|
||||
So far no v4 devices with tracksticks have been encountered.
|
||||
|
||||
ALPS Absolute Mode - Protocol Version 5
|
||||
---------------------------------------
|
||||
This is basically Protocol Version 3 but with different logic for packet
|
||||
decode. It uses the same alps_process_touchpad_packet_v3 call with a
|
||||
specialized decode_fields function pointer to correctly interpret the
|
||||
packets. This appears to only be used by the Dolphin devices.
|
||||
|
||||
For single-touch, the 6-byte packet format is:
|
||||
|
||||
byte 0: 1 1 0 0 1 0 0 0
|
||||
byte 1: 0 x6 x5 x4 x3 x2 x1 x0
|
||||
byte 2: 0 y6 y5 y4 y3 y2 y1 y0
|
||||
byte 3: 0 M R L 1 m r l
|
||||
byte 4: y10 y9 y8 y7 x10 x9 x8 x7
|
||||
byte 5: 0 z6 z5 z4 z3 z2 z1 z0
|
||||
|
||||
For mt, the format is:
|
||||
|
||||
byte 0: 1 1 1 n3 1 n2 n1 x24
|
||||
byte 1: 1 y7 y6 y5 y4 y3 y2 y1
|
||||
byte 2: ? x2 x1 y12 y11 y10 y9 y8
|
||||
byte 3: 0 x23 x22 x21 x20 x19 x18 x17
|
||||
byte 4: 0 x9 x8 x7 x6 x5 x4 x3
|
||||
byte 5: 0 x16 x15 x14 x13 x12 x11 x10
|
||||
|
@ -105,6 +105,83 @@ Copyright (C) 1999-2000 Maxim Krasnyansky <max_mk@yahoo.com>
|
||||
Proto [2 bytes]
|
||||
Raw protocol(IP, IPv6, etc) frame.
|
||||
|
||||
3.3 Multiqueue tuntap interface:
|
||||
|
||||
From version 3.8, Linux supports multiqueue tuntap which can uses multiple
|
||||
file descriptors (queues) to parallelize packets sending or receiving. The
|
||||
device allocation is the same as before, and if user wants to create multiple
|
||||
queues, TUNSETIFF with the same device name must be called many times with
|
||||
IFF_MULTI_QUEUE flag.
|
||||
|
||||
char *dev should be the name of the device, queues is the number of queues to
|
||||
be created, fds is used to store and return the file descriptors (queues)
|
||||
created to the caller. Each file descriptor were served as the interface of a
|
||||
queue which could be accessed by userspace.
|
||||
|
||||
#include <linux/if.h>
|
||||
#include <linux/if_tun.h>
|
||||
|
||||
int tun_alloc_mq(char *dev, int queues, int *fds)
|
||||
{
|
||||
struct ifreq ifr;
|
||||
int fd, err, i;
|
||||
|
||||
if (!dev)
|
||||
return -1;
|
||||
|
||||
memset(&ifr, 0, sizeof(ifr));
|
||||
/* Flags: IFF_TUN - TUN device (no Ethernet headers)
|
||||
* IFF_TAP - TAP device
|
||||
*
|
||||
* IFF_NO_PI - Do not provide packet information
|
||||
* IFF_MULTI_QUEUE - Create a queue of multiqueue device
|
||||
*/
|
||||
ifr.ifr_flags = IFF_TAP | IFF_NO_PI | IFF_MULTI_QUEUE;
|
||||
strcpy(ifr.ifr_name, dev);
|
||||
|
||||
for (i = 0; i < queues; i++) {
|
||||
if ((fd = open("/dev/net/tun", O_RDWR)) < 0)
|
||||
goto err;
|
||||
err = ioctl(fd, TUNSETIFF, (void *)&ifr);
|
||||
if (err) {
|
||||
close(fd);
|
||||
goto err;
|
||||
}
|
||||
fds[i] = fd;
|
||||
}
|
||||
|
||||
return 0;
|
||||
err:
|
||||
for (--i; i >= 0; i--)
|
||||
close(fds[i]);
|
||||
return err;
|
||||
}
|
||||
|
||||
A new ioctl(TUNSETQUEUE) were introduced to enable or disable a queue. When
|
||||
calling it with IFF_DETACH_QUEUE flag, the queue were disabled. And when
|
||||
calling it with IFF_ATTACH_QUEUE flag, the queue were enabled. The queue were
|
||||
enabled by default after it was created through TUNSETIFF.
|
||||
|
||||
fd is the file descriptor (queue) that we want to enable or disable, when
|
||||
enable is true we enable it, otherwise we disable it
|
||||
|
||||
#include <linux/if.h>
|
||||
#include <linux/if_tun.h>
|
||||
|
||||
int tun_set_queue(int fd, int enable)
|
||||
{
|
||||
struct ifreq ifr;
|
||||
|
||||
memset(&ifr, 0, sizeof(ifr));
|
||||
|
||||
if (enable)
|
||||
ifr.ifr_flags = IFF_ATTACH_QUEUE;
|
||||
else
|
||||
ifr.ifr_flags = IFF_DETACH_QUEUE;
|
||||
|
||||
return ioctl(fd, TUNSETQUEUE, (void *)&ifr);
|
||||
}
|
||||
|
||||
Universal TUN/TAP device driver Frequently Asked Question.
|
||||
|
||||
1. What platforms are supported by TUN/TAP driver ?
|
||||
|
@ -912,7 +912,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
||||
models depending on the codec chip. The list of available models
|
||||
is found in HD-Audio-Models.txt
|
||||
|
||||
The model name "genric" is treated as a special case. When this
|
||||
The model name "generic" is treated as a special case. When this
|
||||
model is given, the driver uses the generic codec parser without
|
||||
"codec-patch". It's sometimes good for testing and debugging.
|
||||
|
||||
|
@ -285,7 +285,7 @@ sample data.
|
||||
<H4>
|
||||
7.2.4 Close Callback</H4>
|
||||
The <TT>close</TT> callback is called when this device is closed by the
|
||||
applicaion. If any private data was allocated in open callback, it must
|
||||
application. If any private data was allocated in open callback, it must
|
||||
be released in the close callback. The deletion of ALSA port should be
|
||||
done here, too. This callback must not be NULL.
|
||||
<H4>
|
||||
|
@ -1873,7 +1873,7 @@ feature:
|
||||
|
||||
status\input | 0 | 1 | else |
|
||||
--------------+------------+------------+------------+
|
||||
not allocated |(do nothing)| alloc+swap | EINVAL |
|
||||
not allocated |(do nothing)| alloc+swap |(do nothing)|
|
||||
--------------+------------+------------+------------+
|
||||
allocated | free | swap | clear |
|
||||
--------------+------------+------------+------------+
|
||||
|
60
MAINTAINERS
60
MAINTAINERS
@ -1338,12 +1338,6 @@ S: Maintained
|
||||
F: drivers/platform/x86/asus*.c
|
||||
F: drivers/platform/x86/eeepc*.c
|
||||
|
||||
ASUS ASB100 HARDWARE MONITOR DRIVER
|
||||
M: "Mark M. Hoffman" <mhoffman@lightlink.com>
|
||||
L: lm-sensors@lm-sensors.org
|
||||
S: Maintained
|
||||
F: drivers/hwmon/asb100.c
|
||||
|
||||
ASYNCHRONOUS TRANSFERS/TRANSFORMS (IOAT) API
|
||||
M: Dan Williams <djbw@fb.com>
|
||||
W: http://sourceforge.net/projects/xscaleiop
|
||||
@ -1467,6 +1461,12 @@ F: drivers/dma/at_hdmac.c
|
||||
F: drivers/dma/at_hdmac_regs.h
|
||||
F: include/linux/platform_data/dma-atmel.h
|
||||
|
||||
ATMEL I2C DRIVER
|
||||
M: Ludovic Desroches <ludovic.desroches@atmel.com>
|
||||
L: linux-i2c@vger.kernel.org
|
||||
S: Supported
|
||||
F: drivers/i2c/busses/i2c-at91.c
|
||||
|
||||
ATMEL ISI DRIVER
|
||||
M: Josh Wu <josh.wu@atmel.com>
|
||||
L: linux-media@vger.kernel.org
|
||||
@ -2629,7 +2629,7 @@ F: include/uapi/drm/
|
||||
|
||||
INTEL DRM DRIVERS (excluding Poulsbo, Moorestown and derivative chipsets)
|
||||
M: Daniel Vetter <daniel.vetter@ffwll.ch>
|
||||
L: intel-gfx@lists.freedesktop.org (subscribers-only)
|
||||
L: intel-gfx@lists.freedesktop.org
|
||||
L: dri-devel@lists.freedesktop.org
|
||||
T: git git://people.freedesktop.org/~danvet/drm-intel
|
||||
S: Supported
|
||||
@ -3851,7 +3851,7 @@ F: drivers/i2c/busses/i2c-ismt.c
|
||||
F: Documentation/i2c/busses/i2c-ismt
|
||||
|
||||
I2C/SMBUS STUB DRIVER
|
||||
M: "Mark M. Hoffman" <mhoffman@lightlink.com>
|
||||
M: Jean Delvare <khali@linux-fr.org>
|
||||
L: linux-i2c@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/i2c/i2c-stub.c
|
||||
@ -4005,6 +4005,22 @@ M: Stanislaw Gruszka <stf_xl@wp.pl>
|
||||
S: Maintained
|
||||
F: drivers/usb/atm/ueagle-atm.c
|
||||
|
||||
INA209 HARDWARE MONITOR DRIVER
|
||||
M: Guenter Roeck <linux@roeck-us.net>
|
||||
L: lm-sensors@lm-sensors.org
|
||||
S: Maintained
|
||||
F: Documentation/hwmon/ina209
|
||||
F: Documentation/devicetree/bindings/i2c/ina209.txt
|
||||
F: drivers/hwmon/ina209.c
|
||||
|
||||
INA2XX HARDWARE MONITOR DRIVER
|
||||
M: Guenter Roeck <linux@roeck-us.net>
|
||||
L: lm-sensors@lm-sensors.org
|
||||
S: Maintained
|
||||
F: Documentation/hwmon/ina2xx
|
||||
F: drivers/hwmon/ina2xx.c
|
||||
F: include/linux/platform_data/ina2xx.h
|
||||
|
||||
INDUSTRY PACK SUBSYSTEM (IPACK)
|
||||
M: Samuel Iglesias Gonsalvez <siglesias@igalia.com>
|
||||
M: Jens Taprogge <jens.taprogge@taprogge.org>
|
||||
@ -5098,6 +5114,15 @@ S: Maintained
|
||||
F: Documentation/hwmon/max6650
|
||||
F: drivers/hwmon/max6650.c
|
||||
|
||||
MAX6697 HARDWARE MONITOR DRIVER
|
||||
M: Guenter Roeck <linux@roeck-us.net>
|
||||
L: lm-sensors@lm-sensors.org
|
||||
S: Maintained
|
||||
F: Documentation/hwmon/max6697
|
||||
F: Documentation/devicetree/bindings/i2c/max6697.txt
|
||||
F: drivers/hwmon/max6697.c
|
||||
F: include/linux/platform_data/max6697.h
|
||||
|
||||
MAXIRADIO FM RADIO RECEIVER DRIVER
|
||||
M: Hans Verkuil <hverkuil@xs4all.nl>
|
||||
L: linux-media@vger.kernel.org
|
||||
@ -5622,6 +5647,14 @@ S: Maintained
|
||||
F: drivers/video/riva/
|
||||
F: drivers/video/nvidia/
|
||||
|
||||
NVM EXPRESS DRIVER
|
||||
M: Matthew Wilcox <willy@linux.intel.com>
|
||||
L: linux-nvme@lists.infradead.org
|
||||
T: git git://git.infradead.org/users/willy/linux-nvme.git
|
||||
S: Supported
|
||||
F: drivers/block/nvme.c
|
||||
F: include/linux/nvme.h
|
||||
|
||||
OMAP SUPPORT
|
||||
M: Tony Lindgren <tony@atomide.com>
|
||||
L: linux-omap@vger.kernel.org
|
||||
@ -6412,6 +6445,8 @@ F: Documentation/networking/LICENSE.qla3xxx
|
||||
F: drivers/net/ethernet/qlogic/qla3xxx.*
|
||||
|
||||
QLOGIC QLCNIC (1/10)Gb ETHERNET DRIVER
|
||||
M: Rajesh Borundia <rajesh.borundia@qlogic.com>
|
||||
M: Shahed Shaikh <shahed.shaikh@qlogic.com>
|
||||
M: Jitendra Kalsaria <jitendra.kalsaria@qlogic.com>
|
||||
M: Sony Chacko <sony.chacko@qlogic.com>
|
||||
M: linux-driver@qlogic.com
|
||||
@ -7171,13 +7206,6 @@ L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/ethernet/sis/sis900.*
|
||||
|
||||
SIS 96X I2C/SMBUS DRIVER
|
||||
M: "Mark M. Hoffman" <mhoffman@lightlink.com>
|
||||
L: linux-i2c@vger.kernel.org
|
||||
S: Maintained
|
||||
F: Documentation/i2c/busses/i2c-sis96x
|
||||
F: drivers/i2c/busses/i2c-sis96x.c
|
||||
|
||||
SIS FRAMEBUFFER DRIVER
|
||||
M: Thomas Winischhofer <thomas@winischhofer.net>
|
||||
W: http://www.winischhofer.net/linuxsisvga.shtml
|
||||
@ -7255,7 +7283,7 @@ F: Documentation/hwmon/sch5627
|
||||
F: drivers/hwmon/sch5627.c
|
||||
|
||||
SMSC47B397 HARDWARE MONITOR DRIVER
|
||||
M: "Mark M. Hoffman" <mhoffman@lightlink.com>
|
||||
M: Jean Delvare <khali@linux-fr.org>
|
||||
L: lm-sensors@lm-sensors.org
|
||||
S: Maintained
|
||||
F: Documentation/hwmon/smsc47b397
|
||||
|
2
Makefile
2
Makefile
@ -1,7 +1,7 @@
|
||||
VERSION = 3
|
||||
PATCHLEVEL = 9
|
||||
SUBLEVEL = 0
|
||||
EXTRAVERSION = -rc2
|
||||
EXTRAVERSION = -rc4
|
||||
NAME = Unicycling Gorilla
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
@ -319,13 +319,6 @@ config ARCH_WANT_OLD_COMPAT_IPC
|
||||
select ARCH_WANT_COMPAT_IPC_PARSE_VERSION
|
||||
bool
|
||||
|
||||
config HAVE_VIRT_TO_BUS
|
||||
bool
|
||||
help
|
||||
An architecture should select this if it implements the
|
||||
deprecated interface virt_to_bus(). All new architectures
|
||||
should probably not select this.
|
||||
|
||||
config HAVE_ARCH_SECCOMP_FILTER
|
||||
bool
|
||||
help
|
||||
|
@ -9,7 +9,7 @@ config ALPHA
|
||||
select HAVE_PERF_EVENTS
|
||||
select HAVE_DMA_ATTRS
|
||||
select HAVE_GENERIC_HARDIRQS
|
||||
select HAVE_VIRT_TO_BUS
|
||||
select VIRT_TO_BUS
|
||||
select GENERIC_IRQ_PROBE
|
||||
select AUTO_IRQ_AFFINITY if SMP
|
||||
select GENERIC_IRQ_SHOW
|
||||
|
@ -49,7 +49,6 @@ config ARM
|
||||
select HAVE_REGS_AND_STACK_ACCESS_API
|
||||
select HAVE_SYSCALL_TRACEPOINTS
|
||||
select HAVE_UID16
|
||||
select HAVE_VIRT_TO_BUS
|
||||
select KTIME_SCALAR
|
||||
select PERF_USE_VMALLOC
|
||||
select RTC_LIB
|
||||
@ -563,6 +562,7 @@ config ARCH_DOVE
|
||||
select PINCTRL_DOVE
|
||||
select PLAT_ORION_LEGACY
|
||||
select USB_ARCH_HAS_EHCI
|
||||
select MVEBU_MBUS
|
||||
help
|
||||
Support for the Marvell Dove SoC 88AP510
|
||||
|
||||
@ -576,6 +576,7 @@ config ARCH_KIRKWOOD
|
||||
select PINCTRL
|
||||
select PINCTRL_KIRKWOOD
|
||||
select PLAT_ORION_LEGACY
|
||||
select MVEBU_MBUS
|
||||
help
|
||||
Support for the following Marvell Kirkwood series SoCs:
|
||||
88F6180, 88F6192 and 88F6281.
|
||||
@ -587,6 +588,7 @@ config ARCH_MV78XX0
|
||||
select GENERIC_CLOCKEVENTS
|
||||
select PCI
|
||||
select PLAT_ORION_LEGACY
|
||||
select MVEBU_MBUS
|
||||
help
|
||||
Support for the following Marvell MV78xx0 series SoCs:
|
||||
MV781x0, MV782x0.
|
||||
@ -599,6 +601,7 @@ config ARCH_ORION5X
|
||||
select GENERIC_CLOCKEVENTS
|
||||
select PCI
|
||||
select PLAT_ORION_LEGACY
|
||||
select MVEBU_MBUS
|
||||
help
|
||||
Support for the following Marvell Orion 5x series SoCs:
|
||||
Orion-1 (5181), Orion-VoIP (5181L), Orion-NAS (5182),
|
||||
@ -743,6 +746,7 @@ config ARCH_RPC
|
||||
select NEED_MACH_IO_H
|
||||
select NEED_MACH_MEMORY_H
|
||||
select NO_IOPORT
|
||||
select VIRT_TO_BUS
|
||||
help
|
||||
On the Acorn Risc-PC, Linux can support the internal IDE disk and
|
||||
CD-ROM interface, serial and parallel port, and the floppy drive.
|
||||
@ -878,6 +882,7 @@ config ARCH_SHARK
|
||||
select ISA_DMA
|
||||
select NEED_MACH_MEMORY_H
|
||||
select PCI
|
||||
select VIRT_TO_BUS
|
||||
select ZONE_DMA
|
||||
help
|
||||
Support for the StrongARM based Digital DNARD machine, also known
|
||||
@ -1005,12 +1010,12 @@ config ARCH_MULTI_V4_V5
|
||||
bool
|
||||
|
||||
config ARCH_MULTI_V6
|
||||
bool "ARMv6 based platforms (ARM11, Scorpion, ...)"
|
||||
bool "ARMv6 based platforms (ARM11)"
|
||||
select ARCH_MULTI_V6_V7
|
||||
select CPU_V6
|
||||
|
||||
config ARCH_MULTI_V7
|
||||
bool "ARMv7 based platforms (Cortex-A, PJ4, Krait)"
|
||||
bool "ARMv7 based platforms (Cortex-A, PJ4, Scorpion, Krait)"
|
||||
default y
|
||||
select ARCH_MULTI_V6_V7
|
||||
select ARCH_VEXPRESS
|
||||
@ -1461,10 +1466,6 @@ config ISA_DMA
|
||||
bool
|
||||
select ISA_DMA_API
|
||||
|
||||
config ARCH_NO_VIRT_TO_BUS
|
||||
def_bool y
|
||||
depends on !ARCH_RPC && !ARCH_NETWINDER && !ARCH_SHARK
|
||||
|
||||
# Select ISA DMA interface
|
||||
config ISA_DMA_API
|
||||
bool
|
||||
@ -1656,13 +1657,16 @@ config LOCAL_TIMERS
|
||||
accounting to be spread across the timer interval, preventing a
|
||||
"thundering herd" at every timer tick.
|
||||
|
||||
# The GPIO number here must be sorted by descending number. In case of
|
||||
# a multiplatform kernel, we just want the highest value required by the
|
||||
# selected platforms.
|
||||
config ARCH_NR_GPIO
|
||||
int
|
||||
default 1024 if ARCH_SHMOBILE || ARCH_TEGRA
|
||||
default 355 if ARCH_U8500
|
||||
default 264 if MACH_H4700
|
||||
default 512 if SOC_OMAP5
|
||||
default 355 if ARCH_U8500
|
||||
default 288 if ARCH_VT8500 || ARCH_SUNXI
|
||||
default 264 if MACH_H4700
|
||||
default 0
|
||||
help
|
||||
Maximum number of GPIOs in the system.
|
||||
@ -1886,8 +1890,9 @@ config XEN_DOM0
|
||||
|
||||
config XEN
|
||||
bool "Xen guest support on ARM (EXPERIMENTAL)"
|
||||
depends on ARM && OF
|
||||
depends on ARM && AEABI && OF
|
||||
depends on CPU_V7 && !CPU_V6
|
||||
depends on !GENERIC_ATOMIC64
|
||||
help
|
||||
Say Y if you want to run Linux in a Virtual Machine on Xen on ARM.
|
||||
|
||||
|
@ -492,7 +492,7 @@ config DEBUG_IMX_UART_PORT
|
||||
DEBUG_IMX31_UART || \
|
||||
DEBUG_IMX35_UART || \
|
||||
DEBUG_IMX51_UART || \
|
||||
DEBUG_IMX50_IMX53_UART || \
|
||||
DEBUG_IMX53_UART || \
|
||||
DEBUG_IMX6Q_UART
|
||||
default 1
|
||||
help
|
||||
|
@ -115,4 +115,4 @@ i:
|
||||
$(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \
|
||||
$(obj)/Image System.map "$(INSTALL_PATH)"
|
||||
|
||||
subdir- := bootp compressed
|
||||
subdir- := bootp compressed dts
|
||||
|
@ -73,11 +73,6 @@
|
||||
clocks = <&coreclk 2>;
|
||||
};
|
||||
|
||||
addr-decoding@d0020000 {
|
||||
compatible = "marvell,armada-addr-decoding-controller";
|
||||
reg = <0xd0020000 0x258>;
|
||||
};
|
||||
|
||||
sata@d00a0000 {
|
||||
compatible = "marvell,orion-sata";
|
||||
reg = <0xd00a0000 0x2400>;
|
||||
|
@ -238,8 +238,32 @@
|
||||
nand {
|
||||
pinctrl_nand: nand-0 {
|
||||
atmel,pins =
|
||||
<3 4 0x0 0x1 /* PD5 gpio RDY pin pull_up */
|
||||
3 5 0x0 0x1>; /* PD4 gpio enable pin pull_up */
|
||||
<3 0 0x1 0x0 /* PD0 periph A Read Enable */
|
||||
3 1 0x1 0x0 /* PD1 periph A Write Enable */
|
||||
3 2 0x1 0x0 /* PD2 periph A Address Latch Enable */
|
||||
3 3 0x1 0x0 /* PD3 periph A Command Latch Enable */
|
||||
3 4 0x0 0x1 /* PD4 gpio Chip Enable pin pull_up */
|
||||
3 5 0x0 0x1 /* PD5 gpio RDY/BUSY pin pull_up */
|
||||
3 6 0x1 0x0 /* PD6 periph A Data bit 0 */
|
||||
3 7 0x1 0x0 /* PD7 periph A Data bit 1 */
|
||||
3 8 0x1 0x0 /* PD8 periph A Data bit 2 */
|
||||
3 9 0x1 0x0 /* PD9 periph A Data bit 3 */
|
||||
3 10 0x1 0x0 /* PD10 periph A Data bit 4 */
|
||||
3 11 0x1 0x0 /* PD11 periph A Data bit 5 */
|
||||
3 12 0x1 0x0 /* PD12 periph A Data bit 6 */
|
||||
3 13 0x1 0x0>; /* PD13 periph A Data bit 7 */
|
||||
};
|
||||
|
||||
pinctrl_nand_16bits: nand_16bits-0 {
|
||||
atmel,pins =
|
||||
<3 14 0x1 0x0 /* PD14 periph A Data bit 8 */
|
||||
3 15 0x1 0x0 /* PD15 periph A Data bit 9 */
|
||||
3 16 0x1 0x0 /* PD16 periph A Data bit 10 */
|
||||
3 17 0x1 0x0 /* PD17 periph A Data bit 11 */
|
||||
3 18 0x1 0x0 /* PD18 periph A Data bit 12 */
|
||||
3 19 0x1 0x0 /* PD19 periph A Data bit 13 */
|
||||
3 20 0x1 0x0 /* PD20 periph A Data bit 14 */
|
||||
3 21 0x1 0x0>; /* PD21 periph A Data bit 15 */
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -105,7 +105,7 @@
|
||||
compatible = "fixed-clock";
|
||||
reg = <1>;
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <150000000>;
|
||||
clock-frequency = <250000000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -319,9 +319,8 @@
|
||||
};
|
||||
};
|
||||
|
||||
ab8500@5 {
|
||||
ab8500 {
|
||||
compatible = "stericsson,ab8500";
|
||||
reg = <5>; /* mailbox 5 is i2c */
|
||||
interrupt-parent = <&intc>;
|
||||
interrupts = <0 40 0x4>;
|
||||
interrupt-controller;
|
||||
|
@ -275,18 +275,27 @@
|
||||
compatible = "arm,pl330", "arm,primecell";
|
||||
reg = <0x12680000 0x1000>;
|
||||
interrupts = <0 35 0>;
|
||||
#dma-cells = <1>;
|
||||
#dma-channels = <8>;
|
||||
#dma-requests = <32>;
|
||||
};
|
||||
|
||||
pdma1: pdma@12690000 {
|
||||
compatible = "arm,pl330", "arm,primecell";
|
||||
reg = <0x12690000 0x1000>;
|
||||
interrupts = <0 36 0>;
|
||||
#dma-cells = <1>;
|
||||
#dma-channels = <8>;
|
||||
#dma-requests = <32>;
|
||||
};
|
||||
|
||||
mdma1: mdma@12850000 {
|
||||
compatible = "arm,pl330", "arm,primecell";
|
||||
reg = <0x12850000 0x1000>;
|
||||
interrupts = <0 34 0>;
|
||||
#dma-cells = <1>;
|
||||
#dma-channels = <8>;
|
||||
#dma-requests = <1>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -142,12 +142,18 @@
|
||||
compatible = "arm,pl330", "arm,primecell";
|
||||
reg = <0x120000 0x1000>;
|
||||
interrupts = <0 34 0>;
|
||||
#dma-cells = <1>;
|
||||
#dma-channels = <8>;
|
||||
#dma-requests = <32>;
|
||||
};
|
||||
|
||||
pdma1: pdma@121B0000 {
|
||||
compatible = "arm,pl330", "arm,primecell";
|
||||
reg = <0x121000 0x1000>;
|
||||
interrupts = <0 35 0>;
|
||||
#dma-cells = <1>;
|
||||
#dma-channels = <8>;
|
||||
#dma-requests = <32>;
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -221,7 +221,7 @@
|
||||
};
|
||||
};
|
||||
|
||||
ab8500@5 {
|
||||
ab8500 {
|
||||
ab8500-regulators {
|
||||
ab8500_ldo_aux1_reg: ab8500_ldo_aux1 {
|
||||
regulator-name = "V-DISPLAY";
|
||||
|
@ -158,7 +158,7 @@
|
||||
};
|
||||
};
|
||||
|
||||
ab8500@5 {
|
||||
ab8500 {
|
||||
ab8500-regulators {
|
||||
ab8500_ldo_aux1_reg: ab8500_ldo_aux1 {
|
||||
regulator-name = "V-DISPLAY";
|
||||
|
@ -42,10 +42,9 @@
|
||||
fsl,pins = <689 0x10000 /* DISP1_DRDY */
|
||||
482 0x10000 /* DISP1_HSYNC */
|
||||
489 0x10000 /* DISP1_VSYNC */
|
||||
684 0x10000 /* DISP1_DAT_0 */
|
||||
515 0x10000 /* DISP1_DAT_22 */
|
||||
523 0x10000 /* DISP1_DAT_23 */
|
||||
543 0x10000 /* DISP1_DAT_21 */
|
||||
545 0x10000 /* DISP1_DAT_21 */
|
||||
553 0x10000 /* DISP1_DAT_20 */
|
||||
558 0x10000 /* DISP1_DAT_19 */
|
||||
564 0x10000 /* DISP1_DAT_18 */
|
||||
|
@ -298,7 +298,7 @@
|
||||
};
|
||||
};
|
||||
|
||||
ab8500@5 {
|
||||
ab8500 {
|
||||
ab8500-regulators {
|
||||
ab8500_ldo_aux1_reg: ab8500_ldo_aux1 {
|
||||
regulator-name = "V-DISPLAY";
|
||||
|
@ -75,6 +75,9 @@
|
||||
compatible = "arm,pl330", "arm,primecell";
|
||||
reg = <0xffe01000 0x1000>;
|
||||
interrupts = <0 180 4>;
|
||||
#dma-cells = <1>;
|
||||
#dma-channels = <8>;
|
||||
#dma-requests = <32>;
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -118,6 +118,7 @@
|
||||
compatible = "arm,cortex-a9-twd-timer";
|
||||
reg = <0x50040600 0x20>;
|
||||
interrupts = <1 13 0x304>;
|
||||
clocks = <&tegra_car 132>;
|
||||
};
|
||||
|
||||
intc: interrupt-controller {
|
||||
|
@ -119,6 +119,7 @@
|
||||
compatible = "arm,cortex-a9-twd-timer";
|
||||
reg = <0x50040600 0x20>;
|
||||
interrupts = <1 13 0xf04>;
|
||||
clocks = <&tegra_car 214>;
|
||||
};
|
||||
|
||||
intc: interrupt-controller {
|
||||
|
@ -116,6 +116,7 @@ CONFIG_SND_SOC=y
|
||||
CONFIG_SND_MXS_SOC=y
|
||||
CONFIG_SND_SOC_MXS_SGTL5000=y
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_EHCI_HCD=y
|
||||
CONFIG_USB_CHIPIDEA=y
|
||||
CONFIG_USB_CHIPIDEA_HOST=y
|
||||
CONFIG_USB_STORAGE=y
|
||||
|
@ -126,6 +126,8 @@ CONFIG_INPUT_MISC=y
|
||||
CONFIG_INPUT_TWL4030_PWRBUTTON=y
|
||||
CONFIG_VT_HW_CONSOLE_BINDING=y
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_SERIAL_8250_NR_UARTS=32
|
||||
CONFIG_SERIAL_8250_EXTENDED=y
|
||||
CONFIG_SERIAL_8250_MANY_PORTS=y
|
||||
|
@ -2,6 +2,7 @@
|
||||
#define _ASM_ARM_XEN_EVENTS_H
|
||||
|
||||
#include <asm/ptrace.h>
|
||||
#include <asm/atomic.h>
|
||||
|
||||
enum ipi_vector {
|
||||
XEN_PLACEHOLDER_VECTOR,
|
||||
@ -15,26 +16,8 @@ static inline int xen_irqs_disabled(struct pt_regs *regs)
|
||||
return raw_irqs_disabled_flags(regs->ARM_cpsr);
|
||||
}
|
||||
|
||||
/*
|
||||
* We cannot use xchg because it does not support 8-byte
|
||||
* values. However it is safe to use {ldr,dtd}exd directly because all
|
||||
* platforms which Xen can run on support those instructions.
|
||||
*/
|
||||
static inline xen_ulong_t xchg_xen_ulong(xen_ulong_t *ptr, xen_ulong_t val)
|
||||
{
|
||||
xen_ulong_t oldval;
|
||||
unsigned int tmp;
|
||||
|
||||
wmb();
|
||||
asm volatile("@ xchg_xen_ulong\n"
|
||||
"1: ldrexd %0, %H0, [%3]\n"
|
||||
" strexd %1, %2, %H2, [%3]\n"
|
||||
" teq %1, #0\n"
|
||||
" bne 1b"
|
||||
: "=&r" (oldval), "=&r" (tmp)
|
||||
: "r" (val), "r" (ptr)
|
||||
: "memory", "cc");
|
||||
return oldval;
|
||||
}
|
||||
#define xchg_xen_ulong(ptr, val) atomic64_xchg(container_of((ptr), \
|
||||
atomic64_t, \
|
||||
counter), (val))
|
||||
|
||||
#endif /* _ASM_ARM_XEN_EVENTS_H */
|
||||
|
@ -12,7 +12,7 @@
|
||||
*/
|
||||
|
||||
#define ARMADA_370_XP_REGS_PHYS_BASE 0xd0000000
|
||||
#define ARMADA_370_XP_REGS_VIRT_BASE 0xfeb00000
|
||||
#define ARMADA_370_XP_REGS_VIRT_BASE 0xfec00000
|
||||
|
||||
.macro addruart, rp, rv, tmp
|
||||
ldr \rp, =ARMADA_370_XP_REGS_PHYS_BASE
|
||||
|
@ -480,7 +480,7 @@ static void __cpuinit broadcast_timer_setup(struct clock_event_device *evt)
|
||||
evt->features = CLOCK_EVT_FEAT_ONESHOT |
|
||||
CLOCK_EVT_FEAT_PERIODIC |
|
||||
CLOCK_EVT_FEAT_DUMMY;
|
||||
evt->rating = 400;
|
||||
evt->rating = 100;
|
||||
evt->mult = 1;
|
||||
evt->set_mode = broadcast_timer_set_mode;
|
||||
|
||||
|
@ -14,31 +14,15 @@
|
||||
|
||||
.text
|
||||
.align 5
|
||||
.word 0
|
||||
|
||||
1: subs r2, r2, #4 @ 1 do we have enough
|
||||
blt 5f @ 1 bytes to align with?
|
||||
cmp r3, #2 @ 1
|
||||
strltb r1, [ip], #1 @ 1
|
||||
strleb r1, [ip], #1 @ 1
|
||||
strb r1, [ip], #1 @ 1
|
||||
add r2, r2, r3 @ 1 (r2 = r2 - (4 - r3))
|
||||
/*
|
||||
* The pointer is now aligned and the length is adjusted. Try doing the
|
||||
* memset again.
|
||||
*/
|
||||
|
||||
ENTRY(memset)
|
||||
/*
|
||||
* Preserve the contents of r0 for the return value.
|
||||
*/
|
||||
mov ip, r0
|
||||
ands r3, ip, #3 @ 1 unaligned?
|
||||
bne 1b @ 1
|
||||
ands r3, r0, #3 @ 1 unaligned?
|
||||
mov ip, r0 @ preserve r0 as return value
|
||||
bne 6f @ 1
|
||||
/*
|
||||
* we know that the pointer in ip is aligned to a word boundary.
|
||||
*/
|
||||
orr r1, r1, r1, lsl #8
|
||||
1: orr r1, r1, r1, lsl #8
|
||||
orr r1, r1, r1, lsl #16
|
||||
mov r3, r1
|
||||
cmp r2, #16
|
||||
@ -127,4 +111,13 @@ ENTRY(memset)
|
||||
tst r2, #1
|
||||
strneb r1, [ip], #1
|
||||
mov pc, lr
|
||||
|
||||
6: subs r2, r2, #4 @ 1 do we have enough
|
||||
blt 5b @ 1 bytes to align with?
|
||||
cmp r3, #2 @ 1
|
||||
strltb r1, [ip], #1 @ 1
|
||||
strleb r1, [ip], #1 @ 1
|
||||
strb r1, [ip], #1 @ 1
|
||||
add r2, r2, r3 @ 1 (r2 = r2 - (4 - r3))
|
||||
b 1b
|
||||
ENDPROC(memset)
|
||||
|
@ -176,6 +176,7 @@ static struct w1_gpio_platform_data w1_gpio_pdata = {
|
||||
/* If you choose to use a pin other than PB16 it needs to be 3.3V */
|
||||
.pin = AT91_PIN_PB16,
|
||||
.is_open_drain = 1,
|
||||
.ext_pullup_enable_pin = -EINVAL,
|
||||
};
|
||||
|
||||
static struct platform_device w1_device = {
|
||||
|
@ -188,6 +188,7 @@ static struct spi_board_info portuxg20_spi_devices[] = {
|
||||
static struct w1_gpio_platform_data w1_gpio_pdata = {
|
||||
.pin = AT91_PIN_PA29,
|
||||
.is_open_drain = 1,
|
||||
.ext_pullup_enable_pin = -EINVAL,
|
||||
};
|
||||
|
||||
static struct platform_device w1_device = {
|
||||
|
@ -209,6 +209,14 @@ extern int at91_get_gpio_value(unsigned pin);
|
||||
extern void at91_gpio_suspend(void);
|
||||
extern void at91_gpio_resume(void);
|
||||
|
||||
#ifdef CONFIG_PINCTRL_AT91
|
||||
extern void at91_pinctrl_gpio_suspend(void);
|
||||
extern void at91_pinctrl_gpio_resume(void);
|
||||
#else
|
||||
static inline void at91_pinctrl_gpio_suspend(void) {}
|
||||
static inline void at91_pinctrl_gpio_resume(void) {}
|
||||
#endif
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||
#endif
|
||||
|
@ -92,23 +92,21 @@ static int at91_aic_set_wake(struct irq_data *d, unsigned value)
|
||||
|
||||
void at91_irq_suspend(void)
|
||||
{
|
||||
int i = 0, bit;
|
||||
int bit = -1;
|
||||
|
||||
if (has_aic5()) {
|
||||
/* disable enabled irqs */
|
||||
while ((bit = find_next_bit(backups, n_irqs, i)) < n_irqs) {
|
||||
while ((bit = find_next_bit(backups, n_irqs, bit + 1)) < n_irqs) {
|
||||
at91_aic_write(AT91_AIC5_SSR,
|
||||
bit & AT91_AIC5_INTSEL_MSK);
|
||||
at91_aic_write(AT91_AIC5_IDCR, 1);
|
||||
i = bit;
|
||||
}
|
||||
/* enable wakeup irqs */
|
||||
i = 0;
|
||||
while ((bit = find_next_bit(wakeups, n_irqs, i)) < n_irqs) {
|
||||
bit = -1;
|
||||
while ((bit = find_next_bit(wakeups, n_irqs, bit + 1)) < n_irqs) {
|
||||
at91_aic_write(AT91_AIC5_SSR,
|
||||
bit & AT91_AIC5_INTSEL_MSK);
|
||||
at91_aic_write(AT91_AIC5_IECR, 1);
|
||||
i = bit;
|
||||
}
|
||||
} else {
|
||||
at91_aic_write(AT91_AIC_IDCR, *backups);
|
||||
@ -118,23 +116,21 @@ void at91_irq_suspend(void)
|
||||
|
||||
void at91_irq_resume(void)
|
||||
{
|
||||
int i = 0, bit;
|
||||
int bit = -1;
|
||||
|
||||
if (has_aic5()) {
|
||||
/* disable wakeup irqs */
|
||||
while ((bit = find_next_bit(wakeups, n_irqs, i)) < n_irqs) {
|
||||
while ((bit = find_next_bit(wakeups, n_irqs, bit + 1)) < n_irqs) {
|
||||
at91_aic_write(AT91_AIC5_SSR,
|
||||
bit & AT91_AIC5_INTSEL_MSK);
|
||||
at91_aic_write(AT91_AIC5_IDCR, 1);
|
||||
i = bit;
|
||||
}
|
||||
/* enable irqs disabled for suspend */
|
||||
i = 0;
|
||||
while ((bit = find_next_bit(backups, n_irqs, i)) < n_irqs) {
|
||||
bit = -1;
|
||||
while ((bit = find_next_bit(backups, n_irqs, bit + 1)) < n_irqs) {
|
||||
at91_aic_write(AT91_AIC5_SSR,
|
||||
bit & AT91_AIC5_INTSEL_MSK);
|
||||
at91_aic_write(AT91_AIC5_IECR, 1);
|
||||
i = bit;
|
||||
}
|
||||
} else {
|
||||
at91_aic_write(AT91_AIC_IDCR, *wakeups);
|
||||
|
@ -201,7 +201,10 @@ extern u32 at91_slow_clock_sz;
|
||||
|
||||
static int at91_pm_enter(suspend_state_t state)
|
||||
{
|
||||
at91_gpio_suspend();
|
||||
if (of_have_populated_dt())
|
||||
at91_pinctrl_gpio_suspend();
|
||||
else
|
||||
at91_gpio_suspend();
|
||||
at91_irq_suspend();
|
||||
|
||||
pr_debug("AT91: PM - wake mask %08x, pm state %d\n",
|
||||
@ -286,7 +289,10 @@ static int at91_pm_enter(suspend_state_t state)
|
||||
error:
|
||||
target_state = PM_SUSPEND_ON;
|
||||
at91_irq_resume();
|
||||
at91_gpio_resume();
|
||||
if (of_have_populated_dt())
|
||||
at91_pinctrl_gpio_resume();
|
||||
else
|
||||
at91_gpio_resume();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -743,6 +743,9 @@ EXPORT_SYMBOL(edma_free_channel);
|
||||
*/
|
||||
int edma_alloc_slot(unsigned ctlr, int slot)
|
||||
{
|
||||
if (!edma_cc[ctlr])
|
||||
return -EINVAL;
|
||||
|
||||
if (slot >= 0)
|
||||
slot = EDMA_CHAN_SLOT(slot);
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
obj-y += common.o addr-map.o irq.o
|
||||
obj-y += common.o irq.o
|
||||
obj-$(CONFIG_DOVE_LEGACY) += mpp.o
|
||||
obj-$(CONFIG_PCI) += pcie.o
|
||||
obj-$(CONFIG_MACH_DOVE_DB) += dove-db-setup.o
|
||||
|
@ -1,125 +0,0 @@
|
||||
/*
|
||||
* arch/arm/mach-dove/addr-map.c
|
||||
*
|
||||
* Address map functions for Marvell Dove 88AP510 SoC
|
||||
*
|
||||
* 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/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/mbus.h>
|
||||
#include <linux/io.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/setup.h>
|
||||
#include <mach/dove.h>
|
||||
#include <plat/addr-map.h>
|
||||
#include "common.h"
|
||||
|
||||
/*
|
||||
* Generic Address Decode Windows bit settings
|
||||
*/
|
||||
#define TARGET_DDR 0x0
|
||||
#define TARGET_BOOTROM 0x1
|
||||
#define TARGET_CESA 0x3
|
||||
#define TARGET_PCIE0 0x4
|
||||
#define TARGET_PCIE1 0x8
|
||||
#define TARGET_SCRATCHPAD 0xd
|
||||
|
||||
#define ATTR_CESA 0x01
|
||||
#define ATTR_BOOTROM 0xfd
|
||||
#define ATTR_DEV_SPI0_ROM 0xfe
|
||||
#define ATTR_DEV_SPI1_ROM 0xfb
|
||||
#define ATTR_PCIE_IO 0xe0
|
||||
#define ATTR_PCIE_MEM 0xe8
|
||||
#define ATTR_SCRATCHPAD 0x0
|
||||
|
||||
static inline void __iomem *ddr_map_sc(int i)
|
||||
{
|
||||
return (void __iomem *)(DOVE_MC_VIRT_BASE + 0x100 + ((i) << 4));
|
||||
}
|
||||
|
||||
/*
|
||||
* Description of the windows needed by the platform code
|
||||
*/
|
||||
static struct __initdata orion_addr_map_cfg addr_map_cfg = {
|
||||
.num_wins = 8,
|
||||
.remappable_wins = 4,
|
||||
.bridge_virt_base = BRIDGE_VIRT_BASE,
|
||||
};
|
||||
|
||||
static const struct __initdata orion_addr_map_info addr_map_info[] = {
|
||||
/*
|
||||
* Windows for PCIe IO+MEM space.
|
||||
*/
|
||||
{ 0, DOVE_PCIE0_IO_PHYS_BASE, DOVE_PCIE0_IO_SIZE,
|
||||
TARGET_PCIE0, ATTR_PCIE_IO, DOVE_PCIE0_IO_BUS_BASE
|
||||
},
|
||||
{ 1, DOVE_PCIE1_IO_PHYS_BASE, DOVE_PCIE1_IO_SIZE,
|
||||
TARGET_PCIE1, ATTR_PCIE_IO, DOVE_PCIE1_IO_BUS_BASE
|
||||
},
|
||||
{ 2, DOVE_PCIE0_MEM_PHYS_BASE, DOVE_PCIE0_MEM_SIZE,
|
||||
TARGET_PCIE0, ATTR_PCIE_MEM, -1
|
||||
},
|
||||
{ 3, DOVE_PCIE1_MEM_PHYS_BASE, DOVE_PCIE1_MEM_SIZE,
|
||||
TARGET_PCIE1, ATTR_PCIE_MEM, -1
|
||||
},
|
||||
/*
|
||||
* Window for CESA engine.
|
||||
*/
|
||||
{ 4, DOVE_CESA_PHYS_BASE, DOVE_CESA_SIZE,
|
||||
TARGET_CESA, ATTR_CESA, -1
|
||||
},
|
||||
/*
|
||||
* Window to the BootROM for Standby and Sleep Resume
|
||||
*/
|
||||
{ 5, DOVE_BOOTROM_PHYS_BASE, DOVE_BOOTROM_SIZE,
|
||||
TARGET_BOOTROM, ATTR_BOOTROM, -1
|
||||
},
|
||||
/*
|
||||
* Window to the PMU Scratch Pad space
|
||||
*/
|
||||
{ 6, DOVE_SCRATCHPAD_PHYS_BASE, DOVE_SCRATCHPAD_SIZE,
|
||||
TARGET_SCRATCHPAD, ATTR_SCRATCHPAD, -1
|
||||
},
|
||||
/* End marker */
|
||||
{ -1, 0, 0, 0, 0, 0 }
|
||||
};
|
||||
|
||||
void __init dove_setup_cpu_mbus(void)
|
||||
{
|
||||
int i;
|
||||
int cs;
|
||||
|
||||
/*
|
||||
* Disable, clear and configure windows.
|
||||
*/
|
||||
orion_config_wins(&addr_map_cfg, addr_map_info);
|
||||
|
||||
/*
|
||||
* Setup MBUS dram target info.
|
||||
*/
|
||||
orion_mbus_dram_info.mbus_dram_target_id = TARGET_DDR;
|
||||
|
||||
for (i = 0, cs = 0; i < 2; i++) {
|
||||
u32 map = readl(ddr_map_sc(i));
|
||||
|
||||
/*
|
||||
* Chip select enabled?
|
||||
*/
|
||||
if (map & 1) {
|
||||
struct mbus_dram_window *w;
|
||||
|
||||
w = &orion_mbus_dram_info.cs[cs++];
|
||||
w->cs_index = i;
|
||||
w->mbus_attr = 0; /* CS address decoding done inside */
|
||||
/* the DDR controller, no need to */
|
||||
/* provide attributes */
|
||||
w->base = map & 0xff800000;
|
||||
w->size = 0x100000 << (((map & 0x000f0000) >> 16) - 4);
|
||||
}
|
||||
}
|
||||
orion_mbus_dram_info.num_cs = cs;
|
||||
}
|
@ -64,7 +64,7 @@ static void __init dove_dt_init(void)
|
||||
#ifdef CONFIG_CACHE_TAUROS2
|
||||
tauros2_init(0);
|
||||
#endif
|
||||
dove_setup_cpu_mbus();
|
||||
dove_setup_cpu_wins();
|
||||
|
||||
/* Setup root of clk tree */
|
||||
dove_of_clk_init();
|
||||
|
@ -224,6 +224,9 @@ void __init dove_i2c_init(void)
|
||||
void __init dove_init_early(void)
|
||||
{
|
||||
orion_time_set_base(TIMER_VIRT_BASE);
|
||||
mvebu_mbus_init("marvell,dove-mbus",
|
||||
BRIDGE_WINS_BASE, BRIDGE_WINS_SZ,
|
||||
DOVE_MC_WINS_BASE, DOVE_MC_WINS_SZ);
|
||||
}
|
||||
|
||||
static int __init dove_find_tclk(void)
|
||||
@ -326,6 +329,40 @@ void __init dove_sdio1_init(void)
|
||||
platform_device_register(&dove_sdio1);
|
||||
}
|
||||
|
||||
void __init dove_setup_cpu_wins(void)
|
||||
{
|
||||
/*
|
||||
* The PCIe windows will no longer be statically allocated
|
||||
* here once Dove is migrated to the pci-mvebu driver.
|
||||
*/
|
||||
mvebu_mbus_add_window_remap_flags("pcie0.0",
|
||||
DOVE_PCIE0_IO_PHYS_BASE,
|
||||
DOVE_PCIE0_IO_SIZE,
|
||||
DOVE_PCIE0_IO_BUS_BASE,
|
||||
MVEBU_MBUS_PCI_IO);
|
||||
mvebu_mbus_add_window_remap_flags("pcie1.0",
|
||||
DOVE_PCIE1_IO_PHYS_BASE,
|
||||
DOVE_PCIE1_IO_SIZE,
|
||||
DOVE_PCIE1_IO_BUS_BASE,
|
||||
MVEBU_MBUS_PCI_IO);
|
||||
mvebu_mbus_add_window_remap_flags("pcie0.0",
|
||||
DOVE_PCIE0_MEM_PHYS_BASE,
|
||||
DOVE_PCIE0_MEM_SIZE,
|
||||
MVEBU_MBUS_NO_REMAP,
|
||||
MVEBU_MBUS_PCI_MEM);
|
||||
mvebu_mbus_add_window_remap_flags("pcie1.0",
|
||||
DOVE_PCIE1_MEM_PHYS_BASE,
|
||||
DOVE_PCIE1_MEM_SIZE,
|
||||
MVEBU_MBUS_NO_REMAP,
|
||||
MVEBU_MBUS_PCI_MEM);
|
||||
mvebu_mbus_add_window("cesa", DOVE_CESA_PHYS_BASE,
|
||||
DOVE_CESA_SIZE);
|
||||
mvebu_mbus_add_window("bootrom", DOVE_BOOTROM_PHYS_BASE,
|
||||
DOVE_BOOTROM_SIZE);
|
||||
mvebu_mbus_add_window("scratchpad", DOVE_SCRATCHPAD_PHYS_BASE,
|
||||
DOVE_SCRATCHPAD_SIZE);
|
||||
}
|
||||
|
||||
void __init dove_init(void)
|
||||
{
|
||||
pr_info("Dove 88AP510 SoC, TCLK = %d MHz.\n",
|
||||
@ -334,7 +371,7 @@ void __init dove_init(void)
|
||||
#ifdef CONFIG_CACHE_TAUROS2
|
||||
tauros2_init(0);
|
||||
#endif
|
||||
dove_setup_cpu_mbus();
|
||||
dove_setup_cpu_wins();
|
||||
|
||||
/* Setup root of clk tree */
|
||||
dove_clk_init();
|
||||
|
@ -23,7 +23,7 @@ void dove_map_io(void);
|
||||
void dove_init(void);
|
||||
void dove_init_early(void);
|
||||
void dove_init_irq(void);
|
||||
void dove_setup_cpu_mbus(void);
|
||||
void dove_setup_cpu_wins(void);
|
||||
void dove_ge00_init(struct mv643xx_eth_platform_data *eth_data);
|
||||
void dove_sata_init(struct mv_sata_platform_data *sata_data);
|
||||
#ifdef CONFIG_PCI
|
||||
|
@ -77,6 +77,8 @@
|
||||
/* North-South Bridge */
|
||||
#define BRIDGE_VIRT_BASE (DOVE_SB_REGS_VIRT_BASE + 0x20000)
|
||||
#define BRIDGE_PHYS_BASE (DOVE_SB_REGS_PHYS_BASE + 0x20000)
|
||||
#define BRIDGE_WINS_BASE (BRIDGE_PHYS_BASE)
|
||||
#define BRIDGE_WINS_SZ (0x80)
|
||||
|
||||
/* Cryptographic Engine */
|
||||
#define DOVE_CRYPT_PHYS_BASE (DOVE_SB_REGS_PHYS_BASE + 0x30000)
|
||||
@ -168,6 +170,9 @@
|
||||
#define DOVE_SSP_CLOCK_ENABLE (1 << 1)
|
||||
#define DOVE_SSP_BPB_CLOCK_SRC_SSP (1 << 11)
|
||||
/* Memory Controller */
|
||||
#define DOVE_MC_PHYS_BASE (DOVE_NB_REGS_PHYS_BASE + 0x00000)
|
||||
#define DOVE_MC_WINS_BASE (DOVE_MC_PHYS_BASE + 0x100)
|
||||
#define DOVE_MC_WINS_SZ (0x8)
|
||||
#define DOVE_MC_VIRT_BASE (DOVE_NB_REGS_VIRT_BASE + 0x00000)
|
||||
|
||||
/* LCD Controller */
|
||||
|
@ -67,6 +67,7 @@ config ARCH_NETWINDER
|
||||
select ISA
|
||||
select ISA_DMA
|
||||
select PCI
|
||||
select VIRT_TO_BUS
|
||||
help
|
||||
Say Y here if you intend to run this kernel on the Rebel.COM
|
||||
NetWinder. Information about this machine can be found at:
|
||||
|
@ -264,6 +264,7 @@ int __init mx35_clocks_init(void)
|
||||
clk_prepare_enable(clk[gpio3_gate]);
|
||||
clk_prepare_enable(clk[iim_gate]);
|
||||
clk_prepare_enable(clk[emi_gate]);
|
||||
clk_prepare_enable(clk[max_gate]);
|
||||
|
||||
/*
|
||||
* SCC is needed to boot via mmc after a watchdog reset. The clock code
|
||||
|
@ -172,7 +172,7 @@ static struct clk *clk[clk_max];
|
||||
static struct clk_onecell_data clk_data;
|
||||
|
||||
static enum mx6q_clks const clks_init_on[] __initconst = {
|
||||
mmdc_ch0_axi, rom,
|
||||
mmdc_ch0_axi, rom, pll1_sys,
|
||||
};
|
||||
|
||||
static struct clk_div_table clk_enet_ref_table[] = {
|
||||
|
@ -26,16 +26,16 @@ ENDPROC(v7_secondary_startup)
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
/*
|
||||
* The following code is located into the .data section. This is to
|
||||
* allow phys_l2x0_saved_regs to be accessed with a relative load
|
||||
* as we are running on physical address here.
|
||||
* The following code must assume it is running from physical address
|
||||
* where absolute virtual addresses to the data section have to be
|
||||
* turned into relative ones.
|
||||
*/
|
||||
.data
|
||||
.align
|
||||
|
||||
#ifdef CONFIG_CACHE_L2X0
|
||||
.macro pl310_resume
|
||||
ldr r2, phys_l2x0_saved_regs
|
||||
adr r0, l2x0_saved_regs_offset
|
||||
ldr r2, [r0]
|
||||
add r2, r2, r0
|
||||
ldr r0, [r2, #L2X0_R_PHY_BASE] @ get physical base of l2x0
|
||||
ldr r1, [r2, #L2X0_R_AUX_CTRL] @ get aux_ctrl value
|
||||
str r1, [r0, #L2X0_AUX_CTRL] @ restore aux_ctrl
|
||||
@ -43,9 +43,9 @@ ENDPROC(v7_secondary_startup)
|
||||
str r1, [r0, #L2X0_CTRL] @ re-enable L2
|
||||
.endm
|
||||
|
||||
.globl phys_l2x0_saved_regs
|
||||
phys_l2x0_saved_regs:
|
||||
.long 0
|
||||
l2x0_saved_regs_offset:
|
||||
.word l2x0_saved_regs - .
|
||||
|
||||
#else
|
||||
.macro pl310_resume
|
||||
.endm
|
||||
|
@ -27,6 +27,11 @@ static const char * const imx25_dt_board_compat[] __initconst = {
|
||||
NULL
|
||||
};
|
||||
|
||||
static void __init imx25_timer_init(void)
|
||||
{
|
||||
mx25_clocks_init_dt();
|
||||
}
|
||||
|
||||
DT_MACHINE_START(IMX25_DT, "Freescale i.MX25 (Device Tree Support)")
|
||||
.map_io = mx25_map_io,
|
||||
.init_early = imx25_init_early,
|
||||
|
@ -22,8 +22,6 @@
|
||||
#include "common.h"
|
||||
#include "hardware.h"
|
||||
|
||||
extern unsigned long phys_l2x0_saved_regs;
|
||||
|
||||
static int imx6q_suspend_finish(unsigned long val)
|
||||
{
|
||||
cpu_do_idle();
|
||||
@ -57,18 +55,5 @@ static const struct platform_suspend_ops imx6q_pm_ops = {
|
||||
|
||||
void __init imx6q_pm_init(void)
|
||||
{
|
||||
/*
|
||||
* The l2x0 core code provides an infrastucture to save and restore
|
||||
* l2x0 registers across suspend/resume cycle. But because imx6q
|
||||
* retains L2 content during suspend and needs to resume L2 before
|
||||
* MMU is enabled, it can only utilize register saving support and
|
||||
* have to take care of restoring on its own. So we save physical
|
||||
* address of the data structure used by l2x0 core to save registers,
|
||||
* and later restore the necessary ones in imx6q resume entry.
|
||||
*/
|
||||
#ifdef CONFIG_CACHE_L2X0
|
||||
phys_l2x0_saved_regs = __pa(&l2x0_saved_regs);
|
||||
#endif
|
||||
|
||||
suspend_set_ops(&imx6q_pm_ops);
|
||||
}
|
||||
|
@ -163,6 +163,7 @@ static struct platform_device vulcan_max6369 = {
|
||||
|
||||
static struct w1_gpio_platform_data vulcan_w1_gpio_pdata = {
|
||||
.pin = 14,
|
||||
.ext_pullup_enable_pin = -EINVAL,
|
||||
};
|
||||
|
||||
static struct platform_device vulcan_w1_gpio = {
|
||||
|
@ -1,4 +1,4 @@
|
||||
obj-y += common.o addr-map.o irq.o pcie.o mpp.o
|
||||
obj-y += common.o irq.o pcie.o mpp.o
|
||||
|
||||
obj-$(CONFIG_MACH_DB88F6281_BP) += db88f6281-bp-setup.o
|
||||
obj-$(CONFIG_MACH_RD88F6192_NAS) += rd88f6192-nas-setup.o
|
||||
|
@ -1,91 +0,0 @@
|
||||
/*
|
||||
* arch/arm/mach-kirkwood/addr-map.c
|
||||
*
|
||||
* Address map functions for Marvell Kirkwood SoCs
|
||||
*
|
||||
* 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/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/mbus.h>
|
||||
#include <linux/io.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <plat/addr-map.h>
|
||||
#include "common.h"
|
||||
|
||||
/*
|
||||
* Generic Address Decode Windows bit settings
|
||||
*/
|
||||
#define TARGET_DEV_BUS 1
|
||||
#define TARGET_SRAM 3
|
||||
#define TARGET_PCIE 4
|
||||
#define ATTR_DEV_SPI_ROM 0x1e
|
||||
#define ATTR_DEV_BOOT 0x1d
|
||||
#define ATTR_DEV_NAND 0x2f
|
||||
#define ATTR_DEV_CS3 0x37
|
||||
#define ATTR_DEV_CS2 0x3b
|
||||
#define ATTR_DEV_CS1 0x3d
|
||||
#define ATTR_DEV_CS0 0x3e
|
||||
#define ATTR_PCIE_IO 0xe0
|
||||
#define ATTR_PCIE_MEM 0xe8
|
||||
#define ATTR_PCIE1_IO 0xd0
|
||||
#define ATTR_PCIE1_MEM 0xd8
|
||||
#define ATTR_SRAM 0x01
|
||||
|
||||
/*
|
||||
* Description of the windows needed by the platform code
|
||||
*/
|
||||
static struct __initdata orion_addr_map_cfg addr_map_cfg = {
|
||||
.num_wins = 8,
|
||||
.remappable_wins = 4,
|
||||
.bridge_virt_base = BRIDGE_VIRT_BASE,
|
||||
};
|
||||
|
||||
static const struct __initdata orion_addr_map_info addr_map_info[] = {
|
||||
/*
|
||||
* Windows for PCIe IO+MEM space.
|
||||
*/
|
||||
{ 0, KIRKWOOD_PCIE_IO_PHYS_BASE, KIRKWOOD_PCIE_IO_SIZE,
|
||||
TARGET_PCIE, ATTR_PCIE_IO, KIRKWOOD_PCIE_IO_BUS_BASE
|
||||
},
|
||||
{ 1, KIRKWOOD_PCIE_MEM_PHYS_BASE, KIRKWOOD_PCIE_MEM_SIZE,
|
||||
TARGET_PCIE, ATTR_PCIE_MEM, KIRKWOOD_PCIE_MEM_BUS_BASE
|
||||
},
|
||||
{ 2, KIRKWOOD_PCIE1_IO_PHYS_BASE, KIRKWOOD_PCIE1_IO_SIZE,
|
||||
TARGET_PCIE, ATTR_PCIE1_IO, KIRKWOOD_PCIE1_IO_BUS_BASE
|
||||
},
|
||||
{ 3, KIRKWOOD_PCIE1_MEM_PHYS_BASE, KIRKWOOD_PCIE1_MEM_SIZE,
|
||||
TARGET_PCIE, ATTR_PCIE1_MEM, KIRKWOOD_PCIE1_MEM_BUS_BASE
|
||||
},
|
||||
/*
|
||||
* Window for NAND controller.
|
||||
*/
|
||||
{ 4, KIRKWOOD_NAND_MEM_PHYS_BASE, KIRKWOOD_NAND_MEM_SIZE,
|
||||
TARGET_DEV_BUS, ATTR_DEV_NAND, -1
|
||||
},
|
||||
/*
|
||||
* Window for SRAM.
|
||||
*/
|
||||
{ 5, KIRKWOOD_SRAM_PHYS_BASE, KIRKWOOD_SRAM_SIZE,
|
||||
TARGET_SRAM, ATTR_SRAM, -1
|
||||
},
|
||||
/* End marker */
|
||||
{ -1, 0, 0, 0, 0, 0 }
|
||||
};
|
||||
|
||||
void __init kirkwood_setup_cpu_mbus(void)
|
||||
{
|
||||
/*
|
||||
* Disable, clear and configure windows.
|
||||
*/
|
||||
orion_config_wins(&addr_map_cfg, addr_map_info);
|
||||
|
||||
/*
|
||||
* Setup MBUS dram target info.
|
||||
*/
|
||||
orion_setup_cpu_mbus_target(&addr_map_cfg,
|
||||
(void __iomem *) DDR_WINDOW_CPU_BASE);
|
||||
}
|
@ -93,7 +93,7 @@ static void __init kirkwood_dt_init(void)
|
||||
*/
|
||||
writel(readl(CPU_CONFIG) & ~CPU_CONFIG_ERROR_PROP, CPU_CONFIG);
|
||||
|
||||
kirkwood_setup_cpu_mbus();
|
||||
kirkwood_setup_wins();
|
||||
|
||||
kirkwood_l2_init();
|
||||
|
||||
|
@ -33,7 +33,6 @@
|
||||
#include <linux/platform_data/usb-ehci-orion.h>
|
||||
#include <plat/common.h>
|
||||
#include <plat/time.h>
|
||||
#include <plat/addr-map.h>
|
||||
#include <linux/platform_data/dma-mv_xor.h>
|
||||
#include "common.h"
|
||||
|
||||
@ -535,6 +534,9 @@ void __init kirkwood_init_early(void)
|
||||
* the allocations won't fail.
|
||||
*/
|
||||
init_dma_coherent_pool_size(SZ_1M);
|
||||
mvebu_mbus_init("marvell,kirkwood-mbus",
|
||||
BRIDGE_WINS_BASE, BRIDGE_WINS_SZ,
|
||||
DDR_WINDOW_CPU_BASE, DDR_WINDOW_CPU_SZ);
|
||||
}
|
||||
|
||||
int kirkwood_tclk;
|
||||
@ -650,6 +652,38 @@ char * __init kirkwood_id(void)
|
||||
}
|
||||
}
|
||||
|
||||
void __init kirkwood_setup_wins(void)
|
||||
{
|
||||
/*
|
||||
* The PCIe windows will no longer be statically allocated
|
||||
* here once Kirkwood is migrated to the pci-mvebu driver.
|
||||
*/
|
||||
mvebu_mbus_add_window_remap_flags("pcie0.0",
|
||||
KIRKWOOD_PCIE_IO_PHYS_BASE,
|
||||
KIRKWOOD_PCIE_IO_SIZE,
|
||||
KIRKWOOD_PCIE_IO_BUS_BASE,
|
||||
MVEBU_MBUS_PCI_IO);
|
||||
mvebu_mbus_add_window_remap_flags("pcie0.0",
|
||||
KIRKWOOD_PCIE_MEM_PHYS_BASE,
|
||||
KIRKWOOD_PCIE_MEM_SIZE,
|
||||
MVEBU_MBUS_NO_REMAP,
|
||||
MVEBU_MBUS_PCI_MEM);
|
||||
mvebu_mbus_add_window_remap_flags("pcie1.0",
|
||||
KIRKWOOD_PCIE1_IO_PHYS_BASE,
|
||||
KIRKWOOD_PCIE1_IO_SIZE,
|
||||
KIRKWOOD_PCIE1_IO_BUS_BASE,
|
||||
MVEBU_MBUS_PCI_IO);
|
||||
mvebu_mbus_add_window_remap_flags("pcie1.0",
|
||||
KIRKWOOD_PCIE1_MEM_PHYS_BASE,
|
||||
KIRKWOOD_PCIE1_MEM_SIZE,
|
||||
MVEBU_MBUS_NO_REMAP,
|
||||
MVEBU_MBUS_PCI_MEM);
|
||||
mvebu_mbus_add_window("nand", KIRKWOOD_NAND_MEM_PHYS_BASE,
|
||||
KIRKWOOD_NAND_MEM_SIZE);
|
||||
mvebu_mbus_add_window("sram", KIRKWOOD_SRAM_PHYS_BASE,
|
||||
KIRKWOOD_SRAM_SIZE);
|
||||
}
|
||||
|
||||
void __init kirkwood_l2_init(void)
|
||||
{
|
||||
#ifdef CONFIG_CACHE_FEROCEON_L2
|
||||
@ -675,7 +709,7 @@ void __init kirkwood_init(void)
|
||||
*/
|
||||
writel(readl(CPU_CONFIG) & ~CPU_CONFIG_ERROR_PROP, CPU_CONFIG);
|
||||
|
||||
kirkwood_setup_cpu_mbus();
|
||||
kirkwood_setup_wins();
|
||||
|
||||
kirkwood_l2_init();
|
||||
|
||||
|
@ -30,7 +30,7 @@ void kirkwood_init(void);
|
||||
void kirkwood_init_early(void);
|
||||
void kirkwood_init_irq(void);
|
||||
|
||||
void kirkwood_setup_cpu_mbus(void);
|
||||
void kirkwood_setup_wins(void);
|
||||
|
||||
void kirkwood_enable_pcie(void);
|
||||
void kirkwood_pcie_id(u32 *dev, u32 *rev);
|
||||
|
@ -60,8 +60,9 @@
|
||||
* Register Map
|
||||
*/
|
||||
#define DDR_VIRT_BASE (KIRKWOOD_REGS_VIRT_BASE + 0x00000)
|
||||
#define DDR_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE + 0x00000)
|
||||
#define DDR_WINDOW_CPU_BASE (DDR_VIRT_BASE + 0x1500)
|
||||
#define DDR_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE + 0x00000)
|
||||
#define DDR_WINDOW_CPU_BASE (DDR_PHYS_BASE + 0x1500)
|
||||
#define DDR_WINDOW_CPU_SZ (0x20)
|
||||
#define DDR_OPERATION_BASE (DDR_PHYS_BASE + 0x1418)
|
||||
|
||||
#define DEV_BUS_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE + 0x10000)
|
||||
@ -80,6 +81,8 @@
|
||||
|
||||
#define BRIDGE_VIRT_BASE (KIRKWOOD_REGS_VIRT_BASE + 0x20000)
|
||||
#define BRIDGE_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE + 0x20000)
|
||||
#define BRIDGE_WINS_BASE (BRIDGE_PHYS_BASE)
|
||||
#define BRIDGE_WINS_SZ (0x80)
|
||||
|
||||
#define CRYPTO_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE + 0x30000)
|
||||
|
||||
|
@ -17,7 +17,6 @@
|
||||
#include <asm/mach/pci.h>
|
||||
#include <plat/pcie.h>
|
||||
#include <mach/bridge-regs.h>
|
||||
#include <plat/addr-map.h>
|
||||
#include "common.h"
|
||||
|
||||
static void kirkwood_enable_pcie_clk(const char *port)
|
||||
|
@ -9,6 +9,7 @@
|
||||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/gpio.h>
|
||||
|
||||
#include <asm/mach/arch.h>
|
||||
|
@ -1,4 +1,4 @@
|
||||
obj-y += common.o addr-map.o mpp.o irq.o pcie.o
|
||||
obj-y += common.o mpp.o irq.o pcie.o
|
||||
obj-$(CONFIG_MACH_DB78X00_BP) += db78x00-bp-setup.o
|
||||
obj-$(CONFIG_MACH_RD78X00_MASA) += rd78x00-masa-setup.o
|
||||
obj-$(CONFIG_MACH_TERASTATION_WXL) += buffalo-wxl-setup.o
|
||||
|
@ -1,93 +0,0 @@
|
||||
/*
|
||||
* arch/arm/mach-mv78xx0/addr-map.c
|
||||
*
|
||||
* Address map functions for Marvell MV78xx0 SoCs
|
||||
*
|
||||
* 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/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/mbus.h>
|
||||
#include <linux/io.h>
|
||||
#include <plat/addr-map.h>
|
||||
#include <mach/mv78xx0.h>
|
||||
#include "common.h"
|
||||
|
||||
/*
|
||||
* Generic Address Decode Windows bit settings
|
||||
*/
|
||||
#define TARGET_DEV_BUS 1
|
||||
#define TARGET_PCIE0 4
|
||||
#define TARGET_PCIE1 8
|
||||
#define TARGET_PCIE(i) ((i) ? TARGET_PCIE1 : TARGET_PCIE0)
|
||||
#define ATTR_DEV_SPI_ROM 0x1f
|
||||
#define ATTR_DEV_BOOT 0x2f
|
||||
#define ATTR_DEV_CS3 0x37
|
||||
#define ATTR_DEV_CS2 0x3b
|
||||
#define ATTR_DEV_CS1 0x3d
|
||||
#define ATTR_DEV_CS0 0x3e
|
||||
#define ATTR_PCIE_IO(l) (0xf0 & ~(0x10 << (l)))
|
||||
#define ATTR_PCIE_MEM(l) (0xf8 & ~(0x10 << (l)))
|
||||
|
||||
/*
|
||||
* CPU Address Decode Windows registers
|
||||
*/
|
||||
#define WIN0_OFF(n) (BRIDGE_VIRT_BASE + 0x0000 + ((n) << 4))
|
||||
#define WIN8_OFF(n) (BRIDGE_VIRT_BASE + 0x0900 + (((n) - 8) << 4))
|
||||
|
||||
static void __init __iomem *win_cfg_base(const struct orion_addr_map_cfg *cfg, int win)
|
||||
{
|
||||
/*
|
||||
* Find the control register base address for this window.
|
||||
*
|
||||
* BRIDGE_VIRT_BASE points to the right (CPU0's or CPU1's)
|
||||
* MBUS bridge depending on which CPU core we're running on,
|
||||
* so we don't need to take that into account here.
|
||||
*/
|
||||
|
||||
return (win < 8) ? WIN0_OFF(win) : WIN8_OFF(win);
|
||||
}
|
||||
|
||||
/*
|
||||
* Description of the windows needed by the platform code
|
||||
*/
|
||||
static struct orion_addr_map_cfg addr_map_cfg __initdata = {
|
||||
.num_wins = 14,
|
||||
.remappable_wins = 8,
|
||||
.win_cfg_base = win_cfg_base,
|
||||
};
|
||||
|
||||
void __init mv78xx0_setup_cpu_mbus(void)
|
||||
{
|
||||
/*
|
||||
* Disable, clear and configure windows.
|
||||
*/
|
||||
orion_config_wins(&addr_map_cfg, NULL);
|
||||
|
||||
/*
|
||||
* Setup MBUS dram target info.
|
||||
*/
|
||||
if (mv78xx0_core_index() == 0)
|
||||
orion_setup_cpu_mbus_target(&addr_map_cfg,
|
||||
(void __iomem *) DDR_WINDOW_CPU0_BASE);
|
||||
else
|
||||
orion_setup_cpu_mbus_target(&addr_map_cfg,
|
||||
(void __iomem *) DDR_WINDOW_CPU1_BASE);
|
||||
}
|
||||
|
||||
void __init mv78xx0_setup_pcie_io_win(int window, u32 base, u32 size,
|
||||
int maj, int min)
|
||||
{
|
||||
orion_setup_cpu_win(&addr_map_cfg, window, base, size,
|
||||
TARGET_PCIE(maj), ATTR_PCIE_IO(min), 0);
|
||||
}
|
||||
|
||||
void __init mv78xx0_setup_pcie_mem_win(int window, u32 base, u32 size,
|
||||
int maj, int min)
|
||||
{
|
||||
orion_setup_cpu_win(&addr_map_cfg, window, base, size,
|
||||
TARGET_PCIE(maj), ATTR_PCIE_MEM(min), -1);
|
||||
}
|
@ -334,6 +334,14 @@ void __init mv78xx0_uart3_init(void)
|
||||
void __init mv78xx0_init_early(void)
|
||||
{
|
||||
orion_time_set_base(TIMER_VIRT_BASE);
|
||||
if (mv78xx0_core_index() == 0)
|
||||
mvebu_mbus_init("marvell,mv78xx0-mbus",
|
||||
BRIDGE_WINS_CPU0_BASE, BRIDGE_WINS_SZ,
|
||||
DDR_WINDOW_CPU0_BASE, DDR_WINDOW_CPU_SZ);
|
||||
else
|
||||
mvebu_mbus_init("marvell,mv78xx0-mbus",
|
||||
BRIDGE_WINS_CPU1_BASE, BRIDGE_WINS_SZ,
|
||||
DDR_WINDOW_CPU1_BASE, DDR_WINDOW_CPU_SZ);
|
||||
}
|
||||
|
||||
void __init_refok mv78xx0_timer_init(void)
|
||||
@ -397,8 +405,6 @@ void __init mv78xx0_init(void)
|
||||
printk("HCLK = %dMHz, ", (hclk + 499999) / 1000000);
|
||||
printk("TCLK = %dMHz\n", (get_tclk() + 499999) / 1000000);
|
||||
|
||||
mv78xx0_setup_cpu_mbus();
|
||||
|
||||
#ifdef CONFIG_CACHE_FEROCEON_L2
|
||||
feroceon_l2_init(is_l2_writethrough());
|
||||
#endif
|
||||
|
@ -60,13 +60,18 @@
|
||||
*/
|
||||
#define BRIDGE_VIRT_BASE (MV78XX0_CORE_REGS_VIRT_BASE)
|
||||
#define BRIDGE_PHYS_BASE (MV78XX0_CORE_REGS_PHYS_BASE)
|
||||
#define BRIDGE_WINS_CPU0_BASE (MV78XX0_CORE0_REGS_PHYS_BASE)
|
||||
#define BRIDGE_WINS_CPU1_BASE (MV78XX0_CORE1_REGS_PHYS_BASE)
|
||||
#define BRIDGE_WINS_SZ (0xA000)
|
||||
|
||||
/*
|
||||
* Register Map
|
||||
*/
|
||||
#define DDR_VIRT_BASE (MV78XX0_REGS_VIRT_BASE + 0x00000)
|
||||
#define DDR_WINDOW_CPU0_BASE (DDR_VIRT_BASE + 0x1500)
|
||||
#define DDR_WINDOW_CPU1_BASE (DDR_VIRT_BASE + 0x1570)
|
||||
#define DDR_PHYS_BASE (MV78XX0_REGS_PHYS_BASE + 0x00000)
|
||||
#define DDR_WINDOW_CPU0_BASE (DDR_PHYS_BASE + 0x1500)
|
||||
#define DDR_WINDOW_CPU1_BASE (DDR_PHYS_BASE + 0x1570)
|
||||
#define DDR_WINDOW_CPU_SZ (0x20)
|
||||
|
||||
#define DEV_BUS_PHYS_BASE (MV78XX0_REGS_PHYS_BASE + 0x10000)
|
||||
#define DEV_BUS_VIRT_BASE (MV78XX0_REGS_VIRT_BASE + 0x10000)
|
||||
|
@ -10,11 +10,11 @@
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/mbus.h>
|
||||
#include <video/vga.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/mach/pci.h>
|
||||
#include <plat/pcie.h>
|
||||
#include <plat/addr-map.h>
|
||||
#include <mach/mv78xx0.h>
|
||||
#include "common.h"
|
||||
|
||||
@ -54,7 +54,6 @@ static void __init mv78xx0_pcie_preinit(void)
|
||||
int i;
|
||||
u32 size_each;
|
||||
u32 start;
|
||||
int win = 0;
|
||||
|
||||
pcie_io_space.name = "PCIe I/O Space";
|
||||
pcie_io_space.start = MV78XX0_PCIE_IO_PHYS_BASE(0);
|
||||
@ -72,6 +71,7 @@ static void __init mv78xx0_pcie_preinit(void)
|
||||
start = MV78XX0_PCIE_MEM_PHYS_BASE;
|
||||
for (i = 0; i < num_pcie_ports; i++) {
|
||||
struct pcie_port *pp = pcie_port + i;
|
||||
char winname[MVEBU_MBUS_MAX_WINNAME_SZ];
|
||||
|
||||
snprintf(pp->mem_space_name, sizeof(pp->mem_space_name),
|
||||
"PCIe %d.%d MEM", pp->maj, pp->min);
|
||||
@ -85,12 +85,17 @@ static void __init mv78xx0_pcie_preinit(void)
|
||||
if (request_resource(&iomem_resource, &pp->res))
|
||||
panic("can't allocate PCIe MEM sub-space");
|
||||
|
||||
mv78xx0_setup_pcie_mem_win(win + i + 8, pp->res.start,
|
||||
resource_size(&pp->res),
|
||||
pp->maj, pp->min);
|
||||
snprintf(winname, sizeof(winname), "pcie%d.%d",
|
||||
pp->maj, pp->min);
|
||||
|
||||
mv78xx0_setup_pcie_io_win(win + i, i * SZ_64K, SZ_64K,
|
||||
pp->maj, pp->min);
|
||||
mvebu_mbus_add_window_remap_flags(winname,
|
||||
pp->res.start,
|
||||
resource_size(&pp->res),
|
||||
MVEBU_MBUS_NO_REMAP,
|
||||
MVEBU_MBUS_PCI_MEM);
|
||||
mvebu_mbus_add_window_remap_flags(winname,
|
||||
i * SZ_64K, SZ_64K,
|
||||
0, MVEBU_MBUS_PCI_IO);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -13,6 +13,8 @@ config ARCH_MVEBU
|
||||
select MVEBU_CLK_CORE
|
||||
select MVEBU_CLK_CPU
|
||||
select MVEBU_CLK_GATING
|
||||
select MVEBU_MBUS
|
||||
select ZONE_DMA if ARM_LPAE
|
||||
|
||||
if ARCH_MVEBU
|
||||
|
||||
|
@ -5,6 +5,6 @@ AFLAGS_coherency_ll.o := -Wa,-march=armv7-a
|
||||
|
||||
obj-y += system-controller.o
|
||||
obj-$(CONFIG_MACH_ARMADA_370_XP) += armada-370-xp.o
|
||||
obj-$(CONFIG_ARCH_MVEBU) += addr-map.o coherency.o coherency_ll.o pmsu.o irq-armada-370-xp.o
|
||||
obj-$(CONFIG_ARCH_MVEBU) += coherency.o coherency_ll.o pmsu.o irq-armada-370-xp.o
|
||||
obj-$(CONFIG_SMP) += platsmp.o headsmp.o
|
||||
obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o
|
||||
|
@ -1,137 +0,0 @@
|
||||
/*
|
||||
* Address map functions for Marvell 370 / XP SoCs
|
||||
*
|
||||
* Copyright (C) 2012 Marvell
|
||||
*
|
||||
* Thomas Petazzoni <thomas.petazzoni@free-electrons.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/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/mbus.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_address.h>
|
||||
#include <plat/addr-map.h>
|
||||
|
||||
/*
|
||||
* Generic Address Decode Windows bit settings
|
||||
*/
|
||||
#define ARMADA_XP_TARGET_DEV_BUS 1
|
||||
#define ARMADA_XP_ATTR_DEV_BOOTROM 0x1D
|
||||
#define ARMADA_XP_TARGET_ETH1 3
|
||||
#define ARMADA_XP_TARGET_PCIE_0_2 4
|
||||
#define ARMADA_XP_TARGET_ETH0 7
|
||||
#define ARMADA_XP_TARGET_PCIE_1_3 8
|
||||
|
||||
#define ARMADA_370_TARGET_DEV_BUS 1
|
||||
#define ARMADA_370_ATTR_DEV_BOOTROM 0x1D
|
||||
#define ARMADA_370_TARGET_PCIE_0 4
|
||||
#define ARMADA_370_TARGET_PCIE_1 8
|
||||
|
||||
#define ARMADA_WINDOW_8_PLUS_OFFSET 0x90
|
||||
#define ARMADA_SDRAM_ADDR_DECODING_OFFSET 0x180
|
||||
|
||||
static const struct __initdata orion_addr_map_info
|
||||
armada_xp_addr_map_info[] = {
|
||||
/*
|
||||
* Window for the BootROM, needed for SMP on Armada XP
|
||||
*/
|
||||
{ 0, 0xfff00000, SZ_1M, ARMADA_XP_TARGET_DEV_BUS,
|
||||
ARMADA_XP_ATTR_DEV_BOOTROM, -1 },
|
||||
/* End marker */
|
||||
{ -1, 0, 0, 0, 0, 0 },
|
||||
};
|
||||
|
||||
static const struct __initdata orion_addr_map_info
|
||||
armada_370_addr_map_info[] = {
|
||||
/* End marker */
|
||||
{ -1, 0, 0, 0, 0, 0 },
|
||||
};
|
||||
|
||||
static struct of_device_id of_addr_decoding_controller_table[] = {
|
||||
{ .compatible = "marvell,armada-addr-decoding-controller" },
|
||||
{ /* end of list */ },
|
||||
};
|
||||
|
||||
static void __iomem *
|
||||
armada_cfg_base(const struct orion_addr_map_cfg *cfg, int win)
|
||||
{
|
||||
unsigned int offset;
|
||||
|
||||
/* The register layout is a bit annoying and the below code
|
||||
* tries to cope with it.
|
||||
* - At offset 0x0, there are the registers for the first 8
|
||||
* windows, with 4 registers of 32 bits per window (ctrl,
|
||||
* base, remap low, remap high)
|
||||
* - Then at offset 0x80, there is a hole of 0x10 bytes for
|
||||
* the internal registers base address and internal units
|
||||
* sync barrier register.
|
||||
* - Then at offset 0x90, there the registers for 12
|
||||
* windows, with only 2 registers of 32 bits per window
|
||||
* (ctrl, base).
|
||||
*/
|
||||
if (win < 8)
|
||||
offset = (win << 4);
|
||||
else
|
||||
offset = ARMADA_WINDOW_8_PLUS_OFFSET + ((win - 8) << 3);
|
||||
|
||||
return cfg->bridge_virt_base + offset;
|
||||
}
|
||||
|
||||
static struct __initdata orion_addr_map_cfg addr_map_cfg = {
|
||||
.num_wins = 20,
|
||||
.remappable_wins = 8,
|
||||
.win_cfg_base = armada_cfg_base,
|
||||
};
|
||||
|
||||
static int __init armada_setup_cpu_mbus(void)
|
||||
{
|
||||
struct device_node *np;
|
||||
void __iomem *mbus_unit_addr_decoding_base;
|
||||
void __iomem *sdram_addr_decoding_base;
|
||||
|
||||
np = of_find_matching_node(NULL, of_addr_decoding_controller_table);
|
||||
if (!np)
|
||||
return -ENODEV;
|
||||
|
||||
mbus_unit_addr_decoding_base = of_iomap(np, 0);
|
||||
BUG_ON(!mbus_unit_addr_decoding_base);
|
||||
|
||||
sdram_addr_decoding_base =
|
||||
mbus_unit_addr_decoding_base +
|
||||
ARMADA_SDRAM_ADDR_DECODING_OFFSET;
|
||||
|
||||
addr_map_cfg.bridge_virt_base = mbus_unit_addr_decoding_base;
|
||||
|
||||
if (of_find_compatible_node(NULL, NULL, "marvell,coherency-fabric"))
|
||||
addr_map_cfg.hw_io_coherency = 1;
|
||||
|
||||
/*
|
||||
* Disable, clear and configure windows.
|
||||
*/
|
||||
if (of_machine_is_compatible("marvell,armadaxp"))
|
||||
orion_config_wins(&addr_map_cfg, armada_xp_addr_map_info);
|
||||
else if (of_machine_is_compatible("marvell,armada370"))
|
||||
orion_config_wins(&addr_map_cfg, armada_370_addr_map_info);
|
||||
else {
|
||||
pr_err("Unsupported SoC\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Setup MBUS dram target info.
|
||||
*/
|
||||
orion_setup_cpu_mbus_target(&addr_map_cfg,
|
||||
sdram_addr_decoding_base);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Using a early_initcall is needed so that this initialization gets
|
||||
* done before the SMP initialization, which requires the BootROM to
|
||||
* be remapped. */
|
||||
early_initcall(armada_setup_cpu_mbus);
|
@ -19,6 +19,7 @@
|
||||
#include <linux/time-armada-370-xp.h>
|
||||
#include <linux/clk/mvebu.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/mbus.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
#include <asm/mach/time.h>
|
||||
@ -48,12 +49,29 @@ void __init armada_370_xp_timer_and_clk_init(void)
|
||||
|
||||
void __init armada_370_xp_init_early(void)
|
||||
{
|
||||
char *mbus_soc_name;
|
||||
|
||||
/*
|
||||
* Some Armada 370/XP devices allocate their coherent buffers
|
||||
* from atomic context. Increase size of atomic coherent pool
|
||||
* to make sure such the allocations won't fail.
|
||||
*/
|
||||
init_dma_coherent_pool_size(SZ_1M);
|
||||
|
||||
/*
|
||||
* This initialization will be replaced by a DT-based
|
||||
* initialization once the mvebu-mbus driver gains DT support.
|
||||
*/
|
||||
if (of_machine_is_compatible("marvell,armada370"))
|
||||
mbus_soc_name = "marvell,armada370-mbus";
|
||||
else
|
||||
mbus_soc_name = "marvell,armadaxp-mbus";
|
||||
|
||||
mvebu_mbus_init(mbus_soc_name,
|
||||
ARMADA_370_XP_MBUS_WINS_BASE,
|
||||
ARMADA_370_XP_MBUS_WINS_SIZE,
|
||||
ARMADA_370_XP_SDRAM_WINS_BASE,
|
||||
ARMADA_370_XP_SDRAM_WINS_SIZE);
|
||||
}
|
||||
|
||||
static void __init armada_370_xp_dt_init(void)
|
||||
|
@ -16,9 +16,15 @@
|
||||
#define __MACH_ARMADA_370_XP_H
|
||||
|
||||
#define ARMADA_370_XP_REGS_PHYS_BASE 0xd0000000
|
||||
#define ARMADA_370_XP_REGS_VIRT_BASE IOMEM(0xfeb00000)
|
||||
#define ARMADA_370_XP_REGS_VIRT_BASE IOMEM(0xfec00000)
|
||||
#define ARMADA_370_XP_REGS_SIZE SZ_1M
|
||||
|
||||
/* These defines can go away once mvebu-mbus has a DT binding */
|
||||
#define ARMADA_370_XP_MBUS_WINS_BASE (ARMADA_370_XP_REGS_PHYS_BASE + 0x20000)
|
||||
#define ARMADA_370_XP_MBUS_WINS_SIZE 0x100
|
||||
#define ARMADA_370_XP_SDRAM_WINS_BASE (ARMADA_370_XP_REGS_PHYS_BASE + 0x20180)
|
||||
#define ARMADA_370_XP_SDRAM_WINS_SIZE 0x20
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
#include <linux/cpumask.h>
|
||||
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include <linux/smp.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/mbus.h>
|
||||
#include <asm/cacheflush.h>
|
||||
#include <asm/smp_plat.h>
|
||||
#include "common.h"
|
||||
@ -109,6 +110,7 @@ void __init armada_xp_smp_prepare_cpus(unsigned int max_cpus)
|
||||
set_secondary_cpus_clock();
|
||||
flush_cache_all();
|
||||
set_cpu_coherent(cpu_logical_map(smp_processor_id()), 0);
|
||||
mvebu_mbus_add_window("bootrom", 0xfff00000, SZ_1M);
|
||||
}
|
||||
|
||||
struct smp_operations armada_xp_smp_ops __initdata = {
|
||||
|
@ -100,7 +100,7 @@ static struct irq_domain_ops icoll_irq_domain_ops = {
|
||||
.xlate = irq_domain_xlate_onecell,
|
||||
};
|
||||
|
||||
void __init icoll_of_init(struct device_node *np,
|
||||
static void __init icoll_of_init(struct device_node *np,
|
||||
struct device_node *interrupt_parent)
|
||||
{
|
||||
/*
|
||||
|
@ -402,17 +402,17 @@ static void __init cfa10049_init(void)
|
||||
{
|
||||
enable_clk_enet_out();
|
||||
update_fec_mac_prop(OUI_CRYSTALFONTZ);
|
||||
|
||||
mxsfb_pdata.mode_list = cfa10049_video_modes;
|
||||
mxsfb_pdata.mode_count = ARRAY_SIZE(cfa10049_video_modes);
|
||||
mxsfb_pdata.default_bpp = 32;
|
||||
mxsfb_pdata.ld_intf_width = STMLCDIF_18BIT;
|
||||
}
|
||||
|
||||
static void __init cfa10037_init(void)
|
||||
{
|
||||
enable_clk_enet_out();
|
||||
update_fec_mac_prop(OUI_CRYSTALFONTZ);
|
||||
|
||||
mxsfb_pdata.mode_list = cfa10049_video_modes;
|
||||
mxsfb_pdata.mode_count = ARRAY_SIZE(cfa10049_video_modes);
|
||||
mxsfb_pdata.default_bpp = 32;
|
||||
mxsfb_pdata.ld_intf_width = STMLCDIF_18BIT;
|
||||
}
|
||||
|
||||
static void __init apf28_init(void)
|
||||
|
@ -18,6 +18,7 @@
|
||||
|
||||
#include <mach/mx23.h>
|
||||
#include <mach/mx28.h>
|
||||
#include <mach/common.h>
|
||||
|
||||
/*
|
||||
* Define the MX23 memory map.
|
||||
|
@ -19,6 +19,7 @@
|
||||
#include <asm/processor.h> /* for cpu_relax() */
|
||||
|
||||
#include <mach/mxs.h>
|
||||
#include <mach/common.h>
|
||||
|
||||
#define OCOTP_WORD_OFFSET 0x20
|
||||
#define OCOTP_WORD_COUNT 0x20
|
||||
|
@ -31,6 +31,8 @@
|
||||
|
||||
#include <plat/i2c.h>
|
||||
|
||||
#include <mach/irqs.h>
|
||||
|
||||
#if defined(CONFIG_ARCH_OMAP730) || defined(CONFIG_ARCH_OMAP850)
|
||||
void omap7xx_map_io(void);
|
||||
#else
|
||||
|
@ -311,9 +311,6 @@ config MACH_OMAP_ZOOM2
|
||||
default y
|
||||
select OMAP_PACKAGE_CBB
|
||||
select REGULATOR_FIXED_VOLTAGE if REGULATOR
|
||||
select SERIAL_8250
|
||||
select SERIAL_8250_CONSOLE
|
||||
select SERIAL_CORE_CONSOLE
|
||||
|
||||
config MACH_OMAP_ZOOM3
|
||||
bool "OMAP3630 Zoom3 board"
|
||||
@ -321,9 +318,6 @@ config MACH_OMAP_ZOOM3
|
||||
default y
|
||||
select OMAP_PACKAGE_CBP
|
||||
select REGULATOR_FIXED_VOLTAGE if REGULATOR
|
||||
select SERIAL_8250
|
||||
select SERIAL_8250_CONSOLE
|
||||
select SERIAL_CORE_CONSOLE
|
||||
|
||||
config MACH_CM_T35
|
||||
bool "CompuLab CM-T35/CM-T3730 modules"
|
||||
|
@ -102,6 +102,7 @@ DT_MACHINE_START(OMAP3_DT, "Generic OMAP3 (Flattened Device Tree)")
|
||||
.init_irq = omap_intc_of_init,
|
||||
.handle_irq = omap3_intc_handle_irq,
|
||||
.init_machine = omap_generic_init,
|
||||
.init_late = omap3_init_late,
|
||||
.init_time = omap3_sync32k_timer_init,
|
||||
.dt_compat = omap3_boards_compat,
|
||||
.restart = omap3xxx_restart,
|
||||
@ -119,6 +120,7 @@ DT_MACHINE_START(OMAP3_GP_DT, "Generic OMAP3-GP (Flattened Device Tree)")
|
||||
.init_irq = omap_intc_of_init,
|
||||
.handle_irq = omap3_intc_handle_irq,
|
||||
.init_machine = omap_generic_init,
|
||||
.init_late = omap3_init_late,
|
||||
.init_time = omap3_secure_sync32k_timer_init,
|
||||
.dt_compat = omap3_gp_boards_compat,
|
||||
.restart = omap3xxx_restart,
|
||||
|
@ -17,6 +17,7 @@
|
||||
#include <linux/io.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/leds.h>
|
||||
#include <linux/usb/phy.h>
|
||||
#include <linux/usb/musb.h>
|
||||
#include <linux/platform_data/spi-omap2-mcspi.h>
|
||||
|
||||
@ -98,6 +99,7 @@ static void __init rx51_init(void)
|
||||
sdrc_params = nokia_get_sdram_timings();
|
||||
omap_sdrc_init(sdrc_params, sdrc_params);
|
||||
|
||||
usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb");
|
||||
usb_musb_init(&musb_board_data);
|
||||
rx51_peripherals_init();
|
||||
|
||||
|
@ -108,7 +108,6 @@ void omap35xx_init_late(void);
|
||||
void omap3630_init_late(void);
|
||||
void am35xx_init_late(void);
|
||||
void ti81xx_init_late(void);
|
||||
void omap4430_init_late(void);
|
||||
int omap2_common_pm_late_init(void);
|
||||
|
||||
#if defined(CONFIG_SOC_OMAP2420) || defined(CONFIG_SOC_OMAP2430)
|
||||
|
@ -1122,9 +1122,6 @@ int gpmc_calc_timings(struct gpmc_timings *gpmc_t,
|
||||
/* TODO: remove, see function definition */
|
||||
gpmc_convert_ps_to_ns(gpmc_t);
|
||||
|
||||
/* Now the GPMC is initialised, unreserve the chip-selects */
|
||||
gpmc_cs_map = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1383,6 +1380,9 @@ static int gpmc_probe(struct platform_device *pdev)
|
||||
if (IS_ERR_VALUE(gpmc_setup_irq()))
|
||||
dev_warn(gpmc_dev, "gpmc_setup_irq failed\n");
|
||||
|
||||
/* Now the GPMC is initialised, unreserve the chip-selects */
|
||||
gpmc_cs_map = 0;
|
||||
|
||||
rc = gpmc_probe_dt(pdev);
|
||||
if (rc < 0) {
|
||||
clk_disable_unprepare(gpmc_l3_clk);
|
||||
|
@ -211,8 +211,6 @@ static int __init _omap_mux_get_by_name(struct omap_mux_partition *partition,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
pr_err("%s: Could not find signal %s\n", __func__, muxname);
|
||||
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
@ -234,6 +232,8 @@ int __init omap_mux_get_by_name(const char *muxname,
|
||||
return mux_mode;
|
||||
}
|
||||
|
||||
pr_err("%s: Could not find signal %s\n", __func__, muxname);
|
||||
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
@ -739,8 +739,9 @@ static void __init omap_mux_dbg_create_entry(
|
||||
list_for_each_entry(e, &partition->muxmodes, node) {
|
||||
struct omap_mux *m = &e->mux;
|
||||
|
||||
(void)debugfs_create_file(m->muxnames[0], S_IWUSR, mux_dbg_dir,
|
||||
m, &omap_mux_dbg_signal_fops);
|
||||
(void)debugfs_create_file(m->muxnames[0], S_IWUSR | S_IRUGO,
|
||||
mux_dbg_dir, m,
|
||||
&omap_mux_dbg_signal_fops);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
obj-y += common.o addr-map.o pci.o irq.o mpp.o
|
||||
obj-y += common.o pci.o irq.o mpp.o
|
||||
obj-$(CONFIG_MACH_DB88F5281) += db88f5281-setup.o
|
||||
obj-$(CONFIG_MACH_RD88F5182) += rd88f5182-setup.o
|
||||
obj-$(CONFIG_MACH_KUROBOX_PRO) += kurobox_pro-setup.o
|
||||
|
@ -1,155 +0,0 @@
|
||||
/*
|
||||
* arch/arm/mach-orion5x/addr-map.c
|
||||
*
|
||||
* Address map functions for Marvell Orion 5x SoCs
|
||||
*
|
||||
* Maintainer: Tzachi Perelstein <tzachi@marvell.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/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/mbus.h>
|
||||
#include <linux/io.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <plat/addr-map.h>
|
||||
#include "common.h"
|
||||
|
||||
/*
|
||||
* The Orion has fully programmable address map. There's a separate address
|
||||
* map for each of the device _master_ interfaces, e.g. CPU, PCI, PCIe, USB,
|
||||
* Gigabit Ethernet, DMA/XOR engines, etc. Each interface has its own
|
||||
* address decode windows that allow it to access any of the Orion resources.
|
||||
*
|
||||
* CPU address decoding --
|
||||
* Linux assumes that it is the boot loader that already setup the access to
|
||||
* DDR and internal registers.
|
||||
* Setup access to PCI and PCIe IO/MEM space is issued by this file.
|
||||
* Setup access to various devices located on the device bus interface (e.g.
|
||||
* flashes, RTC, etc) should be issued by machine-setup.c according to
|
||||
* specific board population (by using orion5x_setup_*_win()).
|
||||
*
|
||||
* Non-CPU Masters address decoding --
|
||||
* Unlike the CPU, we setup the access from Orion's master interfaces to DDR
|
||||
* banks only (the typical use case).
|
||||
* Setup access for each master to DDR is issued by platform device setup.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Generic Address Decode Windows bit settings
|
||||
*/
|
||||
#define TARGET_DEV_BUS 1
|
||||
#define TARGET_PCI 3
|
||||
#define TARGET_PCIE 4
|
||||
#define TARGET_SRAM 9
|
||||
#define ATTR_PCIE_MEM 0x59
|
||||
#define ATTR_PCIE_IO 0x51
|
||||
#define ATTR_PCIE_WA 0x79
|
||||
#define ATTR_PCI_MEM 0x59
|
||||
#define ATTR_PCI_IO 0x51
|
||||
#define ATTR_DEV_CS0 0x1e
|
||||
#define ATTR_DEV_CS1 0x1d
|
||||
#define ATTR_DEV_CS2 0x1b
|
||||
#define ATTR_DEV_BOOT 0xf
|
||||
#define ATTR_SRAM 0x0
|
||||
|
||||
static int __initdata win_alloc_count;
|
||||
|
||||
static int __init cpu_win_can_remap(const struct orion_addr_map_cfg *cfg,
|
||||
const int win)
|
||||
{
|
||||
u32 dev, rev;
|
||||
|
||||
orion5x_pcie_id(&dev, &rev);
|
||||
if ((dev == MV88F5281_DEV_ID && win < 4)
|
||||
|| (dev == MV88F5182_DEV_ID && win < 2)
|
||||
|| (dev == MV88F5181_DEV_ID && win < 2)
|
||||
|| (dev == MV88F6183_DEV_ID && win < 4))
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Description of the windows needed by the platform code
|
||||
*/
|
||||
static struct orion_addr_map_cfg addr_map_cfg __initdata = {
|
||||
.num_wins = 8,
|
||||
.cpu_win_can_remap = cpu_win_can_remap,
|
||||
.bridge_virt_base = ORION5X_BRIDGE_VIRT_BASE,
|
||||
};
|
||||
|
||||
static const struct __initdata orion_addr_map_info addr_map_info[] = {
|
||||
/*
|
||||
* Setup windows for PCI+PCIe IO+MEM space.
|
||||
*/
|
||||
{ 0, ORION5X_PCIE_IO_PHYS_BASE, ORION5X_PCIE_IO_SIZE,
|
||||
TARGET_PCIE, ATTR_PCIE_IO, ORION5X_PCIE_IO_BUS_BASE
|
||||
},
|
||||
{ 1, ORION5X_PCI_IO_PHYS_BASE, ORION5X_PCI_IO_SIZE,
|
||||
TARGET_PCI, ATTR_PCI_IO, ORION5X_PCI_IO_BUS_BASE
|
||||
},
|
||||
{ 2, ORION5X_PCIE_MEM_PHYS_BASE, ORION5X_PCIE_MEM_SIZE,
|
||||
TARGET_PCIE, ATTR_PCIE_MEM, -1
|
||||
},
|
||||
{ 3, ORION5X_PCI_MEM_PHYS_BASE, ORION5X_PCI_MEM_SIZE,
|
||||
TARGET_PCI, ATTR_PCI_MEM, -1
|
||||
},
|
||||
/* End marker */
|
||||
{ -1, 0, 0, 0, 0, 0 }
|
||||
};
|
||||
|
||||
void __init orion5x_setup_cpu_mbus_bridge(void)
|
||||
{
|
||||
/*
|
||||
* Disable, clear and configure windows.
|
||||
*/
|
||||
orion_config_wins(&addr_map_cfg, addr_map_info);
|
||||
win_alloc_count = 4;
|
||||
|
||||
/*
|
||||
* Setup MBUS dram target info.
|
||||
*/
|
||||
orion_setup_cpu_mbus_target(&addr_map_cfg,
|
||||
(void __iomem *) ORION5X_DDR_WINDOW_CPU_BASE);
|
||||
}
|
||||
|
||||
void __init orion5x_setup_dev_boot_win(u32 base, u32 size)
|
||||
{
|
||||
orion_setup_cpu_win(&addr_map_cfg, win_alloc_count++, base, size,
|
||||
TARGET_DEV_BUS, ATTR_DEV_BOOT, -1);
|
||||
}
|
||||
|
||||
void __init orion5x_setup_dev0_win(u32 base, u32 size)
|
||||
{
|
||||
orion_setup_cpu_win(&addr_map_cfg, win_alloc_count++, base, size,
|
||||
TARGET_DEV_BUS, ATTR_DEV_CS0, -1);
|
||||
}
|
||||
|
||||
void __init orion5x_setup_dev1_win(u32 base, u32 size)
|
||||
{
|
||||
orion_setup_cpu_win(&addr_map_cfg, win_alloc_count++, base, size,
|
||||
TARGET_DEV_BUS, ATTR_DEV_CS1, -1);
|
||||
}
|
||||
|
||||
void __init orion5x_setup_dev2_win(u32 base, u32 size)
|
||||
{
|
||||
orion_setup_cpu_win(&addr_map_cfg, win_alloc_count++, base, size,
|
||||
TARGET_DEV_BUS, ATTR_DEV_CS2, -1);
|
||||
}
|
||||
|
||||
void __init orion5x_setup_pcie_wa_win(u32 base, u32 size)
|
||||
{
|
||||
orion_setup_cpu_win(&addr_map_cfg, win_alloc_count++, base, size,
|
||||
TARGET_PCIE, ATTR_PCIE_WA, -1);
|
||||
}
|
||||
|
||||
void __init orion5x_setup_sram_win(void)
|
||||
{
|
||||
orion_setup_cpu_win(&addr_map_cfg, win_alloc_count++,
|
||||
ORION5X_SRAM_PHYS_BASE, ORION5X_SRAM_SIZE,
|
||||
TARGET_SRAM, ATTR_SRAM, -1);
|
||||
}
|
@ -41,7 +41,7 @@ static void __init orion5x_dt_init(void)
|
||||
/*
|
||||
* Setup Orion address map
|
||||
*/
|
||||
orion5x_setup_cpu_mbus_bridge();
|
||||
orion5x_setup_wins();
|
||||
|
||||
/* Setup root of clk tree */
|
||||
clk_init();
|
||||
|
@ -34,7 +34,6 @@
|
||||
#include <linux/platform_data/usb-ehci-orion.h>
|
||||
#include <plat/time.h>
|
||||
#include <plat/common.h>
|
||||
#include <plat/addr-map.h>
|
||||
#include "common.h"
|
||||
|
||||
/*****************************************************************************
|
||||
@ -174,7 +173,8 @@ void __init orion5x_xor_init(void)
|
||||
****************************************************************************/
|
||||
static void __init orion5x_crypto_init(void)
|
||||
{
|
||||
orion5x_setup_sram_win();
|
||||
mvebu_mbus_add_window("sram", ORION5X_SRAM_PHYS_BASE,
|
||||
ORION5X_SRAM_SIZE);
|
||||
orion_crypto_init(ORION5X_CRYPTO_PHYS_BASE, ORION5X_SRAM_PHYS_BASE,
|
||||
SZ_8K, IRQ_ORION5X_CESA);
|
||||
}
|
||||
@ -193,6 +193,9 @@ void __init orion5x_wdt_init(void)
|
||||
****************************************************************************/
|
||||
void __init orion5x_init_early(void)
|
||||
{
|
||||
u32 rev, dev;
|
||||
const char *mbus_soc_name;
|
||||
|
||||
orion_time_set_base(TIMER_VIRT_BASE);
|
||||
|
||||
/*
|
||||
@ -201,6 +204,46 @@ void __init orion5x_init_early(void)
|
||||
* the allocations won't fail.
|
||||
*/
|
||||
init_dma_coherent_pool_size(SZ_1M);
|
||||
|
||||
/* Initialize the MBUS driver */
|
||||
orion5x_pcie_id(&dev, &rev);
|
||||
if (dev == MV88F5281_DEV_ID)
|
||||
mbus_soc_name = "marvell,orion5x-88f5281-mbus";
|
||||
else if (dev == MV88F5182_DEV_ID)
|
||||
mbus_soc_name = "marvell,orion5x-88f5182-mbus";
|
||||
else if (dev == MV88F5181_DEV_ID)
|
||||
mbus_soc_name = "marvell,orion5x-88f5181-mbus";
|
||||
else if (dev == MV88F6183_DEV_ID)
|
||||
mbus_soc_name = "marvell,orion5x-88f6183-mbus";
|
||||
else
|
||||
mbus_soc_name = NULL;
|
||||
mvebu_mbus_init(mbus_soc_name, ORION5X_BRIDGE_WINS_BASE,
|
||||
ORION5X_BRIDGE_WINS_SZ,
|
||||
ORION5X_DDR_WINS_BASE, ORION5X_DDR_WINS_SZ);
|
||||
}
|
||||
|
||||
void orion5x_setup_wins(void)
|
||||
{
|
||||
/*
|
||||
* The PCIe windows will no longer be statically allocated
|
||||
* here once Orion5x is migrated to the pci-mvebu driver.
|
||||
*/
|
||||
mvebu_mbus_add_window_remap_flags("pcie0.0", ORION5X_PCIE_IO_PHYS_BASE,
|
||||
ORION5X_PCIE_IO_SIZE,
|
||||
ORION5X_PCIE_IO_BUS_BASE,
|
||||
MVEBU_MBUS_PCI_IO);
|
||||
mvebu_mbus_add_window_remap_flags("pcie0.0", ORION5X_PCIE_MEM_PHYS_BASE,
|
||||
ORION5X_PCIE_MEM_SIZE,
|
||||
MVEBU_MBUS_NO_REMAP,
|
||||
MVEBU_MBUS_PCI_MEM);
|
||||
mvebu_mbus_add_window_remap_flags("pci0.0", ORION5X_PCI_IO_PHYS_BASE,
|
||||
ORION5X_PCI_IO_SIZE,
|
||||
ORION5X_PCI_IO_BUS_BASE,
|
||||
MVEBU_MBUS_PCI_IO);
|
||||
mvebu_mbus_add_window_remap_flags("pci0.0", ORION5X_PCI_MEM_PHYS_BASE,
|
||||
ORION5X_PCI_MEM_SIZE,
|
||||
MVEBU_MBUS_NO_REMAP,
|
||||
MVEBU_MBUS_PCI_MEM);
|
||||
}
|
||||
|
||||
int orion5x_tclk;
|
||||
@ -282,7 +325,7 @@ void __init orion5x_init(void)
|
||||
/*
|
||||
* Setup Orion address map
|
||||
*/
|
||||
orion5x_setup_cpu_mbus_bridge();
|
||||
orion5x_setup_wins();
|
||||
|
||||
/* Setup root of clk tree */
|
||||
clk_init();
|
||||
|
@ -17,18 +17,7 @@ void clk_init(void);
|
||||
extern int orion5x_tclk;
|
||||
extern void orion5x_timer_init(void);
|
||||
|
||||
/*
|
||||
* Enumerations and functions for Orion windows mapping. Used by Orion core
|
||||
* functions to map its interfaces and by the machine-setup to map its on-
|
||||
* board devices. Details in /mach-orion/addr-map.c
|
||||
*/
|
||||
void orion5x_setup_cpu_mbus_bridge(void);
|
||||
void orion5x_setup_dev_boot_win(u32 base, u32 size);
|
||||
void orion5x_setup_dev0_win(u32 base, u32 size);
|
||||
void orion5x_setup_dev1_win(u32 base, u32 size);
|
||||
void orion5x_setup_dev2_win(u32 base, u32 size);
|
||||
void orion5x_setup_pcie_wa_win(u32 base, u32 size);
|
||||
void orion5x_setup_sram_win(void);
|
||||
void orion5x_setup_wins(void);
|
||||
|
||||
void orion5x_ehci0_init(void);
|
||||
void orion5x_ehci1_init(void);
|
||||
|
@ -317,8 +317,8 @@ static void __init d2net_init(void)
|
||||
d2net_sata_power_init();
|
||||
orion5x_sata_init(&d2net_sata_data);
|
||||
|
||||
orion5x_setup_dev_boot_win(D2NET_NOR_BOOT_BASE,
|
||||
D2NET_NOR_BOOT_SIZE);
|
||||
mvebu_mbus_add_window("devbus-boot", D2NET_NOR_BOOT_BASE,
|
||||
D2NET_NOR_BOOT_SIZE);
|
||||
platform_device_register(&d2net_nor_flash);
|
||||
|
||||
platform_device_register(&d2net_gpio_buttons);
|
||||
|
@ -340,16 +340,19 @@ static void __init db88f5281_init(void)
|
||||
orion5x_uart0_init();
|
||||
orion5x_uart1_init();
|
||||
|
||||
orion5x_setup_dev_boot_win(DB88F5281_NOR_BOOT_BASE,
|
||||
DB88F5281_NOR_BOOT_SIZE);
|
||||
mvebu_mbus_add_window("devbus-boot", DB88F5281_NOR_BOOT_BASE,
|
||||
DB88F5281_NOR_BOOT_SIZE);
|
||||
platform_device_register(&db88f5281_boot_flash);
|
||||
|
||||
orion5x_setup_dev0_win(DB88F5281_7SEG_BASE, DB88F5281_7SEG_SIZE);
|
||||
mvebu_mbus_add_window("devbus-cs0", DB88F5281_7SEG_BASE,
|
||||
DB88F5281_7SEG_SIZE);
|
||||
|
||||
orion5x_setup_dev1_win(DB88F5281_NOR_BASE, DB88F5281_NOR_SIZE);
|
||||
mvebu_mbus_add_window("devbus-cs1", DB88F5281_NOR_BASE,
|
||||
DB88F5281_NOR_SIZE);
|
||||
platform_device_register(&db88f5281_nor_flash);
|
||||
|
||||
orion5x_setup_dev2_win(DB88F5281_NAND_BASE, DB88F5281_NAND_SIZE);
|
||||
mvebu_mbus_add_window("devbus-cs2", DB88F5281_NAND_BASE,
|
||||
DB88F5281_NAND_SIZE);
|
||||
platform_device_register(&db88f5281_nand_flash);
|
||||
|
||||
i2c_register_board_info(0, &db88f5281_i2c_rtc, 1);
|
||||
|
@ -611,7 +611,8 @@ static void __init dns323_init(void)
|
||||
/* setup flash mapping
|
||||
* CS3 holds a 8 MB Spansion S29GL064M90TFIR4
|
||||
*/
|
||||
orion5x_setup_dev_boot_win(DNS323_NOR_BOOT_BASE, DNS323_NOR_BOOT_SIZE);
|
||||
mvebu_mbus_add_window("devbus-boot", DNS323_NOR_BOOT_BASE,
|
||||
DNS323_NOR_BOOT_SIZE);
|
||||
platform_device_register(&dns323_nor_flash);
|
||||
|
||||
/* Sort out LEDs, Buttons and i2c devices */
|
||||
|
@ -154,8 +154,8 @@ void __init edmini_v2_init(void)
|
||||
orion5x_ehci0_init();
|
||||
orion5x_eth_init(&edmini_v2_eth_data);
|
||||
|
||||
orion5x_setup_dev_boot_win(EDMINI_V2_NOR_BOOT_BASE,
|
||||
EDMINI_V2_NOR_BOOT_SIZE);
|
||||
mvebu_mbus_add_window("devbus-boot", EDMINI_V2_NOR_BOOT_BASE,
|
||||
EDMINI_V2_NOR_BOOT_SIZE);
|
||||
platform_device_register(&edmini_v2_nor_flash);
|
||||
|
||||
pr_notice("edmini_v2: USB device port, flash write and power-off "
|
||||
|
@ -66,8 +66,10 @@
|
||||
* Orion Registers Map
|
||||
******************************************************************************/
|
||||
|
||||
#define ORION5X_DDR_PHYS_BASE (ORION5X_REGS_PHYS_BASE + 0x00000)
|
||||
#define ORION5X_DDR_WINS_BASE (ORION5X_DDR_PHYS_BASE + 0x1500)
|
||||
#define ORION5X_DDR_WINS_SZ (0x10)
|
||||
#define ORION5X_DDR_VIRT_BASE (ORION5X_REGS_VIRT_BASE + 0x00000)
|
||||
#define ORION5X_DDR_WINDOW_CPU_BASE (ORION5X_DDR_VIRT_BASE + 0x1500)
|
||||
#define ORION5X_DEV_BUS_PHYS_BASE (ORION5X_REGS_PHYS_BASE + 0x10000)
|
||||
#define ORION5X_DEV_BUS_VIRT_BASE (ORION5X_REGS_VIRT_BASE + 0x10000)
|
||||
#define ORION5X_DEV_BUS_REG(x) (ORION5X_DEV_BUS_VIRT_BASE + (x))
|
||||
@ -81,6 +83,8 @@
|
||||
|
||||
#define ORION5X_BRIDGE_VIRT_BASE (ORION5X_REGS_VIRT_BASE + 0x20000)
|
||||
#define ORION5X_BRIDGE_PHYS_BASE (ORION5X_REGS_PHYS_BASE + 0x20000)
|
||||
#define ORION5X_BRIDGE_WINS_BASE (ORION5X_BRIDGE_PHYS_BASE)
|
||||
#define ORION5X_BRIDGE_WINS_SZ (0x80)
|
||||
|
||||
#define ORION5X_PCI_VIRT_BASE (ORION5X_REGS_VIRT_BASE + 0x30000)
|
||||
|
||||
|
@ -359,13 +359,13 @@ static void __init kurobox_pro_init(void)
|
||||
orion5x_uart1_init();
|
||||
orion5x_xor_init();
|
||||
|
||||
orion5x_setup_dev_boot_win(KUROBOX_PRO_NOR_BOOT_BASE,
|
||||
KUROBOX_PRO_NOR_BOOT_SIZE);
|
||||
mvebu_mbus_add_window("devbus-boot", KUROBOX_PRO_NOR_BOOT_BASE,
|
||||
KUROBOX_PRO_NOR_BOOT_SIZE);
|
||||
platform_device_register(&kurobox_pro_nor_flash);
|
||||
|
||||
if (machine_is_kurobox_pro()) {
|
||||
orion5x_setup_dev0_win(KUROBOX_PRO_NAND_BASE,
|
||||
KUROBOX_PRO_NAND_SIZE);
|
||||
mvebu_mbus_add_window("devbus-cs0", KUROBOX_PRO_NAND_BASE,
|
||||
KUROBOX_PRO_NAND_SIZE);
|
||||
platform_device_register(&kurobox_pro_nand_flash);
|
||||
}
|
||||
|
||||
|
@ -294,8 +294,8 @@ static void __init lschl_init(void)
|
||||
orion5x_uart0_init();
|
||||
orion5x_xor_init();
|
||||
|
||||
orion5x_setup_dev_boot_win(LSCHL_NOR_BOOT_BASE,
|
||||
LSCHL_NOR_BOOT_SIZE);
|
||||
mvebu_mbus_add_window("devbus-boot", LSCHL_NOR_BOOT_BASE,
|
||||
LSCHL_NOR_BOOT_SIZE);
|
||||
platform_device_register(&lschl_nor_flash);
|
||||
|
||||
platform_device_register(&lschl_leds);
|
||||
|
@ -243,8 +243,8 @@ static void __init ls_hgl_init(void)
|
||||
orion5x_uart0_init();
|
||||
orion5x_xor_init();
|
||||
|
||||
orion5x_setup_dev_boot_win(LS_HGL_NOR_BOOT_BASE,
|
||||
LS_HGL_NOR_BOOT_SIZE);
|
||||
mvebu_mbus_add_window("devbus-boot", LS_HGL_NOR_BOOT_BASE,
|
||||
LS_HGL_NOR_BOOT_SIZE);
|
||||
platform_device_register(&ls_hgl_nor_flash);
|
||||
|
||||
platform_device_register(&ls_hgl_button_device);
|
||||
|
@ -244,8 +244,8 @@ static void __init lsmini_init(void)
|
||||
orion5x_uart0_init();
|
||||
orion5x_xor_init();
|
||||
|
||||
orion5x_setup_dev_boot_win(LSMINI_NOR_BOOT_BASE,
|
||||
LSMINI_NOR_BOOT_SIZE);
|
||||
mvebu_mbus_add_window("devbus-boot", LSMINI_NOR_BOOT_BASE,
|
||||
LSMINI_NOR_BOOT_SIZE);
|
||||
platform_device_register(&lsmini_nor_flash);
|
||||
|
||||
platform_device_register(&lsmini_button_device);
|
||||
|
@ -241,7 +241,8 @@ static void __init mss2_init(void)
|
||||
orion5x_uart0_init();
|
||||
orion5x_xor_init();
|
||||
|
||||
orion5x_setup_dev_boot_win(MSS2_NOR_BOOT_BASE, MSS2_NOR_BOOT_SIZE);
|
||||
mvebu_mbus_add_window("devbus-boot", MSS2_NOR_BOOT_BASE,
|
||||
MSS2_NOR_BOOT_SIZE);
|
||||
platform_device_register(&mss2_nor_flash);
|
||||
|
||||
platform_device_register(&mss2_button_device);
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user