From: Niklas Cassel <niklas.cassel@linaro.org>
To: Bjorn Andersson <bjorn.andersson@linaro.org>
Cc: Bjorn Helgaas <bhelgaas@google.com>,
Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
Stanimir Varbanov <svarbanov@mm-sol.com>,
Andy Gross <andy.gross@linaro.org>,
David Brown <david.brown@linaro.org>,
Khasim Syed Mohammed <khasim.mohammed@linaro.org>,
Kishon Vijay Abraham I <kishon@ti.com>,
Mark Rutland <mark.rutland@arm.com>,
Michael Turquette <mturquette@baylibre.com>,
Rob Herring <robh+dt@kernel.org>, Stephen Boyd <sboyd@kernel.org>,
devicetree@vger.kernel.org, linux-arm-msm@vger.kernel.org,
linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-pci@vger.kernel.org
Subject: Re: [PATCH 6/7] PCI: qcom: Add QCS404 PCIe controller support
Date: Fri, 8 Feb 2019 17:39:13 +0100 [thread overview]
Message-ID: <20190208163913.GE773@centauri.lan> (raw)
In-Reply-To: <20190125234509.26419-7-bjorn.andersson@linaro.org>
On Fri, Jan 25, 2019 at 03:45:08PM -0800, Bjorn Andersson wrote:
> The QCS404 platform contains a PCIe controller of version 2.4.0 and a
> Qualcomm PCIe2 PHY. The driver already supports version 2.4.0, for the
> IPQ4019, but this support touches clocks and resets related to the PHY
> as well, and there's no upstream driver for the PHY.
>
> On QCS404 we must initialize the PHY, so a separate PHY driver is
> implemented to take care of this and the controller driver is updated to
> not require the PHY related resources. This is done by relying on the
> fact that operations in both the clock and reset framework are nops when
> passed NULL, so we can isolate this change to only the get_resource
> function.
>
> For QCS404 we also need to enable the AHB (iface) clock, in order to
> access the register space of the controller, but as this is not part of
> the IPQ4019 DT binding this is only added for new users of the 2.4.0
> controller.
>
> Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
> ---
> drivers/pci/controller/dwc/pcie-qcom.c | 64 +++++++++++++++-----------
> 1 file changed, 38 insertions(+), 26 deletions(-)
>
> diff --git a/drivers/pci/controller/dwc/pcie-qcom.c b/drivers/pci/controller/dwc/pcie-qcom.c
> index 9d366fad2b7f..6d4215ddcb42 100644
> --- a/drivers/pci/controller/dwc/pcie-qcom.c
> +++ b/drivers/pci/controller/dwc/pcie-qcom.c
> @@ -113,7 +113,7 @@ struct qcom_pcie_resources_2_3_2 {
> };
>
> struct qcom_pcie_resources_2_4_0 {
> - struct clk_bulk_data clks[3];
> + struct clk_bulk_data clks[4];
> int num_clks;
> struct reset_control *axi_m_reset;
> struct reset_control *axi_s_reset;
> @@ -637,13 +637,16 @@ static int qcom_pcie_get_resources_2_4_0(struct qcom_pcie *pcie)
> struct qcom_pcie_resources_2_4_0 *res = &pcie->res.v2_4_0;
> struct dw_pcie *pci = pcie->pci;
> struct device *dev = pci->dev;
> + bool is_ipq = of_device_is_compatible(dev->of_node, "qcom,pcie-ipq4019");
> int ret;
>
> res->clks[0].id = "aux";
> res->clks[1].id = "master_bus";
> res->clks[2].id = "slave_bus";
> + res->clks[3].id = "iface";
>
> - res->num_clks = 3;
> + /* qcom,pcie-ipq4019 is defined without "iface" */
> + res->num_clks = is_ipq ? 3 : 4;
>
> ret = devm_clk_bulk_get(dev, res->num_clks, res->clks);
> if (ret < 0)
> @@ -657,27 +660,33 @@ static int qcom_pcie_get_resources_2_4_0(struct qcom_pcie *pcie)
> if (IS_ERR(res->axi_s_reset))
> return PTR_ERR(res->axi_s_reset);
>
> - res->pipe_reset = devm_reset_control_get_exclusive(dev, "pipe");
> - if (IS_ERR(res->pipe_reset))
> - return PTR_ERR(res->pipe_reset);
> -
> - res->axi_m_vmid_reset = devm_reset_control_get_exclusive(dev,
> - "axi_m_vmid");
> - if (IS_ERR(res->axi_m_vmid_reset))
> - return PTR_ERR(res->axi_m_vmid_reset);
> -
> - res->axi_s_xpu_reset = devm_reset_control_get_exclusive(dev,
> - "axi_s_xpu");
> - if (IS_ERR(res->axi_s_xpu_reset))
> - return PTR_ERR(res->axi_s_xpu_reset);
> -
> - res->parf_reset = devm_reset_control_get_exclusive(dev, "parf");
> - if (IS_ERR(res->parf_reset))
> - return PTR_ERR(res->parf_reset);
> -
> - res->phy_reset = devm_reset_control_get_exclusive(dev, "phy");
> - if (IS_ERR(res->phy_reset))
> - return PTR_ERR(res->phy_reset);
> + if (is_ipq) {
> + /*
> + * These resources relates to the PHY, but are controlled here
> + * for IPQ4019
> + */
This comment makes be believe that all these resouces are related to the
PHY.
"pipe" and "phy" are related to the PHY, but I doubt that the rest of them
relates to the PHY.
If QCS404 lacks these other reset signals, which is very possible, since
it's a completely different SoC, perhaps the comment should also mention
that.
With that:
Reviewed-by: Niklas Cassel <niklas.cassel@linaro.org>
> + res->pipe_reset = devm_reset_control_get_exclusive(dev, "pipe");
> + if (IS_ERR(res->pipe_reset))
> + return PTR_ERR(res->pipe_reset);
> +
> + res->axi_m_vmid_reset = devm_reset_control_get_exclusive(dev,
> + "axi_m_vmid");
> + if (IS_ERR(res->axi_m_vmid_reset))
> + return PTR_ERR(res->axi_m_vmid_reset);
> +
> + res->axi_s_xpu_reset = devm_reset_control_get_exclusive(dev,
> + "axi_s_xpu");
> + if (IS_ERR(res->axi_s_xpu_reset))
> + return PTR_ERR(res->axi_s_xpu_reset);
> +
> + res->parf_reset = devm_reset_control_get_exclusive(dev, "parf");
> + if (IS_ERR(res->parf_reset))
> + return PTR_ERR(res->parf_reset);
> +
> + res->phy_reset = devm_reset_control_get_exclusive(dev, "phy");
> + if (IS_ERR(res->phy_reset))
> + return PTR_ERR(res->phy_reset);
> + }
>
> res->axi_m_sticky_reset = devm_reset_control_get_exclusive(dev,
> "axi_m_sticky");
> @@ -697,9 +706,11 @@ static int qcom_pcie_get_resources_2_4_0(struct qcom_pcie *pcie)
> if (IS_ERR(res->ahb_reset))
> return PTR_ERR(res->ahb_reset);
>
> - res->phy_ahb_reset = devm_reset_control_get_exclusive(dev, "phy_ahb");
> - if (IS_ERR(res->phy_ahb_reset))
> - return PTR_ERR(res->phy_ahb_reset);
> + if (is_ipq) {
> + res->phy_ahb_reset = devm_reset_control_get_exclusive(dev, "phy_ahb");
> + if (IS_ERR(res->phy_ahb_reset))
> + return PTR_ERR(res->phy_ahb_reset);
> + }
>
> return 0;
> }
> @@ -1284,6 +1295,7 @@ static const struct of_device_id qcom_pcie_match[] = {
> { .compatible = "qcom,pcie-msm8996", .data = &ops_2_3_2 },
> { .compatible = "qcom,pcie-ipq8074", .data = &ops_2_3_3 },
> { .compatible = "qcom,pcie-ipq4019", .data = &ops_2_4_0 },
> + { .compatible = "qcom,pcie-qcs404", .data = &ops_2_4_0 },
> { }
> };
>
> --
> 2.18.0
>
next prev parent reply other threads:[~2019-02-08 16:39 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-25 23:45 [PATCH 0/7] QCS404 PCIe PHY and controller Bjorn Andersson
2019-01-25 23:45 ` Bjorn Andersson
2019-01-25 23:45 ` [PATCH 1/7] clk: gcc-qcs404: Add PCIe resets Bjorn Andersson
2019-01-30 19:24 ` Stephen Boyd
2019-02-08 14:11 ` Niklas Cassel
2019-01-25 23:45 ` [PATCH 2/7] dt-bindings: phy: Add binding for Qualcomm PCIe2 PHY Bjorn Andersson
2019-02-05 5:54 ` Vinod Koul
2019-01-25 23:45 ` [PATCH 3/7] phy: qcom: Add Qualcomm PCIe2 PHY driver Bjorn Andersson
2019-02-08 14:14 ` Niklas Cassel
2019-01-25 23:45 ` [PATCH 4/7] PCI: qcom: Use clk_bulk API for 2.4.0 controllers Bjorn Andersson
2019-02-08 14:17 ` Niklas Cassel
2019-01-25 23:45 ` [PATCH 5/7] dt-bindings: PCI: qcom: Add QCS404 to the binding Bjorn Andersson
2019-01-25 23:45 ` [PATCH 6/7] PCI: qcom: Add QCS404 PCIe controller support Bjorn Andersson
2019-02-08 16:39 ` Niklas Cassel [this message]
2019-01-25 23:45 ` [PATCH 7/7] arm64: dts: qcom: qcs404: Add PCIe related nodes Bjorn Andersson
2019-01-30 19:24 ` Stephen Boyd
2019-02-05 6:01 ` Vinod Koul
2019-02-08 14:50 ` Niklas Cassel
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=20190208163913.GE773@centauri.lan \
--to=niklas.cassel@linaro.org \
--cc=andy.gross@linaro.org \
--cc=bhelgaas@google.com \
--cc=bjorn.andersson@linaro.org \
--cc=david.brown@linaro.org \
--cc=devicetree@vger.kernel.org \
--cc=khasim.mohammed@linaro.org \
--cc=kishon@ti.com \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-clk@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=lorenzo.pieralisi@arm.com \
--cc=mark.rutland@arm.com \
--cc=mturquette@baylibre.com \
--cc=robh+dt@kernel.org \
--cc=sboyd@kernel.org \
--cc=svarbanov@mm-sol.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.