Lines Matching refs:sbsf
111 struct sandbox_spi_flash *sbsf = dev_get_priv(dev); in sandbox_sf_set_block_protect() local
113 sbsf->status &= ~STAT_BP_MASK; in sandbox_sf_set_block_protect()
114 sbsf->status |= bp_mask << STAT_BP_SHIFT; in sandbox_sf_set_block_protect()
125 struct sandbox_spi_flash *sbsf = dev_get_priv(dev); in sandbox_sf_probe() local
177 sbsf->fd = os_open(pdata->filename, 02); in sandbox_sf_probe()
178 if (sbsf->fd == -1) { in sandbox_sf_probe()
185 sbsf->data = data; in sandbox_sf_probe()
186 sbsf->cs = cs; in sandbox_sf_probe()
197 struct sandbox_spi_flash *sbsf = dev_get_priv(dev); in sandbox_sf_remove() local
199 os_close(sbsf->fd); in sandbox_sf_remove()
206 struct sandbox_spi_flash *sbsf = dev_get_priv(dev); in sandbox_sf_cs_activate() local
211 sbsf->off = 0; in sandbox_sf_cs_activate()
212 sbsf->addr_bytes = 0; in sandbox_sf_cs_activate()
213 sbsf->pad_addr_bytes = 0; in sandbox_sf_cs_activate()
214 sbsf->state = SF_CMD; in sandbox_sf_cs_activate()
215 sbsf->cmd = SF_CMD; in sandbox_sf_cs_activate()
237 static int sandbox_sf_process_cmd(struct sandbox_spi_flash *sbsf, const u8 *rx, in sandbox_sf_process_cmd() argument
240 enum sandbox_sf_state oldstate = sbsf->state; in sandbox_sf_process_cmd()
246 sbsf->cmd = rx[0]; in sandbox_sf_process_cmd()
247 switch (sbsf->cmd) { in sandbox_sf_process_cmd()
249 sbsf->state = SF_ID; in sandbox_sf_process_cmd()
250 sbsf->cmd = SF_ID; in sandbox_sf_process_cmd()
253 sbsf->pad_addr_bytes = 1; in sandbox_sf_process_cmd()
256 sbsf->state = SF_ADDR; in sandbox_sf_process_cmd()
260 sbsf->status &= ~STAT_WEL; in sandbox_sf_process_cmd()
263 sbsf->state = SF_READ_STATUS; in sandbox_sf_process_cmd()
266 sbsf->state = SF_READ_STATUS1; in sandbox_sf_process_cmd()
270 sbsf->status |= STAT_WEL; in sandbox_sf_process_cmd()
273 sbsf->state = SF_WRITE_STATUS; in sandbox_sf_process_cmd()
276 int flags = sbsf->data->flags; in sandbox_sf_process_cmd()
279 if (sbsf->cmd == SPINOR_OP_CHIP_ERASE) { in sandbox_sf_process_cmd()
280 sbsf->erase_size = sbsf->data->sector_size * in sandbox_sf_process_cmd()
281 sbsf->data->n_sectors; in sandbox_sf_process_cmd()
282 } else if (sbsf->cmd == SPINOR_OP_BE_4K && (flags & SECT_4K)) { in sandbox_sf_process_cmd()
283 sbsf->erase_size = 4 << 10; in sandbox_sf_process_cmd()
284 } else if (sbsf->cmd == SPINOR_OP_SE && !(flags & SECT_4K)) { in sandbox_sf_process_cmd()
285 sbsf->erase_size = 64 << 10; in sandbox_sf_process_cmd()
287 debug(" cmd unknown: %#x\n", sbsf->cmd); in sandbox_sf_process_cmd()
290 sbsf->state = SF_ADDR; in sandbox_sf_process_cmd()
295 if (oldstate != sbsf->state) in sandbox_sf_process_cmd()
297 sandbox_sf_state_name(sbsf->state)); in sandbox_sf_process_cmd()
302 int sandbox_erase_part(struct sandbox_spi_flash *sbsf, int size) in sandbox_erase_part() argument
309 ret = os_write(sbsf->fd, sandbox_sf_0xff, todo); in sandbox_erase_part()
321 struct sandbox_spi_flash *sbsf = dev_get_priv(dev); in sandbox_sf_xfer() local
328 log_content("sandbox_sf: state:%x(%s) bytes:%u\n", sbsf->state, in sandbox_sf_xfer()
329 sandbox_sf_state_name(sbsf->state), bytes); in sandbox_sf_xfer()
334 if (sbsf->state == SF_CMD) { in sandbox_sf_xfer()
336 ret = sandbox_sf_process_cmd(sbsf, rx, tx); in sandbox_sf_xfer()
344 switch (sbsf->state) { in sandbox_sf_xfer()
348 log_content(" id: off:%u tx:", sbsf->off); in sandbox_sf_xfer()
349 if (sbsf->off < IDCODE_LEN) { in sandbox_sf_xfer()
351 id = ((JEDEC_MFR(sbsf->data) << 16) | in sandbox_sf_xfer()
352 JEDEC_ID(sbsf->data)) >> in sandbox_sf_xfer()
353 (8 * (IDCODE_LEN - 1 - sbsf->off)); in sandbox_sf_xfer()
357 log_content("%d %02x\n", sbsf->off, id); in sandbox_sf_xfer()
359 ++sbsf->off; in sandbox_sf_xfer()
364 sbsf->addr_bytes, rx[pos]); in sandbox_sf_xfer()
366 if (sbsf->addr_bytes++ < SF_ADDR_LEN) in sandbox_sf_xfer()
367 sbsf->off = (sbsf->off << 8) | rx[pos]; in sandbox_sf_xfer()
368 log_content("addr:%06x\n", sbsf->off); in sandbox_sf_xfer()
375 if (sbsf->addr_bytes < in sandbox_sf_xfer()
376 SF_ADDR_LEN + sbsf->pad_addr_bytes) in sandbox_sf_xfer()
380 if (os_lseek(sbsf->fd, sbsf->off, OS_SEEK_SET) < 0) { in sandbox_sf_xfer()
384 switch (sbsf->cmd) { in sandbox_sf_xfer()
387 sbsf->state = SF_READ; in sandbox_sf_xfer()
390 sbsf->state = SF_WRITE; in sandbox_sf_xfer()
394 sbsf->state = SF_ERASE; in sandbox_sf_xfer()
398 sandbox_sf_state_name(sbsf->state)); in sandbox_sf_xfer()
409 ret = os_read(sbsf->fd, tx + pos, cnt); in sandbox_sf_xfer()
417 log_content(" read status: %#x\n", sbsf->status); in sandbox_sf_xfer()
419 memset(tx + pos, sbsf->status, cnt); in sandbox_sf_xfer()
423 log_content(" read status: %#x\n", sbsf->status); in sandbox_sf_xfer()
425 memset(tx + pos, sbsf->status >> 8, cnt); in sandbox_sf_xfer()
439 if (!(sbsf->status & STAT_WEL)) { in sandbox_sf_xfer()
448 ret = os_write(sbsf->fd, rx + pos, cnt); in sandbox_sf_xfer()
454 sbsf->status &= ~STAT_WEL; in sandbox_sf_xfer()
458 if (!(sbsf->status & STAT_WEL)) { in sandbox_sf_xfer()
464 if (sbsf->off & (sbsf->erase_size - 1)) { in sandbox_sf_xfer()
466 sbsf->cmd, sbsf->erase_size, in sandbox_sf_xfer()
467 sbsf->off); in sandbox_sf_xfer()
468 sbsf->status &= ~STAT_WEL; in sandbox_sf_xfer()
473 sbsf->off, sbsf->erase_size); in sandbox_sf_xfer()
484 ret = sandbox_erase_part(sbsf, sbsf->erase_size); in sandbox_sf_xfer()
485 sbsf->status &= ~STAT_WEL; in sandbox_sf_xfer()