From: Greg Kroah-Hartman Date: Tue, 11 Jul 2023 21:20:16 +0000 (+0200) Subject: drop some 5.15 mmc patches X-Git-Tag: v6.1.39~111 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8ab878498d49971d59fd805959705fee04355fbe;p=thirdparty%2Fkernel%2Fstable-queue.git drop some 5.15 mmc patches --- diff --git a/queue-5.15/mmc-add-mmc_quirk_broken_sd_cache-for-kingston-canva.patch b/queue-5.15/mmc-add-mmc_quirk_broken_sd_cache-for-kingston-canva.patch deleted file mode 100644 index 4191ce50725..00000000000 --- a/queue-5.15/mmc-add-mmc_quirk_broken_sd_cache-for-kingston-canva.patch +++ /dev/null @@ -1,169 +0,0 @@ -From eca9c82eb96260dadb426749f2a3c45a5fbcefab Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 20 Jun 2023 12:27:13 +0200 -Subject: mmc: Add MMC_QUIRK_BROKEN_SD_CACHE for Kingston Canvas Go Plus from - 11/2019 - -From: Marek Vasut - -[ Upstream commit c467c8f081859d4f4ca4eee4fba54bb5d85d6c97 ] - -This microSD card never clears Flush Cache bit after cache flush has -been started in sd_flush_cache(). This leads e.g. to failure to mount -file system. Add a quirk which disables the SD cache for this specific -card from specific manufacturing date of 11/2019, since on newer dated -cards from 05/2023 the cache flush works correctly. - -Fixes: 08ebf903af57 ("mmc: core: Fixup support for writeback-cache for eMMC and SD") -Signed-off-by: Marek Vasut -Link: https://lore.kernel.org/r/20230620102713.7701-1-marex@denx.de -Signed-off-by: Ulf Hansson -Signed-off-by: Sasha Levin ---- - drivers/mmc/core/card.h | 30 +++++++++++++++++++++++------- - drivers/mmc/core/quirks.h | 13 +++++++++++++ - drivers/mmc/core/sd.c | 2 +- - include/linux/mmc/card.h | 1 + - 4 files changed, 38 insertions(+), 8 deletions(-) - -diff --git a/drivers/mmc/core/card.h b/drivers/mmc/core/card.h -index 3c0ccb37ba36e..3431db49f3fbe 100644 ---- a/drivers/mmc/core/card.h -+++ b/drivers/mmc/core/card.h -@@ -53,6 +53,10 @@ struct mmc_fixup { - unsigned int manfid; - unsigned short oemid; - -+ /* Manufacturing date */ -+ unsigned short year; -+ unsigned char month; -+ - /* SDIO-specific fields. You can use SDIO_ANY_ID here of course */ - u16 cis_vendor, cis_device; - -@@ -68,6 +72,8 @@ struct mmc_fixup { - - #define CID_MANFID_ANY (-1u) - #define CID_OEMID_ANY ((unsigned short) -1) -+#define CID_YEAR_ANY ((unsigned short) -1) -+#define CID_MONTH_ANY ((unsigned char) -1) - #define CID_NAME_ANY (NULL) - - #define EXT_CSD_REV_ANY (-1u) -@@ -81,17 +87,21 @@ struct mmc_fixup { - #define CID_MANFID_APACER 0x27 - #define CID_MANFID_KINGSTON 0x70 - #define CID_MANFID_HYNIX 0x90 -+#define CID_MANFID_KINGSTON_SD 0x9F - #define CID_MANFID_NUMONYX 0xFE - - #define END_FIXUP { NULL } - --#define _FIXUP_EXT(_name, _manfid, _oemid, _rev_start, _rev_end, \ -- _cis_vendor, _cis_device, \ -- _fixup, _data, _ext_csd_rev) \ -+#define _FIXUP_EXT(_name, _manfid, _oemid, _year, _month, \ -+ _rev_start, _rev_end, \ -+ _cis_vendor, _cis_device, \ -+ _fixup, _data, _ext_csd_rev) \ - { \ - .name = (_name), \ - .manfid = (_manfid), \ - .oemid = (_oemid), \ -+ .year = (_year), \ -+ .month = (_month), \ - .rev_start = (_rev_start), \ - .rev_end = (_rev_end), \ - .cis_vendor = (_cis_vendor), \ -@@ -103,8 +113,8 @@ struct mmc_fixup { - - #define MMC_FIXUP_REV(_name, _manfid, _oemid, _rev_start, _rev_end, \ - _fixup, _data, _ext_csd_rev) \ -- _FIXUP_EXT(_name, _manfid, \ -- _oemid, _rev_start, _rev_end, \ -+ _FIXUP_EXT(_name, _manfid, _oemid, CID_YEAR_ANY, CID_MONTH_ANY, \ -+ _rev_start, _rev_end, \ - SDIO_ANY_ID, SDIO_ANY_ID, \ - _fixup, _data, _ext_csd_rev) \ - -@@ -118,8 +128,9 @@ struct mmc_fixup { - _ext_csd_rev) - - #define SDIO_FIXUP(_vendor, _device, _fixup, _data) \ -- _FIXUP_EXT(CID_NAME_ANY, CID_MANFID_ANY, \ -- CID_OEMID_ANY, 0, -1ull, \ -+ _FIXUP_EXT(CID_NAME_ANY, CID_MANFID_ANY, CID_OEMID_ANY, \ -+ CID_YEAR_ANY, CID_MONTH_ANY, \ -+ 0, -1ull, \ - _vendor, _device, \ - _fixup, _data, EXT_CSD_REV_ANY) \ - -@@ -231,4 +242,9 @@ static inline int mmc_card_broken_sd_discard(const struct mmc_card *c) - return c->quirks & MMC_QUIRK_BROKEN_SD_DISCARD; - } - -+static inline int mmc_card_broken_sd_cache(const struct mmc_card *c) -+{ -+ return c->quirks & MMC_QUIRK_BROKEN_SD_CACHE; -+} -+ - #endif -diff --git a/drivers/mmc/core/quirks.h b/drivers/mmc/core/quirks.h -index 15ecd839a42f0..7cb861bf6b308 100644 ---- a/drivers/mmc/core/quirks.h -+++ b/drivers/mmc/core/quirks.h -@@ -53,6 +53,15 @@ static const struct mmc_fixup __maybe_unused mmc_blk_fixups[] = { - MMC_FIXUP("MMC32G", CID_MANFID_TOSHIBA, CID_OEMID_ANY, add_quirk_mmc, - MMC_QUIRK_BLK_NO_CMD23), - -+ /* -+ * Kingston Canvas Go! Plus microSD cards never finish SD cache flush. -+ * This has so far only been observed on cards from 11/2019, while new -+ * cards from 2023/05 do not exhibit this behavior. -+ */ -+ _FIXUP_EXT("SD64G", CID_MANFID_KINGSTON_SD, 0x5449, 2019, 11, -+ 0, -1ull, SDIO_ANY_ID, SDIO_ANY_ID, add_quirk_sd, -+ MMC_QUIRK_BROKEN_SD_CACHE, EXT_CSD_REV_ANY), -+ - /* - * Some SD cards lockup while using CMD23 multiblock transfers. - */ -@@ -196,6 +205,10 @@ static inline void mmc_fixup_device(struct mmc_card *card, - if (f->of_compatible && - !mmc_fixup_of_compatible_match(card, f->of_compatible)) - continue; -+ if (f->year != CID_YEAR_ANY && f->year != card->cid.year) -+ continue; -+ if (f->month != CID_MONTH_ANY && f->month != card->cid.month) -+ continue; - - dev_dbg(&card->dev, "calling %ps\n", f->vendor_fixup); - f->vendor_fixup(card, f->data); -diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c -index 592166e53dce8..ee15da61f8421 100644 ---- a/drivers/mmc/core/sd.c -+++ b/drivers/mmc/core/sd.c -@@ -1163,7 +1163,7 @@ static int sd_parse_ext_reg_perf(struct mmc_card *card, u8 fno, u8 page, - card->ext_perf.feature_support |= SD_EXT_PERF_HOST_MAINT; - - /* Cache support at bit 0. */ -- if (reg_buf[4] & BIT(0)) -+ if ((reg_buf[4] & BIT(0)) && !mmc_card_broken_sd_cache(card)) - card->ext_perf.feature_support |= SD_EXT_PERF_CACHE; - - /* Command queue support indicated via queue depth bits (0 to 4). */ -diff --git a/include/linux/mmc/card.h b/include/linux/mmc/card.h -index 12c7f2d3e2107..7a45edf6ce46a 100644 ---- a/include/linux/mmc/card.h -+++ b/include/linux/mmc/card.h -@@ -293,6 +293,7 @@ struct mmc_card { - #define MMC_QUIRK_TRIM_BROKEN (1<<12) /* Skip trim */ - #define MMC_QUIRK_BROKEN_HPI (1<<13) /* Disable broken HPI support */ - #define MMC_QUIRK_BROKEN_SD_DISCARD (1<<14) /* Disable broken SD discard support */ -+#define MMC_QUIRK_BROKEN_SD_CACHE (1<<15) /* Disable broken SD cache support */ - - bool reenable_cmdq; /* Re-enable Command Queue */ - --- -2.39.2 - diff --git a/queue-5.15/mmc-core-allow-to-match-the-device-tree-to-apply-qui.patch b/queue-5.15/mmc-core-allow-to-match-the-device-tree-to-apply-qui.patch deleted file mode 100644 index f65068e8c0e..00000000000 --- a/queue-5.15/mmc-core-allow-to-match-the-device-tree-to-apply-qui.patch +++ /dev/null @@ -1,94 +0,0 @@ -From 0f24dd438692b853427b177b5a527987792a3df8 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 10 Nov 2021 18:17:07 +0100 -Subject: mmc: core: allow to match the device tree to apply quirks -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Jérôme Pouiller - -[ Upstream commit b360b11026705369f7ea51653f75dbe611322338 ] - -MMC subsystem provides a way to apply quirks when a device match some -properties (VID, PID, etc...) Unfortunately, some SDIO devices do not -comply with the SDIO specification and does not provide reliable VID/PID -(eg. Silabs WF200). - -So, the drivers for these devices rely on device tree to identify the -device. - -This patch allows the MMC to also rely on the device tree to apply a -quirk. - -Signed-off-by: Jérôme Pouiller -Signed-off-by: H. Nikolaus Schaller -Reviewed-by: Linus Walleij -Link: https://lore.kernel.org/r/9e68e3d23e62a78527aabc1281f89e15200c7d09.1636564631.git.hns@goldelico.com -Signed-off-by: Ulf Hansson -Stable-dep-of: c467c8f08185 ("mmc: Add MMC_QUIRK_BROKEN_SD_CACHE for Kingston Canvas Go Plus from 11/2019") -Signed-off-by: Sasha Levin ---- - drivers/mmc/core/card.h | 3 +++ - drivers/mmc/core/quirks.h | 17 +++++++++++++++++ - 2 files changed, 20 insertions(+) - -diff --git a/drivers/mmc/core/card.h b/drivers/mmc/core/card.h -index 5c6986131faff..3c0ccb37ba36e 100644 ---- a/drivers/mmc/core/card.h -+++ b/drivers/mmc/core/card.h -@@ -59,6 +59,9 @@ struct mmc_fixup { - /* for MMC cards */ - unsigned int ext_csd_rev; - -+ /* Match against functions declared in device tree */ -+ const char *of_compatible; -+ - void (*vendor_fixup)(struct mmc_card *card, int data); - int data; - }; -diff --git a/drivers/mmc/core/quirks.h b/drivers/mmc/core/quirks.h -index 5a936f1ec3cb4..15ecd839a42f0 100644 ---- a/drivers/mmc/core/quirks.h -+++ b/drivers/mmc/core/quirks.h -@@ -10,6 +10,7 @@ - * - */ - -+#include - #include - - #include "card.h" -@@ -151,6 +152,19 @@ static const struct mmc_fixup __maybe_unused sdio_fixup_methods[] = { - END_FIXUP - }; - -+static inline bool mmc_fixup_of_compatible_match(struct mmc_card *card, -+ const char *compatible) -+{ -+ struct device_node *np; -+ -+ for_each_child_of_node(mmc_dev(card->host)->of_node, np) { -+ if (of_device_is_compatible(np, compatible)) -+ return true; -+ } -+ -+ return false; -+} -+ - static inline void mmc_fixup_device(struct mmc_card *card, - const struct mmc_fixup *table) - { -@@ -179,6 +193,9 @@ static inline void mmc_fixup_device(struct mmc_card *card, - continue; - if (rev < f->rev_start || rev > f->rev_end) - continue; -+ if (f->of_compatible && -+ !mmc_fixup_of_compatible_match(card, f->of_compatible)) -+ continue; - - dev_dbg(&card->dev, "calling %ps\n", f->vendor_fixup); - f->vendor_fixup(card, f->data); --- -2.39.2 - diff --git a/queue-5.15/mmc-core-rewrite-mmc_fixup_device.patch b/queue-5.15/mmc-core-rewrite-mmc_fixup_device.patch deleted file mode 100644 index c22d4e7a416..00000000000 --- a/queue-5.15/mmc-core-rewrite-mmc_fixup_device.patch +++ /dev/null @@ -1,80 +0,0 @@ -From 3425059f45152954d8a8f2f574aebe0f3a6593f5 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 10 Nov 2021 18:17:06 +0100 -Subject: mmc: core: rewrite mmc_fixup_device() -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Jérôme Pouiller - -[ Upstream commit f3abe2e509387907dd36886c1008445559ff4d91 ] - -Currently, mmc_fixup_device() is a bit difficult to read because of -particularly long condition. - -Signed-off-by: Jérôme Pouiller -Signed-off-by: H. Nikolaus Schaller -Reviewed-by: Linus Walleij -Link: https://lore.kernel.org/r/6515c1e8b3aa69ad273726f6e877d85c20f286ad.1636564631.git.hns@goldelico.com -Signed-off-by: Ulf Hansson -Stable-dep-of: c467c8f08185 ("mmc: Add MMC_QUIRK_BROKEN_SD_CACHE for Kingston Canvas Go Plus from 11/2019") -Signed-off-by: Sasha Levin ---- - drivers/mmc/core/quirks.h | 41 +++++++++++++++++++++++---------------- - 1 file changed, 24 insertions(+), 17 deletions(-) - -diff --git a/drivers/mmc/core/quirks.h b/drivers/mmc/core/quirks.h -index c8c0f50a2076d..5a936f1ec3cb4 100644 ---- a/drivers/mmc/core/quirks.h -+++ b/drivers/mmc/core/quirks.h -@@ -158,22 +158,29 @@ static inline void mmc_fixup_device(struct mmc_card *card, - u64 rev = cid_rev_card(card); - - for (f = table; f->vendor_fixup; f++) { -- if ((f->manfid == CID_MANFID_ANY || -- f->manfid == card->cid.manfid) && -- (f->oemid == CID_OEMID_ANY || -- f->oemid == card->cid.oemid) && -- (f->name == CID_NAME_ANY || -- !strncmp(f->name, card->cid.prod_name, -- sizeof(card->cid.prod_name))) && -- (f->cis_vendor == card->cis.vendor || -- f->cis_vendor == (u16) SDIO_ANY_ID) && -- (f->cis_device == card->cis.device || -- f->cis_device == (u16) SDIO_ANY_ID) && -- (f->ext_csd_rev == EXT_CSD_REV_ANY || -- f->ext_csd_rev == card->ext_csd.rev) && -- rev >= f->rev_start && rev <= f->rev_end) { -- dev_dbg(&card->dev, "calling %ps\n", f->vendor_fixup); -- f->vendor_fixup(card, f->data); -- } -+ if (f->manfid != CID_MANFID_ANY && -+ f->manfid != card->cid.manfid) -+ continue; -+ if (f->oemid != CID_OEMID_ANY && -+ f->oemid != card->cid.oemid) -+ continue; -+ if (f->name != CID_NAME_ANY && -+ strncmp(f->name, card->cid.prod_name, -+ sizeof(card->cid.prod_name))) -+ continue; -+ if (f->cis_vendor != (u16)SDIO_ANY_ID && -+ f->cis_vendor != card->cis.vendor) -+ continue; -+ if (f->cis_device != (u16)SDIO_ANY_ID && -+ f->cis_device != card->cis.device) -+ continue; -+ if (f->ext_csd_rev != EXT_CSD_REV_ANY && -+ f->ext_csd_rev != card->ext_csd.rev) -+ continue; -+ if (rev < f->rev_start || rev > f->rev_end) -+ continue; -+ -+ dev_dbg(&card->dev, "calling %ps\n", f->vendor_fixup); -+ f->vendor_fixup(card, f->data); - } - } --- -2.39.2 - diff --git a/queue-5.15/mmc-core-support-zeroout-using-trim-for-emmc.patch b/queue-5.15/mmc-core-support-zeroout-using-trim-for-emmc.patch deleted file mode 100644 index b3dd5930401..00000000000 --- a/queue-5.15/mmc-core-support-zeroout-using-trim-for-emmc.patch +++ /dev/null @@ -1,107 +0,0 @@ -From e71c90bcc65727d323b9a3cb40b263db7be5ee4c Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 29 Apr 2022 17:21:18 +0200 -Subject: mmc: core: Support zeroout using TRIM for eMMC - -From: Vincent Whitchurch - -[ Upstream commit f7b6fc327327698924ef3afa0c3e87a5b7466af3 ] - -If an eMMC card supports TRIM and indicates that it erases to zeros, we can -use it to support hardware offloading of REQ_OP_WRITE_ZEROES, so let's add -support for this. - -Signed-off-by: Vincent Whitchurch -Reviewed-by: Avri Altman -Link: https://lore.kernel.org/r/20220429152118.3617303-1-vincent.whitchurch@axis.com -Signed-off-by: Ulf Hansson -Stable-dep-of: c467c8f08185 ("mmc: Add MMC_QUIRK_BROKEN_SD_CACHE for Kingston Canvas Go Plus from 11/2019") -Signed-off-by: Sasha Levin ---- - drivers/mmc/core/block.c | 24 +++++++++++++++++++++--- - drivers/mmc/core/queue.c | 2 ++ - 2 files changed, 23 insertions(+), 3 deletions(-) - -diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c -index 0b72096f10e62..8105b8ef7cf40 100644 ---- a/drivers/mmc/core/block.c -+++ b/drivers/mmc/core/block.c -@@ -126,6 +126,7 @@ struct mmc_blk_data { - #define MMC_BLK_DISCARD BIT(2) - #define MMC_BLK_SECDISCARD BIT(3) - #define MMC_BLK_CQE_RECOVERY BIT(4) -+#define MMC_BLK_TRIM BIT(5) - - /* - * Only set in main mmc_blk_data associated -@@ -1100,12 +1101,13 @@ static void mmc_blk_issue_drv_op(struct mmc_queue *mq, struct request *req) - blk_mq_end_request(req, ret ? BLK_STS_IOERR : BLK_STS_OK); - } - --static void mmc_blk_issue_discard_rq(struct mmc_queue *mq, struct request *req) -+static void mmc_blk_issue_erase_rq(struct mmc_queue *mq, struct request *req, -+ int type, unsigned int erase_arg) - { - struct mmc_blk_data *md = mq->blkdata; - struct mmc_card *card = md->queue.card; - unsigned int from, nr; -- int err = 0, type = MMC_BLK_DISCARD; -+ int err = 0; - blk_status_t status = BLK_STS_OK; - - if (!mmc_can_erase(card)) { -@@ -1126,7 +1128,7 @@ static void mmc_blk_issue_discard_rq(struct mmc_queue *mq, struct request *req) - if (card->quirks & MMC_QUIRK_INAND_CMD38) { - err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, - INAND_CMD38_ARG_EXT_CSD, -- card->erase_arg == MMC_TRIM_ARG ? -+ erase_arg == MMC_TRIM_ARG ? - INAND_CMD38_ARG_TRIM : - INAND_CMD38_ARG_ERASE, - card->ext_csd.generic_cmd6_time); -@@ -1142,6 +1144,19 @@ static void mmc_blk_issue_discard_rq(struct mmc_queue *mq, struct request *req) - blk_mq_end_request(req, status); - } - -+static void mmc_blk_issue_trim_rq(struct mmc_queue *mq, struct request *req) -+{ -+ mmc_blk_issue_erase_rq(mq, req, MMC_BLK_TRIM, MMC_TRIM_ARG); -+} -+ -+static void mmc_blk_issue_discard_rq(struct mmc_queue *mq, struct request *req) -+{ -+ struct mmc_blk_data *md = mq->blkdata; -+ struct mmc_card *card = md->queue.card; -+ -+ mmc_blk_issue_erase_rq(mq, req, MMC_BLK_DISCARD, card->erase_arg); -+} -+ - static void mmc_blk_issue_secdiscard_rq(struct mmc_queue *mq, - struct request *req) - { -@@ -2336,6 +2351,9 @@ enum mmc_issued mmc_blk_mq_issue_rq(struct mmc_queue *mq, struct request *req) - case REQ_OP_SECURE_ERASE: - mmc_blk_issue_secdiscard_rq(mq, req); - break; -+ case REQ_OP_WRITE_ZEROES: -+ mmc_blk_issue_trim_rq(mq, req); -+ break; - case REQ_OP_FLUSH: - mmc_blk_issue_flush(mq, req); - break; -diff --git a/drivers/mmc/core/queue.c b/drivers/mmc/core/queue.c -index b15c034b42fb5..a72431703e527 100644 ---- a/drivers/mmc/core/queue.c -+++ b/drivers/mmc/core/queue.c -@@ -191,6 +191,8 @@ static void mmc_queue_setup_discard(struct request_queue *q, - q->limits.discard_granularity = SECTOR_SIZE; - if (mmc_can_secure_erase_trim(card)) - blk_queue_flag_set(QUEUE_FLAG_SECERASE, q); -+ if (mmc_can_trim(card) && card->erased_byte == 0) -+ blk_queue_max_write_zeroes_sectors(q, max_discard); - } - - static unsigned short mmc_get_max_segments(struct mmc_host *host) --- -2.39.2 - diff --git a/queue-5.15/series b/queue-5.15/series index 188f51355ad..a24d92f9af3 100644 --- a/queue-5.15/series +++ b/queue-5.15/series @@ -71,7 +71,6 @@ wifi-iwlwifi-pull-from-txqs-with-softirqs-disabled.patch iwlwifi-don-t-dump_stack-when-we-get-an-unexpected-i.patch wifi-iwlwifi-pcie-fix-null-pointer-dereference-in-iw.patch wifi-cfg80211-rewrite-merging-of-inherited-elements.patch -mmc-core-support-zeroout-using-trim-for-emmc.patch wifi-iwlwifi-mvm-indicate-hw-decrypt-for-beacon-prot.patch wifi-ath9k-convert-msecs-to-jiffies-where-needed.patch bpf-omit-superfluous-address-family-check-in-__bpf_s.patch @@ -95,9 +94,6 @@ netfilter-conntrack-dccp-copy-entire-header-to-stack.patch netfilter-nf_conntrack_sip-fix-the-ct_sip_parse_nume.patch ipvlan-fix-return-value-of-ipvlan_queue_xmit.patch netlink-add-__sock_i_ino-for-__netlink_diag_dump.patch -mmc-core-rewrite-mmc_fixup_device.patch -mmc-core-allow-to-match-the-device-tree-to-apply-qui.patch -mmc-add-mmc_quirk_broken_sd_cache-for-kingston-canva.patch drm-amd-display-add-logging-for-display-mall-refresh.patch radeon-avoid-double-free-in-ci_dpm_init.patch drm-amd-display-explicitly-specify-update-type-per-p.patch