• Home
  • Raw
  • Download

Lines Matching full:nor

32 #include <linux/mtd/spi-nor.h>
50 struct spi_nor nor; member
295 static unsigned int cqspi_calc_rdreg(struct spi_nor *nor, const u8 opcode) in cqspi_calc_rdreg() argument
297 struct cqspi_flash_pdata *f_pdata = nor->priv; in cqspi_calc_rdreg()
364 static int cqspi_command_read(struct spi_nor *nor, in cqspi_command_read() argument
368 struct cqspi_flash_pdata *f_pdata = nor->priv; in cqspi_command_read()
377 dev_err(nor->dev, "Invalid input argument, len %d rxbuf 0x%p\n", in cqspi_command_read()
384 rdreg = cqspi_calc_rdreg(nor, txbuf[0]); in cqspi_command_read()
413 static int cqspi_command_write(struct spi_nor *nor, const u8 opcode, in cqspi_command_write() argument
416 struct cqspi_flash_pdata *f_pdata = nor->priv; in cqspi_command_write()
424 dev_err(nor->dev, in cqspi_command_write()
444 static int cqspi_command_write_addr(struct spi_nor *nor, in cqspi_command_write_addr() argument
447 struct cqspi_flash_pdata *f_pdata = nor->priv; in cqspi_command_write_addr()
454 reg |= ((nor->addr_width - 1) & CQSPI_REG_CMDCTRL_ADD_BYTES_MASK) in cqspi_command_write_addr()
462 static int cqspi_read_setup(struct spi_nor *nor) in cqspi_read_setup() argument
464 struct cqspi_flash_pdata *f_pdata = nor->priv; in cqspi_read_setup()
470 reg = nor->read_opcode << CQSPI_REG_RD_INSTR_OPCODE_LSB; in cqspi_read_setup()
471 reg |= cqspi_calc_rdreg(nor, nor->read_opcode); in cqspi_read_setup()
474 dummy_clk = nor->read_dummy; in cqspi_read_setup()
497 reg |= (nor->addr_width - 1); in cqspi_read_setup()
502 static int cqspi_indirect_read_execute(struct spi_nor *nor, u8 *rxbuf, in cqspi_indirect_read_execute() argument
505 struct cqspi_flash_pdata *f_pdata = nor->priv; in cqspi_indirect_read_execute()
535 dev_err(nor->dev, "Indirect read timeout, no bytes\n"); in cqspi_indirect_read_execute()
571 dev_err(nor->dev, in cqspi_indirect_read_execute()
594 static int cqspi_write_setup(struct spi_nor *nor) in cqspi_write_setup() argument
597 struct cqspi_flash_pdata *f_pdata = nor->priv; in cqspi_write_setup()
602 reg = nor->program_opcode << CQSPI_REG_WR_INSTR_OPCODE_LSB; in cqspi_write_setup()
604 reg = cqspi_calc_rdreg(nor, nor->program_opcode); in cqspi_write_setup()
609 reg |= (nor->addr_width - 1); in cqspi_write_setup()
614 static int cqspi_indirect_write_execute(struct spi_nor *nor, loff_t to_addr, in cqspi_indirect_write_execute() argument
617 const unsigned int page_size = nor->page_size; in cqspi_indirect_write_execute()
618 struct cqspi_flash_pdata *f_pdata = nor->priv; in cqspi_indirect_write_execute()
667 dev_err(nor->dev, "Indirect write timeout\n"); in cqspi_indirect_write_execute()
682 dev_err(nor->dev, in cqspi_indirect_write_execute()
707 static void cqspi_chipselect(struct spi_nor *nor) in cqspi_chipselect() argument
709 struct cqspi_flash_pdata *f_pdata = nor->priv; in cqspi_chipselect()
737 static void cqspi_configure_cs_and_sizes(struct spi_nor *nor) in cqspi_configure_cs_and_sizes() argument
739 struct cqspi_flash_pdata *f_pdata = nor->priv; in cqspi_configure_cs_and_sizes()
749 reg |= (nor->page_size << CQSPI_REG_SIZE_PAGE_LSB); in cqspi_configure_cs_and_sizes()
750 reg |= (ilog2(nor->mtd.erasesize) << CQSPI_REG_SIZE_BLOCK_LSB); in cqspi_configure_cs_and_sizes()
751 reg |= (nor->addr_width - 1); in cqspi_configure_cs_and_sizes()
755 cqspi_chipselect(nor); in cqspi_configure_cs_and_sizes()
758 cqspi->current_page_size = nor->page_size; in cqspi_configure_cs_and_sizes()
759 cqspi->current_erase_size = nor->mtd.erasesize; in cqspi_configure_cs_and_sizes()
760 cqspi->current_addr_width = nor->addr_width; in cqspi_configure_cs_and_sizes()
774 static void cqspi_delay(struct spi_nor *nor) in cqspi_delay() argument
776 struct cqspi_flash_pdata *f_pdata = nor->priv; in cqspi_delay()
860 static void cqspi_configure(struct spi_nor *nor) in cqspi_configure() argument
862 struct cqspi_flash_pdata *f_pdata = nor->priv; in cqspi_configure()
868 if ((cqspi->current_page_size != nor->page_size) || in cqspi_configure()
869 (cqspi->current_erase_size != nor->mtd.erasesize) || in cqspi_configure()
870 (cqspi->current_addr_width != nor->addr_width)) in cqspi_configure()
879 cqspi_configure_cs_and_sizes(nor); in cqspi_configure()
886 cqspi_delay(nor); in cqspi_configure()
895 static int cqspi_set_protocol(struct spi_nor *nor, const int read) in cqspi_set_protocol() argument
897 struct cqspi_flash_pdata *f_pdata = nor->priv; in cqspi_set_protocol()
904 switch (nor->read_proto) { in cqspi_set_protocol()
919 cqspi_configure(nor); in cqspi_set_protocol()
924 static ssize_t cqspi_write(struct spi_nor *nor, loff_t to, in cqspi_write() argument
927 struct cqspi_flash_pdata *f_pdata = nor->priv; in cqspi_write()
931 ret = cqspi_set_protocol(nor, 0); in cqspi_write()
935 ret = cqspi_write_setup(nor); in cqspi_write()
943 ret = cqspi_indirect_write_execute(nor, to, buf, len); in cqspi_write()
958 static int cqspi_direct_read_execute(struct spi_nor *nor, u_char *buf, in cqspi_direct_read_execute() argument
961 struct cqspi_flash_pdata *f_pdata = nor->priv; in cqspi_direct_read_execute()
975 dma_dst = dma_map_single(nor->dev, buf, len, DMA_FROM_DEVICE); in cqspi_direct_read_execute()
976 if (dma_mapping_error(nor->dev, dma_dst)) { in cqspi_direct_read_execute()
977 dev_err(nor->dev, "dma mapping failed\n"); in cqspi_direct_read_execute()
983 dev_err(nor->dev, "device_prep_dma_memcpy error\n"); in cqspi_direct_read_execute()
995 dev_err(nor->dev, "dma_submit_error %d\n", cookie); in cqspi_direct_read_execute()
1004 dev_err(nor->dev, "DMA wait_for_completion_timeout\n"); in cqspi_direct_read_execute()
1010 dma_unmap_single(nor->dev, dma_dst, len, DMA_FROM_DEVICE); in cqspi_direct_read_execute()
1015 static ssize_t cqspi_read(struct spi_nor *nor, loff_t from, in cqspi_read() argument
1018 struct cqspi_flash_pdata *f_pdata = nor->priv; in cqspi_read()
1021 ret = cqspi_set_protocol(nor, 1); in cqspi_read()
1025 ret = cqspi_read_setup(nor); in cqspi_read()
1030 ret = cqspi_direct_read_execute(nor, buf, from, len); in cqspi_read()
1032 ret = cqspi_indirect_read_execute(nor, buf, from, len); in cqspi_read()
1039 static int cqspi_erase(struct spi_nor *nor, loff_t offs) in cqspi_erase() argument
1043 ret = cqspi_set_protocol(nor, 0); in cqspi_erase()
1048 ret = nor->write_reg(nor, SPINOR_OP_WREN, NULL, 0); in cqspi_erase()
1053 ret = cqspi_command_write_addr(nor, nor->erase_opcode, offs); in cqspi_erase()
1060 static int cqspi_prep(struct spi_nor *nor, enum spi_nor_ops ops) in cqspi_prep() argument
1062 struct cqspi_flash_pdata *f_pdata = nor->priv; in cqspi_prep()
1070 static void cqspi_unprep(struct spi_nor *nor, enum spi_nor_ops ops) in cqspi_unprep() argument
1072 struct cqspi_flash_pdata *f_pdata = nor->priv; in cqspi_unprep()
1078 static int cqspi_read_reg(struct spi_nor *nor, u8 opcode, u8 *buf, int len) in cqspi_read_reg() argument
1082 ret = cqspi_set_protocol(nor, 0); in cqspi_read_reg()
1084 ret = cqspi_command_read(nor, &opcode, 1, buf, len); in cqspi_read_reg()
1089 static int cqspi_write_reg(struct spi_nor *nor, u8 opcode, u8 *buf, int len) in cqspi_write_reg() argument
1093 ret = cqspi_set_protocol(nor, 0); in cqspi_write_reg()
1095 ret = cqspi_command_write(nor, opcode, buf, len); in cqspi_write_reg()
1226 struct spi_nor *nor; in cqspi_setup_flash() local
1253 nor = &f_pdata->nor; in cqspi_setup_flash()
1254 mtd = &nor->mtd; in cqspi_setup_flash()
1256 mtd->priv = nor; in cqspi_setup_flash()
1258 nor->dev = dev; in cqspi_setup_flash()
1259 spi_nor_set_flash_node(nor, np); in cqspi_setup_flash()
1260 nor->priv = f_pdata; in cqspi_setup_flash()
1262 nor->read_reg = cqspi_read_reg; in cqspi_setup_flash()
1263 nor->write_reg = cqspi_write_reg; in cqspi_setup_flash()
1264 nor->read = cqspi_read; in cqspi_setup_flash()
1265 nor->write = cqspi_write; in cqspi_setup_flash()
1266 nor->erase = cqspi_erase; in cqspi_setup_flash()
1267 nor->prepare = cqspi_prep; in cqspi_setup_flash()
1268 nor->unprepare = cqspi_unprep; in cqspi_setup_flash()
1277 ret = spi_nor_scan(nor, NULL, &hwcaps); in cqspi_setup_flash()
1289 dev_dbg(nor->dev, "using direct mode for %s\n", in cqspi_setup_flash()
1302 mtd_device_unregister(&cqspi->f_pdata[i].nor.mtd); in cqspi_setup_flash()
1399 dev_err(dev, "Cadence QSPI NOR probe failed %d\n", ret); in cqspi_probe()
1421 mtd_device_unregister(&cqspi->f_pdata[i].nor.mtd); in cqspi_remove()
1465 .compatible = "cdns,qspi-nor",