kernel: bump 6.12 to 6.12.62

Changelog: https://cdn.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.12.62

Manually rebased:
  bcm27xx/patches-6.12/950-0358-mmc-sdhci-of-dwcmshc-define-sdio-timeout-clocks.patch

Removed upstreamed:
  backport-6.12/830-v6.18-spi-bcm63xx-fix-premature-CS-deassertion-on-RX-only-transactions.patch[1]

All other patches automatically rebased.

1. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.62&id=e31194bf494f6900a5f96f55ed194a00e458f8d1

Build system: x86/64
Build-tested: flogic/glinet_gl-mt6000, ramips/tplink_archer-a6-v3, x86/64-glibc
Run-tested: flogic/glinet_gl-mt6000, ramips/tplink_archer-a6-v3, x86/64-glibc

Signed-off-by: John Audia <therealgraysky@proton.me>
Link: https://github.com/openwrt/openwrt/pull/21126
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
This commit is contained in:
John Audia
2025-12-10 15:19:42 -05:00
committed by Hauke Mehrtens
parent 86996634f0
commit 97e9d7038e
32 changed files with 70 additions and 129 deletions

View File

@@ -111,7 +111,7 @@ Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
+ +
--- a/MAINTAINERS --- a/MAINTAINERS
+++ b/MAINTAINERS +++ b/MAINTAINERS
@@ -737,6 +737,13 @@ S: Maintained @@ -745,6 +745,13 @@ S: Maintained
F: Documentation/devicetree/bindings/spi/airoha,en7581-snand.yaml F: Documentation/devicetree/bindings/spi/airoha,en7581-snand.yaml
F: drivers/spi/spi-airoha-snfi.c F: drivers/spi/spi-airoha-snfi.c

View File

@@ -35,7 +35,7 @@ Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
--- a/MAINTAINERS --- a/MAINTAINERS
+++ b/MAINTAINERS +++ b/MAINTAINERS
@@ -742,6 +742,7 @@ M: Christian Marangi <ansuelsmth@gmail.c @@ -750,6 +750,7 @@ M: Christian Marangi <ansuelsmth@gmail.c
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
S: Maintained S: Maintained
F: Documentation/devicetree/bindings/phy/airoha,an7581-usb-phy.yaml F: Documentation/devicetree/bindings/phy/airoha,an7581-usb-phy.yaml

View File

