From: Thierry Reding <thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
To: Olof Johansson <olof-nZhT3qVonbNeoWH0uzbU5w@public.gmane.org>
Cc: Stephen Warren <swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>,
"arm-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org"
<arm-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
"linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org"
<linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org>,
"linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
Thierry Reding <treding-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
Subject: Re: [GIT PULL 1/3] ARM: tegra: rework PCIe regulators
Date: Thu, 17 Jul 2014 16:20:39 +0200 [thread overview]
Message-ID: <20140717142037.GA17494@ulmo> (raw)
In-Reply-To: <20140710101527.GC21583@ulmo>
[-- Attachment #1.1: Type: text/plain, Size: 1810 bytes --]
On Thu, Jul 10, 2014 at 12:15:28PM +0200, Thierry Reding wrote:
> On Mon, Jul 07, 2014 at 09:45:46PM -0700, Olof Johansson wrote:
[...]
> > If you have to stay compatible, then I suggest you try to fill in
> > local driver variables with derivatives of the old properties (and
> > directly from the newer properties where you can). I haven't looked at
> > the specifics here so I don't know how hard it might be.
> >
> > If you are 100% sure that you don't have to stay compatible, then you
> > can remove the code handling the old bindings. Still, even then I am a
> > little worried about dependencies (and more importantly conflicts)
> > between these dtsi changes and others done by tegra platform code for
> > this release. I suppose that can be resolved by having this as a base
> > of any DT changes for tegra if needed.
>
> To be honest, I'm very much tempted to just drop this series. Even if
> that means keeping a totally broken DT binding. But frankly I don't have
> any energy left to debate DT stability.
So this kept bugging me and I couldn't leave it alone after all. How
about if I squash in the attached patch. I've verified that that keeps
compatibility with old device trees on TrimSlice and Beaver. I think the
remainder of the series could still remain as-is (the top few commits
that you said shouldn't be there) if I squash this into
PCI: tegra: Implement accurate power supply scheme
That way the binding will be the new one so that people don't get any
wrong ideas about taking shortcuts while still preserving compatibility
with existing DTBs.
Interestingly, despite my initial disgust for having to keep around old
code (it's in fact new code in this case) for compatibility reasons, it
ended up making the code look more mature.
Thierry
[-- Attachment #1.2: 0001-PCI-tegra-Preserve-DT-backwards-compatibility.patch --]
[-- Type: text/x-diff, Size: 3742 bytes --]
From 569fd6029e77f6b3ea0dc23dfc0ef32239cf55c9 Mon Sep 17 00:00:00 2001
From: Thierry Reding <treding-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
Date: Thu, 17 Jul 2014 15:29:46 +0200
Subject: [PATCH] PCI: tegra: Preserve DT backwards-compatibility
Parse the set of power supplies in the deprecated version of the device
tree binding to remain backwards-compatible with old device trees.
Signed-off-by: Thierry Reding <treding-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
---
drivers/pci/host/pci-tegra.c | 78 ++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 76 insertions(+), 2 deletions(-)
diff --git a/drivers/pci/host/pci-tegra.c b/drivers/pci/host/pci-tegra.c
index 7df5aaf58921..d697587dbb7c 100644
--- a/drivers/pci/host/pci-tegra.c
+++ b/drivers/pci/host/pci-tegra.c
@@ -1359,6 +1359,66 @@ static int tegra_pcie_get_xbar_config(struct tegra_pcie *pcie, u32 lanes,
}
/*
+ * Check whether a given set of supplies is available in a device tree node.
+ * This is used to check whether the new or the legacy device tree bindings
+ * should be used.
+ */
+static bool of_regulator_bulk_available(struct device_node *np,
+ struct regulator_bulk_data *supplies,
+ unsigned int num_supplies)
+{
+ char property[32];
+ unsigned int i;
+
+ for (i = 0; i < num_supplies; i++) {
+ snprintf(property, 32, "%s-supply", supplies[i].supply);
+
+ if (of_find_property(np, property, NULL) == NULL)
+ return false;
+ }
+
+ return true;
+}
+
+/*
+ * Old versions of the device tree binding for this device used a set of power
+ * supplies that didn't match the hardware inputs. This happened to work for a
+ * number of cases but is not future proof. However to preserve backwards-
+ * compatibility with old device trees, this function will try to use the old
+ * set of supplies.
+ */
+static int tegra_pcie_get_legacy_regulators(struct tegra_pcie *pcie)
+{
+ struct device_node *np = pcie->dev->of_node;
+
+ if (of_device_is_compatible(np, "nvidia,tegra30-pcie"))
+ pcie->num_supplies = 3;
+ else if (of_device_is_compatible(np, "nvidia,tegra20-pcie"))
+ pcie->num_supplies = 2;
+
+ if (pcie->num_supplies == 0) {
+ dev_err(pcie->dev, "device %s not supported in legacy mode\n",
+ np->full_name);
+ return -ENODEV;
+ }
+
+ pcie->supplies = devm_kcalloc(pcie->dev, pcie->num_supplies,
+ sizeof(*pcie->supplies),
+ GFP_KERNEL);
+ if (!pcie->supplies)
+ return -ENOMEM;
+
+ pcie->supplies[0].supply = "pex-clk";
+ pcie->supplies[1].supply = "vdd";
+
+ if (pcie->num_supplies > 2)
+ pcie->supplies[2].supply = "avdd";
+
+ return devm_regulator_bulk_get(pcie->dev, pcie->num_supplies,
+ pcie->supplies);
+}
+
+/*
* Obtains the list of regulators required for a particular generation of the
* IP block.
*
@@ -1422,8 +1482,22 @@ static int tegra_pcie_get_regulators(struct tegra_pcie *pcie, u32 lane_mask)
pcie->supplies[4].supply = "vddio-pex-clk";
}
- return devm_regulator_bulk_get(pcie->dev, pcie->num_supplies,
- pcie->supplies);
+ if (of_regulator_bulk_available(pcie->dev->of_node, pcie->supplies,
+ pcie->num_supplies))
+ return devm_regulator_bulk_get(pcie->dev, pcie->num_supplies,
+ pcie->supplies);
+
+ /*
+ * If not all regulators are available for this new scheme, assume
+ * that the device tree complies with an older version of the device
+ * tree binding.
+ */
+ dev_info(pcie->dev, "using legacy DT binding for power supplies\n");
+
+ devm_kfree(pcie->dev, pcie->supplies);
+ pcie->num_supplies = 0;
+
+ return tegra_pcie_get_legacy_regulators(pcie);
}
static int tegra_pcie_parse_dt(struct tegra_pcie *pcie)
--
2.0.1
[-- Attachment #2: Type: application/pgp-signature, Size: 819 bytes --]
next prev parent reply other threads:[~2014-07-17 14:20 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-23 21:23 [GIT PULL 1/3] ARM: tegra: rework PCIe regulators Stephen Warren
[not found] ` <1403558626-13422-1-git-send-email-swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2014-06-23 21:23 ` [GIT PULL 2/3] ARM: tegra: move fuse code out of arch/arm Stephen Warren
[not found] ` <1403558626-13422-2-git-send-email-swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2014-07-07 0:44 ` Olof Johansson
[not found] ` <20140707004417.GE8469-O5ziIzlqnXUVNXGz7ipsyg@public.gmane.org>
2014-07-08 13:43 ` Peter De Schrijver
[not found] ` <20140708134359.GA23218-Rysk9IDjsxmJz7etNGeUX8VPkgjIgRvpAL8bYrjMMd8@public.gmane.org>
2014-07-08 17:47 ` Olof Johansson
[not found] ` <CAOesGMhoqvqf-dktp-OfUNTPLahPwkyAPiTeDngr4QjH=VfOGA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-07-09 11:16 ` Peter De Schrijver
[not found] ` <20140709111633.GG23218-Rysk9IDjsxmJz7etNGeUX8VPkgjIgRvpAL8bYrjMMd8@public.gmane.org>
2014-07-09 12:50 ` Arnd Bergmann
2014-07-11 12:56 ` Thierry Reding
2014-07-18 2:45 ` Stephen Warren
[not found] ` <53C88A4C.3070304-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2014-07-18 5:33 ` Olof Johansson
[not found] ` <CAOesGMh+zLV781wzdR5=_Bpzh+XMwJfWL-5XMDP6DwG_Hg80kw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-07-21 15:06 ` Stephen Warren
[not found] ` <53CD2C58.6060601-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2014-07-21 15:54 ` Catalin Marinas
[not found] ` <20140721155451.GF32578-5wv7dgnIgG8@public.gmane.org>
2014-07-21 16:14 ` Pawel Moll
2014-07-21 16:38 ` Stephen Warren
[not found] ` <53CD4201.5070705-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2014-07-21 16:46 ` Olof Johansson
[not found] ` <CAOesGMgvd1HbjywN7BDPtr8ZU7vucWH48B=AW3TZjng73YA8WA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-07-21 17:00 ` [PATCH] platform: Make platform_bus device a platform device Pawel Moll
[not found] ` <1405962034-25482-1-git-send-email-pawel.moll-5wv7dgnIgG8@public.gmane.org>
2014-07-21 18:40 ` Greg Kroah-Hartman
[not found] ` <20140721184007.GB572-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2014-07-22 10:02 ` [PATCH v2] " Pawel Moll
[not found] ` <1406023327-18525-1-git-send-email-pawel.moll-5wv7dgnIgG8@public.gmane.org>
2014-07-22 17:10 ` Greg Kroah-Hartman
[not found] ` <20140722171013.GA6605-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2014-07-22 17:30 ` Pawel Moll
2014-07-22 17:37 ` Greg Kroah-Hartman
[not found] ` <20140722173713.GA8959-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2014-07-22 17:55 ` [PATCH v3] " Pawel Moll
[not found] ` <1406051719-17354-1-git-send-email-pawel.moll-5wv7dgnIgG8@public.gmane.org>
2014-07-22 18:01 ` Pawel Moll
2014-07-22 18:15 ` Greg Kroah-Hartman
[not found] ` <20140722181505.GA9898-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2014-07-23 17:16 ` Pawel Moll
2014-07-23 19:34 ` Greg Kroah-Hartman
[not found] ` <20140723193434.GA31983-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2014-07-24 17:12 ` Pawel Moll
2014-07-22 19:46 ` Olof Johansson
[not found] ` <CAOesGMgya9i=zc_AVO_mgrC_FjYz-RWxwXguNueVA=7gpq=5sA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-07-23 14:26 ` Pawel Moll
2014-07-22 22:16 ` Greg Kroah-Hartman
[not found] ` <20140722221619.GA15781-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2014-07-23 14:27 ` Pawel Moll
2014-07-22 10:27 ` [GIT PULL 2/3] ARM: tegra: move fuse code out of arch/arm Catalin Marinas
[not found] ` <20140722102749.GB2219-5wv7dgnIgG8@public.gmane.org>
2014-07-22 16:27 ` Stephen Warren
[not found] ` <53CE90ED.8030900-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2014-07-22 16:54 ` Catalin Marinas
2014-07-22 11:26 ` Catalin Marinas
[not found] ` <20140722112651.GC2219-5wv7dgnIgG8@public.gmane.org>
2014-07-22 16:22 ` Stephen Warren
[not found] ` <53CE8FB1.4060307-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2014-07-22 17:04 ` Catalin Marinas
2014-07-18 2:44 ` Stephen Warren
[not found] ` <53C889FF.4070206-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2014-07-18 5:33 ` Olof Johansson
2014-06-23 21:23 ` [GIT PULL 3/3] ARM: tegra: use us counter as delay timer Stephen Warren
[not found] ` <1403558626-13422-3-git-send-email-swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2014-07-07 0:49 ` Olof Johansson
2014-07-07 0:38 ` [GIT PULL 1/3] ARM: tegra: rework PCIe regulators Olof Johansson
[not found] ` <20140707003854.GD8469-O5ziIzlqnXUVNXGz7ipsyg@public.gmane.org>
2014-07-07 5:52 ` Thierry Reding
2014-07-08 4:45 ` Olof Johansson
[not found] ` <CAOesGMjwE=xThuUwmBF02YaQ32_uFogryW5anNoGc8yfkuN_Pg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-07-10 10:15 ` Thierry Reding
2014-07-17 14:20 ` Thierry Reding [this message]
2014-07-17 17:52 ` Olof Johansson
2014-07-18 2:47 ` Stephen Warren
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=20140717142037.GA17494@ulmo \
--to=thierry.reding-re5jqeeqqe8avxtiumwx3w@public.gmane.org \
--cc=arm-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
--cc=linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=olof-nZhT3qVonbNeoWH0uzbU5w@public.gmane.org \
--cc=swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org \
--cc=treding-DDmLM1+adcrQT0dZR+AlfA@public.gmane.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox