mdio: add subcommand 'up' to check for link
- performs a phy startup sequence and checks result - returns 0 when link is up, 1 if no link could be established BugzID: 55019
This commit is contained in:
parent
84189ee455
commit
377367a723
40
cmd/mdio.c
40
cmd/mdio.c
|
|
@ -24,6 +24,29 @@ static uint last_devad_hi;
|
||||||
static uint last_reg_lo;
|
static uint last_reg_lo;
|
||||||
static uint last_reg_hi;
|
static uint last_reg_hi;
|
||||||
|
|
||||||
|
|
||||||
|
static int mdio_wait_for_link(struct phy_device *phydev, struct mii_dev *bus)
|
||||||
|
{
|
||||||
|
int link;
|
||||||
|
int res;
|
||||||
|
|
||||||
|
printf("waiting for link up on %s\n", bus->name);
|
||||||
|
|
||||||
|
phy_startup(phydev);
|
||||||
|
|
||||||
|
link = phydev->link;
|
||||||
|
if (link) {
|
||||||
|
printf("link up\n");
|
||||||
|
res = 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
printf("no link\n");
|
||||||
|
res = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
static int extract_range(char *input, int *plo, int *phi)
|
static int extract_range(char *input, int *plo, int *phi)
|
||||||
{
|
{
|
||||||
char *end;
|
char *end;
|
||||||
|
|
@ -191,6 +214,7 @@ static int do_mdio(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||||
struct mii_dev *bus;
|
struct mii_dev *bus;
|
||||||
struct phy_device *phydev = NULL;
|
struct phy_device *phydev = NULL;
|
||||||
int extended = 0;
|
int extended = 0;
|
||||||
|
int res = 0;
|
||||||
|
|
||||||
if (argc < 2)
|
if (argc < 2)
|
||||||
return CMD_RET_USAGE;
|
return CMD_RET_USAGE;
|
||||||
|
|
@ -213,7 +237,14 @@ static int do_mdio(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||||
if (flag & CMD_FLAG_REPEAT)
|
if (flag & CMD_FLAG_REPEAT)
|
||||||
op[0] = last_op[0];
|
op[0] = last_op[0];
|
||||||
|
|
||||||
if (strlen(argv[1]) > 1) {
|
if (strcmp(argv[1], "up") == 0) {
|
||||||
|
if (argc >= 3) {
|
||||||
|
phydev = mdio_phydev_for_ethname(argv[2]);
|
||||||
|
} else {
|
||||||
|
return CMD_RET_USAGE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (strlen(argv[1]) > 1) {
|
||||||
op[1] = argv[1][1];
|
op[1] = argv[1][1];
|
||||||
if (op[1] == 'x') {
|
if (op[1] == 'x') {
|
||||||
phydev = mdio_phydev_for_ethname(argv[2]);
|
phydev = mdio_phydev_for_ethname(argv[2]);
|
||||||
|
|
@ -274,6 +305,10 @@ static int do_mdio(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||||
mdio_read_ranges(phydev, bus, addrlo, addrhi, devadlo, devadhi,
|
mdio_read_ranges(phydev, bus, addrlo, addrhi, devadlo, devadhi,
|
||||||
reglo, reghi, extended);
|
reglo, reghi, extended);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'u':
|
||||||
|
res = mdio_wait_for_link(phydev, bus);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -288,7 +323,7 @@ static int do_mdio(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||||
last_reg_hi = reghi;
|
last_reg_hi = reghi;
|
||||||
last_data = data;
|
last_data = data;
|
||||||
|
|
||||||
return 0;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
@ -305,6 +340,7 @@ U_BOOT_CMD(
|
||||||
"read PHY's extended register at <devad>.<reg>\n"
|
"read PHY's extended register at <devad>.<reg>\n"
|
||||||
"mdio wx <phydev> [<devad>.]<reg> <data> - "
|
"mdio wx <phydev> [<devad>.]<reg> <data> - "
|
||||||
"write PHY's extended register at <devad>.<reg>\n"
|
"write PHY's extended register at <devad>.<reg>\n"
|
||||||
|
"mdio up <phydev> - wait for PHY link to become ready (up)\n"
|
||||||
"<phydev> may be:\n"
|
"<phydev> may be:\n"
|
||||||
" <busname> <addr>\n"
|
" <busname> <addr>\n"
|
||||||
" <addr>\n"
|
" <addr>\n"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue