Ядро Linux

Ядро основано на базе 5.10.y. Git-репозиторий исходного кода — https://github.com/elvees/linux/tree/mcom03-5.10.y.

Поддержка ELV-MC03-SMARC r1.1

Ядро поддерживает следующие интерфейсы и компоненты модуля:

  • CAN0, CAN1,

  • eMMC (SDMMC0),

  • I2C_PM (I2C0),

  • I2C_LOCAL (I2C1),

  • I2C_GP (I2C2),

  • I2C_CAM0 (через I2C-расширитель, подключенный к I2C3 MCom-03),

  • I2C_CAM1 (через I2C-расширитель, подключенный к I2C3 MCom-03),

  • I2C_LCD (через I2C-расширитель, подключенный к I2C3 MCom-03),

  • GBE0,

  • GBE1,

  • GPIO,

  • I2S1 (MFBSP0),

  • HDMI-аудио и видео (также см. Поддержка HDMI),

  • MIPI CSI 2.0,

  • MIPI DSI,

  • PCIe A 4x (PCIe1),

  • SATA (SATA-контроллер подключен к контроллеру PCIe0 MCom-03),

  • SDIO (SDMMC1),

  • Serial I2C EEPROM (I2C2),

  • SER0,

  • SER1 (UART0),

  • SER2 (UART2),

  • SER3 (UART1),

  • SPI0 (SPI0/SSI0),

  • SPI1 (QSPI1),

  • USB0, USB1, USB2, USB4, USB5 поддерживается USB 2.0 (USB1 с поддержкой хаба),

  • USB3 поддерживается USB 3.0 (USB0).

Примечание:

  • Наименования интерфейсов приведены в соответствии со спецификацией SMARC 2.1.

  • В скобках указаны контроллеры MCom-03.

Поддержка ELV-SMARC-CB r1.0

Ядро поддерживает следующие интерфейсы и компоненты модуля:

  • CAN0, CAN1,

  • DSI (дисплеи Raspberry Pi 7" DSI, Raspberry Pi Waveshare 4.3" DSI),

  • Eth0, Eth1,

  • USB 2.0 Type-A x2 (подключен к выводам USB0, USB1 SMARC-модуля),

  • HDMI-аудио и видео (также см. Поддержка HDMI),

  • microSD (подключен к SDIO SMARC-модуля),

  • USB 3.0 Type-A x2 (подключен к USB3 SMARC-модуля через USB hub 3.0),

  • PCIe x16 (подключено только 4 лейна SMARC-модуля),

  • SATA,

  • ID EEPROM (I2C_PM SMARC-модуля),

  • аудио (линейный вход, выход, микрофон),

  • контроллер вентилятора EMC2303.

Поддержка ELV-SMARC-CB r2.10.3

Ядро поддерживает следующие интерфейсы и компоненты модуля:

  • CAN0, CAN1,

  • Eth0, Eth1,

  • ID EEPROM (подключено к I2C_PM SMARC-модуля),

  • HDMI-аудио и видео (также см. Поддержка HDMI),

  • microSD (подключен к SDIO SMARC-модуля),

  • PWM Fan,

  • RTC,

  • RS-232 XP12 (подключено к SER0 SMARC-модуля),

  • RS-485 XP13 (подключено к SER0 SMARC-модуля),

  • SATA,

  • SPI флеш-память,

  • PCIe x16 (подключено только 4 лейна SMARC-модуля),

  • UART Rpi XP6 (подключено к SER2 SMARC-модуля),

  • UART XP15 (подключено к SER3 SMARC-модуля),

  • USB 2.0 XP4, XS2, XS3, XS10,

  • USB 3.0 XS9,

  • аудио (выход, микрофон),

  • светодиоды,

  • cенсор температуры.

Поддержка ROCK Pi N10

Ядро поддерживает следующие интерфейсы и компоненты модуля:

  • Ethernet,

  • HDMI-аудио и видео (также см. Поддержка HDMI),

  • I2C0,

  • I2C1,

  • I2C2,

  • I2C3,

  • DSI (дисплеи Raspberry Pi 7" DSI, Raspberry Pi Waveshare 4.3" DSI),

  • microSD (подключен к SDIO SMARC-модуля),

  • PCIe M.2 (подключен к PCIe_A 4x SMARC-модуля),

  • UART2 (подключен к SER1 SMARC-модуля),

  • USB 2.0 (2 порта),

  • USB 3.0 (1 порт),

  • микрофон и линейный аудио-выход.

