Lines Matching full: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);
312 * @erase: pointer to a structure that describes a SPI NOR erase type
351 * @map: the erase map of the SPI NOR
379 * @map: the erase map of the SPI NOR
406 * @nor: pointer to a 'struct spi_nor'
432 static int spi_nor_parse_bfpt(struct spi_nor *nor,
435 struct spi_nor_flash_parameter *params = nor->params;
456 err = spi_nor_read_sfdp_dma_unsafe(nor, addr, len, &bfpt);
486 * Prevent overflows on params->size. Anyway, a NOR of 2^64
556 return spi_nor_post_bfpt_fixups(nor, bfpt_header, &bfpt);
580 nor->flags |= SNOR_F_HAS_16BIT_SR | SNOR_F_NO_READ_CR;
585 nor->flags &= ~SNOR_F_HAS_16BIT_SR;
590 nor->flags &= ~SNOR_F_HAS_16BIT_SR;
601 nor->flags |= SNOR_F_HAS_16BIT_SR;
607 dev_dbg(nor->dev, "BFPT QER reserved value used\n");
619 dev_dbg(nor->dev, "BFPT: 4-Byte Address Mode method is not recognized or not implemented\n");
623 nor->flags |= SNOR_F_SOFT_RESET;
627 return spi_nor_post_bfpt_fixups(nor, bfpt_header, &bfpt);
658 nor->cmd_ext_type = SPI_NOR_EXT_REPEAT;
662 nor->cmd_ext_type = SPI_NOR_EXT_INVERT;
666 dev_dbg(nor->dev, "Reserved command extension used\n");
670 dev_dbg(nor->dev, "16-bit opcodes not supported\n");
676 nor->flags |= SNOR_F_SWAP16;
678 return spi_nor_post_bfpt_fixups(nor, bfpt_header, &bfpt);
684 * @nor: pointer to a 'struct spi_nor'
687 static u8 spi_nor_smpt_addr_nbytes(const struct spi_nor *nor, const u32 settings)
698 return nor->params->addr_mode_nbytes;
705 * @nor: pointer to a 'struct spi_nor'
710 static u8 spi_nor_smpt_read_dummy(const struct spi_nor *nor, const u32 settings)
715 return nor->read_dummy;
721 * @nor: pointer to a 'struct spi_nor'
727 static const u32 *spi_nor_get_map_in_use(struct spi_nor *nor, const u32 *smpt,
743 addr_nbytes = nor->addr_nbytes;
744 read_dummy = nor->read_dummy;
745 read_opcode = nor->read_opcode;
754 nor->addr_nbytes = spi_nor_smpt_addr_nbytes(nor, smpt[i]);
755 nor->read_dummy = spi_nor_smpt_read_dummy(nor, smpt[i]);
756 nor->read_opcode = SMPT_CMD_OPCODE(smpt[i]);
759 err = spi_nor_read_raw(nor, addr, 1, buf);
801 nor->addr_nbytes = addr_nbytes;
802 nor->read_dummy = read_dummy;
803 nor->read_opcode = read_opcode;
809 * @region: pointer to a structure that describes a SPI NOR erase region
810 * @erase: pointer to a structure that describes a SPI NOR erase type
832 * @nor: pointer to a 'struct spi_nor'
837 static int spi_nor_init_non_uniform_erase_map(struct spi_nor *nor,
840 struct spi_nor_erase_map *map = &nor->params->erase_map;
854 region = devm_kcalloc(nor->dev, region_count, sizeof(*region),
917 * @nor: pointer to a 'struct spi_nor'
926 static int spi_nor_parse_smpt(struct spi_nor *nor,
942 ret = spi_nor_read_sfdp(nor, addr, len, smpt);
949 sector_map = spi_nor_get_map_in_use(nor, smpt, smpt_header->length);
955 ret = spi_nor_init_non_uniform_erase_map(nor, sector_map);
959 spi_nor_regions_sort_erase_types(&nor->params->erase_map);
968 * @nor: pointer to a 'struct spi_nor'.
974 static int spi_nor_parse_4bait(struct spi_nor *nor,
1001 struct spi_nor_flash_parameter *params = nor->params;
1023 ret = spi_nor_read_sfdp(nor, addr, len, dwords);
1082 * nor->addr_nbytes value.
1137 nor->flags |= SNOR_F_4B_OPCODES | SNOR_F_HAS_4BAIT;
1155 * @nor: pointer to a 'struct spi_nor'
1161 static int spi_nor_parse_profile1(struct spi_nor *nor,
1175 ret = spi_nor_read_sfdp(nor, addr, len, dwords);
1186 nor->params->rdsr_dummy = 8;
1188 nor->params->rdsr_dummy = 4;
1191 nor->params->rdsr_addr_nbytes = 4;
1193 nor->params->rdsr_addr_nbytes = 0;
1215 dev_dbg(nor->dev,
1222 nor->params->hwcaps.mask |= SNOR_HWCAPS_READ_8_8_8_DTR;
1223 spi_nor_set_read_settings(&nor->params->reads[SNOR_CMD_READ_8_8_8_DTR],
1231 nor->params->hwcaps.mask |= SNOR_HWCAPS_PP_8_8_8_DTR;
1243 * @nor: pointer to a 'struct spi_nor'
1249 static int spi_nor_parse_sccr(struct spi_nor *nor,
1252 struct spi_nor_flash_parameter *params = nor->params;
1263 ret = spi_nor_read_sfdp(nor, addr, len, dwords);
1271 params->vreg_offset = devm_kmalloc(nor->dev, sizeof(*dwords),
1283 nor->flags |= SNOR_F_IO_MODE_EN_VOLATILE;
1294 * @nor: pointer to a 'struct spi_nor'
1300 static int spi_nor_parse_sccr_mc(struct spi_nor *nor,
1303 struct spi_nor_flash_parameter *params = nor->params;
1315 ret = spi_nor_read_sfdp(nor, addr, len, dwords);
1329 devm_krealloc(nor->dev, params->vreg_offset,
1351 * @nor: pointer to a 'struct spi_nor'
1356 static int spi_nor_post_sfdp_fixups(struct spi_nor *nor)
1360 if (nor->manufacturer && nor->manufacturer->fixups &&
1361 nor->manufacturer->fixups->post_sfdp) {
1362 ret = nor->manufacturer->fixups->post_sfdp(nor);
1367 if (nor->info->fixups && nor->info->fixups->post_sfdp)
1368 return nor->info->fixups->post_sfdp(nor);
1375 * @nor: pointer to a 'struct spi_nor'
1382 int spi_nor_check_sfdp_signature(struct spi_nor *nor)
1388 err = spi_nor_read_sfdp_dma_unsafe(nor, 0, sizeof(signature),
1402 * @nor: pointer to a 'struct spi_nor'
1412 int spi_nor_parse_sfdp(struct spi_nor *nor)
1417 struct device *dev = nor->dev;
1424 err = spi_nor_read_sfdp_dma_unsafe(nor, 0, sizeof(header), &header);
1463 err = spi_nor_read_sfdp(nor, sizeof(header),
1513 err = spi_nor_read_sfdp(nor, 0, sfdp_size, sfdp->dwords);
1521 nor->sfdp = sfdp;
1538 err = spi_nor_parse_bfpt(nor, bfpt_header);
1548 err = spi_nor_parse_smpt(nor, param_header);
1552 err = spi_nor_parse_4bait(nor, param_header);
1556 err = spi_nor_parse_profile1(nor, param_header);
1560 err = spi_nor_parse_sccr(nor, param_header);
1564 err = spi_nor_parse_sccr_mc(nor, param_header);
1584 err = spi_nor_post_sfdp_fixups(nor);