diff mbox series

[v4,2/2] PCI: rcar: Fix missing MACCTLR register setting in initialize sequence

Message ID 1572951089-19956-3-git-send-email-yoshihiro.shimoda.uh@renesas.com
State Accepted
Delegated to: Lorenzo Pieralisi
Headers show
Series PCI: rcar: Fix missing MACCTLR register setting (take2) | expand

Commit Message

Yoshihiro Shimoda Nov. 5, 2019, 10:51 a.m. UTC
According to the R-Car Gen2/3 manual, "Be sure to write the initial
value (= H'80FF 0000) to MACCTLR before enabling PCIETCTLR.CFINIT".
To avoid unexpected behaviors, this patch fixes it. Note that
the SPCHG bit of MACCTLR register description said "Only writing 1
is valid and writing 0 is invalid" but this "invalid" means
"ignored", not "prohibited". So, any documentation conflict doesn't
exist about writing the MACCTLR register.

Reported-by: Eugeniu Rosca <erosca@de.adit-jv.com>
Fixes: c25da4778803 ("PCI: rcar: Add Renesas R-Car PCIe driver")
Fixes: be20bbcb0a8c ("PCI: rcar: Add the initialization of PCIe link in resume_noirq()")
Cc: <stable@vger.kernel.org> # v5.2+
Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
 drivers/pci/controller/pcie-rcar.c | 6 ++++++
 1 file changed, 6 insertions(+)

Comments

Lorenzo Pieralisi Nov. 11, 2019, 2:42 p.m. UTC | #1
Never ever add stable@vger.kernel.org in the CC list of the email
header. You should add the tag in the commit log as you did but
never CC stable when sending the patch email.

On Tue, Nov 05, 2019 at 07:51:29PM +0900, Yoshihiro Shimoda wrote:
> According to the R-Car Gen2/3 manual, "Be sure to write the initial
> value (= H'80FF 0000) to MACCTLR before enabling PCIETCTLR.CFINIT".
> To avoid unexpected behaviors, this patch fixes it. Note that
> the SPCHG bit of MACCTLR register description said "Only writing 1
> is valid and writing 0 is invalid" but this "invalid" means
> "ignored", not "prohibited". So, any documentation conflict doesn't
> exist about writing the MACCTLR register.

I am sorry but I don't understand what you mean, if either you or
any rcar maintainer can help me rewrite this log I will merge this
patch then, appreciated.

Thanks,
Lorenzo

> Reported-by: Eugeniu Rosca <erosca@de.adit-jv.com>
> Fixes: c25da4778803 ("PCI: rcar: Add Renesas R-Car PCIe driver")
> Fixes: be20bbcb0a8c ("PCI: rcar: Add the initialization of PCIe link in resume_noirq()")
> Cc: <stable@vger.kernel.org> # v5.2+
> Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
> Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
> ---
>  drivers/pci/controller/pcie-rcar.c | 6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/drivers/pci/controller/pcie-rcar.c b/drivers/pci/controller/pcie-rcar.c
> index 40d8c54..94ba4fe 100644
> --- a/drivers/pci/controller/pcie-rcar.c
> +++ b/drivers/pci/controller/pcie-rcar.c
> @@ -91,8 +91,11 @@
>  #define  LINK_SPEED_2_5GTS	(1 << 16)
>  #define  LINK_SPEED_5_0GTS	(2 << 16)
>  #define MACCTLR			0x011058
> +#define  MACCTLR_NFTS_MASK	GENMASK(23, 16)	/* The name is from SH7786 */
>  #define  SPEED_CHANGE		BIT(24)
>  #define  SCRAMBLE_DISABLE	BIT(27)
> +#define  LTSMDIS		BIT(31)
> +#define  MACCTLR_INIT_VAL	(LTSMDIS | MACCTLR_NFTS_MASK)
>  #define PMSR			0x01105c
>  #define MACS2R			0x011078
>  #define MACCGSPSETR		0x011084
> @@ -613,6 +616,8 @@ static int rcar_pcie_hw_init(struct rcar_pcie *pcie)
>  	if (IS_ENABLED(CONFIG_PCI_MSI))
>  		rcar_pci_write_reg(pcie, 0x801f0000, PCIEMSITXR);
>  
> +	rcar_pci_write_reg(pcie, MACCTLR_INIT_VAL, MACCTLR);
> +
>  	/* Finish initialization - establish a PCI Express link */
>  	rcar_pci_write_reg(pcie, CFINIT, PCIETCTLR);
>  
> @@ -1235,6 +1240,7 @@ static int rcar_pcie_resume_noirq(struct device *dev)
>  		return 0;
>  
>  	/* Re-establish the PCIe link */
> +	rcar_pci_write_reg(pcie, MACCTLR_INIT_VAL, MACCTLR);
>  	rcar_pci_write_reg(pcie, CFINIT, PCIETCTLR);
>  	return rcar_pcie_wait_for_dl(pcie);
>  }
> -- 
> 2.7.4
>
Yoshihiro Shimoda Nov. 12, 2019, 1:48 a.m. UTC | #2
Hi Lorenzo,

> From: Lorenzo Pieralisi, Sent: Monday, November 11, 2019 11:43 PM
> 
> Never ever add stable@vger.kernel.org in the CC list of the email
> header. You should add the tag in the commit log as you did but
> never CC stable when sending the patch email.

Thank you for the pointed it out. I had added stable@vger.kernel.org
in such cases, but I understood it. I will drop stable@vger.kernel.org.

> On Tue, Nov 05, 2019 at 07:51:29PM +0900, Yoshihiro Shimoda wrote:
> > According to the R-Car Gen2/3 manual, "Be sure to write the initial
> > value (= H'80FF 0000) to MACCTLR before enabling PCIETCTLR.CFINIT".
> > To avoid unexpected behaviors, this patch fixes it. Note that
> > the SPCHG bit of MACCTLR register description said "Only writing 1
> > is valid and writing 0 is invalid" but this "invalid" means
> > "ignored", not "prohibited". So, any documentation conflict doesn't
> > exist about writing the MACCTLR register.
> 
> I am sorry but I don't understand what you mean, if either you or
> any rcar maintainer can help me rewrite this log I will merge this
> patch then, appreciated.

I'm sorry. I think I should not drop a sentence "because the bit 0 is
set to 1 on reset" which has the reverted patch from this version. Also,
the note seems to be difficult to understand. So, I'll rewrite this log
like below. Is it acceptable?

---
According to the R-Car Gen2/3 manual, "Be sure to write the initial
value (= H'80FF 0000) to MACCTLR before enabling PCIETCTLR.CFINIT"
because the bit 0 of MACCTLR is set to 1 on reset. To avoid unexpected
behaviors, this patch fixes it.

Note that the SPCHG bit (bit 24) of MACCTLR register description said
"Only writing 1 is valid and writing 0 is invalid", but this "invalid"
means "ignored", not "prohibited". So, even if the driver writes
the SPCHG to 0, there is no problem.
---

Best regards,
Yoshihiro Shimoda
Lorenzo Pieralisi Nov. 12, 2019, 10:27 a.m. UTC | #3
[removed CC stable]

On Tue, Nov 12, 2019 at 01:48:03AM +0000, Yoshihiro Shimoda wrote:

[...]

> I'm sorry. I think I should not drop a sentence "because the bit 0 is
> set to 1 on reset" which has the reverted patch from this version. Also,
> the note seems to be difficult to understand. So, I'll rewrite this log
> like below. Is it acceptable?
> 
> ---
> According to the R-Car Gen2/3 manual,

Is this a publicly available manual ? If yes we provide a link, if
not I will reword the sentence below.

> "Be sure to write the initial value (= H'80FF 0000) to MACCTLR before
> enabling PCIETCTLR.CFINIT" because the bit 0 of MACCTLR is set to 1 on
> reset. To avoid unexpected behaviors, this patch fixes it.
> 
> Note that the SPCHG bit (bit 24) of MACCTLR register description said
> "Only writing 1 is valid and writing 0 is invalid", but this "invalid"
> means "ignored", not "prohibited". So, even if the driver writes
> the SPCHG to 0, there is no problem.

I know understand it, let me know if we can add a link to a manual
(plus section/paragraph, etc.), I will rewrite the commit log
accordingly.

Thanks,
Lorenzo

> ---
> 
> Best regards,
> Yoshihiro Shimoda
>
Geert Uytterhoeven Nov. 12, 2019, 10:46 a.m. UTC | #4
Hi Lorenzo,

On Tue, Nov 12, 2019 at 11:27 AM Lorenzo Pieralisi
<lorenzo.pieralisi@arm.com> wrote:
> On Tue, Nov 12, 2019 at 01:48:03AM +0000, Yoshihiro Shimoda wrote:
> > I'm sorry. I think I should not drop a sentence "because the bit 0 is
> > set to 1 on reset" which has the reverted patch from this version. Also,
> > the note seems to be difficult to understand. So, I'll rewrite this log
> > like below. Is it acceptable?
> >
> > ---
> > According to the R-Car Gen2/3 manual,
>
> Is this a publicly available manual ? If yes we provide a link, if
> not I will reword the sentence below.

The same hardware block is present in the RZ/G series, and documented
in RZ/G Series User's Manual: Hardware
https://www.renesas.com/eu/en/products/microcontrollers-microprocessors/rz/rzg/rzg1m.html#documents
Chapter 39 ("PCIEC").
Section 39.28.98 ("MAC Control Register (MACCTLR)")
Section 39.3.1 ("Initialization"), Paragraph 3 ("Initial Setting of
PCI Express").

Thanks, and happy digesting ;-)

Gr{oetje,eeting}s,

                        Geert
Lorenzo Pieralisi Nov. 12, 2019, 11:25 a.m. UTC | #5
On Tue, Nov 12, 2019 at 11:46:42AM +0100, Geert Uytterhoeven wrote:
> Hi Lorenzo,
> 
> On Tue, Nov 12, 2019 at 11:27 AM Lorenzo Pieralisi
> <lorenzo.pieralisi@arm.com> wrote:
> > On Tue, Nov 12, 2019 at 01:48:03AM +0000, Yoshihiro Shimoda wrote:
> > > I'm sorry. I think I should not drop a sentence "because the bit 0 is
> > > set to 1 on reset" which has the reverted patch from this version. Also,
> > > the note seems to be difficult to understand. So, I'll rewrite this log
> > > like below. Is it acceptable?
> > >
> > > ---
> > > According to the R-Car Gen2/3 manual,
> >
> > Is this a publicly available manual ? If yes we provide a link, if
> > not I will reword the sentence below.
> 
> The same hardware block is present in the RZ/G series, and documented
> in RZ/G Series User's Manual: Hardware
> https://www.renesas.com/eu/en/products/microcontrollers-microprocessors/rz/rzg/rzg1m.html#documents
> Chapter 39 ("PCIEC").
> Section 39.28.98 ("MAC Control Register (MACCTLR)")
> Section 39.3.1 ("Initialization"), Paragraph 3 ("Initial Setting of
> PCI Express").
> 
> Thanks, and happy digesting ;-)

Thank you, updated commit log and pushed out, pci/rcar branch.

Thanks,
Lorenzo
Yoshihiro Shimoda Nov. 13, 2019, 1:34 a.m. UTC | #6
Hi Lorenzo,

> From: Lorenzo Pieralisi, Sent: Tuesday, November 12, 2019 8:25 PM
> 
> On Tue, Nov 12, 2019 at 11:46:42AM +0100, Geert Uytterhoeven wrote:
> > Hi Lorenzo,
> >
> > On Tue, Nov 12, 2019 at 11:27 AM Lorenzo Pieralisi
> > <lorenzo.pieralisi@arm.com> wrote:
> > > On Tue, Nov 12, 2019 at 01:48:03AM +0000, Yoshihiro Shimoda wrote:
> > > > I'm sorry. I think I should not drop a sentence "because the bit 0 is
> > > > set to 1 on reset" which has the reverted patch from this version. Also,
> > > > the note seems to be difficult to understand. So, I'll rewrite this log
> > > > like below. Is it acceptable?
> > > >
> > > > ---
> > > > According to the R-Car Gen2/3 manual,
> > >
> > > Is this a publicly available manual ? If yes we provide a link, if
> > > not I will reword the sentence below.
> >
> > The same hardware block is present in the RZ/G series, and documented
> > in RZ/G Series User's Manual: Hardware
> > https://www.renesas.com/eu/en/products/microcontrollers-microprocessors/rz/rzg/rzg1m.html#documents
> > Chapter 39 ("PCIEC").
> > Section 39.28.98 ("MAC Control Register (MACCTLR)")
> > Section 39.3.1 ("Initialization"), Paragraph 3 ("Initial Setting of
> > PCI Express").
> >
> > Thanks, and happy digesting ;-)
> 
> Thank you, updated commit log and pushed out, pci/rcar branch.

Thank you very much for updating the commit log. It's very clear than mine :)

Best regards,
Yoshihiro Shimoda

> Thanks,
> Lorenzo
diff mbox series

Patch

diff --git a/drivers/pci/controller/pcie-rcar.c b/drivers/pci/controller/pcie-rcar.c
index 40d8c54..94ba4fe 100644
--- a/drivers/pci/controller/pcie-rcar.c
+++ b/drivers/pci/controller/pcie-rcar.c
@@ -91,8 +91,11 @@ 
 #define  LINK_SPEED_2_5GTS	(1 << 16)
 #define  LINK_SPEED_5_0GTS	(2 << 16)
 #define MACCTLR			0x011058
+#define  MACCTLR_NFTS_MASK	GENMASK(23, 16)	/* The name is from SH7786 */
 #define  SPEED_CHANGE		BIT(24)
 #define  SCRAMBLE_DISABLE	BIT(27)
+#define  LTSMDIS		BIT(31)
+#define  MACCTLR_INIT_VAL	(LTSMDIS | MACCTLR_NFTS_MASK)
 #define PMSR			0x01105c
 #define MACS2R			0x011078
 #define MACCGSPSETR		0x011084
@@ -613,6 +616,8 @@  static int rcar_pcie_hw_init(struct rcar_pcie *pcie)
 	if (IS_ENABLED(CONFIG_PCI_MSI))
 		rcar_pci_write_reg(pcie, 0x801f0000, PCIEMSITXR);
 
+	rcar_pci_write_reg(pcie, MACCTLR_INIT_VAL, MACCTLR);
+
 	/* Finish initialization - establish a PCI Express link */
 	rcar_pci_write_reg(pcie, CFINIT, PCIETCTLR);
 
@@ -1235,6 +1240,7 @@  static int rcar_pcie_resume_noirq(struct device *dev)
 		return 0;
 
 	/* Re-establish the PCIe link */
+	rcar_pci_write_reg(pcie, MACCTLR_INIT_VAL, MACCTLR);
 	rcar_pci_write_reg(pcie, CFINIT, PCIETCTLR);
 	return rcar_pcie_wait_for_dl(pcie);
 }