Ядро 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,
CSI0, 2 линии (подключено к I2C_CAM0 SMARC-модуля),
CSI1, 4 линии (подключено к I2C_CAM1 SMARC-модуля),
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,
CSI0, 2 линии (подключено к I2C_CAM0 SMARC-модуля),
CSI1, 4 линии (подключено к I2C_CAM1 SMARC-модуля),
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,
аудио (выход, микрофон),
светодиоды,
сенсор температуры.
Поддержка ELV-SMARC-CB r3.2.1
Ядро поддерживает следующие интерфейсы и компоненты модуля:
CAN0, CAN1,
CSI0, 2 линии (подключено к I2C_CAM0 SMARC-модуля),
CSI1, 4 линии (подключено к I2C_CAM1 SMARC-модуля),
Eth0, Eth1,
ID EEPROM (подключено к I2C_PM SMARC-модуля),
HDMI-аудио и видео (также см. Поддержка HDMI),
microSD (подключен к SDIO SMARC-модуля),
PWM Fan,
RTC,
RS-232 XP10 (подключено к SER0 SMARC-модуля),
RS-485 XP11 (подключено к SER0 SMARC-модуля),
SATA,
SPI флеш-память,
PCIe x16 (подключено только 4 лейна SMARC-модуля),
UART Rpi XP14 (подключено к SER2 SMARC-модуля),
UART XP13 (подключено к SER3 SMARC-модуля),
USB 2.0 XP2, XS2, XS3, XS10
USB 3.0 XS9
аудио (выход, микрофон),
светодиоды,
сенсор температуры.
Поддержка ROCK Pi N10
Ядро поддерживает следующие интерфейсы и компоненты модуля:
CSI0, 2 линии (подключено к I2C_CAM0 SMARC-модуля),
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 |
|
32-127 |
|
Драйверы 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/devicetree/bindings/pinctrl/snps-dwapb-gpio.txt
.
Примечание
В debugfs наблюдается особенность при работе с GPIO-прерываниями: GPIO-подсистема показывает, что пин занят прерыванием, но PINCTRL показывает его свободным. Это происходит из-за того, что драйверы регистрируют прерывания в обход GPIO/PINCTRL-подсистем, но с ручной установкой флага FLAG_USED_AS_IRQ.
Драйвер управления сбросами устройств reset-mcom03
Драйвер reset-mcom03 управляет снятием/установкой сброса устройств в подсистемах SDR, MEDIA, HSPERIPH.
Ограничения драйвера:
В подсистеме 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 реализует следующий функционал:
Статическая настройка равноприоритетных прерываний.
Поддержка динамического отображения прерываний на доступные QLIC цели, осуществляя балансировку нагрузки.
Включение/выключение прерываний QLIC.
Маскирование/размаскирование прерываний QLIC.
Настройка прерываний ведущего контроллера.
Обработка входящих прерываний.
Исходный код драйвера хранится в файлах 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
Драйвер mfbsp-can
Драйвер mfbsp-can управляет контроллером CAN - MFBSP-CAN. Драйвер реализует стандартный
интерфейс CAN RAW, описанный в Documentation/networking/can.rst
.
Обработка RX-прерываний реализована с использованием интерфейса NAPI.
Возможности драйвера:
Драйвер реализует стандартное Linux SocketCAN API.
Драйвер позволяет выставить скорость передачи.
Драйвер поддерживает следующие режимы работы контроллера:
CAN_CTRLMODE_LOOPBACK,
CAN_CTRLMODE_LISTENONLY,
CAN_CTRLMODE_ONE_SHOT,
CAN_CTRLMODE_BERR_REPORTING.
Драйвер позволяет установить положения точки выборки.
Драйвер поддерживает автоматическое включение/выключение микросхем PHY через выводы Standby и Enable.
Ограничения драйвера:
Отсутствует поддержка работы счётчика времени, после которого выдача сообщения автоматически отменяется.
Отсутствует поддержка включения режима работы передатчика по приоритету.
Отсутствует поддержка Watermark-прерываний.
Отсутствует возможность конфигурации системной матрицы.
Исходный код драйвера хранится в файле drivers/net/can/mfbsp-can.c
.
Описания Devicetree bindings драйвера mfbsp-can и примеры использования см.
Documentation/devicetree/bindings/net/can/elvees,mcom03-mfbsp-can.yaml
Драйвер dwc-pwm
Драйвер dwc-pwm предназначен для управления ШИМ сигнала с блока TIMERS. В блоке LSPERIPH1.TIMERS0 MCom-03 8 таймеров, 2 из которых могут быть использованы для вывода ШИМ сигналов.
Возможности драйвера:
Драйвер реализует стандартное Linux PWM API.
Ограничения драйвера:
Работа только в инверсном режиме выходного сигнала.
Описания Devicetree bindings драйвера dwc-pwm и примеры использования см.
Documentation/devicetree/bindings/pwm/snps,dw-apb-timers-pwm2.yaml
Драйвер arasan-gemac
Драйвер arasan-gemac управляет контроллером Ethernet Arasan GEMAC.
Драйвер реализует стандартный интерфейс network devices, описанный в
Documentation/networking/netdevices.txt
.
Обработка RX-прерываний реализована с использованием интерфейса
NAPI.
Драйвер поддерживает выполнение следующих операций из пространства пользователя:
Установка скорости (10/100/1000 Мб/с);
Установка дуплекса (full/half);
Установка уровня сообщений драйвера;
Установка MAC-адреса;
Чтение регистров контроллера Ethernet Arasan GEMAC утилитой ethtool;
Перезапуск автосогласования;
Проверка физического подключения;
Установка MTU кадра в диапазоне 68 – 3500 байт;
Отключение фильтрации пакетов (Promiscuous mode).
Включение promiscuous mode повышает нагрузку на CPU;
Включение приема всех multicast-пакетов (IFF_ALLMULTI);
Поддерживается фильтрация unicast-пакетов по MAC-адресу и multicast-пакетов по hash-таблице;
Поддерживается доступ к регистрам PHY через MDIO;
Поддержка PTP:
Передача PTPv2 пакетов по Ethernet и UDP IPv4;
Двухступенчатый режим проставления временных меток пакетов PTP;
Режим End-to-End PTP-синхронизации;
Синхронизация по PTP в ролях Ведущего и Ведомого устройства.
Поддерживается чтение аппаратных счетчиков статистики утилитой ethtool;
Поддерживается публикация тегов VLAN.
Для использования VLAN необходимо загрузить модуль ядра с помощью команды modprobe 8021q.
Драйвер не поддерживает:
Управление паузой;
Чтение и запись EEPROM;
Wake-on-Lan;
Управление объединением прерываний;
Одноступенчатый режим проставления временных меток пакетов PTP;
Режим Peer-to-Peer PTP синхронизации;
Передачу PTP пакетов по UDP IPv6.
Исходный код драйвера хранится в директории drivers/net/ethernet/arasan
.
Описания Devicetree bindings драйвера arasan-gemac и примеры использования см.
Documentation/devicetree/bindings/net/arasan,gemac.yaml
.