@@ -151,6 +151,7 @@ static int spic_transfer(const u8 *cmd, int n_cmd, u8 *buf, int n_buf, int flag)
151151 ra_or (RT2880_SPI0_CTL_REG , SPICTL_STARTRD );
152152 if (n_cmd != 1 && (retval & 0xffff ) == 0 ) {
153153 printf ("." );
154+ //smart7688_led_blink();
154155 }
155156 if (spic_busy_wait ()) {
156157 printf ("\n" );
@@ -244,35 +245,45 @@ struct chip_info *spi_chip_info = NULL;
244245
245246static struct chip_info chips_data [] = {
246247 /* REVISIT: fill in JEDEC ids, for parts that have them */
247- { "AT25DF321" , 0x1f , 0x47000000 , 64 * 1024 , 64 , 0 },
248- { "AT26DF161" , 0x1f , 0x46000000 , 64 * 1024 , 32 , 0 },
249- { "FL016AIF" , 0x01 , 0x02140000 , 64 * 1024 , 32 , 0 },
250- { "FL064AIF" , 0x01 , 0x02160000 , 64 * 1024 , 128 , 0 },
251- { "MX25L1605D" , 0xc2 , 0x2015c220 , 64 * 1024 , 32 , 0 },
252- { "MX25L3205D" , 0xc2 , 0x2016c220 , 64 * 1024 , 64 , 0 },
253- { "MX25L6405D" , 0xc2 , 0x2017c220 , 64 * 1024 , 128 , 0 },
254- { "MX25L12805D" , 0xc2 , 0x2018c220 , 64 * 1024 , 256 , 0 },
255- { "MX25L25635E" , 0xc2 , 0x2019c220 , 64 * 1024 , 512 , 1 },
256- { "S25FL256S" , 0x01 , 0x02194D01 , 64 * 1024 , 512 , 1 },
257- { "S25FL128P" , 0x01 , 0x20180301 , 64 * 1024 , 256 , 0 },
258- { "S25FL164K" , 0x01 , 0x40170140 , 64 * 1024 , 128 , 0 },
259- { "S25FL132K" , 0x01 , 0x40160140 , 64 * 1024 , 64 , 0 },
260- { "S25FL129P" , 0x01 , 0x20184D01 , 64 * 1024 , 256 , 0 },
261- { "S25FL032P" , 0x01 , 0x02154D00 , 64 * 1024 , 64 , 0 },
262- { "S25FL064P" , 0x01 , 0x02164D00 , 64 * 1024 , 128 , 0 },
263- { "F25L64QA" , 0x8c , 0x41178c41 , 64 * 1024 , 128 , 0 }, //ESMT
248+ { "AT25DF321" , 0x1f , 0x47000000 , 64 * 1024 , 64 , 0 },
249+ { "AT26DF161" , 0x1f , 0x46000000 , 64 * 1024 , 32 , 0 },
250+ { "FL016AIF" , 0x01 , 0x02140000 , 64 * 1024 , 32 , 0 },
251+ { "FL064AIF" , 0x01 , 0x02160000 , 64 * 1024 , 128 , 0 },
252+ { "MX25L1605D" , 0xc2 , 0x2015c220 , 64 * 1024 , 32 , 0 },//MX25L1606E
253+ { "MX25L3205D" , 0xc2 , 0x2016c220 , 64 * 1024 , 64 , 0 },//MX25L3233F
254+ { "MX25L6405D" , 0xc2 , 0x2017c220 , 64 * 1024 , 128 , 0 },//MX25L6433F
255+ { "MX25L12805D" , 0xc2 , 0x2018c220 , 64 * 1024 , 256 , 0 },//MX25L12835F
256+ { "MX25L25635E" , 0xc2 , 0x2019c220 , 64 * 1024 , 512 , 1 },//MX25L25635F
257+ { "MX25L51245G" , 0xc2 , 0x201ac220 , 64 * 1024 , 1024 , 1 },
258+ { "S25FL256S" , 0x01 , 0x02194D01 , 64 * 1024 , 512 , 1 },
259+ { "S25FL128P" , 0x01 , 0x20180301 , 64 * 1024 , 256 , 0 },
260+ { "S25FL129P" , 0x01 , 0x20184D01 , 64 * 1024 , 256 , 0 },
261+ { "S25FL164K" , 0x01 , 0x40170140 , 64 * 1024 , 128 , 0 },
262+ { "S25FL132K" , 0x01 , 0x40160140 , 64 * 1024 , 64 , 0 },
263+ { "S25FL032P" , 0x01 , 0x02154D00 , 64 * 1024 , 64 , 0 },
264+ { "S25FL064P" , 0x01 , 0x02164D00 , 64 * 1024 , 128 , 0 },
265+ { "S25FL116K" , 0x01 , 0x40150140 , 64 * 1024 , 32 , 0 },
266+ { "F25L64QA" , 0x8c , 0x41170000 , 64 * 1024 , 128 , 0 }, //ESMT
264267 { "F25L32QA" , 0x8c , 0x41168c41 , 64 * 1024 , 64 , 0 }, //ESMT
265- { "EN25F16" , 0x1c , 0x31151c31 , 64 * 1024 , 32 , 0 },
266- { "EN25F32" , 0x1c , 0x31161c31 , 64 * 1024 , 64 , 0 },
267- { "EN25Q32" , 0x1c , 0x30161c30 , 64 * 1024 , 64 , 0 },
268- { "EN25F64" , 0x1c , 0x20171c20 , 64 * 1024 , 128 , 0 }, //EN25P64
269- { "EN25Q64" , 0x1c , 0x30171c30 , 64 * 1024 , 128 , 0 },
270- { "W25Q32BV" , 0xef , 0x40160000 , 64 * 1024 , 64 , 0 },
271- { "W25Q64BV" , 0xef , 0x40170000 , 64 * 1024 , 128 , 0 }, //S25FL064K
272- { "W25Q128BV" , 0xef , 0x40180000 , 64 * 1024 , 256 , 0 },
273- { "GD25Q32B" , 0xC8 , 0x40160000 , 64 * 1024 , 64 , 0 },
274- { "GD25Q64B" , 0xC8 , 0x40170000 , 64 * 1024 , 128 , 0 },
275- { "GD25Q128C" , 0xC8 , 0x40180000 , 64 * 1024 , 256 , 0 },
268+ { "EN25F16" , 0x1c , 0x31151c31 , 64 * 1024 , 32 , 0 },
269+ { "EN25Q32B" , 0x1c , 0x30161c30 , 64 * 1024 , 64 , 0 },
270+ { "EN25F32" , 0x1c , 0x31161c31 , 64 * 1024 , 64 , 0 },
271+ { "EN25F64" , 0x1c , 0x20171c20 , 64 * 1024 , 128 , 0 }, // EN25P64
272+ { "EN25Q64" , 0x1c , 0x30171c30 , 64 * 1024 , 128 , 0 },
273+ { "W25Q32BV" , 0xef , 0x40160000 , 64 * 1024 , 64 , 0 },//W25Q32FV
274+ { "W25X32VS" , 0xef , 0x30160000 , 64 * 1024 , 64 , 0 },
275+ { "W25Q64BV" , 0xef , 0x40170000 , 64 * 1024 , 128 , 0 }, //S25FL064K //W25Q64FV
276+ { "W25Q128BV" , 0xef , 0x40180000 , 64 * 1024 , 256 , 0 },//W25Q128FV
277+ { "W25Q256FV" , 0xef , 0x40190000 , 64 * 1024 , 512 , 1 },
278+ { "N25Q032A13ESE40F" , 0x20 , 0xba161000 , 64 * 1024 , 64 , 0 },
279+ { "N25Q064A13ESE40F" , 0x20 , 0xba171000 , 64 * 1024 , 128 , 0 },
280+ { "N25Q128A13ESE40F" , 0x20 , 0xba181000 , 64 * 1024 , 256 , 0 },
281+ { "N25Q256A" , 0x20 , 0xba191000 , 64 * 1024 , 512 , 1 },
282+ { "MT25QL512AB" , 0x20 , 0xba201044 , 64 * 1024 , 1024 , 1 },
283+ { "GD25Q32B" , 0xC8 , 0x40160000 , 64 * 1024 , 64 , 0 },
284+ { "GD25Q64B" , 0xC8 , 0x40170000 , 64 * 1024 , 128 , 0 },
285+ { "GD25Q128C" , 0xC8 , 0x40180000 , 64 * 1024 , 256 , 0 },
286+
276287};
277288
278289
@@ -795,6 +806,13 @@ static int raspi_4byte_mode(int enable)
795806 }
796807 retval = bbu_spic_trans (code , 0 , NULL , 1 , 0 , 0 );
797808#endif
809+ // for Winbond's W25Q256FV, need to clear extend address register
810+ if ((!enable ) && (spi_chip_info -> id == 0xef ))
811+ {
812+ u8 code = 0x0 ;
813+ raspi_write_enable ();
814+ raspi_write_rg (0xc5 , & code );
815+ }
798816 if (retval != 0 ) {
799817 printf ("%s: ret: %x\n" , __func__ , retval );
800818 return -1 ;
@@ -1023,6 +1041,7 @@ int raspi_erase(unsigned int offs, int len)
10231041 offs += spi_chip_info -> sector_size ;
10241042 len -= spi_chip_info -> sector_size ;
10251043 printf ("." );
1044+ //smart7688_led_blink();
10261045 }
10271046 printf ("\n" );
10281047
@@ -1284,8 +1303,10 @@ int raspi_write(char *buf, unsigned int to, int len)
12841303#endif
12851304
12861305 //printf("%s:: to:%x page_size:%x ret:%x\n", __func__, to, page_size, rc);
1287- if ((retlen & 0xffff ) == 0 )
1306+ if ((retlen & 0xffff ) == 0 ) {
12881307 printf ("." );
1308+ //smart7688_led_blink();
1309+ }
12891310
12901311 if (rc > 0 ) {
12911312 retlen += rc ;
0 commit comments