mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-06 10:00:17 +00:00
Compare commits
123 Commits
v4l2_strea
...
rpi-4.4.y_
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9faebbe763 | ||
|
|
9ebd23d0d6 | ||
|
|
1b2b2852a1 | ||
|
|
e8eb77737d | ||
|
|
cc06454a1e | ||
|
|
023918f2e1 | ||
|
|
ac7df4ae8d | ||
|
|
7fab9b21e8 | ||
|
|
ad1f00d816 | ||
|
|
620a9d4ee3 | ||
|
|
6b35288a11 | ||
|
|
4e0e14692d | ||
|
|
05afaaa4dd | ||
|
|
6422bafd14 | ||
|
|
e2849fbfe4 | ||
|
|
507592d755 | ||
|
|
1be1568e56 | ||
|
|
5b2848eb75 | ||
|
|
068540e13f | ||
|
|
d34ca1148c | ||
|
|
79ae9990cf | ||
|
|
badbf92edf | ||
|
|
41db721d52 | ||
|
|
0e476c9ecf | ||
|
|
415042d1da | ||
|
|
c9a59da6e7 | ||
|
|
28919fc00d | ||
|
|
e8446bbedb | ||
|
|
437b9dcefb | ||
|
|
7bbacf8203 | ||
|
|
d3d5b43018 | ||
|
|
76ee4b7e9f | ||
|
|
56592fd576 | ||
|
|
9ae652dc81 | ||
|
|
dd1b1b1546 | ||
|
|
5082e1acb2 | ||
|
|
e1438f9562 | ||
|
|
cbd271da90 | ||
|
|
12ed567687 | ||
|
|
d534702fb3 | ||
|
|
79e343ef25 | ||
|
|
c2f7616103 | ||
|
|
df7dc1fb9b | ||
|
|
3d4be7df94 | ||
|
|
ddfe39c8a9 | ||
|
|
e0ed1c3216 | ||
|
|
dd16a2cfa5 | ||
|
|
b3bda227d5 | ||
|
|
a20a026b9f | ||
|
|
4af2cecf2a | ||
|
|
a3bea9a4b1 | ||
|
|
c1048e71dd | ||
|
|
39fb5c4f15 | ||
|
|
ed47a8feec | ||
|
|
226b904307 | ||
|
|
be5c43c5c1 | ||
|
|
f7b2b02ea4 | ||
|
|
3dc2824fae | ||
|
|
b2d7484f2f | ||
|
|
e94bc6cf78 | ||
|
|
0d5fc8a3d0 | ||
|
|
e6190dc325 | ||
|
|
93015dc470 | ||
|
|
488b4f79ea | ||
|
|
e206874282 | ||
|
|
867106b1a5 | ||
|
|
c7dd7eb507 | ||
|
|
bdfea11c7e | ||
|
|
71353d5186 | ||
|
|
0e9006d877 | ||
|
|
f0fdfa22e9 | ||
|
|
a937e28752 | ||
|
|
12351479fe | ||
|
|
45c3b495d6 | ||
|
|
1338dd4bdb | ||
|
|
b7b2884283 | ||
|
|
1076dfc03d | ||
|
|
3dff4a73ee | ||
|
|
9719f5e37a | ||
|
|
6989c11dfa | ||
|
|
f5244cd4e4 | ||
|
|
d061f25545 | ||
|
|
4b816d828f | ||
|
|
628ac56421 | ||
|
|
c0dec6e58b | ||
|
|
74b4d7fb9f | ||
|
|
38aba70cbe | ||
|
|
cba6efda07 | ||
|
|
5032acc5f2 | ||
|
|
39228cc850 | ||
|
|
543484cb5a | ||
|
|
ef6ae61d5a | ||
|
|
9431f7866c | ||
|
|
4ee52c5dc8 | ||
|
|
45b5f6954e | ||
|
|
73644ed43f | ||
|
|
f2b8f65f29 | ||
|
|
189baf7660 | ||
|
|
8ad957e866 | ||
|
|
28e77e1a31 | ||
|
|
beda5586ef | ||
|
|
cb7d1d4664 | ||
|
|
5be6054802 | ||
|
|
16c4463eac | ||
|
|
ba7f4ebd24 | ||
|
|
c1429003b0 | ||
|
|
ccce163feb | ||
|
|
c58c685f75 | ||
|
|
ef041d1d9a | ||
|
|
11d4f3b520 | ||
|
|
c75394eff6 | ||
|
|
91f81406c2 | ||
|
|
a533be518f | ||
|
|
b0dca0a200 | ||
|
|
9bc9352084 | ||
|
|
edb71c377a | ||
|
|
b446c0613e | ||
|
|
4a60564f7a | ||
|
|
32c94360dd | ||
|
|
09b89dd4e1 | ||
|
|
1080f40d03 | ||
|
|
16af2003a8 | ||
|
|
b3ee605a6d |
@@ -48,8 +48,8 @@ Example:
|
|||||||
|
|
||||||
bcm2835_i2s: i2s@7e203000 {
|
bcm2835_i2s: i2s@7e203000 {
|
||||||
compatible = "brcm,bcm2835-i2s";
|
compatible = "brcm,bcm2835-i2s";
|
||||||
reg = < 0x7e203000 0x20>,
|
reg = < 0x7e203000 0x24>,
|
||||||
< 0x7e101098 0x02>;
|
< 0x7e101098 0x08>;
|
||||||
|
|
||||||
dmas = <&dma 2>,
|
dmas = <&dma 2>,
|
||||||
<&dma 3>;
|
<&dma 3>;
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
* Broadcom BCM2835 SMI character device driver.
|
||||||
|
|
||||||
|
SMI or secondary memory interface is a peripheral specific to certain Broadcom
|
||||||
|
SOCs, and is helpful for talking to things like parallel-interface displays
|
||||||
|
and NAND flashes (in fact, most things with a parallel register interface).
|
||||||
|
|
||||||
|
This driver adds a character device which provides a user-space interface to
|
||||||
|
an instance of the SMI driver.
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
- compatible: "brcm,bcm2835-smi-dev"
|
||||||
|
- smi_handle: a phandle to the smi node.
|
||||||
|
|
||||||
|
Optional properties:
|
||||||
|
- None.
|
||||||
|
|
||||||
|
|
||||||
48
Documentation/devicetree/bindings/misc/brcm,bcm2835-smi.txt
Normal file
48
Documentation/devicetree/bindings/misc/brcm,bcm2835-smi.txt
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
* Broadcom BCM2835 SMI driver.
|
||||||
|
|
||||||
|
SMI or secondary memory interface is a peripheral specific to certain Broadcom
|
||||||
|
SOCs, and is helpful for talking to things like parallel-interface displays
|
||||||
|
and NAND flashes (in fact, most things with a parallel register interface).
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
- compatible: "brcm,bcm2835-smi"
|
||||||
|
- reg: Should contain location and length of SMI registers and SMI clkman regs
|
||||||
|
- interrupts: *the* SMI interrupt.
|
||||||
|
- pinctrl-names: should be "default".
|
||||||
|
- pinctrl-0: the phandle of the gpio pin node.
|
||||||
|
- brcm,smi-clock-source: the clock source for clkman
|
||||||
|
- brcm,smi-clock-divisor: the integer clock divisor for clkman
|
||||||
|
- dmas: the dma controller phandle and the DREQ number (4 on a 2835)
|
||||||
|
- dma-names: the name used by the driver to request its channel.
|
||||||
|
Should be "rx-tx".
|
||||||
|
|
||||||
|
Optional properties:
|
||||||
|
- None.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
8 data pin configuration:
|
||||||
|
|
||||||
|
smi: smi@7e600000 {
|
||||||
|
compatible = "brcm,bcm2835-smi";
|
||||||
|
reg = <0x7e600000 0x44>, <0x7e1010b0 0x8>;
|
||||||
|
interrupts = <2 16>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&smi_pins>;
|
||||||
|
brcm,smi-clock-source = <6>;
|
||||||
|
brcm,smi-clock-divisor = <4>;
|
||||||
|
dmas = <&dma 4>;
|
||||||
|
dma-names = "rx-tx";
|
||||||
|
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
smi_pins: smi_pins {
|
||||||
|
brcm,pins = <2 3 4 5 6 7 8 9 10 11 12 13 14 15>;
|
||||||
|
/* Alt 1: SMI */
|
||||||
|
brcm,function = <5 5 5 5 5 5 5 5 5 5 5 5 5 5>;
|
||||||
|
/* /CS, /WE and /OE are pulled high, as they are
|
||||||
|
generally active low signals */
|
||||||
|
brcm,pull = <2 2 2 2 2 2 0 0 0 0 0 0 0 0>;
|
||||||
|
};
|
||||||
|
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
* BCM2835 SMI NAND flash
|
||||||
|
|
||||||
|
This driver is a shim between the BCM2835 SMI driver (SMI is a peripheral for
|
||||||
|
talking to parallel register interfaces) and Linux's MTD layer.
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
- compatible: "brcm,bcm2835-smi-nand"
|
||||||
|
- status: "okay"
|
||||||
|
|
||||||
|
Optional properties:
|
||||||
|
- partition@n, where n is an integer from a consecutive sequence starting at 0
|
||||||
|
- Difficult to store partition table on NAND device - normally put it
|
||||||
|
in the source code, kernel bootparams, or device tree (the best way!)
|
||||||
|
- Sub-properties:
|
||||||
|
- label: the partition name, as shown by mtdinfo /dev/mtd*
|
||||||
|
- reg: the size and offset of this partition.
|
||||||
|
- (optional) read-only: an empty property flagging as read only
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
nand: flash@0 {
|
||||||
|
compatible = "brcm,bcm2835-smi-nand";
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
partition@0 {
|
||||||
|
label = "stage2";
|
||||||
|
// 128k
|
||||||
|
reg = <0 0x20000>;
|
||||||
|
read-only;
|
||||||
|
};
|
||||||
|
partition@1 {
|
||||||
|
label = "firmware";
|
||||||
|
// 16M
|
||||||
|
reg = <0x20000 0x1000000>;
|
||||||
|
read-only;
|
||||||
|
};
|
||||||
|
partition@2 {
|
||||||
|
label = "root";
|
||||||
|
// 2G
|
||||||
|
reg = <0x1020000 0x80000000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
@@ -16,8 +16,8 @@ Example:
|
|||||||
|
|
||||||
bcm2835_i2s: i2s@7e203000 {
|
bcm2835_i2s: i2s@7e203000 {
|
||||||
compatible = "brcm,bcm2835-i2s";
|
compatible = "brcm,bcm2835-i2s";
|
||||||
reg = <0x7e203000 0x20>,
|
reg = <0x7e203000 0x24>,
|
||||||
<0x7e101098 0x02>;
|
<0x7e101098 0x08>;
|
||||||
|
|
||||||
dmas = <&dma 2>,
|
dmas = <&dma 2>,
|
||||||
<&dma 3>;
|
<&dma 3>;
|
||||||
|
|||||||
60
Documentation/video4linux/bcm2835-v4l2.txt
Normal file
60
Documentation/video4linux/bcm2835-v4l2.txt
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
|
||||||
|
BCM2835 (aka Raspberry Pi) V4L2 driver
|
||||||
|
======================================
|
||||||
|
|
||||||
|
1. Copyright
|
||||||
|
============
|
||||||
|
|
||||||
|
Copyright © 2013 Raspberry Pi (Trading) Ltd.
|
||||||
|
|
||||||
|
2. License
|
||||||
|
==========
|
||||||
|
|
||||||
|
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., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
|
||||||
|
3. Quick Start
|
||||||
|
==============
|
||||||
|
|
||||||
|
You need a version 1.0 or later of v4l2-ctl, available from:
|
||||||
|
git://git.linuxtv.org/v4l-utils.git
|
||||||
|
|
||||||
|
$ sudo modprobe bcm2835-v4l2
|
||||||
|
|
||||||
|
Turn on the overlay:
|
||||||
|
|
||||||
|
$ v4l2-ctl --overlay=1
|
||||||
|
|
||||||
|
Turn off the overlay:
|
||||||
|
|
||||||
|
$ v4l2-ctl --overlay=0
|
||||||
|
|
||||||
|
Set the capture format for video:
|
||||||
|
|
||||||
|
$ v4l2-ctl --set-fmt-video=width=1920,height=1088,pixelformat=4
|
||||||
|
|
||||||
|
(Note: 1088 not 1080).
|
||||||
|
|
||||||
|
Capture:
|
||||||
|
|
||||||
|
$ v4l2-ctl --stream-mmap=3 --stream-count=100 --stream-to=somefile.h264
|
||||||
|
|
||||||
|
Stills capture:
|
||||||
|
|
||||||
|
$ v4l2-ctl --set-fmt-video=width=2592,height=1944,pixelformat=3
|
||||||
|
$ v4l2-ctl --stream-mmap=3 --stream-count=1 --stream-to=somefile.jpg
|
||||||
|
|
||||||
|
List of available formats:
|
||||||
|
|
||||||
|
$ v4l2-ctl --list-formats
|
||||||
@@ -317,6 +317,52 @@ choice
|
|||||||
default ARCH_VERSATILE if !MMU
|
default ARCH_VERSATILE if !MMU
|
||||||
default ARCH_MULTIPLATFORM if MMU
|
default ARCH_MULTIPLATFORM if MMU
|
||||||
|
|
||||||
|
config ARCH_BCM2708
|
||||||
|
bool "Broadcom BCM2708 family"
|
||||||
|
select CPU_V6
|
||||||
|
select ARM_AMBA
|
||||||
|
select CLKSRC_MMIO
|
||||||
|
select CLKSRC_OF if OF
|
||||||
|
select HAVE_SCHED_CLOCK
|
||||||
|
select NEED_MACH_GPIO_H
|
||||||
|
select NEED_MACH_MEMORY_H
|
||||||
|
select COMMON_CLK
|
||||||
|
select ARCH_HAS_CPUFREQ
|
||||||
|
select GENERIC_CLOCKEVENTS
|
||||||
|
select ARM_ERRATA_411920
|
||||||
|
select MACH_BCM2708
|
||||||
|
select MULTI_IRQ_HANDLER
|
||||||
|
select SPARSE_IRQ
|
||||||
|
select VC4
|
||||||
|
select FIQ
|
||||||
|
help
|
||||||
|
This enables support for Broadcom BCM2708 boards.
|
||||||
|
|
||||||
|
config ARCH_BCM2709
|
||||||
|
bool "Broadcom BCM2709 family"
|
||||||
|
select CPU_V7
|
||||||
|
select HAVE_SMP
|
||||||
|
select ARM_AMBA
|
||||||
|
select MIGHT_HAVE_CACHE_L2X0
|
||||||
|
select HAVE_SCHED_CLOCK
|
||||||
|
select NEED_MACH_MEMORY_H
|
||||||
|
select NEED_MACH_IO_H
|
||||||
|
select COMMON_CLK
|
||||||
|
select ARCH_HAS_CPUFREQ
|
||||||
|
select GENERIC_CLOCKEVENTS
|
||||||
|
select MACH_BCM2709
|
||||||
|
select MULTI_IRQ_HANDLER
|
||||||
|
select SPARSE_IRQ
|
||||||
|
select MFD_SYSCON
|
||||||
|
select VC4
|
||||||
|
select FIQ
|
||||||
|
select USE_OF
|
||||||
|
select ARCH_REQUIRE_GPIOLIB
|
||||||
|
select PINCTRL
|
||||||
|
select PINCTRL_BCM2835
|
||||||
|
help
|
||||||
|
This enables support for Broadcom BCM2709 boards.
|
||||||
|
|
||||||
config ARCH_MULTIPLATFORM
|
config ARCH_MULTIPLATFORM
|
||||||
bool "Allow multiple platforms to be selected"
|
bool "Allow multiple platforms to be selected"
|
||||||
depends on MMU
|
depends on MMU
|
||||||
@@ -808,6 +854,9 @@ config ARCH_VIRT
|
|||||||
# Kconfigs may be included either alphabetically (according to the
|
# Kconfigs may be included either alphabetically (according to the
|
||||||
# plat- suffix) or along side the corresponding mach-* source.
|
# plat- suffix) or along side the corresponding mach-* source.
|
||||||
#
|
#
|
||||||
|
source "arch/arm/mach-bcm2708/Kconfig"
|
||||||
|
source "arch/arm/mach-bcm2709/Kconfig"
|
||||||
|
|
||||||
source "arch/arm/mach-mvebu/Kconfig"
|
source "arch/arm/mach-mvebu/Kconfig"
|
||||||
|
|
||||||
source "arch/arm/mach-alpine/Kconfig"
|
source "arch/arm/mach-alpine/Kconfig"
|
||||||
|
|||||||
@@ -1241,6 +1241,14 @@ choice
|
|||||||
options; the platform specific options are deprecated
|
options; the platform specific options are deprecated
|
||||||
and will be soon removed.
|
and will be soon removed.
|
||||||
|
|
||||||
|
config DEBUG_BCM2708_UART0
|
||||||
|
bool "Broadcom BCM270X UART0 (PL011)"
|
||||||
|
depends on ARCH_BCM2708 || ARCH_BCM2709
|
||||||
|
help
|
||||||
|
Say Y here if you want the debug print routines to direct
|
||||||
|
their output to UART 0. The port must have been initialised
|
||||||
|
by the boot-loader before use.
|
||||||
|
|
||||||
endchoice
|
endchoice
|
||||||
|
|
||||||
config DEBUG_EXYNOS_UART
|
config DEBUG_EXYNOS_UART
|
||||||
|
|||||||
@@ -154,6 +154,8 @@ textofs-$(CONFIG_ARCH_AXXIA) := 0x00308000
|
|||||||
|
|
||||||
# Machine directory name. This list is sorted alphanumerically
|
# Machine directory name. This list is sorted alphanumerically
|
||||||
# by CONFIG_* macro name.
|
# by CONFIG_* macro name.
|
||||||
|
machine-$(CONFIG_ARCH_BCM2708) += bcm2708
|
||||||
|
machine-$(CONFIG_ARCH_BCM2709) += bcm2709
|
||||||
machine-$(CONFIG_ARCH_ALPINE) += alpine
|
machine-$(CONFIG_ARCH_ALPINE) += alpine
|
||||||
machine-$(CONFIG_ARCH_AT91) += at91
|
machine-$(CONFIG_ARCH_AT91) += at91
|
||||||
machine-$(CONFIG_ARCH_AXXIA) += axxia
|
machine-$(CONFIG_ARCH_AXXIA) += axxia
|
||||||
|
|||||||
@@ -1,5 +1,25 @@
|
|||||||
ifeq ($(CONFIG_OF),y)
|
ifeq ($(CONFIG_OF),y)
|
||||||
|
|
||||||
|
dtb-$(CONFIG_ARCH_BCM2708) += bcm2708-rpi-b.dtb
|
||||||
|
dtb-$(CONFIG_ARCH_BCM2708) += bcm2708-rpi-b-plus.dtb
|
||||||
|
dtb-$(CONFIG_ARCH_BCM2708) += bcm2708-rpi-cm.dtb
|
||||||
|
dtb-$(CONFIG_ARCH_BCM2835) += bcm2835-rpi-cm.dtb
|
||||||
|
dtb-$(CONFIG_ARCH_BCM2709) += bcm2709-rpi-2-b.dtb
|
||||||
|
|
||||||
|
# Raspberry Pi
|
||||||
|
ifeq ($(CONFIG_ARCH_BCM2708),y)
|
||||||
|
RPI_DT_OVERLAYS=y
|
||||||
|
endif
|
||||||
|
ifeq ($(CONFIG_ARCH_BCM2709),y)
|
||||||
|
RPI_DT_OVERLAYS=y
|
||||||
|
endif
|
||||||
|
ifeq ($(CONFIG_ARCH_BCM2835),y)
|
||||||
|
RPI_DT_OVERLAYS=y
|
||||||
|
endif
|
||||||
|
ifeq ($(RPI_DT_OVERLAYS),y)
|
||||||
|
dts-dirs += overlays
|
||||||
|
endif
|
||||||
|
|
||||||
dtb-$(CONFIG_ARCH_ALPINE) += \
|
dtb-$(CONFIG_ARCH_ALPINE) += \
|
||||||
alpine-db.dtb
|
alpine-db.dtb
|
||||||
dtb-$(CONFIG_MACH_ASM9260) += \
|
dtb-$(CONFIG_MACH_ASM9260) += \
|
||||||
@@ -777,10 +797,20 @@ dtb-$(CONFIG_ARCH_MEDIATEK) += \
|
|||||||
mt8127-moose.dtb \
|
mt8127-moose.dtb \
|
||||||
mt8135-evbp1.dtb
|
mt8135-evbp1.dtb
|
||||||
dtb-$(CONFIG_ARCH_ZX) += zx296702-ad1.dtb
|
dtb-$(CONFIG_ARCH_ZX) += zx296702-ad1.dtb
|
||||||
|
|
||||||
|
targets += dtbs dtbs_install
|
||||||
|
targets += $(dtb-y)
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
dtstree := $(srctree)/$(src)
|
dtstree := $(srctree)/$(src)
|
||||||
dtb-$(CONFIG_OF_ALL_DTBS) := $(patsubst $(dtstree)/%.dts,%.dtb, $(wildcard $(dtstree)/*.dts))
|
dtb-$(CONFIG_OF_ALL_DTBS) := $(patsubst $(dtstree)/%.dts,%.dtb, $(wildcard $(dtstree)/*.dts))
|
||||||
|
|
||||||
always := $(dtb-y)
|
always := $(dtb-y)
|
||||||
|
subdir-y := $(dts-dirs)
|
||||||
clean-files := *.dtb
|
clean-files := *.dtb
|
||||||
|
|
||||||
|
# Enable fixups to support overlays on BCM2708 platforms
|
||||||
|
ifeq ($(RPI_DT_OVERLAYS),y)
|
||||||
|
DTC_FLAGS ?= -@
|
||||||
|
endif
|
||||||
|
|||||||
145
arch/arm/boot/dts/bcm2708-rpi-b-plus.dts
Normal file
145
arch/arm/boot/dts/bcm2708-rpi-b-plus.dts
Normal file
@@ -0,0 +1,145 @@
|
|||||||
|
/dts-v1/;
|
||||||
|
|
||||||
|
#include "bcm2708.dtsi"
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2708";
|
||||||
|
model = "Raspberry Pi Model B+";
|
||||||
|
};
|
||||||
|
|
||||||
|
&gpio {
|
||||||
|
sdhost_pins: sdhost_pins {
|
||||||
|
brcm,pins = <48 49 50 51 52 53>;
|
||||||
|
brcm,function = <4>; /* alt0 */
|
||||||
|
};
|
||||||
|
|
||||||
|
spi0_pins: spi0_pins {
|
||||||
|
brcm,pins = <9 10 11>;
|
||||||
|
brcm,function = <4>; /* alt0 */
|
||||||
|
};
|
||||||
|
|
||||||
|
spi0_cs_pins: spi0_cs_pins {
|
||||||
|
brcm,pins = <8 7>;
|
||||||
|
brcm,function = <1>; /* output */
|
||||||
|
};
|
||||||
|
|
||||||
|
i2c0_pins: i2c0 {
|
||||||
|
brcm,pins = <0 1>;
|
||||||
|
brcm,function = <4>;
|
||||||
|
};
|
||||||
|
|
||||||
|
i2c1_pins: i2c1 {
|
||||||
|
brcm,pins = <2 3>;
|
||||||
|
brcm,function = <4>;
|
||||||
|
};
|
||||||
|
|
||||||
|
i2s_pins: i2s {
|
||||||
|
brcm,pins = <18 19 20 21>;
|
||||||
|
brcm,function = <4>; /* alt0 */
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&sdhost {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&sdhost_pins>;
|
||||||
|
bus-width = <4>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&fb {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&uart0 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&spi0 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
|
||||||
|
cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
|
||||||
|
|
||||||
|
spidev@0{
|
||||||
|
compatible = "spidev";
|
||||||
|
reg = <0>; /* CE0 */
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
spi-max-frequency = <500000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
spidev@1{
|
||||||
|
compatible = "spidev";
|
||||||
|
reg = <1>; /* CE1 */
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
spi-max-frequency = <500000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2c0 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&i2c0_pins>;
|
||||||
|
clock-frequency = <100000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2c1 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&i2c1_pins>;
|
||||||
|
clock-frequency = <100000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2c2 {
|
||||||
|
clock-frequency = <100000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2s {
|
||||||
|
#sound-dai-cells = <0>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&i2s_pins>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&random {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&leds {
|
||||||
|
act_led: act {
|
||||||
|
label = "led0";
|
||||||
|
linux,default-trigger = "mmc0";
|
||||||
|
gpios = <&gpio 47 0>;
|
||||||
|
};
|
||||||
|
|
||||||
|
pwr_led: pwr {
|
||||||
|
label = "led1";
|
||||||
|
linux,default-trigger = "input";
|
||||||
|
gpios = <&gpio 35 0>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/ {
|
||||||
|
__overrides__ {
|
||||||
|
uart0 = <&uart0>,"status";
|
||||||
|
uart0_clkrate = <&clk_uart0>,"clock-frequency:0";
|
||||||
|
i2s = <&i2s>,"status";
|
||||||
|
spi = <&spi0>,"status";
|
||||||
|
i2c0 = <&i2c0>,"status";
|
||||||
|
i2c1 = <&i2c1>,"status";
|
||||||
|
i2c2_iknowwhatimdoing = <&i2c2>,"status";
|
||||||
|
i2c0_baudrate = <&i2c0>,"clock-frequency:0";
|
||||||
|
i2c1_baudrate = <&i2c1>,"clock-frequency:0";
|
||||||
|
i2c2_baudrate = <&i2c2>,"clock-frequency:0";
|
||||||
|
core_freq = <&clk_core>,"clock-frequency:0";
|
||||||
|
|
||||||
|
act_led_gpio = <&act_led>,"gpios:4";
|
||||||
|
act_led_activelow = <&act_led>,"gpios:8";
|
||||||
|
act_led_trigger = <&act_led>,"linux,default-trigger";
|
||||||
|
|
||||||
|
pwr_led_gpio = <&pwr_led>,"gpios:4";
|
||||||
|
pwr_led_activelow = <&pwr_led>,"gpios:8";
|
||||||
|
pwr_led_trigger = <&pwr_led>,"linux,default-trigger";
|
||||||
|
|
||||||
|
audio = <&audio>,"status";
|
||||||
|
watchdog = <&watchdog>,"status";
|
||||||
|
random = <&random>,"status";
|
||||||
|
};
|
||||||
|
};
|
||||||
135
arch/arm/boot/dts/bcm2708-rpi-b.dts
Normal file
135
arch/arm/boot/dts/bcm2708-rpi-b.dts
Normal file
@@ -0,0 +1,135 @@
|
|||||||
|
/dts-v1/;
|
||||||
|
|
||||||
|
#include "bcm2708.dtsi"
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2708";
|
||||||
|
model = "Raspberry Pi Model B";
|
||||||
|
};
|
||||||
|
|
||||||
|
&gpio {
|
||||||
|
sdhost_pins: sdhost_pins {
|
||||||
|
brcm,pins = <48 49 50 51 52 53>;
|
||||||
|
brcm,function = <4>; /* alt0 */
|
||||||
|
};
|
||||||
|
|
||||||
|
spi0_pins: spi0_pins {
|
||||||
|
brcm,pins = <9 10 11>;
|
||||||
|
brcm,function = <4>; /* alt0 */
|
||||||
|
};
|
||||||
|
|
||||||
|
spi0_cs_pins: spi0_cs_pins {
|
||||||
|
brcm,pins = <8 7>;
|
||||||
|
brcm,function = <1>; /* output */
|
||||||
|
};
|
||||||
|
|
||||||
|
i2c0_pins: i2c0 {
|
||||||
|
brcm,pins = <0 1>;
|
||||||
|
brcm,function = <4>;
|
||||||
|
};
|
||||||
|
|
||||||
|
i2c1_pins: i2c1 {
|
||||||
|
brcm,pins = <2 3>;
|
||||||
|
brcm,function = <4>;
|
||||||
|
};
|
||||||
|
|
||||||
|
i2s_pins: i2s {
|
||||||
|
brcm,pins = <28 29 30 31>;
|
||||||
|
brcm,function = <6>; /* alt2 */
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&sdhost {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&sdhost_pins>;
|
||||||
|
bus-width = <4>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&fb {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&uart0 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&spi0 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
|
||||||
|
cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
|
||||||
|
|
||||||
|
spidev@0{
|
||||||
|
compatible = "spidev";
|
||||||
|
reg = <0>; /* CE0 */
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
spi-max-frequency = <500000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
spidev@1{
|
||||||
|
compatible = "spidev";
|
||||||
|
reg = <1>; /* CE1 */
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
spi-max-frequency = <500000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2c0 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&i2c0_pins>;
|
||||||
|
clock-frequency = <100000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2c1 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&i2c1_pins>;
|
||||||
|
clock-frequency = <100000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2c2 {
|
||||||
|
clock-frequency = <100000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2s {
|
||||||
|
#sound-dai-cells = <0>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&i2s_pins>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&random {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&leds {
|
||||||
|
act_led: act {
|
||||||
|
label = "led0";
|
||||||
|
linux,default-trigger = "mmc0";
|
||||||
|
gpios = <&gpio 16 1>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/ {
|
||||||
|
__overrides__ {
|
||||||
|
uart0 = <&uart0>,"status";
|
||||||
|
uart0_clkrate = <&clk_uart0>,"clock-frequency:0";
|
||||||
|
i2s = <&i2s>,"status";
|
||||||
|
spi = <&spi0>,"status";
|
||||||
|
i2c0 = <&i2c0>,"status";
|
||||||
|
i2c1 = <&i2c1>,"status";
|
||||||
|
i2c2_iknowwhatimdoing = <&i2c2>,"status";
|
||||||
|
i2c0_baudrate = <&i2c0>,"clock-frequency:0";
|
||||||
|
i2c1_baudrate = <&i2c1>,"clock-frequency:0";
|
||||||
|
i2c2_baudrate = <&i2c2>,"clock-frequency:0";
|
||||||
|
core_freq = <&clk_core>,"clock-frequency:0";
|
||||||
|
|
||||||
|
act_led_gpio = <&act_led>,"gpios:4";
|
||||||
|
act_led_activelow = <&act_led>,"gpios:8";
|
||||||
|
act_led_trigger = <&act_led>,"linux,default-trigger";
|
||||||
|
|
||||||
|
audio = <&audio>,"status";
|
||||||
|
watchdog = <&watchdog>,"status";
|
||||||
|
random = <&random>,"status";
|
||||||
|
};
|
||||||
|
};
|
||||||
102
arch/arm/boot/dts/bcm2708-rpi-cm.dts
Executable file
102
arch/arm/boot/dts/bcm2708-rpi-cm.dts
Executable file
@@ -0,0 +1,102 @@
|
|||||||
|
/dts-v1/;
|
||||||
|
|
||||||
|
#include "bcm2708-rpi-cm.dtsi"
|
||||||
|
|
||||||
|
/ {
|
||||||
|
model = "Raspberry Pi Compute Module";
|
||||||
|
};
|
||||||
|
|
||||||
|
&uart0 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&gpio {
|
||||||
|
spi0_pins: spi0_pins {
|
||||||
|
brcm,pins = <9 10 11>;
|
||||||
|
brcm,function = <4>; /* alt0 */
|
||||||
|
};
|
||||||
|
|
||||||
|
spi0_cs_pins: spi0_cs_pins {
|
||||||
|
brcm,pins = <8 7>;
|
||||||
|
brcm,function = <1>; /* output */
|
||||||
|
};
|
||||||
|
|
||||||
|
i2c0_pins: i2c0 {
|
||||||
|
brcm,pins = <0 1>;
|
||||||
|
brcm,function = <4>;
|
||||||
|
};
|
||||||
|
|
||||||
|
i2c1_pins: i2c1 {
|
||||||
|
brcm,pins = <2 3>;
|
||||||
|
brcm,function = <4>;
|
||||||
|
};
|
||||||
|
|
||||||
|
i2s_pins: i2s {
|
||||||
|
brcm,pins = <18 19 20 21>;
|
||||||
|
brcm,function = <4>; /* alt0 */
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&spi0 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
|
||||||
|
cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
|
||||||
|
|
||||||
|
spidev@0{
|
||||||
|
compatible = "spidev";
|
||||||
|
reg = <0>; /* CE0 */
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
spi-max-frequency = <500000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
spidev@1{
|
||||||
|
compatible = "spidev";
|
||||||
|
reg = <1>; /* CE1 */
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
spi-max-frequency = <500000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2c0 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&i2c0_pins>;
|
||||||
|
clock-frequency = <100000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2c1 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&i2c1_pins>;
|
||||||
|
clock-frequency = <100000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2c2 {
|
||||||
|
clock-frequency = <100000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2s {
|
||||||
|
#sound-dai-cells = <0>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&i2s_pins>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&random {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/ {
|
||||||
|
__overrides__ {
|
||||||
|
uart0 = <&uart0>,"status";
|
||||||
|
uart0_clkrate = <&clk_uart0>,"clock-frequency:0";
|
||||||
|
i2s = <&i2s>,"status";
|
||||||
|
spi = <&spi0>,"status";
|
||||||
|
i2c0 = <&i2c0>,"status";
|
||||||
|
i2c1 = <&i2c1>,"status";
|
||||||
|
i2c2_iknowwhatimdoing = <&i2c2>,"status";
|
||||||
|
i2c0_baudrate = <&i2c0>,"clock-frequency:0";
|
||||||
|
i2c1_baudrate = <&i2c1>,"clock-frequency:0";
|
||||||
|
i2c2_baudrate = <&i2c2>,"clock-frequency:0";
|
||||||
|
core_freq = <&clk_core>,"clock-frequency:0";
|
||||||
|
};
|
||||||
|
};
|
||||||
40
arch/arm/boot/dts/bcm2708-rpi-cm.dtsi
Normal file
40
arch/arm/boot/dts/bcm2708-rpi-cm.dtsi
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
#include "bcm2708.dtsi"
|
||||||
|
|
||||||
|
&gpio {
|
||||||
|
sdhost_pins: sdhost_pins {
|
||||||
|
brcm,pins = <48 49 50 51 52 53>;
|
||||||
|
brcm,function = <4>; /* alt0 */
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&leds {
|
||||||
|
act_led: act {
|
||||||
|
label = "led0";
|
||||||
|
linux,default-trigger = "mmc0";
|
||||||
|
gpios = <&gpio 47 0>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&sdhost {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&sdhost_pins>;
|
||||||
|
bus-width = <4>;
|
||||||
|
non-removable;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&fb {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/ {
|
||||||
|
__overrides__ {
|
||||||
|
act_led_gpio = <&act_led>,"gpios:4";
|
||||||
|
act_led_activelow = <&act_led>,"gpios:8";
|
||||||
|
act_led_trigger = <&act_led>,"linux,default-trigger";
|
||||||
|
|
||||||
|
audio = <&audio>,"status";
|
||||||
|
watchdog = <&watchdog>,"status";
|
||||||
|
random = <&random>,"status";
|
||||||
|
};
|
||||||
|
};
|
||||||
40
arch/arm/boot/dts/bcm2708.dtsi
Normal file
40
arch/arm/boot/dts/bcm2708.dtsi
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
#include "bcm2708_common.dtsi"
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2708";
|
||||||
|
model = "BCM2708";
|
||||||
|
|
||||||
|
chosen {
|
||||||
|
/* No padding required - the boot loader can do that. */
|
||||||
|
bootargs = "";
|
||||||
|
};
|
||||||
|
|
||||||
|
soc {
|
||||||
|
ranges = <0x7e000000 0x20000000 0x01000000>;
|
||||||
|
|
||||||
|
timer@7e003000 {
|
||||||
|
compatible = "brcm,bcm2835-system-timer";
|
||||||
|
reg = <0x7e003000 0x1000>;
|
||||||
|
interrupts = <1 0>, <1 1>, <1 2>, <1 3>;
|
||||||
|
clock-frequency = <1000000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
arm-pmu {
|
||||||
|
compatible = "arm,arm1176-pmu";
|
||||||
|
};
|
||||||
|
|
||||||
|
gpiomem {
|
||||||
|
compatible = "brcm,bcm2835-gpiomem";
|
||||||
|
reg = <0x7e200000 0x1000>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&intc {
|
||||||
|
compatible = "brcm,bcm2835-armctrl-ic";
|
||||||
|
};
|
||||||
|
|
||||||
|
&watchdog {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
347
arch/arm/boot/dts/bcm2708_common.dtsi
Normal file
347
arch/arm/boot/dts/bcm2708_common.dtsi
Normal file
@@ -0,0 +1,347 @@
|
|||||||
|
#include "skeleton.dtsi"
|
||||||
|
|
||||||
|
/ {
|
||||||
|
interrupt-parent = <&intc>;
|
||||||
|
|
||||||
|
aliases {
|
||||||
|
audio = &audio;
|
||||||
|
sound = &sound;
|
||||||
|
soc = &soc;
|
||||||
|
dma = &dma;
|
||||||
|
intc = &intc;
|
||||||
|
watchdog = &watchdog;
|
||||||
|
random = &random;
|
||||||
|
mailbox = &mailbox;
|
||||||
|
gpio = &gpio;
|
||||||
|
uart0 = &uart0;
|
||||||
|
sdhost = &sdhost;
|
||||||
|
i2s = &i2s;
|
||||||
|
spi0 = &spi0;
|
||||||
|
i2c0 = &i2c0;
|
||||||
|
uart1 = &uart1;
|
||||||
|
mmc = &mmc;
|
||||||
|
i2c1 = &i2c1;
|
||||||
|
i2c2 = &i2c2;
|
||||||
|
usb = &usb;
|
||||||
|
leds = &leds;
|
||||||
|
fb = &fb;
|
||||||
|
vchiq = &vchiq;
|
||||||
|
thermal = &thermal;
|
||||||
|
clocks = &clocks;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Onboard audio */
|
||||||
|
audio: audio {
|
||||||
|
compatible = "brcm,bcm2835-audio";
|
||||||
|
brcm,pwm-channels = <8>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* External sound card */
|
||||||
|
sound: sound {
|
||||||
|
};
|
||||||
|
|
||||||
|
soc: soc {
|
||||||
|
compatible = "simple-bus";
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
|
||||||
|
dma: dma@7e007000 {
|
||||||
|
compatible = "brcm,bcm2835-dma";
|
||||||
|
reg = <0x7e007000 0xf00>;
|
||||||
|
interrupts = <1 16>,
|
||||||
|
<1 17>,
|
||||||
|
<1 18>,
|
||||||
|
<1 19>,
|
||||||
|
<1 20>,
|
||||||
|
<1 21>,
|
||||||
|
<1 22>,
|
||||||
|
<1 23>,
|
||||||
|
<1 24>,
|
||||||
|
<1 25>,
|
||||||
|
<1 26>,
|
||||||
|
<1 27>;
|
||||||
|
|
||||||
|
#dma-cells = <1>;
|
||||||
|
brcm,dma-channel-mask = <0x0f35>;
|
||||||
|
};
|
||||||
|
|
||||||
|
intc: interrupt-controller@7e00b200 {
|
||||||
|
compatible = "brcm,bcm2708-armctrl-ic";
|
||||||
|
reg = <0x7e00b200 0x200>;
|
||||||
|
interrupt-controller;
|
||||||
|
#interrupt-cells = <2>;
|
||||||
|
};
|
||||||
|
|
||||||
|
mailbox: mailbox@7e00b800 {
|
||||||
|
compatible = "brcm,bcm2835-mbox";
|
||||||
|
reg = <0x7e00b880 0x40>;
|
||||||
|
interrupts = <0 1>;
|
||||||
|
#mbox-cells = <0>;
|
||||||
|
};
|
||||||
|
|
||||||
|
watchdog: watchdog@7e100000 {
|
||||||
|
compatible = "brcm,bcm2835-pm-wdt";
|
||||||
|
reg = <0x7e100000 0x28>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
cprman: cprman@7e101000 {
|
||||||
|
compatible = "brcm,bcm2835-cprman";
|
||||||
|
#clock-cells = <1>;
|
||||||
|
reg = <0x7e101000 0x2000>;
|
||||||
|
|
||||||
|
/* CPRMAN derives everything from the platform's
|
||||||
|
* oscillator.
|
||||||
|
*/
|
||||||
|
clocks = <&clk_osc>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
random: rng@7e104000 {
|
||||||
|
compatible = "brcm,bcm2835-rng";
|
||||||
|
reg = <0x7e104000 0x10>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
gpio: gpio@7e200000 {
|
||||||
|
compatible = "brcm,bcm2835-gpio";
|
||||||
|
reg = <0x7e200000 0xb4>;
|
||||||
|
interrupts = <2 17>, <2 18>;
|
||||||
|
|
||||||
|
gpio-controller;
|
||||||
|
#gpio-cells = <2>;
|
||||||
|
|
||||||
|
interrupt-controller;
|
||||||
|
#interrupt-cells = <2>;
|
||||||
|
};
|
||||||
|
|
||||||
|
uart0: uart@7e201000 {
|
||||||
|
compatible = "arm,pl011", "arm,primecell";
|
||||||
|
reg = <0x7e201000 0x1000>;
|
||||||
|
interrupts = <2 25>;
|
||||||
|
clocks = <&clk_uart0 &clk_apb_p>;
|
||||||
|
clock-names = "uartclk","apb_pclk";
|
||||||
|
arm,primecell-periphid = <0x00241011>; // For an explanation, see
|
||||||
|
// https://github.com/raspberrypi/linux/commit/13731d862cf5219216533a3b0de052cee4cc5038
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
sdhost: sdhost@7e202000 {
|
||||||
|
compatible = "brcm,bcm2835-sdhost";
|
||||||
|
reg = <0x7e202000 0x100>;
|
||||||
|
interrupts = <2 24>;
|
||||||
|
clocks = <&clk_core>;
|
||||||
|
dmas = <&dma 13>,
|
||||||
|
<&dma 13>;
|
||||||
|
dma-names = "tx", "rx";
|
||||||
|
brcm,pio-limit = <1>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
i2s: i2s@7e203000 {
|
||||||
|
compatible = "brcm,bcm2835-i2s";
|
||||||
|
reg = <0x7e203000 0x24>,
|
||||||
|
<0x7e101098 0x08>;
|
||||||
|
|
||||||
|
dmas = <&dma 2>, <&dma 3>;
|
||||||
|
dma-names = "tx", "rx";
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
spi0: spi@7e204000 {
|
||||||
|
compatible = "brcm,bcm2835-spi";
|
||||||
|
reg = <0x7e204000 0x1000>;
|
||||||
|
interrupts = <2 22>;
|
||||||
|
clocks = <&clk_core>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
status = "disabled";
|
||||||
|
/* the dma channels */
|
||||||
|
dmas = <&dma 6>, <&dma 7>;
|
||||||
|
dma-names = "tx", "rx";
|
||||||
|
/* the chipselects used - <0> means native GPIO
|
||||||
|
* add more gpios if necessary as <&gpio 6 1>
|
||||||
|
* (but do not forget to make them output!)
|
||||||
|
*/
|
||||||
|
cs-gpios = <0>, <0>;
|
||||||
|
};
|
||||||
|
|
||||||
|
i2c0: i2c@7e205000 {
|
||||||
|
compatible = "brcm,bcm2708-i2c";
|
||||||
|
reg = <0x7e205000 0x1000>;
|
||||||
|
interrupts = <2 21>;
|
||||||
|
clocks = <&clk_core>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
pwm: pwm@7e20c000 {
|
||||||
|
compatible = "brcm,bcm2835-pwm";
|
||||||
|
reg = <0x7e20c000 0x28>;
|
||||||
|
clocks = <&clk_pwm>;
|
||||||
|
#pwm-cells = <2>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
uart1: uart@7e215040 {
|
||||||
|
compatible = "brcm,bcm2835-aux-uart", "ns16550";
|
||||||
|
reg = <0x7e215040 0x40>;
|
||||||
|
interrupts = <1 29>;
|
||||||
|
clocks = <&clk_uart1>;
|
||||||
|
reg-shift = <2>;
|
||||||
|
no-loopback-test;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
mmc: mmc@7e300000 {
|
||||||
|
compatible = "brcm,bcm2835-mmc";
|
||||||
|
reg = <0x7e300000 0x100>;
|
||||||
|
interrupts = <2 30>;
|
||||||
|
clocks = <&clk_mmc>;
|
||||||
|
dmas = <&dma 11>,
|
||||||
|
<&dma 11>;
|
||||||
|
dma-names = "tx", "rx";
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
i2c1: i2c@7e804000 {
|
||||||
|
compatible = "brcm,bcm2708-i2c";
|
||||||
|
reg = <0x7e804000 0x1000>;
|
||||||
|
interrupts = <2 21>;
|
||||||
|
clocks = <&clk_core>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
i2c2: i2c@7e805000 {
|
||||||
|
// Beware - this is shared with the HDMI module.
|
||||||
|
// Careless use may break (really) your display.
|
||||||
|
// Caveat emptor.
|
||||||
|
compatible = "brcm,bcm2708-i2c";
|
||||||
|
reg = <0x7e805000 0x1000>;
|
||||||
|
interrupts = <2 21>;
|
||||||
|
clocks = <&clk_core>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
smi: smi@7e600000 {
|
||||||
|
compatible = "brcm,bcm2835-smi";
|
||||||
|
reg = <0x7e600000 0x44>, <0x7e1010b0 0x8>;
|
||||||
|
interrupts = <2 16>;
|
||||||
|
brcm,smi-clock-source = <6>;
|
||||||
|
brcm,smi-clock-divisor = <4>;
|
||||||
|
dmas = <&dma 4>;
|
||||||
|
dma-names = "rx-tx";
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
usb: usb@7e980000 {
|
||||||
|
compatible = "brcm,bcm2708-usb";
|
||||||
|
reg = <0x7e980000 0x10000>,
|
||||||
|
<0x7e006000 0x1000>;
|
||||||
|
interrupts = <2 0>,
|
||||||
|
<1 9>;
|
||||||
|
};
|
||||||
|
|
||||||
|
firmware: firmware {
|
||||||
|
compatible = "raspberrypi,bcm2835-firmware";
|
||||||
|
mboxes = <&mailbox>;
|
||||||
|
};
|
||||||
|
|
||||||
|
leds: leds {
|
||||||
|
compatible = "gpio-leds";
|
||||||
|
};
|
||||||
|
|
||||||
|
fb: fb {
|
||||||
|
compatible = "brcm,bcm2708-fb";
|
||||||
|
firmware = <&firmware>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
vchiq: vchiq {
|
||||||
|
compatible = "brcm,bcm2835-vchiq";
|
||||||
|
reg = <0x7e00b840 0xf>;
|
||||||
|
interrupts = <0 2>;
|
||||||
|
cache-line-size = <32>;
|
||||||
|
firmware = <&firmware>;
|
||||||
|
};
|
||||||
|
|
||||||
|
thermal: thermal {
|
||||||
|
compatible = "brcm,bcm2835-thermal";
|
||||||
|
firmware = <&firmware>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
clocks: clocks {
|
||||||
|
compatible = "simple-bus";
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
clk_core: clock@0 {
|
||||||
|
compatible = "fixed-clock";
|
||||||
|
reg = <0>;
|
||||||
|
#clock-cells = <0>;
|
||||||
|
clock-output-names = "core";
|
||||||
|
clock-frequency = <250000000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
clk_mmc: clock@1 {
|
||||||
|
compatible = "fixed-clock";
|
||||||
|
reg = <1>;
|
||||||
|
#clock-cells = <0>;
|
||||||
|
clock-output-names = "mmc";
|
||||||
|
clock-frequency = <250000000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
clk_uart0: clock@2 {
|
||||||
|
compatible = "fixed-clock";
|
||||||
|
reg = <2>;
|
||||||
|
#clock-cells = <0>;
|
||||||
|
clock-output-names = "uart0_pclk";
|
||||||
|
clock-frequency = <3000000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
clk_apb_p: clock@3 {
|
||||||
|
compatible = "fixed-clock";
|
||||||
|
reg = <3>;
|
||||||
|
#clock-cells = <0>;
|
||||||
|
clock-output-names = "apb_pclk";
|
||||||
|
clock-frequency = <126000000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
clk_pwm: clock@4 {
|
||||||
|
compatible = "fixed-clock";
|
||||||
|
reg = <4>;
|
||||||
|
#clock-cells = <0>;
|
||||||
|
clock-output-names = "pwm";
|
||||||
|
clock-frequency = <100000000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
clk_uart1: clock@5 {
|
||||||
|
compatible = "fixed-factor-clock";
|
||||||
|
reg = <5>;
|
||||||
|
clocks = <&clk_core>;
|
||||||
|
#clock-cells = <0>;
|
||||||
|
clock-div = <1>;
|
||||||
|
clock-mult = <2>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* The oscillator is the root of the clock tree. */
|
||||||
|
clk_osc: clock@6 {
|
||||||
|
compatible = "fixed-clock";
|
||||||
|
reg = <6>;
|
||||||
|
#clock-cells = <0>;
|
||||||
|
clock-output-names = "osc";
|
||||||
|
clock-frequency = <19200000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
__overrides__ {
|
||||||
|
cache_line_size = <&vchiq>, "cache-line-size:0";
|
||||||
|
};
|
||||||
|
};
|
||||||
145
arch/arm/boot/dts/bcm2709-rpi-2-b.dts
Normal file
145
arch/arm/boot/dts/bcm2709-rpi-2-b.dts
Normal file
@@ -0,0 +1,145 @@
|
|||||||
|
/dts-v1/;
|
||||||
|
|
||||||
|
#include "bcm2709.dtsi"
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2709";
|
||||||
|
model = "Raspberry Pi 2 Model B";
|
||||||
|
};
|
||||||
|
|
||||||
|
&gpio {
|
||||||
|
sdhost_pins: sdhost_pins {
|
||||||
|
brcm,pins = <48 49 50 51 52 53>;
|
||||||
|
brcm,function = <4>; /* alt0 */
|
||||||
|
};
|
||||||
|
|
||||||
|
spi0_pins: spi0_pins {
|
||||||
|
brcm,pins = <9 10 11>;
|
||||||
|
brcm,function = <4>; /* alt0 */
|
||||||
|
};
|
||||||
|
|
||||||
|
spi0_cs_pins: spi0_cs_pins {
|
||||||
|
brcm,pins = <8 7>;
|
||||||
|
brcm,function = <1>; /* output */
|
||||||
|
};
|
||||||
|
|
||||||
|
i2c0_pins: i2c0 {
|
||||||
|
brcm,pins = <0 1>;
|
||||||
|
brcm,function = <4>;
|
||||||
|
};
|
||||||
|
|
||||||
|
i2c1_pins: i2c1 {
|
||||||
|
brcm,pins = <2 3>;
|
||||||
|
brcm,function = <4>;
|
||||||
|
};
|
||||||
|
|
||||||
|
i2s_pins: i2s {
|
||||||
|
brcm,pins = <18 19 20 21>;
|
||||||
|
brcm,function = <4>; /* alt0 */
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&sdhost {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&sdhost_pins>;
|
||||||
|
bus-width = <4>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&fb {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&uart0 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&spi0 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
|
||||||
|
cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
|
||||||
|
|
||||||
|
spidev@0{
|
||||||
|
compatible = "spidev";
|
||||||
|
reg = <0>; /* CE0 */
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
spi-max-frequency = <500000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
spidev@1{
|
||||||
|
compatible = "spidev";
|
||||||
|
reg = <1>; /* CE1 */
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
spi-max-frequency = <500000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2c0 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&i2c0_pins>;
|
||||||
|
clock-frequency = <100000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2c1 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&i2c1_pins>;
|
||||||
|
clock-frequency = <100000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2c2 {
|
||||||
|
clock-frequency = <100000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2s {
|
||||||
|
#sound-dai-cells = <0>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&i2s_pins>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&random {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&leds {
|
||||||
|
act_led: act {
|
||||||
|
label = "led0";
|
||||||
|
linux,default-trigger = "mmc0";
|
||||||
|
gpios = <&gpio 47 0>;
|
||||||
|
};
|
||||||
|
|
||||||
|
pwr_led: pwr {
|
||||||
|
label = "led1";
|
||||||
|
linux,default-trigger = "input";
|
||||||
|
gpios = <&gpio 35 0>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/ {
|
||||||
|
__overrides__ {
|
||||||
|
uart0 = <&uart0>,"status";
|
||||||
|
uart0_clkrate = <&clk_uart0>,"clock-frequency:0";
|
||||||
|
i2s = <&i2s>,"status";
|
||||||
|
spi = <&spi0>,"status";
|
||||||
|
i2c0 = <&i2c0>,"status";
|
||||||
|
i2c1 = <&i2c1>,"status";
|
||||||
|
i2c2_iknowwhatimdoing = <&i2c2>,"status";
|
||||||
|
i2c0_baudrate = <&i2c0>,"clock-frequency:0";
|
||||||
|
i2c1_baudrate = <&i2c1>,"clock-frequency:0";
|
||||||
|
i2c2_baudrate = <&i2c2>,"clock-frequency:0";
|
||||||
|
core_freq = <&clk_core>,"clock-frequency:0";
|
||||||
|
|
||||||
|
act_led_gpio = <&act_led>,"gpios:4";
|
||||||
|
act_led_activelow = <&act_led>,"gpios:8";
|
||||||
|
act_led_trigger = <&act_led>,"linux,default-trigger";
|
||||||
|
|
||||||
|
pwr_led_gpio = <&pwr_led>,"gpios:4";
|
||||||
|
pwr_led_activelow = <&pwr_led>,"gpios:8";
|
||||||
|
pwr_led_trigger = <&pwr_led>,"linux,default-trigger";
|
||||||
|
|
||||||
|
audio = <&audio>,"status";
|
||||||
|
watchdog = <&watchdog>,"status";
|
||||||
|
random = <&random>,"status";
|
||||||
|
};
|
||||||
|
};
|
||||||
102
arch/arm/boot/dts/bcm2709.dtsi
Normal file
102
arch/arm/boot/dts/bcm2709.dtsi
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
#include "bcm2708_common.dtsi"
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2709";
|
||||||
|
model = "BCM2709";
|
||||||
|
|
||||||
|
chosen {
|
||||||
|
/* No padding required - the boot loader can do that. */
|
||||||
|
bootargs = "";
|
||||||
|
};
|
||||||
|
|
||||||
|
soc {
|
||||||
|
ranges = <0x7e000000 0x3f000000 0x01000000>,
|
||||||
|
<0x40000000 0x40000000 0x00040000>;
|
||||||
|
|
||||||
|
local_intc: local_intc {
|
||||||
|
compatible = "brcm,bcm2836-l1-intc";
|
||||||
|
reg = <0x40000000 0x100>;
|
||||||
|
interrupt-controller;
|
||||||
|
#interrupt-cells = <1>;
|
||||||
|
interrupt-parent = <&local_intc>;
|
||||||
|
};
|
||||||
|
|
||||||
|
arm-pmu {
|
||||||
|
compatible = "arm,cortex-a7-pmu";
|
||||||
|
interrupt-parent = <&local_intc>;
|
||||||
|
interrupts = <9>;
|
||||||
|
};
|
||||||
|
|
||||||
|
gpiomem {
|
||||||
|
compatible = "brcm,bcm2835-gpiomem";
|
||||||
|
reg = <0x7e200000 0x1000>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
timer {
|
||||||
|
compatible = "arm,armv7-timer";
|
||||||
|
clock-frequency = <19200000>;
|
||||||
|
interrupt-parent = <&local_intc>;
|
||||||
|
interrupts = <0>, // PHYS_SECURE_PPI
|
||||||
|
<1>, // PHYS_NONSECURE_PPI
|
||||||
|
<3>, // VIRT_PPI
|
||||||
|
<2>; // HYP_PPI
|
||||||
|
always-on;
|
||||||
|
};
|
||||||
|
|
||||||
|
syscon@40000000 {
|
||||||
|
compatible = "brcm,bcm2836-arm-local", "syscon";
|
||||||
|
reg = <0x40000000 0x100>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
cpus: cpus {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
v7_cpu0: cpu@0 {
|
||||||
|
device_type = "cpu";
|
||||||
|
compatible = "arm,cortex-a7";
|
||||||
|
reg = <0xf00>;
|
||||||
|
clock-frequency = <800000000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
v7_cpu1: cpu@1 {
|
||||||
|
device_type = "cpu";
|
||||||
|
compatible = "arm,cortex-a7";
|
||||||
|
reg = <0xf01>;
|
||||||
|
clock-frequency = <800000000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
v7_cpu2: cpu@2 {
|
||||||
|
device_type = "cpu";
|
||||||
|
compatible = "arm,cortex-a7";
|
||||||
|
reg = <0xf02>;
|
||||||
|
clock-frequency = <800000000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
v7_cpu3: cpu@3 {
|
||||||
|
device_type = "cpu";
|
||||||
|
compatible = "arm,cortex-a7";
|
||||||
|
reg = <0xf03>;
|
||||||
|
clock-frequency = <800000000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
__overrides__ {
|
||||||
|
arm_freq = <&v7_cpu0>, "clock-frequency:0",
|
||||||
|
<&v7_cpu1>, "clock-frequency:0",
|
||||||
|
<&v7_cpu2>, "clock-frequency:0",
|
||||||
|
<&v7_cpu3>, "clock-frequency:0";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&watchdog {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&intc {
|
||||||
|
compatible = "brcm,bcm2836-armctrl-ic";
|
||||||
|
interrupt-parent = <&local_intc>;
|
||||||
|
interrupts = <8>;
|
||||||
|
};
|
||||||
@@ -1,30 +1,128 @@
|
|||||||
/dts-v1/;
|
/dts-v1/;
|
||||||
#include "bcm2835-rpi.dtsi"
|
#include "bcm2835.dtsi"
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
compatible = "raspberrypi,model-b-plus", "brcm,bcm2835";
|
compatible = "raspberrypi,model-b-plus", "brcm,bcm2835";
|
||||||
model = "Raspberry Pi Model B+";
|
model = "Raspberry Pi Model B+";
|
||||||
|
|
||||||
leds {
|
|
||||||
act {
|
|
||||||
gpios = <&gpio 47 0>;
|
|
||||||
};
|
|
||||||
|
|
||||||
pwr {
|
|
||||||
label = "PWR";
|
|
||||||
gpios = <&gpio 35 0>;
|
|
||||||
default-state = "keep";
|
|
||||||
linux,default-trigger = "default-on";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
&gpio {
|
&gpio {
|
||||||
pinctrl-0 = <&gpioout &alt0 &i2s_alt0 &alt3>;
|
spi0_pins: spi0_pins {
|
||||||
|
brcm,pins = <7 8 9 10 11>;
|
||||||
|
brcm,function = <4>; /* alt0 */
|
||||||
|
};
|
||||||
|
|
||||||
/* I2S interface */
|
i2c0_pins: i2c0 {
|
||||||
i2s_alt0: i2s_alt0 {
|
brcm,pins = <0 1>;
|
||||||
|
brcm,function = <4>;
|
||||||
|
};
|
||||||
|
|
||||||
|
i2c1_pins: i2c1 {
|
||||||
|
brcm,pins = <2 3>;
|
||||||
|
brcm,function = <4>;
|
||||||
|
};
|
||||||
|
|
||||||
|
i2s_pins: i2s {
|
||||||
brcm,pins = <18 19 20 21>;
|
brcm,pins = <18 19 20 21>;
|
||||||
brcm,function = <BCM2835_FSEL_ALT0>;
|
brcm,function = <4>; /* alt0 */
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&mmc {
|
||||||
|
status = "okay";
|
||||||
|
bus-width = <4>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&fb {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&uart0 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&spi0 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&spi0_pins>;
|
||||||
|
|
||||||
|
spidev@0{
|
||||||
|
compatible = "spidev";
|
||||||
|
reg = <0>; /* CE0 */
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
spi-max-frequency = <500000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
spidev@1{
|
||||||
|
compatible = "spidev";
|
||||||
|
reg = <1>; /* CE1 */
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
spi-max-frequency = <500000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2c0 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&i2c0_pins>;
|
||||||
|
clock-frequency = <100000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2c1 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&i2c1_pins>;
|
||||||
|
clock-frequency = <100000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2c2 {
|
||||||
|
clock-frequency = <100000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2s {
|
||||||
|
#sound-dai-cells = <0>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&i2s_pins>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&leds {
|
||||||
|
act_led: act {
|
||||||
|
label = "led0";
|
||||||
|
linux,default-trigger = "mmc0";
|
||||||
|
gpios = <&gpio 47 0>;
|
||||||
|
};
|
||||||
|
|
||||||
|
pwr_led: pwr {
|
||||||
|
label = "led1";
|
||||||
|
linux,default-trigger = "input";
|
||||||
|
gpios = <&gpio 35 0>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/ {
|
||||||
|
__overrides__ {
|
||||||
|
uart0 = <&uart0>,"status";
|
||||||
|
uart0_clkrate = <&clk_uart0>,"clock-frequency:0";
|
||||||
|
uart1_clkrate = <&uart1>,"clock-frequency:0";
|
||||||
|
i2s = <&i2s>,"status";
|
||||||
|
spi = <&spi0>,"status";
|
||||||
|
i2c0 = <&i2c0>,"status";
|
||||||
|
i2c1 = <&i2c1>,"status";
|
||||||
|
i2c2_iknowwhatimdoing = <&i2c2>,"status";
|
||||||
|
i2c0_baudrate = <&i2c0>,"clock-frequency:0";
|
||||||
|
i2c1_baudrate = <&i2c1>,"clock-frequency:0";
|
||||||
|
i2c2_baudrate = <&i2c2>,"clock-frequency:0";
|
||||||
|
core_freq = <&clk_core>,"clock-frequency:0";
|
||||||
|
|
||||||
|
act_led_gpio = <&act_led>,"gpios:4";
|
||||||
|
act_led_activelow = <&act_led>,"gpios:8";
|
||||||
|
act_led_trigger = <&act_led>,"linux,default-trigger";
|
||||||
|
|
||||||
|
pwr_led_gpio = <&pwr_led>,"gpios:4";
|
||||||
|
pwr_led_activelow = <&pwr_led>,"gpios:8";
|
||||||
|
pwr_led_trigger = <&pwr_led>,"linux,default-trigger";
|
||||||
|
|
||||||
|
audio = <&audio>,"status";
|
||||||
|
watchdog = <&watchdog>,"status";
|
||||||
|
random = <&random>,"status";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,17 +1,118 @@
|
|||||||
/dts-v1/;
|
/dts-v1/;
|
||||||
#include "bcm2835-rpi.dtsi"
|
#include "bcm2835.dtsi"
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
compatible = "raspberrypi,model-b", "brcm,bcm2835";
|
compatible = "raspberrypi,model-b", "brcm,bcm2835";
|
||||||
model = "Raspberry Pi Model B";
|
model = "Raspberry Pi Model B";
|
||||||
|
|
||||||
leds {
|
|
||||||
act {
|
|
||||||
gpios = <&gpio 16 1>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
&gpio {
|
&gpio {
|
||||||
pinctrl-0 = <&gpioout &alt0 &alt3>;
|
spi0_pins: spi0_pins {
|
||||||
|
brcm,pins = <7 8 9 10 11>;
|
||||||
|
brcm,function = <4>; /* alt0 */
|
||||||
|
};
|
||||||
|
|
||||||
|
i2c0_pins: i2c0 {
|
||||||
|
brcm,pins = <0 1>;
|
||||||
|
brcm,function = <4>;
|
||||||
|
};
|
||||||
|
|
||||||
|
i2c1_pins: i2c1 {
|
||||||
|
brcm,pins = <2 3>;
|
||||||
|
brcm,function = <4>;
|
||||||
|
};
|
||||||
|
|
||||||
|
i2s_pins: i2s {
|
||||||
|
brcm,pins = <28 29 30 31>;
|
||||||
|
brcm,function = <6>; /* alt2 */
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&mmc {
|
||||||
|
status = "okay";
|
||||||
|
bus-width = <4>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&fb {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&uart0 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&spi0 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&spi0_pins>;
|
||||||
|
|
||||||
|
spidev@0{
|
||||||
|
compatible = "spidev";
|
||||||
|
reg = <0>; /* CE0 */
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
spi-max-frequency = <500000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
spidev@1{
|
||||||
|
compatible = "spidev";
|
||||||
|
reg = <1>; /* CE1 */
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
spi-max-frequency = <500000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2c0 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&i2c0_pins>;
|
||||||
|
clock-frequency = <100000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2c1 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&i2c1_pins>;
|
||||||
|
clock-frequency = <100000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2c2 {
|
||||||
|
clock-frequency = <100000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2s {
|
||||||
|
#sound-dai-cells = <0>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&i2s_pins>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&leds {
|
||||||
|
act_led: act {
|
||||||
|
label = "led0";
|
||||||
|
linux,default-trigger = "mmc0";
|
||||||
|
gpios = <&gpio 16 1>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/ {
|
||||||
|
__overrides__ {
|
||||||
|
uart0 = <&uart0>,"status";
|
||||||
|
uart0_clkrate = <&clk_uart0>,"clock-frequency:0";
|
||||||
|
uart1_clkrate = <&uart1>,"clock-frequency:0";
|
||||||
|
i2s = <&i2s>,"status";
|
||||||
|
spi = <&spi0>,"status";
|
||||||
|
i2c0 = <&i2c0>,"status";
|
||||||
|
i2c1 = <&i2c1>,"status";
|
||||||
|
i2c2_iknowwhatimdoing = <&i2c2>,"status";
|
||||||
|
i2c0_baudrate = <&i2c0>,"clock-frequency:0";
|
||||||
|
i2c1_baudrate = <&i2c1>,"clock-frequency:0";
|
||||||
|
i2c2_baudrate = <&i2c2>,"clock-frequency:0";
|
||||||
|
core_freq = <&clk_core>,"clock-frequency:0";
|
||||||
|
|
||||||
|
act_led_gpio = <&act_led>,"gpios:4";
|
||||||
|
act_led_activelow = <&act_led>,"gpios:8";
|
||||||
|
act_led_trigger = <&act_led>,"linux,default-trigger";
|
||||||
|
|
||||||
|
audio = <&audio>,"status";
|
||||||
|
watchdog = <&watchdog>,"status";
|
||||||
|
random = <&random>,"status";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
93
arch/arm/boot/dts/bcm2835-rpi-cm.dts
Normal file
93
arch/arm/boot/dts/bcm2835-rpi-cm.dts
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
/dts-v1/;
|
||||||
|
|
||||||
|
#include "bcm2835-rpi-cm.dtsi"
|
||||||
|
|
||||||
|
/ {
|
||||||
|
model = "Raspberry Pi Compute Module";
|
||||||
|
};
|
||||||
|
|
||||||
|
&uart0 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&gpio {
|
||||||
|
spi0_pins: spi0_pins {
|
||||||
|
brcm,pins = <7 8 9 10 11>;
|
||||||
|
brcm,function = <4>; /* alt0 */
|
||||||
|
};
|
||||||
|
|
||||||
|
i2c0_pins: i2c0 {
|
||||||
|
brcm,pins = <0 1>;
|
||||||
|
brcm,function = <4>;
|
||||||
|
};
|
||||||
|
|
||||||
|
i2c1_pins: i2c1 {
|
||||||
|
brcm,pins = <2 3>;
|
||||||
|
brcm,function = <4>;
|
||||||
|
};
|
||||||
|
|
||||||
|
i2s_pins: i2s {
|
||||||
|
brcm,pins = <18 19 20 21>;
|
||||||
|
brcm,function = <4>; /* alt0 */
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&spi0 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&spi0_pins>;
|
||||||
|
|
||||||
|
spidev@0{
|
||||||
|
compatible = "spidev";
|
||||||
|
reg = <0>; /* CE0 */
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
spi-max-frequency = <500000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
spidev@1{
|
||||||
|
compatible = "spidev";
|
||||||
|
reg = <1>; /* CE1 */
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
spi-max-frequency = <500000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2c0 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&i2c0_pins>;
|
||||||
|
clock-frequency = <100000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2c1 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&i2c1_pins>;
|
||||||
|
clock-frequency = <100000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2c2 {
|
||||||
|
clock-frequency = <100000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2s {
|
||||||
|
#sound-dai-cells = <0>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&i2s_pins>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/ {
|
||||||
|
__overrides__ {
|
||||||
|
uart0 = <&uart0>,"status";
|
||||||
|
uart0_clkrate = <&clk_uart0>,"clock-frequency:0";
|
||||||
|
uart1_clkrate = <&uart1>,"clock-frequency:0";
|
||||||
|
i2s = <&i2s>,"status";
|
||||||
|
spi = <&spi0>,"status";
|
||||||
|
i2c0 = <&i2c0>,"status";
|
||||||
|
i2c1 = <&i2c1>,"status";
|
||||||
|
i2c2_iknowwhatimdoing = <&i2c2>,"status";
|
||||||
|
i2c0_baudrate = <&i2c0>,"clock-frequency:0";
|
||||||
|
i2c1_baudrate = <&i2c1>,"clock-frequency:0";
|
||||||
|
i2c2_baudrate = <&i2c2>,"clock-frequency:0";
|
||||||
|
core_freq = <&clk_core>,"clock-frequency:0";
|
||||||
|
};
|
||||||
|
};
|
||||||
30
arch/arm/boot/dts/bcm2835-rpi-cm.dtsi
Normal file
30
arch/arm/boot/dts/bcm2835-rpi-cm.dtsi
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
#include "bcm2835.dtsi"
|
||||||
|
|
||||||
|
&leds {
|
||||||
|
act_led: act {
|
||||||
|
label = "led0";
|
||||||
|
linux,default-trigger = "mmc0";
|
||||||
|
gpios = <&gpio 47 0>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&mmc {
|
||||||
|
status = "okay";
|
||||||
|
bus-width = <4>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&fb {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/ {
|
||||||
|
__overrides__ {
|
||||||
|
act_led_gpio = <&act_led>,"gpios:4";
|
||||||
|
act_led_activelow = <&act_led>,"gpios:8";
|
||||||
|
act_led_trigger = <&act_led>,"linux,default-trigger";
|
||||||
|
|
||||||
|
audio = <&audio>,"status";
|
||||||
|
watchdog = <&watchdog>,"status";
|
||||||
|
random = <&random>,"status";
|
||||||
|
};
|
||||||
|
};
|
||||||
@@ -1,206 +1,39 @@
|
|||||||
#include <dt-bindings/pinctrl/bcm2835.h>
|
#include "bcm2708_common.dtsi"
|
||||||
#include <dt-bindings/clock/bcm2835.h>
|
|
||||||
#include "skeleton.dtsi"
|
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
compatible = "brcm,bcm2835";
|
compatible = "brcm,bcm2835";
|
||||||
model = "BCM2835";
|
model = "BCM2835";
|
||||||
interrupt-parent = <&intc>;
|
|
||||||
|
|
||||||
chosen {
|
chosen {
|
||||||
bootargs = "earlyprintk console=ttyAMA0";
|
bootargs = "";
|
||||||
};
|
};
|
||||||
|
|
||||||
soc {
|
soc {
|
||||||
compatible = "simple-bus";
|
ranges = <0x7e000000 0x20000000 0x01000000>;
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <1>;
|
|
||||||
ranges = <0x7e000000 0x20000000 0x02000000>;
|
|
||||||
dma-ranges = <0x40000000 0x00000000 0x20000000>;
|
dma-ranges = <0x40000000 0x00000000 0x20000000>;
|
||||||
|
|
||||||
timer@7e003000 {
|
timer@7e003000 {
|
||||||
compatible = "brcm,bcm2835-system-timer";
|
compatible = "brcm,bcm2835-system-timer";
|
||||||
reg = <0x7e003000 0x1000>;
|
reg = <0x7e003000 0x1000>;
|
||||||
interrupts = <1 0>, <1 1>, <1 2>, <1 3>;
|
interrupts = <1 0>, <1 1>, <1 2>, <1 3>;
|
||||||
/* This could be a reference to BCM2835_CLOCK_TIMER,
|
|
||||||
* but we don't have the driver using the common clock
|
|
||||||
* support yet.
|
|
||||||
*/
|
|
||||||
clock-frequency = <1000000>;
|
clock-frequency = <1000000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
dma: dma@7e007000 {
|
|
||||||
compatible = "brcm,bcm2835-dma";
|
|
||||||
reg = <0x7e007000 0xf00>;
|
|
||||||
interrupts = <1 16>,
|
|
||||||
<1 17>,
|
|
||||||
<1 18>,
|
|
||||||
<1 19>,
|
|
||||||
<1 20>,
|
|
||||||
<1 21>,
|
|
||||||
<1 22>,
|
|
||||||
<1 23>,
|
|
||||||
<1 24>,
|
|
||||||
<1 25>,
|
|
||||||
<1 26>,
|
|
||||||
<1 27>,
|
|
||||||
<1 28>;
|
|
||||||
|
|
||||||
#dma-cells = <1>;
|
|
||||||
brcm,dma-channel-mask = <0x7f35>;
|
|
||||||
};
|
|
||||||
|
|
||||||
intc: interrupt-controller@7e00b200 {
|
|
||||||
compatible = "brcm,bcm2835-armctrl-ic";
|
|
||||||
reg = <0x7e00b200 0x200>;
|
|
||||||
interrupt-controller;
|
|
||||||
#interrupt-cells = <2>;
|
|
||||||
};
|
|
||||||
|
|
||||||
watchdog@7e100000 {
|
|
||||||
compatible = "brcm,bcm2835-pm-wdt";
|
|
||||||
reg = <0x7e100000 0x28>;
|
|
||||||
};
|
|
||||||
|
|
||||||
clocks: cprman@7e101000 {
|
|
||||||
compatible = "brcm,bcm2835-cprman";
|
|
||||||
#clock-cells = <1>;
|
|
||||||
reg = <0x7e101000 0x2000>;
|
|
||||||
|
|
||||||
/* CPRMAN derives everything from the platform's
|
|
||||||
* oscillator.
|
|
||||||
*/
|
|
||||||
clocks = <&clk_osc>;
|
|
||||||
};
|
|
||||||
|
|
||||||
rng@7e104000 {
|
|
||||||
compatible = "brcm,bcm2835-rng";
|
|
||||||
reg = <0x7e104000 0x10>;
|
|
||||||
};
|
|
||||||
|
|
||||||
mailbox: mailbox@7e00b800 {
|
|
||||||
compatible = "brcm,bcm2835-mbox";
|
|
||||||
reg = <0x7e00b880 0x40>;
|
|
||||||
interrupts = <0 1>;
|
|
||||||
#mbox-cells = <0>;
|
|
||||||
};
|
|
||||||
|
|
||||||
gpio: gpio@7e200000 {
|
|
||||||
compatible = "brcm,bcm2835-gpio";
|
|
||||||
reg = <0x7e200000 0xb4>;
|
|
||||||
/*
|
|
||||||
* The GPIO IP block is designed for 3 banks of GPIOs.
|
|
||||||
* Each bank has a GPIO interrupt for itself.
|
|
||||||
* There is an overall "any bank" interrupt.
|
|
||||||
* In order, these are GIC interrupts 17, 18, 19, 20.
|
|
||||||
* Since the BCM2835 only has 2 banks, the 2nd bank
|
|
||||||
* interrupt output appears to be mirrored onto the
|
|
||||||
* 3rd bank's interrupt signal.
|
|
||||||
* So, a bank0 interrupt shows up on 17, 20, and
|
|
||||||
* a bank1 interrupt shows up on 18, 19, 20!
|
|
||||||
*/
|
|
||||||
interrupts = <2 17>, <2 18>, <2 19>, <2 20>;
|
|
||||||
|
|
||||||
gpio-controller;
|
|
||||||
#gpio-cells = <2>;
|
|
||||||
|
|
||||||
interrupt-controller;
|
|
||||||
#interrupt-cells = <2>;
|
|
||||||
};
|
|
||||||
|
|
||||||
uart0: uart@7e201000 {
|
|
||||||
compatible = "brcm,bcm2835-pl011", "arm,pl011", "arm,primecell";
|
|
||||||
reg = <0x7e201000 0x1000>;
|
|
||||||
interrupts = <2 25>;
|
|
||||||
clocks = <&clocks BCM2835_CLOCK_UART>,
|
|
||||||
<&clocks BCM2835_CLOCK_VPU>;
|
|
||||||
clock-names = "uartclk", "apb_pclk";
|
|
||||||
arm,primecell-periphid = <0x00241011>;
|
|
||||||
};
|
|
||||||
|
|
||||||
i2s: i2s@7e203000 {
|
|
||||||
compatible = "brcm,bcm2835-i2s";
|
|
||||||
reg = <0x7e203000 0x20>,
|
|
||||||
<0x7e101098 0x02>;
|
|
||||||
|
|
||||||
dmas = <&dma 2>,
|
|
||||||
<&dma 3>;
|
|
||||||
dma-names = "tx", "rx";
|
|
||||||
status = "disabled";
|
|
||||||
};
|
|
||||||
|
|
||||||
spi: spi@7e204000 {
|
|
||||||
compatible = "brcm,bcm2835-spi";
|
|
||||||
reg = <0x7e204000 0x1000>;
|
|
||||||
interrupts = <2 22>;
|
|
||||||
clocks = <&clocks BCM2835_CLOCK_VPU>;
|
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <0>;
|
|
||||||
status = "disabled";
|
|
||||||
};
|
|
||||||
|
|
||||||
i2c0: i2c@7e205000 {
|
|
||||||
compatible = "brcm,bcm2835-i2c";
|
|
||||||
reg = <0x7e205000 0x1000>;
|
|
||||||
interrupts = <2 21>;
|
|
||||||
clocks = <&clocks BCM2835_CLOCK_VPU>;
|
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <0>;
|
|
||||||
status = "disabled";
|
|
||||||
};
|
|
||||||
|
|
||||||
sdhci: sdhci@7e300000 {
|
|
||||||
compatible = "brcm,bcm2835-sdhci";
|
|
||||||
reg = <0x7e300000 0x100>;
|
|
||||||
interrupts = <2 30>;
|
|
||||||
clocks = <&clocks BCM2835_CLOCK_EMMC>;
|
|
||||||
status = "disabled";
|
|
||||||
};
|
|
||||||
|
|
||||||
i2c1: i2c@7e804000 {
|
|
||||||
compatible = "brcm,bcm2835-i2c";
|
|
||||||
reg = <0x7e804000 0x1000>;
|
|
||||||
interrupts = <2 21>;
|
|
||||||
clocks = <&clocks BCM2835_CLOCK_VPU>;
|
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <0>;
|
|
||||||
status = "disabled";
|
|
||||||
};
|
|
||||||
|
|
||||||
i2c2: i2c@7e805000 {
|
|
||||||
compatible = "brcm,bcm2835-i2c";
|
|
||||||
reg = <0x7e805000 0x1000>;
|
|
||||||
interrupts = <2 21>;
|
|
||||||
clocks = <&clocks BCM2835_CLOCK_VPU>;
|
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <0>;
|
|
||||||
status = "disabled";
|
|
||||||
};
|
|
||||||
|
|
||||||
usb@7e980000 {
|
|
||||||
compatible = "brcm,bcm2835-usb";
|
|
||||||
reg = <0x7e980000 0x10000>;
|
|
||||||
interrupts = <1 9>;
|
|
||||||
};
|
|
||||||
|
|
||||||
arm-pmu {
|
arm-pmu {
|
||||||
compatible = "arm,arm1176-pmu";
|
compatible = "arm,arm1176-pmu";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
aux_enable: aux_enable@0x7e215004 {
|
||||||
|
compatible = "bcrm,bcm2835-aux-enable";
|
||||||
|
reg = <0x7e215004 0x04>;
|
||||||
};
|
};
|
||||||
|
|
||||||
clocks {
|
|
||||||
compatible = "simple-bus";
|
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <0>;
|
|
||||||
|
|
||||||
/* The oscillator is the root of the clock tree. */
|
|
||||||
clk_osc: clock@3 {
|
|
||||||
compatible = "fixed-clock";
|
|
||||||
reg = <3>;
|
|
||||||
#clock-cells = <0>;
|
|
||||||
clock-output-names = "osc";
|
|
||||||
clock-frequency = <19200000>;
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&intc {
|
||||||
|
compatible = "brcm,bcm2835-armctrl-ic";
|
||||||
|
};
|
||||||
|
|
||||||
|
&watchdog {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|||||||
76
arch/arm/boot/dts/overlays/Makefile
Normal file
76
arch/arm/boot/dts/overlays/Makefile
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
ifeq ($(CONFIG_OF),y)
|
||||||
|
|
||||||
|
# Overlays for the Raspberry Pi platform
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_ARCH_BCM2708),y)
|
||||||
|
RPI_DT_OVERLAYS=y
|
||||||
|
endif
|
||||||
|
ifeq ($(CONFIG_ARCH_BCM2709),y)
|
||||||
|
RPI_DT_OVERLAYS=y
|
||||||
|
endif
|
||||||
|
ifeq ($(CONFIG_ARCH_BCM2835),y)
|
||||||
|
RPI_DT_OVERLAYS=y
|
||||||
|
endif
|
||||||
|
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += ads7846-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += at86rf233-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += bmp085_i2c-sensor-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += dht11-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += enc28j60-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += gpio-ir-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += gpio-poweroff-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += hifiberry-amp-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += hifiberry-dac-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += hifiberry-dacplus-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += hifiberry-digi-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += hy28a-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += hy28b-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += i2c-rtc-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += i2c-gpio-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += i2s-mmap-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += iqaudio-dac-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += iqaudio-dacplus-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += lirc-rpi-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += mcp2515-can0-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += mcp2515-can1-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += mmc-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += mz61581-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += piscreen-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += piscreen2r-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += pitft28-capacitive-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += pitft28-resistive-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += pps-gpio-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += pwm-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += pwm-2chan-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += raspidac3-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += rpi-backlight-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += rpi-dac-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += rpi-display-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += rpi-ft5406-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += rpi-proto-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += rpi-sense-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += sdhost-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += sdio-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += smi-dev-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += smi-nand-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += smi-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += spi-gpio35-39-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += tinylcd35-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += uart1-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += vc4-kms-v3d-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += vga666-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += w1-gpio-overlay.dtb
|
||||||
|
dtb-$(RPI_DT_OVERLAYS) += w1-gpio-pullup-overlay.dtb
|
||||||
|
|
||||||
|
targets += dtbs dtbs_install
|
||||||
|
targets += $(dtb-y)
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
always := $(dtb-y)
|
||||||
|
clean-files := *.dtb
|
||||||
|
|
||||||
|
# Enable fixups to support overlays on BCM2708 platforms
|
||||||
|
ifeq ($(RPI_DT_OVERLAYS),y)
|
||||||
|
DTC_FLAGS ?= -@
|
||||||
|
endif
|
||||||
738
arch/arm/boot/dts/overlays/README
Normal file
738
arch/arm/boot/dts/overlays/README
Normal file
@@ -0,0 +1,738 @@
|
|||||||
|
Introduction
|
||||||
|
============
|
||||||
|
|
||||||
|
This directory contains Device Tree overlays. Device Tree makes it possible
|
||||||
|
to support many hardware configurations with a single kernel and without the
|
||||||
|
need to explicitly load or blacklist kernel modules. Note that this isn't a
|
||||||
|
"pure" Device Tree configuration (c.f. MACH_BCM2835) - some on-board devices
|
||||||
|
are still configured by the board support code, but the intention is to
|
||||||
|
eventually reach that goal.
|
||||||
|
|
||||||
|
On Raspberry Pi, Device Tree usage is controlled from /boot/config.txt. By
|
||||||
|
default, the Raspberry Pi kernel boots with device tree enabled. You can
|
||||||
|
completely disable DT usage (for now) by adding:
|
||||||
|
|
||||||
|
device_tree=
|
||||||
|
|
||||||
|
to your config.txt, which should cause your Pi to revert to the old way of
|
||||||
|
doing things after a reboot.
|
||||||
|
|
||||||
|
In /boot you will find a .dtb for each base platform. This describes the
|
||||||
|
hardware that is part of the Raspberry Pi board. The loader (start.elf and its
|
||||||
|
siblings) selects the .dtb file appropriate for the platform by name, and reads
|
||||||
|
it into memory. At this point, all of the optional interfaces (i2c, i2s, spi)
|
||||||
|
are disabled, but they can be enabled using Device Tree parameters:
|
||||||
|
|
||||||
|
dtparam=i2c=on,i2s=on,spi=on
|
||||||
|
|
||||||
|
However, this shouldn't be necessary in many use cases because loading an
|
||||||
|
overlay that requires one of those interfaces will cause it to be enabled
|
||||||
|
automatically, and it is advisable to only enable interfaces if they are
|
||||||
|
needed.
|
||||||
|
|
||||||
|
Configuring additional, optional hardware is done using Device Tree overlays
|
||||||
|
(see below).
|
||||||
|
|
||||||
|
raspi-config
|
||||||
|
============
|
||||||
|
|
||||||
|
The Advanced Options section of the raspi-config utility can enable and disable
|
||||||
|
Device Tree use, as well as toggling the I2C and SPI interfaces. Note that it
|
||||||
|
is possible to both enable an interface and blacklist the driver, if for some
|
||||||
|
reason you should want to defer the loading.
|
||||||
|
|
||||||
|
Modules
|
||||||
|
=======
|
||||||
|
|
||||||
|
As well as describing the hardware, Device Tree also gives enough information
|
||||||
|
to allow suitable driver modules to be located and loaded, with the corollary
|
||||||
|
that unneeded modules are not loaded. As a result it should be possible to
|
||||||
|
remove lines from /etc/modules, and /etc/modprobe.d/raspi-blacklist.conf can
|
||||||
|
have its contents deleted (or commented out).
|
||||||
|
|
||||||
|
Using Overlays
|
||||||
|
==============
|
||||||
|
|
||||||
|
Overlays are loaded using the "dtoverlay" directive. As an example, consider the
|
||||||
|
popular lirc-rpi module, the Linux Infrared Remote Control driver. In the
|
||||||
|
pre-DT world this would be loaded from /etc/modules, with an explicit
|
||||||
|
"modprobe lirc-rpi" command, or programmatically by lircd. With DT enabled,
|
||||||
|
this becomes a line in config.txt:
|
||||||
|
|
||||||
|
dtoverlay=lirc-rpi
|
||||||
|
|
||||||
|
This causes the file /boot/overlays/lirc-rpi-overlay.dtb to be loaded. By
|
||||||
|
default it will use GPIOs 17 (out) and 18 (in), but this can be modified using
|
||||||
|
DT parameters:
|
||||||
|
|
||||||
|
dtoverlay=lirc-rpi,gpio_out_pin=17,gpio_in_pin=13
|
||||||
|
|
||||||
|
Parameters always have default values, although in some cases (e.g. "w1-gpio")
|
||||||
|
it is necessary to provided multiple overlays in order to get the desired
|
||||||
|
behaviour. See the list of overlays below for a description of the parameters
|
||||||
|
and their defaults.
|
||||||
|
|
||||||
|
The Overlay and Parameter Reference
|
||||||
|
===================================
|
||||||
|
|
||||||
|
N.B. When editing this file, please preserve the indentation levels to make it
|
||||||
|
simple to parse programmatically. NO HARD TABS.
|
||||||
|
|
||||||
|
|
||||||
|
Name: <The base DTB>
|
||||||
|
Info: Configures the base Raspberry Pi hardware
|
||||||
|
Load: <loaded automatically>
|
||||||
|
Params:
|
||||||
|
audio Set to "on" to enable the onboard ALSA audio
|
||||||
|
interface (default "off")
|
||||||
|
|
||||||
|
i2c_arm Set to "on" to enable the ARM's i2c interface
|
||||||
|
(default "off")
|
||||||
|
|
||||||
|
i2c_vc Set to "on" to enable the i2c interface
|
||||||
|
usually reserved for the VideoCore processor
|
||||||
|
(default "off")
|
||||||
|
|
||||||
|
i2c An alias for i2c_arm
|
||||||
|
|
||||||
|
i2c_arm_baudrate Set the baudrate of the ARM's i2c interface
|
||||||
|
(default "100000")
|
||||||
|
|
||||||
|
i2c_vc_baudrate Set the baudrate of the VideoCore i2c interface
|
||||||
|
(default "100000")
|
||||||
|
|
||||||
|
i2c_baudrate An alias for i2c_arm_baudrate
|
||||||
|
|
||||||
|
i2s Set to "on" to enable the i2s interface
|
||||||
|
(default "off")
|
||||||
|
|
||||||
|
spi Set to "on" to enable the spi interfaces
|
||||||
|
(default "off")
|
||||||
|
|
||||||
|
random Set to "on" to enable the hardware random
|
||||||
|
number generator (default "off")
|
||||||
|
|
||||||
|
uart0 Set to "off" to disable uart0 (default "on")
|
||||||
|
|
||||||
|
watchdog Set to "on" to enable the hardware watchdog
|
||||||
|
(default "off")
|
||||||
|
|
||||||
|
act_led_trigger Choose which activity the LED tracks.
|
||||||
|
Use "heartbeat" for a nice load indicator.
|
||||||
|
(default "mmc")
|
||||||
|
|
||||||
|
act_led_activelow Set to "on" to invert the sense of the LED
|
||||||
|
(default "off")
|
||||||
|
|
||||||
|
act_led_gpio Set which GPIO to use for the activity LED
|
||||||
|
(in case you want to connect it to an external
|
||||||
|
device)
|
||||||
|
(default "16" on a non-Plus board, "47" on a
|
||||||
|
Plus or Pi 2)
|
||||||
|
|
||||||
|
pwr_led_trigger
|
||||||
|
pwr_led_activelow
|
||||||
|
pwr_led_gpio
|
||||||
|
As for act_led_*, but using the PWR LED.
|
||||||
|
Not available on Model A/B boards.
|
||||||
|
|
||||||
|
N.B. It is recommended to only enable those interfaces that are needed.
|
||||||
|
Leaving all interfaces enabled can lead to unwanted behaviour (i2c_vc
|
||||||
|
interfering with Pi Camera, I2S and SPI hogging GPIO pins, etc.)
|
||||||
|
Note also that i2c, i2c_arm and i2c_vc are aliases for the physical
|
||||||
|
interfaces i2c0 and i2c1. Use of the numeric variants is still possible
|
||||||
|
but deprecated because the ARM/VC assignments differ between board
|
||||||
|
revisions. The same board-specific mapping applies to i2c_baudrate,
|
||||||
|
and the other i2c baudrate parameters.
|
||||||
|
|
||||||
|
|
||||||
|
Name: ads7846
|
||||||
|
Info: ADS7846 Touch controller
|
||||||
|
Load: dtoverlay=ads7846,<param>=<val>
|
||||||
|
Params: cs SPI bus Chip Select (default 1)
|
||||||
|
speed SPI bus speed (default 2MHz, max 3.25MHz)
|
||||||
|
penirq GPIO used for PENIRQ. REQUIRED
|
||||||
|
penirq_pull Set GPIO pull (default 0=none, 2=pullup)
|
||||||
|
swapxy Swap x and y axis
|
||||||
|
xmin Minimum value on the X axis (default 0)
|
||||||
|
ymin Minimum value on the Y axis (default 0)
|
||||||
|
xmax Maximum value on the X axis (default 4095)
|
||||||
|
ymax Maximum value on the Y axis (default 4095)
|
||||||
|
pmin Minimum reported pressure value (default 0)
|
||||||
|
pmax Maximum reported pressure value (default 65535)
|
||||||
|
xohms Touchpanel sensitivity (X-plate resistance)
|
||||||
|
(default 400)
|
||||||
|
|
||||||
|
penirq is required and usually xohms (60-100) has to be set as well.
|
||||||
|
Apart from that, pmax (255) and swapxy are also common.
|
||||||
|
The rest of the calibration can be done with xinput-calibrator.
|
||||||
|
See: github.com/notro/fbtft/wiki/FBTFT-on-Raspian
|
||||||
|
Device Tree binding document:
|
||||||
|
www.kernel.org/doc/Documentation/devicetree/bindings/input/ads7846.txt
|
||||||
|
|
||||||
|
|
||||||
|
Name: at86rf233
|
||||||
|
Info: Configures the Atmel AT86RF233 802.15.4 low-power WPAN transceiver,
|
||||||
|
connected to spi0.0
|
||||||
|
Load: dtoverlay=at86rf233,<param>=<val>
|
||||||
|
Params: interrupt GPIO used for INT (default 23)
|
||||||
|
reset GPIO used for Reset (default 24)
|
||||||
|
sleep GPIO used for Sleep (default 25)
|
||||||
|
speed SPI bus speed in Hz (default 6000000)
|
||||||
|
trim Fine tuning of the internal capacitance
|
||||||
|
arrays (0=+0pF, 15=+4.5pF, default 15)
|
||||||
|
|
||||||
|
|
||||||
|
Name: bmp085_i2c-sensor
|
||||||
|
Info: Configures the BMP085/BMP180 digital barometric pressure and temperature
|
||||||
|
sensors from Bosch Sensortec
|
||||||
|
Load: dtoverlay=bmp085_i2c-sensor
|
||||||
|
Params: <None>
|
||||||
|
|
||||||
|
|
||||||
|
Name: dht11
|
||||||
|
Info: Overlay for the DHT11/DHT21/DHT22 humidity/temperature sensors
|
||||||
|
Also sometimes found with the part number(s) AM230x.
|
||||||
|
Load: dtoverlay=dht11,<param>=<val>
|
||||||
|
Params: gpiopin GPIO connected to the sensor's DATA output.
|
||||||
|
(default 4)
|
||||||
|
|
||||||
|
|
||||||
|
[ The ds1307-rtc overlay has been deleted. See i2c-rtc. ]
|
||||||
|
|
||||||
|
|
||||||
|
Name: enc28j60
|
||||||
|
Info: Overlay for the Microchip ENC28J60 Ethernet Controller (SPI)
|
||||||
|
Load: dtoverlay=enc28j60,<param>=<val>
|
||||||
|
Params: int_pin GPIO used for INT (default 25)
|
||||||
|
|
||||||
|
speed SPI bus speed (default 12000000)
|
||||||
|
|
||||||
|
|
||||||
|
Name: gpio-ir
|
||||||
|
Info: Use GPIO pin as rc-core style infrared receiver input. The rc-core-
|
||||||
|
based gpio_ir_recv driver maps received keys directly to a
|
||||||
|
/dev/input/event* device, all decoding is done by the kernel - LIRC is
|
||||||
|
not required! The key mapping and other decoding parameters can be
|
||||||
|
configured by "ir-keytable" tool.
|
||||||
|
Load: dtoverlay=gpio-ir,<param>=<val>
|
||||||
|
Params: gpio_pin Input pin number. Default is 18.
|
||||||
|
|
||||||
|
gpio_pull Desired pull-up/down state (off, down, up)
|
||||||
|
Default is "down".
|
||||||
|
|
||||||
|
rc-map-name Default rc keymap (can also be changed by
|
||||||
|
ir-keytable), defaults to "rc-rc6-mce"
|
||||||
|
|
||||||
|
|
||||||
|
Name: gpio-poweroff
|
||||||
|
Info: Drives a GPIO high or low on reboot
|
||||||
|
Load: dtoverlay=gpio-poweroff,<param>=<val>
|
||||||
|
Params: gpiopin GPIO for signalling (default 26)
|
||||||
|
|
||||||
|
active_low Set if the power control device requires a
|
||||||
|
high->low transition to trigger a power-down.
|
||||||
|
Note that this will require the support of a
|
||||||
|
custom dt-blob.bin to prevent a power-down
|
||||||
|
during the boot process, and that a reboot
|
||||||
|
will also cause the pin to go low.
|
||||||
|
|
||||||
|
|
||||||
|
Name: hifiberry-amp
|
||||||
|
Info: Configures the HifiBerry Amp and Amp+ audio cards
|
||||||
|
Load: dtoverlay=hifiberry-amp
|
||||||
|
Params: <None>
|
||||||
|
|
||||||
|
|
||||||
|
Name: hifiberry-dac
|
||||||
|
Info: Configures the HifiBerry DAC audio card
|
||||||
|
Load: dtoverlay=hifiberry-dac
|
||||||
|
Params: <None>
|
||||||
|
|
||||||
|
|
||||||
|
Name: hifiberry-dacplus
|
||||||
|
Info: Configures the HifiBerry DAC+ audio card
|
||||||
|
Load: dtoverlay=hifiberry-dacplus
|
||||||
|
Params: <None>
|
||||||
|
|
||||||
|
|
||||||
|
Name: hifiberry-digi
|
||||||
|
Info: Configures the HifiBerry Digi audio card
|
||||||
|
Load: dtoverlay=hifiberry-digi
|
||||||
|
Params: <None>
|
||||||
|
|
||||||
|
|
||||||
|
Name: hy28a
|
||||||
|
Info: HY28A - 2.8" TFT LCD Display Module by HAOYU Electronics
|
||||||
|
Default values match Texy's display shield
|
||||||
|
Load: dtoverlay=hy28a,<param>=<val>
|
||||||
|
Params: speed Display SPI bus speed
|
||||||
|
|
||||||
|
rotate Display rotation {0,90,180,270}
|
||||||
|
|
||||||
|
fps Delay between frame updates
|
||||||
|
|
||||||
|
debug Debug output level {0-7}
|
||||||
|
|
||||||
|
xohms Touchpanel sensitivity (X-plate resistance)
|
||||||
|
|
||||||
|
resetgpio GPIO used to reset controller
|
||||||
|
|
||||||
|
ledgpio GPIO used to control backlight
|
||||||
|
|
||||||
|
|
||||||
|
Name: hy28b
|
||||||
|
Info: HY28B - 2.8" TFT LCD Display Module by HAOYU Electronics
|
||||||
|
Default values match Texy's display shield
|
||||||
|
Load: dtoverlay=hy28b,<param>=<val>
|
||||||
|
Params: speed Display SPI bus speed
|
||||||
|
|
||||||
|
rotate Display rotation {0,90,180,270}
|
||||||
|
|
||||||
|
fps Delay between frame updates
|
||||||
|
|
||||||
|
debug Debug output level {0-7}
|
||||||
|
|
||||||
|
xohms Touchpanel sensitivity (X-plate resistance)
|
||||||
|
|
||||||
|
resetgpio GPIO used to reset controller
|
||||||
|
|
||||||
|
ledgpio GPIO used to control backlight
|
||||||
|
|
||||||
|
|
||||||
|
Name: i2c-gpio
|
||||||
|
Info: Adds support for software i2c controller on gpio pins
|
||||||
|
Load: dtoverlay=i2c-gpio,<param>=<val>
|
||||||
|
Params: i2c_gpio_sda GPIO used for I2C data (default "23")
|
||||||
|
|
||||||
|
i2c_gpio_scl GPIO used for I2C clock (default "24")
|
||||||
|
|
||||||
|
i2c_gpio_delay_us Clock delay in microseconds
|
||||||
|
(default "2" = ~100kHz)
|
||||||
|
|
||||||
|
|
||||||
|
Name: i2c-rtc
|
||||||
|
Info: Adds support for a number of I2C Real Time Clock devices
|
||||||
|
Load: dtoverlay=i2c-rtc,<param>=<val>
|
||||||
|
Params: ds1307 Select the DS1307 device
|
||||||
|
|
||||||
|
ds3231 Select the DS3231 device
|
||||||
|
|
||||||
|
mcp7941x Select the MCP7941x device
|
||||||
|
|
||||||
|
pcf2127 Select the PCF2127 device
|
||||||
|
|
||||||
|
pcf8523 Select the PCF8523 device
|
||||||
|
|
||||||
|
pcf8563 Select the PCF8563 device
|
||||||
|
|
||||||
|
|
||||||
|
Name: i2s-mmap
|
||||||
|
Info: Enables mmap support in the bcm2708-i2s driver
|
||||||
|
Load: dtoverlay=i2s-mmap
|
||||||
|
Params: <None>
|
||||||
|
|
||||||
|
|
||||||
|
Name: iqaudio-dac
|
||||||
|
Info: Configures the IQaudio DAC audio card
|
||||||
|
Load: dtoverlay=iqaudio-dac
|
||||||
|
Params: <None>
|
||||||
|
|
||||||
|
|
||||||
|
Name: iqaudio-dacplus
|
||||||
|
Info: Configures the IQaudio DAC+ audio card
|
||||||
|
Load: dtoverlay=iqaudio-dacplus
|
||||||
|
Params: <None>
|
||||||
|
|
||||||
|
|
||||||
|
Name: lirc-rpi
|
||||||
|
Info: Configures lirc-rpi (Linux Infrared Remote Control for Raspberry Pi)
|
||||||
|
Consult the module documentation for more details.
|
||||||
|
Load: dtoverlay=lirc-rpi,<param>=<val>
|
||||||
|
Params: gpio_out_pin GPIO for output (default "17")
|
||||||
|
|
||||||
|
gpio_in_pin GPIO for input (default "18")
|
||||||
|
|
||||||
|
gpio_in_pull Pull up/down/off on the input pin
|
||||||
|
(default "down")
|
||||||
|
|
||||||
|
sense Override the IR receive auto-detection logic:
|
||||||
|
"0" = force active-high
|
||||||
|
"1" = force active-low
|
||||||
|
"-1" = use auto-detection
|
||||||
|
(default "-1")
|
||||||
|
|
||||||
|
softcarrier Turn the software carrier "on" or "off"
|
||||||
|
(default "on")
|
||||||
|
|
||||||
|
invert "on" = invert the output pin (default "off")
|
||||||
|
|
||||||
|
debug "on" = enable additional debug messages
|
||||||
|
(default "off")
|
||||||
|
|
||||||
|
|
||||||
|
Name: mcp2515-can0
|
||||||
|
Info: Configures the MCP2515 CAN controller on spi0.0
|
||||||
|
Load: dtoverlay=mcp2515-can0,<param>=<val>
|
||||||
|
Params: oscillator Clock frequency for the CAN controller (Hz)
|
||||||
|
|
||||||
|
spimaxfrequency Maximum SPI frequence (Hz)
|
||||||
|
|
||||||
|
interrupt GPIO for interrupt signal
|
||||||
|
|
||||||
|
|
||||||
|
Name: mcp2515-can1
|
||||||
|
Info: Configures the MCP2515 CAN controller on spi0.1
|
||||||
|
Load: dtoverlay=mcp2515-can1,<param>=<val>
|
||||||
|
Params: oscillator Clock frequency for the CAN controller (Hz)
|
||||||
|
|
||||||
|
spimaxfrequency Maximum SPI frequence (Hz)
|
||||||
|
|
||||||
|
interrupt GPIO for interrupt signal
|
||||||
|
|
||||||
|
|
||||||
|
Name: mmc
|
||||||
|
Info: Selects the bcm2835-mmc SD/MMC driver, optionally with overclock
|
||||||
|
Load: dtoverlay=mmc,<param>=<val>
|
||||||
|
Params: overclock_50 Clock (in MHz) to use when the MMC framework
|
||||||
|
requests 50MHz
|
||||||
|
force_pio Disable DMA support
|
||||||
|
|
||||||
|
|
||||||
|
Name: mz61581
|
||||||
|
Info: MZ61581 display by Tontec
|
||||||
|
Load: dtoverlay=mz61581,<param>=<val>
|
||||||
|
Params: speed Display SPI bus speed
|
||||||
|
|
||||||
|
rotate Display rotation {0,90,180,270}
|
||||||
|
|
||||||
|
fps Delay between frame updates
|
||||||
|
|
||||||
|
txbuflen Transmit buffer length (default 32768)
|
||||||
|
|
||||||
|
debug Debug output level {0-7}
|
||||||
|
|
||||||
|
xohms Touchpanel sensitivity (X-plate resistance)
|
||||||
|
|
||||||
|
|
||||||
|
[ The pcf2127-rtc overlay has been deleted. See i2c-rtc. ]
|
||||||
|
|
||||||
|
|
||||||
|
[ The pcf8523-rtc overlay has been deleted. See i2c-rtc. ]
|
||||||
|
|
||||||
|
|
||||||
|
[ The pcf8563-rtc overlay has been deleted. See i2c-rtc. ]
|
||||||
|
|
||||||
|
|
||||||
|
Name: piscreen
|
||||||
|
Info: PiScreen display by OzzMaker.com
|
||||||
|
Load: dtoverlay=piscreen,<param>=<val>
|
||||||
|
Params: speed Display SPI bus speed
|
||||||
|
|
||||||
|
rotate Display rotation {0,90,180,270}
|
||||||
|
|
||||||
|
fps Delay between frame updates
|
||||||
|
|
||||||
|
debug Debug output level {0-7}
|
||||||
|
|
||||||
|
xohms Touchpanel sensitivity (X-plate resistance)
|
||||||
|
|
||||||
|
|
||||||
|
Name: piscreen2r
|
||||||
|
Info: PiScreen 2 with resistive TP display by OzzMaker.com
|
||||||
|
Load: dtoverlay=piscreen2r,<param>=<val>
|
||||||
|
Params: speed Display SPI bus speed
|
||||||
|
|
||||||
|
rotate Display rotation {0,90,180,270}
|
||||||
|
|
||||||
|
fps Delay between frame updates
|
||||||
|
|
||||||
|
debug Debug output level {0-7}
|
||||||
|
|
||||||
|
xohms Touchpanel sensitivity (X-plate resistance)
|
||||||
|
|
||||||
|
|
||||||
|
Name: pitft28-capacitive
|
||||||
|
Info: Adafruit PiTFT 2.8" capacitive touch screen
|
||||||
|
Load: dtoverlay=pitft28-capacitive,<param>=<val>
|
||||||
|
Params: speed Display SPI bus speed
|
||||||
|
|
||||||
|
rotate Display rotation {0,90,180,270}
|
||||||
|
|
||||||
|
fps Delay between frame updates
|
||||||
|
|
||||||
|
debug Debug output level {0-7}
|
||||||
|
|
||||||
|
touch-sizex Touchscreen size x (default 240)
|
||||||
|
|
||||||
|
touch-sizey Touchscreen size y (default 320)
|
||||||
|
|
||||||
|
touch-invx Touchscreen inverted x axis
|
||||||
|
|
||||||
|
touch-invy Touchscreen inverted y axis
|
||||||
|
|
||||||
|
touch-swapxy Touchscreen swapped x y axis
|
||||||
|
|
||||||
|
|
||||||
|
Name: pitft28-resistive
|
||||||
|
Info: Adafruit PiTFT 2.8" resistive touch screen
|
||||||
|
Load: dtoverlay=pitft28-resistive,<param>=<val>
|
||||||
|
Params: speed Display SPI bus speed
|
||||||
|
|
||||||
|
rotate Display rotation {0,90,180,270}
|
||||||
|
|
||||||
|
fps Delay between frame updates
|
||||||
|
|
||||||
|
debug Debug output level {0-7}
|
||||||
|
|
||||||
|
|
||||||
|
Name: pps-gpio
|
||||||
|
Info: Configures the pps-gpio (pulse-per-second time signal via GPIO).
|
||||||
|
Load: dtoverlay=pps-gpio,<param>=<val>
|
||||||
|
Params: gpiopin Input GPIO (default "18")
|
||||||
|
|
||||||
|
|
||||||
|
Name: pwm
|
||||||
|
Info: Configures a single PWM channel
|
||||||
|
Legal pin,function combinations for each channel:
|
||||||
|
PWM0: 12,4(Alt0) 18,2(Alt5) 40,4(Alt0) 52,5(Alt1)
|
||||||
|
PWM1: 13,4(Alt0) 19,2(Alt5) 41,4(Alt0) 45,4(Alt0) 53,5(Alt1)
|
||||||
|
N.B.:
|
||||||
|
1) Pin 18 is the only one available on all platforms, and
|
||||||
|
it is the one used by the I2S audio interface.
|
||||||
|
Pins 12 and 13 might be better choices on an A+, B+ or Pi2.
|
||||||
|
2) The onboard analogue audio output uses both PWM channels.
|
||||||
|
3) So be careful mixing audio and PWM.
|
||||||
|
4) Currently the clock must have been enabled and configured
|
||||||
|
by other means.
|
||||||
|
Load: dtoverlay=pwm,<param>=<val>
|
||||||
|
Params: pin Output pin (default 18) - see table
|
||||||
|
func Pin function (default 2 = Alt5) - see above
|
||||||
|
clock PWM clock frequency (informational)
|
||||||
|
|
||||||
|
|
||||||
|
Name: pwm-2chan
|
||||||
|
Info: Configures both PWM channels
|
||||||
|
Legal pin,function combinations for each channel:
|
||||||
|
PWM0: 12,4(Alt0) 18,2(Alt5) 40,4(Alt0) 52,5(Alt1)
|
||||||
|
PWM1: 13,4(Alt0) 19,2(Alt5) 41,4(Alt0) 45,4(Alt0) 53,5(Alt1)
|
||||||
|
N.B.:
|
||||||
|
1) Pin 18 is the only one available on all platforms, and
|
||||||
|
it is the one used by the I2S audio interface.
|
||||||
|
Pins 12 and 13 might be better choices on an A+, B+ or Pi2.
|
||||||
|
2) The onboard analogue audio output uses both PWM channels.
|
||||||
|
3) So be careful mixing audio and PWM.
|
||||||
|
4) Currently the clock must have been enabled and configured
|
||||||
|
by other means.
|
||||||
|
Load: dtoverlay=pwm-2chan,<param>=<val>
|
||||||
|
Params: pin Output pin (default 18) - see table
|
||||||
|
pin2 Output pin for other channel (default 19)
|
||||||
|
func Pin function (default 2 = Alt5) - see above
|
||||||
|
func2 Function for pin2 (default 2 = Alt5)
|
||||||
|
clock PWM clock frequency (informational)
|
||||||
|
|
||||||
|
|
||||||
|
Name: raspidac3
|
||||||
|
Info: Configures the RaspiDAV Rev.3x audio card
|
||||||
|
Load: dtoverlay=raspidac3
|
||||||
|
Params: <None>
|
||||||
|
|
||||||
|
|
||||||
|
Name: rpi-backlight
|
||||||
|
Info: Raspberry Pi official display backlight driver
|
||||||
|
Load: dtoverlay=rpi-backlight
|
||||||
|
Params: <None>
|
||||||
|
|
||||||
|
|
||||||
|
Name: rpi-dac
|
||||||
|
Info: Configures the RPi DAC audio card
|
||||||
|
Load: dtoverlay=rpi-dac
|
||||||
|
Params: <None>
|
||||||
|
|
||||||
|
|
||||||
|
Name: rpi-display
|
||||||
|
Info: RPi-Display - 2.8" Touch Display by Watterott
|
||||||
|
Load: dtoverlay=rpi-display,<param>=<val>
|
||||||
|
Params: speed Display SPI bus speed
|
||||||
|
|
||||||
|
rotate Display rotation {0,90,180,270}
|
||||||
|
|
||||||
|
fps Delay between frame updates
|
||||||
|
|
||||||
|
debug Debug output level {0-7}
|
||||||
|
|
||||||
|
xohms Touchpanel sensitivity (X-plate resistance)
|
||||||
|
|
||||||
|
|
||||||
|
Name: rpi-ft5406
|
||||||
|
Info: Official Raspberry Pi display touchscreen
|
||||||
|
Load: dtoverlay=rpi-ft5406
|
||||||
|
Params: <None>
|
||||||
|
|
||||||
|
|
||||||
|
Name: rpi-proto
|
||||||
|
Info: Configures the RPi Proto audio card
|
||||||
|
Load: dtoverlay=rpi-proto
|
||||||
|
Params: <None>
|
||||||
|
|
||||||
|
|
||||||
|
Name: rpi-sense
|
||||||
|
Info: Raspberry Pi Sense HAT
|
||||||
|
Load: dtoverlay=rpi-sense
|
||||||
|
Params: <None>
|
||||||
|
|
||||||
|
|
||||||
|
Name: sdhost
|
||||||
|
Info: Selects the bcm2835-sdhost SD/MMC driver, optionally with overclock
|
||||||
|
Load: dtoverlay=sdhost,<param>=<val>
|
||||||
|
Params: overclock_50 Clock (in MHz) to use when the MMC framework
|
||||||
|
requests 50MHz
|
||||||
|
|
||||||
|
force_pio Disable DMA support (default off)
|
||||||
|
|
||||||
|
pio_limit Number of blocks above which to use DMA
|
||||||
|
(default 1)
|
||||||
|
|
||||||
|
debug Enable debug output (default off)
|
||||||
|
|
||||||
|
|
||||||
|
Name: sdio
|
||||||
|
Info: Selects the bcm2835-sdhost SD/MMC driver, optionally with overclock,
|
||||||
|
and enables SDIO via GPIOs 22-27.
|
||||||
|
Load: dtoverlay=sdio,<param>=<val>
|
||||||
|
Params: overclock_50 Clock (in MHz) to use when the MMC framework
|
||||||
|
requests 50MHz
|
||||||
|
|
||||||
|
force_pio Disable DMA support (default off)
|
||||||
|
|
||||||
|
pio_limit Number of blocks above which to use DMA
|
||||||
|
(default 1)
|
||||||
|
|
||||||
|
debug Enable debug output (default off)
|
||||||
|
|
||||||
|
poll_once Disable SDIO-device polling every second
|
||||||
|
(default on: polling once at boot-time)
|
||||||
|
|
||||||
|
|
||||||
|
Name: smi
|
||||||
|
Info: Enables the Secondary Memory Interface peripheral. Uses GPIOs 2-25!
|
||||||
|
Load: dtoverlay=smi
|
||||||
|
Params: <None>
|
||||||
|
|
||||||
|
|
||||||
|
Name: smi-dev
|
||||||
|
Info: Enables the userspace interface for the SMI driver
|
||||||
|
Load: dtoverlay=smi-dev
|
||||||
|
Params: <None>
|
||||||
|
|
||||||
|
|
||||||
|
Name: smi-nand
|
||||||
|
Info: Enables access to NAND flash via the SMI interface
|
||||||
|
Load: dtoverlay=smi-nand
|
||||||
|
Params: <None>
|
||||||
|
|
||||||
|
|
||||||
|
Name: spi-gpio35-39
|
||||||
|
Info: move SPI function block to GPIO 35 to 39
|
||||||
|
Load: dtoverlay=spi-gpio35-39
|
||||||
|
Params: <None>
|
||||||
|
|
||||||
|
|
||||||
|
Name: tinylcd35
|
||||||
|
Info: 3.5" Color TFT Display by www.tinylcd.com
|
||||||
|
Options: Touch, RTC, keypad
|
||||||
|
Load: dtoverlay=tinylcd35,<param>=<val>
|
||||||
|
Params: speed Display SPI bus speed
|
||||||
|
|
||||||
|
rotate Display rotation {0,90,180,270}
|
||||||
|
|
||||||
|
fps Delay between frame updates
|
||||||
|
|
||||||
|
debug Debug output level {0-7}
|
||||||
|
|
||||||
|
touch Enable touch panel
|
||||||
|
|
||||||
|
touchgpio Touch controller IRQ GPIO
|
||||||
|
|
||||||
|
xohms Touchpanel: Resistance of X-plate in ohms
|
||||||
|
|
||||||
|
rtc-pcf PCF8563 Real Time Clock
|
||||||
|
|
||||||
|
rtc-ds DS1307 Real Time Clock
|
||||||
|
|
||||||
|
keypad Enable keypad
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
Display with touchpanel, PCF8563 RTC and keypad:
|
||||||
|
dtoverlay=tinylcd35,touch,rtc-pcf,keypad
|
||||||
|
Old touch display:
|
||||||
|
dtoverlay=tinylcd35,touch,touchgpio=3
|
||||||
|
|
||||||
|
|
||||||
|
Name: uart1
|
||||||
|
Info: Enable uart1 in place of uart0
|
||||||
|
Load: dtoverlay=uart1,<param>=<val>
|
||||||
|
Params: txd1_pin GPIO pin for TXD1 (14, 32 or 40 - default 14)
|
||||||
|
|
||||||
|
rxd1_pin GPIO pin for RXD1 (15, 33 or 41 - default 15)
|
||||||
|
|
||||||
|
|
||||||
|
Name: vc4-kms-v3d
|
||||||
|
Info: Enable Eric Anholt's DRM VC4 HDMI/HVS/V3D driver. Running startx or
|
||||||
|
booting to GUI while this overlay is in use will cause interesting
|
||||||
|
lockups.
|
||||||
|
Load: dtoverlay=vc4-kms-v3d
|
||||||
|
Params: <None>
|
||||||
|
|
||||||
|
|
||||||
|
Name: vga666
|
||||||
|
Info: Overlay for the Fen Logic VGA666 board
|
||||||
|
This uses GPIOs 2-21 (so no I2C), and activates the output 2-3 seconds
|
||||||
|
after the kernel has started.
|
||||||
|
Load: dtoverlay=vga666
|
||||||
|
Params: <None>
|
||||||
|
|
||||||
|
|
||||||
|
Name: w1-gpio
|
||||||
|
Info: Configures the w1-gpio Onewire interface module.
|
||||||
|
Use this overlay if you *don't* need a GPIO to drive an external pullup.
|
||||||
|
Load: dtoverlay=w1-gpio,<param>=<val>
|
||||||
|
Params: gpiopin GPIO for I/O (default "4")
|
||||||
|
|
||||||
|
pullup Non-zero, "on", or "y" to enable the parasitic
|
||||||
|
power (2-wire, power-on-data) feature
|
||||||
|
|
||||||
|
|
||||||
|
Name: w1-gpio-pullup
|
||||||
|
Info: Configures the w1-gpio Onewire interface module.
|
||||||
|
Use this overlay if you *do* need a GPIO to drive an external pullup.
|
||||||
|
Load: dtoverlay=w1-gpio-pullup,<param>=<val>
|
||||||
|
Params: gpiopin GPIO for I/O (default "4")
|
||||||
|
|
||||||
|
pullup Non-zero, "on", or "y" to enable the parasitic
|
||||||
|
power (2-wire, power-on-data) feature
|
||||||
|
|
||||||
|
extpullup GPIO for external pullup (default "5")
|
||||||
|
|
||||||
|
|
||||||
|
Troubleshooting
|
||||||
|
===============
|
||||||
|
|
||||||
|
If you are experiencing problems that you think are DT-related, enable DT
|
||||||
|
diagnostic output by adding this to /boot/config.txt:
|
||||||
|
|
||||||
|
dtdebug=on
|
||||||
|
|
||||||
|
and rebooting. Then run:
|
||||||
|
|
||||||
|
sudo vcdbg log msg
|
||||||
|
|
||||||
|
and look for relevant messages.
|
||||||
|
|
||||||
|
Further reading
|
||||||
|
===============
|
||||||
|
|
||||||
|
This is only meant to be a quick introduction to the subject of Device Tree on
|
||||||
|
Raspberry Pi. There is a more complete explanation here:
|
||||||
|
|
||||||
|
http://www.raspberrypi.org/documentation/configuration/device-tree.md
|
||||||
83
arch/arm/boot/dts/overlays/ads7846-overlay.dts
Normal file
83
arch/arm/boot/dts/overlays/ads7846-overlay.dts
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
/*
|
||||||
|
* Generic Device Tree overlay for the ADS7846 touch controller
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2835", "brcm,bcm2708", "brcm,bcm2709";
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target = <&spi0>;
|
||||||
|
__overlay__ {
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
spidev@0{
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
spidev@1{
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@1 {
|
||||||
|
target = <&gpio>;
|
||||||
|
__overlay__ {
|
||||||
|
ads7846_pins: ads7846_pins {
|
||||||
|
brcm,pins = <255>; /* illegal default value */
|
||||||
|
brcm,function = <0>; /* in */
|
||||||
|
brcm,pull = <0>; /* none */
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@2 {
|
||||||
|
target = <&spi0>;
|
||||||
|
__overlay__ {
|
||||||
|
/* needed to avoid dtc warning */
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
ads7846: ads7846@1 {
|
||||||
|
compatible = "ti,ads7846";
|
||||||
|
reg = <1>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&ads7846_pins>;
|
||||||
|
|
||||||
|
spi-max-frequency = <2000000>;
|
||||||
|
interrupts = <255 2>; /* high-to-low edge triggered */
|
||||||
|
interrupt-parent = <&gpio>;
|
||||||
|
pendown-gpio = <&gpio 255 0>;
|
||||||
|
|
||||||
|
/* driver defaults */
|
||||||
|
ti,x-min = /bits/ 16 <0>;
|
||||||
|
ti,y-min = /bits/ 16 <0>;
|
||||||
|
ti,x-max = /bits/ 16 <0x0FFF>;
|
||||||
|
ti,y-max = /bits/ 16 <0x0FFF>;
|
||||||
|
ti,pressure-min = /bits/ 16 <0>;
|
||||||
|
ti,pressure-max = /bits/ 16 <0xFFFF>;
|
||||||
|
ti,x-plate-ohms = /bits/ 16 <400>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
__overrides__ {
|
||||||
|
cs = <&ads7846>,"reg:0";
|
||||||
|
speed = <&ads7846>,"spi-max-frequency:0";
|
||||||
|
penirq = <&ads7846_pins>,"brcm,pins:0", /* REQUIRED */
|
||||||
|
<&ads7846>,"interrupts:0",
|
||||||
|
<&ads7846>,"pendown-gpio:4";
|
||||||
|
penirq_pull = <&ads7846_pins>,"brcm,pull:0";
|
||||||
|
swapxy = <&ads7846>,"ti,swap-xy?";
|
||||||
|
xmin = <&ads7846>,"ti,x-min;0";
|
||||||
|
ymin = <&ads7846>,"ti,y-min;0";
|
||||||
|
xmax = <&ads7846>,"ti,x-max;0";
|
||||||
|
ymax = <&ads7846>,"ti,y-max;0";
|
||||||
|
pmin = <&ads7846>,"ti,pressure-min;0";
|
||||||
|
pmax = <&ads7846>,"ti,pressure-max;0";
|
||||||
|
xohms = <&ads7846>,"ti,x-plate-ohms;0";
|
||||||
|
};
|
||||||
|
};
|
||||||
54
arch/arm/boot/dts/overlays/at86rf233-overlay.dts
Normal file
54
arch/arm/boot/dts/overlays/at86rf233-overlay.dts
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/* Overlay for Atmel AT86RF233 IEEE 802.15.4 WPAN transceiver on spi0.0 */
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2835", "brcm,bcm2836", "brcm,bcm2708", "brcm,bcm2709";
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target = <&spi0>;
|
||||||
|
__overlay__ {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
spidev@0{
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
lowpan0: at86rf233@0 {
|
||||||
|
compatible = "atmel,at86rf233";
|
||||||
|
reg = <0>;
|
||||||
|
interrupt-parent = <&gpio>;
|
||||||
|
interrupts = <23 4>; /* active high */
|
||||||
|
reset-gpio = <&gpio 24 1>;
|
||||||
|
sleep-gpio = <&gpio 25 1>;
|
||||||
|
spi-max-frequency = <6000000>;
|
||||||
|
xtal-trim = /bits/ 8 <0xf>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@1 {
|
||||||
|
target = <&gpio>;
|
||||||
|
__overlay__ {
|
||||||
|
lowpan0_pins: lowpan0_pins {
|
||||||
|
brcm,pins = <23 24 25>;
|
||||||
|
brcm,function = <0 1 1>; /* in out out */
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
__overrides__ {
|
||||||
|
interrupt = <&lowpan0>, "interrupts:0",
|
||||||
|
<&lowpan0_pins>, "brcm,pins:0";
|
||||||
|
reset = <&lowpan0>, "reset-gpio:4",
|
||||||
|
<&lowpan0_pins>, "brcm,pins:4";
|
||||||
|
sleep = <&lowpan0>, "sleep-gpio:4",
|
||||||
|
<&lowpan0_pins>, "brcm,pins:8";
|
||||||
|
speed = <&lowpan0>, "spi-max-frequency:0";
|
||||||
|
trim = <&lowpan0>, "xtal-trim.0";
|
||||||
|
};
|
||||||
|
};
|
||||||
23
arch/arm/boot/dts/overlays/bmp085_i2c-sensor-overlay.dts
Normal file
23
arch/arm/boot/dts/overlays/bmp085_i2c-sensor-overlay.dts
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
// Definitions for BMP085/BMP180 digital barometric pressure and temperature sensors from Bosch Sensortec
|
||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2708";
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target = <&i2c_arm>;
|
||||||
|
__overlay__ {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
bmp085@77 {
|
||||||
|
compatible = "bosch,bmp085";
|
||||||
|
reg = <0x77>;
|
||||||
|
default-oversampling = <3>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
39
arch/arm/boot/dts/overlays/dht11-overlay.dts
Normal file
39
arch/arm/boot/dts/overlays/dht11-overlay.dts
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
/*
|
||||||
|
* Overlay for the DHT11/21/22 humidity/temperature sensor modules.
|
||||||
|
*/
|
||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2708";
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target-path = "/";
|
||||||
|
__overlay__ {
|
||||||
|
|
||||||
|
dht11: dht11@0 {
|
||||||
|
compatible = "dht11";
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&dht11_pins>;
|
||||||
|
gpios = <&gpio 4 0>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@1 {
|
||||||
|
target = <&gpio>;
|
||||||
|
__overlay__ {
|
||||||
|
dht11_pins: dht11_pins {
|
||||||
|
brcm,pins = <4>;
|
||||||
|
brcm,function = <0>; // in
|
||||||
|
brcm,pull = <0>; // off
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
__overrides__ {
|
||||||
|
gpiopin = <&dht11_pins>,"brcm,pins:0",
|
||||||
|
<&dht11>,"gpios:4";
|
||||||
|
};
|
||||||
|
};
|
||||||
50
arch/arm/boot/dts/overlays/enc28j60-overlay.dts
Normal file
50
arch/arm/boot/dts/overlays/enc28j60-overlay.dts
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
// Overlay for the Microchip ENC28J60 Ethernet Controller
|
||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2708";
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target = <&spi0>;
|
||||||
|
__overlay__ {
|
||||||
|
/* needed to avoid dtc warning */
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
spidev@0{
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
eth1: enc28j60@0{
|
||||||
|
compatible = "microchip,enc28j60";
|
||||||
|
reg = <0>; /* CE0 */
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <ð1_pins>;
|
||||||
|
interrupt-parent = <&gpio>;
|
||||||
|
interrupts = <25 0x2>; /* falling edge */
|
||||||
|
spi-max-frequency = <12000000>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@1 {
|
||||||
|
target = <&gpio>;
|
||||||
|
__overlay__ {
|
||||||
|
eth1_pins: eth1_pins {
|
||||||
|
brcm,pins = <25>;
|
||||||
|
brcm,function = <0>; /* in */
|
||||||
|
brcm,pull = <0>; /* none */
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
__overrides__ {
|
||||||
|
int_pin = <ð1>, "interrupts:0",
|
||||||
|
<ð1_pins>, "brcm,pins:0";
|
||||||
|
speed = <ð1>, "spi-max-frequency:0";
|
||||||
|
};
|
||||||
|
};
|
||||||
45
arch/arm/boot/dts/overlays/gpio-ir-overlay.dts
Normal file
45
arch/arm/boot/dts/overlays/gpio-ir-overlay.dts
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
// Definitions for ir-gpio module
|
||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2708";
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target-path = "/";
|
||||||
|
__overlay__ {
|
||||||
|
gpio_ir: ir-receiver {
|
||||||
|
compatible = "gpio-ir-receiver";
|
||||||
|
|
||||||
|
// pin number, high or low
|
||||||
|
gpios = <&gpio 18 1>;
|
||||||
|
|
||||||
|
// parameter for keymap name
|
||||||
|
linux,rc-map-name = "rc-rc6-mce";
|
||||||
|
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@1 {
|
||||||
|
target = <&gpio>;
|
||||||
|
__overlay__ {
|
||||||
|
gpio_ir_pins: gpio_ir_pins {
|
||||||
|
brcm,pins = <18>; // pin 18
|
||||||
|
brcm,function = <0>; // in
|
||||||
|
brcm,pull = <1>; // down
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
__overrides__ {
|
||||||
|
// parameters
|
||||||
|
gpio_pin = <&gpio_ir>,"gpios:4",
|
||||||
|
<&gpio_ir_pins>,"brcm,pins:0",
|
||||||
|
<&gpio_ir_pins>,"brcm,pull:0"; // pin number
|
||||||
|
gpio_pull = <&gpio_ir_pins>,"brcm,pull:0"; // pull-up/down state
|
||||||
|
|
||||||
|
rc-map-name = <&gpio_ir>,"linux,rc-map-name"; // default rc map
|
||||||
|
};
|
||||||
|
};
|
||||||
34
arch/arm/boot/dts/overlays/gpio-poweroff-overlay.dts
Normal file
34
arch/arm/boot/dts/overlays/gpio-poweroff-overlay.dts
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
// Definitions for gpio-poweroff module
|
||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2708";
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target-path = "/";
|
||||||
|
__overlay__ {
|
||||||
|
power_ctrl: power_ctrl {
|
||||||
|
compatible = "gpio-poweroff";
|
||||||
|
gpios = <&gpio 26 0>;
|
||||||
|
force;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@1 {
|
||||||
|
target = <&gpio>;
|
||||||
|
__overlay__ {
|
||||||
|
power_ctrl_pins: power_ctrl_pins {
|
||||||
|
brcm,pins = <26>;
|
||||||
|
brcm,function = <1>; // out
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
__overrides__ {
|
||||||
|
gpiopin = <&power_ctrl>,"gpios:4",
|
||||||
|
<&power_ctrl_pins>,"brcm,pins:0";
|
||||||
|
active_low = <&power_ctrl>,"gpios:8";
|
||||||
|
};
|
||||||
|
};
|
||||||
39
arch/arm/boot/dts/overlays/hifiberry-amp-overlay.dts
Normal file
39
arch/arm/boot/dts/overlays/hifiberry-amp-overlay.dts
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
// Definitions for HiFiBerry Amp/Amp+
|
||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2708";
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target = <&sound>;
|
||||||
|
__overlay__ {
|
||||||
|
compatible = "hifiberry,hifiberry-amp";
|
||||||
|
i2s-controller = <&i2s>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@1 {
|
||||||
|
target = <&i2s>;
|
||||||
|
__overlay__ {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@2 {
|
||||||
|
target = <&i2c1>;
|
||||||
|
__overlay__ {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
tas5713@1b {
|
||||||
|
#sound-dai-cells = <0>;
|
||||||
|
compatible = "ti,tas5713";
|
||||||
|
reg = <0x1b>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
34
arch/arm/boot/dts/overlays/hifiberry-dac-overlay.dts
Normal file
34
arch/arm/boot/dts/overlays/hifiberry-dac-overlay.dts
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
// Definitions for HiFiBerry DAC
|
||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2708";
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target = <&sound>;
|
||||||
|
__overlay__ {
|
||||||
|
compatible = "hifiberry,hifiberry-dac";
|
||||||
|
i2s-controller = <&i2s>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@1 {
|
||||||
|
target = <&i2s>;
|
||||||
|
__overlay__ {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@2 {
|
||||||
|
target-path = "/";
|
||||||
|
__overlay__ {
|
||||||
|
pcm5102a-codec {
|
||||||
|
#sound-dai-cells = <0>;
|
||||||
|
compatible = "ti,pcm5102a";
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
50
arch/arm/boot/dts/overlays/hifiberry-dacplus-overlay.dts
Normal file
50
arch/arm/boot/dts/overlays/hifiberry-dacplus-overlay.dts
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
// Definitions for HiFiBerry DAC+
|
||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2708";
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target-path = "/clocks";
|
||||||
|
__overlay__ {
|
||||||
|
dacpro_osc: dacpro_osc {
|
||||||
|
compatible = "hifiberry,dacpro-clk";
|
||||||
|
#clock-cells = <0>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@1 {
|
||||||
|
target = <&sound>;
|
||||||
|
__overlay__ {
|
||||||
|
compatible = "hifiberry,hifiberry-dacplus";
|
||||||
|
i2s-controller = <&i2s>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@2 {
|
||||||
|
target = <&i2s>;
|
||||||
|
__overlay__ {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@3 {
|
||||||
|
target = <&i2c1>;
|
||||||
|
__overlay__ {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
pcm5122@4d {
|
||||||
|
#sound-dai-cells = <0>;
|
||||||
|
compatible = "ti,pcm5122";
|
||||||
|
reg = <0x4d>;
|
||||||
|
clocks = <&dacpro_osc>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
39
arch/arm/boot/dts/overlays/hifiberry-digi-overlay.dts
Normal file
39
arch/arm/boot/dts/overlays/hifiberry-digi-overlay.dts
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
// Definitions for HiFiBerry Digi
|
||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2708";
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target = <&sound>;
|
||||||
|
__overlay__ {
|
||||||
|
compatible = "hifiberry,hifiberry-digi";
|
||||||
|
i2s-controller = <&i2s>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@1 {
|
||||||
|
target = <&i2s>;
|
||||||
|
__overlay__ {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@2 {
|
||||||
|
target = <&i2c1>;
|
||||||
|
__overlay__ {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
wm8804@3b {
|
||||||
|
#sound-dai-cells = <0>;
|
||||||
|
compatible = "wlf,wm8804";
|
||||||
|
reg = <0x3b>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
87
arch/arm/boot/dts/overlays/hy28a-overlay.dts
Normal file
87
arch/arm/boot/dts/overlays/hy28a-overlay.dts
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
/*
|
||||||
|
* Device Tree overlay for HY28A display
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2835", "brcm,bcm2708", "brcm,bcm2709";
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target = <&spi0>;
|
||||||
|
__overlay__ {
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
spidev@0{
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
spidev@1{
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@1 {
|
||||||
|
target = <&gpio>;
|
||||||
|
__overlay__ {
|
||||||
|
hy28a_pins: hy28a_pins {
|
||||||
|
brcm,pins = <17 25 18>;
|
||||||
|
brcm,function = <0 1 1>; /* in out out */
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@2 {
|
||||||
|
target = <&spi0>;
|
||||||
|
__overlay__ {
|
||||||
|
/* needed to avoid dtc warning */
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
hy28a: hy28a@0{
|
||||||
|
compatible = "ilitek,ili9320";
|
||||||
|
reg = <0>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&hy28a_pins>;
|
||||||
|
|
||||||
|
spi-max-frequency = <32000000>;
|
||||||
|
spi-cpol;
|
||||||
|
spi-cpha;
|
||||||
|
rotate = <270>;
|
||||||
|
bgr;
|
||||||
|
fps = <50>;
|
||||||
|
buswidth = <8>;
|
||||||
|
startbyte = <0x70>;
|
||||||
|
reset-gpios = <&gpio 25 0>;
|
||||||
|
led-gpios = <&gpio 18 1>;
|
||||||
|
debug = <0>;
|
||||||
|
};
|
||||||
|
|
||||||
|
hy28a_ts: hy28a-ts@1 {
|
||||||
|
compatible = "ti,ads7846";
|
||||||
|
reg = <1>;
|
||||||
|
|
||||||
|
spi-max-frequency = <2000000>;
|
||||||
|
interrupts = <17 2>; /* high-to-low edge triggered */
|
||||||
|
interrupt-parent = <&gpio>;
|
||||||
|
pendown-gpio = <&gpio 17 0>;
|
||||||
|
ti,x-plate-ohms = /bits/ 16 <100>;
|
||||||
|
ti,pressure-max = /bits/ 16 <255>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
__overrides__ {
|
||||||
|
speed = <&hy28a>,"spi-max-frequency:0";
|
||||||
|
rotate = <&hy28a>,"rotate:0";
|
||||||
|
fps = <&hy28a>,"fps:0";
|
||||||
|
debug = <&hy28a>,"debug:0";
|
||||||
|
xohms = <&hy28a_ts>,"ti,x-plate-ohms;0";
|
||||||
|
resetgpio = <&hy28a>,"reset-gpios:4",
|
||||||
|
<&hy28a_pins>, "brcm,pins:1";
|
||||||
|
ledgpio = <&hy28a>,"led-gpios:4",
|
||||||
|
<&hy28a_pins>, "brcm,pins:2";
|
||||||
|
};
|
||||||
|
};
|
||||||
142
arch/arm/boot/dts/overlays/hy28b-overlay.dts
Normal file
142
arch/arm/boot/dts/overlays/hy28b-overlay.dts
Normal file
@@ -0,0 +1,142 @@
|
|||||||
|
/*
|
||||||
|
* Device Tree overlay for HY28b display shield by Texy
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2835", "brcm,bcm2708", "brcm,bcm2709";
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target = <&spi0>;
|
||||||
|
__overlay__ {
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
spidev@0{
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
spidev@1{
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@1 {
|
||||||
|
target = <&gpio>;
|
||||||
|
__overlay__ {
|
||||||
|
hy28b_pins: hy28b_pins {
|
||||||
|
brcm,pins = <17 25 18>;
|
||||||
|
brcm,function = <0 1 1>; /* in out out */
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@2 {
|
||||||
|
target = <&spi0>;
|
||||||
|
__overlay__ {
|
||||||
|
/* needed to avoid dtc warning */
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
hy28b: hy28b@0{
|
||||||
|
compatible = "ilitek,ili9325";
|
||||||
|
reg = <0>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&hy28b_pins>;
|
||||||
|
|
||||||
|
spi-max-frequency = <48000000>;
|
||||||
|
spi-cpol;
|
||||||
|
spi-cpha;
|
||||||
|
rotate = <270>;
|
||||||
|
bgr;
|
||||||
|
fps = <50>;
|
||||||
|
buswidth = <8>;
|
||||||
|
startbyte = <0x70>;
|
||||||
|
reset-gpios = <&gpio 25 0>;
|
||||||
|
led-gpios = <&gpio 18 1>;
|
||||||
|
|
||||||
|
gamma = "04 1F 4 7 7 0 7 7 6 0\n0F 00 1 7 4 0 0 0 6 7";
|
||||||
|
|
||||||
|
init = <0x10000e7 0x0010
|
||||||
|
0x1000000 0x0001
|
||||||
|
0x1000001 0x0100
|
||||||
|
0x1000002 0x0700
|
||||||
|
0x1000003 0x1030
|
||||||
|
0x1000004 0x0000
|
||||||
|
0x1000008 0x0207
|
||||||
|
0x1000009 0x0000
|
||||||
|
0x100000a 0x0000
|
||||||
|
0x100000c 0x0001
|
||||||
|
0x100000d 0x0000
|
||||||
|
0x100000f 0x0000
|
||||||
|
0x1000010 0x0000
|
||||||
|
0x1000011 0x0007
|
||||||
|
0x1000012 0x0000
|
||||||
|
0x1000013 0x0000
|
||||||
|
0x2000032
|
||||||
|
0x1000010 0x1590
|
||||||
|
0x1000011 0x0227
|
||||||
|
0x2000032
|
||||||
|
0x1000012 0x009c
|
||||||
|
0x2000032
|
||||||
|
0x1000013 0x1900
|
||||||
|
0x1000029 0x0023
|
||||||
|
0x100002b 0x000e
|
||||||
|
0x2000032
|
||||||
|
0x1000020 0x0000
|
||||||
|
0x1000021 0x0000
|
||||||
|
0x2000032
|
||||||
|
0x1000050 0x0000
|
||||||
|
0x1000051 0x00ef
|
||||||
|
0x1000052 0x0000
|
||||||
|
0x1000053 0x013f
|
||||||
|
0x1000060 0xa700
|
||||||
|
0x1000061 0x0001
|
||||||
|
0x100006a 0x0000
|
||||||
|
0x1000080 0x0000
|
||||||
|
0x1000081 0x0000
|
||||||
|
0x1000082 0x0000
|
||||||
|
0x1000083 0x0000
|
||||||
|
0x1000084 0x0000
|
||||||
|
0x1000085 0x0000
|
||||||
|
0x1000090 0x0010
|
||||||
|
0x1000092 0x0000
|
||||||
|
0x1000093 0x0003
|
||||||
|
0x1000095 0x0110
|
||||||
|
0x1000097 0x0000
|
||||||
|
0x1000098 0x0000
|
||||||
|
0x1000007 0x0133
|
||||||
|
0x1000020 0x0000
|
||||||
|
0x1000021 0x0000
|
||||||
|
0x2000064>;
|
||||||
|
debug = <0>;
|
||||||
|
};
|
||||||
|
|
||||||
|
hy28b_ts: hy28b-ts@1 {
|
||||||
|
compatible = "ti,ads7846";
|
||||||
|
reg = <1>;
|
||||||
|
|
||||||
|
spi-max-frequency = <2000000>;
|
||||||
|
interrupts = <17 2>; /* high-to-low edge triggered */
|
||||||
|
interrupt-parent = <&gpio>;
|
||||||
|
pendown-gpio = <&gpio 17 0>;
|
||||||
|
ti,x-plate-ohms = /bits/ 16 <100>;
|
||||||
|
ti,pressure-max = /bits/ 16 <255>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
__overrides__ {
|
||||||
|
speed = <&hy28b>,"spi-max-frequency:0";
|
||||||
|
rotate = <&hy28b>,"rotate:0";
|
||||||
|
fps = <&hy28b>,"fps:0";
|
||||||
|
debug = <&hy28b>,"debug:0";
|
||||||
|
xohms = <&hy28b_ts>,"ti,x-plate-ohms;0";
|
||||||
|
resetgpio = <&hy28b>,"reset-gpios:4",
|
||||||
|
<&hy28b_pins>, "brcm,pins:1";
|
||||||
|
ledgpio = <&hy28b>,"led-gpios:4",
|
||||||
|
<&hy28b_pins>, "brcm,pins:2";
|
||||||
|
};
|
||||||
|
};
|
||||||
28
arch/arm/boot/dts/overlays/i2c-gpio-overlay.dts
Normal file
28
arch/arm/boot/dts/overlays/i2c-gpio-overlay.dts
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
// Overlay for i2c_gpio bitbanging host bus.
|
||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2708";
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target-path = "/";
|
||||||
|
__overlay__ {
|
||||||
|
i2c_gpio: i2c@0 {
|
||||||
|
compatible = "i2c-gpio";
|
||||||
|
gpios = <&gpio 23 0 /* sda */
|
||||||
|
&gpio 24 0 /* scl */
|
||||||
|
>;
|
||||||
|
i2c-gpio,delay-us = <2>; /* ~100 kHz */
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
__overrides__ {
|
||||||
|
i2c_gpio_sda = <&i2c_gpio>,"gpios:4";
|
||||||
|
i2c_gpio_scl = <&i2c_gpio>,"gpios:16";
|
||||||
|
i2c_gpio_delay_us = <&i2c_gpio>,"i2c-gpio,delay-us:0";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
55
arch/arm/boot/dts/overlays/i2c-rtc-overlay.dts
Normal file
55
arch/arm/boot/dts/overlays/i2c-rtc-overlay.dts
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
// Definitions for several I2C based Real Time Clocks
|
||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2708";
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target = <&i2c_arm>;
|
||||||
|
__overlay__ {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
ds1307: ds1307@68 {
|
||||||
|
compatible = "maxim,ds1307";
|
||||||
|
reg = <0x68>;
|
||||||
|
status = "disable";
|
||||||
|
};
|
||||||
|
mcp7941x: mcp7941x@6f {
|
||||||
|
compatible = "microchip,mcp7941x";
|
||||||
|
reg = <0x6f>;
|
||||||
|
status = "disable";
|
||||||
|
};
|
||||||
|
ds3231: ds3231@68 {
|
||||||
|
compatible = "maxim,ds3231";
|
||||||
|
reg = <0x68>;
|
||||||
|
status = "disable";
|
||||||
|
};
|
||||||
|
pcf2127: pcf2127@51 {
|
||||||
|
compatible = "nxp,pcf2127";
|
||||||
|
reg = <0x51>;
|
||||||
|
status = "disable";
|
||||||
|
};
|
||||||
|
pcf8523: pcf8523@68 {
|
||||||
|
compatible = "nxp,pcf8523";
|
||||||
|
reg = <0x68>;
|
||||||
|
status = "disable";
|
||||||
|
};
|
||||||
|
pcf8563: pcf8563@51 {
|
||||||
|
compatible = "nxp,pcf8563";
|
||||||
|
reg = <0x51>;
|
||||||
|
status = "disable";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
__overrides__ {
|
||||||
|
ds1307 = <&ds1307>,"status";
|
||||||
|
ds3231 = <&ds3231>,"status";
|
||||||
|
mcp7941x = <&mcp7941x>,"status";
|
||||||
|
pcf2127 = <&pcf2127>,"status";
|
||||||
|
pcf8523 = <&pcf8523>,"status";
|
||||||
|
pcf8563 = <&pcf8563>,"status";
|
||||||
|
};
|
||||||
|
};
|
||||||
13
arch/arm/boot/dts/overlays/i2s-mmap-overlay.dts
Normal file
13
arch/arm/boot/dts/overlays/i2s-mmap-overlay.dts
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/{
|
||||||
|
compatible = "brcm,bcm2708";
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target = <&i2s>;
|
||||||
|
__overlay__ {
|
||||||
|
brcm,enable-mmap;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
39
arch/arm/boot/dts/overlays/iqaudio-dac-overlay.dts
Normal file
39
arch/arm/boot/dts/overlays/iqaudio-dac-overlay.dts
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
// Definitions for IQaudIO DAC
|
||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2708";
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target = <&sound>;
|
||||||
|
__overlay__ {
|
||||||
|
compatible = "iqaudio,iqaudio-dac";
|
||||||
|
i2s-controller = <&i2s>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@1 {
|
||||||
|
target = <&i2s>;
|
||||||
|
__overlay__ {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@2 {
|
||||||
|
target = <&i2c1>;
|
||||||
|
__overlay__ {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
pcm5122@4c {
|
||||||
|
#sound-dai-cells = <0>;
|
||||||
|
compatible = "ti,pcm5122";
|
||||||
|
reg = <0x4c>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
39
arch/arm/boot/dts/overlays/iqaudio-dacplus-overlay.dts
Normal file
39
arch/arm/boot/dts/overlays/iqaudio-dacplus-overlay.dts
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
// Definitions for IQaudIO DAC+
|
||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2708";
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target = <&sound>;
|
||||||
|
__overlay__ {
|
||||||
|
compatible = "iqaudio,iqaudio-dac";
|
||||||
|
i2s-controller = <&i2s>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@1 {
|
||||||
|
target = <&i2s>;
|
||||||
|
__overlay__ {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@2 {
|
||||||
|
target = <&i2c1>;
|
||||||
|
__overlay__ {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
pcm5122@4c {
|
||||||
|
#sound-dai-cells = <0>;
|
||||||
|
compatible = "ti,pcm5122";
|
||||||
|
reg = <0x4c>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
57
arch/arm/boot/dts/overlays/lirc-rpi-overlay.dts
Normal file
57
arch/arm/boot/dts/overlays/lirc-rpi-overlay.dts
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
// Definitions for lirc-rpi module
|
||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2708";
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target-path = "/";
|
||||||
|
__overlay__ {
|
||||||
|
lirc_rpi: lirc_rpi {
|
||||||
|
compatible = "rpi,lirc-rpi";
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&lirc_pins>;
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
// Override autodetection of IR receiver circuit
|
||||||
|
// (0 = active high, 1 = active low, -1 = no override )
|
||||||
|
rpi,sense = <0xffffffff>;
|
||||||
|
|
||||||
|
// Software carrier
|
||||||
|
// (0 = off, 1 = on)
|
||||||
|
rpi,softcarrier = <1>;
|
||||||
|
|
||||||
|
// Invert output
|
||||||
|
// (0 = off, 1 = on)
|
||||||
|
rpi,invert = <0>;
|
||||||
|
|
||||||
|
// Enable debugging messages
|
||||||
|
// (0 = off, 1 = on)
|
||||||
|
rpi,debug = <0>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@1 {
|
||||||
|
target = <&gpio>;
|
||||||
|
__overlay__ {
|
||||||
|
lirc_pins: lirc_pins {
|
||||||
|
brcm,pins = <17 18>;
|
||||||
|
brcm,function = <1 0>; // out in
|
||||||
|
brcm,pull = <0 1>; // off down
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
__overrides__ {
|
||||||
|
gpio_out_pin = <&lirc_pins>,"brcm,pins:0";
|
||||||
|
gpio_in_pin = <&lirc_pins>,"brcm,pins:4";
|
||||||
|
gpio_in_pull = <&lirc_pins>,"brcm,pull:4";
|
||||||
|
|
||||||
|
sense = <&lirc_rpi>,"rpi,sense:0";
|
||||||
|
softcarrier = <&lirc_rpi>,"rpi,softcarrier:0";
|
||||||
|
invert = <&lirc_rpi>,"rpi,invert:0";
|
||||||
|
debug = <&lirc_rpi>,"rpi,debug:0";
|
||||||
|
};
|
||||||
|
};
|
||||||
69
arch/arm/boot/dts/overlays/mcp2515-can0-overlay.dts
Executable file
69
arch/arm/boot/dts/overlays/mcp2515-can0-overlay.dts
Executable file
@@ -0,0 +1,69 @@
|
|||||||
|
/*
|
||||||
|
* Device tree overlay for mcp251x/can0 on spi0.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2835", "brcm,bcm2836", "brcm,bcm2708", "brcm,bcm2709";
|
||||||
|
/* disable spi-dev for spi0.0 */
|
||||||
|
fragment@0 {
|
||||||
|
target = <&spi0>;
|
||||||
|
__overlay__ {
|
||||||
|
status = "okay";
|
||||||
|
spidev@0{
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/* the interrupt pin of the can-controller */
|
||||||
|
fragment@1 {
|
||||||
|
target = <&gpio>;
|
||||||
|
__overlay__ {
|
||||||
|
can0_pins: can0_pins {
|
||||||
|
brcm,pins = <25>;
|
||||||
|
brcm,function = <0>; /* input */
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/* the clock/oscillator of the can-controller */
|
||||||
|
fragment@2 {
|
||||||
|
target-path = "/clocks";
|
||||||
|
__overlay__ {
|
||||||
|
/* external oscillator of mcp2515 on SPI0.0 */
|
||||||
|
can0_osc: can0_osc {
|
||||||
|
compatible = "fixed-clock";
|
||||||
|
#clock-cells = <0>;
|
||||||
|
clock-frequency = <16000000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/* the spi config of the can-controller itself binding everything together */
|
||||||
|
fragment@3 {
|
||||||
|
target = <&spi0>;
|
||||||
|
__overlay__ {
|
||||||
|
/* needed to avoid dtc warning */
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
can0: mcp2515@0 {
|
||||||
|
reg = <0>;
|
||||||
|
compatible = "microchip,mcp2515";
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&can0_pins>;
|
||||||
|
spi-max-frequency = <10000000>;
|
||||||
|
interrupt-parent = <&gpio>;
|
||||||
|
interrupts = <25 0x2>;
|
||||||
|
clocks = <&can0_osc>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
__overrides__ {
|
||||||
|
oscillator = <&can0_osc>,"clock-frequency:0";
|
||||||
|
spimaxfrequency = <&can0>,"spi-max-frequency:0";
|
||||||
|
interrupt = <&can0_pins>,"brcm,pins:0",<&can0>,"interrupts:0";
|
||||||
|
};
|
||||||
|
};
|
||||||
69
arch/arm/boot/dts/overlays/mcp2515-can1-overlay.dts
Normal file
69
arch/arm/boot/dts/overlays/mcp2515-can1-overlay.dts
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
/*
|
||||||
|
* Device tree overlay for mcp251x/can1 on spi0.1 edited by petit_miner
|
||||||
|
*/
|
||||||
|
|
||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2835", "brcm,bcm2836", "brcm,bcm2708", "brcm,bcm2709";
|
||||||
|
/* disable spi-dev for spi0.1 */
|
||||||
|
fragment@0 {
|
||||||
|
target = <&spi0>;
|
||||||
|
__overlay__ {
|
||||||
|
status = "okay";
|
||||||
|
spidev@1{
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/* the interrupt pin of the can-controller */
|
||||||
|
fragment@1 {
|
||||||
|
target = <&gpio>;
|
||||||
|
__overlay__ {
|
||||||
|
can1_pins: can1_pins {
|
||||||
|
brcm,pins = <25>;
|
||||||
|
brcm,function = <0>; /* input */
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/* the clock/oscillator of the can-controller */
|
||||||
|
fragment@2 {
|
||||||
|
target-path = "/clocks";
|
||||||
|
__overlay__ {
|
||||||
|
/* external oscillator of mcp2515 on spi0.1 */
|
||||||
|
can1_osc: can1_osc {
|
||||||
|
compatible = "fixed-clock";
|
||||||
|
#clock-cells = <0>;
|
||||||
|
clock-frequency = <16000000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/* the spi config of the can-controller itself binding everything together */
|
||||||
|
fragment@3 {
|
||||||
|
target = <&spi0>;
|
||||||
|
__overlay__ {
|
||||||
|
/* needed to avoid dtc warning */
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
can1: mcp2515@1 {
|
||||||
|
reg = <1>;
|
||||||
|
compatible = "microchip,mcp2515";
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&can1_pins>;
|
||||||
|
spi-max-frequency = <10000000>;
|
||||||
|
interrupt-parent = <&gpio>;
|
||||||
|
interrupts = <25 0x2>;
|
||||||
|
clocks = <&can1_osc>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
__overrides__ {
|
||||||
|
oscillator = <&can1_osc>,"clock-frequency:0";
|
||||||
|
spimaxfrequency = <&can1>,"spi-max-frequency:0";
|
||||||
|
interrupt = <&can1_pins>,"brcm,pins:0",<&can1>,"interrupts:0";
|
||||||
|
};
|
||||||
|
};
|
||||||
39
arch/arm/boot/dts/overlays/mmc-overlay.dts
Normal file
39
arch/arm/boot/dts/overlays/mmc-overlay.dts
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/{
|
||||||
|
compatible = "brcm,bcm2708";
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target = <&mmc>;
|
||||||
|
frag0: __overlay__ {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&mmc_pins>;
|
||||||
|
bus-width = <4>;
|
||||||
|
brcm,overclock-50 = <0>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@1 {
|
||||||
|
target = <&gpio>;
|
||||||
|
__overlay__ {
|
||||||
|
mmc_pins: mmc_pins {
|
||||||
|
brcm,pins = <48 49 50 51 52 53>;
|
||||||
|
brcm,function = <7>; /* alt3 */
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@2 {
|
||||||
|
target = <&sdhost>;
|
||||||
|
__overlay__ {
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
__overrides__ {
|
||||||
|
overclock_50 = <&frag0>,"brcm,overclock-50:0";
|
||||||
|
force_pio = <&frag0>,"brcm,force-pio?";
|
||||||
|
};
|
||||||
|
};
|
||||||
111
arch/arm/boot/dts/overlays/mz61581-overlay.dts
Normal file
111
arch/arm/boot/dts/overlays/mz61581-overlay.dts
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
/*
|
||||||
|
* Device Tree overlay for MZ61581-PI-EXT 2014.12.28 by Tontec
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2835", "brcm,bcm2708", "brcm,bcm2709";
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target = <&spi0>;
|
||||||
|
__overlay__ {
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
spidev@0{
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
spidev@1{
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@1 {
|
||||||
|
target = <&gpio>;
|
||||||
|
__overlay__ {
|
||||||
|
mz61581_pins: mz61581_pins {
|
||||||
|
brcm,pins = <4 15 18 25>;
|
||||||
|
brcm,function = <0 1 1 1>; /* in out out out */
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@2 {
|
||||||
|
target = <&spi0>;
|
||||||
|
__overlay__ {
|
||||||
|
/* needed to avoid dtc warning */
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
mz61581: mz61581@0{
|
||||||
|
compatible = "samsung,s6d02a1";
|
||||||
|
reg = <0>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&mz61581_pins>;
|
||||||
|
|
||||||
|
spi-max-frequency = <128000000>;
|
||||||
|
spi-cpol;
|
||||||
|
spi-cpha;
|
||||||
|
|
||||||
|
width = <320>;
|
||||||
|
height = <480>;
|
||||||
|
rotate = <270>;
|
||||||
|
bgr;
|
||||||
|
fps = <30>;
|
||||||
|
buswidth = <8>;
|
||||||
|
txbuflen = <32768>;
|
||||||
|
|
||||||
|
reset-gpios = <&gpio 15 0>;
|
||||||
|
dc-gpios = <&gpio 25 0>;
|
||||||
|
led-gpios = <&gpio 18 0>;
|
||||||
|
|
||||||
|
init = <0x10000b0 00
|
||||||
|
0x1000011
|
||||||
|
0x20000ff
|
||||||
|
0x10000b3 0x02 0x00 0x00 0x00
|
||||||
|
0x10000c0 0x13 0x3b 0x00 0x02 0x00 0x01 0x00 0x43
|
||||||
|
0x10000c1 0x08 0x16 0x08 0x08
|
||||||
|
0x10000c4 0x11 0x07 0x03 0x03
|
||||||
|
0x10000c6 0x00
|
||||||
|
0x10000c8 0x03 0x03 0x13 0x5c 0x03 0x07 0x14 0x08 0x00 0x21 0x08 0x14 0x07 0x53 0x0c 0x13 0x03 0x03 0x21 0x00
|
||||||
|
0x1000035 0x00
|
||||||
|
0x1000036 0xa0
|
||||||
|
0x100003a 0x55
|
||||||
|
0x1000044 0x00 0x01
|
||||||
|
0x10000d0 0x07 0x07 0x1d 0x03
|
||||||
|
0x10000d1 0x03 0x30 0x10
|
||||||
|
0x10000d2 0x03 0x14 0x04
|
||||||
|
0x1000029
|
||||||
|
0x100002c>;
|
||||||
|
|
||||||
|
/* This is a workaround to make sure the init sequence slows down and doesn't fail */
|
||||||
|
debug = <3>;
|
||||||
|
};
|
||||||
|
|
||||||
|
mz61581_ts: mz61581_ts@1 {
|
||||||
|
compatible = "ti,ads7846";
|
||||||
|
reg = <1>;
|
||||||
|
|
||||||
|
spi-max-frequency = <2000000>;
|
||||||
|
interrupts = <4 2>; /* high-to-low edge triggered */
|
||||||
|
interrupt-parent = <&gpio>;
|
||||||
|
pendown-gpio = <&gpio 4 0>;
|
||||||
|
|
||||||
|
ti,x-plate-ohms = /bits/ 16 <60>;
|
||||||
|
ti,pressure-max = /bits/ 16 <255>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
__overrides__ {
|
||||||
|
speed = <&mz61581>, "spi-max-frequency:0";
|
||||||
|
rotate = <&mz61581>, "rotate:0";
|
||||||
|
fps = <&mz61581>, "fps:0";
|
||||||
|
txbuflen = <&mz61581>, "txbuflen:0";
|
||||||
|
debug = <&mz61581>, "debug:0";
|
||||||
|
xohms = <&mz61581_ts>,"ti,x-plate-ohms;0";
|
||||||
|
};
|
||||||
|
};
|
||||||
96
arch/arm/boot/dts/overlays/piscreen-overlay.dts
Normal file
96
arch/arm/boot/dts/overlays/piscreen-overlay.dts
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
/*
|
||||||
|
* Device Tree overlay for PiScreen 3.5" display shield by Ozzmaker
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2835", "brcm,bcm2708", "brcm,bcm2709";
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target = <&spi0>;
|
||||||
|
__overlay__ {
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
spidev@0{
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
spidev@1{
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@1 {
|
||||||
|
target = <&gpio>;
|
||||||
|
__overlay__ {
|
||||||
|
piscreen_pins: piscreen_pins {
|
||||||
|
brcm,pins = <17 25 24 22>;
|
||||||
|
brcm,function = <0 1 1 1>; /* in out out out */
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@2 {
|
||||||
|
target = <&spi0>;
|
||||||
|
__overlay__ {
|
||||||
|
/* needed to avoid dtc warning */
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
piscreen: piscreen@0{
|
||||||
|
compatible = "ilitek,ili9486";
|
||||||
|
reg = <0>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&piscreen_pins>;
|
||||||
|
|
||||||
|
spi-max-frequency = <24000000>;
|
||||||
|
rotate = <270>;
|
||||||
|
bgr;
|
||||||
|
fps = <30>;
|
||||||
|
buswidth = <8>;
|
||||||
|
regwidth = <16>;
|
||||||
|
reset-gpios = <&gpio 25 0>;
|
||||||
|
dc-gpios = <&gpio 24 0>;
|
||||||
|
led-gpios = <&gpio 22 1>;
|
||||||
|
debug = <0>;
|
||||||
|
|
||||||
|
init = <0x10000b0 0x00
|
||||||
|
0x1000011
|
||||||
|
0x20000ff
|
||||||
|
0x100003a 0x55
|
||||||
|
0x1000036 0x28
|
||||||
|
0x10000c2 0x44
|
||||||
|
0x10000c5 0x00 0x00 0x00 0x00
|
||||||
|
0x10000e0 0x0f 0x1f 0x1c 0x0c 0x0f 0x08 0x48 0x98 0x37 0x0a 0x13 0x04 0x11 0x0d 0x00
|
||||||
|
0x10000e1 0x0f 0x32 0x2e 0x0b 0x0d 0x05 0x47 0x75 0x37 0x06 0x10 0x03 0x24 0x20 0x00
|
||||||
|
0x10000e2 0x0f 0x32 0x2e 0x0b 0x0d 0x05 0x47 0x75 0x37 0x06 0x10 0x03 0x24 0x20 0x00
|
||||||
|
0x1000011
|
||||||
|
0x1000029>;
|
||||||
|
};
|
||||||
|
|
||||||
|
piscreen_ts: piscreen-ts@1 {
|
||||||
|
compatible = "ti,ads7846";
|
||||||
|
reg = <1>;
|
||||||
|
|
||||||
|
spi-max-frequency = <2000000>;
|
||||||
|
interrupts = <17 2>; /* high-to-low edge triggered */
|
||||||
|
interrupt-parent = <&gpio>;
|
||||||
|
pendown-gpio = <&gpio 17 0>;
|
||||||
|
ti,swap-xy;
|
||||||
|
ti,x-plate-ohms = /bits/ 16 <100>;
|
||||||
|
ti,pressure-max = /bits/ 16 <255>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
__overrides__ {
|
||||||
|
speed = <&piscreen>,"spi-max-frequency:0";
|
||||||
|
rotate = <&piscreen>,"rotate:0";
|
||||||
|
fps = <&piscreen>,"fps:0";
|
||||||
|
debug = <&piscreen>,"debug:0";
|
||||||
|
xohms = <&piscreen_ts>,"ti,x-plate-ohms;0";
|
||||||
|
};
|
||||||
|
};
|
||||||
100
arch/arm/boot/dts/overlays/piscreen2r-overlay.dts
Normal file
100
arch/arm/boot/dts/overlays/piscreen2r-overlay.dts
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
/*
|
||||||
|
* Device Tree overlay for PiScreen2 3.5" TFT with resistive touch by Ozzmaker.com
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2835", "brcm,bcm2708", "brcm,bcm2709";
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target = <&spi0>;
|
||||||
|
__overlay__ {
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
spidev@0{
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
spidev@1{
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@1 {
|
||||||
|
target = <&gpio>;
|
||||||
|
__overlay__ {
|
||||||
|
piscreen2_pins: piscreen2_pins {
|
||||||
|
brcm,pins = <17 25 24 22>;
|
||||||
|
brcm,function = <0 1 1 1>; /* in out out out */
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@2 {
|
||||||
|
target = <&spi0>;
|
||||||
|
__overlay__ {
|
||||||
|
/* needed to avoid dtc warning */
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
piscreen2: piscreen2@0{
|
||||||
|
compatible = "ilitek,ili9486";
|
||||||
|
reg = <0>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&piscreen2_pins>;
|
||||||
|
bgr;
|
||||||
|
spi-max-frequency = <64000000>;
|
||||||
|
rotate = <90>;
|
||||||
|
fps = <30>;
|
||||||
|
buswidth = <8>;
|
||||||
|
regwidth = <16>;
|
||||||
|
txbuflen = <32768>;
|
||||||
|
reset-gpios = <&gpio 25 0>;
|
||||||
|
dc-gpios = <&gpio 24 0>;
|
||||||
|
led-gpios = <&gpio 22 1>;
|
||||||
|
debug = <0>;
|
||||||
|
|
||||||
|
init = <0x10000b0 0x00
|
||||||
|
0x1000011
|
||||||
|
0x20000ff
|
||||||
|
0x100003a 0x55
|
||||||
|
0x1000036 0x28
|
||||||
|
0x10000c0 0x11 0x09
|
||||||
|
0x10000c1 0x41
|
||||||
|
0x10000c5 0x00 0x00 0x00 0x00
|
||||||
|
0x10000b6 0x00 0x02
|
||||||
|
0x10000f7 0xa9 0x51 0x2c 0x2
|
||||||
|
0x10000be 0x00 0x04
|
||||||
|
0x10000e9 0x00
|
||||||
|
0x1000011
|
||||||
|
0x1000029>;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
piscreen2_ts: piscreen2-ts@1 {
|
||||||
|
compatible = "ti,ads7846";
|
||||||
|
reg = <1>;
|
||||||
|
|
||||||
|
spi-max-frequency = <2000000>;
|
||||||
|
interrupts = <17 2>; /* high-to-low edge triggered */
|
||||||
|
interrupt-parent = <&gpio>;
|
||||||
|
pendown-gpio = <&gpio 17 0>;
|
||||||
|
ti,swap-xy;
|
||||||
|
ti,x-plate-ohms = /bits/ 16 <100>;
|
||||||
|
ti,pressure-max = /bits/ 16 <255>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
__overrides__ {
|
||||||
|
speed = <&piscreen2>,"spi-max-frequency:0";
|
||||||
|
rotate = <&piscreen2>,"rotate:0";
|
||||||
|
fps = <&piscreen2>,"fps:0";
|
||||||
|
debug = <&piscreen2>,"debug:0";
|
||||||
|
xohms = <&piscreen2_ts>,"ti,x-plate-ohms;0";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
88
arch/arm/boot/dts/overlays/pitft28-capacitive-overlay.dts
Normal file
88
arch/arm/boot/dts/overlays/pitft28-capacitive-overlay.dts
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
/*
|
||||||
|
* Device Tree overlay for Adafruit PiTFT 2.8" capacitive touch screen
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2835", "brcm,bcm2708", "brcm,bcm2709";
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target = <&spi0>;
|
||||||
|
__overlay__ {
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
spidev@0{
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@1 {
|
||||||
|
target = <&gpio>;
|
||||||
|
__overlay__ {
|
||||||
|
pitft_pins: pitft_pins {
|
||||||
|
brcm,pins = <24 25>;
|
||||||
|
brcm,function = <0 1>; /* in out */
|
||||||
|
brcm,pull = <2 0>; /* pullup none */
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@2 {
|
||||||
|
target = <&spi0>;
|
||||||
|
__overlay__ {
|
||||||
|
/* needed to avoid dtc warning */
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
pitft: pitft@0{
|
||||||
|
compatible = "ilitek,ili9340";
|
||||||
|
reg = <0>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pitft_pins>;
|
||||||
|
|
||||||
|
spi-max-frequency = <32000000>;
|
||||||
|
rotate = <90>;
|
||||||
|
fps = <25>;
|
||||||
|
bgr;
|
||||||
|
buswidth = <8>;
|
||||||
|
dc-gpios = <&gpio 25 0>;
|
||||||
|
debug = <0>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@3 {
|
||||||
|
target = <&i2c1>;
|
||||||
|
__overlay__ {
|
||||||
|
/* needed to avoid dtc warning */
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
ft6236: ft6236@38 {
|
||||||
|
compatible = "focaltech,ft6236";
|
||||||
|
reg = <0x38>;
|
||||||
|
|
||||||
|
interrupt-parent = <&gpio>;
|
||||||
|
interrupts = <24 2>;
|
||||||
|
touchscreen-size-x = <240>;
|
||||||
|
touchscreen-size-y = <320>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
__overrides__ {
|
||||||
|
speed = <&pitft>,"spi-max-frequency:0";
|
||||||
|
rotate = <&pitft>,"rotate:0";
|
||||||
|
fps = <&pitft>,"fps:0";
|
||||||
|
debug = <&pitft>,"debug:0";
|
||||||
|
touch-sizex = <&ft6236>,"touchscreen-size-x?";
|
||||||
|
touch-sizey = <&ft6236>,"touchscreen-size-y?";
|
||||||
|
touch-invx = <&ft6236>,"touchscreen-inverted-x?";
|
||||||
|
touch-invy = <&ft6236>,"touchscreen-inverted-y?";
|
||||||
|
touch-swapxy = <&ft6236>,"touchscreen-swapped-x-y?";
|
||||||
|
};
|
||||||
|
};
|
||||||
115
arch/arm/boot/dts/overlays/pitft28-resistive-overlay.dts
Normal file
115
arch/arm/boot/dts/overlays/pitft28-resistive-overlay.dts
Normal file
@@ -0,0 +1,115 @@
|
|||||||
|
/*
|
||||||
|
* Device Tree overlay for Adafruit PiTFT 2.8" resistive touch screen
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2835", "brcm,bcm2708", "brcm,bcm2709";
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target = <&spi0>;
|
||||||
|
__overlay__ {
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
spidev@0{
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
spidev@1{
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@1 {
|
||||||
|
target = <&gpio>;
|
||||||
|
__overlay__ {
|
||||||
|
pitft_pins: pitft_pins {
|
||||||
|
brcm,pins = <24 25>;
|
||||||
|
brcm,function = <0 1>; /* in out */
|
||||||
|
brcm,pull = <2 0>; /* pullup none */
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@2 {
|
||||||
|
target = <&spi0>;
|
||||||
|
__overlay__ {
|
||||||
|
/* needed to avoid dtc warning */
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
pitft: pitft@0{
|
||||||
|
compatible = "ilitek,ili9340";
|
||||||
|
reg = <0>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pitft_pins>;
|
||||||
|
|
||||||
|
spi-max-frequency = <32000000>;
|
||||||
|
rotate = <90>;
|
||||||
|
fps = <25>;
|
||||||
|
bgr;
|
||||||
|
buswidth = <8>;
|
||||||
|
dc-gpios = <&gpio 25 0>;
|
||||||
|
debug = <0>;
|
||||||
|
};
|
||||||
|
|
||||||
|
pitft_ts@1 {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
compatible = "st,stmpe610";
|
||||||
|
reg = <1>;
|
||||||
|
|
||||||
|
spi-max-frequency = <500000>;
|
||||||
|
irq-gpio = <&gpio 24 0x2>; /* IRQF_TRIGGER_FALLING */
|
||||||
|
interrupts = <24 2>; /* high-to-low edge triggered */
|
||||||
|
interrupt-parent = <&gpio>;
|
||||||
|
interrupt-controller;
|
||||||
|
|
||||||
|
stmpe_touchscreen {
|
||||||
|
compatible = "st,stmpe-ts";
|
||||||
|
st,sample-time = <4>;
|
||||||
|
st,mod-12b = <1>;
|
||||||
|
st,ref-sel = <0>;
|
||||||
|
st,adc-freq = <2>;
|
||||||
|
st,ave-ctrl = <3>;
|
||||||
|
st,touch-det-delay = <4>;
|
||||||
|
st,settling = <2>;
|
||||||
|
st,fraction-z = <7>;
|
||||||
|
st,i-drive = <0>;
|
||||||
|
};
|
||||||
|
|
||||||
|
stmpe_gpio: stmpe_gpio {
|
||||||
|
#gpio-cells = <2>;
|
||||||
|
compatible = "st,stmpe-gpio";
|
||||||
|
/*
|
||||||
|
* only GPIO2 is wired/available
|
||||||
|
* and it is wired to the backlight
|
||||||
|
*/
|
||||||
|
st,norequest-mask = <0x7b>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@3 {
|
||||||
|
target-path = "/soc";
|
||||||
|
__overlay__ {
|
||||||
|
backlight {
|
||||||
|
compatible = "gpio-backlight";
|
||||||
|
gpios = <&stmpe_gpio 2 0>;
|
||||||
|
default-on;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
__overrides__ {
|
||||||
|
speed = <&pitft>,"spi-max-frequency:0";
|
||||||
|
rotate = <&pitft>,"rotate:0";
|
||||||
|
fps = <&pitft>,"fps:0";
|
||||||
|
debug = <&pitft>,"debug:0";
|
||||||
|
};
|
||||||
|
};
|
||||||
34
arch/arm/boot/dts/overlays/pps-gpio-overlay.dts
Normal file
34
arch/arm/boot/dts/overlays/pps-gpio-overlay.dts
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2708";
|
||||||
|
fragment@0 {
|
||||||
|
target-path = "/";
|
||||||
|
__overlay__ {
|
||||||
|
pps: pps {
|
||||||
|
compatible = "pps-gpio";
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pps_pins>;
|
||||||
|
gpios = <&gpio 18 0>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@1 {
|
||||||
|
target = <&gpio>;
|
||||||
|
__overlay__ {
|
||||||
|
pps_pins: pps_pins {
|
||||||
|
brcm,pins = <18>;
|
||||||
|
brcm,function = <0>; // in
|
||||||
|
brcm,pull = <0>; // off
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
__overrides__ {
|
||||||
|
gpiopin = <&pps>,"gpios:4",
|
||||||
|
<&pps_pins>,"brcm,pins:0";
|
||||||
|
};
|
||||||
|
};
|
||||||
46
arch/arm/boot/dts/overlays/pwm-2chan-overlay.dts
Normal file
46
arch/arm/boot/dts/overlays/pwm-2chan-overlay.dts
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/*
|
||||||
|
This is the 2-channel overlay - only use it if you need both channels.
|
||||||
|
|
||||||
|
Legal pin,function combinations for each channel:
|
||||||
|
PWM0: 12,4(Alt0) 18,2(Alt5) 40,4(Alt0) 52,5(Alt1)
|
||||||
|
PWM1: 13,4(Alt0) 19,2(Alt5) 41,4(Alt0) 45,4(Alt0) 53,5(Alt1)
|
||||||
|
|
||||||
|
N.B.:
|
||||||
|
1) Pin 18 is the only one available on all platforms, and
|
||||||
|
it is the one used by the I2S audio interface.
|
||||||
|
Pins 12 and 13 might be better choices on an A+, B+ or Pi2.
|
||||||
|
2) The onboard analogue audio output uses both PWM channels.
|
||||||
|
3) So be careful mixing audio and PWM.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/ {
|
||||||
|
fragment@0 {
|
||||||
|
target = <&gpio>;
|
||||||
|
__overlay__ {
|
||||||
|
pwm_pins: pwm_pins {
|
||||||
|
brcm,pins = <18 19>;
|
||||||
|
brcm,function = <2 2>; /* Alt5 */
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@1 {
|
||||||
|
target = <&pwm>;
|
||||||
|
__overlay__ {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pwm_pins>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
__overrides__ {
|
||||||
|
pin = <&pwm_pins>,"brcm,pins:0";
|
||||||
|
pin2 = <&pwm_pins>,"brcm,pins:4";
|
||||||
|
func = <&pwm_pins>,"brcm,function:0";
|
||||||
|
func2 = <&pwm_pins>,"brcm,function:4";
|
||||||
|
clock = <&clk_pwm>,"clock-frequency:0";
|
||||||
|
};
|
||||||
|
};
|
||||||
42
arch/arm/boot/dts/overlays/pwm-overlay.dts
Normal file
42
arch/arm/boot/dts/overlays/pwm-overlay.dts
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/*
|
||||||
|
Legal pin,function combinations for each channel:
|
||||||
|
PWM0: 12,4(Alt0) 18,2(Alt5) 40,4(Alt0) 52,5(Alt1)
|
||||||
|
PWM1: 13,4(Alt0) 19,2(Alt5) 41,4(Alt0) 45,4(Alt0) 53,5(Alt1)
|
||||||
|
|
||||||
|
N.B.:
|
||||||
|
1) Pin 18 is the only one available on all platforms, and
|
||||||
|
it is the one used by the I2S audio interface.
|
||||||
|
Pins 12 and 13 might be better choices on an A+, B+ or Pi2.
|
||||||
|
2) The onboard analogue audio output uses both PWM channels.
|
||||||
|
3) So be careful mixing audio and PWM.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/ {
|
||||||
|
fragment@0 {
|
||||||
|
target = <&gpio>;
|
||||||
|
__overlay__ {
|
||||||
|
pwm_pins: pwm_pins {
|
||||||
|
brcm,pins = <18>;
|
||||||
|
brcm,function = <2>; /* Alt5 */
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@1 {
|
||||||
|
target = <&pwm>;
|
||||||
|
__overlay__ {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pwm_pins>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
__overrides__ {
|
||||||
|
pin = <&pwm_pins>,"brcm,pins:0";
|
||||||
|
func = <&pwm_pins>,"brcm,function:0";
|
||||||
|
clock = <&clk_pwm>,"clock-frequency:0";
|
||||||
|
};
|
||||||
|
};
|
||||||
45
arch/arm/boot/dts/overlays/raspidac3-overlay.dts
Normal file
45
arch/arm/boot/dts/overlays/raspidac3-overlay.dts
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
// Definitions for RaspiDACv3
|
||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2708";
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target = <&sound>;
|
||||||
|
__overlay__ {
|
||||||
|
compatible = "jg,raspidacv3";
|
||||||
|
i2s-controller = <&i2s>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@1 {
|
||||||
|
target = <&i2s>;
|
||||||
|
__overlay__ {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@2 {
|
||||||
|
target = <&i2c1>;
|
||||||
|
__overlay__ {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
pcm5122@4c {
|
||||||
|
#sound-dai-cells = <0>;
|
||||||
|
compatible = "ti,pcm5122";
|
||||||
|
reg = <0x4c>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
tpa6130a2: tpa6130a2@60 {
|
||||||
|
compatible = "ti,tpa6130a2";
|
||||||
|
reg = <0x60>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
21
arch/arm/boot/dts/overlays/rpi-backlight-overlay.dts
Normal file
21
arch/arm/boot/dts/overlays/rpi-backlight-overlay.dts
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
/*
|
||||||
|
* Devicetree overlay for mailbox-driven Raspberry Pi DSI Display
|
||||||
|
* backlight controller
|
||||||
|
*/
|
||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2708";
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target-path = "/";
|
||||||
|
__overlay__ {
|
||||||
|
rpi_backlight: rpi_backlight {
|
||||||
|
compatible = "raspberrypi,rpi-backlight";
|
||||||
|
firmware = <&firmware>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
34
arch/arm/boot/dts/overlays/rpi-dac-overlay.dts
Normal file
34
arch/arm/boot/dts/overlays/rpi-dac-overlay.dts
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
// Definitions for RPi DAC
|
||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2708";
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target = <&sound>;
|
||||||
|
__overlay__ {
|
||||||
|
compatible = "rpi,rpi-dac";
|
||||||
|
i2s-controller = <&i2s>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@1 {
|
||||||
|
target = <&i2s>;
|
||||||
|
__overlay__ {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@2 {
|
||||||
|
target-path = "/";
|
||||||
|
__overlay__ {
|
||||||
|
pcm1794a-codec {
|
||||||
|
#sound-dai-cells = <0>;
|
||||||
|
compatible = "ti,pcm1794a";
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
82
arch/arm/boot/dts/overlays/rpi-display-overlay.dts
Normal file
82
arch/arm/boot/dts/overlays/rpi-display-overlay.dts
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
/*
|
||||||
|
* Device Tree overlay for rpi-display by Watterott
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2835", "brcm,bcm2708", "brcm,bcm2709";
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target = <&spi0>;
|
||||||
|
__overlay__ {
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
spidev@0{
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
spidev@1{
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@1 {
|
||||||
|
target = <&gpio>;
|
||||||
|
__overlay__ {
|
||||||
|
rpi_display_pins: rpi_display_pins {
|
||||||
|
brcm,pins = <18 23 24 25>;
|
||||||
|
brcm,function = <1 1 1 0>; /* out out out in */
|
||||||
|
brcm,pull = <0 0 0 2>; /* - - - up */
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@2 {
|
||||||
|
target = <&spi0>;
|
||||||
|
__overlay__ {
|
||||||
|
/* needed to avoid dtc warning */
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
rpidisplay: rpi-display@0{
|
||||||
|
compatible = "ilitek,ili9341";
|
||||||
|
reg = <0>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&rpi_display_pins>;
|
||||||
|
|
||||||
|
spi-max-frequency = <32000000>;
|
||||||
|
rotate = <270>;
|
||||||
|
bgr;
|
||||||
|
fps = <30>;
|
||||||
|
buswidth = <8>;
|
||||||
|
reset-gpios = <&gpio 23 0>;
|
||||||
|
dc-gpios = <&gpio 24 0>;
|
||||||
|
led-gpios = <&gpio 18 1>;
|
||||||
|
debug = <0>;
|
||||||
|
};
|
||||||
|
|
||||||
|
rpidisplay_ts: rpi-display-ts@1 {
|
||||||
|
compatible = "ti,ads7846";
|
||||||
|
reg = <1>;
|
||||||
|
|
||||||
|
spi-max-frequency = <2000000>;
|
||||||
|
interrupts = <25 2>; /* high-to-low edge triggered */
|
||||||
|
interrupt-parent = <&gpio>;
|
||||||
|
pendown-gpio = <&gpio 25 0>;
|
||||||
|
ti,x-plate-ohms = /bits/ 16 <60>;
|
||||||
|
ti,pressure-max = /bits/ 16 <255>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
__overrides__ {
|
||||||
|
speed = <&rpidisplay>,"spi-max-frequency:0";
|
||||||
|
rotate = <&rpidisplay>,"rotate:0";
|
||||||
|
fps = <&rpidisplay>,"fps:0";
|
||||||
|
debug = <&rpidisplay>,"debug:0";
|
||||||
|
xohms = <&rpidisplay_ts>,"ti,x-plate-ohms;0";
|
||||||
|
};
|
||||||
|
};
|
||||||
17
arch/arm/boot/dts/overlays/rpi-ft5406-overlay.dts
Normal file
17
arch/arm/boot/dts/overlays/rpi-ft5406-overlay.dts
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2708";
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target-path = "/";
|
||||||
|
__overlay__ {
|
||||||
|
rpi_ft5406: rpi_ft5406 {
|
||||||
|
compatible = "rpi,rpi-ft5406";
|
||||||
|
firmware = <&firmware>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
39
arch/arm/boot/dts/overlays/rpi-proto-overlay.dts
Normal file
39
arch/arm/boot/dts/overlays/rpi-proto-overlay.dts
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
// Definitions for Rpi-Proto
|
||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2708";
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target = <&sound>;
|
||||||
|
__overlay__ {
|
||||||
|
compatible = "rpi,rpi-proto";
|
||||||
|
i2s-controller = <&i2s>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@1 {
|
||||||
|
target = <&i2s>;
|
||||||
|
__overlay__ {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@2 {
|
||||||
|
target = <&i2c1>;
|
||||||
|
__overlay__ {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
wm8731@1a {
|
||||||
|
#sound-dai-cells = <0>;
|
||||||
|
compatible = "wlf,wm8731";
|
||||||
|
reg = <0x1a>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
47
arch/arm/boot/dts/overlays/rpi-sense-overlay.dts
Normal file
47
arch/arm/boot/dts/overlays/rpi-sense-overlay.dts
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
// rpi-sense HAT
|
||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2708", "brcm,bcm2709";
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target = <&i2c1>;
|
||||||
|
__overlay__ {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
rpi-sense@46 {
|
||||||
|
compatible = "rpi,rpi-sense";
|
||||||
|
reg = <0x46>;
|
||||||
|
keys-int-gpios = <&gpio 23 1>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
lsm9ds1-magn@1c {
|
||||||
|
compatible = "st,lsm9ds1-magn";
|
||||||
|
reg = <0x1c>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
lsm9ds1-accel6a {
|
||||||
|
compatible = "st,lsm9ds1-accel";
|
||||||
|
reg = <0x6a>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
lps25h-press@5c {
|
||||||
|
compatible = "st,lps25h-press";
|
||||||
|
reg = <0x5c>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
hts221-humid@5f {
|
||||||
|
compatible = "st,hts221-humid";
|
||||||
|
reg = <0x5f>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
29
arch/arm/boot/dts/overlays/sdhost-overlay.dts
Normal file
29
arch/arm/boot/dts/overlays/sdhost-overlay.dts
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/{
|
||||||
|
compatible = "brcm,bcm2708";
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target = <&mmc>;
|
||||||
|
__overlay__ {
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@1 {
|
||||||
|
target = <&sdhost>;
|
||||||
|
frag1: __overlay__ {
|
||||||
|
brcm,overclock-50 = <0>;
|
||||||
|
brcm,pio-limit = <1>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
__overrides__ {
|
||||||
|
overclock_50 = <&frag1>,"brcm,overclock-50:0";
|
||||||
|
force_pio = <&frag1>,"brcm,force-pio?";
|
||||||
|
pio_limit = <&frag1>,"brcm,pio-limit:0";
|
||||||
|
debug = <&frag1>,"brcm,debug?";
|
||||||
|
};
|
||||||
|
};
|
||||||
32
arch/arm/boot/dts/overlays/sdio-overlay.dts
Normal file
32
arch/arm/boot/dts/overlays/sdio-overlay.dts
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
/* Enable SDIO from MMC interface via GPIOs 22-27. Includes sdhost overlay. */
|
||||||
|
|
||||||
|
/include/ "sdhost-overlay.dts"
|
||||||
|
|
||||||
|
/{
|
||||||
|
compatible = "brcm,bcm2708";
|
||||||
|
|
||||||
|
fragment@3 {
|
||||||
|
target = <&mmc>;
|
||||||
|
sdio_mmc: __overlay__ {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&sdio_pins>;
|
||||||
|
non-removable;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@4 {
|
||||||
|
target = <&gpio>;
|
||||||
|
__overlay__ {
|
||||||
|
sdio_pins: sdio_pins {
|
||||||
|
brcm,pins = <22 23 24 25 26 27>;
|
||||||
|
brcm,function = <7 7 7 7 7 7>; /* ALT3 = SD1 */
|
||||||
|
brcm,pull = <0 2 2 2 2 2>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
__overrides__ {
|
||||||
|
poll_once = <&sdio_mmc>,"non-removable?";
|
||||||
|
};
|
||||||
|
};
|
||||||
18
arch/arm/boot/dts/overlays/smi-dev-overlay.dts
Normal file
18
arch/arm/boot/dts/overlays/smi-dev-overlay.dts
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
// Description: Overlay to enable character device interface for SMI.
|
||||||
|
// Author: Luke Wren <luke@raspberrypi.org>
|
||||||
|
|
||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/{
|
||||||
|
fragment@0 {
|
||||||
|
target = <&soc>;
|
||||||
|
__overlay__ {
|
||||||
|
smi_dev {
|
||||||
|
compatible = "brcm,bcm2835-smi-dev";
|
||||||
|
smi_handle = <&smi>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
69
arch/arm/boot/dts/overlays/smi-nand-overlay.dts
Normal file
69
arch/arm/boot/dts/overlays/smi-nand-overlay.dts
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
// Description: Overlay to enable NAND flash through
|
||||||
|
// the secondary memory interface
|
||||||
|
// Author: Luke Wren
|
||||||
|
|
||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/{
|
||||||
|
compatible = "brcm,bcm2708";
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target = <&smi>;
|
||||||
|
__overlay__ {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&smi_pins>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@1 {
|
||||||
|
target = <&soc>;
|
||||||
|
__overlay__ {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
|
||||||
|
nand: flash@0 {
|
||||||
|
compatible = "brcm,bcm2835-smi-nand";
|
||||||
|
smi_handle = <&smi>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
partition@0 {
|
||||||
|
label = "stage2";
|
||||||
|
// 128k
|
||||||
|
reg = <0 0x20000>;
|
||||||
|
read-only;
|
||||||
|
};
|
||||||
|
partition@1 {
|
||||||
|
label = "firmware";
|
||||||
|
// 16M
|
||||||
|
reg = <0x20000 0x1000000>;
|
||||||
|
read-only;
|
||||||
|
};
|
||||||
|
partition@2 {
|
||||||
|
label = "root";
|
||||||
|
// 2G (will need to use 64 bit for >=4G)
|
||||||
|
reg = <0x1020000 0x80000000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@2 {
|
||||||
|
target = <&gpio>;
|
||||||
|
__overlay__ {
|
||||||
|
smi_pins: smi_pins {
|
||||||
|
brcm,pins = <0 1 2 3 4 5 6 7 8 9 10 11
|
||||||
|
12 13 14 15>;
|
||||||
|
/* Alt 1: SMI */
|
||||||
|
brcm,function = <5 5 5 5 5 5 5 5 5 5 5
|
||||||
|
5 5 5 5 5>;
|
||||||
|
/* /CS, /WE and /OE are pulled high, as they are
|
||||||
|
generally active low signals */
|
||||||
|
brcm,pull = <2 2 2 2 2 2 2 2 0 0 0 0 0 0 0 0>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
37
arch/arm/boot/dts/overlays/smi-overlay.dts
Normal file
37
arch/arm/boot/dts/overlays/smi-overlay.dts
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
// Description: Overlay to enable the secondary memory interface peripheral
|
||||||
|
// Author: Luke Wren
|
||||||
|
|
||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/{
|
||||||
|
compatible = "brcm,bcm2708";
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target = <&smi>;
|
||||||
|
__overlay__ {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&smi_pins>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@1 {
|
||||||
|
target = <&gpio>;
|
||||||
|
__overlay__ {
|
||||||
|
smi_pins: smi_pins {
|
||||||
|
/* Don't configure the top two address bits, as
|
||||||
|
these are already used as ID_SD and ID_SC */
|
||||||
|
brcm,pins = <2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
||||||
|
16 17 18 19 20 21 22 23 24 25>;
|
||||||
|
/* Alt 0: SMI */
|
||||||
|
brcm,function = <5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
|
||||||
|
5 5 5 5 5 5 5 5 5>;
|
||||||
|
/* /CS, /WE and /OE are pulled high, as they are
|
||||||
|
generally active low signals */
|
||||||
|
brcm,pull = <2 2 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0
|
||||||
|
0 0 0 0 0 0 0>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
31
arch/arm/boot/dts/overlays/spi-gpio35-39-overlay.dts
Normal file
31
arch/arm/boot/dts/overlays/spi-gpio35-39-overlay.dts
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
* Device tree overlay to move spi0 to gpio 35 to 39 on CM
|
||||||
|
*/
|
||||||
|
|
||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2835", "brcm,bcm2836", "brcm,bcm2708", "brcm,bcm2709";
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target = <&spi0>;
|
||||||
|
__overlay__ {
|
||||||
|
cs-gpios = <&gpio 36 1>, <&gpio 35 1>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@1 {
|
||||||
|
target = <&spi0_cs_pins>;
|
||||||
|
__overlay__ {
|
||||||
|
bcrm,pins = <36 35>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@2 {
|
||||||
|
target = <&spi0_pins>;
|
||||||
|
__overlay__ {
|
||||||
|
bcrm,pins = <37 38 39>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
216
arch/arm/boot/dts/overlays/tinylcd35-overlay.dts
Normal file
216
arch/arm/boot/dts/overlays/tinylcd35-overlay.dts
Normal file
@@ -0,0 +1,216 @@
|
|||||||
|
/*
|
||||||
|
* tinylcd35-overlay.dts
|
||||||
|
*
|
||||||
|
* -------------------------------------------------
|
||||||
|
* www.tinlylcd.com
|
||||||
|
* -------------------------------------------------
|
||||||
|
* Device---Driver-----BUS GPIO's
|
||||||
|
* display tinylcd35 spi0.0 25 24 18
|
||||||
|
* touch ads7846 spi0.1 5
|
||||||
|
* rtc ds1307 i2c1-0068
|
||||||
|
* rtc pcf8563 i2c1-0051
|
||||||
|
* keypad gpio-keys --------- 17 22 27 23 28
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* TinyLCD.com 3.5 inch TFT
|
||||||
|
*
|
||||||
|
* Version 001
|
||||||
|
* 5/3/2015 -- Noralf Trønnes Initial Device tree framework
|
||||||
|
* 10/3/2015 -- tinylcd@gmail.com added ds1307 support.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2835", "brcm,bcm2708", "brcm,bcm2709";
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target = <&spi0>;
|
||||||
|
__overlay__ {
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
spidev@0{
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
spidev@1{
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@1 {
|
||||||
|
target = <&gpio>;
|
||||||
|
__overlay__ {
|
||||||
|
tinylcd35_pins: tinylcd35_pins {
|
||||||
|
brcm,pins = <25 24 18>;
|
||||||
|
brcm,function = <1>; /* out */
|
||||||
|
};
|
||||||
|
tinylcd35_ts_pins: tinylcd35_ts_pins {
|
||||||
|
brcm,pins = <5>;
|
||||||
|
brcm,function = <0>; /* in */
|
||||||
|
};
|
||||||
|
keypad_pins: keypad_pins {
|
||||||
|
brcm,pins = <4 17 22 23 27>;
|
||||||
|
brcm,function = <0>; /* in */
|
||||||
|
brcm,pull = <1>; /* down */
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@2 {
|
||||||
|
target = <&spi0>;
|
||||||
|
__overlay__ {
|
||||||
|
/* needed to avoid dtc warning */
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
tinylcd35: tinylcd35@0{
|
||||||
|
compatible = "neosec,tinylcd";
|
||||||
|
reg = <0>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&tinylcd35_pins>,
|
||||||
|
<&tinylcd35_ts_pins>;
|
||||||
|
|
||||||
|
spi-max-frequency = <48000000>;
|
||||||
|
rotate = <270>;
|
||||||
|
fps = <20>;
|
||||||
|
bgr;
|
||||||
|
buswidth = <8>;
|
||||||
|
reset-gpios = <&gpio 25 0>;
|
||||||
|
dc-gpios = <&gpio 24 0>;
|
||||||
|
led-gpios = <&gpio 18 1>;
|
||||||
|
debug = <0>;
|
||||||
|
|
||||||
|
init = <0x10000B0 0x80
|
||||||
|
0x10000C0 0x0A 0x0A
|
||||||
|
0x10000C1 0x01 0x01
|
||||||
|
0x10000C2 0x33
|
||||||
|
0x10000C5 0x00 0x42 0x80
|
||||||
|
0x10000B1 0xD0 0x11
|
||||||
|
0x10000B4 0x02
|
||||||
|
0x10000B6 0x00 0x22 0x3B
|
||||||
|
0x10000B7 0x07
|
||||||
|
0x1000036 0x58
|
||||||
|
0x10000F0 0x36 0xA5 0xD3
|
||||||
|
0x10000E5 0x80
|
||||||
|
0x10000E5 0x01
|
||||||
|
0x10000B3 0x00
|
||||||
|
0x10000E5 0x00
|
||||||
|
0x10000F0 0x36 0xA5 0x53
|
||||||
|
0x10000E0 0x00 0x35 0x33 0x00 0x00 0x00 0x00 0x35 0x33 0x00 0x00 0x00
|
||||||
|
0x100003A 0x55
|
||||||
|
0x1000011
|
||||||
|
0x2000001
|
||||||
|
0x1000029>;
|
||||||
|
};
|
||||||
|
|
||||||
|
tinylcd35_ts: tinylcd35_ts@1 {
|
||||||
|
compatible = "ti,ads7846";
|
||||||
|
reg = <1>;
|
||||||
|
status = "disabled";
|
||||||
|
|
||||||
|
spi-max-frequency = <2000000>;
|
||||||
|
interrupts = <5 2>; /* high-to-low edge triggered */
|
||||||
|
interrupt-parent = <&gpio>;
|
||||||
|
pendown-gpio = <&gpio 5 0>;
|
||||||
|
ti,x-plate-ohms = /bits/ 16 <100>;
|
||||||
|
ti,pressure-max = /bits/ 16 <255>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/* RTC */
|
||||||
|
|
||||||
|
fragment@3 {
|
||||||
|
target = <&i2c1>;
|
||||||
|
__overlay__ {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
pcf8563: pcf8563@51 {
|
||||||
|
compatible = "nxp,pcf8563";
|
||||||
|
reg = <0x51>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@4 {
|
||||||
|
target = <&i2c1>;
|
||||||
|
__overlay__ {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
ds1307: ds1307@68 {
|
||||||
|
compatible = "maxim,ds1307";
|
||||||
|
reg = <0x68>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Values for input event code is found under the
|
||||||
|
* 'Keys and buttons' heading in include/uapi/linux/input.h
|
||||||
|
*/
|
||||||
|
fragment@5 {
|
||||||
|
target-path = "/soc";
|
||||||
|
__overlay__ {
|
||||||
|
keypad: keypad {
|
||||||
|
compatible = "gpio-keys";
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&keypad_pins>;
|
||||||
|
status = "disabled";
|
||||||
|
autorepeat;
|
||||||
|
|
||||||
|
button@17 {
|
||||||
|
label = "GPIO KEY_UP";
|
||||||
|
linux,code = <103>;
|
||||||
|
gpios = <&gpio 17 0>;
|
||||||
|
};
|
||||||
|
button@22 {
|
||||||
|
label = "GPIO KEY_DOWN";
|
||||||
|
linux,code = <108>;
|
||||||
|
gpios = <&gpio 22 0>;
|
||||||
|
};
|
||||||
|
button@27 {
|
||||||
|
label = "GPIO KEY_LEFT";
|
||||||
|
linux,code = <105>;
|
||||||
|
gpios = <&gpio 27 0>;
|
||||||
|
};
|
||||||
|
button@23 {
|
||||||
|
label = "GPIO KEY_RIGHT";
|
||||||
|
linux,code = <106>;
|
||||||
|
gpios = <&gpio 23 0>;
|
||||||
|
};
|
||||||
|
button@4 {
|
||||||
|
label = "GPIO KEY_ENTER";
|
||||||
|
linux,code = <28>;
|
||||||
|
gpios = <&gpio 4 0>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
__overrides__ {
|
||||||
|
speed = <&tinylcd35>,"spi-max-frequency:0";
|
||||||
|
rotate = <&tinylcd35>,"rotate:0";
|
||||||
|
fps = <&tinylcd35>,"fps:0";
|
||||||
|
debug = <&tinylcd35>,"debug:0";
|
||||||
|
touch = <&tinylcd35_ts>,"status";
|
||||||
|
touchgpio = <&tinylcd35_ts_pins>,"brcm,pins:0",
|
||||||
|
<&tinylcd35_ts>,"interrupts:0",
|
||||||
|
<&tinylcd35_ts>,"pendown-gpio:4";
|
||||||
|
xohms = <&tinylcd35_ts>,"ti,x-plate-ohms;0";
|
||||||
|
rtc-pcf = <&i2c1>,"status",
|
||||||
|
<&pcf8563>,"status";
|
||||||
|
rtc-ds = <&i2c1>,"status",
|
||||||
|
<&ds1307>,"status";
|
||||||
|
keypad = <&keypad>,"status";
|
||||||
|
};
|
||||||
|
};
|
||||||
38
arch/arm/boot/dts/overlays/uart1-overlay.dts
Normal file
38
arch/arm/boot/dts/overlays/uart1-overlay.dts
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/{
|
||||||
|
compatible = "brcm,bcm2708";
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target = <&uart1>;
|
||||||
|
__overlay__ {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&uart1_pins>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@1 {
|
||||||
|
target = <&gpio>;
|
||||||
|
__overlay__ {
|
||||||
|
uart1_pins: uart1_pins {
|
||||||
|
brcm,pins = <14 15>;
|
||||||
|
brcm,function = <2>; /* alt5 */
|
||||||
|
brcm,pull = <0 2>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@2 {
|
||||||
|
target-path = "/chosen";
|
||||||
|
__overlay__ {
|
||||||
|
bootargs = "8250.nr_uarts=1";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
__overrides__ {
|
||||||
|
txd1_pin = <&uart1_pins>,"brcm,pins:0";
|
||||||
|
rxd1_pin = <&uart1_pins>,"brcm,pins:4";
|
||||||
|
};
|
||||||
|
};
|
||||||
95
arch/arm/boot/dts/overlays/vc4-kms-v3d-overlay.dts
Normal file
95
arch/arm/boot/dts/overlays/vc4-kms-v3d-overlay.dts
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
/*
|
||||||
|
* vc4-kms-v3d-overlay.dts
|
||||||
|
*/
|
||||||
|
|
||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
#include "dt-bindings/clock/bcm2835.h"
|
||||||
|
#include "dt-bindings/gpio/gpio.h"
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2835", "brcm,bcm2708", "brcm,bcm2709";
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target = <&i2c2>;
|
||||||
|
__overlay__ {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@1 {
|
||||||
|
target = <&cprman>;
|
||||||
|
__overlay__ {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@2 {
|
||||||
|
target = <&fb>;
|
||||||
|
__overlay__ {
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@3 {
|
||||||
|
target = <&soc>;
|
||||||
|
__overlay__ {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
|
||||||
|
pixelvalve@7e206000 {
|
||||||
|
compatible = "brcm,bcm2835-pixelvalve0";
|
||||||
|
reg = <0x7e206000 0x100>;
|
||||||
|
interrupts = <2 13>; /* pwa0 */
|
||||||
|
};
|
||||||
|
|
||||||
|
pixelvalve@7e207000 {
|
||||||
|
compatible = "brcm,bcm2835-pixelvalve1";
|
||||||
|
reg = <0x7e207000 0x100>;
|
||||||
|
interrupts = <2 14>; /* pwa1 */
|
||||||
|
};
|
||||||
|
|
||||||
|
hvs@7e400000 {
|
||||||
|
compatible = "brcm,bcm2835-hvs";
|
||||||
|
reg = <0x7e400000 0x6000>;
|
||||||
|
interrupts = <2 1>;
|
||||||
|
};
|
||||||
|
|
||||||
|
pixelvalve@7e807000 {
|
||||||
|
compatible = "brcm,bcm2835-pixelvalve2";
|
||||||
|
reg = <0x7e807000 0x100>;
|
||||||
|
interrupts = <2 10>; /* pixelvalve */
|
||||||
|
};
|
||||||
|
|
||||||
|
hdmi@7e902000 {
|
||||||
|
compatible = "brcm,bcm2835-hdmi";
|
||||||
|
reg = <0x7e902000 0x600>,
|
||||||
|
<0x7e808000 0x100>;
|
||||||
|
interrupts = <2 8>, <2 9>;
|
||||||
|
ddc = <&i2c2>;
|
||||||
|
hpd-gpios = <&gpio 46 GPIO_ACTIVE_HIGH>;
|
||||||
|
clocks = <&cprman BCM2835_PLLH_PIX>,
|
||||||
|
<&cprman BCM2835_CLOCK_HSM>;
|
||||||
|
clock-names = "pixel", "hdmi";
|
||||||
|
};
|
||||||
|
|
||||||
|
v3d@7ec00000 {
|
||||||
|
compatible = "brcm,vc4-v3d";
|
||||||
|
reg = <0x7ec00000 0x1000>;
|
||||||
|
interrupts = <1 10>;
|
||||||
|
};
|
||||||
|
|
||||||
|
gpu@7e4c0000 {
|
||||||
|
compatible = "brcm,bcm2835-vc4";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@4 {
|
||||||
|
target-path = "/chosen";
|
||||||
|
__overlay__ {
|
||||||
|
bootargs = "cma=256M@512M";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
30
arch/arm/boot/dts/overlays/vga666-overlay.dts
Normal file
30
arch/arm/boot/dts/overlays/vga666-overlay.dts
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/{
|
||||||
|
compatible = "brcm,bcm2708";
|
||||||
|
|
||||||
|
// There is no VGA driver module, but we need a platform device
|
||||||
|
// node (that doesn't already use pinctrl) to hang the pinctrl
|
||||||
|
// reference on - leds will do
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target = <&leds>;
|
||||||
|
__overlay__ {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&vga666_pins>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@1 {
|
||||||
|
target = <&gpio>;
|
||||||
|
__overlay__ {
|
||||||
|
vga666_pins: vga666_pins {
|
||||||
|
brcm,pins = <2 3 4 5 6 7 8 9 10 11 12
|
||||||
|
13 14 15 16 17 18 19 20 21>;
|
||||||
|
brcm,function = <6>; /* alt2 */
|
||||||
|
brcm,pull = <0>; /* no pull */
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
39
arch/arm/boot/dts/overlays/w1-gpio-overlay.dts
Normal file
39
arch/arm/boot/dts/overlays/w1-gpio-overlay.dts
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
// Definitions for w1-gpio module (without external pullup)
|
||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2708";
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target-path = "/";
|
||||||
|
__overlay__ {
|
||||||
|
|
||||||
|
w1: onewire@0 {
|
||||||
|
compatible = "w1-gpio";
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&w1_pins>;
|
||||||
|
gpios = <&gpio 4 0>;
|
||||||
|
rpi,parasitic-power = <0>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@1 {
|
||||||
|
target = <&gpio>;
|
||||||
|
__overlay__ {
|
||||||
|
w1_pins: w1_pins {
|
||||||
|
brcm,pins = <4>;
|
||||||
|
brcm,function = <0>; // in (initially)
|
||||||
|
brcm,pull = <0>; // off
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
__overrides__ {
|
||||||
|
gpiopin = <&w1>,"gpios:4",
|
||||||
|
<&w1_pins>,"brcm,pins:0";
|
||||||
|
pullup = <&w1>,"rpi,parasitic-power:0";
|
||||||
|
};
|
||||||
|
};
|
||||||
41
arch/arm/boot/dts/overlays/w1-gpio-pullup-overlay.dts
Normal file
41
arch/arm/boot/dts/overlays/w1-gpio-pullup-overlay.dts
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
// Definitions for w1-gpio module (with external pullup)
|
||||||
|
/dts-v1/;
|
||||||
|
/plugin/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
compatible = "brcm,bcm2708";
|
||||||
|
|
||||||
|
fragment@0 {
|
||||||
|
target-path = "/";
|
||||||
|
__overlay__ {
|
||||||
|
|
||||||
|
w1: onewire@0 {
|
||||||
|
compatible = "w1-gpio";
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&w1_pins>;
|
||||||
|
gpios = <&gpio 4 0>, <&gpio 5 1>;
|
||||||
|
rpi,parasitic-power = <0>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fragment@1 {
|
||||||
|
target = <&gpio>;
|
||||||
|
__overlay__ {
|
||||||
|
w1_pins: w1_pins {
|
||||||
|
brcm,pins = <4 5>;
|
||||||
|
brcm,function = <0 1>; // in out
|
||||||
|
brcm,pull = <0 0>; // off off
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
__overrides__ {
|
||||||
|
gpiopin = <&w1>,"gpios:4",
|
||||||
|
<&w1_pins>,"brcm,pins:0";
|
||||||
|
extpullup = <&w1>,"gpios:16",
|
||||||
|
<&w1_pins>,"brcm,pins:4";
|
||||||
|
pullup = <&w1>,"rpi,parasitic-power:0";
|
||||||
|
};
|
||||||
|
};
|
||||||
1259
arch/arm/configs/bcm2709_defconfig
Normal file
1259
arch/arm/configs/bcm2709_defconfig
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
1255
arch/arm/configs/bcmrpi_defconfig
Normal file
1255
arch/arm/configs/bcmrpi_defconfig
Normal file
File diff suppressed because it is too large
Load Diff
@@ -162,13 +162,23 @@ static inline unsigned long arch_local_save_flags(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* restore saved IRQ & FIQ state
|
* restore saved IRQ state
|
||||||
*/
|
*/
|
||||||
#define arch_local_irq_restore arch_local_irq_restore
|
#define arch_local_irq_restore arch_local_irq_restore
|
||||||
static inline void arch_local_irq_restore(unsigned long flags)
|
static inline void arch_local_irq_restore(unsigned long flags)
|
||||||
{
|
{
|
||||||
asm volatile(
|
unsigned long temp = 0;
|
||||||
" msr " IRQMASK_REG_NAME_W ", %0 @ local_irq_restore"
|
flags &= ~(1 << 6);
|
||||||
|
asm volatile (
|
||||||
|
" mrs %0, cpsr"
|
||||||
|
: "=r" (temp)
|
||||||
|
:
|
||||||
|
: "memory", "cc");
|
||||||
|
/* Preserve FIQ bit */
|
||||||
|
temp &= (1 << 6);
|
||||||
|
flags = flags | temp;
|
||||||
|
asm volatile (
|
||||||
|
" msr cpsr_c, %0 @ local_irq_restore"
|
||||||
:
|
:
|
||||||
: "r" (flags)
|
: "r" (flags)
|
||||||
: "memory", "cc");
|
: "memory", "cc");
|
||||||
|
|||||||
@@ -24,6 +24,11 @@ extern void * memchr(const void *, int, __kernel_size_t);
|
|||||||
#define __HAVE_ARCH_MEMSET
|
#define __HAVE_ARCH_MEMSET
|
||||||
extern void * memset(void *, int, __kernel_size_t);
|
extern void * memset(void *, int, __kernel_size_t);
|
||||||
|
|
||||||
|
#ifdef CONFIG_MACH_BCM2708
|
||||||
|
#define __HAVE_ARCH_MEMCMP
|
||||||
|
extern int memcmp(const void *, const void *, size_t);
|
||||||
|
#endif
|
||||||
|
|
||||||
extern void __memzero(void *ptr, __kernel_size_t n);
|
extern void __memzero(void *ptr, __kernel_size_t n);
|
||||||
|
|
||||||
#define memset(p,v,n) \
|
#define memset(p,v,n) \
|
||||||
|
|||||||
@@ -493,6 +493,9 @@ do { \
|
|||||||
extern unsigned long __must_check
|
extern unsigned long __must_check
|
||||||
arm_copy_from_user(void *to, const void __user *from, unsigned long n);
|
arm_copy_from_user(void *to, const void __user *from, unsigned long n);
|
||||||
|
|
||||||
|
extern unsigned long __must_check
|
||||||
|
__copy_from_user_std(void *to, const void __user *from, unsigned long n);
|
||||||
|
|
||||||
static inline unsigned long __must_check
|
static inline unsigned long __must_check
|
||||||
__copy_from_user(void *to, const void __user *from, unsigned long n)
|
__copy_from_user(void *to, const void __user *from, unsigned long n)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -47,3 +47,7 @@ ENTRY(__get_fiq_regs)
|
|||||||
mov r0, r0 @ avoid hazard prior to ARMv4
|
mov r0, r0 @ avoid hazard prior to ARMv4
|
||||||
ret lr
|
ret lr
|
||||||
ENDPROC(__get_fiq_regs)
|
ENDPROC(__get_fiq_regs)
|
||||||
|
|
||||||
|
ENTRY(__FIQ_Branch)
|
||||||
|
mov pc, r8
|
||||||
|
ENDPROC(__FIQ_Branch)
|
||||||
|
|||||||
@@ -700,6 +700,14 @@ ARM_BE8(rev16 ip, ip)
|
|||||||
ldrcc r7, [r4], #4 @ use branch for delay slot
|
ldrcc r7, [r4], #4 @ use branch for delay slot
|
||||||
bcc 1b
|
bcc 1b
|
||||||
ret lr
|
ret lr
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
#endif
|
#endif
|
||||||
ENDPROC(__fixup_a_pv_table)
|
ENDPROC(__fixup_a_pv_table)
|
||||||
|
|
||||||
|
|||||||
@@ -91,6 +91,16 @@ void arch_cpu_idle_exit(void)
|
|||||||
ledtrig_cpu(CPU_LED_IDLE_END);
|
ledtrig_cpu(CPU_LED_IDLE_END);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char bcm2708_reboot_mode = 'h';
|
||||||
|
|
||||||
|
int __init reboot_setup(char *str)
|
||||||
|
{
|
||||||
|
bcm2708_reboot_mode = str[0];
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
__setup("reboot=", reboot_setup);
|
||||||
|
|
||||||
void __show_regs(struct pt_regs *regs)
|
void __show_regs(struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|||||||
@@ -6,9 +6,8 @@
|
|||||||
|
|
||||||
lib-y := backtrace.o changebit.o csumipv6.o csumpartial.o \
|
lib-y := backtrace.o changebit.o csumipv6.o csumpartial.o \
|
||||||
csumpartialcopy.o csumpartialcopyuser.o clearbit.o \
|
csumpartialcopy.o csumpartialcopyuser.o clearbit.o \
|
||||||
delay.o delay-loop.o findbit.o memchr.o memcpy.o \
|
delay.o delay-loop.o findbit.o memchr.o memzero.o \
|
||||||
memmove.o memset.o memzero.o setbit.o \
|
setbit.o strchr.o strrchr.o \
|
||||||
strchr.o strrchr.o \
|
|
||||||
testchangebit.o testclearbit.o testsetbit.o \
|
testchangebit.o testclearbit.o testsetbit.o \
|
||||||
ashldi3.o ashrdi3.o lshrdi3.o muldi3.o \
|
ashldi3.o ashrdi3.o lshrdi3.o muldi3.o \
|
||||||
ucmpdi2.o lib1funcs.o div64.o \
|
ucmpdi2.o lib1funcs.o div64.o \
|
||||||
@@ -18,6 +17,16 @@ lib-y := backtrace.o changebit.o csumipv6.o csumpartial.o \
|
|||||||
mmu-y := clear_user.o copy_page.o getuser.o putuser.o \
|
mmu-y := clear_user.o copy_page.o getuser.o putuser.o \
|
||||||
copy_from_user.o copy_to_user.o
|
copy_from_user.o copy_to_user.o
|
||||||
|
|
||||||
|
# Choose optimised implementations for Raspberry Pi
|
||||||
|
ifeq ($(CONFIG_MACH_BCM2708),y)
|
||||||
|
CFLAGS_uaccess_with_memcpy.o += -DCOPY_FROM_USER_THRESHOLD=1600
|
||||||
|
CFLAGS_uaccess_with_memcpy.o += -DCOPY_TO_USER_THRESHOLD=672
|
||||||
|
obj-$(CONFIG_MODULES) += exports_rpi.o
|
||||||
|
lib-y += memcpy_rpi.o memmove_rpi.o memset_rpi.o memcmp_rpi.o
|
||||||
|
else
|
||||||
|
lib-y += memcpy.o memmove.o memset.o
|
||||||
|
endif
|
||||||
|
|
||||||
# using lib_ here won't override already available weak symbols
|
# using lib_ here won't override already available weak symbols
|
||||||
obj-$(CONFIG_UACCESS_WITH_MEMCPY) += uaccess_with_memcpy.o
|
obj-$(CONFIG_UACCESS_WITH_MEMCPY) += uaccess_with_memcpy.o
|
||||||
|
|
||||||
|
|||||||
159
arch/arm/lib/arm-mem.h
Normal file
159
arch/arm/lib/arm-mem.h
Normal file
@@ -0,0 +1,159 @@
|
|||||||
|
/*
|
||||||
|
Copyright (c) 2013, Raspberry Pi Foundation
|
||||||
|
Copyright (c) 2013, RISC OS Open Ltd
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
* Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
* Neither the name of the copyright holder nor the
|
||||||
|
names of its contributors may be used to endorse or promote products
|
||||||
|
derived from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
|
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.macro myfunc fname
|
||||||
|
.func fname
|
||||||
|
.global fname
|
||||||
|
fname:
|
||||||
|
.endm
|
||||||
|
|
||||||
|
.macro preload_leading_step1 backwards, ptr, base
|
||||||
|
/* If the destination is already 16-byte aligned, then we need to preload
|
||||||
|
* between 0 and prefetch_distance (inclusive) cache lines ahead so there
|
||||||
|
* are no gaps when the inner loop starts.
|
||||||
|
*/
|
||||||
|
.if backwards
|
||||||
|
sub ptr, base, #1
|
||||||
|
bic ptr, ptr, #31
|
||||||
|
.else
|
||||||
|
bic ptr, base, #31
|
||||||
|
.endif
|
||||||
|
.set OFFSET, 0
|
||||||
|
.rept prefetch_distance+1
|
||||||
|
pld [ptr, #OFFSET]
|
||||||
|
.if backwards
|
||||||
|
.set OFFSET, OFFSET-32
|
||||||
|
.else
|
||||||
|
.set OFFSET, OFFSET+32
|
||||||
|
.endif
|
||||||
|
.endr
|
||||||
|
.endm
|
||||||
|
|
||||||
|
.macro preload_leading_step2 backwards, ptr, base, leading_bytes, tmp
|
||||||
|
/* However, if the destination is not 16-byte aligned, we may need to
|
||||||
|
* preload one more cache line than that. The question we need to ask is:
|
||||||
|
* are the leading bytes more than the amount by which the source
|
||||||
|
* pointer will be rounded down for preloading, and if so, by how many
|
||||||
|
* cache lines?
|
||||||
|
*/
|
||||||
|
.if backwards
|
||||||
|
/* Here we compare against how many bytes we are into the
|
||||||
|
* cache line, counting down from the highest such address.
|
||||||
|
* Effectively, we want to calculate
|
||||||
|
* leading_bytes = dst&15
|
||||||
|
* cacheline_offset = 31-((src-leading_bytes-1)&31)
|
||||||
|
* extra_needed = leading_bytes - cacheline_offset
|
||||||
|
* and test if extra_needed is <= 0, or rearranging:
|
||||||
|
* leading_bytes + (src-leading_bytes-1)&31 <= 31
|
||||||
|
*/
|
||||||
|
mov tmp, base, lsl #32-5
|
||||||
|
sbc tmp, tmp, leading_bytes, lsl #32-5
|
||||||
|
adds tmp, tmp, leading_bytes, lsl #32-5
|
||||||
|
bcc 61f
|
||||||
|
pld [ptr, #-32*(prefetch_distance+1)]
|
||||||
|
.else
|
||||||
|
/* Effectively, we want to calculate
|
||||||
|
* leading_bytes = (-dst)&15
|
||||||
|
* cacheline_offset = (src+leading_bytes)&31
|
||||||
|
* extra_needed = leading_bytes - cacheline_offset
|
||||||
|
* and test if extra_needed is <= 0.
|
||||||
|
*/
|
||||||
|
mov tmp, base, lsl #32-5
|
||||||
|
add tmp, tmp, leading_bytes, lsl #32-5
|
||||||
|
rsbs tmp, tmp, leading_bytes, lsl #32-5
|
||||||
|
bls 61f
|
||||||
|
pld [ptr, #32*(prefetch_distance+1)]
|
||||||
|
.endif
|
||||||
|
61:
|
||||||
|
.endm
|
||||||
|
|
||||||
|
.macro preload_trailing backwards, base, remain, tmp
|
||||||
|
/* We need either 0, 1 or 2 extra preloads */
|
||||||
|
.if backwards
|
||||||
|
rsb tmp, base, #0
|
||||||
|
mov tmp, tmp, lsl #32-5
|
||||||
|
.else
|
||||||
|
mov tmp, base, lsl #32-5
|
||||||
|
.endif
|
||||||
|
adds tmp, tmp, remain, lsl #32-5
|
||||||
|
adceqs tmp, tmp, #0
|
||||||
|
/* The instruction above has two effects: ensures Z is only
|
||||||
|
* set if C was clear (so Z indicates that both shifted quantities
|
||||||
|
* were 0), and clears C if Z was set (so C indicates that the sum
|
||||||
|
* of the shifted quantities was greater and not equal to 32) */
|
||||||
|
beq 82f
|
||||||
|
.if backwards
|
||||||
|
sub tmp, base, #1
|
||||||
|
bic tmp, tmp, #31
|
||||||
|
.else
|
||||||
|
bic tmp, base, #31
|
||||||
|
.endif
|
||||||
|
bcc 81f
|
||||||
|
.if backwards
|
||||||
|
pld [tmp, #-32*(prefetch_distance+1)]
|
||||||
|
81:
|
||||||
|
pld [tmp, #-32*prefetch_distance]
|
||||||
|
.else
|
||||||
|
pld [tmp, #32*(prefetch_distance+2)]
|
||||||
|
81:
|
||||||
|
pld [tmp, #32*(prefetch_distance+1)]
|
||||||
|
.endif
|
||||||
|
82:
|
||||||
|
.endm
|
||||||
|
|
||||||
|
.macro preload_all backwards, narrow_case, shift, base, remain, tmp0, tmp1
|
||||||
|
.if backwards
|
||||||
|
sub tmp0, base, #1
|
||||||
|
bic tmp0, tmp0, #31
|
||||||
|
pld [tmp0]
|
||||||
|
sub tmp1, base, remain, lsl #shift
|
||||||
|
.else
|
||||||
|
bic tmp0, base, #31
|
||||||
|
pld [tmp0]
|
||||||
|
add tmp1, base, remain, lsl #shift
|
||||||
|
sub tmp1, tmp1, #1
|
||||||
|
.endif
|
||||||
|
bic tmp1, tmp1, #31
|
||||||
|
cmp tmp1, tmp0
|
||||||
|
beq 92f
|
||||||
|
.if narrow_case
|
||||||
|
/* In this case, all the data fits in either 1 or 2 cache lines */
|
||||||
|
pld [tmp1]
|
||||||
|
.else
|
||||||
|
91:
|
||||||
|
.if backwards
|
||||||
|
sub tmp0, tmp0, #32
|
||||||
|
.else
|
||||||
|
add tmp0, tmp0, #32
|
||||||
|
.endif
|
||||||
|
cmp tmp0, tmp1
|
||||||
|
pld [tmp0]
|
||||||
|
bne 91b
|
||||||
|
.endif
|
||||||
|
92:
|
||||||
|
.endm
|
||||||
@@ -89,11 +89,13 @@
|
|||||||
|
|
||||||
.text
|
.text
|
||||||
|
|
||||||
ENTRY(arm_copy_from_user)
|
ENTRY(__copy_from_user_std)
|
||||||
|
WEAK(arm_copy_from_user)
|
||||||
|
|
||||||
#include "copy_template.S"
|
#include "copy_template.S"
|
||||||
|
|
||||||
ENDPROC(arm_copy_from_user)
|
ENDPROC(arm_copy_from_user)
|
||||||
|
ENDPROC(__copy_from_user_std)
|
||||||
|
|
||||||
.pushsection .fixup,"ax"
|
.pushsection .fixup,"ax"
|
||||||
.align 0
|
.align 0
|
||||||
|
|||||||
37
arch/arm/lib/exports_rpi.c
Normal file
37
arch/arm/lib/exports_rpi.c
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2014, Raspberry Pi (Trading) Ltd.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions, and the following disclaimer,
|
||||||
|
* without modification.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* 3. The names of the above-listed copyright holders may not be used
|
||||||
|
* to endorse or promote products derived from this software without
|
||||||
|
* specific prior written permission.
|
||||||
|
*
|
||||||
|
* ALTERNATIVELY, this software may be distributed under the terms of the
|
||||||
|
* GNU General Public License ("GPL") version 2, as published by the Free
|
||||||
|
* Software Foundation.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||||
|
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/module.h>
|
||||||
|
|
||||||
|
EXPORT_SYMBOL(memcmp);
|
||||||
285
arch/arm/lib/memcmp_rpi.S
Normal file
285
arch/arm/lib/memcmp_rpi.S
Normal file
@@ -0,0 +1,285 @@
|
|||||||
|
/*
|
||||||
|
Copyright (c) 2013, Raspberry Pi Foundation
|
||||||
|
Copyright (c) 2013, RISC OS Open Ltd
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
* Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
* Neither the name of the copyright holder nor the
|
||||||
|
names of its contributors may be used to endorse or promote products
|
||||||
|
derived from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
|
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/linkage.h>
|
||||||
|
#include "arm-mem.h"
|
||||||
|
|
||||||
|
/* Prevent the stack from becoming executable */
|
||||||
|
#if defined(__linux__) && defined(__ELF__)
|
||||||
|
.section .note.GNU-stack,"",%progbits
|
||||||
|
#endif
|
||||||
|
|
||||||
|
.text
|
||||||
|
.arch armv6
|
||||||
|
.object_arch armv4
|
||||||
|
.arm
|
||||||
|
.altmacro
|
||||||
|
.p2align 2
|
||||||
|
|
||||||
|
.macro memcmp_process_head unaligned
|
||||||
|
.if unaligned
|
||||||
|
ldr DAT0, [S_1], #4
|
||||||
|
ldr DAT1, [S_1], #4
|
||||||
|
ldr DAT2, [S_1], #4
|
||||||
|
ldr DAT3, [S_1], #4
|
||||||
|
.else
|
||||||
|
ldmia S_1!, {DAT0, DAT1, DAT2, DAT3}
|
||||||
|
.endif
|
||||||
|
ldmia S_2!, {DAT4, DAT5, DAT6, DAT7}
|
||||||
|
.endm
|
||||||
|
|
||||||
|
.macro memcmp_process_tail
|
||||||
|
cmp DAT0, DAT4
|
||||||
|
cmpeq DAT1, DAT5
|
||||||
|
cmpeq DAT2, DAT6
|
||||||
|
cmpeq DAT3, DAT7
|
||||||
|
bne 200f
|
||||||
|
.endm
|
||||||
|
|
||||||
|
.macro memcmp_leading_31bytes
|
||||||
|
movs DAT0, OFF, lsl #31
|
||||||
|
ldrmib DAT0, [S_1], #1
|
||||||
|
ldrcsh DAT1, [S_1], #2
|
||||||
|
ldrmib DAT4, [S_2], #1
|
||||||
|
ldrcsh DAT5, [S_2], #2
|
||||||
|
movpl DAT0, #0
|
||||||
|
movcc DAT1, #0
|
||||||
|
movpl DAT4, #0
|
||||||
|
movcc DAT5, #0
|
||||||
|
submi N, N, #1
|
||||||
|
subcs N, N, #2
|
||||||
|
cmp DAT0, DAT4
|
||||||
|
cmpeq DAT1, DAT5
|
||||||
|
bne 200f
|
||||||
|
movs DAT0, OFF, lsl #29
|
||||||
|
ldrmi DAT0, [S_1], #4
|
||||||
|
ldrcs DAT1, [S_1], #4
|
||||||
|
ldrcs DAT2, [S_1], #4
|
||||||
|
ldrmi DAT4, [S_2], #4
|
||||||
|
ldmcsia S_2!, {DAT5, DAT6}
|
||||||
|
movpl DAT0, #0
|
||||||
|
movcc DAT1, #0
|
||||||
|
movcc DAT2, #0
|
||||||
|
movpl DAT4, #0
|
||||||
|
movcc DAT5, #0
|
||||||
|
movcc DAT6, #0
|
||||||
|
submi N, N, #4
|
||||||
|
subcs N, N, #8
|
||||||
|
cmp DAT0, DAT4
|
||||||
|
cmpeq DAT1, DAT5
|
||||||
|
cmpeq DAT2, DAT6
|
||||||
|
bne 200f
|
||||||
|
tst OFF, #16
|
||||||
|
beq 105f
|
||||||
|
memcmp_process_head 1
|
||||||
|
sub N, N, #16
|
||||||
|
memcmp_process_tail
|
||||||
|
105:
|
||||||
|
.endm
|
||||||
|
|
||||||
|
.macro memcmp_trailing_15bytes unaligned
|
||||||
|
movs N, N, lsl #29
|
||||||
|
.if unaligned
|
||||||
|
ldrcs DAT0, [S_1], #4
|
||||||
|
ldrcs DAT1, [S_1], #4
|
||||||
|
.else
|
||||||
|
ldmcsia S_1!, {DAT0, DAT1}
|
||||||
|
.endif
|
||||||
|
ldrmi DAT2, [S_1], #4
|
||||||
|
ldmcsia S_2!, {DAT4, DAT5}
|
||||||
|
ldrmi DAT6, [S_2], #4
|
||||||
|
movcc DAT0, #0
|
||||||
|
movcc DAT1, #0
|
||||||
|
movpl DAT2, #0
|
||||||
|
movcc DAT4, #0
|
||||||
|
movcc DAT5, #0
|
||||||
|
movpl DAT6, #0
|
||||||
|
cmp DAT0, DAT4
|
||||||
|
cmpeq DAT1, DAT5
|
||||||
|
cmpeq DAT2, DAT6
|
||||||
|
bne 200f
|
||||||
|
movs N, N, lsl #2
|
||||||
|
ldrcsh DAT0, [S_1], #2
|
||||||
|
ldrmib DAT1, [S_1]
|
||||||
|
ldrcsh DAT4, [S_2], #2
|
||||||
|
ldrmib DAT5, [S_2]
|
||||||
|
movcc DAT0, #0
|
||||||
|
movpl DAT1, #0
|
||||||
|
movcc DAT4, #0
|
||||||
|
movpl DAT5, #0
|
||||||
|
cmp DAT0, DAT4
|
||||||
|
cmpeq DAT1, DAT5
|
||||||
|
bne 200f
|
||||||
|
.endm
|
||||||
|
|
||||||
|
.macro memcmp_long_inner_loop unaligned
|
||||||
|
110:
|
||||||
|
memcmp_process_head unaligned
|
||||||
|
pld [S_2, #prefetch_distance*32 + 16]
|
||||||
|
memcmp_process_tail
|
||||||
|
memcmp_process_head unaligned
|
||||||
|
pld [S_1, OFF]
|
||||||
|
memcmp_process_tail
|
||||||
|
subs N, N, #32
|
||||||
|
bhs 110b
|
||||||
|
/* Just before the final (prefetch_distance+1) 32-byte blocks,
|
||||||
|
* deal with final preloads */
|
||||||
|
preload_trailing 0, S_1, N, DAT0
|
||||||
|
preload_trailing 0, S_2, N, DAT0
|
||||||
|
add N, N, #(prefetch_distance+2)*32 - 16
|
||||||
|
120:
|
||||||
|
memcmp_process_head unaligned
|
||||||
|
memcmp_process_tail
|
||||||
|
subs N, N, #16
|
||||||
|
bhs 120b
|
||||||
|
/* Trailing words and bytes */
|
||||||
|
tst N, #15
|
||||||
|
beq 199f
|
||||||
|
memcmp_trailing_15bytes unaligned
|
||||||
|
199: /* Reached end without detecting a difference */
|
||||||
|
mov a1, #0
|
||||||
|
setend le
|
||||||
|
pop {DAT1-DAT6, pc}
|
||||||
|
.endm
|
||||||
|
|
||||||
|
.macro memcmp_short_inner_loop unaligned
|
||||||
|
subs N, N, #16 /* simplifies inner loop termination */
|
||||||
|
blo 122f
|
||||||
|
120:
|
||||||
|
memcmp_process_head unaligned
|
||||||
|
memcmp_process_tail
|
||||||
|
subs N, N, #16
|
||||||
|
bhs 120b
|
||||||
|
122: /* Trailing words and bytes */
|
||||||
|
tst N, #15
|
||||||
|
beq 199f
|
||||||
|
memcmp_trailing_15bytes unaligned
|
||||||
|
199: /* Reached end without detecting a difference */
|
||||||
|
mov a1, #0
|
||||||
|
setend le
|
||||||
|
pop {DAT1-DAT6, pc}
|
||||||
|
.endm
|
||||||
|
|
||||||
|
/*
|
||||||
|
* int memcmp(const void *s1, const void *s2, size_t n);
|
||||||
|
* On entry:
|
||||||
|
* a1 = pointer to buffer 1
|
||||||
|
* a2 = pointer to buffer 2
|
||||||
|
* a3 = number of bytes to compare (as unsigned chars)
|
||||||
|
* On exit:
|
||||||
|
* a1 = >0/=0/<0 if s1 >/=/< s2
|
||||||
|
*/
|
||||||
|
|
||||||
|
.set prefetch_distance, 2
|
||||||
|
|
||||||
|
ENTRY(memcmp)
|
||||||
|
S_1 .req a1
|
||||||
|
S_2 .req a2
|
||||||
|
N .req a3
|
||||||
|
DAT0 .req a4
|
||||||
|
DAT1 .req v1
|
||||||
|
DAT2 .req v2
|
||||||
|
DAT3 .req v3
|
||||||
|
DAT4 .req v4
|
||||||
|
DAT5 .req v5
|
||||||
|
DAT6 .req v6
|
||||||
|
DAT7 .req ip
|
||||||
|
OFF .req lr
|
||||||
|
|
||||||
|
push {DAT1-DAT6, lr}
|
||||||
|
setend be /* lowest-addressed bytes are most significant */
|
||||||
|
|
||||||
|
/* To preload ahead as we go, we need at least (prefetch_distance+2) 32-byte blocks */
|
||||||
|
cmp N, #(prefetch_distance+3)*32 - 1
|
||||||
|
blo 170f
|
||||||
|
|
||||||
|
/* Long case */
|
||||||
|
/* Adjust N so that the decrement instruction can also test for
|
||||||
|
* inner loop termination. We want it to stop when there are
|
||||||
|
* (prefetch_distance+1) complete blocks to go. */
|
||||||
|
sub N, N, #(prefetch_distance+2)*32
|
||||||
|
preload_leading_step1 0, DAT0, S_1
|
||||||
|
preload_leading_step1 0, DAT1, S_2
|
||||||
|
tst S_2, #31
|
||||||
|
beq 154f
|
||||||
|
rsb OFF, S_2, #0 /* no need to AND with 15 here */
|
||||||
|
preload_leading_step2 0, DAT0, S_1, OFF, DAT2
|
||||||
|
preload_leading_step2 0, DAT1, S_2, OFF, DAT2
|
||||||
|
memcmp_leading_31bytes
|
||||||
|
154: /* Second source now cacheline (32-byte) aligned; we have at
|
||||||
|
* least one prefetch to go. */
|
||||||
|
/* Prefetch offset is best selected such that it lies in the
|
||||||
|
* first 8 of each 32 bytes - but it's just as easy to aim for
|
||||||
|
* the first one */
|
||||||
|
and OFF, S_1, #31
|
||||||
|
rsb OFF, OFF, #32*prefetch_distance
|
||||||
|
tst S_1, #3
|
||||||
|
bne 140f
|
||||||
|
memcmp_long_inner_loop 0
|
||||||
|
140: memcmp_long_inner_loop 1
|
||||||
|
|
||||||
|
170: /* Short case */
|
||||||
|
teq N, #0
|
||||||
|
beq 199f
|
||||||
|
preload_all 0, 0, 0, S_1, N, DAT0, DAT1
|
||||||
|
preload_all 0, 0, 0, S_2, N, DAT0, DAT1
|
||||||
|
tst S_2, #3
|
||||||
|
beq 174f
|
||||||
|
172: subs N, N, #1
|
||||||
|
blo 199f
|
||||||
|
ldrb DAT0, [S_1], #1
|
||||||
|
ldrb DAT4, [S_2], #1
|
||||||
|
cmp DAT0, DAT4
|
||||||
|
bne 200f
|
||||||
|
tst S_2, #3
|
||||||
|
bne 172b
|
||||||
|
174: /* Second source now 4-byte aligned; we have 0 or more bytes to go */
|
||||||
|
tst S_1, #3
|
||||||
|
bne 140f
|
||||||
|
memcmp_short_inner_loop 0
|
||||||
|
140: memcmp_short_inner_loop 1
|
||||||
|
|
||||||
|
200: /* Difference found: determine sign. */
|
||||||
|
movhi a1, #1
|
||||||
|
movlo a1, #-1
|
||||||
|
setend le
|
||||||
|
pop {DAT1-DAT6, pc}
|
||||||
|
|
||||||
|
.unreq S_1
|
||||||
|
.unreq S_2
|
||||||
|
.unreq N
|
||||||
|
.unreq DAT0
|
||||||
|
.unreq DAT1
|
||||||
|
.unreq DAT2
|
||||||
|
.unreq DAT3
|
||||||
|
.unreq DAT4
|
||||||
|
.unreq DAT5
|
||||||
|
.unreq DAT6
|
||||||
|
.unreq DAT7
|
||||||
|
.unreq OFF
|
||||||
|
ENDPROC(memcmp)
|
||||||
61
arch/arm/lib/memcpy_rpi.S
Normal file
61
arch/arm/lib/memcpy_rpi.S
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
/*
|
||||||
|
Copyright (c) 2013, Raspberry Pi Foundation
|
||||||
|
Copyright (c) 2013, RISC OS Open Ltd
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
* Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
* Neither the name of the copyright holder nor the
|
||||||
|
names of its contributors may be used to endorse or promote products
|
||||||
|
derived from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
|
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/linkage.h>
|
||||||
|
#include "arm-mem.h"
|
||||||
|
#include "memcpymove.h"
|
||||||
|
|
||||||
|
/* Prevent the stack from becoming executable */
|
||||||
|
#if defined(__linux__) && defined(__ELF__)
|
||||||
|
.section .note.GNU-stack,"",%progbits
|
||||||
|
#endif
|
||||||
|
|
||||||
|
.text
|
||||||
|
.arch armv6
|
||||||
|
.object_arch armv4
|
||||||
|
.arm
|
||||||
|
.altmacro
|
||||||
|
.p2align 2
|
||||||
|
|
||||||
|
/*
|
||||||
|
* void *memcpy(void * restrict s1, const void * restrict s2, size_t n);
|
||||||
|
* On entry:
|
||||||
|
* a1 = pointer to destination
|
||||||
|
* a2 = pointer to source
|
||||||
|
* a3 = number of bytes to copy
|
||||||
|
* On exit:
|
||||||
|
* a1 preserved
|
||||||
|
*/
|
||||||
|
|
||||||
|
.set prefetch_distance, 3
|
||||||
|
|
||||||
|
ENTRY(mmiocpy)
|
||||||
|
ENTRY(memcpy)
|
||||||
|
memcpy 0
|
||||||
|
ENDPROC(memcpy)
|
||||||
|
ENDPROC(mmiocpy)
|
||||||
506
arch/arm/lib/memcpymove.h
Normal file
506
arch/arm/lib/memcpymove.h
Normal file
@@ -0,0 +1,506 @@
|
|||||||
|
/*
|
||||||
|
Copyright (c) 2013, Raspberry Pi Foundation
|
||||||
|
Copyright (c) 2013, RISC OS Open Ltd
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
* Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
* Neither the name of the copyright holder nor the
|
||||||
|
names of its contributors may be used to endorse or promote products
|
||||||
|
derived from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
|
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.macro unaligned_words backwards, align, use_pld, words, r0, r1, r2, r3, r4, r5, r6, r7, r8
|
||||||
|
.if words == 1
|
||||||
|
.if backwards
|
||||||
|
mov r1, r0, lsl #32-align*8
|
||||||
|
ldr r0, [S, #-4]!
|
||||||
|
orr r1, r1, r0, lsr #align*8
|
||||||
|
str r1, [D, #-4]!
|
||||||
|
.else
|
||||||
|
mov r0, r1, lsr #align*8
|
||||||
|
ldr r1, [S, #4]!
|
||||||
|
orr r0, r0, r1, lsl #32-align*8
|
||||||
|
str r0, [D], #4
|
||||||
|
.endif
|
||||||
|
.elseif words == 2
|
||||||
|
.if backwards
|
||||||
|
ldr r1, [S, #-4]!
|
||||||
|
mov r2, r0, lsl #32-align*8
|
||||||
|
ldr r0, [S, #-4]!
|
||||||
|
orr r2, r2, r1, lsr #align*8
|
||||||
|
mov r1, r1, lsl #32-align*8
|
||||||
|
orr r1, r1, r0, lsr #align*8
|
||||||
|
stmdb D!, {r1, r2}
|
||||||
|
.else
|
||||||
|
ldr r1, [S, #4]!
|
||||||
|
mov r0, r2, lsr #align*8
|
||||||
|
ldr r2, [S, #4]!
|
||||||
|
orr r0, r0, r1, lsl #32-align*8
|
||||||
|
mov r1, r1, lsr #align*8
|
||||||
|
orr r1, r1, r2, lsl #32-align*8
|
||||||
|
stmia D!, {r0, r1}
|
||||||
|
.endif
|
||||||
|
.elseif words == 4
|
||||||
|
.if backwards
|
||||||
|
ldmdb S!, {r2, r3}
|
||||||
|
mov r4, r0, lsl #32-align*8
|
||||||
|
ldmdb S!, {r0, r1}
|
||||||
|
orr r4, r4, r3, lsr #align*8
|
||||||
|
mov r3, r3, lsl #32-align*8
|
||||||
|
orr r3, r3, r2, lsr #align*8
|
||||||
|
mov r2, r2, lsl #32-align*8
|
||||||
|
orr r2, r2, r1, lsr #align*8
|
||||||
|
mov r1, r1, lsl #32-align*8
|
||||||
|
orr r1, r1, r0, lsr #align*8
|
||||||
|
stmdb D!, {r1, r2, r3, r4}
|
||||||
|
.else
|
||||||
|
ldmib S!, {r1, r2}
|
||||||
|
mov r0, r4, lsr #align*8
|
||||||
|
ldmib S!, {r3, r4}
|
||||||
|
orr r0, r0, r1, lsl #32-align*8
|
||||||
|
mov r1, r1, lsr #align*8
|
||||||
|
orr r1, r1, r2, lsl #32-align*8
|
||||||
|
mov r2, r2, lsr #align*8
|
||||||
|
orr r2, r2, r3, lsl #32-align*8
|
||||||
|
mov r3, r3, lsr #align*8
|
||||||
|
orr r3, r3, r4, lsl #32-align*8
|
||||||
|
stmia D!, {r0, r1, r2, r3}
|
||||||
|
.endif
|
||||||
|
.elseif words == 8
|
||||||
|
.if backwards
|
||||||
|
ldmdb S!, {r4, r5, r6, r7}
|
||||||
|
mov r8, r0, lsl #32-align*8
|
||||||
|
ldmdb S!, {r0, r1, r2, r3}
|
||||||
|
.if use_pld
|
||||||
|
pld [S, OFF]
|
||||||
|
.endif
|
||||||
|
orr r8, r8, r7, lsr #align*8
|
||||||
|
mov r7, r7, lsl #32-align*8
|
||||||
|
orr r7, r7, r6, lsr #align*8
|
||||||
|
mov r6, r6, lsl #32-align*8
|
||||||
|
orr r6, r6, r5, lsr #align*8
|
||||||
|
mov r5, r5, lsl #32-align*8
|
||||||
|
orr r5, r5, r4, lsr #align*8
|
||||||
|
mov r4, r4, lsl #32-align*8
|
||||||
|
orr r4, r4, r3, lsr #align*8
|
||||||
|
mov r3, r3, lsl #32-align*8
|
||||||
|
orr r3, r3, r2, lsr #align*8
|
||||||
|
mov r2, r2, lsl #32-align*8
|
||||||
|
orr r2, r2, r1, lsr #align*8
|
||||||
|
mov r1, r1, lsl #32-align*8
|
||||||
|
orr r1, r1, r0, lsr #align*8
|
||||||
|
stmdb D!, {r5, r6, r7, r8}
|
||||||
|
stmdb D!, {r1, r2, r3, r4}
|
||||||
|
.else
|
||||||
|
ldmib S!, {r1, r2, r3, r4}
|
||||||
|
mov r0, r8, lsr #align*8
|
||||||
|
ldmib S!, {r5, r6, r7, r8}
|
||||||
|
.if use_pld
|
||||||
|
pld [S, OFF]
|
||||||
|
.endif
|
||||||
|
orr r0, r0, r1, lsl #32-align*8
|
||||||
|
mov r1, r1, lsr #align*8
|
||||||
|
orr r1, r1, r2, lsl #32-align*8
|
||||||
|
mov r2, r2, lsr #align*8
|
||||||
|
orr r2, r2, r3, lsl #32-align*8
|
||||||
|
mov r3, r3, lsr #align*8
|
||||||
|
orr r3, r3, r4, lsl #32-align*8
|
||||||
|
mov r4, r4, lsr #align*8
|
||||||
|
orr r4, r4, r5, lsl #32-align*8
|
||||||
|
mov r5, r5, lsr #align*8
|
||||||
|
orr r5, r5, r6, lsl #32-align*8
|
||||||
|
mov r6, r6, lsr #align*8
|
||||||
|
orr r6, r6, r7, lsl #32-align*8
|
||||||
|
mov r7, r7, lsr #align*8
|
||||||
|
orr r7, r7, r8, lsl #32-align*8
|
||||||
|
stmia D!, {r0, r1, r2, r3}
|
||||||
|
stmia D!, {r4, r5, r6, r7}
|
||||||
|
.endif
|
||||||
|
.endif
|
||||||
|
.endm
|
||||||
|
|
||||||
|
.macro memcpy_leading_15bytes backwards, align
|
||||||
|
movs DAT1, DAT2, lsl #31
|
||||||
|
sub N, N, DAT2
|
||||||
|
.if backwards
|
||||||
|
ldrmib DAT0, [S, #-1]!
|
||||||
|
ldrcsh DAT1, [S, #-2]!
|
||||||
|
strmib DAT0, [D, #-1]!
|
||||||
|
strcsh DAT1, [D, #-2]!
|
||||||
|
.else
|
||||||
|
ldrmib DAT0, [S], #1
|
||||||
|
ldrcsh DAT1, [S], #2
|
||||||
|
strmib DAT0, [D], #1
|
||||||
|
strcsh DAT1, [D], #2
|
||||||
|
.endif
|
||||||
|
movs DAT1, DAT2, lsl #29
|
||||||
|
.if backwards
|
||||||
|
ldrmi DAT0, [S, #-4]!
|
||||||
|
.if align == 0
|
||||||
|
ldmcsdb S!, {DAT1, DAT2}
|
||||||
|
.else
|
||||||
|
ldrcs DAT2, [S, #-4]!
|
||||||
|
ldrcs DAT1, [S, #-4]!
|
||||||
|
.endif
|
||||||
|
strmi DAT0, [D, #-4]!
|
||||||
|
stmcsdb D!, {DAT1, DAT2}
|
||||||
|
.else
|
||||||
|
ldrmi DAT0, [S], #4
|
||||||
|
.if align == 0
|
||||||
|
ldmcsia S!, {DAT1, DAT2}
|
||||||
|
.else
|
||||||
|
ldrcs DAT1, [S], #4
|
||||||
|
ldrcs DAT2, [S], #4
|
||||||
|
.endif
|
||||||
|
strmi DAT0, [D], #4
|
||||||
|
stmcsia D!, {DAT1, DAT2}
|
||||||
|
.endif
|
||||||
|
.endm
|
||||||
|
|
||||||
|
.macro memcpy_trailing_15bytes backwards, align
|
||||||
|
movs N, N, lsl #29
|
||||||
|
.if backwards
|
||||||
|
.if align == 0
|
||||||
|
ldmcsdb S!, {DAT0, DAT1}
|
||||||
|
.else
|
||||||
|
ldrcs DAT1, [S, #-4]!
|
||||||
|
ldrcs DAT0, [S, #-4]!
|
||||||
|
.endif
|
||||||
|
ldrmi DAT2, [S, #-4]!
|
||||||
|
stmcsdb D!, {DAT0, DAT1}
|
||||||
|
strmi DAT2, [D, #-4]!
|
||||||
|
.else
|
||||||
|
.if align == 0
|
||||||
|
ldmcsia S!, {DAT0, DAT1}
|
||||||
|
.else
|
||||||
|
ldrcs DAT0, [S], #4
|
||||||
|
ldrcs DAT1, [S], #4
|
||||||
|
.endif
|
||||||
|
ldrmi DAT2, [S], #4
|
||||||
|
stmcsia D!, {DAT0, DAT1}
|
||||||
|
strmi DAT2, [D], #4
|
||||||
|
.endif
|
||||||
|
movs N, N, lsl #2
|
||||||
|
.if backwards
|
||||||
|
ldrcsh DAT0, [S, #-2]!
|
||||||
|
ldrmib DAT1, [S, #-1]
|
||||||
|
strcsh DAT0, [D, #-2]!
|
||||||
|
strmib DAT1, [D, #-1]
|
||||||
|
.else
|
||||||
|
ldrcsh DAT0, [S], #2
|
||||||
|
ldrmib DAT1, [S]
|
||||||
|
strcsh DAT0, [D], #2
|
||||||
|
strmib DAT1, [D]
|
||||||
|
.endif
|
||||||
|
.endm
|
||||||
|
|
||||||
|
.macro memcpy_long_inner_loop backwards, align
|
||||||
|
.if align != 0
|
||||||
|
.if backwards
|
||||||
|
ldr DAT0, [S, #-align]!
|
||||||
|
.else
|
||||||
|
ldr LAST, [S, #-align]!
|
||||||
|
.endif
|
||||||
|
.endif
|
||||||
|
110:
|
||||||
|
.if align == 0
|
||||||
|
.if backwards
|
||||||
|
ldmdb S!, {DAT0, DAT1, DAT2, DAT3, DAT4, DAT5, DAT6, LAST}
|
||||||
|
pld [S, OFF]
|
||||||
|
stmdb D!, {DAT4, DAT5, DAT6, LAST}
|
||||||
|
stmdb D!, {DAT0, DAT1, DAT2, DAT3}
|
||||||
|
.else
|
||||||
|
ldmia S!, {DAT0, DAT1, DAT2, DAT3, DAT4, DAT5, DAT6, LAST}
|
||||||
|
pld [S, OFF]
|
||||||
|
stmia D!, {DAT0, DAT1, DAT2, DAT3}
|
||||||
|
stmia D!, {DAT4, DAT5, DAT6, LAST}
|
||||||
|
.endif
|
||||||
|
.else
|
||||||
|
unaligned_words backwards, align, 1, 8, DAT0, DAT1, DAT2, DAT3, DAT4, DAT5, DAT6, DAT7, LAST
|
||||||
|
.endif
|
||||||
|
subs N, N, #32
|
||||||
|
bhs 110b
|
||||||
|
/* Just before the final (prefetch_distance+1) 32-byte blocks, deal with final preloads */
|
||||||
|
preload_trailing backwards, S, N, OFF
|
||||||
|
add N, N, #(prefetch_distance+2)*32 - 32
|
||||||
|
120:
|
||||||
|
.if align == 0
|
||||||
|
.if backwards
|
||||||
|
ldmdb S!, {DAT0, DAT1, DAT2, DAT3, DAT4, DAT5, DAT6, LAST}
|
||||||
|
stmdb D!, {DAT4, DAT5, DAT6, LAST}
|
||||||
|
stmdb D!, {DAT0, DAT1, DAT2, DAT3}
|
||||||
|
.else
|
||||||
|
ldmia S!, {DAT0, DAT1, DAT2, DAT3, DAT4, DAT5, DAT6, LAST}
|
||||||
|
stmia D!, {DAT0, DAT1, DAT2, DAT3}
|
||||||
|
stmia D!, {DAT4, DAT5, DAT6, LAST}
|
||||||
|
.endif
|
||||||
|
.else
|
||||||
|
unaligned_words backwards, align, 0, 8, DAT0, DAT1, DAT2, DAT3, DAT4, DAT5, DAT6, DAT7, LAST
|
||||||
|
.endif
|
||||||
|
subs N, N, #32
|
||||||
|
bhs 120b
|
||||||
|
tst N, #16
|
||||||
|
.if align == 0
|
||||||
|
.if backwards
|
||||||
|
ldmnedb S!, {DAT0, DAT1, DAT2, LAST}
|
||||||
|
stmnedb D!, {DAT0, DAT1, DAT2, LAST}
|
||||||
|
.else
|
||||||
|
ldmneia S!, {DAT0, DAT1, DAT2, LAST}
|
||||||
|
stmneia D!, {DAT0, DAT1, DAT2, LAST}
|
||||||
|
.endif
|
||||||
|
.else
|
||||||
|
beq 130f
|
||||||
|
unaligned_words backwards, align, 0, 4, DAT0, DAT1, DAT2, DAT3, LAST
|
||||||
|
130:
|
||||||
|
.endif
|
||||||
|
/* Trailing words and bytes */
|
||||||
|
tst N, #15
|
||||||
|
beq 199f
|
||||||
|
.if align != 0
|
||||||
|
add S, S, #align
|
||||||
|
.endif
|
||||||
|
memcpy_trailing_15bytes backwards, align
|
||||||
|
199:
|
||||||
|
pop {DAT3, DAT4, DAT5, DAT6, DAT7}
|
||||||
|
pop {D, DAT1, DAT2, pc}
|
||||||
|
.endm
|
||||||
|
|
||||||
|
.macro memcpy_medium_inner_loop backwards, align
|
||||||
|
120:
|
||||||
|
.if backwards
|
||||||
|
.if align == 0
|
||||||
|
ldmdb S!, {DAT0, DAT1, DAT2, LAST}
|
||||||
|
.else
|
||||||
|
ldr LAST, [S, #-4]!
|
||||||
|
ldr DAT2, [S, #-4]!
|
||||||
|
ldr DAT1, [S, #-4]!
|
||||||
|
ldr DAT0, [S, #-4]!
|
||||||
|
.endif
|
||||||
|
stmdb D!, {DAT0, DAT1, DAT2, LAST}
|
||||||
|
.else
|
||||||
|
.if align == 0
|
||||||
|
ldmia S!, {DAT0, DAT1, DAT2, LAST}
|
||||||
|
.else
|
||||||
|
ldr DAT0, [S], #4
|
||||||
|
ldr DAT1, [S], #4
|
||||||
|
ldr DAT2, [S], #4
|
||||||
|
ldr LAST, [S], #4
|
||||||
|
.endif
|
||||||
|
stmia D!, {DAT0, DAT1, DAT2, LAST}
|
||||||
|
.endif
|
||||||
|
subs N, N, #16
|
||||||
|
bhs 120b
|
||||||
|
/* Trailing words and bytes */
|
||||||
|
tst N, #15
|
||||||
|
beq 199f
|
||||||
|
memcpy_trailing_15bytes backwards, align
|
||||||
|
199:
|
||||||
|
pop {D, DAT1, DAT2, pc}
|
||||||
|
.endm
|
||||||
|
|
||||||
|
.macro memcpy_short_inner_loop backwards, align
|
||||||
|
tst N, #16
|
||||||
|
.if backwards
|
||||||
|
.if align == 0
|
||||||
|
ldmnedb S!, {DAT0, DAT1, DAT2, LAST}
|
||||||
|
.else
|
||||||
|
ldrne LAST, [S, #-4]!
|
||||||
|
ldrne DAT2, [S, #-4]!
|
||||||
|
ldrne DAT1, [S, #-4]!
|
||||||
|
ldrne DAT0, [S, #-4]!
|
||||||
|
.endif
|
||||||
|
stmnedb D!, {DAT0, DAT1, DAT2, LAST}
|
||||||
|
.else
|
||||||
|
.if align == 0
|
||||||
|
ldmneia S!, {DAT0, DAT1, DAT2, LAST}
|
||||||
|
.else
|
||||||
|
ldrne DAT0, [S], #4
|
||||||
|
ldrne DAT1, [S], #4
|
||||||
|
ldrne DAT2, [S], #4
|
||||||
|
ldrne LAST, [S], #4
|
||||||
|
.endif
|
||||||
|
stmneia D!, {DAT0, DAT1, DAT2, LAST}
|
||||||
|
.endif
|
||||||
|
memcpy_trailing_15bytes backwards, align
|
||||||
|
199:
|
||||||
|
pop {D, DAT1, DAT2, pc}
|
||||||
|
.endm
|
||||||
|
|
||||||
|
.macro memcpy backwards
|
||||||
|
D .req a1
|
||||||
|
S .req a2
|
||||||
|
N .req a3
|
||||||
|
DAT0 .req a4
|
||||||
|
DAT1 .req v1
|
||||||
|
DAT2 .req v2
|
||||||
|
DAT3 .req v3
|
||||||
|
DAT4 .req v4
|
||||||
|
DAT5 .req v5
|
||||||
|
DAT6 .req v6
|
||||||
|
DAT7 .req sl
|
||||||
|
LAST .req ip
|
||||||
|
OFF .req lr
|
||||||
|
|
||||||
|
.cfi_startproc
|
||||||
|
|
||||||
|
push {D, DAT1, DAT2, lr}
|
||||||
|
|
||||||
|
.cfi_def_cfa_offset 16
|
||||||
|
.cfi_rel_offset D, 0
|
||||||
|
.cfi_undefined S
|
||||||
|
.cfi_undefined N
|
||||||
|
.cfi_undefined DAT0
|
||||||
|
.cfi_rel_offset DAT1, 4
|
||||||
|
.cfi_rel_offset DAT2, 8
|
||||||
|
.cfi_undefined LAST
|
||||||
|
.cfi_rel_offset lr, 12
|
||||||
|
|
||||||
|
.if backwards
|
||||||
|
add D, D, N
|
||||||
|
add S, S, N
|
||||||
|
.endif
|
||||||
|
|
||||||
|
/* See if we're guaranteed to have at least one 16-byte aligned 16-byte write */
|
||||||
|
cmp N, #31
|
||||||
|
blo 170f
|
||||||
|
/* To preload ahead as we go, we need at least (prefetch_distance+2) 32-byte blocks */
|
||||||
|
cmp N, #(prefetch_distance+3)*32 - 1
|
||||||
|
blo 160f
|
||||||
|
|
||||||
|
/* Long case */
|
||||||
|
push {DAT3, DAT4, DAT5, DAT6, DAT7}
|
||||||
|
|
||||||
|
.cfi_def_cfa_offset 36
|
||||||
|
.cfi_rel_offset D, 20
|
||||||
|
.cfi_rel_offset DAT1, 24
|
||||||
|
.cfi_rel_offset DAT2, 28
|
||||||
|
.cfi_rel_offset DAT3, 0
|
||||||
|
.cfi_rel_offset DAT4, 4
|
||||||
|
.cfi_rel_offset DAT5, 8
|
||||||
|
.cfi_rel_offset DAT6, 12
|
||||||
|
.cfi_rel_offset DAT7, 16
|
||||||
|
.cfi_rel_offset lr, 32
|
||||||
|
|
||||||
|
/* Adjust N so that the decrement instruction can also test for
|
||||||
|
* inner loop termination. We want it to stop when there are
|
||||||
|
* (prefetch_distance+1) complete blocks to go. */
|
||||||
|
sub N, N, #(prefetch_distance+2)*32
|
||||||
|
preload_leading_step1 backwards, DAT0, S
|
||||||
|
.if backwards
|
||||||
|
/* Bug in GAS: it accepts, but mis-assembles the instruction
|
||||||
|
* ands DAT2, D, #60, 2
|
||||||
|
* which sets DAT2 to the number of leading bytes until destination is aligned and also clears C (sets borrow)
|
||||||
|
*/
|
||||||
|
.word 0xE210513C
|
||||||
|
beq 154f
|
||||||
|
.else
|
||||||
|
ands DAT2, D, #15
|
||||||
|
beq 154f
|
||||||
|
rsb DAT2, DAT2, #16 /* number of leading bytes until destination aligned */
|
||||||
|
.endif
|
||||||
|
preload_leading_step2 backwards, DAT0, S, DAT2, OFF
|
||||||
|
memcpy_leading_15bytes backwards, 1
|
||||||
|
154: /* Destination now 16-byte aligned; we have at least one prefetch as well as at least one 16-byte output block */
|
||||||
|
/* Prefetch offset is best selected such that it lies in the first 8 of each 32 bytes - but it's just as easy to aim for the first one */
|
||||||
|
.if backwards
|
||||||
|
rsb OFF, S, #3
|
||||||
|
and OFF, OFF, #28
|
||||||
|
sub OFF, OFF, #32*(prefetch_distance+1)
|
||||||
|
.else
|
||||||
|
and OFF, S, #28
|
||||||
|
rsb OFF, OFF, #32*prefetch_distance
|
||||||
|
.endif
|
||||||
|
movs DAT0, S, lsl #31
|
||||||
|
bhi 157f
|
||||||
|
bcs 156f
|
||||||
|
bmi 155f
|
||||||
|
memcpy_long_inner_loop backwards, 0
|
||||||
|
155: memcpy_long_inner_loop backwards, 1
|
||||||
|
156: memcpy_long_inner_loop backwards, 2
|
||||||
|
157: memcpy_long_inner_loop backwards, 3
|
||||||
|
|
||||||
|
.cfi_def_cfa_offset 16
|
||||||
|
.cfi_rel_offset D, 0
|
||||||
|
.cfi_rel_offset DAT1, 4
|
||||||
|
.cfi_rel_offset DAT2, 8
|
||||||
|
.cfi_same_value DAT3
|
||||||
|
.cfi_same_value DAT4
|
||||||
|
.cfi_same_value DAT5
|
||||||
|
.cfi_same_value DAT6
|
||||||
|
.cfi_same_value DAT7
|
||||||
|
.cfi_rel_offset lr, 12
|
||||||
|
|
||||||
|
160: /* Medium case */
|
||||||
|
preload_all backwards, 0, 0, S, N, DAT2, OFF
|
||||||
|
sub N, N, #16 /* simplifies inner loop termination */
|
||||||
|
.if backwards
|
||||||
|
ands DAT2, D, #15
|
||||||
|
beq 164f
|
||||||
|
.else
|
||||||
|
ands DAT2, D, #15
|
||||||
|
beq 164f
|
||||||
|
rsb DAT2, DAT2, #16
|
||||||
|
.endif
|
||||||
|
memcpy_leading_15bytes backwards, align
|
||||||
|
164: /* Destination now 16-byte aligned; we have at least one 16-byte output block */
|
||||||
|
tst S, #3
|
||||||
|
bne 140f
|
||||||
|
memcpy_medium_inner_loop backwards, 0
|
||||||
|
140: memcpy_medium_inner_loop backwards, 1
|
||||||
|
|
||||||
|
170: /* Short case, less than 31 bytes, so no guarantee of at least one 16-byte block */
|
||||||
|
teq N, #0
|
||||||
|
beq 199f
|
||||||
|
preload_all backwards, 1, 0, S, N, DAT2, LAST
|
||||||
|
tst D, #3
|
||||||
|
beq 174f
|
||||||
|
172: subs N, N, #1
|
||||||
|
blo 199f
|
||||||
|
.if backwards
|
||||||
|
ldrb DAT0, [S, #-1]!
|
||||||
|
strb DAT0, [D, #-1]!
|
||||||
|
.else
|
||||||
|
ldrb DAT0, [S], #1
|
||||||
|
strb DAT0, [D], #1
|
||||||
|
.endif
|
||||||
|
tst D, #3
|
||||||
|
bne 172b
|
||||||
|
174: /* Destination now 4-byte aligned; we have 0 or more output bytes to go */
|
||||||
|
tst S, #3
|
||||||
|
bne 140f
|
||||||
|
memcpy_short_inner_loop backwards, 0
|
||||||
|
140: memcpy_short_inner_loop backwards, 1
|
||||||
|
|
||||||
|
.cfi_endproc
|
||||||
|
|
||||||
|
.unreq D
|
||||||
|
.unreq S
|
||||||
|
.unreq N
|
||||||
|
.unreq DAT0
|
||||||
|
.unreq DAT1
|
||||||
|
.unreq DAT2
|
||||||
|
.unreq DAT3
|
||||||
|
.unreq DAT4
|
||||||
|
.unreq DAT5
|
||||||
|
.unreq DAT6
|
||||||
|
.unreq DAT7
|
||||||
|
.unreq LAST
|
||||||
|
.unreq OFF
|
||||||
|
.endm
|
||||||
61
arch/arm/lib/memmove_rpi.S
Normal file
61
arch/arm/lib/memmove_rpi.S
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
/*
|
||||||
|
Copyright (c) 2013, Raspberry Pi Foundation
|
||||||
|
Copyright (c) 2013, RISC OS Open Ltd
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
* Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
* Neither the name of the copyright holder nor the
|
||||||
|
names of its contributors may be used to endorse or promote products
|
||||||
|
derived from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
|
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/linkage.h>
|
||||||
|
#include "arm-mem.h"
|
||||||
|
#include "memcpymove.h"
|
||||||
|
|
||||||
|
/* Prevent the stack from becoming executable */
|
||||||
|
#if defined(__linux__) && defined(__ELF__)
|
||||||
|
.section .note.GNU-stack,"",%progbits
|
||||||
|
#endif
|
||||||
|
|
||||||
|
.text
|
||||||
|
.arch armv6
|
||||||
|
.object_arch armv4
|
||||||
|
.arm
|
||||||
|
.altmacro
|
||||||
|
.p2align 2
|
||||||
|
|
||||||
|
/*
|
||||||
|
* void *memmove(void *s1, const void *s2, size_t n);
|
||||||
|
* On entry:
|
||||||
|
* a1 = pointer to destination
|
||||||
|
* a2 = pointer to source
|
||||||
|
* a3 = number of bytes to copy
|
||||||
|
* On exit:
|
||||||
|
* a1 preserved
|
||||||
|
*/
|
||||||
|
|
||||||
|
.set prefetch_distance, 3
|
||||||
|
|
||||||
|
ENTRY(memmove)
|
||||||
|
cmp a2, a1
|
||||||
|
bpl memcpy /* pl works even over -1 - 0 and 0x7fffffff - 0x80000000 boundaries */
|
||||||
|
memcpy 1
|
||||||
|
ENDPROC(memmove)
|
||||||
123
arch/arm/lib/memset_rpi.S
Normal file
123
arch/arm/lib/memset_rpi.S
Normal file
@@ -0,0 +1,123 @@
|
|||||||
|
/*
|
||||||
|
Copyright (c) 2013, Raspberry Pi Foundation
|
||||||
|
Copyright (c) 2013, RISC OS Open Ltd
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
* Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
* Neither the name of the copyright holder nor the
|
||||||
|
names of its contributors may be used to endorse or promote products
|
||||||
|
derived from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
|
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/linkage.h>
|
||||||
|
#include "arm-mem.h"
|
||||||
|
|
||||||
|
/* Prevent the stack from becoming executable */
|
||||||
|
#if defined(__linux__) && defined(__ELF__)
|
||||||
|
.section .note.GNU-stack,"",%progbits
|
||||||
|
#endif
|
||||||
|
|
||||||
|
.text
|
||||||
|
.arch armv6
|
||||||
|
.object_arch armv4
|
||||||
|
.arm
|
||||||
|
.altmacro
|
||||||
|
.p2align 2
|
||||||
|
|
||||||
|
/*
|
||||||
|
* void *memset(void *s, int c, size_t n);
|
||||||
|
* On entry:
|
||||||
|
* a1 = pointer to buffer to fill
|
||||||
|
* a2 = byte pattern to fill with (caller-narrowed)
|
||||||
|
* a3 = number of bytes to fill
|
||||||
|
* On exit:
|
||||||
|
* a1 preserved
|
||||||
|
*/
|
||||||
|
ENTRY(mmioset)
|
||||||
|
ENTRY(memset)
|
||||||
|
S .req a1
|
||||||
|
DAT0 .req a2
|
||||||
|
N .req a3
|
||||||
|
DAT1 .req a4
|
||||||
|
DAT2 .req ip
|
||||||
|
DAT3 .req lr
|
||||||
|
|
||||||
|
orr DAT0, DAT0, lsl #8
|
||||||
|
push {S, lr}
|
||||||
|
orr DAT0, DAT0, lsl #16
|
||||||
|
mov DAT1, DAT0
|
||||||
|
|
||||||
|
/* See if we're guaranteed to have at least one 16-byte aligned 16-byte write */
|
||||||
|
cmp N, #31
|
||||||
|
blo 170f
|
||||||
|
|
||||||
|
161: sub N, N, #16 /* simplifies inner loop termination */
|
||||||
|
/* Leading words and bytes */
|
||||||
|
tst S, #15
|
||||||
|
beq 164f
|
||||||
|
rsb DAT3, S, #0 /* bits 0-3 = number of leading bytes until aligned */
|
||||||
|
movs DAT2, DAT3, lsl #31
|
||||||
|
submi N, N, #1
|
||||||
|
strmib DAT0, [S], #1
|
||||||
|
subcs N, N, #2
|
||||||
|
strcsh DAT0, [S], #2
|
||||||
|
movs DAT2, DAT3, lsl #29
|
||||||
|
submi N, N, #4
|
||||||
|
strmi DAT0, [S], #4
|
||||||
|
subcs N, N, #8
|
||||||
|
stmcsia S!, {DAT0, DAT1}
|
||||||
|
164: /* Delayed set up of DAT2 and DAT3 so we could use them as scratch registers above */
|
||||||
|
mov DAT2, DAT0
|
||||||
|
mov DAT3, DAT0
|
||||||
|
/* Now the inner loop of 16-byte stores */
|
||||||
|
165: stmia S!, {DAT0, DAT1, DAT2, DAT3}
|
||||||
|
subs N, N, #16
|
||||||
|
bhs 165b
|
||||||
|
166: /* Trailing words and bytes */
|
||||||
|
movs N, N, lsl #29
|
||||||
|
stmcsia S!, {DAT0, DAT1}
|
||||||
|
strmi DAT0, [S], #4
|
||||||
|
movs N, N, lsl #2
|
||||||
|
strcsh DAT0, [S], #2
|
||||||
|
strmib DAT0, [S]
|
||||||
|
199: pop {S, pc}
|
||||||
|
|
||||||
|
170: /* Short case */
|
||||||
|
mov DAT2, DAT0
|
||||||
|
mov DAT3, DAT0
|
||||||
|
tst S, #3
|
||||||
|
beq 174f
|
||||||
|
172: subs N, N, #1
|
||||||
|
blo 199b
|
||||||
|
strb DAT0, [S], #1
|
||||||
|
tst S, #3
|
||||||
|
bne 172b
|
||||||
|
174: tst N, #16
|
||||||
|
stmneia S!, {DAT0, DAT1, DAT2, DAT3}
|
||||||
|
b 166b
|
||||||
|
|
||||||
|
.unreq S
|
||||||
|
.unreq DAT0
|
||||||
|
.unreq N
|
||||||
|
.unreq DAT1
|
||||||
|
.unreq DAT2
|
||||||
|
.unreq DAT3
|
||||||
|
ENDPROC(memset)
|
||||||
|
ENDPROC(mmioset)
|
||||||
@@ -22,6 +22,14 @@
|
|||||||
#include <asm/current.h>
|
#include <asm/current.h>
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
|
|
||||||
|
#ifndef COPY_FROM_USER_THRESHOLD
|
||||||
|
#define COPY_FROM_USER_THRESHOLD 64
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef COPY_TO_USER_THRESHOLD
|
||||||
|
#define COPY_TO_USER_THRESHOLD 64
|
||||||
|
#endif
|
||||||
|
|
||||||
static int
|
static int
|
||||||
pin_page_for_write(const void __user *_addr, pte_t **ptep, spinlock_t **ptlp)
|
pin_page_for_write(const void __user *_addr, pte_t **ptep, spinlock_t **ptlp)
|
||||||
{
|
{
|
||||||
@@ -85,7 +93,44 @@ pin_page_for_write(const void __user *_addr, pte_t **ptep, spinlock_t **ptlp)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned long noinline
|
static int
|
||||||
|
pin_page_for_read(const void __user *_addr, pte_t **ptep, spinlock_t **ptlp)
|
||||||
|
{
|
||||||
|
unsigned long addr = (unsigned long)_addr;
|
||||||
|
pgd_t *pgd;
|
||||||
|
pmd_t *pmd;
|
||||||
|
pte_t *pte;
|
||||||
|
pud_t *pud;
|
||||||
|
spinlock_t *ptl;
|
||||||
|
|
||||||
|
pgd = pgd_offset(current->mm, addr);
|
||||||
|
if (unlikely(pgd_none(*pgd) || pgd_bad(*pgd)))
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
pud = pud_offset(pgd, addr);
|
||||||
|
if (unlikely(pud_none(*pud) || pud_bad(*pud)))
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
pmd = pmd_offset(pud, addr);
|
||||||
|
if (unlikely(pmd_none(*pmd) || pmd_bad(*pmd)))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
pte = pte_offset_map_lock(current->mm, pmd, addr, &ptl);
|
||||||
|
if (unlikely(!pte_present(*pte) || !pte_young(*pte))) {
|
||||||
|
pte_unmap_unlock(pte, ptl);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
*ptep = pte;
|
||||||
|
*ptlp = ptl;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long noinline
|
||||||
__copy_to_user_memcpy(void __user *to, const void *from, unsigned long n)
|
__copy_to_user_memcpy(void __user *to, const void *from, unsigned long n)
|
||||||
{
|
{
|
||||||
int atomic;
|
int atomic;
|
||||||
@@ -135,6 +180,54 @@ out:
|
|||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned long noinline
|
||||||
|
__copy_from_user_memcpy(void *to, const void __user *from, unsigned long n)
|
||||||
|
{
|
||||||
|
int atomic;
|
||||||
|
|
||||||
|
if (unlikely(segment_eq(get_fs(), KERNEL_DS))) {
|
||||||
|
memcpy(to, (const void *)from, n);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* the mmap semaphore is taken only if not in an atomic context */
|
||||||
|
atomic = in_atomic();
|
||||||
|
|
||||||
|
if (!atomic)
|
||||||
|
down_read(¤t->mm->mmap_sem);
|
||||||
|
while (n) {
|
||||||
|
pte_t *pte;
|
||||||
|
spinlock_t *ptl;
|
||||||
|
int tocopy;
|
||||||
|
|
||||||
|
while (!pin_page_for_read(from, &pte, &ptl)) {
|
||||||
|
char temp;
|
||||||
|
if (!atomic)
|
||||||
|
up_read(¤t->mm->mmap_sem);
|
||||||
|
if (__get_user(temp, (char __user *)from))
|
||||||
|
goto out;
|
||||||
|
if (!atomic)
|
||||||
|
down_read(¤t->mm->mmap_sem);
|
||||||
|
}
|
||||||
|
|
||||||
|
tocopy = (~(unsigned long)from & ~PAGE_MASK) + 1;
|
||||||
|
if (tocopy > n)
|
||||||
|
tocopy = n;
|
||||||
|
|
||||||
|
memcpy(to, (const void *)from, tocopy);
|
||||||
|
to += tocopy;
|
||||||
|
from += tocopy;
|
||||||
|
n -= tocopy;
|
||||||
|
|
||||||
|
pte_unmap_unlock(pte, ptl);
|
||||||
|
}
|
||||||
|
if (!atomic)
|
||||||
|
up_read(¤t->mm->mmap_sem);
|
||||||
|
|
||||||
|
out:
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
unsigned long
|
unsigned long
|
||||||
arm_copy_to_user(void __user *to, const void *from, unsigned long n)
|
arm_copy_to_user(void __user *to, const void *from, unsigned long n)
|
||||||
{
|
{
|
||||||
@@ -145,11 +238,26 @@ arm_copy_to_user(void __user *to, const void *from, unsigned long n)
|
|||||||
* With frame pointer disabled, tail call optimization kicks in
|
* With frame pointer disabled, tail call optimization kicks in
|
||||||
* as well making this test almost invisible.
|
* as well making this test almost invisible.
|
||||||
*/
|
*/
|
||||||
if (n < 64)
|
if (n < COPY_TO_USER_THRESHOLD)
|
||||||
return __copy_to_user_std(to, from, n);
|
return __copy_to_user_std(to, from, n);
|
||||||
return __copy_to_user_memcpy(to, from, n);
|
return __copy_to_user_memcpy(to, from, n);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned long __must_check
|
||||||
|
arm_copy_from_user(void *to, const void __user *from, unsigned long n)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* This test is stubbed out of the main function above to keep
|
||||||
|
* the overhead for small copies low by avoiding a large
|
||||||
|
* register dump on the stack just to reload them right away.
|
||||||
|
* With frame pointer disabled, tail call optimization kicks in
|
||||||
|
* as well making this test almost invisible.
|
||||||
|
*/
|
||||||
|
if (n < COPY_FROM_USER_THRESHOLD)
|
||||||
|
return __copy_from_user_std(to, from, n);
|
||||||
|
return __copy_from_user_memcpy(to, from, n);
|
||||||
|
}
|
||||||
|
|
||||||
static unsigned long noinline
|
static unsigned long noinline
|
||||||
__clear_user_memset(void __user *addr, unsigned long n)
|
__clear_user_memset(void __user *addr, unsigned long n)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -128,6 +128,7 @@ config ARCH_BCM2835
|
|||||||
select ARM_ERRATA_411920
|
select ARM_ERRATA_411920
|
||||||
select ARM_TIMER_SP804
|
select ARM_TIMER_SP804
|
||||||
select CLKSRC_OF
|
select CLKSRC_OF
|
||||||
|
select FIQ
|
||||||
select PINCTRL
|
select PINCTRL
|
||||||
select PINCTRL_BCM2835
|
select PINCTRL_BCM2835
|
||||||
help
|
help
|
||||||
|
|||||||
@@ -17,12 +17,39 @@
|
|||||||
#include <linux/of_address.h>
|
#include <linux/of_address.h>
|
||||||
#include <linux/of_platform.h>
|
#include <linux/of_platform.h>
|
||||||
#include <linux/clk/bcm2835.h>
|
#include <linux/clk/bcm2835.h>
|
||||||
|
#include <asm/system_info.h>
|
||||||
|
|
||||||
#include <asm/mach/arch.h>
|
#include <asm/mach/arch.h>
|
||||||
#include <asm/mach/map.h>
|
#include <asm/mach/map.h>
|
||||||
|
|
||||||
|
/* Use this hack until a proper solution is agreed upon */
|
||||||
|
static void __init bcm2835_init_uart1(void)
|
||||||
|
{
|
||||||
|
struct device_node *np;
|
||||||
|
|
||||||
|
np = of_find_compatible_node(NULL, NULL, "brcm,bcm2835-aux-uart");
|
||||||
|
if (of_device_is_available(np)) {
|
||||||
|
np = of_find_compatible_node(NULL, NULL,
|
||||||
|
"bcrm,bcm2835-aux-enable");
|
||||||
|
if (np) {
|
||||||
|
void __iomem *base = of_iomap(np, 0);
|
||||||
|
|
||||||
|
if (!base) {
|
||||||
|
pr_err("bcm2835: Failed enabling Mini UART\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
writel(1, base);
|
||||||
|
pr_info("bcm2835: Mini UART enabled\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void __init bcm2835_init(void)
|
static void __init bcm2835_init(void)
|
||||||
{
|
{
|
||||||
|
struct device_node *np = of_find_node_by_path("/system");
|
||||||
|
u32 val;
|
||||||
|
u64 val64;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
bcm2835_init_clocks();
|
bcm2835_init_clocks();
|
||||||
@@ -33,6 +60,13 @@ static void __init bcm2835_init(void)
|
|||||||
pr_err("of_platform_populate failed: %d\n", ret);
|
pr_err("of_platform_populate failed: %d\n", ret);
|
||||||
BUG();
|
BUG();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!of_property_read_u32(np, "linux,revision", &val))
|
||||||
|
system_rev = val;
|
||||||
|
if (!of_property_read_u64(np, "linux,serial", &val64))
|
||||||
|
system_serial_low = val64;
|
||||||
|
|
||||||
|
bcm2835_init_uart1();
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char * const bcm2835_compat[] = {
|
static const char * const bcm2835_compat[] = {
|
||||||
|
|||||||
23
arch/arm/mach-bcm2708/Kconfig
Normal file
23
arch/arm/mach-bcm2708/Kconfig
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
menu "Broadcom BCM2708 Implementations"
|
||||||
|
depends on ARCH_BCM2708
|
||||||
|
|
||||||
|
config MACH_BCM2708
|
||||||
|
bool "Broadcom BCM2708 Development Platform"
|
||||||
|
select NEED_MACH_MEMORY_H
|
||||||
|
select NEED_MACH_IO_H
|
||||||
|
select CPU_V6
|
||||||
|
select USE_OF
|
||||||
|
select ARCH_REQUIRE_GPIOLIB
|
||||||
|
select PINCTRL
|
||||||
|
select PINCTRL_BCM2835
|
||||||
|
help
|
||||||
|
Include support for the Broadcom(R) BCM2708 platform.
|
||||||
|
|
||||||
|
config BCM2708_NOL2CACHE
|
||||||
|
bool "Videocore L2 cache disable"
|
||||||
|
depends on MACH_BCM2708
|
||||||
|
default n
|
||||||
|
help
|
||||||
|
Do not allow ARM to use GPU's L2 cache. Requires disable_l2cache in config.txt.
|
||||||
|
|
||||||
|
endmenu
|
||||||
5
arch/arm/mach-bcm2708/Makefile
Normal file
5
arch/arm/mach-bcm2708/Makefile
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
#
|
||||||
|
# Makefile for the linux kernel.
|
||||||
|
#
|
||||||
|
|
||||||
|
obj-$(CONFIG_MACH_BCM2708) += bcm2708.o
|
||||||
3
arch/arm/mach-bcm2708/Makefile.boot
Normal file
3
arch/arm/mach-bcm2708/Makefile.boot
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
zreladdr-y := 0x00008000
|
||||||
|
params_phys-y := 0x00000100
|
||||||
|
initrd_phys-y := 0x00800000
|
||||||
231
arch/arm/mach-bcm2708/bcm2708.c
Normal file
231
arch/arm/mach-bcm2708/bcm2708.c
Normal file
@@ -0,0 +1,231 @@
|
|||||||
|
/*
|
||||||
|
* linux/arch/arm/mach-bcm2708/bcm2708.c
|
||||||
|
*
|
||||||
|
* Copyright (C) 2010 Broadcom
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/init.h>
|
||||||
|
#include <linux/dma-mapping.h>
|
||||||
|
#include <linux/module.h>
|
||||||
|
#include <linux/of_platform.h>
|
||||||
|
#include <asm/system_info.h>
|
||||||
|
#include <asm/mach-types.h>
|
||||||
|
#include <asm/mach/arch.h>
|
||||||
|
#include <asm/mach/map.h>
|
||||||
|
|
||||||
|
#include <mach/system.h>
|
||||||
|
|
||||||
|
#include <linux/broadcom/vc_cma.h>
|
||||||
|
|
||||||
|
/* Effectively we have an IOMMU (ARM<->VideoCore map) that is set up to
|
||||||
|
* give us IO access only to 64Mbytes of physical memory (26 bits). We could
|
||||||
|
* represent this window by setting our dmamasks to 26 bits but, in fact
|
||||||
|
* we're not going to use addresses outside this range (they're not in real
|
||||||
|
* memory) so we don't bother.
|
||||||
|
*
|
||||||
|
* In the future we might include code to use this IOMMU to remap other
|
||||||
|
* physical addresses onto VideoCore memory then the use of 32-bits would be
|
||||||
|
* more legitimate.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* command line parameters */
|
||||||
|
static unsigned boardrev, serial;
|
||||||
|
static unsigned reboot_part = 0;
|
||||||
|
|
||||||
|
static struct map_desc bcm2708_io_desc[] __initdata = {
|
||||||
|
{
|
||||||
|
.virtual = IO_ADDRESS(ARMCTRL_BASE),
|
||||||
|
.pfn = __phys_to_pfn(ARMCTRL_BASE),
|
||||||
|
.length = SZ_4K,
|
||||||
|
.type = MT_DEVICE},
|
||||||
|
{
|
||||||
|
.virtual = IO_ADDRESS(UART0_BASE),
|
||||||
|
.pfn = __phys_to_pfn(UART0_BASE),
|
||||||
|
.length = SZ_4K,
|
||||||
|
.type = MT_DEVICE},
|
||||||
|
{
|
||||||
|
.virtual = IO_ADDRESS(UART1_BASE),
|
||||||
|
.pfn = __phys_to_pfn(UART1_BASE),
|
||||||
|
.length = SZ_4K,
|
||||||
|
.type = MT_DEVICE},
|
||||||
|
{
|
||||||
|
.virtual = IO_ADDRESS(DMA_BASE),
|
||||||
|
.pfn = __phys_to_pfn(DMA_BASE),
|
||||||
|
.length = SZ_4K,
|
||||||
|
.type = MT_DEVICE},
|
||||||
|
{
|
||||||
|
.virtual = IO_ADDRESS(MCORE_BASE),
|
||||||
|
.pfn = __phys_to_pfn(MCORE_BASE),
|
||||||
|
.length = SZ_4K,
|
||||||
|
.type = MT_DEVICE},
|
||||||
|
{
|
||||||
|
.virtual = IO_ADDRESS(ST_BASE),
|
||||||
|
.pfn = __phys_to_pfn(ST_BASE),
|
||||||
|
.length = SZ_4K,
|
||||||
|
.type = MT_DEVICE},
|
||||||
|
{
|
||||||
|
.virtual = IO_ADDRESS(USB_BASE),
|
||||||
|
.pfn = __phys_to_pfn(USB_BASE),
|
||||||
|
.length = SZ_128K,
|
||||||
|
.type = MT_DEVICE},
|
||||||
|
{
|
||||||
|
.virtual = IO_ADDRESS(PM_BASE),
|
||||||
|
.pfn = __phys_to_pfn(PM_BASE),
|
||||||
|
.length = SZ_4K,
|
||||||
|
.type = MT_DEVICE},
|
||||||
|
{
|
||||||
|
.virtual = IO_ADDRESS(GPIO_BASE),
|
||||||
|
.pfn = __phys_to_pfn(GPIO_BASE),
|
||||||
|
.length = SZ_4K,
|
||||||
|
.type = MT_DEVICE}
|
||||||
|
};
|
||||||
|
|
||||||
|
void __init bcm2708_map_io(void)
|
||||||
|
{
|
||||||
|
iotable_init(bcm2708_io_desc, ARRAY_SIZE(bcm2708_io_desc));
|
||||||
|
}
|
||||||
|
|
||||||
|
int calc_rsts(int partition)
|
||||||
|
{
|
||||||
|
return PM_PASSWORD |
|
||||||
|
((partition & (1 << 0)) << 0) |
|
||||||
|
((partition & (1 << 1)) << 1) |
|
||||||
|
((partition & (1 << 2)) << 2) |
|
||||||
|
((partition & (1 << 3)) << 3) |
|
||||||
|
((partition & (1 << 4)) << 4) |
|
||||||
|
((partition & (1 << 5)) << 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void bcm2708_restart(enum reboot_mode mode, const char *cmd)
|
||||||
|
{
|
||||||
|
extern char bcm2708_reboot_mode;
|
||||||
|
uint32_t pm_rstc, pm_wdog;
|
||||||
|
uint32_t timeout = 10;
|
||||||
|
uint32_t pm_rsts = 0;
|
||||||
|
|
||||||
|
if(bcm2708_reboot_mode == 'q')
|
||||||
|
{
|
||||||
|
// NOOBS < 1.3 booting with reboot=q
|
||||||
|
pm_rsts = readl(__io_address(PM_RSTS));
|
||||||
|
pm_rsts = PM_PASSWORD | pm_rsts | PM_RSTS_HADWRQ_SET;
|
||||||
|
}
|
||||||
|
else if(bcm2708_reboot_mode == 'p')
|
||||||
|
{
|
||||||
|
// NOOBS < 1.3 halting
|
||||||
|
pm_rsts = readl(__io_address(PM_RSTS));
|
||||||
|
pm_rsts = PM_PASSWORD | pm_rsts | PM_RSTS_HADWRH_SET;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pm_rsts = calc_rsts(reboot_part);
|
||||||
|
}
|
||||||
|
|
||||||
|
writel(pm_rsts, __io_address(PM_RSTS));
|
||||||
|
|
||||||
|
/* Setup watchdog for reset */
|
||||||
|
pm_rstc = readl(__io_address(PM_RSTC));
|
||||||
|
|
||||||
|
pm_wdog = PM_PASSWORD | (timeout & PM_WDOG_TIME_SET); // watchdog timer = timer clock / 16; need password (31:16) + value (11:0)
|
||||||
|
pm_rstc = PM_PASSWORD | (pm_rstc & PM_RSTC_WRCFG_CLR) | PM_RSTC_WRCFG_FULL_RESET;
|
||||||
|
|
||||||
|
writel(pm_wdog, __io_address(PM_WDOG));
|
||||||
|
writel(pm_rstc, __io_address(PM_RSTC));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* We can't really power off, but if we do the normal reset scheme, and indicate to bootcode.bin not to reboot, then most of the chip will be powered off */
|
||||||
|
static void bcm2708_power_off(void)
|
||||||
|
{
|
||||||
|
extern char bcm2708_reboot_mode;
|
||||||
|
if(bcm2708_reboot_mode == 'q')
|
||||||
|
{
|
||||||
|
// NOOBS < v1.3
|
||||||
|
bcm2708_restart('p', "");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* partition 63 is special code for HALT the bootloader knows not to boot*/
|
||||||
|
reboot_part = 63;
|
||||||
|
/* continue with normal reset mechanism */
|
||||||
|
bcm2708_restart(0, "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __init bcm2708_init_uart1(void)
|
||||||
|
{
|
||||||
|
struct device_node *np;
|
||||||
|
|
||||||
|
np = of_find_compatible_node(NULL, NULL, "brcm,bcm2835-aux-uart");
|
||||||
|
if (of_device_is_available(np)) {
|
||||||
|
pr_info("bcm2708: Mini UART enabled\n");
|
||||||
|
writel(1, __io_address(UART1_BASE + 0x4));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void __init bcm2708_init(void)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
vc_cma_early_init();
|
||||||
|
|
||||||
|
pm_power_off = bcm2708_power_off;
|
||||||
|
|
||||||
|
ret = of_platform_populate(NULL, of_default_bus_match_table, NULL,
|
||||||
|
NULL);
|
||||||
|
if (ret) {
|
||||||
|
pr_err("of_platform_populate failed: %d\n", ret);
|
||||||
|
BUG();
|
||||||
|
}
|
||||||
|
|
||||||
|
bcm2708_init_uart1();
|
||||||
|
|
||||||
|
system_rev = boardrev;
|
||||||
|
system_serial_low = serial;
|
||||||
|
}
|
||||||
|
|
||||||
|
void __init bcm2708_init_early(void)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Some devices allocate their coherent buffers from atomic
|
||||||
|
* context. Increase size of atomic coherent pool to make sure such
|
||||||
|
* the allocations won't fail.
|
||||||
|
*/
|
||||||
|
init_dma_coherent_pool_size(SZ_4M);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __init board_reserve(void)
|
||||||
|
{
|
||||||
|
vc_cma_reserve();
|
||||||
|
}
|
||||||
|
|
||||||
|
static const char * const bcm2708_compat[] = {
|
||||||
|
"brcm,bcm2708",
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
MACHINE_START(BCM2708, "BCM2708")
|
||||||
|
/* Maintainer: Broadcom Europe Ltd. */
|
||||||
|
.map_io = bcm2708_map_io,
|
||||||
|
.init_machine = bcm2708_init,
|
||||||
|
.init_early = bcm2708_init_early,
|
||||||
|
.reserve = board_reserve,
|
||||||
|
.restart = bcm2708_restart,
|
||||||
|
.dt_compat = bcm2708_compat,
|
||||||
|
MACHINE_END
|
||||||
|
|
||||||
|
module_param(boardrev, uint, 0644);
|
||||||
|
module_param(serial, uint, 0644);
|
||||||
|
module_param(reboot_part, uint, 0644);
|
||||||
22
arch/arm/mach-bcm2708/include/mach/debug-macro.S
Normal file
22
arch/arm/mach-bcm2708/include/mach/debug-macro.S
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
/* arch/arm/mach-bcm2708/include/mach/debug-macro.S
|
||||||
|
*
|
||||||
|
* Debugging macro include header
|
||||||
|
*
|
||||||
|
* Copyright (C) 2010 Broadcom
|
||||||
|
* Copyright (C) 1994-1999 Russell King
|
||||||
|
* Moved from linux/arch/arm/kernel/debug.S by Ben Dooks
|
||||||
|
*
|
||||||
|
* 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 <mach/platform.h>
|
||||||
|
|
||||||
|
.macro addruart, rp, rv, tmp
|
||||||
|
ldr \rp, =UART0_BASE
|
||||||
|
ldr \rv, =IO_ADDRESS(UART0_BASE)
|
||||||
|
.endm
|
||||||
|
|
||||||
|
#include <debug/pl01x.S>
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user