diff options
Diffstat (limited to 'target/linux/bcm27xx/patches-5.10/950-0580-drm-vc4-Separate-VEC-compatible-variants.patch')
-rw-r--r-- | target/linux/bcm27xx/patches-5.10/950-0580-drm-vc4-Separate-VEC-compatible-variants.patch | 106 |
1 files changed, 0 insertions, 106 deletions
diff --git a/target/linux/bcm27xx/patches-5.10/950-0580-drm-vc4-Separate-VEC-compatible-variants.patch b/target/linux/bcm27xx/patches-5.10/950-0580-drm-vc4-Separate-VEC-compatible-variants.patch deleted file mode 100644 index 99d49f3573..0000000000 --- a/target/linux/bcm27xx/patches-5.10/950-0580-drm-vc4-Separate-VEC-compatible-variants.patch +++ /dev/null @@ -1,106 +0,0 @@ -From 8d75ba91d48ee9fd39284bf44ca5e729e134e18c Mon Sep 17 00:00:00 2001 -From: kFYatek <4499762+kFYatek@users.noreply.github.com> -Date: Sat, 27 Mar 2021 21:43:40 +0100 -Subject: [PATCH] drm/vc4: Separate VEC compatible variants - -The VEC's DAC on BCM2711 is slightly different compared to the one on -BCM283x and needs different configuration. In particular, bit 3 -(mask 0x8) switches the BCM2711 DAC input to "self-test input data", -which makes the output unusable. Separating two compatible variants in -devicetrees and the DRM driver was therefore necessary. - -The configurations used for both variants have been borrowed from -Raspberry Pi (model 3B for BCM283x, 4B for BCM2711) firmware defaults. - -Signed-off-by: Mateusz Kwiatkowski <kfyatek+publicgit@gmail.com> ---- - .../bindings/display/brcm,bcm2835-vec.yaml | 4 ++- - arch/arm/boot/dts/bcm2711.dtsi | 2 +- - drivers/gpu/drm/vc4/vc4_vec.c | 27 +++++++++++++++---- - 3 files changed, 26 insertions(+), 7 deletions(-) - ---- a/Documentation/devicetree/bindings/display/brcm,bcm2835-vec.yaml -+++ b/Documentation/devicetree/bindings/display/brcm,bcm2835-vec.yaml -@@ -11,7 +11,9 @@ maintainers: - - properties: - compatible: -- const: brcm,bcm2835-vec -+ enum: -+ - brcm,bcm2835-vec -+ - brcm,bcm2711-vec - - reg: - maxItems: 1 ---- a/arch/arm/boot/dts/bcm2711.dtsi -+++ b/arch/arm/boot/dts/bcm2711.dtsi -@@ -302,7 +302,7 @@ - }; - - vec: vec@7ec13000 { -- compatible = "brcm,bcm2835-vec"; -+ compatible = "brcm,bcm2711-vec"; - reg = <0x7ec13000 0x1000>; - clocks = <&clocks BCM2835_CLOCK_VEC>; - interrupts = <2 27>; ---- a/drivers/gpu/drm/vc4/vc4_vec.c -+++ b/drivers/gpu/drm/vc4/vc4_vec.c -@@ -154,9 +154,14 @@ - #define VEC_DAC_MISC_DAC_RST_N BIT(0) - - -+struct vc4_vec_variant { -+ u32 dac_config; -+}; -+ - /* General VEC hardware state. */ - struct vc4_vec { - struct platform_device *pdev; -+ const struct vc4_vec_variant *variant; - - struct drm_encoder *encoder; - struct drm_connector *connector; -@@ -451,10 +456,7 @@ static void vc4_vec_encoder_enable(struc - VEC_WRITE(VEC_CONFIG2, - VEC_CONFIG2_UV_DIG_DIS | VEC_CONFIG2_RGB_DIG_DIS); - VEC_WRITE(VEC_CONFIG3, VEC_CONFIG3_HORIZ_LEN_STD); -- VEC_WRITE(VEC_DAC_CONFIG, -- VEC_DAC_CONFIG_DAC_CTRL(0xc) | -- VEC_DAC_CONFIG_DRIVER_CTRL(0xc) | -- VEC_DAC_CONFIG_LDO_BIAS_CTRL(0x46)); -+ VEC_WRITE(VEC_DAC_CONFIG, vec->variant->dac_config); - - /* Mask all interrupts. */ - VEC_WRITE(VEC_MASK0, 0); -@@ -507,8 +509,21 @@ static const struct drm_encoder_helper_f - .atomic_mode_set = vc4_vec_encoder_atomic_mode_set, - }; - -+static const struct vc4_vec_variant bcm2835_vec_variant = { -+ .dac_config = VEC_DAC_CONFIG_DAC_CTRL(0xc) | -+ VEC_DAC_CONFIG_DRIVER_CTRL(0xc) | -+ VEC_DAC_CONFIG_LDO_BIAS_CTRL(0x46) -+}; -+ -+static const struct vc4_vec_variant bcm2711_vec_variant = { -+ .dac_config = VEC_DAC_CONFIG_DAC_CTRL(0x0) | -+ VEC_DAC_CONFIG_DRIVER_CTRL(0x80) | -+ VEC_DAC_CONFIG_LDO_BIAS_CTRL(0x61) -+}; -+ - static const struct of_device_id vc4_vec_dt_match[] = { -- { .compatible = "brcm,bcm2835-vec", .data = NULL }, -+ { .compatible = "brcm,bcm2835-vec", .data = &bcm2835_vec_variant }, -+ { .compatible = "brcm,bcm2711-vec", .data = &bcm2711_vec_variant }, - { /* sentinel */ }, - }; - -@@ -546,6 +561,8 @@ static int vc4_vec_bind(struct device *d - vec->encoder = &vc4_vec_encoder->base.base; - - vec->pdev = pdev; -+ vec->variant = (const struct vc4_vec_variant *) -+ of_device_get_match_data(dev); - vec->regs = vc4_ioremap_regs(pdev, 0); - if (IS_ERR(vec->regs)) - return PTR_ERR(vec->regs); |