История изменений
Исправление 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 читает мусор то и другие то же самое получат