@@ -8,7 +8,7 @@
static int spinand_read_reg_op(struct spinand_device *spinand, u8 reg, u8 *val) static int spinand_read_reg_op(struct spinand_device *spinand, u8 reg, u8 *val)
{ {
@@ -1575,6 +1576,7 @@ static int spinand_probe(struct spi_mem @@ -1577,6 +1578,7 @@ static int spinand_probe(struct spi_mem
if (ret) if (ret)
return ret; return ret;
@@ -16,7 +16,7 @@
ret = mtd_device_register(mtd, NULL, 0); ret = mtd_device_register(mtd, NULL, 0);
if (ret) if (ret)
goto err_spinand_cleanup; goto err_spinand_cleanup;
@@ -1582,6 +1584,7 @@ static int spinand_probe(struct spi_mem @@ -1584,6 +1586,7 @@ static int spinand_probe(struct spi_mem
return 0; return 0;
err_spinand_cleanup: err_spinand_cleanup:
@@ -24,7 +24,7 @@
spinand_cleanup(spinand); spinand_cleanup(spinand);
return ret; return ret;
@@ -1600,6 +1603,7 @@ static int spinand_remove(struct spi_mem @@ -1602,6 +1605,7 @@ static int spinand_remove(struct spi_mem
if (ret) if (ret)
return ret; return ret;

View File

@@ -18626,7 +18626,7 @@ Signed-off-by: j-schambacher <joerg@hifiberry.com>
* For devices with more than one control interface, we assume the * For devices with more than one control interface, we assume the
--- a/sound/usb/quirks.c --- a/sound/usb/quirks.c
+++ b/sound/usb/quirks.c +++ b/sound/usb/quirks.c
@@ -2378,6 +2378,8 @@ static const struct usb_audio_quirk_flag @@ -2385,6 +2385,8 @@ static const struct usb_audio_quirk_flag
QUIRK_FLAG_ALIGN_TRANSFER), QUIRK_FLAG_ALIGN_TRANSFER),
DEVICE_FLG(0x534d, 0x2109, /* MacroSilicon MS2109 */ DEVICE_FLG(0x534d, 0x2109, /* MacroSilicon MS2109 */
QUIRK_FLAG_ALIGN_TRANSFER), QUIRK_FLAG_ALIGN_TRANSFER),

View File

@@ -124,7 +124,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.org>
* non-error returns are a promise to giveback() the urb later * non-error returns are a promise to giveback() the urb later
* we drop ownership so next owner (or urb unlink) can get it * we drop ownership so next owner (or urb unlink) can get it
*/ */
@@ -5386,6 +5489,7 @@ static const struct hc_driver xhci_hc_dr @@ -5387,6 +5490,7 @@ static const struct hc_driver xhci_hc_dr
.endpoint_reset = xhci_endpoint_reset, .endpoint_reset = xhci_endpoint_reset,
.check_bandwidth = xhci_check_bandwidth, .check_bandwidth = xhci_check_bandwidth,
.reset_bandwidth = xhci_reset_bandwidth, .reset_bandwidth = xhci_reset_bandwidth,

View File

@@ -32,7 +32,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.org>
#define USB_VENDOR_ID_BELKIN 0x050d #define USB_VENDOR_ID_BELKIN 0x050d
#define USB_DEVICE_ID_FLIP_KVM 0x3201 #define USB_DEVICE_ID_FLIP_KVM 0x3201
@@ -1470,6 +1473,9 @@ @@ -1471,6 +1474,9 @@
#define USB_VENDOR_ID_XIAOMI 0x2717 #define USB_VENDOR_ID_XIAOMI 0x2717
#define USB_DEVICE_ID_MI_SILENT_MOUSE 0x5014 #define USB_DEVICE_ID_MI_SILENT_MOUSE 0x5014

View File

@@ -75,7 +75,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
if (pdev->vendor == PCI_VENDOR_ID_ASMEDIA && if (pdev->vendor == PCI_VENDOR_ID_ASMEDIA &&
--- a/drivers/usb/host/xhci-ring.c --- a/drivers/usb/host/xhci-ring.c
+++ b/drivers/usb/host/xhci-ring.c +++ b/drivers/usb/host/xhci-ring.c
@@ -3661,6 +3661,48 @@ static int xhci_align_td(struct xhci_hcd @@ -3666,6 +3666,48 @@ static int xhci_align_td(struct xhci_hcd
return 1; return 1;
} }
@@ -124,7 +124,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
/* This is very similar to what ehci-q.c qtd_fill() does */ /* This is very similar to what ehci-q.c qtd_fill() does */
int xhci_queue_bulk_tx(struct xhci_hcd *xhci, gfp_t mem_flags, int xhci_queue_bulk_tx(struct xhci_hcd *xhci, gfp_t mem_flags,
struct urb *urb, int slot_id, unsigned int ep_index) struct urb *urb, int slot_id, unsigned int ep_index)
@@ -3815,6 +3857,8 @@ int xhci_queue_bulk_tx(struct xhci_hcd * @@ -3820,6 +3862,8 @@ int xhci_queue_bulk_tx(struct xhci_hcd *
} }
check_trb_math(urb, enqd_len); check_trb_math(urb, enqd_len);
@@ -133,7 +133,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
giveback_first_trb(xhci, slot_id, ep_index, urb->stream_id, giveback_first_trb(xhci, slot_id, ep_index, urb->stream_id,
start_cycle, start_trb); start_cycle, start_trb);
return 0; return 0;
@@ -3963,6 +4007,8 @@ int xhci_queue_ctrl_tx(struct xhci_hcd * @@ -3968,6 +4012,8 @@ int xhci_queue_ctrl_tx(struct xhci_hcd *
/* Event on completion */ /* Event on completion */
field | TRB_IOC | TRB_TYPE(TRB_STATUS) | ep_ring->cycle_state); field | TRB_IOC | TRB_TYPE(TRB_STATUS) | ep_ring->cycle_state);

View File

@@ -12,7 +12,7 @@ sdhci: remove PYA0_INTR_BUG quirk. Add quirks to disable some of the higher SDR
--- a/drivers/mmc/host/sdhci-of-dwcmshc.c --- a/drivers/mmc/host/sdhci-of-dwcmshc.c
+++ b/drivers/mmc/host/sdhci-of-dwcmshc.c +++ b/drivers/mmc/host/sdhci-of-dwcmshc.c
@@ -1236,7 +1236,11 @@ static const struct dwcmshc_pltfm_data s @@ -1241,7 +1241,11 @@ static const struct dwcmshc_pltfm_data s
.quirks = SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN | .quirks = SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN |
SDHCI_QUIRK_BROKEN_TIMEOUT_VAL, SDHCI_QUIRK_BROKEN_TIMEOUT_VAL,
.quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN | .quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN |

View File

@@ -212,7 +212,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
}, },
--- a/drivers/usb/dwc3/core.c --- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c +++ b/drivers/usb/dwc3/core.c
@@ -1319,6 +1319,24 @@ static void dwc3_config_threshold(struct @@ -1320,6 +1320,24 @@ static void dwc3_config_threshold(struct
} }
} }
@@ -237,7 +237,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
/** /**
* dwc3_core_init - Low-level initialization of DWC3 Core * dwc3_core_init - Low-level initialization of DWC3 Core
* @dwc: Pointer to our controller context structure * @dwc: Pointer to our controller context structure
@@ -1386,6 +1404,8 @@ static int dwc3_core_init(struct dwc3 *d @@ -1387,6 +1405,8 @@ static int dwc3_core_init(struct dwc3 *d
dwc3_config_soc_bus(dwc); dwc3_config_soc_bus(dwc);
@@ -246,7 +246,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
ret = dwc3_phy_power_on(dwc); ret = dwc3_phy_power_on(dwc);
if (ret) if (ret)
goto err_exit_phy; goto err_exit_phy;
@@ -1490,6 +1510,24 @@ static int dwc3_core_init(struct dwc3 *d @@ -1491,6 +1511,24 @@ static int dwc3_core_init(struct dwc3 *d
dwc3_writel(dwc->regs, DWC3_LLUCTL, reg); dwc3_writel(dwc->regs, DWC3_LLUCTL, reg);
} }
@@ -271,7 +271,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
return 0; return 0;
err_power_off_phy: err_power_off_phy:
@@ -1675,6 +1713,7 @@ static void dwc3_get_properties(struct d @@ -1676,6 +1714,7 @@ static void dwc3_get_properties(struct d
u8 tx_thr_num_pkt_prd = 0; u8 tx_thr_num_pkt_prd = 0;
u8 tx_max_burst_prd = 0; u8 tx_max_burst_prd = 0;
u8 tx_fifo_resize_max_num; u8 tx_fifo_resize_max_num;
@@ -279,7 +279,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
/* default to highest possible threshold */ /* default to highest possible threshold */
lpm_nyet_threshold = 0xf; lpm_nyet_threshold = 0xf;
@@ -1695,6 +1734,9 @@ static void dwc3_get_properties(struct d @@ -1696,6 +1735,9 @@ static void dwc3_get_properties(struct d
*/ */
tx_fifo_resize_max_num = 6; tx_fifo_resize_max_num = 6;
@@ -289,7 +289,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
dwc->maximum_speed = usb_get_maximum_speed(dev); dwc->maximum_speed = usb_get_maximum_speed(dev);
dwc->max_ssp_rate = usb_get_maximum_ssp_rate(dev); dwc->max_ssp_rate = usb_get_maximum_ssp_rate(dev);
dwc->dr_mode = usb_get_dr_mode(dev); dwc->dr_mode = usb_get_dr_mode(dev);
@@ -1809,6 +1851,9 @@ static void dwc3_get_properties(struct d @@ -1810,6 +1852,9 @@ static void dwc3_get_properties(struct d
dwc->dis_split_quirk = device_property_read_bool(dev, dwc->dis_split_quirk = device_property_read_bool(dev,
"snps,dis-split-quirk"); "snps,dis-split-quirk");
@@ -299,7 +299,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
dwc->lpm_nyet_threshold = lpm_nyet_threshold; dwc->lpm_nyet_threshold = lpm_nyet_threshold;
dwc->tx_de_emphasis = tx_de_emphasis; dwc->tx_de_emphasis = tx_de_emphasis;
@@ -1826,6 +1871,8 @@ static void dwc3_get_properties(struct d @@ -1827,6 +1872,8 @@ static void dwc3_get_properties(struct d
dwc->tx_thr_num_pkt_prd = tx_thr_num_pkt_prd; dwc->tx_thr_num_pkt_prd = tx_thr_num_pkt_prd;
dwc->tx_max_burst_prd = tx_max_burst_prd; dwc->tx_max_burst_prd = tx_max_burst_prd;
@@ -308,7 +308,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
dwc->tx_fifo_resize_max_num = tx_fifo_resize_max_num; dwc->tx_fifo_resize_max_num = tx_fifo_resize_max_num;
} }
@@ -2184,6 +2231,12 @@ static int dwc3_probe(struct platform_de @@ -2185,6 +2232,12 @@ static int dwc3_probe(struct platform_de
if (IS_ERR(dwc->usb_psy)) if (IS_ERR(dwc->usb_psy))
return dev_err_probe(dev, PTR_ERR(dwc->usb_psy), "couldn't get usb power supply\n"); return dev_err_probe(dev, PTR_ERR(dwc->usb_psy), "couldn't get usb power supply\n");

View File

@@ -30,8 +30,8 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
int vendor_specific_area1; /* P_VENDOR_SPECIFIC_AREA1 reg */ int vendor_specific_area1; /* P_VENDOR_SPECIFIC_AREA1 reg */
int vendor_specific_area2; /* P_VENDOR_SPECIFIC_AREA2 reg */ int vendor_specific_area2; /* P_VENDOR_SPECIFIC_AREA2 reg */
@@ -289,6 +290,17 @@ static void dwcmshc_adma_write_desc(stru @@ -302,6 +303,17 @@ static void dwcmshc_reset(struct sdhci_h
sdhci_adma_write_desc(host, desc, addr, len, cmd); sdhci_writel(host, SDHCI_INT_RESPONSE, SDHCI_INT_STATUS);
} }
+static void dwcmshc_set_clock(struct sdhci_host *host, unsigned int clock) +static void dwcmshc_set_clock(struct sdhci_host *host, unsigned int clock)
@@ -48,7 +48,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
static unsigned int dwcmshc_get_max_clock(struct sdhci_host *host) static unsigned int dwcmshc_get_max_clock(struct sdhci_host *host)
{ {
struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
@@ -1138,10 +1150,11 @@ static int sg2042_init(struct device *de @@ -1143,10 +1155,11 @@ static int sg2042_init(struct device *de
} }
static const struct sdhci_ops sdhci_dwcmshc_ops = { static const struct sdhci_ops sdhci_dwcmshc_ops = {
@@ -58,10 +58,10 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
.set_uhs_signaling = dwcmshc_set_uhs_signaling, .set_uhs_signaling = dwcmshc_set_uhs_signaling,
.get_max_clock = dwcmshc_get_max_clock, .get_max_clock = dwcmshc_get_max_clock,
+ .get_timeout_clock = sdhci_pltfm_clk_get_timeout_clock, + .get_timeout_clock = sdhci_pltfm_clk_get_timeout_clock,
.reset = sdhci_reset, .reset = dwcmshc_reset,
.adma_write_desc = dwcmshc_adma_write_desc, .adma_write_desc = dwcmshc_adma_write_desc,
.irq = dwcmshc_cqe_irq_handler, .irq = dwcmshc_cqe_irq_handler,
@@ -1214,8 +1227,10 @@ static const struct sdhci_ops sdhci_dwcm @@ -1219,8 +1232,10 @@ static const struct sdhci_ops sdhci_dwcm
static const struct dwcmshc_pltfm_data sdhci_dwcmshc_pdata = { static const struct dwcmshc_pltfm_data sdhci_dwcmshc_pdata = {
.pdata = { .pdata = {
.ops = &sdhci_dwcmshc_ops, .ops = &sdhci_dwcmshc_ops,
@@ -74,7 +74,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
}, },
}; };
@@ -1230,6 +1245,15 @@ static const struct dwcmshc_pltfm_data s @@ -1235,6 +1250,15 @@ static const struct dwcmshc_pltfm_data s
}; };
#endif #endif
@@ -90,7 +90,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
static const struct dwcmshc_pltfm_data sdhci_dwcmshc_rk35xx_pdata = { static const struct dwcmshc_pltfm_data sdhci_dwcmshc_rk35xx_pdata = {
.pdata = { .pdata = {
.ops = &sdhci_dwcmshc_rk35xx_ops, .ops = &sdhci_dwcmshc_rk35xx_ops,
@@ -1353,6 +1377,10 @@ dsbl_cqe_caps: @@ -1358,6 +1382,10 @@ dsbl_cqe_caps:
static const struct of_device_id sdhci_dwcmshc_dt_ids[] = { static const struct of_device_id sdhci_dwcmshc_dt_ids[] = {
{ {
@@ -101,7 +101,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
.compatible = "rockchip,rk3588-dwcmshc", .compatible = "rockchip,rk3588-dwcmshc",
.data = &sdhci_dwcmshc_rk35xx_pdata, .data = &sdhci_dwcmshc_rk35xx_pdata,
}, },
@@ -1445,13 +1473,32 @@ static int dwcmshc_probe(struct platform @@ -1450,13 +1478,32 @@ static int dwcmshc_probe(struct platform
priv->bus_clk = devm_clk_get(dev, "bus"); priv->bus_clk = devm_clk_get(dev, "bus");
if (!IS_ERR(priv->bus_clk)) if (!IS_ERR(priv->bus_clk))
clk_prepare_enable(priv->bus_clk); clk_prepare_enable(priv->bus_clk);
@@ -134,7 +134,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
priv->vendor_specific_area1 = priv->vendor_specific_area1 =
sdhci_readl(host, DWCMSHC_P_VENDOR_AREA1) & DWCMSHC_AREA1_MASK; sdhci_readl(host, DWCMSHC_P_VENDOR_AREA1) & DWCMSHC_AREA1_MASK;
@@ -1511,6 +1558,7 @@ err_rpm: @@ -1516,6 +1563,7 @@ err_rpm:
pm_runtime_put_noidle(dev); pm_runtime_put_noidle(dev);
err_clk: err_clk:
clk_disable_unprepare(pltfm_host->clk); clk_disable_unprepare(pltfm_host->clk);

View File

@@ -19,7 +19,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
--- a/drivers/gpu/drm/drm_fb_helper.c --- a/drivers/gpu/drm/drm_fb_helper.c
+++ b/drivers/gpu/drm/drm_fb_helper.c +++ b/drivers/gpu/drm/drm_fb_helper.c
@@ -1803,7 +1803,7 @@ __drm_fb_helper_initial_config_and_unloc @@ -1797,7 +1797,7 @@ __drm_fb_helper_initial_config_and_unloc
struct drm_device *dev = fb_helper->dev; struct drm_device *dev = fb_helper->dev;
struct fb_info *info; struct fb_info *info;
unsigned int width, height; unsigned int width, height;
@@ -28,7 +28,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
width = dev->mode_config.max_width; width = dev->mode_config.max_width;
height = dev->mode_config.max_height; height = dev->mode_config.max_height;
@@ -1831,6 +1831,15 @@ __drm_fb_helper_initial_config_and_unloc @@ -1825,6 +1825,15 @@ __drm_fb_helper_initial_config_and_unloc
* register the fbdev emulation instance in kernel_fb_helper_list. */ * register the fbdev emulation instance in kernel_fb_helper_list. */
mutex_unlock(&fb_helper->lock); mutex_unlock(&fb_helper->lock);

View File

@@ -16,7 +16,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
--- a/drivers/usb/dwc3/core.c --- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c +++ b/drivers/usb/dwc3/core.c
@@ -1485,6 +1485,9 @@ static int dwc3_core_init(struct dwc3 *d @@ -1486,6 +1486,9 @@ static int dwc3_core_init(struct dwc3 *d
if (dwc->parkmode_disable_hs_quirk) if (dwc->parkmode_disable_hs_quirk)
reg |= DWC3_GUCTL1_PARKMODE_DISABLE_HS; reg |= DWC3_GUCTL1_PARKMODE_DISABLE_HS;
@@ -26,7 +26,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
if (DWC3_VER_IS_WITHIN(DWC3, 290A, ANY)) { if (DWC3_VER_IS_WITHIN(DWC3, 290A, ANY)) {
if (dwc->maximum_speed == USB_SPEED_FULL || if (dwc->maximum_speed == USB_SPEED_FULL ||
dwc->maximum_speed == USB_SPEED_HIGH) dwc->maximum_speed == USB_SPEED_HIGH)
@@ -1831,6 +1834,8 @@ static void dwc3_get_properties(struct d @@ -1832,6 +1835,8 @@ static void dwc3_get_properties(struct d
"snps,parkmode-disable-ss-quirk"); "snps,parkmode-disable-ss-quirk");
dwc->parkmode_disable_hs_quirk = device_property_read_bool(dev, dwc->parkmode_disable_hs_quirk = device_property_read_bool(dev,
"snps,parkmode-disable-hs-quirk"); "snps,parkmode-disable-hs-quirk");

View File

@@ -22,7 +22,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
--- a/drivers/usb/dwc3/core.c --- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c +++ b/drivers/usb/dwc3/core.c
@@ -1479,6 +1479,12 @@ static int dwc3_core_init(struct dwc3 *d @@ -1480,6 +1480,12 @@ static int dwc3_core_init(struct dwc3 *d
if (dwc->dis_tx_ipgap_linecheck_quirk) if (dwc->dis_tx_ipgap_linecheck_quirk)
reg |= DWC3_GUCTL1_TX_IPGAP_LINECHECK_DIS; reg |= DWC3_GUCTL1_TX_IPGAP_LINECHECK_DIS;
@@ -35,7 +35,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
if (dwc->parkmode_disable_ss_quirk) if (dwc->parkmode_disable_ss_quirk)
reg |= DWC3_GUCTL1_PARKMODE_DISABLE_SS; reg |= DWC3_GUCTL1_PARKMODE_DISABLE_SS;
@@ -1830,6 +1836,10 @@ static void dwc3_get_properties(struct d @@ -1831,6 +1837,10 @@ static void dwc3_get_properties(struct d
"snps,resume-hs-terminations"); "snps,resume-hs-terminations");
dwc->ulpi_ext_vbus_drv = device_property_read_bool(dev, dwc->ulpi_ext_vbus_drv = device_property_read_bool(dev,
"snps,ulpi-ext-vbus-drv"); "snps,ulpi-ext-vbus-drv");

View File

@@ -19,7 +19,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
--- a/drivers/mmc/host/sdhci-of-dwcmshc.c --- a/drivers/mmc/host/sdhci-of-dwcmshc.c
+++ b/drivers/mmc/host/sdhci-of-dwcmshc.c +++ b/drivers/mmc/host/sdhci-of-dwcmshc.c
@@ -1245,13 +1245,15 @@ static const struct dwcmshc_pltfm_data s @@ -1250,13 +1250,15 @@ static const struct dwcmshc_pltfm_data s
}; };
#endif #endif

View File

@@ -40,7 +40,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
static bool td_on_ring(struct xhci_td *td, struct xhci_ring *ring) static bool td_on_ring(struct xhci_td *td, struct xhci_ring *ring)
{ {
struct xhci_segment *seg; struct xhci_segment *seg;
@@ -4791,7 +4795,7 @@ static u16 xhci_calculate_u1_timeout(str @@ -4792,7 +4796,7 @@ static u16 xhci_calculate_u1_timeout(str
} }
} }
@@ -49,7 +49,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
timeout_ns = xhci_calculate_intel_u1_timeout(udev, desc); timeout_ns = xhci_calculate_intel_u1_timeout(udev, desc);
else else
timeout_ns = udev->u1_params.sel; timeout_ns = udev->u1_params.sel;
@@ -4855,7 +4859,7 @@ static u16 xhci_calculate_u2_timeout(str @@ -4856,7 +4860,7 @@ static u16 xhci_calculate_u2_timeout(str
} }
} }

View File

@@ -29,7 +29,7 @@ Signed-off-by: Caleb James DeLisle <cjd@cjdns.fr>
{ {
--- a/drivers/mtd/nand/mtk_bmt.c --- a/drivers/mtd/nand/mtk_bmt.c
+++ b/drivers/mtd/nand/mtk_bmt.c +++ b/drivers/mtd/nand/mtk_bmt.c
@@ -422,6 +422,8 @@ int mtk_bmt_attach(struct mtd_info *mtd) @@ -421,6 +421,8 @@ int mtk_bmt_attach(struct mtd_info *mtd)
bmtd.ops = &mtk_bmt_nmbm_ops; bmtd.ops = &mtk_bmt_nmbm_ops;
else if (of_property_read_bool(np, "mediatek,bbt")) else if (of_property_read_bool(np, "mediatek,bbt"))
bmtd.ops = &mtk_bmt_bbt_ops; bmtd.ops = &mtk_bmt_bbt_ops;

View File

@@ -8,7 +8,7 @@
static int spinand_read_reg_op(struct spinand_device *spinand, u8 reg, u8 *val) static int spinand_read_reg_op(struct spinand_device *spinand, u8 reg, u8 *val)
{ {
@@ -1575,6 +1576,7 @@ static int spinand_probe(struct spi_mem @@ -1577,6 +1578,7 @@ static int spinand_probe(struct spi_mem
if (ret) if (ret)
return ret; return ret;
@@ -16,7 +16,7 @@
ret = mtd_device_register(mtd, NULL, 0); ret = mtd_device_register(mtd, NULL, 0);
if (ret) if (ret)
goto err_spinand_cleanup; goto err_spinand_cleanup;
@@ -1582,6 +1584,7 @@ static int spinand_probe(struct spi_mem @@ -1584,6 +1586,7 @@ static int spinand_probe(struct spi_mem
return 0; return 0;
err_spinand_cleanup: err_spinand_cleanup:
@@ -24,7 +24,7 @@
spinand_cleanup(spinand); spinand_cleanup(spinand);
return ret; return ret;
@@ -1600,6 +1603,7 @@ static int spinand_remove(struct spi_mem @@ -1602,6 +1605,7 @@ static int spinand_remove(struct spi_mem
if (ret) if (ret)
return ret; return ret;

View File

@@ -1,59 +0,0 @@
From fd9862f726aedbc2f29a29916cabed7bcf5cadb6 Mon Sep 17 00:00:00 2001
From: Hang Zhou <929513338@qq.com>
Date: Mon, 17 Nov 2025 01:08:35 +1100
Subject: [PATCH] spi: bcm63xx: fix premature CS deassertion on RX-only
transactions
On BCM6358 (and also observed on BCM6368) the controller appears to
only generate as many SPI clocks as bytes that have been written into
the TX FIFO. For RX-only transfers the driver programs the transfer
length in SPI_MSG_CTL but does not write anything into the FIFO, so
chip select is deasserted early and the RX transfer segment is never
fully clocked in.
A concrete failing case is a three-transfer MAC address read from
SPI-NOR:
- TX 0x03 (read command)
- TX 3-byte address
- RX 6 bytes (MAC)
In contrast, a two-transfer JEDEC-ID read (0x9f + 6-byte RX) works
because the driver uses prepend_len and writes dummy bytes into the
TX FIFO for the RX part.
Fix this by writing 0xff dummy bytes into the TX FIFO for RX-only
segments so that the number of bytes written to the FIFO matches the
total message length seen by the controller.
Fixes: b17de076062a ("spi/bcm63xx: work around inability to keep CS up")
Signed-off-by: Hang Zhou <929513338@qq.com>
Link: https://patch.msgid.link/tencent_7AC88FCB3076489A4A7E6C2163DF1ACF8D06@qq.com
Signed-off-by: Mark Brown <broonie@kernel.org>
---
drivers/spi/spi-bcm63xx.c | 14 ++++++++++++++
1 file changed, 14 insertions(+)
--- a/drivers/spi/spi-bcm63xx.c
+++ b/drivers/spi/spi-bcm63xx.c
@@ -247,6 +247,20 @@ static int bcm63xx_txrx_bufs(struct spi_
if (t->rx_buf) {
do_rx = true;
+
+ /*
+ * In certain hardware implementations, there appears to be a
+ * hidden accumulator that tracks the number of bytes written into
+ * the hardware FIFO, and this accumulator overrides the length in
+ * the SPI_MSG_CTL register.
+ *
+ * Therefore, for read-only transfers, we need to write some dummy
+ * value into the FIFO to keep the accumulator tracking the correct
+ * length.
+ */
+ if (!t->tx_buf)
+ memset_io(bs->tx_io + len, 0xFF, t->len);
+
/* prepend is half-duplex write only */
if (t == first)
prepend_len = 0;

View File

@@ -1,2 +1,2 @@
LINUX_VERSION-6.12 = .60 LINUX_VERSION-6.12 = .62
LINUX_KERNEL_HASH-6.12.60 = a63096b2147411d683cecbf87622bb2ff4885bac2b3641d3d4f10250c89cdcf8 LINUX_KERNEL_HASH-6.12.62 = 13e2c685ac8fab5dd992dd105732554dae514aef350c2a8c7418e7b74eb62c13

View File

@@ -36,7 +36,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
--- a/MAINTAINERS --- a/MAINTAINERS
+++ b/MAINTAINERS +++ b/MAINTAINERS
@@ -23668,6 +23668,12 @@ F: Documentation/filesystems/ubifs-authe @@ -23663,6 +23663,12 @@ F: Documentation/filesystems/ubifs-authe
F: Documentation/filesystems/ubifs.rst F: Documentation/filesystems/ubifs.rst
F: fs/ubifs/ F: fs/ubifs/

View File

@@ -962,7 +962,7 @@ Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
L: linux-spi@vger.kernel.org L: linux-spi@vger.kernel.org
--- a/drivers/staging/Kconfig --- a/drivers/staging/Kconfig
+++ b/drivers/staging/Kconfig +++ b/drivers/staging/Kconfig
@@ -64,4 +64,6 @@ source "drivers/staging/fieldbus/Kconfig @@ -62,4 +62,6 @@ source "drivers/staging/fieldbus/Kconfig
source "drivers/staging/vme_user/Kconfig" source "drivers/staging/vme_user/Kconfig"
@@ -971,7 +971,7 @@ Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
endif # STAGING endif # STAGING
--- a/drivers/staging/Makefile --- a/drivers/staging/Makefile
+++ b/drivers/staging/Makefile +++ b/drivers/staging/Makefile
@@ -21,3 +21,4 @@ obj-$(CONFIG_GREYBUS) += greybus/ @@ -20,3 +20,4 @@ obj-$(CONFIG_GREYBUS) += greybus/
obj-$(CONFIG_BCM2835_VCHIQ) += vc04_services/ obj-$(CONFIG_BCM2835_VCHIQ) += vc04_services/
obj-$(CONFIG_XIL_AXIS_FIFO) += axis-fifo/ obj-$(CONFIG_XIL_AXIS_FIFO) += axis-fifo/
obj-$(CONFIG_FIELDBUS_DEV) += fieldbus/ obj-$(CONFIG_FIELDBUS_DEV) += fieldbus/

View File

@@ -8,7 +8,7 @@
static int spinand_read_reg_op(struct spinand_device *spinand, u8 reg, u8 *val) static int spinand_read_reg_op(struct spinand_device *spinand, u8 reg, u8 *val)
{ {
@@ -1575,6 +1576,7 @@ static int spinand_probe(struct spi_mem @@ -1577,6 +1578,7 @@ static int spinand_probe(struct spi_mem
if (ret) if (ret)
return ret; return ret;
@@ -16,7 +16,7 @@
ret = mtd_device_register(mtd, NULL, 0); ret = mtd_device_register(mtd, NULL, 0);
if (ret) if (ret)
goto err_spinand_cleanup; goto err_spinand_cleanup;
@@ -1582,6 +1584,7 @@ static int spinand_probe(struct spi_mem @@ -1584,6 +1586,7 @@ static int spinand_probe(struct spi_mem
return 0; return 0;
err_spinand_cleanup: err_spinand_cleanup:
@@ -24,7 +24,7 @@
spinand_cleanup(spinand); spinand_cleanup(spinand);
return ret; return ret;
@@ -1600,6 +1603,7 @@ static int spinand_remove(struct spi_mem @@ -1602,6 +1605,7 @@ static int spinand_remove(struct spi_mem
if (ret) if (ret)
return ret; return ret;

View File

@@ -11,7 +11,7 @@ Signed-off-by: SkyLake.Huang <skylake.huang@mediatek.com>
--- a/drivers/spi/spi-mem.c --- a/drivers/spi/spi-mem.c
+++ b/drivers/spi/spi-mem.c +++ b/drivers/spi/spi-mem.c
@@ -466,6 +466,14 @@ int spi_mem_exec_op(struct spi_mem *mem, @@ -486,6 +486,14 @@ int spi_mem_exec_op(struct spi_mem *mem,
} }
EXPORT_SYMBOL_GPL(spi_mem_exec_op); EXPORT_SYMBOL_GPL(spi_mem_exec_op);
@@ -28,7 +28,7 @@ Signed-off-by: SkyLake.Huang <skylake.huang@mediatek.com>
* upper layer if necessary * upper layer if necessary
--- a/include/linux/spi/spi-mem.h --- a/include/linux/spi/spi-mem.h
+++ b/include/linux/spi/spi-mem.h +++ b/include/linux/spi/spi-mem.h
@@ -372,6 +372,10 @@ bool spi_mem_supports_op(struct spi_mem @@ -390,6 +390,10 @@ bool spi_mem_supports_op(struct spi_mem
int spi_mem_exec_op(struct spi_mem *mem, int spi_mem_exec_op(struct spi_mem *mem,
const struct spi_mem_op *op); const struct spi_mem_op *op);

View File

@@ -68,7 +68,7 @@ Signed-off-by: SkyLake.Huang <skylake.huang@mediatek.com>
static int spinand_id_detect(struct spinand_device *spinand) static int spinand_id_detect(struct spinand_device *spinand)
{ {
u8 *id = spinand->id.data; u8 *id = spinand->id.data;
@@ -1452,6 +1502,10 @@ static int spinand_init(struct spinand_d @@ -1454,6 +1504,10 @@ static int spinand_init(struct spinand_d
if (!spinand->scratchbuf) if (!spinand->scratchbuf)
return -ENOMEM; return -ENOMEM;

View File

@@ -29,7 +29,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
--- a/drivers/mtd/nand/spi/core.c --- a/drivers/mtd/nand/spi/core.c
+++ b/drivers/mtd/nand/spi/core.c +++ b/drivers/mtd/nand/spi/core.c
@@ -1669,6 +1669,7 @@ static int spinand_remove(struct spi_mem @@ -1671,6 +1671,7 @@ static int spinand_remove(struct spi_mem
static const struct spi_device_id spinand_ids[] = { static const struct spi_device_id spinand_ids[] = {
{ .name = "spi-nand" }, { .name = "spi-nand" },
@@ -37,7 +37,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
{ /* sentinel */ }, { /* sentinel */ },
}; };
MODULE_DEVICE_TABLE(spi, spinand_ids); MODULE_DEVICE_TABLE(spi, spinand_ids);
@@ -1676,6 +1677,7 @@ MODULE_DEVICE_TABLE(spi, spinand_ids); @@ -1678,6 +1679,7 @@ MODULE_DEVICE_TABLE(spi, spinand_ids);
#ifdef CONFIG_OF #ifdef CONFIG_OF
static const struct of_device_id spinand_of_ids[] = { static const struct of_device_id spinand_of_ids[] = {
{ .compatible = "spi-nand" }, { .compatible = "spi-nand" },

View File

@@ -10,7 +10,7 @@ Signed-off-by: Abhimanyu Vishwakarma <Abhimanyu.Vishwakarma@imgtec.com>
--- a/drivers/spi/spi-mem.c --- a/drivers/spi/spi-mem.c
+++ b/drivers/spi/spi-mem.c +++ b/drivers/spi/spi-mem.c
@@ -893,7 +893,9 @@ static int spi_mem_probe(struct spi_devi @@ -930,7 +930,9 @@ static int spi_mem_probe(struct spi_devi
{ {
struct spi_mem_driver *memdrv = to_spi_mem_drv(spi->dev.driver); struct spi_mem_driver *memdrv = to_spi_mem_drv(spi->dev.driver);
struct spi_controller *ctlr = spi->controller; struct spi_controller *ctlr = spi->controller;
@@ -20,7 +20,7 @@ Signed-off-by: Abhimanyu Vishwakarma <Abhimanyu.Vishwakarma@imgtec.com>
mem = devm_kzalloc(&spi->dev, sizeof(*mem), GFP_KERNEL); mem = devm_kzalloc(&spi->dev, sizeof(*mem), GFP_KERNEL);
if (!mem) if (!mem)
@@ -901,10 +903,15 @@ static int spi_mem_probe(struct spi_devi @@ -938,10 +940,15 @@ static int spi_mem_probe(struct spi_devi
mem->spi = spi; mem->spi = spi;

View File

@@ -48,7 +48,7 @@ Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
int (*init)(struct device *dev, struct sdhci_host *host, struct dwcmshc_priv *dwc_priv); int (*init)(struct device *dev, struct sdhci_host *host, struct dwcmshc_priv *dwc_priv);
void (*postinit)(struct sdhci_host *host, struct dwcmshc_priv *dwc_priv); void (*postinit)(struct sdhci_host *host, struct dwcmshc_priv *dwc_priv);
}; };
@@ -603,6 +607,68 @@ static void dwcmshc_cqhci_dumpregs(struc @@ -616,6 +620,68 @@ static void dwcmshc_cqhci_dumpregs(struc
sdhci_dumpregs(mmc_priv(mmc)); sdhci_dumpregs(mmc_priv(mmc));
} }
@@ -117,7 +117,7 @@ Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
static void dwcmshc_rk3568_set_clock(struct sdhci_host *host, unsigned int clock) static void dwcmshc_rk3568_set_clock(struct sdhci_host *host, unsigned int clock)
{ {
struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
@@ -721,6 +787,10 @@ static void rk35xx_sdhci_reset(struct sd @@ -734,6 +800,10 @@ static void rk35xx_sdhci_reset(struct sd
struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
struct dwcmshc_priv *dwc_priv = sdhci_pltfm_priv(pltfm_host); struct dwcmshc_priv *dwc_priv = sdhci_pltfm_priv(pltfm_host);
struct rk35xx_priv *priv = dwc_priv->priv; struct rk35xx_priv *priv = dwc_priv->priv;
@@ -128,7 +128,7 @@ Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
if (mask & SDHCI_RESET_ALL && priv->reset) { if (mask & SDHCI_RESET_ALL && priv->reset) {
reset_control_assert(priv->reset); reset_control_assert(priv->reset);
@@ -729,6 +799,9 @@ static void rk35xx_sdhci_reset(struct sd @@ -742,6 +812,9 @@ static void rk35xx_sdhci_reset(struct sd
} }
sdhci_reset(host, mask); sdhci_reset(host, mask);
@@ -138,7 +138,7 @@ Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
} }
static int dwcmshc_rk35xx_init(struct device *dev, struct sdhci_host *host, static int dwcmshc_rk35xx_init(struct device *dev, struct sdhci_host *host,
@@ -1230,6 +1303,15 @@ static const struct dwcmshc_pltfm_data s @@ -1235,6 +1308,15 @@ static const struct dwcmshc_pltfm_data s
}; };
#endif #endif
@@ -154,7 +154,7 @@ Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
static const struct dwcmshc_pltfm_data sdhci_dwcmshc_rk35xx_pdata = { static const struct dwcmshc_pltfm_data sdhci_dwcmshc_rk35xx_pdata = {
.pdata = { .pdata = {
.ops = &sdhci_dwcmshc_rk35xx_ops, .ops = &sdhci_dwcmshc_rk35xx_ops,
@@ -1238,6 +1320,7 @@ static const struct dwcmshc_pltfm_data s @@ -1243,6 +1325,7 @@ static const struct dwcmshc_pltfm_data s
.quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN | .quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN |
SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN, SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN,
}, },
@@ -162,7 +162,7 @@ Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
.init = dwcmshc_rk35xx_init, .init = dwcmshc_rk35xx_init,
.postinit = dwcmshc_rk35xx_postinit, .postinit = dwcmshc_rk35xx_postinit,
}; };
@@ -1287,7 +1370,8 @@ static const struct cqhci_host_ops dwcms @@ -1292,7 +1375,8 @@ static const struct cqhci_host_ops dwcms
.set_tran_desc = dwcmshc_set_tran_desc, .set_tran_desc = dwcmshc_set_tran_desc,
}; };
@@ -172,7 +172,7 @@ Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
{ {
struct cqhci_host *cq_host; struct cqhci_host *cq_host;
struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
@@ -1317,7 +1401,10 @@ static void dwcmshc_cqhci_init(struct sd @@ -1322,7 +1406,10 @@ static void dwcmshc_cqhci_init(struct sd
} }
cq_host->mmio = host->ioaddr + priv->vendor_specific_area2; cq_host->mmio = host->ioaddr + priv->vendor_specific_area2;
@@ -184,7 +184,7 @@ Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
/* Enable using of 128-bit task descriptors */ /* Enable using of 128-bit task descriptors */
dma64 = host->flags & SDHCI_USE_64_BIT_DMA; dma64 = host->flags & SDHCI_USE_64_BIT_DMA;
@@ -1486,7 +1573,7 @@ static int dwcmshc_probe(struct platform @@ -1491,7 +1578,7 @@ static int dwcmshc_probe(struct platform
priv->vendor_specific_area2 = priv->vendor_specific_area2 =
sdhci_readw(host, DWCMSHC_P_VENDOR_AREA2); sdhci_readw(host, DWCMSHC_P_VENDOR_AREA2);

View File

@@ -45,7 +45,7 @@ Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
--- a/drivers/mmc/host/sdhci-of-dwcmshc.c --- a/drivers/mmc/host/sdhci-of-dwcmshc.c
+++ b/drivers/mmc/host/sdhci-of-dwcmshc.c +++ b/drivers/mmc/host/sdhci-of-dwcmshc.c
@@ -1333,6 +1333,7 @@ static const struct dwcmshc_pltfm_data s @@ -1338,6 +1338,7 @@ static const struct dwcmshc_pltfm_data s
.quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN | .quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN |
SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN, SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN,
}, },

View File

@@ -27,7 +27,7 @@ Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
--- a/drivers/mmc/host/sdhci-of-dwcmshc.c --- a/drivers/mmc/host/sdhci-of-dwcmshc.c
+++ b/drivers/mmc/host/sdhci-of-dwcmshc.c +++ b/drivers/mmc/host/sdhci-of-dwcmshc.c
@@ -696,10 +696,11 @@ static void dwcmshc_rk3568_set_clock(str @@ -709,10 +709,11 @@ static void dwcmshc_rk3568_set_clock(str
sdhci_set_clock(host, clock); sdhci_set_clock(host, clock);

View File

@@ -30,7 +30,7 @@ Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
#define CQHCI_SSC2 0x44 #define CQHCI_SSC2 0x44
--- a/drivers/mmc/host/sdhci-of-dwcmshc.c --- a/drivers/mmc/host/sdhci-of-dwcmshc.c
+++ b/drivers/mmc/host/sdhci-of-dwcmshc.c +++ b/drivers/mmc/host/sdhci-of-dwcmshc.c
@@ -614,6 +614,11 @@ static void rk35xx_sdhci_cqe_pre_enable( @@ -627,6 +627,11 @@ static void rk35xx_sdhci_cqe_pre_enable(
struct dwcmshc_priv *dwc_priv = sdhci_pltfm_priv(pltfm_host); struct dwcmshc_priv *dwc_priv = sdhci_pltfm_priv(pltfm_host);
u32 reg; u32 reg;

View File

@@ -18,7 +18,7 @@ Signed-off-by: Chuanhong Guo <gch981213@gmail.com>
--- a/drivers/spi/spi-mem.c --- a/drivers/spi/spi-mem.c
+++ b/drivers/spi/spi-mem.c +++ b/drivers/spi/spi-mem.c
@@ -368,13 +368,19 @@ int spi_mem_exec_op(struct spi_mem *mem, @@ -384,13 +384,19 @@ int spi_mem_exec_op(struct spi_mem *mem,
if (!spi_mem_internal_supports_op(mem, op)) if (!spi_mem_internal_supports_op(mem, op))
return -EOPNOTSUPP; return -EOPNOTSUPP;

View File

@@ -20,7 +20,7 @@ Signed-off-by: Emil Renner Berthing <kernel@esmil.dk>
--- a/MAINTAINERS --- a/MAINTAINERS
+++ b/MAINTAINERS +++ b/MAINTAINERS
@@ -22070,7 +22070,7 @@ STARFIVE JH71X0 RESET CONTROLLER DRIVERS @@ -22065,7 +22065,7 @@ STARFIVE JH71X0 RESET CONTROLLER DRIVERS
M: Emil Renner Berthing <kernel@esmil.dk> M: Emil Renner Berthing <kernel@esmil.dk>
M: Hal Feng <hal.feng@starfivetech.com> M: Hal Feng <hal.feng@starfivetech.com>
S: Maintained S: Maintained