Commit 2f532d07 authored by Andrey Smirnov's avatar Andrey Smirnov Committed by Lorenzo Pieralisi

PCI: imx6: Mark PHY functions as i.MX6 specific

PCIe PHY IP block on i.MX7D differs from the one used on i.MX6 family,
so none of the code in the current implementation of
imx6_setup_phy_mpll() or imx6_pcie_reset_phy() is applicable.

Introduce IMX6_PCIE_FLAG_IMX6_PHY and check for it in the aforementioned
functions to make sure they are only executed on appropriate PCIe IP
variants.
Tested-by: default avatarTrent Piepho <tpiepho@impinj.com>
Signed-off-by: default avatarAndrey Smirnov <andrew.smirnov@gmail.com>
[lorenzo.pieralisi@arm.com: updated log]
Signed-off-by: default avatarLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Reviewed-by: default avatarLucas Stach <l.stach@pengutronix.de>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Cc: Fabio Estevam <fabio.estevam@nxp.com>
Cc: Chris Healy <cphealy@gmail.com>
Cc: Lucas Stach <l.stach@pengutronix.de>
Cc: Leonard Crestez <leonard.crestez@nxp.com>
Cc: "A.s. Dong" <aisheng.dong@nxp.com>
Cc: Richard Zhu <hongxing.zhu@nxp.com>
parent e8e4d4e9
...@@ -41,8 +41,11 @@ enum imx6_pcie_variants { ...@@ -41,8 +41,11 @@ enum imx6_pcie_variants {
IMX7D, IMX7D,
}; };
#define IMX6_PCIE_FLAG_IMX6_PHY BIT(0)
struct imx6_pcie_drvdata { struct imx6_pcie_drvdata {
enum imx6_pcie_variants variant; enum imx6_pcie_variants variant;
u32 flags;
}; };
struct imx6_pcie { struct imx6_pcie {
...@@ -255,6 +258,9 @@ static void imx6_pcie_reset_phy(struct imx6_pcie *imx6_pcie) ...@@ -255,6 +258,9 @@ static void imx6_pcie_reset_phy(struct imx6_pcie *imx6_pcie)
{ {
u32 tmp; u32 tmp;
if (!(imx6_pcie->drvdata->flags & IMX6_PCIE_FLAG_IMX6_PHY))
return;
pcie_phy_read(imx6_pcie, PHY_RX_OVRD_IN_LO, &tmp); pcie_phy_read(imx6_pcie, PHY_RX_OVRD_IN_LO, &tmp);
tmp |= (PHY_RX_OVRD_IN_LO_RX_DATA_EN | tmp |= (PHY_RX_OVRD_IN_LO_RX_DATA_EN |
PHY_RX_OVRD_IN_LO_RX_PLL_EN); PHY_RX_OVRD_IN_LO_RX_PLL_EN);
...@@ -572,6 +578,9 @@ static int imx6_setup_phy_mpll(struct imx6_pcie *imx6_pcie) ...@@ -572,6 +578,9 @@ static int imx6_setup_phy_mpll(struct imx6_pcie *imx6_pcie)
int mult, div; int mult, div;
u32 val; u32 val;
if (!(imx6_pcie->drvdata->flags & IMX6_PCIE_FLAG_IMX6_PHY))
return 0;
switch (phy_rate) { switch (phy_rate) {
case 125000000: case 125000000:
/* /*
...@@ -1090,12 +1099,15 @@ static void imx6_pcie_shutdown(struct platform_device *pdev) ...@@ -1090,12 +1099,15 @@ static void imx6_pcie_shutdown(struct platform_device *pdev)
static const struct imx6_pcie_drvdata drvdata[] = { static const struct imx6_pcie_drvdata drvdata[] = {
[IMX6Q] = { [IMX6Q] = {
.variant = IMX6Q, .variant = IMX6Q,
.flags = IMX6_PCIE_FLAG_IMX6_PHY,
}, },
[IMX6SX] = { [IMX6SX] = {
.variant = IMX6SX, .variant = IMX6SX,
.flags = IMX6_PCIE_FLAG_IMX6_PHY,
}, },
[IMX6QP] = { [IMX6QP] = {
.variant = IMX6QP, .variant = IMX6QP,
.flags = IMX6_PCIE_FLAG_IMX6_PHY,
}, },
[IMX7D] = { [IMX7D] = {
.variant = IMX7D, .variant = IMX7D,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment