
On Wed, 16 Oct 2024 at 13:04, Jerome Forissier jerome.forissier@linaro.org wrote:
Add a function to start a given network device, and update eth_init() to use it.
Signed-off-by: Jerome Forissier jerome.forissier@linaro.org
include/net-common.h | 1 + net/eth-uclass.c | 38 +++++++++++++++++++++++++------------- 2 files changed, 26 insertions(+), 13 deletions(-)
diff --git a/include/net-common.h b/include/net-common.h index 543f528a4a4..6bc76658d9d 100644 --- a/include/net-common.h +++ b/include/net-common.h @@ -192,6 +192,7 @@ int eth_env_set_enetaddr_by_index(const char *base_name, int index, int usb_ether_init(void);
int eth_init(void); /* Initialize the device */ +int eth_start_udev(struct udevice *dev); /* ->start() if not already running */ int eth_send(void *packet, int length); /* Send a packet */ #if defined(CONFIG_API) || defined(CONFIG_EFI_LOADER) int eth_receive(void *packet, int length); /* Receive a packet*/ diff --git a/net/eth-uclass.c b/net/eth-uclass.c index e34d7af0229..5555f82f23e 100644 --- a/net/eth-uclass.c +++ b/net/eth-uclass.c @@ -284,6 +284,27 @@ static int on_ethaddr(const char *name, const char *value, enum env_op op, } U_BOOT_ENV_CALLBACK(ethaddr, on_ethaddr);
+int eth_start_udev(struct udevice *dev) +{
struct eth_device_priv *priv = dev_get_uclass_priv(dev);
int ret;
if (priv->running)
return 0;
if (!device_active(dev))
return -EINVAL;
ret = eth_get_ops(dev)->start(dev);
if (ret < 0)
return ret;
priv->state = ETH_STATE_ACTIVE;
priv->running = true;
return 0;
+}
int eth_init(void) { struct udevice *current = NULL; @@ -328,20 +349,11 @@ int eth_init(void) if (current) { debug("Trying %s\n", current->name);
if (device_active(current)) {
ret = eth_get_ops(current)->start(current);
if (ret >= 0) {
struct eth_device_priv *priv =
dev_get_uclass_priv(current);
priv->state = ETH_STATE_ACTIVE;
priv->running = true;
ret = 0;
goto end;
}
} else {
ret = eth_start_udev(current);
if (ret < 0) ret = eth_errno;
}
else
break; debug("FAIL\n"); } else {
-- 2.40.1
Reviewed-by: Ilias Apalodimas ilias.apalodimas@linaro.org