.supports_op = airoha_snand_supports_op,
.exec_op = airoha_snand_exec_op,
.dirmap_create = airoha_snand_dirmap_create,
-@@ -1101,36 +1026,6 @@ static int airoha_snand_setup(struct spi
+@@ -1106,36 +1031,6 @@ static int airoha_snand_setup(struct spi
return 0;
}
static const struct regmap_config spi_ctrl_regmap_config = {
.name = "ctrl",
.reg_bits = 32,
-@@ -1204,7 +1099,7 @@ static int airoha_snand_probe(struct pla
+@@ -1227,7 +1122,7 @@ static int airoha_snand_probe(struct pla
ctrl->setup = airoha_snand_setup;
device_set_node(&ctrl->dev, dev_fwnode(dev));
+++ /dev/null
-From 061795b345aff371df8f71d54ae7c7dc8ae630d0 Mon Sep 17 00:00:00 2001
-From: Mikhail Kshevetskiy <mikhail.kshevetskiy@iopsys.eu>
-Date: Wed, 26 Nov 2025 02:40:45 +0300
-Subject: [PATCH 14/14] spi: airoha-snfi: en7523: workaround flash damaging if
- UART_TXD was short to GND
-
-Airoha EN7523 specific bug
---------------------------
-We found that some serial console may pull TX line to GROUND during board
-boot time. Airoha uses TX line as one of its bootstrap pins. On the EN7523
-SoC this may lead to booting in RESERVED boot mode.
-
-It was found that some flashes operates incorrectly in RESERVED mode.
-Micron and Skyhigh flashes are definitely affected by the issue,
-Winbond flashes are not affected.
-
-Details:
---------
-DMA reading of odd pages on affected flashes operates incorrectly. Page
-reading offset (start of the page) on hardware level is replaced by 0x10.
-Thus results in incorrect data reading. As result OS loading becomes
-impossible.
-
-Usage of UBI make things even worse. On attaching, UBI will detects
-corruptions (because of wrong reading of odd pages) and will try to
-recover. For recovering UBI will erase and write 'damaged' blocks with
-a valid information. This will destroy all UBI data.
-
-Non-DMA reading is OK.
-
-This patch detects booting in reserved mode, turn off DMA and print big
-fat warning.
-
-It's worth noting that the boot configuration is preserved across reboots.
-Therefore, to boot normally, you should do the following:
-- disconnect the serial console from the board,
-- power cycle the board.
-
-Fixes: a403997c12019 ("spi: airoha: add SPI-NAND Flash controller driver")
-Signed-off-by: Mikhail Kshevetskiy <mikhail.kshevetskiy@iopsys.eu>
-Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
-Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
-Link: https://patch.msgid.link/20251125234047.1101985-2-mikhail.kshevetskiy@iopsys.eu
-Signed-off-by: Mark Brown <broonie@kernel.org>
----
- drivers/spi/spi-airoha-snfi.c | 25 ++++++++++++++++++++++++-
- 1 file changed, 24 insertions(+), 1 deletion(-)
-
---- a/drivers/spi/spi-airoha-snfi.c
-+++ b/drivers/spi/spi-airoha-snfi.c
-@@ -1013,6 +1013,11 @@ static const struct spi_controller_mem_o
- .dirmap_write = airoha_snand_dirmap_write,
- };
-
-+static const struct spi_controller_mem_ops airoha_snand_nodma_mem_ops = {
-+ .supports_op = airoha_snand_supports_op,
-+ .exec_op = airoha_snand_exec_op,
-+};
-+
- static int airoha_snand_setup(struct spi_device *spi)
- {
- struct airoha_snand_ctrl *as_ctrl;
-@@ -1057,7 +1062,9 @@ static int airoha_snand_probe(struct pla
- struct airoha_snand_ctrl *as_ctrl;
- struct device *dev = &pdev->dev;
- struct spi_controller *ctrl;
-+ bool dma_enable = true;
- void __iomem *base;
-+ u32 sfc_strap;
- int err;
-
- ctrl = devm_spi_alloc_host(dev, sizeof(*as_ctrl));
-@@ -1092,12 +1099,28 @@ static int airoha_snand_probe(struct pla
- return dev_err_probe(dev, PTR_ERR(as_ctrl->spi_clk),
- "unable to get spi clk\n");
-
-+ if (device_is_compatible(dev, "airoha,en7523-snand")) {
-+ err = regmap_read(as_ctrl->regmap_ctrl,
-+ REG_SPI_CTRL_SFC_STRAP, &sfc_strap);
-+ if (err)
-+ return err;
-+
-+ if (!(sfc_strap & 0x04)) {
-+ dma_enable = false;
-+ dev_warn(dev, "Detected booting in RESERVED mode (UART_TXD was short to GND).\n");
-+ dev_warn(dev, "This mode is known for incorrect DMA reading of some flashes.\n");
-+ dev_warn(dev, "Much slower PIO mode will be used to prevent flash data damage.\n");
-+ dev_warn(dev, "Unplug UART cable and power cycle board to get full performance.\n");
-+ }
-+ }
-+
- err = dma_set_mask(as_ctrl->dev, DMA_BIT_MASK(32));
- if (err)
- return err;
-
- ctrl->num_chipselect = 2;
-- ctrl->mem_ops = &airoha_snand_mem_ops;
-+ ctrl->mem_ops = dma_enable ? &airoha_snand_mem_ops
-+ : &airoha_snand_nodma_mem_ops;
- ctrl->bits_per_word_mask = SPI_BPW_MASK(8);
- ctrl->mode_bits = SPI_RX_DUAL;
- ctrl->setup = airoha_snand_setup;
imply SND_SOC_MAX98088
imply SND_SOC_MAX98090
imply SND_SOC_MAX98095
-@@ -175,6 +177,7 @@ config SND_SOC_ALL_CODECS
+@@ -176,6 +178,7 @@ config SND_SOC_ALL_CODECS
imply SND_SOC_PCM179X_SPI
imply SND_SOC_PCM186X_I2C
imply SND_SOC_PCM186X_SPI
imply SND_SOC_PCM3008
imply SND_SOC_PCM3060_I2C
imply SND_SOC_PCM3060_SPI
-@@ -267,6 +270,7 @@ config SND_SOC_ALL_CODECS
+@@ -268,6 +271,7 @@ config SND_SOC_ALL_CODECS
imply SND_SOC_TLV320ADCX140
imply SND_SOC_TLV320AIC23_I2C
imply SND_SOC_TLV320AIC23_SPI
imply SND_SOC_TLV320AIC26
imply SND_SOC_TLV320AIC31XX
imply SND_SOC_TLV320AIC32X4_I2C
-@@ -424,12 +428,12 @@ config SND_SOC_AD193X
+@@ -425,12 +429,12 @@ config SND_SOC_AD193X
tristate
config SND_SOC_AD193X_SPI
depends on I2C
select SND_SOC_AD193X
-@@ -1229,6 +1233,13 @@ config SND_SOC_LOCHNAGAR_SC
+@@ -1230,6 +1234,13 @@ config SND_SOC_LOCHNAGAR_SC
This driver support the sound card functionality of the Cirrus
Logic Lochnagar audio development board.
config SND_SOC_MADERA
tristate
default y if SND_SOC_CS47L15=y
-@@ -1638,6 +1649,10 @@ config SND_SOC_RT5616
+@@ -1639,6 +1650,10 @@ config SND_SOC_RT5616
tristate "Realtek RT5616 CODEC"
depends on I2C
config SND_SOC_RT5631
tristate "Realtek ALC5631/RT5631 CODEC"
depends on I2C
-@@ -1995,6 +2010,9 @@ config SND_SOC_TFA9879
+@@ -1996,6 +2011,9 @@ config SND_SOC_TFA9879
tristate "NXP Semiconductors TFA9879 amplifier"
depends on I2C
config SND_SOC_TFA989X
tristate "NXP/Goodix TFA989X (TFA1) amplifiers"
depends on I2C
-@@ -2596,4 +2614,8 @@ config SND_SOC_LPASS_TX_MACRO
+@@ -2601,4 +2619,8 @@ config SND_SOC_LPASS_TX_MACRO
select SND_SOC_LPASS_MACRO_COMMON
tristate "Qualcomm TX Macro in LPASS(Low Power Audio SubSystem)"
endmenu
--- a/sound/soc/codecs/Makefile
+++ b/sound/soc/codecs/Makefile
-@@ -820,3 +820,12 @@ obj-$(CONFIG_SND_SOC_LPASS_TX_MACRO) +=
+@@ -822,3 +822,12 @@ obj-$(CONFIG_SND_SOC_LPASS_TX_MACRO) +=
# Mux
obj-$(CONFIG_SND_SOC_SIMPLE_MUX) += snd-soc-simple-mux.o
--- a/drivers/usb/dwc3/host.c
+++ b/drivers/usb/dwc3/host.c
-@@ -126,10 +126,12 @@ out:
+@@ -129,10 +129,12 @@ out:
int dwc3_host_init(struct dwc3 *dwc)
{
/*
* Some platforms need to power off all Root hub ports immediately after DWC3 set to host
-@@ -141,7 +143,12 @@ int dwc3_host_init(struct dwc3 *dwc)
+@@ -144,7 +146,12 @@ int dwc3_host_init(struct dwc3 *dwc)
if (irq < 0)
return irq;
/* L2 intc private data structure */
struct brcmstb_l2_intc_data {
struct irq_domain *domain;
-@@ -299,11 +309,18 @@ static int __init brcmstb_l2_lvl_intc_of
+@@ -295,11 +305,18 @@ static int brcmstb_l2_lvl_intc_of_init(s
return brcmstb_l2_intc_of_init(np, parent, &l2_lvl_intc_init);
}
--- a/net/ipv4/inet_timewait_sock.c
+++ b/net/ipv4/inet_timewait_sock.c
-@@ -296,7 +296,7 @@ void __inet_twsk_schedule(struct inet_ti
+@@ -285,7 +285,7 @@ void __inet_twsk_schedule(struct inet_ti
*/
if (!rearm) {
-LINUX_VERSION-6.12 = .62
-LINUX_KERNEL_HASH-6.12.62 = 13e2c685ac8fab5dd992dd105732554dae514aef350c2a8c7418e7b74eb62c13
+LINUX_VERSION-6.12 = .63
+LINUX_KERNEL_HASH-6.12.63 = 9502c5ffe4b894383c97abfccf74430a84732f04ee476b9c0d87635b29df7db3
}
--- a/net/netfilter/nft_flow_offload.c
+++ b/net/netfilter/nft_flow_offload.c
-@@ -487,47 +487,14 @@ static struct nft_expr_type nft_flow_off
+@@ -494,47 +494,14 @@ static struct nft_expr_type nft_flow_off
.owner = THIS_MODULE,
};
@@ -86,6 +87,9 @@
#define TCSR_WCSS_CLK_ENABLE 0x14
- #define MAX_HALT_REG 3
+ #define MAX_HALT_REG 4
+
+#define WCNSS_PAS_ID 6
+
--- a/drivers/remoteproc/qcom_q6v5_wcss.c
+++ b/drivers/remoteproc/qcom_q6v5_wcss.c
-@@ -86,7 +86,7 @@
- #define TCSR_WCSS_CLK_MASK 0x1F
- #define TCSR_WCSS_CLK_ENABLE 0x14
-
--#define MAX_HALT_REG 3
-+#define MAX_HALT_REG 4
-
- #define WCNSS_PAS_ID 6
-
@@ -155,6 +155,7 @@ struct wcss_data {
u32 version;
bool aon_reset_required;
}
return 0;
-@@ -929,9 +933,9 @@ static int q6v5_wcss_init_mmio(struct q6
- return -EINVAL;
- }
-
-- wcss->halt_q6 = halt_reg[0];
-- wcss->halt_wcss = halt_reg[1];
-- wcss->halt_nc = halt_reg[2];
-+ wcss->halt_q6 = halt_reg[1];
-+ wcss->halt_wcss = halt_reg[2];
-+ wcss->halt_nc = halt_reg[3];
-
- return 0;
- }
@@ -1173,6 +1177,7 @@ static const struct wcss_data wcss_ipq80
.crash_reason_smem = WCSS_CRASH_REASON,
.aon_reset_required = true,
--- a/drivers/usb/dwc2/platform.c
+++ b/drivers/usb/dwc2/platform.c
-@@ -481,6 +481,12 @@ static int dwc2_driver_probe(struct plat
+@@ -484,6 +484,12 @@ static int dwc2_driver_probe(struct plat
if (retval)
return retval;
source "drivers/clk/rockchip/Kconfig"
--- a/drivers/clk/Makefile
+++ b/drivers/clk/Makefile
-@@ -123,6 +123,7 @@ obj-$(CONFIG_COMMON_CLK_PISTACHIO) += pi
+@@ -122,6 +122,7 @@ obj-$(CONFIG_COMMON_CLK_PISTACHIO) += pi
obj-$(CONFIG_COMMON_CLK_PXA) += pxa/
obj-$(CONFIG_COMMON_CLK_QCOM) += qcom/
obj-y += ralink/
};
--- a/arch/arm64/boot/dts/rockchip/rk3588s-rock-5a.dts
+++ b/arch/arm64/boot/dts/rockchip/rk3588s-rock-5a.dts
-@@ -310,7 +310,7 @@
+@@ -311,7 +311,7 @@
};
&pcie2x1l2 {
pinctrl-names = "default";
reset-gpios = <&gpio3 RK_PD1 GPIO_ACTIVE_HIGH>;
vpcie3v3-supply = <&vcc3v3_wf>;
-@@ -328,6 +328,10 @@
+@@ -329,6 +329,10 @@
pow_en: pow-en {
rockchip,pins = <0 RK_PC5 RK_FUNC_GPIO &pcfg_pull_none>;
};
leds {
compatible = "gpio-leds";
pinctrl-names = "default";
-@@ -301,6 +313,31 @@
+@@ -302,6 +314,31 @@
status = "okay";
};
&mdio1 {
rgmii_phy1: ethernet-phy@1 {
/* RTL8211F */
-@@ -793,3 +830,18 @@
+@@ -794,3 +831,18 @@
&usb_host2_xhci {
status = "okay";
};
--- a/arch/arm64/boot/dts/rockchip/rk3588s-rock-5a.dts
+++ b/arch/arm64/boot/dts/rockchip/rk3588s-rock-5a.dts
-@@ -334,7 +334,7 @@
+@@ -335,7 +335,7 @@
};
};
--- a/arch/arm64/boot/dts/rockchip/rk3588s-rock-5a.dts
+++ b/arch/arm64/boot/dts/rockchip/rk3588s-rock-5a.dts
-@@ -359,6 +359,10 @@
+@@ -360,6 +360,10 @@
status = "okay";
};
};
};
-@@ -365,8 +375,9 @@
+@@ -366,8 +376,9 @@
&pinctrl {
leds {
source "drivers/clk/sprd/Kconfig"
--- a/drivers/clk/Makefile
+++ b/drivers/clk/Makefile
-@@ -127,6 +127,7 @@ obj-y += renesas/
+@@ -126,6 +126,7 @@ obj-y += renesas/
obj-$(CONFIG_ARCH_ROCKCHIP) += rockchip/
obj-$(CONFIG_COMMON_CLK_SAMSUNG) += samsung/
obj-$(CONFIG_CLK_SIFIVE) += sifive/