From: Manivannan Sadhasivam <mani@kernel.org>
To: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Cc: "lpieralisi@kernel.org" <lpieralisi@kernel.org>,
"kw@linux.com" <kw@linux.com>,
"robh@kernel.org" <robh@kernel.org>,
"bhelgaas@google.com" <bhelgaas@google.com>,
"krzysztof.kozlowski+dt@linaro.org"
<krzysztof.kozlowski+dt@linaro.org>,
"conor+dt@kernel.org" <conor+dt@kernel.org>,
"jingoohan1@gmail.com" <jingoohan1@gmail.com>,
"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 v7 6/7] PCI: rcar-gen4: Add support for r8a779g0
Date: Thu, 16 May 2024 14:51:30 +0200 [thread overview]
Message-ID: <20240516125130.GB11261@thinkpad> (raw)
In-Reply-To: <TYCPR01MB110409C8FC92A7C466627E0A2D8E32@TYCPR01MB11040.jpnprd01.prod.outlook.com>
On Tue, May 14, 2024 at 11:27:30AM +0000, Yoshihiro Shimoda wrote:
> Hi Manivannan,
>
> > From: Manivannan Sadhasivam, Sent: Saturday, May 11, 2024 5:03 PM
> >
> > On Mon, Apr 15, 2024 at 05:11:34PM +0900, Yoshihiro Shimoda wrote:
> > > This driver previously supported r8a779f0 (R-Car S4-8). Add support
> > > for r8a779g0 (R-Car V4H). PCIe features of both r8a779f0 and r8a779g0
> > > are almost all the same. For example:
> > > - PCI Express Base Specification Revision 4.0
> > > - Root complex mode and endpoint mode are supported
> > >
> > > However, r8a779g0 requires specific firmware downloading, to
> > > initialize the PHY. Otherwise, the PCIe controller cannot work.
> > > The firmware is attached in the manual of the r8a779g0 as text.
> > > So, convert it to a binary file by using a script.
> >
> > The firmware is expected to be present in userspace. So where is it btw? Is it
> > upstreamed to linux-firmware?
>
> I may misunderstand your question, but the firmware is in the SoC's datasheet as
> a text file. So, we need to convert it to a binary file and store it into the rootfs.
> (Also, for debug purpose, we can use built-in firmware from "CONFIG_EXTRA_FIRMWARE".)
>
So how does the conversion need to happen? Does it require any tool or just copy
the content to a file and pass it as a firmware?
Whatever the method is, it should be documented in the commit message (also in
the driver).
> > You cannot ask users to manually copy the text and convert it to a binary file.
> > But if the firmware or sequence is not going to change, why can't you hardcode
> > it in the driver itself?
>
> This is because that Renesas is not able to distribute the firmware freely.
>
> > >
> > > Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
> > > ---
> > > drivers/pci/controller/dwc/pcie-rcar-gen4.c | 201 +++++++++++++++++++-
> > > 1 file changed, 200 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/drivers/pci/controller/dwc/pcie-rcar-gen4.c b/drivers/pci/controller/dwc/pcie-rcar-gen4.c
> > > index 980a916933d6..4e934e9156f2 100644
> > > --- a/drivers/pci/controller/dwc/pcie-rcar-gen4.c
> > > +++ b/drivers/pci/controller/dwc/pcie-rcar-gen4.c
> > > @@ -5,8 +5,10 @@
> > > */
> > >
> > > #include <linux/delay.h>
> > > +#include <linux/firmware.h>
> > > #include <linux/interrupt.h>
> > > #include <linux/io.h>
> > > +#include <linux/iopoll.h>
> > > #include <linux/module.h>
> > > #include <linux/of.h>
> > > #include <linux/pci.h>
> > > @@ -20,9 +22,10 @@
> > > /* Renesas-specific */
> > > /* PCIe Mode Setting Register 0 */
> > > #define PCIEMSR0 0x0000
> > > -#define BIFUR_MOD_SET_ON BIT(0)
> > > +#define APP_SRIS_MODE BIT(6)
> > > #define DEVICE_TYPE_EP 0
> > > #define DEVICE_TYPE_RC BIT(4)
> > > +#define BIFUR_MOD_SET_ON BIT(0)
> > >
> > > /* PCIe Interrupt Status 0 */
> > > #define PCIEINTSTS0 0x0084
> > > @@ -37,19 +40,47 @@
> > > #define PCIEDMAINTSTSEN 0x0314
> > > #define PCIEDMAINTSTSEN_INIT GENMASK(15, 0)
> > >
> > > +/* Port Logic Registers 89 */
> > > +#define PRTLGC89 0x0b70
> > > +
> > > +/* Port Logic Registers 90 */
> > > +#define PRTLGC90 0x0b74
> > > +
> > > /* PCIe Reset Control Register 1 */
> > > #define PCIERSTCTRL1 0x0014
> > > #define APP_HOLD_PHY_RST BIT(16)
> > > #define APP_LTSSM_ENABLE BIT(0)
> > >
> > > +/* PCIe Power Management Control */
> > > +#define PCIEPWRMNGCTRL 0x0070
> > > +#define APP_CLK_REQ_N BIT(11)
> > > +#define APP_CLK_PM_EN BIT(10)
> > > +
> > > +/*
> > > + * The R-Car Gen4 documents don't describe the PHY registers' name.
> > > + * But, the initialization procedure describes these offsets. So,
> > > + * this driver makes up own #defines for the offsets.
> > > + */
> > > +#define RCAR_GEN4_PCIE_PHY_0f8 0x0f8
> > > +#define RCAR_GEN4_PCIE_PHY_148 0x148
> > > +#define RCAR_GEN4_PCIE_PHY_1d4 0x1d4
> > > +#define RCAR_GEN4_PCIE_PHY_514 0x514
> > > +#define RCAR_GEN4_PCIE_PHY_700 0x700
> > > +
> >
> > As I said before, these defines provide no information about the registers at
> > all. So please use the offset directly and add a comment.
>
> I got it.
>
> > > #define RCAR_NUM_SPEED_CHANGE_RETRIES 10
> > > #define RCAR_MAX_LINK_SPEED 4
> > >
> > > #define RCAR_GEN4_PCIE_EP_FUNC_DBI_OFFSET 0x1000
> > > #define RCAR_GEN4_PCIE_EP_FUNC_DBI2_OFFSET 0x800
> > >
> > > +#define RCAR_GEN4_PCIE_FIRMWARE_NAME "rcar_gen4_pcie.bin"
> > > +#define RCAR_GEN4_PCIE_FIRMWARE_BASE_ADDR 0xc000
> > > +
> > > +MODULE_FIRMWARE(RCAR_GEN4_PCIE_FIRMWARE_NAME);
> > > +
> > > struct rcar_gen4_pcie;
> > > struct rcar_gen4_pcie_drvdata {
> > > + void (*additional_common_init)(struct rcar_gen4_pcie *rcar);
> >
> > What is this init for? Controller? PHY?
>
> This init is for controller.
>
Why do you need a callback for this? There is just a single function that is
used as of now, so please move the contents to rcar_gen4_pcie_common_init().
> > > int (*ltssm_enable)(struct rcar_gen4_pcie *rcar);
> > > enum dw_pcie_device_mode mode;
> > > };
> > > @@ -57,12 +88,144 @@ struct rcar_gen4_pcie_drvdata {
> > > struct rcar_gen4_pcie {
> > > struct dw_pcie dw;
> > > void __iomem *base;
> > > + void __iomem *phy_base;
> > > struct platform_device *pdev;
> > > const struct rcar_gen4_pcie_drvdata *drvdata;
> > > };
> > > #define to_rcar_gen4_pcie(_dw) container_of(_dw, struct rcar_gen4_pcie, dw)
> > >
> > > /* Common */
> > > +static void rcar_gen4_pcie_phy_reg_update_bits(struct rcar_gen4_pcie *rcar,
> > > + u32 offset, u32 mask, u32 val)
> > > +{
> > > + u32 tmp;
> > > +
> > > + tmp = readl(rcar->phy_base + offset);
> > > + tmp &= ~mask;
> > > + tmp |= val;
> > > + writel(tmp, rcar->phy_base + offset);
> > > +}
> > > +
> > > +static int rcar_gen4_pcie_reg_check(struct rcar_gen4_pcie *rcar,
> > > + u32 offset, u32 mask)
> > > +{
> > > + struct dw_pcie *dw = &rcar->dw;
> > > +
> > > + if (dw_pcie_readl_dbi(dw, offset) & mask)
> > > + return -EAGAIN;
> >
> > What is this function checking actually? It is just a DBI read. Do you expect
> > these register accesses to fail?
>
> This function is checking whether the register's value with mask is zero or not.
> - If non-zero, return -EAGAIN.
> - If zero, return 0. (this is expected value.)
>
> Perhaps, should I change the function name? For example, rcar_gen4_pcie_reg_test_bit()?
> According to the datasheet, software needs to write registers again if the register
> value(s) is(are) not expected value(s).
>
Well, I was asking under what circumstances the write may result in non-zero
value?
- Mani
--
மணிவண்ணன் சதாசிவம்
next prev parent reply other threads:[~2024-05-16 12:51 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-15 8:11 [PATCH v7 0/7] PCI: rcar-gen4: Add R-Car V4H support Yoshihiro Shimoda
2024-04-15 8:11 ` [PATCH v7 1/7] dt-bindings: PCI: rcar-gen4-pci-host: Add R-Car V4H compatible Yoshihiro Shimoda
2024-04-15 8:11 ` [PATCH v7 2/7] dt-bindings: PCI: rcar-gen4-pci-ep: " Yoshihiro Shimoda
2024-04-15 8:11 ` [PATCH v7 3/7] PCI: dwc: Add PCIE_PORT_{FORCE,LANE_SKEW} macros Yoshihiro Shimoda
2024-04-15 8:11 ` [PATCH v7 4/7] PCI: rcar-gen4: Add rcar_gen4_pcie_drvdata Yoshihiro Shimoda
2024-05-11 7:27 ` Manivannan Sadhasivam
2024-05-13 9:20 ` Geert Uytterhoeven
2024-05-15 7:56 ` Manivannan Sadhasivam
2024-04-15 8:11 ` [PATCH v7 5/7] PCI: rcar-gen4: Add .ltssm_enable() for other SoC support Yoshihiro Shimoda
2024-05-11 7:38 ` Manivannan Sadhasivam
2024-05-14 11:08 ` Yoshihiro Shimoda
2024-04-15 8:11 ` [PATCH v7 6/7] PCI: rcar-gen4: Add support for r8a779g0 Yoshihiro Shimoda
2024-04-15 8:27 ` Niklas Cassel
2024-04-15 9:19 ` Yoshihiro Shimoda
2024-04-15 12:24 ` Niklas Cassel
2024-05-11 8:02 ` Manivannan Sadhasivam
2024-05-14 11:27 ` Yoshihiro Shimoda
2024-05-15 7:59 ` Manivannan Sadhasivam
2024-05-15 8:59 ` Wolfram Sang
2024-05-15 9:09 ` Wolfram Sang
2024-05-15 16:26 ` Niklas Cassel
2024-05-15 20:10 ` Wolfram Sang
2024-05-16 12:41 ` Manivannan Sadhasivam
2024-05-16 12:51 ` Manivannan Sadhasivam [this message]
2024-05-17 11:45 ` Yoshihiro Shimoda
2024-04-15 8:11 ` [PATCH v7 7/7] misc: pci_endpoint_test: Document a policy about adding pci_device_id Yoshihiro Shimoda
2024-04-15 14:42 ` Frank Li
2024-05-17 10:33 ` [PATCH v7 0/7] PCI: rcar-gen4: Add R-Car V4H support Krzysztof Wilczyński
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=20240516125130.GB11261@thinkpad \
--to=mani@kernel.org \
--cc=bhelgaas@google.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=jingoohan1@gmail.com \
--cc=krzysztof.kozlowski+dt@linaro.org \
--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@kernel.org \
--cc=yoshihiro.shimoda.uh@renesas.com \
/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.