Jump to content
    

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 с которыми нормально это все работает

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...