mirror of
https://github.com/archr-linux/Arch-R.git
synced 2026-03-31 14:41:55 -07:00
Merge pull request #4991 from jernejsk/crust-updt
Allwinner: Improve suspend/resume
This commit is contained in:
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2020-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="crust"
|
||||
PKG_VERSION="1609cb0dbb70e5698032a0e39408756467289e6e"
|
||||
PKG_SHA256="f02df0e6e50f2fb1029103f452d4e5e27f54cb1635c6ab3fca3d2ac24747844c"
|
||||
PKG_VERSION="2abb49c37b0302399b98498b9a51f5ed30454aea"
|
||||
PKG_SHA256="62da63ce5f35c41b7b9cbc9ec8c89dbd52e41a60bde00218ac747a1b335803cb"
|
||||
PKG_ARCH="arm aarch64"
|
||||
PKG_LICENSE="BSD-3c"
|
||||
PKG_SITE="https://github.com/crust-firmware/crust"
|
||||
@@ -38,6 +38,7 @@ make_target() {
|
||||
fi
|
||||
# Boards with a PMIC need to disable CONFIG_PMIC_SHUTDOWN to get CIR wakeup from suspend
|
||||
echo "CONFIG_PMIC_SHUTDOWN=n" >> configs/$CRUST_CONFIG
|
||||
echo "CONFIG_CIR=y" >> configs/$CRUST_CONFIG
|
||||
make $CRUST_CONFIG
|
||||
make scp
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
From da5268aa6c9a552ceebf74263acf997489368adc Mon Sep 17 00:00:00 2001
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
Date: Sat, 16 Jan 2021 10:58:14 +0100
|
||||
Subject: [PATCH 01/14] HACK: h6: Add HDMI sound card
|
||||
Subject: [PATCH] HACK: h6: Add HDMI sound card
|
||||
|
||||
Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
---
|
||||
@@ -35,7 +35,7 @@ Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
soc {
|
||||
compatible = "simple-bus";
|
||||
#address-cells = <1>;
|
||||
@@ -651,7 +669,6 @@
|
||||
@@ -652,7 +670,6 @@
|
||||
dmas = <&dma 4>, <&dma 4>;
|
||||
resets = <&ccu RST_BUS_I2S1>;
|
||||
dma-names = "rx", "tx";
|
||||
@@ -43,7 +43,7 @@ Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
};
|
||||
|
||||
spdif: spdif@5093000 {
|
||||
@@ -784,6 +801,7 @@
|
||||
@@ -785,6 +802,7 @@
|
||||
};
|
||||
|
||||
hdmi: hdmi@6000000 {
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
From 7f12904df66e28c2a5fa8ea652ed9eee48a22131 Mon Sep 17 00:00:00 2001
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Ondrej Jirman <megous@megous.com>
|
||||
Date: Wed, 27 Mar 2019 13:21:06 +0100
|
||||
Subject: [PATCH 02/14] net: stmmac: sun8i: Use devm_regulator_get for PHY
|
||||
regulator
|
||||
Subject: [PATCH] net: stmmac: sun8i: Use devm_regulator_get for PHY regulator
|
||||
|
||||
Use devm_regulator_get instead of devm_regulator_get_optional and rely
|
||||
on dummy supply. This avoids NULL checks before regulator_enable/disable
|
||||
@@ -23,7 +22,7 @@ Signed-off-by: Ondrej Jirman <megous@megous.com>
|
||||
|
||||
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c
|
||||
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c
|
||||
@@ -544,12 +544,10 @@ static int sun8i_dwmac_init(struct platf
|
||||
@@ -549,12 +549,10 @@ static int sun8i_dwmac_init(struct platf
|
||||
struct sunxi_priv_data *gmac = priv;
|
||||
int ret;
|
||||
|
||||
@@ -40,7 +39,7 @@ Signed-off-by: Ondrej Jirman <megous@megous.com>
|
||||
}
|
||||
|
||||
ret = clk_prepare_enable(gmac->tx_clk);
|
||||
@@ -1017,8 +1015,7 @@ static void sun8i_dwmac_exit(struct plat
|
||||
@@ -1021,8 +1019,7 @@ static void sun8i_dwmac_exit(struct plat
|
||||
|
||||
clk_disable_unprepare(gmac->tx_clk);
|
||||
|
||||
@@ -50,7 +49,7 @@ Signed-off-by: Ondrej Jirman <megous@megous.com>
|
||||
}
|
||||
|
||||
static void sun8i_dwmac_set_mac_loopback(void __iomem *ioaddr, bool enable)
|
||||
@@ -1155,12 +1152,12 @@ static int sun8i_dwmac_probe(struct plat
|
||||
@@ -1150,12 +1147,12 @@ static int sun8i_dwmac_probe(struct plat
|
||||
}
|
||||
|
||||
/* Optional regulator for PHY */
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
From 455e29ad5f37b40532b9cf56781dab3c3eb275b5 Mon Sep 17 00:00:00 2001
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Ondrej Jirman <megous@megous.com>
|
||||
Date: Tue, 20 Aug 2019 14:29:29 +0200
|
||||
Subject: [PATCH 03/14] net: stmmac: sun8i: Rename PHY regulator variable to
|
||||
Subject: [PATCH] net: stmmac: sun8i: Rename PHY regulator variable to
|
||||
regulator_phy
|
||||
|
||||
We'll be adding further optional regulators, and this makes it clearer
|
||||
@@ -9,12 +9,12 @@ what the regulator is for.
|
||||
|
||||
Signed-off-by: Ondrej Jirman <megous@megous.com>
|
||||
---
|
||||
.../net/ethernet/stmicro/stmmac/dwmac-sun8i.c | 32 ++++++++++---------
|
||||
1 file changed, 17 insertions(+), 15 deletions(-)
|
||||
.../net/ethernet/stmicro/stmmac/dwmac-sun8i.c | 39 +++++++++----------
|
||||
1 file changed, 19 insertions(+), 20 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c
|
||||
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c
|
||||
@@ -57,19 +57,21 @@ struct emac_variant {
|
||||
@@ -57,20 +57,22 @@ struct emac_variant {
|
||||
};
|
||||
|
||||
/* struct sunxi_priv_data - hold all sunxi private data
|
||||
@@ -25,6 +25,7 @@ Signed-off-by: Ondrej Jirman <megous@megous.com>
|
||||
- * @variant: reference to the current board variant
|
||||
- * @regmap: regmap for using the syscon
|
||||
- * @internal_phy_powered: Does the internal PHY is enabled
|
||||
- * @use_internal_phy: Is the internal PHY selected for use
|
||||
- * @mux_handle: Internal pointer used by mdio-mux lib
|
||||
+ * @tx_clk: reference to MAC TX clock
|
||||
+ * @ephy_clk: reference to the optional EPHY clock for
|
||||
@@ -35,6 +36,7 @@ Signed-off-by: Ondrej Jirman <megous@megous.com>
|
||||
+ * @variant: reference to the current board variant
|
||||
+ * @regmap: regmap for using the syscon
|
||||
+ * @internal_phy_powered: Does the internal PHY is enabled
|
||||
+ * @use_internal_phy: Is the internal PHY selected for use
|
||||
+ * @mux_handle: Internal pointer used by mdio-mux lib
|
||||
*/
|
||||
struct sunxi_priv_data {
|
||||
@@ -45,7 +47,7 @@ Signed-off-by: Ondrej Jirman <megous@megous.com>
|
||||
struct reset_control *rst_ephy;
|
||||
const struct emac_variant *variant;
|
||||
struct regmap_field *regmap_field;
|
||||
@@ -544,9 +546,9 @@ static int sun8i_dwmac_init(struct platf
|
||||
@@ -549,9 +551,9 @@ static int sun8i_dwmac_init(struct platf
|
||||
struct sunxi_priv_data *gmac = priv;
|
||||
int ret;
|
||||
|
||||
@@ -57,7 +59,17 @@ Signed-off-by: Ondrej Jirman <megous@megous.com>
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -1015,7 +1017,7 @@ static void sun8i_dwmac_exit(struct plat
|
||||
@@ -572,8 +574,7 @@ static int sun8i_dwmac_init(struct platf
|
||||
err_disable_clk:
|
||||
clk_disable_unprepare(gmac->tx_clk);
|
||||
err_disable_regulator:
|
||||
- if (gmac->regulator)
|
||||
- regulator_disable(gmac->regulator);
|
||||
+ regulator_disable(gmac->regulator_phy);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -1019,7 +1020,7 @@ static void sun8i_dwmac_exit(struct plat
|
||||
|
||||
clk_disable_unprepare(gmac->tx_clk);
|
||||
|
||||
@@ -66,16 +78,18 @@ Signed-off-by: Ondrej Jirman <megous@megous.com>
|
||||
}
|
||||
|
||||
static void sun8i_dwmac_set_mac_loopback(void __iomem *ioaddr, bool enable)
|
||||
@@ -1152,9 +1154,9 @@ static int sun8i_dwmac_probe(struct plat
|
||||
@@ -1147,11 +1148,9 @@ static int sun8i_dwmac_probe(struct plat
|
||||
}
|
||||
|
||||
/* Optional regulator for PHY */
|
||||
- gmac->regulator = devm_regulator_get(dev, "phy");
|
||||
- if (IS_ERR(gmac->regulator)) {
|
||||
- ret = PTR_ERR(gmac->regulator);
|
||||
- if (ret != -EPROBE_DEFER)
|
||||
- dev_err(dev, "Failed to get PHY regulator (%d)\n", ret);
|
||||
+ gmac->regulator_phy = devm_regulator_get(dev, "phy");
|
||||
+ if (IS_ERR(gmac->regulator_phy)) {
|
||||
+ ret = PTR_ERR(gmac->regulator_phy);
|
||||
if (ret != -EPROBE_DEFER)
|
||||
dev_err(dev, "Failed to get PHY regulator (%d)\n", ret);
|
||||
+ dev_err_probe(dev, ret, "Failed to get PHY regulator\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
From a2903d15de86fc3ab455a665e22ad6e5c27f8c43 Mon Sep 17 00:00:00 2001
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Ondrej Jirman <megous@megous.com>
|
||||
Date: Tue, 20 Aug 2019 14:31:38 +0200
|
||||
Subject: [PATCH 04/14] net: stmmac: sun8i: Add support for enabling a
|
||||
regulator for PHY I/O pins
|
||||
Subject: [PATCH] net: stmmac: sun8i: Add support for enabling a regulator for
|
||||
PHY I/O pins
|
||||
|
||||
Orange Pi 3 has two regulators that power the Realtek RTL8211E. According
|
||||
to the phy datasheet, both regulators need to be enabled at the same time.
|
||||
@@ -12,8 +12,8 @@ driver.
|
||||
|
||||
Signed-off-by: Ondrej Jirman <megous@megous.com>
|
||||
---
|
||||
.../net/ethernet/stmicro/stmmac/dwmac-sun8i.c | 30 ++++++++++++++++---
|
||||
1 file changed, 26 insertions(+), 4 deletions(-)
|
||||
.../net/ethernet/stmicro/stmmac/dwmac-sun8i.c | 23 ++++++++++++++++++-
|
||||
1 file changed, 22 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c
|
||||
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c
|
||||
@@ -26,7 +26,7 @@ Signed-off-by: Ondrej Jirman <megous@megous.com>
|
||||
* @rst_ephy: reference to the optional EPHY reset for
|
||||
* the internal PHY
|
||||
* @variant: reference to the current board variant
|
||||
@@ -72,6 +74,7 @@ struct sunxi_priv_data {
|
||||
@@ -73,6 +75,7 @@ struct sunxi_priv_data {
|
||||
struct clk *tx_clk;
|
||||
struct clk *ephy_clk;
|
||||
struct regulator *regulator_phy;
|
||||
@@ -34,7 +34,7 @@ Signed-off-by: Ondrej Jirman <megous@megous.com>
|
||||
struct reset_control *rst_ephy;
|
||||
const struct emac_variant *variant;
|
||||
struct regmap_field *regmap_field;
|
||||
@@ -546,21 +549,30 @@ static int sun8i_dwmac_init(struct platf
|
||||
@@ -551,10 +554,16 @@ static int sun8i_dwmac_init(struct platf
|
||||
struct sunxi_priv_data *gmac = priv;
|
||||
int ret;
|
||||
|
||||
@@ -52,24 +52,16 @@ Signed-off-by: Ondrej Jirman <megous@megous.com>
|
||||
}
|
||||
|
||||
ret = clk_prepare_enable(gmac->tx_clk);
|
||||
if (ret) {
|
||||
- if (gmac->regulator)
|
||||
- regulator_disable(gmac->regulator);
|
||||
dev_err(&pdev->dev, "Could not enable AHB clock\n");
|
||||
- return ret;
|
||||
+ goto err_disable_regulator_phy;
|
||||
}
|
||||
|
||||
return 0;
|
||||
+err_disable_regulator_phy:
|
||||
+ regulator_disable(gmac->regulator_phy);
|
||||
@@ -575,6 +584,8 @@ err_disable_clk:
|
||||
clk_disable_unprepare(gmac->tx_clk);
|
||||
err_disable_regulator:
|
||||
regulator_disable(gmac->regulator_phy);
|
||||
+err_disable_regulator_phy_io:
|
||||
+ regulator_disable(gmac->regulator_phy_io);
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
static void sun8i_dwmac_core_init(struct mac_device_info *hw,
|
||||
@@ -1018,6 +1030,7 @@ static void sun8i_dwmac_exit(struct plat
|
||||
return ret;
|
||||
}
|
||||
@@ -1021,6 +1032,7 @@ static void sun8i_dwmac_exit(struct plat
|
||||
clk_disable_unprepare(gmac->tx_clk);
|
||||
|
||||
regulator_disable(gmac->regulator_phy);
|
||||
@@ -77,7 +69,7 @@ Signed-off-by: Ondrej Jirman <megous@megous.com>
|
||||
}
|
||||
|
||||
static void sun8i_dwmac_set_mac_loopback(void __iomem *ioaddr, bool enable)
|
||||
@@ -1162,6 +1175,15 @@ static int sun8i_dwmac_probe(struct plat
|
||||
@@ -1154,6 +1166,15 @@ static int sun8i_dwmac_probe(struct plat
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
From 3a078af461185f3ed34c182616365da3a60c6b77 Mon Sep 17 00:00:00 2001
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Ondrej Jirman <megous@megous.com>
|
||||
Date: Tue, 20 Aug 2019 14:54:48 +0200
|
||||
Subject: [PATCH 05/14] arm64: dts: allwinner: orange-pi-3: Enable ethernet
|
||||
Subject: [PATCH] arm64: dts: allwinner: orange-pi-3: Enable ethernet
|
||||
|
||||
Orange Pi 3 has two regulators that power the Realtek RTL8211E
|
||||
PHY. According to the datasheet, both regulators need to be enabled
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
From df7cfa735a251371d3bbee07994fc5e8af55e508 Mon Sep 17 00:00:00 2001
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Icenowy Zheng <icenowy@aosc.io>
|
||||
Date: Mon, 25 Dec 2017 12:10:59 +0800
|
||||
Subject: [PATCH 07/14] arm64: allwinner: dts: h6: enable USB3 port on Pine H64
|
||||
Subject: [PATCH] arm64: allwinner: dts: h6: enable USB3 port on Pine H64
|
||||
|
||||
Pine H64 board have a USB3 port, which is connected to the USB3 pins of
|
||||
the H6 SoC, and the 5V power supply is controlled via GPIO (shared with
|
||||
@@ -1,67 +0,0 @@
|
||||
From e58355ab59c95b3ce708d3fdb417e3893170cfde Mon Sep 17 00:00:00 2001
|
||||
From: Ondrej Jirman <megous@megous.com>
|
||||
Date: Tue, 20 Aug 2019 14:34:57 +0200
|
||||
Subject: [PATCH 06/14] net: stmmac: sun8i: Fix reboot issue with ethernet on
|
||||
Orange Pi 3
|
||||
|
||||
We disable both phy regulators before reboot, so that they are in a
|
||||
known state on the next boot. This should be done in u-boot, but
|
||||
it doesn't support AXP806 yet, thus this workaround.
|
||||
|
||||
Signed-off-by: Ondrej Jirman <megous@megous.com>
|
||||
---
|
||||
.../net/ethernet/stmicro/stmmac/dwmac-sun8i.c | 22 +++++++++++++++++++
|
||||
1 file changed, 22 insertions(+)
|
||||
|
||||
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c
|
||||
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c
|
||||
@@ -17,6 +17,7 @@
|
||||
#include <linux/phy.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/regulator/consumer.h>
|
||||
+#include <linux/reboot.h>
|
||||
#include <linux/regmap.h>
|
||||
#include <linux/stmmac.h>
|
||||
|
||||
@@ -80,6 +81,7 @@ struct sunxi_priv_data {
|
||||
struct regmap_field *regmap_field;
|
||||
bool internal_phy_powered;
|
||||
void *mux_handle;
|
||||
+ struct notifier_block reboot_nb;
|
||||
};
|
||||
|
||||
/* EMAC clock register @ 0x30 in the "system control" address range */
|
||||
@@ -1130,6 +1132,19 @@ out_put_node:
|
||||
return regmap;
|
||||
}
|
||||
|
||||
+
|
||||
+static int sun8i_dwmac_reboot_notifier(struct notifier_block *nb,
|
||||
+ unsigned long action, void *data)
|
||||
+{
|
||||
+ struct sunxi_priv_data *gmac = container_of(nb, struct sunxi_priv_data,
|
||||
+ reboot_nb);
|
||||
+
|
||||
+ regulator_disable(gmac->regulator_phy);
|
||||
+ regulator_disable(gmac->regulator_phy_io);
|
||||
+
|
||||
+ return NOTIFY_DONE;
|
||||
+}
|
||||
+
|
||||
static int sun8i_dwmac_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct plat_stmmacenet_data *plat_dat;
|
||||
@@ -1184,6 +1199,13 @@ static int sun8i_dwmac_probe(struct plat
|
||||
return ret;
|
||||
}
|
||||
|
||||
+ gmac->reboot_nb.notifier_call = sun8i_dwmac_reboot_notifier;
|
||||
+ ret = devm_register_reboot_notifier(dev, &gmac->reboot_nb);
|
||||
+ if (ret) {
|
||||
+ dev_err(dev, "Failed to register reboot notifier (%d)\n", ret);
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
/* The "GMAC clock control" register might be located in the
|
||||
* CCU address range (on the R40), or the system control address
|
||||
* range (on most other sun8i and later SoCs).
|
||||
@@ -1,7 +1,7 @@
|
||||
From 8d6daa429e4b4c97131b16a69cd34ab486b2c248 Mon Sep 17 00:00:00 2001
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
Date: Fri, 16 Aug 2019 16:40:20 +0200
|
||||
Subject: [PATCH 08/14] arm64: dts: allwinner: h6: Add AC200 EPHY related nodes
|
||||
Subject: [PATCH] arm64: dts: allwinner: h6: Add AC200 EPHY related nodes
|
||||
|
||||
Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
---
|
||||
@@ -38,7 +38,7 @@ Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
};
|
||||
|
||||
watchdog: watchdog@30090a0 {
|
||||
@@ -363,6 +377,13 @@
|
||||
@@ -364,6 +378,13 @@
|
||||
drive-strength = <40>;
|
||||
};
|
||||
|
||||
@@ -52,7 +52,7 @@ Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
hdmi_pins: hdmi-pins {
|
||||
pins = "PH8", "PH9", "PH10";
|
||||
function = "hdmi";
|
||||
@@ -383,6 +404,11 @@
|
||||
@@ -384,6 +405,11 @@
|
||||
function = "i2c2";
|
||||
};
|
||||
|
||||
@@ -64,7 +64,7 @@ Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
mmc0_pins: mmc0-pins {
|
||||
pins = "PF0", "PF1", "PF2", "PF3",
|
||||
"PF4", "PF5";
|
||||
@@ -409,6 +435,11 @@
|
||||
@@ -410,6 +436,11 @@
|
||||
bias-pull-up;
|
||||
};
|
||||
|
||||
@@ -76,7 +76,7 @@ Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
/omit-if-no-ref/
|
||||
spi0_pins: spi0-pins {
|
||||
pins = "PC0", "PC2", "PC3";
|
||||
@@ -639,6 +670,31 @@
|
||||
@@ -640,6 +671,31 @@
|
||||
#size-cells = <0>;
|
||||
};
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
From b6b784bac19b9ee68b7f7ee5855216b76ac118cd Mon Sep 17 00:00:00 2001
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
Date: Wed, 15 Jan 2020 18:39:17 +0100
|
||||
Subject: [PATCH 09/14] arm64: dts: allwinner: h6: tanix-tx6: enable emmc
|
||||
Subject: [PATCH] arm64: dts: allwinner: h6: tanix-tx6: enable emmc
|
||||
|
||||
Tanix TX6 has 32 GiB eMMC. Add a node for it.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
From ff190627e3986569a2516f36e218adcde02fc78b Mon Sep 17 00:00:00 2001
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
Date: Sat, 24 Aug 2019 01:03:05 +0200
|
||||
Subject: [PATCH 10/14] arm64: dts: allwinner: h6: tanix-tx6: enable ethernet
|
||||
Subject: [PATCH] arm64: dts: allwinner: h6: tanix-tx6: enable ethernet
|
||||
|
||||
Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
---
|
||||
@@ -1,7 +1,7 @@
|
||||
From 483a90d0500c528b2faeed662c3209f779d43103 Mon Sep 17 00:00:00 2001
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Meyer <git-commit@mailhell.seb7.de>
|
||||
Date: Mon, 3 Feb 2020 21:27:47 +0100
|
||||
Subject: [PATCH 11/14] arm64: allwinner: h6: Enable USB3 for OrangePi Lite2
|
||||
Subject: [PATCH] arm64: allwinner: h6: Enable USB3 for OrangePi Lite2
|
||||
|
||||
Signed-off-by: Sebastian Meyer <git-commit@mailhell.seb7.de>
|
||||
---
|
||||
@@ -1,9 +1,9 @@
|
||||
From 4b723d23c444ae9dc85ecea51a1ae4de092ddf54 Mon Sep 17 00:00:00 2001
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Alejandro=20Gonz=C3=A1lez?=
|
||||
<alejandro.gonzalez.correo@gmail.com>
|
||||
Date: Sun, 25 Aug 2019 17:05:58 +0200
|
||||
Subject: [PATCH 12/14] mmc: sunxi: fix unusuable eMMC on some H6 boards by
|
||||
disabling DDR
|
||||
Subject: [PATCH] mmc: sunxi: fix unusuable eMMC on some H6 boards by disabling
|
||||
DDR
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
@@ -1,7 +1,7 @@
|
||||
From 083e09f834e58cad72671e4df2136cf36c10aaa7 Mon Sep 17 00:00:00 2001
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
Date: Thu, 29 Oct 2020 21:04:24 +0100
|
||||
Subject: [PATCH 13/14] pineh64 model b - bluetooth wip
|
||||
Subject: [PATCH] pineh64 model b - bluetooth wip
|
||||
|
||||
Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
|
||||
---
|
||||
@@ -1,27 +0,0 @@
|
||||
From 64954a507d442da5c2615897e6d35154c9c2f593 Mon Sep 17 00:00:00 2001
|
||||
From: Samuel Holland <samuel@sholland.org>
|
||||
Date: Tue, 8 Dec 2020 19:48:39 -0600
|
||||
Subject: [PATCH 14/14] hack to fix sun8i_dwmac
|
||||
|
||||
---
|
||||
drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c
|
||||
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c
|
||||
@@ -1310,12 +1310,14 @@ static const struct of_device_id sun8i_d
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, sun8i_dwmac_match);
|
||||
|
||||
+static SIMPLE_DEV_PM_OPS(sun8i_dwmac_pm_ops, stmmac_suspend, stmmac_resume);
|
||||
+
|
||||
static struct platform_driver sun8i_dwmac_driver = {
|
||||
.probe = sun8i_dwmac_probe,
|
||||
.remove = stmmac_pltfr_remove,
|
||||
.driver = {
|
||||
.name = "dwmac-sun8i",
|
||||
- .pm = &stmmac_pltfr_pm_ops,
|
||||
+ .pm = &sun8i_dwmac_pm_ops,
|
||||
.of_match_table = sun8i_dwmac_match,
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,82 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Samuel Holland <samuel@sholland.org>
|
||||
Date: Sat, 16 Jan 2021 01:58:22 -0600
|
||||
Subject: [PATCH] allwinner: psci: Improve system shutdown/reset sequence
|
||||
|
||||
- When the SCPI shutdown/reset command returns success, the SCPI
|
||||
implementation is still waiting for the CPU to enter WFI. Do that.
|
||||
- Peform board-level poweroff before CPU poweroff. If there is a PMIC
|
||||
available, it will turn everything off including the CPUs, so doing
|
||||
CPU poweroff first is a waste of cycles.
|
||||
- During poweroff, attempt to turn off the local CPU using the ARISC.
|
||||
This should use slightly less power than just an infinite WFI.
|
||||
- Drop the WFI in the reset failure path. The panic will hang anyway.
|
||||
|
||||
Change-Id: I897efecb3fe4e77a56041b97dd273156ec51ef8e
|
||||
Signed-off-by: Samuel Holland <samuel@sholland.org>
|
||||
---
|
||||
plat/allwinner/common/sunxi_pm.c | 26 ++++++++++++++++----------
|
||||
1 file changed, 16 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/plat/allwinner/common/sunxi_pm.c b/plat/allwinner/common/sunxi_pm.c
|
||||
index 03985f40be55..038f2b7edb2f 100644
|
||||
--- a/plat/allwinner/common/sunxi_pm.c
|
||||
+++ b/plat/allwinner/common/sunxi_pm.c
|
||||
@@ -125,24 +125,29 @@ static void sunxi_pwr_domain_on_finish(const psci_power_state_t *target_state)
|
||||
|
||||
static void __dead2 sunxi_system_off(void)
|
||||
{
|
||||
+ u_register_t mpidr = read_mpidr();
|
||||
+
|
||||
gicv2_cpuif_disable();
|
||||
|
||||
if (scpi_available) {
|
||||
/* Send the power down request to the SCP */
|
||||
uint32_t ret = scpi_sys_power_state(scpi_system_shutdown);
|
||||
|
||||
- if (ret != SCP_OK)
|
||||
- ERROR("PSCI: SCPI %s failed: %d\n", "shutdown", ret);
|
||||
+ if (ret == SCP_OK)
|
||||
+ wfi();
|
||||
+
|
||||
+ ERROR("PSCI: SCPI %s failed: %d\n", "shutdown", ret);
|
||||
}
|
||||
|
||||
- /* Turn off all secondary CPUs */
|
||||
- sunxi_disable_secondary_cpus(read_mpidr());
|
||||
-
|
||||
+ /* Attempt to power down the board (may not return) */
|
||||
sunxi_power_down();
|
||||
|
||||
- udelay(1000);
|
||||
+ /* Turn off all CPUs */
|
||||
+ sunxi_disable_secondary_cpus(mpidr);
|
||||
+ sunxi_cpu_off(mpidr);
|
||||
+ wfi();
|
||||
+
|
||||
ERROR("PSCI: Cannot turn off system, halting\n");
|
||||
- wfi();
|
||||
panic();
|
||||
}
|
||||
|
||||
@@ -154,8 +159,10 @@ static void __dead2 sunxi_system_reset(void)
|
||||
/* Send the system reset request to the SCP */
|
||||
uint32_t ret = scpi_sys_power_state(scpi_system_reboot);
|
||||
|
||||
- if (ret != SCP_OK)
|
||||
- ERROR("PSCI: SCPI %s failed: %d\n", "reboot", ret);
|
||||
+ if (ret == SCP_OK)
|
||||
+ wfi();
|
||||
+
|
||||
+ ERROR("PSCI: SCPI %s failed: %d\n", "reboot", ret);
|
||||
}
|
||||
|
||||
/* Reset the whole system when the watchdog times out */
|
||||
@@ -166,7 +173,6 @@ static void __dead2 sunxi_system_reset(void)
|
||||
mdelay(1000);
|
||||
|
||||
ERROR("PSCI: System reset failed\n");
|
||||
- wfi();
|
||||
panic();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Samuel Holland <samuel@sholland.org>
|
||||
Date: Sat, 2 Jan 2021 15:52:27 -0600
|
||||
Subject: [PATCH] Input: axp20x-pek - allow wakeup after shutdown
|
||||
|
||||
While the AXP20x PMIC handles the power button itself after shutting
|
||||
down, it is not always possible to use the PMIC's built-in shutdown
|
||||
feature, such as when other wakeup sources are needed (for example, an
|
||||
IR remote or wake-on-LAN) that require firmware support. In that case,
|
||||
the PMIC remains on, but suspended, until the board is powered back on.
|
||||
|
||||
During this "fake" off state, IRQ configuration is similar to system
|
||||
sleep, where enable_irq_wake() must be call on an IRQ for it to be
|
||||
wakeup capable. Run the suspend callback to arm the power button IRQs
|
||||
during the shutdown process, so the power button works in this state.
|
||||
|
||||
Signed-off-by: Samuel Holland <samuel@sholland.org>
|
||||
---
|
||||
drivers/input/misc/axp20x-pek.c | 8 +++++++-
|
||||
1 file changed, 7 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/input/misc/axp20x-pek.c
|
||||
+++ b/drivers/input/misc/axp20x-pek.c
|
||||
@@ -354,7 +354,7 @@ static int axp20x_pek_probe(struct platf
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int __maybe_unused axp20x_pek_suspend(struct device *dev)
|
||||
+static int axp20x_pek_suspend(struct device *dev)
|
||||
{
|
||||
struct axp20x_pek *axp20x_pek = dev_get_drvdata(dev);
|
||||
|
||||
@@ -413,6 +413,11 @@ static const struct dev_pm_ops axp20x_pe
|
||||
#endif
|
||||
};
|
||||
|
||||
+static void axp20x_pek_shutdown(struct platform_device *pdev)
|
||||
+{
|
||||
+ axp20x_pek_suspend(&pdev->dev);
|
||||
+}
|
||||
+
|
||||
static const struct platform_device_id axp_pek_id_match[] = {
|
||||
{
|
||||
.name = "axp20x-pek",
|
||||
@@ -428,6 +433,7 @@ MODULE_DEVICE_TABLE(platform, axp_pek_id
|
||||
|
||||
static struct platform_driver axp20x_pek_driver = {
|
||||
.probe = axp20x_pek_probe,
|
||||
+ .shutdown = axp20x_pek_shutdown,
|
||||
.id_table = axp_pek_id_match,
|
||||
.driver = {
|
||||
.name = "axp20x-pek",
|
||||
@@ -1,137 +0,0 @@
|
||||
From 49d3e172a2e06e7670c508e1d960282d40e7237e Mon Sep 17 00:00:00 2001
|
||||
From: Samuel Holland <samuel@sholland.org>
|
||||
Date: Wed, 12 Feb 2020 22:58:30 -0600
|
||||
Subject: [PATCH 01/31] i2c: mv64xxx: Add runtime PM support
|
||||
|
||||
To save power, gate the clock when the bus is inactive, and during
|
||||
system suspend. Also reset the controller during system suspend, since
|
||||
it may be used by platform firmware, and we don't want to make any
|
||||
assumptions about the hardware state at resume.
|
||||
|
||||
On some platforms, specifically Allwinner A13/A20, gating the clock
|
||||
implicitly resets the module as well. Since the module already needs to
|
||||
be reset after some suspend/resume cycles, it is simple enough to reset
|
||||
it during every runtime suspend/resume.
|
||||
|
||||
Because the bus may be used by wakeup source IRQ threads, it needs to be
|
||||
functional as soon as IRQs are enabled. Thus, its system PM hooks need
|
||||
to run in the noirq phase.
|
||||
|
||||
Signed-off-by: Samuel Holland <samuel@sholland.org>
|
||||
---
|
||||
drivers/i2c/busses/i2c-mv64xxx.c | 52 ++++++++++++++++++++++++++------
|
||||
1 file changed, 42 insertions(+), 10 deletions(-)
|
||||
|
||||
--- a/drivers/i2c/busses/i2c-mv64xxx.c
|
||||
+++ b/drivers/i2c/busses/i2c-mv64xxx.c
|
||||
@@ -17,6 +17,7 @@
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/mv643xx_i2c.h>
|
||||
#include <linux/platform_device.h>
|
||||
+#include <linux/pm_runtime.h>
|
||||
#include <linux/reset.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/of.h>
|
||||
@@ -713,6 +714,10 @@ mv64xxx_i2c_xfer(struct i2c_adapter *ada
|
||||
struct mv64xxx_i2c_data *drv_data = i2c_get_adapdata(adap);
|
||||
int rc, ret = num;
|
||||
|
||||
+ rc = pm_runtime_get_sync(&adap->dev);
|
||||
+ if (rc < 0)
|
||||
+ return rc;
|
||||
+
|
||||
BUG_ON(drv_data->msgs != NULL);
|
||||
drv_data->msgs = msgs;
|
||||
drv_data->num_msgs = num;
|
||||
@@ -728,6 +733,9 @@ mv64xxx_i2c_xfer(struct i2c_adapter *ada
|
||||
drv_data->num_msgs = 0;
|
||||
drv_data->msgs = NULL;
|
||||
|
||||
+ pm_runtime_mark_last_busy(&adap->dev);
|
||||
+ pm_runtime_put_autosuspend(&adap->dev);
|
||||
+
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -950,6 +958,11 @@ mv64xxx_i2c_probe(struct platform_device
|
||||
goto exit_free_irq;
|
||||
}
|
||||
|
||||
+ pm_runtime_set_active(&pd->dev);
|
||||
+ pm_runtime_set_autosuspend_delay(&pd->dev, 1000);
|
||||
+ pm_runtime_use_autosuspend(&pd->dev);
|
||||
+ pm_runtime_enable(&pd->dev);
|
||||
+
|
||||
return 0;
|
||||
|
||||
exit_free_irq:
|
||||
@@ -968,40 +981,59 @@ mv64xxx_i2c_remove(struct platform_devic
|
||||
{
|
||||
struct mv64xxx_i2c_data *drv_data = platform_get_drvdata(dev);
|
||||
|
||||
+ pm_runtime_get_sync(&dev->dev);
|
||||
+
|
||||
i2c_del_adapter(&drv_data->adapter);
|
||||
free_irq(drv_data->irq, drv_data);
|
||||
reset_control_assert(drv_data->rstc);
|
||||
clk_disable_unprepare(drv_data->reg_clk);
|
||||
clk_disable_unprepare(drv_data->clk);
|
||||
|
||||
+ pm_runtime_put_noidle(&dev->dev);
|
||||
+ pm_runtime_disable(&dev->dev);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int __maybe_unused mv64xxx_i2c_runtime_suspend(struct device *dev)
|
||||
+{
|
||||
+ struct mv64xxx_i2c_data *drv_data = dev_get_drvdata(dev);
|
||||
+
|
||||
+ reset_control_assert(drv_data->rstc);
|
||||
+ clk_disable_unprepare(drv_data->reg_clk);
|
||||
+ clk_disable_unprepare(drv_data->clk);
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
-#ifdef CONFIG_PM
|
||||
-static int mv64xxx_i2c_resume(struct device *dev)
|
||||
+static int __maybe_unused mv64xxx_i2c_runtime_resume(struct device *dev)
|
||||
{
|
||||
struct mv64xxx_i2c_data *drv_data = dev_get_drvdata(dev);
|
||||
|
||||
+ if (!IS_ERR(drv_data->clk))
|
||||
+ clk_prepare_enable(drv_data->clk);
|
||||
+ if (!IS_ERR(drv_data->reg_clk))
|
||||
+ clk_prepare_enable(drv_data->reg_clk);
|
||||
+ reset_control_reset(drv_data->rstc);
|
||||
+
|
||||
mv64xxx_i2c_hw_init(drv_data);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static const struct dev_pm_ops mv64xxx_i2c_pm = {
|
||||
- .resume = mv64xxx_i2c_resume,
|
||||
+static const struct dev_pm_ops mv64xxx_i2c_pm_ops = {
|
||||
+ SET_RUNTIME_PM_OPS(mv64xxx_i2c_runtime_suspend,
|
||||
+ mv64xxx_i2c_runtime_resume, NULL)
|
||||
+ SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
|
||||
+ pm_runtime_force_resume)
|
||||
};
|
||||
|
||||
-#define mv64xxx_i2c_pm_ops (&mv64xxx_i2c_pm)
|
||||
-#else
|
||||
-#define mv64xxx_i2c_pm_ops NULL
|
||||
-#endif
|
||||
-
|
||||
static struct platform_driver mv64xxx_i2c_driver = {
|
||||
.probe = mv64xxx_i2c_probe,
|
||||
.remove = mv64xxx_i2c_remove,
|
||||
.driver = {
|
||||
.name = MV64XXX_I2C_CTLR_NAME,
|
||||
- .pm = mv64xxx_i2c_pm_ops,
|
||||
+ .pm = &mv64xxx_i2c_pm_ops,
|
||||
.of_match_table = mv64xxx_i2c_of_match_table,
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,93 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Samuel Holland <samuel@sholland.org>
|
||||
Date: Sun, 3 Jan 2021 05:17:41 -0600
|
||||
Subject: [PATCH] net: stmmac: dwmac-sun8i: Fix probe error handling
|
||||
|
||||
stmmac_pltfr_remove does three things in one function, making it
|
||||
inapproprate for unwinding the steps in the probe function. Currently,
|
||||
a failure before the call to stmmac_dvr_probe would leak OF node
|
||||
references due to missing a call to stmmac_remove_config_dt. And an
|
||||
error in stmmac_dvr_probe would cause the driver to attempt to remove a
|
||||
netdevice that was never added. Fix these by reordering the init and
|
||||
splitting out the error handling steps.
|
||||
|
||||
Fixes: 9f93ac8d4085 ("net-next: stmmac: Add dwmac-sun8i")
|
||||
Fixes: 40a1dcee2d18 ("net: ethernet: dwmac-sun8i: Use the correct function in exit path")
|
||||
Signed-off-by: Samuel Holland <samuel@sholland.org>
|
||||
Reviewed-by: Chen-Yu Tsai <wens@csie.org>
|
||||
---
|
||||
.../net/ethernet/stmicro/stmmac/dwmac-sun8i.c | 25 +++++++++++--------
|
||||
1 file changed, 15 insertions(+), 10 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c
|
||||
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c
|
||||
@@ -1134,10 +1134,6 @@ static int sun8i_dwmac_probe(struct plat
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
- plat_dat = stmmac_probe_config_dt(pdev, &stmmac_res.mac);
|
||||
- if (IS_ERR(plat_dat))
|
||||
- return PTR_ERR(plat_dat);
|
||||
-
|
||||
gmac = devm_kzalloc(dev, sizeof(*gmac), GFP_KERNEL);
|
||||
if (!gmac)
|
||||
return -ENOMEM;
|
||||
@@ -1201,11 +1197,15 @@ static int sun8i_dwmac_probe(struct plat
|
||||
ret = of_get_phy_mode(dev->of_node, &interface);
|
||||
if (ret)
|
||||
return -EINVAL;
|
||||
- plat_dat->interface = interface;
|
||||
+
|
||||
+ plat_dat = stmmac_probe_config_dt(pdev, &stmmac_res.mac);
|
||||
+ if (IS_ERR(plat_dat))
|
||||
+ return PTR_ERR(plat_dat);
|
||||
|
||||
/* platform data specifying hardware features and callbacks.
|
||||
* hardware features were copied from Allwinner drivers.
|
||||
*/
|
||||
+ plat_dat->interface = interface;
|
||||
plat_dat->rx_coe = STMMAC_RX_COE_TYPE2;
|
||||
plat_dat->tx_coe = 1;
|
||||
plat_dat->has_sun8i = true;
|
||||
@@ -1216,7 +1216,7 @@ static int sun8i_dwmac_probe(struct plat
|
||||
|
||||
ret = sun8i_dwmac_init(pdev, plat_dat->bsp_priv);
|
||||
if (ret)
|
||||
- return ret;
|
||||
+ goto dwmac_deconfig;
|
||||
|
||||
ret = stmmac_dvr_probe(&pdev->dev, plat_dat, &stmmac_res);
|
||||
if (ret)
|
||||
@@ -1230,7 +1230,7 @@ static int sun8i_dwmac_probe(struct plat
|
||||
if (gmac->variant->soc_has_internal_phy) {
|
||||
ret = get_ephy_nodes(priv);
|
||||
if (ret)
|
||||
- goto dwmac_exit;
|
||||
+ goto dwmac_remove;
|
||||
ret = sun8i_dwmac_register_mdio_mux(priv);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "Failed to register mux\n");
|
||||
@@ -1239,15 +1239,20 @@ static int sun8i_dwmac_probe(struct plat
|
||||
} else {
|
||||
ret = sun8i_dwmac_reset(priv);
|
||||
if (ret)
|
||||
- goto dwmac_exit;
|
||||
+ goto dwmac_remove;
|
||||
}
|
||||
|
||||
return ret;
|
||||
dwmac_mux:
|
||||
sun8i_dwmac_unset_syscon(gmac);
|
||||
+dwmac_remove:
|
||||
+ stmmac_dvr_remove(&pdev->dev);
|
||||
dwmac_exit:
|
||||
- stmmac_pltfr_remove(pdev);
|
||||
-return ret;
|
||||
+ sun8i_dwmac_exit(pdev, gmac);
|
||||
+dwmac_deconfig:
|
||||
+ stmmac_remove_config_dt(pdev, plat_dat);
|
||||
+
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
static const struct of_device_id sun8i_dwmac_match[] = {
|
||||
@@ -0,0 +1,87 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Samuel Holland <samuel@sholland.org>
|
||||
Date: Sun, 3 Jan 2021 05:17:42 -0600
|
||||
Subject: [PATCH] net: stmmac: dwmac-sun8i: Balance internal PHY resource
|
||||
references
|
||||
|
||||
While stmmac_pltfr_remove calls sun8i_dwmac_exit, the sun8i_dwmac_init
|
||||
and sun8i_dwmac_exit functions are also called by the stmmac_platform
|
||||
suspend/resume callbacks. They may be called many times during the
|
||||
device's lifetime and should not release resources used by the driver.
|
||||
|
||||
Furthermore, there was no error handling in case registering the MDIO
|
||||
mux failed during probe, and the EPHY clock was never released at all.
|
||||
|
||||
Fix all of these issues by moving the deinitialization code to a driver
|
||||
removal callback. Also ensure the EPHY is powered down before removal.
|
||||
|
||||
Fixes: 634db83b8265 ("net: stmmac: dwmac-sun8i: Handle integrated/external MDIOs")
|
||||
Signed-off-by: Samuel Holland <samuel@sholland.org>
|
||||
Reviewed-by: Chen-Yu Tsai <wens@csie.org>
|
||||
---
|
||||
.../net/ethernet/stmicro/stmmac/dwmac-sun8i.c | 27 ++++++++++++++-----
|
||||
1 file changed, 21 insertions(+), 6 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c
|
||||
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c
|
||||
@@ -1004,17 +1004,12 @@ static void sun8i_dwmac_exit(struct plat
|
||||
struct sunxi_priv_data *gmac = priv;
|
||||
|
||||
if (gmac->variant->soc_has_internal_phy) {
|
||||
- /* sun8i_dwmac_exit could be called with mdiomux uninit */
|
||||
- if (gmac->mux_handle)
|
||||
- mdio_mux_uninit(gmac->mux_handle);
|
||||
if (gmac->internal_phy_powered)
|
||||
sun8i_dwmac_unpower_internal_phy(gmac);
|
||||
}
|
||||
|
||||
sun8i_dwmac_unset_syscon(gmac);
|
||||
|
||||
- reset_control_put(gmac->rst_ephy);
|
||||
-
|
||||
clk_disable_unprepare(gmac->tx_clk);
|
||||
|
||||
if (gmac->regulator)
|
||||
@@ -1244,6 +1239,8 @@ static int sun8i_dwmac_probe(struct plat
|
||||
|
||||
return ret;
|
||||
dwmac_mux:
|
||||
+ reset_control_put(gmac->rst_ephy);
|
||||
+ clk_put(gmac->ephy_clk);
|
||||
sun8i_dwmac_unset_syscon(gmac);
|
||||
dwmac_remove:
|
||||
stmmac_dvr_remove(&pdev->dev);
|
||||
@@ -1255,6 +1252,24 @@ dwmac_deconfig:
|
||||
return ret;
|
||||
}
|
||||
|
||||
+static int sun8i_dwmac_remove(struct platform_device *pdev)
|
||||
+{
|
||||
+ struct net_device *ndev = platform_get_drvdata(pdev);
|
||||
+ struct stmmac_priv *priv = netdev_priv(ndev);
|
||||
+ struct sunxi_priv_data *gmac = priv->plat->bsp_priv;
|
||||
+
|
||||
+ if (gmac->variant->soc_has_internal_phy) {
|
||||
+ mdio_mux_uninit(gmac->mux_handle);
|
||||
+ sun8i_dwmac_unpower_internal_phy(gmac);
|
||||
+ reset_control_put(gmac->rst_ephy);
|
||||
+ clk_put(gmac->ephy_clk);
|
||||
+ }
|
||||
+
|
||||
+ stmmac_pltfr_remove(pdev);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static const struct of_device_id sun8i_dwmac_match[] = {
|
||||
{ .compatible = "allwinner,sun8i-h3-emac",
|
||||
.data = &emac_variant_h3 },
|
||||
@@ -1274,7 +1289,7 @@ MODULE_DEVICE_TABLE(of, sun8i_dwmac_matc
|
||||
|
||||
static struct platform_driver sun8i_dwmac_driver = {
|
||||
.probe = sun8i_dwmac_probe,
|
||||
- .remove = stmmac_pltfr_remove,
|
||||
+ .remove = sun8i_dwmac_remove,
|
||||
.driver = {
|
||||
.name = "dwmac-sun8i",
|
||||
.pm = &stmmac_pltfr_pm_ops,
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user