diff options
Diffstat (limited to 'firmware/drivers/nand_id.c')
-rw-r--r-- | firmware/drivers/nand_id.c | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/firmware/drivers/nand_id.c b/firmware/drivers/nand_id.c index f2b9861c7c..56132ab090 100644 --- a/firmware/drivers/nand_id.c +++ b/firmware/drivers/nand_id.c | |||
@@ -34,27 +34,38 @@ static const struct nand_info samsung[] = | |||
34 | /* | 34 | /* |
35 | id1, id2 | 35 | id1, id2 |
36 | pages/block, blocks, page_size, spare_size, col_cycles, row_cycles, planes | 36 | pages/block, blocks, page_size, spare_size, col_cycles, row_cycles, planes |
37 | */ | 37 | */ |
38 | {0xDC, 0x10, /* K9F4G08UOM */ | 38 | {0xDC, 0x10, /* K9F4G08UOM */ |
39 | 64, 4096, 2048, 64, 2, 3, 1 }, | 39 | 64, 4096, 2048, 64, 2, 3, 1 }, |
40 | 40 | ||
41 | {0xD3, 0x51, /* K9K8G08UOM */ | 41 | {0xD3, 0x51, /* K9K8G08UOM */ |
42 | 64, 8192, 2048, 64, 2, 3, 1 }, | 42 | 64, 8192, 2048, 64, 2, 3, 1 }, |
43 | 43 | ||
44 | {0xD5, 0x14, /* K9GAG08UOM */ | 44 | {0xD5, 0x14, /* K9GAG08UOM */ |
45 | 128, 4096, 4096, 128, 2, 3, 2 }, | 45 | 128, 4096, 4096, 128, 2, 3, 2 }, |
46 | 46 | ||
47 | {0xD5, 0x55, /* K9LAG08UOM, K9HBG08U1M, K9MCG08U5M */ | 47 | {0xD5, 0x55, /* K9LAG08UOM, K9HBG08U1M, K9MCG08U5M */ |
48 | 128, 8192, 2048, 64, 2, 3, 4 }, | 48 | 128, 8192, 2048, 64, 2, 3, 4 }, |
49 | 49 | ||
50 | {0xD7, 0x55, /* K9LBG08UOM */ | 50 | {0xD7, 0x55, /* K9LBG08UOM */ |
51 | 128, 8192, 4096, 128, 2, 3, 4 }, | 51 | 128, 8192, 4096, 128, 2, 3, 4 }, |
52 | }; | 52 | }; |
53 | 53 | ||
54 | static const struct nand_info gigadevice[] = | ||
55 | { | ||
56 | /* | ||
57 | id1, id2 | ||
58 | pages/block, blocks, page_size, spare_size, col_cycles, row_cycles, planes | ||
59 | */ | ||
60 | {0xB1, 0x80, /* MD5N01G51MSD1B */ | ||
61 | 64, 1024, 2048, 64, 2, 2, 1 }, | ||
62 | }; | ||
63 | |||
54 | #define NI(id, x) {id, (struct nand_info*)x, (sizeof(x)/sizeof(struct nand_info))} | 64 | #define NI(id, x) {id, (struct nand_info*)x, (sizeof(x)/sizeof(struct nand_info))} |
55 | static const struct nand_manufacturer all[] = | 65 | static const struct nand_manufacturer all[] = |
56 | { | 66 | { |
57 | NI(0xEC, samsung), | 67 | NI(0xEC, samsung), |
68 | NI(0x98, gigadevice), | ||
58 | }; | 69 | }; |
59 | 70 | ||
60 | // ----------------------------------------------------------------------------- | 71 | // ----------------------------------------------------------------------------- |
@@ -63,7 +74,7 @@ struct nand_info* nand_identify(unsigned char data[5]) | |||
63 | { | 74 | { |
64 | unsigned int i; | 75 | unsigned int i; |
65 | int found = -1; | 76 | int found = -1; |
66 | 77 | ||
67 | for(i = 0; i < (sizeof(all)/sizeof(struct nand_manufacturer)); i++) | 78 | for(i = 0; i < (sizeof(all)/sizeof(struct nand_manufacturer)); i++) |
68 | { | 79 | { |
69 | if(data[0] == all[i].id) | 80 | if(data[0] == all[i].id) |
@@ -72,16 +83,16 @@ struct nand_info* nand_identify(unsigned char data[5]) | |||
72 | break; | 83 | break; |
73 | } | 84 | } |
74 | } | 85 | } |
75 | 86 | ||
76 | if(found < 0) | 87 | if(found < 0) |
77 | return NULL; | 88 | return NULL; |
78 | 89 | ||
79 | for(i = 0; i < all[found].total; i++) | 90 | for(i = 0; i < all[found].total; i++) |
80 | { | 91 | { |
81 | if(data[1] == all[found].info[i].dev_id && | 92 | if(data[1] == all[found].info[i].dev_id && |
82 | data[2] == all[found].info[i].dev_id2) | 93 | data[2] == all[found].info[i].dev_id2) |
83 | return &all[found].info[i]; | 94 | return &all[found].info[i]; |
84 | } | 95 | } |
85 | 96 | ||
86 | return NULL; | 97 | return NULL; |
87 | } | 98 | } |