diff --git a/patch/kernel/sunxi-dev/board-pine-h6-pine-h6-0020-phy-allwinner-add-phy-driver-for-USB3-PHY-on-Allwinn.patch b/patch/kernel/sunxi-dev/board-pine-h6-pine-h6-0020-phy-allwinner-add-phy-driver-for-USB3-PHY-on-Allwinn.patch deleted file mode 100644 index 70513ae8b1..0000000000 --- a/patch/kernel/sunxi-dev/board-pine-h6-pine-h6-0020-phy-allwinner-add-phy-driver-for-USB3-PHY-on-Allwinn.patch +++ /dev/null @@ -1,287 +0,0 @@ -From e6f5b5df3b4cbba6e3a23695fe0f5f007f355978 Mon Sep 17 00:00:00 2001 -From: Icenowy Zheng -Date: Mon, 25 Dec 2017 12:04:02 +0800 -Subject: [PATCH 20/35] phy: allwinner: add phy driver for USB3 PHY on - Allwinner H6 SoC - -Allwinner H6 SoC contains a USB3 PHY (with USB2 DP/DM lines also -controlled). - -Add a driver for it. - -The register operations in this driver is mainly extracted from the BSP -USB3 driver. - -Signed-off-by: Icenowy Zheng ---- - .../devicetree/bindings/phy/sun50i-usb3-phy.txt | 24 +++ - drivers/phy/allwinner/Kconfig | 13 ++ - drivers/phy/allwinner/Makefile | 1 + - drivers/phy/allwinner/phy-sun50i-usb3.c | 195 +++++++++++++++++++++ - 4 files changed, 233 insertions(+) - create mode 100644 Documentation/devicetree/bindings/phy/sun50i-usb3-phy.txt - create mode 100644 drivers/phy/allwinner/phy-sun50i-usb3.c - -diff --git a/Documentation/devicetree/bindings/phy/sun50i-usb3-phy.txt b/Documentation/devicetree/bindings/phy/sun50i-usb3-phy.txt -new file mode 100644 -index 0000000..912d55f ---- /dev/null -+++ b/Documentation/devicetree/bindings/phy/sun50i-usb3-phy.txt -@@ -0,0 +1,24 @@ -+Allwinner sun50i USB3 PHY -+----------------------- -+ -+Required properties: -+- compatible : should be one of -+ * allwinner,sun60i-h6-usb3-phy -+- reg : a list of offset + length pairs -+- #phy-cells : from the generic phy bindings, must be 0 -+- clocks : phandle + clock specifier for the phy clock -+- resets : phandle + reset specifier for the phy reset -+ -+Optional Properties: -+- phy-supply : from the generic phy bindings, a phandle to a regulator that -+ provides power to VBUS. -+ -+Example: -+ usb3phy: phy@5210000 { -+ compatible = "allwinner,sun50i-h6-usb3-phy"; -+ reg = <0x5210000 0x10000>; -+ clocks = <&ccu CLK_USB_PHY1>; -+ resets = <&ccu RST_USB_PHY1>; -+ #phy-cells = <0>; -+ status = "disabled"; -+ }; -diff --git a/drivers/phy/allwinner/Kconfig b/drivers/phy/allwinner/Kconfig -index cdc1e74..cf373bc 100644 ---- a/drivers/phy/allwinner/Kconfig -+++ b/drivers/phy/allwinner/Kconfig -@@ -29,3 +29,16 @@ config PHY_SUN9I_USB - sun9i SoCs. - - This driver controls each individual USB 2 host PHY. -+ -+config PHY_SUN50I_USB3 -+ tristate "Allwinner sun50i SoC USB3 PHY driver" -+ depends on ARCH_SUNXI && HAS_IOMEM && OF -+ depends on RESET_CONTROLLER -+ depends on USB_SUPPORT -+ select USB_COMMON -+ select GENERIC_PHY -+ help -+ Enable this to support the USB3.0-capable transceiver that is -+ part of some Allwinner sun50i SoCs. -+ -+ This driver controls each individual USB 2+3 host PHY combo. -diff --git a/drivers/phy/allwinner/Makefile b/drivers/phy/allwinner/Makefile -index 8605529c..a8d01e9 100644 ---- a/drivers/phy/allwinner/Makefile -+++ b/drivers/phy/allwinner/Makefile -@@ -1,2 +1,3 @@ - obj-$(CONFIG_PHY_SUN4I_USB) += phy-sun4i-usb.o - obj-$(CONFIG_PHY_SUN9I_USB) += phy-sun9i-usb.o -+obj-$(CONFIG_PHY_SUN50I_USB3) += phy-sun50i-usb3.o -diff --git a/drivers/phy/allwinner/phy-sun50i-usb3.c b/drivers/phy/allwinner/phy-sun50i-usb3.c -new file mode 100644 -index 0000000..000a3e0 ---- /dev/null -+++ b/drivers/phy/allwinner/phy-sun50i-usb3.c -@@ -0,0 +1,195 @@ -+/* -+ * Allwinner sun50i(H6) USB 3.0 phy driver -+ * -+ * Copyright (C) 2017 Icenowy Zheng -+ * -+ * Based on phy-sun9i-usb.c, which is: -+ * -+ * Copyright (C) 2014-2015 Chen-Yu Tsai -+ * -+ * Based on code from Allwinner BSP, which is: -+ * -+ * Copyright (c) 2010-2015 Allwinner Technology Co., Ltd. -+ * -+ * SPDX-License-Identifier: GPL-2.0+ -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+/* Interface Status and Control Registers */ -+#define SUNXI_ISCR 0x00 -+#define SUNXI_PIPE_CLOCK_CONTROL 0x14 -+#define SUNXI_PHY_TUNE_LOW 0x18 -+#define SUNXI_PHY_TUNE_HIGH 0x1c -+#define SUNXI_PHY_EXTERNAL_CONTROL 0x20 -+ -+/* USB2.0 Interface Status and Control Register */ -+#define SUNXI_ISCR_FORCE_VBUS (3 << 12) -+ -+/* PIPE Clock Control Register */ -+#define SUNXI_PCC_PIPE_CLK_OPEN (1 << 6) -+ -+/* PHY External Control Register */ -+#define SUNXI_PEC_EXTERN_VBUS (3 << 1) -+#define SUNXI_PEC_SSC_EN (1 << 24) -+#define SUNXI_PEC_REF_SSP_EN (1 << 26) -+ -+/* PHY Tune High Register */ -+#define SUNXI_TX_DEEMPH_3P5DB(n) ((n) << 19) -+#define SUNXI_TX_DEEMPH_3P5DB_MASK GENMASK(24, 19) -+#define SUNXI_TX_DEEMPH_6DB(n) ((n) << 13) -+#define SUNXI_TX_DEEMPH_6GB_MASK GENMASK(18, 13) -+#define SUNXI_TX_SWING_FULL(n) ((n) << 6) -+#define SUNXI_TX_SWING_FULL_MASK GENMASK(12, 6) -+#define SUNXI_LOS_BIAS(n) ((n) << 3) -+#define SUNXI_LOS_BIAS_MASK GENMASK(5, 3) -+#define SUNXI_TXVBOOSTLVL(n) ((n) << 0) -+#define SUNXI_TXVBOOSTLVL_MASK GENMASK(0, 2) -+ -+struct sun50i_usb3_phy { -+ struct phy *phy; -+ void __iomem *regs; -+ struct reset_control *reset; -+ struct clk *clk; -+}; -+ -+static void sun50i_usb3_phy_open(struct sun50i_usb3_phy *phy) -+{ -+ u32 val; -+ -+ val = readl(phy->regs + SUNXI_PHY_EXTERNAL_CONTROL); -+ val |= SUNXI_PEC_EXTERN_VBUS; -+ val |= SUNXI_PEC_SSC_EN | SUNXI_PEC_REF_SSP_EN; -+ writel(val, phy->regs + SUNXI_PHY_EXTERNAL_CONTROL); -+ -+ val = readl(phy->regs + SUNXI_PIPE_CLOCK_CONTROL); -+ val |= SUNXI_PCC_PIPE_CLK_OPEN; -+ writel(val, phy->regs + SUNXI_PIPE_CLOCK_CONTROL); -+ -+ val = readl(phy->regs + SUNXI_ISCR); -+ val |= SUNXI_ISCR_FORCE_VBUS; -+ writel(val, phy->regs + SUNXI_ISCR); -+ -+ /* -+ * All the magic numbers written to the PHY_TUNE_{LOW_HIGH} -+ * registers are directly taken from the BSP USB3 driver from -+ * Allwiner. -+ */ -+ writel(0x0047fc87, phy->regs + SUNXI_PHY_TUNE_LOW); -+ -+ val = readl(phy->regs + SUNXI_PHY_TUNE_HIGH); -+ val &= ~(SUNXI_TXVBOOSTLVL_MASK | SUNXI_LOS_BIAS_MASK | -+ SUNXI_TX_SWING_FULL_MASK | SUNXI_TX_DEEMPH_6GB_MASK | -+ SUNXI_TX_DEEMPH_3P5DB_MASK); -+ val |= SUNXI_TXVBOOSTLVL(0x7); -+ val |= SUNXI_LOS_BIAS(0x7); -+ val |= SUNXI_TX_SWING_FULL(0x55); -+ val |= SUNXI_TX_DEEMPH_6DB(0x20); -+ val |= SUNXI_TX_DEEMPH_3P5DB(0x15); -+ writel(val, phy->regs + SUNXI_PHY_TUNE_HIGH); -+} -+ -+static int sun50i_usb3_phy_init(struct phy *_phy) -+{ -+ struct sun50i_usb3_phy *phy = phy_get_drvdata(_phy); -+ int ret; -+ -+ ret = clk_prepare_enable(phy->clk); -+ if (ret) -+ goto err_clk; -+ -+ ret = reset_control_deassert(phy->reset); -+ if (ret) -+ goto err_reset; -+ -+ sun50i_usb3_phy_open(phy); -+ return 0; -+ -+err_reset: -+ clk_disable_unprepare(phy->clk); -+ -+err_clk: -+ return ret; -+} -+ -+static int sun50i_usb3_phy_exit(struct phy *_phy) -+{ -+ struct sun50i_usb3_phy *phy = phy_get_drvdata(_phy); -+ -+ reset_control_assert(phy->reset); -+ clk_disable_unprepare(phy->clk); -+ -+ return 0; -+} -+ -+static const struct phy_ops sun50i_usb3_phy_ops = { -+ .init = sun50i_usb3_phy_init, -+ .exit = sun50i_usb3_phy_exit, -+ .owner = THIS_MODULE, -+}; -+ -+static int sun50i_usb3_phy_probe(struct platform_device *pdev) -+{ -+ struct sun50i_usb3_phy *phy; -+ struct device *dev = &pdev->dev; -+ struct phy_provider *phy_provider; -+ struct resource *res; -+ -+ phy = devm_kzalloc(dev, sizeof(*phy), GFP_KERNEL); -+ if (!phy) -+ return -ENOMEM; -+ -+ phy->clk = devm_clk_get(dev, NULL); -+ if (IS_ERR(phy->clk)) { -+ dev_err(dev, "failed to get phy clock\n"); -+ return PTR_ERR(phy->clk); -+ } -+ -+ phy->reset = devm_reset_control_get(dev, NULL); -+ if (IS_ERR(phy->reset)) { -+ dev_err(dev, "failed to get reset control\n"); -+ return PTR_ERR(phy->reset); -+ } -+ -+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0); -+ phy->regs = devm_ioremap_resource(dev, res); -+ if (IS_ERR(phy->regs)) -+ return PTR_ERR(phy->regs); -+ -+ phy->phy = devm_phy_create(dev, NULL, &sun50i_usb3_phy_ops); -+ if (IS_ERR(phy->phy)) { -+ dev_err(dev, "failed to create PHY\n"); -+ return PTR_ERR(phy->phy); -+ } -+ -+ phy_set_drvdata(phy->phy, phy); -+ phy_provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate); -+ -+ return PTR_ERR_OR_ZERO(phy_provider); -+} -+ -+static const struct of_device_id sun50i_usb3_phy_of_match[] = { -+ { .compatible = "allwinner,sun50i-h6-usb3-phy" }, -+ { }, -+}; -+MODULE_DEVICE_TABLE(of, sun50i_usb3_phy_of_match); -+ -+static struct platform_driver sun50i_usb3_phy_driver = { -+ .probe = sun50i_usb3_phy_probe, -+ .driver = { -+ .of_match_table = sun50i_usb3_phy_of_match, -+ .name = "sun50i-usb3-phy", -+ } -+}; -+module_platform_driver(sun50i_usb3_phy_driver); -+ -+MODULE_DESCRIPTION("Allwinner sun50i USB 3.0 phy driver"); -+MODULE_AUTHOR("Icenowy Zheng "); -+MODULE_LICENSE("GPL"); --- -2.7.4 - diff --git a/patch/kernel/sunxi-dev/board-pine-h6-pine-h6-0027-arm64-allwinner-h6-add-USB2-related-device-nodes.patch b/patch/kernel/sunxi-dev/board-pine-h6-pine-h6-0027-arm64-allwinner-h6-add-USB2-related-device-nodes.patch deleted file mode 100644 index b0ee35815d..0000000000 --- a/patch/kernel/sunxi-dev/board-pine-h6-pine-h6-0027-arm64-allwinner-h6-add-USB2-related-device-nodes.patch +++ /dev/null @@ -1,116 +0,0 @@ -From 994865c02ec76b97dbcac43b25eaa2147b84264a Mon Sep 17 00:00:00 2001 -From: Icenowy Zheng -Date: Fri, 5 Jan 2018 18:34:15 +0800 -Subject: [PATCH 27/35] arm64: allwinner: h6: add USB2-related device nodes - -Allwinner H6 has two USB2 ports, one OTG and one host-only. - -Add device tree nodes related to them. - -Signed-off-by: Icenowy Zheng ---- - arch/arm64/boot/dts/allwinner/sun50i-h6.dtsi | 81 ++++++++++++++++++++++++++++ - 1 file changed, 81 insertions(+) - -diff --git a/arch/arm64/boot/dts/allwinner/sun50i-h6.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-h6.dtsi -index b3d8da4..e4ea224 100644 ---- a/arch/arm64/boot/dts/allwinner/sun50i-h6.dtsi -+++ b/arch/arm64/boot/dts/allwinner/sun50i-h6.dtsi -@@ -233,6 +233,61 @@ - status = "disabled"; - }; - -+ usb2otg: usb@5100000 { -+ compatible = "allwinner,sun8i-a33-musb"; -+ reg = <0x05100000 0x0400>; -+ clocks = <&ccu CLK_BUS_OTG>; -+ resets = <&ccu RST_BUS_OTG>; -+ interrupts = ; -+ interrupt-names = "mc"; -+ phys = <&usb2phy 0>; -+ phy-names = "usb"; -+ extcon = <&usb2phy 0>; -+ status = "disabled"; -+ }; -+ -+ usb2phy: phy@5100400 { -+ compatible = "allwinner,sun50i-h6-usb-phy"; -+ reg = <0x05100400 0x14>, -+ <0x05101800 0x4>, -+ <0x05311800 0x4>; -+ reg-names = "phy_ctrl", -+ "pmu0", -+ "pmu3"; -+ clocks = <&ccu CLK_USB_PHY0>, -+ <&ccu CLK_USB_PHY3>; -+ clock-names = "usb0_phy", -+ "usb3_phy"; -+ resets = <&ccu RST_USB_PHY0>, -+ <&ccu RST_USB_PHY3>; -+ reset-names = "usb0_reset", -+ "usb3_reset"; -+ status = "disabled"; -+ #phy-cells = <1>; -+ }; -+ -+ ehci0: usb@5101000 { -+ compatible = "allwinner,sun50i-h6-ehci", "generic-ehci"; -+ reg = <0x05101000 0x100>; -+ interrupts = ; -+ clocks = <&ccu CLK_BUS_OHCI0>, -+ <&ccu CLK_BUS_EHCI0>, -+ <&ccu CLK_USB_OHCI0>; -+ resets = <&ccu RST_BUS_OHCI0>, -+ <&ccu RST_BUS_EHCI0>; -+ status = "disabled"; -+ }; -+ -+ ohci0: usb@5101400 { -+ compatible = "allwinner,sun50i-h6-ohci", "generic-ohci"; -+ reg = <0x05101400 0x100>; -+ interrupts = ; -+ clocks = <&ccu CLK_BUS_OHCI0>, -+ <&ccu CLK_USB_OHCI0>; -+ resets = <&ccu RST_BUS_OHCI0>; -+ status = "disabled"; -+ }; -+ - usb3: usb@5200000 { - compatible = "allwinner,sun50i-h6-dwc3"; - #address-cells = <1>; -@@ -271,6 +326,32 @@ - status = "disabled"; - }; - -+ ehci3: usb@5311000 { -+ compatible = "allwinner,sun50i-h6-ehci", "generic-ehci"; -+ reg = <0x05311000 0x100>; -+ interrupts = ; -+ clocks = <&ccu CLK_BUS_OHCI3>, -+ <&ccu CLK_BUS_EHCI3>, -+ <&ccu CLK_USB_OHCI3>; -+ resets = <&ccu RST_BUS_OHCI3>, -+ <&ccu RST_BUS_EHCI3>; -+ phys = <&usb2phy 3>; -+ phy-names = "usb"; -+ status = "disabled"; -+ }; -+ -+ ohci3: usb@5311400 { -+ compatible = "allwinner,sun50i-h6-ohci", "generic-ohci"; -+ reg = <0x05311400 0x100>; -+ interrupts = ; -+ clocks = <&ccu CLK_BUS_OHCI3>, -+ <&ccu CLK_USB_OHCI3>; -+ resets = <&ccu RST_BUS_OHCI3>; -+ phys = <&usb2phy 3>; -+ phy-names = "usb"; -+ status = "disabled"; -+ }; -+ - r_ccu: clock@7010000 { - compatible = "allwinner,sun50i-h6-r-ccu"; - reg = <0x07010000 0x400>; --- -2.7.4 - diff --git a/patch/kernel/sunxi-dev/board-pine-h6-pine-h6-0033-net-stmmac-sun8i-add-support-for-Allwinner-H6-EMAC.patch b/patch/kernel/sunxi-dev/board-pine-h6-pine-h6-0033-net-stmmac-sun8i-add-support-for-Allwinner-H6-EMAC.patch deleted file mode 100644 index 97301167a3..0000000000 --- a/patch/kernel/sunxi-dev/board-pine-h6-pine-h6-0033-net-stmmac-sun8i-add-support-for-Allwinner-H6-EMAC.patch +++ /dev/null @@ -1,52 +0,0 @@ -From 7794e4fa9fa31ac5cb6d7712d76730fc42f21b85 Mon Sep 17 00:00:00 2001 -From: Icenowy Zheng -Date: Wed, 10 Jan 2018 00:02:24 +0800 -Subject: [PATCH 33/35] net: stmmac: sun8i: add support for Allwinner H6 EMAC - -The EMAC on Allwinner H6 is just like the one on A64. The "internal PHY" -on H6 is on a co-packaged AC200 chip, and it's not really internal (it's -connected via RMII at PA GPIO bank). - -Add support for the Allwinner H6 EMAC in the dwmac-sun8i driver. - -Signed-off-by: Icenowy Zheng ---- - Documentation/devicetree/bindings/net/dwmac-sun8i.txt | 2 ++ - drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c | 14 ++++++++++++++ - 2 files changed, 16 insertions(+) - -diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c -index 099daef..0b3e686 100644 ---- a/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c -+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c -@@ -105,6 +105,18 @@ static const struct emac_variant emac_variant_a64 = { - .support_rgmii = true - }; - -+static const struct emac_variant emac_variant_h6 = { -+ .default_syscon_value = 0x148000, -+ /* -+ * The "Internal PHY" of H6 is not on the die. It's on the co-packaged -+ * AC200 chip instead. -+ */ -+ .soc_has_internal_phy = false, -+ .support_mii = true, -+ .support_rmii = true, -+ .support_rgmii = true -+}; -+ - #define EMAC_BASIC_CTL0 0x00 - #define EMAC_BASIC_CTL1 0x04 - #define EMAC_INT_STA 0x08 -@@ -1085,6 +1097,8 @@ static const struct of_device_id sun8i_dwmac_match[] = { - .data = &emac_variant_a83t }, - { .compatible = "allwinner,sun50i-a64-emac", - .data = &emac_variant_a64 }, -+ { .compatible = "allwinner,sun50i-h6-emac", -+ .data = &emac_variant_h6 }, - { } - }; - MODULE_DEVICE_TABLE(of, sun8i_dwmac_match); --- -2.7.4 - diff --git a/patch/kernel/sunxi-dev/board-pine-h6-pine-h6-0034-arm64-allwinner-h6-add-EMAC-device-nodes.patch b/patch/kernel/sunxi-dev/board-pine-h6-pine-h6-0034-arm64-allwinner-h6-add-EMAC-device-nodes.patch deleted file mode 100644 index cfab395d0f..0000000000 --- a/patch/kernel/sunxi-dev/board-pine-h6-pine-h6-0034-arm64-allwinner-h6-add-EMAC-device-nodes.patch +++ /dev/null @@ -1,64 +0,0 @@ -From 07a78eea37bdd34619ac73ed828a900166d41f02 Mon Sep 17 00:00:00 2001 -From: Icenowy Zheng -Date: Wed, 10 Jan 2018 00:09:54 +0800 -Subject: [PATCH 34/35] arm64: allwinner: h6: add EMAC device nodes - -Allwinner H6 SoC has an EMAC like the one in A64. - -Add device tree nodes for the H6 DTSI file. - -Signed-off-by: Icenowy Zheng ---- - arch/arm64/boot/dts/allwinner/sun50i-h6.dtsi | 35 ++++++++++++++++++++++++++++ - 1 file changed, 35 insertions(+) - -diff --git a/arch/arm64/boot/dts/allwinner/sun50i-h6.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-h6.dtsi -index f548eb4..2c0ecf7 100644 ---- a/arch/arm64/boot/dts/allwinner/sun50i-h6.dtsi -+++ b/arch/arm64/boot/dts/allwinner/sun50i-h6.dtsi -@@ -152,6 +158,14 @@ - interrupt-controller; - #interrupt-cells = <3>; - -+ ext_rgmii_pins: rgmii_pins { -+ pins = "PD0", "PD1", "PD2", "PD3", "PD4", -+ "PD5", "PD7", "PD8", "PD9", "PD10", -+ "PD11", "PD12", "PD13", "PD19", "PD20"; -+ function = "emac"; -+ drive-strength = <40>; -+ }; -+ - mmc0_pins: mmc0-pins { - pins = "PF0", "PF1", "PF2", "PF3", - "PF4", "PF5"; -@@ -313,6 +327,27 @@ - status = "disabled"; - }; - -+ emac: ethernet@5020000 { -+ compatible = "allwinner,sun50i-a64-emac"; // was "allwinner,sun50i-h6-emac"; -+ syscon = <&syscon>; -+ reg = <0x05020000 0x10000>; -+ interrupts = ; -+ interrupt-names = "macirq"; -+ resets = <&ccu RST_BUS_EMAC>; -+ reset-names = "stmmaceth"; -+ clocks = <&ccu CLK_BUS_EMAC>; -+ clock-names = "stmmaceth"; -+ status = "disabled"; -+ #address-cells = <1>; -+ #size-cells = <0>; -+ -+ mdio: mdio { -+ compatible = "snps,dwmac-mdio"; -+ #address-cells = <1>; -+ #size-cells = <0>; -+ }; -+ }; -+ - usb3: usb@5200000 { - compatible = "allwinner,sun50i-h6-dwc3"; - #address-cells = <1>; --- -2.7.4 -