mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-06 01:49:46 +00:00
Compare commits
123 Commits
954129f16c
...
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 {
|
||||
compatible = "brcm,bcm2835-i2s";
|
||||
reg = < 0x7e203000 0x20>,
|
||||
< 0x7e101098 0x02>;
|
||||
reg = < 0x7e203000 0x24>,
|
||||
< 0x7e101098 0x08>;
|
||||
|
||||
dmas = <&dma 2>,
|
||||
<&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 {
|
||||
compatible = "brcm,bcm2835-i2s";
|
||||
reg = <0x7e203000 0x20>,
|
||||
<0x7e101098 0x02>;
|
||||
reg = <0x7e203000 0x24>,
|
||||
<0x7e101098 0x08>;
|
||||
|
||||
dmas = <&dma 2>,
|
||||
<&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_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
|
||||
bool "Allow multiple platforms to be selected"
|
||||
depends on MMU
|
||||
@@ -808,6 +854,9 @@ config ARCH_VIRT
|
||||
# Kconfigs may be included either alphabetically (according to the
|
||||
# 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-alpine/Kconfig"
|
||||
|
||||
@@ -1241,6 +1241,14 @@ choice
|
||||
options; the platform specific options are deprecated
|
||||
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
|
||||
|
||||
config DEBUG_EXYNOS_UART
|
||||
|
||||
@@ -154,6 +154,8 @@ textofs-$(CONFIG_ARCH_AXXIA) := 0x00308000
|
||||
|
||||
# Machine directory name. This list is sorted alphanumerically
|
||||
# by CONFIG_* macro name.
|
||||
machine-$(CONFIG_ARCH_BCM2708) += bcm2708
|
||||
machine-$(CONFIG_ARCH_BCM2709) += bcm2709
|
||||
machine-$(CONFIG_ARCH_ALPINE) += alpine
|
||||
machine-$(CONFIG_ARCH_AT91) += at91
|
||||
machine-$(CONFIG_ARCH_AXXIA) += axxia
|
||||
|
||||
@@ -1,5 +1,25 @@
|
||||
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) += \
|
||||
alpine-db.dtb
|
||||
dtb-$(CONFIG_MACH_ASM9260) += \
|
||||
@@ -777,10 +797,20 @@ dtb-$(CONFIG_ARCH_MEDIATEK) += \
|
||||
mt8127-moose.dtb \
|
||||
mt8135-evbp1.dtb
|
||||
dtb-$(CONFIG_ARCH_ZX) += zx296702-ad1.dtb
|
||||
|
||||
targets += dtbs dtbs_install
|
||||
targets += $(dtb-y)
|
||||
|
||||
endif
|
||||
|
||||
dtstree := $(srctree)/$(src)
|
||||
dtb-$(CONFIG_OF_ALL_DTBS) := $(patsubst $(dtstree)/%.dts,%.dtb, $(wildcard $(dtstree)/*.dts))
|
||||
|
||||
always := $(dtb-y)
|
||||
subdir-y := $(dts-dirs)
|
||||
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/;
|
||||
#include "bcm2835-rpi.dtsi"
|
||||
#include "bcm2835.dtsi"
|
||||
|
||||
/ {
|
||||
compatible = "raspberrypi,model-b-plus", "brcm,bcm2835";
|
||||
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 {
|
||||
pinctrl-0 = <&gpioout &alt0 &i2s_alt0 &alt3>;
|
||||
spi0_pins: spi0_pins {
|
||||
brcm,pins = <7 8 9 10 11>;
|
||||
brcm,function = <4>; /* alt0 */
|
||||
};
|
||||
|
||||
/* I2S interface */
|
||||
i2s_alt0: i2s_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 = <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/;
|
||||
#include "bcm2835-rpi.dtsi"
|
||||
#include "bcm2835.dtsi"
|
||||
|
||||
/ {
|
||||
compatible = "raspberrypi,model-b", "brcm,bcm2835";
|
||||
model = "Raspberry Pi Model B";
|
||||
|
||||
leds {
|
||||
act {
|
||||
gpios = <&gpio 16 1>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&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 <dt-bindings/clock/bcm2835.h>
|
||||
#include "skeleton.dtsi"
|
||||
#include "bcm2708_common.dtsi"
|
||||
|
||||
/ {
|
||||
compatible = "brcm,bcm2835";
|
||||
model = "BCM2835";
|
||||
interrupt-parent = <&intc>;
|
||||
|
||||
chosen {
|
||||
bootargs = "earlyprintk console=ttyAMA0";
|
||||
bootargs = "";
|
||||
};
|
||||
|
||||
soc {
|
||||
compatible = "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges = <0x7e000000 0x20000000 0x02000000>;
|
||||
ranges = <0x7e000000 0x20000000 0x01000000>;
|
||||
dma-ranges = <0x40000000 0x00000000 0x20000000>;
|
||||
|
||||
timer@7e003000 {
|
||||
compatible = "brcm,bcm2835-system-timer";
|
||||
reg = <0x7e003000 0x1000>;
|
||||
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>;
|
||||
};
|
||||
|
||||
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 {
|
||||
compatible = "arm,arm1176-pmu";
|
||||
};
|
||||
};
|
||||
|
||||
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>;
|
||||
aux_enable: aux_enable@0x7e215004 {
|
||||
compatible = "bcrm,bcm2835-aux-enable";
|
||||
reg = <0x7e215004 0x04>;
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
&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
|
||||
static inline void arch_local_irq_restore(unsigned long flags)
|
||||
{
|
||||
asm volatile(
|
||||
" msr " IRQMASK_REG_NAME_W ", %0 @ local_irq_restore"
|
||||
unsigned long temp = 0;
|
||||
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)
|
||||
: "memory", "cc");
|
||||
|
||||
@@ -24,6 +24,11 @@ extern void * memchr(const void *, int, __kernel_size_t);
|
||||
#define __HAVE_ARCH_MEMSET
|
||||
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);
|
||||
|
||||
#define memset(p,v,n) \
|
||||
|
||||
@@ -493,6 +493,9 @@ do { \
|
||||
extern unsigned long __must_check
|
||||
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
|
||||
__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
|
||||
ret lr
|
||||
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
|
||||
bcc 1b
|
||||
ret lr
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
#endif
|
||||
ENDPROC(__fixup_a_pv_table)
|
||||
|
||||
|
||||
@@ -91,6 +91,16 @@ void arch_cpu_idle_exit(void)
|
||||
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)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
@@ -6,9 +6,8 @@
|
||||
|
||||
lib-y := backtrace.o changebit.o csumipv6.o csumpartial.o \
|
||||
csumpartialcopy.o csumpartialcopyuser.o clearbit.o \
|
||||
delay.o delay-loop.o findbit.o memchr.o memcpy.o \
|
||||
memmove.o memset.o memzero.o setbit.o \
|
||||
strchr.o strrchr.o \
|
||||
delay.o delay-loop.o findbit.o memchr.o memzero.o \
|
||||
setbit.o strchr.o strrchr.o \
|
||||
testchangebit.o testclearbit.o testsetbit.o \
|
||||
ashldi3.o ashrdi3.o lshrdi3.o muldi3.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 \
|
||||
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
|
||||
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
|
||||
|
||||
ENTRY(arm_copy_from_user)
|
||||
ENTRY(__copy_from_user_std)
|
||||
WEAK(arm_copy_from_user)
|
||||
|
||||
#include "copy_template.S"
|
||||
|
||||
ENDPROC(arm_copy_from_user)
|
||||
ENDPROC(__copy_from_user_std)
|
||||
|
||||
.pushsection .fixup,"ax"
|
||||
.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/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
|
||||
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;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
int atomic;
|
||||
@@ -135,6 +180,54 @@ out:
|
||||
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
|
||||
arm_copy_to_user(void __user *to, const void *from, unsigned long n)
|
||||
{
|
||||
@@ -145,10 +238,25 @@ arm_copy_to_user(void __user *to, const void *from, unsigned long n)
|
||||
* With frame pointer disabled, tail call optimization kicks in
|
||||
* 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_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
|
||||
__clear_user_memset(void __user *addr, unsigned long n)
|
||||
|
||||
@@ -128,6 +128,7 @@ config ARCH_BCM2835
|
||||
select ARM_ERRATA_411920
|
||||
select ARM_TIMER_SP804
|
||||
select CLKSRC_OF
|
||||
select FIQ
|
||||
select PINCTRL
|
||||
select PINCTRL_BCM2835
|
||||
help
|
||||
|
||||
@@ -17,12 +17,39 @@
|
||||
#include <linux/of_address.h>
|
||||
#include <linux/of_platform.h>
|
||||
#include <linux/clk/bcm2835.h>
|
||||
#include <asm/system_info.h>
|
||||
|
||||
#include <asm/mach/arch.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)
|
||||
{
|
||||
struct device_node *np = of_find_node_by_path("/system");
|
||||
u32 val;
|
||||
u64 val64;
|
||||
int ret;
|
||||
|
||||
bcm2835_init_clocks();
|
||||
@@ -33,6 +60,13 @@ static void __init bcm2835_init(void)
|
||||
pr_err("of_platform_populate failed: %d\n", ret);
|
||||
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[] = {
|
||||
|
||||
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