aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/bcm27xx/patches-5.15
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/bcm27xx/patches-5.15')
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0001-drm-vc4-hdmi-Split-the-CEC-disable-enable-functions-.patch4
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0002-drm-vc4-hdmi-Make-sure-the-device-is-powered-with-CE.patch4
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0003-drm-vc4-hdmi-Warn-if-we-access-the-controller-while-.patch4
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0004-drm-vc4-hdmi-Remove-the-DDC-probing-for-status-detec.patch8
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0005-drm-vc4-hdmi-Raise-the-maximum-clock-rate.patch2
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0006-drm-vc4-hdmi-Fix-HPD-GPIO-detection.patch40
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0007-drm-vc4-hdmi-Add-a-spinlock-to-protect-register-acce.patch128
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0008-drm-vc4-hdmi-Use-a-mutex-to-prevent-concurrent-frame.patch68
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0009-drm-vc4-hdmi-Prevent-access-to-crtc-state-outside-of.patch18
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0010-drm-vc4-hdmi-Check-the-device-state-in-prepare.patch4
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0011-drm-vc4-hdmi-Introduce-an-output_enabled-flag.patch6
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0012-drm-vc4-hdmi-Introduce-a-scdc_enabled-flag.patch6
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0014-drm-vc4-crtc-Add-encoder-to-vc4_crtc_config_pv-proto.patch2
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0015-drm-vc4-crtc-Rework-the-encoder-retrieval-code-again.patch4
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0016-drm-vc4-crtc-Add-some-logging.patch4
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0017-drm-vc4-Leverage-the-load-tracker-on-the-BCM2711.patch2
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0018-drm-vc4-Increase-the-core-clock-based-on-HVS-load.patch2
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0021-drm-vc4-hdmi-Actually-check-for-the-connector-status.patch2
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0023-drm-vc4-Remove-conflicting-framebuffers-before-calli.patch2
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0024-drm-vc4-Notify-the-firmware-when-DRM-is-in-charge.patch4
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0032-smsx95xx-fix-crimes-against-truesize.patch6
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0033-smsc95xx-Experimental-Enable-turbo_mode-and-packetsi.patch4
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0034-Allow-mac-address-to-be-set-in-smsc95xx.patch12
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0090-ARM64-Force-hardware-emulation-of-deprecated-instruc.patch2
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0151-usb-add-plumbing-for-updating-interrupt-endpoint-int.patch6
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0163-hid-usb-Add-device-quirks-for-Freeway-Airmouse-T3-an.patch2
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0208-spi-Force-CS_HIGH-if-GPIO-descriptors-are-used.patch4
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0420-drm-vc4-Adopt-the-dma-configuration-from-the-HVS-or-.patch54
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0422-drm-vc4-plane-Add-support-for-DRM_FORMAT_P030.patch10
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0423-drm-vc4-plane-Add-support-for-YUV-color-encodings-an.patch6
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0424-drm-vc4-Add-FKMS-as-an-acceptable-node-for-dma-range.patch2
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0425-drm-vc4-A-present-but-empty-dmas-disables-audio.patch33
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0427-drm-vc4-Add-all-the-HDMI-registers-into-the-debugfs-.patch6
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0428-drm-vc4-Add-the-2711-HVS-as-a-suitable-DMA-node.patch2
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0429-vc4_hdmi-Report-that-3d-stereo-is-allowed.patch2
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0430-vc4-Clear-unused-infoframe-packet-RAM-registers.patch4
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0432-vc4-drm-Avoid-full-hdmi-audio-fifo-writes.patch32
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0433-vc4-drm-vc4_plane-Remove-subpixel-positioning-check.patch62
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0435-drm-vc4-Correct-pixel-order-for-DSI0.patch27
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0436-drm-vc4-Register-dsi0-as-the-correct-vc4-encoder-typ.patch29
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0437-drm-vc4-Fix-dsi0-interrupt-support.patch188
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0438-drm-vc4-Add-correct-stop-condition-to-vc4_dsi_encode.patch30
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0442-drm-vc4-hdmi-Simplify-the-connector-state-retrieval.patch2
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0443-drm-vc4-Fix-timings-for-interlaced-modes.patch83
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0445-drm-vc4-Fix-margin-calculations-for-the-right-bottom.patch38
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0452-drm-vc4-Add-firmware-kms-mode.patch8
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0470-sound-usb-add-device-quirks-for-A4Tech-FHD-1080p-web.patch2
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0475-drm-vc4-Reset-HDMI-MISC_CONTROL-register.patch69
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0476-drm-vc4-Release-workaround-buffer-and-DMA-in-error-p.patch145
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0477-drm-vc4-Correct-DSI-divider-calculations.patch35
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0500-net-phy-lan87xx-Allow-more-time-for-link-detect.patch2
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0572-drm-vc4-Don-t-try-disabling-SCDC-on-Pi0-3.patch2
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0580-drm-vc4-Ensure-vc4_hdmi-doesn-t-use-2711-HPD-registe.patch4
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0590-drm-vc4-Move-HDMI-reset-to-pm_resume.patch12
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0607-drm-vc4-Fix-build-without-DRM_VC4_HDMI_CEC.patch2
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0650-drm-vc4-Add-alpha_blend_mode-property-to-each-plane.patch8
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0664-drm-vc4-dsi-Correct-max-divider-to-255-not-7.patch26
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0688-drm-panel-Add-and-initialise-an-orientation-field-to.patch2
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0693-drm-panel-Add-panel-driver-for-TDO-Y17B-based-panels.patch2
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0700-net-phy-lan87xx-Decrease-phy-polling-rate.patch8
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0711-drm-vc4-Rename-bridge-to-out_bridge.patch48
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0713-drm-vc4-Remove-splitting-the-bridge-chain-from-the-d.patch18
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0715-drm-vc4-Convert-vc4_dsi-to-using-a-bridge-instead-of.patch12
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0762-drm-bridge-Introduce-pre_enable_upstream_first-to-al.patch12
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0763-drm-panel-Add-prepare_upstream_first-flag-to-drm_pan.patch2
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0781-drm-vc4-Support-zpos-on-all-planes.patch6
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0787-vc4-drm-vc4_plane-Keep-fractional-source-coords-insi.patch41
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0806-drm-atomic-helpers-remove-legacy_cursor_update-hacks.patch2
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0868-drm-vc4-hdmi-Rework-hdmi_enable_4kp60-detection.patch2
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0898-drm-vc4-Consolidate-Hardware-Revision-Check.patch4
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0901-drm-vc4-drv-Register-a-different-driver-on-BCM2711.patch8
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0904-drm-vc4-drv-Skip-BO-Backend-Initialization-on-BCM271.patch2
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0914-mmc-block-Don-t-do-single-sector-reads-during-recove.patch10
73 files changed, 272 insertions, 1182 deletions
diff --git a/target/linux/bcm27xx/patches-5.15/950-0001-drm-vc4-hdmi-Split-the-CEC-disable-enable-functions-.patch b/target/linux/bcm27xx/patches-5.15/950-0001-drm-vc4-hdmi-Split-the-CEC-disable-enable-functions-.patch
index 379165238d..bb0b56fff1 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0001-drm-vc4-hdmi-Split-the-CEC-disable-enable-functions-.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0001-drm-vc4-hdmi-Split-the-CEC-disable-enable-functions-.patch
@@ -17,7 +17,7 @@ Link: https://patchwork.freedesktop.org/patch/msgid/20210819135931.895976-5-maxi
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
-@@ -1740,7 +1740,7 @@ static irqreturn_t vc4_cec_irq_handler(i
+@@ -1748,7 +1748,7 @@ static irqreturn_t vc4_cec_irq_handler(i
return ret;
}
@@ -26,7 +26,7 @@ Link: https://patchwork.freedesktop.org/patch/msgid/20210819135931.895976-5-maxi
{
struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap);
/* clock period in microseconds */
-@@ -1753,38 +1753,53 @@ static int vc4_hdmi_cec_adap_enable(stru
+@@ -1761,38 +1761,53 @@ static int vc4_hdmi_cec_adap_enable(stru
val |= ((4700 / usecs) << VC4_HDMI_CEC_CNT_TO_4700_US_SHIFT) |
((4500 / usecs) << VC4_HDMI_CEC_CNT_TO_4500_US_SHIFT);
diff --git a/target/linux/bcm27xx/patches-5.15/950-0002-drm-vc4-hdmi-Make-sure-the-device-is-powered-with-CE.patch b/target/linux/bcm27xx/patches-5.15/950-0002-drm-vc4-hdmi-Make-sure-the-device-is-powered-with-CE.patch
index d3f6659363..6132b810bd 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0002-drm-vc4-hdmi-Make-sure-the-device-is-powered-with-CE.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0002-drm-vc4-hdmi-Make-sure-the-device-is-powered-with-CE.patch
@@ -24,7 +24,7 @@ Link: https://patchwork.freedesktop.org/patch/msgid/20210819135931.895976-6-maxi
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
-@@ -1745,8 +1745,14 @@ static int vc4_hdmi_cec_enable(struct ce
+@@ -1753,8 +1753,14 @@ static int vc4_hdmi_cec_enable(struct ce
struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap);
/* clock period in microseconds */
const u32 usecs = 1000000 / CEC_CLOCK_FREQ;
@@ -40,7 +40,7 @@ Link: https://patchwork.freedesktop.org/patch/msgid/20210819135931.895976-6-maxi
val &= ~(VC4_HDMI_CEC_TX_SW_RESET | VC4_HDMI_CEC_RX_SW_RESET |
VC4_HDMI_CEC_CNT_TO_4700_US_MASK |
VC4_HDMI_CEC_CNT_TO_4500_US_MASK);
-@@ -1789,6 +1795,8 @@ static int vc4_hdmi_cec_disable(struct c
+@@ -1797,6 +1803,8 @@ static int vc4_hdmi_cec_disable(struct c
HDMI_WRITE(HDMI_CEC_CNTRL_5, HDMI_READ(HDMI_CEC_CNTRL_5) |
VC4_HDMI_CEC_TX_SW_RESET | VC4_HDMI_CEC_RX_SW_RESET);
diff --git a/target/linux/bcm27xx/patches-5.15/950-0003-drm-vc4-hdmi-Warn-if-we-access-the-controller-while-.patch b/target/linux/bcm27xx/patches-5.15/950-0003-drm-vc4-hdmi-Warn-if-we-access-the-controller-while-.patch
index cc4b57ef07..adf4709e2d 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0003-drm-vc4-hdmi-Warn-if-we-access-the-controller-while-.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0003-drm-vc4-hdmi-Warn-if-we-access-the-controller-while-.patch
@@ -29,7 +29,7 @@ Link: https://patchwork.freedesktop.org/patch/msgid/20210819135931.895976-7-maxi
#include "vc4_hdmi.h"
#define VC4_HDMI_PACKET_STRIDE 0x24
-@@ -412,6 +414,8 @@ static inline u32 vc4_hdmi_read(struct v
+@@ -415,6 +417,8 @@ static inline u32 vc4_hdmi_read(struct v
const struct vc4_hdmi_variant *variant = hdmi->variant;
void __iomem *base;
@@ -38,7 +38,7 @@ Link: https://patchwork.freedesktop.org/patch/msgid/20210819135931.895976-7-maxi
if (reg >= variant->num_registers) {
dev_warn(&hdmi->pdev->dev,
"Invalid register ID %u\n", reg);
-@@ -438,6 +442,8 @@ static inline void vc4_hdmi_write(struct
+@@ -441,6 +445,8 @@ static inline void vc4_hdmi_write(struct
const struct vc4_hdmi_variant *variant = hdmi->variant;
void __iomem *base;
diff --git a/target/linux/bcm27xx/patches-5.15/950-0004-drm-vc4-hdmi-Remove-the-DDC-probing-for-status-detec.patch b/target/linux/bcm27xx/patches-5.15/950-0004-drm-vc4-hdmi-Remove-the-DDC-probing-for-status-detec.patch
index 4e6a109253..83976961e0 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0004-drm-vc4-hdmi-Remove-the-DDC-probing-for-status-detec.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0004-drm-vc4-hdmi-Remove-the-DDC-probing-for-status-detec.patch
@@ -36,10 +36,10 @@ Link: https://lore.kernel.org/r/20211025152903.1088803-2-maxime@cerno.tech
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
-@@ -176,8 +176,6 @@ vc4_hdmi_connector_detect(struct drm_con
- if (vc4_hdmi->hpd_gpio &&
- gpiod_get_value_cansleep(vc4_hdmi->hpd_gpio)) {
- connected = true;
+@@ -179,8 +179,6 @@ vc4_hdmi_connector_detect(struct drm_con
+ if (vc4_hdmi->hpd_gpio) {
+ if (gpiod_get_value_cansleep(vc4_hdmi->hpd_gpio))
+ connected = true;
- } else if (drm_probe_ddc(vc4_hdmi->ddc)) {
- connected = true;
} else if (HDMI_READ(HDMI_HOTPLUG) & VC4_HDMI_HOTPLUG_CONNECTED) {
diff --git a/target/linux/bcm27xx/patches-5.15/950-0005-drm-vc4-hdmi-Raise-the-maximum-clock-rate.patch b/target/linux/bcm27xx/patches-5.15/950-0005-drm-vc4-hdmi-Raise-the-maximum-clock-rate.patch
index 4838fe330c..21d3148af7 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0005-drm-vc4-hdmi-Raise-the-maximum-clock-rate.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0005-drm-vc4-hdmi-Raise-the-maximum-clock-rate.patch
@@ -20,7 +20,7 @@ Link: https://lore.kernel.org/r/20211025152903.1088803-9-maxime@cerno.tech
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
-@@ -2378,7 +2378,7 @@ static const struct vc4_hdmi_variant bcm
+@@ -2386,7 +2386,7 @@ static const struct vc4_hdmi_variant bcm
.encoder_type = VC4_ENCODER_TYPE_HDMI0,
.debugfs_name = "hdmi0_regs",
.card_name = "vc4-hdmi-0",
diff --git a/target/linux/bcm27xx/patches-5.15/950-0006-drm-vc4-hdmi-Fix-HPD-GPIO-detection.patch b/target/linux/bcm27xx/patches-5.15/950-0006-drm-vc4-hdmi-Fix-HPD-GPIO-detection.patch
deleted file mode 100644
index 910f983bd1..0000000000
--- a/target/linux/bcm27xx/patches-5.15/950-0006-drm-vc4-hdmi-Fix-HPD-GPIO-detection.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From b460aee2dab3419842e24e7039a52d613b19a6e8 Mon Sep 17 00:00:00 2001
-From: Maxime Ripard <maxime@cerno.tech>
-Date: Mon, 25 Oct 2021 17:28:55 +0200
-Subject: [PATCH] drm/vc4: hdmi: Fix HPD GPIO detection
-
-Prior to commit 6800234ceee0 ("drm/vc4: hdmi: Convert to gpiod"), in the
-detect hook, if we had an HPD GPIO we would only rely on it and return
-whatever state it was in.
-
-However, that commit changed that by mistake to only consider the case
-where we have a GPIO and it returns a logical high, and would fall back
-to the other methods otherwise.
-
-Since we can read the EDIDs when the HPD signal is low on some displays,
-we changed the detection status from disconnected to connected, and we
-would ignore an HPD pulse.
-
-Fixes: 6800234ceee0 ("drm/vc4: hdmi: Convert to gpiod")
-Signed-off-by: Maxime Ripard <maxime@cerno.tech>
-Reviewed-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
-Link: https://lore.kernel.org/r/20211025152903.1088803-3-maxime@cerno.tech
----
- drivers/gpu/drm/vc4/vc4_hdmi.c | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
---- a/drivers/gpu/drm/vc4/vc4_hdmi.c
-+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
-@@ -173,9 +173,9 @@ vc4_hdmi_connector_detect(struct drm_con
-
- WARN_ON(pm_runtime_resume_and_get(&vc4_hdmi->pdev->dev));
-
-- if (vc4_hdmi->hpd_gpio &&
-- gpiod_get_value_cansleep(vc4_hdmi->hpd_gpio)) {
-- connected = true;
-+ if (vc4_hdmi->hpd_gpio) {
-+ if (gpiod_get_value_cansleep(vc4_hdmi->hpd_gpio))
-+ connected = true;
- } else if (HDMI_READ(HDMI_HOTPLUG) & VC4_HDMI_HOTPLUG_CONNECTED) {
- connected = true;
- }
diff --git a/target/linux/bcm27xx/patches-5.15/950-0007-drm-vc4-hdmi-Add-a-spinlock-to-protect-register-acce.patch b/target/linux/bcm27xx/patches-5.15/950-0007-drm-vc4-hdmi-Add-a-spinlock-to-protect-register-acce.patch
index 029fabd8e0..87d4ee481c 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0007-drm-vc4-hdmi-Add-a-spinlock-to-protect-register-acce.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0007-drm-vc4-hdmi-Add-a-spinlock-to-protect-register-acce.patch
@@ -25,7 +25,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
-@@ -119,6 +119,10 @@ static int vc4_hdmi_debugfs_regs(struct
+@@ -122,6 +122,10 @@ static int vc4_hdmi_debugfs_regs(struct
static void vc4_hdmi_reset(struct vc4_hdmi *vc4_hdmi)
{
@@ -36,7 +36,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
HDMI_WRITE(HDMI_M_CTL, VC4_HD_M_SW_RST);
udelay(1);
HDMI_WRITE(HDMI_M_CTL, 0);
-@@ -130,24 +134,36 @@ static void vc4_hdmi_reset(struct vc4_hd
+@@ -133,24 +137,36 @@ static void vc4_hdmi_reset(struct vc4_hd
VC4_HDMI_SW_RESET_FORMAT_DETECT);
HDMI_WRITE(HDMI_SW_RESET_CONTROL, 0);
@@ -73,7 +73,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
value = HDMI_READ(HDMI_CEC_CNTRL_1);
value &= ~VC4_HDMI_CEC_DIV_CLK_CNT_MASK;
-@@ -155,9 +171,11 @@ static void vc4_hdmi_cec_update_clk_div(
+@@ -158,9 +174,11 @@ static void vc4_hdmi_cec_update_clk_div(
* Set the clock divider: the hsm_clock rate and this divider
* setting will give a 40 kHz CEC clock.
*/
@@ -86,7 +86,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
}
#else
static void vc4_hdmi_cec_update_clk_div(struct vc4_hdmi *vc4_hdmi) {}
-@@ -176,8 +194,16 @@ vc4_hdmi_connector_detect(struct drm_con
+@@ -179,8 +197,16 @@ vc4_hdmi_connector_detect(struct drm_con
if (vc4_hdmi->hpd_gpio) {
if (gpiod_get_value_cansleep(vc4_hdmi->hpd_gpio))
connected = true;
@@ -105,7 +105,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
}
if (connected) {
-@@ -371,9 +397,12 @@ static int vc4_hdmi_stop_packet(struct d
+@@ -374,9 +400,12 @@ static int vc4_hdmi_stop_packet(struct d
{
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
u32 packet_id = type - 0x80;
@@ -118,7 +118,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
if (!poll)
return 0;
-@@ -393,6 +422,7 @@ static void vc4_hdmi_write_infoframe(str
+@@ -396,6 +425,7 @@ static void vc4_hdmi_write_infoframe(str
void __iomem *base = __vc4_hdmi_get_field_base(vc4_hdmi,
ram_packet_start->reg);
uint8_t buffer[VC4_HDMI_PACKET_STRIDE];
@@ -126,7 +126,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
ssize_t len, i;
int ret;
-@@ -410,6 +440,8 @@ static void vc4_hdmi_write_infoframe(str
+@@ -413,6 +443,8 @@ static void vc4_hdmi_write_infoframe(str
return;
}
@@ -135,7 +135,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
for (i = 0; i < len; i += 7) {
writel(buffer[i + 0] << 0 |
buffer[i + 1] << 8 |
-@@ -427,6 +459,9 @@ static void vc4_hdmi_write_infoframe(str
+@@ -430,6 +462,9 @@ static void vc4_hdmi_write_infoframe(str
HDMI_WRITE(HDMI_RAM_PACKET_CONFIG,
HDMI_READ(HDMI_RAM_PACKET_CONFIG) | BIT(packet_id));
@@ -145,7 +145,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
ret = wait_for((HDMI_READ(HDMI_RAM_PACKET_STATUS) &
BIT(packet_id)), 100);
if (ret)
-@@ -546,6 +581,7 @@ static void vc4_hdmi_enable_scrambling(s
+@@ -549,6 +584,7 @@ static void vc4_hdmi_enable_scrambling(s
{
struct drm_display_mode *mode = &encoder->crtc->state->adjusted_mode;
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
@@ -153,7 +153,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
if (!vc4_hdmi_supports_scrambling(encoder, mode))
return;
-@@ -556,8 +592,10 @@ static void vc4_hdmi_enable_scrambling(s
+@@ -559,8 +595,10 @@ static void vc4_hdmi_enable_scrambling(s
drm_scdc_set_high_tmds_clock_ratio(vc4_hdmi->ddc, true);
drm_scdc_set_scrambling(vc4_hdmi->ddc, true);
@@ -164,7 +164,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
queue_delayed_work(system_wq, &vc4_hdmi->scrambling_work,
msecs_to_jiffies(SCRAMBLING_POLLING_DELAY_MS));
-@@ -567,6 +605,7 @@ static void vc4_hdmi_disable_scrambling(
+@@ -570,6 +608,7 @@ static void vc4_hdmi_disable_scrambling(
{
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
struct drm_crtc *crtc = encoder->crtc;
@@ -172,7 +172,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
/*
* At boot, encoder->crtc will be NULL. Since we don't know the
-@@ -582,8 +621,10 @@ static void vc4_hdmi_disable_scrambling(
+@@ -585,8 +624,10 @@ static void vc4_hdmi_disable_scrambling(
if (delayed_work_pending(&vc4_hdmi->scrambling_work))
cancel_delayed_work_sync(&vc4_hdmi->scrambling_work);
@@ -183,7 +183,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
drm_scdc_set_scrambling(vc4_hdmi->ddc, false);
drm_scdc_set_high_tmds_clock_ratio(vc4_hdmi->ddc, false);
-@@ -609,15 +650,23 @@ static void vc4_hdmi_encoder_post_crtc_d
+@@ -612,15 +653,23 @@ static void vc4_hdmi_encoder_post_crtc_d
struct drm_atomic_state *state)
{
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
@@ -207,7 +207,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
vc4_hdmi_disable_scrambling(encoder);
}
-@@ -625,10 +674,13 @@ static void vc4_hdmi_encoder_post_crtc_p
+@@ -628,10 +677,13 @@ static void vc4_hdmi_encoder_post_crtc_p
struct drm_atomic_state *state)
{
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
@@ -221,7 +221,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
if (vc4_hdmi->variant->phy_disable)
vc4_hdmi->variant->phy_disable(vc4_hdmi);
-@@ -647,8 +699,11 @@ static void vc4_hdmi_encoder_disable(str
+@@ -650,8 +702,11 @@ static void vc4_hdmi_encoder_disable(str
static void vc4_hdmi_csc_setup(struct vc4_hdmi *vc4_hdmi, bool enable)
{
@@ -233,7 +233,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
csc_ctl = VC4_SET_FIELD(VC4_HD_CSC_CTL_ORDER_BGR,
VC4_HD_CSC_CTL_ORDER);
-@@ -678,14 +733,19 @@ static void vc4_hdmi_csc_setup(struct vc
+@@ -681,14 +736,19 @@ static void vc4_hdmi_csc_setup(struct vc
/* The RGB order applies even when CSC is disabled. */
HDMI_WRITE(HDMI_CSC_CTL, csc_ctl);
@@ -253,7 +253,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
if (enable) {
/* CEA VICs other than #1 requre limited range RGB
* output unless overridden by an AVI infoframe.
-@@ -717,6 +777,8 @@ static void vc5_hdmi_csc_setup(struct vc
+@@ -720,6 +780,8 @@ static void vc5_hdmi_csc_setup(struct vc
}
HDMI_WRITE(HDMI_CSC_CTL, csc_ctl);
@@ -262,9 +262,9 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
}
static void vc4_hdmi_set_timings(struct vc4_hdmi *vc4_hdmi,
-@@ -740,6 +802,9 @@ static void vc4_hdmi_set_timings(struct
- mode->crtc_vsync_end -
- interlaced,
+@@ -743,6 +805,9 @@ static void vc4_hdmi_set_timings(struct
+ VC4_SET_FIELD(mode->crtc_vtotal -
+ mode->crtc_vsync_end,
VC4_HDMI_VERTB_VBP));
+ unsigned long flags;
+
@@ -272,7 +272,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
HDMI_WRITE(HDMI_HORZA,
(vsync_pos ? VC4_HDMI_HORZA_VPOS : 0) |
-@@ -763,6 +828,8 @@ static void vc4_hdmi_set_timings(struct
+@@ -766,6 +831,8 @@ static void vc4_hdmi_set_timings(struct
HDMI_WRITE(HDMI_VERTB0, vertb_even);
HDMI_WRITE(HDMI_VERTB1, vertb);
@@ -281,9 +281,9 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
}
static void vc5_hdmi_set_timings(struct vc4_hdmi *vc4_hdmi,
-@@ -786,10 +853,13 @@ static void vc5_hdmi_set_timings(struct
- mode->crtc_vsync_end -
- interlaced,
+@@ -789,10 +856,13 @@ static void vc5_hdmi_set_timings(struct
+ VC4_SET_FIELD(mode->crtc_vtotal -
+ mode->crtc_vsync_end - interlaced,
VC4_HDMI_VERTB_VBP));
+ unsigned long flags;
unsigned char gcp;
@@ -295,8 +295,8 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
HDMI_WRITE(HDMI_VEC_INTERFACE_XBAR, 0x354021);
HDMI_WRITE(HDMI_HORZA,
(vsync_pos ? VC5_HDMI_HORZA_VPOS : 0) |
-@@ -848,13 +918,18 @@ static void vc5_hdmi_set_timings(struct
- HDMI_WRITE(HDMI_GCP_CONFIG, reg);
+@@ -856,13 +926,18 @@ static void vc5_hdmi_set_timings(struct
+ HDMI_WRITE(HDMI_MISC_CONTROL, reg);
HDMI_WRITE(HDMI_CLOCK_STOP, 0);
+
@@ -314,7 +314,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
drift = HDMI_READ(HDMI_FIFO_CTL);
drift &= VC4_HDMI_FIFO_VALID_WRITE_MASK;
-@@ -862,12 +937,20 @@ static void vc4_hdmi_recenter_fifo(struc
+@@ -870,12 +945,20 @@ static void vc4_hdmi_recenter_fifo(struc
drift & ~VC4_HDMI_FIFO_CTL_RECENTER);
HDMI_WRITE(HDMI_FIFO_CTL,
drift | VC4_HDMI_FIFO_CTL_RECENTER);
@@ -335,7 +335,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
ret = wait_for(HDMI_READ(HDMI_FIFO_CTL) &
VC4_HDMI_FIFO_CTL_RECENTER_DONE, 1);
WARN_ONCE(ret, "Timeout waiting for "
-@@ -901,6 +984,7 @@ static void vc4_hdmi_encoder_pre_crtc_co
+@@ -909,6 +992,7 @@ static void vc4_hdmi_encoder_pre_crtc_co
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
unsigned long pixel_rate = vc4_conn_state->pixel_rate;
unsigned long bvb_rate, hsm_rate;
@@ -343,7 +343,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
int ret;
/*
-@@ -969,11 +1053,15 @@ static void vc4_hdmi_encoder_pre_crtc_co
+@@ -977,11 +1061,15 @@ static void vc4_hdmi_encoder_pre_crtc_co
if (vc4_hdmi->variant->phy_init)
vc4_hdmi->variant->phy_init(vc4_hdmi, vc4_conn_state);
@@ -359,7 +359,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
if (vc4_hdmi->variant->set_timings)
vc4_hdmi->variant->set_timings(vc4_hdmi, conn_state, mode);
-@@ -993,6 +1081,7 @@ static void vc4_hdmi_encoder_pre_crtc_en
+@@ -1001,6 +1089,7 @@ static void vc4_hdmi_encoder_pre_crtc_en
struct drm_display_mode *mode = &encoder->crtc->state->adjusted_mode;
struct vc4_hdmi_encoder *vc4_encoder = to_vc4_hdmi_encoder(encoder);
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
@@ -367,7 +367,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
if (vc4_encoder->hdmi_monitor &&
drm_default_rgb_quant_range(mode) == HDMI_QUANTIZATION_RANGE_LIMITED) {
-@@ -1007,7 +1096,9 @@ static void vc4_hdmi_encoder_pre_crtc_en
+@@ -1015,7 +1104,9 @@ static void vc4_hdmi_encoder_pre_crtc_en
vc4_encoder->limited_rgb_range = false;
}
@@ -377,7 +377,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
}
static void vc4_hdmi_encoder_post_crtc_enable(struct drm_encoder *encoder,
-@@ -1018,8 +1109,11 @@ static void vc4_hdmi_encoder_post_crtc_e
+@@ -1026,8 +1117,11 @@ static void vc4_hdmi_encoder_post_crtc_e
struct vc4_hdmi_encoder *vc4_encoder = to_vc4_hdmi_encoder(encoder);
bool hsync_pos = mode->flags & DRM_MODE_FLAG_PHSYNC;
bool vsync_pos = mode->flags & DRM_MODE_FLAG_PVSYNC;
@@ -389,7 +389,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
HDMI_WRITE(HDMI_VID_CTL,
VC4_HD_VID_CTL_ENABLE |
VC4_HD_VID_CTL_CLRRGB |
-@@ -1036,6 +1130,8 @@ static void vc4_hdmi_encoder_post_crtc_e
+@@ -1044,6 +1138,8 @@ static void vc4_hdmi_encoder_post_crtc_e
HDMI_READ(HDMI_SCHEDULER_CONTROL) |
VC4_HDMI_SCHEDULER_CONTROL_MODE_HDMI);
@@ -398,7 +398,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
ret = wait_for(HDMI_READ(HDMI_SCHEDULER_CONTROL) &
VC4_HDMI_SCHEDULER_CONTROL_HDMI_ACTIVE, 1000);
WARN_ONCE(ret, "Timeout waiting for "
-@@ -1048,6 +1144,8 @@ static void vc4_hdmi_encoder_post_crtc_e
+@@ -1056,6 +1152,8 @@ static void vc4_hdmi_encoder_post_crtc_e
HDMI_READ(HDMI_SCHEDULER_CONTROL) &
~VC4_HDMI_SCHEDULER_CONTROL_MODE_HDMI);
@@ -407,7 +407,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
ret = wait_for(!(HDMI_READ(HDMI_SCHEDULER_CONTROL) &
VC4_HDMI_SCHEDULER_CONTROL_HDMI_ACTIVE), 1000);
WARN_ONCE(ret, "Timeout waiting for "
-@@ -1055,6 +1153,8 @@ static void vc4_hdmi_encoder_post_crtc_e
+@@ -1063,6 +1161,8 @@ static void vc4_hdmi_encoder_post_crtc_e
}
if (vc4_encoder->hdmi_monitor) {
@@ -416,7 +416,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
WARN_ON(!(HDMI_READ(HDMI_SCHEDULER_CONTROL) &
VC4_HDMI_SCHEDULER_CONTROL_HDMI_ACTIVE));
HDMI_WRITE(HDMI_SCHEDULER_CONTROL,
-@@ -1064,6 +1164,8 @@ static void vc4_hdmi_encoder_post_crtc_e
+@@ -1072,6 +1172,8 @@ static void vc4_hdmi_encoder_post_crtc_e
HDMI_WRITE(HDMI_RAM_PACKET_CONFIG,
VC4_HDMI_RAM_PACKET_ENABLE);
@@ -425,7 +425,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
vc4_hdmi_set_infoframes(encoder);
}
-@@ -1187,6 +1289,7 @@ static void vc4_hdmi_audio_set_mai_clock
+@@ -1195,6 +1297,7 @@ static void vc4_hdmi_audio_set_mai_clock
unsigned int samplerate)
{
u32 hsm_clock = clk_get_rate(vc4_hdmi->audio_clock);
@@ -433,7 +433,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
unsigned long n, m;
rational_best_approximation(hsm_clock, samplerate,
-@@ -1196,9 +1299,11 @@ static void vc4_hdmi_audio_set_mai_clock
+@@ -1204,9 +1307,11 @@ static void vc4_hdmi_audio_set_mai_clock
VC4_HD_MAI_SMP_M_SHIFT) + 1,
&n, &m);
@@ -445,7 +445,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
}
static void vc4_hdmi_set_n_cts(struct vc4_hdmi *vc4_hdmi, unsigned int samplerate)
-@@ -1209,6 +1314,8 @@ static void vc4_hdmi_set_n_cts(struct vc
+@@ -1217,6 +1322,8 @@ static void vc4_hdmi_set_n_cts(struct vc
u32 n, cts;
u64 tmp;
@@ -454,7 +454,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
n = 128 * samplerate / 1000;
tmp = (u64)(mode->clock * 1000) * n;
do_div(tmp, 128 * samplerate);
-@@ -1238,6 +1345,7 @@ static int vc4_hdmi_audio_startup(struct
+@@ -1246,6 +1353,7 @@ static int vc4_hdmi_audio_startup(struct
{
struct vc4_hdmi *vc4_hdmi = dev_get_drvdata(dev);
struct drm_encoder *encoder = &vc4_hdmi->encoder.base.base;
@@ -462,7 +462,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
/*
* If the HDMI encoder hasn't probed, or the encoder is
-@@ -1249,12 +1357,14 @@ static int vc4_hdmi_audio_startup(struct
+@@ -1257,12 +1365,14 @@ static int vc4_hdmi_audio_startup(struct
vc4_hdmi->audio.streaming = true;
@@ -477,7 +477,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
if (vc4_hdmi->variant->phy_rng_enable)
vc4_hdmi->variant->phy_rng_enable(vc4_hdmi);
-@@ -1266,6 +1376,7 @@ static void vc4_hdmi_audio_reset(struct
+@@ -1274,6 +1384,7 @@ static void vc4_hdmi_audio_reset(struct
{
struct drm_encoder *encoder = &vc4_hdmi->encoder.base.base;
struct device *dev = &vc4_hdmi->pdev->dev;
@@ -485,7 +485,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
int ret;
vc4_hdmi->audio.streaming = false;
-@@ -1273,20 +1384,29 @@ static void vc4_hdmi_audio_reset(struct
+@@ -1281,20 +1392,29 @@ static void vc4_hdmi_audio_reset(struct
if (ret)
dev_err(dev, "Failed to stop audio infoframe: %d\n", ret);
@@ -515,7 +515,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
if (vc4_hdmi->variant->phy_rng_disable)
vc4_hdmi->variant->phy_rng_disable(vc4_hdmi);
-@@ -1341,6 +1461,7 @@ static int vc4_hdmi_audio_prepare(struct
+@@ -1349,6 +1469,7 @@ static int vc4_hdmi_audio_prepare(struct
struct drm_encoder *encoder = &vc4_hdmi->encoder.base.base;
unsigned int sample_rate = params->sample_rate;
unsigned int channels = params->channels;
@@ -523,7 +523,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
u32 audio_packet_config, channel_mask;
u32 channel_map;
u32 mai_audio_format;
-@@ -1349,14 +1470,15 @@ static int vc4_hdmi_audio_prepare(struct
+@@ -1357,14 +1478,15 @@ static int vc4_hdmi_audio_prepare(struct
dev_dbg(dev, "%s: %u Hz, %d bit, %d channels\n", __func__,
sample_rate, params->sample_width, channels);
@@ -541,7 +541,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
mai_sample_rate = sample_rate_to_mai_fmt(sample_rate);
if (params->iec.status[0] & IEC958_AES0_NONAUDIO &&
params->channels == 8)
-@@ -1394,8 +1516,11 @@ static int vc4_hdmi_audio_prepare(struct
+@@ -1402,8 +1524,11 @@ static int vc4_hdmi_audio_prepare(struct
channel_map = vc4_hdmi->variant->channel_map(vc4_hdmi, channel_mask);
HDMI_WRITE(HDMI_MAI_CHANNEL_MAP, channel_map);
HDMI_WRITE(HDMI_AUDIO_PACKET_CONFIG, audio_packet_config);
@@ -553,7 +553,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
memcpy(&vc4_hdmi->audio.infoframe, &params->cea, sizeof(params->cea));
vc4_hdmi_set_audio_infoframe(encoder);
-@@ -1669,6 +1794,8 @@ static void vc4_cec_read_msg(struct vc4_
+@@ -1677,6 +1802,8 @@ static void vc4_cec_read_msg(struct vc4_
struct cec_msg *msg = &vc4_hdmi->cec_rx_msg;
unsigned int i;
@@ -562,7 +562,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
msg->len = 1 + ((cntrl1 & VC4_HDMI_CEC_REC_WRD_CNT_MASK) >>
VC4_HDMI_CEC_REC_WRD_CNT_SHIFT);
-@@ -1687,11 +1814,12 @@ static void vc4_cec_read_msg(struct vc4_
+@@ -1695,11 +1822,12 @@ static void vc4_cec_read_msg(struct vc4_
}
}
@@ -577,7 +577,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
cntrl1 = HDMI_READ(HDMI_CEC_CNTRL_1);
vc4_hdmi->cec_tx_ok = cntrl1 & VC4_HDMI_CEC_TX_STATUS_GOOD;
cntrl1 &= ~VC4_HDMI_CEC_START_XMIT_BEGIN;
-@@ -1700,11 +1828,24 @@ static irqreturn_t vc4_cec_irq_handler_t
+@@ -1708,11 +1836,24 @@ static irqreturn_t vc4_cec_irq_handler_t
return IRQ_WAKE_THREAD;
}
@@ -603,7 +603,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
vc4_hdmi->cec_rx_msg.len = 0;
cntrl1 = HDMI_READ(HDMI_CEC_CNTRL_1);
vc4_cec_read_msg(vc4_hdmi, cntrl1);
-@@ -1717,6 +1858,18 @@ static irqreturn_t vc4_cec_irq_handler_r
+@@ -1725,6 +1866,18 @@ static irqreturn_t vc4_cec_irq_handler_r
return IRQ_WAKE_THREAD;
}
@@ -622,7 +622,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
static irqreturn_t vc4_cec_irq_handler(int irq, void *priv)
{
struct vc4_hdmi *vc4_hdmi = priv;
-@@ -1727,14 +1880,17 @@ static irqreturn_t vc4_cec_irq_handler(i
+@@ -1735,14 +1888,17 @@ static irqreturn_t vc4_cec_irq_handler(i
if (!(stat & VC4_HDMI_CPU_CEC))
return IRQ_NONE;
@@ -642,7 +642,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
return ret;
}
-@@ -1743,6 +1899,7 @@ static int vc4_hdmi_cec_enable(struct ce
+@@ -1751,6 +1907,7 @@ static int vc4_hdmi_cec_enable(struct ce
struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap);
/* clock period in microseconds */
const u32 usecs = 1000000 / CEC_CLOCK_FREQ;
@@ -650,7 +650,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
u32 val;
int ret;
-@@ -1750,6 +1907,8 @@ static int vc4_hdmi_cec_enable(struct ce
+@@ -1758,6 +1915,8 @@ static int vc4_hdmi_cec_enable(struct ce
if (ret)
return ret;
@@ -659,7 +659,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
val = HDMI_READ(HDMI_CEC_CNTRL_5);
val &= ~(VC4_HDMI_CEC_TX_SW_RESET | VC4_HDMI_CEC_RX_SW_RESET |
VC4_HDMI_CEC_CNT_TO_4700_US_MASK |
-@@ -1780,12 +1939,17 @@ static int vc4_hdmi_cec_enable(struct ce
+@@ -1788,12 +1947,17 @@ static int vc4_hdmi_cec_enable(struct ce
if (!vc4_hdmi->variant->external_irq_controller)
HDMI_WRITE(HDMI_CEC_CPU_MASK_CLEAR, VC4_HDMI_CPU_CEC);
@@ -677,7 +677,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
if (!vc4_hdmi->variant->external_irq_controller)
HDMI_WRITE(HDMI_CEC_CPU_MASK_SET, VC4_HDMI_CPU_CEC);
-@@ -1793,6 +1957,8 @@ static int vc4_hdmi_cec_disable(struct c
+@@ -1801,6 +1965,8 @@ static int vc4_hdmi_cec_disable(struct c
HDMI_WRITE(HDMI_CEC_CNTRL_5, HDMI_READ(HDMI_CEC_CNTRL_5) |
VC4_HDMI_CEC_TX_SW_RESET | VC4_HDMI_CEC_RX_SW_RESET);
@@ -686,7 +686,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
pm_runtime_put(&vc4_hdmi->pdev->dev);
return 0;
-@@ -1809,10 +1975,14 @@ static int vc4_hdmi_cec_adap_enable(stru
+@@ -1817,10 +1983,14 @@ static int vc4_hdmi_cec_adap_enable(stru
static int vc4_hdmi_cec_adap_log_addr(struct cec_adapter *adap, u8 log_addr)
{
struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap);
@@ -701,7 +701,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
return 0;
}
-@@ -1821,6 +1991,7 @@ static int vc4_hdmi_cec_adap_transmit(st
+@@ -1829,6 +1999,7 @@ static int vc4_hdmi_cec_adap_transmit(st
{
struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap);
struct drm_device *dev = vc4_hdmi->connector.dev;
@@ -709,7 +709,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
u32 val;
unsigned int i;
-@@ -1829,6 +2000,8 @@ static int vc4_hdmi_cec_adap_transmit(st
+@@ -1837,6 +2008,8 @@ static int vc4_hdmi_cec_adap_transmit(st
return -ENOMEM;
}
@@ -718,7 +718,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
for (i = 0; i < msg->len; i += 4)
HDMI_WRITE(HDMI_CEC_TX_DATA_1 + (i >> 2),
(msg->msg[i]) |
-@@ -1844,6 +2017,9 @@ static int vc4_hdmi_cec_adap_transmit(st
+@@ -1852,6 +2025,9 @@ static int vc4_hdmi_cec_adap_transmit(st
val |= VC4_HDMI_CEC_START_XMIT_BEGIN;
HDMI_WRITE(HDMI_CEC_CNTRL_1, val);
@@ -728,7 +728,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
return 0;
}
-@@ -1858,6 +2034,7 @@ static int vc4_hdmi_cec_init(struct vc4_
+@@ -1866,6 +2042,7 @@ static int vc4_hdmi_cec_init(struct vc4_
struct cec_connector_info conn_info;
struct platform_device *pdev = vc4_hdmi->pdev;
struct device *dev = &pdev->dev;
@@ -736,7 +736,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
u32 value;
int ret;
-@@ -1877,10 +2054,12 @@ static int vc4_hdmi_cec_init(struct vc4_
+@@ -1885,10 +2062,12 @@ static int vc4_hdmi_cec_init(struct vc4_
cec_fill_conn_info_from_drm(&conn_info, &vc4_hdmi->connector);
cec_s_conn_info(vc4_hdmi->cec_adap, &conn_info);
@@ -749,7 +749,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
vc4_hdmi_cec_update_clk_div(vc4_hdmi);
-@@ -1899,7 +2078,9 @@ static int vc4_hdmi_cec_init(struct vc4_
+@@ -1907,7 +2086,9 @@ static int vc4_hdmi_cec_init(struct vc4_
if (ret)
goto err_remove_cec_rx_handler;
} else {
@@ -759,7 +759,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
ret = request_threaded_irq(platform_get_irq(pdev, 0),
vc4_cec_irq_handler,
-@@ -2169,6 +2350,7 @@ static int vc4_hdmi_bind(struct device *
+@@ -2177,6 +2358,7 @@ static int vc4_hdmi_bind(struct device *
vc4_hdmi = devm_kzalloc(dev, sizeof(*vc4_hdmi), GFP_KERNEL);
if (!vc4_hdmi)
return -ENOMEM;
@@ -896,7 +896,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
}
--- a/drivers/gpu/drm/vc4/vc4_hdmi_regs.h
+++ b/drivers/gpu/drm/vc4/vc4_hdmi_regs.h
-@@ -442,6 +442,8 @@ static inline void vc4_hdmi_write(struct
+@@ -445,6 +445,8 @@ static inline void vc4_hdmi_write(struct
const struct vc4_hdmi_variant *variant = hdmi->variant;
void __iomem *base;
diff --git a/target/linux/bcm27xx/patches-5.15/950-0008-drm-vc4-hdmi-Use-a-mutex-to-prevent-concurrent-frame.patch b/target/linux/bcm27xx/patches-5.15/950-0008-drm-vc4-hdmi-Use-a-mutex-to-prevent-concurrent-frame.patch
index f3f4e14903..ee9b5747b4 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0008-drm-vc4-hdmi-Use-a-mutex-to-prevent-concurrent-frame.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0008-drm-vc4-hdmi-Use-a-mutex-to-prevent-concurrent-frame.patch
@@ -38,7 +38,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
-@@ -189,6 +189,8 @@ vc4_hdmi_connector_detect(struct drm_con
+@@ -192,6 +192,8 @@ vc4_hdmi_connector_detect(struct drm_con
struct vc4_hdmi *vc4_hdmi = connector_to_vc4_hdmi(connector);
bool connected = false;
@@ -47,7 +47,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
WARN_ON(pm_runtime_resume_and_get(&vc4_hdmi->pdev->dev));
if (vc4_hdmi->hpd_gpio) {
-@@ -219,11 +221,13 @@ vc4_hdmi_connector_detect(struct drm_con
+@@ -222,11 +224,13 @@ vc4_hdmi_connector_detect(struct drm_con
vc4_hdmi_enable_scrambling(&vc4_hdmi->encoder.base.base);
pm_runtime_put(&vc4_hdmi->pdev->dev);
@@ -61,7 +61,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
return connector_status_disconnected;
}
-@@ -240,10 +244,14 @@ static int vc4_hdmi_connector_get_modes(
+@@ -243,10 +247,14 @@ static int vc4_hdmi_connector_get_modes(
int ret = 0;
struct edid *edid;
@@ -78,7 +78,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
vc4_encoder->hdmi_monitor = drm_detect_hdmi_monitor(edid);
-@@ -263,6 +271,9 @@ static int vc4_hdmi_connector_get_modes(
+@@ -266,6 +274,9 @@ static int vc4_hdmi_connector_get_modes(
}
}
@@ -88,7 +88,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
return ret;
}
-@@ -479,6 +490,8 @@ static void vc4_hdmi_set_avi_infoframe(s
+@@ -482,6 +493,8 @@ static void vc4_hdmi_set_avi_infoframe(s
union hdmi_infoframe frame;
int ret;
@@ -97,7 +97,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
ret = drm_hdmi_avi_infoframe_from_display_mode(&frame.avi,
connector, mode);
if (ret < 0) {
-@@ -530,6 +543,8 @@ static void vc4_hdmi_set_hdr_infoframe(s
+@@ -533,6 +546,8 @@ static void vc4_hdmi_set_hdr_infoframe(s
struct drm_connector_state *conn_state = connector->state;
union hdmi_infoframe frame;
@@ -106,7 +106,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
if (!vc4_hdmi->variant->supports_hdr)
return;
-@@ -546,6 +561,8 @@ static void vc4_hdmi_set_infoframes(stru
+@@ -549,6 +564,8 @@ static void vc4_hdmi_set_infoframes(stru
{
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
@@ -115,7 +115,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
vc4_hdmi_set_avi_infoframe(encoder);
vc4_hdmi_set_spd_infoframe(encoder);
/*
-@@ -565,6 +582,8 @@ static bool vc4_hdmi_supports_scrambling
+@@ -568,6 +585,8 @@ static bool vc4_hdmi_supports_scrambling
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
struct drm_display_info *display = &vc4_hdmi->connector.display_info;
@@ -124,7 +124,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
if (!vc4_encoder->hdmi_monitor)
return false;
-@@ -583,6 +602,8 @@ static void vc4_hdmi_enable_scrambling(s
+@@ -586,6 +605,8 @@ static void vc4_hdmi_enable_scrambling(s
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
unsigned long flags;
@@ -133,7 +133,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
if (!vc4_hdmi_supports_scrambling(encoder, mode))
return;
-@@ -652,6 +673,8 @@ static void vc4_hdmi_encoder_post_crtc_d
+@@ -655,6 +676,8 @@ static void vc4_hdmi_encoder_post_crtc_d
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
unsigned long flags;
@@ -142,7 +142,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
HDMI_WRITE(HDMI_RAM_PACKET_CONFIG, 0);
-@@ -668,6 +691,8 @@ static void vc4_hdmi_encoder_post_crtc_d
+@@ -671,6 +694,8 @@ static void vc4_hdmi_encoder_post_crtc_d
spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
vc4_hdmi_disable_scrambling(encoder);
@@ -151,7 +151,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
}
static void vc4_hdmi_encoder_post_crtc_powerdown(struct drm_encoder *encoder,
-@@ -677,6 +702,8 @@ static void vc4_hdmi_encoder_post_crtc_p
+@@ -680,6 +705,8 @@ static void vc4_hdmi_encoder_post_crtc_p
unsigned long flags;
int ret;
@@ -160,7 +160,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
HDMI_WRITE(HDMI_VID_CTL,
HDMI_READ(HDMI_VID_CTL) | VC4_HD_VID_CTL_BLANKPIX);
-@@ -691,6 +718,8 @@ static void vc4_hdmi_encoder_post_crtc_p
+@@ -694,6 +721,8 @@ static void vc4_hdmi_encoder_post_crtc_p
ret = pm_runtime_put(&vc4_hdmi->pdev->dev);
if (ret < 0)
DRM_ERROR("Failed to release power domain: %d\n", ret);
@@ -169,7 +169,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
}
static void vc4_hdmi_encoder_disable(struct drm_encoder *encoder)
-@@ -987,6 +1016,8 @@ static void vc4_hdmi_encoder_pre_crtc_co
+@@ -995,6 +1024,8 @@ static void vc4_hdmi_encoder_pre_crtc_co
unsigned long flags;
int ret;
@@ -178,7 +178,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
/*
* As stated in RPi's vc4 firmware "HDMI state machine (HSM) clock must
* be faster than pixel clock, infinitesimally faster, tested in
-@@ -1007,13 +1038,13 @@ static void vc4_hdmi_encoder_pre_crtc_co
+@@ -1015,13 +1046,13 @@ static void vc4_hdmi_encoder_pre_crtc_co
ret = clk_set_min_rate(vc4_hdmi->hsm_clock, hsm_rate);
if (ret) {
DRM_ERROR("Failed to set HSM clock rate: %d\n", ret);
@@ -194,7 +194,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
}
ret = clk_set_rate(vc4_hdmi->pixel_clock, pixel_rate);
-@@ -1065,13 +1096,16 @@ static void vc4_hdmi_encoder_pre_crtc_co
+@@ -1073,13 +1104,16 @@ static void vc4_hdmi_encoder_pre_crtc_co
if (vc4_hdmi->variant->set_timings)
vc4_hdmi->variant->set_timings(vc4_hdmi, conn_state, mode);
@@ -212,7 +212,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
return;
}
-@@ -1083,6 +1117,8 @@ static void vc4_hdmi_encoder_pre_crtc_en
+@@ -1091,6 +1125,8 @@ static void vc4_hdmi_encoder_pre_crtc_en
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
unsigned long flags;
@@ -221,7 +221,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
if (vc4_encoder->hdmi_monitor &&
drm_default_rgb_quant_range(mode) == HDMI_QUANTIZATION_RANGE_LIMITED) {
if (vc4_hdmi->variant->csc_setup)
-@@ -1099,6 +1135,8 @@ static void vc4_hdmi_encoder_pre_crtc_en
+@@ -1107,6 +1143,8 @@ static void vc4_hdmi_encoder_pre_crtc_en
spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
HDMI_WRITE(HDMI_FIFO_CTL, VC4_HDMI_FIFO_CTL_MASTER_SLAVE_N);
spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
@@ -230,7 +230,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
}
static void vc4_hdmi_encoder_post_crtc_enable(struct drm_encoder *encoder,
-@@ -1112,6 +1150,8 @@ static void vc4_hdmi_encoder_post_crtc_e
+@@ -1120,6 +1158,8 @@ static void vc4_hdmi_encoder_post_crtc_e
unsigned long flags;
int ret;
@@ -239,7 +239,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
HDMI_WRITE(HDMI_VID_CTL,
-@@ -1171,6 +1211,8 @@ static void vc4_hdmi_encoder_post_crtc_e
+@@ -1179,6 +1219,8 @@ static void vc4_hdmi_encoder_post_crtc_e
vc4_hdmi_recenter_fifo(vc4_hdmi);
vc4_hdmi_enable_scrambling(encoder);
@@ -248,7 +248,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
}
static void vc4_hdmi_encoder_enable(struct drm_encoder *encoder)
-@@ -1314,6 +1356,7 @@ static void vc4_hdmi_set_n_cts(struct vc
+@@ -1322,6 +1364,7 @@ static void vc4_hdmi_set_n_cts(struct vc
u32 n, cts;
u64 tmp;
@@ -256,7 +256,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
lockdep_assert_held(&vc4_hdmi->hw_lock);
n = 128 * samplerate / 1000;
-@@ -1347,13 +1390,17 @@ static int vc4_hdmi_audio_startup(struct
+@@ -1355,13 +1398,17 @@ static int vc4_hdmi_audio_startup(struct
struct drm_encoder *encoder = &vc4_hdmi->encoder.base.base;
unsigned long flags;
@@ -275,7 +275,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
vc4_hdmi->audio.streaming = true;
-@@ -1369,6 +1416,8 @@ static int vc4_hdmi_audio_startup(struct
+@@ -1377,6 +1424,8 @@ static int vc4_hdmi_audio_startup(struct
if (vc4_hdmi->variant->phy_rng_enable)
vc4_hdmi->variant->phy_rng_enable(vc4_hdmi);
@@ -284,7 +284,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
return 0;
}
-@@ -1379,6 +1428,8 @@ static void vc4_hdmi_audio_reset(struct
+@@ -1387,6 +1436,8 @@ static void vc4_hdmi_audio_reset(struct
unsigned long flags;
int ret;
@@ -293,7 +293,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
vc4_hdmi->audio.streaming = false;
ret = vc4_hdmi_stop_packet(encoder, HDMI_INFOFRAME_TYPE_AUDIO, false);
if (ret)
-@@ -1398,6 +1449,8 @@ static void vc4_hdmi_audio_shutdown(stru
+@@ -1406,6 +1457,8 @@ static void vc4_hdmi_audio_shutdown(stru
struct vc4_hdmi *vc4_hdmi = dev_get_drvdata(dev);
unsigned long flags;
@@ -302,7 +302,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
HDMI_WRITE(HDMI_MAI_CTL,
-@@ -1412,6 +1465,8 @@ static void vc4_hdmi_audio_shutdown(stru
+@@ -1420,6 +1473,8 @@ static void vc4_hdmi_audio_shutdown(stru
vc4_hdmi->audio.streaming = false;
vc4_hdmi_audio_reset(vc4_hdmi);
@@ -311,7 +311,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
}
static int sample_rate_to_mai_fmt(int samplerate)
-@@ -1470,6 +1525,8 @@ static int vc4_hdmi_audio_prepare(struct
+@@ -1478,6 +1533,8 @@ static int vc4_hdmi_audio_prepare(struct
dev_dbg(dev, "%s: %u Hz, %d bit, %d channels\n", __func__,
sample_rate, params->sample_width, channels);
@@ -320,7 +320,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
vc4_hdmi_audio_set_mai_clock(vc4_hdmi, sample_rate);
spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
-@@ -1524,6 +1581,8 @@ static int vc4_hdmi_audio_prepare(struct
+@@ -1532,6 +1589,8 @@ static int vc4_hdmi_audio_prepare(struct
memcpy(&vc4_hdmi->audio.infoframe, &params->cea, sizeof(params->cea));
vc4_hdmi_set_audio_infoframe(encoder);
@@ -329,7 +329,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
return 0;
}
-@@ -1566,7 +1625,9 @@ static int vc4_hdmi_audio_get_eld(struct
+@@ -1574,7 +1633,9 @@ static int vc4_hdmi_audio_get_eld(struct
struct vc4_hdmi *vc4_hdmi = dev_get_drvdata(dev);
struct drm_connector *connector = &vc4_hdmi->connector;
@@ -339,7 +339,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
return 0;
}
-@@ -1903,6 +1964,17 @@ static int vc4_hdmi_cec_enable(struct ce
+@@ -1911,6 +1972,17 @@ static int vc4_hdmi_cec_enable(struct ce
u32 val;
int ret;
@@ -357,7 +357,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
ret = pm_runtime_resume_and_get(&vc4_hdmi->pdev->dev);
if (ret)
return ret;
-@@ -1949,6 +2021,17 @@ static int vc4_hdmi_cec_disable(struct c
+@@ -1957,6 +2029,17 @@ static int vc4_hdmi_cec_disable(struct c
struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap);
unsigned long flags;
@@ -375,7 +375,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
if (!vc4_hdmi->variant->external_irq_controller)
-@@ -1977,6 +2060,17 @@ static int vc4_hdmi_cec_adap_log_addr(st
+@@ -1985,6 +2068,17 @@ static int vc4_hdmi_cec_adap_log_addr(st
struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap);
unsigned long flags;
@@ -393,7 +393,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
HDMI_WRITE(HDMI_CEC_CNTRL_1,
(HDMI_READ(HDMI_CEC_CNTRL_1) & ~VC4_HDMI_CEC_ADDR_MASK) |
-@@ -1995,6 +2089,17 @@ static int vc4_hdmi_cec_adap_transmit(st
+@@ -2003,6 +2097,17 @@ static int vc4_hdmi_cec_adap_transmit(st
u32 val;
unsigned int i;
@@ -411,7 +411,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
if (msg->len > 16) {
drm_err(dev, "Attempting to transmit too much data (%d)\n", msg->len);
return -ENOMEM;
-@@ -2350,6 +2455,7 @@ static int vc4_hdmi_bind(struct device *
+@@ -2358,6 +2463,7 @@ static int vc4_hdmi_bind(struct device *
vc4_hdmi = devm_kzalloc(dev, sizeof(*vc4_hdmi), GFP_KERNEL);
if (!vc4_hdmi)
return -ENOMEM;
diff --git a/target/linux/bcm27xx/patches-5.15/950-0009-drm-vc4-hdmi-Prevent-access-to-crtc-state-outside-of.patch b/target/linux/bcm27xx/patches-5.15/950-0009-drm-vc4-hdmi-Prevent-access-to-crtc-state-outside-of.patch
index db65832d9b..117ccf3b06 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0009-drm-vc4-hdmi-Prevent-access-to-crtc-state-outside-of.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0009-drm-vc4-hdmi-Prevent-access-to-crtc-state-outside-of.patch
@@ -29,7 +29,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
-@@ -485,8 +485,7 @@ static void vc4_hdmi_set_avi_infoframe(s
+@@ -488,8 +488,7 @@ static void vc4_hdmi_set_avi_infoframe(s
struct vc4_hdmi_encoder *vc4_encoder = to_vc4_hdmi_encoder(encoder);
struct drm_connector *connector = &vc4_hdmi->connector;
struct drm_connector_state *cstate = connector->state;
@@ -39,7 +39,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
union hdmi_infoframe frame;
int ret;
-@@ -598,8 +597,8 @@ static bool vc4_hdmi_supports_scrambling
+@@ -601,8 +600,8 @@ static bool vc4_hdmi_supports_scrambling
static void vc4_hdmi_enable_scrambling(struct drm_encoder *encoder)
{
@@ -49,7 +49,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
unsigned long flags;
lockdep_assert_held(&vc4_hdmi->mutex);
-@@ -625,18 +624,21 @@ static void vc4_hdmi_enable_scrambling(s
+@@ -628,18 +627,21 @@ static void vc4_hdmi_enable_scrambling(s
static void vc4_hdmi_disable_scrambling(struct drm_encoder *encoder)
{
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
@@ -73,7 +73,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
return;
if (delayed_work_pending(&vc4_hdmi->scrambling_work))
-@@ -1009,8 +1011,8 @@ static void vc4_hdmi_encoder_pre_crtc_co
+@@ -1017,8 +1019,8 @@ static void vc4_hdmi_encoder_pre_crtc_co
vc4_hdmi_encoder_get_connector_state(encoder, state);
struct vc4_hdmi_connector_state *vc4_conn_state =
conn_state_to_vc4_hdmi_conn_state(conn_state);
@@ -83,7 +83,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
unsigned long pixel_rate = vc4_conn_state->pixel_rate;
unsigned long bvb_rate, hsm_rate;
unsigned long flags;
-@@ -1112,9 +1114,9 @@ out:
+@@ -1120,9 +1122,9 @@ out:
static void vc4_hdmi_encoder_pre_crtc_enable(struct drm_encoder *encoder,
struct drm_atomic_state *state)
{
@@ -95,7 +95,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
unsigned long flags;
mutex_lock(&vc4_hdmi->mutex);
-@@ -1142,8 +1144,8 @@ static void vc4_hdmi_encoder_pre_crtc_en
+@@ -1150,8 +1152,8 @@ static void vc4_hdmi_encoder_pre_crtc_en
static void vc4_hdmi_encoder_post_crtc_enable(struct drm_encoder *encoder,
struct drm_atomic_state *state)
{
@@ -105,7 +105,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
struct vc4_hdmi_encoder *vc4_encoder = to_vc4_hdmi_encoder(encoder);
bool hsync_pos = mode->flags & DRM_MODE_FLAG_PHSYNC;
bool vsync_pos = mode->flags & DRM_MODE_FLAG_PVSYNC;
-@@ -1219,6 +1221,19 @@ static void vc4_hdmi_encoder_enable(stru
+@@ -1227,6 +1229,19 @@ static void vc4_hdmi_encoder_enable(stru
{
}
@@ -125,7 +125,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
#define WIFI_2_4GHz_CH1_MIN_FREQ 2400000000ULL
#define WIFI_2_4GHz_CH1_MAX_FREQ 2422000000ULL
-@@ -1297,6 +1312,7 @@ vc4_hdmi_encoder_mode_valid(struct drm_e
+@@ -1305,6 +1320,7 @@ vc4_hdmi_encoder_mode_valid(struct drm_e
static const struct drm_encoder_helper_funcs vc4_hdmi_encoder_helper_funcs = {
.atomic_check = vc4_hdmi_encoder_atomic_check,
@@ -133,7 +133,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
.mode_valid = vc4_hdmi_encoder_mode_valid,
.disable = vc4_hdmi_encoder_disable,
.enable = vc4_hdmi_encoder_enable,
-@@ -1350,9 +1366,7 @@ static void vc4_hdmi_audio_set_mai_clock
+@@ -1358,9 +1374,7 @@ static void vc4_hdmi_audio_set_mai_clock
static void vc4_hdmi_set_n_cts(struct vc4_hdmi *vc4_hdmi, unsigned int samplerate)
{
diff --git a/target/linux/bcm27xx/patches-5.15/950-0010-drm-vc4-hdmi-Check-the-device-state-in-prepare.patch b/target/linux/bcm27xx/patches-5.15/950-0010-drm-vc4-hdmi-Check-the-device-state-in-prepare.patch
index 1361850d00..cf78bb0b13 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0010-drm-vc4-hdmi-Check-the-device-state-in-prepare.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0010-drm-vc4-hdmi-Check-the-device-state-in-prepare.patch
@@ -19,7 +19,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
-@@ -1398,20 +1398,36 @@ static inline struct vc4_hdmi *dai_to_hd
+@@ -1406,20 +1406,36 @@ static inline struct vc4_hdmi *dai_to_hd
return snd_soc_card_get_drvdata(card);
}
@@ -63,7 +63,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
mutex_unlock(&vc4_hdmi->mutex);
return -ENODEV;
}
-@@ -1541,6 +1557,11 @@ static int vc4_hdmi_audio_prepare(struct
+@@ -1549,6 +1565,11 @@ static int vc4_hdmi_audio_prepare(struct
mutex_lock(&vc4_hdmi->mutex);
diff --git a/target/linux/bcm27xx/patches-5.15/950-0011-drm-vc4-hdmi-Introduce-an-output_enabled-flag.patch b/target/linux/bcm27xx/patches-5.15/950-0011-drm-vc4-hdmi-Introduce-an-output_enabled-flag.patch
index 0e04ba7924..40927805cf 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0011-drm-vc4-hdmi-Introduce-an-output_enabled-flag.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0011-drm-vc4-hdmi-Introduce-an-output_enabled-flag.patch
@@ -20,7 +20,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
-@@ -726,6 +726,11 @@ static void vc4_hdmi_encoder_post_crtc_p
+@@ -729,6 +729,11 @@ static void vc4_hdmi_encoder_post_crtc_p
static void vc4_hdmi_encoder_disable(struct drm_encoder *encoder)
{
@@ -32,7 +32,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
}
static void vc4_hdmi_csc_setup(struct vc4_hdmi *vc4_hdmi, bool enable)
-@@ -1219,6 +1224,11 @@ static void vc4_hdmi_encoder_post_crtc_e
+@@ -1227,6 +1232,11 @@ static void vc4_hdmi_encoder_post_crtc_e
static void vc4_hdmi_encoder_enable(struct drm_encoder *encoder)
{
@@ -44,7 +44,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
}
static void vc4_hdmi_encoder_atomic_mode_set(struct drm_encoder *encoder,
-@@ -1400,14 +1410,12 @@ static inline struct vc4_hdmi *dai_to_hd
+@@ -1408,14 +1418,12 @@ static inline struct vc4_hdmi *dai_to_hd
static bool vc4_hdmi_audio_can_stream(struct vc4_hdmi *vc4_hdmi)
{
diff --git a/target/linux/bcm27xx/patches-5.15/950-0012-drm-vc4-hdmi-Introduce-a-scdc_enabled-flag.patch b/target/linux/bcm27xx/patches-5.15/950-0012-drm-vc4-hdmi-Introduce-a-scdc_enabled-flag.patch
index 13601ede9a..eed72c6570 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0012-drm-vc4-hdmi-Introduce-a-scdc_enabled-flag.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0012-drm-vc4-hdmi-Introduce-a-scdc_enabled-flag.patch
@@ -35,7 +35,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
-@@ -617,6 +617,8 @@ static void vc4_hdmi_enable_scrambling(s
+@@ -620,6 +620,8 @@ static void vc4_hdmi_enable_scrambling(s
VC5_HDMI_SCRAMBLER_CTL_ENABLE);
spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
@@ -44,7 +44,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
queue_delayed_work(system_wq, &vc4_hdmi->scrambling_work,
msecs_to_jiffies(SCRAMBLING_POLLING_DELAY_MS));
}
-@@ -624,22 +626,14 @@ static void vc4_hdmi_enable_scrambling(s
+@@ -627,22 +629,14 @@ static void vc4_hdmi_enable_scrambling(s
static void vc4_hdmi_disable_scrambling(struct drm_encoder *encoder)
{
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
@@ -69,7 +69,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
if (delayed_work_pending(&vc4_hdmi->scrambling_work))
cancel_delayed_work_sync(&vc4_hdmi->scrambling_work);
-@@ -2513,6 +2507,14 @@ static int vc4_hdmi_bind(struct device *
+@@ -2521,6 +2515,14 @@ static int vc4_hdmi_bind(struct device *
vc4_hdmi->pdev = pdev;
vc4_hdmi->variant = variant;
diff --git a/target/linux/bcm27xx/patches-5.15/950-0014-drm-vc4-crtc-Add-encoder-to-vc4_crtc_config_pv-proto.patch b/target/linux/bcm27xx/patches-5.15/950-0014-drm-vc4-crtc-Add-encoder-to-vc4_crtc_config_pv-proto.patch
index 236706bc4a..060b7659d4 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0014-drm-vc4-crtc-Add-encoder-to-vc4_crtc_config_pv-proto.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0014-drm-vc4-crtc-Add-encoder-to-vc4_crtc_config_pv-proto.patch
@@ -32,7 +32,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
struct vc4_encoder *vc4_encoder = to_vc4_encoder(encoder);
struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc);
const struct vc4_pv_data *pv_data = vc4_crtc_to_vc4_pv_data(vc4_crtc);
-@@ -599,7 +598,7 @@ static void vc4_crtc_atomic_enable(struc
+@@ -601,7 +600,7 @@ static void vc4_crtc_atomic_enable(struc
if (vc4_encoder->pre_crtc_configure)
vc4_encoder->pre_crtc_configure(encoder, state);
diff --git a/target/linux/bcm27xx/patches-5.15/950-0015-drm-vc4-crtc-Rework-the-encoder-retrieval-code-again.patch b/target/linux/bcm27xx/patches-5.15/950-0015-drm-vc4-crtc-Rework-the-encoder-retrieval-code-again.patch
index d247ec2e4f..5d8f0835ae 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0015-drm-vc4-crtc-Rework-the-encoder-retrieval-code-again.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0015-drm-vc4-crtc-Rework-the-encoder-retrieval-code-again.patch
@@ -57,7 +57,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
return NULL;
}
-@@ -552,8 +540,7 @@ static void vc4_crtc_atomic_disable(stru
+@@ -554,8 +542,7 @@ static void vc4_crtc_atomic_disable(stru
struct drm_crtc_state *old_state = drm_atomic_get_old_crtc_state(state,
crtc);
struct vc4_crtc_state *old_vc4_state = to_vc4_crtc_state(old_state);
@@ -67,7 +67,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
struct drm_device *dev = crtc->dev;
require_hvs_enabled(dev);
-@@ -580,10 +567,11 @@ static void vc4_crtc_atomic_disable(stru
+@@ -582,10 +569,11 @@ static void vc4_crtc_atomic_disable(stru
static void vc4_crtc_atomic_enable(struct drm_crtc *crtc,
struct drm_atomic_state *state)
{
diff --git a/target/linux/bcm27xx/patches-5.15/950-0016-drm-vc4-crtc-Add-some-logging.patch b/target/linux/bcm27xx/patches-5.15/950-0016-drm-vc4-crtc-Add-some-logging.patch
index 4dac614c3b..0b855b7c22 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0016-drm-vc4-crtc-Add-some-logging.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0016-drm-vc4-crtc-Add-some-logging.patch
@@ -16,7 +16,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
--- a/drivers/gpu/drm/vc4/vc4_crtc.c
+++ b/drivers/gpu/drm/vc4/vc4_crtc.c
-@@ -543,6 +543,9 @@ static void vc4_crtc_atomic_disable(stru
+@@ -545,6 +545,9 @@ static void vc4_crtc_atomic_disable(stru
struct drm_encoder *encoder = vc4_get_crtc_encoder(crtc, old_state);
struct drm_device *dev = crtc->dev;
@@ -26,7 +26,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
require_hvs_enabled(dev);
/* Disable vblank irq handling before crtc is disabled. */
-@@ -574,6 +577,9 @@ static void vc4_crtc_atomic_enable(struc
+@@ -576,6 +579,9 @@ static void vc4_crtc_atomic_enable(struc
struct drm_encoder *encoder = vc4_get_crtc_encoder(crtc, new_state);
struct vc4_encoder *vc4_encoder = to_vc4_encoder(encoder);
diff --git a/target/linux/bcm27xx/patches-5.15/950-0017-drm-vc4-Leverage-the-load-tracker-on-the-BCM2711.patch b/target/linux/bcm27xx/patches-5.15/950-0017-drm-vc4-Leverage-the-load-tracker-on-the-BCM2711.patch
index e6b558abe0..6f26f0f281 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0017-drm-vc4-Leverage-the-load-tracker-on-the-BCM2711.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0017-drm-vc4-Leverage-the-load-tracker-on-the-BCM2711.patch
@@ -109,7 +109,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
*/
--- a/drivers/gpu/drm/vc4/vc4_plane.c
+++ b/drivers/gpu/drm/vc4/vc4_plane.c
-@@ -529,11 +529,6 @@ static void vc4_plane_calc_load(struct d
+@@ -525,11 +525,6 @@ static void vc4_plane_calc_load(struct d
struct vc4_plane_state *vc4_state;
struct drm_crtc_state *crtc_state;
unsigned int vscale_factor;
diff --git a/target/linux/bcm27xx/patches-5.15/950-0018-drm-vc4-Increase-the-core-clock-based-on-HVS-load.patch b/target/linux/bcm27xx/patches-5.15/950-0018-drm-vc4-Increase-the-core-clock-based-on-HVS-load.patch
index f8475861fe..3807c0bd73 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0018-drm-vc4-Increase-the-core-clock-based-on-HVS-load.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0018-drm-vc4-Increase-the-core-clock-based-on-HVS-load.patch
@@ -19,7 +19,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
--- a/drivers/gpu/drm/vc4/vc4_crtc.c
+++ b/drivers/gpu/drm/vc4/vc4_crtc.c
-@@ -661,12 +661,27 @@ static int vc4_crtc_atomic_check(struct
+@@ -663,12 +663,27 @@ static int vc4_crtc_atomic_check(struct
struct vc4_crtc_state *vc4_state = to_vc4_crtc_state(crtc_state);
struct drm_connector *conn;
struct drm_connector_state *conn_state;
diff --git a/target/linux/bcm27xx/patches-5.15/950-0021-drm-vc4-hdmi-Actually-check-for-the-connector-status.patch b/target/linux/bcm27xx/patches-5.15/950-0021-drm-vc4-hdmi-Actually-check-for-the-connector-status.patch
index d7d207f7db..54c5d9302c 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0021-drm-vc4-hdmi-Actually-check-for-the-connector-status.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0021-drm-vc4-hdmi-Actually-check-for-the-connector-status.patch
@@ -44,7 +44,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
-@@ -1793,10 +1793,11 @@ static void vc4_hdmi_audio_exit(struct v
+@@ -1801,10 +1801,11 @@ static void vc4_hdmi_audio_exit(struct v
static irqreturn_t vc4_hdmi_hpd_irq_thread(int irq, void *priv)
{
struct vc4_hdmi *vc4_hdmi = priv;
diff --git a/target/linux/bcm27xx/patches-5.15/950-0023-drm-vc4-Remove-conflicting-framebuffers-before-calli.patch b/target/linux/bcm27xx/patches-5.15/950-0023-drm-vc4-Remove-conflicting-framebuffers-before-calli.patch
index 0feaacbc67..e78c5aa80d 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0023-drm-vc4-Remove-conflicting-framebuffers-before-calli.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0023-drm-vc4-Remove-conflicting-framebuffers-before-calli.patch
@@ -17,7 +17,7 @@ Link: https://patchwork.freedesktop.org/patch/msgid/20211215095117.176435-4-maxi
--- a/drivers/gpu/drm/vc4/vc4_drv.c
+++ b/drivers/gpu/drm/vc4/vc4_drv.c
-@@ -253,15 +253,15 @@ static int vc4_drm_bind(struct device *d
+@@ -272,15 +272,15 @@ static int vc4_drm_bind(struct device *d
if (ret)
return ret;
diff --git a/target/linux/bcm27xx/patches-5.15/950-0024-drm-vc4-Notify-the-firmware-when-DRM-is-in-charge.patch b/target/linux/bcm27xx/patches-5.15/950-0024-drm-vc4-Notify-the-firmware-when-DRM-is-in-charge.patch
index 04db8fb1d5..65c47edb54 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0024-drm-vc4-Notify-the-firmware-when-DRM-is-in-charge.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0024-drm-vc4-Notify-the-firmware-when-DRM-is-in-charge.patch
@@ -29,7 +29,7 @@ Link: https://patchwork.freedesktop.org/patch/msgid/20211215095117.176435-5-maxi
#include "uapi/drm/vc4_drm.h"
#include "vc4_drv.h"
-@@ -217,6 +219,7 @@ static void vc4_match_add_drivers(struct
+@@ -226,6 +228,7 @@ static const struct of_device_id vc4_dma
static int vc4_drm_bind(struct device *dev)
{
struct platform_device *pdev = to_platform_device(dev);
@@ -37,7 +37,7 @@ Link: https://patchwork.freedesktop.org/patch/msgid/20211215095117.176435-5-maxi
struct drm_device *drm;
struct vc4_dev *vc4;
struct device_node *node;
-@@ -253,10 +256,29 @@ static int vc4_drm_bind(struct device *d
+@@ -272,10 +275,29 @@ static int vc4_drm_bind(struct device *d
if (ret)
return ret;
diff --git a/target/linux/bcm27xx/patches-5.15/950-0032-smsx95xx-fix-crimes-against-truesize.patch b/target/linux/bcm27xx/patches-5.15/950-0032-smsx95xx-fix-crimes-against-truesize.patch
index 9b479c65d2..14e3bea9e2 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0032-smsx95xx-fix-crimes-against-truesize.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0032-smsx95xx-fix-crimes-against-truesize.patch
@@ -14,7 +14,7 @@ Signed-off-by: Steve Glendinning <steve.glendinning@smsc.com>
--- a/drivers/net/usb/smsc95xx.c
+++ b/drivers/net/usb/smsc95xx.c
-@@ -67,6 +67,10 @@ static bool turbo_mode = true;
+@@ -76,6 +76,10 @@ static bool turbo_mode = true;
module_param(turbo_mode, bool, 0644);
MODULE_PARM_DESC(turbo_mode, "Enable multiple frames per Rx transaction");
@@ -25,7 +25,7 @@ Signed-off-by: Steve Glendinning <steve.glendinning@smsc.com>
static int __must_check __smsc95xx_read_reg(struct usbnet *dev, u32 index,
u32 *data, int in_pm)
{
-@@ -1838,7 +1842,8 @@ static int smsc95xx_rx_fixup(struct usbn
+@@ -1860,7 +1864,8 @@ static int smsc95xx_rx_fixup(struct usbn
if (dev->net->features & NETIF_F_RXCSUM)
smsc95xx_rx_csum_offload(skb);
skb_trim(skb, skb->len - 4); /* remove fcs */
@@ -35,7 +35,7 @@ Signed-off-by: Steve Glendinning <steve.glendinning@smsc.com>
return 1;
}
-@@ -1856,7 +1861,8 @@ static int smsc95xx_rx_fixup(struct usbn
+@@ -1878,7 +1883,8 @@ static int smsc95xx_rx_fixup(struct usbn
if (dev->net->features & NETIF_F_RXCSUM)
smsc95xx_rx_csum_offload(ax_skb);
skb_trim(ax_skb, ax_skb->len - 4); /* remove fcs */
diff --git a/target/linux/bcm27xx/patches-5.15/950-0033-smsc95xx-Experimental-Enable-turbo_mode-and-packetsi.patch b/target/linux/bcm27xx/patches-5.15/950-0033-smsc95xx-Experimental-Enable-turbo_mode-and-packetsi.patch
index 52f76c12f8..7a914d5738 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0033-smsc95xx-Experimental-Enable-turbo_mode-and-packetsi.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0033-smsc95xx-Experimental-Enable-turbo_mode-and-packetsi.patch
@@ -11,7 +11,7 @@ See: http://forum.kodi.tv/showthread.php?tid=285288
--- a/drivers/net/usb/smsc95xx.c
+++ b/drivers/net/usb/smsc95xx.c
-@@ -71,6 +71,10 @@ static bool truesize_mode = false;
+@@ -80,6 +80,10 @@ static bool truesize_mode = false;
module_param(truesize_mode, bool, 0644);
MODULE_PARM_DESC(truesize_mode, "Report larger truesize value");
@@ -22,7 +22,7 @@ See: http://forum.kodi.tv/showthread.php?tid=285288
static int __must_check __smsc95xx_read_reg(struct usbnet *dev, u32 index,
u32 *data, int in_pm)
{
-@@ -917,13 +921,13 @@ static int smsc95xx_reset(struct usbnet
+@@ -932,13 +936,13 @@ static int smsc95xx_reset(struct usbnet
if (!turbo_mode) {
burst_cap = 0;
diff --git a/target/linux/bcm27xx/patches-5.15/950-0034-Allow-mac-address-to-be-set-in-smsc95xx.patch b/target/linux/bcm27xx/patches-5.15/950-0034-Allow-mac-address-to-be-set-in-smsc95xx.patch
index e818e6c4ac..fe7d025766 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0034-Allow-mac-address-to-be-set-in-smsc95xx.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0034-Allow-mac-address-to-be-set-in-smsc95xx.patch
@@ -10,15 +10,15 @@ Signed-off-by: popcornmix <popcornmix@gmail.com>
--- a/drivers/net/usb/smsc95xx.c
+++ b/drivers/net/usb/smsc95xx.c
-@@ -50,6 +50,7 @@
+@@ -52,6 +52,7 @@
#define SUSPEND_SUSPEND3 (0x08)
#define SUSPEND_ALLMODES (SUSPEND_SUSPEND0 | SUSPEND_SUSPEND1 | \
SUSPEND_SUSPEND2 | SUSPEND_SUSPEND3)
+#define MAC_ADDR_LEN (6)
- struct smsc95xx_priv {
- u32 mac_cr;
-@@ -75,6 +76,10 @@ static int packetsize = 2560;
+ #define SMSC95XX_NR_IRQS (1) /* raise to 12 for GPIOs */
+ #define PHY_HWIRQ (SMSC95XX_NR_IRQS - 1)
+@@ -84,6 +85,10 @@ static int packetsize = 2560;
module_param(packetsize, int, 0644);
MODULE_PARM_DESC(packetsize, "Override the RX URB packet size");
@@ -29,7 +29,7 @@ Signed-off-by: popcornmix <popcornmix@gmail.com>
static int __must_check __smsc95xx_read_reg(struct usbnet *dev, u32 index,
u32 *data, int in_pm)
{
-@@ -773,6 +778,53 @@ static int smsc95xx_ioctl(struct net_dev
+@@ -788,6 +793,53 @@ static int smsc95xx_ioctl(struct net_dev
return phy_mii_ioctl(netdev->phydev, rq, cmd);
}
@@ -83,7 +83,7 @@ Signed-off-by: popcornmix <popcornmix@gmail.com>
static void smsc95xx_init_mac_address(struct usbnet *dev)
{
/* maybe the boot loader passed the MAC address in devicetree */
-@@ -795,6 +847,10 @@ static void smsc95xx_init_mac_address(st
+@@ -810,6 +862,10 @@ static void smsc95xx_init_mac_address(st
}
}
diff --git a/target/linux/bcm27xx/patches-5.15/950-0090-ARM64-Force-hardware-emulation-of-deprecated-instruc.patch b/target/linux/bcm27xx/patches-5.15/950-0090-ARM64-Force-hardware-emulation-of-deprecated-instruc.patch
index 3b8273038a..3ab51b0f07 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0090-ARM64-Force-hardware-emulation-of-deprecated-instruc.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0090-ARM64-Force-hardware-emulation-of-deprecated-instruc.patch
@@ -10,7 +10,7 @@ Subject: [PATCH] ARM64: Force hardware emulation of deprecated
--- a/arch/arm64/kernel/armv8_deprecated.c
+++ b/arch/arm64/kernel/armv8_deprecated.c
-@@ -182,10 +182,15 @@ static void __init register_insn_emulati
+@@ -183,10 +183,15 @@ static void __init register_insn_emulati
switch (ops->status) {
case INSN_DEPRECATED:
diff --git a/target/linux/bcm27xx/patches-5.15/950-0151-usb-add-plumbing-for-updating-interrupt-endpoint-int.patch b/target/linux/bcm27xx/patches-5.15/950-0151-usb-add-plumbing-for-updating-interrupt-endpoint-int.patch
index 6b931a3e2f..44fd3256ff 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0151-usb-add-plumbing-for-updating-interrupt-endpoint-int.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0151-usb-add-plumbing-for-updating-interrupt-endpoint-int.patch
@@ -27,7 +27,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.org>
--- a/drivers/usb/core/hcd.c
+++ b/drivers/usb/core/hcd.c
-@@ -1969,6 +1969,16 @@ reset:
+@@ -1972,6 +1972,16 @@ reset:
return ret;
}
@@ -81,7 +81,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.org>
extern int usb_driver_set_configuration(struct usb_device *udev, int config);
--- a/include/linux/usb/hcd.h
+++ b/include/linux/usb/hcd.h
-@@ -384,6 +384,11 @@ struct hc_driver {
+@@ -385,6 +385,11 @@ struct hc_driver {
* or bandwidth constraints.
*/
void (*reset_bandwidth)(struct usb_hcd *, struct usb_device *);
@@ -93,7 +93,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.org>
/* Returns the hardware-chosen device address */
int (*address_device)(struct usb_hcd *, struct usb_device *udev);
/* prepares the hardware to send commands to the device */
-@@ -448,6 +453,8 @@ extern void usb_hcd_unmap_urb_setup_for_
+@@ -449,6 +454,8 @@ extern void usb_hcd_unmap_urb_setup_for_
extern void usb_hcd_unmap_urb_for_dma(struct usb_hcd *, struct urb *);
extern void usb_hcd_flush_endpoint(struct usb_device *udev,
struct usb_host_endpoint *ep);
diff --git a/target/linux/bcm27xx/patches-5.15/950-0163-hid-usb-Add-device-quirks-for-Freeway-Airmouse-T3-an.patch b/target/linux/bcm27xx/patches-5.15/950-0163-hid-usb-Add-device-quirks-for-Freeway-Airmouse-T3-an.patch
index 9774074e50..725f7f69e2 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0163-hid-usb-Add-device-quirks-for-Freeway-Airmouse-T3-an.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0163-hid-usb-Add-device-quirks-for-Freeway-Airmouse-T3-an.patch
@@ -33,7 +33,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.org>
#define USB_VENDOR_ID_BELKIN 0x050d
#define USB_DEVICE_ID_FLIP_KVM 0x3201
-@@ -1306,6 +1309,9 @@
+@@ -1307,6 +1310,9 @@
#define USB_VENDOR_ID_XAT 0x2505
#define USB_DEVICE_ID_XAT_CSR 0x0220
diff --git a/target/linux/bcm27xx/patches-5.15/950-0208-spi-Force-CS_HIGH-if-GPIO-descriptors-are-used.patch b/target/linux/bcm27xx/patches-5.15/950-0208-spi-Force-CS_HIGH-if-GPIO-descriptors-are-used.patch
index e1765aedce..7a72dc8576 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0208-spi-Force-CS_HIGH-if-GPIO-descriptors-are-used.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0208-spi-Force-CS_HIGH-if-GPIO-descriptors-are-used.patch
@@ -32,7 +32,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
-@@ -3469,6 +3469,7 @@ static int __spi_validate_bits_per_word(
+@@ -3478,6 +3478,7 @@ static int __spi_validate_bits_per_word(
*/
int spi_setup(struct spi_device *spi)
{
@@ -40,7 +40,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
unsigned bad_bits, ugly_bits;
int status;
-@@ -3490,6 +3491,14 @@ int spi_setup(struct spi_device *spi)
+@@ -3499,6 +3500,14 @@ int spi_setup(struct spi_device *spi)
(SPI_TX_DUAL | SPI_TX_QUAD | SPI_TX_OCTAL |
SPI_RX_DUAL | SPI_RX_QUAD | SPI_RX_OCTAL)))
return -EINVAL;
diff --git a/target/linux/bcm27xx/patches-5.15/950-0420-drm-vc4-Adopt-the-dma-configuration-from-the-HVS-or-.patch b/target/linux/bcm27xx/patches-5.15/950-0420-drm-vc4-Adopt-the-dma-configuration-from-the-HVS-or-.patch
deleted file mode 100644
index 318d107297..0000000000
--- a/target/linux/bcm27xx/patches-5.15/950-0420-drm-vc4-Adopt-the-dma-configuration-from-the-HVS-or-.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-From d7bcb557c33523fdb3f51ac8e088cd809031ea3a Mon Sep 17 00:00:00 2001
-From: Dave Stevenson <dave.stevenson@raspberrypi.com>
-Date: Tue, 19 May 2020 14:54:28 +0100
-Subject: [PATCH] drm/vc4: Adopt the dma configuration from the HVS or
- V3D component
-
-vc4_drv isn't necessarily under the /soc node in DT as it is a
-virtual device, but it is the one that does the allocations.
-The DMA addresses are consumed by primarily the HVS or V3D, and
-those require VideoCore cache alias address mapping, and so will be
-under /soc.
-
-During probe find the a suitable device node for HVS or V3D,
-and adopt the DMA configuration of that node.
-
-Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
----
- drivers/gpu/drm/vc4/vc4_drv.c | 18 ++++++++++++++++++
- 1 file changed, 18 insertions(+)
-
---- a/drivers/gpu/drm/vc4/vc4_drv.c
-+++ b/drivers/gpu/drm/vc4/vc4_drv.c
-@@ -216,6 +216,14 @@ static void vc4_match_add_drivers(struct
- }
- }
-
-+const struct of_device_id vc4_dma_range_matches[] = {
-+ { .compatible = "brcm,bcm2835-hvs" },
-+ { .compatible = "brcm,bcm2835-v3d" },
-+ { .compatible = "brcm,cygnus-v3d" },
-+ { .compatible = "brcm,vc4-v3d" },
-+ {}
-+};
-+
- static int vc4_drm_bind(struct device *dev)
- {
- struct platform_device *pdev = to_platform_device(dev);
-@@ -234,6 +242,16 @@ static int vc4_drm_bind(struct device *d
- vc4_drm_driver.driver_features &= ~DRIVER_RENDER;
- of_node_put(node);
-
-+ node = of_find_matching_node_and_match(NULL, vc4_dma_range_matches,
-+ NULL);
-+ if (node) {
-+ ret = of_dma_configure(dev, node, true);
-+ of_node_put(node);
-+
-+ if (ret)
-+ return ret;
-+ }
-+
- vc4 = devm_drm_dev_alloc(dev, &vc4_drm_driver, struct vc4_dev, base);
- if (IS_ERR(vc4))
- return PTR_ERR(vc4);
diff --git a/target/linux/bcm27xx/patches-5.15/950-0422-drm-vc4-plane-Add-support-for-DRM_FORMAT_P030.patch b/target/linux/bcm27xx/patches-5.15/950-0422-drm-vc4-plane-Add-support-for-DRM_FORMAT_P030.patch
index 074fbe803d..3dc01372ea 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0422-drm-vc4-plane-Add-support-for-DRM_FORMAT_P030.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0422-drm-vc4-plane-Add-support-for-DRM_FORMAT_P030.patch
@@ -39,7 +39,7 @@ Link: https://lore.kernel.org/r/20211215091739.135042-3-maxime@cerno.tech
};
static const struct hvs_format *vc4_get_hvs_format(u32 drm_format)
-@@ -762,47 +769,90 @@ static int vc4_plane_mode_set(struct drm
+@@ -758,47 +765,90 @@ static int vc4_plane_mode_set(struct drm
case DRM_FORMAT_MOD_BROADCOM_SAND128:
case DRM_FORMAT_MOD_BROADCOM_SAND256: {
uint32_t param = fourcc_mod_broadcom_param(fb->modifier);
@@ -157,7 +157,7 @@ Link: https://lore.kernel.org/r/20211215091739.135042-3-maxime@cerno.tech
}
pitch0 = VC4_SET_FIELD(param, SCALER_TILE_HEIGHT);
-@@ -955,7 +1005,8 @@ static int vc4_plane_mode_set(struct drm
+@@ -951,7 +1001,8 @@ static int vc4_plane_mode_set(struct drm
/* Pitch word 1/2 */
for (i = 1; i < num_planes; i++) {
@@ -167,7 +167,7 @@ Link: https://lore.kernel.org/r/20211215091739.135042-3-maxime@cerno.tech
vc4_dlist_write(vc4_state,
VC4_SET_FIELD(fb->pitches[i],
SCALER_SRC_PITCH));
-@@ -1315,6 +1366,13 @@ static bool vc4_format_mod_supported(str
+@@ -1311,6 +1362,13 @@ static bool vc4_format_mod_supported(str
default:
return false;
}
@@ -181,7 +181,7 @@ Link: https://lore.kernel.org/r/20211215091739.135042-3-maxime@cerno.tech
case DRM_FORMAT_RGBX1010102:
case DRM_FORMAT_BGRX1010102:
case DRM_FORMAT_RGBA1010102:
-@@ -1347,8 +1405,11 @@ struct drm_plane *vc4_plane_init(struct
+@@ -1343,8 +1401,11 @@ struct drm_plane *vc4_plane_init(struct
struct drm_plane *plane = NULL;
struct vc4_plane *vc4_plane;
u32 formats[ARRAY_SIZE(hvs_formats)];
@@ -193,7 +193,7 @@ Link: https://lore.kernel.org/r/20211215091739.135042-3-maxime@cerno.tech
static const uint64_t modifiers[] = {
DRM_FORMAT_MOD_BROADCOM_VC4_T_TILED,
DRM_FORMAT_MOD_BROADCOM_SAND128,
-@@ -1363,13 +1424,17 @@ struct drm_plane *vc4_plane_init(struct
+@@ -1359,13 +1420,17 @@ struct drm_plane *vc4_plane_init(struct
if (!vc4_plane)
return ERR_PTR(-ENOMEM);
diff --git a/target/linux/bcm27xx/patches-5.15/950-0423-drm-vc4-plane-Add-support-for-YUV-color-encodings-an.patch b/target/linux/bcm27xx/patches-5.15/950-0423-drm-vc4-plane-Add-support-for-YUV-color-encodings-an.patch
index 43712b5b0b..8620d083dd 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0423-drm-vc4-plane-Add-support-for-YUV-color-encodings-an.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0423-drm-vc4-plane-Add-support-for-YUV-color-encodings-an.patch
@@ -21,7 +21,7 @@ Link: https://lore.kernel.org/r/20211215091739.135042-4-maxime@cerno.tech
--- a/drivers/gpu/drm/vc4/vc4_plane.c
+++ b/drivers/gpu/drm/vc4/vc4_plane.c
-@@ -623,6 +623,51 @@ static int vc4_plane_allocate_lbm(struct
+@@ -619,6 +619,51 @@ static int vc4_plane_allocate_lbm(struct
return 0;
}
@@ -73,7 +73,7 @@ Link: https://lore.kernel.org/r/20211215091739.135042-4-maxime@cerno.tech
/* Writes out a full display list for an active plane to the plane's
* private dlist state.
*/
-@@ -1017,9 +1062,20 @@ static int vc4_plane_mode_set(struct drm
+@@ -1013,9 +1058,20 @@ static int vc4_plane_mode_set(struct drm
/* Colorspace conversion words */
if (vc4_state->is_yuv) {
@@ -97,7 +97,7 @@ Link: https://lore.kernel.org/r/20211215091739.135042-4-maxime@cerno.tech
}
vc4_state->lbm_offset = 0;
-@@ -1448,6 +1504,15 @@ struct drm_plane *vc4_plane_init(struct
+@@ -1444,6 +1500,15 @@ struct drm_plane *vc4_plane_init(struct
DRM_MODE_REFLECT_X |
DRM_MODE_REFLECT_Y);
diff --git a/target/linux/bcm27xx/patches-5.15/950-0424-drm-vc4-Add-FKMS-as-an-acceptable-node-for-dma-range.patch b/target/linux/bcm27xx/patches-5.15/950-0424-drm-vc4-Add-FKMS-as-an-acceptable-node-for-dma-range.patch
index 4b21e38fbb..55bd57a5d6 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0424-drm-vc4-Add-FKMS-as-an-acceptable-node-for-dma-range.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0424-drm-vc4-Add-FKMS-as-an-acceptable-node-for-dma-range.patch
@@ -17,7 +17,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
--- a/drivers/gpu/drm/vc4/vc4_drv.c
+++ b/drivers/gpu/drm/vc4/vc4_drv.c
-@@ -218,6 +218,7 @@ static void vc4_match_add_drivers(struct
+@@ -227,6 +227,7 @@ static const struct of_device_id vc4_dma
const struct of_device_id vc4_dma_range_matches[] = {
{ .compatible = "brcm,bcm2835-hvs" },
diff --git a/target/linux/bcm27xx/patches-5.15/950-0425-drm-vc4-A-present-but-empty-dmas-disables-audio.patch b/target/linux/bcm27xx/patches-5.15/950-0425-drm-vc4-A-present-but-empty-dmas-disables-audio.patch
deleted file mode 100644
index 261035d4b4..0000000000
--- a/target/linux/bcm27xx/patches-5.15/950-0425-drm-vc4-A-present-but-empty-dmas-disables-audio.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From 96ddf993aa82e33e910110929816b6c83720dc99 Mon Sep 17 00:00:00 2001
-From: Phil Elwell <phil@raspberrypi.org>
-Date: Wed, 31 Jul 2019 17:36:34 +0100
-Subject: [PATCH] drm/vc4: A present but empty dmas disables audio
-
-Overlays are unable to remove properties in the base DTB, but they
-can overwrite them. Allow a present but empty 'dmas' property
-to also disable the HDMI audio interface.
-
-See: https://github.com/raspberrypi/linux/issues/2489
-
-Signed-off-by: Phil Elwell <phil@raspberrypi.org>
----
- drivers/gpu/drm/vc4/vc4_hdmi.c | 6 ++++--
- 1 file changed, 4 insertions(+), 2 deletions(-)
-
---- a/drivers/gpu/drm/vc4/vc4_hdmi.c
-+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
-@@ -1693,10 +1693,12 @@ static int vc4_hdmi_audio_init(struct vc
- const __be32 *addr;
- int index;
- int ret;
-+ int len;
-
-- if (!of_find_property(dev->of_node, "dmas", NULL)) {
-+ if (!of_find_property(dev->of_node, "dmas", &len) ||
-+ len == 0) {
- dev_warn(dev,
-- "'dmas' DT property is missing, no HDMI audio\n");
-+ "'dmas' DT property is missing or empty, no HDMI audio\n");
- return 0;
- }
-
diff --git a/target/linux/bcm27xx/patches-5.15/950-0427-drm-vc4-Add-all-the-HDMI-registers-into-the-debugfs-.patch b/target/linux/bcm27xx/patches-5.15/950-0427-drm-vc4-Add-all-the-HDMI-registers-into-the-debugfs-.patch
index fdc2139c5e..d7f4c40034 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0427-drm-vc4-Add-all-the-HDMI-registers-into-the-debugfs-.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0427-drm-vc4-Add-all-the-HDMI-registers-into-the-debugfs-.patch
@@ -16,7 +16,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
-@@ -113,6 +113,12 @@ static int vc4_hdmi_debugfs_regs(struct
+@@ -116,6 +116,12 @@ static int vc4_hdmi_debugfs_regs(struct
drm_print_regset32(&p, &vc4_hdmi->hdmi_regset);
drm_print_regset32(&p, &vc4_hdmi->hd_regset);
@@ -29,7 +29,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
return 0;
}
-@@ -2362,6 +2368,7 @@ static int vc5_hdmi_init_resources(struc
+@@ -2368,6 +2374,7 @@ static int vc5_hdmi_init_resources(struc
struct platform_device *pdev = vc4_hdmi->pdev;
struct device *dev = &pdev->dev;
struct resource *res;
@@ -37,7 +37,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "hdmi");
if (!res)
-@@ -2458,6 +2465,38 @@ static int vc5_hdmi_init_resources(struc
+@@ -2464,6 +2471,38 @@ static int vc5_hdmi_init_resources(struc
return PTR_ERR(vc4_hdmi->reset);
}
diff --git a/target/linux/bcm27xx/patches-5.15/950-0428-drm-vc4-Add-the-2711-HVS-as-a-suitable-DMA-node.patch b/target/linux/bcm27xx/patches-5.15/950-0428-drm-vc4-Add-the-2711-HVS-as-a-suitable-DMA-node.patch
index 56d39f79fc..143fef749a 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0428-drm-vc4-Add-the-2711-HVS-as-a-suitable-DMA-node.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0428-drm-vc4-Add-the-2711-HVS-as-a-suitable-DMA-node.patch
@@ -14,7 +14,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
--- a/drivers/gpu/drm/vc4/vc4_drv.c
+++ b/drivers/gpu/drm/vc4/vc4_drv.c
-@@ -218,6 +218,7 @@ static void vc4_match_add_drivers(struct
+@@ -227,6 +227,7 @@ static const struct of_device_id vc4_dma
const struct of_device_id vc4_dma_range_matches[] = {
{ .compatible = "brcm,bcm2835-hvs" },
diff --git a/target/linux/bcm27xx/patches-5.15/950-0429-vc4_hdmi-Report-that-3d-stereo-is-allowed.patch b/target/linux/bcm27xx/patches-5.15/950-0429-vc4_hdmi-Report-that-3d-stereo-is-allowed.patch
index b823897c64..a2b71b68c1 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0429-vc4_hdmi-Report-that-3d-stereo-is-allowed.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0429-vc4_hdmi-Report-that-3d-stereo-is-allowed.patch
@@ -10,7 +10,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
-@@ -399,6 +399,7 @@ static int vc4_hdmi_connector_init(struc
+@@ -402,6 +402,7 @@ static int vc4_hdmi_connector_init(struc
connector->interlace_allowed = 1;
connector->doublescan_allowed = 0;
diff --git a/target/linux/bcm27xx/patches-5.15/950-0430-vc4-Clear-unused-infoframe-packet-RAM-registers.patch b/target/linux/bcm27xx/patches-5.15/950-0430-vc4-Clear-unused-infoframe-packet-RAM-registers.patch
index ac08e34af3..cb5f273fc2 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0430-vc4-Clear-unused-infoframe-packet-RAM-registers.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0430-vc4-Clear-unused-infoframe-packet-RAM-registers.patch
@@ -16,7 +16,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
-@@ -437,9 +437,11 @@ static void vc4_hdmi_write_infoframe(str
+@@ -440,9 +440,11 @@ static void vc4_hdmi_write_infoframe(str
const struct vc4_hdmi_register *ram_packet_start =
&vc4_hdmi->variant->registers[HDMI_RAM_PACKET_START];
u32 packet_reg = ram_packet_start->offset + VC4_HDMI_PACKET_STRIDE * packet_id;
@@ -29,7 +29,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
unsigned long flags;
ssize_t len, i;
int ret;
-@@ -475,6 +477,13 @@ static void vc4_hdmi_write_infoframe(str
+@@ -478,6 +480,13 @@ static void vc4_hdmi_write_infoframe(str
packet_reg += 4;
}
diff --git a/target/linux/bcm27xx/patches-5.15/950-0432-vc4-drm-Avoid-full-hdmi-audio-fifo-writes.patch b/target/linux/bcm27xx/patches-5.15/950-0432-vc4-drm-Avoid-full-hdmi-audio-fifo-writes.patch
deleted file mode 100644
index 4c0e8c2d6c..0000000000
--- a/target/linux/bcm27xx/patches-5.15/950-0432-vc4-drm-Avoid-full-hdmi-audio-fifo-writes.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From bf7f969a35078e4a26ca2beb562593bcbf636afa Mon Sep 17 00:00:00 2001
-From: Dom Cobley <popcornmix@gmail.com>
-Date: Sun, 24 Jan 2021 15:44:10 +0000
-Subject: [PATCH] vc4/drm: Avoid full hdmi audio fifo writes
-
-We are getting occasional VC4_HD_MAI_CTL_ERRORF in
-HDMI_MAI_CTL which seem to correspond with audio dropouts.
-
-Reduce the threshold where we deassert DREQ to avoid the fifo overfilling
-
-Signed-off-by: Dom Cobley <popcornmix@gmail.com>
----
- drivers/gpu/drm/vc4/vc4_hdmi.c | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
---- a/drivers/gpu/drm/vc4/vc4_hdmi.c
-+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
-@@ -1613,10 +1613,10 @@ static int vc4_hdmi_audio_prepare(struct
-
- /* Set the MAI threshold */
- HDMI_WRITE(HDMI_MAI_THR,
-- VC4_SET_FIELD(0x10, VC4_HD_MAI_THR_PANICHIGH) |
-- VC4_SET_FIELD(0x10, VC4_HD_MAI_THR_PANICLOW) |
-- VC4_SET_FIELD(0x10, VC4_HD_MAI_THR_DREQHIGH) |
-- VC4_SET_FIELD(0x10, VC4_HD_MAI_THR_DREQLOW));
-+ VC4_SET_FIELD(0x08, VC4_HD_MAI_THR_PANICHIGH) |
-+ VC4_SET_FIELD(0x08, VC4_HD_MAI_THR_PANICLOW) |
-+ VC4_SET_FIELD(0x06, VC4_HD_MAI_THR_DREQHIGH) |
-+ VC4_SET_FIELD(0x08, VC4_HD_MAI_THR_DREQLOW));
-
- HDMI_WRITE(HDMI_MAI_CONFIG,
- VC4_HDMI_MAI_CONFIG_BIT_REVERSE |
diff --git a/target/linux/bcm27xx/patches-5.15/950-0433-vc4-drm-vc4_plane-Remove-subpixel-positioning-check.patch b/target/linux/bcm27xx/patches-5.15/950-0433-vc4-drm-vc4_plane-Remove-subpixel-positioning-check.patch
deleted file mode 100644
index 0e9f37f8a9..0000000000
--- a/target/linux/bcm27xx/patches-5.15/950-0433-vc4-drm-vc4_plane-Remove-subpixel-positioning-check.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-From 4b3401ec801e12a8ce5b20fa0410c60dfc792660 Mon Sep 17 00:00:00 2001
-From: Dom Cobley <popcornmix@gmail.com>
-Date: Mon, 15 Mar 2021 13:28:06 +0000
-Subject: [PATCH] vc4/drm: vc4_plane: Remove subpixel positioning check
-
-There is little harm in ignoring fractional coordinates
-(they just get truncated).
-
-Without this:
-modetest -M vc4 -F tiles,gradient -s 32:1920x1080-60 -P89@74:1920x1080*.1.1@XR24
-
-is rejected. We have the same issue in Kodi when trying to
-use zoom options on video.
-
-Note: even if all coordinates are fully integer. e.g.
-src:[0,0,1920,1080] dest:[-10,-10,1940,1100]
-
-it will still get rejected as drm_atomic_helper_check_plane_state
-uses drm_rect_clip_scaled which transforms this to fractional src coords
-
-Signed-off-by: Dom Cobley <popcornmix@gmail.com>
----
- drivers/gpu/drm/vc4/vc4_plane.c | 21 ++++++++-------------
- 1 file changed, 8 insertions(+), 13 deletions(-)
-
---- a/drivers/gpu/drm/vc4/vc4_plane.c
-+++ b/drivers/gpu/drm/vc4/vc4_plane.c
-@@ -339,7 +339,6 @@ static int vc4_plane_setup_clipping_and_
- struct vc4_plane_state *vc4_state = to_vc4_plane_state(state);
- struct drm_framebuffer *fb = state->fb;
- struct drm_gem_cma_object *bo = drm_fb_cma_get_gem_obj(fb, 0);
-- u32 subpixel_src_mask = (1 << 16) - 1;
- int num_planes = fb->format->num_planes;
- struct drm_crtc_state *crtc_state;
- u32 h_subsample = fb->format->hsub;
-@@ -361,18 +360,14 @@ static int vc4_plane_setup_clipping_and_
- for (i = 0; i < num_planes; i++)
- vc4_state->offsets[i] = bo->paddr + fb->offsets[i];
-
-- /* We don't support subpixel source positioning for scaling. */
-- if ((state->src.x1 & subpixel_src_mask) ||
-- (state->src.x2 & subpixel_src_mask) ||
-- (state->src.y1 & subpixel_src_mask) ||
-- (state->src.y2 & subpixel_src_mask)) {
-- return -EINVAL;
-- }
--
-- vc4_state->src_x = state->src.x1 >> 16;
-- vc4_state->src_y = state->src.y1 >> 16;
-- vc4_state->src_w[0] = (state->src.x2 - state->src.x1) >> 16;
-- vc4_state->src_h[0] = (state->src.y2 - state->src.y1) >> 16;
-+ /* We don't support subpixel source positioning for scaling,
-+ * but fractional coordinates can be generated by clipping
-+ * so just round for now
-+ */
-+ vc4_state->src_x = DIV_ROUND_CLOSEST(state->src.x1, 1<<16);
-+ vc4_state->src_y = DIV_ROUND_CLOSEST(state->src.y1, 1<<16);
-+ vc4_state->src_w[0] = DIV_ROUND_CLOSEST(state->src.x2, 1<<16) - vc4_state->src_x;
-+ vc4_state->src_h[0] = DIV_ROUND_CLOSEST(state->src.y2, 1<<16) - vc4_state->src_y;
-
- vc4_state->crtc_x = state->dst.x1;
- vc4_state->crtc_y = state->dst.y1;
diff --git a/target/linux/bcm27xx/patches-5.15/950-0435-drm-vc4-Correct-pixel-order-for-DSI0.patch b/target/linux/bcm27xx/patches-5.15/950-0435-drm-vc4-Correct-pixel-order-for-DSI0.patch
deleted file mode 100644
index d67015a9eb..0000000000
--- a/target/linux/bcm27xx/patches-5.15/950-0435-drm-vc4-Correct-pixel-order-for-DSI0.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 9c30e99003913737a6c897b9aa72d87cb82c58cb Mon Sep 17 00:00:00 2001
-From: Dave Stevenson <dave.stevenson@raspberrypi.com>
-Date: Thu, 11 Feb 2021 18:37:04 +0000
-Subject: [PATCH] drm/vc4: Correct pixel order for DSI0
-
-For slightly unknown reasons, dsi0 takes a different pixel format
-to dsi1, and that has to be set in the pixel valve.
-
-Amend the setup accordingly.
-
-Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
----
- drivers/gpu/drm/vc4/vc4_crtc.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
---- a/drivers/gpu/drm/vc4/vc4_crtc.c
-+++ b/drivers/gpu/drm/vc4/vc4_crtc.c
-@@ -317,7 +317,8 @@ static void vc4_crtc_config_pv(struct dr
- u32 pixel_rep = (mode->flags & DRM_MODE_FLAG_DBLCLK) ? 2 : 1;
- bool is_dsi = (vc4_encoder->type == VC4_ENCODER_TYPE_DSI0 ||
- vc4_encoder->type == VC4_ENCODER_TYPE_DSI1);
-- u32 format = is_dsi ? PV_CONTROL_FORMAT_DSIV_24 : PV_CONTROL_FORMAT_24;
-+ bool is_dsi1 = vc4_encoder->type == VC4_ENCODER_TYPE_DSI1;
-+ u32 format = is_dsi1 ? PV_CONTROL_FORMAT_DSIV_24 : PV_CONTROL_FORMAT_24;
- u8 ppc = pv_data->pixels_per_clock;
- bool debug_dump_regs = false;
-
diff --git a/target/linux/bcm27xx/patches-5.15/950-0436-drm-vc4-Register-dsi0-as-the-correct-vc4-encoder-typ.patch b/target/linux/bcm27xx/patches-5.15/950-0436-drm-vc4-Register-dsi0-as-the-correct-vc4-encoder-typ.patch
deleted file mode 100644
index 19de905f4c..0000000000
--- a/target/linux/bcm27xx/patches-5.15/950-0436-drm-vc4-Register-dsi0-as-the-correct-vc4-encoder-typ.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From 9c1e7822d347b766bf3392c8b37fe5004e1bbaaf Mon Sep 17 00:00:00 2001
-From: Dave Stevenson <dave.stevenson@raspberrypi.com>
-Date: Mon, 8 Feb 2021 11:22:01 +0000
-Subject: [PATCH] drm/vc4: Register dsi0 as the correct vc4 encoder
- type
-
-vc4_dsi was registering both dsi0 and dsi1 as VC4_ENCODER_TYPE_DSI1
-which seemed to work OK for a single DSI display, but fails
-if there are two DSI displays connected.
-
-Update to register the correct type.
-
-Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
----
- drivers/gpu/drm/vc4/vc4_dsi.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
---- a/drivers/gpu/drm/vc4/vc4_dsi.c
-+++ b/drivers/gpu/drm/vc4/vc4_dsi.c
-@@ -1510,7 +1510,8 @@ static int vc4_dsi_bind(struct device *d
- return -ENOMEM;
-
- INIT_LIST_HEAD(&dsi->bridge_chain);
-- vc4_dsi_encoder->base.type = VC4_ENCODER_TYPE_DSI1;
-+ vc4_dsi_encoder->base.type = dsi->variant->port ?
-+ VC4_ENCODER_TYPE_DSI1 : VC4_ENCODER_TYPE_DSI0;
- vc4_dsi_encoder->dsi = dsi;
- dsi->encoder = &vc4_dsi_encoder->base.base;
-
diff --git a/target/linux/bcm27xx/patches-5.15/950-0437-drm-vc4-Fix-dsi0-interrupt-support.patch b/target/linux/bcm27xx/patches-5.15/950-0437-drm-vc4-Fix-dsi0-interrupt-support.patch
deleted file mode 100644
index c3086bc1ce..0000000000
--- a/target/linux/bcm27xx/patches-5.15/950-0437-drm-vc4-Fix-dsi0-interrupt-support.patch
+++ /dev/null
@@ -1,188 +0,0 @@
-From 8f32ff08609bb5e7fd4fb38fe7518891e0e22f45 Mon Sep 17 00:00:00 2001
-From: Dave Stevenson <dave.stevenson@raspberrypi.com>
-Date: Wed, 10 Feb 2021 18:46:22 +0000
-Subject: [PATCH] drm/vc4: Fix dsi0 interrupt support.
-
-DSI0 seemingly had very little or no testing as a load of
-the register mappings were incorrect/missing, so host
-transfers always timed out due to enabling/checking incorrect
-bits in the interrupt enable and status registers.
-
-Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
----
- drivers/gpu/drm/vc4/vc4_dsi.c | 111 ++++++++++++++++++++++++++--------
- 1 file changed, 85 insertions(+), 26 deletions(-)
-
---- a/drivers/gpu/drm/vc4/vc4_dsi.c
-+++ b/drivers/gpu/drm/vc4/vc4_dsi.c
-@@ -181,8 +181,50 @@
-
- #define DSI0_TXPKT_PIX_FIFO 0x20 /* AKA PIX_FIFO */
-
--#define DSI0_INT_STAT 0x24
--#define DSI0_INT_EN 0x28
-+#define DSI0_INT_STAT 0x24
-+#define DSI0_INT_EN 0x28
-+# define DSI0_INT_FIFO_ERR BIT(25)
-+# define DSI0_INT_CMDC_DONE_MASK VC4_MASK(24, 23)
-+# define DSI0_INT_CMDC_DONE_SHIFT 23
-+# define DSI0_INT_CMDC_DONE_NO_REPEAT 1
-+# define DSI0_INT_CMDC_DONE_REPEAT 3
-+# define DSI0_INT_PHY_DIR_RTF BIT(22)
-+# define DSI0_INT_PHY_D1_ULPS BIT(21)
-+# define DSI0_INT_PHY_D1_STOP BIT(20)
-+# define DSI0_INT_PHY_RXLPDT BIT(19)
-+# define DSI0_INT_PHY_RXTRIG BIT(18)
-+# define DSI0_INT_PHY_D0_ULPS BIT(17)
-+# define DSI0_INT_PHY_D0_LPDT BIT(16)
-+# define DSI0_INT_PHY_D0_FTR BIT(15)
-+# define DSI0_INT_PHY_D0_STOP BIT(14)
-+/* Signaled when the clock lane enters the given state. */
-+# define DSI0_INT_PHY_CLK_ULPS BIT(13)
-+# define DSI0_INT_PHY_CLK_HS BIT(12)
-+# define DSI0_INT_PHY_CLK_FTR BIT(11)
-+/* Signaled on timeouts */
-+# define DSI0_INT_PR_TO BIT(10)
-+# define DSI0_INT_TA_TO BIT(9)
-+# define DSI0_INT_LPRX_TO BIT(8)
-+# define DSI0_INT_HSTX_TO BIT(7)
-+/* Contention on a line when trying to drive the line low */
-+# define DSI0_INT_ERR_CONT_LP1 BIT(6)
-+# define DSI0_INT_ERR_CONT_LP0 BIT(5)
-+/* Control error: incorrect line state sequence on data lane 0. */
-+# define DSI0_INT_ERR_CONTROL BIT(4)
-+# define DSI0_INT_ERR_SYNC_ESC BIT(3)
-+# define DSI0_INT_RX2_PKT BIT(2)
-+# define DSI0_INT_RX1_PKT BIT(1)
-+# define DSI0_INT_CMD_PKT BIT(0)
-+
-+#define DSI0_INTERRUPTS_ALWAYS_ENABLED (DSI0_INT_ERR_SYNC_ESC | \
-+ DSI0_INT_ERR_CONTROL | \
-+ DSI0_INT_ERR_CONT_LP0 | \
-+ DSI0_INT_ERR_CONT_LP1 | \
-+ DSI0_INT_HSTX_TO | \
-+ DSI0_INT_LPRX_TO | \
-+ DSI0_INT_TA_TO | \
-+ DSI0_INT_PR_TO)
-+
- # define DSI1_INT_PHY_D3_ULPS BIT(30)
- # define DSI1_INT_PHY_D3_STOP BIT(29)
- # define DSI1_INT_PHY_D2_ULPS BIT(28)
-@@ -894,6 +936,9 @@ static void vc4_dsi_encoder_enable(struc
-
- DSI_PORT_WRITE(PHY_AFEC0, afec0);
-
-+ /* AFEC reset hold time */
-+ mdelay(1);
-+
- DSI_PORT_WRITE(PHY_AFEC1,
- VC4_SET_FIELD(6, DSI0_PHY_AFEC1_IDR_DLANE1) |
- VC4_SET_FIELD(6, DSI0_PHY_AFEC1_IDR_DLANE0) |
-@@ -1060,12 +1105,9 @@ static void vc4_dsi_encoder_enable(struc
- DSI_PORT_WRITE(CTRL, DSI_PORT_READ(CTRL) | DSI1_CTRL_EN);
-
- /* Bring AFE out of reset. */
-- if (dsi->variant->port == 0) {
-- } else {
-- DSI_PORT_WRITE(PHY_AFEC0,
-- DSI_PORT_READ(PHY_AFEC0) &
-- ~DSI1_PHY_AFEC0_RESET);
-- }
-+ DSI_PORT_WRITE(PHY_AFEC0,
-+ DSI_PORT_READ(PHY_AFEC0) &
-+ ~DSI_PORT_BIT(PHY_AFEC0_RESET));
-
- vc4_dsi_ulps(dsi, false);
-
-@@ -1184,13 +1226,28 @@ static ssize_t vc4_dsi_host_transfer(str
- /* Enable the appropriate interrupt for the transfer completion. */
- dsi->xfer_result = 0;
- reinit_completion(&dsi->xfer_completion);
-- DSI_PORT_WRITE(INT_STAT, DSI1_INT_TXPKT1_DONE | DSI1_INT_PHY_DIR_RTF);
-- if (msg->rx_len) {
-- DSI_PORT_WRITE(INT_EN, (DSI1_INTERRUPTS_ALWAYS_ENABLED |
-- DSI1_INT_PHY_DIR_RTF));
-+ if (dsi->variant->port == 0) {
-+ DSI_PORT_WRITE(INT_STAT,
-+ DSI0_INT_CMDC_DONE_MASK | DSI1_INT_PHY_DIR_RTF);
-+ if (msg->rx_len) {
-+ DSI_PORT_WRITE(INT_EN, (DSI0_INTERRUPTS_ALWAYS_ENABLED |
-+ DSI0_INT_PHY_DIR_RTF));
-+ } else {
-+ DSI_PORT_WRITE(INT_EN,
-+ (DSI0_INTERRUPTS_ALWAYS_ENABLED |
-+ VC4_SET_FIELD(DSI0_INT_CMDC_DONE_NO_REPEAT,
-+ DSI0_INT_CMDC_DONE)));
-+ }
- } else {
-- DSI_PORT_WRITE(INT_EN, (DSI1_INTERRUPTS_ALWAYS_ENABLED |
-- DSI1_INT_TXPKT1_DONE));
-+ DSI_PORT_WRITE(INT_STAT,
-+ DSI1_INT_TXPKT1_DONE | DSI1_INT_PHY_DIR_RTF);
-+ if (msg->rx_len) {
-+ DSI_PORT_WRITE(INT_EN, (DSI1_INTERRUPTS_ALWAYS_ENABLED |
-+ DSI1_INT_PHY_DIR_RTF));
-+ } else {
-+ DSI_PORT_WRITE(INT_EN, (DSI1_INTERRUPTS_ALWAYS_ENABLED |
-+ DSI1_INT_TXPKT1_DONE));
-+ }
- }
-
- /* Send the packet. */
-@@ -1207,7 +1264,7 @@ static ssize_t vc4_dsi_host_transfer(str
- ret = dsi->xfer_result;
- }
-
-- DSI_PORT_WRITE(INT_EN, DSI1_INTERRUPTS_ALWAYS_ENABLED);
-+ DSI_PORT_WRITE(INT_EN, DSI_PORT_BIT(INTERRUPTS_ALWAYS_ENABLED));
-
- if (ret)
- goto reset_fifo_and_return;
-@@ -1253,7 +1310,7 @@ reset_fifo_and_return:
- DSI_PORT_BIT(CTRL_RESET_FIFOS));
-
- DSI_PORT_WRITE(TXPKT1C, 0);
-- DSI_PORT_WRITE(INT_EN, DSI1_INTERRUPTS_ALWAYS_ENABLED);
-+ DSI_PORT_WRITE(INT_EN, DSI_PORT_BIT(INTERRUPTS_ALWAYS_ENABLED));
- return ret;
- }
-
-@@ -1390,26 +1447,28 @@ static irqreturn_t vc4_dsi_irq_handler(i
- DSI_PORT_WRITE(INT_STAT, stat);
-
- dsi_handle_error(dsi, &ret, stat,
-- DSI1_INT_ERR_SYNC_ESC, "LPDT sync");
-+ DSI_PORT_BIT(INT_ERR_SYNC_ESC), "LPDT sync");
- dsi_handle_error(dsi, &ret, stat,
-- DSI1_INT_ERR_CONTROL, "data lane 0 sequence");
-+ DSI_PORT_BIT(INT_ERR_CONTROL), "data lane 0 sequence");
- dsi_handle_error(dsi, &ret, stat,
-- DSI1_INT_ERR_CONT_LP0, "LP0 contention");
-+ DSI_PORT_BIT(INT_ERR_CONT_LP0), "LP0 contention");
- dsi_handle_error(dsi, &ret, stat,
-- DSI1_INT_ERR_CONT_LP1, "LP1 contention");
-+ DSI_PORT_BIT(INT_ERR_CONT_LP1), "LP1 contention");
- dsi_handle_error(dsi, &ret, stat,
-- DSI1_INT_HSTX_TO, "HSTX timeout");
-+ DSI_PORT_BIT(INT_HSTX_TO), "HSTX timeout");
- dsi_handle_error(dsi, &ret, stat,
-- DSI1_INT_LPRX_TO, "LPRX timeout");
-+ DSI_PORT_BIT(INT_LPRX_TO), "LPRX timeout");
- dsi_handle_error(dsi, &ret, stat,
-- DSI1_INT_TA_TO, "turnaround timeout");
-+ DSI_PORT_BIT(INT_TA_TO), "turnaround timeout");
- dsi_handle_error(dsi, &ret, stat,
-- DSI1_INT_PR_TO, "peripheral reset timeout");
-+ DSI_PORT_BIT(INT_PR_TO), "peripheral reset timeout");
-
-- if (stat & (DSI1_INT_TXPKT1_DONE | DSI1_INT_PHY_DIR_RTF)) {
-+ if (stat & ((dsi->variant->port ? DSI1_INT_TXPKT1_DONE :
-+ DSI0_INT_CMDC_DONE_MASK) |
-+ DSI_PORT_BIT(INT_PHY_DIR_RTF))) {
- complete(&dsi->xfer_completion);
- ret = IRQ_HANDLED;
-- } else if (stat & DSI1_INT_HSTX_TO) {
-+ } else if (stat & DSI_PORT_BIT(INT_HSTX_TO)) {
- complete(&dsi->xfer_completion);
- dsi->xfer_result = -ETIMEDOUT;
- ret = IRQ_HANDLED;
diff --git a/target/linux/bcm27xx/patches-5.15/950-0438-drm-vc4-Add-correct-stop-condition-to-vc4_dsi_encode.patch b/target/linux/bcm27xx/patches-5.15/950-0438-drm-vc4-Add-correct-stop-condition-to-vc4_dsi_encode.patch
deleted file mode 100644
index c7cdcacb88..0000000000
--- a/target/linux/bcm27xx/patches-5.15/950-0438-drm-vc4-Add-correct-stop-condition-to-vc4_dsi_encode.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From d58e0cb66d35de123f2219f4609f733e7a11a45d Mon Sep 17 00:00:00 2001
-From: Dave Stevenson <dave.stevenson@raspberrypi.com>
-Date: Thu, 15 Apr 2021 16:18:16 +0100
-Subject: [PATCH] drm/vc4: Add correct stop condition to
- vc4_dsi_encoder_disable iteration
-
-vc4_dsi_encoder_disable is partially an open coded version of
-drm_bridge_chain_disable, but it missed a termination condition
-in the loop for ->disable which meant that no post_disable
-calls were made.
-
-Add in the termination clause.
-
-Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
----
- drivers/gpu/drm/vc4/vc4_dsi.c | 3 +++
- 1 file changed, 3 insertions(+)
-
---- a/drivers/gpu/drm/vc4/vc4_dsi.c
-+++ b/drivers/gpu/drm/vc4/vc4_dsi.c
-@@ -803,6 +803,9 @@ static void vc4_dsi_encoder_disable(stru
- list_for_each_entry_reverse(iter, &dsi->bridge_chain, chain_node) {
- if (iter->funcs->disable)
- iter->funcs->disable(iter);
-+
-+ if (iter == dsi->bridge)
-+ break;
- }
-
- vc4_dsi_ulps(dsi, true);
diff --git a/target/linux/bcm27xx/patches-5.15/950-0442-drm-vc4-hdmi-Simplify-the-connector-state-retrieval.patch b/target/linux/bcm27xx/patches-5.15/950-0442-drm-vc4-hdmi-Simplify-the-connector-state-retrieval.patch
index 93b8a3971a..aa7f0b5ae5 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0442-drm-vc4-hdmi-Simplify-the-connector-state-retrieval.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0442-drm-vc4-hdmi-Simplify-the-connector-state-retrieval.patch
@@ -15,7 +15,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
-@@ -1003,30 +1003,15 @@ static void vc4_hdmi_recenter_fifo(struc
+@@ -1011,30 +1011,15 @@ static void vc4_hdmi_recenter_fifo(struc
"VC4_HDMI_FIFO_CTL_RECENTER_DONE");
}
diff --git a/target/linux/bcm27xx/patches-5.15/950-0443-drm-vc4-Fix-timings-for-interlaced-modes.patch b/target/linux/bcm27xx/patches-5.15/950-0443-drm-vc4-Fix-timings-for-interlaced-modes.patch
deleted file mode 100644
index a6d88d1ec1..0000000000
--- a/target/linux/bcm27xx/patches-5.15/950-0443-drm-vc4-Fix-timings-for-interlaced-modes.patch
+++ /dev/null
@@ -1,83 +0,0 @@
-From 66caecfcf414d8e5153a0725195413db3c992dae Mon Sep 17 00:00:00 2001
-From: kFYatek <4499762+kFYatek@users.noreply.github.com>
-Date: Wed, 23 Jun 2021 01:11:26 +0200
-Subject: [PATCH] drm/vc4: Fix timings for interlaced modes
-
-Increase the number of post-sync blanking lines on odd fields instead of
-decreasing it on even fields. This makes the total number of lines
-properly match the modelines.
-
-Additionally fix the value of PV_VCONTROL_ODD_DELAY, which did not take
-pixels_per_clock into account, causing some displays to invert the
-fields when driven by bcm2711.
-
-Signed-off-by: Mateusz Kwiatkowski <kfyatek+publicgit@gmail.com>
----
- drivers/gpu/drm/vc4/vc4_crtc.c | 7 ++++---
- drivers/gpu/drm/vc4/vc4_hdmi.c | 12 ++++++------
- 2 files changed, 10 insertions(+), 9 deletions(-)
-
---- a/drivers/gpu/drm/vc4/vc4_crtc.c
-+++ b/drivers/gpu/drm/vc4/vc4_crtc.c
-@@ -344,7 +344,8 @@ static void vc4_crtc_config_pv(struct dr
- PV_HORZB_HACTIVE));
-
- CRTC_WRITE(PV_VERTA,
-- VC4_SET_FIELD(mode->crtc_vtotal - mode->crtc_vsync_end,
-+ VC4_SET_FIELD(mode->crtc_vtotal - mode->crtc_vsync_end +
-+ interlace,
- PV_VERTA_VBP) |
- VC4_SET_FIELD(mode->crtc_vsync_end - mode->crtc_vsync_start,
- PV_VERTA_VSYNC));
-@@ -356,7 +357,7 @@ static void vc4_crtc_config_pv(struct dr
- if (interlace) {
- CRTC_WRITE(PV_VERTA_EVEN,
- VC4_SET_FIELD(mode->crtc_vtotal -
-- mode->crtc_vsync_end - 1,
-+ mode->crtc_vsync_end,
- PV_VERTA_VBP) |
- VC4_SET_FIELD(mode->crtc_vsync_end -
- mode->crtc_vsync_start,
-@@ -376,7 +377,7 @@ static void vc4_crtc_config_pv(struct dr
- PV_VCONTROL_CONTINUOUS |
- (is_dsi ? PV_VCONTROL_DSI : 0) |
- PV_VCONTROL_INTERLACE |
-- VC4_SET_FIELD(mode->htotal * pixel_rep / 2,
-+ VC4_SET_FIELD(mode->htotal * pixel_rep / (2 * ppc),
- PV_VCONTROL_ODD_DELAY));
- CRTC_WRITE(PV_VSYNCD_EVEN, 0);
- } else {
---- a/drivers/gpu/drm/vc4/vc4_hdmi.c
-+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
-@@ -841,12 +841,12 @@ static void vc4_hdmi_set_timings(struct
- VC4_HDMI_VERTA_VFP) |
- VC4_SET_FIELD(mode->crtc_vdisplay, VC4_HDMI_VERTA_VAL));
- u32 vertb = (VC4_SET_FIELD(0, VC4_HDMI_VERTB_VSPO) |
-- VC4_SET_FIELD(mode->crtc_vtotal - mode->crtc_vsync_end,
-+ VC4_SET_FIELD(mode->crtc_vtotal - mode->crtc_vsync_end +
-+ interlaced,
- VC4_HDMI_VERTB_VBP));
- u32 vertb_even = (VC4_SET_FIELD(0, VC4_HDMI_VERTB_VSPO) |
- VC4_SET_FIELD(mode->crtc_vtotal -
-- mode->crtc_vsync_end -
-- interlaced,
-+ mode->crtc_vsync_end,
- VC4_HDMI_VERTB_VBP));
- unsigned long flags;
-
-@@ -892,12 +892,12 @@ static void vc5_hdmi_set_timings(struct
- VC5_HDMI_VERTA_VFP) |
- VC4_SET_FIELD(mode->crtc_vdisplay, VC5_HDMI_VERTA_VAL));
- u32 vertb = (VC4_SET_FIELD(0, VC5_HDMI_VERTB_VSPO) |
-- VC4_SET_FIELD(mode->crtc_vtotal - mode->crtc_vsync_end,
-+ VC4_SET_FIELD(mode->crtc_vtotal - mode->crtc_vsync_end +
-+ interlaced,
- VC4_HDMI_VERTB_VBP));
- u32 vertb_even = (VC4_SET_FIELD(0, VC5_HDMI_VERTB_VSPO) |
- VC4_SET_FIELD(mode->crtc_vtotal -
-- mode->crtc_vsync_end -
-- interlaced,
-+ mode->crtc_vsync_end,
- VC4_HDMI_VERTB_VBP));
- unsigned long flags;
- unsigned char gcp;
diff --git a/target/linux/bcm27xx/patches-5.15/950-0445-drm-vc4-Fix-margin-calculations-for-the-right-bottom.patch b/target/linux/bcm27xx/patches-5.15/950-0445-drm-vc4-Fix-margin-calculations-for-the-right-bottom.patch
deleted file mode 100644
index 1ad0e39a5b..0000000000
--- a/target/linux/bcm27xx/patches-5.15/950-0445-drm-vc4-Fix-margin-calculations-for-the-right-bottom.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From 6847ea09ea00a9c56d33b4cbaf971c20a08e92f7 Mon Sep 17 00:00:00 2001
-From: Dave Stevenson <dave.stevenson@raspberrypi.com>
-Date: Mon, 12 Jul 2021 12:27:59 +0100
-Subject: [PATCH] drm/vc4: Fix margin calculations for the right/bottom
- edges
-
-The calculations clipped the right/bottom edge of the clipped
-range based on the left/top margins.
-
-Fixes: 666e73587f90 ("drm/vc4: Take margin setup into account when updating planes")
-Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
----
- drivers/gpu/drm/vc4/vc4_plane.c | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
---- a/drivers/gpu/drm/vc4/vc4_plane.c
-+++ b/drivers/gpu/drm/vc4/vc4_plane.c
-@@ -310,16 +310,16 @@ static int vc4_plane_margins_adj(struct
- adjhdisplay,
- crtc_state->mode.hdisplay);
- vc4_pstate->crtc_x += left;
-- if (vc4_pstate->crtc_x > crtc_state->mode.hdisplay - left)
-- vc4_pstate->crtc_x = crtc_state->mode.hdisplay - left;
-+ if (vc4_pstate->crtc_x > crtc_state->mode.hdisplay - right)
-+ vc4_pstate->crtc_x = crtc_state->mode.hdisplay - right;
-
- adjvdisplay = crtc_state->mode.vdisplay - (top + bottom);
- vc4_pstate->crtc_y = DIV_ROUND_CLOSEST(vc4_pstate->crtc_y *
- adjvdisplay,
- crtc_state->mode.vdisplay);
- vc4_pstate->crtc_y += top;
-- if (vc4_pstate->crtc_y > crtc_state->mode.vdisplay - top)
-- vc4_pstate->crtc_y = crtc_state->mode.vdisplay - top;
-+ if (vc4_pstate->crtc_y > crtc_state->mode.vdisplay - bottom)
-+ vc4_pstate->crtc_y = crtc_state->mode.vdisplay - bottom;
-
- vc4_pstate->crtc_w = DIV_ROUND_CLOSEST(vc4_pstate->crtc_w *
- adjhdisplay,
diff --git a/target/linux/bcm27xx/patches-5.15/950-0452-drm-vc4-Add-firmware-kms-mode.patch b/target/linux/bcm27xx/patches-5.15/950-0452-drm-vc4-Add-firmware-kms-mode.patch
index d2d7cfb4e9..ccebf974a8 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0452-drm-vc4-Add-firmware-kms-mode.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0452-drm-vc4-Add-firmware-kms-mode.patch
@@ -104,7 +104,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
minor->debugfs_root, &vc4->load_tracker_enabled);
--- a/drivers/gpu/drm/vc4/vc4_drv.c
+++ b/drivers/gpu/drm/vc4/vc4_drv.c
-@@ -226,6 +226,18 @@ const struct of_device_id vc4_dma_range_
+@@ -235,6 +235,18 @@ const struct of_device_id vc4_dma_range_
{}
};
@@ -123,7 +123,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
static int vc4_drm_bind(struct device *dev)
{
struct platform_device *pdev = to_platform_device(dev);
-@@ -289,7 +301,7 @@ static int vc4_drm_bind(struct device *d
+@@ -308,7 +320,7 @@ static int vc4_drm_bind(struct device *d
if (ret)
return ret;
@@ -132,7 +132,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
ret = rpi_firmware_property(firmware,
RPI_FIRMWARE_NOTIFY_DISPLAY_DONE,
NULL, 0);
-@@ -303,16 +315,20 @@ static int vc4_drm_bind(struct device *d
+@@ -322,16 +334,20 @@ static int vc4_drm_bind(struct device *d
if (ret)
return ret;
@@ -158,7 +158,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
ret = drm_dev_register(drm, 0);
if (ret < 0)
-@@ -359,6 +375,7 @@ static struct platform_driver *const com
+@@ -378,6 +394,7 @@ static struct platform_driver *const com
&vc4_dsi_driver,
&vc4_txp_driver,
&vc4_crtc_driver,
diff --git a/target/linux/bcm27xx/patches-5.15/950-0470-sound-usb-add-device-quirks-for-A4Tech-FHD-1080p-web.patch b/target/linux/bcm27xx/patches-5.15/950-0470-sound-usb-add-device-quirks-for-A4Tech-FHD-1080p-web.patch
index 8a3ab3e46e..7502adee5a 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0470-sound-usb-add-device-quirks-for-A4Tech-FHD-1080p-web.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0470-sound-usb-add-device-quirks-for-A4Tech-FHD-1080p-web.patch
@@ -16,7 +16,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
--- a/sound/usb/quirks.c
+++ b/sound/usb/quirks.c
-@@ -1921,6 +1921,8 @@ static const struct usb_audio_quirk_flag
+@@ -1923,6 +1923,8 @@ static const struct usb_audio_quirk_flag
QUIRK_FLAG_GENERIC_IMPLICIT_FB),
DEVICE_FLG(0x2b53, 0x0031, /* Fiero SC-01 (firmware v1.1.0) */
QUIRK_FLAG_GENERIC_IMPLICIT_FB),
diff --git a/target/linux/bcm27xx/patches-5.15/950-0475-drm-vc4-Reset-HDMI-MISC_CONTROL-register.patch b/target/linux/bcm27xx/patches-5.15/950-0475-drm-vc4-Reset-HDMI-MISC_CONTROL-register.patch
deleted file mode 100644
index 9032f11794..0000000000
--- a/target/linux/bcm27xx/patches-5.15/950-0475-drm-vc4-Reset-HDMI-MISC_CONTROL-register.patch
+++ /dev/null
@@ -1,69 +0,0 @@
-From 671b5b9af51bd5296d4fe76155b3ba75c99000b9 Mon Sep 17 00:00:00 2001
-From: Dave Stevenson <dave.stevenson@raspberrypi.com>
-Date: Mon, 13 Sep 2021 17:30:18 +0100
-Subject: [PATCH] drm/vc4: Reset HDMI MISC_CONTROL register.
-
-The HDMI block can repeat pixels for double clocked modes,
-and the firmware is now configuring the block to do this as
-the PV is doing it incorrectly when at 2pixels/clock.
-If the kernel doesn't reset it then we end up with strange
-modes.
-
-Reset MISC_CONTROL.
-
-Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
----
- drivers/gpu/drm/vc4/vc4_hdmi.c | 8 ++++++++
- drivers/gpu/drm/vc4/vc4_hdmi_regs.h | 3 +++
- 2 files changed, 11 insertions(+)
-
---- a/drivers/gpu/drm/vc4/vc4_hdmi.c
-+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
-@@ -79,6 +79,9 @@
- #define VC5_HDMI_VERTB_VSPO_SHIFT 16
- #define VC5_HDMI_VERTB_VSPO_MASK VC4_MASK(29, 16)
-
-+#define VC5_HDMI_MISC_CONTROL_PIXEL_REP_SHIFT 0
-+#define VC5_HDMI_MISC_CONTROL_PIXEL_REP_MASK VC4_MASK(3, 0)
-+
- #define VC5_HDMI_SCRAMBLER_CTL_ENABLE BIT(0)
-
- #define VC5_HDMI_DEEP_COLOR_CONFIG_1_INIT_PACK_PHASE_SHIFT 8
-@@ -963,6 +966,11 @@ static void vc5_hdmi_set_timings(struct
- reg |= gcp_en ? VC5_HDMI_GCP_CONFIG_GCP_ENABLE : 0;
- HDMI_WRITE(HDMI_GCP_CONFIG, reg);
-
-+ reg = HDMI_READ(HDMI_MISC_CONTROL);
-+ reg &= ~VC5_HDMI_MISC_CONTROL_PIXEL_REP_MASK;
-+ reg |= VC4_SET_FIELD(0, VC5_HDMI_MISC_CONTROL_PIXEL_REP);
-+ HDMI_WRITE(HDMI_MISC_CONTROL, reg);
-+
- HDMI_WRITE(HDMI_CLOCK_STOP, 0);
-
- spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
---- a/drivers/gpu/drm/vc4/vc4_hdmi_regs.h
-+++ b/drivers/gpu/drm/vc4/vc4_hdmi_regs.h
-@@ -125,6 +125,7 @@ enum vc4_hdmi_field {
- HDMI_VERTB0,
- HDMI_VERTB1,
- HDMI_VID_CTL,
-+ HDMI_MISC_CONTROL,
- };
-
- struct vc4_hdmi_register {
-@@ -235,6 +236,7 @@ static const struct vc4_hdmi_register __
- VC4_HDMI_REG(HDMI_VERTB0, 0x0f0),
- VC4_HDMI_REG(HDMI_VERTA1, 0x0f4),
- VC4_HDMI_REG(HDMI_VERTB1, 0x0f8),
-+ VC4_HDMI_REG(HDMI_MISC_CONTROL, 0x100),
- VC4_HDMI_REG(HDMI_MAI_CHANNEL_MAP, 0x09c),
- VC4_HDMI_REG(HDMI_MAI_CONFIG, 0x0a0),
- VC4_HDMI_REG(HDMI_DEEP_COLOR_CONFIG_1, 0x170),
-@@ -315,6 +317,7 @@ static const struct vc4_hdmi_register __
- VC4_HDMI_REG(HDMI_VERTB0, 0x0f0),
- VC4_HDMI_REG(HDMI_VERTA1, 0x0f4),
- VC4_HDMI_REG(HDMI_VERTB1, 0x0f8),
-+ VC4_HDMI_REG(HDMI_MISC_CONTROL, 0x100),
- VC4_HDMI_REG(HDMI_MAI_CHANNEL_MAP, 0x09c),
- VC4_HDMI_REG(HDMI_MAI_CONFIG, 0x0a0),
- VC4_HDMI_REG(HDMI_DEEP_COLOR_CONFIG_1, 0x170),
diff --git a/target/linux/bcm27xx/patches-5.15/950-0476-drm-vc4-Release-workaround-buffer-and-DMA-in-error-p.patch b/target/linux/bcm27xx/patches-5.15/950-0476-drm-vc4-Release-workaround-buffer-and-DMA-in-error-p.patch
deleted file mode 100644
index 457d3d0974..0000000000
--- a/target/linux/bcm27xx/patches-5.15/950-0476-drm-vc4-Release-workaround-buffer-and-DMA-in-error-p.patch
+++ /dev/null
@@ -1,145 +0,0 @@
-From 51f5523151d8de2b1476482e575bb5989e55ba16 Mon Sep 17 00:00:00 2001
-From: Dave Stevenson <dave.stevenson@raspberrypi.com>
-Date: Tue, 6 Jul 2021 18:53:28 +0100
-Subject: [PATCH] drm/vc4: Release workaround buffer and DMA in error
- paths and unbind
-
-On Pi0-3 the driver allocates a buffer and requests a DMA channel
-because the ARM can't write to DSI1's registers directly.
-However unbind and the error paths in bind don't release the buffer or
-the DMA channel.
-
-Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
----
- drivers/gpu/drm/vc4/vc4_dsi.c | 51 ++++++++++++++++++++++++++---------
- 1 file changed, 39 insertions(+), 12 deletions(-)
-
---- a/drivers/gpu/drm/vc4/vc4_dsi.c
-+++ b/drivers/gpu/drm/vc4/vc4_dsi.c
-@@ -1612,7 +1612,7 @@ static int vc4_dsi_bind(struct device *d
- if (ret != -EPROBE_DEFER)
- DRM_ERROR("Failed to get DMA channel: %d\n",
- ret);
-- return ret;
-+ goto err_free_dma_mem;
- }
-
- /* Get the physical address of the device's registers. The
-@@ -1641,7 +1641,7 @@ static int vc4_dsi_bind(struct device *d
- if (ret) {
- if (ret != -EPROBE_DEFER)
- dev_err(dev, "Failed to get interrupt: %d\n", ret);
-- return ret;
-+ goto err_free_dma;
- }
-
- dsi->escape_clock = devm_clk_get(dev, "escape");
-@@ -1649,7 +1649,7 @@ static int vc4_dsi_bind(struct device *d
- ret = PTR_ERR(dsi->escape_clock);
- if (ret != -EPROBE_DEFER)
- dev_err(dev, "Failed to get escape clock: %d\n", ret);
-- return ret;
-+ goto err_free_dma;
- }
-
- dsi->pll_phy_clock = devm_clk_get(dev, "phy");
-@@ -1657,7 +1657,7 @@ static int vc4_dsi_bind(struct device *d
- ret = PTR_ERR(dsi->pll_phy_clock);
- if (ret != -EPROBE_DEFER)
- dev_err(dev, "Failed to get phy clock: %d\n", ret);
-- return ret;
-+ goto err_free_dma;
- }
-
- dsi->pixel_clock = devm_clk_get(dev, "pixel");
-@@ -1665,7 +1665,7 @@ static int vc4_dsi_bind(struct device *d
- ret = PTR_ERR(dsi->pixel_clock);
- if (ret != -EPROBE_DEFER)
- dev_err(dev, "Failed to get pixel clock: %d\n", ret);
-- return ret;
-+ goto err_free_dma;
- }
-
- ret = drm_of_find_panel_or_bridge(dev->of_node, 0, 0,
-@@ -1680,33 +1680,37 @@ static int vc4_dsi_bind(struct device *d
- if (ret == -ENODEV)
- return 0;
-
-- return ret;
-+ goto err_free_dma;
- }
-
- if (panel) {
- dsi->bridge = devm_drm_panel_bridge_add_typed(dev, panel,
- DRM_MODE_CONNECTOR_DSI);
-- if (IS_ERR(dsi->bridge))
-- return PTR_ERR(dsi->bridge);
-+ if (IS_ERR(dsi->bridge)) {
-+ ret = PTR_ERR(dsi->bridge);
-+ goto err_free_dma;
-+ }
- }
-
- /* The esc clock rate is supposed to always be 100Mhz. */
- ret = clk_set_rate(dsi->escape_clock, 100 * 1000000);
- if (ret) {
- dev_err(dev, "Failed to set esc clock: %d\n", ret);
-- return ret;
-+ goto err_free_dma;
- }
-
- ret = vc4_dsi_init_phy_clocks(dsi);
- if (ret)
-- return ret;
-+ goto err_free_dma;
-
- drm_simple_encoder_init(drm, dsi->encoder, DRM_MODE_ENCODER_DSI);
- drm_encoder_helper_add(dsi->encoder, &vc4_dsi_encoder_helper_funcs);
-
- ret = drm_bridge_attach(dsi->encoder, dsi->bridge, NULL, 0);
-- if (ret)
-- return ret;
-+ if (ret) {
-+ dev_err(dev, "bridge attach failed: %d\n", ret);
-+ goto err_free_dma;
-+ }
- /* Disable the atomic helper calls into the bridge. We
- * manually call the bridge pre_enable / enable / etc. calls
- * from our driver, since we need to sequence them within the
-@@ -1719,6 +1723,19 @@ static int vc4_dsi_bind(struct device *d
- pm_runtime_enable(dev);
-
- return 0;
-+
-+err_free_dma:
-+ if (dsi->reg_dma_chan) {
-+ dma_release_channel(dsi->reg_dma_chan);
-+ dsi->reg_dma_chan = NULL;
-+ }
-+err_free_dma_mem:
-+ if (dsi->reg_dma_mem) {
-+ dma_free_coherent(dev, 4, dsi->reg_dma_mem, dsi->reg_dma_paddr);
-+ dsi->reg_dma_mem = NULL;
-+ }
-+
-+ return ret;
- }
-
- static void vc4_dsi_unbind(struct device *dev, struct device *master,
-@@ -1735,6 +1752,16 @@ static void vc4_dsi_unbind(struct device
- */
- list_splice_init(&dsi->bridge_chain, &dsi->encoder->bridge_chain);
- drm_encoder_cleanup(dsi->encoder);
-+
-+ if (dsi->reg_dma_chan) {
-+ dma_release_channel(dsi->reg_dma_chan);
-+ dsi->reg_dma_chan = NULL;
-+ }
-+
-+ if (dsi->reg_dma_mem) {
-+ dma_free_coherent(dev, 4, dsi->reg_dma_mem, dsi->reg_dma_paddr);
-+ dsi->reg_dma_mem = NULL;
-+ }
- }
-
- static const struct component_ops vc4_dsi_ops = {
diff --git a/target/linux/bcm27xx/patches-5.15/950-0477-drm-vc4-Correct-DSI-divider-calculations.patch b/target/linux/bcm27xx/patches-5.15/950-0477-drm-vc4-Correct-DSI-divider-calculations.patch
deleted file mode 100644
index af258f20d1..0000000000
--- a/target/linux/bcm27xx/patches-5.15/950-0477-drm-vc4-Correct-DSI-divider-calculations.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From 06c340cc854b1c8c275968c2830fbe8a5c3b0e4e Mon Sep 17 00:00:00 2001
-From: Dave Stevenson <dave.stevenson@raspberrypi.com>
-Date: Fri, 18 Jun 2021 21:52:28 +0100
-Subject: [PATCH] drm/vc4: Correct DSI divider calculations
-
-The divider calculations tried to find the divider
-just faster than the clock requested. However if
-it required a divider of 7 then the for loop
-aborted without handling the "error" case, and could
-end up with a clock lower than requested.
-
-Correct the loop so that we always have a clock greater
-than requested.
-
-Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
----
- drivers/gpu/drm/vc4/vc4_dsi.c | 6 ++----
- 1 file changed, 2 insertions(+), 4 deletions(-)
-
---- a/drivers/gpu/drm/vc4/vc4_dsi.c
-+++ b/drivers/gpu/drm/vc4/vc4_dsi.c
-@@ -850,11 +850,9 @@ static bool vc4_dsi_encoder_mode_fixup(s
- /* Find what divider gets us a faster clock than the requested
- * pixel clock.
- */
-- for (divider = 1; divider < 8; divider++) {
-- if (parent_rate / divider < pll_clock) {
-- divider--;
-+ for (divider = 1; divider < 7; divider++) {
-+ if (parent_rate / (divider + 1) < pll_clock)
- break;
-- }
- }
-
- /* Now that we've picked a PLL divider, calculate back to its
diff --git a/target/linux/bcm27xx/patches-5.15/950-0500-net-phy-lan87xx-Allow-more-time-for-link-detect.patch b/target/linux/bcm27xx/patches-5.15/950-0500-net-phy-lan87xx-Allow-more-time-for-link-detect.patch
index b0890c01cf..f6eb87a5f0 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0500-net-phy-lan87xx-Allow-more-time-for-link-detect.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0500-net-phy-lan87xx-Allow-more-time-for-link-detect.patch
@@ -21,7 +21,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
--- a/drivers/net/phy/smsc.c
+++ b/drivers/net/phy/smsc.c
-@@ -228,12 +228,12 @@ static int lan87xx_read_status(struct ph
+@@ -230,12 +230,12 @@ static int lan87xx_read_status(struct ph
if (rc < 0)
return rc;
diff --git a/target/linux/bcm27xx/patches-5.15/950-0572-drm-vc4-Don-t-try-disabling-SCDC-on-Pi0-3.patch b/target/linux/bcm27xx/patches-5.15/950-0572-drm-vc4-Don-t-try-disabling-SCDC-on-Pi0-3.patch
index 3bb136f3c0..e52dcd9f8b 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0572-drm-vc4-Don-t-try-disabling-SCDC-on-Pi0-3.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0572-drm-vc4-Don-t-try-disabling-SCDC-on-Pi0-3.patch
@@ -20,7 +20,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
-@@ -2558,7 +2558,8 @@ static int vc4_hdmi_bind(struct device *
+@@ -2556,7 +2556,8 @@ static int vc4_hdmi_bind(struct device *
* vc4_hdmi_disable_scrambling() will thus run at boot, make
* sure it's disabled, and avoid any inconsistency.
*/
diff --git a/target/linux/bcm27xx/patches-5.15/950-0580-drm-vc4-Ensure-vc4_hdmi-doesn-t-use-2711-HPD-registe.patch b/target/linux/bcm27xx/patches-5.15/950-0580-drm-vc4-Ensure-vc4_hdmi-doesn-t-use-2711-HPD-registe.patch
index fb4258ca79..73f7ea871a 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0580-drm-vc4-Ensure-vc4_hdmi-doesn-t-use-2711-HPD-registe.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0580-drm-vc4-Ensure-vc4_hdmi-doesn-t-use-2711-HPD-registe.patch
@@ -55,7 +55,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
/* HDMI audio codec callbacks */
static void vc4_hdmi_audio_set_mai_clock(struct vc4_hdmi *vc4_hdmi,
unsigned int samplerate)
-@@ -2779,6 +2785,7 @@ static const struct vc4_hdmi_variant bcm
+@@ -2777,6 +2783,7 @@ static const struct vc4_hdmi_variant bcm
.phy_rng_disable = vc5_hdmi_phy_rng_disable,
.channel_map = vc5_hdmi_channel_map,
.supports_hdr = true,
@@ -63,7 +63,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
};
static const struct vc4_hdmi_variant bcm2711_hdmi1_variant = {
-@@ -2807,6 +2814,7 @@ static const struct vc4_hdmi_variant bcm
+@@ -2805,6 +2812,7 @@ static const struct vc4_hdmi_variant bcm
.phy_rng_disable = vc5_hdmi_phy_rng_disable,
.channel_map = vc5_hdmi_channel_map,
.supports_hdr = true,
diff --git a/target/linux/bcm27xx/patches-5.15/950-0590-drm-vc4-Move-HDMI-reset-to-pm_resume.patch b/target/linux/bcm27xx/patches-5.15/950-0590-drm-vc4-Move-HDMI-reset-to-pm_resume.patch
index 581279ac1b..f5d1c7cc0d 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0590-drm-vc4-Move-HDMI-reset-to-pm_resume.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0590-drm-vc4-Move-HDMI-reset-to-pm_resume.patch
@@ -22,7 +22,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
-@@ -2195,7 +2195,6 @@ static int vc4_hdmi_cec_init(struct vc4_
+@@ -2193,7 +2193,6 @@ static int vc4_hdmi_cec_init(struct vc4_
struct platform_device *pdev = vc4_hdmi->pdev;
struct device *dev = &pdev->dev;
unsigned long flags;
@@ -30,7 +30,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
int ret;
if (!of_find_property(dev->of_node, "interrupts", NULL)) {
-@@ -2214,15 +2213,6 @@ static int vc4_hdmi_cec_init(struct vc4_
+@@ -2212,15 +2211,6 @@ static int vc4_hdmi_cec_init(struct vc4_
cec_fill_conn_info_from_drm(&conn_info, &vc4_hdmi->connector);
cec_s_conn_info(vc4_hdmi->cec_adap, &conn_info);
@@ -46,7 +46,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
if (vc4_hdmi->variant->external_irq_controller) {
ret = request_threaded_irq(platform_get_irq_byname(pdev, "cec-rx"),
vc4_cec_irq_handler_rx_bare,
-@@ -2285,6 +2275,29 @@ static void vc4_hdmi_cec_exit(struct vc4
+@@ -2283,6 +2273,29 @@ static void vc4_hdmi_cec_exit(struct vc4
cec_unregister_adapter(vc4_hdmi->cec_adap);
}
@@ -76,7 +76,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
#else
static int vc4_hdmi_cec_init(struct vc4_hdmi *vc4_hdmi)
{
-@@ -2293,6 +2306,10 @@ static int vc4_hdmi_cec_init(struct vc4_
+@@ -2291,6 +2304,10 @@ static int vc4_hdmi_cec_init(struct vc4_
static void vc4_hdmi_cec_exit(struct vc4_hdmi *vc4_hdmi) {};
@@ -87,7 +87,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
#endif
static int vc4_hdmi_build_regset(struct vc4_hdmi *vc4_hdmi,
-@@ -2527,6 +2544,15 @@ static int vc4_hdmi_runtime_resume(struc
+@@ -2525,6 +2542,15 @@ static int vc4_hdmi_runtime_resume(struc
if (ret)
return ret;
@@ -103,7 +103,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
return 0;
}
-@@ -2617,20 +2643,11 @@ static int vc4_hdmi_bind(struct device *
+@@ -2615,20 +2641,11 @@ static int vc4_hdmi_bind(struct device *
if (ret)
goto err_put_ddc;
diff --git a/target/linux/bcm27xx/patches-5.15/950-0607-drm-vc4-Fix-build-without-DRM_VC4_HDMI_CEC.patch b/target/linux/bcm27xx/patches-5.15/950-0607-drm-vc4-Fix-build-without-DRM_VC4_HDMI_CEC.patch
index 777cdda54f..f3bfc46498 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0607-drm-vc4-Fix-build-without-DRM_VC4_HDMI_CEC.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0607-drm-vc4-Fix-build-without-DRM_VC4_HDMI_CEC.patch
@@ -14,7 +14,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
-@@ -2281,7 +2281,7 @@ static int vc4_hdmi_cec_init(struct vc4_
+@@ -2279,7 +2279,7 @@ static int vc4_hdmi_cec_init(struct vc4_
static void vc4_hdmi_cec_exit(struct vc4_hdmi *vc4_hdmi) {};
diff --git a/target/linux/bcm27xx/patches-5.15/950-0650-drm-vc4-Add-alpha_blend_mode-property-to-each-plane.patch b/target/linux/bcm27xx/patches-5.15/950-0650-drm-vc4-Add-alpha_blend_mode-property-to-each-plane.patch
index 23162421c3..f1b3a2af8f 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0650-drm-vc4-Add-alpha_blend_mode-property-to-each-plane.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0650-drm-vc4-Add-alpha_blend_mode-property-to-each-plane.patch
@@ -14,7 +14,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
--- a/drivers/gpu/drm/vc4/vc4_plane.c
+++ b/drivers/gpu/drm/vc4/vc4_plane.c
-@@ -663,6 +663,48 @@ static const u32 colorspace_coeffs[2][DR
+@@ -664,6 +664,48 @@ static const u32 colorspace_coeffs[2][DR
}
};
@@ -63,7 +63,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
/* Writes out a full display list for an active plane to the plane's
* private dlist state.
*/
-@@ -945,13 +987,8 @@ static int vc4_plane_mode_set(struct drm
+@@ -946,13 +988,8 @@ static int vc4_plane_mode_set(struct drm
/* Position Word 2: Source Image Size, Alpha */
vc4_state->pos2_offset = vc4_state->dlist_count;
vc4_dlist_write(vc4_state,
@@ -78,7 +78,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
VC4_SET_FIELD(vc4_state->src_w[0],
SCALER_POS2_WIDTH) |
VC4_SET_FIELD(vc4_state->src_h[0],
-@@ -996,14 +1033,9 @@ static int vc4_plane_mode_set(struct drm
+@@ -997,14 +1034,9 @@ static int vc4_plane_mode_set(struct drm
vc4_dlist_write(vc4_state,
VC4_SET_FIELD(state->alpha >> 4,
SCALER5_CTL2_ALPHA) |
@@ -95,7 +95,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
);
/* Position Word 1: Scaled Image Dimensions. */
-@@ -1493,6 +1525,10 @@ struct drm_plane *vc4_plane_init(struct
+@@ -1494,6 +1526,10 @@ struct drm_plane *vc4_plane_init(struct
drm_plane_helper_add(plane, &vc4_plane_helper_funcs);
drm_plane_create_alpha_property(plane);
diff --git a/target/linux/bcm27xx/patches-5.15/950-0664-drm-vc4-dsi-Correct-max-divider-to-255-not-7.patch b/target/linux/bcm27xx/patches-5.15/950-0664-drm-vc4-dsi-Correct-max-divider-to-255-not-7.patch
deleted file mode 100644
index 848a1d2e05..0000000000
--- a/target/linux/bcm27xx/patches-5.15/950-0664-drm-vc4-dsi-Correct-max-divider-to-255-not-7.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From 916c79dc5a1df708d6984f5e964eaa3de7e130f2 Mon Sep 17 00:00:00 2001
-From: Dave Stevenson <dave.stevenson@raspberrypi.com>
-Date: Fri, 22 Oct 2021 16:48:50 +0100
-Subject: [PATCH] drm/vc4: dsi: Correct max divider to 255 (not 7)
-
-The integer divider from parent PLL to DSI clock is capable
-of going up to /255, not just /7 that the driver was trying.
-This allows for slower link frequencies on the DSI bus where
-the resolution permits.
-
-Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
----
- drivers/gpu/drm/vc4/vc4_dsi.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/drivers/gpu/drm/vc4/vc4_dsi.c
-+++ b/drivers/gpu/drm/vc4/vc4_dsi.c
-@@ -850,7 +850,7 @@ static bool vc4_dsi_encoder_mode_fixup(s
- /* Find what divider gets us a faster clock than the requested
- * pixel clock.
- */
-- for (divider = 1; divider < 7; divider++) {
-+ for (divider = 1; divider < 255; divider++) {
- if (parent_rate / (divider + 1) < pll_clock)
- break;
- }
diff --git a/target/linux/bcm27xx/patches-5.15/950-0688-drm-panel-Add-and-initialise-an-orientation-field-to.patch b/target/linux/bcm27xx/patches-5.15/950-0688-drm-panel-Add-and-initialise-an-orientation-field-to.patch
index f87fc339bd..0b62c8f415 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0688-drm-panel-Add-and-initialise-an-orientation-field-to.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0688-drm-panel-Add-and-initialise-an-orientation-field-to.patch
@@ -23,7 +23,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
--- a/drivers/gpu/drm/bridge/panel.c
+++ b/drivers/gpu/drm/bridge/panel.c
-@@ -79,6 +79,10 @@ static int panel_bridge_attach(struct dr
+@@ -80,6 +80,10 @@ static int panel_bridge_attach(struct dr
return ret;
}
diff --git a/target/linux/bcm27xx/patches-5.15/950-0693-drm-panel-Add-panel-driver-for-TDO-Y17B-based-panels.patch b/target/linux/bcm27xx/patches-5.15/950-0693-drm-panel-Add-panel-driver-for-TDO-Y17B-based-panels.patch
index 4c96b773c7..b2d9071836 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0693-drm-panel-Add-panel-driver-for-TDO-Y17B-based-panels.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0693-drm-panel-Add-panel-driver-for-TDO-Y17B-based-panels.patch
@@ -19,7 +19,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
--- a/drivers/gpu/drm/panel/Kconfig
+++ b/drivers/gpu/drm/panel/Kconfig
-@@ -560,6 +560,17 @@ config DRM_PANEL_SONY_ACX565AKM
+@@ -562,6 +562,17 @@ config DRM_PANEL_SONY_ACX565AKM
Say Y here if you want to enable support for the Sony ACX565AKM
800x600 3.5" panel (found on the Nokia N900).
diff --git a/target/linux/bcm27xx/patches-5.15/950-0700-net-phy-lan87xx-Decrease-phy-polling-rate.patch b/target/linux/bcm27xx/patches-5.15/950-0700-net-phy-lan87xx-Decrease-phy-polling-rate.patch
index 6693f86aea..3abac8ec25 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0700-net-phy-lan87xx-Decrease-phy-polling-rate.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0700-net-phy-lan87xx-Decrease-phy-polling-rate.patch
@@ -18,16 +18,16 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
--- a/drivers/net/phy/smsc.c
+++ b/drivers/net/phy/smsc.c
-@@ -218,6 +218,8 @@ static int lan87xx_read_status(struct ph
+@@ -220,6 +220,8 @@ static int lan87xx_read_status(struct ph
int err = genphy_read_status(phydev);
- if (!phydev->link && priv->energy_enable) {
+ if (!phydev->link && priv->energy_enable && phydev->irq == PHY_POLL) {
+ int energy_detected;
+
/* Disable EDPD to wake up PHY */
int rc = phy_read(phydev, MII_LAN83C185_CTRL_STATUS);
if (rc < 0)
-@@ -233,7 +235,7 @@ static int lan87xx_read_status(struct ph
+@@ -235,7 +237,7 @@ static int lan87xx_read_status(struct ph
*/
read_poll_timeout(phy_read, rc,
rc & MII_LAN83C185_ENERGYON || rc < 0,
@@ -36,7 +36,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
MII_LAN83C185_CTRL_STATUS);
if (rc < 0)
return rc;
-@@ -243,10 +245,16 @@ static int lan87xx_read_status(struct ph
+@@ -245,10 +247,16 @@ static int lan87xx_read_status(struct ph
if (rc < 0)
return rc;
diff --git a/target/linux/bcm27xx/patches-5.15/950-0711-drm-vc4-Rename-bridge-to-out_bridge.patch b/target/linux/bcm27xx/patches-5.15/950-0711-drm-vc4-Rename-bridge-to-out_bridge.patch
index 0d14eeccd4..df4aece95e 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0711-drm-vc4-Rename-bridge-to-out_bridge.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0711-drm-vc4-Rename-bridge-to-out_bridge.patch
@@ -32,45 +32,25 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
break;
}
-@@ -1667,7 +1667,7 @@ static int vc4_dsi_bind(struct device *d
+@@ -1687,9 +1687,9 @@ static int vc4_dsi_bind(struct device *d
+ return ret;
}
- ret = drm_of_find_panel_or_bridge(dev->of_node, 0, 0,
-- &panel, &dsi->bridge);
-+ &panel, &dsi->out_bridge);
- if (ret) {
- /* If the bridge or panel pointed by dev->of_node is not
- * enabled, just return 0 here so that we don't prevent the DRM
-@@ -1682,10 +1682,10 @@ static int vc4_dsi_bind(struct device *d
- }
+- dsi->bridge = devm_drm_of_get_bridge(dev, dev->of_node, 0, 0);
+- if (IS_ERR(dsi->bridge))
+- return PTR_ERR(dsi->bridge);
++ dsi->out_bridge = devm_drm_of_get_bridge(dev, dev->of_node, 0, 0);
++ if (IS_ERR(dsi->out_bridge))
++ return PTR_ERR(dsi->out_bridge);
- if (panel) {
-- dsi->bridge = devm_drm_panel_bridge_add_typed(dev, panel,
-- DRM_MODE_CONNECTOR_DSI);
-- if (IS_ERR(dsi->bridge)) {
-- ret = PTR_ERR(dsi->bridge);
-+ dsi->out_bridge = devm_drm_panel_bridge_add_typed(dev, panel,
-+ DRM_MODE_CONNECTOR_DSI);
-+ if (IS_ERR(dsi->out_bridge)) {
-+ ret = PTR_ERR(dsi->out_bridge);
- goto err_free_dma;
- }
- }
-@@ -1704,7 +1704,7 @@ static int vc4_dsi_bind(struct device *d
+ /* The esc clock rate is supposed to always be 100Mhz. */
+ ret = clk_set_rate(dsi->escape_clock, 100 * 1000000);
+@@ -1705,7 +1705,7 @@ static int vc4_dsi_bind(struct device *d
drm_simple_encoder_init(drm, dsi->encoder, DRM_MODE_ENCODER_DSI);
drm_encoder_helper_add(dsi->encoder, &vc4_dsi_encoder_helper_funcs);
- ret = drm_bridge_attach(dsi->encoder, dsi->bridge, NULL, 0);
+ ret = drm_bridge_attach(dsi->encoder, dsi->out_bridge, NULL, 0);
- if (ret) {
- dev_err(dev, "bridge attach failed: %d\n", ret);
- goto err_free_dma;
-@@ -1741,7 +1741,7 @@ static void vc4_dsi_unbind(struct device
- {
- struct vc4_dsi *dsi = dev_get_drvdata(dev);
-
-- if (dsi->bridge)
-+ if (dsi->out_bridge)
- pm_runtime_disable(dev);
-
- /*
+ if (ret)
+ return ret;
+ /* Disable the atomic helper calls into the bridge. We
diff --git a/target/linux/bcm27xx/patches-5.15/950-0713-drm-vc4-Remove-splitting-the-bridge-chain-from-the-d.patch b/target/linux/bcm27xx/patches-5.15/950-0713-drm-vc4-Remove-splitting-the-bridge-chain-from-the-d.patch
index 7c60e7763b..320f9a595b 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0713-drm-vc4-Remove-splitting-the-bridge-chain-from-the-d.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0713-drm-vc4-Remove-splitting-the-bridge-chain-from-the-d.patch
@@ -75,7 +75,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
if (debug_dump_regs) {
struct drm_printer p = drm_info_printer(&dsi->pdev->dev);
dev_info(&dsi->pdev->dev, "DSI regs after:\n");
-@@ -1578,7 +1552,6 @@ static int vc4_dsi_bind(struct device *d
+@@ -1588,7 +1562,6 @@ static int vc4_dsi_bind(struct device *d
if (!vc4_dsi_encoder)
return -ENOMEM;
@@ -83,10 +83,10 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
vc4_dsi_encoder->base.type = dsi->variant->port ?
VC4_ENCODER_TYPE_DSI1 : VC4_ENCODER_TYPE_DSI0;
vc4_dsi_encoder->dsi = dsi;
-@@ -1718,12 +1691,6 @@ static int vc4_dsi_bind(struct device *d
- dev_err(dev, "bridge attach failed: %d\n", ret);
- goto err_free_dma;
- }
+@@ -1717,12 +1690,6 @@ static int vc4_dsi_bind(struct device *d
+ ret = drm_bridge_attach(dsi->encoder, dsi->out_bridge, NULL, 0);
+ if (ret)
+ return ret;
- /* Disable the atomic helper calls into the bridge. We
- * manually call the bridge pre_enable / enable / etc. calls
- * from our driver, since we need to sequence them within the
@@ -96,9 +96,9 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
vc4_debugfs_add_regset32(drm, dsi->variant->debugfs_name, &dsi->regset);
-@@ -1753,11 +1720,6 @@ static void vc4_dsi_unbind(struct device
- if (dsi->out_bridge)
- pm_runtime_disable(dev);
+@@ -1738,11 +1705,6 @@ static void vc4_dsi_unbind(struct device
+
+ pm_runtime_disable(dev);
- /*
- * Restore the bridge_chain so the bridge detach procedure can happen
@@ -106,5 +106,5 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
- */
- list_splice_init(&dsi->bridge_chain, &dsi->encoder->bridge_chain);
drm_encoder_cleanup(dsi->encoder);
+ }
- if (dsi->reg_dma_chan) {
diff --git a/target/linux/bcm27xx/patches-5.15/950-0715-drm-vc4-Convert-vc4_dsi-to-using-a-bridge-instead-of.patch b/target/linux/bcm27xx/patches-5.15/950-0715-drm-vc4-Convert-vc4_dsi-to-using-a-bridge-instead-of.patch
index 74cae273f8..e196a5e675 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0715-drm-vc4-Convert-vc4_dsi-to-using-a-bridge-instead-of.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0715-drm-vc4-Convert-vc4_dsi-to-using-a-bridge-instead-of.patch
@@ -240,18 +240,18 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
};
static const struct vc4_dsi_variant bcm2711_dsi1_variant = {
-@@ -1691,9 +1744,8 @@ static int vc4_dsi_bind(struct device *d
- goto err_free_dma;
+@@ -1692,9 +1745,8 @@ static int vc4_dsi_bind(struct device *d
+ return ret;
drm_simple_encoder_init(drm, dsi->encoder, DRM_MODE_ENCODER_DSI);
- drm_encoder_helper_add(dsi->encoder, &vc4_dsi_encoder_helper_funcs);
- ret = drm_bridge_attach(dsi->encoder, dsi->out_bridge, NULL, 0);
+ ret = drm_bridge_attach(dsi->encoder, &dsi->bridge, NULL, 0);
- if (ret) {
- dev_err(dev, "bridge attach failed: %d\n", ret);
- goto err_free_dma;
-@@ -1755,6 +1807,10 @@ static int vc4_dsi_dev_probe(struct plat
+ if (ret)
+ return ret;
+
+@@ -1730,6 +1782,10 @@ static int vc4_dsi_dev_probe(struct plat
return -ENOMEM;
dev_set_drvdata(dev, dsi);
diff --git a/target/linux/bcm27xx/patches-5.15/950-0762-drm-bridge-Introduce-pre_enable_upstream_first-to-al.patch b/target/linux/bcm27xx/patches-5.15/950-0762-drm-bridge-Introduce-pre_enable_upstream_first-to-al.patch
index 58c81c015d..6e3dd5778a 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0762-drm-bridge-Introduce-pre_enable_upstream_first-to-al.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0762-drm-bridge-Introduce-pre_enable_upstream_first-to-al.patch
@@ -36,7 +36,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
--- a/drivers/gpu/drm/drm_bridge.c
+++ b/drivers/gpu/drm/drm_bridge.c
-@@ -463,20 +463,15 @@ EXPORT_SYMBOL(drm_bridge_chain_disable);
+@@ -462,20 +462,15 @@ EXPORT_SYMBOL(drm_bridge_chain_disable);
* encoder chain, starting from the first bridge to the last. These are called
* after completing the encoder's prepare op.
*
@@ -62,7 +62,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
}
EXPORT_SYMBOL(drm_bridge_chain_post_disable);
-@@ -518,24 +513,14 @@ EXPORT_SYMBOL(drm_bridge_chain_mode_set)
+@@ -517,24 +512,14 @@ EXPORT_SYMBOL(drm_bridge_chain_mode_set)
* chain, starting from the last bridge to the first. These are called
* before calling the encoder's commit op.
*
@@ -91,7 +91,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
}
EXPORT_SYMBOL(drm_bridge_chain_pre_enable);
-@@ -607,6 +592,25 @@ void drm_atomic_bridge_chain_disable(str
+@@ -606,6 +591,25 @@ void drm_atomic_bridge_chain_disable(str
}
EXPORT_SYMBOL(drm_atomic_bridge_chain_disable);
@@ -117,7 +117,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
/**
* drm_atomic_bridge_chain_post_disable - cleans up after disabling all bridges
* in the encoder chain
-@@ -617,6 +621,9 @@ EXPORT_SYMBOL(drm_atomic_bridge_chain_di
+@@ -616,6 +620,9 @@ EXPORT_SYMBOL(drm_atomic_bridge_chain_di
* &drm_bridge_funcs.post_disable) op for all the bridges in the encoder chain,
* starting from the first bridge to the last. These are called after completing
* &drm_encoder_helper_funcs.atomic_disable
@@ -127,7 +127,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
*
* Note: the bridge passed should be the one closest to the encoder
*/
-@@ -624,30 +631,75 @@ void drm_atomic_bridge_chain_post_disabl
+@@ -623,30 +630,75 @@ void drm_atomic_bridge_chain_post_disabl
struct drm_atomic_state *old_state)
{
struct drm_encoder *encoder;
@@ -214,7 +214,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
/**
* drm_atomic_bridge_chain_pre_enable - prepares for enabling all bridges in
* the encoder chain
-@@ -659,33 +711,62 @@ EXPORT_SYMBOL(drm_atomic_bridge_chain_po
+@@ -658,33 +710,62 @@ EXPORT_SYMBOL(drm_atomic_bridge_chain_po
* starting from the last bridge to the first. These are called before calling
* &drm_encoder_helper_funcs.atomic_enable
*
diff --git a/target/linux/bcm27xx/patches-5.15/950-0763-drm-panel-Add-prepare_upstream_first-flag-to-drm_pan.patch b/target/linux/bcm27xx/patches-5.15/950-0763-drm-panel-Add-prepare_upstream_first-flag-to-drm_pan.patch
index 0633e6080e..789431ce59 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0763-drm-panel-Add-prepare_upstream_first-flag-to-drm_pan.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0763-drm-panel-Add-prepare_upstream_first-flag-to-drm_pan.patch
@@ -17,7 +17,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
--- a/drivers/gpu/drm/bridge/panel.c
+++ b/drivers/gpu/drm/bridge/panel.c
-@@ -225,6 +225,9 @@ struct drm_bridge *drm_panel_bridge_add_
+@@ -226,6 +226,9 @@ struct drm_bridge *drm_panel_bridge_add_
panel_bridge->bridge.ops = DRM_BRIDGE_OP_MODES;
panel_bridge->bridge.type = connector_type;
diff --git a/target/linux/bcm27xx/patches-5.15/950-0781-drm-vc4-Support-zpos-on-all-planes.patch b/target/linux/bcm27xx/patches-5.15/950-0781-drm-vc4-Support-zpos-on-all-planes.patch
index 62ee1255b9..8c1b0ec805 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0781-drm-vc4-Support-zpos-on-all-planes.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0781-drm-vc4-Support-zpos-on-all-planes.patch
@@ -88,7 +88,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
if (ret)
--- a/drivers/gpu/drm/vc4/vc4_plane.c
+++ b/drivers/gpu/drm/vc4/vc4_plane.c
-@@ -1572,9 +1572,14 @@ struct drm_plane *vc4_plane_init(struct
+@@ -1573,9 +1573,14 @@ struct drm_plane *vc4_plane_init(struct
DRM_COLOR_YCBCR_BT709,
DRM_COLOR_YCBCR_LIMITED_RANGE);
@@ -103,7 +103,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
int vc4_plane_create_additional_planes(struct drm_device *drm)
{
struct drm_plane *cursor_plane;
-@@ -1590,7 +1595,7 @@ int vc4_plane_create_additional_planes(s
+@@ -1591,7 +1596,7 @@ int vc4_plane_create_additional_planes(s
* modest number of planes to expose, that should hopefully
* still cover any sane usecase.
*/
@@ -112,7 +112,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
struct drm_plane *plane =
vc4_plane_init(drm, DRM_PLANE_TYPE_OVERLAY);
-@@ -1599,17 +1604,28 @@ int vc4_plane_create_additional_planes(s
+@@ -1600,17 +1605,28 @@ int vc4_plane_create_additional_planes(s
plane->possible_crtcs =
GENMASK(drm->mode_config.num_crtc - 1, 0);
diff --git a/target/linux/bcm27xx/patches-5.15/950-0787-vc4-drm-vc4_plane-Keep-fractional-source-coords-insi.patch b/target/linux/bcm27xx/patches-5.15/950-0787-vc4-drm-vc4_plane-Keep-fractional-source-coords-insi.patch
index 715f9b1930..7bb57aafa5 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0787-vc4-drm-vc4_plane-Keep-fractional-source-coords-insi.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0787-vc4-drm-vc4_plane-Keep-fractional-source-coords-insi.patch
@@ -35,18 +35,19 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
return VC4_SCALING_PPF;
else
return VC4_SCALING_TPZ;
-@@ -388,14 +388,10 @@ static int vc4_plane_setup_clipping_and_
+@@ -388,15 +388,10 @@ static int vc4_plane_setup_clipping_and_
for (i = 0; i < num_planes; i++)
vc4_state->offsets[i] = bo->paddr + fb->offsets[i];
-- /* We don't support subpixel source positioning for scaling,
+- /*
+- * We don't support subpixel source positioning for scaling,
- * but fractional coordinates can be generated by clipping
- * so just round for now
- */
-- vc4_state->src_x = DIV_ROUND_CLOSEST(state->src.x1, 1<<16);
-- vc4_state->src_y = DIV_ROUND_CLOSEST(state->src.y1, 1<<16);
-- vc4_state->src_w[0] = DIV_ROUND_CLOSEST(state->src.x2, 1<<16) - vc4_state->src_x;
-- vc4_state->src_h[0] = DIV_ROUND_CLOSEST(state->src.y2, 1<<16) - vc4_state->src_y;
+- vc4_state->src_x = DIV_ROUND_CLOSEST(state->src.x1, 1 << 16);
+- vc4_state->src_y = DIV_ROUND_CLOSEST(state->src.y1, 1 << 16);
+- vc4_state->src_w[0] = DIV_ROUND_CLOSEST(state->src.x2, 1 << 16) - vc4_state->src_x;
+- vc4_state->src_h[0] = DIV_ROUND_CLOSEST(state->src.y2, 1 << 16) - vc4_state->src_y;
+ vc4_state->src_x = state->src.x1;
+ vc4_state->src_y = state->src.y1;
+ vc4_state->src_w[0] = state->src.x2 - vc4_state->src_x;
@@ -54,7 +55,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
vc4_state->crtc_x = state->dst.x1;
vc4_state->crtc_y = state->dst.y1;
-@@ -448,7 +444,7 @@ static void vc4_write_tpz(struct vc4_pla
+@@ -449,7 +444,7 @@ static void vc4_write_tpz(struct vc4_pla
{
u32 scale, recip;
@@ -63,7 +64,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
/* The specs note that while the reciprocal would be defined
* as (1<<32)/scale, ~0 is close enough.
-@@ -494,7 +490,7 @@ static u32 vc4_lbm_size(struct drm_plane
+@@ -495,7 +490,7 @@ static u32 vc4_lbm_size(struct drm_plane
if (vc4_state->x_scaling[0] == VC4_SCALING_TPZ)
pix_per_line = vc4_state->crtc_w;
else
@@ -72,7 +73,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
if (!vc4_state->is_yuv) {
if (vc4_state->y_scaling[0] == VC4_SCALING_TPZ)
-@@ -585,7 +581,8 @@ static void vc4_plane_calc_load(struct d
+@@ -586,7 +581,8 @@ static void vc4_plane_calc_load(struct d
for (i = 0; i < fb->format->num_planes; i++) {
/* Even if the bandwidth/plane required for a single frame is
*
@@ -82,7 +83,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
*
* when downscaling, we have to read more pixels per line in
* the time frame reserved for a single line, so the bandwidth
-@@ -594,11 +591,11 @@ static void vc4_plane_calc_load(struct d
+@@ -595,11 +591,11 @@ static void vc4_plane_calc_load(struct d
* load by this number. We're likely over-estimating the read
* demand, but that's better than under-estimating it.
*/
@@ -98,7 +99,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
vc4_state->hvs_load += vc4_state->crtc_h * vc4_state->crtc_w;
}
-@@ -751,7 +748,8 @@ static int vc4_plane_mode_set(struct drm
+@@ -752,7 +748,8 @@ static int vc4_plane_mode_set(struct drm
bool mix_plane_alpha;
bool covers_screen;
u32 scl0, scl1, pitch0;
@@ -108,7 +109,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
u32 hvs_format = format->hvs;
unsigned int rotation;
int ret, i;
-@@ -763,6 +761,9 @@ static int vc4_plane_mode_set(struct drm
+@@ -764,6 +761,9 @@ static int vc4_plane_mode_set(struct drm
if (ret)
return ret;
@@ -118,7 +119,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
/* SCL1 is used for Cb/Cr scaling of planar formats. For RGB
* and 4:4:4, scl1 should be set to scl0 so both channels of
* the scaler do the same thing. For YUV, the Y plane needs
-@@ -783,9 +784,11 @@ static int vc4_plane_mode_set(struct drm
+@@ -784,9 +784,11 @@ static int vc4_plane_mode_set(struct drm
DRM_MODE_REFLECT_Y);
/* We must point to the last line when Y reflection is enabled. */
@@ -132,7 +133,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
switch (base_format_mod) {
case DRM_FORMAT_MOD_LINEAR:
-@@ -800,7 +803,7 @@ static int vc4_plane_mode_set(struct drm
+@@ -801,7 +803,7 @@ static int vc4_plane_mode_set(struct drm
(i ? v_subsample : 1) *
fb->pitches[i];
@@ -141,7 +142,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
(i ? h_subsample : 1) *
fb->format->cpp[i];
}
-@@ -823,7 +826,7 @@ static int vc4_plane_mode_set(struct drm
+@@ -824,7 +826,7 @@ static int vc4_plane_mode_set(struct drm
* pitch * tile_h == tile_size * tiles_per_row
*/
u32 tiles_w = fb->pitches[0] >> (tile_size_shift - tile_h_shift);
@@ -150,7 +151,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
u32 tiles_r = tiles_w - tiles_l;
u32 tiles_t = src_y >> tile_h_shift;
/* Intra-tile offsets, which modify the base address (the
-@@ -833,7 +836,7 @@ static int vc4_plane_mode_set(struct drm
+@@ -834,7 +836,7 @@ static int vc4_plane_mode_set(struct drm
u32 tile_y = (src_y >> 4) & 1;
u32 subtile_y = (src_y >> 2) & 3;
u32 utile_y = src_y & 3;
@@ -159,7 +160,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
u32 y_off = src_y & tile_h_mask;
/* When Y reflection is requested we must set the
-@@ -929,7 +932,7 @@ static int vc4_plane_mode_set(struct drm
+@@ -930,7 +932,7 @@ static int vc4_plane_mode_set(struct drm
* of the 12-pixels in that 128-bit word is the
* first pixel to be used
*/
@@ -168,7 +169,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
u32 aligned = remaining_pixels / 12;
u32 last_bits = remaining_pixels % 12;
-@@ -951,12 +954,12 @@ static int vc4_plane_mode_set(struct drm
+@@ -952,12 +954,12 @@ static int vc4_plane_mode_set(struct drm
return -EINVAL;
}
pix_per_tile = tile_w / fb->format->cpp[0];
@@ -183,7 +184,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
vc4_state->offsets[i] += param * tile_w * tile;
vc4_state->offsets[i] += src_y /
-@@ -1017,10 +1020,8 @@ static int vc4_plane_mode_set(struct drm
+@@ -1018,10 +1020,8 @@ static int vc4_plane_mode_set(struct drm
vc4_dlist_write(vc4_state,
(mix_plane_alpha ? SCALER_POS2_ALPHA_MIX : 0) |
vc4_hvs4_get_alpha_blend_mode(state) |
@@ -196,7 +197,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
/* Position Word 3: Context. Written by the HVS. */
vc4_dlist_write(vc4_state, 0xc0c0c0c0);
-@@ -1078,10 +1079,8 @@ static int vc4_plane_mode_set(struct drm
+@@ -1079,10 +1079,8 @@ static int vc4_plane_mode_set(struct drm
/* Position Word 2: Source Image Size */
vc4_state->pos2_offset = vc4_state->dlist_count;
vc4_dlist_write(vc4_state,
diff --git a/target/linux/bcm27xx/patches-5.15/950-0806-drm-atomic-helpers-remove-legacy_cursor_update-hacks.patch b/target/linux/bcm27xx/patches-5.15/950-0806-drm-atomic-helpers-remove-legacy_cursor_update-hacks.patch
index 8f743ce5b3..167124faa1 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0806-drm-atomic-helpers-remove-legacy_cursor_update-hacks.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0806-drm-atomic-helpers-remove-legacy_cursor_update-hacks.patch
@@ -110,7 +110,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
drm_dbg_atomic(&dev_priv->drm,
--- a/drivers/gpu/drm/msm/msm_atomic.c
+++ b/drivers/gpu/drm/msm/msm_atomic.c
-@@ -246,6 +246,8 @@ void msm_atomic_commit_tail(struct drm_a
+@@ -231,6 +231,8 @@ void msm_atomic_commit_tail(struct drm_a
/* async updates are limited to single-crtc updates: */
WARN_ON(crtc_mask != drm_crtc_mask(async_crtc));
diff --git a/target/linux/bcm27xx/patches-5.15/950-0868-drm-vc4-hdmi-Rework-hdmi_enable_4kp60-detection.patch b/target/linux/bcm27xx/patches-5.15/950-0868-drm-vc4-hdmi-Rework-hdmi_enable_4kp60-detection.patch
index eae608d331..513484f737 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0868-drm-vc4-hdmi-Rework-hdmi_enable_4kp60-detection.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0868-drm-vc4-hdmi-Rework-hdmi_enable_4kp60-detection.patch
@@ -79,7 +79,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
return MODE_CLOCK_HIGH;
if (info->max_tmds_clock && clock > (info->max_tmds_clock * 1000))
-@@ -3158,14 +3160,6 @@ static int vc4_hdmi_bind(struct device *
+@@ -3156,14 +3158,6 @@ static int vc4_hdmi_bind(struct device *
vc4_hdmi->disable_wifi_frequencies =
of_property_read_bool(dev->of_node, "wifi-2.4ghz-coexistence");
diff --git a/target/linux/bcm27xx/patches-5.15/950-0898-drm-vc4-Consolidate-Hardware-Revision-Check.patch b/target/linux/bcm27xx/patches-5.15/950-0898-drm-vc4-Consolidate-Hardware-Revision-Check.patch
index 35ff35ce70..a331118b4b 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0898-drm-vc4-Consolidate-Hardware-Revision-Check.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0898-drm-vc4-Consolidate-Hardware-Revision-Check.patch
@@ -68,7 +68,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
*/
--- a/drivers/gpu/drm/vc4/vc4_drv.c
+++ b/drivers/gpu/drm/vc4/vc4_drv.c
-@@ -246,10 +246,13 @@ static int vc4_drm_bind(struct device *d
+@@ -255,10 +255,13 @@ static int vc4_drm_bind(struct device *d
struct vc4_dev *vc4;
struct device_node *node;
struct drm_crtc *crtc;
@@ -82,7 +82,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
/* If VC4 V3D is missing, don't advertise render nodes. */
node = of_find_matching_node_and_match(NULL, vc4_v3d_dt_match, NULL);
if (!node || !of_device_is_available(node))
-@@ -269,6 +272,7 @@ static int vc4_drm_bind(struct device *d
+@@ -288,6 +291,7 @@ static int vc4_drm_bind(struct device *d
vc4 = devm_drm_dev_alloc(dev, &vc4_drm_driver, struct vc4_dev, base);
if (IS_ERR(vc4))
return PTR_ERR(vc4);
diff --git a/target/linux/bcm27xx/patches-5.15/950-0901-drm-vc4-drv-Register-a-different-driver-on-BCM2711.patch b/target/linux/bcm27xx/patches-5.15/950-0901-drm-vc4-drv-Register-a-different-driver-on-BCM2711.patch
index 515a3b59a4..c7e587ae16 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0901-drm-vc4-drv-Register-a-different-driver-on-BCM2711.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0901-drm-vc4-drv-Register-a-different-driver-on-BCM2711.patch
@@ -83,7 +83,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
static int compare_dev(struct device *dev, void *data)
{
return dev == data;
-@@ -254,6 +288,7 @@ static bool firmware_kms(void)
+@@ -263,6 +297,7 @@ static bool firmware_kms(void)
static int vc4_drm_bind(struct device *dev)
{
struct platform_device *pdev = to_platform_device(dev);
@@ -91,7 +91,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
struct rpi_firmware *firmware = NULL;
struct drm_device *drm;
struct vc4_dev *vc4;
-@@ -265,12 +300,10 @@ static int vc4_drm_bind(struct device *d
+@@ -274,12 +309,10 @@ static int vc4_drm_bind(struct device *d
dev->coherent_dma_mask = DMA_BIT_MASK(32);
is_vc5 = of_device_is_compatible(dev->of_node, "brcm,bcm2711-vc5");
@@ -108,7 +108,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
node = of_find_matching_node_and_match(NULL, vc4_dma_range_matches,
NULL);
-@@ -282,7 +315,7 @@ static int vc4_drm_bind(struct device *d
+@@ -301,7 +334,7 @@ static int vc4_drm_bind(struct device *d
return ret;
}
@@ -117,7 +117,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
if (IS_ERR(vc4))
return PTR_ERR(vc4);
vc4->is_vc5 = is_vc5;
-@@ -314,7 +347,7 @@ static int vc4_drm_bind(struct device *d
+@@ -333,7 +366,7 @@ static int vc4_drm_bind(struct device *d
return -EPROBE_DEFER;
}
diff --git a/target/linux/bcm27xx/patches-5.15/950-0904-drm-vc4-drv-Skip-BO-Backend-Initialization-on-BCM271.patch b/target/linux/bcm27xx/patches-5.15/950-0904-drm-vc4-drv-Skip-BO-Backend-Initialization-on-BCM271.patch
index cb4a077f61..297e871020 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0904-drm-vc4-drv-Skip-BO-Backend-Initialization-on-BCM271.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0904-drm-vc4-drv-Skip-BO-Backend-Initialization-on-BCM271.patch
@@ -19,7 +19,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
--- a/drivers/gpu/drm/vc4/vc4_drv.c
+++ b/drivers/gpu/drm/vc4/vc4_drv.c
-@@ -324,19 +324,23 @@ static int vc4_drm_bind(struct device *d
+@@ -343,19 +343,23 @@ static int vc4_drm_bind(struct device *d
platform_set_drvdata(pdev, drm);
INIT_LIST_HEAD(&vc4->debugfs_list);
diff --git a/target/linux/bcm27xx/patches-5.15/950-0914-mmc-block-Don-t-do-single-sector-reads-during-recove.patch b/target/linux/bcm27xx/patches-5.15/950-0914-mmc-block-Don-t-do-single-sector-reads-during-recove.patch
index 3f2489df56..94ddf5229c 100644
--- a/target/linux/bcm27xx/patches-5.15/950-0914-mmc-block-Don-t-do-single-sector-reads-during-recove.patch
+++ b/target/linux/bcm27xx/patches-5.15/950-0914-mmc-block-Don-t-do-single-sector-reads-during-recove.patch
@@ -24,15 +24,15 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
--- a/drivers/mmc/core/block.c
+++ b/drivers/mmc/core/block.c
@@ -1870,7 +1870,11 @@ static void mmc_blk_mq_rw_recovery(struc
+ return;
}
- /* FIXME: Missing single sector read for large sector size */
-- if (!mmc_large_sector(card) && rq_data_dir(req) == READ &&
+- if (rq_data_dir(req) == READ && brq->data.blocks >
+ /*
+ * XXX: don't do single-sector reads, as it leaks a SG DMA
+ * mapping when reusing the still-pending req.
+ */
-+ if (0 && !mmc_large_sector(card) && rq_data_dir(req) == READ &&
- brq->data.blocks > 1) {
- /* Read one sector at a time */
++ if (0 && rq_data_dir(req) == READ && brq->data.blocks >
+ queue_physical_block_size(mq->queue) >> 9) {
+ /* Read one (native) sector at a time */
mmc_blk_read_single(mq, req);