All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
To: Serge Semin <fancer.lancer@gmail.com>
Cc: "lpieralisi@kernel.org" <lpieralisi@kernel.org>,
	"robh+dt@kernel.org" <robh+dt@kernel.org>,
	"kw@linux.com" <kw@linux.com>,
	"bhelgaas@google.com" <bhelgaas@google.com>,
	"jingoohan1@gmail.com" <jingoohan1@gmail.com>,
	"gustavo.pimentel@synopsys.com" <gustavo.pimentel@synopsys.com>,
	"Sergey.Semin@baikalelectronics.ru" 
	<Sergey.Semin@baikalelectronics.ru>,
	"marek.vasut+renesas@gmail.com" <marek.vasut+renesas@gmail.com>,
	"linux-pci@vger.kernel.org" <linux-pci@vger.kernel.org>,
	"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
	"linux-renesas-soc@vger.kernel.org" 
	<linux-renesas-soc@vger.kernel.org>
Subject: RE: [PATCH v11 08/13] PCI: dwc: Add dw_pcie_num_lanes_setup()
Date: Thu, 23 Mar 2023 10:49:47 +0000	[thread overview]
Message-ID: <TYBPR01MB53414D322EF1648EAFE40699D8879@TYBPR01MB5341.jpnprd01.prod.outlook.com> (raw)
In-Reply-To: <20230322065701.po7owyzwisntalyz@mobilestation>

Hi Serge,

> From: Serge Semin, Sent: Wednesday, March 22, 2023 3:57 PM
> 
> On Fri, Mar 10, 2023 at 09:35:05PM +0900, Yoshihiro Shimoda wrote:
> > Add dw_pcie_num_lanes_setup() to setup PCI_EXP_LNKCAP_MLW.
> 
> More details of why it's needed would be nice. For instance, in
> accordance with the DW PCIe RC/EP HW manuals [1,2,3,...] aside with the
> PORT_LINK_CTRL_OFF.LINK_CAPABLE and GEN2_CTRL_OFF.NUM_OF_LANES[8:0]
> field there is another one which needs to be update. It's
> LINK_CAPABILITIES_REG.PCIE_CAP_MAX_LINK_WIDTH. If it isn't done at the
> very least the maximum link-width capability CSR won't expose the
> actual maximum capability.

Thank you for your comments! I'll add them into the commit message on v12.

> [1] DesignWare Cores PCI Express Controller Databook - DWC PCIe Root Port,
>     Version 4.60a, March 2015, p.1032
> [2] DesignWare Cores PCI Express Controller Databook - DWC PCIe Root Port,
>     Version 4.70a, March 2016, p.1065
> [3] DesignWare Cores PCI Express Controller Databook - DWC PCIe Root Port,
>     Version 4.90a, March 2016, p.1057
> ...
> [X] DesignWare Cores PCI Express Controller Databook - DWC PCIe Endpoint,
>     Version 5.40a, March 2019, p.1396
> [X+1] DesignWare Cores PCI Express Controller Databook - DWC PCIe Root Port,
>     Version 5.40a, March 2019, p.1266
> 
> >
> > Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
> > ---
> >  drivers/pci/controller/dwc/pcie-designware.c | 12 ++++++++++++
> >  drivers/pci/controller/dwc/pcie-designware.h |  1 +
> >  drivers/pci/controller/dwc/pcie-tegra194.c   |  5 +----
> >  3 files changed, 14 insertions(+), 4 deletions(-)
> >
> > diff --git a/drivers/pci/controller/dwc/pcie-designware.c b/drivers/pci/controller/dwc/pcie-designware.c
> > index 89b8ec29da7f..47860da5738e 100644
> > --- a/drivers/pci/controller/dwc/pcie-designware.c
> > +++ b/drivers/pci/controller/dwc/pcie-designware.c
> > @@ -696,6 +696,18 @@ void dw_pcie_upconfig_setup(struct dw_pcie *pci)
> >  }
> >  EXPORT_SYMBOL_GPL(dw_pcie_upconfig_setup);
> >
> 
> > +void dw_pcie_num_lanes_setup(struct dw_pcie *pci, int num_lanes)
> > +{
> > +	u8 cap = dw_pcie_find_capability(pci, PCI_CAP_ID_EXP);
> > +	u32 val;
> > +
> > +	val = dw_pcie_readl_dbi(pci, cap + PCI_EXP_LNKCAP);
> > +	val &= ~PCI_EXP_LNKCAP_MLW;
> > +	val |= num_lanes << PCI_EXP_LNKSTA_NLW_SHIFT;
> > +	dw_pcie_writel_dbi(pci, cap + PCI_EXP_LNKCAP, val);
> > +}
> > +EXPORT_SYMBOL_GPL(dw_pcie_num_lanes_setup);
> 
> That's not what I meant. I meant to implement that functionality in
> the framework of dw_pcie_setup() function by moving all the
> link-width-related initializations into a dedicated static function
> dw_pcie_link_set_max_{link}_width() (thus the prototype would look
> like the dw_pcie_link_set_max_speed()) and _calling_ it from
> dw_pcie_setup() in place where the num-lanes initializations is
> performed if pci->num_lanes isn't zero. As I already mentioned in my
> comment above in accordance with the DW PCIe HW-manuals this should
> have been done for all DW PCIe IP-cores in the first place. I also
> checked the PCIE_CAP_MAX_LINK_WIDTH field access attribute. It turns
> out to be the same
> ■ Wire: No access.
> ■ Dbi: if (DBI_RO_WR_EN == 1) then R/W else R
> for all IP-cores which HW ref manuals I have at hands (v4.60a, v4.70a,
> v4.90a, v5.20a, v5.30a, v5.40a).
> 
> * Note even though the dw_pcie_setup() method currently permits the
> * 1, 2, 4 and 8 lanes only, in fact the x16 setup is also possible
> * judging by the CX_NL DW PCIe IP-core synthesize parameter.
> 
> It would also be more readable to place the dw_pcie_link_set_max_{link}_width()
> function below dw_pcie_link_set_max_speed() as per the calling order
> in the framework of dw_pcie_setup().
> 
> By doing as I suggested above you not only would be able to implement
> a correct link-width setup procedure for all IP-cores but also could
> get rid of the PATCH #5 since you'll be moving the respective code
> anyway and get rid of the dw_pcie_num_lanes_setup() method invocation
> from your and Tegra glue-drivers.

