|
|
|
@ -318,12 +318,13 @@ static int ravb_phy_config(struct udevice *dev) |
|
|
|
|
|
|
|
|
|
eth->phydev = phydev; |
|
|
|
|
|
|
|
|
|
/* 10BASE is not supported for Ethernet AVB MAC */ |
|
|
|
|
phydev->supported &= ~(SUPPORTED_10baseT_Full |
|
|
|
|
| SUPPORTED_10baseT_Half); |
|
|
|
|
phydev->supported &= SUPPORTED_100baseT_Full | |
|
|
|
|
SUPPORTED_1000baseT_Full | SUPPORTED_Autoneg | |
|
|
|
|
SUPPORTED_TP | SUPPORTED_MII | SUPPORTED_Pause | |
|
|
|
|
SUPPORTED_Asym_Pause; |
|
|
|
|
|
|
|
|
|
if (pdata->max_speed != 1000) { |
|
|
|
|
phydev->supported &= ~(SUPPORTED_1000baseT_Half |
|
|
|
|
| SUPPORTED_1000baseT_Full); |
|
|
|
|
phydev->supported &= ~SUPPORTED_1000baseT_Full; |
|
|
|
|
reg = phy_read(phydev, -1, MII_CTRL1000); |
|
|
|
|
reg &= ~(BIT(9) | BIT(8)); |
|
|
|
|
phy_write(phydev, -1, MII_CTRL1000, reg); |
|
|
|
@ -437,7 +438,7 @@ static int ravb_start(struct udevice *dev) |
|
|
|
|
|
|
|
|
|
ret = ravb_reset(dev); |
|
|
|
|
if (ret) |
|
|
|
|
goto err; |
|
|
|
|
return ret; |
|
|
|
|
|
|
|
|
|
ravb_base_desc_init(eth); |
|
|
|
|
ravb_tx_desc_init(eth); |
|
|
|
@ -445,16 +446,12 @@ static int ravb_start(struct udevice *dev) |
|
|
|
|
|
|
|
|
|
ret = ravb_config(dev); |
|
|
|
|
if (ret) |
|
|
|
|
goto err; |
|
|
|
|
return ret; |
|
|
|
|
|
|
|
|
|
/* Setting the control will start the AVB-DMAC process. */ |
|
|
|
|
writel(CCC_OPC_OPERATION, eth->iobase + RAVB_REG_CCC); |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
err: |
|
|
|
|
clk_disable(ð->clk); |
|
|
|
|
return ret; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void ravb_stop(struct udevice *dev) |
|
|
|
@ -469,6 +466,7 @@ static int ravb_probe(struct udevice *dev) |
|
|
|
|
{ |
|
|
|
|
struct eth_pdata *pdata = dev_get_platdata(dev); |
|
|
|
|
struct ravb_priv *eth = dev_get_priv(dev); |
|
|
|
|
struct ofnode_phandle_args phandle_args; |
|
|
|
|
struct mii_dev *mdiodev; |
|
|
|
|
void __iomem *iobase; |
|
|
|
|
int ret; |
|
|
|
@ -480,8 +478,16 @@ static int ravb_probe(struct udevice *dev) |
|
|
|
|
if (ret < 0) |
|
|
|
|
goto err_mdio_alloc; |
|
|
|
|
|
|
|
|
|
gpio_request_by_name(dev, "reset-gpios", 0, ð->reset_gpio, |
|
|
|
|
GPIOD_IS_OUT); |
|
|
|
|
ret = dev_read_phandle_with_args(dev, "phy-handle", NULL, 0, 0, &phandle_args); |
|
|
|
|
if (!ret) { |
|
|
|
|
gpio_request_by_name_nodev(phandle_args.node, "reset-gpios", 0, |
|
|
|
|
ð->reset_gpio, GPIOD_IS_OUT); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (!dm_gpio_is_valid(ð->reset_gpio)) { |
|
|
|
|
gpio_request_by_name(dev, "reset-gpios", 0, ð->reset_gpio, |
|
|
|
|
GPIOD_IS_OUT); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
mdiodev = mdio_alloc(); |
|
|
|
|
if (!mdiodev) { |
|
|
|
|