Номера прерываний в DeviceTree

В руководстве пользователя на микросхему прерывания всех типов нумеруются сквозным образом:

  • 0-15 — SGI,

  • 16-31 — PPI,

  • 32-127 — SPI.

В Linux для каждого типа прерывания используется своя нумерация, начиная с нуля. Т.о. номер прерывания из РП преобразуется в описание в DeviceTree следующим образом:

N

Описание в DeviceTree

0-15

Не используется

16-31

<GIC_PPI (N-16) IRQ_TYPE_LEVEL_LOW>

32-127

<GIC_SPI (N-32) IRQ_TYPE_LEVEL_HIGH>

Драйверы pinctrl

API драйверов предназначен для управления контактными площадками MCom-03, мультиплексированием выводов GPIO согласно стандартному описанию в файле pinctl.rst.

Устройство управления конфигурированием/мультиплексированием выводов должно быть описано в DeviceTree в виде узла, содержащего дочерние узлы с описанием возможных конфигураций выводов. Другие устройства могут ссылаться на эти узлы согласно стандартному описанию в pinctrl-bindings.txt.

Поддержка управления пинами MCom-03 реализована набором драйверов pinctrl:

Драйверы pinctrl-mcom03-*:

  • pinctrl-mcom03-hsperiph: управление пинами подсистемы HSPERIPH, поддерживается pinconf/pinmux API;

  • pinctrl-mcom03-lsperiph: управление пинами подсистем LSPERIPH0/1, поддерживается pinconf API.

  • pinctrl-mcom03-media: управление пинами подсистемы MEDIA, поддерживается pinmux API.

Исходный код драйверов хранится в директории drivers/pinctrl/elvees. Описания bindings драйверов pinctrl-mcom03-* и примеры использования см. Documentation/devicetree/bindings/pinctrl/elvees,mcom03-*.yaml

Драйвер gpio-dwapb-pinctrl

Драйвер gpio-dwapb-pinctrl является расширением стандартного драйвера dwapb-gpio. К функциям стандартного драйвера добавлена возможность мультиплексирования пинов, подробнее см. Documentation/devictree/bindings/pinctrl/snps-dwapb-gpio.txt.

Примечание

В debugfs наблюдается особенность при работе с GPIO-прерываниями: GPIO-подсистема показывает, что пин занят прерыванием, но PINCTRL показывает его свободным. Это происходит из-за того, что драйверы регистрируют прерывания в обход GPIO/PINCTRL-подсистем, но с ручной установкой флага FLAG_USED_AS_IRQ.

Драйвер управления сбросами устройств reset-mcom03

Драйвер reset-mcom03 управляет снятием/установкой сброса устройств в подсистемах SDR, MEDIA, HSPERIPH.

Ограничения драйвера:

  1. В подсистеме SDR поддерживаются только устройства PCIe0/1, DSP0/1.

Исходный код драйверов хранится в директории drivers/reset. Описание общих свойств контроллера сбросов см. Documentation/devicetree/bindings/reset/reset.txt. Описания DTS bindings драйвера reset-mcom03 и примеры использования см. Documentation/devicetree/bindings/reset/elvees,mcom03-reset.yaml.

Драйвер mr75202

Драйвер mr75202 используется для управления и получения значений сенсоров блока PVT. Драйвер реализует стандартное API hwmon. Исходный код драйвера хранится в файле drivers/hwmon/mr75202.c. Спецификация формата описания блока и пример описания доступны в файле Documentation/devicetree/bindings/hwmon/moortec,mr75202.yaml.

Драйвер silvaco-qspi

Драйвер silvaco-qspi используется для работы с SPI-устройствами в режиме pio. Драйвер реализует ведущее устройство на шине SPI согласно модели драйверов Linux (см. Documentation/spi/spi-summary).

Драйвер поддерживает спецификацию ведущего и ведомых устройств на шине SPI согласно Documentation/devicetree/bindings/spi/spi-bus.txt.

