Re: [PATCH v4 2/3] mtd: mtk-nor: mtk serial flash controller driver
Hi Bayi, On Fri, Oct 30, 2015 at 10:12:39AM +0800, bayi.cheng wrote: > Hi Brian, The current station is as follows. > > 1: put 0x9F to MTK_NOR_PRGDATA5_REG, and five 0x0 to > MTK_NOR_PRGDATA4_REG ~ MTK_NOR_PRGDATA0_REG, then set (1 + 5) * 8 > to MTK_NOR_CNT_REG, for this way, we can read five IDs. > > 2: put 0x9F to MTK_NOR_PRGDATA5_REG, and five 0x0 to > MTK_NOR_PRGDATA4_REG ~ MTK_NOR_PRGDATA0_REG, then set (1 + 5 + 1) * 8 > to MTK_NOR_CNT_REG, for this way, we can read six IDs. > In this case, nor flash IDs can be read from MTK_NOR_SHREG5_REG to > MTK_NOR_SHREG0_REG . Thanks! Thanks for the update. Glad to hear you can read more bytes there; the extra number of Shift Registers *looked* to me like you should be able to read even more than 5... So in my other email, I showed you how I generalized the TX/RX function, so it can handle most of both the write_reg() and read_reg() functions. I'm not 100% sure now that it has all of the RX path correct; it worked for the cases I could test, but it's confusing when reading the manual to figure out which SHREG register I should start from. But anyway, I think it should only take some small adjustments to my patch to make it handle things properly. I'd really appreciate it if you could incorporate my feedback and review/improve the ..._do_tx_rx() function I wrote, to make sure it handles reading any arbitrary number of bytes (at least up to 6). So, you might, for example, run some tests where you have spi-nor.c call nor->read_reg(nor, SPINOR_OP_RDID, id, idlen) with varying values for 'idlen', and make sure they all work properly. Let me know if you have any questions about comments either here, or on v5. Regards, Brian -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH v4 2/3] mtd: mtk-nor: mtk serial flash controller driver
On Thu, Oct 29, 2015 at 09:56:31PM +0800, bayi.cheng wrote: > On Thu, 2015-10-29 at 11:28 +0800, bayi.cheng wrote: > > On Wed, 2015-10-28 at 18:52 -0700, Brian Norris wrote: > > > On Sun, Oct 18, 2015 at 10:20:35PM +0800, bayi.cheng wrote: > > > > On Fri, 2015-10-16 at 00:39 -0700, Brian Norris wrote: > > > > > On Tue, Oct 13, 2015 at 05:39:19PM +0800, Bayi Cheng wrote: > > > > > > + /* mtk nor controller doesn't supoort SPINOR_OP_RDCR */ > > > > > > + switch (opcode) { > > > > > > + case SPINOR_OP_RDID: > > > > > > + /* read JEDEC ID need 4 bytes commands */ > > > > > > + ret = mt8173_nor_set_cmd(mt8173_nor, 0, 32, > > > > > > SPINOR_OP_RDID); > > > > > > + if (ret < 0) > > > > > > + return ret; > > > > > > + > > > > > > + /* mtk nor flash controller only support 3 bytes IDs */ > > > > > > > > > > Are you absolutely sure of this? That would be highly unfortunate, but > > > > > I also don't believe it's true. > > > > > > > > > Yes, for this issue I have asked our designer of nor flash controller, > > > > unfortunately, it is true, and I have tried to read more IDs, but our > > > > controller just accept 3 IDs from nor flash, and our next generation IC > > > > may solve this problem. > > > > > > How exactly did you try? Did you do what I suggested above? Are the > > > "shift registers" not all actually functional? > > > > > Hi Brian, For this problem, I have asked our nor controller designer to > > double confirm again, and he promise to do some simulation testes, On > > the other hand, I have got some Spansion nor flash which has 5 IDs, and > > after our designer make sure our controller can support 5 or 6 IDs, then > > I will rework a special platform with S25FL256SA. If we have any > > progress, I will inform you immediately! Thanks!! > > > Hi Brian, Thanks very much for your perseverance!! > Actually, You idea is correct, and our designer has completed some > simulation test on spansion nor flash witch has more than 3 IDs, and the > results has prove that we can support to read 5 IDs. I also double Awesome! > confirmed with spansion nor flash. The only pity is that our nor > controller can't support 6 IDs, we just support 5 IDs. That's not quite as awesome. But that's still much more workable than only 3 bytes. Perhaps we'll want a way to communicate that to the spi-nor layer, so it doesn't think it can match a full 6 bytes? > I will submit my changes to V6 version. Thanks again!! OK, but let me take another look at v5 and send you comments on that one first. Regards, Brian -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH v4 2/3] mtd: mtk-nor: mtk serial flash controller driver
On Thu, Oct 29, 2015 at 09:56:31PM +0800, bayi.cheng wrote: > On Thu, 2015-10-29 at 11:28 +0800, bayi.cheng wrote: > > On Wed, 2015-10-28 at 18:52 -0700, Brian Norris wrote: > > > On Sun, Oct 18, 2015 at 10:20:35PM +0800, bayi.cheng wrote: > > > > On Fri, 2015-10-16 at 00:39 -0700, Brian Norris wrote: > > > > > On Tue, Oct 13, 2015 at 05:39:19PM +0800, Bayi Cheng wrote: > > > > > > + /* mtk nor controller doesn't supoort SPINOR_OP_RDCR */ > > > > > > + switch (opcode) { > > > > > > + case SPINOR_OP_RDID: > > > > > > + /* read JEDEC ID need 4 bytes commands */ > > > > > > + ret = mt8173_nor_set_cmd(mt8173_nor, 0, 32, > > > > > > SPINOR_OP_RDID); > > > > > > + if (ret < 0) > > > > > > + return ret; > > > > > > + > > > > > > + /* mtk nor flash controller only support 3 bytes IDs */ > > > > > > > > > > Are you absolutely sure of this? That would be highly unfortunate, but > > > > > I also don't believe it's true. > > > > > > > > > Yes, for this issue I have asked our designer of nor flash controller, > > > > unfortunately, it is true, and I have tried to read more IDs, but our > > > > controller just accept 3 IDs from nor flash, and our next generation IC > > > > may solve this problem. > > > > > > How exactly did you try? Did you do what I suggested above? Are the > > > "shift registers" not all actually functional? > > > > > Hi Brian, For this problem, I have asked our nor controller designer to > > double confirm again, and he promise to do some simulation testes, On > > the other hand, I have got some Spansion nor flash which has 5 IDs, and > > after our designer make sure our controller can support 5 or 6 IDs, then > > I will rework a special platform with S25FL256SA. If we have any > > progress, I will inform you immediately! Thanks!! > > > Hi Brian, Thanks very much for your perseverance!! > Actually, You idea is correct, and our designer has completed some > simulation test on spansion nor flash witch has more than 3 IDs, and the > results has prove that we can support to read 5 IDs. I also double Awesome! > confirmed with spansion nor flash. The only pity is that our nor > controller can't support 6 IDs, we just support 5 IDs. That's not quite as awesome. But that's still much more workable than only 3 bytes. Perhaps we'll want a way to communicate that to the spi-nor layer, so it doesn't think it can match a full 6 bytes? > I will submit my changes to V6 version. Thanks again!! OK, but let me take another look at v5 and send you comments on that one first. Regards, Brian -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH v4 2/3] mtd: mtk-nor: mtk serial flash controller driver
Hi Bayi, On Fri, Oct 30, 2015 at 10:12:39AM +0800, bayi.cheng wrote: > Hi Brian, The current station is as follows. > > 1: put 0x9F to MTK_NOR_PRGDATA5_REG, and five 0x0 to > MTK_NOR_PRGDATA4_REG ~ MTK_NOR_PRGDATA0_REG, then set (1 + 5) * 8 > to MTK_NOR_CNT_REG, for this way, we can read five IDs. > > 2: put 0x9F to MTK_NOR_PRGDATA5_REG, and five 0x0 to > MTK_NOR_PRGDATA4_REG ~ MTK_NOR_PRGDATA0_REG, then set (1 + 5 + 1) * 8 > to MTK_NOR_CNT_REG, for this way, we can read six IDs. > In this case, nor flash IDs can be read from MTK_NOR_SHREG5_REG to > MTK_NOR_SHREG0_REG . Thanks! Thanks for the update. Glad to hear you can read more bytes there; the extra number of Shift Registers *looked* to me like you should be able to read even more than 5... So in my other email, I showed you how I generalized the TX/RX function, so it can handle most of both the write_reg() and read_reg() functions. I'm not 100% sure now that it has all of the RX path correct; it worked for the cases I could test, but it's confusing when reading the manual to figure out which SHREG register I should start from. But anyway, I think it should only take some small adjustments to my patch to make it handle things properly. I'd really appreciate it if you could incorporate my feedback and review/improve the ..._do_tx_rx() function I wrote, to make sure it handles reading any arbitrary number of bytes (at least up to 6). So, you might, for example, run some tests where you have spi-nor.c call nor->read_reg(nor, SPINOR_OP_RDID, id, idlen) with varying values for 'idlen', and make sure they all work properly. Let me know if you have any questions about comments either here, or on v5. Regards, Brian -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH v4 2/3] mtd: mtk-nor: mtk serial flash controller driver
Hi Bayi, I'm looking over your v5, and I still have a lot of comments. I'll send those soon. But I still question one of your responses here: On Sun, Oct 18, 2015 at 10:20:35PM +0800, bayi.cheng wrote: > On Fri, 2015-10-16 at 00:39 -0700, Brian Norris wrote: > > On Tue, Oct 13, 2015 at 05:39:19PM +0800, Bayi Cheng wrote: > > > diff --git a/drivers/mtd/spi-nor/mtk-quadspi.c > > > b/drivers/mtd/spi-nor/mtk-quadspi.c > > > new file mode 100644 > > > index 000..c6ac366 > > > --- /dev/null > > > +++ b/drivers/mtd/spi-nor/mtk-quadspi.c > > > @@ -0,0 +1,486 @@ [...] > > > +#define MTK_NOR_CMD_REG 0x00 > > > +#define MTK_NOR_CNT_REG 0x04 > > > +#define MTK_NOR_RDSR_REG 0x08 > > > +#define MTK_NOR_RDATA_REG0x0c > > > +#define MTK_NOR_RADR0_REG0x10 > > > +#define MTK_NOR_RADR1_REG0x14 > > > +#define MTK_NOR_RADR2_REG0x18 > > > +#define MTK_NOR_WDATA_REG0x1c > > > +#define MTK_NOR_PRGDATA0_REG 0x20 > > > +#define MTK_NOR_PRGDATA1_REG 0x24 > > > +#define MTK_NOR_PRGDATA2_REG 0x28 > > > +#define MTK_NOR_PRGDATA3_REG 0x2c > > > +#define MTK_NOR_PRGDATA4_REG 0x30 > > > +#define MTK_NOR_PRGDATA5_REG 0x34 ^^ so you have 6 "TX" registers. > > > +#define MTK_NOR_SHREG0_REG 0x38 > > > +#define MTK_NOR_SHREG1_REG 0x3c > > > +#define MTK_NOR_SHREG2_REG 0x40 > > > +#define MTK_NOR_SHREG3_REG 0x44 > > > +#define MTK_NOR_SHREG4_REG 0x48 > > > +#define MTK_NOR_SHREG5_REG 0x4c ^^ and you have at least 6 "RX" registers (looking at the mt8173 manual, I'm not sure what the SHREG{6..9} are for). So I don't see why you can't program MTK_NOR_CNT_REG to 48 (6 bytes * 8 bits/byte) to get 6 bytes TX/RX, or IOW, 1 byte of opcode and 5 bytes of either RX or TX data. So I'm still not convinced about your claim below. I was able to rewrite your driver to do the above, and I can read out 5 bytes no problem, but unfortunately, the flash device I have has only 3 bytes of ID, so the last two bytes are zero, which doesn't tell me too much if this is working right. > > > +#define MTK_NOR_SHREG6_REG 0x50 > > > +#define MTK_NOR_SHREG7_REG 0x54 > > > +#define MTK_NOR_SHREG8_REG 0x58 > > > +#define MTK_NOR_SHREG9_REG 0x5c > > > +#define MTK_NOR_CFG1_REG 0x60 > > > +#define MTK_NOR_CFG2_REG 0x64 > > > +#define MTK_NOR_CFG3_REG 0x68 > > > +#define MTK_NOR_STATUS0_REG 0x70 > > > +#define MTK_NOR_STATUS1_REG 0x74 > > > +#define MTK_NOR_STATUS2_REG 0x78 > > > +#define MTK_NOR_STATUS3_REG 0x7c > > > +#define MTK_NOR_FLHCFG_REG 0x84 > > > +#define MTK_NOR_TIME_REG 0x94 > > > +#define MTK_NOR_PP_DATA_REG 0x98 > > > +#define MTK_NOR_PREBUF_STUS_REG 0x9c > > > +#define MTK_NOR_DELSEL0_REG 0xa0 > > > +#define MTK_NOR_DELSEL1_REG 0xa4 > > > +#define MTK_NOR_INTRSTUS_REG 0xa8 > > > +#define MTK_NOR_INTREN_REG 0xac > > > +#define MTK_NOR_CHKSUM_CTL_REG 0xb8 > > > +#define MTK_NOR_CHKSUM_REG 0xbc > > > +#define MTK_NOR_CMD2_REG 0xc0 > > > +#define MTK_NOR_WRPROT_REG 0xc4 > > > +#define MTK_NOR_RADR3_REG0xc8 > > > +#define MTK_NOR_DUAL_REG 0xcc > > > +#define MTK_NOR_DELSEL2_REG 0xd0 > > > +#define MTK_NOR_DELSEL3_REG 0xd4 > > > +#define MTK_NOR_DELSEL4_REG 0xd8 ... > > > +static int mt8173_nor_read_reg(struct spi_nor *nor, u8 opcode, u8 *buf, > > > int len) > > > +{ > > > + int ret; > > > + struct mt8173_nor *mt8173_nor = nor->priv; > > > + > > > + /* mtk nor controller doesn't supoort SPINOR_OP_RDCR */ > > > + switch (opcode) { > > > + case SPINOR_OP_RDID: > > > + /* read JEDEC ID need 4 bytes commands */ > > > + ret = mt8173_nor_set_cmd(mt8173_nor, 0, 32, SPINOR_OP_RDID); > > > + if (ret < 0) > > > + return ret; > > > + > > > + /* mtk nor flash controller only support 3 bytes IDs */ > > > > Are you absolutely sure of this? That would be highly unfortunate, but > > I also don't believe it's true. > > > Yes, for this issue I have asked our designer of nor flash controller, > unfortunately, it is true, and I have tried to read more IDs, but our > controller just accept 3 IDs from nor flash, and our next generation IC > may solve this problem. How exactly did you try? Did you do what I suggested above? Are the "shift registers" not all actually functional? > > > + buf[2] = readb(mt8173_nor->base + MTK_NOR_SHREG0_REG); > > > + buf[1] = readb(mt8173_nor->base + MTK_NOR_SHREG1_REG); > > > + buf[0] = readb(mt8173_nor->base + MTK_NOR_SHREG2_REG); > > > + break; [...] Brian
Re: [PATCH v4 2/3] mtd: mtk-nor: mtk serial flash controller driver
Hi Bayi, I'm looking over your v5, and I still have a lot of comments. I'll send those soon. But I still question one of your responses here: On Sun, Oct 18, 2015 at 10:20:35PM +0800, bayi.cheng wrote: > On Fri, 2015-10-16 at 00:39 -0700, Brian Norris wrote: > > On Tue, Oct 13, 2015 at 05:39:19PM +0800, Bayi Cheng wrote: > > > diff --git a/drivers/mtd/spi-nor/mtk-quadspi.c > > > b/drivers/mtd/spi-nor/mtk-quadspi.c > > > new file mode 100644 > > > index 000..c6ac366 > > > --- /dev/null > > > +++ b/drivers/mtd/spi-nor/mtk-quadspi.c > > > @@ -0,0 +1,486 @@ [...] > > > +#define MTK_NOR_CMD_REG 0x00 > > > +#define MTK_NOR_CNT_REG 0x04 > > > +#define MTK_NOR_RDSR_REG 0x08 > > > +#define MTK_NOR_RDATA_REG0x0c > > > +#define MTK_NOR_RADR0_REG0x10 > > > +#define MTK_NOR_RADR1_REG0x14 > > > +#define MTK_NOR_RADR2_REG0x18 > > > +#define MTK_NOR_WDATA_REG0x1c > > > +#define MTK_NOR_PRGDATA0_REG 0x20 > > > +#define MTK_NOR_PRGDATA1_REG 0x24 > > > +#define MTK_NOR_PRGDATA2_REG 0x28 > > > +#define MTK_NOR_PRGDATA3_REG 0x2c > > > +#define MTK_NOR_PRGDATA4_REG 0x30 > > > +#define MTK_NOR_PRGDATA5_REG 0x34 ^^ so you have 6 "TX" registers. > > > +#define MTK_NOR_SHREG0_REG 0x38 > > > +#define MTK_NOR_SHREG1_REG 0x3c > > > +#define MTK_NOR_SHREG2_REG 0x40 > > > +#define MTK_NOR_SHREG3_REG 0x44 > > > +#define MTK_NOR_SHREG4_REG 0x48 > > > +#define MTK_NOR_SHREG5_REG 0x4c ^^ and you have at least 6 "RX" registers (looking at the mt8173 manual, I'm not sure what the SHREG{6..9} are for). So I don't see why you can't program MTK_NOR_CNT_REG to 48 (6 bytes * 8 bits/byte) to get 6 bytes TX/RX, or IOW, 1 byte of opcode and 5 bytes of either RX or TX data. So I'm still not convinced about your claim below. I was able to rewrite your driver to do the above, and I can read out 5 bytes no problem, but unfortunately, the flash device I have has only 3 bytes of ID, so the last two bytes are zero, which doesn't tell me too much if this is working right. > > > +#define MTK_NOR_SHREG6_REG 0x50 > > > +#define MTK_NOR_SHREG7_REG 0x54 > > > +#define MTK_NOR_SHREG8_REG 0x58 > > > +#define MTK_NOR_SHREG9_REG 0x5c > > > +#define MTK_NOR_CFG1_REG 0x60 > > > +#define MTK_NOR_CFG2_REG 0x64 > > > +#define MTK_NOR_CFG3_REG 0x68 > > > +#define MTK_NOR_STATUS0_REG 0x70 > > > +#define MTK_NOR_STATUS1_REG 0x74 > > > +#define MTK_NOR_STATUS2_REG 0x78 > > > +#define MTK_NOR_STATUS3_REG 0x7c > > > +#define MTK_NOR_FLHCFG_REG 0x84 > > > +#define MTK_NOR_TIME_REG 0x94 > > > +#define MTK_NOR_PP_DATA_REG 0x98 > > > +#define MTK_NOR_PREBUF_STUS_REG 0x9c > > > +#define MTK_NOR_DELSEL0_REG 0xa0 > > > +#define MTK_NOR_DELSEL1_REG 0xa4 > > > +#define MTK_NOR_INTRSTUS_REG 0xa8 > > > +#define MTK_NOR_INTREN_REG 0xac > > > +#define MTK_NOR_CHKSUM_CTL_REG 0xb8 > > > +#define MTK_NOR_CHKSUM_REG 0xbc > > > +#define MTK_NOR_CMD2_REG 0xc0 > > > +#define MTK_NOR_WRPROT_REG 0xc4 > > > +#define MTK_NOR_RADR3_REG0xc8 > > > +#define MTK_NOR_DUAL_REG 0xcc > > > +#define MTK_NOR_DELSEL2_REG 0xd0 > > > +#define MTK_NOR_DELSEL3_REG 0xd4 > > > +#define MTK_NOR_DELSEL4_REG 0xd8 ... > > > +static int mt8173_nor_read_reg(struct spi_nor *nor, u8 opcode, u8 *buf, > > > int len) > > > +{ > > > + int ret; > > > + struct mt8173_nor *mt8173_nor = nor->priv; > > > + > > > + /* mtk nor controller doesn't supoort SPINOR_OP_RDCR */ > > > + switch (opcode) { > > > + case SPINOR_OP_RDID: > > > + /* read JEDEC ID need 4 bytes commands */ > > > + ret = mt8173_nor_set_cmd(mt8173_nor, 0, 32, SPINOR_OP_RDID); > > > + if (ret < 0) > > > + return ret; > > > + > > > + /* mtk nor flash controller only support 3 bytes IDs */ > > > > Are you absolutely sure of this? That would be highly unfortunate, but > > I also don't believe it's true. > > > Yes, for this issue I have asked our designer of nor flash controller, > unfortunately, it is true, and I have tried to read more IDs, but our > controller just accept 3 IDs from nor flash, and our next generation IC > may solve this problem. How exactly did you try? Did you do what I suggested above? Are the "shift registers" not all actually functional? > > > + buf[2] = readb(mt8173_nor->base + MTK_NOR_SHREG0_REG); > > > + buf[1] = readb(mt8173_nor->base + MTK_NOR_SHREG1_REG); > > > + buf[0] = readb(mt8173_nor->base + MTK_NOR_SHREG2_REG); > > > + break; [...] Brian
Re: [PATCH v4 2/3] mtd: mtk-nor: mtk serial flash controller driver
Hi Bayi, On Tue, Oct 13, 2015 at 05:39:19PM +0800, Bayi Cheng wrote: > add spi nor flash driver for mediatek controller > > Signed-off-by: Bayi Cheng > --- > drivers/mtd/spi-nor/Kconfig | 7 + > drivers/mtd/spi-nor/Makefile | 1 + > drivers/mtd/spi-nor/mtk-quadspi.c | 486 > ++ > 3 files changed, 494 insertions(+) > create mode 100644 drivers/mtd/spi-nor/mtk-quadspi.c > > diff --git a/drivers/mtd/spi-nor/Kconfig b/drivers/mtd/spi-nor/Kconfig > index 89bf4c1..f433890 100644 > --- a/drivers/mtd/spi-nor/Kconfig > +++ b/drivers/mtd/spi-nor/Kconfig > @@ -7,6 +7,13 @@ menuconfig MTD_SPI_NOR > > if MTD_SPI_NOR > > +config MTD_MT81xx_NOR > + tristate "Support SPI flash Controller MTD_MT81xx_NOR" You don't need to repeat the exact symbol name in the short description. But you probably should include the name "MediaTek". How about this? tristate "MediaTek MT81xx SPI NOR flash controller" > + help > + This enables access to SPI Nor flash, using MTD_MT81XX_NOR controller. s/Nor/NOR/ And again, don't name the controller "MTD_MT81XX_NOR." > + This controller does nor support generic SPI BUS, It only supports s/nor/not/ > + SPI NOR Flash. > + > config MTD_SPI_NOR_USE_4K_SECTORS > bool "Use small 4096 B erase sectors" > default y > diff --git a/drivers/mtd/spi-nor/Makefile b/drivers/mtd/spi-nor/Makefile > index e5e..37c020a 100644 > --- a/drivers/mtd/spi-nor/Makefile > +++ b/drivers/mtd/spi-nor/Makefile > @@ -1,3 +1,4 @@ > +obj-$(CONFIG_MTD_MT81xx_NOR) += mtk-quadspi.o Please include this between 'fsl-quadspi' and 'nxp-spifi' (i.e., alphabetical order). > obj-$(CONFIG_MTD_SPI_NOR)+= spi-nor.o > obj-$(CONFIG_SPI_FSL_QUADSPI)+= fsl-quadspi.o > obj-$(CONFIG_SPI_NXP_SPIFI) += nxp-spifi.o > diff --git a/drivers/mtd/spi-nor/mtk-quadspi.c > b/drivers/mtd/spi-nor/mtk-quadspi.c > new file mode 100644 > index 000..c6ac366 > --- /dev/null > +++ b/drivers/mtd/spi-nor/mtk-quadspi.c > @@ -0,0 +1,486 @@ > +/* > + * Copyright (c) 2015 MediaTek Inc. > + * Author: Bayi Cheng > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License version 2 as > + * published by the Free Software Foundation. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + */ > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > + > +#define MTK_NOR_CMD_REG 0x00 > +#define MTK_NOR_CNT_REG 0x04 > +#define MTK_NOR_RDSR_REG 0x08 > +#define MTK_NOR_RDATA_REG0x0c > +#define MTK_NOR_RADR0_REG0x10 > +#define MTK_NOR_RADR1_REG0x14 > +#define MTK_NOR_RADR2_REG0x18 > +#define MTK_NOR_WDATA_REG0x1c > +#define MTK_NOR_PRGDATA0_REG 0x20 > +#define MTK_NOR_PRGDATA1_REG 0x24 > +#define MTK_NOR_PRGDATA2_REG 0x28 > +#define MTK_NOR_PRGDATA3_REG 0x2c > +#define MTK_NOR_PRGDATA4_REG 0x30 > +#define MTK_NOR_PRGDATA5_REG 0x34 > +#define MTK_NOR_SHREG0_REG 0x38 > +#define MTK_NOR_SHREG1_REG 0x3c > +#define MTK_NOR_SHREG2_REG 0x40 > +#define MTK_NOR_SHREG3_REG 0x44 > +#define MTK_NOR_SHREG4_REG 0x48 > +#define MTK_NOR_SHREG5_REG 0x4c > +#define MTK_NOR_SHREG6_REG 0x50 > +#define MTK_NOR_SHREG7_REG 0x54 > +#define MTK_NOR_SHREG8_REG 0x58 > +#define MTK_NOR_SHREG9_REG 0x5c > +#define MTK_NOR_CFG1_REG 0x60 > +#define MTK_NOR_CFG2_REG 0x64 > +#define MTK_NOR_CFG3_REG 0x68 > +#define MTK_NOR_STATUS0_REG 0x70 > +#define MTK_NOR_STATUS1_REG 0x74 > +#define MTK_NOR_STATUS2_REG 0x78 > +#define MTK_NOR_STATUS3_REG 0x7c > +#define MTK_NOR_FLHCFG_REG 0x84 > +#define MTK_NOR_TIME_REG 0x94 > +#define MTK_NOR_PP_DATA_REG 0x98 > +#define MTK_NOR_PREBUF_STUS_REG 0x9c > +#define MTK_NOR_DELSEL0_REG 0xa0 > +#define MTK_NOR_DELSEL1_REG 0xa4 > +#define MTK_NOR_INTRSTUS_REG 0xa8 > +#define MTK_NOR_INTREN_REG 0xac > +#define MTK_NOR_CHKSUM_CTL_REG 0xb8 > +#define MTK_NOR_CHKSUM_REG 0xbc > +#define MTK_NOR_CMD2_REG 0xc0 > +#define MTK_NOR_WRPROT_REG 0xc4 > +#define MTK_NOR_RADR3_REG0xc8 > +#define MTK_NOR_DUAL_REG 0xcc > +#define MTK_NOR_DELSEL2_REG 0xd0 > +#define MTK_NOR_DELSEL3_REG
Re: [PATCH v4 2/3] mtd: mtk-nor: mtk serial flash controller driver
Hi Bayi, On Tue, Oct 13, 2015 at 05:39:19PM +0800, Bayi Cheng wrote: > add spi nor flash driver for mediatek controller > > Signed-off-by: Bayi Cheng> --- > drivers/mtd/spi-nor/Kconfig | 7 + > drivers/mtd/spi-nor/Makefile | 1 + > drivers/mtd/spi-nor/mtk-quadspi.c | 486 > ++ > 3 files changed, 494 insertions(+) > create mode 100644 drivers/mtd/spi-nor/mtk-quadspi.c > > diff --git a/drivers/mtd/spi-nor/Kconfig b/drivers/mtd/spi-nor/Kconfig > index 89bf4c1..f433890 100644 > --- a/drivers/mtd/spi-nor/Kconfig > +++ b/drivers/mtd/spi-nor/Kconfig > @@ -7,6 +7,13 @@ menuconfig MTD_SPI_NOR > > if MTD_SPI_NOR > > +config MTD_MT81xx_NOR > + tristate "Support SPI flash Controller MTD_MT81xx_NOR" You don't need to repeat the exact symbol name in the short description. But you probably should include the name "MediaTek". How about this? tristate "MediaTek MT81xx SPI NOR flash controller" > + help > + This enables access to SPI Nor flash, using MTD_MT81XX_NOR controller. s/Nor/NOR/ And again, don't name the controller "MTD_MT81XX_NOR." > + This controller does nor support generic SPI BUS, It only supports s/nor/not/ > + SPI NOR Flash. > + > config MTD_SPI_NOR_USE_4K_SECTORS > bool "Use small 4096 B erase sectors" > default y > diff --git a/drivers/mtd/spi-nor/Makefile b/drivers/mtd/spi-nor/Makefile > index e5e..37c020a 100644 > --- a/drivers/mtd/spi-nor/Makefile > +++ b/drivers/mtd/spi-nor/Makefile > @@ -1,3 +1,4 @@ > +obj-$(CONFIG_MTD_MT81xx_NOR) += mtk-quadspi.o Please include this between 'fsl-quadspi' and 'nxp-spifi' (i.e., alphabetical order). > obj-$(CONFIG_MTD_SPI_NOR)+= spi-nor.o > obj-$(CONFIG_SPI_FSL_QUADSPI)+= fsl-quadspi.o > obj-$(CONFIG_SPI_NXP_SPIFI) += nxp-spifi.o > diff --git a/drivers/mtd/spi-nor/mtk-quadspi.c > b/drivers/mtd/spi-nor/mtk-quadspi.c > new file mode 100644 > index 000..c6ac366 > --- /dev/null > +++ b/drivers/mtd/spi-nor/mtk-quadspi.c > @@ -0,0 +1,486 @@ > +/* > + * Copyright (c) 2015 MediaTek Inc. > + * Author: Bayi Cheng > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License version 2 as > + * published by the Free Software Foundation. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + */ > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > + > +#define MTK_NOR_CMD_REG 0x00 > +#define MTK_NOR_CNT_REG 0x04 > +#define MTK_NOR_RDSR_REG 0x08 > +#define MTK_NOR_RDATA_REG0x0c > +#define MTK_NOR_RADR0_REG0x10 > +#define MTK_NOR_RADR1_REG0x14 > +#define MTK_NOR_RADR2_REG0x18 > +#define MTK_NOR_WDATA_REG0x1c > +#define MTK_NOR_PRGDATA0_REG 0x20 > +#define MTK_NOR_PRGDATA1_REG 0x24 > +#define MTK_NOR_PRGDATA2_REG 0x28 > +#define MTK_NOR_PRGDATA3_REG 0x2c > +#define MTK_NOR_PRGDATA4_REG 0x30 > +#define MTK_NOR_PRGDATA5_REG 0x34 > +#define MTK_NOR_SHREG0_REG 0x38 > +#define MTK_NOR_SHREG1_REG 0x3c > +#define MTK_NOR_SHREG2_REG 0x40 > +#define MTK_NOR_SHREG3_REG 0x44 > +#define MTK_NOR_SHREG4_REG 0x48 > +#define MTK_NOR_SHREG5_REG 0x4c > +#define MTK_NOR_SHREG6_REG 0x50 > +#define MTK_NOR_SHREG7_REG 0x54 > +#define MTK_NOR_SHREG8_REG 0x58 > +#define MTK_NOR_SHREG9_REG 0x5c > +#define MTK_NOR_CFG1_REG 0x60 > +#define MTK_NOR_CFG2_REG 0x64 > +#define MTK_NOR_CFG3_REG 0x68 > +#define MTK_NOR_STATUS0_REG 0x70 > +#define MTK_NOR_STATUS1_REG 0x74 > +#define MTK_NOR_STATUS2_REG 0x78 > +#define MTK_NOR_STATUS3_REG 0x7c > +#define MTK_NOR_FLHCFG_REG 0x84 > +#define MTK_NOR_TIME_REG 0x94 > +#define MTK_NOR_PP_DATA_REG 0x98 > +#define MTK_NOR_PREBUF_STUS_REG 0x9c > +#define MTK_NOR_DELSEL0_REG 0xa0 > +#define MTK_NOR_DELSEL1_REG 0xa4 > +#define MTK_NOR_INTRSTUS_REG 0xa8 > +#define MTK_NOR_INTREN_REG 0xac > +#define MTK_NOR_CHKSUM_CTL_REG 0xb8 > +#define MTK_NOR_CHKSUM_REG 0xbc > +#define MTK_NOR_CMD2_REG 0xc0 > +#define MTK_NOR_WRPROT_REG 0xc4 > +#define MTK_NOR_RADR3_REG0xc8 > +#define MTK_NOR_DUAL_REG 0xcc > +#define
Re: [PATCH v4 2/3] mtd: mtk-nor: mtk serial flash controller driver
Hi Bayi, [auto build test ERROR on mtd/master -- if it's inappropriate base, please suggest rules for selecting the more suitable base] url: https://github.com/0day-ci/linux/commits/Bayi-Cheng/Mediatek-SPI-NOR-flash-driver/20151013-174438 config: x86_64-allmodconfig (attached as .config) reproduce: # save the attached .config to linux build tree make ARCH=x86_64 All error/warnings (new ones prefixed by >>): drivers/mtd/spi-nor/mtk-quadspi.c:391:18: sparse: incorrect type in assignment (different base types) drivers/mtd/spi-nor/mtk-quadspi.c:391:18:expected struct mtd_info *mtd drivers/mtd/spi-nor/mtk-quadspi.c:391:18:got struct mtd_info drivers/mtd/spi-nor/mtk-quadspi.c:400:24: sparse: incorrect type in assignment (different argument counts) drivers/mtd/spi-nor/mtk-quadspi.c:400:24:expected int ( *write_reg )( ... ) drivers/mtd/spi-nor/mtk-quadspi.c:400:24:got int ( static [toplevel] * )( ... ) drivers/mtd/spi-nor/mtk-quadspi.c:402:17: sparse: expected structure or union drivers/mtd/spi-nor/mtk-quadspi.c:403:17: sparse: expected structure or union drivers/mtd/spi-nor/mtk-quadspi.c: In function 'mtk_nor_init': >> drivers/mtd/spi-nor/mtk-quadspi.c:391:11: error: incompatible types when >> assigning to type 'struct mtd_info *' from type 'struct mtd_info' nor->mtd = *mtd; ^ >> drivers/mtd/spi-nor/mtk-quadspi.c:400:17: warning: assignment from >> incompatible pointer type [-Wincompatible-pointer-types] nor->write_reg = mt8173_nor_write_reg; ^ >> drivers/mtd/spi-nor/mtk-quadspi.c:402:10: error: request for member 'owner' >> in something not a structure or union nor->mtd.owner = THIS_MODULE; ^ >> drivers/mtd/spi-nor/mtk-quadspi.c:403:10: error: request for member 'name' >> in something not a structure or union nor->mtd.name = "mtk_nor"; ^ drivers/mtd/spi-nor/mtk-quadspi.c:410:36: warning: passing argument 1 of 'mtd_device_parse_register' from incompatible pointer type [-Wincompatible-pointer-types] return mtd_device_parse_register(>mtd, NULL, ppdata, NULL, 0); ^ In file included from drivers/mtd/spi-nor/mtk-quadspi.c:24:0: include/linux/mtd/mtd.h:372:12: note: expected 'struct mtd_info *' but argument is of type 'struct mtd_info **' extern int mtd_device_parse_register(struct mtd_info *mtd, ^ sparse warnings: (new ones prefixed by >>) drivers/mtd/spi-nor/mtk-quadspi.c:391:18: sparse: incorrect type in assignment (different base types) drivers/mtd/spi-nor/mtk-quadspi.c:391:18:expected struct mtd_info *mtd drivers/mtd/spi-nor/mtk-quadspi.c:391:18:got struct mtd_info >> drivers/mtd/spi-nor/mtk-quadspi.c:400:24: sparse: incorrect type in >> assignment (different argument counts) drivers/mtd/spi-nor/mtk-quadspi.c:400:24:expected int ( *write_reg )( ... ) drivers/mtd/spi-nor/mtk-quadspi.c:400:24:got int ( static [toplevel] * )( ... ) drivers/mtd/spi-nor/mtk-quadspi.c:402:17: sparse: expected structure or union drivers/mtd/spi-nor/mtk-quadspi.c:403:17: sparse: expected structure or union drivers/mtd/spi-nor/mtk-quadspi.c: In function 'mtk_nor_init': drivers/mtd/spi-nor/mtk-quadspi.c:391:11: error: incompatible types when assigning to type 'struct mtd_info *' from type 'struct mtd_info' nor->mtd = *mtd; ^ drivers/mtd/spi-nor/mtk-quadspi.c:400:17: warning: assignment from incompatible pointer type [-Wincompatible-pointer-types] nor->write_reg = mt8173_nor_write_reg; ^ drivers/mtd/spi-nor/mtk-quadspi.c:402:10: error: request for member 'owner' in something not a structure or union nor->mtd.owner = THIS_MODULE; ^ drivers/mtd/spi-nor/mtk-quadspi.c:403:10: error: request for member 'name' in something not a structure or union nor->mtd.name = "mtk_nor"; ^ drivers/mtd/spi-nor/mtk-quadspi.c:410:36: warning: passing argument 1 of 'mtd_device_parse_register' from incompatible pointer type [-Wincompatible-pointer-types] return mtd_device_parse_register(>mtd, NULL, ppdata, NULL, 0); ^ In file included from drivers/mtd/spi-nor/mtk-quadspi.c:24:0: include/linux/mtd/mtd.h:372:12: note: expected 'struct mtd_info *' but argument is of type 'struct mtd_info **' extern int mtd_device_parse_register(struct mtd_info *mtd, ^ vim +391 drivers/mtd/spi-nor/mtk-quadspi.c 385 struct spi_nor *nor; 386 struct mtd_info *mtd; 387 388 writel(MTK_NOR_ENABLE_SF_CMD, mt8173_nor->base + MTK_NOR_WRPROT_REG); 389 nor = _nor->nor; 390 mtd = _nor->mtd; > 391 nor->mtd = *mtd; 392 nor->dev = mt8173_nor->dev; 393 nor->priv = mt8173_nor; 394 mtd->priv = nor; 395 396 /* fill the hooks to spi
[PATCH v4 2/3] mtd: mtk-nor: mtk serial flash controller driver
add spi nor flash driver for mediatek controller Signed-off-by: Bayi Cheng --- drivers/mtd/spi-nor/Kconfig | 7 + drivers/mtd/spi-nor/Makefile | 1 + drivers/mtd/spi-nor/mtk-quadspi.c | 486 ++ 3 files changed, 494 insertions(+) create mode 100644 drivers/mtd/spi-nor/mtk-quadspi.c diff --git a/drivers/mtd/spi-nor/Kconfig b/drivers/mtd/spi-nor/Kconfig index 89bf4c1..f433890 100644 --- a/drivers/mtd/spi-nor/Kconfig +++ b/drivers/mtd/spi-nor/Kconfig @@ -7,6 +7,13 @@ menuconfig MTD_SPI_NOR if MTD_SPI_NOR +config MTD_MT81xx_NOR + tristate "Support SPI flash Controller MTD_MT81xx_NOR" + help + This enables access to SPI Nor flash, using MTD_MT81XX_NOR controller. + This controller does nor support generic SPI BUS, It only supports + SPI NOR Flash. + config MTD_SPI_NOR_USE_4K_SECTORS bool "Use small 4096 B erase sectors" default y diff --git a/drivers/mtd/spi-nor/Makefile b/drivers/mtd/spi-nor/Makefile index e5e..37c020a 100644 --- a/drivers/mtd/spi-nor/Makefile +++ b/drivers/mtd/spi-nor/Makefile @@ -1,3 +1,4 @@ +obj-$(CONFIG_MTD_MT81xx_NOR) += mtk-quadspi.o obj-$(CONFIG_MTD_SPI_NOR) += spi-nor.o obj-$(CONFIG_SPI_FSL_QUADSPI) += fsl-quadspi.o obj-$(CONFIG_SPI_NXP_SPIFI)+= nxp-spifi.o diff --git a/drivers/mtd/spi-nor/mtk-quadspi.c b/drivers/mtd/spi-nor/mtk-quadspi.c new file mode 100644 index 000..c6ac366 --- /dev/null +++ b/drivers/mtd/spi-nor/mtk-quadspi.c @@ -0,0 +1,486 @@ +/* + * Copyright (c) 2015 MediaTek Inc. + * Author: Bayi Cheng + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define MTK_NOR_CMD_REG0x00 +#define MTK_NOR_CNT_REG0x04 +#define MTK_NOR_RDSR_REG 0x08 +#define MTK_NOR_RDATA_REG 0x0c +#define MTK_NOR_RADR0_REG 0x10 +#define MTK_NOR_RADR1_REG 0x14 +#define MTK_NOR_RADR2_REG 0x18 +#define MTK_NOR_WDATA_REG 0x1c +#define MTK_NOR_PRGDATA0_REG 0x20 +#define MTK_NOR_PRGDATA1_REG 0x24 +#define MTK_NOR_PRGDATA2_REG 0x28 +#define MTK_NOR_PRGDATA3_REG 0x2c +#define MTK_NOR_PRGDATA4_REG 0x30 +#define MTK_NOR_PRGDATA5_REG 0x34 +#define MTK_NOR_SHREG0_REG 0x38 +#define MTK_NOR_SHREG1_REG 0x3c +#define MTK_NOR_SHREG2_REG 0x40 +#define MTK_NOR_SHREG3_REG 0x44 +#define MTK_NOR_SHREG4_REG 0x48 +#define MTK_NOR_SHREG5_REG 0x4c +#define MTK_NOR_SHREG6_REG 0x50 +#define MTK_NOR_SHREG7_REG 0x54 +#define MTK_NOR_SHREG8_REG 0x58 +#define MTK_NOR_SHREG9_REG 0x5c +#define MTK_NOR_CFG1_REG 0x60 +#define MTK_NOR_CFG2_REG 0x64 +#define MTK_NOR_CFG3_REG 0x68 +#define MTK_NOR_STATUS0_REG0x70 +#define MTK_NOR_STATUS1_REG0x74 +#define MTK_NOR_STATUS2_REG0x78 +#define MTK_NOR_STATUS3_REG0x7c +#define MTK_NOR_FLHCFG_REG 0x84 +#define MTK_NOR_TIME_REG 0x94 +#define MTK_NOR_PP_DATA_REG0x98 +#define MTK_NOR_PREBUF_STUS_REG0x9c +#define MTK_NOR_DELSEL0_REG0xa0 +#define MTK_NOR_DELSEL1_REG0xa4 +#define MTK_NOR_INTRSTUS_REG 0xa8 +#define MTK_NOR_INTREN_REG 0xac +#define MTK_NOR_CHKSUM_CTL_REG 0xb8 +#define MTK_NOR_CHKSUM_REG 0xbc +#define MTK_NOR_CMD2_REG 0xc0 +#define MTK_NOR_WRPROT_REG 0xc4 +#define MTK_NOR_RADR3_REG 0xc8 +#define MTK_NOR_DUAL_REG 0xcc +#define MTK_NOR_DELSEL2_REG0xd0 +#define MTK_NOR_DELSEL3_REG0xd4 +#define MTK_NOR_DELSEL4_REG0xd8 + +/* commands for mtk nor controller */ +#define MTK_NOR_READ_CMD 0x0 +#define MTK_NOR_RDSR_CMD 0x2 +#define MTK_NOR_PRG_CMD0x4 +#define MTK_NOR_WR_CMD 0x10 +#define MTK_NOR_PIO_WR_CMD 0x90 +#define MTK_NOR_WRSR_CMD 0x20 +#define MTK_NOR_PIO_READ_CMD 0x81 +#define MTK_NOR_WR_BUF_ENABLE 0x1 +#define MTK_NOR_WR_BUF_DISABLE 0x0 +#define MTK_NOR_ENABLE_SF_CMD 0x30 +#define MTK_NOR_DUAD_ADDR_EN 0x8
[PATCH v4 2/3] mtd: mtk-nor: mtk serial flash controller driver
add spi nor flash driver for mediatek controller Signed-off-by: Bayi Cheng--- drivers/mtd/spi-nor/Kconfig | 7 + drivers/mtd/spi-nor/Makefile | 1 + drivers/mtd/spi-nor/mtk-quadspi.c | 486 ++ 3 files changed, 494 insertions(+) create mode 100644 drivers/mtd/spi-nor/mtk-quadspi.c diff --git a/drivers/mtd/spi-nor/Kconfig b/drivers/mtd/spi-nor/Kconfig index 89bf4c1..f433890 100644 --- a/drivers/mtd/spi-nor/Kconfig +++ b/drivers/mtd/spi-nor/Kconfig @@ -7,6 +7,13 @@ menuconfig MTD_SPI_NOR if MTD_SPI_NOR +config MTD_MT81xx_NOR + tristate "Support SPI flash Controller MTD_MT81xx_NOR" + help + This enables access to SPI Nor flash, using MTD_MT81XX_NOR controller. + This controller does nor support generic SPI BUS, It only supports + SPI NOR Flash. + config MTD_SPI_NOR_USE_4K_SECTORS bool "Use small 4096 B erase sectors" default y diff --git a/drivers/mtd/spi-nor/Makefile b/drivers/mtd/spi-nor/Makefile index e5e..37c020a 100644 --- a/drivers/mtd/spi-nor/Makefile +++ b/drivers/mtd/spi-nor/Makefile @@ -1,3 +1,4 @@ +obj-$(CONFIG_MTD_MT81xx_NOR) += mtk-quadspi.o obj-$(CONFIG_MTD_SPI_NOR) += spi-nor.o obj-$(CONFIG_SPI_FSL_QUADSPI) += fsl-quadspi.o obj-$(CONFIG_SPI_NXP_SPIFI)+= nxp-spifi.o diff --git a/drivers/mtd/spi-nor/mtk-quadspi.c b/drivers/mtd/spi-nor/mtk-quadspi.c new file mode 100644 index 000..c6ac366 --- /dev/null +++ b/drivers/mtd/spi-nor/mtk-quadspi.c @@ -0,0 +1,486 @@ +/* + * Copyright (c) 2015 MediaTek Inc. + * Author: Bayi Cheng + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define MTK_NOR_CMD_REG0x00 +#define MTK_NOR_CNT_REG0x04 +#define MTK_NOR_RDSR_REG 0x08 +#define MTK_NOR_RDATA_REG 0x0c +#define MTK_NOR_RADR0_REG 0x10 +#define MTK_NOR_RADR1_REG 0x14 +#define MTK_NOR_RADR2_REG 0x18 +#define MTK_NOR_WDATA_REG 0x1c +#define MTK_NOR_PRGDATA0_REG 0x20 +#define MTK_NOR_PRGDATA1_REG 0x24 +#define MTK_NOR_PRGDATA2_REG 0x28 +#define MTK_NOR_PRGDATA3_REG 0x2c +#define MTK_NOR_PRGDATA4_REG 0x30 +#define MTK_NOR_PRGDATA5_REG 0x34 +#define MTK_NOR_SHREG0_REG 0x38 +#define MTK_NOR_SHREG1_REG 0x3c +#define MTK_NOR_SHREG2_REG 0x40 +#define MTK_NOR_SHREG3_REG 0x44 +#define MTK_NOR_SHREG4_REG 0x48 +#define MTK_NOR_SHREG5_REG 0x4c +#define MTK_NOR_SHREG6_REG 0x50 +#define MTK_NOR_SHREG7_REG 0x54 +#define MTK_NOR_SHREG8_REG 0x58 +#define MTK_NOR_SHREG9_REG 0x5c +#define MTK_NOR_CFG1_REG 0x60 +#define MTK_NOR_CFG2_REG 0x64 +#define MTK_NOR_CFG3_REG 0x68 +#define MTK_NOR_STATUS0_REG0x70 +#define MTK_NOR_STATUS1_REG0x74 +#define MTK_NOR_STATUS2_REG0x78 +#define MTK_NOR_STATUS3_REG0x7c +#define MTK_NOR_FLHCFG_REG 0x84 +#define MTK_NOR_TIME_REG 0x94 +#define MTK_NOR_PP_DATA_REG0x98 +#define MTK_NOR_PREBUF_STUS_REG0x9c +#define MTK_NOR_DELSEL0_REG0xa0 +#define MTK_NOR_DELSEL1_REG0xa4 +#define MTK_NOR_INTRSTUS_REG 0xa8 +#define MTK_NOR_INTREN_REG 0xac +#define MTK_NOR_CHKSUM_CTL_REG 0xb8 +#define MTK_NOR_CHKSUM_REG 0xbc +#define MTK_NOR_CMD2_REG 0xc0 +#define MTK_NOR_WRPROT_REG 0xc4 +#define MTK_NOR_RADR3_REG 0xc8 +#define MTK_NOR_DUAL_REG 0xcc +#define MTK_NOR_DELSEL2_REG0xd0 +#define MTK_NOR_DELSEL3_REG0xd4 +#define MTK_NOR_DELSEL4_REG0xd8 + +/* commands for mtk nor controller */ +#define MTK_NOR_READ_CMD 0x0 +#define MTK_NOR_RDSR_CMD 0x2 +#define MTK_NOR_PRG_CMD0x4 +#define MTK_NOR_WR_CMD 0x10 +#define MTK_NOR_PIO_WR_CMD 0x90 +#define MTK_NOR_WRSR_CMD 0x20 +#define MTK_NOR_PIO_READ_CMD 0x81 +#define MTK_NOR_WR_BUF_ENABLE 0x1 +#define MTK_NOR_WR_BUF_DISABLE 0x0 +#define MTK_NOR_ENABLE_SF_CMD 0x30
Re: [PATCH v4 2/3] mtd: mtk-nor: mtk serial flash controller driver
Hi Bayi, [auto build test ERROR on mtd/master -- if it's inappropriate base, please suggest rules for selecting the more suitable base] url: https://github.com/0day-ci/linux/commits/Bayi-Cheng/Mediatek-SPI-NOR-flash-driver/20151013-174438 config: x86_64-allmodconfig (attached as .config) reproduce: # save the attached .config to linux build tree make ARCH=x86_64 All error/warnings (new ones prefixed by >>): drivers/mtd/spi-nor/mtk-quadspi.c:391:18: sparse: incorrect type in assignment (different base types) drivers/mtd/spi-nor/mtk-quadspi.c:391:18:expected struct mtd_info *mtd drivers/mtd/spi-nor/mtk-quadspi.c:391:18:got struct mtd_info drivers/mtd/spi-nor/mtk-quadspi.c:400:24: sparse: incorrect type in assignment (different argument counts) drivers/mtd/spi-nor/mtk-quadspi.c:400:24:expected int ( *write_reg )( ... ) drivers/mtd/spi-nor/mtk-quadspi.c:400:24:got int ( static [toplevel] * )( ... ) drivers/mtd/spi-nor/mtk-quadspi.c:402:17: sparse: expected structure or union drivers/mtd/spi-nor/mtk-quadspi.c:403:17: sparse: expected structure or union drivers/mtd/spi-nor/mtk-quadspi.c: In function 'mtk_nor_init': >> drivers/mtd/spi-nor/mtk-quadspi.c:391:11: error: incompatible types when >> assigning to type 'struct mtd_info *' from type 'struct mtd_info' nor->mtd = *mtd; ^ >> drivers/mtd/spi-nor/mtk-quadspi.c:400:17: warning: assignment from >> incompatible pointer type [-Wincompatible-pointer-types] nor->write_reg = mt8173_nor_write_reg; ^ >> drivers/mtd/spi-nor/mtk-quadspi.c:402:10: error: request for member 'owner' >> in something not a structure or union nor->mtd.owner = THIS_MODULE; ^ >> drivers/mtd/spi-nor/mtk-quadspi.c:403:10: error: request for member 'name' >> in something not a structure or union nor->mtd.name = "mtk_nor"; ^ drivers/mtd/spi-nor/mtk-quadspi.c:410:36: warning: passing argument 1 of 'mtd_device_parse_register' from incompatible pointer type [-Wincompatible-pointer-types] return mtd_device_parse_register(>mtd, NULL, ppdata, NULL, 0); ^ In file included from drivers/mtd/spi-nor/mtk-quadspi.c:24:0: include/linux/mtd/mtd.h:372:12: note: expected 'struct mtd_info *' but argument is of type 'struct mtd_info **' extern int mtd_device_parse_register(struct mtd_info *mtd, ^ sparse warnings: (new ones prefixed by >>) drivers/mtd/spi-nor/mtk-quadspi.c:391:18: sparse: incorrect type in assignment (different base types) drivers/mtd/spi-nor/mtk-quadspi.c:391:18:expected struct mtd_info *mtd drivers/mtd/spi-nor/mtk-quadspi.c:391:18:got struct mtd_info >> drivers/mtd/spi-nor/mtk-quadspi.c:400:24: sparse: incorrect type in >> assignment (different argument counts) drivers/mtd/spi-nor/mtk-quadspi.c:400:24:expected int ( *write_reg )( ... ) drivers/mtd/spi-nor/mtk-quadspi.c:400:24:got int ( static [toplevel] * )( ... ) drivers/mtd/spi-nor/mtk-quadspi.c:402:17: sparse: expected structure or union drivers/mtd/spi-nor/mtk-quadspi.c:403:17: sparse: expected structure or union drivers/mtd/spi-nor/mtk-quadspi.c: In function 'mtk_nor_init': drivers/mtd/spi-nor/mtk-quadspi.c:391:11: error: incompatible types when assigning to type 'struct mtd_info *' from type 'struct mtd_info' nor->mtd = *mtd; ^ drivers/mtd/spi-nor/mtk-quadspi.c:400:17: warning: assignment from incompatible pointer type [-Wincompatible-pointer-types] nor->write_reg = mt8173_nor_write_reg; ^ drivers/mtd/spi-nor/mtk-quadspi.c:402:10: error: request for member 'owner' in something not a structure or union nor->mtd.owner = THIS_MODULE; ^ drivers/mtd/spi-nor/mtk-quadspi.c:403:10: error: request for member 'name' in something not a structure or union nor->mtd.name = "mtk_nor"; ^ drivers/mtd/spi-nor/mtk-quadspi.c:410:36: warning: passing argument 1 of 'mtd_device_parse_register' from incompatible pointer type [-Wincompatible-pointer-types] return mtd_device_parse_register(>mtd, NULL, ppdata, NULL, 0); ^ In file included from drivers/mtd/spi-nor/mtk-quadspi.c:24:0: include/linux/mtd/mtd.h:372:12: note: expected 'struct mtd_info *' but argument is of type 'struct mtd_info **' extern int mtd_device_parse_register(struct mtd_info *mtd, ^ vim +391 drivers/mtd/spi-nor/mtk-quadspi.c 385 struct spi_nor *nor; 386 struct mtd_info *mtd; 387 388 writel(MTK_NOR_ENABLE_SF_CMD, mt8173_nor->base + MTK_NOR_WRPROT_REG); 389 nor = _nor->nor; 390 mtd = _nor->mtd; > 391 nor->mtd = *mtd; 392 nor->dev = mt8173_nor->dev; 393 nor->priv = mt8173_nor; 394 mtd->priv = nor; 395 396 /* fill the hooks to spi