FreeCalypso > hg > freecalypso-tools
comparison loadtools/flashid.c @ 916:54a0bc149d9c
fc-loadtool: add support for Samsung K5L29xx_A flash
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 30 Dec 2022 21:07:30 +0000 |
parents | f229efbfd581 |
children | 7c18eac91457 |
comparison
equal
deleted
inserted
replaced
915:71edc12b1aa7 | 916:54a0bc149d9c |
---|---|
18 extern struct flash_device flashdev_PL032J; | 18 extern struct flash_device flashdev_PL032J; |
19 extern struct flash_device flashdev_PL129J; | 19 extern struct flash_device flashdev_PL129J; |
20 extern struct flash_device flashdev_PL129N; | 20 extern struct flash_device flashdev_PL129N; |
21 extern struct flash_device flashdev_K5A32xx_T; | 21 extern struct flash_device flashdev_K5A32xx_T; |
22 extern struct flash_device flashdev_K5L33xx_A; | 22 extern struct flash_device flashdev_K5L33xx_A; |
23 extern struct flash_device flashdev_K5L29xx_A; | |
23 | 24 |
24 extern int flash_global_config; | 25 extern int flash_global_config; |
25 extern struct flash_bank_info flash_bank_info[2]; | 26 extern struct flash_bank_info flash_bank_info[2]; |
26 | 27 |
27 static | 28 static |
51 printf("Appears to be %s or compatible, checking CFI\n", dev->name); | 52 printf("Appears to be %s or compatible, checking CFI\n", dev->name); |
52 if (do_w16(bi->base_addr + 0xAA, 0x98)) { | 53 if (do_w16(bi->base_addr + 0xAA, 0x98)) { |
53 fprintf(stderr, "unexpected response to w16 - aborting\n"); | 54 fprintf(stderr, "unexpected response to w16 - aborting\n"); |
54 return(-1); | 55 return(-1); |
55 } | 56 } |
57 rc = run_cfi_check(bi, dev->cfi_table); | |
58 if (rc < 0) | |
59 return(rc); | |
60 if (!rc) { | |
61 fprintf(stderr, "Error: CFI mismatch, unsafe to continue\n"); | |
62 return(-1); | |
63 } | |
64 printf("Confirmed %s or compatible\n", dev->name); | |
65 bi->device = dev; | |
66 return(0); | |
67 } | |
68 | |
69 static | |
70 try_device_amdreset(bi, dev) | |
71 struct flash_bank_info *bi; | |
72 struct flash_device *dev; | |
73 { | |
74 int rc; | |
75 | |
76 printf("Appears to be %s or compatible, checking CFI\n", dev->name); | |
77 /* need to go back to read array first, CFI cmd ignored otherwise */ | |
78 if (do_w16(bi->base_addr + 0xAAA, 0xF0)) { | |
79 bad_w16: fprintf(stderr, "unexpected response to w16 - aborting\n"); | |
80 return(-1); | |
81 } | |
82 if (do_w16(bi->base_addr + 0xAA, 0x98)) | |
83 goto bad_w16; | |
56 rc = run_cfi_check(bi, dev->cfi_table); | 84 rc = run_cfi_check(bi, dev->cfi_table); |
57 if (rc < 0) | 85 if (rc < 0) |
58 return(rc); | 86 return(rc); |
59 if (!rc) { | 87 if (!rc) { |
60 fprintf(stderr, "Error: CFI mismatch, unsafe to continue\n"); | 88 fprintf(stderr, "Error: CFI mismatch, unsafe to continue\n"); |
133 if (do_r16(bi->base_addr + 0x1E, &ext2) < 0) | 161 if (do_r16(bi->base_addr + 0x1E, &ext2) < 0) |
134 return(-1); | 162 return(-1); |
135 printf("Extended ID: %04X %04X\n", ext1, ext2); | 163 printf("Extended ID: %04X %04X\n", ext1, ext2); |
136 if (ext1 == 0x2503 && ext2 == 0x2501) | 164 if (ext1 == 0x2503 && ext2 == 0x2501) |
137 return try_device(bi, &flashdev_K5L33xx_A); | 165 return try_device(bi, &flashdev_K5L33xx_A); |
166 if (ext1 == 0x2508 && ext2 == 0x2501) | |
167 return try_device_amdreset(bi, &flashdev_K5L29xx_A); | |
138 fprintf(stderr, "Error: unknown device ID\n"); | 168 fprintf(stderr, "Error: unknown device ID\n"); |
139 return(-1); | 169 return(-1); |
140 } | 170 } |
141 | 171 |
142 static struct idmap { | 172 static struct idmap { |