* [PATCH v5 1/6] phy: add A3700 UTMI PHY driver
2019-01-29 9:36 [PATCH v5 0/6] A3700 USB UTMI PHY support Miquel Raynal
@ 2019-01-29 9:36 ` Miquel Raynal
2019-01-29 9:36 ` [PATCH v5 2/6] dt-bindings: phy: mvebu-utmi: add UTMI PHY bindings Miquel Raynal
` (5 subsequent siblings)
6 siblings, 0 replies; 11+ messages in thread
From: Miquel Raynal @ 2019-01-29 9:36 UTC (permalink / raw)
To: Kishon Vijay Abraham I, Rob Herring, Mark Rutland,
Gregory Clement, Jason Cooper, Andrew Lunn, Sebastian Hesselbarth
Cc: devicetree, Antoine Tenart, Maxime Chevallier, Nadav Haklai,
Igal Liberman, Thomas Petazzoni, Miquel Raynal, linux-arm-kernel
Marvell Armada 3700 SoC has two USB controllers, each of them being
wired to an internal UTMI PHY. Add a driver to control them.
Igal Liberman worked on supporting the PHY, I took the while 'register
configuration' from his work and rewrote almost entirely the
driver/bindings around it.
Co-developed-by: Igal Liberman <igall@marvell.com>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Signed-off-by: Igal Liberman <igall@marvell.com>
---
drivers/phy/marvell/Kconfig | 9 +
drivers/phy/marvell/Makefile | 1 +
drivers/phy/marvell/phy-mvebu-a3700-utmi.c | 278 +++++++++++++++++++++
3 files changed, 288 insertions(+)
create mode 100644 drivers/phy/marvell/phy-mvebu-a3700-utmi.c
diff --git a/drivers/phy/marvell/Kconfig b/drivers/phy/marvell/Kconfig
index 9c90c0408ea3..b8e9dd38ad0d 100644
--- a/drivers/phy/marvell/Kconfig
+++ b/drivers/phy/marvell/Kconfig
@@ -33,6 +33,15 @@ config PHY_MVEBU_A3700_COMPHY
shared serdes PHYs on Marvell Armada 3700. Its serdes lanes can be
used by various controllers: Ethernet, SATA, USB3, PCIe.
+config PHY_MVEBU_A3700_UTMI
+ tristate "Marvell A3700 UTMI driver"
+ depends on ARCH_MVEBU || COMPILE_TEST
+ depends on OF
+ default y
+ select GENERIC_PHY
+ help
+ Enable this to support Marvell A3700 UTMI PHY driver.
+
config PHY_MVEBU_CP110_COMPHY
tristate "Marvell CP110 comphy driver"
depends on ARCH_MVEBU || COMPILE_TEST
diff --git a/drivers/phy/marvell/Makefile b/drivers/phy/marvell/Makefile
index c13a0c8ab6f0..82f291cf59ee 100644
--- a/drivers/phy/marvell/Makefile
+++ b/drivers/phy/marvell/Makefile
@@ -3,6 +3,7 @@ obj-$(CONFIG_ARMADA375_USBCLUSTER_PHY) += phy-armada375-usb2.o
obj-$(CONFIG_PHY_BERLIN_SATA) += phy-berlin-sata.o
obj-$(CONFIG_PHY_BERLIN_USB) += phy-berlin-usb.o
obj-$(CONFIG_PHY_MVEBU_A3700_COMPHY) += phy-mvebu-a3700-comphy.o
+obj-$(CONFIG_PHY_MVEBU_A3700_UTMI) += phy-mvebu-a3700-utmi.o
obj-$(CONFIG_PHY_MVEBU_CP110_COMPHY) += phy-mvebu-cp110-comphy.o
obj-$(CONFIG_PHY_MVEBU_SATA) += phy-mvebu-sata.o
obj-$(CONFIG_PHY_PXA_28NM_HSIC) += phy-pxa-28nm-hsic.o
diff --git a/drivers/phy/marvell/phy-mvebu-a3700-utmi.c b/drivers/phy/marvell/phy-mvebu-a3700-utmi.c
new file mode 100644
index 000000000000..94a29dea57af
--- /dev/null
+++ b/drivers/phy/marvell/phy-mvebu-a3700-utmi.c
@@ -0,0 +1,278 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2018 Marvell
+ *
+ * Authors:
+ * Igal Liberman <igall@marvell.com>
+ * Miquèl Raynal <miquel.raynal@bootlin.com>
+ *
+ * Marvell A3700 UTMI PHY driver
+ */
+
+#include <linux/io.h>
+#include <linux/iopoll.h>
+#include <linux/mfd/syscon.h>
+#include <linux/module.h>
+#include <linux/of_device.h>
+#include <linux/phy/phy.h>
+#include <linux/platform_device.h>
+#include <linux/regmap.h>
+
+/* Armada 3700 UTMI PHY registers */
+#define USB2_PHY_PLL_CTRL_REG0 0x0
+#define PLL_REF_DIV_OFF 0
+#define PLL_REF_DIV_MASK GENMASK(6, 0)
+#define PLL_REF_DIV_5 5
+#define PLL_FB_DIV_OFF 16
+#define PLL_FB_DIV_MASK GENMASK(24, 16)
+#define PLL_FB_DIV_96 96
+#define PLL_SEL_LPFR_OFF 28
+#define PLL_SEL_LPFR_MASK GENMASK(29, 28)
+#define PLL_READY BIT(31)
+#define USB2_PHY_CAL_CTRL 0x8
+#define PHY_PLLCAL_DONE BIT(31)
+#define PHY_IMPCAL_DONE BIT(23)
+#define USB2_RX_CHAN_CTRL1 0x18
+#define USB2PHY_SQCAL_DONE BIT(31)
+#define USB2_PHY_OTG_CTRL 0x34
+#define PHY_PU_OTG BIT(4)
+#define USB2_PHY_CHRGR_DETECT 0x38
+#define PHY_CDP_EN BIT(2)
+#define PHY_DCP_EN BIT(3)
+#define PHY_PD_EN BIT(4)
+#define PHY_PU_CHRG_DTC BIT(5)
+#define PHY_CDP_DM_AUTO BIT(7)
+#define PHY_ENSWITCH_DP BIT(12)
+#define PHY_ENSWITCH_DM BIT(13)
+
+/* Armada 3700 USB miscellaneous registers */
+#define USB2_PHY_CTRL(usb32) (usb32 ? 0x20 : 0x4)
+#define RB_USB2PHY_PU BIT(0)
+#define USB2_DP_PULLDN_DEV_MODE BIT(5)
+#define USB2_DM_PULLDN_DEV_MODE BIT(6)
+#define RB_USB2PHY_SUSPM(usb32) (usb32 ? BIT(14) : BIT(7))
+
+#define PLL_LOCK_DELAY_US 10000
+#define PLL_LOCK_TIMEOUT_US 1000000
+
+/**
+ * struct mvebu_a3700_utmi_caps - PHY capabilities
+ *
+ * @usb32: Flag indicating which PHY is in use (impacts the register map):
+ * - The UTMI PHY wired to the USB3/USB2 controller (otg)
+ * - The UTMI PHY wired to the USB2 controller (host only)
+ * @ops: PHY operations
+ */
+struct mvebu_a3700_utmi_caps {
+ int usb32;
+ const struct phy_ops *ops;
+};
+
+/**
+ * struct mvebu_a3700_utmi - PHY driver data
+ *
+ * @regs: PHY registers
+ * @usb_mis: Regmap with USB miscellaneous registers including PHY ones
+ * @caps: PHY capabilities
+ * @phy: PHY handle
+ */
+struct mvebu_a3700_utmi {
+ void __iomem *regs;
+ struct regmap *usb_misc;
+ const struct mvebu_a3700_utmi_caps *caps;
+ struct phy *phy;
+};
+
+static int mvebu_a3700_utmi_phy_power_on(struct phy *phy)
+{
+ struct mvebu_a3700_utmi *utmi = phy_get_drvdata(phy);
+ struct device *dev = &phy->dev;
+ int usb32 = utmi->caps->usb32;
+ int ret = 0;
+ u32 reg;
+
+ /*
+ * Setup PLL. 40MHz clock used to be the default, being 25MHz now.
+ * See "PLL Settings for Typical REFCLK" table.
+ */
+ reg = readl(utmi->regs + USB2_PHY_PLL_CTRL_REG0);
+ reg &= ~(PLL_REF_DIV_MASK | PLL_FB_DIV_MASK | PLL_SEL_LPFR_MASK);
+ reg |= (PLL_REF_DIV_5 << PLL_REF_DIV_OFF) |
+ (PLL_FB_DIV_96 << PLL_FB_DIV_OFF);
+ writel(reg, utmi->regs + USB2_PHY_PLL_CTRL_REG0);
+
+ /* Enable PHY pull up and disable USB2 suspend */
+ regmap_update_bits(utmi->usb_misc, USB2_PHY_CTRL(usb32),
+ RB_USB2PHY_SUSPM(usb32) | RB_USB2PHY_PU,
+ RB_USB2PHY_SUSPM(usb32) | RB_USB2PHY_PU);
+
+ if (usb32) {
+ /* Power up OTG module */
+ reg = readl(utmi->regs + USB2_PHY_OTG_CTRL);
+ reg |= PHY_PU_OTG;
+ writel(reg, utmi->regs + USB2_PHY_OTG_CTRL);
+
+ /* Disable PHY charger detection */
+ reg = readl(utmi->regs + USB2_PHY_CHRGR_DETECT);
+ reg &= ~(PHY_CDP_EN | PHY_DCP_EN | PHY_PD_EN | PHY_PU_CHRG_DTC |
+ PHY_CDP_DM_AUTO | PHY_ENSWITCH_DP | PHY_ENSWITCH_DM);
+ writel(reg, utmi->regs + USB2_PHY_CHRGR_DETECT);
+
+ /* Disable PHY DP/DM pull-down (used for device mode) */
+ regmap_update_bits(utmi->usb_misc, USB2_PHY_CTRL(usb32),
+ USB2_DP_PULLDN_DEV_MODE |
+ USB2_DM_PULLDN_DEV_MODE, 0);
+ }
+
+ /* Wait for PLL calibration */
+ ret = readl_poll_timeout(utmi->regs + USB2_PHY_CAL_CTRL, reg,
+ reg & PHY_PLLCAL_DONE,
+ PLL_LOCK_DELAY_US, PLL_LOCK_TIMEOUT_US);
+ if (ret) {
+ dev_err(dev, "Failed to end USB2 PLL calibration\n");
+ return ret;
+ }
+
+ /* Wait for impedance calibration */
+ ret = readl_poll_timeout(utmi->regs + USB2_PHY_CAL_CTRL, reg,
+ reg & PHY_IMPCAL_DONE,
+ PLL_LOCK_DELAY_US, PLL_LOCK_TIMEOUT_US);
+ if (ret) {
+ dev_err(dev, "Failed to end USB2 impedance calibration\n");
+ return ret;
+ }
+
+ /* Wait for squelch calibration */
+ ret = readl_poll_timeout(utmi->regs + USB2_RX_CHAN_CTRL1, reg,
+ reg & USB2PHY_SQCAL_DONE,
+ PLL_LOCK_DELAY_US, PLL_LOCK_TIMEOUT_US);
+ if (ret) {
+ dev_err(dev, "Failed to end USB2 unknown calibration\n");
+ return ret;
+ }
+
+ /* Wait for PLL to be locked */
+ ret = readl_poll_timeout(utmi->regs + USB2_PHY_PLL_CTRL_REG0, reg,
+ reg & PLL_READY,
+ PLL_LOCK_DELAY_US, PLL_LOCK_TIMEOUT_US);
+ if (ret)
+ dev_err(dev, "Failed to lock USB2 PLL\n");
+
+ return ret;
+}
+
+static int mvebu_a3700_utmi_phy_power_off(struct phy *phy)
+{
+ struct mvebu_a3700_utmi *utmi = phy_get_drvdata(phy);
+ int usb32 = utmi->caps->usb32;
+ u32 reg;
+
+ /* Disable PHY pull-up and enable USB2 suspend */
+ reg = readl(utmi->regs + USB2_PHY_CTRL(usb32));
+ reg &= ~(RB_USB2PHY_PU | RB_USB2PHY_SUSPM(usb32));
+ writel(reg, utmi->regs + USB2_PHY_CTRL(usb32));
+
+ /* Power down OTG module */
+ if (usb32) {
+ reg = readl(utmi->regs + USB2_PHY_OTG_CTRL);
+ reg &= ~PHY_PU_OTG;
+ writel(reg, utmi->regs + USB2_PHY_OTG_CTRL);
+ }
+
+ return 0;
+}
+
+static const struct phy_ops mvebu_a3700_utmi_phy_ops = {
+ .power_on = mvebu_a3700_utmi_phy_power_on,
+ .power_off = mvebu_a3700_utmi_phy_power_off,
+ .owner = THIS_MODULE,
+};
+
+static const struct mvebu_a3700_utmi_caps mvebu_a3700_utmi_otg_phy_caps = {
+ .usb32 = true,
+ .ops = &mvebu_a3700_utmi_phy_ops,
+};
+
+static const struct mvebu_a3700_utmi_caps mvebu_a3700_utmi_host_phy_caps = {
+ .usb32 = false,
+ .ops = &mvebu_a3700_utmi_phy_ops,
+};
+
+static const struct of_device_id mvebu_a3700_utmi_of_match[] = {
+ {
+ .compatible = "marvell,a3700-utmi-otg-phy",
+ .data = &mvebu_a3700_utmi_otg_phy_caps,
+ },
+ {
+ .compatible = "marvell,a3700-utmi-host-phy",
+ .data = &mvebu_a3700_utmi_host_phy_caps,
+ },
+ {},
+};
+MODULE_DEVICE_TABLE(of, mvebu_a3700_utmi_of_match);
+
+static int mvebu_a3700_utmi_phy_probe(struct platform_device *pdev)
+{
+ struct device *dev = &pdev->dev;
+ struct mvebu_a3700_utmi *utmi;
+ struct phy_provider *provider;
+ struct resource *res;
+
+ utmi = devm_kzalloc(dev, sizeof(*utmi), GFP_KERNEL);
+ if (!utmi)
+ return -ENOMEM;
+
+ /* Get UTMI memory region */
+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+ if (!res) {
+ dev_err(dev, "Missing UTMI PHY memory resource\n");
+ return -ENODEV;
+ }
+
+ utmi->regs = devm_ioremap_resource(dev, res);
+ if (IS_ERR(utmi->regs))
+ return PTR_ERR(utmi->regs);
+
+ /* Get miscellaneous Host/PHY region */
+ utmi->usb_misc = syscon_regmap_lookup_by_phandle(dev->of_node,
+ "marvell,usb-misc-reg");
+ if (IS_ERR(utmi->usb_misc)) {
+ dev_err(dev,
+ "Missing USB misc purpose system controller\n");
+ return PTR_ERR(utmi->usb_misc);
+ }
+
+ /* Retrieve PHY capabilities */
+ utmi->caps = of_device_get_match_data(dev);
+
+ /* Instantiate the PHY */
+ utmi->phy = devm_phy_create(dev, NULL, utmi->caps->ops);
+ if (IS_ERR(utmi->phy)) {
+ dev_err(dev, "Failed to create the UTMI PHY\n");
+ return PTR_ERR(utmi->phy);
+ }
+
+ phy_set_drvdata(utmi->phy, utmi);
+
+ /* Ensure the PHY is powered off */
+ utmi->caps->ops->power_off(utmi->phy);
+
+ provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate);
+
+ return PTR_ERR_OR_ZERO(provider);
+}
+
+static struct platform_driver mvebu_a3700_utmi_driver = {
+ .probe = mvebu_a3700_utmi_phy_probe,
+ .driver = {
+ .name = "mvebu-a3700-utmi-phy",
+ .owner = THIS_MODULE,
+ .of_match_table = mvebu_a3700_utmi_of_match,
+ },
+};
+module_platform_driver(mvebu_a3700_utmi_driver);
+
+MODULE_AUTHOR("Igal Liberman <igall@marvell.com>");
+MODULE_AUTHOR("Miquel Raynal <miquel.raynal@bootlin.com>");
+MODULE_DESCRIPTION("Marvell EBU A3700 UTMI PHY driver");
+MODULE_LICENSE("GPL v2");
--
2.19.1
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 11+ messages in thread* [PATCH v5 2/6] dt-bindings: phy: mvebu-utmi: add UTMI PHY bindings
2019-01-29 9:36 [PATCH v5 0/6] A3700 USB UTMI PHY support Miquel Raynal
2019-01-29 9:36 ` [PATCH v5 1/6] phy: add A3700 UTMI PHY driver Miquel Raynal
@ 2019-01-29 9:36 ` Miquel Raynal
2019-01-29 9:36 ` [PATCH v5 3/6] MAINTAINERS: phy: fill Armada 3700 PHY drivers entry Miquel Raynal
` (4 subsequent siblings)
6 siblings, 0 replies; 11+ messages in thread
From: Miquel Raynal @ 2019-01-29 9:36 UTC (permalink / raw)
To: Kishon Vijay Abraham I, Rob Herring, Mark Rutland,
Gregory Clement, Jason Cooper, Andrew Lunn, Sebastian Hesselbarth
Cc: devicetree, Antoine Tenart, Maxime Chevallier, Nadav Haklai,
Thomas Petazzoni, Miquel Raynal, linux-arm-kernel
Add bindings for Marvell Armada 3700 USB2 UTMI+ PHY.
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Reviewed-by: Rob Herring <robh@kernel.org>
---
.../bindings/phy/phy-mvebu-utmi.txt | 38 +++++++++++++++++++
1 file changed, 38 insertions(+)
create mode 100644 Documentation/devicetree/bindings/phy/phy-mvebu-utmi.txt
diff --git a/Documentation/devicetree/bindings/phy/phy-mvebu-utmi.txt b/Documentation/devicetree/bindings/phy/phy-mvebu-utmi.txt
new file mode 100644
index 000000000000..aa99ceec73b0
--- /dev/null
+++ b/Documentation/devicetree/bindings/phy/phy-mvebu-utmi.txt
@@ -0,0 +1,38 @@
+MVEBU A3700 UTMI PHY
+--------------------
+
+USB2 UTMI+ PHY controllers can be found on the following Marvell MVEBU SoCs:
+* Armada 3700
+
+On Armada 3700, there are two USB controllers, one is compatible with the USB2
+and USB3 specifications and supports OTG. The other one is USB2 compliant and
+only supports host mode. Both of these controllers come with a slightly
+different UTMI PHY.
+
+Required Properties:
+
+- compatible: Should be one of:
+ * "marvell,a3700-utmi-host-phy" for the PHY connected to
+ the USB2 host-only controller.
+ * "marvell,a3700-utmi-otg-phy" for the PHY connected to
+ the USB3 and USB2 OTG capable controller.
+- reg: PHY IP register range.
+- marvell,usb-misc-reg: handle on the "USB miscellaneous registers" shared
+ region covering registers related to both the host
+ controller and the PHY.
+- #phy-cells: Standard property (Documentation: phy-bindings.txt) Should be 0.
+
+
+Example:
+
+ usb2_utmi_host_phy: phy@5f000 {
+ compatible = "marvell,armada-3700-utmi-host-phy";
+ reg = <0x5f000 0x800>;
+ marvell,usb-misc-reg = <&usb2_syscon>;
+ #phy-cells = <0>;
+ };
+
+ usb2_syscon: system-controller@5f800 {
+ compatible = "marvell,armada-3700-usb2-host-misc", "syscon";
+ reg = <0x5f800 0x800>;
+ };
--
2.19.1
^ permalink raw reply related [flat|nested] 11+ messages in thread* [PATCH v5 3/6] MAINTAINERS: phy: fill Armada 3700 PHY drivers entry
2019-01-29 9:36 [PATCH v5 0/6] A3700 USB UTMI PHY support Miquel Raynal
2019-01-29 9:36 ` [PATCH v5 1/6] phy: add A3700 UTMI PHY driver Miquel Raynal
2019-01-29 9:36 ` [PATCH v5 2/6] dt-bindings: phy: mvebu-utmi: add UTMI PHY bindings Miquel Raynal
@ 2019-01-29 9:36 ` Miquel Raynal
2019-01-29 9:36 ` [PATCH v5 4/6] ARM64: dts: marvell: armada-37xx: fix USB2 memory region Miquel Raynal
` (3 subsequent siblings)
6 siblings, 0 replies; 11+ messages in thread
From: Miquel Raynal @ 2019-01-29 9:36 UTC (permalink / raw)
To: Kishon Vijay Abraham I, Rob Herring, Mark Rutland,
Gregory Clement, Jason Cooper, Andrew Lunn, Sebastian Hesselbarth
Cc: devicetree, Antoine Tenart, Maxime Chevallier, Nadav Haklai,
Thomas Petazzoni, Miquel Raynal, linux-arm-kernel
Update the Armada 3700 PHY drivers entry with the recently added UTMI
PHY driver.
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
MAINTAINERS | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index abfd80f21b24..2a08a097e107 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -9080,11 +9080,13 @@ F: drivers/gpu/drm/armada/
F: include/uapi/drm/armada_drm.h
F: Documentation/devicetree/bindings/display/armada/
-MARVELL ARMADA 3700 COMPHY DRIVER
+MARVELL ARMADA 3700 PHY DRIVERS
M: Miquel Raynal <miquel.raynal@bootlin.com>
S: Maintained
F: drivers/phy/marvell/phy-mvebu-a3700-comphy.c
+F: drivers/phy/marvell/phy-mvebu-a3700-utmi.c
F: Documentation/devicetree/bindings/phy/phy-mvebu-comphy.txt
+F: Documentation/devicetree/bindings/phy/phy-mvebu-utmi.txt
MARVELL CRYPTO DRIVER
M: Boris Brezillon <bbrezillon@kernel.org>
--
2.19.1
^ permalink raw reply related [flat|nested] 11+ messages in thread* [PATCH v5 4/6] ARM64: dts: marvell: armada-37xx: fix USB2 memory region
2019-01-29 9:36 [PATCH v5 0/6] A3700 USB UTMI PHY support Miquel Raynal
` (2 preceding siblings ...)
2019-01-29 9:36 ` [PATCH v5 3/6] MAINTAINERS: phy: fill Armada 3700 PHY drivers entry Miquel Raynal
@ 2019-01-29 9:36 ` Miquel Raynal
2019-02-06 11:09 ` Gregory CLEMENT
2019-01-29 9:36 ` [PATCH v5 5/6] ARM64: dts: marvell: armada-37xx: declare USB2 UTMI PHYs Miquel Raynal
` (2 subsequent siblings)
6 siblings, 1 reply; 11+ messages in thread
From: Miquel Raynal @ 2019-01-29 9:36 UTC (permalink / raw)
To: Kishon Vijay Abraham I, Rob Herring, Mark Rutland,
Gregory Clement, Jason Cooper, Andrew Lunn, Sebastian Hesselbarth
Cc: devicetree, Antoine Tenart, Maxime Chevallier, Nadav Haklai,
Thomas Petazzoni, Miquel Raynal, linux-arm-kernel
The specification splits the USB2 memory region into three sections:
1/ 0xD005E000-0xD005EFFF: USB2 Host Controller Registers
2/ 0xD005F000-0xD005F7FF: USB2 UTMI PHY Registers
3/ 0xD005F800-0xD005FFFF: USB2 Host Miscellaneous Registers
Section 1/ belongs to the USB2 node but section 2/ belongs to the UTMI
PHY node. Section 3/ can be accessed by both the USB controller and
the PHY because of the miscaellaneous nature of the registers inside
so a specific node will be created to cover the area and a handle to
it will be added in both the USB controller and the PHY node.
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
arch/arm64/boot/dts/marvell/armada-37xx.dtsi | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/arm64/boot/dts/marvell/armada-37xx.dtsi b/arch/arm64/boot/dts/marvell/armada-37xx.dtsi
index d6e548618a95..5cfd1b920f31 100644
--- a/arch/arm64/boot/dts/marvell/armada-37xx.dtsi
+++ b/arch/arm64/boot/dts/marvell/armada-37xx.dtsi
@@ -351,7 +351,7 @@
usb2: usb@5e000 {
compatible = "marvell,armada-3700-ehci";
- reg = <0x5e000 0x2000>;
+ reg = <0x5e000 0x1000>;
interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
status = "disabled";
};
--
2.19.1
^ permalink raw reply related [flat|nested] 11+ messages in thread* Re: [PATCH v5 4/6] ARM64: dts: marvell: armada-37xx: fix USB2 memory region
2019-01-29 9:36 ` [PATCH v5 4/6] ARM64: dts: marvell: armada-37xx: fix USB2 memory region Miquel Raynal
@ 2019-02-06 11:09 ` Gregory CLEMENT
0 siblings, 0 replies; 11+ messages in thread
From: Gregory CLEMENT @ 2019-02-06 11:09 UTC (permalink / raw)
To: Kishon Vijay Abraham I, Rob Herring, Mark Rutland, Jason Cooper,
Andrew Lunn, Sebastian Hesselbarth
Cc: devicetree, Antoine Tenart, Maxime Chevallier, Nadav Haklai,
Thomas Petazzoni, Miquel Raynal, linux-arm-kernel
Hi Miquel,
On mar., janv. 29 2019, Miquel Raynal <miquel.raynal@bootlin.com> wrote:
> The specification splits the USB2 memory region into three sections:
> 1/ 0xD005E000-0xD005EFFF: USB2 Host Controller Registers
> 2/ 0xD005F000-0xD005F7FF: USB2 UTMI PHY Registers
> 3/ 0xD005F800-0xD005FFFF: USB2 Host Miscellaneous Registers
>
> Section 1/ belongs to the USB2 node but section 2/ belongs to the UTMI
> PHY node. Section 3/ can be accessed by both the USB controller and
> the PHY because of the miscaellaneous nature of the registers inside
> so a specific node will be created to cover the area and a handle to
> it will be added in both the USB controller and the PHY node.
>
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Applied to mvebu/dt64
Thanks,
Gregory
> ---
> arch/arm64/boot/dts/marvell/armada-37xx.dtsi | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/arch/arm64/boot/dts/marvell/armada-37xx.dtsi b/arch/arm64/boot/dts/marvell/armada-37xx.dtsi
> index d6e548618a95..5cfd1b920f31 100644
> --- a/arch/arm64/boot/dts/marvell/armada-37xx.dtsi
> +++ b/arch/arm64/boot/dts/marvell/armada-37xx.dtsi
> @@ -351,7 +351,7 @@
>
> usb2: usb@5e000 {
> compatible = "marvell,armada-3700-ehci";
> - reg = <0x5e000 0x2000>;
> + reg = <0x5e000 0x1000>;
> interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
> status = "disabled";
> };
> --
> 2.19.1
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
--
Gregory Clement, Bootlin
Embedded Linux and Kernel engineering
http://bootlin.com
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH v5 5/6] ARM64: dts: marvell: armada-37xx: declare USB2 UTMI PHYs
2019-01-29 9:36 [PATCH v5 0/6] A3700 USB UTMI PHY support Miquel Raynal
` (3 preceding siblings ...)
2019-01-29 9:36 ` [PATCH v5 4/6] ARM64: dts: marvell: armada-37xx: fix USB2 memory region Miquel Raynal
@ 2019-01-29 9:36 ` Miquel Raynal
2019-02-06 11:10 ` Gregory CLEMENT
2019-01-29 9:36 ` [PATCH v5 6/6] ARM64: dts: marvell: armada-37xx: link USB hosts with their PHYs Miquel Raynal
2019-02-06 11:34 ` [PATCH v5 0/6] A3700 USB UTMI PHY support Kishon Vijay Abraham I
6 siblings, 1 reply; 11+ messages in thread
From: Miquel Raynal @ 2019-01-29 9:36 UTC (permalink / raw)
To: Kishon Vijay Abraham I, Rob Herring, Mark Rutland,
Gregory Clement, Jason Cooper, Andrew Lunn, Sebastian Hesselbarth
Cc: devicetree, Antoine Tenart, Maxime Chevallier, Nadav Haklai,
Thomas Petazzoni, Miquel Raynal, linux-arm-kernel
On Marvell Armada 3700 SoCs there are two USB2 UTMI PHYs. They are
both very similar but only one has OTG/charging capabilities.
Because there are USB host registers and PHY registers mixed in a
single area, a system controller is also created and referenced from
both the USB host node and the PHY node.
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
arch/arm64/boot/dts/marvell/armada-37xx.dtsi | 28 ++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/arch/arm64/boot/dts/marvell/armada-37xx.dtsi b/arch/arm64/boot/dts/marvell/armada-37xx.dtsi
index 5cfd1b920f31..d2d8ef00c592 100644
--- a/arch/arm64/boot/dts/marvell/armada-37xx.dtsi
+++ b/arch/arm64/boot/dts/marvell/armada-37xx.dtsi
@@ -344,18 +344,46 @@
compatible = "marvell,armada3700-xhci",
"generic-xhci";
reg = <0x58000 0x4000>;
+ marvell,usb-misc-reg = <&usb32_syscon>;
interrupts = <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&sb_periph_clk 12>;
status = "disabled";
};
+ usb2_utmi_otg_phy: phy@5d000 {
+ compatible = "marvell,a3700-utmi-otg-phy";
+ reg = <0x5d000 0x800>;
+ marvell,usb-misc-reg = <&usb32_syscon>;
+ #phy-cells = <0>;
+ };
+
+ usb32_syscon: system-controller@5d800 {
+ compatible = "marvell,armada-3700-usb2-host-device-misc",
+ "syscon";
+ reg = <0x5d800 0x800>;
+ };
+
usb2: usb@5e000 {
compatible = "marvell,armada-3700-ehci";
reg = <0x5e000 0x1000>;
+ marvell,usb-misc-reg = <&usb2_syscon>;
interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
status = "disabled";
};
+ usb2_utmi_host_phy: phy@5f000 {
+ compatible = "marvell,a3700-utmi-host-phy";
+ reg = <0x5f000 0x800>;
+ marvell,usb-misc-reg = <&usb2_syscon>;
+ #phy-cells = <0>;
+ };
+
+ usb2_syscon: system-controller@5f800 {
+ compatible = "marvell,armada-3700-usb2-host-misc",
+ "syscon";
+ reg = <0x5f800 0x800>;
+ };
+
xor@60900 {
compatible = "marvell,armada-3700-xor";
reg = <0x60900 0x100>,
--
2.19.1
^ permalink raw reply related [flat|nested] 11+ messages in thread* Re: [PATCH v5 5/6] ARM64: dts: marvell: armada-37xx: declare USB2 UTMI PHYs
2019-01-29 9:36 ` [PATCH v5 5/6] ARM64: dts: marvell: armada-37xx: declare USB2 UTMI PHYs Miquel Raynal
@ 2019-02-06 11:10 ` Gregory CLEMENT
0 siblings, 0 replies; 11+ messages in thread
From: Gregory CLEMENT @ 2019-02-06 11:10 UTC (permalink / raw)
To: Kishon Vijay Abraham I, Rob Herring, Mark Rutland, Jason Cooper,
Andrew Lunn, Sebastian Hesselbarth
Cc: devicetree, Antoine Tenart, Maxime Chevallier, Nadav Haklai,
Thomas Petazzoni, Miquel Raynal, linux-arm-kernel
Hi Miquel,
On mar., janv. 29 2019, Miquel Raynal <miquel.raynal@bootlin.com> wrote:
> On Marvell Armada 3700 SoCs there are two USB2 UTMI PHYs. They are
> both very similar but only one has OTG/charging capabilities.
>
> Because there are USB host registers and PHY registers mixed in a
> single area, a system controller is also created and referenced from
> both the USB host node and the PHY node.
>
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Applied to mvebu/dt64
Thanks,
Gregory
> ---
> arch/arm64/boot/dts/marvell/armada-37xx.dtsi | 28 ++++++++++++++++++++
> 1 file changed, 28 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/marvell/armada-37xx.dtsi b/arch/arm64/boot/dts/marvell/armada-37xx.dtsi
> index 5cfd1b920f31..d2d8ef00c592 100644
> --- a/arch/arm64/boot/dts/marvell/armada-37xx.dtsi
> +++ b/arch/arm64/boot/dts/marvell/armada-37xx.dtsi
> @@ -344,18 +344,46 @@
> compatible = "marvell,armada3700-xhci",
> "generic-xhci";
> reg = <0x58000 0x4000>;
> + marvell,usb-misc-reg = <&usb32_syscon>;
> interrupts = <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>;
> clocks = <&sb_periph_clk 12>;
> status = "disabled";
> };
>
> + usb2_utmi_otg_phy: phy@5d000 {
> + compatible = "marvell,a3700-utmi-otg-phy";
> + reg = <0x5d000 0x800>;
> + marvell,usb-misc-reg = <&usb32_syscon>;
> + #phy-cells = <0>;
> + };
> +
> + usb32_syscon: system-controller@5d800 {
> + compatible = "marvell,armada-3700-usb2-host-device-misc",
> + "syscon";
> + reg = <0x5d800 0x800>;
> + };
> +
> usb2: usb@5e000 {
> compatible = "marvell,armada-3700-ehci";
> reg = <0x5e000 0x1000>;
> + marvell,usb-misc-reg = <&usb2_syscon>;
> interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
> status = "disabled";
> };
>
> + usb2_utmi_host_phy: phy@5f000 {
> + compatible = "marvell,a3700-utmi-host-phy";
> + reg = <0x5f000 0x800>;
> + marvell,usb-misc-reg = <&usb2_syscon>;
> + #phy-cells = <0>;
> + };
> +
> + usb2_syscon: system-controller@5f800 {
> + compatible = "marvell,armada-3700-usb2-host-misc",
> + "syscon";
> + reg = <0x5f800 0x800>;
> + };
> +
> xor@60900 {
> compatible = "marvell,armada-3700-xor";
> reg = <0x60900 0x100>,
> --
> 2.19.1
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
--
Gregory Clement, Bootlin
Embedded Linux and Kernel engineering
http://bootlin.com
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH v5 6/6] ARM64: dts: marvell: armada-37xx: link USB hosts with their PHYs
2019-01-29 9:36 [PATCH v5 0/6] A3700 USB UTMI PHY support Miquel Raynal
` (4 preceding siblings ...)
2019-01-29 9:36 ` [PATCH v5 5/6] ARM64: dts: marvell: armada-37xx: declare USB2 UTMI PHYs Miquel Raynal
@ 2019-01-29 9:36 ` Miquel Raynal
2019-02-06 14:30 ` Gregory CLEMENT
2019-02-06 11:34 ` [PATCH v5 0/6] A3700 USB UTMI PHY support Kishon Vijay Abraham I
6 siblings, 1 reply; 11+ messages in thread
From: Miquel Raynal @ 2019-01-29 9:36 UTC (permalink / raw)
To: Kishon Vijay Abraham I, Rob Herring, Mark Rutland,
Gregory Clement, Jason Cooper, Andrew Lunn, Sebastian Hesselbarth
Cc: devicetree, Antoine Tenart, Maxime Chevallier, Nadav Haklai,
Thomas Petazzoni, Miquel Raynal, linux-arm-kernel
Reference the PHY nodes from the USB controller nodes.
The USB3 host controller is wired to:
* the first PHY of the COMPHY IP
* the OTG-capable UTMI PHY
The USB2 host controller is wired to:
* the host-only UTMI PHY
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
arch/arm64/boot/dts/marvell/armada-37xx.dtsi | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/arch/arm64/boot/dts/marvell/armada-37xx.dtsi b/arch/arm64/boot/dts/marvell/armada-37xx.dtsi
index d2d8ef00c592..c0b1c9146525 100644
--- a/arch/arm64/boot/dts/marvell/armada-37xx.dtsi
+++ b/arch/arm64/boot/dts/marvell/armada-37xx.dtsi
@@ -347,6 +347,8 @@
marvell,usb-misc-reg = <&usb32_syscon>;
interrupts = <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&sb_periph_clk 12>;
+ phys = <&comphy0 0>, <&usb2_utmi_otg_phy>;
+ phy-names = "usb3-phy", "usb2-utmi-otg-phy";
status = "disabled";
};
@@ -368,6 +370,8 @@
reg = <0x5e000 0x1000>;
marvell,usb-misc-reg = <&usb2_syscon>;
interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
+ phys = <&usb2_utmi_host_phy>;
+ phy-names = "usb2-utmi-host-phy";
status = "disabled";
};
--
2.19.1
^ permalink raw reply related [flat|nested] 11+ messages in thread* Re: [PATCH v5 6/6] ARM64: dts: marvell: armada-37xx: link USB hosts with their PHYs
2019-01-29 9:36 ` [PATCH v5 6/6] ARM64: dts: marvell: armada-37xx: link USB hosts with their PHYs Miquel Raynal
@ 2019-02-06 14:30 ` Gregory CLEMENT
0 siblings, 0 replies; 11+ messages in thread
From: Gregory CLEMENT @ 2019-02-06 14:30 UTC (permalink / raw)
To: Kishon Vijay Abraham I, Rob Herring, Mark Rutland, Jason Cooper,
Andrew Lunn, Sebastian Hesselbarth
Cc: devicetree, Antoine Tenart, Maxime Chevallier, Nadav Haklai,
Thomas Petazzoni, Miquel Raynal, linux-arm-kernel
Hi Miquel,
On mar., janv. 29 2019, Miquel Raynal <miquel.raynal@bootlin.com> wrote:
> Reference the PHY nodes from the USB controller nodes.
>
> The USB3 host controller is wired to:
> * the first PHY of the COMPHY IP
> * the OTG-capable UTMI PHY
>
> The USB2 host controller is wired to:
> * the host-only UTMI PHY
>
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Applied to mvebu/dt64
Thanks,
Gregory
> ---
> arch/arm64/boot/dts/marvell/armada-37xx.dtsi | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/marvell/armada-37xx.dtsi b/arch/arm64/boot/dts/marvell/armada-37xx.dtsi
> index d2d8ef00c592..c0b1c9146525 100644
> --- a/arch/arm64/boot/dts/marvell/armada-37xx.dtsi
> +++ b/arch/arm64/boot/dts/marvell/armada-37xx.dtsi
> @@ -347,6 +347,8 @@
> marvell,usb-misc-reg = <&usb32_syscon>;
> interrupts = <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>;
> clocks = <&sb_periph_clk 12>;
> + phys = <&comphy0 0>, <&usb2_utmi_otg_phy>;
> + phy-names = "usb3-phy", "usb2-utmi-otg-phy";
> status = "disabled";
> };
>
> @@ -368,6 +370,8 @@
> reg = <0x5e000 0x1000>;
> marvell,usb-misc-reg = <&usb2_syscon>;
> interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
> + phys = <&usb2_utmi_host_phy>;
> + phy-names = "usb2-utmi-host-phy";
> status = "disabled";
> };
>
> --
> 2.19.1
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
--
Gregory Clement, Bootlin
Embedded Linux and Kernel engineering
http://bootlin.com
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v5 0/6] A3700 USB UTMI PHY support
2019-01-29 9:36 [PATCH v5 0/6] A3700 USB UTMI PHY support Miquel Raynal
` (5 preceding siblings ...)
2019-01-29 9:36 ` [PATCH v5 6/6] ARM64: dts: marvell: armada-37xx: link USB hosts with their PHYs Miquel Raynal
@ 2019-02-06 11:34 ` Kishon Vijay Abraham I
6 siblings, 0 replies; 11+ messages in thread
From: Kishon Vijay Abraham I @ 2019-02-06 11:34 UTC (permalink / raw)
To: Miquel Raynal, Rob Herring, Mark Rutland, Gregory Clement,
Jason Cooper, Andrew Lunn, Sebastian Hesselbarth
Cc: devicetree, Antoine Tenart, Maxime Chevallier, Nadav Haklai,
Thomas Petazzoni, linux-arm-kernel
On 29/01/19 3:06 PM, Miquel Raynal wrote:
> USB2 on A3700 only works because U-Boot initializes the UTMI PHYs (one
> wired to each USB controller). While there is no issue with regular
> use, this architecture does not allow suspend to RAM to work as the
> PHYs must be re-initialized at resume. In order to support this
> feature, this series adds a UTMI PHY driver for the A3700 SoC.
>
> The A3700 device tree is updated to reference the PHYs.
merged the PHY patches.
Thanks
Kishon
>
> Thanks,
> Miquèl
>
> Changes since v4:
> =================
> * Drop USB patches as they have been sent in a separate series. No
> real functional changes since the v4 though, kind of a resend of the
> PHY patches from the "A3700 USB S2RAM support" series.
>
> Changes since v3:
> =================
> * Bindings: as suggested by Gregory and Rob, used the "-misc" suffix
> instead of "-miscellaneous" and prefixed the compatible with
> "armada-3700" to follow what has been used for the other IPs of the
> same SoC (and added Rob's ack).
>
> Changes since v2:
> =================
> * Typos
> * UTMI PHY bindings:
> > New name for the USB2 host/PHY syscons (+ changes in the DT).
> > Clearly state that the PHYs are different between OTG and
> host-only controllers.
> * UTMI PHY driver:
> > Use GENMASK macro.
> > Removed useless checks on driver data retrieval.
> > Dropped the empty ->remove() hook.
> > Updated the licence macro to match the SPDX tag.
> > Used the of_device_get_match_data() helper.
> > Removed the use of a local variable in the ->probe() for the
> driver's operations.
> > Fixed the driver co-author: Igal, not Evan.
>
> Changes since v1:
> =================
> * Add UTMI PHY driver/bindings/DT changes to bring S2RAM support to
> both USB ports available on the A3700 SoC.
> * Rebased on top of v5.0-rc1.
>
>
> Miquel Raynal (6):
> phy: add A3700 UTMI PHY driver
> dt-bindings: phy: mvebu-utmi: add UTMI PHY bindings
> MAINTAINERS: phy: fill Armada 3700 PHY drivers entry
> ARM64: dts: marvell: armada-37xx: fix USB2 memory region
> ARM64: dts: marvell: armada-37xx: declare USB2 UTMI PHYs
> ARM64: dts: marvell: armada-37xx: link USB hosts with their PHYs
>
> .../bindings/phy/phy-mvebu-utmi.txt | 38 +++
> MAINTAINERS | 4 +-
> arch/arm64/boot/dts/marvell/armada-37xx.dtsi | 34 ++-
> drivers/phy/marvell/Kconfig | 9 +
> drivers/phy/marvell/Makefile | 1 +
> drivers/phy/marvell/phy-mvebu-a3700-utmi.c | 278 ++++++++++++++++++
> 6 files changed, 362 insertions(+), 2 deletions(-)
> create mode 100644 Documentation/devicetree/bindings/phy/phy-mvebu-utmi.txt
> create mode 100644 drivers/phy/marvell/phy-mvebu-a3700-utmi.c
>
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 11+ messages in thread