From 1ad0618a3466c2e9609699f1a06bf83a6fa50275 Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Fri, 6 May 2016 11:48:35 -0700 Subject: [PATCH 1/3] BCM270X_DT: Move vc4 node contents to bcm2708_common.dtsi. This should clarify what's going on with the overlay: The hardware is always present, we're just enabling the DT node so that the vc4 driver probes. The interrupts are left in the overlay, because the firmware doesn't check node status before masking out the vc4 interrupts. By having the nodes in the common file, we'll be able to correctly connect the HDMI HPD GPIO so that we can detect whether an HDMI monitor is connected. Signed-off-by: Eric Anholt --- arch/arm/boot/dts/bcm2708_common.dtsi | 51 ++++++ .../boot/dts/overlays/vc4-kms-v3d-overlay.dts | 160 +++++++++--------- 2 files changed, 129 insertions(+), 82 deletions(-) diff --git a/arch/arm/boot/dts/bcm2708_common.dtsi b/arch/arm/boot/dts/bcm2708_common.dtsi index 4ec0156566051d..2562372d2e7986 100644 --- a/arch/arm/boot/dts/bcm2708_common.dtsi +++ b/arch/arm/boot/dts/bcm2708_common.dtsi @@ -1,4 +1,7 @@ +#include "dt-bindings/clock/bcm2835.h" #include +#include "dt-bindings/power/raspberrypi-power.h" +#include "dt-bindings/gpio/gpio.h" #include "skeleton.dtsi" / { @@ -170,6 +173,18 @@ status = "disabled"; }; + pixelvalve0: pixelvalve@7e206000 { + compatible = "brcm,bcm2835-pixelvalve0"; + reg = <0x7e206000 0x100>; + status = "disabled"; + }; + + pixelvalve1: pixelvalve@7e207000 { + compatible = "brcm,bcm2835-pixelvalve1"; + reg = <0x7e207000 0x100>; + status = "disabled"; + }; + pwm: pwm@7e20c000 { compatible = "brcm,bcm2835-pwm"; reg = <0x7e20c000 0x28>; @@ -227,6 +242,12 @@ status = "disabled"; }; + hvs: hvs@7e400000 { + compatible = "brcm,bcm2835-hvs"; + reg = <0x7e400000 0x6000>; + status = "disabled"; + }; + i2c1: i2c@7e804000 { compatible = "brcm,bcm2708-i2c"; reg = <0x7e804000 0x1000>; @@ -261,6 +282,25 @@ status = "disabled"; }; + pixelvalve2: pixelvalve@7e807000 { + compatible = "brcm,bcm2835-pixelvalve2"; + reg = <0x7e807000 0x100>; + status = "disabled"; + }; + + hdmi: hdmi@7e902000 { + compatible = "brcm,bcm2835-hdmi"; + reg = <0x7e902000 0x600>, + <0x7e808000 0x100>; + ddc = <&i2c2>; + hpd-gpios = <&gpio 46 GPIO_ACTIVE_HIGH>; + clocks = <&cprman BCM2835_PLLH_PIX>, + <&cprman BCM2835_CLOCK_HSM>; + clock-names = "pixel", "hdmi"; + power-domains = <&power RPI_POWER_DOMAIN_HDMI>; + status = "disabled"; + }; + usb: usb@7e980000 { compatible = "brcm,bcm2708-usb"; reg = <0x7e980000 0x10000>, @@ -269,6 +309,12 @@ <1 9>; }; + v3d: v3d@7ec00000 { + compatible = "brcm,vc4-v3d"; + reg = <0x7ec00000 0x1000>; + status = "disabled"; + }; + firmware: firmware { compatible = "raspberrypi,bcm2835-firmware"; mboxes = <&mailbox>; @@ -303,6 +349,11 @@ firmware = <&firmware>; }; + gpu: gpu { + compatible = "brcm,bcm2835-vc4"; + status = "disabled"; + }; + /* Onboard audio */ audio: audio { compatible = "brcm,bcm2835-audio"; diff --git a/arch/arm/boot/dts/overlays/vc4-kms-v3d-overlay.dts b/arch/arm/boot/dts/overlays/vc4-kms-v3d-overlay.dts index 547b2c723f347f..a4ca2cabd4cd19 100644 --- a/arch/arm/boot/dts/overlays/vc4-kms-v3d-overlay.dts +++ b/arch/arm/boot/dts/overlays/vc4-kms-v3d-overlay.dts @@ -5,129 +5,125 @@ /dts-v1/; /plugin/; -#include "dt-bindings/clock/bcm2835.h" -#include "dt-bindings/power/raspberrypi-power.h" -#include "dt-bindings/gpio/gpio.h" - / { compatible = "brcm,bcm2835", "brcm,bcm2708", "brcm,bcm2709"; fragment@0 { + target-path = "/chosen"; + __overlay__ { + bootargs = "cma=256M@256M"; + }; + }; + + fragment@1 { + target-path = "/chosen"; + __dormant__ { + bootargs = "cma=192M@256M"; + }; + }; + + fragment@2 { + target-path = "/chosen"; + __dormant__ { + bootargs = "cma=128M@128M"; + }; + }; + + fragment@3 { + target-path = "/chosen"; + __dormant__ { + bootargs = "cma=96M@128M"; + }; + }; + + fragment@4 { + target-path = "/chosen"; + __dormant__ { + bootargs = "cma=64M@64M"; + }; + }; + + fragment@5 { target = <&i2c2>; __overlay__ { status = "okay"; }; }; - fragment@1 { + fragment@6 { target = <&cprman>; __overlay__ { status = "okay"; }; }; - fragment@2 { + fragment@7 { target = <&fb>; __overlay__ { status = "disabled"; }; }; - fragment@3 { - target = <&soc>; + fragment@8 { + target = <&pixelvalve0>; __overlay__ { - #address-cells = <1>; - #size-cells = <1>; - - pixelvalve@7e206000 { - compatible = "brcm,bcm2835-pixelvalve0"; - reg = <0x7e206000 0x100>; - interrupts = <2 13>; /* pwa0 */ - }; - - pixelvalve@7e207000 { - compatible = "brcm,bcm2835-pixelvalve1"; - reg = <0x7e207000 0x100>; - interrupts = <2 14>; /* pwa1 */ - }; - - hvs@7e400000 { - compatible = "brcm,bcm2835-hvs"; - reg = <0x7e400000 0x6000>; - interrupts = <2 1>; - }; - - pixelvalve@7e807000 { - compatible = "brcm,bcm2835-pixelvalve2"; - reg = <0x7e807000 0x100>; - interrupts = <2 10>; /* pixelvalve */ - }; - - hdmi@7e902000 { - compatible = "brcm,bcm2835-hdmi"; - reg = <0x7e902000 0x600>, - <0x7e808000 0x100>; - interrupts = <2 8>, <2 9>; - ddc = <&i2c2>; - hpd-gpios = <&gpio 46 GPIO_ACTIVE_HIGH>; - clocks = <&cprman BCM2835_PLLH_PIX>, - <&cprman BCM2835_CLOCK_HSM>; - clock-names = "pixel", "hdmi"; - power-domains = <&power RPI_POWER_DOMAIN_HDMI>; - }; - - v3d@7ec00000 { - compatible = "brcm,vc4-v3d"; - reg = <0x7ec00000 0x1000>; - interrupts = <1 10>; - }; - - gpu@7e4c0000 { - compatible = "brcm,bcm2835-vc4"; - }; + interrupts = <2 13>; /* pwa0 */ + status = "okay"; }; }; - fragment@4 { - target-path = "/chosen"; - __overlay__ { - bootargs = "cma=256M@256M"; + fragment@9 { + target = <&pixelvalve1>; + __overlay__ { + interrupts = <2 14>; /* pwa1 */ + status = "okay"; }; }; - fragment@5 { - target-path = "/chosen"; - __dormant__ { - bootargs = "cma=192M@256M"; + fragment@10 { + target = <&pixelvalve2>; + __overlay__ { + interrupts = <2 10>; /* pixelvalve */ + status = "okay"; }; }; - fragment@6 { - target-path = "/chosen"; - __dormant__ { - bootargs = "cma=128M@128M"; + fragment@11 { + target = <&hvs>; + __overlay__ { + interrupts = <2 1>; + status = "okay"; }; }; - fragment@7 { - target-path = "/chosen"; - __dormant__ { - bootargs = "cma=96M@128M"; + fragment@12 { + target = <&hdmi>; + __overlay__ { + interrupts = <2 8>, <2 9>; + status = "okay"; }; }; - fragment@8 { - target-path = "/chosen"; - __dormant__ { - bootargs = "cma=64M@64M"; + fragment@13 { + target = <&v3d>; + __overlay__ { + interrupts = <1 10>; + status = "okay"; + }; + }; + + fragment@14 { + target = <&gpu>; + __overlay__ { + status = "okay"; }; }; __overrides__ { - cma-256 = <0>,"+4-5-6-7-8"; - cma-192 = <0>,"-4+5-6-7-8"; - cma-128 = <0>,"-4-5+6-7-8"; - cma-96 = <0>,"-4-5-6+7-8"; - cma-64 = <0>,"-4-5-6-7+8"; + cma-256 = <0>,"+0-1-2-3-4"; + cma-192 = <0>,"-0+1-2-3-4"; + cma-128 = <0>,"-0-1+2-3-4"; + cma-96 = <0>,"-0-1-2+3-4"; + cma-64 = <0>,"-0-1-2-3+4"; }; }; From caad9727a92f6a21e521ecff4bceca547c63cbab Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Fri, 6 May 2016 12:42:26 -0700 Subject: [PATCH 2/3] BCM270X_DT: Set correct HDMI HPD GPIO levels for various boards. The CM is left out, because I haven't found a source for how the CM's HPD is connected. Signed-off-by: Eric Anholt --- arch/arm/boot/dts/bcm2708-rpi-b-plus.dts | 4 ++++ arch/arm/boot/dts/bcm2708-rpi-b.dts | 4 ++++ arch/arm/boot/dts/bcm2709-rpi-2-b.dts | 4 ++++ arch/arm/boot/dts/bcm2710-rpi-3-b.dts | 4 ++++ 4 files changed, 16 insertions(+) diff --git a/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts b/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts index 0e9a22d147dd1a..0ac7725224aea4 100644 --- a/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts +++ b/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts @@ -116,6 +116,10 @@ }; }; +&hdmi { + hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>; +}; + / { __overrides__ { uart0 = <&uart0>,"status"; diff --git a/arch/arm/boot/dts/bcm2708-rpi-b.dts b/arch/arm/boot/dts/bcm2708-rpi-b.dts index a60342c3127cda..847483495a55f6 100644 --- a/arch/arm/boot/dts/bcm2708-rpi-b.dts +++ b/arch/arm/boot/dts/bcm2708-rpi-b.dts @@ -110,6 +110,10 @@ }; }; +&hdmi { + hpd-gpios = <&gpio 46 GPIO_ACTIVE_HIGH>; +}; + / { __overrides__ { uart0 = <&uart0>,"status"; diff --git a/arch/arm/boot/dts/bcm2709-rpi-2-b.dts b/arch/arm/boot/dts/bcm2709-rpi-2-b.dts index 9176d57fe40eaa..5e23c04f453dda 100644 --- a/arch/arm/boot/dts/bcm2709-rpi-2-b.dts +++ b/arch/arm/boot/dts/bcm2709-rpi-2-b.dts @@ -116,6 +116,10 @@ }; }; +&hdmi { + hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>; +}; + / { __overrides__ { uart0 = <&uart0>,"status"; diff --git a/arch/arm/boot/dts/bcm2710-rpi-3-b.dts b/arch/arm/boot/dts/bcm2710-rpi-3-b.dts index adba6824ebb46e..0979a27f05d976 100644 --- a/arch/arm/boot/dts/bcm2710-rpi-3-b.dts +++ b/arch/arm/boot/dts/bcm2710-rpi-3-b.dts @@ -161,6 +161,10 @@ }; }; +&hdmi { + hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>; +}; + / { chosen { bootargs = "8250.nr_uarts=1"; From 7da44d06540b4a191ecc74e943f3203577fce0df Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Fri, 6 May 2016 12:43:25 -0700 Subject: [PATCH 3/3] Revert "drm/vc4: Force HDMI to connected." Now that we have the HDMI HPD GPIOs correctly identified in the DT, we should be able to successfully detect HDMI. This reverts commit fbec01e2d17b924d91850e17eeecf975e74c9ebf. Signed-off-by: Eric Anholt --- drivers/gpu/drm/vc4/vc4_hdmi.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c index db6db77b70cb92..85224e542086c9 100644 --- a/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c @@ -166,8 +166,6 @@ vc4_hdmi_connector_detect(struct drm_connector *connector, bool force) struct drm_device *dev = connector->dev; struct vc4_dev *vc4 = to_vc4_dev(dev); - return connector_status_connected; - if (vc4->hdmi->hpd_gpio) { if (gpio_get_value_cansleep(vc4->hdmi->hpd_gpio) ^ vc4->hdmi->hpd_active_low)