* [PATCH v3 0/5] K2G: Add QSPI support @ 2017-09-24 10:59 Vignesh R 2017-09-24 10:59 ` [PATCH v3 1/5] mtd: spi-nor: cadence-quadspi: Add TI 66AK2G SoC specific compatible Vignesh R ` (4 more replies) 0 siblings, 5 replies; 20+ messages in thread From: Vignesh R @ 2017-09-24 10:59 UTC (permalink / raw) To: Marek Vasut, Cyrille Pitchen Cc: Boris Brezillon, Vignesh R, devicetree, linux-kernel, Rob Herring, linux-mtd, Brian Norris, David Woodhouse, linux-arm-kernel This series adds support for Cadence QSPI IP present in TI's 66AK2G SoC. The patches enhance the existing cadence-quadspi driver to support loopback clock circuit, pm_runtime support and tweaks for 66AK2G SoC. Change log: v3: * Fix build warnings reported by kbuild test bot. Resend: * Rebase to latest linux-next. * Collect Acked-bys v2: * Drop DT patches. Will be sent as separate series as requested by maintainer. * Split binding docs into separate patches. * Address comments by Rob Herring. Vignesh R (5): mtd: spi-nor: cadence-quadspi: Add TI 66AK2G SoC specific compatible mtd: spi-nor: cadence-quadspi: add a delay in write sequence mtd: spi-nor: cadence-quadspi: Add new binding to enable loop-back circuit mtd: spi-nor: cadence-quadspi: Add support to enable loop-back clock circuit mtd: spi-nor: cadence-quadspi: Add runtime PM support .../devicetree/bindings/mtd/cadence-quadspi.txt | 7 +++- drivers/mtd/spi-nor/cadence-quadspi.c | 46 ++++++++++++++++++++-- 2 files changed, 49 insertions(+), 4 deletions(-) -- 2.14.1 ^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH v3 1/5] mtd: spi-nor: cadence-quadspi: Add TI 66AK2G SoC specific compatible 2017-09-24 10:59 [PATCH v3 0/5] K2G: Add QSPI support Vignesh R @ 2017-09-24 10:59 ` Vignesh R 2017-09-24 10:59 ` [PATCH v3 2/5] mtd: spi-nor: cadence-quadspi: add a delay in write sequence Vignesh R ` (3 subsequent siblings) 4 siblings, 0 replies; 20+ messages in thread From: Vignesh R @ 2017-09-24 10:59 UTC (permalink / raw) To: Marek Vasut, Cyrille Pitchen Cc: David Woodhouse, Brian Norris, Boris Brezillon, Rob Herring, linux-mtd, devicetree, linux-kernel, Vignesh R, linux-arm-kernel Update binding documentation to add a new compatible for TI 66AK2G SoC, to handle TI SoC specific quirks in the driver. Signed-off-by: Vignesh R <vigneshr@ti.com> Acked-by: Rob Herring <robh@kernel.org> --- Documentation/devicetree/bindings/mtd/cadence-quadspi.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Documentation/devicetree/bindings/mtd/cadence-quadspi.txt b/Documentation/devicetree/bindings/mtd/cadence-quadspi.txt index f248056da24c..7dbe3bd9ac56 100644 --- a/Documentation/devicetree/bindings/mtd/cadence-quadspi.txt +++ b/Documentation/devicetree/bindings/mtd/cadence-quadspi.txt @@ -1,7 +1,9 @@ * Cadence Quad SPI controller Required properties: -- compatible : Should be "cdns,qspi-nor". +- compatible : should be one of the following: + Generic default - "cdns,qspi-nor". + For TI 66AK2G SoC - "ti,k2g-qspi", "cdns,qspi-nor". - reg : Contains two entries, each of which is a tuple consisting of a physical address and length. The first entry is the address and length of the controller register set. The second entry is the -- 2.14.1 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH v3 2/5] mtd: spi-nor: cadence-quadspi: add a delay in write sequence 2017-09-24 10:59 [PATCH v3 0/5] K2G: Add QSPI support Vignesh R 2017-09-24 10:59 ` [PATCH v3 1/5] mtd: spi-nor: cadence-quadspi: Add TI 66AK2G SoC specific compatible Vignesh R @ 2017-09-24 10:59 ` Vignesh R 2017-09-24 11:59 ` Marek Vasut 2017-09-24 10:59 ` [PATCH v3 3/5] mtd: spi-nor: cadence-quadspi: Add new binding to enable loop-back circuit Vignesh R ` (2 subsequent siblings) 4 siblings, 1 reply; 20+ messages in thread From: Vignesh R @ 2017-09-24 10:59 UTC (permalink / raw) To: Marek Vasut, Cyrille Pitchen Cc: David Woodhouse, Brian Norris, Boris Brezillon, Rob Herring, linux-mtd, devicetree, linux-kernel, Vignesh R, linux-arm-kernel As per 66AK2G02 TRM[1] SPRUHY8F section 11.15.5.3 Indirect Access Controller programming sequence, a delay equal to couple of QSPI master clock(~5ns) is required after setting CQSPI_REG_INDIRECTWR_START bit and writing data to the flash. Introduce a quirk flag CQSPI_NEEDS_WR_DELAY to handle this and set this flag for TI 66AK2G SoC. [1]http://www.ti.com/lit/ug/spruhy8f/spruhy8f.pdf Signed-off-by: Vignesh R <vigneshr@ti.com> --- v3: Fix build warnings reported by kbuild test bot. drivers/mtd/spi-nor/cadence-quadspi.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/drivers/mtd/spi-nor/cadence-quadspi.c b/drivers/mtd/spi-nor/cadence-quadspi.c index 53c7d8e0327a..5cd5d6f7303f 100644 --- a/drivers/mtd/spi-nor/cadence-quadspi.c +++ b/drivers/mtd/spi-nor/cadence-quadspi.c @@ -38,6 +38,9 @@ #define CQSPI_NAME "cadence-qspi" #define CQSPI_MAX_CHIPSELECT 16 +/* Quirks */ +#define CQSPI_NEEDS_WR_DELAY BIT(0) + struct cqspi_st; struct cqspi_flash_pdata { @@ -76,6 +79,7 @@ struct cqspi_st { u32 fifo_depth; u32 fifo_width; u32 trigger_address; + u32 wr_delay; struct cqspi_flash_pdata f_pdata[CQSPI_MAX_CHIPSELECT]; }; @@ -608,6 +612,15 @@ static int cqspi_indirect_write_execute(struct spi_nor *nor, reinit_completion(&cqspi->transfer_complete); writel(CQSPI_REG_INDIRECTWR_START_MASK, reg_base + CQSPI_REG_INDIRECTWR); + /* + * As per 66AK2G02 TRM SPRUHY8F section 11.15.5.3 Indirect Access + * Controller programming sequence, couple of cycles of + * QSPI_REF_CLK delay is required for the above bit to + * be internally synchronized by the QSPI module. Provide 5 + * cycles of delay. + */ + if (cqspi->wr_delay) + ndelay(cqspi->wr_delay); while (remaining > 0) { write_bytes = remaining > page_size ? page_size : remaining; @@ -1156,6 +1169,7 @@ static int cqspi_probe(struct platform_device *pdev) struct cqspi_st *cqspi; struct resource *res; struct resource *res_ahb; + unsigned long data; int ret; int irq; @@ -1213,6 +1227,10 @@ static int cqspi_probe(struct platform_device *pdev) } cqspi->master_ref_clk_hz = clk_get_rate(cqspi->clk); + data = (unsigned long)of_device_get_match_data(dev); + if (data & CQSPI_NEEDS_WR_DELAY) + cqspi->wr_delay = 5 * DIV_ROUND_UP(NSEC_PER_SEC, + cqspi->master_ref_clk_hz); ret = devm_request_irq(dev, irq, cqspi_irq_handler, 0, pdev->name, cqspi); @@ -1284,7 +1302,14 @@ static const struct dev_pm_ops cqspi__dev_pm_ops = { #endif static const struct of_device_id cqspi_dt_ids[] = { - {.compatible = "cdns,qspi-nor",}, + { + .compatible = "cdns,qspi-nor", + .data = (void *)0, + }, + { + .compatible = "ti,k2g-qspi", + .data = (void *)CQSPI_NEEDS_WR_DELAY, + }, { /* end of table */ } }; -- 2.14.1 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [PATCH v3 2/5] mtd: spi-nor: cadence-quadspi: add a delay in write sequence 2017-09-24 10:59 ` [PATCH v3 2/5] mtd: spi-nor: cadence-quadspi: add a delay in write sequence Vignesh R @ 2017-09-24 11:59 ` Marek Vasut [not found] ` <94313cae-4805-0b13-a469-72aa7556b685-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 0 siblings, 1 reply; 20+ messages in thread From: Marek Vasut @ 2017-09-24 11:59 UTC (permalink / raw) To: Vignesh R, Cyrille Pitchen Cc: David Woodhouse, Brian Norris, Boris Brezillon, Rob Herring, linux-mtd, devicetree, linux-kernel, linux-arm-kernel On 09/24/2017 12:59 PM, Vignesh R wrote: > As per 66AK2G02 TRM[1] SPRUHY8F section 11.15.5.3 Indirect Access > Controller programming sequence, a delay equal to couple of QSPI master > clock(~5ns) is required after setting CQSPI_REG_INDIRECTWR_START bit and > writing data to the flash. Introduce a quirk flag CQSPI_NEEDS_WR_DELAY > to handle this and set this flag for TI 66AK2G SoC. > > [1]http://www.ti.com/lit/ug/spruhy8f/spruhy8f.pdf > > Signed-off-by: Vignesh R <vigneshr@ti.com> Is this TI specific or is this controller property ? I wouldn't be surprised of the later ... > --- > > v3: > Fix build warnings reported by kbuild test bot. > > drivers/mtd/spi-nor/cadence-quadspi.c | 27 ++++++++++++++++++++++++++- > 1 file changed, 26 insertions(+), 1 deletion(-) > > diff --git a/drivers/mtd/spi-nor/cadence-quadspi.c b/drivers/mtd/spi-nor/cadence-quadspi.c > index 53c7d8e0327a..5cd5d6f7303f 100644 > --- a/drivers/mtd/spi-nor/cadence-quadspi.c > +++ b/drivers/mtd/spi-nor/cadence-quadspi.c > @@ -38,6 +38,9 @@ > #define CQSPI_NAME "cadence-qspi" > #define CQSPI_MAX_CHIPSELECT 16 > > +/* Quirks */ > +#define CQSPI_NEEDS_WR_DELAY BIT(0) > + > struct cqspi_st; > > struct cqspi_flash_pdata { > @@ -76,6 +79,7 @@ struct cqspi_st { > u32 fifo_depth; > u32 fifo_width; > u32 trigger_address; > + u32 wr_delay; > struct cqspi_flash_pdata f_pdata[CQSPI_MAX_CHIPSELECT]; > }; > > @@ -608,6 +612,15 @@ static int cqspi_indirect_write_execute(struct spi_nor *nor, > reinit_completion(&cqspi->transfer_complete); > writel(CQSPI_REG_INDIRECTWR_START_MASK, > reg_base + CQSPI_REG_INDIRECTWR); > + /* > + * As per 66AK2G02 TRM SPRUHY8F section 11.15.5.3 Indirect Access > + * Controller programming sequence, couple of cycles of > + * QSPI_REF_CLK delay is required for the above bit to > + * be internally synchronized by the QSPI module. Provide 5 > + * cycles of delay. > + */ > + if (cqspi->wr_delay) > + ndelay(cqspi->wr_delay); > > while (remaining > 0) { > write_bytes = remaining > page_size ? page_size : remaining; > @@ -1156,6 +1169,7 @@ static int cqspi_probe(struct platform_device *pdev) > struct cqspi_st *cqspi; > struct resource *res; > struct resource *res_ahb; > + unsigned long data; > int ret; > int irq; > > @@ -1213,6 +1227,10 @@ static int cqspi_probe(struct platform_device *pdev) > } > > cqspi->master_ref_clk_hz = clk_get_rate(cqspi->clk); > + data = (unsigned long)of_device_get_match_data(dev); > + if (data & CQSPI_NEEDS_WR_DELAY) > + cqspi->wr_delay = 5 * DIV_ROUND_UP(NSEC_PER_SEC, > + cqspi->master_ref_clk_hz); > > ret = devm_request_irq(dev, irq, cqspi_irq_handler, 0, > pdev->name, cqspi); > @@ -1284,7 +1302,14 @@ static const struct dev_pm_ops cqspi__dev_pm_ops = { > #endif > > static const struct of_device_id cqspi_dt_ids[] = { > - {.compatible = "cdns,qspi-nor",}, > + { > + .compatible = "cdns,qspi-nor", > + .data = (void *)0, > + }, > + { > + .compatible = "ti,k2g-qspi", > + .data = (void *)CQSPI_NEEDS_WR_DELAY, > + }, > { /* end of table */ } > }; > > -- Best regards, Marek Vasut ^ permalink raw reply [flat|nested] 20+ messages in thread
[parent not found: <94313cae-4805-0b13-a469-72aa7556b685-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>]
* Re: [PATCH v3 2/5] mtd: spi-nor: cadence-quadspi: add a delay in write sequence [not found] ` <94313cae-4805-0b13-a469-72aa7556b685-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> @ 2017-09-24 12:33 ` Vignesh R [not found] ` <8990b971-91d5-747f-905b-5e24743e090d-l0cyMroinI0@public.gmane.org> 0 siblings, 1 reply; 20+ messages in thread From: Vignesh R @ 2017-09-24 12:33 UTC (permalink / raw) To: Marek Vasut, Cyrille Pitchen Cc: David Woodhouse, Brian Norris, Boris Brezillon, Rob Herring, linux-mtd-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, devicetree-u79uwXL29TY76Z2rM5mHXA, linux-kernel-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel On 9/24/2017 5:29 PM, Marek Vasut wrote: > On 09/24/2017 12:59 PM, Vignesh R wrote: >> As per 66AK2G02 TRM[1] SPRUHY8F section 11.15.5.3 Indirect Access >> Controller programming sequence, a delay equal to couple of QSPI master >> clock(~5ns) is required after setting CQSPI_REG_INDIRECTWR_START bit and >> writing data to the flash. Introduce a quirk flag CQSPI_NEEDS_WR_DELAY >> to handle this and set this flag for TI 66AK2G SoC. >> >> [1]http://www.ti.com/lit/ug/spruhy8f/spruhy8f.pdf >> >> Signed-off-by: Vignesh R <vigneshr-l0cyMroinI0@public.gmane.org> > > Is this TI specific or is this controller property ? I wouldn't be > surprised of the later ... I am not sure, there is no generic public documentation by cadence for this IP. TI TRM clearly states this delay is required and I have verified it practically that this delay is indeed needed. But current user of this IP, socfpga does not seem to mention anything about it. So, I guess its TI specific quirk. > >> --- >> >> v3: >> Fix build warnings reported by kbuild test bot. >> >> drivers/mtd/spi-nor/cadence-quadspi.c | 27 ++++++++++++++++++++++++++- >> 1 file changed, 26 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/mtd/spi-nor/cadence-quadspi.c b/drivers/mtd/spi-nor/cadence-quadspi.c >> index 53c7d8e0327a..5cd5d6f7303f 100644 >> --- a/drivers/mtd/spi-nor/cadence-quadspi.c >> +++ b/drivers/mtd/spi-nor/cadence-quadspi.c >> @@ -38,6 +38,9 @@ >> #define CQSPI_NAME "cadence-qspi" >> #define CQSPI_MAX_CHIPSELECT 16 >> >> +/* Quirks */ >> +#define CQSPI_NEEDS_WR_DELAY BIT(0) >> + >> struct cqspi_st; >> >> struct cqspi_flash_pdata { >> @@ -76,6 +79,7 @@ struct cqspi_st { >> u32 fifo_depth; >> u32 fifo_width; >> u32 trigger_address; >> + u32 wr_delay; >> struct cqspi_flash_pdata f_pdata[CQSPI_MAX_CHIPSELECT]; >> }; >> >> @@ -608,6 +612,15 @@ static int cqspi_indirect_write_execute(struct spi_nor *nor, >> reinit_completion(&cqspi->transfer_complete); >> writel(CQSPI_REG_INDIRECTWR_START_MASK, >> reg_base + CQSPI_REG_INDIRECTWR); >> + /* >> + * As per 66AK2G02 TRM SPRUHY8F section 11.15.5.3 Indirect Access >> + * Controller programming sequence, couple of cycles of >> + * QSPI_REF_CLK delay is required for the above bit to >> + * be internally synchronized by the QSPI module. Provide 5 >> + * cycles of delay. >> + */ >> + if (cqspi->wr_delay) >> + ndelay(cqspi->wr_delay); >> >> while (remaining > 0) { >> write_bytes = remaining > page_size ? page_size : remaining; >> @@ -1156,6 +1169,7 @@ static int cqspi_probe(struct platform_device *pdev) >> struct cqspi_st *cqspi; >> struct resource *res; >> struct resource *res_ahb; >> + unsigned long data; >> int ret; >> int irq; >> >> @@ -1213,6 +1227,10 @@ static int cqspi_probe(struct platform_device *pdev) >> } >> >> cqspi->master_ref_clk_hz = clk_get_rate(cqspi->clk); >> + data = (unsigned long)of_device_get_match_data(dev); >> + if (data & CQSPI_NEEDS_WR_DELAY) >> + cqspi->wr_delay = 5 * DIV_ROUND_UP(NSEC_PER_SEC, >> + cqspi->master_ref_clk_hz); >> >> ret = devm_request_irq(dev, irq, cqspi_irq_handler, 0, >> pdev->name, cqspi); >> @@ -1284,7 +1302,14 @@ static const struct dev_pm_ops cqspi__dev_pm_ops = { >> #endif >> >> static const struct of_device_id cqspi_dt_ids[] = { >> - {.compatible = "cdns,qspi-nor",}, >> + { >> + .compatible = "cdns,qspi-nor", >> + .data = (void *)0, >> + }, >> + { >> + .compatible = "ti,k2g-qspi", >> + .data = (void *)CQSPI_NEEDS_WR_DELAY, >> + }, >> { /* end of table */ } >> }; >> >> > > -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 20+ messages in thread
[parent not found: <8990b971-91d5-747f-905b-5e24743e090d-l0cyMroinI0@public.gmane.org>]
* Re: [PATCH v3 2/5] mtd: spi-nor: cadence-quadspi: add a delay in write sequence [not found] ` <8990b971-91d5-747f-905b-5e24743e090d-l0cyMroinI0@public.gmane.org> @ 2017-09-24 13:13 ` Marek Vasut [not found] ` <d35d0891-71b9-12df-9689-dc77f56453ab-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 0 siblings, 1 reply; 20+ messages in thread From: Marek Vasut @ 2017-09-24 13:13 UTC (permalink / raw) To: Vignesh R, Cyrille Pitchen Cc: David Woodhouse, Brian Norris, Boris Brezillon, Rob Herring, linux-mtd-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, devicetree-u79uwXL29TY76Z2rM5mHXA, linux-kernel-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel On 09/24/2017 02:33 PM, Vignesh R wrote: > > > On 9/24/2017 5:29 PM, Marek Vasut wrote: >> On 09/24/2017 12:59 PM, Vignesh R wrote: >>> As per 66AK2G02 TRM[1] SPRUHY8F section 11.15.5.3 Indirect Access >>> Controller programming sequence, a delay equal to couple of QSPI master >>> clock(~5ns) is required after setting CQSPI_REG_INDIRECTWR_START bit and >>> writing data to the flash. Introduce a quirk flag CQSPI_NEEDS_WR_DELAY >>> to handle this and set this flag for TI 66AK2G SoC. >>> >>> [1]http://www.ti.com/lit/ug/spruhy8f/spruhy8f.pdf >>> >>> Signed-off-by: Vignesh R <vigneshr-l0cyMroinI0@public.gmane.org> >> >> Is this TI specific or is this controller property ? I wouldn't be >> surprised of the later ... > > I am not sure, there is no generic public documentation by cadence for > this IP. TI TRM clearly states this delay is required and I have > verified it practically that this delay is indeed needed. > But current user of this IP, socfpga does not seem to mention anything > about it. So, I guess its TI specific quirk. OK, let's go with that then. I didn't observe any stability issues with SoCFPGA, but I didn't run the flash at 100s of MHz either. At what kind of frequencies does the quirk become relevant ? >> >>> --- >>> >>> v3: >>> Fix build warnings reported by kbuild test bot. >>> >>> drivers/mtd/spi-nor/cadence-quadspi.c | 27 ++++++++++++++++++++++++++- >>> 1 file changed, 26 insertions(+), 1 deletion(-) >>> >>> diff --git a/drivers/mtd/spi-nor/cadence-quadspi.c b/drivers/mtd/spi-nor/cadence-quadspi.c >>> index 53c7d8e0327a..5cd5d6f7303f 100644 >>> --- a/drivers/mtd/spi-nor/cadence-quadspi.c >>> +++ b/drivers/mtd/spi-nor/cadence-quadspi.c >>> @@ -38,6 +38,9 @@ >>> #define CQSPI_NAME "cadence-qspi" >>> #define CQSPI_MAX_CHIPSELECT 16 >>> >>> +/* Quirks */ >>> +#define CQSPI_NEEDS_WR_DELAY BIT(0) >>> + >>> struct cqspi_st; >>> >>> struct cqspi_flash_pdata { >>> @@ -76,6 +79,7 @@ struct cqspi_st { >>> u32 fifo_depth; >>> u32 fifo_width; >>> u32 trigger_address; >>> + u32 wr_delay; >>> struct cqspi_flash_pdata f_pdata[CQSPI_MAX_CHIPSELECT]; >>> }; >>> >>> @@ -608,6 +612,15 @@ static int cqspi_indirect_write_execute(struct spi_nor *nor, >>> reinit_completion(&cqspi->transfer_complete); >>> writel(CQSPI_REG_INDIRECTWR_START_MASK, >>> reg_base + CQSPI_REG_INDIRECTWR); >>> + /* >>> + * As per 66AK2G02 TRM SPRUHY8F section 11.15.5.3 Indirect Access >>> + * Controller programming sequence, couple of cycles of >>> + * QSPI_REF_CLK delay is required for the above bit to >>> + * be internally synchronized by the QSPI module. Provide 5 >>> + * cycles of delay. >>> + */ >>> + if (cqspi->wr_delay) >>> + ndelay(cqspi->wr_delay); >>> >>> while (remaining > 0) { >>> write_bytes = remaining > page_size ? page_size : remaining; >>> @@ -1156,6 +1169,7 @@ static int cqspi_probe(struct platform_device *pdev) >>> struct cqspi_st *cqspi; >>> struct resource *res; >>> struct resource *res_ahb; >>> + unsigned long data; >>> int ret; >>> int irq; >>> >>> @@ -1213,6 +1227,10 @@ static int cqspi_probe(struct platform_device *pdev) >>> } >>> >>> cqspi->master_ref_clk_hz = clk_get_rate(cqspi->clk); >>> + data = (unsigned long)of_device_get_match_data(dev); >>> + if (data & CQSPI_NEEDS_WR_DELAY) >>> + cqspi->wr_delay = 5 * DIV_ROUND_UP(NSEC_PER_SEC, >>> + cqspi->master_ref_clk_hz); >>> >>> ret = devm_request_irq(dev, irq, cqspi_irq_handler, 0, >>> pdev->name, cqspi); >>> @@ -1284,7 +1302,14 @@ static const struct dev_pm_ops cqspi__dev_pm_ops = { >>> #endif >>> >>> static const struct of_device_id cqspi_dt_ids[] = { >>> - {.compatible = "cdns,qspi-nor",}, >>> + { >>> + .compatible = "cdns,qspi-nor", >>> + .data = (void *)0, >>> + }, >>> + { >>> + .compatible = "ti,k2g-qspi", >>> + .data = (void *)CQSPI_NEEDS_WR_DELAY, >>> + }, >>> { /* end of table */ } >>> }; >>> >>> >> >> -- Best regards, Marek Vasut -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 20+ messages in thread
[parent not found: <d35d0891-71b9-12df-9689-dc77f56453ab-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>]
* Re: [PATCH v3 2/5] mtd: spi-nor: cadence-quadspi: add a delay in write sequence [not found] ` <d35d0891-71b9-12df-9689-dc77f56453ab-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> @ 2017-10-02 12:46 ` Vignesh R 0 siblings, 0 replies; 20+ messages in thread From: Vignesh R @ 2017-10-02 12:46 UTC (permalink / raw) To: Marek Vasut, Cyrille Pitchen Cc: David Woodhouse, Brian Norris, Boris Brezillon, Rob Herring, linux-mtd-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, devicetree-u79uwXL29TY76Z2rM5mHXA, linux-kernel-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel On 9/24/2017 6:43 PM, Marek Vasut wrote: > On 09/24/2017 02:33 PM, Vignesh R wrote: >> >> >> On 9/24/2017 5:29 PM, Marek Vasut wrote: >>> On 09/24/2017 12:59 PM, Vignesh R wrote: >>>> As per 66AK2G02 TRM[1] SPRUHY8F section 11.15.5.3 Indirect Access >>>> Controller programming sequence, a delay equal to couple of QSPI master >>>> clock(~5ns) is required after setting CQSPI_REG_INDIRECTWR_START bit and >>>> writing data to the flash. Introduce a quirk flag CQSPI_NEEDS_WR_DELAY >>>> to handle this and set this flag for TI 66AK2G SoC. >>>> >>>> [1]http://www.ti.com/lit/ug/spruhy8f/spruhy8f.pdf >>>> >>>> Signed-off-by: Vignesh R <vigneshr-l0cyMroinI0@public.gmane.org> >>> >>> Is this TI specific or is this controller property ? I wouldn't be >>> surprised of the later ... >> >> I am not sure, there is no generic public documentation by cadence for >> this IP. TI TRM clearly states this delay is required and I have >> verified it practically that this delay is indeed needed. >> But current user of this IP, socfpga does not seem to mention anything >> about it. So, I guess its TI specific quirk. > > OK, let's go with that then. I didn't observe any stability issues with > SoCFPGA, but I didn't run the flash at 100s of MHz either. At what kind > of frequencies does the quirk become relevant ? > Actually, delay is tied to QSPI master clk rate(not SPI bus clk rate). It runs at 384MHz. Changing SPI bus rate has no effect. Regards Vignesh >>> >>>> --- >>>> >>>> v3: >>>> Fix build warnings reported by kbuild test bot. >>>> >>>> drivers/mtd/spi-nor/cadence-quadspi.c | 27 ++++++++++++++++++++++++++- >>>> 1 file changed, 26 insertions(+), 1 deletion(-) >>>> >>>> diff --git a/drivers/mtd/spi-nor/cadence-quadspi.c b/drivers/mtd/spi-nor/cadence-quadspi.c >>>> index 53c7d8e0327a..5cd5d6f7303f 100644 >>>> --- a/drivers/mtd/spi-nor/cadence-quadspi.c >>>> +++ b/drivers/mtd/spi-nor/cadence-quadspi.c >>>> @@ -38,6 +38,9 @@ >>>> #define CQSPI_NAME "cadence-qspi" >>>> #define CQSPI_MAX_CHIPSELECT 16 >>>> >>>> +/* Quirks */ >>>> +#define CQSPI_NEEDS_WR_DELAY BIT(0) >>>> + >>>> struct cqspi_st; >>>> >>>> struct cqspi_flash_pdata { >>>> @@ -76,6 +79,7 @@ struct cqspi_st { >>>> u32 fifo_depth; >>>> u32 fifo_width; >>>> u32 trigger_address; >>>> + u32 wr_delay; >>>> struct cqspi_flash_pdata f_pdata[CQSPI_MAX_CHIPSELECT]; >>>> }; >>>> >>>> @@ -608,6 +612,15 @@ static int cqspi_indirect_write_execute(struct spi_nor *nor, >>>> reinit_completion(&cqspi->transfer_complete); >>>> writel(CQSPI_REG_INDIRECTWR_START_MASK, >>>> reg_base + CQSPI_REG_INDIRECTWR); >>>> + /* >>>> + * As per 66AK2G02 TRM SPRUHY8F section 11.15.5.3 Indirect Access >>>> + * Controller programming sequence, couple of cycles of >>>> + * QSPI_REF_CLK delay is required for the above bit to >>>> + * be internally synchronized by the QSPI module. Provide 5 >>>> + * cycles of delay. >>>> + */ >>>> + if (cqspi->wr_delay) >>>> + ndelay(cqspi->wr_delay); >>>> >>>> while (remaining > 0) { >>>> write_bytes = remaining > page_size ? page_size : remaining; >>>> @@ -1156,6 +1169,7 @@ static int cqspi_probe(struct platform_device *pdev) >>>> struct cqspi_st *cqspi; >>>> struct resource *res; >>>> struct resource *res_ahb; >>>> + unsigned long data; >>>> int ret; >>>> int irq; >>>> >>>> @@ -1213,6 +1227,10 @@ static int cqspi_probe(struct platform_device *pdev) >>>> } >>>> >>>> cqspi->master_ref_clk_hz = clk_get_rate(cqspi->clk); >>>> + data = (unsigned long)of_device_get_match_data(dev); >>>> + if (data & CQSPI_NEEDS_WR_DELAY) >>>> + cqspi->wr_delay = 5 * DIV_ROUND_UP(NSEC_PER_SEC, >>>> + cqspi->master_ref_clk_hz); >>>> >>>> ret = devm_request_irq(dev, irq, cqspi_irq_handler, 0, >>>> pdev->name, cqspi); >>>> @@ -1284,7 +1302,14 @@ static const struct dev_pm_ops cqspi__dev_pm_ops = { >>>> #endif >>>> >>>> static const struct of_device_id cqspi_dt_ids[] = { >>>> - {.compatible = "cdns,qspi-nor",}, >>>> + { >>>> + .compatible = "cdns,qspi-nor", >>>> + .data = (void *)0, >>>> + }, >>>> + { >>>> + .compatible = "ti,k2g-qspi", >>>> + .data = (void *)CQSPI_NEEDS_WR_DELAY, >>>> + }, >>>> { /* end of table */ } >>>> }; >>>> >>>> >>> >>> > > -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH v3 3/5] mtd: spi-nor: cadence-quadspi: Add new binding to enable loop-back circuit 2017-09-24 10:59 [PATCH v3 0/5] K2G: Add QSPI support Vignesh R 2017-09-24 10:59 ` [PATCH v3 1/5] mtd: spi-nor: cadence-quadspi: Add TI 66AK2G SoC specific compatible Vignesh R 2017-09-24 10:59 ` [PATCH v3 2/5] mtd: spi-nor: cadence-quadspi: add a delay in write sequence Vignesh R @ 2017-09-24 10:59 ` Vignesh R 2017-09-24 10:59 ` [PATCH v3 4/5] mtd: spi-nor: cadence-quadspi: Add support to enable loop-back clock circuit Vignesh R 2017-09-24 10:59 ` [PATCH v3 5/5] mtd: spi-nor: cadence-quadspi: Add runtime PM support Vignesh R 4 siblings, 0 replies; 20+ messages in thread From: Vignesh R @ 2017-09-24 10:59 UTC (permalink / raw) To: Marek Vasut, Cyrille Pitchen Cc: David Woodhouse, Brian Norris, Boris Brezillon, Rob Herring, linux-mtd, devicetree, linux-kernel, Vignesh R, linux-arm-kernel Cadence QSPI IP has a adapted loop-back circuit which can be enabled by setting BYPASS field to 0 in READCAPTURE register. It enables use of QSPI return clock to latch the data rather than the internal QSPI reference clock. For high speed operations, adapted loop-back circuit using QSPI return clock helps to increase data valid window. Add DT parameter cdns,rclk-en to help enable adapted loop-back circuit for boards which do have QSPI return clock provided. Update binding documentation for the same. Signed-off-by: Vignesh R <vigneshr@ti.com> Acked-by: Rob Herring <robh@kernel.org> --- Documentation/devicetree/bindings/mtd/cadence-quadspi.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Documentation/devicetree/bindings/mtd/cadence-quadspi.txt b/Documentation/devicetree/bindings/mtd/cadence-quadspi.txt index 7dbe3bd9ac56..bb2075df9b38 100644 --- a/Documentation/devicetree/bindings/mtd/cadence-quadspi.txt +++ b/Documentation/devicetree/bindings/mtd/cadence-quadspi.txt @@ -16,6 +16,9 @@ Required properties: Optional properties: - cdns,is-decoded-cs : Flag to indicate whether decoder is used or not. +- cdns,rclk-en : Flag to indicate that QSPI return clock is used to latch + the read data rather than the QSPI clock. Make sure that QSPI return + clock is populated on the board before using this property. Optional subnodes: Subnodes of the Cadence Quad SPI controller are spi slave nodes with additional -- 2.14.1 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH v3 4/5] mtd: spi-nor: cadence-quadspi: Add support to enable loop-back clock circuit 2017-09-24 10:59 [PATCH v3 0/5] K2G: Add QSPI support Vignesh R ` (2 preceding siblings ...) 2017-09-24 10:59 ` [PATCH v3 3/5] mtd: spi-nor: cadence-quadspi: Add new binding to enable loop-back circuit Vignesh R @ 2017-09-24 10:59 ` Vignesh R 2017-09-24 10:59 ` [PATCH v3 5/5] mtd: spi-nor: cadence-quadspi: Add runtime PM support Vignesh R 4 siblings, 0 replies; 20+ messages in thread From: Vignesh R @ 2017-09-24 10:59 UTC (permalink / raw) To: Marek Vasut, Cyrille Pitchen Cc: David Woodhouse, Brian Norris, Boris Brezillon, Rob Herring, linux-mtd, devicetree, linux-kernel, Vignesh R, linux-arm-kernel Cadence QSPI IP has a adapted loop-back circuit which can be enabled by setting BYPASS field to 0 in READCAPTURE register. It enables use of QSPI return clock to latch the data rather than the internal QSPI reference clock. For high speed operations, adapted loop-back circuit using QSPI return clock helps to increase data valid window. Based on DT parameter cdns,rclk-en enable adapted loop-back circuit for boards which do have QSPI return clock provided. This patch also modifies cqspi_readdata_capture() function's bypass parameter to bool to match how its used in the function. Signed-off-by: Vignesh R <vigneshr@ti.com> --- drivers/mtd/spi-nor/cadence-quadspi.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/mtd/spi-nor/cadence-quadspi.c b/drivers/mtd/spi-nor/cadence-quadspi.c index 5cd5d6f7303f..d9629e8f4798 100644 --- a/drivers/mtd/spi-nor/cadence-quadspi.c +++ b/drivers/mtd/spi-nor/cadence-quadspi.c @@ -78,6 +78,7 @@ struct cqspi_st { bool is_decoded_cs; u32 fifo_depth; u32 fifo_width; + bool rclk_en; u32 trigger_address; u32 wr_delay; struct cqspi_flash_pdata f_pdata[CQSPI_MAX_CHIPSELECT]; @@ -788,7 +789,7 @@ static void cqspi_config_baudrate_div(struct cqspi_st *cqspi) } static void cqspi_readdata_capture(struct cqspi_st *cqspi, - const unsigned int bypass, + const bool bypass, const unsigned int delay) { void __iomem *reg_base = cqspi->iobase; @@ -852,7 +853,8 @@ static void cqspi_configure(struct spi_nor *nor) cqspi->sclk = sclk; cqspi_config_baudrate_div(cqspi); cqspi_delay(nor); - cqspi_readdata_capture(cqspi, 1, f_pdata->read_delay); + cqspi_readdata_capture(cqspi, !cqspi->rclk_en, + f_pdata->read_delay); } if (switch_cs || switch_ck) @@ -1049,6 +1051,8 @@ static int cqspi_of_get_pdata(struct platform_device *pdev) return -ENXIO; } + cqspi->rclk_en = of_property_read_bool(np, "cdns,rclk-en"); + return 0; } -- 2.14.1 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH v3 5/5] mtd: spi-nor: cadence-quadspi: Add runtime PM support 2017-09-24 10:59 [PATCH v3 0/5] K2G: Add QSPI support Vignesh R ` (3 preceding siblings ...) 2017-09-24 10:59 ` [PATCH v3 4/5] mtd: spi-nor: cadence-quadspi: Add support to enable loop-back clock circuit Vignesh R @ 2017-09-24 10:59 ` Vignesh R 2017-09-24 12:01 ` Marek Vasut 4 siblings, 1 reply; 20+ messages in thread From: Vignesh R @ 2017-09-24 10:59 UTC (permalink / raw) To: Marek Vasut, Cyrille Pitchen Cc: David Woodhouse, Brian Norris, Boris Brezillon, Rob Herring, linux-mtd, devicetree, linux-kernel, Vignesh R, linux-arm-kernel Add pm_runtime* calls to cadence-quadspi driver. This is required to switch on QSPI power domain on TI 66AK2G SoC during probe. Signed-off-by: Vignesh R <vigneshr@ti.com> --- drivers/mtd/spi-nor/cadence-quadspi.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/drivers/mtd/spi-nor/cadence-quadspi.c b/drivers/mtd/spi-nor/cadence-quadspi.c index d9629e8f4798..2c8e6226d267 100644 --- a/drivers/mtd/spi-nor/cadence-quadspi.c +++ b/drivers/mtd/spi-nor/cadence-quadspi.c @@ -31,6 +31,7 @@ #include <linux/of_device.h> #include <linux/of.h> #include <linux/platform_device.h> +#include <linux/pm_runtime.h> #include <linux/sched.h> #include <linux/spi/spi.h> #include <linux/timer.h> @@ -1224,6 +1225,13 @@ static int cqspi_probe(struct platform_device *pdev) return -ENXIO; } + pm_runtime_enable(&pdev->dev); + ret = pm_runtime_get_sync(&pdev->dev); + if (ret < 0) { + pm_runtime_put_noidle(&pdev->dev); + return ret; + } + ret = clk_prepare_enable(cqspi->clk); if (ret) { dev_err(dev, "Cannot enable QSPI clock.\n"); @@ -1275,6 +1283,9 @@ static int cqspi_remove(struct platform_device *pdev) clk_disable_unprepare(cqspi->clk); + pm_runtime_put_sync(&pdev->dev); + pm_runtime_disable(&pdev->dev); + return 0; } -- 2.14.1 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [PATCH v3 5/5] mtd: spi-nor: cadence-quadspi: Add runtime PM support 2017-09-24 10:59 ` [PATCH v3 5/5] mtd: spi-nor: cadence-quadspi: Add runtime PM support Vignesh R @ 2017-09-24 12:01 ` Marek Vasut 2017-09-24 13:08 ` Vignesh R 0 siblings, 1 reply; 20+ messages in thread From: Marek Vasut @ 2017-09-24 12:01 UTC (permalink / raw) To: Vignesh R, Cyrille Pitchen Cc: David Woodhouse, Brian Norris, Boris Brezillon, Rob Herring, linux-mtd, devicetree, linux-kernel, linux-arm-kernel On 09/24/2017 12:59 PM, Vignesh R wrote: > Add pm_runtime* calls to cadence-quadspi driver. This is required to > switch on QSPI power domain on TI 66AK2G SoC during probe. > > Signed-off-by: Vignesh R <vigneshr@ti.com> Are you planning to add some more fine-grained PM control later? > --- > drivers/mtd/spi-nor/cadence-quadspi.c | 11 +++++++++++ > 1 file changed, 11 insertions(+) > > diff --git a/drivers/mtd/spi-nor/cadence-quadspi.c b/drivers/mtd/spi-nor/cadence-quadspi.c > index d9629e8f4798..2c8e6226d267 100644 > --- a/drivers/mtd/spi-nor/cadence-quadspi.c > +++ b/drivers/mtd/spi-nor/cadence-quadspi.c > @@ -31,6 +31,7 @@ > #include <linux/of_device.h> > #include <linux/of.h> > #include <linux/platform_device.h> > +#include <linux/pm_runtime.h> > #include <linux/sched.h> > #include <linux/spi/spi.h> > #include <linux/timer.h> > @@ -1224,6 +1225,13 @@ static int cqspi_probe(struct platform_device *pdev) > return -ENXIO; > } > > + pm_runtime_enable(&pdev->dev); > + ret = pm_runtime_get_sync(&pdev->dev); > + if (ret < 0) { > + pm_runtime_put_noidle(&pdev->dev); > + return ret; > + } > + > ret = clk_prepare_enable(cqspi->clk); > if (ret) { > dev_err(dev, "Cannot enable QSPI clock.\n"); > @@ -1275,6 +1283,9 @@ static int cqspi_remove(struct platform_device *pdev) > > clk_disable_unprepare(cqspi->clk); > > + pm_runtime_put_sync(&pdev->dev); > + pm_runtime_disable(&pdev->dev); > + > return 0; > } > > -- Best regards, Marek Vasut ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH v3 5/5] mtd: spi-nor: cadence-quadspi: Add runtime PM support 2017-09-24 12:01 ` Marek Vasut @ 2017-09-24 13:08 ` Vignesh R [not found] ` <4ee69ea4-14cc-4305-bf3f-8fe76d43bf6b-l0cyMroinI0@public.gmane.org> 0 siblings, 1 reply; 20+ messages in thread From: Vignesh R @ 2017-09-24 13:08 UTC (permalink / raw) To: Marek Vasut, Cyrille Pitchen Cc: David Woodhouse, Brian Norris, Boris Brezillon, Rob Herring, linux-mtd, devicetree, linux-kernel, linux-arm-kernel On 9/24/2017 5:31 PM, Marek Vasut wrote: > On 09/24/2017 12:59 PM, Vignesh R wrote: >> Add pm_runtime* calls to cadence-quadspi driver. This is required to >> switch on QSPI power domain on TI 66AK2G SoC during probe. >> >> Signed-off-by: Vignesh R <vigneshr@ti.com> > > Are you planning to add some more fine-grained PM control later? Yes, I will need to add fine-grained PM control at some point. But, for now SoC does not really support low power mode or runtime power saving option. The fact that driver still uses clk_prepare_*() calls to enable/disable clocks instead of pm_*() calls makes it a bit tricky though. Just figured out I forgot to add cleanup code in error handling path of probe(). Will fix that and send a v4. > >> --- >> drivers/mtd/spi-nor/cadence-quadspi.c | 11 +++++++++++ >> 1 file changed, 11 insertions(+) >> >> diff --git a/drivers/mtd/spi-nor/cadence-quadspi.c b/drivers/mtd/spi-nor/cadence-quadspi.c >> index d9629e8f4798..2c8e6226d267 100644 >> --- a/drivers/mtd/spi-nor/cadence-quadspi.c >> +++ b/drivers/mtd/spi-nor/cadence-quadspi.c >> @@ -31,6 +31,7 @@ >> #include <linux/of_device.h> >> #include <linux/of.h> >> #include <linux/platform_device.h> >> +#include <linux/pm_runtime.h> >> #include <linux/sched.h> >> #include <linux/spi/spi.h> >> #include <linux/timer.h> >> @@ -1224,6 +1225,13 @@ static int cqspi_probe(struct platform_device *pdev) >> return -ENXIO; >> } >> >> + pm_runtime_enable(&pdev->dev); >> + ret = pm_runtime_get_sync(&pdev->dev); >> + if (ret < 0) { >> + pm_runtime_put_noidle(&pdev->dev); >> + return ret; >> + } >> + >> ret = clk_prepare_enable(cqspi->clk); >> if (ret) { >> dev_err(dev, "Cannot enable QSPI clock.\n"); >> @@ -1275,6 +1283,9 @@ static int cqspi_remove(struct platform_device *pdev) >> >> clk_disable_unprepare(cqspi->clk); >> >> + pm_runtime_put_sync(&pdev->dev); >> + pm_runtime_disable(&pdev->dev); >> + >> return 0; >> } >> >> > > ^ permalink raw reply [flat|nested] 20+ messages in thread
[parent not found: <4ee69ea4-14cc-4305-bf3f-8fe76d43bf6b-l0cyMroinI0@public.gmane.org>]
* Re: [PATCH v3 5/5] mtd: spi-nor: cadence-quadspi: Add runtime PM support [not found] ` <4ee69ea4-14cc-4305-bf3f-8fe76d43bf6b-l0cyMroinI0@public.gmane.org> @ 2017-09-24 13:12 ` Marek Vasut [not found] ` <fa700cdf-f0b5-779b-4f38-3138a7612cc2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 0 siblings, 1 reply; 20+ messages in thread From: Marek Vasut @ 2017-09-24 13:12 UTC (permalink / raw) To: Vignesh R, Cyrille Pitchen Cc: David Woodhouse, Brian Norris, Boris Brezillon, Rob Herring, linux-mtd-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, devicetree-u79uwXL29TY76Z2rM5mHXA, linux-kernel-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel On 09/24/2017 03:08 PM, Vignesh R wrote: > > > On 9/24/2017 5:31 PM, Marek Vasut wrote: >> On 09/24/2017 12:59 PM, Vignesh R wrote: >>> Add pm_runtime* calls to cadence-quadspi driver. This is required to >>> switch on QSPI power domain on TI 66AK2G SoC during probe. >>> >>> Signed-off-by: Vignesh R <vigneshr-l0cyMroinI0@public.gmane.org> >> >> Are you planning to add some more fine-grained PM control later? > > Yes, I will need to add fine-grained PM control at some point. But, for > now SoC does not really support low power mode or runtime power saving > option. > The fact that driver still uses clk_prepare_*() calls to enable/disable > clocks instead of pm_*() calls makes it a bit tricky though. > > Just figured out I forgot to add cleanup code in error handling path of > probe(). Will fix that and send a v4. OK, fine. Cleanups are welcome. The SoCFPGA doesn't do much runtime PM either, so it's fine for now. -- Best regards, Marek Vasut -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 20+ messages in thread
[parent not found: <fa700cdf-f0b5-779b-4f38-3138a7612cc2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>]
* Re: [PATCH v3 5/5] mtd: spi-nor: cadence-quadspi: Add runtime PM support [not found] ` <fa700cdf-f0b5-779b-4f38-3138a7612cc2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> @ 2017-09-24 13:27 ` Vignesh R 2017-09-24 13:51 ` Marek Vasut 0 siblings, 1 reply; 20+ messages in thread From: Vignesh R @ 2017-09-24 13:27 UTC (permalink / raw) To: Marek Vasut, Cyrille Pitchen Cc: David Woodhouse, Brian Norris, Boris Brezillon, Rob Herring, linux-mtd-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, devicetree-u79uwXL29TY76Z2rM5mHXA, linux-kernel-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel On 9/24/2017 6:42 PM, Marek Vasut wrote: > On 09/24/2017 03:08 PM, Vignesh R wrote: >> >> >> On 9/24/2017 5:31 PM, Marek Vasut wrote: >>> On 09/24/2017 12:59 PM, Vignesh R wrote: >>>> Add pm_runtime* calls to cadence-quadspi driver. This is required to >>>> switch on QSPI power domain on TI 66AK2G SoC during probe. >>>> >>>> Signed-off-by: Vignesh R <vigneshr-l0cyMroinI0@public.gmane.org> >>> >>> Are you planning to add some more fine-grained PM control later? >> >> Yes, I will need to add fine-grained PM control at some point. But, for >> now SoC does not really support low power mode or runtime power saving >> option. >> The fact that driver still uses clk_prepare_*() calls to enable/disable >> clocks instead of pm_*() calls makes it a bit tricky though. >> >> Just figured out I forgot to add cleanup code in error handling path of >> probe(). Will fix that and send a v4. > > OK, fine. Cleanups are welcome. The SoCFPGA doesn't do much runtime PM > either, so it's fine for now. > Ok thanks! Do you know if pm_runtime_get_sync() can enable clocks for QSPI on SoCFPGA or if clk_prepare_enable() is needed? Just trying to see if its possible to get rid of clk_*() calls in favor of pm_*() calls. -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH v3 5/5] mtd: spi-nor: cadence-quadspi: Add runtime PM support 2017-09-24 13:27 ` Vignesh R @ 2017-09-24 13:51 ` Marek Vasut [not found] ` <e4ad5d80-9093-b667-f0a5-d3105be4e8cf-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 0 siblings, 1 reply; 20+ messages in thread From: Marek Vasut @ 2017-09-24 13:51 UTC (permalink / raw) To: Vignesh R, Cyrille Pitchen Cc: David Woodhouse, Brian Norris, Boris Brezillon, Rob Herring, linux-mtd, devicetree, linux-kernel, linux-arm-kernel, matthew.gerlach On 09/24/2017 03:27 PM, Vignesh R wrote: > > > On 9/24/2017 6:42 PM, Marek Vasut wrote: >> On 09/24/2017 03:08 PM, Vignesh R wrote: >>> >>> >>> On 9/24/2017 5:31 PM, Marek Vasut wrote: >>>> On 09/24/2017 12:59 PM, Vignesh R wrote: >>>>> Add pm_runtime* calls to cadence-quadspi driver. This is required to >>>>> switch on QSPI power domain on TI 66AK2G SoC during probe. >>>>> >>>>> Signed-off-by: Vignesh R <vigneshr@ti.com> >>>> >>>> Are you planning to add some more fine-grained PM control later? >>> >>> Yes, I will need to add fine-grained PM control at some point. But, for >>> now SoC does not really support low power mode or runtime power saving >>> option. >>> The fact that driver still uses clk_prepare_*() calls to enable/disable >>> clocks instead of pm_*() calls makes it a bit tricky though. >>> >>> Just figured out I forgot to add cleanup code in error handling path of >>> probe(). Will fix that and send a v4. >> >> OK, fine. Cleanups are welcome. The SoCFPGA doesn't do much runtime PM >> either, so it's fine for now. >> > > Ok thanks! Do you know if pm_runtime_get_sync() can enable clocks for > QSPI on SoCFPGA or if clk_prepare_enable() is needed? Just trying to see > if its possible to get rid of clk_*() calls in favor of pm_*() calls. Not of the top of my head, sorry. +CC Matthew, he should know. -- Best regards, Marek Vasut ^ permalink raw reply [flat|nested] 20+ messages in thread
[parent not found: <e4ad5d80-9093-b667-f0a5-d3105be4e8cf-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>]
* Re: [PATCH v3 5/5] mtd: spi-nor: cadence-quadspi: Add runtime PM support [not found] ` <e4ad5d80-9093-b667-f0a5-d3105be4e8cf-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> @ 2017-09-25 22:41 ` matthew.gerlach-VuQAYsv1563Yd54FQh9/CA 2017-09-25 23:49 ` Marek Vasut 0 siblings, 1 reply; 20+ messages in thread From: matthew.gerlach-VuQAYsv1563Yd54FQh9/CA @ 2017-09-25 22:41 UTC (permalink / raw) To: Marek Vasut Cc: Vignesh R, Cyrille Pitchen, David Woodhouse, Brian Norris, Boris Brezillon, Rob Herring, linux-mtd-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, devicetree-u79uwXL29TY76Z2rM5mHXA, linux-kernel-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel On Sun, 24 Sep 2017, Marek Vasut wrote: > On 09/24/2017 03:27 PM, Vignesh R wrote: >> >> >> On 9/24/2017 6:42 PM, Marek Vasut wrote: >>> On 09/24/2017 03:08 PM, Vignesh R wrote: >>>> >>>> >>>> On 9/24/2017 5:31 PM, Marek Vasut wrote: >>>>> On 09/24/2017 12:59 PM, Vignesh R wrote: >>>>>> Add pm_runtime* calls to cadence-quadspi driver. This is required to >>>>>> switch on QSPI power domain on TI 66AK2G SoC during probe. >>>>>> >>>>>> Signed-off-by: Vignesh R <vigneshr-l0cyMroinI0@public.gmane.org> >>>>> >>>>> Are you planning to add some more fine-grained PM control later? >>>> >>>> Yes, I will need to add fine-grained PM control at some point. But, for >>>> now SoC does not really support low power mode or runtime power saving >>>> option. >>>> The fact that driver still uses clk_prepare_*() calls to enable/disable >>>> clocks instead of pm_*() calls makes it a bit tricky though. >>>> >>>> Just figured out I forgot to add cleanup code in error handling path of >>>> probe(). Will fix that and send a v4. >>> >>> OK, fine. Cleanups are welcome. The SoCFPGA doesn't do much runtime PM >>> either, so it's fine for now. >>> >> >> Ok thanks! Do you know if pm_runtime_get_sync() can enable clocks for >> QSPI on SoCFPGA or if clk_prepare_enable() is needed? Just trying to see >> if its possible to get rid of clk_*() calls in favor of pm_*() calls. > > Not of the top of my head, sorry. +CC Matthew, he should know. I am not an expert at the clock framework nor the power management, but I did ask around a bit. No one I asked was planning to change the clk_*() calls to pm_*() call, but the feedback was that it would be a good idea. Matthew Gerlach > > -- > Best regards, > Marek Vasut > -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH v3 5/5] mtd: spi-nor: cadence-quadspi: Add runtime PM support 2017-09-25 22:41 ` matthew.gerlach-VuQAYsv1563Yd54FQh9/CA @ 2017-09-25 23:49 ` Marek Vasut [not found] ` <fdfe29bf-ff46-7542-8e36-e8e45e1ca85f-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 0 siblings, 1 reply; 20+ messages in thread From: Marek Vasut @ 2017-09-25 23:49 UTC (permalink / raw) To: matthew.gerlach-VuQAYsv1563Yd54FQh9/CA Cc: Vignesh R, Cyrille Pitchen, David Woodhouse, Brian Norris, Boris Brezillon, Rob Herring, linux-mtd-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, devicetree-u79uwXL29TY76Z2rM5mHXA, linux-kernel-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel On 09/26/2017 12:41 AM, matthew.gerlach-VuQAYsv1563Yd54FQh9/CA@public.gmane.org wrote: > > > On Sun, 24 Sep 2017, Marek Vasut wrote: > >> On 09/24/2017 03:27 PM, Vignesh R wrote: >>> >>> >>> On 9/24/2017 6:42 PM, Marek Vasut wrote: >>>> On 09/24/2017 03:08 PM, Vignesh R wrote: >>>>> >>>>> >>>>> On 9/24/2017 5:31 PM, Marek Vasut wrote: >>>>>> On 09/24/2017 12:59 PM, Vignesh R wrote: >>>>>>> Add pm_runtime* calls to cadence-quadspi driver. This is required to >>>>>>> switch on QSPI power domain on TI 66AK2G SoC during probe. >>>>>>> >>>>>>> Signed-off-by: Vignesh R <vigneshr-l0cyMroinI0@public.gmane.org> >>>>>> >>>>>> Are you planning to add some more fine-grained PM control later? >>>>> >>>>> Yes, I will need to add fine-grained PM control at some point. But, >>>>> for >>>>> now SoC does not really support low power mode or runtime power saving >>>>> option. >>>>> The fact that driver still uses clk_prepare_*() calls to >>>>> enable/disable >>>>> clocks instead of pm_*() calls makes it a bit tricky though. >>>>> >>>>> Just figured out I forgot to add cleanup code in error handling >>>>> path of >>>>> probe(). Will fix that and send a v4. >>>> >>>> OK, fine. Cleanups are welcome. The SoCFPGA doesn't do much runtime PM >>>> either, so it's fine for now. >>>> >>> >>> Ok thanks! Do you know if pm_runtime_get_sync() can enable clocks for >>> QSPI on SoCFPGA or if clk_prepare_enable() is needed? Just trying to see >>> if its possible to get rid of clk_*() calls in favor of pm_*() calls. >> >> Not of the top of my head, sorry. +CC Matthew, he should know. > > I am not an expert at the clock framework nor the power management, but I > did ask around a bit. No one I asked was planning to change the clk_*() > calls to pm_*() call, but the feedback was that it would be a good idea. The question is, if we do the replacement, will it break on socfpga ? A quick test might be useful. -- Best regards, Marek Vasut -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 20+ messages in thread
[parent not found: <fdfe29bf-ff46-7542-8e36-e8e45e1ca85f-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>]
* Re: [PATCH v3 5/5] mtd: spi-nor: cadence-quadspi: Add runtime PM support [not found] ` <fdfe29bf-ff46-7542-8e36-e8e45e1ca85f-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> @ 2017-09-27 10:48 ` Vignesh R 2017-09-28 15:01 ` matthew.gerlach 0 siblings, 1 reply; 20+ messages in thread From: Vignesh R @ 2017-09-27 10:48 UTC (permalink / raw) To: matthew.gerlach-VuQAYsv1563Yd54FQh9/CA Cc: Marek Vasut, Cyrille Pitchen, David Woodhouse, Brian Norris, Boris Brezillon, Rob Herring, linux-mtd-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, devicetree-u79uwXL29TY76Z2rM5mHXA, linux-kernel-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel Hi Matthew, On Tuesday 26 September 2017 05:19 AM, Marek Vasut wrote: [...] >>>> Ok thanks! Do you know if pm_runtime_get_sync() can enable clocks for >>>> QSPI on SoCFPGA or if clk_prepare_enable() is needed? Just trying to see >>>> if its possible to get rid of clk_*() calls in favor of pm_*() calls. >>> >>> Not of the top of my head, sorry. +CC Matthew, he should know. >> >> I am not an expert at the clock framework nor the power management, but I >> did ask around a bit. No one I asked was planning to change the clk_*() >> calls to pm_*() call, but the feedback was that it would be a good idea. > > The question is, if we do the replacement, will it break on socfpga ? > A quick test might be useful. > yes, a quick qspi test with clk_prepare_enable() replaced by pm_*() calls like below patch would be helpful: diff --git a/drivers/mtd/spi-nor/cadence-quadspi.c b/drivers/mtd/spi-nor/cadence-quadspi.c index 53c7d8e0327a..7ad3e176cc88 100644 --- a/drivers/mtd/spi-nor/cadence-quadspi.c +++ b/drivers/mtd/spi-nor/cadence-quadspi.c @@ -34,6 +34,7 @@ #include <linux/sched.h> #include <linux/spi/spi.h> #include <linux/timer.h> +#include <linux/pm_runtime.h> #define CQSPI_NAME "cadence-qspi" #define CQSPI_MAX_CHIPSELECT 16 @@ -1206,11 +1207,8 @@ static int cqspi_probe(struct platform_device *pdev) return -ENXIO; } - ret = clk_prepare_enable(cqspi->clk); - if (ret) { - dev_err(dev, "Cannot enable QSPI clock.\n"); - return ret; - } + pm_runtime_enable(dev); + pm_runtime_get_sync(dev); cqspi->master_ref_clk_hz = clk_get_rate(cqspi->clk); -- Regards Vignesh -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [PATCH v3 5/5] mtd: spi-nor: cadence-quadspi: Add runtime PM support 2017-09-27 10:48 ` Vignesh R @ 2017-09-28 15:01 ` matthew.gerlach 2017-10-02 12:28 ` Vignesh R 0 siblings, 1 reply; 20+ messages in thread From: matthew.gerlach @ 2017-09-28 15:01 UTC (permalink / raw) To: Vignesh R Cc: Marek Vasut, Cyrille Pitchen, David Woodhouse, Brian Norris, Boris Brezillon, Rob Herring, linux-mtd, devicetree, linux-kernel, linux-arm-kernel [-- Attachment #1: Type: text/plain, Size: 2199 bytes --] Hi Vignesh, I tried this patch on an Arria10 SOCFPGA devkit against the 4.1.33-ltsi kernel, and it did not go well. Commands to the flash chip timedout resulting in the probe function failing. I ran into other problems, not related to cadence-quadspi, that prevented me from testing against 4.9 and 4.12 kernels, but I suspect similar behavior. Matthew Gerlach On Wed, 27 Sep 2017, Vignesh R wrote: > Hi Matthew, > > On Tuesday 26 September 2017 05:19 AM, Marek Vasut wrote: > [...] >>>>> Ok thanks! Do you know if pm_runtime_get_sync() can enable clocks for >>>>> QSPI on SoCFPGA or if clk_prepare_enable() is needed? Just trying to see >>>>> if its possible to get rid of clk_*() calls in favor of pm_*() calls. >>>> >>>> Not of the top of my head, sorry. +CC Matthew, he should know. >>> >>> I am not an expert at the clock framework nor the power management, but I >>> did ask around a bit. No one I asked was planning to change the clk_*() >>> calls to pm_*() call, but the feedback was that it would be a good idea. >> >> The question is, if we do the replacement, will it break on socfpga ? >> A quick test might be useful. >> > > yes, a quick qspi test with clk_prepare_enable() replaced by pm_*() calls > like below patch would be helpful: > > > diff --git a/drivers/mtd/spi-nor/cadence-quadspi.c b/drivers/mtd/spi-nor/cadence-quadspi.c > index 53c7d8e0327a..7ad3e176cc88 100644 > --- a/drivers/mtd/spi-nor/cadence-quadspi.c > +++ b/drivers/mtd/spi-nor/cadence-quadspi.c > @@ -34,6 +34,7 @@ > #include <linux/sched.h> > #include <linux/spi/spi.h> > #include <linux/timer.h> > +#include <linux/pm_runtime.h> > > #define CQSPI_NAME "cadence-qspi" > #define CQSPI_MAX_CHIPSELECT 16 > @@ -1206,11 +1207,8 @@ static int cqspi_probe(struct platform_device *pdev) > return -ENXIO; > } > > - ret = clk_prepare_enable(cqspi->clk); > - if (ret) { > - dev_err(dev, "Cannot enable QSPI clock.\n"); > - return ret; > - } > + pm_runtime_enable(dev); > + pm_runtime_get_sync(dev); > > cqspi->master_ref_clk_hz = clk_get_rate(cqspi->clk); > > > > > > -- > Regards > Vignesh > ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH v3 5/5] mtd: spi-nor: cadence-quadspi: Add runtime PM support 2017-09-28 15:01 ` matthew.gerlach @ 2017-10-02 12:28 ` Vignesh R 0 siblings, 0 replies; 20+ messages in thread From: Vignesh R @ 2017-10-02 12:28 UTC (permalink / raw) To: matthew.gerlach-VuQAYsv1563Yd54FQh9/CA@public.gmane.org Cc: Marek Vasut, Cyrille Pitchen, David Woodhouse, Brian Norris, Boris Brezillon, Rob Herring, linux-mtd-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org, devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-arm-kernel Hi, On 9/28/2017 8:31 PM, matthew.gerlach-VuQAYsv1563Yd54FQh9/CA@public.gmane.org wrote: > > Hi Vignesh, > > I tried this patch on an Arria10 SOCFPGA devkit against the 4.1.33-ltsi > kernel, and it did not go well. Commands to the flash chip timedout > resulting in the probe function failing. I ran into other problems, not > related to cadence-quadspi, that prevented me from testing against 4.9 and > 4.12 kernels, but I suspect similar behavior. > Ok, thanks! I will keep the clk_*() calls for now. Regards Vignesh > Matthew Gerlach > > On Wed, 27 Sep 2017, Vignesh R wrote: > >> Hi Matthew, >> >> On Tuesday 26 September 2017 05:19 AM, Marek Vasut wrote: >> [...] >>>>>> Ok thanks! Do you know if pm_runtime_get_sync() can enable clocks for >>>>>> QSPI on SoCFPGA or if clk_prepare_enable() is needed? Just trying to see >>>>>> if its possible to get rid of clk_*() calls in favor of pm_*() calls. >>>>> >>>>> Not of the top of my head, sorry. +CC Matthew, he should know. >>>> >>>> I am not an expert at the clock framework nor the power management, but I >>>> did ask around a bit. No one I asked was planning to change the clk_*() >>>> calls to pm_*() call, but the feedback was that it would be a good idea. >>> >>> The question is, if we do the replacement, will it break on socfpga ? >>> A quick test might be useful. >>> >> >> yes, a quick qspi test with clk_prepare_enable() replaced by pm_*() calls >> like below patch would be helpful: >> >> >> diff --git a/drivers/mtd/spi-nor/cadence-quadspi.c b/drivers/mtd/spi-nor/cadence-quadspi.c >> index 53c7d8e0327a..7ad3e176cc88 100644 >> --- a/drivers/mtd/spi-nor/cadence-quadspi.c >> +++ b/drivers/mtd/spi-nor/cadence-quadspi.c >> @@ -34,6 +34,7 @@ >> #include <linux/sched.h> >> #include <linux/spi/spi.h> >> #include <linux/timer.h> >> +#include <linux/pm_runtime.h> >> >> #define CQSPI_NAME "cadence-qspi" >> #define CQSPI_MAX_CHIPSELECT 16 >> @@ -1206,11 +1207,8 @@ static int cqspi_probe(struct platform_device *pdev) >> return -ENXIO; >> } >> >> - ret = clk_prepare_enable(cqspi->clk); >> - if (ret) { >> - dev_err(dev, "Cannot enable QSPI clock.\n"); >> - return ret; >> - } >> + pm_runtime_enable(dev); >> + pm_runtime_get_sync(dev); >> >> cqspi->master_ref_clk_hz = clk_get_rate(cqspi->clk); >> >> >> >> >> >> -- >> Regards >> Vignesh >> > -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 20+ messages in thread
end of thread, other threads:[~2017-10-02 12:46 UTC | newest] Thread overview: 20+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2017-09-24 10:59 [PATCH v3 0/5] K2G: Add QSPI support Vignesh R 2017-09-24 10:59 ` [PATCH v3 1/5] mtd: spi-nor: cadence-quadspi: Add TI 66AK2G SoC specific compatible Vignesh R 2017-09-24 10:59 ` [PATCH v3 2/5] mtd: spi-nor: cadence-quadspi: add a delay in write sequence Vignesh R 2017-09-24 11:59 ` Marek Vasut [not found] ` <94313cae-4805-0b13-a469-72aa7556b685-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 2017-09-24 12:33 ` Vignesh R [not found] ` <8990b971-91d5-747f-905b-5e24743e090d-l0cyMroinI0@public.gmane.org> 2017-09-24 13:13 ` Marek Vasut [not found] ` <d35d0891-71b9-12df-9689-dc77f56453ab-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 2017-10-02 12:46 ` Vignesh R 2017-09-24 10:59 ` [PATCH v3 3/5] mtd: spi-nor: cadence-quadspi: Add new binding to enable loop-back circuit Vignesh R 2017-09-24 10:59 ` [PATCH v3 4/5] mtd: spi-nor: cadence-quadspi: Add support to enable loop-back clock circuit Vignesh R 2017-09-24 10:59 ` [PATCH v3 5/5] mtd: spi-nor: cadence-quadspi: Add runtime PM support Vignesh R 2017-09-24 12:01 ` Marek Vasut 2017-09-24 13:08 ` Vignesh R [not found] ` <4ee69ea4-14cc-4305-bf3f-8fe76d43bf6b-l0cyMroinI0@public.gmane.org> 2017-09-24 13:12 ` Marek Vasut [not found] ` <fa700cdf-f0b5-779b-4f38-3138a7612cc2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 2017-09-24 13:27 ` Vignesh R 2017-09-24 13:51 ` Marek Vasut [not found] ` <e4ad5d80-9093-b667-f0a5-d3105be4e8cf-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 2017-09-25 22:41 ` matthew.gerlach-VuQAYsv1563Yd54FQh9/CA 2017-09-25 23:49 ` Marek Vasut [not found] ` <fdfe29bf-ff46-7542-8e36-e8e45e1ca85f-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 2017-09-27 10:48 ` Vignesh R 2017-09-28 15:01 ` matthew.gerlach 2017-10-02 12:28 ` Vignesh R
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).