Skip to content

Commit cfab449

Browse files
dangowrtdzzinstant
authored andcommitted
arm-trusted-firmware-mediatek: import patchset for Fidelix flash on SNFI
Import pending patches to set pinconf settings for SPI-NAND pins on MT7622 identical to what the old proprietary preloader did. Should further increase the reliability of some SNFI-attached SPI-NAND flash chips. Link: mtk-openwrt/arm-trusted-firmware#7 Signed-off-by: Daniel Golle <[email protected]>
1 parent 2c73c66 commit cfab449

File tree

4 files changed

+258
-1
lines changed

4 files changed

+258
-1
lines changed

package/boot/arm-trusted-firmware-mediatek/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
include $(TOPDIR)/rules.mk
1010

1111
PKG_NAME:=arm-trusted-firmware-mediatek
12-
PKG_RELEASE:=1
12+
PKG_RELEASE:=2
1313

1414
PKG_SOURCE_PROTO:=git
1515
PKG_SOURCE_URL=https://github.com/mtk-openwrt/arm-trusted-firmware.git
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
From fb2a2b669ec9bbf5c448d4b56499bc83de075c93 Mon Sep 17 00:00:00 2001
2+
From: Daniel Golle <[email protected]>
3+
Date: Thu, 29 Feb 2024 18:01:08 +0000
4+
Subject: [PATCH 1/3] mediatek: snfi: FM35Q1GA is x4-only
5+
6+
Dont allow x2 read and cache read operations on FM35Q1GA.
7+
8+
Signed-off-by: Daniel Golle <[email protected]>
9+
---
10+
plat/mediatek/apsoc_common/drivers/snfi/mtk-snand-ids.c | 2 +-
11+
1 file changed, 1 insertion(+), 1 deletion(-)
12+
13+
--- a/plat/mediatek/apsoc_common/drivers/snfi/mtk-snand-ids.c
14+
+++ b/plat/mediatek/apsoc_common/drivers/snfi/mtk-snand-ids.c
15+
@@ -423,7 +423,7 @@ static const struct snand_flash_info sna
16+
17+
SNAND_INFO("FM35Q1GA", SNAND_ID(SNAND_ID_DYMMY, 0xe5, 0x71),
18+
SNAND_MEMORG_1G_2K_64,
19+
- &snand_cap_read_from_cache_x4,
20+
+ &snand_cap_read_from_cache_x4_only,
21+
&snand_cap_program_load_x4),
22+
23+
SNAND_INFO("PN26G01A", SNAND_ID(SNAND_ID_DYMMY, 0xa1, 0xe1),
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
From 6470986f037880ce76960c369d6e5a5270e7ce32 Mon Sep 17 00:00:00 2001
2+
From: Daniel Golle <[email protected]>
3+
Date: Sun, 10 Mar 2024 15:39:07 +0000
4+
Subject: [PATCH 2/3] mediatek: snfi: adjust pin drive strength for Fidelix
5+
SPI-NAND
6+
7+
It seems like we might need to adjust the pin driver strength to 12mA
8+
for Fidelix SPI-NAND chip on MT7622 to avoid SPI data corruption on
9+
some devices.
10+
11+
Signed-off-by: Daniel Golle <[email protected]>
12+
---
13+
.../apsoc_common/drivers/snfi/mtk-snand-def.h | 7 +++++
14+
.../apsoc_common/drivers/snfi/mtk-snand-ids.c | 4 ++-
15+
.../apsoc_common/drivers/snfi/mtk-snand.c | 30 +++++++++++++++++++
16+
3 files changed, 40 insertions(+), 1 deletion(-)
17+
18+
--- a/plat/mediatek/apsoc_common/drivers/snfi/mtk-snand-def.h
19+
+++ b/plat/mediatek/apsoc_common/drivers/snfi/mtk-snand-def.h
20+
@@ -86,6 +86,12 @@ struct snand_mem_org {
21+
22+
typedef int (*snand_select_die_t)(struct mtk_snand *snf, uint32_t dieidx);
23+
24+
+enum snand_drv {
25+
+ SNAND_DRV_NO_CHANGE = 0,
26+
+ SNAND_DRV_8mA = 8,
27+
+ SNAND_DRV_12mA = 12,
28+
+};
29+
+
30+
struct snand_flash_info {
31+
const char *model;
32+
struct snand_id id;
33+
@@ -93,6 +99,7 @@ struct snand_flash_info {
34+
const struct snand_io_cap *cap_rd;
35+
const struct snand_io_cap *cap_pl;
36+
snand_select_die_t select_die;
37+
+ enum snand_drv drv;
38+
};
39+
40+
#define SNAND_INFO(_model, _id, _memorg, _cap_rd, _cap_pl, ...) \
41+
--- a/plat/mediatek/apsoc_common/drivers/snfi/mtk-snand-ids.c
42+
+++ b/plat/mediatek/apsoc_common/drivers/snfi/mtk-snand-ids.c
43+
@@ -424,7 +424,9 @@ static const struct snand_flash_info sna
44+
SNAND_INFO("FM35Q1GA", SNAND_ID(SNAND_ID_DYMMY, 0xe5, 0x71),
45+
SNAND_MEMORG_1G_2K_64,
46+
&snand_cap_read_from_cache_x4_only,
47+
- &snand_cap_program_load_x4),
48+
+ &snand_cap_program_load_x4,
49+
+ NULL,
50+
+ SNAND_DRV_12mA),
51+
52+
SNAND_INFO("PN26G01A", SNAND_ID(SNAND_ID_DYMMY, 0xa1, 0xe1),
53+
SNAND_MEMORG_1G_2K_128,
54+
--- a/plat/mediatek/apsoc_common/drivers/snfi/mtk-snand.c
55+
+++ b/plat/mediatek/apsoc_common/drivers/snfi/mtk-snand.c
56+
@@ -1845,6 +1845,33 @@ static int mtk_snand_id_probe(struct mtk
57+
return -EINVAL;
58+
}
59+
60+
+#define MT7622_GPIO_BASE (void *)0x10211000
61+
+#define MT7622_GPIO_DRIV(x) (MT7622_GPIO_BASE + 0x900 + 0x10 * x)
62+
+
63+
+void mtk_mt7622_snand_adjust_drive(void *dev, enum snand_drv drv)
64+
+{
65+
+ uint32_t e4, e8;
66+
+
67+
+ e4 = readl(MT7622_GPIO_DRIV(6)) & ~(0x3f00);
68+
+ e8 = readl(MT7622_GPIO_DRIV(7)) & ~(0x3f00);
69+
+
70+
+ switch (drv) {
71+
+ case SNAND_DRV_8mA:
72+
+ e4 |= 0x3f00;
73+
+ break;
74+
+ case SNAND_DRV_12mA:
75+
+ e8 |= 0x3f00;
76+
+ break;
77+
+ default:
78+
+ return;
79+
+ }
80+
+
81+
+ snand_log_chip(dev, "adjusting SPI-NAND pin drive strength to %umA\n", drv);
82+
+
83+
+ writel(e4, MT7622_GPIO_DRIV(6));
84+
+ writel(e8, MT7622_GPIO_DRIV(7));
85+
+}
86+
+
87+
int mtk_snand_init(void *dev, const struct mtk_snand_platdata *pdata,
88+
struct mtk_snand **psnf)
89+
{
90+
@@ -1888,6 +1915,9 @@ int mtk_snand_init(void *dev, const stru
91+
if (ret)
92+
return ret;
93+
94+
+ if (pdata->soc == SNAND_SOC_MT7622 && snand_info->drv)
95+
+ mtk_mt7622_snand_adjust_drive(dev, snand_info->drv);
96+
+
97+
rawpage_size = snand_info->memorg.pagesize +
98+
snand_info->memorg.sparesize;
99+
Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
From 40a3661bebb3d738ab95b7de66e9d8382d5b9ab1 Mon Sep 17 00:00:00 2001
2+
From: Daniel Golle <[email protected]>
3+
Date: Sun, 10 Mar 2024 17:48:09 +0000
4+
Subject: [PATCH 3/3] mediatek: snfi: adjust drive strength to 12mA like old
5+
loader does
6+
7+
In addition to FM35X1GA, also change the driver strength to 12mA for
8+
all chips where this is done by the old/legacy U-Boot:
9+
* Winbond 512Mb
10+
* Winbond 1Gb
11+
* Winbond 2Gb
12+
* GD5F4GQ4UBYIG
13+
* GD5F4GQ4UAYIG
14+
* GD5F1GQ4UX
15+
* GD5F1GQ4UE
16+
* GD5F2GQ4UX
17+
* GD5F2GQ4UE
18+
19+
Signed-off-by: Daniel Golle <[email protected]>
20+
---
21+
.../apsoc_common/drivers/snfi/mtk-snand-ids.c | 59 ++++++++++++++-----
22+
1 file changed, 44 insertions(+), 15 deletions(-)
23+
24+
--- a/plat/mediatek/apsoc_common/drivers/snfi/mtk-snand-ids.c
25+
+++ b/plat/mediatek/apsoc_common/drivers/snfi/mtk-snand-ids.c
26+
@@ -80,65 +80,94 @@ static const struct snand_flash_info sna
27+
SNAND_INFO("W25N512GV", SNAND_ID(SNAND_ID_DYMMY, 0xef, 0xaa, 0x20),
28+
SNAND_MEMORG_512M_2K_64,
29+
&snand_cap_read_from_cache_quad,
30+
- &snand_cap_program_load_x4),
31+
+ &snand_cap_program_load_x4,
32+
+ NULL,
33+
+ SNAND_DRV_12mA),
34+
SNAND_INFO("W25N01GV", SNAND_ID(SNAND_ID_DYMMY, 0xef, 0xaa, 0x21),
35+
SNAND_MEMORG_1G_2K_64,
36+
&snand_cap_read_from_cache_quad,
37+
- &snand_cap_program_load_x4),
38+
+ &snand_cap_program_load_x4,
39+
+ NULL,
40+
+ SNAND_DRV_12mA),
41+
SNAND_INFO("W25M02GV", SNAND_ID(SNAND_ID_DYMMY, 0xef, 0xab, 0x21),
42+
SNAND_MEMORG_2G_2K_64_2D,
43+
&snand_cap_read_from_cache_quad,
44+
&snand_cap_program_load_x4,
45+
- mtk_snand_winbond_select_die),
46+
+ mtk_snand_winbond_select_die,
47+
+ SNAND_DRV_12mA),
48+
SNAND_INFO("W25N02KV", SNAND_ID(SNAND_ID_DYMMY, 0xef, 0xaa, 0x22),
49+
SNAND_MEMORG_2G_2K_128,
50+
&snand_cap_read_from_cache_quad,
51+
- &snand_cap_program_load_x4),
52+
+ &snand_cap_program_load_x4,
53+
+ NULL,
54+
+ SNAND_DRV_12mA),
55+
56+
SNAND_INFO("GD5F1GQ4UAWxx", SNAND_ID(SNAND_ID_ADDR, 0xc8, 0x10),
57+
SNAND_MEMORG_1G_2K_64,
58+
&snand_cap_read_from_cache_quad_q2d,
59+
- &snand_cap_program_load_x4),
60+
+ &snand_cap_program_load_x4,
61+
+ NULL,
62+
+ SNAND_DRV_12mA),
63+
SNAND_INFO("GD5F1GQ4UExIG", SNAND_ID(SNAND_ID_ADDR, 0xc8, 0xd1),
64+
SNAND_MEMORG_1G_2K_128,
65+
&snand_cap_read_from_cache_quad_q2d,
66+
- &snand_cap_program_load_x4),
67+
+ &snand_cap_program_load_x4,
68+
+ NULL,
69+
+ SNAND_DRV_12mA),
70+
SNAND_INFO("GD5F1GQ4UExxH", SNAND_ID(SNAND_ID_ADDR, 0xc8, 0xd9),
71+
SNAND_MEMORG_1G_2K_64,
72+
&snand_cap_read_from_cache_quad_q2d,
73+
- &snand_cap_program_load_x4),
74+
+ &snand_cap_program_load_x4,
75+
+ NULL,
76+
+ SNAND_DRV_12mA),
77+
SNAND_INFO("GD5F1GQ4xAYIG", SNAND_ID(SNAND_ID_ADDR, 0xc8, 0xf1),
78+
SNAND_MEMORG_1G_2K_64,
79+
&snand_cap_read_from_cache_quad_q2d,
80+
- &snand_cap_program_load_x4),
81+
+ &snand_cap_program_load_x4,
82+
+ NULL,
83+
+ SNAND_DRV_12mA),
84+
SNAND_INFO("GD5F2GQ4UExIG", SNAND_ID(SNAND_ID_ADDR, 0xc8, 0xd2),
85+
SNAND_MEMORG_2G_2K_128,
86+
&snand_cap_read_from_cache_quad_q2d,
87+
- &snand_cap_program_load_x4),
88+
+ &snand_cap_program_load_x4,
89+
+ NULL,
90+
+ SNAND_DRV_12mA),
91+
SNAND_INFO("GD5F2GQ5UExxH", SNAND_ID(SNAND_ID_ADDR, 0xc8, 0x32),
92+
SNAND_MEMORG_2G_2K_64,
93+
&snand_cap_read_from_cache_quad_a8d,
94+
- &snand_cap_program_load_x4),
95+
+ &snand_cap_program_load_x4,
96+
+ NULL,
97+
+ SNAND_DRV_12mA),
98+
SNAND_INFO("GD5F2GQ4xAYIG", SNAND_ID(SNAND_ID_ADDR, 0xc8, 0xf2),
99+
SNAND_MEMORG_2G_2K_64,
100+
&snand_cap_read_from_cache_quad_q2d,
101+
- &snand_cap_program_load_x4),
102+
+ &snand_cap_program_load_x4,
103+
+ NULL,
104+
+ SNAND_DRV_12mA),
105+
SNAND_INFO("GD5F4GQ4UBxIG", SNAND_ID(SNAND_ID_ADDR, 0xc8, 0xd4),
106+
SNAND_MEMORG_4G_4K_256,
107+
&snand_cap_read_from_cache_quad_q2d,
108+
- &snand_cap_program_load_x4),
109+
+ &snand_cap_program_load_x4,
110+
+ NULL,
111+
+ SNAND_DRV_12mA),
112+
SNAND_INFO("GD5F4GQ4xAYIG", SNAND_ID(SNAND_ID_ADDR, 0xc8, 0xf4),
113+
SNAND_MEMORG_4G_2K_64,
114+
&snand_cap_read_from_cache_quad_q2d,
115+
- &snand_cap_program_load_x4),
116+
+ &snand_cap_program_load_x4,
117+
+ NULL,
118+
+ SNAND_DRV_12mA),
119+
SNAND_INFO("GD5F2GQ5UExxG", SNAND_ID(SNAND_ID_DYMMY, 0xc8, 0x52),
120+
SNAND_MEMORG_2G_2K_128,
121+
&snand_cap_read_from_cache_quad_a8d,
122+
- &snand_cap_program_load_x4),
123+
+ &snand_cap_program_load_x4,
124+
+ NULL,
125+
+ SNAND_DRV_12mA),
126+
SNAND_INFO("GD5F4GQ4UCxIG", SNAND_ID(SNAND_ID_DYMMY, 0xc8, 0xb4),
127+
SNAND_MEMORG_4G_4K_256,
128+
&snand_cap_read_from_cache_quad_q2d,
129+
- &snand_cap_program_load_x4),
130+
+ &snand_cap_program_load_x4,
131+
+ NULL,
132+
+ SNAND_DRV_12mA),
133+
134+
SNAND_INFO("MX35LF1GE4AB", SNAND_ID(SNAND_ID_DYMMY, 0xc2, 0x12),
135+
SNAND_MEMORG_1G_2K_64,

0 commit comments

Comments
 (0)