s/PCI: tegra: fixups to avoid unnecessary .../ /PCI: tegra: <Capitalized verb> .../ On Sun, Nov 12, 2017 at 06:47:53PM +0530, Vidya Sagar wrote: > sets CLKREQ asserted delay to a higher value to avoid > unnecessary wake up from L1.2_ENTRY state for Tegra210 "L1.2.Entry" to match the spec sec 5.5.3.1 (at least I assume that's what this refers to). > Signed-off-by: Vidya Sagar <vidyas@xxxxxxxxxx> > --- > V2: > * no change in this patch > > V3: > * no change in this patch > > drivers/pci/host/pci-tegra.c | 18 ++++++++++++++++++ > 1 file changed, 18 insertions(+) > > diff --git a/drivers/pci/host/pci-tegra.c b/drivers/pci/host/pci-tegra.c > index 6d68f49f152e..29ee4bb0b7c6 100644 > --- a/drivers/pci/host/pci-tegra.c > +++ b/drivers/pci/host/pci-tegra.c > @@ -204,6 +204,8 @@ > #define RP_L1_PM_SUBSTATES_1_CTL 0xC04 > #define RP_L1_PM_SUBSTATES_1_CTL_PWR_OFF_DLY_MASK 0x1FFF > #define RP_L1_PM_SUBSTATES_1_CTL_PWR_OFF_DLY 0x26 > +#define RP_L1SS_1_CTL_CLKREQ_ASSERTED_DLY_MASK (0x1FF << 13) > +#define RP_L1SS_1_CTL_CLKREQ_ASSERTED_DLY (0x27 << 13) > > #define RP_L1_PM_SUBSTATES_2_CTL 0xC08 > #define RP_L1_PM_SUBSTATES_2_CTL_T_L1_2_DLY_MASK 0x1FFF > @@ -350,6 +352,7 @@ struct tegra_pcie_soc { > bool program_deskew_time; > bool updateFC_threshold; > bool has_aspm_l1ss; > + bool l1ss_rp_wake_fixup; > }; > > static inline struct tegra_msi *to_tegra_msi(struct msi_controller *chip) > @@ -2290,6 +2293,16 @@ static void tegra_pcie_apply_sw_fixup(struct tegra_pcie_port *port) > (7 << RP_L1_PM_SUBSTATES_CTL_T_PWRN_VAL_SHIFT); > writel(value, port->base + RP_L1_PM_SUBSTATES_CTL); > > + if (soc->l1ss_rp_wake_fixup) { > + /* Set CLKREQ asserted delay greater than Power_Off > + * time (2us) to avoid RP wakeup in L1.2_ENTRY > + */ Use standard multi-line comment formatting (and "L1.2.Entry" as above). I assume "CLKREQ asserted delay" is a Tegra-internal thing, since it doesn't obviously correspond to a timing parameter in the spec. And I assume it doesn't depend on any of the OS-writable things in the L1 PM Substates control registers, since this fixup isn't executed during config writes to those registers? Does this depend on any circuit details outside of Tegra, i.e., should it be described via DT? > + value = readl(port->base + RP_L1_PM_SUBSTATES_1_CTL); > + value &= ~RP_L1SS_1_CTL_CLKREQ_ASSERTED_DLY_MASK; > + value |= RP_L1SS_1_CTL_CLKREQ_ASSERTED_DLY; > + writel(value, port->base + RP_L1_PM_SUBSTATES_1_CTL); > + } > + > /* Following is based on clk_m being 19.2 MHz */ > value = readl(port->base + RP_L1_PM_SUBSTATES_1_CTL); > value &= ~RP_L1_PM_SUBSTATES_1_CTL_PWR_OFF_DLY_MASK; > @@ -2446,6 +2459,7 @@ static const struct tegra_pcie_soc tegra20_pcie = { > .program_deskew_time = false, > .updateFC_threshold = false, > .has_aspm_l1ss = false, > + .l1ss_rp_wake_fixup = false, > }; > > static const struct tegra_pcie_soc tegra30_pcie = { > @@ -2468,6 +2482,7 @@ static const struct tegra_pcie_soc tegra30_pcie = { > .program_deskew_time = false, > .updateFC_threshold = false, > .has_aspm_l1ss = false, > + .l1ss_rp_wake_fixup = false, > }; > > static const struct tegra_pcie_soc tegra124_pcie = { > @@ -2489,6 +2504,7 @@ static const struct tegra_pcie_soc tegra124_pcie = { > .program_deskew_time = false, > .updateFC_threshold = false, > .has_aspm_l1ss = false, > + .l1ss_rp_wake_fixup = false, > }; > > static const struct tegra_pcie_soc tegra210_pcie = { > @@ -2518,6 +2534,7 @@ static const struct tegra_pcie_soc tegra210_pcie = { > .program_deskew_time = true, > .updateFC_threshold = true, > .has_aspm_l1ss = true, > + .l1ss_rp_wake_fixup = true, > }; > > static const struct tegra_pcie_soc tegra186_pcie = { > @@ -2540,6 +2557,7 @@ static const struct tegra_pcie_soc tegra186_pcie = { > .program_deskew_time = false, > .updateFC_threshold = false, > .has_aspm_l1ss = true, > + .l1ss_rp_wake_fixup = false, > }; > > static const struct of_device_id tegra_pcie_of_match[] = { > -- > 2.7.4 > -- To unsubscribe from this list: send the line "unsubscribe linux-tegra" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html