diff mbox series

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

Message ID 20200828145629.540954-1-a.heider@gmail.com
State Accepted
Commit 7757c85199f57e71d5021670ff1d317e0c622f89
Delegated to: Stefan Roese
Headers show
Series phy: marvell: a3700: add sata comphy on lane 2 with invert option | expand

Commit Message

Andre Heider Aug. 28, 2020, 2:56 p.m. UTC
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/0a5b159806baa0746b6449920e450498bc269ba7

Fixes SATA on my espressobin v5.

 drivers/phy/marvell/comphy_a3700.c | 33 +++++++++++++-----------------
 1 file changed, 14 insertions(+), 19 deletions(-)

Comments

Pali Rohár Aug. 31, 2020, 11:29 a.m. UTC | #1
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/0a5b159806baa0746b6449920e450498bc269ba7
> 
> 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);
>  
>  	/*
>  	 * 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);
> -- 
> 2.28.0
>
Stefan Roese Sept. 4, 2020, 8:57 a.m. UTC | #2
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/0a5b159806baa0746b6449920e450498bc269ba7
> 
> 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
Stefan Roese Sept. 4, 2020, 2:01 p.m. UTC | #3
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/0a5b159806baa0746b6449920e450498bc269ba7 
>>
>>
>> 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
diff mbox series

Patch

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);