Ethernet
В: Ethernet не инициализируется, в логах ошибка phy_poll_reset failed: -110 или Cannot attach to PHY (-22 / -110). В чём причина?
О: GMAC на RK3568 получает MAC-адрес из EEPROM по шине I2C. Если EEPROM отсутствует или недоступен — интерфейс не поднимается. Решение: удалить из DTS-узла GMAC свойства nvmem-cells и nvmem-cells-names — MAC-адрес будет назначен случайно, и GMAC запустится.
Пример узла в DTS (barebox, .dtso):
// убрать или закомментировать: // nvmem-cells = <&mac_address>; // nvmem-cell-names = "mac-address";
Ссылка на референс: arch/arm/dts/rk3568-diasom-som-evb-ver1-2-1.dtso, строки 12–13.
В: Как отключить один из каналов Ethernet (GMAC0 или GMAC1) без пересборки образа?
О: В консоли barebox выполните:
of_fixup_status -d /ethernet@fe2a0000 # отключить GMAC0 of_fixup_status -d /ethernet@fe010000 # отключить GMAC1
В: При наличии EEPROM-микросхемы на шине I2C интерфейсы Ethernet исчезают из device tree. Как связаны I2C и GMAC?
О: Та же причина: GMAC читает MAC-адрес из EEPROM через I2C. Если EEPROM появляется на шине (например, от внешнего модуля супервизора) и его содержимое некорректно или недоступно на момент инициализации — GMAC не запускается. Решение аналогичное: убрать nvmem-cells / nvmem-cells-names из узла GMAC.
В: PHY RTL8211F не работает — питания есть, кварц работает, но инициализация не проходит.
О: Проверьте цепь MDIO: в референсной схеме DS-RK3568-EVB MDIO подтянут к плюсу питания, не к земле. Подтяжка к земле блокирует обмен. Также убедитесь в наличии всех питаний (3.3 В и 1 В) и корректной работе кварцевого резонатора.
В: В логах MDIO device at address X is missing — PHY не определяется
О: Адрес PHY в DTS выставлен неверно. Поскольку на каждом MDIO висит только один PHY, можно указать адрес reg = <0> — нулевой адрес работает как броадкаст и ответит единственный PHY:
rgmii_phy0: phy@0 { reg = <0>; ... };
Аналогично для второго PHY в mdio1.
В: Ethernet работает нестабильно, низкая скорость (100–200 Мбит/с вместо гигабита)
О: Проверьте наличие антизвонных резисторов на линиях RX_CLK и TX_CLK. Рекомендуемое значение — 22 Ом (как в референсной схеме EVB). Их отсутствие вызывает отражения сигнала на высоких частотах. Добавление резисторов устраняет зависания и восстанавливает скорость до гигабита.
В: PHY держит RESET в нуле — сигнал не отпускается после включения
О: Причина — отсутствие подтяжки сигнала RESET. Варианты:
Добавить внешние резисторы подтяжки (pull-up) на линии RESET обоих PHY.
Добавить в DTS:
pcfg_pull_upдля пинов RESET через pinctrl.
Без подтяжки пин фактически находится в неизвестном состоянии. Если PHY не отвечает (нет PHY_ID по MDIO) — драйвер не запускается и не отпускает RESET.
В: Какой драйвер PHY нужен для сторонних микросхем (например, Dapu Telecom, YT8531)?
О: PHY тип определяется автоматически через чтение PHY_ID по MDIO. Свойство compatible в узле mdio прописывать не нужно. Нужен только соответствующий драйвер в ядре. Например, для YT8531 — убедитесь, что собран net/phy/motorcomm. Рекомендуется использовать ядро из официального репозитория: github.com/MacroGroup/linux/tree/macro.