kernel: bump 5.15 to 5.15.100

Manually rebased:
        bcm27xx/patches-5.15/950-0421-Support-RPi-DPI-interface-in-mode6-for-18-bit-color.patch
        bcm27xx/patches-5.15/950-0706-media-i2c-imx219-Scale-the-pixel-clock-rate-for-the-.patch
        ramips/patches-5.15/810-uvc-add-iPassion-iP2970-support.patch

Removed upstreamed:
        bcm27xx/patches-5.15/950-0707-drm-vc4-For-DPI-MEDIA_BUS_FMT_RGB565_1X16-is-mode-1-.patch[1]
        bcm27xx/patches-5.15/950-0596-drm-vc4-dpi-Add-option-for-inverting-pixel-clock-and.patch[2]
        ipq807x/0006-v5.16-arm64-dts-qcom-Fix-IPQ8074-PCIe-PHY-nodes.patch [3]
        ipq807x/0034-v6.1-arm64-dts-qcom-ipq8074-fix-PCIe-PHY-serdes-size.patch [4]
        ipq807x/0103-arm64-dts-qcom-ipq8074-fix-Gen2-PCIe-QMP-PHY.patch [5]
        ipq807x/0104-arm64-dts-qcom-ipq8074-fix-Gen3-PCIe-QMP-PHY.patch [6]
        ipq807x/0105-arm64-dts-qcom-ipq8074-correct-Gen2-PCIe-ranges.patch [7]
        ipq807x/0108-arm64-dts-qcom-ipq8074-fix-Gen3-PCIe-node.patch [8]
        ipq807x/0109-arm64-dts-qcom-ipq8074-correct-PCIe-QMP-PHY-output-c.patch [9]
        ipq807x/0132-arm64-dts-qcom-ipq8074-correct-USB3-QMP-PHY-s-clock-.patch [10]

All other patches automatically rebased.

1. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v5.15.99&id=d2991e6b30020e286f2dd9d3b4f43548c547caa6
2. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/drivers/gpu/drm/vc4/vc4_dpi.c?h=v5.15.100&id=8e04aaffb6de5f1ae61de7b671c1531172ccf429
3. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/arch/arm64/boot/dts/qcom/ipq8074.dtsi?h=v5.15.99&id=a55a645aa303a3f7ec37db69822d5420657626da
4. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/arch/arm64/boot/dts/qcom/ipq8074.dtsi?h=v5.15.99&id=d9df682bcea57fa25f37bbf17eae56fa05662635
5. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/arch/arm64/boot/dts/qcom/ipq8074.dtsi?h=v5.15.99&id=7e6eeb5fb3aa9e5feffdb6e137dcc06f5f6410e1
6. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/arch/arm64/boot/dts/qcom/ipq8074.dtsi?h=v5.15.99&id=e88204931d9a60634cd50bbc679f045439c4b91d
7.  https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/arch/arm64/boot/dts/qcom/ipq8074.dtsi?h=v5.15.99&id=1563af0f28afd3b6d64ac79a2aecced3969c90bf
8. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/arch/arm64/boot/dts/qcom/ipq8074.dtsi?h=v5.15.99&id=feb8c71f015d416f1afe90e1f62cf51e47376c67
9. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/arch/arm64/boot/dts/qcom/ipq8074.dtsi?h=v5.15.99&id=69c7a270357a7d50ffd3471b14c60250041200e3
10. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/arch/arm64/boot/dts/qcom/ipq8074.dtsi?h=v5.15.99&id=dd3d021ae5471d98adf81f1e897431c8657d0a18

Build system: x86_64
Build-tested: bcm2711/RPi4B, ramips/tplink_archer-a6-v3
Run-tested: bcm2711/RPi4B, ramips/tplink_archer-a6-v3

Signed-off-by: John Audia <therealgraysky@proton.me>
Tested-by: Robert Marko <robimarko@gmail.com> #ipq807x/Dynalink WRX36
Tested-by: Stefan Lippers-Hollmann <s.l-h@gmx.de> #ipq807x/ax3600, x86_64/FW-7543B, ath79/tl-wdr3600, ipq806x/g10, ipq806x/nbg6817
This commit is contained in:
John Audia 2023-03-12 10:16:50 -04:00 committed by Hauke Mehrtens
parent fbfec3286e
commit d6d8851d12
149 changed files with 393 additions and 966 deletions

View File

@ -1,2 +1,2 @@
LINUX_VERSION-5.15 = .98 LINUX_VERSION-5.15 = .100
LINUX_KERNEL_HASH-5.15.98 = 7dc62cd3a45f95c9b60316a5886ea9406aee256308869dac1e4ec088fbb37787 LINUX_KERNEL_HASH-5.15.100 = f7a4ce870fc1ad879b49887f7f77ee79babdb66937d5acdb1465d53b388c1427

View File

@ -1,6 +1,6 @@
--- a/drivers/spi/Kconfig --- a/drivers/spi/Kconfig
+++ b/drivers/spi/Kconfig +++ b/drivers/spi/Kconfig
@@ -308,6 +308,12 @@ config SPI_DLN2 @@ -307,6 +307,12 @@ config SPI_DLN2
This driver can also be built as a module. If so, the module This driver can also be built as a module. If so, the module
will be called spi-dln2. will be called spi-dln2.

View File

@ -10,7 +10,7 @@ Signed-off-by: Abhimanyu Vishwakarma <Abhimanyu.Vishwakarma@imgtec.com>
--- a/drivers/mtd/spi-nor/core.c --- a/drivers/mtd/spi-nor/core.c
+++ b/drivers/mtd/spi-nor/core.c +++ b/drivers/mtd/spi-nor/core.c
@@ -3098,6 +3098,7 @@ int spi_nor_scan(struct spi_nor *nor, co @@ -3107,6 +3107,7 @@ int spi_nor_scan(struct spi_nor *nor, co
struct device *dev = nor->dev; struct device *dev = nor->dev;
struct mtd_info *mtd = &nor->mtd; struct mtd_info *mtd = &nor->mtd;
struct device_node *np = spi_nor_get_flash_node(nor); struct device_node *np = spi_nor_get_flash_node(nor);
@ -18,7 +18,7 @@ Signed-off-by: Abhimanyu Vishwakarma <Abhimanyu.Vishwakarma@imgtec.com>
int ret; int ret;
int i; int i;
@@ -3152,7 +3153,12 @@ int spi_nor_scan(struct spi_nor *nor, co @@ -3161,7 +3162,12 @@ int spi_nor_scan(struct spi_nor *nor, co
if (ret) if (ret)
return ret; return ret;

View File

@ -45,7 +45,7 @@ Submitted-by: Christopher Hill <ch6574@gmail.com>
--- a/drivers/mfd/Kconfig --- a/drivers/mfd/Kconfig
+++ b/drivers/mfd/Kconfig +++ b/drivers/mfd/Kconfig
@@ -2175,6 +2175,14 @@ config RAVE_SP_CORE @@ -2176,6 +2176,14 @@ config RAVE_SP_CORE
Select this to get support for the Supervisory Processor Select this to get support for the Supervisory Processor
device found on several devices in RAVE line of hardware. device found on several devices in RAVE line of hardware.

View File

@ -17,7 +17,7 @@ Link: https://patchwork.freedesktop.org/patch/msgid/20210819135931.895976-5-maxi
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c --- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
@@ -1748,7 +1748,7 @@ static irqreturn_t vc4_cec_irq_handler(i @@ -1749,7 +1749,7 @@ static irqreturn_t vc4_cec_irq_handler(i
return ret; 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); struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap);
/* clock period in microseconds */ /* clock period in microseconds */
@@ -1761,38 +1761,53 @@ static int vc4_hdmi_cec_adap_enable(stru @@ -1762,38 +1762,53 @@ static int vc4_hdmi_cec_adap_enable(stru
val |= ((4700 / usecs) << VC4_HDMI_CEC_CNT_TO_4700_US_SHIFT) | val |= ((4700 / usecs) << VC4_HDMI_CEC_CNT_TO_4700_US_SHIFT) |
((4500 / usecs) << VC4_HDMI_CEC_CNT_TO_4500_US_SHIFT); ((4500 / usecs) << VC4_HDMI_CEC_CNT_TO_4500_US_SHIFT);

View File

@ -24,7 +24,7 @@ Link: https://patchwork.freedesktop.org/patch/msgid/20210819135931.895976-6-maxi
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c --- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
@@ -1753,8 +1753,14 @@ static int vc4_hdmi_cec_enable(struct ce @@ -1754,8 +1754,14 @@ static int vc4_hdmi_cec_enable(struct ce
struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap); struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap);
/* clock period in microseconds */ /* clock period in microseconds */
const u32 usecs = 1000000 / CEC_CLOCK_FREQ; 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 | 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_4700_US_MASK |
VC4_HDMI_CEC_CNT_TO_4500_US_MASK); VC4_HDMI_CEC_CNT_TO_4500_US_MASK);
@@ -1797,6 +1803,8 @@ static int vc4_hdmi_cec_disable(struct c @@ -1798,6 +1804,8 @@ static int vc4_hdmi_cec_disable(struct c
HDMI_WRITE(HDMI_CEC_CNTRL_5, HDMI_READ(HDMI_CEC_CNTRL_5) | HDMI_WRITE(HDMI_CEC_CNTRL_5, HDMI_READ(HDMI_CEC_CNTRL_5) |
VC4_HDMI_CEC_TX_SW_RESET | VC4_HDMI_CEC_RX_SW_RESET); VC4_HDMI_CEC_TX_SW_RESET | VC4_HDMI_CEC_RX_SW_RESET);

View File

@ -20,7 +20,7 @@ Link: https://lore.kernel.org/r/20211025152903.1088803-9-maxime@cerno.tech
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c --- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
@@ -2386,7 +2386,7 @@ static const struct vc4_hdmi_variant bcm @@ -2387,7 +2387,7 @@ static const struct vc4_hdmi_variant bcm
.encoder_type = VC4_ENCODER_TYPE_HDMI0, .encoder_type = VC4_ENCODER_TYPE_HDMI0,
.debugfs_name = "hdmi0_regs", .debugfs_name = "hdmi0_regs",
.card_name = "vc4-hdmi-0", .card_name = "vc4-hdmi-0",

View File

@ -281,9 +281,9 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
} }
static void vc5_hdmi_set_timings(struct vc4_hdmi *vc4_hdmi, static void vc5_hdmi_set_timings(struct vc4_hdmi *vc4_hdmi,
@@ -789,10 +856,13 @@ static void vc5_hdmi_set_timings(struct @@ -790,10 +857,13 @@ static void vc5_hdmi_set_timings(struct
VC4_SET_FIELD(mode->crtc_vtotal - VC4_SET_FIELD(mode->crtc_vtotal -
mode->crtc_vsync_end - interlaced, mode->crtc_vsync_end,
VC4_HDMI_VERTB_VBP)); VC4_HDMI_VERTB_VBP));
+ unsigned long flags; + unsigned long flags;
unsigned char gcp; unsigned char gcp;
@ -295,7 +295,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
HDMI_WRITE(HDMI_VEC_INTERFACE_XBAR, 0x354021); HDMI_WRITE(HDMI_VEC_INTERFACE_XBAR, 0x354021);
HDMI_WRITE(HDMI_HORZA, HDMI_WRITE(HDMI_HORZA,
(vsync_pos ? VC5_HDMI_HORZA_VPOS : 0) | (vsync_pos ? VC5_HDMI_HORZA_VPOS : 0) |
@@ -856,13 +926,18 @@ static void vc5_hdmi_set_timings(struct @@ -857,13 +927,18 @@ static void vc5_hdmi_set_timings(struct
HDMI_WRITE(HDMI_MISC_CONTROL, reg); HDMI_WRITE(HDMI_MISC_CONTROL, reg);
HDMI_WRITE(HDMI_CLOCK_STOP, 0); 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 = HDMI_READ(HDMI_FIFO_CTL);
drift &= VC4_HDMI_FIFO_VALID_WRITE_MASK; drift &= VC4_HDMI_FIFO_VALID_WRITE_MASK;
@@ -870,12 +945,20 @@ static void vc4_hdmi_recenter_fifo(struc @@ -871,12 +946,20 @@ static void vc4_hdmi_recenter_fifo(struc
drift & ~VC4_HDMI_FIFO_CTL_RECENTER); drift & ~VC4_HDMI_FIFO_CTL_RECENTER);
HDMI_WRITE(HDMI_FIFO_CTL, HDMI_WRITE(HDMI_FIFO_CTL,
drift | VC4_HDMI_FIFO_CTL_RECENTER); 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) & ret = wait_for(HDMI_READ(HDMI_FIFO_CTL) &
VC4_HDMI_FIFO_CTL_RECENTER_DONE, 1); VC4_HDMI_FIFO_CTL_RECENTER_DONE, 1);
WARN_ONCE(ret, "Timeout waiting for " WARN_ONCE(ret, "Timeout waiting for "
@@ -909,6 +992,7 @@ static void vc4_hdmi_encoder_pre_crtc_co @@ -910,6 +993,7 @@ static void vc4_hdmi_encoder_pre_crtc_co
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder); struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
unsigned long pixel_rate = vc4_conn_state->pixel_rate; unsigned long pixel_rate = vc4_conn_state->pixel_rate;
unsigned long bvb_rate, hsm_rate; unsigned long bvb_rate, hsm_rate;
@ -343,7 +343,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
int ret; int ret;
/* /*
@@ -977,11 +1061,15 @@ static void vc4_hdmi_encoder_pre_crtc_co @@ -978,11 +1062,15 @@ static void vc4_hdmi_encoder_pre_crtc_co
if (vc4_hdmi->variant->phy_init) if (vc4_hdmi->variant->phy_init)
vc4_hdmi->variant->phy_init(vc4_hdmi, vc4_conn_state); 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) if (vc4_hdmi->variant->set_timings)
vc4_hdmi->variant->set_timings(vc4_hdmi, conn_state, mode); vc4_hdmi->variant->set_timings(vc4_hdmi, conn_state, mode);
@@ -1001,6 +1089,7 @@ static void vc4_hdmi_encoder_pre_crtc_en @@ -1002,6 +1090,7 @@ static void vc4_hdmi_encoder_pre_crtc_en
struct drm_display_mode *mode = &encoder->crtc->state->adjusted_mode; struct drm_display_mode *mode = &encoder->crtc->state->adjusted_mode;
struct vc4_hdmi_encoder *vc4_encoder = to_vc4_hdmi_encoder(encoder); struct vc4_hdmi_encoder *vc4_encoder = to_vc4_hdmi_encoder(encoder);
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(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 && if (vc4_encoder->hdmi_monitor &&
drm_default_rgb_quant_range(mode) == HDMI_QUANTIZATION_RANGE_LIMITED) { drm_default_rgb_quant_range(mode) == HDMI_QUANTIZATION_RANGE_LIMITED) {
@@ -1015,7 +1104,9 @@ static void vc4_hdmi_encoder_pre_crtc_en @@ -1016,7 +1105,9 @@ static void vc4_hdmi_encoder_pre_crtc_en
vc4_encoder->limited_rgb_range = false; 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, static void vc4_hdmi_encoder_post_crtc_enable(struct drm_encoder *encoder,
@@ -1026,8 +1117,11 @@ static void vc4_hdmi_encoder_post_crtc_e @@ -1027,8 +1118,11 @@ static void vc4_hdmi_encoder_post_crtc_e
struct vc4_hdmi_encoder *vc4_encoder = to_vc4_hdmi_encoder(encoder); struct vc4_hdmi_encoder *vc4_encoder = to_vc4_hdmi_encoder(encoder);
bool hsync_pos = mode->flags & DRM_MODE_FLAG_PHSYNC; bool hsync_pos = mode->flags & DRM_MODE_FLAG_PHSYNC;
bool vsync_pos = mode->flags & DRM_MODE_FLAG_PVSYNC; 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, HDMI_WRITE(HDMI_VID_CTL,
VC4_HD_VID_CTL_ENABLE | VC4_HD_VID_CTL_ENABLE |
VC4_HD_VID_CTL_CLRRGB | VC4_HD_VID_CTL_CLRRGB |
@@ -1044,6 +1138,8 @@ static void vc4_hdmi_encoder_post_crtc_e @@ -1045,6 +1139,8 @@ static void vc4_hdmi_encoder_post_crtc_e
HDMI_READ(HDMI_SCHEDULER_CONTROL) | HDMI_READ(HDMI_SCHEDULER_CONTROL) |
VC4_HDMI_SCHEDULER_CONTROL_MODE_HDMI); 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) & ret = wait_for(HDMI_READ(HDMI_SCHEDULER_CONTROL) &
VC4_HDMI_SCHEDULER_CONTROL_HDMI_ACTIVE, 1000); VC4_HDMI_SCHEDULER_CONTROL_HDMI_ACTIVE, 1000);
WARN_ONCE(ret, "Timeout waiting for " WARN_ONCE(ret, "Timeout waiting for "
@@ -1056,6 +1152,8 @@ static void vc4_hdmi_encoder_post_crtc_e @@ -1057,6 +1153,8 @@ static void vc4_hdmi_encoder_post_crtc_e
HDMI_READ(HDMI_SCHEDULER_CONTROL) & HDMI_READ(HDMI_SCHEDULER_CONTROL) &
~VC4_HDMI_SCHEDULER_CONTROL_MODE_HDMI); ~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) & ret = wait_for(!(HDMI_READ(HDMI_SCHEDULER_CONTROL) &
VC4_HDMI_SCHEDULER_CONTROL_HDMI_ACTIVE), 1000); VC4_HDMI_SCHEDULER_CONTROL_HDMI_ACTIVE), 1000);
WARN_ONCE(ret, "Timeout waiting for " WARN_ONCE(ret, "Timeout waiting for "
@@ -1063,6 +1161,8 @@ static void vc4_hdmi_encoder_post_crtc_e @@ -1064,6 +1162,8 @@ static void vc4_hdmi_encoder_post_crtc_e
} }
if (vc4_encoder->hdmi_monitor) { if (vc4_encoder->hdmi_monitor) {
@ -416,7 +416,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
WARN_ON(!(HDMI_READ(HDMI_SCHEDULER_CONTROL) & WARN_ON(!(HDMI_READ(HDMI_SCHEDULER_CONTROL) &
VC4_HDMI_SCHEDULER_CONTROL_HDMI_ACTIVE)); VC4_HDMI_SCHEDULER_CONTROL_HDMI_ACTIVE));
HDMI_WRITE(HDMI_SCHEDULER_CONTROL, HDMI_WRITE(HDMI_SCHEDULER_CONTROL,
@@ -1072,6 +1172,8 @@ static void vc4_hdmi_encoder_post_crtc_e @@ -1073,6 +1173,8 @@ static void vc4_hdmi_encoder_post_crtc_e
HDMI_WRITE(HDMI_RAM_PACKET_CONFIG, HDMI_WRITE(HDMI_RAM_PACKET_CONFIG,
VC4_HDMI_RAM_PACKET_ENABLE); VC4_HDMI_RAM_PACKET_ENABLE);
@ -425,7 +425,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
vc4_hdmi_set_infoframes(encoder); vc4_hdmi_set_infoframes(encoder);
} }
@@ -1195,6 +1297,7 @@ static void vc4_hdmi_audio_set_mai_clock @@ -1196,6 +1298,7 @@ static void vc4_hdmi_audio_set_mai_clock
unsigned int samplerate) unsigned int samplerate)
{ {
u32 hsm_clock = clk_get_rate(vc4_hdmi->audio_clock); 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; unsigned long n, m;
rational_best_approximation(hsm_clock, samplerate, rational_best_approximation(hsm_clock, samplerate,
@@ -1204,9 +1307,11 @@ static void vc4_hdmi_audio_set_mai_clock @@ -1205,9 +1308,11 @@ static void vc4_hdmi_audio_set_mai_clock
VC4_HD_MAI_SMP_M_SHIFT) + 1, VC4_HD_MAI_SMP_M_SHIFT) + 1,
&n, &m); &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) static void vc4_hdmi_set_n_cts(struct vc4_hdmi *vc4_hdmi, unsigned int samplerate)
@@ -1217,6 +1322,8 @@ static void vc4_hdmi_set_n_cts(struct vc @@ -1218,6 +1323,8 @@ static void vc4_hdmi_set_n_cts(struct vc
u32 n, cts; u32 n, cts;
u64 tmp; u64 tmp;
@ -454,7 +454,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
n = 128 * samplerate / 1000; n = 128 * samplerate / 1000;
tmp = (u64)(mode->clock * 1000) * n; tmp = (u64)(mode->clock * 1000) * n;
do_div(tmp, 128 * samplerate); do_div(tmp, 128 * samplerate);
@@ -1246,6 +1353,7 @@ static int vc4_hdmi_audio_startup(struct @@ -1247,6 +1354,7 @@ static int vc4_hdmi_audio_startup(struct
{ {
struct vc4_hdmi *vc4_hdmi = dev_get_drvdata(dev); struct vc4_hdmi *vc4_hdmi = dev_get_drvdata(dev);
struct drm_encoder *encoder = &vc4_hdmi->encoder.base.base; 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 * If the HDMI encoder hasn't probed, or the encoder is
@@ -1257,12 +1365,14 @@ static int vc4_hdmi_audio_startup(struct @@ -1258,12 +1366,14 @@ static int vc4_hdmi_audio_startup(struct
vc4_hdmi->audio.streaming = true; vc4_hdmi->audio.streaming = true;
@ -477,7 +477,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
if (vc4_hdmi->variant->phy_rng_enable) if (vc4_hdmi->variant->phy_rng_enable)
vc4_hdmi->variant->phy_rng_enable(vc4_hdmi); vc4_hdmi->variant->phy_rng_enable(vc4_hdmi);
@@ -1274,6 +1384,7 @@ static void vc4_hdmi_audio_reset(struct @@ -1275,6 +1385,7 @@ static void vc4_hdmi_audio_reset(struct
{ {
struct drm_encoder *encoder = &vc4_hdmi->encoder.base.base; struct drm_encoder *encoder = &vc4_hdmi->encoder.base.base;
struct device *dev = &vc4_hdmi->pdev->dev; struct device *dev = &vc4_hdmi->pdev->dev;
@ -485,7 +485,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
int ret; int ret;
vc4_hdmi->audio.streaming = false; vc4_hdmi->audio.streaming = false;
@@ -1281,20 +1392,29 @@ static void vc4_hdmi_audio_reset(struct @@ -1282,20 +1393,29 @@ static void vc4_hdmi_audio_reset(struct
if (ret) if (ret)
dev_err(dev, "Failed to stop audio infoframe: %d\n", 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) if (vc4_hdmi->variant->phy_rng_disable)
vc4_hdmi->variant->phy_rng_disable(vc4_hdmi); vc4_hdmi->variant->phy_rng_disable(vc4_hdmi);
@@ -1349,6 +1469,7 @@ static int vc4_hdmi_audio_prepare(struct @@ -1350,6 +1470,7 @@ static int vc4_hdmi_audio_prepare(struct
struct drm_encoder *encoder = &vc4_hdmi->encoder.base.base; struct drm_encoder *encoder = &vc4_hdmi->encoder.base.base;
unsigned int sample_rate = params->sample_rate; unsigned int sample_rate = params->sample_rate;
unsigned int channels = params->channels; unsigned int channels = params->channels;
@ -523,7 +523,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
u32 audio_packet_config, channel_mask; u32 audio_packet_config, channel_mask;
u32 channel_map; u32 channel_map;
u32 mai_audio_format; u32 mai_audio_format;
@@ -1357,14 +1478,15 @@ static int vc4_hdmi_audio_prepare(struct @@ -1358,14 +1479,15 @@ static int vc4_hdmi_audio_prepare(struct
dev_dbg(dev, "%s: %u Hz, %d bit, %d channels\n", __func__, dev_dbg(dev, "%s: %u Hz, %d bit, %d channels\n", __func__,
sample_rate, params->sample_width, channels); 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); mai_sample_rate = sample_rate_to_mai_fmt(sample_rate);
if (params->iec.status[0] & IEC958_AES0_NONAUDIO && if (params->iec.status[0] & IEC958_AES0_NONAUDIO &&
params->channels == 8) params->channels == 8)
@@ -1402,8 +1524,11 @@ static int vc4_hdmi_audio_prepare(struct @@ -1403,8 +1525,11 @@ static int vc4_hdmi_audio_prepare(struct
channel_map = vc4_hdmi->variant->channel_map(vc4_hdmi, channel_mask); channel_map = vc4_hdmi->variant->channel_map(vc4_hdmi, channel_mask);
HDMI_WRITE(HDMI_MAI_CHANNEL_MAP, channel_map); HDMI_WRITE(HDMI_MAI_CHANNEL_MAP, channel_map);
HDMI_WRITE(HDMI_AUDIO_PACKET_CONFIG, audio_packet_config); 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)); memcpy(&vc4_hdmi->audio.infoframe, &params->cea, sizeof(params->cea));
vc4_hdmi_set_audio_infoframe(encoder); vc4_hdmi_set_audio_infoframe(encoder);
@@ -1677,6 +1802,8 @@ static void vc4_cec_read_msg(struct vc4_ @@ -1678,6 +1803,8 @@ static void vc4_cec_read_msg(struct vc4_
struct cec_msg *msg = &vc4_hdmi->cec_rx_msg; struct cec_msg *msg = &vc4_hdmi->cec_rx_msg;
unsigned int i; 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) >> msg->len = 1 + ((cntrl1 & VC4_HDMI_CEC_REC_WRD_CNT_MASK) >>
VC4_HDMI_CEC_REC_WRD_CNT_SHIFT); VC4_HDMI_CEC_REC_WRD_CNT_SHIFT);
@@ -1695,11 +1822,12 @@ static void vc4_cec_read_msg(struct vc4_ @@ -1696,11 +1823,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); cntrl1 = HDMI_READ(HDMI_CEC_CNTRL_1);
vc4_hdmi->cec_tx_ok = cntrl1 & VC4_HDMI_CEC_TX_STATUS_GOOD; vc4_hdmi->cec_tx_ok = cntrl1 & VC4_HDMI_CEC_TX_STATUS_GOOD;
cntrl1 &= ~VC4_HDMI_CEC_START_XMIT_BEGIN; cntrl1 &= ~VC4_HDMI_CEC_START_XMIT_BEGIN;
@@ -1708,11 +1836,24 @@ static irqreturn_t vc4_cec_irq_handler_t @@ -1709,11 +1837,24 @@ static irqreturn_t vc4_cec_irq_handler_t
return IRQ_WAKE_THREAD; return IRQ_WAKE_THREAD;
} }
@ -603,7 +603,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
vc4_hdmi->cec_rx_msg.len = 0; vc4_hdmi->cec_rx_msg.len = 0;
cntrl1 = HDMI_READ(HDMI_CEC_CNTRL_1); cntrl1 = HDMI_READ(HDMI_CEC_CNTRL_1);
vc4_cec_read_msg(vc4_hdmi, cntrl1); vc4_cec_read_msg(vc4_hdmi, cntrl1);
@@ -1725,6 +1866,18 @@ static irqreturn_t vc4_cec_irq_handler_r @@ -1726,6 +1867,18 @@ static irqreturn_t vc4_cec_irq_handler_r
return IRQ_WAKE_THREAD; 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) static irqreturn_t vc4_cec_irq_handler(int irq, void *priv)
{ {
struct vc4_hdmi *vc4_hdmi = priv; struct vc4_hdmi *vc4_hdmi = priv;
@@ -1735,14 +1888,17 @@ static irqreturn_t vc4_cec_irq_handler(i @@ -1736,14 +1889,17 @@ static irqreturn_t vc4_cec_irq_handler(i
if (!(stat & VC4_HDMI_CPU_CEC)) if (!(stat & VC4_HDMI_CPU_CEC))
return IRQ_NONE; return IRQ_NONE;
@ -642,7 +642,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
return ret; return ret;
} }
@@ -1751,6 +1907,7 @@ static int vc4_hdmi_cec_enable(struct ce @@ -1752,6 +1908,7 @@ static int vc4_hdmi_cec_enable(struct ce
struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap); struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap);
/* clock period in microseconds */ /* clock period in microseconds */
const u32 usecs = 1000000 / CEC_CLOCK_FREQ; const u32 usecs = 1000000 / CEC_CLOCK_FREQ;
@ -650,7 +650,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
u32 val; u32 val;
int ret; int ret;
@@ -1758,6 +1915,8 @@ static int vc4_hdmi_cec_enable(struct ce @@ -1759,6 +1916,8 @@ static int vc4_hdmi_cec_enable(struct ce
if (ret) if (ret)
return ret; return ret;
@ -659,7 +659,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
val = HDMI_READ(HDMI_CEC_CNTRL_5); val = HDMI_READ(HDMI_CEC_CNTRL_5);
val &= ~(VC4_HDMI_CEC_TX_SW_RESET | VC4_HDMI_CEC_RX_SW_RESET | 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_4700_US_MASK |
@@ -1788,12 +1947,17 @@ static int vc4_hdmi_cec_enable(struct ce @@ -1789,12 +1948,17 @@ static int vc4_hdmi_cec_enable(struct ce
if (!vc4_hdmi->variant->external_irq_controller) if (!vc4_hdmi->variant->external_irq_controller)
HDMI_WRITE(HDMI_CEC_CPU_MASK_CLEAR, VC4_HDMI_CPU_CEC); 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) if (!vc4_hdmi->variant->external_irq_controller)
HDMI_WRITE(HDMI_CEC_CPU_MASK_SET, VC4_HDMI_CPU_CEC); HDMI_WRITE(HDMI_CEC_CPU_MASK_SET, VC4_HDMI_CPU_CEC);
@@ -1801,6 +1965,8 @@ static int vc4_hdmi_cec_disable(struct c @@ -1802,6 +1966,8 @@ static int vc4_hdmi_cec_disable(struct c
HDMI_WRITE(HDMI_CEC_CNTRL_5, HDMI_READ(HDMI_CEC_CNTRL_5) | HDMI_WRITE(HDMI_CEC_CNTRL_5, HDMI_READ(HDMI_CEC_CNTRL_5) |
VC4_HDMI_CEC_TX_SW_RESET | VC4_HDMI_CEC_RX_SW_RESET); 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); pm_runtime_put(&vc4_hdmi->pdev->dev);
return 0; return 0;
@@ -1817,10 +1983,14 @@ static int vc4_hdmi_cec_adap_enable(stru @@ -1818,10 +1984,14 @@ static int vc4_hdmi_cec_adap_enable(stru
static int vc4_hdmi_cec_adap_log_addr(struct cec_adapter *adap, u8 log_addr) static int vc4_hdmi_cec_adap_log_addr(struct cec_adapter *adap, u8 log_addr)
{ {
struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap); struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap);
@ -701,7 +701,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
return 0; return 0;
} }
@@ -1829,6 +1999,7 @@ static int vc4_hdmi_cec_adap_transmit(st @@ -1830,6 +2000,7 @@ static int vc4_hdmi_cec_adap_transmit(st
{ {
struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap); struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap);
struct drm_device *dev = vc4_hdmi->connector.dev; struct drm_device *dev = vc4_hdmi->connector.dev;
@ -709,7 +709,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
u32 val; u32 val;
unsigned int i; unsigned int i;
@@ -1837,6 +2008,8 @@ static int vc4_hdmi_cec_adap_transmit(st @@ -1838,6 +2009,8 @@ static int vc4_hdmi_cec_adap_transmit(st
return -ENOMEM; return -ENOMEM;
} }
@ -718,7 +718,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
for (i = 0; i < msg->len; i += 4) for (i = 0; i < msg->len; i += 4)
HDMI_WRITE(HDMI_CEC_TX_DATA_1 + (i >> 2), HDMI_WRITE(HDMI_CEC_TX_DATA_1 + (i >> 2),
(msg->msg[i]) | (msg->msg[i]) |
@@ -1852,6 +2025,9 @@ static int vc4_hdmi_cec_adap_transmit(st @@ -1853,6 +2026,9 @@ static int vc4_hdmi_cec_adap_transmit(st
val |= VC4_HDMI_CEC_START_XMIT_BEGIN; val |= VC4_HDMI_CEC_START_XMIT_BEGIN;
HDMI_WRITE(HDMI_CEC_CNTRL_1, val); HDMI_WRITE(HDMI_CEC_CNTRL_1, val);
@ -728,7 +728,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
return 0; return 0;
} }
@@ -1866,6 +2042,7 @@ static int vc4_hdmi_cec_init(struct vc4_ @@ -1867,6 +2043,7 @@ static int vc4_hdmi_cec_init(struct vc4_
struct cec_connector_info conn_info; struct cec_connector_info conn_info;
struct platform_device *pdev = vc4_hdmi->pdev; struct platform_device *pdev = vc4_hdmi->pdev;
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
@ -736,7 +736,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
u32 value; u32 value;
int ret; int ret;
@@ -1886,10 +2063,12 @@ static int vc4_hdmi_cec_init(struct vc4_ @@ -1887,10 +2064,12 @@ static int vc4_hdmi_cec_init(struct vc4_
cec_fill_conn_info_from_drm(&conn_info, &vc4_hdmi->connector); cec_fill_conn_info_from_drm(&conn_info, &vc4_hdmi->connector);
cec_s_conn_info(vc4_hdmi->cec_adap, &conn_info); 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); vc4_hdmi_cec_update_clk_div(vc4_hdmi);
@@ -1908,7 +2087,9 @@ static int vc4_hdmi_cec_init(struct vc4_ @@ -1909,7 +2088,9 @@ static int vc4_hdmi_cec_init(struct vc4_
if (ret) if (ret)
goto err_remove_cec_rx_handler; goto err_remove_cec_rx_handler;
} else { } else {
@ -759,7 +759,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
ret = request_threaded_irq(platform_get_irq(pdev, 0), ret = request_threaded_irq(platform_get_irq(pdev, 0),
vc4_cec_irq_handler, vc4_cec_irq_handler,
@@ -2178,6 +2359,7 @@ static int vc4_hdmi_bind(struct device * @@ -2179,6 +2360,7 @@ static int vc4_hdmi_bind(struct device *
vc4_hdmi = devm_kzalloc(dev, sizeof(*vc4_hdmi), GFP_KERNEL); vc4_hdmi = devm_kzalloc(dev, sizeof(*vc4_hdmi), GFP_KERNEL);
if (!vc4_hdmi) if (!vc4_hdmi)
return -ENOMEM; return -ENOMEM;

View File

@ -169,7 +169,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
} }
static void vc4_hdmi_encoder_disable(struct drm_encoder *encoder) static void vc4_hdmi_encoder_disable(struct drm_encoder *encoder)
@@ -995,6 +1024,8 @@ static void vc4_hdmi_encoder_pre_crtc_co @@ -996,6 +1025,8 @@ static void vc4_hdmi_encoder_pre_crtc_co
unsigned long flags; unsigned long flags;
int ret; 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 * As stated in RPi's vc4 firmware "HDMI state machine (HSM) clock must
* be faster than pixel clock, infinitesimally faster, tested in * be faster than pixel clock, infinitesimally faster, tested in
@@ -1015,13 +1046,13 @@ static void vc4_hdmi_encoder_pre_crtc_co @@ -1016,13 +1047,13 @@ static void vc4_hdmi_encoder_pre_crtc_co
ret = clk_set_min_rate(vc4_hdmi->hsm_clock, hsm_rate); ret = clk_set_min_rate(vc4_hdmi->hsm_clock, hsm_rate);
if (ret) { if (ret) {
DRM_ERROR("Failed to set HSM clock rate: %d\n", 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); ret = clk_set_rate(vc4_hdmi->pixel_clock, pixel_rate);
@@ -1073,13 +1104,16 @@ static void vc4_hdmi_encoder_pre_crtc_co @@ -1074,13 +1105,16 @@ static void vc4_hdmi_encoder_pre_crtc_co
if (vc4_hdmi->variant->set_timings) if (vc4_hdmi->variant->set_timings)
vc4_hdmi->variant->set_timings(vc4_hdmi, conn_state, mode); vc4_hdmi->variant->set_timings(vc4_hdmi, conn_state, mode);
@ -212,7 +212,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
return; return;
} }
@@ -1091,6 +1125,8 @@ static void vc4_hdmi_encoder_pre_crtc_en @@ -1092,6 +1126,8 @@ static void vc4_hdmi_encoder_pre_crtc_en
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder); struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
unsigned long flags; unsigned long flags;
@ -221,7 +221,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
if (vc4_encoder->hdmi_monitor && if (vc4_encoder->hdmi_monitor &&
drm_default_rgb_quant_range(mode) == HDMI_QUANTIZATION_RANGE_LIMITED) { drm_default_rgb_quant_range(mode) == HDMI_QUANTIZATION_RANGE_LIMITED) {
if (vc4_hdmi->variant->csc_setup) if (vc4_hdmi->variant->csc_setup)
@@ -1107,6 +1143,8 @@ static void vc4_hdmi_encoder_pre_crtc_en @@ -1108,6 +1144,8 @@ static void vc4_hdmi_encoder_pre_crtc_en
spin_lock_irqsave(&vc4_hdmi->hw_lock, flags); spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
HDMI_WRITE(HDMI_FIFO_CTL, VC4_HDMI_FIFO_CTL_MASTER_SLAVE_N); HDMI_WRITE(HDMI_FIFO_CTL, VC4_HDMI_FIFO_CTL_MASTER_SLAVE_N);
spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags); 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, static void vc4_hdmi_encoder_post_crtc_enable(struct drm_encoder *encoder,
@@ -1120,6 +1158,8 @@ static void vc4_hdmi_encoder_post_crtc_e @@ -1121,6 +1159,8 @@ static void vc4_hdmi_encoder_post_crtc_e
unsigned long flags; unsigned long flags;
int ret; int ret;
@ -239,7 +239,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
spin_lock_irqsave(&vc4_hdmi->hw_lock, flags); spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
HDMI_WRITE(HDMI_VID_CTL, HDMI_WRITE(HDMI_VID_CTL,
@@ -1179,6 +1219,8 @@ static void vc4_hdmi_encoder_post_crtc_e @@ -1180,6 +1220,8 @@ static void vc4_hdmi_encoder_post_crtc_e
vc4_hdmi_recenter_fifo(vc4_hdmi); vc4_hdmi_recenter_fifo(vc4_hdmi);
vc4_hdmi_enable_scrambling(encoder); 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) static void vc4_hdmi_encoder_enable(struct drm_encoder *encoder)
@@ -1322,6 +1364,7 @@ static void vc4_hdmi_set_n_cts(struct vc @@ -1323,6 +1365,7 @@ static void vc4_hdmi_set_n_cts(struct vc
u32 n, cts; u32 n, cts;
u64 tmp; u64 tmp;
@ -256,7 +256,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
lockdep_assert_held(&vc4_hdmi->hw_lock); lockdep_assert_held(&vc4_hdmi->hw_lock);
n = 128 * samplerate / 1000; n = 128 * samplerate / 1000;
@@ -1355,13 +1398,17 @@ static int vc4_hdmi_audio_startup(struct @@ -1356,13 +1399,17 @@ static int vc4_hdmi_audio_startup(struct
struct drm_encoder *encoder = &vc4_hdmi->encoder.base.base; struct drm_encoder *encoder = &vc4_hdmi->encoder.base.base;
unsigned long flags; unsigned long flags;
@ -275,7 +275,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
vc4_hdmi->audio.streaming = true; vc4_hdmi->audio.streaming = true;
@@ -1377,6 +1424,8 @@ static int vc4_hdmi_audio_startup(struct @@ -1378,6 +1425,8 @@ static int vc4_hdmi_audio_startup(struct
if (vc4_hdmi->variant->phy_rng_enable) if (vc4_hdmi->variant->phy_rng_enable)
vc4_hdmi->variant->phy_rng_enable(vc4_hdmi); vc4_hdmi->variant->phy_rng_enable(vc4_hdmi);
@ -284,7 +284,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
return 0; return 0;
} }
@@ -1387,6 +1436,8 @@ static void vc4_hdmi_audio_reset(struct @@ -1388,6 +1437,8 @@ static void vc4_hdmi_audio_reset(struct
unsigned long flags; unsigned long flags;
int ret; int ret;
@ -293,7 +293,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
vc4_hdmi->audio.streaming = false; vc4_hdmi->audio.streaming = false;
ret = vc4_hdmi_stop_packet(encoder, HDMI_INFOFRAME_TYPE_AUDIO, false); ret = vc4_hdmi_stop_packet(encoder, HDMI_INFOFRAME_TYPE_AUDIO, false);
if (ret) if (ret)
@@ -1406,6 +1457,8 @@ static void vc4_hdmi_audio_shutdown(stru @@ -1407,6 +1458,8 @@ static void vc4_hdmi_audio_shutdown(stru
struct vc4_hdmi *vc4_hdmi = dev_get_drvdata(dev); struct vc4_hdmi *vc4_hdmi = dev_get_drvdata(dev);
unsigned long flags; unsigned long flags;
@ -302,7 +302,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
spin_lock_irqsave(&vc4_hdmi->hw_lock, flags); spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
HDMI_WRITE(HDMI_MAI_CTL, HDMI_WRITE(HDMI_MAI_CTL,
@@ -1420,6 +1473,8 @@ static void vc4_hdmi_audio_shutdown(stru @@ -1421,6 +1474,8 @@ static void vc4_hdmi_audio_shutdown(stru
vc4_hdmi->audio.streaming = false; vc4_hdmi->audio.streaming = false;
vc4_hdmi_audio_reset(vc4_hdmi); 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) static int sample_rate_to_mai_fmt(int samplerate)
@@ -1478,6 +1533,8 @@ static int vc4_hdmi_audio_prepare(struct @@ -1479,6 +1534,8 @@ static int vc4_hdmi_audio_prepare(struct
dev_dbg(dev, "%s: %u Hz, %d bit, %d channels\n", __func__, dev_dbg(dev, "%s: %u Hz, %d bit, %d channels\n", __func__,
sample_rate, params->sample_width, channels); 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); vc4_hdmi_audio_set_mai_clock(vc4_hdmi, sample_rate);
spin_lock_irqsave(&vc4_hdmi->hw_lock, flags); spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
@@ -1532,6 +1589,8 @@ static int vc4_hdmi_audio_prepare(struct @@ -1533,6 +1590,8 @@ static int vc4_hdmi_audio_prepare(struct
memcpy(&vc4_hdmi->audio.infoframe, &params->cea, sizeof(params->cea)); memcpy(&vc4_hdmi->audio.infoframe, &params->cea, sizeof(params->cea));
vc4_hdmi_set_audio_infoframe(encoder); vc4_hdmi_set_audio_infoframe(encoder);
@ -329,7 +329,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
return 0; return 0;
} }
@@ -1574,7 +1633,9 @@ static int vc4_hdmi_audio_get_eld(struct @@ -1575,7 +1634,9 @@ static int vc4_hdmi_audio_get_eld(struct
struct vc4_hdmi *vc4_hdmi = dev_get_drvdata(dev); struct vc4_hdmi *vc4_hdmi = dev_get_drvdata(dev);
struct drm_connector *connector = &vc4_hdmi->connector; struct drm_connector *connector = &vc4_hdmi->connector;
@ -339,7 +339,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
return 0; return 0;
} }
@@ -1911,6 +1972,17 @@ static int vc4_hdmi_cec_enable(struct ce @@ -1912,6 +1973,17 @@ static int vc4_hdmi_cec_enable(struct ce
u32 val; u32 val;
int ret; int ret;
@ -357,7 +357,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
ret = pm_runtime_resume_and_get(&vc4_hdmi->pdev->dev); ret = pm_runtime_resume_and_get(&vc4_hdmi->pdev->dev);
if (ret) if (ret)
return ret; return ret;
@@ -1957,6 +2029,17 @@ static int vc4_hdmi_cec_disable(struct c @@ -1958,6 +2030,17 @@ static int vc4_hdmi_cec_disable(struct c
struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap); struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap);
unsigned long flags; unsigned long flags;
@ -375,7 +375,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
spin_lock_irqsave(&vc4_hdmi->hw_lock, flags); spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
if (!vc4_hdmi->variant->external_irq_controller) if (!vc4_hdmi->variant->external_irq_controller)
@@ -1985,6 +2068,17 @@ static int vc4_hdmi_cec_adap_log_addr(st @@ -1986,6 +2069,17 @@ static int vc4_hdmi_cec_adap_log_addr(st
struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap); struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap);
unsigned long flags; unsigned long flags;
@ -393,7 +393,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
spin_lock_irqsave(&vc4_hdmi->hw_lock, flags); spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
HDMI_WRITE(HDMI_CEC_CNTRL_1, HDMI_WRITE(HDMI_CEC_CNTRL_1,
(HDMI_READ(HDMI_CEC_CNTRL_1) & ~VC4_HDMI_CEC_ADDR_MASK) | (HDMI_READ(HDMI_CEC_CNTRL_1) & ~VC4_HDMI_CEC_ADDR_MASK) |
@@ -2003,6 +2097,17 @@ static int vc4_hdmi_cec_adap_transmit(st @@ -2004,6 +2098,17 @@ static int vc4_hdmi_cec_adap_transmit(st
u32 val; u32 val;
unsigned int i; unsigned int i;
@ -411,7 +411,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
if (msg->len > 16) { if (msg->len > 16) {
drm_err(dev, "Attempting to transmit too much data (%d)\n", msg->len); drm_err(dev, "Attempting to transmit too much data (%d)\n", msg->len);
return -ENOMEM; return -ENOMEM;
@@ -2359,6 +2464,7 @@ static int vc4_hdmi_bind(struct device * @@ -2360,6 +2465,7 @@ static int vc4_hdmi_bind(struct device *
vc4_hdmi = devm_kzalloc(dev, sizeof(*vc4_hdmi), GFP_KERNEL); vc4_hdmi = devm_kzalloc(dev, sizeof(*vc4_hdmi), GFP_KERNEL);
if (!vc4_hdmi) if (!vc4_hdmi)
return -ENOMEM; return -ENOMEM;

View File

@ -73,7 +73,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
return; return;
if (delayed_work_pending(&vc4_hdmi->scrambling_work)) if (delayed_work_pending(&vc4_hdmi->scrambling_work))
@@ -1017,8 +1019,8 @@ static void vc4_hdmi_encoder_pre_crtc_co @@ -1018,8 +1020,8 @@ static void vc4_hdmi_encoder_pre_crtc_co
vc4_hdmi_encoder_get_connector_state(encoder, state); vc4_hdmi_encoder_get_connector_state(encoder, state);
struct vc4_hdmi_connector_state *vc4_conn_state = struct vc4_hdmi_connector_state *vc4_conn_state =
conn_state_to_vc4_hdmi_conn_state(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 pixel_rate = vc4_conn_state->pixel_rate;
unsigned long bvb_rate, hsm_rate; unsigned long bvb_rate, hsm_rate;
unsigned long flags; unsigned long flags;
@@ -1120,9 +1122,9 @@ out: @@ -1121,9 +1123,9 @@ out:
static void vc4_hdmi_encoder_pre_crtc_enable(struct drm_encoder *encoder, static void vc4_hdmi_encoder_pre_crtc_enable(struct drm_encoder *encoder,
struct drm_atomic_state *state) struct drm_atomic_state *state)
{ {
@ -95,7 +95,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
unsigned long flags; unsigned long flags;
mutex_lock(&vc4_hdmi->mutex); mutex_lock(&vc4_hdmi->mutex);
@@ -1150,8 +1152,8 @@ static void vc4_hdmi_encoder_pre_crtc_en @@ -1151,8 +1153,8 @@ static void vc4_hdmi_encoder_pre_crtc_en
static void vc4_hdmi_encoder_post_crtc_enable(struct drm_encoder *encoder, static void vc4_hdmi_encoder_post_crtc_enable(struct drm_encoder *encoder,
struct drm_atomic_state *state) 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); struct vc4_hdmi_encoder *vc4_encoder = to_vc4_hdmi_encoder(encoder);
bool hsync_pos = mode->flags & DRM_MODE_FLAG_PHSYNC; bool hsync_pos = mode->flags & DRM_MODE_FLAG_PHSYNC;
bool vsync_pos = mode->flags & DRM_MODE_FLAG_PVSYNC; bool vsync_pos = mode->flags & DRM_MODE_FLAG_PVSYNC;
@@ -1227,6 +1229,19 @@ static void vc4_hdmi_encoder_enable(stru @@ -1228,6 +1230,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_MIN_FREQ 2400000000ULL
#define WIFI_2_4GHz_CH1_MAX_FREQ 2422000000ULL #define WIFI_2_4GHz_CH1_MAX_FREQ 2422000000ULL
@@ -1305,6 +1320,7 @@ vc4_hdmi_encoder_mode_valid(struct drm_e @@ -1306,6 +1321,7 @@ vc4_hdmi_encoder_mode_valid(struct drm_e
static const struct drm_encoder_helper_funcs vc4_hdmi_encoder_helper_funcs = { static const struct drm_encoder_helper_funcs vc4_hdmi_encoder_helper_funcs = {
.atomic_check = vc4_hdmi_encoder_atomic_check, .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, .mode_valid = vc4_hdmi_encoder_mode_valid,
.disable = vc4_hdmi_encoder_disable, .disable = vc4_hdmi_encoder_disable,
.enable = vc4_hdmi_encoder_enable, .enable = vc4_hdmi_encoder_enable,
@@ -1358,9 +1374,7 @@ static void vc4_hdmi_audio_set_mai_clock @@ -1359,9 +1375,7 @@ static void vc4_hdmi_audio_set_mai_clock
static void vc4_hdmi_set_n_cts(struct vc4_hdmi *vc4_hdmi, unsigned int samplerate) static void vc4_hdmi_set_n_cts(struct vc4_hdmi *vc4_hdmi, unsigned int samplerate)
{ {

View File

@ -19,7 +19,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c --- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
@@ -1406,20 +1406,36 @@ static inline struct vc4_hdmi *dai_to_hd @@ -1407,20 +1407,36 @@ static inline struct vc4_hdmi *dai_to_hd
return snd_soc_card_get_drvdata(card); return snd_soc_card_get_drvdata(card);
} }
@ -63,7 +63,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
mutex_unlock(&vc4_hdmi->mutex); mutex_unlock(&vc4_hdmi->mutex);
return -ENODEV; return -ENODEV;
} }
@@ -1549,6 +1565,11 @@ static int vc4_hdmi_audio_prepare(struct @@ -1550,6 +1566,11 @@ static int vc4_hdmi_audio_prepare(struct
mutex_lock(&vc4_hdmi->mutex); mutex_lock(&vc4_hdmi->mutex);

View File

@ -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) static void vc4_hdmi_csc_setup(struct vc4_hdmi *vc4_hdmi, bool enable)
@@ -1227,6 +1232,11 @@ static void vc4_hdmi_encoder_post_crtc_e @@ -1228,6 +1233,11 @@ static void vc4_hdmi_encoder_post_crtc_e
static void vc4_hdmi_encoder_enable(struct drm_encoder *encoder) 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, static void vc4_hdmi_encoder_atomic_mode_set(struct drm_encoder *encoder,
@@ -1408,14 +1418,12 @@ static inline struct vc4_hdmi *dai_to_hd @@ -1409,14 +1419,12 @@ static inline struct vc4_hdmi *dai_to_hd
static bool vc4_hdmi_audio_can_stream(struct vc4_hdmi *vc4_hdmi) static bool vc4_hdmi_audio_can_stream(struct vc4_hdmi *vc4_hdmi)
{ {

View File

@ -69,7 +69,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
if (delayed_work_pending(&vc4_hdmi->scrambling_work)) if (delayed_work_pending(&vc4_hdmi->scrambling_work))
cancel_delayed_work_sync(&vc4_hdmi->scrambling_work); cancel_delayed_work_sync(&vc4_hdmi->scrambling_work);
@@ -2522,6 +2516,14 @@ static int vc4_hdmi_bind(struct device * @@ -2523,6 +2517,14 @@ static int vc4_hdmi_bind(struct device *
vc4_hdmi->pdev = pdev; vc4_hdmi->pdev = pdev;
vc4_hdmi->variant = variant; vc4_hdmi->variant = variant;

View File

@ -109,7 +109,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
*/ */
--- a/drivers/gpu/drm/vc4/vc4_plane.c --- a/drivers/gpu/drm/vc4/vc4_plane.c
+++ b/drivers/gpu/drm/vc4/vc4_plane.c +++ b/drivers/gpu/drm/vc4/vc4_plane.c
@@ -525,11 +525,6 @@ static void vc4_plane_calc_load(struct d @@ -527,11 +527,6 @@ static void vc4_plane_calc_load(struct d
struct vc4_plane_state *vc4_state; struct vc4_plane_state *vc4_state;
struct drm_crtc_state *crtc_state; struct drm_crtc_state *crtc_state;
unsigned int vscale_factor; unsigned int vscale_factor;

View File

@ -44,7 +44,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c --- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
@@ -1801,10 +1801,11 @@ static void vc4_hdmi_audio_exit(struct v @@ -1802,10 +1802,11 @@ static void vc4_hdmi_audio_exit(struct v
static irqreturn_t vc4_hdmi_hpd_irq_thread(int irq, void *priv) static irqreturn_t vc4_hdmi_hpd_irq_thread(int irq, void *priv)
{ {
struct vc4_hdmi *vc4_hdmi = priv; struct vc4_hdmi *vc4_hdmi = priv;

View File

@ -20,7 +20,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
--- a/drivers/pinctrl/bcm/pinctrl-bcm2835.c --- a/drivers/pinctrl/bcm/pinctrl-bcm2835.c
+++ b/drivers/pinctrl/bcm/pinctrl-bcm2835.c +++ b/drivers/pinctrl/bcm/pinctrl-bcm2835.c
@@ -378,7 +378,7 @@ static const struct gpio_chip bcm2835_gp @@ -376,7 +376,7 @@ static const struct gpio_chip bcm2835_gp
.get = bcm2835_gpio_get, .get = bcm2835_gpio_get,
.set = bcm2835_gpio_set, .set = bcm2835_gpio_set,
.set_config = gpiochip_generic_config, .set_config = gpiochip_generic_config,
@ -29,7 +29,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
.ngpio = BCM2835_NUM_GPIOS, .ngpio = BCM2835_NUM_GPIOS,
.can_sleep = false, .can_sleep = false,
.of_gpio_ranges_fallback = bcm2835_of_gpio_ranges_fallback, .of_gpio_ranges_fallback = bcm2835_of_gpio_ranges_fallback,
@@ -395,7 +395,7 @@ static const struct gpio_chip bcm2711_gp @@ -393,7 +393,7 @@ static const struct gpio_chip bcm2711_gp
.get = bcm2835_gpio_get, .get = bcm2835_gpio_get,
.set = bcm2835_gpio_set, .set = bcm2835_gpio_set,
.set_config = gpiochip_generic_config, .set_config = gpiochip_generic_config,

View File

@ -18,7 +18,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
@@ -2608,7 +2608,7 @@ static void bcmgenet_init_tx_ring(struct @@ -2616,7 +2616,7 @@ static void bcmgenet_init_tx_ring(struct
bcmgenet_tdma_ring_writel(priv, index, 0, TDMA_PROD_INDEX); bcmgenet_tdma_ring_writel(priv, index, 0, TDMA_PROD_INDEX);
bcmgenet_tdma_ring_writel(priv, index, 0, TDMA_CONS_INDEX); bcmgenet_tdma_ring_writel(priv, index, 0, TDMA_CONS_INDEX);
@ -27,7 +27,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
/* Disable rate control for now */ /* Disable rate control for now */
bcmgenet_tdma_ring_writel(priv, index, flow_period_val, bcmgenet_tdma_ring_writel(priv, index, flow_period_val,
TDMA_FLOW_PERIOD); TDMA_FLOW_PERIOD);
@@ -4075,9 +4075,12 @@ static int bcmgenet_probe(struct platfor @@ -4083,9 +4083,12 @@ static int bcmgenet_probe(struct platfor
netif_set_real_num_rx_queues(priv->dev, priv->hw_params->rx_queues + 1); netif_set_real_num_rx_queues(priv->dev, priv->hw_params->rx_queues + 1);
/* Set default coalescing parameters */ /* Set default coalescing parameters */

View File

@ -20,7 +20,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.org>
--- a/drivers/net/ethernet/broadcom/genet/bcmmii.c --- a/drivers/net/ethernet/broadcom/genet/bcmmii.c
+++ b/drivers/net/ethernet/broadcom/genet/bcmmii.c +++ b/drivers/net/ethernet/broadcom/genet/bcmmii.c
@@ -293,6 +293,8 @@ int bcmgenet_mii_probe(struct net_device @@ -286,6 +286,8 @@ int bcmgenet_mii_probe(struct net_device
/* Communicate the integrated PHY revision */ /* Communicate the integrated PHY revision */
if (priv->internal_phy) if (priv->internal_phy)
phy_flags = priv->gphy_rev; phy_flags = priv->gphy_rev;

View File

@ -37,7 +37,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
static inline void bcmgenet_writel(u32 value, void __iomem *offset) static inline void bcmgenet_writel(u32 value, void __iomem *offset)
{ {
@@ -2439,6 +2442,11 @@ static void reset_umac(struct bcmgenet_p @@ -2447,6 +2450,11 @@ static void reset_umac(struct bcmgenet_p
bcmgenet_rbuf_ctrl_set(priv, 0); bcmgenet_rbuf_ctrl_set(priv, 0);
udelay(10); udelay(10);

View File

@ -14,7 +14,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
--- a/drivers/pinctrl/bcm/pinctrl-bcm2835.c --- a/drivers/pinctrl/bcm/pinctrl-bcm2835.c
+++ b/drivers/pinctrl/bcm/pinctrl-bcm2835.c +++ b/drivers/pinctrl/bcm/pinctrl-bcm2835.c
@@ -1339,7 +1339,7 @@ static int bcm2835_pinctrl_probe(struct @@ -1337,7 +1337,7 @@ static int bcm2835_pinctrl_probe(struct
girq->default_type = IRQ_TYPE_NONE; girq->default_type = IRQ_TYPE_NONE;
girq->handler = handle_level_irq; girq->handler = handle_level_irq;

View File

@ -24,7 +24,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
@@ -3257,7 +3257,7 @@ static void bcmgenet_get_hw_addr(struct @@ -3265,7 +3265,7 @@ static void bcmgenet_get_hw_addr(struct
} }
/* Returns a reusable dma control register value */ /* Returns a reusable dma control register value */
@ -33,7 +33,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
{ {
unsigned int i; unsigned int i;
u32 reg; u32 reg;
@@ -3282,6 +3282,14 @@ static u32 bcmgenet_dma_disable(struct b @@ -3290,6 +3290,14 @@ static u32 bcmgenet_dma_disable(struct b
udelay(10); udelay(10);
bcmgenet_umac_writel(priv, 0, UMAC_TX_FLUSH); bcmgenet_umac_writel(priv, 0, UMAC_TX_FLUSH);
@ -48,7 +48,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
return dma_ctrl; return dma_ctrl;
} }
@@ -3345,8 +3353,8 @@ static int bcmgenet_open(struct net_devi @@ -3353,8 +3361,8 @@ static int bcmgenet_open(struct net_devi
bcmgenet_set_hw_addr(priv, dev->dev_addr); bcmgenet_set_hw_addr(priv, dev->dev_addr);
@ -59,7 +59,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
/* Reinitialize TDMA and RDMA and SW housekeeping */ /* Reinitialize TDMA and RDMA and SW housekeeping */
ret = bcmgenet_init_dma(priv); ret = bcmgenet_init_dma(priv);
@@ -4204,7 +4212,7 @@ static int bcmgenet_resume(struct device @@ -4212,7 +4220,7 @@ static int bcmgenet_resume(struct device
bcmgenet_hfb_create_rxnfc_filter(priv, rule); bcmgenet_hfb_create_rxnfc_filter(priv, rule);
/* Disable RX/TX DMA and flush TX queues */ /* Disable RX/TX DMA and flush TX queues */

View File

@ -169,27 +169,27 @@ Signed-off-by: Joerg Quinten <aBUGSworstnightmare@gmail.com>
}, { }, {
--- a/drivers/gpu/drm/vc4/vc4_dpi.c --- a/drivers/gpu/drm/vc4/vc4_dpi.c
+++ b/drivers/gpu/drm/vc4/vc4_dpi.c +++ b/drivers/gpu/drm/vc4/vc4_dpi.c
@@ -165,10 +165,20 @@ static void vc4_dpi_encoder_enable(struc @@ -167,10 +167,20 @@ static void vc4_dpi_encoder_enable(struc
dpi_c |= VC4_SET_FIELD(DPI_FORMAT_18BIT_666_RGB_2, dpi_c |= VC4_SET_FIELD(DPI_FORMAT_18BIT_666_RGB_2,
DPI_FORMAT); DPI_FORMAT);
break; break;
+ case MEDIA_BUS_FMT_BGR666_1X24_CPADHI: + case MEDIA_BUS_FMT_BGR666_1X24_CPADHI:
+ dpi_c |= VC4_SET_FIELD(DPI_FORMAT_18BIT_666_RGB_2, + dpi_c |= VC4_SET_FIELD(DPI_FORMAT_18BIT_666_RGB_2,
+ DPI_FORMAT); + DPI_FORMAT);
+ dpi_c |= VC4_SET_FIELD(DPI_ORDER_BGR, DPI_ORDER); + dpi_c |= VC4_SET_FIELD(DPI_ORDER_BGR, DPI_ORDER);
+ break; + break;
case MEDIA_BUS_FMT_RGB666_1X18: case MEDIA_BUS_FMT_RGB666_1X18:
dpi_c |= VC4_SET_FIELD(DPI_FORMAT_18BIT_666_RGB_1, dpi_c |= VC4_SET_FIELD(DPI_FORMAT_18BIT_666_RGB_1,
DPI_FORMAT); DPI_FORMAT);
break; break;
+ case MEDIA_BUS_FMT_BGR666_1X18: + case MEDIA_BUS_FMT_BGR666_1X18:
+ dpi_c |= VC4_SET_FIELD(DPI_FORMAT_18BIT_666_RGB_1, + dpi_c |= VC4_SET_FIELD(DPI_FORMAT_18BIT_666_RGB_1,
+ DPI_FORMAT); + DPI_FORMAT);
+ dpi_c |= VC4_SET_FIELD(DPI_ORDER_BGR, DPI_ORDER); + dpi_c |= VC4_SET_FIELD(DPI_ORDER_BGR, DPI_ORDER);
+ break; + break;
case MEDIA_BUS_FMT_RGB565_1X16: case MEDIA_BUS_FMT_RGB565_1X16:
dpi_c |= VC4_SET_FIELD(DPI_FORMAT_16BIT_565_RGB_3, dpi_c |= VC4_SET_FIELD(DPI_FORMAT_16BIT_565_RGB_1,
DPI_FORMAT); DPI_FORMAT);
--- a/include/uapi/linux/media-bus-format.h --- a/include/uapi/linux/media-bus-format.h
+++ b/include/uapi/linux/media-bus-format.h +++ b/include/uapi/linux/media-bus-format.h
@@ -34,7 +34,7 @@ @@ -34,7 +34,7 @@

View File

@ -26,7 +26,7 @@ Link: https://lore.kernel.org/r/20211215091739.135042-3-maxime@cerno.tech
} hvs_formats[] = { } hvs_formats[] = {
{ {
.drm = DRM_FORMAT_XRGB8888, .drm = DRM_FORMAT_XRGB8888,
@@ -128,6 +129,12 @@ static const struct hvs_format { @@ -130,6 +131,12 @@ static const struct hvs_format {
.hvs = HVS_PIXEL_FORMAT_YCBCR_YUV422_2PLANE, .hvs = HVS_PIXEL_FORMAT_YCBCR_YUV422_2PLANE,
.pixel_order = HVS_PIXEL_ORDER_XYCRCB, .pixel_order = HVS_PIXEL_ORDER_XYCRCB,
}, },
@ -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) static const struct hvs_format *vc4_get_hvs_format(u32 drm_format)
@@ -758,47 +765,90 @@ static int vc4_plane_mode_set(struct drm @@ -760,47 +767,90 @@ static int vc4_plane_mode_set(struct drm
case DRM_FORMAT_MOD_BROADCOM_SAND128: case DRM_FORMAT_MOD_BROADCOM_SAND128:
case DRM_FORMAT_MOD_BROADCOM_SAND256: { case DRM_FORMAT_MOD_BROADCOM_SAND256: {
uint32_t param = fourcc_mod_broadcom_param(fb->modifier); 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); pitch0 = VC4_SET_FIELD(param, SCALER_TILE_HEIGHT);
@@ -951,7 +1001,8 @@ static int vc4_plane_mode_set(struct drm @@ -953,7 +1003,8 @@ static int vc4_plane_mode_set(struct drm
/* Pitch word 1/2 */ /* Pitch word 1/2 */
for (i = 1; i < num_planes; i++) { 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_dlist_write(vc4_state,
VC4_SET_FIELD(fb->pitches[i], VC4_SET_FIELD(fb->pitches[i],
SCALER_SRC_PITCH)); SCALER_SRC_PITCH));
@@ -1311,6 +1362,13 @@ static bool vc4_format_mod_supported(str @@ -1313,6 +1364,13 @@ static bool vc4_format_mod_supported(str
default: default:
return false; 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_RGBX1010102:
case DRM_FORMAT_BGRX1010102: case DRM_FORMAT_BGRX1010102:
case DRM_FORMAT_RGBA1010102: case DRM_FORMAT_RGBA1010102:
@@ -1343,8 +1401,11 @@ struct drm_plane *vc4_plane_init(struct @@ -1345,8 +1403,11 @@ struct drm_plane *vc4_plane_init(struct
struct drm_plane *plane = NULL; struct drm_plane *plane = NULL;
struct vc4_plane *vc4_plane; struct vc4_plane *vc4_plane;
u32 formats[ARRAY_SIZE(hvs_formats)]; 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[] = { static const uint64_t modifiers[] = {
DRM_FORMAT_MOD_BROADCOM_VC4_T_TILED, DRM_FORMAT_MOD_BROADCOM_VC4_T_TILED,
DRM_FORMAT_MOD_BROADCOM_SAND128, DRM_FORMAT_MOD_BROADCOM_SAND128,
@@ -1359,13 +1420,17 @@ struct drm_plane *vc4_plane_init(struct @@ -1361,13 +1422,17 @@ struct drm_plane *vc4_plane_init(struct
if (!vc4_plane) if (!vc4_plane)
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);

View File

@ -21,7 +21,7 @@ Link: https://lore.kernel.org/r/20211215091739.135042-4-maxime@cerno.tech
--- a/drivers/gpu/drm/vc4/vc4_plane.c --- a/drivers/gpu/drm/vc4/vc4_plane.c
+++ b/drivers/gpu/drm/vc4/vc4_plane.c +++ b/drivers/gpu/drm/vc4/vc4_plane.c
@@ -619,6 +619,51 @@ static int vc4_plane_allocate_lbm(struct @@ -621,6 +621,51 @@ static int vc4_plane_allocate_lbm(struct
return 0; 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 /* Writes out a full display list for an active plane to the plane's
* private dlist state. * private dlist state.
*/ */
@@ -1013,9 +1058,20 @@ static int vc4_plane_mode_set(struct drm @@ -1015,9 +1060,20 @@ static int vc4_plane_mode_set(struct drm
/* Colorspace conversion words */ /* Colorspace conversion words */
if (vc4_state->is_yuv) { 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; vc4_state->lbm_offset = 0;
@@ -1444,6 +1500,15 @@ struct drm_plane *vc4_plane_init(struct @@ -1446,6 +1502,15 @@ struct drm_plane *vc4_plane_init(struct
DRM_MODE_REFLECT_X | DRM_MODE_REFLECT_X |
DRM_MODE_REFLECT_Y); DRM_MODE_REFLECT_Y);
@ -115,7 +115,7 @@ Link: https://lore.kernel.org/r/20211215091739.135042-4-maxime@cerno.tech
--- a/drivers/gpu/drm/vc4/vc4_regs.h --- a/drivers/gpu/drm/vc4/vc4_regs.h
+++ b/drivers/gpu/drm/vc4/vc4_regs.h +++ b/drivers/gpu/drm/vc4/vc4_regs.h
@@ -983,7 +983,10 @@ enum hvs_pixel_format { @@ -989,7 +989,10 @@ enum hvs_pixel_format {
#define SCALER_CSC0_COEF_CR_OFS_SHIFT 0 #define SCALER_CSC0_COEF_CR_OFS_SHIFT 0
#define SCALER_CSC0_ITR_R_601_5 0x00f00000 #define SCALER_CSC0_ITR_R_601_5 0x00f00000
#define SCALER_CSC0_ITR_R_709_3 0x00f00000 #define SCALER_CSC0_ITR_R_709_3 0x00f00000
@ -126,7 +126,7 @@ Link: https://lore.kernel.org/r/20211215091739.135042-4-maxime@cerno.tech
/* S2.8 contribution of Cb to Green */ /* S2.8 contribution of Cb to Green */
#define SCALER_CSC1_COEF_CB_GRN_MASK VC4_MASK(31, 22) #define SCALER_CSC1_COEF_CB_GRN_MASK VC4_MASK(31, 22)
@@ -998,8 +1001,11 @@ enum hvs_pixel_format { @@ -1004,8 +1007,11 @@ enum hvs_pixel_format {
#define SCALER_CSC1_COEF_CR_BLU_MASK VC4_MASK(1, 0) #define SCALER_CSC1_COEF_CR_BLU_MASK VC4_MASK(1, 0)
#define SCALER_CSC1_COEF_CR_BLU_SHIFT 0 #define SCALER_CSC1_COEF_CR_BLU_SHIFT 0
#define SCALER_CSC1_ITR_R_601_5 0xe73304a8 #define SCALER_CSC1_ITR_R_601_5 0xe73304a8
@ -140,7 +140,7 @@ Link: https://lore.kernel.org/r/20211215091739.135042-4-maxime@cerno.tech
/* S2.8 contribution of Cb to Red */ /* S2.8 contribution of Cb to Red */
#define SCALER_CSC2_COEF_CB_RED_MASK VC4_MASK(29, 20) #define SCALER_CSC2_COEF_CB_RED_MASK VC4_MASK(29, 20)
@@ -1010,9 +1016,12 @@ enum hvs_pixel_format { @@ -1016,9 +1022,12 @@ enum hvs_pixel_format {
/* S2.8 contribution of Cb to Blue */ /* S2.8 contribution of Cb to Blue */
#define SCALER_CSC2_COEF_CB_BLU_MASK VC4_MASK(19, 10) #define SCALER_CSC2_COEF_CB_BLU_MASK VC4_MASK(19, 10)
#define SCALER_CSC2_COEF_CB_BLU_SHIFT 10 #define SCALER_CSC2_COEF_CB_BLU_SHIFT 10

View File

@ -59,7 +59,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
/* The filter kernel is composed of dwords each containing 3 9-bit /* The filter kernel is composed of dwords each containing 3 9-bit
* signed integers packed next to each other. * signed integers packed next to each other.
*/ */
@@ -728,6 +767,8 @@ static int vc4_hvs_bind(struct device *d @@ -739,6 +778,8 @@ static int vc4_hvs_bind(struct device *d
vc4_debugfs_add_regset32(drm, "hvs_regs", &hvs->regset); vc4_debugfs_add_regset32(drm, "hvs_regs", &hvs->regset);
vc4_debugfs_add_file(drm, "hvs_underrun", vc4_hvs_debugfs_underrun, vc4_debugfs_add_file(drm, "hvs_underrun", vc4_hvs_debugfs_underrun,
NULL); NULL);

View File

@ -29,7 +29,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
return 0; return 0;
} }
@@ -2369,6 +2375,7 @@ static int vc5_hdmi_init_resources(struc @@ -2370,6 +2376,7 @@ static int vc5_hdmi_init_resources(struc
struct platform_device *pdev = vc4_hdmi->pdev; struct platform_device *pdev = vc4_hdmi->pdev;
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
struct resource *res; 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"); res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "hdmi");
if (!res) if (!res)
@@ -2465,6 +2472,38 @@ static int vc5_hdmi_init_resources(struc @@ -2466,6 +2473,38 @@ static int vc5_hdmi_init_resources(struc
return PTR_ERR(vc4_hdmi->reset); return PTR_ERR(vc4_hdmi->reset);
} }

View File

@ -21,9 +21,9 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
--- a/drivers/gpu/drm/vc4/vc4_dpi.c --- a/drivers/gpu/drm/vc4/vc4_dpi.c
+++ b/drivers/gpu/drm/vc4/vc4_dpi.c +++ b/drivers/gpu/drm/vc4/vc4_dpi.c
@@ -188,8 +188,8 @@ static void vc4_dpi_encoder_enable(struc @@ -198,8 +198,8 @@ static void vc4_dpi_encoder_enable(struc
break; if (connector->display_info.bus_flags & DRM_BUS_FLAG_DE_LOW)
} dpi_c |= DPI_OUTPUT_ENABLE_INVERT;
} else { } else {
- /* Default to 24bit if no connector found. */ - /* Default to 24bit if no connector found. */
- dpi_c |= VC4_SET_FIELD(DPI_FORMAT_24BIT_888_RGB, DPI_FORMAT); - dpi_c |= VC4_SET_FIELD(DPI_FORMAT_24BIT_888_RGB, DPI_FORMAT);

View File

@ -15,7 +15,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c --- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
@@ -1011,30 +1011,15 @@ static void vc4_hdmi_recenter_fifo(struc @@ -1012,30 +1012,15 @@ static void vc4_hdmi_recenter_fifo(struc
"VC4_HDMI_FIFO_CTL_RECENTER_DONE"); "VC4_HDMI_FIFO_CTL_RECENTER_DONE");
} }

View File

@ -13,7 +13,7 @@ Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
--- a/drivers/media/i2c/imx219.c --- a/drivers/media/i2c/imx219.c
+++ b/drivers/media/i2c/imx219.c +++ b/drivers/media/i2c/imx219.c
@@ -674,7 +674,7 @@ static void imx219_set_default_format(st @@ -584,7 +584,7 @@ static void imx219_set_default_format(st
fmt = &imx219->fmt; fmt = &imx219->fmt;
fmt->code = MEDIA_BUS_FMT_SRGGB10_1X10; fmt->code = MEDIA_BUS_FMT_SRGGB10_1X10;
@ -22,7 +22,7 @@ Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
fmt->ycbcr_enc = V4L2_MAP_YCBCR_ENC_DEFAULT(fmt->colorspace); fmt->ycbcr_enc = V4L2_MAP_YCBCR_ENC_DEFAULT(fmt->colorspace);
fmt->quantization = V4L2_MAP_QUANTIZATION_DEFAULT(true, fmt->quantization = V4L2_MAP_QUANTIZATION_DEFAULT(true,
fmt->colorspace, fmt->colorspace,
@@ -844,7 +844,7 @@ static int imx219_enum_frame_size(struct @@ -754,7 +754,7 @@ static int imx219_enum_frame_size(struct
static void imx219_reset_colorspace(struct v4l2_mbus_framefmt *fmt) static void imx219_reset_colorspace(struct v4l2_mbus_framefmt *fmt)
{ {

View File

@ -241,7 +241,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
/* Unsetting DISPBKGND_GAMMA skips the gamma lut step /* Unsetting DISPBKGND_GAMMA skips the gamma lut step
--- a/drivers/gpu/drm/vc4/vc4_regs.h --- a/drivers/gpu/drm/vc4/vc4_regs.h
+++ b/drivers/gpu/drm/vc4/vc4_regs.h +++ b/drivers/gpu/drm/vc4/vc4_regs.h
@@ -499,6 +499,28 @@ @@ -505,6 +505,28 @@
#define SCALER_DLIST_START 0x00002000 #define SCALER_DLIST_START 0x00002000
#define SCALER_DLIST_SIZE 0x00004000 #define SCALER_DLIST_SIZE 0x00004000

View File

@ -102,7 +102,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
/* The filter kernel is composed of dwords each containing 3 9-bit /* The filter kernel is composed of dwords each containing 3 9-bit
* signed integers packed next to each other. * signed integers packed next to each other.
*/ */
@@ -848,6 +926,9 @@ static int vc4_hvs_bind(struct device *d @@ -859,6 +937,9 @@ static int vc4_hvs_bind(struct device *d
NULL); NULL);
vc4_debugfs_add_file(drm, "hvs_dlists", vc4_hvs_debugfs_dlist, vc4_debugfs_add_file(drm, "hvs_dlists", vc4_hvs_debugfs_dlist,
NULL); NULL);

View File

@ -20,7 +20,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c --- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
@@ -2557,7 +2557,8 @@ static int vc4_hdmi_bind(struct device * @@ -2558,7 +2558,8 @@ static int vc4_hdmi_bind(struct device *
* vc4_hdmi_disable_scrambling() will thus run at boot, make * vc4_hdmi_disable_scrambling() will thus run at boot, make
* sure it's disabled, and avoid any inconsistency. * sure it's disabled, and avoid any inconsistency.
*/ */

View File

@ -22,7 +22,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
int ret; int ret;
/* Look up the connector attached to DPI so we can get the /* Look up the connector attached to DPI so we can get the
@@ -192,15 +192,22 @@ static void vc4_dpi_encoder_enable(struc @@ -202,15 +202,22 @@ static void vc4_dpi_encoder_enable(struc
dpi_c |= VC4_SET_FIELD(DPI_FORMAT_18BIT_666_RGB_1, DPI_FORMAT); dpi_c |= VC4_SET_FIELD(DPI_FORMAT_18BIT_666_RGB_1, DPI_FORMAT);
} }

View File

@ -36,7 +36,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
connected = true; connected = true;
} }
@@ -1355,6 +1349,18 @@ static u32 vc5_hdmi_channel_map(struct v @@ -1356,6 +1350,18 @@ static u32 vc5_hdmi_channel_map(struct v
return channel_map; return channel_map;
} }
@ -55,7 +55,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
/* HDMI audio codec callbacks */ /* HDMI audio codec callbacks */
static void vc4_hdmi_audio_set_mai_clock(struct vc4_hdmi *vc4_hdmi, static void vc4_hdmi_audio_set_mai_clock(struct vc4_hdmi *vc4_hdmi,
unsigned int samplerate) unsigned int samplerate)
@@ -2777,6 +2783,7 @@ static const struct vc4_hdmi_variant bcm @@ -2778,6 +2784,7 @@ static const struct vc4_hdmi_variant bcm
.phy_rng_disable = vc5_hdmi_phy_rng_disable, .phy_rng_disable = vc5_hdmi_phy_rng_disable,
.channel_map = vc5_hdmi_channel_map, .channel_map = vc5_hdmi_channel_map,
.supports_hdr = true, .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 = { static const struct vc4_hdmi_variant bcm2711_hdmi1_variant = {
@@ -2805,6 +2812,7 @@ static const struct vc4_hdmi_variant bcm @@ -2806,6 +2813,7 @@ static const struct vc4_hdmi_variant bcm
.phy_rng_disable = vc5_hdmi_phy_rng_disable, .phy_rng_disable = vc5_hdmi_phy_rng_disable,
.channel_map = vc5_hdmi_channel_map, .channel_map = vc5_hdmi_channel_map,
.supports_hdr = true, .supports_hdr = true,

View File

@ -22,7 +22,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c --- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
@@ -2193,7 +2193,6 @@ static int vc4_hdmi_cec_init(struct vc4_ @@ -2194,7 +2194,6 @@ static int vc4_hdmi_cec_init(struct vc4_
struct platform_device *pdev = vc4_hdmi->pdev; struct platform_device *pdev = vc4_hdmi->pdev;
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
unsigned long flags; unsigned long flags;
@ -30,7 +30,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
int ret; int ret;
if (!of_find_property(dev->of_node, "interrupts", NULL)) { if (!of_find_property(dev->of_node, "interrupts", NULL)) {
@@ -2213,15 +2212,6 @@ static int vc4_hdmi_cec_init(struct vc4_ @@ -2214,15 +2213,6 @@ static int vc4_hdmi_cec_init(struct vc4_
cec_fill_conn_info_from_drm(&conn_info, &vc4_hdmi->connector); cec_fill_conn_info_from_drm(&conn_info, &vc4_hdmi->connector);
cec_s_conn_info(vc4_hdmi->cec_adap, &conn_info); 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) { if (vc4_hdmi->variant->external_irq_controller) {
ret = request_threaded_irq(platform_get_irq_byname(pdev, "cec-rx"), ret = request_threaded_irq(platform_get_irq_byname(pdev, "cec-rx"),
vc4_cec_irq_handler_rx_bare, vc4_cec_irq_handler_rx_bare,
@@ -2284,6 +2274,29 @@ static void vc4_hdmi_cec_exit(struct vc4 @@ -2285,6 +2275,29 @@ static void vc4_hdmi_cec_exit(struct vc4
cec_unregister_adapter(vc4_hdmi->cec_adap); cec_unregister_adapter(vc4_hdmi->cec_adap);
} }
@ -76,7 +76,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
#else #else
static int vc4_hdmi_cec_init(struct vc4_hdmi *vc4_hdmi) static int vc4_hdmi_cec_init(struct vc4_hdmi *vc4_hdmi)
{ {
@@ -2292,6 +2305,10 @@ static int vc4_hdmi_cec_init(struct vc4_ @@ -2293,6 +2306,10 @@ static int vc4_hdmi_cec_init(struct vc4_
static void vc4_hdmi_cec_exit(struct vc4_hdmi *vc4_hdmi) {}; 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 #endif
static int vc4_hdmi_build_regset(struct vc4_hdmi *vc4_hdmi, static int vc4_hdmi_build_regset(struct vc4_hdmi *vc4_hdmi,
@@ -2526,6 +2543,15 @@ static int vc4_hdmi_runtime_resume(struc @@ -2527,6 +2544,15 @@ static int vc4_hdmi_runtime_resume(struc
if (ret) if (ret)
return ret; return ret;

View File

@ -1,114 +0,0 @@
From e664a91ea54b3488d6c08dd82dac2af1239c3275 Mon Sep 17 00:00:00 2001
From: Dave Stevenson <dave.stevenson@raspberrypi.com>
Date: Thu, 2 Dec 2021 18:21:46 +0000
Subject: [PATCH] drm/vc4: dpi: Add option for inverting pixel clock
and output enable
DRM provides flags for inverting pixel clock and output enable
signals, but these were not mapped to the relevant registers.
Add those mappings.
Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
---
drivers/gpu/drm/vc4/vc4_dpi.c | 89 ++++++++++++++++++++---------------
1 file changed, 51 insertions(+), 38 deletions(-)
--- a/drivers/gpu/drm/vc4/vc4_dpi.c
+++ b/drivers/gpu/drm/vc4/vc4_dpi.c
@@ -148,45 +148,58 @@ static void vc4_dpi_encoder_enable(struc
}
drm_connector_list_iter_end(&conn_iter);
- if (connector && connector->display_info.num_bus_formats) {
- u32 bus_format = connector->display_info.bus_formats[0];
+ if (connector) {
+ if (connector->display_info.num_bus_formats) {
+ u32 bus_format = connector->display_info.bus_formats[0];
- switch (bus_format) {
- case MEDIA_BUS_FMT_RGB888_1X24:
- dpi_c |= VC4_SET_FIELD(DPI_FORMAT_24BIT_888_RGB,
- DPI_FORMAT);
- break;
- case MEDIA_BUS_FMT_BGR888_1X24:
- dpi_c |= VC4_SET_FIELD(DPI_FORMAT_24BIT_888_RGB,
- DPI_FORMAT);
- dpi_c |= VC4_SET_FIELD(DPI_ORDER_BGR, DPI_ORDER);
- break;
- case MEDIA_BUS_FMT_RGB666_1X24_CPADHI:
- dpi_c |= VC4_SET_FIELD(DPI_FORMAT_18BIT_666_RGB_2,
- DPI_FORMAT);
- break;
- case MEDIA_BUS_FMT_BGR666_1X24_CPADHI:
- dpi_c |= VC4_SET_FIELD(DPI_FORMAT_18BIT_666_RGB_2,
- DPI_FORMAT);
- dpi_c |= VC4_SET_FIELD(DPI_ORDER_BGR, DPI_ORDER);
- break;
- case MEDIA_BUS_FMT_RGB666_1X18:
- dpi_c |= VC4_SET_FIELD(DPI_FORMAT_18BIT_666_RGB_1,
- DPI_FORMAT);
- break;
- case MEDIA_BUS_FMT_BGR666_1X18:
- dpi_c |= VC4_SET_FIELD(DPI_FORMAT_18BIT_666_RGB_1,
- DPI_FORMAT);
- dpi_c |= VC4_SET_FIELD(DPI_ORDER_BGR, DPI_ORDER);
- break;
- case MEDIA_BUS_FMT_RGB565_1X16:
- dpi_c |= VC4_SET_FIELD(DPI_FORMAT_16BIT_565_RGB_3,
- DPI_FORMAT);
- break;
- default:
- DRM_ERROR("Unknown media bus format %d\n", bus_format);
- break;
+ switch (bus_format) {
+ case MEDIA_BUS_FMT_RGB888_1X24:
+ dpi_c |= VC4_SET_FIELD(DPI_FORMAT_24BIT_888_RGB,
+ DPI_FORMAT);
+ break;
+ case MEDIA_BUS_FMT_BGR888_1X24:
+ dpi_c |= VC4_SET_FIELD(DPI_FORMAT_24BIT_888_RGB,
+ DPI_FORMAT);
+ dpi_c |= VC4_SET_FIELD(DPI_ORDER_BGR,
+ DPI_ORDER);
+ break;
+ case MEDIA_BUS_FMT_RGB666_1X24_CPADHI:
+ dpi_c |= VC4_SET_FIELD(DPI_FORMAT_18BIT_666_RGB_2,
+ DPI_FORMAT);
+ break;
+ case MEDIA_BUS_FMT_BGR666_1X24_CPADHI:
+ dpi_c |= VC4_SET_FIELD(DPI_FORMAT_18BIT_666_RGB_2,
+ DPI_FORMAT);
+ dpi_c |= VC4_SET_FIELD(DPI_ORDER_BGR,
+ DPI_ORDER);
+ break;
+ case MEDIA_BUS_FMT_RGB666_1X18:
+ dpi_c |= VC4_SET_FIELD(DPI_FORMAT_18BIT_666_RGB_1,
+ DPI_FORMAT);
+ break;
+ case MEDIA_BUS_FMT_BGR666_1X18:
+ dpi_c |= VC4_SET_FIELD(DPI_FORMAT_18BIT_666_RGB_1,
+ DPI_FORMAT);
+ dpi_c |= VC4_SET_FIELD(DPI_ORDER_BGR,
+ DPI_ORDER);
+ break;
+ case MEDIA_BUS_FMT_RGB565_1X16:
+ dpi_c |= VC4_SET_FIELD(DPI_FORMAT_16BIT_565_RGB_3,
+ DPI_FORMAT);
+ break;
+ default:
+ DRM_ERROR("Unknown media bus format %d\n",
+ bus_format);
+ break;
+ }
}
+
+ if (connector->display_info.bus_flags &
+ DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE)
+ dpi_c |= DPI_PIXEL_CLK_INVERT;
+
+ if (connector->display_info.bus_flags & DRM_BUS_FLAG_DE_LOW)
+ dpi_c |= DPI_OUTPUT_ENABLE_INVERT;
} else {
/* Default to 18bit if no connector found. */
dpi_c |= VC4_SET_FIELD(DPI_FORMAT_18BIT_666_RGB_1, DPI_FORMAT);

View File

@ -15,9 +15,9 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
--- a/drivers/gpu/drm/vc4/vc4_dpi.c --- a/drivers/gpu/drm/vc4/vc4_dpi.c
+++ b/drivers/gpu/drm/vc4/vc4_dpi.c +++ b/drivers/gpu/drm/vc4/vc4_dpi.c
@@ -173,6 +173,10 @@ static void vc4_dpi_encoder_enable(struc @@ -172,6 +172,10 @@ static void vc4_dpi_encoder_enable(struc
dpi_c |= VC4_SET_FIELD(DPI_ORDER_BGR, DPI_FORMAT);
DPI_ORDER); dpi_c |= VC4_SET_FIELD(DPI_ORDER_BGR, DPI_ORDER);
break; break;
+ default: + default:
+ DRM_ERROR("Unknown media bus format %d\n", + DRM_ERROR("Unknown media bus format %d\n",
@ -26,8 +26,8 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
case MEDIA_BUS_FMT_RGB666_1X18: case MEDIA_BUS_FMT_RGB666_1X18:
dpi_c |= VC4_SET_FIELD(DPI_FORMAT_18BIT_666_RGB_1, dpi_c |= VC4_SET_FIELD(DPI_FORMAT_18BIT_666_RGB_1,
DPI_FORMAT); DPI_FORMAT);
@@ -187,11 +191,12 @@ static void vc4_dpi_encoder_enable(struc @@ -185,11 +189,12 @@ static void vc4_dpi_encoder_enable(struc
dpi_c |= VC4_SET_FIELD(DPI_FORMAT_16BIT_565_RGB_3, dpi_c |= VC4_SET_FIELD(DPI_FORMAT_16BIT_565_RGB_1,
DPI_FORMAT); DPI_FORMAT);
break; break;
- default: - default:
@ -42,4 +42,4 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
+ +
} }
if (connector->display_info.bus_flags & if (connector->display_info.bus_flags & DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE)

View File

@ -22,7 +22,7 @@ Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>
--- a/drivers/media/i2c/imx219.c --- a/drivers/media/i2c/imx219.c
+++ b/drivers/media/i2c/imx219.c +++ b/drivers/media/i2c/imx219.c
@@ -118,6 +118,16 @@ @@ -124,6 +124,16 @@
#define IMX219_PIXEL_ARRAY_WIDTH 3280U #define IMX219_PIXEL_ARRAY_WIDTH 3280U
#define IMX219_PIXEL_ARRAY_HEIGHT 2464U #define IMX219_PIXEL_ARRAY_HEIGHT 2464U
@ -39,7 +39,7 @@ Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>
struct imx219_reg { struct imx219_reg {
u16 address; u16 address;
u8 val; u8 val;
@@ -538,7 +548,7 @@ static const struct imx219_mode supporte @@ -448,7 +458,7 @@ static const struct imx219_mode supporte
struct imx219 { struct imx219 {
struct v4l2_subdev sd; struct v4l2_subdev sd;
@ -48,7 +48,7 @@ Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>
struct v4l2_mbus_framefmt fmt; struct v4l2_mbus_framefmt fmt;
@@ -688,18 +698,26 @@ static void imx219_set_default_format(st @@ -598,18 +608,26 @@ static void imx219_set_default_format(st
static int imx219_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh) static int imx219_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
{ {
struct imx219 *imx219 = to_imx219(sd); struct imx219 *imx219 = to_imx219(sd);
@ -83,7 +83,7 @@ Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>
/* Initialize try_crop rectangle. */ /* Initialize try_crop rectangle. */
try_crop = v4l2_subdev_get_try_crop(sd, fh->state, 0); try_crop = v4l2_subdev_get_try_crop(sd, fh->state, 0);
@@ -808,12 +826,21 @@ static int imx219_enum_mbus_code(struct @@ -718,12 +736,21 @@ static int imx219_enum_mbus_code(struct
{ {
struct imx219 *imx219 = to_imx219(sd); struct imx219 *imx219 = to_imx219(sd);
@ -109,7 +109,7 @@ Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>
return 0; return 0;
} }
@@ -823,21 +850,30 @@ static int imx219_enum_frame_size(struct @@ -733,21 +760,30 @@ static int imx219_enum_frame_size(struct
struct v4l2_subdev_frame_size_enum *fse) struct v4l2_subdev_frame_size_enum *fse)
{ {
struct imx219 *imx219 = to_imx219(sd); struct imx219 *imx219 = to_imx219(sd);
@ -151,7 +151,7 @@ Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>
return 0; return 0;
} }
@@ -852,9 +888,9 @@ static void imx219_reset_colorspace(stru @@ -762,9 +798,9 @@ static void imx219_reset_colorspace(stru
fmt->xfer_func = V4L2_MAP_XFER_FUNC_DEFAULT(fmt->colorspace); fmt->xfer_func = V4L2_MAP_XFER_FUNC_DEFAULT(fmt->colorspace);
} }
@ -164,7 +164,7 @@ Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>
{ {
fmt->format.width = mode->width; fmt->format.width = mode->width;
fmt->format.height = mode->height; fmt->format.height = mode->height;
@@ -862,21 +898,39 @@ static void imx219_update_pad_format(str @@ -772,21 +808,39 @@ static void imx219_update_pad_format(str
imx219_reset_colorspace(&fmt->format); imx219_reset_colorspace(&fmt->format);
} }
@ -208,7 +208,7 @@ Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>
} }
return 0; return 0;
@@ -906,51 +960,74 @@ static int imx219_set_pad_format(struct @@ -816,51 +870,74 @@ static int imx219_set_pad_format(struct
int exposure_max, exposure_def, hblank; int exposure_max, exposure_def, hblank;
unsigned int i; unsigned int i;
@ -326,7 +326,7 @@ Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>
} }
mutex_unlock(&imx219->mutex); mutex_unlock(&imx219->mutex);
@@ -1037,9 +1114,11 @@ static int imx219_start_streaming(struct @@ -976,9 +1053,11 @@ static int imx219_start_streaming(struct
const struct imx219_reg_list *reg_list; const struct imx219_reg_list *reg_list;
int ret; int ret;
@ -338,9 +338,9 @@ Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>
return ret; return ret;
+ } + }
/* Apply default values of current mode */ /* Send all registers that are common to all modes */
reg_list = &imx219->mode->reg_list; ret = imx219_write_regs(imx219, imx219_common_regs, ARRAY_SIZE(imx219_common_regs));
@@ -1133,21 +1212,22 @@ err_unlock: @@ -1086,21 +1165,22 @@ err_unlock:
/* Power/clock management functions */ /* Power/clock management functions */
static int imx219_power_on(struct device *dev) static int imx219_power_on(struct device *dev)
{ {
@ -366,7 +366,7 @@ Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>
__func__); __func__);
goto reg_off; goto reg_off;
} }
@@ -1166,7 +1246,8 @@ reg_off: @@ -1119,7 +1199,8 @@ reg_off:
static int imx219_power_off(struct device *dev) static int imx219_power_off(struct device *dev)
{ {
@ -376,7 +376,7 @@ Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>
struct imx219 *imx219 = to_imx219(sd); struct imx219 *imx219 = to_imx219(sd);
gpiod_set_value_cansleep(imx219->reset_gpio, 0); gpiod_set_value_cansleep(imx219->reset_gpio, 0);
@@ -1178,7 +1259,8 @@ static int imx219_power_off(struct devic @@ -1131,7 +1212,8 @@ static int imx219_power_off(struct devic
static int __maybe_unused imx219_suspend(struct device *dev) static int __maybe_unused imx219_suspend(struct device *dev)
{ {
@ -386,7 +386,7 @@ Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>
struct imx219 *imx219 = to_imx219(sd); struct imx219 *imx219 = to_imx219(sd);
if (imx219->streaming) if (imx219->streaming)
@@ -1189,7 +1271,8 @@ static int __maybe_unused imx219_suspend @@ -1142,7 +1224,8 @@ static int __maybe_unused imx219_suspend
static int __maybe_unused imx219_resume(struct device *dev) static int __maybe_unused imx219_resume(struct device *dev)
{ {
@ -396,7 +396,7 @@ Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>
struct imx219 *imx219 = to_imx219(sd); struct imx219 *imx219 = to_imx219(sd);
int ret; int ret;
@@ -1525,13 +1608,14 @@ static int imx219_probe(struct i2c_clien @@ -1478,13 +1561,14 @@ static int imx219_probe(struct i2c_clien
V4L2_SUBDEV_FL_HAS_EVENTS; V4L2_SUBDEV_FL_HAS_EVENTS;
imx219->sd.entity.function = MEDIA_ENT_F_CAM_SENSOR; imx219->sd.entity.function = MEDIA_ENT_F_CAM_SENSOR;

View File

@ -38,7 +38,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
static void vc4_hdmi_csc_setup(struct vc4_hdmi *vc4_hdmi, bool enable) static void vc4_hdmi_csc_setup(struct vc4_hdmi *vc4_hdmi, bool enable)
{ {
unsigned long flags; unsigned long flags;
@@ -1219,15 +1211,6 @@ static void vc4_hdmi_encoder_post_crtc_e @@ -1220,15 +1212,6 @@ static void vc4_hdmi_encoder_post_crtc_e
mutex_unlock(&vc4_hdmi->mutex); mutex_unlock(&vc4_hdmi->mutex);
} }
@ -54,7 +54,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
static void vc4_hdmi_encoder_atomic_mode_set(struct drm_encoder *encoder, static void vc4_hdmi_encoder_atomic_mode_set(struct drm_encoder *encoder,
struct drm_crtc_state *crtc_state, struct drm_crtc_state *crtc_state,
struct drm_connector_state *conn_state) struct drm_connector_state *conn_state)
@@ -1321,8 +1304,6 @@ static const struct drm_encoder_helper_f @@ -1322,8 +1305,6 @@ static const struct drm_encoder_helper_f
.atomic_check = vc4_hdmi_encoder_atomic_check, .atomic_check = vc4_hdmi_encoder_atomic_check,
.atomic_mode_set = vc4_hdmi_encoder_atomic_mode_set, .atomic_mode_set = vc4_hdmi_encoder_atomic_mode_set,
.mode_valid = vc4_hdmi_encoder_mode_valid, .mode_valid = vc4_hdmi_encoder_mode_valid,
@ -63,7 +63,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
}; };
static u32 vc4_hdmi_channel_map(struct vc4_hdmi *vc4_hdmi, u32 channel_mask) static u32 vc4_hdmi_channel_map(struct vc4_hdmi *vc4_hdmi, u32 channel_mask)
@@ -1422,16 +1403,10 @@ static bool vc4_hdmi_audio_can_stream(st @@ -1423,16 +1404,10 @@ static bool vc4_hdmi_audio_can_stream(st
lockdep_assert_held(&vc4_hdmi->mutex); lockdep_assert_held(&vc4_hdmi->mutex);
/* /*

View File

@ -14,7 +14,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c --- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
@@ -2280,7 +2280,7 @@ static int vc4_hdmi_cec_init(struct vc4_ @@ -2281,7 +2281,7 @@ static int vc4_hdmi_cec_init(struct vc4_
static void vc4_hdmi_cec_exit(struct vc4_hdmi *vc4_hdmi) {}; static void vc4_hdmi_cec_exit(struct vc4_hdmi *vc4_hdmi) {};

View File

@ -23,7 +23,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
spin_lock_irqsave(&vc4_hdmi->hw_lock, flags); spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
HDMI_WRITE(HDMI_RAM_PACKET_CONFIG, 0); HDMI_WRITE(HDMI_RAM_PACKET_CONFIG, 0);
@@ -1201,6 +1202,7 @@ static void vc4_hdmi_encoder_post_crtc_e @@ -1202,6 +1203,7 @@ static void vc4_hdmi_encoder_post_crtc_e
VC4_HDMI_RAM_PACKET_ENABLE); VC4_HDMI_RAM_PACKET_ENABLE);
spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags); spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
@ -31,7 +31,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
vc4_hdmi_set_infoframes(encoder); vc4_hdmi_set_infoframes(encoder);
} }
@@ -1606,7 +1608,8 @@ static int vc4_hdmi_audio_prepare(struct @@ -1607,7 +1609,8 @@ static int vc4_hdmi_audio_prepare(struct
spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags); spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
memcpy(&vc4_hdmi->audio.infoframe, &params->cea, sizeof(params->cea)); memcpy(&vc4_hdmi->audio.infoframe, &params->cea, sizeof(params->cea));

View File

@ -26,7 +26,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
--- a/drivers/gpu/drm/drm_edid.c --- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c
@@ -5743,13 +5743,13 @@ static const u32 hdmi_colorimetry_val[] @@ -5746,13 +5746,13 @@ static const u32 hdmi_colorimetry_val[]
#undef ACE #undef ACE
/** /**
@ -43,7 +43,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
const struct drm_connector_state *conn_state) const struct drm_connector_state *conn_state)
{ {
u32 colorimetry_val; u32 colorimetry_val;
@@ -5768,7 +5768,7 @@ drm_hdmi_avi_infoframe_colorspace(struct @@ -5771,7 +5771,7 @@ drm_hdmi_avi_infoframe_colorspace(struct
frame->extended_colorimetry = (colorimetry_val >> 2) & frame->extended_colorimetry = (colorimetry_val >> 2) &
EXTENDED_COLORIMETRY_MASK; EXTENDED_COLORIMETRY_MASK;
} }

View File

@ -31,7 +31,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
static int vc4_hdmi_debugfs_regs(struct seq_file *m, void *unused) static int vc4_hdmi_debugfs_regs(struct seq_file *m, void *unused)
{ {
struct drm_info_node *node = (struct drm_info_node *)m->private; struct drm_info_node *node = (struct drm_info_node *)m->private;
@@ -1116,8 +1125,7 @@ static void vc4_hdmi_encoder_pre_crtc_en @@ -1117,8 +1126,7 @@ static void vc4_hdmi_encoder_pre_crtc_en
mutex_lock(&vc4_hdmi->mutex); mutex_lock(&vc4_hdmi->mutex);

View File

@ -79,7 +79,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
/* CEA VICs other than #1 requre limited range RGB /* CEA VICs other than #1 requre limited range RGB
* output unless overridden by an AVI infoframe. * output unless overridden by an AVI infoframe.
* Apply a colorspace conversion to squash 0-255 down * Apply a colorspace conversion to squash 0-255 down
@@ -1120,22 +1121,12 @@ static void vc4_hdmi_encoder_pre_crtc_en @@ -1121,22 +1122,12 @@ static void vc4_hdmi_encoder_pre_crtc_en
{ {
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder); struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
struct drm_display_mode *mode = &vc4_hdmi->saved_adjusted_mode; struct drm_display_mode *mode = &vc4_hdmi->saved_adjusted_mode;

View File

@ -24,7 +24,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
if (!vc4_hdmi_is_full_range_rgb(vc4_hdmi, mode)) { if (!vc4_hdmi_is_full_range_rgb(vc4_hdmi, mode)) {
/* CEA VICs other than #1 requre limited range RGB /* CEA VICs other than #1 requre limited range RGB
* output unless overridden by an AVI infoframe. * output unless overridden by an AVI infoframe.
@@ -906,7 +908,6 @@ static void vc5_hdmi_set_timings(struct @@ -907,7 +909,6 @@ static void vc5_hdmi_set_timings(struct
spin_lock_irqsave(&vc4_hdmi->hw_lock, flags); spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);

View File

@ -30,7 +30,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
--- a/drivers/gpu/drm/vc4/vc4_regs.h --- a/drivers/gpu/drm/vc4/vc4_regs.h
+++ b/drivers/gpu/drm/vc4/vc4_regs.h +++ b/drivers/gpu/drm/vc4/vc4_regs.h
@@ -804,6 +804,9 @@ enum { @@ -810,6 +810,9 @@ enum {
# define VC4_HD_CSC_CTL_RGB2YCC BIT(1) # define VC4_HD_CSC_CTL_RGB2YCC BIT(1)
# define VC4_HD_CSC_CTL_ENABLE BIT(0) # define VC4_HD_CSC_CTL_ENABLE BIT(0)

View File

@ -33,7 +33,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
const struct drm_display_mode *mode) const struct drm_display_mode *mode)
{ {
unsigned long flags; unsigned long flags;
@@ -1141,13 +1143,16 @@ static void vc4_hdmi_encoder_pre_crtc_en @@ -1142,13 +1144,16 @@ static void vc4_hdmi_encoder_pre_crtc_en
struct drm_atomic_state *state) struct drm_atomic_state *state)
{ {
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder); struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);

View File

@ -14,7 +14,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c --- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
@@ -1251,6 +1251,19 @@ static void vc4_hdmi_encoder_atomic_mode @@ -1252,6 +1252,19 @@ static void vc4_hdmi_encoder_atomic_mode
mutex_unlock(&vc4_hdmi->mutex); mutex_unlock(&vc4_hdmi->mutex);
} }
@ -34,7 +34,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
#define WIFI_2_4GHz_CH1_MIN_FREQ 2400000000ULL #define WIFI_2_4GHz_CH1_MIN_FREQ 2400000000ULL
#define WIFI_2_4GHz_CH1_MAX_FREQ 2422000000ULL #define WIFI_2_4GHz_CH1_MAX_FREQ 2422000000ULL
@@ -1295,10 +1308,7 @@ static int vc4_hdmi_encoder_atomic_check @@ -1296,10 +1309,7 @@ static int vc4_hdmi_encoder_atomic_check
if (mode->flags & DRM_MODE_FLAG_DBLCLK) if (mode->flags & DRM_MODE_FLAG_DBLCLK)
pixel_rate = pixel_rate * 2; pixel_rate = pixel_rate * 2;
@ -46,7 +46,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
return -EINVAL; return -EINVAL;
vc4_state->pixel_rate = pixel_rate; vc4_state->pixel_rate = pixel_rate;
@@ -1318,13 +1328,7 @@ vc4_hdmi_encoder_mode_valid(struct drm_e @@ -1319,13 +1329,7 @@ vc4_hdmi_encoder_mode_valid(struct drm_e
(mode->hsync_end % 2) || (mode->htotal % 2))) (mode->hsync_end % 2) || (mode->htotal % 2)))
return MODE_H_ILLEGAL; return MODE_H_ILLEGAL;

View File

@ -15,7 +15,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c --- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
@@ -1264,6 +1264,35 @@ vc4_hdmi_encoder_clock_valid(const struc @@ -1265,6 +1265,35 @@ vc4_hdmi_encoder_clock_valid(const struc
return MODE_OK; return MODE_OK;
} }
@ -51,7 +51,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
#define WIFI_2_4GHz_CH1_MIN_FREQ 2400000000ULL #define WIFI_2_4GHz_CH1_MIN_FREQ 2400000000ULL
#define WIFI_2_4GHz_CH1_MAX_FREQ 2422000000ULL #define WIFI_2_4GHz_CH1_MAX_FREQ 2422000000ULL
@@ -1276,6 +1305,7 @@ static int vc4_hdmi_encoder_atomic_check @@ -1277,6 +1306,7 @@ static int vc4_hdmi_encoder_atomic_check
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder); struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
unsigned long long pixel_rate = mode->clock * 1000; unsigned long long pixel_rate = mode->clock * 1000;
unsigned long long tmds_rate; unsigned long long tmds_rate;
@ -59,7 +59,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
if (vc4_hdmi->variant->unsupported_odd_h_timings && if (vc4_hdmi->variant->unsupported_odd_h_timings &&
!(mode->flags & DRM_MODE_FLAG_DBLCLK) && !(mode->flags & DRM_MODE_FLAG_DBLCLK) &&
@@ -1297,21 +1327,10 @@ static int vc4_hdmi_encoder_atomic_check @@ -1298,21 +1328,10 @@ static int vc4_hdmi_encoder_atomic_check
pixel_rate = mode->clock * 1000; pixel_rate = mode->clock * 1000;
} }

View File

@ -19,7 +19,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c --- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
@@ -1255,12 +1255,18 @@ static enum drm_mode_status @@ -1256,12 +1256,18 @@ static enum drm_mode_status
vc4_hdmi_encoder_clock_valid(const struct vc4_hdmi *vc4_hdmi, vc4_hdmi_encoder_clock_valid(const struct vc4_hdmi *vc4_hdmi,
unsigned long long clock) unsigned long long clock)
{ {

View File

@ -57,7 +57,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
return; return;
drm_scdc_set_high_tmds_clock_ratio(vc4_hdmi->ddc, true); drm_scdc_set_high_tmds_clock_ratio(vc4_hdmi->ddc, true);
@@ -1245,6 +1253,7 @@ static void vc4_hdmi_encoder_atomic_mode @@ -1246,6 +1254,7 @@ static void vc4_hdmi_encoder_atomic_mode
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder); struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
mutex_lock(&vc4_hdmi->mutex); mutex_lock(&vc4_hdmi->mutex);

View File

@ -38,7 +38,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
bool hsync_pos = mode->flags & DRM_MODE_FLAG_PHSYNC; bool hsync_pos = mode->flags & DRM_MODE_FLAG_PHSYNC;
bool vsync_pos = mode->flags & DRM_MODE_FLAG_PVSYNC; bool vsync_pos = mode->flags & DRM_MODE_FLAG_PVSYNC;
bool interlaced = mode->flags & DRM_MODE_FLAG_INTERLACE; bool interlaced = mode->flags & DRM_MODE_FLAG_INTERLACE;
@@ -961,7 +964,7 @@ static void vc5_hdmi_set_timings(struct @@ -962,7 +965,7 @@ static void vc5_hdmi_set_timings(struct
HDMI_WRITE(HDMI_VERTB0, vertb_even); HDMI_WRITE(HDMI_VERTB0, vertb_even);
HDMI_WRITE(HDMI_VERTB1, vertb); HDMI_WRITE(HDMI_VERTB1, vertb);
@ -47,7 +47,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
case 12: case 12:
gcp = 6; gcp = 6;
gcp_en = true; gcp_en = true;
@@ -1251,9 +1254,11 @@ static void vc4_hdmi_encoder_atomic_mode @@ -1252,9 +1255,11 @@ static void vc4_hdmi_encoder_atomic_mode
struct drm_connector_state *conn_state) struct drm_connector_state *conn_state)
{ {
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder); struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
@ -60,7 +60,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
memcpy(&vc4_hdmi->saved_adjusted_mode, memcpy(&vc4_hdmi->saved_adjusted_mode,
&crtc_state->adjusted_mode, &crtc_state->adjusted_mode,
sizeof(vc4_hdmi->saved_adjusted_mode)); sizeof(vc4_hdmi->saved_adjusted_mode));
@@ -1308,6 +1313,38 @@ vc4_hdmi_encoder_compute_clock(const str @@ -1309,6 +1314,38 @@ vc4_hdmi_encoder_compute_clock(const str
return 0; return 0;
} }
@ -99,7 +99,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
#define WIFI_2_4GHz_CH1_MIN_FREQ 2400000000ULL #define WIFI_2_4GHz_CH1_MIN_FREQ 2400000000ULL
#define WIFI_2_4GHz_CH1_MAX_FREQ 2422000000ULL #define WIFI_2_4GHz_CH1_MAX_FREQ 2422000000ULL
@@ -1342,8 +1379,7 @@ static int vc4_hdmi_encoder_atomic_check @@ -1343,8 +1380,7 @@ static int vc4_hdmi_encoder_atomic_check
pixel_rate = mode->clock * 1000; pixel_rate = mode->clock * 1000;
} }

View File

@ -234,7 +234,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
HDMI_WRITE(HDMI_CSC_CTL, csc_ctl); HDMI_WRITE(HDMI_CSC_CTL, csc_ctl);
spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags); spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
@@ -980,6 +1093,15 @@ static void vc5_hdmi_set_timings(struct @@ -981,6 +1094,15 @@ static void vc5_hdmi_set_timings(struct
break; break;
} }
@ -250,7 +250,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
reg = HDMI_READ(HDMI_DEEP_COLOR_CONFIG_1); reg = HDMI_READ(HDMI_DEEP_COLOR_CONFIG_1);
reg &= ~(VC5_HDMI_DEEP_COLOR_CONFIG_1_INIT_PACK_PHASE_MASK | reg &= ~(VC5_HDMI_DEEP_COLOR_CONFIG_1_INIT_PACK_PHASE_MASK |
VC5_HDMI_DEEP_COLOR_CONFIG_1_COLOR_DEPTH_MASK); VC5_HDMI_DEEP_COLOR_CONFIG_1_COLOR_DEPTH_MASK);
@@ -1259,12 +1381,97 @@ static void vc4_hdmi_encoder_atomic_mode @@ -1260,12 +1382,97 @@ static void vc4_hdmi_encoder_atomic_mode
mutex_lock(&vc4_hdmi->mutex); mutex_lock(&vc4_hdmi->mutex);
vc4_hdmi->output_bpc = vc4_state->output_bpc; vc4_hdmi->output_bpc = vc4_state->output_bpc;
@ -348,7 +348,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
static enum drm_mode_status static enum drm_mode_status
vc4_hdmi_encoder_clock_valid(const struct vc4_hdmi *vc4_hdmi, vc4_hdmi_encoder_clock_valid(const struct vc4_hdmi *vc4_hdmi,
unsigned long long clock) unsigned long long clock)
@@ -1286,13 +1493,17 @@ vc4_hdmi_encoder_clock_valid(const struc @@ -1287,13 +1494,17 @@ vc4_hdmi_encoder_clock_valid(const struc
static unsigned long long static unsigned long long
vc4_hdmi_encoder_compute_mode_clock(const struct drm_display_mode *mode, vc4_hdmi_encoder_compute_mode_clock(const struct drm_display_mode *mode,
@ -367,7 +367,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
return clock * bpc / 8; return clock * bpc / 8;
} }
@@ -1300,11 +1511,11 @@ static int @@ -1301,11 +1512,11 @@ static int
vc4_hdmi_encoder_compute_clock(const struct vc4_hdmi *vc4_hdmi, vc4_hdmi_encoder_compute_clock(const struct vc4_hdmi *vc4_hdmi,
struct vc4_hdmi_connector_state *vc4_state, struct vc4_hdmi_connector_state *vc4_state,
const struct drm_display_mode *mode, const struct drm_display_mode *mode,
@ -381,7 +381,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
if (vc4_hdmi_encoder_clock_valid(vc4_hdmi, clock) != MODE_OK) if (vc4_hdmi_encoder_clock_valid(vc4_hdmi, clock) != MODE_OK)
return -EINVAL; return -EINVAL;
@@ -1314,10 +1525,55 @@ vc4_hdmi_encoder_compute_clock(const str @@ -1315,10 +1526,55 @@ vc4_hdmi_encoder_compute_clock(const str
} }
static int static int
@ -437,7 +437,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
struct drm_connector_state *conn_state = &vc4_state->base; struct drm_connector_state *conn_state = &vc4_state->base;
unsigned int max_bpc = clamp_t(unsigned int, conn_state->max_bpc, 8, 12); unsigned int max_bpc = clamp_t(unsigned int, conn_state->max_bpc, 8, 12);
unsigned int bpc; unsigned int bpc;
@@ -1326,17 +1582,18 @@ vc4_hdmi_encoder_compute_config(const st @@ -1327,17 +1583,18 @@ vc4_hdmi_encoder_compute_config(const st
for (bpc = max_bpc; bpc >= 8; bpc -= 2) { for (bpc = max_bpc; bpc >= 8; bpc -= 2) {
drm_dbg(dev, "Trying with a %d bpc output\n", bpc); drm_dbg(dev, "Trying with a %d bpc output\n", bpc);
@ -548,7 +548,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
static inline static inline
--- a/drivers/gpu/drm/vc4/vc4_regs.h --- a/drivers/gpu/drm/vc4/vc4_regs.h
+++ b/drivers/gpu/drm/vc4/vc4_regs.h +++ b/drivers/gpu/drm/vc4/vc4_regs.h
@@ -804,11 +804,27 @@ enum { @@ -810,11 +810,27 @@ enum {
# define VC4_HD_CSC_CTL_RGB2YCC BIT(1) # define VC4_HD_CSC_CTL_RGB2YCC BIT(1)
# define VC4_HD_CSC_CTL_ENABLE BIT(0) # define VC4_HD_CSC_CTL_ENABLE BIT(0)

View File

@ -17,7 +17,7 @@ Signed-off-by: Matthias Reichl <hias@horus.com>
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c --- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
@@ -1415,9 +1415,6 @@ vc4_hdmi_sink_supports_format_bpc(const @@ -1416,9 +1416,6 @@ vc4_hdmi_sink_supports_format_bpc(const
case VC4_HDMI_OUTPUT_RGB: case VC4_HDMI_OUTPUT_RGB:
drm_dbg(dev, "RGB Format, checking the constraints.\n"); drm_dbg(dev, "RGB Format, checking the constraints.\n");

View File

@ -14,7 +14,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
--- a/drivers/gpu/drm/vc4/vc4_plane.c --- a/drivers/gpu/drm/vc4/vc4_plane.c
+++ b/drivers/gpu/drm/vc4/vc4_plane.c +++ b/drivers/gpu/drm/vc4/vc4_plane.c
@@ -664,6 +664,48 @@ static const u32 colorspace_coeffs[2][DR @@ -666,6 +666,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 /* Writes out a full display list for an active plane to the plane's
* private dlist state. * private dlist state.
*/ */
@@ -946,13 +988,8 @@ static int vc4_plane_mode_set(struct drm @@ -948,13 +990,8 @@ static int vc4_plane_mode_set(struct drm
/* Position Word 2: Source Image Size, Alpha */ /* Position Word 2: Source Image Size, Alpha */
vc4_state->pos2_offset = vc4_state->dlist_count; vc4_state->pos2_offset = vc4_state->dlist_count;
vc4_dlist_write(vc4_state, 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], VC4_SET_FIELD(vc4_state->src_w[0],
SCALER_POS2_WIDTH) | SCALER_POS2_WIDTH) |
VC4_SET_FIELD(vc4_state->src_h[0], VC4_SET_FIELD(vc4_state->src_h[0],
@@ -997,14 +1034,9 @@ static int vc4_plane_mode_set(struct drm @@ -999,14 +1036,9 @@ static int vc4_plane_mode_set(struct drm
vc4_dlist_write(vc4_state, vc4_dlist_write(vc4_state,
VC4_SET_FIELD(state->alpha >> 4, VC4_SET_FIELD(state->alpha >> 4,
SCALER5_CTL2_ALPHA) | SCALER5_CTL2_ALPHA) |
@ -95,7 +95,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
); );
/* Position Word 1: Scaled Image Dimensions. */ /* Position Word 1: Scaled Image Dimensions. */
@@ -1494,6 +1526,10 @@ struct drm_plane *vc4_plane_init(struct @@ -1496,6 +1528,10 @@ struct drm_plane *vc4_plane_init(struct
drm_plane_helper_add(plane, &vc4_plane_helper_funcs); drm_plane_helper_add(plane, &vc4_plane_helper_funcs);
drm_plane_create_alpha_property(plane); drm_plane_create_alpha_property(plane);

View File

@ -18,7 +18,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c --- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
@@ -1496,7 +1496,7 @@ vc4_hdmi_encoder_compute_mode_clock(cons @@ -1497,7 +1497,7 @@ vc4_hdmi_encoder_compute_mode_clock(cons
unsigned int bpc, unsigned int bpc,
enum vc4_hdmi_output_format fmt) enum vc4_hdmi_output_format fmt)
{ {

View File

@ -18,7 +18,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
--- a/drivers/mfd/Kconfig --- a/drivers/mfd/Kconfig
+++ b/drivers/mfd/Kconfig +++ b/drivers/mfd/Kconfig
@@ -1093,6 +1093,16 @@ config MFD_SPMI_PMIC @@ -1094,6 +1094,16 @@ config MFD_SPMI_PMIC
Say M here if you want to include support for the SPMI PMIC Say M here if you want to include support for the SPMI PMIC
series as a module. The module will be called "qcom-spmi-pmic". series as a module. The module will be called "qcom-spmi-pmic".

View File

@ -167,7 +167,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
drm_connector_attach_encoder(connector, encoder); drm_connector_attach_encoder(connector, encoder);
return 0; return 0;
@@ -1385,6 +1487,7 @@ static void vc4_hdmi_encoder_atomic_mode @@ -1386,6 +1488,7 @@ static void vc4_hdmi_encoder_atomic_mode
mutex_lock(&vc4_hdmi->mutex); mutex_lock(&vc4_hdmi->mutex);
vc4_hdmi->output_bpc = vc4_state->output_bpc; vc4_hdmi->output_bpc = vc4_state->output_bpc;
vc4_hdmi->output_format = vc4_state->output_format; vc4_hdmi->output_format = vc4_state->output_format;

View File

@ -14,7 +14,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
--- a/drivers/gpu/drm/vc4/vc4_plane.c --- a/drivers/gpu/drm/vc4/vc4_plane.c
+++ b/drivers/gpu/drm/vc4/vc4_plane.c +++ b/drivers/gpu/drm/vc4/vc4_plane.c
@@ -135,6 +135,34 @@ static const struct hvs_format { @@ -137,6 +137,34 @@ static const struct hvs_format {
.pixel_order = HVS_PIXEL_ORDER_XYCBCR, .pixel_order = HVS_PIXEL_ORDER_XYCBCR,
.hvs5_only = true, .hvs5_only = true,
}, },

View File

@ -18,8 +18,8 @@ Reviewed-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
--- a/drivers/gpu/drm/vc4/vc4_dpi.c --- a/drivers/gpu/drm/vc4/vc4_dpi.c
+++ b/drivers/gpu/drm/vc4/vc4_dpi.c +++ b/drivers/gpu/drm/vc4/vc4_dpi.c
@@ -191,6 +191,10 @@ static void vc4_dpi_encoder_enable(struc @@ -189,6 +189,10 @@ static void vc4_dpi_encoder_enable(struc
dpi_c |= VC4_SET_FIELD(DPI_FORMAT_16BIT_565_RGB_3, dpi_c |= VC4_SET_FIELD(DPI_FORMAT_16BIT_565_RGB_1,
DPI_FORMAT); DPI_FORMAT);
break; break;
+ case MEDIA_BUS_FMT_RGB565_1X24_CPADHI: + case MEDIA_BUS_FMT_RGB565_1X24_CPADHI:

View File

@ -15,53 +15,53 @@ Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
--- a/drivers/media/i2c/imx219.c --- a/drivers/media/i2c/imx219.c
+++ b/drivers/media/i2c/imx219.c +++ b/drivers/media/i2c/imx219.c
@@ -153,6 +153,9 @@ struct imx219_mode { @@ -162,6 +162,9 @@ struct imx219_mode {
/* Default register values */ /* 2x2 binning is used */
struct imx219_reg_list reg_list; bool binning;
+ +
+ /* Relative pixel clock rate factor for the mode. */ + /* Relative pixel clock rate factor for the mode. */
+ unsigned int rate_factor; + unsigned int rate_factor;
}; };
/* static const struct imx219_reg imx219_common_regs[] = {
@@ -495,6 +498,7 @@ static const struct imx219_mode supporte @@ -402,6 +405,7 @@ static const struct imx219_mode supporte
.num_of_regs = ARRAY_SIZE(mode_3280x2464_regs),
.regs = mode_3280x2464_regs, .regs = mode_3280x2464_regs,
}, },
.binning = false,
+ .rate_factor = 1, + .rate_factor = 1,
}, },
{ {
/* 1080P 30fps cropped */ /* 1080P 30fps cropped */
@@ -511,6 +515,7 @@ static const struct imx219_mode supporte @@ -419,6 +423,7 @@ static const struct imx219_mode supporte
.num_of_regs = ARRAY_SIZE(mode_1920_1080_regs),
.regs = mode_1920_1080_regs, .regs = mode_1920_1080_regs,
}, },
.binning = false,
+ .rate_factor = 1, + .rate_factor = 1,
}, },
{ {
/* 2x2 binned 30fps mode */ /* 2x2 binned 30fps mode */
@@ -527,6 +532,7 @@ static const struct imx219_mode supporte @@ -436,6 +441,7 @@ static const struct imx219_mode supporte
.num_of_regs = ARRAY_SIZE(mode_1640_1232_regs),
.regs = mode_1640_1232_regs, .regs = mode_1640_1232_regs,
}, },
.binning = true,
+ .rate_factor = 1, + .rate_factor = 1,
}, },
{ {
/* 640x480 30fps mode */ /* 640x480 30fps mode */
@@ -543,6 +549,11 @@ static const struct imx219_mode supporte @@ -453,6 +459,11 @@ static const struct imx219_mode supporte
.num_of_regs = ARRAY_SIZE(mode_640_480_regs),
.regs = mode_640_480_regs, .regs = mode_640_480_regs,
}, },
.binning = true,
+ /* + /*
+ * This mode uses a special 2x2 binning that doubles the + * This mode uses a special 2x2 binning that doubles the
+ * the internal pixel clock rate. + * the internal pixel clock rate.
+ */ + */
+ .rate_factor = 2, + .rate_factor = 2,
}, },
}; };
@@ -765,7 +776,8 @@ static int imx219_set_ctrl(struct v4l2_c @@ -675,7 +686,8 @@ static int imx219_set_ctrl(struct v4l2_c
break; break;
case V4L2_CID_EXPOSURE: case V4L2_CID_EXPOSURE:
ret = imx219_write_reg(imx219, IMX219_REG_EXPOSURE, ret = imx219_write_reg(imx219, IMX219_REG_EXPOSURE,
@ -71,7 +71,7 @@ Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
break; break;
case V4L2_CID_DIGITAL_GAIN: case V4L2_CID_DIGITAL_GAIN:
ret = imx219_write_reg(imx219, IMX219_REG_DIGITAL_GAIN, ret = imx219_write_reg(imx219, IMX219_REG_DIGITAL_GAIN,
@@ -785,7 +797,8 @@ static int imx219_set_ctrl(struct v4l2_c @@ -695,7 +707,8 @@ static int imx219_set_ctrl(struct v4l2_c
case V4L2_CID_VBLANK: case V4L2_CID_VBLANK:
ret = imx219_write_reg(imx219, IMX219_REG_VTS, ret = imx219_write_reg(imx219, IMX219_REG_VTS,
IMX219_REG_VALUE_16BIT, IMX219_REG_VALUE_16BIT,
@ -81,7 +81,7 @@ Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
break; break;
case V4L2_CID_TEST_PATTERN_RED: case V4L2_CID_TEST_PATTERN_RED:
ret = imx219_write_reg(imx219, IMX219_REG_TESTP_RED, ret = imx219_write_reg(imx219, IMX219_REG_TESTP_RED,
@@ -957,7 +970,7 @@ static int imx219_set_pad_format(struct @@ -867,7 +880,7 @@ static int imx219_set_pad_format(struct
struct imx219 *imx219 = to_imx219(sd); struct imx219 *imx219 = to_imx219(sd);
const struct imx219_mode *mode; const struct imx219_mode *mode;
struct v4l2_mbus_framefmt *framefmt; struct v4l2_mbus_framefmt *framefmt;
@ -90,7 +90,7 @@ Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
unsigned int i; unsigned int i;
if (fmt->pad >= NUM_PADS) if (fmt->pad >= NUM_PADS)
@@ -1018,6 +1031,12 @@ static int imx219_set_pad_format(struct @@ -928,6 +941,12 @@ static int imx219_set_pad_format(struct
hblank = IMX219_PPL_DEFAULT - mode->width; hblank = IMX219_PPL_DEFAULT - mode->width;
__v4l2_ctrl_modify_range(imx219->hblank, hblank, hblank, __v4l2_ctrl_modify_range(imx219->hblank, hblank, hblank,
1, hblank); 1, hblank);
@ -103,7 +103,7 @@ Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
} }
} else { } else {
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) { if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
@@ -1362,7 +1381,7 @@ static int imx219_init_controls(struct i @@ -1315,7 +1334,7 @@ static int imx219_init_controls(struct i
struct v4l2_ctrl_handler *ctrl_hdlr; struct v4l2_ctrl_handler *ctrl_hdlr;
unsigned int height = imx219->mode->height; unsigned int height = imx219->mode->height;
struct v4l2_fwnode_device_properties props; struct v4l2_fwnode_device_properties props;
@ -112,7 +112,7 @@ Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
int i, ret; int i, ret;
ctrl_hdlr = &imx219->ctrl_handler; ctrl_hdlr = &imx219->ctrl_handler;
@@ -1374,11 +1393,11 @@ static int imx219_init_controls(struct i @@ -1327,11 +1346,11 @@ static int imx219_init_controls(struct i
ctrl_hdlr->lock = &imx219->mutex; ctrl_hdlr->lock = &imx219->mutex;
/* By default, PIXEL_RATE is read only */ /* By default, PIXEL_RATE is read only */

View File

@ -1,25 +0,0 @@
From 4626e370de018aed097d54247bae5a29391198ee Mon Sep 17 00:00:00 2001
From: Dave Stevenson <dave.stevenson@raspberrypi.com>
Date: Mon, 14 Feb 2022 15:34:51 +0000
Subject: [PATCH] drm/vc4: For DPI, MEDIA_BUS_FMT_RGB565_1X16 is mode
1, not 3.
The mapping is incorrect for RGB565_1X16 as it should be
DPI_FORMAT_18BIT_666_RGB_1 instead of DPI_FORMAT_18BIT_666_RGB_3.
Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
---
drivers/gpu/drm/vc4/vc4_dpi.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/drivers/gpu/drm/vc4/vc4_dpi.c
+++ b/drivers/gpu/drm/vc4/vc4_dpi.c
@@ -188,7 +188,7 @@ static void vc4_dpi_encoder_enable(struc
DPI_ORDER);
break;
case MEDIA_BUS_FMT_RGB565_1X16:
- dpi_c |= VC4_SET_FIELD(DPI_FORMAT_16BIT_565_RGB_3,
+ dpi_c |= VC4_SET_FIELD(DPI_FORMAT_16BIT_565_RGB_1,
DPI_FORMAT);
break;
case MEDIA_BUS_FMT_RGB565_1X24_CPADHI:

View File

@ -399,7 +399,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
* overwrite the setup from the bootloader (just 128b out of * overwrite the setup from the bootloader (just 128b out of
--- a/drivers/gpu/drm/vc4/vc4_regs.h --- a/drivers/gpu/drm/vc4/vc4_regs.h
+++ b/drivers/gpu/drm/vc4/vc4_regs.h +++ b/drivers/gpu/drm/vc4/vc4_regs.h
@@ -234,6 +234,7 @@ @@ -240,6 +240,7 @@
# define SCALER_DISPCTRL_DSPEIEOLN(x) BIT(8 + ((x) * 2)) # define SCALER_DISPCTRL_DSPEIEOLN(x) BIT(8 + ((x) * 2))
/* Enables Display 0 EOF contribution to SCALER_DISPSTAT_IRQDISP0 */ /* Enables Display 0 EOF contribution to SCALER_DISPSTAT_IRQDISP0 */
# define SCALER_DISPCTRL_DSPEIEOF(x) BIT(7 + ((x) * 2)) # define SCALER_DISPCTRL_DSPEIEOF(x) BIT(7 + ((x) * 2))

View File

@ -88,7 +88,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
if (ret) if (ret)
--- a/drivers/gpu/drm/vc4/vc4_plane.c --- a/drivers/gpu/drm/vc4/vc4_plane.c
+++ b/drivers/gpu/drm/vc4/vc4_plane.c +++ b/drivers/gpu/drm/vc4/vc4_plane.c
@@ -1573,9 +1573,14 @@ struct drm_plane *vc4_plane_init(struct @@ -1575,9 +1575,14 @@ struct drm_plane *vc4_plane_init(struct
DRM_COLOR_YCBCR_BT709, DRM_COLOR_YCBCR_BT709,
DRM_COLOR_YCBCR_LIMITED_RANGE); 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) int vc4_plane_create_additional_planes(struct drm_device *drm)
{ {
struct drm_plane *cursor_plane; struct drm_plane *cursor_plane;
@@ -1591,7 +1596,7 @@ int vc4_plane_create_additional_planes(s @@ -1593,7 +1598,7 @@ int vc4_plane_create_additional_planes(s
* modest number of planes to expose, that should hopefully * modest number of planes to expose, that should hopefully
* still cover any sane usecase. * still cover any sane usecase.
*/ */
@ -112,7 +112,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
struct drm_plane *plane = struct drm_plane *plane =
vc4_plane_init(drm, DRM_PLANE_TYPE_OVERLAY); vc4_plane_init(drm, DRM_PLANE_TYPE_OVERLAY);
@@ -1600,17 +1605,28 @@ int vc4_plane_create_additional_planes(s @@ -1602,17 +1607,28 @@ int vc4_plane_create_additional_planes(s
plane->possible_crtcs = plane->possible_crtcs =
GENMASK(drm->mode_config.num_crtc - 1, 0); GENMASK(drm->mode_config.num_crtc - 1, 0);

View File

@ -23,7 +23,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
u32 src_w[2], src_h[2]; u32 src_w[2], src_h[2];
--- a/drivers/gpu/drm/vc4/vc4_plane.c --- a/drivers/gpu/drm/vc4/vc4_plane.c
+++ b/drivers/gpu/drm/vc4/vc4_plane.c +++ b/drivers/gpu/drm/vc4/vc4_plane.c
@@ -179,9 +179,9 @@ static const struct hvs_format *vc4_get_ @@ -181,9 +181,9 @@ static const struct hvs_format *vc4_get_
static enum vc4_scaling_mode vc4_get_scaling_mode(u32 src, u32 dst) static enum vc4_scaling_mode vc4_get_scaling_mode(u32 src, u32 dst)
{ {
@ -35,7 +35,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
return VC4_SCALING_PPF; return VC4_SCALING_PPF;
else else
return VC4_SCALING_TPZ; return VC4_SCALING_TPZ;
@@ -388,15 +388,10 @@ static int vc4_plane_setup_clipping_and_ @@ -390,15 +390,10 @@ static int vc4_plane_setup_clipping_and_
for (i = 0; i < num_planes; i++) for (i = 0; i < num_planes; i++)
vc4_state->offsets[i] = bo->paddr + fb->offsets[i]; vc4_state->offsets[i] = bo->paddr + fb->offsets[i];
@ -55,7 +55,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
vc4_state->crtc_x = state->dst.x1; vc4_state->crtc_x = state->dst.x1;
vc4_state->crtc_y = state->dst.y1; vc4_state->crtc_y = state->dst.y1;
@@ -449,7 +444,7 @@ static void vc4_write_tpz(struct vc4_pla @@ -451,7 +446,7 @@ static void vc4_write_tpz(struct vc4_pla
{ {
u32 scale, recip; u32 scale, recip;
@ -64,7 +64,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
/* The specs note that while the reciprocal would be defined /* The specs note that while the reciprocal would be defined
* as (1<<32)/scale, ~0 is close enough. * as (1<<32)/scale, ~0 is close enough.
@@ -495,7 +490,7 @@ static u32 vc4_lbm_size(struct drm_plane @@ -497,7 +492,7 @@ static u32 vc4_lbm_size(struct drm_plane
if (vc4_state->x_scaling[0] == VC4_SCALING_TPZ) if (vc4_state->x_scaling[0] == VC4_SCALING_TPZ)
pix_per_line = vc4_state->crtc_w; pix_per_line = vc4_state->crtc_w;
else else
@ -73,7 +73,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
if (!vc4_state->is_yuv) { if (!vc4_state->is_yuv) {
if (vc4_state->y_scaling[0] == VC4_SCALING_TPZ) if (vc4_state->y_scaling[0] == VC4_SCALING_TPZ)
@@ -586,7 +581,8 @@ static void vc4_plane_calc_load(struct d @@ -588,7 +583,8 @@ static void vc4_plane_calc_load(struct d
for (i = 0; i < fb->format->num_planes; i++) { for (i = 0; i < fb->format->num_planes; i++) {
/* Even if the bandwidth/plane required for a single frame is /* Even if the bandwidth/plane required for a single frame is
* *
@ -83,7 +83,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
* *
* when downscaling, we have to read more pixels per line in * when downscaling, we have to read more pixels per line in
* the time frame reserved for a single line, so the bandwidth * the time frame reserved for a single line, so the bandwidth
@@ -595,11 +591,11 @@ static void vc4_plane_calc_load(struct d @@ -597,11 +593,11 @@ static void vc4_plane_calc_load(struct d
* load by this number. We're likely over-estimating the read * load by this number. We're likely over-estimating the read
* demand, but that's better than under-estimating it. * demand, but that's better than under-estimating it.
*/ */
@ -99,7 +99,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
vc4_state->hvs_load += vc4_state->crtc_h * vc4_state->crtc_w; vc4_state->hvs_load += vc4_state->crtc_h * vc4_state->crtc_w;
} }
@@ -752,7 +748,8 @@ static int vc4_plane_mode_set(struct drm @@ -754,7 +750,8 @@ static int vc4_plane_mode_set(struct drm
bool mix_plane_alpha; bool mix_plane_alpha;
bool covers_screen; bool covers_screen;
u32 scl0, scl1, pitch0; u32 scl0, scl1, pitch0;
@ -109,7 +109,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
u32 hvs_format = format->hvs; u32 hvs_format = format->hvs;
unsigned int rotation; unsigned int rotation;
int ret, i; int ret, i;
@@ -764,6 +761,9 @@ static int vc4_plane_mode_set(struct drm @@ -766,6 +763,9 @@ static int vc4_plane_mode_set(struct drm
if (ret) if (ret)
return ret; return ret;
@ -119,7 +119,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
/* SCL1 is used for Cb/Cr scaling of planar formats. For RGB /* 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 * 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 * the scaler do the same thing. For YUV, the Y plane needs
@@ -784,9 +784,11 @@ static int vc4_plane_mode_set(struct drm @@ -786,9 +786,11 @@ static int vc4_plane_mode_set(struct drm
DRM_MODE_REFLECT_Y); DRM_MODE_REFLECT_Y);
/* We must point to the last line when Y reflection is enabled. */ /* We must point to the last line when Y reflection is enabled. */
@ -133,7 +133,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
switch (base_format_mod) { switch (base_format_mod) {
case DRM_FORMAT_MOD_LINEAR: case DRM_FORMAT_MOD_LINEAR:
@@ -801,7 +803,7 @@ static int vc4_plane_mode_set(struct drm @@ -803,7 +805,7 @@ static int vc4_plane_mode_set(struct drm
(i ? v_subsample : 1) * (i ? v_subsample : 1) *
fb->pitches[i]; fb->pitches[i];
@ -142,7 +142,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
(i ? h_subsample : 1) * (i ? h_subsample : 1) *
fb->format->cpp[i]; fb->format->cpp[i];
} }
@@ -824,7 +826,7 @@ static int vc4_plane_mode_set(struct drm @@ -826,7 +828,7 @@ static int vc4_plane_mode_set(struct drm
* pitch * tile_h == tile_size * tiles_per_row * pitch * tile_h == tile_size * tiles_per_row
*/ */
u32 tiles_w = fb->pitches[0] >> (tile_size_shift - tile_h_shift); u32 tiles_w = fb->pitches[0] >> (tile_size_shift - tile_h_shift);
@ -151,7 +151,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
u32 tiles_r = tiles_w - tiles_l; u32 tiles_r = tiles_w - tiles_l;
u32 tiles_t = src_y >> tile_h_shift; u32 tiles_t = src_y >> tile_h_shift;
/* Intra-tile offsets, which modify the base address (the /* Intra-tile offsets, which modify the base address (the
@@ -834,7 +836,7 @@ static int vc4_plane_mode_set(struct drm @@ -836,7 +838,7 @@ static int vc4_plane_mode_set(struct drm
u32 tile_y = (src_y >> 4) & 1; u32 tile_y = (src_y >> 4) & 1;
u32 subtile_y = (src_y >> 2) & 3; u32 subtile_y = (src_y >> 2) & 3;
u32 utile_y = src_y & 3; u32 utile_y = src_y & 3;
@ -160,7 +160,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
u32 y_off = src_y & tile_h_mask; u32 y_off = src_y & tile_h_mask;
/* When Y reflection is requested we must set the /* When Y reflection is requested we must set the
@@ -930,7 +932,7 @@ static int vc4_plane_mode_set(struct drm @@ -932,7 +934,7 @@ static int vc4_plane_mode_set(struct drm
* of the 12-pixels in that 128-bit word is the * of the 12-pixels in that 128-bit word is the
* first pixel to be used * first pixel to be used
*/ */
@ -169,7 +169,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
u32 aligned = remaining_pixels / 12; u32 aligned = remaining_pixels / 12;
u32 last_bits = remaining_pixels % 12; u32 last_bits = remaining_pixels % 12;
@@ -952,12 +954,12 @@ static int vc4_plane_mode_set(struct drm @@ -954,12 +956,12 @@ static int vc4_plane_mode_set(struct drm
return -EINVAL; return -EINVAL;
} }
pix_per_tile = tile_w / fb->format->cpp[0]; pix_per_tile = tile_w / fb->format->cpp[0];
@ -184,7 +184,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
vc4_state->offsets[i] += param * tile_w * tile; vc4_state->offsets[i] += param * tile_w * tile;
vc4_state->offsets[i] += src_y / vc4_state->offsets[i] += src_y /
@@ -1018,10 +1020,8 @@ static int vc4_plane_mode_set(struct drm @@ -1020,10 +1022,8 @@ static int vc4_plane_mode_set(struct drm
vc4_dlist_write(vc4_state, vc4_dlist_write(vc4_state,
(mix_plane_alpha ? SCALER_POS2_ALPHA_MIX : 0) | (mix_plane_alpha ? SCALER_POS2_ALPHA_MIX : 0) |
vc4_hvs4_get_alpha_blend_mode(state) | vc4_hvs4_get_alpha_blend_mode(state) |
@ -197,7 +197,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
/* Position Word 3: Context. Written by the HVS. */ /* Position Word 3: Context. Written by the HVS. */
vc4_dlist_write(vc4_state, 0xc0c0c0c0); vc4_dlist_write(vc4_state, 0xc0c0c0c0);
@@ -1079,10 +1079,8 @@ static int vc4_plane_mode_set(struct drm @@ -1081,10 +1081,8 @@ static int vc4_plane_mode_set(struct drm
/* Position Word 2: Source Image Size */ /* Position Word 2: Source Image Size */
vc4_state->pos2_offset = vc4_state->dlist_count; vc4_state->pos2_offset = vc4_state->dlist_count;
vc4_dlist_write(vc4_state, vc4_dlist_write(vc4_state,

View File

@ -11,7 +11,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
--- a/drivers/gpu/drm/vc4/vc4_plane.c --- a/drivers/gpu/drm/vc4/vc4_plane.c
+++ b/drivers/gpu/drm/vc4/vc4_plane.c +++ b/drivers/gpu/drm/vc4/vc4_plane.c
@@ -458,14 +458,47 @@ static void vc4_write_tpz(struct vc4_pla @@ -460,14 +460,47 @@ static void vc4_write_tpz(struct vc4_pla
VC4_SET_FIELD(recip, SCALER_TPZ1_RECIP)); VC4_SET_FIELD(recip, SCALER_TPZ1_RECIP));
} }
@ -62,7 +62,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
} }
static u32 vc4_lbm_size(struct drm_plane_state *state) static u32 vc4_lbm_size(struct drm_plane_state *state)
@@ -524,13 +557,13 @@ static void vc4_write_scaling_parameters @@ -526,13 +559,13 @@ static void vc4_write_scaling_parameters
/* Ch0 H-PPF Word 0: Scaling Parameters */ /* Ch0 H-PPF Word 0: Scaling Parameters */
if (vc4_state->x_scaling[channel] == VC4_SCALING_PPF) { if (vc4_state->x_scaling[channel] == VC4_SCALING_PPF) {
vc4_write_ppf(vc4_state, vc4_write_ppf(vc4_state,
@ -78,7 +78,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
vc4_dlist_write(vc4_state, 0xc0c0c0c0); vc4_dlist_write(vc4_state, 0xc0c0c0c0);
} }
@@ -978,6 +1011,24 @@ static int vc4_plane_mode_set(struct drm @@ -980,6 +1013,24 @@ static int vc4_plane_mode_set(struct drm
return -EINVAL; return -EINVAL;
} }

View File

@ -10,7 +10,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
--- a/drivers/gpu/drm/vc4/vc4_plane.c --- a/drivers/gpu/drm/vc4/vc4_plane.c
+++ b/drivers/gpu/drm/vc4/vc4_plane.c +++ b/drivers/gpu/drm/vc4/vc4_plane.c
@@ -461,17 +461,18 @@ static void vc4_write_tpz(struct vc4_pla @@ -463,17 +463,18 @@ static void vc4_write_tpz(struct vc4_pla
/* phase magnitude bits */ /* phase magnitude bits */
#define PHASE_BITS 6 #define PHASE_BITS 6
@ -31,7 +31,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
offset += -(1 << PHASE_BITS >> 2); offset += -(1 << PHASE_BITS >> 2);
} else { } else {
/* the phase is relative to scale_src->x, so shift it for display list's x value */ /* the phase is relative to scale_src->x, so shift it for display list's x value */
@@ -557,13 +558,15 @@ static void vc4_write_scaling_parameters @@ -559,13 +560,15 @@ static void vc4_write_scaling_parameters
/* Ch0 H-PPF Word 0: Scaling Parameters */ /* Ch0 H-PPF Word 0: Scaling Parameters */
if (vc4_state->x_scaling[channel] == VC4_SCALING_PPF) { if (vc4_state->x_scaling[channel] == VC4_SCALING_PPF) {
vc4_write_ppf(vc4_state, vc4_write_ppf(vc4_state,
@ -49,7 +49,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
vc4_dlist_write(vc4_state, 0xc0c0c0c0); vc4_dlist_write(vc4_state, 0xc0c0c0c0);
} }
@@ -1622,6 +1625,8 @@ struct drm_plane *vc4_plane_init(struct @@ -1624,6 +1627,8 @@ struct drm_plane *vc4_plane_init(struct
DRM_COLOR_YCBCR_BT709, DRM_COLOR_YCBCR_BT709,
DRM_COLOR_YCBCR_LIMITED_RANGE); DRM_COLOR_YCBCR_LIMITED_RANGE);

View File

@ -13,7 +13,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
--- a/drivers/pinctrl/bcm/pinctrl-bcm2835.c --- a/drivers/pinctrl/bcm/pinctrl-bcm2835.c
+++ b/drivers/pinctrl/bcm/pinctrl-bcm2835.c +++ b/drivers/pinctrl/bcm/pinctrl-bcm2835.c
@@ -910,9 +910,12 @@ static int bcm2835_pmx_free(struct pinct @@ -908,9 +908,12 @@ static int bcm2835_pmx_free(struct pinct
unsigned offset) unsigned offset)
{ {
struct bcm2835_pinctrl *pc = pinctrl_dev_get_drvdata(pctldev); struct bcm2835_pinctrl *pc = pinctrl_dev_get_drvdata(pctldev);
@ -28,7 +28,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
return 0; return 0;
} }
@@ -954,10 +957,7 @@ static void bcm2835_pmx_gpio_disable_fre @@ -952,10 +955,7 @@ static void bcm2835_pmx_gpio_disable_fre
struct pinctrl_gpio_range *range, struct pinctrl_gpio_range *range,
unsigned offset) unsigned offset)
{ {

View File

@ -332,7 +332,7 @@ This reverts commit e99a1b69da07ee3b89a6b8005b854e6c04bfb450.
* overwrite the setup from the bootloader (just 128b out of * overwrite the setup from the bootloader (just 128b out of
--- a/drivers/gpu/drm/vc4/vc4_regs.h --- a/drivers/gpu/drm/vc4/vc4_regs.h
+++ b/drivers/gpu/drm/vc4/vc4_regs.h +++ b/drivers/gpu/drm/vc4/vc4_regs.h
@@ -234,7 +234,6 @@ @@ -240,7 +240,6 @@
# define SCALER_DISPCTRL_DSPEIEOLN(x) BIT(8 + ((x) * 2)) # define SCALER_DISPCTRL_DSPEIEOLN(x) BIT(8 + ((x) * 2))
/* Enables Display 0 EOF contribution to SCALER_DISPSTAT_IRQDISP0 */ /* Enables Display 0 EOF contribution to SCALER_DISPSTAT_IRQDISP0 */
# define SCALER_DISPCTRL_DSPEIEOF(x) BIT(7 + ((x) * 2)) # define SCALER_DISPCTRL_DSPEIEOF(x) BIT(7 + ((x) * 2))

View File

@ -25,7 +25,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c --- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
@@ -1809,6 +1809,9 @@ static int vc4_hdmi_encoder_atomic_check @@ -1810,6 +1810,9 @@ static int vc4_hdmi_encoder_atomic_check
struct vc4_hdmi_connector_state *vc4_state = conn_state_to_vc4_hdmi_conn_state(conn_state); struct vc4_hdmi_connector_state *vc4_state = conn_state_to_vc4_hdmi_conn_state(conn_state);
struct drm_display_mode *mode = &crtc_state->adjusted_mode; struct drm_display_mode *mode = &crtc_state->adjusted_mode;
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder); struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
@ -35,7 +35,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
unsigned long long pixel_rate = mode->clock * 1000; unsigned long long pixel_rate = mode->clock * 1000;
unsigned long long tmds_rate; unsigned long long tmds_rate;
int ret; int ret;
@@ -1837,6 +1840,11 @@ static int vc4_hdmi_encoder_atomic_check @@ -1838,6 +1841,11 @@ static int vc4_hdmi_encoder_atomic_check
if (ret) if (ret)
return ret; return ret;

View File

@ -14,7 +14,7 @@ Signed-off-by: Dom Cobley <popcornmix@gmail.com>
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c --- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
@@ -1551,9 +1551,6 @@ static void vc4_hdmi_encoder_post_crtc_e @@ -1552,9 +1552,6 @@ static void vc4_hdmi_encoder_post_crtc_e
WARN_ON(!(HDMI_READ(HDMI_SCHEDULER_CONTROL) & WARN_ON(!(HDMI_READ(HDMI_SCHEDULER_CONTROL) &
VC4_HDMI_SCHEDULER_CONTROL_HDMI_ACTIVE)); VC4_HDMI_SCHEDULER_CONTROL_HDMI_ACTIVE));

View File

@ -65,7 +65,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
struct drm_device *drm = connector->dev; struct drm_device *drm = connector->dev;
struct drm_display_mode *mode; struct drm_display_mode *mode;
@@ -1672,11 +1673,12 @@ vc4_hdmi_encoder_clock_valid(const struc @@ -1673,11 +1674,12 @@ vc4_hdmi_encoder_clock_valid(const struc
{ {
const struct drm_connector *connector = &vc4_hdmi->connector; const struct drm_connector *connector = &vc4_hdmi->connector;
const struct drm_display_info *info = &connector->display_info; const struct drm_display_info *info = &connector->display_info;
@ -79,7 +79,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
return MODE_CLOCK_HIGH; return MODE_CLOCK_HIGH;
if (info->max_tmds_clock && clock > (info->max_tmds_clock * 1000)) if (info->max_tmds_clock && clock > (info->max_tmds_clock * 1000))
@@ -3157,14 +3159,6 @@ static int vc4_hdmi_bind(struct device * @@ -3158,14 +3160,6 @@ static int vc4_hdmi_bind(struct device *
vc4_hdmi->disable_wifi_frequencies = vc4_hdmi->disable_wifi_frequencies =
of_property_read_bool(dev->of_node, "wifi-2.4ghz-coexistence"); of_property_read_bool(dev->of_node, "wifi-2.4ghz-coexistence");

View File

@ -24,7 +24,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
--- a/drivers/gpu/drm/vc4/vc4_plane.c --- a/drivers/gpu/drm/vc4/vc4_plane.c
+++ b/drivers/gpu/drm/vc4/vc4_plane.c +++ b/drivers/gpu/drm/vc4/vc4_plane.c
@@ -1429,6 +1429,10 @@ static int vc4_plane_atomic_async_check( @@ -1431,6 +1431,10 @@ static int vc4_plane_atomic_async_check(
old_vc4_state = to_vc4_plane_state(plane->state); old_vc4_state = to_vc4_plane_state(plane->state);
new_vc4_state = to_vc4_plane_state(new_plane_state); new_vc4_state = to_vc4_plane_state(new_plane_state);

View File

@ -227,7 +227,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
/* 48k words of 2x12-bit pixels */ /* 48k words of 2x12-bit pixels */
drm_mm_init(&hvs->lbm_mm, 0, 48 * 1024); drm_mm_init(&hvs->lbm_mm, 0, 48 * 1024);
else else
@@ -1008,7 +1008,7 @@ static int vc4_hvs_bind(struct device *d @@ -1019,7 +1019,7 @@ static int vc4_hvs_bind(struct device *d
NULL); NULL);
vc4_debugfs_add_file(drm, "hvs_dlists", vc4_hvs_debugfs_dlist, vc4_debugfs_add_file(drm, "hvs_dlists", vc4_hvs_debugfs_dlist,
NULL); NULL);
@ -294,7 +294,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
} else { } else {
--- a/drivers/gpu/drm/vc4/vc4_plane.c --- a/drivers/gpu/drm/vc4/vc4_plane.c
+++ b/drivers/gpu/drm/vc4/vc4_plane.c +++ b/drivers/gpu/drm/vc4/vc4_plane.c
@@ -542,10 +542,10 @@ static u32 vc4_lbm_size(struct drm_plane @@ -544,10 +544,10 @@ static u32 vc4_lbm_size(struct drm_plane
} }
/* Align it to 64 or 128 (hvs5) bytes */ /* Align it to 64 or 128 (hvs5) bytes */
@ -307,7 +307,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
return lbm; return lbm;
} }
@@ -664,7 +664,7 @@ static int vc4_plane_allocate_lbm(struct @@ -666,7 +666,7 @@ static int vc4_plane_allocate_lbm(struct
ret = drm_mm_insert_node_generic(&vc4->hvs->lbm_mm, ret = drm_mm_insert_node_generic(&vc4->hvs->lbm_mm,
&vc4_state->lbm, &vc4_state->lbm,
lbm_size, lbm_size,
@ -316,7 +316,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
0, 0); 0, 0);
spin_unlock_irqrestore(&vc4->hvs->mm_lock, irqflags); spin_unlock_irqrestore(&vc4->hvs->mm_lock, irqflags);
@@ -1039,7 +1039,7 @@ static int vc4_plane_mode_set(struct drm @@ -1041,7 +1041,7 @@ static int vc4_plane_mode_set(struct drm
mix_plane_alpha = state->alpha != DRM_BLEND_ALPHA_OPAQUE && mix_plane_alpha = state->alpha != DRM_BLEND_ALPHA_OPAQUE &&
fb->format->has_alpha; fb->format->has_alpha;
@ -325,7 +325,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
/* Control word */ /* Control word */
vc4_dlist_write(vc4_state, vc4_dlist_write(vc4_state,
SCALER_CTL0_VALID | SCALER_CTL0_VALID |
@@ -1570,14 +1570,13 @@ static const struct drm_plane_funcs vc4_ @@ -1572,14 +1572,13 @@ static const struct drm_plane_funcs vc4_
struct drm_plane *vc4_plane_init(struct drm_device *dev, struct drm_plane *vc4_plane_init(struct drm_device *dev,
enum drm_plane_type type) enum drm_plane_type type)
{ {
@ -341,7 +341,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
static const uint64_t modifiers[] = { static const uint64_t modifiers[] = {
DRM_FORMAT_MOD_BROADCOM_VC4_T_TILED, DRM_FORMAT_MOD_BROADCOM_VC4_T_TILED,
DRM_FORMAT_MOD_BROADCOM_SAND128, DRM_FORMAT_MOD_BROADCOM_SAND128,
@@ -1593,7 +1592,7 @@ struct drm_plane *vc4_plane_init(struct @@ -1595,7 +1594,7 @@ struct drm_plane *vc4_plane_init(struct
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
for (i = 0; i < ARRAY_SIZE(hvs_formats); i++) { for (i = 0; i < ARRAY_SIZE(hvs_formats); i++) {

View File

@ -20,7 +20,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
--- a/drivers/gpu/drm/vc4/vc4_plane.c --- a/drivers/gpu/drm/vc4/vc4_plane.c
+++ b/drivers/gpu/drm/vc4/vc4_plane.c +++ b/drivers/gpu/drm/vc4/vc4_plane.c
@@ -1502,6 +1502,13 @@ static const struct drm_plane_helper_fun @@ -1504,6 +1504,13 @@ static const struct drm_plane_helper_fun
.atomic_async_update = vc4_plane_atomic_async_update, .atomic_async_update = vc4_plane_atomic_async_update,
}; };
@ -34,7 +34,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
static bool vc4_format_mod_supported(struct drm_plane *plane, static bool vc4_format_mod_supported(struct drm_plane *plane,
uint32_t format, uint32_t format,
uint64_t modifier) uint64_t modifier)
@@ -1606,7 +1613,10 @@ struct drm_plane *vc4_plane_init(struct @@ -1608,7 +1615,10 @@ struct drm_plane *vc4_plane_init(struct
if (ret) if (ret)
return ERR_PTR(ret); return ERR_PTR(ret);

View File

@ -37,7 +37,7 @@ Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
--- a/Makefile --- a/Makefile
+++ b/Makefile +++ b/Makefile
@@ -433,7 +433,8 @@ endif @@ -440,7 +440,8 @@ endif
HOSTPKG_CONFIG = pkg-config HOSTPKG_CONFIG = pkg-config
export KBUILD_USERCFLAGS := -Wall -Wmissing-prototypes -Wstrict-prototypes \ export KBUILD_USERCFLAGS := -Wall -Wmissing-prototypes -Wstrict-prototypes \

View File

@ -49,7 +49,7 @@ Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
--- a/Makefile --- a/Makefile
+++ b/Makefile +++ b/Makefile
@@ -517,7 +517,7 @@ KBUILD_CFLAGS := -Wall -Wundef -Werror @@ -524,7 +524,7 @@ KBUILD_CFLAGS := -Wall -Wundef -Werror
-fno-strict-aliasing -fno-common -fshort-wchar -fno-PIE \ -fno-strict-aliasing -fno-common -fshort-wchar -fno-PIE \
-Werror=implicit-function-declaration -Werror=implicit-int \ -Werror=implicit-function-declaration -Werror=implicit-int \
-Werror=return-type -Wno-format-security \ -Werror=return-type -Wno-format-security \

View File

@ -32,7 +32,7 @@ Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
--- a/Makefile --- a/Makefile
+++ b/Makefile +++ b/Makefile
@@ -433,7 +433,7 @@ endif @@ -440,7 +440,7 @@ endif
HOSTPKG_CONFIG = pkg-config HOSTPKG_CONFIG = pkg-config
export KBUILD_USERCFLAGS := -Wall -Wmissing-prototypes -Wstrict-prototypes \ export KBUILD_USERCFLAGS := -Wall -Wmissing-prototypes -Wstrict-prototypes \

View File

@ -593,7 +593,7 @@ Change-Id: I71de7cd15b8dfa6f9fdd838023474693c4fee0a7
VM_BUG_ON_PAGE(tail > 2 && page_tail->mapping != TAIL_MAPPING, VM_BUG_ON_PAGE(tail > 2 && page_tail->mapping != TAIL_MAPPING,
--- a/mm/memcontrol.c --- a/mm/memcontrol.c
+++ b/mm/memcontrol.c +++ b/mm/memcontrol.c
@@ -5237,6 +5237,7 @@ static struct mem_cgroup *mem_cgroup_all @@ -5241,6 +5241,7 @@ static struct mem_cgroup *mem_cgroup_all
memcg->deferred_split_queue.split_queue_len = 0; memcg->deferred_split_queue.split_queue_len = 0;
#endif #endif
idr_replace(&mem_cgroup_idr, memcg, memcg->id.id); idr_replace(&mem_cgroup_idr, memcg, memcg->id.id);

View File

@ -339,7 +339,7 @@ Change-Id: I25d9eda8c6bdc7c3653b9f210a159d6c247c81e8
/* will mmdrop() in finish_task_switch(). */ /* will mmdrop() in finish_task_switch(). */
--- a/mm/memcontrol.c --- a/mm/memcontrol.c
+++ b/mm/memcontrol.c +++ b/mm/memcontrol.c
@@ -5174,6 +5174,7 @@ static void __mem_cgroup_free(struct mem @@ -5178,6 +5178,7 @@ static void __mem_cgroup_free(struct mem
static void mem_cgroup_free(struct mem_cgroup *memcg) static void mem_cgroup_free(struct mem_cgroup *memcg)
{ {
@ -347,7 +347,7 @@ Change-Id: I25d9eda8c6bdc7c3653b9f210a159d6c247c81e8
memcg_wb_domain_exit(memcg); memcg_wb_domain_exit(memcg);
__mem_cgroup_free(memcg); __mem_cgroup_free(memcg);
} }
@@ -6206,6 +6207,29 @@ static void mem_cgroup_move_task(void) @@ -6210,6 +6211,29 @@ static void mem_cgroup_move_task(void)
} }
#endif #endif
@ -377,7 +377,7 @@ Change-Id: I25d9eda8c6bdc7c3653b9f210a159d6c247c81e8
static int seq_puts_memcg_tunable(struct seq_file *m, unsigned long value) static int seq_puts_memcg_tunable(struct seq_file *m, unsigned long value)
{ {
if (value == PAGE_COUNTER_MAX) if (value == PAGE_COUNTER_MAX)
@@ -6549,6 +6573,7 @@ struct cgroup_subsys memory_cgrp_subsys @@ -6553,6 +6577,7 @@ struct cgroup_subsys memory_cgrp_subsys
.css_reset = mem_cgroup_css_reset, .css_reset = mem_cgroup_css_reset,
.css_rstat_flush = mem_cgroup_css_rstat_flush, .css_rstat_flush = mem_cgroup_css_rstat_flush,
.can_attach = mem_cgroup_can_attach, .can_attach = mem_cgroup_can_attach,

View File

@ -19,7 +19,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
interface-type = "ace"; interface-type = "ace";
reg = <0x5000 0x1000>; reg = <0x5000 0x1000>;
}; };
@@ -937,6 +937,8 @@ @@ -938,6 +938,8 @@
power-domains = <&scpsys MT7622_POWER_DOMAIN_ETHSYS>; power-domains = <&scpsys MT7622_POWER_DOMAIN_ETHSYS>;
mediatek,ethsys = <&ethsys>; mediatek,ethsys = <&ethsys>;
mediatek,sgmiisys = <&sgmiisys>; mediatek,sgmiisys = <&sgmiisys>;

View File

@ -11,7 +11,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/arch/arm64/boot/dts/mediatek/mt7622.dtsi --- a/arch/arm64/boot/dts/mediatek/mt7622.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt7622.dtsi +++ b/arch/arm64/boot/dts/mediatek/mt7622.dtsi
@@ -893,6 +893,11 @@ @@ -894,6 +894,11 @@
}; };
}; };
@ -23,7 +23,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
ethsys: syscon@1b000000 { ethsys: syscon@1b000000 {
compatible = "mediatek,mt7622-ethsys", compatible = "mediatek,mt7622-ethsys",
"syscon"; "syscon";
@@ -911,6 +916,26 @@ @@ -912,6 +917,26 @@
#dma-cells = <1>; #dma-cells = <1>;
}; };
@ -50,7 +50,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
eth: ethernet@1b100000 { eth: ethernet@1b100000 {
compatible = "mediatek,mt7622-eth", compatible = "mediatek,mt7622-eth",
"mediatek,mt2701-eth", "mediatek,mt2701-eth",
@@ -938,6 +963,9 @@ @@ -939,6 +964,9 @@
mediatek,ethsys = <&ethsys>; mediatek,ethsys = <&ethsys>;
mediatek,sgmiisys = <&sgmiisys>; mediatek,sgmiisys = <&sgmiisys>;
mediatek,cci-control = <&cci_control2>; mediatek,cci-control = <&cci_control2>;

View File

@ -13,7 +13,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
--- a/arch/arm64/boot/dts/mediatek/mt7622.dtsi --- a/arch/arm64/boot/dts/mediatek/mt7622.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt7622.dtsi +++ b/arch/arm64/boot/dts/mediatek/mt7622.dtsi
@@ -962,7 +962,7 @@ @@ -963,7 +963,7 @@
power-domains = <&scpsys MT7622_POWER_DOMAIN_ETHSYS>; power-domains = <&scpsys MT7622_POWER_DOMAIN_ETHSYS>;
mediatek,ethsys = <&ethsys>; mediatek,ethsys = <&ethsys>;
mediatek,sgmiisys = <&sgmiisys>; mediatek,sgmiisys = <&sgmiisys>;

View File

@ -17,7 +17,7 @@ Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
--- a/drivers/bluetooth/btusb.c --- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c +++ b/drivers/bluetooth/btusb.c
@@ -2268,6 +2268,23 @@ struct btmtk_section_map { @@ -2272,6 +2272,23 @@ struct btmtk_section_map {
}; };
} __packed; } __packed;
@ -41,7 +41,7 @@ Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
static void btusb_mtk_wmt_recv(struct urb *urb) static void btusb_mtk_wmt_recv(struct urb *urb)
{ {
struct hci_dev *hdev = urb->context; struct hci_dev *hdev = urb->context;
@@ -3919,6 +3936,7 @@ static int btusb_probe(struct usb_interf @@ -3923,6 +3940,7 @@ static int btusb_probe(struct usb_interf
hdev->shutdown = btusb_mtk_shutdown; hdev->shutdown = btusb_mtk_shutdown;
hdev->manufacturer = 70; hdev->manufacturer = 70;
hdev->cmd_timeout = btusb_mtk_cmd_timeout; hdev->cmd_timeout = btusb_mtk_cmd_timeout;

View File

@ -18,7 +18,7 @@ Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
--- a/drivers/bluetooth/btusb.c --- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c +++ b/drivers/bluetooth/btusb.c
@@ -2273,7 +2273,7 @@ static int btusb_set_bdaddr_mtk(struct h @@ -2277,7 +2277,7 @@ static int btusb_set_bdaddr_mtk(struct h
struct sk_buff *skb; struct sk_buff *skb;
long ret; long ret;

View File

@ -58,7 +58,7 @@ Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
--- a/drivers/bluetooth/btusb.c --- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c +++ b/drivers/bluetooth/btusb.c
@@ -460,6 +460,9 @@ static const struct usb_device_id blackl @@ -464,6 +464,9 @@ static const struct usb_device_id blackl
{ USB_DEVICE(0x13d3, 0x3564), .driver_info = BTUSB_MEDIATEK | { USB_DEVICE(0x13d3, 0x3564), .driver_info = BTUSB_MEDIATEK |
BTUSB_WIDEBAND_SPEECH | BTUSB_WIDEBAND_SPEECH |
BTUSB_VALID_LE_STATES }, BTUSB_VALID_LE_STATES },

View File

@ -56,7 +56,7 @@ Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
--- a/drivers/bluetooth/btusb.c --- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c +++ b/drivers/bluetooth/btusb.c
@@ -451,6 +451,9 @@ static const struct usb_device_id blackl @@ -455,6 +455,9 @@ static const struct usb_device_id blackl
BTUSB_VALID_LE_STATES }, BTUSB_VALID_LE_STATES },
/* Additional MediaTek MT7921 Bluetooth devices */ /* Additional MediaTek MT7921 Bluetooth devices */

View File

@ -54,7 +54,7 @@ Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
--- a/drivers/bluetooth/btusb.c --- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c +++ b/drivers/bluetooth/btusb.c
@@ -469,6 +469,9 @@ static const struct usb_device_id blackl @@ -473,6 +473,9 @@ static const struct usb_device_id blackl
{ USB_DEVICE(0x0489, 0xe0cd), .driver_info = BTUSB_MEDIATEK | { USB_DEVICE(0x0489, 0xe0cd), .driver_info = BTUSB_MEDIATEK |
BTUSB_WIDEBAND_SPEECH | BTUSB_WIDEBAND_SPEECH |
BTUSB_VALID_LE_STATES }, BTUSB_VALID_LE_STATES },

View File

@ -116,7 +116,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
help help
--- a/net/core/dev.c --- a/net/core/dev.c
+++ b/net/core/dev.c +++ b/net/core/dev.c
@@ -3588,6 +3588,11 @@ static int xmit_one(struct sk_buff *skb, @@ -3590,6 +3590,11 @@ static int xmit_one(struct sk_buff *skb,
if (dev_nit_active(dev)) if (dev_nit_active(dev))
dev_queue_xmit_nit(skb, dev); dev_queue_xmit_nit(skb, dev);

View File

@ -330,7 +330,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/net/core/sock.c --- a/net/core/sock.c
+++ b/net/core/sock.c +++ b/net/core/sock.c
@@ -3857,6 +3857,8 @@ static __net_initdata struct pernet_oper @@ -3866,6 +3866,8 @@ static __net_initdata struct pernet_oper
static int __init proto_init(void) static int __init proto_init(void)
{ {

View File

@ -10,7 +10,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/Makefile --- a/Makefile
+++ b/Makefile +++ b/Makefile
@@ -527,7 +527,7 @@ KBUILD_LDFLAGS_MODULE := @@ -534,7 +534,7 @@ KBUILD_LDFLAGS_MODULE :=
KBUILD_LDFLAGS := KBUILD_LDFLAGS :=
CLANG_FLAGS := CLANG_FLAGS :=

View File

@ -202,7 +202,7 @@ Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
return !!nor->params->erase_map.uniform_erase_type; return !!nor->params->erase_map.uniform_erase_type;
} }
@@ -2391,6 +2393,7 @@ static int spi_nor_select_erase(struct s @@ -2400,6 +2402,7 @@ static int spi_nor_select_erase(struct s
{ {
struct spi_nor_erase_map *map = &nor->params->erase_map; struct spi_nor_erase_map *map = &nor->params->erase_map;
const struct spi_nor_erase_type *erase = NULL; const struct spi_nor_erase_type *erase = NULL;
@ -210,7 +210,7 @@ Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
struct mtd_info *mtd = &nor->mtd; struct mtd_info *mtd = &nor->mtd;
u32 wanted_size = nor->info->sector_size; u32 wanted_size = nor->info->sector_size;
int i; int i;
@@ -2423,8 +2426,9 @@ static int spi_nor_select_erase(struct s @@ -2432,8 +2435,9 @@ static int spi_nor_select_erase(struct s
*/ */
for (i = SNOR_ERASE_TYPE_MAX - 1; i >= 0; i--) { for (i = SNOR_ERASE_TYPE_MAX - 1; i >= 0; i--) {
if (map->erase_type[i].size) { if (map->erase_type[i].size) {
@ -222,7 +222,7 @@ Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
} }
} }
@@ -2432,6 +2436,9 @@ static int spi_nor_select_erase(struct s @@ -2441,6 +2445,9 @@ static int spi_nor_select_erase(struct s
return -EINVAL; return -EINVAL;
mtd->erasesize = erase->size; mtd->erasesize = erase->size;

View File

@ -8,7 +8,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
--- a/drivers/mtd/ubi/build.c --- a/drivers/mtd/ubi/build.c
+++ b/drivers/mtd/ubi/build.c +++ b/drivers/mtd/ubi/build.c
@@ -1184,6 +1184,73 @@ static struct mtd_info * __init open_mtd @@ -1191,6 +1191,73 @@ static struct mtd_info * __init open_mtd
return mtd; return mtd;
} }
@ -82,7 +82,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
static int __init ubi_init(void) static int __init ubi_init(void)
{ {
int err, i, k; int err, i, k;
@@ -1267,6 +1334,12 @@ static int __init ubi_init(void) @@ -1274,6 +1341,12 @@ static int __init ubi_init(void)
} }
} }

View File

@ -91,7 +91,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
for (i = sizeof(struct ipt_entry); for (i = sizeof(struct ipt_entry);
i < e->target_offset; i < e->target_offset;
i += m->u.match_size) { i += m->u.match_size) {
@@ -1223,12 +1260,15 @@ compat_copy_entry_to_user(struct ipt_ent @@ -1222,12 +1259,15 @@ compat_copy_entry_to_user(struct ipt_ent
compat_uint_t origsize; compat_uint_t origsize;
const struct xt_entry_match *ematch; const struct xt_entry_match *ematch;
int ret = 0; int ret = 0;

View File

@ -185,7 +185,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
cfg->fc_flags |= RTF_REJECT; cfg->fc_flags |= RTF_REJECT;
if (rtm->rtm_type == RTN_LOCAL) if (rtm->rtm_type == RTN_LOCAL)
@@ -6300,6 +6331,8 @@ static int ip6_route_dev_notify(struct n @@ -6301,6 +6332,8 @@ static int ip6_route_dev_notify(struct n
#ifdef CONFIG_IPV6_MULTIPLE_TABLES #ifdef CONFIG_IPV6_MULTIPLE_TABLES
net->ipv6.ip6_prohibit_entry->dst.dev = dev; net->ipv6.ip6_prohibit_entry->dst.dev = dev;
net->ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(dev); net->ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(dev);
@ -194,7 +194,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
net->ipv6.ip6_blk_hole_entry->dst.dev = dev; net->ipv6.ip6_blk_hole_entry->dst.dev = dev;
net->ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(dev); net->ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(dev);
#endif #endif
@@ -6311,6 +6344,7 @@ static int ip6_route_dev_notify(struct n @@ -6312,6 +6345,7 @@ static int ip6_route_dev_notify(struct n
in6_dev_put_clear(&net->ipv6.ip6_null_entry->rt6i_idev); in6_dev_put_clear(&net->ipv6.ip6_null_entry->rt6i_idev);
#ifdef CONFIG_IPV6_MULTIPLE_TABLES #ifdef CONFIG_IPV6_MULTIPLE_TABLES
in6_dev_put_clear(&net->ipv6.ip6_prohibit_entry->rt6i_idev); in6_dev_put_clear(&net->ipv6.ip6_prohibit_entry->rt6i_idev);
@ -202,7 +202,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
in6_dev_put_clear(&net->ipv6.ip6_blk_hole_entry->rt6i_idev); in6_dev_put_clear(&net->ipv6.ip6_blk_hole_entry->rt6i_idev);
#endif #endif
} }
@@ -6502,6 +6536,8 @@ static int __net_init ip6_route_net_init @@ -6503,6 +6537,8 @@ static int __net_init ip6_route_net_init
#ifdef CONFIG_IPV6_MULTIPLE_TABLES #ifdef CONFIG_IPV6_MULTIPLE_TABLES
net->ipv6.fib6_has_custom_rules = false; net->ipv6.fib6_has_custom_rules = false;
@ -211,7 +211,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
net->ipv6.ip6_prohibit_entry = kmemdup(&ip6_prohibit_entry_template, net->ipv6.ip6_prohibit_entry = kmemdup(&ip6_prohibit_entry_template,
sizeof(*net->ipv6.ip6_prohibit_entry), sizeof(*net->ipv6.ip6_prohibit_entry),
GFP_KERNEL); GFP_KERNEL);
@@ -6512,11 +6548,21 @@ static int __net_init ip6_route_net_init @@ -6513,11 +6549,21 @@ static int __net_init ip6_route_net_init
ip6_template_metrics, true); ip6_template_metrics, true);
INIT_LIST_HEAD(&net->ipv6.ip6_prohibit_entry->rt6i_uncached); INIT_LIST_HEAD(&net->ipv6.ip6_prohibit_entry->rt6i_uncached);
@ -234,7 +234,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
net->ipv6.ip6_blk_hole_entry->dst.ops = &net->ipv6.ip6_dst_ops; net->ipv6.ip6_blk_hole_entry->dst.ops = &net->ipv6.ip6_dst_ops;
dst_init_metrics(&net->ipv6.ip6_blk_hole_entry->dst, dst_init_metrics(&net->ipv6.ip6_blk_hole_entry->dst,
ip6_template_metrics, true); ip6_template_metrics, true);
@@ -6543,6 +6589,8 @@ out: @@ -6544,6 +6590,8 @@ out:
return ret; return ret;
#ifdef CONFIG_IPV6_MULTIPLE_TABLES #ifdef CONFIG_IPV6_MULTIPLE_TABLES
@ -243,7 +243,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
out_ip6_prohibit_entry: out_ip6_prohibit_entry:
kfree(net->ipv6.ip6_prohibit_entry); kfree(net->ipv6.ip6_prohibit_entry);
out_ip6_null_entry: out_ip6_null_entry:
@@ -6562,6 +6610,7 @@ static void __net_exit ip6_route_net_exi @@ -6563,6 +6611,7 @@ static void __net_exit ip6_route_net_exi
kfree(net->ipv6.ip6_null_entry); kfree(net->ipv6.ip6_null_entry);
#ifdef CONFIG_IPV6_MULTIPLE_TABLES #ifdef CONFIG_IPV6_MULTIPLE_TABLES
kfree(net->ipv6.ip6_prohibit_entry); kfree(net->ipv6.ip6_prohibit_entry);
@ -251,7 +251,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
kfree(net->ipv6.ip6_blk_hole_entry); kfree(net->ipv6.ip6_blk_hole_entry);
#endif #endif
dst_entries_destroy(&net->ipv6.ip6_dst_ops); dst_entries_destroy(&net->ipv6.ip6_dst_ops);
@@ -6645,6 +6694,9 @@ void __init ip6_route_init_special_entri @@ -6646,6 +6695,9 @@ void __init ip6_route_init_special_entri
init_net.ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev); init_net.ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
init_net.ipv6.ip6_blk_hole_entry->dst.dev = init_net.loopback_dev; init_net.ipv6.ip6_blk_hole_entry->dst.dev = init_net.loopback_dev;
init_net.ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev); init_net.ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);

View File

@ -32,7 +32,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
__u8 inner_protocol_type:1; __u8 inner_protocol_type:1;
--- a/net/core/dev.c --- a/net/core/dev.c
+++ b/net/core/dev.c +++ b/net/core/dev.c
@@ -6063,6 +6063,9 @@ static enum gro_result dev_gro_receive(s @@ -6065,6 +6065,9 @@ static enum gro_result dev_gro_receive(s
int same_flow; int same_flow;
int grow; int grow;
@ -42,7 +42,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
if (netif_elide_gro(skb->dev)) if (netif_elide_gro(skb->dev))
goto normal; goto normal;
@@ -8077,6 +8080,48 @@ static void __netdev_adjacent_dev_unlink @@ -8079,6 +8082,48 @@ static void __netdev_adjacent_dev_unlink
&upper_dev->adj_list.lower); &upper_dev->adj_list.lower);
} }
@ -91,7 +91,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
static int __netdev_upper_dev_link(struct net_device *dev, static int __netdev_upper_dev_link(struct net_device *dev,
struct net_device *upper_dev, bool master, struct net_device *upper_dev, bool master,
void *upper_priv, void *upper_info, void *upper_priv, void *upper_info,
@@ -8128,6 +8173,7 @@ static int __netdev_upper_dev_link(struc @@ -8130,6 +8175,7 @@ static int __netdev_upper_dev_link(struc
if (ret) if (ret)
return ret; return ret;
@ -99,7 +99,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
ret = call_netdevice_notifiers_info(NETDEV_CHANGEUPPER, ret = call_netdevice_notifiers_info(NETDEV_CHANGEUPPER,
&changeupper_info.info); &changeupper_info.info);
ret = notifier_to_errno(ret); ret = notifier_to_errno(ret);
@@ -8224,6 +8270,7 @@ static void __netdev_upper_dev_unlink(st @@ -8226,6 +8272,7 @@ static void __netdev_upper_dev_unlink(st
__netdev_adjacent_dev_unlink_neighbour(dev, upper_dev); __netdev_adjacent_dev_unlink_neighbour(dev, upper_dev);
@ -107,7 +107,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
call_netdevice_notifiers_info(NETDEV_CHANGEUPPER, call_netdevice_notifiers_info(NETDEV_CHANGEUPPER,
&changeupper_info.info); &changeupper_info.info);
@@ -9043,6 +9090,7 @@ int dev_set_mac_address(struct net_devic @@ -9045,6 +9092,7 @@ int dev_set_mac_address(struct net_devic
if (err) if (err)
return err; return err;
dev->addr_assign_type = NET_ADDR_SET; dev->addr_assign_type = NET_ADDR_SET;

View File

@ -25,7 +25,7 @@ Acked-by: Thara Gopinath <thara.gopinath@linaro.org>
err_put_device: err_put_device:
put_device(&op->dev); put_device(&op->dev);
return ret; return ret;
@@ -1157,7 +1155,12 @@ static int tsens_probe(struct platform_d @@ -1163,7 +1161,12 @@ static int tsens_probe(struct platform_d
} }
} }

View File

@ -15,7 +15,7 @@ Link: https://lore.kernel.org/r/20210905165816.655275-1-robimarko@gmail.com
--- a/arch/arm64/boot/dts/qcom/ipq8074.dtsi --- a/arch/arm64/boot/dts/qcom/ipq8074.dtsi
+++ b/arch/arm64/boot/dts/qcom/ipq8074.dtsi +++ b/arch/arm64/boot/dts/qcom/ipq8074.dtsi
@@ -293,6 +293,25 @@ @@ -320,6 +320,25 @@
#reset-cells = <0x1>; #reset-cells = <0x1>;
}; };

View File

@ -15,7 +15,7 @@ Link: https://lore.kernel.org/r/20210831052325.21229-1-shawn.guo@linaro.org
--- a/arch/arm64/boot/dts/qcom/ipq8074.dtsi --- a/arch/arm64/boot/dts/qcom/ipq8074.dtsi
+++ b/arch/arm64/boot/dts/qcom/ipq8074.dtsi +++ b/arch/arm64/boot/dts/qcom/ipq8074.dtsi
@@ -212,7 +212,7 @@ @@ -239,7 +239,7 @@
status = "disabled"; status = "disabled";
}; };

View File

@ -16,7 +16,7 @@ Link: https://lore.kernel.org/r/20211001145421.18302-1-amadeus@jmu.edu.cn
--- a/arch/arm64/boot/dts/qcom/ipq8074.dtsi --- a/arch/arm64/boot/dts/qcom/ipq8074.dtsi
+++ b/arch/arm64/boot/dts/qcom/ipq8074.dtsi +++ b/arch/arm64/boot/dts/qcom/ipq8074.dtsi
@@ -430,6 +430,21 @@ @@ -457,6 +457,21 @@
status = "disabled"; status = "disabled";
}; };

Some files were not shown because too many files have changed in this diff Show More