#linux #initialization #ethernet
#linux #инициализация #ethernet
Вопрос:
У меня есть дизайн, основанный на процессоре i.MX6ULL, где мне нужны два интерфейса Ethernet. Процессор оснащен двумя контроллерами Ethernet, FEC2 и FEC1. Каждый FEC имеет PHY (LAN8720A), подключенный к нему с помощью RMII: FEC1 — PHY с адресом 0; FEC2 — PHY с адресом 1. Устройство работает под управлением Linux. Он начинается с запуска u-boot, который сокращен до минимума (по сути, он инициализирует оперативную память, NAND, а затем запускает Linux).
Проблема, с которой я сталкиваюсь, заключается в том, как настроить Linux так, чтобы он мог использовать оба интерфейса непосредственно после включения питания.
Когда плата получает питание, Linux сначала инициализирует FEC2, затем проверяет шину MDIO, затем инициализирует FEC1. Результатом является то, что во время проверки один из PHY не получает никаких часов (от все еще неактивного FEC1). Затем Linux находит только PHY, подключенный к FEC2, и только этот интерфейс работает корректно.
Если теперь плата перезагружена (командой reboot или кнопкой reset, а не переключением питания), во время запуска Linux оба FEC уже активны (они были включены во время предыдущего запуска системы), поэтому оба PHY найдены во время проверки шины MDIO, и оба интерфейса доступны для использования.
Таким образом, мой вопрос в том, возможно ли, что есть элегантное решение для этого — как заставить оба FEC производить синхронизацию для своих PHY до того, как Linux проверит шину MDIO? Думаю, в этом я мог бы положиться на u-boot. Но, если возможно что-либо еще, я бы предпочел избежать такой ненужной связи.
С наилучшими пожеланиями, Адам