Changelog: https://cdn.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.12.78 Removed upstreamed: generic/pending-6.12/620-net-sfp-improve-Huawei-MA5671a-fixup.patch[1] generic/pending-6.12/704-net-phy-register-phy-led_triggers-during-probe-to-av.patch[2] airoha/patches-6.12/014-01-v6.13-net-airoha-fix-PSE-memory-configuration-in-airoha_fe.patch[3] airoha/patches-6.12/014-02-v6.13-net-airoha-read-default-PSE-reserved-pages-value-bef.patch[4] airoha/patches-6.12/031-01-v6.13-net-airoha-Read-completion-queue-data-in-airoha_qdma.patch[5] airoha/patches-6.12/128-v7.1-net-airoha-Remove-airoha_dev_stop-in-airoha_remove.patch[6] Manually rebased: airoha/patches-6.12/048-01-v6.15-net-airoha-Move-airoha_eth-driver-in-a-dedicated-fol.patch All patches automatically rebased. 1. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.78&id=bbdf6d378e1ddbeadc04c57b182aadefcc3aa917 2. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.78&id=241cd64cf2e32b28ead151b1795cd8fef2b6e482 3. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.78&id=a04ac7bc97afe313e10ae4c73797c668dee47c5c 4. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.78&id=a9ed47c3663219e20406d566f02809de05373a42 5. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.78&id=4cba4373abac7ba27fdb33057a29b92efa8fd15d 6. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.78&id=652ec118d8dc1b088e685d5562995b6665463771 Signed-off-by: John Audia <therealgraysky@proton.me> Link: https://github.com/openwrt/openwrt/pull/22607 [Fix 048-01-v6.15-net-airoha-Move-airoha_eth-driver-in-a-dedicated-fol] Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
92 lines
3.1 KiB
Diff
92 lines
3.1 KiB
Diff
From 9fd61ed35c2f84eed80c88f39c040aa1d4df4408 Mon Sep 17 00:00:00 2001
|
|
From: Phil Elwell <phil@raspberrypi.com>
|
|
Date: Tue, 6 Jul 2021 09:45:36 +0100
|
|
Subject: [PATCH] sdhci: Add SD Express hook
|
|
|
|
sdhci: remove PYA0_INTR_BUG quirk. Add quirks to disable some of the higher SDR speeds at 1.8v.
|
|
---
|
|
drivers/mmc/host/sdhci-of-dwcmshc.c | 6 +++++-
|
|
drivers/mmc/host/sdhci.c | 19 +++++++++++++++++++
|
|
drivers/mmc/host/sdhci.h | 6 ++++++
|
|
3 files changed, 30 insertions(+), 1 deletion(-)
|
|
|
|
--- a/drivers/mmc/host/sdhci-of-dwcmshc.c
|
|
+++ b/drivers/mmc/host/sdhci-of-dwcmshc.c
|
|
@@ -1248,7 +1248,11 @@ static const struct dwcmshc_pltfm_data s
|
|
.quirks = SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN |
|
|
SDHCI_QUIRK_BROKEN_TIMEOUT_VAL,
|
|
.quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN |
|
|
- SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN,
|
|
+ SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN |
|
|
+ SDHCI_QUIRK2_NO_SDR50 |
|
|
+ SDHCI_QUIRK2_NO_SDR104 |
|
|
+ SDHCI_QUIRK2_NO_SDR25,
|
|
+
|
|
},
|
|
.init = dwcmshc_rk35xx_init,
|
|
.postinit = dwcmshc_rk35xx_postinit,
|
|
--- a/drivers/mmc/host/sdhci.c
|
|
+++ b/drivers/mmc/host/sdhci.c
|
|
@@ -3032,6 +3032,15 @@ static void sdhci_card_event(struct mmc_
|
|
spin_unlock_irqrestore(&host->lock, flags);
|
|
}
|
|
|
|
+static int sdhci_init_sd_express(struct mmc_host *mmc, struct mmc_ios *ios)
|
|
+{
|
|
+ struct sdhci_host *host = mmc_priv(mmc);
|
|
+
|
|
+ if (!host->ops->init_sd_express)
|
|
+ return -EOPNOTSUPP;
|
|
+ return host->ops->init_sd_express(host, ios);
|
|
+}
|
|
+
|
|
static const struct mmc_host_ops sdhci_ops = {
|
|
.request = sdhci_request,
|
|
.post_req = sdhci_post_req,
|
|
@@ -3047,6 +3056,7 @@ static const struct mmc_host_ops sdhci_o
|
|
.execute_tuning = sdhci_execute_tuning,
|
|
.card_event = sdhci_card_event,
|
|
.card_busy = sdhci_card_busy,
|
|
+ .init_sd_express = sdhci_init_sd_express,
|
|
};
|
|
|
|
/*****************************************************************************\
|
|
@@ -4572,6 +4582,15 @@ int sdhci_setup_host(struct sdhci_host *
|
|
!(host->quirks2 & SDHCI_QUIRK2_BROKEN_DDR50))
|
|
mmc->caps |= MMC_CAP_UHS_DDR50;
|
|
|
|
+ if (host->quirks2 & SDHCI_QUIRK2_NO_SDR25)
|
|
+ mmc->caps &= ~MMC_CAP_UHS_SDR25;
|
|
+
|
|
+ if (host->quirks2 & SDHCI_QUIRK2_NO_SDR50)
|
|
+ mmc->caps &= ~MMC_CAP_UHS_SDR50;
|
|
+
|
|
+ if (host->quirks2 & SDHCI_QUIRK2_NO_SDR104)
|
|
+ mmc->caps &= ~MMC_CAP_UHS_SDR104;
|
|
+
|
|
/* Does the host need tuning for SDR50? */
|
|
if (host->caps1 & SDHCI_USE_SDR50_TUNING)
|
|
host->flags |= SDHCI_SDR50_NEEDS_TUNING;
|
|
--- a/drivers/mmc/host/sdhci.h
|
|
+++ b/drivers/mmc/host/sdhci.h
|
|
@@ -485,6 +485,11 @@ struct sdhci_host {
|
|
/* Issue CMD and DATA reset together */
|
|
#define SDHCI_QUIRK2_ISSUE_CMD_DAT_RESET_TOGETHER (1<<19)
|
|
|
|
+/* Quirks to ignore a speed if a that speed is unreliable */
|
|
+#define SDHCI_QUIRK2_NO_SDR25 (1<<19)
|
|
+#define SDHCI_QUIRK2_NO_SDR50 (1<<20)
|
|
+#define SDHCI_QUIRK2_NO_SDR104 (1<<21)
|
|
+
|
|
int irq; /* Device IRQ */
|
|
void __iomem *ioaddr; /* Mapped address */
|
|
phys_addr_t mapbase; /* physical address base */
|
|
@@ -667,6 +672,7 @@ struct sdhci_ops {
|
|
void (*request_done)(struct sdhci_host *host,
|
|
struct mmc_request *mrq);
|
|
void (*dump_vendor_regs)(struct sdhci_host *host);
|
|
+ int (*init_sd_express)(struct sdhci_host *host, struct mmc_ios *ios);
|
|
};
|
|
|
|
#ifdef CONFIG_MMC_SDHCI_IO_ACCESSORS
|