hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
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,14 +43,16 @@
4243
4344 u32 sfc_get_max_dll_cells(void)
4445 {
45
- if (sfc_get_version() == SFC_VER_8)
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_5)
48
- return SCLK_SMP_SEL_MAX_V5;
49
- else if (sfc_get_version() == SFC_VER_4)
51
+ case SFC_VER_4:
5052 return SCLK_SMP_SEL_MAX_V4;
51
- else
53
+ default:
5254 return 0;
55
+ }
5356 }
5457
5558 void sfc_set_delay_lines(u16 cells)
....@@ -73,6 +76,7 @@
7376
7477 if (sfc_get_version() >= SFC_VER_4)
7578 writel(1, g_sfc_reg + SFC_LEN_CTRL);
79
+ sfc_version = sfc_get_version();
7680
7781 return SFC_OK;
7882 }
....@@ -114,7 +118,7 @@
114118 op->sfctrl.d32 |= 0x2;
115119 cmd.b.datasize = size;
116120
117
- if (sfc_get_version() >= SFC_VER_4)
121
+ if (sfc_version >= SFC_VER_4)
118122 writel(size, g_sfc_reg + SFC_LEN_EXT);
119123 else
120124 cmd.b.datasize = size;
....@@ -236,6 +240,8 @@
236240 break;
237241 }
238242
243
+ if (!bytes)
244
+ break;
239245 sfc_delay(1);
240246
241247 if (timeout++ > 10000) {