Lines Matching refs:nor
8 #include <linux/mtd/spi-nor.h>
144 * @nor: pointer to a 'struct spi_nor'
151 static int spi_nor_read_raw(struct spi_nor *nor, u32 addr, size_t len, u8 *buf)
156 ret = spi_nor_read_data(nor, addr, len, buf);
171 * @nor: pointer to a 'struct spi_nor'
182 static int spi_nor_read_sfdp(struct spi_nor *nor, u32 addr,
188 read_opcode = nor->read_opcode;
189 addr_nbytes = nor->addr_nbytes;
190 read_dummy = nor->read_dummy;
192 nor->read_opcode = SPINOR_OP_RDSFDP;
193 nor->addr_nbytes = 3;
194 nor->read_dummy = 8;
196 ret = spi_nor_read_raw(nor, addr, len, buf);
198 nor->read_opcode = read_opcode;
199 nor->addr_nbytes = addr_nbytes;
200 nor->read_dummy = read_dummy;
207 * @nor: pointer to a 'struct spi_nor'
218 static int spi_nor_read_sfdp_dma_unsafe(struct spi_nor *nor, u32 addr,
228 ret = spi_nor_read_sfdp(nor, addr, len, dma_safe_buf);
410 * @nor: pointer to a 'struct spi_nor'
436 static int spi_nor_parse_bfpt(struct spi_nor *nor,
439 struct spi_nor_flash_parameter *params = nor->params;
459 err = spi_nor_read_sfdp_dma_unsafe(nor, addr, len, &bfpt);
561 return spi_nor_post_bfpt_fixups(nor, bfpt_header, &bfpt);
585 nor->flags |= SNOR_F_HAS_16BIT_SR | SNOR_F_NO_READ_CR;
590 nor->flags &= ~SNOR_F_HAS_16BIT_SR;
595 nor->flags &= ~SNOR_F_HAS_16BIT_SR;
606 nor->flags |= SNOR_F_HAS_16BIT_SR;
612 dev_dbg(nor->dev, "BFPT QER reserved value used\n");
624 dev_dbg(nor->dev, "BFPT: 4-Byte Address Mode method is not recognized or not implemented\n");
628 nor->flags |= SNOR_F_SOFT_RESET;
632 return spi_nor_post_bfpt_fixups(nor, bfpt_header, &bfpt);
637 nor->cmd_ext_type = SPI_NOR_EXT_REPEAT;
641 nor->cmd_ext_type = SPI_NOR_EXT_INVERT;
645 dev_dbg(nor->dev, "Reserved command extension used\n");
649 dev_dbg(nor->dev, "16-bit opcodes not supported\n");
653 return spi_nor_post_bfpt_fixups(nor, bfpt_header, &bfpt);
659 * @nor: pointer to a 'struct spi_nor'
662 static u8 spi_nor_smpt_addr_nbytes(const struct spi_nor *nor, const u32 settings)
673 return nor->params->addr_mode_nbytes;
680 * @nor: pointer to a 'struct spi_nor'
685 static u8 spi_nor_smpt_read_dummy(const struct spi_nor *nor, const u32 settings)
690 return nor->read_dummy;
696 * @nor: pointer to a 'struct spi_nor'
702 static const u32 *spi_nor_get_map_in_use(struct spi_nor *nor, const u32 *smpt,
718 addr_nbytes = nor->addr_nbytes;
719 read_dummy = nor->read_dummy;
720 read_opcode = nor->read_opcode;
729 nor->addr_nbytes = spi_nor_smpt_addr_nbytes(nor, smpt[i]);
730 nor->read_dummy = spi_nor_smpt_read_dummy(nor, smpt[i]);
731 nor->read_opcode = SMPT_CMD_OPCODE(smpt[i]);
734 err = spi_nor_read_raw(nor, addr, 1, buf);
776 nor->addr_nbytes = addr_nbytes;
777 nor->read_dummy = read_dummy;
778 nor->read_opcode = read_opcode;
817 * @nor: pointer to a 'struct spi_nor'
822 static int spi_nor_init_non_uniform_erase_map(struct spi_nor *nor,
825 struct spi_nor_erase_map *map = &nor->params->erase_map;
839 region = devm_kcalloc(nor->dev, region_count, sizeof(*region),
901 * @nor: pointer to a 'struct spi_nor'
910 static int spi_nor_parse_smpt(struct spi_nor *nor,
926 ret = spi_nor_read_sfdp(nor, addr, len, smpt);
933 sector_map = spi_nor_get_map_in_use(nor, smpt, smpt_header->length);
939 ret = spi_nor_init_non_uniform_erase_map(nor, sector_map);
943 spi_nor_regions_sort_erase_types(&nor->params->erase_map);
952 * @nor: pointer to a 'struct spi_nor'.
958 static int spi_nor_parse_4bait(struct spi_nor *nor,
983 struct spi_nor_flash_parameter *params = nor->params;
1005 ret = spi_nor_read_sfdp(nor, addr, len, dwords);
1064 * nor->addr_nbytes value.
1119 nor->flags |= SNOR_F_4B_OPCODES | SNOR_F_HAS_4BAIT;
1137 * @nor: pointer to a 'struct spi_nor'
1143 static int spi_nor_parse_profile1(struct spi_nor *nor,
1157 ret = spi_nor_read_sfdp(nor, addr, len, dwords);
1168 nor->params->rdsr_dummy = 8;
1170 nor->params->rdsr_dummy = 4;
1173 nor->params->rdsr_addr_nbytes = 4;
1175 nor->params->rdsr_addr_nbytes = 0;
1197 dev_dbg(nor->dev,
1204 nor->params->hwcaps.mask |= SNOR_HWCAPS_READ_8_8_8_DTR;
1205 spi_nor_set_read_settings(&nor->params->reads[SNOR_CMD_READ_8_8_8_DTR],
1213 nor->params->hwcaps.mask |= SNOR_HWCAPS_PP_8_8_8_DTR;
1225 * @nor: pointer to a 'struct spi_nor'
1231 static int spi_nor_parse_sccr(struct spi_nor *nor,
1234 struct spi_nor_flash_parameter *params = nor->params;
1245 ret = spi_nor_read_sfdp(nor, addr, len, dwords);
1253 params->vreg_offset = devm_kmalloc(nor->dev, sizeof(*dwords),
1265 nor->flags |= SNOR_F_IO_MODE_EN_VOLATILE;
1276 * @nor: pointer to a 'struct spi_nor'
1282 static int spi_nor_parse_sccr_mc(struct spi_nor *nor,
1285 struct spi_nor_flash_parameter *params = nor->params;
1297 ret = spi_nor_read_sfdp(nor, addr, len, dwords);
1311 devm_krealloc(nor->dev, params->vreg_offset,
1333 * @nor: pointer to a 'struct spi_nor'
1338 static int spi_nor_post_sfdp_fixups(struct spi_nor *nor)
1342 if (nor->manufacturer && nor->manufacturer->fixups &&
1343 nor->manufacturer->fixups->post_sfdp) {
1344 ret = nor->manufacturer->fixups->post_sfdp(nor);
1349 if (nor->info->fixups && nor->info->fixups->post_sfdp)
1350 return nor->info->fixups->post_sfdp(nor);
1357 * @nor: pointer to a 'struct spi_nor'
1364 int spi_nor_check_sfdp_signature(struct spi_nor *nor)
1370 err = spi_nor_read_sfdp_dma_unsafe(nor, 0, sizeof(signature),
1384 * @nor: pointer to a 'struct spi_nor'
1394 int spi_nor_parse_sfdp(struct spi_nor *nor)
1399 struct device *dev = nor->dev;
1406 err = spi_nor_read_sfdp_dma_unsafe(nor, 0, sizeof(header), &header);
1445 err = spi_nor_read_sfdp(nor, sizeof(header),
1495 err = spi_nor_read_sfdp(nor, 0, sfdp_size, sfdp->dwords);
1503 nor->sfdp = sfdp;
1520 err = spi_nor_parse_bfpt(nor, bfpt_header);
1530 err = spi_nor_parse_smpt(nor, param_header);
1534 err = spi_nor_parse_4bait(nor, param_header);
1538 err = spi_nor_parse_profile1(nor, param_header);
1542 err = spi_nor_parse_sccr(nor, param_header);
1546 err = spi_nor_parse_sccr_mc(nor, param_header);
1566 err = spi_nor_post_sfdp_fixups(nor);