Возможности драйвера:

  • Поддержка до четырех ведомых устройств.

  • Передача в формате CPHA = 0 (см. флаг SPI_CPHA режима).

  • Полярность сигнала синхронизации CPOL = 0 (см. флаг SPI_CPOL режима).

  • Сигнал CS в активном состоянии «логический 0» (см. флаг SPI_CS_HIGH режима).

  • Передача слов данных старшим битом вперед (см. флаг SPI_LSB_FIRST режима).

  • Ведущее устройство на шине SPI (см. флаг SPI_SLAVE режима).

  • Пересылка в режиме full-duplex:

    • Передача данных по одному выводу на шине SPI (см. флаг SPI_TX_BYTE режима).

    • Прием данных по одному выводу на шине SPI (см. флаг SPI_RX_SLOW режима).

  • Переключение скорости передачи между пакетами в соответствии с параметром слейва spi-max-frequency.

  • Переключение режимов XIP и Normal в соответствии со свойством DTS silvaco,qspi-mode.

Ограничения драйвера:

  • Не поддерживается установка скорости передачи. Частота на шине SPI равна частоте clk_ext, которая указывается в свойстве clocks в device tree. Частота clk_ext должна быть не больше частоты clk_axi на шине AXI.

  • Размер данных должен быть кратен восьми битам.

  • Передача в формате CPHA = 1 не поддерживается (флаг SPI_CPHA режима должен быть равен 0).

  • Полярность сигнала синхронизации CPOL = 1 не поддерживается (флаг SPI_CPOL режима должен быть равен 0).

  • Сигнал CS в активном состоянии «логическая 1» не поддерживается (флаг SPI_CS_HIGH режима должен быть равен 0).

  • Передача слов данных младшим битом вперед не поддерживается (флаг SPI_LSB_FIRST режима должен быть равен 0).

  • Передача/прием данных по одной линии не поддерживается (флаг SPI_3WIRE режима должен быть равен 0).

  • Режим loopback не поддерживается (флаг SPI_LOOP режима должен быть равен 0).

  • Режим ведомого устройства на шине SPI не поддерживается (флаг SPI_SLAVE режима должен быть равен 0).

  • Пропуск принятых байтов данных перед преамбулой не поддерживается (флаг SPI_PREAMBLE режима должен быть равен 0).

  • Передача данных по двум выводам на шине SPI не поддерживается (флаг SPI_TX_DUAL режима должен быть равен 0).

  • Передача данных по четырем выводам на шине SPI не поддерживается (флаг SPI_TX_QUAD режима должен быть равен 0).

  • Прием данных по двум выводам на шине SPI не поддерживается (флаг SPI_RX_DUAL режима должен быть равен 0).

  • Прием данных по четырем выводам на шине SPI не поддерживается (флаг SPI_RX_QUAD режима должен быть равен 0).

При инициализации драйвер выполняет:

  • захват и включение тактового сигнала;

  • вывод контроллера QSPI из состояния сброса;

  • инициализация SPI мастера;

  • начальную настройку контроллера QSPI.

При удалении драйвер выполняет:

  • выключение тактового сигнала;

  • ввод контроллера QSPI в состояние сброса;

  • удаление SPI мастера.

Драйвер irq-elvees-qlic

Драйвер irq-elvees-qlic предназначен для управления контроллером прерываниий QLIC. Драйвер реализован каскадированием контроллера прерываний QLIC с ведущим контроллером GICv3 в системе.

Драйвер irq-elvees-qlic реализует следующий функционал:

  1. Статическая настройка равноприоритетных прерываний.

  2. Поддержка динамического отображения прерываний на доступные QLIC цели, осуществляя балансировку нагрузки.

  3. Включение/выключение прерываний QLIC.

  4. Маскирование/размаскирование прерываний QLIC.

  5. Настройка прерываний ведущего контроллера.

  6. Обработка входящих прерываний.

Исходный код драйвера хранится в файлах drivers/irqchip/irq-elvees-qlic.c и drivers/irqchip/irq-elvees-qlic.h. Описания Devicetree bindings драйвера irq-elvees-qlic и примеры использования см. Documentation/devicetree/bindings/interrupt-controller/elvees,qlic.yaml