Nov 17, 2020 22:31
Вопрос скорее для embedded, но там, по-моему, все мертвы.
В общем, есть саморазработанная железка на Allwinner A64, и к USB-хосту оного прям на плате подключена SMSC9514 в роли USB-хаба и ethernet-интерфейса.
Изначально на плате крутился дистрибутив линукса sunxi на ядре 3.10 и на нём всё работало прекрасно. Но он старый и кое-чего нужного уже не умеет. Теперь вот есть raspbian для Lime на mainline ядре 5.8 и он тоже работает хорошо, ну, с несколькими оверлеями для таймингов DDR и ножек UART-ов A64го.
Но. На ядре 5.8 при нагреве платы градусов эдак до 40 (зависит от экземпляра; некоторые глючат уже при +20, некоторые стабильны и в +35, но глюк ВСЕГДА проявляется с нагревом) usb-хост, на котором висит 9514, падает из EHCI в OHCI, а то и вовсе теряет связь. Повторюсь, на ядре 3.10 всё работает прекрасно до +60 точно.
Я подозреваю, что дело в уплывании таковых частот при нагреве, и что на 3.10 и 5.8 по-разному настроены PLL A64го, которые тактируют EHCI - и это действительно так. На 5.8 этот PLL ВЫКЛЮЧЕН вовсе, если верить minibox devmem. Но всё работает, пока не жарко. Попробовал пропатчить и пересобрать драйвера, чтобы выставили все регистры PLL и GATING-а, как на 3.10 - выставились, но ничего не изменилось.
Почитал регистры самого 9514, думал, может в разных линуксах драйвера его самого по-разному настраивают. Нет, всё одинаково.
В чём ещё может быть дело, если не в настройках клоков и usb-хаба?
Вопрос,
linux,
usb,
arm