Re: [PATCH v5 06/16] usb: hub: Associate port@ fwnode with USB port device

From: Andy Shevchenko

Date: Wed Jul 15 2026 - 05:28:34 EST


On Wed, Jul 15, 2026 at 04:53:36PM +0800, Chen-Yu Tsai wrote:
> When a USB hub port is connected to a connector in a firmware node
> graph, the port itself has a node in the graph.
>
> Associate the port's firmware node with the USB port's device,
> usb_port::dev. This is used in later changes for the M.2 slot power
> sequencing provider to match against the requesting port.
>
> To avoid potential conflicts with ACPI firmware nodes and then causing
> power management issues, only assign the firmware node if the hub's
> firmware node is not an ACPI firmware node.

...

> int usb_hub_create_port_device(struct usb_hub *hub, int port1)

What about adding

struct fwnode_handle *fwnode = dev_fwnode(&hdev->dev);

to the top of the function, and...

> port_dev->dev.driver = &usb_port_driver;
> dev_set_name(&port_dev->dev, "%s-port%d", dev_name(&hub->hdev->dev),
> port1);
> + /*
> + * ACPI FW nodes are associated later when device_register() happens.
> + * Skip assigning one here to avoid potential conflicts.
> + */
> + if (!is_acpi_node(dev_fwnode(&hdev->dev)))
> + device_set_node(&port_dev->dev,
> + fwnode_graph_get_port_by_id(dev_fwnode(&hdev->dev), port1,
> + FWNODE_GRAPH_DEVICE_DISABLED));

...shorten this a bit to

if (!is_acpi_node(fwnode)) {
struct fwnode_handle *ep;

ep = fwnode_graph_get_port_by_id(fwnode, port1, FWNODE_GRAPH_DEVICE_DISABLED);

// Is NULL or error pointer is fine here to be set as fwnode in port device?
// Perhaps add a comment?

device_set_node(&port_dev->dev, ep);
}

--
With Best Regards,
Andy Shevchenko