Thank you very much for your detailed explanation. I understood it.
I'll fix this on v12.

Best regards,
Yoshihiro Shimoda

> -Serge(y)
> 
> > +
> >  static void dw_pcie_link_set_max_speed(struct dw_pcie *pci, u32 link_gen)
> >  {
> >  	u32 cap, ctrl2, link_speed;
> > diff --git a/drivers/pci/controller/dwc/pcie-designware.h b/drivers/pci/controller/dwc/pcie-designware.h
> > index 79713ce075cc..36f3e2c818fe 100644
> > --- a/drivers/pci/controller/dwc/pcie-designware.h
> > +++ b/drivers/pci/controller/dwc/pcie-designware.h
> > @@ -415,6 +415,7 @@ void dw_pcie_write_dbi(struct dw_pcie *pci, u32 reg, size_t size, u32 val);
> >  void dw_pcie_write_dbi2(struct dw_pcie *pci, u32 reg, size_t size, u32 val);
> >  int dw_pcie_link_up(struct dw_pcie *pci);
> >  void dw_pcie_upconfig_setup(struct dw_pcie *pci);
> > +void dw_pcie_num_lanes_setup(struct dw_pcie *pci, int num_lanes);
> >  int dw_pcie_wait_for_link(struct dw_pcie *pci);
> >  int dw_pcie_prog_outbound_atu(struct dw_pcie *pci, int index, int type,
> >  			      u64 cpu_addr, u64 pci_addr, u64 size);
> > diff --git a/drivers/pci/controller/dwc/pcie-tegra194.c b/drivers/pci/controller/dwc/pcie-tegra194.c
> > index 09825b4a075e..befe17d57e2a 100644
> > --- a/drivers/pci/controller/dwc/pcie-tegra194.c
> > +++ b/drivers/pci/controller/dwc/pcie-tegra194.c
> > @@ -902,10 +902,7 @@ static int tegra_pcie_dw_host_init(struct dw_pcie_rp *pp)
> >  	dw_pcie_writel_dbi(pci, PORT_LOGIC_AMBA_ERROR_RESPONSE_DEFAULT, val);
> >
> >  	/* Configure Max lane width from DT */
> > -	val = dw_pcie_readl_dbi(pci, pcie->pcie_cap_base + PCI_EXP_LNKCAP);
> > -	val &= ~PCI_EXP_LNKCAP_MLW;
> > -	val |= (pcie->num_lanes << PCI_EXP_LNKSTA_NLW_SHIFT);
> > -	dw_pcie_writel_dbi(pci, pcie->pcie_cap_base + PCI_EXP_LNKCAP, val);
> > +	dw_pcie_num_lanes_setup(pci, pcie->num_lanes);
> >
> >  	/* Clear Slot Clock Configuration bit if SRNS configuration */
> >  	if (pcie->enable_srns) {
> > --
> > 2.25.1
> >
> >

  reply	other threads:[~2023-03-23 10:51 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-10 12:34 [PATCH v11 00/13] PCI: rcar-gen4: Add R-Car Gen4 PCIe support Yoshihiro Shimoda
2023-03-10 12:34 ` [PATCH v11 01/13] PCI: dwc: Fix writing wrong value if snps,enable-cdm-check Yoshihiro Shimoda
2023-03-21  9:02   ` Serge Semin
2023-03-21 18:52     ` Bjorn Helgaas
2023-03-21 19:33       ` Serge Semin
2023-03-10 12:34 ` [PATCH v11 02/13] PCI: endpoint: functions/pci-epf-test: Fix dma_chan direction Yoshihiro Shimoda
2023-04-12  4:23   ` Kunihiko Hayashi
2023-04-12  5:22     ` Yoshihiro Shimoda
2023-03-10 12:35 ` [PATCH v11 03/13] dt-bindings: PCI: renesas: Add R-Car Gen4 PCIe Host Yoshihiro Shimoda
2023-03-21 11:36   ` Serge Semin
2023-03-22  0:35     ` Yoshihiro Shimoda
2023-03-22  5:46       ` Serge Semin
2023-03-10 12:35 ` [PATCH v11 04/13] dt-bindings: PCI: renesas: Add R-Car Gen4 PCIe Endpoint Yoshihiro Shimoda
2023-03-21 11:43   ` Serge Semin
2023-03-10 12:35 ` [PATCH v11 05/13] PCI: dwc: Refactor PCIE_PORT_LINK_CONTROL handling Yoshihiro Shimoda
2023-03-10 12:35 ` [PATCH v11 06/13] PCI: Add PCI_EXP_LNKCAP_MLW macros Yoshihiro Shimoda
2023-03-10 12:35 ` [PATCH v11 07/13] PCI: designware-ep: Expose dw_pcie_ep_exit() to module Yoshihiro Shimoda
2023-03-10 12:35 ` [PATCH v11 08/13] PCI: dwc: Add dw_pcie_num_lanes_setup() Yoshihiro Shimoda
2023-03-22  6:57   ` Serge Semin
2023-03-23 10:49     ` Yoshihiro Shimoda [this message]
2023-03-10 12:35 ` [PATCH v11 09/13] PCI: dwc: Add support for triggering legacy IRQs Yoshihiro Shimoda
2023-03-22 16:17   ` Serge Semin
2023-03-23 10:54     ` Yoshihiro Shimoda
2023-03-10 12:35 ` [PATCH v11 10/13] PCI: rcar-gen4: Add R-Car Gen4 PCIe Host support Yoshihiro Shimoda
2023-03-22 17:16   ` Serge Semin
2023-03-23 11:04     ` Yoshihiro Shimoda
2023-03-10 12:35 ` [PATCH v11 11/13] PCI: rcar-gen4-ep: Add R-Car Gen4 PCIe Endpoint support Yoshihiro Shimoda
2023-03-22 17:57   ` Serge Semin
2023-03-23 11:18     ` Yoshihiro Shimoda
2023-03-10 12:35 ` [PATCH v11 12/13] MAINTAINERS: Update PCI DRIVER FOR RENESAS R-CAR for R-Car Gen4 Yoshihiro Shimoda
2023-03-10 12:35 ` [PATCH v11 13/13] misc: pci_endpoint_test: Add Device ID for R-Car S4-8 PCIe controller Yoshihiro Shimoda

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=TYBPR01MB53414D322EF1648EAFE40699D8879@TYBPR01MB5341.jpnprd01.prod.outlook.com \
    --to=yoshihiro.shimoda.uh@renesas.com \
    --cc=Sergey.Semin@baikalelectronics.ru \
    --cc=bhelgaas@google.com \
    --cc=devicetree@vger.kernel.org \
    --cc=fancer.lancer@gmail.com \
    --cc=gustavo.pimentel@synopsys.com \
    --cc=jingoohan1@gmail.com \
    --cc=kw@linux.com \
    --cc=linux-pci@vger.kernel.org \
    --cc=linux-renesas-soc@vger.kernel.org \
    --cc=lpieralisi@kernel.org \
    --cc=marek.vasut+renesas@gmail.com \
    --cc=robh+dt@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.