phy: marvell: add RX training command

This patch adds support for running RX training using new command called
"rx_training"
Usage:
rx_training - rx_training <cp id> <comphy id>

RX training allows to improve link quality (for SFI mode)
by running training sequence between us and the link partner,
this allows to reach better link quality then using static configuration.

Change-Id: I818fe67ccaf19a87af50d4c34a9db7d6802049a5
Signed-off-by: Igal Liberman <igall@marvell.com>
Signed-off-by: Marcin Wojtas <mw@semihalf.com>
This commit is contained in:
Igal Liberman
2021-03-23 11:57:57 +01:00
committed by Stefan Roese
parent 7b27e608f8
commit e49cdbe10b
9 changed files with 348 additions and 5 deletions

View File

@@ -49,4 +49,11 @@ config MVEBU_UBOOT_DFLT_NAME
This option should contain a default file name to be used with
MVEBU "bubt" command if the source file name is omitted
config CMD_MVEBU_RX_TRAINING
bool "rx_training"
depends on TARGET_MVEBU_ARMADA_8K
default n
help
Perform RX training sequence
endmenu

View File

@@ -4,5 +4,5 @@
#
# https://spdx.org/licenses
obj-$(CONFIG_CMD_MVEBU_BUBT) += bubt.o
obj-$(CONFIG_CMD_MVEBU_RX_TRAINING) += rx_training.o

57
cmd/mvebu/rx_training.c Normal file
View File

@@ -0,0 +1,57 @@
// SPDX-License-Identifier: GPL-2.0
/*
* Copyright (C) 2017 Marvell International Ltd.
*
* SPDX-License-Identifier: GPL-2.0
*/
#include <common.h>
#include <command.h>
#include <console.h>
#include <dm.h>
#include <fdtdec.h>
#include <dm/device-internal.h>
#include <mvebu/comphy.h>
int rx_training_cmd(struct cmd_tbl *cmdtp, int flag, int argc,
char * const argv[])
{
struct udevice *dev;
struct uclass *uc;
int ret, cp_index, comphy_index, i = 0;
if (argc != 3) {
printf("missing arguments\n");
return -1;
}
cp_index = simple_strtoul(argv[1], NULL, 16);
comphy_index = simple_strtoul(argv[2], NULL, 16);
ret = uclass_get(UCLASS_MISC, &uc);
if (ret) {
printf("Couldn't find UCLASS_MISC\n");
return ret;
}
uclass_foreach_dev(dev, uc) {
if (!(memcmp(dev->name, "comphy", 5))) {
if (i == cp_index) {
comphy_rx_training(dev, comphy_index);
return 0;
}
i++;
}
}
printf("Coudn't find comphy %d\n", cp_index);
return 0;
}
U_BOOT_CMD(
rx_training, 3, 0, rx_training_cmd,
"rx_training <cp id> <comphy id>\n",
"\n\tRun RX training sequence, the user must state CP index (0/1) and comphy ID (0/5)"
);