From: Thierry Reding <thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
To: Manikanta Maddireddy
<mmaddireddy-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
Cc: bhelgaas-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org,
jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org,
vidyas-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org,
mperttunen-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org,
linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-pci-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
kthota-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org
Subject: Re: [PATCH V3 05/12] PCI: tegra: Program UPHY electrical settings in Tegra210
Date: Thu, 14 Dec 2017 16:28:34 +0100 [thread overview]
Message-ID: <20171214152834.GE13733@ulmo> (raw)
In-Reply-To: <1509371843-22931-6-git-send-email-mmaddireddy-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
[-- Attachment #1: Type: text/plain, Size: 5367 bytes --]
On Mon, Oct 30, 2017 at 07:27:16PM +0530, Manikanta Maddireddy wrote:
> UPHY electrical programming guidelines are documented in Tegra210 TRM.
> Program these electrical settings for proper eye diagram in all link
> speeds.
>
> Signed-off-by: Manikanta Maddireddy <mmaddireddy-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
> ---
> V3:
> * Added shift operation for readability
> V2:
> * no change in this patch
>
> drivers/pci/host/pci-tegra.c | 97 ++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 97 insertions(+)
>
> diff --git a/drivers/pci/host/pci-tegra.c b/drivers/pci/host/pci-tegra.c
> index 46896aaab81d..c862facfd6e9 100644
> --- a/drivers/pci/host/pci-tegra.c
> +++ b/drivers/pci/host/pci-tegra.c
> @@ -184,6 +184,32 @@
>
> #define AFI_PEXBIAS_CTRL_0 0x168
>
> +#define RP_ECTL_2_R1 0xe84
> +#define RP_ECTL_2_R1_RX_CTLE_1C_MASK 0xffff
> +
> +#define RP_ECTL_4_R1 0xe8c
> +#define RP_ECTL_4_R1_RX_CDR_CTRL_1C_MASK (0xffff << 16)
> +#define RP_ECTL_4_R1_RX_CDR_CTRL_1C_SHIFT 16
> +
> +#define RP_ECTL_5_R1 0xe90
> +#define RP_ECTL_5_R1_RX_EQ_CTRL_L_1C_MASK 0xffffffff
> +
> +#define RP_ECTL_6_R1 0xe94
> +#define RP_ECTL_6_R1_RX_EQ_CTRL_H_1C_MASK 0xffffffff
> +
> +#define RP_ECTL_2_R2 0xea4
> +#define RP_ECTL_2_R2_RX_CTLE_1C_MASK 0xffff
> +
> +#define RP_ECTL_4_R2 0xeac
> +#define RP_ECTL_4_R2_RX_CDR_CTRL_1C_MASK (0xffff << 16)
> +#define RP_ECTL_4_R2_RX_CDR_CTRL_1C_SHIFT 16
> +
> +#define RP_ECTL_5_R2 0xeb0
> +#define RP_ECTL_5_R2_RX_EQ_CTRL_L_1C_MASK 0xffffffff
> +
> +#define RP_ECTL_6_R2 0xeb4
> +#define RP_ECTL_6_R2_RX_EQ_CTRL_H_1C_MASK 0xffffffff
> +
> #define RP_VEND_XP 0x00000f00
> #define RP_VEND_XP_DL_UP (1 << 30)
>
> @@ -254,6 +280,14 @@ struct tegra_pcie_soc {
> u32 tx_ref_sel;
> u32 pads_refclk_cfg0;
> u32 pads_refclk_cfg1;
> + u32 rp_ectl_2_r1;
> + u32 rp_ectl_4_r1;
> + u32 rp_ectl_5_r1;
> + u32 rp_ectl_6_r1;
> + u32 rp_ectl_2_r2;
> + u32 rp_ectl_4_r2;
> + u32 rp_ectl_5_r2;
> + u32 rp_ectl_6_r2;
> bool has_pex_clkreq_en;
> bool has_pex_bias_ctrl;
> bool has_intr_prsnt_sense;
> @@ -261,6 +295,7 @@ struct tegra_pcie_soc {
> bool has_gen2;
> bool force_pca_enable;
> bool program_uphy;
> + bool program_ectl_settings;
Could you move all of the ECTL related fields under a substructure for
better readability? Something like:
struct {
struct {
u32 ...;
...
} regs;
bool enable;
} ectl;
> };
>
> static inline struct tegra_msi *to_tegra_msi(struct msi_controller *chip)
> @@ -2058,6 +2093,52 @@ static void tegra_pcie_apply_pad_settings(struct tegra_pcie *pcie)
> pads_writel(pcie, soc->pads_refclk_cfg1, PADS_REFCLK_CFG1);
> }
>
> +static void tegra_pcie_program_ectl_settings(struct tegra_pcie_port *port)
> +{
> + unsigned long value;
u32, please.
> + const struct tegra_pcie_soc *soc = port->pcie->soc;
> +
> + value = readl(port->base + RP_ECTL_2_R1);
> + value &= ~RP_ECTL_2_R1_RX_CTLE_1C_MASK;
> + value |= soc->rp_ectl_2_r1;
> + writel(value, port->base + RP_ECTL_2_R1);
> +
> + value = readl(port->base + RP_ECTL_4_R1);
> + value &= ~RP_ECTL_4_R1_RX_CDR_CTRL_1C_MASK;
> + value |= (soc->rp_ectl_4_r1 << RP_ECTL_4_R1_RX_CDR_CTRL_1C_SHIFT);
> + writel(value, port->base + RP_ECTL_4_R1);
> +
> + value = readl(port->base + RP_ECTL_5_R1);
> + value &= ~RP_ECTL_5_R1_RX_EQ_CTRL_L_1C_MASK;
> + value |= soc->rp_ectl_5_r1;
> + writel(value, port->base + RP_ECTL_5_R1);
> +
> + value = readl(port->base + RP_ECTL_6_R1);
> + value &= ~RP_ECTL_6_R1_RX_EQ_CTRL_H_1C_MASK;
> + value |= soc->rp_ectl_6_r1;
> + writel(value, port->base + RP_ECTL_6_R1);
> +
> + value = readl(port->base + RP_ECTL_2_R2);
> + value &= ~RP_ECTL_2_R2_RX_CTLE_1C_MASK;
> + value |= soc->rp_ectl_2_r2;
> + writel(value, port->base + RP_ECTL_2_R2);
> +
> + value = readl(port->base + RP_ECTL_4_R2);
> + value &= ~RP_ECTL_4_R2_RX_CDR_CTRL_1C_MASK;
> + value |= (soc->rp_ectl_4_r2 << RP_ECTL_4_R2_RX_CDR_CTRL_1C_SHIFT);
> + writel(value, port->base + RP_ECTL_4_R2);
> +
> + value = readl(port->base + RP_ECTL_5_R2);
> + value &= ~RP_ECTL_5_R2_RX_EQ_CTRL_L_1C_MASK;
> + value |= soc->rp_ectl_5_r2;
> + writel(value, port->base + RP_ECTL_5_R2);
> +
> + value = readl(port->base + RP_ECTL_6_R2);
> + value &= ~RP_ECTL_6_R2_RX_EQ_CTRL_H_1C_MASK;
> + value |= soc->rp_ectl_6_r2;
> + writel(value, port->base + RP_ECTL_6_R2);
> +}
> +
> static void tegra_pcie_enable_rp_features(struct tegra_pcie_port *port)
> {
> unsigned long value;
> @@ -2125,6 +2206,7 @@ static void tegra_pcie_enable_ports(struct tegra_pcie *pcie)
> {
> struct device *dev = pcie->dev;
> struct tegra_pcie_port *port, *tmp;
> + const struct tegra_pcie_soc *soc = pcie->soc;
>
> tegra_pcie_apply_pad_settings(pcie);
>
> @@ -2133,6 +2215,8 @@ static void tegra_pcie_enable_ports(struct tegra_pcie *pcie)
> port->index, port->lanes);
>
> tegra_pcie_port_enable(port);
> + if (soc->program_ectl_settings)
> + tegra_pcie_program_ectl_settings(port);
Perhaps this should be moved into tegra_pcie_port_enable()? That way the
programming is done in one central location. If ever we need to enable
the ports from somewhere else we could simply call it instead of having
to duplicate enabling all the extra features.
Thierry
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
next prev parent reply other threads:[~2017-12-14 15:28 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-10-30 13:57 [PATCH V3 00/12] Enable Tegra root port features and apply SW fixups Manikanta Maddireddy
2017-10-30 13:57 ` [PATCH V3 01/12] PCI: tegra: Start LTSSM after programming root port Manikanta Maddireddy
[not found] ` <1509371843-22931-2-git-send-email-mmaddireddy-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2017-12-12 11:32 ` Lorenzo Pieralisi
[not found] ` <20171212113248.GA30799-4tUPXFaYRHv6sAKXYmQ0tx/iLCjYCKR+VpNB7YpNyf8@public.gmane.org>
2017-12-13 11:50 ` Manikanta Maddireddy
[not found] ` <7d3396dc-b133-5645-24da-a20fd9db6286-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2017-12-13 14:08 ` Lorenzo Pieralisi
2017-12-13 16:32 ` Manikanta Maddireddy
[not found] ` <b72dda91-5307-f024-9810-d6abadf7f337-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2017-12-13 18:34 ` Lorenzo Pieralisi
2017-12-13 19:27 ` Manikanta Maddireddy
[not found] ` <a9bc0f46-69e1-d7ca-8cd3-e54259c4a92d-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2017-12-14 9:57 ` Lorenzo Pieralisi
2017-10-30 13:57 ` [PATCH V3 08/12] PCI: tegra: Wait for DLLP to finish before entering L1 or L2 Manikanta Maddireddy
[not found] ` <1509371843-22931-9-git-send-email-mmaddireddy-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2017-12-14 15:34 ` Thierry Reding
2017-10-30 13:57 ` [PATCH V3 12/12] PCI: tegra: Update flow control threshold in Tegra210 Manikanta Maddireddy
[not found] ` <1509371843-22931-13-git-send-email-mmaddireddy-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2017-12-12 17:43 ` Lorenzo Pieralisi
2017-12-14 16:13 ` Thierry Reding
2017-12-14 16:14 ` Thierry Reding
[not found] ` <1509371843-22931-1-git-send-email-mmaddireddy-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2017-10-30 13:57 ` [PATCH V3 02/12] PCI: tegra: Move REFCLK pad settings out of phy_power_on() Manikanta Maddireddy
[not found] ` <1509371843-22931-3-git-send-email-mmaddireddy-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2017-12-12 11:45 ` Lorenzo Pieralisi
[not found] ` <20171212114527.GB30799-4tUPXFaYRHv6sAKXYmQ0tx/iLCjYCKR+VpNB7YpNyf8@public.gmane.org>
2017-12-13 12:02 ` Manikanta Maddireddy
2017-12-13 14:23 ` Lorenzo Pieralisi
2017-12-13 1:16 ` Mikko Perttunen
2017-12-14 15:14 ` Thierry Reding
2017-12-19 12:40 ` Lorenzo Pieralisi
2017-10-30 13:57 ` [PATCH V3 03/12] PCI: tegra: Retrain link for Gen2 speed Manikanta Maddireddy
[not found] ` <1509371843-22931-4-git-send-email-mmaddireddy-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2017-12-12 14:32 ` Lorenzo Pieralisi
[not found] ` <20171212143201.GC30799-4tUPXFaYRHv6sAKXYmQ0tx/iLCjYCKR+VpNB7YpNyf8@public.gmane.org>
2017-12-13 17:54 ` Manikanta Maddireddy
[not found] ` <bc949c6d-1947-164f-d1f4-2e9e77be56d9-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2017-12-13 18:51 ` Lorenzo Pieralisi
2017-12-13 19:10 ` Bjorn Helgaas
2017-12-21 19:48 ` Ley Foon Tan
2017-10-30 13:57 ` [PATCH V3 04/12] PCI: tegra: Advertise PCIe Advanced Error Reporting (AER) capability Manikanta Maddireddy
[not found] ` <1509371843-22931-5-git-send-email-mmaddireddy-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2017-12-14 15:29 ` Thierry Reding
2017-10-30 13:57 ` [PATCH V3 05/12] PCI: tegra: Program UPHY electrical settings in Tegra210 Manikanta Maddireddy
[not found] ` <1509371843-22931-6-git-send-email-mmaddireddy-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2017-12-14 15:28 ` Thierry Reding [this message]
2017-10-30 13:57 ` [PATCH V3 06/12] PCI: tegra: Enable opportunistic update FC and ACK Manikanta Maddireddy
[not found] ` <1509371843-22931-7-git-send-email-mmaddireddy-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2017-12-14 15:30 ` Thierry Reding
2017-10-30 13:57 ` [PATCH V3 07/12] PCI: tegra: Disable AFI dynamic clock gating Manikanta Maddireddy
[not found] ` <1509371843-22931-8-git-send-email-mmaddireddy-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2017-12-14 15:32 ` Thierry Reding
2017-10-30 13:57 ` [PATCH V3 09/12] PCI: tegra: Enable PCIe xclk clock clamping Manikanta Maddireddy
[not found] ` <1509371843-22931-10-git-send-email-mmaddireddy-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2017-12-14 15:58 ` Thierry Reding
2017-10-30 13:57 ` [PATCH V3 10/12] PCI: tegra: Add SW fixup for RAW violations Manikanta Maddireddy
[not found] ` <1509371843-22931-11-git-send-email-mmaddireddy-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2017-12-14 16:00 ` Thierry Reding
2017-10-30 13:57 ` [PATCH V3 11/12] PCI: tegra: Increase the deskew retry time Manikanta Maddireddy
2017-12-14 16:02 ` Thierry Reding
2017-11-25 19:59 ` [PATCH V3 00/12] Enable Tegra root port features and apply SW fixups Manikanta Maddireddy
[not found] ` <912eb378-2b12-0474-8c33-34113d23476b-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2017-11-27 18:09 ` Lorenzo Pieralisi
2017-11-27 18:27 ` Manikanta Maddireddy
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=20171214152834.GE13733@ulmo \
--to=thierry.reding-re5jqeeqqe8avxtiumwx3w@public.gmane.org \
--cc=bhelgaas-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org \
--cc=jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org \
--cc=kthota-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org \
--cc=linux-pci-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=mmaddireddy-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org \
--cc=mperttunen-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org \
--cc=vidyas-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;
as well as URLs for NNTP newsgroup(s).