^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) Common Flash Interface probe code.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) (C) 2000 Red Hat. GPL'd.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) See JEDEC (http://www.jedec.org/) standard JESD21C (section 3.5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) for the standard this probe goes back to.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) Occasionally maintained by Thayne Harbaugh tharbaugh at lnxi dot com
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #include <linux/module.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #include <linux/init.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #include <linux/types.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #include <linux/kernel.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #include <asm/io.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #include <asm/byteorder.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #include <linux/errno.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) #include <linux/slab.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) #include <linux/interrupt.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) #include <linux/mtd/mtd.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) #include <linux/mtd/map.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) #include <linux/mtd/cfi.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) #include <linux/mtd/gen_probe.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) /* AMD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) #define AM29DL800BB 0x22CB
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) #define AM29DL800BT 0x224A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) #define AM29F800BB 0x2258
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) #define AM29F800BT 0x22D6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) #define AM29LV400BB 0x22BA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) #define AM29LV400BT 0x22B9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) #define AM29LV800BB 0x225B
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) #define AM29LV800BT 0x22DA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) #define AM29LV160DT 0x22C4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) #define AM29LV160DB 0x2249
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) #define AM29F017D 0x003D
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) #define AM29F016D 0x00AD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) #define AM29F080 0x00D5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) #define AM29F040 0x00A4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) #define AM29LV040B 0x004F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) #define AM29F032B 0x0041
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) #define AM29F002T 0x00B0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) #define AM29SL800DB 0x226B
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) #define AM29SL800DT 0x22EA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) /* Atmel */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) #define AT49BV512 0x0003
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) #define AT29LV512 0x003d
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) #define AT49BV16X 0x00C0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) #define AT49BV16XT 0x00C2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) #define AT49BV32X 0x00C8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) #define AT49BV32XT 0x00C9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) /* Eon */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) #define EN29LV400AT 0x22B9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) #define EN29LV400AB 0x22BA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) #define EN29SL800BB 0x226B
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) #define EN29SL800BT 0x22EA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) /* Fujitsu */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) #define MBM29F040C 0x00A4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) #define MBM29F800BA 0x2258
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) #define MBM29LV650UE 0x22D7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) #define MBM29LV320TE 0x22F6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) #define MBM29LV320BE 0x22F9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) #define MBM29LV160TE 0x22C4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) #define MBM29LV160BE 0x2249
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) #define MBM29LV800BA 0x225B
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) #define MBM29LV800TA 0x22DA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) #define MBM29LV400TC 0x22B9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) #define MBM29LV400BC 0x22BA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) /* Hyundai */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) #define HY29F002T 0x00B0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) /* Intel */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) #define I28F004B3T 0x00d4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) #define I28F004B3B 0x00d5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) #define I28F400B3T 0x8894
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) #define I28F400B3B 0x8895
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) #define I28F008S5 0x00a6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) #define I28F016S5 0x00a0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) #define I28F008SA 0x00a2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) #define I28F008B3T 0x00d2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) #define I28F008B3B 0x00d3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) #define I28F800B3T 0x8892
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) #define I28F800B3B 0x8893
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) #define I28F016S3 0x00aa
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) #define I28F016B3T 0x00d0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) #define I28F016B3B 0x00d1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) #define I28F160B3T 0x8890
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) #define I28F160B3B 0x8891
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) #define I28F320B3T 0x8896
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) #define I28F320B3B 0x8897
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) #define I28F640B3T 0x8898
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) #define I28F640B3B 0x8899
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) #define I28F640C3B 0x88CD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) #define I28F160F3T 0x88F3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) #define I28F160F3B 0x88F4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) #define I28F160C3T 0x88C2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) #define I28F160C3B 0x88C3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) #define I82802AB 0x00ad
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) #define I82802AC 0x00ac
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) /* Macronix */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) #define MX29LV040C 0x004F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) #define MX29LV160T 0x22C4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) #define MX29LV160B 0x2249
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) #define MX29F040 0x00A4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) #define MX29F016 0x00AD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) #define MX29F002T 0x00B0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) #define MX29F004T 0x0045
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) #define MX29F004B 0x0046
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) /* NEC */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) #define UPD29F064115 0x221C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) /* PMC */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) #define PM49FL002 0x006D
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) #define PM49FL004 0x006E
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) #define PM49FL008 0x006A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) /* Sharp */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) #define LH28F640BF 0x00B0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) /* ST - www.st.com */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) #define M29F800AB 0x0058
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) #define M29W800DT 0x22D7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) #define M29W800DB 0x225B
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) #define M29W400DT 0x00EE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) #define M29W400DB 0x00EF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) #define M29W160DT 0x22C4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) #define M29W160DB 0x2249
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) #define M29W040B 0x00E3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) #define M50FW040 0x002C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) #define M50FW080 0x002D
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) #define M50FW016 0x002E
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) #define M50LPW080 0x002F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) #define M50FLW080A 0x0080
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) #define M50FLW080B 0x0081
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) #define PSD4256G6V 0x00e9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) /* SST */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) #define SST29EE020 0x0010
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) #define SST29LE020 0x0012
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) #define SST29EE512 0x005d
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) #define SST29LE512 0x003d
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) #define SST39LF800 0x2781
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) #define SST39LF160 0x2782
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) #define SST39VF1601 0x234b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) #define SST39VF3201 0x235b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) #define SST39WF1601 0x274b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) #define SST39WF1602 0x274a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) #define SST39LF512 0x00D4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) #define SST39LF010 0x00D5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) #define SST39LF020 0x00D6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) #define SST39LF040 0x00D7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) #define SST39SF010A 0x00B5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) #define SST39SF020A 0x00B6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) #define SST39SF040 0x00B7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) #define SST49LF004B 0x0060
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) #define SST49LF040B 0x0050
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) #define SST49LF008A 0x005a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) #define SST49LF030A 0x001C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) #define SST49LF040A 0x0051
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) #define SST49LF080A 0x005B
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) #define SST36VF3203 0x7354
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) /* Toshiba */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) #define TC58FVT160 0x00C2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) #define TC58FVB160 0x0043
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) #define TC58FVT321 0x009A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) #define TC58FVB321 0x009C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) #define TC58FVT641 0x0093
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) #define TC58FVB641 0x0095
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) /* Winbond */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) #define W49V002A 0x00b0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) * Unlock address sets for AMD command sets.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) * Intel command sets use the MTD_UADDR_UNNECESSARY.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) * Each identifier, except MTD_UADDR_UNNECESSARY, and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) * MTD_UADDR_NO_SUPPORT must be defined below in unlock_addrs[].
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) * MTD_UADDR_NOT_SUPPORTED must be 0 so that structure
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) * initialization need not require initializing all of the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) * unlock addresses for all bit widths.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) enum uaddr {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) MTD_UADDR_NOT_SUPPORTED = 0, /* data width not supported */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) MTD_UADDR_0x0555_0x02AA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) MTD_UADDR_0x0555_0x0AAA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) MTD_UADDR_0x5555_0x2AAA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) MTD_UADDR_0x0AAA_0x0554,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) MTD_UADDR_0x0AAA_0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) MTD_UADDR_0xAAAA_0x5555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) MTD_UADDR_DONT_CARE, /* Requires an arbitrary address */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) MTD_UADDR_UNNECESSARY, /* Does not require any address */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) struct unlock_addr {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) uint32_t addr1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) uint32_t addr2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) * I don't like the fact that the first entry in unlock_addrs[]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) * exists, but is for MTD_UADDR_NOT_SUPPORTED - and, therefore,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) * should not be used. The problem is that structures with
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) * initializers have extra fields initialized to 0. It is _very_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) * desirable to have the unlock address entries for unsupported
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) * data widths automatically initialized - that means that
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) * MTD_UADDR_NOT_SUPPORTED must be 0 and the first entry here
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) * must go unused.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) static const struct unlock_addr unlock_addrs[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) [MTD_UADDR_NOT_SUPPORTED] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) .addr1 = 0xffff,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) .addr2 = 0xffff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) [MTD_UADDR_0x0555_0x02AA] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) .addr1 = 0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) .addr2 = 0x02aa
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) [MTD_UADDR_0x0555_0x0AAA] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) .addr1 = 0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) .addr2 = 0x0aaa
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) [MTD_UADDR_0x5555_0x2AAA] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) .addr1 = 0x5555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) .addr2 = 0x2aaa
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) [MTD_UADDR_0x0AAA_0x0554] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) .addr1 = 0x0AAA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) .addr2 = 0x0554
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) [MTD_UADDR_0x0AAA_0x0555] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) .addr1 = 0x0AAA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) .addr2 = 0x0555
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) [MTD_UADDR_0xAAAA_0x5555] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) .addr1 = 0xaaaa,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) .addr2 = 0x5555
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) [MTD_UADDR_DONT_CARE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) .addr1 = 0x0000, /* Doesn't matter which address */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) .addr2 = 0x0000 /* is used - must be last entry */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) [MTD_UADDR_UNNECESSARY] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) .addr1 = 0x0000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) .addr2 = 0x0000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) struct amd_flash_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) const char *name;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) const uint16_t mfr_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) const uint16_t dev_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) const uint8_t dev_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) const uint8_t nr_regions;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) const uint16_t cmd_set;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) const uint32_t regions[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) const uint8_t devtypes; /* Bitmask for x8, x16 etc. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) const uint8_t uaddr; /* unlock addrs for 8, 16, 32, 64 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) #define ERASEINFO(size,blocks) (size<<8)|(blocks-1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) #define SIZE_64KiB 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) #define SIZE_128KiB 17
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) #define SIZE_256KiB 18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) #define SIZE_512KiB 19
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) #define SIZE_1MiB 20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) #define SIZE_2MiB 21
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) #define SIZE_4MiB 22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) #define SIZE_8MiB 23
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) * Please keep this list ordered by manufacturer!
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) * Fortunately, the list isn't searched often and so a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) * slow, linear search isn't so bad.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) static const struct amd_flash_info jedec_table[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) .mfr_id = CFI_MFR_AMD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) .dev_id = AM29F032B,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) .name = "AMD AM29F032B",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) .uaddr = MTD_UADDR_0x0555_0x02AA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) .dev_size = SIZE_4MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) ERASEINFO(0x10000,64)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) .mfr_id = CFI_MFR_AMD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) .dev_id = AM29LV160DT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) .name = "AMD AM29LV160DT",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) .uaddr = MTD_UADDR_0x0AAA_0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) .dev_size = SIZE_2MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) .nr_regions = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) ERASEINFO(0x10000,31),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) ERASEINFO(0x08000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) ERASEINFO(0x02000,2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) ERASEINFO(0x04000,1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) .mfr_id = CFI_MFR_AMD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) .dev_id = AM29LV160DB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) .name = "AMD AM29LV160DB",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) .uaddr = MTD_UADDR_0x0AAA_0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) .dev_size = SIZE_2MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) .nr_regions = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) ERASEINFO(0x04000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) ERASEINFO(0x02000,2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) ERASEINFO(0x08000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) ERASEINFO(0x10000,31)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) .mfr_id = CFI_MFR_AMD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) .dev_id = AM29LV400BB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) .name = "AMD AM29LV400BB",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) .uaddr = MTD_UADDR_0x0AAA_0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) .dev_size = SIZE_512KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) .nr_regions = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) ERASEINFO(0x04000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) ERASEINFO(0x02000,2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) ERASEINFO(0x08000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) ERASEINFO(0x10000,7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) .mfr_id = CFI_MFR_AMD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) .dev_id = AM29LV400BT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) .name = "AMD AM29LV400BT",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) .uaddr = MTD_UADDR_0x0AAA_0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) .dev_size = SIZE_512KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) .nr_regions = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) ERASEINFO(0x10000,7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) ERASEINFO(0x08000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) ERASEINFO(0x02000,2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) ERASEINFO(0x04000,1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) .mfr_id = CFI_MFR_AMD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) .dev_id = AM29LV800BB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) .name = "AMD AM29LV800BB",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) .uaddr = MTD_UADDR_0x0AAA_0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) .dev_size = SIZE_1MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) .nr_regions = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) ERASEINFO(0x04000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) ERASEINFO(0x02000,2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) ERASEINFO(0x08000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) ERASEINFO(0x10000,15),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) /* add DL */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) .mfr_id = CFI_MFR_AMD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) .dev_id = AM29DL800BB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) .name = "AMD AM29DL800BB",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) .uaddr = MTD_UADDR_0x0AAA_0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) .dev_size = SIZE_1MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) .nr_regions = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) ERASEINFO(0x04000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) ERASEINFO(0x08000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) ERASEINFO(0x02000,4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) ERASEINFO(0x08000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) ERASEINFO(0x04000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) ERASEINFO(0x10000,14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) .mfr_id = CFI_MFR_AMD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) .dev_id = AM29DL800BT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) .name = "AMD AM29DL800BT",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) .uaddr = MTD_UADDR_0x0AAA_0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) .dev_size = SIZE_1MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) .nr_regions = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) ERASEINFO(0x10000,14),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) ERASEINFO(0x04000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) ERASEINFO(0x08000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) ERASEINFO(0x02000,4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) ERASEINFO(0x08000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) ERASEINFO(0x04000,1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) .mfr_id = CFI_MFR_AMD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) .dev_id = AM29F800BB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) .name = "AMD AM29F800BB",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) .uaddr = MTD_UADDR_0x0AAA_0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) .dev_size = SIZE_1MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) .nr_regions = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) ERASEINFO(0x04000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) ERASEINFO(0x02000,2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) ERASEINFO(0x08000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) ERASEINFO(0x10000,15),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) .mfr_id = CFI_MFR_AMD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) .dev_id = AM29LV800BT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) .name = "AMD AM29LV800BT",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) .uaddr = MTD_UADDR_0x0AAA_0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) .dev_size = SIZE_1MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) .nr_regions = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) ERASEINFO(0x10000,15),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) ERASEINFO(0x08000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) ERASEINFO(0x02000,2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) ERASEINFO(0x04000,1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450) .mfr_id = CFI_MFR_AMD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) .dev_id = AM29F800BT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) .name = "AMD AM29F800BT",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) .uaddr = MTD_UADDR_0x0AAA_0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) .dev_size = SIZE_1MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) .nr_regions = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) ERASEINFO(0x10000,15),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460) ERASEINFO(0x08000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) ERASEINFO(0x02000,2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462) ERASEINFO(0x04000,1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) .mfr_id = CFI_MFR_AMD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) .dev_id = AM29F017D,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467) .name = "AMD AM29F017D",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) .uaddr = MTD_UADDR_DONT_CARE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) .dev_size = SIZE_2MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474) ERASEINFO(0x10000,32),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477) .mfr_id = CFI_MFR_AMD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) .dev_id = AM29F016D,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) .name = "AMD AM29F016D",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) .uaddr = MTD_UADDR_0x0555_0x02AA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) .dev_size = SIZE_2MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486) ERASEINFO(0x10000,32),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489) .mfr_id = CFI_MFR_AMD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) .dev_id = AM29F080,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) .name = "AMD AM29F080",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493) .uaddr = MTD_UADDR_0x0555_0x02AA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) .dev_size = SIZE_1MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) ERASEINFO(0x10000,16),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501) .mfr_id = CFI_MFR_AMD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) .dev_id = AM29F040,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503) .name = "AMD AM29F040",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) .uaddr = MTD_UADDR_0x0555_0x02AA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506) .dev_size = SIZE_512KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) ERASEINFO(0x10000,8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513) .mfr_id = CFI_MFR_AMD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514) .dev_id = AM29LV040B,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515) .name = "AMD AM29LV040B",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517) .uaddr = MTD_UADDR_0x0555_0x02AA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518) .dev_size = SIZE_512KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) ERASEINFO(0x10000,8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525) .mfr_id = CFI_MFR_AMD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526) .dev_id = AM29F002T,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527) .name = "AMD AM29F002T",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529) .uaddr = MTD_UADDR_0x0555_0x02AA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530) .dev_size = SIZE_256KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) .nr_regions = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534) ERASEINFO(0x10000,3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535) ERASEINFO(0x08000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536) ERASEINFO(0x02000,2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537) ERASEINFO(0x04000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540) .mfr_id = CFI_MFR_AMD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541) .dev_id = AM29SL800DT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542) .name = "AMD AM29SL800DT",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) .uaddr = MTD_UADDR_0x0AAA_0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545) .dev_size = SIZE_1MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547) .nr_regions = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549) ERASEINFO(0x10000,15),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) ERASEINFO(0x08000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551) ERASEINFO(0x02000,2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552) ERASEINFO(0x04000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555) .mfr_id = CFI_MFR_AMD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556) .dev_id = AM29SL800DB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557) .name = "AMD AM29SL800DB",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559) .uaddr = MTD_UADDR_0x0AAA_0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560) .dev_size = SIZE_1MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562) .nr_regions = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564) ERASEINFO(0x04000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 565) ERASEINFO(0x02000,2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 566) ERASEINFO(0x08000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 567) ERASEINFO(0x10000,15),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 568) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 569) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 570) .mfr_id = CFI_MFR_ATMEL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 571) .dev_id = AT49BV512,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 572) .name = "Atmel AT49BV512",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 573) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 574) .uaddr = MTD_UADDR_0x5555_0x2AAA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 575) .dev_size = SIZE_64KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 576) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 577) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 578) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 579) ERASEINFO(0x10000,1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 580) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 581) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 582) .mfr_id = CFI_MFR_ATMEL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 583) .dev_id = AT29LV512,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 584) .name = "Atmel AT29LV512",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 585) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 586) .uaddr = MTD_UADDR_0x5555_0x2AAA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 587) .dev_size = SIZE_64KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 588) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 589) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 590) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 591) ERASEINFO(0x80,256),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 592) ERASEINFO(0x80,256)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 593) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 594) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 595) .mfr_id = CFI_MFR_ATMEL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 596) .dev_id = AT49BV16X,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 597) .name = "Atmel AT49BV16X",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 598) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 599) .uaddr = MTD_UADDR_0x0555_0x0AAA, /* ???? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 600) .dev_size = SIZE_2MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 601) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 602) .nr_regions = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 603) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 604) ERASEINFO(0x02000,8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 605) ERASEINFO(0x10000,31)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 606) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 607) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 608) .mfr_id = CFI_MFR_ATMEL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 609) .dev_id = AT49BV16XT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 610) .name = "Atmel AT49BV16XT",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 611) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 612) .uaddr = MTD_UADDR_0x0555_0x0AAA, /* ???? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 613) .dev_size = SIZE_2MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 614) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 615) .nr_regions = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 616) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 617) ERASEINFO(0x10000,31),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 618) ERASEINFO(0x02000,8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 619) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 620) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 621) .mfr_id = CFI_MFR_ATMEL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 622) .dev_id = AT49BV32X,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 623) .name = "Atmel AT49BV32X",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 624) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 625) .uaddr = MTD_UADDR_0x0555_0x0AAA, /* ???? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 626) .dev_size = SIZE_4MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 627) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 628) .nr_regions = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 629) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 630) ERASEINFO(0x02000,8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 631) ERASEINFO(0x10000,63)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 632) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 633) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 634) .mfr_id = CFI_MFR_ATMEL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 635) .dev_id = AT49BV32XT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 636) .name = "Atmel AT49BV32XT",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 637) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 638) .uaddr = MTD_UADDR_0x0555_0x0AAA, /* ???? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 639) .dev_size = SIZE_4MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 640) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 641) .nr_regions = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 642) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 643) ERASEINFO(0x10000,63),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 644) ERASEINFO(0x02000,8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 645) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 646) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 647) .mfr_id = CFI_MFR_EON,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 648) .dev_id = EN29LV400AT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 649) .name = "Eon EN29LV400AT",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 650) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 651) .uaddr = MTD_UADDR_0x0AAA_0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 652) .dev_size = SIZE_512KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 653) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 654) .nr_regions = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 655) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 656) ERASEINFO(0x10000,7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 657) ERASEINFO(0x08000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 658) ERASEINFO(0x02000,2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 659) ERASEINFO(0x04000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 660) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 661) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 662) .mfr_id = CFI_MFR_EON,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 663) .dev_id = EN29LV400AB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 664) .name = "Eon EN29LV400AB",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 665) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 666) .uaddr = MTD_UADDR_0x0AAA_0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 667) .dev_size = SIZE_512KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 668) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 669) .nr_regions = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 670) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 671) ERASEINFO(0x04000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 672) ERASEINFO(0x02000,2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 673) ERASEINFO(0x08000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 674) ERASEINFO(0x10000,7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 675) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 676) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 677) .mfr_id = CFI_MFR_EON,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 678) .dev_id = EN29SL800BT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 679) .name = "Eon EN29SL800BT",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 680) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 681) .uaddr = MTD_UADDR_0x0AAA_0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 682) .dev_size = SIZE_1MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 683) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 684) .nr_regions = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 685) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 686) ERASEINFO(0x10000,15),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 687) ERASEINFO(0x08000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 688) ERASEINFO(0x02000,2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 689) ERASEINFO(0x04000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 690) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 691) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 692) .mfr_id = CFI_MFR_EON,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 693) .dev_id = EN29SL800BB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 694) .name = "Eon EN29SL800BB",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 695) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 696) .uaddr = MTD_UADDR_0x0AAA_0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 697) .dev_size = SIZE_1MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 698) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 699) .nr_regions = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 700) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 701) ERASEINFO(0x04000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 702) ERASEINFO(0x02000,2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 703) ERASEINFO(0x08000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 704) ERASEINFO(0x10000,15),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 705) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 706) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 707) .mfr_id = CFI_MFR_FUJITSU,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 708) .dev_id = MBM29F040C,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 709) .name = "Fujitsu MBM29F040C",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 710) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 711) .uaddr = MTD_UADDR_0x0AAA_0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 712) .dev_size = SIZE_512KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 713) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 714) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 715) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 716) ERASEINFO(0x10000,8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 717) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 718) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 719) .mfr_id = CFI_MFR_FUJITSU,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 720) .dev_id = MBM29F800BA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 721) .name = "Fujitsu MBM29F800BA",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 722) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 723) .uaddr = MTD_UADDR_0x0AAA_0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 724) .dev_size = SIZE_1MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 725) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 726) .nr_regions = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 727) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 728) ERASEINFO(0x04000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 729) ERASEINFO(0x02000,2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 730) ERASEINFO(0x08000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 731) ERASEINFO(0x10000,15),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 732) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 733) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 734) .mfr_id = CFI_MFR_FUJITSU,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 735) .dev_id = MBM29LV650UE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 736) .name = "Fujitsu MBM29LV650UE",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 737) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 738) .uaddr = MTD_UADDR_DONT_CARE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 739) .dev_size = SIZE_8MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 740) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 741) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 742) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 743) ERASEINFO(0x10000,128)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 744) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 745) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 746) .mfr_id = CFI_MFR_FUJITSU,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 747) .dev_id = MBM29LV320TE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 748) .name = "Fujitsu MBM29LV320TE",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 749) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 750) .uaddr = MTD_UADDR_0x0AAA_0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 751) .dev_size = SIZE_4MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 752) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 753) .nr_regions = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 754) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 755) ERASEINFO(0x10000,63),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 756) ERASEINFO(0x02000,8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 757) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 758) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 759) .mfr_id = CFI_MFR_FUJITSU,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 760) .dev_id = MBM29LV320BE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 761) .name = "Fujitsu MBM29LV320BE",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 762) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 763) .uaddr = MTD_UADDR_0x0AAA_0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 764) .dev_size = SIZE_4MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 765) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 766) .nr_regions = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 767) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 768) ERASEINFO(0x02000,8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 769) ERASEINFO(0x10000,63)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 770) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 771) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 772) .mfr_id = CFI_MFR_FUJITSU,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 773) .dev_id = MBM29LV160TE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 774) .name = "Fujitsu MBM29LV160TE",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 775) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 776) .uaddr = MTD_UADDR_0x0AAA_0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 777) .dev_size = SIZE_2MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 778) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 779) .nr_regions = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 780) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 781) ERASEINFO(0x10000,31),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 782) ERASEINFO(0x08000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 783) ERASEINFO(0x02000,2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 784) ERASEINFO(0x04000,1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 785) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 786) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 787) .mfr_id = CFI_MFR_FUJITSU,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 788) .dev_id = MBM29LV160BE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 789) .name = "Fujitsu MBM29LV160BE",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 790) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 791) .uaddr = MTD_UADDR_0x0AAA_0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 792) .dev_size = SIZE_2MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 793) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 794) .nr_regions = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 795) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 796) ERASEINFO(0x04000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 797) ERASEINFO(0x02000,2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 798) ERASEINFO(0x08000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 799) ERASEINFO(0x10000,31)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 800) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 801) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 802) .mfr_id = CFI_MFR_FUJITSU,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 803) .dev_id = MBM29LV800BA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 804) .name = "Fujitsu MBM29LV800BA",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 805) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 806) .uaddr = MTD_UADDR_0x0AAA_0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 807) .dev_size = SIZE_1MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 808) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 809) .nr_regions = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 810) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 811) ERASEINFO(0x04000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 812) ERASEINFO(0x02000,2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 813) ERASEINFO(0x08000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 814) ERASEINFO(0x10000,15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 815) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 816) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 817) .mfr_id = CFI_MFR_FUJITSU,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 818) .dev_id = MBM29LV800TA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 819) .name = "Fujitsu MBM29LV800TA",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 820) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 821) .uaddr = MTD_UADDR_0x0AAA_0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 822) .dev_size = SIZE_1MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 823) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 824) .nr_regions = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 825) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 826) ERASEINFO(0x10000,15),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 827) ERASEINFO(0x08000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 828) ERASEINFO(0x02000,2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 829) ERASEINFO(0x04000,1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 830) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 831) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 832) .mfr_id = CFI_MFR_FUJITSU,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 833) .dev_id = MBM29LV400BC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 834) .name = "Fujitsu MBM29LV400BC",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 835) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 836) .uaddr = MTD_UADDR_0x0AAA_0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 837) .dev_size = SIZE_512KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 838) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 839) .nr_regions = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 840) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 841) ERASEINFO(0x04000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 842) ERASEINFO(0x02000,2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 843) ERASEINFO(0x08000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 844) ERASEINFO(0x10000,7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 845) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 846) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 847) .mfr_id = CFI_MFR_FUJITSU,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 848) .dev_id = MBM29LV400TC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 849) .name = "Fujitsu MBM29LV400TC",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 850) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 851) .uaddr = MTD_UADDR_0x0AAA_0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 852) .dev_size = SIZE_512KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 853) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 854) .nr_regions = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 855) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 856) ERASEINFO(0x10000,7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 857) ERASEINFO(0x08000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 858) ERASEINFO(0x02000,2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 859) ERASEINFO(0x04000,1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 860) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 861) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 862) .mfr_id = CFI_MFR_HYUNDAI,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 863) .dev_id = HY29F002T,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 864) .name = "Hyundai HY29F002T",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 865) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 866) .uaddr = MTD_UADDR_0x0555_0x02AA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 867) .dev_size = SIZE_256KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 868) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 869) .nr_regions = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 870) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 871) ERASEINFO(0x10000,3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 872) ERASEINFO(0x08000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 873) ERASEINFO(0x02000,2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 874) ERASEINFO(0x04000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 875) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 876) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 877) .mfr_id = CFI_MFR_INTEL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 878) .dev_id = I28F004B3B,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 879) .name = "Intel 28F004B3B",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 880) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 881) .uaddr = MTD_UADDR_UNNECESSARY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 882) .dev_size = SIZE_512KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 883) .cmd_set = P_ID_INTEL_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 884) .nr_regions = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 885) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 886) ERASEINFO(0x02000, 8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 887) ERASEINFO(0x10000, 7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 888) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 889) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 890) .mfr_id = CFI_MFR_INTEL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 891) .dev_id = I28F004B3T,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 892) .name = "Intel 28F004B3T",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 893) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 894) .uaddr = MTD_UADDR_UNNECESSARY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 895) .dev_size = SIZE_512KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 896) .cmd_set = P_ID_INTEL_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 897) .nr_regions = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 898) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 899) ERASEINFO(0x10000, 7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 900) ERASEINFO(0x02000, 8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 901) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 902) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 903) .mfr_id = CFI_MFR_INTEL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 904) .dev_id = I28F400B3B,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 905) .name = "Intel 28F400B3B",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 906) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 907) .uaddr = MTD_UADDR_UNNECESSARY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 908) .dev_size = SIZE_512KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 909) .cmd_set = P_ID_INTEL_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 910) .nr_regions = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 911) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 912) ERASEINFO(0x02000, 8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 913) ERASEINFO(0x10000, 7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 914) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 915) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 916) .mfr_id = CFI_MFR_INTEL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 917) .dev_id = I28F400B3T,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 918) .name = "Intel 28F400B3T",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 919) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 920) .uaddr = MTD_UADDR_UNNECESSARY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 921) .dev_size = SIZE_512KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 922) .cmd_set = P_ID_INTEL_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 923) .nr_regions = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 924) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 925) ERASEINFO(0x10000, 7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 926) ERASEINFO(0x02000, 8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 927) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 928) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 929) .mfr_id = CFI_MFR_INTEL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 930) .dev_id = I28F008B3B,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 931) .name = "Intel 28F008B3B",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 932) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 933) .uaddr = MTD_UADDR_UNNECESSARY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 934) .dev_size = SIZE_1MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 935) .cmd_set = P_ID_INTEL_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 936) .nr_regions = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 937) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 938) ERASEINFO(0x02000, 8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 939) ERASEINFO(0x10000, 15),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 940) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 941) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 942) .mfr_id = CFI_MFR_INTEL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 943) .dev_id = I28F008B3T,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 944) .name = "Intel 28F008B3T",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 945) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 946) .uaddr = MTD_UADDR_UNNECESSARY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 947) .dev_size = SIZE_1MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 948) .cmd_set = P_ID_INTEL_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 949) .nr_regions = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 950) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 951) ERASEINFO(0x10000, 15),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 952) ERASEINFO(0x02000, 8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 953) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 954) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 955) .mfr_id = CFI_MFR_INTEL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 956) .dev_id = I28F008S5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 957) .name = "Intel 28F008S5",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 958) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 959) .uaddr = MTD_UADDR_UNNECESSARY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 960) .dev_size = SIZE_1MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 961) .cmd_set = P_ID_INTEL_EXT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 962) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 963) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 964) ERASEINFO(0x10000,16),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 965) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 966) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 967) .mfr_id = CFI_MFR_INTEL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 968) .dev_id = I28F016S5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 969) .name = "Intel 28F016S5",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 970) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 971) .uaddr = MTD_UADDR_UNNECESSARY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 972) .dev_size = SIZE_2MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 973) .cmd_set = P_ID_INTEL_EXT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 974) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 975) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 976) ERASEINFO(0x10000,32),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 977) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 978) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 979) .mfr_id = CFI_MFR_INTEL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 980) .dev_id = I28F008SA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 981) .name = "Intel 28F008SA",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 982) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 983) .uaddr = MTD_UADDR_UNNECESSARY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 984) .dev_size = SIZE_1MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 985) .cmd_set = P_ID_INTEL_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 986) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 987) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 988) ERASEINFO(0x10000, 16),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 989) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 990) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 991) .mfr_id = CFI_MFR_INTEL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 992) .dev_id = I28F800B3B,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 993) .name = "Intel 28F800B3B",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 994) .devtypes = CFI_DEVICETYPE_X16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 995) .uaddr = MTD_UADDR_UNNECESSARY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 996) .dev_size = SIZE_1MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 997) .cmd_set = P_ID_INTEL_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 998) .nr_regions = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 999) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1000) ERASEINFO(0x02000, 8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1001) ERASEINFO(0x10000, 15),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1002) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1003) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1004) .mfr_id = CFI_MFR_INTEL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1005) .dev_id = I28F800B3T,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1006) .name = "Intel 28F800B3T",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1007) .devtypes = CFI_DEVICETYPE_X16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1008) .uaddr = MTD_UADDR_UNNECESSARY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1009) .dev_size = SIZE_1MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1010) .cmd_set = P_ID_INTEL_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1011) .nr_regions = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1012) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1013) ERASEINFO(0x10000, 15),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1014) ERASEINFO(0x02000, 8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1015) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1016) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1017) .mfr_id = CFI_MFR_INTEL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1018) .dev_id = I28F016B3B,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1019) .name = "Intel 28F016B3B",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1020) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1021) .uaddr = MTD_UADDR_UNNECESSARY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1022) .dev_size = SIZE_2MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1023) .cmd_set = P_ID_INTEL_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1024) .nr_regions = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1025) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1026) ERASEINFO(0x02000, 8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1027) ERASEINFO(0x10000, 31),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1028) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1029) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1030) .mfr_id = CFI_MFR_INTEL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1031) .dev_id = I28F016S3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1032) .name = "Intel I28F016S3",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1033) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1034) .uaddr = MTD_UADDR_UNNECESSARY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1035) .dev_size = SIZE_2MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1036) .cmd_set = P_ID_INTEL_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1037) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1038) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1039) ERASEINFO(0x10000, 32),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1040) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1041) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1042) .mfr_id = CFI_MFR_INTEL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1043) .dev_id = I28F016B3T,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1044) .name = "Intel 28F016B3T",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1045) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1046) .uaddr = MTD_UADDR_UNNECESSARY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1047) .dev_size = SIZE_2MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1048) .cmd_set = P_ID_INTEL_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1049) .nr_regions = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1050) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1051) ERASEINFO(0x10000, 31),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1052) ERASEINFO(0x02000, 8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1053) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1054) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1055) .mfr_id = CFI_MFR_INTEL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1056) .dev_id = I28F160B3B,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1057) .name = "Intel 28F160B3B",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1058) .devtypes = CFI_DEVICETYPE_X16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1059) .uaddr = MTD_UADDR_UNNECESSARY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1060) .dev_size = SIZE_2MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1061) .cmd_set = P_ID_INTEL_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1062) .nr_regions = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1063) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1064) ERASEINFO(0x02000, 8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1065) ERASEINFO(0x10000, 31),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1066) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1067) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1068) .mfr_id = CFI_MFR_INTEL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1069) .dev_id = I28F160B3T,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1070) .name = "Intel 28F160B3T",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1071) .devtypes = CFI_DEVICETYPE_X16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1072) .uaddr = MTD_UADDR_UNNECESSARY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1073) .dev_size = SIZE_2MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1074) .cmd_set = P_ID_INTEL_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1075) .nr_regions = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1076) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1077) ERASEINFO(0x10000, 31),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1078) ERASEINFO(0x02000, 8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1079) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1080) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1081) .mfr_id = CFI_MFR_INTEL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1082) .dev_id = I28F320B3B,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1083) .name = "Intel 28F320B3B",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1084) .devtypes = CFI_DEVICETYPE_X16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1085) .uaddr = MTD_UADDR_UNNECESSARY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1086) .dev_size = SIZE_4MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1087) .cmd_set = P_ID_INTEL_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1088) .nr_regions = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1089) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1090) ERASEINFO(0x02000, 8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1091) ERASEINFO(0x10000, 63),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1092) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1093) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1094) .mfr_id = CFI_MFR_INTEL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1095) .dev_id = I28F320B3T,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1096) .name = "Intel 28F320B3T",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1097) .devtypes = CFI_DEVICETYPE_X16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1098) .uaddr = MTD_UADDR_UNNECESSARY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1099) .dev_size = SIZE_4MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1100) .cmd_set = P_ID_INTEL_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1101) .nr_regions = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1102) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1103) ERASEINFO(0x10000, 63),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1104) ERASEINFO(0x02000, 8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1105) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1106) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1107) .mfr_id = CFI_MFR_INTEL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1108) .dev_id = I28F640B3B,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1109) .name = "Intel 28F640B3B",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1110) .devtypes = CFI_DEVICETYPE_X16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1111) .uaddr = MTD_UADDR_UNNECESSARY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1112) .dev_size = SIZE_8MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1113) .cmd_set = P_ID_INTEL_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1114) .nr_regions = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1115) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1116) ERASEINFO(0x02000, 8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1117) ERASEINFO(0x10000, 127),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1118) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1119) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1120) .mfr_id = CFI_MFR_INTEL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1121) .dev_id = I28F640B3T,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1122) .name = "Intel 28F640B3T",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1123) .devtypes = CFI_DEVICETYPE_X16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1124) .uaddr = MTD_UADDR_UNNECESSARY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1125) .dev_size = SIZE_8MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1126) .cmd_set = P_ID_INTEL_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1127) .nr_regions = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1128) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1129) ERASEINFO(0x10000, 127),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1130) ERASEINFO(0x02000, 8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1131) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1132) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1133) .mfr_id = CFI_MFR_INTEL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1134) .dev_id = I28F640C3B,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1135) .name = "Intel 28F640C3B",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1136) .devtypes = CFI_DEVICETYPE_X16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1137) .uaddr = MTD_UADDR_UNNECESSARY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1138) .dev_size = SIZE_8MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1139) .cmd_set = P_ID_INTEL_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1140) .nr_regions = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1141) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1142) ERASEINFO(0x02000, 8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1143) ERASEINFO(0x10000, 127),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1144) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1145) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1146) .mfr_id = CFI_MFR_INTEL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1147) .dev_id = I82802AB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1148) .name = "Intel 82802AB",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1149) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1150) .uaddr = MTD_UADDR_UNNECESSARY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1151) .dev_size = SIZE_512KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1152) .cmd_set = P_ID_INTEL_EXT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1153) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1154) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1155) ERASEINFO(0x10000,8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1156) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1157) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1158) .mfr_id = CFI_MFR_INTEL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1159) .dev_id = I82802AC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1160) .name = "Intel 82802AC",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1161) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1162) .uaddr = MTD_UADDR_UNNECESSARY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1163) .dev_size = SIZE_1MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1164) .cmd_set = P_ID_INTEL_EXT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1165) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1166) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1167) ERASEINFO(0x10000,16),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1168) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1169) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1170) .mfr_id = CFI_MFR_MACRONIX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1171) .dev_id = MX29LV040C,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1172) .name = "Macronix MX29LV040C",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1173) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1174) .uaddr = MTD_UADDR_0x0555_0x02AA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1175) .dev_size = SIZE_512KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1176) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1177) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1178) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1179) ERASEINFO(0x10000,8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1180) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1181) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1182) .mfr_id = CFI_MFR_MACRONIX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1183) .dev_id = MX29LV160T,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1184) .name = "MXIC MX29LV160T",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1185) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1186) .uaddr = MTD_UADDR_0x0AAA_0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1187) .dev_size = SIZE_2MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1188) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1189) .nr_regions = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1190) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1191) ERASEINFO(0x10000,31),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1192) ERASEINFO(0x08000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1193) ERASEINFO(0x02000,2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1194) ERASEINFO(0x04000,1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1195) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1196) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1197) .mfr_id = CFI_MFR_NEC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1198) .dev_id = UPD29F064115,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1199) .name = "NEC uPD29F064115",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1200) .devtypes = CFI_DEVICETYPE_X16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1201) .uaddr = MTD_UADDR_0xAAAA_0x5555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1202) .dev_size = SIZE_8MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1203) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1204) .nr_regions = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1205) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1206) ERASEINFO(0x2000,8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1207) ERASEINFO(0x10000,126),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1208) ERASEINFO(0x2000,8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1209) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1210) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1211) .mfr_id = CFI_MFR_MACRONIX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1212) .dev_id = MX29LV160B,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1213) .name = "MXIC MX29LV160B",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1214) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1215) .uaddr = MTD_UADDR_0x0AAA_0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1216) .dev_size = SIZE_2MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1217) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1218) .nr_regions = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1219) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1220) ERASEINFO(0x04000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1221) ERASEINFO(0x02000,2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1222) ERASEINFO(0x08000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1223) ERASEINFO(0x10000,31)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1224) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1225) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1226) .mfr_id = CFI_MFR_MACRONIX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1227) .dev_id = MX29F040,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1228) .name = "Macronix MX29F040",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1229) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1230) .uaddr = MTD_UADDR_0x0555_0x02AA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1231) .dev_size = SIZE_512KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1232) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1233) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1234) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1235) ERASEINFO(0x10000,8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1236) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1237) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1238) .mfr_id = CFI_MFR_MACRONIX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1239) .dev_id = MX29F016,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1240) .name = "Macronix MX29F016",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1241) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1242) .uaddr = MTD_UADDR_0x0555_0x02AA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1243) .dev_size = SIZE_2MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1244) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1245) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1246) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1247) ERASEINFO(0x10000,32),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1248) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1249) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1250) .mfr_id = CFI_MFR_MACRONIX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1251) .dev_id = MX29F004T,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1252) .name = "Macronix MX29F004T",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1253) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1254) .uaddr = MTD_UADDR_0x0555_0x02AA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1255) .dev_size = SIZE_512KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1256) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1257) .nr_regions = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1258) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1259) ERASEINFO(0x10000,7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1260) ERASEINFO(0x08000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1261) ERASEINFO(0x02000,2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1262) ERASEINFO(0x04000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1263) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1264) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1265) .mfr_id = CFI_MFR_MACRONIX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1266) .dev_id = MX29F004B,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1267) .name = "Macronix MX29F004B",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1268) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1269) .uaddr = MTD_UADDR_0x0555_0x02AA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1270) .dev_size = SIZE_512KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1271) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1272) .nr_regions = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1273) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1274) ERASEINFO(0x04000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1275) ERASEINFO(0x02000,2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1276) ERASEINFO(0x08000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1277) ERASEINFO(0x10000,7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1278) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1279) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1280) .mfr_id = CFI_MFR_MACRONIX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1281) .dev_id = MX29F002T,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1282) .name = "Macronix MX29F002T",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1283) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1284) .uaddr = MTD_UADDR_0x0555_0x02AA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1285) .dev_size = SIZE_256KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1286) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1287) .nr_regions = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1288) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1289) ERASEINFO(0x10000,3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1290) ERASEINFO(0x08000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1291) ERASEINFO(0x02000,2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1292) ERASEINFO(0x04000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1293) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1294) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1295) .mfr_id = CFI_MFR_PMC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1296) .dev_id = PM49FL002,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1297) .name = "PMC Pm49FL002",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1298) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1299) .uaddr = MTD_UADDR_0x5555_0x2AAA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1300) .dev_size = SIZE_256KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1301) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1302) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1303) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1304) ERASEINFO( 0x01000, 64 )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1305) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1306) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1307) .mfr_id = CFI_MFR_PMC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1308) .dev_id = PM49FL004,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1309) .name = "PMC Pm49FL004",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1310) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1311) .uaddr = MTD_UADDR_0x5555_0x2AAA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1312) .dev_size = SIZE_512KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1313) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1314) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1315) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1316) ERASEINFO( 0x01000, 128 )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1317) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1318) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1319) .mfr_id = CFI_MFR_PMC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1320) .dev_id = PM49FL008,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1321) .name = "PMC Pm49FL008",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1322) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1323) .uaddr = MTD_UADDR_0x5555_0x2AAA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1324) .dev_size = SIZE_1MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1325) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1326) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1327) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1328) ERASEINFO( 0x01000, 256 )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1329) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1330) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1331) .mfr_id = CFI_MFR_SHARP,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1332) .dev_id = LH28F640BF,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1333) .name = "LH28F640BF",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1334) .devtypes = CFI_DEVICETYPE_X16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1335) .uaddr = MTD_UADDR_UNNECESSARY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1336) .dev_size = SIZE_8MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1337) .cmd_set = P_ID_INTEL_EXT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1338) .nr_regions = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1339) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1340) ERASEINFO(0x10000, 127),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1341) ERASEINFO(0x02000, 8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1342) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1343) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1344) .mfr_id = CFI_MFR_SST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1345) .dev_id = SST39LF512,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1346) .name = "SST 39LF512",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1347) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1348) .uaddr = MTD_UADDR_0x5555_0x2AAA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1349) .dev_size = SIZE_64KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1350) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1351) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1352) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1353) ERASEINFO(0x01000,16),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1354) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1355) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1356) .mfr_id = CFI_MFR_SST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1357) .dev_id = SST39LF010,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1358) .name = "SST 39LF010",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1359) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1360) .uaddr = MTD_UADDR_0x5555_0x2AAA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1361) .dev_size = SIZE_128KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1362) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1363) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1364) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1365) ERASEINFO(0x01000,32),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1366) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1367) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1368) .mfr_id = CFI_MFR_SST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1369) .dev_id = SST29EE020,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1370) .name = "SST 29EE020",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1371) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1372) .uaddr = MTD_UADDR_0x5555_0x2AAA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1373) .dev_size = SIZE_256KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1374) .cmd_set = P_ID_SST_PAGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1375) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1376) .regions = {ERASEINFO(0x01000,64),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1377) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1378) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1379) .mfr_id = CFI_MFR_SST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1380) .dev_id = SST29LE020,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1381) .name = "SST 29LE020",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1382) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1383) .uaddr = MTD_UADDR_0x5555_0x2AAA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1384) .dev_size = SIZE_256KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1385) .cmd_set = P_ID_SST_PAGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1386) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1387) .regions = {ERASEINFO(0x01000,64),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1388) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1389) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1390) .mfr_id = CFI_MFR_SST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1391) .dev_id = SST39LF020,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1392) .name = "SST 39LF020",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1393) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1394) .uaddr = MTD_UADDR_0x5555_0x2AAA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1395) .dev_size = SIZE_256KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1396) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1397) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1398) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1399) ERASEINFO(0x01000,64),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1400) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1401) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1402) .mfr_id = CFI_MFR_SST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1403) .dev_id = SST39LF040,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1404) .name = "SST 39LF040",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1405) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1406) .uaddr = MTD_UADDR_0x5555_0x2AAA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1407) .dev_size = SIZE_512KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1408) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1409) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1410) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1411) ERASEINFO(0x01000,128),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1412) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1413) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1414) .mfr_id = CFI_MFR_SST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1415) .dev_id = SST39SF010A,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1416) .name = "SST 39SF010A",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1417) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1418) .uaddr = MTD_UADDR_0x5555_0x2AAA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1419) .dev_size = SIZE_128KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1420) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1421) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1422) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1423) ERASEINFO(0x01000,32),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1424) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1425) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1426) .mfr_id = CFI_MFR_SST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1427) .dev_id = SST39SF020A,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1428) .name = "SST 39SF020A",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1429) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1430) .uaddr = MTD_UADDR_0x5555_0x2AAA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1431) .dev_size = SIZE_256KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1432) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1433) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1434) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1435) ERASEINFO(0x01000,64),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1436) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1437) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1438) .mfr_id = CFI_MFR_SST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1439) .dev_id = SST39SF040,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1440) .name = "SST 39SF040",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1441) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1442) .uaddr = MTD_UADDR_0x5555_0x2AAA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1443) .dev_size = SIZE_512KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1444) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1445) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1446) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1447) ERASEINFO(0x01000,128),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1448) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1449) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1450) .mfr_id = CFI_MFR_SST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1451) .dev_id = SST49LF040B,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1452) .name = "SST 49LF040B",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1453) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1454) .uaddr = MTD_UADDR_0x5555_0x2AAA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1455) .dev_size = SIZE_512KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1456) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1457) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1458) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1459) ERASEINFO(0x01000,128),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1460) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1461) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1462)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1463) .mfr_id = CFI_MFR_SST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1464) .dev_id = SST49LF004B,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1465) .name = "SST 49LF004B",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1466) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1467) .uaddr = MTD_UADDR_0x5555_0x2AAA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1468) .dev_size = SIZE_512KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1469) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1470) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1471) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1472) ERASEINFO(0x01000,128),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1473) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1474) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1475) .mfr_id = CFI_MFR_SST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1476) .dev_id = SST49LF008A,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1477) .name = "SST 49LF008A",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1478) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1479) .uaddr = MTD_UADDR_0x5555_0x2AAA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1480) .dev_size = SIZE_1MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1481) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1482) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1483) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1484) ERASEINFO(0x01000,256),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1485) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1486) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1487) .mfr_id = CFI_MFR_SST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1488) .dev_id = SST49LF030A,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1489) .name = "SST 49LF030A",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1490) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1491) .uaddr = MTD_UADDR_0x5555_0x2AAA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1492) .dev_size = SIZE_512KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1493) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1494) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1495) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1496) ERASEINFO(0x01000,96),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1497) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1498) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1499) .mfr_id = CFI_MFR_SST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1500) .dev_id = SST49LF040A,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1501) .name = "SST 49LF040A",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1502) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1503) .uaddr = MTD_UADDR_0x5555_0x2AAA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1504) .dev_size = SIZE_512KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1505) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1506) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1507) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1508) ERASEINFO(0x01000,128),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1509) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1510) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1511) .mfr_id = CFI_MFR_SST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1512) .dev_id = SST49LF080A,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1513) .name = "SST 49LF080A",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1514) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1515) .uaddr = MTD_UADDR_0x5555_0x2AAA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1516) .dev_size = SIZE_1MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1517) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1518) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1519) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1520) ERASEINFO(0x01000,256),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1521) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1522) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1523) .mfr_id = CFI_MFR_SST, /* should be CFI */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1524) .dev_id = SST39LF160,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1525) .name = "SST 39LF160",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1526) .devtypes = CFI_DEVICETYPE_X16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1527) .uaddr = MTD_UADDR_0xAAAA_0x5555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1528) .dev_size = SIZE_2MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1529) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1530) .nr_regions = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1531) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1532) ERASEINFO(0x1000,256),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1533) ERASEINFO(0x1000,256)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1534) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1535) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1536) .mfr_id = CFI_MFR_SST, /* should be CFI */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1537) .dev_id = SST39VF1601,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1538) .name = "SST 39VF1601",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1539) .devtypes = CFI_DEVICETYPE_X16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1540) .uaddr = MTD_UADDR_0xAAAA_0x5555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1541) .dev_size = SIZE_2MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1542) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1543) .nr_regions = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1544) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1545) ERASEINFO(0x1000,256),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1546) ERASEINFO(0x1000,256)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1547) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1548) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1549) /* CFI is broken: reports AMD_STD, but needs custom uaddr */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1550) .mfr_id = CFI_MFR_SST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1551) .dev_id = SST39WF1601,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1552) .name = "SST 39WF1601",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1553) .devtypes = CFI_DEVICETYPE_X16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1554) .uaddr = MTD_UADDR_0xAAAA_0x5555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1555) .dev_size = SIZE_2MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1556) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1557) .nr_regions = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1558) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1559) ERASEINFO(0x1000,256),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1560) ERASEINFO(0x1000,256)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1561) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1562) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1563) /* CFI is broken: reports AMD_STD, but needs custom uaddr */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1564) .mfr_id = CFI_MFR_SST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1565) .dev_id = SST39WF1602,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1566) .name = "SST 39WF1602",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1567) .devtypes = CFI_DEVICETYPE_X16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1568) .uaddr = MTD_UADDR_0xAAAA_0x5555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1569) .dev_size = SIZE_2MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1570) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1571) .nr_regions = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1572) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1573) ERASEINFO(0x1000,256),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1574) ERASEINFO(0x1000,256)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1575) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1576) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1577) .mfr_id = CFI_MFR_SST, /* should be CFI */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1578) .dev_id = SST39VF3201,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1579) .name = "SST 39VF3201",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1580) .devtypes = CFI_DEVICETYPE_X16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1581) .uaddr = MTD_UADDR_0xAAAA_0x5555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1582) .dev_size = SIZE_4MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1583) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1584) .nr_regions = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1585) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1586) ERASEINFO(0x1000,256),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1587) ERASEINFO(0x1000,256),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1588) ERASEINFO(0x1000,256),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1589) ERASEINFO(0x1000,256)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1590) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1591) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1592) .mfr_id = CFI_MFR_SST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1593) .dev_id = SST36VF3203,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1594) .name = "SST 36VF3203",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1595) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1596) .uaddr = MTD_UADDR_0x0AAA_0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1597) .dev_size = SIZE_4MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1598) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1599) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1600) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1601) ERASEINFO(0x10000,64),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1602) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1603) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1604) .mfr_id = CFI_MFR_ST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1605) .dev_id = M29F800AB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1606) .name = "ST M29F800AB",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1607) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1608) .uaddr = MTD_UADDR_0x0AAA_0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1609) .dev_size = SIZE_1MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1610) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1611) .nr_regions = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1612) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1613) ERASEINFO(0x04000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1614) ERASEINFO(0x02000,2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1615) ERASEINFO(0x08000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1616) ERASEINFO(0x10000,15),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1617) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1618) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1619) .mfr_id = CFI_MFR_ST, /* FIXME - CFI device? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1620) .dev_id = M29W800DT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1621) .name = "ST M29W800DT",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1622) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1623) .uaddr = MTD_UADDR_0x0AAA_0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1624) .dev_size = SIZE_1MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1625) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1626) .nr_regions = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1627) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1628) ERASEINFO(0x10000,15),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1629) ERASEINFO(0x08000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1630) ERASEINFO(0x02000,2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1631) ERASEINFO(0x04000,1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1632) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1633) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1634) .mfr_id = CFI_MFR_ST, /* FIXME - CFI device? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1635) .dev_id = M29W800DB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1636) .name = "ST M29W800DB",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1637) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1638) .uaddr = MTD_UADDR_0x0AAA_0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1639) .dev_size = SIZE_1MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1640) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1641) .nr_regions = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1642) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1643) ERASEINFO(0x04000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1644) ERASEINFO(0x02000,2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1645) ERASEINFO(0x08000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1646) ERASEINFO(0x10000,15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1647) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1648) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1649) .mfr_id = CFI_MFR_ST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1650) .dev_id = M29W400DT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1651) .name = "ST M29W400DT",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1652) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1653) .uaddr = MTD_UADDR_0x0AAA_0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1654) .dev_size = SIZE_512KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1655) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1656) .nr_regions = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1657) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1658) ERASEINFO(0x04000,7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1659) ERASEINFO(0x02000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1660) ERASEINFO(0x08000,2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1661) ERASEINFO(0x10000,1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1662) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1663) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1664) .mfr_id = CFI_MFR_ST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1665) .dev_id = M29W400DB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1666) .name = "ST M29W400DB",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1667) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1668) .uaddr = MTD_UADDR_0x0AAA_0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1669) .dev_size = SIZE_512KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1670) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1671) .nr_regions = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1672) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1673) ERASEINFO(0x04000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1674) ERASEINFO(0x02000,2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1675) ERASEINFO(0x08000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1676) ERASEINFO(0x10000,7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1677) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1678) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1679) .mfr_id = CFI_MFR_ST, /* FIXME - CFI device? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1680) .dev_id = M29W160DT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1681) .name = "ST M29W160DT",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1682) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1683) .uaddr = MTD_UADDR_0x0555_0x02AA, /* ???? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1684) .dev_size = SIZE_2MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1685) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1686) .nr_regions = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1687) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1688) ERASEINFO(0x10000,31),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1689) ERASEINFO(0x08000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1690) ERASEINFO(0x02000,2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1691) ERASEINFO(0x04000,1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1692) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1693) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1694) .mfr_id = CFI_MFR_ST, /* FIXME - CFI device? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1695) .dev_id = M29W160DB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1696) .name = "ST M29W160DB",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1697) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1698) .uaddr = MTD_UADDR_0x0555_0x02AA, /* ???? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1699) .dev_size = SIZE_2MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1700) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1701) .nr_regions = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1702) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1703) ERASEINFO(0x04000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1704) ERASEINFO(0x02000,2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1705) ERASEINFO(0x08000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1706) ERASEINFO(0x10000,31)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1707) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1708) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1709) .mfr_id = CFI_MFR_ST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1710) .dev_id = M29W040B,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1711) .name = "ST M29W040B",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1712) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1713) .uaddr = MTD_UADDR_0x0555_0x02AA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1714) .dev_size = SIZE_512KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1715) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1716) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1717) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1718) ERASEINFO(0x10000,8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1719) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1720) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1721) .mfr_id = CFI_MFR_ST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1722) .dev_id = M50FW040,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1723) .name = "ST M50FW040",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1724) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1725) .uaddr = MTD_UADDR_UNNECESSARY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1726) .dev_size = SIZE_512KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1727) .cmd_set = P_ID_INTEL_EXT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1728) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1729) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1730) ERASEINFO(0x10000,8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1731) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1732) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1733) .mfr_id = CFI_MFR_ST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1734) .dev_id = M50FW080,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1735) .name = "ST M50FW080",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1736) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1737) .uaddr = MTD_UADDR_UNNECESSARY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1738) .dev_size = SIZE_1MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1739) .cmd_set = P_ID_INTEL_EXT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1740) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1741) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1742) ERASEINFO(0x10000,16),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1743) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1744) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1745) .mfr_id = CFI_MFR_ST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1746) .dev_id = M50FW016,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1747) .name = "ST M50FW016",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1748) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1749) .uaddr = MTD_UADDR_UNNECESSARY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1750) .dev_size = SIZE_2MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1751) .cmd_set = P_ID_INTEL_EXT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1752) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1753) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1754) ERASEINFO(0x10000,32),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1755) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1756) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1757) .mfr_id = CFI_MFR_ST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1758) .dev_id = M50LPW080,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1759) .name = "ST M50LPW080",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1760) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1761) .uaddr = MTD_UADDR_UNNECESSARY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1762) .dev_size = SIZE_1MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1763) .cmd_set = P_ID_INTEL_EXT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1764) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1765) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1766) ERASEINFO(0x10000,16),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1767) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1768) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1769) .mfr_id = CFI_MFR_ST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1770) .dev_id = M50FLW080A,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1771) .name = "ST M50FLW080A",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1772) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1773) .uaddr = MTD_UADDR_UNNECESSARY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1774) .dev_size = SIZE_1MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1775) .cmd_set = P_ID_INTEL_EXT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1776) .nr_regions = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1777) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1778) ERASEINFO(0x1000,16),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1779) ERASEINFO(0x10000,13),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1780) ERASEINFO(0x1000,16),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1781) ERASEINFO(0x1000,16),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1782) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1783) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1784) .mfr_id = CFI_MFR_ST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1785) .dev_id = M50FLW080B,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1786) .name = "ST M50FLW080B",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1787) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1788) .uaddr = MTD_UADDR_UNNECESSARY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1789) .dev_size = SIZE_1MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1790) .cmd_set = P_ID_INTEL_EXT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1791) .nr_regions = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1792) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1793) ERASEINFO(0x1000,16),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1794) ERASEINFO(0x1000,16),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1795) ERASEINFO(0x10000,13),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1796) ERASEINFO(0x1000,16),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1797) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1798) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1799) .mfr_id = 0xff00 | CFI_MFR_ST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1800) .dev_id = 0xff00 | PSD4256G6V,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1801) .name = "ST PSD4256G6V",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1802) .devtypes = CFI_DEVICETYPE_X16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1803) .uaddr = MTD_UADDR_0x0AAA_0x0554,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1804) .dev_size = SIZE_1MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1805) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1806) .nr_regions = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1807) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1808) ERASEINFO(0x10000,16),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1809) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1810) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1811) .mfr_id = CFI_MFR_TOSHIBA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1812) .dev_id = TC58FVT160,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1813) .name = "Toshiba TC58FVT160",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1814) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1815) .uaddr = MTD_UADDR_0x0AAA_0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1816) .dev_size = SIZE_2MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1817) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1818) .nr_regions = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1819) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1820) ERASEINFO(0x10000,31),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1821) ERASEINFO(0x08000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1822) ERASEINFO(0x02000,2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1823) ERASEINFO(0x04000,1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1824) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1825) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1826) .mfr_id = CFI_MFR_TOSHIBA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1827) .dev_id = TC58FVB160,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1828) .name = "Toshiba TC58FVB160",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1829) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1830) .uaddr = MTD_UADDR_0x0AAA_0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1831) .dev_size = SIZE_2MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1832) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1833) .nr_regions = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1834) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1835) ERASEINFO(0x04000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1836) ERASEINFO(0x02000,2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1837) ERASEINFO(0x08000,1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1838) ERASEINFO(0x10000,31)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1839) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1840) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1841) .mfr_id = CFI_MFR_TOSHIBA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1842) .dev_id = TC58FVB321,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1843) .name = "Toshiba TC58FVB321",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1844) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1845) .uaddr = MTD_UADDR_0x0AAA_0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1846) .dev_size = SIZE_4MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1847) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1848) .nr_regions = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1849) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1850) ERASEINFO(0x02000,8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1851) ERASEINFO(0x10000,63)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1852) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1853) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1854) .mfr_id = CFI_MFR_TOSHIBA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1855) .dev_id = TC58FVT321,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1856) .name = "Toshiba TC58FVT321",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1857) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1858) .uaddr = MTD_UADDR_0x0AAA_0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1859) .dev_size = SIZE_4MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1860) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1861) .nr_regions = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1862) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1863) ERASEINFO(0x10000,63),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1864) ERASEINFO(0x02000,8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1865) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1866) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1867) .mfr_id = CFI_MFR_TOSHIBA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1868) .dev_id = TC58FVB641,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1869) .name = "Toshiba TC58FVB641",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1870) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1871) .uaddr = MTD_UADDR_0x0AAA_0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1872) .dev_size = SIZE_8MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1873) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1874) .nr_regions = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1875) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1876) ERASEINFO(0x02000,8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1877) ERASEINFO(0x10000,127)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1878) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1879) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1880) .mfr_id = CFI_MFR_TOSHIBA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1881) .dev_id = TC58FVT641,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1882) .name = "Toshiba TC58FVT641",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1883) .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1884) .uaddr = MTD_UADDR_0x0AAA_0x0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1885) .dev_size = SIZE_8MiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1886) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1887) .nr_regions = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1888) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1889) ERASEINFO(0x10000,127),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1890) ERASEINFO(0x02000,8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1891) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1892) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1893) .mfr_id = CFI_MFR_WINBOND,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1894) .dev_id = W49V002A,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1895) .name = "Winbond W49V002A",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1896) .devtypes = CFI_DEVICETYPE_X8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1897) .uaddr = MTD_UADDR_0x5555_0x2AAA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1898) .dev_size = SIZE_256KiB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1899) .cmd_set = P_ID_AMD_STD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1900) .nr_regions = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1901) .regions = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1902) ERASEINFO(0x10000, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1903) ERASEINFO(0x08000, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1904) ERASEINFO(0x02000, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1905) ERASEINFO(0x04000, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1906) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1907) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1908) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1909)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1910) static inline u32 jedec_read_mfr(struct map_info *map, uint32_t base,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1911) struct cfi_private *cfi)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1912) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1913) map_word result;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1914) unsigned long mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1915) int bank = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1916)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1917) /* According to JEDEC "Standard Manufacturer's Identification Code"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1918) * (http://www.jedec.org/download/search/jep106W.pdf)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1919) * several first banks can contain 0x7f instead of actual ID
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1920) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1921) do {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1922) uint32_t ofs = cfi_build_cmd_addr(0 + (bank << 8), map, cfi);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1923) mask = (1 << (cfi->device_type * 8)) - 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1924) if (ofs >= map->size)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1925) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1926) result = map_read(map, base + ofs);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1927) bank++;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1928) } while ((result.x[0] & mask) == CFI_MFR_CONTINUATION);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1929)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1930) return result.x[0] & mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1931) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1932)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1933) static inline u32 jedec_read_id(struct map_info *map, uint32_t base,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1934) struct cfi_private *cfi)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1935) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1936) map_word result;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1937) unsigned long mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1938) u32 ofs = cfi_build_cmd_addr(1, map, cfi);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1939) mask = (1 << (cfi->device_type * 8)) -1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1940) result = map_read(map, base + ofs);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1941) return result.x[0] & mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1942) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1943)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1944) static void jedec_reset(u32 base, struct map_info *map, struct cfi_private *cfi)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1945) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1946) /* Reset */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1947)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1948) /* after checking the datasheets for SST, MACRONIX and ATMEL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1949) * (oh and incidentaly the jedec spec - 3.5.3.3) the reset
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1950) * sequence is *supposed* to be 0xaa at 0x5555, 0x55 at
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1951) * 0x2aaa, 0xF0 at 0x5555 this will not affect the AMD chips
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1952) * as they will ignore the writes and don't care what address
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1953) * the F0 is written to */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1954) if (cfi->addr_unlock1) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1955) pr_debug( "reset unlock called %x %x \n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1956) cfi->addr_unlock1,cfi->addr_unlock2);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1957) cfi_send_gen_cmd(0xaa, cfi->addr_unlock1, base, map, cfi, cfi->device_type, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1958) cfi_send_gen_cmd(0x55, cfi->addr_unlock2, base, map, cfi, cfi->device_type, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1959) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1960)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1961) cfi_send_gen_cmd(0xF0, cfi->addr_unlock1, base, map, cfi, cfi->device_type, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1962) /* Some misdesigned Intel chips do not respond for 0xF0 for a reset,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1963) * so ensure we're in read mode. Send both the Intel and the AMD command
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1964) * for this. Intel uses 0xff for this, AMD uses 0xff for NOP, so
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1965) * this should be safe.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1966) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1967) cfi_send_gen_cmd(0xFF, 0, base, map, cfi, cfi->device_type, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1968) /* FIXME - should have reset delay before continuing */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1969) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1970)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1971)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1972) static int cfi_jedec_setup(struct map_info *map, struct cfi_private *cfi, int index)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1973) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1974) int i,num_erase_regions;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1975) uint8_t uaddr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1976)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1977) if (!(jedec_table[index].devtypes & cfi->device_type)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1978) pr_debug("Rejecting potential %s with incompatible %d-bit device type\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1979) jedec_table[index].name, 4 * (1<<cfi->device_type));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1980) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1981) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1982)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1983) printk(KERN_INFO "Found: %s\n",jedec_table[index].name);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1984)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1985) num_erase_regions = jedec_table[index].nr_regions;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1986)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1987) cfi->cfiq = kmalloc(sizeof(struct cfi_ident) + num_erase_regions * 4, GFP_KERNEL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1988) if (!cfi->cfiq) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1989) //xx printk(KERN_WARNING "%s: kmalloc failed for CFI ident structure\n", map->name);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1990) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1991) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1992)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1993) memset(cfi->cfiq, 0, sizeof(struct cfi_ident));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1994)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1995) cfi->cfiq->P_ID = jedec_table[index].cmd_set;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1996) cfi->cfiq->NumEraseRegions = jedec_table[index].nr_regions;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1997) cfi->cfiq->DevSize = jedec_table[index].dev_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1998) cfi->cfi_mode = CFI_MODE_JEDEC;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1999) cfi->sector_erase_cmd = CMD(0x30);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2000)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2001) for (i=0; i<num_erase_regions; i++){
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2002) cfi->cfiq->EraseRegionInfo[i] = jedec_table[index].regions[i];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2003) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2004) cfi->cmdset_priv = NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2005)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2006) /* This may be redundant for some cases, but it doesn't hurt */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2007) cfi->mfr = jedec_table[index].mfr_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2008) cfi->id = jedec_table[index].dev_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2009)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2010) uaddr = jedec_table[index].uaddr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2011)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2012) /* The table has unlock addresses in _bytes_, and we try not to let
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2013) our brains explode when we see the datasheets talking about address
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2014) lines numbered from A-1 to A18. The CFI table has unlock addresses
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2015) in device-words according to the mode the device is connected in */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2016) cfi->addr_unlock1 = unlock_addrs[uaddr].addr1 / cfi->device_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2017) cfi->addr_unlock2 = unlock_addrs[uaddr].addr2 / cfi->device_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2018)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2019) return 1; /* ok */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2020) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2021)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2022)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2023) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2024) * There is a BIG problem properly ID'ing the JEDEC device and guaranteeing
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2025) * the mapped address, unlock addresses, and proper chip ID. This function
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2026) * attempts to minimize errors. It is doubtfull that this probe will ever
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2027) * be perfect - consequently there should be some module parameters that
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2028) * could be manually specified to force the chip info.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2029) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2030) static inline int jedec_match( uint32_t base,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2031) struct map_info *map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2032) struct cfi_private *cfi,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2033) const struct amd_flash_info *finfo )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2034) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2035) int rc = 0; /* failure until all tests pass */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2036) u32 mfr, id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2037) uint8_t uaddr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2038)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2039) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2040) * The IDs must match. For X16 and X32 devices operating in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2041) * a lower width ( X8 or X16 ), the device ID's are usually just
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2042) * the lower byte(s) of the larger device ID for wider mode. If
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2043) * a part is found that doesn't fit this assumption (device id for
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2044) * smaller width mode is completely unrealated to full-width mode)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2045) * then the jedec_table[] will have to be augmented with the IDs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2046) * for different widths.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2047) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2048) switch (cfi->device_type) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2049) case CFI_DEVICETYPE_X8:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2050) mfr = (uint8_t)finfo->mfr_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2051) id = (uint8_t)finfo->dev_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2052)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2053) /* bjd: it seems that if we do this, we can end up
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2054) * detecting 16bit flashes as an 8bit device, even though
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2055) * there aren't.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2056) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2057) if (finfo->dev_id > 0xff) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2058) pr_debug("%s(): ID is not 8bit\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2059) __func__);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2060) goto match_done;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2061) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2062) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2063) case CFI_DEVICETYPE_X16:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2064) mfr = (uint16_t)finfo->mfr_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2065) id = (uint16_t)finfo->dev_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2066) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2067) case CFI_DEVICETYPE_X32:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2068) mfr = (uint16_t)finfo->mfr_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2069) id = (uint32_t)finfo->dev_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2070) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2071) default:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2072) printk(KERN_WARNING
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2073) "MTD %s(): Unsupported device type %d\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2074) __func__, cfi->device_type);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2075) goto match_done;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2076) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2077) if ( cfi->mfr != mfr || cfi->id != id ) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2078) goto match_done;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2079) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2080)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2081) /* the part size must fit in the memory window */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2082) pr_debug("MTD %s(): Check fit 0x%.8x + 0x%.8x = 0x%.8x\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2083) __func__, base, 1 << finfo->dev_size, base + (1 << finfo->dev_size) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2084) if ( base + cfi_interleave(cfi) * ( 1 << finfo->dev_size ) > map->size ) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2085) pr_debug("MTD %s(): 0x%.4x 0x%.4x %dKiB doesn't fit\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2086) __func__, finfo->mfr_id, finfo->dev_id,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2087) 1 << finfo->dev_size );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2088) goto match_done;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2089) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2090)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2091) if (! (finfo->devtypes & cfi->device_type))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2092) goto match_done;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2093)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2094) uaddr = finfo->uaddr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2095)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2096) pr_debug("MTD %s(): check unlock addrs 0x%.4x 0x%.4x\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2097) __func__, cfi->addr_unlock1, cfi->addr_unlock2 );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2098) if ( MTD_UADDR_UNNECESSARY != uaddr && MTD_UADDR_DONT_CARE != uaddr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2099) && ( unlock_addrs[uaddr].addr1 / cfi->device_type != cfi->addr_unlock1 ||
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2100) unlock_addrs[uaddr].addr2 / cfi->device_type != cfi->addr_unlock2 ) ) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2101) pr_debug("MTD %s(): 0x%.4x 0x%.4x did not match\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2102) __func__,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2103) unlock_addrs[uaddr].addr1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2104) unlock_addrs[uaddr].addr2);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2105) goto match_done;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2106) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2107)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2108) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2109) * Make sure the ID's disappear when the device is taken out of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2110) * ID mode. The only time this should fail when it should succeed
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2111) * is when the ID's are written as data to the same
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2112) * addresses. For this rare and unfortunate case the chip
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2113) * cannot be probed correctly.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2114) * FIXME - write a driver that takes all of the chip info as
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2115) * module parameters, doesn't probe but forces a load.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2116) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2117) pr_debug("MTD %s(): check ID's disappear when not in ID mode\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2118) __func__ );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2119) jedec_reset( base, map, cfi );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2120) mfr = jedec_read_mfr( map, base, cfi );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2121) id = jedec_read_id( map, base, cfi );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2122) if ( mfr == cfi->mfr && id == cfi->id ) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2123) pr_debug("MTD %s(): ID 0x%.2x:0x%.2x did not change after reset:\n"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2124) "You might need to manually specify JEDEC parameters.\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2125) __func__, cfi->mfr, cfi->id );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2126) goto match_done;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2127) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2128)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2129) /* all tests passed - mark as success */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2130) rc = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2131)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2132) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2133) * Put the device back in ID mode - only need to do this if we
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2134) * were truly frobbing a real device.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2135) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2136) pr_debug("MTD %s(): return to ID mode\n", __func__ );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2137) if (cfi->addr_unlock1) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2138) cfi_send_gen_cmd(0xaa, cfi->addr_unlock1, base, map, cfi, cfi->device_type, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2139) cfi_send_gen_cmd(0x55, cfi->addr_unlock2, base, map, cfi, cfi->device_type, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2140) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2141) cfi_send_gen_cmd(0x90, cfi->addr_unlock1, base, map, cfi, cfi->device_type, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2142) /* FIXME - should have a delay before continuing */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2143)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2144) match_done:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2145) return rc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2146) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2147)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2148)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2149) static int jedec_probe_chip(struct map_info *map, __u32 base,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2150) unsigned long *chip_map, struct cfi_private *cfi)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2151) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2152) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2153) enum uaddr uaddr_idx = MTD_UADDR_NOT_SUPPORTED;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2154) u32 probe_offset1, probe_offset2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2155)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2156) retry:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2157) if (!cfi->numchips) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2158) uaddr_idx++;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2159)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2160) if (MTD_UADDR_UNNECESSARY == uaddr_idx)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2161) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2162)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2163) cfi->addr_unlock1 = unlock_addrs[uaddr_idx].addr1 / cfi->device_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2164) cfi->addr_unlock2 = unlock_addrs[uaddr_idx].addr2 / cfi->device_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2165) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2166)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2167) /* Make certain we aren't probing past the end of map */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2168) if (base >= map->size) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2169) printk(KERN_NOTICE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2170) "Probe at base(0x%08x) past the end of the map(0x%08lx)\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2171) base, map->size -1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2172) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2173)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2174) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2175) /* Ensure the unlock addresses we try stay inside the map */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2176) probe_offset1 = cfi_build_cmd_addr(cfi->addr_unlock1, map, cfi);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2177) probe_offset2 = cfi_build_cmd_addr(cfi->addr_unlock2, map, cfi);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2178) if ( ((base + probe_offset1 + map_bankwidth(map)) >= map->size) ||
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2179) ((base + probe_offset2 + map_bankwidth(map)) >= map->size))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2180) goto retry;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2181)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2182) /* Reset */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2183) jedec_reset(base, map, cfi);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2184)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2185) /* Autoselect Mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2186) if(cfi->addr_unlock1) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2187) cfi_send_gen_cmd(0xaa, cfi->addr_unlock1, base, map, cfi, cfi->device_type, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2188) cfi_send_gen_cmd(0x55, cfi->addr_unlock2, base, map, cfi, cfi->device_type, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2189) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2190) cfi_send_gen_cmd(0x90, cfi->addr_unlock1, base, map, cfi, cfi->device_type, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2191) /* FIXME - should have a delay before continuing */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2192)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2193) if (!cfi->numchips) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2194) /* This is the first time we're called. Set up the CFI
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2195) stuff accordingly and return */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2196)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2197) cfi->mfr = jedec_read_mfr(map, base, cfi);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2198) cfi->id = jedec_read_id(map, base, cfi);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2199) pr_debug("Search for id:(%02x %02x) interleave(%d) type(%d)\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2200) cfi->mfr, cfi->id, cfi_interleave(cfi), cfi->device_type);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2201) for (i = 0; i < ARRAY_SIZE(jedec_table); i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2202) if ( jedec_match( base, map, cfi, &jedec_table[i] ) ) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2203) pr_debug("MTD %s(): matched device 0x%x,0x%x unlock_addrs: 0x%.4x 0x%.4x\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2204) __func__, cfi->mfr, cfi->id,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2205) cfi->addr_unlock1, cfi->addr_unlock2 );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2206) if (!cfi_jedec_setup(map, cfi, i))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2207) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2208) goto ok_out;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2209) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2210) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2211) goto retry;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2212) } else {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2213) uint16_t mfr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2214) uint16_t id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2215)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2216) /* Make sure it is a chip of the same manufacturer and id */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2217) mfr = jedec_read_mfr(map, base, cfi);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2218) id = jedec_read_id(map, base, cfi);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2219)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2220) if ((mfr != cfi->mfr) || (id != cfi->id)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2221) printk(KERN_DEBUG "%s: Found different chip or no chip at all (mfr 0x%x, id 0x%x) at 0x%x\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2222) map->name, mfr, id, base);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2223) jedec_reset(base, map, cfi);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2224) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2225) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2226) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2227)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2228) /* Check each previous chip locations to see if it's an alias */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2229) for (i=0; i < (base >> cfi->chipshift); i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2230) unsigned long start;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2231) if(!test_bit(i, chip_map)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2232) continue; /* Skip location; no valid chip at this address */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2233) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2234) start = i << cfi->chipshift;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2235) if (jedec_read_mfr(map, start, cfi) == cfi->mfr &&
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2236) jedec_read_id(map, start, cfi) == cfi->id) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2237) /* Eep. This chip also looks like it's in autoselect mode.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2238) Is it an alias for the new one? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2239) jedec_reset(start, map, cfi);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2240)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2241) /* If the device IDs go away, it's an alias */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2242) if (jedec_read_mfr(map, base, cfi) != cfi->mfr ||
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2243) jedec_read_id(map, base, cfi) != cfi->id) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2244) printk(KERN_DEBUG "%s: Found an alias at 0x%x for the chip at 0x%lx\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2245) map->name, base, start);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2246) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2247) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2248)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2249) /* Yes, it's actually got the device IDs as data. Most
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2250) * unfortunate. Stick the new chip in read mode
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2251) * too and if it's the same, assume it's an alias. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2252) /* FIXME: Use other modes to do a proper check */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2253) jedec_reset(base, map, cfi);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2254) if (jedec_read_mfr(map, base, cfi) == cfi->mfr &&
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2255) jedec_read_id(map, base, cfi) == cfi->id) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2256) printk(KERN_DEBUG "%s: Found an alias at 0x%x for the chip at 0x%lx\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2257) map->name, base, start);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2258) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2259) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2260) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2261) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2262)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2263) /* OK, if we got to here, then none of the previous chips appear to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2264) be aliases for the current one. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2265) set_bit((base >> cfi->chipshift), chip_map); /* Update chip map */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2266) cfi->numchips++;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2267)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2268) ok_out:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2269) /* Put it back into Read Mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2270) jedec_reset(base, map, cfi);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2271)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2272) printk(KERN_INFO "%s: Found %d x%d devices at 0x%x in %d-bit bank\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2273) map->name, cfi_interleave(cfi), cfi->device_type*8, base,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2274) map->bankwidth*8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2275)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2276) return 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2277) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2278)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2279) static struct chip_probe jedec_chip_probe = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2280) .name = "JEDEC",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2281) .probe_chip = jedec_probe_chip
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2282) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2283)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2284) static struct mtd_info *jedec_probe(struct map_info *map)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2285) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2286) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2287) * Just use the generic probe stuff to call our CFI-specific
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2288) * chip_probe routine in all the possible permutations, etc.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2289) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2290) return mtd_do_chip_probe(map, &jedec_chip_probe);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2291) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2292)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2293) static struct mtd_chip_driver jedec_chipdrv = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2294) .probe = jedec_probe,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2295) .name = "jedec_probe",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2296) .module = THIS_MODULE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2297) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2298)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2299) static int __init jedec_probe_init(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2300) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2301) register_mtd_chip_driver(&jedec_chipdrv);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2302) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2303) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2304)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2305) static void __exit jedec_probe_exit(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2306) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2307) unregister_mtd_chip_driver(&jedec_chipdrv);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2308) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2309)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2310) module_init(jedec_probe_init);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2311) module_exit(jedec_probe_exit);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2312)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2313) MODULE_LICENSE("GPL");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2314) MODULE_AUTHOR("Erwin Authried <eauth@softsys.co.at> et al.");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2315) MODULE_DESCRIPTION("Probe code for JEDEC-compliant flash chips");