mirror of
https://github.com/Ysurac/openmptcprouter.git
synced 2025-02-12 19:31:52 +00:00
Update RPI patches
This commit is contained in:
parent
07bf329e51
commit
73e092d4de
24 changed files with 2573 additions and 0 deletions
|
@ -0,0 +1,215 @@
|
|||
From 7462714a7b60fa8b6409e287c7513e440112b565 Mon Sep 17 00:00:00 2001
|
||||
From: Dave Stevenson <dave.stevenson@raspberrypi.org>
|
||||
Date: Thu, 5 Jul 2018 16:43:56 +0100
|
||||
Subject: [PATCH 375/401] BCM283x DT: Add CSI nodes to the device tree.
|
||||
|
||||
Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org>
|
||||
---
|
||||
arch/arm/boot/dts/bcm2708-rpi.dtsi | 8 +++++++
|
||||
arch/arm/boot/dts/bcm2835-rpi-a-plus.dts | 1 +
|
||||
arch/arm/boot/dts/bcm2835-rpi-a.dts | 1 +
|
||||
arch/arm/boot/dts/bcm2835-rpi-b-plus.dts | 1 +
|
||||
arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts | 1 +
|
||||
arch/arm/boot/dts/bcm2835-rpi-b.dts | 1 +
|
||||
arch/arm/boot/dts/bcm2835-rpi-zero.dts | 1 +
|
||||
arch/arm/boot/dts/bcm2835-rpi.dtsi | 8 +++++++
|
||||
arch/arm/boot/dts/bcm2836-rpi-2-b.dts | 1 +
|
||||
arch/arm/boot/dts/bcm2837-rpi-3-b.dts | 1 +
|
||||
arch/arm/boot/dts/bcm283x-rpi-csi1-2lane.dtsi | 7 ++++++
|
||||
arch/arm/boot/dts/bcm283x.dtsi | 28 ++++++++++++++++++++++
|
||||
.../boot/dts/broadcom/bcm283x-rpi-csi1-2lane.dtsi | 1 +
|
||||
13 files changed, 60 insertions(+)
|
||||
create mode 100644 arch/arm/boot/dts/bcm283x-rpi-csi1-2lane.dtsi
|
||||
create mode 120000 arch/arm64/boot/dts/broadcom/bcm283x-rpi-csi1-2lane.dtsi
|
||||
|
||||
diff --git a/arch/arm/boot/dts/bcm2708-rpi.dtsi b/arch/arm/boot/dts/bcm2708-rpi.dtsi
|
||||
index fe2694a1cbdc..b13632932192 100644
|
||||
--- a/arch/arm/boot/dts/bcm2708-rpi.dtsi
|
||||
+++ b/arch/arm/boot/dts/bcm2708-rpi.dtsi
|
||||
@@ -160,3 +160,11 @@ sdhost_pins: &sdhost_gpio48 {
|
||||
&vec {
|
||||
status = "disabled";
|
||||
};
|
||||
+
|
||||
+&csi0 {
|
||||
+ power-domains = <&power RPI_POWER_DOMAIN_UNICAM0>;
|
||||
+};
|
||||
+
|
||||
+&csi1 {
|
||||
+ power-domains = <&power RPI_POWER_DOMAIN_UNICAM1>;
|
||||
+};
|
||||
diff --git a/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts b/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts
|
||||
index f81ae0a10310..05587bb6fc01 100644
|
||||
--- a/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts
|
||||
+++ b/arch/arm/boot/dts/bcm2835-rpi-a-plus.dts
|
||||
@@ -3,6 +3,7 @@
|
||||
#include "bcm2835.dtsi"
|
||||
#include "bcm2835-rpi.dtsi"
|
||||
#include "bcm283x-rpi-usb-host.dtsi"
|
||||
+#include "bcm283x-rpi-csi1-2lane.dtsi"
|
||||
|
||||
/ {
|
||||
compatible = "raspberrypi,model-a-plus", "brcm,bcm2835";
|
||||
diff --git a/arch/arm/boot/dts/bcm2835-rpi-a.dts b/arch/arm/boot/dts/bcm2835-rpi-a.dts
|
||||
index 7a960a048204..6437b63d0ed0 100644
|
||||
--- a/arch/arm/boot/dts/bcm2835-rpi-a.dts
|
||||
+++ b/arch/arm/boot/dts/bcm2835-rpi-a.dts
|
||||
@@ -3,6 +3,7 @@
|
||||
#include "bcm2835.dtsi"
|
||||
#include "bcm2835-rpi.dtsi"
|
||||
#include "bcm283x-rpi-usb-host.dtsi"
|
||||
+#include "bcm283x-rpi-csi1-2lane.dtsi"
|
||||
|
||||
/ {
|
||||
compatible = "raspberrypi,model-a", "brcm,bcm2835";
|
||||
diff --git a/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts b/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts
|
||||
index 0161a8483e39..a462de2ce37e 100644
|
||||
--- a/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts
|
||||
+++ b/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "bcm2835-rpi.dtsi"
|
||||
#include "bcm283x-rpi-smsc9514.dtsi"
|
||||
#include "bcm283x-rpi-usb-host.dtsi"
|
||||
+#include "bcm283x-rpi-csi1-2lane.dtsi"
|
||||
|
||||
/ {
|
||||
compatible = "raspberrypi,model-b-plus", "brcm,bcm2835";
|
||||
diff --git a/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts b/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts
|
||||
index 4bc70efe43d6..264c84e94329 100644
|
||||
--- a/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts
|
||||
+++ b/arch/arm/boot/dts/bcm2835-rpi-b-rev2.dts
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "bcm2835-rpi.dtsi"
|
||||
#include "bcm283x-rpi-smsc9512.dtsi"
|
||||
#include "bcm283x-rpi-usb-host.dtsi"
|
||||
+#include "bcm283x-rpi-csi1-2lane.dtsi"
|
||||
|
||||
/ {
|
||||
compatible = "raspberrypi,model-b-rev2", "brcm,bcm2835";
|
||||
diff --git a/arch/arm/boot/dts/bcm2835-rpi-b.dts b/arch/arm/boot/dts/bcm2835-rpi-b.dts
|
||||
index cca4a75a5651..03e3a7a7dc5e 100644
|
||||
--- a/arch/arm/boot/dts/bcm2835-rpi-b.dts
|
||||
+++ b/arch/arm/boot/dts/bcm2835-rpi-b.dts
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "bcm2835-rpi.dtsi"
|
||||
#include "bcm283x-rpi-smsc9512.dtsi"
|
||||
#include "bcm283x-rpi-usb-host.dtsi"
|
||||
+#include "bcm283x-rpi-csi1-2lane.dtsi"
|
||||
|
||||
/ {
|
||||
compatible = "raspberrypi,model-b", "brcm,bcm2835";
|
||||
diff --git a/arch/arm/boot/dts/bcm2835-rpi-zero.dts b/arch/arm/boot/dts/bcm2835-rpi-zero.dts
|
||||
index 70362405c595..eb5cfefb99b2 100644
|
||||
--- a/arch/arm/boot/dts/bcm2835-rpi-zero.dts
|
||||
+++ b/arch/arm/boot/dts/bcm2835-rpi-zero.dts
|
||||
@@ -13,6 +13,7 @@
|
||||
#include "bcm2835.dtsi"
|
||||
#include "bcm2835-rpi.dtsi"
|
||||
#include "bcm283x-rpi-usb-otg.dtsi"
|
||||
+#include "bcm283x-rpi-csi1-2lane.dtsi"
|
||||
|
||||
/ {
|
||||
compatible = "raspberrypi,model-zero", "brcm,bcm2835";
|
||||
diff --git a/arch/arm/boot/dts/bcm2835-rpi.dtsi b/arch/arm/boot/dts/bcm2835-rpi.dtsi
|
||||
index e36c392a2b8f..356d4e6a17e5 100644
|
||||
--- a/arch/arm/boot/dts/bcm2835-rpi.dtsi
|
||||
+++ b/arch/arm/boot/dts/bcm2835-rpi.dtsi
|
||||
@@ -106,3 +106,11 @@
|
||||
&dsi1 {
|
||||
power-domains = <&power RPI_POWER_DOMAIN_DSI1>;
|
||||
};
|
||||
+
|
||||
+&csi0 {
|
||||
+ power-domains = <&power RPI_POWER_DOMAIN_UNICAM0>;
|
||||
+};
|
||||
+
|
||||
+&csi1 {
|
||||
+ power-domains = <&power RPI_POWER_DOMAIN_UNICAM1>;
|
||||
+};
|
||||
diff --git a/arch/arm/boot/dts/bcm2836-rpi-2-b.dts b/arch/arm/boot/dts/bcm2836-rpi-2-b.dts
|
||||
index 6669355fd655..59e70f4a19e5 100644
|
||||
--- a/arch/arm/boot/dts/bcm2836-rpi-2-b.dts
|
||||
+++ b/arch/arm/boot/dts/bcm2836-rpi-2-b.dts
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "bcm2835-rpi.dtsi"
|
||||
#include "bcm283x-rpi-smsc9514.dtsi"
|
||||
#include "bcm283x-rpi-usb-host.dtsi"
|
||||
+#include "bcm283x-rpi-csi1-2lane.dtsi"
|
||||
|
||||
/ {
|
||||
compatible = "raspberrypi,2-model-b", "brcm,bcm2836";
|
||||
diff --git a/arch/arm/boot/dts/bcm2837-rpi-3-b.dts b/arch/arm/boot/dts/bcm2837-rpi-3-b.dts
|
||||
index eb1a28da57e3..8703d006a206 100644
|
||||
--- a/arch/arm/boot/dts/bcm2837-rpi-3-b.dts
|
||||
+++ b/arch/arm/boot/dts/bcm2837-rpi-3-b.dts
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "bcm2835-rpi.dtsi"
|
||||
#include "bcm283x-rpi-smsc9514.dtsi"
|
||||
#include "bcm283x-rpi-usb-host.dtsi"
|
||||
+#include "bcm283x-rpi-csi1-2lane.dtsi"
|
||||
|
||||
/ {
|
||||
compatible = "raspberrypi,3-model-b", "brcm,bcm2837";
|
||||
diff --git a/arch/arm/boot/dts/bcm283x-rpi-csi1-2lane.dtsi b/arch/arm/boot/dts/bcm283x-rpi-csi1-2lane.dtsi
|
||||
new file mode 100644
|
||||
index 000000000000..fbadb6e726fc
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/boot/dts/bcm283x-rpi-csi1-2lane.dtsi
|
||||
@@ -0,0 +1,7 @@
|
||||
+&csi1 {
|
||||
+ port {
|
||||
+ endpoint {
|
||||
+ data-lanes = <1 2>;
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
diff --git a/arch/arm/boot/dts/bcm283x.dtsi b/arch/arm/boot/dts/bcm283x.dtsi
|
||||
index 4afd31d96acf..a4663737b556 100644
|
||||
--- a/arch/arm/boot/dts/bcm283x.dtsi
|
||||
+++ b/arch/arm/boot/dts/bcm283x.dtsi
|
||||
@@ -544,6 +544,34 @@
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
+ csi0: csi0@7e800000 {
|
||||
+ compatible = "brcm,bcm2835-unicam";
|
||||
+ reg = <0x7e800000 0x800>,
|
||||
+ <0x7e802000 0x4>;
|
||||
+ interrupts = <2 6>;
|
||||
+ clocks = <&clocks BCM2835_CLOCK_CAM0>;
|
||||
+ clock-names = "lp";
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+ #clock-cells = <1>;
|
||||
+
|
||||
+ status = "disabled";
|
||||
+ };
|
||||
+
|
||||
+ csi1: csi1@7e801000 {
|
||||
+ compatible = "brcm,bcm2835-unicam";
|
||||
+ reg = <0x7e801000 0x800>,
|
||||
+ <0x7e802004 0x4>;
|
||||
+ interrupts = <2 7>;
|
||||
+ clocks = <&clocks BCM2835_CLOCK_CAM1>;
|
||||
+ clock-names = "lp";
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+ #clock-cells = <1>;
|
||||
+
|
||||
+ status = "disabled";
|
||||
+ };
|
||||
+
|
||||
i2c1: i2c@7e804000 {
|
||||
compatible = "brcm,bcm2835-i2c";
|
||||
reg = <0x7e804000 0x1000>;
|
||||
diff --git a/arch/arm64/boot/dts/broadcom/bcm283x-rpi-csi1-2lane.dtsi b/arch/arm64/boot/dts/broadcom/bcm283x-rpi-csi1-2lane.dtsi
|
||||
new file mode 120000
|
||||
index 000000000000..e5c400284467
|
||||
--- /dev/null
|
||||
+++ b/arch/arm64/boot/dts/broadcom/bcm283x-rpi-csi1-2lane.dtsi
|
||||
@@ -0,0 +1 @@
|
||||
+../../../../arm/boot/dts/bcm283x-rpi-csi1-2lane.dtsi
|
||||
\ No newline at end of file
|
||||
--
|
||||
2.16.1
|
||||
|
|
@ -0,0 +1,149 @@
|
|||
From e33ef2c4cd5dc96aa05a7d328eff61c183c94748 Mon Sep 17 00:00:00 2001
|
||||
From: Dave Stevenson <dave.stevenson@raspberrypi.org>
|
||||
Date: Thu, 5 Jul 2018 16:44:16 +0100
|
||||
Subject: [PATCH 376/401] BCM270X_DT: Add CSI defines for all the downstream Pi
|
||||
platforms
|
||||
|
||||
Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org>
|
||||
---
|
||||
arch/arm/boot/dts/bcm2708-rpi-0-w.dts | 1 +
|
||||
arch/arm/boot/dts/bcm2708-rpi-b-plus.dts | 1 +
|
||||
arch/arm/boot/dts/bcm2708-rpi-b.dts | 1 +
|
||||
arch/arm/boot/dts/bcm2708-rpi-cm.dts | 2 ++
|
||||
arch/arm/boot/dts/bcm2709-rpi-2-b.dts | 1 +
|
||||
arch/arm/boot/dts/bcm2710-rpi-3-b-plus.dts | 1 +
|
||||
arch/arm/boot/dts/bcm2710-rpi-3-b.dts | 1 +
|
||||
arch/arm/boot/dts/bcm2710-rpi-cm3.dts | 2 ++
|
||||
arch/arm/boot/dts/bcm283x-rpi-csi0-2lane.dtsi | 7 +++++++
|
||||
arch/arm/boot/dts/bcm283x-rpi-csi1-4lane.dtsi | 7 +++++++
|
||||
10 files changed, 24 insertions(+)
|
||||
create mode 100644 arch/arm/boot/dts/bcm283x-rpi-csi0-2lane.dtsi
|
||||
create mode 100644 arch/arm/boot/dts/bcm283x-rpi-csi1-4lane.dtsi
|
||||
|
||||
diff --git a/arch/arm/boot/dts/bcm2708-rpi-0-w.dts b/arch/arm/boot/dts/bcm2708-rpi-0-w.dts
|
||||
index ef0b0f040ca5..68316404aab2 100644
|
||||
--- a/arch/arm/boot/dts/bcm2708-rpi-0-w.dts
|
||||
+++ b/arch/arm/boot/dts/bcm2708-rpi-0-w.dts
|
||||
@@ -1,6 +1,7 @@
|
||||
/dts-v1/;
|
||||
|
||||
#include "bcm2708.dtsi"
|
||||
+#include "bcm283x-rpi-csi1-2lane.dtsi"
|
||||
|
||||
/ {
|
||||
compatible = "raspberrypi,model-zero-w", "brcm,bcm2835";
|
||||
diff --git a/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts b/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts
|
||||
index 31db4fd917a4..ef0beea3a3a3 100644
|
||||
--- a/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts
|
||||
+++ b/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
#include "bcm2708.dtsi"
|
||||
#include "bcm283x-rpi-smsc9514.dtsi"
|
||||
+#include "bcm283x-rpi-csi1-2lane.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Raspberry Pi Model B+";
|
||||
diff --git a/arch/arm/boot/dts/bcm2708-rpi-b.dts b/arch/arm/boot/dts/bcm2708-rpi-b.dts
|
||||
index ffe5d14feb9f..dea70fae90e6 100644
|
||||
--- a/arch/arm/boot/dts/bcm2708-rpi-b.dts
|
||||
+++ b/arch/arm/boot/dts/bcm2708-rpi-b.dts
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
#include "bcm2708.dtsi"
|
||||
#include "bcm283x-rpi-smsc9512.dtsi"
|
||||
+#include "bcm283x-rpi-csi1-2lane.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Raspberry Pi Model B";
|
||||
diff --git a/arch/arm/boot/dts/bcm2708-rpi-cm.dts b/arch/arm/boot/dts/bcm2708-rpi-cm.dts
|
||||
index 0b0d23256edd..1a3975b35630 100644
|
||||
--- a/arch/arm/boot/dts/bcm2708-rpi-cm.dts
|
||||
+++ b/arch/arm/boot/dts/bcm2708-rpi-cm.dts
|
||||
@@ -1,6 +1,8 @@
|
||||
/dts-v1/;
|
||||
|
||||
#include "bcm2708-rpi-cm.dtsi"
|
||||
+#include "bcm283x-rpi-csi0-2lane.dtsi"
|
||||
+#include "bcm283x-rpi-csi1-4lane.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Raspberry Pi Compute Module";
|
||||
diff --git a/arch/arm/boot/dts/bcm2709-rpi-2-b.dts b/arch/arm/boot/dts/bcm2709-rpi-2-b.dts
|
||||
index 442d2ebbdd36..34659505055a 100644
|
||||
--- a/arch/arm/boot/dts/bcm2709-rpi-2-b.dts
|
||||
+++ b/arch/arm/boot/dts/bcm2709-rpi-2-b.dts
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
#include "bcm2709.dtsi"
|
||||
#include "bcm283x-rpi-smsc9514.dtsi"
|
||||
+#include "bcm283x-rpi-csi1-2lane.dtsi"
|
||||
|
||||
/ {
|
||||
compatible = "raspberrypi,2-model-b", "brcm,bcm2836";
|
||||
diff --git a/arch/arm/boot/dts/bcm2710-rpi-3-b-plus.dts b/arch/arm/boot/dts/bcm2710-rpi-3-b-plus.dts
|
||||
index 7821483f7d50..59dd76c3240d 100644
|
||||
--- a/arch/arm/boot/dts/bcm2710-rpi-3-b-plus.dts
|
||||
+++ b/arch/arm/boot/dts/bcm2710-rpi-3-b-plus.dts
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
#include "bcm2710.dtsi"
|
||||
#include "bcm283x-rpi-lan7515.dtsi"
|
||||
+#include "bcm283x-rpi-csi1-2lane.dtsi"
|
||||
|
||||
/ {
|
||||
compatible = "raspberrypi,3-model-b-plus", "brcm,bcm2837";
|
||||
diff --git a/arch/arm/boot/dts/bcm2710-rpi-3-b.dts b/arch/arm/boot/dts/bcm2710-rpi-3-b.dts
|
||||
index 3f84e2af8c25..37aed344cbbf 100644
|
||||
--- a/arch/arm/boot/dts/bcm2710-rpi-3-b.dts
|
||||
+++ b/arch/arm/boot/dts/bcm2710-rpi-3-b.dts
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
#include "bcm2710.dtsi"
|
||||
#include "bcm283x-rpi-smsc9514.dtsi"
|
||||
+#include "bcm283x-rpi-csi1-2lane.dtsi"
|
||||
|
||||
/ {
|
||||
compatible = "raspberrypi,3-model-b", "brcm,bcm2837";
|
||||
diff --git a/arch/arm/boot/dts/bcm2710-rpi-cm3.dts b/arch/arm/boot/dts/bcm2710-rpi-cm3.dts
|
||||
index 2500641c14dc..d3ba2c5ead28 100644
|
||||
--- a/arch/arm/boot/dts/bcm2710-rpi-cm3.dts
|
||||
+++ b/arch/arm/boot/dts/bcm2710-rpi-cm3.dts
|
||||
@@ -1,6 +1,8 @@
|
||||
/dts-v1/;
|
||||
|
||||
#include "bcm2710.dtsi"
|
||||
+#include "bcm283x-rpi-csi0-2lane.dtsi"
|
||||
+#include "bcm283x-rpi-csi1-4lane.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Raspberry Pi Compute Module 3";
|
||||
diff --git a/arch/arm/boot/dts/bcm283x-rpi-csi0-2lane.dtsi b/arch/arm/boot/dts/bcm283x-rpi-csi0-2lane.dtsi
|
||||
new file mode 100644
|
||||
index 000000000000..1226433394db
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/boot/dts/bcm283x-rpi-csi0-2lane.dtsi
|
||||
@@ -0,0 +1,7 @@
|
||||
+&csi0 {
|
||||
+ port {
|
||||
+ endpoint {
|
||||
+ data-lanes = <1 2>;
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
diff --git a/arch/arm/boot/dts/bcm283x-rpi-csi1-4lane.dtsi b/arch/arm/boot/dts/bcm283x-rpi-csi1-4lane.dtsi
|
||||
new file mode 100644
|
||||
index 000000000000..663bcd8df824
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/boot/dts/bcm283x-rpi-csi1-4lane.dtsi
|
||||
@@ -0,0 +1,7 @@
|
||||
+&csi1 {
|
||||
+ port {
|
||||
+ endpoint {
|
||||
+ data-lanes = <1 2 3 4>;
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
--
|
||||
2.16.1
|
||||
|
|
@ -0,0 +1,496 @@
|
|||
From 36d224f4ae8759252a3583f147ae4487a9790073 Mon Sep 17 00:00:00 2001
|
||||
From: Dave Stevenson <dave.stevenson@raspberrypi.org>
|
||||
Date: Thu, 5 Jul 2018 16:44:39 +0100
|
||||
Subject: [PATCH 377/401] arm: dt: Add DT overlays for ADV7282M, OV5647, and
|
||||
TC358743
|
||||
|
||||
DT overlays to setup the above devices via i2c_arm and csi1.
|
||||
(This currently does not use the i2c-mux-pinctrl driver to
|
||||
dynamically switch the pinctrl)
|
||||
|
||||
tc358743 is tc358743 running at a default link frequency
|
||||
of 972Mbit/s. This allows up to 1080P50 UYVY on 2 lanes.
|
||||
There is a parameter to allow changing the link frequency,
|
||||
but the only values supported by the driver are 297000000
|
||||
for 594Mbit/s, and 486000000 for 972Mbit/s.
|
||||
There is also a parameter to enable 4 lane mode (only
|
||||
relevant to Compute Module (1 or 3) csi1).
|
||||
|
||||
tc358743-audio overlay enables I2S audio from the TC358743
|
||||
to the Pi (SD to GPIO20, SCK to GPIO18, WFS to GPIO19).
|
||||
|
||||
ADV7282M is the Analog Devices analogue video to CSI bridge
|
||||
chip.
|
||||
|
||||
OV5647 is the Pi V1.3 camera module. Currently the driver only
|
||||
supports VGA 8bit Bayer and very few controls.
|
||||
|
||||
Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org>
|
||||
---
|
||||
arch/arm/boot/dts/overlays/Makefile | 4 +
|
||||
arch/arm/boot/dts/overlays/README | 51 ++++++++++
|
||||
arch/arm/boot/dts/overlays/adv7282m-overlay.dts | 75 ++++++++++++++
|
||||
arch/arm/boot/dts/overlays/ov5647-overlay.dts | 86 ++++++++++++++++
|
||||
.../boot/dts/overlays/tc358743-audio-overlay.dts | 51 ++++++++++
|
||||
arch/arm/boot/dts/overlays/tc358743-overlay.dts | 111 +++++++++++++++++++++
|
||||
6 files changed, 378 insertions(+)
|
||||
create mode 100644 arch/arm/boot/dts/overlays/adv7282m-overlay.dts
|
||||
create mode 100644 arch/arm/boot/dts/overlays/ov5647-overlay.dts
|
||||
create mode 100644 arch/arm/boot/dts/overlays/tc358743-audio-overlay.dts
|
||||
create mode 100644 arch/arm/boot/dts/overlays/tc358743-overlay.dts
|
||||
|
||||
diff --git a/arch/arm/boot/dts/overlays/Makefile b/arch/arm/boot/dts/overlays/Makefile
|
||||
index 21a3a2c52579..a468a3140789 100644
|
||||
--- a/arch/arm/boot/dts/overlays/Makefile
|
||||
+++ b/arch/arm/boot/dts/overlays/Makefile
|
||||
@@ -6,6 +6,7 @@ dtbo-$(CONFIG_ARCH_BCM2835) += \
|
||||
ads1015.dtbo \
|
||||
ads1115.dtbo \
|
||||
ads7846.dtbo \
|
||||
+ adv7282m.dtbo \
|
||||
akkordion-iqdacplus.dtbo \
|
||||
allo-boss-dac-pcm512x-audio.dtbo \
|
||||
allo-digione.dtbo \
|
||||
@@ -77,6 +78,7 @@ dtbo-$(CONFIG_ARCH_BCM2835) += \
|
||||
mmc.dtbo \
|
||||
mpu6050.dtbo \
|
||||
mz61581.dtbo \
|
||||
+ ov5647.dtbo \
|
||||
papirus.dtbo \
|
||||
pi3-act-led.dtbo \
|
||||
pi3-disable-bt.dtbo \
|
||||
@@ -127,6 +129,8 @@ dtbo-$(CONFIG_ARCH_BCM2835) += \
|
||||
spi2-3cs.dtbo \
|
||||
superaudioboard.dtbo \
|
||||
sx150x.dtbo \
|
||||
+ tc358743.dtbo \
|
||||
+ tc358743-audio.dtbo \
|
||||
tinylcd35.dtbo \
|
||||
uart0.dtbo \
|
||||
uart1.dtbo \
|
||||
diff --git a/arch/arm/boot/dts/overlays/README b/arch/arm/boot/dts/overlays/README
|
||||
index 32114b2dd19f..a1f185a621dd 100644
|
||||
--- a/arch/arm/boot/dts/overlays/README
|
||||
+++ b/arch/arm/boot/dts/overlays/README
|
||||
@@ -267,6 +267,15 @@ Params: cs SPI bus Chip Select (default 1)
|
||||
www.kernel.org/doc/Documentation/devicetree/bindings/input/ads7846.txt
|
||||
|
||||
|
||||
+Name: adv7282m
|
||||
+Info: Analog Devices ADV7282M analogue video to CSI2 bridge.
|
||||
+ Uses Unicam1, which is the standard camera connector on most Pi
|
||||
+ variants.
|
||||
+Load: dtoverlay=adv7282m,<param>=<val>
|
||||
+Params: i2c_pins_28_29 Use pins 28&29 for the I2C instead of 44&45.
|
||||
+ This is required for Pi B+, 2, 0, and 0W.
|
||||
+
|
||||
+
|
||||
Name: akkordion-iqdacplus
|
||||
Info: Configures the Digital Dreamtime Akkordion Music Player (based on the
|
||||
OEM IQAudIO DAC+ or DAC Zero module).
|
||||
@@ -1232,6 +1241,23 @@ Params: speed Display SPI bus speed
|
||||
xohms Touchpanel sensitivity (X-plate resistance)
|
||||
|
||||
|
||||
+Name: ov5647
|
||||
+Info: Omnivision OV5647 camera module.
|
||||
+ Uses Unicam 1, which is the standard camera connector on most Pi
|
||||
+ variants.
|
||||
+Load: dtoverlay=ov5647,<param>=<val>
|
||||
+Params: cam0-pwdn GPIO used to control the sensor powerdown line.
|
||||
+
|
||||
+ cam0-led GPIO used to control the sensor led
|
||||
+ Both these fields should be automatically filled
|
||||
+ in by the firmware to reflect the default GPIO
|
||||
+ configuration of the particular Pi variant in
|
||||
+ use.
|
||||
+
|
||||
+ i2c_pins_28_29 Use pins 28&29 for the I2C instead of 44&45.
|
||||
+ This is required for Pi B+, 2, 0, and 0W.
|
||||
+
|
||||
+
|
||||
Name: papirus
|
||||
Info: PaPiRus ePaper Screen by Pi Supply (both HAT and pHAT)
|
||||
Load: dtoverlay=papirus,<param>=<val>
|
||||
@@ -1828,6 +1854,31 @@ Params: sx150<x>-<n>-<m> Enables SX150X device on I2C#<n> with slave
|
||||
connected.
|
||||
|
||||
|
||||
+Name: tc358743
|
||||
+Info: Toshiba TC358743 HDMI to CSI-2 bridge chip.
|
||||
+ Uses Unicam 1, which is the standard camera connector on most Pi
|
||||
+ variants.
|
||||
+Load: dtoverlay=tc358743,<param>=<val>
|
||||
+Params: 4lane Use 4 lanes (only applicable to Compute Modules
|
||||
+ CAM1 connector).
|
||||
+
|
||||
+ link-frequency Set the link frequency. Only values of 297000000
|
||||
+ (574Mbit/s) and 486000000 (972Mbit/s - default)
|
||||
+ are supported by the driver.
|
||||
+
|
||||
+ i2c_pins_28_29 Use pins 28&29 for the I2C instead of 44&45.
|
||||
+ This is required for Pi B+, 2, 0, and 0W.
|
||||
+
|
||||
+
|
||||
+Name: tc358743-audio
|
||||
+Info: Used in combination with the tc358743-fast overlay to route the audio
|
||||
+ from the TC358743 over I2S to the Pi.
|
||||
+ Wiring is LRCK/WFS to GPIO 19, BCK/SCK to GPIO 18, and DATA/SD to GPIO
|
||||
+ 20.
|
||||
+Load: dtoverlay=tc358743-audio,<param>=<val>
|
||||
+Params: card-name Override the default, "tc358743", card name.
|
||||
+
|
||||
+
|
||||
Name: tinylcd35
|
||||
Info: 3.5" Color TFT Display by www.tinylcd.com
|
||||
Options: Touch, RTC, keypad
|
||||
diff --git a/arch/arm/boot/dts/overlays/adv7282m-overlay.dts b/arch/arm/boot/dts/overlays/adv7282m-overlay.dts
|
||||
new file mode 100644
|
||||
index 000000000000..51e7451d4d9b
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/boot/dts/overlays/adv7282m-overlay.dts
|
||||
@@ -0,0 +1,75 @@
|
||||
+// Definitions for Analog Devices ADV7282-M video to CSI2 bridge on VC I2C bus
|
||||
+/dts-v1/;
|
||||
+/plugin/;
|
||||
+
|
||||
+/{
|
||||
+ compatible = "brcm,bcm2708";
|
||||
+
|
||||
+ fragment@0 {
|
||||
+ target = <&i2c_vc>;
|
||||
+ __overlay__ {
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ adv7282: adv7282@21 {
|
||||
+ compatible = "adi,adv7282-m";
|
||||
+ reg = <0x21>;
|
||||
+ status = "okay";
|
||||
+ clock-frequency = <24000000>;
|
||||
+ port {
|
||||
+ adv7282_0: endpoint {
|
||||
+ remote-endpoint = <&csi1_ep>;
|
||||
+ clock-lanes = <0>;
|
||||
+ data-lanes = <1>;
|
||||
+ link-frequencies =
|
||||
+ /bits/ 64 <297000000>;
|
||||
+
|
||||
+ mclk-frequency = <12000000>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+ fragment@1 {
|
||||
+ target = <&csi1>;
|
||||
+ __overlay__ {
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ port {
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+ csi1_ep: endpoint {
|
||||
+ remote-endpoint = <&adv7282_0>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+ fragment@2 {
|
||||
+ target = <&i2c0_pins>;
|
||||
+ __dormant__ {
|
||||
+ brcm,pins = <28 29>;
|
||||
+ brcm,function = <4>; /* alt0 */
|
||||
+ };
|
||||
+
|
||||
+ };
|
||||
+ fragment@3 {
|
||||
+ target = <&i2c0_pins>;
|
||||
+ __overlay__ {
|
||||
+ brcm,pins = <44 45>;
|
||||
+ brcm,function = <5>; /* alt1 */
|
||||
+ };
|
||||
+ };
|
||||
+ fragment@4 {
|
||||
+ target = <&i2c_vc>;
|
||||
+ __overlay__ {
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ __overrides__ {
|
||||
+ i2c_pins_28_29 = <0>,"+2-3";
|
||||
+ };
|
||||
+};
|
||||
diff --git a/arch/arm/boot/dts/overlays/ov5647-overlay.dts b/arch/arm/boot/dts/overlays/ov5647-overlay.dts
|
||||
new file mode 100644
|
||||
index 000000000000..c92306a0076b
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/boot/dts/overlays/ov5647-overlay.dts
|
||||
@@ -0,0 +1,86 @@
|
||||
+// Definitions for OV5647 camera module on VC I2C bus
|
||||
+/dts-v1/;
|
||||
+/plugin/;
|
||||
+
|
||||
+/{
|
||||
+ compatible = "brcm,bcm2708";
|
||||
+
|
||||
+ fragment@0 {
|
||||
+ target = <&i2c_vc>;
|
||||
+ __overlay__ {
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ ov5647: ov5647@36 {
|
||||
+ compatible = "ov5647";
|
||||
+ reg = <0x36>;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ pwdn-gpios = <&gpio 41 1>, <&gpio 32 1>;
|
||||
+ clocks = <&ov5647_clk>;
|
||||
+
|
||||
+ ov5647_clk: camera-clk {
|
||||
+ compatible = "fixed-clock";
|
||||
+ #clock-cells = <0>;
|
||||
+ clock-frequency = <25000000>;
|
||||
+ };
|
||||
+
|
||||
+ port {
|
||||
+ ov5647_0: endpoint {
|
||||
+ remote-endpoint = <&csi1_ep>;
|
||||
+ clock-lanes = <0>;
|
||||
+ data-lanes = <1 2>;
|
||||
+ clock-noncontinuous;
|
||||
+ link-frequencies =
|
||||
+ /bits/ 64 <297000000>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ fragment@1 {
|
||||
+ target = <&csi1>;
|
||||
+ __overlay__ {
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ port {
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+ csi1_ep: endpoint {
|
||||
+ remote-endpoint = <&ov5647_0>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ fragment@2 {
|
||||
+ target = <&i2c0_pins>;
|
||||
+ __dormant__ {
|
||||
+ brcm,pins = <28 29>;
|
||||
+ brcm,function = <4>; /* alt0 */
|
||||
+ };
|
||||
+ };
|
||||
+ fragment@3 {
|
||||
+ target = <&i2c0_pins>;
|
||||
+ __overlay__ {
|
||||
+ brcm,pins = <44 45>;
|
||||
+ brcm,function = <5>; /* alt1 */
|
||||
+ };
|
||||
+ };
|
||||
+ fragment@4 {
|
||||
+ target = <&i2c_vc>;
|
||||
+ __overlay__ {
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ __overrides__ {
|
||||
+ i2c_pins_28_29 = <0>,"+4-5";
|
||||
+ cam0-pwdn = <&ov5647>,"pwdn-gpios:4";
|
||||
+ cam0-led = <&ov5647>,"pwdn-gpios:16";
|
||||
+ };
|
||||
+};
|
||||
diff --git a/arch/arm/boot/dts/overlays/tc358743-audio-overlay.dts b/arch/arm/boot/dts/overlays/tc358743-audio-overlay.dts
|
||||
new file mode 100644
|
||||
index 000000000000..58ee7d187d22
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/boot/dts/overlays/tc358743-audio-overlay.dts
|
||||
@@ -0,0 +1,51 @@
|
||||
+// Definitions to add I2S audio from the Toshiba TC358743 HDMI to CSI2 bridge.
|
||||
+// Requires tc358743 overlay to have been loaded to actually function.
|
||||
+/dts-v1/;
|
||||
+/plugin/;
|
||||
+
|
||||
+/ {
|
||||
+ compatible = "brcm,bcm2708";
|
||||
+
|
||||
+ fragment@0 {
|
||||
+ target = <&i2s>;
|
||||
+ __overlay__ {
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ fragment@1 {
|
||||
+ target-path = "/";
|
||||
+ __overlay__ {
|
||||
+ tc358743_codec: tc358743-codec {
|
||||
+ #sound-dai-cells = <0>;
|
||||
+ compatible = "linux,spdif-dir";
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ fragment@2 {
|
||||
+ target = <&sound>;
|
||||
+ sound_overlay: __overlay__ {
|
||||
+ compatible = "simple-audio-card";
|
||||
+ simple-audio-card,format = "i2s";
|
||||
+ simple-audio-card,name = "tc358743";
|
||||
+ simple-audio-card,bitclock-master = <&dailink0_slave>;
|
||||
+ simple-audio-card,frame-master = <&dailink0_slave>;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ simple-audio-card,cpu {
|
||||
+ sound-dai = <&i2s>;
|
||||
+ dai-tdm-slot-num = <2>;
|
||||
+ dai-tdm-slot-width = <32>;
|
||||
+ };
|
||||
+ dailink0_slave: simple-audio-card,codec {
|
||||
+ sound-dai = <&tc358743_codec>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ __overrides__ {
|
||||
+ card-name = <&sound_overlay>,"simple-audio-card,name";
|
||||
+ };
|
||||
+};
|
||||
diff --git a/arch/arm/boot/dts/overlays/tc358743-overlay.dts b/arch/arm/boot/dts/overlays/tc358743-overlay.dts
|
||||
new file mode 100644
|
||||
index 000000000000..317a17962e53
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/boot/dts/overlays/tc358743-overlay.dts
|
||||
@@ -0,0 +1,111 @@
|
||||
+// Definitions for Toshiba TC358743 HDMI to CSI2 bridge on VC I2C bus
|
||||
+/dts-v1/;
|
||||
+/plugin/;
|
||||
+
|
||||
+/{
|
||||
+ compatible = "brcm,bcm2708";
|
||||
+
|
||||
+ fragment@0 {
|
||||
+ target = <&i2c_vc>;
|
||||
+ __overlay__ {
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ tc358743@0f {
|
||||
+ compatible = "toshiba,tc358743";
|
||||
+ reg = <0x0f>;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ clocks = <&tc358743_clk>;
|
||||
+ clock-names = "refclk";
|
||||
+
|
||||
+ tc358743_clk: bridge-clk {
|
||||
+ compatible = "fixed-clock";
|
||||
+ #clock-cells = <0>;
|
||||
+ clock-frequency = <27000000>;
|
||||
+ };
|
||||
+
|
||||
+ port {
|
||||
+ tc358743: endpoint {
|
||||
+ remote-endpoint = <&csi1_ep>;
|
||||
+ clock-lanes = <0>;
|
||||
+ clock-noncontinuous;
|
||||
+ link-frequencies =
|
||||
+ /bits/ 64 <486000000>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ fragment@1 {
|
||||
+ target = <&csi1>;
|
||||
+ __overlay__ {
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ port {
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+ csi1_ep: endpoint {
|
||||
+ remote-endpoint = <&tc358743>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ fragment@2 {
|
||||
+ target = <&i2c_vc>;
|
||||
+ __overlay__ {
|
||||
+ tc358743@0f {
|
||||
+ port {
|
||||
+ endpoint {
|
||||
+ data-lanes = <1 2>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ fragment@3 {
|
||||
+ target = <&i2c_vc>;
|
||||
+ __dormant__ {
|
||||
+ tc358743@0f {
|
||||
+ port {
|
||||
+ endpoint {
|
||||
+ data-lanes = <1 2 3 4>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ fragment@4 {
|
||||
+ target = <&i2c0_pins>;
|
||||
+ __dormant__ {
|
||||
+ brcm,pins = <28 29>;
|
||||
+ brcm,function = <4>; /* alt0 */
|
||||
+ };
|
||||
+ };
|
||||
+ fragment@5 {
|
||||
+ target = <&i2c0_pins>;
|
||||
+ __overlay__ {
|
||||
+ brcm,pins = <44 45>;
|
||||
+ brcm,function = <5>; /* alt1 */
|
||||
+ };
|
||||
+ };
|
||||
+ fragment@6 {
|
||||
+ target = <&i2c_vc>;
|
||||
+ __overlay__ {
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ __overrides__ {
|
||||
+ i2c_pins_28_29 = <0>,"+4-5";
|
||||
+ 4lane = <0>, "-2+3";
|
||||
+ link-frequency = <&tc358743>,"link-frequencies#0";
|
||||
+ };
|
||||
+};
|
||||
--
|
||||
2.16.1
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
From a479cfa8b60ea42d5003c1331d228b7a6dd711b5 Mon Sep 17 00:00:00 2001
|
||||
From: Stefan Schake <stschake@gmail.com>
|
||||
Date: Fri, 9 Mar 2018 01:53:34 +0100
|
||||
Subject: [PATCH 378/401] drm/vc4: Set premultiplied for alpha formats
|
||||
|
||||
commit 05202c241f1476d8e2b30bb2699f6780962972e8 upstream.
|
||||
|
||||
Alpha formats in DRM are assumed to be premultiplied, so we should be
|
||||
setting the PREMULT bit in the plane configuration for HVS.
|
||||
|
||||
Changes from v1:
|
||||
- Use correct has_alpha
|
||||
|
||||
Signed-off-by: Stefan Schake <stschake@gmail.com>
|
||||
Signed-off-by: Eric Anholt <eric@anholt.net>
|
||||
Reviewed-by: Eric Anholt <eric@anholt.net>
|
||||
Link: https://patchwork.freedesktop.org/patch/msgid/1520556817-97297-2-git-send-email-stschake@gmail.com
|
||||
---
|
||||
drivers/gpu/drm/vc4/vc4_plane.c | 3 ++-
|
||||
drivers/gpu/drm/vc4/vc4_regs.h | 1 +
|
||||
2 files changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c
|
||||
index bda52f8ffb91..32ed4aa96c33 100644
|
||||
--- a/drivers/gpu/drm/vc4/vc4_plane.c
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_plane.c
|
||||
@@ -619,13 +619,14 @@ static int vc4_plane_mode_set(struct drm_plane *plane,
|
||||
SCALER_POS1_SCL_HEIGHT));
|
||||
}
|
||||
|
||||
- /* Position Word 2: Source Image Size, Alpha Mode */
|
||||
+ /* Position Word 2: Source Image Size, Alpha */
|
||||
vc4_state->pos2_offset = vc4_state->dlist_count;
|
||||
vc4_dlist_write(vc4_state,
|
||||
VC4_SET_FIELD(format->has_alpha ?
|
||||
SCALER_POS2_ALPHA_MODE_PIPELINE :
|
||||
SCALER_POS2_ALPHA_MODE_FIXED,
|
||||
SCALER_POS2_ALPHA_MODE) |
|
||||
+ (format->has_alpha ? SCALER_POS2_ALPHA_PREMULT : 0) |
|
||||
VC4_SET_FIELD(vc4_state->src_w[0], SCALER_POS2_WIDTH) |
|
||||
VC4_SET_FIELD(vc4_state->src_h[0], SCALER_POS2_HEIGHT));
|
||||
|
||||
diff --git a/drivers/gpu/drm/vc4/vc4_regs.h b/drivers/gpu/drm/vc4/vc4_regs.h
|
||||
index 55677bd50f66..e7b0c1f5a1aa 100644
|
||||
--- a/drivers/gpu/drm/vc4/vc4_regs.h
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_regs.h
|
||||
@@ -877,6 +877,7 @@ enum hvs_pixel_format {
|
||||
#define SCALER_POS2_ALPHA_MODE_FIXED 1
|
||||
#define SCALER_POS2_ALPHA_MODE_FIXED_NONZERO 2
|
||||
#define SCALER_POS2_ALPHA_MODE_FIXED_OVER_0x07 3
|
||||
+#define SCALER_POS2_ALPHA_PREMULT BIT(29)
|
||||
|
||||
#define SCALER_POS2_HEIGHT_MASK VC4_MASK(27, 16)
|
||||
#define SCALER_POS2_HEIGHT_SHIFT 16
|
||||
--
|
||||
2.16.1
|
||||
|
|
@ -0,0 +1,68 @@
|
|||
From 3d4165e25676d10288197b89cdd52b067a6695f1 Mon Sep 17 00:00:00 2001
|
||||
From: Stefan Schake <stschake@gmail.com>
|
||||
Date: Fri, 9 Mar 2018 01:53:35 +0100
|
||||
Subject: [PATCH 379/401] drm/vc4: Check if plane requires background fill
|
||||
|
||||
commit 3d67b68a6a3c2deb689c29759a20150c668c286e upstream.
|
||||
|
||||
Considering a single plane only, we have to enable background color
|
||||
when the plane has an alpha format and could be blending from the
|
||||
background or when it doesn't cover the entire screen.
|
||||
|
||||
Changes from v1:
|
||||
- Drop unrelated change
|
||||
- Move needs_bg_fill to plane state
|
||||
|
||||
Signed-off-by: Stefan Schake <stschake@gmail.com>
|
||||
Signed-off-by: Eric Anholt <eric@anholt.net>
|
||||
Reviewed-by: Eric Anholt <eric@anholt.net>
|
||||
Link: https://patchwork.freedesktop.org/patch/msgid/1520556817-97297-3-git-send-email-stschake@gmail.com
|
||||
---
|
||||
drivers/gpu/drm/vc4/vc4_plane.c | 17 +++++++++++++++++
|
||||
1 file changed, 17 insertions(+)
|
||||
|
||||
diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c
|
||||
index 32ed4aa96c33..85324d758b25 100644
|
||||
--- a/drivers/gpu/drm/vc4/vc4_plane.c
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_plane.c
|
||||
@@ -73,6 +73,12 @@ struct vc4_plane_state {
|
||||
|
||||
/* Our allocation in LBM for temporary storage during scaling. */
|
||||
struct drm_mm_node lbm;
|
||||
+
|
||||
+ /* Set when the plane has per-pixel alpha content or does not cover
|
||||
+ * the entire screen. This is a hint to the CRTC that it might need
|
||||
+ * to enable background color fill.
|
||||
+ */
|
||||
+ bool needs_bg_fill;
|
||||
};
|
||||
|
||||
static inline struct vc4_plane_state *
|
||||
@@ -522,6 +528,7 @@ static int vc4_plane_mode_set(struct drm_plane *plane,
|
||||
u32 ctl0_offset = vc4_state->dlist_count;
|
||||
const struct hvs_format *format = vc4_get_hvs_format(fb->format->format);
|
||||
int num_planes = drm_format_num_planes(format->drm);
|
||||
+ bool covers_screen;
|
||||
u32 scl0, scl1, pitch0;
|
||||
u32 lbm_size, tiling;
|
||||
unsigned long irqflags;
|
||||
@@ -702,6 +709,16 @@ static int vc4_plane_mode_set(struct drm_plane *plane,
|
||||
vc4_state->dlist[ctl0_offset] |=
|
||||
VC4_SET_FIELD(vc4_state->dlist_count, SCALER_CTL0_SIZE);
|
||||
|
||||
+ /* crtc_* are already clipped coordinates. */
|
||||
+ covers_screen = vc4_state->crtc_x == 0 && vc4_state->crtc_y == 0 &&
|
||||
+ vc4_state->crtc_w == state->crtc->mode.hdisplay &&
|
||||
+ vc4_state->crtc_h == state->crtc->mode.vdisplay;
|
||||
+ /* Background fill might be necessary when the plane has per-pixel
|
||||
+ * alpha content and blends from the background or does not cover
|
||||
+ * the entire screen.
|
||||
+ */
|
||||
+ vc4_state->needs_bg_fill = format->has_alpha || !covers_screen;
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
--
|
||||
2.16.1
|
||||
|
|
@ -0,0 +1,164 @@
|
|||
From 9563c4554b7fbfc90d54351e7a6e8dfeceb27744 Mon Sep 17 00:00:00 2001
|
||||
From: Stefan Schake <stschake@gmail.com>
|
||||
Date: Fri, 9 Mar 2018 01:53:36 +0100
|
||||
Subject: [PATCH 380/401] drm/vc4: Move plane state to header
|
||||
|
||||
commit 823646983b5a31732ae82ffa60b74555857eb8a0 upstream.
|
||||
|
||||
We need to reference it from the CRTC to make a decision for enabling
|
||||
background color fill.
|
||||
|
||||
Signed-off-by: Stefan Schake <stschake@gmail.com>
|
||||
Signed-off-by: Eric Anholt <eric@anholt.net>
|
||||
Reviewed-by: Eric Anholt <eric@anholt.net>
|
||||
Link: https://patchwork.freedesktop.org/patch/msgid/1520556817-97297-4-git-send-email-stschake@gmail.com
|
||||
---
|
||||
drivers/gpu/drm/vc4/vc4_drv.h | 60 +++++++++++++++++++++++++++++++++++++++++
|
||||
drivers/gpu/drm/vc4/vc4_plane.c | 60 -----------------------------------------
|
||||
2 files changed, 60 insertions(+), 60 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/vc4/vc4_drv.h b/drivers/gpu/drm/vc4/vc4_drv.h
|
||||
index 0d71831571ea..8e5d4aba750a 100644
|
||||
--- a/drivers/gpu/drm/vc4/vc4_drv.h
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_drv.h
|
||||
@@ -278,6 +278,66 @@ to_vc4_plane(struct drm_plane *plane)
|
||||
return (struct vc4_plane *)plane;
|
||||
}
|
||||
|
||||
+enum vc4_scaling_mode {
|
||||
+ VC4_SCALING_NONE,
|
||||
+ VC4_SCALING_TPZ,
|
||||
+ VC4_SCALING_PPF,
|
||||
+};
|
||||
+
|
||||
+struct vc4_plane_state {
|
||||
+ struct drm_plane_state base;
|
||||
+ /* System memory copy of the display list for this element, computed
|
||||
+ * at atomic_check time.
|
||||
+ */
|
||||
+ u32 *dlist;
|
||||
+ u32 dlist_size; /* Number of dwords allocated for the display list */
|
||||
+ u32 dlist_count; /* Number of used dwords in the display list. */
|
||||
+
|
||||
+ /* Offset in the dlist to various words, for pageflip or
|
||||
+ * cursor updates.
|
||||
+ */
|
||||
+ u32 pos0_offset;
|
||||
+ u32 pos2_offset;
|
||||
+ u32 ptr0_offset;
|
||||
+
|
||||
+ /* Offset where the plane's dlist was last stored in the
|
||||
+ * hardware at vc4_crtc_atomic_flush() time.
|
||||
+ */
|
||||
+ u32 __iomem *hw_dlist;
|
||||
+
|
||||
+ /* Clipped coordinates of the plane on the display. */
|
||||
+ int crtc_x, crtc_y, crtc_w, crtc_h;
|
||||
+ /* Clipped area being scanned from in the FB. */
|
||||
+ u32 src_x, src_y;
|
||||
+
|
||||
+ u32 src_w[2], src_h[2];
|
||||
+
|
||||
+ /* Scaling selection for the RGB/Y plane and the Cb/Cr planes. */
|
||||
+ enum vc4_scaling_mode x_scaling[2], y_scaling[2];
|
||||
+ bool is_unity;
|
||||
+ bool is_yuv;
|
||||
+
|
||||
+ /* Offset to start scanning out from the start of the plane's
|
||||
+ * BO.
|
||||
+ */
|
||||
+ u32 offsets[3];
|
||||
+
|
||||
+ /* Our allocation in LBM for temporary storage during scaling. */
|
||||
+ struct drm_mm_node lbm;
|
||||
+
|
||||
+ /* Set when the plane has per-pixel alpha content or does not cover
|
||||
+ * the entire screen. This is a hint to the CRTC that it might need
|
||||
+ * to enable background color fill.
|
||||
+ */
|
||||
+ bool needs_bg_fill;
|
||||
+};
|
||||
+
|
||||
+static inline struct vc4_plane_state *
|
||||
+to_vc4_plane_state(struct drm_plane_state *state)
|
||||
+{
|
||||
+ return (struct vc4_plane_state *)state;
|
||||
+}
|
||||
+
|
||||
enum vc4_encoder_type {
|
||||
VC4_ENCODER_TYPE_NONE,
|
||||
VC4_ENCODER_TYPE_HDMI,
|
||||
diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c
|
||||
index 85324d758b25..770f50c31e57 100644
|
||||
--- a/drivers/gpu/drm/vc4/vc4_plane.c
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_plane.c
|
||||
@@ -27,66 +27,6 @@
|
||||
#include "vc4_drv.h"
|
||||
#include "vc4_regs.h"
|
||||
|
||||
-enum vc4_scaling_mode {
|
||||
- VC4_SCALING_NONE,
|
||||
- VC4_SCALING_TPZ,
|
||||
- VC4_SCALING_PPF,
|
||||
-};
|
||||
-
|
||||
-struct vc4_plane_state {
|
||||
- struct drm_plane_state base;
|
||||
- /* System memory copy of the display list for this element, computed
|
||||
- * at atomic_check time.
|
||||
- */
|
||||
- u32 *dlist;
|
||||
- u32 dlist_size; /* Number of dwords allocated for the display list */
|
||||
- u32 dlist_count; /* Number of used dwords in the display list. */
|
||||
-
|
||||
- /* Offset in the dlist to various words, for pageflip or
|
||||
- * cursor updates.
|
||||
- */
|
||||
- u32 pos0_offset;
|
||||
- u32 pos2_offset;
|
||||
- u32 ptr0_offset;
|
||||
-
|
||||
- /* Offset where the plane's dlist was last stored in the
|
||||
- * hardware at vc4_crtc_atomic_flush() time.
|
||||
- */
|
||||
- u32 __iomem *hw_dlist;
|
||||
-
|
||||
- /* Clipped coordinates of the plane on the display. */
|
||||
- int crtc_x, crtc_y, crtc_w, crtc_h;
|
||||
- /* Clipped area being scanned from in the FB. */
|
||||
- u32 src_x, src_y;
|
||||
-
|
||||
- u32 src_w[2], src_h[2];
|
||||
-
|
||||
- /* Scaling selection for the RGB/Y plane and the Cb/Cr planes. */
|
||||
- enum vc4_scaling_mode x_scaling[2], y_scaling[2];
|
||||
- bool is_unity;
|
||||
- bool is_yuv;
|
||||
-
|
||||
- /* Offset to start scanning out from the start of the plane's
|
||||
- * BO.
|
||||
- */
|
||||
- u32 offsets[3];
|
||||
-
|
||||
- /* Our allocation in LBM for temporary storage during scaling. */
|
||||
- struct drm_mm_node lbm;
|
||||
-
|
||||
- /* Set when the plane has per-pixel alpha content or does not cover
|
||||
- * the entire screen. This is a hint to the CRTC that it might need
|
||||
- * to enable background color fill.
|
||||
- */
|
||||
- bool needs_bg_fill;
|
||||
-};
|
||||
-
|
||||
-static inline struct vc4_plane_state *
|
||||
-to_vc4_plane_state(struct drm_plane_state *state)
|
||||
-{
|
||||
- return (struct vc4_plane_state *)state;
|
||||
-}
|
||||
-
|
||||
static const struct hvs_format {
|
||||
u32 drm; /* DRM_FORMAT_* */
|
||||
u32 hvs; /* HVS_FORMAT_* */
|
||||
--
|
||||
2.16.1
|
||||
|
|
@ -0,0 +1,77 @@
|
|||
From be09ec5fb2f4feb89f29e73f4d56fbc6aa8ce7da Mon Sep 17 00:00:00 2001
|
||||
From: Stefan Schake <stschake@gmail.com>
|
||||
Date: Fri, 9 Mar 2018 01:53:37 +0100
|
||||
Subject: [PATCH 381/401] drm/vc4: Enable background color fill when necessary
|
||||
|
||||
commit 1d49f2e546a5a3258a88f85a1c04fd6feb6def37 upstream.
|
||||
|
||||
Using the hint from the plane state, we turn on the background color
|
||||
to avoid display corruption from planes blending with the background.
|
||||
|
||||
Changes from v1:
|
||||
- Use needs_bg_fill from plane state
|
||||
|
||||
Signed-off-by: Stefan Schake <stschake@gmail.com>
|
||||
Signed-off-by: Eric Anholt <eric@anholt.net>
|
||||
Reviewed-by: Eric Anholt <eric@anholt.net>
|
||||
Link: https://patchwork.freedesktop.org/patch/msgid/1520556817-97297-5-git-send-email-stschake@gmail.com
|
||||
---
|
||||
drivers/gpu/drm/vc4/vc4_crtc.c | 25 +++++++++++++++++++++++++
|
||||
1 file changed, 25 insertions(+)
|
||||
|
||||
diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crtc.c
|
||||
index 6fca0f686207..c449ffd5c612 100644
|
||||
--- a/drivers/gpu/drm/vc4/vc4_crtc.c
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_crtc.c
|
||||
@@ -646,9 +646,12 @@ static void vc4_crtc_atomic_flush(struct drm_crtc *crtc,
|
||||
{
|
||||
struct drm_device *dev = crtc->dev;
|
||||
struct vc4_dev *vc4 = to_vc4_dev(dev);
|
||||
+ struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc);
|
||||
struct vc4_crtc_state *vc4_state = to_vc4_crtc_state(crtc->state);
|
||||
struct drm_plane *plane;
|
||||
+ struct vc4_plane_state *vc4_plane_state;
|
||||
bool debug_dump_regs = false;
|
||||
+ bool enable_bg_fill = false;
|
||||
u32 __iomem *dlist_start = vc4->hvs->dlist + vc4_state->mm.start;
|
||||
u32 __iomem *dlist_next = dlist_start;
|
||||
|
||||
@@ -659,6 +662,20 @@ static void vc4_crtc_atomic_flush(struct drm_crtc *crtc,
|
||||
|
||||
/* Copy all the active planes' dlist contents to the hardware dlist. */
|
||||
drm_atomic_crtc_for_each_plane(plane, crtc) {
|
||||
+ /* Is this the first active plane? */
|
||||
+ if (dlist_next == dlist_start) {
|
||||
+ /* We need to enable background fill when a plane
|
||||
+ * could be alpha blending from the background, i.e.
|
||||
+ * where no other plane is underneath. It suffices to
|
||||
+ * consider the first active plane here since we set
|
||||
+ * needs_bg_fill such that either the first plane
|
||||
+ * already needs it or all planes on top blend from
|
||||
+ * the first or a lower plane.
|
||||
+ */
|
||||
+ vc4_plane_state = to_vc4_plane_state(plane->state);
|
||||
+ enable_bg_fill = vc4_plane_state->needs_bg_fill;
|
||||
+ }
|
||||
+
|
||||
dlist_next += vc4_plane_write_dlist(plane, dlist_next);
|
||||
}
|
||||
|
||||
@@ -667,6 +684,14 @@ static void vc4_crtc_atomic_flush(struct drm_crtc *crtc,
|
||||
|
||||
WARN_ON_ONCE(dlist_next - dlist_start != vc4_state->mm.size);
|
||||
|
||||
+ if (enable_bg_fill)
|
||||
+ /* This sets a black background color fill, as is the case
|
||||
+ * with other DRM drivers.
|
||||
+ */
|
||||
+ HVS_WRITE(SCALER_DISPBKGNDX(vc4_crtc->channel),
|
||||
+ HVS_READ(SCALER_DISPBKGNDX(vc4_crtc->channel)) |
|
||||
+ SCALER_DISPBKGND_FILL);
|
||||
+
|
||||
/* Only update DISPLIST if the CRTC was already running and is not
|
||||
* being disabled.
|
||||
* vc4_crtc_enable() takes care of updating the dlist just after
|
||||
--
|
||||
2.16.1
|
||||
|
|
@ -0,0 +1,84 @@
|
|||
From 1fa25792a2e83012e91de333034b9c9033adc1c3 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.org>
|
||||
Date: Mon, 9 Jul 2018 21:11:32 +0100
|
||||
Subject: [PATCH 382/401] overlays: Add addr parameter to i2c-rtc (& -gpio)
|
||||
|
||||
See: https://github.com/raspberrypi/linux/issues/2611
|
||||
|
||||
Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
---
|
||||
.../arm/boot/dts/overlays/i2c-rtc-gpio-overlay.dts | 28 ++++++++++++++++++++++
|
||||
arch/arm/boot/dts/overlays/i2c-rtc-overlay.dts | 11 +++++++++
|
||||
3 files changed, 49 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/boot/dts/overlays/i2c-rtc-gpio-overlay.dts b/arch/arm/boot/dts/overlays/i2c-rtc-gpio-overlay.dts
|
||||
index 8415e6081428..4fd47ffa8575 100644
|
||||
--- a/arch/arm/boot/dts/overlays/i2c-rtc-gpio-overlay.dts
|
||||
+++ b/arch/arm/boot/dts/overlays/i2c-rtc-gpio-overlay.dts
|
||||
@@ -159,6 +159,21 @@
|
||||
};
|
||||
};
|
||||
|
||||
+ fragment@10 {
|
||||
+ target = <&i2c_arm>;
|
||||
+ __dormant__ {
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ m41t62: m41t62@68 {
|
||||
+ compatible = "st,m41t62";
|
||||
+ reg = <0x68>;
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
__overrides__ {
|
||||
abx80x = <0>,"+1";
|
||||
ds1307 = <0>,"+2";
|
||||
@@ -169,6 +184,19 @@
|
||||
pcf2127 = <0>,"+7";
|
||||
pcf8523 = <0>,"+8";
|
||||
pcf8563 = <0>,"+9";
|
||||
+ m41t62 = <0>,"+10";
|
||||
+
|
||||
+ addr = <&abx80x>, "reg:0",
|
||||
+ <&ds1307>, "reg:0",
|
||||
+ <&ds1339>, "reg:0",
|
||||
+ <&ds3231>, "reg:0",
|
||||
+ <&mcp7940x>, "reg:0",
|
||||
+ <&mcp7941x>, "reg:0",
|
||||
+ <&pcf2127>, "reg:0",
|
||||
+ <&pcf8523>, "reg:0",
|
||||
+ <&pcf8563>, "reg:0",
|
||||
+ <&m41t62>, "reg:0";
|
||||
+
|
||||
trickle-diode-type = <&abx80x>,"abracon,tc-diode";
|
||||
trickle-resistor-ohms = <&ds1339>,"trickle-resistor-ohms:0",
|
||||
<&abx80x>,"abracon,tc-resistor";
|
||||
diff --git a/arch/arm/boot/dts/overlays/i2c-rtc-overlay.dts b/arch/arm/boot/dts/overlays/i2c-rtc-overlay.dts
|
||||
index fcb846a50d19..7f11b7c64638 100644
|
||||
--- a/arch/arm/boot/dts/overlays/i2c-rtc-overlay.dts
|
||||
+++ b/arch/arm/boot/dts/overlays/i2c-rtc-overlay.dts
|
||||
@@ -169,6 +169,17 @@
|
||||
pcf8523 = <0>,"+7";
|
||||
pcf8563 = <0>,"+8";
|
||||
m41t62 = <0>,"+9";
|
||||
+
|
||||
+ addr = <&abx80x>, "reg:0",
|
||||
+ <&ds1307>, "reg:0",
|
||||
+ <&ds1339>, "reg:0",
|
||||
+ <&ds3231>, "reg:0",
|
||||
+ <&mcp7940x>, "reg:0",
|
||||
+ <&mcp7941x>, "reg:0",
|
||||
+ <&pcf2127>, "reg:0",
|
||||
+ <&pcf8523>, "reg:0",
|
||||
+ <&pcf8563>, "reg:0",
|
||||
+ <&m41t62>, "reg:0";
|
||||
trickle-diode-type = <&abx80x>,"abracon,tc-diode";
|
||||
trickle-resistor-ohms = <&ds1339>,"trickle-resistor-ohms:0",
|
||||
<&abx80x>,"abracon,tc-resistor";
|
||||
--
|
||||
2.16.1
|
||||
|
|
@ -0,0 +1,83 @@
|
|||
From 00ff5f4a998ccba04554f8f5bb01cca6502d5cdf Mon Sep 17 00:00:00 2001
|
||||
From: Eric Anholt <eric@anholt.net>
|
||||
Date: Fri, 9 Mar 2018 15:32:56 -0800
|
||||
Subject: [PATCH 383/401] drm/vc4: Fix oops dereferencing DPI's connector since
|
||||
panel_bridge.
|
||||
|
||||
In the cleanup, I didn't notice that we needed to dereference the
|
||||
connector for the bus_format. Fix the regression by looking up the
|
||||
first (and only) connector attached to us, and assume that its
|
||||
bus_format is what we want. Some day it would be good to have that
|
||||
part of display_info attached to the bridge, instead.
|
||||
|
||||
v2: Fix stray whitespace change
|
||||
|
||||
Signed-off-by: Eric Anholt <eric@anholt.net>
|
||||
Fixes: 7b1298e05310 ("drm/vc4: Switch DPI to using the panel-bridge helper.")
|
||||
Link: https://patchwork.freedesktop.org/patch/msgid/20180309233256.1667-1-eric@anholt.net
|
||||
Reviewed-by: Sean Paul <seanpaul@chromium.org>
|
||||
Reviewed-by: Boris Brezillon <boris.brezillon@bootlin.com>
|
||||
(cherry picked from commit 721fe38db2010e8d475abf2c1d2bafb6dc031741)
|
||||
---
|
||||
drivers/gpu/drm/vc4/vc4_dpi.c | 25 ++++++++++++++++++++++---
|
||||
1 file changed, 22 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/vc4/vc4_dpi.c b/drivers/gpu/drm/vc4/vc4_dpi.c
|
||||
index 519cefef800d..1a7d9cd08e0b 100644
|
||||
--- a/drivers/gpu/drm/vc4/vc4_dpi.c
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_dpi.c
|
||||
@@ -96,7 +96,6 @@ struct vc4_dpi {
|
||||
struct platform_device *pdev;
|
||||
|
||||
struct drm_encoder *encoder;
|
||||
- struct drm_connector *connector;
|
||||
struct drm_bridge *bridge;
|
||||
bool is_panel_bridge;
|
||||
|
||||
@@ -166,14 +165,31 @@ static void vc4_dpi_encoder_disable(struct drm_encoder *encoder)
|
||||
|
||||
static void vc4_dpi_encoder_enable(struct drm_encoder *encoder)
|
||||
{
|
||||
+ struct drm_device *dev = encoder->dev;
|
||||
struct drm_display_mode *mode = &encoder->crtc->mode;
|
||||
struct vc4_dpi_encoder *vc4_encoder = to_vc4_dpi_encoder(encoder);
|
||||
struct vc4_dpi *dpi = vc4_encoder->dpi;
|
||||
+ struct drm_connector_list_iter conn_iter;
|
||||
+ struct drm_connector *connector = NULL, *connector_scan;
|
||||
u32 dpi_c = DPI_ENABLE | DPI_OUTPUT_ENABLE_MODE;
|
||||
int ret;
|
||||
|
||||
- if (dpi->connector->display_info.num_bus_formats) {
|
||||
- u32 bus_format = dpi->connector->display_info.bus_formats[0];
|
||||
+ /* Look up the connector attached to DPI so we can get the
|
||||
+ * bus_format. Ideally the bridge would tell us the
|
||||
+ * bus_format we want, but it doesn't yet, so assume that it's
|
||||
+ * uniform throughout the bridge chain.
|
||||
+ */
|
||||
+ drm_connector_list_iter_begin(dev, &conn_iter);
|
||||
+ drm_for_each_connector_iter(connector_scan, &conn_iter) {
|
||||
+ if (connector_scan->encoder == encoder) {
|
||||
+ connector = connector_scan;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ drm_connector_list_iter_end(&conn_iter);
|
||||
+
|
||||
+ if (connector && connector->display_info.num_bus_formats) {
|
||||
+ u32 bus_format = connector->display_info.bus_formats[0];
|
||||
|
||||
switch (bus_format) {
|
||||
case MEDIA_BUS_FMT_RGB888_1X24:
|
||||
@@ -201,6 +217,9 @@ static void vc4_dpi_encoder_enable(struct drm_encoder *encoder)
|
||||
DRM_ERROR("Unknown media bus format %d\n", bus_format);
|
||||
break;
|
||||
}
|
||||
+ } else {
|
||||
+ /* Default to 24bit if no connector found. */
|
||||
+ dpi_c |= VC4_SET_FIELD(DPI_FORMAT_24BIT_888_RGB, DPI_FORMAT);
|
||||
}
|
||||
|
||||
if (mode->flags & DRM_MODE_FLAG_NHSYNC)
|
||||
--
|
||||
2.16.1
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
From 9f04eaef30cabd0644aca13229ed297b4fc7fc10 Mon Sep 17 00:00:00 2001
|
||||
From: Eric Anholt <eric@anholt.net>
|
||||
Date: Wed, 10 Feb 2016 11:31:52 -0800
|
||||
Subject: [PATCH 384/401] ARM: bcm2835: Add the DPI hardware to the device
|
||||
tree.
|
||||
|
||||
It's currently marked disabled, as it's not useful without a panel
|
||||
associated with it and the GPIO pins routed to ALT2.
|
||||
|
||||
Signed-off-by: Eric Anholt <eric@anholt.net>
|
||||
---
|
||||
arch/arm/boot/dts/bcm283x.dtsi | 11 +++++++++++
|
||||
1 file changed, 11 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/boot/dts/bcm283x.dtsi b/arch/arm/boot/dts/bcm283x.dtsi
|
||||
index a4663737b556..22eca6fad427 100644
|
||||
--- a/arch/arm/boot/dts/bcm283x.dtsi
|
||||
+++ b/arch/arm/boot/dts/bcm283x.dtsi
|
||||
@@ -438,6 +438,17 @@
|
||||
interrupts = <2 14>; /* pwa1 */
|
||||
};
|
||||
|
||||
+ dpi: dpi@7e208000 {
|
||||
+ compatible = "brcm,bcm2835-dpi";
|
||||
+ reg = <0x7e208000 0x8c>;
|
||||
+ clocks = <&clocks BCM2835_CLOCK_VPU>,
|
||||
+ <&clocks BCM2835_CLOCK_DPI>;
|
||||
+ clock-names = "core", "pixel";
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+ status = "disabled";
|
||||
+ };
|
||||
+
|
||||
dsi0: dsi@7e209000 {
|
||||
compatible = "brcm,bcm2835-dsi0";
|
||||
reg = <0x7e209000 0x78>;
|
||||
--
|
||||
2.16.1
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
From 872c623a4fea340b200217c164fb63bec253b6a5 Mon Sep 17 00:00:00 2001
|
||||
From: Eric Anholt <eric@anholt.net>
|
||||
Date: Fri, 9 Mar 2018 14:24:05 -0800
|
||||
Subject: [PATCH 385/401] ARM: BCM270X: Add the 18-bit DPI pinmux to the RPI
|
||||
DTs.
|
||||
|
||||
This doesn't do anything by default, but trying to put the node in an
|
||||
overlay failed for me.
|
||||
|
||||
Signed-off-by: Eric Anholt <eric@anholt.net>
|
||||
---
|
||||
arch/arm/boot/dts/bcm270x.dtsi | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/boot/dts/bcm270x.dtsi b/arch/arm/boot/dts/bcm270x.dtsi
|
||||
index d26b10ad0245..05828277ff89 100644
|
||||
--- a/arch/arm/boot/dts/bcm270x.dtsi
|
||||
+++ b/arch/arm/boot/dts/bcm270x.dtsi
|
||||
@@ -19,6 +19,13 @@
|
||||
|
||||
gpio@7e200000 { /* gpio */
|
||||
interrupts = <2 17>, <2 18>;
|
||||
+
|
||||
+ dpi_18bit_gpio0: dpi_18bit_gpio0 {
|
||||
+ brcm,pins = <0 1 2 3 4 5 6 7 8 9 10 11
|
||||
+ 12 13 14 15 16 17 18 19
|
||||
+ 20 21>;
|
||||
+ brcm,function = <BCM2835_FSEL_ALT2>;
|
||||
+ };
|
||||
};
|
||||
|
||||
serial@7e201000 { /* uart0 */
|
||||
--
|
||||
2.16.1
|
||||
|
|
@ -0,0 +1,95 @@
|
|||
From 335b9e53d210d60e2eb02ad9d63ce35b41e3409a Mon Sep 17 00:00:00 2001
|
||||
From: Eric Anholt <eric@anholt.net>
|
||||
Date: Fri, 9 Mar 2018 13:20:21 -0800
|
||||
Subject: [PATCH 386/401] overlays: Add an overlay for the Adafruit Kippah with
|
||||
their 7" panel
|
||||
|
||||
Signed-off-by: Eric Anholt <eric@anholt.net>
|
||||
---
|
||||
arch/arm/boot/dts/overlays/Makefile | 1 +
|
||||
arch/arm/boot/dts/overlays/README | 6 +++
|
||||
.../dts/overlays/vc4-kms-kippah-7inch-overlay.dts | 43 ++++++++++++++++++++++
|
||||
3 files changed, 50 insertions(+)
|
||||
create mode 100644 arch/arm/boot/dts/overlays/vc4-kms-kippah-7inch-overlay.dts
|
||||
|
||||
diff --git a/arch/arm/boot/dts/overlays/Makefile b/arch/arm/boot/dts/overlays/Makefile
|
||||
index a468a3140789..969f40721038 100644
|
||||
--- a/arch/arm/boot/dts/overlays/Makefile
|
||||
+++ b/arch/arm/boot/dts/overlays/Makefile
|
||||
@@ -137,6 +137,7 @@ dtbo-$(CONFIG_ARCH_BCM2835) += \
|
||||
upstream.dtbo \
|
||||
upstream-aux-interrupt.dtbo \
|
||||
vc4-fkms-v3d.dtbo \
|
||||
+ vc4-kms-kippah-7inch.dtbo \
|
||||
vc4-kms-v3d.dtbo \
|
||||
vga666.dtbo \
|
||||
w1-gpio.dtbo \
|
||||
diff --git a/arch/arm/boot/dts/overlays/README b/arch/arm/boot/dts/overlays/README
|
||||
index a62b854d3d57..801fbb19699c 100644
|
||||
--- a/arch/arm/boot/dts/overlays/README
|
||||
+++ b/arch/arm/boot/dts/overlays/README
|
||||
@@ -1977,6 +1977,12 @@ Params: cma-256 CMA is 256MB, 256MB-aligned (needs 1GB)
|
||||
cma-64 CMA is 64MB, 64MB-aligned
|
||||
|
||||
|
||||
+Name: vc4-kms-kippah-7inch
|
||||
+Info: Enable the Adafruit DPI Kippah with the 7" Ontat panel attached.
|
||||
+ Requires vc4-kms-v3d to be loaded.
|
||||
+Load: dtoverlay=vc4-kms-kippah-7inch
|
||||
+
|
||||
+
|
||||
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
|
||||
diff --git a/arch/arm/boot/dts/overlays/vc4-kms-kippah-7inch-overlay.dts b/arch/arm/boot/dts/overlays/vc4-kms-kippah-7inch-overlay.dts
|
||||
new file mode 100644
|
||||
index 000000000000..1e20d7e51115
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/boot/dts/overlays/vc4-kms-kippah-7inch-overlay.dts
|
||||
@@ -0,0 +1,43 @@
|
||||
+/*
|
||||
+ * vc4-kms-v3d-overlay.dts
|
||||
+ */
|
||||
+
|
||||
+/dts-v1/;
|
||||
+/plugin/;
|
||||
+
|
||||
+#include <dt-bindings/pinctrl/bcm2835.h>
|
||||
+
|
||||
+/ {
|
||||
+ compatible = "brcm,bcm2835", "brcm,bcm2708", "brcm,bcm2709";
|
||||
+
|
||||
+ fragment@0 {
|
||||
+ target-path = "/";
|
||||
+ __overlay__ {
|
||||
+ panel: panel {
|
||||
+ compatible = "ontat,yx700wv03", "simple-panel";
|
||||
+
|
||||
+ port {
|
||||
+ panel_in: endpoint {
|
||||
+ remote-endpoint = <&dpi_out>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ fragment@1 {
|
||||
+ target = <&dpi>;
|
||||
+ __overlay__ {
|
||||
+ status = "okay";
|
||||
+
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&dpi_18bit_gpio0>;
|
||||
+
|
||||
+ port {
|
||||
+ dpi_out: endpoint@0 {
|
||||
+ remote-endpoint = <&panel_in>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
--
|
||||
2.16.1
|
||||
|
|
@ -0,0 +1,56 @@
|
|||
From b0d2d00a2ea701b5b56ad69c0f51d02bbfc38ea8 Mon Sep 17 00:00:00 2001
|
||||
From: Eric Anholt <eric@anholt.net>
|
||||
Date: Fri, 9 Mar 2018 13:26:33 -0800
|
||||
Subject: [PATCH 387/401] overlays: Remove stale notes about vc4's CMA
|
||||
alignment in the README.
|
||||
|
||||
We haven't needed alignment since
|
||||
553c942f8b2cbc7394b4d4fa2f848b23a8f07451, and the current overlays
|
||||
don't specify any.
|
||||
|
||||
Signed-off-by: Eric Anholt <eric@anholt.net>
|
||||
---
|
||||
arch/arm/boot/dts/overlays/README | 20 ++++++++++----------
|
||||
1 file changed, 10 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/arch/arm/boot/dts/overlays/README b/arch/arm/boot/dts/overlays/README
|
||||
index 801fbb19699c..f9a9ce7d42de 100644
|
||||
--- a/arch/arm/boot/dts/overlays/README
|
||||
+++ b/arch/arm/boot/dts/overlays/README
|
||||
@@ -1958,11 +1958,11 @@ Name: vc4-fkms-v3d
|
||||
Info: Enable Eric Anholt's DRM VC4 V3D driver on top of the dispmanx
|
||||
display stack.
|
||||
Load: dtoverlay=vc4-fkms-v3d,<param>
|
||||
-Params: cma-256 CMA is 256MB, 256MB-aligned (needs 1GB)
|
||||
- cma-192 CMA is 192MB, 256MB-aligned (needs 1GB)
|
||||
- cma-128 CMA is 128MB, 128MB-aligned
|
||||
- cma-96 CMA is 96MB, 128MB-aligned
|
||||
- cma-64 CMA is 64MB, 64MB-aligned
|
||||
+Params: cma-256 CMA is 256MB (needs 1GB)
|
||||
+ cma-192 CMA is 192MB (needs 1GB)
|
||||
+ cma-128 CMA is 128MB
|
||||
+ cma-96 CMA is 96MB
|
||||
+ cma-64 CMA is 64MB
|
||||
|
||||
|
||||
Name: vc4-kms-v3d
|
||||
@@ -1970,11 +1970,11 @@ 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,<param>
|
||||
-Params: cma-256 CMA is 256MB, 256MB-aligned (needs 1GB)
|
||||
- cma-192 CMA is 192MB, 256MB-aligned (needs 1GB)
|
||||
- cma-128 CMA is 128MB, 128MB-aligned
|
||||
- cma-96 CMA is 96MB, 128MB-aligned
|
||||
- cma-64 CMA is 64MB, 64MB-aligned
|
||||
+Params: cma-256 CMA is 256MB (needs 1GB)
|
||||
+ cma-192 CMA is 192MB (needs 1GB)
|
||||
+ cma-128 CMA is 128MB
|
||||
+ cma-96 CMA is 96MB
|
||||
+ cma-64 CMA is 64MB
|
||||
|
||||
|
||||
Name: vc4-kms-kippah-7inch
|
||||
--
|
||||
2.16.1
|
||||
|
|
@ -0,0 +1,104 @@
|
|||
From 8b386830eaa6a56942bf72e6a1caff7f9b5a2d39 Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Stone <daniels@collabora.com>
|
||||
Date: Tue, 8 Aug 2017 17:44:48 +0100
|
||||
Subject: [PATCH 388/401] drm/vc4: Advertise supported modifiers for planes
|
||||
|
||||
The IN_FORMATS blob allows the kernel to advertise to userspace which
|
||||
format/modifier combinations are supported, per plane. Use this to
|
||||
advertise that we support both T_TILED and linear.
|
||||
|
||||
v2:
|
||||
- Only advertise T_TILED for RGB (Eric)
|
||||
- Actually turn on allow_fb_modifiers (Eric)
|
||||
|
||||
Signed-off-by: Daniel Stone <daniels@collabora.com>
|
||||
Signed-off-by: Eric Anholt <eric@anholt.net>
|
||||
Reviewed-by: Eric Anholt <eric@anholt.net>
|
||||
Link: https://patchwork.freedesktop.org/patch/170828/
|
||||
(cherry picked from commit 423ad7b3cbd1158d080e20119a7a5f93a085a486)
|
||||
---
|
||||
drivers/gpu/drm/vc4/vc4_kms.c | 1 +
|
||||
drivers/gpu/drm/vc4/vc4_plane.c | 34 +++++++++++++++++++++++++++++++++-
|
||||
2 files changed, 34 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/vc4/vc4_kms.c b/drivers/gpu/drm/vc4/vc4_kms.c
|
||||
index f73343e08fe6..36b53258fe62 100644
|
||||
--- a/drivers/gpu/drm/vc4/vc4_kms.c
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_kms.c
|
||||
@@ -222,6 +222,7 @@ int vc4_kms_load(struct drm_device *dev)
|
||||
dev->mode_config.funcs = &vc4_mode_funcs;
|
||||
dev->mode_config.preferred_depth = 24;
|
||||
dev->mode_config.async_page_flip = true;
|
||||
+ dev->mode_config.allow_fb_modifiers = true;
|
||||
|
||||
drm_mode_config_reset(dev);
|
||||
|
||||
diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c
|
||||
index 770f50c31e57..a2d65ae3c1c2 100644
|
||||
--- a/drivers/gpu/drm/vc4/vc4_plane.c
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_plane.c
|
||||
@@ -865,6 +865,32 @@ vc4_update_plane(struct drm_plane *plane,
|
||||
ctx);
|
||||
}
|
||||
|
||||
+static bool vc4_format_mod_supported(struct drm_plane *plane,
|
||||
+ uint32_t format,
|
||||
+ uint64_t modifier)
|
||||
+{
|
||||
+ /* Support T_TILING for RGB formats only. */
|
||||
+ switch (format) {
|
||||
+ case DRM_FORMAT_XRGB8888:
|
||||
+ case DRM_FORMAT_ARGB8888:
|
||||
+ case DRM_FORMAT_ABGR8888:
|
||||
+ case DRM_FORMAT_XBGR8888:
|
||||
+ case DRM_FORMAT_RGB565:
|
||||
+ case DRM_FORMAT_BGR565:
|
||||
+ case DRM_FORMAT_ARGB1555:
|
||||
+ case DRM_FORMAT_XRGB1555:
|
||||
+ return true;
|
||||
+ case DRM_FORMAT_YUV422:
|
||||
+ case DRM_FORMAT_YVU422:
|
||||
+ case DRM_FORMAT_YUV420:
|
||||
+ case DRM_FORMAT_YVU420:
|
||||
+ case DRM_FORMAT_NV12:
|
||||
+ case DRM_FORMAT_NV16:
|
||||
+ default:
|
||||
+ return (modifier == DRM_FORMAT_MOD_LINEAR);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
static const struct drm_plane_funcs vc4_plane_funcs = {
|
||||
.update_plane = vc4_update_plane,
|
||||
.disable_plane = drm_atomic_helper_disable_plane,
|
||||
@@ -873,6 +899,7 @@ static const struct drm_plane_funcs vc4_plane_funcs = {
|
||||
.reset = vc4_plane_reset,
|
||||
.atomic_duplicate_state = vc4_plane_duplicate_state,
|
||||
.atomic_destroy_state = vc4_plane_destroy_state,
|
||||
+ .format_mod_supported = vc4_format_mod_supported,
|
||||
};
|
||||
|
||||
struct drm_plane *vc4_plane_init(struct drm_device *dev,
|
||||
@@ -884,6 +911,11 @@ struct drm_plane *vc4_plane_init(struct drm_device *dev,
|
||||
u32 num_formats = 0;
|
||||
int ret = 0;
|
||||
unsigned i;
|
||||
+ static const uint64_t modifiers[] = {
|
||||
+ DRM_FORMAT_MOD_BROADCOM_VC4_T_TILED,
|
||||
+ DRM_FORMAT_MOD_LINEAR,
|
||||
+ DRM_FORMAT_MOD_INVALID
|
||||
+ };
|
||||
|
||||
vc4_plane = devm_kzalloc(dev->dev, sizeof(*vc4_plane),
|
||||
GFP_KERNEL);
|
||||
@@ -904,7 +936,7 @@ struct drm_plane *vc4_plane_init(struct drm_device *dev,
|
||||
ret = drm_universal_plane_init(dev, plane, 0,
|
||||
&vc4_plane_funcs,
|
||||
formats, num_formats,
|
||||
- NULL, type, NULL);
|
||||
+ modifiers, type, NULL);
|
||||
|
||||
drm_plane_helper_add(plane, &vc4_plane_helper_funcs);
|
||||
|
||||
--
|
||||
2.16.1
|
||||
|
|
@ -0,0 +1,154 @@
|
|||
From 4a12298457c126547220f3c33465a1920bf3eade Mon Sep 17 00:00:00 2001
|
||||
From: Eric Anholt <eric@anholt.net>
|
||||
Date: Wed, 11 Apr 2018 22:49:12 +0200
|
||||
Subject: [PATCH 389/401] drm/vc4: Add some missing HVS register definitions.
|
||||
|
||||
At least the RGBA expand field we should have been setting, because we
|
||||
aren't expanding correctly for 565 -> 8888. Other registers are ones
|
||||
that may be interesting for various projects that have been discussed.
|
||||
|
||||
Signed-off-by: Eric Anholt <eric@anholt.net>
|
||||
Acked-by: Stefan Schake <stschake@gmail.com>
|
||||
Link: https://patchwork.freedesktop.org/patch/msgid/1523479755-20812-2-git-send-email-stschake@gmail.com
|
||||
(cherry picked from commit aa808440426f6d163a4f51076132628fee6e1e7d)
|
||||
---
|
||||
drivers/gpu/drm/vc4/vc4_regs.h | 96 ++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 96 insertions(+)
|
||||
|
||||
diff --git a/drivers/gpu/drm/vc4/vc4_regs.h b/drivers/gpu/drm/vc4/vc4_regs.h
|
||||
index e7b0c1f5a1aa..012176b891de 100644
|
||||
--- a/drivers/gpu/drm/vc4/vc4_regs.h
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_regs.h
|
||||
@@ -359,6 +359,21 @@
|
||||
#define SCALER_DISPCTRL0 0x00000040
|
||||
# define SCALER_DISPCTRLX_ENABLE BIT(31)
|
||||
# define SCALER_DISPCTRLX_RESET BIT(30)
|
||||
+/* Generates a single frame when VSTART is seen and stops at the last
|
||||
+ * pixel read from the FIFO.
|
||||
+ */
|
||||
+# define SCALER_DISPCTRLX_ONESHOT BIT(29)
|
||||
+/* Processes a single context in the dlist and then task switch,
|
||||
+ * instead of an entire line.
|
||||
+ */
|
||||
+# define SCALER_DISPCTRLX_ONECTX BIT(28)
|
||||
+/* Set to have DISPSLAVE return 2 16bpp pixels and no status data. */
|
||||
+# define SCALER_DISPCTRLX_FIFO32 BIT(27)
|
||||
+/* Turns on output to the DISPSLAVE register instead of the normal
|
||||
+ * FIFO.
|
||||
+ */
|
||||
+# define SCALER_DISPCTRLX_FIFOREG BIT(26)
|
||||
+
|
||||
# define SCALER_DISPCTRLX_WIDTH_MASK VC4_MASK(23, 12)
|
||||
# define SCALER_DISPCTRLX_WIDTH_SHIFT 12
|
||||
# define SCALER_DISPCTRLX_HEIGHT_MASK VC4_MASK(11, 0)
|
||||
@@ -431,6 +446,68 @@
|
||||
*/
|
||||
# define SCALER_GAMADDR_SRAMENB BIT(30)
|
||||
|
||||
+#define SCALER_OLEDOFFS 0x00000080
|
||||
+/* Clamps R to [16,235] and G/B to [16,240]. */
|
||||
+# define SCALER_OLEDOFFS_YUVCLAMP BIT(31)
|
||||
+
|
||||
+/* Chooses which display FIFO the matrix applies to. */
|
||||
+# define SCALER_OLEDOFFS_DISPFIFO_MASK VC4_MASK(25, 24)
|
||||
+# define SCALER_OLEDOFFS_DISPFIFO_SHIFT 24
|
||||
+# define SCALER_OLEDOFFS_DISPFIFO_DISABLED 0
|
||||
+# define SCALER_OLEDOFFS_DISPFIFO_0 1
|
||||
+# define SCALER_OLEDOFFS_DISPFIFO_1 2
|
||||
+# define SCALER_OLEDOFFS_DISPFIFO_2 3
|
||||
+
|
||||
+/* Offsets are 8-bit 2s-complement. */
|
||||
+# define SCALER_OLEDOFFS_RED_MASK VC4_MASK(23, 16)
|
||||
+# define SCALER_OLEDOFFS_RED_SHIFT 16
|
||||
+# define SCALER_OLEDOFFS_GREEN_MASK VC4_MASK(15, 8)
|
||||
+# define SCALER_OLEDOFFS_GREEN_SHIFT 8
|
||||
+# define SCALER_OLEDOFFS_BLUE_MASK VC4_MASK(7, 0)
|
||||
+# define SCALER_OLEDOFFS_BLUE_SHIFT 0
|
||||
+
|
||||
+/* The coefficients are S0.9 fractions. */
|
||||
+#define SCALER_OLEDCOEF0 0x00000084
|
||||
+# define SCALER_OLEDCOEF0_B_TO_R_MASK VC4_MASK(29, 20)
|
||||
+# define SCALER_OLEDCOEF0_B_TO_R_SHIFT 20
|
||||
+# define SCALER_OLEDCOEF0_B_TO_G_MASK VC4_MASK(19, 10)
|
||||
+# define SCALER_OLEDCOEF0_B_TO_G_SHIFT 10
|
||||
+# define SCALER_OLEDCOEF0_B_TO_B_MASK VC4_MASK(9, 0)
|
||||
+# define SCALER_OLEDCOEF0_B_TO_B_SHIFT 0
|
||||
+
|
||||
+#define SCALER_OLEDCOEF1 0x00000088
|
||||
+# define SCALER_OLEDCOEF1_G_TO_R_MASK VC4_MASK(29, 20)
|
||||
+# define SCALER_OLEDCOEF1_G_TO_R_SHIFT 20
|
||||
+# define SCALER_OLEDCOEF1_G_TO_G_MASK VC4_MASK(19, 10)
|
||||
+# define SCALER_OLEDCOEF1_G_TO_G_SHIFT 10
|
||||
+# define SCALER_OLEDCOEF1_G_TO_B_MASK VC4_MASK(9, 0)
|
||||
+# define SCALER_OLEDCOEF1_G_TO_B_SHIFT 0
|
||||
+
|
||||
+#define SCALER_OLEDCOEF2 0x0000008c
|
||||
+# define SCALER_OLEDCOEF2_R_TO_R_MASK VC4_MASK(29, 20)
|
||||
+# define SCALER_OLEDCOEF2_R_TO_R_SHIFT 20
|
||||
+# define SCALER_OLEDCOEF2_R_TO_G_MASK VC4_MASK(19, 10)
|
||||
+# define SCALER_OLEDCOEF2_R_TO_G_SHIFT 10
|
||||
+# define SCALER_OLEDCOEF2_R_TO_B_MASK VC4_MASK(9, 0)
|
||||
+# define SCALER_OLEDCOEF2_R_TO_B_SHIFT 0
|
||||
+
|
||||
+/* Slave addresses for DMAing from HVS composition output to other
|
||||
+ * devices. The top bits are valid only in !FIFO32 mode.
|
||||
+ */
|
||||
+#define SCALER_DISPSLAVE0 0x000000c0
|
||||
+#define SCALER_DISPSLAVE1 0x000000c9
|
||||
+#define SCALER_DISPSLAVE2 0x000000d0
|
||||
+# define SCALER_DISPSLAVE_ISSUE_VSTART BIT(31)
|
||||
+# define SCALER_DISPSLAVE_ISSUE_HSTART BIT(30)
|
||||
+/* Set when the current line has been read and an HSTART is required. */
|
||||
+# define SCALER_DISPSLAVE_EOL BIT(26)
|
||||
+/* Set when the display FIFO is empty. */
|
||||
+# define SCALER_DISPSLAVE_EMPTY BIT(25)
|
||||
+/* Set when there is RGB data ready to read. */
|
||||
+# define SCALER_DISPSLAVE_VALID BIT(24)
|
||||
+# define SCALER_DISPSLAVE_RGB_MASK VC4_MASK(23, 0)
|
||||
+# define SCALER_DISPSLAVE_RGB_SHIFT 0
|
||||
+
|
||||
#define SCALER_GAMDATA 0x000000e0
|
||||
#define SCALER_DLIST_START 0x00002000
|
||||
#define SCALER_DLIST_SIZE 0x00004000
|
||||
@@ -796,6 +873,10 @@ enum hvs_pixel_format {
|
||||
HVS_PIXEL_FORMAT_YCBCR_YUV420_2PLANE = 9,
|
||||
HVS_PIXEL_FORMAT_YCBCR_YUV422_3PLANE = 10,
|
||||
HVS_PIXEL_FORMAT_YCBCR_YUV422_2PLANE = 11,
|
||||
+ HVS_PIXEL_FORMAT_H264 = 12,
|
||||
+ HVS_PIXEL_FORMAT_PALETTE = 13,
|
||||
+ HVS_PIXEL_FORMAT_YUV444_RGB = 14,
|
||||
+ HVS_PIXEL_FORMAT_AYUV444_RGB = 15,
|
||||
};
|
||||
|
||||
/* Note: the LSB is the rightmost character shown. Only valid for
|
||||
@@ -829,12 +910,27 @@ enum hvs_pixel_format {
|
||||
#define SCALER_CTL0_TILING_128B 2
|
||||
#define SCALER_CTL0_TILING_256B_OR_T 3
|
||||
|
||||
+#define SCALER_CTL0_ALPHA_MASK BIT(19)
|
||||
#define SCALER_CTL0_HFLIP BIT(16)
|
||||
#define SCALER_CTL0_VFLIP BIT(15)
|
||||
|
||||
+#define SCALER_CTL0_KEY_MODE_MASK VC4_MASK(18, 17)
|
||||
+#define SCALER_CTL0_KEY_MODE_SHIFT 17
|
||||
+#define SCALER_CTL0_KEY_DISABLED 0
|
||||
+#define SCALER_CTL0_KEY_LUMA_OR_COMMON_RGB 1
|
||||
+#define SCALER_CTL0_KEY_MATCH 2 /* turn transparent */
|
||||
+#define SCALER_CTL0_KEY_REPLACE 3 /* replace with value from key mask word 2 */
|
||||
+
|
||||
#define SCALER_CTL0_ORDER_MASK VC4_MASK(14, 13)
|
||||
#define SCALER_CTL0_ORDER_SHIFT 13
|
||||
|
||||
+#define SCALER_CTL0_RGBA_EXPAND_MASK VC4_MASK(12, 11)
|
||||
+#define SCALER_CTL0_RGBA_EXPAND_SHIFT 11
|
||||
+#define SCALER_CTL0_RGBA_EXPAND_ZERO 0
|
||||
+#define SCALER_CTL0_RGBA_EXPAND_LSB 1
|
||||
+#define SCALER_CTL0_RGBA_EXPAND_MSB 2
|
||||
+#define SCALER_CTL0_RGBA_EXPAND_ROUND 3
|
||||
+
|
||||
#define SCALER_CTL0_SCL1_MASK VC4_MASK(10, 8)
|
||||
#define SCALER_CTL0_SCL1_SHIFT 8
|
||||
|
||||
--
|
||||
2.16.1
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
From 69ee07436e322dd27554109609bcfa0c2a6f4a5e Mon Sep 17 00:00:00 2001
|
||||
From: Eric Anholt <eric@anholt.net>
|
||||
Date: Fri, 16 Mar 2018 15:04:34 -0700
|
||||
Subject: [PATCH 390/401] drm/vc4: Add missing formats to
|
||||
vc4_format_mod_supported().
|
||||
|
||||
Daniel's format_mod_supported() patch predated Dave's for NV21/61, and
|
||||
I didn't catch that when rebasing. This is a problem since the
|
||||
formats are now getting validated before being passed to the driver's
|
||||
atomic hooks.
|
||||
|
||||
Signed-off-by: Eric Anholt <eric@anholt.net>
|
||||
Acked-by: Daniel Stone <daniels@collabora.com>
|
||||
Cc: Dave Stevenson <dave.stevenson@raspberrypi.org>
|
||||
Fixes: 423ad7b3cbd1 ("drm/vc4: Advertise supported modifiers for planes")
|
||||
Link: https://patchwork.freedesktop.org/patch/msgid/20180316220435.31416-2-eric@anholt.net
|
||||
(cherry picked from commit 1e871d65e375280757833d9fce91dda71980bdf5)
|
||||
---
|
||||
drivers/gpu/drm/vc4/vc4_plane.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c
|
||||
index a2d65ae3c1c2..260ffbf6c3ec 100644
|
||||
--- a/drivers/gpu/drm/vc4/vc4_plane.c
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_plane.c
|
||||
@@ -885,7 +885,9 @@ static bool vc4_format_mod_supported(struct drm_plane *plane,
|
||||
case DRM_FORMAT_YUV420:
|
||||
case DRM_FORMAT_YVU420:
|
||||
case DRM_FORMAT_NV12:
|
||||
+ case DRM_FORMAT_NV21:
|
||||
case DRM_FORMAT_NV16:
|
||||
+ case DRM_FORMAT_NV61:
|
||||
default:
|
||||
return (modifier == DRM_FORMAT_MOD_LINEAR);
|
||||
}
|
||||
--
|
||||
2.16.1
|
||||
|
|
@ -0,0 +1,275 @@
|
|||
From 00254bf7483eb53d838b8bb2ba48efe3a8729162 Mon Sep 17 00:00:00 2001
|
||||
From: Dave Stevenson <dave.stevenson@raspberrypi.org>
|
||||
Date: Fri, 16 Mar 2018 15:04:35 -0700
|
||||
Subject: [PATCH 391/401] drm/vc4: Add support for SAND modifier.
|
||||
|
||||
This is the format generated by VC4's H.264 engine, and preferred by
|
||||
the ISP as well. By displaying SAND buffers directly, we can avoid
|
||||
needing to use the ISP to rewrite the SAND H.264 output to linear
|
||||
before display.
|
||||
|
||||
This is a joint effort by Dave Stevenson (who wrote the initial patch
|
||||
and DRM demo) and Eric Anholt (drm_fourcc.h generalization, safety
|
||||
checks, RGBA support).
|
||||
|
||||
v2: Make the parameter macro give all of the middle 48 bits (suggested
|
||||
by Daniels). Fix fourcc_mod_broadcom_mod()'s bits/shift being
|
||||
swapped. Mark NV12/21 as supported, not YUV420.
|
||||
|
||||
Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org>
|
||||
Signed-off-by: Eric Anholt <eric@anholt.net>
|
||||
Cc: Daniel Vetter <daniel@ffwll.ch>
|
||||
Acked-by: Daniel Stone <daniels@collabora.com> (v1)
|
||||
Cc: Boris Brezillon <boris.brezillon@bootlin.com>
|
||||
Cc: Maxime Ripard <maxime.ripard@bootlin.com>
|
||||
Link: https://patchwork.freedesktop.org/patch/msgid/20180316220435.31416-3-eric@anholt.net
|
||||
(cherry picked from commit e065a8dd30af703b4794dc740c0825ee12b92efd)
|
||||
---
|
||||
drivers/gpu/drm/vc4/vc4_plane.c | 84 +++++++++++++++++++++++++++++++++++++----
|
||||
drivers/gpu/drm/vc4/vc4_regs.h | 6 +++
|
||||
include/uapi/drm/drm_fourcc.h | 59 +++++++++++++++++++++++++++++
|
||||
3 files changed, 142 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c
|
||||
index 260ffbf6c3ec..03708057d184 100644
|
||||
--- a/drivers/gpu/drm/vc4/vc4_plane.c
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_plane.c
|
||||
@@ -467,11 +467,13 @@ static int vc4_plane_mode_set(struct drm_plane *plane,
|
||||
struct drm_framebuffer *fb = state->fb;
|
||||
u32 ctl0_offset = vc4_state->dlist_count;
|
||||
const struct hvs_format *format = vc4_get_hvs_format(fb->format->format);
|
||||
+ u64 base_format_mod = fourcc_mod_broadcom_mod(fb->modifier);
|
||||
int num_planes = drm_format_num_planes(format->drm);
|
||||
bool covers_screen;
|
||||
u32 scl0, scl1, pitch0;
|
||||
u32 lbm_size, tiling;
|
||||
unsigned long irqflags;
|
||||
+ u32 hvs_format = format->hvs;
|
||||
int ret, i;
|
||||
|
||||
ret = vc4_plane_setup_clipping_and_scaling(state);
|
||||
@@ -511,7 +513,7 @@ static int vc4_plane_mode_set(struct drm_plane *plane,
|
||||
scl1 = vc4_get_scl_field(state, 0);
|
||||
}
|
||||
|
||||
- switch (fb->modifier) {
|
||||
+ switch (base_format_mod) {
|
||||
case DRM_FORMAT_MOD_LINEAR:
|
||||
tiling = SCALER_CTL0_TILING_LINEAR;
|
||||
pitch0 = VC4_SET_FIELD(fb->pitches[0], SCALER_SRC_PITCH);
|
||||
@@ -534,6 +536,49 @@ static int vc4_plane_mode_set(struct drm_plane *plane,
|
||||
break;
|
||||
}
|
||||
|
||||
+ case DRM_FORMAT_MOD_BROADCOM_SAND64:
|
||||
+ case DRM_FORMAT_MOD_BROADCOM_SAND128:
|
||||
+ case DRM_FORMAT_MOD_BROADCOM_SAND256: {
|
||||
+ uint32_t param = fourcc_mod_broadcom_param(fb->modifier);
|
||||
+
|
||||
+ /* Column-based NV12 or RGBA.
|
||||
+ */
|
||||
+ if (fb->format->num_planes > 1) {
|
||||
+ if (hvs_format != HVS_PIXEL_FORMAT_YCBCR_YUV420_2PLANE) {
|
||||
+ DRM_DEBUG_KMS("SAND format only valid for NV12/21");
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+ hvs_format = HVS_PIXEL_FORMAT_H264;
|
||||
+ } else {
|
||||
+ if (base_format_mod == DRM_FORMAT_MOD_BROADCOM_SAND256) {
|
||||
+ DRM_DEBUG_KMS("SAND256 format only valid for H.264");
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ switch (base_format_mod) {
|
||||
+ case DRM_FORMAT_MOD_BROADCOM_SAND64:
|
||||
+ tiling = SCALER_CTL0_TILING_64B;
|
||||
+ break;
|
||||
+ case DRM_FORMAT_MOD_BROADCOM_SAND128:
|
||||
+ tiling = SCALER_CTL0_TILING_128B;
|
||||
+ break;
|
||||
+ case DRM_FORMAT_MOD_BROADCOM_SAND256:
|
||||
+ tiling = SCALER_CTL0_TILING_256B_OR_T;
|
||||
+ break;
|
||||
+ default:
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ if (param > SCALER_TILE_HEIGHT_MASK) {
|
||||
+ DRM_DEBUG_KMS("SAND height too large (%d)\n", param);
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+
|
||||
+ pitch0 = VC4_SET_FIELD(param, SCALER_TILE_HEIGHT);
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
default:
|
||||
DRM_DEBUG_KMS("Unsupported FB tiling flag 0x%16llx",
|
||||
(long long)fb->modifier);
|
||||
@@ -544,7 +589,7 @@ static int vc4_plane_mode_set(struct drm_plane *plane,
|
||||
vc4_dlist_write(vc4_state,
|
||||
SCALER_CTL0_VALID |
|
||||
(format->pixel_order << SCALER_CTL0_ORDER_SHIFT) |
|
||||
- (format->hvs << SCALER_CTL0_PIXEL_FORMAT_SHIFT) |
|
||||
+ (hvs_format << SCALER_CTL0_PIXEL_FORMAT_SHIFT) |
|
||||
VC4_SET_FIELD(tiling, SCALER_CTL0_TILING) |
|
||||
(vc4_state->is_unity ? SCALER_CTL0_UNITY : 0) |
|
||||
VC4_SET_FIELD(scl0, SCALER_CTL0_SCL0) |
|
||||
@@ -598,8 +643,13 @@ static int vc4_plane_mode_set(struct drm_plane *plane,
|
||||
|
||||
/* Pitch word 1/2 */
|
||||
for (i = 1; i < num_planes; i++) {
|
||||
- vc4_dlist_write(vc4_state,
|
||||
- VC4_SET_FIELD(fb->pitches[i], SCALER_SRC_PITCH));
|
||||
+ if (hvs_format != HVS_PIXEL_FORMAT_H264) {
|
||||
+ vc4_dlist_write(vc4_state,
|
||||
+ VC4_SET_FIELD(fb->pitches[i],
|
||||
+ SCALER_SRC_PITCH));
|
||||
+ } else {
|
||||
+ vc4_dlist_write(vc4_state, pitch0);
|
||||
+ }
|
||||
}
|
||||
|
||||
/* Colorspace conversion words */
|
||||
@@ -879,13 +929,30 @@ static bool vc4_format_mod_supported(struct drm_plane *plane,
|
||||
case DRM_FORMAT_BGR565:
|
||||
case DRM_FORMAT_ARGB1555:
|
||||
case DRM_FORMAT_XRGB1555:
|
||||
- return true;
|
||||
+ switch (fourcc_mod_broadcom_mod(modifier)) {
|
||||
+ case DRM_FORMAT_MOD_LINEAR:
|
||||
+ case DRM_FORMAT_MOD_BROADCOM_VC4_T_TILED:
|
||||
+ case DRM_FORMAT_MOD_BROADCOM_SAND64:
|
||||
+ case DRM_FORMAT_MOD_BROADCOM_SAND128:
|
||||
+ return true;
|
||||
+ default:
|
||||
+ return false;
|
||||
+ }
|
||||
+ case DRM_FORMAT_NV12:
|
||||
+ case DRM_FORMAT_NV21:
|
||||
+ switch (fourcc_mod_broadcom_mod(modifier)) {
|
||||
+ case DRM_FORMAT_MOD_LINEAR:
|
||||
+ case DRM_FORMAT_MOD_BROADCOM_SAND64:
|
||||
+ case DRM_FORMAT_MOD_BROADCOM_SAND128:
|
||||
+ case DRM_FORMAT_MOD_BROADCOM_SAND256:
|
||||
+ return true;
|
||||
+ default:
|
||||
+ return false;
|
||||
+ }
|
||||
case DRM_FORMAT_YUV422:
|
||||
case DRM_FORMAT_YVU422:
|
||||
case DRM_FORMAT_YUV420:
|
||||
case DRM_FORMAT_YVU420:
|
||||
- case DRM_FORMAT_NV12:
|
||||
- case DRM_FORMAT_NV21:
|
||||
case DRM_FORMAT_NV16:
|
||||
case DRM_FORMAT_NV61:
|
||||
default:
|
||||
@@ -915,6 +982,9 @@ struct drm_plane *vc4_plane_init(struct drm_device *dev,
|
||||
unsigned i;
|
||||
static const uint64_t modifiers[] = {
|
||||
DRM_FORMAT_MOD_BROADCOM_VC4_T_TILED,
|
||||
+ DRM_FORMAT_MOD_BROADCOM_SAND128,
|
||||
+ DRM_FORMAT_MOD_BROADCOM_SAND64,
|
||||
+ DRM_FORMAT_MOD_BROADCOM_SAND256,
|
||||
DRM_FORMAT_MOD_LINEAR,
|
||||
DRM_FORMAT_MOD_INVALID
|
||||
};
|
||||
diff --git a/drivers/gpu/drm/vc4/vc4_regs.h b/drivers/gpu/drm/vc4/vc4_regs.h
|
||||
index 012176b891de..bf4ff03dc050 100644
|
||||
--- a/drivers/gpu/drm/vc4/vc4_regs.h
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_regs.h
|
||||
@@ -1059,6 +1059,12 @@ enum hvs_pixel_format {
|
||||
#define SCALER_SRC_PITCH_MASK VC4_MASK(15, 0)
|
||||
#define SCALER_SRC_PITCH_SHIFT 0
|
||||
|
||||
+/* PITCH0/1/2 fields for tiled (SAND). */
|
||||
+#define SCALER_TILE_SKIP_0_MASK VC4_MASK(18, 16)
|
||||
+#define SCALER_TILE_SKIP_0_SHIFT 16
|
||||
+#define SCALER_TILE_HEIGHT_MASK VC4_MASK(15, 0)
|
||||
+#define SCALER_TILE_HEIGHT_SHIFT 0
|
||||
+
|
||||
/* PITCH0 fields for T-tiled. */
|
||||
#define SCALER_PITCH0_TILE_WIDTH_L_MASK VC4_MASK(22, 16)
|
||||
#define SCALER_PITCH0_TILE_WIDTH_L_SHIFT 16
|
||||
diff --git a/include/uapi/drm/drm_fourcc.h b/include/uapi/drm/drm_fourcc.h
|
||||
index 3ad838d3f93f..3e9542a8fdd4 100644
|
||||
--- a/include/uapi/drm/drm_fourcc.h
|
||||
+++ b/include/uapi/drm/drm_fourcc.h
|
||||
@@ -382,6 +382,23 @@ extern "C" {
|
||||
*/
|
||||
#define NV_FORMAT_MOD_TEGRA_16BX2_BLOCK(v) fourcc_mod_tegra_code(2, v)
|
||||
|
||||
+/*
|
||||
+ * Some Broadcom modifiers take parameters, for example the number of
|
||||
+ * vertical lines in the image. Reserve the lower 32 bits for modifier
|
||||
+ * type, and the next 24 bits for parameters. Top 8 bits are the
|
||||
+ * vendor code.
|
||||
+ */
|
||||
+#define __fourcc_mod_broadcom_param_shift 8
|
||||
+#define __fourcc_mod_broadcom_param_bits 48
|
||||
+#define fourcc_mod_broadcom_code(val, params) \
|
||||
+ fourcc_mod_code(BROADCOM, ((((__u64)params) << __fourcc_mod_broadcom_param_shift) | val))
|
||||
+#define fourcc_mod_broadcom_param(m) \
|
||||
+ ((int)(((m) >> __fourcc_mod_broadcom_param_shift) & \
|
||||
+ ((1ULL << __fourcc_mod_broadcom_param_bits) - 1)))
|
||||
+#define fourcc_mod_broadcom_mod(m) \
|
||||
+ ((m) & ~(((1ULL << __fourcc_mod_broadcom_param_bits) - 1) << \
|
||||
+ __fourcc_mod_broadcom_param_shift))
|
||||
+
|
||||
/*
|
||||
* Broadcom VC4 "T" format
|
||||
*
|
||||
@@ -403,6 +420,48 @@ extern "C" {
|
||||
*/
|
||||
#define DRM_FORMAT_MOD_BROADCOM_VC4_T_TILED fourcc_mod_code(BROADCOM, 1)
|
||||
|
||||
+/*
|
||||
+ * Broadcom SAND format
|
||||
+ *
|
||||
+ * This is the native format that the H.264 codec block uses. For VC4
|
||||
+ * HVS, it is only valid for H.264 (NV12/21) and RGBA modes.
|
||||
+ *
|
||||
+ * The image can be considered to be split into columns, and the
|
||||
+ * columns are placed consecutively into memory. The width of those
|
||||
+ * columns can be either 32, 64, 128, or 256 pixels, but in practice
|
||||
+ * only 128 pixel columns are used.
|
||||
+ *
|
||||
+ * The pitch between the start of each column is set to optimally
|
||||
+ * switch between SDRAM banks. This is passed as the number of lines
|
||||
+ * of column width in the modifier (we can't use the stride value due
|
||||
+ * to various core checks that look at it , so you should set the
|
||||
+ * stride to width*cpp).
|
||||
+ *
|
||||
+ * Note that the column height for this format modifier is the same
|
||||
+ * for all of the planes, assuming that each column contains both Y
|
||||
+ * and UV. Some SAND-using hardware stores UV in a separate tiled
|
||||
+ * image from Y to reduce the column height, which is not supported
|
||||
+ * with these modifiers.
|
||||
+ */
|
||||
+
|
||||
+#define DRM_FORMAT_MOD_BROADCOM_SAND32_COL_HEIGHT(v) \
|
||||
+ fourcc_mod_broadcom_code(2, v)
|
||||
+#define DRM_FORMAT_MOD_BROADCOM_SAND64_COL_HEIGHT(v) \
|
||||
+ fourcc_mod_broadcom_code(3, v)
|
||||
+#define DRM_FORMAT_MOD_BROADCOM_SAND128_COL_HEIGHT(v) \
|
||||
+ fourcc_mod_broadcom_code(4, v)
|
||||
+#define DRM_FORMAT_MOD_BROADCOM_SAND256_COL_HEIGHT(v) \
|
||||
+ fourcc_mod_broadcom_code(5, v)
|
||||
+
|
||||
+#define DRM_FORMAT_MOD_BROADCOM_SAND32 \
|
||||
+ DRM_FORMAT_MOD_BROADCOM_SAND32_COL_HEIGHT(0)
|
||||
+#define DRM_FORMAT_MOD_BROADCOM_SAND64 \
|
||||
+ DRM_FORMAT_MOD_BROADCOM_SAND64_COL_HEIGHT(0)
|
||||
+#define DRM_FORMAT_MOD_BROADCOM_SAND128 \
|
||||
+ DRM_FORMAT_MOD_BROADCOM_SAND128_COL_HEIGHT(0)
|
||||
+#define DRM_FORMAT_MOD_BROADCOM_SAND256 \
|
||||
+ DRM_FORMAT_MOD_BROADCOM_SAND256_COL_HEIGHT(0)
|
||||
+
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
#endif
|
||||
--
|
||||
2.16.1
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
From d407fc229cdcd675c0af78513a31e50937ab4e21 Mon Sep 17 00:00:00 2001
|
||||
From: Stefan Wahren <stefan.wahren@i2se.com>
|
||||
Date: Mon, 16 Jul 2018 21:33:40 +0200
|
||||
Subject: [PATCH 394/401] net: lan78xx: fix rx handling before first packet is
|
||||
send
|
||||
|
||||
As long the bh tasklet isn't scheduled once, no packet from the rx path
|
||||
will be handled. Since the tx path also schedule the same tasklet
|
||||
this situation only persits until the first packet transmission.
|
||||
So fix this issue by scheduling the tasklet during ndo_open like in usbnet.
|
||||
|
||||
Link: https://github.com/raspberrypi/linux/issues/2617
|
||||
Fixes: 55d7de9de6c3 ("Microchip's LAN7800 family USB 2/3 to 10/100/1000 Ethernet")
|
||||
Suggested-by: Floris Bos <bos@je-eigen-domein.nl>
|
||||
Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
|
||||
---
|
||||
drivers/net/usb/lan78xx.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c
|
||||
index ff6f21e87cf8..e45a7f750bee 100644
|
||||
--- a/drivers/net/usb/lan78xx.c
|
||||
+++ b/drivers/net/usb/lan78xx.c
|
||||
@@ -2606,6 +2606,8 @@ static int lan78xx_open(struct net_device *net)
|
||||
|
||||
dev->link_on = false;
|
||||
|
||||
+ tasklet_schedule(&dev->bh);
|
||||
+
|
||||
lan78xx_defer_kevent(dev, EVENT_LINK_RESET);
|
||||
done:
|
||||
usb_autopm_put_interface(dev->intf);
|
||||
--
|
||||
2.16.1
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
From 1c70d2de54534eb78728fb405b187a5ec525f7fc Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.org>
|
||||
Date: Wed, 18 Jul 2018 09:31:17 +0100
|
||||
Subject: [PATCH 395/401] lan78xx: Fix link status notifications
|
||||
|
||||
The patch to allow packet reception before the first transmission broke
|
||||
the notification and handling of link status changes. Move the new call
|
||||
to tasklet_schedule into lan78xx_link_reset to fix it.
|
||||
|
||||
See: https://github.com/raspberrypi/linux/issues/2617
|
||||
|
||||
Fixes: d407fc229cdc ("net: lan78xx: fix rx handling before first packet is send")
|
||||
Suggested-by: Stefan Wahren <stefan.wahren@i2se.com>
|
||||
Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
---
|
||||
drivers/net/usb/lan78xx.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c
|
||||
index e45a7f750bee..8761bc74cd5a 100644
|
||||
--- a/drivers/net/usb/lan78xx.c
|
||||
+++ b/drivers/net/usb/lan78xx.c
|
||||
@@ -1227,6 +1227,8 @@ static int lan78xx_link_reset(struct lan78xx_net *dev)
|
||||
mod_timer(&dev->stat_monitor,
|
||||
jiffies + STAT_UPDATE_TIMER);
|
||||
}
|
||||
+
|
||||
+ tasklet_schedule(&dev->bh);
|
||||
}
|
||||
|
||||
return ret;
|
||||
@@ -2606,8 +2608,6 @@ static int lan78xx_open(struct net_device *net)
|
||||
|
||||
dev->link_on = false;
|
||||
|
||||
- tasklet_schedule(&dev->bh);
|
||||
-
|
||||
lan78xx_defer_kevent(dev, EVENT_LINK_RESET);
|
||||
done:
|
||||
usb_autopm_put_interface(dev->intf);
|
||||
--
|
||||
2.16.1
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
From 07f8f1df95e474fc210357301ed514e4108d20f3 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.org>
|
||||
Date: Thu, 19 Jul 2018 13:07:39 +0100
|
||||
Subject: [PATCH 396/401] overlays: Fix vc4-kms-kippah-7inch
|
||||
|
||||
Add a Params: to the README entry and move it into alphabetical order.
|
||||
|
||||
Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
---
|
||||
arch/arm/boot/dts/overlays/README | 13 +++++++------
|
||||
1 file changed, 7 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/arch/arm/boot/dts/overlays/README b/arch/arm/boot/dts/overlays/README
|
||||
index f9a9ce7d42de..eeb4acb2221a 100644
|
||||
--- a/arch/arm/boot/dts/overlays/README
|
||||
+++ b/arch/arm/boot/dts/overlays/README
|
||||
@@ -1965,6 +1965,13 @@ Params: cma-256 CMA is 256MB (needs 1GB)
|
||||
cma-64 CMA is 64MB
|
||||
|
||||
|
||||
+Name: vc4-kms-kippah-7inch
|
||||
+Info: Enable the Adafruit DPI Kippah with the 7" Ontat panel attached.
|
||||
+ Requires vc4-kms-v3d to be loaded.
|
||||
+Load: dtoverlay=vc4-kms-kippah-7inch
|
||||
+Params: <None>
|
||||
+
|
||||
+
|
||||
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
|
||||
@@ -1977,12 +1984,6 @@ Params: cma-256 CMA is 256MB (needs 1GB)
|
||||
cma-64 CMA is 64MB
|
||||
|
||||
|
||||
-Name: vc4-kms-kippah-7inch
|
||||
-Info: Enable the Adafruit DPI Kippah with the 7" Ontat panel attached.
|
||||
- Requires vc4-kms-v3d to be loaded.
|
||||
-Load: dtoverlay=vc4-kms-kippah-7inch
|
||||
-
|
||||
-
|
||||
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
|
||||
--
|
||||
2.16.1
|
||||
|
|
@ -0,0 +1,135 @@
|
|||
From e0d2b2b6df54f175dc73eb294976e756fa68d57d Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.org>
|
||||
Date: Mon, 16 Jul 2018 14:40:13 +0100
|
||||
Subject: [PATCH 397/401] dwc-otg: FIQ: Fix "bad mode in data abort handler"
|
||||
|
||||
Create a semi-static mapping for the USB registers early in the boot
|
||||
process, before additional kernel threads are started, so all threads
|
||||
will have the mappings from the start. This avoids the need for
|
||||
data aborts to lazily update them.
|
||||
|
||||
See: https://github.com/raspberrypi/linux/issues/2450
|
||||
|
||||
Signed-off-by: Floris Bos <bos@je-eigen-domein.nl>
|
||||
---
|
||||
arch/arm/mach-bcm/board_bcm2835.c | 69 +++++++++++++++++++++++++++++++
|
||||
drivers/usb/host/dwc_otg/dwc_otg_driver.c | 2 +-
|
||||
2 files changed, 70 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/arch/arm/mach-bcm/board_bcm2835.c b/arch/arm/mach-bcm/board_bcm2835.c
|
||||
index 54f807a2c466..a63a8a2bb5b5 100644
|
||||
--- a/arch/arm/mach-bcm/board_bcm2835.c
|
||||
+++ b/arch/arm/mach-bcm/board_bcm2835.c
|
||||
@@ -15,6 +15,7 @@
|
||||
#include <linux/init.h>
|
||||
#include <linux/irqchip.h>
|
||||
#include <linux/of_address.h>
|
||||
+#include <linux/of_fdt.h>
|
||||
#include <linux/clk/bcm2835.h>
|
||||
#include <asm/system_info.h>
|
||||
|
||||
@@ -24,6 +25,9 @@
|
||||
#include "platsmp.h"
|
||||
#include <linux/dma-mapping.h>
|
||||
|
||||
+#define BCM2835_USB_VIRT_BASE 0xf0980000
|
||||
+#define BCM2835_USB_VIRT_MPHI 0xf0006000
|
||||
+
|
||||
static void __init bcm2835_init(void)
|
||||
{
|
||||
struct device_node *np = of_find_node_by_path("/system");
|
||||
@@ -44,6 +48,70 @@ static void __init bcm2835_init_early(void)
|
||||
init_dma_coherent_pool_size(SZ_1M);
|
||||
}
|
||||
|
||||
+/*
|
||||
+ * We need to map registers that are going to be accessed by the FIQ
|
||||
+ * very early, before any kernel threads are spawned. Because if done
|
||||
+ * later, the mapping tables are not updated instantly but lazily upon
|
||||
+ * first access through a data abort handler. While that is fine
|
||||
+ * when executing regular kernel code, if the first access in a specific
|
||||
+ * thread happens while running FIQ code this will result in a panic.
|
||||
+ *
|
||||
+ * For more background see the following old mailing list thread:
|
||||
+ * https://www.spinics.net/lists/arm-kernel/msg325250.html
|
||||
+ */
|
||||
+static int __init bcm2835_map_usb(unsigned long node, const char *uname,
|
||||
+ int depth, void *data)
|
||||
+{
|
||||
+ struct map_desc map[2];
|
||||
+ const __be32 *reg;
|
||||
+ int len;
|
||||
+ unsigned long p2b_offset = *((unsigned long *) data);
|
||||
+
|
||||
+ if (!of_flat_dt_is_compatible(node, "brcm,bcm2708-usb"))
|
||||
+ return 0;
|
||||
+ reg = of_get_flat_dt_prop(node, "reg", &len);
|
||||
+ if (!reg || len != (sizeof(unsigned long) * 4))
|
||||
+ return 0;
|
||||
+
|
||||
+ /* Use information about the physical addresses of the
|
||||
+ * registers from the device tree, but use legacy
|
||||
+ * iotable_init() static mapping function to map them,
|
||||
+ * as ioremap() is not functional at this stage in boot.
|
||||
+ */
|
||||
+ map[0].virtual = (unsigned long) BCM2835_USB_VIRT_BASE;
|
||||
+ map[0].pfn = __phys_to_pfn(be32_to_cpu(reg[0]) - p2b_offset);
|
||||
+ map[0].length = be32_to_cpu(reg[1]);
|
||||
+ map[0].type = MT_DEVICE;
|
||||
+ map[1].virtual = (unsigned long) BCM2835_USB_VIRT_MPHI;
|
||||
+ map[1].pfn = __phys_to_pfn(be32_to_cpu(reg[2]) - p2b_offset);
|
||||
+ map[1].length = be32_to_cpu(reg[3]);
|
||||
+ map[1].type = MT_DEVICE;
|
||||
+ iotable_init(map, 2);
|
||||
+
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
+static void __init bcm2835_map_io(void)
|
||||
+{
|
||||
+ const __be32 *ranges;
|
||||
+ int soc, len;
|
||||
+ unsigned long p2b_offset;
|
||||
+
|
||||
+ debug_ll_io_init();
|
||||
+
|
||||
+ /* Find out how to map bus to physical address first from soc/ranges */
|
||||
+ soc = of_get_flat_dt_subnode_by_name(of_get_flat_dt_root(), "soc");
|
||||
+ if (soc < 0)
|
||||
+ return;
|
||||
+ ranges = of_get_flat_dt_prop(soc, "ranges", &len);
|
||||
+ if (!ranges || len < (sizeof(unsigned long) * 3))
|
||||
+ return;
|
||||
+ p2b_offset = be32_to_cpu(ranges[0]) - be32_to_cpu(ranges[1]);
|
||||
+
|
||||
+ /* Now search for bcm2708-usb node in device tree */
|
||||
+ of_scan_flat_dt(bcm2835_map_usb, &p2b_offset);
|
||||
+}
|
||||
+
|
||||
static const char * const bcm2835_compat[] = {
|
||||
#ifdef CONFIG_ARCH_MULTI_V6
|
||||
"brcm,bcm2835",
|
||||
@@ -56,6 +124,7 @@ static const char * const bcm2835_compat[] = {
|
||||
};
|
||||
|
||||
DT_MACHINE_START(BCM2835, "BCM2835")
|
||||
+ .map_io = bcm2835_map_io,
|
||||
.init_machine = bcm2835_init,
|
||||
.init_early = bcm2835_init_early,
|
||||
.dt_compat = bcm2835_compat,
|
||||
diff --git a/drivers/usb/host/dwc_otg/dwc_otg_driver.c b/drivers/usb/host/dwc_otg/dwc_otg_driver.c
|
||||
index e945900c503c..673231e17351 100644
|
||||
--- a/drivers/usb/host/dwc_otg/dwc_otg_driver.c
|
||||
+++ b/drivers/usb/host/dwc_otg/dwc_otg_driver.c
|
||||
@@ -837,7 +837,7 @@ static int dwc_otg_driver_probe(
|
||||
retval = -ENOMEM;
|
||||
goto fail;
|
||||
}
|
||||
- dev_dbg(&_dev->dev, "base=0x%08x\n",
|
||||
+ dev_info(&_dev->dev, "base=0x%08x\n",
|
||||
(unsigned)dwc_otg_device->os_dep.base);
|
||||
#endif
|
||||
|
||||
--
|
||||
2.16.1
|
||||
|
|
@ -0,0 +1,61 @@
|
|||
From bf844d646af9c6e03fa0d9f7113257d13988838d Mon Sep 17 00:00:00 2001
|
||||
From: Andreas Gustafsson <gson@gson.org>
|
||||
Date: Tue, 7 Aug 2018 20:19:07 +0300
|
||||
Subject: [PATCH 398/401] End log messages in one newline, not two.
|
||||
|
||||
Signed-off-by: Andreas Gustafsson <gson@gson.org>
|
||||
---
|
||||
drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c | 4 ++--
|
||||
drivers/staging/vc04_services/interface/vchiq_arm/vchiq_kern_lib.c | 6 +++---
|
||||
2 files changed, 5 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
|
||||
index fe99c96fc6fc..63e4308a4f71 100644
|
||||
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
|
||||
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
|
||||
@@ -2079,7 +2079,7 @@ dump_phys_mem(void *virt_addr, u32 num_bytes)
|
||||
pages = kmalloc(sizeof(struct page *) * num_pages, GFP_KERNEL);
|
||||
if (!pages) {
|
||||
vchiq_log_error(vchiq_arm_log_level,
|
||||
- "Unable to allocation memory for %d pages\n",
|
||||
+ "Unable to allocation memory for %d pages",
|
||||
num_pages);
|
||||
return;
|
||||
}
|
||||
@@ -2098,7 +2098,7 @@ dump_phys_mem(void *virt_addr, u32 num_bytes)
|
||||
|
||||
if (rc < 0) {
|
||||
vchiq_log_error(vchiq_arm_log_level,
|
||||
- "Failed to get user pages: %d\n", rc);
|
||||
+ "Failed to get user pages: %d", rc);
|
||||
goto out;
|
||||
}
|
||||
|
||||
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_kern_lib.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_kern_lib.c
|
||||
index 34f746db19cd..bd65a21e5d2b 100644
|
||||
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_kern_lib.c
|
||||
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_kern_lib.c
|
||||
@@ -89,17 +89,17 @@ VCHIQ_STATUS_T vchiq_initialise(VCHIQ_INSTANCE_T *instance_out)
|
||||
}
|
||||
if (i == VCHIQ_INIT_RETRIES) {
|
||||
vchiq_log_error(vchiq_core_log_level,
|
||||
- "%s: videocore not initialized\n", __func__);
|
||||
+ "%s: videocore not initialized", __func__);
|
||||
goto failed;
|
||||
} else if (i > 0) {
|
||||
vchiq_log_warning(vchiq_core_log_level,
|
||||
- "%s: videocore initialized after %d retries\n", __func__, i);
|
||||
+ "%s: videocore initialized after %d retries", __func__, i);
|
||||
}
|
||||
|
||||
instance = kzalloc(sizeof(*instance), GFP_KERNEL);
|
||||
if (!instance) {
|
||||
vchiq_log_error(vchiq_core_log_level,
|
||||
- "%s: error allocating vchiq instance\n", __func__);
|
||||
+ "%s: error allocating vchiq instance", __func__);
|
||||
goto failed;
|
||||
}
|
||||
|
||||
--
|
||||
2.16.1
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
From 28439cac4c404dd0a82b2b2280e7690ef1431c1e Mon Sep 17 00:00:00 2001
|
||||
From: Andreas Gustafsson <gson@gson.org>
|
||||
Date: Wed, 8 Aug 2018 22:23:40 +0300
|
||||
Subject: [PATCH 399/401] Fix one more log message ending in two newlines.
|
||||
|
||||
Signed-off-by: Andreas Gustafsson <gson@gson.org>
|
||||
---
|
||||
drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c
|
||||
index a457034818c3..5b79bf1f2a54 100644
|
||||
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c
|
||||
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c
|
||||
@@ -3153,7 +3153,7 @@ vchiq_pause_internal(VCHIQ_STATE_T *state)
|
||||
break;
|
||||
default:
|
||||
vchiq_log_error(vchiq_core_log_level,
|
||||
- "vchiq_pause_internal in state %s\n",
|
||||
+ "vchiq_pause_internal in state %s",
|
||||
conn_state_names[state->conn_state]);
|
||||
status = VCHIQ_ERROR;
|
||||
VCHIQ_STATS_INC(state, error_count);
|
||||
--
|
||||
2.16.1
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
From 248e0f711ec517aff69b815bac7b884bd3a04679 Mon Sep 17 00:00:00 2001
|
||||
From: Steve Pavao <stevep@korgrd.com>
|
||||
Date: Fri, 10 Aug 2018 17:09:50 -0400
|
||||
Subject: [PATCH 401/401] devicetree: add RPi CM3 dts to arm64; mimic the RPi
|
||||
3B arm64 dts implementation, by referring to the actual dts file in the arm
|
||||
directory
|
||||
|
||||
---
|
||||
arch/arm64/boot/dts/broadcom/Makefile | 2 ++
|
||||
arch/arm64/boot/dts/broadcom/bcm2710-rpi-cm3.dts | 3 +++
|
||||
2 files changed, 5 insertions(+)
|
||||
create mode 100644 arch/arm64/boot/dts/broadcom/bcm2710-rpi-cm3.dts
|
||||
|
||||
diff --git a/arch/arm64/boot/dts/broadcom/Makefile b/arch/arm64/boot/dts/broadcom/Makefile
|
||||
index f056f542dac4..301c29cee75a 100644
|
||||
--- a/arch/arm64/boot/dts/broadcom/Makefile
|
||||
+++ b/arch/arm64/boot/dts/broadcom/Makefile
|
||||
@@ -9,6 +9,8 @@ dtb-$(CONFIG_ARCH_BCM2835) += bcm2837-rpi-3-b.dtb
|
||||
dtb-$(CONFIG_ARCH_BCM2709) += bcm2710-rpi-3-b.dtb
|
||||
dtb-$(CONFIG_ARCH_BCM2835) += bcm2710-rpi-3-b.dtb
|
||||
dtb-$(CONFIG_ARCH_BCM2835) += bcm2710-rpi-3-b-plus.dtb
|
||||
+dtb-$(CONFIG_ARCH_BCM2709) += bcm2710-rpi-cm3.dtb
|
||||
+dtb-$(CONFIG_ARCH_BCM2835) += bcm2710-rpi-cm3.dtb
|
||||
|
||||
dts-dirs += ../overlays
|
||||
|
||||
diff --git a/arch/arm64/boot/dts/broadcom/bcm2710-rpi-cm3.dts b/arch/arm64/boot/dts/broadcom/bcm2710-rpi-cm3.dts
|
||||
new file mode 100644
|
||||
index 000000000000..1c2560017c02
|
||||
--- /dev/null
|
||||
+++ b/arch/arm64/boot/dts/broadcom/bcm2710-rpi-cm3.dts
|
||||
@@ -0,0 +1,3 @@
|
||||
+#define RPI364
|
||||
+
|
||||
+#include "../../../../arm/boot/dts/bcm2710-rpi-cm3.dts"
|
||||
--
|
||||
2.16.1
|
||||
|
Loading…
Reference in a new issue