Lines Matching full:nor

9 #include <linux/mtd/spi-nor.h>
133 * @nor: pointer to a 'struct spi_nor'
140 static int spi_nor_read_raw(struct spi_nor *nor, u32 addr, size_t len, u8 *buf) in spi_nor_read_raw() argument
145 ret = spi_nor_read_data(nor, addr, len, buf); in spi_nor_read_raw()
160 * @nor: pointer to a 'struct spi_nor'
171 static int spi_nor_read_sfdp(struct spi_nor *nor, u32 addr, in spi_nor_read_sfdp() argument
177 read_opcode = nor->read_opcode; in spi_nor_read_sfdp()
178 addr_width = nor->addr_width; in spi_nor_read_sfdp()
179 read_dummy = nor->read_dummy; in spi_nor_read_sfdp()
181 nor->read_opcode = SPINOR_OP_RDSFDP; in spi_nor_read_sfdp()
182 nor->addr_width = 3; in spi_nor_read_sfdp()
183 nor->read_dummy = 8; in spi_nor_read_sfdp()
185 ret = spi_nor_read_raw(nor, addr, len, buf); in spi_nor_read_sfdp()
187 nor->read_opcode = read_opcode; in spi_nor_read_sfdp()
188 nor->addr_width = addr_width; in spi_nor_read_sfdp()
189 nor->read_dummy = read_dummy; in spi_nor_read_sfdp()
196 * @nor: pointer to a 'struct spi_nor'
207 static int spi_nor_read_sfdp_dma_unsafe(struct spi_nor *nor, u32 addr, in spi_nor_read_sfdp_dma_unsafe() argument
217 ret = spi_nor_read_sfdp(nor, addr, len, dma_safe_buf); in spi_nor_read_sfdp_dma_unsafe()
301 * @erase: pointer to a structure that describes a SPI NOR erase type
340 * @map: the erase map of the SPI NOR
368 * @map: the erase map of the SPI NOR
399 * @nor: pointer to a 'struct spi_nor'
427 static int spi_nor_parse_bfpt(struct spi_nor *nor, in spi_nor_parse_bfpt() argument
449 err = spi_nor_read_sfdp_dma_unsafe(nor, addr, len, &bfpt); in spi_nor_parse_bfpt()
460 nor->addr_width = 3; in spi_nor_parse_bfpt()
464 nor->addr_width = 4; in spi_nor_parse_bfpt()
477 * Prevent overflows on params->size. Anyway, a NOR of 2^64 in spi_nor_parse_bfpt()
549 return spi_nor_post_bfpt_fixups(nor, bfpt_header, &bfpt, in spi_nor_parse_bfpt()
574 nor->flags |= SNOR_F_HAS_16BIT_SR | SNOR_F_NO_READ_CR; in spi_nor_parse_bfpt()
579 nor->flags &= ~SNOR_F_HAS_16BIT_SR; in spi_nor_parse_bfpt()
584 nor->flags &= ~SNOR_F_HAS_16BIT_SR; in spi_nor_parse_bfpt()
595 nor->flags |= SNOR_F_HAS_16BIT_SR; in spi_nor_parse_bfpt()
601 dev_dbg(nor->dev, "BFPT QER reserved value used\n"); in spi_nor_parse_bfpt()
607 return spi_nor_post_bfpt_fixups(nor, bfpt_header, &bfpt, in spi_nor_parse_bfpt()
610 return spi_nor_post_bfpt_fixups(nor, bfpt_header, &bfpt, params); in spi_nor_parse_bfpt()
616 * @nor: pointer to a 'struct spi_nor'
619 static u8 spi_nor_smpt_addr_width(const struct spi_nor *nor, const u32 settings) in spi_nor_smpt_addr_width() argument
630 return nor->addr_width; in spi_nor_smpt_addr_width()
637 * @nor: pointer to a 'struct spi_nor'
642 static u8 spi_nor_smpt_read_dummy(const struct spi_nor *nor, const u32 settings) in spi_nor_smpt_read_dummy() argument
647 return nor->read_dummy; in spi_nor_smpt_read_dummy()
653 * @nor: pointer to a 'struct spi_nor'
659 static const u32 *spi_nor_get_map_in_use(struct spi_nor *nor, const u32 *smpt, in spi_nor_get_map_in_use() argument
675 addr_width = nor->addr_width; in spi_nor_get_map_in_use()
676 read_dummy = nor->read_dummy; in spi_nor_get_map_in_use()
677 read_opcode = nor->read_opcode; in spi_nor_get_map_in_use()
686 nor->addr_width = spi_nor_smpt_addr_width(nor, smpt[i]); in spi_nor_get_map_in_use()
687 nor->read_dummy = spi_nor_smpt_read_dummy(nor, smpt[i]); in spi_nor_get_map_in_use()
688 nor->read_opcode = SMPT_CMD_OPCODE(smpt[i]); in spi_nor_get_map_in_use()
691 err = spi_nor_read_raw(nor, addr, 1, buf); in spi_nor_get_map_in_use()
733 nor->addr_width = addr_width; in spi_nor_get_map_in_use()
734 nor->read_dummy = read_dummy; in spi_nor_get_map_in_use()
735 nor->read_opcode = read_opcode; in spi_nor_get_map_in_use()
751 * @region: pointer to a structure that describes a SPI NOR erase region
752 * @erase: pointer to a structure that describes a SPI NOR erase type
774 * @nor: pointer to a 'struct spi_nor'
782 spi_nor_init_non_uniform_erase_map(struct spi_nor *nor, in spi_nor_init_non_uniform_erase_map() argument
800 region = devm_kcalloc(nor->dev, region_count, sizeof(*region), in spi_nor_init_non_uniform_erase_map()
863 * @nor: pointer to a 'struct spi_nor'
874 static int spi_nor_parse_smpt(struct spi_nor *nor, in spi_nor_parse_smpt() argument
891 ret = spi_nor_read_sfdp(nor, addr, len, smpt); in spi_nor_parse_smpt()
898 sector_map = spi_nor_get_map_in_use(nor, smpt, smpt_header->length); in spi_nor_parse_smpt()
904 ret = spi_nor_init_non_uniform_erase_map(nor, params, sector_map); in spi_nor_parse_smpt()
917 * @nor: pointer to a 'struct spi_nor'.
924 static int spi_nor_parse_4bait(struct spi_nor *nor, in spi_nor_parse_4bait() argument
971 ret = spi_nor_read_sfdp(nor, addr, len, dwords); in spi_nor_parse_4bait()
1030 * nor->addr_width value. in spi_nor_parse_4bait()
1077 nor->addr_width = 4; in spi_nor_parse_4bait()
1078 nor->flags |= SNOR_F_4B_OPCODES | SNOR_F_HAS_4BAIT; in spi_nor_parse_4bait()
1088 * @nor: pointer to a 'struct spi_nor'
1100 int spi_nor_parse_sfdp(struct spi_nor *nor, in spi_nor_parse_sfdp() argument
1106 struct device *dev = nor->dev; in spi_nor_parse_sfdp()
1111 err = spi_nor_read_sfdp_dma_unsafe(nor, 0, sizeof(header), &header); in spi_nor_parse_sfdp()
1147 err = spi_nor_read_sfdp(nor, sizeof(header), in spi_nor_parse_sfdp()
1170 err = spi_nor_parse_bfpt(nor, bfpt_header, params); in spi_nor_parse_sfdp()
1180 err = spi_nor_parse_smpt(nor, param_header, params); in spi_nor_parse_sfdp()
1184 err = spi_nor_parse_4bait(nor, param_header, params); in spi_nor_parse_sfdp()