mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-20 06:08:08 +00:00
eb777539fd
This commit contains patches for PCI aardvark driver and relevant DTS changes for Turris MOX and EspressoBin backported from mainline kernel. It fixes support for old ATF, various wifi cards, mainly Compex WLE900VX. Signed-off-by: Pali Rohár <pali@kernel.org>
107 lines
3.2 KiB
Diff
107 lines
3.2 KiB
Diff
From ea17a0f153af2cd890e4ce517130dcccaa428c13 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Pali=20Roh=C3=A1r?= <pali@kernel.org>
|
|
Date: Wed, 2 Sep 2020 16:43:43 +0200
|
|
Subject: [PATCH] phy: marvell: comphy: Convert internal SMCC firmware return
|
|
codes to errno
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
Driver ->power_on and ->power_off callbacks leaks internal SMCC firmware
|
|
return codes to phy caller. This patch converts SMCC error codes to
|
|
standard linux errno codes. Include file linux/arm-smccc.h already provides
|
|
defines for SMCC error codes, so use them instead of custom driver defines.
|
|
Note that return value is signed 32bit, but stored in unsigned long type
|
|
with zero padding.
|
|
|
|
Tested-by: Tomasz Maciej Nowak <tmn505@gmail.com>
|
|
Link: https://lore.kernel.org/r/20200902144344.16684-2-pali@kernel.org
|
|
Signed-off-by: Pali Rohár <pali@kernel.org>
|
|
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
|
|
Reviewed-by: Rob Herring <robh@kernel.org>
|
|
---
|
|
drivers/phy/marvell/phy-mvebu-a3700-comphy.c | 14 +++++++++++---
|
|
drivers/phy/marvell/phy-mvebu-cp110-comphy.c | 14 +++++++++++---
|
|
2 files changed, 22 insertions(+), 6 deletions(-)
|
|
|
|
--- a/drivers/phy/marvell/phy-mvebu-a3700-comphy.c
|
|
+++ b/drivers/phy/marvell/phy-mvebu-a3700-comphy.c
|
|
@@ -26,7 +26,6 @@
|
|
#define COMPHY_SIP_POWER_ON 0x82000001
|
|
#define COMPHY_SIP_POWER_OFF 0x82000002
|
|
#define COMPHY_SIP_PLL_LOCK 0x82000003
|
|
-#define COMPHY_FW_NOT_SUPPORTED (-1)
|
|
|
|
#define COMPHY_FW_MODE_SATA 0x1
|
|
#define COMPHY_FW_MODE_SGMII 0x2
|
|
@@ -112,10 +111,19 @@ static int mvebu_a3700_comphy_smc(unsign
|
|
unsigned long mode)
|
|
{
|
|
struct arm_smccc_res res;
|
|
+ s32 ret;
|
|
|
|
arm_smccc_smc(function, lane, mode, 0, 0, 0, 0, 0, &res);
|
|
+ ret = res.a0;
|
|
|
|
- return res.a0;
|
|
+ switch (ret) {
|
|
+ case SMCCC_RET_SUCCESS:
|
|
+ return 0;
|
|
+ case SMCCC_RET_NOT_SUPPORTED:
|
|
+ return -EOPNOTSUPP;
|
|
+ default:
|
|
+ return -EINVAL;
|
|
+ }
|
|
}
|
|
|
|
static int mvebu_a3700_comphy_get_fw_mode(int lane, int port,
|
|
@@ -220,7 +228,7 @@ static int mvebu_a3700_comphy_power_on(s
|
|
}
|
|
|
|
ret = mvebu_a3700_comphy_smc(COMPHY_SIP_POWER_ON, lane->id, fw_param);
|
|
- if (ret == COMPHY_FW_NOT_SUPPORTED)
|
|
+ if (ret == -EOPNOTSUPP)
|
|
dev_err(lane->dev,
|
|
"unsupported SMC call, try updating your firmware\n");
|
|
|
|
--- a/drivers/phy/marvell/phy-mvebu-cp110-comphy.c
|
|
+++ b/drivers/phy/marvell/phy-mvebu-cp110-comphy.c
|
|
@@ -123,7 +123,6 @@
|
|
|
|
#define COMPHY_SIP_POWER_ON 0x82000001
|
|
#define COMPHY_SIP_POWER_OFF 0x82000002
|
|
-#define COMPHY_FW_NOT_SUPPORTED (-1)
|
|
|
|
/*
|
|
* A lane is described by the following bitfields:
|
|
@@ -273,10 +272,19 @@ static int mvebu_comphy_smc(unsigned lon
|
|
unsigned long lane, unsigned long mode)
|
|
{
|
|
struct arm_smccc_res res;
|
|
+ s32 ret;
|
|
|
|
arm_smccc_smc(function, phys, lane, mode, 0, 0, 0, 0, &res);
|
|
+ ret = res.a0;
|
|
|
|
- return res.a0;
|
|
+ switch (ret) {
|
|
+ case SMCCC_RET_SUCCESS:
|
|
+ return 0;
|
|
+ case SMCCC_RET_NOT_SUPPORTED:
|
|
+ return -EOPNOTSUPP;
|
|
+ default:
|
|
+ return -EINVAL;
|
|
+ }
|
|
}
|
|
|
|
static int mvebu_comphy_get_mode(bool fw_mode, int lane, int port,
|
|
@@ -819,7 +827,7 @@ static int mvebu_comphy_power_on(struct
|
|
if (!ret)
|
|
return ret;
|
|
|
|
- if (ret == COMPHY_FW_NOT_SUPPORTED)
|
|
+ if (ret == -EOPNOTSUPP)
|
|
dev_err(priv->dev,
|
|
"unsupported SMC call, try updating your firmware\n");
|
|
|