Allwinner EMAC. Руководство разработчика


  Введение       Модуль       Отладка  

3.2 Введение в настройку модуля
3.2.1 Инструкция по настройке menuconfig

Для лонгана среды Linux-4.9 войдите в корневой каталог ядра, выполните make ARCH=arm menuconfig (make ARCH=arm64 menuconfig на 64-битной платформе).

Войдите в основной интерфейс конфигурации и выполните следующие действия.

Для лонгана среды Linux-5.4, вы можете напрямую выполнить ./build.sh menuconfig в корневом каталоге лонгана.

Для среды Tina вы можете выполнить make kernel_menuconfig в корневом каталоге, чтобы войти в интерфейс конфигурации menuconfig.

  • 1. Настройте стек сетевых протоколов
    Конфигурация стека сетевых протоколов



  • 2. Отметьте флажком драйвер GMAC
    Конфигурация драйвера GMAC



    Примечание. Если используется встроенный PHY SOC, то необходимо выполнить шаги 3 и 4 настройки. В настоящее время встроенный EPHY используют только SOC ТВ-серии и некоторые платформы серии H, например TV303, H3, H6, H313, H616. Для других платформ можно пропустить.


  • 3. Отметьте флажком драйвер SUNXI-EPHY (конфигурирование драйвера АСХ00).

    ACX00 внутри SOC инкапсулирует EPHY, поэтому сначала необходимо включить поддержку устройства ACX00:

    Конфигурация драйвера ACX00



  • 4. Затем отметьте драйвер SUNXI-EPHY
    Конфигурация драйвера EPHY





    3.2.2 Инструкция по настройке дерева устройств

    Настройте контроллер GMAC в дереве устройств. Один контроллер GMAC соответствует одному узлу устройства GMAC.

    Конфигурация дерева устройств модуля EMAC находится в каталоге ядра по пути:

  • для ARM 64 - arch/arm64/boot/dts/sunxi/xxxxx.dtsi
  • для ARM 32 - arch/arm/boot/dts/xxxxx.dtsi,
  • для RISCV - arch/riscv/boot/dts/

    Конфигурация под ядро linux-4.9 выглядит следующим образом:


    gmac0: eth@05020000
    {
    compatible = "allwinner,sunxi-gmac";
    reg = <0x0 0x05020000 0x0 0x10000>,
    <0x0 0x03000030 0x0 0x4>;
    interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
    interrupt-names = "gmacirq";
    clocks = <&clk_gmac0>, <&clk_ephy_25m>;
    clock-names = "gmac", "ephy";
    device_type = "gmac0";
    pinctrl-0 = <&gmac_pins_a>;
    pinctrl-1 = <&gmac_pins_b>;
    pinctrl-names = "default", "sleep";
    phy-mode;
    tx-delay = <7>;
    rx-delay = <31>;
    phy-rst;
    gmac-power0;
    gmac-power1;
    gmac-power2;
    status = "disabled";
    };


    Свойства в дереве устройств означают:

  • 'compatible' («совместимый») - представляет конкретное устройство, которое используется для привязки драйвера и устройства;
  • 'reg' - адрес, используемый устройством;
  • 'interrupts' - прерывания, используемые устройством;
  • 'clocks' - тактовый синхрогенератор ("часы"), используемый устройством;
  • 'pinctrl-0' - конфигурация GPIO в активном состоянии устройства
  • 'pinctrl-1' - конфигурация GPIO в состоянии остановки устройства
  • 'phy-mode' - физический интерфейс между GMAC и PHY, такой как MII, RMII, RGMII и т.д.
  • 'tx-delay' - задержка синхроимпульсов передачи, значение tx-delay составляет 0-7, первая передача составляет около 536 пс (пикосекунд)
  • 'rx-delay' - задержка синхроимпульсов приема, значение rx-delay 0-31, первая передача составляет около 186 пс (пикосекунд)
  • 'phy-rst' - контакт сброса PHY
  • 'gmac-powerX' - контакт питания gmac «gmac-powerX», настроить в соответствии с реальной ситуацией
  • 'status' - состояние, включить-отключить узел устройства

    В linux-5.4 конфигурация TWI несколько отличается от конфигурации ядра linux-4.9, разница в основном в синхрогенераторе и dma.


    gmac0: eth@4500000
    {
    compatible = "allwinner,sunxi-gmac";
    reg = <0x0 0x04500000 0x0 0x10000>,
    <0x0 0x03000030 0x0 0x4>;
    interrupts-extended = <&plic0 62 IRQ_TYPE_LEVEL_HIGH>;
    interrupt-names = "gmacirq";
    clocks = <&ccu CLK_BUS_EMAC0>, <&ccu CLK_EMAC0_25M>;
    clock-names = "gmac", "ephy";
    resets = <&ccu RST_BUS_EMAC0>;
    device_type = "gmac0";
    pinctrl-0 = <&gmac_pins_a>;
    pinctrl-1 = <&gmac_pins_b>;
    pinctrl-names = "default", "sleep";
    phy-mode = "rgmii";
    use_ephy25m = <1>;
    tx-delay = <7>;
    rx-delay = <31>;
    phy-rst = <&pio PA 14 GPIO_ACTIVE_LOW>;
    gmac-power0;
    gmac-power1;
    gmac-power2
    status = "disabled";
    }


    gmac_pins_a, gmac_pins_a — узлы дерева для конфигурации выводов EMAC

    Путь этой конфигурации в lixnu4.9 — arch/arm64 (для 32-битной платформы — arm) /boot/dts/sunxi/xxxxpinctrl

    dtsi выглядит следующим образом:


    gmac_pins_a: gmac@0
    {
    allwinner,pins = "PI0", "PI1", "PI2", "PI3",
    "PI4", "PI5", "PI6", "PI7",
    "PI8", "PI9", "PI10", "PI11",
    "PI12", "PI13", "PI14", "PI15",
    "PI16";
    allwinner,function = "gmac0";
    allwinner,muxsel = <2>;
    allwinner,drive = <3>;
    allwinner,pull = <0>;
    };


    gmac_pins_b: gmac@1
    {
    allwinner,pins = "PI0", "PI1", "PI2", "PI3",
    "PI4", "PI5", "PI6", "PI7",
    "PI8", "PI9", "PI10", "PI11",
    "PI12", "PI13", "PI14", "PI15",
    "PI16";
    allwinner,function = "io_disabled";
    allwinner,muxsel = <7>;
    allwinner,drive = <3>;
    allwinner,pull = <0>;
    };


  • pins - означают контакты GPIO, используемые xMII
  • function - имя функции, используемой pinctrl
  • muxsel - мультиплексирование выводов GPIO, необходимо проверить спецификацию для установки
  • drive - GPIO pin drive capability
  • pull - подтянутое состояние выходного уровня

    Примечание. Конфигурация контактов на разных платформах различается.

    Путь этой конфигурации в linux-5.4 arch/arm64 (32-битная платформа — arm)/boot/dts/sunxi/xxxx.dtsi

    Дерево устройств выглядит так:


    gmac_pins_a: gmac@0
    {
    pins = "PA0", "PA1", "PA2", "PA3",
    "PA4", "PA5", "PA6", "PA7",
    "PA8", "PA10", "PA11", "PA12",
    "PA13", "PA17", "PA18", "PA28",
    "PA29", "PA30", "PA31";
    function = "gmac0";
    drive-strength = <10>;
    };

    gmac_pins_b: gmac@1
    {
    pins = "PA0", "PA1", "PA2", "PA3",
    "PA4", "PA5", "PA6", "PA7",
    "PA8", "PA10", "PA11", "PA12",
    "PA13", "PA17", "PA18", "PA28",
    "PA29", "PA30", "PA31";
    function = "gpio_in";
    drive-strength = <10>;
    };


  • pins - означают контакты GPIO, используемые xMII;
  • function - имя функции, используемой «функцией» pinctrl;
  • drive-strength - возможность подключения к выводам GPIO, подробности см. в документации по GPIO;

    Кроме того, clk_gmac0 и clk_ephy_25m являются узлами синхрогенератора

    В linux-4.9 путь — arch/arm64 (32-битная платформа — arm) /boot/dts/sunxi/XXXX-clk.dtsi

    Дерево устройств выглядит следующим образом:


    clk_gmac0_25m: gmac0_25m
    {
    #clock-cells = <0>;
    compatible = "allwinner,periph-clock";
    clock-output-names = "gmac0_25m";
    };

    clk_gmac0: gmac0
    {
    #clock-cells = <0>;
    compatible = "allwinner,periph-clock";
    clock-output-names = "gmac0";
    };


    3.2.3 Пользовательский физический уровень AllWinner

    Часть SOC AllWinner объединяет AC200 и AC300. AC200 и AC300 имеют внутренний интегрированный EPHY.

    3.2.3.1 АС200

    ARM связывается с AC200 через TWI, инициализирует EPHY, а затем MAC обращается к EPHY через шину MDIO. Модуль PWM обеспечивает внутреннюю тактовую частоту 25M для EPHY.

    Общая блок-схема AC200 выглядит следующим образом:




    3.2.3.2 АС300

    ARM связывается с AC300 через шину MDIO, инициализирует EPHY, а затем MAC связывается с AC300 через шину MDIO. Модуль PWM обеспечивает внутреннюю тактовую частоту 25M для EPHY.

    Общая блок-схема AC300 выглядит следующим образом:




    3.2.4 Инструкции по настройке board.dts

    3.2.4.1 Конфигурация интерфейса RGMII

    Для интерфейса RGMII подключается внешний EMAC физического уровня (чип RTL8211F) и используются внутренние синхроимпульсы SOC EPHY_25M, которые поддерживают скорость 10 Мбит/с, 100 Мбит/с и 1000 Мбит/с.

    Пример конфигурации board.dts выглядит следующим образом:

    Путь: longan/device/config/chips/{IC}/configs/{BOARD}/board.dts


    gmac0: eth@05020000
    {
    phy-mode = "rgmii";
    use_ephy25m = <1>;
    tx-delay = <7>;
    rx-delay = <0>;
    status = "okay";
    };


    Примечание.

  • use_ephy25m=1 означает, что PHY использует внутреннюю тактовую частоту SOC EPHY_25M;
  • use_ephy25m=0 (или если этот параметр не настроен) означает, что PHY не использует внутреннюю тактовую частоту SOC EPHY_25M, и для обеспечения PHY требуется внешний кварцевый генератор 25M.

    Интерфейс RGMII предъявляет строгие требования к фазе сигналов синхронизации и данных, поэтому обычно необходимо настроить параметры tx-delay и rx-delay для обеспечения корректности передачи данных.

    3.2.4.2 Конфигурация интерфейса RMII

    Для интерфейса RMII используется EMAC внешнего физического уровня (чип RTL8201F), а внешний кварцевый генератор 25M используется для поддержки скорости 10 Мбит/с и /100 Мбит/с.

    Пример узла дерева устройств board.dts выглядит следующим образом:

    Путь: longan/device/config/chips/{IC}/configs/{BOARD}/board.dts


    gmac1: eth@05030000
    {
    phy-mode = "rmii";
    status = "okay";
    };


    Для EMAC, использующих встроенный в SOC EPHY, синхрочастота 25M обеспечиваются модулем PWM, поддержка cкорости 10 Мбит/с и /100 Мбит/с.

    Путь: longan/device/config/chips/{IC}/configs/{BOARD}/board.dts


    gmac1: eth@05030000
    {
    phy-mode = "rmii";
    status = "okay";
    };

    ac200: ac200
    {
    tv_used = <1>;
    tv_twi_used = <1>;
    tv_twi_addr = <16>;
    tv_pwm_ch = <5>;
    status = "okay";
    };

    Примечание.

    В некоторых SOC AC200 инкапсулирует EPHY, связывается с AC200 через TWI, инициализирует EPHY, а затем MAC обращается к EPHY через шину MDIO.

    В некоторых SOC AC300 инкапсулирует EPHY, связывается с AC300 через шину MIDO контроллера MAC, инициализирует EPHY, а затем MAC также использует шину MDIO для доступа к EPHY.

    Конечно, конфигурацию дерева устройств можно поместить в конфигурацию дерева устройств ядра или board.dts. При этом конфигурация board.dts переопределит конфигурацию дерева устройств ядра.

    3.3 Структура исходного кода GMAC

    Исходный код драйвера GMAC находится в папке ядра drivers/net/ethernet/allwinner:

    drivers/net/ethernet/allwinner/

  • sunxi-gmac.h - заголовочный файл драйвера GMAC платформы Sunxi, который определяет некоторые макросы, структуры данных и внутренние интерфейсы
  • sunxi-gmac.c - основной код драйвера GMAC платформы Sunxi
  • sunxi_gmac_ops.c - конкретная реализация каждого внутреннего интерфейса драйвера GMAC платформы Sunxi




  • Назад      Вперед