|
|
@@ -1,8 +1,8 @@
|
|
|
-From 0299de52cbb2274345e12518298a8014adb56411 Mon Sep 17 00:00:00 2001
|
|
|
+From 86f88e604305186aec1fb6eebbf8f0a42c2435d3 Mon Sep 17 00:00:00 2001
|
|
|
From: Mikhail Kshevetskiy <[email protected]>
|
|
|
Date: Thu, 9 Oct 2025 19:33:23 +0300
|
|
|
-Subject: [PATCH 2/2] spi: airoha-snfi: en7523: workaround flash damaging if
|
|
|
- UART_TXD was short to GND
|
|
|
+Subject: [PATCH] spi: airoha-snfi: en7523: workaround flash damaging
|
|
|
+ if UART_TXD was short to GND
|
|
|
|
|
|
We found that some serial console may pull TX line to GROUND during board
|
|
|
boot time. Airoha uses TX line as one of it's BOOT pins. This will lead
|
|
|
@@ -27,8 +27,8 @@ fat warning.
|
|
|
|
|
|
Signed-off-by: Mikhail Kshevetskiy <[email protected]>
|
|
|
---
|
|
|
- drivers/spi/spi-airoha-snfi.c | 38 ++++++++++++++++++++++++++++++++---
|
|
|
- 1 file changed, 35 insertions(+), 3 deletions(-)
|
|
|
+ drivers/spi/spi-airoha-snfi.c | 40 ++++++++++++++++++++++++++++++-----
|
|
|
+ 1 file changed, 35 insertions(+), 5 deletions(-)
|
|
|
|
|
|
--- a/drivers/spi/spi-airoha-snfi.c
|
|
|
+++ b/drivers/spi/spi-airoha-snfi.c
|
|
|
@@ -44,49 +44,49 @@ Signed-off-by: Mikhail Kshevetskiy <[email protected]>
|
|
|
static int airoha_snand_setup(struct spi_device *spi)
|
|
|
{
|
|
|
struct airoha_snand_ctrl *as_ctrl;
|
|
|
-@@ -1059,7 +1064,10 @@ static int airoha_snand_probe(struct pla
|
|
|
+@@ -1058,7 +1063,8 @@ static int airoha_snand_probe(struct pla
|
|
|
struct device *dev = &pdev->dev;
|
|
|
struct spi_controller *ctrl;
|
|
|
void __iomem *base;
|
|
|
- int err;
|
|
|
+ int err, dma_enabled;
|
|
|
-+#if defined(CONFIG_ARM)
|
|
|
+ u32 sfc_strap;
|
|
|
-+#endif
|
|
|
|
|
|
ctrl = devm_spi_alloc_host(dev, sizeof(*as_ctrl));
|
|
|
if (!ctrl)
|
|
|
-@@ -1093,12 +1101,36 @@ static int airoha_snand_probe(struct pla
|
|
|
+@@ -1092,12 +1098,36 @@ static int airoha_snand_probe(struct pla
|
|
|
return dev_err_probe(dev, PTR_ERR(as_ctrl->spi_clk),
|
|
|
"unable to get spi clk\n");
|
|
|
|
|
|
- err = dma_set_mask(as_ctrl->dev, DMA_BIT_MASK(32));
|
|
|
+- if (err)
|
|
|
+- return err;
|
|
|
+ dma_enabled = 1;
|
|
|
-+#if defined(CONFIG_ARM)
|
|
|
-+ err = regmap_read(as_ctrl->regmap_ctrl,
|
|
|
-+ REG_SPI_CTRL_SFC_STRAP, &sfc_strap);
|
|
|
- if (err)
|
|
|
- return err;
|
|
|
-
|
|
|
-+ if (!(sfc_strap & 0x04)) {
|
|
|
-+ dma_enabled = 0;
|
|
|
-+ printk(KERN_WARNING "\n"
|
|
|
-+ "=== WARNING ======================================================\n"
|
|
|
-+ "Detected booting in RESERVED mode (UART_TXD was short to GND).\n"
|
|
|
-+ "This mode is known for incorrect DMA reading of some flashes.\n"
|
|
|
-+ "Usage of DMA for flash operations will be disabled to prevent data\n"
|
|
|
-+ "damage. Unplug your serial console and power cycle the board\n"
|
|
|
-+ "to boot with full performance.\n"
|
|
|
-+ "==================================================================\n\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_enabled = 0;
|
|
|
++ printk(KERN_WARNING "\n"
|
|
|
++ "=== WARNING ======================================================\n"
|
|
|
++ "Detected booting in RESERVED mode (UART_TXD was short to GND).\n"
|
|
|
++ "This mode is known for incorrect DMA reading of some flashes.\n"
|
|
|
++ "Usage of DMA for flash operations will be disabled to prevent data\n"
|
|
|
++ "damage. Unplug your serial console and power cycle the board\n"
|
|
|
++ "to boot with full performance.\n"
|
|
|
++ "==================================================================\n\n");
|
|
|
++ }
|
|
|
+ }
|
|
|
-+#endif
|
|
|
+
|
|
|
+ if (dma_enabled) {
|
|
|
+ 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_enabled ?
|