From: Pratyush Anand <pratyush.anand@st.com>
To: Arnd Bergmann <arnd@arndb.de>
Cc: Mohit KUMAR DCG <Mohit.KUMAR@st.com>,
Jingoo Han <jg1.han@samsung.com>,
Viresh Kumar <viresh.linux@gmail.com>,
spear-devel <spear-devel@list.st.com>,
"linux-pci@vger.kernel.org" <linux-pci@vger.kernel.org>
Subject: Re: [PATCH V3 7/8] pcie: SPEAr13xx: Add designware pcie support
Date: Fri, 31 Jan 2014 09:54:46 +0530 [thread overview]
Message-ID: <20140131042446.GD2618@pratyush-vbox> (raw)
In-Reply-To: <201401301434.20188.arnd@arndb.de>
On Thu, Jan 30, 2014 at 09:34:19PM +0800, Arnd Bergmann wrote:
> On Thursday 30 January 2014, Mohit Kumar wrote:
>
> > @@ -80,6 +80,57 @@
> > status = "disabled";
> > };
> >
> > + pcie0: pcie@b1000000 {
> > + compatible = "st,spear1340-pcie", "snps,dw-pcie";
> > + reg = <0xb1000000 0x4000>;
> > + interrupts = <0 68 0x4>;
> > + pcie_is_gen1 = <0>;
> > + num-lanes = <1>;
> > + phys = <&miphy0 1 0>;
> > + phy-names = "pcie-phy";
> > + #address-cells = <3>;
> > + #size-cells = <2>;
> > + device_type = "pci";
> > + ranges = <0x00000800 0 0x80000000 0x80000000 0 0x00020000 /* configuration space */
> > + 0x81000000 0 0 0x80020000 0 0x00010000 /* downstream I/O */
> > + 0x82000000 0 0x80030000 0xc0030000 0 0x0ffd0000>; /* non-prefetchable memory */
> > + status = "disabled";
> > + };
>
> Shouldn't there be more than one interrupt? Normally each root port has
> four legacy IRQs, in order to support bridge devices.
>
> > + spear13xx_pcie->phy = devm_phy_get(dev, "pcie-phy");
> > + if (IS_ERR(spear13xx_pcie->phy)) {
> > + dev_err(dev, "Could not get PHY\n");
> > + return -EPROBE_DEFER;
> > + }
>
> I think you should only return -EPROBE_DEFER if you got that
> error from the PHY layer. If there is some other problem
> with getting the PHY, you want that returned as a fatal
> error here and not retry the PCIe probe function.
OK.
>
> > diff --git a/drivers/phy/phy-spear13xx-sata-pcie.c b/drivers/phy/phy-spear13xx-sata-pcie.c
> > index 6adfa64..5eabf51 100644
> > --- a/drivers/phy/phy-spear13xx-sata-pcie.c
> > +++ b/drivers/phy/phy-spear13xx-sata-pcie.c
> > @@ -71,6 +71,80 @@
> > #define SPEAR1340_PCIE_SATA_MIPHY_CFG_PCIE \
> > (SPEAR1340_MIPHY_OSC_BYPASS_EXT | \
> > SPEAR1340_MIPHY_PLL_RATIO_TOP(25))
>
> Please split this out into a separate patch.
ok.
>
> > +static int spear1310_pcie_miphy_init(struct spear13xx_phy_priv *phypriv)
> > +{
> > + u32 mask, val;
> > +
> > + regmap_update_bits(phypriv->misc, SPEAR1310_PCIE_MIPHY_CFG_1,
> > + SPEAR1310_PCIE_SATA_MIPHY_CFG_PCIE_MASK,
> > + SPEAR1310_PCIE_SATA_MIPHY_CFG_PCIE);
> > +
> > + switch (phypriv->id) {
> > + case 0:
> > + mask = SPEAR1310_PCIE_CFG_MASK(0);
> > + val = SPEAR1310_PCIE_CFG_VAL(0);
> > + break;
> > + case 1:
> > + mask = SPEAR1310_PCIE_CFG_MASK(1);
> > + val = SPEAR1310_PCIE_CFG_VAL(1);
> > + break;
> > + case 2:
> > + mask = SPEAR1310_PCIE_CFG_MASK(2);
> > + val = SPEAR1310_PCIE_CFG_VAL(2);
> > + break;
>
> Ah, so this is what the ID gets used for. I would indeed encode this in the
> phy node, unlike the configuration of whether it's used for PCIe or SATA.
ok.. ll use "phy_id = <n>;" in phy node.
>
> > +static int pcie_miphy_init(struct spear13xx_phy_priv *phypriv)
> > +{
> > + if (of_machine_is_compatible("st,spear1340"))
> > + return spear1340_pcie_miphy_init(phypriv);
> > + else if (of_machine_is_compatible("st,spear1310"))
> > + return spear1310_pcie_miphy_init(phypriv);
> > + else
> > + return -EINVAL;
> > +}
>
> You should never check global properties such as the machine compatible
> value to make local decisions. You have two options here: Either use
> two different compatible strings for the phy node, or encode the
> difference in another property. If the only difference between spear1310
> and spear1340 is the location of the register within the "misc" syscon
> space, a good represenation would be to put the register offset next
> to the syscon phandle in the same property. That way it could transparently
> work for future SoCs.
Currently, there is only difference in misc syscon space. But, as I
said few phy register definition might also change in different soc.
Ok.. I ll go with first option, ie different compatible string for
different socs. It seems most logical also.
Regards
Pratyush
>
> Arnd
next prev parent reply other threads:[~2014-01-31 4:24 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-01-30 10:48 [PATCH V3 0/8] PCI:Add SPEAr13xx PCie support Mohit Kumar
2014-01-30 10:48 ` [PATCH V3 7/8] pcie: SPEAr13xx: Add designware pcie support Mohit Kumar
2014-01-30 13:34 ` Arnd Bergmann
2014-01-30 13:44 ` Arnd Bergmann
2014-01-31 4:44 ` Pratyush Anand
2014-01-31 19:01 ` Arnd Bergmann
2014-02-01 6:32 ` Pratyush Anand
2014-02-03 0:06 ` Jingoo Han
2014-01-31 4:24 ` Pratyush Anand [this message]
2014-01-31 15:29 ` Arnd Bergmann
2014-01-30 10:48 ` [PATCH V3 8/8] MAINTAINERS: Add ST SPEAr13xx PCIe driver maintainer Mohit Kumar
2014-02-03 0:08 ` Jingoo Han
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=20140131042446.GD2618@pratyush-vbox \
--to=pratyush.anand@st.com \
--cc=Mohit.KUMAR@st.com \
--cc=arnd@arndb.de \
--cc=jg1.han@samsung.com \
--cc=linux-pci@vger.kernel.org \
--cc=spear-devel@list.st.com \
--cc=viresh.linux@gmail.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 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).