hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/drivers/rkflash/sfc.c
....@@ -12,6 +12,7 @@
1212 #define SFC_MAX_IOSIZE_VER4 (0xFFFFFFFF)
1313
1414 static void __iomem *g_sfc_reg;
15
+static u32 sfc_version;
1516
1617 static void sfc_reset(void)
1718 {
....@@ -42,12 +43,16 @@
4243
4344 u32 sfc_get_max_dll_cells(void)
4445 {
45
- if (sfc_get_version() == SFC_VER_5)
46
+ switch (sfc_get_version()) {
47
+ case SFC_VER_8:
48
+ case SFC_VER_6:
49
+ case SFC_VER_5:
4650 return SCLK_SMP_SEL_MAX_V5;
47
- else if (sfc_get_version() == SFC_VER_4)
51
+ case SFC_VER_4:
4852 return SCLK_SMP_SEL_MAX_V4;
49
- else
53
+ default:
5054 return 0;
55
+ }
5156 }
5257
5358 void sfc_set_delay_lines(u16 cells)
....@@ -71,6 +76,7 @@
7176
7277 if (sfc_get_version() >= SFC_VER_4)
7378 writel(1, g_sfc_reg + SFC_LEN_CTRL);
79
+ sfc_version = sfc_get_version();
7480
7581 return SFC_OK;
7682 }
....@@ -112,7 +118,7 @@
112118 op->sfctrl.d32 |= 0x2;
113119 cmd.b.datasize = size;
114120
115
- if (sfc_get_version() >= SFC_VER_4)
121
+ if (sfc_version >= SFC_VER_4)
116122 writel(size, g_sfc_reg + SFC_LEN_EXT);
117123 else
118124 cmd.b.datasize = size;
....@@ -234,6 +240,8 @@
234240 break;
235241 }
236242
243
+ if (!bytes)
244
+ break;
237245 sfc_delay(1);
238246
239247 if (timeout++ > 10000) {