Skip to content

Commit

Permalink
phy: miphy28lp: Tune tx impedance across Soc cuts
Browse files Browse the repository at this point in the history
This patch to compensate tx impedance (Sata, PCIe)
depending on Soc cuts the kernel is built for.

Signed-off-by: Giuseppe Condorelli <giuseppe.condorelli@st.com>
Signed-off-by: Gabriel Fernandez <gabriel.fernandez@linaro.org>
Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
  • Loading branch information
Gabriel FERNANDEZ authored and Kishon Vijay Abraham I committed Nov 12, 2014
1 parent a2108de commit 28ba384
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 0 deletions.
1 change: 1 addition & 0 deletions Documentation/devicetree/bindings/phy/phy-miphy28lp.txt
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ Optional properties (port (child) node):
- st,px_rx_pol_inv : to invert polarity of RXn/RXp (respectively negative line and positive
line).
- st,scc-on : enable ssc to reduce effects of EMI (only for sata or PCIe).
- st,tx-impedance-comp : to compensate tx impedance avoiding out of range values.

example:

Expand Down
16 changes: 16 additions & 0 deletions drivers/phy/phy-miphy28lp.c
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,7 @@ struct miphy28lp_phy {
bool osc_rdy;
bool px_rx_pol_inv;
bool ssc;
bool tx_impedance;

struct reset_control *miphy_rst;

Expand Down Expand Up @@ -632,6 +633,12 @@ static void miphy_pcie_tune_ssc(struct miphy28lp_phy *miphy_phy)
}
}

static inline void miphy_tune_tx_impedance(struct miphy28lp_phy *miphy_phy)
{
/* Compensate Tx impedance to avoid out of range values */
writeb_relaxed(0x02, miphy_phy->base + MIPHY_COMP_POSTP);
}

static inline int miphy28lp_configure_sata(struct miphy28lp_phy *miphy_phy)
{
void __iomem *base = miphy_phy->base;
Expand Down Expand Up @@ -670,6 +677,9 @@ static inline int miphy28lp_configure_sata(struct miphy28lp_phy *miphy_phy)
if (miphy_phy->ssc)
miphy_sata_tune_ssc(miphy_phy);

if (miphy_phy->tx_impedance)
miphy_tune_tx_impedance(miphy_phy);

return 0;
}

Expand Down Expand Up @@ -703,6 +713,9 @@ static inline int miphy28lp_configure_pcie(struct miphy28lp_phy *miphy_phy)
if (miphy_phy->ssc)
miphy_pcie_tune_ssc(miphy_phy);

if (miphy_phy->tx_impedance)
miphy_tune_tx_impedance(miphy_phy);

return 0;
}

Expand Down Expand Up @@ -1154,6 +1167,9 @@ static int miphy28lp_of_probe(struct device_node *np,

miphy_phy->ssc = of_property_read_bool(np, "st,ssc-on");

miphy_phy->tx_impedance =
of_property_read_bool(np, "st,tx-impedance-comp");

of_property_read_u32(np, "st,sata-gen", &miphy_phy->sata_gen);
if (!miphy_phy->sata_gen)
miphy_phy->sata_gen = SATA_GEN1;
Expand Down

0 comments on commit 28ba384

Please sign in to comment.