diff --git a/0000-raspberrypi-kernel.patch b/0000-raspberrypi-kernel.patch index fb9d239..0e60454 100644 --- a/0000-raspberrypi-kernel.patch +++ b/0000-raspberrypi-kernel.patch @@ -1,6 +1,6 @@ -From 35f6133f2ce9fa83e762fd635e9eebdf585eceed Mon Sep 17 00:00:00 2001 +From 841ff0f5f922bae6091ade91698cbe5c3b5650cb Mon Sep 17 00:00:00 2001 From: yafen -Date: Wed, 9 Feb 2022 04:05:01 +0800 +Date: Sun, 22 May 2022 05:00:13 +0800 Subject: [PATCH] apply RPi patch of 5.10.95 --- @@ -492,7 +492,7 @@ Subject: [PATCH] apply RPi patch of 5.10.95 drivers/gpu/drm/panel/panel-ilitek-ili9881c.c | 253 +- .../gpu/drm/panel/panel-jdi-lt070me05000.c | 18 +- .../drm/panel/panel-raspberrypi-touchscreen.c | 49 +- - drivers/gpu/drm/panel/panel-simple.c | 107 +- + drivers/gpu/drm/panel/panel-simple.c | 106 +- drivers/gpu/drm/qxl/qxl_display.c | 6 +- drivers/gpu/drm/rcar-du/rcar_du_crtc.c | 22 +- drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 19 +- @@ -520,7 +520,7 @@ Subject: [PATCH] apply RPi patch of 5.10.95 drivers/gpu/drm/vc4/vc4_dsi.c | 277 +- drivers/gpu/drm/vc4/vc4_firmware_kms.c | 1992 +++++ drivers/gpu/drm/vc4/vc4_gem.c | 3 +- - drivers/gpu/drm/vc4/vc4_hdmi.c | 2213 ++++- + drivers/gpu/drm/vc4/vc4_hdmi.c | 2207 ++++- drivers/gpu/drm/vc4/vc4_hdmi.h | 148 +- drivers/gpu/drm/vc4/vc4_hdmi_phy.c | 45 +- drivers/gpu/drm/vc4/vc4_hdmi_regs.h | 35 +- @@ -899,7 +899,7 @@ Subject: [PATCH] apply RPi patch of 5.10.95 sound/soc/soc-core.c | 14 +- sound/usb/quirks-table.h | 9 + sound/usb/quirks.c | 6 + - 895 files changed, 175521 insertions(+), 4824 deletions(-) + 895 files changed, 175509 insertions(+), 4829 deletions(-) create mode 100644 Documentation/admin-guide/media/bcm2835-isp.rst create mode 100644 Documentation/devicetree/bindings/clock/raspberrypi,firmware-clocks.yaml create mode 100644 Documentation/devicetree/bindings/hwmon/rpi-poe-fan.txt @@ -4152,7 +4152,7 @@ index 4a05a105a9e6..ba3a5b599362 100644 pixfmt-nv16m pixfmt-nv24 diff --git a/MAINTAINERS b/MAINTAINERS -index 342cc197d0ca..3dbd7bb6cda2 100644 +index 23a23bd94c00..87dd5d4ac875 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -3417,6 +3417,29 @@ N: bcm113* @@ -4200,7 +4200,7 @@ index 342cc197d0ca..3dbd7bb6cda2 100644 DRM DRIVER FOR GRAIN MEDIA GM12U320 PROJECTORS M: Hans de Goede S: Maintained -@@ -16388,6 +16419,23 @@ S: Maintained +@@ -16402,6 +16433,23 @@ S: Maintained T: git git://linuxtv.org/media_tree.git F: drivers/media/i2c/imx355.c @@ -4225,7 +4225,7 @@ index 342cc197d0ca..3dbd7bb6cda2 100644 M: Maxim Levitsky M: Alex Dubov diff --git a/Makefile b/Makefile -index fbd2136f7bf8..624cb8c91b19 100644 +index 3ebf74787e93..e16eb72067f4 100644 --- a/Makefile +++ b/Makefile @@ -1354,6 +1354,9 @@ ifneq ($(dtstree),) @@ -4239,7 +4239,7 @@ index fbd2136f7bf8..624cb8c91b19 100644 dtbs: include/config/kernel.release scripts_dtc $(Q)$(MAKE) $(build)=$(dtstree) diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile -index ce66ffd5a1bb..ee163c52577e 100644 +index 7e8151681597..6bcb35ad76ac 100644 --- a/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile @@ -1,4 +1,24 @@ @@ -4275,7 +4275,7 @@ index ce66ffd5a1bb..ee163c52577e 100644 bcm2835-rpi-zero.dtb \ bcm2835-rpi-zero-w.dtb dtb-$(CONFIG_ARCH_BCM_5301X) += \ -@@ -1408,3 +1427,13 @@ dtb-$(CONFIG_ARCH_ASPEED) += \ +@@ -1409,3 +1428,13 @@ dtb-$(CONFIG_ARCH_ASPEED) += \ aspeed-bmc-opp-zaius.dtb \ aspeed-bmc-portwell-neptune.dtb \ aspeed-bmc-quanta-q71l.dtb @@ -45950,7 +45950,7 @@ index fb507d569922..cc52829d426a 100644 asmlinkage void aesbs_ecb_encrypt(u8 out[], u8 const in[], u8 const rk[], diff --git a/arch/arm64/kernel/armv8_deprecated.c b/arch/arm64/kernel/armv8_deprecated.c -index 7e88057269d5..989ea8fe49d0 100644 +index ba0d6b35461b..750f7239e86c 100644 --- a/arch/arm64/kernel/armv8_deprecated.c +++ b/arch/arm64/kernel/armv8_deprecated.c @@ -182,10 +182,15 @@ static void __init register_insn_emulation(struct insn_emulation_ops *ops) @@ -45970,7 +45970,7 @@ index 7e88057269d5..989ea8fe49d0 100644 case INSN_OBSOLETE: insn->current_mode = INSN_UNDEF; diff --git a/arch/arm64/kernel/cpuinfo.c b/arch/arm64/kernel/cpuinfo.c -index 50bbce672a3c..164b0b892dee 100644 +index e658b7a17d9b..37713bc17336 100644 --- a/arch/arm64/kernel/cpuinfo.c +++ b/arch/arm64/kernel/cpuinfo.c @@ -17,6 +17,7 @@ @@ -46020,10 +46020,10 @@ index 50bbce672a3c..164b0b892dee 100644 } diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c -index e0859f4e2807..7fda81dac4f9 100644 +index 538232b4c42a..3e78f429fc49 100644 --- a/drivers/bluetooth/btusb.c +++ b/drivers/bluetooth/btusb.c -@@ -419,6 +419,14 @@ static const struct usb_device_id blacklist_table[] = { +@@ -436,6 +436,14 @@ static const struct usb_device_id blacklist_table[] = { { USB_DEVICE(0x0bda, 0xb009), .driver_info = BTUSB_REALTEK }, { USB_DEVICE(0x2ff8, 0xb011), .driver_info = BTUSB_REALTEK }, @@ -47859,7 +47859,7 @@ index da8fcf147eb1..f78099e1d9e7 100644 obj-$(CONFIG_COMMON_CLK_MAX9485) += clk-max9485.o obj-$(CONFIG_ARCH_MILBEAUT_M10V) += clk-milbeaut.o diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c -index 1ac803e14fa3..7fc2d55add2e 100644 +index 178886823b90..7e74aafddbf8 100644 --- a/drivers/clk/bcm/clk-bcm2835.c +++ b/drivers/clk/bcm/clk-bcm2835.c @@ -35,6 +35,7 @@ @@ -47913,7 +47913,7 @@ index 1ac803e14fa3..7fc2d55add2e 100644 } cprman_write(cprman, data->a2w_ctrl_reg, -@@ -1016,6 +1022,30 @@ static unsigned long bcm2835_clock_get_rate(struct clk_hw *hw, +@@ -1011,6 +1017,30 @@ static unsigned long bcm2835_clock_get_rate(struct clk_hw *hw, return bcm2835_clock_rate_from_divisor(clock, parent_rate, div); } @@ -47944,7 +47944,7 @@ index 1ac803e14fa3..7fc2d55add2e 100644 static void bcm2835_clock_wait_busy(struct bcm2835_clock *clock) { struct bcm2835_cprman *cprman = clock->cprman; -@@ -1074,8 +1104,10 @@ static int bcm2835_clock_on(struct clk_hw *hw) +@@ -1069,8 +1099,10 @@ static int bcm2835_clock_on(struct clk_hw *hw) return 0; } @@ -47957,7 +47957,7 @@ index 1ac803e14fa3..7fc2d55add2e 100644 { struct bcm2835_clock *clock = bcm2835_clock_from_hw(hw); struct bcm2835_cprman *cprman = clock->cprman; -@@ -1085,15 +1117,24 @@ static int bcm2835_clock_set_rate(struct clk_hw *hw, +@@ -1080,15 +1112,24 @@ static int bcm2835_clock_set_rate(struct clk_hw *hw, spin_lock(&cprman->regs_lock); @@ -47990,7 +47990,7 @@ index 1ac803e14fa3..7fc2d55add2e 100644 ctl |= (div & CM_DIV_FRAC_MASK) ? CM_FRAC : 0; cprman_write(cprman, data->ctl_reg, ctl); -@@ -1104,6 +1145,12 @@ static int bcm2835_clock_set_rate(struct clk_hw *hw, +@@ -1099,6 +1140,12 @@ static int bcm2835_clock_set_rate(struct clk_hw *hw, return 0; } @@ -48003,7 +48003,7 @@ index 1ac803e14fa3..7fc2d55add2e 100644 static bool bcm2835_clk_is_pllc(struct clk_hw *hw) { -@@ -1287,6 +1334,7 @@ static const struct clk_ops bcm2835_clock_clk_ops = { +@@ -1282,6 +1329,7 @@ static const struct clk_ops bcm2835_clock_clk_ops = { .unprepare = bcm2835_clock_off, .recalc_rate = bcm2835_clock_get_rate, .set_rate = bcm2835_clock_set_rate, @@ -48011,7 +48011,7 @@ index 1ac803e14fa3..7fc2d55add2e 100644 .determine_rate = bcm2835_clock_determine_rate, .set_parent = bcm2835_clock_set_parent, .get_parent = bcm2835_clock_get_parent, -@@ -1304,7 +1352,7 @@ static int bcm2835_vpu_clock_is_on(struct clk_hw *hw) +@@ -1299,7 +1347,7 @@ static int bcm2835_vpu_clock_is_on(struct clk_hw *hw) */ static const struct clk_ops bcm2835_vpu_clock_clk_ops = { .is_prepared = bcm2835_vpu_clock_is_on, @@ -48020,7 +48020,7 @@ index 1ac803e14fa3..7fc2d55add2e 100644 .set_rate = bcm2835_clock_set_rate, .determine_rate = bcm2835_clock_determine_rate, .set_parent = bcm2835_clock_set_parent, -@@ -1312,6 +1360,8 @@ static const struct clk_ops bcm2835_vpu_clock_clk_ops = { +@@ -1307,6 +1355,8 @@ static const struct clk_ops bcm2835_vpu_clock_clk_ops = { .debug_init = bcm2835_clock_debug_init, }; @@ -48029,7 +48029,7 @@ index 1ac803e14fa3..7fc2d55add2e 100644 static struct clk_hw *bcm2835_register_pll(struct bcm2835_cprman *cprman, const void *data) { -@@ -1329,6 +1379,9 @@ static struct clk_hw *bcm2835_register_pll(struct bcm2835_cprman *cprman, +@@ -1324,6 +1374,9 @@ static struct clk_hw *bcm2835_register_pll(struct bcm2835_cprman *cprman, init.ops = &bcm2835_pll_clk_ops; init.flags = pll_data->flags | CLK_IGNORE_UNUSED; @@ -48039,7 +48039,7 @@ index 1ac803e14fa3..7fc2d55add2e 100644 pll = kzalloc(sizeof(*pll), GFP_KERNEL); if (!pll) return NULL; -@@ -1384,6 +1437,13 @@ bcm2835_register_pll_divider(struct bcm2835_cprman *cprman, +@@ -1379,6 +1432,13 @@ bcm2835_register_pll_divider(struct bcm2835_cprman *cprman, divider->div.hw.init = &init; divider->div.table = NULL; @@ -48053,7 +48053,7 @@ index 1ac803e14fa3..7fc2d55add2e 100644 divider->cprman = cprman; divider->data = divider_data; -@@ -1437,6 +1497,15 @@ static struct clk_hw *bcm2835_register_clock(struct bcm2835_cprman *cprman, +@@ -1432,6 +1492,15 @@ static struct clk_hw *bcm2835_register_clock(struct bcm2835_cprman *cprman, init.name = clock_data->name; init.flags = clock_data->flags | CLK_IGNORE_UNUSED; @@ -48069,7 +48069,7 @@ index 1ac803e14fa3..7fc2d55add2e 100644 /* * Pass the CLK_SET_RATE_PARENT flag if we are allowed to propagate * rate changes on at least of the parents. -@@ -1448,7 +1517,6 @@ static struct clk_hw *bcm2835_register_clock(struct bcm2835_cprman *cprman, +@@ -1443,7 +1512,6 @@ static struct clk_hw *bcm2835_register_clock(struct bcm2835_cprman *cprman, init.ops = &bcm2835_vpu_clock_clk_ops; } else { init.ops = &bcm2835_clock_clk_ops; @@ -48077,7 +48077,7 @@ index 1ac803e14fa3..7fc2d55add2e 100644 /* If the clock wasn't actually enabled at boot, it's not * critical. -@@ -1673,16 +1741,12 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { +@@ -1668,16 +1736,12 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { .hold_mask = CM_PLLA_HOLDCORE, .fixed_divider = 1, .flags = CLK_SET_RATE_PARENT), @@ -48100,7 +48100,7 @@ index 1ac803e14fa3..7fc2d55add2e 100644 [BCM2835_PLLA_DSI0] = REGISTER_PLL_DIV( SOC_ALL, .name = "plla_dsi0", -@@ -1983,14 +2047,12 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { +@@ -1978,14 +2042,12 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { .int_bits = 6, .frac_bits = 0, .tcnt_mux = 3), @@ -48121,7 +48121,7 @@ index 1ac803e14fa3..7fc2d55add2e 100644 /* * VPU clock. This doesn't have an enable bit, since it drives * the bus for everything else, and is special so it doesn't need -@@ -2152,21 +2214,6 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { +@@ -2147,21 +2209,6 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { .frac_bits = 12, .tcnt_mux = 28), @@ -48143,7 +48143,7 @@ index 1ac803e14fa3..7fc2d55add2e 100644 /* dsi clocks */ [BCM2835_CLOCK_DSI0E] = REGISTER_PER_CLK( SOC_ALL, -@@ -2216,6 +2263,8 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { +@@ -2211,6 +2258,8 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { .ctl_reg = CM_PERIICTL), }; @@ -48152,7 +48152,7 @@ index 1ac803e14fa3..7fc2d55add2e 100644 /* * Permanently take a reference on the parent of the SDRAM clock. * -@@ -2235,6 +2284,21 @@ static int bcm2835_mark_sdc_parent_critical(struct clk *sdc) +@@ -2230,6 +2279,21 @@ static int bcm2835_mark_sdc_parent_critical(struct clk *sdc) return clk_prepare_enable(parent); } @@ -48174,7 +48174,7 @@ index 1ac803e14fa3..7fc2d55add2e 100644 static int bcm2835_clk_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; -@@ -2243,7 +2307,9 @@ static int bcm2835_clk_probe(struct platform_device *pdev) +@@ -2238,7 +2302,9 @@ static int bcm2835_clk_probe(struct platform_device *pdev) const struct bcm2835_clk_desc *desc; const size_t asize = ARRAY_SIZE(clk_desc_array); const struct cprman_plat_data *pdata; @@ -48184,7 +48184,7 @@ index 1ac803e14fa3..7fc2d55add2e 100644 int ret; pdata = of_device_get_match_data(&pdev->dev); -@@ -2262,6 +2328,21 @@ static int bcm2835_clk_probe(struct platform_device *pdev) +@@ -2257,6 +2323,21 @@ static int bcm2835_clk_probe(struct platform_device *pdev) if (IS_ERR(cprman->regs)) return PTR_ERR(cprman->regs); @@ -48206,7 +48206,7 @@ index 1ac803e14fa3..7fc2d55add2e 100644 memcpy(cprman->real_parent_names, cprman_parent_names, sizeof(cprman_parent_names)); of_clk_parent_fill(dev->of_node, cprman->real_parent_names, -@@ -2295,8 +2376,15 @@ static int bcm2835_clk_probe(struct platform_device *pdev) +@@ -2290,8 +2371,15 @@ static int bcm2835_clk_probe(struct platform_device *pdev) if (ret) return ret; @@ -48223,7 +48223,7 @@ index 1ac803e14fa3..7fc2d55add2e 100644 } static const struct cprman_plat_data cprman_bcm2835_plat_data = { -@@ -2322,7 +2410,11 @@ static struct platform_driver bcm2835_clk_driver = { +@@ -2317,7 +2405,11 @@ static struct platform_driver bcm2835_clk_driver = { .probe = bcm2835_clk_probe, }; @@ -48949,7 +48949,7 @@ index 000000000000..9e2634465823 +MODULE_LICENSE("GPL v2"); +MODULE_ALIAS("platform:clk-hifiberry-dacpro"); diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c -index 515ef39c4610..d710b3466668 100644 +index b8a0e3d23698..8c10c84098fb 100644 --- a/drivers/clk/clk.c +++ b/drivers/clk/clk.c @@ -77,12 +77,14 @@ struct clk_core { @@ -49172,7 +49172,7 @@ index 515ef39c4610..d710b3466668 100644 /** * clk_get_parent - return the parent of a clk * @clk: the clk whose parent gets returned -@@ -3820,6 +3946,7 @@ __clk_register(struct device *dev, struct device_node *np, struct clk_hw *hw) +@@ -3838,6 +3964,7 @@ __clk_register(struct device *dev, struct device_node *np, struct clk_hw *hw) goto fail_parents; INIT_HLIST_HEAD(&core->clks); @@ -50625,7 +50625,7 @@ index 1d965c1252ca..849e63bb426d 100644 MODULE_AUTHOR("Eric Anholt "); MODULE_DESCRIPTION("Raspberry Pi firmware driver"); diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig -index b6240ea130b9..0dfb98eb9b96 100644 +index c91355c89ec6..344405baf78e 100644 --- a/drivers/gpio/Kconfig +++ b/drivers/gpio/Kconfig @@ -193,6 +193,12 @@ config GPIO_BCM_XGS_IPROC @@ -50641,7 +50641,7 @@ index b6240ea130b9..0dfb98eb9b96 100644 config GPIO_BRCMSTB tristate "BRCMSTB GPIO support" default y if (ARCH_BRCMSTB || BMIPS_GENERIC) -@@ -478,6 +484,14 @@ config GPIO_PMIC_EIC_SPRD +@@ -487,6 +493,14 @@ config GPIO_PMIC_EIC_SPRD help Say yes here to support Spreadtrum PMIC EIC device. @@ -50656,7 +50656,7 @@ index b6240ea130b9..0dfb98eb9b96 100644 config GPIO_PXA bool "PXA GPIO support" depends on ARCH_PXA || ARCH_MMP || COMPILE_TEST -@@ -1169,6 +1183,15 @@ config HTC_EGPIO +@@ -1178,6 +1192,15 @@ config HTC_EGPIO several HTC phones. It provides basic support for input pins, output pins, and irqs. @@ -50673,7 +50673,7 @@ index b6240ea130b9..0dfb98eb9b96 100644 tristate "Janz VMOD-TTL Digital IO Module" depends on MFD_JANZ_CMODIO diff --git a/drivers/gpio/Makefile b/drivers/gpio/Makefile -index 260ae251317c..9019663045ca 100644 +index 1af147d8ad71..cb5a275692d5 100644 --- a/drivers/gpio/Makefile +++ b/drivers/gpio/Makefile @@ -38,6 +38,7 @@ obj-$(CONFIG_GPIO_ASPEED_SGPIO) += gpio-aspeed-sgpio.o @@ -52344,10 +52344,10 @@ index 81569009f884..78dd8e12525d 100644 obj-y += xlnx/ +obj-y += gud/ diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c -index a5b6f36fe1d7..d8ce4c324284 100644 +index 6c8f141103da..374f2bf06c3a 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c -@@ -4989,7 +4989,6 @@ static void dm_disable_vblank(struct drm_crtc *crtc) +@@ -4992,7 +4992,6 @@ static void dm_disable_vblank(struct drm_crtc *crtc) static const struct drm_crtc_funcs amdgpu_dm_crtc_funcs = { .reset = dm_crtc_reset_state, .destroy = amdgpu_dm_crtc_destroy, @@ -52355,7 +52355,7 @@ index a5b6f36fe1d7..d8ce4c324284 100644 .set_config = drm_atomic_helper_set_config, .page_flip = drm_atomic_helper_page_flip, .atomic_duplicate_state = dm_crtc_duplicate_state, -@@ -5473,25 +5472,6 @@ static int fill_hdr_info_packet(const struct drm_connector_state *state, +@@ -5476,25 +5475,6 @@ static int fill_hdr_info_packet(const struct drm_connector_state *state, return 0; } @@ -52381,7 +52381,7 @@ index a5b6f36fe1d7..d8ce4c324284 100644 static int amdgpu_dm_connector_atomic_check(struct drm_connector *conn, struct drm_atomic_state *state) -@@ -5507,7 +5487,7 @@ amdgpu_dm_connector_atomic_check(struct drm_connector *conn, +@@ -5510,7 +5490,7 @@ amdgpu_dm_connector_atomic_check(struct drm_connector *conn, if (!crtc) return 0; @@ -52390,7 +52390,7 @@ index a5b6f36fe1d7..d8ce4c324284 100644 struct dc_info_packet hdr_infopacket; ret = fill_hdr_info_packet(new_con_state, &hdr_infopacket); -@@ -5602,17 +5582,19 @@ static void dm_update_crtc_active_planes(struct drm_crtc *crtc, +@@ -5605,17 +5585,19 @@ static void dm_update_crtc_active_planes(struct drm_crtc *crtc, } static int dm_crtc_helper_atomic_check(struct drm_crtc *crtc, @@ -52414,7 +52414,7 @@ index a5b6f36fe1d7..d8ce4c324284 100644 WARN_ON(1); return ret; } -@@ -5623,8 +5605,8 @@ static int dm_crtc_helper_atomic_check(struct drm_crtc *crtc, +@@ -5626,8 +5608,8 @@ static int dm_crtc_helper_atomic_check(struct drm_crtc *crtc, * planes are disabled, which is not supported by the hardware. And there is legacy * userspace which stops using the HW cursor altogether in response to the resulting EINVAL. */ @@ -52425,7 +52425,7 @@ index a5b6f36fe1d7..d8ce4c324284 100644 return -EINVAL; /* In some use cases, like reset, no stream is attached */ -@@ -6523,9 +6505,7 @@ void amdgpu_dm_connector_init_helper(struct amdgpu_display_manager *dm, +@@ -6526,9 +6508,7 @@ void amdgpu_dm_connector_init_helper(struct amdgpu_display_manager *dm, if (connector_type == DRM_MODE_CONNECTOR_HDMIA || connector_type == DRM_MODE_CONNECTOR_DisplayPort || connector_type == DRM_MODE_CONNECTOR_eDP) { @@ -52436,7 +52436,7 @@ index a5b6f36fe1d7..d8ce4c324284 100644 if (!aconnector->mst_port) drm_connector_attach_vrr_capable_property(&aconnector->base); -@@ -7775,7 +7755,7 @@ static void amdgpu_dm_atomic_commit_tail(struct drm_atomic_state *state) +@@ -7778,7 +7758,7 @@ static void amdgpu_dm_atomic_commit_tail(struct drm_atomic_state *state) dm_old_crtc_state->abm_level; hdr_changed = @@ -52895,10 +52895,10 @@ index c916f4b8907e..a63d6d238e3c 100644 bridge->encoder); diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c -index 0c79a9ba48bb..4c4fb4b52b7d 100644 +index 29c0eb4bd754..f7830acb45ea 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c -@@ -2395,21 +2395,6 @@ static int dw_hdmi_connector_get_modes(struct drm_connector *connector) +@@ -2403,21 +2403,6 @@ static int dw_hdmi_connector_get_modes(struct drm_connector *connector) return ret; } @@ -52920,7 +52920,7 @@ index 0c79a9ba48bb..4c4fb4b52b7d 100644 static int dw_hdmi_connector_atomic_check(struct drm_connector *connector, struct drm_atomic_state *state) { -@@ -2423,7 +2408,7 @@ static int dw_hdmi_connector_atomic_check(struct drm_connector *connector, +@@ -2431,7 +2416,7 @@ static int dw_hdmi_connector_atomic_check(struct drm_connector *connector, if (!crtc) return 0; @@ -52929,7 +52929,7 @@ index 0c79a9ba48bb..4c4fb4b52b7d 100644 crtc_state = drm_atomic_get_crtc_state(state, crtc); if (IS_ERR(crtc_state)) return PTR_ERR(crtc_state); -@@ -2492,8 +2477,7 @@ static int dw_hdmi_connector_create(struct dw_hdmi *hdmi) +@@ -2500,8 +2485,7 @@ static int dw_hdmi_connector_create(struct dw_hdmi *hdmi) drm_connector_attach_max_bpc_property(connector, 8, 16); if (hdmi->version >= 0x200a && hdmi->plat_data->use_drm_infoframe) @@ -57460,7 +57460,7 @@ index bbdd086be7f5..3f0c11fa60a5 100644 .get_modes = rpi_touchscreen_get_modes, }; diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c -index 204674fccd64..08d26e81cbfb 100644 +index 7ffd2a04ab23..08d26e81cbfb 100644 --- a/drivers/gpu/drm/panel/panel-simple.c +++ b/drivers/gpu/drm/panel/panel-simple.c @@ -112,8 +112,6 @@ struct panel_simple { @@ -57512,15 +57512,7 @@ index 204674fccd64..08d26e81cbfb 100644 ddc = of_parse_phandle(dev->of_node, "ddc-i2c-bus", 0); if (ddc) { panel->ddc = of_find_i2c_adapter_by_node(ddc); -@@ -557,6 +549,7 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc) - err = panel_dpi_probe(dev, panel); - if (err) - goto free_ddc; -+ desc = panel->desc; - } else { - if (!of_get_display_timing(dev->of_node, "panel-timing", &dt)) - panel_simple_parse_panel_timing_node(dev, panel, &dt); -@@ -1939,6 +1932,32 @@ static const struct panel_desc friendlyarm_hd702e = { +@@ -1940,6 +1932,32 @@ static const struct panel_desc friendlyarm_hd702e = { }, }; @@ -57553,7 +57545,7 @@ index 204674fccd64..08d26e81cbfb 100644 static const struct drm_display_mode giantplus_gpg482739qs5_mode = { .clock = 9000, .hdisplay = 480, -@@ -2093,6 +2112,38 @@ static const struct panel_desc innolux_at043tn24 = { +@@ -2094,6 +2112,38 @@ static const struct panel_desc innolux_at043tn24 = { .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE, }; @@ -57592,7 +57584,7 @@ index 204674fccd64..08d26e81cbfb 100644 static const struct drm_display_mode innolux_at070tn92_mode = { .clock = 33333, .hdisplay = 800, -@@ -3187,6 +3238,31 @@ static const struct panel_desc qd43003c0_40 = { +@@ -3188,6 +3238,31 @@ static const struct panel_desc qd43003c0_40 = { .bus_format = MEDIA_BUS_FMT_RGB888_1X24, }; @@ -57624,7 +57616,7 @@ index 204674fccd64..08d26e81cbfb 100644 static const struct display_timing rocktech_rk070er9427_timing = { .pixelclock = { 26400000, 33300000, 46800000 }, .hactive = { 800, 800, 800 }, -@@ -4057,6 +4133,9 @@ static const struct of_device_id platform_of_match[] = { +@@ -4058,6 +4133,9 @@ static const struct of_device_id platform_of_match[] = { }, { .compatible = "friendlyarm,hd702e", .data = &friendlyarm_hd702e, @@ -57634,7 +57626,7 @@ index 204674fccd64..08d26e81cbfb 100644 }, { .compatible = "giantplus,gpg482739qs5", .data = &giantplus_gpg482739qs5 -@@ -4075,6 +4154,9 @@ static const struct of_device_id platform_of_match[] = { +@@ -4076,6 +4154,9 @@ static const struct of_device_id platform_of_match[] = { }, { .compatible = "innolux,at043tn24", .data = &innolux_at043tn24, @@ -57644,7 +57636,7 @@ index 204674fccd64..08d26e81cbfb 100644 }, { .compatible = "innolux,at070tn92", .data = &innolux_at070tn92, -@@ -4204,6 +4286,9 @@ static const struct of_device_id platform_of_match[] = { +@@ -4205,6 +4286,9 @@ static const struct of_device_id platform_of_match[] = { }, { .compatible = "qiaodian,qd43003c0-40", .data = &qd43003c0_40, @@ -57684,10 +57676,10 @@ index f22a1b776f4b..5c9e28fdb6ad 100644 qxl_crtc_update_monitors_config(crtc, "disable"); } diff --git a/drivers/gpu/drm/rcar-du/rcar_du_crtc.c b/drivers/gpu/drm/rcar-du/rcar_du_crtc.c -index 1b9738e44909..675ac27eb240 100644 +index 065604c5837d..41a2f8d3e992 100644 --- a/drivers/gpu/drm/rcar-du/rcar_du_crtc.c +++ b/drivers/gpu/drm/rcar-du/rcar_du_crtc.c -@@ -682,20 +682,23 @@ static void rcar_du_crtc_stop(struct rcar_du_crtc *rcrtc) +@@ -688,20 +688,23 @@ static void rcar_du_crtc_stop(struct rcar_du_crtc *rcrtc) */ static int rcar_du_crtc_atomic_check(struct drm_crtc *crtc, @@ -57715,7 +57707,7 @@ index 1b9738e44909..675ac27eb240 100644 struct rcar_du_encoder *renc; /* Skip the writeback encoder. */ -@@ -710,7 +713,7 @@ static int rcar_du_crtc_atomic_check(struct drm_crtc *crtc, +@@ -716,7 +719,7 @@ static int rcar_du_crtc_atomic_check(struct drm_crtc *crtc, } static void rcar_du_crtc_atomic_enable(struct drm_crtc *crtc, @@ -57724,7 +57716,7 @@ index 1b9738e44909..675ac27eb240 100644 { struct rcar_du_crtc *rcrtc = to_rcar_crtc(crtc); struct rcar_du_crtc_state *rstate = to_rcar_crtc_state(crtc->state); -@@ -745,8 +748,10 @@ static void rcar_du_crtc_atomic_enable(struct drm_crtc *crtc, +@@ -751,8 +754,10 @@ static void rcar_du_crtc_atomic_enable(struct drm_crtc *crtc, } static void rcar_du_crtc_atomic_disable(struct drm_crtc *crtc, @@ -57736,7 +57728,7 @@ index 1b9738e44909..675ac27eb240 100644 struct rcar_du_crtc *rcrtc = to_rcar_crtc(crtc); struct rcar_du_crtc_state *rstate = to_rcar_crtc_state(old_state); struct rcar_du_device *rcdu = rcrtc->dev; -@@ -774,7 +779,7 @@ static void rcar_du_crtc_atomic_disable(struct drm_crtc *crtc, +@@ -780,7 +785,7 @@ static void rcar_du_crtc_atomic_disable(struct drm_crtc *crtc, } static void rcar_du_crtc_atomic_begin(struct drm_crtc *crtc, @@ -57745,7 +57737,7 @@ index 1b9738e44909..675ac27eb240 100644 { struct rcar_du_crtc *rcrtc = to_rcar_crtc(crtc); -@@ -803,7 +808,7 @@ static void rcar_du_crtc_atomic_begin(struct drm_crtc *crtc, +@@ -809,7 +814,7 @@ static void rcar_du_crtc_atomic_begin(struct drm_crtc *crtc, } static void rcar_du_crtc_atomic_flush(struct drm_crtc *crtc, @@ -57754,7 +57746,7 @@ index 1b9738e44909..675ac27eb240 100644 { struct rcar_du_crtc *rcrtc = to_rcar_crtc(crtc); struct drm_device *dev = rcrtc->crtc.dev; -@@ -1133,7 +1138,6 @@ static const struct drm_crtc_funcs crtc_funcs_gen3 = { +@@ -1145,7 +1150,6 @@ static const struct drm_crtc_funcs crtc_funcs_gen3 = { .set_crc_source = rcar_du_crtc_set_crc_source, .verify_crc_source = rcar_du_crtc_verify_crc_source, .get_crc_sources = rcar_du_crtc_get_crc_sources, @@ -62181,7 +62173,7 @@ index b641252939d8..445d3bab89e0 100644 /* Scheduled when any job has been completed, this walks the list of diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c -index ee293f061f0a..f1e0e0064b09 100644 +index a308f2d05d17..f1e0e0064b09 100644 --- a/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c @@ -35,6 +35,7 @@ @@ -62220,7 +62212,7 @@ index ee293f061f0a..f1e0e0064b09 100644 #define VC5_HDMI_HORZA_HFP_SHIFT 16 #define VC5_HDMI_HORZA_HFP_MASK VC4_MASK(28, 16) #define VC5_HDMI_HORZA_VPOS BIT(15) -@@ -76,11 +88,69 @@ +@@ -76,12 +88,69 @@ #define VC5_HDMI_VERTB_VSPO_SHIFT 16 #define VC5_HDMI_VERTB_VSPO_MASK VC4_MASK(29, 16) @@ -62243,7 +62235,7 @@ index ee293f061f0a..f1e0e0064b09 100644 # define VC4_HD_M_SW_RST BIT(2) # define VC4_HD_M_ENABLE BIT(0) -+#define HSM_MIN_CLOCK_FREQ 120000000 + #define HSM_MIN_CLOCK_FREQ 120000000 #define CEC_CLOCK_FREQ 40000 -#define VC4_HSM_MID_CLOCK 149985000 +#define HDMI_14_MAX_TMDS_CLK (340 * 1000 * 1000) @@ -62291,7 +62283,7 @@ index ee293f061f0a..f1e0e0064b09 100644 static int vc4_hdmi_debugfs_regs(struct seq_file *m, void *unused) { -@@ -90,12 +160,22 @@ static int vc4_hdmi_debugfs_regs(struct seq_file *m, void *unused) +@@ -91,12 +160,22 @@ static int vc4_hdmi_debugfs_regs(struct seq_file *m, void *unused) drm_print_regset32(&p, &vc4_hdmi->hdmi_regset); drm_print_regset32(&p, &vc4_hdmi->hd_regset); @@ -62314,7 +62306,7 @@ index ee293f061f0a..f1e0e0064b09 100644 HDMI_WRITE(HDMI_M_CTL, VC4_HD_M_SW_RST); udelay(1); HDMI_WRITE(HDMI_M_CTL, 0); -@@ -107,24 +187,36 @@ static void vc4_hdmi_reset(struct vc4_hdmi *vc4_hdmi) +@@ -108,24 +187,36 @@ static void vc4_hdmi_reset(struct vc4_hdmi *vc4_hdmi) VC4_HDMI_SW_RESET_FORMAT_DETECT); HDMI_WRITE(HDMI_SW_RESET_CONTROL, 0); @@ -62351,7 +62343,7 @@ index ee293f061f0a..f1e0e0064b09 100644 value = HDMI_READ(HDMI_CEC_CNTRL_1); value &= ~VC4_HDMI_CEC_DIV_CLK_CNT_MASK; -@@ -132,30 +224,37 @@ static void vc4_hdmi_cec_update_clk_div(struct vc4_hdmi *vc4_hdmi) +@@ -133,30 +224,37 @@ static void vc4_hdmi_cec_update_clk_div(struct vc4_hdmi *vc4_hdmi) * Set the clock divider: the hsm_clock rate and this divider * setting will give a 40 kHz CEC clock. */ @@ -62394,7 +62386,7 @@ index ee293f061f0a..f1e0e0064b09 100644 } if (connected) { -@@ -166,16 +265,25 @@ vc4_hdmi_connector_detect(struct drm_connector *connector, bool force) +@@ -167,16 +265,25 @@ vc4_hdmi_connector_detect(struct drm_connector *connector, bool force) cec_s_phys_addr_from_edid(vc4_hdmi->cec_adap, edid); vc4_hdmi->encoder.hdmi_monitor = drm_detect_hdmi_monitor(edid); kfree(edid); @@ -62423,7 +62415,7 @@ index ee293f061f0a..f1e0e0064b09 100644 } static void vc4_hdmi_connector_destroy(struct drm_connector *connector) -@@ -191,10 +299,14 @@ static int vc4_hdmi_connector_get_modes(struct drm_connector *connector) +@@ -192,10 +299,14 @@ static int vc4_hdmi_connector_get_modes(struct drm_connector *connector) int ret = 0; struct edid *edid; @@ -62440,7 +62432,7 @@ index ee293f061f0a..f1e0e0064b09 100644 vc4_encoder->hdmi_monitor = drm_detect_hdmi_monitor(edid); -@@ -202,28 +314,193 @@ static int vc4_hdmi_connector_get_modes(struct drm_connector *connector) +@@ -203,28 +314,193 @@ static int vc4_hdmi_connector_get_modes(struct drm_connector *connector) ret = drm_add_edid_modes(connector, edid); kfree(edid); @@ -62636,7 +62628,7 @@ index ee293f061f0a..f1e0e0064b09 100644 static int vc4_hdmi_connector_init(struct drm_device *dev, struct vc4_hdmi *vc4_hdmi) { -@@ -237,18 +514,37 @@ static int vc4_hdmi_connector_init(struct drm_device *dev, +@@ -238,18 +514,37 @@ static int vc4_hdmi_connector_init(struct drm_device *dev, vc4_hdmi->ddc); drm_connector_helper_add(connector, &vc4_hdmi_connector_helper_funcs); @@ -62674,7 +62666,7 @@ index ee293f061f0a..f1e0e0064b09 100644 drm_connector_attach_encoder(connector, encoder); -@@ -256,13 +552,20 @@ static int vc4_hdmi_connector_init(struct drm_device *dev, +@@ -257,13 +552,20 @@ static int vc4_hdmi_connector_init(struct drm_device *dev, } static int vc4_hdmi_stop_packet(struct drm_encoder *encoder, @@ -62696,7 +62688,7 @@ index ee293f061f0a..f1e0e0064b09 100644 return wait_for(!(HDMI_READ(HDMI_RAM_PACKET_STATUS) & BIT(packet_id)), 100); -@@ -276,9 +579,12 @@ static void vc4_hdmi_write_infoframe(struct drm_encoder *encoder, +@@ -277,9 +579,12 @@ static void vc4_hdmi_write_infoframe(struct drm_encoder *encoder, const struct vc4_hdmi_register *ram_packet_start = &vc4_hdmi->variant->registers[HDMI_RAM_PACKET_START]; u32 packet_reg = ram_packet_start->offset + VC4_HDMI_PACKET_STRIDE * packet_id; @@ -62710,7 +62702,7 @@ index ee293f061f0a..f1e0e0064b09 100644 ssize_t len, i; int ret; -@@ -290,12 +596,14 @@ static void vc4_hdmi_write_infoframe(struct drm_encoder *encoder, +@@ -291,12 +596,14 @@ static void vc4_hdmi_write_infoframe(struct drm_encoder *encoder, if (len < 0) return; @@ -62726,7 +62718,7 @@ index ee293f061f0a..f1e0e0064b09 100644 for (i = 0; i < len; i += 7) { writel(buffer[i + 0] << 0 | buffer[i + 1] << 8 | -@@ -311,25 +619,62 @@ static void vc4_hdmi_write_infoframe(struct drm_encoder *encoder, +@@ -312,25 +619,62 @@ static void vc4_hdmi_write_infoframe(struct drm_encoder *encoder, packet_reg += 4; } @@ -62792,7 +62784,7 @@ index ee293f061f0a..f1e0e0064b09 100644 ret = drm_hdmi_avi_infoframe_from_display_mode(&frame.avi, connector, mode); if (ret < 0) { -@@ -339,10 +684,11 @@ static void vc4_hdmi_set_avi_infoframe(struct drm_encoder *encoder) +@@ -340,10 +684,11 @@ static void vc4_hdmi_set_avi_infoframe(struct drm_encoder *encoder) drm_hdmi_avi_infoframe_quant_range(&frame.avi, connector, mode, @@ -62808,7 +62800,7 @@ index ee293f061f0a..f1e0e0064b09 100644 drm_hdmi_avi_infoframe_bars(&frame.avi, cstate); vc4_hdmi_write_infoframe(encoder, &frame); -@@ -367,15 +713,30 @@ static void vc4_hdmi_set_spd_infoframe(struct drm_encoder *encoder) +@@ -368,15 +713,30 @@ static void vc4_hdmi_set_spd_infoframe(struct drm_encoder *encoder) static void vc4_hdmi_set_audio_infoframe(struct drm_encoder *encoder) { struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder); @@ -62845,7 +62837,7 @@ index ee293f061f0a..f1e0e0064b09 100644 vc4_hdmi_write_infoframe(encoder, &frame); } -@@ -384,6 +745,8 @@ static void vc4_hdmi_set_infoframes(struct drm_encoder *encoder) +@@ -385,6 +745,8 @@ static void vc4_hdmi_set_infoframes(struct drm_encoder *encoder) { struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder); @@ -62854,7 +62846,7 @@ index ee293f061f0a..f1e0e0064b09 100644 vc4_hdmi_set_avi_infoframe(encoder); vc4_hdmi_set_spd_infoframe(encoder); /* -@@ -392,52 +755,176 @@ static void vc4_hdmi_set_infoframes(struct drm_encoder *encoder) +@@ -393,52 +755,176 @@ static void vc4_hdmi_set_infoframes(struct drm_encoder *encoder) */ if (vc4_hdmi->audio.streaming) vc4_hdmi_set_audio_infoframe(encoder); @@ -63044,7 +63036,7 @@ index ee293f061f0a..f1e0e0064b09 100644 /* CEA VICs other than #1 requre limited range RGB * output unless overridden by an AVI infoframe. * Apply a colorspace conversion to squash 0-255 down -@@ -463,49 +950,147 @@ static void vc4_hdmi_csc_setup(struct vc4_hdmi *vc4_hdmi, bool enable) +@@ -464,49 +950,147 @@ static void vc4_hdmi_csc_setup(struct vc4_hdmi *vc4_hdmi, bool enable) /* The RGB order applies even when CSC is disabled. */ HDMI_WRITE(HDMI_CSC_CTL, csc_ctl); @@ -63229,7 +63221,7 @@ index ee293f061f0a..f1e0e0064b09 100644 { bool hsync_pos = mode->flags & DRM_MODE_FLAG_PHSYNC; bool vsync_pos = mode->flags & DRM_MODE_FLAG_PVSYNC; -@@ -517,13 +1102,16 @@ static void vc4_hdmi_set_timings(struct vc4_hdmi *vc4_hdmi, +@@ -518,13 +1102,16 @@ static void vc4_hdmi_set_timings(struct vc4_hdmi *vc4_hdmi, VC4_HDMI_VERTA_VFP) | VC4_SET_FIELD(mode->crtc_vdisplay, VC4_HDMI_VERTA_VAL)); u32 vertb = (VC4_SET_FIELD(0, VC4_HDMI_VERTB_VSPO) | @@ -63249,7 +63241,7 @@ index ee293f061f0a..f1e0e0064b09 100644 HDMI_WRITE(HDMI_HORZA, (vsync_pos ? VC4_HDMI_HORZA_VPOS : 0) | -@@ -547,10 +1135,16 @@ static void vc4_hdmi_set_timings(struct vc4_hdmi *vc4_hdmi, +@@ -548,10 +1135,16 @@ static void vc4_hdmi_set_timings(struct vc4_hdmi *vc4_hdmi, HDMI_WRITE(HDMI_VERTB0, vertb_even); HDMI_WRITE(HDMI_VERTB1, vertb); @@ -63266,7 +63258,7 @@ index ee293f061f0a..f1e0e0064b09 100644 bool hsync_pos = mode->flags & DRM_MODE_FLAG_PHSYNC; bool vsync_pos = mode->flags & DRM_MODE_FLAG_PVSYNC; bool interlaced = mode->flags & DRM_MODE_FLAG_INTERLACE; -@@ -561,15 +1155,20 @@ static void vc5_hdmi_set_timings(struct vc4_hdmi *vc4_hdmi, +@@ -562,15 +1155,20 @@ static void vc5_hdmi_set_timings(struct vc4_hdmi *vc4_hdmi, VC5_HDMI_VERTA_VFP) | VC4_SET_FIELD(mode->crtc_vdisplay, VC5_HDMI_VERTA_VAL)); u32 vertb = (VC4_SET_FIELD(0, VC5_HDMI_VERTB_VSPO) | @@ -63291,7 +63283,7 @@ index ee293f061f0a..f1e0e0064b09 100644 HDMI_WRITE(HDMI_HORZA, (vsync_pos ? VC5_HDMI_HORZA_VPOS : 0) | (hsync_pos ? VC5_HDMI_HORZA_HPOS : 0) | -@@ -593,14 +1192,66 @@ static void vc5_hdmi_set_timings(struct vc4_hdmi *vc4_hdmi, +@@ -594,14 +1192,66 @@ static void vc5_hdmi_set_timings(struct vc4_hdmi *vc4_hdmi, HDMI_WRITE(HDMI_VERTB0, vertb_even); HDMI_WRITE(HDMI_VERTB1, vertb); @@ -63358,7 +63350,7 @@ index ee293f061f0a..f1e0e0064b09 100644 drift = HDMI_READ(HDMI_FIFO_CTL); drift &= VC4_HDMI_FIFO_VALID_WRITE_MASK; -@@ -608,133 +1259,164 @@ static void vc4_hdmi_recenter_fifo(struct vc4_hdmi *vc4_hdmi) +@@ -609,133 +1259,164 @@ static void vc4_hdmi_recenter_fifo(struct vc4_hdmi *vc4_hdmi) drift & ~VC4_HDMI_FIFO_CTL_RECENTER); HDMI_WRITE(HDMI_FIFO_CTL, drift | VC4_HDMI_FIFO_CTL_RECENTER); @@ -63581,7 +63573,7 @@ index ee293f061f0a..f1e0e0064b09 100644 VC4_HD_VID_CTL_UNDERFLOW_ENABLE | VC4_HD_VID_CTL_FRAME_COUNTER_RESET | (vsync_pos ? 0 : VC4_HD_VID_CTL_VSYNC_LOW) | -@@ -748,6 +1430,8 @@ static void vc4_hdmi_encoder_post_crtc_enable(struct drm_encoder *encoder) +@@ -749,6 +1430,8 @@ static void vc4_hdmi_encoder_post_crtc_enable(struct drm_encoder *encoder) HDMI_READ(HDMI_SCHEDULER_CONTROL) | VC4_HDMI_SCHEDULER_CONTROL_MODE_HDMI); @@ -63590,7 +63582,7 @@ index ee293f061f0a..f1e0e0064b09 100644 ret = wait_for(HDMI_READ(HDMI_SCHEDULER_CONTROL) & VC4_HDMI_SCHEDULER_CONTROL_HDMI_ACTIVE, 1000); WARN_ONCE(ret, "Timeout waiting for " -@@ -760,6 +1444,8 @@ static void vc4_hdmi_encoder_post_crtc_enable(struct drm_encoder *encoder) +@@ -761,6 +1444,8 @@ static void vc4_hdmi_encoder_post_crtc_enable(struct drm_encoder *encoder) HDMI_READ(HDMI_SCHEDULER_CONTROL) & ~VC4_HDMI_SCHEDULER_CONTROL_MODE_HDMI); @@ -63599,7 +63591,7 @@ index ee293f061f0a..f1e0e0064b09 100644 ret = wait_for(!(HDMI_READ(HDMI_SCHEDULER_CONTROL) & VC4_HDMI_SCHEDULER_CONTROL_HDMI_ACTIVE), 1000); WARN_ONCE(ret, "Timeout waiting for " -@@ -767,6 +1453,8 @@ static void vc4_hdmi_encoder_post_crtc_enable(struct drm_encoder *encoder) +@@ -768,6 +1453,8 @@ static void vc4_hdmi_encoder_post_crtc_enable(struct drm_encoder *encoder) } if (vc4_encoder->hdmi_monitor) { @@ -63608,7 +63600,7 @@ index ee293f061f0a..f1e0e0064b09 100644 WARN_ON(!(HDMI_READ(HDMI_SCHEDULER_CONTROL) & VC4_HDMI_SCHEDULER_CONTROL_HDMI_ACTIVE)); HDMI_WRITE(HDMI_SCHEDULER_CONTROL, -@@ -776,14 +1464,245 @@ static void vc4_hdmi_encoder_post_crtc_enable(struct drm_encoder *encoder) +@@ -777,14 +1464,245 @@ static void vc4_hdmi_encoder_post_crtc_enable(struct drm_encoder *encoder) HDMI_WRITE(HDMI_RAM_PACKET_CONFIG, VC4_HDMI_RAM_PACKET_ENABLE); @@ -63855,7 +63847,7 @@ index ee293f061f0a..f1e0e0064b09 100644 } #define WIFI_2_4GHz_CH1_MIN_FREQ 2400000000ULL -@@ -793,12 +1712,15 @@ static int vc4_hdmi_encoder_atomic_check(struct drm_encoder *encoder, +@@ -794,10 +1712,12 @@ static int vc4_hdmi_encoder_atomic_check(struct drm_encoder *encoder, struct drm_crtc_state *crtc_state, struct drm_connector_state *conn_state) { @@ -63867,11 +63859,8 @@ index ee293f061f0a..f1e0e0064b09 100644 + int ret; if (vc4_hdmi->variant->unsupported_odd_h_timings && -+ !(mode->flags & DRM_MODE_FLAG_DBLCLK) && - ((mode->hdisplay % 2) || (mode->hsync_start % 2) || - (mode->hsync_end % 2) || (mode->htotal % 2))) - return -EINVAL; -@@ -817,11 +1739,9 @@ static int vc4_hdmi_encoder_atomic_check(struct drm_encoder *encoder, + !(mode->flags & DRM_MODE_FLAG_DBLCLK) && +@@ -819,11 +1739,9 @@ static int vc4_hdmi_encoder_atomic_check(struct drm_encoder *encoder, pixel_rate = mode->clock * 1000; } @@ -63886,12 +63875,7 @@ index ee293f061f0a..f1e0e0064b09 100644 return 0; } -@@ -833,23 +1753,53 @@ vc4_hdmi_encoder_mode_valid(struct drm_encoder *encoder, - struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder); - - if (vc4_hdmi->variant->unsupported_odd_h_timings && -+ !(mode->flags & DRM_MODE_FLAG_DBLCLK) && - ((mode->hdisplay % 2) || (mode->hsync_start % 2) || +@@ -840,19 +1758,48 @@ vc4_hdmi_encoder_mode_valid(struct drm_encoder *encoder, (mode->hsync_end % 2) || (mode->htotal % 2))) return MODE_H_ILLEGAL; @@ -63946,7 +63930,7 @@ index ee293f061f0a..f1e0e0064b09 100644 static u32 vc4_hdmi_channel_map(struct vc4_hdmi *vc4_hdmi, u32 channel_mask) { int i; -@@ -874,33 +1824,49 @@ static u32 vc5_hdmi_channel_map(struct vc4_hdmi *vc4_hdmi, u32 channel_mask) +@@ -877,33 +1824,49 @@ static u32 vc5_hdmi_channel_map(struct vc4_hdmi *vc4_hdmi, u32 channel_mask) return channel_map; } @@ -64003,7 +63987,7 @@ index ee293f061f0a..f1e0e0064b09 100644 n = 128 * samplerate / 1000; tmp = (u64)(mode->clock * 1000) * n; do_div(tmp, 128 * samplerate); -@@ -926,36 +1892,48 @@ static inline struct vc4_hdmi *dai_to_hdmi(struct snd_soc_dai *dai) +@@ -929,36 +1892,48 @@ static inline struct vc4_hdmi *dai_to_hdmi(struct snd_soc_dai *dai) return snd_soc_card_get_drvdata(card); } @@ -64031,13 +64015,13 @@ index ee293f061f0a..f1e0e0064b09 100644 - if (!encoder->crtc || !(HDMI_READ(HDMI_RAM_PACKET_CONFIG) & - VC4_HDMI_RAM_PACKET_ENABLE)) - return -ENODEV; -- -- ret = snd_pcm_hw_constraint_eld(substream->runtime, connector->eld); -- if (ret) -- return ret; + if (!vc4_hdmi->encoder.hdmi_monitor) + return false; +- ret = snd_pcm_hw_constraint_eld(substream->runtime, connector->eld); +- if (ret) +- return ret; +- - return 0; + return true; } @@ -64074,7 +64058,7 @@ index ee293f061f0a..f1e0e0064b09 100644 return 0; } -@@ -963,60 +1941,133 @@ static void vc4_hdmi_audio_reset(struct vc4_hdmi *vc4_hdmi) +@@ -966,60 +1941,133 @@ static void vc4_hdmi_audio_reset(struct vc4_hdmi *vc4_hdmi) { struct drm_encoder *encoder = &vc4_hdmi->encoder.base.base; struct device *dev = &vc4_hdmi->pdev->dev; @@ -64209,10 +64193,10 @@ index ee293f061f0a..f1e0e0064b09 100644 + mutex_unlock(&vc4_hdmi->mutex); + return -EINVAL; + } -+ -+ vc4_hdmi_audio_set_mai_clock(vc4_hdmi, sample_rate); - vc4_hdmi_audio_set_mai_clock(vc4_hdmi); ++ vc4_hdmi_audio_set_mai_clock(vc4_hdmi, sample_rate); ++ + spin_lock_irqsave(&vc4_hdmi->hw_lock, flags); + HDMI_WRITE(HDMI_MAI_CTL, + VC4_SET_FIELD(channels, VC4_HD_MAI_CTL_CHNUM) | @@ -64234,7 +64218,7 @@ index ee293f061f0a..f1e0e0064b09 100644 /* The B frame identifier should match the value used by alsa-lib (8) */ audio_packet_config = -@@ -1024,124 +2075,39 @@ static int vc4_hdmi_audio_hw_params(struct snd_pcm_substream *substream, +@@ -1027,124 +2075,39 @@ static int vc4_hdmi_audio_hw_params(struct snd_pcm_substream *substream, VC4_HDMI_AUDIO_PACKET_ZERO_DATA_ON_INACTIVE_CHANNELS | VC4_SET_FIELD(0x8, VC4_HDMI_AUDIO_PACKET_B_FRAME_IDENTIFIER); @@ -64280,7 +64264,7 @@ index ee293f061f0a..f1e0e0064b09 100644 - - return 0; -} -- + -static int vc4_hdmi_audio_trigger(struct snd_pcm_substream *substream, int cmd, - struct snd_soc_dai *dai) -{ @@ -64305,14 +64289,14 @@ index ee293f061f0a..f1e0e0064b09 100644 - VC4_HD_MAI_CTL_DLATE | - VC4_HD_MAI_CTL_ERRORE | - VC4_HD_MAI_CTL_ERRORF); ++ vc4_hdmi_set_n_cts(vc4_hdmi, sample_rate); - if (vc4_hdmi->variant->phy_rng_disable) - vc4_hdmi->variant->phy_rng_disable(vc4_hdmi); -+ vc4_hdmi_set_n_cts(vc4_hdmi, sample_rate); - -- vc4_hdmi->audio.streaming = false; + spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags); +- vc4_hdmi->audio.streaming = false; +- - break; - default: - break; @@ -64373,15 +64357,16 @@ index ee293f061f0a..f1e0e0064b09 100644 static const struct snd_soc_dapm_widget vc4_hdmi_audio_widgets[] = { SND_SOC_DAPM_OUTPUT("TX"), }; -@@ -1152,38 +2118,14 @@ static const struct snd_soc_dapm_route vc4_hdmi_audio_routes[] = { +@@ -1154,39 +2117,15 @@ static const struct snd_soc_dapm_route vc4_hdmi_audio_routes[] = { + }; static const struct snd_soc_component_driver vc4_hdmi_audio_component_drv = { - .name = "vc4-hdmi-codec-dai-component", +- .name = "vc4-hdmi-codec-dai-component", - .controls = vc4_hdmi_audio_controls, - .num_controls = ARRAY_SIZE(vc4_hdmi_audio_controls), - .dapm_widgets = vc4_hdmi_audio_widgets, - .num_dapm_widgets = ARRAY_SIZE(vc4_hdmi_audio_widgets), - .dapm_routes = vc4_hdmi_audio_routes, +- .dapm_widgets = vc4_hdmi_audio_widgets, +- .num_dapm_widgets = ARRAY_SIZE(vc4_hdmi_audio_widgets), +- .dapm_routes = vc4_hdmi_audio_routes, - .num_dapm_routes = ARRAY_SIZE(vc4_hdmi_audio_routes), - .idle_bias_on = 1, - .use_pmdown_time = 1, @@ -64409,6 +64394,10 @@ index ee293f061f0a..f1e0e0064b09 100644 - SNDRV_PCM_RATE_192000, - .formats = SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE, - }, ++ .name = "vc4-hdmi-codec-dai-component", ++ .dapm_widgets = vc4_hdmi_audio_widgets, ++ .num_dapm_widgets = ARRAY_SIZE(vc4_hdmi_audio_widgets), ++ .dapm_routes = vc4_hdmi_audio_routes, + .num_dapm_routes = ARRAY_SIZE(vc4_hdmi_audio_routes), + .idle_bias_on = 1, + .use_pmdown_time = 1, @@ -64417,7 +64406,7 @@ index ee293f061f0a..f1e0e0064b09 100644 }; static const struct snd_soc_component_driver vc4_hdmi_audio_cpu_dai_comp = { -@@ -1212,7 +2154,6 @@ static struct snd_soc_dai_driver vc4_hdmi_audio_cpu_dai_drv = { +@@ -1215,7 +2154,6 @@ static struct snd_soc_dai_driver vc4_hdmi_audio_cpu_dai_drv = { SNDRV_PCM_RATE_192000, .formats = SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE, }, @@ -64425,7 +64414,7 @@ index ee293f061f0a..f1e0e0064b09 100644 }; static const struct snd_dmaengine_pcm_config pcm_conf = { -@@ -1220,6 +2161,33 @@ static const struct snd_dmaengine_pcm_config pcm_conf = { +@@ -1223,6 +2161,33 @@ static const struct snd_dmaengine_pcm_config pcm_conf = { .prepare_slave_config = snd_dmaengine_pcm_prepare_slave_config, }; @@ -64459,7 +64448,7 @@ index ee293f061f0a..f1e0e0064b09 100644 static int vc4_hdmi_audio_init(struct vc4_hdmi *vc4_hdmi) { const struct vc4_hdmi_register *mai_data = -@@ -1227,13 +2195,16 @@ static int vc4_hdmi_audio_init(struct vc4_hdmi *vc4_hdmi) +@@ -1230,13 +2195,16 @@ static int vc4_hdmi_audio_init(struct vc4_hdmi *vc4_hdmi) struct snd_soc_dai_link *dai_link = &vc4_hdmi->audio.link; struct snd_soc_card *card = &vc4_hdmi->audio.card; struct device *dev = &vc4_hdmi->pdev->dev; @@ -64478,7 +64467,7 @@ index ee293f061f0a..f1e0e0064b09 100644 return 0; } -@@ -1273,12 +2244,13 @@ static int vc4_hdmi_audio_init(struct vc4_hdmi *vc4_hdmi) +@@ -1276,12 +2244,13 @@ static int vc4_hdmi_audio_init(struct vc4_hdmi *vc4_hdmi) return ret; } @@ -64498,7 +64487,7 @@ index ee293f061f0a..f1e0e0064b09 100644 } dai_link->cpus = &vc4_hdmi->audio.cpu; -@@ -1291,9 +2263,9 @@ static int vc4_hdmi_audio_init(struct vc4_hdmi *vc4_hdmi) +@@ -1294,9 +2263,9 @@ static int vc4_hdmi_audio_init(struct vc4_hdmi *vc4_hdmi) dai_link->name = "MAI"; dai_link->stream_name = "MAI PCM"; @@ -64510,7 +64499,7 @@ index ee293f061f0a..f1e0e0064b09 100644 dai_link->platforms->name = dev_name(dev); card->dai_link = dai_link; -@@ -1313,22 +2285,83 @@ static int vc4_hdmi_audio_init(struct vc4_hdmi *vc4_hdmi) +@@ -1316,22 +2285,83 @@ static int vc4_hdmi_audio_init(struct vc4_hdmi *vc4_hdmi) snd_soc_card_set_drvdata(card, vc4_hdmi); ret = devm_snd_soc_register_card(dev, card); if (ret) @@ -64601,7 +64590,7 @@ index ee293f061f0a..f1e0e0064b09 100644 cec_transmit_done(vc4_hdmi->cec_adap, CEC_TX_STATUS_OK, 0, 0, 0, 0); } else { -@@ -1342,12 +2375,27 @@ static irqreturn_t vc4_cec_irq_handler_thread(int irq, void *priv) +@@ -1345,12 +2375,27 @@ static irqreturn_t vc4_cec_irq_handler_thread(int irq, void *priv) return IRQ_HANDLED; } @@ -64629,7 +64618,7 @@ index ee293f061f0a..f1e0e0064b09 100644 msg->len = 1 + ((cntrl1 & VC4_HDMI_CEC_REC_WRD_CNT_MASK) >> VC4_HDMI_CEC_REC_WRD_CNT_SHIFT); -@@ -1366,83 +2414,208 @@ static void vc4_cec_read_msg(struct vc4_hdmi *vc4_hdmi, u32 cntrl1) +@@ -1369,83 +2414,208 @@ static void vc4_cec_read_msg(struct vc4_hdmi *vc4_hdmi, u32 cntrl1) } } @@ -64858,7 +64847,7 @@ index ee293f061f0a..f1e0e0064b09 100644 { struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap); + unsigned long flags; - ++ + /* + * NOTE: This function should really take vc4_hdmi->mutex, but doing so + * results in a reentrancy since cec_s_phys_addr_from_edid() called in @@ -64869,7 +64858,7 @@ index ee293f061f0a..f1e0e0064b09 100644 + * state with KMS, so we can ignore the lock for now, but we need to + * keep it in mind if we were to change that assumption. + */ -+ + + spin_lock_irqsave(&vc4_hdmi->hw_lock, flags); HDMI_WRITE(HDMI_CEC_CNTRL_1, (HDMI_READ(HDMI_CEC_CNTRL_1) & ~VC4_HDMI_CEC_ADDR_MASK) | @@ -64879,7 +64868,7 @@ index ee293f061f0a..f1e0e0064b09 100644 return 0; } -@@ -1451,14 +2624,28 @@ static int vc4_hdmi_cec_adap_transmit(struct cec_adapter *adap, u8 attempts, +@@ -1454,14 +2624,28 @@ static int vc4_hdmi_cec_adap_transmit(struct cec_adapter *adap, u8 attempts, { struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap); struct drm_device *dev = vc4_hdmi->connector.dev; @@ -64908,7 +64897,7 @@ index ee293f061f0a..f1e0e0064b09 100644 for (i = 0; i < msg->len; i += 4) HDMI_WRITE(HDMI_CEC_TX_DATA_1 + (i >> 2), (msg->msg[i]) | -@@ -1474,6 +2661,9 @@ static int vc4_hdmi_cec_adap_transmit(struct cec_adapter *adap, u8 attempts, +@@ -1477,6 +2661,9 @@ static int vc4_hdmi_cec_adap_transmit(struct cec_adapter *adap, u8 attempts, val |= VC4_HDMI_CEC_START_XMIT_BEGIN; HDMI_WRITE(HDMI_CEC_CNTRL_1, val); @@ -64918,7 +64907,7 @@ index ee293f061f0a..f1e0e0064b09 100644 return 0; } -@@ -1487,11 +2677,14 @@ static int vc4_hdmi_cec_init(struct vc4_hdmi *vc4_hdmi) +@@ -1490,11 +2677,14 @@ static int vc4_hdmi_cec_init(struct vc4_hdmi *vc4_hdmi) { struct cec_connector_info conn_info; struct platform_device *pdev = vc4_hdmi->pdev; @@ -64935,7 +64924,7 @@ index ee293f061f0a..f1e0e0064b09 100644 vc4_hdmi->cec_adap = cec_allocate_adapter(&vc4_hdmi_cec_adap_ops, vc4_hdmi, "vc4", -@@ -1504,28 +2697,49 @@ static int vc4_hdmi_cec_init(struct vc4_hdmi *vc4_hdmi) +@@ -1507,28 +2697,49 @@ static int vc4_hdmi_cec_init(struct vc4_hdmi *vc4_hdmi) cec_fill_conn_info_from_drm(&conn_info, &vc4_hdmi->connector); cec_s_conn_info(vc4_hdmi->cec_adap, &conn_info); @@ -65001,7 +64990,7 @@ index ee293f061f0a..f1e0e0064b09 100644 err_delete_cec_adap: cec_delete_adapter(vc4_hdmi->cec_adap); -@@ -1534,8 +2748,40 @@ static int vc4_hdmi_cec_init(struct vc4_hdmi *vc4_hdmi) +@@ -1537,8 +2748,40 @@ static int vc4_hdmi_cec_init(struct vc4_hdmi *vc4_hdmi) static void vc4_hdmi_cec_exit(struct vc4_hdmi *vc4_hdmi) { @@ -65042,7 +65031,7 @@ index ee293f061f0a..f1e0e0064b09 100644 #else static int vc4_hdmi_cec_init(struct vc4_hdmi *vc4_hdmi) { -@@ -1544,6 +2790,10 @@ static int vc4_hdmi_cec_init(struct vc4_hdmi *vc4_hdmi) +@@ -1547,6 +2790,10 @@ static int vc4_hdmi_cec_init(struct vc4_hdmi *vc4_hdmi) static void vc4_hdmi_cec_exit(struct vc4_hdmi *vc4_hdmi) {}; @@ -65053,7 +65042,7 @@ index ee293f061f0a..f1e0e0064b09 100644 #endif static int vc4_hdmi_build_regset(struct vc4_hdmi *vc4_hdmi, -@@ -1618,6 +2868,7 @@ static int vc4_hdmi_init_resources(struct vc4_hdmi *vc4_hdmi) +@@ -1621,6 +2868,7 @@ static int vc4_hdmi_init_resources(struct vc4_hdmi *vc4_hdmi) return PTR_ERR(vc4_hdmi->hsm_clock); } vc4_hdmi->audio_clock = vc4_hdmi->hsm_clock; @@ -65061,7 +65050,7 @@ index ee293f061f0a..f1e0e0064b09 100644 return 0; } -@@ -1627,6 +2878,7 @@ static int vc5_hdmi_init_resources(struct vc4_hdmi *vc4_hdmi) +@@ -1630,6 +2878,7 @@ static int vc5_hdmi_init_resources(struct vc4_hdmi *vc4_hdmi) struct platform_device *pdev = vc4_hdmi->pdev; struct device *dev = &pdev->dev; struct resource *res; @@ -65069,7 +65058,7 @@ index ee293f061f0a..f1e0e0064b09 100644 res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "hdmi"); if (!res) -@@ -1711,12 +2963,50 @@ static int vc5_hdmi_init_resources(struct vc4_hdmi *vc4_hdmi) +@@ -1714,12 +2963,50 @@ static int vc5_hdmi_init_resources(struct vc4_hdmi *vc4_hdmi) return PTR_ERR(vc4_hdmi->audio_clock); } @@ -65120,7 +65109,7 @@ index ee293f061f0a..f1e0e0064b09 100644 return 0; } -@@ -1739,6 +3029,15 @@ static int vc4_hdmi_runtime_resume(struct device *dev) +@@ -1742,6 +3029,15 @@ static int vc4_hdmi_runtime_resume(struct device *dev) if (ret) return ret; @@ -65136,7 +65125,7 @@ index ee293f061f0a..f1e0e0064b09 100644 return 0; } #endif -@@ -1757,6 +3056,9 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) +@@ -1760,6 +3056,9 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) vc4_hdmi = devm_kzalloc(dev, sizeof(*vc4_hdmi), GFP_KERNEL); if (!vc4_hdmi) return -ENOMEM; @@ -65146,7 +65135,7 @@ index ee293f061f0a..f1e0e0064b09 100644 dev_set_drvdata(dev, vc4_hdmi); encoder = &vc4_hdmi->encoder.base.base; -@@ -1769,6 +3071,15 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) +@@ -1772,6 +3071,15 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) vc4_hdmi->pdev = pdev; vc4_hdmi->variant = variant; @@ -65162,12 +65151,10 @@ index ee293f061f0a..f1e0e0064b09 100644 ret = variant->init_resources(vc4_hdmi); if (ret) return ret; -@@ -1806,8 +3117,45 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) +@@ -1809,6 +3117,14 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) vc4_hdmi->disable_wifi_frequencies = of_property_read_bool(dev->of_node, "wifi-2.4ghz-coexistence"); -- if (vc4_hdmi->variant->reset) -- vc4_hdmi->variant->reset(vc4_hdmi); + if (variant->max_pixel_clock == 600000000) { + struct vc4_dev *vc4 = to_vc4_dev(drm); + long max_rate = clk_round_rate(vc4->hvs->core_clk, 550000000); @@ -65176,14 +65163,13 @@ index ee293f061f0a..f1e0e0064b09 100644 + vc4_hdmi->disable_4kp60 = true; + } + -+ /* -+ * If we boot without any cable connected to the HDMI connector, -+ * the firmware will skip the HSM initialization and leave it -+ * with a rate of 0, resulting in a bus lockup when we're -+ * accessing the registers even if it's enabled. -+ * -+ * Let's put a sensible default at runtime_resume so that we -+ * don't end up in this situation. + /* + * If we boot without any cable connected to the HDMI connector, + * the firmware will skip the HSM initialization and leave it +@@ -1817,13 +3133,29 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) + * + * Let's put a sensible default at runtime_resume so that we + * don't end up in this situation. + * + * Strictly speaking we should be using clk_set_min_rate. + * However, the clk-bcm2835 clock driver favors clock rates @@ -65197,11 +65183,14 @@ index ee293f061f0a..f1e0e0064b09 100644 + * we're not at risk of having the first controller set a + * different mode and then the second overriding the HSM clock + * frequency in its bind. -+ */ + */ +- ret = clk_set_min_rate(vc4_hdmi->hsm_clock, HSM_MIN_CLOCK_FREQ); + ret = clk_set_rate(vc4_hdmi->hsm_clock, HSM_MIN_CLOCK_FREQ); -+ if (ret) -+ goto err_put_ddc; -+ + if (ret) + goto err_put_ddc; + +- if (vc4_hdmi->variant->reset) +- vc4_hdmi->variant->reset(vc4_hdmi); + pm_runtime_enable(dev); + + ret = pm_runtime_resume_and_get(dev); @@ -65210,7 +65199,7 @@ index ee293f061f0a..f1e0e0064b09 100644 if ((of_device_is_compatible(dev->of_node, "brcm,bcm2711-hdmi0") || of_device_is_compatible(dev->of_node, "brcm,bcm2711-hdmi1")) && -@@ -1817,8 +3165,6 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) +@@ -1833,8 +3165,6 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) clk_prepare_enable(vc4_hdmi->pixel_bvb_clock); } @@ -65219,7 +65208,7 @@ index ee293f061f0a..f1e0e0064b09 100644 drm_simple_encoder_init(drm, encoder, DRM_MODE_ENCODER_TMDS); drm_encoder_helper_add(encoder, &vc4_hdmi_encoder_helper_funcs); -@@ -1826,10 +3172,14 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) +@@ -1842,10 +3172,14 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) if (ret) goto err_destroy_encoder; @@ -65235,7 +65224,7 @@ index ee293f061f0a..f1e0e0064b09 100644 ret = vc4_hdmi_audio_init(vc4_hdmi); if (ret) goto err_free_cec; -@@ -1838,14 +3188,19 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) +@@ -1854,14 +3188,19 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) vc4_hdmi_debugfs_regs, vc4_hdmi); @@ -65255,7 +65244,7 @@ index ee293f061f0a..f1e0e0064b09 100644 pm_runtime_disable(dev); err_put_ddc: put_device(&vc4_hdmi->ddc->dev); -@@ -1883,6 +3238,7 @@ static void vc4_hdmi_unbind(struct device *dev, struct device *master, +@@ -1899,6 +3238,7 @@ static void vc4_hdmi_unbind(struct device *dev, struct device *master, kfree(vc4_hdmi->hd_regset.regs); vc4_hdmi_cec_exit(vc4_hdmi); @@ -65263,7 +65252,7 @@ index ee293f061f0a..f1e0e0064b09 100644 vc4_hdmi_connector_destroy(&vc4_hdmi->connector); drm_encoder_cleanup(&vc4_hdmi->encoder.base.base); -@@ -1912,7 +3268,6 @@ static const struct vc4_hdmi_variant bcm2835_variant = { +@@ -1928,7 +3268,6 @@ static const struct vc4_hdmi_variant bcm2835_variant = { .debugfs_name = "hdmi_regs", .card_name = "vc4-hdmi", .max_pixel_clock = 162000000, @@ -65271,7 +65260,7 @@ index ee293f061f0a..f1e0e0064b09 100644 .registers = vc4_hdmi_fields, .num_registers = ARRAY_SIZE(vc4_hdmi_fields), -@@ -1924,14 +3279,16 @@ static const struct vc4_hdmi_variant bcm2835_variant = { +@@ -1940,14 +3279,16 @@ static const struct vc4_hdmi_variant bcm2835_variant = { .phy_disable = vc4_hdmi_phy_disable, .phy_rng_enable = vc4_hdmi_phy_rng_enable, .phy_rng_disable = vc4_hdmi_phy_rng_disable, @@ -65289,7 +65278,7 @@ index ee293f061f0a..f1e0e0064b09 100644 .registers = vc5_hdmi_hdmi0_fields, .num_registers = ARRAY_SIZE(vc5_hdmi_hdmi0_fields), .phy_lane_mapping = { -@@ -1941,6 +3298,7 @@ static const struct vc4_hdmi_variant bcm2711_hdmi0_variant = { +@@ -1957,6 +3298,7 @@ static const struct vc4_hdmi_variant bcm2711_hdmi0_variant = { PHY_LANE_CK, }, .unsupported_odd_h_timings = true, @@ -65297,7 +65286,7 @@ index ee293f061f0a..f1e0e0064b09 100644 .init_resources = vc5_hdmi_init_resources, .csc_setup = vc5_hdmi_csc_setup, -@@ -1950,14 +3308,17 @@ static const struct vc4_hdmi_variant bcm2711_hdmi0_variant = { +@@ -1966,14 +3308,17 @@ static const struct vc4_hdmi_variant bcm2711_hdmi0_variant = { .phy_disable = vc5_hdmi_phy_disable, .phy_rng_enable = vc5_hdmi_phy_rng_enable, .phy_rng_disable = vc5_hdmi_phy_rng_disable, @@ -65316,7 +65305,7 @@ index ee293f061f0a..f1e0e0064b09 100644 .registers = vc5_hdmi_hdmi1_fields, .num_registers = ARRAY_SIZE(vc5_hdmi_hdmi1_fields), .phy_lane_mapping = { -@@ -1967,6 +3328,7 @@ static const struct vc4_hdmi_variant bcm2711_hdmi1_variant = { +@@ -1983,6 +3328,7 @@ static const struct vc4_hdmi_variant bcm2711_hdmi1_variant = { PHY_LANE_2, }, .unsupported_odd_h_timings = true, @@ -65324,7 +65313,7 @@ index ee293f061f0a..f1e0e0064b09 100644 .init_resources = vc5_hdmi_init_resources, .csc_setup = vc5_hdmi_csc_setup, -@@ -1976,7 +3338,10 @@ static const struct vc4_hdmi_variant bcm2711_hdmi1_variant = { +@@ -1992,7 +3338,10 @@ static const struct vc4_hdmi_variant bcm2711_hdmi1_variant = { .phy_disable = vc5_hdmi_phy_disable, .phy_rng_enable = vc5_hdmi_phy_rng_enable, .phy_rng_disable = vc5_hdmi_phy_rng_disable, @@ -68281,7 +68270,7 @@ index 094fa4aa061d..c0a53a2cbbf1 100644 static const struct drm_connector_helper_funcs vkms_wb_conn_helper_funcs = { diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c -index 312ed0881a99..bc67f2b930e1 100644 +index e58112997c88..415078e9ea39 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c @@ -522,8 +522,10 @@ int vmw_du_cursor_plane_atomic_check(struct drm_plane *plane, @@ -69103,7 +69092,7 @@ index 000000000000..8483b6ce1db8 +MODULE_DESCRIPTION("Raspberry Pi PoE HAT fan driver"); +MODULE_LICENSE("GPL"); diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig -index 14d45b453a61..4c3010089b7f 100644 +index 036fdcee5eb3..17e3afba7e0d 100644 --- a/drivers/i2c/busses/Kconfig +++ b/drivers/i2c/busses/Kconfig @@ -9,6 +9,25 @@ menu "I2C Hardware Bus support" @@ -69133,7 +69122,7 @@ index 14d45b453a61..4c3010089b7f 100644 tristate "ALI 1535" depends on PCI diff --git a/drivers/i2c/busses/Makefile b/drivers/i2c/busses/Makefile -index f36a05632f85..fe09307c1945 100644 +index e6d5d108e22b..b8e5bfd23158 100644 --- a/drivers/i2c/busses/Makefile +++ b/drivers/i2c/busses/Makefile @@ -3,6 +3,8 @@ @@ -85229,7 +85218,7 @@ index 41f8410d08d6..2099a4d814e4 100644 elem_size = sizeof(struct v4l2_area); break; diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c -index 4ffa14e44efe..3204a2fab361 100644 +index 6d6d30dbbe68..2ee902f64ddc 100644 --- a/drivers/media/v4l2-core/v4l2-ioctl.c +++ b/drivers/media/v4l2-core/v4l2-ioctl.c @@ -1301,6 +1301,8 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt) @@ -85354,7 +85343,7 @@ index fbf0dcb313c8..bf3aa9252458 100644 EXPORT_SYMBOL_GPL(v4l2_subdev_link_validate_default); diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig -index b8847ae04d93..525cb2c70538 100644 +index 15680c3c9279..947c2ab6fff3 100644 --- a/drivers/mfd/Kconfig +++ b/drivers/mfd/Kconfig @@ -11,6 +11,14 @@ config MFD_CORE @@ -85373,7 +85362,7 @@ index b8847ae04d93..525cb2c70538 100644 tristate "AMD CS5535 and CS5536 southbridge core functions" select MFD_CORE diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile -index 1780019d2474..d6091f3b1ca3 100644 +index fb1df45a301e..b2eb091e9703 100644 --- a/drivers/mfd/Makefile +++ b/drivers/mfd/Makefile @@ -263,6 +263,7 @@ obj-$(CONFIG_MFD_ROHM_BD71828) += rohm-bd71828.o @@ -90566,7 +90555,7 @@ index d42e86cdff12..0533339d7979 100644 sdhci_dumpregs(host); diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c -index aac837aa2c24..18460c3536dc 100644 +index 8c221666c972..f63ac74227b3 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c @@ -67,6 +67,9 @@ @@ -90635,7 +90624,7 @@ index aac837aa2c24..18460c3536dc 100644 /* Reinitialize TDMA and RDMA and SW housekeeping */ ret = bcmgenet_init_dma(priv); -@@ -4062,9 +4078,12 @@ static int bcmgenet_probe(struct platform_device *pdev) +@@ -4064,9 +4080,12 @@ static int bcmgenet_probe(struct platform_device *pdev) netif_set_real_num_rx_queues(priv->dev, priv->hw_params->rx_queues + 1); /* Set default coalescing parameters */ @@ -90649,7 +90638,7 @@ index aac837aa2c24..18460c3536dc 100644 /* libphy will determine the link state */ netif_carrier_off(dev); -@@ -4180,7 +4199,7 @@ static int bcmgenet_resume(struct device *d) +@@ -4182,7 +4201,7 @@ static int bcmgenet_resume(struct device *d) bcmgenet_hfb_create_rxnfc_filter(priv, rule); /* Disable RX/TX DMA and flush TX queues */ @@ -90685,7 +90674,7 @@ index f9e91304d232..7abd5ddebd8e 100644 /* Initialize link state variables that bcmgenet_mii_setup() uses */ priv->old_link = -1; diff --git a/drivers/net/phy/broadcom.c b/drivers/net/phy/broadcom.c -index dbed15dc0fe7..8b0ac38742d0 100644 +index 644861366d54..992459dcaf39 100644 --- a/drivers/net/phy/broadcom.c +++ b/drivers/net/phy/broadcom.c @@ -82,6 +82,11 @@ static int bcm54210e_config_init(struct phy_device *phydev) @@ -90774,7 +90763,7 @@ index dbed15dc0fe7..8b0ac38742d0 100644 }, { .phy_id = PHY_ID_BCM5461, .phy_id_mask = 0xfffffff0, -@@ -923,7 +941,8 @@ module_phy_driver(broadcom_drivers); +@@ -924,7 +942,8 @@ module_phy_driver(broadcom_drivers); static struct mdio_device_id __maybe_unused broadcom_tbl[] = { { PHY_ID_BCM5411, 0xfffffff0 }, { PHY_ID_BCM5421, 0xfffffff0 }, @@ -98259,7 +98248,7 @@ index 000000000000..5ae2bdaa88b4 +MODULE_LICENSE("GPL"); + diff --git a/drivers/pinctrl/bcm/pinctrl-bcm2835.c b/drivers/pinctrl/bcm/pinctrl-bcm2835.c -index 40ce18a0d019..c5d88157f4b2 100644 +index 6768b2f03d68..a94a9c82f0e5 100644 --- a/drivers/pinctrl/bcm/pinctrl-bcm2835.c +++ b/drivers/pinctrl/bcm/pinctrl-bcm2835.c @@ -362,7 +362,7 @@ static const struct gpio_chip bcm2835_gpio_chip = { @@ -98280,7 +98269,7 @@ index 40ce18a0d019..c5d88157f4b2 100644 .ngpio = BCM2711_NUM_GPIOS, .can_sleep = false, }; -@@ -1288,9 +1288,13 @@ static int bcm2835_pinctrl_probe(struct platform_device *pdev) +@@ -1290,9 +1290,13 @@ static int bcm2835_pinctrl_probe(struct platform_device *pdev) char *name; girq->parents[i] = irq_of_parse_and_map(np, i); @@ -98296,7 +98285,7 @@ index 40ce18a0d019..c5d88157f4b2 100644 /* Skip over the all banks interrupts */ pc->wake_irq[i] = irq_of_parse_and_map(np, i + BCM2835_NUM_IRQS + 1); -@@ -1314,7 +1318,7 @@ static int bcm2835_pinctrl_probe(struct platform_device *pdev) +@@ -1318,7 +1322,7 @@ static int bcm2835_pinctrl_probe(struct platform_device *pdev) girq->default_type = IRQ_TYPE_NONE; girq->handler = handle_level_irq; @@ -98304,7 +98293,7 @@ index 40ce18a0d019..c5d88157f4b2 100644 + err = devm_gpiochip_add_data(dev, &pc->gpio_chip, pc); if (err) { dev_err(dev, "could not add GPIO chip\n"); - pinctrl_remove_gpio_range(pc->pctl_dev, &pc->gpio_range); + goto out_remove; diff --git a/drivers/power/reset/gpio-poweroff.c b/drivers/power/reset/gpio-poweroff.c index 1c5af2fef142..81e7acb8acb5 100644 --- a/drivers/power/reset/gpio-poweroff.c @@ -99565,7 +99554,7 @@ index d0c8d85f3db0..39ecd7c7ec61 100644 info = fbtft_framebuffer_alloc(display, dev, pdata); diff --git a/drivers/staging/fbtft/fbtft.h b/drivers/staging/fbtft/fbtft.h -index 76f8c090a837..f4f5ff0dc0c0 100644 +index 06afaa9d505b..c6ec045a447c 100644 --- a/drivers/staging/fbtft/fbtft.h +++ b/drivers/staging/fbtft/fbtft.h @@ -251,7 +251,8 @@ void fbtft_register_backlight(struct fbtft_par *par); @@ -99622,7 +99611,7 @@ index 76f8c090a837..f4f5ff0dc0c0 100644 {}, \ }; \ \ -@@ -344,6 +355,11 @@ static void __exit fbtft_driver_module_exit(void) \ +@@ -347,6 +358,11 @@ static void __exit fbtft_driver_module_exit(void) \ module_init(fbtft_driver_module_init); \ module_exit(fbtft_driver_module_exit); @@ -115816,7 +115805,7 @@ index fd95860cd661..fc36e5963e30 100644 ret = serial8250_register_8250_port(&up); if (ret < 0) { diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c -index 379d83432e7e..43d843af9d8b 100644 +index 859d0c30dcc2..f65461d648c7 100644 --- a/drivers/tty/serial/amba-pl011.c +++ b/drivers/tty/serial/amba-pl011.c @@ -266,6 +266,7 @@ struct uart_amba_port { @@ -115903,7 +115892,7 @@ index 379d83432e7e..43d843af9d8b 100644 if (!pl011_tx_char(uap, xmit->buf[xmit->tail], from_irq)) break; -@@ -1533,6 +1568,7 @@ static irqreturn_t pl011_int(int irq, void *dev_id) +@@ -1535,6 +1570,7 @@ static irqreturn_t pl011_int(int irq, void *dev_id) int handled = 0; spin_lock_irqsave(&uap->port.lock, flags); @@ -115911,7 +115900,7 @@ index 379d83432e7e..43d843af9d8b 100644 status = pl011_read(uap, REG_RIS) & uap->im; if (status) { do { -@@ -1552,7 +1588,7 @@ static irqreturn_t pl011_int(int irq, void *dev_id) +@@ -1554,7 +1590,7 @@ static irqreturn_t pl011_int(int irq, void *dev_id) UART011_CTSMIS|UART011_RIMIS)) pl011_modem_status(uap); if (status & UART011_TXIS) @@ -115920,7 +115909,7 @@ index 379d83432e7e..43d843af9d8b 100644 if (pass_counter-- == 0) break; -@@ -1707,6 +1743,23 @@ static void pl011_put_poll_char(struct uart_port *port, +@@ -1709,6 +1745,23 @@ static void pl011_put_poll_char(struct uart_port *port, #endif /* CONFIG_CONSOLE_POLL */ @@ -115944,7 +115933,7 @@ index 379d83432e7e..43d843af9d8b 100644 static int pl011_hwinit(struct uart_port *port) { struct uart_amba_port *uap = -@@ -1723,7 +1776,7 @@ static int pl011_hwinit(struct uart_port *port) +@@ -1725,7 +1778,7 @@ static int pl011_hwinit(struct uart_port *port) if (retval) return retval; @@ -115953,7 +115942,7 @@ index 379d83432e7e..43d843af9d8b 100644 /* Clear pending error and receive interrupts */ pl011_write(UART011_OEIS | UART011_BEIS | UART011_PEIS | -@@ -2200,6 +2253,8 @@ static const struct uart_ops amba_pl011_pops = { +@@ -2185,6 +2238,8 @@ static const struct uart_ops amba_pl011_pops = { .stop_tx = pl011_stop_tx, .start_tx = pl011_start_tx, .stop_rx = pl011_stop_rx, @@ -115962,7 +115951,7 @@ index 379d83432e7e..43d843af9d8b 100644 .enable_ms = pl011_enable_ms, .break_ctl = pl011_break_ctl, .startup = pl011_startup, -@@ -2380,7 +2435,7 @@ static int pl011_console_setup(struct console *co, char *options) +@@ -2361,7 +2416,7 @@ static int pl011_console_setup(struct console *co, char *options) plat->init(); } @@ -115971,7 +115960,7 @@ index 379d83432e7e..43d843af9d8b 100644 if (uap->vendor->fixed_options) { baud = uap->fixed_baud; -@@ -2597,6 +2652,7 @@ static struct uart_driver amba_reg = { +@@ -2578,6 +2633,7 @@ static struct uart_driver amba_reg = { .cons = AMBA_CONSOLE, }; @@ -115979,7 +115968,7 @@ index 379d83432e7e..43d843af9d8b 100644 static int pl011_probe_dt_alias(int index, struct device *dev) { struct device_node *np; -@@ -2628,6 +2684,7 @@ static int pl011_probe_dt_alias(int index, struct device *dev) +@@ -2609,6 +2665,7 @@ static int pl011_probe_dt_alias(int index, struct device *dev) return ret; } @@ -115987,7 +115976,7 @@ index 379d83432e7e..43d843af9d8b 100644 /* unregisters the driver also if no more ports are left */ static void pl011_unregister_port(struct uart_amba_port *uap) -@@ -2666,7 +2723,12 @@ static int pl011_setup_port(struct device *dev, struct uart_amba_port *uap, +@@ -2647,7 +2704,12 @@ static int pl011_setup_port(struct device *dev, struct uart_amba_port *uap, if (IS_ERR(base)) return PTR_ERR(base); @@ -116000,7 +115989,7 @@ index 379d83432e7e..43d843af9d8b 100644 uap->old_cr = 0; uap->port.dev = dev; -@@ -2728,6 +2790,11 @@ static int pl011_probe(struct amba_device *dev, const struct amba_id *id) +@@ -2709,6 +2771,11 @@ static int pl011_probe(struct amba_device *dev, const struct amba_id *id) if (IS_ERR(uap->clk)) return PTR_ERR(uap->clk); @@ -116092,10 +116081,10 @@ index 26f9fb9f67ca..fe8c7a85e141 100644 return i; } diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c -index 99908d8d2dd3..07f5a39a6e31 100644 +index ddd1d3eef912..92357f32d2c1 100644 --- a/drivers/usb/core/hcd.c +++ b/drivers/usb/core/hcd.c -@@ -1945,6 +1945,16 @@ int usb_hcd_alloc_bandwidth(struct usb_device *udev, +@@ -1966,6 +1966,16 @@ int usb_hcd_alloc_bandwidth(struct usb_device *udev, return ret; } @@ -116113,10 +116102,10 @@ index 99908d8d2dd3..07f5a39a6e31 100644 * endpoint state is gone from hardware. usb_hcd_flush_endpoint() must * have been called previously. Use for set_configuration, set_interface, diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c -index 3f406519da58..dfbaea05146f 100644 +index 18ee3914b468..6ab15e05a6f9 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c -@@ -5503,7 +5503,7 @@ static void port_event(struct usb_hub *hub, int port1) +@@ -5506,7 +5506,7 @@ static void port_event(struct usb_hub *hub, int port1) port_dev->over_current_count++; port_over_current_notify(port_dev); @@ -176341,10 +176330,10 @@ index 93f429436e45..dce3990ea33b 100644 "// Write ERST size = %i to ir_set 0 (some bits preserved)", val); diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c -index 188dcfa2c7ee..00ed47ca2aed 100644 +index 490ce38ae93d..97260e089e0c 100644 --- a/drivers/usb/host/xhci-pci.c +++ b/drivers/usb/host/xhci-pci.c -@@ -295,6 +295,8 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) +@@ -297,6 +297,8 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) if (pdev->vendor == PCI_VENDOR_ID_VIA && pdev->device == 0x3483) { xhci->quirks |= XHCI_LPM_SUPPORT; xhci->quirks |= XHCI_EP_CTX_BROKEN_DCS; @@ -183582,10 +183571,10 @@ index 534eaa4d39bc..53d526dbe004 100644 /* priv field value to indicates that subsequent fields are valid. */ #define V4L2_PIX_FMT_PRIV_MAGIC 0xfeedcafe diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c -index 59cc82ef52a6..f5bd27cc7633 100644 +index 57f4e19df8c6..ba2f699d62cc 100644 --- a/kernel/cgroup/cgroup.c +++ b/kernel/cgroup/cgroup.c -@@ -5781,6 +5781,9 @@ int __init cgroup_init_early(void) +@@ -5865,6 +5865,9 @@ int __init cgroup_init_early(void) return 0; } @@ -183595,7 +183584,7 @@ index 59cc82ef52a6..f5bd27cc7633 100644 /** * cgroup_init - cgroup initialization * -@@ -5819,6 +5822,12 @@ int __init cgroup_init(void) +@@ -5903,6 +5906,12 @@ int __init cgroup_init(void) mutex_unlock(&cgroup_mutex); @@ -183608,7 +183597,7 @@ index 59cc82ef52a6..f5bd27cc7633 100644 for_each_subsys(ss, ssid) { if (ss->early_init) { struct cgroup_subsys_state *css = -@@ -6357,6 +6366,10 @@ static int __init cgroup_disable(char *str) +@@ -6461,6 +6470,10 @@ static int __init cgroup_disable(char *str) strcmp(token, ss->legacy_name)) continue; @@ -183619,7 +183608,7 @@ index 59cc82ef52a6..f5bd27cc7633 100644 static_branch_disable(cgroup_subsys_enabled_key[i]); pr_info("Disabling %s control group subsystem\n", ss->name); -@@ -6366,6 +6379,31 @@ static int __init cgroup_disable(char *str) +@@ -6470,6 +6483,31 @@ static int __init cgroup_disable(char *str) } __setup("cgroup_disable=", cgroup_disable); @@ -183669,10 +183658,10 @@ index 817545ff80b9..375a43d99b28 100644 for (;;) { tmp = *p; diff --git a/mm/page_alloc.c b/mm/page_alloc.c -index e078e3acb3de..0022d6f507f2 100644 +index 97eb298a0f57..04d75394eabe 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c -@@ -8840,8 +8840,6 @@ int alloc_contig_range(unsigned long start, unsigned long end, +@@ -8887,8 +8887,6 @@ int alloc_contig_range(unsigned long start, unsigned long end, /* Make sure the range is really isolated. */ if (test_pages_isolated(outer_start, end, 0)) { @@ -199573,7 +199562,7 @@ index 133296596864..cdea2d46bef8 100644 dev_warn(codec_dai->dev, "ASoC: Failed to set DAI format: %d\n", ret); diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h -index 949c6d129f2a..af8814f2830a 100644 +index aabd3a10ec5b..f45a570be4ab 100644 --- a/sound/usb/quirks-table.h +++ b/sound/usb/quirks-table.h @@ -46,6 +46,15 @@ @@ -199593,7 +199582,7 @@ index 949c6d129f2a..af8814f2830a 100644 /* Creative BT-D1 */ USB_DEVICE(0x041e, 0x0005), diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c -index 75d4d317b34b..2337707ddafb 100644 +index 6333a2ecb848..e5cb6daf2747 100644 --- a/sound/usb/quirks.c +++ b/sound/usb/quirks.c @@ -531,6 +531,11 @@ static int setup_disable_autosuspend(struct snd_usb_audio *chip, diff --git a/raspberrypi-kernel.spec b/raspberrypi-kernel.spec index f6647e1..1f03119 100644 --- a/raspberrypi-kernel.spec +++ b/raspberrypi-kernel.spec @@ -2,13 +2,13 @@ %global KernelVer %{version}-%{release}.raspi.%{_target_cpu} -%global hulkrelease 78.0.0 +%global hulkrelease 92.0.0 %global debug_package %{nil} Name: raspberrypi-kernel Version: 5.10.0 -Release: %{hulkrelease}.6 +Release: %{hulkrelease}.7 Summary: Linux Kernel License: GPLv2 URL: http://www.kernel.org/ @@ -166,6 +166,9 @@ install -m 644 /boot/dtb-%{KernelVer}/overlays/README /boot/overlays/ /lib/modules/%{KernelVer} %changelog +* Sun May 22 2022 Yafen Fang - 5.10.0-92.0.0.7 +- update kernel version to openEuler 5.10.0-92.0.0 + * Sat Apr 2 2022 Yafen Fang - 5.10.0-78.0.0.6 - update kernel version to openEuler 5.10.0-78.0.0