Lines Matching +full:0 +full:x1f220000

57 	{ NULL,			0 },
97 #define TSTATE_STOPPED 0
128 #define PAGE_TO_BUFFER_TRANSFER 0x53
129 #define PAGE_TO_BUFFER_COMPARE 0x60
130 #define PROGRAM_THROUGH_BUFFER 0x82
131 #define MANUFACTURER_ID 0x9f
132 #define STATUS_REGISTER_READ 0xd7
133 #define CONTINUOUS_ARRAY_READ 0xe8
137 #define STATUS_PAGE2N (1u << 0)
148 * A sectorsize2n != 0 is used to indicate that a device optionally supports
154 { "AT45DB011B", 0x1f220000, 0x0000, 0x0000, 512, 9, 264, 256 },
155 { "AT45DB021B", 0x1f230000, 0x0000, 0x0000, 1024, 9, 264, 256 },
156 { "AT45DB041x", 0x1f240000, 0x0000, 0x0000, 2028, 9, 264, 256 },
157 { "AT45DB081B", 0x1f250000, 0x0000, 0x0000, 4096, 9, 264, 256 },
158 { "AT45DB161x", 0x1f260000, 0x0000, 0x0000, 4096, 10, 528, 512 },
159 { "AT45DB321x", 0x1f270000, 0x0000, 0x0000, 8192, 10, 528, 0 },
160 { "AT45DB321x", 0x1f270100, 0x0000, 0x0000, 8192, 10, 528, 512 },
161 { "AT45DB641E", 0x1f280001, 0x0000, 0xff00, 32768, 9, 264, 256 },
162 { "AT45DB642x", 0x1f280000, 0x0000, 0x0000, 8192, 11, 1056, 1024 },
172 memset(&cmd, 0, sizeof(cmd)); in at45d_get_status()
173 memset(txBuf, 0, sizeof(txBuf)); in at45d_get_status()
174 memset(rxBuf, 0, sizeof(rxBuf)); in at45d_get_status()
176 txBuf[0] = STATUS_REGISTER_READ; in at45d_get_status()
192 memset(&cmd, 0, sizeof(cmd)); in at45d_get_mfg_info()
193 memset(txBuf, 0, sizeof(txBuf)); in at45d_get_mfg_info()
194 memset(rxBuf, 0, sizeof(rxBuf)); in at45d_get_mfg_info()
196 txBuf[0] = MANUFACTURER_ID; in at45d_get_mfg_info()
207 return (0); in at45d_get_mfg_info()
224 } while (err == 0 && !(*status & STATUS_READY)); in at45d_wait_ready()
237 if (ofw_bus_search_compatible(dev, compat_data)->ocd_data == 0) in at45d_probe()
259 return (0); in at45d_attach()
269 err = 0; in at45d_detach()
275 while (err == 0 && sc->taskstate != TSTATE_STOPPED) { in at45d_detach()
276 err = msleep(sc, &sc->sc_mtx, 0, "at45dt", hz * 3); in at45d_detach()
277 if (err != 0) { in at45d_detach()
286 if (err == 0 && sc->taskstate == TSTATE_STOPPED) { in at45d_detach()
311 jedec = 0; in at45d_delayed_attach()
313 if (at45d_wait_ready(sc->dev, &status) != 0) { in at45d_delayed_attach()
317 if (at45d_get_mfg_info(sc->dev, &mfginfo) != 0) { in at45d_delayed_attach()
321 for (i = 0; i < nitems(at45d_flash_devices); i++) { in at45d_delayed_attach()
329 device_printf(sc->dev, "JEDEC 0x%x not in list.\n", jedec); in at45d_delayed_attach()
335 if (ident->pagesize2n != 0 && (status & STATUS_PAGE2N)) { in at45d_delayed_attach()
353 "freebsd,sectorsize", &size, sizeof(size)) > 0) in at45d_delayed_attach()
360 if ((sectorsize % pagesize) != 0) { in at45d_delayed_attach()
381 kproc_create(&at45d_task, sc, &sc->p, 0, 0, "task: at45d flash"); in at45d_delayed_attach()
393 return (0); in at45d_open()
400 return (0); in at45d_close()
414 if (strcmp(bp->bio_attribute, "SPI::device") != 0) in at45d_getattr()
420 return (0); in at45d_getattr()
451 memset(&cmd, 0, sizeof(cmd)); in at45d_task()
452 memset(txBuf, 0, sizeof(txBuf)); in at45d_task()
453 memset(rxBuf, 0, sizeof(rxBuf)); in at45d_task()
464 kproc_exit(0); in at45d_task()
468 msleep(sc, &sc->sc_mtx, PRIBIO, "at45dq", 0); in at45d_task()
472 berr = 0; in at45d_task()
480 txBuf[0] = CONTINUOUS_ARRAY_READ; in at45d_task()
500 while (resid > 0) { in at45d_task()
514 txBuf[0] = PAGE_TO_BUFFER_TRANSFER; in at45d_task()
515 txBuf[1] = ((addr >> 16) & 0xff); in at45d_task()
516 txBuf[2] = ((addr >> 8) & 0xff); in at45d_task()
517 txBuf[3] = 0; in at45d_task()
518 cmd.tx_data_sz = cmd.rx_data_sz = 0; in at45d_task()
520 if (err == 0) in at45d_task()
523 if (err != 0) { in at45d_task()
528 txBuf[0] = PROGRAM_THROUGH_BUFFER; in at45d_task()
532 txBuf[1] = ((addr >> 16) & 0xff); in at45d_task()
533 txBuf[2] = ((addr >> 8) & 0xff); in at45d_task()
534 txBuf[3] = (addr & 0xff); in at45d_task()
537 if (err == 0 && bp->bio_cmd != BIO_READ) in at45d_task()
539 if (err != 0) { in at45d_task()
545 txBuf[0] = PAGE_TO_BUFFER_COMPARE; in at45d_task()
546 txBuf[1] = ((addr >> 16) & 0xff); in at45d_task()
547 txBuf[2] = ((addr >> 8) & 0xff); in at45d_task()
548 txBuf[3] = 0; in at45d_task()
549 cmd.tx_data_sz = cmd.rx_data_sz = 0; in at45d_task()
551 if (err == 0) in at45d_task()
553 if (err != 0 || (status & STATUS_CMPFAIL)) { in at45d_task()
555 "%d failed (status=0x%x)\n", page, in at45d_task()
563 offset = 0; in at45d_task()
575 if (berr != 0) { in at45d_task()