* mtd: spi-nor: fsl-quadspi: add support for ls1021a @ 2016-01-21 7:53 Yuan Yao 2016-01-21 7:53 ` [PATCH v3 1/3] mtd: spi-nor: fsl-quadspi: add big-endian support Yuan Yao ` (3 more replies) 0 siblings, 4 replies; 10+ messages in thread From: Yuan Yao @ 2016-01-21 7:53 UTC (permalink / raw) To: dwmw2, computersforpeace, han.xu; +Cc: linux-kernel, linux-mtd, yao.yuan This patch set is used for add the fsl-quadspi support for ls1021a and ls1043a, so remove the patch: mtd: spi-nor: fsl-quadspi: extend support for some special requerment. This patch will be send with anther patch set for add QSPI support on LS2080A. All the new property are document in anther patch set which is already send to linux-kernel@vger.kernel.org and devicetree@vger.kernel.org. Here is the patch name: 0001-Documentation-fsl-quadspi-Add-fsl-ls2080a-dspi-compa.patch 0002-Documentation-fsl-quadspi-Add-fsl-ls2080a-qspi-compa.patch 0003-dts-ls2080a-update-the-DTS-for-QSPI-and-DSPI-support.patch 0004-Documentation-fsl-quadspi-Add-optional-properties.patch Any extra information you can find them on the patchwork: https://patchwork.kernel.org/patch/8078931/ https://patchwork.kernel.org/patch/8078951/ https://patchwork.kernel.org/patch/8079091/ https://patchwork.kernel.org/patch/8078941/ Thanks. Yuan Yao. ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v3 1/3] mtd: spi-nor: fsl-quadspi: add big-endian support 2016-01-21 7:53 mtd: spi-nor: fsl-quadspi: add support for ls1021a Yuan Yao @ 2016-01-21 7:53 ` Yuan Yao 2016-01-23 21:11 ` Brian Norris 2016-01-21 7:53 ` [PATCH v3 2/3] mtd: spi-nor: fsl-quadspi: add support for ls1021a Yuan Yao ` (2 subsequent siblings) 3 siblings, 1 reply; 10+ messages in thread From: Yuan Yao @ 2016-01-21 7:53 UTC (permalink / raw) To: dwmw2, computersforpeace, han.xu; +Cc: linux-kernel, linux-mtd, yao.yuan Add R/W functions for big- or little-endian registers: The qSPI controller's endian is independent of the CPU core's endian. So far, the qSPI have two versions for big-endian and little-endian. Signed-off-by: Yuan Yao <yao.yuan@nxp.com> Acked-by: Han xu <han.xu@freescale.com> --- Changed in v3: Update my email to <yao.yuan@nxp.com> Changed in v2: Rebase to the lastest code. --- drivers/mtd/spi-nor/fsl-quadspi.c | 157 +++++++++++++++++++++++--------------- 1 file changed, 97 insertions(+), 60 deletions(-) diff --git a/drivers/mtd/spi-nor/fsl-quadspi.c b/drivers/mtd/spi-nor/fsl-quadspi.c index 54640f1..04e8a93 100644 --- a/drivers/mtd/spi-nor/fsl-quadspi.c +++ b/drivers/mtd/spi-nor/fsl-quadspi.c @@ -275,6 +275,7 @@ struct fsl_qspi { u32 clk_rate; unsigned int chip_base_addr; /* We may support two chips. */ bool has_second_chip; + bool big_endian; struct mutex lock; struct pm_qos_request pm_qos_req; }; @@ -300,6 +301,28 @@ static inline int needs_wakeup_wait_mode(struct fsl_qspi *q) } /* + * R/W functions for big- or little-endian registers: + * The qSPI controller's endian is independent of the CPU core's endian. + * So far, although the CPU core is little-endian but the qSPI have two + * versions for big-endian and little-endian. + */ +static void qspi_writel(struct fsl_qspi *q, u32 val, void __iomem *addr) +{ + if (q->big_endian) + iowrite32be(val, addr); + else + iowrite32(val, addr); +} + +static u32 qspi_readl(struct fsl_qspi *q, void __iomem *addr) +{ + if (q->big_endian) + return ioread32be(addr); + else + return ioread32(addr); +} + +/* * An IC bug makes us to re-arrange the 32-bit data. * The following chips, such as IMX6SLX, have fixed this bug. */ @@ -310,14 +333,14 @@ static inline u32 fsl_qspi_endian_xchg(struct fsl_qspi *q, u32 a) static inline void fsl_qspi_unlock_lut(struct fsl_qspi *q) { - writel(QUADSPI_LUTKEY_VALUE, q->iobase + QUADSPI_LUTKEY); - writel(QUADSPI_LCKER_UNLOCK, q->iobase + QUADSPI_LCKCR); + qspi_writel(q, QUADSPI_LUTKEY_VALUE, q->iobase + QUADSPI_LUTKEY); + qspi_writel(q, QUADSPI_LCKER_UNLOCK, q->iobase + QUADSPI_LCKCR); } static inline void fsl_qspi_lock_lut(struct fsl_qspi *q) { - writel(QUADSPI_LUTKEY_VALUE, q->iobase + QUADSPI_LUTKEY); - writel(QUADSPI_LCKER_LOCK, q->iobase + QUADSPI_LCKCR); + qspi_writel(q, QUADSPI_LUTKEY_VALUE, q->iobase + QUADSPI_LUTKEY); + qspi_writel(q, QUADSPI_LCKER_LOCK, q->iobase + QUADSPI_LCKCR); } static irqreturn_t fsl_qspi_irq_handler(int irq, void *dev_id) @@ -326,8 +349,8 @@ static irqreturn_t fsl_qspi_irq_handler(int irq, void *dev_id) u32 reg; /* clear interrupt */ - reg = readl(q->iobase + QUADSPI_FR); - writel(reg, q->iobase + QUADSPI_FR); + reg = qspi_readl(q, q->iobase + QUADSPI_FR); + qspi_writel(q, reg, q->iobase + QUADSPI_FR); if (reg & QUADSPI_FR_TFF_MASK) complete(&q->c); @@ -348,7 +371,7 @@ static void fsl_qspi_init_lut(struct fsl_qspi *q) /* Clear all the LUT table */ for (i = 0; i < QUADSPI_LUT_NUM; i++) - writel(0, base + QUADSPI_LUT_BASE + i * 4); + qspi_writel(q, 0, base + QUADSPI_LUT_BASE + i * 4); /* Quad Read */ lut_base = SEQID_QUAD_READ * 4; @@ -364,14 +387,15 @@ static void fsl_qspi_init_lut(struct fsl_qspi *q) dummy = 8; } - writel(LUT0(CMD, PAD1, cmd) | LUT1(ADDR, PAD1, addrlen), + qspi_writel(q, LUT0(CMD, PAD1, cmd) | LUT1(ADDR, PAD1, addrlen), base + QUADSPI_LUT(lut_base)); - writel(LUT0(DUMMY, PAD1, dummy) | LUT1(FSL_READ, PAD4, rxfifo), + qspi_writel(q, LUT0(DUMMY, PAD1, dummy) | LUT1(FSL_READ, PAD4, rxfifo), base + QUADSPI_LUT(lut_base + 1)); /* Write enable */ lut_base = SEQID_WREN * 4; - writel(LUT0(CMD, PAD1, SPINOR_OP_WREN), base + QUADSPI_LUT(lut_base)); + qspi_writel(q, LUT0(CMD, PAD1, SPINOR_OP_WREN), + base + QUADSPI_LUT(lut_base)); /* Page Program */ lut_base = SEQID_PP * 4; @@ -385,13 +409,15 @@ static void fsl_qspi_init_lut(struct fsl_qspi *q) addrlen = ADDR32BIT; } - writel(LUT0(CMD, PAD1, cmd) | LUT1(ADDR, PAD1, addrlen), + qspi_writel(q, LUT0(CMD, PAD1, cmd) | LUT1(ADDR, PAD1, addrlen), base + QUADSPI_LUT(lut_base)); - writel(LUT0(FSL_WRITE, PAD1, 0), base + QUADSPI_LUT(lut_base + 1)); + qspi_writel(q, LUT0(FSL_WRITE, PAD1, 0), + base + QUADSPI_LUT(lut_base + 1)); /* Read Status */ lut_base = SEQID_RDSR * 4; - writel(LUT0(CMD, PAD1, SPINOR_OP_RDSR) | LUT1(FSL_READ, PAD1, 0x1), + qspi_writel(q, LUT0(CMD, PAD1, SPINOR_OP_RDSR) | + LUT1(FSL_READ, PAD1, 0x1), base + QUADSPI_LUT(lut_base)); /* Erase a sector */ @@ -400,40 +426,46 @@ static void fsl_qspi_init_lut(struct fsl_qspi *q) cmd = q->nor[0].erase_opcode; addrlen = q->nor_size <= SZ_16M ? ADDR24BIT : ADDR32BIT; - writel(LUT0(CMD, PAD1, cmd) | LUT1(ADDR, PAD1, addrlen), + qspi_writel(q, LUT0(CMD, PAD1, cmd) | LUT1(ADDR, PAD1, addrlen), base + QUADSPI_LUT(lut_base)); /* Erase the whole chip */ lut_base = SEQID_CHIP_ERASE * 4; - writel(LUT0(CMD, PAD1, SPINOR_OP_CHIP_ERASE), + qspi_writel(q, LUT0(CMD, PAD1, SPINOR_OP_CHIP_ERASE), base + QUADSPI_LUT(lut_base)); /* READ ID */ lut_base = SEQID_RDID * 4; - writel(LUT0(CMD, PAD1, SPINOR_OP_RDID) | LUT1(FSL_READ, PAD1, 0x8), + qspi_writel(q, LUT0(CMD, PAD1, SPINOR_OP_RDID) | + LUT1(FSL_READ, PAD1, 0x8), base + QUADSPI_LUT(lut_base)); /* Write Register */ lut_base = SEQID_WRSR * 4; - writel(LUT0(CMD, PAD1, SPINOR_OP_WRSR) | LUT1(FSL_WRITE, PAD1, 0x2), + qspi_writel(q, LUT0(CMD, PAD1, SPINOR_OP_WRSR) | + LUT1(FSL_WRITE, PAD1, 0x2), base + QUADSPI_LUT(lut_base)); /* Read Configuration Register */ lut_base = SEQID_RDCR * 4; - writel(LUT0(CMD, PAD1, SPINOR_OP_RDCR) | LUT1(FSL_READ, PAD1, 0x1), + qspi_writel(q, LUT0(CMD, PAD1, SPINOR_OP_RDCR) | + LUT1(FSL_READ, PAD1, 0x1), base + QUADSPI_LUT(lut_base)); /* Write disable */ lut_base = SEQID_WRDI * 4; - writel(LUT0(CMD, PAD1, SPINOR_OP_WRDI), base + QUADSPI_LUT(lut_base)); + qspi_writel(q, LUT0(CMD, PAD1, SPINOR_OP_WRDI), + base + QUADSPI_LUT(lut_base)); /* Enter 4 Byte Mode (Micron) */ lut_base = SEQID_EN4B * 4; - writel(LUT0(CMD, PAD1, SPINOR_OP_EN4B), base + QUADSPI_LUT(lut_base)); + qspi_writel(q, LUT0(CMD, PAD1, SPINOR_OP_EN4B), + base + QUADSPI_LUT(lut_base)); /* Enter 4 Byte Mode (Spansion) */ lut_base = SEQID_BRWR * 4; - writel(LUT0(CMD, PAD1, SPINOR_OP_BRWR), base + QUADSPI_LUT(lut_base)); + qspi_writel(q, LUT0(CMD, PAD1, SPINOR_OP_BRWR), + base + QUADSPI_LUT(lut_base)); fsl_qspi_lock_lut(q); } @@ -488,15 +520,16 @@ fsl_qspi_runcmd(struct fsl_qspi *q, u8 cmd, unsigned int addr, int len) q->chip_base_addr, addr, len, cmd); /* save the reg */ - reg = readl(base + QUADSPI_MCR); + reg = qspi_readl(q, base + QUADSPI_MCR); - writel(q->memmap_phy + q->chip_base_addr + addr, base + QUADSPI_SFAR); - writel(QUADSPI_RBCT_WMRK_MASK | QUADSPI_RBCT_RXBRD_USEIPS, + qspi_writel(q, q->memmap_phy + q->chip_base_addr + addr, + base + QUADSPI_SFAR); + qspi_writel(q, QUADSPI_RBCT_WMRK_MASK | QUADSPI_RBCT_RXBRD_USEIPS, base + QUADSPI_RBCT); - writel(reg | QUADSPI_MCR_CLR_RXF_MASK, base + QUADSPI_MCR); + qspi_writel(q, reg | QUADSPI_MCR_CLR_RXF_MASK, base + QUADSPI_MCR); do { - reg2 = readl(base + QUADSPI_SR); + reg2 = qspi_readl(q, base + QUADSPI_SR); if (reg2 & (QUADSPI_SR_IP_ACC_MASK | QUADSPI_SR_AHB_ACC_MASK)) { udelay(1); dev_dbg(q->dev, "The controller is busy, 0x%x\n", reg2); @@ -507,21 +540,22 @@ fsl_qspi_runcmd(struct fsl_qspi *q, u8 cmd, unsigned int addr, int len) /* trigger the LUT now */ seqid = fsl_qspi_get_seqid(q, cmd); - writel((seqid << QUADSPI_IPCR_SEQID_SHIFT) | len, base + QUADSPI_IPCR); + qspi_writel(q, (seqid << QUADSPI_IPCR_SEQID_SHIFT) | len, + base + QUADSPI_IPCR); /* Wait for the interrupt. */ if (!wait_for_completion_timeout(&q->c, msecs_to_jiffies(1000))) { dev_err(q->dev, "cmd 0x%.2x timeout, addr@%.8x, FR:0x%.8x, SR:0x%.8x\n", - cmd, addr, readl(base + QUADSPI_FR), - readl(base + QUADSPI_SR)); + cmd, addr, qspi_readl(q, base + QUADSPI_FR), + qspi_readl(q, base + QUADSPI_SR)); err = -ETIMEDOUT; } else { err = 0; } /* restore the MCR */ - writel(reg, base + QUADSPI_MCR); + qspi_writel(q, reg, base + QUADSPI_MCR); return err; } @@ -533,7 +567,7 @@ static void fsl_qspi_read_data(struct fsl_qspi *q, int len, u8 *rxbuf) int i = 0; while (len > 0) { - tmp = readl(q->iobase + QUADSPI_RBDR + i * 4); + tmp = qspi_readl(q, q->iobase + QUADSPI_RBDR + i * 4); tmp = fsl_qspi_endian_xchg(q, tmp); dev_dbg(q->dev, "chip addr:0x%.8x, rcv:0x%.8x\n", q->chip_base_addr, tmp); @@ -561,9 +595,9 @@ static inline void fsl_qspi_invalid(struct fsl_qspi *q) { u32 reg; - reg = readl(q->iobase + QUADSPI_MCR); + reg = qspi_readl(q, q->iobase + QUADSPI_MCR); reg |= QUADSPI_MCR_SWRSTHD_MASK | QUADSPI_MCR_SWRSTSD_MASK; - writel(reg, q->iobase + QUADSPI_MCR); + qspi_writel(q, reg, q->iobase + QUADSPI_MCR); /* * The minimum delay : 1 AHB + 2 SFCK clocks. @@ -572,7 +606,7 @@ static inline void fsl_qspi_invalid(struct fsl_qspi *q) udelay(1); reg &= ~(QUADSPI_MCR_SWRSTHD_MASK | QUADSPI_MCR_SWRSTSD_MASK); - writel(reg, q->iobase + QUADSPI_MCR); + qspi_writel(q, reg, q->iobase + QUADSPI_MCR); } static int fsl_qspi_nor_write(struct fsl_qspi *q, struct spi_nor *nor, @@ -586,20 +620,20 @@ static int fsl_qspi_nor_write(struct fsl_qspi *q, struct spi_nor *nor, q->chip_base_addr, to, count); /* clear the TX FIFO. */ - tmp = readl(q->iobase + QUADSPI_MCR); - writel(tmp | QUADSPI_MCR_CLR_TXF_MASK, q->iobase + QUADSPI_MCR); + tmp = qspi_readl(q, q->iobase + QUADSPI_MCR); + qspi_writel(q, tmp | QUADSPI_MCR_CLR_TXF_MASK, q->iobase + QUADSPI_MCR); /* fill the TX data to the FIFO */ for (j = 0, i = ((count + 3) / 4); j < i; j++) { tmp = fsl_qspi_endian_xchg(q, *txbuf); - writel(tmp, q->iobase + QUADSPI_TBDR); + qspi_writel(q, tmp, q->iobase + QUADSPI_TBDR); txbuf++; } /* fill the TXFIFO upto 16 bytes for i.MX7d */ if (needs_fill_txfifo(q)) for (; i < 4; i++) - writel(tmp, q->iobase + QUADSPI_TBDR); + qspi_writel(q, tmp, q->iobase + QUADSPI_TBDR); /* Trigger it */ ret = fsl_qspi_runcmd(q, opcode, to, count); @@ -615,10 +649,10 @@ static void fsl_qspi_set_map_addr(struct fsl_qspi *q) int nor_size = q->nor_size; void __iomem *base = q->iobase; - writel(nor_size + q->memmap_phy, base + QUADSPI_SFA1AD); - writel(nor_size * 2 + q->memmap_phy, base + QUADSPI_SFA2AD); - writel(nor_size * 3 + q->memmap_phy, base + QUADSPI_SFB1AD); - writel(nor_size * 4 + q->memmap_phy, base + QUADSPI_SFB2AD); + qspi_writel(q, nor_size + q->memmap_phy, base + QUADSPI_SFA1AD); + qspi_writel(q, nor_size * 2 + q->memmap_phy, base + QUADSPI_SFA2AD); + qspi_writel(q, nor_size * 3 + q->memmap_phy, base + QUADSPI_SFB1AD); + qspi_writel(q, nor_size * 4 + q->memmap_phy, base + QUADSPI_SFB2AD); } /* @@ -640,24 +674,26 @@ static void fsl_qspi_init_abh_read(struct fsl_qspi *q) int seqid; /* AHB configuration for access buffer 0/1/2 .*/ - writel(QUADSPI_BUFXCR_INVALID_MSTRID, base + QUADSPI_BUF0CR); - writel(QUADSPI_BUFXCR_INVALID_MSTRID, base + QUADSPI_BUF1CR); - writel(QUADSPI_BUFXCR_INVALID_MSTRID, base + QUADSPI_BUF2CR); + qspi_writel(q, QUADSPI_BUFXCR_INVALID_MSTRID, base + QUADSPI_BUF0CR); + qspi_writel(q, QUADSPI_BUFXCR_INVALID_MSTRID, base + QUADSPI_BUF1CR); + qspi_writel(q, QUADSPI_BUFXCR_INVALID_MSTRID, base + QUADSPI_BUF2CR); /* * Set ADATSZ with the maximum AHB buffer size to improve the * read performance. */ - writel(QUADSPI_BUF3CR_ALLMST_MASK | ((q->devtype_data->ahb_buf_size / 8) - << QUADSPI_BUF3CR_ADATSZ_SHIFT), base + QUADSPI_BUF3CR); + qspi_writel(q, QUADSPI_BUF3CR_ALLMST_MASK | + ((q->devtype_data->ahb_buf_size / 8) + << QUADSPI_BUF3CR_ADATSZ_SHIFT), + base + QUADSPI_BUF3CR); /* We only use the buffer3 */ - writel(0, base + QUADSPI_BUF0IND); - writel(0, base + QUADSPI_BUF1IND); - writel(0, base + QUADSPI_BUF2IND); + qspi_writel(q, 0, base + QUADSPI_BUF0IND); + qspi_writel(q, 0, base + QUADSPI_BUF1IND); + qspi_writel(q, 0, base + QUADSPI_BUF2IND); /* Set the default lut sequence for AHB Read. */ seqid = fsl_qspi_get_seqid(q, q->nor[0].read_opcode); - writel(seqid << QUADSPI_BFGENCR_SEQID_SHIFT, + qspi_writel(q, seqid << QUADSPI_BFGENCR_SEQID_SHIFT, q->iobase + QUADSPI_BFGENCR); } @@ -713,7 +749,7 @@ static int fsl_qspi_nor_setup(struct fsl_qspi *q) return ret; /* Reset the module */ - writel(QUADSPI_MCR_SWRSTSD_MASK | QUADSPI_MCR_SWRSTHD_MASK, + qspi_writel(q, QUADSPI_MCR_SWRSTSD_MASK | QUADSPI_MCR_SWRSTHD_MASK, base + QUADSPI_MCR); udelay(1); @@ -721,24 +757,24 @@ static int fsl_qspi_nor_setup(struct fsl_qspi *q) fsl_qspi_init_lut(q); /* Disable the module */ - writel(QUADSPI_MCR_MDIS_MASK | QUADSPI_MCR_RESERVED_MASK, + qspi_writel(q, QUADSPI_MCR_MDIS_MASK | QUADSPI_MCR_RESERVED_MASK, base + QUADSPI_MCR); - reg = readl(base + QUADSPI_SMPR); - writel(reg & ~(QUADSPI_SMPR_FSDLY_MASK + reg = qspi_readl(q, base + QUADSPI_SMPR); + qspi_writel(q, reg & ~(QUADSPI_SMPR_FSDLY_MASK | QUADSPI_SMPR_FSPHS_MASK | QUADSPI_SMPR_HSENA_MASK | QUADSPI_SMPR_DDRSMP_MASK), base + QUADSPI_SMPR); /* Enable the module */ - writel(QUADSPI_MCR_RESERVED_MASK | QUADSPI_MCR_END_CFG_MASK, + qspi_writel(q, QUADSPI_MCR_RESERVED_MASK | QUADSPI_MCR_END_CFG_MASK, base + QUADSPI_MCR); /* clear all interrupt status */ - writel(0xffffffff, q->iobase + QUADSPI_FR); + qspi_writel(q, 0xffffffff, q->iobase + QUADSPI_FR); /* enable the interrupt */ - writel(QUADSPI_RSER_TFIE, q->iobase + QUADSPI_RSER); + qspi_writel(q, QUADSPI_RSER_TFIE, q->iobase + QUADSPI_RSER); return 0; } @@ -954,6 +990,7 @@ static int fsl_qspi_probe(struct platform_device *pdev) if (IS_ERR(q->iobase)) return PTR_ERR(q->iobase); + q->big_endian = of_property_read_bool(np, "big-endian"); res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "QuadSPI-memory"); if (!devm_request_mem_region(dev, res->start, resource_size(res), @@ -1101,8 +1138,8 @@ static int fsl_qspi_remove(struct platform_device *pdev) } /* disable the hardware */ - writel(QUADSPI_MCR_MDIS_MASK, q->iobase + QUADSPI_MCR); - writel(0x0, q->iobase + QUADSPI_RSER); + qspi_writel(q, QUADSPI_MCR_MDIS_MASK, q->iobase + QUADSPI_MCR); + qspi_writel(q, 0x0, q->iobase + QUADSPI_RSER); mutex_destroy(&q->lock); -- 2.1.0.27.g96db324 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v3 1/3] mtd: spi-nor: fsl-quadspi: add big-endian support 2016-01-21 7:53 ` [PATCH v3 1/3] mtd: spi-nor: fsl-quadspi: add big-endian support Yuan Yao @ 2016-01-23 21:11 ` Brian Norris 0 siblings, 0 replies; 10+ messages in thread From: Brian Norris @ 2016-01-23 21:11 UTC (permalink / raw) To: Yuan Yao; +Cc: dwmw2, han.xu, linux-kernel, linux-mtd, yao.yuan On Thu, Jan 21, 2016 at 03:53:54PM +0800, Yuan Yao wrote: > Add R/W functions for big- or little-endian registers: > The qSPI controller's endian is independent of the CPU core's endian. > So far, the qSPI have two versions for big-endian and little-endian. > > Signed-off-by: Yuan Yao <yao.yuan@nxp.com> > Acked-by: Han xu <han.xu@freescale.com> > --- ... > @@ -954,6 +990,7 @@ static int fsl_qspi_probe(struct platform_device *pdev) > if (IS_ERR(q->iobase)) > return PTR_ERR(q->iobase); > > + q->big_endian = of_property_read_bool(np, "big-endian"); > res = platform_get_resource_byname(pdev, IORESOURCE_MEM, > "QuadSPI-memory"); > if (!devm_request_mem_region(dev, res->start, resource_size(res), Still no documentation for this property?? You're trying my patience. We've had the same request since November, and you haven't managed to satisfy it. ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v3 2/3] mtd: spi-nor: fsl-quadspi: add support for ls1021a 2016-01-21 7:53 mtd: spi-nor: fsl-quadspi: add support for ls1021a Yuan Yao 2016-01-21 7:53 ` [PATCH v3 1/3] mtd: spi-nor: fsl-quadspi: add big-endian support Yuan Yao @ 2016-01-21 7:53 ` Yuan Yao 2016-01-21 7:53 ` [PATCH v3 3/3] mtd: spi-nor: fsl-quadspi: add support for layerscape Yuan Yao 2016-01-21 15:42 ` mtd: spi-nor: fsl-quadspi: add support for ls1021a Han Xu 3 siblings, 0 replies; 10+ messages in thread From: Yuan Yao @ 2016-01-21 7:53 UTC (permalink / raw) To: dwmw2, computersforpeace, han.xu; +Cc: linux-kernel, linux-mtd, yao.yuan LS1021a also support Freescale Quad SPI controller. Add fsl-quadspi support for ls1021a chip and make SPI_FSL_QUADSPI selectable for LS1021A SOC hardwares. Signed-off-by: Yuan Yao <yao.yuan@nxp.com> Acked-by: Han xu <han.xu@freescale.com> --- Changed in v3: No changes. Changed in v2: Update my email to <yao.yuan@nxp.com> --- drivers/mtd/spi-nor/Kconfig | 2 +- drivers/mtd/spi-nor/fsl-quadspi.c | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/drivers/mtd/spi-nor/Kconfig b/drivers/mtd/spi-nor/Kconfig index 0dc9275..a28c278 100644 --- a/drivers/mtd/spi-nor/Kconfig +++ b/drivers/mtd/spi-nor/Kconfig @@ -30,7 +30,7 @@ config MTD_SPI_NOR_USE_4K_SECTORS config SPI_FSL_QUADSPI tristate "Freescale Quad SPI controller" - depends on ARCH_MXC || COMPILE_TEST + depends on ARCH_MXC || SOC_LS1021A || COMPILE_TEST depends on HAS_IOMEM help This enables support for the Quad SPI controller in master mode. diff --git a/drivers/mtd/spi-nor/fsl-quadspi.c b/drivers/mtd/spi-nor/fsl-quadspi.c index 04e8a93..9ab2b51 100644 --- a/drivers/mtd/spi-nor/fsl-quadspi.c +++ b/drivers/mtd/spi-nor/fsl-quadspi.c @@ -213,6 +213,7 @@ enum fsl_qspi_devtype { FSL_QUADSPI_IMX6SX, FSL_QUADSPI_IMX7D, FSL_QUADSPI_IMX6UL, + FSL_QUADSPI_LS1021A, }; struct fsl_qspi_devtype_data { @@ -258,6 +259,14 @@ static struct fsl_qspi_devtype_data imx6ul_data = { | QUADSPI_QUIRK_4X_INT_CLK, }; +static struct fsl_qspi_devtype_data ls1021a_data = { + .devtype = FSL_QUADSPI_LS1021A, + .rxfifo = 128, + .txfifo = 64, + .ahb_buf_size = 1024, + .driver_data = 0, +}; + #define FSL_QSPI_MAX_CHIP 4 struct fsl_qspi { struct spi_nor nor[FSL_QSPI_MAX_CHIP]; @@ -812,6 +821,7 @@ static const struct of_device_id fsl_qspi_dt_ids[] = { { .compatible = "fsl,imx6sx-qspi", .data = (void *)&imx6sx_data, }, { .compatible = "fsl,imx7d-qspi", .data = (void *)&imx7d_data, }, { .compatible = "fsl,imx6ul-qspi", .data = (void *)&imx6ul_data, }, + { .compatible = "fsl,ls1021a-qspi", .data = (void *)&ls1021a_data, }, { /* sentinel */ } }; MODULE_DEVICE_TABLE(of, fsl_qspi_dt_ids); -- 2.1.0.27.g96db324 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v3 3/3] mtd: spi-nor: fsl-quadspi: add support for layerscape 2016-01-21 7:53 mtd: spi-nor: fsl-quadspi: add support for ls1021a Yuan Yao 2016-01-21 7:53 ` [PATCH v3 1/3] mtd: spi-nor: fsl-quadspi: add big-endian support Yuan Yao 2016-01-21 7:53 ` [PATCH v3 2/3] mtd: spi-nor: fsl-quadspi: add support for ls1021a Yuan Yao @ 2016-01-21 7:53 ` Yuan Yao 2016-01-21 15:42 ` mtd: spi-nor: fsl-quadspi: add support for ls1021a Han Xu 3 siblings, 0 replies; 10+ messages in thread From: Yuan Yao @ 2016-01-21 7:53 UTC (permalink / raw) To: dwmw2, computersforpeace, han.xu; +Cc: linux-kernel, linux-mtd, yao.yuan LS1043a and LS2080A in the Layerscape family also support Freescale Quad SPI, make Quad SPI selectable for these hardwares. Signed-off-by: Yuan Yao <yao.yuan@nxp.com> --- Changed in v3: No changes. Changed in v2: Update my email to <yao.yuan@nxp.com> --- drivers/mtd/spi-nor/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/mtd/spi-nor/Kconfig b/drivers/mtd/spi-nor/Kconfig index a28c278..6b53deb 100644 --- a/drivers/mtd/spi-nor/Kconfig +++ b/drivers/mtd/spi-nor/Kconfig @@ -30,7 +30,7 @@ config MTD_SPI_NOR_USE_4K_SECTORS config SPI_FSL_QUADSPI tristate "Freescale Quad SPI controller" - depends on ARCH_MXC || SOC_LS1021A || COMPILE_TEST + depends on ARCH_MXC || SOC_LS1021A || ARCH_LAYERSCAPE || COMPILE_TEST depends on HAS_IOMEM help This enables support for the Quad SPI controller in master mode. -- 2.1.0.27.g96db324 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: mtd: spi-nor: fsl-quadspi: add support for ls1021a 2016-01-21 7:53 mtd: spi-nor: fsl-quadspi: add support for ls1021a Yuan Yao ` (2 preceding siblings ...) 2016-01-21 7:53 ` [PATCH v3 3/3] mtd: spi-nor: fsl-quadspi: add support for layerscape Yuan Yao @ 2016-01-21 15:42 ` Han Xu 2016-01-22 9:01 ` Yao Yuan 3 siblings, 1 reply; 10+ messages in thread From: Han Xu @ 2016-01-21 15:42 UTC (permalink / raw) To: Yuan Yao Cc: David Woodhouse, Brian Norris, han.xu, linux-mtd, linux-kernel, yao.yuan On Thu, Jan 21, 2016 at 1:53 AM, Yuan Yao <yao.yuan@freescale.com> wrote: > This patch set is used for add the fsl-quadspi support for ls1021a and > ls1043a, so remove the patch: > mtd: spi-nor: fsl-quadspi: extend support for some special requerment. Please use --cover-letter to generate cover letter. > > This patch will be send with anther patch set for add QSPI support on LS2080A. > > All the new property are document in anther patch set which is already > send to linux-kernel@vger.kernel.org and devicetree@vger.kernel.org. > Here is the patch name: > 0001-Documentation-fsl-quadspi-Add-fsl-ls2080a-dspi-compa.patch > 0002-Documentation-fsl-quadspi-Add-fsl-ls2080a-qspi-compa.patch > 0003-dts-ls2080a-update-the-DTS-for-QSPI-and-DSPI-support.patch > 0004-Documentation-fsl-quadspi-Add-optional-properties.patch > > Any extra information you can find them on the patchwork: > https://patchwork.kernel.org/patch/8078931/ > https://patchwork.kernel.org/patch/8078951/ > https://patchwork.kernel.org/patch/8079091/ > https://patchwork.kernel.org/patch/8078941/ Please send all patches in one patch set, this is not acceptable. > > Thanks. > > Yuan Yao. > > > ______________________________________________________ > Linux MTD discussion mailing list > http://lists.infradead.org/mailman/listinfo/linux-mtd/ ^ permalink raw reply [flat|nested] 10+ messages in thread
* RE: mtd: spi-nor: fsl-quadspi: add support for ls1021a 2016-01-21 15:42 ` mtd: spi-nor: fsl-quadspi: add support for ls1021a Han Xu @ 2016-01-22 9:01 ` Yao Yuan 2016-01-22 17:30 ` Han Xu 0 siblings, 1 reply; 10+ messages in thread From: Yao Yuan @ 2016-01-22 9:01 UTC (permalink / raw) To: Han Xu, Yuan Yao Cc: David Woodhouse, Brian Norris, han.xu, linux-mtd, linux-kernel On Thu, Jan 21, 2016 at 11:42 PM, Han Xu < xhnjupt@gmail.com > wrote: > On Thu, Jan 21, 2016 at 1:53 AM, Yuan Yao <yao.yuan@freescale.com> wrote: > > This patch set is used for add the fsl-quadspi support for ls1021a and > > ls1043a, so remove the patch: > > mtd: spi-nor: fsl-quadspi: extend support for some special requerment. > > Please use --cover-letter to generate cover letter. > > > > > This patch will be send with anther patch set for add QSPI support on LS2080A. > > > > All the new property are document in anther patch set which is already > > send to linux-kernel@vger.kernel.org and devicetree@vger.kernel.org. > > Here is the patch name: > > 0001-Documentation-fsl-quadspi-Add-fsl-ls2080a-dspi-compa.patch > > 0002-Documentation-fsl-quadspi-Add-fsl-ls2080a-qspi-compa.patch > > 0003-dts-ls2080a-update-the-DTS-for-QSPI-and-DSPI-support.patch > > 0004-Documentation-fsl-quadspi-Add-optional-properties.patch > > > > Any extra information you can find them on the patchwork: > > https://patchwork.kernel.org/patch/8078931/ > > https://patchwork.kernel.org/patch/8078951/ > > https://patchwork.kernel.org/patch/8079091/ > > https://patchwork.kernel.org/patch/8078941/ > > Please send all patches in one patch set, this is not acceptable. > Thanks for your review. But those patches are dts binding patch. And will send to devicetree@vger.kernel.org and some corresponding maintainer. Those two patch sets will send to different mail-list and maintainers separately. So, maybe it's better to send the patch to the maintainer accordingly and thus I think can also reduce the workload of maintainer. How about your think? Thanks. Yuan Yao. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: mtd: spi-nor: fsl-quadspi: add support for ls1021a 2016-01-22 9:01 ` Yao Yuan @ 2016-01-22 17:30 ` Han Xu 2016-01-23 21:17 ` Brian Norris 0 siblings, 1 reply; 10+ messages in thread From: Han Xu @ 2016-01-22 17:30 UTC (permalink / raw) To: Yao Yuan Cc: Yuan Yao, David Woodhouse, Brian Norris, han.xu, linux-mtd, linux-kernel On Fri, Jan 22, 2016 at 3:01 AM, Yao Yuan <yao.yuan@nxp.com> wrote: > On Thu, Jan 21, 2016 at 11:42 PM, Han Xu < xhnjupt@gmail.com > wrote: >> On Thu, Jan 21, 2016 at 1:53 AM, Yuan Yao <yao.yuan@freescale.com> wrote: >> > This patch set is used for add the fsl-quadspi support for ls1021a and >> > ls1043a, so remove the patch: >> > mtd: spi-nor: fsl-quadspi: extend support for some special requerment. >> >> Please use --cover-letter to generate cover letter. >> >> > >> > This patch will be send with anther patch set for add QSPI support on LS2080A. >> > >> > All the new property are document in anther patch set which is already >> > send to linux-kernel@vger.kernel.org and devicetree@vger.kernel.org. >> > Here is the patch name: >> > 0001-Documentation-fsl-quadspi-Add-fsl-ls2080a-dspi-compa.patch >> > 0002-Documentation-fsl-quadspi-Add-fsl-ls2080a-qspi-compa.patch >> > 0003-dts-ls2080a-update-the-DTS-for-QSPI-and-DSPI-support.patch >> > 0004-Documentation-fsl-quadspi-Add-optional-properties.patch >> > >> > Any extra information you can find them on the patchwork: >> > https://patchwork.kernel.org/patch/8078931/ >> > https://patchwork.kernel.org/patch/8078951/ >> > https://patchwork.kernel.org/patch/8079091/ >> > https://patchwork.kernel.org/patch/8078941/ >> >> Please send all patches in one patch set, this is not acceptable. >> > > Thanks for your review. > But those patches are dts binding patch. And will send to devicetree@vger.kernel.org and some corresponding maintainer. > > Those two patch sets will send to different mail-list and maintainers separately. > > So, maybe it's better to send the patch to the maintainer accordingly and thus I think can also reduce the workload of maintainer. > > How about your think? Send the complete patch set to maintainer and cc all related sub-module groups, so everybody could understand the whole story. > Thanks. > > Yuan Yao. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: mtd: spi-nor: fsl-quadspi: add support for ls1021a 2016-01-22 17:30 ` Han Xu @ 2016-01-23 21:17 ` Brian Norris 2016-01-24 4:16 ` Yao Yuan 0 siblings, 1 reply; 10+ messages in thread From: Brian Norris @ 2016-01-23 21:17 UTC (permalink / raw) To: Han Xu Cc: Yao Yuan, Yuan Yao, David Woodhouse, han.xu, linux-mtd, linux-kernel On Fri, Jan 22, 2016 at 11:30:55AM -0600, Han Xu wrote: > On Fri, Jan 22, 2016 at 3:01 AM, Yao Yuan <yao.yuan@nxp.com> wrote: > > On Thu, Jan 21, 2016 at 11:42 PM, Han Xu < xhnjupt@gmail.com > wrote: > >> On Thu, Jan 21, 2016 at 1:53 AM, Yuan Yao <yao.yuan@freescale.com> wrote: > >> > Any extra information you can find them on the patchwork: > >> > https://patchwork.kernel.org/patch/8078931/ > >> > https://patchwork.kernel.org/patch/8078951/ > >> > https://patchwork.kernel.org/patch/8079091/ > >> > https://patchwork.kernel.org/patch/8078941/ > >> > >> Please send all patches in one patch set, this is not acceptable. > >> > > > > Thanks for your review. > > But those patches are dts binding patch. And will send to devicetree@vger.kernel.org and some corresponding maintainer. > > > > Those two patch sets will send to different mail-list and maintainers separately. > > > > So, maybe it's better to send the patch to the maintainer accordingly and thus I think can also reduce the workload of maintainer. > > > > How about your think? > > Send the complete patch set to maintainer and cc all related > sub-module groups, so everybody could understand the whole story. Agreed. You apparently did not read the suggested documentation from last time: Documentation/devicetree/bindings/submitting-patches.txt Particularly, points 2 and 3. Subsystem maintainers merge binding patches, so please send them as part of the regular series. Brian ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: mtd: spi-nor: fsl-quadspi: add support for ls1021a 2016-01-23 21:17 ` Brian Norris @ 2016-01-24 4:16 ` Yao Yuan 0 siblings, 0 replies; 10+ messages in thread From: Yao Yuan @ 2016-01-24 4:16 UTC (permalink / raw) To: Brian Norris, Han Xu Cc: Yuan Yao, David Woodhouse, han.xu, linux-mtd, linux-kernel On Sun, Jan 24, 2016 05:17 AM +0800, Brian Norris wrote: On Fri, Jan 22, 2016 at 11:30:55AM -0600, Han Xu wrote: > On Fri, Jan 22, 2016 at 3:01 AM, Yao Yuan <yao.yuan@nxp.com> wrote: > > On Thu, Jan 21, 2016 at 11:42 PM, Han Xu < xhnjupt@gmail.com > wrote: > >> On Thu, Jan 21, 2016 at 1:53 AM, Yuan Yao <yao.yuan@freescale.com> wrote: > >> > Any extra information you can find them on the patchwork: > >> > https://patchwork.kernel.org/patch/8078931/ > >> > https://patchwork.kernel.org/patch/8078951/ > >> > https://patchwork.kernel.org/patch/8079091/ > >> > https://patchwork.kernel.org/patch/8078941/ > >> > >> Please send all patches in one patch set, this is not acceptable. > >> > > > > Thanks for your review. > > But those patches are dts binding patch. And will send to devicetree@vger.kernel.org and some corresponding maintainer. > > > > Those two patch sets will send to different mail-list and maintainers separately. > > > > So, maybe it's better to send the patch to the maintainer accordingly and thus I think can also reduce the workload of maintainer. > > > > How about your think? > > Send the complete patch set to maintainer and cc all related > sub-module groups, so everybody could understand the whole story. Agreed. You apparently did not read the suggested documentation from last time: Documentation/devicetree/bindings/submitting-patches.txt Particularly, points 2 and 3. Subsystem maintainers merge binding patches, so please send them as part of the regular series. OK, Got it. Thanks Han Xu and Brian Norris. I will resend them as a complete patch set. ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2016-01-24 4:50 UTC | newest] Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2016-01-21 7:53 mtd: spi-nor: fsl-quadspi: add support for ls1021a Yuan Yao 2016-01-21 7:53 ` [PATCH v3 1/3] mtd: spi-nor: fsl-quadspi: add big-endian support Yuan Yao 2016-01-23 21:11 ` Brian Norris 2016-01-21 7:53 ` [PATCH v3 2/3] mtd: spi-nor: fsl-quadspi: add support for ls1021a Yuan Yao 2016-01-21 7:53 ` [PATCH v3 3/3] mtd: spi-nor: fsl-quadspi: add support for layerscape Yuan Yao 2016-01-21 15:42 ` mtd: spi-nor: fsl-quadspi: add support for ls1021a Han Xu 2016-01-22 9:01 ` Yao Yuan 2016-01-22 17:30 ` Han Xu 2016-01-23 21:17 ` Brian Norris 2016-01-24 4:16 ` Yao Yuan
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).