* [PATCH v6 0/2] Add support to handle ZRX-DC Compliant PHYs [not found] <CGME20191213131328epcas5p1c6bafae662369c8f8968f5265163d7ad@epcas5p1.samsung.com> @ 2019-12-13 13:13 ` Anvesh Salveru [not found] ` <CGME20191213131346epcas5p25cb64137229edda4411131576a017a67@epcas5p2.samsung.com> [not found] ` <CGME20191213131350epcas5p3c90ec8981639f488b65d8e09b098fa2b@epcas5p3.samsung.com> 0 siblings, 2 replies; 4+ messages in thread From: Anvesh Salveru @ 2019-12-13 13:13 UTC (permalink / raw) To: linux-kernel, linux-pci Cc: kishon, jingoohan1, gustavo.pimentel, lorenzo.pieralisi, andrew.murray, bhelgaas, pankaj.dubey, mark.rutland, robh+dt, Anvesh Salveru According the PCI Express base specification when PHY does not meet ZRX-DC specification, after every 100ms timeout the link should transition to recovery state when the link is in low power states. Ports that meet the ZRX-DC specification for 2.5 GT/s while in the L1.Idle state and are therefore not required to implement the 100 ms timeout and transition to Recovery should avoid implementing it, since it will reduce the power savings expected from the L1 state. DesignWare controller provides GEN3_ZRXDC_NONCOMPL field in GEN3_RELATED_OFF to specify about ZRX-DC compliant PHY. We need to get the PHY property in controller driver. So, we are proposing a new method phy_property_present() in the phy driver. PCIe controller platform drivers should populate the phy_zrxdc_compliant flag, which will be used by generic DesignWare driver. pci->phy_zrxdc_compliant = phy_property_present(xxxx_ctrl->phy, "phy-zrxdc-compliant"); Patchset v2 can be found at: - 1/2: https://lkml.org/lkml/2019/11/11/672 - 2/2: https://lkml.org/lkml/2019/10/28/285 Changes w.r.t v2: - Addressed review comments - Rebased on latest linus/master Changes w.r.t v3: - Added linux-pci@vger.kernel.org as pointed by Gustavo, Sorry for annoying. Changes w.r.t v4: - Addressed review comments from Andrew Murray - Rebased on latest linus/master Changes w.r.t v5: - Added check for NULL pointer Anvesh Salveru (2): phy: core: add phy_property_present method PCI: dwc: add support to handle ZRX-DC Compliant PHYs drivers/pci/controller/dwc/pcie-designware.c | 6 ++++++ drivers/pci/controller/dwc/pcie-designware.h | 4 ++++ drivers/phy/phy-core.c | 20 ++++++++++++++++++++ include/linux/phy/phy.h | 6 ++++++ 4 files changed, 36 insertions(+) -- 2.7.4 ^ permalink raw reply [flat|nested] 4+ messages in thread
[parent not found: <CGME20191213131346epcas5p25cb64137229edda4411131576a017a67@epcas5p2.samsung.com>]
* [PATCH v6 1/2] phy: core: add phy_property_present method [not found] ` <CGME20191213131346epcas5p25cb64137229edda4411131576a017a67@epcas5p2.samsung.com> @ 2019-12-13 13:13 ` Anvesh Salveru 0 siblings, 0 replies; 4+ messages in thread From: Anvesh Salveru @ 2019-12-13 13:13 UTC (permalink / raw) To: linux-kernel, linux-pci Cc: kishon, jingoohan1, gustavo.pimentel, lorenzo.pieralisi, andrew.murray, bhelgaas, pankaj.dubey, mark.rutland, robh+dt, Anvesh Salveru In some platforms, we need information of phy properties in the controller drivers. This patch adds a new phy_property_present() method which can be used to check if some property exists in PHY or not. In case of DesignWare PCIe controller, we need to write into controller register to specify about ZRX-DC compliance property of the PHY, which reduces the power consumption during lower power states. Signed-off-by: Anvesh Salveru <anvesh.s@samsung.com> Signed-off-by: Pankaj Dubey <pankaj.dubey@samsung.com> --- Changes w.r.t v5: - Added check for NULL pointer drivers/phy/phy-core.c | 20 ++++++++++++++++++++ include/linux/phy/phy.h | 6 ++++++ 2 files changed, 26 insertions(+) diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c index b04f4fe..16b19aa 100644 --- a/drivers/phy/phy-core.c +++ b/drivers/phy/phy-core.c @@ -420,6 +420,26 @@ int phy_calibrate(struct phy *phy) EXPORT_SYMBOL_GPL(phy_calibrate); /** + * phy_property_present() - checks if the property is present in PHY + * @phy: the phy returned by phy_get() + * @property: name of the property to check + * + * Used to check if the given property is present in PHY. + * Searches for the given property in the phy device tree + * node. + * + * Returns: true if property exists, false otherwise + */ +bool phy_property_present(struct phy *phy, const char *property) +{ + if (!phy) + return false; + + return of_property_read_bool(phy->dev.of_node, property); +} +EXPORT_SYMBOL_GPL(phy_property_present); + +/** * phy_configure() - Changes the phy parameters * @phy: the phy returned by phy_get() * @opts: New configuration to apply diff --git a/include/linux/phy/phy.h b/include/linux/phy/phy.h index 56d3a10..9d8240d 100644 --- a/include/linux/phy/phy.h +++ b/include/linux/phy/phy.h @@ -218,6 +218,7 @@ static inline enum phy_mode phy_get_mode(struct phy *phy) } int phy_reset(struct phy *phy); int phy_calibrate(struct phy *phy); +bool phy_property_present(struct phy *phy, const char *property); static inline int phy_get_bus_width(struct phy *phy) { return phy->attrs.bus_width; @@ -355,6 +356,11 @@ static inline int phy_calibrate(struct phy *phy) return -ENOSYS; } +static inline bool phy_property_present(struct phy *phy, const char *property) +{ + return false; +} + static inline int phy_configure(struct phy *phy, union phy_configure_opts *opts) { -- 2.7.4 ^ permalink raw reply related [flat|nested] 4+ messages in thread
[parent not found: <CGME20191213131350epcas5p3c90ec8981639f488b65d8e09b098fa2b@epcas5p3.samsung.com>]
* [PATCH v6 2/2] PCI: dwc: add support to handle ZRX-DC Compliant PHYs [not found] ` <CGME20191213131350epcas5p3c90ec8981639f488b65d8e09b098fa2b@epcas5p3.samsung.com> @ 2019-12-13 13:13 ` Anvesh Salveru 2019-12-16 10:48 ` Andrew Murray 0 siblings, 1 reply; 4+ messages in thread From: Anvesh Salveru @ 2019-12-13 13:13 UTC (permalink / raw) To: linux-kernel, linux-pci Cc: kishon, jingoohan1, gustavo.pimentel, lorenzo.pieralisi, andrew.murray, bhelgaas, pankaj.dubey, mark.rutland, robh+dt, Anvesh Salveru Many platforms use DesignWare controller but the PHY can be different in different platforms. If the PHY is compliant is to ZRX-DC specification it helps in low power consumption during power states. If current data rate is 8.0 GT/s or higher and PHY is not compliant to ZRX-DC specification, then after every 100ms link should transition to recovery state during the low power states. DesignWare controller provides GEN3_ZRXDC_NONCOMPL field in GEN3_RELATED_OFF to specify about ZRX-DC compliant PHY. Platforms with ZRX-DC compliant PHY can set phy_zrxdc_compliant variable to specify this property to the controller. Signed-off-by: Anvesh Salveru <anvesh.s@samsung.com> Signed-off-by: Pankaj Dubey <pankaj.dubey@samsung.com> --- Changes w.r.t v5: - None drivers/pci/controller/dwc/pcie-designware.c | 6 ++++++ drivers/pci/controller/dwc/pcie-designware.h | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/drivers/pci/controller/dwc/pcie-designware.c b/drivers/pci/controller/dwc/pcie-designware.c index 820488d..36a01b7 100644 --- a/drivers/pci/controller/dwc/pcie-designware.c +++ b/drivers/pci/controller/dwc/pcie-designware.c @@ -556,4 +556,10 @@ void dw_pcie_setup(struct dw_pcie *pci) PCIE_PL_CHK_REG_CHK_REG_START; dw_pcie_writel_dbi(pci, PCIE_PL_CHK_REG_CONTROL_STATUS, val); } + + if (pci->phy_zrxdc_compliant) { + val = dw_pcie_readl_dbi(pci, PCIE_PORT_GEN3_RELATED); + val &= ~PORT_LOGIC_GEN3_ZRXDC_NONCOMPL; + dw_pcie_writel_dbi(pci, PCIE_PORT_GEN3_RELATED, val); + } } diff --git a/drivers/pci/controller/dwc/pcie-designware.h b/drivers/pci/controller/dwc/pcie-designware.h index 5accdd6..36f7579 100644 --- a/drivers/pci/controller/dwc/pcie-designware.h +++ b/drivers/pci/controller/dwc/pcie-designware.h @@ -60,6 +60,9 @@ #define PCIE_MSI_INTR0_MASK 0x82C #define PCIE_MSI_INTR0_STATUS 0x830 +#define PCIE_PORT_GEN3_RELATED 0x890 +#define PORT_LOGIC_GEN3_ZRXDC_NONCOMPL BIT(0) + #define PCIE_ATU_VIEWPORT 0x900 #define PCIE_ATU_REGION_INBOUND BIT(31) #define PCIE_ATU_REGION_OUTBOUND 0 @@ -249,6 +252,7 @@ struct dw_pcie { void __iomem *atu_base; u32 num_viewport; u8 iatu_unroll_enabled; + bool phy_zrxdc_compliant; struct pcie_port pp; struct dw_pcie_ep ep; const struct dw_pcie_ops *ops; -- 2.7.4 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v6 2/2] PCI: dwc: add support to handle ZRX-DC Compliant PHYs 2019-12-13 13:13 ` [PATCH v6 2/2] PCI: dwc: add support to handle ZRX-DC Compliant PHYs Anvesh Salveru @ 2019-12-16 10:48 ` Andrew Murray 0 siblings, 0 replies; 4+ messages in thread From: Andrew Murray @ 2019-12-16 10:48 UTC (permalink / raw) To: Anvesh Salveru Cc: linux-kernel, linux-pci, kishon, jingoohan1, gustavo.pimentel, lorenzo.pieralisi, bhelgaas, pankaj.dubey, mark.rutland, robh+dt On Fri, Dec 13, 2019 at 06:43:20PM +0530, Anvesh Salveru wrote: > Many platforms use DesignWare controller but the PHY can be different in > different platforms. If the PHY is compliant is to ZRX-DC specification > it helps in low power consumption during power states. > > If current data rate is 8.0 GT/s or higher and PHY is not compliant to > ZRX-DC specification, then after every 100ms link should transition to > recovery state during the low power states. > > DesignWare controller provides GEN3_ZRXDC_NONCOMPL field in > GEN3_RELATED_OFF to specify about ZRX-DC compliant PHY. > > Platforms with ZRX-DC compliant PHY can set phy_zrxdc_compliant variable > to specify this property to the controller. > > Signed-off-by: Anvesh Salveru <anvesh.s@samsung.com> > Signed-off-by: Pankaj Dubey <pankaj.dubey@samsung.com> > --- > Changes w.r.t v5: > - None > > drivers/pci/controller/dwc/pcie-designware.c | 6 ++++++ > drivers/pci/controller/dwc/pcie-designware.h | 4 ++++ > 2 files changed, 10 insertions(+) > > diff --git a/drivers/pci/controller/dwc/pcie-designware.c b/drivers/pci/controller/dwc/pcie-designware.c > index 820488d..36a01b7 100644 > --- a/drivers/pci/controller/dwc/pcie-designware.c > +++ b/drivers/pci/controller/dwc/pcie-designware.c > @@ -556,4 +556,10 @@ void dw_pcie_setup(struct dw_pcie *pci) > PCIE_PL_CHK_REG_CHK_REG_START; > dw_pcie_writel_dbi(pci, PCIE_PL_CHK_REG_CONTROL_STATUS, val); > } > + > + if (pci->phy_zrxdc_compliant) { This series doesn't update any DWC drivers to actually test and set the phy_zrxdc_compliant flag. There isn't good justification for merging this unless it has a user. Thanks, Andrew Murray > + val = dw_pcie_readl_dbi(pci, PCIE_PORT_GEN3_RELATED); > + val &= ~PORT_LOGIC_GEN3_ZRXDC_NONCOMPL; > + dw_pcie_writel_dbi(pci, PCIE_PORT_GEN3_RELATED, val); > + } > } > diff --git a/drivers/pci/controller/dwc/pcie-designware.h b/drivers/pci/controller/dwc/pcie-designware.h > index 5accdd6..36f7579 100644 > --- a/drivers/pci/controller/dwc/pcie-designware.h > +++ b/drivers/pci/controller/dwc/pcie-designware.h > @@ -60,6 +60,9 @@ > #define PCIE_MSI_INTR0_MASK 0x82C > #define PCIE_MSI_INTR0_STATUS 0x830 > > +#define PCIE_PORT_GEN3_RELATED 0x890 > +#define PORT_LOGIC_GEN3_ZRXDC_NONCOMPL BIT(0) > + > #define PCIE_ATU_VIEWPORT 0x900 > #define PCIE_ATU_REGION_INBOUND BIT(31) > #define PCIE_ATU_REGION_OUTBOUND 0 > @@ -249,6 +252,7 @@ struct dw_pcie { > void __iomem *atu_base; > u32 num_viewport; > u8 iatu_unroll_enabled; > + bool phy_zrxdc_compliant; > struct pcie_port pp; > struct dw_pcie_ep ep; > const struct dw_pcie_ops *ops; > -- > 2.7.4 > ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2019-12-16 10:48 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <CGME20191213131328epcas5p1c6bafae662369c8f8968f5265163d7ad@epcas5p1.samsung.com> 2019-12-13 13:13 ` [PATCH v6 0/2] Add support to handle ZRX-DC Compliant PHYs Anvesh Salveru [not found] ` <CGME20191213131346epcas5p25cb64137229edda4411131576a017a67@epcas5p2.samsung.com> 2019-12-13 13:13 ` [PATCH v6 1/2] phy: core: add phy_property_present method Anvesh Salveru [not found] ` <CGME20191213131350epcas5p3c90ec8981639f488b65d8e09b098fa2b@epcas5p3.samsung.com> 2019-12-13 13:13 ` [PATCH v6 2/2] PCI: dwc: add support to handle ZRX-DC Compliant PHYs Anvesh Salveru 2019-12-16 10:48 ` Andrew Murray
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).