Skip to content

Commit 522599a

Browse files
committed
uboot: fix cn9132-cex7 spi flash access, shrink size, fix sd-cd
1 parent 62b7b58 commit 522599a

File tree

3 files changed

+146
-0
lines changed

3 files changed

+146
-0
lines changed

configs/u-boot/cn913x_additions.config

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,12 @@ CONFIG_CMD_WDT=y
2525
# CONFIG_CMD_NAND is not set
2626
# CONFIG_MTD_RAW_NAND is not set
2727
# CONFIG_NAND_PXA3XX is not set
28+
# CONFIG_CMD_EXT4_WRITE is not set
29+
# CONFIG_EXT4_WRITE is not set
30+
# CONFIG_SPI_FLASH_MACRONIX is not set
31+
# CONFIG_SPI_FLASH_SPANSION is not set
32+
# CONFIG_SPI_FLASH_STMICRO is not set
33+
# CONFIG_SPI_FLASH_SST is not set
34+
CONFIG_SPI_FLASH_WINBOND=y
35+
# CONFIG_ENV_SPI_MAX_HZ is not set
36+
# CONFIG_MMC_BROKEN_CD is not set
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
From a89f6202fb0cdca043a7864cdc469b7ffd63b825 Mon Sep 17 00:00:00 2001
2+
From: Josua Mayer <josua@solid-run.com>
3+
Date: Thu, 11 Sep 2025 15:25:47 +0200
4+
Subject: [PATCH 23/24] spi: kirkwood: add quirk for cn9132 cex7: miso sample
5+
delay
6+
7+
Set miso sample delay to 3 core-clk cycles to avoid bit errros that are
8+
consistent with 1 cycle delay and sporadic with 2 cycles.
9+
At 3 cycles access is stable.
10+
11+
Signed-off-by: Josua Mayer <josua@solid-run.com>
12+
---
13+
arch/arm/include/asm/arch-mvebu/spi.h | 1 +
14+
drivers/spi/kirkwood_spi.c | 43 ++++++++++++++++++++++-----
15+
2 files changed, 36 insertions(+), 8 deletions(-)
16+
17+
diff --git a/arch/arm/include/asm/arch-mvebu/spi.h b/arch/arm/include/asm/arch-mvebu/spi.h
18+
index 58b6c32c4d..7bfee7343e 100644
19+
--- a/arch/arm/include/asm/arch-mvebu/spi.h
20+
+++ b/arch/arm/include/asm/arch-mvebu/spi.h
21+
@@ -50,6 +50,7 @@ struct kwspi_registers {
22+
#define KW_SPI_TMISO_SAMPLE_MASK (0x3 << KW_SPI_TMISO_SAMPLE_OFFSET)
23+
#define KW_SPI_TMISO_SAMPLE_1 (1 << KW_SPI_TMISO_SAMPLE_OFFSET)
24+
#define KW_SPI_TMISO_SAMPLE_2 (2 << KW_SPI_TMISO_SAMPLE_OFFSET)
25+
+#define KW_SPI_TMISO_SAMPLE_3 (3 << KW_SPI_TMISO_SAMPLE_OFFSET)
26+
27+
#define KWSPI_IRQUNMASK 1 /* unmask SPI interrupt */
28+
#define KWSPI_IRQMASK 0 /* mask SPI interrupt */
29+
diff --git a/drivers/spi/kirkwood_spi.c b/drivers/spi/kirkwood_spi.c
30+
index bc5da0a1e6..3fb9dde34e 100644
31+
--- a/drivers/spi/kirkwood_spi.c
32+
+++ b/drivers/spi/kirkwood_spi.c
33+
@@ -182,12 +182,39 @@ static int mvebu_spi_set_speed(struct udevice *bus, uint hz)
34+
return 0;
35+
}
36+
37+
-static void mvebu_spi_50mhz_ac_timing_erratum(struct udevice *bus, uint mode)
38+
+/* configure extra miso sample delay */
39+
+static int mvebu_spi_set_miso_sample_delay(struct udevice *bus, const uint8_t cycles)
40+
{
41+
struct mvebu_spi_plat *plat = dev_get_plat(bus);
42+
struct kwspi_registers *reg = plat->spireg;
43+
u32 data;
44+
45+
+ data = readl(&reg->timing1);
46+
+ data &= ~KW_SPI_TMISO_SAMPLE_MASK;
47+
+
48+
+ switch (cycles) {
49+
+ case 0:
50+
+ break;
51+
+ case 1:
52+
+ data |= KW_SPI_TMISO_SAMPLE_1;
53+
+ break;
54+
+ case 2:
55+
+ data |= KW_SPI_TMISO_SAMPLE_2;
56+
+ break;
57+
+ case 3:
58+
+ data |= KW_SPI_TMISO_SAMPLE_3;
59+
+ break;
60+
+ default:
61+
+ return -EINVAL;
62+
+ }
63+
+
64+
+ writel(data, &reg->timing1);
65+
+
66+
+ return 0;
67+
+}
68+
+
69+
+static void mvebu_spi_50mhz_ac_timing_erratum(struct udevice *bus, uint mode)
70+
+{
71+
/*
72+
* Erratum description: (Erratum NO. FE-9144572) The device
73+
* SPI interface supports frequencies of up to 50 MHz.
74+
@@ -202,17 +229,12 @@ static void mvebu_spi_50mhz_ac_timing_erratum(struct udevice *bus, uint mode)
75+
* 2. Set TMISO_SAMPLE value to 0x2 in "SPI Timing Parameters 1
76+
* Register" before setting the interface.
77+
*/
78+
- data = readl(&reg->timing1);
79+
- data &= ~KW_SPI_TMISO_SAMPLE_MASK;
80+
-
81+
if (CONFIG_SYS_TCLK == 250000000 &&
82+
mode & SPI_CPOL &&
83+
mode & SPI_CPHA)
84+
- data |= KW_SPI_TMISO_SAMPLE_2;
85+
+ mvebu_spi_set_miso_sample_delay(bus, 2);
86+
else
87+
- data |= KW_SPI_TMISO_SAMPLE_1;
88+
-
89+
- writel(data, &reg->timing1);
90+
+ mvebu_spi_set_miso_sample_delay(bus, 1);
91+
}
92+
93+
static int mvebu_spi_set_mode(struct udevice *bus, uint mode)
94+
@@ -235,6 +257,11 @@ static int mvebu_spi_set_mode(struct udevice *bus, uint mode)
95+
if (plat->is_errata_50mhz_ac)
96+
mvebu_spi_50mhz_ac_timing_erratum(bus, mode);
97+
98+
+ /* CN9132 CEX-7 requires 3 cycles delay before sampling miso to avoid bit errors */
99+
+ if (of_machine_is_compatible("solidrun,cn9132-sr-cex7") &&
100+
+ ofnode_to_offset(dev_ofnode(bus)) == ofnode_to_offset(ofnode_path("/cp0/config-space/spi@700680")))
101+
+ mvebu_spi_set_miso_sample_delay(bus, 3);
102+
+
103+
return 0;
104+
}
105+
106+
--
107+
2.51.0
108+
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
From c8d8fc41fc4c3c2f2f2dc9efbdbf723fcbe6e896 Mon Sep 17 00:00:00 2001
2+
From: Josua Mayer <josua@solid-run.com>
3+
Date: Thu, 11 Sep 2025 15:31:54 +0200
4+
Subject: [PATCH 24/24] arch: arm: dts: cn9130-sr-cex7: enable fast-read for
5+
spi flash
6+
7+
The spi flash on cex7 module supports fast read command, enable in
8+
device-tree.
9+
10+
Signed-off-by: Josua Mayer <josua@solid-run.com>
11+
---
12+
arch/arm/dts/cn9132-sr-cex7.dtsi | 1 +
13+
1 file changed, 1 insertion(+)
14+
15+
diff --git a/arch/arm/dts/cn9132-sr-cex7.dtsi b/arch/arm/dts/cn9132-sr-cex7.dtsi
16+
index c4723bb96a..c0c3083e86 100644
17+
--- a/arch/arm/dts/cn9132-sr-cex7.dtsi
18+
+++ b/arch/arm/dts/cn9132-sr-cex7.dtsi
19+
@@ -254,6 +254,7 @@
20+
reg = <0>;
21+
/* read command supports max. 50MHz */
22+
spi-max-frequency = <50000000>;
23+
+ m25p,fast-read;
24+
};
25+
};
26+
27+
--
28+
2.51.0
29+

0 commit comments

Comments
 (0)