mirror of https://gitee.com/openkylin/linux.git
ARM SoC specific changes
These changes are all to SoC-specific code, a total of 33 branches on 17 platforms were pulled into this. Like last time, Renesas sh-mobile is now the platform with the most changes, followed by OMAP and EXYNOS. Two new platforms, TI Keystone and Rockchips RK3xxx are added in this branch, both containing almost no platform specific code at all, since they are using generic subsystem interfaces for clocks, pinctrl, interrupts etc. The device drivers are getting merged through the respective subsystem maintainer trees. One more SoC (u300) is now multiplatform capable and several others (shmobile, exynos, msm, integrator, kirkwood, clps711x) are moving towards that goal with this series but need more work. Also noteworthy is the work on PCI here, which is traditionally part of the SoC specific code. With the changes done by Thomas Petazzoni, we can now more easily have PCI host controller drivers as loadable modules and keep them separate from the platform code in drivers/pci/host. This has already led to the discovery that three platforms (exynos, spear and imx) are actually using an identical PCIe host controller and will be able to share a driver once support for spear and imx is added. Conflicts: * asm/glue-proc.h has one CPU type getting added that conflicts with another addition in 3.10-rc7 * Simple context changes in arch/arm/Makefile and arch/arm/Kconfig -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iQIVAwUAUdLnpmCrR//JCVInAQLoFRAAyatR+MhVFwc91cO7yDw/mz81RO1V9jEd QMufoWi0BRfBsubqxnGlb510EEMTz7gxdrlYPILYNr8TqR+lNGhjKt2FQAjN3q2O IBvu4x8C+xcxnMNbkCnTQRxP/ziK6yCI6e7enQhwuMuJwvsnJtGbsqKi5ODMw6x0 o5EQmIdj5NhhSJqJZPCmWsKbx100TH1UwaEnhNl0DSaFj51n3bVRrK6Nxce10GWZ HsS1/a63lq/YZLkwfUEvgin/PU9Jx5jMmqhlp3bZjG+f1ItdzJF+9IgS248vCIi2 ystzWCH88Kh69UFcYFfCjeZe8H45XcP+Zykd8WC0DvF/a7Hwk5KTKE/ciT6RPRxb rkWW5EwjqZL9w9cU3rUHWtSVenayQMMEmCfksadr1AExyCrhPqfs9RINyBs2lK5a q2bdSFbXZsNzSyL+3yQAfChvRo1/2FdlFVQy+oVUCActV7L77Y7y6jl+b2qzFsSu xMKwvC/1vDXTvOnGk6A/qJu7yrHpqJrvw1eI+wnMswNBl7lCTgyyHnr5y8S092jI KU4hmSxsYP+y13HmKy4ewPy9DYJYBTSdReKfEFo79Dx8eqySAWjHFL/OPRqhCUYS kBq0eZpVZO7tJnHRaRz8n93wIYzb1UOhhgVwxdjPZF9L4d/jzh1BCv0OBWv8IXCu uWLAi92lL24= =0r9S -----END PGP SIGNATURE----- Merge tag 'soc-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc Pull ARM SoC specific changes from Arnd Bergmann: "These changes are all to SoC-specific code, a total of 33 branches on 17 platforms were pulled into this. Like last time, Renesas sh-mobile is now the platform with the most changes, followed by OMAP and EXYNOS. Two new platforms, TI Keystone and Rockchips RK3xxx are added in this branch, both containing almost no platform specific code at all, since they are using generic subsystem interfaces for clocks, pinctrl, interrupts etc. The device drivers are getting merged through the respective subsystem maintainer trees. One more SoC (u300) is now multiplatform capable and several others (shmobile, exynos, msm, integrator, kirkwood, clps711x) are moving towards that goal with this series but need more work. Also noteworthy is the work on PCI here, which is traditionally part of the SoC specific code. With the changes done by Thomas Petazzoni, we can now more easily have PCI host controller drivers as loadable modules and keep them separate from the platform code in drivers/pci/host. This has already led to the discovery that three platforms (exynos, spear and imx) are actually using an identical PCIe host controller and will be able to share a driver once support for spear and imx is added." * tag 'soc-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (480 commits) ARM: integrator: let pciv3 use mem/premem from device tree ARM: integrator: set local side PCI addresses right ARM: dts: Add pcie controller node for exynos5440-ssdk5440 ARM: dts: Add pcie controller node for Samsung EXYNOS5440 SoC ARM: EXYNOS: Enable PCIe support for Exynos5440 pci: Add PCIe driver for Samsung Exynos ARM: OMAP5: voltagedomain data: remove temporary OMAP4 voltage data ARM: keystone: Move CPU bringup code to dedicated asm file ARM: multiplatform: always pick one CPU type ARM: imx: select syscon for IMX6SL ARM: keystone: select ARM_ERRATA_798181 only for SMP ARM: imx: Synertronixx scb9328 needs to select SOC_IMX1 ARM: OMAP2+: AM43x: resolve SMP related build error dmaengine: edma: enable build for AM33XX ARM: edma: Add EDMA crossbar event mux support ARM: edma: Add DT and runtime PM support to the private EDMA API dmaengine: edma: Add TI EDMA device tree binding arm: add basic support for Rockchip RK3066a boards arm: add debug uarts for rockchip rk29xx and rk3xxx series arm: Add basic clocks for Rockchip rk3066a SoCs ...
This commit is contained in:
commit
3883cbb6c1
|
@ -17,6 +17,10 @@ SunXi family
|
|||
+ User Manual
|
||||
http://dl.linux-sunxi.org/A10/A10%20User%20Manual%20-%20v1.20%20%282012-04-09%2c%20DECRYPTED%29.pdf
|
||||
|
||||
- Allwinner A10s (sun5i)
|
||||
+ Datasheet
|
||||
http://dl.linux-sunxi.org/A10s/A10s%20Datasheet%20-%20v1.20%20%282012-03-27%29.pdf
|
||||
|
||||
- Allwinner A13 (sun5i)
|
||||
+ Datasheet
|
||||
http://dl.linux-sunxi.org/A13/A13%20Datasheet%20-%20v1.12%20%282012-03-29%29.pdf
|
||||
|
|
|
@ -0,0 +1,172 @@
|
|||
=======================================================
|
||||
ARM CCI cache coherent interconnect binding description
|
||||
=======================================================
|
||||
|
||||
ARM multi-cluster systems maintain intra-cluster coherency through a
|
||||
cache coherent interconnect (CCI) that is capable of monitoring bus
|
||||
transactions and manage coherency, TLB invalidations and memory barriers.
|
||||
|
||||
It allows snooping and distributed virtual memory message broadcast across
|
||||
clusters, through memory mapped interface, with a global control register
|
||||
space and multiple sets of interface control registers, one per slave
|
||||
interface.
|
||||
|
||||
Bindings for the CCI node follow the ePAPR standard, available from:
|
||||
|
||||
www.power.org/documentation/epapr-version-1-1/
|
||||
|
||||
with the addition of the bindings described in this document which are
|
||||
specific to ARM.
|
||||
|
||||
* CCI interconnect node
|
||||
|
||||
Description: Describes a CCI cache coherent Interconnect component
|
||||
|
||||
Node name must be "cci".
|
||||
Node's parent must be the root node /, and the address space visible
|
||||
through the CCI interconnect is the same as the one seen from the
|
||||
root node (ie from CPUs perspective as per DT standard).
|
||||
Every CCI node has to define the following properties:
|
||||
|
||||
- compatible
|
||||
Usage: required
|
||||
Value type: <string>
|
||||
Definition: must be set to
|
||||
"arm,cci-400"
|
||||
|
||||
- reg
|
||||
Usage: required
|
||||
Value type: <prop-encoded-array>
|
||||
Definition: A standard property. Specifies base physical
|
||||
address of CCI control registers common to all
|
||||
interfaces.
|
||||
|
||||
- ranges:
|
||||
Usage: required
|
||||
Value type: <prop-encoded-array>
|
||||
Definition: A standard property. Follow rules in the ePAPR for
|
||||
hierarchical bus addressing. CCI interfaces
|
||||
addresses refer to the parent node addressing
|
||||
scheme to declare their register bases.
|
||||
|
||||
CCI interconnect node can define the following child nodes:
|
||||
|
||||
- CCI control interface nodes
|
||||
|
||||
Node name must be "slave-if".
|
||||
Parent node must be CCI interconnect node.
|
||||
|
||||
A CCI control interface node must contain the following
|
||||
properties:
|
||||
|
||||
- compatible
|
||||
Usage: required
|
||||
Value type: <string>
|
||||
Definition: must be set to
|
||||
"arm,cci-400-ctrl-if"
|
||||
|
||||
- interface-type:
|
||||
Usage: required
|
||||
Value type: <string>
|
||||
Definition: must be set to one of {"ace", "ace-lite"}
|
||||
depending on the interface type the node
|
||||
represents.
|
||||
|
||||
- reg:
|
||||
Usage: required
|
||||
Value type: <prop-encoded-array>
|
||||
Definition: the base address and size of the
|
||||
corresponding interface programming
|
||||
registers.
|
||||
|
||||
* CCI interconnect bus masters
|
||||
|
||||
Description: masters in the device tree connected to a CCI port
|
||||
(inclusive of CPUs and their cpu nodes).
|
||||
|
||||
A CCI interconnect bus master node must contain the following
|
||||
properties:
|
||||
|
||||
- cci-control-port:
|
||||
Usage: required
|
||||
Value type: <phandle>
|
||||
Definition: a phandle containing the CCI control interface node
|
||||
the master is connected to.
|
||||
|
||||
Example:
|
||||
|
||||
cpus {
|
||||
#size-cells = <0>;
|
||||
#address-cells = <1>;
|
||||
|
||||
CPU0: cpu@0 {
|
||||
device_type = "cpu";
|
||||
compatible = "arm,cortex-a15";
|
||||
cci-control-port = <&cci_control1>;
|
||||
reg = <0x0>;
|
||||
};
|
||||
|
||||
CPU1: cpu@1 {
|
||||
device_type = "cpu";
|
||||
compatible = "arm,cortex-a15";
|
||||
cci-control-port = <&cci_control1>;
|
||||
reg = <0x1>;
|
||||
};
|
||||
|
||||
CPU2: cpu@100 {
|
||||
device_type = "cpu";
|
||||
compatible = "arm,cortex-a7";
|
||||
cci-control-port = <&cci_control2>;
|
||||
reg = <0x100>;
|
||||
};
|
||||
|
||||
CPU3: cpu@101 {
|
||||
device_type = "cpu";
|
||||
compatible = "arm,cortex-a7";
|
||||
cci-control-port = <&cci_control2>;
|
||||
reg = <0x101>;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
dma0: dma@3000000 {
|
||||
compatible = "arm,pl330", "arm,primecell";
|
||||
cci-control-port = <&cci_control0>;
|
||||
reg = <0x0 0x3000000 0x0 0x1000>;
|
||||
interrupts = <10>;
|
||||
#dma-cells = <1>;
|
||||
#dma-channels = <8>;
|
||||
#dma-requests = <32>;
|
||||
};
|
||||
|
||||
cci@2c090000 {
|
||||
compatible = "arm,cci-400";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
reg = <0x0 0x2c090000 0 0x1000>;
|
||||
ranges = <0x0 0x0 0x2c090000 0x6000>;
|
||||
|
||||
cci_control0: slave-if@1000 {
|
||||
compatible = "arm,cci-400-ctrl-if";
|
||||
interface-type = "ace-lite";
|
||||
reg = <0x1000 0x1000>;
|
||||
};
|
||||
|
||||
cci_control1: slave-if@4000 {
|
||||
compatible = "arm,cci-400-ctrl-if";
|
||||
interface-type = "ace";
|
||||
reg = <0x4000 0x1000>;
|
||||
};
|
||||
|
||||
cci_control2: slave-if@5000 {
|
||||
compatible = "arm,cci-400-ctrl-if";
|
||||
interface-type = "ace";
|
||||
reg = <0x5000 0x1000>;
|
||||
};
|
||||
};
|
||||
|
||||
This CCI node corresponds to a CCI component whose control registers sits
|
||||
at address 0x000000002c090000.
|
||||
CCI slave interface @0x000000002c091000 is connected to dma controller dma0.
|
||||
CCI slave interface @0x000000002c094000 is connected to CPUs {CPU0, CPU1};
|
||||
CCI slave interface @0x000000002c095000 is connected to CPUs {CPU2, CPU3};
|
|
@ -0,0 +1,10 @@
|
|||
TI Keystone Platforms Device Tree Bindings
|
||||
-----------------------------------------------
|
||||
|
||||
Boards with Keystone2 based devices (TCI66xxK2H) SOC shall have the
|
||||
following properties.
|
||||
|
||||
Required properties:
|
||||
- compatible: All TI specific devices present in Keystone SOC should be in
|
||||
the form "ti,keystone-*". Generic devices like gic, arch_timers, ns16550
|
||||
type UART should use the specified compatible for those devices.
|
|
@ -0,0 +1,19 @@
|
|||
ARM Dual Cluster System Configuration Block
|
||||
-------------------------------------------
|
||||
|
||||
The Dual Cluster System Configuration Block (DCSCB) provides basic
|
||||
functionality for controlling clocks, resets and configuration pins in
|
||||
the Dual Cluster System implemented by the Real-Time System Model (RTSM).
|
||||
|
||||
Required properties:
|
||||
|
||||
- compatible : should be "arm,rtsm,dcscb"
|
||||
|
||||
- reg : physical base address and the size of the registers window
|
||||
|
||||
Example:
|
||||
|
||||
dcscb@60000000 {
|
||||
compatible = "arm,rtsm,dcscb";
|
||||
reg = <0x60000000 0x1000>;
|
||||
};
|
|
@ -0,0 +1,46 @@
|
|||
ST-Ericsson U300 Device Tree Bindings
|
||||
|
||||
For various board the "board" node may contain specific properties
|
||||
that pertain to this particular board, such as board-specific GPIOs
|
||||
or board power regulator supplies.
|
||||
|
||||
Required root node property:
|
||||
|
||||
compatible="stericsson,u300";
|
||||
|
||||
Required node: syscon
|
||||
This contains the system controller.
|
||||
- compatible: must be "stericsson,u300-syscon".
|
||||
- reg: the base address and size of the system controller.
|
||||
|
||||
Boards with the U300 SoC include:
|
||||
|
||||
S365 "Small Board U365":
|
||||
|
||||
Required node: s365
|
||||
This contains the board-specific information.
|
||||
- compatible: must be "stericsson,s365".
|
||||
- vana15-supply: the regulator supplying the 1.5V to drive the
|
||||
board.
|
||||
- syscon: a pointer to the syscon node so we can acccess the
|
||||
syscon registers to set the board as self-powered.
|
||||
|
||||
Example:
|
||||
|
||||
/ {
|
||||
model = "ST-Ericsson U300";
|
||||
compatible = "stericsson,u300";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
s365 {
|
||||
compatible = "stericsson,s365";
|
||||
vana15-supply = <&ab3100_ldo_d_reg>;
|
||||
syscon = <&syscon>;
|
||||
};
|
||||
|
||||
syscon: syscon@c0011000 {
|
||||
compatible = "stericsson,u300-syscon";
|
||||
reg = <0xc0011000 0x1000>;
|
||||
};
|
||||
};
|
|
@ -184,6 +184,19 @@ clocks and IDs.
|
|||
cko2 170
|
||||
srtc_gate 171
|
||||
pata_gate 172
|
||||
sata_gate 173
|
||||
spdif_xtal_sel 174
|
||||
spdif0_sel 175
|
||||
spdif1_sel 176
|
||||
spdif0_pred 177
|
||||
spdif0_podf 178
|
||||
spdif1_pred 179
|
||||
spdif1_podf 180
|
||||
spdif0_com_sel 181
|
||||
spdif1_com_sel 182
|
||||
spdif0_gate 183
|
||||
spdif1_gate 184
|
||||
spdif_ipg_gate 185
|
||||
|
||||
Examples (for mx53):
|
||||
|
||||
|
|
|
@ -208,6 +208,7 @@ clocks and IDs.
|
|||
pll4_post_div 193
|
||||
pll5_post_div 194
|
||||
pll5_video_div 195
|
||||
eim_slow 196
|
||||
|
||||
Examples:
|
||||
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
* Clock bindings for Freescale i.MX6 SoloLite
|
||||
|
||||
Required properties:
|
||||
- compatible: Should be "fsl,imx6sl-ccm"
|
||||
- reg: Address and length of the register set
|
||||
- #clock-cells: Should be <1>
|
||||
|
||||
The clock consumer should specify the desired clock by having the clock
|
||||
ID in its "clocks" phandle cell. See include/dt-bindings/clock/imx6sl-clock.h
|
||||
for the full list of i.MX6 SoloLite clock IDs.
|
|
@ -0,0 +1,80 @@
|
|||
Clock bindings for ST-Ericsson U300 System Controller Clocks
|
||||
|
||||
Bindings for the gated system controller clocks:
|
||||
|
||||
Required properties:
|
||||
- compatible: must be "stericsson,u300-syscon-clk"
|
||||
- #clock-cells: must be <0>
|
||||
- clock-type: specifies the type of clock:
|
||||
0 = slow clock
|
||||
1 = fast clock
|
||||
2 = rest/remaining clock
|
||||
- clock-id: specifies the clock in the type range
|
||||
|
||||
Optional properties:
|
||||
- clocks: parent clock(s)
|
||||
|
||||
The available clocks per type are as follows:
|
||||
|
||||
Type: ID: Clock:
|
||||
-------------------
|
||||
0 0 Slow peripheral bridge clock
|
||||
0 1 UART0 clock
|
||||
0 4 GPIO clock
|
||||
0 6 RTC clock
|
||||
0 7 Application timer clock
|
||||
0 8 Access timer clock
|
||||
|
||||
1 0 Fast peripheral bridge clock
|
||||
1 1 I2C bus 0 clock
|
||||
1 2 I2C bus 1 clock
|
||||
1 5 MMC interface peripheral (silicon) clock
|
||||
1 6 SPI clock
|
||||
|
||||
2 3 CPU clock
|
||||
2 4 DMA controller clock
|
||||
2 5 External Memory Interface (EMIF) clock
|
||||
2 6 NAND flask interface clock
|
||||
2 8 XGAM graphics engine clock
|
||||
2 9 Shared External Memory Interface (SEMI) clock
|
||||
2 10 AHB Subsystem Bridge clock
|
||||
2 12 Interrupt controller clock
|
||||
|
||||
Example:
|
||||
|
||||
gpio_clk: gpio_clk@13M {
|
||||
#clock-cells = <0>;
|
||||
compatible = "stericsson,u300-syscon-clk";
|
||||
clock-type = <0>; /* Slow */
|
||||
clock-id = <4>;
|
||||
clocks = <&slow_clk>;
|
||||
};
|
||||
|
||||
gpio: gpio@c0016000 {
|
||||
compatible = "stericsson,gpio-coh901";
|
||||
(...)
|
||||
clocks = <&gpio_clk>;
|
||||
};
|
||||
|
||||
|
||||
Bindings for the MMC/SD card clock:
|
||||
|
||||
Required properties:
|
||||
- compatible: must be "stericsson,u300-syscon-mclk"
|
||||
- #clock-cells: must be <0>
|
||||
|
||||
Optional properties:
|
||||
- clocks: parent clock(s)
|
||||
|
||||
mmc_mclk: mmc_mclk {
|
||||
#clock-cells = <0>;
|
||||
compatible = "stericsson,u300-syscon-mclk";
|
||||
clocks = <&mmc_pclk>;
|
||||
};
|
||||
|
||||
mmcsd: mmcsd@c0001000 {
|
||||
compatible = "arm,pl18x", "arm,primecell";
|
||||
clocks = <&mmc_pclk>, <&mmc_mclk>;
|
||||
clock-names = "apb_pclk", "mclk";
|
||||
(...)
|
||||
};
|
|
@ -0,0 +1,26 @@
|
|||
* Clock bindings for Freescale Vybrid VF610 SOC
|
||||
|
||||
Required properties:
|
||||
- compatible: Should be "fsl,vf610-ccm"
|
||||
- reg: Address and length of the register set
|
||||
- #clock-cells: Should be <1>
|
||||
|
||||
The clock consumer should specify the desired clock by having the clock
|
||||
ID in its "clocks" phandle cell. See include/dt-bindings/clock/vf610-clock.h
|
||||
for the full list of VF610 clock IDs.
|
||||
|
||||
Examples:
|
||||
|
||||
clks: ccm@4006b000 {
|
||||
compatible = "fsl,vf610-ccm";
|
||||
reg = <0x4006b000 0x1000>;
|
||||
#clock-cells = <1>;
|
||||
};
|
||||
|
||||
uart1: serial@40028000 {
|
||||
compatible = "fsl,vf610-uart";
|
||||
reg = <0x40028000 0x1000>;
|
||||
interrupts = <0 62 0x04>;
|
||||
clocks = <&clks VF610_CLK_UART1>;
|
||||
clock-names = "ipg";
|
||||
};
|
|
@ -6,50 +6,99 @@ The purpose of this document is to document their usage.
|
|||
See clock_bindings.txt for more information on the generic clock bindings.
|
||||
See Chapter 25 of Zynq TRM for more information about Zynq clocks.
|
||||
|
||||
== PLLs ==
|
||||
|
||||
Used to describe the ARM_PLL, DDR_PLL, and IO_PLL.
|
||||
== Clock Controller ==
|
||||
The clock controller is a logical abstraction of Zynq's clock tree. It reads
|
||||
required input clock frequencies from the devicetree and acts as clock provider
|
||||
for all clock consumers of PS clocks.
|
||||
|
||||
Required properties:
|
||||
- #clock-cells : shall be 0 (only one clock is output from this node)
|
||||
- compatible : "xlnx,zynq-pll"
|
||||
- reg : pair of u32 values, which are the address offsets within the SLCR
|
||||
of the relevant PLL_CTRL register and PLL_CFG register respectively
|
||||
- clocks : phandle for parent clock. should be the phandle for ps_clk
|
||||
- #clock-cells : Must be 1
|
||||
- compatible : "xlnx,ps7-clkc"
|
||||
- ps-clk-frequency : Frequency of the oscillator providing ps_clk in HZ
|
||||
(usually 33 MHz oscillators are used for Zynq platforms)
|
||||
- clock-output-names : List of strings used to name the clock outputs. Shall be
|
||||
a list of the outputs given below.
|
||||
|
||||
Optional properties:
|
||||
- clock-output-names : name of the output clock
|
||||
- clocks : as described in the clock bindings
|
||||
- clock-names : as described in the clock bindings
|
||||
|
||||
Clock inputs:
|
||||
The following strings are optional parameters to the 'clock-names' property in
|
||||
order to provide an optional (E)MIO clock source.
|
||||
- swdt_ext_clk
|
||||
- gem0_emio_clk
|
||||
- gem1_emio_clk
|
||||
- mio_clk_XX # with XX = 00..53
|
||||
...
|
||||
|
||||
Clock outputs:
|
||||
0: armpll
|
||||
1: ddrpll
|
||||
2: iopll
|
||||
3: cpu_6or4x
|
||||
4: cpu_3or2x
|
||||
5: cpu_2x
|
||||
6: cpu_1x
|
||||
7: ddr2x
|
||||
8: ddr3x
|
||||
9: dci
|
||||
10: lqspi
|
||||
11: smc
|
||||
12: pcap
|
||||
13: gem0
|
||||
14: gem1
|
||||
15: fclk0
|
||||
16: fclk1
|
||||
17: fclk2
|
||||
18: fclk3
|
||||
19: can0
|
||||
20: can1
|
||||
21: sdio0
|
||||
22: sdio1
|
||||
23: uart0
|
||||
24: uart1
|
||||
25: spi0
|
||||
26: spi1
|
||||
27: dma
|
||||
28: usb0_aper
|
||||
29: usb1_aper
|
||||
30: gem0_aper
|
||||
31: gem1_aper
|
||||
32: sdio0_aper
|
||||
33: sdio1_aper
|
||||
34: spi0_aper
|
||||
35: spi1_aper
|
||||
36: can0_aper
|
||||
37: can1_aper
|
||||
38: i2c0_aper
|
||||
39: i2c1_aper
|
||||
40: uart0_aper
|
||||
41: uart1_aper
|
||||
42: gpio_aper
|
||||
43: lqspi_aper
|
||||
44: smc_aper
|
||||
45: swdt
|
||||
46: dbg_trc
|
||||
47: dbg_apb
|
||||
|
||||
Example:
|
||||
armpll: armpll {
|
||||
#clock-cells = <0>;
|
||||
compatible = "xlnx,zynq-pll";
|
||||
clocks = <&ps_clk>;
|
||||
reg = <0x100 0x110>;
|
||||
clock-output-names = "armpll";
|
||||
};
|
||||
|
||||
== Peripheral clocks ==
|
||||
|
||||
Describes clock node for the SDIO, SMC, SPI, QSPI, and UART clocks.
|
||||
|
||||
Required properties:
|
||||
- #clock-cells : shall be 1
|
||||
- compatible : "xlnx,zynq-periph-clock"
|
||||
- reg : a single u32 value, describing the offset within the SLCR where
|
||||
the CLK_CTRL register is found for this peripheral
|
||||
- clocks : phandle for parent clocks. should hold phandles for
|
||||
the IO_PLL, ARM_PLL, and DDR_PLL in order
|
||||
- clock-output-names : names of the output clock(s). For peripherals that have
|
||||
two output clocks (for example, the UART), two clocks
|
||||
should be listed.
|
||||
|
||||
Example:
|
||||
uart_clk: uart_clk {
|
||||
clkc: clkc {
|
||||
#clock-cells = <1>;
|
||||
compatible = "xlnx,zynq-periph-clock";
|
||||
clocks = <&iopll &armpll &ddrpll>;
|
||||
reg = <0x154>;
|
||||
clock-output-names = "uart0_ref_clk",
|
||||
"uart1_ref_clk";
|
||||
compatible = "xlnx,ps7-clkc";
|
||||
ps-clk-frequency = <33333333>;
|
||||
clock-output-names = "armpll", "ddrpll", "iopll", "cpu_6or4x",
|
||||
"cpu_3or2x", "cpu_2x", "cpu_1x", "ddr2x", "ddr3x",
|
||||
"dci", "lqspi", "smc", "pcap", "gem0", "gem1",
|
||||
"fclk0", "fclk1", "fclk2", "fclk3", "can0", "can1",
|
||||
"sdio0", "sdio1", "uart0", "uart1", "spi0", "spi1",
|
||||
"dma", "usb0_aper", "usb1_aper", "gem0_aper",
|
||||
"gem1_aper", "sdio0_aper", "sdio1_aper",
|
||||
"spi0_aper", "spi1_aper", "can0_aper", "can1_aper",
|
||||
"i2c0_aper", "i2c1_aper", "uart0_aper", "uart1_aper",
|
||||
"gpio_aper", "lqspi_aper", "smc_aper", "swdt",
|
||||
"dbg_trc", "dbg_apb";
|
||||
# optional props
|
||||
clocks = <&clkc 16>, <&clk_foo>;
|
||||
clock-names = "gem1_emio_clk", "can_mio_clk_23";
|
||||
};
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
ST-Ericsson COH 901 318 DMA Controller
|
||||
|
||||
This is a DMA controller which has begun as a fork of the
|
||||
ARM PL08x PrimeCell VHDL code.
|
||||
|
||||
Required properties:
|
||||
- compatible: should be "stericsson,coh901318"
|
||||
- reg: register locations and length
|
||||
- interrupts: the single DMA IRQ
|
||||
- #dma-cells: must be set to <1>, as the channels on the
|
||||
COH 901 318 are simple and identified by a single number
|
||||
- dma-channels: the number of DMA channels handled
|
||||
|
||||
Example:
|
||||
|
||||
dmac: dma-controller@c00020000 {
|
||||
compatible = "stericsson,coh901318";
|
||||
reg = <0xc0020000 0x1000>;
|
||||
interrupt-parent = <&vica>;
|
||||
interrupts = <2>;
|
||||
#dma-cells = <1>;
|
||||
dma-channels = <40>;
|
||||
};
|
||||
|
||||
Consumers example:
|
||||
|
||||
uart0: serial@c0013000 {
|
||||
compatible = "...";
|
||||
(...)
|
||||
dmas = <&dmac 17 &dmac 18>;
|
||||
dma-names = "tx", "rx";
|
||||
};
|
|
@ -0,0 +1,34 @@
|
|||
TI EDMA
|
||||
|
||||
Required properties:
|
||||
- compatible : "ti,edma3"
|
||||
- ti,edma-regions: Number of regions
|
||||
- ti,edma-slots: Number of slots
|
||||
- #dma-cells: Should be set to <1>
|
||||
Clients should use a single channel number per DMA request.
|
||||
- dma-channels: Specify total DMA channels per CC
|
||||
- reg: Memory map for accessing module
|
||||
- interrupt-parent: Interrupt controller the interrupt is routed through
|
||||
- interrupts: Exactly 3 interrupts need to be specified in the order:
|
||||
1. Transfer completion interrupt.
|
||||
2. Memory protection interrupt.
|
||||
3. Error interrupt.
|
||||
Optional properties:
|
||||
- ti,hwmods: Name of the hwmods associated to the EDMA
|
||||
- ti,edma-xbar-event-map: Crossbar event to channel map
|
||||
|
||||
Example:
|
||||
|
||||
edma: edma@49000000 {
|
||||
reg = <0x49000000 0x10000>;
|
||||
interrupt-parent = <&intc>;
|
||||
interrupts = <12 13 14>;
|
||||
compatible = "ti,edma3";
|
||||
ti,hwmods = "tpcc", "tptc0", "tptc1", "tptc2";
|
||||
#dma-cells = <1>;
|
||||
dma-channels = <64>;
|
||||
ti,edma-regions = <4>;
|
||||
ti,edma-slots = <256>;
|
||||
ti,edma-xbar-event-map = <1 12
|
||||
2 13>;
|
||||
};
|
|
@ -0,0 +1,28 @@
|
|||
Cirrus Logic CLPS711X GPIO controller
|
||||
|
||||
Required properties:
|
||||
- compatible: Should be "cirrus,clps711x-gpio"
|
||||
- reg: Physical base GPIO controller registers location and length.
|
||||
There should be two registers, first is DATA register, the second
|
||||
is DIRECTION.
|
||||
- gpio-controller: Marks the device node as a gpio controller.
|
||||
- #gpio-cells: Should be two. The first cell is the pin number and
|
||||
the second cell is used to specify the gpio polarity:
|
||||
0 = active high
|
||||
1 = active low
|
||||
|
||||
Note: Each GPIO port should have an alias correctly numbered in "aliases"
|
||||
node.
|
||||
|
||||
Example:
|
||||
|
||||
aliases {
|
||||
gpio0 = &porta;
|
||||
};
|
||||
|
||||
porta: gpio@80000000 {
|
||||
compatible = "cirrus,clps711x-gpio";
|
||||
reg = <0x80000000 0x1>, <0x80000040 0x1>;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
};
|
|
@ -0,0 +1,7 @@
|
|||
ST-Ericsson COH 901 571/3 GPIO controller
|
||||
|
||||
Required properties:
|
||||
- compatible: Compatible property value should be "stericsson,gpio-coh901"
|
||||
- reg: Physical base address of the controller and length of memory mapped
|
||||
region.
|
||||
- interrupts: the 0...n interrupts assigned to the different GPIO ports/banks.
|
|
@ -0,0 +1,15 @@
|
|||
ST Microelectronics DDC I2C
|
||||
|
||||
Required properties :
|
||||
- compatible : Must be "st,ddci2c"
|
||||
- reg: physical base address of the controller and length of memory mapped
|
||||
region.
|
||||
- interrupts: interrupt number to the cpu.
|
||||
- #address-cells = <1>;
|
||||
- #size-cells = <0>;
|
||||
|
||||
Optional properties:
|
||||
- Child nodes conforming to i2c bus binding
|
||||
|
||||
Examples :
|
||||
|
|
@ -0,0 +1,73 @@
|
|||
* Synopsis Designware PCIe interface
|
||||
|
||||
Required properties:
|
||||
- compatible: should contain "snps,dw-pcie" to identify the
|
||||
core, plus an identifier for the specific instance, such
|
||||
as "samsung,exynos5440-pcie".
|
||||
- reg: base addresses and lengths of the pcie controller,
|
||||
the phy controller, additional register for the phy controller.
|
||||
- interrupts: interrupt values for level interrupt,
|
||||
pulse interrupt, special interrupt.
|
||||
- clocks: from common clock binding: handle to pci clock.
|
||||
- clock-names: from common clock binding: should be "pcie" and "pcie_bus".
|
||||
- #address-cells: set to <3>
|
||||
- #size-cells: set to <2>
|
||||
- device_type: set to "pci"
|
||||
- ranges: ranges for the PCI memory and I/O regions
|
||||
- #interrupt-cells: set to <1>
|
||||
- interrupt-map-mask and interrupt-map: standard PCI properties
|
||||
to define the mapping of the PCIe interface to interrupt
|
||||
numbers.
|
||||
- reset-gpio: gpio pin number of power good signal
|
||||
|
||||
Example:
|
||||
|
||||
SoC specific DT Entry:
|
||||
|
||||
pcie@290000 {
|
||||
compatible = "samsung,exynos5440-pcie", "snps,dw-pcie";
|
||||
reg = <0x290000 0x1000
|
||||
0x270000 0x1000
|
||||
0x271000 0x40>;
|
||||
interrupts = <0 20 0>, <0 21 0>, <0 22 0>;
|
||||
clocks = <&clock 28>, <&clock 27>;
|
||||
clock-names = "pcie", "pcie_bus";
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
device_type = "pci";
|
||||
ranges = <0x00000800 0 0x40000000 0x40000000 0 0x00001000 /* configuration space */
|
||||
0x81000000 0 0 0x40001000 0 0x00010000 /* downstream I/O */
|
||||
0x82000000 0 0x40011000 0x40011000 0 0x1ffef000>; /* non-prefetchable memory */
|
||||
#interrupt-cells = <1>;
|
||||
interrupt-map-mask = <0 0 0 0>;
|
||||
interrupt-map = <0x0 0 &gic 53>;
|
||||
};
|
||||
|
||||
pcie@2a0000 {
|
||||
compatible = "samsung,exynos5440-pcie", "snps,dw-pcie";
|
||||
reg = <0x2a0000 0x1000
|
||||
0x272000 0x1000
|
||||
0x271040 0x40>;
|
||||
interrupts = <0 23 0>, <0 24 0>, <0 25 0>;
|
||||
clocks = <&clock 29>, <&clock 27>;
|
||||
clock-names = "pcie", "pcie_bus";
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
device_type = "pci";
|
||||
ranges = <0x00000800 0 0x60000000 0x60000000 0 0x00001000 /* configuration space */
|
||||
0x81000000 0 0 0x60001000 0 0x00010000 /* downstream I/O */
|
||||
0x82000000 0 0x60011000 0x60011000 0 0x1ffef000>; /* non-prefetchable memory */
|
||||
#interrupt-cells = <1>;
|
||||
interrupt-map-mask = <0 0 0 0>;
|
||||
interrupt-map = <0x0 0 &gic 56>;
|
||||
};
|
||||
|
||||
Board specific DT Entry:
|
||||
|
||||
pcie@290000 {
|
||||
reset-gpio = <&pin_ctrl 5 0>;
|
||||
};
|
||||
|
||||
pcie@2a0000 {
|
||||
reset-gpio = <&pin_ctrl 22 0>;
|
||||
};
|
|
@ -0,0 +1,221 @@
|
|||
* Marvell EBU PCIe interfaces
|
||||
|
||||
Mandatory properties:
|
||||
- compatible: one of the following values:
|
||||
marvell,armada-370-pcie
|
||||
marvell,armada-xp-pcie
|
||||
marvell,kirkwood-pcie
|
||||
- #address-cells, set to <3>
|
||||
- #size-cells, set to <2>
|
||||
- #interrupt-cells, set to <1>
|
||||
- bus-range: PCI bus numbers covered
|
||||
- device_type, set to "pci"
|
||||
- ranges: ranges for the PCI memory and I/O regions, as well as the
|
||||
MMIO registers to control the PCIe interfaces.
|
||||
|
||||
In addition, the Device Tree node must have sub-nodes describing each
|
||||
PCIe interface, having the following mandatory properties:
|
||||
- reg: used only for interrupt mapping, so only the first four bytes
|
||||
are used to refer to the correct bus number and device number.
|
||||
- assigned-addresses: reference to the MMIO registers used to control
|
||||
this PCIe interface.
|
||||
- clocks: the clock associated to this PCIe interface
|
||||
- marvell,pcie-port: the physical PCIe port number
|
||||
- status: either "disabled" or "okay"
|
||||
- device_type, set to "pci"
|
||||
- #address-cells, set to <3>
|
||||
- #size-cells, set to <2>
|
||||
- #interrupt-cells, set to <1>
|
||||
- ranges, empty property.
|
||||
- interrupt-map-mask and interrupt-map, standard PCI properties to
|
||||
define the mapping of the PCIe interface to interrupt numbers.
|
||||
|
||||
and the following optional properties:
|
||||
- marvell,pcie-lane: the physical PCIe lane number, for ports having
|
||||
multiple lanes. If this property is not found, we assume that the
|
||||
value is 0.
|
||||
|
||||
Example:
|
||||
|
||||
pcie-controller {
|
||||
compatible = "marvell,armada-xp-pcie";
|
||||
status = "disabled";
|
||||
device_type = "pci";
|
||||
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
|
||||
bus-range = <0x00 0xff>;
|
||||
|
||||
ranges = <0x82000000 0 0xd0040000 0xd0040000 0 0x00002000 /* Port 0.0 registers */
|
||||
0x82000000 0 0xd0042000 0xd0042000 0 0x00002000 /* Port 2.0 registers */
|
||||
0x82000000 0 0xd0044000 0xd0044000 0 0x00002000 /* Port 0.1 registers */
|
||||
0x82000000 0 0xd0048000 0xd0048000 0 0x00002000 /* Port 0.2 registers */
|
||||
0x82000000 0 0xd004c000 0xd004c000 0 0x00002000 /* Port 0.3 registers */
|
||||
0x82000000 0 0xd0080000 0xd0080000 0 0x00002000 /* Port 1.0 registers */
|
||||
0x82000000 0 0xd0082000 0xd0082000 0 0x00002000 /* Port 3.0 registers */
|
||||
0x82000000 0 0xd0084000 0xd0084000 0 0x00002000 /* Port 1.1 registers */
|
||||
0x82000000 0 0xd0088000 0xd0088000 0 0x00002000 /* Port 1.2 registers */
|
||||
0x82000000 0 0xd008c000 0xd008c000 0 0x00002000 /* Port 1.3 registers */
|
||||
0x82000000 0 0xe0000000 0xe0000000 0 0x08000000 /* non-prefetchable memory */
|
||||
0x81000000 0 0 0xe8000000 0 0x00100000>; /* downstream I/O */
|
||||
|
||||
pcie@1,0 {
|
||||
device_type = "pci";
|
||||
assigned-addresses = <0x82000800 0 0xd0040000 0 0x2000>;
|
||||
reg = <0x0800 0 0 0 0>;
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
#interrupt-cells = <1>;
|
||||
ranges;
|
||||
interrupt-map-mask = <0 0 0 0>;
|
||||
interrupt-map = <0 0 0 0 &mpic 58>;
|
||||
marvell,pcie-port = <0>;
|
||||
marvell,pcie-lane = <0>;
|
||||
clocks = <&gateclk 5>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pcie@2,0 {
|
||||
device_type = "pci";
|
||||
assigned-addresses = <0x82001000 0 0xd0044000 0 0x2000>;
|
||||
reg = <0x1000 0 0 0 0>;
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
#interrupt-cells = <1>;
|
||||
ranges;
|
||||
interrupt-map-mask = <0 0 0 0>;
|
||||
interrupt-map = <0 0 0 0 &mpic 59>;
|
||||
marvell,pcie-port = <0>;
|
||||
marvell,pcie-lane = <1>;
|
||||
clocks = <&gateclk 6>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pcie@3,0 {
|
||||
device_type = "pci";
|
||||
assigned-addresses = <0x82001800 0 0xd0048000 0 0x2000>;
|
||||
reg = <0x1800 0 0 0 0>;
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
#interrupt-cells = <1>;
|
||||
ranges;
|
||||
interrupt-map-mask = <0 0 0 0>;
|
||||
interrupt-map = <0 0 0 0 &mpic 60>;
|
||||
marvell,pcie-port = <0>;
|
||||
marvell,pcie-lane = <2>;
|
||||
clocks = <&gateclk 7>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pcie@4,0 {
|
||||
device_type = "pci";
|
||||
assigned-addresses = <0x82002000 0 0xd004c000 0 0x2000>;
|
||||
reg = <0x2000 0 0 0 0>;
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
#interrupt-cells = <1>;
|
||||
ranges;
|
||||
interrupt-map-mask = <0 0 0 0>;
|
||||
interrupt-map = <0 0 0 0 &mpic 61>;
|
||||
marvell,pcie-port = <0>;
|
||||
marvell,pcie-lane = <3>;
|
||||
clocks = <&gateclk 8>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pcie@5,0 {
|
||||
device_type = "pci";
|
||||
assigned-addresses = <0x82002800 0 0xd0080000 0 0x2000>;
|
||||
reg = <0x2800 0 0 0 0>;
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
#interrupt-cells = <1>;
|
||||
ranges;
|
||||
interrupt-map-mask = <0 0 0 0>;
|
||||
interrupt-map = <0 0 0 0 &mpic 62>;
|
||||
marvell,pcie-port = <1>;
|
||||
marvell,pcie-lane = <0>;
|
||||
clocks = <&gateclk 9>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pcie@6,0 {
|
||||
device_type = "pci";
|
||||
assigned-addresses = <0x82003000 0 0xd0084000 0 0x2000>;
|
||||
reg = <0x3000 0 0 0 0>;
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
#interrupt-cells = <1>;
|
||||
ranges;
|
||||
interrupt-map-mask = <0 0 0 0>;
|
||||
interrupt-map = <0 0 0 0 &mpic 63>;
|
||||
marvell,pcie-port = <1>;
|
||||
marvell,pcie-lane = <1>;
|
||||
clocks = <&gateclk 10>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pcie@7,0 {
|
||||
device_type = "pci";
|
||||
assigned-addresses = <0x82003800 0 0xd0088000 0 0x2000>;
|
||||
reg = <0x3800 0 0 0 0>;
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
#interrupt-cells = <1>;
|
||||
ranges;
|
||||
interrupt-map-mask = <0 0 0 0>;
|
||||
interrupt-map = <0 0 0 0 &mpic 64>;
|
||||
marvell,pcie-port = <1>;
|
||||
marvell,pcie-lane = <2>;
|
||||
clocks = <&gateclk 11>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pcie@8,0 {
|
||||
device_type = "pci";
|
||||
assigned-addresses = <0x82004000 0 0xd008c000 0 0x2000>;
|
||||
reg = <0x4000 0 0 0 0>;
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
#interrupt-cells = <1>;
|
||||
ranges;
|
||||
interrupt-map-mask = <0 0 0 0>;
|
||||
interrupt-map = <0 0 0 0 &mpic 65>;
|
||||
marvell,pcie-port = <1>;
|
||||
marvell,pcie-lane = <3>;
|
||||
clocks = <&gateclk 12>;
|
||||
status = "disabled";
|
||||
};
|
||||
pcie@9,0 {
|
||||
device_type = "pci";
|
||||
assigned-addresses = <0x82004800 0 0xd0042000 0 0x2000>;
|
||||
reg = <0x4800 0 0 0 0>;
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
#interrupt-cells = <1>;
|
||||
ranges;
|
||||
interrupt-map-mask = <0 0 0 0>;
|
||||
interrupt-map = <0 0 0 0 &mpic 99>;
|
||||
marvell,pcie-port = <2>;
|
||||
marvell,pcie-lane = <0>;
|
||||
clocks = <&gateclk 26>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pcie@10,0 {
|
||||
device_type = "pci";
|
||||
assigned-addresses = <0x82005000 0 0xd0082000 0 0x2000>;
|
||||
reg = <0x5000 0 0 0 0>;
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
#interrupt-cells = <1>;
|
||||
ranges;
|
||||
interrupt-map-mask = <0 0 0 0>;
|
||||
interrupt-map = <0 0 0 0 &mpic 103>;
|
||||
marvell,pcie-port = <3>;
|
||||
marvell,pcie-lane = <0>;
|
||||
clocks = <&gateclk 27>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
|
@ -0,0 +1,9 @@
|
|||
PCI bus bridges have standardized Device Tree bindings:
|
||||
|
||||
PCI Bus Binding to: IEEE Std 1275-1994
|
||||
http://www.openfirmware.org/ofwg/bindings/pci/pci2_1.pdf
|
||||
|
||||
And for the interrupt mapping part:
|
||||
|
||||
Open Firmware Recommended Practice: Interrupt Mapping
|
||||
http://www.openfirmware.org/1275/practice/imap/imap0_9d.pdf
|
|
@ -0,0 +1,15 @@
|
|||
V3 Semiconductor V360 EPC PCI bridge
|
||||
|
||||
This bridge is found in the ARM Integrator/AP (Application Platform)
|
||||
|
||||
Integrator-specific notes:
|
||||
|
||||
- syscon: should contain a link to the syscon device node (since
|
||||
on the Integrator, some registers in the syscon are required to
|
||||
operate the V3).
|
||||
|
||||
V360 EPC specific notes:
|
||||
|
||||
- reg: should contain the base address of the V3 adapter.
|
||||
- interrupts: should contain a reference to the V3 error interrupt
|
||||
as routed on the system.
|
|
@ -5,9 +5,20 @@ Required properties:
|
|||
- reg: physical base address of the controller and length of memory mapped
|
||||
region.
|
||||
- interrupts: IRQ line for the timer.
|
||||
- either clocks+clock-names or clock-frequency properties
|
||||
|
||||
Optional properties:
|
||||
- clocks : list of clock specifiers, corresponding to entries in
|
||||
the clock-names property;
|
||||
- clock-names : should contain "timer" and "pclk" entries, matching entries
|
||||
in the clocks property.
|
||||
- clock-frequency: The frequency in HZ of the timer.
|
||||
- clock-freq: For backwards compatibility with picoxcell
|
||||
|
||||
If using the clock specifiers, the pclk clock is optional, as not all
|
||||
systems may use one.
|
||||
|
||||
|
||||
Example:
|
||||
|
||||
timer1: timer@ffc09000 {
|
||||
|
@ -23,3 +34,11 @@ Example:
|
|||
clock-frequency = <200000000>;
|
||||
reg = <0xffd00000 0x1000>;
|
||||
};
|
||||
|
||||
timer3: timer@ffe00000 {
|
||||
compatible = "snps,dw-apb-timer-osc";
|
||||
interrupts = <0 170 4>;
|
||||
reg = <0xffe00000 0x1000>;
|
||||
clocks = <&timer_clk>, <&timer_pclk>;
|
||||
clock-names = "timer", "pclk";
|
||||
};
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
ST-Ericsson U300 apptimer
|
||||
|
||||
Required properties:
|
||||
|
||||
- compatible : should be "stericsson,u300-apptimer"
|
||||
- reg : Specifies base physical address and size of the registers.
|
||||
- interrupts : A list of 4 interrupts; one for each subtimer. These
|
||||
are, in order: OS (operating system), DD (device driver) both
|
||||
adopted for EPOC/Symbian with two specific IRQs for these tasks,
|
||||
then GP1 and GP2, which are general-purpose timers.
|
||||
|
||||
Example:
|
||||
|
||||
timer {
|
||||
compatible = "stericsson,u300-apptimer";
|
||||
reg = <0xc0014000 0x1000>;
|
||||
interrupts = <24 25 26 27>;
|
||||
};
|
|
@ -59,6 +59,7 @@ ste ST-Ericsson
|
|||
stericsson ST-Ericsson
|
||||
ti Texas Instruments
|
||||
toshiba Toshiba Corporation
|
||||
v3 V3 Semiconductor
|
||||
via VIA Technologies, Inc.
|
||||
wlf Wolfson Microelectronics
|
||||
wm Wondermedia Technologies, Inc.
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
ST-Ericsson COH 901 327 Watchdog timer
|
||||
|
||||
Required properties:
|
||||
- compatible: must be "stericsson,coh901327".
|
||||
- reg: physical base address of the controller and length of memory mapped
|
||||
region.
|
||||
- interrupts: the interrupt used for the watchdog timeout warning.
|
||||
|
||||
Optional properties:
|
||||
- timeout-sec: contains the watchdog timeout in seconds.
|
||||
|
||||
Example:
|
||||
|
||||
watchdog: watchdog@c0012000 {
|
||||
compatible = "stericsson,coh901327";
|
||||
reg = <0xc0012000 0x1000>;
|
||||
interrupts = <3>;
|
||||
timeout-sec = <60>;
|
||||
};
|
|
@ -9,7 +9,7 @@ config ARM
|
|||
select BUILDTIME_EXTABLE_SORT if MMU
|
||||
select CPU_PM if (SUSPEND || CPU_IDLE)
|
||||
select DCACHE_WORD_ACCESS if (CPU_V6 || CPU_V6K || CPU_V7) && !CPU_BIG_ENDIAN && MMU
|
||||
select GENERIC_ATOMIC64 if (CPU_V6 || !CPU_32v6K || !AEABI)
|
||||
select GENERIC_ATOMIC64 if (CPU_V7M || CPU_V6 || !CPU_32v6K || !AEABI)
|
||||
select GENERIC_CLOCKEVENTS_BROADCAST if SMP
|
||||
select GENERIC_IRQ_PROBE
|
||||
select GENERIC_IRQ_SHOW
|
||||
|
@ -366,11 +366,12 @@ config ARCH_CLPS711X
|
|||
select ARCH_REQUIRE_GPIOLIB
|
||||
select AUTO_ZRELADDR
|
||||
select CLKDEV_LOOKUP
|
||||
select CLKSRC_MMIO
|
||||
select COMMON_CLK
|
||||
select CPU_ARM720T
|
||||
select GENERIC_CLOCKEVENTS
|
||||
select MFD_SYSCON
|
||||
select MULTI_IRQ_HANDLER
|
||||
select NEED_MACH_MEMORY_H
|
||||
select SPARSE_IRQ
|
||||
help
|
||||
Support for Cirrus Logic 711x/721x/731x based boards.
|
||||
|
@ -502,6 +503,7 @@ config ARCH_DOVE
|
|||
|
||||
config ARCH_KIRKWOOD
|
||||
bool "Marvell Kirkwood"
|
||||
select ARCH_HAS_CPUFREQ
|
||||
select ARCH_REQUIRE_GPIOLIB
|
||||
select CPU_FEROCEON
|
||||
select GENERIC_CLOCKEVENTS
|
||||
|
@ -634,6 +636,7 @@ config ARCH_MSM
|
|||
|
||||
config ARCH_SHMOBILE
|
||||
bool "Renesas SH-Mobile / R-Mobile"
|
||||
select ARM_PATCH_PHYS_VIRT
|
||||
select CLKDEV_LOOKUP
|
||||
select GENERIC_CLOCKEVENTS
|
||||
select HAVE_ARM_SCU if SMP
|
||||
|
@ -643,9 +646,8 @@ config ARCH_SHMOBILE
|
|||
select HAVE_SMP
|
||||
select MIGHT_HAVE_CACHE_L2X0
|
||||
select MULTI_IRQ_HANDLER
|
||||
select NEED_MACH_MEMORY_H
|
||||
select NO_IOPORT
|
||||
select PINCTRL if ARCH_WANT_OPTIONAL_GPIOLIB
|
||||
select PINCTRL
|
||||
select PM_GENERIC_DOMAINS if PM
|
||||
select SPARSE_IRQ
|
||||
help
|
||||
|
@ -695,6 +697,7 @@ config ARCH_S3C24XX
|
|||
select CLKDEV_LOOKUP
|
||||
select CLKSRC_MMIO
|
||||
select GENERIC_CLOCKEVENTS
|
||||
select GPIO_SAMSUNG
|
||||
select HAVE_CLK
|
||||
select HAVE_S3C2410_I2C if I2C
|
||||
select HAVE_S3C2410_WATCHDOG if WATCHDOG
|
||||
|
@ -702,6 +705,7 @@ config ARCH_S3C24XX
|
|||
select MULTI_IRQ_HANDLER
|
||||
select NEED_MACH_GPIO_H
|
||||
select NEED_MACH_IO_H
|
||||
select SAMSUNG_ATAGS
|
||||
help
|
||||
Samsung S3C2410, S3C2412, S3C2413, S3C2416, S3C2440, S3C2442, S3C2443
|
||||
and S3C2450 SoCs based systems, such as the Simtec Electronics BAST
|
||||
|
@ -717,6 +721,7 @@ config ARCH_S3C64XX
|
|||
select CLKSRC_MMIO
|
||||
select CPU_V6
|
||||
select GENERIC_CLOCKEVENTS
|
||||
select GPIO_SAMSUNG
|
||||
select HAVE_CLK
|
||||
select HAVE_S3C2410_I2C if I2C
|
||||
select HAVE_S3C2410_WATCHDOG if WATCHDOG
|
||||
|
@ -726,6 +731,7 @@ config ARCH_S3C64XX
|
|||
select PLAT_SAMSUNG
|
||||
select S3C_DEV_NAND
|
||||
select S3C_GPIO_TRACK
|
||||
select SAMSUNG_ATAGS
|
||||
select SAMSUNG_CLKSRC
|
||||
select SAMSUNG_GPIOLIB_4BIT
|
||||
select SAMSUNG_IRQ_VIC_TIMER
|
||||
|
@ -740,12 +746,14 @@ config ARCH_S5P64X0
|
|||
select CLKSRC_MMIO
|
||||
select CPU_V6
|
||||
select GENERIC_CLOCKEVENTS
|
||||
select GPIO_SAMSUNG
|
||||
select HAVE_CLK
|
||||
select HAVE_S3C2410_I2C if I2C
|
||||
select HAVE_S3C2410_WATCHDOG if WATCHDOG
|
||||
select HAVE_S3C_RTC if RTC_CLASS
|
||||
select NEED_MACH_GPIO_H
|
||||
select SAMSUNG_WDT_RESET
|
||||
select SAMSUNG_ATAGS
|
||||
help
|
||||
Samsung S5P64X0 CPU based systems, such as the Samsung SMDK6440,
|
||||
SMDK6450.
|
||||
|
@ -757,12 +765,14 @@ config ARCH_S5PC100
|
|||
select CLKSRC_MMIO
|
||||
select CPU_V7
|
||||
select GENERIC_CLOCKEVENTS
|
||||
select GPIO_SAMSUNG
|
||||
select HAVE_CLK
|
||||
select HAVE_S3C2410_I2C if I2C
|
||||
select HAVE_S3C2410_WATCHDOG if WATCHDOG
|
||||
select HAVE_S3C_RTC if RTC_CLASS
|
||||
select NEED_MACH_GPIO_H
|
||||
select SAMSUNG_WDT_RESET
|
||||
select SAMSUNG_ATAGS
|
||||
help
|
||||
Samsung S5PC100 series based systems
|
||||
|
||||
|
@ -775,12 +785,14 @@ config ARCH_S5PV210
|
|||
select CLKSRC_MMIO
|
||||
select CPU_V7
|
||||
select GENERIC_CLOCKEVENTS
|
||||
select GPIO_SAMSUNG
|
||||
select HAVE_CLK
|
||||
select HAVE_S3C2410_I2C if I2C
|
||||
select HAVE_S3C2410_WATCHDOG if WATCHDOG
|
||||
select HAVE_S3C_RTC if RTC_CLASS
|
||||
select NEED_MACH_GPIO_H
|
||||
select NEED_MACH_MEMORY_H
|
||||
select SAMSUNG_ATAGS
|
||||
help
|
||||
Samsung S5PV210/S5PC110 series based systems
|
||||
|
||||
|
@ -788,7 +800,9 @@ config ARCH_EXYNOS
|
|||
bool "Samsung EXYNOS"
|
||||
select ARCH_HAS_CPUFREQ
|
||||
select ARCH_HAS_HOLES_MEMORYMODEL
|
||||
select ARCH_REQUIRE_GPIOLIB
|
||||
select ARCH_SPARSEMEM_ENABLE
|
||||
select ARM_GIC
|
||||
select CLKDEV_LOOKUP
|
||||
select COMMON_CLK
|
||||
select CPU_V7
|
||||
|
@ -797,8 +811,9 @@ config ARCH_EXYNOS
|
|||
select HAVE_S3C2410_I2C if I2C
|
||||
select HAVE_S3C2410_WATCHDOG if WATCHDOG
|
||||
select HAVE_S3C_RTC if RTC_CLASS
|
||||
select NEED_MACH_GPIO_H
|
||||
select NEED_MACH_MEMORY_H
|
||||
select SPARSE_IRQ
|
||||
select USE_OF
|
||||
help
|
||||
Support for SAMSUNG's EXYNOS SoCs (EXYNOS4/5)
|
||||
|
||||
|
@ -816,23 +831,6 @@ config ARCH_SHARK
|
|||
Support for the StrongARM based Digital DNARD machine, also known
|
||||
as "Shark" (<http://www.shark-linux.de/shark.html>).
|
||||
|
||||
config ARCH_U300
|
||||
bool "ST-Ericsson U300 Series"
|
||||
depends on MMU
|
||||
select ARCH_REQUIRE_GPIOLIB
|
||||
select ARM_AMBA
|
||||
select ARM_PATCH_PHYS_VIRT
|
||||
select ARM_VIC
|
||||
select CLKDEV_LOOKUP
|
||||
select CLKSRC_MMIO
|
||||
select COMMON_CLK
|
||||
select CPU_ARM926T
|
||||
select GENERIC_CLOCKEVENTS
|
||||
select HAVE_TCM
|
||||
select SPARSE_IRQ
|
||||
help
|
||||
Support for ST-Ericsson U300 series mobile platforms.
|
||||
|
||||
config ARCH_DAVINCI
|
||||
bool "TI DaVinci"
|
||||
select ARCH_HAS_HOLES_MEMORYMODEL
|
||||
|
@ -843,6 +841,7 @@ config ARCH_DAVINCI
|
|||
select GENERIC_IRQ_CHIP
|
||||
select HAVE_IDE
|
||||
select NEED_MACH_GPIO_H
|
||||
select TI_PRIV_EDMA
|
||||
select USE_OF
|
||||
select ZONE_DMA
|
||||
help
|
||||
|
@ -874,20 +873,21 @@ menu "Multiple platform selection"
|
|||
|
||||
comment "CPU Core family selection"
|
||||
|
||||
config ARCH_MULTI_V4
|
||||
bool "ARMv4 based platforms (FA526, StrongARM)"
|
||||
depends on !ARCH_MULTI_V6_V7
|
||||
select ARCH_MULTI_V4_V5
|
||||
|
||||
config ARCH_MULTI_V4T
|
||||
bool "ARMv4T based platforms (ARM720T, ARM920T, ...)"
|
||||
depends on !ARCH_MULTI_V6_V7
|
||||
select ARCH_MULTI_V4_V5
|
||||
select CPU_ARM920T if !(CPU_ARM7TDMI || CPU_ARM720T || \
|
||||
CPU_ARM740T || CPU_ARM9TDMI || CPU_ARM922T || \
|
||||
CPU_ARM925T || CPU_ARM940T)
|
||||
|
||||
config ARCH_MULTI_V5
|
||||
bool "ARMv5 based platforms (ARM926T, XSCALE, PJ1, ...)"
|
||||
depends on !ARCH_MULTI_V6_V7
|
||||
select ARCH_MULTI_V4_V5
|
||||
select CPU_ARM926T if (!CPU_ARM946E || CPU_ARM1020 || \
|
||||
CPU_ARM1020E || CPU_ARM1022 || CPU_ARM1026 || \
|
||||
CPU_XSCALE || CPU_XSC3 || CPU_MOHAWK || CPU_FEROCEON)
|
||||
|
||||
config ARCH_MULTI_V4_V5
|
||||
bool
|
||||
|
@ -951,6 +951,8 @@ source "arch/arm/mach-iop13xx/Kconfig"
|
|||
|
||||
source "arch/arm/mach-ixp4xx/Kconfig"
|
||||
|
||||
source "arch/arm/mach-keystone/Kconfig"
|
||||
|
||||
source "arch/arm/mach-kirkwood/Kconfig"
|
||||
|
||||
source "arch/arm/mach-ks8695/Kconfig"
|
||||
|
@ -984,6 +986,8 @@ source "arch/arm/mach-mmp/Kconfig"
|
|||
|
||||
source "arch/arm/mach-realview/Kconfig"
|
||||
|
||||
source "arch/arm/mach-rockchip/Kconfig"
|
||||
|
||||
source "arch/arm/mach-sa1100/Kconfig"
|
||||
|
||||
source "arch/arm/plat-samsung/Kconfig"
|
||||
|
@ -1420,6 +1424,7 @@ config PCI_HOST_ITE8152
|
|||
select DMABOUNCE
|
||||
|
||||
source "drivers/pci/Kconfig"
|
||||
source "drivers/pci/pcie/Kconfig"
|
||||
|
||||
source "drivers/pcmcia/Kconfig"
|
||||
|
||||
|
@ -1587,6 +1592,7 @@ config ARCH_NR_GPIO
|
|||
int
|
||||
default 1024 if ARCH_SHMOBILE || ARCH_TEGRA
|
||||
default 512 if SOC_OMAP5
|
||||
default 512 if ARCH_KEYSTONE
|
||||
default 392 if ARCH_U8500
|
||||
default 352 if ARCH_VT8500
|
||||
default 288 if ARCH_SUNXI
|
||||
|
@ -1612,7 +1618,7 @@ config SCHED_HRTICK
|
|||
|
||||
config THUMB2_KERNEL
|
||||
bool "Compile the kernel in Thumb-2 mode" if !CPU_THUMBONLY
|
||||
depends on CPU_V7 && !CPU_V6 && !CPU_V6K
|
||||
depends on (CPU_V7 || CPU_V7M) && !CPU_V6 && !CPU_V6K
|
||||
default y if CPU_THUMBONLY
|
||||
select AEABI
|
||||
select ARM_ASM_UNIFIED
|
||||
|
@ -2067,7 +2073,7 @@ config CRASH_DUMP
|
|||
|
||||
config AUTO_ZRELADDR
|
||||
bool "Auto calculation of the decompressed kernel image address"
|
||||
depends on !ZBOOT_ROM && !ARCH_U300
|
||||
depends on !ZBOOT_ROM
|
||||
help
|
||||
ZRELADDR is the physical address where the decompressed kernel
|
||||
image will be placed. If AUTO_ZRELADDR is selected, the address
|
||||
|
|
|
@ -28,7 +28,7 @@ config FLASH_SIZE
|
|||
config PROCESSOR_ID
|
||||
hex 'Hard wire the processor ID'
|
||||
default 0x00007700
|
||||
depends on !CPU_CP15
|
||||
depends on !(CPU_CP15 || CPU_V7M)
|
||||
help
|
||||
If processor has no CP15 register, this processor ID is
|
||||
used instead of the auto-probing which utilizes the register.
|
||||
|
|
|
@ -251,6 +251,27 @@ choice
|
|||
Say Y here if you want kernel low-level debugging support
|
||||
on i.MX6Q/DL.
|
||||
|
||||
config DEBUG_IMX6SL_UART
|
||||
bool "i.MX6SL Debug UART"
|
||||
depends on SOC_IMX6SL
|
||||
help
|
||||
Say Y here if you want kernel low-level debugging support
|
||||
on i.MX6SL.
|
||||
|
||||
config DEBUG_KEYSTONE_UART0
|
||||
bool "Kernel low-level debugging on KEYSTONE2 using UART0"
|
||||
depends on ARCH_KEYSTONE
|
||||
help
|
||||
Say Y here if you want the debug print routines to direct
|
||||
their output to UART0 serial port on KEYSTONE2 devices.
|
||||
|
||||
config DEBUG_KEYSTONE_UART1
|
||||
bool "Kernel low-level debugging on KEYSTONE2 using UART1"
|
||||
depends on ARCH_KEYSTONE
|
||||
help
|
||||
Say Y here if you want the debug print routines to direct
|
||||
their output to UART1 serial port on KEYSTONE2 devices.
|
||||
|
||||
config DEBUG_MMP_UART2
|
||||
bool "Kernel low-level debugging message via MMP UART2"
|
||||
depends on ARCH_MMP
|
||||
|
@ -303,12 +324,37 @@ choice
|
|||
their output to the serial port on MSM 8960 devices.
|
||||
|
||||
config DEBUG_MVEBU_UART
|
||||
bool "Kernel low-level debugging messages via MVEBU UART"
|
||||
bool "Kernel low-level debugging messages via MVEBU UART (old bootloaders)"
|
||||
depends on ARCH_MVEBU
|
||||
help
|
||||
Say Y here if you want kernel low-level debugging support
|
||||
on MVEBU based platforms.
|
||||
|
||||
This option should be used with the old bootloaders
|
||||
that left the internal registers mapped at
|
||||
0xd0000000. As of today, this is the case on
|
||||
platforms such as the Globalscale Mirabox or the
|
||||
Plathome OpenBlocks AX3, when using the original
|
||||
bootloader.
|
||||
|
||||
If the wrong DEBUG_MVEBU_UART* option is selected,
|
||||
when u-boot hands over to the kernel, the system
|
||||
silently crashes, with no serial output at all.
|
||||
|
||||
config DEBUG_MVEBU_UART_ALTERNATE
|
||||
bool "Kernel low-level debugging messages via MVEBU UART (new bootloaders)"
|
||||
depends on ARCH_MVEBU
|
||||
help
|
||||
Say Y here if you want kernel low-level debugging support
|
||||
on MVEBU based platforms.
|
||||
|
||||
This option should be used with the new bootloaders
|
||||
that remap the internal registers at 0xf1000000.
|
||||
|
||||
If the wrong DEBUG_MVEBU_UART* option is selected,
|
||||
when u-boot hands over to the kernel, the system
|
||||
silently crashes, with no serial output at all.
|
||||
|
||||
config DEBUG_NOMADIK_UART
|
||||
bool "Kernel low-level debugging messages via NOMADIK UART"
|
||||
depends on ARCH_NOMADIK
|
||||
|
@ -353,6 +399,13 @@ choice
|
|||
their output to the standard serial port on the RealView
|
||||
PB1176 platform.
|
||||
|
||||
config DEBUG_ROCKCHIP_UART
|
||||
bool "Kernel low-level debugging messages via Rockchip UART"
|
||||
depends on ARCH_ROCKCHIP
|
||||
help
|
||||
Say Y here if you want kernel low-level debugging support
|
||||
on Rockchip based platforms.
|
||||
|
||||
config DEBUG_S3C_UART0
|
||||
depends on PLAT_SAMSUNG
|
||||
select DEBUG_EXYNOS_UART if ARCH_EXYNOS
|
||||
|
@ -443,6 +496,13 @@ choice
|
|||
Say Y here if you want the debug print routines to direct
|
||||
their output to the uart1 port on SiRFmarco devices.
|
||||
|
||||
config DEBUG_U300_UART
|
||||
bool "Kernel low-level debugging messages via U300 UART0"
|
||||
depends on ARCH_U300
|
||||
help
|
||||
Say Y here if you want the debug print routines to direct
|
||||
their output to the uart port on U300 devices.
|
||||
|
||||
config DEBUG_UX500_UART
|
||||
depends on ARCH_U8500
|
||||
bool "Use Ux500 UART for low-level debug"
|
||||
|
@ -532,7 +592,8 @@ config DEBUG_IMX_UART_PORT
|
|||
DEBUG_IMX35_UART || \
|
||||
DEBUG_IMX51_UART || \
|
||||
DEBUG_IMX53_UART || \
|
||||
DEBUG_IMX6Q_UART
|
||||
DEBUG_IMX6Q_UART || \
|
||||
DEBUG_IMX6SL_UART
|
||||
default 1
|
||||
depends on ARCH_MXC
|
||||
help
|
||||
|
@ -587,6 +648,32 @@ choice
|
|||
bool "Zoom2/3 UART"
|
||||
endchoice
|
||||
|
||||
choice
|
||||
prompt "Low-level debug console UART"
|
||||
depends on DEBUG_ROCKCHIP_UART
|
||||
|
||||
config DEBUG_RK29_UART0
|
||||
bool "RK29 UART0"
|
||||
|
||||
config DEBUG_RK29_UART1
|
||||
bool "RK29 UART1"
|
||||
|
||||
config DEBUG_RK29_UART2
|
||||
bool "RK29 UART2"
|
||||
|
||||
config DEBUG_RK3X_UART0
|
||||
bool "RK3X UART0"
|
||||
|
||||
config DEBUG_RK3X_UART1
|
||||
bool "RK3X UART1"
|
||||
|
||||
config DEBUG_RK3X_UART2
|
||||
bool "RK3X UART2"
|
||||
|
||||
config DEBUG_RK3X_UART3
|
||||
bool "RK3X UART3"
|
||||
endchoice
|
||||
|
||||
choice
|
||||
prompt "Low-level debug console UART"
|
||||
depends on DEBUG_LL && DEBUG_TEGRA_UART
|
||||
|
@ -631,18 +718,24 @@ config DEBUG_LL_INCLUDE
|
|||
DEBUG_IMX35_UART || \
|
||||
DEBUG_IMX51_UART || \
|
||||
DEBUG_IMX53_UART ||\
|
||||
DEBUG_IMX6Q_UART
|
||||
default "debug/mvebu.S" if DEBUG_MVEBU_UART
|
||||
DEBUG_IMX6Q_UART || \
|
||||
DEBUG_IMX6SL_UART
|
||||
default "debug/keystone.S" if DEBUG_KEYSTONE_UART0 || \
|
||||
DEBUG_KEYSTONE_UART1
|
||||
default "debug/mvebu.S" if DEBUG_MVEBU_UART || \
|
||||
DEBUG_MVEBU_UART_ALTERNATE
|
||||
default "debug/mxs.S" if DEBUG_IMX23_UART || DEBUG_IMX28_UART
|
||||
default "debug/nomadik.S" if DEBUG_NOMADIK_UART
|
||||
default "debug/omap2plus.S" if DEBUG_OMAP2PLUS_UART
|
||||
default "debug/picoxcell.S" if DEBUG_PICOXCELL_UART
|
||||
default "debug/pxa.S" if DEBUG_PXA_UART1 || DEBUG_MMP_UART2 || \
|
||||
DEBUG_MMP_UART3
|
||||
default "debug/rockchip.S" if DEBUG_ROCKCHIP_UART
|
||||
default "debug/sirf.S" if DEBUG_SIRFPRIMA2_UART1 || DEBUG_SIRFMARCO_UART1
|
||||
default "debug/socfpga.S" if DEBUG_SOCFPGA_UART
|
||||
default "debug/sunxi.S" if DEBUG_SUNXI_UART0 || DEBUG_SUNXI_UART1
|
||||
default "debug/tegra.S" if DEBUG_TEGRA_UART
|
||||
default "debug/u300.S" if DEBUG_U300_UART
|
||||
default "debug/ux500.S" if DEBUG_UX500_UART
|
||||
default "debug/vexpress.S" if DEBUG_VEXPRESS_UART0_DETECT || \
|
||||
DEBUG_VEXPRESS_UART0_CA9 || DEBUG_VEXPRESS_UART0_RS1
|
||||
|
|
|
@ -59,6 +59,7 @@ comma = ,
|
|||
# Note that GCC does not numerically define an architecture version
|
||||
# macro, but instead defines a whole series of macros which makes
|
||||
# testing for a specific architecture or later rather impossible.
|
||||
arch-$(CONFIG_CPU_32v7M) :=-D__LINUX_ARM_ARCH__=7 -march=armv7-m -Wa,-march=armv7-m
|
||||
arch-$(CONFIG_CPU_32v7) :=-D__LINUX_ARM_ARCH__=7 $(call cc-option,-march=armv7-a,-march=armv5t -Wa$(comma)-march=armv7-a)
|
||||
arch-$(CONFIG_CPU_32v6) :=-D__LINUX_ARM_ARCH__=6 $(call cc-option,-march=armv6,-march=armv5t -Wa$(comma)-march=armv6)
|
||||
# Only override the compiler option if ARMv6. The ARMv6K extensions are
|
||||
|
@ -171,6 +172,7 @@ machine-$(CONFIG_ARCH_PICOXCELL) += picoxcell
|
|||
machine-$(CONFIG_ARCH_SIRF) += prima2
|
||||
machine-$(CONFIG_ARCH_PXA) += pxa
|
||||
machine-$(CONFIG_ARCH_REALVIEW) += realview
|
||||
machine-$(CONFIG_ARCH_ROCKCHIP) += rockchip
|
||||
machine-$(CONFIG_ARCH_RPC) += rpc
|
||||
machine-$(CONFIG_ARCH_S3C24XX) += s3c24xx
|
||||
machine-$(CONFIG_ARCH_S3C64XX) += s3c64xx
|
||||
|
@ -194,9 +196,11 @@ machine-$(CONFIG_PLAT_SPEAR) += spear
|
|||
machine-$(CONFIG_ARCH_VIRT) += virt
|
||||
machine-$(CONFIG_ARCH_ZYNQ) += zynq
|
||||
machine-$(CONFIG_ARCH_SUNXI) += sunxi
|
||||
machine-$(CONFIG_ARCH_KEYSTONE) += keystone
|
||||
|
||||
# Platform directory name. This list is sorted alphanumerically
|
||||
# by CONFIG_* macro name.
|
||||
plat-$(CONFIG_ARCH_EXYNOS) += samsung
|
||||
plat-$(CONFIG_ARCH_OMAP) += omap
|
||||
plat-$(CONFIG_ARCH_S3C64XX) += samsung
|
||||
plat-$(CONFIG_PLAT_IOP) += iop
|
||||
|
|
|
@ -46,7 +46,7 @@ __image_start:
|
|||
__image_end:
|
||||
.long _got_end
|
||||
__load_base:
|
||||
.long CONFIG_MEMORY_START + 0x02000000 @ Load at 32Mb into SDRAM
|
||||
.long MEMORY_START + 0x02000000 @ Load at 32Mb into SDRAM
|
||||
__loaded:
|
||||
.long __continue
|
||||
.align
|
||||
|
@ -55,26 +55,9 @@ __tmp_stack:
|
|||
__continue:
|
||||
#endif /* CONFIG_ZBOOT_ROM_MMC || CONFIG_ZBOOT_ROM_SH_MOBILE_SDHI */
|
||||
|
||||
b 1f
|
||||
__atags:@ tag #1
|
||||
.long 12 @ tag->hdr.size = tag_size(tag_core);
|
||||
.long 0x54410001 @ tag->hdr.tag = ATAG_CORE;
|
||||
.long 0 @ tag->u.core.flags = 0;
|
||||
.long 0 @ tag->u.core.pagesize = 0;
|
||||
.long 0 @ tag->u.core.rootdev = 0;
|
||||
@ tag #2
|
||||
.long 8 @ tag->hdr.size = tag_size(tag_mem32);
|
||||
.long 0x54410002 @ tag->hdr.tag = ATAG_MEM;
|
||||
.long CONFIG_MEMORY_SIZE @ tag->u.mem.size = CONFIG_MEMORY_SIZE;
|
||||
.long CONFIG_MEMORY_START @ @ tag->u.mem.start = CONFIG_MEMORY_START;
|
||||
@ tag #3
|
||||
.long 0 @ tag->hdr.size = 0
|
||||
.long 0 @ tag->hdr.tag = ATAG_NONE;
|
||||
1:
|
||||
|
||||
/* Set board ID necessary for boot */
|
||||
ldr r7, 1f @ Set machine type register
|
||||
adr r8, __atags @ Set atag register
|
||||
mov r8, #0 @ pass null pointer as atag
|
||||
b 2f
|
||||
|
||||
1 : .long MACH_TYPE
|
||||
|
|
|
@ -64,6 +64,8 @@ dtb-$(CONFIG_ARCH_INTEGRATOR) += integratorap.dtb \
|
|||
integratorcp.dtb
|
||||
dtb-$(CONFIG_ARCH_LPC32XX) += ea3250.dtb phy3250.dtb
|
||||
dtb-$(CONFIG_ARCH_KIRKWOOD) += kirkwood-cloudbox.dtb \
|
||||
kirkwood-db-88f6281.dtb \
|
||||
kirkwood-db-88f6282.dtb \
|
||||
kirkwood-dns320.dtb \
|
||||
kirkwood-dns325.dtb \
|
||||
kirkwood-dockstar.dtb \
|
||||
|
@ -199,6 +201,7 @@ dtb-$(CONFIG_ARCH_TEGRA) += tegra20-harmony.dtb \
|
|||
tegra114-pluto.dtb
|
||||
dtb-$(CONFIG_ARCH_VERSATILE) += versatile-ab.dtb \
|
||||
versatile-pb.dtb
|
||||
dtb-$(CONFIG_ARCH_U300) += ste-u300.dtb
|
||||
dtb-$(CONFIG_ARCH_VEXPRESS) += vexpress-v2p-ca5s.dtb \
|
||||
vexpress-v2p-ca9.dtb \
|
||||
vexpress-v2p-ca15-tc1.dtb \
|
||||
|
|
|
@ -30,4 +30,12 @@ xtal {
|
|||
clock-frequency = <50000000>;
|
||||
};
|
||||
};
|
||||
|
||||
pcie@290000 {
|
||||
reset-gpio = <&pin_ctrl 5 0>;
|
||||
};
|
||||
|
||||
pcie@2a0000 {
|
||||
reset-gpio = <&pin_ctrl 22 0>;
|
||||
};
|
||||
};
|
||||
|
|
|
@ -113,7 +113,7 @@ spi {
|
|||
clock-names = "spi", "spi_busclk0";
|
||||
};
|
||||
|
||||
pinctrl {
|
||||
pin_ctrl: pinctrl {
|
||||
compatible = "samsung,exynos5440-pinctrl";
|
||||
reg = <0xE0000 0x1000>;
|
||||
interrupts = <0 37 0>, <0 38 0>, <0 39 0>, <0 40 0>,
|
||||
|
@ -216,4 +216,42 @@ rtc {
|
|||
clock-names = "rtc";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pcie@290000 {
|
||||
compatible = "samsung,exynos5440-pcie", "snps,dw-pcie";
|
||||
reg = <0x290000 0x1000
|
||||
0x270000 0x1000
|
||||
0x271000 0x40>;
|
||||
interrupts = <0 20 0>, <0 21 0>, <0 22 0>;
|
||||
clocks = <&clock 28>, <&clock 27>;
|
||||
clock-names = "pcie", "pcie_bus";
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
device_type = "pci";
|
||||
ranges = <0x00000800 0 0x40000000 0x40000000 0 0x00001000 /* configuration space */
|
||||
0x81000000 0 0 0x40001000 0 0x00010000 /* downstream I/O */
|
||||
0x82000000 0 0x40011000 0x40011000 0 0x1ffef000>; /* non-prefetchable memory */
|
||||
#interrupt-cells = <1>;
|
||||
interrupt-map-mask = <0 0 0 0>;
|
||||
interrupt-map = <0x0 0 &gic 53>;
|
||||
};
|
||||
|
||||
pcie@2a0000 {
|
||||
compatible = "samsung,exynos5440-pcie", "snps,dw-pcie";
|
||||
reg = <0x2a0000 0x1000
|
||||
0x272000 0x1000
|
||||
0x271040 0x40>;
|
||||
interrupts = <0 23 0>, <0 24 0>, <0 25 0>;
|
||||
clocks = <&clock 29>, <&clock 27>;
|
||||
clock-names = "pcie", "pcie_bus";
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
device_type = "pci";
|
||||
ranges = <0x00000800 0 0x60000000 0x60000000 0 0x00001000 /* configuration space */
|
||||
0x81000000 0 0 0x60001000 0 0x00010000 /* downstream I/O */
|
||||
0x82000000 0 0x60011000 0x60011000 0 0x1ffef000>; /* non-prefetchable memory */
|
||||
#interrupt-cells = <1>;
|
||||
interrupt-map-mask = <0 0 0 0>;
|
||||
interrupt-map = <0x0 0 &gic 56>;
|
||||
};
|
||||
};
|
||||
|
|
|
@ -39,6 +39,47 @@ pic: pic@14000000 {
|
|||
valid-mask = <0x003fffff>;
|
||||
};
|
||||
|
||||
pci: pciv3@62000000 {
|
||||
compatible = "v3,v360epc-pci";
|
||||
#interrupt-cells = <1>;
|
||||
#size-cells = <2>;
|
||||
#address-cells = <3>;
|
||||
reg = <0x62000000 0x10000>;
|
||||
interrupt-parent = <&pic>;
|
||||
interrupts = <17>; /* Bus error IRQ */
|
||||
ranges = <0x00000000 0 0x61000000 /* config space */
|
||||
0x61000000 0 0x00100000 /* 16 MiB @ 61000000 */
|
||||
0x01000000 0 0x0 /* I/O space */
|
||||
0x60000000 0 0x00100000 /* 16 MiB @ 60000000 */
|
||||
0x02000000 0 0x00000000 /* non-prefectable memory */
|
||||
0x40000000 0 0x10000000 /* 256 MiB @ 40000000 */
|
||||
0x42000000 0 0x10000000 /* prefetchable memory */
|
||||
0x50000000 0 0x10000000>; /* 256 MiB @ 50000000 */
|
||||
interrupt-map-mask = <0xf800 0 0 0x7>;
|
||||
interrupt-map = <
|
||||
/* IDSEL 9 */
|
||||
0x4800 0 0 1 &pic 13 /* INT A on slot 9 is irq 13 */
|
||||
0x4800 0 0 2 &pic 14 /* INT B on slot 9 is irq 14 */
|
||||
0x4800 0 0 3 &pic 15 /* INT C on slot 9 is irq 15 */
|
||||
0x4800 0 0 4 &pic 16 /* INT D on slot 9 is irq 16 */
|
||||
/* IDSEL 10 */
|
||||
0x5000 0 0 1 &pic 14 /* INT A on slot 10 is irq 14 */
|
||||
0x5000 0 0 2 &pic 15 /* INT B on slot 10 is irq 15 */
|
||||
0x5000 0 0 3 &pic 16 /* INT C on slot 10 is irq 16 */
|
||||
0x5000 0 0 4 &pic 13 /* INT D on slot 10 is irq 13 */
|
||||
/* IDSEL 11 */
|
||||
0x5800 0 0 1 &pic 15 /* INT A on slot 11 is irq 15 */
|
||||
0x5800 0 0 2 &pic 16 /* INT B on slot 11 is irq 16 */
|
||||
0x5800 0 0 3 &pic 13 /* INT C on slot 11 is irq 13 */
|
||||
0x5800 0 0 4 &pic 14 /* INT D on slot 11 is irq 14 */
|
||||
/* IDSEL 12 */
|
||||
0x6000 0 0 1 &pic 16 /* INT A on slot 12 is irq 16 */
|
||||
0x6000 0 0 2 &pic 13 /* INT B on slot 12 is irq 13 */
|
||||
0x6000 0 0 3 &pic 14 /* INT C on slot 12 is irq 14 */
|
||||
0x6000 0 0 4 &pic 15 /* INT D on slot 12 is irq 15 */
|
||||
>;
|
||||
};
|
||||
|
||||
fpga {
|
||||
/*
|
||||
* The Integator/AP predates the idea to have magic numbers
|
||||
|
|
|
@ -0,0 +1,117 @@
|
|||
/*
|
||||
* Copyright 2013 Texas Instruments, Inc.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
/include/ "skeleton.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Texas Instruments Keystone 2 SoC";
|
||||
compatible = "ti,keystone-evm";
|
||||
#address-cells = <2>;
|
||||
#size-cells = <2>;
|
||||
interrupt-parent = <&gic>;
|
||||
|
||||
aliases {
|
||||
serial0 = &uart0;
|
||||
};
|
||||
|
||||
memory {
|
||||
reg = <0x00000000 0x80000000 0x00000000 0x40000000>;
|
||||
};
|
||||
|
||||
cpus {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
interrupt-parent = <&gic>;
|
||||
|
||||
cpu@0 {
|
||||
compatible = "arm,cortex-a15";
|
||||
device_type = "cpu";
|
||||
reg = <0>;
|
||||
};
|
||||
|
||||
cpu@1 {
|
||||
compatible = "arm,cortex-a15";
|
||||
device_type = "cpu";
|
||||
reg = <1>;
|
||||
};
|
||||
|
||||
cpu@2 {
|
||||
compatible = "arm,cortex-a15";
|
||||
device_type = "cpu";
|
||||
reg = <2>;
|
||||
};
|
||||
|
||||
cpu@3 {
|
||||
compatible = "arm,cortex-a15";
|
||||
device_type = "cpu";
|
||||
reg = <3>;
|
||||
};
|
||||
};
|
||||
|
||||
gic: interrupt-controller {
|
||||
compatible = "arm,cortex-a15-gic";
|
||||
#interrupt-cells = <3>;
|
||||
#size-cells = <0>;
|
||||
#address-cells = <1>;
|
||||
interrupt-controller;
|
||||
reg = <0x0 0x02561000 0x0 0x1000>,
|
||||
<0x0 0x02562000 0x0 0x2000>;
|
||||
};
|
||||
|
||||
timer {
|
||||
compatible = "arm,armv7-timer";
|
||||
interrupts = <1 13 0xf08>,
|
||||
<1 14 0xf08>,
|
||||
<1 11 0xf08>,
|
||||
<1 10 0x308>;
|
||||
};
|
||||
|
||||
pmu {
|
||||
compatible = "arm,cortex-a15-pmu";
|
||||
interrupts = <0 20 0xf01>,
|
||||
<0 21 0xf01>,
|
||||
<0 22 0xf01>,
|
||||
<0 23 0xf01>;
|
||||
};
|
||||
|
||||
soc {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "ti,keystone","simple-bus";
|
||||
interrupt-parent = <&gic>;
|
||||
ranges = <0x0 0x0 0x0 0xc0000000>;
|
||||
|
||||
rstctrl: reset-controller {
|
||||
compatible = "ti,keystone-reset";
|
||||
reg = <0x023100e8 4>; /* pll reset control reg */
|
||||
};
|
||||
|
||||
uart0: serial@02530c00 {
|
||||
compatible = "ns16550a";
|
||||
current-speed = <115200>;
|
||||
reg-shift = <2>;
|
||||
reg-io-width = <4>;
|
||||
reg = <0x02530c00 0x100>;
|
||||
clock-frequency = <133120000>;
|
||||
interrupts = <0 277 0xf01>;
|
||||
};
|
||||
|
||||
uart1: serial@02531000 {
|
||||
compatible = "ns16550a";
|
||||
current-speed = <115200>;
|
||||
reg-shift = <2>;
|
||||
reg-io-width = <4>;
|
||||
reg = <0x02531000 0x100>;
|
||||
clock-frequency = <133120000>;
|
||||
interrupts = <0 280 0xf01>;
|
||||
};
|
||||
|
||||
};
|
||||
};
|
|
@ -40,5 +40,36 @@ pmx_sdio: pmx-sdio {
|
|||
marvell,function = "sdio";
|
||||
};
|
||||
};
|
||||
|
||||
pcie-controller {
|
||||
compatible = "marvell,kirkwood-pcie";
|
||||
status = "disabled";
|
||||
device_type = "pci";
|
||||
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
|
||||
bus-range = <0x00 0xff>;
|
||||
|
||||
ranges = <0x82000000 0 0x00040000 0x00040000 0 0x00002000 /* Port 0.0 registers */
|
||||
0x82000000 0 0xe0000000 0xe0000000 0 0x08000000 /* non-prefetchable memory */
|
||||
0x81000000 0 0 0xe8000000 0 0x00100000>; /* downstream I/O */
|
||||
|
||||
pcie@1,0 {
|
||||
device_type = "pci";
|
||||
assigned-addresses = <0x82000800 0 0x00040000 0 0x2000>;
|
||||
reg = <0x0800 0 0 0 0>;
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
#interrupt-cells = <1>;
|
||||
ranges;
|
||||
interrupt-map-mask = <0 0 0 0>;
|
||||
interrupt-map = <0 0 0 0 &intc 9>;
|
||||
marvell,pcie-port = <0>;
|
||||
marvell,pcie-lane = <0>;
|
||||
clocks = <&gate_clk 2>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
@ -65,5 +65,53 @@ i2c@11100 {
|
|||
clocks = <&gate_clk 7>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pcie-controller {
|
||||
compatible = "marvell,kirkwood-pcie";
|
||||
status = "disabled";
|
||||
device_type = "pci";
|
||||
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
|
||||
bus-range = <0x00 0xff>;
|
||||
|
||||
ranges = <0x82000000 0 0x00040000 0x00040000 0 0x00002000 /* Port 0.0 registers */
|
||||
0x82000000 0 0x00044000 0x00044000 0 0x00002000 /* Port 1.0 registers */
|
||||
0x82000000 0 0xe0000000 0xe0000000 0 0x08000000 /* non-prefetchable memory */
|
||||
0x81000000 0 0 0xe8000000 0 0x00100000>; /* downstream I/O */
|
||||
|
||||
pcie@1,0 {
|
||||
device_type = "pci";
|
||||
assigned-addresses = <0x82000800 0 0x00040000 0 0x2000>;
|
||||
reg = <0x0800 0 0 0 0>;
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
#interrupt-cells = <1>;
|
||||
ranges;
|
||||
interrupt-map-mask = <0 0 0 0>;
|
||||
interrupt-map = <0 0 0 0 &intc 9>;
|
||||
marvell,pcie-port = <0>;
|
||||
marvell,pcie-lane = <0>;
|
||||
clocks = <&gate_clk 2>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pcie@2,0 {
|
||||
device_type = "pci";
|
||||
assigned-addresses = <0x82001000 0 0x00044000 0 0x2000>;
|
||||
reg = <0x1000 0 0 0 0>;
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
#interrupt-cells = <1>;
|
||||
ranges;
|
||||
interrupt-map-mask = <0 0 0 0>;
|
||||
interrupt-map = <0 0 0 0 &intc 10>;
|
||||
marvell,pcie-port = <1>;
|
||||
marvell,pcie-lane = <0>;
|
||||
clocks = <&gate_clk 18>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
* Marvell DB-88F6281-BP Development Board Setup
|
||||
*
|
||||
* Saeed Bishara <saeed@marvell.com>
|
||||
* Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
|
||||
*
|
||||
* This file is licensed under the terms of the GNU General Public
|
||||
* License version 2. This program is licensed "as is" without any
|
||||
* warranty of any kind, whether express or implied.
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
|
||||
/include/ "kirkwood-db.dtsi"
|
||||
/include/ "kirkwood-6281.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Marvell DB-88F6281-BP Development Board";
|
||||
compatible = "marvell,db-88f6281-bp", "marvell,kirkwood-88f6281", "marvell,kirkwood";
|
||||
|
||||
ocp@f1000000 {
|
||||
pcie-controller {
|
||||
status = "okay";
|
||||
|
||||
pcie@1,0 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
|
@ -0,0 +1,34 @@
|
|||
/*
|
||||
* Marvell DB-88F6282-BP Development Board Setup
|
||||
*
|
||||
* Saeed Bishara <saeed@marvell.com>
|
||||
* Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
|
||||
*
|
||||
* This file is licensed under the terms of the GNU General Public
|
||||
* License version 2. This program is licensed "as is" without any
|
||||
* warranty of any kind, whether express or implied.
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
|
||||
/include/ "kirkwood-db.dtsi"
|
||||
/include/ "kirkwood-6282.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Marvell DB-88F6282-BP Development Board";
|
||||
compatible = "marvell,db-88f6282-bp", "marvell,kirkwood-88f6282", "marvell,kirkwood";
|
||||
|
||||
ocp@f1000000 {
|
||||
pcie-controller {
|
||||
status = "okay";
|
||||
|
||||
pcie@1,0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
pcie@2,0 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
|
@ -0,0 +1,89 @@
|
|||
/*
|
||||
* Marvell DB-{88F6281,88F6282}-BP Development Board Setup
|
||||
*
|
||||
* Saeed Bishara <saeed@marvell.com>
|
||||
* Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
|
||||
*
|
||||
* This file is licensed under the terms of the GNU General Public
|
||||
* License version 2. This program is licensed "as is" without any
|
||||
* warranty of any kind, whether express or implied.
|
||||
*
|
||||
* This file contains the definitions that are common between the 6281
|
||||
* and 6282 variants of the Marvell Kirkwood Development Board.
|
||||
*/
|
||||
|
||||
/include/ "kirkwood.dtsi"
|
||||
|
||||
/ {
|
||||
memory {
|
||||
device_type = "memory";
|
||||
reg = <0x00000000 0x20000000>; /* 512 MB */
|
||||
};
|
||||
|
||||
chosen {
|
||||
bootargs = "console=ttyS0,115200n8 earlyprintk";
|
||||
};
|
||||
|
||||
ocp@f1000000 {
|
||||
pinctrl@10000 {
|
||||
pmx_sdio_gpios: pmx-sdio-gpios {
|
||||
marvell,pins = "mpp37", "mpp38";
|
||||
marvell,function = "gpio";
|
||||
};
|
||||
};
|
||||
|
||||
serial@12000 {
|
||||
pinctrl-0 = <&pmx_uart0>;
|
||||
pinctrl-names = "default";
|
||||
clock-frequency = <200000000>;
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
nand@3000000 {
|
||||
pinctrl-0 = <&pmx_nand>;
|
||||
pinctrl-names = "default";
|
||||
chip-delay = <25>;
|
||||
status = "okay";
|
||||
|
||||
partition@0 {
|
||||
label = "uboot";
|
||||
reg = <0x0 0x100000>;
|
||||
};
|
||||
|
||||
partition@100000 {
|
||||
label = "uImage";
|
||||
reg = <0x100000 0x400000>;
|
||||
};
|
||||
|
||||
partition@500000 {
|
||||
label = "root";
|
||||
reg = <0x500000 0x1fb00000>;
|
||||
};
|
||||
};
|
||||
|
||||
sata@80000 {
|
||||
nr-ports = <2>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
ehci@50000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
mvsdio@90000 {
|
||||
pinctrl-0 = <&pmx_sdio_gpios>;
|
||||
pinctrl-names = "default";
|
||||
wp-gpios = <&gpio1 5 0>;
|
||||
cd-gpios = <&gpio1 6 0>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
pcie-controller {
|
||||
status = "okay";
|
||||
|
||||
pcie@1,0 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
|
@ -109,6 +109,14 @@ partition@980000 {
|
|||
reg = <0x980000 0x1f400000>;
|
||||
};
|
||||
};
|
||||
|
||||
pcie-controller {
|
||||
status = "okay";
|
||||
|
||||
pcie@1,0 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
gpio-leds {
|
||||
|
|
|
@ -139,6 +139,14 @@ mvsdio@90000 {
|
|||
cd-gpios = <&gpio1 15 0>;
|
||||
/* No WP GPIO */
|
||||
};
|
||||
|
||||
pcie-controller {
|
||||
status = "okay";
|
||||
|
||||
pcie@1,0 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
gpio-leds {
|
||||
|
|
|
@ -111,6 +111,14 @@ sata@80000 {
|
|||
status = "okay";
|
||||
nr-ports = <2>;
|
||||
};
|
||||
|
||||
pcie-controller {
|
||||
status = "okay";
|
||||
|
||||
pcie@1,0 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
gpio-leds {
|
||||
|
|
|
@ -176,6 +176,14 @@ partition@5040000 {
|
|||
reg = <0x5040000 0x2fc0000>;
|
||||
};
|
||||
};
|
||||
|
||||
pcie-controller {
|
||||
status = "okay";
|
||||
|
||||
pcie@1,0 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
gpio_keys {
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
/dts-v1/;
|
||||
|
||||
/include/ "kirkwood-ts219.dtsi"
|
||||
/include/ "kirkwood.dtsi"
|
||||
/include/ "kirkwood-6281.dtsi"
|
||||
/include/ "kirkwood-ts219.dtsi"
|
||||
|
||||
/ {
|
||||
ocp@f1000000 {
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
/dts-v1/;
|
||||
|
||||
/include/ "kirkwood-ts219.dtsi"
|
||||
/include/ "kirkwood.dtsi"
|
||||
/include/ "kirkwood-6282.dtsi"
|
||||
/include/ "kirkwood-ts219.dtsi"
|
||||
|
||||
/ {
|
||||
ocp@f1000000 {
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
/include/ "kirkwood.dtsi"
|
||||
|
||||
/ {
|
||||
model = "QNAP TS219 family";
|
||||
compatible = "qnap,ts219", "marvell,kirkwood";
|
||||
|
@ -74,5 +72,12 @@ sata@80000 {
|
|||
status = "okay";
|
||||
nr-ports = <2>;
|
||||
};
|
||||
pcie-controller {
|
||||
status = "okay";
|
||||
|
||||
pcie@1,0 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
@ -19,6 +19,7 @@ intc: interrupt-controller {
|
|||
ocp@f1000000 {
|
||||
compatible = "simple-bus";
|
||||
ranges = <0x00000000 0xf1000000 0x4000000
|
||||
0xe0000000 0xe0000000 0x8100000 /* PCIE */
|
||||
0xf5000000 0xf5000000 0x0000400>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
|
|
@ -0,0 +1,299 @@
|
|||
/*
|
||||
* Copyright (c) 2013 MundoReader S.L.
|
||||
* Author: Heiko Stuebner <heiko@sntech.de>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
/ {
|
||||
clocks {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
|
||||
/*
|
||||
* This is a dummy clock, to be used as placeholder on
|
||||
* other mux clocks when a specific parent clock is not
|
||||
* yet implemented. It should be dropped when the driver
|
||||
* is complete.
|
||||
*/
|
||||
dummy: dummy {
|
||||
compatible = "fixed-clock";
|
||||
clock-frequency = <0>;
|
||||
#clock-cells = <0>;
|
||||
};
|
||||
|
||||
xin24m: xin24m {
|
||||
compatible = "fixed-clock";
|
||||
clock-frequency = <24000000>;
|
||||
#clock-cells = <0>;
|
||||
};
|
||||
|
||||
dummy48m: dummy48m {
|
||||
compatible = "fixed-clock";
|
||||
clock-frequency = <48000000>;
|
||||
#clock-cells = <0>;
|
||||
};
|
||||
|
||||
dummy150m: dummy150m {
|
||||
compatible = "fixed-clock";
|
||||
clock-frequency = <150000000>;
|
||||
#clock-cells = <0>;
|
||||
};
|
||||
|
||||
clk_gates0: gate-clk@200000d0 {
|
||||
compatible = "rockchip,rk2928-gate-clk";
|
||||
reg = <0x200000d0 0x4>;
|
||||
clocks = <&dummy>, <&dummy>,
|
||||
<&dummy>, <&dummy>,
|
||||
<&dummy>, <&dummy>,
|
||||
<&dummy>, <&dummy>,
|
||||
<&dummy>, <&dummy>,
|
||||
<&dummy>, <&dummy>,
|
||||
<&dummy>, <&dummy>,
|
||||
<&dummy>, <&dummy>;
|
||||
|
||||
clock-output-names =
|
||||
"gate_core_periph", "gate_cpu_gpll",
|
||||
"gate_ddrphy", "gate_aclk_cpu",
|
||||
"gate_hclk_cpu", "gate_pclk_cpu",
|
||||
"gate_atclk_cpu", "gate_i2s0",
|
||||
"gate_i2s0_frac", "gate_i2s1",
|
||||
"gate_i2s1_frac", "gate_i2s2",
|
||||
"gate_i2s2_frac", "gate_spdif",
|
||||
"gate_spdif_frac", "gate_testclk";
|
||||
|
||||
#clock-cells = <1>;
|
||||
};
|
||||
|
||||
clk_gates1: gate-clk@200000d4 {
|
||||
compatible = "rockchip,rk2928-gate-clk";
|
||||
reg = <0x200000d4 0x4>;
|
||||
clocks = <&xin24m>, <&xin24m>,
|
||||
<&xin24m>, <&dummy>,
|
||||
<&dummy>, <&xin24m>,
|
||||
<&xin24m>, <&dummy>,
|
||||
<&xin24m>, <&dummy>,
|
||||
<&xin24m>, <&dummy>,
|
||||
<&xin24m>, <&dummy>,
|
||||
<&xin24m>, <&dummy>;
|
||||
|
||||
clock-output-names =
|
||||
"gate_timer0", "gate_timer1",
|
||||
"gate_timer2", "gate_jtag",
|
||||
"gate_aclk_lcdc1_src", "gate_otgphy0",
|
||||
"gate_otgphy1", "gate_ddr_gpll",
|
||||
"gate_uart0", "gate_frac_uart0",
|
||||
"gate_uart1", "gate_frac_uart1",
|
||||
"gate_uart2", "gate_frac_uart2",
|
||||
"gate_uart3", "gate_frac_uart3";
|
||||
|
||||
#clock-cells = <1>;
|
||||
};
|
||||
|
||||
clk_gates2: gate-clk@200000d8 {
|
||||
compatible = "rockchip,rk2928-gate-clk";
|
||||
reg = <0x200000d8 0x4>;
|
||||
clocks = <&clk_gates2 1>, <&dummy>,
|
||||
<&dummy>, <&dummy>,
|
||||
<&dummy>, <&dummy>,
|
||||
<&clk_gates2 3>, <&dummy>,
|
||||
<&dummy>, <&dummy>,
|
||||
<&dummy>, <&dummy48m>,
|
||||
<&dummy>, <&dummy48m>,
|
||||
<&dummy>, <&dummy>;
|
||||
|
||||
clock-output-names =
|
||||
"gate_periph_src", "gate_aclk_periph",
|
||||
"gate_hclk_periph", "gate_pclk_periph",
|
||||
"gate_smc", "gate_mac",
|
||||
"gate_hsadc", "gate_hsadc_frac",
|
||||
"gate_saradc", "gate_spi0",
|
||||
"gate_spi1", "gate_mmc0",
|
||||
"gate_mac_lbtest", "gate_mmc1",
|
||||
"gate_emmc", "gate_tsadc";
|
||||
|
||||
#clock-cells = <1>;
|
||||
};
|
||||
|
||||
clk_gates3: gate-clk@200000dc {
|
||||
compatible = "rockchip,rk2928-gate-clk";
|
||||
reg = <0x200000dc 0x4>;
|
||||
clocks = <&dummy>, <&dummy>,
|
||||
<&dummy>, <&dummy>,
|
||||
<&dummy>, <&dummy>,
|
||||
<&dummy>, <&dummy>,
|
||||
<&dummy>, <&dummy>,
|
||||
<&dummy>, <&dummy>,
|
||||
<&dummy>, <&dummy>,
|
||||
<&dummy>, <&dummy>;
|
||||
|
||||
clock-output-names =
|
||||
"gate_aclk_lcdc0_src", "gate_dclk_lcdc0",
|
||||
"gate_dclk_lcdc1", "gate_pclkin_cif0",
|
||||
"gate_pclkin_cif1", "reserved",
|
||||
"reserved", "gate_cif0_out",
|
||||
"gate_cif1_out", "gate_aclk_vepu",
|
||||
"gate_hclk_vepu", "gate_aclk_vdpu",
|
||||
"gate_hclk_vdpu", "gate_gpu_src",
|
||||
"reserved", "gate_xin27m";
|
||||
|
||||
#clock-cells = <1>;
|
||||
};
|
||||
|
||||
clk_gates4: gate-clk@200000e0 {
|
||||
compatible = "rockchip,rk2928-gate-clk";
|
||||
reg = <0x200000e0 0x4>;
|
||||
clocks = <&clk_gates2 2>, <&clk_gates2 3>,
|
||||
<&clk_gates2 1>, <&clk_gates2 1>,
|
||||
<&clk_gates2 1>, <&clk_gates2 2>,
|
||||
<&clk_gates2 2>, <&clk_gates2 2>,
|
||||
<&clk_gates0 4>, <&clk_gates0 4>,
|
||||
<&clk_gates0 3>, <&clk_gates0 3>,
|
||||
<&clk_gates0 3>, <&clk_gates2 3>,
|
||||
<&clk_gates0 4>;
|
||||
|
||||
clock-output-names =
|
||||
"gate_hclk_peri_axi_matrix", "gate_pclk_peri_axi_matrix",
|
||||
"gate_aclk_cpu_peri", "gate_aclk_peri_axi_matrix",
|
||||
"gate_aclk_pei_niu", "gate_hclk_usb_peri",
|
||||
"gate_hclk_peri_ahb_arbi", "gate_hclk_emem_peri",
|
||||
"gate_hclk_cpubus", "gate_hclk_ahb2apb",
|
||||
"gate_aclk_strc_sys", "gate_aclk_l2mem_con",
|
||||
"gate_aclk_intmem", "gate_pclk_tsadc",
|
||||
"gate_hclk_hdmi";
|
||||
|
||||
#clock-cells = <1>;
|
||||
};
|
||||
|
||||
clk_gates5: gate-clk@200000e4 {
|
||||
compatible = "rockchip,rk2928-gate-clk";
|
||||
reg = <0x200000e4 0x4>;
|
||||
clocks = <&clk_gates0 3>, <&clk_gates2 1>,
|
||||
<&clk_gates0 5>, <&clk_gates0 5>,
|
||||
<&clk_gates0 5>, <&clk_gates0 5>,
|
||||
<&clk_gates0 4>, <&clk_gates0 5>,
|
||||
<&clk_gates2 1>, <&clk_gates2 2>,
|
||||
<&clk_gates2 2>, <&clk_gates2 2>,
|
||||
<&clk_gates2 2>, <&clk_gates4 5>,
|
||||
<&clk_gates4 5>, <&dummy>;
|
||||
|
||||
clock-output-names =
|
||||
"gate_aclk_dmac1", "gate_aclk_dmac2",
|
||||
"gate_pclk_efuse", "gate_pclk_tzpc",
|
||||
"gate_pclk_grf", "gate_pclk_pmu",
|
||||
"gate_hclk_rom", "gate_pclk_ddrupctl",
|
||||
"gate_aclk_smc", "gate_hclk_nandc",
|
||||
"gate_hclk_mmc0", "gate_hclk_mmc1",
|
||||
"gate_hclk_emmc", "gate_hclk_otg0",
|
||||
"gate_hclk_otg1", "gate_aclk_gpu";
|
||||
|
||||
#clock-cells = <1>;
|
||||
};
|
||||
|
||||
clk_gates6: gate-clk@200000e8 {
|
||||
compatible = "rockchip,rk2928-gate-clk";
|
||||
reg = <0x200000e8 0x4>;
|
||||
clocks = <&clk_gates3 0>, <&clk_gates0 4>,
|
||||
<&clk_gates0 4>, <&clk_gates1 4>,
|
||||
<&clk_gates0 4>, <&clk_gates3 0>,
|
||||
<&clk_gates0 4>, <&clk_gates1 4>,
|
||||
<&clk_gates3 0>, <&clk_gates0 4>,
|
||||
<&clk_gates0 4>, <&clk_gates1 4>,
|
||||
<&clk_gates0 4>, <&clk_gates3 0>,
|
||||
<&dummy>, <&dummy>;
|
||||
|
||||
clock-output-names =
|
||||
"gate_aclk_lcdc0", "gate_hclk_lcdc0",
|
||||
"gate_hclk_lcdc1", "gate_aclk_lcdc1",
|
||||
"gate_hclk_cif0", "gate_aclk_cif0",
|
||||
"gate_hclk_cif1", "gate_aclk_cif1",
|
||||
"gate_aclk_ipp", "gate_hclk_ipp",
|
||||
"gate_hclk_rga", "gate_aclk_rga",
|
||||
"gate_hclk_vio_bus", "gate_aclk_vio0",
|
||||
"gate_aclk_vcodec", "gate_shclk_vio_h2h";
|
||||
|
||||
#clock-cells = <1>;
|
||||
};
|
||||
|
||||
clk_gates7: gate-clk@200000ec {
|
||||
compatible = "rockchip,rk2928-gate-clk";
|
||||
reg = <0x200000ec 0x4>;
|
||||
clocks = <&clk_gates2 2>, <&clk_gates0 4>,
|
||||
<&clk_gates0 4>, <&clk_gates0 4>,
|
||||
<&clk_gates0 4>, <&clk_gates2 2>,
|
||||
<&clk_gates2 2>, <&clk_gates0 5>,
|
||||
<&clk_gates0 5>, <&clk_gates0 5>,
|
||||
<&clk_gates0 5>, <&clk_gates2 3>,
|
||||
<&clk_gates2 3>, <&clk_gates2 3>,
|
||||
<&clk_gates2 3>, <&clk_gates2 3>;
|
||||
|
||||
clock-output-names =
|
||||
"gate_hclk_emac", "gate_hclk_spdif",
|
||||
"gate_hclk_i2s0_2ch", "gate_hclk_i2s1_2ch",
|
||||
"gate_hclk_i2s_8ch", "gate_hclk_hsadc",
|
||||
"gate_hclk_pidf", "gate_pclk_timer0",
|
||||
"gate_pclk_timer1", "gate_pclk_timer2",
|
||||
"gate_pclk_pwm01", "gate_pclk_pwm23",
|
||||
"gate_pclk_spi0", "gate_pclk_spi1",
|
||||
"gate_pclk_saradc", "gate_pclk_wdt";
|
||||
|
||||
#clock-cells = <1>;
|
||||
};
|
||||
|
||||
clk_gates8: gate-clk@200000f0 {
|
||||
compatible = "rockchip,rk2928-gate-clk";
|
||||
reg = <0x200000f0 0x4>;
|
||||
clocks = <&clk_gates0 5>, <&clk_gates0 5>,
|
||||
<&clk_gates2 3>, <&clk_gates2 3>,
|
||||
<&clk_gates0 5>, <&clk_gates0 5>,
|
||||
<&clk_gates2 3>, <&clk_gates2 3>,
|
||||
<&clk_gates2 3>, <&clk_gates0 5>,
|
||||
<&clk_gates0 5>, <&clk_gates0 5>,
|
||||
<&clk_gates2 3>, <&clk_gates2 3>,
|
||||
<&dummy>, <&clk_gates0 5>;
|
||||
|
||||
clock-output-names =
|
||||
"gate_pclk_uart0", "gate_pclk_uart1",
|
||||
"gate_pclk_uart2", "gate_pclk_uart3",
|
||||
"gate_pclk_i2c0", "gate_pclk_i2c1",
|
||||
"gate_pclk_i2c2", "gate_pclk_i2c3",
|
||||
"gate_pclk_i2c4", "gate_pclk_gpio0",
|
||||
"gate_pclk_gpio1", "gate_pclk_gpio2",
|
||||
"gate_pclk_gpio3", "gate_pclk_gpio4",
|
||||
"reserved", "gate_pclk_gpio6";
|
||||
|
||||
#clock-cells = <1>;
|
||||
};
|
||||
|
||||
clk_gates9: gate-clk@200000f4 {
|
||||
compatible = "rockchip,rk2928-gate-clk";
|
||||
reg = <0x200000f4 0x4>;
|
||||
clocks = <&dummy>, <&clk_gates0 5>,
|
||||
<&dummy>, <&dummy>,
|
||||
<&dummy>, <&clk_gates1 4>,
|
||||
<&clk_gates0 5>, <&dummy>,
|
||||
<&dummy>, <&dummy>,
|
||||
<&dummy>;
|
||||
|
||||
clock-output-names =
|
||||
"gate_clk_core_dbg", "gate_pclk_dbg",
|
||||
"gate_clk_trace", "gate_atclk",
|
||||
"gate_clk_l2c", "gate_aclk_vio1",
|
||||
"gate_pclk_publ", "gate_aclk_intmem0",
|
||||
"gate_aclk_intmem1", "gate_aclk_intmem2",
|
||||
"gate_aclk_intmem3";
|
||||
|
||||
#clock-cells = <1>;
|
||||
};
|
||||
};
|
||||
|
||||
};
|
|
@ -0,0 +1,390 @@
|
|||
/*
|
||||
* Copyright (c) 2013 MundoReader S.L.
|
||||
* Author: Heiko Stuebner <heiko@sntech.de>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
#include <dt-bindings/interrupt-controller/irq.h>
|
||||
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||
#include <dt-bindings/pinctrl/rockchip.h>
|
||||
#include "skeleton.dtsi"
|
||||
#include "rk3066a-clocks.dtsi"
|
||||
|
||||
/ {
|
||||
compatible = "rockchip,rk3066a";
|
||||
interrupt-parent = <&gic>;
|
||||
|
||||
cpus {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
cpu@0 {
|
||||
device_type = "cpu";
|
||||
compatible = "arm,cortex-a9";
|
||||
next-level-cache = <&L2>;
|
||||
reg = <0x0>;
|
||||
};
|
||||
cpu@1 {
|
||||
device_type = "cpu";
|
||||
compatible = "arm,cortex-a9";
|
||||
next-level-cache = <&L2>;
|
||||
reg = <0x1>;
|
||||
};
|
||||
};
|
||||
|
||||
soc {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "simple-bus";
|
||||
ranges;
|
||||
|
||||
gic: interrupt-controller@1013d000 {
|
||||
compatible = "arm,cortex-a9-gic";
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <3>;
|
||||
reg = <0x1013d000 0x1000>,
|
||||
<0x1013c100 0x0100>;
|
||||
};
|
||||
|
||||
L2: l2-cache-controller@10138000 {
|
||||
compatible = "arm,pl310-cache";
|
||||
reg = <0x10138000 0x1000>;
|
||||
cache-unified;
|
||||
cache-level = <2>;
|
||||
};
|
||||
|
||||
local-timer@1013c600 {
|
||||
compatible = "arm,cortex-a9-twd-timer";
|
||||
reg = <0x1013c600 0x20>;
|
||||
interrupts = <GIC_PPI 13 0x304>;
|
||||
clocks = <&dummy150m>;
|
||||
};
|
||||
|
||||
timer@20038000 {
|
||||
compatible = "snps,dw-apb-timer-osc";
|
||||
reg = <0x20038000 0x100>;
|
||||
interrupts = <GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk_gates1 0>, <&clk_gates7 7>;
|
||||
clock-names = "timer", "pclk";
|
||||
};
|
||||
|
||||
timer@2003a000 {
|
||||
compatible = "snps,dw-apb-timer-osc";
|
||||
reg = <0x2003a000 0x100>;
|
||||
interrupts = <GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk_gates1 1>, <&clk_gates7 8>;
|
||||
clock-names = "timer", "pclk";
|
||||
};
|
||||
|
||||
timer@2000e000 {
|
||||
compatible = "snps,dw-apb-timer-osc";
|
||||
reg = <0x2000e000 0x100>;
|
||||
interrupts = <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk_gates1 2>, <&clk_gates7 9>;
|
||||
clock-names = "timer", "pclk";
|
||||
};
|
||||
|
||||
pinctrl@20008000 {
|
||||
compatible = "rockchip,rk3066a-pinctrl";
|
||||
reg = <0x20008000 0x150>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
|
||||
gpio0: gpio0@20034000 {
|
||||
compatible = "rockchip,gpio-bank";
|
||||
reg = <0x20034000 0x100>;
|
||||
interrupts = <GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk_gates8 9>;
|
||||
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
};
|
||||
|
||||
gpio1: gpio1@2003c000 {
|
||||
compatible = "rockchip,gpio-bank";
|
||||
reg = <0x2003c000 0x100>;
|
||||
interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk_gates8 10>;
|
||||
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
};
|
||||
|
||||
gpio2: gpio2@2003e000 {
|
||||
compatible = "rockchip,gpio-bank";
|
||||
reg = <0x2003e000 0x100>;
|
||||
interrupts = <GIC_SPI 56 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk_gates8 11>;
|
||||
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
};
|
||||
|
||||
gpio3: gpio3@20080000 {
|
||||
compatible = "rockchip,gpio-bank";
|
||||
reg = <0x20080000 0x100>;
|
||||
interrupts = <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk_gates8 12>;
|
||||
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
};
|
||||
|
||||
gpio4: gpio4@20084000 {
|
||||
compatible = "rockchip,gpio-bank";
|
||||
reg = <0x20084000 0x100>;
|
||||
interrupts = <GIC_SPI 58 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk_gates8 13>;
|
||||
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
};
|
||||
|
||||
gpio6: gpio6@2000a000 {
|
||||
compatible = "rockchip,gpio-bank";
|
||||
reg = <0x2000a000 0x100>;
|
||||
interrupts = <GIC_SPI 60 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk_gates8 15>;
|
||||
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
};
|
||||
|
||||
pcfg_pull_default: pcfg_pull_default {
|
||||
bias-pull-pin-default;
|
||||
};
|
||||
|
||||
pcfg_pull_none: pcfg_pull_none {
|
||||
bias-disable;
|
||||
};
|
||||
|
||||
uart0 {
|
||||
uart0_xfer: uart0-xfer {
|
||||
rockchip,pins = <RK_GPIO1 0 RK_FUNC_1 &pcfg_pull_default>,
|
||||
<RK_GPIO1 1 RK_FUNC_1 &pcfg_pull_default>;
|
||||
rockchip,config = <&pcfg_pull_default>;
|
||||
};
|
||||
|
||||
uart0_cts: uart0-cts {
|
||||
rockchip,pins = <RK_GPIO1 2 RK_FUNC_1 &pcfg_pull_default>;
|
||||
rockchip,config = <&pcfg_pull_default>;
|
||||
};
|
||||
|
||||
uart0_rts: uart0-rts {
|
||||
rockchip,pins = <RK_GPIO1 3 RK_FUNC_1 &pcfg_pull_default>;
|
||||
rockchip,config = <&pcfg_pull_default>;
|
||||
};
|
||||
};
|
||||
|
||||
uart1 {
|
||||
uart1_xfer: uart1-xfer {
|
||||
rockchip,pins = <RK_GPIO1 4 RK_FUNC_1 &pcfg_pull_default>,
|
||||
<RK_GPIO1 5 RK_FUNC_1 &pcfg_pull_default>;
|
||||
rockchip,config = <&pcfg_pull_default>;
|
||||
};
|
||||
|
||||
uart1_cts: uart1-cts {
|
||||
rockchip,pins = <RK_GPIO1 6 RK_FUNC_1 &pcfg_pull_default>;
|
||||
rockchip,config = <&pcfg_pull_default>;
|
||||
};
|
||||
|
||||
uart1_rts: uart1-rts {
|
||||
rockchip,pins = <RK_GPIO1 7 RK_FUNC_1 &pcfg_pull_default>;
|
||||
rockchip,config = <&pcfg_pull_default>;
|
||||
};
|
||||
};
|
||||
|
||||
uart2 {
|
||||
uart2_xfer: uart2-xfer {
|
||||
rockchip,pins = <RK_GPIO1 8 RK_FUNC_1 &pcfg_pull_default>,
|
||||
<RK_GPIO1 9 RK_FUNC_1 &pcfg_pull_default>;
|
||||
rockchip,config = <&pcfg_pull_default>;
|
||||
};
|
||||
/* no rts / cts for uart2 */
|
||||
};
|
||||
|
||||
uart3 {
|
||||
uart3_xfer: uart3-xfer {
|
||||
rockchip,pins = <RK_GPIO3 27 RK_FUNC_1 &pcfg_pull_default>,
|
||||
<RK_GPIO3 28 RK_FUNC_1 &pcfg_pull_default>;
|
||||
rockchip,config = <&pcfg_pull_default>;
|
||||
};
|
||||
|
||||
uart3_cts: uart3-cts {
|
||||
rockchip,pins = <RK_GPIO3 29 RK_FUNC_1 &pcfg_pull_default>;
|
||||
rockchip,config = <&pcfg_pull_default>;
|
||||
};
|
||||
|
||||
uart3_rts: uart3-rts {
|
||||
rockchip,pins = <RK_GPIO3 30 RK_FUNC_1 &pcfg_pull_default>;
|
||||
rockchip,config = <&pcfg_pull_default>;
|
||||
};
|
||||
};
|
||||
|
||||
sd0 {
|
||||
sd0_clk: sd0-clk {
|
||||
rockchip,pins = <RK_GPIO3 8 RK_FUNC_1 &pcfg_pull_default>;
|
||||
rockchip,config = <&pcfg_pull_default>;
|
||||
};
|
||||
|
||||
sd0_cmd: sd0-cmd {
|
||||
rockchip,pins = <RK_GPIO3 9 RK_FUNC_1 &pcfg_pull_default>;
|
||||
rockchip,config = <&pcfg_pull_default>;
|
||||
};
|
||||
|
||||
sd0_cd: sd0-cd {
|
||||
rockchip,pins = <RK_GPIO3 14 RK_FUNC_1 &pcfg_pull_default>;
|
||||
rockchip,config = <&pcfg_pull_default>;
|
||||
};
|
||||
|
||||
sd0_wp: sd0-wp {
|
||||
rockchip,pins = <RK_GPIO3 15 RK_FUNC_1 &pcfg_pull_default>;
|
||||
rockchip,config = <&pcfg_pull_default>;
|
||||
};
|
||||
|
||||
sd0_bus1: sd0-bus-width1 {
|
||||
rockchip,pins = <RK_GPIO3 10 RK_FUNC_1 &pcfg_pull_default>;
|
||||
rockchip,config = <&pcfg_pull_default>;
|
||||
};
|
||||
|
||||
sd0_bus4: sd0-bus-width4 {
|
||||
rockchip,pins = <RK_GPIO3 10 RK_FUNC_1 &pcfg_pull_default>,
|
||||
<RK_GPIO3 11 RK_FUNC_1 &pcfg_pull_default>,
|
||||
<RK_GPIO3 12 RK_FUNC_1 &pcfg_pull_default>,
|
||||
<RK_GPIO3 13 RK_FUNC_1 &pcfg_pull_default>;
|
||||
rockchip,config = <&pcfg_pull_default>;
|
||||
};
|
||||
};
|
||||
|
||||
sd1 {
|
||||
sd1_clk: sd1-clk {
|
||||
rockchip,pins = <RK_GPIO3 21 RK_FUNC_1 &pcfg_pull_default>;
|
||||
rockchip,config = <&pcfg_pull_default>;
|
||||
};
|
||||
|
||||
sd1_cmd: sd1-cmd {
|
||||
rockchip,pins = <RK_GPIO3 16 RK_FUNC_1 &pcfg_pull_default>;
|
||||
rockchip,config = <&pcfg_pull_default>;
|
||||
};
|
||||
|
||||
sd1_cd: sd1-cd {
|
||||
rockchip,pins = <RK_GPIO3 22 RK_FUNC_1 &pcfg_pull_default>;
|
||||
rockchip,config = <&pcfg_pull_default>;
|
||||
};
|
||||
|
||||
sd1_wp: sd1-wp {
|
||||
rockchip,pins = <RK_GPIO3 23 RK_FUNC_1 &pcfg_pull_default>;
|
||||
rockchip,config = <&pcfg_pull_default>;
|
||||
};
|
||||
|
||||
sd1_bus1: sd1-bus-width1 {
|
||||
rockchip,pins = <RK_GPIO3 17 RK_FUNC_1 &pcfg_pull_default>;
|
||||
rockchip,config = <&pcfg_pull_default>;
|
||||
};
|
||||
|
||||
sd1_bus4: sd1-bus-width4 {
|
||||
rockchip,pins = <RK_GPIO3 17 RK_FUNC_1 &pcfg_pull_default>,
|
||||
<RK_GPIO3 18 RK_FUNC_1 &pcfg_pull_default>,
|
||||
<RK_GPIO3 19 RK_FUNC_1 &pcfg_pull_default>,
|
||||
<RK_GPIO3 20 RK_FUNC_1 &pcfg_pull_default>;
|
||||
rockchip,config = <&pcfg_pull_default>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
uart0: serial@10124000 {
|
||||
compatible = "snps,dw-apb-uart";
|
||||
reg = <0x10124000 0x400>;
|
||||
interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>;
|
||||
reg-shift = <2>;
|
||||
reg-io-width = <1>;
|
||||
clocks = <&clk_gates1 8>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uart1: serial@10126000 {
|
||||
compatible = "snps,dw-apb-uart";
|
||||
reg = <0x10126000 0x400>;
|
||||
interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>;
|
||||
reg-shift = <2>;
|
||||
reg-io-width = <1>;
|
||||
clocks = <&clk_gates1 10>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uart2: serial@20064000 {
|
||||
compatible = "snps,dw-apb-uart";
|
||||
reg = <0x20064000 0x400>;
|
||||
interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>;
|
||||
reg-shift = <2>;
|
||||
reg-io-width = <1>;
|
||||
clocks = <&clk_gates1 12>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uart3: serial@20068000 {
|
||||
compatible = "snps,dw-apb-uart";
|
||||
reg = <0x20068000 0x400>;
|
||||
interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>;
|
||||
reg-shift = <2>;
|
||||
reg-io-width = <1>;
|
||||
clocks = <&clk_gates1 14>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
dwmmc@10214000 {
|
||||
compatible = "rockchip,rk2928-dw-mshc";
|
||||
reg = <0x10214000 0x1000>;
|
||||
interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
clocks = <&clk_gates5 10>, <&clk_gates2 11>;
|
||||
clock-names = "biu", "ciu";
|
||||
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
dwmmc@10218000 {
|
||||
compatible = "rockchip,rk2928-dw-mshc";
|
||||
reg = <0x10218000 0x1000>;
|
||||
interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
clocks = <&clk_gates5 11>, <&clk_gates2 13>;
|
||||
clock-names = "biu", "ciu";
|
||||
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
};
|
|
@ -0,0 +1,473 @@
|
|||
/*
|
||||
* Device Tree for the ST-Ericsson U300 Machine and SoC
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
/include/ "skeleton.dtsi"
|
||||
|
||||
/ {
|
||||
model = "ST-Ericsson U300";
|
||||
compatible = "stericsson,u300";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
chosen {
|
||||
bootargs = "root=/dev/ram0 console=ttyAMA0,115200n8 earlyprintk";
|
||||
};
|
||||
|
||||
aliases {
|
||||
serial0 = &uart0;
|
||||
serial1 = &uart1;
|
||||
};
|
||||
|
||||
memory {
|
||||
reg = <0x48000000 0x03c00000>;
|
||||
};
|
||||
|
||||
s365 {
|
||||
compatible = "stericsson,s365";
|
||||
vana15-supply = <&ab3100_ldo_d_reg>;
|
||||
syscon = <&syscon>;
|
||||
};
|
||||
|
||||
syscon: syscon@c0011000 {
|
||||
compatible = "stericsson,u300-syscon", "syscon";
|
||||
reg = <0xc0011000 0x1000>;
|
||||
clk32: app_32_clk@32k {
|
||||
#clock-cells = <0>;
|
||||
compatible = "fixed-clock";
|
||||
clock-frequency = <32768>;
|
||||
};
|
||||
pll13: pll13@13M {
|
||||
#clock-cells = <0>;
|
||||
compatible = "fixed-clock";
|
||||
clock-frequency = <13000000>;
|
||||
};
|
||||
/* Slow bridge clocks under PLL13 */
|
||||
slow_clk: slow_clk@13M {
|
||||
#clock-cells = <0>;
|
||||
compatible = "stericsson,u300-syscon-clk";
|
||||
clock-type = <0>; /* Slow */
|
||||
clock-id = <0>;
|
||||
clocks = <&pll13>;
|
||||
};
|
||||
uart0_clk: uart0_clk@13M {
|
||||
#clock-cells = <0>;
|
||||
compatible = "stericsson,u300-syscon-clk";
|
||||
clock-type = <0>; /* Slow */
|
||||
clock-id = <1>;
|
||||
clocks = <&slow_clk>;
|
||||
};
|
||||
gpio_clk: gpio_clk@13M {
|
||||
#clock-cells = <0>;
|
||||
compatible = "stericsson,u300-syscon-clk";
|
||||
clock-type = <0>; /* Slow */
|
||||
clock-id = <4>;
|
||||
clocks = <&slow_clk>;
|
||||
};
|
||||
rtc_clk: rtc_clk@13M {
|
||||
#clock-cells = <0>;
|
||||
compatible = "stericsson,u300-syscon-clk";
|
||||
clock-type = <0>; /* Slow */
|
||||
clock-id = <6>;
|
||||
clocks = <&slow_clk>;
|
||||
};
|
||||
apptimer_clk: app_tmr_clk@13M {
|
||||
#clock-cells = <0>;
|
||||
compatible = "stericsson,u300-syscon-clk";
|
||||
clock-type = <0>; /* Slow */
|
||||
clock-id = <7>;
|
||||
clocks = <&slow_clk>;
|
||||
};
|
||||
acc_tmr_clk@13M {
|
||||
#clock-cells = <0>;
|
||||
compatible = "stericsson,u300-syscon-clk";
|
||||
clock-type = <0>; /* Slow */
|
||||
clock-id = <8>;
|
||||
clocks = <&slow_clk>;
|
||||
};
|
||||
pll208: pll208@208M {
|
||||
#clock-cells = <0>;
|
||||
compatible = "fixed-clock";
|
||||
clock-frequency = <208000000>;
|
||||
};
|
||||
app208: app_208_clk@208M {
|
||||
#clock-cells = <0>;
|
||||
compatible = "fixed-factor-clock";
|
||||
clock-div = <1>;
|
||||
clock-mult = <1>;
|
||||
clocks = <&pll208>;
|
||||
};
|
||||
cpu_clk@208M {
|
||||
#clock-cells = <0>;
|
||||
compatible = "stericsson,u300-syscon-clk";
|
||||
clock-type = <2>; /* Rest */
|
||||
clock-id = <3>;
|
||||
clocks = <&app208>;
|
||||
};
|
||||
app104: app_104_clk@104M {
|
||||
#clock-cells = <0>;
|
||||
compatible = "fixed-factor-clock";
|
||||
clock-div = <2>;
|
||||
clock-mult = <1>;
|
||||
clocks = <&pll208>;
|
||||
};
|
||||
semi_clk@104M {
|
||||
#clock-cells = <0>;
|
||||
compatible = "stericsson,u300-syscon-clk";
|
||||
clock-type = <2>; /* Rest */
|
||||
clock-id = <9>;
|
||||
clocks = <&app104>;
|
||||
};
|
||||
app52: app_52_clk@52M {
|
||||
#clock-cells = <0>;
|
||||
compatible = "fixed-factor-clock";
|
||||
clock-div = <4>;
|
||||
clock-mult = <1>;
|
||||
clocks = <&pll208>;
|
||||
};
|
||||
/* AHB subsystem clocks */
|
||||
ahb_clk: ahb_subsys_clk@52M {
|
||||
#clock-cells = <0>;
|
||||
compatible = "stericsson,u300-syscon-clk";
|
||||
clock-type = <2>; /* Rest */
|
||||
clock-id = <10>;
|
||||
clocks = <&app52>;
|
||||
};
|
||||
intcon_clk@52M {
|
||||
#clock-cells = <0>;
|
||||
compatible = "stericsson,u300-syscon-clk";
|
||||
clock-type = <2>; /* Rest */
|
||||
clock-id = <12>;
|
||||
clocks = <&ahb_clk>;
|
||||
};
|
||||
emif_clk@52M {
|
||||
#clock-cells = <0>;
|
||||
compatible = "stericsson,u300-syscon-clk";
|
||||
clock-type = <2>; /* Rest */
|
||||
clock-id = <5>;
|
||||
clocks = <&ahb_clk>;
|
||||
};
|
||||
dmac_clk: dmac_clk@52M {
|
||||
#clock-cells = <0>;
|
||||
compatible = "stericsson,u300-syscon-clk";
|
||||
clock-type = <2>; /* Rest */
|
||||
clock-id = <4>;
|
||||
clocks = <&app52>;
|
||||
};
|
||||
fsmc_clk: fsmc_clk@52M {
|
||||
#clock-cells = <0>;
|
||||
compatible = "stericsson,u300-syscon-clk";
|
||||
clock-type = <2>; /* Rest */
|
||||
clock-id = <6>;
|
||||
clocks = <&app52>;
|
||||
};
|
||||
xgam_clk: xgam_clk@52M {
|
||||
#clock-cells = <0>;
|
||||
compatible = "stericsson,u300-syscon-clk";
|
||||
clock-type = <2>; /* Rest */
|
||||
clock-id = <8>;
|
||||
clocks = <&app52>;
|
||||
};
|
||||
app26: app_26_clk@26M {
|
||||
#clock-cells = <0>;
|
||||
compatible = "fixed-factor-clock";
|
||||
clock-div = <2>;
|
||||
clock-mult = <1>;
|
||||
clocks = <&app52>;
|
||||
};
|
||||
/* Fast bridge clocks */
|
||||
fast_clk: fast_clk@26M {
|
||||
#clock-cells = <0>;
|
||||
compatible = "stericsson,u300-syscon-clk";
|
||||
clock-type = <1>; /* Fast */
|
||||
clock-id = <0>;
|
||||
clocks = <&app26>;
|
||||
};
|
||||
i2c0_clk: i2c0_clk@26M {
|
||||
#clock-cells = <0>;
|
||||
compatible = "stericsson,u300-syscon-clk";
|
||||
clock-type = <1>; /* Fast */
|
||||
clock-id = <1>;
|
||||
clocks = <&fast_clk>;
|
||||
};
|
||||
i2c1_clk: i2c1_clk@26M {
|
||||
#clock-cells = <0>;
|
||||
compatible = "stericsson,u300-syscon-clk";
|
||||
clock-type = <1>; /* Fast */
|
||||
clock-id = <2>;
|
||||
clocks = <&fast_clk>;
|
||||
};
|
||||
mmc_pclk: mmc_p_clk@26M {
|
||||
#clock-cells = <0>;
|
||||
compatible = "stericsson,u300-syscon-clk";
|
||||
clock-type = <1>; /* Fast */
|
||||
clock-id = <5>;
|
||||
clocks = <&fast_clk>;
|
||||
};
|
||||
mmc_mclk: mmc_mclk {
|
||||
#clock-cells = <0>;
|
||||
compatible = "stericsson,u300-syscon-mclk";
|
||||
clocks = <&mmc_pclk>;
|
||||
};
|
||||
spi_clk: spi_p_clk@26M {
|
||||
#clock-cells = <0>;
|
||||
compatible = "stericsson,u300-syscon-clk";
|
||||
clock-type = <1>; /* Fast */
|
||||
clock-id = <6>;
|
||||
clocks = <&fast_clk>;
|
||||
};
|
||||
};
|
||||
|
||||
timer: timer@c0014000 {
|
||||
compatible = "stericsson,u300-apptimer";
|
||||
reg = <0xc0014000 0x1000>;
|
||||
interrupt-parent = <&vica>;
|
||||
interrupts = <24 25 26 27>;
|
||||
clocks = <&apptimer_clk>;
|
||||
};
|
||||
|
||||
gpio: gpio@c0016000 {
|
||||
compatible = "stericsson,gpio-coh901";
|
||||
reg = <0xc0016000 0x1000>;
|
||||
interrupt-parent = <&vicb>;
|
||||
interrupts = <0 1 2 18 21 22 23>;
|
||||
clocks = <&gpio_clk>;
|
||||
interrupt-names = "gpio0", "gpio1", "gpio2", "gpio3",
|
||||
"gpio4", "gpio5", "gpio6";
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
};
|
||||
|
||||
pinctrl: pinctrl@c0011000 {
|
||||
compatible = "stericsson,pinctrl-u300";
|
||||
reg = <0xc0011000 0x1000>;
|
||||
};
|
||||
|
||||
watchdog: watchdog@c0012000 {
|
||||
compatible = "stericsson,coh901327";
|
||||
reg = <0xc0012000 0x1000>;
|
||||
interrupt-parent = <&vicb>;
|
||||
interrupts = <3>;
|
||||
clocks = <&clk32>;
|
||||
};
|
||||
|
||||
rtc: rtc@c0017000 {
|
||||
compatible = "stericsson,coh901331";
|
||||
reg = <0xc0017000 0x1000>;
|
||||
interrupt-parent = <&vicb>;
|
||||
interrupts = <10>;
|
||||
clocks = <&rtc_clk>;
|
||||
};
|
||||
|
||||
dmac: dma-controller@c00020000 {
|
||||
compatible = "stericsson,coh901318";
|
||||
reg = <0xc0020000 0x1000>;
|
||||
interrupt-parent = <&vica>;
|
||||
interrupts = <2>;
|
||||
#dma-cells = <1>;
|
||||
dma-channels = <40>;
|
||||
clocks = <&dmac_clk>;
|
||||
};
|
||||
|
||||
/* A NAND flash of 128 MiB */
|
||||
fsmc: flash@40000000 {
|
||||
compatible = "stericsson,fsmc-nand";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
reg = <0x9f800000 0x1000>, /* FSMC Register*/
|
||||
<0x80000000 0x4000>, /* NAND Base DATA */
|
||||
<0x80020000 0x4000>, /* NAND Base ADDR */
|
||||
<0x80010000 0x4000>; /* NAND Base CMD */
|
||||
reg-names = "fsmc_regs", "nand_data", "nand_addr", "nand_cmd";
|
||||
nand-skip-bbtscan;
|
||||
clocks = <&fsmc_clk>;
|
||||
|
||||
partition@0 {
|
||||
label = "boot records";
|
||||
reg = <0x0 0x20000>;
|
||||
};
|
||||
partition@20000 {
|
||||
label = "free";
|
||||
reg = <0x20000 0x7e0000>;
|
||||
};
|
||||
partition@800000 {
|
||||
label = "platform";
|
||||
reg = <0x800000 0xf800000>;
|
||||
};
|
||||
};
|
||||
|
||||
i2c0: i2c@c0004000 {
|
||||
compatible = "st,ddci2c";
|
||||
reg = <0xc0004000 0x1000>;
|
||||
interrupt-parent = <&vicb>;
|
||||
interrupts = <8>;
|
||||
clocks = <&i2c0_clk>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
ab3100: ab3100@0x48 {
|
||||
compatible = "stericsson,ab3100";
|
||||
reg = <0x48>;
|
||||
interrupt-parent = <&vica>;
|
||||
interrupts = <0>; /* EXT0 IRQ */
|
||||
ab3100-regulators {
|
||||
compatible = "stericsson,ab3100-regulators";
|
||||
ab3100_ldo_a_reg: ab3100_ldo_a {
|
||||
regulator-compatible = "ab3100_ldo_a";
|
||||
startup-delay-us = <200>;
|
||||
regulator-always-on;
|
||||
regulator-boot-on;
|
||||
};
|
||||
ab3100_ldo_c_reg: ab3100_ldo_c {
|
||||
regulator-compatible = "ab3100_ldo_c";
|
||||
startup-delay-us = <200>;
|
||||
};
|
||||
ab3100_ldo_d_reg: ab3100_ldo_d {
|
||||
regulator-compatible = "ab3100_ldo_d";
|
||||
startup-delay-us = <200>;
|
||||
};
|
||||
ab3100_ldo_e_reg: ab3100_ldo_e {
|
||||
regulator-compatible = "ab3100_ldo_e";
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <1800000>;
|
||||
startup-delay-us = <200>;
|
||||
regulator-always-on;
|
||||
regulator-boot-on;
|
||||
};
|
||||
ab3100_ldo_f_reg: ab3100_ldo_f {
|
||||
regulator-compatible = "ab3100_ldo_f";
|
||||
regulator-min-microvolt = <2500000>;
|
||||
regulator-max-microvolt = <2500000>;
|
||||
startup-delay-us = <600>;
|
||||
regulator-always-on;
|
||||
regulator-boot-on;
|
||||
};
|
||||
ab3100_ldo_g_reg: ab3100_ldo_g {
|
||||
regulator-compatible = "ab3100_ldo_g";
|
||||
regulator-min-microvolt = <1500000>;
|
||||
regulator-max-microvolt = <2850000>;
|
||||
startup-delay-us = <400>;
|
||||
};
|
||||
ab3100_ldo_h_reg: ab3100_ldo_h {
|
||||
regulator-compatible = "ab3100_ldo_h";
|
||||
regulator-min-microvolt = <1200000>;
|
||||
regulator-max-microvolt = <2750000>;
|
||||
startup-delay-us = <200>;
|
||||
};
|
||||
ab3100_ldo_k_reg: ab3100_ldo_k {
|
||||
regulator-compatible = "ab3100_ldo_k";
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <2750000>;
|
||||
startup-delay-us = <200>;
|
||||
};
|
||||
ab3100_ext_reg: ab3100_ext {
|
||||
regulator-compatible = "ab3100_ext";
|
||||
};
|
||||
ab3100_buck_reg: ab3100_buck {
|
||||
regulator-compatible = "ab3100_buck";
|
||||
regulator-min-microvolt = <1200000>;
|
||||
regulator-max-microvolt = <1800000>;
|
||||
startup-delay-us = <1000>;
|
||||
regulator-always-on;
|
||||
regulator-boot-on;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
i2c1: i2c@c0005000 {
|
||||
compatible = "st,ddci2c";
|
||||
reg = <0xc0005000 0x1000>;
|
||||
interrupt-parent = <&vicb>;
|
||||
interrupts = <9>;
|
||||
clocks = <&i2c1_clk>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
fwcam0: fwcam@0x10 {
|
||||
reg = <0x10>;
|
||||
};
|
||||
fwcam1: fwcam@0x5d {
|
||||
reg = <0x5d>;
|
||||
};
|
||||
};
|
||||
|
||||
amba {
|
||||
compatible = "arm,amba-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
|
||||
vica: interrupt-controller@a0001000 {
|
||||
compatible = "arm,versatile-vic";
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
reg = <0xa0001000 0x20>;
|
||||
};
|
||||
|
||||
vicb: interrupt-controller@a0002000 {
|
||||
compatible = "arm,versatile-vic";
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
reg = <0xa0002000 0x20>;
|
||||
};
|
||||
|
||||
uart0: serial@c0013000 {
|
||||
compatible = "arm,pl011", "arm,primecell";
|
||||
reg = <0xc0013000 0x1000>;
|
||||
interrupt-parent = <&vica>;
|
||||
interrupts = <22>;
|
||||
clocks = <&uart0_clk>, <&uart0_clk>;
|
||||
clock-names = "apb_pclk", "uart0_clk";
|
||||
dmas = <&dmac 17 &dmac 18>;
|
||||
dma-names = "tx", "rx";
|
||||
};
|
||||
|
||||
uart1: serial@c0007000 {
|
||||
compatible = "arm,pl011", "arm,primecell";
|
||||
reg = <0xc0007000 0x1000>;
|
||||
interrupt-parent = <&vicb>;
|
||||
interrupts = <20>;
|
||||
dmas = <&dmac 38 &dmac 39>;
|
||||
dma-names = "tx", "rx";
|
||||
};
|
||||
|
||||
mmcsd: mmcsd@c0001000 {
|
||||
compatible = "arm,pl18x", "arm,primecell";
|
||||
reg = <0xc0001000 0x1000>;
|
||||
interrupt-parent = <&vicb>;
|
||||
interrupts = <6 7>;
|
||||
clocks = <&mmc_pclk>, <&mmc_mclk>;
|
||||
clock-names = "apb_pclk", "mclk";
|
||||
max-frequency = <24000000>;
|
||||
bus-width = <4>; // SD-card slot
|
||||
mmc-cap-mmc-highspeed;
|
||||
mmc-cap-sd-highspeed;
|
||||
cd-gpios = <&gpio 12 0x4>;
|
||||
cd-inverted;
|
||||
vmmc-supply = <&ab3100_ldo_g_reg>;
|
||||
dmas = <&dmac 14>;
|
||||
dma-names = "rx";
|
||||
};
|
||||
|
||||
spi: ssp@c0006000 {
|
||||
compatible = "arm,pl022", "arm,primecell";
|
||||
reg = <0xc0006000 0x1000>;
|
||||
interrupt-parent = <&vica>;
|
||||
interrupts = <23>;
|
||||
clocks = <&spi_clk>, <&spi_clk>;
|
||||
clock-names = "apb_pclk", "spi_clk";
|
||||
dmas = <&dmac 27 &dmac 28>;
|
||||
dma-names = "tx", "rx";
|
||||
num-cs = <3>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
spi-dummy@1 {
|
||||
compatible = "arm,pl022-dummy";
|
||||
reg = <1>;
|
||||
spi-max-frequency = <20000000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
|
@ -49,16 +49,18 @@ L2: cache-controller {
|
|||
|
||||
uart0: uart@e0000000 {
|
||||
compatible = "xlnx,xuartps";
|
||||
clocks = <&clkc 23>, <&clkc 40>;
|
||||
clock-names = "ref_clk", "aper_clk";
|
||||
reg = <0xE0000000 0x1000>;
|
||||
interrupts = <0 27 4>;
|
||||
clocks = <&uart_clk 0>;
|
||||
};
|
||||
|
||||
uart1: uart@e0001000 {
|
||||
compatible = "xlnx,xuartps";
|
||||
clocks = <&clkc 24>, <&clkc 41>;
|
||||
clock-names = "ref_clk", "aper_clk";
|
||||
reg = <0xE0001000 0x1000>;
|
||||
interrupts = <0 50 4>;
|
||||
clocks = <&uart_clk 1>;
|
||||
};
|
||||
|
||||
slcr: slcr@f8000000 {
|
||||
|
@ -69,50 +71,21 @@ clocks {
|
|||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
ps_clk: ps_clk {
|
||||
#clock-cells = <0>;
|
||||
compatible = "fixed-clock";
|
||||
/* clock-frequency set in board-specific file */
|
||||
clock-output-names = "ps_clk";
|
||||
};
|
||||
armpll: armpll {
|
||||
#clock-cells = <0>;
|
||||
compatible = "xlnx,zynq-pll";
|
||||
clocks = <&ps_clk>;
|
||||
reg = <0x100 0x110>;
|
||||
clock-output-names = "armpll";
|
||||
};
|
||||
ddrpll: ddrpll {
|
||||
#clock-cells = <0>;
|
||||
compatible = "xlnx,zynq-pll";
|
||||
clocks = <&ps_clk>;
|
||||
reg = <0x104 0x114>;
|
||||
clock-output-names = "ddrpll";
|
||||
};
|
||||
iopll: iopll {
|
||||
#clock-cells = <0>;
|
||||
compatible = "xlnx,zynq-pll";
|
||||
clocks = <&ps_clk>;
|
||||
reg = <0x108 0x118>;
|
||||
clock-output-names = "iopll";
|
||||
};
|
||||
uart_clk: uart_clk {
|
||||
clkc: clkc {
|
||||
#clock-cells = <1>;
|
||||
compatible = "xlnx,zynq-periph-clock";
|
||||
clocks = <&iopll &armpll &ddrpll>;
|
||||
reg = <0x154>;
|
||||
clock-output-names = "uart0_ref_clk",
|
||||
"uart1_ref_clk";
|
||||
};
|
||||
cpu_clk: cpu_clk {
|
||||
#clock-cells = <1>;
|
||||
compatible = "xlnx,zynq-cpu-clock";
|
||||
clocks = <&iopll &armpll &ddrpll>;
|
||||
reg = <0x120 0x1C4>;
|
||||
clock-output-names = "cpu_6x4x",
|
||||
"cpu_3x2x",
|
||||
"cpu_2x",
|
||||
"cpu_1x";
|
||||
compatible = "xlnx,ps7-clkc";
|
||||
ps-clk-frequency = <33333333>;
|
||||
clock-output-names = "armpll", "ddrpll", "iopll", "cpu_6or4x",
|
||||
"cpu_3or2x", "cpu_2x", "cpu_1x", "ddr2x", "ddr3x",
|
||||
"dci", "lqspi", "smc", "pcap", "gem0", "gem1",
|
||||
"fclk0", "fclk1", "fclk2", "fclk3", "can0", "can1",
|
||||
"sdio0", "sdio1", "uart0", "uart1", "spi0", "spi1",
|
||||
"dma", "usb0_aper", "usb1_aper", "gem0_aper",
|
||||
"gem1_aper", "sdio0_aper", "sdio1_aper",
|
||||
"spi0_aper", "spi1_aper", "can0_aper", "can1_aper",
|
||||
"i2c0_aper", "i2c1_aper", "uart0_aper", "uart1_aper",
|
||||
"gpio_aper", "lqspi_aper", "smc_aper", "swdt",
|
||||
"dbg_trc", "dbg_apb";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -121,9 +94,8 @@ ttc0: ttc0@f8001000 {
|
|||
interrupt-parent = <&intc>;
|
||||
interrupts = < 0 10 4 0 11 4 0 12 4 >;
|
||||
compatible = "cdns,ttc";
|
||||
clocks = <&clkc 6>;
|
||||
reg = <0xF8001000 0x1000>;
|
||||
clocks = <&cpu_clk 3>;
|
||||
clock-names = "cpu_1x";
|
||||
clock-ranges;
|
||||
};
|
||||
|
||||
|
@ -131,9 +103,8 @@ ttc1: ttc1@f8002000 {
|
|||
interrupt-parent = <&intc>;
|
||||
interrupts = < 0 37 4 0 38 4 0 39 4 >;
|
||||
compatible = "cdns,ttc";
|
||||
clocks = <&clkc 6>;
|
||||
reg = <0xF8002000 0x1000>;
|
||||
clocks = <&cpu_clk 3>;
|
||||
clock-names = "cpu_1x";
|
||||
clock-ranges;
|
||||
};
|
||||
scutimer: scutimer@f8f00600 {
|
||||
|
@ -141,7 +112,7 @@ scutimer: scutimer@f8f00600 {
|
|||
interrupts = < 1 13 0x301 >;
|
||||
compatible = "arm,cortex-a9-twd-timer";
|
||||
reg = < 0xf8f00600 0x20 >;
|
||||
clocks = <&cpu_clk 1>;
|
||||
clocks = <&clkc 4>;
|
||||
} ;
|
||||
};
|
||||
};
|
||||
|
|
|
@ -28,7 +28,3 @@ chosen {
|
|||
};
|
||||
|
||||
};
|
||||
|
||||
&ps_clk {
|
||||
clock-frequency = <33333330>;
|
||||
};
|
||||
|
|
|
@ -17,3 +17,6 @@ config SHARP_PARAM
|
|||
|
||||
config SHARP_SCOOP
|
||||
bool
|
||||
|
||||
config TI_PRIV_EDMA
|
||||
bool
|
||||
|
|
|
@ -16,3 +16,4 @@ obj-$(CONFIG_ARM_TIMER_SP804) += timer-sp.o
|
|||
obj-$(CONFIG_MCPM) += mcpm_head.o mcpm_entry.o mcpm_platsmp.o vlock.o
|
||||
AFLAGS_mcpm_head.o := -march=armv7-a
|
||||
AFLAGS_vlock.o := -march=armv7-a
|
||||
obj-$(CONFIG_TI_PRIV_EDMA) += edma.o
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
#include <linux/err.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/module.h>
|
||||
|
@ -24,8 +25,15 @@
|
|||
#include <linux/platform_device.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/edma.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/of_address.h>
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/of_dma.h>
|
||||
#include <linux/of_irq.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
|
||||
#include <mach/edma.h>
|
||||
#include <linux/platform_data/edma.h>
|
||||
|
||||
/* Offsets matching "struct edmacc_param" */
|
||||
#define PARM_OPT 0x00
|
||||
|
@ -494,26 +502,6 @@ static irqreturn_t dma_ccerr_handler(int irq, void *data)
|
|||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* Transfer controller error interrupt handlers
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#define tc_errs_handled false /* disabled as long as they're NOPs */
|
||||
|
||||
static irqreturn_t dma_tc0err_handler(int irq, void *data)
|
||||
{
|
||||
dev_dbg(data, "dma_tc0err_handler\n");
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
static irqreturn_t dma_tc1err_handler(int irq, void *data)
|
||||
{
|
||||
dev_dbg(data, "dma_tc1err_handler\n");
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
static int reserve_contiguous_slots(int ctlr, unsigned int id,
|
||||
unsigned int num_slots,
|
||||
unsigned int start_slot)
|
||||
|
@ -1388,32 +1376,236 @@ void edma_clear_event(unsigned channel)
|
|||
}
|
||||
EXPORT_SYMBOL(edma_clear_event);
|
||||
|
||||
/*-----------------------------------------------------------------------*/
|
||||
#if IS_ENABLED(CONFIG_OF) && IS_ENABLED(CONFIG_DMADEVICES)
|
||||
|
||||
static int __init edma_probe(struct platform_device *pdev)
|
||||
static int edma_of_read_u32_to_s16_array(const struct device_node *np,
|
||||
const char *propname, s16 *out_values,
|
||||
size_t sz)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = of_property_read_u16_array(np, propname, out_values, sz);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* Terminate it */
|
||||
*out_values++ = -1;
|
||||
*out_values++ = -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int edma_xbar_event_map(struct device *dev,
|
||||
struct device_node *node,
|
||||
struct edma_soc_info *pdata, int len)
|
||||
{
|
||||
int ret, i;
|
||||
struct resource res;
|
||||
void __iomem *xbar;
|
||||
const s16 (*xbar_chans)[2];
|
||||
u32 shift, offset, mux;
|
||||
|
||||
xbar_chans = devm_kzalloc(dev,
|
||||
len/sizeof(s16) + 2*sizeof(s16),
|
||||
GFP_KERNEL);
|
||||
if (!xbar_chans)
|
||||
return -ENOMEM;
|
||||
|
||||
ret = of_address_to_resource(node, 1, &res);
|
||||
if (ret)
|
||||
return -EIO;
|
||||
|
||||
xbar = devm_ioremap(dev, res.start, resource_size(&res));
|
||||
if (!xbar)
|
||||
return -ENOMEM;
|
||||
|
||||
ret = edma_of_read_u32_to_s16_array(node,
|
||||
"ti,edma-xbar-event-map",
|
||||
(s16 *)xbar_chans,
|
||||
len/sizeof(u32));
|
||||
if (ret)
|
||||
return -EIO;
|
||||
|
||||
for (i = 0; xbar_chans[i][0] != -1; i++) {
|
||||
shift = (xbar_chans[i][1] & 0x03) << 3;
|
||||
offset = xbar_chans[i][1] & 0xfffffffc;
|
||||
mux = readl(xbar + offset);
|
||||
mux &= ~(0xff << shift);
|
||||
mux |= xbar_chans[i][0] << shift;
|
||||
writel(mux, (xbar + offset));
|
||||
}
|
||||
|
||||
pdata->xbar_chans = xbar_chans;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int edma_of_parse_dt(struct device *dev,
|
||||
struct device_node *node,
|
||||
struct edma_soc_info *pdata)
|
||||
{
|
||||
int ret = 0, i;
|
||||
u32 value;
|
||||
struct property *prop;
|
||||
size_t sz;
|
||||
struct edma_rsv_info *rsv_info;
|
||||
s8 (*queue_tc_map)[2], (*queue_priority_map)[2];
|
||||
|
||||
memset(pdata, 0, sizeof(struct edma_soc_info));
|
||||
|
||||
ret = of_property_read_u32(node, "dma-channels", &value);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
pdata->n_channel = value;
|
||||
|
||||
ret = of_property_read_u32(node, "ti,edma-regions", &value);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
pdata->n_region = value;
|
||||
|
||||
ret = of_property_read_u32(node, "ti,edma-slots", &value);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
pdata->n_slot = value;
|
||||
|
||||
pdata->n_cc = 1;
|
||||
|
||||
rsv_info = devm_kzalloc(dev, sizeof(struct edma_rsv_info), GFP_KERNEL);
|
||||
if (!rsv_info)
|
||||
return -ENOMEM;
|
||||
pdata->rsv = rsv_info;
|
||||
|
||||
queue_tc_map = devm_kzalloc(dev, 8*sizeof(s8), GFP_KERNEL);
|
||||
if (!queue_tc_map)
|
||||
return -ENOMEM;
|
||||
|
||||
for (i = 0; i < 3; i++) {
|
||||
queue_tc_map[i][0] = i;
|
||||
queue_tc_map[i][1] = i;
|
||||
}
|
||||
queue_tc_map[i][0] = -1;
|
||||
queue_tc_map[i][1] = -1;
|
||||
|
||||
pdata->queue_tc_mapping = queue_tc_map;
|
||||
|
||||
queue_priority_map = devm_kzalloc(dev, 8*sizeof(s8), GFP_KERNEL);
|
||||
if (!queue_priority_map)
|
||||
return -ENOMEM;
|
||||
|
||||
for (i = 0; i < 3; i++) {
|
||||
queue_priority_map[i][0] = i;
|
||||
queue_priority_map[i][1] = i;
|
||||
}
|
||||
queue_priority_map[i][0] = -1;
|
||||
queue_priority_map[i][1] = -1;
|
||||
|
||||
pdata->queue_priority_mapping = queue_priority_map;
|
||||
|
||||
pdata->default_queue = 0;
|
||||
|
||||
prop = of_find_property(node, "ti,edma-xbar-event-map", &sz);
|
||||
if (prop)
|
||||
ret = edma_xbar_event_map(dev, node, pdata, sz);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static struct of_dma_filter_info edma_filter_info = {
|
||||
.filter_fn = edma_filter_fn,
|
||||
};
|
||||
|
||||
static struct edma_soc_info *edma_setup_info_from_dt(struct device *dev,
|
||||
struct device_node *node)
|
||||
{
|
||||
struct edma_soc_info *info;
|
||||
int ret;
|
||||
|
||||
info = devm_kzalloc(dev, sizeof(struct edma_soc_info), GFP_KERNEL);
|
||||
if (!info)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
ret = edma_of_parse_dt(dev, node, info);
|
||||
if (ret)
|
||||
return ERR_PTR(ret);
|
||||
|
||||
dma_cap_set(DMA_SLAVE, edma_filter_info.dma_cap);
|
||||
of_dma_controller_register(dev->of_node, of_dma_simple_xlate,
|
||||
&edma_filter_info);
|
||||
|
||||
return info;
|
||||
}
|
||||
#else
|
||||
static struct edma_soc_info *edma_setup_info_from_dt(struct device *dev,
|
||||
struct device_node *node)
|
||||
{
|
||||
return ERR_PTR(-ENOSYS);
|
||||
}
|
||||
#endif
|
||||
|
||||
static int edma_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct edma_soc_info **info = pdev->dev.platform_data;
|
||||
const s8 (*queue_priority_mapping)[2];
|
||||
const s8 (*queue_tc_mapping)[2];
|
||||
struct edma_soc_info *ninfo[EDMA_MAX_CC] = {NULL};
|
||||
s8 (*queue_priority_mapping)[2];
|
||||
s8 (*queue_tc_mapping)[2];
|
||||
int i, j, off, ln, found = 0;
|
||||
int status = -1;
|
||||
const s16 (*rsv_chans)[2];
|
||||
const s16 (*rsv_slots)[2];
|
||||
const s16 (*xbar_chans)[2];
|
||||
int irq[EDMA_MAX_CC] = {0, 0};
|
||||
int err_irq[EDMA_MAX_CC] = {0, 0};
|
||||
struct resource *r[EDMA_MAX_CC] = {NULL};
|
||||
resource_size_t len[EDMA_MAX_CC];
|
||||
struct resource res[EDMA_MAX_CC];
|
||||
char res_name[10];
|
||||
char irq_name[10];
|
||||
struct device_node *node = pdev->dev.of_node;
|
||||
struct device *dev = &pdev->dev;
|
||||
int ret;
|
||||
|
||||
if (node) {
|
||||
/* Check if this is a second instance registered */
|
||||
if (arch_num_cc) {
|
||||
dev_err(dev, "only one EDMA instance is supported via DT\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
ninfo[0] = edma_setup_info_from_dt(dev, node);
|
||||
if (IS_ERR(ninfo[0])) {
|
||||
dev_err(dev, "failed to get DT data\n");
|
||||
return PTR_ERR(ninfo[0]);
|
||||
}
|
||||
|
||||
info = ninfo;
|
||||
}
|
||||
|
||||
if (!info)
|
||||
return -ENODEV;
|
||||
|
||||
pm_runtime_enable(dev);
|
||||
ret = pm_runtime_get_sync(dev);
|
||||
if (ret < 0) {
|
||||
dev_err(dev, "pm_runtime_get_sync() failed\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
for (j = 0; j < EDMA_MAX_CC; j++) {
|
||||
sprintf(res_name, "edma_cc%d", j);
|
||||
r[j] = platform_get_resource_byname(pdev, IORESOURCE_MEM,
|
||||
if (!info[j]) {
|
||||
if (!found)
|
||||
return -ENODEV;
|
||||
break;
|
||||
}
|
||||
if (node) {
|
||||
ret = of_address_to_resource(node, j, &res[j]);
|
||||
if (!ret)
|
||||
r[j] = &res[j];
|
||||
} else {
|
||||
sprintf(res_name, "edma_cc%d", j);
|
||||
r[j] = platform_get_resource_byname(pdev,
|
||||
IORESOURCE_MEM,
|
||||
res_name);
|
||||
if (!r[j] || !info[j]) {
|
||||
}
|
||||
if (!r[j]) {
|
||||
if (found)
|
||||
break;
|
||||
else
|
||||
|
@ -1422,26 +1614,14 @@ static int __init edma_probe(struct platform_device *pdev)
|
|||
found = 1;
|
||||
}
|
||||
|
||||
len[j] = resource_size(r[j]);
|
||||
edmacc_regs_base[j] = devm_ioremap_resource(&pdev->dev, r[j]);
|
||||
if (IS_ERR(edmacc_regs_base[j]))
|
||||
return PTR_ERR(edmacc_regs_base[j]);
|
||||
|
||||
r[j] = request_mem_region(r[j]->start, len[j],
|
||||
dev_name(&pdev->dev));
|
||||
if (!r[j]) {
|
||||
status = -EBUSY;
|
||||
goto fail1;
|
||||
}
|
||||
|
||||
edmacc_regs_base[j] = ioremap(r[j]->start, len[j]);
|
||||
if (!edmacc_regs_base[j]) {
|
||||
status = -EBUSY;
|
||||
goto fail1;
|
||||
}
|
||||
|
||||
edma_cc[j] = kzalloc(sizeof(struct edma), GFP_KERNEL);
|
||||
if (!edma_cc[j]) {
|
||||
status = -ENOMEM;
|
||||
goto fail1;
|
||||
}
|
||||
edma_cc[j] = devm_kzalloc(&pdev->dev, sizeof(struct edma),
|
||||
GFP_KERNEL);
|
||||
if (!edma_cc[j])
|
||||
return -ENOMEM;
|
||||
|
||||
edma_cc[j]->num_channels = min_t(unsigned, info[j]->n_channel,
|
||||
EDMA_MAX_DMACH);
|
||||
|
@ -1472,7 +1652,7 @@ static int __init edma_probe(struct platform_device *pdev)
|
|||
off = rsv_chans[i][0];
|
||||
ln = rsv_chans[i][1];
|
||||
clear_bits(off, ln,
|
||||
edma_cc[j]->edma_unused);
|
||||
edma_cc[j]->edma_unused);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1488,26 +1668,48 @@ static int __init edma_probe(struct platform_device *pdev)
|
|||
}
|
||||
}
|
||||
|
||||
sprintf(irq_name, "edma%d", j);
|
||||
irq[j] = platform_get_irq_byname(pdev, irq_name);
|
||||
edma_cc[j]->irq_res_start = irq[j];
|
||||
status = request_irq(irq[j], dma_irq_handler, 0, "edma",
|
||||
&pdev->dev);
|
||||
if (status < 0) {
|
||||
dev_dbg(&pdev->dev, "request_irq %d failed --> %d\n",
|
||||
irq[j], status);
|
||||
goto fail;
|
||||
/* Clear the xbar mapped channels in unused list */
|
||||
xbar_chans = info[j]->xbar_chans;
|
||||
if (xbar_chans) {
|
||||
for (i = 0; xbar_chans[i][1] != -1; i++) {
|
||||
off = xbar_chans[i][1];
|
||||
clear_bits(off, 1,
|
||||
edma_cc[j]->edma_unused);
|
||||
}
|
||||
}
|
||||
|
||||
sprintf(irq_name, "edma%d_err", j);
|
||||
err_irq[j] = platform_get_irq_byname(pdev, irq_name);
|
||||
edma_cc[j]->irq_res_end = err_irq[j];
|
||||
status = request_irq(err_irq[j], dma_ccerr_handler, 0,
|
||||
"edma_error", &pdev->dev);
|
||||
if (node) {
|
||||
irq[j] = irq_of_parse_and_map(node, 0);
|
||||
} else {
|
||||
sprintf(irq_name, "edma%d", j);
|
||||
irq[j] = platform_get_irq_byname(pdev, irq_name);
|
||||
}
|
||||
edma_cc[j]->irq_res_start = irq[j];
|
||||
status = devm_request_irq(&pdev->dev, irq[j],
|
||||
dma_irq_handler, 0, "edma",
|
||||
&pdev->dev);
|
||||
if (status < 0) {
|
||||
dev_dbg(&pdev->dev, "request_irq %d failed --> %d\n",
|
||||
dev_dbg(&pdev->dev,
|
||||
"devm_request_irq %d failed --> %d\n",
|
||||
irq[j], status);
|
||||
return status;
|
||||
}
|
||||
|
||||
if (node) {
|
||||
err_irq[j] = irq_of_parse_and_map(node, 2);
|
||||
} else {
|
||||
sprintf(irq_name, "edma%d_err", j);
|
||||
err_irq[j] = platform_get_irq_byname(pdev, irq_name);
|
||||
}
|
||||
edma_cc[j]->irq_res_end = err_irq[j];
|
||||
status = devm_request_irq(&pdev->dev, err_irq[j],
|
||||
dma_ccerr_handler, 0,
|
||||
"edma_error", &pdev->dev);
|
||||
if (status < 0) {
|
||||
dev_dbg(&pdev->dev,
|
||||
"devm_request_irq %d failed --> %d\n",
|
||||
err_irq[j], status);
|
||||
goto fail;
|
||||
return status;
|
||||
}
|
||||
|
||||
for (i = 0; i < edma_cc[j]->num_channels; i++)
|
||||
|
@ -1541,46 +1743,20 @@ static int __init edma_probe(struct platform_device *pdev)
|
|||
arch_num_cc++;
|
||||
}
|
||||
|
||||
if (tc_errs_handled) {
|
||||
status = request_irq(IRQ_TCERRINT0, dma_tc0err_handler, 0,
|
||||
"edma_tc0", &pdev->dev);
|
||||
if (status < 0) {
|
||||
dev_dbg(&pdev->dev, "request_irq %d failed --> %d\n",
|
||||
IRQ_TCERRINT0, status);
|
||||
return status;
|
||||
}
|
||||
status = request_irq(IRQ_TCERRINT, dma_tc1err_handler, 0,
|
||||
"edma_tc1", &pdev->dev);
|
||||
if (status < 0) {
|
||||
dev_dbg(&pdev->dev, "request_irq %d --> %d\n",
|
||||
IRQ_TCERRINT, status);
|
||||
return status;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
for (i = 0; i < EDMA_MAX_CC; i++) {
|
||||
if (err_irq[i])
|
||||
free_irq(err_irq[i], &pdev->dev);
|
||||
if (irq[i])
|
||||
free_irq(irq[i], &pdev->dev);
|
||||
}
|
||||
fail1:
|
||||
for (i = 0; i < EDMA_MAX_CC; i++) {
|
||||
if (r[i])
|
||||
release_mem_region(r[i]->start, len[i]);
|
||||
if (edmacc_regs_base[i])
|
||||
iounmap(edmacc_regs_base[i]);
|
||||
kfree(edma_cc[i]);
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
static const struct of_device_id edma_of_ids[] = {
|
||||
{ .compatible = "ti,edma3", },
|
||||
{}
|
||||
};
|
||||
|
||||
static struct platform_driver edma_driver = {
|
||||
.driver.name = "edma",
|
||||
.driver = {
|
||||
.name = "edma",
|
||||
.of_match_table = edma_of_ids,
|
||||
},
|
||||
.probe = edma_probe,
|
||||
};
|
||||
|
||||
static int __init edma_init(void)
|
|
@ -1,56 +0,0 @@
|
|||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_LOG_BUF_SHIFT=16
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_SLAB=y
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
# CONFIG_IOSCHED_DEADLINE is not set
|
||||
# CONFIG_IOSCHED_CFQ is not set
|
||||
CONFIG_ARCH_SHMOBILE=y
|
||||
CONFIG_ARCH_SH7372=y
|
||||
CONFIG_MACH_AP4EVB=y
|
||||
CONFIG_AEABI=y
|
||||
# CONFIG_OABI_COMPAT is not set
|
||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||
CONFIG_CMDLINE="console=ttySC0,115200 earlyprintk=sh-sci.0,115200"
|
||||
CONFIG_KEXEC=y
|
||||
CONFIG_PM=y
|
||||
# CONFIG_SUSPEND is not set
|
||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||
# CONFIG_FIRMWARE_IN_KERNEL is not set
|
||||
CONFIG_MTD=y
|
||||
CONFIG_MTD_CONCAT=y
|
||||
CONFIG_MTD_PARTITIONS=y
|
||||
CONFIG_MTD_CHAR=y
|
||||
CONFIG_MTD_BLOCK=y
|
||||
CONFIG_MTD_CFI=y
|
||||
CONFIG_MTD_CFI_INTELEXT=y
|
||||
CONFIG_MTD_PHYSMAP=y
|
||||
CONFIG_MTD_NAND=y
|
||||
# CONFIG_BLK_DEV is not set
|
||||
# CONFIG_MISC_DEVICES is not set
|
||||
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
|
||||
# CONFIG_INPUT_KEYBOARD is not set
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
# CONFIG_SERIO is not set
|
||||
CONFIG_SERIAL_SH_SCI=y
|
||||
CONFIG_SERIAL_SH_SCI_NR_UARTS=8
|
||||
CONFIG_SERIAL_SH_SCI_CONSOLE=y
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
# CONFIG_HWMON is not set
|
||||
# CONFIG_VGA_CONSOLE is not set
|
||||
# CONFIG_HID_SUPPORT is not set
|
||||
# CONFIG_USB_SUPPORT is not set
|
||||
# CONFIG_DNOTIFY is not set
|
||||
CONFIG_TMPFS=y
|
||||
# CONFIG_MISC_FILESYSTEMS is not set
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
# CONFIG_DETECT_SOFTLOCKUP is not set
|
||||
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
|
||||
# CONFIG_FTRACE is not set
|
||||
# CONFIG_CRC32 is not set
|
|
@ -1,72 +0,0 @@
|
|||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_LOG_BUF_SHIFT=16
|
||||
# CONFIG_UTS_NS is not set
|
||||
# CONFIG_IPC_NS is not set
|
||||
# CONFIG_USER_NS is not set
|
||||
# CONFIG_PID_NS is not set
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
CONFIG_SLAB=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_MODULE_FORCE_UNLOAD=y
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
# CONFIG_IOSCHED_DEADLINE is not set
|
||||
# CONFIG_IOSCHED_CFQ is not set
|
||||
CONFIG_ARCH_SHMOBILE=y
|
||||
CONFIG_ARCH_R8A7740=y
|
||||
CONFIG_MACH_BONITO=y
|
||||
# CONFIG_SH_TIMER_TMU is not set
|
||||
CONFIG_AEABI=y
|
||||
# CONFIG_OABI_COMPAT is not set
|
||||
CONFIG_FORCE_MAX_ZONEORDER=12
|
||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||
CONFIG_CMDLINE="console=ttySC5,115200 earlyprintk=sh-sci.5,115200 ignore_loglevel"
|
||||
CONFIG_KEXEC=y
|
||||
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
||||
# CONFIG_SUSPEND is not set
|
||||
CONFIG_PM_RUNTIME=y
|
||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||
# CONFIG_FIRMWARE_IN_KERNEL is not set
|
||||
CONFIG_MTD=y
|
||||
CONFIG_MTD_CHAR=y
|
||||
CONFIG_MTD_BLOCK=y
|
||||
CONFIG_MTD_CFI=y
|
||||
CONFIG_MTD_CFI_ADV_OPTIONS=y
|
||||
CONFIG_MTD_CFI_INTELEXT=y
|
||||
CONFIG_MTD_PHYSMAP=y
|
||||
CONFIG_MTD_ARM_INTEGRATOR=y
|
||||
CONFIG_MTD_BLOCK2MTD=y
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
# CONFIG_SCSI_LOWLEVEL is not set
|
||||
# CONFIG_INPUT_KEYBOARD is not set
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
CONFIG_SERIAL_SH_SCI=y
|
||||
CONFIG_SERIAL_SH_SCI_NR_UARTS=9
|
||||
CONFIG_SERIAL_SH_SCI_CONSOLE=y
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
CONFIG_I2C=y
|
||||
CONFIG_I2C_CHARDEV=y
|
||||
CONFIG_I2C_SH_MOBILE=y
|
||||
CONFIG_GPIO_SYSFS=y
|
||||
# CONFIG_HWMON is not set
|
||||
# CONFIG_MFD_SUPPORT is not set
|
||||
# CONFIG_HID_SUPPORT is not set
|
||||
# CONFIG_USB_SUPPORT is not set
|
||||
CONFIG_UIO=y
|
||||
CONFIG_UIO_PDRV=y
|
||||
CONFIG_UIO_PDRV_GENIRQ=y
|
||||
# CONFIG_DNOTIFY is not set
|
||||
# CONFIG_INOTIFY_USER is not set
|
||||
CONFIG_TMPFS=y
|
||||
# CONFIG_MISC_FILESYSTEMS is not set
|
||||
# CONFIG_ENABLE_WARN_DEPRECATED is not set
|
||||
# CONFIG_ENABLE_MUST_CHECK is not set
|
||||
# CONFIG_ARM_UNWIND is not set
|
|
@ -31,21 +31,18 @@ CONFIG_EP7211_DONGLE=y
|
|||
# CONFIG_WIRELESS is not set
|
||||
CONFIG_MTD=y
|
||||
CONFIG_MTD_CMDLINE_PARTS=y
|
||||
CONFIG_MTD_CHAR=y
|
||||
CONFIG_MTD_BLOCK=y
|
||||
CONFIG_MTD_CFI=y
|
||||
CONFIG_MTD_JEDECPROBE=y
|
||||
CONFIG_MTD_CFI_INTELEXT=y
|
||||
CONFIG_MTD_CFI_AMDSTD=y
|
||||
CONFIG_MTD_CFI_STAA=y
|
||||
CONFIG_MTD_AUTCPU12=y
|
||||
CONFIG_MTD_PLATRAM=y
|
||||
CONFIG_MTD_NAND=y
|
||||
CONFIG_MTD_NAND_GPIO=y
|
||||
CONFIG_NETDEVICES=y
|
||||
# CONFIG_NET_CADENCE is not set
|
||||
# CONFIG_NET_VENDOR_BROADCOM is not set
|
||||
# CONFIG_NET_VENDOR_CHELSIO is not set
|
||||
CONFIG_CS89x0=y
|
||||
CONFIG_CS89x0_PLATFORM=y
|
||||
# CONFIG_NET_VENDOR_FARADAY is not set
|
||||
|
@ -63,7 +60,11 @@ CONFIG_CS89x0_PLATFORM=y
|
|||
# CONFIG_VT is not set
|
||||
CONFIG_SERIAL_CLPS711X_CONSOLE=y
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
CONFIG_I2C=y
|
||||
CONFIG_I2C_GPIO=y
|
||||
CONFIG_SPI=y
|
||||
CONFIG_SPI_CLPS711X=y
|
||||
CONFIG_GPIO_CLPS711X=y
|
||||
CONFIG_GPIO_GENERIC_PLATFORM=y
|
||||
# CONFIG_HWMON is not set
|
||||
CONFIG_FB=y
|
||||
|
@ -87,4 +88,3 @@ CONFIG_DEBUG_LL=y
|
|||
CONFIG_EARLY_PRINTK=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
# CONFIG_CRYPTO_HW is not set
|
||||
# CONFIG_CRC32 is not set
|
||||
|
|
|
@ -50,6 +50,7 @@ CONFIG_USB_USBNET=y
|
|||
CONFIG_USB_NET_SMSC75XX=y
|
||||
CONFIG_USB_NET_SMSC95XX=y
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
CONFIG_KEYBOARD_GPIO=y
|
||||
CONFIG_KEYBOARD_CROS_EC=y
|
||||
# CONFIG_MOUSE_PS2 is not set
|
||||
CONFIG_MOUSE_CYAPA=y
|
||||
|
@ -104,6 +105,8 @@ CONFIG_MMC_SDHCI_S3C=y
|
|||
CONFIG_MMC_DW=y
|
||||
CONFIG_MMC_DW_IDMAC=y
|
||||
CONFIG_MMC_DW_EXYNOS=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_DRV_S3C=y
|
||||
CONFIG_COMMON_CLK_MAX77686=y
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_EXT3_FS=y
|
||||
|
|
|
@ -37,6 +37,8 @@ CONFIG_MACH_IMX51_DT=y
|
|||
CONFIG_MACH_EUKREA_CPUIMX51SD=y
|
||||
CONFIG_SOC_IMX53=y
|
||||
CONFIG_SOC_IMX6Q=y
|
||||
CONFIG_SOC_IMX6SL=y
|
||||
CONFIG_SOC_VF610=y
|
||||
CONFIG_MXC_PWM=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_VMSPLIT_2G=y
|
||||
|
@ -47,6 +49,7 @@ CONFIG_CMDLINE="noinitrd console=ttymxc0,115200"
|
|||
CONFIG_VFP=y
|
||||
CONFIG_NEON=y
|
||||
CONFIG_BINFMT_MISC=m
|
||||
CONFIG_PM_RUNTIME=y
|
||||
CONFIG_PM_DEBUG=y
|
||||
CONFIG_PM_TEST_SUSPEND=y
|
||||
CONFIG_NET=y
|
||||
|
@ -170,6 +173,7 @@ CONFIG_BACKLIGHT_LCD_SUPPORT=y
|
|||
CONFIG_LCD_CLASS_DEVICE=y
|
||||
CONFIG_LCD_L4F00242T03=y
|
||||
CONFIG_BACKLIGHT_CLASS_DEVICE=y
|
||||
CONFIG_BACKLIGHT_PWM=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
|
||||
CONFIG_FONTS=y
|
||||
|
@ -182,6 +186,7 @@ CONFIG_SND_SOC=y
|
|||
CONFIG_SND_IMX_SOC=y
|
||||
CONFIG_SND_SOC_PHYCORE_AC97=y
|
||||
CONFIG_SND_SOC_EUKREA_TLV320=y
|
||||
CONFIG_SND_SOC_IMX_WM8962=y
|
||||
CONFIG_SND_SOC_IMX_SGTL5000=y
|
||||
CONFIG_SND_SOC_IMX_MC13783=y
|
||||
CONFIG_USB=y
|
||||
|
@ -208,10 +213,15 @@ CONFIG_IMX_SDMA=y
|
|||
CONFIG_MXS_DMA=y
|
||||
CONFIG_STAGING=y
|
||||
CONFIG_DRM_IMX=y
|
||||
CONFIG_DRM_IMX_TVE=y
|
||||
CONFIG_DRM_IMX_FB_HELPER=y
|
||||
CONFIG_DRM_IMX_PARALLEL_DISPLAY=y
|
||||
CONFIG_DRM_IMX_IPUV3_CORE=y
|
||||
CONFIG_DRM_IMX_IPUV3=y
|
||||
CONFIG_COMMON_CLK_DEBUG=y
|
||||
# CONFIG_IOMMU_SUPPORT is not set
|
||||
CONFIG_PWM=y
|
||||
CONFIG_PWM_IMX=y
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_EXT2_FS_XATTR=y
|
||||
CONFIG_EXT2_FS_POSIX_ACL=y
|
||||
|
|
|
@ -0,0 +1,157 @@
|
|||
# CONFIG_SWAP is not set
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_SYSCTL_SYSCALL=y
|
||||
CONFIG_KALLSYMS_ALL=y
|
||||
# CONFIG_ELF_CORE is not set
|
||||
# CONFIG_BASE_FULL is not set
|
||||
CONFIG_EMBEDDED=y
|
||||
CONFIG_PROFILING=y
|
||||
CONFIG_OPROFILE=y
|
||||
CONFIG_KPROBES=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_FORCE_LOAD=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_MODULE_FORCE_UNLOAD=y
|
||||
CONFIG_MODVERSIONS=y
|
||||
CONFIG_ARCH_KEYSTONE=y
|
||||
CONFIG_ARM_LPAE=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_PREEMPT=y
|
||||
CONFIG_AEABI=y
|
||||
CONFIG_HIGHMEM=y
|
||||
CONFIG_VFP=y
|
||||
CONFIG_NEON=y
|
||||
# CONFIG_SUSPEND is not set
|
||||
CONFIG_PM_RUNTIME=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_UNIX_DIAG=y
|
||||
CONFIG_XFRM_USER=y
|
||||
CONFIG_XFRM_SUB_POLICY=y
|
||||
CONFIG_XFRM_STATISTICS=y
|
||||
CONFIG_NET_KEY=y
|
||||
CONFIG_NET_KEY_MIGRATE=y
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_MULTICAST=y
|
||||
CONFIG_IP_ADVANCED_ROUTER=y
|
||||
CONFIG_IP_MULTIPLE_TABLES=y
|
||||
CONFIG_IP_ROUTE_MULTIPATH=y
|
||||
CONFIG_IP_ROUTE_VERBOSE=y
|
||||
CONFIG_IP_PNP=y
|
||||
CONFIG_IP_PNP_DHCP=y
|
||||
CONFIG_IP_PNP_BOOTP=y
|
||||
CONFIG_NET_IPIP=y
|
||||
CONFIG_NET_IPGRE_DEMUX=y
|
||||
CONFIG_NET_IPGRE=y
|
||||
CONFIG_IP_MROUTE=y
|
||||
CONFIG_IP_MROUTE_MULTIPLE_TABLES=y
|
||||
CONFIG_IP_PIMSM_V2=y
|
||||
CONFIG_INET_AH=y
|
||||
CONFIG_INET_IPCOMP=y
|
||||
CONFIG_IPV6=y
|
||||
CONFIG_INET6_XFRM_MODE_TRANSPORT=m
|
||||
CONFIG_INET6_XFRM_MODE_TUNNEL=m
|
||||
CONFIG_INET6_XFRM_MODE_BEET=m
|
||||
CONFIG_IPV6_SIT=m
|
||||
CONFIG_IPV6_MULTIPLE_TABLES=y
|
||||
CONFIG_IPV6_SUBTREES=y
|
||||
CONFIG_IPV6_MROUTE=y
|
||||
CONFIG_IPV6_PIMSM_V2=y
|
||||
CONFIG_NETFILTER=y
|
||||
CONFIG_NF_CONNTRACK=y
|
||||
CONFIG_NF_CT_NETLINK=y
|
||||
CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y
|
||||
CONFIG_NETFILTER_XT_TARGET_CONNMARK=y
|
||||
CONFIG_NETFILTER_XT_TARGET_IDLETIMER=y
|
||||
CONFIG_NETFILTER_XT_TARGET_MARK=y
|
||||
CONFIG_NETFILTER_XT_MATCH_COMMENT=y
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNBYTES=y
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=y
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNMARK=y
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
|
||||
CONFIG_NETFILTER_XT_MATCH_CPU=y
|
||||
CONFIG_NETFILTER_XT_MATCH_IPRANGE=y
|
||||
CONFIG_NETFILTER_XT_MATCH_LENGTH=y
|
||||
CONFIG_NETFILTER_XT_MATCH_MAC=y
|
||||
CONFIG_NETFILTER_XT_MATCH_MARK=y
|
||||
CONFIG_NETFILTER_XT_MATCH_MULTIPORT=y
|
||||
CONFIG_NETFILTER_XT_MATCH_PKTTYPE=y
|
||||
CONFIG_NETFILTER_XT_MATCH_STATE=y
|
||||
CONFIG_NF_CONNTRACK_IPV4=y
|
||||
CONFIG_IP_NF_IPTABLES=y
|
||||
CONFIG_IP_NF_MATCH_AH=y
|
||||
CONFIG_IP_NF_MATCH_ECN=y
|
||||
CONFIG_IP_NF_MATCH_TTL=y
|
||||
CONFIG_IP_NF_FILTER=y
|
||||
CONFIG_IP_NF_TARGET_REJECT=y
|
||||
CONFIG_IP_NF_TARGET_ULOG=y
|
||||
CONFIG_IP_NF_MANGLE=y
|
||||
CONFIG_IP_NF_TARGET_CLUSTERIP=y
|
||||
CONFIG_IP_NF_TARGET_ECN=y
|
||||
CONFIG_IP_NF_TARGET_TTL=y
|
||||
CONFIG_IP_NF_RAW=y
|
||||
CONFIG_IP_NF_ARPTABLES=y
|
||||
CONFIG_IP_NF_ARPFILTER=y
|
||||
CONFIG_IP_NF_ARP_MANGLE=y
|
||||
CONFIG_IP6_NF_IPTABLES=m
|
||||
CONFIG_IP_SCTP=y
|
||||
CONFIG_VLAN_8021Q=y
|
||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||
CONFIG_CMA=y
|
||||
CONFIG_MTD=y
|
||||
CONFIG_MTD_CMDLINE_PARTS=y
|
||||
CONFIG_MTD_BLOCK=y
|
||||
CONFIG_MTD_PLATRAM=y
|
||||
CONFIG_MTD_M25P80=y
|
||||
CONFIG_MTD_NAND=y
|
||||
CONFIG_MTD_UBI=y
|
||||
CONFIG_PROC_DEVICETREE=y
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_EEPROM_AT24=y
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_SERIAL_OF_PLATFORM=y
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
CONFIG_I2C=y
|
||||
# CONFIG_I2C_COMPAT is not set
|
||||
CONFIG_I2C_CHARDEV=y
|
||||
CONFIG_SPI=y
|
||||
CONFIG_SPI_SPIDEV=y
|
||||
# CONFIG_HWMON is not set
|
||||
CONFIG_WATCHDOG=y
|
||||
# CONFIG_USB_SUPPORT is not set
|
||||
CONFIG_DMADEVICES=y
|
||||
CONFIG_COMMON_CLK_DEBUG=y
|
||||
CONFIG_MEMORY=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_JFFS2_FS=y
|
||||
CONFIG_JFFS2_FS_WBUF_VERIFY=y
|
||||
CONFIG_UBIFS_FS=y
|
||||
CONFIG_CRAMFS=y
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V3_ACL=y
|
||||
CONFIG_ROOT_NFS=y
|
||||
CONFIG_NFSD=y
|
||||
CONFIG_NFSD_V3=y
|
||||
CONFIG_NFSD_V3_ACL=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
CONFIG_DEBUG_SHIRQ=y
|
||||
CONFIG_DEBUG_INFO=y
|
||||
CONFIG_DEBUG_USER=y
|
||||
CONFIG_CRYPTO_USER=y
|
||||
CONFIG_CRYPTO_NULL=y
|
||||
CONFIG_CRYPTO_AUTHENC=y
|
||||
CONFIG_CRYPTO_CBC=y
|
||||
CONFIG_CRYPTO_CTR=y
|
||||
CONFIG_CRYPTO_XCBC=y
|
||||
CONFIG_CRYPTO_DES=y
|
||||
CONFIG_CRYPTO_ANSI_CPRNG=y
|
||||
CONFIG_CRYPTO_USER_API_HASH=y
|
||||
CONFIG_CRYPTO_USER_API_SKCIPHER=y
|
|
@ -1,4 +1,3 @@
|
|||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
|
@ -31,6 +30,7 @@ CONFIG_MACH_T5325=y
|
|||
CONFIG_MACH_TS219=y
|
||||
CONFIG_MACH_TS41X=y
|
||||
CONFIG_MACH_CLOUDBOX_DT=y
|
||||
CONFIG_MACH_DB88F628X_BP_DT=y
|
||||
CONFIG_MACH_DLINK_KIRKWOOD_DT=y
|
||||
CONFIG_MACH_DOCKSTAR_DT=y
|
||||
CONFIG_MACH_DREAMPLUG_DT=y
|
||||
|
@ -50,14 +50,19 @@ CONFIG_MACH_NETSPACE_V2_DT=y
|
|||
CONFIG_MACH_NSA310_DT=y
|
||||
CONFIG_MACH_OPENBLOCKS_A6_DT=y
|
||||
CONFIG_MACH_READYNAS_DT=y
|
||||
CONFIG_MACH_SHEEVAPLUG_DT=y
|
||||
CONFIG_MACH_TOPKICK_DT=y
|
||||
CONFIG_MACH_TS219_DT=y
|
||||
# CONFIG_CPU_FEROCEON_OLD_ID is not set
|
||||
CONFIG_PCI_MVEBU=y
|
||||
CONFIG_PREEMPT=y
|
||||
CONFIG_AEABI=y
|
||||
# CONFIG_OABI_COMPAT is not set
|
||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||
CONFIG_CPU_FREQ=y
|
||||
CONFIG_CPU_FREQ_STAT_DETAILS=y
|
||||
CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
|
||||
CONFIG_CPU_IDLE=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
|
@ -68,14 +73,12 @@ CONFIG_IP_PNP=y
|
|||
CONFIG_IP_PNP_DHCP=y
|
||||
CONFIG_IP_PNP_BOOTP=y
|
||||
# CONFIG_IPV6 is not set
|
||||
CONFIG_NET_DSA=y
|
||||
CONFIG_NET_PKTGEN=m
|
||||
CONFIG_CFG80211=y
|
||||
CONFIG_MAC80211=y
|
||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||
CONFIG_MTD=y
|
||||
CONFIG_MTD_CMDLINE_PARTS=y
|
||||
CONFIG_MTD_CHAR=y
|
||||
CONFIG_MTD_BLOCK=y
|
||||
CONFIG_MTD_CFI=y
|
||||
CONFIG_MTD_JEDECPROBE=y
|
||||
|
@ -140,6 +143,7 @@ CONFIG_HID_TOPSEED=y
|
|||
CONFIG_HID_THRUSTMASTER=y
|
||||
CONFIG_HID_ZEROPLUS=y
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_XHCI_HCD=y
|
||||
CONFIG_USB_EHCI_HCD=y
|
||||
CONFIG_USB_EHCI_ROOT_HUB_TT=y
|
||||
CONFIG_USB_PRINTER=m
|
||||
|
|
|
@ -31,10 +31,12 @@ CONFIG_SATA_HIGHBANK=y
|
|||
CONFIG_SATA_MV=y
|
||||
CONFIG_SATA_AHCI_PLATFORM=y
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_SUN4I_EMAC=y
|
||||
CONFIG_NET_CALXEDA_XGMAC=y
|
||||
CONFIG_SMSC911X=y
|
||||
CONFIG_STMMAC_ETH=y
|
||||
CONFIG_SERIO_AMBAKMI=y
|
||||
CONFIG_MDIO_SUN4I=y
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_SERIAL_8250_DW=y
|
||||
|
|
|
@ -13,6 +13,8 @@ CONFIG_MACH_ARMADA_370=y
|
|||
CONFIG_MACH_ARMADA_XP=y
|
||||
# CONFIG_CACHE_L2X0 is not set
|
||||
# CONFIG_SWP_EMULATE is not set
|
||||
CONFIG_PCI=y
|
||||
CONFIG_PCI_MVEBU=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_AEABI=y
|
||||
CONFIG_HIGHMEM=y
|
||||
|
@ -60,6 +62,8 @@ CONFIG_USB_SUPPORT=y
|
|||
CONFIG_USB=y
|
||||
CONFIG_USB_EHCI_HCD=y
|
||||
CONFIG_USB_EHCI_ROOT_HUB_TT=y
|
||||
CONFIG_USB_STORAGE=y
|
||||
CONFIG_USB_XHCI_HCD=y
|
||||
CONFIG_MMC=y
|
||||
CONFIG_MMC_MVSDIO=y
|
||||
CONFIG_NEW_LEDS=y
|
||||
|
@ -96,5 +100,3 @@ CONFIG_TIMER_STATS=y
|
|||
# CONFIG_DEBUG_BUGVERBOSE is not set
|
||||
CONFIG_DEBUG_INFO=y
|
||||
CONFIG_DEBUG_USER=y
|
||||
CONFIG_DEBUG_LL=y
|
||||
CONFIG_EARLY_PRINTK=y
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
CONFIG_EXPERIMENTAL=y
|
||||
# CONFIG_LOCALVERSION_AUTO is not set
|
||||
# CONFIG_SWAP is not set
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_EXPERT=y
|
||||
# CONFIG_AIO is not set
|
||||
|
@ -11,12 +12,9 @@ CONFIG_MODULE_UNLOAD=y
|
|||
# CONFIG_LBDAF is not set
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
# CONFIG_IOSCHED_CFQ is not set
|
||||
# CONFIG_ARCH_MULTI_V7 is not set
|
||||
CONFIG_ARCH_U300=y
|
||||
CONFIG_MACH_U300=y
|
||||
CONFIG_MACH_U300_BS335=y
|
||||
CONFIG_MACH_U300_SPIDUMMY=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
CONFIG_PREEMPT=y
|
||||
CONFIG_AEABI=y
|
||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||
|
@ -44,14 +42,15 @@ CONFIG_I2C=y
|
|||
# CONFIG_HWMON is not set
|
||||
CONFIG_WATCHDOG=y
|
||||
CONFIG_REGULATOR=y
|
||||
CONFIG_REGULATOR_FIXED_VOLTAGE=y
|
||||
CONFIG_FB=y
|
||||
CONFIG_BACKLIGHT_LCD_SUPPORT=y
|
||||
# CONFIG_LCD_CLASS_DEVICE is not set
|
||||
CONFIG_BACKLIGHT_CLASS_DEVICE=y
|
||||
# CONFIG_HID_SUPPORT is not set
|
||||
# CONFIG_USB_SUPPORT is not set
|
||||
CONFIG_MMC=y
|
||||
CONFIG_MMC_CLKGATE=y
|
||||
CONFIG_MMC_UNSAFE_RESUME=y
|
||||
# CONFIG_MMC_BLOCK_BOUNCE is not set
|
||||
CONFIG_MMC_ARMMMCI=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
# CONFIG_RTC_HCTOSYS is not set
|
||||
|
@ -70,4 +69,3 @@ CONFIG_DEBUG_FS=y
|
|||
CONFIG_TIMER_STATS=y
|
||||
# CONFIG_DEBUG_PREEMPT is not set
|
||||
CONFIG_DEBUG_INFO=y
|
||||
# CONFIG_CRC32 is not set
|
||||
|
|
|
@ -136,7 +136,11 @@
|
|||
* assumes FIQs are enabled, and that the processor is in SVC mode.
|
||||
*/
|
||||
.macro save_and_disable_irqs, oldcpsr
|
||||
#ifdef CONFIG_CPU_V7M
|
||||
mrs \oldcpsr, primask
|
||||
#else
|
||||
mrs \oldcpsr, cpsr
|
||||
#endif
|
||||
disable_irq
|
||||
.endm
|
||||
|
||||
|
@ -150,7 +154,11 @@
|
|||
* guarantee that this will preserve the flags.
|
||||
*/
|
||||
.macro restore_irqs_notrace, oldcpsr
|
||||
#ifdef CONFIG_CPU_V7M
|
||||
msr primask, \oldcpsr
|
||||
#else
|
||||
msr cpsr_c, \oldcpsr
|
||||
#endif
|
||||
.endm
|
||||
|
||||
.macro restore_irqs, oldcpsr
|
||||
|
@ -229,7 +237,14 @@
|
|||
#endif
|
||||
.endm
|
||||
|
||||
#ifdef CONFIG_THUMB2_KERNEL
|
||||
#if defined(CONFIG_CPU_V7M)
|
||||
/*
|
||||
* setmode is used to assert to be in svc mode during boot. For v7-M
|
||||
* this is done in __v7m_setup, so setmode can be empty here.
|
||||
*/
|
||||
.macro setmode, mode, reg
|
||||
.endm
|
||||
#elif defined(CONFIG_THUMB2_KERNEL)
|
||||
.macro setmode, mode, reg
|
||||
mov \reg, #\mode
|
||||
msr cpsr_c, \reg
|
||||
|
|
|
@ -61,6 +61,20 @@ static inline void set_cr(unsigned int val)
|
|||
isb();
|
||||
}
|
||||
|
||||
static inline unsigned int get_auxcr(void)
|
||||
{
|
||||
unsigned int val;
|
||||
asm("mrc p15, 0, %0, c1, c0, 1 @ get AUXCR" : "=r" (val));
|
||||
return val;
|
||||
}
|
||||
|
||||
static inline void set_auxcr(unsigned int val)
|
||||
{
|
||||
asm volatile("mcr p15, 0, %0, c1, c0, 1 @ set AUXCR"
|
||||
: : "r" (val));
|
||||
isb();
|
||||
}
|
||||
|
||||
#ifndef CONFIG_SMP
|
||||
extern void adjust_cr(unsigned long mask, unsigned long set);
|
||||
#endif
|
||||
|
|
|
@ -10,6 +10,22 @@
|
|||
#define CPUID_TLBTYPE 3
|
||||
#define CPUID_MPIDR 5
|
||||
|
||||
#ifdef CONFIG_CPU_V7M
|
||||
#define CPUID_EXT_PFR0 0x40
|
||||
#define CPUID_EXT_PFR1 0x44
|
||||
#define CPUID_EXT_DFR0 0x48
|
||||
#define CPUID_EXT_AFR0 0x4c
|
||||
#define CPUID_EXT_MMFR0 0x50
|
||||
#define CPUID_EXT_MMFR1 0x54
|
||||
#define CPUID_EXT_MMFR2 0x58
|
||||
#define CPUID_EXT_MMFR3 0x5c
|
||||
#define CPUID_EXT_ISAR0 0x60
|
||||
#define CPUID_EXT_ISAR1 0x64
|
||||
#define CPUID_EXT_ISAR2 0x68
|
||||
#define CPUID_EXT_ISAR3 0x6c
|
||||
#define CPUID_EXT_ISAR4 0x70
|
||||
#define CPUID_EXT_ISAR5 0x74
|
||||
#else
|
||||
#define CPUID_EXT_PFR0 "c1, 0"
|
||||
#define CPUID_EXT_PFR1 "c1, 1"
|
||||
#define CPUID_EXT_DFR0 "c1, 2"
|
||||
|
@ -24,6 +40,7 @@
|
|||
#define CPUID_EXT_ISAR3 "c2, 3"
|
||||
#define CPUID_EXT_ISAR4 "c2, 4"
|
||||
#define CPUID_EXT_ISAR5 "c2, 5"
|
||||
#endif
|
||||
|
||||
#define MPIDR_SMP_BITMASK (0x3 << 30)
|
||||
#define MPIDR_SMP_VALUE (0x2 << 30)
|
||||
|
@ -81,7 +98,23 @@ extern unsigned int processor_id;
|
|||
__val; \
|
||||
})
|
||||
|
||||
#else /* ifdef CONFIG_CPU_CP15 */
|
||||
#elif defined(CONFIG_CPU_V7M)
|
||||
|
||||
#include <asm/io.h>
|
||||
#include <asm/v7m.h>
|
||||
|
||||
#define read_cpuid(reg) \
|
||||
({ \
|
||||
WARN_ON_ONCE(1); \
|
||||
0; \
|
||||
})
|
||||
|
||||
static inline unsigned int __attribute_const__ read_cpuid_ext(unsigned offset)
|
||||
{
|
||||
return readl(BASEADDR_V7M_SCB + offset);
|
||||
}
|
||||
|
||||
#else /* ifdef CONFIG_CPU_CP15 / elif defined (CONFIG_CPU_V7M) */
|
||||
|
||||
/*
|
||||
* read_cpuid and read_cpuid_ext should only ever be called on machines that
|
||||
|
@ -108,7 +141,14 @@ static inline unsigned int __attribute_const__ read_cpuid_id(void)
|
|||
return read_cpuid(CPUID_ID);
|
||||
}
|
||||
|
||||
#else /* ifdef CONFIG_CPU_CP15 */
|
||||
#elif defined(CONFIG_CPU_V7M)
|
||||
|
||||
static inline unsigned int __attribute_const__ read_cpuid_id(void)
|
||||
{
|
||||
return readl(BASEADDR_V7M_SCB + V7M_SCB_CPUID);
|
||||
}
|
||||
|
||||
#else /* ifdef CONFIG_CPU_CP15 / elif defined(CONFIG_CPU_V7M) */
|
||||
|
||||
static inline unsigned int __attribute_const__ read_cpuid_id(void)
|
||||
{
|
||||
|
|
|
@ -117,10 +117,37 @@
|
|||
# endif
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_CPU_V7M)
|
||||
# ifdef _CACHE
|
||||
# define MULTI_CACHE 1
|
||||
# else
|
||||
# define _CACHE nop
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if !defined(_CACHE) && !defined(MULTI_CACHE)
|
||||
#error Unknown cache maintenance model
|
||||
#endif
|
||||
|
||||
#ifndef __ASSEMBLER__
|
||||
extern inline void nop_flush_icache_all(void) { }
|
||||
extern inline void nop_flush_kern_cache_all(void) { }
|
||||
extern inline void nop_flush_kern_cache_louis(void) { }
|
||||
extern inline void nop_flush_user_cache_all(void) { }
|
||||
extern inline void nop_flush_user_cache_range(unsigned long a,
|
||||
unsigned long b, unsigned int c) { }
|
||||
|
||||
extern inline void nop_coherent_kern_range(unsigned long a, unsigned long b) { }
|
||||
extern inline int nop_coherent_user_range(unsigned long a,
|
||||
unsigned long b) { return 0; }
|
||||
extern inline void nop_flush_kern_dcache_area(void *a, size_t s) { }
|
||||
|
||||
extern inline void nop_dma_flush_range(const void *a, const void *b) { }
|
||||
|
||||
extern inline void nop_dma_map_area(const void *s, size_t l, int f) { }
|
||||
extern inline void nop_dma_unmap_area(const void *s, size_t l, int f) { }
|
||||
#endif
|
||||
|
||||
#ifndef MULTI_CACHE
|
||||
#define __cpuc_flush_icache_all __glue(_CACHE,_flush_icache_all)
|
||||
#define __cpuc_flush_kern_all __glue(_CACHE,_flush_kern_cache_all)
|
||||
|
|
|
@ -95,6 +95,14 @@
|
|||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_CPU_ABRT_NOMMU
|
||||
# ifdef CPU_DABORT_HANDLER
|
||||
# define MULTI_DABORT 1
|
||||
# else
|
||||
# define CPU_DABORT_HANDLER nommu_early_abort
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef CPU_DABORT_HANDLER
|
||||
#error Unknown data abort handler type
|
||||
#endif
|
||||
|
|
|
@ -239,6 +239,15 @@
|
|||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_CPU_V7M
|
||||
# ifdef CPU_NAME
|
||||
# undef MULTI_CPU
|
||||
# define MULTI_CPU
|
||||
# else
|
||||
# define CPU_NAME cpu_v7m
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef MULTI_CPU
|
||||
#define cpu_proc_init __glue(CPU_NAME,_proc_init)
|
||||
#define cpu_proc_fin __glue(CPU_NAME,_proc_fin)
|
||||
|
|
|
@ -1,186 +0,0 @@
|
|||
/*
|
||||
* arch/arm/include/asm/hardware/pci_v3.h
|
||||
*
|
||||
* Internal header file PCI V3 chip
|
||||
*
|
||||
* Copyright (C) ARM Limited
|
||||
* Copyright (C) 2000-2001 Deep Blue Solutions Ltd.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
#ifndef ASM_ARM_HARDWARE_PCI_V3_H
|
||||
#define ASM_ARM_HARDWARE_PCI_V3_H
|
||||
|
||||
/* -------------------------------------------------------------------------------
|
||||
* V3 Local Bus to PCI Bridge definitions
|
||||
* -------------------------------------------------------------------------------
|
||||
* Registers (these are taken from page 129 of the EPC User's Manual Rev 1.04
|
||||
* All V3 register names are prefaced by V3_ to avoid clashing with any other
|
||||
* PCI definitions. Their names match the user's manual.
|
||||
*
|
||||
* I'm assuming that I20 is disabled.
|
||||
*
|
||||
*/
|
||||
#define V3_PCI_VENDOR 0x00000000
|
||||
#define V3_PCI_DEVICE 0x00000002
|
||||
#define V3_PCI_CMD 0x00000004
|
||||
#define V3_PCI_STAT 0x00000006
|
||||
#define V3_PCI_CC_REV 0x00000008
|
||||
#define V3_PCI_HDR_CFG 0x0000000C
|
||||
#define V3_PCI_IO_BASE 0x00000010
|
||||
#define V3_PCI_BASE0 0x00000014
|
||||
#define V3_PCI_BASE1 0x00000018
|
||||
#define V3_PCI_SUB_VENDOR 0x0000002C
|
||||
#define V3_PCI_SUB_ID 0x0000002E
|
||||
#define V3_PCI_ROM 0x00000030
|
||||
#define V3_PCI_BPARAM 0x0000003C
|
||||
#define V3_PCI_MAP0 0x00000040
|
||||
#define V3_PCI_MAP1 0x00000044
|
||||
#define V3_PCI_INT_STAT 0x00000048
|
||||
#define V3_PCI_INT_CFG 0x0000004C
|
||||
#define V3_LB_BASE0 0x00000054
|
||||
#define V3_LB_BASE1 0x00000058
|
||||
#define V3_LB_MAP0 0x0000005E
|
||||
#define V3_LB_MAP1 0x00000062
|
||||
#define V3_LB_BASE2 0x00000064
|
||||
#define V3_LB_MAP2 0x00000066
|
||||
#define V3_LB_SIZE 0x00000068
|
||||
#define V3_LB_IO_BASE 0x0000006E
|
||||
#define V3_FIFO_CFG 0x00000070
|
||||
#define V3_FIFO_PRIORITY 0x00000072
|
||||
#define V3_FIFO_STAT 0x00000074
|
||||
#define V3_LB_ISTAT 0x00000076
|
||||
#define V3_LB_IMASK 0x00000077
|
||||
#define V3_SYSTEM 0x00000078
|
||||
#define V3_LB_CFG 0x0000007A
|
||||
#define V3_PCI_CFG 0x0000007C
|
||||
#define V3_DMA_PCI_ADR0 0x00000080
|
||||
#define V3_DMA_PCI_ADR1 0x00000090
|
||||
#define V3_DMA_LOCAL_ADR0 0x00000084
|
||||
#define V3_DMA_LOCAL_ADR1 0x00000094
|
||||
#define V3_DMA_LENGTH0 0x00000088
|
||||
#define V3_DMA_LENGTH1 0x00000098
|
||||
#define V3_DMA_CSR0 0x0000008B
|
||||
#define V3_DMA_CSR1 0x0000009B
|
||||
#define V3_DMA_CTLB_ADR0 0x0000008C
|
||||
#define V3_DMA_CTLB_ADR1 0x0000009C
|
||||
#define V3_DMA_DELAY 0x000000E0
|
||||
#define V3_MAIL_DATA 0x000000C0
|
||||
#define V3_PCI_MAIL_IEWR 0x000000D0
|
||||
#define V3_PCI_MAIL_IERD 0x000000D2
|
||||
#define V3_LB_MAIL_IEWR 0x000000D4
|
||||
#define V3_LB_MAIL_IERD 0x000000D6
|
||||
#define V3_MAIL_WR_STAT 0x000000D8
|
||||
#define V3_MAIL_RD_STAT 0x000000DA
|
||||
#define V3_QBA_MAP 0x000000DC
|
||||
|
||||
/* PCI COMMAND REGISTER bits
|
||||
*/
|
||||
#define V3_COMMAND_M_FBB_EN (1 << 9)
|
||||
#define V3_COMMAND_M_SERR_EN (1 << 8)
|
||||
#define V3_COMMAND_M_PAR_EN (1 << 6)
|
||||
#define V3_COMMAND_M_MASTER_EN (1 << 2)
|
||||
#define V3_COMMAND_M_MEM_EN (1 << 1)
|
||||
#define V3_COMMAND_M_IO_EN (1 << 0)
|
||||
|
||||
/* SYSTEM REGISTER bits
|
||||
*/
|
||||
#define V3_SYSTEM_M_RST_OUT (1 << 15)
|
||||
#define V3_SYSTEM_M_LOCK (1 << 14)
|
||||
|
||||
/* PCI_CFG bits
|
||||
*/
|
||||
#define V3_PCI_CFG_M_I2O_EN (1 << 15)
|
||||
#define V3_PCI_CFG_M_IO_REG_DIS (1 << 14)
|
||||
#define V3_PCI_CFG_M_IO_DIS (1 << 13)
|
||||
#define V3_PCI_CFG_M_EN3V (1 << 12)
|
||||
#define V3_PCI_CFG_M_RETRY_EN (1 << 10)
|
||||
#define V3_PCI_CFG_M_AD_LOW1 (1 << 9)
|
||||
#define V3_PCI_CFG_M_AD_LOW0 (1 << 8)
|
||||
|
||||
/* PCI_BASE register bits (PCI -> Local Bus)
|
||||
*/
|
||||
#define V3_PCI_BASE_M_ADR_BASE 0xFFF00000
|
||||
#define V3_PCI_BASE_M_ADR_BASEL 0x000FFF00
|
||||
#define V3_PCI_BASE_M_PREFETCH (1 << 3)
|
||||
#define V3_PCI_BASE_M_TYPE (3 << 1)
|
||||
#define V3_PCI_BASE_M_IO (1 << 0)
|
||||
|
||||
/* PCI MAP register bits (PCI -> Local bus)
|
||||
*/
|
||||
#define V3_PCI_MAP_M_MAP_ADR 0xFFF00000
|
||||
#define V3_PCI_MAP_M_RD_POST_INH (1 << 15)
|
||||
#define V3_PCI_MAP_M_ROM_SIZE (3 << 10)
|
||||
#define V3_PCI_MAP_M_SWAP (3 << 8)
|
||||
#define V3_PCI_MAP_M_ADR_SIZE 0x000000F0
|
||||
#define V3_PCI_MAP_M_REG_EN (1 << 1)
|
||||
#define V3_PCI_MAP_M_ENABLE (1 << 0)
|
||||
|
||||
/*
|
||||
* LB_BASE0,1 register bits (Local bus -> PCI)
|
||||
*/
|
||||
#define V3_LB_BASE_ADR_BASE 0xfff00000
|
||||
#define V3_LB_BASE_SWAP (3 << 8)
|
||||
#define V3_LB_BASE_ADR_SIZE (15 << 4)
|
||||
#define V3_LB_BASE_PREFETCH (1 << 3)
|
||||
#define V3_LB_BASE_ENABLE (1 << 0)
|
||||
|
||||
#define V3_LB_BASE_ADR_SIZE_1MB (0 << 4)
|
||||
#define V3_LB_BASE_ADR_SIZE_2MB (1 << 4)
|
||||
#define V3_LB_BASE_ADR_SIZE_4MB (2 << 4)
|
||||
#define V3_LB_BASE_ADR_SIZE_8MB (3 << 4)
|
||||
#define V3_LB_BASE_ADR_SIZE_16MB (4 << 4)
|
||||
#define V3_LB_BASE_ADR_SIZE_32MB (5 << 4)
|
||||
#define V3_LB_BASE_ADR_SIZE_64MB (6 << 4)
|
||||
#define V3_LB_BASE_ADR_SIZE_128MB (7 << 4)
|
||||
#define V3_LB_BASE_ADR_SIZE_256MB (8 << 4)
|
||||
#define V3_LB_BASE_ADR_SIZE_512MB (9 << 4)
|
||||
#define V3_LB_BASE_ADR_SIZE_1GB (10 << 4)
|
||||
#define V3_LB_BASE_ADR_SIZE_2GB (11 << 4)
|
||||
|
||||
#define v3_addr_to_lb_base(a) ((a) & V3_LB_BASE_ADR_BASE)
|
||||
|
||||
/*
|
||||
* LB_MAP0,1 register bits (Local bus -> PCI)
|
||||
*/
|
||||
#define V3_LB_MAP_MAP_ADR 0xfff0
|
||||
#define V3_LB_MAP_TYPE (7 << 1)
|
||||
#define V3_LB_MAP_AD_LOW_EN (1 << 0)
|
||||
|
||||
#define V3_LB_MAP_TYPE_IACK (0 << 1)
|
||||
#define V3_LB_MAP_TYPE_IO (1 << 1)
|
||||
#define V3_LB_MAP_TYPE_MEM (3 << 1)
|
||||
#define V3_LB_MAP_TYPE_CONFIG (5 << 1)
|
||||
#define V3_LB_MAP_TYPE_MEM_MULTIPLE (6 << 1)
|
||||
|
||||
#define v3_addr_to_lb_map(a) (((a) >> 16) & V3_LB_MAP_MAP_ADR)
|
||||
|
||||
/*
|
||||
* LB_BASE2 register bits (Local bus -> PCI IO)
|
||||
*/
|
||||
#define V3_LB_BASE2_ADR_BASE 0xff00
|
||||
#define V3_LB_BASE2_SWAP (3 << 6)
|
||||
#define V3_LB_BASE2_ENABLE (1 << 0)
|
||||
|
||||
#define v3_addr_to_lb_base2(a) (((a) >> 16) & V3_LB_BASE2_ADR_BASE)
|
||||
|
||||
/*
|
||||
* LB_MAP2 register bits (Local bus -> PCI IO)
|
||||
*/
|
||||
#define V3_LB_MAP2_MAP_ADR 0xff00
|
||||
|
||||
#define v3_addr_to_lb_map2(a) (((a) >> 16) & V3_LB_MAP2_MAP_ADR)
|
||||
|
||||
#endif
|
|
@ -8,6 +8,16 @@
|
|||
/*
|
||||
* CPU interrupt mask handling.
|
||||
*/
|
||||
#ifdef CONFIG_CPU_V7M
|
||||
#define IRQMASK_REG_NAME_R "primask"
|
||||
#define IRQMASK_REG_NAME_W "primask"
|
||||
#define IRQMASK_I_BIT 1
|
||||
#else
|
||||
#define IRQMASK_REG_NAME_R "cpsr"
|
||||
#define IRQMASK_REG_NAME_W "cpsr_c"
|
||||
#define IRQMASK_I_BIT PSR_I_BIT
|
||||
#endif
|
||||
|
||||
#if __LINUX_ARM_ARCH__ >= 6
|
||||
|
||||
static inline unsigned long arch_local_irq_save(void)
|
||||
|
@ -15,7 +25,7 @@ static inline unsigned long arch_local_irq_save(void)
|
|||
unsigned long flags;
|
||||
|
||||
asm volatile(
|
||||
" mrs %0, cpsr @ arch_local_irq_save\n"
|
||||
" mrs %0, " IRQMASK_REG_NAME_R " @ arch_local_irq_save\n"
|
||||
" cpsid i"
|
||||
: "=r" (flags) : : "memory", "cc");
|
||||
return flags;
|
||||
|
@ -129,7 +139,7 @@ static inline unsigned long arch_local_save_flags(void)
|
|||
{
|
||||
unsigned long flags;
|
||||
asm volatile(
|
||||
" mrs %0, cpsr @ local_save_flags"
|
||||
" mrs %0, " IRQMASK_REG_NAME_R " @ local_save_flags"
|
||||
: "=r" (flags) : : "memory", "cc");
|
||||
return flags;
|
||||
}
|
||||
|
@ -140,7 +150,7 @@ static inline unsigned long arch_local_save_flags(void)
|
|||
static inline void arch_local_irq_restore(unsigned long flags)
|
||||
{
|
||||
asm volatile(
|
||||
" msr cpsr_c, %0 @ local_irq_restore"
|
||||
" msr " IRQMASK_REG_NAME_W ", %0 @ local_irq_restore"
|
||||
:
|
||||
: "r" (flags)
|
||||
: "memory", "cc");
|
||||
|
@ -148,8 +158,8 @@ static inline void arch_local_irq_restore(unsigned long flags)
|
|||
|
||||
static inline int arch_irqs_disabled_flags(unsigned long flags)
|
||||
{
|
||||
return flags & PSR_I_BIT;
|
||||
return flags & IRQMASK_I_BIT;
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
#endif /* ifdef __KERNEL__ */
|
||||
#endif /* ifndef __ASM_ARM_IRQFLAGS_H */
|
||||
|
|
|
@ -8,6 +8,8 @@
|
|||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
struct tag;
|
||||
|
@ -16,8 +18,10 @@ struct pt_regs;
|
|||
struct smp_operations;
|
||||
#ifdef CONFIG_SMP
|
||||
#define smp_ops(ops) (&(ops))
|
||||
#define smp_init_ops(ops) (&(ops))
|
||||
#else
|
||||
#define smp_ops(ops) (struct smp_operations *)NULL
|
||||
#define smp_init_ops(ops) (bool (*)(void))NULL
|
||||
#endif
|
||||
|
||||
struct machine_desc {
|
||||
|
@ -41,6 +45,7 @@ struct machine_desc {
|
|||
unsigned char reserve_lp2 :1; /* never has lp2 */
|
||||
char restart_mode; /* default restart mode */
|
||||
struct smp_operations *smp; /* SMP operations */
|
||||
bool (*smp_init)(void);
|
||||
void (*fixup)(struct tag *, char **,
|
||||
struct meminfo *);
|
||||
void (*reserve)(void);/* reserve mem blocks */
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
struct pci_sys_data;
|
||||
struct pci_ops;
|
||||
struct pci_bus;
|
||||
struct device;
|
||||
|
||||
struct hw_pci {
|
||||
#ifdef CONFIG_PCI_DOMAINS
|
||||
|
@ -68,7 +69,16 @@ struct pci_sys_data {
|
|||
/*
|
||||
* Call this with your hw_pci struct to initialise the PCI system.
|
||||
*/
|
||||
void pci_common_init(struct hw_pci *);
|
||||
void pci_common_init_dev(struct device *, struct hw_pci *);
|
||||
|
||||
/*
|
||||
* Compatibility wrapper for older platforms that do not care about
|
||||
* passing the parent device.
|
||||
*/
|
||||
static inline void pci_common_init(struct hw_pci *hw)
|
||||
{
|
||||
pci_common_init_dev(NULL, hw);
|
||||
}
|
||||
|
||||
/*
|
||||
* Setup early fixed I/O mapping.
|
||||
|
@ -96,9 +106,4 @@ extern struct pci_ops via82c505_ops;
|
|||
extern int via82c505_setup(int nr, struct pci_sys_data *);
|
||||
extern void via82c505_init(void *sysdata);
|
||||
|
||||
extern struct pci_ops pci_v3_ops;
|
||||
extern int pci_v3_setup(int nr, struct pci_sys_data *);
|
||||
extern void pci_v3_preinit(void);
|
||||
extern void pci_v3_postinit(void);
|
||||
|
||||
#endif /* __ASM_MACH_PCI_H */
|
||||
|
|
|
@ -32,5 +32,14 @@ struct psci_operations {
|
|||
};
|
||||
|
||||
extern struct psci_operations psci_ops;
|
||||
extern struct smp_operations psci_smp_ops;
|
||||
|
||||
#ifdef CONFIG_ARM_PSCI
|
||||
void psci_init(void);
|
||||
bool psci_smp_available(void);
|
||||
#else
|
||||
static inline void psci_init(void) { }
|
||||
static inline bool psci_smp_available(void) { return false; }
|
||||
#endif
|
||||
|
||||
#endif /* __ASM_ARM_PSCI_H */
|
||||
|
|
|
@ -45,6 +45,7 @@ struct pt_regs {
|
|||
*/
|
||||
static inline int valid_user_regs(struct pt_regs *regs)
|
||||
{
|
||||
#ifndef CONFIG_CPU_V7M
|
||||
unsigned long mode = regs->ARM_cpsr & MODE_MASK;
|
||||
|
||||
/*
|
||||
|
@ -67,6 +68,9 @@ static inline int valid_user_regs(struct pt_regs *regs)
|
|||
regs->ARM_cpsr |= USR_MODE;
|
||||
|
||||
return 0;
|
||||
#else /* ifndef CONFIG_CPU_V7M */
|
||||
return 1;
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline long regs_return_value(struct pt_regs *regs)
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
#define CPU_ARCH_ARMv5TEJ 7
|
||||
#define CPU_ARCH_ARMv6 8
|
||||
#define CPU_ARCH_ARMv7 9
|
||||
#define CPU_ARCH_ARMv7M 10
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
/*
|
||||
* Common defines for v7m cpus
|
||||
*/
|
||||
#define V7M_SCS_ICTR IOMEM(0xe000e004)
|
||||
#define V7M_SCS_ICTR_INTLINESNUM_MASK 0x0000000f
|
||||
|
||||
#define BASEADDR_V7M_SCB IOMEM(0xe000ed00)
|
||||
|
||||
#define V7M_SCB_CPUID 0x00
|
||||
|
||||
#define V7M_SCB_ICSR 0x04
|
||||
#define V7M_SCB_ICSR_PENDSVSET (1 << 28)
|
||||
#define V7M_SCB_ICSR_PENDSVCLR (1 << 27)
|
||||
#define V7M_SCB_ICSR_RETTOBASE (1 << 11)
|
||||
|
||||
#define V7M_SCB_VTOR 0x08
|
||||
|
||||
#define V7M_SCB_SCR 0x10
|
||||
#define V7M_SCB_SCR_SLEEPDEEP (1 << 2)
|
||||
|
||||
#define V7M_SCB_CCR 0x14
|
||||
#define V7M_SCB_CCR_STKALIGN (1 << 9)
|
||||
|
||||
#define V7M_SCB_SHPR2 0x1c
|
||||
#define V7M_SCB_SHPR3 0x20
|
||||
|
||||
#define V7M_SCB_SHCSR 0x24
|
||||
#define V7M_SCB_SHCSR_USGFAULTENA (1 << 18)
|
||||
#define V7M_SCB_SHCSR_BUSFAULTENA (1 << 17)
|
||||
#define V7M_SCB_SHCSR_MEMFAULTENA (1 << 16)
|
||||
|
||||
#define V7M_xPSR_FRAMEPTRALIGN 0x00000200
|
||||
#define V7M_xPSR_EXCEPTIONNO 0x000001ff
|
||||
|
||||
/*
|
||||
* When branching to an address that has bits [31:28] == 0xf an exception return
|
||||
* occurs. Bits [27:5] are reserved (SBOP). If the processor implements the FP
|
||||
* extension Bit [4] defines if the exception frame has space allocated for FP
|
||||
* state information, SBOP otherwise. Bit [3] defines the mode that is returned
|
||||
* to (0 -> handler mode; 1 -> thread mode). Bit [2] defines which sp is used
|
||||
* (0 -> msp; 1 -> psp). Bits [1:0] are fixed to 0b01.
|
||||
*/
|
||||
#define EXC_RET_STACK_MASK 0x00000004
|
||||
#define EXC_RET_THREADMODE_PROCESSSTACK 0xfffffffd
|
|
@ -65,6 +65,14 @@
|
|||
#define IMX6Q_UART_BASE_ADDR(n) IMX6Q_UART##n##_BASE_ADDR
|
||||
#define IMX6Q_UART_BASE(n) IMX6Q_UART_BASE_ADDR(n)
|
||||
|
||||
#define IMX6SL_UART1_BASE_ADDR 0x02020000
|
||||
#define IMX6SL_UART2_BASE_ADDR 0x02024000
|
||||
#define IMX6SL_UART3_BASE_ADDR 0x02034000
|
||||
#define IMX6SL_UART4_BASE_ADDR 0x02038000
|
||||
#define IMX6SL_UART5_BASE_ADDR 0x02018000
|
||||
#define IMX6SL_UART_BASE_ADDR(n) IMX6SL_UART##n##_BASE_ADDR
|
||||
#define IMX6SL_UART_BASE(n) IMX6SL_UART_BASE_ADDR(n)
|
||||
|
||||
#define IMX_DEBUG_UART_BASE(soc) soc##_UART_BASE(CONFIG_DEBUG_IMX_UART_PORT)
|
||||
|
||||
#ifdef CONFIG_DEBUG_IMX1_UART
|
||||
|
@ -83,6 +91,8 @@
|
|||
#define UART_PADDR IMX_DEBUG_UART_BASE(IMX53)
|
||||
#elif defined(CONFIG_DEBUG_IMX6Q_UART)
|
||||
#define UART_PADDR IMX_DEBUG_UART_BASE(IMX6Q)
|
||||
#elif defined(CONFIG_DEBUG_IMX6SL_UART)
|
||||
#define UART_PADDR IMX_DEBUG_UART_BASE(IMX6SL)
|
||||
#endif
|
||||
|
||||
#endif /* __DEBUG_IMX_UART_H */
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
/*
|
||||
* Early serial debug output macro for Keystone SOCs
|
||||
*
|
||||
* Copyright 2013 Texas Instruments, Inc.
|
||||
* Santosh Shilimkar <santosh.shilimkar@ti.com>
|
||||
*
|
||||
* Based on RMKs low level debug code.
|
||||
* Copyright (C) 1994-1999 Russell King
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include <linux/serial_reg.h>
|
||||
|
||||
#define UART_SHIFT 2
|
||||
#if defined(CONFIG_DEBUG_KEYSTONE_UART0)
|
||||
#define UART_PHYS 0x02530c00
|
||||
#define UART_VIRT 0xfeb30c00
|
||||
#elif defined(CONFIG_DEBUG_KEYSTONE_UART1)
|
||||
#define UART_PHYS 0x02531000
|
||||
#define UART_VIRT 0xfeb31000
|
||||
#endif
|
||||
|
||||
.macro addruart, rp, rv, tmp
|
||||
ldr \rv, =UART_VIRT @ physical base address
|
||||
ldr \rp, =UART_PHYS @ virtual base address
|
||||
.endm
|
||||
|
||||
.macro senduart,rd,rx
|
||||
str \rd, [\rx, #UART_TX << UART_SHIFT]
|
||||
.endm
|
||||
|
||||
.macro busyuart,rd,rx
|
||||
1002: ldr \rd, [\rx, #UART_LSR << UART_SHIFT]
|
||||
and \rd, \rd, #UART_LSR_TEMT | UART_LSR_THRE
|
||||
teq \rd, #UART_LSR_TEMT | UART_LSR_THRE
|
||||
bne 1002b
|
||||
.endm
|
||||
|
||||
.macro waituart,rd,rx
|
||||
.endm
|
|
@ -11,7 +11,12 @@
|
|||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_DEBUG_MVEBU_UART_ALTERNATE
|
||||
#define ARMADA_370_XP_REGS_PHYS_BASE 0xf1000000
|
||||
#else
|
||||
#define ARMADA_370_XP_REGS_PHYS_BASE 0xd0000000
|
||||
#endif
|
||||
|
||||
#define ARMADA_370_XP_REGS_VIRT_BASE 0xfec00000
|
||||
|
||||
.macro addruart, rp, rv, tmp
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
/*
|
||||
* Early serial output macro for Rockchip SoCs
|
||||
*
|
||||
* Copyright (C) 2012 Maxime Ripard
|
||||
*
|
||||
* Maxime Ripard <maxime.ripard@free-electrons.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.
|
||||
*/
|
||||
|
||||
#if defined(CONFIG_DEBUG_RK29_UART0)
|
||||
#define ROCKCHIP_UART_DEBUG_PHYS_BASE 0x20060000
|
||||
#define ROCKCHIP_UART_DEBUG_VIRT_BASE 0xfed60000
|
||||
#elif defined(CONFIG_DEBUG_RK29_UART1)
|
||||
#define ROCKCHIP_UART_DEBUG_PHYS_BASE 0x20064000
|
||||
#define ROCKCHIP_UART_DEBUG_VIRT_BASE 0xfed64000
|
||||
#elif defined(CONFIG_DEBUG_RK29_UART2)
|
||||
#define ROCKCHIP_UART_DEBUG_PHYS_BASE 0x20068000
|
||||
#define ROCKCHIP_UART_DEBUG_VIRT_BASE 0xfed68000
|
||||
#elif defined(CONFIG_DEBUG_RK3X_UART0)
|
||||
#define ROCKCHIP_UART_DEBUG_PHYS_BASE 0x10124000
|
||||
#define ROCKCHIP_UART_DEBUG_VIRT_BASE 0xfeb24000
|
||||
#elif defined(CONFIG_DEBUG_RK3X_UART1)
|
||||
#define ROCKCHIP_UART_DEBUG_PHYS_BASE 0x10126000
|
||||
#define ROCKCHIP_UART_DEBUG_VIRT_BASE 0xfeb26000
|
||||
#elif defined(CONFIG_DEBUG_RK3X_UART2)
|
||||
#define ROCKCHIP_UART_DEBUG_PHYS_BASE 0x20064000
|
||||
#define ROCKCHIP_UART_DEBUG_VIRT_BASE 0xfed64000
|
||||
#elif defined(CONFIG_DEBUG_RK3X_UART3)
|
||||
#define ROCKCHIP_UART_DEBUG_PHYS_BASE 0x20068000
|
||||
#define ROCKCHIP_UART_DEBUG_VIRT_BASE 0xfed68000
|
||||
#endif
|
||||
|
||||
.macro addruart, rp, rv, tmp
|
||||
ldr \rp, =ROCKCHIP_UART_DEBUG_PHYS_BASE
|
||||
ldr \rv, =ROCKCHIP_UART_DEBUG_VIRT_BASE
|
||||
.endm
|
||||
|
||||
#define UART_SHIFT 2
|
||||
#include <asm/hardware/debug-8250.S>
|
|
@ -1,14 +1,11 @@
|
|||
/*
|
||||
*
|
||||
* arch-arm/mach-u300/include/mach/debug-macro.S
|
||||
*
|
||||
*
|
||||
* Copyright (C) 2006-2009 ST-Ericsson AB
|
||||
* Copyright (C) 2006-2013 ST-Ericsson AB
|
||||
* License terms: GNU General Public License (GPL) version 2
|
||||
* Debugging macro include header.
|
||||
* Author: Linus Walleij <linus.walleij@stericsson.com>
|
||||
*/
|
||||
#include <mach/hardware.h>
|
||||
#define U300_SLOW_PER_PHYS_BASE 0xc0010000
|
||||
#define U300_SLOW_PER_VIRT_BASE 0xff000000
|
||||
|
||||
.macro addruart, rp, rv, tmp
|
||||
/* If we move the address using MMU, use this. */
|
|
@ -34,28 +34,47 @@
|
|||
|
||||
/*
|
||||
* PSR bits
|
||||
* Note on V7M there is no mode contained in the PSR
|
||||
*/
|
||||
#define USR26_MODE 0x00000000
|
||||
#define FIQ26_MODE 0x00000001
|
||||
#define IRQ26_MODE 0x00000002
|
||||
#define SVC26_MODE 0x00000003
|
||||
#if defined(__KERNEL__) && defined(CONFIG_CPU_V7M)
|
||||
/*
|
||||
* Use 0 here to get code right that creates a userspace
|
||||
* or kernel space thread.
|
||||
*/
|
||||
#define USR_MODE 0x00000000
|
||||
#define SVC_MODE 0x00000000
|
||||
#else
|
||||
#define USR_MODE 0x00000010
|
||||
#define SVC_MODE 0x00000013
|
||||
#endif
|
||||
#define FIQ_MODE 0x00000011
|
||||
#define IRQ_MODE 0x00000012
|
||||
#define SVC_MODE 0x00000013
|
||||
#define ABT_MODE 0x00000017
|
||||
#define HYP_MODE 0x0000001a
|
||||
#define UND_MODE 0x0000001b
|
||||
#define SYSTEM_MODE 0x0000001f
|
||||
#define MODE32_BIT 0x00000010
|
||||
#define MODE_MASK 0x0000001f
|
||||
#define PSR_T_BIT 0x00000020
|
||||
#define PSR_F_BIT 0x00000040
|
||||
#define PSR_I_BIT 0x00000080
|
||||
#define PSR_A_BIT 0x00000100
|
||||
#define PSR_E_BIT 0x00000200
|
||||
#define PSR_J_BIT 0x01000000
|
||||
#define PSR_Q_BIT 0x08000000
|
||||
|
||||
#define V4_PSR_T_BIT 0x00000020 /* >= V4T, but not V7M */
|
||||
#define V7M_PSR_T_BIT 0x01000000
|
||||
#if defined(__KERNEL__) && defined(CONFIG_CPU_V7M)
|
||||
#define PSR_T_BIT V7M_PSR_T_BIT
|
||||
#else
|
||||
/* for compatibility */
|
||||
#define PSR_T_BIT V4_PSR_T_BIT
|
||||
#endif
|
||||
|
||||
#define PSR_F_BIT 0x00000040 /* >= V4, but not V7M */
|
||||
#define PSR_I_BIT 0x00000080 /* >= V4, but not V7M */
|
||||
#define PSR_A_BIT 0x00000100 /* >= V6, but not V7M */
|
||||
#define PSR_E_BIT 0x00000200 /* >= V6, but not V7M */
|
||||
#define PSR_J_BIT 0x01000000 /* >= V5J, but not V7M */
|
||||
#define PSR_Q_BIT 0x08000000 /* >= V5E, including V7M */
|
||||
#define PSR_V_BIT 0x10000000
|
||||
#define PSR_C_BIT 0x20000000
|
||||
#define PSR_Z_BIT 0x40000000
|
||||
|
|
|
@ -15,7 +15,7 @@ CFLAGS_REMOVE_return_address.o = -pg
|
|||
|
||||
# Object file lists.
|
||||
|
||||
obj-y := elf.o entry-armv.o entry-common.o irq.o opcodes.o \
|
||||
obj-y := elf.o entry-common.o irq.o opcodes.o \
|
||||
process.o ptrace.o return_address.o sched_clock.o \
|
||||
setup.o signal.o stacktrace.o sys_arm.o time.o traps.o
|
||||
|
||||
|
@ -23,6 +23,12 @@ obj-$(CONFIG_ATAGS) += atags_parse.o
|
|||
obj-$(CONFIG_ATAGS_PROC) += atags_proc.o
|
||||
obj-$(CONFIG_DEPRECATED_PARAM_STRUCT) += atags_compat.o
|
||||
|
||||
ifeq ($(CONFIG_CPU_V7M),y)
|
||||
obj-y += entry-v7m.o
|
||||
else
|
||||
obj-y += entry-armv.o
|
||||
endif
|
||||
|
||||
obj-$(CONFIG_OC_ETM) += etm.o
|
||||
obj-$(CONFIG_CPU_IDLE) += cpuidle.o
|
||||
obj-$(CONFIG_ISA_DMA_API) += dma.o
|
||||
|
@ -82,6 +88,9 @@ obj-$(CONFIG_DEBUG_LL) += debug.o
|
|||
obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
|
||||
|
||||
obj-$(CONFIG_ARM_VIRT_EXT) += hyp-stub.o
|
||||
obj-$(CONFIG_ARM_PSCI) += psci.o
|
||||
ifeq ($(CONFIG_ARM_PSCI),y)
|
||||
obj-y += psci.o
|
||||
obj-$(CONFIG_SMP) += psci_smp.o
|
||||
endif
|
||||
|
||||
extra-y := $(head-y) vmlinux.lds
|
||||
|
|
|
@ -445,7 +445,8 @@ static int pcibios_init_resources(int busnr, struct pci_sys_data *sys)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void pcibios_init_hw(struct hw_pci *hw, struct list_head *head)
|
||||
static void pcibios_init_hw(struct device *parent, struct hw_pci *hw,
|
||||
struct list_head *head)
|
||||
{
|
||||
struct pci_sys_data *sys = NULL;
|
||||
int ret;
|
||||
|
@ -480,7 +481,7 @@ static void pcibios_init_hw(struct hw_pci *hw, struct list_head *head)
|
|||
if (hw->scan)
|
||||
sys->bus = hw->scan(nr, sys);
|
||||
else
|
||||
sys->bus = pci_scan_root_bus(NULL, sys->busnr,
|
||||
sys->bus = pci_scan_root_bus(parent, sys->busnr,
|
||||
hw->ops, sys, &sys->resources);
|
||||
|
||||
if (!sys->bus)
|
||||
|
@ -497,7 +498,7 @@ static void pcibios_init_hw(struct hw_pci *hw, struct list_head *head)
|
|||
}
|
||||
}
|
||||
|
||||
void pci_common_init(struct hw_pci *hw)
|
||||
void pci_common_init_dev(struct device *parent, struct hw_pci *hw)
|
||||
{
|
||||
struct pci_sys_data *sys;
|
||||
LIST_HEAD(head);
|
||||
|
@ -505,7 +506,7 @@ void pci_common_init(struct hw_pci *hw)
|
|||
pci_add_flags(PCI_REASSIGN_ALL_RSRC);
|
||||
if (hw->preinit)
|
||||
hw->preinit();
|
||||
pcibios_init_hw(hw, &head);
|
||||
pcibios_init_hw(parent, hw, &head);
|
||||
if (hw->postinit)
|
||||
hw->postinit();
|
||||
|
||||
|
|
|
@ -350,6 +350,9 @@ ENDPROC(ftrace_stub)
|
|||
|
||||
.align 5
|
||||
ENTRY(vector_swi)
|
||||
#ifdef CONFIG_CPU_V7M
|
||||
v7m_exception_entry
|
||||
#else
|
||||
sub sp, sp, #S_FRAME_SIZE
|
||||
stmia sp, {r0 - r12} @ Calling r0 - r12
|
||||
ARM( add r8, sp, #S_PC )
|
||||
|
@ -360,6 +363,7 @@ ENTRY(vector_swi)
|
|||
str lr, [sp, #S_PC] @ Save calling PC
|
||||
str r8, [sp, #S_PSR] @ Save CPSR
|
||||
str r0, [sp, #S_OLD_R0] @ Save OLD_R0
|
||||
#endif
|
||||
zero_fp
|
||||
|
||||
/*
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
#include <asm/asm-offsets.h>
|
||||
#include <asm/errno.h>
|
||||
#include <asm/thread_info.h>
|
||||
#include <asm/v7m.h>
|
||||
|
||||
@ Bad Abort numbers
|
||||
@ -----------------
|
||||
|
@ -44,6 +45,116 @@
|
|||
#endif
|
||||
.endm
|
||||
|
||||
#ifdef CONFIG_CPU_V7M
|
||||
/*
|
||||
* ARMv7-M exception entry/exit macros.
|
||||
*
|
||||
* xPSR, ReturnAddress(), LR (R14), R12, R3, R2, R1, and R0 are
|
||||
* automatically saved on the current stack (32 words) before
|
||||
* switching to the exception stack (SP_main).
|
||||
*
|
||||
* If exception is taken while in user mode, SP_main is
|
||||
* empty. Otherwise, SP_main is aligned to 64 bit automatically
|
||||
* (CCR.STKALIGN set).
|
||||
*
|
||||
* Linux assumes that the interrupts are disabled when entering an
|
||||
* exception handler and it may BUG if this is not the case. Interrupts
|
||||
* are disabled during entry and reenabled in the exit macro.
|
||||
*
|
||||
* v7m_exception_slow_exit is used when returning from SVC or PendSV.
|
||||
* When returning to kernel mode, we don't return from exception.
|
||||
*/
|
||||
.macro v7m_exception_entry
|
||||
@ determine the location of the registers saved by the core during
|
||||
@ exception entry. Depending on the mode the cpu was in when the
|
||||
@ exception happend that is either on the main or the process stack.
|
||||
@ Bit 2 of EXC_RETURN stored in the lr register specifies which stack
|
||||
@ was used.
|
||||
tst lr, #EXC_RET_STACK_MASK
|
||||
mrsne r12, psp
|
||||
moveq r12, sp
|
||||
|
||||
@ we cannot rely on r0-r3 and r12 matching the value saved in the
|
||||
@ exception frame because of tail-chaining. So these have to be
|
||||
@ reloaded.
|
||||
ldmia r12!, {r0-r3}
|
||||
|
||||
@ Linux expects to have irqs off. Do it here before taking stack space
|
||||
cpsid i
|
||||
|
||||
sub sp, #S_FRAME_SIZE-S_IP
|
||||
stmdb sp!, {r0-r11}
|
||||
|
||||
@ load saved r12, lr, return address and xPSR.
|
||||
@ r0-r7 are used for signals and never touched from now on. Clobbering
|
||||
@ r8-r12 is OK.
|
||||
mov r9, r12
|
||||
ldmia r9!, {r8, r10-r12}
|
||||
|
||||
@ calculate the original stack pointer value.
|
||||
@ r9 currently points to the memory location just above the auto saved
|
||||
@ xPSR.
|
||||
@ The cpu might automatically 8-byte align the stack. Bit 9
|
||||
@ of the saved xPSR specifies if stack aligning took place. In this case
|
||||
@ another 32-bit value is included in the stack.
|
||||
|
||||
tst r12, V7M_xPSR_FRAMEPTRALIGN
|
||||
addne r9, r9, #4
|
||||
|
||||
@ store saved r12 using str to have a register to hold the base for stm
|
||||
str r8, [sp, #S_IP]
|
||||
add r8, sp, #S_SP
|
||||
@ store r13-r15, xPSR
|
||||
stmia r8!, {r9-r12}
|
||||
@ store old_r0
|
||||
str r0, [r8]
|
||||
.endm
|
||||
|
||||
/*
|
||||
* PENDSV and SVCALL are configured to have the same exception
|
||||
* priorities. As a kernel thread runs at SVCALL execution priority it
|
||||
* can never be preempted and so we will never have to return to a
|
||||
* kernel thread here.
|
||||
*/
|
||||
.macro v7m_exception_slow_exit ret_r0
|
||||
cpsid i
|
||||
ldr lr, =EXC_RET_THREADMODE_PROCESSSTACK
|
||||
|
||||
@ read original r12, sp, lr, pc and xPSR
|
||||
add r12, sp, #S_IP
|
||||
ldmia r12, {r1-r5}
|
||||
|
||||
@ an exception frame is always 8-byte aligned. To tell the hardware if
|
||||
@ the sp to be restored is aligned or not set bit 9 of the saved xPSR
|
||||
@ accordingly.
|
||||
tst r2, #4
|
||||
subne r2, r2, #4
|
||||
orrne r5, V7M_xPSR_FRAMEPTRALIGN
|
||||
biceq r5, V7M_xPSR_FRAMEPTRALIGN
|
||||
|
||||
@ write basic exception frame
|
||||
stmdb r2!, {r1, r3-r5}
|
||||
ldmia sp, {r1, r3-r5}
|
||||
.if \ret_r0
|
||||
stmdb r2!, {r0, r3-r5}
|
||||
.else
|
||||
stmdb r2!, {r1, r3-r5}
|
||||
.endif
|
||||
|
||||
@ restore process sp
|
||||
msr psp, r2
|
||||
|
||||
@ restore original r4-r11
|
||||
ldmia sp!, {r0-r11}
|
||||
|
||||
@ restore main sp
|
||||
add sp, sp, #S_FRAME_SIZE-S_IP
|
||||
|
||||
cpsie i
|
||||
bx lr
|
||||
.endm
|
||||
#endif /* CONFIG_CPU_V7M */
|
||||
|
||||
@
|
||||
@ Store/load the USER SP and LR registers by switching to the SYS
|
||||
@ mode. Useful in Thumb-2 mode where "stm/ldm rd, {sp, lr}^" is not
|
||||
|
@ -165,6 +276,18 @@
|
|||
rfeia sp!
|
||||
.endm
|
||||
|
||||
#ifdef CONFIG_CPU_V7M
|
||||
/*
|
||||
* Note we don't need to do clrex here as clearing the local monitor is
|
||||
* part of each exception entry and exit sequence.
|
||||
*/
|
||||
.macro restore_user_regs, fast = 0, offset = 0
|
||||
.if \offset
|
||||
add sp, #\offset
|
||||
.endif
|
||||
v7m_exception_slow_exit ret_r0 = \fast
|
||||
.endm
|
||||
#else /* ifdef CONFIG_CPU_V7M */
|
||||
.macro restore_user_regs, fast = 0, offset = 0
|
||||
clrex @ clear the exclusive monitor
|
||||
mov r2, sp
|
||||
|
@ -181,6 +304,7 @@
|
|||
add sp, sp, #S_FRAME_SIZE - S_SP
|
||||
movs pc, lr @ return & move spsr_svc into cpsr
|
||||
.endm
|
||||
#endif /* ifdef CONFIG_CPU_V7M / else */
|
||||
|
||||
.macro get_thread_info, rd
|
||||
mov \rd, sp
|
||||
|
|
|
@ -0,0 +1,143 @@
|
|||
/*
|
||||
* linux/arch/arm/kernel/entry-v7m.S
|
||||
*
|
||||
* Copyright (C) 2008 ARM Ltd.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* Low-level vector interface routines for the ARMv7-M architecture
|
||||
*/
|
||||
#include <asm/memory.h>
|
||||
#include <asm/glue.h>
|
||||
#include <asm/thread_notify.h>
|
||||
#include <asm/v7m.h>
|
||||
|
||||
#include <mach/entry-macro.S>
|
||||
|
||||
#include "entry-header.S"
|
||||
|
||||
#ifdef CONFIG_TRACE_IRQFLAGS
|
||||
#error "CONFIG_TRACE_IRQFLAGS not supported on the current ARMv7M implementation"
|
||||
#endif
|
||||
|
||||
__invalid_entry:
|
||||
v7m_exception_entry
|
||||
adr r0, strerr
|
||||
mrs r1, ipsr
|
||||
mov r2, lr
|
||||
bl printk
|
||||
mov r0, sp
|
||||
bl show_regs
|
||||
1: b 1b
|
||||
ENDPROC(__invalid_entry)
|
||||
|
||||
strerr: .asciz "\nUnhandled exception: IPSR = %08lx LR = %08lx\n"
|
||||
|
||||
.align 2
|
||||
__irq_entry:
|
||||
v7m_exception_entry
|
||||
|
||||
@
|
||||
@ Invoke the IRQ handler
|
||||
@
|
||||
mrs r0, ipsr
|
||||
ldr r1, =V7M_xPSR_EXCEPTIONNO
|
||||
and r0, r1
|
||||
sub r0, #16
|
||||
mov r1, sp
|
||||
stmdb sp!, {lr}
|
||||
@ routine called with r0 = irq number, r1 = struct pt_regs *
|
||||
bl nvic_do_IRQ
|
||||
|
||||
pop {lr}
|
||||
@
|
||||
@ Check for any pending work if returning to user
|
||||
@
|
||||
ldr r1, =BASEADDR_V7M_SCB
|
||||
ldr r0, [r1, V7M_SCB_ICSR]
|
||||
tst r0, V7M_SCB_ICSR_RETTOBASE
|
||||
beq 2f
|
||||
|
||||
get_thread_info tsk
|
||||
ldr r2, [tsk, #TI_FLAGS]
|
||||
tst r2, #_TIF_WORK_MASK
|
||||
beq 2f @ no work pending
|
||||
mov r0, #V7M_SCB_ICSR_PENDSVSET
|
||||
str r0, [r1, V7M_SCB_ICSR] @ raise PendSV
|
||||
|
||||
2:
|
||||
@ registers r0-r3 and r12 are automatically restored on exception
|
||||
@ return. r4-r7 were not clobbered in v7m_exception_entry so for
|
||||
@ correctness they don't need to be restored. So only r8-r11 must be
|
||||
@ restored here. The easiest way to do so is to restore r0-r7, too.
|
||||
ldmia sp!, {r0-r11}
|
||||
add sp, #S_FRAME_SIZE-S_IP
|
||||
cpsie i
|
||||
bx lr
|
||||
ENDPROC(__irq_entry)
|
||||
|
||||
__pendsv_entry:
|
||||
v7m_exception_entry
|
||||
|
||||
ldr r1, =BASEADDR_V7M_SCB
|
||||
mov r0, #V7M_SCB_ICSR_PENDSVCLR
|
||||
str r0, [r1, V7M_SCB_ICSR] @ clear PendSV
|
||||
|
||||
@ execute the pending work, including reschedule
|
||||
get_thread_info tsk
|
||||
mov why, #0
|
||||
b ret_to_user
|
||||
ENDPROC(__pendsv_entry)
|
||||
|
||||
/*
|
||||
* Register switch for ARMv7-M processors.
|
||||
* r0 = previous task_struct, r1 = previous thread_info, r2 = next thread_info
|
||||
* previous and next are guaranteed not to be the same.
|
||||
*/
|
||||
ENTRY(__switch_to)
|
||||
.fnstart
|
||||
.cantunwind
|
||||
add ip, r1, #TI_CPU_SAVE
|
||||
stmia ip!, {r4 - r11} @ Store most regs on stack
|
||||
str sp, [ip], #4
|
||||
str lr, [ip], #4
|
||||
mov r5, r0
|
||||
add r4, r2, #TI_CPU_SAVE
|
||||
ldr r0, =thread_notify_head
|
||||
mov r1, #THREAD_NOTIFY_SWITCH
|
||||
bl atomic_notifier_call_chain
|
||||
mov ip, r4
|
||||
mov r0, r5
|
||||
ldmia ip!, {r4 - r11} @ Load all regs saved previously
|
||||
ldr sp, [ip]
|
||||
ldr pc, [ip, #4]!
|
||||
.fnend
|
||||
ENDPROC(__switch_to)
|
||||
|
||||
.data
|
||||
.align 8
|
||||
/*
|
||||
* Vector table (64 words => 256 bytes natural alignment)
|
||||
*/
|
||||
ENTRY(vector_table)
|
||||
.long 0 @ 0 - Reset stack pointer
|
||||
.long __invalid_entry @ 1 - Reset
|
||||
.long __invalid_entry @ 2 - NMI
|
||||
.long __invalid_entry @ 3 - HardFault
|
||||
.long __invalid_entry @ 4 - MemManage
|
||||
.long __invalid_entry @ 5 - BusFault
|
||||
.long __invalid_entry @ 6 - UsageFault
|
||||
.long __invalid_entry @ 7 - Reserved
|
||||
.long __invalid_entry @ 8 - Reserved
|
||||
.long __invalid_entry @ 9 - Reserved
|
||||
.long __invalid_entry @ 10 - Reserved
|
||||
.long vector_swi @ 11 - SVCall
|
||||
.long __invalid_entry @ 12 - Debug Monitor
|
||||
.long __invalid_entry @ 13 - Reserved
|
||||
.long __pendsv_entry @ 14 - PendSV
|
||||
.long __invalid_entry @ 15 - SysTick
|
||||
.rept 64 - 16
|
||||
.long __irq_entry @ 16..64 - External Interrupts
|
||||
.endr
|
|
@ -19,6 +19,7 @@
|
|||
#include <asm/asm-offsets.h>
|
||||
#include <asm/cp15.h>
|
||||
#include <asm/thread_info.h>
|
||||
#include <asm/v7m.h>
|
||||
|
||||
/*
|
||||
* Kernel startup entry point.
|
||||
|
@ -50,10 +51,13 @@ ENTRY(stext)
|
|||
|
||||
setmode PSR_F_BIT | PSR_I_BIT | SVC_MODE, r9 @ ensure svc mode
|
||||
@ and irqs disabled
|
||||
#ifndef CONFIG_CPU_CP15
|
||||
ldr r9, =CONFIG_PROCESSOR_ID
|
||||
#else
|
||||
#if defined(CONFIG_CPU_CP15)
|
||||
mrc p15, 0, r9, c0, c0 @ get processor id
|
||||
#elif defined(CONFIG_CPU_V7M)
|
||||
ldr r9, =BASEADDR_V7M_SCB
|
||||
ldr r9, [r9, V7M_SCB_CPUID]
|
||||
#else
|
||||
ldr r9, =CONFIG_PROCESSOR_ID
|
||||
#endif
|
||||
bl __lookup_processor_type @ r5=procinfo r9=cpuid
|
||||
movs r10, r5 @ invalid processor (r5=0)?
|
||||
|
|
|
@ -158,7 +158,7 @@ static const struct of_device_id psci_of_match[] __initconst = {
|
|||
{},
|
||||
};
|
||||
|
||||
static int __init psci_init(void)
|
||||
void __init psci_init(void)
|
||||
{
|
||||
struct device_node *np;
|
||||
const char *method;
|
||||
|
@ -166,7 +166,7 @@ static int __init psci_init(void)
|
|||
|
||||
np = of_find_matching_node(NULL, psci_of_match);
|
||||
if (!np)
|
||||
return 0;
|
||||
return;
|
||||
|
||||
pr_info("probing function IDs from device-tree\n");
|
||||
|
||||
|
@ -206,6 +206,5 @@ static int __init psci_init(void)
|
|||
|
||||
out_put_node:
|
||||
of_node_put(np);
|
||||
return 0;
|
||||
return;
|
||||
}
|
||||
early_initcall(psci_init);
|
||||
|
|
|
@ -0,0 +1,84 @@
|
|||
/*
|
||||
* 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.
|
||||
*
|
||||
* Copyright (C) 2012 ARM Limited
|
||||
*
|
||||
* Author: Will Deacon <will.deacon@arm.com>
|
||||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/irqchip/arm-gic.h>
|
||||
#include <linux/smp.h>
|
||||
#include <linux/of.h>
|
||||
|
||||
#include <asm/psci.h>
|
||||
#include <asm/smp_plat.h>
|
||||
|
||||
/*
|
||||
* psci_smp assumes that the following is true about PSCI:
|
||||
*
|
||||
* cpu_suspend Suspend the execution on a CPU
|
||||
* @state we don't currently describe affinity levels, so just pass 0.
|
||||
* @entry_point the first instruction to be executed on return
|
||||
* returns 0 success, < 0 on failure
|
||||
*
|
||||
* cpu_off Power down a CPU
|
||||
* @state we don't currently describe affinity levels, so just pass 0.
|
||||
* no return on successful call
|
||||
*
|
||||
* cpu_on Power up a CPU
|
||||
* @cpuid cpuid of target CPU, as from MPIDR
|
||||
* @entry_point the first instruction to be executed on return
|
||||
* returns 0 success, < 0 on failure
|
||||
*
|
||||
* migrate Migrate the context to a different CPU
|
||||
* @cpuid cpuid of target CPU, as from MPIDR
|
||||
* returns 0 success, < 0 on failure
|
||||
*
|
||||
*/
|
||||
|
||||
extern void secondary_startup(void);
|
||||
|
||||
static int __cpuinit psci_boot_secondary(unsigned int cpu,
|
||||
struct task_struct *idle)
|
||||
{
|
||||
if (psci_ops.cpu_on)
|
||||
return psci_ops.cpu_on(cpu_logical_map(cpu),
|
||||
__pa(secondary_startup));
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_HOTPLUG_CPU
|
||||
void __ref psci_cpu_die(unsigned int cpu)
|
||||
{
|
||||
const struct psci_power_state ps = {
|
||||
.type = PSCI_POWER_STATE_TYPE_POWER_DOWN,
|
||||
};
|
||||
|
||||
if (psci_ops.cpu_off)
|
||||
psci_ops.cpu_off(ps);
|
||||
|
||||
/* We should never return */
|
||||
panic("psci: cpu %d failed to shutdown\n", cpu);
|
||||
}
|
||||
#else
|
||||
#define psci_cpu_die NULL
|
||||
#endif
|
||||
|
||||
bool __init psci_smp_available(void)
|
||||
{
|
||||
/* is cpu_on available at least? */
|
||||
return (psci_ops.cpu_on != NULL);
|
||||
}
|
||||
|
||||
struct smp_operations __initdata psci_smp_ops = {
|
||||
.smp_boot_secondary = psci_boot_secondary,
|
||||
.cpu_die = psci_cpu_die,
|
||||
};
|
|
@ -37,6 +37,7 @@
|
|||
#include <asm/cputype.h>
|
||||
#include <asm/elf.h>
|
||||
#include <asm/procinfo.h>
|
||||
#include <asm/psci.h>
|
||||
#include <asm/sections.h>
|
||||
#include <asm/setup.h>
|
||||
#include <asm/smp_plat.h>
|
||||
|
@ -128,7 +129,9 @@ struct stack {
|
|||
u32 und[3];
|
||||
} ____cacheline_aligned;
|
||||
|
||||
#ifndef CONFIG_CPU_V7M
|
||||
static struct stack stacks[NR_CPUS];
|
||||
#endif
|
||||
|
||||
char elf_platform[ELF_PLATFORM_SIZE];
|
||||
EXPORT_SYMBOL(elf_platform);
|
||||
|
@ -207,7 +210,7 @@ static const char *proc_arch[] = {
|
|||
"5TEJ",
|
||||
"6TEJ",
|
||||
"7",
|
||||
"?(11)",
|
||||
"7M",
|
||||
"?(12)",
|
||||
"?(13)",
|
||||
"?(14)",
|
||||
|
@ -216,6 +219,12 @@ static const char *proc_arch[] = {
|
|||
"?(17)",
|
||||
};
|
||||
|
||||
#ifdef CONFIG_CPU_V7M
|
||||
static int __get_cpu_architecture(void)
|
||||
{
|
||||
return CPU_ARCH_ARMv7M;
|
||||
}
|
||||
#else
|
||||
static int __get_cpu_architecture(void)
|
||||
{
|
||||
int cpu_arch;
|
||||
|
@ -248,6 +257,7 @@ static int __get_cpu_architecture(void)
|
|||
|
||||
return cpu_arch;
|
||||
}
|
||||
#endif
|
||||
|
||||
int __pure cpu_architecture(void)
|
||||
{
|
||||
|
@ -293,7 +303,9 @@ static void __init cacheid_init(void)
|
|||
{
|
||||
unsigned int arch = cpu_architecture();
|
||||
|
||||
if (arch >= CPU_ARCH_ARMv6) {
|
||||
if (arch == CPU_ARCH_ARMv7M) {
|
||||
cacheid = 0;
|
||||
} else if (arch >= CPU_ARCH_ARMv6) {
|
||||
unsigned int cachetype = read_cpuid_cachetype();
|
||||
if ((cachetype & (7 << 29)) == 4 << 29) {
|
||||
/* ARMv7 register format */
|
||||
|
@ -392,6 +404,7 @@ static void __init feat_v6_fixup(void)
|
|||
*/
|
||||
void notrace cpu_init(void)
|
||||
{
|
||||
#ifndef CONFIG_CPU_V7M
|
||||
unsigned int cpu = smp_processor_id();
|
||||
struct stack *stk = &stacks[cpu];
|
||||
|
||||
|
@ -442,6 +455,7 @@ void notrace cpu_init(void)
|
|||
"I" (offsetof(struct stack, und[0])),
|
||||
PLC (PSR_F_BIT | PSR_I_BIT | SVC_MODE)
|
||||
: "r14");
|
||||
#endif
|
||||
}
|
||||
|
||||
u32 __cpu_logical_map[NR_CPUS] = { [0 ... NR_CPUS-1] = MPIDR_INVALID };
|
||||
|
@ -796,9 +810,15 @@ void __init setup_arch(char **cmdline_p)
|
|||
unflatten_device_tree();
|
||||
|
||||
arm_dt_init_cpu_maps();
|
||||
psci_init();
|
||||
#ifdef CONFIG_SMP
|
||||
if (is_smp()) {
|
||||
smp_set_ops(mdesc->smp);
|
||||
if (!mdesc->smp_init || !mdesc->smp_init()) {
|
||||
if (psci_smp_available())
|
||||
smp_set_ops(&psci_smp_ops);
|
||||
else if (mdesc->smp)
|
||||
smp_set_ops(mdesc->smp);
|
||||
}
|
||||
smp_init_cpus();
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -812,6 +812,7 @@ static void __init kuser_get_tls_init(unsigned long vectors)
|
|||
|
||||
void __init early_trap_init(void *vectors_base)
|
||||
{
|
||||
#ifndef CONFIG_CPU_V7M
|
||||
unsigned long vectors = (unsigned long)vectors_base;
|
||||
extern char __stubs_start[], __stubs_end[];
|
||||
extern char __vectors_start[], __vectors_end[];
|
||||
|
@ -843,4 +844,11 @@ void __init early_trap_init(void *vectors_base)
|
|||
|
||||
flush_icache_range(vectors, vectors + PAGE_SIZE);
|
||||
modify_domain(DOMAIN_USER, DOMAIN_CLIENT);
|
||||
#else /* ifndef CONFIG_CPU_V7M */
|
||||
/*
|
||||
* on V7-M there is no need to copy the vector table to a dedicated
|
||||
* memory area. The address is configurable and so a table in the kernel
|
||||
* image can be used.
|
||||
*/
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -22,8 +22,7 @@ config ARCH_CLEP7312
|
|||
|
||||
config ARCH_EDB7211
|
||||
bool "EDB7211"
|
||||
select ARCH_SELECT_MEMORY_MODEL
|
||||
select ARCH_SPARSEMEM_ENABLE
|
||||
select ARCH_HAS_HOLES_MEMORYMODEL
|
||||
help
|
||||
Say Y here if you intend to run this kernel on a Cirrus Logic EDB-7211
|
||||
evaluation board.
|
||||
|
|
|
@ -4,10 +4,7 @@
|
|||
|
||||
# Object file lists.
|
||||
|
||||
obj-y := common.o
|
||||
obj-m :=
|
||||
obj-n :=
|
||||
obj- :=
|
||||
obj-y := common.o devices.o
|
||||
|
||||
obj-$(CONFIG_ARCH_AUTCPU12) += board-autcpu12.o
|
||||
obj-$(CONFIG_ARCH_CDB89712) += board-cdb89712.o
|
||||
|
|
|
@ -26,6 +26,8 @@
|
|||
#include <linux/gpio.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/mtd/physmap.h>
|
||||
#include <linux/mtd/plat-ram.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
#include <linux/mtd/nand-gpio.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
@ -40,38 +42,49 @@
|
|||
#include <asm/page.h>
|
||||
|
||||
#include <asm/mach/map.h>
|
||||
#include <mach/autcpu12.h>
|
||||
|
||||
#include "common.h"
|
||||
#include "devices.h"
|
||||
|
||||
#define AUTCPU12_CS8900_BASE (CS2_PHYS_BASE + 0x300)
|
||||
#define AUTCPU12_CS8900_IRQ (IRQ_EINT3)
|
||||
/* NOR flash */
|
||||
#define AUTCPU12_FLASH_BASE (CS0_PHYS_BASE)
|
||||
|
||||
/* Board specific hardware definitions */
|
||||
#define AUTCPU12_CHAR_LCD_BASE (CS1_PHYS_BASE + 0x00000000)
|
||||
#define AUTCPU12_CSAUX1_BASE (CS1_PHYS_BASE + 0x04000000)
|
||||
#define AUTCPU12_CAN_BASE (CS1_PHYS_BASE + 0x08000000)
|
||||
#define AUTCPU12_TOUCH_BASE (CS1_PHYS_BASE + 0x0a000000)
|
||||
#define AUTCPU12_IO_BASE (CS1_PHYS_BASE + 0x0c000000)
|
||||
#define AUTCPU12_LPT_BASE (CS1_PHYS_BASE + 0x0e000000)
|
||||
|
||||
/* NVRAM */
|
||||
#define AUTCPU12_NVRAM_BASE (CS1_PHYS_BASE + 0x02000000)
|
||||
|
||||
/* SmartMedia flash */
|
||||
#define AUTCPU12_SMC_BASE (CS1_PHYS_BASE + 0x06000000)
|
||||
#define AUTCPU12_SMC_SEL_BASE (AUTCPU12_SMC_BASE + 0x10)
|
||||
|
||||
/* Ethernet */
|
||||
#define AUTCPU12_CS8900_BASE (CS2_PHYS_BASE + 0x300)
|
||||
#define AUTCPU12_CS8900_IRQ (IRQ_EINT3)
|
||||
|
||||
/* NAND flash */
|
||||
#define AUTCPU12_MMGPIO_BASE (CLPS711X_NR_GPIO)
|
||||
#define AUTCPU12_SMC_NCE (AUTCPU12_MMGPIO_BASE + 0) /* Bit 0 */
|
||||
#define AUTCPU12_SMC_RDY CLPS711X_GPIO(1, 2)
|
||||
#define AUTCPU12_SMC_ALE CLPS711X_GPIO(1, 3)
|
||||
#define AUTCPU12_SMC_CLE CLPS711X_GPIO(1, 3)
|
||||
|
||||
/* LCD contrast digital potentiometer */
|
||||
#define AUTCPU12_DPOT_CS CLPS711X_GPIO(4, 0)
|
||||
#define AUTCPU12_DPOT_CLK CLPS711X_GPIO(4, 1)
|
||||
#define AUTCPU12_DPOT_UD CLPS711X_GPIO(4, 2)
|
||||
|
||||
static struct resource autcpu12_cs8900_resource[] __initdata = {
|
||||
DEFINE_RES_MEM(AUTCPU12_CS8900_BASE, SZ_1K),
|
||||
DEFINE_RES_IRQ(AUTCPU12_CS8900_IRQ),
|
||||
};
|
||||
|
||||
static struct resource autcpu12_nvram_resource[] __initdata = {
|
||||
DEFINE_RES_MEM_NAMED(AUTCPU12_PHYS_NVRAM, SZ_128K, "SRAM"),
|
||||
};
|
||||
|
||||
static struct platform_device autcpu12_nvram_pdev __initdata = {
|
||||
.name = "autcpu12_nvram",
|
||||
.id = -1,
|
||||
.resource = autcpu12_nvram_resource,
|
||||
.num_resources = ARRAY_SIZE(autcpu12_nvram_resource),
|
||||
};
|
||||
|
||||
static struct resource autcpu12_nand_resource[] __initdata = {
|
||||
DEFINE_RES_MEM(AUTCPU12_SMC_BASE, SZ_16),
|
||||
};
|
||||
|
@ -147,17 +160,106 @@ static struct platform_device autcpu12_mmgpio_pdev __initdata = {
|
|||
},
|
||||
};
|
||||
|
||||
static const struct gpio autcpu12_gpios[] __initconst = {
|
||||
{ AUTCPU12_DPOT_CS, GPIOF_OUT_INIT_HIGH, "DPOT CS" },
|
||||
{ AUTCPU12_DPOT_CLK, GPIOF_OUT_INIT_LOW, "DPOT CLK" },
|
||||
{ AUTCPU12_DPOT_UD, GPIOF_OUT_INIT_LOW, "DPOT UD" },
|
||||
};
|
||||
|
||||
static struct mtd_partition autcpu12_flash_partitions[] = {
|
||||
{
|
||||
.name = "NOR.0",
|
||||
.offset = 0,
|
||||
.size = MTDPART_SIZ_FULL,
|
||||
},
|
||||
};
|
||||
|
||||
static struct physmap_flash_data autcpu12_flash_pdata = {
|
||||
.width = 4,
|
||||
.parts = autcpu12_flash_partitions,
|
||||
.nr_parts = ARRAY_SIZE(autcpu12_flash_partitions),
|
||||
};
|
||||
|
||||
static struct resource autcpu12_flash_resources[] __initdata = {
|
||||
DEFINE_RES_MEM(AUTCPU12_FLASH_BASE, SZ_8M),
|
||||
};
|
||||
|
||||
static struct platform_device autcpu12_flash_pdev __initdata = {
|
||||
.name = "physmap-flash",
|
||||
.id = 0,
|
||||
.resource = autcpu12_flash_resources,
|
||||
.num_resources = ARRAY_SIZE(autcpu12_flash_resources),
|
||||
.dev = {
|
||||
.platform_data = &autcpu12_flash_pdata,
|
||||
},
|
||||
};
|
||||
|
||||
static struct resource autcpu12_nvram_resource[] __initdata = {
|
||||
DEFINE_RES_MEM(AUTCPU12_NVRAM_BASE, 0),
|
||||
};
|
||||
|
||||
static struct platdata_mtd_ram autcpu12_nvram_pdata = {
|
||||
.bankwidth = 4,
|
||||
};
|
||||
|
||||
static struct platform_device autcpu12_nvram_pdev __initdata = {
|
||||
.name = "mtd-ram",
|
||||
.id = 0,
|
||||
.resource = autcpu12_nvram_resource,
|
||||
.num_resources = ARRAY_SIZE(autcpu12_nvram_resource),
|
||||
.dev = {
|
||||
.platform_data = &autcpu12_nvram_pdata,
|
||||
},
|
||||
};
|
||||
|
||||
static void __init autcpu12_nvram_init(void)
|
||||
{
|
||||
void __iomem *nvram;
|
||||
unsigned int save[2];
|
||||
resource_size_t nvram_size = SZ_128K;
|
||||
|
||||
/*
|
||||
* Check for 32K/128K
|
||||
* Read ofs 0K
|
||||
* Read ofs 64K
|
||||
* Write complement to ofs 64K
|
||||
* Read and check result on ofs 0K
|
||||
* Restore contents
|
||||
*/
|
||||
nvram = ioremap(autcpu12_nvram_resource[0].start, SZ_128K);
|
||||
if (nvram) {
|
||||
save[0] = readl(nvram + 0);
|
||||
save[1] = readl(nvram + SZ_64K);
|
||||
writel(~save[0], nvram + SZ_64K);
|
||||
if (readl(nvram + 0) != save[0]) {
|
||||
writel(save[0], nvram + 0);
|
||||
nvram_size = SZ_32K;
|
||||
} else
|
||||
writel(save[1], nvram + SZ_64K);
|
||||
iounmap(nvram);
|
||||
|
||||
autcpu12_nvram_resource[0].end =
|
||||
autcpu12_nvram_resource[0].start + nvram_size - 1;
|
||||
platform_device_register(&autcpu12_nvram_pdev);
|
||||
} else
|
||||
pr_err("Failed to remap NVRAM resource\n");
|
||||
}
|
||||
|
||||
static void __init autcpu12_init(void)
|
||||
{
|
||||
clps711x_devices_init();
|
||||
platform_device_register(&autcpu12_flash_pdev);
|
||||
platform_device_register_simple("video-clps711x", 0, NULL, 0);
|
||||
platform_device_register_simple("cs89x0", 0, autcpu12_cs8900_resource,
|
||||
ARRAY_SIZE(autcpu12_cs8900_resource));
|
||||
platform_device_register(&autcpu12_mmgpio_pdev);
|
||||
platform_device_register(&autcpu12_nvram_pdev);
|
||||
autcpu12_nvram_init();
|
||||
}
|
||||
|
||||
static void __init autcpu12_init_late(void)
|
||||
{
|
||||
gpio_request_array(autcpu12_gpios, ARRAY_SIZE(autcpu12_gpios));
|
||||
|
||||
if (IS_ENABLED(MTD_NAND_GPIO) && IS_ENABLED(GPIO_GENERIC_PLATFORM)) {
|
||||
/* We are need both drivers to handle NAND */
|
||||
platform_device_register(&autcpu12_nand_pdev);
|
||||
|
@ -169,6 +271,7 @@ MACHINE_START(AUTCPU12, "autronix autcpu12")
|
|||
.atag_offset = 0x20000,
|
||||
.nr_irqs = CLPS711X_NR_IRQS,
|
||||
.map_io = clps711x_map_io,
|
||||
.init_early = clps711x_init_early,
|
||||
.init_irq = clps711x_init_irq,
|
||||
.init_time = clps711x_timer_init,
|
||||
.init_machine = autcpu12_init,
|
||||
|
|
|
@ -39,6 +39,7 @@
|
|||
#include <asm/mach/map.h>
|
||||
|
||||
#include "common.h"
|
||||
#include "devices.h"
|
||||
|
||||
#define CDB89712_CS8900_BASE (CS2_PHYS_BASE + 0x300)
|
||||
#define CDB89712_CS8900_IRQ (IRQ_EINT3)
|
||||
|
@ -127,6 +128,7 @@ static struct platform_device cdb89712_sram_pdev __initdata = {
|
|||
|
||||
static void __init cdb89712_init(void)
|
||||
{
|
||||
clps711x_devices_init();
|
||||
platform_device_register(&cdb89712_flash_pdev);
|
||||
platform_device_register(&cdb89712_bootrom_pdev);
|
||||
platform_device_register(&cdb89712_sram_pdev);
|
||||
|
@ -139,6 +141,7 @@ MACHINE_START(CDB89712, "Cirrus-CDB89712")
|
|||
.atag_offset = 0x100,
|
||||
.nr_irqs = CLPS711X_NR_IRQS,
|
||||
.map_io = clps711x_map_io,
|
||||
.init_early = clps711x_init_early,
|
||||
.init_irq = clps711x_init_irq,
|
||||
.init_time = clps711x_timer_init,
|
||||
.init_machine = cdb89712_init,
|
||||
|
|
|
@ -39,6 +39,7 @@ MACHINE_START(CLEP7212, "Cirrus Logic 7212/7312")
|
|||
.nr_irqs = CLPS711X_NR_IRQS,
|
||||
.fixup = fixup_clep7312,
|
||||
.map_io = clps711x_map_io,
|
||||
.init_early = clps711x_init_early,
|
||||
.init_irq = clps711x_init_irq,
|
||||
.init_time = clps711x_timer_init,
|
||||
.handle_irq = clps711x_handle_irq,
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue