diff --git a/sys/arm/arm/gic.c b/sys/arm/arm/gic.c --- a/sys/arm/arm/gic.c +++ b/sys/arm/arm/gic.c @@ -1212,6 +1212,7 @@ DEVMETHOD(bus_alloc_resource, arm_gic_alloc_resource), DEVMETHOD(bus_release_resource, bus_generic_release_resource), DEVMETHOD(bus_activate_resource,bus_generic_activate_resource), + DEVMETHOD(bus_get_device_path, ofw_bus_gen_get_device_path), DEVMETHOD(bus_read_ivar, arm_gic_read_ivar), DEVMETHOD(bus_write_ivar, arm_gic_write_ivar), diff --git a/sys/arm64/arm64/gic_v3_fdt.c b/sys/arm64/arm64/gic_v3_fdt.c --- a/sys/arm64/arm64/gic_v3_fdt.c +++ b/sys/arm64/arm64/gic_v3_fdt.c @@ -64,6 +64,7 @@ /* Bus interface */ DEVMETHOD(bus_get_resource_list, gic_v3_fdt_get_resource_list), + DEVMETHOD(bus_get_device_path, ofw_bus_gen_get_device_path), /* ofw_bus interface */ DEVMETHOD(ofw_bus_get_devinfo, gic_v3_ofw_get_devinfo), diff --git a/sys/dev/fdt/simplebus.c b/sys/dev/fdt/simplebus.c --- a/sys/dev/fdt/simplebus.c +++ b/sys/dev/fdt/simplebus.c @@ -94,6 +94,7 @@ DEVMETHOD(bus_child_pnpinfo, ofw_bus_gen_child_pnpinfo), DEVMETHOD(bus_get_resource_list, simplebus_get_resource_list), DEVMETHOD(bus_get_property, simplebus_get_property), + DEVMETHOD(bus_get_device_path, ofw_bus_gen_get_device_path), /* ofw_bus interface */ DEVMETHOD(ofw_bus_get_devinfo, simplebus_get_devinfo), diff --git a/sys/dev/ofw/ofw_bus_subr.h b/sys/dev/ofw/ofw_bus_subr.h --- a/sys/dev/ofw/ofw_bus_subr.h +++ b/sys/dev/ofw/ofw_bus_subr.h @@ -84,6 +84,7 @@ /* Helper method to report interesting OF properties in pnpinfo */ bus_child_pnpinfo_t ofw_bus_gen_child_pnpinfo; +bus_get_device_path_t ofw_bus_gen_get_device_path; /* Routines for processing firmware interrupt maps */ void ofw_bus_setup_iinfo(phandle_t, struct ofw_bus_iinfo *, int); diff --git a/sys/dev/ofw/ofw_bus_subr.c b/sys/dev/ofw/ofw_bus_subr.c --- a/sys/dev/ofw/ofw_bus_subr.c +++ b/sys/dev/ofw/ofw_bus_subr.c @@ -104,6 +104,22 @@ return (0); }; +int +ofw_bus_gen_get_device_path(device_t cbdev, device_t child, const char *locator, + struct sbuf *sb) +{ + int rv; + + if ( strcmp(locator, "OF") == 0){ + rv = bus_generic_get_device_path(cbdev, child, locator, sb); + if (rv == 0){ + sbuf_printf(sb, "/%s", ofw_bus_get_name(child)); + } + return (rv); + } + return bus_generic_get_device_path(cbdev, child, locator, sb); +}; + const char * ofw_bus_gen_get_compat(device_t bus, device_t dev) { diff --git a/sys/dev/ofw/ofw_cpu.c b/sys/dev/ofw/ofw_cpu.c --- a/sys/dev/ofw/ofw_cpu.c +++ b/sys/dev/ofw/ofw_cpu.c @@ -68,6 +68,7 @@ /* Bus interface */ DEVMETHOD(bus_add_child, bus_generic_add_child), DEVMETHOD(bus_child_pnpinfo, ofw_bus_gen_child_pnpinfo), + DEVMETHOD(bus_get_device_path, ofw_bus_gen_get_device_path), /* ofw_bus interface */ DEVMETHOD(ofw_bus_get_devinfo, ofw_cpulist_get_devinfo),