diff options
Diffstat (limited to 'src/device')
-rw-r--r-- | src/device/Makefile.inc | 1 | ||||
-rw-r--r-- | src/device/device_const.c | 4 | ||||
-rw-r--r-- | src/device/device_util.c | 6 | ||||
-rw-r--r-- | src/device/mdio.c | 16 |
4 files changed, 27 insertions, 0 deletions
diff --git a/src/device/Makefile.inc b/src/device/Makefile.inc index 28acd73879..3018ef9626 100644 --- a/src/device/Makefile.inc +++ b/src/device/Makefile.inc @@ -64,3 +64,4 @@ ramstage-y += resource_allocator_v4.c ramstage-$(CONFIG_XHCI_UTILS) += xhci.c ramstage-y += gpio.c +ramstage-y += mdio.c diff --git a/src/device/device_const.c b/src/device/device_const.c index a40d0b05b9..a63a629344 100644 --- a/src/device/device_const.c +++ b/src/device/device_const.c @@ -147,6 +147,10 @@ static int path_eq(const struct device_path *path1, case DEVICE_PATH_GPIO: equal = (path1->gpio.id == path2->gpio.id); break; + case DEVICE_PATH_MDIO: + equal = (path1->mdio.addr == path2->mdio.addr); + break; + default: printk(BIOS_ERR, "Unknown device type: %d\n", path1->type); break; diff --git a/src/device/device_util.c b/src/device/device_util.c index 9beb2ce8e2..c5e03f2079 100644 --- a/src/device/device_util.c +++ b/src/device/device_util.c @@ -135,6 +135,9 @@ u32 dev_path_encode(const struct device *dev) case DEVICE_PATH_GPIO: ret |= dev->path.gpio.id; break; + case DEVICE_PATH_MDIO: + ret |= dev->path.mdio.addr; + break; case DEVICE_PATH_NONE: case DEVICE_PATH_MMIO: /* don't care */ default: @@ -223,6 +226,9 @@ const char *dev_path(const struct device *dev) case DEVICE_PATH_GPIO: snprintf(buffer, sizeof(buffer), "GPIO: %d", dev->path.gpio.id); break; + case DEVICE_PATH_MDIO: + snprintf(buffer, sizeof(buffer), "MDIO: %02x", dev->path.mdio.addr); + break; default: printk(BIOS_ERR, "Unknown device path type: %d\n", dev->path.type); diff --git a/src/device/mdio.c b/src/device/mdio.c new file mode 100644 index 0000000000..9f560e6bdf --- /dev/null +++ b/src/device/mdio.c @@ -0,0 +1,16 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include <console/console.h> +#include <device/device.h> +#include <device/mdio.h> +#include <stddef.h> + +const struct mdio_bus_operations *dev_get_mdio_ops(struct device *dev) +{ + if (!dev || !dev->ops || !dev->ops->ops_mdio) { + printk(BIOS_ERR, "Could not get MDIO operations.\n"); + return NULL; + } + + return dev->ops->ops_mdio; +} |