Merge branch 'master' into for-2.6.35
Conflicts: block/blk-cgroup.c block/cfq-iosched.c Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
This commit is contained in:
commit
4facdaec1c
|
@ -25,6 +25,7 @@
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/moduleparam.h>
|
#include <linux/moduleparam.h>
|
||||||
#include <linux/skbuff.h>
|
#include <linux/skbuff.h>
|
||||||
|
#include <linux/slab.h>
|
||||||
#include <linux/timer.h>
|
#include <linux/timer.h>
|
||||||
|
|
||||||
#include <linux/connector.h>
|
#include <linux/connector.h>
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
|
|
||||||
What is imacfb?
|
What is efifb?
|
||||||
===============
|
===============
|
||||||
|
|
||||||
This is a generic EFI platform driver for Intel based Apple computers.
|
This is a generic EFI platform driver for Intel based Apple computers.
|
||||||
Imacfb is only for EFI booted Intel Macs.
|
efifb is only for EFI booted Intel Macs.
|
||||||
|
|
||||||
Supported Hardware
|
Supported Hardware
|
||||||
==================
|
==================
|
||||||
|
@ -16,16 +16,16 @@ MacMini
|
||||||
How to use it?
|
How to use it?
|
||||||
==============
|
==============
|
||||||
|
|
||||||
Imacfb does not have any kind of autodetection of your machine.
|
efifb does not have any kind of autodetection of your machine.
|
||||||
You have to add the following kernel parameters in your elilo.conf:
|
You have to add the following kernel parameters in your elilo.conf:
|
||||||
Macbook :
|
Macbook :
|
||||||
video=imacfb:macbook
|
video=efifb:macbook
|
||||||
MacMini :
|
MacMini :
|
||||||
video=imacfb:mini
|
video=efifb:mini
|
||||||
Macbook Pro 15", iMac 17" :
|
Macbook Pro 15", iMac 17" :
|
||||||
video=imacfb:i17
|
video=efifb:i17
|
||||||
Macbook Pro 17", iMac 20" :
|
Macbook Pro 17", iMac 20" :
|
||||||
video=imacfb:i20
|
video=efifb:i20
|
||||||
|
|
||||||
--
|
--
|
||||||
Edgar Hucek <gimli@dark-green.com>
|
Edgar Hucek <gimli@dark-green.com>
|
|
@ -37,6 +37,15 @@ For Plan 9 From User Space applications (http://swtch.com/plan9)
|
||||||
|
|
||||||
mount -t 9p `namespace`/acme /mnt/9 -o trans=unix,uname=$USER
|
mount -t 9p `namespace`/acme /mnt/9 -o trans=unix,uname=$USER
|
||||||
|
|
||||||
|
For server running on QEMU host with virtio transport:
|
||||||
|
|
||||||
|
mount -t 9p -o trans=virtio <mount_tag> /mnt/9
|
||||||
|
|
||||||
|
where mount_tag is the tag associated by the server to each of the exported
|
||||||
|
mount points. Each 9P export is seen by the client as a virtio device with an
|
||||||
|
associated "mount_tag" property. Available mount tags can be
|
||||||
|
seen by reading /sys/bus/virtio/drivers/9pnet_virtio/virtio<n>/mount_tag files.
|
||||||
|
|
||||||
OPTIONS
|
OPTIONS
|
||||||
=======
|
=======
|
||||||
|
|
||||||
|
@ -47,7 +56,7 @@ OPTIONS
|
||||||
fd - used passed file descriptors for connection
|
fd - used passed file descriptors for connection
|
||||||
(see rfdno and wfdno)
|
(see rfdno and wfdno)
|
||||||
virtio - connect to the next virtio channel available
|
virtio - connect to the next virtio channel available
|
||||||
(from lguest or KVM with trans_virtio module)
|
(from QEMU with trans_virtio module)
|
||||||
rdma - connect to a specified RDMA channel
|
rdma - connect to a specified RDMA channel
|
||||||
|
|
||||||
uname=name user name to attempt mount as on the remote server. The
|
uname=name user name to attempt mount as on the remote server. The
|
||||||
|
@ -85,7 +94,12 @@ OPTIONS
|
||||||
|
|
||||||
port=n port to connect to on the remote server
|
port=n port to connect to on the remote server
|
||||||
|
|
||||||
noextend force legacy mode (no 9p2000.u semantics)
|
noextend force legacy mode (no 9p2000.u or 9p2000.L semantics)
|
||||||
|
|
||||||
|
version=name Select 9P protocol version. Valid options are:
|
||||||
|
9p2000 - Legacy mode (same as noextend)
|
||||||
|
9p2000.u - Use 9P2000.u protocol
|
||||||
|
9p2000.L - Use 9P2000.L protocol
|
||||||
|
|
||||||
dfltuid attempt to mount as a particular uid
|
dfltuid attempt to mount as a particular uid
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,143 @@
|
||||||
|
STMicroelectronics 10/100/1000 Synopsys Ethernet driver
|
||||||
|
|
||||||
|
Copyright (C) 2007-2010 STMicroelectronics Ltd
|
||||||
|
Author: Giuseppe Cavallaro <peppe.cavallaro@st.com>
|
||||||
|
|
||||||
|
This is the driver for the MAC 10/100/1000 on-chip Ethernet controllers
|
||||||
|
(Synopsys IP blocks); it has been fully tested on STLinux platforms.
|
||||||
|
|
||||||
|
Currently this network device driver is for all STM embedded MAC/GMAC
|
||||||
|
(7xxx SoCs).
|
||||||
|
|
||||||
|
DWC Ether MAC 10/100/1000 Universal version 3.41a and DWC Ether MAC 10/100
|
||||||
|
Universal version 4.0 have been used for developing the first code
|
||||||
|
implementation.
|
||||||
|
|
||||||
|
Please, for more information also visit: www.stlinux.com
|
||||||
|
|
||||||
|
1) Kernel Configuration
|
||||||
|
The kernel configuration option is STMMAC_ETH:
|
||||||
|
Device Drivers ---> Network device support ---> Ethernet (1000 Mbit) --->
|
||||||
|
STMicroelectronics 10/100/1000 Ethernet driver (STMMAC_ETH)
|
||||||
|
|
||||||
|
2) Driver parameters list:
|
||||||
|
debug: message level (0: no output, 16: all);
|
||||||
|
phyaddr: to manually provide the physical address to the PHY device;
|
||||||
|
dma_rxsize: DMA rx ring size;
|
||||||
|
dma_txsize: DMA tx ring size;
|
||||||
|
buf_sz: DMA buffer size;
|
||||||
|
tc: control the HW FIFO threshold;
|
||||||
|
tx_coe: Enable/Disable Tx Checksum Offload engine;
|
||||||
|
watchdog: transmit timeout (in milliseconds);
|
||||||
|
flow_ctrl: Flow control ability [on/off];
|
||||||
|
pause: Flow Control Pause Time;
|
||||||
|
tmrate: timer period (only if timer optimisation is configured).
|
||||||
|
|
||||||
|
3) Command line options
|
||||||
|
Driver parameters can be also passed in command line by using:
|
||||||
|
stmmaceth=dma_rxsize:128,dma_txsize:512
|
||||||
|
|
||||||
|
4) Driver information and notes
|
||||||
|
|
||||||
|
4.1) Transmit process
|
||||||
|
The xmit method is invoked when the kernel needs to transmit a packet; it sets
|
||||||
|
the descriptors in the ring and informs the DMA engine that there is a packet
|
||||||
|
ready to be transmitted.
|
||||||
|
Once the controller has finished transmitting the packet, an interrupt is
|
||||||
|
triggered; So the driver will be able to release the socket buffers.
|
||||||
|
By default, the driver sets the NETIF_F_SG bit in the features field of the
|
||||||
|
net_device structure enabling the scatter/gather feature.
|
||||||
|
|
||||||
|
4.2) Receive process
|
||||||
|
When one or more packets are received, an interrupt happens. The interrupts
|
||||||
|
are not queued so the driver has to scan all the descriptors in the ring during
|
||||||
|
the receive process.
|
||||||
|
This is based on NAPI so the interrupt handler signals only if there is work to be
|
||||||
|
done, and it exits.
|
||||||
|
Then the poll method will be scheduled at some future point.
|
||||||
|
The incoming packets are stored, by the DMA, in a list of pre-allocated socket
|
||||||
|
buffers in order to avoid the memcpy (Zero-copy).
|
||||||
|
|
||||||
|
4.3) Timer-Driver Interrupt
|
||||||
|
Instead of having the device that asynchronously notifies the frame receptions, the
|
||||||
|
driver configures a timer to generate an interrupt at regular intervals.
|
||||||
|
Based on the granularity of the timer, the frames that are received by the device
|
||||||
|
will experience different levels of latency. Some NICs have dedicated timer
|
||||||
|
device to perform this task. STMMAC can use either the RTC device or the TMU
|
||||||
|
channel 2 on STLinux platforms.
|
||||||
|
The timers frequency can be passed to the driver as parameter; when change it,
|
||||||
|
take care of both hardware capability and network stability/performance impact.
|
||||||
|
Several performance tests on STM platforms showed this optimisation allows to spare
|
||||||
|
the CPU while having the maximum throughput.
|
||||||
|
|
||||||
|
4.4) WOL
|
||||||
|
Wake up on Lan feature through Magic Frame is only supported for the GMAC
|
||||||
|
core.
|
||||||
|
|
||||||
|
4.5) DMA descriptors
|
||||||
|
Driver handles both normal and enhanced descriptors. The latter has been only
|
||||||
|
tested on DWC Ether MAC 10/100/1000 Universal version 3.41a.
|
||||||
|
|
||||||
|
4.6) Ethtool support
|
||||||
|
Ethtool is supported. Driver statistics and internal errors can be taken using:
|
||||||
|
ethtool -S ethX command. It is possible to dump registers etc.
|
||||||
|
|
||||||
|
4.7) Jumbo and Segmentation Offloading
|
||||||
|
Jumbo frames are supported and tested for the GMAC.
|
||||||
|
The GSO has been also added but it's performed in software.
|
||||||
|
LRO is not supported.
|
||||||
|
|
||||||
|
4.8) Physical
|
||||||
|
The driver is compatible with PAL to work with PHY and GPHY devices.
|
||||||
|
|
||||||
|
4.9) Platform information
|
||||||
|
Several information came from the platform; please refer to the
|
||||||
|
driver's Header file in include/linux directory.
|
||||||
|
|
||||||
|
struct plat_stmmacenet_data {
|
||||||
|
int bus_id;
|
||||||
|
int pbl;
|
||||||
|
int has_gmac;
|
||||||
|
void (*fix_mac_speed)(void *priv, unsigned int speed);
|
||||||
|
void (*bus_setup)(unsigned long ioaddr);
|
||||||
|
#ifdef CONFIG_STM_DRIVERS
|
||||||
|
struct stm_pad_config *pad_config;
|
||||||
|
#endif
|
||||||
|
void *bsp_priv;
|
||||||
|
};
|
||||||
|
|
||||||
|
Where:
|
||||||
|
- pbl (Programmable Burst Length) is maximum number of
|
||||||
|
beats to be transferred in one DMA transaction.
|
||||||
|
GMAC also enables the 4xPBL by default.
|
||||||
|
- fix_mac_speed and bus_setup are used to configure internal target
|
||||||
|
registers (on STM platforms);
|
||||||
|
- has_gmac: GMAC core is on board (get it at run-time in the next step);
|
||||||
|
- bus_id: bus identifier.
|
||||||
|
|
||||||
|
struct plat_stmmacphy_data {
|
||||||
|
int bus_id;
|
||||||
|
int phy_addr;
|
||||||
|
unsigned int phy_mask;
|
||||||
|
int interface;
|
||||||
|
int (*phy_reset)(void *priv);
|
||||||
|
void *priv;
|
||||||
|
};
|
||||||
|
|
||||||
|
Where:
|
||||||
|
- bus_id: bus identifier;
|
||||||
|
- phy_addr: physical address used for the attached phy device;
|
||||||
|
set it to -1 to get it at run-time;
|
||||||
|
- interface: physical MII interface mode;
|
||||||
|
- phy_reset: hook to reset HW function.
|
||||||
|
|
||||||
|
TODO:
|
||||||
|
- Continue to make the driver more generic and suitable for other Synopsys
|
||||||
|
Ethernet controllers used on other architectures (i.e. ARM).
|
||||||
|
- 10G controllers are not supported.
|
||||||
|
- MAC uses Normal descriptors and GMAC uses enhanced ones.
|
||||||
|
This is a limit that should be reviewed. MAC could want to
|
||||||
|
use the enhanced structure.
|
||||||
|
- Checksumming: Rx/Tx csum is done in HW in case of GMAC only.
|
||||||
|
- Review the timer optimisation code to use an embedded device that seems to be
|
||||||
|
available in new chip generations.
|
|
@ -21,6 +21,15 @@ Required properties:
|
||||||
- fsl,qe-num-snums: define how many serial number(SNUM) the QE can use for the
|
- fsl,qe-num-snums: define how many serial number(SNUM) the QE can use for the
|
||||||
threads.
|
threads.
|
||||||
|
|
||||||
|
Optional properties:
|
||||||
|
- fsl,firmware-phandle:
|
||||||
|
Usage: required only if there is no fsl,qe-firmware child node
|
||||||
|
Value type: <phandle>
|
||||||
|
Definition: Points to a firmware node (see "QE Firmware Node" below)
|
||||||
|
that contains the firmware that should be uploaded for this QE.
|
||||||
|
The compatible property for the firmware node should say,
|
||||||
|
"fsl,qe-firmware".
|
||||||
|
|
||||||
Recommended properties
|
Recommended properties
|
||||||
- brg-frequency : the internal clock source frequency for baud-rate
|
- brg-frequency : the internal clock source frequency for baud-rate
|
||||||
generators in Hz.
|
generators in Hz.
|
||||||
|
@ -59,3 +68,48 @@ Example:
|
||||||
reg = <0 c000>;
|
reg = <0 c000>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
* QE Firmware Node
|
||||||
|
|
||||||
|
This node defines a firmware binary that is embedded in the device tree, for
|
||||||
|
the purpose of passing the firmware from bootloader to the kernel, or from
|
||||||
|
the hypervisor to the guest.
|
||||||
|
|
||||||
|
The firmware node itself contains the firmware binary contents, a compatible
|
||||||
|
property, and any firmware-specific properties. The node should be placed
|
||||||
|
inside a QE node that needs it. Doing so eliminates the need for a
|
||||||
|
fsl,firmware-phandle property. Other QE nodes that need the same firmware
|
||||||
|
should define an fsl,firmware-phandle property that points to the firmware node
|
||||||
|
in the first QE node.
|
||||||
|
|
||||||
|
The fsl,firmware property can be specified in the DTS (possibly using incbin)
|
||||||
|
or can be inserted by the boot loader at boot time.
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
- compatible
|
||||||
|
Usage: required
|
||||||
|
Value type: <string>
|
||||||
|
Definition: A standard property. Specify a string that indicates what
|
||||||
|
kind of firmware it is. For QE, this should be "fsl,qe-firmware".
|
||||||
|
|
||||||
|
- fsl,firmware
|
||||||
|
Usage: required
|
||||||
|
Value type: <prop-encoded-array>, encoded as an array of bytes
|
||||||
|
Definition: A standard property. This property contains the firmware
|
||||||
|
binary "blob".
|
||||||
|
|
||||||
|
Example:
|
||||||
|
qe1@e0080000 {
|
||||||
|
compatible = "fsl,qe";
|
||||||
|
qe_firmware:qe-firmware {
|
||||||
|
compatible = "fsl,qe-firmware";
|
||||||
|
fsl,firmware = [0x70 0xcd 0x00 0x00 0x01 0x46 0x45 ...];
|
||||||
|
};
|
||||||
|
...
|
||||||
|
};
|
||||||
|
|
||||||
|
qe2@e0090000 {
|
||||||
|
compatible = "fsl,qe";
|
||||||
|
fsl,firmware-phandle = <&qe_firmware>;
|
||||||
|
...
|
||||||
|
};
|
||||||
|
|
|
@ -119,10 +119,18 @@ the codec slots 0 and 1 no matter what the hardware reports.
|
||||||
|
|
||||||
Interrupt Handling
|
Interrupt Handling
|
||||||
~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~
|
||||||
In rare but some cases, the interrupt isn't properly handled as
|
HD-audio driver uses MSI as default (if available) since 2.6.33
|
||||||
default. You would notice this by the DMA transfer error reported by
|
kernel as MSI works better on some machines, and in general, it's
|
||||||
ALSA PCM core, for example. Using MSI might help in such a case.
|
better for performance. However, Nvidia controllers showed bad
|
||||||
Pass `enable_msi=1` option for enabling MSI.
|
regressions with MSI (especially in a combination with AMD chipset),
|
||||||
|
thus we disabled MSI for them.
|
||||||
|
|
||||||
|
There seem also still other devices that don't work with MSI. If you
|
||||||
|
see a regression wrt the sound quality (stuttering, etc) or a lock-up
|
||||||
|
in the recent kernel, try to pass `enable_msi=0` option to disable
|
||||||
|
MSI. If it works, you can add the known bad device to the blacklist
|
||||||
|
defined in hda_intel.c. In such a case, please report and give the
|
||||||
|
patch back to the upstream developer.
|
||||||
|
|
||||||
|
|
||||||
HD-AUDIO CODEC
|
HD-AUDIO CODEC
|
||||||
|
|
|
@ -17,9 +17,6 @@ int main(void)
|
||||||
ret = -1;
|
ret = -1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
ret = fsync(fd);
|
|
||||||
if (ret)
|
|
||||||
break;
|
|
||||||
sleep(10);
|
sleep(10);
|
||||||
}
|
}
|
||||||
close(fd);
|
close(fd);
|
||||||
|
|
|
@ -31,6 +31,8 @@ static void keep_alive(void)
|
||||||
*/
|
*/
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
|
int flags;
|
||||||
|
|
||||||
fd = open("/dev/watchdog", O_WRONLY);
|
fd = open("/dev/watchdog", O_WRONLY);
|
||||||
|
|
||||||
if (fd == -1) {
|
if (fd == -1) {
|
||||||
|
@ -41,12 +43,14 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
if (argc > 1) {
|
if (argc > 1) {
|
||||||
if (!strncasecmp(argv[1], "-d", 2)) {
|
if (!strncasecmp(argv[1], "-d", 2)) {
|
||||||
ioctl(fd, WDIOC_SETOPTIONS, WDIOS_DISABLECARD);
|
flags = WDIOS_DISABLECARD;
|
||||||
|
ioctl(fd, WDIOC_SETOPTIONS, &flags);
|
||||||
fprintf(stderr, "Watchdog card disabled.\n");
|
fprintf(stderr, "Watchdog card disabled.\n");
|
||||||
fflush(stderr);
|
fflush(stderr);
|
||||||
exit(0);
|
exit(0);
|
||||||
} else if (!strncasecmp(argv[1], "-e", 2)) {
|
} else if (!strncasecmp(argv[1], "-e", 2)) {
|
||||||
ioctl(fd, WDIOC_SETOPTIONS, WDIOS_ENABLECARD);
|
flags = WDIOS_ENABLECARD;
|
||||||
|
ioctl(fd, WDIOC_SETOPTIONS, &flags);
|
||||||
fprintf(stderr, "Watchdog card enabled.\n");
|
fprintf(stderr, "Watchdog card enabled.\n");
|
||||||
fflush(stderr);
|
fflush(stderr);
|
||||||
exit(0);
|
exit(0);
|
||||||
|
|
|
@ -222,11 +222,10 @@ returned value is the temperature in degrees fahrenheit.
|
||||||
ioctl(fd, WDIOC_GETTEMP, &temperature);
|
ioctl(fd, WDIOC_GETTEMP, &temperature);
|
||||||
|
|
||||||
Finally the SETOPTIONS ioctl can be used to control some aspects of
|
Finally the SETOPTIONS ioctl can be used to control some aspects of
|
||||||
the cards operation; right now the pcwd driver is the only one
|
the cards operation.
|
||||||
supporting this ioctl.
|
|
||||||
|
|
||||||
int options = 0;
|
int options = 0;
|
||||||
ioctl(fd, WDIOC_SETOPTIONS, options);
|
ioctl(fd, WDIOC_SETOPTIONS, &options);
|
||||||
|
|
||||||
The following options are available:
|
The following options are available:
|
||||||
|
|
||||||
|
|
23
MAINTAINERS
23
MAINTAINERS
|
@ -971,6 +971,16 @@ L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
W: http://www.mcuos.com
|
W: http://www.mcuos.com
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
|
ARM/U300 MACHINE SUPPORT
|
||||||
|
M: Linus Walleij <linus.walleij@stericsson.com>
|
||||||
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
|
S: Supported
|
||||||
|
F: arch/arm/mach-u300/
|
||||||
|
F: drivers/i2c/busses/i2c-stu300.c
|
||||||
|
F: drivers/rtc/rtc-coh901331.c
|
||||||
|
F: drivers/watchdog/coh901327_wdt.c
|
||||||
|
F: drivers/dma/coh901318*
|
||||||
|
|
||||||
ARM/U8500 ARM ARCHITECTURE
|
ARM/U8500 ARM ARCHITECTURE
|
||||||
M: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com>
|
M: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com>
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
|
@ -2474,12 +2484,6 @@ L: linuxppc-dev@ozlabs.org
|
||||||
S: Odd Fixes
|
S: Odd Fixes
|
||||||
F: drivers/char/hvc_*
|
F: drivers/char/hvc_*
|
||||||
|
|
||||||
VIRTIO CONSOLE DRIVER
|
|
||||||
M: Amit Shah <amit.shah@redhat.com>
|
|
||||||
L: virtualization@lists.linux-foundation.org
|
|
||||||
S: Maintained
|
|
||||||
F: drivers/char/virtio_console.c
|
|
||||||
|
|
||||||
iSCSI BOOT FIRMWARE TABLE (iBFT) DRIVER
|
iSCSI BOOT FIRMWARE TABLE (iBFT) DRIVER
|
||||||
M: Peter Jones <pjones@redhat.com>
|
M: Peter Jones <pjones@redhat.com>
|
||||||
M: Konrad Rzeszutek Wilk <konrad@kernel.org>
|
M: Konrad Rzeszutek Wilk <konrad@kernel.org>
|
||||||
|
@ -5971,6 +5975,13 @@ S: Maintained
|
||||||
F: Documentation/filesystems/vfat.txt
|
F: Documentation/filesystems/vfat.txt
|
||||||
F: fs/fat/
|
F: fs/fat/
|
||||||
|
|
||||||
|
VIRTIO CONSOLE DRIVER
|
||||||
|
M: Amit Shah <amit.shah@redhat.com>
|
||||||
|
L: virtualization@lists.linux-foundation.org
|
||||||
|
S: Maintained
|
||||||
|
F: drivers/char/virtio_console.c
|
||||||
|
F: include/linux/virtio_console.h
|
||||||
|
|
||||||
VIRTIO HOST (VHOST)
|
VIRTIO HOST (VHOST)
|
||||||
M: "Michael S. Tsirkin" <mst@redhat.com>
|
M: "Michael S. Tsirkin" <mst@redhat.com>
|
||||||
L: kvm@vger.kernel.org
|
L: kvm@vger.kernel.org
|
||||||
|
|
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
||||||
VERSION = 2
|
VERSION = 2
|
||||||
PATCHLEVEL = 6
|
PATCHLEVEL = 6
|
||||||
SUBLEVEL = 34
|
SUBLEVEL = 34
|
||||||
EXTRAVERSION = -rc3
|
EXTRAVERSION = -rc4
|
||||||
NAME = Man-Eating Seals of Antiquity
|
NAME = Man-Eating Seals of Antiquity
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
* based significantly on the arch/alpha/boot/main.c of Linus Torvalds
|
* based significantly on the arch/alpha/boot/main.c of Linus Torvalds
|
||||||
*/
|
*/
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/slab.h>
|
||||||
#include <linux/string.h>
|
#include <linux/string.h>
|
||||||
#include <generated/utsrelease.h>
|
#include <generated/utsrelease.h>
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
* and the decompression code from MILO.
|
* and the decompression code from MILO.
|
||||||
*/
|
*/
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/slab.h>
|
||||||
#include <linux/string.h>
|
#include <linux/string.h>
|
||||||
#include <generated/utsrelease.h>
|
#include <generated/utsrelease.h>
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
* This file is the bootloader for the Linux/AXP kernel
|
* This file is the bootloader for the Linux/AXP kernel
|
||||||
*/
|
*/
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/slab.h>
|
||||||
#include <linux/string.h>
|
#include <linux/string.h>
|
||||||
#include <generated/utsrelease.h>
|
#include <generated/utsrelease.h>
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/slab.h>
|
||||||
|
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,6 @@
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
#include <linux/ptrace.h>
|
#include <linux/ptrace.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/slab.h>
|
|
||||||
#include <linux/random.h>
|
#include <linux/random.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
|
|
|
@ -20,7 +20,6 @@
|
||||||
#include <linux/syscalls.h>
|
#include <linux/syscalls.h>
|
||||||
#include <linux/unistd.h>
|
#include <linux/unistd.h>
|
||||||
#include <linux/ptrace.h>
|
#include <linux/ptrace.h>
|
||||||
#include <linux/slab.h>
|
|
||||||
#include <linux/user.h>
|
#include <linux/user.h>
|
||||||
#include <linux/utsname.h>
|
#include <linux/utsname.h>
|
||||||
#include <linux/time.h>
|
#include <linux/time.h>
|
||||||
|
@ -37,6 +36,7 @@
|
||||||
#include <linux/uio.h>
|
#include <linux/uio.h>
|
||||||
#include <linux/vfs.h>
|
#include <linux/vfs.h>
|
||||||
#include <linux/rcupdate.h>
|
#include <linux/rcupdate.h>
|
||||||
|
#include <linux/slab.h>
|
||||||
|
|
||||||
#include <asm/fpu.h>
|
#include <asm/fpu.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/bootmem.h>
|
#include <linux/bootmem.h>
|
||||||
|
#include <linux/gfp.h>
|
||||||
#include <linux/capability.h>
|
#include <linux/capability.h>
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
#include <linux/errno.h>
|
#include <linux/errno.h>
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
|
#include <linux/slab.h>
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
|
|
||||||
static int hose_mmap_page_range(struct pci_controller *hose,
|
static int hose_mmap_page_range(struct pci_controller *hose,
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/gfp.h>
|
||||||
#include <linux/bootmem.h>
|
#include <linux/bootmem.h>
|
||||||
#include <linux/scatterlist.h>
|
#include <linux/scatterlist.h>
|
||||||
#include <linux/log2.h>
|
#include <linux/log2.h>
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
#include <linux/stddef.h>
|
#include <linux/stddef.h>
|
||||||
#include <linux/unistd.h>
|
#include <linux/unistd.h>
|
||||||
#include <linux/ptrace.h>
|
#include <linux/ptrace.h>
|
||||||
#include <linux/slab.h>
|
|
||||||
#include <linux/user.h>
|
#include <linux/user.h>
|
||||||
#include <linux/time.h>
|
#include <linux/time.h>
|
||||||
#include <linux/major.h>
|
#include <linux/major.h>
|
||||||
|
@ -28,6 +27,7 @@
|
||||||
#include <linux/reboot.h>
|
#include <linux/reboot.h>
|
||||||
#include <linux/tty.h>
|
#include <linux/tty.h>
|
||||||
#include <linux/console.h>
|
#include <linux/console.h>
|
||||||
|
#include <linux/slab.h>
|
||||||
|
|
||||||
#include <asm/reg.h>
|
#include <asm/reg.h>
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
|
|
|
@ -11,7 +11,6 @@
|
||||||
#include <linux/errno.h>
|
#include <linux/errno.h>
|
||||||
#include <linux/ptrace.h>
|
#include <linux/ptrace.h>
|
||||||
#include <linux/user.h>
|
#include <linux/user.h>
|
||||||
#include <linux/slab.h>
|
|
||||||
#include <linux/security.h>
|
#include <linux/security.h>
|
||||||
#include <linux/signal.h>
|
#include <linux/signal.h>
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
*/
|
*/
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
|
|
||||||
#include <linux/slab.h>
|
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
|
|
|
@ -4,7 +4,6 @@
|
||||||
|
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
|
|
||||||
#include <linux/slab.h>
|
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/gfp.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/proc_fs.h>
|
#include <linux/proc_fs.h>
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/bootmem.h> /* max_low_pfn */
|
#include <linux/bootmem.h> /* max_low_pfn */
|
||||||
#include <linux/vmalloc.h>
|
#include <linux/vmalloc.h>
|
||||||
|
#include <linux/gfp.h>
|
||||||
|
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
|
|
|
@ -172,7 +172,7 @@ not_angel:
|
||||||
adr r0, LC0
|
adr r0, LC0
|
||||||
ARM( ldmia r0, {r1, r2, r3, r4, r5, r6, r11, ip, sp})
|
ARM( ldmia r0, {r1, r2, r3, r4, r5, r6, r11, ip, sp})
|
||||||
THUMB( ldmia r0, {r1, r2, r3, r4, r5, r6, r11, ip} )
|
THUMB( ldmia r0, {r1, r2, r3, r4, r5, r6, r11, ip} )
|
||||||
THUMB( ldr sp, [r0, #28] )
|
THUMB( ldr sp, [r0, #32] )
|
||||||
subs r0, r0, r1 @ calculate the delta offset
|
subs r0, r0, r1 @ calculate the delta offset
|
||||||
|
|
||||||
@ if delta is zero, we are
|
@ if delta is zero, we are
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include <linux/string.h>
|
#include <linux/string.h>
|
||||||
#include <linux/mutex.h>
|
#include <linux/mutex.h>
|
||||||
#include <linux/clk.h>
|
#include <linux/clk.h>
|
||||||
|
#include <linux/slab.h>
|
||||||
|
|
||||||
#include <asm/clkdev.h>
|
#include <asm/clkdev.h>
|
||||||
#include <mach/clkdev.h>
|
#include <mach/clkdev.h>
|
||||||
|
|
|
@ -21,7 +21,6 @@
|
||||||
#include <linux/ptrace.h>
|
#include <linux/ptrace.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
#include <linux/slab.h>
|
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/ioport.h>
|
#include <linux/ioport.h>
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
#include <asm/glue.h>
|
#include <asm/glue.h>
|
||||||
#include <asm/shmparam.h>
|
#include <asm/shmparam.h>
|
||||||
#include <asm/cachetype.h>
|
#include <asm/cachetype.h>
|
||||||
|
#include <asm/outercache.h>
|
||||||
|
|
||||||
#define CACHE_COLOUR(vaddr) ((vaddr & (SHMLBA - 1)) >> PAGE_SHIFT)
|
#define CACHE_COLOUR(vaddr) ((vaddr & (SHMLBA - 1)) >> PAGE_SHIFT)
|
||||||
|
|
||||||
|
@ -219,12 +220,6 @@ struct cpu_cache_fns {
|
||||||
void (*dma_flush_range)(const void *, const void *);
|
void (*dma_flush_range)(const void *, const void *);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct outer_cache_fns {
|
|
||||||
void (*inv_range)(unsigned long, unsigned long);
|
|
||||||
void (*clean_range)(unsigned long, unsigned long);
|
|
||||||
void (*flush_range)(unsigned long, unsigned long);
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Select the calling method
|
* Select the calling method
|
||||||
*/
|
*/
|
||||||
|
@ -281,37 +276,6 @@ extern void dmac_flush_range(const void *, const void *);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_OUTER_CACHE
|
|
||||||
|
|
||||||
extern struct outer_cache_fns outer_cache;
|
|
||||||
|
|
||||||
static inline void outer_inv_range(unsigned long start, unsigned long end)
|
|
||||||
{
|
|
||||||
if (outer_cache.inv_range)
|
|
||||||
outer_cache.inv_range(start, end);
|
|
||||||
}
|
|
||||||
static inline void outer_clean_range(unsigned long start, unsigned long end)
|
|
||||||
{
|
|
||||||
if (outer_cache.clean_range)
|
|
||||||
outer_cache.clean_range(start, end);
|
|
||||||
}
|
|
||||||
static inline void outer_flush_range(unsigned long start, unsigned long end)
|
|
||||||
{
|
|
||||||
if (outer_cache.flush_range)
|
|
||||||
outer_cache.flush_range(start, end);
|
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
static inline void outer_inv_range(unsigned long start, unsigned long end)
|
|
||||||
{ }
|
|
||||||
static inline void outer_clean_range(unsigned long start, unsigned long end)
|
|
||||||
{ }
|
|
||||||
static inline void outer_flush_range(unsigned long start, unsigned long end)
|
|
||||||
{ }
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copy user data from/to a page which is mapped into a different
|
* Copy user data from/to a page which is mapped into a different
|
||||||
* processes address space. Really, we want to allow our "user
|
* processes address space. Really, we want to allow our "user
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
#define __ASM_CLKDEV_H
|
#define __ASM_CLKDEV_H
|
||||||
|
|
||||||
struct clk;
|
struct clk;
|
||||||
|
struct device;
|
||||||
|
|
||||||
struct clk_lookup {
|
struct clk_lookup {
|
||||||
struct list_head node;
|
struct list_head node;
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
struct irqaction;
|
struct irqaction;
|
||||||
|
struct pt_regs;
|
||||||
extern void migrate_irqs(void);
|
extern void migrate_irqs(void);
|
||||||
|
|
||||||
extern void asm_do_IRQ(unsigned int, struct pt_regs *);
|
extern void asm_do_IRQ(unsigned int, struct pt_regs *);
|
||||||
|
|
|
@ -0,0 +1,75 @@
|
||||||
|
/*
|
||||||
|
* arch/arm/include/asm/outercache.h
|
||||||
|
*
|
||||||
|
* Copyright (C) 2010 ARM Ltd.
|
||||||
|
* Written by Catalin Marinas <catalin.marinas@arm.com>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __ASM_OUTERCACHE_H
|
||||||
|
#define __ASM_OUTERCACHE_H
|
||||||
|
|
||||||
|
struct outer_cache_fns {
|
||||||
|
void (*inv_range)(unsigned long, unsigned long);
|
||||||
|
void (*clean_range)(unsigned long, unsigned long);
|
||||||
|
void (*flush_range)(unsigned long, unsigned long);
|
||||||
|
#ifdef CONFIG_OUTER_CACHE_SYNC
|
||||||
|
void (*sync)(void);
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef CONFIG_OUTER_CACHE
|
||||||
|
|
||||||
|
extern struct outer_cache_fns outer_cache;
|
||||||
|
|
||||||
|
static inline void outer_inv_range(unsigned long start, unsigned long end)
|
||||||
|
{
|
||||||
|
if (outer_cache.inv_range)
|
||||||
|
outer_cache.inv_range(start, end);
|
||||||
|
}
|
||||||
|
static inline void outer_clean_range(unsigned long start, unsigned long end)
|
||||||
|
{
|
||||||
|
if (outer_cache.clean_range)
|
||||||
|
outer_cache.clean_range(start, end);
|
||||||
|
}
|
||||||
|
static inline void outer_flush_range(unsigned long start, unsigned long end)
|
||||||
|
{
|
||||||
|
if (outer_cache.flush_range)
|
||||||
|
outer_cache.flush_range(start, end);
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
static inline void outer_inv_range(unsigned long start, unsigned long end)
|
||||||
|
{ }
|
||||||
|
static inline void outer_clean_range(unsigned long start, unsigned long end)
|
||||||
|
{ }
|
||||||
|
static inline void outer_flush_range(unsigned long start, unsigned long end)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_OUTER_CACHE_SYNC
|
||||||
|
static inline void outer_sync(void)
|
||||||
|
{
|
||||||
|
if (outer_cache.sync)
|
||||||
|
outer_cache.sync();
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static inline void outer_sync(void)
|
||||||
|
{ }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __ASM_OUTERCACHE_H */
|
|
@ -60,6 +60,8 @@
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
#include <linux/irqflags.h>
|
#include <linux/irqflags.h>
|
||||||
|
|
||||||
|
#include <asm/outercache.h>
|
||||||
|
|
||||||
#define __exception __attribute__((section(".exception.text")))
|
#define __exception __attribute__((section(".exception.text")))
|
||||||
|
|
||||||
struct thread_info;
|
struct thread_info;
|
||||||
|
@ -137,10 +139,12 @@ extern unsigned int user_debug;
|
||||||
#define dmb() __asm__ __volatile__ ("" : : : "memory")
|
#define dmb() __asm__ __volatile__ ("" : : : "memory")
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if __LINUX_ARM_ARCH__ >= 7 || defined(CONFIG_SMP)
|
#ifdef CONFIG_ARCH_HAS_BARRIERS
|
||||||
#define mb() dmb()
|
#include <mach/barriers.h>
|
||||||
|
#elif __LINUX_ARM_ARCH__ >= 7 || defined(CONFIG_SMP)
|
||||||
|
#define mb() do { dsb(); outer_sync(); } while (0)
|
||||||
#define rmb() dmb()
|
#define rmb() dmb()
|
||||||
#define wmb() dmb()
|
#define wmb() mb()
|
||||||
#else
|
#else
|
||||||
#define mb() do { if (arch_is_coherent()) dmb(); else barrier(); } while (0)
|
#define mb() do { if (arch_is_coherent()) dmb(); else barrier(); } while (0)
|
||||||
#define rmb() do { if (arch_is_coherent()) dmb(); else barrier(); } while (0)
|
#define rmb() do { if (arch_is_coherent()) dmb(); else barrier(); } while (0)
|
||||||
|
@ -152,9 +156,9 @@ extern unsigned int user_debug;
|
||||||
#define smp_rmb() barrier()
|
#define smp_rmb() barrier()
|
||||||
#define smp_wmb() barrier()
|
#define smp_wmb() barrier()
|
||||||
#else
|
#else
|
||||||
#define smp_mb() mb()
|
#define smp_mb() dmb()
|
||||||
#define smp_rmb() rmb()
|
#define smp_rmb() dmb()
|
||||||
#define smp_wmb() wmb()
|
#define smp_wmb() dmb()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define read_barrier_depends() do { } while(0)
|
#define read_barrier_depends() do { } while(0)
|
||||||
|
|
|
@ -27,7 +27,6 @@
|
||||||
#include <linux/ioport.h>
|
#include <linux/ioport.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
#include <linux/slab.h>
|
|
||||||
#include <linux/random.h>
|
#include <linux/random.h>
|
||||||
#include <linux/smp.h>
|
#include <linux/smp.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/kprobes.h>
|
#include <linux/kprobes.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
|
#include <linux/slab.h>
|
||||||
#include <linux/stop_machine.h>
|
#include <linux/stop_machine.h>
|
||||||
#include <linux/stringify.h>
|
#include <linux/stringify.h>
|
||||||
#include <asm/traps.h>
|
#include <asm/traps.h>
|
||||||
|
@ -393,6 +394,14 @@ void __kprobes jprobe_return(void)
|
||||||
/*
|
/*
|
||||||
* Setup an empty pt_regs. Fill SP and PC fields as
|
* Setup an empty pt_regs. Fill SP and PC fields as
|
||||||
* they're needed by longjmp_break_handler.
|
* they're needed by longjmp_break_handler.
|
||||||
|
*
|
||||||
|
* We allocate some slack between the original SP and start of
|
||||||
|
* our fabricated regs. To be precise we want to have worst case
|
||||||
|
* covered which is STMFD with all 16 regs so we allocate 2 *
|
||||||
|
* sizeof(struct_pt_regs)).
|
||||||
|
*
|
||||||
|
* This is to prevent any simulated instruction from writing
|
||||||
|
* over the regs when they are accessing the stack.
|
||||||
*/
|
*/
|
||||||
"sub sp, %0, %1 \n\t"
|
"sub sp, %0, %1 \n\t"
|
||||||
"ldr r0, ="__stringify(JPROBE_MAGIC_ADDR)"\n\t"
|
"ldr r0, ="__stringify(JPROBE_MAGIC_ADDR)"\n\t"
|
||||||
|
@ -410,7 +419,7 @@ void __kprobes jprobe_return(void)
|
||||||
"ldmia sp, {r0 - pc} \n\t"
|
"ldmia sp, {r0 - pc} \n\t"
|
||||||
:
|
:
|
||||||
: "r" (kcb->jprobe_saved_regs.ARM_sp),
|
: "r" (kcb->jprobe_saved_regs.ARM_sp),
|
||||||
"I" (sizeof(struct pt_regs)),
|
"I" (sizeof(struct pt_regs) * 2),
|
||||||
"J" (offsetof(struct pt_regs, ARM_sp)),
|
"J" (offsetof(struct pt_regs, ARM_sp)),
|
||||||
"J" (offsetof(struct pt_regs, ARM_pc)),
|
"J" (offsetof(struct pt_regs, ARM_pc)),
|
||||||
"J" (offsetof(struct pt_regs, ARM_cpsr))
|
"J" (offsetof(struct pt_regs, ARM_cpsr))
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
#include <linux/elf.h>
|
#include <linux/elf.h>
|
||||||
#include <linux/vmalloc.h>
|
#include <linux/vmalloc.h>
|
||||||
#include <linux/slab.h>
|
|
||||||
#include <linux/fs.h>
|
#include <linux/fs.h>
|
||||||
#include <linux/string.h>
|
#include <linux/string.h>
|
||||||
|
#include <linux/gfp.h>
|
||||||
|
|
||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
#include <asm/sections.h>
|
#include <asm/sections.h>
|
||||||
|
|
|
@ -16,7 +16,6 @@
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
#include <linux/stddef.h>
|
#include <linux/stddef.h>
|
||||||
#include <linux/unistd.h>
|
#include <linux/unistd.h>
|
||||||
#include <linux/slab.h>
|
|
||||||
#include <linux/user.h>
|
#include <linux/user.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/reboot.h>
|
#include <linux/reboot.h>
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/errno.h>
|
#include <linux/errno.h>
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
#include <linux/slab.h>
|
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
#include <linux/sem.h>
|
#include <linux/sem.h>
|
||||||
#include <linux/msg.h>
|
#include <linux/msg.h>
|
||||||
|
@ -27,6 +26,7 @@
|
||||||
#include <linux/file.h>
|
#include <linux/file.h>
|
||||||
#include <linux/ipc.h>
|
#include <linux/ipc.h>
|
||||||
#include <linux/uaccess.h>
|
#include <linux/uaccess.h>
|
||||||
|
#include <linux/slab.h>
|
||||||
|
|
||||||
/* Fork a new task - this creates a new program thread.
|
/* Fork a new task - this creates a new program thread.
|
||||||
* This is called indirectly via a small wrapper
|
* This is called indirectly via a small wrapper
|
||||||
|
|
|
@ -74,7 +74,7 @@ ENTRY(memmove)
|
||||||
rsb ip, ip, #32
|
rsb ip, ip, #32
|
||||||
addne pc, pc, ip @ C is always clear here
|
addne pc, pc, ip @ C is always clear here
|
||||||
b 7f
|
b 7f
|
||||||
6: nop
|
6: W(nop)
|
||||||
W(ldr) r3, [r1, #-4]!
|
W(ldr) r3, [r1, #-4]!
|
||||||
W(ldr) r4, [r1, #-4]!
|
W(ldr) r4, [r1, #-4]!
|
||||||
W(ldr) r5, [r1, #-4]!
|
W(ldr) r5, [r1, #-4]!
|
||||||
|
@ -85,7 +85,7 @@ ENTRY(memmove)
|
||||||
|
|
||||||
add pc, pc, ip
|
add pc, pc, ip
|
||||||
nop
|
nop
|
||||||
nop
|
W(nop)
|
||||||
W(str) r3, [r0, #-4]!
|
W(str) r3, [r0, #-4]!
|
||||||
W(str) r4, [r0, #-4]!
|
W(str) r4, [r0, #-4]!
|
||||||
W(str) r5, [r0, #-4]!
|
W(str) r5, [r0, #-4]!
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
#include <linux/hardirq.h> /* for in_atomic() */
|
#include <linux/hardirq.h> /* for in_atomic() */
|
||||||
|
#include <linux/gfp.h>
|
||||||
#include <asm/current.h>
|
#include <asm/current.h>
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include <linux/timex.h>
|
#include <linux/timex.h>
|
||||||
#include <linux/signal.h>
|
#include <linux/signal.h>
|
||||||
#include <linux/clk.h>
|
#include <linux/clk.h>
|
||||||
|
#include <linux/gfp.h>
|
||||||
|
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
#include <asm/irq.h>
|
#include <asm/irq.h>
|
||||||
|
|
|
@ -205,13 +205,25 @@ ENTRY(at91_slow_clock)
|
||||||
ldr r3, .saved_pllbr
|
ldr r3, .saved_pllbr
|
||||||
str r3, [r1, #(AT91_CKGR_PLLBR - AT91_PMC)]
|
str r3, [r1, #(AT91_CKGR_PLLBR - AT91_PMC)]
|
||||||
|
|
||||||
|
tst r3, #(AT91_PMC_MUL & 0xff0000)
|
||||||
|
bne 1f
|
||||||
|
tst r3, #(AT91_PMC_MUL & ~0xff0000)
|
||||||
|
beq 2f
|
||||||
|
1:
|
||||||
wait_pllblock
|
wait_pllblock
|
||||||
|
2:
|
||||||
|
|
||||||
/* Restore PLLA setting */
|
/* Restore PLLA setting */
|
||||||
ldr r3, .saved_pllar
|
ldr r3, .saved_pllar
|
||||||
str r3, [r1, #(AT91_CKGR_PLLAR - AT91_PMC)]
|
str r3, [r1, #(AT91_CKGR_PLLAR - AT91_PMC)]
|
||||||
|
|
||||||
|
tst r3, #(AT91_PMC_MUL & 0xff0000)
|
||||||
|
bne 3f
|
||||||
|
tst r3, #(AT91_PMC_MUL & ~0xff0000)
|
||||||
|
beq 4f
|
||||||
|
3:
|
||||||
wait_pllalock
|
wait_pllalock
|
||||||
|
4:
|
||||||
|
|
||||||
#ifdef SLOWDOWN_MASTER_CLOCK
|
#ifdef SLOWDOWN_MASTER_CLOCK
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/irqreturn.h>
|
#include <linux/irqreturn.h>
|
||||||
#include <linux/proc_fs.h>
|
#include <linux/proc_fs.h>
|
||||||
|
#include <linux/slab.h>
|
||||||
|
|
||||||
#include <mach/timer.h>
|
#include <mach/timer.h>
|
||||||
|
|
||||||
|
@ -2220,11 +2221,15 @@ EXPORT_SYMBOL(dma_map_create_descriptor_ring);
|
||||||
int dma_unmap(DMA_MemMap_t *memMap, /* Stores state information about the map */
|
int dma_unmap(DMA_MemMap_t *memMap, /* Stores state information about the map */
|
||||||
int dirtied /* non-zero if any of the pages were modified */
|
int dirtied /* non-zero if any of the pages were modified */
|
||||||
) {
|
) {
|
||||||
|
|
||||||
|
int rc = 0;
|
||||||
int regionIdx;
|
int regionIdx;
|
||||||
int segmentIdx;
|
int segmentIdx;
|
||||||
DMA_Region_t *region;
|
DMA_Region_t *region;
|
||||||
DMA_Segment_t *segment;
|
DMA_Segment_t *segment;
|
||||||
|
|
||||||
|
down(&memMap->lock);
|
||||||
|
|
||||||
for (regionIdx = 0; regionIdx < memMap->numRegionsUsed; regionIdx++) {
|
for (regionIdx = 0; regionIdx < memMap->numRegionsUsed; regionIdx++) {
|
||||||
region = &memMap->region[regionIdx];
|
region = &memMap->region[regionIdx];
|
||||||
|
|
||||||
|
@ -2238,7 +2243,8 @@ int dma_unmap(DMA_MemMap_t *memMap, /* Stores state information about the map */
|
||||||
printk(KERN_ERR
|
printk(KERN_ERR
|
||||||
"%s: vmalloc'd pages are not yet supported\n",
|
"%s: vmalloc'd pages are not yet supported\n",
|
||||||
__func__);
|
__func__);
|
||||||
return -EINVAL;
|
rc = -EINVAL;
|
||||||
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
case DMA_MEM_TYPE_KMALLOC:
|
case DMA_MEM_TYPE_KMALLOC:
|
||||||
|
@ -2275,7 +2281,8 @@ int dma_unmap(DMA_MemMap_t *memMap, /* Stores state information about the map */
|
||||||
printk(KERN_ERR
|
printk(KERN_ERR
|
||||||
"%s: Unsupported memory type: %d\n",
|
"%s: Unsupported memory type: %d\n",
|
||||||
__func__, region->memType);
|
__func__, region->memType);
|
||||||
return -EINVAL;
|
rc = -EINVAL;
|
||||||
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2313,9 +2320,10 @@ int dma_unmap(DMA_MemMap_t *memMap, /* Stores state information about the map */
|
||||||
memMap->numRegionsUsed = 0;
|
memMap->numRegionsUsed = 0;
|
||||||
memMap->inUse = 0;
|
memMap->inUse = 0;
|
||||||
|
|
||||||
|
out:
|
||||||
up(&memMap->lock);
|
up(&memMap->lock);
|
||||||
|
|
||||||
return 0;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORT_SYMBOL(dma_unmap);
|
EXPORT_SYMBOL(dma_unmap);
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#include <linux/leds.h>
|
#include <linux/leds.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
|
#include <linux/slab.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/nand.h>
|
||||||
#include <linux/input.h>
|
#include <linux/input.h>
|
||||||
#include <linux/spi/spi.h>
|
#include <linux/spi/spi.h>
|
||||||
|
|
|
@ -758,7 +758,6 @@ static u8 dm365_default_priorities[DAVINCI_N_AINTC_IRQ] = {
|
||||||
[IRQ_MMCINT] = 7,
|
[IRQ_MMCINT] = 7,
|
||||||
[IRQ_DM365_MMCINT1] = 7,
|
[IRQ_DM365_MMCINT1] = 7,
|
||||||
[IRQ_DM365_PWMINT3] = 7,
|
[IRQ_DM365_PWMINT3] = 7,
|
||||||
[IRQ_DDRINT] = 4,
|
|
||||||
[IRQ_AEMIFINT] = 2,
|
[IRQ_AEMIFINT] = 2,
|
||||||
[IRQ_DM365_SDIOINT1] = 2,
|
[IRQ_DM365_SDIOINT1] = 2,
|
||||||
[IRQ_TINT0_TINT12] = 7,
|
[IRQ_TINT0_TINT12] = 7,
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
|
#include <linux/slab.h>
|
||||||
|
|
||||||
#include <mach/edma.h>
|
#include <mach/edma.h>
|
||||||
|
|
||||||
|
@ -1266,7 +1267,8 @@ int edma_start(unsigned channel)
|
||||||
/* EDMA channel with event association */
|
/* EDMA channel with event association */
|
||||||
pr_debug("EDMA: ER%d %08x\n", j,
|
pr_debug("EDMA: ER%d %08x\n", j,
|
||||||
edma_shadow0_read_array(ctlr, SH_ER, j));
|
edma_shadow0_read_array(ctlr, SH_ER, j));
|
||||||
/* Clear any pending error */
|
/* Clear any pending event or error */
|
||||||
|
edma_write_array(ctlr, EDMA_ECR, j, mask);
|
||||||
edma_write_array(ctlr, EDMA_EMCR, j, mask);
|
edma_write_array(ctlr, EDMA_EMCR, j, mask);
|
||||||
/* Clear any SER */
|
/* Clear any SER */
|
||||||
edma_shadow0_write_array(ctlr, SH_SECR, j, mask);
|
edma_shadow0_write_array(ctlr, SH_SECR, j, mask);
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
*
|
*
|
||||||
* Author: Mark A. Greer <mgreer@mvista.com>
|
* Author: Mark A. Greer <mgreer@mvista.com>
|
||||||
*
|
*
|
||||||
* 2007, 2009 (c) MontaVista Software, Inc. This file is licensed under
|
* 2007, 2009-2010 (c) MontaVista Software, Inc. This file is licensed under
|
||||||
* the terms of the GNU General Public License version 2. This program
|
* the terms of the GNU General Public License version 2. This program
|
||||||
* is licensed "as is" without any warranty of any kind, whether express
|
* is licensed "as is" without any warranty of any kind, whether express
|
||||||
* or implied.
|
* or implied.
|
||||||
|
@ -13,7 +13,9 @@
|
||||||
|
|
||||||
#include <video/da8xx-fb.h>
|
#include <video/da8xx-fb.h>
|
||||||
|
|
||||||
|
#include <linux/platform_device.h>
|
||||||
#include <linux/davinci_emac.h>
|
#include <linux/davinci_emac.h>
|
||||||
|
|
||||||
#include <mach/serial.h>
|
#include <mach/serial.h>
|
||||||
#include <mach/edma.h>
|
#include <mach/edma.h>
|
||||||
#include <mach/i2c.h>
|
#include <mach/i2c.h>
|
||||||
|
@ -144,6 +146,10 @@ extern const short da850_mmcsd0_pins[];
|
||||||
extern const short da850_nand_pins[];
|
extern const short da850_nand_pins[];
|
||||||
extern const short da850_nor_pins[];
|
extern const short da850_nor_pins[];
|
||||||
|
|
||||||
|
#ifdef CONFIG_DAVINCI_MUX
|
||||||
int da8xx_pinmux_setup(const short pins[]);
|
int da8xx_pinmux_setup(const short pins[]);
|
||||||
|
#else
|
||||||
|
static inline int da8xx_pinmux_setup(const short pins[]) { return 0; }
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* __ASM_ARCH_DAVINCI_DA8XX_H */
|
#endif /* __ASM_ARCH_DAVINCI_DA8XX_H */
|
||||||
|
|
|
@ -253,8 +253,6 @@ static void __init timer_init(void)
|
||||||
irq = USING_COMPARE(t) ? dtip[i].cmp_irq : irq;
|
irq = USING_COMPARE(t) ? dtip[i].cmp_irq : irq;
|
||||||
setup_irq(irq, &t->irqaction);
|
setup_irq(irq, &t->irqaction);
|
||||||
}
|
}
|
||||||
|
|
||||||
timer32_config(&timers[i]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -331,6 +329,7 @@ static void __init davinci_timer_init(void)
|
||||||
unsigned int clocksource_id;
|
unsigned int clocksource_id;
|
||||||
static char err[] __initdata = KERN_ERR
|
static char err[] __initdata = KERN_ERR
|
||||||
"%s: can't register clocksource!\n";
|
"%s: can't register clocksource!\n";
|
||||||
|
int i;
|
||||||
|
|
||||||
clockevent_id = soc_info->timer_info->clockevent_id;
|
clockevent_id = soc_info->timer_info->clockevent_id;
|
||||||
clocksource_id = soc_info->timer_info->clocksource_id;
|
clocksource_id = soc_info->timer_info->clocksource_id;
|
||||||
|
@ -389,6 +388,9 @@ static void __init davinci_timer_init(void)
|
||||||
|
|
||||||
clockevent_davinci.cpumask = cpumask_of(0);
|
clockevent_davinci.cpumask = cpumask_of(0);
|
||||||
clockevents_register_device(&clockevent_davinci);
|
clockevents_register_device(&clockevent_davinci);
|
||||||
|
|
||||||
|
for (i=0; i< ARRAY_SIZE(timers); i++)
|
||||||
|
timer32_config(&timers[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct sys_timer davinci_timer = {
|
struct sys_timer davinci_timer = {
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
* GPIO handling for EP93xx
|
* Interrupt handling for EP93xx on-chip GPIOs
|
||||||
*************************************************************************/
|
*************************************************************************/
|
||||||
static unsigned char gpio_int_unmasked[3];
|
static unsigned char gpio_int_unmasked[3];
|
||||||
static unsigned char gpio_int_enabled[3];
|
static unsigned char gpio_int_enabled[3];
|
||||||
|
@ -40,7 +40,7 @@ static const u8 eoi_register_offset[3] = { 0x98, 0xb4, 0x54 };
|
||||||
static const u8 int_en_register_offset[3] = { 0x9c, 0xb8, 0x58 };
|
static const u8 int_en_register_offset[3] = { 0x9c, 0xb8, 0x58 };
|
||||||
static const u8 int_debounce_register_offset[3] = { 0xa8, 0xc4, 0x64 };
|
static const u8 int_debounce_register_offset[3] = { 0xa8, 0xc4, 0x64 };
|
||||||
|
|
||||||
void ep93xx_gpio_update_int_params(unsigned port)
|
static void ep93xx_gpio_update_int_params(unsigned port)
|
||||||
{
|
{
|
||||||
BUG_ON(port > 2);
|
BUG_ON(port > 2);
|
||||||
|
|
||||||
|
@ -56,7 +56,7 @@ void ep93xx_gpio_update_int_params(unsigned port)
|
||||||
EP93XX_GPIO_REG(int_en_register_offset[port]));
|
EP93XX_GPIO_REG(int_en_register_offset[port]));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ep93xx_gpio_int_mask(unsigned line)
|
static inline void ep93xx_gpio_int_mask(unsigned line)
|
||||||
{
|
{
|
||||||
gpio_int_unmasked[line >> 3] &= ~(1 << (line & 7));
|
gpio_int_unmasked[line >> 3] &= ~(1 << (line & 7));
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
#include <linux/slab.h>
|
|
||||||
#include <linux/mman.h>
|
#include <linux/mman.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
|
|
|
@ -13,7 +13,6 @@
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/cpufreq.h>
|
#include <linux/cpufreq.h>
|
||||||
#include <linux/slab.h>
|
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
#include <linux/smp.h>
|
#include <linux/smp.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#include <linux/amba/bus.h>
|
#include <linux/amba/bus.h>
|
||||||
#include <linux/amba/clcd.h>
|
#include <linux/amba/clcd.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
|
#include <linux/slab.h>
|
||||||
|
|
||||||
#include <asm/clkdev.h>
|
#include <asm/clkdev.h>
|
||||||
#include <mach/clkdev.h>
|
#include <mach/clkdev.h>
|
||||||
|
|
|
@ -13,7 +13,6 @@
|
||||||
#include <linux/list.h>
|
#include <linux/list.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/dma-mapping.h>
|
#include <linux/dma-mapping.h>
|
||||||
#include <linux/slab.h>
|
|
||||||
#include <linux/string.h>
|
#include <linux/string.h>
|
||||||
#include <linux/sysdev.h>
|
#include <linux/sysdev.h>
|
||||||
#include <linux/amba/bus.h>
|
#include <linux/amba/bus.h>
|
||||||
|
@ -21,6 +20,7 @@
|
||||||
#include <linux/amba/clcd.h>
|
#include <linux/amba/clcd.h>
|
||||||
#include <linux/amba/mmci.h>
|
#include <linux/amba/mmci.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
|
#include <linux/gfp.h>
|
||||||
|
|
||||||
#include <asm/clkdev.h>
|
#include <asm/clkdev.h>
|
||||||
#include <mach/clkdev.h>
|
#include <mach/clkdev.h>
|
||||||
|
|
|
@ -22,7 +22,6 @@
|
||||||
*/
|
*/
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
#include <linux/slab.h>
|
|
||||||
#include <linux/ioport.h>
|
#include <linux/ioport.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/spinlock.h>
|
#include <linux/spinlock.h>
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
|
#include <linux/slab.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/jiffies.h>
|
#include <linux/jiffies.h>
|
||||||
#include <asm/irq.h>
|
#include <asm/irq.h>
|
||||||
|
|
|
@ -19,7 +19,6 @@
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
#include <linux/pm.h>
|
#include <linux/pm.h>
|
||||||
#include <linux/string.h>
|
#include <linux/string.h>
|
||||||
#include <linux/slab.h>
|
|
||||||
#include <linux/serial_core.h>
|
#include <linux/serial_core.h>
|
||||||
#include <linux/serial_8250.h>
|
#include <linux/serial_8250.h>
|
||||||
#include <linux/mtd/physmap.h>
|
#include <linux/mtd/physmap.h>
|
||||||
|
|
|
@ -21,7 +21,6 @@
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
#include <linux/pm.h>
|
#include <linux/pm.h>
|
||||||
#include <linux/string.h>
|
#include <linux/string.h>
|
||||||
#include <linux/slab.h>
|
|
||||||
#include <linux/serial_core.h>
|
#include <linux/serial_core.h>
|
||||||
#include <linux/serial_8250.h>
|
#include <linux/serial_8250.h>
|
||||||
#include <linux/mtd/physmap.h>
|
#include <linux/mtd/physmap.h>
|
||||||
|
|
|
@ -18,7 +18,6 @@
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
#include <linux/string.h>
|
#include <linux/string.h>
|
||||||
#include <linux/slab.h>
|
|
||||||
#include <linux/serial_core.h>
|
#include <linux/serial_core.h>
|
||||||
#include <linux/serial_8250.h>
|
#include <linux/serial_8250.h>
|
||||||
#include <linux/mtd/physmap.h>
|
#include <linux/mtd/physmap.h>
|
||||||
|
|
|
@ -23,7 +23,6 @@
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
#include <linux/pm.h>
|
#include <linux/pm.h>
|
||||||
#include <linux/string.h>
|
#include <linux/string.h>
|
||||||
#include <linux/slab.h>
|
|
||||||
#include <linux/serial_core.h>
|
#include <linux/serial_core.h>
|
||||||
#include <linux/serial_8250.h>
|
#include <linux/serial_8250.h>
|
||||||
#include <linux/mtd/physmap.h>
|
#include <linux/mtd/physmap.h>
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
#include <linux/string.h>
|
#include <linux/string.h>
|
||||||
#include <linux/slab.h>
|
|
||||||
#include <linux/serial_core.h>
|
#include <linux/serial_core.h>
|
||||||
#include <linux/serial_8250.h>
|
#include <linux/serial_8250.h>
|
||||||
#include <linux/mtd/physmap.h>
|
#include <linux/mtd/physmap.h>
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
#include <linux/string.h>
|
#include <linux/string.h>
|
||||||
#include <linux/slab.h>
|
|
||||||
#include <linux/serial_core.h>
|
#include <linux/serial_core.h>
|
||||||
#include <linux/serial_8250.h>
|
#include <linux/serial_8250.h>
|
||||||
#include <linux/mtd/physmap.h>
|
#include <linux/mtd/physmap.h>
|
||||||
|
|
|
@ -26,7 +26,6 @@
|
||||||
#include <linux/bitops.h>
|
#include <linux/bitops.h>
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
#include <linux/ioport.h>
|
#include <linux/ioport.h>
|
||||||
#include <linux/slab.h>
|
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/serial.h>
|
#include <linux/serial.h>
|
||||||
#include <linux/tty.h>
|
#include <linux/tty.h>
|
||||||
|
|
|
@ -23,7 +23,6 @@
|
||||||
#include <linux/bitops.h>
|
#include <linux/bitops.h>
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
#include <linux/ioport.h>
|
#include <linux/ioport.h>
|
||||||
#include <linux/slab.h>
|
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,6 @@
|
||||||
#include <linux/bitops.h>
|
#include <linux/bitops.h>
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
#include <linux/ioport.h>
|
#include <linux/ioport.h>
|
||||||
#include <linux/slab.h>
|
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,6 @@
|
||||||
#include <linux/bitops.h>
|
#include <linux/bitops.h>
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
#include <linux/ioport.h>
|
#include <linux/ioport.h>
|
||||||
#include <linux/slab.h>
|
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,6 @@
|
||||||
#include <linux/bitops.h>
|
#include <linux/bitops.h>
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
#include <linux/ioport.h>
|
#include <linux/ioport.h>
|
||||||
#include <linux/slab.h>
|
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/serial.h>
|
#include <linux/serial.h>
|
||||||
#include <linux/tty.h>
|
#include <linux/tty.h>
|
||||||
|
|
|
@ -22,7 +22,6 @@
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/ioport.h>
|
#include <linux/ioport.h>
|
||||||
#include <linux/slab.h>
|
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,6 @@
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/ioport.h>
|
#include <linux/ioport.h>
|
||||||
#include <linux/slab.h>
|
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
#include <linux/serial.h>
|
#include <linux/serial.h>
|
||||||
#include <linux/tty.h>
|
#include <linux/tty.h>
|
||||||
#include <linux/serial_8250.h>
|
#include <linux/serial_8250.h>
|
||||||
#include <linux/slab.h>
|
|
||||||
#include <linux/i2c-gpio.h>
|
#include <linux/i2c-gpio.h>
|
||||||
#include <asm/types.h>
|
#include <asm/types.h>
|
||||||
#include <asm/setup.h>
|
#include <asm/setup.h>
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
#include <linux/serial.h>
|
#include <linux/serial.h>
|
||||||
#include <linux/tty.h>
|
#include <linux/tty.h>
|
||||||
#include <linux/serial_8250.h>
|
#include <linux/serial_8250.h>
|
||||||
#include <linux/slab.h>
|
|
||||||
|
|
||||||
#include <asm/types.h>
|
#include <asm/types.h>
|
||||||
#include <asm/setup.h>
|
#include <asm/setup.h>
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
#include <linux/serial.h>
|
#include <linux/serial.h>
|
||||||
#include <linux/tty.h>
|
#include <linux/tty.h>
|
||||||
#include <linux/serial_8250.h>
|
#include <linux/serial_8250.h>
|
||||||
#include <linux/slab.h>
|
|
||||||
|
|
||||||
#include <asm/types.h>
|
#include <asm/types.h>
|
||||||
#include <asm/setup.h>
|
#include <asm/setup.h>
|
||||||
|
|
|
@ -27,7 +27,6 @@
|
||||||
#include <linux/serial.h>
|
#include <linux/serial.h>
|
||||||
#include <linux/tty.h>
|
#include <linux/tty.h>
|
||||||
#include <linux/serial_8250.h>
|
#include <linux/serial_8250.h>
|
||||||
#include <linux/slab.h>
|
|
||||||
#include <asm/types.h>
|
#include <asm/types.h>
|
||||||
#include <asm/setup.h>
|
#include <asm/setup.h>
|
||||||
#include <asm/memory.h>
|
#include <asm/memory.h>
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
#include <linux/serial.h>
|
#include <linux/serial.h>
|
||||||
#include <linux/tty.h>
|
#include <linux/tty.h>
|
||||||
#include <linux/serial_8250.h>
|
#include <linux/serial_8250.h>
|
||||||
#include <linux/slab.h>
|
|
||||||
#include <linux/i2c-gpio.h>
|
#include <linux/i2c-gpio.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
|
|
|
@ -20,7 +20,6 @@
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/slab.h>
|
|
||||||
#include <mach/npe.h>
|
#include <mach/npe.h>
|
||||||
|
|
||||||
#define DEBUG_MSG 0
|
#define DEBUG_MSG 0
|
||||||
|
|
|
@ -18,7 +18,6 @@
|
||||||
#include <linux/serial.h>
|
#include <linux/serial.h>
|
||||||
#include <linux/tty.h>
|
#include <linux/tty.h>
|
||||||
#include <linux/serial_8250.h>
|
#include <linux/serial_8250.h>
|
||||||
#include <linux/slab.h>
|
|
||||||
|
|
||||||
#include <asm/types.h>
|
#include <asm/types.h>
|
||||||
#include <asm/setup.h>
|
#include <asm/setup.h>
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
|
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
|
#include <linux/slab.h>
|
||||||
#include <linux/mbus.h>
|
#include <linux/mbus.h>
|
||||||
#include <asm/irq.h>
|
#include <asm/irq.h>
|
||||||
#include <asm/mach/pci.h>
|
#include <asm/mach/pci.h>
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
|
#include <linux/gfp.h>
|
||||||
#include <linux/device.h>
|
#include <linux/device.h>
|
||||||
#include <linux/dma-mapping.h>
|
#include <linux/dma-mapping.h>
|
||||||
#include <linux/sysdev.h>
|
#include <linux/sysdev.h>
|
||||||
|
|
|
@ -62,6 +62,15 @@ config MACH_MX31_3DS
|
||||||
Include support for MX31PDK (3DS) platform. This includes specific
|
Include support for MX31PDK (3DS) platform. This includes specific
|
||||||
configurations for the board and its peripherals.
|
configurations for the board and its peripherals.
|
||||||
|
|
||||||
|
config MACH_MX31_3DS_MXC_NAND_USE_BBT
|
||||||
|
bool "Make the MXC NAND driver use the in flash Bad Block Table"
|
||||||
|
depends on MACH_MX31_3DS
|
||||||
|
depends on MTD_NAND_MXC
|
||||||
|
help
|
||||||
|
Enable this if you want that the MXC NAND driver uses the in flash
|
||||||
|
Bad Block Table to know what blocks are bad instead of scanning the
|
||||||
|
entire flash looking for bad block markers.
|
||||||
|
|
||||||
config MACH_MX31MOBOARD
|
config MACH_MX31MOBOARD
|
||||||
bool "Support mx31moboard platforms (EPFL Mobots group)"
|
bool "Support mx31moboard platforms (EPFL Mobots group)"
|
||||||
select ARCH_MX31
|
select ARCH_MX31
|
||||||
|
@ -95,6 +104,7 @@ config MACH_PCM043
|
||||||
config MACH_ARMADILLO5X0
|
config MACH_ARMADILLO5X0
|
||||||
bool "Support Atmark Armadillo-500 Development Base Board"
|
bool "Support Atmark Armadillo-500 Development Base Board"
|
||||||
select ARCH_MX31
|
select ARCH_MX31
|
||||||
|
select MXC_ULPI if USB_ULPI
|
||||||
help
|
help
|
||||||
Include support for Atmark Armadillo-500 platform. This includes
|
Include support for Atmark Armadillo-500 platform. This includes
|
||||||
specific configurations for the board and its peripherals.
|
specific configurations for the board and its peripherals.
|
||||||
|
|
|
@ -468,6 +468,7 @@ static struct clk ahb_clk = {
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFINE_CLOCK(perclk_clk, 0, NULL, 0, NULL, NULL, &ipg_clk);
|
DEFINE_CLOCK(perclk_clk, 0, NULL, 0, NULL, NULL, &ipg_clk);
|
||||||
|
DEFINE_CLOCK(ckil_clk, 0, NULL, 0, clk_ckil_get_rate, NULL, NULL);
|
||||||
|
|
||||||
DEFINE_CLOCK(sdhc1_clk, 0, MXC_CCM_CGR0, 0, NULL, NULL, &perclk_clk);
|
DEFINE_CLOCK(sdhc1_clk, 0, MXC_CCM_CGR0, 0, NULL, NULL, &perclk_clk);
|
||||||
DEFINE_CLOCK(sdhc2_clk, 1, MXC_CCM_CGR0, 2, NULL, NULL, &perclk_clk);
|
DEFINE_CLOCK(sdhc2_clk, 1, MXC_CCM_CGR0, 2, NULL, NULL, &perclk_clk);
|
||||||
|
@ -490,7 +491,7 @@ DEFINE_CLOCK(mpeg4_clk, 0, MXC_CCM_CGR1, 0, NULL, NULL, &ahb_clk);
|
||||||
DEFINE_CLOCK(mstick1_clk, 0, MXC_CCM_CGR1, 2, mstick1_get_rate, NULL, &usb_pll_clk);
|
DEFINE_CLOCK(mstick1_clk, 0, MXC_CCM_CGR1, 2, mstick1_get_rate, NULL, &usb_pll_clk);
|
||||||
DEFINE_CLOCK(mstick2_clk, 1, MXC_CCM_CGR1, 4, mstick2_get_rate, NULL, &usb_pll_clk);
|
DEFINE_CLOCK(mstick2_clk, 1, MXC_CCM_CGR1, 4, mstick2_get_rate, NULL, &usb_pll_clk);
|
||||||
DEFINE_CLOCK1(csi_clk, 0, MXC_CCM_CGR1, 6, csi, NULL, &serial_pll_clk);
|
DEFINE_CLOCK1(csi_clk, 0, MXC_CCM_CGR1, 6, csi, NULL, &serial_pll_clk);
|
||||||
DEFINE_CLOCK(rtc_clk, 0, MXC_CCM_CGR1, 8, NULL, NULL, &ipg_clk);
|
DEFINE_CLOCK(rtc_clk, 0, MXC_CCM_CGR1, 8, NULL, NULL, &ckil_clk);
|
||||||
DEFINE_CLOCK(wdog_clk, 0, MXC_CCM_CGR1, 10, NULL, NULL, &ipg_clk);
|
DEFINE_CLOCK(wdog_clk, 0, MXC_CCM_CGR1, 10, NULL, NULL, &ipg_clk);
|
||||||
DEFINE_CLOCK(pwm_clk, 0, MXC_CCM_CGR1, 12, NULL, NULL, &perclk_clk);
|
DEFINE_CLOCK(pwm_clk, 0, MXC_CCM_CGR1, 12, NULL, NULL, &perclk_clk);
|
||||||
DEFINE_CLOCK(usb_clk2, 0, MXC_CCM_CGR1, 18, usb_get_rate, NULL, &ahb_clk);
|
DEFINE_CLOCK(usb_clk2, 0, MXC_CCM_CGR1, 18, usb_get_rate, NULL, &ahb_clk);
|
||||||
|
@ -514,7 +515,6 @@ DEFINE_CLOCK(usb_clk1, 0, NULL, 0, usb_get_rate, NULL, &usb_pll_clk)
|
||||||
DEFINE_CLOCK(nfc_clk, 0, NULL, 0, nfc_get_rate, NULL, &ahb_clk);
|
DEFINE_CLOCK(nfc_clk, 0, NULL, 0, nfc_get_rate, NULL, &ahb_clk);
|
||||||
DEFINE_CLOCK(scc_clk, 0, NULL, 0, NULL, NULL, &ipg_clk);
|
DEFINE_CLOCK(scc_clk, 0, NULL, 0, NULL, NULL, &ipg_clk);
|
||||||
DEFINE_CLOCK(ipg_clk, 0, NULL, 0, ipg_get_rate, NULL, &ahb_clk);
|
DEFINE_CLOCK(ipg_clk, 0, NULL, 0, ipg_get_rate, NULL, &ahb_clk);
|
||||||
DEFINE_CLOCK(ckil_clk, 0, NULL, 0, clk_ckil_get_rate, NULL, NULL);
|
|
||||||
|
|
||||||
#define _REGISTER_CLOCK(d, n, c) \
|
#define _REGISTER_CLOCK(d, n, c) \
|
||||||
{ \
|
{ \
|
||||||
|
@ -572,7 +572,6 @@ static struct clk_lookup lookups[] = {
|
||||||
_REGISTER_CLOCK(NULL, "iim", iim_clk)
|
_REGISTER_CLOCK(NULL, "iim", iim_clk)
|
||||||
_REGISTER_CLOCK(NULL, "mpeg4", mpeg4_clk)
|
_REGISTER_CLOCK(NULL, "mpeg4", mpeg4_clk)
|
||||||
_REGISTER_CLOCK(NULL, "mbx", mbx_clk)
|
_REGISTER_CLOCK(NULL, "mbx", mbx_clk)
|
||||||
_REGISTER_CLOCK("mxc_rtc", NULL, ckil_clk)
|
|
||||||
};
|
};
|
||||||
|
|
||||||
int __init mx31_clocks_init(unsigned long fref)
|
int __init mx31_clocks_init(unsigned long fref)
|
||||||
|
|
|
@ -575,11 +575,26 @@ struct platform_device imx_ssi_device1 = {
|
||||||
.resource = imx_ssi_resources1,
|
.resource = imx_ssi_resources1,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int mx3_devices_init(void)
|
static struct resource imx_wdt_resources[] = {
|
||||||
|
{
|
||||||
|
.flags = IORESOURCE_MEM,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
struct platform_device imx_wdt_device0 = {
|
||||||
|
.name = "imx-wdt",
|
||||||
|
.id = 0,
|
||||||
|
.num_resources = ARRAY_SIZE(imx_wdt_resources),
|
||||||
|
.resource = imx_wdt_resources,
|
||||||
|
};
|
||||||
|
|
||||||
|
static int __init mx3_devices_init(void)
|
||||||
{
|
{
|
||||||
if (cpu_is_mx31()) {
|
if (cpu_is_mx31()) {
|
||||||
mxc_nand_resources[0].start = MX31_NFC_BASE_ADDR;
|
mxc_nand_resources[0].start = MX31_NFC_BASE_ADDR;
|
||||||
mxc_nand_resources[0].end = MX31_NFC_BASE_ADDR + 0xfff;
|
mxc_nand_resources[0].end = MX31_NFC_BASE_ADDR + 0xfff;
|
||||||
|
imx_wdt_resources[0].start = MX31_WDOG_BASE_ADDR;
|
||||||
|
imx_wdt_resources[0].end = MX31_WDOG_BASE_ADDR + 0x3fff;
|
||||||
mxc_register_device(&mxc_rnga_device, NULL);
|
mxc_register_device(&mxc_rnga_device, NULL);
|
||||||
}
|
}
|
||||||
if (cpu_is_mx35()) {
|
if (cpu_is_mx35()) {
|
||||||
|
@ -597,6 +612,8 @@ static int mx3_devices_init(void)
|
||||||
imx_ssi_resources0[1].end = MX35_INT_SSI1;
|
imx_ssi_resources0[1].end = MX35_INT_SSI1;
|
||||||
imx_ssi_resources1[1].start = MX35_INT_SSI2;
|
imx_ssi_resources1[1].start = MX35_INT_SSI2;
|
||||||
imx_ssi_resources1[1].end = MX35_INT_SSI2;
|
imx_ssi_resources1[1].end = MX35_INT_SSI2;
|
||||||
|
imx_wdt_resources[0].start = MX35_WDOG_BASE_ADDR;
|
||||||
|
imx_wdt_resources[0].end = MX35_WDOG_BASE_ADDR + 0x3fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -25,4 +25,5 @@ extern struct platform_device mxc_spi_device1;
|
||||||
extern struct platform_device mxc_spi_device2;
|
extern struct platform_device mxc_spi_device2;
|
||||||
extern struct platform_device imx_ssi_device0;
|
extern struct platform_device imx_ssi_device0;
|
||||||
extern struct platform_device imx_ssi_device1;
|
extern struct platform_device imx_ssi_device1;
|
||||||
|
extern struct platform_device imx_ssi_device1;
|
||||||
|
extern struct platform_device imx_wdt_device0;
|
||||||
|
|
|
@ -36,6 +36,9 @@
|
||||||
#include <linux/input.h>
|
#include <linux/input.h>
|
||||||
#include <linux/gpio_keys.h>
|
#include <linux/gpio_keys.h>
|
||||||
#include <linux/i2c.h>
|
#include <linux/i2c.h>
|
||||||
|
#include <linux/usb/otg.h>
|
||||||
|
#include <linux/usb/ulpi.h>
|
||||||
|
#include <linux/delay.h>
|
||||||
|
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
|
@ -52,6 +55,8 @@
|
||||||
#include <mach/ipu.h>
|
#include <mach/ipu.h>
|
||||||
#include <mach/mx3fb.h>
|
#include <mach/mx3fb.h>
|
||||||
#include <mach/mxc_nand.h>
|
#include <mach/mxc_nand.h>
|
||||||
|
#include <mach/mxc_ehci.h>
|
||||||
|
#include <mach/ulpi.h>
|
||||||
|
|
||||||
#include "devices.h"
|
#include "devices.h"
|
||||||
#include "crm_regs.h"
|
#include "crm_regs.h"
|
||||||
|
@ -103,8 +108,158 @@ static int armadillo5x0_pins[] = {
|
||||||
/* I2C2 */
|
/* I2C2 */
|
||||||
MX31_PIN_CSPI2_MOSI__SCL,
|
MX31_PIN_CSPI2_MOSI__SCL,
|
||||||
MX31_PIN_CSPI2_MISO__SDA,
|
MX31_PIN_CSPI2_MISO__SDA,
|
||||||
|
/* OTG */
|
||||||
|
MX31_PIN_USBOTG_DATA0__USBOTG_DATA0,
|
||||||
|
MX31_PIN_USBOTG_DATA1__USBOTG_DATA1,
|
||||||
|
MX31_PIN_USBOTG_DATA2__USBOTG_DATA2,
|
||||||
|
MX31_PIN_USBOTG_DATA3__USBOTG_DATA3,
|
||||||
|
MX31_PIN_USBOTG_DATA4__USBOTG_DATA4,
|
||||||
|
MX31_PIN_USBOTG_DATA5__USBOTG_DATA5,
|
||||||
|
MX31_PIN_USBOTG_DATA6__USBOTG_DATA6,
|
||||||
|
MX31_PIN_USBOTG_DATA7__USBOTG_DATA7,
|
||||||
|
MX31_PIN_USBOTG_CLK__USBOTG_CLK,
|
||||||
|
MX31_PIN_USBOTG_DIR__USBOTG_DIR,
|
||||||
|
MX31_PIN_USBOTG_NXT__USBOTG_NXT,
|
||||||
|
MX31_PIN_USBOTG_STP__USBOTG_STP,
|
||||||
|
/* USB host 2 */
|
||||||
|
IOMUX_MODE(MX31_PIN_USBH2_CLK, IOMUX_CONFIG_FUNC),
|
||||||
|
IOMUX_MODE(MX31_PIN_USBH2_DIR, IOMUX_CONFIG_FUNC),
|
||||||
|
IOMUX_MODE(MX31_PIN_USBH2_NXT, IOMUX_CONFIG_FUNC),
|
||||||
|
IOMUX_MODE(MX31_PIN_USBH2_STP, IOMUX_CONFIG_FUNC),
|
||||||
|
IOMUX_MODE(MX31_PIN_USBH2_DATA0, IOMUX_CONFIG_FUNC),
|
||||||
|
IOMUX_MODE(MX31_PIN_USBH2_DATA1, IOMUX_CONFIG_FUNC),
|
||||||
|
IOMUX_MODE(MX31_PIN_STXD3, IOMUX_CONFIG_FUNC),
|
||||||
|
IOMUX_MODE(MX31_PIN_SRXD3, IOMUX_CONFIG_FUNC),
|
||||||
|
IOMUX_MODE(MX31_PIN_SCK3, IOMUX_CONFIG_FUNC),
|
||||||
|
IOMUX_MODE(MX31_PIN_SFS3, IOMUX_CONFIG_FUNC),
|
||||||
|
IOMUX_MODE(MX31_PIN_STXD6, IOMUX_CONFIG_FUNC),
|
||||||
|
IOMUX_MODE(MX31_PIN_SRXD6, IOMUX_CONFIG_FUNC),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* USB */
|
||||||
|
#if defined(CONFIG_USB_ULPI)
|
||||||
|
|
||||||
|
#define OTG_RESET IOMUX_TO_GPIO(MX31_PIN_STXD4)
|
||||||
|
#define USBH2_RESET IOMUX_TO_GPIO(MX31_PIN_SCK6)
|
||||||
|
#define USBH2_CS IOMUX_TO_GPIO(MX31_PIN_GPIO1_3)
|
||||||
|
|
||||||
|
#define USB_PAD_CFG (PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST | PAD_CTL_HYS_CMOS | \
|
||||||
|
PAD_CTL_ODE_CMOS | PAD_CTL_100K_PU)
|
||||||
|
|
||||||
|
static int usbotg_init(struct platform_device *pdev)
|
||||||
|
{
|
||||||
|
int err;
|
||||||
|
|
||||||
|
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA0, USB_PAD_CFG);
|
||||||
|
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA1, USB_PAD_CFG);
|
||||||
|
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA2, USB_PAD_CFG);
|
||||||
|
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA3, USB_PAD_CFG);
|
||||||
|
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA4, USB_PAD_CFG);
|
||||||
|
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA5, USB_PAD_CFG);
|
||||||
|
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA6, USB_PAD_CFG);
|
||||||
|
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA7, USB_PAD_CFG);
|
||||||
|
mxc_iomux_set_pad(MX31_PIN_USBOTG_CLK, USB_PAD_CFG);
|
||||||
|
mxc_iomux_set_pad(MX31_PIN_USBOTG_DIR, USB_PAD_CFG);
|
||||||
|
mxc_iomux_set_pad(MX31_PIN_USBOTG_NXT, USB_PAD_CFG);
|
||||||
|
mxc_iomux_set_pad(MX31_PIN_USBOTG_STP, USB_PAD_CFG);
|
||||||
|
|
||||||
|
/* Chip already enabled by hardware */
|
||||||
|
/* OTG phy reset*/
|
||||||
|
err = gpio_request(OTG_RESET, "USB-OTG-RESET");
|
||||||
|
if (err) {
|
||||||
|
pr_err("Failed to request the usb otg reset gpio\n");
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
err = gpio_direction_output(OTG_RESET, 1/*HIGH*/);
|
||||||
|
if (err) {
|
||||||
|
pr_err("Failed to reset the usb otg phy\n");
|
||||||
|
goto otg_free_reset;
|
||||||
|
}
|
||||||
|
|
||||||
|
gpio_set_value(OTG_RESET, 0/*LOW*/);
|
||||||
|
mdelay(5);
|
||||||
|
gpio_set_value(OTG_RESET, 1/*HIGH*/);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
otg_free_reset:
|
||||||
|
gpio_free(OTG_RESET);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int usbh2_init(struct platform_device *pdev)
|
||||||
|
{
|
||||||
|
int err;
|
||||||
|
|
||||||
|
mxc_iomux_set_pad(MX31_PIN_USBH2_CLK, USB_PAD_CFG);
|
||||||
|
mxc_iomux_set_pad(MX31_PIN_USBH2_DIR, USB_PAD_CFG);
|
||||||
|
mxc_iomux_set_pad(MX31_PIN_USBH2_NXT, USB_PAD_CFG);
|
||||||
|
mxc_iomux_set_pad(MX31_PIN_USBH2_STP, USB_PAD_CFG);
|
||||||
|
mxc_iomux_set_pad(MX31_PIN_USBH2_DATA0, USB_PAD_CFG);
|
||||||
|
mxc_iomux_set_pad(MX31_PIN_USBH2_DATA1, USB_PAD_CFG);
|
||||||
|
mxc_iomux_set_pad(MX31_PIN_SRXD6, USB_PAD_CFG);
|
||||||
|
mxc_iomux_set_pad(MX31_PIN_STXD6, USB_PAD_CFG);
|
||||||
|
mxc_iomux_set_pad(MX31_PIN_SFS3, USB_PAD_CFG);
|
||||||
|
mxc_iomux_set_pad(MX31_PIN_SCK3, USB_PAD_CFG);
|
||||||
|
mxc_iomux_set_pad(MX31_PIN_SRXD3, USB_PAD_CFG);
|
||||||
|
mxc_iomux_set_pad(MX31_PIN_STXD3, USB_PAD_CFG);
|
||||||
|
|
||||||
|
mxc_iomux_set_gpr(MUX_PGP_UH2, true);
|
||||||
|
|
||||||
|
|
||||||
|
/* Enable the chip */
|
||||||
|
err = gpio_request(USBH2_CS, "USB-H2-CS");
|
||||||
|
if (err) {
|
||||||
|
pr_err("Failed to request the usb host 2 CS gpio\n");
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
err = gpio_direction_output(USBH2_CS, 0/*Enabled*/);
|
||||||
|
if (err) {
|
||||||
|
pr_err("Failed to drive the usb host 2 CS gpio\n");
|
||||||
|
goto h2_free_cs;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* H2 phy reset*/
|
||||||
|
err = gpio_request(USBH2_RESET, "USB-H2-RESET");
|
||||||
|
if (err) {
|
||||||
|
pr_err("Failed to request the usb host 2 reset gpio\n");
|
||||||
|
goto h2_free_cs;
|
||||||
|
}
|
||||||
|
|
||||||
|
err = gpio_direction_output(USBH2_RESET, 1/*HIGH*/);
|
||||||
|
if (err) {
|
||||||
|
pr_err("Failed to reset the usb host 2 phy\n");
|
||||||
|
goto h2_free_reset;
|
||||||
|
}
|
||||||
|
|
||||||
|
gpio_set_value(USBH2_RESET, 0/*LOW*/);
|
||||||
|
mdelay(5);
|
||||||
|
gpio_set_value(USBH2_RESET, 1/*HIGH*/);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
h2_free_reset:
|
||||||
|
gpio_free(USBH2_RESET);
|
||||||
|
h2_free_cs:
|
||||||
|
gpio_free(USBH2_CS);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct mxc_usbh_platform_data usbotg_pdata = {
|
||||||
|
.init = usbotg_init,
|
||||||
|
.portsc = MXC_EHCI_MODE_ULPI | MXC_EHCI_UTMI_8BIT,
|
||||||
|
.flags = MXC_EHCI_POWER_PINS_ENABLED | MXC_EHCI_INTERFACE_DIFF_UNI,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct mxc_usbh_platform_data usbh2_pdata = {
|
||||||
|
.init = usbh2_init,
|
||||||
|
.portsc = MXC_EHCI_MODE_ULPI | MXC_EHCI_UTMI_8BIT,
|
||||||
|
.flags = MXC_EHCI_POWER_PINS_ENABLED | MXC_EHCI_INTERFACE_DIFF_UNI,
|
||||||
|
};
|
||||||
|
#endif /* CONFIG_USB_ULPI */
|
||||||
|
|
||||||
/* RTC over I2C*/
|
/* RTC over I2C*/
|
||||||
#define ARMADILLO5X0_RTC_GPIO IOMUX_TO_GPIO(MX31_PIN_SRXD4)
|
#define ARMADILLO5X0_RTC_GPIO IOMUX_TO_GPIO(MX31_PIN_SRXD4)
|
||||||
|
|
||||||
|
@ -393,6 +548,17 @@ static void __init armadillo5x0_init(void)
|
||||||
if (armadillo5x0_i2c_rtc.irq == 0)
|
if (armadillo5x0_i2c_rtc.irq == 0)
|
||||||
pr_warning("armadillo5x0_init: failed to get RTC IRQ\n");
|
pr_warning("armadillo5x0_init: failed to get RTC IRQ\n");
|
||||||
i2c_register_board_info(1, &armadillo5x0_i2c_rtc, 1);
|
i2c_register_board_info(1, &armadillo5x0_i2c_rtc, 1);
|
||||||
|
|
||||||
|
/* USB */
|
||||||
|
#if defined(CONFIG_USB_ULPI)
|
||||||
|
usbotg_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops,
|
||||||
|
USB_OTG_DRV_VBUS | USB_OTG_DRV_VBUS_EXT);
|
||||||
|
usbh2_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops,
|
||||||
|
USB_OTG_DRV_VBUS | USB_OTG_DRV_VBUS_EXT);
|
||||||
|
|
||||||
|
mxc_register_device(&mxc_otg_host, &usbotg_pdata);
|
||||||
|
mxc_register_device(&mxc_usbh2, &usbh2_pdata);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init armadillo5x0_timer_init(void)
|
static void __init armadillo5x0_timer_init(void)
|
||||||
|
|
|
@ -23,6 +23,9 @@
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
#include <linux/smsc911x.h>
|
#include <linux/smsc911x.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
|
#include <linux/mfd/mc13783.h>
|
||||||
|
#include <linux/spi/spi.h>
|
||||||
|
#include <linux/regulator/machine.h>
|
||||||
|
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
|
@ -31,26 +34,96 @@
|
||||||
#include <asm/memory.h>
|
#include <asm/memory.h>
|
||||||
#include <asm/mach/map.h>
|
#include <asm/mach/map.h>
|
||||||
#include <mach/common.h>
|
#include <mach/common.h>
|
||||||
#include <mach/board-mx31pdk.h>
|
#include <mach/board-mx31_3ds.h>
|
||||||
#include <mach/imx-uart.h>
|
#include <mach/imx-uart.h>
|
||||||
#include <mach/iomux-mx3.h>
|
#include <mach/iomux-mx3.h>
|
||||||
|
#include <mach/mxc_nand.h>
|
||||||
|
#include <mach/spi.h>
|
||||||
#include "devices.h"
|
#include "devices.h"
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @file mx31pdk.c
|
* @file mx31_3ds.c
|
||||||
*
|
*
|
||||||
* @brief This file contains the board-specific initialization routines.
|
* @brief This file contains the board-specific initialization routines.
|
||||||
*
|
*
|
||||||
* @ingroup System
|
* @ingroup System
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int mx31pdk_pins[] = {
|
static int mx31_3ds_pins[] = {
|
||||||
/* UART1 */
|
/* UART1 */
|
||||||
MX31_PIN_CTS1__CTS1,
|
MX31_PIN_CTS1__CTS1,
|
||||||
MX31_PIN_RTS1__RTS1,
|
MX31_PIN_RTS1__RTS1,
|
||||||
MX31_PIN_TXD1__TXD1,
|
MX31_PIN_TXD1__TXD1,
|
||||||
MX31_PIN_RXD1__RXD1,
|
MX31_PIN_RXD1__RXD1,
|
||||||
IOMUX_MODE(MX31_PIN_GPIO1_1, IOMUX_CONFIG_GPIO),
|
IOMUX_MODE(MX31_PIN_GPIO1_1, IOMUX_CONFIG_GPIO),
|
||||||
|
/* SPI 1 */
|
||||||
|
MX31_PIN_CSPI2_SCLK__SCLK,
|
||||||
|
MX31_PIN_CSPI2_MOSI__MOSI,
|
||||||
|
MX31_PIN_CSPI2_MISO__MISO,
|
||||||
|
MX31_PIN_CSPI2_SPI_RDY__SPI_RDY,
|
||||||
|
MX31_PIN_CSPI2_SS0__SS0,
|
||||||
|
MX31_PIN_CSPI2_SS2__SS2, /*CS for MC13783 */
|
||||||
|
/* MC13783 IRQ */
|
||||||
|
IOMUX_MODE(MX31_PIN_GPIO1_3, IOMUX_CONFIG_GPIO),
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Regulators */
|
||||||
|
static struct regulator_init_data pwgtx_init = {
|
||||||
|
.constraints = {
|
||||||
|
.boot_on = 1,
|
||||||
|
.always_on = 1,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct mc13783_regulator_init_data mx31_3ds_regulators[] = {
|
||||||
|
{
|
||||||
|
.id = MC13783_REGU_PWGT1SPI, /* Power Gate for ARM core. */
|
||||||
|
.init_data = &pwgtx_init,
|
||||||
|
}, {
|
||||||
|
.id = MC13783_REGU_PWGT2SPI, /* Power Gate for L2 Cache. */
|
||||||
|
.init_data = &pwgtx_init,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
/* MC13783 */
|
||||||
|
static struct mc13783_platform_data mc13783_pdata __initdata = {
|
||||||
|
.regulators = mx31_3ds_regulators,
|
||||||
|
.num_regulators = ARRAY_SIZE(mx31_3ds_regulators),
|
||||||
|
.flags = MC13783_USE_REGULATOR,
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SPI */
|
||||||
|
static int spi1_internal_chipselect[] = {
|
||||||
|
MXC_SPI_CS(0),
|
||||||
|
MXC_SPI_CS(2),
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct spi_imx_master spi1_pdata = {
|
||||||
|
.chipselect = spi1_internal_chipselect,
|
||||||
|
.num_chipselect = ARRAY_SIZE(spi1_internal_chipselect),
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct spi_board_info mx31_3ds_spi_devs[] __initdata = {
|
||||||
|
{
|
||||||
|
.modalias = "mc13783",
|
||||||
|
.max_speed_hz = 1000000,
|
||||||
|
.bus_num = 1,
|
||||||
|
.chip_select = 1, /* SS2 */
|
||||||
|
.platform_data = &mc13783_pdata,
|
||||||
|
.irq = IOMUX_TO_IRQ(MX31_PIN_GPIO1_3),
|
||||||
|
.mode = SPI_CS_HIGH,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NAND Flash
|
||||||
|
*/
|
||||||
|
static struct mxc_nand_platform_data imx31_3ds_nand_flash_pdata = {
|
||||||
|
.width = 1,
|
||||||
|
.hw_ecc = 1,
|
||||||
|
#ifdef MACH_MX31_3DS_MXC_NAND_USE_BBT
|
||||||
|
.flash_bbt = 1,
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct imxuart_platform_data uart_pdata = {
|
static struct imxuart_platform_data uart_pdata = {
|
||||||
|
@ -95,7 +168,7 @@ static struct platform_device smsc911x_device = {
|
||||||
* LEDs, switches, interrupts for Ethernet.
|
* LEDs, switches, interrupts for Ethernet.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void mx31pdk_expio_irq_handler(uint32_t irq, struct irq_desc *desc)
|
static void mx31_3ds_expio_irq_handler(uint32_t irq, struct irq_desc *desc)
|
||||||
{
|
{
|
||||||
uint32_t imr_val;
|
uint32_t imr_val;
|
||||||
uint32_t int_valid;
|
uint32_t int_valid;
|
||||||
|
@ -163,7 +236,7 @@ static struct irq_chip expio_irq_chip = {
|
||||||
.unmask = expio_unmask_irq,
|
.unmask = expio_unmask_irq,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __init mx31pdk_init_expio(void)
|
static int __init mx31_3ds_init_expio(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -176,7 +249,7 @@ static int __init mx31pdk_init_expio(void)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
pr_info("i.MX31PDK Debug board detected, rev = 0x%04X\n",
|
pr_info("i.MX31 3DS Debug board detected, rev = 0x%04X\n",
|
||||||
__raw_readw(CPLD_CODE_VER_REG));
|
__raw_readw(CPLD_CODE_VER_REG));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -201,7 +274,7 @@ static int __init mx31pdk_init_expio(void)
|
||||||
set_irq_flags(i, IRQF_VALID);
|
set_irq_flags(i, IRQF_VALID);
|
||||||
}
|
}
|
||||||
set_irq_type(EXPIO_PARENT_INT, IRQ_TYPE_LEVEL_LOW);
|
set_irq_type(EXPIO_PARENT_INT, IRQ_TYPE_LEVEL_LOW);
|
||||||
set_irq_chained_handler(EXPIO_PARENT_INT, mx31pdk_expio_irq_handler);
|
set_irq_chained_handler(EXPIO_PARENT_INT, mx31_3ds_expio_irq_handler);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -209,7 +282,7 @@ static int __init mx31pdk_init_expio(void)
|
||||||
/*
|
/*
|
||||||
* This structure defines the MX31 memory map.
|
* This structure defines the MX31 memory map.
|
||||||
*/
|
*/
|
||||||
static struct map_desc mx31pdk_io_desc[] __initdata = {
|
static struct map_desc mx31_3ds_io_desc[] __initdata = {
|
||||||
{
|
{
|
||||||
.virtual = MX31_CS5_BASE_ADDR_VIRT,
|
.virtual = MX31_CS5_BASE_ADDR_VIRT,
|
||||||
.pfn = __phys_to_pfn(MX31_CS5_BASE_ADDR),
|
.pfn = __phys_to_pfn(MX31_CS5_BASE_ADDR),
|
||||||
|
@ -221,10 +294,10 @@ static struct map_desc mx31pdk_io_desc[] __initdata = {
|
||||||
/*
|
/*
|
||||||
* Set up static virtual mappings.
|
* Set up static virtual mappings.
|
||||||
*/
|
*/
|
||||||
static void __init mx31pdk_map_io(void)
|
static void __init mx31_3ds_map_io(void)
|
||||||
{
|
{
|
||||||
mx31_map_io();
|
mx31_map_io();
|
||||||
iotable_init(mx31pdk_io_desc, ARRAY_SIZE(mx31pdk_io_desc));
|
iotable_init(mx31_3ds_io_desc, ARRAY_SIZE(mx31_3ds_io_desc));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@ -232,35 +305,40 @@ static void __init mx31pdk_map_io(void)
|
||||||
*/
|
*/
|
||||||
static void __init mxc_board_init(void)
|
static void __init mxc_board_init(void)
|
||||||
{
|
{
|
||||||
mxc_iomux_setup_multiple_pins(mx31pdk_pins, ARRAY_SIZE(mx31pdk_pins),
|
mxc_iomux_setup_multiple_pins(mx31_3ds_pins, ARRAY_SIZE(mx31_3ds_pins),
|
||||||
"mx31pdk");
|
"mx31_3ds");
|
||||||
|
|
||||||
mxc_register_device(&mxc_uart_device0, &uart_pdata);
|
mxc_register_device(&mxc_uart_device0, &uart_pdata);
|
||||||
|
mxc_register_device(&mxc_nand_device, &imx31_3ds_nand_flash_pdata);
|
||||||
|
|
||||||
if (!mx31pdk_init_expio())
|
mxc_register_device(&mxc_spi_device1, &spi1_pdata);
|
||||||
|
spi_register_board_info(mx31_3ds_spi_devs,
|
||||||
|
ARRAY_SIZE(mx31_3ds_spi_devs));
|
||||||
|
|
||||||
|
if (!mx31_3ds_init_expio())
|
||||||
platform_device_register(&smsc911x_device);
|
platform_device_register(&smsc911x_device);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init mx31pdk_timer_init(void)
|
static void __init mx31_3ds_timer_init(void)
|
||||||
{
|
{
|
||||||
mx31_clocks_init(26000000);
|
mx31_clocks_init(26000000);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct sys_timer mx31pdk_timer = {
|
static struct sys_timer mx31_3ds_timer = {
|
||||||
.init = mx31pdk_timer_init,
|
.init = mx31_3ds_timer_init,
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The following uses standard kernel macros defined in arch.h in order to
|
* The following uses standard kernel macros defined in arch.h in order to
|
||||||
* initialize __mach_desc_MX31PDK data structure.
|
* initialize __mach_desc_MX31_3DS data structure.
|
||||||
*/
|
*/
|
||||||
MACHINE_START(MX31_3DS, "Freescale MX31PDK (3DS)")
|
MACHINE_START(MX31_3DS, "Freescale MX31PDK (3DS)")
|
||||||
/* Maintainer: Freescale Semiconductor, Inc. */
|
/* Maintainer: Freescale Semiconductor, Inc. */
|
||||||
.phys_io = MX31_AIPS1_BASE_ADDR,
|
.phys_io = MX31_AIPS1_BASE_ADDR,
|
||||||
.io_pg_offst = (MX31_AIPS1_BASE_ADDR_VIRT >> 18) & 0xfffc,
|
.io_pg_offst = (MX31_AIPS1_BASE_ADDR_VIRT >> 18) & 0xfffc,
|
||||||
.boot_params = MX3x_PHYS_OFFSET + 0x100,
|
.boot_params = MX3x_PHYS_OFFSET + 0x100,
|
||||||
.map_io = mx31pdk_map_io,
|
.map_io = mx31_3ds_map_io,
|
||||||
.init_irq = mx31_init_irq,
|
.init_irq = mx31_init_irq,
|
||||||
.init_machine = mxc_board_init,
|
.init_machine = mxc_board_init,
|
||||||
.timer = &mx31pdk_timer,
|
.timer = &mx31_3ds_timer,
|
||||||
MACHINE_END
|
MACHINE_END
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/dma-mapping.h>
|
#include <linux/dma-mapping.h>
|
||||||
#include <linux/fsl_devices.h>
|
#include <linux/fsl_devices.h>
|
||||||
|
#include <linux/gfp.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
#include <linux/can/platform/sja1000.h>
|
#include <linux/can/platform/sja1000.h>
|
||||||
#include <linux/usb/otg.h>
|
#include <linux/usb/otg.h>
|
||||||
#include <linux/usb/ulpi.h>
|
#include <linux/usb/ulpi.h>
|
||||||
#include <linux/fsl_devices.h>
|
#include <linux/gfp.h>
|
||||||
|
|
||||||
#include <media/soc_camera.h>
|
#include <media/soc_camera.h>
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,6 @@
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
#include <linux/platform_device.h>
|
|
||||||
#include <linux/leds.h>
|
#include <linux/leds.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
|
|
||||||
|
@ -206,5 +205,6 @@ void __init mx31lite_db_init(void)
|
||||||
mxc_register_device(&mxcsdhc_device0, &mmc_pdata);
|
mxc_register_device(&mxcsdhc_device0, &mmc_pdata);
|
||||||
mxc_register_device(&mxc_spi_device0, &spi0_pdata);
|
mxc_register_device(&mxc_spi_device0, &spi0_pdata);
|
||||||
platform_device_register(&litekit_led_device);
|
platform_device_register(&litekit_led_device);
|
||||||
|
mxc_register_device(&imx_wdt_device0, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
|
#include <linux/slab.h>
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
|
|
||||||
#include <linux/usb/otg.h>
|
#include <linux/usb/otg.h>
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/i2c.h>
|
#include <linux/i2c.h>
|
||||||
#include <linux/spi/spi.h>
|
#include <linux/spi/spi.h>
|
||||||
|
#include <linux/slab.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
|
|
||||||
|
|
|
@ -757,7 +757,7 @@ DEFINE_CLOCK(uart3_ipg_clk, 2, MXC_CCM_CCGR1, MXC_CCM_CCGRx_CG7_OFFSET,
|
||||||
|
|
||||||
/* GPT */
|
/* GPT */
|
||||||
DEFINE_CLOCK(gpt_clk, 0, MXC_CCM_CCGR2, MXC_CCM_CCGRx_CG9_OFFSET,
|
DEFINE_CLOCK(gpt_clk, 0, MXC_CCM_CCGR2, MXC_CCM_CCGRx_CG9_OFFSET,
|
||||||
NULL, NULL, &ipg_perclk, NULL);
|
NULL, NULL, &ipg_clk, NULL);
|
||||||
DEFINE_CLOCK(gpt_ipg_clk, 0, MXC_CCM_CCGR2, MXC_CCM_CCGRx_CG10_OFFSET,
|
DEFINE_CLOCK(gpt_ipg_clk, 0, MXC_CCM_CCGR2, MXC_CCM_CCGRx_CG10_OFFSET,
|
||||||
NULL, NULL, &ipg_clk, NULL);
|
NULL, NULL, &ipg_clk, NULL);
|
||||||
|
|
||||||
|
|
|
@ -14,9 +14,62 @@
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
|
#include <linux/module.h>
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
|
|
||||||
|
static int cpu_silicon_rev = -1;
|
||||||
|
|
||||||
|
#define SI_REV 0x48
|
||||||
|
|
||||||
|
static void query_silicon_parameter(void)
|
||||||
|
{
|
||||||
|
void __iomem *rom = ioremap(MX51_IROM_BASE_ADDR, MX51_IROM_SIZE);
|
||||||
|
u32 rev;
|
||||||
|
|
||||||
|
if (!rom) {
|
||||||
|
cpu_silicon_rev = -EINVAL;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
rev = readl(rom + SI_REV);
|
||||||
|
switch (rev) {
|
||||||
|
case 0x1:
|
||||||
|
cpu_silicon_rev = MX51_CHIP_REV_1_0;
|
||||||
|
break;
|
||||||
|
case 0x2:
|
||||||
|
cpu_silicon_rev = MX51_CHIP_REV_1_1;
|
||||||
|
break;
|
||||||
|
case 0x10:
|
||||||
|
cpu_silicon_rev = MX51_CHIP_REV_2_0;
|
||||||
|
break;
|
||||||
|
case 0x20:
|
||||||
|
cpu_silicon_rev = MX51_CHIP_REV_3_0;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
cpu_silicon_rev = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
iounmap(rom);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns:
|
||||||
|
* the silicon revision of the cpu
|
||||||
|
* -EINVAL - not a mx51
|
||||||
|
*/
|
||||||
|
int mx51_revision(void)
|
||||||
|
{
|
||||||
|
if (!cpu_is_mx51())
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
if (cpu_silicon_rev == -1)
|
||||||
|
query_silicon_parameter();
|
||||||
|
|
||||||
|
return cpu_silicon_rev;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(mx51_revision);
|
||||||
|
|
||||||
static int __init post_cpu_init(void)
|
static int __init post_cpu_init(void)
|
||||||
{
|
{
|
||||||
unsigned int reg;
|
unsigned int reg;
|
||||||
|
|
|
@ -34,11 +34,6 @@ static struct map_desc mxc_io_desc[] __initdata = {
|
||||||
.pfn = __phys_to_pfn(MX51_DEBUG_BASE_ADDR),
|
.pfn = __phys_to_pfn(MX51_DEBUG_BASE_ADDR),
|
||||||
.length = MX51_DEBUG_SIZE,
|
.length = MX51_DEBUG_SIZE,
|
||||||
.type = MT_DEVICE
|
.type = MT_DEVICE
|
||||||
}, {
|
|
||||||
.virtual = MX51_TZIC_BASE_ADDR_VIRT,
|
|
||||||
.pfn = __phys_to_pfn(MX51_TZIC_BASE_ADDR),
|
|
||||||
.length = MX51_TZIC_SIZE,
|
|
||||||
.type = MT_DEVICE
|
|
||||||
}, {
|
}, {
|
||||||
.virtual = MX51_AIPS1_BASE_ADDR_VIRT,
|
.virtual = MX51_AIPS1_BASE_ADDR_VIRT,
|
||||||
.pfn = __phys_to_pfn(MX51_AIPS1_BASE_ADDR),
|
.pfn = __phys_to_pfn(MX51_AIPS1_BASE_ADDR),
|
||||||
|
@ -54,11 +49,6 @@ static struct map_desc mxc_io_desc[] __initdata = {
|
||||||
.pfn = __phys_to_pfn(MX51_AIPS2_BASE_ADDR),
|
.pfn = __phys_to_pfn(MX51_AIPS2_BASE_ADDR),
|
||||||
.length = MX51_AIPS2_SIZE,
|
.length = MX51_AIPS2_SIZE,
|
||||||
.type = MT_DEVICE
|
.type = MT_DEVICE
|
||||||
}, {
|
|
||||||
.virtual = MX51_NFC_AXI_BASE_ADDR_VIRT,
|
|
||||||
.pfn = __phys_to_pfn(MX51_NFC_AXI_BASE_ADDR),
|
|
||||||
.length = MX51_NFC_AXI_SIZE,
|
|
||||||
.type = MT_DEVICE
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -69,14 +59,6 @@ static struct map_desc mxc_io_desc[] __initdata = {
|
||||||
*/
|
*/
|
||||||
void __init mx51_map_io(void)
|
void __init mx51_map_io(void)
|
||||||
{
|
{
|
||||||
u32 tzic_addr;
|
|
||||||
|
|
||||||
if (mx51_revision() < MX51_CHIP_REV_2_0)
|
|
||||||
tzic_addr = 0x8FFFC000;
|
|
||||||
else
|
|
||||||
tzic_addr = 0xE0003000;
|
|
||||||
mxc_io_desc[2].pfn = __phys_to_pfn(tzic_addr);
|
|
||||||
|
|
||||||
mxc_set_cpu_type(MXC_CPU_MX51);
|
mxc_set_cpu_type(MXC_CPU_MX51);
|
||||||
mxc_iomux_v3_init(MX51_IO_ADDRESS(MX51_IOMUXC_BASE_ADDR));
|
mxc_iomux_v3_init(MX51_IO_ADDRESS(MX51_IOMUXC_BASE_ADDR));
|
||||||
mxc_arch_reset_init(MX51_IO_ADDRESS(MX51_WDOG_BASE_ADDR));
|
mxc_arch_reset_init(MX51_IO_ADDRESS(MX51_WDOG_BASE_ADDR));
|
||||||
|
@ -85,5 +67,17 @@ void __init mx51_map_io(void)
|
||||||
|
|
||||||
void __init mx51_init_irq(void)
|
void __init mx51_init_irq(void)
|
||||||
{
|
{
|
||||||
tzic_init_irq(MX51_IO_ADDRESS(MX51_TZIC_BASE_ADDR));
|
unsigned long tzic_addr;
|
||||||
|
void __iomem *tzic_virt;
|
||||||
|
|
||||||
|
if (mx51_revision() < MX51_CHIP_REV_2_0)
|
||||||
|
tzic_addr = MX51_TZIC_BASE_ADDR_TO1;
|
||||||
|
else
|
||||||
|
tzic_addr = MX51_TZIC_BASE_ADDR;
|
||||||
|
|
||||||
|
tzic_virt = ioremap(tzic_addr, SZ_16K);
|
||||||
|
if (!tzic_virt)
|
||||||
|
panic("unable to map TZIC interrupt controller\n");
|
||||||
|
|
||||||
|
tzic_init_irq(tzic_virt);
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
#include <linux/amba/bus.h>
|
#include <linux/amba/bus.h>
|
||||||
#include <linux/amba/clcd.h>
|
#include <linux/amba/clcd.h>
|
||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
|
#include <linux/gfp.h>
|
||||||
|
|
||||||
#include <asm/irq.h>
|
#include <asm/irq.h>
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#include <linux/device.h>
|
#include <linux/device.h>
|
||||||
#include <linux/firmware.h>
|
#include <linux/firmware.h>
|
||||||
#include <linux/mutex.h>
|
#include <linux/mutex.h>
|
||||||
|
#include <linux/slab.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
|
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
#include <linux/spinlock.h>
|
#include <linux/spinlock.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
|
#include <linux/slab.h>
|
||||||
|
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
#include <mach/gpio.h>
|
#include <mach/gpio.h>
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
*/
|
*/
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/serial_8250.h>
|
#include <linux/serial_8250.h>
|
||||||
|
#include <linux/slab.h>
|
||||||
|
|
||||||
#include <mach/regs-board-a9m9750dev.h>
|
#include <mach/regs-board-a9m9750dev.h>
|
||||||
#include <mach/board.h>
|
#include <mach/board.h>
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
*/
|
*/
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/slab.h>
|
|
||||||
|
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
#include <asm/mach/map.h>
|
#include <asm/mach/map.h>
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
|
#include <linux/slab.h>
|
||||||
|
|
||||||
#include <mach/irqs.h>
|
#include <mach/irqs.h>
|
||||||
#include <plat/dma.h>
|
#include <plat/dma.h>
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
#include <linux/clk.h>
|
#include <linux/clk.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/cpufreq.h>
|
#include <linux/cpufreq.h>
|
||||||
|
#include <linux/slab.h>
|
||||||
|
|
||||||
#include <plat/clock.h>
|
#include <plat/clock.h>
|
||||||
#include <plat/sram.h>
|
#include <plat/sram.h>
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
#include <linux/device.h>
|
#include <linux/device.h>
|
||||||
#include <linux/jiffies.h>
|
#include <linux/jiffies.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
|
#include <linux/slab.h>
|
||||||
#include <linux/stringify.h>
|
#include <linux/stringify.h>
|
||||||
|
|
||||||
#include <plat/iommu.h>
|
#include <plat/iommu.h>
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue