From: Sasha Levin Date: Mon, 29 Jan 2024 13:31:29 +0000 (-0500) Subject: Fixes for 5.15 X-Git-Tag: v6.1.76~17 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1982af63e2823c71f77580940daf0db51135bd06;p=thirdparty%2Fkernel%2Fstable-queue.git Fixes for 5.15 Signed-off-by: Sasha Levin --- diff --git a/queue-5.15/block-move-checking-genhd_fl_no_part-to-bdev_add_par.patch b/queue-5.15/block-move-checking-genhd_fl_no_part-to-bdev_add_par.patch new file mode 100644 index 00000000000..03bc38f019a --- /dev/null +++ b/queue-5.15/block-move-checking-genhd_fl_no_part-to-bdev_add_par.patch @@ -0,0 +1,60 @@ +From 13ec78ed3a13d6eda9a8e83d95230b76cdf81a7d Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 18 Jan 2024 21:04:01 +0800 +Subject: block: Move checking GENHD_FL_NO_PART to bdev_add_partition() + +From: Li Lingfeng + +[ Upstream commit 7777f47f2ea64efd1016262e7b59fab34adfb869 ] + +Commit 1a721de8489f ("block: don't add or resize partition on the disk +with GENHD_FL_NO_PART") prevented all operations about partitions on disks +with GENHD_FL_NO_PART in blkpg_do_ioctl() since they are meaningless. +However, it changed error code in some scenarios. So move checking +GENHD_FL_NO_PART to bdev_add_partition() to eliminate impact. + +Fixes: 1a721de8489f ("block: don't add or resize partition on the disk with GENHD_FL_NO_PART") +Reported-by: Allison Karlitskaya +Closes: https://lore.kernel.org/all/CAOYeF9VsmqKMcQjo1k6YkGNujwN-nzfxY17N3F-CMikE1tYp+w@mail.gmail.com/ +Signed-off-by: Li Lingfeng +Reviewed-by: Yu Kuai +Link: https://lore.kernel.org/r/20240118130401.792757-1-lilingfeng@huaweicloud.com +Signed-off-by: Jens Axboe +Signed-off-by: Sasha Levin +--- + block/ioctl.c | 2 -- + block/partitions/core.c | 5 +++++ + 2 files changed, 5 insertions(+), 2 deletions(-) + +diff --git a/block/ioctl.c b/block/ioctl.c +index 0a3cf9aeec7d..7a939c178660 100644 +--- a/block/ioctl.c ++++ b/block/ioctl.c +@@ -20,8 +20,6 @@ static int blkpg_do_ioctl(struct block_device *bdev, + struct blkpg_partition p; + sector_t start, length; + +- if (disk->flags & GENHD_FL_NO_PART) +- return -EINVAL; + if (!capable(CAP_SYS_ADMIN)) + return -EACCES; + if (copy_from_user(&p, upart, sizeof(struct blkpg_partition))) +diff --git a/block/partitions/core.c b/block/partitions/core.c +index 1ead8c001561..b6a941889bb4 100644 +--- a/block/partitions/core.c ++++ b/block/partitions/core.c +@@ -463,6 +463,11 @@ int bdev_add_partition(struct gendisk *disk, int partno, sector_t start, + goto out; + } + ++ if (disk->flags & GENHD_FL_NO_PART) { ++ ret = -EINVAL; ++ goto out; ++ } ++ + if (partition_overlaps(disk, start, length, -1)) { + ret = -EBUSY; + goto out; +-- +2.43.0 + diff --git a/queue-5.15/drm-exynos-fix-accidental-on-stack-copy-of-exynos_dr.patch b/queue-5.15/drm-exynos-fix-accidental-on-stack-copy-of-exynos_dr.patch new file mode 100644 index 00000000000..ad60d0e7ce2 --- /dev/null +++ b/queue-5.15/drm-exynos-fix-accidental-on-stack-copy-of-exynos_dr.patch @@ -0,0 +1,66 @@ +From 6dccf5f621925faa20211cedb08d384719244435 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 14 Dec 2023 13:32:15 +0100 +Subject: drm/exynos: fix accidental on-stack copy of exynos_drm_plane + +From: Arnd Bergmann + +[ Upstream commit 960b537e91725bcb17dd1b19e48950e62d134078 ] + +gcc rightfully complains about excessive stack usage in the fimd_win_set_pixfmt() +function: + +drivers/gpu/drm/exynos/exynos_drm_fimd.c: In function 'fimd_win_set_pixfmt': +drivers/gpu/drm/exynos/exynos_drm_fimd.c:750:1: error: the frame size of 1032 bytes is larger than 1024 byte +drivers/gpu/drm/exynos/exynos5433_drm_decon.c: In function 'decon_win_set_pixfmt': +drivers/gpu/drm/exynos/exynos5433_drm_decon.c:381:1: error: the frame size of 1032 bytes is larger than 1024 bytes + +There is really no reason to copy the large exynos_drm_plane +structure to the stack before using one of its members, so just +use a pointer instead. + +Fixes: 6f8ee5c21722 ("drm/exynos: fimd: Make plane alpha configurable") +Signed-off-by: Arnd Bergmann +Reviewed-by: Marek Szyprowski +Signed-off-by: Inki Dae +Signed-off-by: Sasha Levin +--- + drivers/gpu/drm/exynos/exynos5433_drm_decon.c | 4 ++-- + drivers/gpu/drm/exynos/exynos_drm_fimd.c | 4 ++-- + 2 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/drivers/gpu/drm/exynos/exynos5433_drm_decon.c b/drivers/gpu/drm/exynos/exynos5433_drm_decon.c +index b5001db7a95c..2f6a5995b53f 100644 +--- a/drivers/gpu/drm/exynos/exynos5433_drm_decon.c ++++ b/drivers/gpu/drm/exynos/exynos5433_drm_decon.c +@@ -317,9 +317,9 @@ static void decon_win_set_bldmod(struct decon_context *ctx, unsigned int win, + static void decon_win_set_pixfmt(struct decon_context *ctx, unsigned int win, + struct drm_framebuffer *fb) + { +- struct exynos_drm_plane plane = ctx->planes[win]; ++ struct exynos_drm_plane *plane = &ctx->planes[win]; + struct exynos_drm_plane_state *state = +- to_exynos_plane_state(plane.base.state); ++ to_exynos_plane_state(plane->base.state); + unsigned int alpha = state->base.alpha; + unsigned int pixel_alpha; + unsigned long val; +diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c +index c735e53939d8..f25e112a92ed 100644 +--- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c ++++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c +@@ -644,9 +644,9 @@ static void fimd_win_set_bldmod(struct fimd_context *ctx, unsigned int win, + static void fimd_win_set_pixfmt(struct fimd_context *ctx, unsigned int win, + struct drm_framebuffer *fb, int width) + { +- struct exynos_drm_plane plane = ctx->planes[win]; ++ struct exynos_drm_plane *plane = &ctx->planes[win]; + struct exynos_drm_plane_state *state = +- to_exynos_plane_state(plane.base.state); ++ to_exynos_plane_state(plane->base.state); + uint32_t pixel_format = fb->format->format; + unsigned int alpha = state->base.alpha; + u32 val = WINCONx_ENWIN; +-- +2.43.0 + diff --git a/queue-5.15/drm-exynos-gsc-minor-fix-for-loop-iteration-in-gsc_r.patch b/queue-5.15/drm-exynos-gsc-minor-fix-for-loop-iteration-in-gsc_r.patch new file mode 100644 index 00000000000..db72431ceac --- /dev/null +++ b/queue-5.15/drm-exynos-gsc-minor-fix-for-loop-iteration-in-gsc_r.patch @@ -0,0 +1,39 @@ +From eb585fbeadb1b7406a02b994114d39b37abbe8ee Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 20 Dec 2023 12:53:15 +0300 +Subject: drm/exynos: gsc: minor fix for loop iteration in gsc_runtime_resume + +From: Fedor Pchelkin + +[ Upstream commit 4050957c7c2c14aa795dbf423b4180d5ac04e113 ] + +Do not forget to call clk_disable_unprepare() on the first element of +ctx->clocks array. + +Found by Linux Verification Center (linuxtesting.org). + +Fixes: 8b7d3ec83aba ("drm/exynos: gsc: Convert driver to IPP v2 core API") +Signed-off-by: Fedor Pchelkin +Reviewed-by: Marek Szyprowski +Signed-off-by: Inki Dae +Signed-off-by: Sasha Levin +--- + drivers/gpu/drm/exynos/exynos_drm_gsc.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/exynos/exynos_drm_gsc.c b/drivers/gpu/drm/exynos/exynos_drm_gsc.c +index 166a80262896..8c090354fd8a 100644 +--- a/drivers/gpu/drm/exynos/exynos_drm_gsc.c ++++ b/drivers/gpu/drm/exynos/exynos_drm_gsc.c +@@ -1346,7 +1346,7 @@ static int __maybe_unused gsc_runtime_resume(struct device *dev) + for (i = 0; i < ctx->num_clocks; i++) { + ret = clk_prepare_enable(ctx->clocks[i]); + if (ret) { +- while (--i > 0) ++ while (--i >= 0) + clk_disable_unprepare(ctx->clocks[i]); + return ret; + } +-- +2.43.0 + diff --git a/queue-5.15/drm-panel-simple-add-missing-bus-flags-for-tianma-tm.patch b/queue-5.15/drm-panel-simple-add-missing-bus-flags-for-tianma-tm.patch new file mode 100644 index 00000000000..ce35143dc22 --- /dev/null +++ b/queue-5.15/drm-panel-simple-add-missing-bus-flags-for-tianma-tm.patch @@ -0,0 +1,49 @@ +From 1afaa61263143cfd058fb930ee4303eb301a2f5b Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 12 Oct 2023 10:42:08 +0200 +Subject: drm: panel-simple: add missing bus flags for Tianma tm070jvhg[30/33] + +From: Markus Niebel + +[ Upstream commit 45dd7df26cee741b31c25ffdd44fb8794eb45ccd ] + +The DE signal is active high on this display, fill in the missing +bus_flags. This aligns panel_desc with its display_timing. + +Fixes: 9a2654c0f62a ("drm/panel: Add and fill drm_panel type field") +Fixes: b3bfcdf8a3b6 ("drm/panel: simple: add Tianma TM070JVHG33") + +Signed-off-by: Markus Niebel +Signed-off-by: Alexander Stein +Reviewed-by: Sam Ravnborg +Link: https://lore.kernel.org/r/20231012084208.2731650-1-alexander.stein@ew.tq-group.com +Signed-off-by: Neil Armstrong +Link: https://patchwork.freedesktop.org/patch/msgid/20231012084208.2731650-1-alexander.stein@ew.tq-group.com +Signed-off-by: Sasha Levin +--- + drivers/gpu/drm/panel/panel-simple.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c +index d9f1675c348e..671bd1d1ad19 100644 +--- a/drivers/gpu/drm/panel/panel-simple.c ++++ b/drivers/gpu/drm/panel/panel-simple.c +@@ -4173,6 +4173,7 @@ static const struct panel_desc tianma_tm070jdhg30 = { + }, + .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG, + .connector_type = DRM_MODE_CONNECTOR_LVDS, ++ .bus_flags = DRM_BUS_FLAG_DE_HIGH, + }; + + static const struct panel_desc tianma_tm070jvhg33 = { +@@ -4185,6 +4186,7 @@ static const struct panel_desc tianma_tm070jvhg33 = { + }, + .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG, + .connector_type = DRM_MODE_CONNECTOR_LVDS, ++ .bus_flags = DRM_BUS_FLAG_DE_HIGH, + }; + + static const struct display_timing tianma_tm070rvhg71_timing = { +-- +2.43.0 + diff --git a/queue-5.15/gpio-eic-sprd-clear-interrupt-after-set-the-interrup.patch b/queue-5.15/gpio-eic-sprd-clear-interrupt-after-set-the-interrup.patch new file mode 100644 index 00000000000..151c06b46c7 --- /dev/null +++ b/queue-5.15/gpio-eic-sprd-clear-interrupt-after-set-the-interrup.patch @@ -0,0 +1,160 @@ +From 8a79f628f4962b22e2404fce45e8e9c3a41ec593 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 9 Jan 2024 15:38:48 +0800 +Subject: gpio: eic-sprd: Clear interrupt after set the interrupt type + +From: Wenhua Lin + +[ Upstream commit 84aef4ed59705585d629e81d633a83b7d416f5fb ] + +The raw interrupt status of eic maybe set before the interrupt is enabled, +since the eic interrupt has a latch function, which would trigger the +interrupt event once enabled it from user side. To solve this problem, +interrupts generated before setting the interrupt trigger type are ignored. + +Fixes: 25518e024e3a ("gpio: Add Spreadtrum EIC driver support") +Acked-by: Chunyan Zhang +Signed-off-by: Wenhua Lin +Signed-off-by: Bartosz Golaszewski +Signed-off-by: Sasha Levin +--- + drivers/gpio/gpio-eic-sprd.c | 32 ++++++++++++++++++++++++++++---- + 1 file changed, 28 insertions(+), 4 deletions(-) + +diff --git a/drivers/gpio/gpio-eic-sprd.c b/drivers/gpio/gpio-eic-sprd.c +index 865ab2b34fdd..3dfb8b6c6c71 100644 +--- a/drivers/gpio/gpio-eic-sprd.c ++++ b/drivers/gpio/gpio-eic-sprd.c +@@ -318,20 +318,27 @@ static int sprd_eic_irq_set_type(struct irq_data *data, unsigned int flow_type) + switch (flow_type) { + case IRQ_TYPE_LEVEL_HIGH: + sprd_eic_update(chip, offset, SPRD_EIC_DBNC_IEV, 1); ++ sprd_eic_update(chip, offset, SPRD_EIC_DBNC_IC, 1); + break; + case IRQ_TYPE_LEVEL_LOW: + sprd_eic_update(chip, offset, SPRD_EIC_DBNC_IEV, 0); ++ sprd_eic_update(chip, offset, SPRD_EIC_DBNC_IC, 1); + break; + case IRQ_TYPE_EDGE_RISING: + case IRQ_TYPE_EDGE_FALLING: + case IRQ_TYPE_EDGE_BOTH: + state = sprd_eic_get(chip, offset); +- if (state) ++ if (state) { + sprd_eic_update(chip, offset, + SPRD_EIC_DBNC_IEV, 0); +- else ++ sprd_eic_update(chip, offset, ++ SPRD_EIC_DBNC_IC, 1); ++ } else { + sprd_eic_update(chip, offset, + SPRD_EIC_DBNC_IEV, 1); ++ sprd_eic_update(chip, offset, ++ SPRD_EIC_DBNC_IC, 1); ++ } + break; + default: + return -ENOTSUPP; +@@ -343,20 +350,27 @@ static int sprd_eic_irq_set_type(struct irq_data *data, unsigned int flow_type) + switch (flow_type) { + case IRQ_TYPE_LEVEL_HIGH: + sprd_eic_update(chip, offset, SPRD_EIC_LATCH_INTPOL, 0); ++ sprd_eic_update(chip, offset, SPRD_EIC_LATCH_INTCLR, 1); + break; + case IRQ_TYPE_LEVEL_LOW: + sprd_eic_update(chip, offset, SPRD_EIC_LATCH_INTPOL, 1); ++ sprd_eic_update(chip, offset, SPRD_EIC_LATCH_INTCLR, 1); + break; + case IRQ_TYPE_EDGE_RISING: + case IRQ_TYPE_EDGE_FALLING: + case IRQ_TYPE_EDGE_BOTH: + state = sprd_eic_get(chip, offset); +- if (state) ++ if (state) { + sprd_eic_update(chip, offset, + SPRD_EIC_LATCH_INTPOL, 0); +- else ++ sprd_eic_update(chip, offset, ++ SPRD_EIC_LATCH_INTCLR, 1); ++ } else { + sprd_eic_update(chip, offset, + SPRD_EIC_LATCH_INTPOL, 1); ++ sprd_eic_update(chip, offset, ++ SPRD_EIC_LATCH_INTCLR, 1); ++ } + break; + default: + return -ENOTSUPP; +@@ -370,29 +384,34 @@ static int sprd_eic_irq_set_type(struct irq_data *data, unsigned int flow_type) + sprd_eic_update(chip, offset, SPRD_EIC_ASYNC_INTBOTH, 0); + sprd_eic_update(chip, offset, SPRD_EIC_ASYNC_INTMODE, 0); + sprd_eic_update(chip, offset, SPRD_EIC_ASYNC_INTPOL, 1); ++ sprd_eic_update(chip, offset, SPRD_EIC_ASYNC_INTCLR, 1); + irq_set_handler_locked(data, handle_edge_irq); + break; + case IRQ_TYPE_EDGE_FALLING: + sprd_eic_update(chip, offset, SPRD_EIC_ASYNC_INTBOTH, 0); + sprd_eic_update(chip, offset, SPRD_EIC_ASYNC_INTMODE, 0); + sprd_eic_update(chip, offset, SPRD_EIC_ASYNC_INTPOL, 0); ++ sprd_eic_update(chip, offset, SPRD_EIC_ASYNC_INTCLR, 1); + irq_set_handler_locked(data, handle_edge_irq); + break; + case IRQ_TYPE_EDGE_BOTH: + sprd_eic_update(chip, offset, SPRD_EIC_ASYNC_INTMODE, 0); + sprd_eic_update(chip, offset, SPRD_EIC_ASYNC_INTBOTH, 1); ++ sprd_eic_update(chip, offset, SPRD_EIC_ASYNC_INTCLR, 1); + irq_set_handler_locked(data, handle_edge_irq); + break; + case IRQ_TYPE_LEVEL_HIGH: + sprd_eic_update(chip, offset, SPRD_EIC_ASYNC_INTBOTH, 0); + sprd_eic_update(chip, offset, SPRD_EIC_ASYNC_INTMODE, 1); + sprd_eic_update(chip, offset, SPRD_EIC_ASYNC_INTPOL, 1); ++ sprd_eic_update(chip, offset, SPRD_EIC_ASYNC_INTCLR, 1); + irq_set_handler_locked(data, handle_level_irq); + break; + case IRQ_TYPE_LEVEL_LOW: + sprd_eic_update(chip, offset, SPRD_EIC_ASYNC_INTBOTH, 0); + sprd_eic_update(chip, offset, SPRD_EIC_ASYNC_INTMODE, 1); + sprd_eic_update(chip, offset, SPRD_EIC_ASYNC_INTPOL, 0); ++ sprd_eic_update(chip, offset, SPRD_EIC_ASYNC_INTCLR, 1); + irq_set_handler_locked(data, handle_level_irq); + break; + default: +@@ -405,29 +424,34 @@ static int sprd_eic_irq_set_type(struct irq_data *data, unsigned int flow_type) + sprd_eic_update(chip, offset, SPRD_EIC_SYNC_INTBOTH, 0); + sprd_eic_update(chip, offset, SPRD_EIC_SYNC_INTMODE, 0); + sprd_eic_update(chip, offset, SPRD_EIC_SYNC_INTPOL, 1); ++ sprd_eic_update(chip, offset, SPRD_EIC_SYNC_INTCLR, 1); + irq_set_handler_locked(data, handle_edge_irq); + break; + case IRQ_TYPE_EDGE_FALLING: + sprd_eic_update(chip, offset, SPRD_EIC_SYNC_INTBOTH, 0); + sprd_eic_update(chip, offset, SPRD_EIC_SYNC_INTMODE, 0); + sprd_eic_update(chip, offset, SPRD_EIC_SYNC_INTPOL, 0); ++ sprd_eic_update(chip, offset, SPRD_EIC_SYNC_INTCLR, 1); + irq_set_handler_locked(data, handle_edge_irq); + break; + case IRQ_TYPE_EDGE_BOTH: + sprd_eic_update(chip, offset, SPRD_EIC_SYNC_INTMODE, 0); + sprd_eic_update(chip, offset, SPRD_EIC_SYNC_INTBOTH, 1); ++ sprd_eic_update(chip, offset, SPRD_EIC_SYNC_INTCLR, 1); + irq_set_handler_locked(data, handle_edge_irq); + break; + case IRQ_TYPE_LEVEL_HIGH: + sprd_eic_update(chip, offset, SPRD_EIC_SYNC_INTBOTH, 0); + sprd_eic_update(chip, offset, SPRD_EIC_SYNC_INTMODE, 1); + sprd_eic_update(chip, offset, SPRD_EIC_SYNC_INTPOL, 1); ++ sprd_eic_update(chip, offset, SPRD_EIC_SYNC_INTCLR, 1); + irq_set_handler_locked(data, handle_level_irq); + break; + case IRQ_TYPE_LEVEL_LOW: + sprd_eic_update(chip, offset, SPRD_EIC_SYNC_INTBOTH, 0); + sprd_eic_update(chip, offset, SPRD_EIC_SYNC_INTMODE, 1); + sprd_eic_update(chip, offset, SPRD_EIC_SYNC_INTPOL, 0); ++ sprd_eic_update(chip, offset, SPRD_EIC_SYNC_INTCLR, 1); + irq_set_handler_locked(data, handle_level_irq); + break; + default: +-- +2.43.0 + diff --git a/queue-5.15/series b/queue-5.15/series index 8648ffbcb91..829e7fd43e2 100644 --- a/queue-5.15/series +++ b/queue-5.15/series @@ -120,3 +120,9 @@ nfsd-fix-release_lockowner.patch ksmbd-fix-global-oob-in-ksmbd_nl_policy.patch cpufreq-intel_pstate-drop-redundant-intel_pstate_get.patch cpufreq-intel_pstate-refine-computation-of-p-state-f.patch +drm-panel-simple-add-missing-bus-flags-for-tianma-tm.patch +drm-exynos-fix-accidental-on-stack-copy-of-exynos_dr.patch +drm-exynos-gsc-minor-fix-for-loop-iteration-in-gsc_r.patch +gpio-eic-sprd-clear-interrupt-after-set-the-interrup.patch +block-move-checking-genhd_fl_no_part-to-bdev_add_par.patch +spi-bcm-qspi-fix-sfdp-bfpt-read-by-usig-mspi-read.patch diff --git a/queue-5.15/spi-bcm-qspi-fix-sfdp-bfpt-read-by-usig-mspi-read.patch b/queue-5.15/spi-bcm-qspi-fix-sfdp-bfpt-read-by-usig-mspi-read.patch new file mode 100644 index 00000000000..858c474c195 --- /dev/null +++ b/queue-5.15/spi-bcm-qspi-fix-sfdp-bfpt-read-by-usig-mspi-read.patch @@ -0,0 +1,49 @@ +From 006b8afbb12f6c00c37df7150fc1347e1dedb98c Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 9 Jan 2024 16:00:32 -0500 +Subject: spi: bcm-qspi: fix SFDP BFPT read by usig mspi read + +From: Kamal Dasu + +[ Upstream commit 574bf7bbe83794a902679846770f75a9b7f28176 ] + +SFDP read shall use the mspi reads when using the bcm_qspi_exec_mem_op() +call. This fixes SFDP parameter page read failures seen with parts that +now use SFDP protocol to read the basic flash parameter table. + +Fixes: 5f195ee7d830 ("spi: bcm-qspi: Implement the spi_mem interface") +Signed-off-by: Kamal Dasu +Tested-by: Florian Fainelli +Reviewed-by: Florian Fainelli +Link: https://msgid.link/r/20240109210033.43249-1-kamal.dasu@broadcom.com +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +--- + drivers/spi/spi-bcm-qspi.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/spi/spi-bcm-qspi.c b/drivers/spi/spi-bcm-qspi.c +index c79797c06cda..bca7ac570b94 100644 +--- a/drivers/spi/spi-bcm-qspi.c ++++ b/drivers/spi/spi-bcm-qspi.c +@@ -19,7 +19,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include "spi-bcm-qspi.h" +@@ -1049,7 +1049,7 @@ static int bcm_qspi_exec_mem_op(struct spi_mem *mem, + + /* non-aligned and very short transfers are handled by MSPI */ + if (!IS_ALIGNED((uintptr_t)addr, 4) || !IS_ALIGNED((uintptr_t)buf, 4) || +- len < 4) ++ len < 4 || op->cmd.opcode == SPINOR_OP_RDSFDP) + mspi_read = true; + + if (!has_bspi(qspi) || mspi_read) +-- +2.43.0 +