[PATCH] phy: marvell: a3700: add sata comphy on lane 2 with invert option

From: zachary zhangzg@marvell.com
- This patch moves sata phy powerup from dedicate phy to compphy and adds invert option for sata powerup routine.
Change-Id: I1b4e8753e2b2c14c6efa97bca2ffc7d2553d8a90 Signed-off-by: zachary zhangzg@marvell.com Signed-off-by: Ken Ma make@marvell.com Reviewed-on: http://vgitil04.il.marvell.com:8080/53601 Reviewed-by: Igal Liberman igall@marvell.com Tested-by: Igal Liberman igall@marvell.com [a.heider: adapt to mainline] Signed-off-by: Andre Heider a.heider@gmail.com ---
This is based on the downstream patch: https://github.com/MarvellEmbeddedProcessors/u-boot-marvell/commit/0a5b15980...
Fixes SATA on my espressobin v5.
drivers/phy/marvell/comphy_a3700.c | 33 +++++++++++++----------------- 1 file changed, 14 insertions(+), 19 deletions(-)
diff --git a/drivers/phy/marvell/comphy_a3700.c b/drivers/phy/marvell/comphy_a3700.c index dc188c44e0..4606de6f48 100644 --- a/drivers/phy/marvell/comphy_a3700.c +++ b/drivers/phy/marvell/comphy_a3700.c @@ -273,16 +273,23 @@ static void reg_set_indirect(u32 reg, u16 data, u16 mask) * * return: 1 if PLL locked (OK), 0 otherwise (FAIL) */ -static int comphy_sata_power_up(void) +static int comphy_sata_power_up(u32 invert) { int ret; + u32 data = 0;
debug_enter();
/* - * 0. Swap SATA TX lines + * 0. Check the Polarity invert bits */ - reg_set_indirect(vphy_sync_pattern_reg, bs_txd_inv, bs_txd_inv); + if (invert & PHY_POLARITY_TXD_INVERT) + data |= bs_txd_inv; + + if (invert & PHY_POLARITY_RXD_INVERT) + data |= bs_rxd_inv; + + reg_set_indirect(vphy_sync_pattern_reg, data, bs_txd_inv | bs_rxd_inv);
/* * 1. Select 40-bit data width width @@ -924,22 +931,6 @@ void comphy_dedicated_phys_init(void) } }
- node = fdt_node_offset_by_compatible(blob, -1, - "marvell,armada-3700-ahci"); - if (node > 0) { - if (fdtdec_get_is_enabled(blob, node)) { - ret = comphy_sata_power_up(); - if (!ret) - printf("Failed to initialize SATA PHY\n"); - else - debug("SATA PHY init succeed\n"); - } else { - debug("SATA node is disabled\n"); - } - } else { - debug("No SATA node in DT\n"); - } - node = fdt_node_offset_by_compatible(blob, -1, "marvell,armada-8k-sdhci"); if (node <= 0) { @@ -1007,6 +998,10 @@ int comphy_a3700_init(struct chip_serdes_phy_config *chip_cfg, comphy_map->invert); break;
+ case PHY_TYPE_SATA0: + ret = comphy_sata_power_up(comphy_map->invert); + break; + default: debug("Unknown SerDes type, skip initialize SerDes %d\n", lane);

On Friday 28 August 2020 16:56:29 Andre Heider wrote:
From: zachary zhangzg@marvell.com
- This patch moves sata phy powerup from dedicate phy to compphy and adds invert option for sata powerup routine.
Change-Id: I1b4e8753e2b2c14c6efa97bca2ffc7d2553d8a90 Signed-off-by: zachary zhangzg@marvell.com Signed-off-by: Ken Ma make@marvell.com Reviewed-on: http://vgitil04.il.marvell.com:8080/53601 Reviewed-by: Igal Liberman igall@marvell.com Tested-by: Igal Liberman igall@marvell.com [a.heider: adapt to mainline] Signed-off-by: Andre Heider a.heider@gmail.com
Tested-by: Pali Rohár pali@kernel.org
This is based on the downstream patch: https://github.com/MarvellEmbeddedProcessors/u-boot-marvell/commit/0a5b15980...
Fixes SATA on my espressobin v5.
Thanks! It really fixed SATA support on EspressoBin v5 test unit.
drivers/phy/marvell/comphy_a3700.c | 33 +++++++++++++----------------- 1 file changed, 14 insertions(+), 19 deletions(-)
diff --git a/drivers/phy/marvell/comphy_a3700.c b/drivers/phy/marvell/comphy_a3700.c index dc188c44e0..4606de6f48 100644 --- a/drivers/phy/marvell/comphy_a3700.c +++ b/drivers/phy/marvell/comphy_a3700.c @@ -273,16 +273,23 @@ static void reg_set_indirect(u32 reg, u16 data, u16 mask)
- return: 1 if PLL locked (OK), 0 otherwise (FAIL)
*/ -static int comphy_sata_power_up(void) +static int comphy_sata_power_up(u32 invert) { int ret;
u32 data = 0;
debug_enter();
/*
* 0. Swap SATA TX lines
*/* 0. Check the Polarity invert bits
- reg_set_indirect(vphy_sync_pattern_reg, bs_txd_inv, bs_txd_inv);
if (invert & PHY_POLARITY_TXD_INVERT)
data |= bs_txd_inv;
if (invert & PHY_POLARITY_RXD_INVERT)
data |= bs_rxd_inv;
reg_set_indirect(vphy_sync_pattern_reg, data, bs_txd_inv | bs_rxd_inv);
/*
- Select 40-bit data width width
@@ -924,22 +931,6 @@ void comphy_dedicated_phys_init(void) } }
- node = fdt_node_offset_by_compatible(blob, -1,
"marvell,armada-3700-ahci");
- if (node > 0) {
if (fdtdec_get_is_enabled(blob, node)) {
ret = comphy_sata_power_up();
if (!ret)
printf("Failed to initialize SATA PHY\n");
else
debug("SATA PHY init succeed\n");
} else {
debug("SATA node is disabled\n");
}
- } else {
debug("No SATA node in DT\n");
- }
- node = fdt_node_offset_by_compatible(blob, -1, "marvell,armada-8k-sdhci"); if (node <= 0) {
@@ -1007,6 +998,10 @@ int comphy_a3700_init(struct chip_serdes_phy_config *chip_cfg, comphy_map->invert); break;
case PHY_TYPE_SATA0:
ret = comphy_sata_power_up(comphy_map->invert);
break;
- default: debug("Unknown SerDes type, skip initialize SerDes %d\n", lane);
-- 2.28.0

On 28.08.20 16:56, Andre Heider wrote:
From: zachary zhangzg@marvell.com
- This patch moves sata phy powerup from dedicate phy to compphy and adds invert option for sata powerup routine.
Change-Id: I1b4e8753e2b2c14c6efa97bca2ffc7d2553d8a90 Signed-off-by: zachary zhangzg@marvell.com Signed-off-by: Ken Ma make@marvell.com Reviewed-on: http://vgitil04.il.marvell.com:8080/53601 Reviewed-by: Igal Liberman igall@marvell.com Tested-by: Igal Liberman igall@marvell.com [a.heider: adapt to mainline] Signed-off-by: Andre Heider a.heider@gmail.com
Reviewed-by: Stefan Roese sr@denx.de
Thanks, Stefan
This is based on the downstream patch: https://github.com/MarvellEmbeddedProcessors/u-boot-marvell/commit/0a5b15980...
Fixes SATA on my espressobin v5.
drivers/phy/marvell/comphy_a3700.c | 33 +++++++++++++----------------- 1 file changed, 14 insertions(+), 19 deletions(-)
diff --git a/drivers/phy/marvell/comphy_a3700.c b/drivers/phy/marvell/comphy_a3700.c index dc188c44e0..4606de6f48 100644 --- a/drivers/phy/marvell/comphy_a3700.c +++ b/drivers/phy/marvell/comphy_a3700.c @@ -273,16 +273,23 @@ static void reg_set_indirect(u32 reg, u16 data, u16 mask)
- return: 1 if PLL locked (OK), 0 otherwise (FAIL)
*/ -static int comphy_sata_power_up(void) +static int comphy_sata_power_up(u32 invert) { int ret;
u32 data = 0;
debug_enter();
/*
* 0. Swap SATA TX lines
*/* 0. Check the Polarity invert bits
- reg_set_indirect(vphy_sync_pattern_reg, bs_txd_inv, bs_txd_inv);
if (invert & PHY_POLARITY_TXD_INVERT)
data |= bs_txd_inv;
if (invert & PHY_POLARITY_RXD_INVERT)
data |= bs_rxd_inv;
reg_set_indirect(vphy_sync_pattern_reg, data, bs_txd_inv | bs_rxd_inv);
/*
- Select 40-bit data width width
@@ -924,22 +931,6 @@ void comphy_dedicated_phys_init(void) } }
- node = fdt_node_offset_by_compatible(blob, -1,
"marvell,armada-3700-ahci");
- if (node > 0) {
if (fdtdec_get_is_enabled(blob, node)) {
ret = comphy_sata_power_up();
if (!ret)
printf("Failed to initialize SATA PHY\n");
else
debug("SATA PHY init succeed\n");
} else {
debug("SATA node is disabled\n");
}
- } else {
debug("No SATA node in DT\n");
- }
- node = fdt_node_offset_by_compatible(blob, -1, "marvell,armada-8k-sdhci"); if (node <= 0) {
@@ -1007,6 +998,10 @@ int comphy_a3700_init(struct chip_serdes_phy_config *chip_cfg, comphy_map->invert); break;
case PHY_TYPE_SATA0:
ret = comphy_sata_power_up(comphy_map->invert);
break;
- default: debug("Unknown SerDes type, skip initialize SerDes %d\n", lane);
Viele Grüße, Stefan

On 04.09.20 10:57, Stefan Roese wrote:
On 28.08.20 16:56, Andre Heider wrote:
From: zachary zhangzg@marvell.com
- This patch moves sata phy powerup from dedicate phy to compphy
and adds invert option for sata powerup routine.
Change-Id: I1b4e8753e2b2c14c6efa97bca2ffc7d2553d8a90 Signed-off-by: zachary zhangzg@marvell.com Signed-off-by: Ken Ma make@marvell.com Reviewed-on: http://vgitil04.il.marvell.com:8080/53601 Reviewed-by: Igal Liberman igall@marvell.com Tested-by: Igal Liberman igall@marvell.com [a.heider: adapt to mainline] Signed-off-by: Andre Heider a.heider@gmail.com
Reviewed-by: Stefan Roese sr@denx.de
Applied to u-boot-marvell/master
Thanks, Stefan
Thanks, Stefan
This is based on the downstream patch: https://github.com/MarvellEmbeddedProcessors/u-boot-marvell/commit/0a5b15980...
Fixes SATA on my espressobin v5.
drivers/phy/marvell/comphy_a3700.c | 33 +++++++++++++----------------- 1 file changed, 14 insertions(+), 19 deletions(-)
diff --git a/drivers/phy/marvell/comphy_a3700.c b/drivers/phy/marvell/comphy_a3700.c index dc188c44e0..4606de6f48 100644 --- a/drivers/phy/marvell/comphy_a3700.c +++ b/drivers/phy/marvell/comphy_a3700.c @@ -273,16 +273,23 @@ static void reg_set_indirect(u32 reg, u16 data, u16 mask) * * return: 1 if PLL locked (OK), 0 otherwise (FAIL) */ -static int comphy_sata_power_up(void) +static int comphy_sata_power_up(u32 invert) { int ret; + u32 data = 0; debug_enter(); /* - * 0. Swap SATA TX lines + * 0. Check the Polarity invert bits */ - reg_set_indirect(vphy_sync_pattern_reg, bs_txd_inv, bs_txd_inv); + if (invert & PHY_POLARITY_TXD_INVERT) + data |= bs_txd_inv;
+ if (invert & PHY_POLARITY_RXD_INVERT) + data |= bs_rxd_inv;
+ reg_set_indirect(vphy_sync_pattern_reg, data, bs_txd_inv | bs_rxd_inv); /* * 1. Select 40-bit data width width @@ -924,22 +931,6 @@ void comphy_dedicated_phys_init(void) } } - node = fdt_node_offset_by_compatible(blob, -1, - "marvell,armada-3700-ahci"); - if (node > 0) { - if (fdtdec_get_is_enabled(blob, node)) { - ret = comphy_sata_power_up(); - if (!ret) - printf("Failed to initialize SATA PHY\n"); - else - debug("SATA PHY init succeed\n"); - } else { - debug("SATA node is disabled\n"); - } - } else { - debug("No SATA node in DT\n"); - }
node = fdt_node_offset_by_compatible(blob, -1, "marvell,armada-8k-sdhci"); if (node <= 0) { @@ -1007,6 +998,10 @@ int comphy_a3700_init(struct chip_serdes_phy_config *chip_cfg, comphy_map->invert); break; + case PHY_TYPE_SATA0: + ret = comphy_sata_power_up(comphy_map->invert); + break;
default: debug("Unknown SerDes type, skip initialize SerDes %d\n", lane);
Viele Grüße, Stefan
Viele Grüße, Stefan
participants (3)
-
Andre Heider
-
Pali Rohár
-
Stefan Roese