Lines Matching +full:0 +full:x0216

57 #define	FL_NONE			0x00
58 #define FL_ERASE_4K 0x01
59 #define FL_ERASE_32K 0x02
60 #define FL_ENABLE_4B_ADDR 0x04
61 #define FL_DISABLE_4B_ADDR 0x08
96 #define TSTATE_STOPPED 0
118 { "en25f32", 0x1c, 0x3116, 64 * 1024, 64, FL_NONE },
119 { "en25p32", 0x1c, 0x2016, 64 * 1024, 64, FL_NONE },
120 { "en25p64", 0x1c, 0x2017, 64 * 1024, 128, FL_NONE },
121 { "en25q32", 0x1c, 0x3016, 64 * 1024, 64, FL_NONE },
122 { "en25q64", 0x1c, 0x3017, 64 * 1024, 128, FL_ERASE_4K },
123 { "m25p32", 0x20, 0x2016, 64 * 1024, 64, FL_NONE },
124 { "m25p64", 0x20, 0x2017, 64 * 1024, 128, FL_NONE },
125 { "mx25l1606e", 0xc2, 0x2015, 64 * 1024, 32, FL_ERASE_4K},
126 { "mx25ll32", 0xc2, 0x2016, 64 * 1024, 64, FL_NONE },
127 { "mx25ll64", 0xc2, 0x2017, 64 * 1024, 128, FL_NONE },
128 { "mx25ll128", 0xc2, 0x2018, 64 * 1024, 256, FL_ERASE_4K | FL_ERASE_32K },
129 { "mx25ll256", 0xc2, 0x2019, 64 * 1024, 512, FL_ERASE_4K | FL_ERASE_32K | FL_ENABLE_4B_ADDR },
130 { "n25q64", 0x20, 0xba17, 64 * 1024, 128, FL_ERASE_4K },
131 { "s25fl032", 0x01, 0x0215, 64 * 1024, 64, FL_NONE },
132 { "s25fl064", 0x01, 0x0216, 64 * 1024, 128, FL_NONE },
133 { "s25fl128", 0x01, 0x2018, 64 * 1024, 256, FL_NONE },
134 { "s25fl256s", 0x01, 0x0219, 64 * 1024, 512, FL_NONE },
135 { "s25fl512s", 0x01, 0x0220, 64 * 1024, 1024, FL_NONE },
136 { "SST25VF010A", 0xbf, 0x2549, 4 * 1024, 32, FL_ERASE_4K | FL_ERASE_32K },
137 { "SST25VF032B", 0xbf, 0x254a, 64 * 1024, 64, FL_ERASE_4K | FL_ERASE_32K },
140 { "w25x32", 0xef, 0x3016, 64 * 1024, 64, FL_ERASE_4K },
141 { "w25x64", 0xef, 0x3017, 64 * 1024, 128, FL_ERASE_4K },
142 { "w25q32", 0xef, 0x4016, 64 * 1024, 64, FL_ERASE_4K },
143 { "w25q64", 0xef, 0x4017, 64 * 1024, 128, FL_ERASE_4K },
144 { "w25q64bv", 0xef, 0x4017, 64 * 1024, 128, FL_ERASE_4K },
145 { "w25q128", 0xef, 0x4018, 64 * 1024, 256, FL_ERASE_4K },
146 { "w25q256", 0xef, 0x4019, 64 * 1024, 512, FL_ERASE_4K },
149 { "at25df641", 0x1f, 0x4800, 64 * 1024, 128, FL_ERASE_4K },
152 { "gd25q64", 0xc8, 0x4017, 64 * 1024, 128, FL_ERASE_4K },
153 { "gd25q128", 0xc8, 0x4018, 64 * 1024, 256, FL_ERASE_4K },
156 { "is25wp256", 0x9d, 0x7019, 64 * 1024, 512, FL_ERASE_4K | FL_ENABLE_4B_ADDR},
166 memset(&cmd, 0, sizeof(cmd)); in mx25l_wait_for_device_ready()
169 txBuf[0] = CMD_READ_STATUS; in mx25l_wait_for_device_ready()
175 } while (err == 0 && (rxBuf[1] & STATUS_WIP)); in mx25l_wait_for_device_ready()
189 memset(&cmd, 0, sizeof(cmd)); in mx25l_get_device_ident()
190 memset(txBuf, 0, sizeof(txBuf)); in mx25l_get_device_ident()
191 memset(rxBuf, 0, sizeof(rxBuf)); in mx25l_get_device_ident()
193 txBuf[0] = CMD_READ_IDENT; in mx25l_get_device_ident()
209 for (i = 0; i < nitems(flash_devices); i++) { in mx25l_get_device_ident()
228 memset(&cmd, 0, sizeof(cmd)); in mx25l_set_writable()
229 memset(txBuf, 0, sizeof(txBuf)); in mx25l_set_writable()
230 memset(rxBuf, 0, sizeof(rxBuf)); in mx25l_set_writable()
232 txBuf[0] = writable ? CMD_WRITE_ENABLE : CMD_WRITE_DISABLE; in mx25l_set_writable()
248 if ((err = mx25l_set_writable(sc, 1)) != 0) in mx25l_erase_cmd()
251 memset(&cmd, 0, sizeof(cmd)); in mx25l_erase_cmd()
252 memset(txBuf, 0, sizeof(txBuf)); in mx25l_erase_cmd()
253 memset(rxBuf, 0, sizeof(rxBuf)); in mx25l_erase_cmd()
259 txBuf[0] = CMD_BLOCK_4K_ERASE; in mx25l_erase_cmd()
261 txBuf[0] = CMD_BLOCK_32K_ERASE; in mx25l_erase_cmd()
263 txBuf[0] = CMD_SECTOR_ERASE; in mx25l_erase_cmd()
268 txBuf[1] = ((sector >> 24) & 0xff); in mx25l_erase_cmd()
269 txBuf[2] = ((sector >> 16) & 0xff); in mx25l_erase_cmd()
270 txBuf[3] = ((sector >> 8) & 0xff); in mx25l_erase_cmd()
271 txBuf[4] = (sector & 0xff); in mx25l_erase_cmd()
275 txBuf[1] = ((sector >> 16) & 0xff); in mx25l_erase_cmd()
276 txBuf[2] = ((sector >> 8) & 0xff); in mx25l_erase_cmd()
277 txBuf[3] = (sector & 0xff); in mx25l_erase_cmd()
279 if ((err = SPIBUS_TRANSFER(sc->sc_parent, sc->sc_dev, &cmd)) != 0) in mx25l_erase_cmd()
291 int err = 0; in mx25l_write()
305 if (count % sc->sc_erasesize != 0 || offset % sc->sc_erasesize != 0) in mx25l_write()
312 while (count != 0) { in mx25l_write()
314 if (((offset) % sc->sc_erasesize) == 0) { in mx25l_write()
320 txBuf[0] = CMD_PAGE_PROGRAM; in mx25l_write()
322 txBuf[1] = (offset >> 24) & 0xff; in mx25l_write()
323 txBuf[2] = (offset >> 16) & 0xff; in mx25l_write()
324 txBuf[3] = (offset >> 8) & 0xff; in mx25l_write()
325 txBuf[4] = offset & 0xff; in mx25l_write()
327 txBuf[1] = (offset >> 16) & 0xff; in mx25l_write()
328 txBuf[2] = (offset >> 8) & 0xff; in mx25l_write()
329 txBuf[3] = offset & 0xff; in mx25l_write()
344 if ((err = mx25l_wait_for_device_ready(sc)) != 0) in mx25l_write()
346 if ((err = mx25l_set_writable(sc, 1)) != 0) in mx25l_write()
350 if (err != 0) in mx25l_write()
369 int err = 0; in mx25l_read()
376 if (count % sc->sc_disk->d_sectorsize != 0 || in mx25l_read()
377 offset % sc->sc_disk->d_sectorsize != 0) in mx25l_read()
380 txBuf[0] = CMD_FAST_READ; in mx25l_read()
385 txBuf[1] = (offset >> 24) & 0xff; in mx25l_read()
386 txBuf[2] = (offset >> 16) & 0xff; in mx25l_read()
387 txBuf[3] = (offset >> 8) & 0xff; in mx25l_read()
388 txBuf[4] = offset & 0xff; in mx25l_read()
390 txBuf[5] = 0; in mx25l_read()
395 txBuf[1] = (offset >> 16) & 0xff; in mx25l_read()
396 txBuf[2] = (offset >> 8) & 0xff; in mx25l_read()
397 txBuf[3] = offset & 0xff; in mx25l_read()
399 txBuf[4] = 0; in mx25l_read()
420 memset(&cmd, 0, sizeof(cmd)); in mx25l_set_4b_mode()
421 memset(txBuf, 0, sizeof(txBuf)); in mx25l_set_4b_mode()
422 memset(rxBuf, 0, sizeof(rxBuf)); in mx25l_set_4b_mode()
429 txBuf[0] = command; in mx25l_set_4b_mode()
431 if ((err = SPIBUS_TRANSFER(sc->sc_parent, sc->sc_dev, &cmd)) == 0) in mx25l_set_4b_mode()
441 { NULL, 0 },
462 for (i = 0; i < nitems(flash_devices); i++) in mx25l_probe()
471 return (0); in mx25l_probe()
491 if ((err = mx25l_wait_for_device_ready(sc)) != 0) in mx25l_attach()
504 if ((err = mx25l_set_4b_mode(sc, CMD_ENTER_4B_MODE)) != 0) in mx25l_attach()
507 if ((err = mx25l_set_4b_mode(sc, CMD_EXIT_4B_MODE)) != 0) in mx25l_attach()
531 kproc_create(&mx25l_task, sc, &sc->sc_p, 0, 0, "task: mx25l flash"); in mx25l_attach()
541 return (0); in mx25l_attach()
551 err = 0; in mx25l_detach()
557 while (err == 0 && sc->sc_taskstate != TSTATE_STOPPED) { in mx25l_detach()
558 err = msleep(sc, &sc->sc_mtx, 0, "mx25dt", hz * 3); in mx25l_detach()
559 if (err != 0) { in mx25l_detach()
568 if (err == 0 && sc->sc_taskstate == TSTATE_STOPPED) { in mx25l_detach()
579 return (0); in mx25l_open()
586 return (0); in mx25l_close()
621 if (strcmp(bp->bio_attribute, "SPI::device") == 0) { in mx25l_getattr()
627 return (0); in mx25l_getattr()
643 kproc_exit(0); in mx25l_task()
647 msleep(sc, &sc->sc_mtx, PRIBIO, "mx25jq", 0); in mx25l_task()
676 { 0, 0 }
685 DRIVER_MODULE(mx25l, spibus, mx25l_driver, 0, 0);