Перейти к содержанию
    

Uscale+ MPSoC. Взаимодействие APU <--> RPU через libmetal

Всем доброго времени суток!

Проблема - надо поднять взаимодействие между ядрами APU и RPU. На первой группе Linux, на второй - freeRTOS. Пробовал запустить example openAMP, залить через remoteproc эльфа - все работает. Но хочется заиспользовать libmetal. А вот тут оказалось все сложнее. 

Собираю примеры из ug1186 (Libmetal and OpenAMP UG). При попытке запуска приложения тестирования под linux вываливаются ошибки типа "VFIO: No IOMMU group for device". До этого vfio жаловался на отсутствие драйвера reset'a, но получилось подавить это через передачу нужного параметра при загрузке модуля vfio. Есть подозрение что я как-то не так настраиваю IPI в DeviceTree.
 

Скрытый текст

/ {
    reserved-memory
    {
        #address-cells  = <2>;
        #size-cells     = <2>;
        ranges;
        rproc_0_reserved: rproc@3ed20000 {
            no-map;
            reg = <0x0 0x3ed20000 0x0 0x2000000>;
        };
    };

    amba
    {
        /* Shared memory */
        shm0: shm@0
        {
            compatible  = "shm_uio";
            reg         = <0x0 0x3ed80000 0x0 0x1000000>;
        };

        /* IPI device */
        ipi_amp: ipi@ff340000
        {
            compatible          = "ipi_uio";
            reg                 = <0x0 0xff340000 0x0 0x1000>;
            interrupt-parent    = <&gic>;
            interrupts          = <0 29 4>;
        };
    };

    zynqmp-rpu
    {
        compatible      = "xlnx,zynqmp-r5-remoteproc-1.0";
        #address-cells  = <2>;
        #size-cells     = <2>;
        ranges;
        core_conf       = "split";

        r5_0: r5@0
        {
            #address-cells  = <2>;
            #size-cells     = <2>;
            ranges;
            pnode-id        = <0x7>;

            tcm_0_a: tcm_0@0
            {
                reg         = <0x0 0xFFE00000 0x0 0x10000>;
                pnode-id    = <0xf>;
            };

            tcm_0_b: tcm_0@1
            {
                reg         = <0x0 0xFFE20000 0x0 0x10000>;
                pnode-id    = <0x10>;
            };
        };
    };

};

 

В UG для приема блоком APU сообщений от RPU применяется 7 канал (адрес 0x3ed40000 выше) IPI модуля. Что мне непонятно, так это то что в документации он помечен как канал PL0, для работы с FPGA. Или же там без особой разницы кто управляет каналами, и можно использовать их по своему усмотрению? Пробовал использовать другие каналы - ничего особенного не изменилось.

Никто не сталкивался с такой проблемой? Или может есть рабочие куски deviceTree с которыми нормально это все работает

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

UPD: нашел строчку в главе про IPI из TRM про то что да, каналы могут использоваться как и кем угодно, кроме 4х каналов жестко привязанных к PMU. Но почему не работает всеравно не понятно

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...