LINUX.ORG.RU

История изменений

Исправление spbob, (текущая версия) :

Я не понял, что это значит

понятно что драйвер глючит и читает мусор. Если он раньше у кого-то работал и у тебя читает/пишет другие регистры (иначе вообще бы не работало ничего) - только из mdio мусор. По лёгкому что можно попробовать - вставить задержку тут

dm_write_reg(dev, DM_SHARED_ADDR, phy ? (reg | 0x40) : reg);
udelay(10);
dm_write_reg(dev, DM_SHARED_CTRL, phy ? 0xc : 0x4);

при чтении

https://elixir.bootlin.com/linux/latest/source/drivers/net/usb/dm9601.c#L116

и записи

https://elixir.bootlin.com/linux/latest/source/drivers/net/usb/dm9601.c#L159

возможно когда этот адаптер был актуален компьютеры не такие быстрые были :)

Есть какая-нибудь тулза для командной строки, позволяющая читать/писать эти регистры usb-устройства?

посмотри это

https://github.com/wkz/phytool

интерфейс роли не играет - драйвер предоставляет функции доступа к регистрам, в юзерспейс через ioctl их читают/пишут. Просто если ethtool читает мусор то и другие то же самое получат

Ещё не нашёл где инициализируется dev->mii.phy_id

его скорей всего должна найти подсистема ядра которая работает с phy, драйвер предоставляет низкоуровневые ф-ции, но в этом тоже может быть дело - возможно у тебя распаян внешний phy. Попробуй утилиткой почитать другие адреса, всего их может быть по-моему 32 - 0..31. Но это маловероятно, внутренний все равно должен что-то осмысленное возвращать при чтении да и какой смысл китайцам которые экономят на всем распаивать еще что-то если есть встроенный PHY.

Исправление spbob, :

Я не понял, что это значит

понятно что драйвер глючит и читает мусор. Если он раньше у кого-то работал и у тебя читает/пишет другие регистры (иначе вообще бы не работало ничего) - только из mdio мусор. По лёгкому что можно попробовать - вставить задержку тут

dm_write_reg(dev, DM_SHARED_ADDR, phy ? (reg | 0x40) : reg);
udelay(10);
dm_write_reg(dev, DM_SHARED_CTRL, phy ? 0xc : 0x4);

при чтении

https://elixir.bootlin.com/linux/latest/source/drivers/net/usb/dm9601.c#L116

и записи

https://elixir.bootlin.com/linux/latest/source/drivers/net/usb/dm9601.c#L159

возможно когда этот адаптер был актуален компьютеры не такие быстрые были :)

Есть какая-нибудь тулза для командной строки, позволяющая читать/писать эти регистры usb-устройства?

посмотри это

https://github.com/wkz/phytool

интерфейс роли не играет - драйвер предоставляет функции доступа к регистрам, в юзерспейс через ioctl их читают/пишут. Просто если ethtool читает мусор то и другие то же самое получат

Исходная версия spbob, :

Я не понял, что это значит

понятно что драйвер глючит и читает мусор. Если он раньше у кого-то работал и у тебя читает/пишет другие регистры (иначе вообще бы не работало ничего) - только из mdio мусор. По лёгкому что можно попробовать - вставить задержку тут

dm_write_reg(dev, DM_SHARED_ADDR, phy ? (reg | 0x40) : reg);
udelay(10);
dm_write_reg(dev, DM_SHARED_CTRL, phy ? 0xc : 0x4);

https://elixir.bootlin.com/linux/latest/source/drivers/net/usb/dm9601.c#L116

возможно когда этот адаптер был актуален компьютеры не такие быстрые были :)

Есть какая-нибудь тулза для командной строки, позволяющая читать/писать эти регистры usb-устройства?

посмотри это

https://github.com/wkz/phytool

интерфейс роли не играет - драйвер предоставляет функции доступа к регистрам, в юзерспейс через ioctl их читают/пишут. Просто если ethtool читает мусор то и другие то же самое получат