On Tue, Jun 28, 2016 at 03:48:19PM +0800, Jiancheng Xue wrote: > Add hisilicon spi-nor flash controller driver > > Signed-off-by: Binquan Peng <pengbinquan@xxxxxxxxxxxxx> > Signed-off-by: Jiancheng Xue <xuejiancheng@xxxxxxxxxxxxx> > Acked-by: Rob Herring <robh@xxxxxxxxxx> > Reviewed-by: Ezequiel Garcia <ezequiel@xxxxxxxxxxxxxxxxxxxx> > Reviewed-by: Jagan Teki <jteki@xxxxxxxxxxxx> > Reviewed-by: Cyrille Pitchen <cyrille.pitchen@xxxxxxxxx> > --- > change log > v12: > 1)Made SPI_HISI_SFC depend on HAS_DMA to fix the kbuild test robot error. > 2)Added "Reviewed-by Cyrille Pitchen <cyrille.pitchen@xxxxxxxxx>" and > "Reviewed-by: Jagan Teki <jteki@xxxxxxxxxxxx>" in the commit message. > v11: > Fixed issues pointed by Brian Norris and Cyrille Pitchen. > 1)Changed hisi_spi_nor_read_reg()/write_reg() to configure registers > without sniffing the opcodes. > 2)Deleted hisi_spi_nor_erase() and used default implementation instead. > 3)Changed hisi_spi_nor_dma_transfer() to return a integer type value > instead of nothing. > 4)Simplified hisi_spi_nor_read()/write() as Brian suggested. > > v10: > Fixed issues pointed by Marek Vasut. > 1)Droped the underscores in the argument names of some macros' definition. > 2)Changed some varibles to correct type. > 3)Rewrote hisi_spi_nor_read/write for readability. > 4)Added new functions hisi_spi_nor_register/unregister_all > 5)Changed to dynamically allocation for spi_nor embeded in hifmc_host. > Fixed issues pointed by Brian Norris. > 1)Replaced some headers with more accurate ones. > v9: > Fixed issues pointed by Jagan Teki. > v8: > Fixed issues pointed by Ezequiel Garcia and Brian Norris. > Moved dts binding file to mtd directory. > Changed the compatible string more specific. > v7: > Rebased to v4.5-rc3. > Fixed issues pointed by Ezequiel Garcia. > v6: > Based on v4.5-rc2 > Fixed issues pointed by Ezequiel Garcia. > v5: > Fixed a compile error. > v4: > Rebased to v4.5-rc1 > v3: > Added a compatible string "hisilicon,hi3519-sfc". > v2: > Fixed some compiling warings. > .../bindings/mtd/hisilicon,fmc-spi-nor.txt | 24 + > drivers/mtd/spi-nor/Kconfig | 7 + > drivers/mtd/spi-nor/Makefile | 1 + > drivers/mtd/spi-nor/hisi-sfc.c | 489 +++++++++++++++++++++ > 4 files changed, 521 insertions(+) > create mode 100644 Documentation/devicetree/bindings/mtd/hisilicon,fmc-spi-nor.txt > create mode 100644 drivers/mtd/spi-nor/hisi-sfc.c Pushed to l2-mtd.git, with the following diff due to API changes. Please review to be sure it looks OK to you. Also, please base changes on l2-mtd.git or linux-next.git in the future. Regards, Brian diff --git a/drivers/mtd/spi-nor/hisi-sfc.c b/drivers/mtd/spi-nor/hisi-sfc.c index 44664c3fc5ff..20378b0d55e9 100644 --- a/drivers/mtd/spi-nor/hisi-sfc.c +++ b/drivers/mtd/spi-nor/hisi-sfc.c @@ -269,8 +269,8 @@ static int hisi_spi_nor_dma_transfer(struct spi_nor *nor, loff_t start_off, return wait_op_finish(host); } -static int hisi_spi_nor_read(struct spi_nor *nor, loff_t from, size_t len, - size_t *retlen, u_char *read_buf) +static ssize_t hisi_spi_nor_read(struct spi_nor *nor, loff_t from, size_t len, + u_char *read_buf) { struct hifmc_priv *priv = nor->priv; struct hifmc_host *host = priv->host; @@ -287,14 +287,13 @@ static int hisi_spi_nor_read(struct spi_nor *nor, loff_t from, size_t len, return ret; } memcpy(read_buf + offset, host->buffer, trans); - *retlen += trans; } - return 0; + return len; } -static void hisi_spi_nor_write(struct spi_nor *nor, loff_t to, - size_t len, size_t *retlen, const u_char *write_buf) +static ssize_t hisi_spi_nor_write(struct spi_nor *nor, loff_t to, + size_t len, const u_char *write_buf) { struct hifmc_priv *priv = nor->priv; struct hifmc_host *host = priv->host; @@ -309,10 +308,11 @@ static void hisi_spi_nor_write(struct spi_nor *nor, loff_t to, to + offset, host->dma_buffer, trans, FMC_OP_WRITE); if (ret) { dev_warn(nor->dev, "DMA write timeout\n"); - return; + return ret; } - *retlen += len; } + + return len; } /** -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html