| .. | .. |
|---|
| 12 | 12 | #define SFC_MAX_IOSIZE_VER4 (0xFFFFFFFF) |
|---|
| 13 | 13 | |
|---|
| 14 | 14 | static void __iomem *g_sfc_reg; |
|---|
| 15 | +static u32 sfc_version; |
|---|
| 15 | 16 | |
|---|
| 16 | 17 | static void sfc_reset(void) |
|---|
| 17 | 18 | { |
|---|
| .. | .. |
|---|
| 42 | 43 | |
|---|
| 43 | 44 | u32 sfc_get_max_dll_cells(void) |
|---|
| 44 | 45 | { |
|---|
| 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: |
|---|
| 46 | 50 | return SCLK_SMP_SEL_MAX_V5; |
|---|
| 47 | | - else if (sfc_get_version() == SFC_VER_4) |
|---|
| 51 | + case SFC_VER_4: |
|---|
| 48 | 52 | return SCLK_SMP_SEL_MAX_V4; |
|---|
| 49 | | - else |
|---|
| 53 | + default: |
|---|
| 50 | 54 | return 0; |
|---|
| 55 | + } |
|---|
| 51 | 56 | } |
|---|
| 52 | 57 | |
|---|
| 53 | 58 | void sfc_set_delay_lines(u16 cells) |
|---|
| .. | .. |
|---|
| 71 | 76 | |
|---|
| 72 | 77 | if (sfc_get_version() >= SFC_VER_4) |
|---|
| 73 | 78 | writel(1, g_sfc_reg + SFC_LEN_CTRL); |
|---|
| 79 | + sfc_version = sfc_get_version(); |
|---|
| 74 | 80 | |
|---|
| 75 | 81 | return SFC_OK; |
|---|
| 76 | 82 | } |
|---|
| .. | .. |
|---|
| 112 | 118 | op->sfctrl.d32 |= 0x2; |
|---|
| 113 | 119 | cmd.b.datasize = size; |
|---|
| 114 | 120 | |
|---|
| 115 | | - if (sfc_get_version() >= SFC_VER_4) |
|---|
| 121 | + if (sfc_version >= SFC_VER_4) |
|---|
| 116 | 122 | writel(size, g_sfc_reg + SFC_LEN_EXT); |
|---|
| 117 | 123 | else |
|---|
| 118 | 124 | cmd.b.datasize = size; |
|---|
| .. | .. |
|---|
| 234 | 240 | break; |
|---|
| 235 | 241 | } |
|---|
| 236 | 242 | |
|---|
| 243 | + if (!bytes) |
|---|
| 244 | + break; |
|---|
| 237 | 245 | sfc_delay(1); |
|---|
| 238 | 246 | |
|---|
| 239 | 247 | if (timeout++ > 10000) { |
|---|