From: Stephen Warren <swarren@wwwdotorg.org>
To: Thierry Reding <thierry.reding@avionic-design.de>
Cc: linux-tegra@vger.kernel.org,
Grant Likely <grant.likely@secretlab.ca>,
Rob Herring <rob.herring@calxeda.com>,
Russell King <linux@arm.linux.org.uk>,
Bjorn Helgaas <bhelgaas@google.com>,
Andrew Murray <andrew.murray@arm.com>,
Jason Gunthorpe <jgunthorpe@obsidianresearch.com>,
Arnd Bergmann <arnd@arndb.de>,
Thomas Petazzoni <thomas.petazzoni@free-electrons.com>,
devicetree-discuss@lists.ozlabs.org,
linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org, linux-pci@vger.kernel.org
Subject: Re: [PATCH 10/14] PCI: tegra: Move PCIe driver to drivers/pci/host
Date: Thu, 10 Jan 2013 17:48:46 -0700 [thread overview]
Message-ID: <50EF616E.7040609@wwwdotorg.org> (raw)
In-Reply-To: <1357764194-12677-11-git-send-email-thierry.reding@avionic-design.de>
On 01/09/2013 01:43 PM, Thierry Reding wrote:
> Move the PCIe driver from arch/arm/mach-tegra into the drivers/pci/host
> directory. The motivation is to collect various host controller drivers
> in the same location in order to facilitate refactoring.
>
> The Tegra PCIe driver has been largely rewritten, both in order to turn
> it into a proper platform driver and to add MSI (based on code by
> Krishna Kishore <kthota@nvidia.com>) as well as device tree support.
> diff --git a/arch/arm/mach-tegra/board-dt-tegra20.c b/arch/arm/mach-tegra/board-dt-tegra20.c
> static void __init trimslice_init(void)
> {
> #ifdef CONFIG_TEGRA_PCI
> - int ret;
> -
> - ret = tegra_pcie_init(true, true);
> - if (ret)
> - pr_err("tegra_pci_init() failed: %d\n", ret);
> + platform_device_register(&tegra_pcie_device);
That struct doesn't actually exist anywhere; only an extern definition
is added (and that extern definition isn't removed by patch 14 either).
> diff --git a/drivers/pci/host/Kconfig b/drivers/pci/host/Kconfig
> +config PCI_TEGRA
> + bool "NVIDIA Tegra PCIe controller"
> + depends on ARCH_TEGRA_2x_SOC
Perhaps depend on ARCH_TEGRA; that will save churn once this is ported
to Tegra30, and shouldn't cause any problems before then.
> diff --git a/drivers/pci/host/pci-tegra.c b/drivers/pci/host/pci-tegra.c
> +#define AFI_INTR_CODE 0xb8
> +#define AFI_INTR_CODE_MASK 0xf
> +#define AFI_INTR_MASTER_ABORT 4
> +#define AFI_INTR_LEGACY 6
Adding defines for at least some other codes here, would help further
below ...
> +static irqreturn_t tegra_pcie_isr(int irq, void *arg)
> + if (code == AFI_INTR_MASTER_ABORT) {
> + dev_dbg(pcie->dev, "%s, signature: %08x\n", err_msg[code],
> + signature);
> + } else
> + dev_err(pcie->dev, "%s, signature: %08x\n", err_msg[code],
> + signature);
> +
> + if (code == 3 || code == 4 || code == 7) {
... i.e. here.
> + u32 fpci = afi_readl(pcie, AFI_UPPER_FPCI_ADDRESS) & 0xff;
> + u64 address = (u64)fpci << 32 | (signature & 0xfffffffc);
> + dev_dbg(pcie->dev, " FPCI address: %10llx\n", address);
I'd suggest making that dev_err(), or at least something higher than
debug, since the message indicating the error happened is dev_err(), so
the complete details may as well be available since they're small.
> +static int tegra_pcie_enable_controller(struct tegra_pcie *pcie)
> +{
> + unsigned int timeout;
> + unsigned long value;
> +
> + /* enable dual controller and both ports */
> + value = afi_readl(pcie, AFI_PCIE_CONFIG);
> + value &= ~(AFI_PCIE_CONFIG_PCIEC0_DISABLE_DEVICE |
> + AFI_PCIE_CONFIG_PCIEC1_DISABLE_DEVICE |
> + AFI_PCIE_CONFIG_SM2TMS0_XBAR_CONFIG_MASK);
> + value |= AFI_PCIE_CONFIG_SM2TMS0_XBAR_CONFIG_DUAL;
> + afi_writel(pcie, value, AFI_PCIE_CONFIG);
Eventually, we should probably derive the port enables from the state of
the root port DT nodes, so that we can disable some and presumably save
a little power. Also, I notice that the nvidia,num-lanes property isn't
implemented yet. Still, we can probably take care of this later.
> +static void tegra_pcie_power_off(struct tegra_pcie *pcie)
> + if (!IS_ERR_OR_NULL(pcie->pex_clk_supply)) {
Hmm. I think we should make supplies mandatory; it doesn't make sense
for regulator support to be disabled on Tegra, and where a specific
board doesn't actually have a regulator, you're supposed to provide a
dummy fixed regulator so the driver doesn't have to care.
The same comment obviously applies to tegra_pcie_power_on() and wherever
regulator_get() happens.
> +static int tegra_pcie_parse_dt(struct tegra_pcie *pcie)
> + pcie->vdd_supply = devm_regulator_get(pcie->dev, "vdd");
> + if (IS_ERR(pcie->vdd_supply))
> + return PTR_ERR(pcie->vdd_supply);
> +
> + pcie->pex_clk_supply = devm_regulator_get(pcie->dev, "pex-clk");
> + if (IS_ERR(pcie->pex_clk_supply))
> + return PTR_ERR(pcie->pex_clk_supply);
Oh, I guess the regulator_get() calls are already strict.
> +static int tegra_pcie_add_port(struct tegra_pcie *pcie, struct device_node *np)
> + port = devm_kzalloc(pcie->dev, sizeof(*port), GFP_KERNEL);
> + if (!port)
> + return -ENOMEM;
> +
> + INIT_LIST_HEAD(&port->list);
> + port->index = index;
> + port->pcie = pcie;
> +
> + port->base = devm_request_and_ioremap(pcie->dev, ®s);
> + if (!port->base)
> + return -EADDRNOTAVAIL;
> +
> + if (!tegra_pcie_port_check_link(port)) {
> + dev_info(pcie->dev, "link %u down, ignoring\n", port->index);
Perhaps devm_kfree(port)? Not a big leak, but equally if you don't, it's
an unreferenced memory block.
> + return -ENODEV;
> + }
> +
> + list_add_tail(&port->list, &pcie->ports);
> +
> + return 0;
> +}
next prev parent reply other threads:[~2013-01-11 0:48 UTC|newest]
Thread overview: 93+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-09 20:43 [PATCH 00/14] Rewrite Tegra PCIe driver Thierry Reding
2013-01-09 20:43 ` [PATCH 01/14] of/pci: Provide support for parsing PCI DT ranges property Thierry Reding
2013-01-11 0:06 ` Stephen Warren
2013-01-11 4:02 ` Thierry Reding
2013-01-09 20:43 ` [PATCH 02/14] of/pci: Add of_pci_get_devfn() function Thierry Reding
2013-01-11 0:09 ` Stephen Warren
2013-01-11 4:06 ` Thierry Reding
2013-01-09 20:43 ` [PATCH 03/14] of/pci: Add of_pci_get_bus() function Thierry Reding
2013-01-09 20:43 ` [PATCH 04/14] of/pci: Add of_pci_parse_bus_range() function Thierry Reding
2013-01-09 20:43 ` [PATCH 05/14] lib: Add I/O map cache implementation Thierry Reding
2013-01-09 21:19 ` Arnd Bergmann
2013-01-09 21:54 ` Thierry Reding
2013-01-09 22:10 ` Arnd Bergmann
2013-01-09 23:12 ` Stephen Warren
2013-01-09 23:17 ` Jason Gunthorpe
2013-01-10 7:19 ` Thierry Reding
2013-01-10 9:17 ` Arnd Bergmann
2013-01-10 10:25 ` Thierry Reding
2013-01-10 18:20 ` Jason Gunthorpe
2013-01-10 18:55 ` Thierry Reding
2013-01-10 19:03 ` Thierry Reding
2013-01-10 19:24 ` Jason Gunthorpe
2013-01-10 20:20 ` Thierry Reding
2013-01-10 21:06 ` Jason Gunthorpe
2013-01-16 10:18 ` Thierry Reding
2013-01-16 11:25 ` Russell King - ARM Linux
2013-01-16 11:52 ` Thierry Reding
2013-01-10 18:26 ` Arnd Bergmann
2013-01-10 18:57 ` Thierry Reding
2013-01-10 7:10 ` Thierry Reding
2013-01-09 21:28 ` Russell King - ARM Linux
2013-01-09 21:57 ` Thierry Reding
2013-01-09 20:43 ` [PATCH 06/14] ARM: pci: Keep pci_common_init() around after init Thierry Reding
2013-02-05 20:41 ` Thierry Reding
2013-02-06 16:30 ` Russell King - ARM Linux
2013-02-06 19:35 ` Thierry Reding
2013-02-06 8:36 ` Thomas Petazzoni
2013-02-06 16:38 ` Linus Walleij
2013-02-07 0:54 ` Arnd Bergmann
2013-02-06 17:07 ` Linus Walleij
2013-02-07 1:20 ` Arnd Bergmann
2013-01-09 20:43 ` [PATCH 07/14] ARM: pci: Allow passing per-controller private data Thierry Reding
2013-01-09 20:43 ` [PATCH 08/14] ARM: tegra: Move tegra_pcie_xclk_clamp() to PMC Thierry Reding
2013-01-09 20:43 ` [PATCH 09/14] ARM: tegra: Move pmc.h to include/mach Thierry Reding
2013-01-11 0:15 ` Stephen Warren
2013-01-11 4:08 ` Thierry Reding
2013-01-09 20:43 ` [PATCH 10/14] PCI: tegra: Move PCIe driver to drivers/pci/host Thierry Reding
2013-01-09 21:22 ` Arnd Bergmann
2013-01-09 21:58 ` Thierry Reding
2013-01-09 22:03 ` Arnd Bergmann
2013-01-10 23:54 ` Stephen Warren
2013-01-11 3:40 ` Thierry Reding
2013-01-11 15:36 ` Arnd Bergmann
2013-01-11 15:45 ` Thierry Reding
2013-01-12 12:36 ` Thierry Reding
2013-01-12 21:12 ` Arnd Bergmann
2013-01-13 9:58 ` Thierry Reding
2013-01-14 9:57 ` Andrew Murray
2013-01-15 12:08 ` Thierry Reding
2013-01-15 12:44 ` Arnd Bergmann
2013-01-15 15:40 ` Andrew Murray
2013-01-15 21:14 ` Thierry Reding
2013-01-16 14:00 ` Arnd Bergmann
2013-01-16 16:17 ` Andrew Murray
2013-01-16 18:31 ` Thierry Reding
2013-01-17 15:42 ` Andrew Murray
2013-01-17 16:05 ` Thierry Reding
2013-01-17 16:22 ` Andrew Murray
2013-01-17 20:30 ` Thierry Reding
2013-01-18 9:18 ` Andrew Murray
2013-01-22 19:29 ` Jason Gunthorpe
2013-01-29 13:31 ` Andrew Murray
2013-01-11 0:48 ` Stephen Warren [this message]
2013-01-11 3:52 ` Thierry Reding
2013-01-11 20:34 ` Stephen Warren
2013-01-18 9:56 ` Andrew Murray
2013-01-18 10:09 ` Thierry Reding
2013-02-13 23:11 ` Thomas Petazzoni
2013-01-09 20:43 ` [PATCH 11/14] ARM: tegra: tamonten: Add PCIe support Thierry Reding
2013-01-09 21:23 ` Arnd Bergmann
2013-01-10 20:21 ` Thierry Reding
2013-01-09 20:43 ` [PATCH 12/14] ARM: tegra: tec: " Thierry Reding
2013-01-11 0:22 ` Stephen Warren
2013-01-11 4:34 ` Thierry Reding
2013-01-09 20:43 ` [PATCH 13/14] ARM: tegra: harmony: Initialize PCIe from DT Thierry Reding
2013-01-10 23:58 ` Stephen Warren
2013-01-09 20:43 ` [PATCH 14/14] ARM: tegra: trimslice: " Thierry Reding
2013-01-10 23:56 ` Stephen Warren
2013-01-11 18:48 ` Thierry Reding
2013-01-09 21:25 ` [PATCH 00/14] Rewrite Tegra PCIe driver Thomas Petazzoni
2013-01-10 6:55 ` Thierry Reding
2013-01-10 8:34 ` Thomas Petazzoni
2013-01-28 18:15 ` Bjorn Helgaas
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=50EF616E.7040609@wwwdotorg.org \
--to=swarren@wwwdotorg.org \
--cc=andrew.murray@arm.com \
--cc=arnd@arndb.de \
--cc=bhelgaas@google.com \
--cc=devicetree-discuss@lists.ozlabs.org \
--cc=grant.likely@secretlab.ca \
--cc=jgunthorpe@obsidianresearch.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linux-tegra@vger.kernel.org \
--cc=linux@arm.linux.org.uk \
--cc=rob.herring@calxeda.com \
--cc=thierry.reding@avionic-design.de \
--cc=thomas.petazzoni@free-electrons.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).