Lines Matching refs:p_dev
375 int snor_erase(struct SFNOR_DEV *p_dev, in snor_erase() argument
390 op.sfcmd.b.cmd = p_dev->blk_erase_cmd; in snor_erase()
392 op.sfcmd.b.cmd = p_dev->sec_erase_cmd; in snor_erase()
398 if (p_dev->addr_mode == ADDR_MODE_4BYTE && erase_type != ERASE_CHIP) in snor_erase()
414 int snor_prog_page(struct SFNOR_DEV *p_dev, in snor_prog_page() argument
425 op.sfcmd.b.cmd = p_dev->prog_cmd; in snor_prog_page()
430 op.sfctrl.b.datalines = p_dev->prog_lines; in snor_prog_page()
432 op.sfctrl.b.addrlines = p_dev->prog_addr_lines; in snor_prog_page()
434 if (p_dev->addr_mode == ADDR_MODE_4BYTE) in snor_prog_page()
448 static int snor_prog(struct SFNOR_DEV *p_dev, u32 addr, void *p_data, u32 size) in snor_prog() argument
457 ret = snor_prog_page(p_dev, addr, p_buf, len); in snor_prog()
469 static int snor_enable_QE(struct SFNOR_DEV *p_dev) in snor_enable_QE() argument
476 reg_index = p_dev->QE_bits >> 3; in snor_enable_QE()
477 bit_offset = p_dev->QE_bits & 0x7; in snor_enable_QE()
487 return p_dev->write_status(reg_index, status); in snor_enable_QE()
490 int snor_disable_QE(struct SFNOR_DEV *p_dev) in snor_disable_QE() argument
497 reg_index = p_dev->QE_bits >> 3; in snor_disable_QE()
498 bit_offset = p_dev->QE_bits & 0x7; in snor_disable_QE()
508 return p_dev->write_status(reg_index, status); in snor_disable_QE()
511 int snor_read_data(struct SFNOR_DEV *p_dev, in snor_read_data() argument
520 op.sfcmd.b.cmd = p_dev->read_cmd; in snor_read_data()
524 op.sfctrl.b.datalines = p_dev->read_lines; in snor_read_data()
528 if (p_dev->read_cmd == CMD_FAST_READ_X1 || in snor_read_data()
529 p_dev->read_cmd == CMD_PAGE_FASTREAD4B || in snor_read_data()
530 p_dev->read_cmd == CMD_FAST_READ_X4 || in snor_read_data()
531 p_dev->read_cmd == CMD_FAST_READ_X2 || in snor_read_data()
532 p_dev->read_cmd == CMD_FAST_4READ_X4) { in snor_read_data()
534 } else if (p_dev->read_cmd == CMD_FAST_READ_A4) { in snor_read_data()
541 if (p_dev->addr_mode == ADDR_MODE_4BYTE) in snor_read_data()
550 int snor_read(struct SFNOR_DEV *p_dev, u32 sec, u32 n_sec, void *p_data) in snor_read() argument
558 if ((sec + n_sec) > p_dev->capacity) in snor_read()
564 len = size < p_dev->max_iosize ? size : p_dev->max_iosize; in snor_read()
565 ret = snor_read_data(p_dev, addr, p_buf, len); in snor_read()
583 int snor_write(struct SFNOR_DEV *p_dev, u32 sec, u32 n_sec, void *p_data) in snor_write() argument
592 if ((sec + n_sec) > p_dev->capacity) in snor_write()
596 if (sec < 512 || sec >= p_dev->capacity - 512) in snor_write()
599 blk_size = p_dev->blk_size; in snor_write()
603 ret = snor_erase(p_dev, sec << 9, (blk_size == 8) ? in snor_write()
613 ret = snor_prog(p_dev, sec << 9, p_buf, len << 9); in snor_write()
661 u32 snor_get_capacity(struct SFNOR_DEV *p_dev) in snor_get_capacity() argument
663 return p_dev->capacity; in snor_get_capacity()
695 static int snor_parse_flash_table(struct SFNOR_DEV *p_dev, in snor_parse_flash_table() argument
702 p_dev->manufacturer = (g_spi_flash_info->id >> 16) & 0xFF; in snor_parse_flash_table()
703 p_dev->mem_type = (g_spi_flash_info->id >> 8) & 0xFF; in snor_parse_flash_table()
704 p_dev->capacity = 1 << g_spi_flash_info->density; in snor_parse_flash_table()
705 p_dev->blk_size = g_spi_flash_info->block_size; in snor_parse_flash_table()
706 p_dev->page_size = NOR_SECS_PAGE; in snor_parse_flash_table()
707 p_dev->read_cmd = g_spi_flash_info->read_cmd; in snor_parse_flash_table()
708 p_dev->prog_cmd = g_spi_flash_info->prog_cmd; in snor_parse_flash_table()
709 p_dev->sec_erase_cmd = g_spi_flash_info->sector_erase_cmd; in snor_parse_flash_table()
710 p_dev->blk_erase_cmd = g_spi_flash_info->block_erase_cmd; in snor_parse_flash_table()
711 p_dev->prog_lines = DATA_LINES_X1; in snor_parse_flash_table()
712 p_dev->read_lines = DATA_LINES_X1; in snor_parse_flash_table()
713 p_dev->QE_bits = g_spi_flash_info->QE_bits; in snor_parse_flash_table()
714 p_dev->addr_mode = ADDR_MODE_3BYTE; in snor_parse_flash_table()
718 p_dev->write_status = snor_write_status; in snor_parse_flash_table()
720 p_dev->write_status = snor_write_status1; in snor_parse_flash_table()
722 p_dev->write_status = snor_write_status2; in snor_parse_flash_table()
727 ret = snor_enable_QE(p_dev); in snor_parse_flash_table()
729 p_dev->read_lines = DATA_LINES_X4; in snor_parse_flash_table()
730 p_dev->read_cmd = g_spi_flash_info->read_cmd_4; in snor_parse_flash_table()
734 p_dev->read_lines == DATA_LINES_X4) { in snor_parse_flash_table()
735 p_dev->prog_lines = DATA_LINES_X4; in snor_parse_flash_table()
736 p_dev->prog_cmd = g_spi_flash_info->prog_cmd_4; in snor_parse_flash_table()
737 if ((p_dev->manufacturer == MID_MACRONIX) && in snor_parse_flash_table()
738 (p_dev->prog_cmd == CMD_PAGE_PROG_A4 || in snor_parse_flash_table()
739 p_dev->prog_cmd == CMD_PAGE_PROG_4PP)) in snor_parse_flash_table()
740 p_dev->prog_addr_lines = DATA_LINES_X4; in snor_parse_flash_table()
744 p_dev->addr_mode = ADDR_MODE_4BYTE; in snor_parse_flash_table()
753 int snor_init(struct SFNOR_DEV *p_dev) in snor_init() argument
758 if (!p_dev) in snor_init()
761 memset((void *)p_dev, 0, sizeof(struct SFNOR_DEV)); in snor_init()
762 p_dev->max_iosize = sfc_get_max_iosize(); in snor_init()
772 snor_parse_flash_table(p_dev, g_spi_flash_info); in snor_init()
776 p_dev->manufacturer = id_byte[0]; in snor_init()
777 p_dev->mem_type = id_byte[1]; in snor_init()
778 p_dev->capacity = 1 << (id_byte[2] - 9); in snor_init()
779 p_dev->QE_bits = 0; in snor_init()
780 p_dev->blk_size = NOR_SECS_BLK; in snor_init()
781 p_dev->page_size = NOR_SECS_PAGE; in snor_init()
782 p_dev->read_cmd = CMD_READ_DATA; in snor_init()
783 p_dev->prog_cmd = CMD_PAGE_PROG; in snor_init()
784 p_dev->sec_erase_cmd = CMD_SECTOR_ERASE; in snor_init()
785 p_dev->blk_erase_cmd = CMD_BLOCK_ERASE; in snor_init()
786 p_dev->prog_lines = DATA_LINES_X1; in snor_init()
787 p_dev->prog_addr_lines = DATA_LINES_X1; in snor_init()
788 p_dev->read_lines = DATA_LINES_X1; in snor_init()
789 p_dev->write_status = snor_write_status; in snor_init()
793 rkflash_print_info("addr_mode: %x\n", p_dev->addr_mode); in snor_init()
794 rkflash_print_info("read_lines: %x\n", p_dev->read_lines); in snor_init()
795 rkflash_print_info("prog_lines: %x\n", p_dev->prog_lines); in snor_init()
796 rkflash_print_info("read_cmd: %x\n", p_dev->read_cmd); in snor_init()
797 rkflash_print_info("prog_cmd: %x\n", p_dev->prog_cmd); in snor_init()
798 rkflash_print_info("blk_erase_cmd: %x\n", p_dev->blk_erase_cmd); in snor_init()
799 rkflash_print_info("sec_erase_cmd: %x\n", p_dev->sec_erase_cmd); in snor_init()
800 rkflash_print_info("capacity: %x\n", p_dev->capacity); in snor_init()
805 int snor_reinit_from_table_packet(struct SFNOR_DEV *p_dev, in snor_reinit_from_table_packet() argument
812 if (!p_dev || packet->id != SNOR_INFO_PACKET_ID) in snor_reinit_from_table_packet()
834 ret = snor_parse_flash_table(p_dev, &g_spi_flash_info); in snor_reinit_from_table_packet()