[DEBUG] xusb-tegra

This commit is contained in:
2025-11-01 23:32:22 +00:00
parent b5f29d3506
commit 17b463cb93

View File

@@ -525,6 +525,8 @@ static void tegra_xusb_port_release(struct device *dev)
{
struct tegra_xusb_port *port = to_tegra_xusb_port(dev);
printk("release\n");
if (port->ops->release)
port->ops->release(port);
}
@@ -541,19 +543,23 @@ static int tegra_xusb_port_init(struct tegra_xusb_port *port,
{
int err;
printk("init list\n");
INIT_LIST_HEAD(&port->list);
port->padctl = padctl;
port->index = index;
printk("init device\n");
device_initialize(&port->dev);
port->dev.type = &tegra_xusb_port_type;
port->dev.of_node = of_node_get(np);
port->dev.parent = padctl->dev;
printk("set name\n");
err = dev_set_name(&port->dev, "%s-%u", name, index);
if (err < 0)
goto put_device;
printk("device add\n");
err = device_add(&port->dev);
if (err < 0)
goto put_device;
@@ -561,6 +567,7 @@ static int tegra_xusb_port_init(struct tegra_xusb_port *port,
return 0;
put_device:
printk("put device\n");
put_device(&port->dev);
return err;
}
@@ -969,6 +976,7 @@ static int tegra_xusb_usb3_port_parse_dt(struct tegra_xusb_usb3_port *usb3)
u32 value;
int err;
printk("check usb2-companion\n");
err = of_property_read_u32(np, "nvidia,usb2-companion", &value);
if (err < 0) {
dev_err(&port->dev, "failed to read port: %d\n", err);
@@ -1004,6 +1012,7 @@ static int tegra_xusb_add_usb3_port(struct tegra_xusb_padctl *padctl,
* port is unusable. But it is valid to configure only a single port,
* hence return 0 instead of an error to allow ports to be optional.
*/
printk("find port node usb3\n");
np = tegra_xusb_find_port_node(padctl, "usb3", index);
if (!np || !of_device_is_available(np))
goto out;
@@ -1014,6 +1023,7 @@ static int tegra_xusb_add_usb3_port(struct tegra_xusb_padctl *padctl,
goto out;
}
printk("xusb port init\n");
err = tegra_xusb_port_init(&usb3->base, padctl, np, "usb3", index);
if (err < 0)
goto out;
@@ -1026,6 +1036,7 @@ static int tegra_xusb_add_usb3_port(struct tegra_xusb_padctl *padctl,
goto out;
}
printk("xusb usb3 port parse dt\n");
err = tegra_xusb_usb3_port_parse_dt(usb3);
if (err < 0) {
tegra_xusb_port_unregister(&usb3->base);
@@ -1118,24 +1129,28 @@ static int tegra_xusb_setup_ports(struct tegra_xusb_padctl *padctl)
mutex_lock(&padctl->lock);
for (i = 0; i < padctl->soc->ports.usb2.count; i++) {
printk("add usb2 port %d\n", i);
err = tegra_xusb_add_usb2_port(padctl, i);
if (err < 0)
goto remove_ports;
}
for (i = 0; i < padctl->soc->ports.ulpi.count; i++) {
printk("add ulpi port %d\n", i);
err = tegra_xusb_add_ulpi_port(padctl, i);
if (err < 0)
goto remove_ports;
}
for (i = 0; i < padctl->soc->ports.hsic.count; i++) {
printk("add hsic port %d\n", i);
err = tegra_xusb_add_hsic_port(padctl, i);
if (err < 0)
goto remove_ports;
}
for (i = 0; i < padctl->soc->ports.usb3.count; i++) {
printk("add usb3 port %d\n", i);
err = tegra_xusb_add_usb3_port(padctl, i);
if (err < 0)
goto remove_ports;
@@ -1143,10 +1158,12 @@ static int tegra_xusb_setup_ports(struct tegra_xusb_padctl *padctl)
if (padctl->soc->need_fake_usb3_port) {
for (i = 0; i < padctl->soc->ports.usb2.count; i++) {
printk("checking usb2 port %d\n", i);
usb2 = tegra_xusb_find_usb2_port(padctl, i);
if (!usb2)
continue;
printk("update usb3 fake port %d\n", i);
err = tegra_xusb_update_usb3_fake_port(usb2);
if (err < 0)
goto remove_ports;
@@ -1154,12 +1171,14 @@ static int tegra_xusb_setup_ports(struct tegra_xusb_padctl *padctl)
}
list_for_each_entry(port, &padctl->ports, list) {
printk("enable port\n");
err = port->ops->enable(port);
if (err < 0)
dev_err(padctl->dev, "failed to enable port %s: %d\n",
dev_name(&port->dev), err);
}
printk("unlock\n");
goto unlock;
remove_ports: