]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 5.15
authorSasha Levin <sashal@kernel.org>
Mon, 29 Jan 2024 13:31:29 +0000 (08:31 -0500)
committerSasha Levin <sashal@kernel.org>
Mon, 29 Jan 2024 13:31:29 +0000 (08:31 -0500)
Signed-off-by: Sasha Levin <sashal@kernel.org>
queue-5.15/block-move-checking-genhd_fl_no_part-to-bdev_add_par.patch [new file with mode: 0644]
queue-5.15/drm-exynos-fix-accidental-on-stack-copy-of-exynos_dr.patch [new file with mode: 0644]
queue-5.15/drm-exynos-gsc-minor-fix-for-loop-iteration-in-gsc_r.patch [new file with mode: 0644]
queue-5.15/drm-panel-simple-add-missing-bus-flags-for-tianma-tm.patch [new file with mode: 0644]
queue-5.15/gpio-eic-sprd-clear-interrupt-after-set-the-interrup.patch [new file with mode: 0644]
queue-5.15/series
queue-5.15/spi-bcm-qspi-fix-sfdp-bfpt-read-by-usig-mspi-read.patch [new file with mode: 0644]

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 (file)
index 0000000..03bc38f
--- /dev/null
@@ -0,0 +1,60 @@
+From 13ec78ed3a13d6eda9a8e83d95230b76cdf81a7d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 18 Jan 2024 21:04:01 +0800
+Subject: block: Move checking GENHD_FL_NO_PART to bdev_add_partition()
+
+From: Li Lingfeng <lilingfeng3@huawei.com>
+
+[ 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 <allison.karlitskaya@redhat.com>
+Closes: https://lore.kernel.org/all/CAOYeF9VsmqKMcQjo1k6YkGNujwN-nzfxY17N3F-CMikE1tYp+w@mail.gmail.com/
+Signed-off-by: Li Lingfeng <lilingfeng3@huawei.com>
+Reviewed-by: Yu Kuai <yukuai3@huawei.com>
+Link: https://lore.kernel.org/r/20240118130401.792757-1-lilingfeng@huaweicloud.com
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ 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 (file)
index 0000000..ad60d0e
--- /dev/null
@@ -0,0 +1,66 @@
+From 6dccf5f621925faa20211cedb08d384719244435 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 14 Dec 2023 13:32:15 +0100
+Subject: drm/exynos: fix accidental on-stack copy of exynos_drm_plane
+
+From: Arnd Bergmann <arnd@arndb.de>
+
+[ 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 <arnd@arndb.de>
+Reviewed-by: Marek Szyprowski <m.szyprowski@samsung.com>
+Signed-off-by: Inki Dae <inki.dae@samsung.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ 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 (file)
index 0000000..db72431
--- /dev/null
@@ -0,0 +1,39 @@
+From eb585fbeadb1b7406a02b994114d39b37abbe8ee Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+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 <pchelkin@ispras.ru>
+
+[ 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 <pchelkin@ispras.ru>
+Reviewed-by: Marek Szyprowski <m.szyprowski@samsung.com>
+Signed-off-by: Inki Dae <inki.dae@samsung.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ 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 (file)
index 0000000..ce35143
--- /dev/null
@@ -0,0 +1,49 @@
+From 1afaa61263143cfd058fb930ee4303eb301a2f5b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+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 <Markus.Niebel@ew.tq-group.com>
+
+[ 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 <Markus.Niebel@ew.tq-group.com>
+Signed-off-by: Alexander Stein <alexander.stein@ew.tq-group.com>
+Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
+Link: https://lore.kernel.org/r/20231012084208.2731650-1-alexander.stein@ew.tq-group.com
+Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
+Link: https://patchwork.freedesktop.org/patch/msgid/20231012084208.2731650-1-alexander.stein@ew.tq-group.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ 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 (file)
index 0000000..151c06b
--- /dev/null
@@ -0,0 +1,160 @@
+From 8a79f628f4962b22e2404fce45e8e9c3a41ec593 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 9 Jan 2024 15:38:48 +0800
+Subject: gpio: eic-sprd: Clear interrupt after set the interrupt type
+
+From: Wenhua Lin <Wenhua.Lin@unisoc.com>
+
+[ 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 <zhang.lyra@gmail.com>
+Signed-off-by: Wenhua Lin <Wenhua.Lin@unisoc.com>
+Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ 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
+
index 8648ffbcb912f941e17d992c95aba6e5587b869e..829e7fd43e2d3a77673665dcc712abcbb99ef5a6 100644 (file)
@@ -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 (file)
index 0000000..858c474
--- /dev/null
@@ -0,0 +1,49 @@
+From 006b8afbb12f6c00c37df7150fc1347e1dedb98c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 9 Jan 2024 16:00:32 -0500
+Subject: spi: bcm-qspi: fix SFDP BFPT read by usig mspi read
+
+From: Kamal Dasu <kamal.dasu@broadcom.com>
+
+[ 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 <kamal.dasu@broadcom.com>
+Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
+Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
+Link: https://msgid.link/r/20240109210033.43249-1-kamal.dasu@broadcom.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ 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 <linux/platform_device.h>
+ #include <linux/slab.h>
+ #include <linux/spi/spi.h>
+-#include <linux/spi/spi-mem.h>
++#include <linux/mtd/spi-nor.h>
+ #include <linux/sysfs.h>
+ #include <linux/types.h>
+ #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
+