€cdocutils.nodes document q)�q}q(U nametypesq}q(Xdsp-access-to-peripheralsqˆX+running-uart-readwrite-pdk-example-from-ccsqˆXpower-managementqˆX&multiple ways of arm-dsp communicationq NX examples-1q ˆX examples-2q ˆX examples-3q ˆXoverall linux memory mapq NX8adding-ipc-to-an-existing-ti-rtos-application-on-the-dspqˆXresource tableqNXchanging-the-dsp-memory-mapqˆXopenclqˆX ipc for k2xqNX config.bldqNXmpm config fileqNX introduction-linux-ipc-on-am65xxqˆXunderstanding the memory mapqNXstarting-ipc-projectqˆX,methods to load and run elf images using mpmqNXmultiple processor managerqNX$customizing-early-boot-for-a-usecaseqˆX big-data-ipcqˆX unicache-mmuqˆXtesting-early-bootqˆX cma-carveoutsqˆXfrequently asked questionsqNXgetting-startedq ˆXrun-ipc-rtos-examplesq!ˆXlinux device treeq"NX(handling-ammu-l1-unicache-mmu-and-l2-mmuq#ˆXbuild-ipc-linux-examplesq$ˆX pros-and-consq%ˆX drawbacks-2q&ˆX drawbacks-3q'ˆX drawbacks-1q(ˆXiommuq)ˆX'build-and-run-ex02_messageq-ipc-exampleq*ˆXipc for am65xxq+NX1make-ccs-project-out-of-ex02_messageq-ipc-exampleq,ˆX/ipc-am57xx-software-dependencies-to-get-startedq-ˆX8adding-ipc-to-an-existing-ti-rtos-application-on-the-ipuq.ˆX'ipc-am57xx-understanding-the-memory-mapq/ˆXbuild-ipc-rtos-examplesq0ˆX/modifying ex02_messageq example to run from ddrq1NX use-casesq2ˆXchanging the dsp memory mapq3NXr5-virtual-addressesq4ˆX+ipc-am65xx-running-the-bundled-ipc-examplesq5ˆX2ipc-am65xx-getting-started-with-ipc-linux-examplesq6ˆXdownload-the-full-ccs-projectq7ˆXenabling-late-attachq8ˆXusing-early-bootlate-attachq9ˆXbenefitsq:ˆXdsp-virtual-addressesq;ˆXslave-physical-addressesq<ˆXoverall-linux-memory-mapq=ˆX firstheadingq>ˆXipcq?ˆXoverviewq@ˆX!changing-cortex-m4-ipu-memory-mapqAˆXcmemqBˆX0inspecting-the-dsp-iommu-page-tables-at-run-timeqCˆX ipc early boot for am57xx/dra7xxqDNX mpm debuggingqENXexamplesqFˆX introductionqGˆXipc qnx install guideqHˆX+ipc-am57xx-running-the-bundled-ipc-examplesqIˆXdownload-the-full-ccs-project-1qJˆX#cortex-m4-ipu-access-to-peripheralsqKˆXipc linux install guideqLˆXdma-memory-carveoutsqMˆX running the bundled ipc examplesqNNX/ipc-am65xx-software-dependencies-to-get-startedqOˆX'getting started with ipc linux examplesqPNX<adding-ipc-to-an-existing-ti-rtos-application-on-slave-coresqQˆX cortex-m4-ipu-physical-addressesqRˆX user-casesqSˆXdce-distributed-codec-engineqTˆX,ipc-am65xx-building-the-bundled-ipc-examplesqUˆXadd-ipc-to-the-uart-exampleqVˆXdebugging-late-attachqWˆXipc quick start guideqXNXpre-flight-checksqYˆXipc for am57xxqZNXrun-ipc-linux-examplesq[ˆXlinux-out-of-box-demosq\ˆX add-ipc-to-the-led-blink-exampleq]ˆX&running-led-blink-pdk-example-from-ccsq^ˆX drawbacksq_ˆX introduction-linux-ipc-on-am57xxq`ˆXdsp-physical-addressesqaˆX ipc testsqbNXdisable opencl applicationqcNX/loading dsp images from ccs (without using mpm)qdNXdetecting crash event in mpmqeNX overview-ipcqfˆXtechnical-documentsqgˆX,ipc-am57xx-building-the-bundled-ipc-examplesqhˆX use-cases-1qiˆXLupdate-linux-kernel-device-tree-to-remove-uart-that-will-be-controlled-by-m4qjˆX use-cases-2qkˆX benefits-1qlˆX benefits-3qmˆX benefits-2qnˆXcortex-m4-ipu-virtual-addressesqoˆXdecision-makingqpˆX$software dependencies to get startedqqNX/typical-boot-flow-on-am572x-for-arm-linux-usersqrˆX#ipc-am65xx-overall-linux-memory-mapqsˆX'ipc-am65xx-understanding-the-memory-mapqtˆXbuild-your-own-projectquˆX/typical-boot-flow-on-am65xx-for-arm-linux-usersqvˆXchanging-the-r5f-memory-mapqwˆX ipc daemonqxNX2ipc-am57xx-getting-started-with-ipc-linux-examplesqyˆX!building the bundled ipc examplesqzNuUsubstitution_defsq{}q|Uparse_messagesq}]q~(cdocutils.nodes system_message q)�q€}q�(U rawsourceq‚UU attributesqƒ}q„(Udupnamesq…]UlevelKUidsq†]Ubackrefsq‡]qˆUid1q‰aUsourcecdocutils.nodes reprunicode qŠX0source/linux/Foundational_Components/IPC.rst.incq‹…�qŒ}q�bUclassesqŽ]Unamesq�]UlineKUtypeUINFOq�uUparentq‘cdocutils.nodes rubric q’)�q“}q”(h‚XOverviewq•h‘cdocutils.nodes section q–)�q—}q˜(h‚UU referencedq™Kh‘h–)�qš}q›(h‚Uh™Kh‘hUsourceqœhŒUtagnameq�Usectionqžhƒ}qŸ(h…]q Xipcq¡ahŽ]h‡]h†]q¢Uipcq£ah�]uUlineq¤KUdocumentq¥hUchildrenq¦]q§(cdocutils.nodes title q¨)�q©}qª(h‚XIPCq«h‘hšhœhŒh�Utitleq¬hƒ}q­(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]q®cdocutils.nodes Text q¯XIPCq°…�q±}q²(h‚h«h‘h©ubaubh—h–)�q³}q´(h‚Uh‘hšhœhŒh�hžhƒ}qµ(h…]hŽ]h‡]h†]q¶Uipc-quick-start-guideq·ah�]q¸hXauh¤K h¥hh¦]q¹(h¨)�qº}q»(h‚XIPC Quick Start Guideq¼h‘h³hœhŒh�h¬hƒ}q½(h…]hŽ]h‡]h†]h�]uh¤K h¥hh¦]q¾h¯XIPC Quick Start Guideq¿…�qÀ}qÁ(h‚h¼h‘hºubaubcdocutils.nodes comment qÂ)�qÃ}qÄ(h‚XKhttp://processors.wiki.ti.com/index.php/Processor_SDK_IPC_Quick_Start_Guideh‘h³hœhŠXBsource/linux/Foundational_Components/IPC/Quick_Start_Guide.rst.incqÅ…�qÆ}qÇbh�UcommentqÈhƒ}qÉ(U xml:spaceqÊUpreserveqËh†]h‡]h…]hŽ]h�]uh¤Kh¥hh¦]qÌh¯XKhttp://processors.wiki.ti.com/index.php/Processor_SDK_IPC_Quick_Start_GuideqÍ…�qÎ}qÏ(h‚Uh‘hÃubaubh’)�qÐ}qÑ(h‚XOverviewqÒh‘h³hœhÆh�UrubricqÓhƒ}qÔ(h†]qÕU overview-ipcqÖah‡]h…]hŽ]h�]q×hfauh¤Nh¥hh¦]qØh¯XOverviewqÙ…�qÚ}qÛ(h‚hÒh‘hÐubaubcdocutils.nodes paragraph qÜ)�qÝ}qÞ(h‚XyThis page is meant to be a Quick Start Guide for applications using IPC (Inter Processor Communication) in Processor SDK.qßh‘h³hœhÆh�U paragraphqàhƒ}qá(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]qâh¯XyThis page is meant to be a Quick Start Guide for applications using IPC (Inter Processor Communication) in Processor SDK.qã…�qä}qå(h‚hßh‘hÝubaubhÜ)�qæ}qç(h‚XIt begins with details about the out-of-box demo provided in the Processor SDK Linux filesystem, followed by rebuilding the demo code and running the built images. ( This covers the use case with the Host running linux OS and the slave cores running RTOS).qèh‘h³hœhÆh�hàhƒ}qé(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]qêh¯XIt begins with details about the out-of-box demo provided in the Processor SDK Linux filesystem, followed by rebuilding the demo code and running the built images. ( This covers the use case with the Host running linux OS and the slave cores running RTOS).që…�qì}qí(h‚hèh‘hæubaubhÜ)�qî}qï(h‚XEAlso details about building and running the IPC examples are covered.qðh‘h³hœhÆh�hàhƒ}qñ(h…]hŽ]h‡]h†]h�]uh¤K h¥hh¦]qòh¯XEAlso details about building and running the IPC examples are covered.qó…�qô}qõ(h‚hðh‘hîubaubhÜ)�qö}q÷(h‚XžThe goal is to provides information for users to get familiar with IPC and its build environment, in turn, to help users in developing their projects quickly.qøh‘h³hœhÆh�hàhƒ}qù(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]qúh¯XžThe goal is to provides information for users to get familiar with IPC and its build environment, in turn, to help users in developing their projects quickly.qû…�qü}qý(h‚høh‘höubaubcdocutils.nodes line_block qþ)�qÿ}r(h‚Uh‘h³hœhÆh�U line_blockrhƒ}r(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]rcdocutils.nodes line r)�r}r(h‚UUindentrKh‘hÿhœhÆh�h¤hƒ}r(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubh’)�r }r (h‚XLinux out of box demosr h‘h³hœhÆh�hÓhƒ}r (h†]r Ulinux-out-of-box-demosrah‡]h…]hŽ]h�]rh\auh¤Nh¥hh¦]rh¯XLinux out of box demosr…�r}r(h‚j h‘j ubaubhÜ)�r}r(h‚X9The out of box demo is only available on Keystone-2 EVMs.rh‘h³hœhÆh�hàhƒ}r(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]rh¯X9The out of box demo is only available on Keystone-2 EVMs.r…�r}r(h‚jh‘jubaubcdocutils.nodes note r)�r}r(h‚X.This assumes the release images are loaded in the flash/SD Card. If needed to update to latest release follow the `Linux Getting Started Guide `__ to update the release images on flash memory/SD card on the EVM using Program-evm or using the procedures for SD Card.h‘h³hœhÆh�Unoterhƒ}r (h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r!hÜ)�r"}r#(h‚X.This assumes the release images are loaded in the flash/SD Card. If needed to update to latest release follow the `Linux Getting Started Guide `__ to update the release images on flash memory/SD card on the EVM using Program-evm or using the procedures for SD Card.h‘jhœhÆh�hàhƒ}r$(h…]hŽ]h‡]h†]h�]uh¤Kh¦]r%(h¯XrThis assumes the release images are loaded in the flash/SD Card. If needed to update to latest release follow the r&…�r'}r((h‚XrThis assumes the release images are loaded in the flash/SD Card. If needed to update to latest release follow the h‘j"ubcdocutils.nodes reference r))�r*}r+(h‚XE`Linux Getting Started Guide `__hƒ}r,(UnameXLinux Getting Started GuideUrefurir-X#Overview_Getting_Started_Guide.htmlh†]h‡]h…]hŽ]h�]uh‘j"h¦]r.h¯XLinux Getting Started Guider/…�r0}r1(h‚Uh‘j*ubah�U referencer2ubh¯Xw to update the release images on flash memory/SD card on the EVM using Program-evm or using the procedures for SD Card.r3…�r4}r5(h‚Xw to update the release images on flash memory/SD card on the EVM using Program-evm or using the procedures for SD Card.h‘j"ubeubaubcdocutils.nodes enumerated_list r6)�r7}r8(h‚Uh‘h³hœhÆh�Uenumerated_listr9hƒ}r:(Usuffixr;U.h†]h‡]h…]Uprefixr<UhŽ]h�]Uenumtyper=Uarabicr>uh¤K"h¥hh¦]r?(cdocutils.nodes list_item r@)�rA}rB(h‚XóConnect the EVM Ethernet port 0 to a corporate or local network with DHCP server running, when the Linux kernel boots up, the rootfs start up scripts will get an IP address from the DHCP server and print the IP address to the EVM on-board LCD.h‘j7hœhÆh�U list_itemrChƒ}rD(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rEhÜ)�rF}rG(h‚XóConnect the EVM Ethernet port 0 to a corporate or local network with DHCP server running, when the Linux kernel boots up, the rootfs start up scripts will get an IP address from the DHCP server and print the IP address to the EVM on-board LCD.rHh‘jAhœhÆh�hàhƒ}rI(h…]hŽ]h‡]h†]h�]uh¤K"h¦]rJh¯XóConnect the EVM Ethernet port 0 to a corporate or local network with DHCP server running, when the Linux kernel boots up, the rootfs start up scripts will get an IP address from the DHCP server and print the IP address to the EVM on-board LCD.rK…�rL}rM(h‚jHh‘jFubaubaubj@)�rN}rO(h‚XtOpen an Internet browser (e.g. Mozilla Firefox) on a remote computer that connects with the same network as the EVM.h‘j7hœhÆh�jChƒ}rP(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rQhÜ)�rR}rS(h‚XtOpen an Internet browser (e.g. Mozilla Firefox) on a remote computer that connects with the same network as the EVM.rTh‘jNhœhÆh�hàhƒ}rU(h…]hŽ]h‡]h†]h�]uh¤K&h¦]rVh¯XtOpen an Internet browser (e.g. Mozilla Firefox) on a remote computer that connects with the same network as the EVM.rW…�rX}rY(h‚jTh‘jRubaubaubj@)�rZ}r[(h‚X²Type the IP address displayed on EVM LCD to the browser and click cancel button to launch the Matrix launcher in the remote access mode instead of on the on-board display device.h‘j7hœhÆh�jChƒ}r\(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r]hÜ)�r^}r_(h‚X²Type the IP address displayed on EVM LCD to the browser and click cancel button to launch the Matrix launcher in the remote access mode instead of on the on-board display device.r`h‘jZhœhÆh�hàhƒ}ra(h…]hŽ]h‡]h†]h�]uh¤K(h¦]rbh¯X²Type the IP address displayed on EVM LCD to the browser and click cancel button to launch the Matrix launcher in the remote access mode instead of on the on-board display device.rc…�rd}re(h‚j`h‘j^ubaubaubj@)�rf}rg(h‚XôClick the Multi-core Demonstrations, then Multi-core IPC Demo to start the IPC demonstration. .. Image:: ../images/MatrixAppLauncher.jpg :scale: 60 The result from running IPC Demo .. Image:: ../images/IPC_Demo_Result.jpg :scale: 60 h‘j7hœNh�jChƒ}rh(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]ri(hÜ)�rj}rk(h‚X]Click the Multi-core Demonstrations, then Multi-core IPC Demo to start the IPC demonstration.rlh‘jfhœhÆh�hàhƒ}rm(h…]hŽ]h‡]h†]h�]uh¤K+h¦]rnh¯X]Click the Multi-core Demonstrations, then Multi-core IPC Demo to start the IPC demonstration.ro…�rp}rq(h‚jlh‘jjubaubcdocutils.nodes image rr)�rs}rt(h‚X:.. Image:: ../images/MatrixAppLauncher.jpg :scale: 60 hƒ}ru(UscaleK`__h‘h³hœhÆh�jhƒ}r‰(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rŠhÜ)�r‹}rŒ(h‚X­To view the out-of-box demo source code, please install Linux and RTOS Processor SDKs from `SDK download page `__h‘j‡hœhÆh�hàhƒ}r�(h…]hŽ]h‡]h†]h�]uh¤K:h¦]rŽ(h¯X[To view the out-of-box demo source code, please install Linux and RTOS Processor SDKs from r�…�r�}r‘(h‚X[To view the out-of-box demo source code, please install Linux and RTOS Processor SDKs from h‘j‹ubj))�r’}r“(h‚XR`SDK download page `__hƒ}r”(UnameXSDK download pagej-X:http://www.ti.com/lsds/ti/tools-software/processor_sw.pageh†]h‡]h…]hŽ]h�]uh‘j‹h¦]r•h¯XSDK download pager–…�r—}r˜(h‚Uh‘j’ubah�j2ubeubaubhÜ)�r™}rš(h‚XThe source code are located in:r›h‘h³hœhÆh�hàhƒ}rœ(h…]hŽ]h‡]h†]h�]uh¤K>h¥hh¦]r�h¯XThe source code are located in:rž…�rŸ}r (h‚j›h‘j™ubaubcdocutils.nodes literal_block r¡)�r¢}r£(h‚XÃLinux side application: /ipc_x_xx_xx_xx/linux/src/tests/MessageQBench.c DSP side application: /ipc_x_xx_xx_xx/packages/ti/ipc/tests/messageq_single.ch‘h³hœhÆh�U literal_blockr¤hƒ}r¥(hÊhËh†]h‡]h…]hŽ]h�]uh¤K˜h¥hh¦]r¦h¯XÃLinux side application: /ipc_x_xx_xx_xx/linux/src/tests/MessageQBench.c DSP side application: /ipc_x_xx_xx_xx/packages/ti/ipc/tests/messageq_single.cr§…�r¨}r©(h‚Uh‘j¢ubaubhÜ)�rª}r«(h‚X**Rebuilding the demo:**r¬h‘h³hœhÆh�hàhƒ}r­(h…]hŽ]h‡]h†]h�]uh¤KEh¥hh¦]r®cdocutils.nodes strong r¯)�r°}r±(h‚j¬hƒ}r²(h…]hŽ]h‡]h†]h�]uh‘jªh¦]r³h¯XRebuilding the demo:r´…�rµ}r¶(h‚Uh‘j°ubah�Ustrongr·ubaubhþ)�r¸}r¹(h‚Uh‘h³hœhÆh�jhƒ}rº(h…]hŽ]h‡]h†]h�]uh¤KGh¥hh¦]r»(j)�r¼}r½(h‚UjKh‘j¸hœhÆh�h¤hƒ}r¾(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubj)�r¿}rÀ(h‚X**ARM Linux:**rÁjKh‘j¸hœhÆh�h¤hƒ}rÂ(h…]hŽ]h‡]h†]h�]uh¤KHh¥hh¦]rÃj¯)�rÄ}rÅ(h‚jÁhƒ}rÆ(h…]hŽ]h‡]h†]h�]uh‘j¿h¦]rÇh¯X ARM Linux:rÈ…�rÉ}rÊ(h‚Uh‘jÄubah�j·ubaubeubhÜ)�rË}rÌ(h‚X5**1.** Install Linux Proc SDK at the default locationrÍh‘h³hœhÆh�hàhƒ}rÎ(h…]hŽ]h‡]h†]h�]uh¤KJh¥hh¦]rÏ(j¯)�rÐ}rÑ(h‚X**1.**hƒ}rÒ(h…]hŽ]h‡]h†]h�]uh‘jËh¦]rÓh¯X1.rÔ…�rÕ}rÖ(h‚Uh‘jÐubah�j·ubh¯X/ Install Linux Proc SDK at the default locationr×…�rØ}rÙ(h‚X/ Install Linux Proc SDK at the default locationh‘jËubeubhÜ)�rÚ}rÛ(h‚X4**2.** Include cross-compiler directory in the $PATHrÜh‘h³hœhÆh�hàhƒ}rÝ(h…]hŽ]h‡]h†]h�]uh¤KLh¥hh¦]rÞ(j¯)�rß}rà(h‚X**2.**hƒ}rá(h…]hŽ]h‡]h†]h�]uh‘jÚh¦]râh¯X2.rã…�rä}rå(h‚Uh‘jßubah�j·ubh¯X. Include cross-compiler directory in the $PATHræ…�rç}rè(h‚X. Include cross-compiler directory in the $PATHh‘jÚubeubj¡)�ré}rê(h‚XMexport PATH=/linux-devkit/sysroots/x86_64-arago-linux/usr/bin:$PATHh‘h³hœhÆh�j¤hƒ}rë(hÊhËh†]h‡]h…]hŽ]h�]uh¤K¦h¥hh¦]rìh¯XMexport PATH=/linux-devkit/sysroots/x86_64-arago-linux/usr/bin:$PATHrí…�rî}rï(h‚Uh‘jéubaubhÜ)�rð}rñ(h‚X**3.** Setup TI RTOS PATH usingròh‘h³hœhÆh�hàhƒ}ró(h…]hŽ]h‡]h†]h�]uh¤KRh¥hh¦]rô(j¯)�rõ}rö(h‚X**3.**hƒ}r÷(h…]hŽ]h‡]h†]h�]uh‘jðh¦]røh¯X3.rù…�rú}rû(h‚Uh‘jõubah�j·ubh¯X Setup TI RTOS PATH usingrü…�rý}rþ(h‚X Setup TI RTOS PATH usingh‘jðubeubj¡)�rÿ}r(h‚XUexport TI_RTOS_PATH= export IPC_INSTALL_PATH=h‘h³hœhÆh�j¤hƒ}r(hÊhËh†]h‡]h…]hŽ]h�]uh¤K¬h¥hh¦]rh¯XUexport TI_RTOS_PATH= export IPC_INSTALL_PATH=r…�r}r(h‚Uh‘jÿubaubhÜ)�r}r(h‚X4**4.** In Linux Proc SDK, start the top level build:rh‘h³hœhÆh�hàhƒ}r (h…]hŽ]h‡]h†]h�]uh¤KYh¥hh¦]r (j¯)�r }r (h‚X**4.**hƒ}r (h…]hŽ]h‡]h†]h�]uh‘jh¦]rh¯X4.r…�r}r(h‚Uh‘j ubah�j·ubh¯X. In Linux Proc SDK, start the top level build:r…�r}r(h‚X. In Linux Proc SDK, start the top level build:h‘jubeubj¡)�r}r(h‚X$ make ti-ipc-linuxh‘h³hœhÆh�j¤hƒ}r(hÊhËh†]h‡]h…]hŽ]h�]uh¤K³h¥hh¦]rh¯X$ make ti-ipc-linuxr…�r}r(h‚Uh‘jubaubcdocutils.nodes definition_list r)�r}r(h‚Uh‘h³hœhÆh�Udefinition_listrhƒ}r (h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r!cdocutils.nodes definition_list_item r")�r#}r$(h‚X‘**5.** The ARM binary will be located under the directory where the source code is /ipc\_x\_xx\_xx\_xx/linux/src/tests/ h‘jhœhÆh�Udefinition_list_itemr%hƒ}r&(h…]hŽ]h‡]h†]h�]uh¤K`h¦]r'(cdocutils.nodes term r()�r)}r*(h‚XC**5.** The ARM binary will be located under the directory where ther+h‘j#hœhÆh�Utermr,hƒ}r-(h…]hŽ]h‡]h†]h�]uh¤K`h¦]r.(j¯)�r/}r0(h‚X**5.**hƒ}r1(h…]hŽ]h‡]h†]h�]uh‘j)h¦]r2h¯X5.r3…�r4}r5(h‚Uh‘j/ubah�j·ubh¯X= The ARM binary will be located under the directory where ther6…�r7}r8(h‚X= The ARM binary will be located under the directory where theh‘j)ubeubcdocutils.nodes definition r9)�r:}r;(h‚Uhƒ}r<(h…]hŽ]h‡]h†]h�]uh‘j#h¦]r=hÜ)�r>}r?(h‚XLsource code is /ipc\_x\_xx\_xx\_xx/linux/src/tests/h‘j:hœhÆh�hàhƒ}r@(h…]hŽ]h‡]h†]h�]uh¤K`h¦]rAh¯XEsource code is /ipc_x_xx_xx_xx/linux/src/tests/rB…�rC}rD(h‚XLsource code is /ipc\_x\_xx\_xx\_xx/linux/src/tests/h‘j>ubaubah�U definitionrEubeubaubj)�rF}rG(h‚X•Please follow the build instruction in `Linux Kernel User Guide `__ to set up the build environment.h‘h³hœhÆh�jhƒ}rH(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rIhÜ)�rJ}rK(h‚X•Please follow the build instruction in `Linux Kernel User Guide `__ to set up the build environment.h‘jFhœhÆh�hàhƒ}rL(h…]hŽ]h‡]h†]h�]uh¤Kdh¦]rM(h¯X'Please follow the build instruction in rN…�rO}rP(h‚X'Please follow the build instruction in h‘jJubj))�rQ}rR(h‚XM`Linux Kernel User Guide `__hƒ}rS(UnameXLinux Kernel User Guidej-X/Foundational_Components_Kernel_Users_Guide.htmlh†]h‡]h…]hŽ]h�]uh‘jJh¦]rTh¯XLinux Kernel User GuiderU…�rV}rW(h‚Uh‘jQubah�j2ubh¯X! to set up the build environment.rX…�rY}rZ(h‚X! to set up the build environment.h‘jJubeubaubhþ)�r[}r\(h‚Uh‘h³hœhÆh�jhƒ}r](h…]hŽ]h‡]h†]h�]uh¤Khh¥hh¦]r^(j)�r_}r`(h‚UjKh‘j[hœhÆh�h¤hƒ}ra(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubj)�rb}rc(h‚X**DSP RTOS :**rdjKh‘j[hœhÆh�h¤hƒ}re(h…]hŽ]h‡]h†]h�]uh¤Kih¥hh¦]rfj¯)�rg}rh(h‚jdhƒ}ri(h…]hŽ]h‡]h†]h�]uh‘jbh¦]rjh¯X DSP RTOS :rk…�rl}rm(h‚Uh‘jgubah�j·ubaubeubhÜ)�rn}ro(h‚X4**1.** Install RTOS Proc SDK at the default locationrph‘h³hœhÆh�hàhƒ}rq(h…]hŽ]h‡]h†]h�]uh¤Kkh¥hh¦]rr(j¯)�rs}rt(h‚X**1.**hƒ}ru(h…]hŽ]h‡]h†]h�]uh‘jnh¦]rvh¯X1.rw…�rx}ry(h‚Uh‘jsubah�j·ubh¯X. Install RTOS Proc SDK at the default locationrz…�r{}r|(h‚X. Install RTOS Proc SDK at the default locationh‘jnubeubj)�r}}r~(h‚Uh‘h³hœhÆh�jhƒ}r(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r€j")�r�}r‚(h‚XÍ**2.** If RTOS Proc SDK and tools are not installed at its default location, then the environment variables, SDK\_INSTALL\_PATH and TOOLS\_INSTALL\_PATH need to be exported with their installed locations. h‘j}hœhÆh�j%hƒ}rƒ(h…]hŽ]h‡]h†]h�]uh¤Koh¦]r„(j()�r…}r†(h‚XB**2.** If RTOS Proc SDK and tools are not installed at its defaultr‡h‘j�hœhÆh�j,hƒ}rˆ(h…]hŽ]h‡]h†]h�]uh¤Koh¦]r‰(j¯)�rŠ}r‹(h‚X**2.**hƒ}rŒ(h…]hŽ]h‡]h†]h�]uh‘j…h¦]r�h¯X2.rŽ…�r�}r�(h‚Uh‘jŠubah�j·ubh¯X< If RTOS Proc SDK and tools are not installed at its defaultr‘…�r’}r“(h‚X< If RTOS Proc SDK and tools are not installed at its defaulth‘j…ubeubj9)�r”}r•(h‚Uhƒ}r–(h…]hŽ]h‡]h†]h�]uh‘j�h¦]r—hÜ)�r˜}r™(h‚X‰location, then the environment variables, SDK\_INSTALL\_PATH and TOOLS\_INSTALL\_PATH need to be exported with their installed locations.h‘j”hœhÆh�hàhƒ}rš(h…]hŽ]h‡]h†]h�]uh¤Knh¦]r›h¯X…location, then the environment variables, SDK_INSTALL_PATH and TOOLS_INSTALL_PATH need to be exported with their installed locations.rœ…�r�}rž(h‚X‰location, then the environment variables, SDK\_INSTALL\_PATH and TOOLS\_INSTALL\_PATH need to be exported with their installed locations.h‘j˜ubaubah�jEubeubaubj¡)�rŸ}r (h‚X_export SDK_INSTALL_PATH= export TOOLS_INSTALL_PATH=h‘h³hœhÆh�j¤hƒ}r¡(hÊhËh†]h‡]h…]hŽ]h�]uh¤KÉh¥hh¦]r¢h¯X_export SDK_INSTALL_PATH= export TOOLS_INSTALL_PATH=r£…�r¤}r¥(h‚Uh‘jŸubaubj)�r¦}r§(h‚XWFor ProcSDK 3.2 or older releases, tools are not included in RTOS SDK, so point to CCS:h‘h³hœhÆh�jhƒ}r¨(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r©hÜ)�rª}r«(h‚XWFor ProcSDK 3.2 or older releases, tools are not included in RTOS SDK, so point to CCS:r¬h‘j¦hœhÆh�hàhƒ}r­(h…]hŽ]h‡]h†]h�]uh¤Kxh¦]r®h¯XWFor ProcSDK 3.2 or older releases, tools are not included in RTOS SDK, so point to CCS:r¯…�r°}r±(h‚j¬h‘jªubaubaubj¡)�r²}r³(h‚X.export TOOLS_INSTALL_PATH=h‘h³hœhÆh�j¤hƒ}r´(hÊhËh†]h‡]h…]hŽ]h�]uh¤KÓh¥hh¦]rµh¯X.export TOOLS_INSTALL_PATH=r¶…�r·}r¸(h‚Uh‘j²ubaubj)�r¹}rº(h‚Uh‘h³hœhÆh�jhƒ}r»(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r¼j")�r½}r¾(h‚X~**3.** Configure the build environment in /processor\_sdk\_rtos\_\_x\_xx\_xx\_xx directory h‘j¹hœhÆh�j%hƒ}r¿(h…]hŽ]h‡]h†]h�]uh¤K�h¦]rÀ(j()�rÁ}rÂ(h‚X)**3.** Configure the build environment inrÃh‘j½hœhÆh�j,hƒ}rÄ(h…]hŽ]h‡]h†]h�]uh¤K�h¦]rÅ(j¯)�rÆ}rÇ(h‚X**3.**hƒ}rÈ(h…]hŽ]h‡]h†]h�]uh‘jÁh¦]rÉh¯X3.rÊ…�rË}rÌ(h‚Uh‘jÆubah�j·ubh¯X# Configure the build environment inrÍ…�rÎ}rÏ(h‚X# Configure the build environment inh‘jÁubeubj9)�rÐ}rÑ(h‚Uhƒ}rÒ(h…]hŽ]h‡]h†]h�]uh‘j½h¦]rÓhÜ)�rÔ}rÕ(h‚XS/processor\_sdk\_rtos\_\_x\_xx\_xx\_xx directoryh‘jÐhœhÆh�hàhƒ}rÖ(h…]hŽ]h‡]h†]h�]uh¤K€h¦]r×h¯XI/processor_sdk_rtos__x_xx_xx_xx directoryrØ…�rÙ}rÚ(h‚XS/processor\_sdk\_rtos\_\_x\_xx\_xx\_xx directoryh‘jÔubaubah�jEubeubaubj¡)�rÛ}rÜ(h‚X[$ cd /processor_sdk_rtos__x_xx_xx_xx $ source ./setupenv.shh‘h³hœhÆh�j¤hƒ}rÝ(hÊhËh†]h‡]h…]hŽ]h�]uh¤KÛh¥hh¦]rÞh¯X[$ cd /processor_sdk_rtos__x_xx_xx_xx $ source ./setupenv.shrß…�rà}rá(h‚Uh‘jÛubaubhÜ)�râ}rã(h‚X!**4.** Start the top level build:räh‘h³hœhÆh�hàhƒ}rå(h…]hŽ]h‡]h†]h�]uh¤Kˆh¥hh¦]ræ(j¯)�rç}rè(h‚X**4.**hƒ}ré(h…]hŽ]h‡]h†]h�]uh‘jâh¦]rêh¯X4.rë…�rì}rí(h‚Uh‘jçubah�j·ubh¯X Start the top level build:rî…�rï}rð(h‚X Start the top level build:h‘jâubeubj¡)�rñ}rò(h‚X$ make ipc_biosh‘h³hœhÆh�j¤hƒ}ró(hÊhËh†]h‡]h…]hŽ]h�]uh¤Kâh¥hh¦]rôh¯X$ make ipc_biosrõ…�rö}r÷(h‚Uh‘jñubaubj)�rø}rù(h‚Uh‘h³hœhÆh�jhƒ}rú(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rûj")�rü}rý(h‚XS**5.** The DSP binary will be located under the directory where the source code is h‘jøhœhÆh�j%hƒ}rþ(h…]hŽ]h‡]h†]h�]uh¤K�h¦]rÿ(j()�r}r(h‚XC**5.** The DSP binary will be located under the directory where therh‘jühœhÆh�j,hƒ}r(h…]hŽ]h‡]h†]h�]uh¤K�h¦]r(j¯)�r}r(h‚X**5.**hƒ}r(h…]hŽ]h‡]h†]h�]uh‘jh¦]rh¯X5.r …�r }r (h‚Uh‘jubah�j·ubh¯X= The DSP binary will be located under the directory where ther …�r }r(h‚X= The DSP binary will be located under the directory where theh‘jubeubj9)�r}r(h‚Uhƒ}r(h…]hŽ]h‡]h†]h�]uh‘jüh¦]rhÜ)�r}r(h‚Xsource code isrh‘jhœhÆh�hàhƒ}r(h…]hŽ]h‡]h†]h�]uh¤K�h¦]rh¯Xsource code isr…�r}r(h‚jh‘jubaubah�jEubeubaubj¡)�r}r(h‚X;/ipc_x_xx_xx_xx/packages/ti/ipc/testsh‘h³hœhÆh�j¤hƒ}r(hÊhËh†]h‡]h…]hŽ]h�]uh¤Kéh¥hh¦]rh¯X;/ipc_x_xx_xx_xx/packages/ti/ipc/testsr…�r }r!(h‚Uh‘jubaubhþ)�r"}r#(h‚Uh‘h³hœhÆh�jhƒ}r$(h…]hŽ]h‡]h†]h�]uh¤K•h¥hh¦]r%j)�r&}r'(h‚UjKh‘j"hœhÆh�h¤hƒ}r((h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubh’)�r)}r*(h‚XBuild IPC Linux examplesr+h‘h³hœhÆh�hÓhƒ}r,(h†]r-Ubuild-ipc-linux-examplesr.ah‡]h…]hŽ]h�]r/h$auh¤Nh¥hh¦]r0h¯XBuild IPC Linux examplesr1…�r2}r3(h‚j+h‘j)ubaubhÜ)�r4}r5(h‚X&IPC package and its examples are delivered in RTOS Processor SDK, but can be built from Linux Proc SDK. To build IPC examples, both Linux and RTOS processor SDKs need to be installed. They can be downloaded from `SDK download page `__h‘h³hœhÆh�hàhƒ}r6(h…]hŽ]h‡]h†]h�]uh¤Kšh¥hh¦]r7(h¯XÔIPC package and its examples are delivered in RTOS Processor SDK, but can be built from Linux Proc SDK. To build IPC examples, both Linux and RTOS processor SDKs need to be installed. They can be downloaded from r8…�r9}r:(h‚XÔIPC package and its examples are delivered in RTOS Processor SDK, but can be built from Linux Proc SDK. To build IPC examples, both Linux and RTOS processor SDKs need to be installed. They can be downloaded from h‘j4ubj))�r;}r<(h‚XR`SDK download page `__hƒ}r=(UnameXSDK download pagej-X:http://www.ti.com/lsds/ti/tools-software/processor_sw.pageh†]h‡]h…]hŽ]h�]uh‘j4h¦]r>h¯XSDK download pager?…�r@}rA(h‚Uh‘j;ubah�j2ubeubhÜ)�rB}rC(h‚X‰To install Linux Proc SDK, please follow the instruction in `Download and Install the SDK `__h‘h³hœhÆh�hàhƒ}rD(h…]hŽ]h‡]h†]h�]uh¤K h¥hh¦]rE(h¯X<To install Linux Proc SDK, please follow the instruction in rF…�rG}rH(h‚X<To install Linux Proc SDK, please follow the instruction in h‘jBubj))�rI}rJ(h‚XM`Download and Install the SDK `__hƒ}rK(UnameXDownload and Install the SDKj-X*Overview/Download_and_Install_the_SDK.htmlh†]h‡]h…]hŽ]h�]uh‘jBh¦]rLh¯XDownload and Install the SDKrM…�rN}rO(h‚Uh‘jIubah�j2ubeubhÜ)�rP}rQ(h‚X¯To Install RTOS Proc SDK, please see `Processor SDK for RTOS `__h‘h³hœhÆh�hàhƒ}rR(h…]hŽ]h‡]h†]h�]uh¤K¤h¥hh¦]rS(h¯X%To Install RTOS Proc SDK, please see rT…�rU}rV(h‚X%To Install RTOS Proc SDK, please see h‘jPubj))�rW}rX(h‚XŠ`Processor SDK for RTOS `__hƒ}rY(UnameXProcessor SDK for RTOSj-Xlhttp://software-dl.ti.com/processor-sdk-rtos/esd/docs/latest/rtos/index_overview.html#processor-sdk-for-rtosh†]h‡]h…]hŽ]h�]uh‘jPh¦]rZh¯XProcessor SDK for RTOSr[…�r\}r](h‚Uh‘jWubah�j2ubeubhÜ)�r^}r_(h‚XËOnce the Linux and RTOS Processor SDKs are installed at their default locations, the IPC Linux library, not included in the Linux Proc SDK, can be built on Linux host machine with the following commands:r`h‘h³hœhÆh�hàhƒ}ra(h…]hŽ]h‡]h†]h�]uh¤K¨h¥hh¦]rbh¯XËOnce the Linux and RTOS Processor SDKs are installed at their default locations, the IPC Linux library, not included in the Linux Proc SDK, can be built on Linux host machine with the following commands:rc…�rd}re(h‚j`h‘j^ubaubj¡)�rf}rg(h‚X8$ cd $ make ti-ipc-linuxh‘h³hœhÆh�j¤hƒ}rh(hÊhËh†]h‡]h…]hŽ]h�]uh¤Mh¥hh¦]rih¯X8$ cd $ make ti-ipc-linuxrj…�rk}rl(h‚Uh‘jfubaubhÜ)�rm}rn(h‚XeThe IPC examples in RTOS Proc SDK including out-of-box demo can be built with the following commands:roh‘h³hœhÆh�hàhƒ}rp(h…]hŽ]h‡]h†]h�]uh¤K±h¥hh¦]rqh¯XeThe IPC examples in RTOS Proc SDK including out-of-box demo can be built with the following commands:rr…�rs}rt(h‚joh‘jmubaubj¡)�ru}rv(h‚XA$ cd $ make ti-ipc-linux-examplesh‘h³hœhÆh�j¤hƒ}rw(hÊhËh†]h‡]h…]hŽ]h�]uh¤M h¥hh¦]rxh¯XA$ cd $ make ti-ipc-linux-examplesry…�rz}r{(h‚Uh‘juubaubj)�r|}r}(h‚X•Please follow the build instruction in `Linux Kernel User Guide `__ to set up the build environment.h‘h³hœhÆh�jhƒ}r~(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rhÜ)�r€}r�(h‚X•Please follow the build instruction in `Linux Kernel User Guide `__ to set up the build environment.h‘j|hœhÆh�hàhƒ}r‚(h…]hŽ]h‡]h†]h�]uh¤K»h¦]rƒ(h¯X'Please follow the build instruction in r„…�r…}r†(h‚X'Please follow the build instruction in h‘j€ubj))�r‡}rˆ(h‚XM`Linux Kernel User Guide `__hƒ}r‰(UnameXLinux Kernel User Guidej-X/Foundational_Components_Kernel_Users_Guide.htmlh†]h‡]h…]hŽ]h�]uh‘j€h¦]rŠh¯XLinux Kernel User Guider‹…�rŒ}r�(h‚Uh‘j‡ubah�j2ubh¯X! to set up the build environment.rŽ…�r�}r�(h‚X! to set up the build environment.h‘j€ubeubaubj)�r‘}r’(h‚XžIf RTOS Proc SDK is not installed at its default location, then the environment variables, TI\_RTOS\_PATH needs to be exported with their installed locations.h‘h³hœhÆh�jhƒ}r“(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r”hÜ)�r•}r–(h‚XžIf RTOS Proc SDK is not installed at its default location, then the environment variables, TI\_RTOS\_PATH needs to be exported with their installed locations.h‘j‘hœhÆh�hàhƒ}r—(h…]hŽ]h‡]h†]h�]uh¤KÁh¦]r˜h¯XœIf RTOS Proc SDK is not installed at its default location, then the environment variables, TI_RTOS_PATH needs to be exported with their installed locations.r™…�rš}r›(h‚XžIf RTOS Proc SDK is not installed at its default location, then the environment variables, TI\_RTOS\_PATH needs to be exported with their installed locations.h‘j•ubaubaubj¡)�rœ}r�(h‚X2export TI_RTOS_PATH=h‘h³hœhÆh�j¤hƒ}rž(hÊhËh†]h‡]h…]hŽ]h�]uh¤Mh¥hh¦]rŸh¯X2export TI_RTOS_PATH=r …�r¡}r¢(h‚Uh‘jœubaubhÜ)�r£}r¤(h‚X`Also if using Processor SDK 3.2 or older release, need to also set TI_CCS_PATH to CCSV6 locationr¥h‘h³hœhÆh�hàhƒ}r¦(h…]hŽ]h‡]h†]h�]uh¤KÉh¥hh¦]r§h¯X`Also if using Processor SDK 3.2 or older release, need to also set TI_CCS_PATH to CCSV6 locationr¨…�r©}rª(h‚j¥h‘j£ubaubj¡)�r«}r¬(h‚X-export TI_CCS_PATH=/ccsv6h‘h³hœhÆh�j¤hƒ}r­(hÊhËh†]h‡]h…]hŽ]h�]uh¤M#h¥hh¦]r®h¯X-export TI_CCS_PATH=/ccsv6r¯…�r°}r±(h‚Uh‘j«ubaubh’)�r²}r³(h‚XRun IPC Linux examplesr´h‘h³hœhÆh�hÓhƒ}rµ(h†]r¶Urun-ipc-linux-examplesr·ah‡]h…]hŽ]h�]r¸h[auh¤Nh¥hh¦]r¹h¯XRun IPC Linux examplesrº…�r»}r¼(h‚j´h‘j²ubaubj6)�r½}r¾(h‚Uh‘h³hœhÆh�j9hƒ}r¿(j;U.h†]h‡]h…]j<UhŽ]h�]j=j>uh¤KÒh¥hh¦]rÀj@)�rÁ}rÂ(h‚XWThe executables are in RTOS Proc SDK under the ipc\_xx\_xx\_xx\_xx/examples directory. h‘j½hœhÆh�jChƒ}rÃ(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rÄhÜ)�rÅ}rÆ(h‚XVThe executables are in RTOS Proc SDK under the ipc\_xx\_xx\_xx\_xx/examples directory.h‘jÁhœhÆh�hàhƒ}rÇ(h…]hŽ]h‡]h†]h�]uh¤KÒh¦]rÈh¯XRThe executables are in RTOS Proc SDK under the ipc_xx_xx_xx_xx/examples directory.rÉ…�rÊ}rË(h‚XVThe executables are in RTOS Proc SDK under the ipc\_xx\_xx\_xx\_xx/examples directory.h‘jÅubaubaubaubj¡)�rÌ}rÍ(h‚X__elf/ex/host/bin/debug/app_host __elf/ex/bin/debug/__elf/ex/bin/debug/__elf/ex/host/bin/debug/app_host __elf/ex/bin/debug/__elf/ex/bin/debug/uh¤KÛh¥hh¦]r×(j@)�rØ}rÙ(h‚XHCopy the executables to the target filesystem. It can also be done by running "make ti-ipc-linux-examples\_install" to install the binaries to DESTDIR if using NFS filesystem. ( See `Moving\_Files\_to\_the\_Target\_System `__ for details of moving files to filesystem) h‘jÓhœhÆh�jChƒ}rÚ(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rÛhÜ)�rÜ}rÝ(h‚XGCopy the executables to the target filesystem. It can also be done by running "make ti-ipc-linux-examples\_install" to install the binaries to DESTDIR if using NFS filesystem. ( See `Moving\_Files\_to\_the\_Target\_System `__ for details of moving files to filesystem)h‘jØhœhÆh�hàhƒ}rÞ(h…]hŽ]h‡]h†]h�]uh¤KÛh¦]rß(h¯XµCopy the executables to the target filesystem. It can also be done by running "make ti-ipc-linux-examples_install" to install the binaries to DESTDIR if using NFS filesystem. ( See rà…�rá}râ(h‚X¶Copy the executables to the target filesystem. It can also be done by running "make ti-ipc-linux-examples\_install" to install the binaries to DESTDIR if using NFS filesystem. ( See h‘jÜubj))�rã}rä(h‚Xf`Moving\_Files\_to\_the\_Target\_System `__hƒ}rå(UnameX!Moving_Files_to_the_Target_Systemj-X9How_to_Guides/Host/Moving_Files_to_the_Target_System.htmlh†]h‡]h…]hŽ]h�]uh‘jÜh¦]ræh¯X!Moving_Files_to_the_Target_Systemrç…�rè}ré(h‚Uh‘jãubah�j2ubh¯X+ for details of moving files to filesystem)rê…�rë}rì(h‚X+ for details of moving files to filesystem)h‘jÜubeubaubj@)�rí}rî(h‚X5Load and start the executable on the target DSP/IPU. h‘jÓhœhÆh�jChƒ}rï(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rðhÜ)�rñ}rò(h‚X4Load and start the executable on the target DSP/IPU.róh‘jíhœhÆh�hàhƒ}rô(h…]hŽ]h‡]h†]h�]uh¤Káh¦]rõh¯X4Load and start the executable on the target DSP/IPU.rö…�r÷}rø(h‚jóh‘jñubaubaubeubhÜ)�rù}rú(h‚XFor AM57x platforms, Modify the symbolic links in /lib/firmware of the default image names to the built binaries. The images pointed by the symbolic links will be downloaded to and started execution on the corresponding processors by remoteproc during Linux Kernel boots.rûh‘h³hœhÆh�hàhƒ}rü(h…]hŽ]h‡]h†]h�]uh¤Kãh¥hh¦]rýh¯XFor AM57x platforms, Modify the symbolic links in /lib/firmware of the default image names to the built binaries. The images pointed by the symbolic links will be downloaded to and started execution on the corresponding processors by remoteproc during Linux Kernel boots.rþ…�rÿ}r(h‚jûh‘jùubaubj¡)�r}r(h‚XlDSP image files: dra7-dsp1-fw.xe66 dra7-dsp2-fw.xe66 IPU image files: dra7-ipu1-fw.xem4 dra7-ipu2-fw.xem4h‘h³hœhÆh�j¤hƒ}r(hÊhËh†]h‡]h…]hŽ]h�]uh¤M@h¥hh¦]rh¯XlDSP image files: dra7-dsp1-fw.xe66 dra7-dsp2-fw.xe66 IPU image files: dra7-ipu1-fw.xem4 dra7-ipu2-fw.xem4r…�r}r(h‚Uh‘jubaubhÜ)�r}r (h‚XoFor OMAP-L138 platform, Modify the symblic link in /lib/firmware of the default image names to the build binaryr h‘h³hœhÆh�hàhƒ}r (h…]hŽ]h‡]h†]h�]uh¤Kíh¥hh¦]r h¯XoFor OMAP-L138 platform, Modify the symblic link in /lib/firmware of the default image names to the build binaryr …�r}r(h‚j h‘jubaubj¡)�r}r(h‚XDSP image files: rproc-dsp-fwh‘h³hœhÆh�j¤hƒ}r(hÊhËh†]h‡]h…]hŽ]h�]uh¤MHh¥hh¦]rh¯XDSP image files: rproc-dsp-fwr…�r}r(h‚Uh‘jubaubhÜ)�r}r(h‚X¸For Keystone-2 platforms, use the Multi-Processor Manager (MPM) Command Line utilities to download and start the DSP executibles. Please refer to /usr/bin/mc\_demo\_ipc.sh for examplesh‘h³hœhÆh�hàhƒ}r(h…]hŽ]h‡]h†]h�]uh¤Kôh¥hh¦]rh¯X¶For Keystone-2 platforms, use the Multi-Processor Manager (MPM) Command Line utilities to download and start the DSP executibles. Please refer to /usr/bin/mc_demo_ipc.sh for examplesr…�r}r(h‚X¸For Keystone-2 platforms, use the Multi-Processor Manager (MPM) Command Line utilities to download and start the DSP executibles. Please refer to /usr/bin/mc\_demo\_ipc.sh for examplesh‘jubaubj¡)�r}r(h‚X�The available commands are: mpmcl reset mpmcl status mpmcl load mpmcl run h‘h³hœhÆh�j¤hƒ}r (hÊhËh†]h‡]h…]hŽ]h�]uh¤MPh¥hh¦]r!h¯X�The available commands are: mpmcl reset mpmcl status mpmcl load mpmcl run r"…�r#}r$(h‚Uh‘jubaubj6)�r%}r&(h‚Uh‘h³hœhÆh�j9hƒ}r'(j;U.jÖKh†]h‡]h…]j<UhŽ]h�]j=j>uh¤Mh¥hh¦]r(j@)�r)}r*(h‚XzRun the example From the Linux kernel prompt, run the host executable, app\_host. An example from running ex02\_messageq: h‘j%hœhÆh�jChƒ}r+(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r,hÜ)�r-}r.(h‚XyRun the example From the Linux kernel prompt, run the host executable, app\_host. An example from running ex02\_messageq:h‘j)hœhÆh�hàhƒ}r/(h…]hŽ]h‡]h†]h�]uh¤Mh¦]r0h¯XwRun the example From the Linux kernel prompt, run the host executable, app_host. An example from running ex02_messageq:r1…�r2}r3(h‚XyRun the example From the Linux kernel prompt, run the host executable, app\_host. An example from running ex02\_messageq:h‘j-ubaubaubaubj¡)�r4}r5(h‚X"root@am57xx-evm:~# ./app_host DSP1h‘h³hœhÆh�j¤hƒ}r6(hÊhËh†]h‡]h…]hŽ]h�]uh¤M\h¥hh¦]r7h¯X"root@am57xx-evm:~# ./app_host DSP1r8…�r9}r:(h‚Uh‘j4ubaubhÜ)�r;}r<(h‚XThe console output:r=h‘h³hœhÆh�hàhƒ}r>(h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]r?h¯XThe console output:r@…�rA}rB(h‚j=h‘j;ubaubj¡)�rC}rD(h‚X‘--> main: --> Main_main: --> App_create: App_create: Host is ready <-- App_create: --> App_exec: App_exec: sending message 1 App_exec: sending message 2 App_exec: sending message 3 App_exec: message received, sending message 4 App_exec: message received, sending message 5 App_exec: message received, sending message 6 App_exec: message received, sending message 7 App_exec: message received, sending message 8 App_exec: message received, sending message 9 App_exec: message received, sending message 10 App_exec: message received, sending message 11 App_exec: message received, sending message 12 App_exec: message received, sending message 13 App_exec: message received, sending message 14 App_exec: message received, sending message 15 App_exec : message received App_exec: message received App_exec: message received <-- App_exec: 0 --> App_delete: <-- App_delete: <-- Main_main: <-- main: root@am57xx-evm:~#h‘h³hœhÆh�j¤hƒ}rE(hÊhËh†]h‡]h…]hŽ]h�]uh¤Mbh¥hh¦]rFh¯X‘--> main: --> Main_main: --> App_create: App_create: Host is ready <-- App_create: --> App_exec: App_exec: sending message 1 App_exec: sending message 2 App_exec: sending message 3 App_exec: message received, sending message 4 App_exec: message received, sending message 5 App_exec: message received, sending message 6 App_exec: message received, sending message 7 App_exec: message received, sending message 8 App_exec: message received, sending message 9 App_exec: message received, sending message 10 App_exec: message received, sending message 11 App_exec: message received, sending message 12 App_exec: message received, sending message 13 App_exec: message received, sending message 14 App_exec: message received, sending message 15 App_exec : message received App_exec: message received App_exec: message received <-- App_exec: 0 --> App_delete: <-- App_delete: <-- Main_main: <-- main: root@am57xx-evm:~#rG…�rH}rI(h‚Uh‘jCubaubhþ)�rJ}rK(h‚Uh‘h³hœhÆh�jhƒ}rL(h…]hŽ]h‡]h†]h�]uh¤M+h¥hh¦]rMj)�rN}rO(h‚UjKh‘jJhœhÆh�h¤hƒ}rP(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubh’)�rQ}rR(h‚XBuild IPC RTOS examplesrSh‘h³hœhÆh�hÓhƒ}rT(h†]rUUbuild-ipc-rtos-examplesrVah‡]h…]hŽ]h�]rWh0auh¤Nh¥hh¦]rXh¯XBuild IPC RTOS examplesrY…�rZ}r[(h‚jSh‘jQubaubhÜ)�r\}r](h‚XŸThe IPC package also includes examples for the use case with Host and the slave cores running RTOS/BIOS. They can be built from the Processor SDK RTOS package.r^h‘h³hœhÆh�hàhƒ}r_(h…]hŽ]h‡]h†]h�]uh¤M0h¥hh¦]r`h¯XŸThe IPC package also includes examples for the use case with Host and the slave cores running RTOS/BIOS. They can be built from the Processor SDK RTOS package.ra…�rb}rc(h‚j^h‘j\ubaubj)�rd}re(h‚XmTo Install RTOS Proc SDK, please follow the instructions in `RTOS SDK Getting Started Guide `__ In the RTOS Processor SDK, the ipc examples are located under /processor\_sdk\_rtos\_\_x\_xx\_xx\_xx/ipc\_/examples/\_bios\_elf.h‘h³hœhÆh�jhƒ}rf(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rghÜ)�rh}ri(h‚XmTo Install RTOS Proc SDK, please follow the instructions in `RTOS SDK Getting Started Guide `__ In the RTOS Processor SDK, the ipc examples are located under /processor\_sdk\_rtos\_\_x\_xx\_xx\_xx/ipc\_/examples/\_bios\_elf.h‘jdhœhÆh�hàhƒ}rj(h…]hŽ]h‡]h†]h�]uh¤M6h¦]rk(h¯X<To Install RTOS Proc SDK, please follow the instructions in rl…�rm}rn(h‚X<To Install RTOS Proc SDK, please follow the instructions in h‘jhubj))�ro}rp(h‚Xz`RTOS SDK Getting Started Guide `__hƒ}rq(UnameXRTOS SDK Getting Started Guidej-XUhttp://software-dl.ti.com/processor-sdk-rtos/esd/docs/latest/rtos/index_overview.htmlh†]h‡]h…]hŽ]h�]uh‘jhh¦]rrh¯XRTOS SDK Getting Started Guiders…�rt}ru(h‚Uh‘joubah�j2ubh¯Xª In the RTOS Processor SDK, the ipc examples are located under /processor_sdk_rtos__x_xx_xx_xx/ipc_/examples/_bios_elf.rv…�rw}rx(h‚X· In the RTOS Processor SDK, the ipc examples are located under /processor\_sdk\_rtos\_\_x\_xx\_xx\_xx/ipc\_/examples/\_bios\_elf.h‘jhubeubaubhÜ)�ry}rz(h‚XÈNOTE: The platform in the directory name may be slightly different from the top level platform name. For example, platform name DRA7XX refer to common examples for DRA7XX & AM57x family of processors.r{h‘h³hœhÆh�hàhƒ}r|(h…]hŽ]h‡]h†]h�]uh¤M<h¥hh¦]r}h¯XÈNOTE: The platform in the directory name may be slightly different from the top level platform name. For example, platform name DRA7XX refer to common examples for DRA7XX & AM57x family of processors.r~…�r}r€(h‚j{h‘jyubaubhÜ)�r�}r‚(h‚X}Once the RTOS Processor SDKs is installed at the default location, the IPC examples can be built with the following commands:rƒh‘h³hœhÆh�hàhƒ}r„(h…]hŽ]h‡]h†]h�]uh¤M@h¥hh¦]r…h¯X}Once the RTOS Processor SDKs is installed at the default location, the IPC examples can be built with the following commands:r†…�r‡}rˆ(h‚jƒh‘j�ubaubj¡)�r‰}rŠ(h‚X1. Configure the build environment in /processor_sdk_rtos__x_xx_xx_xx directory $ cd /processor_sdk_rtos__x_xx_xx_xx $ source ./setupenv.sh 2. Start the top level build: $ make ipc_examplesh‘h³hœhÆh�j¤hƒ}r‹(hÊhËh†]h‡]h…]hŽ]h�]uh¤M›h¥hh¦]rŒh¯X1. Configure the build environment in /processor_sdk_rtos__x_xx_xx_xx directory $ cd /processor_sdk_rtos__x_xx_xx_xx $ source ./setupenv.sh 2. Start the top level build: $ make ipc_examplesr�…�rŽ}r�(h‚Uh‘j‰ubaubj)�r�}r‘(h‚XÅIf RTOS Proc SDK and tools are not installed at its default location, then the environment variables, SDK\_INSTALL\_PATH and TOOLS\_INSTALL\_PATH need to be exported with their installed locations.h‘h³hœhÆh�jhƒ}r’(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r“hÜ)�r”}r•(h‚XÅIf RTOS Proc SDK and tools are not installed at its default location, then the environment variables, SDK\_INSTALL\_PATH and TOOLS\_INSTALL\_PATH need to be exported with their installed locations.h‘j�hœhÆh�hàhƒ}r–(h…]hŽ]h‡]h†]h�]uh¤MNh¦]r—h¯XÁIf RTOS Proc SDK and tools are not installed at its default location, then the environment variables, SDK_INSTALL_PATH and TOOLS_INSTALL_PATH need to be exported with their installed locations.r˜…�r™}rš(h‚XÅIf RTOS Proc SDK and tools are not installed at its default location, then the environment variables, SDK\_INSTALL\_PATH and TOOLS\_INSTALL\_PATH need to be exported with their installed locations.h‘j”ubaubaubhþ)�r›}rœ(h‚Uh‘h³hœhÆh�jhƒ}r�(h…]hŽ]h‡]h†]h�]uh¤MRh¥hh¦]ržj)�rŸ}r (h‚UjKh‘j›hœhÆh�h¤hƒ}r¡(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubh’)�r¢}r£(h‚XRun IPC RTOS examplesr¤h‘h³hœhÆh�hÓhƒ}r¥(h†]r¦Urun-ipc-rtos-examplesr§ah‡]h…]hŽ]h�]r¨h!auh¤Nh¥hh¦]r©h¯XRun IPC RTOS examplesrª…�r«}r¬(h‚j¤h‘j¢ubaubhÜ)�r­}r®(h‚XÆThe binary images for the examples are located in the corresponding directories for host and the individual cores. The examples can be run by loading and running the binaries using CCS through JTAG.r¯h‘h³hœhÆh�hàhƒ}r°(h…]hŽ]h‡]h†]h�]uh¤MWh¥hh¦]r±h¯XÆThe binary images for the examples are located in the corresponding directories for host and the individual cores. The examples can be run by loading and running the binaries using CCS through JTAG.r²…�r³}r´(h‚j¯h‘j­ubaubh’)�rµ}r¶(h‚XBuild your own projectr·h‘h³hœhÆh�hÓhƒ}r¸(h†]r¹Ubuild-your-own-projectrºah‡]h…]hŽ]h�]r»huauh¤Nh¥hh¦]r¼h¯XBuild your own projectr½…�r¾}r¿(h‚j·h‘jµubaubhÜ)�rÀ}rÁ(h‚X˜After exercising the IPC build and running examples, users can take further look at the source code of the examples as references for their own project.rÂh‘h³hœhÆh�hàhƒ}rÃ(h…]hŽ]h‡]h†]h�]uh¤M^h¥hh¦]rÄh¯X˜After exercising the IPC build and running examples, users can take further look at the source code of the examples as references for their own project.rÅ…�rÆ}rÇ(h‚jÂh‘jÀubaubhÜ)�rÈ}rÉ(h‚XºThe sources for examples are under ipc\_xx\_xx\_xx\_xx/examples/\_\_elf directories. Once modified the same build process described above can be used to rebuild the examples.h‘h³hœhÆh�hàhƒ}rÊ(h…]hŽ]h‡]h†]h�]uh¤Mbh¥hh¦]rËh¯X´The sources for examples are under ipc_xx_xx_xx_xx/examples/__elf directories. Once modified the same build process described above can be used to rebuild the examples.rÌ…�rÍ}rÎ(h‚XºThe sources for examples are under ipc\_xx\_xx\_xx\_xx/examples/\_\_elf directories. Once modified the same build process described above can be used to rebuild the examples.h‘jÈubaubeubh–)�rÏ}rÐ(h‚Uh‘hšhœhŒh�hžhƒ}rÑ(h…]hŽ]h‡]h†]rÒUipc-for-am57xxrÓah�]rÔhZauh¤Kh¥hh¦]rÕ(h¨)�rÖ}r×(h‚XIPC for AM57xxrØh‘jÏhœhŒh�h¬hƒ}rÙ(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]rÚh¯XIPC for AM57xxrÛ…�rÜ}rÝ(h‚jØh‘jÖubaubhÂ)�rÞ}rß(h‚X;http://processors.wiki.ti.com/index.php/Linux_IPC_on_AM57xxh‘jÏhœhŠX?source/linux/Foundational_Components/IPC/IPC_for_AM57xx.rst.incrà…�rá}râbh�hÈhƒ}rã(hÊhËh†]h‡]h…]hŽ]h�]uh¤Kh¥hh¦]räh¯X;http://processors.wiki.ti.com/index.php/Linux_IPC_on_AM57xxrå…�ræ}rç(h‚Uh‘jÞubaubh’)�rè}ré(h‚X Introductionrêh‘jÏhœjáh�hÓhƒ}rë(h†]rìU introduction-linux-ipc-on-am57xxríah‡]h…]hŽ]h�]rîh`auh¤Nh¥hh¦]rïh¯X Introductionrð…�rñ}rò(h‚jêh‘jèubaubhÜ)�ró}rô(h‚XÑThis article is geared toward AM57xx users that are running Linux on the Cortex A15. The goal is to help users understand how to gain entitlement to the DSP (c66x) and IPU (Cortex M4) subsystems of the AM57xx.rõh‘jÏhœjáh�hàhƒ}rö(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]r÷h¯XÑThis article is geared toward AM57xx users that are running Linux on the Cortex A15. The goal is to help users understand how to gain entitlement to the DSP (c66x) and IPU (Cortex M4) subsystems of the AM57xx.rø…�rù}rú(h‚jõh‘jóubaubhÜ)�rû}rü(h‚X1AM572x device has two IPU subsystems (IPUSS), each of which has 2 cores. IPU2 is used as a controller in multi-media applications, so if you have Processor SDK Linux running, chances are that IPU2 already has firmware loaded. However, IPU1 is open for general purpose programming to offload the ARM tasks.rýh‘jÏhœjáh�hàhƒ}rþ(h…]hŽ]h‡]h†]h�]uh¤K h¥hh¦]rÿh¯X1AM572x device has two IPU subsystems (IPUSS), each of which has 2 cores. IPU2 is used as a controller in multi-media applications, so if you have Processor SDK Linux running, chances are that IPU2 already has firmware loaded. However, IPU1 is open for general purpose programming to offload the ARM tasks.r…�r}r(h‚jýh‘jûubaubhÜ)�r}r(h‚XµThere are many facets to this task: building, loading, debugging, MMUs, memory sharing, etc. This article intends to take incremental steps toward understanding all of those pieces.rh‘jÏhœjáh�hàhƒ}r(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]rh¯XµThere are many facets to this task: building, loading, debugging, MMUs, memory sharing, etc. This article intends to take incremental steps toward understanding all of those pieces.r…�r }r (h‚jh‘jubaubh’)�r }r (h‚X$Software Dependencies to Get Startedr h‘jÏhœjáh�hÓhƒ}r(h†]rU/ipc-am57xx-software-dependencies-to-get-startedrah‡]h…]hŽ]h�]rh-auh¤Nh¥hh¦]rh¯X$Software Dependencies to Get Startedr…�r}r(h‚j h‘j ubaubhÜ)�r}r(h‚X Prerequisitesrh‘jÏhœjáh�hàhƒ}r(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]rh¯X Prerequisitesr…�r}r(h‚jh‘jubaubcdocutils.nodes bullet_list r)�r}r (h‚Uh‘jÏhœjáh�U bullet_listr!hƒ}r"(Ubulletr#X-h†]h‡]h…]hŽ]h�]uh¤Kh¥hh¦]r$(j@)�r%}r&(h‚X‘`Processor SDK Linux for AM57xx `__ (Version 3.01 or newer needed)h‘jhœjáh�jChƒ}r'(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r(hÜ)�r)}r*(h‚X‘`Processor SDK Linux for AM57xx `__ (Version 3.01 or newer needed)h‘j%hœjáh�hàhƒ}r+(h…]hŽ]h‡]h†]h�]uh¤Kh¦]r,(j))�r-}r.(h‚Xr`Processor SDK Linux for AM57xx `__hƒ}r/(UnameXProcessor SDK Linux for AM57xxj-XMhttp://software-dl.ti.com/processor-sdk-linux/esd/AM57X/latest/index_FDS.htmlh†]h‡]h…]hŽ]h�]uh‘j)h¦]r0h¯XProcessor SDK Linux for AM57xxr1…�r2}r3(h‚Uh‘j-ubah�j2ubh¯X (Version 3.01 or newer needed)r4…�r5}r6(h‚X (Version 3.01 or newer needed)h‘j)ubeubaubj@)�r7}r8(h‚Xp`Processor SDK RTOS for AM57xx `__h‘jhœjáh�jChƒ}r9(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r:hÜ)�r;}r<(h‚Xp`Processor SDK RTOS for AM57xx `__r=h‘j7hœjáh�hàhƒ}r>(h…]hŽ]h‡]h†]h�]uh¤Kh¦]r?j))�r@}rA(h‚j=hƒ}rB(UnameXProcessor SDK RTOS for AM57xxj-XLhttp://software-dl.ti.com/processor-sdk-rtos/esd/AM57X/latest/index_FDS.htmlh†]h‡]h…]hŽ]h�]uh‘j;h¦]rCh¯XProcessor SDK RTOS for AM57xxrD…�rE}rF(h‚Uh‘j@ubah�j2ubaubaubj@)�rG}rH(h‚Xˆ`Code Composer Studio `__ (choose version as specified on Proc SDK download page) h‘jhœjáh�jChƒ}rI(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rJhÜ)�rK}rL(h‚X‡`Code Composer Studio `__ (choose version as specified on Proc SDK download page)h‘jGhœjáh�hàhƒ}rM(h…]hŽ]h‡]h†]h�]uh¤Kh¦]rN(j))�rO}rP(h‚XO`Code Composer Studio `__hƒ}rQ(UnameXCode Composer Studioj-X4http://processors.wiki.ti.com/index.php/Download_CCSh†]h‡]h…]hŽ]h�]uh‘jKh¦]rRh¯XCode Composer StudiorS…�rT}rU(h‚Uh‘jOubah�j2ubh¯X8 (choose version as specified on Proc SDK download page)rV…�rW}rX(h‚X8 (choose version as specified on Proc SDK download page)h‘jKubeubaubeubj)�rY}rZ(h‚X[Please be sure that you have the same version number for both Processor SDK RTOS and Linux.h‘jÏhœjáh�jhƒ}r[(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r\hÜ)�r]}r^(h‚X[Please be sure that you have the same version number for both Processor SDK RTOS and Linux.r_h‘jYhœjáh�hàhƒ}r`(h…]hŽ]h‡]h†]h�]uh¤K"h¦]rah¯X[Please be sure that you have the same version number for both Processor SDK RTOS and Linux.rb…�rc}rd(h‚j_h‘j]ubaubaubhÜ)�re}rf(h‚XdFor reference within the context of this page, the Linux SDK is installed at the following location:rgh‘jÏhœjáh�hàhƒ}rh(h…]hŽ]h‡]h†]h�]uh¤K%h¥hh¦]rih¯XdFor reference within the context of this page, the Linux SDK is installed at the following location:rj…�rk}rl(h‚jgh‘jeubaubj¡)�rm}rn(h‚X/mnt/data/user/ti-processor-sdk-linux-am57xx-evm-xx.xx.xx.xx ├── bin ├── board-support ├── docs ├── example-applications ├── filesystem ├── ipc-build.txt ├── linux-devkit ├── Makefile ├── Rules.make └── setup.shh‘jÏhœjáh�j¤hƒ}ro(hÊhËh†]h‡]h…]hŽ]h�]uh¤Mìh¥hh¦]rph¯X/mnt/data/user/ti-processor-sdk-linux-am57xx-evm-xx.xx.xx.xx ├── bin ├── board-support ├── docs ├── example-applications ├── filesystem ├── ipc-build.txt ├── linux-devkit ├── Makefile ├── Rules.make └── setup.shrq…�rr}rs(h‚Uh‘jmubaubhÜ)�rt}ru(h‚XThe RTOS SDK is installed at:rvh‘jÏhœjáh�hàhƒ}rw(h…]hŽ]h‡]h†]h�]uh¤K6h¥hh¦]rxh¯XThe RTOS SDK is installed at:ry…�rz}r{(h‚jvh‘jtubaubj¡)�r|}r}(h‚X!/mnt/data/user/my_custom_install_sdk_rtos_am57xx_xx.xx ├── bios_6_xx_xx_xx ├── cg_xml ├── ctoolslib_x_x_x_x ├── dsplib_c66x_x_x_x_x ├── edma3_lld_2_xx_xx_xx ├── framework_components_x_xx_xx_xx ├── imglib_c66x_x_x_x_x ├── ipc_3_xx_xx_xx ├── mathlib_c66x_3_x_x_x ├── ndk_2_xx_xx_xx ├── opencl_rtos_am57xx_01_01_xx_xx ├── openmp_dsp_am57xx_2_04_xx_xx ├── pdk_am57xx_x_x_x ├── processor_sdk_rtos_am57xx_x_xx_xx_xx ├── uia_2_xx_xx_xx ├── xdais_7_xx_xx_xxh‘jÏhœjáh�j¤hƒ}r~(hÊhËh†]h‡]h…]hŽ]h�]uh¤Müh¥hh¦]rh¯X!/mnt/data/user/my_custom_install_sdk_rtos_am57xx_xx.xx ├── bios_6_xx_xx_xx ├── cg_xml ├── ctoolslib_x_x_x_x ├── dsplib_c66x_x_x_x_x ├── edma3_lld_2_xx_xx_xx ├── framework_components_x_xx_xx_xx ├── imglib_c66x_x_x_x_x ├── ipc_3_xx_xx_xx ├── mathlib_c66x_3_x_x_x ├── ndk_2_xx_xx_xx ├── opencl_rtos_am57xx_01_01_xx_xx ├── openmp_dsp_am57xx_2_04_xx_xx ├── pdk_am57xx_x_x_x ├── processor_sdk_rtos_am57xx_x_xx_xx_xx ├── uia_2_xx_xx_xx ├── xdais_7_xx_xx_xxr€…�r�}r‚(h‚Uh‘j|ubaubhÜ)�rƒ}r„(h‚XCCS is installed at:r…h‘jÏhœjáh�hàhƒ}r†(h…]hŽ]h‡]h†]h�]uh¤KLh¥hh¦]r‡h¯XCCS is installed at:rˆ…�r‰}rŠ(h‚j…h‘jƒubaubj¡)�r‹}rŒ(h‚X[/mnt/data/user/ti/my_custom_ccs_x.x.x_install ├── ccsvX │   ├── ccs_base │   ├── doc │   ├── eclipse │   ├── install_info │   ├── install_logs │   ├── install_scripts │   ├── tools │   ├── uninstall_ccs │   ├── uninstall_ccs.dat │   ├── uninstallers │   └── utils ├── Code Composer Studio x.x.x.desktop └── xdctools_x_xx_xx_xx_core ├── bin ├── config.jar ├── docs ├── eclipse ├── etc ├── gmake ├── include ├── package ├── packages ├── package.xdc ├── tconfini.tcf ├── xdc ├── xdctools_3_xx_xx_xx_manifest.html ├── xdctools_3_xx_xx_xx_release_notes.html ├── xs └── xs.x86Uh‘jÏhœjáh�j¤hƒ}r�(hÊhËh†]h‡]h…]hŽ]h�]uh¤Mh¥hh¦]rŽh¯X[/mnt/data/user/ti/my_custom_ccs_x.x.x_install ├── ccsvX │   ├── ccs_base │   ├── doc │   ├── eclipse │   ├── install_info │   ├── install_logs │   ├── install_scripts │   ├── tools │   ├── uninstall_ccs │   ├── uninstall_ccs.dat │   ├── uninstallers │   └── utils ├── Code Composer Studio x.x.x.desktop └── xdctools_x_xx_xx_xx_core ├── bin ├── config.jar ├── docs ├── eclipse ├── etc ├── gmake ├── include ├── package ├── packages ├── package.xdc ├── tconfini.tcf ├── xdc ├── xdctools_3_xx_xx_xx_manifest.html ├── xdctools_3_xx_xx_xx_release_notes.html ├── xs └── xs.x86Ur�…�r�}r‘(h‚Uh‘j‹ubaubhþ)�r’}r“(h‚Uh‘jÏhœjáh�jhƒ}r”(h…]hŽ]h‡]h†]h�]uh¤Kph¥hh¦]r•j)�r–}r—(h‚UjKh‘j’hœjáh�h¤hƒ}r˜(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubh’)�r™}rš(h‚X/Typical Boot Flow on AM572x for ARM Linux usersr›h‘jÏhœjáh�hÓhƒ}rœ(h†]r�U/typical-boot-flow-on-am572x-for-arm-linux-usersržah‡]h…]hŽ]h�]rŸhrauh¤Nh¥hh¦]r h¯X/Typical Boot Flow on AM572x for ARM Linux usersr¡…�r¢}r£(h‚j›h‘j™ubaubhÜ)�r¤}r¥(h‚X:AM57xx SOC's have multiple processor cores - Cortex A15, C66x DSP's and ARM M4 cores. The A15 typically runs a HLOS like Linux/QNX/Android and the remotecores(DSP's and M4's) run a RTOS. In the normal operation, boot loader(U-Boot/SPL) boots and loads the A15 with the HLOS. The A15 boots the DSP and the M4 cores.r¦h‘jÏhœjáh�hàhƒ}r§(h…]hŽ]h‡]h†]h�]uh¤Kuh¥hh¦]r¨h¯X:AM57xx SOC's have multiple processor cores - Cortex A15, C66x DSP's and ARM M4 cores. The A15 typically runs a HLOS like Linux/QNX/Android and the remotecores(DSP's and M4's) run a RTOS. In the normal operation, boot loader(U-Boot/SPL) boots and loads the A15 with the HLOS. The A15 boots the DSP and the M4 cores.r©…�rª}r«(h‚j¦h‘j¤ubaubjr)�r¬}r­(h‚X%.. Image:: ../images/Normal-boot.png h‘jÏhœjáh�jyhƒ}r®(UuriXlinux/../images/Normal-boot.pngr¯h†]h‡]h…]hŽ]jw}r°U*j¯sh�]uh¤K|h¥hh¦]ubhÜ)�r±}r²(h‚X£In this sequence, the interval between the Power on Reset and the remotecores (i.e. the DSP's and the M4's) executing is dependent on the HLOS initialization time.r³h‘jÏhœjáh�hàhƒ}r´(h…]hŽ]h‡]h†]h�]uh¤K}h¥hh¦]rµh¯X£In this sequence, the interval between the Power on Reset and the remotecores (i.e. the DSP's and the M4's) executing is dependent on the HLOS initialization time.r¶…�r·}r¸(h‚j³h‘j±ubaubhþ)�r¹}rº(h‚Uh‘jÏhœjáh�jhƒ}r»(h…]hŽ]h‡]h†]h�]uh¤K�h¥hh¦]r¼j)�r½}r¾(h‚UjKh‘j¹hœjáh�h¤hƒ}r¿(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubh’)�rÀ}rÁ(h‚X'Getting Started with IPC Linux ExamplesrÂh‘jÏhœjáh�hÓhƒ}rÃ(h†]rÄU2ipc-am57xx-getting-started-with-ipc-linux-examplesrÅah‡]h…]hŽ]h�]rÆhyauh¤Nh¥hh¦]rÇh¯X'Getting Started with IPC Linux ExamplesrÈ…�rÉ}rÊ(h‚jÂh‘jÀubaubhÜ)�rË}rÌ(h‚X¡The figure below illustrates how remoteproc/rpmsg driver from ARM Linux kernel communicates with IPC driver on slave processor (e.g. DSP, IPU, etc) running RTOS.rÍh‘jÏhœjáh�hàhƒ}rÎ(h…]hŽ]h‡]h†]h�]uh¤K†h¥hh¦]rÏh¯X¡The figure below illustrates how remoteproc/rpmsg driver from ARM Linux kernel communicates with IPC driver on slave processor (e.g. DSP, IPU, etc) running RTOS.rÐ…�rÑ}rÒ(h‚jÍh‘jËubaubjr)�rÓ}rÔ(h‚X2.. Image:: ../images/LinuxIPC_with_RTOS_Slave.png h‘jÏhœjáh�jyhƒ}rÕ(UuriX,linux/../images/LinuxIPC_with_RTOS_Slave.pngrÖh†]h‡]h…]hŽ]jw}r×U*jÖsh�]uh¤K‹h¥hh¦]ubhÜ)�rØ}rÙ(h‚XíIn order to setup IPC on slave cores, we provide some pre-built examples in IPC package that can be run from ARM Linux. The subsequent sections describe how to build and run this examples and use that as a starting point for this effort.rÚh‘jÏhœjáh�hàhƒ}rÛ(h…]hŽ]h‡]h†]h�]uh¤KŒh¥hh¦]rÜh¯XíIn order to setup IPC on slave cores, we provide some pre-built examples in IPC package that can be run from ARM Linux. The subsequent sections describe how to build and run this examples and use that as a starting point for this effort.rÝ…�rÞ}rß(h‚jÚh‘jØubaubh’)�rà}rá(h‚X!Building the Bundled IPC Examplesrâh‘jÏhœjáh�hÓhƒ}rã(h†]räU,ipc-am57xx-building-the-bundled-ipc-examplesråah‡]h…]hŽ]h�]ræhhauh¤Nh¥hh¦]rçh¯X!Building the Bundled IPC Examplesrè…�ré}rê(h‚jâh‘jàubaubhÜ)�rë}rì(h‚XâThe instructions to build IPC examples found under ipc\_3\_xx\_xx\_xx/examples/DRA7XX\_linux\_elf have been provided in the **`Processor\_SDK IPC Quick Start Guide `__.**h‘jÏhœjáh�hàhƒ}rí(h…]hŽ]h‡]h†]h�]uh¤K”h¥hh¦]rî(h¯XvThe instructions to build IPC examples found under ipc_3_xx_xx_xx/examples/DRA7XX_linux_elf have been provided in the rï…�rð}rñ(h‚X|The instructions to build IPC examples found under ipc\_3\_xx\_xx\_xx/examples/DRA7XX\_linux\_elf have been provided in the h‘jëubj¯)�rò}ró(h‚Xf**`Processor\_SDK IPC Quick Start Guide `__.**hƒ}rô(h…]hŽ]h‡]h†]h�]uh‘jëh¦]rõh¯Xa`Processor_SDK IPC Quick Start Guide `__.rö…�r÷}rø(h‚Uh‘jòubah�j·ubeubhÜ)�rù}rú(h‚XìLet's focus on one example in particular, ex02\_messageq, which is located at **/ipc\_3\_xx\_xx\_xx/examples/DRA7XX\_linux\_elf/ex02\_messageq**. Here are the key files that you should see after a successful build:h‘jÏhœjáh�hàhƒ}rû(h…]hŽ]h‡]h†]h�]uh¤K™h¥hh¦]rü(h¯XMLet's focus on one example in particular, ex02_messageq, which is located at rý…�rþ}rÿ(h‚XNLet's focus on one example in particular, ex02\_messageq, which is located at h‘jùubj¯)�r}r(h‚XX**/ipc\_3\_xx\_xx\_xx/examples/DRA7XX\_linux\_elf/ex02\_messageq**hƒ}r(h…]hŽ]h‡]h†]h�]uh‘jùh¦]rh¯XM/ipc_3_xx_xx_xx/examples/DRA7XX_linux_elf/ex02_messageqr…�r}r(h‚Uh‘jubah�j·ubh¯XF. Here are the key files that you should see after a successful build:r…�r}r (h‚XF. Here are the key files that you should see after a successful build:h‘jùubeubj¡)�r }r (h‚X”├── dsp1 │   └── bin │      ├── debug │      │   └── server_dsp1.xe66 │      └── release │      └── server_dsp1.xe66 ├── dsp2 │   └── bin │      ├── debug │      │   └── server_dsp2.xe66 │      └── release │      └── server_dsp2.xe66 ├── host │      ├── debug │      │   └── app_host │      └── release │      └── app_host ├── ipu1 │   └── bin │      ├── debug │      │   └── server_ipu1.xem4 │      └── release │      └── server_ipu1.xem4 └── ipu2    └── bin       ├── debug       │   └── server_ipu2.xem4       └── release       └── server_ipu2.xem4h‘jÏhœjáh�j¤hƒ}r (hÊhËh†]h‡]h…]hŽ]h�]uh¤Mbh¥hh¦]r h¯X”├── dsp1 │   └── bin │      ├── debug │      │   └── server_dsp1.xe66 │      └── release │      └── server_dsp1.xe66 ├── dsp2 │   └── bin │      ├── debug │      │   └── server_dsp2.xe66 │      └── release │      └── server_dsp2.xe66 ├── host │      ├── debug │      │   └── app_host │      └── release │      └── app_host ├── ipu1 │   └── bin │      ├── debug │      │   └── server_ipu1.xem4 │      └── release │      └── server_ipu1.xem4 └── ipu2    └── bin       ├── debug       │   └── server_ipu2.xem4       └── release       └── server_ipu2.xem4r…�r}r(h‚Uh‘j ubaubhþ)�r}r(h‚Uh‘jÏhœjáh�jhƒ}r(h…]hŽ]h‡]h†]h�]uh¤K¾h¥hh¦]rj)�r}r(h‚UjKh‘jhœjáh�h¤hƒ}r(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhþ)�r}r(h‚Uh‘jÏhœjáh�jhƒ}r(h…]hŽ]h‡]h†]h�]uh¤KÀh¥hh¦]rj)�r}r(h‚UjKh‘jhœjáh�h¤hƒ}r(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubh’)�r}r (h‚X Running the Bundled IPC Examplesr!h‘jÏhœjáh�hÓhƒ}r"(h†]r#U+ipc-am57xx-running-the-bundled-ipc-examplesr$ah‡]h…]hŽ]h�]r%hIauh¤Nh¥hh¦]r&h¯X Running the Bundled IPC Examplesr'…�r(}r)(h‚j!h‘jubaubhÜ)�r*}r+(h‚X;On the target, let's create a directory called ipc-starter:r,h‘jÏhœjáh�hàhƒ}r-(h…]hŽ]h‡]h†]h�]uh¤KÅh¥hh¦]r.h¯X;On the target, let's create a directory called ipc-starter:r/…�r0}r1(h‚j,h‘j*ubaubj¡)�r2}r3(h‚X`root@am57xx-evm:~# mkdir -p /home/root/ipc-starter root@am57xx-evm:~# cd /home/root/ipc-starter/h‘jÏhœjáh�j¤hƒ}r4(hÊhËh†]h‡]h…]hŽ]h�]uh¤M‹h¥hh¦]r5h¯X`root@am57xx-evm:~# mkdir -p /home/root/ipc-starter root@am57xx-evm:~# cd /home/root/ipc-starter/r6…�r7}r8(h‚Uh‘j2ubaubhÜ)�r9}r:(h‚XáYou will need to copy the ex02\_messageq directory of your host PC to that directory on the target (through SD card, NFS export, SCP, etc.). You can copy the entire directory, though we're primarily interested in these files:h‘jÏhœjáh�hàhƒ}r;(h…]hŽ]h‡]h†]h�]uh¤KÌh¥hh¦]r<h¯XàYou will need to copy the ex02_messageq directory of your host PC to that directory on the target (through SD card, NFS export, SCP, etc.). You can copy the entire directory, though we're primarily interested in these files:r=…�r>}r?(h‚XáYou will need to copy the ex02\_messageq directory of your host PC to that directory on the target (through SD card, NFS export, SCP, etc.). You can copy the entire directory, though we're primarily interested in these files:h‘j9ubaubj)�r@}rA(h‚Uh‘jÏhœjáh�j!hƒ}rB(j#X-h†]h‡]h…]hŽ]h�]uh¤KÑh¥hh¦]rC(j@)�rD}rE(h‚X dsp1/bin/debug/server\_dsp1.xe66rFh‘j@hœjáh�jChƒ}rG(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rHhÜ)�rI}rJ(h‚jFh‘jDhœjáh�hàhƒ}rK(h…]hŽ]h‡]h†]h�]uh¤KÑh¦]rLh¯Xdsp1/bin/debug/server_dsp1.xe66rM…�rN}rO(h‚X dsp1/bin/debug/server\_dsp1.xe66h‘jIubaubaubj@)�rP}rQ(h‚X dsp2/bin/debug/server\_dsp2.xe66rRh‘j@hœjáh�jChƒ}rS(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rThÜ)�rU}rV(h‚jRh‘jPhœjáh�hàhƒ}rW(h…]hŽ]h‡]h†]h�]uh¤KÒh¦]rXh¯Xdsp2/bin/debug/server_dsp2.xe66rY…�rZ}r[(h‚X dsp2/bin/debug/server\_dsp2.xe66h‘jUubaubaubj@)�r\}r](h‚Xhost/bin/debug/app\_hostr^h‘j@hœjáh�jChƒ}r_(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r`hÜ)�ra}rb(h‚j^h‘j\hœjáh�hàhƒ}rc(h…]hŽ]h‡]h†]h�]uh¤KÓh¦]rdh¯Xhost/bin/debug/app_hostre…�rf}rg(h‚Xhost/bin/debug/app\_hosth‘jaubaubaubj@)�rh}ri(h‚X ipu1/bin/debug/server\_ipu1.xem4rjh‘j@hœjáh�jChƒ}rk(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rlhÜ)�rm}rn(h‚jjh‘jhhœjáh�hàhƒ}ro(h…]hŽ]h‡]h†]h�]uh¤KÔh¦]rph¯Xipu1/bin/debug/server_ipu1.xem4rq…�rr}rs(h‚X ipu1/bin/debug/server\_ipu1.xem4h‘jmubaubaubj@)�rt}ru(h‚X!ipu2/bin/debug/server\_ipu2.xem4 h‘j@hœjáh�jChƒ}rv(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rwhÜ)�rx}ry(h‚X ipu2/bin/debug/server\_ipu2.xem4h‘jthœjáh�hàhƒ}rz(h…]hŽ]h‡]h†]h�]uh¤KÕh¦]r{h¯Xipu2/bin/debug/server_ipu2.xem4r|…�r}}r~(h‚X ipu2/bin/debug/server\_ipu2.xem4h‘jxubaubaubeubhÜ)�r}r€(h‚XxThe remoteproc driver is hard-coded to look for specific files when loading the DSP/M4. Here are the files it looks for:r�h‘jÏhœjáh�hàhƒ}r‚(h…]hŽ]h‡]h†]h�]uh¤K×h¥hh¦]rƒh¯XxThe remoteproc driver is hard-coded to look for specific files when loading the DSP/M4. Here are the files it looks for:r„…�r…}r†(h‚j�h‘jubaubj)�r‡}rˆ(h‚Uh‘jÏhœjáh�j!hƒ}r‰(j#X-h†]h‡]h…]hŽ]h�]uh¤KÚh¥hh¦]rŠ(j@)�r‹}rŒ(h‚X/lib/firmware/dra7-dsp1-fw.xe66r�h‘j‡hœjáh�jChƒ}rŽ(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r�hÜ)�r�}r‘(h‚j�h‘j‹hœjáh�hàhƒ}r’(h…]hŽ]h‡]h†]h�]uh¤KÚh¦]r“h¯X/lib/firmware/dra7-dsp1-fw.xe66r”…�r•}r–(h‚j�h‘j�ubaubaubj@)�r—}r˜(h‚X/lib/firmware/dra7-dsp2-fw.xe66r™h‘j‡hœjáh�jChƒ}rš(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r›hÜ)�rœ}r�(h‚j™h‘j—hœjáh�hàhƒ}rž(h…]hŽ]h‡]h†]h�]uh¤KÛh¦]rŸh¯X/lib/firmware/dra7-dsp2-fw.xe66r …�r¡}r¢(h‚j™h‘jœubaubaubj@)�r£}r¤(h‚X/lib/firmware/dra7-ipu1-fw.xem4r¥h‘j‡hœjáh�jChƒ}r¦(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r§hÜ)�r¨}r©(h‚j¥h‘j£hœjáh�hàhƒ}rª(h…]hŽ]h‡]h†]h�]uh¤KÜh¦]r«h¯X/lib/firmware/dra7-ipu1-fw.xem4r¬…�r­}r®(h‚j¥h‘j¨ubaubaubj@)�r¯}r°(h‚X /lib/firmware/dra7-ipu2-fw.xem4 h‘j‡hœjáh�jChƒ}r±(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r²hÜ)�r³}r´(h‚X/lib/firmware/dra7-ipu2-fw.xem4rµh‘j¯hœjáh�hàhƒ}r¶(h…]hŽ]h‡]h†]h�]uh¤KÝh¦]r·h¯X/lib/firmware/dra7-ipu2-fw.xem4r¸…�r¹}rº(h‚jµh‘j³ubaubaubeubhÜ)�r»}r¼(h‚X{These are generally a soft link to the intended executable. So for example, let's update the DSP1 executable on the target:r½h‘jÏhœjáh�hàhƒ}r¾(h…]hŽ]h‡]h†]h�]uh¤Kßh¥hh¦]r¿h¯X{These are generally a soft link to the intended executable. So for example, let's update the DSP1 executable on the target:rÀ…�rÁ}rÂ(h‚j½h‘j»ubaubj¡)�rÃ}rÄ(h‚XÔroot@am57xx-evm:~# cd /lib/firmware/ root@am57xx-evm:/lib/firmware# rm dra7-dsp1-fw.xe66 root@am57xx-evm:/lib/firmware# ln -s /home/root/ipc-starter/ex02_messageq/dsp1/bin/debug/server_dsp1.xe66 dra7-dsp1-fw.xe66h‘jÏhœjáh�j¤hƒ}rÅ(hÊhËh†]h‡]h…]hŽ]h�]uh¤M¦h¥hh¦]rÆh¯XÔroot@am57xx-evm:~# cd /lib/firmware/ root@am57xx-evm:/lib/firmware# rm dra7-dsp1-fw.xe66 root@am57xx-evm:/lib/firmware# ln -s /home/root/ipc-starter/ex02_messageq/dsp1/bin/debug/server_dsp1.xe66 dra7-dsp1-fw.xe66rÇ…�rÈ}rÉ(h‚Uh‘jÃubaubhÜ)�rÊ}rË(h‚XHTo reload DSP1 with this new executable, we perform the following steps:rÌh‘jÏhœjáh�hàhƒ}rÍ(h…]hŽ]h‡]h†]h�]uh¤Kèh¥hh¦]rÎh¯XHTo reload DSP1 with this new executable, we perform the following steps:rÏ…�rÐ}rÑ(h‚jÌh‘jÊubaubj¡)�rÒ}rÓ(h‚XŸroot@am57xx-evm:/lib/firmware# cd /sys/bus/platform/drivers/omap-rproc/ root@am57xx-evm:/sys/bus/platform/drivers/omap-rproc# echo 40800000.dsp > unbind [27639.985631] omap_hwmod: mmu0_dsp1: _wait_target_disable failed [27639.991534] omap-iommu 40d01000.mmu: 40d01000.mmu: version 3.0 [27639.997610] omap-iommu 40d02000.mmu: 40d02000.mmu: version 3.0 [27640.017557] omap_hwmod: mmu1_dsp1: _wait_target_disable failed [27640.030571] omap_hwmod: mmu0_dsp1: _wait_target_disable failed [27640.036605] remoteproc2: stopped remote processor 40800000.dsp [27640.042805] remoteproc2: releasing 40800000.dsp root@am57xx-evm:/sys/bus/platform/drivers/omap-rproc# echo 40800000.dsp > bind [27645.958613] omap-rproc 40800000.dsp: assigned reserved memory node dsp1_cma@99000000 [27645.966452] remoteproc2: 40800000.dsp is available [27645.971410] remoteproc2: Note: remoteproc is still under development and considered experimental. [27645.980536] remoteproc2: THE BINARY FORMAT IS NOT YET FINALIZED, and backward compatibility isn't yet guaranteed. root@am57xx-evm:/sys/bus/platform/drivers/omap-rproc# [27646.008171] remoteproc2: powering up 40800000.dsp [27646.013038] remoteproc2: Booting fw image dra7-dsp1-fw.xe66, size 4706800 [27646.028920] omap_hwmod: mmu0_dsp1: _wait_target_disable failed [27646.034819] omap-iommu 40d01000.mmu: 40d01000.mmu: version 3.0 [27646.040772] omap-iommu 40d02000.mmu: 40d02000.mmu: version 3.0 [27646.058323] remoteproc2: remote processor 40800000.dsp is now up [27646.064772] virtio_rpmsg_bus virtio2: rpmsg host is online [27646.072271] remoteproc2: registered virtio2 (type 7) [27646.078026] virtio_rpmsg_bus virtio2: creating channel rpmsg-proto addr 0x3dh‘jÏhœjáh�j¤hƒ}rÔ(hÊhËh†]h‡]h…]hŽ]h�]uh¤M®h¥hh¦]rÕh¯XŸroot@am57xx-evm:/lib/firmware# cd /sys/bus/platform/drivers/omap-rproc/ root@am57xx-evm:/sys/bus/platform/drivers/omap-rproc# echo 40800000.dsp > unbind [27639.985631] omap_hwmod: mmu0_dsp1: _wait_target_disable failed [27639.991534] omap-iommu 40d01000.mmu: 40d01000.mmu: version 3.0 [27639.997610] omap-iommu 40d02000.mmu: 40d02000.mmu: version 3.0 [27640.017557] omap_hwmod: mmu1_dsp1: _wait_target_disable failed [27640.030571] omap_hwmod: mmu0_dsp1: _wait_target_disable failed [27640.036605] remoteproc2: stopped remote processor 40800000.dsp [27640.042805] remoteproc2: releasing 40800000.dsp root@am57xx-evm:/sys/bus/platform/drivers/omap-rproc# echo 40800000.dsp > bind [27645.958613] omap-rproc 40800000.dsp: assigned reserved memory node dsp1_cma@99000000 [27645.966452] remoteproc2: 40800000.dsp is available [27645.971410] remoteproc2: Note: remoteproc is still under development and considered experimental. [27645.980536] remoteproc2: THE BINARY FORMAT IS NOT YET FINALIZED, and backward compatibility isn't yet guaranteed. root@am57xx-evm:/sys/bus/platform/drivers/omap-rproc# [27646.008171] remoteproc2: powering up 40800000.dsp [27646.013038] remoteproc2: Booting fw image dra7-dsp1-fw.xe66, size 4706800 [27646.028920] omap_hwmod: mmu0_dsp1: _wait_target_disable failed [27646.034819] omap-iommu 40d01000.mmu: 40d01000.mmu: version 3.0 [27646.040772] omap-iommu 40d02000.mmu: 40d02000.mmu: version 3.0 [27646.058323] remoteproc2: remote processor 40800000.dsp is now up [27646.064772] virtio_rpmsg_bus virtio2: rpmsg host is online [27646.072271] remoteproc2: registered virtio2 (type 7) [27646.078026] virtio_rpmsg_bus virtio2: creating channel rpmsg-proto addr 0x3drÖ…�r×}rØ(h‚Uh‘jÒubaubhÜ)�rÙ}rÚ(h‚X More info related to loading firmware to the various cores can be found `here `__.h‘jÏhœjáh�hàhƒ}rÛ(h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]rÜ(h¯XHMore info related to loading firmware to the various cores can be found rÝ…�rÞ}rß(h‚XHMore info related to loading firmware to the various cores can be found h‘jÙubj))�rà}rá(h‚XW`here `__hƒ}râ(UnameXherej-XLFoundational_Components_Multimedia_IVAHD.html#firmware-loading-and-unloadingh†]h‡]h…]hŽ]h�]uh‘jÙh¦]rãh¯Xhererä…�rå}ræ(h‚Uh‘jàubah�j2ubh¯X.…�rç}rè(h‚X.h‘jÙubeubhÜ)�ré}rê(h‚X(Finally, we can run the example on DSP1:rëh‘jÏhœjáh�hàhƒ}rì(h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]ríh¯X(Finally, we can run the example on DSP1:rî…�rï}rð(h‚jëh‘jéubaubj¡)�rñ}rò(h‚Xûroot@am57xx-evm:/sys/bus/platform/drivers/omap-rproc# cd /home/root/ipc-starter/ex02_messageq/host/bin/debug root@am57xx-evm:~/ipc-starter/ex02_messageq/host/bin/debug# ./app_host DSP1 --> main: [33590.700700] omap_hwmod: mmu0_dsp2: _wait_target_disable failed [33590.706609] omap-iommu 41501000.mmu: 41501000.mmu: version 3.0 [33590.718798] omap-iommu 41502000.mmu: 41502000.mmu: version 3.0 --> Main_main: --> App_create: App_create: Host is ready <-- App_create: --> App_exec: App_exec: sending message 1 App_exec: sending message 2 App_exec: sending message 3 App_exec: message received, sending message 4 App_exec: message received, sending message 5 App_exec: message received, sending message 6 App_exec: message received, sending message 7 App_exec: message received, sending message 8 App_exec: message received, sending message 9 App_exec: message received, sending message 10 App_exec: message received, sending message 11 App_exec: message received, sending message 12 App_exec: message received, sending message 13 App_exec: message received, sending message 14 App_exec: message received, sending message 15 App_exec: message received App_exec: message received App_exec: message received <-- App_exec: 0 --> App_delete: <-- App_delete: <-- Main_main: <-- main:h‘jÏhœjáh�j¤hƒ}ró(hÊhËh†]h‡]h…]hŽ]h�]uh¤MÍh¥hh¦]rôh¯Xûroot@am57xx-evm:/sys/bus/platform/drivers/omap-rproc# cd /home/root/ipc-starter/ex02_messageq/host/bin/debug root@am57xx-evm:~/ipc-starter/ex02_messageq/host/bin/debug# ./app_host DSP1 --> main: [33590.700700] omap_hwmod: mmu0_dsp2: _wait_target_disable failed [33590.706609] omap-iommu 41501000.mmu: 41501000.mmu: version 3.0 [33590.718798] omap-iommu 41502000.mmu: 41502000.mmu: version 3.0 --> Main_main: --> App_create: App_create: Host is ready <-- App_create: --> App_exec: App_exec: sending message 1 App_exec: sending message 2 App_exec: sending message 3 App_exec: message received, sending message 4 App_exec: message received, sending message 5 App_exec: message received, sending message 6 App_exec: message received, sending message 7 App_exec: message received, sending message 8 App_exec: message received, sending message 9 App_exec: message received, sending message 10 App_exec: message received, sending message 11 App_exec: message received, sending message 12 App_exec: message received, sending message 13 App_exec: message received, sending message 14 App_exec: message received, sending message 15 App_exec: message received App_exec: message received App_exec: message received <-- App_exec: 0 --> App_delete: <-- App_delete: <-- Main_main: <-- main:rõ…�rö}r÷(h‚Uh‘jñubaubhþ)�rø}rù(h‚Uh‘jÏhœjáh�jhƒ}rú(h…]hŽ]h‡]h†]h�]uh¤M.h¥hh¦]rûj)�rü}rý(h‚X¥The similar procedure can be used for DSP2/IPU1/IPU2 also to update the soft link of the firmware, reload the firmware at run-time, and run the host binary from A15.rþjKh‘jøhœjáh�h¤hƒ}rÿ(h…]hŽ]h‡]h†]h�]uh¤M0h¥hh¦]rh¯X¥The similar procedure can be used for DSP2/IPU1/IPU2 also to update the soft link of the firmware, reload the firmware at run-time, and run the host binary from A15.r…�r}r(h‚jþh‘jüubaubaubh’)�r}r(h‚XUnderstanding the Memory Maprh‘jÏhœjáh�hÓhƒ}r(h†]rU'ipc-am57xx-understanding-the-memory-mapr ah‡]h…]hŽ]h�]r h/auh¤Nh¥hh¦]r h¯XUnderstanding the Memory Mapr …�r }r(h‚jh‘jubaubh’)�r}r(h‚XOverall Linux Memory Maprh‘jÏhœjáh�hÓhƒ}r(h†]rUoverall-linux-memory-maprah‡]h…]hŽ]h�]rh=auh¤Nh¥hh¦]rh¯XOverall Linux Memory Mapr…�r}r(h‚jh‘jubaubj¡)�r}r(h‚X(root@am57xx-evm:~# cat /proc/iomem [snip...] 58060000-58078fff : core 58820000-5882ffff : l2ram 58882000-588820ff : /ocp/mmu@58882000 80000000-9fffffff : System RAM 80008000-808d204b : Kernel code 80926000-809c96bf : Kernel data a0000000-abffffff : CMEM ac000000-ffcfffff : System RAMh‘jÏhœjáh�j¤hƒ}r(hÊhËh†]h‡]h…]hŽ]h�]uh¤Müh¥hh¦]rh¯X(root@am57xx-evm:~# cat /proc/iomem [snip...] 58060000-58078fff : core 58820000-5882ffff : l2ram 58882000-588820ff : /ocp/mmu@58882000 80000000-9fffffff : System RAM 80008000-808d204b : Kernel code 80926000-809c96bf : Kernel data a0000000-abffffff : CMEM ac000000-ffcfffff : System RAMr…�r}r (h‚Uh‘jubaubhþ)�r!}r"(h‚Uh‘jÏhœjáh�jhƒ}r#(h…]hŽ]h‡]h†]h�]uh¤MEh¥hh¦]r$j)�r%}r&(h‚UjKh‘j!hœjáh�h¤hƒ}r'(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubh’)�r(}r)(h‚X CMA Carveoutsr*h‘jÏhœjáh�hÓhƒ}r+(h†]r,U cma-carveoutsr-ah‡]h…]hŽ]h�]r.hauh¤Nh¥hh¦]r/h¯X CMA Carveoutsr0…�r1}r2(h‚j*h‘j(ubaubj¡)�r3}r4(h‚Xdroot@am57xx-evm:~# dmesg | grep -i cma [ 0.000000] Reserved memory: created CMA memory pool at 0x0000000095800000, size 56 MiB [ 0.000000] Reserved memory: initialized node ipu2_cma@95800000, compatible id shared-dma-pool [ 0.000000] Reserved memory: created CMA memory pool at 0x0000000099000000, size 64 MiB [ 0.000000] Reserved memory: initialized node dsp1_cma@99000000, compatible id shared-dma-pool [ 0.000000] Reserved memory: created CMA memory pool at 0x000000009d000000, size 32 MiB [ 0.000000] Reserved memory: initialized node ipu1_cma@9d000000, compatible id shared-dma-pool [ 0.000000] Reserved memory: created CMA memory pool at 0x000000009f000000, size 8 MiB [ 0.000000] Reserved memory: initialized node dsp2_cma@9f000000, compatible id shared-dma-pool [ 0.000000] cma: Reserved 24 MiB at 0x00000000fe400000 [ 0.000000] Memory: 1713468K/1897472K available (6535K kernel code, 358K rwdata, 2464K rodata, 332K init, 289K bss, 28356K reserved, 155648K cma-reserved, 1283072K highmem) [ 5.492945] omap-rproc 58820000.ipu: assigned reserved memory node ipu1_cma@9d000000 [ 5.603289] omap-rproc 55020000.ipu: assigned reserved memory node ipu2_cma@95800000 [ 5.713411] omap-rproc 40800000.dsp: assigned reserved memory node dsp1_cma@9b000000 [ 5.771990] omap-rproc 41000000.dsp: assigned reserved memory node dsp2_cma@9f000000h‘jÏhœjáh�j¤hƒ}r5(hÊhËh†]h‡]h…]hŽ]h�]uh¤Mh¥hh¦]r6h¯Xdroot@am57xx-evm:~# dmesg | grep -i cma [ 0.000000] Reserved memory: created CMA memory pool at 0x0000000095800000, size 56 MiB [ 0.000000] Reserved memory: initialized node ipu2_cma@95800000, compatible id shared-dma-pool [ 0.000000] Reserved memory: created CMA memory pool at 0x0000000099000000, size 64 MiB [ 0.000000] Reserved memory: initialized node dsp1_cma@99000000, compatible id shared-dma-pool [ 0.000000] Reserved memory: created CMA memory pool at 0x000000009d000000, size 32 MiB [ 0.000000] Reserved memory: initialized node ipu1_cma@9d000000, compatible id shared-dma-pool [ 0.000000] Reserved memory: created CMA memory pool at 0x000000009f000000, size 8 MiB [ 0.000000] Reserved memory: initialized node dsp2_cma@9f000000, compatible id shared-dma-pool [ 0.000000] cma: Reserved 24 MiB at 0x00000000fe400000 [ 0.000000] Memory: 1713468K/1897472K available (6535K kernel code, 358K rwdata, 2464K rodata, 332K init, 289K bss, 28356K reserved, 155648K cma-reserved, 1283072K highmem) [ 5.492945] omap-rproc 58820000.ipu: assigned reserved memory node ipu1_cma@9d000000 [ 5.603289] omap-rproc 55020000.ipu: assigned reserved memory node ipu2_cma@95800000 [ 5.713411] omap-rproc 40800000.dsp: assigned reserved memory node dsp1_cma@9b000000 [ 5.771990] omap-rproc 41000000.dsp: assigned reserved memory node dsp2_cma@9f000000r7…�r8}r9(h‚Uh‘j3ubaubhÜ)�r:}r;(h‚XPFrom the output above, we can derive the location and size of each CMA carveout:r<h‘jÏhœjáh�hàhƒ}r=(h…]hŽ]h‡]h†]h�]uh¤M\h¥hh¦]r>h¯XPFrom the output above, we can derive the location and size of each CMA carveout:r?…�r@}rA(h‚j<h‘j:ubaubcdocutils.nodes table rB)�rC}rD(h‚Uh‘jÏhœjáh�UtablerEhƒ}rF(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rGcdocutils.nodes tgroup rH)�rI}rJ(h‚Uhƒ}rK(h†]h‡]h…]hŽ]h�]UcolsKuh‘jCh¦]rL(cdocutils.nodes colspec rM)�rN}rO(h‚Uhƒ}rP(h†]h‡]h…]hŽ]h�]UcolwidthKuh‘jIh¦]h�UcolspecrQubjM)�rR}rS(h‚Uhƒ}rT(h†]h‡]h…]hŽ]h�]UcolwidthKuh‘jIh¦]h�jQubjM)�rU}rV(h‚Uhƒ}rW(h†]h‡]h…]hŽ]h�]UcolwidthK uh‘jIh¦]h�jQubcdocutils.nodes thead rX)�rY}rZ(h‚Uhƒ}r[(h…]hŽ]h‡]h†]h�]uh‘jIh¦]r\cdocutils.nodes row r])�r^}r_(h‚Uhƒ}r`(h…]hŽ]h‡]h†]h�]uh‘jYh¦]ra(cdocutils.nodes entry rb)�rc}rd(h‚Uhƒ}re(h…]hŽ]h‡]h†]h�]uh‘j^h¦]rfhÜ)�rg}rh(h‚XMemory Sectionrih‘jchœjáh�hàhƒ}rj(h…]hŽ]h‡]h†]h�]uh¤M`h¦]rkh¯XMemory Sectionrl…�rm}rn(h‚jih‘jgubaubah�Uentryroubjb)�rp}rq(h‚Uhƒ}rr(h…]hŽ]h‡]h†]h�]uh‘j^h¦]rshÜ)�rt}ru(h‚XPhysical Addressrvh‘jphœjáh�hàhƒ}rw(h…]hŽ]h‡]h†]h�]uh¤M`h¦]rxh¯XPhysical Addressry…�rz}r{(h‚jvh‘jtubaubah�joubjb)�r|}r}(h‚Uhƒ}r~(h…]hŽ]h‡]h†]h�]uh‘j^h¦]rhÜ)�r€}r�(h‚XSizer‚h‘j|hœjáh�hàhƒ}rƒ(h…]hŽ]h‡]h†]h�]uh¤M`h¦]r„h¯XSizer……�r†}r‡(h‚j‚h‘j€ubaubah�joubeh�Urowrˆubah�Utheadr‰ubcdocutils.nodes tbody rŠ)�r‹}rŒ(h‚Uhƒ}r�(h…]hŽ]h‡]h†]h�]uh‘jIh¦]rŽ(j])�r�}r�(h‚Uhƒ}r‘(h…]hŽ]h‡]h†]h�]uh‘j‹h¦]r’(jb)�r“}r”(h‚Uhƒ}r•(h…]hŽ]h‡]h†]h�]uh‘j�h¦]r–hÜ)�r—}r˜(h‚XIPU2 CMAr™h‘j“hœjáh�hàhƒ}rš(h…]hŽ]h‡]h†]h�]uh¤Mbh¦]r›h¯XIPU2 CMArœ…�r�}rž(h‚j™h‘j—ubaubah�joubjb)�rŸ}r (h‚Uhƒ}r¡(h…]hŽ]h‡]h†]h�]uh‘j�h¦]r¢hÜ)�r£}r¤(h‚X 0x95800000r¥h‘jŸhœjáh�hàhƒ}r¦(h…]hŽ]h‡]h†]h�]uh¤Mbh¦]r§h¯X 0x95800000r¨…�r©}rª(h‚j¥h‘j£ubaubah�joubjb)�r«}r¬(h‚Uhƒ}r­(h…]hŽ]h‡]h†]h�]uh‘j�h¦]r®hÜ)�r¯}r°(h‚X56 MBr±h‘j«hœjáh�hàhƒ}r²(h…]hŽ]h‡]h†]h�]uh¤Mbh¦]r³h¯X56 MBr´…�rµ}r¶(h‚j±h‘j¯ubaubah�joubeh�jˆubj])�r·}r¸(h‚Uhƒ}r¹(h…]hŽ]h‡]h†]h�]uh‘j‹h¦]rº(jb)�r»}r¼(h‚Uhƒ}r½(h…]hŽ]h‡]h†]h�]uh‘j·h¦]r¾hÜ)�r¿}rÀ(h‚XDSP1 CMArÁh‘j»hœjáh�hàhƒ}rÂ(h…]hŽ]h‡]h†]h�]uh¤Mdh¦]rÃh¯XDSP1 CMArÄ…�rÅ}rÆ(h‚jÁh‘j¿ubaubah�joubjb)�rÇ}rÈ(h‚Uhƒ}rÉ(h…]hŽ]h‡]h†]h�]uh‘j·h¦]rÊhÜ)�rË}rÌ(h‚X 0x99000000rÍh‘jÇhœjáh�hàhƒ}rÎ(h…]hŽ]h‡]h†]h�]uh¤Mdh¦]rÏh¯X 0x99000000rÐ…�rÑ}rÒ(h‚jÍh‘jËubaubah�joubjb)�rÓ}rÔ(h‚Uhƒ}rÕ(h…]hŽ]h‡]h†]h�]uh‘j·h¦]rÖhÜ)�r×}rØ(h‚X64 MBrÙh‘jÓhœjáh�hàhƒ}rÚ(h…]hŽ]h‡]h†]h�]uh¤Mdh¦]rÛh¯X64 MBrÜ…�rÝ}rÞ(h‚jÙh‘j×ubaubah�joubeh�jˆubj])�rß}rà(h‚Uhƒ}rá(h…]hŽ]h‡]h†]h�]uh‘j‹h¦]râ(jb)�rã}rä(h‚Uhƒ}rå(h…]hŽ]h‡]h†]h�]uh‘jßh¦]ræhÜ)�rç}rè(h‚XIPU1 CMAréh‘jãhœjáh�hàhƒ}rê(h…]hŽ]h‡]h†]h�]uh¤Mfh¦]rëh¯XIPU1 CMArì…�rí}rî(h‚jéh‘jçubaubah�joubjb)�rï}rð(h‚Uhƒ}rñ(h…]hŽ]h‡]h†]h�]uh‘jßh¦]ròhÜ)�ró}rô(h‚X 0x9d000000rõh‘jïhœjáh�hàhƒ}rö(h…]hŽ]h‡]h†]h�]uh¤Mfh¦]r÷h¯X 0x9d000000rø…�rù}rú(h‚jõh‘jóubaubah�joubjb)�rû}rü(h‚Uhƒ}rý(h…]hŽ]h‡]h†]h�]uh‘jßh¦]rþhÜ)�rÿ}r(h‚X32 MBrh‘jûhœjáh�hàhƒ}r(h…]hŽ]h‡]h†]h�]uh¤Mfh¦]rh¯X32 MBr…�r}r(h‚jh‘jÿubaubah�joubeh�jˆubj])�r}r(h‚Uhƒ}r (h…]hŽ]h‡]h†]h�]uh‘j‹h¦]r (jb)�r }r (h‚Uhƒ}r (h…]hŽ]h‡]h†]h�]uh‘jh¦]rhÜ)�r}r(h‚XDSP2 CMArh‘j hœjáh�hàhƒ}r(h…]hŽ]h‡]h†]h�]uh¤Mhh¦]rh¯XDSP2 CMAr…�r}r(h‚jh‘jubaubah�joubjb)�r}r(h‚Uhƒ}r(h…]hŽ]h‡]h†]h�]uh‘jh¦]rhÜ)�r}r(h‚X 0x9f000000rh‘jhœjáh�hàhƒ}r(h…]hŽ]h‡]h†]h�]uh¤Mhh¦]rh¯X 0x9f000000r …�r!}r"(h‚jh‘jubaubah�joubjb)�r#}r$(h‚Uhƒ}r%(h…]hŽ]h‡]h†]h�]uh‘jh¦]r&hÜ)�r'}r((h‚X8 MBr)h‘j#hœjáh�hàhƒ}r*(h…]hŽ]h‡]h†]h�]uh¤Mhh¦]r+h¯X8 MBr,…�r-}r.(h‚j)h‘j'ubaubah�joubeh�jˆubj])�r/}r0(h‚Uhƒ}r1(h…]hŽ]h‡]h†]h�]uh‘j‹h¦]r2(jb)�r3}r4(h‚Uhƒ}r5(h…]hŽ]h‡]h†]h�]uh‘j/h¦]r6hÜ)�r7}r8(h‚X Default CMAr9h‘j3hœjáh�hàhƒ}r:(h…]hŽ]h‡]h†]h�]uh¤Mjh¦]r;h¯X Default CMAr<…�r=}r>(h‚j9h‘j7ubaubah�joubjb)�r?}r@(h‚Uhƒ}rA(h…]hŽ]h‡]h†]h�]uh‘j/h¦]rBhÜ)�rC}rD(h‚X 0xfe400000rEh‘j?hœjáh�hàhƒ}rF(h…]hŽ]h‡]h†]h�]uh¤Mjh¦]rGh¯X 0xfe400000rH…�rI}rJ(h‚jEh‘jCubaubah�joubjb)�rK}rL(h‚Uhƒ}rM(h…]hŽ]h‡]h†]h�]uh‘j/h¦]rNhÜ)�rO}rP(h‚X24 MBrQh‘jKhœjáh�hàhƒ}rR(h…]hŽ]h‡]h†]h�]uh¤Mjh¦]rSh¯X24 MBrT…�rU}rV(h‚jQh‘jOubaubah�joubeh�jˆubeh�UtbodyrWubeh�UtgrouprXubaubhÜ)�rY}rZ(h‚XŸFor details on how to adjust the sizes and locations of the DSP/IPU CMA carveouts, please see the corresponding section for changing the DSP or IPU memory map.r[h‘jÏhœjáh�hàhƒ}r\(h…]hŽ]h‡]h†]h�]uh¤Mmh¥hh¦]r]h¯XŸFor details on how to adjust the sizes and locations of the DSP/IPU CMA carveouts, please see the corresponding section for changing the DSP or IPU memory map.r^…�r_}r`(h‚j[h‘jYubaubhÜ)�ra}rb(h‚XZTo adjust the size of the "Default CMA" section, this is done as part of the Linux config:rch‘jÏhœjáh�hàhƒ}rd(h…]hŽ]h‡]h†]h�]uh¤Mqh¥hh¦]reh¯XZTo adjust the size of the "Default CMA" section, this is done as part of the Linux config:rf…�rg}rh(h‚jch‘jaubaubhÜ)�ri}rj(h‚X3linux/arch/arm/configs/tisdk\_am57xx-evm\_defconfigrkh‘jÏhœjáh�hàhƒ}rl(h…]hŽ]h‡]h†]h�]uh¤Mth¥hh¦]rmh¯X1linux/arch/arm/configs/tisdk_am57xx-evm_defconfigrn…�ro}rp(h‚X3linux/arch/arm/configs/tisdk\_am57xx-evm\_defconfigh‘jiubaubj¡)�rq}rr(h‚Xa# # Default contiguous memory area size: # CONFIG_CMA_SIZE_MBYTES=24 CONFIG_CMA_SIZE_SEL_MBYTES=yh‘jÏhœjáh�j¤hƒ}rs(Ulinenosrt‰UlanguageruXchÊhËh†]h‡]h…]Uhighlight_argsrv}hŽ]h�]uh¤Mvh¥hh¦]rwh¯Xa# # Default contiguous memory area size: # CONFIG_CMA_SIZE_MBYTES=24 CONFIG_CMA_SIZE_SEL_MBYTES=yrx…�ry}rz(h‚Uh‘jqubaubhþ)�r{}r|(h‚Uh‘jÏhœjáh�jhƒ}r}(h…]hŽ]h‡]h†]h�]uh¤M~h¥hh¦]r~j)�r}r€(h‚UjKh‘j{hœjáh�h¤hƒ}r�(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubh’)�r‚}rƒ(h‚XCMEMr„h‘jÏhœjáh�hÓhƒ}r…(h†]r†Ucmemr‡ah‡]h…]hŽ]h�]rˆhBauh¤Nh¥hh¦]r‰h¯XCMEMrŠ…�r‹}rŒ(h‚j„h‘j‚ubaubhÜ)�r�}rŽ(h‚X#To view the allocation at run-time:r�h‘jÏhœjáh�hàhƒ}r�(h…]hŽ]h‡]h†]h�]uh¤Mƒh¥hh¦]r‘h¯X#To view the allocation at run-time:r’…�r“}r”(h‚j�h‘j�ubaubj¡)�r•}r–(h‚X root@am57xx-evm:~# cat /proc/cmem Block 0: Pool 0: 1 bufs size 0xc000000 (0xc000000 requested) Pool 0 busy bufs: Pool 0 free bufs: id 0: phys addr 0xa0000000h‘jÏhœjáh�j¤hƒ}r—(hÊhËh†]h‡]h…]hŽ]h�]uh¤MIh¥hh¦]r˜h¯X root@am57xx-evm:~# cat /proc/cmem Block 0: Pool 0: 1 bufs size 0xc000000 (0xc000000 requested) Pool 0 busy bufs: Pool 0 free bufs: id 0: phys addr 0xa0000000r™…�rš}r›(h‚Uh‘j•ubaubhÜ)�rœ}r�(h‚XThis shows that we have defined a CMEM block at physical base address of 0xA0000000 with total size 0xc000000 (192 MB). This block contains a buffer pool consisting of 1 buffer. Each buffer in the pool (only one in this case) is defined to have a size of 0xc000000 (192 MB).ržh‘jÏhœjáh�hàhƒ}rŸ(h…]hŽ]h‡]h†]h�]uh¤M�h¥hh¦]r h¯XThis shows that we have defined a CMEM block at physical base address of 0xA0000000 with total size 0xc000000 (192 MB). This block contains a buffer pool consisting of 1 buffer. Each buffer in the pool (only one in this case) is defined to have a size of 0xc000000 (192 MB).r¡…�r¢}r£(h‚jžh‘jœubaubhÜ)�r¤}r¥(h‚XDHere is where those sizes/addresses were defined for the AM57xx EVM:r¦h‘jÏhœjáh�hàhƒ}r§(h…]hŽ]h‡]h†]h�]uh¤M•h¥hh¦]r¨h¯XDHere is where those sizes/addresses were defined for the AM57xx EVM:r©…�rª}r«(h‚j¦h‘j¤ubaubhÜ)�r¬}r­(h‚X,linux/arch/arm/boot/dts/am57xx-evm-cmem.dtsir®h‘jÏhœjáh�hàhƒ}r¯(h…]hŽ]h‡]h†]h�]uh¤M—h¥hh¦]r°h¯X,linux/arch/arm/boot/dts/am57xx-evm-cmem.dtsir±…�r²}r³(h‚j®h‘j¬ubaubj¡)�r´}rµ(h‚X}/ { reserved-memory { #address-cells = <2>; #size-cells = <2>; ranges; cmem_block_mem_0: cmem_block_mem@a0000000 { reg = <0x0 0xa0000000 0x0 0x0c000000>; no-map; status = "okay"; }; cmem_block_mem_1_ocmc3: cmem_block_mem@40500000 { reg = <0x0 0x40500000 0x0 0x100000>; no-map; status = "okay"; }; }; cmem { compatible = "ti,cmem"; #address-cells = <1>; #size-cells = <0>; #pool-size-cells = <2>; status = "okay"; cmem_block_0: cmem_block@0 { reg = <0>; memory-region = <&cmem_block_mem_0>; cmem-buf-pools = <1 0x0 0x0c000000>; }; cmem_block_1: cmem_block@1 { reg = <1>; memory-region = <&cmem_block_mem_1_ocmc3>; }; }; };h‘jÏhœjáh�j¤hƒ}r¶(hÊhËh†]h‡]h…]hŽ]h�]uh¤M]h¥hh¦]r·h¯X}/ { reserved-memory { #address-cells = <2>; #size-cells = <2>; ranges; cmem_block_mem_0: cmem_block_mem@a0000000 { reg = <0x0 0xa0000000 0x0 0x0c000000>; no-map; status = "okay"; }; cmem_block_mem_1_ocmc3: cmem_block_mem@40500000 { reg = <0x0 0x40500000 0x0 0x100000>; no-map; status = "okay"; }; }; cmem { compatible = "ti,cmem"; #address-cells = <1>; #size-cells = <0>; #pool-size-cells = <2>; status = "okay"; cmem_block_0: cmem_block@0 { reg = <0>; memory-region = <&cmem_block_mem_0>; cmem-buf-pools = <1 0x0 0x0c000000>; }; cmem_block_1: cmem_block@1 { reg = <1>; memory-region = <&cmem_block_mem_1_ocmc3>; }; }; };r¸…�r¹}rº(h‚Uh‘j´ubaubhþ)�r»}r¼(h‚Uh‘jÏhœjáh�jhƒ}r½(h…]hŽ]h‡]h†]h�]uh¤MÄh¥hh¦]r¾j)�r¿}rÀ(h‚UjKh‘j»hœjáh�h¤hƒ}rÁ(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubh’)�rÂ}rÃ(h‚XChanging the DSP Memory MaprÄh‘jÏhœjáh�hÓhƒ}rÅ(h†]rÆUchanging-the-dsp-memory-maprÇah‡]h…]hŽ]h�]rÈhauh¤Nh¥hh¦]rÉh¯XChanging the DSP Memory MaprÊ…�rË}rÌ(h‚jÄh‘jÂubaubhÜ)�rÍ}rÎ(h‚X§First, it is important to understand that there are a pair of Memory Management Units (MMUs) that sit between the DSP subsystems and the L3 interconnect. One of these MMUs is for the DSP core and the other is for its local EDMA. They both serve the same purpose of translating virtual addresses (i.e. the addresses as viewed by the DSP subsystem) into physical addresses (i.e. addresses as viewed from the L3 interconnect).rÏh‘jÏhœjáh�hàhƒ}rÐ(h…]hŽ]h‡]h†]h�]uh¤MÉh¥hh¦]rÑh¯X§First, it is important to understand that there are a pair of Memory Management Units (MMUs) that sit between the DSP subsystems and the L3 interconnect. One of these MMUs is for the DSP core and the other is for its local EDMA. They both serve the same purpose of translating virtual addresses (i.e. the addresses as viewed by the DSP subsystem) into physical addresses (i.e. addresses as viewed from the L3 interconnect).rÒ…�rÓ}rÔ(h‚jÏh‘jÍubaubjr)�rÕ}rÖ(h‚X(.. Image:: ../images/LinuxIpcDspMmu.png h‘jÏhœjáh�jyhƒ}r×(UuriX"linux/../images/LinuxIpcDspMmu.pngrØh†]h‡]h…]hŽ]jw}rÙU*jØsh�]uh¤MÑh¥hh¦]ubh’)�rÚ}rÛ(h‚XDSP Physical AddressesrÜh‘jÏhœjáh�hÓhƒ}rÝ(h†]rÞUdsp-physical-addressesrßah‡]h…]hŽ]h�]ràhaauh¤Nh¥hh¦]ráh¯XDSP Physical Addressesrâ…�rã}rä(h‚jÜh‘jÚubaubhÜ)�rå}ræ(h‚XThe physical location where the DSP code/data will actually reside is defined by the CMA carveout. To change this location, you must change the definition of the carveout. **The DSP carveouts are defined in the Linux dts file.** For example for the AM57xx EVM:h‘jÏhœjáh�hàhƒ}rç(h…]hŽ]h‡]h†]h�]uh¤MÕh¥hh¦]rè(h¯X¬The physical location where the DSP code/data will actually reside is defined by the CMA carveout. To change this location, you must change the definition of the carveout. ré…�rê}rë(h‚X¬The physical location where the DSP code/data will actually reside is defined by the CMA carveout. To change this location, you must change the definition of the carveout. h‘jåubj¯)�rì}rí(h‚X8**The DSP carveouts are defined in the Linux dts file.**hƒ}rî(h…]hŽ]h‡]h†]h�]uh‘jåh¦]rïh¯X4The DSP carveouts are defined in the Linux dts file.rð…�rñ}rò(h‚Uh‘jìubah�j·ubh¯X For example for the AM57xx EVM:ró…�rô}rõ(h‚X For example for the AM57xx EVM:h‘jåubeubhþ)�rö}r÷(h‚Uh‘jÏhœjáh�jhƒ}rø(h…]hŽ]h‡]h†]h�]uh¤MÚh¥hh¦]rù(j)�rú}rû(h‚UjKh‘jöhœjáh�h¤hƒ}rü(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubj)�rý}rþ(h‚X5linux/arch/arm/boot/dts/am57xx-beagle-x15-common.dtsirÿjKh‘jöhœjáh�h¤hƒ}r (h…]hŽ]h‡]h†]h�]uh¤MÛh¥hh¦]r h¯X5linux/arch/arm/boot/dts/am57xx-beagle-x15-common.dtsir …�r }r (h‚jÿh‘jýubaubeubj¡)�r }r (h‚X° dsp1_cma_pool: dsp1_cma@99000000 { compatible = "shared-dma-pool"; reg = <0x0 0x99000000 0x0 0x4000000>; reusable; status = "okay"; }; dsp2_cma_pool: dsp2_cma@9f000000 { compatible = "shared-dma-pool"; reg = <0x0 0x9f000000 0x0 0x800000>; reusable; status = "okay"; }; };h‘jÏhœjáh�j¤hƒ}r (hÊhËh†]h‡]h…]hŽ]h�]uh¤M¡h¥hh¦]r h¯X° dsp1_cma_pool: dsp1_cma@99000000 { compatible = "shared-dma-pool"; reg = <0x0 0x99000000 0x0 0x4000000>; reusable; status = "okay"; }; dsp2_cma_pool: dsp2_cma@9f000000 { compatible = "shared-dma-pool"; reg = <0x0 0x9f000000 0x0 0x800000>; reusable; status = "okay"; }; };r …�r }r (h‚Uh‘j ubaubhÜ)�r }r (h‚XeYou are able to change both the size and location. **Be careful not to overlap any other carveouts!**h‘jÏhœjáh�hàhƒ}r (h…]hŽ]h‡]h†]h�]uh¤Mîh¥hh¦]r (h¯X3You are able to change both the size and location. r …�r }r (h‚X3You are able to change both the size and location. h‘j ubj¯)�r }r (h‚X2**Be careful not to overlap any other carveouts!**hƒ}r (h…]hŽ]h‡]h†]h�]uh‘j h¦]r h¯X.Be careful not to overlap any other carveouts!r …�r }r (h‚Uh‘j ubah�j·ubeubj)�r }r (h‚X?The **two** location entries for a given DSP must be identical!r h‘jÏhœjáh�jhƒ}r (h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r hÜ)�r }r (h‚j h‘j hœjáh�hàhƒ}r! (h…]hŽ]h‡]h†]h�]uh¤Mòh¦]r" (h¯XThe r# …�r$ }r% (h‚XThe h‘j ubj¯)�r& }r' (h‚X**two**hƒ}r( (h…]hŽ]h‡]h†]h�]uh‘j h¦]r) h¯Xtwor* …�r+ }r, (h‚Uh‘j& ubah�j·ubh¯X4 location entries for a given DSP must be identical!r- …�r. }r/ (h‚X4 location entries for a given DSP must be identical!h‘j ubeubaubhÜ)�r0 }r1 (h‚XoAdditionally, when you change the carveout location, there is a corresponding change that must be made to the resource table. For starters, if you're making a memory change you will need a **custom** resource table. The resource table is a large structure that is the "bridge" between physical memory and virtual memory. This structure is utilized for configuring the MMUs that sit in front of the DSP subsystem. There is detailed information available in the article `IPC Resource customTable `__.h‘jÏhœjáh�hàhƒ}r2 (h…]hŽ]h‡]h†]h�]uh¤Môh¥hh¦]r3 (h¯X½Additionally, when you change the carveout location, there is a corresponding change that must be made to the resource table. For starters, if you're making a memory change you will need a r4 …�r5 }r6 (h‚X½Additionally, when you change the carveout location, there is a corresponding change that must be made to the resource table. For starters, if you're making a memory change you will need a h‘j0 ubj¯)�r7 }r8 (h‚X **custom**hƒ}r9 (h…]hŽ]h‡]h†]h�]uh‘j0 h¦]r: h¯Xcustomr; …�r< }r= (h‚Uh‘j7 ubah�j·ubh¯X  resource table. The resource table is a large structure that is the "bridge" between physical memory and virtual memory. This structure is utilized for configuring the MMUs that sit in front of the DSP subsystem. There is detailed information available in the article r> …�r? }r@ (h‚X  resource table. The resource table is a large structure that is the "bridge" between physical memory and virtual memory. This structure is utilized for configuring the MMUs that sit in front of the DSP subsystem. There is detailed information available in the article h‘j0 ubj))�rA }rB (h‚Xš`IPC Resource customTable `__hƒ}rC (UnameXIPC Resource customTablej-Xzhttp://software-dl.ti.com/processor-sdk-rtos/esd/docs/latest/rtos/index_Foundational_Components.html#resource-custom-tableh†]h‡]h…]hŽ]h�]uh‘j0 h¦]rD h¯XIPC Resource customTablerE …�rF }rG (h‚Uh‘jA ubah�j2ubh¯X.…�rH }rI (h‚X.h‘j0 ubeubhÜ)�rJ }rK (h‚X›Once you've created your custom resource table, you must update the address of PHYS\_MEM\_IPC\_VRING to be the same base address as your corresponding CMA.h‘jÏhœjáh�hàhƒ}rL (h…]hŽ]h‡]h†]h�]uh¤Mþh¥hh¦]rM h¯X˜Once you've created your custom resource table, you must update the address of PHYS_MEM_IPC_VRING to be the same base address as your corresponding CMA.rN …�rO }rP (h‚X›Once you've created your custom resource table, you must update the address of PHYS\_MEM\_IPC\_VRING to be the same base address as your corresponding CMA.h‘jJ ubaubj¡)�rQ }rR (h‚X�#if defined (VAYU_DSP_1) #define PHYS_MEM_IPC_VRING 0x99000000 #elif defined (VAYU_DSP_2) #define PHYS_MEM_IPC_VRING 0x9F000000 #endifh‘jÏhœjáh�j¤hƒ}rS (jt‰juXchÊhËh†]h‡]h…]jv}hŽ]h�]uh¤Mh¥hh¦]rT h¯X�#if defined (VAYU_DSP_1) #define PHYS_MEM_IPC_VRING 0x99000000 #elif defined (VAYU_DSP_2) #define PHYS_MEM_IPC_VRING 0x9F000000 #endifrU …�rV }rW (h‚Uh‘jQ ubaubj)�rX }rY (h‚XsThe PHYS\_MEM\_IPC\_VRING definition from the resource table must match the address of the associated CMA carveout!h‘jÏhœjáh�jhƒ}rZ (h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r[ hÜ)�r\ }r] (h‚XsThe PHYS\_MEM\_IPC\_VRING definition from the resource table must match the address of the associated CMA carveout!h‘jX hœjáh�hàhƒ}r^ (h…]hŽ]h‡]h†]h�]uh¤M h¦]r_ h¯XpThe PHYS_MEM_IPC_VRING definition from the resource table must match the address of the associated CMA carveout!r` …�ra }rb (h‚XsThe PHYS\_MEM\_IPC\_VRING definition from the resource table must match the address of the associated CMA carveout!h‘j\ ubaubaubh’)�rc }rd (h‚XDSP Virtual Addressesre h‘jÏhœjáh�hÓhƒ}rf (h†]rg Udsp-virtual-addressesrh ah‡]h…]hŽ]h�]ri h;auh¤Nh¥hh¦]rj h¯XDSP Virtual Addressesrk …�rl }rm (h‚je h‘jc ubaubhÜ)�rn }ro (h‚X{These addresses are the ones seen by the DSP subsystem, i.e. these will be the addresses in your linker command files, etc.rp h‘jÏhœjáh�hàhƒ}rq (h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]rr h¯X{These addresses are the ones seen by the DSP subsystem, i.e. these will be the addresses in your linker command files, etc.rs …�rt }ru (h‚jp h‘jn ubaubhÜ)�rv }rw (h‚XµYou must ensure that the sizes of your sections are consistent with the corresponding definitions in the resource table. You should create your own resource table in order to modify the memory map. This is describe in the page `IPC Resource customTable `__. You can look at an existing resource table inside IPC:h‘jÏhœjáh�hàhƒ}rx (h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]ry (h¯XãYou must ensure that the sizes of your sections are consistent with the corresponding definitions in the resource table. You should create your own resource table in order to modify the memory map. This is describe in the page rz …�r{ }r| (h‚XãYou must ensure that the sizes of your sections are consistent with the corresponding definitions in the resource table. You should create your own resource table in order to modify the memory map. This is describe in the page h‘jv ubj))�r} }r~ (h‚Xš`IPC Resource customTable `__hƒ}r (UnameXIPC Resource customTablej-Xzhttp://software-dl.ti.com/processor-sdk-rtos/esd/docs/latest/rtos/index_Foundational_Components.html#resource-custom-tableh†]h‡]h…]hŽ]h�]uh‘jv h¦]r€ h¯XIPC Resource customTabler� …�r‚ }rƒ (h‚Uh‘j} ubah�j2ubh¯X8. You can look at an existing resource table inside IPC:r„ …�r… }r† (h‚X8. You can look at an existing resource table inside IPC:h‘jv ubeubhÜ)�r‡ }rˆ (h‚X6ipc/packages/ti/ipc/remoteproc/rsc\_table\_vayu\_dsp.hr‰ h‘jÏhœjáh�hàhƒ}rŠ (h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]r‹ h¯X3ipc/packages/ti/ipc/remoteproc/rsc_table_vayu_dsp.hrŒ …�r� }rŽ (h‚X6ipc/packages/ti/ipc/remoteproc/rsc\_table\_vayu\_dsp.hh‘j‡ ubaubj¡)�r� }r� (h‚X,{ TYPE_CARVEOUT, DSP_MEM_TEXT, 0, DSP_MEM_TEXT_SIZE, 0, 0, "DSP_MEM_TEXT", }, { TYPE_CARVEOUT, DSP_MEM_DATA, 0, DSP_MEM_DATA_SIZE, 0, 0, "DSP_MEM_DATA", }, { TYPE_CARVEOUT, DSP_MEM_HEAP, 0, DSP_MEM_HEAP_SIZE, 0, 0, "DSP_MEM_HEAP", }, { TYPE_CARVEOUT, DSP_MEM_IPC_DATA, 0, DSP_MEM_IPC_DATA_SIZE, 0, 0, "DSP_MEM_IPC_DATA", }, { TYPE_TRACE, TRACEBUFADDR, 0x8000, 0, "trace:dsp", }, { TYPE_DEVMEM, DSP_MEM_IPC_VRING, PHYS_MEM_IPC_VRING, DSP_MEM_IPC_VRING_SIZE, 0, 0, "DSP_MEM_IPC_VRING", },h‘jÏhœjáh�j¤hƒ}r‘ (hÊhËh†]h‡]h…]hŽ]r’ (Ucoder“ Xceh�]uh¤MCh¥hh¦]r” (cdocutils.nodes inline r• )�r– }r— (h‚X{hƒ}r˜ (h…]hŽ]r™ U punctuationrš ah‡]h†]h�]uh‘j� h¦]r› h¯X{…�rœ }r� (h‚Uh‘j– ubah�Uinlinerž ubh¯X rŸ …�r  }r¡ (h‚X h‘j� ubj• )�r¢ }r£ (h‚X TYPE_CARVEOUThƒ}r¤ (h…]hŽ]r¥ Unamer¦ ah‡]h†]h�]uh‘j� h¦]r§ h¯X TYPE_CARVEOUTr¨ …�r© }rª (h‚Uh‘j¢ ubah�jž ubj• )�r« }r¬ (h‚X,hƒ}r­ (h…]hŽ]r® U punctuationr¯ ah‡]h†]h�]uh‘j� h¦]r° h¯X,…�r± }r² (h‚Uh‘j« ubah�jž ubh¯X r³ …�r´ }rµ (h‚X h‘j� ubj• )�r¶ }r· (h‚X DSP_MEM_TEXThƒ}r¸ (h…]hŽ]r¹ Unamerº ah‡]h†]h�]uh‘j� h¦]r» h¯X DSP_MEM_TEXTr¼ …�r½ }r¾ (h‚Uh‘j¶ ubah�jž ubj• )�r¿ }rÀ (h‚X,hƒ}rÁ (h…]hŽ]r U punctuationrà ah‡]h†]h�]uh‘j� h¦]rÄ h¯X,…�rÅ }rÆ (h‚Uh‘j¿ ubah�jž ubh¯X …�rÇ }rÈ (h‚X h‘j� ubj• )�rÉ }rÊ (h‚X0hƒ}rË (h…]hŽ]rÌ (UliteralrÍ UnumberrÎ UintegerrÏ eh‡]h†]h�]uh‘j� h¦]rÐ h¯X0…�rÑ }rÒ (h‚Uh‘jÉ ubah�jž ubj• )�rÓ }rÔ (h‚X,hƒ}rÕ (h…]hŽ]rÖ U punctuationr× ah‡]h†]h�]uh‘j� h¦]rØ h¯X,…�rÙ }rÚ (h‚Uh‘jÓ ubah�jž ubh¯X rÛ …�rÜ }rÝ (h‚X h‘j� ubj• )�rÞ }rß (h‚XDSP_MEM_TEXT_SIZEhƒ}rà (h…]hŽ]rá Unamerâ ah‡]h†]h�]uh‘j� h¦]rã h¯XDSP_MEM_TEXT_SIZErä …�rå }ræ (h‚Uh‘jÞ ubah�jž ubj• )�rç }rè (h‚X,hƒ}ré (h…]hŽ]rê U punctuationrë ah‡]h†]h�]uh‘j� h¦]rì h¯X,…�rí }rî (h‚Uh‘jç ubah�jž ubh¯X …�rï }rð (h‚X h‘j� ubj• )�rñ }rò (h‚X0hƒ}ró (h…]hŽ]rô (Uliteralrõ Unumberrö Uintegerr÷ eh‡]h†]h�]uh‘j� h¦]rø h¯X0…�rù }rú (h‚Uh‘jñ ubah�jž ubj• )�rû }rü (h‚X,hƒ}rý (h…]hŽ]rþ U punctuationrÿ ah‡]h†]h�]uh‘j� h¦]r h¯X,…�r }r (h‚Uh‘jû ubah�jž ubh¯X …�r }r (h‚X h‘j� ubj• )�r }r (h‚X0hƒ}r (h…]hŽ]r (Uliteralr Unumberr Uintegerr eh‡]h†]h�]uh‘j� h¦]r h¯X0…�r }r (h‚Uh‘j ubah�jž ubj• )�r }r (h‚X,hƒ}r (h…]hŽ]r U punctuationr ah‡]h†]h�]uh‘j� h¦]r h¯X,…�r }r (h‚Uh‘j ubah�jž ubh¯X …�r }r (h‚X h‘j� ubj• )�r }r (h‚X"DSP_MEM_TEXT"hƒ}r (h…]hŽ]r (Uliteralr Ustringr eh‡]h†]h�]uh‘j� h¦]r h¯X"DSP_MEM_TEXT"r …�r! }r" (h‚Uh‘j ubah�jž ubj• )�r# }r$ (h‚X,hƒ}r% (h…]hŽ]r& U punctuationr' ah‡]h†]h�]uh‘j� h¦]r( h¯X,…�r) }r* (h‚Uh‘j# ubah�jž ubh¯X …�r+ }r, (h‚X h‘j� ubj• )�r- }r. (h‚X},hƒ}r/ (h…]hŽ]r0 U punctuationr1 ah‡]h†]h�]uh‘j� h¦]r2 h¯X},r3 …�r4 }r5 (h‚Uh‘j- ubah�jž ubh¯X r6 …�r7 }r8 (h‚X h‘j� ubj• )�r9 }r: (h‚X{hƒ}r; (h…]hŽ]r< U punctuationr= ah‡]h†]h�]uh‘j� h¦]r> h¯X{…�r? }r@ (h‚Uh‘j9 ubah�jž ubh¯X rA …�rB }rC (h‚X h‘j� ubj• )�rD }rE (h‚X TYPE_CARVEOUThƒ}rF (h…]hŽ]rG UnamerH ah‡]h†]h�]uh‘j� h¦]rI h¯X TYPE_CARVEOUTrJ …�rK }rL (h‚Uh‘jD ubah�jž ubj• )�rM }rN (h‚X,hƒ}rO (h…]hŽ]rP U punctuationrQ ah‡]h†]h�]uh‘j� h¦]rR h¯X,…�rS }rT (h‚Uh‘jM ubah�jž ubh¯X rU …�rV }rW (h‚X h‘j� ubj• )�rX }rY (h‚X DSP_MEM_DATAhƒ}rZ (h…]hŽ]r[ Unamer\ ah‡]h†]h�]uh‘j� h¦]r] h¯X DSP_MEM_DATAr^ …�r_ }r` (h‚Uh‘jX ubah�jž ubj• )�ra }rb (h‚X,hƒ}rc (h…]hŽ]rd U punctuationre ah‡]h†]h�]uh‘j� h¦]rf h¯X,…�rg }rh (h‚Uh‘ja ubah�jž ubh¯X …�ri }rj (h‚X h‘j� ubj• )�rk }rl (h‚X0hƒ}rm (h…]hŽ]rn (Uliteralro Unumberrp Uintegerrq eh‡]h†]h�]uh‘j� h¦]rr h¯X0…�rs }rt (h‚Uh‘jk ubah�jž ubj• )�ru }rv (h‚X,hƒ}rw (h…]hŽ]rx U punctuationry ah‡]h†]h�]uh‘j� h¦]rz h¯X,…�r{ }r| (h‚Uh‘ju ubah�jž ubh¯X r} …�r~ }r (h‚X h‘j� ubj• )�r€ }r� (h‚XDSP_MEM_DATA_SIZEhƒ}r‚ (h…]hŽ]rƒ Unamer„ ah‡]h†]h�]uh‘j� h¦]r… h¯XDSP_MEM_DATA_SIZEr† …�r‡ }rˆ (h‚Uh‘j€ ubah�jž ubj• )�r‰ }rŠ (h‚X,hƒ}r‹ (h…]hŽ]rŒ U punctuationr� ah‡]h†]h�]uh‘j� h¦]rŽ h¯X,…�r� }r� (h‚Uh‘j‰ ubah�jž ubh¯X …�r‘ }r’ (h‚X h‘j� ubj• )�r“ }r” (h‚X0hƒ}r• (h…]hŽ]r– (Uliteralr— Unumberr˜ Uintegerr™ eh‡]h†]h�]uh‘j� h¦]rš h¯X0…�r› }rœ (h‚Uh‘j“ ubah�jž ubj• )�r� }rž (h‚X,hƒ}rŸ (h…]hŽ]r  U punctuationr¡ ah‡]h†]h�]uh‘j� h¦]r¢ h¯X,…�r£ }r¤ (h‚Uh‘j� ubah�jž ubh¯X …�r¥ }r¦ (h‚X h‘j� ubj• )�r§ }r¨ (h‚X0hƒ}r© (h…]hŽ]rª (Uliteralr« Unumberr¬ Uintegerr­ eh‡]h†]h�]uh‘j� h¦]r® h¯X0…�r¯ }r° (h‚Uh‘j§ ubah�jž ubj• )�r± }r² (h‚X,hƒ}r³ (h…]hŽ]r´ U punctuationrµ ah‡]h†]h�]uh‘j� h¦]r¶ h¯X,…�r· }r¸ (h‚Uh‘j± ubah�jž ubh¯X …�r¹ }rº (h‚X h‘j� ubj• )�r» }r¼ (h‚X"DSP_MEM_DATA"hƒ}r½ (h…]hŽ]r¾ (Uliteralr¿ UstringrÀ eh‡]h†]h�]uh‘j� h¦]rÁ h¯X"DSP_MEM_DATA"r …�rà }rÄ (h‚Uh‘j» ubah�jž ubj• )�rÅ }rÆ (h‚X,hƒ}rÇ (h…]hŽ]rÈ U punctuationrÉ ah‡]h†]h�]uh‘j� h¦]rÊ h¯X,…�rË }rÌ (h‚Uh‘jÅ ubah�jž ubh¯X …�rÍ }rÎ (h‚X h‘j� ubj• )�rÏ }rÐ (h‚X},hƒ}rÑ (h…]hŽ]rÒ U punctuationrÓ ah‡]h†]h�]uh‘j� h¦]rÔ h¯X},rÕ …�rÖ }r× (h‚Uh‘jÏ ubah�jž ubh¯X rØ …�rÙ }rÚ (h‚X h‘j� ubj• )�rÛ }rÜ (h‚X{hƒ}rÝ (h…]hŽ]rÞ U punctuationrß ah‡]h†]h�]uh‘j� h¦]rà h¯X{…�rá }râ (h‚Uh‘jÛ ubah�jž ubh¯X rã …�rä }rå (h‚X h‘j� ubj• )�ræ }rç (h‚X TYPE_CARVEOUThƒ}rè (h…]hŽ]ré Unamerê ah‡]h†]h�]uh‘j� h¦]rë h¯X TYPE_CARVEOUTrì …�rí }rî (h‚Uh‘jæ ubah�jž ubj• )�rï }rð (h‚X,hƒ}rñ (h…]hŽ]rò U punctuationró ah‡]h†]h�]uh‘j� h¦]rô h¯X,…�rõ }rö (h‚Uh‘jï ubah�jž ubh¯X r÷ …�rø }rù (h‚X h‘j� ubj• )�rú }rû (h‚X DSP_MEM_HEAPhƒ}rü (h…]hŽ]rý Unamerþ ah‡]h†]h�]uh‘j� h¦]rÿ h¯X DSP_MEM_HEAPr …�r }r (h‚Uh‘jú ubah�jž ubj• )�r }r (h‚X,hƒ}r (h…]hŽ]r U punctuationr ah‡]h†]h�]uh‘j� h¦]r h¯X,…�r }r (h‚Uh‘j ubah�jž ubh¯X …�r }r (h‚X h‘j� ubj• )�r }r (h‚X0hƒ}r (h…]hŽ]r (Uliteralr Unumberr Uintegerr eh‡]h†]h�]uh‘j� h¦]r h¯X0…�r }r (h‚Uh‘j ubah�jž ubj• )�r }r (h‚X,hƒ}r (h…]hŽ]r U punctuationr ah‡]h†]h�]uh‘j� h¦]r h¯X,…�r }r (h‚Uh‘j ubah�jž ubh¯X r …�r }r! (h‚X h‘j� ubj• )�r" }r# (h‚XDSP_MEM_HEAP_SIZEhƒ}r$ (h…]hŽ]r% Unamer& ah‡]h†]h�]uh‘j� h¦]r' h¯XDSP_MEM_HEAP_SIZEr( …�r) }r* (h‚Uh‘j" ubah�jž ubj• )�r+ }r, (h‚X,hƒ}r- (h…]hŽ]r. U punctuationr/ ah‡]h†]h�]uh‘j� h¦]r0 h¯X,…�r1 }r2 (h‚Uh‘j+ ubah�jž ubh¯X …�r3 }r4 (h‚X h‘j� ubj• )�r5 }r6 (h‚X0hƒ}r7 (h…]hŽ]r8 (Uliteralr9 Unumberr: Uintegerr; eh‡]h†]h�]uh‘j� h¦]r< h¯X0…�r= }r> (h‚Uh‘j5 ubah�jž ubj• )�r? }r@ (h‚X,hƒ}rA (h…]hŽ]rB U punctuationrC ah‡]h†]h�]uh‘j� h¦]rD h¯X,…�rE }rF (h‚Uh‘j? ubah�jž ubh¯X …�rG }rH (h‚X h‘j� ubj• )�rI }rJ (h‚X0hƒ}rK (h…]hŽ]rL (UliteralrM UnumberrN UintegerrO eh‡]h†]h�]uh‘j� h¦]rP h¯X0…�rQ }rR (h‚Uh‘jI ubah�jž ubj• )�rS }rT (h‚X,hƒ}rU (h…]hŽ]rV U punctuationrW ah‡]h†]h�]uh‘j� h¦]rX h¯X,…�rY }rZ (h‚Uh‘jS ubah�jž ubh¯X …�r[ }r\ (h‚X h‘j� ubj• )�r] }r^ (h‚X"DSP_MEM_HEAP"hƒ}r_ (h…]hŽ]r` (Uliteralra Ustringrb eh‡]h†]h�]uh‘j� h¦]rc h¯X"DSP_MEM_HEAP"rd …�re }rf (h‚Uh‘j] ubah�jž ubj• )�rg }rh (h‚X,hƒ}ri (h…]hŽ]rj U punctuationrk ah‡]h†]h�]uh‘j� h¦]rl h¯X,…�rm }rn (h‚Uh‘jg ubah�jž ubh¯X …�ro }rp (h‚X h‘j� ubj• )�rq }rr (h‚X},hƒ}rs (h…]hŽ]rt U punctuationru ah‡]h†]h�]uh‘j� h¦]rv h¯X},rw …�rx }ry (h‚Uh‘jq ubah�jž ubh¯X rz …�r{ }r| (h‚X h‘j� ubj• )�r} }r~ (h‚X{hƒ}r (h…]hŽ]r€ U punctuationr� ah‡]h†]h�]uh‘j� h¦]r‚ h¯X{…�rƒ }r„ (h‚Uh‘j} ubah�jž ubh¯X r… …�r† }r‡ (h‚X h‘j� ubj• )�rˆ }r‰ (h‚X TYPE_CARVEOUThƒ}rŠ (h…]hŽ]r‹ UnamerŒ ah‡]h†]h�]uh‘j� h¦]r� h¯X TYPE_CARVEOUTrŽ …�r� }r� (h‚Uh‘jˆ ubah�jž ubj• )�r‘ }r’ (h‚X,hƒ}r“ (h…]hŽ]r” U punctuationr• ah‡]h†]h�]uh‘j� h¦]r– h¯X,…�r— }r˜ (h‚Uh‘j‘ ubah�jž ubh¯X r™ …�rš }r› (h‚X h‘j� ubj• )�rœ }r� (h‚XDSP_MEM_IPC_DATAhƒ}rž (h…]hŽ]rŸ Unamer  ah‡]h†]h�]uh‘j� h¦]r¡ h¯XDSP_MEM_IPC_DATAr¢ …�r£ }r¤ (h‚Uh‘jœ ubah�jž ubj• )�r¥ }r¦ (h‚X,hƒ}r§ (h…]hŽ]r¨ U punctuationr© ah‡]h†]h�]uh‘j� h¦]rª h¯X,…�r« }r¬ (h‚Uh‘j¥ ubah�jž ubh¯X …�r­ }r® (h‚X h‘j� ubj• )�r¯ }r° (h‚X0hƒ}r± (h…]hŽ]r² (Uliteralr³ Unumberr´ Uintegerrµ eh‡]h†]h�]uh‘j� h¦]r¶ h¯X0…�r· }r¸ (h‚Uh‘j¯ ubah�jž ubj• )�r¹ }rº (h‚X,hƒ}r» (h…]hŽ]r¼ U punctuationr½ ah‡]h†]h�]uh‘j� h¦]r¾ h¯X,…�r¿ }rÀ (h‚Uh‘j¹ ubah�jž ubh¯X rÁ …�r }rà (h‚X h‘j� ubj• )�rÄ }rÅ (h‚XDSP_MEM_IPC_DATA_SIZEhƒ}rÆ (h…]hŽ]rÇ UnamerÈ ah‡]h†]h�]uh‘j� h¦]rÉ h¯XDSP_MEM_IPC_DATA_SIZErÊ …�rË }rÌ (h‚Uh‘jÄ ubah�jž ubj• )�rÍ }rÎ (h‚X,hƒ}rÏ (h…]hŽ]rÐ U punctuationrÑ ah‡]h†]h�]uh‘j� h¦]rÒ h¯X,…�rÓ }rÔ (h‚Uh‘jÍ ubah�jž ubh¯X …�rÕ }rÖ (h‚X h‘j� ubj• )�r× }rØ (h‚X0hƒ}rÙ (h…]hŽ]rÚ (UliteralrÛ UnumberrÜ UintegerrÝ eh‡]h†]h�]uh‘j� h¦]rÞ h¯X0…�rß }rà (h‚Uh‘j× ubah�jž ubj• )�rá }râ (h‚X,hƒ}rã (h…]hŽ]rä U punctuationrå ah‡]h†]h�]uh‘j� h¦]ræ h¯X,…�rç }rè (h‚Uh‘já ubah�jž ubh¯X …�ré }rê (h‚X h‘j� ubj• )�rë }rì (h‚X0hƒ}rí (h…]hŽ]rî (Uliteralrï Unumberrð Uintegerrñ eh‡]h†]h�]uh‘j� h¦]rò h¯X0…�ró }rô (h‚Uh‘jë ubah�jž ubj• )�rõ }rö (h‚X,hƒ}r÷ (h…]hŽ]rø U punctuationrù ah‡]h†]h�]uh‘j� h¦]rú h¯X,…�rû }rü (h‚Uh‘jõ ubah�jž ubh¯X …�rý }rþ (h‚X h‘j� ubj• )�rÿ }r (h‚X"DSP_MEM_IPC_DATA"hƒ}r (h…]hŽ]r (Uliteralr Ustringr eh‡]h†]h�]uh‘j� h¦]r h¯X"DSP_MEM_IPC_DATA"r …�r }r (h‚Uh‘jÿ ubah�jž ubj• )�r }r (h‚X,hƒ}r (h…]hŽ]r U punctuationr ah‡]h†]h�]uh‘j� h¦]r h¯X,…�r }r (h‚Uh‘j ubah�jž ubh¯X …�r }r (h‚X h‘j� ubj• )�r }r (h‚X},hƒ}r (h…]hŽ]r U punctuationr ah‡]h†]h�]uh‘j� h¦]r h¯X},r …�r }r (h‚Uh‘j ubah�jž ubh¯X r …�r }r (h‚X h‘j� ubj• )�r }r (h‚X{hƒ}r! (h…]hŽ]r" U punctuationr# ah‡]h†]h�]uh‘j� h¦]r$ h¯X{…�r% }r& (h‚Uh‘j ubah�jž ubh¯X r' …�r( }r) (h‚X h‘j� ubj• )�r* }r+ (h‚X TYPE_TRACEhƒ}r, (h…]hŽ]r- Unamer. ah‡]h†]h�]uh‘j� h¦]r/ h¯X TYPE_TRACEr0 …�r1 }r2 (h‚Uh‘j* ubah�jž ubj• )�r3 }r4 (h‚X,hƒ}r5 (h…]hŽ]r6 U punctuationr7 ah‡]h†]h�]uh‘j� h¦]r8 h¯X,…�r9 }r: (h‚Uh‘j3 ubah�jž ubh¯X …�r; }r< (h‚X h‘j� ubj• )�r= }r> (h‚X TRACEBUFADDRhƒ}r? (h…]hŽ]r@ UnamerA ah‡]h†]h�]uh‘j� h¦]rB h¯X TRACEBUFADDRrC …�rD }rE (h‚Uh‘j= ubah�jž ubj• )�rF }rG (h‚X,hƒ}rH (h…]hŽ]rI U punctuationrJ ah‡]h†]h�]uh‘j� h¦]rK h¯X,…�rL }rM (h‚Uh‘jF ubah�jž ubh¯X …�rN }rO (h‚X h‘j� ubj• )�rP }rQ (h‚X0x8000hƒ}rR (h…]hŽ]rS (UliteralrT UnumberrU UhexrV eh‡]h†]h�]uh‘j� h¦]rW h¯X0x8000rX …�rY }rZ (h‚Uh‘jP ubah�jž ubj• )�r[ }r\ (h‚X,hƒ}r] (h…]hŽ]r^ U punctuationr_ ah‡]h†]h�]uh‘j� h¦]r` h¯X,…�ra }rb (h‚Uh‘j[ ubah�jž ubh¯X …�rc }rd (h‚X h‘j� ubj• )�re }rf (h‚X0hƒ}rg (h…]hŽ]rh (Uliteralri Unumberrj Uintegerrk eh‡]h†]h�]uh‘j� h¦]rl h¯X0…�rm }rn (h‚Uh‘je ubah�jž ubj• )�ro }rp (h‚X,hƒ}rq (h…]hŽ]rr U punctuationrs ah‡]h†]h�]uh‘j� h¦]rt h¯X,…�ru }rv (h‚Uh‘jo ubah�jž ubh¯X …�rw }rx (h‚X h‘j� ubj• )�ry }rz (h‚X "trace:dsp"hƒ}r{ (h…]hŽ]r| (Uliteralr} Ustringr~ eh‡]h†]h�]uh‘j� h¦]r h¯X "trace:dsp"r€ …�r� }r‚ (h‚Uh‘jy ubah�jž ubj• )�rƒ }r„ (h‚X,hƒ}r… (h…]hŽ]r† U punctuationr‡ ah‡]h†]h�]uh‘j� h¦]rˆ h¯X,…�r‰ }rŠ (h‚Uh‘jƒ ubah�jž ubh¯X …�r‹ }rŒ (h‚X h‘j� ubj• )�r� }rŽ (h‚X},hƒ}r� (h…]hŽ]r� U punctuationr‘ ah‡]h†]h�]uh‘j� h¦]r’ h¯X},r“ …�r” }r• (h‚Uh‘j� ubah�jž ubh¯X r– …�r— }r˜ (h‚X h‘j� ubj• )�r™ }rš (h‚X{hƒ}r› (h…]hŽ]rœ U punctuationr� ah‡]h†]h�]uh‘j� h¦]rž h¯X{…�rŸ }r  (h‚Uh‘j™ ubah�jž ubh¯X r¡ …�r¢ }r£ (h‚X h‘j� ubj• )�r¤ }r¥ (h‚X TYPE_DEVMEMhƒ}r¦ (h…]hŽ]r§ Unamer¨ ah‡]h†]h�]uh‘j� h¦]r© h¯X TYPE_DEVMEMrª …�r« }r¬ (h‚Uh‘j¤ ubah�jž ubj• )�r­ }r® (h‚X,hƒ}r¯ (h…]hŽ]r° U punctuationr± ah‡]h†]h�]uh‘j� h¦]r² h¯X,…�r³ }r´ (h‚Uh‘j­ ubah�jž ubh¯X rµ …�r¶ }r· (h‚X h‘j� ubj• )�r¸ }r¹ (h‚XDSP_MEM_IPC_VRINGhƒ}rº (h…]hŽ]r» Unamer¼ ah‡]h†]h�]uh‘j� h¦]r½ h¯XDSP_MEM_IPC_VRINGr¾ …�r¿ }rÀ (h‚Uh‘j¸ ubah�jž ubj• )�rÁ }r (h‚X,hƒ}rà (h…]hŽ]rÄ U punctuationrÅ ah‡]h†]h�]uh‘j� h¦]rÆ h¯X,…�rÇ }rÈ (h‚Uh‘jÁ ubah�jž ubh¯X …�rÉ }rÊ (h‚X h‘j� ubj• )�rË }rÌ (h‚XPHYS_MEM_IPC_VRINGhƒ}rÍ (h…]hŽ]rÎ UnamerÏ ah‡]h†]h�]uh‘j� h¦]rÐ h¯XPHYS_MEM_IPC_VRINGrÑ …�rÒ }rÓ (h‚Uh‘jË ubah�jž ubj• )�rÔ }rÕ (h‚X,hƒ}rÖ (h…]hŽ]r× U punctuationrØ ah‡]h†]h�]uh‘j� h¦]rÙ h¯X,…�rÚ }rÛ (h‚Uh‘jÔ ubah�jž ubh¯X rÜ …�rÝ }rÞ (h‚X h‘j� ubj• )�rß }rà (h‚XDSP_MEM_IPC_VRING_SIZEhƒ}rá (h…]hŽ]râ Unamerã ah‡]h†]h�]uh‘j� h¦]rä h¯XDSP_MEM_IPC_VRING_SIZErå …�ræ }rç (h‚Uh‘jß ubah�jž ubj• )�rè }ré (h‚X,hƒ}rê (h…]hŽ]rë U punctuationrì ah‡]h†]h�]uh‘j� h¦]rí h¯X,…�rî }rï (h‚Uh‘jè ubah�jž ubh¯X …�rð }rñ (h‚X h‘j� ubj• )�rò }ró (h‚X0hƒ}rô (h…]hŽ]rõ (Uliteralrö Unumberr÷ Uintegerrø eh‡]h†]h�]uh‘j� h¦]rù h¯X0…�rú }rû (h‚Uh‘jò ubah�jž ubj• )�rü }rý (h‚X,hƒ}rþ (h…]hŽ]rÿ U punctuationr ah‡]h†]h�]uh‘j� h¦]r h¯X,…�r }r (h‚Uh‘jü ubah�jž ubh¯X …�r }r (h‚X h‘j� ubj• )�r }r (h‚X0hƒ}r (h…]hŽ]r (Uliteralr Unumberr Uintegerr eh‡]h†]h�]uh‘j� h¦]r h¯X0…�r }r (h‚Uh‘j ubah�jž ubj• )�r }r (h‚X,hƒ}r (h…]hŽ]r U punctuationr ah‡]h†]h�]uh‘j� h¦]r h¯X,…�r }r (h‚Uh‘j ubah�jž ubh¯X …�r }r (h‚X h‘j� ubj• )�r }r (h‚X"DSP_MEM_IPC_VRING"hƒ}r (h…]hŽ]r (Uliteralr Ustringr eh‡]h†]h�]uh‘j� h¦]r h¯X"DSP_MEM_IPC_VRING"r! …�r" }r# (h‚Uh‘j ubah�jž ubj• )�r$ }r% (h‚X,hƒ}r& (h…]hŽ]r' U punctuationr( ah‡]h†]h�]uh‘j� h¦]r) h¯X,…�r* }r+ (h‚Uh‘j$ ubah�jž ubh¯X …�r, }r- (h‚X h‘j� ubj• )�r. }r/ (h‚X},hƒ}r0 (h…]hŽ]r1 U punctuationr2 ah‡]h†]h�]uh‘j� h¦]r3 h¯X},r4 …�r5 }r6 (h‚Uh‘j. ubah�jž ubeubhÜ)�r7 }r8 (h‚XJLet's have a look at some of these to understand them better. For example:r9 h‘jÏhœjáh�hàhƒ}r: (h…]hŽ]h‡]h†]h�]uh¤MDh¥hh¦]r; h¯XJLet's have a look at some of these to understand them better. For example:r< …�r= }r> (h‚j9 h‘j7 ubaubj¡)�r? }r@ (h‚XY{ TYPE_CARVEOUT, DSP_MEM_TEXT, 0, DSP_MEM_TEXT_SIZE, 0, 0, "DSP_MEM_TEXT", },h‘jÏhœjáh�j¤hƒ}rA (jt‰juXchÊhËh†]h‡]h…]jv}hŽ]h�]uh¤MGh¥hh¦]rB h¯XY{ TYPE_CARVEOUT, DSP_MEM_TEXT, 0, DSP_MEM_TEXT_SIZE, 0, 0, "DSP_MEM_TEXT", },rC …�rD }rE (h‚Uh‘j? ubaubhÜ)�rF }rG (h‚XKey points to note are:rH h‘jÏhœjáh�hàhƒ}rI (h…]hŽ]h‡]h†]h�]uh¤MOh¥hh¦]rJ h¯XKey points to note are:rK …�rL }rM (h‚jH h‘jF ubaubj6)�rN }rO (h‚Uh‘jÏhœjáh�j9hƒ}rP (j;U.h†]h‡]h…]j<UhŽ]h�]j=j>uh¤MQh¥hh¦]rQ (j@)�rR }rS (h‚XrThe "TYPE\_CARVEOUT" indicates that the physical memory backing this entry will come from the associated CMA pool.h‘jN hœjáh�jChƒ}rT (h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rU hÜ)�rV }rW (h‚XrThe "TYPE\_CARVEOUT" indicates that the physical memory backing this entry will come from the associated CMA pool.h‘jR hœjáh�hàhƒ}rX (h…]hŽ]h‡]h†]h�]uh¤MQh¦]rY h¯XqThe "TYPE_CARVEOUT" indicates that the physical memory backing this entry will come from the associated CMA pool.rZ …�r[ }r\ (h‚XrThe "TYPE\_CARVEOUT" indicates that the physical memory backing this entry will come from the associated CMA pool.h‘jV ubaubaubj@)�r] }r^ (h‚XDSP\_MEM\_TEXT is a #define earlier in the code providing the address for the code section. It is 0x95000000 by default. **This must correspond to a section from your DSP linker command file, i.e. EXT\_CODE (or whatever name you choose to give it) must be linked to the same address.**h‘jN hœjáh�jChƒ}r_ (h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r` hÜ)�ra }rb (h‚XDSP\_MEM\_TEXT is a #define earlier in the code providing the address for the code section. It is 0x95000000 by default. **This must correspond to a section from your DSP linker command file, i.e. EXT\_CODE (or whatever name you choose to give it) must be linked to the same address.**h‘j] hœjáh�hàhƒ}rc (h…]hŽ]h‡]h†]h�]uh¤MSh¦]rd (h¯XwDSP_MEM_TEXT is a #define earlier in the code providing the address for the code section. It is 0x95000000 by default. re …�rf }rg (h‚XyDSP\_MEM\_TEXT is a #define earlier in the code providing the address for the code section. It is 0x95000000 by default. h‘ja ubj¯)�rh }ri (h‚X¤**This must correspond to a section from your DSP linker command file, i.e. EXT\_CODE (or whatever name you choose to give it) must be linked to the same address.**hƒ}rj (h…]hŽ]h‡]h†]h�]uh‘ja h¦]rk h¯XŸThis must correspond to a section from your DSP linker command file, i.e. EXT_CODE (or whatever name you choose to give it) must be linked to the same address.rl …�rm }rn (h‚Uh‘jh ubah�j·ubeubaubj@)�ro }rp (h‚XëDSP\_MEM\_TEXT\_SIZE is the size of the MMU pagetable entry being created (1MB in this particular instance). **The actual amount of linked code in the corresponding section of your executable must be less than or equal to this size.** h‘jN hœjáh�jChƒ}rq (h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rr hÜ)�rs }rt (h‚XêDSP\_MEM\_TEXT\_SIZE is the size of the MMU pagetable entry being created (1MB in this particular instance). **The actual amount of linked code in the corresponding section of your executable must be less than or equal to this size.**h‘jo hœjáh�hàhƒ}ru (h…]hŽ]h‡]h†]h�]uh¤MXh¦]rv (h¯XjDSP_MEM_TEXT_SIZE is the size of the MMU pagetable entry being created (1MB in this particular instance). rw …�rx }ry (h‚XmDSP\_MEM\_TEXT\_SIZE is the size of the MMU pagetable entry being created (1MB in this particular instance). h‘js ubj¯)�rz }r{ (h‚X}**The actual amount of linked code in the corresponding section of your executable must be less than or equal to this size.**hƒ}r| (h…]hŽ]h‡]h†]h�]uh‘js h¦]r} h¯XyThe actual amount of linked code in the corresponding section of your executable must be less than or equal to this size.r~ …�r }r€ (h‚Uh‘jz ubah�j·ubeubaubeubhÜ)�r� }r‚ (h‚XLet's take another:rƒ h‘jÏhœjáh�hàhƒ}r„ (h…]hŽ]h‡]h†]h�]uh¤M]h¥hh¦]r… h¯XLet's take another:r† …�r‡ }rˆ (h‚jƒ h‘j� ubaubj¡)�r‰ }rŠ (h‚X:{ TYPE_TRACE, TRACEBUFADDR, 0x8000, 0, "trace:dsp", },h‘jÏhœjáh�j¤hƒ}r‹ (jt‰juXchÊhËh†]h‡]h…]jv}hŽ]h�]uh¤M_h¥hh¦]rŒ h¯X:{ TYPE_TRACE, TRACEBUFADDR, 0x8000, 0, "trace:dsp", },r� …�rŽ }r� (h‚Uh‘j‰ ubaubhþ)�r� }r‘ (h‚Uh‘jÏhœjáh�jhƒ}r’ (h…]hŽ]h‡]h†]h�]uh¤Meh¥hh¦]r“ j)�r” }r• (h‚UjKh‘j� hœjáh�h¤hƒ}r– (h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�r— }r˜ (h‚XKey points are:r™ h‘jÏhœjáh�hàhƒ}rš (h…]hŽ]h‡]h†]h�]uh¤Mgh¥hh¦]r› h¯XKey points are:rœ …�r� }rž (h‚j™ h‘j— ubaubj6)�rŸ }r  (h‚Uh‘jÏhœjáh�j9hƒ}r¡ (j;U.h†]h‡]h…]j<UhŽ]h�]j=j>uh¤Mih¥hh¦]r¢ (j@)�r£ }r¤ (h‚X3The "TYPE\_TRACE" indicates this is for trace info.r¥ h‘jŸ hœjáh�jChƒ}r¦ (h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r§ hÜ)�r¨ }r© (h‚j¥ h‘j£ hœjáh�hàhƒ}rª (h…]hŽ]h‡]h†]h�]uh¤Mih¦]r« h¯X2The "TYPE_TRACE" indicates this is for trace info.r¬ …�r­ }r® (h‚X3The "TYPE\_TRACE" indicates this is for trace info.h‘j¨ ubaubaubj@)�r¯ }r° (h‚XªThe TRACEBUFADDR is defined earlier in the file as &ti\_trace\_SysMin\_Module\_State\_0\_outbuf\_\_A. That corresponds to the symbol used in TI-RTOS for the trace buffer.h‘jŸ hœjáh�jChƒ}r± (h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r² hÜ)�r³ }r´ (h‚XªThe TRACEBUFADDR is defined earlier in the file as &ti\_trace\_SysMin\_Module\_State\_0\_outbuf\_\_A. That corresponds to the symbol used in TI-RTOS for the trace buffer.h‘j¯ hœjáh�hàhƒ}rµ (h…]hŽ]h‡]h†]h�]uh¤Mjh¦]r¶ h¯X¢The TRACEBUFADDR is defined earlier in the file as &ti_trace_SysMin_Module_State_0_outbuf__A. That corresponds to the symbol used in TI-RTOS for the trace buffer.r· …�r¸ }r¹ (h‚XªThe TRACEBUFADDR is defined earlier in the file as &ti\_trace\_SysMin\_Module\_State\_0\_outbuf\_\_A. That corresponds to the symbol used in TI-RTOS for the trace buffer.h‘j³ ubaubaubj@)�rº }r» (h‚X¤The "0x8000" is the size of the MMU mapping. The corresponding size in the cfg file should be the same (or less). It looks like this: ``SysMin.bufSize = 0x8000;`` h‘jŸ hœjáh�jChƒ}r¼ (h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r½ hÜ)�r¾ }r¿ (h‚X£The "0x8000" is the size of the MMU mapping. The corresponding size in the cfg file should be the same (or less). It looks like this: ``SysMin.bufSize = 0x8000;``h‘jº hœjáh�hàhƒ}rÀ (h…]hŽ]h‡]h†]h�]uh¤Mmh¦]rÁ (h¯X†The "0x8000" is the size of the MMU mapping. The corresponding size in the cfg file should be the same (or less). It looks like this: r …�rà }rÄ (h‚X†The "0x8000" is the size of the MMU mapping. The corresponding size in the cfg file should be the same (or less). It looks like this: h‘j¾ ubcdocutils.nodes literal rÅ )�rÆ }rÇ (h‚X``SysMin.bufSize = 0x8000;``hƒ}rÈ (h…]hŽ]h‡]h†]h�]uh‘j¾ h¦]rÉ h¯XSysMin.bufSize = 0x8000;rÊ …�rË }rÌ (h‚Uh‘jÆ ubah�UliteralrÍ ubeubaubeubhÜ)�rÎ }rÏ (h‚X.Finally, let's look at a TYPE\_DEVMEM example:rÐ h‘jÏhœjáh�hàhƒ}rÑ (h…]hŽ]h‡]h†]h�]uh¤Mqh¥hh¦]rÒ h¯X-Finally, let's look at a TYPE_DEVMEM example:rÓ …�rÔ }rÕ (h‚X.Finally, let's look at a TYPE\_DEVMEM example:h‘jÎ ubaubj¡)�rÖ }r× (h‚Xn{ TYPE_DEVMEM, DSP_PERIPHERAL_L4CFG, L4_PERIPHERAL_L4CFG, SZ_16M, 0, 0, "DSP_PERIPHERAL_L4CFG", },h‘jÏhœjáh�j¤hƒ}rØ (jt‰juXchÊhËh†]h‡]h…]jv}hŽ]h�]uh¤Msh¥hh¦]rÙ h¯Xn{ TYPE_DEVMEM, DSP_PERIPHERAL_L4CFG, L4_PERIPHERAL_L4CFG, SZ_16M, 0, 0, "DSP_PERIPHERAL_L4CFG", },rÚ …�rÛ }rÜ (h‚Uh‘jÖ ubaubhþ)�rÝ }rÞ (h‚Uh‘jÏhœjáh�jhƒ}rß (h…]hŽ]h‡]h†]h�]uh¤M{h¥hh¦]rà j)�rá }râ (h‚UjKh‘jÝ hœjáh�h¤hƒ}rã (h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�rä }rå (h‚X Key points:ræ h‘jÏhœjáh�hàhƒ}rç (h…]hŽ]h‡]h†]h�]uh¤M}h¥hh¦]rè h¯X Key points:ré …�rê }rë (h‚jæ h‘jä ubaubj6)�rì }rí (h‚Uh‘jÏhœjáh�j9hƒ}rî (j;U.h†]h‡]h…]j<UhŽ]h�]j=j>uh¤Mh¥hh¦]rï (j@)�rð }rñ (h‚XÉThe "TYPE\_DEVMEM" indicates that we are making an MMU mapping, but this **does not come from the CMA pool**. This is intended for mapping peripherals, etc. that already exist in the device memory map.h‘jì hœjáh�jChƒ}rò (h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]ró hÜ)�rô }rõ (h‚XÉThe "TYPE\_DEVMEM" indicates that we are making an MMU mapping, but this **does not come from the CMA pool**. This is intended for mapping peripherals, etc. that already exist in the device memory map.h‘jð hœjáh�hàhƒ}rö (h…]hŽ]h‡]h†]h�]uh¤Mh¦]r÷ (h¯XHThe "TYPE_DEVMEM" indicates that we are making an MMU mapping, but this rø …�rù }rú (h‚XIThe "TYPE\_DEVMEM" indicates that we are making an MMU mapping, but this h‘jô ubj¯)�rû }rü (h‚X#**does not come from the CMA pool**hƒ}rý (h…]hŽ]h‡]h†]h�]uh‘jô h¦]rþ h¯Xdoes not come from the CMA poolrÿ …�r}r(h‚Uh‘jû ubah�j·ubh¯X]. This is intended for mapping peripherals, etc. that already exist in the device memory map.r…�r}r(h‚X]. This is intended for mapping peripherals, etc. that already exist in the device memory map.h‘jô ubeubaubj@)�r}r(h‚XòDSP\_PERIPHERAL\_L4CFG (0x4A000000) is the virtual address while L4\_PERIPHERAL\_L4CFG (0x4A000000) is the physical address. **This is an identity mapping, meaning that peripherals can be referenced by the DSP using their physical address.** h‘jì hœjáh�jChƒ}r(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rhÜ)�r }r (h‚XñDSP\_PERIPHERAL\_L4CFG (0x4A000000) is the virtual address while L4\_PERIPHERAL\_L4CFG (0x4A000000) is the physical address. **This is an identity mapping, meaning that peripherals can be referenced by the DSP using their physical address.**h‘jhœjáh�hàhƒ}r (h…]hŽ]h‡]h†]h�]uh¤M‚h¦]r (h¯XyDSP_PERIPHERAL_L4CFG (0x4A000000) is the virtual address while L4_PERIPHERAL_L4CFG (0x4A000000) is the physical address. r …�r}r(h‚X}DSP\_PERIPHERAL\_L4CFG (0x4A000000) is the virtual address while L4\_PERIPHERAL\_L4CFG (0x4A000000) is the physical address. h‘j ubj¯)�r}r(h‚Xt**This is an identity mapping, meaning that peripherals can be referenced by the DSP using their physical address.**hƒ}r(h…]hŽ]h‡]h†]h�]uh‘j h¦]rh¯XpThis is an identity mapping, meaning that peripherals can be referenced by the DSP using their physical address.r…�r}r(h‚Uh‘jubah�j·ubeubaubeubh’)�r}r(h‚XDSP Access to Peripheralsrh‘jÏhœjáh�hÓhƒ}r(h†]rUdsp-access-to-peripheralsrah‡]h…]hŽ]h�]rhauh¤Nh¥hh¦]rh¯XDSP Access to Peripheralsr…�r }r!(h‚jh‘jubaubhÜ)�r"}r#(h‚X:The default resource table creates the following mappings:r$h‘jÏhœjáh�hàhƒ}r%(h…]hŽ]h‡]h†]h�]uh¤MŠh¥hh¦]r&h¯X:The default resource table creates the following mappings:r'…�r(}r)(h‚j$h‘j"ubaubjB)�r*}r+(h‚Uh‘jÏhœjáh�jEhƒ}r,(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r-jH)�r.}r/(h‚Uhƒ}r0(h†]h‡]h…]hŽ]h�]UcolsKuh‘j*h¦]r1(jM)�r2}r3(h‚Uhƒ}r4(h†]h‡]h…]hŽ]h�]UcolwidthKuh‘j.h¦]h�jQubjM)�r5}r6(h‚Uhƒ}r7(h†]h‡]h…]hŽ]h�]UcolwidthKuh‘j.h¦]h�jQubjM)�r8}r9(h‚Uhƒ}r:(h†]h‡]h…]hŽ]h�]UcolwidthK uh‘j.h¦]h�jQubjM)�r;}r<(h‚Uhƒ}r=(h†]h‡]h…]hŽ]h�]UcolwidthKuh‘j.h¦]h�jQubjX)�r>}r?(h‚Uhƒ}r@(h…]hŽ]h‡]h†]h�]uh‘j.h¦]rAj])�rB}rC(h‚Uhƒ}rD(h…]hŽ]h‡]h†]h�]uh‘j>h¦]rE(jb)�rF}rG(h‚Uhƒ}rH(h…]hŽ]h‡]h†]h�]uh‘jBh¦]rIhÜ)�rJ}rK(h‚XVirtual AddressrLh‘jFhœjáh�hàhƒ}rM(h…]hŽ]h‡]h†]h�]uh¤M�h¦]rNh¯XVirtual AddressrO…�rP}rQ(h‚jLh‘jJubaubah�joubjb)�rR}rS(h‚Uhƒ}rT(h…]hŽ]h‡]h†]h�]uh‘jBh¦]rUhÜ)�rV}rW(h‚XPhysical AddressrXh‘jRhœjáh�hàhƒ}rY(h…]hŽ]h‡]h†]h�]uh¤M�h¦]rZh¯XPhysical Addressr[…�r\}r](h‚jXh‘jVubaubah�joubjb)�r^}r_(h‚Uhƒ}r`(h…]hŽ]h‡]h†]h�]uh‘jBh¦]rahÜ)�rb}rc(h‚XSizerdh‘j^hœjáh�hàhƒ}re(h…]hŽ]h‡]h†]h�]uh¤M�h¦]rfh¯XSizerg…�rh}ri(h‚jdh‘jbubaubah�joubjb)�rj}rk(h‚Uhƒ}rl(h…]hŽ]h‡]h†]h�]uh‘jBh¦]rmhÜ)�rn}ro(h‚XCommentrph‘jjhœjáh�hàhƒ}rq(h…]hŽ]h‡]h†]h�]uh¤M�h¦]rrh¯XCommentrs…�rt}ru(h‚jph‘jnubaubah�joubeh�jˆubah�j‰ubjŠ)�rv}rw(h‚Uhƒ}rx(h…]hŽ]h‡]h†]h�]uh‘j.h¦]ry(j])�rz}r{(h‚Uhƒ}r|(h…]hŽ]h‡]h†]h�]uh‘jvh¦]r}(jb)�r~}r(h‚Uhƒ}r€(h…]hŽ]h‡]h†]h�]uh‘jzh¦]r�hÜ)�r‚}rƒ(h‚X 0x4A000000r„h‘j~hœjáh�hàhƒ}r…(h…]hŽ]h‡]h†]h�]uh¤M�h¦]r†h¯X 0x4A000000r‡…�rˆ}r‰(h‚j„h‘j‚ubaubah�joubjb)�rŠ}r‹(h‚Uhƒ}rŒ(h…]hŽ]h‡]h†]h�]uh‘jzh¦]r�hÜ)�rŽ}r�(h‚X 0x4A000000r�h‘jŠhœjáh�hàhƒ}r‘(h…]hŽ]h‡]h†]h�]uh¤M�h¦]r’h¯X 0x4A000000r“…�r”}r•(h‚j�h‘jŽubaubah�joubjb)�r–}r—(h‚Uhƒ}r˜(h…]hŽ]h‡]h†]h�]uh‘jzh¦]r™hÜ)�rš}r›(h‚X16 MBrœh‘j–hœjáh�hàhƒ}r�(h…]hŽ]h‡]h†]h�]uh¤M�h¦]ržh¯X16 MBrŸ…�r }r¡(h‚jœh‘jšubaubah�joubjb)�r¢}r£(h‚Uhƒ}r¤(h…]hŽ]h‡]h†]h�]uh‘jzh¦]r¥hÜ)�r¦}r§(h‚XL4CFG + L4WKUPr¨h‘j¢hœjáh�hàhƒ}r©(h…]hŽ]h‡]h†]h�]uh¤M�h¦]rªh¯XL4CFG + L4WKUPr«…�r¬}r­(h‚j¨h‘j¦ubaubah�joubeh�jˆubj])�r®}r¯(h‚Uhƒ}r°(h…]hŽ]h‡]h†]h�]uh‘jvh¦]r±(jb)�r²}r³(h‚Uhƒ}r´(h…]hŽ]h‡]h†]h�]uh‘j®h¦]rµhÜ)�r¶}r·(h‚X 0x48000000r¸h‘j²hœjáh�hàhƒ}r¹(h…]hŽ]h‡]h†]h�]uh¤M‘h¦]rºh¯X 0x48000000r»…�r¼}r½(h‚j¸h‘j¶ubaubah�joubjb)�r¾}r¿(h‚Uhƒ}rÀ(h…]hŽ]h‡]h†]h�]uh‘j®h¦]rÁhÜ)�rÂ}rÃ(h‚X 0x48000000rÄh‘j¾hœjáh�hàhƒ}rÅ(h…]hŽ]h‡]h†]h�]uh¤M‘h¦]rÆh¯X 0x48000000rÇ…�rÈ}rÉ(h‚jÄh‘jÂubaubah�joubjb)�rÊ}rË(h‚Uhƒ}rÌ(h…]hŽ]h‡]h†]h�]uh‘j®h¦]rÍhÜ)�rÎ}rÏ(h‚X2 MBrÐh‘jÊhœjáh�hàhƒ}rÑ(h…]hŽ]h‡]h†]h�]uh¤M‘h¦]rÒh¯X2 MBrÓ…�rÔ}rÕ(h‚jÐh‘jÎubaubah�joubjb)�rÖ}r×(h‚Uhƒ}rØ(h…]hŽ]h‡]h†]h�]uh‘j®h¦]rÙhÜ)�rÚ}rÛ(h‚XL4PER1rÜh‘jÖhœjáh�hàhƒ}rÝ(h…]hŽ]h‡]h†]h�]uh¤M‘h¦]rÞh¯XL4PER1rß…�rà}rá(h‚jÜh‘jÚubaubah�joubeh�jˆubj])�râ}rã(h‚Uhƒ}rä(h…]hŽ]h‡]h†]h�]uh‘jvh¦]rå(jb)�ræ}rç(h‚Uhƒ}rè(h…]hŽ]h‡]h†]h�]uh‘jâh¦]réhÜ)�rê}rë(h‚X 0x48400000rìh‘jæhœjáh�hàhƒ}rí(h…]hŽ]h‡]h†]h�]uh¤M“h¦]rîh¯X 0x48400000rï…�rð}rñ(h‚jìh‘jêubaubah�joubjb)�rò}ró(h‚Uhƒ}rô(h…]hŽ]h‡]h†]h�]uh‘jâh¦]rõhÜ)�rö}r÷(h‚X 0x48400000røh‘jòhœjáh�hàhƒ}rù(h…]hŽ]h‡]h†]h�]uh¤M“h¦]rúh¯X 0x48400000rû…�rü}rý(h‚jøh‘jöubaubah�joubjb)�rþ}rÿ(h‚Uhƒ}r(h…]hŽ]h‡]h†]h�]uh‘jâh¦]rhÜ)�r}r(h‚X4 MBrh‘jþhœjáh�hàhƒ}r(h…]hŽ]h‡]h†]h�]uh¤M“h¦]rh¯X4 MBr…�r}r (h‚jh‘jubaubah�joubjb)�r }r (h‚Uhƒ}r (h…]hŽ]h‡]h†]h�]uh‘jâh¦]r hÜ)�r}r(h‚XL4PER2rh‘j hœjáh�hàhƒ}r(h…]hŽ]h‡]h†]h�]uh¤M“h¦]rh¯XL4PER2r…�r}r(h‚jh‘jubaubah�joubeh�jˆubj])�r}r(h‚Uhƒ}r(h…]hŽ]h‡]h†]h�]uh‘jvh¦]r(jb)�r}r(h‚Uhƒ}r(h…]hŽ]h‡]h†]h�]uh‘jh¦]rhÜ)�r}r(h‚X 0x48800000r h‘jhœjáh�hàhƒ}r!(h…]hŽ]h‡]h†]h�]uh¤M•h¦]r"h¯X 0x48800000r#…�r$}r%(h‚j h‘jubaubah�joubjb)�r&}r'(h‚Uhƒ}r((h…]hŽ]h‡]h†]h�]uh‘jh¦]r)hÜ)�r*}r+(h‚X 0x48800000r,h‘j&hœjáh�hàhƒ}r-(h…]hŽ]h‡]h†]h�]uh¤M•h¦]r.h¯X 0x48800000r/…�r0}r1(h‚j,h‘j*ubaubah�joubjb)�r2}r3(h‚Uhƒ}r4(h…]hŽ]h‡]h†]h�]uh‘jh¦]r5hÜ)�r6}r7(h‚X8 MBr8h‘j2hœjáh�hàhƒ}r9(h…]hŽ]h‡]h†]h�]uh¤M•h¦]r:h¯X8 MBr;…�r<}r=(h‚j8h‘j6ubaubah�joubjb)�r>}r?(h‚Uhƒ}r@(h…]hŽ]h‡]h†]h�]uh‘jh¦]rAhÜ)�rB}rC(h‚XL4PER3rDh‘j>hœjáh�hàhƒ}rE(h…]hŽ]h‡]h†]h�]uh¤M•h¦]rFh¯XL4PER3rG…�rH}rI(h‚jDh‘jBubaubah�joubeh�jˆubj])�rJ}rK(h‚Uhƒ}rL(h…]hŽ]h‡]h†]h�]uh‘jvh¦]rM(jb)�rN}rO(h‚Uhƒ}rP(h…]hŽ]h‡]h†]h�]uh‘jJh¦]rQhÜ)�rR}rS(h‚X 0x54000000rTh‘jNhœjáh�hàhƒ}rU(h…]hŽ]h‡]h†]h�]uh¤M—h¦]rVh¯X 0x54000000rW…�rX}rY(h‚jTh‘jRubaubah�joubjb)�rZ}r[(h‚Uhƒ}r\(h…]hŽ]h‡]h†]h�]uh‘jJh¦]r]hÜ)�r^}r_(h‚X 0x54000000r`h‘jZhœjáh�hàhƒ}ra(h…]hŽ]h‡]h†]h�]uh¤M—h¦]rbh¯X 0x54000000rc…�rd}re(h‚j`h‘j^ubaubah�joubjb)�rf}rg(h‚Uhƒ}rh(h…]hŽ]h‡]h†]h�]uh‘jJh¦]rihÜ)�rj}rk(h‚X16 MBrlh‘jfhœjáh�hàhƒ}rm(h…]hŽ]h‡]h†]h�]uh¤M—h¦]rnh¯X16 MBro…�rp}rq(h‚jlh‘jjubaubah�joubjb)�rr}rs(h‚Uhƒ}rt(h…]hŽ]h‡]h†]h�]uh‘jJh¦]ruhÜ)�rv}rw(h‚XL3\_INSTR + CT\_TBRh‘jrhœjáh�hàhƒ}rx(h…]hŽ]h‡]h†]h�]uh¤M—h¦]ryh¯XL3_INSTR + CT_TBRrz…�r{}r|(h‚XL3\_INSTR + CT\_TBRh‘jvubaubah�joubeh�jˆubj])�r}}r~(h‚Uhƒ}r(h…]hŽ]h‡]h†]h�]uh‘jvh¦]r€(jb)�r�}r‚(h‚Uhƒ}rƒ(h…]hŽ]h‡]h†]h�]uh‘j}h¦]r„hÜ)�r…}r†(h‚X 0x4E000000r‡h‘j�hœjáh�hàhƒ}rˆ(h…]hŽ]h‡]h†]h�]uh¤M™h¦]r‰h¯X 0x4E000000rŠ…�r‹}rŒ(h‚j‡h‘j…ubaubah�joubjb)�r�}rŽ(h‚Uhƒ}r�(h…]hŽ]h‡]h†]h�]uh‘j}h¦]r�hÜ)�r‘}r’(h‚X 0x4E000000r“h‘j�hœjáh�hàhƒ}r”(h…]hŽ]h‡]h†]h�]uh¤M™h¦]r•h¯X 0x4E000000r–…�r—}r˜(h‚j“h‘j‘ubaubah�joubjb)�r™}rš(h‚Uhƒ}r›(h…]hŽ]h‡]h†]h�]uh‘j}h¦]rœhÜ)�r�}rž(h‚X1 MBrŸh‘j™hœjáh�hàhƒ}r (h…]hŽ]h‡]h†]h�]uh¤M™h¦]r¡h¯X1 MBr¢…�r£}r¤(h‚jŸh‘j�ubaubah�joubjb)�r¥}r¦(h‚Uhƒ}r§(h…]hŽ]h‡]h†]h�]uh‘j}h¦]r¨hÜ)�r©}rª(h‚X DMM configr«h‘j¥hœjáh�hàhƒ}r¬(h…]hŽ]h‡]h†]h�]uh¤M™h¦]r­h¯X DMM configr®…�r¯}r°(h‚j«h‘j©ubaubah�joubeh�jˆubeh�jWubeh�jXubaubhÜ)�r±}r²(h‚XmIn other words, the peripherals can be accessed at their physical addresses since we use an identity mapping.r³h‘jÏhœjáh�hàhƒ}r´(h…]hŽ]h‡]h†]h�]uh¤Mœh¥hh¦]rµh¯XmIn other words, the peripherals can be accessed at their physical addresses since we use an identity mapping.r¶…�r·}r¸(h‚j³h‘j±ubaubh’)�r¹}rº(h‚X0Inspecting the DSP IOMMU Page Tables at Run-Timer»h‘jÏhœjáh�hÓhƒ}r¼(h†]r½U0inspecting-the-dsp-iommu-page-tables-at-run-timer¾ah‡]h…]hŽ]h�]r¿hCauh¤Nh¥hh¦]rÀh¯X0Inspecting the DSP IOMMU Page Tables at Run-TimerÁ…�rÂ}rÃ(h‚j»h‘j¹ubaubhÜ)�rÄ}rÅ(h‚XCYou can dump the DSP IOMMU page tables with the following commands:rÆh‘jÏhœjáh�hàhƒ}rÇ(h…]hŽ]h‡]h†]h�]uh¤M¢h¥hh¦]rÈh¯XCYou can dump the DSP IOMMU page tables with the following commands:rÉ…�rÊ}rË(h‚jÆh‘jÄubaubjB)�rÌ}rÍ(h‚Uh‘jÏhœjáh�jEhƒ}rÎ(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rÏjH)�rÐ}rÑ(h‚Uhƒ}rÒ(h†]h‡]h…]hŽ]h�]UcolsKuh‘jÌh¦]rÓ(jM)�rÔ}rÕ(h‚Uhƒ}rÖ(h†]h‡]h…]hŽ]h�]UcolwidthKuh‘jÐh¦]h�jQubjM)�r×}rØ(h‚Uhƒ}rÙ(h†]h‡]h…]hŽ]h�]UcolwidthKuh‘jÐh¦]h�jQubjM)�rÚ}rÛ(h‚Uhƒ}rÜ(h†]h‡]h…]hŽ]h�]UcolwidthKh‘j8hœjáh�hàhƒ}r?(h…]hŽ]h‡]h†]h�]uh¤M©h¦]r@h¯XDSP1rA…�rB}rC(h‚j>h‘j<ubaubah�joubjb)�rD}rE(h‚Uhƒ}rF(h…]hŽ]h‡]h†]h�]uh‘j4h¦]rGhÜ)�rH}rI(h‚XMMU1rJh‘jDhœjáh�hàhƒ}rK(h…]hŽ]h‡]h†]h�]uh¤M©h¦]rLh¯XMMU1rM…�rN}rO(h‚jJh‘jHubaubah�joubjb)�rP}rQ(h‚Uhƒ}rR(h…]hŽ]h‡]h†]h�]uh‘j4h¦]rShÜ)�rT}rU(h‚X8cat /sys/kernel/debug/omap\_iommu/40d02000.mmu/pagetableh‘jPhœjáh�hàhƒ}rV(h…]hŽ]h‡]h†]h�]uh¤M©h¦]rWh¯X7cat /sys/kernel/debug/omap_iommu/40d02000.mmu/pagetablerX…�rY}rZ(h‚X8cat /sys/kernel/debug/omap\_iommu/40d02000.mmu/pagetableh‘jTubaubah�joubeh�jˆubj])�r[}r\(h‚Uhƒ}r](h…]hŽ]h‡]h†]h�]uh‘j h¦]r^(jb)�r_}r`(h‚Uhƒ}ra(h…]hŽ]h‡]h†]h�]uh‘j[h¦]rbhÜ)�rc}rd(h‚XDSP2reh‘j_hœjáh�hàhƒ}rf(h…]hŽ]h‡]h†]h�]uh¤M«h¦]rgh¯XDSP2rh…�ri}rj(h‚jeh‘jcubaubah�joubjb)�rk}rl(h‚Uhƒ}rm(h…]hŽ]h‡]h†]h�]uh‘j[h¦]rnhÜ)�ro}rp(h‚XMMU0rqh‘jkhœjáh�hàhƒ}rr(h…]hŽ]h‡]h†]h�]uh¤M«h¦]rsh¯XMMU0rt…�ru}rv(h‚jqh‘joubaubah�joubjb)�rw}rx(h‚Uhƒ}ry(h…]hŽ]h‡]h†]h�]uh‘j[h¦]rzhÜ)�r{}r|(h‚X8cat /sys/kernel/debug/omap\_iommu/41501000.mmu/pagetableh‘jwhœjáh�hàhƒ}r}(h…]hŽ]h‡]h†]h�]uh¤M«h¦]r~h¯X7cat /sys/kernel/debug/omap_iommu/41501000.mmu/pagetabler…�r€}r�(h‚X8cat /sys/kernel/debug/omap\_iommu/41501000.mmu/pagetableh‘j{ubaubah�joubeh�jˆubj])�r‚}rƒ(h‚Uhƒ}r„(h…]hŽ]h‡]h†]h�]uh‘j h¦]r…(jb)�r†}r‡(h‚Uhƒ}rˆ(h…]hŽ]h‡]h†]h�]uh‘j‚h¦]r‰hÜ)�rŠ}r‹(h‚XDSP2rŒh‘j†hœjáh�hàhƒ}r�(h…]hŽ]h‡]h†]h�]uh¤M­h¦]rŽh¯XDSP2r�…�r�}r‘(h‚jŒh‘jŠubaubah�joubjb)�r’}r“(h‚Uhƒ}r”(h…]hŽ]h‡]h†]h�]uh‘j‚h¦]r•hÜ)�r–}r—(h‚XMMU1r˜h‘j’hœjáh�hàhƒ}r™(h…]hŽ]h‡]h†]h�]uh¤M­h¦]ršh¯XMMU1r›…�rœ}r�(h‚j˜h‘j–ubaubah�joubjb)�rž}rŸ(h‚Uhƒ}r (h…]hŽ]h‡]h†]h�]uh‘j‚h¦]r¡hÜ)�r¢}r£(h‚X8cat /sys/kernel/debug/omap\_iommu/41502000.mmu/pagetableh‘jžhœjáh�hàhƒ}r¤(h…]hŽ]h‡]h†]h�]uh¤M­h¦]r¥h¯X7cat /sys/kernel/debug/omap_iommu/41502000.mmu/pagetabler¦…�r§}r¨(h‚X8cat /sys/kernel/debug/omap\_iommu/41502000.mmu/pagetableh‘j¢ubaubah�joubeh�jˆubeh�jWubeh�jXubaubhÜ)�r©}rª(h‚X In general, MMU0 and MMU1 are being programmed identically so you really only need to take a look at one or the other to understand the mapping for a given DSP.r«h‘jÏhœjáh�hàhƒ}r¬(h…]hŽ]h‡]h†]h�]uh¤M°h¥hh¦]r­h¯X In general, MMU0 and MMU1 are being programmed identically so you really only need to take a look at one or the other to understand the mapping for a given DSP.r®…�r¯}r°(h‚j«h‘j©ubaubhÜ)�r±}r²(h‚X For example:r³h‘jÏhœjáh�hàhƒ}r´(h…]hŽ]h‡]h†]h�]uh¤M´h¥hh¦]rµh¯X For example:r¶…�r·}r¸(h‚j³h‘j±ubaubj¡)�r¹}rº(h‚Xhroot@am57xx-evm:~# cat /sys/kernel/debug/omap_iommu/40d01000.mmu/pagetable L: da: pte: -------------------------- 1: 0x48000000 0x48000002 1: 0x48100000 0x48100002 1: 0x48400000 0x48400002 1: 0x48500000 0x48500002 1: 0x48600000 0x48600002 1: 0x48700000 0x48700002 1: 0x48800000 0x48800002 1: 0x48900000 0x48900002 1: 0x48a00000 0x48a00002 1: 0x48b00000 0x48b00002 1: 0x48c00000 0x48c00002 1: 0x48d00000 0x48d00002 1: 0x48e00000 0x48e00002 1: 0x48f00000 0x48f00002 1: 0x4a000000 0x4a040002 1: 0x4a100000 0x4a040002 1: 0x4a200000 0x4a040002 1: 0x4a300000 0x4a040002 1: 0x4a400000 0x4a040002 1: 0x4a500000 0x4a040002 1: 0x4a600000 0x4a040002 1: 0x4a700000 0x4a040002 1: 0x4a800000 0x4a040002 1: 0x4a900000 0x4a040002 1: 0x4aa00000 0x4a040002 1: 0x4ab00000 0x4a040002 1: 0x4ac00000 0x4a040002 1: 0x4ad00000 0x4a040002 1: 0x4ae00000 0x4a040002 1: 0x4af00000 0x4a040002h‘jÏhœjáh�j¤hƒ}r»(hÊhËh†]h‡]h…]hŽ]h�]uh¤Mzh¥hh¦]r¼h¯Xhroot@am57xx-evm:~# cat /sys/kernel/debug/omap_iommu/40d01000.mmu/pagetable L: da: pte: -------------------------- 1: 0x48000000 0x48000002 1: 0x48100000 0x48100002 1: 0x48400000 0x48400002 1: 0x48500000 0x48500002 1: 0x48600000 0x48600002 1: 0x48700000 0x48700002 1: 0x48800000 0x48800002 1: 0x48900000 0x48900002 1: 0x48a00000 0x48a00002 1: 0x48b00000 0x48b00002 1: 0x48c00000 0x48c00002 1: 0x48d00000 0x48d00002 1: 0x48e00000 0x48e00002 1: 0x48f00000 0x48f00002 1: 0x4a000000 0x4a040002 1: 0x4a100000 0x4a040002 1: 0x4a200000 0x4a040002 1: 0x4a300000 0x4a040002 1: 0x4a400000 0x4a040002 1: 0x4a500000 0x4a040002 1: 0x4a600000 0x4a040002 1: 0x4a700000 0x4a040002 1: 0x4a800000 0x4a040002 1: 0x4a900000 0x4a040002 1: 0x4aa00000 0x4a040002 1: 0x4ab00000 0x4a040002 1: 0x4ac00000 0x4a040002 1: 0x4ad00000 0x4a040002 1: 0x4ae00000 0x4a040002 1: 0x4af00000 0x4a040002r½…�r¾}r¿(h‚Uh‘j¹ubaubhÜ)�rÀ}rÁ(h‚XµThe first column tells us whether the mapping is a Level 1 or Level 2 descriptor. All the lines above are a first level descriptor, so we look at the associated format from the TRM:rÂh‘jÏhœjáh�hàhƒ}rÃ(h…]hŽ]h‡]h†]h�]uh¤MÚh¥hh¦]rÄh¯XµThe first column tells us whether the mapping is a Level 1 or Level 2 descriptor. All the lines above are a first level descriptor, so we look at the associated format from the TRM:rÅ…�rÆ}rÇ(h‚jÂh‘jÀubaubjr)�rÈ}rÉ(h‚X6.. Image:: ../images/LinuxIpcPageTableDescriptor1.png h‘jÏhœjáh�jyhƒ}rÊ(UuriX0linux/../images/LinuxIpcPageTableDescriptor1.pngrËh†]h‡]h…]hŽ]jw}rÌU*jËsh�]uh¤Mßh¥hh¦]ubhÜ)�rÍ}rÎ(h‚XIThe "da" ("device address") column reflects the virtual address. It is **derived** from the index into the table, i.e. there does not exist a "da" register or field in the page table. Each MB of the address space maps to an entry in the table. The "da" column is displayed to make it easy to find the virtual address of interest.h‘jÏhœjáh�hàhƒ}rÏ(h…]hŽ]h‡]h†]h�]uh¤Màh¥hh¦]rÐ(h¯XGThe "da" ("device address") column reflects the virtual address. It is rÑ…�rÒ}rÓ(h‚XGThe "da" ("device address") column reflects the virtual address. It is h‘jÍubj¯)�rÔ}rÕ(h‚X **derived**hƒ}rÖ(h…]hŽ]h‡]h†]h�]uh‘jÍh¦]r×h¯XderivedrØ…�rÙ}rÚ(h‚Uh‘jÔubah�j·ubh¯X÷ from the index into the table, i.e. there does not exist a "da" register or field in the page table. Each MB of the address space maps to an entry in the table. The "da" column is displayed to make it easy to find the virtual address of interest.rÛ…�rÜ}rÝ(h‚X÷ from the index into the table, i.e. there does not exist a "da" register or field in the page table. Each MB of the address space maps to an entry in the table. The "da" column is displayed to make it easy to find the virtual address of interest.h‘jÍubeubhÜ)�rÞ}rß(h‚XfThe "pte" ("page table entry") column can be decoded according to Table 20-4 shown above. For example:ràh‘jÏhœjáh�hàhƒ}rá(h…]hŽ]h‡]h†]h�]uh¤Mæh¥hh¦]râh¯XfThe "pte" ("page table entry") column can be decoded according to Table 20-4 shown above. For example:rã…�rä}rå(h‚jàh‘jÞubaubj¡)�ræ}rç(h‚X1: 0x4a000000 0x4a040002h‘jÏhœjáh�j¤hƒ}rè(hÊhËh†]h‡]h…]hŽ]h�]uh¤M­h¥hh¦]réh¯X1: 0x4a000000 0x4a040002rê…�rë}rì(h‚Uh‘jæubaubhÜ)�rí}rî(h‚XØThe 0x4a040002 shows us that it is a Supersection with base address 0x4A000000. This gives us a 16 MB memory page. Note the repeated entries afterward. That's a requirement of the MMU. Here's an excerpt from the TRM:rïh‘jÏhœjáh�hàhƒ}rð(h…]hŽ]h‡]h†]h�]uh¤Míh¥hh¦]rñh¯XØThe 0x4a040002 shows us that it is a Supersection with base address 0x4A000000. This gives us a 16 MB memory page. Note the repeated entries afterward. That's a requirement of the MMU. Here's an excerpt from the TRM:rò…�ró}rô(h‚jïh‘jíubaubj)�rõ}rö(h‚XõSupersection descriptors must be repeated 16 times, because each descriptor in the first level translation table describes 1 MiB of memory. If an access points to a descriptor that is not initialized, the MMU will behave in an unpredictable way.h‘jÏhœjáh�jhƒ}r÷(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]røhÜ)�rù}rú(h‚XõSupersection descriptors must be repeated 16 times, because each descriptor in the first level translation table describes 1 MiB of memory. If an access points to a descriptor that is not initialized, the MMU will behave in an unpredictable way.rûh‘jõhœjáh�hàhƒ}rü(h…]hŽ]h‡]h†]h�]uh¤Móh¦]rýh¯XõSupersection descriptors must be repeated 16 times, because each descriptor in the first level translation table describes 1 MiB of memory. If an access points to a descriptor that is not initialized, the MMU will behave in an unpredictable way.rþ…�rÿ}r(h‚jûh‘jùubaubaubhþ)�r}r(h‚Uh‘jÏhœjáh�jhƒ}r(h…]hŽ]h‡]h†]h�]uh¤Møh¥hh¦]rj)�r}r(h‚UjKh‘jhœjáh�h¤hƒ}r(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubh’)�r}r (h‚X!Changing Cortex M4 IPU Memory Mapr h‘jÏhœjáh�hÓhƒ}r (h†]r U!changing-cortex-m4-ipu-memory-mapr ah‡]h…]hŽ]h�]rhAauh¤Nh¥hh¦]rh¯X!Changing Cortex M4 IPU Memory Mapr…�r}r(h‚j h‘jubaubhÜ)�r}r(h‚XÝIn order to fully understand the memory mapping of the Cortex M4 IPU Subsystems, it's helpful to recognize that there are two distinct/independent levels of memory translation. Here's a snippet from the TRM to illustrate:rh‘jÏhœjáh�hàhƒ}r(h…]hŽ]h‡]h†]h�]uh¤Mýh¥hh¦]rh¯XÝIn order to fully understand the memory mapping of the Cortex M4 IPU Subsystems, it's helpful to recognize that there are two distinct/independent levels of memory translation. Here's a snippet from the TRM to illustrate:r…�r}r(h‚jh‘jubaubjr)�r}r(h‚X(.. Image:: ../images/LinuxIpcIpuMmu.png h‘jÏhœjáh�jyhƒ}r(UuriX"linux/../images/LinuxIpcIpuMmu.pngrh†]h‡]h…]hŽ]jw}rU*jsh�]uh¤Mh¥hh¦]ubh’)�r }r!(h‚X Cortex M4 IPU Physical Addressesr"h‘jÏhœjáh�hÓhƒ}r#(h†]r$U cortex-m4-ipu-physical-addressesr%ah‡]h…]hŽ]h�]r&hRauh¤Nh¥hh¦]r'h¯X Cortex M4 IPU Physical Addressesr(…�r)}r*(h‚j"h‘j ubaubhÜ)�r+}r,(h‚XThe physical location where the M4 code/data will actually reside is defined by the CMA carveout. To change this location, you must change the definition of the carveout. **The M4 carveouts are defined in the Linux dts file.** For example for the AM57xx EVM:h‘jÏhœjáh�hàhƒ}r-(h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]r.(h¯X«The physical location where the M4 code/data will actually reside is defined by the CMA carveout. To change this location, you must change the definition of the carveout. r/…�r0}r1(h‚X«The physical location where the M4 code/data will actually reside is defined by the CMA carveout. To change this location, you must change the definition of the carveout. h‘j+ubj¯)�r2}r3(h‚X7**The M4 carveouts are defined in the Linux dts file.**hƒ}r4(h…]hŽ]h‡]h†]h�]uh‘j+h¦]r5h¯X3The M4 carveouts are defined in the Linux dts file.r6…�r7}r8(h‚Uh‘j2ubah�j·ubh¯X For example for the AM57xx EVM:r9…�r:}r;(h‚X For example for the AM57xx EVM:h‘j+ubeubhþ)�r<}r=(h‚Uh‘jÏhœjáh�jhƒ}r>(h…]hŽ]h‡]h†]h�]uh¤M h¥hh¦]r?(j)�r@}rA(h‚UjKh‘j<hœjáh�h¤hƒ}rB(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubj)�rC}rD(h‚X5linux/arch/arm/boot/dts/am57xx-beagle-x15-common.dtsirEjKh‘j<hœjáh�h¤hƒ}rF(h…]hŽ]h‡]h†]h�]uh¤M h¥hh¦]rGh¯X5linux/arch/arm/boot/dts/am57xx-beagle-x15-common.dtsirH…�rI}rJ(h‚jEh‘jCubaubeubj¡)�rK}rL(h‚X­ ipu2_cma_pool: ipu2_cma@95800000 { compatible = "shared-dma-pool"; reg = <0x0 95800000 0x0 0x3800000>; reusable; status = "okay"; }; ipu1_cma_pool: ipu1_cma@9d000000 { compatible = "shared-dma-pool"; reg = <0x0 9d000000 0x0 0x2000000>; reusable; status = "okay"; }; };h‘jÏhœjáh�j¤hƒ}rM(hÊhËh†]h‡]h…]hŽ]h�]uh¤MÓh¥hh¦]rNh¯X­ ipu2_cma_pool: ipu2_cma@95800000 { compatible = "shared-dma-pool"; reg = <0x0 95800000 0x0 0x3800000>; reusable; status = "okay"; }; ipu1_cma_pool: ipu1_cma@9d000000 { compatible = "shared-dma-pool"; reg = <0x0 9d000000 0x0 0x2000000>; reusable; status = "okay"; }; };rO…�rP}rQ(h‚Uh‘jKubaubhþ)�rR}rS(h‚Uh‘jÏhœjáh�jhƒ}rT(h…]hŽ]h‡]h†]h�]uh¤M h¥hh¦]rUj)�rV}rW(h‚XeYou are able to change both the size and location. **Be careful not to overlap any other carveouts!**jKh‘jRhœjáh�h¤hƒ}rX(h…]hŽ]h‡]h†]h�]uh¤M!h¥hh¦]rY(h¯X3You are able to change both the size and location. rZ…�r[}r\(h‚X3You are able to change both the size and location. h‘jVubj¯)�r]}r^(h‚X2**Be careful not to overlap any other carveouts!**hƒ}r_(h…]hŽ]h‡]h†]h�]uh‘jVh¦]r`h¯X.Be careful not to overlap any other carveouts!ra…�rb}rc(h‚Uh‘j]ubah�j·ubeubaubj)�rd}re(h‚XDThe **two** location entries for a given carveout must be identical!h‘jÏhœjáh�jhƒ}rf(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rghÜ)�rh}ri(h‚XDThe **two** location entries for a given carveout must be identical!h‘jdhœjáh�hàhƒ}rj(h…]hŽ]h‡]h†]h�]uh¤M$h¦]rk(h¯XThe rl…�rm}rn(h‚XThe h‘jhubj¯)�ro}rp(h‚X**two**hƒ}rq(h…]hŽ]h‡]h†]h�]uh‘jhh¦]rrh¯Xtwors…�rt}ru(h‚Uh‘joubah�j·ubh¯X9 location entries for a given carveout must be identical!rv…�rw}rx(h‚X9 location entries for a given carveout must be identical!h‘jhubeubaubhþ)�ry}rz(h‚Uh‘jÏhœjáh�jhƒ}r{(h…]hŽ]h‡]h†]h�]uh¤M'h¥hh¦]r|j)�r}}r~(h‚XdAdditionally, when you change the carveout location, there is a corresponding change that must be made to the resource table. For starters, if you're making a memory change you will need a **custom** resource table. The resource table is a large structure that is the "bridge" between physical memory and virtual memory. This structure is utilized for configuring the IPUx\_MMU (not the Unicache MMU). There is detailed information available in the article `IPC Resource customTable `__.jKh‘jyhœjáh�h¤hƒ}r(h…]hŽ]h‡]h†]h�]uh¤M/h¥hh¦]r€(h¯X½Additionally, when you change the carveout location, there is a corresponding change that must be made to the resource table. For starters, if you're making a memory change you will need a r�…�r‚}rƒ(h‚X½Additionally, when you change the carveout location, there is a corresponding change that must be made to the resource table. For starters, if you're making a memory change you will need a h‘j}ubj¯)�r„}r…(h‚X **custom**hƒ}r†(h…]hŽ]h‡]h†]h�]uh‘j}h¦]r‡h¯Xcustomrˆ…�r‰}rŠ(h‚Uh‘j„ubah�j·ubh¯X resource table. The resource table is a large structure that is the "bridge" between physical memory and virtual memory. This structure is utilized for configuring the IPUx_MMU (not the Unicache MMU). There is detailed information available in the article r‹…�rŒ}r�(h‚X resource table. The resource table is a large structure that is the "bridge" between physical memory and virtual memory. This structure is utilized for configuring the IPUx\_MMU (not the Unicache MMU). There is detailed information available in the article h‘j}ubj))�rŽ}r�(h‚Xš`IPC Resource customTable `__hƒ}r�(UnameXIPC Resource customTablej-Xzhttp://software-dl.ti.com/processor-sdk-rtos/esd/docs/latest/rtos/index_Foundational_Components.html#resource-custom-tableh†]h‡]h…]hŽ]h�]uh‘j}h¦]r‘h¯XIPC Resource customTabler’…�r“}r”(h‚Uh‘jŽubah�j2ubh¯X.…�r•}r–(h‚X.h‘j}ubeubaubhÜ)�r—}r˜(h‚X›Once you've created your custom resource table, you must update the address of PHYS\_MEM\_IPC\_VRING to be the same base address as your corresponding CMA.h‘jÏhœjáh�hàhƒ}r™(h…]hŽ]h‡]h†]h�]uh¤M1h¥hh¦]ršh¯X˜Once you've created your custom resource table, you must update the address of PHYS_MEM_IPC_VRING to be the same base address as your corresponding CMA.r›…�rœ}r�(h‚X›Once you've created your custom resource table, you must update the address of PHYS\_MEM\_IPC\_VRING to be the same base address as your corresponding CMA.h‘j—ubaubj¡)�rž}rŸ(h‚X�#if defined(VAYU_IPU_1) #define PHYS_MEM_IPC_VRING 0x9D000000 #elif defined (VAYU_IPU_2) #define PHYS_MEM_IPC_VRING 0x95800000 #endifh‘jÏhœjáh�j¤hƒ}r (jt‰juXchÊhËh†]h‡]h…]jv}hŽ]h�]uh¤M5h¥hh¦]r¡h¯X�#if defined(VAYU_IPU_1) #define PHYS_MEM_IPC_VRING 0x9D000000 #elif defined (VAYU_IPU_2) #define PHYS_MEM_IPC_VRING 0x95800000 #endifr¢…�r£}r¤(h‚Uh‘jžubaubj)�r¥}r¦(h‚XsThe PHYS\_MEM\_IPC\_VRING definition from the resource table must match the address of the associated CMA carveout!h‘jÏhœjáh�jhƒ}r§(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r¨hÜ)�r©}rª(h‚XsThe PHYS\_MEM\_IPC\_VRING definition from the resource table must match the address of the associated CMA carveout!h‘j¥hœjáh�hàhƒ}r«(h…]hŽ]h‡]h†]h�]uh¤M?h¦]r¬h¯XpThe PHYS_MEM_IPC_VRING definition from the resource table must match the address of the associated CMA carveout!r­…�r®}r¯(h‚XsThe PHYS\_MEM\_IPC\_VRING definition from the resource table must match the address of the associated CMA carveout!h‘j©ubaubaubh’)�r°}r±(h‚XCortex M4 IPU Virtual Addressesr²h‘jÏhœjáh�hÓhƒ}r³(h†]r´Ucortex-m4-ipu-virtual-addressesrµah‡]h…]hŽ]h�]r¶hoauh¤Nh¥hh¦]r·h¯XCortex M4 IPU Virtual Addressesr¸…�r¹}rº(h‚j²h‘j°ubaubh’)�r»}r¼(h‚X Unicache MMUr½h‘jÏhœjáh�hÓhƒ}r¾(h†]r¿U unicache-mmurÀah‡]h…]hŽ]h�]rÁhauh¤Nh¥hh¦]rÂh¯X Unicache MMUrÃ…�rÄ}rÅ(h‚j½h‘j»ubaubhÜ)�rÆ}rÇ(h‚XTThe Unicache MMU sits closest to the Cortex M4. It provides the first level of address translation. The Unicache MMU is actually "self programmed" by the Cortex M4. The Unicache MMU is also referred to as the Attribute MMU (AMMU). There are a fixed number of small, medium and large pages. Here's a snippet showing some of the key mappings:rÈh‘jÏhœjáh�hàhƒ}rÉ(h…]hŽ]h‡]h†]h�]uh¤MHh¥hh¦]rÊh¯XTThe Unicache MMU sits closest to the Cortex M4. It provides the first level of address translation. The Unicache MMU is actually "self programmed" by the Cortex M4. The Unicache MMU is also referred to as the Attribute MMU (AMMU). There are a fixed number of small, medium and large pages. Here's a snippet showing some of the key mappings:rË…�rÌ}rÍ(h‚jÈh‘jÆubaubhÜ)�rÎ}rÏ(h‚XNipc\_3\_43\_02\_04/examples/DRA7XX\_linux\_elf/ex02\_messageq/ipu1/IpuAmmu.cfgrÐh‘jÏhœjáh�hàhƒ}rÑ(h…]hŽ]h‡]h†]h�]uh¤MNh¥hh¦]rÒh¯XGipc_3_43_02_04/examples/DRA7XX_linux_elf/ex02_messageq/ipu1/IpuAmmu.cfgrÓ…�rÔ}rÕ(h‚XNipc\_3\_43\_02\_04/examples/DRA7XX\_linux\_elf/ex02\_messageq/ipu1/IpuAmmu.cfgh‘jÎubaubj¡)�rÖ}r×(h‚Xs/*********************** Large Pages *************************/ /* Instruction Code: Large page (512M); cacheable */ /* config large page[0] to map 512MB VA 0x0 to L3 0x0 */ AMMU.largePages[0].pageEnabled = AMMU.Enable_YES; AMMU.largePages[0].logicalAddress = 0x0; AMMU.largePages[0].translationEnabled = AMMU.Enable_NO; AMMU.largePages[0].size = AMMU.Large_512M; AMMU.largePages[0].L1_cacheable = AMMU.CachePolicy_CACHEABLE; AMMU.largePages[0].L1_posted = AMMU.PostedPolicy_POSTED; /* Peripheral regions: Large Page (512M); non-cacheable */ /* config large page[1] to map 512MB VA 0x60000000 to L3 0x60000000 */ AMMU.largePages[1].pageEnabled = AMMU.Enable_YES; AMMU.largePages[1].logicalAddress = 0x60000000; AMMU.largePages[1].translationEnabled = AMMU.Enable_NO; AMMU.largePages[1].size = AMMU.Large_512M; AMMU.largePages[1].L1_cacheable = AMMU.CachePolicy_NON_CACHEABLE; AMMU.largePages[1].L1_posted = AMMU.PostedPolicy_POSTED; /* Private, Shared and IPC Data regions: Large page (512M); cacheable */ /* config large page[2] to map 512MB VA 0x80000000 to L3 0x80000000 */ AMMU.largePages[2].pageEnabled = AMMU.Enable_YES; AMMU.largePages[2].logicalAddress = 0x80000000; AMMU.largePages[2].translationEnabled = AMMU.Enable_NO; AMMU.largePages[2].size = AMMU.Large_512M; AMMU.largePages[2].L1_cacheable = AMMU.CachePolicy_CACHEABLE; AMMU.largePages[2].L1_posted = AMMU.PostedPolicy_POSTED;h‘jÏhœjáh�j¤hƒ}rØ(jt‰juX javascripthÊhËh†]h‡]h…]jv}hŽ]h�]uh¤MPh¥hh¦]rÙh¯Xs/*********************** Large Pages *************************/ /* Instruction Code: Large page (512M); cacheable */ /* config large page[0] to map 512MB VA 0x0 to L3 0x0 */ AMMU.largePages[0].pageEnabled = AMMU.Enable_YES; AMMU.largePages[0].logicalAddress = 0x0; AMMU.largePages[0].translationEnabled = AMMU.Enable_NO; AMMU.largePages[0].size = AMMU.Large_512M; AMMU.largePages[0].L1_cacheable = AMMU.CachePolicy_CACHEABLE; AMMU.largePages[0].L1_posted = AMMU.PostedPolicy_POSTED; /* Peripheral regions: Large Page (512M); non-cacheable */ /* config large page[1] to map 512MB VA 0x60000000 to L3 0x60000000 */ AMMU.largePages[1].pageEnabled = AMMU.Enable_YES; AMMU.largePages[1].logicalAddress = 0x60000000; AMMU.largePages[1].translationEnabled = AMMU.Enable_NO; AMMU.largePages[1].size = AMMU.Large_512M; AMMU.largePages[1].L1_cacheable = AMMU.CachePolicy_NON_CACHEABLE; AMMU.largePages[1].L1_posted = AMMU.PostedPolicy_POSTED; /* Private, Shared and IPC Data regions: Large page (512M); cacheable */ /* config large page[2] to map 512MB VA 0x80000000 to L3 0x80000000 */ AMMU.largePages[2].pageEnabled = AMMU.Enable_YES; AMMU.largePages[2].logicalAddress = 0x80000000; AMMU.largePages[2].translationEnabled = AMMU.Enable_NO; AMMU.largePages[2].size = AMMU.Large_512M; AMMU.largePages[2].L1_cacheable = AMMU.CachePolicy_CACHEABLE; AMMU.largePages[2].L1_posted = AMMU.PostedPolicy_POSTED;rÚ…�rÛ}rÜ(h‚Uh‘jÖubaubhþ)�rÝ}rÞ(h‚Uh‘jÏhœjáh�jhƒ}rß(h…]hŽ]h‡]h†]h�]uh¤Mnh¥hh¦]ràj)�rá}râ(h‚UjKh‘jÝhœjáh�h¤hƒ}rã(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubjB)�rä}rå(h‚Uh‘jÏhœjáh�jEhƒ}ræ(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rçjH)�rè}ré(h‚Uhƒ}rê(h†]h‡]h…]hŽ]h�]UcolsKuh‘jäh¦]rë(jM)�rì}rí(h‚Uhƒ}rî(h†]h‡]h…]hŽ]h�]UcolwidthKuh‘jèh¦]h�jQubjM)�rï}rð(h‚Uhƒ}rñ(h†]h‡]h…]hŽ]h�]UcolwidthKuh‘jèh¦]h�jQubjM)�rò}ró(h‚Uhƒ}rô(h†]h‡]h…]hŽ]h�]UcolwidthKuh‘jèh¦]h�jQubjM)�rõ}rö(h‚Uhƒ}r÷(h†]h‡]h…]hŽ]h�]UcolwidthK uh‘jèh¦]h�jQubjM)�rø}rù(h‚Uhƒ}rú(h†]h‡]h…]hŽ]h�]UcolwidthKuh‘jèh¦]h�jQubjX)�rû}rü(h‚Uhƒ}rý(h…]hŽ]h‡]h†]h�]uh‘jèh¦]rþj])�rÿ}r(h‚Uhƒ}r(h…]hŽ]h‡]h†]h�]uh‘jûh¦]r(jb)�r}r(h‚Uhƒ}r(h…]hŽ]h‡]h†]h�]uh‘jÿh¦]rhÜ)�r}r(h‚XPager h‘jhœjáh�hàhƒ}r (h…]hŽ]h‡]h†]h�]uh¤Mqh¦]r h¯XPager …�r }r(h‚j h‘jubaubah�joubjb)�r}r(h‚Uhƒ}r(h…]hŽ]h‡]h†]h�]uh‘jÿh¦]rhÜ)�r}r(h‚XCortex M4 Addressrh‘jhœjáh�hàhƒ}r(h…]hŽ]h‡]h†]h�]uh¤Mqh¦]rh¯XCortex M4 Addressr…�r}r(h‚jh‘jubaubah�joubjb)�r}r(h‚Uhƒ}r(h…]hŽ]h‡]h†]h�]uh‘jÿh¦]rhÜ)�r}r (h‚XIntermediate Addressr!h‘jhœjáh�hàhƒ}r"(h…]hŽ]h‡]h†]h�]uh¤Mqh¦]r#h¯XIntermediate Addressr$…�r%}r&(h‚j!h‘jubaubah�joubjb)�r'}r((h‚Uhƒ}r)(h…]hŽ]h‡]h†]h�]uh‘jÿh¦]r*hÜ)�r+}r,(h‚XSizer-h‘j'hœjáh�hàhƒ}r.(h…]hŽ]h‡]h†]h�]uh¤Mqh¦]r/h¯XSizer0…�r1}r2(h‚j-h‘j+ubaubah�joubjb)�r3}r4(h‚Uhƒ}r5(h…]hŽ]h‡]h†]h�]uh‘jÿh¦]r6hÜ)�r7}r8(h‚XCommentr9h‘j3hœjáh�hàhƒ}r:(h…]hŽ]h‡]h†]h�]uh¤Mqh¦]r;h¯XCommentr<…�r=}r>(h‚j9h‘j7ubaubah�joubeh�jˆubah�j‰ubjŠ)�r?}r@(h‚Uhƒ}rA(h…]hŽ]h‡]h†]h�]uh‘jèh¦]rB(j])�rC}rD(h‚Uhƒ}rE(h…]hŽ]h‡]h†]h�]uh‘j?h¦]rF(jb)�rG}rH(h‚Uhƒ}rI(h…]hŽ]h‡]h†]h�]uh‘jCh¦]rJhÜ)�rK}rL(h‚X Large Page 0rMh‘jGhœjáh�hàhƒ}rN(h…]hŽ]h‡]h†]h�]uh¤Msh¦]rOh¯X Large Page 0rP…�rQ}rR(h‚jMh‘jKubaubah�joubjb)�rS}rT(h‚Uhƒ}rU(h…]hŽ]h‡]h†]h�]uh‘jCh¦]rVhÜ)�rW}rX(h‚X0x00000000-0x1fffffffrYh‘jShœjáh�hàhƒ}rZ(h…]hŽ]h‡]h†]h�]uh¤Msh¦]r[h¯X0x00000000-0x1fffffffr\…�r]}r^(h‚jYh‘jWubaubah�joubjb)�r_}r`(h‚Uhƒ}ra(h…]hŽ]h‡]h†]h�]uh‘jCh¦]rbhÜ)�rc}rd(h‚X0x00000000-0x1fffffffreh‘j_hœjáh�hàhƒ}rf(h…]hŽ]h‡]h†]h�]uh¤Msh¦]rgh¯X0x00000000-0x1fffffffrh…�ri}rj(h‚jeh‘jcubaubah�joubjb)�rk}rl(h‚Uhƒ}rm(h…]hŽ]h‡]h†]h�]uh‘jCh¦]rnhÜ)�ro}rp(h‚X512 MBrqh‘jkhœjáh�hàhƒ}rr(h…]hŽ]h‡]h†]h�]uh¤Msh¦]rsh¯X512 MBrt…�ru}rv(h‚jqh‘joubaubah�joubjb)�rw}rx(h‚Uhƒ}ry(h…]hŽ]h‡]h†]h�]uh‘jCh¦]rzhÜ)�r{}r|(h‚XCoder}h‘jwhœjáh�hàhƒ}r~(h…]hŽ]h‡]h†]h�]uh¤Msh¦]rh¯XCoder€…�r�}r‚(h‚j}h‘j{ubaubah�joubeh�jˆubj])�rƒ}r„(h‚Uhƒ}r…(h…]hŽ]h‡]h†]h�]uh‘j?h¦]r†(jb)�r‡}rˆ(h‚Uhƒ}r‰(h…]hŽ]h‡]h†]h�]uh‘jƒh¦]rŠhÜ)�r‹}rŒ(h‚X Large Page 1r�h‘j‡hœjáh�hàhƒ}rŽ(h…]hŽ]h‡]h†]h�]uh¤Muh¦]r�h¯X Large Page 1r�…�r‘}r’(h‚j�h‘j‹ubaubah�joubjb)�r“}r”(h‚Uhƒ}r•(h…]hŽ]h‡]h†]h�]uh‘jƒh¦]r–hÜ)�r—}r˜(h‚X0x60000000-0x7fffffffr™h‘j“hœjáh�hàhƒ}rš(h…]hŽ]h‡]h†]h�]uh¤Muh¦]r›h¯X0x60000000-0x7fffffffrœ…�r�}rž(h‚j™h‘j—ubaubah�joubjb)�rŸ}r (h‚Uhƒ}r¡(h…]hŽ]h‡]h†]h�]uh‘jƒh¦]r¢hÜ)�r£}r¤(h‚X0x60000000-0x7fffffffr¥h‘jŸhœjáh�hàhƒ}r¦(h…]hŽ]h‡]h†]h�]uh¤Muh¦]r§h¯X0x60000000-0x7fffffffr¨…�r©}rª(h‚j¥h‘j£ubaubah�joubjb)�r«}r¬(h‚Uhƒ}r­(h…]hŽ]h‡]h†]h�]uh‘jƒh¦]r®hÜ)�r¯}r°(h‚X512 MBr±h‘j«hœjáh�hàhƒ}r²(h…]hŽ]h‡]h†]h�]uh¤Muh¦]r³h¯X512 MBr´…�rµ}r¶(h‚j±h‘j¯ubaubah�joubjb)�r·}r¸(h‚Uhƒ}r¹(h…]hŽ]h‡]h†]h�]uh‘jƒh¦]rºhÜ)�r»}r¼(h‚X Peripheralsr½h‘j·hœjáh�hàhƒ}r¾(h…]hŽ]h‡]h†]h�]uh¤Muh¦]r¿h¯X PeripheralsrÀ…�rÁ}rÂ(h‚j½h‘j»ubaubah�joubeh�jˆubj])�rÃ}rÄ(h‚Uhƒ}rÅ(h…]hŽ]h‡]h†]h�]uh‘j?h¦]rÆ(jb)�rÇ}rÈ(h‚Uhƒ}rÉ(h…]hŽ]h‡]h†]h�]uh‘jÃh¦]rÊhÜ)�rË}rÌ(h‚X Large Page 2rÍh‘jÇhœjáh�hàhƒ}rÎ(h…]hŽ]h‡]h†]h�]uh¤Mwh¦]rÏh¯X Large Page 2rÐ…�rÑ}rÒ(h‚jÍh‘jËubaubah�joubjb)�rÓ}rÔ(h‚Uhƒ}rÕ(h…]hŽ]h‡]h†]h�]uh‘jÃh¦]rÖhÜ)�r×}rØ(h‚X0x80000000-0x9fffffffrÙh‘jÓhœjáh�hàhƒ}rÚ(h…]hŽ]h‡]h†]h�]uh¤Mwh¦]rÛh¯X0x80000000-0x9fffffffrÜ…�rÝ}rÞ(h‚jÙh‘j×ubaubah�joubjb)�rß}rà(h‚Uhƒ}rá(h…]hŽ]h‡]h†]h�]uh‘jÃh¦]râhÜ)�rã}rä(h‚X0x80000000-0x9fffffffråh‘jßhœjáh�hàhƒ}ræ(h…]hŽ]h‡]h†]h�]uh¤Mwh¦]rçh¯X0x80000000-0x9fffffffrè…�ré}rê(h‚jåh‘jãubaubah�joubjb)�rë}rì(h‚Uhƒ}rí(h…]hŽ]h‡]h†]h�]uh‘jÃh¦]rîhÜ)�rï}rð(h‚X512 MBrñh‘jëhœjáh�hàhƒ}rò(h…]hŽ]h‡]h†]h�]uh¤Mwh¦]róh¯X512 MBrô…�rõ}rö(h‚jñh‘jïubaubah�joubjb)�r÷}rø(h‚Uhƒ}rù(h…]hŽ]h‡]h†]h�]uh‘jÃh¦]rúhÜ)�rû}rü(h‚XDatarýh‘j÷hœjáh�hàhƒ}rþ(h…]hŽ]h‡]h†]h�]uh¤Mwh¦]rÿh¯XDatar…�r}r(h‚jýh‘jûubaubah�joubeh�jˆubeh�jWubeh�jXubaubhÜ)�r}r(h‚XÛThese 3 pages are "identity" mappings, performing a passthrough of requests to the associated address ranges. These intermediate addresses get mapped to their physical addresses in the next level of translation (IOMMU).rh‘jÏhœjáh�hàhƒ}r(h…]hŽ]h‡]h†]h�]uh¤Mzh¥hh¦]rh¯XÛThese 3 pages are "identity" mappings, performing a passthrough of requests to the associated address ranges. These intermediate addresses get mapped to their physical addresses in the next level of translation (IOMMU).r…�r }r (h‚jh‘jubaubhÜ)�r }r (h‚XØThe AMMU ranges for code and data **need** to be identity mappings because otherwise the remoteproc loader wouldn't be able to match up the sections from the ELF file with the associated IOMMU mapping. These mappings should suffice for any application, i.e. no need to adjust these. The more likely area for modification is the resource table in the next section. The AMMU mappings are needed mainly to understand the full picture with respect to the Cortex M4 memory map.h‘jÏhœjáh�hàhƒ}r (h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]r(h¯X"The AMMU ranges for code and data r…�r}r(h‚X"The AMMU ranges for code and data h‘j ubj¯)�r}r(h‚X**need**hƒ}r(h…]hŽ]h‡]h†]h�]uh‘j h¦]rh¯Xneedr…�r}r(h‚Uh‘jubah�j·ubh¯X® to be identity mappings because otherwise the remoteproc loader wouldn't be able to match up the sections from the ELF file with the associated IOMMU mapping. These mappings should suffice for any application, i.e. no need to adjust these. The more likely area for modification is the resource table in the next section. The AMMU mappings are needed mainly to understand the full picture with respect to the Cortex M4 memory map.r…�r}r(h‚X® to be identity mappings because otherwise the remoteproc loader wouldn't be able to match up the sections from the ELF file with the associated IOMMU mapping. These mappings should suffice for any application, i.e. no need to adjust these. The more likely area for modification is the resource table in the next section. The AMMU mappings are needed mainly to understand the full picture with respect to the Cortex M4 memory map.h‘j ubeubhþ)�r}r(h‚Uh‘jÏhœjáh�jhƒ}r(h…]hŽ]h‡]h†]h�]uh¤M‡h¥hh¦]rj)�r }r!(h‚UjKh‘jhœjáh�h¤hƒ}r"(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubh’)�r#}r$(h‚XIOMMUr%h‘jÏhœjáh�hÓhƒ}r&(h†]r'Uiommur(ah‡]h…]hŽ]h�]r)h)auh¤Nh¥hh¦]r*h¯XIOMMUr+…�r,}r-(h‚j%h‘j#ubaubhÜ)�r.}r/(h‚XThe IOMMU sits closest to the L3 interconnect. It takes the intermediate address output from the AMMU and translates it to the physical address used by the L3 interconnect. The IOMMU is programmed by the ARM based on the associated resource table. If you're planning any memory changes then you'll want to make a custom resource table as described in the page `IPC Resource customTable `__.h‘jÏhœjáh�hàhƒ}r0(h…]hŽ]h‡]h†]h�]uh¤MŒh¥hh¦]r1(h¯XhThe IOMMU sits closest to the L3 interconnect. It takes the intermediate address output from the AMMU and translates it to the physical address used by the L3 interconnect. The IOMMU is programmed by the ARM based on the associated resource table. If you're planning any memory changes then you'll want to make a custom resource table as described in the page r2…�r3}r4(h‚XhThe IOMMU sits closest to the L3 interconnect. It takes the intermediate address output from the AMMU and translates it to the physical address used by the L3 interconnect. The IOMMU is programmed by the ARM based on the associated resource table. If you're planning any memory changes then you'll want to make a custom resource table as described in the page h‘j.ubj))�r5}r6(h‚Xš`IPC Resource customTable `__hƒ}r7(UnameXIPC Resource customTablej-Xzhttp://software-dl.ti.com/processor-sdk-rtos/esd/docs/latest/rtos/index_Foundational_Components.html#resource-custom-tableh†]h‡]h…]hŽ]h�]uh‘j.h¦]r8h¯XIPC Resource customTabler9…�r:}r;(h‚Uh‘j5ubah�j2ubh¯X.…�r<}r=(h‚X.h‘j.ubeubhÜ)�r>}r?(h‚XgThe default resource table (which can be adapted to make a custom table) can be found at this location:r@h‘jÏhœjáh�hàhƒ}rA(h…]hŽ]h‡]h†]h�]uh¤M•h¥hh¦]rBh¯XgThe default resource table (which can be adapted to make a custom table) can be found at this location:rC…�rD}rE(h‚j@h‘j>ubaubhÜ)�rF}rG(h‚X6ipc/packages/ti/ipc/remoteproc/rsc\_table\_vayu\_ipu.hrHh‘jÏhœjáh�hàhƒ}rI(h…]hŽ]h‡]h†]h�]uh¤M˜h¥hh¦]rJh¯X3ipc/packages/ti/ipc/remoteproc/rsc_table_vayu_ipu.hrK…�rL}rM(h‚X6ipc/packages/ti/ipc/remoteproc/rsc\_table\_vayu\_ipu.hh‘jFubaubj¡)�rN}rO(h‚Xë#define IPU_MEM_TEXT 0x0 #define IPU_MEM_DATA 0x80000000 #define IPU_MEM_IOBUFS 0x90000000 #define IPU_MEM_IPC_DATA 0x9F000000 #define IPU_MEM_IPC_VRING 0x60000000 #define IPU_MEM_RPMSG_VRING0 0x60000000 #define IPU_MEM_RPMSG_VRING1 0x60004000 #define IPU_MEM_VRING_BUFS0 0x60040000 #define IPU_MEM_VRING_BUFS1 0x60080000 #define IPU_MEM_IPC_VRING_SIZE SZ_1M #define IPU_MEM_IPC_DATA_SIZE SZ_1M #if defined(VAYU_IPU_1) #define IPU_MEM_TEXT_SIZE (SZ_1M) #elif defined(VAYU_IPU_2) #define IPU_MEM_TEXT_SIZE (SZ_1M * 6) #endif #if defined(VAYU_IPU_1) #define IPU_MEM_DATA_SIZE (SZ_1M * 5) #elif defined(VAYU_IPU_2) #define IPU_MEM_DATA_SIZE (SZ_1M * 48) #endifh‘jÏhœjáh�j¤hƒ}rP(jt‰juXchÊhËh†]h‡]h…]jv}hŽ]h�]uh¤Mšh¥hh¦]rQh¯Xë#define IPU_MEM_TEXT 0x0 #define IPU_MEM_DATA 0x80000000 #define IPU_MEM_IOBUFS 0x90000000 #define IPU_MEM_IPC_DATA 0x9F000000 #define IPU_MEM_IPC_VRING 0x60000000 #define IPU_MEM_RPMSG_VRING0 0x60000000 #define IPU_MEM_RPMSG_VRING1 0x60004000 #define IPU_MEM_VRING_BUFS0 0x60040000 #define IPU_MEM_VRING_BUFS1 0x60080000 #define IPU_MEM_IPC_VRING_SIZE SZ_1M #define IPU_MEM_IPC_DATA_SIZE SZ_1M #if defined(VAYU_IPU_1) #define IPU_MEM_TEXT_SIZE (SZ_1M) #elif defined(VAYU_IPU_2) #define IPU_MEM_TEXT_SIZE (SZ_1M * 6) #endif #if defined(VAYU_IPU_1) #define IPU_MEM_DATA_SIZE (SZ_1M * 5) #elif defined(VAYU_IPU_2) #define IPU_MEM_DATA_SIZE (SZ_1M * 48) #endifrR…�rS}rT(h‚Uh‘jNubaubhþ)�rU}rV(h‚Uh‘jÏhœjáh�jhƒ}rW(h…]hŽ]h‡]h†]h�]uh¤M·h¥hh¦]rXj)�rY}rZ(h‚UjKh‘jUhœjáh�h¤hƒ}r[(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�r\}r](h‚X r^h‘jÏhœjáh�hàhƒ}r_(h…]hŽ]h‡]h†]h�]uh¤M¹h¥hh¦]r`h¯X ra…�rb}rc(h‚j^h‘j\ubaubhþ)�rd}re(h‚Uh‘jÏhœjáh�jhƒ}rf(h…]hŽ]h‡]h†]h�]uh¤M»h¥hh¦]rgj)�rh}ri(h‚UjKh‘jdhœjáh�h¤hƒ}rj(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubj¡)�rk}rl(h‚X{ TYPE_CARVEOUT, IPU_MEM_TEXT, 0, IPU_MEM_TEXT_SIZE, 0, 0, "IPU_MEM_TEXT", }, { TYPE_CARVEOUT, IPU_MEM_DATA, 0, IPU_MEM_DATA_SIZE, 0, 0, "IPU_MEM_DATA", }, { TYPE_CARVEOUT, IPU_MEM_IPC_DATA, 0, IPU_MEM_IPC_DATA_SIZE, 0, 0, "IPU_MEM_IPC_DATA", },h‘jÏhœjáh�j¤hƒ}rm(jt‰juXchÊhËh†]h‡]h…]jv}hŽ]h�]uh¤M½h¥hh¦]rnh¯X{ TYPE_CARVEOUT, IPU_MEM_TEXT, 0, IPU_MEM_TEXT_SIZE, 0, 0, "IPU_MEM_TEXT", }, { TYPE_CARVEOUT, IPU_MEM_DATA, 0, IPU_MEM_DATA_SIZE, 0, 0, "IPU_MEM_DATA", }, { TYPE_CARVEOUT, IPU_MEM_IPC_DATA, 0, IPU_MEM_IPC_DATA_SIZE, 0, 0, "IPU_MEM_IPC_DATA", },ro…�rp}rq(h‚Uh‘jkubaubhÜ)�rr}rs(h‚XÈThe 3 entries above from the resource table all come from the associated IPU CMA pool (i.e. as dictated by the TYPE\_CARVEOUT). The second parameter represents the virtual address (i.e. input address to the IOMMU). **These addresses must be consistent with both the AMMU mapping as well as the linker command file.** The ex02\_messageq example from ipc defines these memory sections in the file examples/DRA7XX\_linux\_elf/ex02\_messageq/shared/config.bld.h‘jÏhœjáh�hàhƒ}rt(h…]hŽ]h‡]h†]h�]uh¤MÒh¥hh¦]ru(h¯XÖThe 3 entries above from the resource table all come from the associated IPU CMA pool (i.e. as dictated by the TYPE_CARVEOUT). The second parameter represents the virtual address (i.e. input address to the IOMMU). rv…�rw}rx(h‚X×The 3 entries above from the resource table all come from the associated IPU CMA pool (i.e. as dictated by the TYPE\_CARVEOUT). The second parameter represents the virtual address (i.e. input address to the IOMMU). h‘jrubj¯)�ry}rz(h‚Xe**These addresses must be consistent with both the AMMU mapping as well as the linker command file.**hƒ}r{(h…]hŽ]h‡]h†]h�]uh‘jrh¦]r|h¯XaThese addresses must be consistent with both the AMMU mapping as well as the linker command file.r}…�r~}r(h‚Uh‘jyubah�j·ubh¯Xˆ The ex02_messageq example from ipc defines these memory sections in the file examples/DRA7XX_linux_elf/ex02_messageq/shared/config.bld.r€…�r�}r‚(h‚XŒ The ex02\_messageq example from ipc defines these memory sections in the file examples/DRA7XX\_linux\_elf/ex02\_messageq/shared/config.bld.h‘jrubeubhÜ)�rƒ}r„(h‚XCYou can dump the IPU IOMMU page tables with the following commands:r…h‘jÏhœjáh�hàhƒ}r†(h…]hŽ]h‡]h†]h�]uh¤MÚh¥hh¦]r‡h¯XCYou can dump the IPU IOMMU page tables with the following commands:rˆ…�r‰}rŠ(h‚j…h‘jƒubaubjB)�r‹}rŒ(h‚Uh‘jÏhœjáh�jEhƒ}r�(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rŽjH)�r�}r�(h‚Uhƒ}r‘(h†]h‡]h…]hŽ]h�]UcolsKuh‘j‹h¦]r’(jM)�r“}r”(h‚Uhƒ}r•(h†]h‡]h…]hŽ]h�]UcolwidthKuh‘j�h¦]h�jQubjM)�r–}r—(h‚Uhƒ}r˜(h†]h‡]h…]hŽ]h�]UcolwidthK`__ for more details on interpreting the output.h‘jÏhœjáh�hàhƒ}rõ(h…]hŽ]h‡]h†]h�]uh¤Mäh¥hh¦]rö(h¯XPlease see the r÷…�rø}rù(h‚XPlease see the h‘jóubj))�rú}rû(h‚Xw`corresponding DSP documentation `__hƒ}rü(UnameXcorresponding DSP documentationj-XQFoundational_Components_IPC.html#inspecting-the-dsp-iommu-page-tables-at-run-timeh†]h‡]h…]hŽ]h�]uh‘jóh¦]rýh¯Xcorresponding DSP documentationrþ…�rÿ}r(h‚Uh‘júubah�j2ubh¯X- for more details on interpreting the output.r…�r}r(h‚X- for more details on interpreting the output.h‘jóubeubhþ)�r}r(h‚Uh‘jÏhœjáh�jhƒ}r(h…]hŽ]h‡]h†]h�]uh¤Mèh¥hh¦]rj)�r}r (h‚UjKh‘jhœjáh�h¤hƒ}r (h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubh’)�r }r (h‚X#Cortex M4 IPU Access to Peripheralsr h‘jÏhœjáh�hÓhƒ}r(h†]rU#cortex-m4-ipu-access-to-peripheralsrah‡]h…]hŽ]h�]rhKauh¤Nh¥hh¦]rh¯X#Cortex M4 IPU Access to Peripheralsr…�r}r(h‚j h‘j ubaubhÜ)�r}r(h‚X:The default resource table creates the following mappings:rh‘jÏhœjáh�hàhƒ}r(h…]hŽ]h‡]h†]h�]uh¤Míh¥hh¦]rh¯X:The default resource table creates the following mappings:r…�r}r(h‚jh‘jubaubjB)�r}r(h‚Uh‘jÏhœjáh�jEhƒ}r (h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r!jH)�r"}r#(h‚Uhƒ}r$(h†]h‡]h…]hŽ]h�]UcolsKuh‘jh¦]r%(jM)�r&}r'(h‚Uhƒ}r((h†]h‡]h…]hŽ]h�]UcolwidthK%uh‘j"h¦]h�jQubjM)�r)}r*(h‚Uhƒ}r+(h†]h‡]h…]hŽ]h�]UcolwidthK%uh‘j"h¦]h�jQubjM)�r,}r-(h‚Uhƒ}r.(h†]h‡]h…]hŽ]h�]UcolwidthKuh‘j"h¦]h�jQubjM)�r/}r0(h‚Uhƒ}r1(h†]h‡]h…]hŽ]h�]UcolwidthK uh‘j"h¦]h�jQubjM)�r2}r3(h‚Uhƒ}r4(h†]h‡]h…]hŽ]h�]UcolwidthKuh‘j"h¦]h�jQubjX)�r5}r6(h‚Uhƒ}r7(h…]hŽ]h‡]h†]h�]uh‘j"h¦]r8j])�r9}r:(h‚Uhƒ}r;(h…]hŽ]h‡]h†]h�]uh‘j5h¦]r<(jb)�r=}r>(h‚Uhƒ}r?(h…]hŽ]h‡]h†]h�]uh‘j9h¦]r@hÜ)�rA}rB(h‚X!Virtual Address used by Cortex M4rCh‘j=hœjáh�hàhƒ}rD(h…]hŽ]h‡]h†]h�]uh¤Mðh¦]rEh¯X!Virtual Address used by Cortex M4rF…�rG}rH(h‚jCh‘jAubaubah�joubjb)�rI}rJ(h‚Uhƒ}rK(h…]hŽ]h‡]h†]h�]uh‘j9h¦]rLhÜ)�rM}rN(h‚X!Address at output of Unicache MMUrOh‘jIhœjáh�hàhƒ}rP(h…]hŽ]h‡]h†]h�]uh¤Mðh¦]rQh¯X!Address at output of Unicache MMUrR…�rS}rT(h‚jOh‘jMubaubah�joubjb)�rU}rV(h‚Uhƒ}rW(h…]hŽ]h‡]h†]h�]uh‘j9h¦]rXhÜ)�rY}rZ(h‚XAddress at output of IOMMUr[h‘jUhœjáh�hàhƒ}r\(h…]hŽ]h‡]h†]h�]uh¤Mðh¦]r]h¯XAddress at output of IOMMUr^…�r_}r`(h‚j[h‘jYubaubah�joubjb)�ra}rb(h‚Uhƒ}rc(h…]hŽ]h‡]h†]h�]uh‘j9h¦]rdhÜ)�re}rf(h‚XSizergh‘jahœjáh�hàhƒ}rh(h…]hŽ]h‡]h†]h�]uh¤Mðh¦]rih¯XSizerj…�rk}rl(h‚jgh‘jeubaubah�joubjb)�rm}rn(h‚Uhƒ}ro(h…]hŽ]h‡]h†]h�]uh‘j9h¦]rphÜ)�rq}rr(h‚XCommentrsh‘jmhœjáh�hàhƒ}rt(h…]hŽ]h‡]h†]h�]uh¤Mðh¦]ruh¯XCommentrv…�rw}rx(h‚jsh‘jqubaubah�joubeh�jˆubah�j‰ubjŠ)�ry}rz(h‚Uhƒ}r{(h…]hŽ]h‡]h†]h�]uh‘j"h¦]r|(j])�r}}r~(h‚Uhƒ}r(h…]hŽ]h‡]h†]h�]uh‘jyh¦]r€(jb)�r�}r‚(h‚Uhƒ}rƒ(h…]hŽ]h‡]h†]h�]uh‘j}h¦]r„hÜ)�r…}r†(h‚X 0x6A000000r‡h‘j�hœjáh�hàhƒ}rˆ(h…]hŽ]h‡]h†]h�]uh¤Mòh¦]r‰h¯X 0x6A000000rŠ…�r‹}rŒ(h‚j‡h‘j…ubaubah�joubjb)�r�}rŽ(h‚Uhƒ}r�(h…]hŽ]h‡]h†]h�]uh‘j}h¦]r�hÜ)�r‘}r’(h‚X 0x6A000000r“h‘j�hœjáh�hàhƒ}r”(h…]hŽ]h‡]h†]h�]uh¤Mòh¦]r•h¯X 0x6A000000r–…�r—}r˜(h‚j“h‘j‘ubaubah�joubjb)�r™}rš(h‚Uhƒ}r›(h…]hŽ]h‡]h†]h�]uh‘j}h¦]rœhÜ)�r�}rž(h‚X 0x4A000000rŸh‘j™hœjáh�hàhƒ}r (h…]hŽ]h‡]h†]h�]uh¤Mòh¦]r¡h¯X 0x4A000000r¢…�r£}r¤(h‚jŸh‘j�ubaubah�joubjb)�r¥}r¦(h‚Uhƒ}r§(h…]hŽ]h‡]h†]h�]uh‘j}h¦]r¨hÜ)�r©}rª(h‚X16 MBr«h‘j¥hœjáh�hàhƒ}r¬(h…]hŽ]h‡]h†]h�]uh¤Mòh¦]r­h¯X16 MBr®…�r¯}r°(h‚j«h‘j©ubaubah�joubjb)�r±}r²(h‚Uhƒ}r³(h…]hŽ]h‡]h†]h�]uh‘j}h¦]r´hÜ)�rµ}r¶(h‚XL4CFG + L4WKUPr·h‘j±hœjáh�hàhƒ}r¸(h…]hŽ]h‡]h†]h�]uh¤Mòh¦]r¹h¯XL4CFG + L4WKUPrº…�r»}r¼(h‚j·h‘jµubaubah�joubeh�jˆubj])�r½}r¾(h‚Uhƒ}r¿(h…]hŽ]h‡]h†]h�]uh‘jyh¦]rÀ(jb)�rÁ}rÂ(h‚Uhƒ}rÃ(h…]hŽ]h‡]h†]h�]uh‘j½h¦]rÄhÜ)�rÅ}rÆ(h‚X 0x68000000rÇh‘jÁhœjáh�hàhƒ}rÈ(h…]hŽ]h‡]h†]h�]uh¤Môh¦]rÉh¯X 0x68000000rÊ…�rË}rÌ(h‚jÇh‘jÅubaubah�joubjb)�rÍ}rÎ(h‚Uhƒ}rÏ(h…]hŽ]h‡]h†]h�]uh‘j½h¦]rÐhÜ)�rÑ}rÒ(h‚X 0x68000000rÓh‘jÍhœjáh�hàhƒ}rÔ(h…]hŽ]h‡]h†]h�]uh¤Môh¦]rÕh¯X 0x68000000rÖ…�r×}rØ(h‚jÓh‘jÑubaubah�joubjb)�rÙ}rÚ(h‚Uhƒ}rÛ(h…]hŽ]h‡]h†]h�]uh‘j½h¦]rÜhÜ)�rÝ}rÞ(h‚X 0x48000000rßh‘jÙhœjáh�hàhƒ}rà(h…]hŽ]h‡]h†]h�]uh¤Môh¦]ráh¯X 0x48000000râ…�rã}rä(h‚jßh‘jÝubaubah�joubjb)�rå}ræ(h‚Uhƒ}rç(h…]hŽ]h‡]h†]h�]uh‘j½h¦]rèhÜ)�ré}rê(h‚X2 MBrëh‘jåhœjáh�hàhƒ}rì(h…]hŽ]h‡]h†]h�]uh¤Môh¦]ríh¯X2 MBrî…�rï}rð(h‚jëh‘jéubaubah�joubjb)�rñ}rò(h‚Uhƒ}ró(h…]hŽ]h‡]h†]h�]uh‘j½h¦]rôhÜ)�rõ}rö(h‚XL4PER1r÷h‘jñhœjáh�hàhƒ}rø(h…]hŽ]h‡]h†]h�]uh¤Môh¦]rùh¯XL4PER1rú…�rû}rü(h‚j÷h‘jõubaubah�joubeh�jˆubj])�rý}rþ(h‚Uhƒ}rÿ(h…]hŽ]h‡]h†]h�]uh‘jyh¦]r(jb)�r}r(h‚Uhƒ}r(h…]hŽ]h‡]h†]h�]uh‘jýh¦]rhÜ)�r}r(h‚X 0x68400000rh‘jhœjáh�hàhƒ}r(h…]hŽ]h‡]h†]h�]uh¤Möh¦]r h¯X 0x68400000r …�r }r (h‚jh‘jubaubah�joubjb)�r }r(h‚Uhƒ}r(h…]hŽ]h‡]h†]h�]uh‘jýh¦]rhÜ)�r}r(h‚X 0x68400000rh‘j hœjáh�hàhƒ}r(h…]hŽ]h‡]h†]h�]uh¤Möh¦]rh¯X 0x68400000r…�r}r(h‚jh‘jubaubah�joubjb)�r}r(h‚Uhƒ}r(h…]hŽ]h‡]h†]h�]uh‘jýh¦]rhÜ)�r}r(h‚X 0x48400000rh‘jhœjáh�hàhƒ}r (h…]hŽ]h‡]h†]h�]uh¤Möh¦]r!h¯X 0x48400000r"…�r#}r$(h‚jh‘jubaubah�joubjb)�r%}r&(h‚Uhƒ}r'(h…]hŽ]h‡]h†]h�]uh‘jýh¦]r(hÜ)�r)}r*(h‚X4 MBr+h‘j%hœjáh�hàhƒ}r,(h…]hŽ]h‡]h†]h�]uh¤Möh¦]r-h¯X4 MBr.…�r/}r0(h‚j+h‘j)ubaubah�joubjb)�r1}r2(h‚Uhƒ}r3(h…]hŽ]h‡]h†]h�]uh‘jýh¦]r4hÜ)�r5}r6(h‚XL4PER2r7h‘j1hœjáh�hàhƒ}r8(h…]hŽ]h‡]h†]h�]uh¤Möh¦]r9h¯XL4PER2r:…�r;}r<(h‚j7h‘j5ubaubah�joubeh�jˆubj])�r=}r>(h‚Uhƒ}r?(h…]hŽ]h‡]h†]h�]uh‘jyh¦]r@(jb)�rA}rB(h‚Uhƒ}rC(h…]hŽ]h‡]h†]h�]uh‘j=h¦]rDhÜ)�rE}rF(h‚X 0x68800000rGh‘jAhœjáh�hàhƒ}rH(h…]hŽ]h‡]h†]h�]uh¤Møh¦]rIh¯X 0x68800000rJ…�rK}rL(h‚jGh‘jEubaubah�joubjb)�rM}rN(h‚Uhƒ}rO(h…]hŽ]h‡]h†]h�]uh‘j=h¦]rPhÜ)�rQ}rR(h‚X 0x68800000rSh‘jMhœjáh�hàhƒ}rT(h…]hŽ]h‡]h†]h�]uh¤Møh¦]rUh¯X 0x68800000rV…�rW}rX(h‚jSh‘jQubaubah�joubjb)�rY}rZ(h‚Uhƒ}r[(h…]hŽ]h‡]h†]h�]uh‘j=h¦]r\hÜ)�r]}r^(h‚X 0x48800000r_h‘jYhœjáh�hàhƒ}r`(h…]hŽ]h‡]h†]h�]uh¤Møh¦]rah¯X 0x48800000rb…�rc}rd(h‚j_h‘j]ubaubah�joubjb)�re}rf(h‚Uhƒ}rg(h…]hŽ]h‡]h†]h�]uh‘j=h¦]rhhÜ)�ri}rj(h‚X8 MBrkh‘jehœjáh�hàhƒ}rl(h…]hŽ]h‡]h†]h�]uh¤Møh¦]rmh¯X8 MBrn…�ro}rp(h‚jkh‘jiubaubah�joubjb)�rq}rr(h‚Uhƒ}rs(h…]hŽ]h‡]h†]h�]uh‘j=h¦]rthÜ)�ru}rv(h‚XL4PER3rwh‘jqhœjáh�hàhƒ}rx(h…]hŽ]h‡]h†]h�]uh¤Møh¦]ryh¯XL4PER3rz…�r{}r|(h‚jwh‘juubaubah�joubeh�jˆubj])�r}}r~(h‚Uhƒ}r(h…]hŽ]h‡]h†]h�]uh‘jyh¦]r€(jb)�r�}r‚(h‚Uhƒ}rƒ(h…]hŽ]h‡]h†]h�]uh‘j}h¦]r„hÜ)�r…}r†(h‚X 0x74000000r‡h‘j�hœjáh�hàhƒ}rˆ(h…]hŽ]h‡]h†]h�]uh¤Múh¦]r‰h¯X 0x74000000rŠ…�r‹}rŒ(h‚j‡h‘j…ubaubah�joubjb)�r�}rŽ(h‚Uhƒ}r�(h…]hŽ]h‡]h†]h�]uh‘j}h¦]r�hÜ)�r‘}r’(h‚X 0x74000000r“h‘j�hœjáh�hàhƒ}r”(h…]hŽ]h‡]h†]h�]uh¤Múh¦]r•h¯X 0x74000000r–…�r—}r˜(h‚j“h‘j‘ubaubah�joubjb)�r™}rš(h‚Uhƒ}r›(h…]hŽ]h‡]h†]h�]uh‘j}h¦]rœhÜ)�r�}rž(h‚X 0x54000000rŸh‘j™hœjáh�hàhƒ}r (h…]hŽ]h‡]h†]h�]uh¤Múh¦]r¡h¯X 0x54000000r¢…�r£}r¤(h‚jŸh‘j�ubaubah�joubjb)�r¥}r¦(h‚Uhƒ}r§(h…]hŽ]h‡]h†]h�]uh‘j}h¦]r¨hÜ)�r©}rª(h‚X16 MBr«h‘j¥hœjáh�hàhƒ}r¬(h…]hŽ]h‡]h†]h�]uh¤Múh¦]r­h¯X16 MBr®…�r¯}r°(h‚j«h‘j©ubaubah�joubjb)�r±}r²(h‚Uhƒ}r³(h…]hŽ]h‡]h†]h�]uh‘j}h¦]r´hÜ)�rµ}r¶(h‚XL3\_INSTR + CT\_TBRh‘j±hœjáh�hàhƒ}r·(h…]hŽ]h‡]h†]h�]uh¤Múh¦]r¸h¯XL3_INSTR + CT_TBRr¹…�rº}r»(h‚XL3\_INSTR + CT\_TBRh‘jµubaubah�joubeh�jˆubeh�jWubeh�jXubaubhÜ)�r¼}r½(h‚X!Example: Accessing UART5 from IPUr¾h‘jÏhœjáh�hàhƒ}r¿(h…]hŽ]h‡]h†]h�]uh¤Mýh¥hh¦]rÀh¯X!Example: Accessing UART5 from IPUrÁ…�rÂ}rÃ(h‚j¾h‘j¼ubaubj6)�rÄ}rÅ(h‚Uh‘jÏhœjáh�j9hƒ}rÆ(j;U.h†]h‡]h…]j<UhŽ]h�]j=j>uh¤Mÿh¥hh¦]rÇ(j@)�rÈ}rÉ(h‚XŠFor this example, it's assumed the pin-muxing was already setup in the bootloader. If that's not the case, you would need to do that here.h‘jÄhœjáh�jChƒ}rÊ(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rËhÜ)�rÌ}rÍ(h‚XŠFor this example, it's assumed the pin-muxing was already setup in the bootloader. If that's not the case, you would need to do that here.rÎh‘jÈhœjáh�hàhƒ}rÏ(h…]hŽ]h‡]h†]h�]uh¤Mÿh¦]rÐh¯XŠFor this example, it's assumed the pin-muxing was already setup in the bootloader. If that's not the case, you would need to do that here.rÑ…�rÒ}rÓ(h‚jÎh‘jÌubaubaubj@)�rÔ}rÕ(h‚XThe UART5 module needs to be enabled via the CM\_L4PER\_UART5\_CLKCTRL register. This is located at physical address 0x4A009870. So from the M4 we would program this register at virtual address 0x6A009870. Writing a value of 2 to this register will enable the peripheral.h‘jÄhœjáh�jChƒ}rÖ(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r×hÜ)�rØ}rÙ(h‚XThe UART5 module needs to be enabled via the CM\_L4PER\_UART5\_CLKCTRL register. This is located at physical address 0x4A009870. So from the M4 we would program this register at virtual address 0x6A009870. Writing a value of 2 to this register will enable the peripheral.h‘jÔhœjáh�hàhƒ}rÚ(h…]hŽ]h‡]h†]h�]uh¤Mh¦]rÛh¯X The UART5 module needs to be enabled via the CM_L4PER_UART5_CLKCTRL register. This is located at physical address 0x4A009870. So from the M4 we would program this register at virtual address 0x6A009870. Writing a value of 2 to this register will enable the peripheral.rÜ…�rÝ}rÞ(h‚XThe UART5 module needs to be enabled via the CM\_L4PER\_UART5\_CLKCTRL register. This is located at physical address 0x4A009870. So from the M4 we would program this register at virtual address 0x6A009870. Writing a value of 2 to this register will enable the peripheral.h‘jØubaubaubj@)�rß}rà(h‚XÕAfter completing the previous step, the UART5 registers will become accessible. Normally UART5 is accessible at physical base address 0x48066000. This would correspondingly be accessed from the IPU at 0x68066000. h‘jÄhœjáh�jChƒ}rá(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]râhÜ)�rã}rä(h‚XÔAfter completing the previous step, the UART5 registers will become accessible. Normally UART5 is accessible at physical base address 0x48066000. This would correspondingly be accessed from the IPU at 0x68066000.råh‘jßhœjáh�hàhƒ}ræ(h…]hŽ]h‡]h†]h�]uh¤Mh¦]rçh¯XÔAfter completing the previous step, the UART5 registers will become accessible. Normally UART5 is accessible at physical base address 0x48066000. This would correspondingly be accessed from the IPU at 0x68066000.rè…�ré}rê(h‚jåh‘jãubaubaubeubh’)�rë}rì(h‚XPower Managementríh‘jÏhœjáh�hÓhƒ}rî(h†]rïUpower-managementrðah‡]h…]hŽ]h�]rñhauh¤Nh¥hh¦]ròh¯XPower Managementró…�rô}rõ(h‚jíh‘jëubaubhÜ)�rö}r÷(h‚X@The IPUs and DSPs auto-idle by default. This can prevent you from being able to connect to the device using JTAG or from accessing local memory via devmem2. There are some options sprinkled throughout sysfs that are needed in order to force these subsystems on, as is sometimes needed for development and debug purposes.røh‘jÏhœjáh�hàhƒ}rù(h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]rúh¯X@The IPUs and DSPs auto-idle by default. This can prevent you from being able to connect to the device using JTAG or from accessing local memory via devmem2. There are some options sprinkled throughout sysfs that are needed in order to force these subsystems on, as is sometimes needed for development and debug purposes.rû…�rü}rý(h‚jøh‘jöubaubhÜ)�rþ}rÿ(h‚XzThere are some hard-coded device names that originate in the device tree (dra7.dtsi) that are needed for these operations:rh‘jÏhœjáh�hàhƒ}r(h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]rh¯XzThere are some hard-coded device names that originate in the device tree (dra7.dtsi) that are needed for these operations:r…�r}r(h‚jh‘jþubaubjB)�r}r(h‚Uh‘jÏhœjáh�jEhƒ}r(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r jH)�r }r (h‚Uhƒ}r (h†]h‡]h…]hŽ]h�]UcolsKuh‘jh¦]r (jM)�r}r(h‚Uhƒ}r(h†]h‡]h…]hŽ]h�]UcolwidthKuh‘j h¦]h�jQubjM)�r}r(h‚Uhƒ}r(h†]h‡]h…]hŽ]h�]UcolwidthKuh‘j h¦]h�jQubjM)�r}r(h‚Uhƒ}r(h†]h‡]h…]hŽ]h�]UcolwidthKuh‘j h¦]h�jQubjX)�r}r(h‚Uhƒ}r(h…]hŽ]h‡]h†]h�]uh‘j h¦]rj])�r}r(h‚Uhƒ}r(h…]hŽ]h‡]h†]h�]uh‘jh¦]r(jb)�r}r (h‚Uhƒ}r!(h…]hŽ]h‡]h†]h�]uh‘jh¦]r"hÜ)�r#}r$(h‚X Remote Corer%h‘jhœjáh�hàhƒ}r&(h…]hŽ]h‡]h†]h�]uh¤Mh¦]r'h¯X Remote Corer(…�r)}r*(h‚j%h‘j#ubaubah�joubjb)�r+}r,(h‚Uhƒ}r-(h…]hŽ]h‡]h†]h�]uh‘jh¦]r.hÜ)�r/}r0(h‚XDefinition in dra7.dtsir1h‘j+hœjáh�hàhƒ}r2(h…]hŽ]h‡]h†]h�]uh¤Mh¦]r3h¯XDefinition in dra7.dtsir4…�r5}r6(h‚j1h‘j/ubaubah�joubjb)�r7}r8(h‚Uhƒ}r9(h…]hŽ]h‡]h†]h�]uh‘jh¦]r:hÜ)�r;}r<(h‚XSystem FS Namer=h‘j7hœjáh�hàhƒ}r>(h…]hŽ]h‡]h†]h�]uh¤Mh¦]r?h¯XSystem FS Namer@…�rA}rB(h‚j=h‘j;ubaubah�joubeh�jˆubah�j‰ubjŠ)�rC}rD(h‚Uhƒ}rE(h…]hŽ]h‡]h†]h�]uh‘j h¦]rF(j])�rG}rH(h‚Uhƒ}rI(h…]hŽ]h‡]h†]h�]uh‘jCh¦]rJ(jb)�rK}rL(h‚Uhƒ}rM(h…]hŽ]h‡]h†]h�]uh‘jGh¦]rNhÜ)�rO}rP(h‚XIPU1rQh‘jKhœjáh�hàhƒ}rR(h…]hŽ]h‡]h†]h�]uh¤Mh¦]rSh¯XIPU1rT…�rU}rV(h‚jQh‘jOubaubah�joubjb)�rW}rX(h‚Uhƒ}rY(h…]hŽ]h‡]h†]h�]uh‘jGh¦]rZhÜ)�r[}r\(h‚X ipu@58820000r]h‘jWhœjáh�hàhƒ}r^(h…]hŽ]h‡]h†]h�]uh¤Mh¦]r_j))�r`}ra(h‚j]hƒ}rb(UrefuriXmailto:ipu@58820000h†]h‡]h…]hŽ]h�]uh‘j[h¦]rch¯X ipu@58820000rd…�re}rf(h‚Uh‘j`ubah�j2ubaubah�joubjb)�rg}rh(h‚Uhƒ}ri(h…]hŽ]h‡]h†]h�]uh‘jGh¦]rjhÜ)�rk}rl(h‚X 58820000.ipurmh‘jghœjáh�hàhƒ}rn(h…]hŽ]h‡]h†]h�]uh¤Mh¦]roh¯X 58820000.ipurp…�rq}rr(h‚jmh‘jkubaubah�joubeh�jˆubj])�rs}rt(h‚Uhƒ}ru(h…]hŽ]h‡]h†]h�]uh‘jCh¦]rv(jb)�rw}rx(h‚Uhƒ}ry(h…]hŽ]h‡]h†]h�]uh‘jsh¦]rzhÜ)�r{}r|(h‚XIPU2r}h‘jwhœjáh�hàhƒ}r~(h…]hŽ]h‡]h†]h�]uh¤Mh¦]rh¯XIPU2r€…�r�}r‚(h‚j}h‘j{ubaubah�joubjb)�rƒ}r„(h‚Uhƒ}r…(h…]hŽ]h‡]h†]h�]uh‘jsh¦]r†hÜ)�r‡}rˆ(h‚X ipu@55020000r‰h‘jƒhœjáh�hàhƒ}rŠ(h…]hŽ]h‡]h†]h�]uh¤Mh¦]r‹j))�rŒ}r�(h‚j‰hƒ}rŽ(UrefuriXmailto:ipu@55020000h†]h‡]h…]hŽ]h�]uh‘j‡h¦]r�h¯X ipu@55020000r�…�r‘}r’(h‚Uh‘jŒubah�j2ubaubah�joubjb)�r“}r”(h‚Uhƒ}r•(h…]hŽ]h‡]h†]h�]uh‘jsh¦]r–hÜ)�r—}r˜(h‚X 55020000.ipur™h‘j“hœjáh�hàhƒ}rš(h…]hŽ]h‡]h†]h�]uh¤Mh¦]r›h¯X 55020000.ipurœ…�r�}rž(h‚j™h‘j—ubaubah�joubeh�jˆubj])�rŸ}r (h‚Uhƒ}r¡(h…]hŽ]h‡]h†]h�]uh‘jCh¦]r¢(jb)�r£}r¤(h‚Uhƒ}r¥(h…]hŽ]h‡]h†]h�]uh‘jŸh¦]r¦hÜ)�r§}r¨(h‚XDSP1r©h‘j£hœjáh�hàhƒ}rª(h…]hŽ]h‡]h†]h�]uh¤Mh¦]r«h¯XDSP1r¬…�r­}r®(h‚j©h‘j§ubaubah�joubjb)�r¯}r°(h‚Uhƒ}r±(h…]hŽ]h‡]h†]h�]uh‘jŸh¦]r²hÜ)�r³}r´(h‚X dsp@40800000rµh‘j¯hœjáh�hàhƒ}r¶(h…]hŽ]h‡]h†]h�]uh¤Mh¦]r·j))�r¸}r¹(h‚jµhƒ}rº(UrefuriXmailto:dsp@40800000h†]h‡]h…]hŽ]h�]uh‘j³h¦]r»h¯X dsp@40800000r¼…�r½}r¾(h‚Uh‘j¸ubah�j2ubaubah�joubjb)�r¿}rÀ(h‚Uhƒ}rÁ(h…]hŽ]h‡]h†]h�]uh‘jŸh¦]rÂhÜ)�rÃ}rÄ(h‚X 40800000.dsprÅh‘j¿hœjáh�hàhƒ}rÆ(h…]hŽ]h‡]h†]h�]uh¤Mh¦]rÇh¯X 40800000.dsprÈ…�rÉ}rÊ(h‚jÅh‘jÃubaubah�joubeh�jˆubj])�rË}rÌ(h‚Uhƒ}rÍ(h…]hŽ]h‡]h†]h�]uh‘jCh¦]rÎ(jb)�rÏ}rÐ(h‚Uhƒ}rÑ(h…]hŽ]h‡]h†]h�]uh‘jËh¦]rÒhÜ)�rÓ}rÔ(h‚XDSP2rÕh‘jÏhœjáh�hàhƒ}rÖ(h…]hŽ]h‡]h†]h�]uh¤M!h¦]r×h¯XDSP2rØ…�rÙ}rÚ(h‚jÕh‘jÓubaubah�joubjb)�rÛ}rÜ(h‚Uhƒ}rÝ(h…]hŽ]h‡]h†]h�]uh‘jËh¦]rÞhÜ)�rß}rà(h‚X dsp@41000000ráh‘jÛhœjáh�hàhƒ}râ(h…]hŽ]h‡]h†]h�]uh¤M!h¦]rãj))�rä}rå(h‚jáhƒ}ræ(UrefuriXmailto:dsp@41000000h†]h‡]h…]hŽ]h�]uh‘jßh¦]rçh¯X dsp@41000000rè…�ré}rê(h‚Uh‘jäubah�j2ubaubah�joubjb)�rë}rì(h‚Uhƒ}rí(h…]hŽ]h‡]h†]h�]uh‘jËh¦]rîhÜ)�rï}rð(h‚X 41000000.dsprñh‘jëhœjáh�hàhƒ}rò(h…]hŽ]h‡]h†]h�]uh¤M!h¦]róh¯X 41000000.dsprô…�rõ}rö(h‚jñh‘jïubaubah�joubeh�jˆubj])�r÷}rø(h‚Uhƒ}rù(h…]hŽ]h‡]h†]h�]uh‘jCh¦]rú(jb)�rû}rü(h‚Uhƒ}rý(h…]hŽ]h‡]h†]h�]uh‘j÷h¦]rþhÜ)�rÿ}r(h‚X ICSS1-PRU0rh‘jûhœjáh�hàhƒ}r(h…]hŽ]h‡]h†]h�]uh¤M#h¦]rh¯X ICSS1-PRU0r…�r}r(h‚jh‘jÿubaubah�joubjb)�r}r(h‚Uhƒ}r (h…]hŽ]h‡]h†]h�]uh‘j÷h¦]r hÜ)�r }r (h‚X pru@4b234000r h‘jhœjáh�hàhƒ}r(h…]hŽ]h‡]h†]h�]uh¤M#h¦]rj))�r}r(h‚j hƒ}r(UrefuriXmailto:pru@4b234000h†]h‡]h…]hŽ]h�]uh‘j h¦]rh¯X pru@4b234000r…�r}r(h‚Uh‘jubah�j2ubaubah�joubjb)�r}r(h‚Uhƒ}r(h…]hŽ]h‡]h†]h�]uh‘j÷h¦]rhÜ)�r}r(h‚X 4b234000.pru0rh‘jhœjáh�hàhƒ}r(h…]hŽ]h‡]h†]h�]uh¤M#h¦]rh¯X 4b234000.pru0r …�r!}r"(h‚jh‘jubaubah�joubeh�jˆubj])�r#}r$(h‚Uhƒ}r%(h…]hŽ]h‡]h†]h�]uh‘jCh¦]r&(jb)�r'}r((h‚Uhƒ}r)(h…]hŽ]h‡]h†]h�]uh‘j#h¦]r*hÜ)�r+}r,(h‚X ICSS1-PRU1r-h‘j'hœjáh�hàhƒ}r.(h…]hŽ]h‡]h†]h�]uh¤M%h¦]r/h¯X ICSS1-PRU1r0…�r1}r2(h‚j-h‘j+ubaubah�joubjb)�r3}r4(h‚Uhƒ}r5(h…]hŽ]h‡]h†]h�]uh‘j#h¦]r6hÜ)�r7}r8(h‚X pru@4b238000r9h‘j3hœjáh�hàhƒ}r:(h…]hŽ]h‡]h†]h�]uh¤M%h¦]r;j))�r<}r=(h‚j9hƒ}r>(UrefuriXmailto:pru@4b238000h†]h‡]h…]hŽ]h�]uh‘j7h¦]r?h¯X pru@4b238000r@…�rA}rB(h‚Uh‘j<ubah�j2ubaubah�joubjb)�rC}rD(h‚Uhƒ}rE(h…]hŽ]h‡]h†]h�]uh‘j#h¦]rFhÜ)�rG}rH(h‚X 4b238000.pru1rIh‘jChœjáh�hàhƒ}rJ(h…]hŽ]h‡]h†]h�]uh¤M%h¦]rKh¯X 4b238000.pru1rL…�rM}rN(h‚jIh‘jGubaubah�joubeh�jˆubj])�rO}rP(h‚Uhƒ}rQ(h…]hŽ]h‡]h†]h�]uh‘jCh¦]rR(jb)�rS}rT(h‚Uhƒ}rU(h…]hŽ]h‡]h†]h�]uh‘jOh¦]rVhÜ)�rW}rX(h‚X ICSS2-PRU0rYh‘jShœjáh�hàhƒ}rZ(h…]hŽ]h‡]h†]h�]uh¤M'h¦]r[h¯X ICSS2-PRU0r\…�r]}r^(h‚jYh‘jWubaubah�joubjb)�r_}r`(h‚Uhƒ}ra(h…]hŽ]h‡]h†]h�]uh‘jOh¦]rbhÜ)�rc}rd(h‚X pru@4b2b4000reh‘j_hœjáh�hàhƒ}rf(h…]hŽ]h‡]h†]h�]uh¤M'h¦]rgj))�rh}ri(h‚jehƒ}rj(UrefuriXmailto:pru@4b2b4000h†]h‡]h…]hŽ]h�]uh‘jch¦]rkh¯X pru@4b2b4000rl…�rm}rn(h‚Uh‘jhubah�j2ubaubah�joubjb)�ro}rp(h‚Uhƒ}rq(h…]hŽ]h‡]h†]h�]uh‘jOh¦]rrhÜ)�rs}rt(h‚X 4b2b4000.pru0ruh‘johœjáh�hàhƒ}rv(h…]hŽ]h‡]h†]h�]uh¤M'h¦]rwh¯X 4b2b4000.pru0rx…�ry}rz(h‚juh‘jsubaubah�joubeh�jˆubj])�r{}r|(h‚Uhƒ}r}(h…]hŽ]h‡]h†]h�]uh‘jCh¦]r~(jb)�r}r€(h‚Uhƒ}r�(h…]hŽ]h‡]h†]h�]uh‘j{h¦]r‚hÜ)�rƒ}r„(h‚X ICSS2-PRU1r…h‘jhœjáh�hàhƒ}r†(h…]hŽ]h‡]h†]h�]uh¤M)h¦]r‡h¯X ICSS2-PRU1rˆ…�r‰}rŠ(h‚j…h‘jƒubaubah�joubjb)�r‹}rŒ(h‚Uhƒ}r�(h…]hŽ]h‡]h†]h�]uh‘j{h¦]rŽhÜ)�r�}r�(h‚X pru@4b2b8000r‘h‘j‹hœjáh�hàhƒ}r’(h…]hŽ]h‡]h†]h�]uh¤M)h¦]r“j))�r”}r•(h‚j‘hƒ}r–(UrefuriXmailto:pru@4b2b8000h†]h‡]h…]hŽ]h�]uh‘j�h¦]r—h¯X pru@4b2b8000r˜…�r™}rš(h‚Uh‘j”ubah�j2ubaubah�joubjb)�r›}rœ(h‚Uhƒ}r�(h…]hŽ]h‡]h†]h�]uh‘j{h¦]ržhÜ)�rŸ}r (h‚X 4b2b8000.pru1r¡h‘j›hœjáh�hàhƒ}r¢(h…]hŽ]h‡]h†]h�]uh¤M)h¦]r£h¯X 4b2b8000.pru1r¤…�r¥}r¦(h‚j¡h‘jŸubaubah�joubeh�jˆubeh�jWubeh�jXubaubhÜ)�r§}r¨(h‚XdTo map these System FS names to the associated remoteproc entry, you can run the following commands:r©h‘jÏhœjáh�hàhƒ}rª(h…]hŽ]h‡]h†]h�]uh¤M,h¥hh¦]r«h¯XdTo map these System FS names to the associated remoteproc entry, you can run the following commands:r¬…�r­}r®(h‚j©h‘j§ubaubj¡)�r¯}r°(h‚X{root@am57xx-evm:~# ls -l /sys/kernel/debug/remoteproc/ root@am57xx-evm:~# cat /sys/kernel/debug/remoteproc/remoteproc*/nameh‘jÏhœjáh�j¤hƒ}r±(hÊhËh†]h‡]h…]hŽ]h�]uh¤Móh¥hh¦]r²h¯X{root@am57xx-evm:~# ls -l /sys/kernel/debug/remoteproc/ root@am57xx-evm:~# cat /sys/kernel/debug/remoteproc/remoteproc*/namer³…�r´}rµ(h‚Uh‘j¯ubaubhÜ)�r¶}r·(h‚XqThe results of the commands will be a one-to-one mapping. For example, 58820000.ipu corresponds with remoteproc0.r¸h‘jÏhœjáh�hàhƒ}r¹(h…]hŽ]h‡]h†]h�]uh¤M4h¥hh¦]rºh¯XqThe results of the commands will be a one-to-one mapping. For example, 58820000.ipu corresponds with remoteproc0.r»…�r¼}r½(h‚j¸h‘j¶ubaubhÜ)�r¾}r¿(h‚X7Similarly, to see the power state of each of the cores:rÀh‘jÏhœjáh�hàhƒ}rÁ(h…]hŽ]h‡]h†]h�]uh¤M7h¥hh¦]rÂh¯X7Similarly, to see the power state of each of the cores:rÃ…�rÄ}rÅ(h‚jÀh‘j¾ubaubj¡)�rÆ}rÇ(h‚X>root@am57xx-evm:~# cat /sys/class/remoteproc/remoteproc*/stateh‘jÏhœjáh�j¤hƒ}rÈ(hÊhËh†]h‡]h…]hŽ]h�]uh¤Mýh¥hh¦]rÉh¯X>root@am57xx-evm:~# cat /sys/class/remoteproc/remoteproc*/staterÊ…�rË}rÌ(h‚Uh‘jÆubaubhÜ)�rÍ}rÎ(h‚XþThe state can be suspended, running, offline, etc. You can only attach JTAG if the state is "running". If it shows as "suspended" then you must force it to run. For example, let's say DSP0 is "suspended". You can run the following command to force it on:rÏh‘jÏhœjáh�hàhƒ}rÐ(h…]hŽ]h‡]h†]h�]uh¤M=h¥hh¦]rÑh¯XþThe state can be suspended, running, offline, etc. You can only attach JTAG if the state is "running". If it shows as "suspended" then you must force it to run. For example, let's say DSP0 is "suspended". You can run the following command to force it on:rÒ…�rÓ}rÔ(h‚jÏh‘jÍubaubj¡)�rÕ}rÖ(h‚XQroot@am57xx-evm:~# echo on > /sys/bus/platform/devices/40800000.dsp/power/controlh‘jÏhœjáh�j¤hƒ}r×(hÊhËh†]h‡]h…]hŽ]h�]uh¤Mh¥hh¦]rØh¯XQroot@am57xx-evm:~# echo on > /sys/bus/platform/devices/40800000.dsp/power/controlrÙ…�rÚ}rÛ(h‚Uh‘jÕubaubhÜ)�rÜ}rÝ(h‚XxThe same is true for any of the cores, but replace 40800000.dsp with the associated System FS name from the chart above.rÞh‘jÏhœjáh�hàhƒ}rß(h…]hŽ]h‡]h†]h�]uh¤MFh¥hh¦]ràh¯XxThe same is true for any of the cores, but replace 40800000.dsp with the associated System FS name from the chart above.rá…�râ}rã(h‚jÞh‘jÜubaubh’)�rä}rå(h‚X<Adding IPC to an Existing TI-RTOS Application on slave coresræh‘jÏhœjáh�hÓhƒ}rç(h†]rèUuh¤Mch¥hh¦]r(j@)�r}r(h‚XZBuild and run the out-of-box LED blink example on the EVM using Code Composer Studio (CCS)h‘jhœjáh�jChƒ}r(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rhÜ)�r }r!(h‚XZBuild and run the out-of-box LED blink example on the EVM using Code Composer Studio (CCS)r"h‘jhœjáh�hàhƒ}r#(h…]hŽ]h‡]h†]h�]uh¤Mch¦]r$h¯XZBuild and run the out-of-box LED blink example on the EVM using Code Composer Studio (CCS)r%…�r&}r'(h‚j"h‘j ubaubaubj@)�r(}r)(h‚XTake the ex02\_message example from the IPC software bundle and turn it into a CCS project. Build it and modify the Linux startup code to use this new image. This is just a sanity check step to make sure we can build the IPC examples in CCS and have them run at boot up on the EVM.h‘jhœjáh�jChƒ}r*(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r+hÜ)�r,}r-(h‚XTake the ex02\_message example from the IPC software bundle and turn it into a CCS project. Build it and modify the Linux startup code to use this new image. This is just a sanity check step to make sure we can build the IPC examples in CCS and have them run at boot up on the EVM.h‘j(hœjáh�hàhƒ}r.(h…]hŽ]h‡]h†]h�]uh¤Meh¦]r/h¯XTake the ex02_message example from the IPC software bundle and turn it into a CCS project. Build it and modify the Linux startup code to use this new image. This is just a sanity check step to make sure we can build the IPC examples in CCS and have them run at boot up on the EVM.r0…�r1}r2(h‚XTake the ex02\_message example from the IPC software bundle and turn it into a CCS project. Build it and modify the Linux startup code to use this new image. This is just a sanity check step to make sure we can build the IPC examples in CCS and have them run at boot up on the EVM.h‘j,ubaubaubj@)�r3}r4(h‚X In CCS, make a clone of the out-of-box LED example and rename it to denote it's the IPC version of the example. Then using the ex02\_messageq example as a reference, add in the IPC pieces to the LED example. Build from CCS then add it to the Linux firmware folder. h‘jhœjáh�jChƒ}r5(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r6hÜ)�r7}r8(h‚XIn CCS, make a clone of the out-of-box LED example and rename it to denote it's the IPC version of the example. Then using the ex02\_messageq example as a reference, add in the IPC pieces to the LED example. Build from CCS then add it to the Linux firmware folder.h‘j3hœjáh�hàhƒ}r9(h…]hŽ]h‡]h†]h�]uh¤Mjh¦]r:h¯XIn CCS, make a clone of the out-of-box LED example and rename it to denote it's the IPC version of the example. Then using the ex02_messageq example as a reference, add in the IPC pieces to the LED example. Build from CCS then add it to the Linux firmware folder.r;…�r<}r=(h‚XIn CCS, make a clone of the out-of-box LED example and rename it to denote it's the IPC version of the example. Then using the ex02\_messageq example as a reference, add in the IPC pieces to the LED example. Build from CCS then add it to the Linux firmware folder.h‘j7ubaubaubeubh’)�r>}r?(h‚X&Running LED Blink PDK Example from CCSr@h‘jÏhœjáh�hÓhƒ}rA(h†]rBU&running-led-blink-pdk-example-from-ccsrCah‡]h…]hŽ]h�]rDh^auh¤Nh¥hh¦]rEh¯X&Running LED Blink PDK Example from CCSrF…�rG}rH(h‚j@h‘j>ubaubhÜ)�rI}rJ(h‚X†TODO - Fill this section in with instructions on how to run the LED blink example using JTAG and CCS after the board has booted Linux.rKh‘jÏhœjáh�hàhƒ}rL(h…]hŽ]h‡]h†]h�]uh¤Mrh¥hh¦]rMh¯X†TODO - Fill this section in with instructions on how to run the LED blink example using JTAG and CCS after the board has booted Linux.rN…�rO}rP(h‚jKh‘jIubaubj)�rQ}rR(h‚XÚSome edits were made to the LED blink example to allow it to run in a Linux environment, specifically, removed the GPIO interrupts and then added a Clock object to call the LED GPIO toggle function on a periodic bases.h‘jÏhœjáh�jhƒ}rS(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rThÜ)�rU}rV(h‚XÚSome edits were made to the LED blink example to allow it to run in a Linux environment, specifically, removed the GPIO interrupts and then added a Clock object to call the LED GPIO toggle function on a periodic bases.rWh‘jQhœjáh�hàhƒ}rX(h…]hŽ]h‡]h†]h�]uh¤Mvh¦]rYh¯XÚSome edits were made to the LED blink example to allow it to run in a Linux environment, specifically, removed the GPIO interrupts and then added a Clock object to call the LED GPIO toggle function on a periodic bases.rZ…�r[}r\(h‚jWh‘jUubaubaubhþ)�r]}r^(h‚Uh‘jÏhœjáh�jhƒ}r_(h…]hŽ]h‡]h†]h�]uh¤M{h¥hh¦]r`j)�ra}rb(h‚UjKh‘j]hœjáh�h¤hƒ}rc(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubh’)�rd}re(h‚X2Make CCS project out of ex02\_messageq IPC exampleh‘jÏhœjáh�hÓhƒ}rf(h†]rgU1make-ccs-project-out-of-ex02-messageq-ipc-examplerhah‡]h…]hŽ]h�]rih,auh¤Nh¥hh¦]rjh¯X1Make CCS project out of ex02_messageq IPC examplerk…�rl}rm(h‚X2Make CCS project out of ex02\_messageq IPC exampleh‘jdubaubhÜ)�rn}ro(h‚XoTODO - fill this section in with instructions on how to make a CCS project out of the IPC example source files.rph‘jÏhœjáh�hàhƒ}rq(h…]hŽ]h‡]h†]h�]uh¤M€h¥hh¦]rrh¯XoTODO - fill this section in with instructions on how to make a CCS project out of the IPC example source files.rs…�rt}ru(h‚jph‘jnubaubhþ)�rv}rw(h‚Uh‘jÏhœjáh�jhƒ}rx(h…]hŽ]h‡]h†]h�]uh¤Mƒh¥hh¦]ryj)�rz}r{(h‚UjKh‘jvhœjáh�h¤hƒ}r|(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubh’)�r}}r~(h‚X Add IPC to the LED Blink Examplerh‘jÏhœjáh�hÓhƒ}r€(h†]r�U add-ipc-to-the-led-blink-exampler‚ah‡]h…]hŽ]h�]rƒh]auh¤Nh¥hh¦]r„h¯X Add IPC to the LED Blink Exampler……�r†}r‡(h‚jh‘j}ubaubhÜ)�rˆ}r‰(h‚X¦The first step is to clone our out-of-box LED blink CCS project and rename it to denote it's using IPC. The easiest way to do this is using CCS. Here are the steps...rŠh‘jÏhœjáh�hàhƒ}r‹(h…]hŽ]h‡]h†]h�]uh¤Mˆh¥hh¦]rŒh¯X¦The first step is to clone our out-of-box LED blink CCS project and rename it to denote it's using IPC. The easiest way to do this is using CCS. Here are the steps...r�…�rŽ}r�(h‚jŠh‘jˆubaubj)�r�}r‘(h‚Uh‘jÏhœjáh�j!hƒ}r’(j#X-h†]h‡]h…]hŽ]h�]uh¤MŒh¥hh¦]r“(j@)�r”}r•(h‚XíIn the **Edit** perspective, go into your **Project Explorer** window and right click on your GPIO\_LedBlink\_evmAM572x+c66xExampleProject project and select **copy** from the pop-up menu. Maske sure the project is not is a closed state.h‘j�hœjáh�jChƒ}r–(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r—hÜ)�r˜}r™(h‚XíIn the **Edit** perspective, go into your **Project Explorer** window and right click on your GPIO\_LedBlink\_evmAM572x+c66xExampleProject project and select **copy** from the pop-up menu. Maske sure the project is not is a closed state.h‘j”hœjáh�hàhƒ}rš(h…]hŽ]h‡]h†]h�]uh¤MŒh¦]r›(h¯XIn the rœ…�r�}rž(h‚XIn the h‘j˜ubj¯)�rŸ}r (h‚X**Edit**hƒ}r¡(h…]hŽ]h‡]h†]h�]uh‘j˜h¦]r¢h¯XEditr£…�r¤}r¥(h‚Uh‘jŸubah�j·ubh¯X perspective, go into your r¦…�r§}r¨(h‚X perspective, go into your h‘j˜ubj¯)�r©}rª(h‚X**Project Explorer**hƒ}r«(h…]hŽ]h‡]h†]h�]uh‘j˜h¦]r¬h¯XProject Explorerr­…�r®}r¯(h‚Uh‘j©ubah�j·ubh¯X^ window and right click on your GPIO_LedBlink_evmAM572x+c66xExampleProject project and select r°…�r±}r²(h‚X` window and right click on your GPIO\_LedBlink\_evmAM572x+c66xExampleProject project and select h‘j˜ubj¯)�r³}r´(h‚X**copy**hƒ}rµ(h…]hŽ]h‡]h†]h�]uh‘j˜h¦]r¶h¯Xcopyr·…�r¸}r¹(h‚Uh‘j³ubah�j·ubh¯XG from the pop-up menu. Maske sure the project is not is a closed state.rº…�r»}r¼(h‚XG from the pop-up menu. Maske sure the project is not is a closed state.h‘j˜ubeubaubj@)�r½}r¾(h‚XLRick click in and empty area of the project explorer window and select past.h‘j�hœjáh�jChƒ}r¿(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rÀhÜ)�rÁ}rÂ(h‚XLRick click in and empty area of the project explorer window and select past.rÃh‘j½hœjáh�hàhƒ}rÄ(h…]hŽ]h‡]h†]h�]uh¤M�h¦]rÅh¯XLRick click in and empty area of the project explorer window and select past.rÆ…�rÇ}rÈ(h‚jÃh‘jÁubaubaubj@)�rÉ}rÊ(h‚X‡A dialog box pops up, modify the name to denote it's using IPC. A good name is GPIO\_LedBlink\_evmAM572x+c66xExampleProjec\_with\_ipc. h‘j�hœjáh�jChƒ}rË(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rÌhÜ)�rÍ}rÎ(h‚X†A dialog box pops up, modify the name to denote it's using IPC. A good name is GPIO\_LedBlink\_evmAM572x+c66xExampleProjec\_with\_ipc.h‘jÉhœjáh�hàhƒ}rÏ(h…]hŽ]h‡]h†]h�]uh¤M’h¦]rÐh¯X‚A dialog box pops up, modify the name to denote it's using IPC. A good name is GPIO_LedBlink_evmAM572x+c66xExampleProjec_with_ipc.rÑ…�rÒ}rÓ(h‚X†A dialog box pops up, modify the name to denote it's using IPC. A good name is GPIO\_LedBlink\_evmAM572x+c66xExampleProjec\_with\_ipc.h‘jÍubaubaubeubhþ)�rÔ}rÕ(h‚Uh‘jÏhœjáh�jhƒ}rÖ(h…]hŽ]h‡]h†]h�]uh¤M•h¥hh¦]r×j)�rØ}rÙ(h‚UjKh‘jÔhœjáh�h¤hƒ}rÚ(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�rÛ}rÜ(h‚X­This is the project we'll be working with from here on. The next thing we want to do is select the proper RTSC platform and other components. To do this, follow these steps.rÝh‘jÏhœjáh�hàhƒ}rÞ(h…]hŽ]h‡]h†]h�]uh¤M—h¥hh¦]rßh¯X­This is the project we'll be working with from here on. The next thing we want to do is select the proper RTSC platform and other components. To do this, follow these steps.rà…�rá}râ(h‚jÝh‘jÛubaubj)�rã}rä(h‚Uh‘jÏhœjáh�j!hƒ}rå(j#X-h†]h‡]h…]hŽ]h�]uh¤M›h¥hh¦]ræ(j@)�rç}rè(h‚XkRight click on the GPIO\_LedBlink\_evmAM572x+c66xExampleProjec\_with\_ipc project and select **Properties**h‘jãhœjáh�jChƒ}ré(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rêhÜ)�rë}rì(h‚XkRight click on the GPIO\_LedBlink\_evmAM572x+c66xExampleProjec\_with\_ipc project and select **Properties**h‘jçhœjáh�hàhƒ}rí(h…]hŽ]h‡]h†]h�]uh¤M›h¦]rî(h¯XYRight click on the GPIO_LedBlink_evmAM572x+c66xExampleProjec_with_ipc project and select rï…�rð}rñ(h‚X]Right click on the GPIO\_LedBlink\_evmAM572x+c66xExampleProjec\_with\_ipc project and select h‘jëubj¯)�rò}ró(h‚X**Properties**hƒ}rô(h…]hŽ]h‡]h†]h�]uh‘jëh¦]rõh¯X Propertiesrö…�r÷}rø(h‚Uh‘jòubah�j·ubeubaubj@)�rù}rú(h‚X0In the left hand pane, click on **CCS General**.rûh‘jãhœjáh�jChƒ}rü(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rýhÜ)�rþ}rÿ(h‚jûh‘jùhœjáh�hàhƒ}r(h…]hŽ]h‡]h†]h�]uh¤Mžh¦]r(h¯X In the left hand pane, click on r…�r}r(h‚X In the left hand pane, click on h‘jþubj¯)�r}r(h‚X**CCS General**hƒ}r(h…]hŽ]h‡]h†]h�]uh‘jþh¦]rh¯X CCS Generalr …�r }r (h‚Uh‘jubah�j·ubh¯X.…�r }r (h‚X.h‘jþubeubaubj@)�r}r(h‚X1On the right hand side, click on the **RTSC** tabrh‘jãhœjáh�jChƒ}r(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rhÜ)�r}r(h‚jh‘jhœjáh�hàhƒ}r(h…]hŽ]h‡]h†]h�]uh¤MŸh¦]r(h¯X%On the right hand side, click on the r…�r}r(h‚X%On the right hand side, click on the h‘jubj¯)�r}r(h‚X**RTSC**hƒ}r(h…]hŽ]h‡]h†]h�]uh‘jh¦]rh¯XRTSCr…�r}r (h‚Uh‘jubah�j·ubh¯X tabr!…�r"}r#(h‚X tabh‘jubeubaubj@)�r$}r%(h‚X0For **XDCtools version:** select 3.32.0.06\_corer&h‘jãhœjáh�jChƒ}r'(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r(hÜ)�r)}r*(h‚j&h‘j$hœjáh�hàhƒ}r+(h…]hŽ]h‡]h†]h�]uh¤M h¦]r,(h¯XFor r-…�r.}r/(h‚XFor h‘j)ubj¯)�r0}r1(h‚X**XDCtools version:**hƒ}r2(h…]hŽ]h‡]h†]h�]uh‘j)h¦]r3h¯XXDCtools version:r4…�r5}r6(h‚Uh‘j0ubah�j·ubh¯X select 3.32.0.06_corer7…�r8}r9(h‚X select 3.32.0.06\_coreh‘j)ubeubaubj@)�r:}r;(h‚X…In the list of **Products and Repositories**, **check** the following... - IPC 3.43.2.04 - SYS/BIOS 6.45.1.29 - am57xx PDK 1.0.4 h‘jãhœNh�jChƒ}r<(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r=(hÜ)�r>}r?(h‚XHIn the list of **Products and Repositories**, **check** the following...h‘j:hœjáh�hàhƒ}r@(h…]hŽ]h‡]h†]h�]uh¤M¡h¦]rA(h¯XIn the list of rB…�rC}rD(h‚XIn the list of h‘j>ubj¯)�rE}rF(h‚X**Products and Repositories**hƒ}rG(h…]hŽ]h‡]h†]h�]uh‘j>h¦]rHh¯XProducts and RepositoriesrI…�rJ}rK(h‚Uh‘jEubah�j·ubh¯X, rL…�rM}rN(h‚X, h‘j>ubj¯)�rO}rP(h‚X **check**hƒ}rQ(h…]hŽ]h‡]h†]h�]uh‘j>h¦]rRh¯XcheckrS…�rT}rU(h‚Uh‘jOubah�j·ubh¯X the following...rV…�rW}rX(h‚X the following...h‘j>ubeubj)�rY}rZ(h‚Uhƒ}r[(j#X-h†]h‡]h…]hŽ]h�]uh‘j:h¦]r\(j@)�r]}r^(h‚X IPC 3.43.2.04r_hƒ}r`(h…]hŽ]h‡]h†]h�]uh‘jYh¦]rahÜ)�rb}rc(h‚j_h‘j]hœjáh�hàhƒ}rd(h…]hŽ]h‡]h†]h�]uh¤M£h¦]reh¯X IPC 3.43.2.04rf…�rg}rh(h‚j_h‘jbubaubah�jCubj@)�ri}rj(h‚XSYS/BIOS 6.45.1.29rkhƒ}rl(h…]hŽ]h‡]h†]h�]uh‘jYh¦]rmhÜ)�rn}ro(h‚jkh‘jihœjáh�hàhƒ}rp(h…]hŽ]h‡]h†]h�]uh¤M¤h¦]rqh¯XSYS/BIOS 6.45.1.29rr…�rs}rt(h‚jkh‘jnubaubah�jCubj@)�ru}rv(h‚Xam57xx PDK 1.0.4 hƒ}rw(h…]hŽ]h‡]h†]h�]uh‘jYh¦]rxhÜ)�ry}rz(h‚Xam57xx PDK 1.0.4r{h‘juhœjáh�hàhƒ}r|(h…]hŽ]h‡]h†]h�]uh¤M¥h¦]r}h¯Xam57xx PDK 1.0.4r~…�r}r€(h‚j{h‘jyubaubah�jCubeh�j!ubeubj@)�r�}r‚(h‚X)For **Target**, select ti.targets.elf.C66rƒh‘jãhœjáh�jChƒ}r„(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r…hÜ)�r†}r‡(h‚jƒh‘j�hœjáh�hàhƒ}rˆ(h…]hŽ]h‡]h†]h�]uh¤M§h¦]r‰(h¯XFor rŠ…�r‹}rŒ(h‚XFor h‘j†ubj¯)�r�}rŽ(h‚X **Target**hƒ}r�(h…]hŽ]h‡]h†]h�]uh‘j†h¦]r�h¯XTargetr‘…�r’}r“(h‚Uh‘j�ubah�j·ubh¯X, select ti.targets.elf.C66r”…�r•}r–(h‚X, select ti.targets.elf.C66h‘j†ubeubaubj@)�r—}r˜(h‚X/For **Platform**, select ti.platforms.evmDRA7XXr™h‘jãhœjáh�jChƒ}rš(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r›hÜ)�rœ}r�(h‚j™h‘j—hœjáh�hàhƒ}rž(h…]hŽ]h‡]h†]h�]uh¤M¨h¦]rŸ(h¯XFor r …�r¡}r¢(h‚XFor h‘jœubj¯)�r£}r¤(h‚X **Platform**hƒ}r¥(h…]hŽ]h‡]h†]h�]uh‘jœh¦]r¦h¯XPlatformr§…�r¨}r©(h‚Uh‘j£ubah�j·ubh¯X, select ti.platforms.evmDRA7XXrª…�r«}r¬(h‚X, select ti.platforms.evmDRA7XXh‘jœubeubaubj@)�r­}r®(h‚X‡Once the platform is selected, edit its name buy hand and append :dsp1 to the end. After this it should be ti.platforms.evmDRA7XX:dsp1h‘jãhœjáh�jChƒ}r¯(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r°hÜ)�r±}r²(h‚X‡Once the platform is selected, edit its name buy hand and append :dsp1 to the end. After this it should be ti.platforms.evmDRA7XX:dsp1r³h‘j­hœjáh�hàhƒ}r´(h…]hŽ]h‡]h†]h�]uh¤M©h¦]rµh¯X‡Once the platform is selected, edit its name buy hand and append :dsp1 to the end. After this it should be ti.platforms.evmDRA7XX:dsp1r¶…�r·}r¸(h‚j³h‘j±ubaubaubj@)�r¹}rº(h‚X6Go ahead and leave the **Build-profile** set to debug.r»h‘jãhœjáh�jChƒ}r¼(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r½hÜ)�r¾}r¿(h‚j»h‘j¹hœjáh�hàhƒ}rÀ(h…]hŽ]h‡]h†]h�]uh¤M¬h¦]rÁ(h¯XGo ahead and leave the rÂ…�rÃ}rÄ(h‚XGo ahead and leave the h‘j¾ubj¯)�rÅ}rÆ(h‚X**Build-profile**hƒ}rÇ(h…]hŽ]h‡]h†]h�]uh‘j¾h¦]rÈh¯X Build-profilerÉ…�rÊ}rË(h‚Uh‘jÅubah�j·ubh¯X set to debug.rÌ…�rÍ}rÎ(h‚X set to debug.h‘j¾ubeubaubj@)�rÏ}rÐ(h‚XHit the OK button. h‘jãhœjáh�jChƒ}rÑ(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rÒhÜ)�rÓ}rÔ(h‚XHit the OK button.rÕh‘jÏhœjáh�hàhƒ}rÖ(h…]hŽ]h‡]h†]h�]uh¤M­h¦]r×h¯XHit the OK button.rØ…�rÙ}rÚ(h‚jÕh‘jÓubaubaubeubhþ)�rÛ}rÜ(h‚Uh‘jÏhœjáh�jhƒ}rÝ(h…]hŽ]h‡]h†]h�]uh¤M¯h¥hh¦]rÞj)�rß}rà(h‚UjKh‘jÛhœjáh�h¤hƒ}rá(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�râ}rã(h‚XhNow we want to copy configuration and source files from the ex02\_messageq IPC example into our project. The IPC example is located at **C:\\ti\\ipc\_3\_43\_02\_04\\examples\\DRA7XX\_linux\_elf\\ex02\_messageq**. To copy files into your CCS project, you can simply select the files you want in Windows explorer then drag and drop them into your project in CCS.h‘jÏhœjáh�hàhƒ}rä(h…]hŽ]h‡]h†]h�]uh¤M±h¥hh¦]rå(h¯X†Now we want to copy configuration and source files from the ex02_messageq IPC example into our project. The IPC example is located at ræ…�rç}rè(h‚X‡Now we want to copy configuration and source files from the ex02\_messageq IPC example into our project. The IPC example is located at h‘jâubj¯)�ré}rê(h‚XL**C:\\ti\\ipc\_3\_43\_02\_04\\examples\\DRA7XX\_linux\_elf\\ex02\_messageq**hƒ}rë(h…]hŽ]h‡]h†]h�]uh‘jâh¦]rìh¯X<C:\ti\ipc_3_43_02_04\examples\DRA7XX_linux_elf\ex02_messageqrí…�rî}rï(h‚Uh‘jéubah�j·ubh¯X•. To copy files into your CCS project, you can simply select the files you want in Windows explorer then drag and drop them into your project in CCS.rð…�rñ}rò(h‚X•. To copy files into your CCS project, you can simply select the files you want in Windows explorer then drag and drop them into your project in CCS.h‘jâubeubhÜ)�ró}rô(h‚X)Copy these files into your CCS project...rõh‘jÏhœjáh�hàhƒ}rö(h…]hŽ]h‡]h†]h�]uh¤M¹h¥hh¦]r÷h¯X)Copy these files into your CCS project...rø…�rù}rú(h‚jõh‘jóubaubj)�rû}rü(h‚Uh‘jÏhœjáh�j!hƒ}rý(j#X-h†]h‡]h…]hŽ]h�]uh¤M»h¥hh¦]rþ(j@)�rÿ}r(h‚X]C:\\ti\\ipc\_3\_43\_02\_04\\examples\\DRA7XX\_linux\_elf\\ex02\_messageq\\shared\\AppCommon.hrh‘jûhœjáh�jChƒ}r(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rhÜ)�r}r(h‚jh‘jÿhœjáh�hàhƒ}r(h…]hŽ]h‡]h†]h�]uh¤M»h¦]rh¯XOC:\ti\ipc_3_43_02_04\examples\DRA7XX_linux_elf\ex02_messageq\shared\AppCommon.hr…�r }r (h‚X]C:\\ti\\ipc\_3\_43\_02\_04\\examples\\DRA7XX\_linux\_elf\\ex02\_messageq\\shared\\AppCommon.hh‘jubaubaubj@)�r }r (h‚X\C:\\ti\\ipc\_3\_43\_02\_04\\examples\\DRA7XX\_linux\_elf\\ex02\_messageq\\shared\\config.bldr h‘jûhœjáh�jChƒ}r(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rhÜ)�r}r(h‚j h‘j hœjáh�hàhƒ}r(h…]hŽ]h‡]h†]h�]uh¤M¼h¦]rh¯XNC:\ti\ipc_3_43_02_04\examples\DRA7XX_linux_elf\ex02_messageq\shared\config.bldr…�r}r(h‚X\C:\\ti\\ipc\_3\_43\_02\_04\\examples\\DRA7XX\_linux\_elf\\ex02\_messageq\\shared\\config.bldh‘jubaubaubj@)�r}r(h‚X]C:\\ti\\ipc\_3\_43\_02\_04\\examples\\DRA7XX\_linux\_elf\\ex02\_messageq\\shared\\ipc.cfg.xs h‘jûhœjáh�jChƒ}r(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rhÜ)�r}r(h‚X\C:\\ti\\ipc\_3\_43\_02\_04\\examples\\DRA7XX\_linux\_elf\\ex02\_messageq\\shared\\ipc.cfg.xsh‘jhœjáh�hàhƒ}r(h…]hŽ]h‡]h†]h�]uh¤M½h¦]rh¯XNC:\ti\ipc_3_43_02_04\examples\DRA7XX_linux_elf\ex02_messageq\shared\ipc.cfg.xsr…�r }r!(h‚X\C:\\ti\\ipc\_3\_43\_02\_04\\examples\\DRA7XX\_linux\_elf\\ex02\_messageq\\shared\\ipc.cfg.xsh‘jubaubaubeubhþ)�r"}r#(h‚Uh‘jÏhœjáh�jhƒ}r$(h…]hŽ]h‡]h†]h�]uh¤M¿h¥hh¦]r%j)�r&}r'(h‚UjKh‘j"hœjáh�h¤hƒ}r((h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�r)}r*(h‚X-Now copy these files into your CCS project...r+h‘jÏhœjáh�hàhƒ}r,(h…]hŽ]h‡]h†]h�]uh¤MÁh¥hh¦]r-h¯X-Now copy these files into your CCS project...r.…�r/}r0(h‚j+h‘j)ubaubj)�r1}r2(h‚Uh‘jÏhœjáh�j!hƒ}r3(j#X-h†]h‡]h…]hŽ]h�]uh¤MÃh¥hh¦]r4(j@)�r5}r6(h‚XXC:\\ti\\ipc\_3\_43\_02\_04\\examples\\DRA7XX\_linux\_elf\\ex02\_messageq\\dsp1\\Dsp1.cfgr7h‘j1hœjáh�jChƒ}r8(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r9hÜ)�r:}r;(h‚j7h‘j5hœjáh�hàhƒ}r<(h…]hŽ]h‡]h†]h�]uh¤MÃh¦]r=h¯XJC:\ti\ipc_3_43_02_04\examples\DRA7XX_linux_elf\ex02_messageq\dsp1\Dsp1.cfgr>…�r?}r@(h‚XXC:\\ti\\ipc\_3\_43\_02\_04\\examples\\DRA7XX\_linux\_elf\\ex02\_messageq\\dsp1\\Dsp1.cfgh‘j:ubaubaubj@)�rA}rB(h‚XZC:\\ti\\ipc\_3\_43\_02\_04\\examples\\DRA7XX\_linux\_elf\\ex02\_messageq\\dsp1\\MainDsp1.crCh‘j1hœjáh�jChƒ}rD(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rEhÜ)�rF}rG(h‚jCh‘jAhœjáh�hàhƒ}rH(h…]hŽ]h‡]h†]h�]uh¤MÄh¦]rIh¯XLC:\ti\ipc_3_43_02_04\examples\DRA7XX_linux_elf\ex02_messageq\dsp1\MainDsp1.crJ…�rK}rL(h‚XZC:\\ti\\ipc\_3\_43\_02\_04\\examples\\DRA7XX\_linux\_elf\\ex02\_messageq\\dsp1\\MainDsp1.ch‘jFubaubaubj@)�rM}rN(h‚XXC:\\ti\\ipc\_3\_43\_02\_04\\examples\\DRA7XX\_linux\_elf\\ex02\_messageq\\dsp1\\Server.crOh‘j1hœjáh�jChƒ}rP(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rQhÜ)�rR}rS(h‚jOh‘jMhœjáh�hàhƒ}rT(h…]hŽ]h‡]h†]h�]uh¤MÅh¦]rUh¯XJC:\ti\ipc_3_43_02_04\examples\DRA7XX_linux_elf\ex02_messageq\dsp1\Server.crV…�rW}rX(h‚XXC:\\ti\\ipc\_3\_43\_02\_04\\examples\\DRA7XX\_linux\_elf\\ex02\_messageq\\dsp1\\Server.ch‘jRubaubaubj@)�rY}rZ(h‚XYC:\\ti\\ipc\_3\_43\_02\_04\\examples\\DRA7XX\_linux\_elf\\ex02\_messageq\\dsp1\\Server.h h‘j1hœjáh�jChƒ}r[(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r\hÜ)�r]}r^(h‚XXC:\\ti\\ipc\_3\_43\_02\_04\\examples\\DRA7XX\_linux\_elf\\ex02\_messageq\\dsp1\\Server.hh‘jYhœjáh�hàhƒ}r_(h…]hŽ]h‡]h†]h�]uh¤MÆh¦]r`h¯XJC:\ti\ipc_3_43_02_04\examples\DRA7XX_linux_elf\ex02_messageq\dsp1\Server.hra…�rb}rc(h‚XXC:\\ti\\ipc\_3\_43\_02\_04\\examples\\DRA7XX\_linux\_elf\\ex02\_messageq\\dsp1\\Server.hh‘j]ubaubaubeubhþ)�rd}re(h‚Uh‘jÏhœjáh�jhƒ}rf(h…]hŽ]h‡]h†]h�]uh¤MÈh¥hh¦]rgj)�rh}ri(h‚UjKh‘jdhœjáh�h¤hƒ}rj(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubj)�rk}rl(h‚XWhen you copy Dsp1.cfg into your CCS project, it should show up greyed out. This is because the LED blink example already has a cfg file (gpio\_test\_evmAM572x.cfg). The Dsp1.cfg will be used for copying and pasting. When it's all done, you can delete it from your project.h‘jÏhœjáh�jhƒ}rm(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rnhÜ)�ro}rp(h‚XWhen you copy Dsp1.cfg into your CCS project, it should show up greyed out. This is because the LED blink example already has a cfg file (gpio\_test\_evmAM572x.cfg). The Dsp1.cfg will be used for copying and pasting. When it's all done, you can delete it from your project.h‘jkhœjáh�hàhƒ}rq(h…]hŽ]h‡]h†]h�]uh¤MËh¦]rrh¯XWhen you copy Dsp1.cfg into your CCS project, it should show up greyed out. This is because the LED blink example already has a cfg file (gpio_test_evmAM572x.cfg). The Dsp1.cfg will be used for copying and pasting. When it's all done, you can delete it from your project.rs…�rt}ru(h‚XWhen you copy Dsp1.cfg into your CCS project, it should show up greyed out. This is because the LED blink example already has a cfg file (gpio\_test\_evmAM572x.cfg). The Dsp1.cfg will be used for copying and pasting. When it's all done, you can delete it from your project.h‘joubaubaubhÜ)�rv}rw(h‚XiFinally, you will likely want to use a custom resource table so copy these files into your CCS project...rxh‘jÏhœjáh�hàhƒ}ry(h…]hŽ]h‡]h†]h�]uh¤MÑh¥hh¦]rzh¯XiFinally, you will likely want to use a custom resource table so copy these files into your CCS project...r{…�r|}r}(h‚jxh‘jvubaubj)�r~}r(h‚Uh‘jÏhœjáh�j!hƒ}r€(j#X-h†]h‡]h…]hŽ]h�]uh¤MÔh¥hh¦]r�(j@)�r‚}rƒ(h‚XRC:\\ti\\ipc\_3\_43\_02\_04\\packages\\ti\\ipc\\remoteproc\\rsc\_table\_vayu\_dsp.hr„h‘j~hœjáh�jChƒ}r…(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r†hÜ)�r‡}rˆ(h‚j„h‘j‚hœjáh�hàhƒ}r‰(h…]hŽ]h‡]h†]h�]uh¤MÔh¦]rŠh¯XDC:\ti\ipc_3_43_02_04\packages\ti\ipc\remoteproc\rsc_table_vayu_dsp.hr‹…�rŒ}r�(h‚XRC:\\ti\\ipc\_3\_43\_02\_04\\packages\\ti\\ipc\\remoteproc\\rsc\_table\_vayu\_dsp.hh‘j‡ubaubaubj@)�rŽ}r�(h‚XHC:\\ti\\ipc\_3\_43\_02\_04\\packages\\ti\\ipc\\remoteproc\\rsc\_types.h h‘j~hœjáh�jChƒ}r�(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r‘hÜ)�r’}r“(h‚XGC:\\ti\\ipc\_3\_43\_02\_04\\packages\\ti\\ipc\\remoteproc\\rsc\_types.hh‘jŽhœjáh�hàhƒ}r”(h…]hŽ]h‡]h†]h�]uh¤MÕh¦]r•h¯X;C:\ti\ipc_3_43_02_04\packages\ti\ipc\remoteproc\rsc_types.hr–…�r—}r˜(h‚XGC:\\ti\\ipc\_3\_43\_02\_04\\packages\\ti\\ipc\\remoteproc\\rsc\_types.hh‘j’ubaubaubeubhÜ)�r™}rš(h‚XeThe rsc\_table\_vayu\_dsp.h file defines an initialized structure so let's make a **.c** source file.h‘jÏhœjáh�hàhƒ}r›(h…]hŽ]h‡]h†]h�]uh¤M×h¥hh¦]rœ(h¯XOThe rsc_table_vayu_dsp.h file defines an initialized structure so let's make a r�…�rž}rŸ(h‚XRThe rsc\_table\_vayu\_dsp.h file defines an initialized structure so let's make a h‘j™ubj¯)�r }r¡(h‚X**.c**hƒ}r¢(h…]hŽ]h‡]h†]h�]uh‘j™h¦]r£h¯X.cr¤…�r¥}r¦(h‚Uh‘j ubah�j·ubh¯X source file.r§…�r¨}r©(h‚X source file.h‘j™ubeubj)�rª}r«(h‚Uh‘jÏhœjáh�j!hƒ}r¬(j#X-h†]h‡]h…]hŽ]h�]uh¤MÚh¥hh¦]r­j@)�r®}r¯(h‚XOIn your CCS project, rename rsc\_table\_vayu\_dsp.h to rsc\_table\_vayu\_dsp.c h‘jªhœjáh�jChƒ}r°(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r±hÜ)�r²}r³(h‚XNIn your CCS project, rename rsc\_table\_vayu\_dsp.h to rsc\_table\_vayu\_dsp.ch‘j®hœjáh�hàhƒ}r´(h…]hŽ]h‡]h†]h�]uh¤MÚh¦]rµh¯XHIn your CCS project, rename rsc_table_vayu_dsp.h to rsc_table_vayu_dsp.cr¶…�r·}r¸(h‚XNIn your CCS project, rename rsc\_table\_vayu\_dsp.h to rsc\_table\_vayu\_dsp.ch‘j²ubaubaubaubhþ)�r¹}rº(h‚Uh‘jÏhœjáh�jhƒ}r»(h…]hŽ]h‡]h†]h�]uh¤MÝh¥hh¦]r¼j)�r½}r¾(h‚UjKh‘j¹hœjáh�h¤hƒ}r¿(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�rÀ}rÁ(h‚X€Now we want to **merge** the IPC example configuration file with the LED blink example configuration file. Follow these steps...h‘jÏhœjáh�hàhƒ}rÂ(h…]hŽ]h‡]h†]h�]uh¤Mßh¥hh¦]rÃ(h¯XNow we want to rÄ…�rÅ}rÆ(h‚XNow we want to h‘jÀubj¯)�rÇ}rÈ(h‚X **merge**hƒ}rÉ(h…]hŽ]h‡]h†]h�]uh‘jÀh¦]rÊh¯XmergerË…�rÌ}rÍ(h‚Uh‘jÇubah�j·ubh¯Xh the IPC example configuration file with the LED blink example configuration file. Follow these steps...rÎ…�rÏ}rÐ(h‚Xh the IPC example configuration file with the LED blink example configuration file. Follow these steps...h‘jÀubeubj)�rÑ}rÒ(h‚Uh‘jÏhœjáh�j!hƒ}rÓ(j#X-h†]h‡]h…]hŽ]h�]uh¤Mâh¥hh¦]rÔ(j@)�rÕ}rÖ(h‚X†Open up **Dsp1.cfg** using a text editor (don't open it using the GUI). Right click on it and select **Open With -> XDCscript Editor**h‘jÑhœjáh�jChƒ}r×(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rØhÜ)�rÙ}rÚ(h‚X†Open up **Dsp1.cfg** using a text editor (don't open it using the GUI). Right click on it and select **Open With -> XDCscript Editor**h‘jÕhœjáh�hàhƒ}rÛ(h…]hŽ]h‡]h†]h�]uh¤Mâh¦]rÜ(h¯XOpen up rÝ…�rÞ}rß(h‚XOpen up h‘jÙubj¯)�rà}rá(h‚X **Dsp1.cfg**hƒ}râ(h…]hŽ]h‡]h†]h�]uh‘jÙh¦]rãh¯XDsp1.cfgrä…�rå}ræ(h‚Uh‘jàubah�j·ubh¯XQ using a text editor (don't open it using the GUI). Right click on it and select rç…�rè}ré(h‚XQ using a text editor (don't open it using the GUI). Right click on it and select h‘jÙubj¯)�rê}rë(h‚X!**Open With -> XDCscript Editor**hƒ}rì(h…]hŽ]h‡]h†]h�]uh‘jÙh¦]ríh¯XOpen With -> XDCscript Editorrî…�rï}rð(h‚Uh‘jêubah�j·ubeubaubj@)�rñ}rò(h‚XLWe want to copy the entire contents into the clipboard. Select all and copy.h‘jÑhœjáh�jChƒ}ró(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rôhÜ)�rõ}rö(h‚XLWe want to copy the entire contents into the clipboard. Select all and copy.r÷h‘jñhœjáh�hàhƒ}rø(h…]hŽ]h‡]h†]h�]uh¤Mäh¦]rùh¯XLWe want to copy the entire contents into the clipboard. Select all and copy.rú…�rû}rü(h‚j÷h‘jõubaubaubj@)�rý}rþ(h‚XöNow just like above, open the gpio\_test\_evmAM572x.cfg config file in the text editor. Go to the very bottom and **paste** in the contents from the Dsp1.cfg file. Basically we've appended the contents of Dsp1.cfg into gpio\_test\_evmAM572x.cfg. h‘jÑhœjáh�jChƒ}rÿ(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rhÜ)�r}r(h‚XõNow just like above, open the gpio\_test\_evmAM572x.cfg config file in the text editor. Go to the very bottom and **paste** in the contents from the Dsp1.cfg file. Basically we've appended the contents of Dsp1.cfg into gpio\_test\_evmAM572x.cfg.h‘jýhœjáh�hàhƒ}r(h…]hŽ]h‡]h†]h�]uh¤Mæh¦]r(h¯XpNow just like above, open the gpio_test_evmAM572x.cfg config file in the text editor. Go to the very bottom and r…�r}r(h‚XrNow just like above, open the gpio\_test\_evmAM572x.cfg config file in the text editor. Go to the very bottom and h‘jubj¯)�r}r (h‚X **paste**hƒ}r (h…]hŽ]h‡]h†]h�]uh‘jh¦]r h¯Xpaster …�r }r(h‚Uh‘jubah�j·ubh¯Xx in the contents from the Dsp1.cfg file. Basically we've appended the contents of Dsp1.cfg into gpio_test_evmAM572x.cfg.r…�r}r(h‚Xz in the contents from the Dsp1.cfg file. Basically we've appended the contents of Dsp1.cfg into gpio\_test\_evmAM572x.cfg.h‘jubeubaubeubhþ)�r}r(h‚Uh‘jÏhœjáh�jhƒ}r(h…]hŽ]h‡]h†]h�]uh¤Mëh¥hh¦]rj)�r}r(h‚UjKh‘jhœjáh�h¤hƒ}r(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�r}r(h‚X¸We've now added in all the necessary configuration and source files into our project. Don't expect it to build at this point, we have to make edits first. These edits are listed below.rh‘jÏhœjáh�hàhƒ}r(h…]hŽ]h‡]h†]h�]uh¤Míh¥hh¦]rh¯X¸We've now added in all the necessary configuration and source files into our project. Don't expect it to build at this point, we have to make edits first. These edits are listed below.r…�r}r (h‚jh‘jubaubj¡)�r!}r"(h‚X~NOTE, you can download the full CCS project with source files to use as a reference. See link towards the end of this section.h‘jÏhœjáh�j¤hƒ}r#(hÊhËh†]h‡]h…]hŽ]h�]uh¤Mµh¥hh¦]r$h¯X~NOTE, you can download the full CCS project with source files to use as a reference. See link towards the end of this section.r%…�r&}r'(h‚Uh‘j!ubaubhþ)�r(}r)(h‚Uh‘jÏhœjáh�jhƒ}r*(h…]hŽ]h‡]h†]h�]uh¤Möh¥hh¦]r+j)�r,}r-(h‚UjKh‘j(hœjáh�h¤hƒ}r.(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubj)�r/}r0(h‚Uh‘jÏhœjáh�j!hƒ}r1(j#X-h†]h‡]h…]hŽ]h�]uh¤Møh¥hh¦]r2j@)�r3}r4(h‚X#Edit **gpio\_test\_evmAM572x.cfg** h‘j/hœjáh�jChƒ}r5(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r6hÜ)�r7}r8(h‚X"Edit **gpio\_test\_evmAM572x.cfg**h‘j3hœjáh�hàhƒ}r9(h…]hŽ]h‡]h†]h�]uh¤Møh¦]r:(h¯XEdit r;…�r<}r=(h‚XEdit h‘j7ubj¯)�r>}r?(h‚X**gpio\_test\_evmAM572x.cfg**hƒ}r@(h…]hŽ]h‡]h†]h�]uh‘j7h¦]rAh¯Xgpio_test_evmAM572x.cfgrB…�rC}rD(h‚Uh‘j>ubah�j·ubeubaubaubhþ)�rE}rF(h‚Uh‘jÏhœjáh�jhƒ}rG(h…]hŽ]h‡]h†]h�]uh¤Múh¥hh¦]rHj)�rI}rJ(h‚UjKh‘jEhœjáh�h¤hƒ}rK(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�rL}rM(h‚X=Add the following to the beginning of your configuration filerNh‘jÏhœjáh�hàhƒ}rO(h…]hŽ]h‡]h†]h�]uh¤Müh¥hh¦]rPh¯X=Add the following to the beginning of your configuration filerQ…�rR}rS(h‚jNh‘jLubaubj¡)�rT}rU(h‚X/var Program = xdc.useModule('xdc.cfg.Program');h‘jÏhœjáh�j¤hƒ}rV(jt‰juX javascripthÊhËh†]h‡]h…]jv}hŽ]h�]uh¤Mþh¥hh¦]rWh¯X/var Program = xdc.useModule('xdc.cfg.Program');rX…�rY}rZ(h‚Uh‘jTubaubhþ)�r[}r\(h‚Uh‘jÏhœjáh�jhƒ}r](h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]r^j)�r_}r`(h‚UjKh‘j[hœjáh�h¤hƒ}ra(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�rb}rc(h‚X<Comment out the Memory sections configuration as shown belowrdh‘jÏhœjáh�hàhƒ}re(h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]rfh¯X<Comment out the Memory sections configuration as shown belowrg…�rh}ri(h‚jdh‘jbubaubj¡)�rj}rk(h‚X5/* ================ Memory sections configuration ================ */ //Program.sectMap[".text"] = "EXT_RAM"; //Program.sectMap[".const"] = "EXT_RAM"; //Program.sectMap[".plt"] = "EXT_RAM"; /* Program.sectMap["BOARD_IO_DELAY_DATA"] = "OCMC_RAM1"; */ /* Program.sectMap["BOARD_IO_DELAY_CODE"] = "OCMC_RAM1"; */h‘jÏhœjáh�j¤hƒ}rl(jt‰juX javascripthÊhËh†]h‡]h…]jv}hŽ]h�]uh¤Mh¥hh¦]rmh¯X5/* ================ Memory sections configuration ================ */ //Program.sectMap[".text"] = "EXT_RAM"; //Program.sectMap[".const"] = "EXT_RAM"; //Program.sectMap[".plt"] = "EXT_RAM"; /* Program.sectMap["BOARD_IO_DELAY_DATA"] = "OCMC_RAM1"; */ /* Program.sectMap["BOARD_IO_DELAY_CODE"] = "OCMC_RAM1"; */rn…�ro}rp(h‚Uh‘jjubaubhþ)�rq}rr(h‚Uh‘jÏhœjáh�jhƒ}rs(h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]rtj)�ru}rv(h‚UjKh‘jqhœjáh�h¤hƒ}rw(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�rx}ry(h‚XGSince we are no longer using a shared folder, make the following changerzh‘jÏhœjáh�hàhƒ}r{(h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]r|h¯XGSince we are no longer using a shared folder, make the following changer}…�r~}r(h‚jzh‘jxubaubj¡)�r€}r�(h‚Xh//var ipc_cfg = xdc.loadCapsule("../shared/ipc.cfg.xs"); var ipc_cfg = xdc.loadCapsule("../ipc.cfg.xs");h‘jÏhœjáh�j¤hƒ}r‚(jt‰juX javascripthÊhËh†]h‡]h…]jv}hŽ]h�]uh¤Mh¥hh¦]rƒh¯Xh//var ipc_cfg = xdc.loadCapsule("../shared/ipc.cfg.xs"); var ipc_cfg = xdc.loadCapsule("../ipc.cfg.xs");r„…�r…}r†(h‚Uh‘j€ubaubhþ)�r‡}rˆ(h‚Uh‘jÏhœjáh�jhƒ}r‰(h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]rŠj)�r‹}rŒ(h‚UjKh‘j‡hœjáh�h¤hƒ}r�(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�rŽ}r�(h‚XMComment out the following. We'll be calling this function directly from main.r�h‘jÏhœjáh�hàhƒ}r‘(h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]r’h¯XMComment out the following. We'll be calling this function directly from main.r“…�r”}r•(h‚j�h‘jŽubaubj¡)�r–}r—(h‚X4//BIOS.addUserStartupFunction('&IpcMgr_ipcStartup');h‘jÏhœjáh�j¤hƒ}r˜(jt‰juXchÊhËh†]h‡]h…]jv}hŽ]h�]uh¤Mh¥hh¦]r™h¯X4//BIOS.addUserStartupFunction('&IpcMgr_ipcStartup');rš…�r›}rœ(h‚Uh‘j–ubaubhþ)�r�}rž(h‚Uh‘jÏhœjáh�jhƒ}rŸ(h…]hŽ]h‡]h†]h�]uh¤M"h¥hh¦]r j)�r¡}r¢(h‚UjKh‘j�hœjáh�h¤hƒ}r£(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�r¤}r¥(h‚XIncrease the system stack sizer¦h‘jÏhœjáh�hàhƒ}r§(h…]hŽ]h‡]h†]h�]uh¤M$h¥hh¦]r¨h¯XIncrease the system stack sizer©…�rª}r«(h‚j¦h‘j¤ubaubj¡)�r¬}r­(h‚X1//Program.stack = 0x1000; Program.stack = 0x8000;h‘jÏhœjáh�j¤hƒ}r®(jt‰juX javascripthÊhËh†]h‡]h…]jv}hŽ]h�]uh¤M&h¥hh¦]r¯h¯X1//Program.stack = 0x1000; Program.stack = 0x8000;r°…�r±}r²(h‚Uh‘j¬ubaubhþ)�r³}r´(h‚Uh‘jÏhœjáh�jhƒ}rµ(h…]hŽ]h‡]h†]h�]uh¤M+h¥hh¦]r¶j)�r·}r¸(h‚UjKh‘j³hœjáh�h¤hƒ}r¹(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�rº}r»(h‚X#Comment out the entire TICK sectionr¼h‘jÏhœjáh�hàhƒ}r½(h…]hŽ]h‡]h†]h�]uh¤M-h¥hh¦]r¾h¯X#Comment out the entire TICK sectionr¿…�rÀ}rÁ(h‚j¼h‘jºubaubj¡)�rÂ}rÃ(h‚X=/* --------------------------- TICK --------------------------------------*/ // var Clock = xdc.useModule('ti.sysbios.knl.Clock'); // Clock.tickSource = Clock.TickSource_NULL; // //Clock.tickSource = Clock.TickSource_USER; // /* Configure BIOS clock source as GPTimer5 */ // //Clock.timerId = 0; // // var Timer = xdc.useModule('ti.sysbios.timers.dmtimer.Timer'); // // /* Skip the Timer frequency verification check. Need to remove this later */ // Timer.checkFrequency = false; // // /* Match this to the SYS_CLK frequency sourcing the dmTimers. // * Not needed once the SYS/BIOS family settings is updated. */ // Timer.intFreq.hi = 0; // Timer.intFreq.lo = 19200000; // // //var timerParams = new Timer.Params(); // //timerParams.period = Clock.tickPeriod; // //timerParams.periodType = Timer.PeriodType_MICROSECS; // /* Switch off Software Reset to make the below settings effective */ // //timerParams.tiocpCfg.softreset = 0x0; // /* Smart-idle wake-up-capable mode */ // //timerParams.tiocpCfg.idlemode = 0x3; // /* Wake-up generation for Overflow */ // //timerParams.twer.ovf_wup_ena = 0x1; // //Timer.create(Clock.timerId, Clock.doTick, timerParams); // // var Idle = xdc.useModule('ti.sysbios.knl.Idle'); // var Deh = xdc.useModule('ti.deh.Deh'); // // /* Must be placed before pwr mgmt */ // Idle.addFunc('&ti_deh_Deh_idleBegin');h‘jÏhœjáh�j¤hƒ}rÄ(jt‰juX javascripthÊhËh†]h‡]h…]jv}hŽ]h�]uh¤M/h¥hh¦]rÅh¯X=/* --------------------------- TICK --------------------------------------*/ // var Clock = xdc.useModule('ti.sysbios.knl.Clock'); // Clock.tickSource = Clock.TickSource_NULL; // //Clock.tickSource = Clock.TickSource_USER; // /* Configure BIOS clock source as GPTimer5 */ // //Clock.timerId = 0; // // var Timer = xdc.useModule('ti.sysbios.timers.dmtimer.Timer'); // // /* Skip the Timer frequency verification check. Need to remove this later */ // Timer.checkFrequency = false; // // /* Match this to the SYS_CLK frequency sourcing the dmTimers. // * Not needed once the SYS/BIOS family settings is updated. */ // Timer.intFreq.hi = 0; // Timer.intFreq.lo = 19200000; // // //var timerParams = new Timer.Params(); // //timerParams.period = Clock.tickPeriod; // //timerParams.periodType = Timer.PeriodType_MICROSECS; // /* Switch off Software Reset to make the below settings effective */ // //timerParams.tiocpCfg.softreset = 0x0; // /* Smart-idle wake-up-capable mode */ // //timerParams.tiocpCfg.idlemode = 0x3; // /* Wake-up generation for Overflow */ // //timerParams.twer.ovf_wup_ena = 0x1; // //Timer.create(Clock.timerId, Clock.doTick, timerParams); // // var Idle = xdc.useModule('ti.sysbios.knl.Idle'); // var Deh = xdc.useModule('ti.deh.Deh'); // // /* Must be placed before pwr mgmt */ // Idle.addFunc('&ti_deh_Deh_idleBegin');rÆ…�rÇ}rÈ(h‚Uh‘jÂubaubhþ)�rÉ}rÊ(h‚Uh‘jÏhœjáh�jhƒ}rË(h…]hŽ]h‡]h†]h�]uh¤MTh¥hh¦]rÌj)�rÍ}rÎ(h‚UjKh‘jÉhœjáh�h¤hƒ}rÏ(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�rÐ}rÑ(h‚XSMake configuration change to use custom resource table. Add to the end of the file.rÒh‘jÏhœjáh�hàhƒ}rÓ(h…]hŽ]h‡]h†]h�]uh¤MVh¥hh¦]rÔh¯XSMake configuration change to use custom resource table. Add to the end of the file.rÕ…�rÖ}r×(h‚jÒh‘jÐubaubj¡)�rØ}rÙ(h‚XŽ/* Override the default resource table with my own */ var Resource = xdc.useModule('ti.ipc.remoteproc.Resource'); Resource.customTable = true;h‘jÏhœjáh�j¤hƒ}rÚ(jt‰juX javascripthÊhËh†]h‡]h…]jv}hŽ]h�]uh¤MYh¥hh¦]rÛh¯XŽ/* Override the default resource table with my own */ var Resource = xdc.useModule('ti.ipc.remoteproc.Resource'); Resource.customTable = true;rÜ…�rÝ}rÞ(h‚Uh‘jØubaubhþ)�rß}rà(h‚Uh‘jÏhœjáh�jhƒ}rá(h…]hŽ]h‡]h†]h�]uh¤M_h¥hh¦]râj)�rã}rä(h‚UjKh‘jßhœjáh�h¤hƒ}rå(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubj)�ræ}rç(h‚Uh‘jÏhœjáh�j!hƒ}rè(j#X-h†]h‡]h…]hŽ]h�]uh¤Mah¥hh¦]réj@)�rê}rë(h‚XEdit **main\_led\_blink.c** h‘jæhœjáh�jChƒ}rì(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]ríhÜ)�rî}rï(h‚XEdit **main\_led\_blink.c**h‘jêhœjáh�hàhƒ}rð(h…]hŽ]h‡]h†]h�]uh¤Mah¦]rñ(h¯XEdit rò…�ró}rô(h‚XEdit h‘jîubj¯)�rõ}rö(h‚X**main\_led\_blink.c**hƒ}r÷(h…]hŽ]h‡]h†]h�]uh‘jîh¦]røh¯Xmain_led_blink.crù…�rú}rû(h‚Uh‘jõubah�j·ubeubaubaubhþ)�rü}rý(h‚Uh‘jÏhœjáh�jhƒ}rþ(h…]hŽ]h‡]h†]h�]uh¤Mch¥hh¦]rÿj)�r}r(h‚UjKh‘jühœjáh�h¤hƒ}r(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�r}r(h‚X'Add the following external declarationsrh‘jÏhœjáh�hàhƒ}r(h…]hŽ]h‡]h†]h�]uh¤Meh¥hh¦]rh¯X'Add the following external declarationsr…�r }r (h‚jh‘jubaubj¡)�r }r (h‚X;extern Int ipc_main(); extern Void IpcMgr_ipcStartup(Void);h‘jÏhœjáh�j¤hƒ}r (jt‰juXchÊhËh†]h‡]h…]jv}hŽ]h�]uh¤Mgh¥hh¦]rh¯X;extern Int ipc_main(); extern Void IpcMgr_ipcStartup(Void);r…�r}r(h‚Uh‘j ubaubhþ)�r}r(h‚Uh‘jÏhœjáh�jhƒ}r(h…]hŽ]h‡]h†]h�]uh¤Mlh¥hh¦]rj)�r}r(h‚UjKh‘jhœjáh�h¤hƒ}r(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�r}r(h‚XWIn main(), add a call to ipc\_main() and IpcMgr\_ipcStartup() just before BIOS\_start()h‘jÏhœjáh�hàhƒ}r(h…]hŽ]h‡]h†]h�]uh¤Mnh¥hh¦]rh¯XTIn main(), add a call to ipc_main() and IpcMgr_ipcStartup() just before BIOS_start()r…�r}r(h‚XWIn main(), add a call to ipc\_main() and IpcMgr\_ipcStartup() just before BIOS\_start()h‘jubaubj¡)�r }r!(h‚Xiipc_main(); if (callIpcStartup) { IpcMgr_ipcStartup(); } /* Start BIOS */ BIOS_start(); return (0);h‘jÏhœjáh�j¤hƒ}r"(jt‰juXchÊhËh†]h‡]h…]jv}hŽ]h�]uh¤Mqh¥hh¦]r#h¯Xiipc_main(); if (callIpcStartup) { IpcMgr_ipcStartup(); } /* Start BIOS */ BIOS_start(); return (0);r$…�r%}r&(h‚Uh‘j ubaubhþ)�r'}r((h‚Uh‘jÏhœjáh�jhƒ}r)(h…]hŽ]h‡]h†]h�]uh¤M}h¥hh¦]r*j)�r+}r,(h‚UjKh‘j'hœjáh�h¤hƒ}r-(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�r.}r/(h‚XêComment out the line that calls Board\_init(boardCfg). This call is in the original example because it assumes TI-RTOS is running on the Arm but in our case here, we are running Linux and this call is destructive so we comment it out.h‘jÏhœjáh�hàhƒ}r0(h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]r1h¯XéComment out the line that calls Board_init(boardCfg). This call is in the original example because it assumes TI-RTOS is running on the Arm but in our case here, we are running Linux and this call is destructive so we comment it out.r2…�r3}r4(h‚XêComment out the line that calls Board\_init(boardCfg). This call is in the original example because it assumes TI-RTOS is running on the Arm but in our case here, we are running Linux and this call is destructive so we comment it out.h‘j.ubaubj¡)�r5}r6(h‚Xú#if defined(EVM_K2E) || defined(EVM_C6678) boardCfg = BOARD_INIT_MODULE_CLOCK | BOARD_INIT_UART_STDIO; #else boardCfg = BOARD_INIT_PINMUX_CONFIG | BOARD_INIT_MODULE_CLOCK | BOARD_INIT_UART_STDIO; #endif //Board_init(boardCfg);h‘jÏhœjáh�j¤hƒ}r7(jt‰juXchÊhËh†]h‡]h…]jv}hŽ]h�]uh¤M„h¥hh¦]r8h¯Xú#if defined(EVM_K2E) || defined(EVM_C6678) boardCfg = BOARD_INIT_MODULE_CLOCK | BOARD_INIT_UART_STDIO; #else boardCfg = BOARD_INIT_PINMUX_CONFIG | BOARD_INIT_MODULE_CLOCK | BOARD_INIT_UART_STDIO; #endif //Board_init(boardCfg);r9…�r:}r;(h‚Uh‘j5ubaubhþ)�r<}r=(h‚Uh‘jÏhœjáh�jhƒ}r>(h…]hŽ]h‡]h†]h�]uh¤M�h¥hh¦]r?j)�r@}rA(h‚UjKh‘j<hœjáh�h¤hƒ}rB(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubj)�rC}rD(h‚Uh‘jÏhœjáh�j!hƒ}rE(j#X-h†]h‡]h…]hŽ]h�]uh¤M’h¥hh¦]rFj@)�rG}rH(h‚XEdit **MainDsp1.c** h‘jChœjáh�jChƒ}rI(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rJhÜ)�rK}rL(h‚XEdit **MainDsp1.c**h‘jGhœjáh�hàhƒ}rM(h…]hŽ]h‡]h†]h�]uh¤M’h¦]rN(h¯XEdit rO…�rP}rQ(h‚XEdit h‘jKubj¯)�rR}rS(h‚X**MainDsp1.c**hƒ}rT(h…]hŽ]h‡]h†]h�]uh‘jKh¦]rUh¯X MainDsp1.crV…�rW}rX(h‚Uh‘jRubah�j·ubeubaubaubhþ)�rY}rZ(h‚Uh‘jÏhœjáh�jhƒ}r[(h…]hŽ]h‡]h†]h�]uh¤M”h¥hh¦]r\j)�r]}r^(h‚UjKh‘jYhœjáh�h¤hƒ}r_(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�r`}ra(h‚XGThe app now has it's own main(), so rename this one and get rid of argsrbh‘jÏhœjáh�hàhƒ}rc(h…]hŽ]h‡]h†]h�]uh¤M–h¥hh¦]rdh¯XGThe app now has it's own main(), so rename this one and get rid of argsre…�rf}rg(h‚jbh‘j`ubaubj¡)�rh}ri(h‚X3//Int main(Int argc, Char* argv[]) Int ipc_main() {h‘jÏhœjáh�j¤hƒ}rj(jt‰juXchÊhËh†]h‡]h…]jv}hŽ]h�]uh¤M˜h¥hh¦]rkh¯X3//Int main(Int argc, Char* argv[]) Int ipc_main() {rl…�rm}rn(h‚Uh‘jhubaubhþ)�ro}rp(h‚Uh‘jÏhœjáh�jhƒ}rq(h…]hŽ]h‡]h†]h�]uh¤Mžh¥hh¦]rrj)�rs}rt(h‚UjKh‘johœjáh�h¤hƒ}ru(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�rv}rw(h‚X+No longer using args so comment these linesrxh‘jÏhœjáh�hàhƒ}ry(h…]hŽ]h‡]h†]h�]uh¤M h¥hh¦]rzh¯X+No longer using args so comment these linesr{…�r|}r}(h‚jxh‘jvubaubj¡)�r~}r(h‚X?//taskParams.arg0 = (UArg)argc; //taskParams.arg1 = (UArg)argv;h‘jÏhœjáh�j¤hƒ}r€(jt‰juXchÊhËh†]h‡]h…]jv}hŽ]h�]uh¤M¢h¥hh¦]r�h¯X?//taskParams.arg0 = (UArg)argc; //taskParams.arg1 = (UArg)argv;r‚…�rƒ}r„(h‚Uh‘j~ubaubhþ)�r…}r†(h‚Uh‘jÏhœjáh�jhƒ}r‡(h…]hŽ]h‡]h†]h�]uh¤M§h¥hh¦]rˆj)�r‰}rŠ(h‚UjKh‘j…hœjáh�h¤hƒ}r‹(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�rŒ}r�(h‚X>BIOS\_start() is done in the app main() so comment it out hererŽh‘jÏhœjáh�hàhƒ}r�(h…]hŽ]h‡]h†]h�]uh¤M©h¥hh¦]r�h¯X=BIOS_start() is done in the app main() so comment it out herer‘…�r’}r“(h‚X>BIOS\_start() is done in the app main() so comment it out hereh‘jŒubaubj¡)�r”}r•(h‚X9/* start scheduler, this never returns */ //BIOS_start();h‘jÏhœjáh�j¤hƒ}r–(jt‰juXchÊhËh†]h‡]h…]jv}hŽ]h�]uh¤M«h¥hh¦]r—h¯X9/* start scheduler, this never returns */ //BIOS_start();r˜…�r™}rš(h‚Uh‘j”ubaubhþ)�r›}rœ(h‚Uh‘jÏhœjáh�jhƒ}r�(h…]hŽ]h‡]h†]h�]uh¤M°h¥hh¦]ržj)�rŸ}r (h‚UjKh‘j›hœjáh�h¤hƒ}r¡(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�r¢}r£(h‚XComment this outr¤h‘jÏhœjáh�hàhƒ}r¥(h…]hŽ]h‡]h†]h�]uh¤M²h¥hh¦]r¦h¯XComment this outr§…�r¨}r©(h‚j¤h‘j¢ubaubj¡)�rª}r«(h‚X&//Log_print0(Diags_EXIT, "<-- main:");h‘jÏhœjáh�j¤hƒ}r¬(jt‰juXchÊhËh†]h‡]h…]jv}hŽ]h�]uh¤M´h¥hh¦]r­h¯X&//Log_print0(Diags_EXIT, "<-- main:");r®…�r¯}r°(h‚Uh‘jªubaubhþ)�r±}r²(h‚Uh‘jÏhœjáh�jhƒ}r³(h…]hŽ]h‡]h†]h�]uh¤M¸h¥hh¦]r´j)�rµ}r¶(h‚UjKh‘j±hœjáh�h¤hƒ}r·(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubj)�r¸}r¹(h‚Uh‘jÏhœjáh�j!hƒ}rº(j#X-h†]h‡]h…]hŽ]h�]uh¤Mºh¥hh¦]r»j@)�r¼}r½(h‚X!Edit **rsc\_table\_vayu\_dsp.c** h‘j¸hœjáh�jChƒ}r¾(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r¿hÜ)�rÀ}rÁ(h‚X Edit **rsc\_table\_vayu\_dsp.c**h‘j¼hœjáh�hàhƒ}rÂ(h…]hŽ]h‡]h†]h�]uh¤Mºh¦]rÃ(h¯XEdit rÄ…�rÅ}rÆ(h‚XEdit h‘jÀubj¯)�rÇ}rÈ(h‚X**rsc\_table\_vayu\_dsp.c**hƒ}rÉ(h…]hŽ]h‡]h†]h�]uh‘jÀh¦]rÊh¯Xrsc_table_vayu_dsp.crË…�rÌ}rÍ(h‚Uh‘jÇubah�j·ubeubaubaubhþ)�rÎ}rÏ(h‚Uh‘jÏhœjáh�jhƒ}rÐ(h…]hŽ]h‡]h†]h�]uh¤M¼h¥hh¦]rÑj)�rÒ}rÓ(h‚UjKh‘jÎhœjáh�h¤hƒ}rÔ(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�rÕ}rÖ(h‚XGSet this #define before it's used to select PHYS\_MEM\_IPC\_VRING valuer×h‘jÏhœjáh�hàhƒ}rØ(h…]hŽ]h‡]h†]h�]uh¤M¾h¥hh¦]rÙh¯XDSet this #define before it's used to select PHYS_MEM_IPC_VRING valuerÚ…�rÛ}rÜ(h‚XGSet this #define before it's used to select PHYS\_MEM\_IPC\_VRING valueh‘jÕubaubj¡)�rÝ}rÞ(h‚X#define VAYU_DSP_1h‘jÏhœjáh�j¤hƒ}rß(jt‰juXchÊhËh†]h‡]h…]jv}hŽ]h�]uh¤MÀh¥hh¦]ràh¯X#define VAYU_DSP_1rá…�râ}rã(h‚Uh‘jÝubaubhþ)�rä}rå(h‚Uh‘jÏhœjáh�jhƒ}ræ(h…]hŽ]h‡]h†]h�]uh¤MÄh¥hh¦]rçj)�rè}ré(h‚UjKh‘jähœjáh�h¤hƒ}rê(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�rë}rì(h‚X:Add this extern declaration prior to the symbol being usedríh‘jÏhœjáh�hàhƒ}rî(h…]hŽ]h‡]h†]h�]uh¤MÆh¥hh¦]rïh¯X:Add this extern declaration prior to the symbol being usedrð…�rñ}rò(h‚jíh‘jëubaubj¡)�ró}rô(h‚X5extern char ti_trace_SysMin_Module_State_0_outbuf__A;h‘jÏhœjáh�j¤hƒ}rõ(jt‰juXchÊhËh†]h‡]h…]jv}hŽ]h�]uh¤MÈh¥hh¦]röh¯X5extern char ti_trace_SysMin_Module_State_0_outbuf__A;r÷…�rø}rù(h‚Uh‘jóubaubhþ)�rú}rû(h‚Uh‘jÏhœjáh�jhƒ}rü(h…]hŽ]h‡]h†]h�]uh¤MÌh¥hh¦]rýj)�rþ}rÿ(h‚UjKh‘júhœjáh�h¤hƒ}r(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubj)�r}r(h‚Uh‘jÏhœjáh�j!hƒ}r(j#X-h†]h‡]h…]hŽ]h�]uh¤MÎh¥hh¦]rj@)�r}r(h‚XEdit **Server.c** h‘jhœjáh�jChƒ}r(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rhÜ)�r }r (h‚XEdit **Server.c**h‘jhœjáh�hàhƒ}r (h…]hŽ]h‡]h†]h�]uh¤MÎh¦]r (h¯XEdit r …�r}r(h‚XEdit h‘j ubj¯)�r}r(h‚X **Server.c**hƒ}r(h…]hŽ]h‡]h†]h�]uh‘j h¦]rh¯XServer.cr…�r}r(h‚Uh‘jubah�j·ubeubaubaubhþ)�r}r(h‚Uh‘jÏhœjáh�jhƒ}r(h…]hŽ]h‡]h†]h�]uh¤MÐh¥hh¦]rj)�r}r(h‚UjKh‘jhœjáh�h¤hƒ}r(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�r}r(h‚X3No longer have shared folder so change include pathr h‘jÏhœjáh�hàhƒ}r!(h…]hŽ]h‡]h†]h�]uh¤MÒh¥hh¦]r"h¯X3No longer have shared folder so change include pathr#…�r$}r%(h‚j h‘jubaubj¡)�r&}r'(h‚XU/* local header files */ //#include "../shared/AppCommon.h" #include "../AppCommon.h"h‘jÏhœjáh�j¤hƒ}r((jt‰juXchÊhËh†]h‡]h…]jv}hŽ]h�]uh¤MÔh¥hh¦]r)h¯XU/* local header files */ //#include "../shared/AppCommon.h" #include "../AppCommon.h"r*…�r+}r,(h‚Uh‘j&ubaubhþ)�r-}r.(h‚Uh‘jÏhœjáh�jhƒ}r/(h…]hŽ]h‡]h†]h�]uh¤MÚh¥hh¦]r0j)�r1}r2(h‚UjKh‘j-hœjáh�h¤hƒ}r3(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubh’)�r4}r5(h‚XDownload the Full CCS Projectr6h‘jÏhœjáh�hÓhƒ}r7(h†]r8Udownload-the-full-ccs-projectr9ah‡]h…]hŽ]h�]r:h7auh¤Nh¥hh¦]r;h¯XDownload the Full CCS Projectr<…�r=}r>(h‚j6h‘j4ubaubhÜ)�r?}r@(h‚X‹:download:`GPIO\_LedBlink\_evmAM572x\_c66xExampleProject\_with\_ipc.zip <../files/GPIO_LedBlink_evmAM572x_c66xExampleProject_with_ipc.zip>`rAh‘jÏhœjáh�hàhƒ}rB(h…]hŽ]h‡]h†]h�]uh¤Mßh¥hh¦]rCcsphinx.addnodes download_reference rD)�rE}rF(h‚X‹:download:`GPIO\_LedBlink\_evmAM572x\_c66xExampleProject\_with\_ipc.zip <../files/GPIO_LedBlink_evmAM572x_c66xExampleProject_with_ipc.zip>`rGh‘j?hœjáh�Udownload_referencerHhƒ}rI(UreftypeXdownloadrJUrefwarnrK‰U reftargetrLX@../files/GPIO_LedBlink_evmAM572x_c66xExampleProject_with_ipc.zipU refdomainUh†]h‡]U refexplicitˆh…]hŽ]h�]UrefdocrMX!linux/Foundational_Components_IPCrNUfilenamerOX7GPIO_LedBlink_evmAM572x_c66xExampleProject_with_ipc.ziprPuh¤Mßh¦]rQjÅ )�rR}rS(h‚jGhƒ}rT(h…]hŽ]rU(UxrefrVjJeh‡]h†]h�]uh‘jEh¦]rWh¯X7GPIO_LedBlink_evmAM572x_c66xExampleProject_with_ipc.ziprX…�rY}rZ(h‚Uh‘jRubah�jÍ ubaubaubh’)�r[}r\(h‚X8Adding IPC to an existing TI RTOS application on the IPUr]h‘jÏhœjáh�hÓhƒ}r^(h†]r_U8adding-ipc-to-an-existing-ti-rtos-application-on-the-ipur`ah‡]h…]hŽ]h�]rah.auh¤Nh¥hh¦]rbh¯X8Adding IPC to an existing TI RTOS application on the IPUrc…�rd}re(h‚j]h‘j[ubaubhÜ)�rf}rg(h‚XLA common thing people want to do is take an existing IPU application that may be controlling serial or control interfaces and add IPC to it so that the firmware can be loaded from the ARM. This is common when migrating from a IPU only solution to a heterogeneous SoC with an MPUSS (ARM) and IPUSS. This is the focus of this section.rhh‘jÏhœjáh�hàhƒ}ri(h…]hŽ]h‡]h†]h�]uh¤Måh¥hh¦]rjh¯XLA common thing people want to do is take an existing IPU application that may be controlling serial or control interfaces and add IPC to it so that the firmware can be loaded from the ARM. This is common when migrating from a IPU only solution to a heterogeneous SoC with an MPUSS (ARM) and IPUSS. This is the focus of this section.rk…�rl}rm(h‚jhh‘jfubaubhÜ)�rn}ro(h‚X}In order to describe this process, we need an example TI RTOS test case to work with. For this purpose, we'll be using the UART\_BasicExample\_evmAM572x\_m4ExampleProject example that's part of the PDK (installed as part of the Processor SDK RTOS). This example uses TI RTOS and does serial IO using UART3 port on the AM572x GP EVM, it's labeled Serial Debug on the EVM silkscreen.h‘jÏhœjáh�hàhƒ}rp(h…]hŽ]h‡]h†]h�]uh¤Mëh¥hh¦]rqh¯XzIn order to describe this process, we need an example TI RTOS test case to work with. For this purpose, we'll be using the UART_BasicExample_evmAM572x_m4ExampleProject example that's part of the PDK (installed as part of the Processor SDK RTOS). This example uses TI RTOS and does serial IO using UART3 port on the AM572x GP EVM, it's labeled Serial Debug on the EVM silkscreen.rr…�rs}rt(h‚X}In order to describe this process, we need an example TI RTOS test case to work with. For this purpose, we'll be using the UART\_BasicExample\_evmAM572x\_m4ExampleProject example that's part of the PDK (installed as part of the Processor SDK RTOS). This example uses TI RTOS and does serial IO using UART3 port on the AM572x GP EVM, it's labeled Serial Debug on the EVM silkscreen.h‘jnubaubhþ)�ru}rv(h‚Uh‘jÏhœjáh�jhƒ}rw(h…]hŽ]h‡]h†]h�]uh¤Mòh¥hh¦]rxj)�ry}rz(h‚UjKh‘juhœjáh�h¤hƒ}r{(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�r|}r}(h‚XuThere were several steps taken to make this whole process work, each of which will be described in following sectionsr~h‘jÏhœjáh�hàhƒ}r(h…]hŽ]h‡]h†]h�]uh¤Môh¥hh¦]r€h¯XuThere were several steps taken to make this whole process work, each of which will be described in following sectionsr�…�r‚}rƒ(h‚j~h‘j|ubaubj6)�r„}r…(h‚Uh‘jÏhœjáh�j9hƒ}r†(j;U.h†]h‡]h…]j<UhŽ]h�]j=j>uh¤M÷h¥hh¦]r‡(j@)�rˆ}r‰(h‚XXBuild and run the out-of-box UART M4 example on the EVM using Code Composer Studio (CCS)h‘j„hœjáh�jChƒ}rŠ(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r‹hÜ)�rŒ}r�(h‚XXBuild and run the out-of-box UART M4 example on the EVM using Code Composer Studio (CCS)rŽh‘jˆhœjáh�hàhƒ}r�(h…]hŽ]h‡]h†]h�]uh¤M÷h¦]r�h¯XXBuild and run the out-of-box UART M4 example on the EVM using Code Composer Studio (CCS)r‘…�r’}r“(h‚jŽh‘jŒubaubaubj@)�r”}r•(h‚X#Build and run the ex02\_messageQ example from the IPC software bundle and turn it into a CCS project. Build it and modify the Linux startup code to use this new image. This is just a sanity check step to make sure we can build the IPC examples in CCS and have them run at boot up on the EVM.h‘j„hœjáh�jChƒ}r–(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r—hÜ)�r˜}r™(h‚X#Build and run the ex02\_messageQ example from the IPC software bundle and turn it into a CCS project. Build it and modify the Linux startup code to use this new image. This is just a sanity check step to make sure we can build the IPC examples in CCS and have them run at boot up on the EVM.h‘j”hœjáh�hàhƒ}rš(h…]hŽ]h‡]h†]h�]uh¤Mùh¦]r›h¯X"Build and run the ex02_messageQ example from the IPC software bundle and turn it into a CCS project. Build it and modify the Linux startup code to use this new image. This is just a sanity check step to make sure we can build the IPC examples in CCS and have them run at boot up on the EVM.rœ…�r�}rž(h‚X#Build and run the ex02\_messageQ example from the IPC software bundle and turn it into a CCS project. Build it and modify the Linux startup code to use this new image. This is just a sanity check step to make sure we can build the IPC examples in CCS and have them run at boot up on the EVM.h‘j˜ubaubaubj@)�rŸ}r (h‚XIn CCS, make a clone of the out-of-box UART M4 example and rename it to denote it's the IPC version of the example. Then using the ex02\_messageq example as a reference, add in the IPC pieces to the UART example code. Build from CCS then add it to the Linux firmware folder. h‘j„hœjáh�jChƒ}r¡(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r¢hÜ)�r£}r¤(h‚XIn CCS, make a clone of the out-of-box UART M4 example and rename it to denote it's the IPC version of the example. Then using the ex02\_messageq example as a reference, add in the IPC pieces to the UART example code. Build from CCS then add it to the Linux firmware folder.h‘jŸhœjáh�hàhƒ}r¥(h…]hŽ]h‡]h†]h�]uh¤Mþh¦]r¦h¯XIn CCS, make a clone of the out-of-box UART M4 example and rename it to denote it's the IPC version of the example. Then using the ex02_messageq example as a reference, add in the IPC pieces to the UART example code. Build from CCS then add it to the Linux firmware folder.r§…�r¨}r©(h‚XIn CCS, make a clone of the out-of-box UART M4 example and rename it to denote it's the IPC version of the example. Then using the ex02\_messageq example as a reference, add in the IPC pieces to the UART example code. Build from CCS then add it to the Linux firmware folder.h‘j£ubaubaubeubh’)�rª}r«(h‚X,Running UART Read/Write PDK Example from CCSr¬h‘jÏhœjáh�hÓhƒ}r­(h†]r®U+running-uart-readwrite-pdk-example-from-ccsr¯ah‡]h…]hŽ]h�]r°hauh¤Nh¥hh¦]r±h¯X,Running UART Read/Write PDK Example from CCSr²…�r³}r´(h‚j¬h‘jªubaubhÜ)�rµ}r¶(h‚XòDevelopers are required to run pdkProjectCreate script to generate this example as described in the `Processor SDK RTOS article `__.h‘jÏhœjáh�hàhƒ}r·(h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]r¸(h¯XdDevelopers are required to run pdkProjectCreate script to generate this example as described in the r¹…�rº}r»(h‚XdDevelopers are required to run pdkProjectCreate script to generate this example as described in the h‘jµubj))�r¼}r½(h‚X�`Processor SDK RTOS article `__hƒ}r¾(UnameXProcessor SDK RTOS articlej-Xkhttp://software-dl.ti.com/processor-sdk-rtos/esd/docs/latest/rtos/index_overview.html#rebuilding-componentsh†]h‡]h…]hŽ]h�]uh‘jµh¦]r¿h¯XProcessor SDK RTOS articlerÀ…�rÁ}rÂ(h‚Uh‘j¼ubah�j2ubh¯X.…�rÃ}rÄ(h‚X.h‘jµubeubhÜ)�rÅ}rÆ(h‚XDFor the UART M4 example run the script with the following arguments:rÇh‘jÏhœjáh�hàhƒ}rÈ(h…]hŽ]h‡]h†]h�]uh¤M h¥hh¦]rÉh¯XDFor the UART M4 example run the script with the following arguments:rÊ…�rË}rÌ(h‚jÇh‘jÅubaubj¡)�rÍ}rÎ(h‚X4pdkProjectCreate.bat AM572x evmAM572x little uart m4h‘jÏhœjáh�j¤hƒ}rÏ(hÊhËh†]h‡]h…]hŽ]h�]uh¤MÒh¥hh¦]rÐh¯X4pdkProjectCreate.bat AM572x evmAM572x little uart m4rÑ…�rÒ}rÓ(h‚Uh‘jÍubaubhþ)�rÔ}rÕ(h‚Uh‘jÏhœjáh�jhƒ}rÖ(h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]r×j)�rØ}rÙ(h‚UjKh‘jÔhœjáh�h¤hƒ}rÚ(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�rÛ}rÜ(h‚X¿After you run the script, you can find the UART M4 example project at \\pdk\_am57xx\_1\_0\_4\\packages\\MyExampleProjects\\UART\_BasicExample\_evmAM572x\_m4ExampleProject.h‘jÏhœjáh�hàhƒ}rÝ(h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]rÞh¯X²After you run the script, you can find the UART M4 example project at \pdk_am57xx_1_0_4\packages\MyExampleProjects\UART_BasicExample_evmAM572x_m4ExampleProject.rß…�rà}rá(h‚X¿After you run the script, you can find the UART M4 example project at \\pdk\_am57xx\_1\_0\_4\\packages\\MyExampleProjects\\UART\_BasicExample\_evmAM572x\_m4ExampleProject.h‘jÛubaubhÜ)�râ}rã(h‚X÷Import the project in CCS and build the example. You can now connect to the EVM using an emulator and CCS using the instructions provided in `AM572x GP EVM Hardware Setup `__h‘jÏhœjáh�hàhƒ}rä(h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]rå(h¯X�Import the project in CCS and build the example. You can now connect to the EVM using an emulator and CCS using the instructions provided in ræ…�rç}rè(h‚X�Import the project in CCS and build the example. You can now connect to the EVM using an emulator and CCS using the instructions provided in h‘jâubj))�ré}rê(h‚Xj`AM572x GP EVM Hardware Setup `__hƒ}rë(UnameXAM572x GP EVM Hardware Setupj-XGHow_to_Guides_Hardware_Setup_with_CCS.html#am572x-gp-evm-hardware-setuph†]h‡]h…]hŽ]h�]uh‘jâh¦]rìh¯XAM572x GP EVM Hardware Setuprí…�rî}rï(h‚Uh‘jéubah�j2ubeubhÜ)�rð}rñ(h‚X÷Connect to the ARM core and make sure GEL runs multicore initialization and brings the IPUSS out of reset. Connect to IPU2 core0 and load and run the M4 UART example. When you run the code you should see the following log on the serial IO console:ròh‘jÏhœjáh�hàhƒ}ró(h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]rôh¯X÷Connect to the ARM core and make sure GEL runs multicore initialization and brings the IPUSS out of reset. Connect to IPU2 core0 and load and run the M4 UART example. When you run the code you should see the following log on the serial IO console:rõ…�rö}r÷(h‚jòh‘jðubaubj¡)�rø}rù(h‚Xøuart driver and utils example test cases : Enter 16 characters or press Esc 1234567890123456 <- user input Data received is 1234567890123456 <- loopback from user input uart driver and utils example test cases : Enter 16 characters or press Esch‘jÏhœjáh�j¤hƒ}rú(hÊhËh†]h‡]h…]hŽ]h�]uh¤Mäh¥hh¦]rûh¯Xøuart driver and utils example test cases : Enter 16 characters or press Esc 1234567890123456 <- user input Data received is 1234567890123456 <- loopback from user input uart driver and utils example test cases : Enter 16 characters or press Escrü…�rý}rþ(h‚Uh‘jøubaubhþ)�rÿ}r(h‚Uh‘jÏhœjáh�jhƒ}r(h…]hŽ]h‡]h†]h�]uh¤M*h¥hh¦]rj)�r}r(h‚UjKh‘jÿhœjáh�h¤hƒ}r(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubh’)�r}r(h‚X(Build and Run ex02\_messageq IPC exampleh‘jÏhœjáh�hÓhƒ}r(h†]r U'build-and-run-ex02-messageq-ipc-exampler ah‡]h…]hŽ]h�]r h*auh¤Nh¥hh¦]r h¯X'Build and Run ex02_messageq IPC exampler …�r}r(h‚X(Build and Run ex02\_messageq IPC exampleh‘jubaubhÜ)�r}r(h‚X|Follow instructions described in Article `Run IPC Linux Examples `__h‘jÏhœjáh�hàhƒ}r(h…]hŽ]h‡]h†]h�]uh¤M/h¥hh¦]r(h¯X)Follow instructions described in Article r…�r}r(h‚X)Follow instructions described in Article h‘jubj))�r}r(h‚XS`Run IPC Linux Examples `__hƒ}r(UnameXRun IPC Linux Examplesj-X6Foundational_Components_IPC.html#ipc-quick-start-guideh†]h‡]h…]hŽ]h�]uh‘jh¦]rh¯XRun IPC Linux Examplesr…�r}r(h‚Uh‘jubah�j2ubeubh’)�r}r(h‚XLUpdate Linux Kernel device tree to remove UART that will be controlled by M4r h‘jÏhœjáh�hÓhƒ}r!(h†]r"ULupdate-linux-kernel-device-tree-to-remove-uart-that-will-be-controlled-by-m4r#ah‡]h…]hŽ]h�]r$hjauh¤Nh¥hh¦]r%h¯XLUpdate Linux Kernel device tree to remove UART that will be controlled by M4r&…�r'}r((h‚j h‘jubaubhÜ)�r)}r*(h‚XÊLinux kernel enables all SOC HW modules which are required for its configuration. Appropriate drivers configure required clocks and initialize HW registers. For all unused IPs clocks are not configured.r+h‘jÏhœjáh�hàhƒ}r,(h…]hŽ]h‡]h†]h�]uh¤M6h¥hh¦]r-h¯XÊLinux kernel enables all SOC HW modules which are required for its configuration. Appropriate drivers configure required clocks and initialize HW registers. For all unused IPs clocks are not configured.r.…�r/}r0(h‚j+h‘j)ubaubhÜ)�r1}r2(h‚XrThe uart3 node is disabled in kernel using device tree. Also this restricts kernel to put those IPs to sleep mode.r3h‘jÏhœjáh�hàhƒ}r4(h…]hŽ]h‡]h†]h�]uh¤M:h¥hh¦]r5h¯XrThe uart3 node is disabled in kernel using device tree. Also this restricts kernel to put those IPs to sleep mode.r6…�r7}r8(h‚j3h‘j1ubaubj¡)�r9}r:(h‚X4&uart3 { status = "disabled"; ti,no-idle; };h‘jÏhœjáh�j¤hƒ}r;(hÊhËh†]h‡]h…]hŽ]h�]uh¤Mh¥hh¦]r<h¯X4&uart3 { status = "disabled"; ti,no-idle; };r=…�r>}r?(h‚Uh‘j9ubaubh’)�r@}rA(h‚XAdd IPC to the UART ExamplerBh‘jÏhœjáh�hÓhƒ}rC(h†]rDUadd-ipc-to-the-uart-examplerEah‡]h…]hŽ]h�]rFhVauh¤Nh¥hh¦]rGh¯XAdd IPC to the UART ExamplerH…�rI}rJ(h‚jBh‘j@ubaubhÜ)�rK}rL(h‚X©The first step is to clone our out-of-box UART example CCS project and rename it to denote it's using IPC. The easiest way to do this is using CCS. Here are the steps...rMh‘jÏhœjáh�hàhƒ}rN(h…]hŽ]h‡]h†]h�]uh¤MGh¥hh¦]rOh¯X©The first step is to clone our out-of-box UART example CCS project and rename it to denote it's using IPC. The easiest way to do this is using CCS. Here are the steps...rP…�rQ}rR(h‚jMh‘jKubaubj)�rS}rT(h‚Uh‘jÏhœjáh�j!hƒ}rU(j#X-h†]h‡]h…]hŽ]h�]uh¤MKh¥hh¦]rV(j@)�rW}rX(h‚XðIn the **Edit** perspective, go into your **Project Explorer** window and right click on your UART\_BasicExample\_evmAM572x\_m4ExampleProject project and select **copy** from the pop-up menu. Maske sure the project is not is a closed state.h‘jShœjáh�jChƒ}rY(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rZhÜ)�r[}r\(h‚XðIn the **Edit** perspective, go into your **Project Explorer** window and right click on your UART\_BasicExample\_evmAM572x\_m4ExampleProject project and select **copy** from the pop-up menu. Maske sure the project is not is a closed state.h‘jWhœjáh�hàhƒ}r](h…]hŽ]h‡]h†]h�]uh¤MKh¦]r^(h¯XIn the r_…�r`}ra(h‚XIn the h‘j[ubj¯)�rb}rc(h‚X**Edit**hƒ}rd(h…]hŽ]h‡]h†]h�]uh‘j[h¦]reh¯XEditrf…�rg}rh(h‚Uh‘jbubah�j·ubh¯X perspective, go into your ri…�rj}rk(h‚X perspective, go into your h‘j[ubj¯)�rl}rm(h‚X**Project Explorer**hƒ}rn(h…]hŽ]h‡]h†]h�]uh‘j[h¦]roh¯XProject Explorerrp…�rq}rr(h‚Uh‘jlubah�j·ubh¯X` window and right click on your UART_BasicExample_evmAM572x_m4ExampleProject project and select rs…�rt}ru(h‚Xc window and right click on your UART\_BasicExample\_evmAM572x\_m4ExampleProject project and select h‘j[ubj¯)�rv}rw(h‚X**copy**hƒ}rx(h…]hŽ]h‡]h†]h�]uh‘j[h¦]ryh¯Xcopyrz…�r{}r|(h‚Uh‘jvubah�j·ubh¯XG from the pop-up menu. Maske sure the project is not is a closed state.r}…�r~}r(h‚XG from the pop-up menu. Maske sure the project is not is a closed state.h‘j[ubeubaubj@)�r€}r�(h‚XLRick click in and empty area of the project explorer window and select past.h‘jShœjáh�jChƒ}r‚(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rƒhÜ)�r„}r…(h‚XLRick click in and empty area of the project explorer window and select past.r†h‘j€hœjáh�hàhƒ}r‡(h…]hŽ]h‡]h†]h�]uh¤MOh¦]rˆh¯XLRick click in and empty area of the project explorer window and select past.r‰…�rŠ}r‹(h‚j†h‘j„ubaubaubj@)�rŒ}r�(h‚X‹A dialog box pops up, modify the name to denote it's using IPC. A good name is UART\_BasicExample\_evmAM572x\_m4ExampleProject\_with\_ipc. h‘jShœjáh�jChƒ}rŽ(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r�hÜ)�r�}r‘(h‚XŠA dialog box pops up, modify the name to denote it's using IPC. A good name is UART\_BasicExample\_evmAM572x\_m4ExampleProject\_with\_ipc.h‘jŒhœjáh�hàhƒ}r’(h…]hŽ]h‡]h†]h�]uh¤MQh¦]r“h¯X…A dialog box pops up, modify the name to denote it's using IPC. A good name is UART_BasicExample_evmAM572x_m4ExampleProject_with_ipc.r”…�r•}r–(h‚XŠA dialog box pops up, modify the name to denote it's using IPC. A good name is UART\_BasicExample\_evmAM572x\_m4ExampleProject\_with\_ipc.h‘j�ubaubaubeubhþ)�r—}r˜(h‚Uh‘jÏhœjáh�jhƒ}r™(h…]hŽ]h‡]h†]h�]uh¤MUh¥hh¦]ršj)�r›}rœ(h‚UjKh‘j—hœjáh�h¤hƒ}r�(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�rž}rŸ(h‚X­This is the project we'll be working with from here on. The next thing we want to do is select the proper RTSC platform and other components. To do this, follow these steps.r h‘jÏhœjáh�hàhƒ}r¡(h…]hŽ]h‡]h†]h�]uh¤MWh¥hh¦]r¢h¯X­This is the project we'll be working with from here on. The next thing we want to do is select the proper RTSC platform and other components. To do this, follow these steps.r£…�r¤}r¥(h‚j h‘jžubaubj)�r¦}r§(h‚Uh‘jÏhœjáh�j!hƒ}r¨(j#X-h†]h‡]h…]hŽ]h�]uh¤M[h¥hh¦]r©(j@)�rª}r«(h‚XoRight click on the UART\_BasicExample\_evmAM572x\_m4ExampleProject\_with\_ipc project and select **Properties**h‘j¦hœjáh�jChƒ}r¬(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r­hÜ)�r®}r¯(h‚XoRight click on the UART\_BasicExample\_evmAM572x\_m4ExampleProject\_with\_ipc project and select **Properties**h‘jªhœjáh�hàhƒ}r°(h…]hŽ]h‡]h†]h�]uh¤M[h¦]r±(h¯X\Right click on the UART_BasicExample_evmAM572x_m4ExampleProject_with_ipc project and select r²…�r³}r´(h‚XaRight click on the UART\_BasicExample\_evmAM572x\_m4ExampleProject\_with\_ipc project and select h‘j®ubj¯)�rµ}r¶(h‚X**Properties**hƒ}r·(h…]hŽ]h‡]h†]h�]uh‘j®h¦]r¸h¯X Propertiesr¹…�rº}r»(h‚Uh‘jµubah�j·ubeubaubj@)�r¼}r½(h‚X0In the left hand pane, click on **CCS General**.r¾h‘j¦hœjáh�jChƒ}r¿(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rÀhÜ)�rÁ}rÂ(h‚j¾h‘j¼hœjáh�hàhƒ}rÃ(h…]hŽ]h‡]h†]h�]uh¤M^h¦]rÄ(h¯X In the left hand pane, click on rÅ…�rÆ}rÇ(h‚X In the left hand pane, click on h‘jÁubj¯)�rÈ}rÉ(h‚X**CCS General**hƒ}rÊ(h…]hŽ]h‡]h†]h�]uh‘jÁh¦]rËh¯X CCS GeneralrÌ…�rÍ}rÎ(h‚Uh‘jÈubah�j·ubh¯X.…�rÏ}rÐ(h‚X.h‘jÁubeubaubj@)�rÑ}rÒ(h‚X1On the right hand side, click on the **RTSC** tabrÓh‘j¦hœjáh�jChƒ}rÔ(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rÕhÜ)�rÖ}r×(h‚jÓh‘jÑhœjáh�hàhƒ}rØ(h…]hŽ]h‡]h†]h�]uh¤M_h¦]rÙ(h¯X%On the right hand side, click on the rÚ…�rÛ}rÜ(h‚X%On the right hand side, click on the h‘jÖubj¯)�rÝ}rÞ(h‚X**RTSC**hƒ}rß(h…]hŽ]h‡]h†]h�]uh‘jÖh¦]ràh¯XRTSCrá…�râ}rã(h‚Uh‘jÝubah�j·ubh¯X tabrä…�rå}ræ(h‚X tabh‘jÖubeubaubj@)�rç}rè(h‚X0For **XDCtools version:** select 3.xx.x.xx\_coreréh‘j¦hœjáh�jChƒ}rê(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rëhÜ)�rì}rí(h‚jéh‘jçhœjáh�hàhƒ}rî(h…]hŽ]h‡]h†]h�]uh¤M`h¦]rï(h¯XFor rð…�rñ}rò(h‚XFor h‘jìubj¯)�ró}rô(h‚X**XDCtools version:**hƒ}rõ(h…]hŽ]h‡]h†]h�]uh‘jìh¦]röh¯XXDCtools version:r÷…�rø}rù(h‚Uh‘jóubah�j·ubh¯X select 3.xx.x.xx_corerú…�rû}rü(h‚X select 3.xx.x.xx\_coreh‘jìubeubaubj@)�rý}rþ(h‚X…In the list of **Products and Repositories**, **check** the following... - IPC 3.xx.x.xx - SYS/BIOS 6.4x.x.xx - am57xx PDK x.x.x h‘j¦hœNh�jChƒ}rÿ(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r(hÜ)�r}r(h‚XHIn the list of **Products and Repositories**, **check** the following...h‘jýhœjáh�hàhƒ}r(h…]hŽ]h‡]h†]h�]uh¤Mah¦]r(h¯XIn the list of r…�r}r(h‚XIn the list of h‘jubj¯)�r}r (h‚X**Products and Repositories**hƒ}r (h…]hŽ]h‡]h†]h�]uh‘jh¦]r h¯XProducts and Repositoriesr …�r }r(h‚Uh‘jubah�j·ubh¯X, r…�r}r(h‚X, h‘jubj¯)�r}r(h‚X **check**hƒ}r(h…]hŽ]h‡]h†]h�]uh‘jh¦]rh¯Xcheckr…�r}r(h‚Uh‘jubah�j·ubh¯X the following...r…�r}r(h‚X the following...h‘jubeubj)�r}r(h‚Uhƒ}r(j#X-h†]h‡]h…]hŽ]h�]uh‘jýh¦]r(j@)�r }r!(h‚X IPC 3.xx.x.xxr"hƒ}r#(h…]hŽ]h‡]h†]h�]uh‘jh¦]r$hÜ)�r%}r&(h‚j"h‘j hœjáh�hàhƒ}r'(h…]hŽ]h‡]h†]h�]uh¤Mch¦]r(h¯X IPC 3.xx.x.xxr)…�r*}r+(h‚j"h‘j%ubaubah�jCubj@)�r,}r-(h‚XSYS/BIOS 6.4x.x.xxr.hƒ}r/(h…]hŽ]h‡]h†]h�]uh‘jh¦]r0hÜ)�r1}r2(h‚j.h‘j,hœjáh�hàhƒ}r3(h…]hŽ]h‡]h†]h�]uh¤Mdh¦]r4h¯XSYS/BIOS 6.4x.x.xxr5…�r6}r7(h‚j.h‘j1ubaubah�jCubj@)�r8}r9(h‚Xam57xx PDK x.x.x hƒ}r:(h…]hŽ]h‡]h†]h�]uh‘jh¦]r;hÜ)�r<}r=(h‚Xam57xx PDK x.x.xr>h‘j8hœjáh�hàhƒ}r?(h…]hŽ]h‡]h†]h�]uh¤Meh¦]r@h¯Xam57xx PDK x.x.xrA…�rB}rC(h‚j>h‘j<ubaubah�jCubeh�j!ubeubj@)�rD}rE(h‚X0For **Target**, select **ti.targets.arm.elf.M4**rFh‘j¦hœjáh�jChƒ}rG(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rHhÜ)�rI}rJ(h‚jFh‘jDhœjáh�hàhƒ}rK(h…]hŽ]h‡]h†]h�]uh¤Mgh¦]rL(h¯XFor rM…�rN}rO(h‚XFor h‘jIubj¯)�rP}rQ(h‚X **Target**hƒ}rR(h…]hŽ]h‡]h†]h�]uh‘jIh¦]rSh¯XTargetrT…�rU}rV(h‚Uh‘jPubah�j·ubh¯X , select rW…�rX}rY(h‚X , select h‘jIubj¯)�rZ}r[(h‚X**ti.targets.arm.elf.M4**hƒ}r\(h…]hŽ]h‡]h†]h�]uh‘jIh¦]r]h¯Xti.targets.arm.elf.M4r^…�r_}r`(h‚Uh‘jZubah�j·ubeubaubj@)�ra}rb(h‚X3For **Platform**, select **ti.platforms.evmDRA7XX**rch‘j¦hœjáh�jChƒ}rd(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rehÜ)�rf}rg(h‚jch‘jahœjáh�hàhƒ}rh(h…]hŽ]h‡]h†]h�]uh¤Mhh¦]ri(h¯XFor rj…�rk}rl(h‚XFor h‘jfubj¯)�rm}rn(h‚X **Platform**hƒ}ro(h…]hŽ]h‡]h†]h�]uh‘jfh¦]rph¯XPlatformrq…�rr}rs(h‚Uh‘jmubah�j·ubh¯X , select rt…�ru}rv(h‚X , select h‘jfubj¯)�rw}rx(h‚X**ti.platforms.evmDRA7XX**hƒ}ry(h…]hŽ]h‡]h†]h�]uh‘jfh¦]rzh¯Xti.platforms.evmDRA7XXr{…�r|}r}(h‚Uh‘jwubah�j·ubeubaubj@)�r~}r(h‚X‡Once the platform is selected, edit its name buy hand and append :ipu2 to the end. After this it should be ti.platforms.evmDRA7XX:ipu2h‘j¦hœjáh�jChƒ}r€(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r�hÜ)�r‚}rƒ(h‚X‡Once the platform is selected, edit its name buy hand and append :ipu2 to the end. After this it should be ti.platforms.evmDRA7XX:ipu2r„h‘j~hœjáh�hàhƒ}r…(h…]hŽ]h‡]h†]h�]uh¤Mih¦]r†h¯X‡Once the platform is selected, edit its name buy hand and append :ipu2 to the end. After this it should be ti.platforms.evmDRA7XX:ipu2r‡…�rˆ}r‰(h‚j„h‘j‚ubaubaubj@)�rŠ}r‹(h‚X6Go ahead and leave the **Build-profile** set to debug.rŒh‘j¦hœjáh�jChƒ}r�(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rŽhÜ)�r�}r�(h‚jŒh‘jŠhœjáh�hàhƒ}r‘(h…]hŽ]h‡]h†]h�]uh¤Mlh¦]r’(h¯XGo ahead and leave the r“…�r”}r•(h‚XGo ahead and leave the h‘j�ubj¯)�r–}r—(h‚X**Build-profile**hƒ}r˜(h…]hŽ]h‡]h†]h�]uh‘j�h¦]r™h¯X Build-profilerš…�r›}rœ(h‚Uh‘j–ubah�j·ubh¯X set to debug.r�…�rž}rŸ(h‚X set to debug.h‘j�ubeubaubj@)�r }r¡(h‚XHit the OK button. h‘j¦hœjáh�jChƒ}r¢(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r£hÜ)�r¤}r¥(h‚XHit the OK button.r¦h‘j hœjáh�hàhƒ}r§(h…]hŽ]h‡]h†]h�]uh¤Mmh¦]r¨h¯XHit the OK button.r©…�rª}r«(h‚j¦h‘j¤ubaubaubeubhþ)�r¬}r­(h‚Uh‘jÏhœjáh�jhƒ}r®(h…]hŽ]h‡]h†]h�]uh¤Moh¥hh¦]r¯j)�r°}r±(h‚UjKh‘j¬hœjáh�h¤hƒ}r²(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�r³}r´(h‚XhNow we want to copy configuration and source files from the ex02\_messageq IPC example into our project. The IPC example is located at **C:\\ti\\ipc\_3\_xx\_xx\_xx\\examples\\DRA7XX\_linux\_elf\\ex02\_messageq**. To copy files into your CCS project, you can simply select the files you want in Windows explorer then drag and drop them into your project in CCS.h‘jÏhœjáh�hàhƒ}rµ(h…]hŽ]h‡]h†]h�]uh¤Mqh¥hh¦]r¶(h¯X†Now we want to copy configuration and source files from the ex02_messageq IPC example into our project. The IPC example is located at r·…�r¸}r¹(h‚X‡Now we want to copy configuration and source files from the ex02\_messageq IPC example into our project. The IPC example is located at h‘j³ubj¯)�rº}r»(h‚XL**C:\\ti\\ipc\_3\_xx\_xx\_xx\\examples\\DRA7XX\_linux\_elf\\ex02\_messageq**hƒ}r¼(h…]hŽ]h‡]h†]h�]uh‘j³h¦]r½h¯X<C:\ti\ipc_3_xx_xx_xx\examples\DRA7XX_linux_elf\ex02_messageqr¾…�r¿}rÀ(h‚Uh‘jºubah�j·ubh¯X•. To copy files into your CCS project, you can simply select the files you want in Windows explorer then drag and drop them into your project in CCS.rÁ…�rÂ}rÃ(h‚X•. To copy files into your CCS project, you can simply select the files you want in Windows explorer then drag and drop them into your project in CCS.h‘j³ubeubhÜ)�rÄ}rÅ(h‚X)Copy these files into your CCS project...rÆh‘jÏhœjáh�hàhƒ}rÇ(h…]hŽ]h‡]h†]h�]uh¤Myh¥hh¦]rÈh¯X)Copy these files into your CCS project...rÉ…�rÊ}rË(h‚jÆh‘jÄubaubj)�rÌ}rÍ(h‚Uh‘jÏhœjáh�j!hƒ}rÎ(j#X-h†]h‡]h…]hŽ]h�]uh¤M{h¥hh¦]rÏ(j@)�rÐ}rÑ(h‚X]C:\\ti\\ipc\_3\_xx\_xx\_xx\\examples\\DRA7XX\_linux\_elf\\ex02\_messageq\\shared\\AppCommon.hrÒh‘jÌhœjáh�jChƒ}rÓ(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rÔhÜ)�rÕ}rÖ(h‚jÒh‘jÐhœjáh�hàhƒ}r×(h…]hŽ]h‡]h†]h�]uh¤M{h¦]rØh¯XOC:\ti\ipc_3_xx_xx_xx\examples\DRA7XX_linux_elf\ex02_messageq\shared\AppCommon.hrÙ…�rÚ}rÛ(h‚X]C:\\ti\\ipc\_3\_xx\_xx\_xx\\examples\\DRA7XX\_linux\_elf\\ex02\_messageq\\shared\\AppCommon.hh‘jÕubaubaubj@)�rÜ}rÝ(h‚X\C:\\ti\\ipc\_3\_xx\_xx\_xx\\examples\\DRA7XX\_linux\_elf\\ex02\_messageq\\shared\\config.bldrÞh‘jÌhœjáh�jChƒ}rß(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]ràhÜ)�rá}râ(h‚jÞh‘jÜhœjáh�hàhƒ}rã(h…]hŽ]h‡]h†]h�]uh¤M|h¦]räh¯XNC:\ti\ipc_3_xx_xx_xx\examples\DRA7XX_linux_elf\ex02_messageq\shared\config.bldrå…�ræ}rç(h‚X\C:\\ti\\ipc\_3\_xx\_xx\_xx\\examples\\DRA7XX\_linux\_elf\\ex02\_messageq\\shared\\config.bldh‘jáubaubaubj@)�rè}ré(h‚X]C:\\ti\\ipc\_3\_xx\_xx\_xx\\examples\\DRA7XX\_linux\_elf\\ex02\_messageq\\shared\\ipc.cfg.xs h‘jÌhœjáh�jChƒ}rê(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rëhÜ)�rì}rí(h‚X\C:\\ti\\ipc\_3\_xx\_xx\_xx\\examples\\DRA7XX\_linux\_elf\\ex02\_messageq\\shared\\ipc.cfg.xsh‘jèhœjáh�hàhƒ}rî(h…]hŽ]h‡]h†]h�]uh¤M}h¦]rïh¯XNC:\ti\ipc_3_xx_xx_xx\examples\DRA7XX_linux_elf\ex02_messageq\shared\ipc.cfg.xsrð…�rñ}rò(h‚X\C:\\ti\\ipc\_3\_xx\_xx\_xx\\examples\\DRA7XX\_linux\_elf\\ex02\_messageq\\shared\\ipc.cfg.xsh‘jìubaubaubeubhþ)�ró}rô(h‚Uh‘jÏhœjáh�jhƒ}rõ(h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]röj)�r÷}rø(h‚UjKh‘jóhœjáh�h¤hƒ}rù(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�rú}rû(h‚X-Now copy these files into your CCS project...rüh‘jÏhœjáh�hàhƒ}rý(h…]hŽ]h‡]h†]h�]uh¤M�h¥hh¦]rþh¯X-Now copy these files into your CCS project...rÿ…�r }r (h‚jüh‘júubaubj)�r }r (h‚Uh‘jÏhœjáh�j!hƒ}r (j#X-h†]h‡]h…]hŽ]h�]uh¤Mƒh¥hh¦]r (j@)�r }r (h‚XXC:\\ti\\ipc\_3\_xx\_xx\_xx\\examples\\DRA7XX\_linux\_elf\\ex02\_messageq\\ipu2\\Ipu2.cfgr h‘j hœjáh�jChƒ}r (h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r hÜ)�r }r (h‚j h‘j hœjáh�hàhƒ}r (h…]hŽ]h‡]h†]h�]uh¤Mƒh¦]r h¯XJC:\ti\ipc_3_xx_xx_xx\examples\DRA7XX_linux_elf\ex02_messageq\ipu2\Ipu2.cfgr …�r }r (h‚XXC:\\ti\\ipc\_3\_xx\_xx\_xx\\examples\\DRA7XX\_linux\_elf\\ex02\_messageq\\ipu2\\Ipu2.cfgh‘j ubaubaubj@)�r }r (h‚XZC:\\ti\\ipc\_3\_xx\_xx\_xx\\examples\\DRA7XX\_linux\_elf\\ex02\_messageq\\ipu2\\MainIpu2.cr h‘j hœjáh�jChƒ}r (h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r hÜ)�r }r (h‚j h‘j hœjáh�hàhƒ}r (h…]hŽ]h‡]h†]h�]uh¤M„h¦]r h¯XLC:\ti\ipc_3_xx_xx_xx\examples\DRA7XX_linux_elf\ex02_messageq\ipu2\MainIpu2.cr …�r }r (h‚XZC:\\ti\\ipc\_3\_xx\_xx\_xx\\examples\\DRA7XX\_linux\_elf\\ex02\_messageq\\ipu2\\MainIpu2.ch‘j ubaubaubj@)�r }r (h‚XXC:\\ti\\ipc\_3\_xx\_xx\_xx\\examples\\DRA7XX\_linux\_elf\\ex02\_messageq\\ipu2\\Server.cr h‘j hœjáh�jChƒ}r! (h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r" hÜ)�r# }r$ (h‚j h‘j hœjáh�hàhƒ}r% (h…]hŽ]h‡]h†]h�]uh¤M…h¦]r& h¯XJC:\ti\ipc_3_xx_xx_xx\examples\DRA7XX_linux_elf\ex02_messageq\ipu2\Server.cr' …�r( }r) (h‚XXC:\\ti\\ipc\_3\_xx\_xx\_xx\\examples\\DRA7XX\_linux\_elf\\ex02\_messageq\\ipu2\\Server.ch‘j# ubaubaubj@)�r* }r+ (h‚XYC:\\ti\\ipc\_3\_xx\_xx\_xx\\examples\\DRA7XX\_linux\_elf\\ex02\_messageq\\ipu2\\Server.h h‘j hœjáh�jChƒ}r, (h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r- hÜ)�r. }r/ (h‚XXC:\\ti\\ipc\_3\_xx\_xx\_xx\\examples\\DRA7XX\_linux\_elf\\ex02\_messageq\\ipu2\\Server.hh‘j* hœjáh�hàhƒ}r0 (h…]hŽ]h‡]h†]h�]uh¤M†h¦]r1 h¯XJC:\ti\ipc_3_xx_xx_xx\examples\DRA7XX_linux_elf\ex02_messageq\ipu2\Server.hr2 …�r3 }r4 (h‚XXC:\\ti\\ipc\_3\_xx\_xx\_xx\\examples\\DRA7XX\_linux\_elf\\ex02\_messageq\\ipu2\\Server.hh‘j. ubaubaubeubhþ)�r5 }r6 (h‚Uh‘jÏhœjáh�jhƒ}r7 (h…]hŽ]h‡]h†]h�]uh¤Mˆh¥hh¦]r8 j)�r9 }r: (h‚UjKh‘j5 hœjáh�h¤hƒ}r; (h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubj)�r< }r= (h‚X9When you copy Ipu2.cfg into your CCS project, it should show up greyed out. If not, right click and exclude it from build. This is because the UART example already has a cfg file (uart\_m4\_evmAM572x.cfg). The Ipu2.cfg will be used for copying and pasting. When it's all done, you can delete it from your project.h‘jÏhœjáh�jhƒ}r> (h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r? hÜ)�r@ }rA (h‚X9When you copy Ipu2.cfg into your CCS project, it should show up greyed out. If not, right click and exclude it from build. This is because the UART example already has a cfg file (uart\_m4\_evmAM572x.cfg). The Ipu2.cfg will be used for copying and pasting. When it's all done, you can delete it from your project.h‘j< hœjáh�hàhƒ}rB (h…]hŽ]h‡]h†]h�]uh¤M‹h¦]rC h¯X7When you copy Ipu2.cfg into your CCS project, it should show up greyed out. If not, right click and exclude it from build. This is because the UART example already has a cfg file (uart_m4_evmAM572x.cfg). The Ipu2.cfg will be used for copying and pasting. When it's all done, you can delete it from your project.rD …�rE }rF (h‚X9When you copy Ipu2.cfg into your CCS project, it should show up greyed out. If not, right click and exclude it from build. This is because the UART example already has a cfg file (uart\_m4\_evmAM572x.cfg). The Ipu2.cfg will be used for copying and pasting. When it's all done, you can delete it from your project.h‘j@ ubaubaubhÜ)�rG }rH (h‚XiFinally, you will likely want to use a custom resource table so copy these files into your CCS project...rI h‘jÏhœjáh�hàhƒ}rJ (h…]hŽ]h‡]h†]h�]uh¤M‘h¥hh¦]rK h¯XiFinally, you will likely want to use a custom resource table so copy these files into your CCS project...rL …�rM }rN (h‚jI h‘jG ubaubj)�rO }rP (h‚Uh‘jÏhœjáh�j!hƒ}rQ (j#X-h†]h‡]h…]hŽ]h�]uh¤M”h¥hh¦]rR (j@)�rS }rT (h‚XRC:\\ti\\ipc\_3\_xx\_xx\_xx\\packages\\ti\\ipc\\remoteproc\\rsc\_table\_vayu\_ipu.hrU h‘jO hœjáh�jChƒ}rV (h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rW hÜ)�rX }rY (h‚jU h‘jS hœjáh�hàhƒ}rZ (h…]hŽ]h‡]h†]h�]uh¤M”h¦]r[ h¯XDC:\ti\ipc_3_xx_xx_xx\packages\ti\ipc\remoteproc\rsc_table_vayu_ipu.hr\ …�r] }r^ (h‚XRC:\\ti\\ipc\_3\_xx\_xx\_xx\\packages\\ti\\ipc\\remoteproc\\rsc\_table\_vayu\_ipu.hh‘jX ubaubaubj@)�r_ }r` (h‚XHC:\\ti\\ipc\_3\_xx\_xx\_xx\\packages\\ti\\ipc\\remoteproc\\rsc\_types.h h‘jO hœjáh�jChƒ}ra (h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rb hÜ)�rc }rd (h‚XGC:\\ti\\ipc\_3\_xx\_xx\_xx\\packages\\ti\\ipc\\remoteproc\\rsc\_types.hh‘j_ hœjáh�hàhƒ}re (h…]hŽ]h‡]h†]h�]uh¤M•h¦]rf h¯X;C:\ti\ipc_3_xx_xx_xx\packages\ti\ipc\remoteproc\rsc_types.hrg …�rh }ri (h‚XGC:\\ti\\ipc\_3\_xx\_xx\_xx\\packages\\ti\\ipc\\remoteproc\\rsc\_types.hh‘jc ubaubaubeubhÜ)�rj }rk (h‚XeThe rsc\_table\_vayu\_dsp.h file defines an initialized structure so let's make a **.c** source file.h‘jÏhœjáh�hàhƒ}rl (h…]hŽ]h‡]h†]h�]uh¤M—h¥hh¦]rm (h¯XOThe rsc_table_vayu_dsp.h file defines an initialized structure so let's make a rn …�ro }rp (h‚XRThe rsc\_table\_vayu\_dsp.h file defines an initialized structure so let's make a h‘jj ubj¯)�rq }rr (h‚X**.c**hƒ}rs (h…]hŽ]h‡]h†]h�]uh‘jj h¦]rt h¯X.cru …�rv }rw (h‚Uh‘jq ubah�j·ubh¯X source file.rx …�ry }rz (h‚X source file.h‘jj ubeubj)�r{ }r| (h‚Uh‘jÏhœjáh�j!hƒ}r} (j#X-h†]h‡]h…]hŽ]h�]uh¤Mšh¥hh¦]r~ j@)�r }r€ (h‚XOIn your CCS project, rename rsc\_table\_vayu\_ipu.h to rsc\_table\_vayu\_ipu.c h‘j{ hœjáh�jChƒ}r� (h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r‚ hÜ)�rƒ }r„ (h‚XNIn your CCS project, rename rsc\_table\_vayu\_ipu.h to rsc\_table\_vayu\_ipu.ch‘j hœjáh�hàhƒ}r… (h…]hŽ]h‡]h†]h�]uh¤Mšh¦]r† h¯XHIn your CCS project, rename rsc_table_vayu_ipu.h to rsc_table_vayu_ipu.cr‡ …�rˆ }r‰ (h‚XNIn your CCS project, rename rsc\_table\_vayu\_ipu.h to rsc\_table\_vayu\_ipu.ch‘jƒ ubaubaubaubhþ)�rŠ }r‹ (h‚Uh‘jÏhœjáh�jhƒ}rŒ (h…]hŽ]h‡]h†]h�]uh¤M�h¥hh¦]r� j)�rŽ }r� (h‚UjKh‘jŠ hœjáh�h¤hƒ}r� (h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�r‘ }r’ (h‚X€Now we want to **merge** the IPC example configuration file with the LED blink example configuration file. Follow these steps...h‘jÏhœjáh�hàhƒ}r“ (h…]hŽ]h‡]h†]h�]uh¤MŸh¥hh¦]r” (h¯XNow we want to r• …�r– }r— (h‚XNow we want to h‘j‘ ubj¯)�r˜ }r™ (h‚X **merge**hƒ}rš (h…]hŽ]h‡]h†]h�]uh‘j‘ h¦]r› h¯Xmergerœ …�r� }rž (h‚Uh‘j˜ ubah�j·ubh¯Xh the IPC example configuration file with the LED blink example configuration file. Follow these steps...rŸ …�r  }r¡ (h‚Xh the IPC example configuration file with the LED blink example configuration file. Follow these steps...h‘j‘ ubeubj)�r¢ }r£ (h‚Uh‘jÏhœjáh�j!hƒ}r¤ (j#X-h†]h‡]h…]hŽ]h�]uh¤M¢h¥hh¦]r¥ (j@)�r¦ }r§ (h‚X†Open up **Ipu2.cfg** using a text editor (don't open it using the GUI). Right click on it and select **Open With -> XDCscript Editor**h‘j¢ hœjáh�jChƒ}r¨ (h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r© hÜ)�rª }r« (h‚X†Open up **Ipu2.cfg** using a text editor (don't open it using the GUI). Right click on it and select **Open With -> XDCscript Editor**h‘j¦ hœjáh�hàhƒ}r¬ (h…]hŽ]h‡]h†]h�]uh¤M¢h¦]r­ (h¯XOpen up r® …�r¯ }r° (h‚XOpen up h‘jª ubj¯)�r± }r² (h‚X **Ipu2.cfg**hƒ}r³ (h…]hŽ]h‡]h†]h�]uh‘jª h¦]r´ h¯XIpu2.cfgrµ …�r¶ }r· (h‚Uh‘j± ubah�j·ubh¯XQ using a text editor (don't open it using the GUI). Right click on it and select r¸ …�r¹ }rº (h‚XQ using a text editor (don't open it using the GUI). Right click on it and select h‘jª ubj¯)�r» }r¼ (h‚X!**Open With -> XDCscript Editor**hƒ}r½ (h…]hŽ]h‡]h†]h�]uh‘jª h¦]r¾ h¯XOpen With -> XDCscript Editorr¿ …�rÀ }rÁ (h‚Uh‘j» ubah�j·ubeubaubj@)�r }rà (h‚XLWe want to copy the entire contents into the clipboard. Select all and copy.h‘j¢ hœjáh�jChƒ}rÄ (h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rÅ hÜ)�rÆ }rÇ (h‚XLWe want to copy the entire contents into the clipboard. Select all and copy.rÈ h‘j hœjáh�hàhƒ}rÉ (h…]hŽ]h‡]h†]h�]uh¤M¤h¦]rÊ h¯XLWe want to copy the entire contents into the clipboard. Select all and copy.rË …�rÌ }rÍ (h‚jÈ h‘jÆ ubaubaubj@)�rÎ }rÏ (h‚XòNow just like above, open the uart\_m4\_evmAM572x.cfg config file in the text editor. Go to the very bottom and **paste** in the contents from the Ipu2.cfg file. Basically we've appended the contents of Ipu2.cfg into uart\_m4\_evmAM572x.cfg. h‘j¢ hœjáh�jChƒ}rÐ (h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rÑ hÜ)�rÒ }rÓ (h‚XñNow just like above, open the uart\_m4\_evmAM572x.cfg config file in the text editor. Go to the very bottom and **paste** in the contents from the Ipu2.cfg file. Basically we've appended the contents of Ipu2.cfg into uart\_m4\_evmAM572x.cfg.h‘jÎ hœjáh�hàhƒ}rÔ (h…]hŽ]h‡]h†]h�]uh¤M¦h¦]rÕ (h¯XnNow just like above, open the uart_m4_evmAM572x.cfg config file in the text editor. Go to the very bottom and rÖ …�r× }rØ (h‚XpNow just like above, open the uart\_m4\_evmAM572x.cfg config file in the text editor. Go to the very bottom and h‘jÒ ubj¯)�rÙ }rÚ (h‚X **paste**hƒ}rÛ (h…]hŽ]h‡]h†]h�]uh‘jÒ h¦]rÜ h¯XpasterÝ …�rÞ }rß (h‚Uh‘jÙ ubah�j·ubh¯Xv in the contents from the Ipu2.cfg file. Basically we've appended the contents of Ipu2.cfg into uart_m4_evmAM572x.cfg.rà …�rá }râ (h‚Xx in the contents from the Ipu2.cfg file. Basically we've appended the contents of Ipu2.cfg into uart\_m4\_evmAM572x.cfg.h‘jÒ ubeubaubeubhþ)�rã }rä (h‚Uh‘jÏhœjáh�jhƒ}rå (h…]hŽ]h‡]h†]h�]uh¤M«h¥hh¦]ræ j)�rç }rè (h‚UjKh‘jã hœjáh�h¤hƒ}ré (h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�rê }rë (h‚X¸We've now added in all the necessary configuration and source files into our project. Don't expect it to build at this point, we have to make edits first. These edits are listed below.rì h‘jÏhœjáh�hàhƒ}rí (h…]hŽ]h‡]h†]h�]uh¤M­h¥hh¦]rî h¯X¸We've now added in all the necessary configuration and source files into our project. Don't expect it to build at this point, we have to make edits first. These edits are listed below.rï …�rð }rñ (h‚jì h‘jê ubaubj¡)�rò }ró (h‚X~NOTE, you can download the full CCS project with source files to use as a reference. See link towards the end of this section.h‘jÏhœjáh�j¤hƒ}rô (hÊhËh†]h‡]h…]hŽ]h�]uh¤Muh¥hh¦]rõ h¯X~NOTE, you can download the full CCS project with source files to use as a reference. See link towards the end of this section.rö …�r÷ }rø (h‚Uh‘jò ubaubj)�rù }rú (h‚Uh‘jÏhœjáh�j!hƒ}rû (j#X-h†]h‡]h…]hŽ]h�]uh¤M¶h¥hh¦]rü j@)�rý }rþ (h‚X!Edit **uart\_m4\_evmAM572x.cfg** h‘jù hœjáh�jChƒ}rÿ (h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r!hÜ)�r!}r!(h‚X Edit **uart\_m4\_evmAM572x.cfg**h‘jý hœjáh�hàhƒ}r!(h…]hŽ]h‡]h†]h�]uh¤M¶h¦]r!(h¯XEdit r!…�r!}r!(h‚XEdit h‘j!ubj¯)�r!}r !(h‚X**uart\_m4\_evmAM572x.cfg**hƒ}r !(h…]hŽ]h‡]h†]h�]uh‘j!h¦]r !h¯Xuart_m4_evmAM572x.cfgr !…�r !}r!(h‚Uh‘j!ubah�j·ubeubaubaubhþ)�r!}r!(h‚Uh‘jÏhœjáh�jhƒ}r!(h…]hŽ]h‡]h†]h�]uh¤M¸h¥hh¦]r!j)�r!}r!(h‚UjKh‘j!hœjáh�h¤hƒ}r!(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�r!}r!(h‚XIAdd the following to the beginning(at the top) of your configuration filer!h‘jÏhœjáh�hàhƒ}r!(h…]hŽ]h‡]h†]h�]uh¤Mºh¥hh¦]r!h¯XIAdd the following to the beginning(at the top) of your configuration filer!…�r!}r!(h‚j!h‘j!ubaubj¡)�r!}r!(h‚X/var Program = xdc.useModule('xdc.cfg.Program');h‘jÏhœjáh�j¤hƒ}r !(jt‰juX javascripthÊhËh†]h‡]h…]jv}hŽ]h�]uh¤M¼h¥hh¦]r!!h¯X/var Program = xdc.useModule('xdc.cfg.Program');r"!…�r#!}r$!(h‚Uh‘j!ubaubhÜ)�r%!}r&!(h‚XGSince we are no longer using a shared folder, make the following changer'!h‘jÏhœjáh�hàhƒ}r(!(h…]hŽ]h‡]h†]h�]uh¤MÀh¥hh¦]r)!h¯XGSince we are no longer using a shared folder, make the following changer*!…�r+!}r,!(h‚j'!h‘j%!ubaubj¡)�r-!}r.!(h‚Xh//var ipc_cfg = xdc.loadCapsule("../shared/ipc.cfg.xs"); var ipc_cfg = xdc.loadCapsule("../ipc.cfg.xs");h‘jÏhœjáh�j¤hƒ}r/!(jt‰juX javascripthÊhËh†]h‡]h…]jv}hŽ]h�]uh¤MÃh¥hh¦]r0!h¯Xh//var ipc_cfg = xdc.loadCapsule("../shared/ipc.cfg.xs"); var ipc_cfg = xdc.loadCapsule("../ipc.cfg.xs");r1!…�r2!}r3!(h‚Uh‘j-!ubaubhþ)�r4!}r5!(h‚Uh‘jÏhœjáh�jhƒ}r6!(h…]hŽ]h‡]h†]h�]uh¤MÈh¥hh¦]r7!j)�r8!}r9!(h‚UjKh‘j4!hœjáh�h¤hƒ}r:!(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�r;!}r!(h…]hŽ]h‡]h†]h�]uh¤MÊh¥hh¦]r?!h¯XMComment out the following. We'll be calling this function directly from main.r@!…�rA!}rB!(h‚j=!h‘j;!ubaubj¡)�rC!}rD!(h‚X4//BIOS.addUserStartupFunction('&IpcMgr_ipcStartup');h‘jÏhœjáh�j¤hƒ}rE!(jt‰juX javascripthÊhËh†]h‡]h…]jv}hŽ]h�]uh¤MÍh¥hh¦]rF!h¯X4//BIOS.addUserStartupFunction('&IpcMgr_ipcStartup');rG!…�rH!}rI!(h‚Uh‘jC!ubaubhþ)�rJ!}rK!(h‚Uh‘jÏhœjáh�jhƒ}rL!(h…]hŽ]h‡]h†]h�]uh¤MÑh¥hh¦]rM!j)�rN!}rO!(h‚UjKh‘jJ!hœjáh�h¤hƒ}rP!(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�rQ!}rR!(h‚XIncrease the system stack sizerS!h‘jÏhœjáh�hàhƒ}rT!(h…]hŽ]h‡]h†]h�]uh¤MÓh¥hh¦]rU!h¯XIncrease the system stack sizerV!…�rW!}rX!(h‚jS!h‘jQ!ubaubj¡)�rY!}rZ!(h‚X1//Program.stack = 0x1000; Program.stack = 0x8000;h‘jÏhœjáh�j¤hƒ}r[!(jt‰juX javascripthÊhËh†]h‡]h…]jv}hŽ]h�]uh¤MÕh¥hh¦]r\!h¯X1//Program.stack = 0x1000; Program.stack = 0x8000;r]!…�r^!}r_!(h‚Uh‘jY!ubaubhþ)�r`!}ra!(h‚Uh‘jÏhœjáh�jhƒ}rb!(h…]hŽ]h‡]h†]h�]uh¤MÚh¥hh¦]rc!j)�rd!}re!(h‚UjKh‘j`!hœjáh�h¤hƒ}rf!(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�rg!}rh!(h‚X#Comment out the entire TICK sectionri!h‘jÏhœjáh�hàhƒ}rj!(h…]hŽ]h‡]h†]h�]uh¤MÜh¥hh¦]rk!h¯X#Comment out the entire TICK sectionrl!…�rm!}rn!(h‚ji!h‘jg!ubaubj¡)�ro!}rp!(h‚X=/* --------------------------- TICK --------------------------------------*/ // var Clock = xdc.useModule('ti.sysbios.knl.Clock'); // Clock.tickSource = Clock.TickSource_NULL; // //Clock.tickSource = Clock.TickSource_USER; // /* Configure BIOS clock source as GPTimer5 */ // //Clock.timerId = 0; // // var Timer = xdc.useModule('ti.sysbios.timers.dmtimer.Timer'); // // /* Skip the Timer frequency verification check. Need to remove this later */ // Timer.checkFrequency = false; // // /* Match this to the SYS_CLK frequency sourcing the dmTimers. // * Not needed once the SYS/BIOS family settings is updated. */ // Timer.intFreq.hi = 0; // Timer.intFreq.lo = 19200000; // // //var timerParams = new Timer.Params(); // //timerParams.period = Clock.tickPeriod; // //timerParams.periodType = Timer.PeriodType_MICROSECS; // /* Switch off Software Reset to make the below settings effective */ // //timerParams.tiocpCfg.softreset = 0x0; // /* Smart-idle wake-up-capable mode */ // //timerParams.tiocpCfg.idlemode = 0x3; // /* Wake-up generation for Overflow */ // //timerParams.twer.ovf_wup_ena = 0x1; // //Timer.create(Clock.timerId, Clock.doTick, timerParams); // // var Idle = xdc.useModule('ti.sysbios.knl.Idle'); // var Deh = xdc.useModule('ti.deh.Deh'); // // /* Must be placed before pwr mgmt */ // Idle.addFunc('&ti_deh_Deh_idleBegin');h‘jÏhœjáh�j¤hƒ}rq!(jt‰juX javascripthÊhËh†]h‡]h…]jv}hŽ]h�]uh¤MÞh¥hh¦]rr!h¯X=/* --------------------------- TICK --------------------------------------*/ // var Clock = xdc.useModule('ti.sysbios.knl.Clock'); // Clock.tickSource = Clock.TickSource_NULL; // //Clock.tickSource = Clock.TickSource_USER; // /* Configure BIOS clock source as GPTimer5 */ // //Clock.timerId = 0; // // var Timer = xdc.useModule('ti.sysbios.timers.dmtimer.Timer'); // // /* Skip the Timer frequency verification check. Need to remove this later */ // Timer.checkFrequency = false; // // /* Match this to the SYS_CLK frequency sourcing the dmTimers. // * Not needed once the SYS/BIOS family settings is updated. */ // Timer.intFreq.hi = 0; // Timer.intFreq.lo = 19200000; // // //var timerParams = new Timer.Params(); // //timerParams.period = Clock.tickPeriod; // //timerParams.periodType = Timer.PeriodType_MICROSECS; // /* Switch off Software Reset to make the below settings effective */ // //timerParams.tiocpCfg.softreset = 0x0; // /* Smart-idle wake-up-capable mode */ // //timerParams.tiocpCfg.idlemode = 0x3; // /* Wake-up generation for Overflow */ // //timerParams.twer.ovf_wup_ena = 0x1; // //Timer.create(Clock.timerId, Clock.doTick, timerParams); // // var Idle = xdc.useModule('ti.sysbios.knl.Idle'); // var Deh = xdc.useModule('ti.deh.Deh'); // // /* Must be placed before pwr mgmt */ // Idle.addFunc('&ti_deh_Deh_idleBegin');rs!…�rt!}ru!(h‚Uh‘jo!ubaubhþ)�rv!}rw!(h‚Uh‘jÏhœjáh�jhƒ}rx!(h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]ry!j)�rz!}r{!(h‚UjKh‘jv!hœjáh�h¤hƒ}r|!(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�r}!}r~!(h‚XSMake configuration change to use custom resource table. Add to the end of the file.r!h‘jÏhœjáh�hàhƒ}r€!(h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]r�!h¯XSMake configuration change to use custom resource table. Add to the end of the file.r‚!…�rƒ!}r„!(h‚j!h‘j}!ubaubj¡)�r…!}r†!(h‚XŽ/* Override the default resource table with my own */ var Resource = xdc.useModule('ti.ipc.remoteproc.Resource'); Resource.customTable = true;h‘jÏhœjáh�j¤hƒ}r‡!(jt‰juX javascripthÊhËh†]h‡]h…]jv}hŽ]h�]uh¤Mh¥hh¦]rˆ!h¯XŽ/* Override the default resource table with my own */ var Resource = xdc.useModule('ti.ipc.remoteproc.Resource'); Resource.customTable = true;r‰!…�rŠ!}r‹!(h‚Uh‘j…!ubaubj)�rŒ!}r�!(h‚Uh‘jÏhœjáh�j!hƒ}rŽ!(j#X-h†]h‡]h…]hŽ]h�]uh¤M h¥hh¦]r�!j@)�r�!}r‘!(h‚XEdit **main\_uart\_example.c** h‘jŒ!hœjáh�jChƒ}r’!(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r“!hÜ)�r”!}r•!(h‚XEdit **main\_uart\_example.c**h‘j�!hœjáh�hàhƒ}r–!(h…]hŽ]h‡]h†]h�]uh¤M h¦]r—!(h¯XEdit r˜!…�r™!}rš!(h‚XEdit h‘j”!ubj¯)�r›!}rœ!(h‚X**main\_uart\_example.c**hƒ}r�!(h…]hŽ]h‡]h†]h�]uh‘j”!h¦]rž!h¯Xmain_uart_example.crŸ!…�r !}r¡!(h‚Uh‘j›!ubah�j·ubeubaubaubhþ)�r¢!}r£!(h‚Uh‘jÏhœjáh�jhƒ}r¤!(h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]r¥!j)�r¦!}r§!(h‚UjKh‘j¢!hœjáh�h¤hƒ}r¨!(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�r©!}rª!(h‚X'Add the following external declarationsr«!h‘jÏhœjáh�hàhƒ}r¬!(h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]r­!h¯X'Add the following external declarationsr®!…�r¯!}r°!(h‚j«!h‘j©!ubaubj¡)�r±!}r²!(h‚X;extern Int ipc_main(); extern Void IpcMgr_ipcStartup(Void);h‘jÏhœjáh�j¤hƒ}r³!(jt‰juXchÊhËh†]h‡]h…]jv}hŽ]h�]uh¤Mh¥hh¦]r´!h¯X;extern Int ipc_main(); extern Void IpcMgr_ipcStartup(Void);rµ!…�r¶!}r·!(h‚Uh‘j±!ubaubhþ)�r¸!}r¹!(h‚Uh‘jÏhœjáh�jhƒ}rº!(h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]r»!j)�r¼!}r½!(h‚UjKh‘j¸!hœjáh�h¤hƒ}r¾!(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�r¿!}rÀ!(h‚XWIn main(), add a call to ipc\_main() and IpcMgr\_ipcStartup() just before BIOS\_start()h‘jÏhœjáh�hàhƒ}rÁ!(h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]rÂ!h¯XTIn main(), add a call to ipc_main() and IpcMgr_ipcStartup() just before BIOS_start()rÃ!…�rÄ!}rÅ!(h‚XWIn main(), add a call to ipc\_main() and IpcMgr\_ipcStartup() just before BIOS\_start()h‘j¿!ubaubj¡)�rÆ!}rÇ!(h‚Xjipc_main(); if (callIpcStartup) { IpcMgr_ipcStartup(); } /* Start BIOS */ BIOS_start(); return (0);h‘jÏhœjáh�j¤hƒ}rÈ!(jt‰juXchÊhËh†]h‡]h…]jv}hŽ]h�]uh¤Mh¥hh¦]rÉ!h¯Xjipc_main(); if (callIpcStartup) { IpcMgr_ipcStartup(); } /* Start BIOS */ BIOS_start(); return (0);rÊ!…�rË!}rÌ!(h‚Uh‘jÆ!ubaubhþ)�rÍ!}rÎ!(h‚Uh‘jÏhœjáh�jhƒ}rÏ!(h…]hŽ]h‡]h†]h�]uh¤M'h¥hh¦]rÐ!j)�rÑ!}rÒ!(h‚UjKh‘jÍ!hœjáh�h¤hƒ}rÓ!(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�rÔ!}rÕ!(h‚XNComment out the line that calls Board\_init(boardCfg). This call is in the original example because it assumes TI-RTOS is running on the Arm but in our case here, we are running Linux and this call is destructive so we comment it out. The board init call does all pinmux configuration, module clock and UART peripheral initialization.h‘jÏhœjáh�hàhƒ}rÖ!(h…]hŽ]h‡]h†]h�]uh¤M)h¥hh¦]r×!h¯XMComment out the line that calls Board_init(boardCfg). This call is in the original example because it assumes TI-RTOS is running on the Arm but in our case here, we are running Linux and this call is destructive so we comment it out. The board init call does all pinmux configuration, module clock and UART peripheral initialization.rØ!…�rÙ!}rÚ!(h‚XNComment out the line that calls Board\_init(boardCfg). This call is in the original example because it assumes TI-RTOS is running on the Arm but in our case here, we are running Linux and this call is destructive so we comment it out. The board init call does all pinmux configuration, module clock and UART peripheral initialization.h‘jÔ!ubaubhÜ)�rÛ!}rÜ!(h‚X=In order to run the UART Example on M4, you need to disable the UART in the Linux DTB file and interact with the Linux kernel using Telnet (This will be described later in the article). Since Linux will be running uboot performs the pinmux configuration but clock and UART Stdio setup needs to be performed by the M4.rÝ!h‘jÏhœjáh�hàhƒ}rÞ!(h…]hŽ]h‡]h†]h�]uh¤M/h¥hh¦]rß!h¯X=In order to run the UART Example on M4, you need to disable the UART in the Linux DTB file and interact with the Linux kernel using Telnet (This will be described later in the article). Since Linux will be running uboot performs the pinmux configuration but clock and UART Stdio setup needs to be performed by the M4.rà!…�rá!}râ!(h‚jÝ!h‘jÛ!ubaubhÜ)�rã!}rä!(h‚X**Original code**rå!h‘jÏhœjáh�hàhƒ}ræ!(h…]hŽ]h‡]h†]h�]uh¤M5h¥hh¦]rç!j¯)�rè!}ré!(h‚jå!hƒ}rê!(h…]hŽ]h‡]h†]h�]uh‘jã!h¦]rë!h¯X Original coderì!…�rí!}rî!(h‚Uh‘jè!ubah�j·ubaubj¡)�rï!}rð!(h‚Xì#if defined(EVM_K2E) || defined(EVM_C6678) boardCfg = BOARD_INIT_MODULE_CLOCK | BOARD_INIT_UART_STDIO; #else boardCfg = BOARD_INIT_PINMUX_CONFIG | BOARD_INIT_MODULE_CLOCK | BOARD_INIT_UART_STDIO; #endif Board_init(boardCfg);h‘jÏhœjáh�j¤hƒ}rñ!(jt‰juXchÊhËh†]h‡]h…]jv}hŽ]h�]uh¤M7h¥hh¦]rò!h¯Xì#if defined(EVM_K2E) || defined(EVM_C6678) boardCfg = BOARD_INIT_MODULE_CLOCK | BOARD_INIT_UART_STDIO; #else boardCfg = BOARD_INIT_PINMUX_CONFIG | BOARD_INIT_MODULE_CLOCK | BOARD_INIT_UART_STDIO; #endif Board_init(boardCfg);ró!…�rô!}rõ!(h‚Uh‘jï!ubaubhþ)�rö!}r÷!(h‚Uh‘jÏhœjáh�jhƒ}rø!(h…]hŽ]h‡]h†]h�]uh¤M@h¥hh¦]rù!j)�rú!}rû!(h‚UjKh‘jö!hœjáh�h¤hƒ}rü!(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�rý!}rþ!(h‚X**Modified Code :**rÿ!h‘jÏhœjáh�hàhƒ}r"(h…]hŽ]h‡]h†]h�]uh¤MBh¥hh¦]r"j¯)�r"}r"(h‚jÿ!hƒ}r"(h…]hŽ]h‡]h†]h�]uh‘jý!h¦]r"h¯XModified Code :r"…�r"}r"(h‚Uh‘j"ubah�j·ubaubj¡)�r "}r "(h‚X8boardCfg = BOARD_INIT_UART_STDIO; Board\_init(boardCfg);h‘jÏhœjáh�j¤hƒ}r "(hÊhËh†]h‡]h…]hŽ]h�]uh¤M h¥hh¦]r "h¯X8boardCfg = BOARD_INIT_UART_STDIO; Board\_init(boardCfg);r "…�r"}r"(h‚Uh‘j "ubaubhÜ)�r"}r"(h‚XÅWe are not done yet as we still need to configure turn the clock control on for the UART without impacting the other clocks. We can do that by adding the following code before Board\_init API call:h‘jÏhœjáh�hàhƒ}r"(h…]hŽ]h‡]h†]h�]uh¤MIh¥hh¦]r"h¯XÄWe are not done yet as we still need to configure turn the clock control on for the UART without impacting the other clocks. We can do that by adding the following code before Board_init API call:r"…�r"}r"(h‚XÅWe are not done yet as we still need to configure turn the clock control on for the UART without impacting the other clocks. We can do that by adding the following code before Board\_init API call:h‘j"ubaubj¡)�r"}r"(h‚X°CSL_l4per_cm_core_componentRegs *l4PerCmReg = (CSL_l4per_cm_core_componentRegs *)CSL_MPU_L4PER_CM_CORE_REGS; CSL_FINST(l4PerCmReg->CM_L4PER_UART3_CLKCTRL_REG, L4PER_CM_CORE_COMPONENT_CM_L4PER_UART3_CLKCTRL_REG_MODULEMODE, ENABLE); while(CSL_L4PER_CM_CORE_COMPONENT_CM_L4PER_UART3_CLKCTRL_REG_IDLEST_FUNC != CSL_FEXT(l4PerCmReg->CM_L4PER_UART3_CLKCTRL_REG, L4PER_CM_CORE_COMPONENT_CM_L4PER_UART3_CLKCTRL_REG_IDLEST));h‘jÏhœjáh�j¤hƒ}r"(hÊhËh†]h‡]h…]hŽ]h�]uh¤M h¥hh¦]r"h¯X°CSL_l4per_cm_core_componentRegs *l4PerCmReg = (CSL_l4per_cm_core_componentRegs *)CSL_MPU_L4PER_CM_CORE_REGS; CSL_FINST(l4PerCmReg->CM_L4PER_UART3_CLKCTRL_REG, L4PER_CM_CORE_COMPONENT_CM_L4PER_UART3_CLKCTRL_REG_MODULEMODE, ENABLE); while(CSL_L4PER_CM_CORE_COMPONENT_CM_L4PER_UART3_CLKCTRL_REG_IDLEST_FUNC != CSL_FEXT(l4PerCmReg->CM_L4PER_UART3_CLKCTRL_REG, L4PER_CM_CORE_COMPONENT_CM_L4PER_UART3_CLKCTRL_REG_IDLEST));r"…�r"}r"(h‚Uh‘j"ubaubj)�r"}r"(h‚Uh‘jÏhœjáh�j!hƒ}r "(j#X-h†]h‡]h…]hŽ]h�]uh¤MWh¥hh¦]r!"j@)�r""}r#"(h‚XEdit **MainIpu2.c** h‘j"hœjáh�jChƒ}r$"(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r%"hÜ)�r&"}r'"(h‚XEdit **MainIpu2.c**h‘j""hœjáh�hàhƒ}r("(h…]hŽ]h‡]h†]h�]uh¤MWh¦]r)"(h¯XEdit r*"…�r+"}r,"(h‚XEdit h‘j&"ubj¯)�r-"}r."(h‚X**MainIpu2.c**hƒ}r/"(h…]hŽ]h‡]h†]h�]uh‘j&"h¦]r0"h¯X MainIpu2.cr1"…�r2"}r3"(h‚Uh‘j-"ubah�j·ubeubaubaubhþ)�r4"}r5"(h‚Uh‘jÏhœjáh�jhƒ}r6"(h…]hŽ]h‡]h†]h�]uh¤MYh¥hh¦]r7"j)�r8"}r9"(h‚UjKh‘j4"hœjáh�h¤hƒ}r:"(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�r;"}r<"(h‚XGThe app now has it's own main(), so rename this one and get rid of argsr="h‘jÏhœjáh�hàhƒ}r>"(h…]hŽ]h‡]h†]h�]uh¤M[h¥hh¦]r?"h¯XGThe app now has it's own main(), so rename this one and get rid of argsr@"…�rA"}rB"(h‚j="h‘j;"ubaubj¡)�rC"}rD"(h‚X3//Int main(Int argc, Char* argv[]) Int ipc_main() {h‘jÏhœjáh�j¤hƒ}rE"(jt‰juXchÊhËh†]h‡]h…]jv}hŽ]h�]uh¤M]h¥hh¦]rF"h¯X3//Int main(Int argc, Char* argv[]) Int ipc_main() {rG"…�rH"}rI"(h‚Uh‘jC"ubaubhÜ)�rJ"}rK"(h‚X+No longer using args so comment these linesrL"h‘jÏhœjáh�hàhƒ}rM"(h…]hŽ]h‡]h†]h�]uh¤Mch¥hh¦]rN"h¯X+No longer using args so comment these linesrO"…�rP"}rQ"(h‚jL"h‘jJ"ubaubj¡)�rR"}rS"(h‚X?//taskParams.arg0 = (UArg)argc; //taskParams.arg1 = (UArg)argv;h‘jÏhœjáh�j¤hƒ}rT"(hÊhËh†]h‡]h…]hŽ]h�]uh¤M) h¥hh¦]rU"h¯X?//taskParams.arg0 = (UArg)argc; //taskParams.arg1 = (UArg)argv;rV"…�rW"}rX"(h‚Uh‘jR"ubaubhÜ)�rY"}rZ"(h‚X>BIOS\_start() is done in the app main() so comment it out herer["h‘jÏhœjáh�hàhƒ}r\"(h…]hŽ]h‡]h†]h�]uh¤Mjh¥hh¦]r]"h¯X=BIOS_start() is done in the app main() so comment it out herer^"…�r_"}r`"(h‚X>BIOS\_start() is done in the app main() so comment it out hereh‘jY"ubaubj¡)�ra"}rb"(h‚X9/* start scheduler, this never returns */ //BIOS_start();h‘jÏhœjáh�j¤hƒ}rc"(hÊhËh†]h‡]h…]hŽ]h�]uh¤M0 h¥hh¦]rd"h¯X9/* start scheduler, this never returns */ //BIOS_start();re"…�rf"}rg"(h‚Uh‘ja"ubaubhþ)�rh"}ri"(h‚Uh‘jÏhœjáh�jhƒ}rj"(h…]hŽ]h‡]h†]h�]uh¤Mqh¥hh¦]rk"j)�rl"}rm"(h‚UjKh‘jh"hœjáh�h¤hƒ}rn"(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�ro"}rp"(h‚XComment this outrq"h‘jÏhœjáh�hàhƒ}rr"(h…]hŽ]h‡]h†]h�]uh¤Msh¥hh¦]rs"h¯XComment this outrt"…�ru"}rv"(h‚jq"h‘jo"ubaubj¡)�rw"}rx"(h‚X&//Log_print0(Diags_EXIT, "<-- main:");h‘jÏhœjáh�j¤hƒ}ry"(hÊhËh†]h‡]h…]hŽ]h�]uh¤M9 h¥hh¦]rz"h¯X&//Log_print0(Diags_EXIT, "<-- main:");r{"…�r|"}r}"(h‚Uh‘jw"ubaubhþ)�r~"}r"(h‚Uh‘jÏhœjáh�jhƒ}r€"(h…]hŽ]h‡]h†]h�]uh¤Myh¥hh¦]r�"j)�r‚"}rƒ"(h‚UjKh‘j~"hœjáh�h¤hƒ}r„"(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubj)�r…"}r†"(h‚Uh‘jÏhœjáh�j!hƒ}r‡"(j#X-h†]h‡]h…]hŽ]h�]uh¤M{h¥hh¦]rˆ"j@)�r‰"}rŠ"(h‚X!Edit **rsc\_table\_vayu\_ipu.c** h‘j…"hœjáh�jChƒ}r‹"(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rŒ"hÜ)�r�"}rŽ"(h‚X Edit **rsc\_table\_vayu\_ipu.c**h‘j‰"hœjáh�hàhƒ}r�"(h…]hŽ]h‡]h†]h�]uh¤M{h¦]r�"(h¯XEdit r‘"…�r’"}r“"(h‚XEdit h‘j�"ubj¯)�r”"}r•"(h‚X**rsc\_table\_vayu\_ipu.c**hƒ}r–"(h…]hŽ]h‡]h†]h�]uh‘j�"h¦]r—"h¯Xrsc_table_vayu_ipu.cr˜"…�r™"}rš"(h‚Uh‘j”"ubah�j·ubeubaubaubhþ)�r›"}rœ"(h‚Uh‘jÏhœjáh�jhƒ}r�"(h…]hŽ]h‡]h†]h�]uh¤M}h¥hh¦]rž"j)�rŸ"}r "(h‚UjKh‘j›"hœjáh�h¤hƒ}r¡"(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�r¢"}r£"(h‚XGSet this #define before it's used to select PHYS\_MEM\_IPC\_VRING valuer¤"h‘jÏhœjáh�hàhƒ}r¥"(h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]r¦"h¯XDSet this #define before it's used to select PHYS_MEM_IPC_VRING valuer§"…�r¨"}r©"(h‚XGSet this #define before it's used to select PHYS\_MEM\_IPC\_VRING valueh‘j¢"ubaubj¡)�rª"}r«"(h‚X#define VAYU_IPU_2h‘jÏhœjáh�j¤hƒ}r¬"(hÊhËh†]h‡]h…]hŽ]h�]uh¤ME h¥hh¦]r­"h¯X#define VAYU_IPU_2r®"…�r¯"}r°"(h‚Uh‘jª"ubaubhþ)�r±"}r²"(h‚Uh‘jÏhœjáh�jhƒ}r³"(h…]hŽ]h‡]h†]h�]uh¤M…h¥hh¦]r´"j)�rµ"}r¶"(h‚UjKh‘j±"hœjáh�h¤hƒ}r·"(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�r¸"}r¹"(h‚X:Add this extern declaration prior to the symbol being usedrº"h‘jÏhœjáh�hàhƒ}r»"(h…]hŽ]h‡]h†]h�]uh¤M‡h¥hh¦]r¼"h¯X:Add this extern declaration prior to the symbol being usedr½"…�r¾"}r¿"(h‚jº"h‘j¸"ubaubj¡)�rÀ"}rÁ"(h‚X5extern char ti_trace_SysMin_Module_State_0_outbuf__A;h‘jÏhœjáh�j¤hƒ}rÂ"(hÊhËh†]h‡]h…]hŽ]h�]uh¤MM h¥hh¦]rÃ"h¯X5extern char ti_trace_SysMin_Module_State_0_outbuf__A;rÄ"…�rÅ"}rÆ"(h‚Uh‘jÀ"ubaubhþ)�rÇ"}rÈ"(h‚Uh‘jÏhœjáh�jhƒ}rÉ"(h…]hŽ]h‡]h†]h�]uh¤M�h¥hh¦]rÊ"j)�rË"}rÌ"(h‚UjKh‘jÇ"hœjáh�h¤hƒ}rÍ"(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubj)�rÎ"}rÏ"(h‚Uh‘jÏhœjáh�j!hƒ}rÐ"(j#X-h†]h‡]h…]hŽ]h�]uh¤M�h¥hh¦]rÑ"j@)�rÒ"}rÓ"(h‚XEdit **Server.c** h‘jÎ"hœjáh�jChƒ}rÔ"(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rÕ"hÜ)�rÖ"}r×"(h‚XEdit **Server.c**h‘jÒ"hœjáh�hàhƒ}rØ"(h…]hŽ]h‡]h†]h�]uh¤M�h¦]rÙ"(h¯XEdit rÚ"…�rÛ"}rÜ"(h‚XEdit h‘jÖ"ubj¯)�rÝ"}rÞ"(h‚X **Server.c**hƒ}rß"(h…]hŽ]h‡]h†]h�]uh‘jÖ"h¦]rà"h¯XServer.crá"…�râ"}rã"(h‚Uh‘jÝ"ubah�j·ubeubaubaubhþ)�rä"}rå"(h‚Uh‘jÏhœjáh�jhƒ}ræ"(h…]hŽ]h‡]h†]h�]uh¤M‘h¥hh¦]rç"j)�rè"}ré"(h‚UjKh‘jä"hœjáh�h¤hƒ}rê"(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�rë"}rì"(h‚X3No longer have shared folder so change include pathrí"h‘jÏhœjáh�hàhƒ}rî"(h…]hŽ]h‡]h†]h�]uh¤M“h¥hh¦]rï"h¯X3No longer have shared folder so change include pathrð"…�rñ"}rò"(h‚jí"h‘jë"ubaubj¡)�ró"}rô"(h‚XU/* local header files */ //#include "../shared/AppCommon.h" #include "../AppCommon.h"h‘jÏhœjáh�j¤hƒ}rõ"(jt‰juXchÊhËh†]h‡]h…]jv}hŽ]h�]uh¤M•h¥hh¦]rö"h¯XU/* local header files */ //#include "../shared/AppCommon.h" #include "../AppCommon.h"r÷"…�rø"}rù"(h‚Uh‘jó"ubaubh’)�rú"}rû"(h‚X*Handling AMMU (L1 Unicache MMU) and L2 MMUrü"h‘jÏhœjáh�hÓhƒ}rý"(h†]rþ"U(handling-ammu-l1-unicache-mmu-and-l2-mmurÿ"ah‡]h…]hŽ]h�]r#h#auh¤Nh¥hh¦]r#h¯X*Handling AMMU (L1 Unicache MMU) and L2 MMUr#…�r#}r#(h‚jü"h‘jú"ubaubhÜ)�r#}r#(h‚XThere are two MMUs inside each of the IPU1, and IPU2 subsystems. The L1 MMU is referred to as IPU\_UNICACHE\_MMU or AMMU and L2 MMU. The description of how this is configured in IPC-remoteproc has been described in section `Changing\_Cortex\_M4\_IPU\_Memory\_Map `__. IPC handling of L1 and L2 MMU is different from how the PDK driver examples setup the memory access using these MMUs which the users need to manage when integrating the components. This difference is highlighted below:h‘jÏhœjáh�hàhƒ}r#(h…]hŽ]h‡]h†]h�]uh¤Mžh¥hh¦]r#(h¯XÝThere are two MMUs inside each of the IPU1, and IPU2 subsystems. The L1 MMU is referred to as IPU_UNICACHE_MMU or AMMU and L2 MMU. The description of how this is configured in IPC-remoteproc has been described in section r #…�r #}r #(h‚XßThere are two MMUs inside each of the IPU1, and IPU2 subsystems. The L1 MMU is referred to as IPU\_UNICACHE\_MMU or AMMU and L2 MMU. The description of how this is configured in IPC-remoteproc has been described in section h‘j#ubj))�r #}r #(h‚X\`Changing\_Cortex\_M4\_IPU\_Memory\_Map `__hƒ}r#(UnameX!Changing_Cortex_M4_IPU_Memory_Mapj-X/Foundational_Components_IPC.html#ipc-for-am57xxh†]h‡]h…]hŽ]h�]uh‘j#h¦]r#h¯X!Changing_Cortex_M4_IPU_Memory_Mapr#…�r#}r#(h‚Uh‘j #ubah�j2ubh¯XÜ. IPC handling of L1 and L2 MMU is different from how the PDK driver examples setup the memory access using these MMUs which the users need to manage when integrating the components. This difference is highlighted below:r#…�r#}r#(h‚XÜ. IPC handling of L1 and L2 MMU is different from how the PDK driver examples setup the memory access using these MMUs which the users need to manage when integrating the components. This difference is highlighted below:h‘j#ubeubjr)�r#}r#(h‚X3.. Image:: ../images/IPU_MMU_Peripheral_access.png h‘jÏhœjáh�jyhƒ}r#(UuriX-linux/../images/IPU_MMU_Peripheral_access.pngr#h†]h‡]h…]hŽ]jw}r#U*j#sh�]uh¤M©h¥hh¦]ubj)�r#}r#(h‚Uh‘jÏhœjáh�j!hƒ}r#(j#X-h†]h‡]h…]hŽ]h�]uh¤Mªh¥hh¦]r#(j@)�r#}r #(h‚X×PDK examples use addresses (0x4X000000) to peripheral registers and use following MMU setting - L2 MMU uses default 1:1 Mapping - AMMU configuration translates physical 0x4X000000 access to logical 0x4X000000 h‘j#hœNh�jChƒ}r!#(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r"#(hÜ)�r##}r$#(h‚X]PDK examples use addresses (0x4X000000) to peripheral registers and use following MMU settingr%#h‘j#hœjáh�hàhƒ}r&#(h…]hŽ]h‡]h†]h�]uh¤Mªh¦]r'#h¯X]PDK examples use addresses (0x4X000000) to peripheral registers and use following MMU settingr(#…�r)#}r*#(h‚j%#h‘j##ubaubj)�r+#}r,#(h‚Uhƒ}r-#(j#X-h†]h‡]h…]hŽ]h�]uh‘j#h¦]r.#(j@)�r/#}r0#(h‚XL2 MMU uses default 1:1 Mappingr1#hƒ}r2#(h…]hŽ]h‡]h†]h�]uh‘j+#h¦]r3#hÜ)�r4#}r5#(h‚j1#h‘j/#hœjáh�hàhƒ}r6#(h…]hŽ]h‡]h†]h�]uh¤M­h¦]r7#h¯XL2 MMU uses default 1:1 Mappingr8#…�r9#}r:#(h‚j1#h‘j4#ubaubah�jCubj@)�r;#}r<#(h‚XOAMMU configuration translates physical 0x4X000000 access to logical 0x4X000000 hƒ}r=#(h…]hŽ]h‡]h†]h�]uh‘j+#h¦]r>#hÜ)�r?#}r@#(h‚XNAMMU configuration translates physical 0x4X000000 access to logical 0x4X000000rA#h‘j;#hœjáh�hàhƒ}rB#(h…]hŽ]h‡]h†]h�]uh¤M®h¦]rC#h¯XNAMMU configuration translates physical 0x4X000000 access to logical 0x4X000000rD#…�rE#}rF#(h‚jA#h‘j?#ubaubah�jCubeh�j!ubeubj@)�rG#}rH#(h‚XIPC+ Remote Proc ARM+M4 requires IPU to use logical address (0x6X000000) and uses following MMU setting - L2 MMU is configured such that MMU translates 0x6X000000 access to addresss 0x4X000000 - AMMU is configured for 1:1 mapping 0x6X000000 and 0x6X000000 h‘j#hœNh�jChƒ}rI#(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rJ#(hÜ)�rK#}rL#(h‚XgIPC+ Remote Proc ARM+M4 requires IPU to use logical address (0x6X000000) and uses following MMU settingrM#h‘jG#hœjáh�hàhƒ}rN#(h…]hŽ]h‡]h†]h�]uh¤M±h¦]rO#h¯XgIPC+ Remote Proc ARM+M4 requires IPU to use logical address (0x6X000000) and uses following MMU settingrP#…�rQ#}rR#(h‚jM#h‘jK#ubaubj)�rS#}rT#(h‚Uhƒ}rU#(j#X-h†]h‡]h…]hŽ]h�]uh‘jG#h¦]rV#(j@)�rW#}rX#(h‚XVL2 MMU is configured such that MMU translates 0x6X000000 access to addresss 0x4X000000hƒ}rY#(h…]hŽ]h‡]h†]h�]uh‘jS#h¦]rZ#hÜ)�r[#}r\#(h‚XVL2 MMU is configured such that MMU translates 0x6X000000 access to addresss 0x4X000000r]#h‘jW#hœjáh�hàhƒ}r^#(h…]hŽ]h‡]h†]h�]uh¤M´h¦]r_#h¯XVL2 MMU is configured such that MMU translates 0x6X000000 access to addresss 0x4X000000r`#…�ra#}rb#(h‚j]#h‘j[#ubaubah�jCubj@)�rc#}rd#(h‚X=AMMU is configured for 1:1 mapping 0x6X000000 and 0x6X000000 hƒ}re#(h…]hŽ]h‡]h†]h�]uh‘jS#h¦]rf#hÜ)�rg#}rh#(h‚X<AMMU is configured for 1:1 mapping 0x6X000000 and 0x6X000000ri#h‘jc#hœjáh�hàhƒ}rj#(h…]hŽ]h‡]h†]h�]uh¤M¶h¦]rk#h¯X<AMMU is configured for 1:1 mapping 0x6X000000 and 0x6X000000rl#…�rm#}rn#(h‚ji#h‘jg#ubaubah�jCubeh�j!ubeubeubhÜ)�ro#}rp#(h‚XãTherefore after integrating IPC with PDK drivers, it is recommended that the alias addresses are used to access peripherals and PRCM registers. This requires changes to the addresses used by PDK drivers and in application code.rq#h‘jÏhœjáh�hàhƒ}rr#(h…]hŽ]h‡]h†]h�]uh¤M¸h¥hh¦]rs#h¯XãTherefore after integrating IPC with PDK drivers, it is recommended that the alias addresses are used to access peripherals and PRCM registers. This requires changes to the addresses used by PDK drivers and in application code.rt#…�ru#}rv#(h‚jq#h‘jo#ubaubhÜ)�rw#}rx#(h‚XHThe following changes were then made to the IPU application source code:ry#h‘jÏhœjáh�hàhƒ}rz#(h…]hŽ]h‡]h†]h�]uh¤M½h¥hh¦]r{#h¯XHThe following changes were then made to the IPU application source code:r|#…�r}#}r~#(h‚jy#h‘jw#ubaubhÜ)�r#}r€#(h‚X‘Add UART\_soc.c file to the project and modify the base addresses for all IPU UART register instance in the UART\_HwAttrs to use alias addresses:h‘jÏhœjáh�hàhƒ}r�#(h…]hŽ]h‡]h†]h�]uh¤M¿h¥hh¦]r‚#h¯X�Add UART_soc.c file to the project and modify the base addresses for all IPU UART register instance in the UART_HwAttrs to use alias addresses:rƒ#…�r„#}r…#(h‚X‘Add UART\_soc.c file to the project and modify the base addresses for all IPU UART register instance in the UART\_HwAttrs to use alias addresses:h‘j#ubaubj¡)�r†#}r‡#(h‚X#ifdef _TMS320C6X CSL_DSP_UART3_REGS, OSAL_REGINT_INTVEC_EVENT_COMBINER, #elif defined(__ARM_ARCH_7A__) CSL_MPU_UART3_REGS, 106, #else (CSL_IPU_UART3_REGS + 0x20000000), //Base Addr = 0x48000000 + 0x20000000 = 0x68000000 45, #endifh‘jÏhœjáh�j¤hƒ}rˆ#(jt‰juXchÊhËh†]h‡]h…]jv}hŽ]h�]uh¤MÃh¥hh¦]r‰#h¯X#ifdef _TMS320C6X CSL_DSP_UART3_REGS, OSAL_REGINT_INTVEC_EVENT_COMBINER, #elif defined(__ARM_ARCH_7A__) CSL_MPU_UART3_REGS, 106, #else (CSL_IPU_UART3_REGS + 0x20000000), //Base Addr = 0x48000000 + 0x20000000 = 0x68000000 45, #endifrŠ#…�r‹#}rŒ#(h‚Uh‘j†#ubaubhÜ)�r�#}rŽ#(h‚X°Adding custom SOC configuration also means that you should use the generic UART driver instead of driver with built in SOC setup. To do this comment the following line in .cfg:r�#h‘jÏhœjáh�hàhƒ}r�#(h…]hŽ]h‡]h†]h�]uh¤MÐh¥hh¦]r‘#h¯X°Adding custom SOC configuration also means that you should use the generic UART driver instead of driver with built in SOC setup. To do this comment the following line in .cfg:r’#…�r“#}r”#(h‚j�#h‘j�#ubaubj¡)�r•#}r–#(h‚XZvar Uart = xdc.loadPackage('ti.drv.uart'); //Uart.Settings.socType = socType;h‘jÏhœjáh�j¤hƒ}r—#(hÊhËh†]h‡]h…]hŽ]h�]uh¤M˜ h¥hh¦]r˜#h¯XZvar Uart = xdc.loadPackage('ti.drv.uart'); //Uart.Settings.socType = socType;r™#…�rš#}r›#(h‚Uh‘j•#ubaubhÜ)�rœ#}r�#(h‚X~There is also an instance in the application code where we added pointer to PRCM registers that need to be changed as follows.rž#h‘jÏhœjáh�hàhƒ}rŸ#(h…]hŽ]h‡]h†]h�]uh¤MÙh¥hh¦]r #h¯X~There is also an instance in the application code where we added pointer to PRCM registers that need to be changed as follows.r¡#…�r¢#}r£#(h‚jž#h‘jœ#ubaubj¡)�r¤#}r¥#(h‚X} CSL_l4per_cm_core_componentRegs *l4PerCmReg = (CSL_l4per_cm_core_componentRegs \*) 0x6a009700; //CSL_MPU_L4PER_CM_CORE_REGS;h‘jÏhœjáh�j¤hƒ}r¦#(hÊhËh†]h‡]h…]hŽ]h�]uh¤M  h¥hh¦]r§#h¯X} CSL_l4per_cm_core_componentRegs *l4PerCmReg = (CSL_l4per_cm_core_componentRegs \*) 0x6a009700; //CSL_MPU_L4PER_CM_CORE_REGS;r¨#…�r©#}rª#(h‚Uh‘j¤#ubaubhÜ)�r«#}r¬#(h‚XµNow, you are ready to build the firmware. After the .out is built, change the extension to .xem4 and copy it over to the location in the filesystem that is used to load M4 firmware.r­#h‘jÏhœjáh�hàhƒ}r®#(h…]hŽ]h‡]h†]h�]uh¤Máh¥hh¦]r¯#h¯XµNow, you are ready to build the firmware. After the .out is built, change the extension to .xem4 and copy it over to the location in the filesystem that is used to load M4 firmware.r°#…�r±#}r²#(h‚j­#h‘j«#ubaubh’)�r³#}r´#(h‚XDownload the Full CCS Projectrµ#h‘jÏhœjáh�hÓhƒ}r¶#(h†]r·#Udownload-the-full-ccs-project-1r¸#ah‡]h…]hŽ]h�]r¹#hJauh¤Nh¥hh¦]rº#h¯XDownload the Full CCS Projectr»#…�r¼#}r½#(h‚jµ#h‘j³#ubaubhÜ)�r¾#}r¿#(h‚X�:download:`UART\_BasicExample\_evmAM572x\_m4ExampleProject\_with\_ipc.zip <../files/UART_BasicExample_evmAM572x_m4ExampleProject_with_ipc.zip>`rÀ#h‘jÏhœjáh�hàhƒ}rÁ#(h…]hŽ]h‡]h†]h�]uh¤Mèh¥hh¦]rÂ#jD)�rÃ#}rÄ#(h‚X�:download:`UART\_BasicExample\_evmAM572x\_m4ExampleProject\_with\_ipc.zip <../files/UART_BasicExample_evmAM572x_m4ExampleProject_with_ipc.zip>`rÅ#h‘j¾#hœjáh�jHhƒ}rÆ#(UreftypeXdownloadrÇ#jK‰jLXB../files/UART_BasicExample_evmAM572x_m4ExampleProject_with_ipc.zipU refdomainUh†]h‡]U refexplicitˆh…]hŽ]h�]jMjNjOX9UART_BasicExample_evmAM572x_m4ExampleProject_with_ipc.ziprÈ#uh¤Mèh¦]rÉ#jÅ )�rÊ#}rË#(h‚jÅ#hƒ}rÌ#(h…]hŽ]rÍ#(jVjÇ#eh‡]h†]h�]uh‘jÃ#h¦]rÎ#h¯X9UART_BasicExample_evmAM572x_m4ExampleProject_with_ipc.ziprÏ#…�rÐ#}rÑ#(h‚Uh‘jÊ#ubah�jÍ ubaubaubeubh–)�rÒ#}rÓ#(h‚Uh‘hšhœhŒh�hžhƒ}rÔ#(h…]hŽ]h‡]h†]rÕ#U ipc-early-boot-for-am57xx-dra7xxrÖ#ah�]r×#hDauh¤Kh¥hh¦]rØ#(h¨)�rÙ#}rÚ#(h‚X IPC Early Boot for AM57xx/DRA7xxrÛ#h‘jÒ#hœhŒh�h¬hƒ}rÜ#(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]rÝ#h¯X IPC Early Boot for AM57xx/DRA7xxrÞ#…�rß#}rà#(h‚jÛ#h‘jÙ#ubaubh’)�rá#}râ#(h‚X#Early Boot and Late Attach in Linuxrã#h‘jÒ#hœhŠX?source/linux/Foundational_Components/IPC/IPC_Early_Boot.rst.incrä#…�rå#}ræ#bh�hÓhƒ}rç#(h†]rè#U firstheadingré#ah‡]h…]hŽ]h�]rê#h>auh¤Nh¥hh¦]rë#h¯X#Early Boot and Late Attach in Linuxrì#…�rí#}rî#(h‚jã#h‘já#ubaubh’)�rï#}rð#(h‚X Introductionrñ#h‘jÒ#hœjå#h�hÓhƒ}rò#(h†]ró#U introductionrô#ah‡]h…]hŽ]h�]rõ#hGauh¤Nh¥hh¦]rö#h¯X Introductionr÷#…�rø#}rù#(h‚jñ#h‘jï#ubaubhÜ)�rú#}rû#(h‚XKDRA7xx/AM57xx SOCs have multiple processor cores - Cortex A15, C66x DSPs and ARM M4 cores. The A15 typically runs a HLOS like Linux/Android and the remotecores(DSPs and M4s) run an RTOS. In the normal operation, bootloader (U-Boot/SPL) boots and loads the A15 with the HLOS. The A15 boots the DSP and the M4 cores. In this sequence, the interval between the Power on Reset and the remotecores (i.e. the DSPs and the M4s) executing is dependent on the HLOS initialization time. This delay may not be suitable for realizing some usecases with tight time constraints. e.g. Rear View Camera.rü#h‘jÒ#hœjå#h�hàhƒ}rý#(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]rþ#h¯XKDRA7xx/AM57xx SOCs have multiple processor cores - Cortex A15, C66x DSPs and ARM M4 cores. The A15 typically runs a HLOS like Linux/Android and the remotecores(DSPs and M4s) run an RTOS. In the normal operation, bootloader (U-Boot/SPL) boots and loads the A15 with the HLOS. The A15 boots the DSP and the M4 cores. In this sequence, the interval between the Power on Reset and the remotecores (i.e. the DSPs and the M4s) executing is dependent on the HLOS initialization time. This delay may not be suitable for realizing some usecases with tight time constraints. e.g. Rear View Camera.rÿ#…�r$}r$(h‚jü#h‘jú#ubaubjr)�r$}r$(h‚X_.. Image:: ../images/Normal-boot.png :class: thumbimage :width: 511px :height: 263px h‘jÒ#hœjå#h�jyhƒ}r$(h…]UuriXlinux/../images/Normal-boot.pngr$h†]h‡]UwidthX511pxhŽ]r$U thumbimager$ajw}r$U*j$sh�]UheightX263pxuh¤Nh¥hh¦]ubhÜ)�r $}r $(h‚XÿTo address the early boot usecase, one may need the bootloader to boot a remote core before booting the A15 with the linux kernel, i.e. booting the remotecore early. The kernel then attaches to the already booted remote core for further communication i.e. connecting to the remotecore later in its execution. We refer to this feature as the "Early Boot - Late Attach" functionality. The "Early Boot" functionality is provided by the boot loader. The "Late Attach" functionality is a feature of the Linux Kernel.r $h‘jÒ#hœjå#h�hàhƒ}r $(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]r $h¯XÿTo address the early boot usecase, one may need the bootloader to boot a remote core before booting the A15 with the linux kernel, i.e. booting the remotecore early. The kernel then attaches to the already booted remote core for further communication i.e. connecting to the remotecore later in its execution. We refer to this feature as the "Early Boot - Late Attach" functionality. The "Early Boot" functionality is provided by the boot loader. The "Late Attach" functionality is a feature of the Linux Kernel.r$…�r$}r$(h‚j $h‘j $ubaubjr)�r$}r$(h‚X].. Image:: ../images/Early-boot.png :class: thumbimage :width: 511px :height: 263px h‘jÒ#hœjå#h�jyhƒ}r$(h…]UuriXlinux/../images/Early-boot.pngr$h†]h‡]UwidthX511pxhŽ]r$U thumbimager$ajw}r$U*j$sh�]UheightX263pxuh¤Nh¥hh¦]ubhÜ)�r$}r$(h‚X{The following sections describe how to use this feature and how to troubleshoot any issues with early boot and late attach.r$h‘jÒ#hœjå#h�hàhƒ}r$(h…]hŽ]h‡]h†]h�]uh¤K%h¥hh¦]r$h¯X{The following sections describe how to use this feature and how to troubleshoot any issues with early boot and late attach.r$…�r$}r$(h‚j$h‘j$ubaubh’)�r $}r!$(h‚XUsing Early Boot/Late Attachr"$h‘jÒ#hœjå#h�hÓhƒ}r#$(h†]r$$Uusing-early-bootlate-attachr%$ah‡]h…]hŽ]h�]r&$h9auh¤Nh¥hh¦]r'$h¯XUsing Early Boot/Late Attachr($…�r)$}r*$(h‚j"$h‘j $ubaubhÜ)�r+$}r,$(h‚X—Early Boot/Late Attach functionality is supported for IPUs and enabled by default for IPU1 remote processor on the TI SDKs for all TI DRA7xx/AM57xx platforms. The functionality relies on matching configuration/code between SPL and Linux kernel in terms of memory and timers used by the firmwares, and matching firmwares in boot media (used by SPL) and in the rootfs in /lib/firmware folder (used by kernel).r-$h‘jÒ#hœjå#h�hàhƒ}r.$(h…]hŽ]h‡]h†]h�]uh¤K,h¥hh¦]r/$h¯X—Early Boot/Late Attach functionality is supported for IPUs and enabled by default for IPU1 remote processor on the TI SDKs for all TI DRA7xx/AM57xx platforms. The functionality relies on matching configuration/code between SPL and Linux kernel in terms of memory and timers used by the firmwares, and matching firmwares in boot media (used by SPL) and in the rootfs in /lib/firmware folder (used by kernel).r0$…�r1$}r2$(h‚j-$h‘j+$ubaubh’)�r3$}r4$(h‚XPre-flight checksr5$h‘jÒ#hœjå#h�hÓhƒ}r6$(h†]r7$Upre-flight-checksr8$ah‡]h…]hŽ]h�]r9$hYauh¤Nh¥hh¦]r:$h¯XPre-flight checksr;$…�r<$}r=$(h‚j5$h‘j3$ubaubj6)�r>$}r?$(h‚Uh‘jÒ#hœjå#h�j9hƒ}r@$(j;U.h†]h‡]h…]j<UhŽ]h�]j=j>uh¤K6h¥hh¦]rA$(j@)�rB$}rC$(h‚XëBefore attempting to early boot a remotecore from U-Boot SPL, please ensure that the remotecore binary can be loaded by Linux without any issues. This ensures that the memory map and MMU configuration are done correctly. The test should be done by using a carveout (DMA pool) for the remoteproc instead of the default preferred CMA pool. This is achieved by replacing the "reusable" property with a "no-map" property in the reserved-memory node used by the remoteproc in the board dts file. h‘j>$hœjå#h�jChƒ}rD$(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rE$hÜ)�rF$}rG$(h‚XêBefore attempting to early boot a remotecore from U-Boot SPL, please ensure that the remotecore binary can be loaded by Linux without any issues. This ensures that the memory map and MMU configuration are done correctly. The test should be done by using a carveout (DMA pool) for the remoteproc instead of the default preferred CMA pool. This is achieved by replacing the "reusable" property with a "no-map" property in the reserved-memory node used by the remoteproc in the board dts file.rH$h‘jB$hœjå#h�hàhƒ}rI$(h…]hŽ]h‡]h†]h�]uh¤K6h¦]rJ$h¯XêBefore attempting to early boot a remotecore from U-Boot SPL, please ensure that the remotecore binary can be loaded by Linux without any issues. This ensures that the memory map and MMU configuration are done correctly. The test should be done by using a carveout (DMA pool) for the remoteproc instead of the default preferred CMA pool. This is achieved by replacing the "reusable" property with a "no-map" property in the reserved-memory node used by the remoteproc in the board dts file.rK$…�rL$}rM$(h‚jH$h‘jF$ubaubaubj@)�rN$}rO$(h‚XÕMLO uses the same memory allocation strategy as the kernel for the carveouts specified in the resource table from the memory pool used by the kernel. The location of the memory pools for each of the remotecores is hardcoded in MLO to kernel defaults. In case the memory allocations in kernel are modified, U-Boot should be modified to match with the configuration specified in the kernel. The U-Boot source file to modify is ``drivers/remoteproc/ipu_rproc.c``. :: #define DRA7\_RPROC\_CMA\_BASE\_IPU1 0x9d000000 #define DRA7\_RPROC\_CMA\_BASE\_IPU2 0x95800000 #define DRA7\_RPROC\_CMA\_SIZE\_IPU1 0x02000000 #define DRA7\_RPROC\_CMA\_SIZE\_IPU2 0x03800000 The definitions above should match the reserved-memory node region definitions in the corresponding dts board file in the kernel. For example, see the defined reserved-memory nodes in arch/arm/boot/dts/am57xx-beagle-x15-common.dtsi file used for all AM57xx EVM boards: :: ipu1_cma_pool: ipu1_cma@9d000000 { compatible = "shared-dma-pool"; reg = <0x9d000000 0x2000000>; reusable; status = "okay"; }; ipu2_cma_pool: ipu2_cma@95800000 { compatible = "shared-dma-pool"; reg = <0x95800000 0x3800000>; reusable; status = "okay"; }; If the allocations do not match, the MLO execution may fail when trying to allocate memory for the carveouts. Further, the kernel can overwrite the memory being used by firmwares and can result in crashes. h‘j>$hœjå#h�jChƒ}rP$(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rQ$(hÜ)�rR$}rS$(h‚X„MLO uses the same memory allocation strategy as the kernel for the carveouts specified in the resource table from the memory pool used by the kernel. The location of the memory pools for each of the remotecores is hardcoded in MLO to kernel defaults. In case the memory allocations in kernel are modified, U-Boot should be modified to match with the configuration specified in the kernel.rT$h‘jN$hœjå#h�hàhƒ}rU$(h…]hŽ]h‡]h†]h�]uh¤K?h¦]rV$h¯X„MLO uses the same memory allocation strategy as the kernel for the carveouts specified in the resource table from the memory pool used by the kernel. The location of the memory pools for each of the remotecores is hardcoded in MLO to kernel defaults. In case the memory allocations in kernel are modified, U-Boot should be modified to match with the configuration specified in the kernel.rW$…�rX$}rY$(h‚jT$h‘jR$ubaubhÜ)�rZ$}r[$(h‚XJThe U-Boot source file to modify is ``drivers/remoteproc/ipu_rproc.c``. ::h‘jN$hœjå#h�hàhƒ}r\$(h…]hŽ]h‡]h†]h�]uh¤KFh¦]r]$(h¯X$The U-Boot source file to modify is r^$…�r_$}r`$(h‚X$The U-Boot source file to modify is h‘jZ$ubjÅ )�ra$}rb$(h‚X"``drivers/remoteproc/ipu_rproc.c``hƒ}rc$(h…]hŽ]h‡]h†]h�]uh‘jZ$h¦]rd$h¯Xdrivers/remoteproc/ipu_rproc.cre$…�rf$}rg$(h‚Uh‘ja$ubah�jÍ ubh¯X.…�rh$}ri$(h‚X.h‘jZ$ubeubj¡)�rj$}rk$(h‚XÀ#define DRA7\_RPROC\_CMA\_BASE\_IPU1 0x9d000000 #define DRA7\_RPROC\_CMA\_BASE\_IPU2 0x95800000 #define DRA7\_RPROC\_CMA\_SIZE\_IPU1 0x02000000 #define DRA7\_RPROC\_CMA\_SIZE\_IPU2 0x03800000h‘jN$h�j¤hƒ}rl$(hÊhËh†]h‡]h…]hŽ]h�]uh¤Mú h¦]rm$h¯XÀ#define DRA7\_RPROC\_CMA\_BASE\_IPU1 0x9d000000 #define DRA7\_RPROC\_CMA\_BASE\_IPU2 0x95800000 #define DRA7\_RPROC\_CMA\_SIZE\_IPU1 0x02000000 #define DRA7\_RPROC\_CMA\_SIZE\_IPU2 0x03800000rn$…�ro$}rp$(h‚Uh‘jj$ubaubhÜ)�rq$}rr$(h‚XThe definitions above should match the reserved-memory node region definitions in the corresponding dts board file in the kernel. For example, see the defined reserved-memory nodes in arch/arm/boot/dts/am57xx-beagle-x15-common.dtsi file used for all AM57xx EVM boards: ::h‘jN$hœjå#h�hàhƒ}rs$(h…]hŽ]h‡]h†]h�]uh¤KOh¦]rt$h¯X The definitions above should match the reserved-memory node region definitions in the corresponding dts board file in the kernel. For example, see the defined reserved-memory nodes in arch/arm/boot/dts/am57xx-beagle-x15-common.dtsi file used for all AM57xx EVM boards:ru$…�rv$}rw$(h‚X The definitions above should match the reserved-memory node region definitions in the corresponding dts board file in the kernel. For example, see the defined reserved-memory nodes in arch/arm/boot/dts/am57xx-beagle-x15-common.dtsi file used for all AM57xx EVM boards:h‘jq$ubaubj¡)�rx$}ry$(h‚Xipu1_cma_pool: ipu1_cma@9d000000 { compatible = "shared-dma-pool"; reg = <0x9d000000 0x2000000>; reusable; status = "okay"; }; ipu2_cma_pool: ipu2_cma@95800000 { compatible = "shared-dma-pool"; reg = <0x95800000 0x3800000>; reusable; status = "okay"; };h‘jN$h�j¤hƒ}rz$(hÊhËh†]h‡]h…]hŽ]h�]uh¤M h¦]r{$h¯Xipu1_cma_pool: ipu1_cma@9d000000 { compatible = "shared-dma-pool"; reg = <0x9d000000 0x2000000>; reusable; status = "okay"; }; ipu2_cma_pool: ipu2_cma@95800000 { compatible = "shared-dma-pool"; reg = <0x95800000 0x3800000>; reusable; status = "okay"; };r|$…�r}$}r~$(h‚Uh‘jx$ubaubhÜ)�r$}r€$(h‚XÍIf the allocations do not match, the MLO execution may fail when trying to allocate memory for the carveouts. Further, the kernel can overwrite the memory being used by firmwares and can result in crashes.r�$h‘jN$hœjå#h�hàhƒ}r‚$(h…]hŽ]h‡]h†]h�]uh¤Kdh¦]rƒ$h¯XÍIf the allocations do not match, the MLO execution may fail when trying to allocate memory for the carveouts. Further, the kernel can overwrite the memory being used by firmwares and can result in crashes.r„$…�r…$}r†$(h‚j�$h‘j$ubaubeubj@)�r‡$}rˆ$(h‚XIThere is an additional memory that needs to be carved out in linux kernel for storing the MMU page tables of the individual cores. This additional memory is at 0x95700000, and is specified in the late attach device tree dra7-ipu-common-early-boot.dtsi as shown below. :: &reserved_mem { mmu-early-page-tables@95700000 { reg = <0x0 0x95700000 0x0 0x100000>; no-map; status = "okay"; }; }; For each core, we reserve 16 KB for the Level 1 page table and an additional 16 KB for Level 2 page tables i.e. 32 KB for core. This information is passed to the boot loader via the below macros in ``drivers/remoteproc/ipu_rproc.c``. In U-boot 2019.01, ``drivers/remoteproc/ipu_rproc.c``, :: #define DRA7\_PGTBL\_BASE\_IPU1 0x95700000 #define DRA7\_PGTBL\_BASE\_IPU2 0x95740000 h‘j>$hœjå#h�jChƒ}r‰$(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rŠ$(hÜ)�r‹$}rŒ$(h‚X There is an additional memory that needs to be carved out in linux kernel for storing the MMU page tables of the individual cores. This additional memory is at 0x95700000, and is specified in the late attach device tree dra7-ipu-common-early-boot.dtsi as shown below.r�$h‘j‡$hœjå#h�hàhƒ}rŽ$(h…]hŽ]h‡]h†]h�]uh¤Khh¦]r�$h¯X There is an additional memory that needs to be carved out in linux kernel for storing the MMU page tables of the individual cores. This additional memory is at 0x95700000, and is specified in the late attach device tree dra7-ipu-common-early-boot.dtsi as shown below.r�$…�r‘$}r’$(h‚j�$h‘j‹$ubaubj¡)�r“$}r”$(h‚X”&reserved_mem { mmu-early-page-tables@95700000 { reg = <0x0 0x95700000 0x0 0x100000>; no-map; status = "okay"; }; };h‘j‡$h�j¤hƒ}r•$(hÊhËh†]h‡]h…]hŽ]h�]uh¤M! h¦]r–$h¯X”&reserved_mem { mmu-early-page-tables@95700000 { reg = <0x0 0x95700000 0x0 0x100000>; no-map; status = "okay"; }; };r—$…�r˜$}r™$(h‚Uh‘j“$ubaubhÜ)�rš$}r›$(h‚XéFor each core, we reserve 16 KB for the Level 1 page table and an additional 16 KB for Level 2 page tables i.e. 32 KB for core. This information is passed to the boot loader via the below macros in ``drivers/remoteproc/ipu_rproc.c``.h‘j‡$hœjå#h�hàhƒ}rœ$(h…]hŽ]h‡]h†]h�]uh¤Kxh¦]r�$(h¯XÆFor each core, we reserve 16 KB for the Level 1 page table and an additional 16 KB for Level 2 page tables i.e. 32 KB for core. This information is passed to the boot loader via the below macros in rž$…�rŸ$}r $(h‚XÆFor each core, we reserve 16 KB for the Level 1 page table and an additional 16 KB for Level 2 page tables i.e. 32 KB for core. This information is passed to the boot loader via the below macros in h‘jš$ubjÅ )�r¡$}r¢$(h‚X"``drivers/remoteproc/ipu_rproc.c``hƒ}r£$(h…]hŽ]h‡]h†]h�]uh‘jš$h¦]r¤$h¯Xdrivers/remoteproc/ipu_rproc.cr¥$…�r¦$}r§$(h‚Uh‘j¡$ubah�jÍ ubh¯X.…�r¨$}r©$(h‚X.h‘jš$ubeubhÜ)�rª$}r«$(h‚X6In U-boot 2019.01, ``drivers/remoteproc/ipu_rproc.c``,h‘j‡$hœjå#h�hàhƒ}r¬$(h…]hŽ]h‡]h†]h�]uh¤K~h¦]r­$(h¯XIn U-boot 2019.01, r®$…�r¯$}r°$(h‚XIn U-boot 2019.01, h‘jª$ubjÅ )�r±$}r²$(h‚X"``drivers/remoteproc/ipu_rproc.c``hƒ}r³$(h…]hŽ]h‡]h†]h�]uh‘jª$h¦]r´$h¯Xdrivers/remoteproc/ipu_rproc.crµ$…�r¶$}r·$(h‚Uh‘j±$ubah�jÍ ubh¯X,…�r¸$}r¹$(h‚X,h‘jª$ubeubj¡)�rº$}r»$(h‚XU#define DRA7\_PGTBL\_BASE\_IPU1 0x95700000 #define DRA7\_PGTBL\_BASE\_IPU2 0x95740000h‘j‡$h�j¤hƒ}r¼$(hÊhËh†]h‡]h…]hŽ]h�]uh¤M3 h¦]r½$h¯XU#define DRA7\_PGTBL\_BASE\_IPU1 0x95700000 #define DRA7\_PGTBL\_BASE\_IPU2 0x95740000r¾$…�r¿$}rÀ$(h‚Uh‘jº$ubaubeubeubcdocutils.nodes block_quote rÁ$)�rÂ$}rÃ$(h‚Uh‘jÒ#hœjå#h�U block_quoterÄ$hƒ}rÅ$(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rÆ$hÜ)�rÇ$}rÈ$(h‚XAThe memory for the page tables (256 KB per IPU) is placed just before the carveout memories for the remote processors. 16 KB of memory is needed for the L1 page table (4096 entries * 4 bytes per 1 MB section). Any smaller page (64 KB or 4 KB) entries are supported through L2 page tables (1 KB per table). The remaining 240 KB can provide support for 240 L2 page tables. Any remoteproc firmware image requiring more than 240 L2 page table entries would need more memory to be reserved. The carveout in memory can be reduced to 128 KB if the system is under a memory constraint.rÉ$h‘jÂ$hœjå#h�hàhƒ}rÊ$(h…]hŽ]h‡]h†]h�]uh¤K…h¦]rË$h¯XAThe memory for the page tables (256 KB per IPU) is placed just before the carveout memories for the remote processors. 16 KB of memory is needed for the L1 page table (4096 entries * 4 bytes per 1 MB section). Any smaller page (64 KB or 4 KB) entries are supported through L2 page tables (1 KB per table). The remaining 240 KB can provide support for 240 L2 page tables. Any remoteproc firmware image requiring more than 240 L2 page table entries would need more memory to be reserved. The carveout in memory can be reduced to 128 KB if the system is under a memory constraint.rÌ$…�rÍ$}rÎ$(h‚jÉ$h‘jÇ$ubaubaubj6)�rÏ$}rÐ$(h‚Uh‘jÒ#hœjå#h�j9hƒ}rÑ$(j;U.jÖKh†]h‡]h…]j<UhŽ]h�]j=j>uh¤K�h¥hh¦]rÒ$j@)�rÓ$}rÔ$(h‚XâMLO first loads the remotecore binaries from storage media to a temporary DDR address. Then MLO parses the binaries and copies the code/data sections to the their final locations. Please ensure that the physical addresses used by the remotecore binaries during execution do not overlap with these temporary load addresses. The location of the macros controlling these temporary load locations is listed below. In U-Boot 2019.01, each core is assigned a distinct temporary load address. The source file in which the macro is defined is also modified. +--------------------------+--------------------------+------------------------------------------+ | Core | Load Address | Defined in | +==========================+==========================+==========================================+ | IPU1 | ``IPU1_LOAD_ADDR`` | ``arch/arm/mach-omap2/boot-common.c | | | | and drivers/remoteproc/ipu_rproc.c`` | +--------------------------+--------------------------+------------------------------------------+ | IPU2 | ``IPU2_LOAD_ADDR`` | ``arch/arm/mach-omap2/boot-common.c | | | | and drivers/remoteproc/ipu_rproc.c`` | +--------------------------+--------------------------+------------------------------------------+ Table: U-boot 2019.01:Temporary load address for Early boot binaries h‘jÏ$hœjå#h�jChƒ}rÕ$(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rÖ$(hÜ)�r×$}rØ$(h‚XBMLO first loads the remotecore binaries from storage media to a temporary DDR address. Then MLO parses the binaries and copies the code/data sections to the their final locations. Please ensure that the physical addresses used by the remotecore binaries during execution do not overlap with these temporary load addresses.rÙ$h‘jÓ$hœjå#h�hàhƒ}rÚ$(h…]hŽ]h‡]h†]h�]uh¤K�h¦]rÛ$h¯XBMLO first loads the remotecore binaries from storage media to a temporary DDR address. Then MLO parses the binaries and copies the code/data sections to the their final locations. Please ensure that the physical addresses used by the remotecore binaries during execution do not overlap with these temporary load addresses.rÜ$…�rÝ$}rÞ$(h‚jÙ$h‘j×$ubaubhÜ)�rß$}rà$(h‚XVThe location of the macros controlling these temporary load locations is listed below.rá$h‘jÓ$hœjå#h�hàhƒ}râ$(h…]hŽ]h‡]h†]h�]uh¤K–h¦]rã$h¯XVThe location of the macros controlling these temporary load locations is listed below.rä$…�rå$}ræ$(h‚já$h‘jß$ubaubhÜ)�rç$}rè$(h‚X‹In U-Boot 2019.01, each core is assigned a distinct temporary load address. The source file in which the macro is defined is also modified.ré$h‘jÓ$hœjå#h�hàhƒ}rê$(h…]hŽ]h‡]h†]h�]uh¤K™h¦]rë$h¯X‹In U-Boot 2019.01, each core is assigned a distinct temporary load address. The source file in which the macro is defined is also modified.rì$…�rí$}rî$(h‚jé$h‘jç$ubaubhÜ)�rï$}rð$(h‚XDTable: U-boot 2019.01:Temporary load address for Early boot binariesrñ$h‘jÓ$hœjå#h�hàhƒ}rò$(h…]hŽ]h‡]h†]h�]uh¤K§h¦]ró$h¯XDTable: U-boot 2019.01:Temporary load address for Early boot binariesrô$…�rõ$}rö$(h‚jñ$h‘jï$ubaubeubaubj¡)�r÷$}rø$(h‚X£CONFIG_SPL_DRIVERS_MISC_SUPPORT=y CONFIG_SPL_DM_RESET=y CONFIG_SPL_REMOTEPROC=y CONFIG_FS_LOADER=y CONFIG_REMOTEPROC_TI_IPU=y CONFIG_DM_RESET=y CONFIG_RESET_DRA7=yh‘jÒ#hœjå#h�j¤hƒ}rù$(hÊhËh†]h‡]h…]hŽ]h�]uh¤Mc h¥hh¦]rú$h¯X£CONFIG_SPL_DRIVERS_MISC_SUPPORT=y CONFIG_SPL_DM_RESET=y CONFIG_SPL_REMOTEPROC=y CONFIG_FS_LOADER=y CONFIG_REMOTEPROC_TI_IPU=y CONFIG_DM_RESET=y CONFIG_RESET_DRA7=yrû$…�rü$}rý$(h‚Uh‘j÷$ubaubhÜ)�rþ$}rÿ$(h‚XThe default firmware location, timers, remoteprocs to be enabled are defined in dts file. Please see the file arch/arm/dts/dra7-ipu-common-early-boot.dtsi, which defines the peripherals used for booting the IPU1, and is then included in the corresponding board's U-Boot dts file.r%h‘jÒ#hœjå#h�hàhƒ}r%(h…]hŽ]h‡]h†]h�]uh¤Kºh¥hh¦]r%h¯XThe default firmware location, timers, remoteprocs to be enabled are defined in dts file. Please see the file arch/arm/dts/dra7-ipu-common-early-boot.dtsi, which defines the peripherals used for booting the IPU1, and is then included in the corresponding board's U-Boot dts file.r%…�r%}r%(h‚j%h‘jþ$ubaubh’)�r%}r%(h‚X$Customizing Early Boot for a Usecaser%h‘jÒ#hœjå#h�hÓhƒ}r %(h†]r %U$customizing-early-boot-for-a-usecaser %ah‡]h…]hŽ]h�]r %hauh¤Nh¥hh¦]r %h¯X$Customizing Early Boot for a Usecaser%…�r%}r%(h‚j%h‘j%ubaubhÜ)�r%}r%(h‚X¥The Early boot code in U-Boot does the necessary configuration to bring up a remotecore. This includes the timers and the MMUs. It does not configure any other peripherals by default. Some usecases may require additional peripheral configuration before running the remotecore. U-Boot includes placeholder functions that can be populated for this purpose. These can be found in the file ``drivers/remoteproc/ipu_rproc.c``.h‘jÒ#hœjå#h�hàhƒ}r%(h…]hŽ]h‡]h†]h�]uh¤KÃh¥hh¦]r%(h¯X‚The Early boot code in U-Boot does the necessary configuration to bring up a remotecore. This includes the timers and the MMUs. It does not configure any other peripherals by default. Some usecases may require additional peripheral configuration before running the remotecore. U-Boot includes placeholder functions that can be populated for this purpose. These can be found in the file r%…�r%}r%(h‚X‚The Early boot code in U-Boot does the necessary configuration to bring up a remotecore. This includes the timers and the MMUs. It does not configure any other peripherals by default. Some usecases may require additional peripheral configuration before running the remotecore. U-Boot includes placeholder functions that can be populated for this purpose. These can be found in the file h‘j%ubjÅ )�r%}r%(h‚X"``drivers/remoteproc/ipu_rproc.c``hƒ}r%(h…]hŽ]h‡]h†]h�]uh‘j%h¦]r%h¯Xdrivers/remoteproc/ipu_rproc.cr%…�r%}r%(h‚Uh‘j%ubah�jÍ ubh¯X.…�r%}r %(h‚X.h‘j%ubeubj¡)�r!%}r"%(h‚Xg* If the remotecore binary expects any peripherals to be setup before it has * booted, configure them here. * * These functions are left empty by default as their operation is usecase * specific. u32 ipu1\_config\_peripherals(u32 core\_id, struct rproc \*cfg) { return 0; } u32 ipu2\_config\_peripherals(u32 core\_id, struct rproc \*cfg) { return 0; }h‘jÒ#hœjå#h�j¤hƒ}r#%(hÊhËh†]h‡]h…]hŽ]h�]uh¤M€ h¥hh¦]r$%h¯Xg* If the remotecore binary expects any peripherals to be setup before it has * booted, configure them here. * * These functions are left empty by default as their operation is usecase * specific. u32 ipu1\_config\_peripherals(u32 core\_id, struct rproc \*cfg) { return 0; } u32 ipu2\_config\_peripherals(u32 core\_id, struct rproc \*cfg) { return 0; }r%%…�r&%}r'%(h‚Uh‘j!%ubaubh’)�r(%}r)%(h‚XTesting early bootr*%h‘jÒ#hœjå#h�hÓhƒ}r+%(h†]r,%Utesting-early-bootr-%ah‡]h…]hŽ]h�]r.%hauh¤Nh¥hh¦]r/%h¯XTesting early bootr0%…�r1%}r2%(h‚j*%h‘j(%ubaubj6)�r3%}r4%(h‚Uh‘jÒ#hœjå#h�j9hƒ}r5%(j;U.h†]h‡]h…]j<UhŽ]h�]j=j>uh¤Káh¥hh¦]r6%(j@)�r7%}r8%(h‚XxPlace the MLO built with early boot enabled and the remotecore binaries in the specified locations and power on the EVM.h‘j3%hœjå#h�jChƒ}r9%(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r:%hÜ)�r;%}r<%(h‚XxPlace the MLO built with early boot enabled and the remotecore binaries in the specified locations and power on the EVM.r=%h‘j7%hœjå#h�hàhƒ}r>%(h…]hŽ]h‡]h†]h�]uh¤Káh¦]r?%h¯XxPlace the MLO built with early boot enabled and the remotecore binaries in the specified locations and power on the EVM.r@%…�rA%}rB%(h‚j=%h‘j;%ubaubaubj@)�rC%}rD%(h‚XfThe MLO should locate the remotecore binary and proceed to load it and then jump to U-Boot or Kernel. h‘j3%hœjå#h�jChƒ}rE%(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rF%hÜ)�rG%}rH%(h‚XeThe MLO should locate the remotecore binary and proceed to load it and then jump to U-Boot or Kernel.rI%h‘jC%hœjå#h�hàhƒ}rJ%(h…]hŽ]h‡]h†]h�]uh¤Kãh¦]rK%h¯XeThe MLO should locate the remotecore binary and proceed to load it and then jump to U-Boot or Kernel.rL%…�rM%}rN%(h‚jI%h‘jG%ubaubaubeubhþ)�rO%}rP%(h‚Uh‘jÒ#hœjå#h�jhƒ}rQ%(h…]hŽ]h‡]h†]h�]uh¤Kæh¥hh¦]rR%(j)�rS%}rT%(h‚XAn easy way to verify that early boot is working is by stopping the A15 execution at the U-Boot prompt and connecting to the remotecore via a JTAG. If connecting to a remotecore via JTAG does not work, please refer to the section of "Debugging Early Boot" later in the document.rU%jKh‘jO%hœjå#h�h¤hƒ}rV%(h…]hŽ]h‡]h†]h�]uh¤Kêh¥hh¦]rW%h¯XAn easy way to verify that early boot is working is by stopping the A15 execution at the U-Boot prompt and connecting to the remotecore via a JTAG. If connecting to a remotecore via JTAG does not work, please refer to the section of "Debugging Early Boot" later in the document.rX%…�rY%}rZ%(h‚jU%h‘jS%ubaubj)�r[%}r\%(h‚X\Another way to check the functionality is to execute the below command after kernel boot-up.r]%jKh‘jO%hœjå#h�h¤hƒ}r^%(h…]hŽ]h‡]h†]h�]uh¤Kìh¥hh¦]r_%h¯X\Another way to check the functionality is to execute the below command after kernel boot-up.r`%…�ra%}rb%(h‚j]%h‘j[%ubaubeubj¡)�rc%}rd%(h‚Xüroot@dra7xx-evm:~# cat /sys/kernel/debug/remoteproc/remoteproc0/trace0 [0][ 0.000] Watchdog enabled: TimerBase = 0x68824000 SMP-Core = 0 Freq = 19200000 [0][ 0.000] Watchdog enabled: TimerBase = 0x68826000 SMP-Core = 1 Freq = 19200000 [0][ 0.000] Watchdog_restore registered as a resume callback [0][ 0.000] 18 Resource entries at 0x3000 [0][ 0.000] messageq_single.c:main: MultiProc id = 2 [0][ 0.000] Time at reset() is 51615 ticks [0][ 0.000] Time at startup() is 51726 ticks [0][ 0.000] Time at main() is 51804 ticks [0][ 0.000] registering rpmsg-proto:rpmsg-proto service on 61 with HOST [0][ 0.000] tsk1Fxn: created MessageQ: SLAVE_IPU1; QueueID: 0x20080 [0][ 0.000] Awaiting sync message from host...h‘jÒ#hœjå#h�j¤hƒ}re%(hÊhËh†]h‡]h…]hŽ]h�]uh¤M¡ h¥hh¦]rf%h¯Xüroot@dra7xx-evm:~# cat /sys/kernel/debug/remoteproc/remoteproc0/trace0 [0][ 0.000] Watchdog enabled: TimerBase = 0x68824000 SMP-Core = 0 Freq = 19200000 [0][ 0.000] Watchdog enabled: TimerBase = 0x68826000 SMP-Core = 1 Freq = 19200000 [0][ 0.000] Watchdog_restore registered as a resume callback [0][ 0.000] 18 Resource entries at 0x3000 [0][ 0.000] messageq_single.c:main: MultiProc id = 2 [0][ 0.000] Time at reset() is 51615 ticks [0][ 0.000] Time at startup() is 51726 ticks [0][ 0.000] Time at main() is 51804 ticks [0][ 0.000] registering rpmsg-proto:rpmsg-proto service on 61 with HOST [0][ 0.000] tsk1Fxn: created MessageQ: SLAVE_IPU1; QueueID: 0x20080 [0][ 0.000] Awaiting sync message from host...rg%…�rh%}ri%(h‚Uh‘jc%ubaubhÜ)�rj%}rk%(h‚X�In the next section, we describe the kernel modifications necessary to allow it to connect to a remotecore already loaded by MLO.rl%h‘jÒ#hœjå#h�hàhƒ}rm%(h…]hŽ]h‡]h†]h�]uh¤Kýh¥hh¦]rn%h¯X�In the next section, we describe the kernel modifications necessary to allow it to connect to a remotecore already loaded by MLO.ro%…�rp%}rq%(h‚jl%h‘jj%ubaubh’)�rr%}rs%(h‚XEnabling Late attachrt%h‘jÒ#hœjå#h�hÓhƒ}ru%(h†]rv%Uenabling-late-attachrw%ah‡]h…]hŽ]h�]rx%h8auh¤Nh¥hh¦]ry%h¯XEnabling Late attachrz%…�r{%}r|%(h‚jt%h‘jr%ubaubhÜ)�r}%}r~%(h‚X-Loading the remotecores in the kernel is done via the ``remoteproc`` module. Each remotecore requires timers for OS tick and watchdog purposes and MMU's for mapping virtual addresses to physical addresses. The remoteproc module uses device tree determine the timers and mmu's used for each remotecore.h‘jÒ#hœjå#h�hàhƒ}r%(h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]r€%(h¯X6Loading the remotecores in the kernel is done via the r�%…�r‚%}rƒ%(h‚X6Loading the remotecores in the kernel is done via the h‘j}%ubjÅ )�r„%}r…%(h‚X``remoteproc``hƒ}r†%(h…]hŽ]h‡]h†]h�]uh‘j}%h¦]r‡%h¯X remoteprocrˆ%…�r‰%}rŠ%(h‚Uh‘j„%ubah�jÍ ubh¯Xé module. Each remotecore requires timers for OS tick and watchdog purposes and MMU's for mapping virtual addresses to physical addresses. The remoteproc module uses device tree determine the timers and mmu's used for each remotecore.r‹%…�rŒ%}r�%(h‚Xé module. Each remotecore requires timers for OS tick and watchdog purposes and MMU's for mapping virtual addresses to physical addresses. The remoteproc module uses device tree determine the timers and mmu's used for each remotecore.h‘j}%ubeubhÜ)�rŽ%}r�%(h‚XóThe device tree nodes for each of the cores are shown below. The allocation of timers to remotecores is from the file ``arch/arm/boot/dts/dra7-ipu-dsp-common.dtsi`` and ``arch/arm/boot/dts/dra74-ipu-dsp-common.dtsi`` in the kernel source tree.h‘jÒ#hœjå#h�hàhƒ}r�%(h…]hŽ]h‡]h†]h�]uh¤M h¥hh¦]r‘%(h¯XvThe device tree nodes for each of the cores are shown below. The allocation of timers to remotecores is from the file r’%…�r“%}r”%(h‚XvThe device tree nodes for each of the cores are shown below. The allocation of timers to remotecores is from the file h‘jŽ%ubjÅ )�r•%}r–%(h‚X.``arch/arm/boot/dts/dra7-ipu-dsp-common.dtsi``hƒ}r—%(h…]hŽ]h‡]h†]h�]uh‘jŽ%h¦]r˜%h¯X*arch/arm/boot/dts/dra7-ipu-dsp-common.dtsir™%…�rš%}r›%(h‚Uh‘j•%ubah�jÍ ubh¯X and rœ%…�r�%}rž%(h‚X and h‘jŽ%ubjÅ )�rŸ%}r %(h‚X/``arch/arm/boot/dts/dra74-ipu-dsp-common.dtsi``hƒ}r¡%(h…]hŽ]h‡]h†]h�]uh‘jŽ%h¦]r¢%h¯X+arch/arm/boot/dts/dra74-ipu-dsp-common.dtsir£%…�r¤%}r¥%(h‚Uh‘jŸ%ubah�jÍ ubh¯X in the kernel source tree.r¦%…�r§%}r¨%(h‚X in the kernel source tree.h‘jŽ%ubeubjB)�r©%}rª%(h‚Uh‘jÒ#hœjå#h�jEhƒ}r«%(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r¬%jH)�r­%}r®%(h‚Uhƒ}r¯%(h†]h‡]h…]hŽ]h�]UcolsKuh‘j©%h¦]r°%(jM)�r±%}r²%(h‚Uhƒ}r³%(h†]h‡]h…]hŽ]h�]UcolwidthKuh‘j­%h¦]h�jQubjM)�r´%}rµ%(h‚Uhƒ}r¶%(h†]h‡]h…]hŽ]h�]UcolwidthKuh‘j­%h¦]h�jQubjM)�r·%}r¸%(h‚Uhƒ}r¹%(h†]h‡]h…]hŽ]h�]UcolwidthKuh‘j­%h¦]h�jQubjM)�rº%}r»%(h‚Uhƒ}r¼%(h†]h‡]h…]hŽ]h�]UcolwidthKuh‘j­%h¦]h�jQubjM)�r½%}r¾%(h‚Uhƒ}r¿%(h†]h‡]h…]hŽ]h�]UcolwidthKuh‘j­%h¦]h�jQubjX)�rÀ%}rÁ%(h‚Uhƒ}rÂ%(h…]hŽ]h‡]h†]h�]uh‘j­%h¦]rÃ%j])�rÄ%}rÅ%(h‚Uhƒ}rÆ%(h…]hŽ]h‡]h†]h�]uh‘jÀ%h¦]rÇ%(jb)�rÈ%}rÉ%(h‚Uhƒ}rÊ%(h…]hŽ]h‡]h†]h�]uh‘jÄ%h¦]rË%hÜ)�rÌ%}rÍ%(h‚XCorerÎ%h‘jÈ%hœjå#h�hàhƒ}rÏ%(h…]hŽ]h‡]h†]h�]uh¤Mh¦]rÐ%h¯XCorerÑ%…�rÒ%}rÓ%(h‚jÎ%h‘jÌ%ubaubah�joubjb)�rÔ%}rÕ%(h‚Uhƒ}rÖ%(h…]hŽ]h‡]h†]h�]uh‘jÄ%h¦]r×%hÜ)�rØ%}rÙ%(h‚XRemotecore noderÚ%h‘jÔ%hœjå#h�hàhƒ}rÛ%(h…]hŽ]h‡]h†]h�]uh¤Mh¦]rÜ%h¯XRemotecore noderÝ%…�rÞ%}rß%(h‚jÚ%h‘jØ%ubaubah�joubjb)�rà%}rá%(h‚Uhƒ}râ%(h…]hŽ]h‡]h†]h�]uh‘jÄ%h¦]rã%hÜ)�rä%}rå%(h‚X OS timer noderæ%h‘jà%hœjå#h�hàhƒ}rç%(h…]hŽ]h‡]h†]h�]uh¤Mh¦]rè%h¯X OS timer noderé%…�rê%}rë%(h‚jæ%h‘jä%ubaubah�joubjb)�rì%}rí%(h‚Uhƒ}rî%(h…]hŽ]h‡]h†]h�]uh‘jÄ%h¦]rï%hÜ)�rð%}rñ%(h‚XWatch dog timer node(s)rò%h‘jì%hœjå#h�hàhƒ}ró%(h…]hŽ]h‡]h†]h�]uh¤Mh¦]rô%h¯XWatch dog timer node(s)rõ%…�rö%}r÷%(h‚jò%h‘jð%ubaubah�joubjb)�rø%}rù%(h‚Uhƒ}rú%(h…]hŽ]h‡]h†]h�]uh‘jÄ%h¦]rû%hÜ)�rü%}rý%(h‚X MMU node(s)rþ%h‘jø%hœjå#h�hàhƒ}rÿ%(h…]hŽ]h‡]h†]h�]uh¤Mh¦]r&h¯X MMU node(s)r&…�r&}r&(h‚jþ%h‘jü%ubaubah�joubeh�jˆubah�j‰ubjŠ)�r&}r&(h‚Uhƒ}r&(h…]hŽ]h‡]h†]h�]uh‘j­%h¦]r&(j])�r&}r &(h‚Uhƒ}r &(h…]hŽ]h‡]h†]h�]uh‘j&h¦]r &(jb)�r &}r &(h‚Uhƒ}r&(h…]hŽ]h‡]h†]h�]uh‘j&h¦]r&hÜ)�r&}r&(h‚XIPU2r&h‘j &hœjå#h�hàhƒ}r&(h…]hŽ]h‡]h†]h�]uh¤Mh¦]r&h¯XIPU2r&…�r&}r&(h‚j&h‘j&ubaubah�joubjb)�r&}r&(h‚Uhƒ}r&(h…]hŽ]h‡]h†]h�]uh‘j&h¦]r&hÜ)�r&}r&(h‚Xipu2r&h‘j&hœjå#h�hàhƒ}r&(h…]hŽ]h‡]h†]h�]uh¤Mh¦]r &h¯Xipu2r!&…�r"&}r#&(h‚j&h‘j&ubaubah�joubjb)�r$&}r%&(h‚Uhƒ}r&&(h…]hŽ]h‡]h†]h�]uh‘j&h¦]r'&hÜ)�r(&}r)&(h‚Xtimer3r*&h‘j$&hœjå#h�hàhƒ}r+&(h…]hŽ]h‡]h†]h�]uh¤Mh¦]r,&h¯Xtimer3r-&…�r.&}r/&(h‚j*&h‘j(&ubaubah�joubjb)�r0&}r1&(h‚Uhƒ}r2&(h…]hŽ]h‡]h†]h�]uh‘j&h¦]r3&hÜ)�r4&}r5&(h‚X timer4,timer9r6&h‘j0&hœjå#h�hàhƒ}r7&(h…]hŽ]h‡]h†]h�]uh¤Mh¦]r8&h¯X timer4,timer9r9&…�r:&}r;&(h‚j6&h‘j4&ubaubah�joubjb)�r<&}r=&(h‚Uhƒ}r>&(h…]hŽ]h‡]h†]h�]uh‘j&h¦]r?&hÜ)�r@&}rA&(h‚X mmu\_ipu2h‘j<&hœjå#h�hàhƒ}rB&(h…]hŽ]h‡]h†]h�]uh¤Mh¦]rC&h¯Xmmu_ipu2rD&…�rE&}rF&(h‚X mmu\_ipu2h‘j@&ubaubah�joubeh�jˆubj])�rG&}rH&(h‚Uhƒ}rI&(h…]hŽ]h‡]h†]h�]uh‘j&h¦]rJ&(jb)�rK&}rL&(h‚Uhƒ}rM&(h…]hŽ]h‡]h†]h�]uh‘jG&h¦]rN&hÜ)�rO&}rP&(h‚XIPU1rQ&h‘jK&hœjå#h�hàhƒ}rR&(h…]hŽ]h‡]h†]h�]uh¤Mh¦]rS&h¯XIPU1rT&…�rU&}rV&(h‚jQ&h‘jO&ubaubah�joubjb)�rW&}rX&(h‚Uhƒ}rY&(h…]hŽ]h‡]h†]h�]uh‘jG&h¦]rZ&hÜ)�r[&}r\&(h‚Xipu1r]&h‘jW&hœjå#h�hàhƒ}r^&(h…]hŽ]h‡]h†]h�]uh¤Mh¦]r_&h¯Xipu1r`&…�ra&}rb&(h‚j]&h‘j[&ubaubah�joubjb)�rc&}rd&(h‚Uhƒ}re&(h…]hŽ]h‡]h†]h�]uh‘jG&h¦]rf&hÜ)�rg&}rh&(h‚Xtimer11ri&h‘jc&hœjå#h�hàhƒ}rj&(h…]hŽ]h‡]h†]h�]uh¤Mh¦]rk&h¯Xtimer11rl&…�rm&}rn&(h‚ji&h‘jg&ubaubah�joubjb)�ro&}rp&(h‚Uhƒ}rq&(h…]hŽ]h‡]h†]h�]uh‘jG&h¦]rr&hÜ)�rs&}rt&(h‚X timer7,timer8ru&h‘jo&hœjå#h�hàhƒ}rv&(h…]hŽ]h‡]h†]h�]uh¤Mh¦]rw&h¯X timer7,timer8rx&…�ry&}rz&(h‚ju&h‘js&ubaubah�joubjb)�r{&}r|&(h‚Uhƒ}r}&(h…]hŽ]h‡]h†]h�]uh‘jG&h¦]r~&hÜ)�r&}r€&(h‚X mmu\_ipu1h‘j{&hœjå#h�hàhƒ}r�&(h…]hŽ]h‡]h†]h�]uh¤Mh¦]r‚&h¯Xmmu_ipu1rƒ&…�r„&}r…&(h‚X mmu\_ipu1h‘j&ubaubah�joubeh�jˆubj])�r†&}r‡&(h‚Uhƒ}rˆ&(h…]hŽ]h‡]h†]h�]uh‘j&h¦]r‰&(jb)�rŠ&}r‹&(h‚Uhƒ}rŒ&(h…]hŽ]h‡]h†]h�]uh‘j†&h¦]r�&hÜ)�rŽ&}r�&(h‚XDSP2r�&h‘jŠ&hœjå#h�hàhƒ}r‘&(h…]hŽ]h‡]h†]h�]uh¤Mh¦]r’&h¯XDSP2r“&…�r”&}r•&(h‚j�&h‘jŽ&ubaubah�joubjb)�r–&}r—&(h‚Uhƒ}r˜&(h…]hŽ]h‡]h†]h�]uh‘j†&h¦]r™&hÜ)�rš&}r›&(h‚Xdsp2rœ&h‘j–&hœjå#h�hàhƒ}r�&(h…]hŽ]h‡]h†]h�]uh¤Mh¦]rž&h¯Xdsp2rŸ&…�r &}r¡&(h‚jœ&h‘jš&ubaubah�joubjb)�r¢&}r£&(h‚Uhƒ}r¤&(h…]hŽ]h‡]h†]h�]uh‘j†&h¦]r¥&hÜ)�r¦&}r§&(h‚Xtimer6r¨&h‘j¢&hœjå#h�hàhƒ}r©&(h…]hŽ]h‡]h†]h�]uh¤Mh¦]rª&h¯Xtimer6r«&…�r¬&}r­&(h‚j¨&h‘j¦&ubaubah�joubjb)�r®&}r¯&(h‚Uhƒ}r°&(h…]hŽ]h‡]h†]h�]uh‘j†&h¦]h�joubjb)�r±&}r²&(h‚Uhƒ}r³&(h…]hŽ]h‡]h†]h�]uh‘j†&h¦]r´&hÜ)�rµ&}r¶&(h‚Xmmu0\_dsp2,mmu 1\_dsp2h‘j±&hœjå#h�hàhƒ}r·&(h…]hŽ]h‡]h†]h�]uh¤Mh¦]r¸&h¯Xmmu0_dsp2,mmu 1_dsp2r¹&…�rº&}r»&(h‚Xmmu0\_dsp2,mmu 1\_dsp2h‘jµ&ubaubah�joubeh�jˆubj])�r¼&}r½&(h‚Uhƒ}r¾&(h…]hŽ]h‡]h†]h�]uh‘j&h¦]r¿&(jb)�rÀ&}rÁ&(h‚Uhƒ}rÂ&(h…]hŽ]h‡]h†]h�]uh‘j¼&h¦]rÃ&hÜ)�rÄ&}rÅ&(h‚XDSP1rÆ&h‘jÀ&hœjå#h�hàhƒ}rÇ&(h…]hŽ]h‡]h†]h�]uh¤Mh¦]rÈ&h¯XDSP1rÉ&…�rÊ&}rË&(h‚jÆ&h‘jÄ&ubaubah�joubjb)�rÌ&}rÍ&(h‚Uhƒ}rÎ&(h…]hŽ]h‡]h†]h�]uh‘j¼&h¦]rÏ&hÜ)�rÐ&}rÑ&(h‚Xdsp1rÒ&h‘jÌ&hœjå#h�hàhƒ}rÓ&(h…]hŽ]h‡]h†]h�]uh¤Mh¦]rÔ&h¯Xdsp1rÕ&…�rÖ&}r×&(h‚jÒ&h‘jÐ&ubaubah�joubjb)�rØ&}rÙ&(h‚Uhƒ}rÚ&(h…]hŽ]h‡]h†]h�]uh‘j¼&h¦]rÛ&hÜ)�rÜ&}rÝ&(h‚Xtimer5rÞ&h‘jØ&hœjå#h�hàhƒ}rß&(h…]hŽ]h‡]h†]h�]uh¤Mh¦]rà&h¯Xtimer5rá&…�râ&}rã&(h‚jÞ&h‘jÜ&ubaubah�joubjb)�rä&}rå&(h‚Uhƒ}ræ&(h…]hŽ]h‡]h†]h�]uh‘j¼&h¦]rç&hÜ)�rè&}ré&(h‚Xtimer10rê&h‘jä&hœjå#h�hàhƒ}rë&(h…]hŽ]h‡]h†]h�]uh¤Mh¦]rì&h¯Xtimer10rí&…�rî&}rï&(h‚jê&h‘jè&ubaubah�joubjb)�rð&}rñ&(h‚Uhƒ}rò&(h…]hŽ]h‡]h†]h�]uh‘j¼&h¦]ró&hÜ)�rô&}rõ&(h‚Xmmu0\_dsp1,mmu 1\_dsp1h‘jð&hœjå#h�hàhƒ}rö&(h…]hŽ]h‡]h†]h�]uh¤Mh¦]r÷&h¯Xmmu0_dsp1,mmu 1_dsp1rø&…�rù&}rú&(h‚Xmmu0\_dsp1,mmu 1\_dsp1h‘jô&ubaubah�joubeh�jˆubeh�jWubeh�jXubaubhÜ)�rû&}rü&(h‚XcDuring the normal boot flow, Linux kernel resets, idles and configures all functional blocks to reach a known initial state. This sequence of operations will terminate execution on a remotecore started by the boot loader. To prevent this from happening, the following attributes need to be set on **each** device tree node corresponding to the remotecore.h‘jÒ#hœjå#h�hàhƒ}rý&(h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]rþ&(h¯X)During the normal boot flow, Linux kernel resets, idles and configures all functional blocks to reach a known initial state. This sequence of operations will terminate execution on a remotecore started by the boot loader. To prevent this from happening, the following attributes need to be set on rÿ&…�r'}r'(h‚X)During the normal boot flow, Linux kernel resets, idles and configures all functional blocks to reach a known initial state. This sequence of operations will terminate execution on a remotecore started by the boot loader. To prevent this from happening, the following attributes need to be set on h‘jû&ubj¯)�r'}r'(h‚X**each**hƒ}r'(h…]hŽ]h‡]h†]h�]uh‘jû&h¦]r'h¯Xeachr'…�r'}r'(h‚Uh‘j'ubah�j·ubh¯X2 device tree node corresponding to the remotecore.r '…�r '}r '(h‚X2 device tree node corresponding to the remotecore.h‘jû&ubeubj6)�r '}r '(h‚Uh‘jÒ#hœjå#h�j9hƒ}r'(j;U.h†]h‡]h…]j<UhŽ]h�]j=j>uh¤M$h¥hh¦]r'(j@)�r'}r'(h‚X``ti,no-idle-on-init``r'h‘j 'hœjå#h�jChƒ}r'(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r'hÜ)�r'}r'(h‚j'h‘j'hœjå#h�hàhƒ}r'(h…]hŽ]h‡]h†]h�]uh¤M$h¦]r'jÅ )�r'}r'(h‚j'hƒ}r'(h…]hŽ]h‡]h†]h�]uh‘j'h¦]r'h¯Xti,no-idle-on-initr'…�r'}r'(h‚Uh‘j'ubah�jÍ ubaubaubj@)�r '}r!'(h‚X``ti,no-reset-on-init``. h‘j 'hœjå#h�jChƒ}r"'(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r#'hÜ)�r$'}r%'(h‚X``ti,no-reset-on-init``.h‘j 'hœjå#h�hàhƒ}r&'(h…]hŽ]h‡]h†]h�]uh¤M%h¦]r''(jÅ )�r('}r)'(h‚X``ti,no-reset-on-init``hƒ}r*'(h…]hŽ]h‡]h†]h�]uh‘j$'h¦]r+'h¯Xti,no-reset-on-initr,'…�r-'}r.'(h‚Uh‘j('ubah�jÍ ubh¯X.…�r/'}r0'(h‚X.h‘j$'ubeubaubeubhÜ)�r1'}r2'(h‚XÁThese attributes together signal to the kernel that remotecore and other nodes have been configured and are in use before the kernel boot. These should not be reset or idled during kernel boot.r3'h‘jÒ#hœjå#h�hàhƒ}r4'(h…]hŽ]h‡]h†]h�]uh¤M'h¥hh¦]r5'h¯XÁThese attributes together signal to the kernel that remotecore and other nodes have been configured and are in use before the kernel boot. These should not be reset or idled during kernel boot.r6'…�r7'}r8'(h‚j3'h‘j1'ubaubj6)�r9'}r:'(h‚Uh‘jÒ#hœjå#h�j9hƒ}r;'(j;U.h†]h‡]h…]j<UhŽ]h�]j=j>uh¤M-h¥hh¦]r<'(j@)�r='}r>'(h‚X``ti,no-idle-on-init``r?'h‘j9'hœjå#h�jChƒ}r@'(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rA'hÜ)�rB'}rC'(h‚j?'h‘j='hœjå#h�hàhƒ}rD'(h…]hŽ]h‡]h†]h�]uh¤M-h¦]rE'jÅ )�rF'}rG'(h‚j?'hƒ}rH'(h…]hŽ]h‡]h†]h�]uh‘jB'h¦]rI'h¯Xti,no-idle-on-initrJ'…�rK'}rL'(h‚Uh‘jF'ubah�jÍ ubaubaubj@)�rM'}rN'(h‚X``ti,no-reset-on-init``. h‘j9'hœjå#h�jChƒ}rO'(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rP'hÜ)�rQ'}rR'(h‚X``ti,no-reset-on-init``.h‘jM'hœjå#h�hàhƒ}rS'(h…]hŽ]h‡]h†]h�]uh¤M.h¦]rT'(jÅ )�rU'}rV'(h‚X``ti,no-reset-on-init``hƒ}rW'(h…]hŽ]h‡]h†]h�]uh‘jQ'h¦]rX'h¯Xti,no-reset-on-initrY'…�rZ'}r['(h‚Uh‘jU'ubah�jÍ ubh¯X.…�r\'}r]'(h‚X.h‘jQ'ubeubaubeubhÜ)�r^'}r_'(h‚X%Refer dra7-ipu-common-early-boot.dtsir`'h‘jÒ#hœjå#h�hàhƒ}ra'(h…]hŽ]h‡]h†]h�]uh¤M0h¥hh¦]rb'h¯X%Refer dra7-ipu-common-early-boot.dtsirc'…�rd'}re'(h‚j`'h‘j^'ubaubhÜ)�rf'}rg'(h‚XÖAn example showing the device tree modifications necessary when late attaching to IPU1 are shown below. Please note that the attributes are set on the ``ipu1`` node as well as the timers and mmu nodes used by IPU1.h‘jÒ#hœjå#h�hàhƒ}rh'(h…]hŽ]h‡]h†]h�]uh¤M2h¥hh¦]ri'(h¯X—An example showing the device tree modifications necessary when late attaching to IPU1 are shown below. Please note that the attributes are set on the rj'…�rk'}rl'(h‚X—An example showing the device tree modifications necessary when late attaching to IPU1 are shown below. Please note that the attributes are set on the h‘jf'ubjÅ )�rm'}rn'(h‚X``ipu1``hƒ}ro'(h…]hŽ]h‡]h†]h�]uh‘jf'h¦]rp'h¯Xipu1rq'…�rr'}rs'(h‚Uh‘jm'ubah�jÍ ubh¯X7 node as well as the timers and mmu nodes used by IPU1.rt'…�ru'}rv'(h‚X7 node as well as the timers and mmu nodes used by IPU1.h‘jf'ubeubj¡)�rw'}rx'(h‚X9&ipu1 { ti,no-idle-on-init; ti,no-reset-on-init; }; &timer11 { ti,no-idle-on-init; ti,no-reset-on-init; }; &timer7 { ti,no-idle-on-init; ti,no-reset-on-init; }; &timer8 { ti,no-idle-on-init; ti,no-reset-on-init; }; &mmu_ipu1{ ti,no-idle-on-init; ti,no-reset-on-init; };h‘jÒ#hœjå#h�j¤hƒ}ry'(hÊhËh†]h‡]h…]hŽ]h�]uh¤Mê h¥hh¦]rz'h¯X9&ipu1 { ti,no-idle-on-init; ti,no-reset-on-init; }; &timer11 { ti,no-idle-on-init; ti,no-reset-on-init; }; &timer7 { ti,no-idle-on-init; ti,no-reset-on-init; }; &timer8 { ti,no-idle-on-init; ti,no-reset-on-init; }; &mmu_ipu1{ ti,no-idle-on-init; ti,no-reset-on-init; };r{'…�r|'}r}'(h‚Uh‘jw'ubaubh’)�r~'}r'(h‚XDebugging Late Attachr€'h‘jÒ#hœjå#h�hÓhƒ}r�'(h†]r‚'Udebugging-late-attachrƒ'ah‡]h…]hŽ]h�]r„'hWauh¤Nh¥hh¦]r…'h¯XDebugging Late Attachr†'…�r‡'}rˆ'(h‚j€'h‘j~'ubaubj6)�r‰'}rŠ'(h‚Uh‘jÒ#hœjå#h�j9hƒ}r‹'(j;U.h†]h‡]h…]j<UhŽ]h�]j=j>uh¤MWh¥hh¦]rŒ'(j@)�r�'}rŽ'(h‚XêEnsure that both the late attach attributes are set on the device tree nodes corresponding to the remotecore node being loaded from the boot loader. Otherwise the kernel will reset and reload the remotecore as in the normal boot flow.h‘j‰'hœjå#h�jChƒ}r�'(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r�'hÜ)�r‘'}r’'(h‚XêEnsure that both the late attach attributes are set on the device tree nodes corresponding to the remotecore node being loaded from the boot loader. Otherwise the kernel will reset and reload the remotecore as in the normal boot flow.r“'h‘j�'hœjå#h�hàhƒ}r”'(h…]hŽ]h‡]h†]h�]uh¤MWh¦]r•'h¯XêEnsure that both the late attach attributes are set on the device tree nodes corresponding to the remotecore node being loaded from the boot loader. Otherwise the kernel will reset and reload the remotecore as in the normal boot flow.r–'…�r—'}r˜'(h‚j“'h‘j‘'ubaubaubj@)�r™'}rš'(h‚X*Ensure that both the late attach attributes are set **only** on the device tree nodes corresponding to the remotecore node being loaded from the boot loader. Otherwise the kernel will try to communicate with a remotecore that is not loaded and run into an error or a crash in a worst case scenario.h‘j‰'hœjå#h�jChƒ}r›'(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rœ'hÜ)�r�'}rž'(h‚X*Ensure that both the late attach attributes are set **only** on the device tree nodes corresponding to the remotecore node being loaded from the boot loader. Otherwise the kernel will try to communicate with a remotecore that is not loaded and run into an error or a crash in a worst case scenario.h‘j™'hœjå#h�hàhƒ}rŸ'(h…]hŽ]h‡]h†]h�]uh¤M[h¦]r '(h¯X4Ensure that both the late attach attributes are set r¡'…�r¢'}r£'(h‚X4Ensure that both the late attach attributes are set h‘j�'ubj¯)�r¤'}r¥'(h‚X**only**hƒ}r¦'(h…]hŽ]h‡]h†]h�]uh‘j�'h¦]r§'h¯Xonlyr¨'…�r©'}rª'(h‚Uh‘j¤'ubah�j·ubh¯Xî on the device tree nodes corresponding to the remotecore node being loaded from the boot loader. Otherwise the kernel will try to communicate with a remotecore that is not loaded and run into an error or a crash in a worst case scenario.r«'…�r¬'}r­'(h‚Xî on the device tree nodes corresponding to the remotecore node being loaded from the boot loader. Otherwise the kernel will try to communicate with a remotecore that is not loaded and run into an error or a crash in a worst case scenario.h‘j�'ubeubaubj@)�r®'}r¯'(h‚X¯Ensure that the peripherals accessed by the remotecore are not being handled by the kernel. This can be accomplished by removing the corresponding nodes from the device tree. h‘j‰'hœjå#h�jChƒ}r°'(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r±'hÜ)�r²'}r³'(h‚X®Ensure that the peripherals accessed by the remotecore are not being handled by the kernel. This can be accomplished by removing the corresponding nodes from the device tree.r´'h‘j®'hœjå#h�hàhƒ}rµ'(h…]hŽ]h‡]h†]h�]uh¤M`h¦]r¶'h¯X®Ensure that the peripherals accessed by the remotecore are not being handled by the kernel. This can be accomplished by removing the corresponding nodes from the device tree.r·'…�r¸'}r¹'(h‚j´'h‘j²'ubaubaubeubhþ)�rº'}r»'(h‚Uh‘jÒ#hœjå#h�jhƒ}r¼'(h…]hŽ]h‡]h†]h�]uh¤Mdh¥hh¦]r½'j)�r¾'}r¿'(h‚UjKh‘jº'hœjå#h�h¤hƒ}rÀ'(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubeubh–)�rÁ'}rÂ'(h‚Uh‘hšhœhŒh�hžhƒ}rÃ'(h…]hŽ]h‡]h†]rÄ'Uipc-for-am65xxrÅ'ah�]rÆ'h+auh¤Kh¥hh¦]rÇ'(h¨)�rÈ'}rÉ'(h‚XIPC for AM65xxrÊ'h‘jÁ'hœhŒh�h¬hƒ}rË'(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]rÌ'h¯XIPC for AM65xxrÍ'…�rÎ'}rÏ'(h‚jÊ'h‘jÈ'ubaubh’)�rÐ'}rÑ'(h‚X IntroductionrÒ'h‘jÁ'hœhŠX?source/linux/Foundational_Components/IPC/IPC_for_AM65xx.rst.incrÓ'…�rÔ'}rÕ'bh�hÓhƒ}rÖ'(h†]r×'U introduction-linux-ipc-on-am65xxrØ'ah‡]h…]hŽ]h�]rÙ'hauh¤Nh¥hh¦]rÚ'h¯X IntroductionrÛ'…�rÜ'}rÝ'(h‚jÒ'h‘jÐ'ubaubhÜ)�rÞ'}rß'(h‚X³The AM65xx device has an MCU subsystem in addition to the Cortex-A53 cores. The MCU subsystem consists of 2 Cortex-R5F cores which can work as seperate cores or in lock-step mode.rà'h‘jÁ'hœjÔ'h�hàhƒ}rá'(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]râ'h¯X³The AM65xx device has an MCU subsystem in addition to the Cortex-A53 cores. The MCU subsystem consists of 2 Cortex-R5F cores which can work as seperate cores or in lock-step mode.rã'…�rä'}rå'(h‚jà'h‘jÞ'ubaubhÜ)�ræ'}rç'(h‚X±This article is geared toward AM65xx users that are running Linux on the Cortex A53 core. The goal is to help users understand how to establish communication with the R5F cores.rè'h‘jÁ'hœjÔ'h�hàhƒ}ré'(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]rê'h¯X±This article is geared toward AM65xx users that are running Linux on the Cortex A53 core. The goal is to help users understand how to establish communication with the R5F cores.rë'…�rì'}rí'(h‚jè'h‘jæ'ubaubhÜ)�rî'}rï'(h‚X¯There are many facets to this task: building, loading, debugging, memory sharing, etc. This article intends to take incremental steps toward understanding all of those pieces.rð'h‘jÁ'hœjÔ'h�hàhƒ}rñ'(h…]hŽ]h‡]h†]h�]uh¤K h¥hh¦]rò'h¯X¯There are many facets to this task: building, loading, debugging, memory sharing, etc. This article intends to take incremental steps toward understanding all of those pieces.ró'…�rô'}rõ'(h‚jð'h‘jî'ubaubh’)�rö'}r÷'(h‚X$Software Dependencies to Get Startedrø'h‘jÁ'hœjÔ'h�hÓhƒ}rù'(h†]rú'U/ipc-am65xx-software-dependencies-to-get-startedrû'ah‡]h…]hŽ]h�]rü'hOauh¤Nh¥hh¦]rý'h¯X$Software Dependencies to Get Startedrþ'…�rÿ'}r((h‚jø'h‘jö'ubaubhÜ)�r(}r((h‚X Prerequisitesr(h‘jÁ'hœjÔ'h�hàhƒ}r((h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]r(h¯X Prerequisitesr(…�r(}r((h‚j(h‘j(ubaubj)�r (}r ((h‚Uh‘jÁ'hœjÔ'h�j!hƒ}r ((j#X-h†]h‡]h…]hŽ]h�]uh¤Kh¥hh¦]r ((j@)�r (}r((h‚X�`Processor SDK Linux for AM65xx `__ (Version 5.1 or newer needed)h‘j (hœjÔ'h�jChƒ}r((h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r(hÜ)�r(}r((h‚X�`Processor SDK Linux for AM65xx `__ (Version 5.1 or newer needed)h‘j (hœjÔ'h�hàhƒ}r((h…]hŽ]h‡]h†]h�]uh¤Kh¦]r((j))�r(}r((h‚Xr`Processor SDK Linux for AM65xx `__hƒ}r((UnameXProcessor SDK Linux for AM65xxj-XMhttp://software-dl.ti.com/processor-sdk-linux/esd/AM65X/latest/index_FDS.htmlh†]h‡]h…]hŽ]h�]uh‘j(h¦]r(h¯XProcessor SDK Linux for AM65xxr(…�r(}r((h‚Uh‘j(ubah�j2ubh¯X (Version 5.1 or newer needed)r(…�r(}r((h‚X (Version 5.1 or newer needed)h‘j(ubeubaubj@)�r(}r ((h‚Xp`Processor SDK RTOS for AM65xx `__h‘j (hœjÔ'h�jChƒ}r!((h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r"(hÜ)�r#(}r$((h‚Xp`Processor SDK RTOS for AM65xx `__r%(h‘j(hœjÔ'h�hàhƒ}r&((h…]hŽ]h‡]h†]h�]uh¤Kh¦]r'(j))�r((}r)((h‚j%(hƒ}r*((UnameXProcessor SDK RTOS for AM65xxj-XLhttp://software-dl.ti.com/processor-sdk-rtos/esd/AM65X/latest/index_FDS.htmlh†]h‡]h…]hŽ]h�]uh‘j#(h¦]r+(h¯XProcessor SDK RTOS for AM65xxr,(…�r-(}r.((h‚Uh‘j((ubah�j2ubaubaubj@)�r/(}r0((h‚Xˆ`Code Composer Studio `__ (choose version as specified on Proc SDK download page) h‘j (hœjÔ'h�jChƒ}r1((h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r2(hÜ)�r3(}r4((h‚X‡`Code Composer Studio `__ (choose version as specified on Proc SDK download page)h‘j/(hœjÔ'h�hàhƒ}r5((h…]hŽ]h‡]h†]h�]uh¤Kh¦]r6((j))�r7(}r8((h‚XO`Code Composer Studio `__hƒ}r9((UnameXCode Composer Studioj-X4http://processors.wiki.ti.com/index.php/Download_CCSh†]h‡]h…]hŽ]h�]uh‘j3(h¦]r:(h¯XCode Composer Studior;(…�r<(}r=((h‚Uh‘j7(ubah�j2ubh¯X8 (choose version as specified on Proc SDK download page)r>(…�r?(}r@((h‚X8 (choose version as specified on Proc SDK download page)h‘j3(ubeubaubeubj)�rA(}rB((h‚X[Please be sure that you have the same version number for both Processor SDK RTOS and Linux.h‘jÁ'hœjÔ'h�jhƒ}rC((h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rD(hÜ)�rE(}rF((h‚X[Please be sure that you have the same version number for both Processor SDK RTOS and Linux.rG(h‘jA(hœjÔ'h�hàhƒ}rH((h…]hŽ]h‡]h†]h�]uh¤Kh¦]rI(h¯X[Please be sure that you have the same version number for both Processor SDK RTOS and Linux.rJ(…�rK(}rL((h‚jG(h‘jE(ubaubaubhÜ)�rM(}rN((h‚XdFor reference within the context of this page, the Linux SDK is installed at the following location:rO(h‘jÁ'hœjÔ'h�hàhƒ}rP((h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]rQ(h¯XdFor reference within the context of this page, the Linux SDK is installed at the following location:rR(…�rS(}rT((h‚jO(h‘jM(ubaubj¡)�rU(}rV((h‚X/mnt/data/user/ti-processor-sdk-linux-am65xx-evm-xx.xx.xx.xx ├── bin ├── board-support ├── docs ├── example-applications ├── filesystem ├── ipc-build.txt ├── linux-devkit ├── Makefile ├── Rules.make └── setup.shh‘jÁ'hœjÔ'h�j¤hƒ}rW((hÊhËh†]h‡]h…]hŽ]h�]uh¤M? h¥hh¦]rX(h¯X/mnt/data/user/ti-processor-sdk-linux-am65xx-evm-xx.xx.xx.xx ├── bin ├── board-support ├── docs ├── example-applications ├── filesystem ├── ipc-build.txt ├── linux-devkit ├── Makefile ├── Rules.make └── setup.shrY(…�rZ(}r[((h‚Uh‘jU(ubaubhÜ)�r\(}r]((h‚XThe RTOS SDK is installed at:r^(h‘jÁ'hœjÔ'h�hàhƒ}r_((h…]hŽ]h‡]h†]h�]uh¤K0h¥hh¦]r`(h¯XThe RTOS SDK is installed at:ra(…�rb(}rc((h‚j^(h‘j\(ubaubj¡)�rd(}re((h‚X¿/mnt/data/user/my_custom_install_sdk_rtos_am65xx_xx.xx ├── bios_6_xx_xx_xx ├── cg_xml ├── ctoolslib_x_x_x_x ├── framework_components_x_xx_xx_xx ├── gcc-linaro--x86_64_aarch64-elf ├── ipc_3_xx_xx_xx ├── ndk_3_xx_xx_xx ├── ns_2_xx_xx_xx ├── pdk_am65xx_x_x_x ├── processor_sdk_rtos_am65xx_x_xx_xx_xx ├── uia_2_xx_xx_xx ├── xdais_7_xx_xx_xx ├── xdctools_3_xx_xx_xxh‘jÁ'hœjÔ'h�j¤hƒ}rf((hÊhËh†]h‡]h…]hŽ]h�]uh¤MO h¥hh¦]rg(h¯X¿/mnt/data/user/my_custom_install_sdk_rtos_am65xx_xx.xx ├── bios_6_xx_xx_xx ├── cg_xml ├── ctoolslib_x_x_x_x ├── framework_components_x_xx_xx_xx ├── gcc-linaro--x86_64_aarch64-elf ├── ipc_3_xx_xx_xx ├── ndk_3_xx_xx_xx ├── ns_2_xx_xx_xx ├── pdk_am65xx_x_x_x ├── processor_sdk_rtos_am65xx_x_xx_xx_xx ├── uia_2_xx_xx_xx ├── xdais_7_xx_xx_xx ├── xdctools_3_xx_xx_xxrh(…�ri(}rj((h‚Uh‘jd(ubaubhþ)�rk(}rl((h‚Uh‘jÁ'hœjÔ'h�jhƒ}rm((h…]hŽ]h‡]h†]h�]uh¤KCh¥hh¦]rn(j)�ro(}rp((h‚UjKh‘jk(hœjÔ'h�h¤hƒ}rq((h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubh’)�rr(}rs((h‚X/Typical Boot Flow on AM65xx for ARM Linux usersrt(h‘jÁ'hœjÔ'h�hÓhƒ}ru((h†]rv(U/typical-boot-flow-on-am65xx-for-arm-linux-usersrw(ah‡]h…]hŽ]h�]rx(hvauh¤Nh¥hh¦]ry(h¯X/Typical Boot Flow on AM65xx for ARM Linux usersrz(…�r{(}r|((h‚jt(h‘jr(ubaubhÜ)�r}(}r~((h‚XAM65xx SOC's have multiple processor cores - Cortex A53, ARM R5F cores. The A53 typically runs a HLOS like Linux/Android and the remote cores (R5Fs) run TI-RTOS. In the normal operation, boot loader(U-Boot/SPL) boots and loads the A53 with the HLOS. The A53 boots the R5 cores.r(h‘jÁ'hœjÔ'h�hàhƒ}r€((h…]hŽ]h‡]h†]h�]uh¤KHh¥hh¦]r�(h¯XAM65xx SOC's have multiple processor cores - Cortex A53, ARM R5F cores. The A53 typically runs a HLOS like Linux/Android and the remote cores (R5Fs) run TI-RTOS. In the normal operation, boot loader(U-Boot/SPL) boots and loads the A53 with the HLOS. The A53 boots the R5 cores.r‚(…�rƒ(}r„((h‚j(h‘j}(ubaubjr)�r…(}r†((h‚X).. Image:: ../images/Normal-boot-a53.png h‘jÁ'hœjÔ'h�jyhƒ}r‡((UuriX#linux/../images/Normal-boot-a53.pngrˆ(h†]h‡]h…]hŽ]jw}r‰(U*jˆ(sh�]uh¤KMh¥hh¦]ubhÜ)�rŠ(}r‹((h‚X–In this sequence, the interval between the Power on Reset and the remote cores (i.e. the R5Fs) executing is dependent on the HLOS initialization time.rŒ(h‘jÁ'hœjÔ'h�hàhƒ}r�((h…]hŽ]h‡]h†]h�]uh¤KNh¥hh¦]rŽ(h¯X–In this sequence, the interval between the Power on Reset and the remote cores (i.e. the R5Fs) executing is dependent on the HLOS initialization time.r�(…�r�(}r‘((h‚jŒ(h‘jŠ(ubaubhþ)�r’(}r“((h‚Uh‘jÁ'hœjÔ'h�jhƒ}r”((h…]hŽ]h‡]h†]h�]uh¤KRh¥hh¦]r•(j)�r–(}r—((h‚UjKh‘j’(hœjÔ'h�h¤hƒ}r˜((h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubh’)�r™(}rš((h‚X'Getting Started with IPC Linux Examplesr›(h‘jÁ'hœjÔ'h�hÓhƒ}rœ((h†]r�(U2ipc-am65xx-getting-started-with-ipc-linux-examplesrž(ah‡]h…]hŽ]h�]rŸ(h6auh¤Nh¥hh¦]r (h¯X'Getting Started with IPC Linux Examplesr¡(…�r¢(}r£((h‚j›(h‘j™(ubaubhÜ)�r¤(}r¥((h‚X—The figure below illustrates how remoteproc/rpmsg driver from ARM Linux kernel communicates with IPC driver on slave processor (e.g. R5F) running RTOS.r¦(h‘jÁ'hœjÔ'h�hàhƒ}r§((h…]hŽ]h‡]h†]h�]uh¤KWh¥hh¦]r¨(h¯X—The figure below illustrates how remoteproc/rpmsg driver from ARM Linux kernel communicates with IPC driver on slave processor (e.g. R5F) running RTOS.r©(…�rª(}r«((h‚j¦(h‘j¤(ubaubjr)�r¬(}r­((h‚X2.. Image:: ../images/LinuxIPC_with_RTOS_Slave.png h‘jÁ'hœjÔ'h�jyhƒ}r®((UuriX,linux/../images/LinuxIPC_with_RTOS_Slave.pngr¯(h†]h‡]h…]hŽ]jw}r°(U*j¯(sh�]uh¤K[h¥hh¦]ubhÜ)�r±(}r²((h‚XíIn order to setup IPC on slave cores, we provide some pre-built examples in IPC package that can be run from ARM Linux. The subsequent sections describe how to build and run this examples and use that as a starting point for this effort.r³(h‘jÁ'hœjÔ'h�hàhƒ}r´((h…]hŽ]h‡]h†]h�]uh¤K\h¥hh¦]rµ(h¯XíIn order to setup IPC on slave cores, we provide some pre-built examples in IPC package that can be run from ARM Linux. The subsequent sections describe how to build and run this examples and use that as a starting point for this effort.r¶(…�r·(}r¸((h‚j³(h‘j±(ubaubh’)�r¹(}rº((h‚X!Building the Bundled IPC Examplesr»(h‘jÁ'hœjÔ'h�hÓhƒ}r¼((h†]r½(U,ipc-am65xx-building-the-bundled-ipc-examplesr¾(ah‡]h…]hŽ]h�]r¿(hUauh¤Nh¥hh¦]rÀ(h¯X!Building the Bundled IPC ExamplesrÁ(…�rÂ(}rÃ((h‚j»(h‘j¹(ubaubhÜ)�rÄ(}rÅ((h‚XàThe instructions to build IPC examples found under ipc\_3\_xx\_xx\_xx/examples/AM65XX\_linux\_elf have been provided in the `Processor SDK IPC Quick Start Guide `__.h‘jÁ'hœjÔ'h�hàhƒ}rÆ((h…]hŽ]h‡]h†]h�]uh¤Kdh¥hh¦]rÇ((h¯XvThe instructions to build IPC examples found under ipc_3_xx_xx_xx/examples/AM65XX_linux_elf have been provided in the rÈ(…�rÉ(}rÊ((h‚X|The instructions to build IPC examples found under ipc\_3\_xx\_xx\_xx/examples/AM65XX\_linux\_elf have been provided in the h‘jÄ(ubj))�rË(}rÌ((h‚Xc`Processor SDK IPC Quick Start Guide `__hƒ}rÍ((UnameX#Processor SDK IPC Quick Start Guidej-X9Foundational_Components_IPC.html#build-ipc-linux-examplesh†]h‡]h…]hŽ]h�]uh‘jÄ(h¦]rÎ(h¯X#Processor SDK IPC Quick Start GuiderÏ(…�rÐ(}rÑ((h‚Uh‘jË(ubah�j2ubh¯X.…�rÒ(}rÓ((h‚X.h‘jÄ(ubeubhÜ)�rÔ(}rÕ((h‚XìLet's focus on one example in particular, ex02\_messageq, which is located at **/ipc\_3\_xx\_xx\_xx/examples/AM65XX\_linux\_elf/ex02\_messageq**. Here are the key files that you should see after a successful build:h‘jÁ'hœjÔ'h�hàhƒ}rÖ((h…]hŽ]h‡]h†]h�]uh¤Khh¥hh¦]r×((h¯XMLet's focus on one example in particular, ex02_messageq, which is located at rØ(…�rÙ(}rÚ((h‚XNLet's focus on one example in particular, ex02\_messageq, which is located at h‘jÔ(ubj¯)�rÛ(}rÜ((h‚XX**/ipc\_3\_xx\_xx\_xx/examples/AM65XX\_linux\_elf/ex02\_messageq**hƒ}rÝ((h…]hŽ]h‡]h†]h�]uh‘jÔ(h¦]rÞ(h¯XM/ipc_3_xx_xx_xx/examples/AM65XX_linux_elf/ex02_messageqrß(…�rà(}rá((h‚Uh‘jÛ(ubah�j·ubh¯XF. Here are the key files that you should see after a successful build:râ(…�rã(}rä((h‚XF. Here are the key files that you should see after a successful build:h‘jÔ(ubeubj¡)�rå(}ræ((h‚X.├── r5f-0 │   └── bin │      ├── debug │      │   └── server_r5f-0.xer5f │      └── release │      │   └── server_r5f-0.xer5f ├── r5f-1 │   └── bin │      ├── debug │      │   └── server_r5f-1.xer5f │      └── release │      │   └── server_r5f-1.xer5f ├── host │      ├── debug │      │   └── app_host │      └── release │      └── app_hosth‘jÁ'hœjÔ'h�j¤hƒ}rç((hÊhËh†]h‡]h…]hŽ]h�]uh¤MŠ h¥hh¦]rè(h¯X.├── r5f-0 │   └── bin │      ├── debug │      │   └── server_r5f-0.xer5f │      └── release │      │   └── server_r5f-0.xer5f ├── r5f-1 │   └── bin │      ├── debug │      │   └── server_r5f-1.xer5f │      └── release │      │   └── server_r5f-1.xer5f ├── host │      ├── debug │      │   └── app_host │      └── release │      └── app_hostré(…�rê(}rë((h‚Uh‘jå(ubaubhþ)�rì(}rí((h‚Uh‘jÁ'hœjÔ'h�jhƒ}rî((h…]hŽ]h‡]h†]h�]uh¤K‚h¥hh¦]rï(j)�rð(}rñ((h‚UjKh‘jì(hœjÔ'h�h¤hƒ}rò((h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubh’)�ró(}rô((h‚X Running the Bundled IPC Examplesrõ(h‘jÁ'hœjÔ'h�hÓhƒ}rö((h†]r÷(U+ipc-am65xx-running-the-bundled-ipc-examplesrø(ah‡]h…]hŽ]h�]rù(h5auh¤Nh¥hh¦]rú(h¯X Running the Bundled IPC Examplesrû(…�rü(}rý((h‚jõ(h‘jó(ubaubhÜ)�rþ(}rÿ((h‚X;On the target, let's create a directory called ipc-starter:r)h‘jÁ'hœjÔ'h�hàhƒ}r)(h…]hŽ]h‡]h†]h�]uh¤K‡h¥hh¦]r)h¯X;On the target, let's create a directory called ipc-starter:r)…�r)}r)(h‚j)h‘jþ(ubaubj¡)�r)}r)(h‚X`root@am65xx-evm:~# mkdir -p /home/root/ipc-starter root@am65xx-evm:~# cd /home/root/ipc-starter/h‘jÁ'hœjÔ'h�j¤hƒ}r)(hÊhËh†]h‡]h…]hŽ]h�]uh¤M¦ h¥hh¦]r )h¯X`root@am65xx-evm:~# mkdir -p /home/root/ipc-starter root@am65xx-evm:~# cd /home/root/ipc-starter/r )…�r )}r )(h‚Uh‘j)ubaubhÜ)�r )}r)(h‚XáYou will need to copy the ex02\_messageq directory of your host PC to that directory on the target (through SD card, NFS export, SCP, etc.). You can copy the entire directory, though we're primarily interested in these files:h‘jÁ'hœjÔ'h�hàhƒ}r)(h…]hŽ]h‡]h†]h�]uh¤KŽh¥hh¦]r)h¯XàYou will need to copy the ex02_messageq directory of your host PC to that directory on the target (through SD card, NFS export, SCP, etc.). You can copy the entire directory, though we're primarily interested in these files:r)…�r)}r)(h‚XáYou will need to copy the ex02\_messageq directory of your host PC to that directory on the target (through SD card, NFS export, SCP, etc.). You can copy the entire directory, though we're primarily interested in these files:h‘j )ubaubj)�r)}r)(h‚Uh‘jÁ'hœjÔ'h�j!hƒ}r)(j#X-h†]h‡]h…]hŽ]h�]uh¤K“h¥hh¦]r)(j@)�r)}r)(h‚X"r5f-0/bin/debug/server_r5f-0.xer5fr)h‘j)hœjÔ'h�jChƒ}r)(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r)hÜ)�r)}r)(h‚j)h‘j)hœjÔ'h�hàhƒ}r)(h…]hŽ]h‡]h†]h�]uh¤K“h¦]r )h¯X"r5f-0/bin/debug/server_r5f-0.xer5fr!)…�r")}r#)(h‚j)h‘j)ubaubaubj@)�r$)}r%)(h‚X"r5f-1/bin/debug/server_r5f-1.xer5fr&)h‘j)hœjÔ'h�jChƒ}r')(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r()hÜ)�r))}r*)(h‚j&)h‘j$)hœjÔ'h�hàhƒ}r+)(h…]hŽ]h‡]h†]h�]uh¤K”h¦]r,)h¯X"r5f-1/bin/debug/server_r5f-1.xer5fr-)…�r.)}r/)(h‚j&)h‘j))ubaubaubj@)�r0)}r1)(h‚Xhost/bin/debug/app\_host h‘j)hœjÔ'h�jChƒ}r2)(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r3)hÜ)�r4)}r5)(h‚Xhost/bin/debug/app\_hosth‘j0)hœjÔ'h�hàhƒ}r6)(h…]hŽ]h‡]h†]h�]uh¤K•h¦]r7)h¯Xhost/bin/debug/app_hostr8)…�r9)}r:)(h‚Xhost/bin/debug/app\_hosth‘j4)ubaubaubeubhÜ)�r;)}r<)(h‚X{The remoteproc driver is hard-coded to look for specific files when loading the R5F cores. Here are the files it looks for:r=)h‘jÁ'hœjÔ'h�hàhƒ}r>)(h…]hŽ]h‡]h†]h�]uh¤K—h¥hh¦]r?)h¯X{The remoteproc driver is hard-coded to look for specific files when loading the R5F cores. Here are the files it looks for:r@)…�rA)}rB)(h‚j=)h‘j;)ubaubj)�rC)}rD)(h‚Uh‘jÁ'hœjÔ'h�j!hƒ}rE)(j#X-h†]h‡]h…]hŽ]h�]uh¤Kšh¥hh¦]rF)j@)�rG)}rH)(h‚X"/lib/firmware/am65x-mcu-r5f0_0-fw h‘jC)hœjÔ'h�jChƒ}rI)(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rJ)hÜ)�rK)}rL)(h‚X!/lib/firmware/am65x-mcu-r5f0_0-fwrM)h‘jG)hœjÔ'h�hàhƒ}rN)(h…]hŽ]h‡]h†]h�]uh¤Kšh¦]rO)h¯X!/lib/firmware/am65x-mcu-r5f0_0-fwrP)…�rQ)}rR)(h‚jM)h‘jK)ubaubaubaubhÜ)�rS)}rT)(h‚X{These are generally a soft link to the intended executable. So for example, let's update the r5f0 executable on the target:rU)h‘jÁ'hœjÔ'h�hàhƒ}rV)(h…]hŽ]h‡]h†]h�]uh¤Kœh¥hh¦]rW)h¯X{These are generally a soft link to the intended executable. So for example, let's update the r5f0 executable on the target:rX)…�rY)}rZ)(h‚jU)h‘jS)ubaubj¡)�r[)}r\)(h‚X¦root@am65xx-evm:~# cd /lib/firmware/ root@am65xx-evm:/lib/firmware# ln -sf /home/root/ipc-starter/ex02_messageq/r5f-0/bin/debug/server_r5f-0.xer5f am65x-mcu-r5f0_0-fwh‘jÁ'hœjÔ'h�j¤hƒ}r])(hÊhËh†]h‡]h…]hŽ]h�]uh¤M¼ h¥hh¦]r^)h¯X¦root@am65xx-evm:~# cd /lib/firmware/ root@am65xx-evm:/lib/firmware# ln -sf /home/root/ipc-starter/ex02_messageq/r5f-0/bin/debug/server_r5f-0.xer5f am65x-mcu-r5f0_0-fwr_)…�r`)}ra)(h‚Uh‘j[)ubaubhÜ)�rb)}rc)(h‚XHTo reload R5F0 with this new executable, we perform the following steps:rd)h‘jÁ'hœjÔ'h�hàhƒ}re)(h…]hŽ]h‡]h†]h�]uh¤K¤h¥hh¦]rf)h¯XHTo reload R5F0 with this new executable, we perform the following steps:rg)…�rh)}ri)(h‚jd)h‘jb)ubaubhÜ)�rj)}rk)(h‚XMFirst identify the remotproc node associated with R5F0. This can be done by::rl)h‘jÁ'hœjÔ'h�hàhƒ}rm)(h…]hŽ]h‡]h†]h�]uh¤K¦h¥hh¦]rn)h¯XLFirst identify the remotproc node associated with R5F0. This can be done by:ro)…�rp)}rq)(h‚XLFirst identify the remotproc node associated with R5F0. This can be done by:h‘jj)ubaubj¡)�rr)}rs)(h‚XJroot@am65xx-evm:/lib/firmware# grep -Isr r5f /sys/kernel/debug/remoteproc/h‘jÁ'hœjÔ'h�j¤hƒ}rt)(hÊhËh†]h‡]h…]hŽ]h�]uh¤Mà h¥hh¦]ru)h¯XJroot@am65xx-evm:/lib/firmware# grep -Isr r5f /sys/kernel/debug/remoteproc/rv)…�rw)}rx)(h‚Uh‘jr)ubaubhÜ)�ry)}rz)(h‚XThis will display for example::r{)h‘jÁ'hœjÔ'h�hàhƒ}r|)(h…]hŽ]h‡]h†]h�]uh¤Kªh¥hh¦]r})h¯XThis will display for example:r~)…�r)}r€)(h‚XThis will display for example:h‘jy)ubaubj¡)�r�)}r‚)(h‚X„/sys/kernel/debug/remoteproc/remoteproc8/resource_table: Name trace:r5f0 /sys/kernel/debug/remoteproc/remoteproc8/name:41000000.r5fh‘jÁ'hœjÔ'h�j¤hƒ}rƒ)(hÊhËh†]h‡]h…]hŽ]h�]uh¤MÇ h¥hh¦]r„)h¯X„/sys/kernel/debug/remoteproc/remoteproc8/resource_table: Name trace:r5f0 /sys/kernel/debug/remoteproc/remoteproc8/name:41000000.r5fr…)…�r†)}r‡)(h‚Uh‘j�)ubaubhÜ)�rˆ)}r‰)(h‚Xnthen remoteproc8 is the node for the r5f core. ( Note the remoteprocx can change to for example remoteproc4)::rŠ)h‘jÁ'hœjÔ'h�hàhƒ}r‹)(h…]hŽ]h‡]h†]h�]uh¤K¯h¥hh¦]rŒ)h¯Xmthen remoteproc8 is the node for the r5f core. ( Note the remoteprocx can change to for example remoteproc4):r�)…�rŽ)}r�)(h‚Xmthen remoteproc8 is the node for the r5f core. ( Note the remoteprocx can change to for example remoteproc4):h‘jˆ)ubaubj¡)�r�)}r‘)(h‚Xöroot@am65xx-evm:~# echo stop > /sys/class/remoteproc/remoteproc4/state [ 6663.636529] remoteproc remoteproc4: stopped remote processor 41000000.r5f root@am65xx-evm:~# echo start > /sys/class/remoteproc/remoteproc4/state [ 6767.681165] remoteproc remoteproc4: powering up 41000000.r5f [ 6767.803683] remoteproc remoteproc4: Booting fw image am65x-mcu-r5f0_0-fw, size 3590160 [ 6767.812558] platform 41000000.r5f: booting R5F core using boot addr = 0x0 [ 6767.821345] virtio_rpmsg_bus virtio0: rpmsg host is online [ 6767.827147] remoteproc remoteproc4: registered virtio0 (type 7) [ 6767.834776] remoteproc remoteproc4: remote processor 41000000.r5f is now up root@am65xx-evm:~# [ 6767.848838] virtio_rpmsg_bus virtio0: creating channel rpmsg-proto addr 0x3dh‘jÁ'hœjÔ'h�j¤hƒ}r’)(hÊhËh†]h‡]h…]hŽ]h�]uh¤MÌ h¥hh¦]r“)h¯Xöroot@am65xx-evm:~# echo stop > /sys/class/remoteproc/remoteproc4/state [ 6663.636529] remoteproc remoteproc4: stopped remote processor 41000000.r5f root@am65xx-evm:~# echo start > /sys/class/remoteproc/remoteproc4/state [ 6767.681165] remoteproc remoteproc4: powering up 41000000.r5f [ 6767.803683] remoteproc remoteproc4: Booting fw image am65x-mcu-r5f0_0-fw, size 3590160 [ 6767.812558] platform 41000000.r5f: booting R5F core using boot addr = 0x0 [ 6767.821345] virtio_rpmsg_bus virtio0: rpmsg host is online [ 6767.827147] remoteproc remoteproc4: registered virtio0 (type 7) [ 6767.834776] remoteproc remoteproc4: remote processor 41000000.r5f is now up root@am65xx-evm:~# [ 6767.848838] virtio_rpmsg_bus virtio0: creating channel rpmsg-proto addr 0x3dr”)…�r•)}r–)(h‚Uh‘j�)ubaubhÜ)�r—)}r˜)(h‚X More info related to loading firmware to the various cores can be found `here `__.h‘jÁ'hœjÔ'h�hàhƒ}r™)(h…]hŽ]h‡]h†]h�]uh¤K½h¥hh¦]rš)(h¯XHMore info related to loading firmware to the various cores can be found r›)…�rœ)}r�)(h‚XHMore info related to loading firmware to the various cores can be found h‘j—)ubj))�rž)}rŸ)(h‚XW`here `__hƒ}r )(UnameXherej-XLFoundational_Components_Multimedia_IVAHD.html#firmware-loading-and-unloadingh†]h‡]h…]hŽ]h�]uh‘j—)h¦]r¡)h¯Xherer¢)…�r£)}r¤)(h‚Uh‘jž)ubah�j2ubh¯X.…�r¥)}r¦)(h‚X.h‘j—)ubeubhÜ)�r§)}r¨)(h‚X,Finally, we can run the example on R5 core::r©)h‘jÁ'hœjÔ'h�hàhƒ}rª)(h…]hŽ]h‡]h†]h�]uh¤KÀh¥hh¦]r«)h¯X+Finally, we can run the example on R5 core:r¬)…�r­)}r®)(h‚X+Finally, we can run the example on R5 core:h‘j§)ubaubj¡)�r¯)}r°)(h‚X³root@am65xx-evm:~# ./app_host R5F-0 --> main: --> Main_main: --> App_create: App_create: Host is ready <-- App_create: --> App_exec: App_exec: sending message 1 App_exec: sending message 2 App_exec: sending message 3 App_exec: message received, sending message 4 App_exec: message received, sending message 5 App_exec: message received, sending message 6 App_exec: message received, sending message 7 App_exec: message received, sending message 8 App_exec: message received, sending message 9 App_exec: message received, sending message 10 App_exec: message received, sending message 11 App_exec: message received, sending message 12 App_exec: message received, sending message 13 App_exec: message received, sending message 14 App_exec: message received, sending message 15 App_exec: message received App_exec: message received App_exec: message received <-- App_exec: 0 --> App_delete: <-- App_delete: <-- Main_main: <-- main: root@am65xx-evm:~#h‘jÁ'hœjÔ'h�j¤hƒ}r±)(hÊhËh†]h‡]h…]hŽ]h�]uh¤MÝ h¥hh¦]r²)h¯X³root@am65xx-evm:~# ./app_host R5F-0 --> main: --> Main_main: --> App_create: App_create: Host is ready <-- App_create: --> App_exec: App_exec: sending message 1 App_exec: sending message 2 App_exec: sending message 3 App_exec: message received, sending message 4 App_exec: message received, sending message 5 App_exec: message received, sending message 6 App_exec: message received, sending message 7 App_exec: message received, sending message 8 App_exec: message received, sending message 9 App_exec: message received, sending message 10 App_exec: message received, sending message 11 App_exec: message received, sending message 12 App_exec: message received, sending message 13 App_exec: message received, sending message 14 App_exec: message received, sending message 15 App_exec: message received App_exec: message received App_exec: message received <-- App_exec: 0 --> App_delete: <-- App_delete: <-- Main_main: <-- main: root@am65xx-evm:~#r³)…�r´)}rµ)(h‚Uh‘j¯)ubaubh’)�r¶)}r·)(h‚XUnderstanding the Memory Mapr¸)h‘jÁ'hœjÔ'h�hÓhƒ}r¹)(h†]rº)U'ipc-am65xx-understanding-the-memory-mapr»)ah‡]h…]hŽ]h�]r¼)htauh¤Nh¥hh¦]r½)h¯XUnderstanding the Memory Mapr¾)…�r¿)}rÀ)(h‚j¸)h‘j¶)ubaubh’)�rÁ)}rÂ)(h‚XOverall Linux Memory MaprÃ)h‘jÁ'hœjÔ'h�hÓhƒ}rÄ)(h†]rÅ)U#ipc-am65xx-overall-linux-memory-maprÆ)ah‡]h…]hŽ]h�]rÇ)hsauh¤Nh¥hh¦]rÈ)h¯XOverall Linux Memory MaprÉ)…�rÊ)}rË)(h‚jÃ)h‘jÁ)ubaubj¡)�rÌ)}rÍ)(h‚X=root@am65xx-evm:~# cat /proc/iomem [snip...] 80000000-9affffff : System RAM 80080000-80b2ffff : Kernel code 80bb0000-80d9ffff : Kernel data 9c800000-9e7fffff : System RAM a0000000-ffffffff : System RAM 400000000-4ffffffff : /soc0/fss@47000000/ospi@47040000 880000000-8ffffffff : System RAMh‘jÁ'hœjÔ'h�j¤hƒ}rÎ)(hÊhËh†]h‡]h…]hŽ]h�]uh¤M h¥hh¦]rÏ)h¯X=root@am65xx-evm:~# cat /proc/iomem [snip...] 80000000-9affffff : System RAM 80080000-80b2ffff : Kernel code 80bb0000-80d9ffff : Kernel data 9c800000-9e7fffff : System RAM a0000000-ffffffff : System RAM 400000000-4ffffffff : /soc0/fss@47000000/ospi@47040000 880000000-8ffffffff : System RAMrÐ)…�rÑ)}rÒ)(h‚Uh‘jÌ)ubaubhþ)�rÓ)}rÔ)(h‚Uh‘jÁ'hœjÔ'h�jhƒ}rÕ)(h…]hŽ]h‡]h†]h�]uh¤Kõh¥hh¦]rÖ)j)�r×)}rØ)(h‚UjKh‘jÓ)hœjÔ'h�h¤hƒ}rÙ)(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubh’)�rÚ)}rÛ)(h‚XDMA memory CarveoutsrÜ)h‘jÁ'hœjÔ'h�hÓhƒ}rÝ)(h†]rÞ)Udma-memory-carveoutsrß)ah‡]h…]hŽ]h�]rà)hMauh¤Nh¥hh¦]rá)h¯XDMA memory Carveoutsrâ)…�rã)}rä)(h‚jÜ)h‘jÚ)ubaubj¡)�rå)}ræ)(h‚Xçroot@am65xx-evm:~# dmesg | grep "Reserved memory" [ 0.000000] Reserved memory: created DMA memory pool at 0x000000009b000000, size 16 MiB [ 0.000000] Reserved memory: created DMA memory pool at 0x000000009c000000, size 8 MiBh‘jÁ'hœjÔ'h�j¤hƒ}rç)(hÊhËh†]h‡]h…]hŽ]h�]uh¤M h¥hh¦]rè)h¯Xçroot@am65xx-evm:~# dmesg | grep "Reserved memory" [ 0.000000] Reserved memory: created DMA memory pool at 0x000000009b000000, size 16 MiB [ 0.000000] Reserved memory: created DMA memory pool at 0x000000009c000000, size 8 MiBré)…�rê)}rë)(h‚Uh‘jå)ubaubhÜ)�rì)}rí)(h‚XPFrom the output above, we can derive the location and size of each DMA carveout:rî)h‘jÁ'hœjÔ'h�hàhƒ}rï)(h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]rð)h¯XPFrom the output above, we can derive the location and size of each DMA carveout:rñ)…�rò)}ró)(h‚jî)h‘jì)ubaubjB)�rô)}rõ)(h‚Uh‘jÁ'hœjÔ'h�jEhƒ}rö)(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r÷)jH)�rø)}rù)(h‚Uhƒ}rú)(h†]h‡]h…]hŽ]h�]UcolsKuh‘jô)h¦]rû)(jM)�rü)}rý)(h‚Uhƒ}rþ)(h†]h‡]h…]hŽ]h�]UcolwidthKuh‘jø)h¦]h�jQubjM)�rÿ)}r*(h‚Uhƒ}r*(h†]h‡]h…]hŽ]h�]UcolwidthKuh‘jø)h¦]h�jQubjM)�r*}r*(h‚Uhƒ}r*(h†]h‡]h…]hŽ]h�]UcolwidthK uh‘jø)h¦]h�jQubjX)�r*}r*(h‚Uhƒ}r*(h…]hŽ]h‡]h†]h�]uh‘jø)h¦]r*j])�r *}r *(h‚Uhƒ}r *(h…]hŽ]h‡]h†]h�]uh‘j*h¦]r *(jb)�r *}r*(h‚Uhƒ}r*(h…]hŽ]h‡]h†]h�]uh‘j *h¦]r*hÜ)�r*}r*(h‚XMemory Sectionr*h‘j *hœjÔ'h�hàhƒ}r*(h…]hŽ]h‡]h†]h�]uh¤Mh¦]r*h¯XMemory Sectionr*…�r*}r*(h‚j*h‘j*ubaubah�joubjb)�r*}r*(h‚Uhƒ}r*(h…]hŽ]h‡]h†]h�]uh‘j *h¦]r*hÜ)�r*}r*(h‚XPhysical Addressr*h‘j*hœjÔ'h�hàhƒ}r *(h…]hŽ]h‡]h†]h�]uh¤Mh¦]r!*h¯XPhysical Addressr"*…�r#*}r$*(h‚j*h‘j*ubaubah�joubjb)�r%*}r&*(h‚Uhƒ}r'*(h…]hŽ]h‡]h†]h�]uh‘j *h¦]r(*hÜ)�r)*}r**(h‚XSizer+*h‘j%*hœjÔ'h�hàhƒ}r,*(h…]hŽ]h‡]h†]h�]uh¤Mh¦]r-*h¯XSizer.*…�r/*}r0*(h‚j+*h‘j)*ubaubah�joubeh�jˆubah�j‰ubjŠ)�r1*}r2*(h‚Uhƒ}r3*(h…]hŽ]h‡]h†]h�]uh‘jø)h¦]r4*(j])�r5*}r6*(h‚Uhƒ}r7*(h…]hŽ]h‡]h†]h�]uh‘j1*h¦]r8*(jb)�r9*}r:*(h‚Uhƒ}r;*(h…]hŽ]h‡]h†]h�]uh‘j5*h¦]r<*hÜ)�r=*}r>*(h‚X R5F-0 Poolr?*h‘j9*hœjÔ'h�hàhƒ}r@*(h…]hŽ]h‡]h†]h�]uh¤Mh¦]rA*h¯X R5F-0 PoolrB*…�rC*}rD*(h‚j?*h‘j=*ubaubah�joubjb)�rE*}rF*(h‚Uhƒ}rG*(h…]hŽ]h‡]h†]h�]uh‘j5*h¦]rH*hÜ)�rI*}rJ*(h‚X 0x9c000000rK*h‘jE*hœjÔ'h�hàhƒ}rL*(h…]hŽ]h‡]h†]h�]uh¤Mh¦]rM*h¯X 0x9c000000rN*…�rO*}rP*(h‚jK*h‘jI*ubaubah�joubjb)�rQ*}rR*(h‚Uhƒ}rS*(h…]hŽ]h‡]h†]h�]uh‘j5*h¦]rT*hÜ)�rU*}rV*(h‚X8 MBrW*h‘jQ*hœjÔ'h�hàhƒ}rX*(h…]hŽ]h‡]h†]h�]uh¤Mh¦]rY*h¯X8 MBrZ*…�r[*}r\*(h‚jW*h‘jU*ubaubah�joubeh�jˆubj])�r]*}r^*(h‚Uhƒ}r_*(h…]hŽ]h‡]h†]h�]uh‘j1*h¦]r`*(jb)�ra*}rb*(h‚Uhƒ}rc*(h…]hŽ]h‡]h†]h�]uh‘j]*h¦]rd*hÜ)�re*}rf*(h‚X R5F-1 Poolrg*h‘ja*hœjÔ'h�hàhƒ}rh*(h…]hŽ]h‡]h†]h�]uh¤Mh¦]ri*h¯X R5F-1 Poolrj*…�rk*}rl*(h‚jg*h‘je*ubaubah�joubjb)�rm*}rn*(h‚Uhƒ}ro*(h…]hŽ]h‡]h†]h�]uh‘j]*h¦]rp*hÜ)�rq*}rr*(h‚X 0x9b000000rs*h‘jm*hœjÔ'h�hàhƒ}rt*(h…]hŽ]h‡]h†]h�]uh¤Mh¦]ru*h¯X 0x9b000000rv*…�rw*}rx*(h‚js*h‘jq*ubaubah�joubjb)�ry*}rz*(h‚Uhƒ}r{*(h…]hŽ]h‡]h†]h�]uh‘j]*h¦]r|*hÜ)�r}*}r~*(h‚X16 MBr*h‘jy*hœjÔ'h�hàhƒ}r€*(h…]hŽ]h‡]h†]h�]uh¤Mh¦]r�*h¯X16 MBr‚*…�rƒ*}r„*(h‚j*h‘j}*ubaubah�joubeh�jˆubeh�jWubeh�jXubaubhÜ)�r…*}r†*(h‚X•For details on how to adjust the sizes and locations of the R5F Pool carveouts, please see the corresponding section for changing the R5F memory map.r‡*h‘jÁ'hœjÔ'h�hàhƒ}rˆ*(h…]hŽ]h‡]h†]h�]uh¤M h¥hh¦]r‰*h¯X•For details on how to adjust the sizes and locations of the R5F Pool carveouts, please see the corresponding section for changing the R5F memory map.rŠ*…�r‹*}rŒ*(h‚j‡*h‘j…*ubaubh’)�r�*}rŽ*(h‚XChanging the R5F Memory Mapr�*h‘jÁ'hœjÔ'h�hÓhƒ}r�*(h†]r‘*Uchanging-the-r5f-memory-mapr’*ah‡]h…]hŽ]h�]r“*hwauh¤Nh¥hh¦]r”*h¯XChanging the R5F Memory Mapr•*…�r–*}r—*(h‚j�*h‘j�*ubaubh’)�r˜*}r™*(h‚XSlave Physical Addressesrš*h‘jÁ'hœjÔ'h�hÓhƒ}r›*(h†]rœ*Uslave-physical-addressesr�*ah‡]h…]hŽ]h�]rž*h; #size-cells = <2>; ranges; r5f1_memory_region: r5f1-memory@9b000000 { compatible = "shared-dma-pool"; reg = <0 0x9b000000 0 0x1000000>; no-map; }; r5f0_memory_region: r5f0-memory@9c000000 { compatible = "shared-dma-pool"; reg = <0 0x9c000000 0 0x800000>; no-map; }; secure_ddr: secure_ddr@9e800000 { reg = <0 0x9e800000 0 0x01800000>; /* for OP-TEE */ alignment = <0x1000>; no-map; }; };h‘jÁ'hœjÔ'h�j¤hƒ}rÅ*(hÊhËh†]h‡]h…]hŽ]h�]uh¤M: h¥hh¦]rÆ*h¯Xreserved-memory { #address-cells = <2>; #size-cells = <2>; ranges; r5f1_memory_region: r5f1-memory@9b000000 { compatible = "shared-dma-pool"; reg = <0 0x9b000000 0 0x1000000>; no-map; }; r5f0_memory_region: r5f0-memory@9c000000 { compatible = "shared-dma-pool"; reg = <0 0x9c000000 0 0x800000>; no-map; }; secure_ddr: secure_ddr@9e800000 { reg = <0 0x9e800000 0 0x01800000>; /* for OP-TEE */ alignment = <0x1000>; no-map; }; };rÇ*…�rÈ*}rÉ*(h‚Uh‘jÃ*ubaubhÜ)�rÊ*}rË*(h‚XeYou are able to change both the size and location. **Be careful not to overlap any other carveouts!**h‘jÁ'hœjÔ'h�hàhƒ}rÌ*(h…]hŽ]h‡]h†]h�]uh¤M7h¥hh¦]rÍ*(h¯X3You are able to change both the size and location. rÎ*…�rÏ*}rÐ*(h‚X3You are able to change both the size and location. h‘jÊ*ubj¯)�rÑ*}rÒ*(h‚X2**Be careful not to overlap any other carveouts!**hƒ}rÓ*(h…]hŽ]h‡]h†]h�]uh‘jÊ*h¦]rÔ*h¯X.Be careful not to overlap any other carveouts!rÕ*…�rÖ*}r×*(h‚Uh‘jÑ*ubah�j·ubeubhÜ)�rØ*}rÙ*(h‚XAdditionally, when you change the carveout location, there is a corresponding change that must be made to the resource table. For starters, if you're making a memory change you will need a **custom** resource table. The resource table is a large structure that is the "bridge" between physical memory and virtual memory. There is detailed information available in the article `IPC Resource customTable `__.h‘jÁ'hœjÔ'h�hàhƒ}rÚ*(h…]hŽ]h‡]h†]h�]uh¤M:h¥hh¦]rÛ*(h¯X½Additionally, when you change the carveout location, there is a corresponding change that must be made to the resource table. For starters, if you're making a memory change you will need a rÜ*…�rÝ*}rÞ*(h‚X½Additionally, when you change the carveout location, there is a corresponding change that must be made to the resource table. For starters, if you're making a memory change you will need a h‘jØ*ubj¯)�rß*}rà*(h‚X **custom**hƒ}rá*(h…]hŽ]h‡]h†]h�]uh‘jØ*h¦]râ*h¯Xcustomrã*…�rä*}rå*(h‚Uh‘jß*ubah�j·ubh¯X± resource table. The resource table is a large structure that is the "bridge" between physical memory and virtual memory. There is detailed information available in the article ræ*…�rç*}rè*(h‚X± resource table. The resource table is a large structure that is the "bridge" between physical memory and virtual memory. There is detailed information available in the article h‘jØ*ubj))�ré*}rê*(h‚Xš`IPC Resource customTable `__hƒ}rë*(UnameXIPC Resource customTablej-Xzhttp://software-dl.ti.com/processor-sdk-rtos/esd/docs/latest/rtos/index_Foundational_Components.html#resource-custom-tableh†]h‡]h…]hŽ]h�]uh‘jØ*h¦]rì*h¯XIPC Resource customTablerí*…�rî*}rï*(h‚Uh‘jé*ubah�j2ubh¯X.…�rð*}rñ*(h‚X.h‘jØ*ubeubhÜ)�rò*}ró*(h‚X›Once you've created your custom resource table, you must update the address of PHYS\_MEM\_IPC\_VRING to be the same base address as your corresponding CMA.h‘jÁ'hœjÔ'h�hàhƒ}rô*(h…]hŽ]h‡]h†]h�]uh¤MCh¥hh¦]rõ*h¯X˜Once you've created your custom resource table, you must update the address of PHYS_MEM_IPC_VRING to be the same base address as your corresponding CMA.rö*…�r÷*}rø*(h‚X›Once you've created your custom resource table, you must update the address of PHYS\_MEM\_IPC\_VRING to be the same base address as your corresponding CMA.h‘jò*ubaubj¡)�rù*}rú*(h‚XX#define R5F_MEM_TEXT 0x9C200000 #define R5F_MEM_DATA 0x9C300000 #define R5F_MEM_IPC_DATA 0x9C100000 #define R5F_MEM_IPC_VRING 0x9C000000 #define R5F_MEM_RPMSG_VRING0 0x9C000000 #define R5F_MEM_RPMSG_VRING1 0x9C010000 #define R5F_MEM_VRING_BUFS0 0x9C040000 #define R5F_MEM_VRING_BUFS1 0x9C080000h‘jÁ'hœjÔ'h�j¤hƒ}rû*(jt‰juXchÊhËh†]h‡]h…]jv}hŽ]h�]uh¤MGh¥hh¦]rü*h¯XX#define R5F_MEM_TEXT 0x9C200000 #define R5F_MEM_DATA 0x9C300000 #define R5F_MEM_IPC_DATA 0x9C100000 #define R5F_MEM_IPC_VRING 0x9C000000 #define R5F_MEM_RPMSG_VRING0 0x9C000000 #define R5F_MEM_RPMSG_VRING1 0x9C010000 #define R5F_MEM_VRING_BUFS0 0x9C040000 #define R5F_MEM_VRING_BUFS1 0x9C080000rý*…�rþ*}rÿ*(h‚Uh‘jù*ubaubj)�r+}r+(h‚XsThe PHYS\_MEM\_IPC\_VRING definition from the resource table must match the address of the associated CMA carveout!h‘jÁ'hœjÔ'h�jhƒ}r+(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r+hÜ)�r+}r+(h‚XsThe PHYS\_MEM\_IPC\_VRING definition from the resource table must match the address of the associated CMA carveout!h‘j+hœjÔ'h�hàhƒ}r+(h…]hŽ]h‡]h†]h�]uh¤MUh¦]r+h¯XpThe PHYS_MEM_IPC_VRING definition from the resource table must match the address of the associated CMA carveout!r+…�r +}r +(h‚XsThe PHYS\_MEM\_IPC\_VRING definition from the resource table must match the address of the associated CMA carveout!h‘j+ubaubaubh’)�r +}r +(h‚XR5 Virtual Addressesr +h‘jÁ'hœjÔ'h�hÓhƒ}r+(h†]r+Ur5-virtual-addressesr+ah‡]h…]hŽ]h�]r+h4auh¤Nh¥hh¦]r+h¯XR5 Virtual Addressesr+…�r+}r+(h‚j +h‘j +ubaubhÜ)�r+}r+(h‚X{These addresses are the ones seen by the MCU subsystem, i.e. these will be the addresses in your linker command files, etc.r+h‘jÁ'hœjÔ'h�hàhƒ}r+(h…]hŽ]h‡]h†]h�]uh¤M[h¥hh¦]r+h¯X{These addresses are the ones seen by the MCU subsystem, i.e. these will be the addresses in your linker command files, etc.r+…�r+}r+(h‚j+h‘j+ubaubhÜ)�r+}r+(h‚XµYou must ensure that the sizes of your sections are consistent with the corresponding definitions in the resource table. You should create your own resource table in order to modify the memory map. This is describe in the page `IPC Resource customTable `__. You can look at an existing resource table inside IPC:h‘jÁ'hœjÔ'h�hàhƒ}r +(h…]hŽ]h‡]h†]h�]uh¤M^h¥hh¦]r!+(h¯XãYou must ensure that the sizes of your sections are consistent with the corresponding definitions in the resource table. You should create your own resource table in order to modify the memory map. This is describe in the page r"+…�r#+}r$+(h‚XãYou must ensure that the sizes of your sections are consistent with the corresponding definitions in the resource table. You should create your own resource table in order to modify the memory map. This is describe in the page h‘j+ubj))�r%+}r&+(h‚Xš`IPC Resource customTable `__hƒ}r'+(UnameXIPC Resource customTablej-Xzhttp://software-dl.ti.com/processor-sdk-rtos/esd/docs/latest/rtos/index_Foundational_Components.html#resource-custom-tableh†]h‡]h…]hŽ]h�]uh‘j+h¦]r(+h¯XIPC Resource customTabler)+…�r*+}r++(h‚Uh‘j%+ubah�j2ubh¯X8. You can look at an existing resource table inside IPC:r,+…�r-+}r.+(h‚X8. You can look at an existing resource table inside IPC:h‘j+ubeubhÜ)�r/+}r0+(h‚X8ipc/packages/ti/ipc/remoteproc/rsc\_table\_am65xx\_r5f.hr1+h‘jÁ'hœjÔ'h�hàhƒ}r2+(h…]hŽ]h‡]h†]h�]uh¤Mfh¥hh¦]r3+h¯X5ipc/packages/ti/ipc/remoteproc/rsc_table_am65xx_r5f.hr4+…�r5+}r6+(h‚X8ipc/packages/ti/ipc/remoteproc/rsc\_table\_am65xx\_r5f.hh‘j/+ubaubj¡)�r7+}r8+(h‚Xo{ TYPE_CARVEOUT, R5F_MEM_IPC_DATA, 0, R5F_MEM_IPC_DATA_SIZE, 0, 0, "R5F_MEM_IPC_DATA", }, { TYPE_CARVEOUT, R5F_MEM_TEXT, 0, R5F_MEM_TEXT_SIZE, 0, 0, "R5F_MEM_TEXT", }, { TYPE_CARVEOUT, R5F_MEM_DATA, 0, R5F_MEM_DATA_SIZE, 0, 0, "R5F_MEM_DATA", }, { TYPE_TRACE, TRACEBUFADDR, TRACEBUFSIZE, 0, "trace:r5f0", },h‘jÁ'hœjÔ'h�j¤hƒ}r9+(hÊhËh†]h‡]h…]hŽ]r:+(j“ Xceh�]uh¤M€h¥hh¦]r;+(j• )�r<+}r=+(h‚X{hƒ}r>+(h…]hŽ]r?+U punctuationr@+ah‡]h†]h�]uh‘j7+h¦]rA+h¯X{…�rB+}rC+(h‚Uh‘j<+ubah�jž ubh¯X rD+…�rE+}rF+(h‚X h‘j7+ubj• )�rG+}rH+(h‚X TYPE_CARVEOUThƒ}rI+(h…]hŽ]rJ+UnamerK+ah‡]h†]h�]uh‘j7+h¦]rL+h¯X TYPE_CARVEOUTrM+…�rN+}rO+(h‚Uh‘jG+ubah�jž ubj• )�rP+}rQ+(h‚X,hƒ}rR+(h…]hŽ]rS+U punctuationrT+ah‡]h†]h�]uh‘j7+h¦]rU+h¯X,…�rV+}rW+(h‚Uh‘jP+ubah�jž ubh¯X rX+…�rY+}rZ+(h‚X h‘j7+ubj• )�r[+}r\+(h‚XR5F_MEM_IPC_DATAhƒ}r]+(h…]hŽ]r^+Unamer_+ah‡]h†]h�]uh‘j7+h¦]r`+h¯XR5F_MEM_IPC_DATAra+…�rb+}rc+(h‚Uh‘j[+ubah�jž ubj• )�rd+}re+(h‚X,hƒ}rf+(h…]hŽ]rg+U punctuationrh+ah‡]h†]h�]uh‘j7+h¦]ri+h¯X,…�rj+}rk+(h‚Uh‘jd+ubah�jž ubh¯X …�rl+}rm+(h‚X h‘j7+ubj• )�rn+}ro+(h‚X0hƒ}rp+(h…]hŽ]rq+(Uliteralrr+Unumberrs+Uintegerrt+eh‡]h†]h�]uh‘j7+h¦]ru+h¯X0…�rv+}rw+(h‚Uh‘jn+ubah�jž ubj• )�rx+}ry+(h‚X,hƒ}rz+(h…]hŽ]r{+U punctuationr|+ah‡]h†]h�]uh‘j7+h¦]r}+h¯X,…�r~+}r+(h‚Uh‘jx+ubah�jž ubh¯X r€+…�r�+}r‚+(h‚X h‘j7+ubj• )�rƒ+}r„+(h‚XR5F_MEM_IPC_DATA_SIZEhƒ}r…+(h…]hŽ]r†+Unamer‡+ah‡]h†]h�]uh‘j7+h¦]rˆ+h¯XR5F_MEM_IPC_DATA_SIZEr‰+…�rŠ+}r‹+(h‚Uh‘jƒ+ubah�jž ubj• )�rŒ+}r�+(h‚X,hƒ}rŽ+(h…]hŽ]r�+U punctuationr�+ah‡]h†]h�]uh‘j7+h¦]r‘+h¯X,…�r’+}r“+(h‚Uh‘jŒ+ubah�jž ubh¯X …�r”+}r•+(h‚X h‘j7+ubj• )�r–+}r—+(h‚X0hƒ}r˜+(h…]hŽ]r™+(Uliteralrš+Unumberr›+Uintegerrœ+eh‡]h†]h�]uh‘j7+h¦]r�+h¯X0…�rž+}rŸ+(h‚Uh‘j–+ubah�jž ubj• )�r +}r¡+(h‚X,hƒ}r¢+(h…]hŽ]r£+U punctuationr¤+ah‡]h†]h�]uh‘j7+h¦]r¥+h¯X,…�r¦+}r§+(h‚Uh‘j +ubah�jž ubh¯X …�r¨+}r©+(h‚X h‘j7+ubj• )�rª+}r«+(h‚X0hƒ}r¬+(h…]hŽ]r­+(Uliteralr®+Unumberr¯+Uintegerr°+eh‡]h†]h�]uh‘j7+h¦]r±+h¯X0…�r²+}r³+(h‚Uh‘jª+ubah�jž ubj• )�r´+}rµ+(h‚X,hƒ}r¶+(h…]hŽ]r·+U punctuationr¸+ah‡]h†]h�]uh‘j7+h¦]r¹+h¯X,…�rº+}r»+(h‚Uh‘j´+ubah�jž ubh¯X …�r¼+}r½+(h‚X h‘j7+ubj• )�r¾+}r¿+(h‚X"R5F_MEM_IPC_DATA"hƒ}rÀ+(h…]hŽ]rÁ+(UliteralrÂ+UstringrÃ+eh‡]h†]h�]uh‘j7+h¦]rÄ+h¯X"R5F_MEM_IPC_DATA"rÅ+…�rÆ+}rÇ+(h‚Uh‘j¾+ubah�jž ubj• )�rÈ+}rÉ+(h‚X,hƒ}rÊ+(h…]hŽ]rË+U punctuationrÌ+ah‡]h†]h�]uh‘j7+h¦]rÍ+h¯X,…�rÎ+}rÏ+(h‚Uh‘jÈ+ubah�jž ubh¯X rÐ+…�rÑ+}rÒ+(h‚X h‘j7+ubj• )�rÓ+}rÔ+(h‚X},hƒ}rÕ+(h…]hŽ]rÖ+U punctuationr×+ah‡]h†]h�]uh‘j7+h¦]rØ+h¯X},rÙ+…�rÚ+}rÛ+(h‚Uh‘jÓ+ubah�jž ubh¯X rÜ+…�rÝ+}rÞ+(h‚X h‘j7+ubj• )�rß+}rà+(h‚X{hƒ}rá+(h…]hŽ]râ+U punctuationrã+ah‡]h†]h�]uh‘j7+h¦]rä+h¯X{…�rå+}ræ+(h‚Uh‘jß+ubah�jž ubh¯X rç+…�rè+}ré+(h‚X h‘j7+ubj• )�rê+}rë+(h‚X TYPE_CARVEOUThƒ}rì+(h…]hŽ]rí+Unamerî+ah‡]h†]h�]uh‘j7+h¦]rï+h¯X TYPE_CARVEOUTrð+…�rñ+}rò+(h‚Uh‘jê+ubah�jž ubj• )�ró+}rô+(h‚X,hƒ}rõ+(h…]hŽ]rö+U punctuationr÷+ah‡]h†]h�]uh‘j7+h¦]rø+h¯X,…�rù+}rú+(h‚Uh‘jó+ubah�jž ubh¯X rû+…�rü+}rý+(h‚X h‘j7+ubj• )�rþ+}rÿ+(h‚X R5F_MEM_TEXThƒ}r,(h…]hŽ]r,Unamer,ah‡]h†]h�]uh‘j7+h¦]r,h¯X R5F_MEM_TEXTr,…�r,}r,(h‚Uh‘jþ+ubah�jž ubj• )�r,}r,(h‚X,hƒ}r ,(h…]hŽ]r ,U punctuationr ,ah‡]h†]h�]uh‘j7+h¦]r ,h¯X,…�r ,}r,(h‚Uh‘j,ubah�jž ubh¯X …�r,}r,(h‚X h‘j7+ubj• )�r,}r,(h‚X0hƒ}r,(h…]hŽ]r,(Uliteralr,Unumberr,Uintegerr,eh‡]h†]h�]uh‘j7+h¦]r,h¯X0…�r,}r,(h‚Uh‘j,ubah�jž ubj• )�r,}r,(h‚X,hƒ}r,(h…]hŽ]r,U punctuationr,ah‡]h†]h�]uh‘j7+h¦]r ,h¯X,…�r!,}r",(h‚Uh‘j,ubah�jž ubh¯X r#,…�r$,}r%,(h‚X h‘j7+ubj• )�r&,}r',(h‚XR5F_MEM_TEXT_SIZEhƒ}r(,(h…]hŽ]r),Unamer*,ah‡]h†]h�]uh‘j7+h¦]r+,h¯XR5F_MEM_TEXT_SIZEr,,…�r-,}r.,(h‚Uh‘j&,ubah�jž ubj• )�r/,}r0,(h‚X,hƒ}r1,(h…]hŽ]r2,U punctuationr3,ah‡]h†]h�]uh‘j7+h¦]r4,h¯X,…�r5,}r6,(h‚Uh‘j/,ubah�jž ubh¯X …�r7,}r8,(h‚X h‘j7+ubj• )�r9,}r:,(h‚X0hƒ}r;,(h…]hŽ]r<,(Uliteralr=,Unumberr>,Uintegerr?,eh‡]h†]h�]uh‘j7+h¦]r@,h¯X0…�rA,}rB,(h‚Uh‘j9,ubah�jž ubj• )�rC,}rD,(h‚X,hƒ}rE,(h…]hŽ]rF,U punctuationrG,ah‡]h†]h�]uh‘j7+h¦]rH,h¯X,…�rI,}rJ,(h‚Uh‘jC,ubah�jž ubh¯X …�rK,}rL,(h‚X h‘j7+ubj• )�rM,}rN,(h‚X0hƒ}rO,(h…]hŽ]rP,(UliteralrQ,UnumberrR,UintegerrS,eh‡]h†]h�]uh‘j7+h¦]rT,h¯X0…�rU,}rV,(h‚Uh‘jM,ubah�jž ubj• )�rW,}rX,(h‚X,hƒ}rY,(h…]hŽ]rZ,U punctuationr[,ah‡]h†]h�]uh‘j7+h¦]r\,h¯X,…�r],}r^,(h‚Uh‘jW,ubah�jž ubh¯X …�r_,}r`,(h‚X h‘j7+ubj• )�ra,}rb,(h‚X"R5F_MEM_TEXT"hƒ}rc,(h…]hŽ]rd,(Uliteralre,Ustringrf,eh‡]h†]h�]uh‘j7+h¦]rg,h¯X"R5F_MEM_TEXT"rh,…�ri,}rj,(h‚Uh‘ja,ubah�jž ubj• )�rk,}rl,(h‚X,hƒ}rm,(h…]hŽ]rn,U punctuationro,ah‡]h†]h�]uh‘j7+h¦]rp,h¯X,…�rq,}rr,(h‚Uh‘jk,ubah�jž ubh¯X rs,…�rt,}ru,(h‚X h‘j7+ubj• )�rv,}rw,(h‚X},hƒ}rx,(h…]hŽ]ry,U punctuationrz,ah‡]h†]h�]uh‘j7+h¦]r{,h¯X},r|,…�r},}r~,(h‚Uh‘jv,ubah�jž ubh¯X r,…�r€,}r�,(h‚X h‘j7+ubj• )�r‚,}rƒ,(h‚X{hƒ}r„,(h…]hŽ]r…,U punctuationr†,ah‡]h†]h�]uh‘j7+h¦]r‡,h¯X{…�rˆ,}r‰,(h‚Uh‘j‚,ubah�jž ubh¯X rŠ,…�r‹,}rŒ,(h‚X h‘j7+ubj• )�r�,}rŽ,(h‚X TYPE_CARVEOUThƒ}r�,(h…]hŽ]r�,Unamer‘,ah‡]h†]h�]uh‘j7+h¦]r’,h¯X TYPE_CARVEOUTr“,…�r”,}r•,(h‚Uh‘j�,ubah�jž ubj• )�r–,}r—,(h‚X,hƒ}r˜,(h…]hŽ]r™,U punctuationrš,ah‡]h†]h�]uh‘j7+h¦]r›,h¯X,…�rœ,}r�,(h‚Uh‘j–,ubah�jž ubh¯X rž,…�rŸ,}r ,(h‚X h‘j7+ubj• )�r¡,}r¢,(h‚X R5F_MEM_DATAhƒ}r£,(h…]hŽ]r¤,Unamer¥,ah‡]h†]h�]uh‘j7+h¦]r¦,h¯X R5F_MEM_DATAr§,…�r¨,}r©,(h‚Uh‘j¡,ubah�jž ubj• )�rª,}r«,(h‚X,hƒ}r¬,(h…]hŽ]r­,U punctuationr®,ah‡]h†]h�]uh‘j7+h¦]r¯,h¯X,…�r°,}r±,(h‚Uh‘jª,ubah�jž ubh¯X …�r²,}r³,(h‚X h‘j7+ubj• )�r´,}rµ,(h‚X0hƒ}r¶,(h…]hŽ]r·,(Uliteralr¸,Unumberr¹,Uintegerrº,eh‡]h†]h�]uh‘j7+h¦]r»,h¯X0…�r¼,}r½,(h‚Uh‘j´,ubah�jž ubj• )�r¾,}r¿,(h‚X,hƒ}rÀ,(h…]hŽ]rÁ,U punctuationrÂ,ah‡]h†]h�]uh‘j7+h¦]rÃ,h¯X,…�rÄ,}rÅ,(h‚Uh‘j¾,ubah�jž ubh¯X rÆ,…�rÇ,}rÈ,(h‚X h‘j7+ubj• )�rÉ,}rÊ,(h‚XR5F_MEM_DATA_SIZEhƒ}rË,(h…]hŽ]rÌ,UnamerÍ,ah‡]h†]h�]uh‘j7+h¦]rÎ,h¯XR5F_MEM_DATA_SIZErÏ,…�rÐ,}rÑ,(h‚Uh‘jÉ,ubah�jž ubj• )�rÒ,}rÓ,(h‚X,hƒ}rÔ,(h…]hŽ]rÕ,U punctuationrÖ,ah‡]h†]h�]uh‘j7+h¦]r×,h¯X,…�rØ,}rÙ,(h‚Uh‘jÒ,ubah�jž ubh¯X …�rÚ,}rÛ,(h‚X h‘j7+ubj• )�rÜ,}rÝ,(h‚X0hƒ}rÞ,(h…]hŽ]rß,(Uliteralrà,Unumberrá,Uintegerrâ,eh‡]h†]h�]uh‘j7+h¦]rã,h¯X0…�rä,}rå,(h‚Uh‘jÜ,ubah�jž ubj• )�ræ,}rç,(h‚X,hƒ}rè,(h…]hŽ]ré,U punctuationrê,ah‡]h†]h�]uh‘j7+h¦]rë,h¯X,…�rì,}rí,(h‚Uh‘jæ,ubah�jž ubh¯X …�rî,}rï,(h‚X h‘j7+ubj• )�rð,}rñ,(h‚X0hƒ}rò,(h…]hŽ]ró,(Uliteralrô,Unumberrõ,Uintegerrö,eh‡]h†]h�]uh‘j7+h¦]r÷,h¯X0…�rø,}rù,(h‚Uh‘jð,ubah�jž ubj• )�rú,}rû,(h‚X,hƒ}rü,(h…]hŽ]rý,U punctuationrþ,ah‡]h†]h�]uh‘j7+h¦]rÿ,h¯X,…�r-}r-(h‚Uh‘jú,ubah�jž ubh¯X …�r-}r-(h‚X h‘j7+ubj• )�r-}r-(h‚X"R5F_MEM_DATA"hƒ}r-(h…]hŽ]r-(Uliteralr-Ustringr -eh‡]h†]h�]uh‘j7+h¦]r -h¯X"R5F_MEM_DATA"r -…�r -}r -(h‚Uh‘j-ubah�jž ubj• )�r-}r-(h‚X,hƒ}r-(h…]hŽ]r-U punctuationr-ah‡]h†]h�]uh‘j7+h¦]r-h¯X,…�r-}r-(h‚Uh‘j-ubah�jž ubh¯X r-…�r-}r-(h‚X h‘j7+ubj• )�r-}r-(h‚X},hƒ}r-(h…]hŽ]r-U punctuationr-ah‡]h†]h�]uh‘j7+h¦]r-h¯X},r-…�r -}r!-(h‚Uh‘j-ubah�jž ubh¯X r"-…�r#-}r$-(h‚X h‘j7+ubj• )�r%-}r&-(h‚X{hƒ}r'-(h…]hŽ]r(-U punctuationr)-ah‡]h†]h�]uh‘j7+h¦]r*-h¯X{…�r+-}r,-(h‚Uh‘j%-ubah�jž ubh¯X r--…�r.-}r/-(h‚X h‘j7+ubj• )�r0-}r1-(h‚X TYPE_TRACEhƒ}r2-(h…]hŽ]r3-Unamer4-ah‡]h†]h�]uh‘j7+h¦]r5-h¯X TYPE_TRACEr6-…�r7-}r8-(h‚Uh‘j0-ubah�jž ubj• )�r9-}r:-(h‚X,hƒ}r;-(h…]hŽ]r<-U punctuationr=-ah‡]h†]h�]uh‘j7+h¦]r>-h¯X,…�r?-}r@-(h‚Uh‘j9-ubah�jž ubh¯X …�rA-}rB-(h‚X h‘j7+ubj• )�rC-}rD-(h‚X TRACEBUFADDRhƒ}rE-(h…]hŽ]rF-UnamerG-ah‡]h†]h�]uh‘j7+h¦]rH-h¯X TRACEBUFADDRrI-…�rJ-}rK-(h‚Uh‘jC-ubah�jž ubj• )�rL-}rM-(h‚X,hƒ}rN-(h…]hŽ]rO-U punctuationrP-ah‡]h†]h�]uh‘j7+h¦]rQ-h¯X,…�rR-}rS-(h‚Uh‘jL-ubah�jž ubh¯X …�rT-}rU-(h‚X h‘j7+ubj• )�rV-}rW-(h‚X TRACEBUFSIZEhƒ}rX-(h…]hŽ]rY-UnamerZ-ah‡]h†]h�]uh‘j7+h¦]r[-h¯X TRACEBUFSIZEr\-…�r]-}r^-(h‚Uh‘jV-ubah�jž ubj• )�r_-}r`-(h‚X,hƒ}ra-(h…]hŽ]rb-U punctuationrc-ah‡]h†]h�]uh‘j7+h¦]rd-h¯X,…�re-}rf-(h‚Uh‘j_-ubah�jž ubh¯X …�rg-}rh-(h‚X h‘j7+ubj• )�ri-}rj-(h‚X0hƒ}rk-(h…]hŽ]rl-(Uliteralrm-Unumberrn-Uintegerro-eh‡]h†]h�]uh‘j7+h¦]rp-h¯X0…�rq-}rr-(h‚Uh‘ji-ubah�jž ubj• )�rs-}rt-(h‚X,hƒ}ru-(h…]hŽ]rv-U punctuationrw-ah‡]h†]h�]uh‘j7+h¦]rx-h¯X,…�ry-}rz-(h‚Uh‘js-ubah�jž ubh¯X …�r{-}r|-(h‚X h‘j7+ubj• )�r}-}r~-(h‚X "trace:r5f0"hƒ}r-(h…]hŽ]r€-(Uliteralr�-Ustringr‚-eh‡]h†]h�]uh‘j7+h¦]rƒ-h¯X "trace:r5f0"r„-…�r…-}r†-(h‚Uh‘j}-ubah�jž ubj• )�r‡-}rˆ-(h‚X,hƒ}r‰-(h…]hŽ]rŠ-U punctuationr‹-ah‡]h†]h�]uh‘j7+h¦]rŒ-h¯X,…�r�-}rŽ-(h‚Uh‘j‡-ubah�jž ubh¯X r�-…�r�-}r‘-(h‚X h‘j7+ubj• )�r’-}r“-(h‚X},hƒ}r”-(h…]hŽ]r•-U punctuationr–-ah‡]h†]h�]uh‘j7+h¦]r—-h¯X},r˜-…�r™-}rš-(h‚Uh‘j’-ubah�jž ubeubhÜ)�r›-}rœ-(h‚XJLet's have a look at some of these to understand them better. For example:r�-h‘jÁ'hœjÔ'h�hàhƒ}rž-(h…]hŽ]h‡]h†]h�]uh¤M�h¥hh¦]rŸ-h¯XJLet's have a look at some of these to understand them better. For example:r -…�r¡-}r¢-(h‚j�-h‘j›-ubaubj¡)�r£-}r¤-(h‚XY{ TYPE_CARVEOUT, DSP_MEM_TEXT, 0, DSP_MEM_TEXT_SIZE, 0, 0, "DSP_MEM_TEXT", },h‘jÁ'hœjÔ'h�j¤hƒ}r¥-(jt‰juXchÊhËh†]h‡]h…]jv}hŽ]h�]uh¤M„h¥hh¦]r¦-h¯XY{ TYPE_CARVEOUT, DSP_MEM_TEXT, 0, DSP_MEM_TEXT_SIZE, 0, 0, "DSP_MEM_TEXT", },r§-…�r¨-}r©-(h‚Uh‘j£-ubaubhÜ)�rª-}r«-(h‚XKey points to note are:r¬-h‘jÁ'hœjÔ'h�hàhƒ}r­-(h…]hŽ]h‡]h†]h�]uh¤MŒh¥hh¦]r®-h¯XKey points to note are:r¯-…�r°-}r±-(h‚j¬-h‘jª-ubaubj6)�r²-}r³-(h‚Uh‘jÁ'hœjÔ'h�j9hƒ}r´-(j;U.h†]h‡]h…]j<UhŽ]h�]j=j>uh¤MŽh¥hh¦]rµ-(j@)�r¶-}r·-(h‚XwThe "TYPE\_CARVEOUT" indicates that the physical memory backing this entry will come from the associated reserved pool.h‘j²-hœjÔ'h�jChƒ}r¸-(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r¹-hÜ)�rº-}r»-(h‚XwThe "TYPE\_CARVEOUT" indicates that the physical memory backing this entry will come from the associated reserved pool.h‘j¶-hœjÔ'h�hàhƒ}r¼-(h…]hŽ]h‡]h†]h�]uh¤MŽh¦]r½-h¯XvThe "TYPE_CARVEOUT" indicates that the physical memory backing this entry will come from the associated reserved pool.r¾-…�r¿-}rÀ-(h‚XwThe "TYPE\_CARVEOUT" indicates that the physical memory backing this entry will come from the associated reserved pool.h‘jº-ubaubaubj@)�rÁ-}rÂ-(h‚XDSP\_MEM\_TEXT is a #define earlier in the code providing the address for the code section. It is 0x9C200000 by default. **This must correspond to a section from your DSP linker command file, i.e. EXT\_CODE (or whatever name you choose to give it) must be linked to the same address.**h‘j²-hœjÔ'h�jChƒ}rÃ-(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rÄ-hÜ)�rÅ-}rÆ-(h‚XDSP\_MEM\_TEXT is a #define earlier in the code providing the address for the code section. It is 0x9C200000 by default. **This must correspond to a section from your DSP linker command file, i.e. EXT\_CODE (or whatever name you choose to give it) must be linked to the same address.**h‘jÁ-hœjÔ'h�hàhƒ}rÇ-(h…]hŽ]h‡]h†]h�]uh¤M�h¦]rÈ-(h¯XwDSP_MEM_TEXT is a #define earlier in the code providing the address for the code section. It is 0x9C200000 by default. rÉ-…�rÊ-}rË-(h‚XyDSP\_MEM\_TEXT is a #define earlier in the code providing the address for the code section. It is 0x9C200000 by default. h‘jÅ-ubj¯)�rÌ-}rÍ-(h‚X¤**This must correspond to a section from your DSP linker command file, i.e. EXT\_CODE (or whatever name you choose to give it) must be linked to the same address.**hƒ}rÎ-(h…]hŽ]h‡]h†]h�]uh‘jÅ-h¦]rÏ-h¯XŸThis must correspond to a section from your DSP linker command file, i.e. EXT_CODE (or whatever name you choose to give it) must be linked to the same address.rÐ-…�rÑ-}rÒ-(h‚Uh‘jÌ-ubah�j·ubeubaubj@)�rÓ-}rÔ-(h‚X´DSP\_MEM\_TEXT\_SIZE is the size of the text section. **The actual amount of linked code in the corresponding section of your executable must be less than or equal to this size.** h‘j²-hœjÔ'h�jChƒ}rÕ-(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rÖ-hÜ)�r×-}rØ-(h‚X³DSP\_MEM\_TEXT\_SIZE is the size of the text section. **The actual amount of linked code in the corresponding section of your executable must be less than or equal to this size.**h‘jÓ-hœjÔ'h�hàhƒ}rÙ-(h…]hŽ]h‡]h†]h�]uh¤M•h¦]rÚ-(h¯X3DSP_MEM_TEXT_SIZE is the size of the text section. rÛ-…�rÜ-}rÝ-(h‚X6DSP\_MEM\_TEXT\_SIZE is the size of the text section. h‘j×-ubj¯)�rÞ-}rß-(h‚X}**The actual amount of linked code in the corresponding section of your executable must be less than or equal to this size.**hƒ}rà-(h…]hŽ]h‡]h†]h�]uh‘j×-h¦]rá-h¯XyThe actual amount of linked code in the corresponding section of your executable must be less than or equal to this size.râ-…�rã-}rä-(h‚Uh‘jÞ-ubah�j·ubeubaubeubhÜ)�rå-}ræ-(h‚XLet's take another:rç-h‘jÁ'hœjÔ'h�hàhƒ}rè-(h…]hŽ]h‡]h†]h�]uh¤Mšh¥hh¦]ré-h¯XLet's take another:rê-…�rë-}rì-(h‚jç-h‘jå-ubaubj¡)�rí-}rî-(h‚XA{ TYPE_TRACE, TRACEBUFADDR, TRACEBUFSIZE, 0, "trace:r5f0", },h‘jÁ'hœjÔ'h�j¤hƒ}rï-(jt‰juXchÊhËh†]h‡]h…]jv}hŽ]h�]uh¤Mœh¥hh¦]rð-h¯XA{ TYPE_TRACE, TRACEBUFADDR, TRACEBUFSIZE, 0, "trace:r5f0", },rñ-…�rò-}ró-(h‚Uh‘jí-ubaubhþ)�rô-}rõ-(h‚Uh‘jÁ'hœjÔ'h�jhƒ}rö-(h…]hŽ]h‡]h†]h�]uh¤M¢h¥hh¦]r÷-j)�rø-}rù-(h‚UjKh‘jô-hœjÔ'h�h¤hƒ}rú-(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�rû-}rü-(h‚XKey points are:rý-h‘jÁ'hœjÔ'h�hàhƒ}rþ-(h…]hŽ]h‡]h†]h�]uh¤M¤h¥hh¦]rÿ-h¯XKey points are:r.…�r.}r.(h‚jý-h‘jû-ubaubj6)�r.}r.(h‚Uh‘jÁ'hœjÔ'h�j9hƒ}r.(j;U.h†]h‡]h…]j<UhŽ]h�]j=j>uh¤M¦h¥hh¦]r.(j@)�r.}r.(h‚X3The "TYPE\_TRACE" indicates this is for trace info.r .h‘j.hœjÔ'h�jChƒ}r .(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r .hÜ)�r .}r .(h‚j .h‘j.hœjÔ'h�hàhƒ}r.(h…]hŽ]h‡]h†]h�]uh¤M¦h¦]r.h¯X2The "TYPE_TRACE" indicates this is for trace info.r.…�r.}r.(h‚X3The "TYPE\_TRACE" indicates this is for trace info.h‘j .ubaubaubj@)�r.}r.(h‚XªThe TRACEBUFADDR is defined earlier in the file as &ti\_trace\_SysMin\_Module\_State\_0\_outbuf\_\_A. That corresponds to the symbol used in TI-RTOS for the trace buffer.h‘j.hœjÔ'h�jChƒ}r.(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r.hÜ)�r.}r.(h‚XªThe TRACEBUFADDR is defined earlier in the file as &ti\_trace\_SysMin\_Module\_State\_0\_outbuf\_\_A. That corresponds to the symbol used in TI-RTOS for the trace buffer.h‘j.hœjÔ'h�hàhƒ}r.(h…]hŽ]h‡]h†]h�]uh¤M§h¦]r.h¯X¢The TRACEBUFADDR is defined earlier in the file as &ti_trace_SysMin_Module_State_0_outbuf__A. That corresponds to the symbol used in TI-RTOS for the trace buffer.r.…�r.}r.(h‚XªThe TRACEBUFADDR is defined earlier in the file as &ti\_trace\_SysMin\_Module\_State\_0\_outbuf\_\_A. That corresponds to the symbol used in TI-RTOS for the trace buffer.h‘j.ubaubaubj@)�r.}r.(h‚X©The TRACEBUFSIZE is the size of the Trace section The corresponding size in the cfg file should be the same (or less). It looks like this: ``SysMin.bufSize = 0x8000;`` h‘j.hœXVinternal padding after source/linux/Foundational_Components/IPC/IPC_for_AM65xx.rst.incr .h�jChƒ}r!.(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r".hÜ)�r#.}r$.(h‚X¨The TRACEBUFSIZE is the size of the Trace section The corresponding size in the cfg file should be the same (or less). It looks like this: ``SysMin.bufSize = 0x8000;``h‘j.hœjÔ'h�hàhƒ}r%.(h…]hŽ]h‡]h†]h�]uh¤Mªh¦]r&.(h¯X‹The TRACEBUFSIZE is the size of the Trace section The corresponding size in the cfg file should be the same (or less). It looks like this: r'.…�r(.}r).(h‚X‹The TRACEBUFSIZE is the size of the Trace section The corresponding size in the cfg file should be the same (or less). It looks like this: h‘j#.ubjÅ )�r*.}r+.(h‚X``SysMin.bufSize = 0x8000;``hƒ}r,.(h…]hŽ]h‡]h†]h�]uh‘j#.h¦]r-.h¯XSysMin.bufSize = 0x8000;r..…�r/.}r0.(h‚Uh‘j*.ubah�jÍ ubeubaubeubeubh–)�r1.}r2.(h‚Uh‘hšhœhŒh�hžhƒ}r3.(h…]hŽ]h‡]h†]r4.U ipc-for-k2xr5.ah�]r6.hauh¤Kh¥hh¦]r7.(h¨)�r8.}r9.(h‚X IPC for K2xr:.h‘j1.hœhŒh�h¬hƒ}r;.(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]r<.h¯X IPC for K2xr=.…�r>.}r?.(h‚j:.h‘j8.ubaubh–)�r@.}rA.(h‚Uh™Kh‘j1.hœhŠX<source/linux/Foundational_Components/IPC/IPC_for_K2x.rst.incrB.…�rC.}rD.bh�hžhƒ}rE.(h…]rF.X introductionrG.ahŽ]h‡]h†]rH.Uid2rI.ah�]uh¤Kh¥hh¦]rJ.(h¨)�rK.}rL.(h‚X IntroductionrM.h‘j@.hœjC.h�h¬hƒ}rN.(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]rO.h¯X IntroductionrP.…�rQ.}rR.(h‚jM.h‘jK.ubaubhÜ)�rS.}rT.(h‚X.This article is geared toward 66AK2x users that are running Linux on the Cortex A15. The goal is to help users understand how to gain access to the DSP (c66x) subsystem of the 66AK2x. While the examples used in this guide are specific to K2G, the information provided here applies to all K2x platforms.rU.h‘j@.hœjC.h�hàhƒ}rV.(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]rW.h¯X.This article is geared toward 66AK2x users that are running Linux on the Cortex A15. The goal is to help users understand how to gain access to the DSP (c66x) subsystem of the 66AK2x. While the examples used in this guide are specific to K2G, the information provided here applies to all K2x platforms.rX.…�rY.}rZ.(h‚jU.h‘jS.ubaubeubh–)�r[.}r\.(h‚Uh‘j1.hœjC.h�hžhƒ}r].(h…]hŽ]h‡]h†]r^.U$software-dependencies-to-get-startedr_.ah�]r`.hqauh¤Kh¥hh¦]ra.(h¨)�rb.}rc.(h‚X$Software Dependencies to Get Startedrd.h‘j[.hœjC.h�h¬hƒ}re.(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]rf.h¯X$Software Dependencies to Get Startedrg.…�rh.}ri.(h‚jd.h‘jb.ubaubhÜ)�rj.}rk.(h‚X Prerequisitesrl.h‘j[.hœjC.h�hàhƒ}rm.(h…]hŽ]h‡]h†]h�]uh¤K h¥hh¦]rn.h¯X Prerequisitesro.…�rp.}rq.(h‚jl.h‘jj.ubaubj)�rr.}rs.(h‚Uh‘j[.hœjC.h�j!hƒ}rt.(j#X-h†]h‡]h…]hŽ]h�]uh¤K h¥hh¦]ru.(j@)�rv.}rw.(h‚Xm`Processor SDK Linux for K2G `__h‘jr.hœjC.h�jChƒ}rx.(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]ry.hÜ)�rz.}r{.(h‚Xm`Processor SDK Linux for K2G `__r|.h‘jv.hœjC.h�hàhƒ}r}.(h…]hŽ]h‡]h†]h�]uh¤K h¦]r~.j))�r.}r€.(h‚j|.hƒ}r�.(UnameXProcessor SDK Linux for K2Gj-XKhttp://software-dl.ti.com/processor-sdk-linux/esd/K2G/latest/index_FDS.htmlh†]h‡]h…]hŽ]h�]uh‘jz.h¦]r‚.h¯XProcessor SDK Linux for K2Grƒ.…�r„.}r….(h‚Uh‘j.ubah�j2ubaubaubj@)�r†.}r‡.(h‚Xk`Processor SDK RTOS for K2G `__h‘jr.hœjC.h�jChƒ}rˆ.(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r‰.hÜ)�rŠ.}r‹.(h‚Xk`Processor SDK RTOS for K2G `__rŒ.h‘j†.hœjC.h�hàhƒ}r�.(h…]hŽ]h‡]h†]h�]uh¤K h¦]rŽ.j))�r�.}r�.(h‚jŒ.hƒ}r‘.(UnameXProcessor SDK RTOS for K2Gj-XJhttp://software-dl.ti.com/processor-sdk-rtos/esd/K2G/latest/index_FDS.htmlh†]h‡]h…]hŽ]h�]uh‘jŠ.h¦]r’.h¯XProcessor SDK RTOS for K2Gr“.…�r”.}r•.(h‚Uh‘j�.ubah�j2ubaubaubj@)�r–.}r—.(h‚Xˆ`Code Composer Studio `__ (choose version as specified on Proc SDK download page) h‘jr.hœjC.h�jChƒ}r˜.(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r™.hÜ)�rš.}r›.(h‚X‡`Code Composer Studio `__ (choose version as specified on Proc SDK download page)h‘j–.hœjC.h�hàhƒ}rœ.(h…]hŽ]h‡]h†]h�]uh¤Kh¦]r�.(j))�rž.}rŸ.(h‚XO`Code Composer Studio `__hƒ}r .(UnameXCode Composer Studioj-X4http://processors.wiki.ti.com/index.php/Download_CCSh†]h‡]h…]hŽ]h�]uh‘jš.h¦]r¡.h¯XCode Composer Studior¢.…�r£.}r¤.(h‚Uh‘jž.ubah�j2ubh¯X8 (choose version as specified on Proc SDK download page)r¥.…�r¦.}r§.(h‚X8 (choose version as specified on Proc SDK download page)h‘jš.ubeubaubeubj)�r¨.}r©.(h‚X[Please be sure that you have the same version number for both Processor SDK RTOS and Linux.h‘j[.hœjC.h�jhƒ}rª.(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r«.hÜ)�r¬.}r­.(h‚X[Please be sure that you have the same version number for both Processor SDK RTOS and Linux.r®.h‘j¨.hœjC.h�hàhƒ}r¯.(h…]hŽ]h‡]h†]h�]uh¤Kh¦]r°.h¯X[Please be sure that you have the same version number for both Processor SDK RTOS and Linux.r±.…�r².}r³.(h‚j®.h‘j¬.ubaubaubhÜ)�r´.}rµ.(h‚XdFor reference within the context of this page, the Linux SDK is installed at the following location:r¶.h‘j[.hœjC.h�hàhƒ}r·.(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]r¸.h¯XdFor reference within the context of this page, the Linux SDK is installed at the following location:r¹.…�rº.}r».(h‚j¶.h‘j´.ubaubj¡)�r¼.}r½.(h‚X6/mnt/data/user/ti-processor-sdk-linux-k2g-evm-xx.xx.xx.xx ├── bin ├── board-support ├── docs ├── example-applications ├── filesystem ├── linux-devkit ├── linux-devkit.sh ├── Makefile ├── Rules.make └── setup.shh‘j[.hœjC.h�j¤hƒ}r¾.(hÊhËh†]h‡]h…]hŽ]h�]uh¤Mé h¥hh¦]r¿.h¯X6/mnt/data/user/ti-processor-sdk-linux-k2g-evm-xx.xx.xx.xx ├── bin ├── board-support ├── docs ├── example-applications ├── filesystem ├── linux-devkit ├── linux-devkit.sh ├── Makefile ├── Rules.make └── setup.shrÀ.…�rÁ.}rÂ.(h‚Uh‘j¼.ubaubhÜ)�rÃ.}rÄ.(h‚X4The RTOS SDK is installed at the following location:rÅ.h‘j[.hœjC.h�hàhƒ}rÆ.(h…]hŽ]h‡]h†]h�]uh¤K)h¥hh¦]rÇ.h¯X4The RTOS SDK is installed at the following location:rÈ.…�rÉ.}rÊ.(h‚jÅ.h‘jÃ.ubaubj¡)�rË.}rÌ.(h‚X¢/mnt/data/user/my_custom_install_sdk_rtos_k2g_xx_xx.xx ├── bios_6_xx_xx_xx ├── cg_xml ├── ctoolslib_x_x_x_x ├── dsplib_c66x_x_x_x_x ├── edma3_lld_x_xx_x_xxx ├── framework_components_x_xx_xx_xx ├── gcc-arm-none-eabi-6-2017-q1-update ├── imglib_c66x_x_x_x_x ├── ipc_3_xx_xx_xx ├── mathlib_c66x_x_x_x_x ├── multiprocmgr_x_x_x_x ├── ndk_3_xx_xx_xx ├── openmp_dsp_k2g_2_xx_xx_xx ├── pdk_k2g_x_x_xx ├── processor_sdk_rtos_k2g_x_xx_xx_xx ├── uia_2_xx_xx_xx ├── xdais_7_xx_xx_xx ├── xdctools_3_xx_xx_xxh‘j[.hœjC.h�j¤hƒ}rÍ.(hÊhËh†]h‡]h…]hŽ]h�]uh¤Mú h¥hh¦]rÎ.h¯X¢/mnt/data/user/my_custom_install_sdk_rtos_k2g_xx_xx.xx ├── bios_6_xx_xx_xx ├── cg_xml ├── ctoolslib_x_x_x_x ├── dsplib_c66x_x_x_x_x ├── edma3_lld_x_xx_x_xxx ├── framework_components_x_xx_xx_xx ├── gcc-arm-none-eabi-6-2017-q1-update ├── imglib_c66x_x_x_x_x ├── ipc_3_xx_xx_xx ├── mathlib_c66x_x_x_x_x ├── multiprocmgr_x_x_x_x ├── ndk_3_xx_xx_xx ├── openmp_dsp_k2g_2_xx_xx_xx ├── pdk_k2g_x_x_xx ├── processor_sdk_rtos_k2g_x_xx_xx_xx ├── uia_2_xx_xx_xx ├── xdais_7_xx_xx_xx ├── xdctools_3_xx_xx_xxrÏ.…�rÐ.}rÑ.(h‚Uh‘jË.ubaubhþ)�rÒ.}rÓ.(h‚Uh‘j[.hœjC.h�jhƒ}rÔ.(h…]hŽ]h‡]h†]h�]uh¤KBh¥hh¦]rÕ.j)�rÖ.}r×.(h‚UjKh‘jÒ.hœjC.h�h¤hƒ}rØ.(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubeubh–)�rÙ.}rÚ.(h‚Uh‘j1.hœjC.h�hžhƒ}rÛ.(h…]hŽ]h‡]h†]rÜ.Umultiple-processor-managerrÝ.ah�]rÞ.hauh¤KEh¥hh¦]rß.(h¨)�rà.}rá.(h‚XMultiple Processor Managerrâ.h‘jÙ.hœjC.h�h¬hƒ}rã.(h…]hŽ]h‡]h†]h�]uh¤KEh¥hh¦]rä.h¯XMultiple Processor Managerrå.…�ræ.}rç.(h‚jâ.h‘jà.ubaubhÜ)�rè.}ré.(h‚X˜The Multiple Processor Manager (MPM) module is used to load and run DSP images from the ARM. The following section provides some more detail on the MPM.rê.h‘jÙ.hœjC.h�hàhƒ}rë.(h…]hŽ]h‡]h†]h�]uh¤KGh¥hh¦]rì.h¯X˜The Multiple Processor Manager (MPM) module is used to load and run DSP images from the ARM. The following section provides some more detail on the MPM.rí.…�rî.}rï.(h‚jê.h‘jè.ubaubj)�rð.}rñ.(h‚Uh‘jÙ.hœjC.h�j!hƒ}rò.(j#X-h†]h‡]h…]hŽ]h�]uh¤KJh¥hh¦]ró.(j@)�rô.}rõ.(h‚XäThe MPM has the two following major components: - MPM server (mpmsrv): It runs as a daemon and runs automatically in the default filesystem supplied in Processor SDK. It parses the MPM configuration file from /etc/mpm/mpm_config.json, and then waits on a UNIX domain socket. The MPM server runs and maintains a state machine for each slave core. - MPM command line/client utility (mpmcl): It is installed in the filesystem and provides command line access to the server. h‘jð.hœNh�jChƒ}rö.(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r÷.(hÜ)�rø.}rù.(h‚X/The MPM has the two following major components:rú.h‘jô.hœjC.h�hàhƒ}rû.(h…]hŽ]h‡]h†]h�]uh¤KJh¦]rü.h¯X/The MPM has the two following major components:rý.…�rþ.}rÿ.(h‚jú.h‘jø.ubaubj)�r/}r/(h‚Uhƒ}r/(j#X-h†]h‡]h…]hŽ]h�]uh‘jô.h¦]r/(j@)�r/}r/(h‚X'MPM server (mpmsrv): It runs as a daemon and runs automatically in the default filesystem supplied in Processor SDK. It parses the MPM configuration file from /etc/mpm/mpm_config.json, and then waits on a UNIX domain socket. The MPM server runs and maintains a state machine for each slave core.r/hƒ}r/(h…]hŽ]h‡]h†]h�]uh‘j/h¦]r/hÜ)�r /}r /(h‚j/h‘j/hœjC.h�hàhƒ}r /(h…]hŽ]h‡]h†]h�]uh¤KLh¦]r /h¯X'MPM server (mpmsrv): It runs as a daemon and runs automatically in the default filesystem supplied in Processor SDK. It parses the MPM configuration file from /etc/mpm/mpm_config.json, and then waits on a UNIX domain socket. The MPM server runs and maintains a state machine for each slave core.r /…�r/}r/(h‚j/h‘j /ubaubah�jCubj@)�r/}r/(h‚X{MPM command line/client utility (mpmcl): It is installed in the filesystem and provides command line access to the server. hƒ}r/(h…]hŽ]h‡]h†]h�]uh‘j/h¦]r/hÜ)�r/}r/(h‚XzMPM command line/client utility (mpmcl): It is installed in the filesystem and provides command line access to the server.r/h‘j/hœjC.h�hàhƒ}r/(h…]hŽ]h‡]h†]h�]uh¤KMh¦]r/h¯XzMPM command line/client utility (mpmcl): It is installed in the filesystem and provides command line access to the server.r/…�r/}r/(h‚j/h‘j/ubaubah�jCubeh�j!ubeubj@)�r/}r/(h‚XöThe following are the different methods that can be used by MPM to load and run slave images: - Using mpmcl utility. - From the config file, to load at bootup. - Writing an application to use mpmclient header file and library. h‘jð.hœNh�jChƒ}r/(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r/(hÜ)�r /}r!/(h‚X]The following are the different methods that can be used by MPM to load and run slave images:r"/h‘j/hœjC.h�hàhƒ}r#/(h…]hŽ]h‡]h†]h�]uh¤KOh¦]r$/h¯X]The following are the different methods that can be used by MPM to load and run slave images:r%/…�r&/}r'/(h‚j"/h‘j /ubaubj)�r(/}r)/(h‚Uhƒ}r*/(j#X-h†]h‡]h…]hŽ]h�]uh‘j/h¦]r+/(j@)�r,/}r-/(h‚XUsing mpmcl utility.r./hƒ}r//(h…]hŽ]h‡]h†]h�]uh‘j(/h¦]r0/hÜ)�r1/}r2/(h‚j./h‘j,/hœjC.h�hàhƒ}r3/(h…]hŽ]h‡]h†]h�]uh¤KQh¦]r4/h¯XUsing mpmcl utility.r5/…�r6/}r7/(h‚j./h‘j1/ubaubah�jCubj@)�r8/}r9/(h‚X(From the config file, to load at bootup.r:/hƒ}r;/(h…]hŽ]h‡]h†]h�]uh‘j(/h¦]r/(h‚j:/h‘j8/hœjC.h�hàhƒ}r?/(h…]hŽ]h‡]h†]h�]uh¤KRh¦]r@/h¯X(From the config file, to load at bootup.rA/…�rB/}rC/(h‚j:/h‘j=/ubaubah�jCubj@)�rD/}rE/(h‚XAWriting an application to use mpmclient header file and library. hƒ}rF/(h…]hŽ]h‡]h†]h�]uh‘j(/h¦]rG/hÜ)�rH/}rI/(h‚X@Writing an application to use mpmclient header file and library.rJ/h‘jD/hœjC.h�hàhƒ}rK/(h…]hŽ]h‡]h†]h�]uh¤KSh¦]rL/h¯X@Writing an application to use mpmclient header file and library.rM/…�rN/}rO/(h‚jJ/h‘jH/ubaubah�jCubeh�j!ubeubj@)�rP/}rQ/(h‚X’The location of the mpm server/daemon logs is based on the "outputif" configuration in the JSON config file. By default, this is /var/log/syslog. h‘jð.hœjC.h�jChƒ}rR/(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rS/hÜ)�rT/}rU/(h‚X‘The location of the mpm server/daemon logs is based on the "outputif" configuration in the JSON config file. By default, this is /var/log/syslog.rV/h‘jP/hœjC.h�hàhƒ}rW/(h…]hŽ]h‡]h†]h�]uh¤KUh¦]rX/h¯X‘The location of the mpm server/daemon logs is based on the "outputif" configuration in the JSON config file. By default, this is /var/log/syslog.rY/…�rZ/}r[/(h‚jV/h‘jT/ubaubaubj@)�r\/}r]/(h‚XwThe load command writes the slave image segments to memory using UIO interface. The run command runs the slave images. h‘jð.hœjC.h�jChƒ}r^/(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r_/hÜ)�r`/}ra/(h‚XvThe load command writes the slave image segments to memory using UIO interface. The run command runs the slave images.rb/h‘j\/hœjC.h�hàhƒ}rc/(h…]hŽ]h‡]h†]h�]uh¤KWh¦]rd/h¯XvThe load command writes the slave image segments to memory using UIO interface. The run command runs the slave images.re/…�rf/}rg/(h‚jb/h‘j`/ubaubaubj@)�rh/}ri/(h‚XtAll events from the state transition diagram are available as options of mpmcl command, except for the crash event. h‘jð.hœjC.h�jChƒ}rj/(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rk/hÜ)�rl/}rm/(h‚XsAll events from the state transition diagram are available as options of mpmcl command, except for the crash event.rn/h‘jh/hœjC.h�hàhƒ}ro/(h…]hŽ]h‡]h†]h�]uh¤KYh¦]rp/h¯XsAll events from the state transition diagram are available as options of mpmcl command, except for the crash event.rq/…�rr/}rs/(h‚jn/h‘jl/ubaubaubj@)�rt/}ru/(h‚X-The reset state powers down the slave nodes. h‘jð.hœjC.h�jChƒ}rv/(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rw/hÜ)�rx/}ry/(h‚X,The reset state powers down the slave nodes.rz/h‘jt/hœjC.h�hàhƒ}r{/(h…]hŽ]h‡]h†]h�]uh¤K[h¦]r|/h¯X,The reset state powers down the slave nodes.r}/…�r~/}r/(h‚jz/h‘jx/ubaubaubeubhÜ)�r€/}r�/(h‚X-**Software Flow Diagram Slave States in MPM**r‚/h‘jÙ.hœjC.h�hàhƒ}rƒ/(h…]hŽ]h‡]h†]h�]uh¤K]h¥hh¦]r„/j¯)�r…/}r†/(h‚j‚/hƒ}r‡/(h…]hŽ]h‡]h†]h�]uh‘j€/h¦]rˆ/h¯X)Software Flow Diagram Slave States in MPMr‰/…�rŠ/}r‹/(h‚Uh‘j…/ubah�j·ubaubjr)�rŒ/}r�/(h‚X'.. Image:: ../images/MPM_Structure.png h‘jÙ.hœjC.h�jyhƒ}rŽ/(UuriX!linux/../images/MPM_Structure.pngr�/h†]h‡]h…]hŽ]jw}r�/U*j�/sh�]uh¤K`h¥hh¦]ubh–)�r‘/}r’/(h‚Uh‘jÙ.hœjC.h�hžhƒ}r“/(h…]hŽ]h‡]h†]r”/U,methods-to-load-and-run-elf-images-using-mpmr•/ah�]r–/hauh¤Kbh¥hh¦]r—/(h¨)�r˜/}r™/(h‚X,Methods to load and run ELF images using MPMrš/h‘j‘/hœjC.h�h¬hƒ}r›/(h…]hŽ]h‡]h†]h�]uh¤Kbh¥hh¦]rœ/h¯X,Methods to load and run ELF images using MPMr�/…�rž/}rŸ/(h‚jš/h‘j˜/ubaubhÜ)�r /}r¡/(h‚X2**Using mpmcl utility to manage slave processors**r¢/h‘j‘/hœjC.h�hàhƒ}r£/(h…]hŽ]h‡]h†]h�]uh¤Kdh¥hh¦]r¤/j¯)�r¥/}r¦/(h‚j¢/hƒ}r§/(h…]hŽ]h‡]h†]h�]uh‘j /h¦]r¨/h¯X.Using mpmcl utility to manage slave processorsr©/…�rª/}r«/(h‚Uh‘j¥/ubah�j·ubaubhÜ)�r¬/}r­/(h‚XbUse mpmcl --help for details on the supported commands. The following is the output of mpmcl help:r®/h‘j‘/hœjC.h�hàhƒ}r¯/(h…]hŽ]h‡]h†]h�]uh¤Kfh¥hh¦]r°/h¯XbUse mpmcl --help for details on the supported commands. The following is the output of mpmcl help:r±/…�r²/}r³/(h‚j®/h‘j¬/ubaubj¡)�r´/}rµ/(h‚X¥Usage: mpmcl [slave name] [options] Multiproc manager CLI to manage slave processors Commands for the slave processor Supported commands: ping, load, run, reset, status, coredump, transport load_withpreload, run_withpreload [slave name] Name of the slave processor as specified in MPM config file [options] In case of load, the option field need to have image file nameh‘j‘/hœjC.h�j¤hƒ}r¶/(hÊhËh†]h‡]h…]hŽ]h�]uh¤M7 h¥hh¦]r·/h¯X¥Usage: mpmcl [slave name] [options] Multiproc manager CLI to manage slave processors Commands for the slave processor Supported commands: ping, load, run, reset, status, coredump, transport load_withpreload, run_withpreload [slave name] Name of the slave processor as specified in MPM config file [options] In case of load, the option field need to have image file namer¸/…�r¹/}rº/(h‚Uh‘j´/ubaubhÜ)�r»/}r¼/(h‚XNThe following is a sample set of mpmcl commands for managing slave processors:r½/h‘j‘/hœjC.h�hàhƒ}r¾/(h…]hŽ]h‡]h†]h�]uh¤Ksh¥hh¦]r¿/h¯XNThe following is a sample set of mpmcl commands for managing slave processors:rÀ/…�rÁ/}rÂ/(h‚j½/h‘j»/ubaubjB)�rÃ/}rÄ/(h‚Uh‘j‘/hœjC.h�jEhƒ}rÅ/(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rÆ/jH)�rÇ/}rÈ/(h‚Uhƒ}rÉ/(h†]h‡]h…]hŽ]h�]UcolsKuh‘jÃ/h¦]rÊ/(jM)�rË/}rÌ/(h‚Uhƒ}rÍ/(h†]h‡]h…]hŽ]h�]UcolwidthK=uh‘jÇ/h¦]h�jQubjM)�rÎ/}rÏ/(h‚Uhƒ}rÐ/(h†]h‡]h…]hŽ]h�]UcolwidthK0uh‘jÇ/h¦]h�jQubjX)�rÑ/}rÒ/(h‚Uhƒ}rÓ/(h…]hŽ]h‡]h†]h�]uh‘jÇ/h¦]rÔ/j])�rÕ/}rÖ/(h‚Uhƒ}r×/(h…]hŽ]h‡]h†]h�]uh‘jÑ/h¦]rØ/(jb)�rÙ/}rÚ/(h‚Uhƒ}rÛ/(h…]hŽ]h‡]h†]h�]uh‘jÕ/h¦]rÜ/hÜ)�rÝ/}rÞ/(h‚XCommandrß/h‘jÙ/hœjC.h�hàhƒ}rà/(h…]hŽ]h‡]h†]h�]uh¤Kwh¦]rá/h¯XCommandrâ/…�rã/}rä/(h‚jß/h‘jÝ/ubaubah�joubjb)�rå/}ræ/(h‚Uhƒ}rç/(h…]hŽ]h‡]h†]h�]uh‘jÕ/h¦]rè/hÜ)�ré/}rê/(h‚X Descriptionrë/h‘jå/hœjC.h�hàhƒ}rì/(h…]hŽ]h‡]h†]h�]uh¤Kwh¦]rí/h¯X Descriptionrî/…�rï/}rð/(h‚jë/h‘jé/ubaubah�joubeh�jˆubah�j‰ubjŠ)�rñ/}rò/(h‚Uhƒ}ró/(h…]hŽ]h‡]h†]h�]uh‘jÇ/h¦]rô/(j])�rõ/}rö/(h‚Uhƒ}r÷/(h…]hŽ]h‡]h†]h�]uh‘jñ/h¦]rø/(jb)�rù/}rú/(h‚Uhƒ}rû/(h…]hŽ]h‡]h†]h�]uh‘jõ/h¦]rü/hÜ)�rý/}rþ/(h‚X mpmcl pingrÿ/h‘jù/hœjC.h�hàhƒ}r0(h…]hŽ]h‡]h†]h�]uh¤Kyh¦]r0h¯X mpmcl pingr0…�r0}r0(h‚jÿ/h‘jý/ubaubah�joubjb)�r0}r0(h‚Uhƒ}r0(h…]hŽ]h‡]h†]h�]uh‘jõ/h¦]r0hÜ)�r 0}r 0(h‚XPing daemon if it is aliver 0h‘j0hœjC.h�hàhƒ}r 0(h…]hŽ]h‡]h†]h�]uh¤Kyh¦]r 0h¯XPing daemon if it is aliver0…�r0}r0(h‚j 0h‘j 0ubaubah�joubeh�jˆubj])�r0}r0(h‚Uhƒ}r0(h…]hŽ]h‡]h†]h�]uh‘jñ/h¦]r0(jb)�r0}r0(h‚Uhƒ}r0(h…]hŽ]h‡]h†]h�]uh‘j0h¦]r0hÜ)�r0}r0(h‚Xmpmcl status dsp0r0h‘j0hœjC.h�hàhƒ}r0(h…]hŽ]h‡]h†]h�]uh¤K{h¦]r0h¯Xmpmcl status dsp0r0…�r0}r 0(h‚j0h‘j0ubaubah�joubjb)�r!0}r"0(h‚Uhƒ}r#0(h…]hŽ]h‡]h†]h�]uh‘j0h¦]r$0hÜ)�r%0}r&0(h‚XCheck status of dsp core 0r'0h‘j!0hœjC.h�hàhƒ}r(0(h…]hŽ]h‡]h†]h�]uh¤K{h¦]r)0h¯XCheck status of dsp core 0r*0…�r+0}r,0(h‚j'0h‘j%0ubaubah�joubeh�jˆubj])�r-0}r.0(h‚Uhƒ}r/0(h…]hŽ]h‡]h†]h�]uh‘jñ/h¦]r00(jb)�r10}r20(h‚Uhƒ}r30(h…]hŽ]h‡]h†]h�]uh‘j-0h¦]r40hÜ)�r50}r60(h‚Xmpmcl load dsp0 dsp-core0.outr70h‘j10hœjC.h�hàhƒ}r80(h…]hŽ]h‡]h†]h�]uh¤K}h¦]r90h¯Xmpmcl load dsp0 dsp-core0.outr:0…�r;0}r<0(h‚j70h‘j50ubaubah�joubjb)�r=0}r>0(h‚Uhƒ}r?0(h…]hŽ]h‡]h†]h�]uh‘j-0h¦]r@0hÜ)�rA0}rB0(h‚XLoad dsp core 0 with an imagerC0h‘j=0hœjC.h�hàhƒ}rD0(h…]hŽ]h‡]h†]h�]uh¤K}h¦]rE0h¯XLoad dsp core 0 with an imagerF0…�rG0}rH0(h‚jC0h‘jA0ubaubah�joubeh�jˆubj])�rI0}rJ0(h‚Uhƒ}rK0(h…]hŽ]h‡]h†]h�]uh‘jñ/h¦]rL0(jb)�rM0}rN0(h‚Uhƒ}rO0(h…]hŽ]h‡]h†]h�]uh‘jI0h¦]rP0hÜ)�rQ0}rR0(h‚Xmpmcl run dsp0rS0h‘jM0hœjC.h�hàhƒ}rT0(h…]hŽ]h‡]h†]h�]uh¤Kh¦]rU0h¯Xmpmcl run dsp0rV0…�rW0}rX0(h‚jS0h‘jQ0ubaubah�joubjb)�rY0}rZ0(h‚Uhƒ}r[0(h…]hŽ]h‡]h†]h�]uh‘jI0h¦]r\0hÜ)�r]0}r^0(h‚XRun dsp core 0r_0h‘jY0hœjC.h�hàhƒ}r`0(h…]hŽ]h‡]h†]h�]uh¤Kh¦]ra0h¯XRun dsp core 0rb0…�rc0}rd0(h‚j_0h‘j]0ubaubah�joubeh�jˆubj])�re0}rf0(h‚Uhƒ}rg0(h…]hŽ]h‡]h†]h�]uh‘jñ/h¦]rh0(jb)�ri0}rj0(h‚Uhƒ}rk0(h…]hŽ]h‡]h†]h�]uh‘je0h¦]rl0hÜ)�rm0}rn0(h‚Xmpmcl reset dsp0ro0h‘ji0hœjC.h�hàhƒ}rp0(h…]hŽ]h‡]h†]h�]uh¤K�h¦]rq0h¯Xmpmcl reset dsp0rr0…�rs0}rt0(h‚jo0h‘jm0ubaubah�joubjb)�ru0}rv0(h‚Uhƒ}rw0(h…]hŽ]h‡]h†]h�]uh‘je0h¦]rx0hÜ)�ry0}rz0(h‚XReset dsp core 0r{0h‘ju0hœjC.h�hàhƒ}r|0(h…]hŽ]h‡]h†]h�]uh¤K�h¦]r}0h¯XReset dsp core 0r~0…�r0}r€0(h‚j{0h‘jy0ubaubah�joubeh�jˆubj])�r�0}r‚0(h‚Uhƒ}rƒ0(h…]hŽ]h‡]h†]h�]uh‘jñ/h¦]r„0(jb)�r…0}r†0(h‚Uhƒ}r‡0(h…]hŽ]h‡]h†]h�]uh‘j�0h¦]rˆ0hÜ)�r‰0}rŠ0(h‚X;mpmcl load_withpreload dsp0 preload_image.out dsp-core0.outr‹0h‘j…0hœjC.h�hàhƒ}rŒ0(h…]hŽ]h‡]h†]h�]uh¤Kƒh¦]r�0h¯X;mpmcl load_withpreload dsp0 preload_image.out dsp-core0.outrŽ0…�r�0}r�0(h‚j‹0h‘j‰0ubaubah�joubjb)�r‘0}r’0(h‚Uhƒ}r“0(h…]hŽ]h‡]h†]h�]uh‘j�0h¦]r”0hÜ)�r•0}r–0(h‚X*Load dsp core 0 image with a preload imager—0h‘j‘0hœjC.h�hàhƒ}r˜0(h…]hŽ]h‡]h†]h�]uh¤Kƒh¦]r™0h¯X*Load dsp core 0 image with a preload imagerš0…�r›0}rœ0(h‚j—0h‘j•0ubaubah�joubeh�jˆubj])�r�0}rž0(h‚Uhƒ}rŸ0(h…]hŽ]h‡]h†]h�]uh‘jñ/h¦]r 0(jb)�r¡0}r¢0(h‚Uhƒ}r£0(h…]hŽ]h‡]h†]h�]uh‘j�0h¦]r¤0hÜ)�r¥0}r¦0(h‚Xmpmcl run_withpreload dsp0r§0h‘j¡0hœjC.h�hàhƒ}r¨0(h…]hŽ]h‡]h†]h�]uh¤K…h¦]r©0h¯Xmpmcl run_withpreload dsp0rª0…�r«0}r¬0(h‚j§0h‘j¥0ubaubah�joubjb)�r­0}r®0(h‚Uhƒ}r¯0(h…]hŽ]h‡]h†]h�]uh‘j�0h¦]r°0hÜ)�r±0}r²0(h‚XRun dsp core 0 with preloadr³0h‘j­0hœjC.h�hàhƒ}r´0(h…]hŽ]h‡]h†]h�]uh¤K…h¦]rµ0h¯XRun dsp core 0 with preloadr¶0…�r·0}r¸0(h‚j³0h‘j±0ubaubah�joubeh�jˆubeh�jWubeh�jXubaubj)�r¹0}rº0(h‚XµIn the case of an error, the mpm server takes the slave to error state. You need to run the reset command to change back to idle state so that the slave can be loaded and run again.r»0h‘j‘/hœjC.h�jhƒ}r¼0(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r½0hÜ)�r¾0}r¿0(h‚j»0h‘j¹0hœjC.h�hàhƒ}rÀ0(h…]hŽ]h‡]h†]h�]uh¤K‰h¦]rÁ0h¯XµIn the case of an error, the mpm server takes the slave to error state. You need to run the reset command to change back to idle state so that the slave can be loaded and run again.rÂ0…�rÃ0}rÄ0(h‚j»0h‘j¾0ubaubaubj)�rÅ0}rÆ0(h‚XžThe idle status of the slave core means the slave core is not loaded as far as MPM is concerned. It does NOT mean the slave core is running idle instructions.rÇ0h‘j‘/hœjC.h�jhƒ}rÈ0(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rÉ0hÜ)�rÊ0}rË0(h‚jÇ0h‘jÅ0hœjC.h�hàhƒ}rÌ0(h…]hŽ]h‡]h†]h�]uh¤K‹h¦]rÍ0h¯XžThe idle status of the slave core means the slave core is not loaded as far as MPM is concerned. It does NOT mean the slave core is running idle instructions.rÎ0…�rÏ0}rÐ0(h‚jÇ0h‘jÊ0ubaubaubhþ)�rÑ0}rÒ0(h‚Uh‘j‘/hœjC.h�jhƒ}rÓ0(h…]hŽ]h‡]h†]h�]uh¤K�h¥hh¦]rÔ0j)�rÕ0}rÖ0(h‚UjKh‘jÑ0hœjC.h�h¤hƒ}r×0(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�rØ0}rÙ0(h‚X.**Loading and running slave images at bootup**rÚ0h‘j‘/hœjC.h�hàhƒ}rÛ0(h…]hŽ]h‡]h†]h�]uh¤K�h¥hh¦]rÜ0j¯)�rÝ0}rÞ0(h‚jÚ0hƒ}rß0(h…]hŽ]h‡]h†]h�]uh‘jØ0h¦]rà0h¯X*Loading and running slave images at bootuprá0…�râ0}rã0(h‚Uh‘jÝ0ubah�j·ubaubhÜ)�rä0}rå0(h‚XðThe config file can load a command script to load and run slave cores at bootup. The path of the script is to be added in "cmdfile": "/etc/mpm/slave_cmds.txt" in the config file. The following is a sample command to load and run DSP images:ræ0h‘j‘/hœjC.h�hàhƒ}rç0(h…]hŽ]h‡]h†]h�]uh¤K‘h¥hh¦]rè0h¯XðThe config file can load a command script to load and run slave cores at bootup. The path of the script is to be added in "cmdfile": "/etc/mpm/slave_cmds.txt" in the config file. The following is a sample command to load and run DSP images:ré0…�rê0}rë0(h‚jæ0h‘jä0ubaubj¡)�rì0}rí0(h‚XEdsp0 load ./dsp-core0.out dsp1 load ./dsp-core0.out dsp0 run dsp1 runh‘j‘/hœjC.h�j¤hƒ}rî0(hÊhËh†]h‡]h…]hŽ]h�]uh¤Mb h¥hh¦]rï0h¯XEdsp0 load ./dsp-core0.out dsp1 load ./dsp-core0.out dsp0 run dsp1 runrð0…�rñ0}rò0(h‚Uh‘jì0ubaubhÜ)�ró0}rô0(h‚X6**Managing slave processors from application program**rõ0h‘j‘/hœjC.h�hàhƒ}rö0(h…]hŽ]h‡]h†]h�]uh¤Kšh¥hh¦]r÷0j¯)�rø0}rù0(h‚jõ0hƒ}rú0(h…]hŽ]h‡]h†]h�]uh‘jó0h¦]rû0h¯X2Managing slave processors from application programrü0…�rý0}rþ0(h‚Uh‘jø0ubah�j·ubaubhÜ)�rÿ0}r1(h‚XïAn application can include mpmclient.h from the MPM package and link to libmpmclient.a to load/run/reset slave cores. The mpmcl essentially is a wrapper around this library to provide command line access for the functions from mpmclient.h.r1h‘j‘/hœjC.h�hàhƒ}r1(h…]hŽ]h‡]h†]h�]uh¤Kœh¥hh¦]r1h¯XïAn application can include mpmclient.h from the MPM package and link to libmpmclient.a to load/run/reset slave cores. The mpmcl essentially is a wrapper around this library to provide command line access for the functions from mpmclient.h.r1…�r1}r1(h‚j1h‘jÿ0ubaubhÜ)�r1}r1(h‚X**DSP Image Requirements**r 1h‘j‘/hœjC.h�hàhƒ}r 1(h…]hŽ]h‡]h†]h�]uh¤Kžh¥hh¦]r 1j¯)�r 1}r 1(h‚j 1hƒ}r1(h…]hŽ]h‡]h†]h�]uh‘j1h¦]r1h¯XDSP Image Requirementsr1…�r1}r1(h‚Uh‘j 1ubah�j·ubaubhÜ)�r1}r1(h‚XKFor MPM to properly load and manage a DSP image, the following is required:r1h‘j‘/hœjC.h�hàhƒ}r1(h…]hŽ]h‡]h†]h�]uh¤K h¥hh¦]r1h¯XKFor MPM to properly load and manage a DSP image, the following is required:r1…�r1}r1(h‚j1h‘j1ubaubj)�r1}r1(h‚Uh‘j‘/hœjC.h�j!hƒ}r1(j#X-h†]h‡]h…]hŽ]h�]uh¤K¢h¥hh¦]r1(j@)�r1}r 1(h‚X'The DSP image should be in ELF format. h‘j1hœjC.h�jChƒ}r!1(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r"1hÜ)�r#1}r$1(h‚X&The DSP image should be in ELF format.r%1h‘j1hœjC.h�hàhƒ}r&1(h…]hŽ]h‡]h†]h�]uh¤K¢h¦]r'1h¯X&The DSP image should be in ELF format.r(1…�r)1}r*1(h‚j%1h‘j#1ubaubaubj@)�r+1}r,1(h‚XµThe MPM ELF loader loads those segments to DSP memory, whose PT_LOAD field is set. In order to skip loading of a particular section, set the type to NOLOAD in the command/cfg file. h‘j1hœjC.h�jChƒ}r-1(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r.1hÜ)�r/1}r01(h‚X´The MPM ELF loader loads those segments to DSP memory, whose PT_LOAD field is set. In order to skip loading of a particular section, set the type to NOLOAD in the command/cfg file.r11h‘j+1hœjC.h�hàhƒ}r21(h…]hŽ]h‡]h†]h�]uh¤K¤h¦]r31h¯X´The MPM ELF loader loads those segments to DSP memory, whose PT_LOAD field is set. In order to skip loading of a particular section, set the type to NOLOAD in the command/cfg file.r41…�r51}r61(h‚j11h‘j/1ubaubaubeubj¡)�r71}r81(h‚Xg/* Section not to be loaded by remoteproc loader */ Program.sectMap[".noload_section"].type = "NOLOAD";h‘j‘/hœjC.h�j¤hƒ}r91(hÊhËh†]h‡]h…]hŽ]r:1(j“ Xceh�]uh¤Kªh¥hh¦]r;1(j• )�r<1}r=1(h‚X3/* Section not to be loaded by remoteproc loader */hƒ}r>1(h…]hŽ]r?1(Ucommentr@1U multilinerA1eh‡]h†]h�]uh‘j71h¦]rB1h¯X3/* Section not to be loaded by remoteproc loader */rC1…�rD1}rE1(h‚Uh‘j<1ubah�jž ubh¯X …�rF1}rG1(h‚X h‘j71ubj• )�rH1}rI1(h‚XProgramhƒ}rJ1(h…]hŽ]rK1UnamerL1ah‡]h†]h�]uh‘j71h¦]rM1h¯XProgramrN1…�rO1}rP1(h‚Uh‘jH1ubah�jž ubj• )�rQ1}rR1(h‚X.hƒ}rS1(h…]hŽ]rT1U punctuationrU1ah‡]h†]h�]uh‘j71h¦]rV1h¯X.…�rW1}rX1(h‚Uh‘jQ1ubah�jž ubj• )�rY1}rZ1(h‚XsectMaphƒ}r[1(h…]hŽ]r\1Unamer]1ah‡]h†]h�]uh‘j71h¦]r^1h¯XsectMapr_1…�r`1}ra1(h‚Uh‘jY1ubah�jž ubj• )�rb1}rc1(h‚X[hƒ}rd1(h…]hŽ]re1U punctuationrf1ah‡]h†]h�]uh‘j71h¦]rg1h¯X[…�rh1}ri1(h‚Uh‘jb1ubah�jž ubj• )�rj1}rk1(h‚X".noload_section"hƒ}rl1(h…]hŽ]rm1(Uliteralrn1Ustringro1eh‡]h†]h�]uh‘j71h¦]rp1h¯X".noload_section"rq1…�rr1}rs1(h‚Uh‘jj1ubah�jž ubj• )�rt1}ru1(h‚X].hƒ}rv1(h…]hŽ]rw1U punctuationrx1ah‡]h†]h�]uh‘j71h¦]ry1h¯X].rz1…�r{1}r|1(h‚Uh‘jt1ubah�jž ubj• )�r}1}r~1(h‚Xtypehƒ}r1(h…]hŽ]r€1Unamer�1ah‡]h†]h�]uh‘j71h¦]r‚1h¯Xtyperƒ1…�r„1}r…1(h‚Uh‘j}1ubah�jž ubh¯X …�r†1}r‡1(h‚X h‘j71ubj• )�rˆ1}r‰1(h‚X=hƒ}rŠ1(h…]hŽ]r‹1UoperatorrŒ1ah‡]h†]h�]uh‘j71h¦]r�1h¯X=…�rŽ1}r�1(h‚Uh‘jˆ1ubah�jž ubh¯X …�r�1}r‘1(h‚X h‘j71ubj• )�r’1}r“1(h‚X"NOLOAD"hƒ}r”1(h…]hŽ]r•1(Uliteralr–1Ustringr—1eh‡]h†]h�]uh‘j71h¦]r˜1h¯X"NOLOAD"r™1…�rš1}r›1(h‚Uh‘j’1ubah�jž ubj• )�rœ1}r�1(h‚X;hƒ}rž1(h…]hŽ]rŸ1U punctuationr 1ah‡]h†]h�]uh‘j71h¦]r¡1h¯X;…�r¢1}r£1(h‚Uh‘jœ1ubah�jž ubeubj)�r¤1}r¥1(h‚Uh‘j‘/hœjC.h�j!hƒ}r¦1(j#X-h†]h‡]h…]hŽ]h�]uh¤K«h¥hh¦]r§1j@)�r¨1}r©1(h‚XCThe default allowed memory ranges for DSP segments are as follows: h‘j¤1hœjC.h�jChƒ}rª1(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r«1hÜ)�r¬1}r­1(h‚XBThe default allowed memory ranges for DSP segments are as follows:r®1h‘j¨1hœjC.h�hàhƒ}r¯1(h…]hŽ]h‡]h†]h�]uh¤K«h¦]r°1h¯XBThe default allowed memory ranges for DSP segments are as follows:r±1…�r²1}r³1(h‚j®1h‘j¬1ubaubaubaubjB)�r´1}rµ1(h‚Uh‘j‘/hœjC.h�jEhƒ}r¶1(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r·1jH)�r¸1}r¹1(h‚Uhƒ}rº1(h†]h‡]h…]hŽ]h�]UcolsKuh‘j´1h¦]r»1(jM)�r¼1}r½1(h‚Uhƒ}r¾1(h†]h‡]h…]hŽ]h�]UcolwidthKuh‘j¸1h¦]h�jQubjM)�r¿1}rÀ1(h‚Uhƒ}rÁ1(h†]h‡]h…]hŽ]h�]UcolwidthKuh‘j¸1h¦]h�jQubjM)�rÂ1}rÃ1(h‚Uhƒ}rÄ1(h†]h‡]h…]hŽ]h�]UcolwidthK uh‘j¸1h¦]h�jQubjX)�rÅ1}rÆ1(h‚Uhƒ}rÇ1(h…]hŽ]h‡]h†]h�]uh‘j¸1h¦]rÈ1j])�rÉ1}rÊ1(h‚Uhƒ}rË1(h…]hŽ]h‡]h†]h�]uh‘jÅ1h¦]rÌ1(jb)�rÍ1}rÎ1(h‚Uhƒ}rÏ1(h…]hŽ]h‡]h†]h�]uh‘jÉ1h¦]h�joubjb)�rÐ1}rÑ1(h‚Uhƒ}rÒ1(h…]hŽ]h‡]h†]h�]uh‘jÉ1h¦]rÓ1hÜ)�rÔ1}rÕ1(h‚X Start AddressrÖ1h‘jÐ1hœjC.h�hàhƒ}r×1(h…]hŽ]h‡]h†]h�]uh¤K®h¦]rØ1h¯X Start AddressrÙ1…�rÚ1}rÛ1(h‚jÖ1h‘jÔ1ubaubah�joubjb)�rÜ1}rÝ1(h‚Uhƒ}rÞ1(h…]hŽ]h‡]h†]h�]uh‘jÉ1h¦]rß1hÜ)�rà1}rá1(h‚XLengthrâ1h‘jÜ1hœjC.h�hàhƒ}rã1(h…]hŽ]h‡]h†]h�]uh¤K®h¦]rä1h¯XLengthrå1…�ræ1}rç1(h‚jâ1h‘jà1ubaubah�joubeh�jˆubah�j‰ubjŠ)�rè1}ré1(h‚Uhƒ}rê1(h…]hŽ]h‡]h†]h�]uh‘j¸1h¦]rë1(j])�rì1}rí1(h‚Uhƒ}rî1(h…]hŽ]h‡]h†]h�]uh‘jè1h¦]rï1(jb)�rð1}rñ1(h‚Uhƒ}rò1(h…]hŽ]h‡]h†]h�]uh‘jì1h¦]ró1hÜ)�rô1}rõ1(h‚XL2 Localrö1h‘jð1hœjC.h�hàhƒ}r÷1(h…]hŽ]h‡]h†]h�]uh¤K°h¦]rø1h¯XL2 Localrù1…�rú1}rû1(h‚jö1h‘jô1ubaubah�joubjb)�rü1}rý1(h‚Uhƒ}rþ1(h…]hŽ]h‡]h†]h�]uh‘jì1h¦]rÿ1hÜ)�r2}r2(h‚X 0x00800000r2h‘jü1hœjC.h�hàhƒ}r2(h…]hŽ]h‡]h†]h�]uh¤K°h¦]r2h¯X 0x00800000r2…�r2}r2(h‚j2h‘j2ubaubah�joubjb)�r2}r 2(h‚Uhƒ}r 2(h…]hŽ]h‡]h†]h�]uh‘jì1h¦]r 2hÜ)�r 2}r 2(h‚X1MBr2h‘j2hœjC.h�hàhƒ}r2(h…]hŽ]h‡]h†]h�]uh¤K°h¦]r2h¯X1MBr2…�r2}r2(h‚j2h‘j 2ubaubah�joubeh�jˆubj])�r2}r2(h‚Uhƒ}r2(h…]hŽ]h‡]h†]h�]uh‘jè1h¦]r2(jb)�r2}r2(h‚Uhƒ}r2(h…]hŽ]h‡]h†]h�]uh‘j2h¦]r2hÜ)�r2}r2(h‚X L2 Globalr2h‘j2hœjC.h�hàhƒ}r2(h…]hŽ]h‡]h†]h�]uh¤K²h¦]r 2h¯X L2 Globalr!2…�r"2}r#2(h‚j2h‘j2ubaubah�joubjb)�r$2}r%2(h‚Uhƒ}r&2(h…]hŽ]h‡]h†]h�]uh‘j2h¦]r'2hÜ)�r(2}r)2(h‚X0x[1-4]0800000r*2h‘j$2hœjC.h�hàhƒ}r+2(h…]hŽ]h‡]h†]h�]uh¤K²h¦]r,2h¯X0x[1-4]0800000r-2…�r.2}r/2(h‚j*2h‘j(2ubaubah�joubjb)�r02}r12(h‚Uhƒ}r22(h…]hŽ]h‡]h†]h�]uh‘j2h¦]r32hÜ)�r42}r52(h‚X1MBr62h‘j02hœjC.h�hàhƒ}r72(h…]hŽ]h‡]h†]h�]uh¤K²h¦]r82h¯X1MBr92…�r:2}r;2(h‚j62h‘j42ubaubah�joubeh�jˆubj])�r<2}r=2(h‚Uhƒ}r>2(h…]hŽ]h‡]h†]h�]uh‘jè1h¦]r?2(jb)�r@2}rA2(h‚Uhƒ}rB2(h…]hŽ]h‡]h†]h�]uh‘j<2h¦]rC2hÜ)�rD2}rE2(h‚XMSMCrF2h‘j@2hœjC.h�hàhƒ}rG2(h…]hŽ]h‡]h†]h�]uh¤K´h¦]rH2h¯XMSMCrI2…�rJ2}rK2(h‚jF2h‘jD2ubaubah�joubjb)�rL2}rM2(h‚Uhƒ}rN2(h…]hŽ]h‡]h†]h�]uh‘j<2h¦]rO2hÜ)�rP2}rQ2(h‚X 0x0C000000rR2h‘jL2hœjC.h�hàhƒ}rS2(h…]hŽ]h‡]h†]h�]uh¤K´h¦]rT2h¯X 0x0C000000rU2…�rV2}rW2(h‚jR2h‘jP2ubaubah�joubjb)�rX2}rY2(h‚Uhƒ}rZ2(h…]hŽ]h‡]h†]h�]uh‘j<2h¦]r[2hÜ)�r\2}r]2(h‚X6MBr^2h‘jX2hœjC.h�hàhƒ}r_2(h…]hŽ]h‡]h†]h�]uh¤K´h¦]r`2h¯X6MBra2…�rb2}rc2(h‚j^2h‘j\2ubaubah�joubeh�jˆubj])�rd2}re2(h‚Uhƒ}rf2(h…]hŽ]h‡]h†]h�]uh‘jè1h¦]rg2(jb)�rh2}ri2(h‚Uhƒ}rj2(h…]hŽ]h‡]h†]h�]uh‘jd2h¦]rk2hÜ)�rl2}rm2(h‚XDDR3rn2h‘jh2hœjC.h�hàhƒ}ro2(h…]hŽ]h‡]h†]h�]uh¤K¶h¦]rp2h¯XDDR3rq2…�rr2}rs2(h‚jn2h‘jl2ubaubah�joubjb)�rt2}ru2(h‚Uhƒ}rv2(h…]hŽ]h‡]h†]h�]uh‘jd2h¦]rw2hÜ)�rx2}ry2(h‚X 0xA0000000rz2h‘jt2hœjC.h�hàhƒ}r{2(h…]hŽ]h‡]h†]h�]uh¤K¶h¦]r|2h¯X 0xA0000000r}2…�r~2}r2(h‚jz2h‘jx2ubaubah�joubjb)�r€2}r�2(h‚Uhƒ}r‚2(h…]hŽ]h‡]h†]h�]uh‘jd2h¦]rƒ2hÜ)�r„2}r…2(h‚X512MBr†2h‘j€2hœjC.h�hàhƒ}r‡2(h…]hŽ]h‡]h†]h�]uh¤K¶h¦]rˆ2h¯X512MBr‰2…�rŠ2}r‹2(h‚j†2h‘j„2ubaubah�joubeh�jˆubeh�jWubeh�jXubaubhÜ)�rŒ2}r�2(h‚XZThe segment mapping can be changed using the mpm_config.json and Linux kernel device tree.rŽ2h‘j‘/hœjC.h�hàhƒ}r�2(h…]hŽ]h‡]h†]h�]uh¤Kºh¥hh¦]r�2h¯XZThe segment mapping can be changed using the mpm_config.json and Linux kernel device tree.r‘2…�r’2}r“2(h‚jŽ2h‘jŒ2ubaubhþ)�r”2}r•2(h‚Uh‘j‘/hœjC.h�jhƒ}r–2(h…]hŽ]h‡]h†]h�]uh¤K¼h¥hh¦]r—2j)�r˜2}r™2(h‚UjKh‘j”2hœjC.h�h¤hƒ}rš2(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubeubeubh–)�r›2}rœ2(h‚Uh‘j1.hœjC.h�hžhƒ}r�2(h…]hŽ]h‡]h†]rž2U'getting-started-with-ipc-linux-examplesrŸ2ah�]r 2hPauh¤K¿h¥hh¦]r¡2(h¨)�r¢2}r£2(h‚X'Getting Started with IPC Linux Examplesr¤2h‘j›2hœjC.h�h¬hƒ}r¥2(h…]hŽ]h‡]h†]h�]uh¤K¿h¥hh¦]r¦2h¯X'Getting Started with IPC Linux Examplesr§2…�r¨2}r©2(h‚j¤2h‘j¢2ubaubhÜ)�rª2}r«2(h‚X—The figure below illustrates how remoteproc/rpmsg driver from ARM Linux kernel communicates with IPC driver on slave processor (e.g. DSP) running RTOS.r¬2h‘j›2hœjC.h�hàhƒ}r­2(h…]hŽ]h‡]h†]h�]uh¤KÁh¥hh¦]r®2h¯X—The figure below illustrates how remoteproc/rpmsg driver from ARM Linux kernel communicates with IPC driver on slave processor (e.g. DSP) running RTOS.r¯2…�r°2}r±2(h‚j¬2h‘jª2ubaubjr)�r²2}r³2(h‚X2.. Image:: ../images/LinuxIPC_with_RTOS_Slave.png h‘j›2hœjC.h�jyhƒ}r´2(UuriX,linux/../images/LinuxIPC_with_RTOS_Slave.pngrµ2h†]h‡]h…]hŽ]jw}r¶2U*jµ2sh�]uh¤KÅh¥hh¦]ubhÜ)�r·2}r¸2(h‚XíIn order to setup IPC on slave cores, we provide some pre-built examples in IPC package that can be run from ARM Linux. The subsequent sections describe how to build and run this examples and use that as a starting point for this effort.r¹2h‘j›2hœjC.h�hàhƒ}rº2(h…]hŽ]h‡]h†]h�]uh¤KÆh¥hh¦]r»2h¯XíIn order to setup IPC on slave cores, we provide some pre-built examples in IPC package that can be run from ARM Linux. The subsequent sections describe how to build and run this examples and use that as a starting point for this effort.r¼2…�r½2}r¾2(h‚j¹2h‘j·2ubaubhþ)�r¿2}rÀ2(h‚Uh‘j›2hœjC.h�jhƒ}rÁ2(h…]hŽ]h‡]h†]h�]uh¤KËh¥hh¦]rÂ2j)�rÃ2}rÄ2(h‚UjKh‘j¿2hœjC.h�h¤hƒ}rÅ2(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubh–)�rÆ2}rÇ2(h‚Uh‘j›2hœjC.h�hžhƒ}rÈ2(h…]hŽ]h‡]h†]rÉ2U!building-the-bundled-ipc-examplesrÊ2ah�]rË2hzauh¤KÎh¥hh¦]rÌ2(h¨)�rÍ2}rÎ2(h‚X!Building the Bundled IPC ExamplesrÏ2h‘jÆ2hœjC.h�h¬hƒ}rÐ2(h…]hŽ]h‡]h†]h�]uh¤KÎh¥hh¦]rÑ2h¯X!Building the Bundled IPC ExamplesrÒ2…�rÓ2}rÔ2(h‚jÏ2h‘jÍ2ubaubhÜ)�rÕ2}rÖ2(h‚XÚThe instructions to build IPC examples found under ipc_3_xx_xx_xx/examples/66AK2G_linux_elf have been provided in the `Processor SDK IPC Quick Start Guide `__.h‘jÆ2hœjC.h�hàhƒ}r×2(h…]hŽ]h‡]h†]h�]uh¤KÐh¥hh¦]rØ2(h¯XvThe instructions to build IPC examples found under ipc_3_xx_xx_xx/examples/66AK2G_linux_elf have been provided in the rÙ2…�rÚ2}rÛ2(h‚XvThe instructions to build IPC examples found under ipc_3_xx_xx_xx/examples/66AK2G_linux_elf have been provided in the h‘jÕ2ubj))�rÜ2}rÝ2(h‚Xc`Processor SDK IPC Quick Start Guide `__hƒ}rÞ2(UnameX#Processor SDK IPC Quick Start Guidej-X9Foundational_Components_IPC.html#build-ipc-linux-examplesh†]h‡]h…]hŽ]h�]uh‘jÕ2h¦]rß2h¯X#Processor SDK IPC Quick Start Guiderà2…�rá2}râ2(h‚Uh‘jÜ2ubah�j2ubh¯X.…�rã2}rä2(h‚X.h‘jÕ2ubeubhÜ)�rå2}ræ2(h‚X§Let's focus on one example in particular, ex02\_messageq, which is located at **/ipc\_3\_xx\_xx\_xx/examples/66AK2G\_linux\_elf/ex02\_messageq**.rç2h‘jÆ2hœjC.h�hàhƒ}rè2(h…]hŽ]h‡]h†]h�]uh¤KÓh¥hh¦]ré2(h¯XMLet's focus on one example in particular, ex02_messageq, which is located at rê2…�rë2}rì2(h‚XNLet's focus on one example in particular, ex02\_messageq, which is located at h‘jå2ubj¯)�rí2}rî2(h‚XX**/ipc\_3\_xx\_xx\_xx/examples/66AK2G\_linux\_elf/ex02\_messageq**hƒ}rï2(h…]hŽ]h‡]h†]h�]uh‘jå2h¦]rð2h¯XM/ipc_3_xx_xx_xx/examples/66AK2G_linux_elf/ex02_messageqrñ2…�rò2}ró2(h‚Uh‘jí2ubah�j·ubh¯X.…�rô2}rõ2(h‚X.h‘jå2ubeubhÜ)�rö2}r÷2(h‚XDHere are the key files that you should see after a successful build:rø2h‘jÆ2hœjC.h�hàhƒ}rù2(h…]hŽ]h‡]h†]h�]uh¤KÕh¥hh¦]rú2h¯XDHere are the key files that you should see after a successful build:rû2…�rü2}rý2(h‚jø2h‘jö2ubaubj¡)�rþ2}rÿ2(h‚XN├── core0 │ └── bin │ ├── debug │ │ └── server_core0.xe66 │ └── release │ └── server_core0.xe66 ├── host │ └── bin │ ├── debug │ │ └── app_host │ └── release │ │ └── app_hosth‘jÆ2hœjC.h�j¤hƒ}r3(hÊhËh†]h‡]h…]hŽ]h�]uh¤M¦ h¥hh¦]r3h¯XN├── core0 │ └── bin │ ├── debug │ │ └── server_core0.xe66 │ └── release │ └── server_core0.xe66 ├── host │ └── bin │ ├── debug │ │ └── app_host │ └── release │ │ └── app_hostr3…�r3}r3(h‚Uh‘jþ2ubaubhþ)�r3}r3(h‚Uh‘jÆ2hœjC.h�jhƒ}r3(h…]hŽ]h‡]h†]h�]uh¤Kèh¥hh¦]r3j)�r 3}r 3(h‚UjKh‘j3hœjC.h�h¤hƒ}r 3(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubeubh–)�r 3}r 3(h‚Uh™Kh‘j›2hœjC.h�hžhƒ}r3(h…]hŽ]h‡]h†]r3U running-the-bundled-ipc-examplesr3ah�]r3hNauh¤Këh¥hh¦]r3(h¨)�r3}r3(h‚X Running the Bundled IPC Examplesr3h‘j 3hœjC.h�h¬hƒ}r3(h…]hŽ]h‡]h†]h�]uh¤Këh¥hh¦]r3h¯X Running the Bundled IPC Examplesr3…�r3}r3(h‚j3h‘j3ubaubhÜ)�r3}r3(h‚X**NOTE 1**: Before running the IPC examples, any other application already running and using the DSP cores, need to be stopped and disabled. In addition, the EVM need to be rebooted so that the cache configuration of the previous firmware downloaded does not affect the execution of the example. In the Linux Filesystem distributed part of the Processor SDK, OpenCL examples are configured to run by default. So use the following procedure to shutdown the openCL under section before running the IPC example: `Disable OpenCL Application`_.h‘j 3hœjC.h�hàhƒ}r3(h…]hŽ]h‡]h†]h�]uh¤Kíh¥hh¦]r3(j¯)�r3}r 3(h‚X **NOTE 1**hƒ}r!3(h…]hŽ]h‡]h†]h�]uh‘j3h¦]r"3h¯XNOTE 1r#3…�r$3}r%3(h‚Uh‘j3ubah�j·ubh¯Xó: Before running the IPC examples, any other application already running and using the DSP cores, need to be stopped and disabled. In addition, the EVM need to be rebooted so that the cache configuration of the previous firmware downloaded does not affect the execution of the example. In the Linux Filesystem distributed part of the Processor SDK, OpenCL examples are configured to run by default. So use the following procedure to shutdown the openCL under section before running the IPC example: r&3…�r'3}r(3(h‚Xó: Before running the IPC examples, any other application already running and using the DSP cores, need to be stopped and disabled. In addition, the EVM need to be rebooted so that the cache configuration of the previous firmware downloaded does not affect the execution of the example. In the Linux Filesystem distributed part of the Processor SDK, OpenCL examples are configured to run by default. So use the following procedure to shutdown the openCL under section before running the IPC example: h‘j3ubj))�r)3}r*3(h‚X`Disable OpenCL Application`_Uresolvedr+3Kh‘j3h�j2hƒ}r,3(UnameXDisable OpenCL Applicationh†]h‡]h…]hŽ]h�]Urefidr-3Udisable-opencl-applicationr.3uh¦]r/3h¯XDisable OpenCL Applicationr03…�r13}r23(h‚Uh‘j)3ubaubh¯X.…�r33}r43(h‚X.h‘j3ubeubhÜ)�r53}r63(h‚X**NOTE 2**: If the application really needs to dynamically download different DSP images, especially with different cache configuration, then a dummy image which resets the cache configuration in the DSP, need to be downloaded and run before downloading the actual example images.r73h‘j 3hœjC.h�hàhƒ}r83(h…]hŽ]h‡]h†]h�]uh¤Kñh¥hh¦]r93(j¯)�r:3}r;3(h‚X **NOTE 2**hƒ}r<3(h…]hŽ]h‡]h†]h�]uh‘j53h¦]r=3h¯XNOTE 2r>3…�r?3}r@3(h‚Uh‘j:3ubah�j·ubh¯X: If the application really needs to dynamically download different DSP images, especially with different cache configuration, then a dummy image which resets the cache configuration in the DSP, need to be downloaded and run before downloading the actual example images.rA3…�rB3}rC3(h‚X: If the application really needs to dynamically download different DSP images, especially with different cache configuration, then a dummy image which resets the cache configuration in the DSP, need to be downloaded and run before downloading the actual example images.h‘j53ubeubhÜ)�rD3}rE3(h‚XèYou will need to copy the ex02\_messageq executable binaries onto the target (through SD card, NFS export, SCP, etc.). You can copy the entire ex02\_messageq directory, though we're primarily interested in these executable binaries:h‘j 3hœjC.h�hàhƒ}rF3(h…]hŽ]h‡]h†]h�]uh¤Kóh¥hh¦]rG3h¯XæYou will need to copy the ex02_messageq executable binaries onto the target (through SD card, NFS export, SCP, etc.). You can copy the entire ex02_messageq directory, though we're primarily interested in these executable binaries:rH3…�rI3}rJ3(h‚XèYou will need to copy the ex02\_messageq executable binaries onto the target (through SD card, NFS export, SCP, etc.). You can copy the entire ex02\_messageq directory, though we're primarily interested in these executable binaries:h‘jD3ubaubj)�rK3}rL3(h‚Uh‘j 3hœjC.h�j!hƒ}rM3(j#X-h†]h‡]h…]hŽ]h�]uh¤K÷h¥hh¦]rN3(j@)�rO3}rP3(h‚X"Core0/bin/debug/ server_core0.xe66rQ3h‘jK3hœjC.h�jChƒ}rR3(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rS3hÜ)�rT3}rU3(h‚jQ3h‘jO3hœjC.h�hàhƒ}rV3(h…]hŽ]h‡]h†]h�]uh¤K÷h¦]rW3h¯X"Core0/bin/debug/ server_core0.xe66rX3…�rY3}rZ3(h‚jQ3h‘jT3ubaubaubj@)�r[3}r\3(h‚Xhost/bin/debug/app_host h‘jK3hœjC.h�jChƒ}r]3(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r^3hÜ)�r_3}r`3(h‚Xhost/bin/debug/app_hostra3h‘j[3hœjC.h�hàhƒ}rb3(h…]hŽ]h‡]h†]h�]uh¤Køh¦]rc3h¯Xhost/bin/debug/app_hostrd3…�re3}rf3(h‚ja3h‘j_3ubaubaubeubhÜ)�rg3}rh3(h‚XlThe Multi-Processor Manager (MPM) Command Line utilities are used to download and start the DSP executables.ri3h‘j 3hœjC.h�hàhƒ}rj3(h…]hŽ]h‡]h†]h�]uh¤Kúh¥hh¦]rk3h¯XlThe Multi-Processor Manager (MPM) Command Line utilities are used to download and start the DSP executables.rl3…�rm3}rn3(h‚ji3h‘jg3ubaubhÜ)�ro3}rp3(h‚X)Let’s load the example and run the DSP:rq3h‘j 3hœjC.h�hàhƒ}rr3(h…]hŽ]h‡]h†]h�]uh¤Küh¥hh¦]rs3h¯X)Let’s load the example and run the DSP:rt3…�ru3}rv3(h‚jq3h‘jo3ubaubj¡)�rw3}rx3(h‚X“root@k2g-evm:~# mpmcl reset dsp0 root@k2g-evm:~# mpmcl status dsp0 root@k2g-evm:~# mpmcl load dsp0 server_core0.xe66 root@k2g-evm:~# mpmcl run dsp0h‘j 3hœjC.h�j¤hƒ}ry3(hÊhËh†]h‡]h…]hŽ]h�]uh¤MÍ h¥hh¦]rz3h¯X“root@k2g-evm:~# mpmcl reset dsp0 root@k2g-evm:~# mpmcl status dsp0 root@k2g-evm:~# mpmcl load dsp0 server_core0.xe66 root@k2g-evm:~# mpmcl run dsp0r{3…�r|3}r}3(h‚Uh‘jw3ubaubhÜ)�r~3}r3(h‚X$You should see the following output:r€3h‘j 3hœjC.h�hàhƒ}r�3(h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]r‚3h¯X$You should see the following output:rƒ3…�r„3}r…3(h‚j€3h‘j~3ubaubj¡)�r†3}r‡3(h‚X®[ 919.637071] remoteproc remoteproc0: powering up 10800000.dsp [ 919.650495] remoteproc remoteproc0: Booting unspecified pre-loaded fw image [ 919.683836] virtio_rpmsg_bus virtio0: rpmsg host is online [ 919.689355] virtio_rpmsg_bus virtio0: creating channel rpmsg-proto addr 0x3d [ 919.712755] remoteproc remoteproc0: registered virtio0 (type 7) [ 919.718671] remoteproc remoteproc0: remote processor 10800000.dsp is now uph‘j 3hœjC.h�j¤hƒ}rˆ3(hÊhËh†]h‡]h…]hŽ]h�]uh¤MÖ h¥hh¦]r‰3h¯X®[ 919.637071] remoteproc remoteproc0: powering up 10800000.dsp [ 919.650495] remoteproc remoteproc0: Booting unspecified pre-loaded fw image [ 919.683836] virtio_rpmsg_bus virtio0: rpmsg host is online [ 919.689355] virtio_rpmsg_bus virtio0: creating channel rpmsg-proto addr 0x3d [ 919.712755] remoteproc remoteproc0: registered virtio0 (type 7) [ 919.718671] remoteproc remoteproc0: remote processor 10800000.dsp is now uprŠ3…�r‹3}rŒ3(h‚Uh‘j†3ubaubhÜ)�r�3}rŽ3(h‚X Now, we can run the IPC example:r�3h‘j 3hœjC.h�hàhƒ}r�3(h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]r‘3h¯X Now, we can run the IPC example:r’3…�r“3}r”3(h‚j�3h‘j�3ubaubj¡)�r•3}r–3(h‚X root@k2g-evm:~# ./app_host CORE0h‘j 3hœjC.h�j¤hƒ}r—3(hÊhËh†]h‡]h…]hŽ]h�]uh¤Mâ h¥hh¦]r˜3h¯X root@k2g-evm:~# ./app_host CORE0r™3…�rš3}r›3(h‚Uh‘j•3ubaubhÜ)�rœ3}r�3(h‚X%The following is the expected output:rž3h‘j 3hœjC.h�hàhƒ}rŸ3(h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]r 3h¯X%The following is the expected output:r¡3…�r¢3}r£3(h‚jž3h‘jœ3ubaubj¡)�r¤3}r¥3(h‚X|--> main: --> Main_main: --> App_create: App_create: Host is ready <-- App_create: --> App_exec: App_exec: sending message 1 App_exec: sending message 2 App_exec: sending message 3 App_exec: message received, sending message 4 App_exec: message received, sending message 5 App_exec: message received, sending message 6 App_exec: message received, sending message 7 App_exec: message received, sending message 8 App_exec: message received, sending message 9 App_exec: message received, sending message 10 App_exec: message received, sending message 11 App_exec: message received, sending message 12 App_exec: message received, sending message 13 App_exec: message received, sending message 14 App_exec: message received, sending message 15 App_exec: message received App_exec: message received App_exec: message received <-- App_exec: 0 --> App_delete: <-- App_delete: <-- Main_main: <-- main:h‘j 3hœjC.h�j¤hƒ}r¦3(hÊhËh†]h‡]h…]hŽ]h�]uh¤Mé h¥hh¦]r§3h¯X|--> main: --> Main_main: --> App_create: App_create: Host is ready <-- App_create: --> App_exec: App_exec: sending message 1 App_exec: sending message 2 App_exec: sending message 3 App_exec: message received, sending message 4 App_exec: message received, sending message 5 App_exec: message received, sending message 6 App_exec: message received, sending message 7 App_exec: message received, sending message 8 App_exec: message received, sending message 9 App_exec: message received, sending message 10 App_exec: message received, sending message 11 App_exec: message received, sending message 12 App_exec: message received, sending message 13 App_exec: message received, sending message 14 App_exec: message received, sending message 15 App_exec: message received App_exec: message received App_exec: message received <-- App_exec: 0 --> App_delete: <-- App_delete: <-- Main_main: <-- main:r¨3…�r©3}rª3(h‚Uh‘j¤3ubaubhþ)�r«3}r¬3(h‚Uh‘j 3hœjC.h�jhƒ}r­3(h…]hŽ]h‡]h†]h�]uh¤M:h¥hh¦]r®3j)�r¯3}r°3(h‚UjKh‘j«3hœjC.h�h¤hƒ}r±3(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubeubeubh–)�r²3}r³3(h‚Uh‘j1.hœjC.h�hžhƒ}r´3(h…]hŽ]h‡]h†]rµ3Uunderstanding-the-memory-mapr¶3ah�]r·3hauh¤M=h¥hh¦]r¸3(h¨)�r¹3}rº3(h‚XUnderstanding the Memory Mapr»3h‘j²3hœjC.h�h¬hƒ}r¼3(h…]hŽ]h‡]h†]h�]uh¤M=h¥hh¦]r½3h¯XUnderstanding the Memory Mapr¾3…�r¿3}rÀ3(h‚j»3h‘j¹3ubaubh–)�rÁ3}rÂ3(h‚Uh‘j²3hœjC.h�hžhƒ}rÃ3(h…]hŽ]h‡]h†]rÄ3Uid3rÅ3ah�]rÆ3h auh¤M@h¥hh¦]rÇ3(h¨)�rÈ3}rÉ3(h‚XOverall Linux Memory MaprÊ3h‘jÁ3hœjC.h�h¬hƒ}rË3(h…]hŽ]h‡]h†]h�]uh¤M@h¥hh¦]rÌ3h¯XOverall Linux Memory MaprÍ3…�rÎ3}rÏ3(h‚jÊ3h‘jÈ3ubaubj¡)�rÐ3}rÑ3(h‚Xroot@k2g-evm:~# cat /proc/iomem [snip...] 80000000-8fffffff : System RAM (boot alias) 92800000-97ffffff : System RAM (boot alias) 9d000000-ffffffff : System RAM (boot alias) 800000000-80fffffff : System RAM 800008000-800dfffff : Kernel code 801000000-80109433b : Kernel data 812800000-817ffffff : System RAM 818000000-81cffffff : CMEM 81d000000-87fffffff : System RAMh‘jÁ3hœjC.h�j¤hƒ}rÒ3(hÊhËh†]h‡]h…]hŽ]h�]uh¤Mh¥hh¦]rÓ3h¯Xroot@k2g-evm:~# cat /proc/iomem [snip...] 80000000-8fffffff : System RAM (boot alias) 92800000-97ffffff : System RAM (boot alias) 9d000000-ffffffff : System RAM (boot alias) 800000000-80fffffff : System RAM 800008000-800dfffff : Kernel code 801000000-80109433b : Kernel data 812800000-817ffffff : System RAM 818000000-81cffffff : CMEM 81d000000-87fffffff : System RAMrÔ3…�rÕ3}rÖ3(h‚Uh‘jÐ3ubaubhÜ)�r×3}rØ3(h‚X**CMA Carveouts**rÙ3h‘jÁ3hœjC.h�hàhƒ}rÚ3(h…]hŽ]h‡]h†]h�]uh¤MPh¥hh¦]rÛ3j¯)�rÜ3}rÝ3(h‚jÙ3hƒ}rÞ3(h…]hŽ]h‡]h†]h�]uh‘j×3h¦]rß3h¯X CMA Carveoutsrà3…�rá3}râ3(h‚Uh‘jÜ3ubah�j·ubaubhÜ)�rã3}rä3(h‚X#To view the allocation at run-time:rå3h‘jÁ3hœjC.h�hàhƒ}ræ3(h…]hŽ]h‡]h†]h�]uh¤MRh¥hh¦]rç3h¯X#To view the allocation at run-time:rè3…�ré3}rê3(h‚jå3h‘jã3ubaubj¡)�rë3}rì3(h‚Xˆroot@k2g-evm:~# dmesg | grep "Reserved memory" [ 0.000000] Reserved memory: created CMA memory pool at 0x000000081f800000, size 8 MiBh‘jÁ3hœjC.h�j¤hƒ}rí3(hÊhËh†]h‡]h…]hŽ]h�]uh¤M#h¥hh¦]rî3h¯Xˆroot@k2g-evm:~# dmesg | grep "Reserved memory" [ 0.000000] Reserved memory: created CMA memory pool at 0x000000081f800000, size 8 MiBrï3…�rð3}rñ3(h‚Uh‘jë3ubaubhÜ)�rò3}ró3(h‚X?The CMA block is defined in the following file for the K2G EVM:rô3h‘jÁ3hœjC.h�hàhƒ}rõ3(h…]hŽ]h‡]h†]h�]uh¤MYh¥hh¦]rö3h¯X?The CMA block is defined in the following file for the K2G EVM:r÷3…�rø3}rù3(h‚jô3h‘jò3ubaubhÜ)�rú3}rû3(h‚X,linux/arch/arm/boot/dts/keystone-k2g-evm.dtsrü3h‘jÁ3hœjC.h�hàhƒ}rý3(h…]hŽ]h‡]h†]h�]uh¤M[h¥hh¦]rþ3h¯X,linux/arch/arm/boot/dts/keystone-k2g-evm.dtsrÿ3…�r4}r4(h‚jü3h‘jú3ubaubhÜ)�r4}r4(h‚X**CMEM**r4h‘jÁ3hœjC.h�hàhƒ}r4(h…]hŽ]h‡]h†]h�]uh¤M]h¥hh¦]r4j¯)�r4}r4(h‚j4hƒ}r 4(h…]hŽ]h‡]h†]h�]uh‘j4h¦]r 4h¯XCMEMr 4…�r 4}r 4(h‚Uh‘j4ubah�j·ubaubhÜ)�r4}r4(h‚X#To view the allocation at run-time:r4h‘jÁ3hœjC.h�hàhƒ}r4(h…]hŽ]h‡]h†]h�]uh¤M_h¥hh¦]r4h¯X#To view the allocation at run-time:r4…�r4}r4(h‚j4h‘j4ubaubj¡)�r4}r4(h‚X›root@k2g-evm:~# cat /proc/cmem Block 0: Pool 0: 1 bufs size 0x5000000 (0x5000000 requested) Pool 0 busy bufs: Pool 0 free bufs: id 0: phys addr 0x818000000h‘jÁ3hœjC.h�j¤hƒ}r4(hÊhËh†]h‡]h…]hŽ]h�]uh¤M0h¥hh¦]r4h¯X›root@k2g-evm:~# cat /proc/cmem Block 0: Pool 0: 1 bufs size 0x5000000 (0x5000000 requested) Pool 0 busy bufs: Pool 0 free bufs: id 0: phys addr 0x818000000r4…�r4}r4(h‚Uh‘j4ubaubhÜ)�r4}r4(h‚XùThis shows that we have defined a CMEM block at physical address 0x818000000 with total size 0x5000000. This block contains a buffer pool consisting of 1 buffer. Each buffer in the pool (only one in this case) is defined to have a size of 0x5000000.r4h‘jÁ3hœjC.h�hàhƒ}r 4(h…]hŽ]h‡]h†]h�]uh¤Mih¥hh¦]r!4h¯XùThis shows that we have defined a CMEM block at physical address 0x818000000 with total size 0x5000000. This block contains a buffer pool consisting of 1 buffer. Each buffer in the pool (only one in this case) is defined to have a size of 0x5000000.r"4…�r#4}r$4(h‚j4h‘j4ubaubhÜ)�r%4}r&4(h‚X@The CMEM block is defined in the following file for the K2G EVM:r'4h‘jÁ3hœjC.h�hàhƒ}r(4(h…]hŽ]h‡]h†]h�]uh¤Mkh¥hh¦]r)4h¯X@The CMEM block is defined in the following file for the K2G EVM:r*4…�r+4}r,4(h‚j'4h‘j%4ubaubhÜ)�r-4}r.4(h‚X)linux/arch/arm/boot/dts/k2g-evm-cmem.dtsir/4h‘jÁ3hœjC.h�hàhƒ}r04(h…]hŽ]h‡]h†]h�]uh¤Mmh¥hh¦]r14h¯X)linux/arch/arm/boot/dts/k2g-evm-cmem.dtsir24…�r34}r44(h‚j/4h‘j-4ubaubhþ)�r54}r64(h‚Uh‘jÁ3hœjC.h�jhƒ}r74(h…]hŽ]h‡]h†]h�]uh¤Moh¥hh¦]r84j)�r94}r:4(h‚UjKh‘j54hœjC.h�h¤hƒ}r;4(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubeubeubh–)�r<4}r=4(h‚Uh‘j1.hœjC.h�hžhƒ}r>4(h…]hŽ]h‡]h†]r?4Uid4r@4ah�]rA4h3auh¤Mrh¥hh¦]rB4(h¨)�rC4}rD4(h‚XChanging the DSP Memory MaprE4h‘j<4hœjC.h�h¬hƒ}rF4(h…]hŽ]h‡]h†]h�]uh¤Mrh¥hh¦]rG4h¯XChanging the DSP Memory MaprH4…�rI4}rJ4(h‚jE4h‘jC4ubaubh–)�rK4}rL4(h‚Uh‘j<4hœjC.h�hžhƒ}rM4(h…]hŽ]h‡]h†]rN4Ulinux-device-treerO4ah�]rP4h"auh¤Muh¥hh¦]rQ4(h¨)�rR4}rS4(h‚XLinux Device TreerT4h‘jK4hœjC.h�h¬hƒ}rU4(h…]hŽ]h‡]h†]h�]uh¤Muh¥hh¦]rV4h¯XLinux Device TreerW4…�rX4}rY4(h‚jT4h‘jR4ubaubhÜ)�rZ4}r[4(h‚X›The carveouts for the DSP are defined in the Linux dts file. For the K2G EVM, these definitions are located in linux/arch/arm/boot/dts/keystone-k2g-evm.dtsr\4h‘jK4hœjC.h�hàhƒ}r]4(h…]hŽ]h‡]h†]h�]uh¤Mwh¥hh¦]r^4h¯X›The carveouts for the DSP are defined in the Linux dts file. For the K2G EVM, these definitions are located in linux/arch/arm/boot/dts/keystone-k2g-evm.dtsr_4…�r`4}ra4(h‚j\4h‘jZ4ubaubj¡)�rb4}rc4(h‚XRreserved-memory { #address-cells = <2>; #size-cells = <2>; ranges; dsp_common_mpm_memory: dsp-common-mpm-memory@81d000000 { compatible = "ti,keystone-dsp-mem-pool"; reg = <0x00000008 0x1d000000 0x00000000 0x2800000>; no-map; status = "okay"; }; dsp_common_memory: dsp-common-memory@81f800000 { compatible = "shared-dma-pool"; reg = <0x00000008 0x1f800000 0x00000000 0x800000>; reusable; status = "okay"; }; };h‘jK4hœjC.h�j¤hƒ}rd4(hÊhËh†]h‡]h…]hŽ]h�]uh¤MHh¥hh¦]re4h¯XRreserved-memory { #address-cells = <2>; #size-cells = <2>; ranges; dsp_common_mpm_memory: dsp-common-mpm-memory@81d000000 { compatible = "ti,keystone-dsp-mem-pool"; reg = <0x00000008 0x1d000000 0x00000000 0x2800000>; no-map; status = "okay"; }; dsp_common_memory: dsp-common-memory@81f800000 { compatible = "shared-dma-pool"; reg = <0x00000008 0x1f800000 0x00000000 0x800000>; reusable; status = "okay"; }; };rf4…�rg4}rh4(h‚Uh‘jb4ubaubhÜ)�ri4}rj4(h‚X The memory region "dsp_common_mpm_memory" starts at address 0x9d000000 and has a size of 0x2800000 bytes. This region is where the DSP code/data needs to reside. If they are not in this region, you will see the error "load failed (error: -104)" when trying to load.rk4h‘jK4hœjC.h�hàhƒ}rl4(h…]hŽ]h‡]h†]h�]uh¤MŽh¥hh¦]rm4h¯X The memory region "dsp_common_mpm_memory" starts at address 0x9d000000 and has a size of 0x2800000 bytes. This region is where the DSP code/data needs to reside. If they are not in this region, you will see the error "load failed (error: -104)" when trying to load.rn4…�ro4}rp4(h‚jk4h‘ji4ubaubhÜ)�rq4}rr4(h‚XðThe memory region "dsp_common_memoryâ€� starts at address 0x9f800000 and has a size of 0x800000. This is a CMA pool, as indicated by the line “compatible = "shared-dma-pool";â€�, and is reserved for Virtque region and Rpmsg vring buffers.rs4h‘jK4hœjC.h�hàhƒ}rt4(h…]hŽ]h‡]h†]h�]uh¤M�h¥hh¦]ru4h¯XðThe memory region "dsp_common_memoryâ€� starts at address 0x9f800000 and has a size of 0x800000. This is a CMA pool, as indicated by the line “compatible = "shared-dma-pool";â€�, and is reserved for Virtque region and Rpmsg vring buffers.rv4…�rw4}rx4(h‚js4h‘jq4ubaubhÜ)�ry4}rz4(h‚X­As of Processor SDK 5.2, the Virtque and vring buffers are allocated by the remoteproc driver from this region and communicated to the slave by update to the resource table.r{4h‘jK4hœjC.h�hàhƒ}r|4(h…]hŽ]h‡]h†]h�]uh¤M“h¥hh¦]r}4h¯X­As of Processor SDK 5.2, the Virtque and vring buffers are allocated by the remoteproc driver from this region and communicated to the slave by update to the resource table.r~4…�r4}r€4(h‚j{4h‘jy4ubaubeubh–)�r�4}r‚4(h‚Uh‘j<4hœjC.h�hžhƒ}rƒ4(h…]hŽ]h‡]h†]r„4Uresource-tabler…4ah�]r†4hauh¤M—h¥hh¦]r‡4(h¨)�rˆ4}r‰4(h‚XResource TablerŠ4h‘j�4hœjC.h�h¬hƒ}r‹4(h…]hŽ]h‡]h†]h�]uh¤M—h¥hh¦]rŒ4h¯XResource Tabler�4…�rŽ4}r�4(h‚jŠ4h‘jˆ4ubaubhÜ)�r�4}r‘4(h‚XnThe default resource table for K2G is located at ipc_3_xx_xx_xx/packages/ti/ipc/remoteproc/rsc_table_tci6638.hr’4h‘j�4hœjC.h�hàhƒ}r“4(h…]hŽ]h‡]h†]h�]uh¤M™h¥hh¦]r”4h¯XnThe default resource table for K2G is located at ipc_3_xx_xx_xx/packages/ti/ipc/remoteproc/rsc_table_tci6638.hr•4…�r–4}r—4(h‚j’4h‘j�4ubaubhÜ)�r˜4}r™4(h‚X\The resource table contains the definitions of the CMA carveout for the Rpmsg vring buffers.rš4h‘j�4hœjC.h�hàhƒ}r›4(h…]hŽ]h‡]h†]h�]uh¤M›h¥hh¦]rœ4h¯X\The resource table contains the definitions of the CMA carveout for the Rpmsg vring buffers.r�4…�rž4}rŸ4(h‚jš4h‘j˜4ubaubeubh–)�r 4}r¡4(h‚Uh‘j<4hœjC.h�hžhƒ}r¢4(h…]hŽ]h‡]h†]r£4Umpm-config-filer¤4ah�]r¥4hauh¤Mžh¥hh¦]r¦4(h¨)�r§4}r¨4(h‚XMPM Config Filer©4h‘j 4hœjC.h�h¬hƒ}rª4(h…]hŽ]h‡]h†]h�]uh¤Mžh¥hh¦]r«4h¯XMPM Config Filer¬4…�r­4}r®4(h‚j©4h‘j§4ubaubhÜ)�r¯4}r°4(h‚XÕThe MPM configuration file is a JSON format configuration file and is located in the default root file system release as part of Processor SDK Linux. It is labeled “mpm_config.jsonâ€� and is located in /etc/mpm.r±4h‘j 4hœjC.h�hàhƒ}r²4(h…]hŽ]h‡]h†]h�]uh¤M h¥hh¦]r³4h¯XÕThe MPM configuration file is a JSON format configuration file and is located in the default root file system release as part of Processor SDK Linux. It is labeled “mpm_config.jsonâ€� and is located in /etc/mpm.r´4…�rµ4}r¶4(h‚j±4h‘j¯4ubaubhÜ)�r·4}r¸4(h‚XDThe following are some details regarding the MPM configuration file:r¹4h‘j 4hœjC.h�hàhƒ}rº4(h…]hŽ]h‡]h†]h�]uh¤M¢h¥hh¦]r»4h¯XDThe following are some details regarding the MPM configuration file:r¼4…�r½4}r¾4(h‚j¹4h‘j·4ubaubj)�r¿4}rÀ4(h‚Uh‘j 4hœjC.h�j!hƒ}rÁ4(j#X-h†]h‡]h…]hŽ]h�]uh¤M¤h¥hh¦]rÂ4(j@)�rÃ4}rÄ4(h‚X{The MPM parser ignores any JSON elements which it does not recognize. This can be used to put comments in the config file. h‘j¿4hœjC.h�jChƒ}rÅ4(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rÆ4hÜ)�rÇ4}rÈ4(h‚XzThe MPM parser ignores any JSON elements which it does not recognize. This can be used to put comments in the config file.rÉ4h‘jÃ4hœjC.h�hàhƒ}rÊ4(h…]hŽ]h‡]h†]h�]uh¤M¤h¦]rË4h¯XzThe MPM parser ignores any JSON elements which it does not recognize. This can be used to put comments in the config file.rÌ4…�rÍ4}rÎ4(h‚jÉ4h‘jÇ4ubaubaubj@)�rÏ4}rÐ4(h‚XcThe tag cmdfile (which is commented as _cmdfile by default) loads and runs MPM commands at bootup. h‘j¿4hœjC.h�jChƒ}rÑ4(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rÒ4hÜ)�rÓ4}rÔ4(h‚XbThe tag cmdfile (which is commented as _cmdfile by default) loads and runs MPM commands at bootup.rÕ4h‘jÏ4hœjC.h�hàhƒ}rÖ4(h…]hŽ]h‡]h†]h�]uh¤M¦h¦]r×4h¯XbThe tag cmdfile (which is commented as _cmdfile by default) loads and runs MPM commands at bootup.rØ4…�rÙ4}rÚ4(h‚jÕ4h‘jÓ4ubaubaubj@)�rÛ4}rÜ4(h‚X_The tag outputif can be syslog, stderr or filename if it does not match any predefined string. h‘j¿4hœjC.h�jChƒ}rÝ4(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rÞ4hÜ)�rß4}rà4(h‚X^The tag outputif can be syslog, stderr or filename if it does not match any predefined string.rá4h‘jÛ4hœjC.h�hàhƒ}râ4(h…]hŽ]h‡]h†]h�]uh¤M¨h¦]rã4h¯X^The tag outputif can be syslog, stderr or filename if it does not match any predefined string.rä4…�rå4}ræ4(h‚já4h‘jß4ubaubaubj@)�rç4}rè4(h‚X By default, the config file allows loading of DSP images to L2, MSMC and DDR. It can be changed to add more restrictions on loading, or to load to L1 sections. h‘j¿4hœjC.h�jChƒ}ré4(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rê4hÜ)�rë4}rì4(h‚XŸBy default, the config file allows loading of DSP images to L2, MSMC and DDR. It can be changed to add more restrictions on loading, or to load to L1 sections.rí4h‘jç4hœjC.h�hàhƒ}rî4(h…]hŽ]h‡]h†]h�]uh¤Mªh¦]rï4h¯XŸBy default, the config file allows loading of DSP images to L2, MSMC and DDR. It can be changed to add more restrictions on loading, or to load to L1 sections.rð4…�rñ4}rò4(h‚jí4h‘jë4ubaubaubj@)�ró4}rô4(h‚XrIn current form, MPM does not do MPAX mapping for local to global addresses and the default MPAX mapping is used. h‘j¿4hœjC.h�jChƒ}rõ4(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rö4hÜ)�r÷4}rø4(h‚XqIn current form, MPM does not do MPAX mapping for local to global addresses and the default MPAX mapping is used.rù4h‘jó4hœjC.h�hàhƒ}rú4(h…]hŽ]h‡]h†]h�]uh¤M¬h¦]rû4h¯XqIn current form, MPM does not do MPAX mapping for local to global addresses and the default MPAX mapping is used.rü4…�rý4}rþ4(h‚jù4h‘j÷4ubaubaubj@)�rÿ4}r5(h‚XïBy default, the MPM configuration file configures the MSMC region with start address at 0x0c000000 and size of 0x600000 bytes, and the DDR region with start address of 0xa0000000 and size of 0x10000000 bytes, as seen in the snippet below. h‘j¿4hœjC.h�jChƒ}r5(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r5hÜ)�r5}r5(h‚XîBy default, the MPM configuration file configures the MSMC region with start address at 0x0c000000 and size of 0x600000 bytes, and the DDR region with start address of 0xa0000000 and size of 0x10000000 bytes, as seen in the snippet below.r5h‘jÿ4hœjC.h�hàhƒ}r5(h…]hŽ]h‡]h†]h�]uh¤M®h¦]r5h¯XîBy default, the MPM configuration file configures the MSMC region with start address at 0x0c000000 and size of 0x600000 bytes, and the DDR region with start address of 0xa0000000 and size of 0x10000000 bytes, as seen in the snippet below.r5…�r 5}r 5(h‚j5h‘j5ubaubaubeubj¡)�r 5}r 5(h‚X{ "name": "local-msmc", "globaladdr": "0x0c000000", "length": "0x600000", "devicename": "/dev/dspmem" }, { "name": "local-ddr", "globaladdr": "0xa0000000", "length": "0x10000000", "devicename": "/dev/dspmem" },h‘j 4hœjC.h�j¤hƒ}r 5(jt‰juX javascripthÊhËh†]h‡]h…]jv}hŽ]h�]uh¤M°h¥hh¦]r5h¯X{ "name": "local-msmc", "globaladdr": "0x0c000000", "length": "0x600000", "devicename": "/dev/dspmem" }, { "name": "local-ddr", "globaladdr": "0xa0000000", "length": "0x10000000", "devicename": "/dev/dspmem" },r5…�r5}r5(h‚Uh‘j 5ubaubeubh–)�r5}r5(h‚Uh‘j<4hœjC.h�hžhƒ}r5(h…]hŽ]h‡]h†]r5U config-bldr5ah�]r5hauh¤MÀh¥hh¦]r5(h¨)�r5}r5(h‚X Config.bldr5h‘j5hœjC.h�h¬hƒ}r5(h…]hŽ]h‡]h†]h�]uh¤MÀh¥hh¦]r5h¯X Config.bldr5…�r5}r 5(h‚j5h‘j5ubaubhÜ)�r!5}r"5(h‚X&The config.bld file is used by the IPC examples to configure the external memory map at the application level. It is located in /ipc_3_x_x_x/examples/66AK2G_linux_elf/ex02_messageq/shared/. A linker command file can be used as well, in place of a config.bld file, to place sections into memory.r#5h‘j5hœjC.h�hàhƒ}r$5(h…]hŽ]h‡]h†]h�]uh¤MÂh¥hh¦]r%5h¯X&The config.bld file is used by the IPC examples to configure the external memory map at the application level. It is located in /ipc_3_x_x_x/examples/66AK2G_linux_elf/ex02_messageq/shared/. A linker command file can be used as well, in place of a config.bld file, to place sections into memory.r&5…�r'5}r(5(h‚j#5h‘j!5ubaubhÜ)�r)5}r*5(h‚X´By default, the ex02_messageq runs from MSMC memory so the config.bld file is not used. In the next section, we will show how to modify the config.bld to place the DSP code in DDR.r+5h‘j5hœjC.h�hàhƒ}r,5(h…]hŽ]h‡]h†]h�]uh¤MÄh¥hh¦]r-5h¯X´By default, the ex02_messageq runs from MSMC memory so the config.bld file is not used. In the next section, we will show how to modify the config.bld to place the DSP code in DDR.r.5…�r/5}r05(h‚j+5h‘j)5ubaubeubeubh–)�r15}r25(h‚Uh‘j1.hœjC.h�hžhƒ}r35(h…]hŽ]h‡]h†]r45U/modifying-ex02-messageq-example-to-run-from-ddrr55ah�]r65h1auh¤MÈh¥hh¦]r75(h¨)�r85}r95(h‚X/Modifying ex02_messageQ example to run from DDRr:5h‘j15hœjC.h�h¬hƒ}r;5(h…]hŽ]h‡]h†]h�]uh¤MÈh¥hh¦]r<5h¯X/Modifying ex02_messageQ example to run from DDRr=5…�r>5}r?5(h‚j:5h‘j85ubaubhÜ)�r@5}rA5(h‚X†As an example, the following section shows how to modify the IPC memory map to run the ex02_messageq example from DDR instead of MSMC.rB5h‘j15hœjC.h�hàhƒ}rC5(h…]hŽ]h‡]h†]h�]uh¤MÊh¥hh¦]rD5h¯X†As an example, the following section shows how to modify the IPC memory map to run the ex02_messageq example from DDR instead of MSMC.rE5…�rF5}rG5(h‚jB5h‘j@5ubaubhÜ)�rH5}rI5(h‚X**Changes to Config.bld**rJ5h‘j15hœjC.h�hàhƒ}rK5(h…]hŽ]h‡]h†]h�]uh¤MÍh¥hh¦]rL5j¯)�rM5}rN5(h‚jJ5hƒ}rO5(h…]hŽ]h‡]h†]h�]uh‘jH5h¦]rP5h¯XChanges to Config.bldrQ5…�rR5}rS5(h‚Uh‘jM5ubah�j·ubaubhÜ)�rT5}rU5(h‚X}We want to place the DSP application in DDR instead of MSMC, so we need to make the following changes to the config.bld file.rV5h‘j15hœjC.h�hàhƒ}rW5(h…]hŽ]h‡]h†]h�]uh¤MÏh¥hh¦]rX5h¯X}We want to place the DSP application in DDR instead of MSMC, so we need to make the following changes to the config.bld file.rY5…�rZ5}r[5(h‚jV5h‘jT5ubaubhÜ)�r\5}r]5(h‚XRemove the following lines:r^5h‘j15hœjC.h�hàhƒ}r_5(h…]hŽ]h‡]h†]h�]uh¤MÑh¥hh¦]r`5h¯XRemove the following lines:ra5…�rb5}rc5(h‚j^5h‘j\5ubaubj¡)�rd5}re5(h‚X^ Build.platformTable["ti.platforms.evmTCI66AK2G02:core0"] = { externalMemoryMap: [ ] };h‘j15hœjC.h�j¤hƒ}rf5(jt‰juX javascripthÊhËh†]h‡]h…]jv}hŽ]h�]uh¤MÓh¥hh¦]rg5h¯X^ Build.platformTable["ti.platforms.evmTCI66AK2G02:core0"] = { externalMemoryMap: [ ] };rh5…�ri5}rj5(h‚Uh‘jd5ubaubhÜ)�rk5}rl5(h‚Xand add the following:rm5h‘j15hœjC.h�hàhƒ}rn5(h…]hŽ]h‡]h†]h�]uh¤MÙh¥hh¦]ro5h¯Xand add the following:rp5…�rq5}rr5(h‚jm5h‘jk5ubaubj¡)�rs5}rt5(h‚Xövar evmTCI66AK2G02_ExtMemMapDsp = { EXT_DDR: { name: "EXT_DDR", base: 0x9d000000, len: 0x00100000, space: "code/data", access: "RWX" }, }; Build.platformTable["ti.platforms.evmTCI66AK2G02:core0"] = { externalMemoryMap: [ [ "EXT_DDR", evmTCI66AK2G02_ExtMemMapDsp.EXT_DDR ], ], codeMemory: "EXT_DDR", dataMemory: "EXT_DDR", stackMemory: "EXT_DDR", };h‘j15hœjC.h�j¤hƒ}ru5(jt‰juX javascripthÊhËh†]h‡]h…]jv}hŽ]h�]uh¤MÛh¥hh¦]rv5h¯Xövar evmTCI66AK2G02_ExtMemMapDsp = { EXT_DDR: { name: "EXT_DDR", base: 0x9d000000, len: 0x00100000, space: "code/data", access: "RWX" }, }; Build.platformTable["ti.platforms.evmTCI66AK2G02:core0"] = { externalMemoryMap: [ [ "EXT_DDR", evmTCI66AK2G02_ExtMemMapDsp.EXT_DDR ], ], codeMemory: "EXT_DDR", dataMemory: "EXT_DDR", stackMemory: "EXT_DDR", };rw5…�rx5}ry5(h‚Uh‘js5ubaubhÜ)�rz5}r{5(h‚X„This will place the DSP code, data, and stack memory at address 0x9d000000. We have chosen address 0x9d000000 because that is what is defined in the Linux device tree by default. Refer to the “dsp_common_mpm_memoryâ€� block in the previous section “Linux Device Tree.â€� Note, the length specified here is 0x00100000; this must be less than the size of the dsp_common_mpm_memory pool.r|5h‘j15hœjC.h�hàhƒ}r}5(h…]hŽ]h‡]h†]h�]uh¤Mðh¥hh¦]r~5h¯X„This will place the DSP code, data, and stack memory at address 0x9d000000. We have chosen address 0x9d000000 because that is what is defined in the Linux device tree by default. Refer to the “dsp_common_mpm_memoryâ€� block in the previous section “Linux Device Tree.â€� Note, the length specified here is 0x00100000; this must be less than the size of the dsp_common_mpm_memory pool.r5…�r€5}r�5(h‚j|5h‘jz5ubaubhÜ)�r‚5}rƒ5(h‚X"**Changes to the MPM Config File**r„5h‘j15hœjC.h�hàhƒ}r…5(h…]hŽ]h‡]h†]h�]uh¤Mòh¥hh¦]r†5j¯)�r‡5}rˆ5(h‚j„5hƒ}r‰5(h…]hŽ]h‡]h†]h�]uh‘j‚5h¦]rŠ5h¯XChanges to the MPM Config Filer‹5…�rŒ5}r�5(h‚Uh‘j‡5ubah�j·ubaubhÜ)�rŽ5}r�5(h‚X!By default, mpm_config.json defines the DDR region to start at 0xa0000000 with a length of 0x10000000. We need to change this to include the region where our application resides so we will change it to span from 0x90000000 to 0xc0000000. This can be increased as needed by the application.r�5h‘j15hœjC.h�hàhƒ}r‘5(h…]hŽ]h‡]h†]h�]uh¤Môh¥hh¦]r’5h¯X!By default, mpm_config.json defines the DDR region to start at 0xa0000000 with a length of 0x10000000. We need to change this to include the region where our application resides so we will change it to span from 0x90000000 to 0xc0000000. This can be increased as needed by the application.r“5…�r”5}r•5(h‚j�5h‘jŽ5ubaubhÜ)�r–5}r—5(h‚X,To do this, change the following block from:r˜5h‘j15hœjC.h�hàhƒ}r™5(h…]hŽ]h‡]h†]h�]uh¤Möh¥hh¦]rš5h¯X,To do this, change the following block from:r›5…�rœ5}r�5(h‚j˜5h‘j–5ubaubj¡)�rž5}rŸ5(h‚X‡{ "name": "local-ddr", "globaladdr": "0xa0000000", "length": "0x10000000", "devicename": "/dev/dsp0" },h‘j15hœjC.h�j¤hƒ}r 5(jt‰juX javascripthÊhËh†]h‡]h…]jv}hŽ]h�]uh¤Møh¥hh¦]r¡5h¯X‡{ "name": "local-ddr", "globaladdr": "0xa0000000", "length": "0x10000000", "devicename": "/dev/dsp0" },r¢5…�r£5}r¤5(h‚Uh‘jž5ubaubhÜ)�r¥5}r¦5(h‚XTo:r§5h‘j15hœjC.h�hàhƒ}r¨5(h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]r©5h¯XTo:rª5…�r«5}r¬5(h‚j§5h‘j¥5ubaubj¡)�r­5}r®5(h‚X‡{ "name": "local-ddr", "globaladdr": "0x90000000", "length": "0x30000000", "devicename": "/dev/dsp0" },h‘j15hœjC.h�j¤hƒ}r¯5(jt‰juX javascripthÊhËh†]h‡]h…]jv}hŽ]h�]uh¤Mh¥hh¦]r°5h¯X‡{ "name": "local-ddr", "globaladdr": "0x90000000", "length": "0x30000000", "devicename": "/dev/dsp0" },r±5…�r²5}r³5(h‚Uh‘j­5ubaubhÜ)�r´5}rµ5(h‚X**Changes to Core0.cfg**r¶5h‘j15hœjC.h�hàhƒ}r·5(h…]hŽ]h‡]h†]h�]uh¤M h¥hh¦]r¸5j¯)�r¹5}rº5(h‚j¶5hƒ}r»5(h…]hŽ]h‡]h†]h�]uh‘j´5h¦]r¼5h¯XChanges to Core0.cfgr½5…�r¾5}r¿5(h‚Uh‘j¹5ubah�j·ubaubhÜ)�rÀ5}rÁ5(h‚XRemove the following lines:rÂ5h‘j15hœjC.h�hàhƒ}rÃ5(h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]rÄ5h¯XRemove the following lines:rÅ5…�rÆ5}rÇ5(h‚jÂ5h‘jÀ5ubaubj¡)�rÈ5}rÉ5(h‚X­Program.sectMap[".text:_c_int00"] = new Program.SectionSpec(); Program.sectMap[".text:_c_int00"].loadSegment = "L2SRAM"; Program.sectMap[".text:_c_int00"].loadAlign = 0x400;h‘j15hœjC.h�j¤hƒ}rÊ5(jt‰juX javascripthÊhËh†]h‡]h…]jv}hŽ]h�]uh¤Mh¥hh¦]rË5h¯X­Program.sectMap[".text:_c_int00"] = new Program.SectionSpec(); Program.sectMap[".text:_c_int00"].loadSegment = "L2SRAM"; Program.sectMap[".text:_c_int00"].loadAlign = 0x400;rÌ5…�rÍ5}rÎ5(h‚Uh‘jÈ5ubaubhÜ)�rÏ5}rÐ5(h‚XiThese lines above place the .text section into L2SRAM. We want it to be in DDR so it needs to be removed.rÑ5h‘j15hœjC.h�hàhƒ}rÒ5(h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]rÓ5h¯XiThese lines above place the .text section into L2SRAM. We want it to be in DDR so it needs to be removed.rÔ5…�rÕ5}rÖ5(h‚jÑ5h‘jÏ5ubaubhÜ)�r×5}rØ5(h‚XRemove the following lines:rÙ5h‘j15hœjC.h�hàhƒ}rÚ5(h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]rÛ5h¯XRemove the following lines:rÜ5…�rÝ5}rÞ5(h‚jÙ5h‘j×5ubaubj¡)�rß5}rà5(h‚Xovar Resource = xdc.useModule('ti.ipc.remoteproc.Resource'); Resource.loadSegment = Program.platform.dataMemory;h‘j15hœjC.h�j¤hƒ}rá5(hÊhËh†]h‡]h…]hŽ]h�]uh¤Mêh¥hh¦]râ5h¯Xovar Resource = xdc.useModule('ti.ipc.remoteproc.Resource'); Resource.loadSegment = Program.platform.dataMemory;rã5…�rä5}rå5(h‚Uh‘jß5ubaubhÜ)�ræ5}rç5(h‚XeThese lines place the resource table into the dataMemory section, which in our case is in DDR memory.rè5h‘j15hœjC.h�hàhƒ}ré5(h…]hŽ]h‡]h†]h�]uh¤M h¥hh¦]rê5h¯XeThese lines place the resource table into the dataMemory section, which in our case is in DDR memory.rë5…�rì5}rí5(h‚jè5h‘jæ5ubaubhÜ)�rî5}rï5(h‚X�The Remoteproc driver requires the trace buffers and resource table to be placed into L2SRAM. If they are not, you will see the following error when loading:rð5h‘j15hœjC.h�hàhƒ}rñ5(h…]hŽ]h‡]h†]h�]uh¤M"h¥hh¦]rò5h¯X�The Remoteproc driver requires the trace buffers and resource table to be placed into L2SRAM. If they are not, you will see the following error when loading:ró5…�rô5}rõ5(h‚jð5h‘jî5ubaubj¡)�rö5}r÷5(h‚Xgkeystone-rproc 10800000.dsp: error in ioctl call: cmd 0x40044902 (2), ret -22 load failed (error: -107)h‘j15hœjC.h�j¤hƒ}rø5(hÊhËh†]h‡]h…]hŽ]h�]uh¤Móh¥hh¦]rù5h¯Xgkeystone-rproc 10800000.dsp: error in ioctl call: cmd 0x40044902 (2), ret -22 load failed (error: -107)rú5…�rû5}rü5(h‚Uh‘jö5ubaubhÜ)�rý5}rþ5(h‚XdSo we will need to add the following lines to place the trace buffer and resource table into L2SRAM:rÿ5h‘j15hœjC.h�hàhƒ}r6(h…]hŽ]h‡]h†]h�]uh¤M*h¥hh¦]r6h¯XdSo we will need to add the following lines to place the trace buffer and resource table into L2SRAM:r6…�r6}r6(h‚jÿ5h‘jý5ubaubj¡)�r6}r6(h‚X;Program.sectMap[".far"] = new Program.SectionSpec(); Program.sectMap[".far"].loadSegment = "L2SRAM"; Program.sectMap[".resource_table"] = new Program.SectionSpec(); Program.sectMap[".resource_table"].loadSegment = "L2SRAM"; var Resource = xdc.useModule('ti.ipc.remoteproc.Resource'); Resource.loadSegment = "L2SRAM"h‘j15hœjC.h�j¤hƒ}r6(hÊhËh†]h‡]h…]hŽ]h�]uh¤Mûh¥hh¦]r6h¯X;Program.sectMap[".far"] = new Program.SectionSpec(); Program.sectMap[".far"].loadSegment = "L2SRAM"; Program.sectMap[".resource_table"] = new Program.SectionSpec(); Program.sectMap[".resource_table"].loadSegment = "L2SRAM"; var Resource = xdc.useModule('ti.ipc.remoteproc.Resource'); Resource.loadSegment = "L2SRAM"r 6…�r 6}r 6(h‚Uh‘j6ubaubhÜ)�r 6}r 6(h‚X<Now follow the steps in `Running the Bundled IPC Examples`_.r6h‘j15hœjC.h�hàhƒ}r6(h…]hŽ]h‡]h†]h�]uh¤M7h¥hh¦]r6(h¯XNow follow the steps in r6…�r6}r6(h‚XNow follow the steps in h‘j 6ubj))�r6}r6(h‚X#`Running the Bundled IPC Examples`_j+3Kh‘j 6h�j2hƒ}r6(UnameX Running the Bundled IPC Examplesh†]h‡]h…]hŽ]h�]j-3j3uh¦]r6h¯X Running the Bundled IPC Examplesr6…�r6}r6(h‚Uh‘j6ubaubh¯X.…�r6}r6(h‚X.h‘j 6ubeubeubh–)�r6}r6(h‚Uh‘j1.hœjC.h�hžhƒ}r6(h…]hŽ]h‡]h†]r 6U-loading-dsp-images-from-ccs-without-using-mpmr!6ah�]r"6hdauh¤M;h¥hh¦]r#6(h¨)�r$6}r%6(h‚X/Loading DSP images from CCS (without using MPM)r&6h‘j6hœjC.h�h¬hƒ}r'6(h…]hŽ]h‡]h†]h�]uh¤M;h¥hh¦]r(6h¯X/Loading DSP images from CCS (without using MPM)r)6…�r*6}r+6(h‚j&6h‘j$6ubaubhÜ)�r,6}r-6(h‚X²By default, the DSP cores are powered down by u-boot at the time of EVM boot. After kernel is running, MPM can be used to load and run DSP images from Linux command-line/utility.r.6h‘j6hœjC.h�hàhƒ}r/6(h…]hŽ]h‡]h†]h�]uh¤M=h¥hh¦]r06h¯X²By default, the DSP cores are powered down by u-boot at the time of EVM boot. After kernel is running, MPM can be used to load and run DSP images from Linux command-line/utility.r16…�r26}r36(h‚j.6h‘j,6ubaubhÜ)�r46}r56(h‚XzRather than using MPM, if you want to use CCS to load and run DSP images, then set the following setting in u-boot prompt:r66h‘j6hœjC.h�hàhƒ}r76(h…]hŽ]h‡]h†]h�]uh¤M?h¥hh¦]r86h¯XzRather than using MPM, if you want to use CCS to load and run DSP images, then set the following setting in u-boot prompt:r96…�r:6}r;6(h‚j66h‘j46ubaubj¡)�r<6}r=6(h‚X$setenv debug_options 1 saveenv reseth‘j6hœjC.h�j¤hƒ}r>6(hÊhËh†]h‡]h…]hŽ]h�]uh¤Mh¥hh¦]r?6h¯X$setenv debug_options 1 saveenv resetr@6…�rA6}rB6(h‚Uh‘j<6ubaubhÜ)�rC6}rD6(h‚XThis will not power down DSPs at startup and CCS/JTAG can connect to the DSP for loading and debugging. This option is useful if you want to boot Linux on ARM and then use JTAG to manually load and run the DSPs. Otherwise you may see "held in reset" errors in CCS.rE6h‘j6hœjC.h�hàhƒ}rF6(h…]hŽ]h‡]h†]h�]uh¤MGh¥hh¦]rG6h¯XThis will not power down DSPs at startup and CCS/JTAG can connect to the DSP for loading and debugging. This option is useful if you want to boot Linux on ARM and then use JTAG to manually load and run the DSPs. Otherwise you may see "held in reset" errors in CCS.rH6…�rI6}rJ6(h‚jE6h‘jC6ubaubj)�rK6}rL6(h‚XpThe above step is not needed if you want to load DSP cores using MPM and subsequently use CCS to connect to DSP.rM6h‘j6hœjC.h�jhƒ}rN6(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rO6hÜ)�rP6}rQ6(h‚jM6h‘jK6hœjC.h�hàhƒ}rR6(h…]hŽ]h‡]h†]h�]uh¤MIh¦]rS6h¯XpThe above step is not needed if you want to load DSP cores using MPM and subsequently use CCS to connect to DSP.rT6…�rU6}rV6(h‚jM6h‘jP6ubaubaubeubh–)�rW6}rX6(h‚Uh‘j1.hœjC.h�hžhƒ}rY6(h…]hŽ]h‡]h†]rZ6U mpm-debuggingr[6ah�]r\6hEauh¤MLh¥hh¦]r]6(h¨)�r^6}r_6(h‚X MPM Debuggingr`6h‘jW6hœjC.h�h¬hƒ}ra6(h…]hŽ]h‡]h†]h�]uh¤MLh¥hh¦]rb6h¯X MPM Debuggingrc6…�rd6}re6(h‚j`6h‘j^6ubaubhÜ)�rf6}rg6(h‚X2The following are some pointers for MPM debugging.rh6h‘jW6hœjC.h�hàhƒ}ri6(h…]hŽ]h‡]h†]h�]uh¤MNh¥hh¦]rj6h¯X2The following are some pointers for MPM debugging.rk6…�rl6}rm6(h‚jh6h‘jf6ubaubhÜ)�rn6}ro6(h‚X**MPM Error Codes**rp6h‘jW6hœjC.h�hàhƒ}rq6(h…]hŽ]h‡]h†]h�]uh¤MPh¥hh¦]rr6j¯)�rs6}rt6(h‚jp6hƒ}ru6(h…]hŽ]h‡]h†]h�]uh‘jn6h¦]rv6h¯XMPM Error Codesrw6…�rx6}ry6(h‚Uh‘js6ubah�j·ubaubj)�rz6}r{6(h‚Uh‘jW6hœjC.h�j!hƒ}r|6(j#X-h†]h‡]h…]hŽ]h�]uh¤MRh¥hh¦]r}6(j@)�r~6}r6(h‚XWIf MPM server crashed/exited/not running in the system, mpmcl ping will return failure h‘jz6hœjC.h�jChƒ}r€6(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r�6hÜ)�r‚6}rƒ6(h‚XVIf MPM server crashed/exited/not running in the system, mpmcl ping will return failurer„6h‘j~6hœjC.h�hàhƒ}r…6(h…]hŽ]h‡]h†]h�]uh¤MRh¦]r†6h¯XVIf MPM server crashed/exited/not running in the system, mpmcl ping will return failurer‡6…�rˆ6}r‰6(h‚j„6h‘j‚6ubaubaubj@)�rŠ6}r‹6(h‚XoIf there is any load/run/reset failure MPM client provides error codes. The major error codes are given below. h‘jz6hœjC.h�jChƒ}rŒ6(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r�6hÜ)�rŽ6}r�6(h‚XnIf there is any load/run/reset failure MPM client provides error codes. The major error codes are given below.r�6h‘jŠ6hœjC.h�hàhƒ}r‘6(h…]hŽ]h‡]h†]h�]uh¤MTh¦]r’6h¯XnIf there is any load/run/reset failure MPM client provides error codes. The major error codes are given below.r“6…�r”6}r•6(h‚j�6h‘jŽ6ubaubaubeubjB)�r–6}r—6(h‚Uh‘jW6hœjC.h�jEhƒ}r˜6(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r™6jH)�rš6}r›6(h‚Uhƒ}rœ6(h†]h‡]h…]hŽ]h�]UcolsKuh‘j–6h¦]r�6(jM)�rž6}rŸ6(h‚Uhƒ}r 6(h†]h‡]h…]hŽ]h�]UcolwidthK uh‘jš6h¦]h�jQubjM)�r¡6}r¢6(h‚Uhƒ}r£6(h†]h‡]h…]hŽ]h�]UcolwidthK$uh‘jš6h¦]h�jQubjX)�r¤6}r¥6(h‚Uhƒ}r¦6(h…]hŽ]h‡]h†]h�]uh‘jš6h¦]r§6j])�r¨6}r©6(h‚Uhƒ}rª6(h…]hŽ]h‡]h†]h�]uh‘j¤6h¦]r«6(jb)�r¬6}r­6(h‚Uhƒ}r®6(h…]hŽ]h‡]h†]h�]uh‘j¨6h¦]r¯6hÜ)�r°6}r±6(h‚X error coder²6h‘j¬6hœjC.h�hàhƒ}r³6(h…]hŽ]h‡]h†]h�]uh¤MWh¦]r´6h¯X error coderµ6…�r¶6}r·6(h‚j²6h‘j°6ubaubah�joubjb)�r¸6}r¹6(h‚Uhƒ}rº6(h…]hŽ]h‡]h†]h�]uh‘j¨6h¦]r»6hÜ)�r¼6}r½6(h‚X error typer¾6h‘j¸6hœjC.h�hàhƒ}r¿6(h…]hŽ]h‡]h†]h�]uh¤MWh¦]rÀ6h¯X error typerÁ6…�rÂ6}rÃ6(h‚j¾6h‘j¼6ubaubah�joubeh�jˆubah�j‰ubjŠ)�rÄ6}rÅ6(h‚Uhƒ}rÆ6(h…]hŽ]h‡]h†]h�]uh‘jš6h¦]rÇ6(j])�rÈ6}rÉ6(h‚Uhƒ}rÊ6(h…]hŽ]h‡]h†]h�]uh‘jÄ6h¦]rË6(jb)�rÌ6}rÍ6(h‚Uhƒ}rÎ6(h…]hŽ]h‡]h†]h�]uh‘jÈ6h¦]rÏ6hÜ)�rÐ6}rÑ6(h‚X-100rÒ6h‘jÌ6hœjC.h�hàhƒ}rÓ6(h…]hŽ]h‡]h†]h�]uh¤MYh¦]rÔ6h¯X-100rÕ6…�rÖ6}r×6(h‚jÒ6h‘jÐ6ubaubah�joubjb)�rØ6}rÙ6(h‚Uhƒ}rÚ6(h…]hŽ]h‡]h†]h�]uh‘jÈ6h¦]rÛ6hÜ)�rÜ6}rÝ6(h‚Xerror_ssm_unexpected_eventrÞ6h‘jØ6hœjC.h�hàhƒ}rß6(h…]hŽ]h‡]h†]h�]uh¤MYh¦]rà6h¯Xerror_ssm_unexpected_eventrá6…�râ6}rã6(h‚jÞ6h‘jÜ6ubaubah�joubeh�jˆubj])�rä6}rå6(h‚Uhƒ}ræ6(h…]hŽ]h‡]h†]h�]uh‘jÄ6h¦]rç6(jb)�rè6}ré6(h‚Uhƒ}rê6(h…]hŽ]h‡]h†]h�]uh‘jä6h¦]rë6hÜ)�rì6}rí6(h‚X-101rî6h‘jè6hœjC.h�hàhƒ}rï6(h…]hŽ]h‡]h†]h�]uh¤M[h¦]rð6h¯X-101rñ6…�rò6}ró6(h‚jî6h‘jì6ubaubah�joubjb)�rô6}rõ6(h‚Uhƒ}rö6(h…]hŽ]h‡]h†]h�]uh‘jä6h¦]r÷6hÜ)�rø6}rù6(h‚Xerror_ssm_invalid_eventrú6h‘jô6hœjC.h�hàhƒ}rû6(h…]hŽ]h‡]h†]h�]uh¤M[h¦]rü6h¯Xerror_ssm_invalid_eventrý6…�rþ6}rÿ6(h‚jú6h‘jø6ubaubah�joubeh�jˆubj])�r7}r7(h‚Uhƒ}r7(h…]hŽ]h‡]h†]h�]uh‘jÄ6h¦]r7(jb)�r7}r7(h‚Uhƒ}r7(h…]hŽ]h‡]h†]h�]uh‘j7h¦]r7hÜ)�r7}r 7(h‚X-102r 7h‘j7hœjC.h�hàhƒ}r 7(h…]hŽ]h‡]h†]h�]uh¤M]h¦]r 7h¯X-102r 7…�r7}r7(h‚j 7h‘j7ubaubah�joubjb)�r7}r7(h‚Uhƒ}r7(h…]hŽ]h‡]h†]h�]uh‘j7h¦]r7hÜ)�r7}r7(h‚Xerror_invalid_name_lengthr7h‘j7hœjC.h�hàhƒ}r7(h…]hŽ]h‡]h†]h�]uh¤M]h¦]r7h¯Xerror_invalid_name_lengthr7…�r7}r7(h‚j7h‘j7ubaubah�joubeh�jˆubj])�r7}r7(h‚Uhƒ}r7(h…]hŽ]h‡]h†]h�]uh‘jÄ6h¦]r7(jb)�r 7}r!7(h‚Uhƒ}r"7(h…]hŽ]h‡]h†]h�]uh‘j7h¦]r#7hÜ)�r$7}r%7(h‚X-103r&7h‘j 7hœjC.h�hàhƒ}r'7(h…]hŽ]h‡]h†]h�]uh¤M_h¦]r(7h¯X-103r)7…�r*7}r+7(h‚j&7h‘j$7ubaubah�joubjb)�r,7}r-7(h‚Uhƒ}r.7(h…]hŽ]h‡]h†]h�]uh‘j7h¦]r/7hÜ)�r07}r17(h‚Xerror_file_openr27h‘j,7hœjC.h�hàhƒ}r37(h…]hŽ]h‡]h†]h�]uh¤M_h¦]r47h¯Xerror_file_openr57…�r67}r77(h‚j27h‘j07ubaubah�joubeh�jˆubj])�r87}r97(h‚Uhƒ}r:7(h…]hŽ]h‡]h†]h�]uh‘jÄ6h¦]r;7(jb)�r<7}r=7(h‚Uhƒ}r>7(h…]hŽ]h‡]h†]h�]uh‘j87h¦]r?7hÜ)�r@7}rA7(h‚X-104rB7h‘j<7hœjC.h�hàhƒ}rC7(h…]hŽ]h‡]h†]h�]uh¤Mah¦]rD7h¯X-104rE7…�rF7}rG7(h‚jB7h‘j@7ubaubah�joubjb)�rH7}rI7(h‚Uhƒ}rJ7(h…]hŽ]h‡]h†]h�]uh‘j87h¦]rK7hÜ)�rL7}rM7(h‚Xerror_image_loadrN7h‘jH7hœjC.h�hàhƒ}rO7(h…]hŽ]h‡]h†]h�]uh¤Mah¦]rP7h¯Xerror_image_loadrQ7…�rR7}rS7(h‚jN7h‘jL7ubaubah�joubeh�jˆubj])�rT7}rU7(h‚Uhƒ}rV7(h…]hŽ]h‡]h†]h�]uh‘jÄ6h¦]rW7(jb)�rX7}rY7(h‚Uhƒ}rZ7(h…]hŽ]h‡]h†]h�]uh‘jT7h¦]r[7hÜ)�r\7}r]7(h‚X-105r^7h‘jX7hœjC.h�hàhƒ}r_7(h…]hŽ]h‡]h†]h�]uh¤Mch¦]r`7h¯X-105ra7…�rb7}rc7(h‚j^7h‘j\7ubaubah�joubjb)�rd7}re7(h‚Uhƒ}rf7(h…]hŽ]h‡]h†]h�]uh‘jT7h¦]rg7hÜ)�rh7}ri7(h‚X error_uiorj7h‘jd7hœjC.h�hàhƒ}rk7(h…]hŽ]h‡]h†]h�]uh¤Mch¦]rl7h¯X error_uiorm7…�rn7}ro7(h‚jj7h‘jh7ubaubah�joubeh�jˆubj])�rp7}rq7(h‚Uhƒ}rr7(h…]hŽ]h‡]h†]h�]uh‘jÄ6h¦]rs7(jb)�rt7}ru7(h‚Uhƒ}rv7(h…]hŽ]h‡]h†]h�]uh‘jp7h¦]rw7hÜ)�rx7}ry7(h‚X-106rz7h‘jt7hœjC.h�hàhƒ}r{7(h…]hŽ]h‡]h†]h�]uh¤Meh¦]r|7h¯X-106r}7…�r~7}r7(h‚jz7h‘jx7ubaubah�joubjb)�r€7}r�7(h‚Uhƒ}r‚7(h…]hŽ]h‡]h†]h�]uh‘jp7h¦]rƒ7hÜ)�r„7}r…7(h‚X!error_image_invalid_entry_addressr†7h‘j€7hœjC.h�hàhƒ}r‡7(h…]hŽ]h‡]h†]h�]uh¤Meh¦]rˆ7h¯X!error_image_invalid_entry_addressr‰7…�rŠ7}r‹7(h‚j†7h‘j„7ubaubah�joubeh�jˆubj])�rŒ7}r�7(h‚Uhƒ}rŽ7(h…]hŽ]h‡]h†]h�]uh‘jÄ6h¦]r�7(jb)�r�7}r‘7(h‚Uhƒ}r’7(h…]hŽ]h‡]h†]h�]uh‘jŒ7h¦]r“7hÜ)�r”7}r•7(h‚X-107r–7h‘j�7hœjC.h�hàhƒ}r—7(h…]hŽ]h‡]h†]h�]uh¤Mgh¦]r˜7h¯X-107r™7…�rš7}r›7(h‚j–7h‘j”7ubaubah�joubjb)�rœ7}r�7(h‚Uhƒ}rž7(h…]hŽ]h‡]h†]h�]uh‘jŒ7h¦]rŸ7hÜ)�r 7}r¡7(h‚Xerror_resource_table_settingr¢7h‘jœ7hœjC.h�hàhƒ}r£7(h…]hŽ]h‡]h†]h�]uh¤Mgh¦]r¤7h¯Xerror_resource_table_settingr¥7…�r¦7}r§7(h‚j¢7h‘j 7ubaubah�joubeh�jˆubj])�r¨7}r©7(h‚Uhƒ}rª7(h…]hŽ]h‡]h†]h�]uh‘jÄ6h¦]r«7(jb)�r¬7}r­7(h‚Uhƒ}r®7(h…]hŽ]h‡]h†]h�]uh‘j¨7h¦]r¯7hÜ)�r°7}r±7(h‚X-108r²7h‘j¬7hœjC.h�hàhƒ}r³7(h…]hŽ]h‡]h†]h�]uh¤Mih¦]r´7h¯X-108rµ7…�r¶7}r·7(h‚j²7h‘j°7ubaubah�joubjb)�r¸7}r¹7(h‚Uhƒ}rº7(h…]hŽ]h‡]h†]h�]uh‘j¨7h¦]r»7hÜ)�r¼7}r½7(h‚Xerror_error_no_entry_pointr¾7h‘j¸7hœjC.h�hàhƒ}r¿7(h…]hŽ]h‡]h†]h�]uh¤Mih¦]rÀ7h¯Xerror_error_no_entry_pointrÁ7…�rÂ7}rÃ7(h‚j¾7h‘j¼7ubaubah�joubeh�jˆubj])�rÄ7}rÅ7(h‚Uhƒ}rÆ7(h…]hŽ]h‡]h†]h�]uh‘jÄ6h¦]rÇ7(jb)�rÈ7}rÉ7(h‚Uhƒ}rÊ7(h…]hŽ]h‡]h†]h�]uh‘jÄ7h¦]rË7hÜ)�rÌ7}rÍ7(h‚X-109rÎ7h‘jÈ7hœjC.h�hàhƒ}rÏ7(h…]hŽ]h‡]h†]h�]uh¤Mkh¦]rÐ7h¯X-109rÑ7…�rÒ7}rÓ7(h‚jÎ7h‘jÌ7ubaubah�joubjb)�rÔ7}rÕ7(h‚Uhƒ}rÖ7(h…]hŽ]h‡]h†]h�]uh‘jÄ7h¦]r×7hÜ)�rØ7}rÙ7(h‚Xerror_invalid_commandrÚ7h‘jÔ7hœjC.h�hàhƒ}rÛ7(h…]hŽ]h‡]h†]h�]uh¤Mkh¦]rÜ7h¯Xerror_invalid_commandrÝ7…�rÞ7}rß7(h‚jÚ7h‘jØ7ubaubah�joubeh�jˆubeh�jWubeh�jXubaubj)�rà7}rá7(h‚Uh‘jW6hœjC.h�j!hƒ}râ7(j#X-h†]h‡]h…]hŽ]h�]uh¤Mnh¥hh¦]rã7j@)�rä7}rå7(h‚XnThe MPM daemon logs goes to /var/log/syslog by default. This file can provide more information on the errors. h‘jà7hœjC.h�jChƒ}ræ7(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rç7hÜ)�rè7}ré7(h‚XmThe MPM daemon logs goes to /var/log/syslog by default. This file can provide more information on the errors.rê7h‘jä7hœjC.h�hàhƒ}rë7(h…]hŽ]h‡]h†]h�]uh¤Mnh¦]rì7h¯XmThe MPM daemon logs goes to /var/log/syslog by default. This file can provide more information on the errors.rí7…�rî7}rï7(h‚jê7h‘jè7ubaubaubaubhÜ)�rð7}rñ7(h‚X'**DSP trace/print messages from Linux**rò7h‘jW6hœjC.h�hàhƒ}ró7(h…]hŽ]h‡]h†]h�]uh¤Mph¥hh¦]rô7j¯)�rõ7}rö7(h‚jò7hƒ}r÷7(h…]hŽ]h‡]h†]h�]uh‘jð7h¦]rø7h¯X#DSP trace/print messages from Linuxrù7…�rú7}rû7(h‚Uh‘jõ7ubah�j·ubaubhÜ)�rü7}rý7(h‚XBThe DSP log messages can be read from following debugfs locations:rþ7h‘jW6hœjC.h�hàhƒ}rÿ7(h…]hŽ]h‡]h†]h�]uh¤Mrh¥hh¦]r8h¯XBThe DSP log messages can be read from following debugfs locations:r8…�r8}r8(h‚jþ7h‘jü7ubaubj¡)�r8}r8(h‚XIDSP log entry for core #: /sys/kernel/debug/remoteproc/remoteproc#/trace0h‘jW6hœjC.h�j¤hƒ}r8(hÊhËh†]h‡]h…]hŽ]h�]uh¤MCh¥hh¦]r8h¯XIDSP log entry for core #: /sys/kernel/debug/remoteproc/remoteproc#/trace0r8…�r 8}r 8(h‚Uh‘j8ubaubhÜ)�r 8}r 8(h‚X'Where # is the core id starting from 0.r 8h‘jW6hœjC.h�hàhƒ}r8(h…]hŽ]h‡]h†]h�]uh¤Mxh¥hh¦]r8h¯X'Where # is the core id starting from 0.r8…�r8}r8(h‚j 8h‘j 8ubaubj¡)�r8}r8(h‚Xyroot@keystone-evm:~# cat /sys/kernel/debug/remoteproc/remoteproc0/trace0 Main started on core 1 .... root@keystone-evm:~#h‘jW6hœjC.h�j¤hƒ}r8(hÊhËh†]h‡]h…]hŽ]h�]uh¤MIh¥hh¦]r8h¯Xyroot@keystone-evm:~# cat /sys/kernel/debug/remoteproc/remoteproc0/trace0 Main started on core 1 .... root@keystone-evm:~#r8…�r8}r8(h‚Uh‘j8ubaubh–)�r8}r8(h‚Uh‘jW6hœjC.h�hžhƒ}r8(h…]hŽ]h‡]h†]r8Udetecting-crash-event-in-mpmr8ah�]r8heauh¤M‚h¥hh¦]r 8(h¨)�r!8}r"8(h‚XDetecting crash event in MPMr#8h‘j8hœjC.h�h¬hƒ}r$8(h…]hŽ]h‡]h†]h�]uh¤M‚h¥hh¦]r%8h¯XDetecting crash event in MPMr&8…�r'8}r(8(h‚j#8h‘j!8ubaubhÜ)�r)8}r*8(h‚XIn the case of a DSP exception, the MPM calls the script provided in JSON config file. The Processor SDK Linux filesystem has a sample script /etc/mpm/crash_callback.sh that sends message to syslog indicating which core crashed. This script can be customized to suit notification needs.r+8h‘j8hœjC.h�hàhƒ}r,8(h…]hŽ]h‡]h†]h�]uh¤M„h¥hh¦]r-8h¯XIn the case of a DSP exception, the MPM calls the script provided in JSON config file. The Processor SDK Linux filesystem has a sample script /etc/mpm/crash_callback.sh that sends message to syslog indicating which core crashed. This script can be customized to suit notification needs.r.8…�r/8}r08(h‚j+8h‘j)8ubaubhÜ)�r18}r28(h‚X**Generating DSP coredump**r38h‘j8hœjC.h�hàhƒ}r48(h…]hŽ]h‡]h†]h�]uh¤M†h¥hh¦]r58j¯)�r68}r78(h‚j38hƒ}r88(h…]hŽ]h‡]h†]h�]uh‘j18h¦]r98h¯XGenerating DSP coredumpr:8…�r;8}r<8(h‚Uh‘j68ubah�j·ubaubhÜ)�r=8}r>8(h‚X/The DSP exceptions can be any of the following:r?8h‘j8hœjC.h�hàhƒ}r@8(h…]hŽ]h‡]h†]h�]uh¤Mˆh¥hh¦]rA8h¯X/The DSP exceptions can be any of the following:rB8…�rC8}rD8(h‚j?8h‘j=8ubaubj)�rE8}rF8(h‚Uh‘j8hœjC.h�j!hƒ}rG8(j#X-h†]h‡]h…]hŽ]h�]uh¤MŠh¥hh¦]rH8(j@)�rI8}rJ8(h‚XSoftware-generated exceptionsrK8h‘jE8hœjC.h�jChƒ}rL8(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rM8hÜ)�rN8}rO8(h‚jK8h‘jI8hœjC.h�hàhƒ}rP8(h…]hŽ]h‡]h†]h�]uh¤MŠh¦]rQ8h¯XSoftware-generated exceptionsrR8…�rS8}rT8(h‚jK8h‘jN8ubaubaubj@)�rU8}rV8(h‚XInternal/external exceptionsrW8h‘jE8hœjC.h�jChƒ}rX8(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rY8hÜ)�rZ8}r[8(h‚jW8h‘jU8hœjC.h�hàhƒ}r\8(h…]hŽ]h‡]h†]h�]uh¤M‹h¦]r]8h¯XInternal/external exceptionsr^8…�r_8}r`8(h‚jW8h‘jZ8ubaubaubj@)�ra8}rb8(h‚XWatchdog timer expiration h‘jE8hœjC.h�jChƒ}rc8(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rd8hÜ)�re8}rf8(h‚XWatchdog timer expirationrg8h‘ja8hœjC.h�hàhƒ}rh8(h…]hŽ]h‡]h†]h�]uh¤MŒh¦]ri8h¯XWatchdog timer expirationrj8…�rk8}rl8(h‚jg8h‘je8ubaubaubeubhÜ)�rm8}rn8(h‚X+The MPM creates an ELF formatted core dump.ro8h‘j8hœjC.h�hàhƒ}rp8(h…]hŽ]h‡]h†]h�]uh¤MŽh¥hh¦]rq8h¯X+The MPM creates an ELF formatted core dump.rr8…�rs8}rt8(h‚jo8h‘jm8ubaubj¡)�ru8}rv8(h‚X5root@keystone-evm:~# mpmcl coredump dsp0 coredump.outh‘j8hœjC.h�j¤hƒ}rw8(hÊhËh†]h‡]h…]hŽ]h�]uh¤M_h¥hh¦]rx8h¯X5root@keystone-evm:~# mpmcl coredump dsp0 coredump.outry8…�rz8}r{8(h‚Uh‘ju8ubaubhÜ)�r|8}r}8(h‚XZThe above command will generate a coredump file with name coredump.out for the DSP core 0.r~8h‘j8hœjC.h�hàhƒ}r8(h…]hŽ]h‡]h†]h�]uh¤M”h¥hh¦]r€8h¯XZThe above command will generate a coredump file with name coredump.out for the DSP core 0.r�8…�r‚8}rƒ8(h‚j~8h‘j|8ubaubj)�r„8}r…8(h‚X‘The coredump can be captured from a running system that is not crashed, in this case the register information won't be available in the coredump.r†8h‘j8hœjC.h�jhƒ}r‡8(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rˆ8hÜ)�r‰8}rŠ8(h‚j†8h‘j„8hœjC.h�hàhƒ}r‹8(h…]hŽ]h‡]h†]h�]uh¤M–h¦]rŒ8h¯X‘The coredump can be captured from a running system that is not crashed, in this case the register information won't be available in the coredump.r�8…�rŽ8}r�8(h‚j†8h‘j‰8ubaubaubeubeubh–)�r�8}r‘8(h‚Uh™Kh‘j1.hœjC.h�hžhƒ}r’8(h…]hŽ]h‡]h†]r“8j.3ah�]r”8hcauh¤Mšh¥hh¦]r•8(h¨)�r–8}r—8(h‚XDisable OpenCL Applicationr˜8h‘j�8hœjC.h�h¬hƒ}r™8(h…]hŽ]h‡]h†]h�]uh¤Mšh¥hh¦]rš8h¯XDisable OpenCL Applicationr›8…�rœ8}r�8(h‚j˜8h‘j–8ubaubhÜ)�rž8}rŸ8(h‚XThe OpenCL application needs to be disabled since it interferes with the caching properties of the memory region used by our modified example. If it is not disabled, the application will hang at App_create(). It can be disabled by issuing the following command:r 8h‘j�8hœjC.h�hàhƒ}r¡8(h…]hŽ]h‡]h†]h�]uh¤Mœh¥hh¦]r¢8h¯XThe OpenCL application needs to be disabled since it interferes with the caching properties of the memory region used by our modified example. If it is not disabled, the application will hang at App_create(). It can be disabled by issuing the following command:r£8…�r¤8}r¥8(h‚j 8h‘jž8ubaubj¡)�r¦8}r§8(h‚X7root@k2g-evm:~# systemctl disable ti-mct-daemon.serviceh‘j�8hœjC.h�j¤hƒ}r¨8(hÊhËh†]h‡]h…]hŽ]h�]uh¤Mmh¥hh¦]r©8h¯X7root@k2g-evm:~# systemctl disable ti-mct-daemon.servicerª8…�r«8}r¬8(h‚Uh‘j¦8ubaubhþ)�r­8}r®8(h‚Uh‘j�8hœjC.h�jhƒ}r¯8(h…]hŽ]h‡]h†]h�]uh¤M¢h¥hh¦]r°8j)�r±8}r²8(h‚UjKh‘j­8hœjC.h�h¤hƒ}r³8(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�r´8}rµ8(h‚XAAfter power-cycling the EVM, we can now load and run the example.r¶8h‘j�8hœjC.h�hàhƒ}r·8(h…]hŽ]h‡]h†]h�]uh¤M¤h¥hh¦]r¸8h¯XAAfter power-cycling the EVM, we can now load and run the example.r¹8…�rº8}r»8(h‚j¶8h‘j´8ubaubeubh–)�r¼8}r½8(h‚Uh‘j1.hœjC.h�hžhƒ}r¾8(h…]hŽ]h‡]h†]r¿8Ufrequently-asked-questionsrÀ8ah�]rÁ8hauh¤M¨h¥hh¦]rÂ8(h¨)�rÃ8}rÄ8(h‚XFrequently Asked QuestionsrÅ8h‘j¼8hœjC.h�h¬hƒ}rÆ8(h…]hŽ]h‡]h†]h�]uh¤M¨h¥hh¦]rÇ8h¯XFrequently Asked QuestionsrÈ8…�rÉ8}rÊ8(h‚jÅ8h‘jÃ8ubaubhÜ)�rË8}rÌ8(h‚X"Q: How to maintain cache coherencyrÍ8h‘j¼8hœjC.h�hàhƒ}rÎ8(h…]hŽ]h‡]h†]h�]uh¤Mªh¥hh¦]rÏ8h¯X"Q: How to maintain cache coherencyrÐ8…�rÑ8}rÒ8(h‚jÍ8h‘jË8ubaubhÜ)�rÓ8}rÔ8(h‚XÊA: In the first 2GB of DDR, region 00 8000 0000 - 00 FFFF FFFF (alias of 08 0000 0000 - 08 7FFF FFFF), no IO coherency is supported. Cache coherency will need to be maintained by software. The cache coherence API descriptions for the A15 can be found in the `TI-RTOS Cache Module cdocs. `__rÕ8h‘j¼8hœjC.h�hàhƒ}rÖ8(h…]hŽ]h‡]h†]h�]uh¤M¬h¥hh¦]r×8(h¯XA: In the first 2GB of DDR, region 00 8000 0000 - 00 FFFF FFFF (alias of 08 0000 0000 - 08 7FFF FFFF), no IO coherency is supported. Cache coherency will need to be maintained by software. The cache coherence API descriptions for the A15 can be found in the rØ8…�rÙ8}rÚ8(h‚XA: In the first 2GB of DDR, region 00 8000 0000 - 00 FFFF FFFF (alias of 08 0000 0000 - 08 7FFF FFFF), no IO coherency is supported. Cache coherency will need to be maintained by software. The cache coherence API descriptions for the A15 can be found in the h‘jÓ8ubj))�rÛ8}rÜ8(h‚XÈ`TI-RTOS Cache Module cdocs. `__hƒ}rÝ8(UnameXTI-RTOS Cache Module cdocs.j-X¦http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/sysbios/6_52_00_12/exports/bios_6_52_00_12/docs/cdoc/ti/sysbios/family/arm/a15/Cache.html#xdoc-desch†]h‡]h…]hŽ]h�]uh‘jÓ8h¦]rÞ8h¯XTI-RTOS Cache Module cdocs.rß8…�rà8}rá8(h‚Uh‘jÛ8ubah�j2ubeubhÜ)�râ8}rã8(h‚X*Q: MPM does not load and run the DSP imagerä8h‘j¼8hœjC.h�hàhƒ}rå8(h…]hŽ]h‡]h†]h�]uh¤M®h¥hh¦]ræ8h¯X*Q: MPM does not load and run the DSP imagerç8…�rè8}ré8(h‚jä8h‘jâ8ubaubhÜ)�rê8}rë8(h‚XCA: There can be several scenarios, the following are a few of them:rì8h‘j¼8hœjC.h�hàhƒ}rí8(h…]hŽ]h‡]h†]h�]uh¤M°h¥hh¦]rî8h¯XCA: There can be several scenarios, the following are a few of them:rï8…�rð8}rñ8(h‚jì8h‘jê8ubaubj)�rò8}ró8(h‚Uh‘j¼8hœjC.h�j!hƒ}rô8(j#X-h†]h‡]h…]hŽ]h�]uh¤M²h¥hh¦]rõ8(j@)�rö8}r÷8(h‚XøThe MPM server may not be running. The command mpmcl ping will timeout in this case. The mpm server is expected to be running in the background to service the requests from mpm client. The log file /var/log/mpmsrv.log can provide more information. h‘jò8hœjC.h�jChƒ}rø8(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rù8hÜ)�rú8}rû8(h‚X÷The MPM server may not be running. The command mpmcl ping will timeout in this case. The mpm server is expected to be running in the background to service the requests from mpm client. The log file /var/log/mpmsrv.log can provide more information.rü8h‘jö8hœjC.h�hàhƒ}rý8(h…]hŽ]h‡]h†]h�]uh¤M²h¦]rþ8h¯X÷The MPM server may not be running. The command mpmcl ping will timeout in this case. The mpm server is expected to be running in the background to service the requests from mpm client. The log file /var/log/mpmsrv.log can provide more information.rÿ8…�r9}r9(h‚jü8h‘jú8ubaubaubj@)�r9}r9(h‚XüAn issue can be the devices relevant to MPM /dev/dsp0, ... , /dev/dsp7, /dev/dspmem are not created. You need to check if these devices are present. If they are not present then check if the kernel and device tree have right patches for these devices. h‘jò8hœjC.h�jChƒ}r9(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r9hÜ)�r9}r9(h‚XûAn issue can be the devices relevant to MPM /dev/dsp0, ... , /dev/dsp7, /dev/dspmem are not created. You need to check if these devices are present. If they are not present then check if the kernel and device tree have right patches for these devices.r9h‘j9hœjC.h�hàhƒ}r 9(h…]hŽ]h‡]h†]h�]uh¤M´h¦]r 9h¯XûAn issue can be the devices relevant to MPM /dev/dsp0, ... , /dev/dsp7, /dev/dspmem are not created. You need to check if these devices are present. If they are not present then check if the kernel and device tree have right patches for these devices.r 9…�r 9}r 9(h‚j9h‘j9ubaubaubj@)�r9}r9(h‚XCThe log can print error codes provided in MPM error codes section. h‘jò8hœjC.h�jChƒ}r9(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r9hÜ)�r9}r9(h‚XBThe log can print error codes provided in MPM error codes section.r9h‘j9hœjC.h�hàhƒ}r9(h…]hŽ]h‡]h†]h�]uh¤M¶h¦]r9h¯XBThe log can print error codes provided in MPM error codes section.r9…�r9}r9(h‚j9h‘j9ubaubaubj@)�r9}r9(h‚X*Another way to debug loading issues is, to run mpm server in non-daemon mode from one shell using command mpmsrv -n, before this you need to kill the server if it is running. (The command to kill is mpmsrv -k or you can choose to kill the process). Then from other shell run the client operations. h‘jò8hœjC.h�jChƒ}r9(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r9hÜ)�r9}r9(h‚X)Another way to debug loading issues is, to run mpm server in non-daemon mode from one shell using command mpmsrv -n, before this you need to kill the server if it is running. (The command to kill is mpmsrv -k or you can choose to kill the process). Then from other shell run the client operations.r 9h‘j9hœjC.h�hàhƒ}r!9(h…]hŽ]h‡]h†]h�]uh¤M¸h¦]r"9h¯X)Another way to debug loading issues is, to run mpm server in non-daemon mode from one shell using command mpmsrv -n, before this you need to kill the server if it is running. (The command to kill is mpmsrv -k or you can choose to kill the process). Then from other shell run the client operations.r#9…�r$9}r%9(h‚j 9h‘j9ubaubaubeubhÜ)�r&9}r'9(h‚X!Q: MPM fails to load the segmentsr(9h‘j¼8hœjC.h�hàhƒ}r)9(h…]hŽ]h‡]h†]h�]uh¤Mºh¥hh¦]r*9h¯X!Q: MPM fails to load the segmentsr+9…�r,9}r-9(h‚j(9h‘j&9ubaubhÜ)�r.9}r/9(h‚X,A: The MPM fundamentally copies segments from DSP image to memory using a custom UIO mmap interface. Each local or remote node (DSPs) is allocated some amount of resources using the config file. The segments in the config file needs to be subset of memory resources present in kernel dts file. The system integrator can choose to add or change memory configurations as needed by application. In order to change the default behavior user need to change in JSON config file and kernel device tree. In JSON configuration file, the segments section need to be updated. You need to make sure it does not overlap the scratch memory section. You might have to move the scratch section if the allocated DDR size is increased. And, in the kernel device tree the mem sections of dsp0, .. , dsp7, dspmem need to be updated.r09h‘j¼8hœjC.h�hàhƒ}r19(h…]hŽ]h‡]h†]h�]uh¤M½h¥hh¦]r29h¯X,A: The MPM fundamentally copies segments from DSP image to memory using a custom UIO mmap interface. Each local or remote node (DSPs) is allocated some amount of resources using the config file. The segments in the config file needs to be subset of memory resources present in kernel dts file. The system integrator can choose to add or change memory configurations as needed by application. In order to change the default behavior user need to change in JSON config file and kernel device tree. In JSON configuration file, the segments section need to be updated. You need to make sure it does not overlap the scratch memory section. You might have to move the scratch section if the allocated DDR size is increased. And, in the kernel device tree the mem sections of dsp0, .. , dsp7, dspmem need to be updated.r39…�r49}r59(h‚j09h‘j.9ubaubj)�r69}r79(h‚Uh‘j¼8hœjC.h�j!hƒ}r89(j#X-h†]h‡]h…]hŽ]h�]uh¤M¿h¥hh¦]r99(j@)�r:9}r;9(h‚X:Sometimes few segments used by DSP may not accessible by ARM at the time of loading. These segment can cause load failure. So it is useful to understand the memory layout of your own application and if there are any such sections, you can skip loading those segments to memory using NOLOAD method described above. h‘j69hœjC.h�jChƒ}r<9(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r=9hÜ)�r>9}r?9(h‚X9Sometimes few segments used by DSP may not accessible by ARM at the time of loading. These segment can cause load failure. So it is useful to understand the memory layout of your own application and if there are any such sections, you can skip loading those segments to memory using NOLOAD method described above.r@9h‘j:9hœjC.h�hàhƒ}rA9(h…]hŽ]h‡]h†]h�]uh¤M¿h¦]rB9h¯X9Sometimes few segments used by DSP may not accessible by ARM at the time of loading. These segment can cause load failure. So it is useful to understand the memory layout of your own application and if there are any such sections, you can skip loading those segments to memory using NOLOAD method described above.rC9…�rD9}rE9(h‚j@9h‘j>9ubaubaubj@)�rF9}rG9(h‚X`The MPM does not have MPAX support yet. So the MPAX support needs to be handled by application. h‘j69hœjC.h�jChƒ}rH9(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rI9hÜ)�rJ9}rK9(h‚X_The MPM does not have MPAX support yet. So the MPAX support needs to be handled by application.rL9h‘jF9hœjC.h�hàhƒ}rM9(h…]hŽ]h‡]h†]h�]uh¤MÁh¦]rN9h¯X_The MPM does not have MPAX support yet. So the MPAX support needs to be handled by application.rO9…�rP9}rQ9(h‚jL9h‘jJ9ubaubaubj@)�rR9}rS9(h‚X5If the linker adds a hole in the resource table section right before the actual resource_table due to the alignment restriction, then MPM as of now won't be able to skip the hole and might get stuck. In this case if you hex-dump resource table (method given below) size will be quite large (normally for a non-IPC case it is around 0xac). The workaround is to align the .resource_table section to 0x1000 using linker command file or some other method so that linker does not add any hole in the resource_table section. In future, MPM will take care of this offset. h‘j69hœjC.h�jChƒ}rT9(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rU9hÜ)�rV9}rW9(h‚X4If the linker adds a hole in the resource table section right before the actual resource_table due to the alignment restriction, then MPM as of now won't be able to skip the hole and might get stuck. In this case if you hex-dump resource table (method given below) size will be quite large (normally for a non-IPC case it is around 0xac). The workaround is to align the .resource_table section to 0x1000 using linker command file or some other method so that linker does not add any hole in the resource_table section. In future, MPM will take care of this offset.rX9h‘jR9hœjC.h�hàhƒ}rY9(h…]hŽ]h‡]h†]h�]uh¤MÃh¦]rZ9h¯X4If the linker adds a hole in the resource table section right before the actual resource_table due to the alignment restriction, then MPM as of now won't be able to skip the hole and might get stuck. In this case if you hex-dump resource table (method given below) size will be quite large (normally for a non-IPC case it is around 0xac). The workaround is to align the .resource_table section to 0x1000 using linker command file or some other method so that linker does not add any hole in the resource_table section. In future, MPM will take care of this offset.r[9…�r\9}r]9(h‚jX9h‘jV9ubaubaubeubhÜ)�r^9}r_9(h‚XQ: MPM fails to run the imager`9h‘j¼8hœjC.h�hàhƒ}ra9(h…]hŽ]h‡]h†]h�]uh¤MÅh¥hh¦]rb9h¯XQ: MPM fails to run the imagerc9…�rd9}re9(h‚j`9h‘j^9ubaubhÜ)�rf9}rg9(h‚X,A: MPM takes DSP out of reset to run the image. So, the fails to run normally attributed to DSP is crashing before main or some other issue in the image. But, to debug such issue, after mpmcl run, use CCS to connect to the target and then do load symbols of the images. Then the DSP can be debugged using CCS. Another way to debug the run issue, is to aff a infinite while loop in the reset function so that the DSP stops at the very beginning. Then load and run the DSP using MPM and connect thru CCS, do load symbols and come out of while loop and debug.rh9h‘j¼8hœjC.h�hàhƒ}ri9(h…]hŽ]h‡]h†]h�]uh¤MÇh¥hh¦]rj9h¯X,A: MPM takes DSP out of reset to run the image. So, the fails to run normally attributed to DSP is crashing before main or some other issue in the image. But, to debug such issue, after mpmcl run, use CCS to connect to the target and then do load symbols of the images. Then the DSP can be debugged using CCS. Another way to debug the run issue, is to aff a infinite while loop in the reset function so that the DSP stops at the very beginning. Then load and run the DSP using MPM and connect thru CCS, do load symbols and come out of while loop and debug.rk9…�rl9}rm9(h‚jh9h‘jf9ubaubhÜ)�rn9}ro9(h‚X&Q: I don't see DSP prints from debugfsrp9h‘j¼8hœjC.h�hàhƒ}rq9(h…]hŽ]h‡]h†]h�]uh¤MÉh¥hh¦]rr9h¯X&Q: I don't see DSP prints from debugfsrs9…�rt9}ru9(h‚jp9h‘jn9ubaubhÜ)�rv9}rw9(h‚XA: Make sure you followed the procedure described above to include the resource table in the image. Care should be taken for the resource table not being compiled out by linker. To check if the resource table present in the image using command readelf --hex-dump=.resource_table . It should have some non-zero data. Another point is, if you are loading same image in multiple cores and if the resource table and trace buffer segments overlap with each other in memory, then there can be undesirable effect.rx9h‘j¼8hœjC.h�hàhƒ}ry9(h…]hŽ]h‡]h†]h�]uh¤MËh¥hh¦]rz9h¯XA: Make sure you followed the procedure described above to include the resource table in the image. Care should be taken for the resource table not being compiled out by linker. To check if the resource table present in the image using command readelf --hex-dump=.resource_table . It should have some non-zero data. Another point is, if you are loading same image in multiple cores and if the resource table and trace buffer segments overlap with each other in memory, then there can be undesirable effect.r{9…�r|9}r}9(h‚jx9h‘jv9ubaubhÜ)�r~9}r9(h‚XSQ: I see the DSP state in /sys/kernel/debug/remoteproc/remoteproc0/state as crashedr€9h‘j¼8hœjC.h�hàhƒ}r�9(h…]hŽ]h‡]h†]h�]uh¤MÎh¥hh¦]r‚9h¯XSQ: I see the DSP state in /sys/kernel/debug/remoteproc/remoteproc0/state as crashedrƒ9…�r„9}r…9(h‚j€9h‘j~9ubaubhÜ)�r†9}r‡9(h‚XA: The file /sys/kernel/debug/remoteproc/remoteproc#/state does not indicate state of DSP when MPM is used for loading. The state of the DSP can be seen using MPM client. See the description of the command in Methods to load and run ELF images using MPM sections.rˆ9h‘j¼8hœjC.h�hàhƒ}r‰9(h…]hŽ]h‡]h†]h�]uh¤MÐh¥hh¦]rŠ9h¯XA: The file /sys/kernel/debug/remoteproc/remoteproc#/state does not indicate state of DSP when MPM is used for loading. The state of the DSP can be seen using MPM client. See the description of the command in Methods to load and run ELF images using MPM sections.r‹9…�rŒ9}r�9(h‚jˆ9h‘j†9ubaubeubeubh–)�rŽ9}r�9(h‚Uh‘hšhœhŒh�hžhƒ}r�9(h…]hŽ]h‡]h†]r‘9U&multiple-ways-of-arm-dsp-communicationr’9ah�]r“9h auh¤Kh¥hh¦]r”9(h¨)�r•9}r–9(h‚X&Multiple Ways of ARM-DSP Communicationr—9h‘jŽ9hœhŒh�h¬hƒ}r˜9(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]r™9h¯X&Multiple Ways of ARM-DSP Communicationrš9…�r›9}rœ9(h‚j—9h‘j•9ubaubhÂ)�r�9}rž9(h‚XWhttp://processors.wiki.ti.com/index.php/Processor-sdk-MultiWay-of-ARM-DSP-Communicationh‘jŽ9hœhŠXWsource/linux/Foundational_Components/IPC/Multiple_Ways_of_ARM-DSP_Communication.rst.incrŸ9…�r 9}r¡9bh�hÈhƒ}r¢9(hÊhËh†]h‡]h…]hŽ]h�]uh¤Kh¥hh¦]r£9h¯XWhttp://processors.wiki.ti.com/index.php/Processor-sdk-MultiWay-of-ARM-DSP-Communicationr¤9…�r¥9}r¦9(h‚Uh‘j�9ubaubhÜ)�r§9}r¨9(h‚X5This document describes the ways of communication on TI multicore devices. The individual cores in an applicatioin can assume the roles of Host/Device or Master/Slave. This discussion here assumes the Host/Master is ARM® cluster running SMP/Linux and the Device/Slave is the C6xx DSP cluster running TI-RTOS.r©9h‘jŽ9hœj 9h�hàhƒ}rª9(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]r«9h¯X5This document describes the ways of communication on TI multicore devices. The individual cores in an applicatioin can assume the roles of Host/Device or Master/Slave. This discussion here assumes the Host/Master is ARM® cluster running SMP/Linux and the Device/Slave is the C6xx DSP cluster running TI-RTOS.r¬9…�r­9}r®9(h‚j©9h‘j§9ubaubh’)�r¯9}r°9(h‚XOpenCLr±9h‘jŽ9hœj 9h�hÓhƒ}r²9(h†]r³9Uopenclr´9ah‡]h…]hŽ]h�]rµ9hauh¤Nh¥hh¦]r¶9h¯XOpenCLr·9…�r¸9}r¹9(h‚j±9h‘j¯9ubaubhÜ)�rº9}r»9(h‚XäOpenCL is a framework for writing programs that execute across heterogeneous systems, and for expressing programs where parallel computation is dispatched across heterogeneous devices. It is an open, royalty-free standard managed by Khronos consortium. On a heterogeneous SoC, OpenCL views one of the programmable cores as a host and the other cores as devices. The application running on the host (i.e. the host program) manages execution of code (kernels) on the device and is also responsible for making data available to the device. A device consists of one or more compute units. On the ARM and DSP SoCs, each C66x DSP is a compute unit. The OpenCL runtime consists of two components: (1) An API for the host program to create and submit kernels for execution and (2) A cross-platform language for expressing kernels – OpenCL C – which is based on C99 C with some additions and restrictions OpenCL supports both data parallel and task parallel programming paradigms. Data parallel execution parallelizes the execution across compute units on a device. Task parallel execution enables asynchronous dispatch of tasks to each compute unit. For more info, please refer to `OpenCL User’s Guide `__h‘jŽ9hœj 9h�hàhƒ}r¼9(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]r½9(h¯X™OpenCL is a framework for writing programs that execute across heterogeneous systems, and for expressing programs where parallel computation is dispatched across heterogeneous devices. It is an open, royalty-free standard managed by Khronos consortium. On a heterogeneous SoC, OpenCL views one of the programmable cores as a host and the other cores as devices. The application running on the host (i.e. the host program) manages execution of code (kernels) on the device and is also responsible for making data available to the device. A device consists of one or more compute units. On the ARM and DSP SoCs, each C66x DSP is a compute unit. The OpenCL runtime consists of two components: (1) An API for the host program to create and submit kernels for execution and (2) A cross-platform language for expressing kernels – OpenCL C – which is based on C99 C with some additions and restrictions OpenCL supports both data parallel and task parallel programming paradigms. Data parallel execution parallelizes the execution across compute units on a device. Task parallel execution enables asynchronous dispatch of tasks to each compute unit. For more info, please refer to r¾9…�r¿9}rÀ9(h‚X™OpenCL is a framework for writing programs that execute across heterogeneous systems, and for expressing programs where parallel computation is dispatched across heterogeneous devices. It is an open, royalty-free standard managed by Khronos consortium. On a heterogeneous SoC, OpenCL views one of the programmable cores as a host and the other cores as devices. The application running on the host (i.e. the host program) manages execution of code (kernels) on the device and is also responsible for making data available to the device. A device consists of one or more compute units. On the ARM and DSP SoCs, each C66x DSP is a compute unit. The OpenCL runtime consists of two components: (1) An API for the host program to create and submit kernels for execution and (2) A cross-platform language for expressing kernels – OpenCL C – which is based on C99 C with some additions and restrictions OpenCL supports both data parallel and task parallel programming paradigms. Data parallel execution parallelizes the execution across compute units on a device. Task parallel execution enables asynchronous dispatch of tasks to each compute unit. For more info, please refer to h‘jº9ubj))�rÁ9}rÂ9(h‚XK`OpenCL User’s Guide `__hƒ}rÃ9(UnameXOpenCL User’s Guidej-X/http://downloads.ti.com/mctools/esd/docs/openclh†]h‡]h…]hŽ]h�]uh‘jº9h¦]rÄ9h¯XOpenCL User’s GuiderÅ9…�rÆ9}rÇ9(h‚Uh‘jÁ9ubah�j2ubeubh’)�rÈ9}rÉ9(h‚X Use CasesrÊ9h‘jŽ9hœj 9h�hÓhƒ}rË9(h†]rÌ9U use-casesrÍ9ah‡]h…]hŽ]h�]rÎ9h2auh¤Nh¥hh¦]rÏ9h¯X Use CasesrÐ9…�rÑ9}rÒ9(h‚jÊ9h‘jÈ9ubaubj)�rÓ9}rÔ9(h‚Uh‘jŽ9hœj 9h�j!hƒ}rÕ9(j#X-h†]h‡]h…]hŽ]h�]uh¤Kh¥hh¦]rÖ9j@)�r×9}rØ9(h‚X?Offload computation from ARM running Linux or RTOS to the DSPs h‘jÓ9hœj 9h�jChƒ}rÙ9(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rÚ9hÜ)�rÛ9}rÜ9(h‚X>Offload computation from ARM running Linux or RTOS to the DSPsrÝ9h‘j×9hœj 9h�hàhƒ}rÞ9(h…]hŽ]h‡]h†]h�]uh¤Kh¦]rß9h¯X>Offload computation from ARM running Linux or RTOS to the DSPsrà9…�rá9}râ9(h‚jÝ9h‘jÛ9ubaubaubaubh’)�rã9}rä9(h‚XExamplesrå9h‘jŽ9hœj 9h�hÓhƒ}ræ9(h†]rç9Uexamplesrè9ah‡]h…]hŽ]h�]ré9hFauh¤Nh¥hh¦]rê9h¯XExamplesrë9…�rì9}rí9(h‚jå9h‘jã9ubaubhÜ)�rî9}rï9(h‚XgPlease see `OpenCL examples `__h‘jŽ9hœj 9h�hàhƒ}rð9(h…]hŽ]h‡]h†]h�]uh¤K#h¥hh¦]rñ9(h¯X Please see rò9…�ró9}rô9(h‚X Please see h‘jî9ubj))�rõ9}rö9(h‚X\`OpenCL examples `__hƒ}r÷9(UnameXOpenCL examplesj-XFhttp://downloads.ti.com/mctools/esd/docs/opencl/examples/overview.htmlh†]h‡]h…]hŽ]h�]uh‘jî9h¦]rø9h¯XOpenCL examplesrù9…�rú9}rû9(h‚Uh‘jõ9ubah�j2ubeubh’)�rü9}rý9(h‚XBenefitsrþ9h‘jŽ9hœj 9h�hÓhƒ}rÿ9(h†]r:Ubenefitsr:ah‡]h…]hŽ]h�]r:h:auh¤Nh¥hh¦]r:h¯XBenefitsr:…�r:}r:(h‚jþ9h‘jü9ubaubj)�r:}r:(h‚Uh‘jŽ9hœj 9h�j!hƒ}r :(j#X-h†]h‡]h…]hŽ]h�]uh¤K)h¥hh¦]r :(j@)�r :}r :(h‚XEasy porting between devicesr :h‘j:hœj 9h�jChƒ}r:(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r:hÜ)�r:}r:(h‚j :h‘j :hœj 9h�hàhƒ}r:(h…]hŽ]h‡]h†]h�]uh¤K)h¦]r:h¯XEasy porting between devicesr:…�r:}r:(h‚j :h‘j:ubaubaubj@)�r:}r:(h‚X)No need to understand memory architecturer:h‘j:hœj 9h�jChƒ}r:(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r:hÜ)�r:}r:(h‚j:h‘j:hœj 9h�hàhƒ}r:(h…]hŽ]h‡]h†]h�]uh¤K*h¦]r:h¯X)No need to understand memory architecturer :…�r!:}r":(h‚j:h‘j:ubaubaubj@)�r#:}r$:(h‚X#No need to worry about MPAX and MMUr%:h‘j:hœj 9h�jChƒ}r&:(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r':hÜ)�r(:}r):(h‚j%:h‘j#:hœj 9h�hàhƒ}r*:(h…]hŽ]h‡]h†]h�]uh¤K+h¦]r+:h¯X#No need to worry about MPAX and MMUr,:…�r-:}r.:(h‚j%:h‘j(:ubaubaubj@)�r/:}r0:(h‚X No need to worry about coherencyr1:h‘j:hœj 9h�jChƒ}r2:(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r3:hÜ)�r4:}r5:(h‚j1:h‘j/:hœj 9h�hàhƒ}r6:(h…]hŽ]h‡]h†]h�]uh¤K,h¦]r7:h¯X No need to worry about coherencyr8:…�r9:}r::(h‚j1:h‘j4:ubaubaubj@)�r;:}r<:(h‚X6No need to build/configure/use IPC between ARM and DSPr=:h‘j:hœj 9h�jChƒ}r>:(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r?:hÜ)�r@:}rA:(h‚j=:h‘j;:hœj 9h�hàhƒ}rB:(h…]hŽ]h‡]h†]h�]uh¤K-h¦]rC:h¯X6No need to build/configure/use IPC between ARM and DSPrD:…�rE:}rF:(h‚j=:h‘j@:ubaubaubj@)�rG:}rH:(h‚XCNo need to be an expert in DSP code, architecture, or optimization h‘j:hœj 9h�jChƒ}rI:(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rJ:hÜ)�rK:}rL:(h‚XBNo need to be an expert in DSP code, architecture, or optimizationrM:h‘jG:hœj 9h�hàhƒ}rN:(h…]hŽ]h‡]h†]h�]uh¤K.h¦]rO:h¯XBNo need to be an expert in DSP code, architecture, or optimizationrP:…�rQ:}rR:(h‚jM:h‘jK:ubaubaubeubh’)�rS:}rT:(h‚X DrawbacksrU:h‘jŽ9hœj 9h�hÓhƒ}rV:(h†]rW:U drawbacksrX:ah‡]h…]hŽ]h�]rY:h_auh¤Nh¥hh¦]rZ:h¯X Drawbacksr[:…�r\:}r]:(h‚jU:h‘jS:ubaubj)�r^:}r_:(h‚Uh‘jŽ9hœj 9h�j!hƒ}r`:(j#X-h†]h‡]h…]hŽ]h�]uh¤K3h¥hh¦]ra:j@)�rb:}rc:(h‚XMDon't have control on system memory layout, etc. to handle optimize DSP code h‘j^:hœj 9h�jChƒ}rd:(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]re:hÜ)�rf:}rg:(h‚XLDon't have control on system memory layout, etc. to handle optimize DSP coderh:h‘jb:hœj 9h�hàhƒ}ri:(h…]hŽ]h‡]h†]h�]uh¤K3h¦]rj:h¯XLDon't have control on system memory layout, etc. to handle optimize DSP coderk:…�rl:}rm:(h‚jh:h‘jf:ubaubaubaubhþ)�rn:}ro:(h‚Uh‘jŽ9hœj 9h�jhƒ}rp:(h…]hŽ]h‡]h†]h�]uh¤K6h¥hh¦]rq:j)�rr:}rs:(h‚UjKh‘jn:hœj 9h�h¤hƒ}rt:(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubh’)�ru:}rv:(h‚XDCE (Distributed Codec Engine)rw:h‘jŽ9hœj 9h�hÓhƒ}rx:(h†]ry:Udce-distributed-codec-enginerz:ah‡]h…]hŽ]h�]r{:hTauh¤Nh¥hh¦]r|:h¯XDCE (Distributed Codec Engine)r}:…�r~:}r:(h‚jw:h‘ju:ubaubhÜ)�r€:}r�:(h‚XëDCE Framework provides an easy way for users to write applications on devices, such as AM57xx, having hardware accelerators for image and video. It eanbles and provides remote access to hardware acceleration for audio and video encoding and decoding on the slave cores. The ARM user space GStreamer based multimedia application uses GStreamer library to load and interface with TI GStreamer plugin which handles all the details specific to use of the hardware accelerator. The plugin interfaces libdce module that provides the ARM user space API. Libdce uses RPMSG framework on the ARM which communicates to the counterpart on the slave core. On the slave core, it uses Codec engine and Frame Component for the video/image codec processing on IVA.r‚:h‘jŽ9hœj 9h�hàhƒ}rƒ:(h…]hŽ]h‡]h†]h�]uh¤K;h¥hh¦]r„:h¯XëDCE Framework provides an easy way for users to write applications on devices, such as AM57xx, having hardware accelerators for image and video. It eanbles and provides remote access to hardware acceleration for audio and video encoding and decoding on the slave cores. The ARM user space GStreamer based multimedia application uses GStreamer library to load and interface with TI GStreamer plugin which handles all the details specific to use of the hardware accelerator. The plugin interfaces libdce module that provides the ARM user space API. Libdce uses RPMSG framework on the ARM which communicates to the counterpart on the slave core. On the slave core, it uses Codec engine and Frame Component for the video/image codec processing on IVA.r…:…�r†:}r‡:(h‚j‚:h‘j€:ubaubcdocutils.nodes raw rˆ:)�r‰:}rŠ:(h‚X
h‘jŽ9hœj 9h�Urawr‹:hƒ}rŒ:(UformatXhtmlhÊhËh†]h‡]h…]hŽ]h�]uh¤KGh¥hh¦]r�:h¯X
rŽ:…�r�:}r�:(h‚Uh‘j‰:ubaubjˆ:)�r‘:}r’:(h‚X
h‘jŽ9hœj 9h�j‹:hƒ}r“:(UformatXhtmlhÊhËh†]h‡]h…]hŽ]h�]uh¤KKh¥hh¦]r”:h¯X
r•:…�r–:}r—:(h‚Uh‘j‘:ubaubjr)�r˜:}r™:(h‚X1.. Image:: ../images/Mm_software_overview_v3.png h‘jŽ9hœj 9h�jyhƒ}rš:(UuriX+linux/../images/Mm_software_overview_v3.pngr›:h†]h‡]h…]hŽ]jw}rœ:U*j›:sh�]uh¤KPh¥hh¦]ubjˆ:)�r�:}rž:(h‚X
h‘jŽ9hœj 9h�j‹:hƒ}rŸ:(UformatXhtmlhÊhËh†]h‡]h…]hŽ]h�]uh¤KQh¥hh¦]r :h¯X
r¡:…�r¢:}r£:(h‚Uh‘j�:ubaubjˆ:)�r¤:}r¥:(h‚X
h‘jŽ9hœj 9h�j‹:hƒ}r¦:(UformatXhtmlhÊhËh†]h‡]h…]hŽ]h�]uh¤KUh¥hh¦]r§:h¯X
r¨:…�r©:}rª:(h‚Uh‘j¤:ubaubhÜ)�r«:}r¬:(h‚Xk**Overview of the Multimedia Software Stack using DCE** AM57xx as an example has the following acceleratorsh‘jŽ9hœj 9h�hàhƒ}r­:(h…]hŽ]h‡]h†]h�]uh¤KYh¥hh¦]r®:(j¯)�r¯:}r°:(h‚X7**Overview of the Multimedia Software Stack using DCE**hƒ}r±:(h…]hŽ]h‡]h†]h�]uh‘j«:h¦]r²:h¯X3Overview of the Multimedia Software Stack using DCEr³:…�r´:}rµ:(h‚Uh‘j¯:ubah�j·ubh¯X4 AM57xx as an example has the following acceleratorsr¶:…�r·:}r¸:(h‚X4 AM57xx as an example has the following acceleratorsh‘j«:ubeubj)�r¹:}rº:(h‚Uh‘jŽ9hœj 9h�j!hƒ}r»:(j#X-h†]h‡]h…]hŽ]h�]uh¤K\h¥hh¦]r¼:(j@)�r½:}r¾:(h‚X!Image and Video Accelerator (IVA)r¿:h‘j¹:hœj 9h�jChƒ}rÀ:(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rÁ:hÜ)�rÂ:}rÃ:(h‚j¿:h‘j½:hœj 9h�hàhƒ}rÄ:(h…]hŽ]h‡]h†]h�]uh¤K\h¦]rÅ:h¯X!Image and Video Accelerator (IVA)rÆ:…�rÇ:}rÈ:(h‚j¿:h‘jÂ:ubaubaubj@)�rÉ:}rÊ:(h‚XVideo Processing Engine (VPE)rË:h‘j¹:hœj 9h�jChƒ}rÌ:(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rÍ:hÜ)�rÎ:}rÏ:(h‚jË:h‘jÉ:hœj 9h�hàhƒ}rÐ:(h…]hŽ]h‡]h†]h�]uh¤K]h¦]rÑ:h¯XVideo Processing Engine (VPE)rÒ:…�rÓ:}rÔ:(h‚jË:h‘jÎ:ubaubaubj@)�rÕ:}rÖ:(h‚XPC66x DSP cores for offloading certain image/video and/or voice/audio processing h‘j¹:hœj 9h�jChƒ}r×:(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rØ:hÜ)�rÙ:}rÚ:(h‚XOC66x DSP cores for offloading certain image/video and/or voice/audio processingrÛ:h‘jÕ:hœj 9h�hàhƒ}rÜ:(h…]hŽ]h‡]h†]h�]uh¤K^h¦]rÝ:h¯XOC66x DSP cores for offloading certain image/video and/or voice/audio processingrÞ:…�rß:}rà:(h‚jÛ:h‘jÙ:ubaubaubeubhÜ)�rá:}râ:(h‚XõUsers can leverate open source elements that provide functionality such as AVI stream demuxing, and audio codec, etc. These along with the ARM based GStreamer plugins in TI's Processor Linux SDK provide the abstracts for the accelerator offload.rã:h‘jŽ9hœj 9h�hàhƒ}rä:(h…]hŽ]h‡]h†]h�]uh¤Kah¥hh¦]rå:h¯XõUsers can leverate open source elements that provide functionality such as AVI stream demuxing, and audio codec, etc. These along with the ARM based GStreamer plugins in TI's Processor Linux SDK provide the abstracts for the accelerator offload.ræ:…�rç:}rè:(h‚jã:h‘já:ubaubhÜ)�ré:}rê:(h‚XAIn AM57xx, the hardware accelerators are capable of the followingrë:h‘jŽ9hœj 9h�hàhƒ}rì:(h…]hŽ]h‡]h†]h�]uh¤Kfh¥hh¦]rí:h¯XAIn AM57xx, the hardware accelerators are capable of the followingrî:…�rï:}rð:(h‚jë:h‘jé:ubaubj)�rñ:}rò:(h‚Uh‘jŽ9hœj 9h�j!hƒ}ró:(j#X-h†]h‡]h…]hŽ]h�]uh¤Khh¥hh¦]rô:(j@)�rõ:}rö:(h‚X�IVA for multimedia enconding and decoding - Video Decode: H264, MPEG4, MPEG2, and VC1 - video Encode: H264, and MPEG4 - Image Decode: MJPEG h‘jñ:hœNh�jChƒ}r÷:(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rø:(hÜ)�rù:}rú:(h‚X)IVA for multimedia enconding and decodingrû:h‘jõ:hœj 9h�hàhƒ}rü:(h…]hŽ]h‡]h†]h�]uh¤Khh¦]rý:h¯X)IVA for multimedia enconding and decodingrþ:…�rÿ:}r;(h‚jû:h‘jù:ubaubj)�r;}r;(h‚Uhƒ}r;(j#X-h†]h‡]h…]hŽ]h�]uh‘jõ:h¦]r;(j@)�r;}r;(h‚X)Video Decode: H264, MPEG4, MPEG2, and VC1r;hƒ}r;(h…]hŽ]h‡]h†]h�]uh‘j;h¦]r ;hÜ)�r ;}r ;(h‚j;h‘j;hœj 9h�hàhƒ}r ;(h…]hŽ]h‡]h†]h�]uh¤Kjh¦]r ;h¯X)Video Decode: H264, MPEG4, MPEG2, and VC1r;…�r;}r;(h‚j;h‘j ;ubaubah�jCubj@)�r;}r;(h‚Xvideo Encode: H264, and MPEG4r;hƒ}r;(h…]hŽ]h‡]h†]h�]uh‘j;h¦]r;hÜ)�r;}r;(h‚j;h‘j;hœj 9h�hàhƒ}r;(h…]hŽ]h‡]h†]h�]uh¤Kkh¦]r;h¯Xvideo Encode: H264, and MPEG4r;…�r;}r;(h‚j;h‘j;ubaubah�jCubj@)�r;}r;(h‚XImage Decode: MJPEG hƒ}r;(h…]hŽ]h‡]h†]h�]uh‘j;h¦]r ;hÜ)�r!;}r";(h‚XImage Decode: MJPEGr#;h‘j;hœj 9h�hàhƒ}r$;(h…]hŽ]h‡]h†]h�]uh¤Klh¦]r%;h¯XImage Decode: MJPEGr&;…�r';}r(;(h‚j#;h‘j!;ubaubah�jCubeh�j!ubeubj@)�r);}r*;(h‚XèVGE for video operations such as scaling, color space conversion, and deinterlacing of the following formats: - Supported Input formats: NV12, YUYV, UYVY - Supported Output formats: NV12, YUYV, UYVY, RGB24, ARGB24, and ABGR24 h‘jñ:hœNh�jChƒ}r+;(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r,;(hÜ)�r-;}r.;(h‚XmVGE for video operations such as scaling, color space conversion, and deinterlacing of the following formats:r/;h‘j);hœj 9h�hàhƒ}r0;(h…]hŽ]h‡]h†]h�]uh¤Knh¦]r1;h¯XmVGE for video operations such as scaling, color space conversion, and deinterlacing of the following formats:r2;…�r3;}r4;(h‚j/;h‘j-;ubaubj)�r5;}r6;(h‚Uhƒ}r7;(j#X-h†]h‡]h…]hŽ]h�]uh‘j);h¦]r8;(j@)�r9;}r:;(h‚X)Supported Input formats: NV12, YUYV, UYVYr;;hƒ}r<;(h…]hŽ]h‡]h†]h�]uh‘j5;h¦]r=;hÜ)�r>;}r?;(h‚j;;h‘j9;hœj 9h�hàhƒ}r@;(h…]hŽ]h‡]h†]h�]uh¤Kqh¦]rA;h¯X)Supported Input formats: NV12, YUYV, UYVYrB;…�rC;}rD;(h‚j;;h‘j>;ubaubah�jCubj@)�rE;}rF;(h‚XFSupported Output formats: NV12, YUYV, UYVY, RGB24, ARGB24, and ABGR24 hƒ}rG;(h…]hŽ]h‡]h†]h�]uh‘j5;h¦]rH;hÜ)�rI;}rJ;(h‚XESupported Output formats: NV12, YUYV, UYVY, RGB24, ARGB24, and ABGR24rK;h‘jE;hœj 9h�hàhƒ}rL;(h…]hŽ]h‡]h†]h�]uh¤Krh¦]rM;h¯XESupported Output formats: NV12, YUYV, UYVY, RGB24, ARGB24, and ABGR24rN;…�rO;}rP;(h‚jK;h‘jI;ubaubah�jCubeh�j!ubeubj@)�rQ;}rR;(h‚X£DSP for offloading signal processing - Sample Image Processing Kernels integrated in the DSP gstreamer plugin: Median2x2, Median3x3, Sobel3x3, Conv5x5, Canny h‘jñ:hœNh�jChƒ}rS;(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rT;(hÜ)�rU;}rV;(h‚X$DSP for offloading signal processingrW;h‘jQ;hœj 9h�hàhƒ}rX;(h…]hŽ]h‡]h†]h�]uh¤Kuh¦]rY;h¯X$DSP for offloading signal processingrZ;…�r[;}r\;(h‚jW;h‘jU;ubaubj)�r];}r^;(h‚Uhƒ}r_;(j#X-h†]h‡]h…]hŽ]h�]uh‘jQ;h¦]r`;j@)�ra;}rb;(h‚XwSample Image Processing Kernels integrated in the DSP gstreamer plugin: Median2x2, Median3x3, Sobel3x3, Conv5x5, Canny hƒ}rc;(h…]hŽ]h‡]h†]h�]uh‘j];h¦]rd;hÜ)�re;}rf;(h‚XvSample Image Processing Kernels integrated in the DSP gstreamer plugin: Median2x2, Median3x3, Sobel3x3, Conv5x5, Cannyrg;h‘ja;hœj 9h�hàhƒ}rh;(h…]hŽ]h‡]h†]h�]uh¤Kwh¦]ri;h¯XvSample Image Processing Kernels integrated in the DSP gstreamer plugin: Median2x2, Median3x3, Sobel3x3, Conv5x5, Cannyrj;…�rk;}rl;(h‚jg;h‘je;ubaubah�jCubah�j!ubeubeubhÜ)�rm;}rn;(h‚X�For more info, please refer to the `DCE Developer’s Guide `__h‘jŽ9hœj 9h�hàhƒ}ro;(h…]hŽ]h‡]h†]h�]uh¤Kzh¥hh¦]rp;(h¯X#For more info, please refer to the rq;…�rr;}rs;(h‚X#For more info, please refer to the h‘jm;ubj))�rt;}ru;(h‚Xl`DCE Developer’s Guide `__hƒ}rv;(UnameXDCE Developer’s Guidej-XNhttp://processors.wiki.ti.com/index.php/DRA7xx_GLSDK_Software_Developers_Guideh†]h‡]h…]hŽ]h�]uh‘jm;h¦]rw;h¯XDCE Developer’s Guiderx;…�ry;}rz;(h‚Uh‘jt;ubah�j2ubeubh’)�r{;}r|;(h‚X Use Casesr};h‘jŽ9hœj 9h�hÓhƒ}r~;(h†]r;U use-cases-1r€;ah‡]h…]hŽ]h�]r�;hiauh¤Nh¥hh¦]r‚;h¯X Use Casesrƒ;…�r„;}r…;(h‚j};h‘j{;ubaubj)�r†;}r‡;(h‚Uh‘jŽ9hœj 9h�j!hƒ}rˆ;(j#X-h†]h‡]h…]hŽ]h�]uh¤K€h¥hh¦]r‰;j@)�rŠ;}r‹;(h‚XCaudio/video or proprietary codecs processing offload to slave core h‘j†;hœj 9h�jChƒ}rŒ;(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r�;hÜ)�rŽ;}r�;(h‚XBaudio/video or proprietary codecs processing offload to slave corer�;h‘jŠ;hœj 9h�hàhƒ}r‘;(h…]hŽ]h‡]h†]h�]uh¤K€h¦]r’;h¯XBaudio/video or proprietary codecs processing offload to slave corer“;…�r”;}r•;(h‚j�;h‘jŽ;ubaubaubaubh’)�r–;}r—;(h‚XExamplesr˜;h‘jŽ9hœj 9h�hÓhƒ}r™;(h†]rš;U examples-1r›;ah‡]h…]hŽ]h�]rœ;h auh¤Nh¥hh¦]r�;h¯XExamplesrž;…�rŸ;}r ;(h‚j˜;h‘j–;ubaubj)�r¡;}r¢;(h‚Uh‘jŽ9hœj 9h�j!hƒ}r£;(j#X-h†]h‡]h…]hŽ]h�]uh¤K…h¥hh¦]r¤;j@)�r¥;}r¦;(h‚X“Please see `sample application `__ h‘j¡;hœj 9h�jChƒ}r§;(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r¨;hÜ)�r©;}rª;(h‚X’Please see `sample application `__h‘j¥;hœj 9h�hàhƒ}r«;(h…]hŽ]h‡]h†]h�]uh¤K…h¦]r¬;(h¯X Please see r­;…�r®;}r¯;(h‚X Please see h‘j©;ubj))�r°;}r±;(h‚X‡`sample application `__hƒ}r²;(UnameXsample applicationj-Xnhttp://processors.wiki.ti.com/index.php/DRA7xx_GLSDK_Software_Developers_Guide#Running_DSP_sample_applicationsh†]h‡]h…]hŽ]h�]uh‘j©;h¦]r³;h¯Xsample applicationr´;…�rµ;}r¶;(h‚Uh‘j°;ubah�j2ubeubaubaubh’)�r·;}r¸;(h‚XBenefitsr¹;h‘jŽ9hœj 9h�hÓhƒ}rº;(h†]r»;U benefits-1r¼;ah‡]h…]hŽ]h�]r½;hlauh¤Nh¥hh¦]r¾;h¯XBenefitsr¿;…�rÀ;}rÁ;(h‚j¹;h‘j·;ubaubj)�rÂ;}rÃ;(h‚Uh‘jŽ9hœj 9h�j!hƒ}rÄ;(j#X-h†]h‡]h…]hŽ]h�]uh¤K‹h¥hh¦]rÅ;(j@)�rÆ;}rÇ;(h‚X'Accelerated multimedia codec processingrÈ;h‘jÂ;hœj 9h�jChƒ}rÉ;(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rÊ;hÜ)�rË;}rÌ;(h‚jÈ;h‘jÆ;hœj 9h�hàhƒ}rÍ;(h…]hŽ]h‡]h†]h�]uh¤K‹h¦]rÎ;h¯X'Accelerated multimedia codec processingrÏ;…�rÐ;}rÑ;(h‚jÈ;h‘jË;ubaubaubj@)�rÒ;}rÓ;(h‚XmSimplifies the development of multimedia application when interfacing with Gstreamer and TI Gstreamer plugin h‘jÂ;hœj 9h�jChƒ}rÔ;(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rÕ;hÜ)�rÖ;}r×;(h‚XlSimplifies the development of multimedia application when interfacing with Gstreamer and TI Gstreamer pluginrØ;h‘jÒ;hœj 9h�hàhƒ}rÙ;(h…]hŽ]h‡]h†]h�]uh¤KŒh¦]rÚ;h¯XlSimplifies the development of multimedia application when interfacing with Gstreamer and TI Gstreamer pluginrÛ;…�rÜ;}rÝ;(h‚jØ;h‘jÖ;ubaubaubeubh’)�rÞ;}rß;(h‚X Drawbacksrà;h‘jŽ9hœj 9h�hÓhƒ}rá;(h†]râ;U drawbacks-1rã;ah‡]h…]hŽ]h�]rä;h(auh¤Nh¥hh¦]rå;h¯X Drawbacksræ;…�rç;}rè;(h‚jà;h‘jÞ;ubaubj)�ré;}rê;(h‚Uh‘jŽ9hœj 9h�j!hƒ}rë;(j#X-h†]h‡]h…]hŽ]h�]uh¤K’h¥hh¦]rì;(j@)�rí;}rî;(h‚X$Not suitable for non-codec algorithmrï;h‘jé;hœj 9h�jChƒ}rð;(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rñ;hÜ)�rò;}ró;(h‚jï;h‘jí;hœj 9h�hàhƒ}rô;(h…]hŽ]h‡]h†]h�]uh¤K’h¦]rõ;h¯X$Not suitable for non-codec algorithmrö;…�r÷;}rø;(h‚jï;h‘jò;ubaubaubj@)�rù;}rú;(h‚X$Need work to add new codec algorithmrû;h‘jé;hœj 9h�jChƒ}rü;(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rý;hÜ)�rþ;}rÿ;(h‚jû;h‘jù;hœj 9h�hàhƒ}r<(h…]hŽ]h‡]h†]h�]uh¤K“h¦]r<h¯X$Need work to add new codec algorithmr<…�r<}r<(h‚jû;h‘jþ;ubaubaubj@)�r<}r<(h‚X"Need knowledge of DSP programming h‘jé;hœj 9h�jChƒ}r<(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r<hÜ)�r <}r <(h‚X!Need knowledge of DSP programmingr <h‘j<hœj 9h�hàhƒ}r <(h…]hŽ]h‡]h†]h�]uh¤K”h¦]r <h¯X!Need knowledge of DSP programmingr<…�r<}r<(h‚j <h‘j <ubaubaubeubhþ)�r<}r<(h‚Uh‘jŽ9hœj 9h�jhƒ}r<(h…]hŽ]h‡]h†]h�]uh¤K–h¥hh¦]r<j)�r<}r<(h‚UjKh‘j<hœj 9h�h¤hƒ}r<(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubh’)�r<}r<(h‚X Big Data IPCr<h‘jŽ9hœj 9h�hÓhƒ}r<(h†]r<U big-data-ipcr<ah‡]h…]hŽ]h�]r<hauh¤Nh¥hh¦]r<h¯X Big Data IPCr <…�r!<}r"<(h‚j<h‘j<ubaubhÜ)�r#<}r$<(h‚XdBig Data is a special use case of TI IPC implementation for High Performance Computing applications and other Data intensive applications which often require passing of big data buffers between the multi-core processors in an SoC. The Big Data IPC provides a high level abstraction to take care of address translation and Cache sync on the big data buffersr%<h‘jŽ9hœj 9h�hàhƒ}r&<(h…]hŽ]h‡]h†]h�]uh¤K›h¥hh¦]r'<h¯XdBig Data is a special use case of TI IPC implementation for High Performance Computing applications and other Data intensive applications which often require passing of big data buffers between the multi-core processors in an SoC. The Big Data IPC provides a high level abstraction to take care of address translation and Cache sync on the big data buffersr(<…�r)<}r*<(h‚j%<h‘j#<ubaubh’)�r+<}r,<(h‚X Use Casesr-<h‘jŽ9hœj 9h�hÓhƒ}r.<(h†]r/<U use-cases-2r0<ah‡]h…]hŽ]h�]r1<hkauh¤Nh¥hh¦]r2<h¯X Use Casesr3<…�r4<}r5<(h‚j-<h‘j+<ubaubj)�r6<}r7<(h‚Uh‘jŽ9hœj 9h�j!hƒ}r8<(j#X-h†]h‡]h…]hŽ]h�]uh¤K¥h¥hh¦]r9<j@)�r:<}r;<(h‚XJMessage/Data exchange for size greater than 512 bytes between ARM and DSP h‘j6<hœj 9h�jChƒ}r<<(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r=<hÜ)�r><}r?<(h‚XIMessage/Data exchange for size greater than 512 bytes between ARM and DSPr@<h‘j:<hœj 9h�hàhƒ}rA<(h…]hŽ]h‡]h†]h�]uh¤K¥h¦]rB<h¯XIMessage/Data exchange for size greater than 512 bytes between ARM and DSPrC<…�rD<}rE<(h‚j@<h‘j><ubaubaubaubh’)�rF<}rG<(h‚XExamplesrH<h‘jŽ9hœj 9h�hÓhƒ}rI<(h†]rJ<U examples-2rK<ah‡]h…]hŽ]h�]rL<h auh¤Nh¥hh¦]rM<h¯XExamplesrN<…�rO<}rP<(h‚jH<h‘jF<ubaubj)�rQ<}rR<(h‚Uh‘jŽ9hœj 9h�j!hƒ}rS<(j#X-h†]h‡]h…]hŽ]h�]uh¤K«h¥hh¦]rT<j@)�rU<}rV<(h‚X˜Please see `Big Data IPC example `__ h‘jQ<hœj 9h�jChƒ}rW<(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rX<hÜ)�rY<}rZ<(h‚X—Please see `Big Data IPC example `__h‘jU<hœj 9h�hàhƒ}r[<(h…]hŽ]h‡]h†]h�]uh¤K«h¦]r\<(h¯X Please see r]<…�r^<}r_<(h‚X Please see h‘jY<ubj))�r`<}ra<(h‚XŒ`Big Data IPC example `__hƒ}rb<(UnameXBig Data IPC examplej-Xphttp://software-dl.ti.com/processor-sdk-rtos/esd/docs/latest/rtos/index_examples_demos.html#big-data-ipc-exampleh†]h‡]h…]hŽ]h�]uh‘jY<h¦]rc<h¯XBig Data IPC examplerd<…�re<}rf<(h‚Uh‘j`<ubah�j2ubeubaubaubh’)�rg<}rh<(h‚XBenefitsri<h‘jŽ9hœj 9h�hÓhƒ}rj<(h†]rk<U benefits-2rl<ah‡]h…]hŽ]h�]rm<hnauh¤Nh¥hh¦]rn<h¯XBenefitsro<…�rp<}rq<(h‚ji<h‘jg<ubaubj)�rr<}rs<(h‚Uh‘jŽ9hœj 9h�j!hƒ}rt<(j#X-h†]h‡]h…]hŽ]h�]uh¤K²h¥hh¦]ru<j@)�rv<}rw<(h‚X0Capable of handling data greater than 512 bytes h‘jr<hœj 9h�jChƒ}rx<(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]ry<hÜ)�rz<}r{<(h‚X/Capable of handling data greater than 512 bytesr|<h‘jv<hœj 9h�hàhƒ}r}<(h…]hŽ]h‡]h†]h�]uh¤K²h¦]r~<h¯X/Capable of handling data greater than 512 bytesr<…�r€<}r�<(h‚j|<h‘jz<ubaubaubaubh’)�r‚<}rƒ<(h‚X Drawbacksr„<h‘jŽ9hœj 9h�hÓhƒ}r…<(h†]r†<U drawbacks-2r‡<ah‡]h…]hŽ]h�]rˆ<h&auh¤Nh¥hh¦]r‰<h¯X DrawbacksrŠ<…�r‹<}rŒ<(h‚j„<h‘j‚<ubaubj)�r�<}rŽ<(h‚Uh‘jŽ9hœj 9h�j!hƒ}r�<(j#X-h†]h‡]h…]hŽ]h�]uh¤K·h¥hh¦]r�<(j@)�r‘<}r’<(h‚X)Need knowledge of DSP memory architecturer“<h‘j�<hœj 9h�jChƒ}r”<(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r•<hÜ)�r–<}r—<(h‚j“<h‘j‘<hœj 9h�hàhƒ}r˜<(h…]hŽ]h‡]h†]h�]uh¤K·h¦]r™<h¯X)Need knowledge of DSP memory architecturerš<…�r›<}rœ<(h‚j“<h‘j–<ubaubaubj@)�r�<}rž<(h‚X3Need knowledge of DSP configuration and programmingrŸ<h‘j�<hœj 9h�jChƒ}r <(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r¡<hÜ)�r¢<}r£<(h‚jŸ<h‘j�<hœj 9h�hàhƒ}r¤<(h…]hŽ]h‡]h†]h�]uh¤K¸h¦]r¥<h¯X3Need knowledge of DSP configuration and programmingr¦<…�r§<}r¨<(h‚jŸ<h‘j¢<ubaubaubj@)�r©<}rª<(h‚XTI proprietary API h‘j�<hœj 9h�jChƒ}r«<(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r¬<hÜ)�r­<}r®<(h‚XTI proprietary APIr¯<h‘j©<hœj 9h�hàhƒ}r°<(h…]hŽ]h‡]h†]h�]uh¤K¹h¦]r±<h¯XTI proprietary APIr²<…�r³<}r´<(h‚j¯<h‘j­<ubaubaubeubhþ)�rµ<}r¶<(h‚Uh‘jŽ9hœj 9h�jhƒ}r·<(h…]hŽ]h‡]h†]h�]uh¤K»h¥hh¦]r¸<j)�r¹<}rº<(h‚UjKh‘jµ<hœj 9h�h¤hƒ}r»<(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubh’)�r¼<}r½<(h‚XIPCr¾<h‘jŽ9hœj 9h�hÓhƒ}r¿<(h†]rÀ<Uid5rÁ<ah‡]h…]hŽ]h�]rÂ<h¡auh¤Nh¥hh¦]rÃ<h¯XIPCrÄ<…�rÅ<}rÆ<(h‚j¾<h‘j¼<ubaubhÜ)�rÇ<}rÈ<(h‚XBInter-Processor Communication (IPC) is a set of modules designed to faciliate inter-process communication. The communication includes message passing, streams, and linked lists. The modules provides services and functions which can be used for communication between ARM and DSP processors in a multi-processor environment.rÉ<h‘jŽ9hœj 9h�hàhƒ}rÊ<(h…]hŽ]h‡]h†]h�]uh¤KÀh¥hh¦]rË<h¯XBInter-Processor Communication (IPC) is a set of modules designed to faciliate inter-process communication. The communication includes message passing, streams, and linked lists. The modules provides services and functions which can be used for communication between ARM and DSP processors in a multi-processor environment.rÌ<…�rÍ<}rÎ<(h‚jÉ<h‘jÇ<ubaubj)�rÏ<}rÐ<(h‚Uh‘jŽ9hœj 9h�j!hƒ}rÑ<(j#X-h†]h‡]h…]hŽ]h�]uh¤KÆh¥hh¦]rÒ<(j@)�rÓ<}rÔ<(h‚XZIPC Module initialized the various subsystems of IPC and synchronizes multiple processors.h‘jÏ<hœj 9h�jChƒ}rÕ<(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rÖ<hÜ)�r×<}rØ<(h‚XZIPC Module initialized the various subsystems of IPC and synchronizes multiple processors.rÙ<h‘jÓ<hœj 9h�hàhƒ}rÚ<(h…]hŽ]h‡]h†]h�]uh¤KÆh¦]rÛ<h¯XZIPC Module initialized the various subsystems of IPC and synchronizes multiple processors.rÜ<…�rÝ<}rÞ<(h‚jÙ<h‘j×<ubaubaubj@)�rß<}rà<(h‚XZMessageQ Module supports the structured sending and receiving of variable length messages.h‘jÏ<hœj 9h�jChƒ}rá<(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]râ<hÜ)�rã<}rä<(h‚XZMessageQ Module supports the structured sending and receiving of variable length messages.rå<h‘jß<hœj 9h�hàhƒ}ræ<(h…]hŽ]h‡]h†]h�]uh¤KÈh¦]rç<h¯XZMessageQ Module supports the structured sending and receiving of variable length messages.rè<…�ré<}rê<(h‚jå<h‘jã<ubaubaubj@)�rë<}rì<(h‚XúListMP Module is a linked-list based module designed to provide a mean of communication between different processors. It uses shared memory to provide a way for multiple processors to share, pass or store data buffers, messages, or state information.h‘jÏ<hœj 9h�jChƒ}rí<(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rî<hÜ)�rï<}rð<(h‚XúListMP Module is a linked-list based module designed to provide a mean of communication between different processors. It uses shared memory to provide a way for multiple processors to share, pass or store data buffers, messages, or state information.rñ<h‘jë<hœj 9h�hàhƒ}rò<(h…]hŽ]h‡]h†]h�]uh¤KÊh¦]ró<h¯XúListMP Module is a linked-list based module designed to provide a mean of communication between different processors. It uses shared memory to provide a way for multiple processors to share, pass or store data buffers, messages, or state information.rô<…�rõ<}rö<(h‚jñ<h‘jï<ubaubaubj@)�r÷<}rø<(h‚XŠHeapMP Module provides 3 types of memory management, fixed-size buffers, multiple different fixed-size buffers, and variable-size buffers.h‘jÏ<hœj 9h�jChƒ}rù<(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rú<hÜ)�rû<}rü<(h‚XŠHeapMP Module provides 3 types of memory management, fixed-size buffers, multiple different fixed-size buffers, and variable-size buffers.rý<h‘j÷<hœj 9h�hàhƒ}rþ<(h…]hŽ]h‡]h†]h�]uh¤KÎh¦]rÿ<h¯XŠHeapMP Module provides 3 types of memory management, fixed-size buffers, multiple different fixed-size buffers, and variable-size buffers.r=…�r=}r=(h‚jý<h‘jû<ubaubaubj@)�r=}r=(h‚XUGateMP Module enforces both local and remote context protection through its instance.h‘jÏ<hœj 9h�jChƒ}r=(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r=hÜ)�r=}r=(h‚XUGateMP Module enforces both local and remote context protection through its instance.r =h‘j=hœj 9h�hàhƒ}r =(h…]hŽ]h‡]h†]h�]uh¤KÑh¦]r =h¯XUGateMP Module enforces both local and remote context protection through its instance.r =…�r =}r=(h‚j =h‘j=ubaubaubj@)�r=}r=(h‚XfNOtify Module manages the multiplexing/demultiplexing of software interrupts over hardware interrupts.h‘jÏ<hœj 9h�jChƒ}r=(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r=hÜ)�r=}r=(h‚XfNOtify Module manages the multiplexing/demultiplexing of software interrupts over hardware interrupts.r=h‘j=hœj 9h�hàhƒ}r=(h…]hŽ]h‡]h†]h�]uh¤KÓh¦]r=h¯XfNOtify Module manages the multiplexing/demultiplexing of software interrupts over hardware interrupts.r=…�r=}r=(h‚j=h‘j=ubaubaubj@)�r=}r=(h‚X¤SharedRegion Module is designed to be used in a multi-processor environment where there are memory regions that are shared and accessed across different processors.h‘jÏ<hœj 9h�jChƒ}r=(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r=hÜ)�r=}r =(h‚X¤SharedRegion Module is designed to be used in a multi-processor environment where there are memory regions that are shared and accessed across different processors.r!=h‘j=hœj 9h�hàhƒ}r"=(h…]hŽ]h‡]h†]h�]uh¤KÕh¦]r#=h¯X¤SharedRegion Module is designed to be used in a multi-processor environment where there are memory regions that are shared and accessed across different processors.r$=…�r%=}r&=(h‚j!=h‘j=ubaubaubj@)�r'=}r(=(h‚XHList Module provides support for creating doubly-linked lists of objectsh‘jÏ<hœj 9h�jChƒ}r)=(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r*=hÜ)�r+=}r,=(h‚XHList Module provides support for creating doubly-linked lists of objectsr-=h‘j'=hœj 9h�hàhƒ}r.=(h…]hŽ]h‡]h†]h�]uh¤KØh¦]r/=h¯XHList Module provides support for creating doubly-linked lists of objectsr0=…�r1=}r2=(h‚j-=h‘j+=ubaubaubj@)�r3=}r4=(h‚XfMultiProc Module centralizes processor ID management into one module in a multi-processor environment.h‘jÏ<hœj 9h�jChƒ}r5=(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r6=hÜ)�r7=}r8=(h‚XfMultiProc Module centralizes processor ID management into one module in a multi-processor environment.r9=h‘j3=hœj 9h�hàhƒ}r:=(h…]hŽ]h‡]h†]h�]uh¤KÚh¦]r;=h¯XfMultiProc Module centralizes processor ID management into one module in a multi-processor environment.r<=…�r==}r>=(h‚j9=h‘j7=ubaubaubj@)�r?=}r@=(h‚XŽNameServer Module manages local name/value pairs which enables an application and other modules to sotre and retrieve values based on a name. h‘jÏ<hœj 9h�jChƒ}rA=(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rB=hÜ)�rC=}rD=(h‚X�NameServer Module manages local name/value pairs which enables an application and other modules to sotre and retrieve values based on a name.rE=h‘j?=hœj 9h�hàhƒ}rF=(h…]hŽ]h‡]h†]h�]uh¤KÜh¦]rG=h¯X�NameServer Module manages local name/value pairs which enables an application and other modules to sotre and retrieve values based on a name.rH=…�rI=}rJ=(h‚jE=h‘jC=ubaubaubeubhþ)�rK=}rL=(h‚Uh‘jŽ9hœj 9h�jhƒ}rM=(h…]hŽ]h‡]h†]h�]uh¤Kàh¥hh¦]rN=j)�rO=}rP=(h‚XŸFor more info, please refer to `IPC User's Guide `__jKh‘jK=hœj 9h�h¤hƒ}rQ=(h…]hŽ]h‡]h†]h�]uh¤Kâh¥hh¦]rR=(h¯XFor more info, please refer to rS=…�rT=}rU=(h‚XFor more info, please refer to h‘jO=ubj))�rV=}rW=(h‚X€`IPC User's Guide `__hƒ}rX=(UnameXIPC User's Guidej-Xhhttp://software-dl.ti.com/processor-sdk-rtos/esd/docs/latest/rtos/index_Foundational_Components.html#ipch†]h‡]h…]hŽ]h�]uh‘jO=h¦]rY=h¯XIPC User's GuiderZ=…�r[=}r\=(h‚Uh‘jV=ubah�j2ubeubaubhþ)�r]=}r^=(h‚Uh‘jŽ9hœj 9h�jhƒ}r_=(h…]hŽ]h‡]h†]h�]uh¤Käh¥hh¦]r`=j)�ra=}rb=(h‚UjKh‘j]=hœj 9h�h¤hƒ}rc=(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubh’)�rd=}re=(h‚X User Casesrf=h‘jŽ9hœj 9h�hÓhƒ}rg=(h†]rh=U user-casesri=ah‡]h…]hŽ]h�]rj=hSauh¤Nh¥hh¦]rk=h¯X User Casesrl=…�rm=}rn=(h‚jf=h‘jd=ubaubj)�ro=}rp=(h‚Uh‘jŽ9hœj 9h�j!hƒ}rq=(j#X-h†]h‡]h…]hŽ]h�]uh¤Kèh¥hh¦]rr=j@)�rs=}rt=(h‚X*Message/Data exchange between ARM and DSP h‘jo=hœj 9h�jChƒ}ru=(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rv=hÜ)�rw=}rx=(h‚X)Message/Data exchange between ARM and DSPry=h‘js=hœj 9h�hàhƒ}rz=(h…]hŽ]h‡]h†]h�]uh¤Kèh¦]r{=h¯X)Message/Data exchange between ARM and DSPr|=…�r}=}r~=(h‚jy=h‘jw=ubaubaubaubh’)�r=}r€=(h‚XExamplesr�=h‘jŽ9hœj 9h�hÓhƒ}r‚=(h†]rƒ=U examples-3r„=ah‡]h…]hŽ]h�]r…=h auh¤Nh¥hh¦]r†=h¯XExamplesr‡=…�rˆ=}r‰=(h‚j�=h‘j=ubaubj)�rŠ=}r‹=(h‚Uh‘jŽ9hœj 9h�j!hƒ}rŒ=(j#X-h†]h‡]h…]hŽ]h�]uh¤Kíh¥hh¦]r�=j@)�rŽ=}r�=(h‚XXPlease see `IPC Examples `__ h‘jŠ=hœj 9h�jChƒ}r�=(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r‘=hÜ)�r’=}r“=(h‚XWPlease see `IPC Examples `__h‘jŽ=hœj 9h�hàhƒ}r”=(h…]hŽ]h‡]h†]h�]uh¤Kíh¦]r•=(h¯X Please see r–=…�r—=}r˜=(h‚X Please see h‘j’=ubj))�r™=}rš=(h‚XL`IPC Examples `__hƒ}r›=(UnameX IPC Examplesj-X9Foundational_Components_IPC.html#build-ipc-linux-examplesh†]h‡]h…]hŽ]h�]uh‘j’=h¦]rœ=h¯X IPC Examplesr�=…�rž=}rŸ=(h‚Uh‘j™=ubah�j2ubeubaubaubh’)�r =}r¡=(h‚XBenefitsr¢=h‘jŽ9hœj 9h�hÓhƒ}r£=(h†]r¤=U benefits-3r¥=ah‡]h…]hŽ]h�]r¦=hmauh¤Nh¥hh¦]r§=h¯XBenefitsr¨=…�r©=}rª=(h‚j¢=h‘j =ubaubj)�r«=}r¬=(h‚Uh‘jŽ9hœj 9h�j!hƒ}r­=(j#X-h†]h‡]h…]hŽ]h�]uh¤Kóh¥hh¦]r®=(j@)�r¯=}r°=(h‚X8suitable for those who are familiar with DSP programmingr±=h‘j«=hœj 9h�jChƒ}r²=(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r³=hÜ)�r´=}rµ=(h‚j±=h‘j¯=hœj 9h�hàhƒ}r¶=(h…]hŽ]h‡]h†]h�]uh¤Kóh¦]r·=h¯X8suitable for those who are familiar with DSP programmingr¸=…�r¹=}rº=(h‚j±=h‘j´=ubaubaubj@)�r»=}r¼=(h‚XDSP code optimization h‘j«=hœj 9h�jChƒ}r½=(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r¾=hÜ)�r¿=}rÀ=(h‚XDSP code optimizationrÁ=h‘j»=hœj 9h�hàhƒ}rÂ=(h…]hŽ]h‡]h†]h�]uh¤Kôh¦]rÃ=h¯XDSP code optimizationrÄ=…�rÅ=}rÆ=(h‚jÁ=h‘j¿=ubaubaubeubh’)�rÇ=}rÈ=(h‚X DrawbacksrÉ=h‘jŽ9hœj 9h�hÓhƒ}rÊ=(h†]rË=U drawbacks-3rÌ=ah‡]h…]hŽ]h�]rÍ=h'auh¤Nh¥hh¦]rÎ=h¯X DrawbacksrÏ=…�rÐ=}rÑ=(h‚jÉ=h‘jÇ=ubaubj)�rÒ=}rÓ=(h‚Uh‘jŽ9hœj 9h�j!hƒ}rÔ=(j#X-h†]h‡]h…]hŽ]h�]uh¤Kùh¥hh¦]rÕ=(j@)�rÖ=}r×=(h‚X)Need knowledge of DSP memory architecturerØ=h‘jÒ=hœj 9h�jChƒ}rÙ=(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rÚ=hÜ)�rÛ=}rÜ=(h‚jØ=h‘jÖ=hœj 9h�hàhƒ}rÝ=(h…]hŽ]h‡]h†]h�]uh¤Kùh¦]rÞ=h¯X)Need knowledge of DSP memory architecturerß=…�rà=}rá=(h‚jØ=h‘jÛ=ubaubaubj@)�râ=}rã=(h‚X3Need knowledge of DSP configuration and programmingrä=h‘jÒ=hœj 9h�jChƒ}rå=(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]ræ=hÜ)�rç=}rè=(h‚jä=h‘jâ=hœj 9h�hàhƒ}ré=(h…]hŽ]h‡]h†]h�]uh¤Kúh¦]rê=h¯X3Need knowledge of DSP configuration and programmingrë=…�rì=}rí=(h‚jä=h‘jç=ubaubaubj@)�rî=}rï=(h‚X$message size is limited to 512 bytesrð=h‘jÒ=hœj 9h�jChƒ}rñ=(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rò=hÜ)�ró=}rô=(h‚jð=h‘jî=hœj 9h�hàhƒ}rõ=(h…]hŽ]h‡]h†]h�]uh¤Kûh¦]rö=h¯X$message size is limited to 512 bytesr÷=…�rø=}rù=(h‚jð=h‘jó=ubaubaubj@)�rú=}rû=(h‚XTI proprietary API h‘jÒ=hœj 9h�jChƒ}rü=(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rý=hÜ)�rþ=}rÿ=(h‚XTI proprietary APIr>h‘jú=hœj 9h�hàhƒ}r>(h…]hŽ]h‡]h†]h�]uh¤Küh¦]r>h¯XTI proprietary APIr>…�r>}r>(h‚j>h‘jþ=ubaubaubeubhþ)�r>}r>(h‚Uh‘jŽ9hœj 9h�jhƒ}r>(h…]hŽ]h‡]h†]h�]uh¤Kþh¥hh¦]r >j)�r >}r >(h‚UjKh‘j>hœj 9h�h¤hƒ}r >(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubh’)�r >}r>(h‚X Pros and Consr>h‘jŽ9hœj 9h�hÓhƒ}r>(h†]r>U pros-and-consr>ah‡]h…]hŽ]h�]r>h%auh¤Nh¥hh¦]r>h¯X Pros and Consr>…�r>}r>(h‚j>h‘j >ubaubjB)�r>}r>(h‚Uh‘jŽ9hœj 9h�jEhƒ}r>(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r>jH)�r>}r>(h‚Uhƒ}r>(h†]h‡]h…]hŽ]h�]UcolsKuh‘j>h¦]r>(jM)�r >}r!>(h‚Uhƒ}r">(h†]h‡]h…]hŽ]h�]UcolwidthK uh‘j>h¦]h�jQubjM)�r#>}r$>(h‚Uhƒ}r%>(h†]h‡]h…]hŽ]h�]UcolwidthK:uh‘j>h¦]h�jQubjM)�r&>}r'>(h‚Uhƒ}r(>(h†]h‡]h…]hŽ]h�]UcolwidthKSuh‘j>h¦]h�jQubjX)�r)>}r*>(h‚Uhƒ}r+>(h…]hŽ]h‡]h†]h�]uh‘j>h¦]r,>j])�r->}r.>(h‚Uhƒ}r/>(h…]hŽ]h‡]h†]h�]uh‘j)>h¦]r0>(jb)�r1>}r2>(h‚Uhƒ}r3>(h…]hŽ]h‡]h†]h�]uh‘j->h¦]h�joubjb)�r4>}r5>(h‚Uhƒ}r6>(h…]hŽ]h‡]h†]h�]uh‘j->h¦]r7>hÜ)�r8>}r9>(h‚XProsr:>h‘j4>hœj 9h�hàhƒ}r;>(h…]hŽ]h‡]h†]h�]uh¤Mh¦]r<>h¯XProsr=>…�r>>}r?>(h‚j:>h‘j8>ubaubah�joubjb)�r@>}rA>(h‚Uhƒ}rB>(h…]hŽ]h‡]h†]h�]uh‘j->h¦]rC>hÜ)�rD>}rE>(h‚XConsrF>h‘j@>hœj 9h�hàhƒ}rG>(h…]hŽ]h‡]h†]h�]uh¤Mh¦]rH>h¯XConsrI>…�rJ>}rK>(h‚jF>h‘jD>ubaubah�joubeh�jˆubah�j‰ubjŠ)�rL>}rM>(h‚Uhƒ}rN>(h…]hŽ]h‡]h†]h�]uh‘j>h¦]rO>(j])�rP>}rQ>(h‚Uhƒ}rR>(h…]hŽ]h‡]h†]h�]uh‘jL>h¦]rS>(jb)�rT>}rU>(h‚Uhƒ}rV>(h…]hŽ]h‡]h†]h�]uh‘jP>h¦]rW>hÜ)�rX>}rY>(h‚XOpenCLrZ>h‘jT>hœj 9h�hàhƒ}r[>(h…]hŽ]h‡]h†]h�]uh¤Mh¦]r\>h¯XOpenCLr]>…�r^>}r_>(h‚jZ>h‘jX>ubaubah�joubjb)�r`>}ra>(h‚Uhƒ}rb>(h…]hŽ]h‡]h†]h�]uh‘jP>h¦]rc>hÜ)�rd>}re>(h‚X4Easy porting No DSP programming Standard OpenCL APIsrf>h‘j`>hœj 9h�hàhƒ}rg>(h…]hŽ]h‡]h†]h�]uh¤Mh¦]rh>h¯X4Easy porting No DSP programming Standard OpenCL APIsri>…�rj>}rk>(h‚jf>h‘jd>ubaubah�joubjb)�rl>}rm>(h‚Uhƒ}rn>(h…]hŽ]h‡]h†]h�]uh‘jP>h¦]ro>hÜ)�rp>}rq>(h‚XQCustomer don’t have control over memory layout etc. to handle optimize DSP coderr>h‘jl>hœj 9h�hàhƒ}rs>(h…]hŽ]h‡]h†]h�]uh¤Mh¦]rt>h¯XQCustomer don’t have control over memory layout etc. to handle optimize DSP coderu>…�rv>}rw>(h‚jr>h‘jp>ubaubah�joubeh�jˆubj])�rx>}ry>(h‚Uhƒ}rz>(h…]hŽ]h‡]h†]h�]uh‘jL>h¦]r{>(jb)�r|>}r}>(h‚Uhƒ}r~>(h…]hŽ]h‡]h†]h�]uh‘jx>h¦]r>hÜ)�r€>}r�>(h‚XDCEr‚>h‘j|>hœj 9h�hàhƒ}rƒ>(h…]hŽ]h‡]h†]h�]uh¤M h¦]r„>h¯XDCEr…>…�r†>}r‡>(h‚j‚>h‘j€>ubaubah�joubjb)�rˆ>}r‰>(h‚Uhƒ}rŠ>(h…]hŽ]h‡]h†]h�]uh‘jx>h¦]r‹>hÜ)�rŒ>}r�>(h‚X\Accelerated multimedia codec handling Simplifies development when interfacing with GStreamerrŽ>h‘jˆ>hœj 9h�hàhƒ}r�>(h…]hŽ]h‡]h†]h�]uh¤M h¦]r�>h¯X\Accelerated multimedia codec handling Simplifies development when interfacing with GStreamerr‘>…�r’>}r“>(h‚jŽ>h‘jŒ>ubaubah�joubjb)�r”>}r•>(h‚Uhƒ}r–>(h…]hŽ]h‡]h†]h�]uh‘jx>h¦]r—>hÜ)�r˜>}r™>(h‚X}Not meant for non-codec algorithms Need work to add new codec algorithms Codec like APIs Require knowledge of DSP programmingrš>h‘j”>hœj 9h�hàhƒ}r›>(h…]hŽ]h‡]h†]h�]uh¤M h¦]rœ>h¯X}Not meant for non-codec algorithms Need work to add new codec algorithms Codec like APIs Require knowledge of DSP programmingr�>…�rž>}rŸ>(h‚jš>h‘j˜>ubaubah�joubeh�jˆubj])�r >}r¡>(h‚Uhƒ}r¢>(h…]hŽ]h‡]h†]h�]uh‘jL>h¦]r£>(jb)�r¤>}r¥>(h‚Uhƒ}r¦>(h…]hŽ]h‡]h†]h�]uh‘j >h¦]r§>hÜ)�r¨>}r©>(h‚XBig Datarª>h‘j¤>hœj 9h�hàhƒ}r«>(h…]hŽ]h‡]h†]h�]uh¤Mh¦]r¬>h¯XBig Datar­>…�r®>}r¯>(h‚jª>h‘j¨>ubaubah�joubjb)�r°>}r±>(h‚Uhƒ}r²>(h…]hŽ]h‡]h†]h�]uh‘j >h¦]r³>hÜ)�r´>}rµ>(h‚X–Full control of DSP configuration Capable of DSP code optimization Not limited to the 512 byte buffer size Same API supported on multiple TI platformsr¶>h‘j°>hœj 9h�hàhƒ}r·>(h…]hŽ]h‡]h†]h�]uh¤Mh¦]r¸>h¯X–Full control of DSP configuration Capable of DSP code optimization Not limited to the 512 byte buffer size Same API supported on multiple TI platformsr¹>…�rº>}r»>(h‚j¶>h‘j´>ubaubah�joubjb)�r¼>}r½>(h‚Uhƒ}r¾>(h…]hŽ]h‡]h†]h�]uh‘j >h¦]r¿>hÜ)�rÀ>}rÁ>(h‚XbNeed to know memory architecture Need to know DSP configuration and programming TI proprietary APIrÂ>h‘j¼>hœj 9h�hàhƒ}rÃ>(h…]hŽ]h‡]h†]h�]uh¤Mh¦]rÄ>h¯XbNeed to know memory architecture Need to know DSP configuration and programming TI proprietary APIrÅ>…�rÆ>}rÇ>(h‚jÂ>h‘jÀ>ubaubah�joubeh�jˆubj])�rÈ>}rÉ>(h‚Uhƒ}rÊ>(h…]hŽ]h‡]h†]h�]uh‘jL>h¦]rË>(jb)�rÌ>}rÍ>(h‚Uhƒ}rÎ>(h…]hŽ]h‡]h†]h�]uh‘jÈ>h¦]rÏ>hÜ)�rÐ>}rÑ>(h‚XIPCrÒ>h‘jÌ>hœj 9h�hàhƒ}rÓ>(h…]hŽ]h‡]h†]h�]uh¤Mh¦]rÔ>h¯XIPCrÕ>…�rÖ>}r×>(h‚jÒ>h‘jÐ>ubaubah�joubjb)�rØ>}rÙ>(h‚Uhƒ}rÚ>(h…]hŽ]h‡]h†]h�]uh‘jÈ>h¦]rÛ>hÜ)�rÜ>}rÝ>(h‚XnFull control of DSP configuration Capable of DSP code optimization Same API supported on multiple TI platformsrÞ>h‘jØ>hœj 9h�hàhƒ}rß>(h…]hŽ]h‡]h†]h�]uh¤Mh¦]rà>h¯XnFull control of DSP configuration Capable of DSP code optimization Same API supported on multiple TI platformsrá>…�râ>}rã>(h‚jÞ>h‘jÜ>ubaubah�joubjb)�rä>}rå>(h‚Uhƒ}ræ>(h…]hŽ]h‡]h†]h�]uh‘jÈ>h¦]rç>hÜ)�rè>}ré>(h‚X’Need to know memory architecture Need to know DSP configuration and programming Limited to small messages (less than 512 bytes) TI proprietary APIrê>h‘jä>hœj 9h�hàhƒ}rë>(h…]hŽ]h‡]h†]h�]uh¤Mh¦]rì>h¯X’Need to know memory architecture Need to know DSP configuration and programming Limited to small messages (less than 512 bytes) TI proprietary APIrí>…�rî>}rï>(h‚jê>h‘jè>ubaubah�joubeh�jˆubeh�jWubeh�jXubaubhþ)�rð>}rñ>(h‚Uh‘jŽ9hœj 9h�jhƒ}rò>(h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]ró>j)�rô>}rõ>(h‚UjKh‘jð>hœj 9h�h¤hƒ}rö>(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubh’)�r÷>}rø>(h‚XDecision Makingrù>h‘jŽ9hœj 9h�hÓhƒ}rú>(h†]rû>Udecision-makingrü>ah‡]h…]hŽ]h�]rý>hpauh¤Nh¥hh¦]rþ>h¯XDecision Makingrÿ>…�r?}r?(h‚jù>h‘j÷>ubaubhÜ)�r?}r?(h‚XThe following simple flow chart is provided as a reference when making decision on which methods to use for ARM/DSP communication. Hardware capability also need to be considered in the decision making process, such as if Image and Video Accelerator exists when using DCE.r?h‘jŽ9hœj 9h�hàhƒ}r?(h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]r?h¯XThe following simple flow chart is provided as a reference when making decision on which methods to use for ARM/DSP communication. Hardware capability also need to be considered in the decision making process, such as if Image and Video Accelerator exists when using DCE.r?…�r?}r ?(h‚j?h‘j?ubaubjr)�r ?}r ?(h‚X1.. Image:: ../images/ARM-DSP_DecisionMaking.jpg h‘jŽ9hœXninternal padding after source/linux/Foundational_Components/IPC/Multiple_Ways_of_ARM-DSP_Communication.rst.incr ?h�jyhƒ}r ?(UuriX*linux/../images/ARM-DSP_DecisionMaking.jpgr?h†]h‡]h…]hŽ]jw}r?U*j?sh�]uh¤M&h¥hh¦]ubeubh–)�r?}r?(h‚Uh‘hšhœhŒh�hžhƒ}r?(h…]hŽ]h‡]h†]r?U ipc-testsr?ah�]r?hbauh¤K"h¥hh¦]r?(h¨)�r?}r?(h‚X IPC Testsr?h‘j?hœhŒh�h¬hƒ}r?(h…]hŽ]h‡]h†]h�]uh¤K"h¥hh¦]r?h¯X IPC Testsr?…�r?}r?(h‚j?h‘j?ubaubhÂ)�r?}r ?(h‚X=http://processors.wiki.ti.com/index.php/IPC_Users_Guide/Testsh‘j?hœhŠX:source/linux/Foundational_Components/IPC/IPC_Tests.rst.incr!?…�r"?}r#?bh�hÈhƒ}r$?(hÊhËh†]h‡]h…]hŽ]h�]uh¤Kh¥hh¦]r%?h¯X=http://processors.wiki.ti.com/index.php/IPC_Users_Guide/Testsr&?…�r'?}r(?(h‚Uh‘j?ubaubhÜ)�r)?}r*?(h‚XDThe IPC product contains unit tests under the following directories.r+?h‘j?hœj"?h�hàhƒ}r,?(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]r-?h¯XDThe IPC product contains unit tests under the following directories.r.?…�r/?}r0?(h‚j+?h‘j)?ubaubj)�r1?}r2?(h‚Uh‘j?hœj"?h�j!hƒ}r3?(j#X-h†]h‡]h…]hŽ]h�]uh¤Kh¥hh¦]r4?(j@)�r5?}r6?(h‚Xlinux/src/testsr7?h‘j1?hœj"?h�jChƒ}r8?(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]r9?hÜ)�r:?}r;?(h‚j7?h‘j5?hœj"?h�hàhƒ}r?…�r??}r@?(h‚j7?h‘j:?ubaubaubj@)�rA?}rB?(h‚X qnx/src/testsrC?h‘j1?hœj"?h�jChƒ}rD?(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rE?hÜ)�rF?}rG?(h‚jC?h‘jA?hœj"?h�hàhƒ}rH?(h…]hŽ]h‡]h†]h�]uh¤K h¦]rI?h¯X qnx/src/testsrJ?…�rK?}rL?(h‚jC?h‘jF?ubaubaubj@)�rM?}rN?(h‚Xpackages/ti/ipc/tests h‘j1?hœj"?h�jChƒ}rO?(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rP?hÜ)�rQ?}rR?(h‚Xpackages/ti/ipc/testsrS?h‘jM?hœj"?h�hàhƒ}rT?(h…]hŽ]h‡]h†]h�]uh¤K h¦]rU?h¯Xpackages/ti/ipc/testsrV?…�rW?}rX?(h‚jS?h‘jQ?ubaubaubeubhÜ)�rY?}rZ?(h‚X]These are meant to be used as unit tests and documentation of the tests are currently sparse.r[?h‘j?hœj"?h�hàhƒ}r\?(h…]hŽ]h‡]h†]h�]uh¤K h¥hh¦]r]?h¯X]These are meant to be used as unit tests and documentation of the tests are currently sparse.r^?…�r_?}r`?(h‚j[?h‘jY?ubaubhÜ)�ra?}rb?(h‚X°These tests under linux/src/tests have a Linux host application binary and the binaries for the respective slave cores used in the test are located under packages/ti/ipc/tests.rc?h‘j?hœj"?h�hàhƒ}rd?(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]re?h¯X°These tests under linux/src/tests have a Linux host application binary and the binaries for the respective slave cores used in the test are located under packages/ti/ipc/tests.rf?…�rg?}rh?(h‚jc?h‘ja?ubaubhÜ)�ri?}rj?(h‚X±**NOTE**: Loading of the slave cores in general is achieved by using remoteproc or MPM control procedures, which are specific to the platform and are out of scope for this page.h‘j?hœj"?h�hàhƒ}rk?(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]rl?(j¯)�rm?}rn?(h‚X**NOTE**hƒ}ro?(h…]hŽ]h‡]h†]h�]uh‘ji?h¦]rp?h¯XNOTErq?…�rr?}rs?(h‚Uh‘jm?ubah�j·ubh¯X©: Loading of the slave cores in general is achieved by using remoteproc or MPM control procedures, which are specific to the platform and are out of scope for this page.rt?…�ru?}rv?(h‚X©: Loading of the slave cores in general is achieved by using remoteproc or MPM control procedures, which are specific to the platform and are out of scope for this page.h‘ji?ubeubhÜ)�rw?}rx?(h‚X_MessageQApp: Sends single messages to slave cores and gets messages sent back from slave cores.ry?h‘j?hœj"?h�hàhƒ}rz?(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]r{?h¯X_MessageQApp: Sends single messages to slave cores and gets messages sent back from slave cores.r|?…�r}?}r~?(h‚jy?h‘jw?ubaubhÜ)�r?}r€?(h‚XlMsgq100: Specific unit test to test MessageQ_get when messages are available from more than one remote core.r�?h‘j?hœj"?h�hàhƒ}r‚?(h…]hŽ]h‡]h†]h�]uh¤K h¥hh¦]rƒ?h¯XlMsgq100: Specific unit test to test MessageQ_get when messages are available from more than one remote core.r„?…�r…?}r†?(h‚j�?h‘j?ubaubhÜ)�r‡?}rˆ?(h‚XOMessageQBench: Send and get back single messages and measures round trip delay.r‰?h‘j?hœj"?h�hàhƒ}rŠ?(h…]hŽ]h‡]h†]h�]uh¤K#h¥hh¦]r‹?h¯XOMessageQBench: Send and get back single messages and measures round trip delay.rŒ?…�r�?}rŽ?(h‚j‰?h‘j‡?ubaubhÜ)�r�?}r�?(h‚XÅThese unit test binaries can be built with the following commands ( See `IPC Linux Install Guide `_ for more details on setting up variables)h‘j?hœj"?h�hàhƒ}r‘?(h…]hŽ]h‡]h†]h�]uh¤K&h¥hh¦]r’?(h¯XHThese unit test binaries can be built with the following commands ( See r“?…�r”?}r•?(h‚XHThese unit test binaries can be built with the following commands ( See h‘j�?ubj))�r–?}r—?(h‚XS`IPC Linux Install Guide `_hƒ}r˜?(UnameXIPC Linux Install Guidej-X6index_Foundational_Components.html#linux-install-guider™?h†]h‡]h…]hŽ]h�]uh‘j�?h¦]rš?h¯XIPC Linux Install Guider›?…�rœ?}r�?(h‚Uh‘j–?ubah�j2ubcdocutils.nodes target rž?)�rŸ?}r ?(h‚X9 h™Kh‘j�?h�Utargetr¡?hƒ}r¢?(Urefurij™?h†]r£?Uipc-linux-install-guider¤?ah‡]h…]hŽ]h�]r¥?hLauh¦]ubh¯X* for more details on setting up variables)r¦?…�r§?}r¨?(h‚X* for more details on setting up variables)h‘j�?ubeubj¡)�r©?}rª?(h‚X.make -f ipc-linux.mak config make make installh‘j?hœj"?h�j¤hƒ}r«?(hÊhËh†]h‡]h…]hŽ]h�]uh¤Mûh¥hh¦]r¬?h¯X.make -f ipc-linux.mak config make make installr­?…�r®?}r¯?(h‚Uh‘j©?ubaubhÜ)�r°?}r±?(h‚X=NOTE: The Host linux binaries are located at the DESTDIR/bin.r²?h‘j?hœj"?h�hàhƒ}r³?(h…]hŽ]h‡]h†]h�]uh¤K0h¥hh¦]r´?h¯X=NOTE: The Host linux binaries are located at the DESTDIR/bin.rµ?…�r¶?}r·?(h‚j²?h‘j°?ubaubhþ)�r¸?}r¹?(h‚Uh‘j?hœj"?h�jhƒ}rº?(h…]hŽ]h‡]h†]h�]uh¤K2h¥hh¦]r»?(j)�r¼?}r½?(h‚UjKh‘j¸?hœj"?h�h¤hƒ}r¾?(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubj)�r¿?}rÀ?(h‚XNAll these tests use the messageq_single.\* binaries loaded on the slave cores.jKh‘j¸?hœj"?h�h¤hƒ}rÁ?(h…]hŽ]h‡]h†]h�]uh¤K4h¥hh¦]rÂ?h¯XMAll these tests use the messageq_single.* binaries loaded on the slave cores.rÃ?…�rÄ?}rÅ?(h‚XNAll these tests use the messageq_single.\* binaries loaded on the slave cores.h‘j¿?ubaubeubhÜ)�rÆ?}rÇ?(h‚X For example:rÈ?h‘j?hœj"?h�hàhƒ}rÉ?(h…]hŽ]h‡]h†]h�]uh¤K6h¥hh¦]rÊ?h¯X For example:rË?…�rÌ?}rÍ?(h‚jÈ?h‘jÆ?ubaubhÜ)�rÎ?}rÏ?(h‚X&For the ipu1 core on AM57x/DRA7xx use:rÐ?h‘j?hœj"?h�hàhƒ}rÑ?(h…]hŽ]h‡]h†]h�]uh¤K8h¥hh¦]rÒ?h¯X&For the ipu1 core on AM57x/DRA7xx use:rÓ?…�rÔ?}rÕ?(h‚jÐ?h‘jÎ?ubaubj¡)�rÖ?}r×?(h‚XL./packages/ti/ipc/tests/bin/ti_platforms_evmDRA7XX_ipu1/messageq_single.xem4h‘j?hœj"?h�j¤hƒ}rØ?(hÊhËh†]h‡]h…]hŽ]h�]uh¤M h¥hh¦]rÙ?h¯XL./packages/ti/ipc/tests/bin/ti_platforms_evmDRA7XX_ipu1/messageq_single.xem4rÚ?…�rÛ?}rÜ?(h‚Uh‘jÖ?ubaubhÜ)�rÝ?}rÞ?(h‚X"For all the DSP cores on K2HK use:rß?h‘j?hœj"?h�hàhƒ}rà?(h…]hŽ]h‡]h†]h�]uh¤K>h¥hh¦]rá?h¯X"For all the DSP cores on K2HK use:râ?…�rã?}rä?(h‚jß?h‘jÝ?ubaubj¡)�rå?}ræ?(h‚XQ./packages/ti/ipc/tests/bin/ti_platforms_evmTCI6638K2K_core0/messageq_single.xe66h‘j?hœj"?h�j¤hƒ}rç?(hÊhËh†]h‡]h…]hŽ]h�]uh¤Mh¥hh¦]rè?h¯XQ./packages/ti/ipc/tests/bin/ti_platforms_evmTCI6638K2K_core0/messageq_single.xe66ré?…�rê?}rë?(h‚Uh‘jå?ubaubhÜ)�rì?}rí?(h‚XaThe following procedures assume that all the relevant slave cores are already loaded and running.rî?h‘j?hœj"?h�hàhƒ}rï?(h…]hŽ]h‡]h†]h�]uh¤KGh¥hh¦]rð?h¯XaThe following procedures assume that all the relevant slave cores are already loaded and running.rñ?…�rò?}ró?(h‚jî?h‘jì?ubaubhÜ)�rô?}rõ?(h‚X MessageQApprö?h‘j?hœj"?h�hàhƒ}r÷?(h…]hŽ]h‡]h†]h�]uh¤KJh¥hh¦]rø?h¯X MessageQApprù?…�rú?}rû?(h‚jö?h‘jô?ubaubhÜ)�rü?}rý?(h‚XSyntax:rþ?h‘j?hœj"?h�hàhƒ}rÿ?(h…]hŽ]h‡]h†]h�]uh¤KLh¥hh¦]r@h¯XSyntax:r@…�r@}r@(h‚jþ?h‘jü?ubaubj¡)�r@}r@(h‚X+MessageQApp h‘j?hœj"?h�j¤hƒ}r@(hÊhËh†]h‡]h…]hŽ]h�]uh¤Mh¥hh¦]r@h¯X+MessageQApp r@…�r @}r @(h‚Uh‘j@ubaubhÜ)�r @}r @(h‚X(e.g)r @h‘j?hœj"?h�hàhƒ}r@(h…]hŽ]h‡]h†]h�]uh¤KRh¥hh¦]r@h¯X(e.g)r@…�r@}r@(h‚j @h‘j @ubaubj¡)�r@}r@(h‚XMessageQApp 100 1h‘j?hœj"?h�j¤hƒ}r@(hÊhËh†]h‡]h…]hŽ]h�]uh¤M%h¥hh¦]r@h¯XMessageQApp 100 1r@…�r@}r@(h‚Uh‘j@ubaubhÜ)�r@}r@(h‚XMsgqr@h‘j?hœj"?h�hàhƒ}r@(h…]hŽ]h‡]h†]h�]uh¤KXh¥hh¦]r@h¯XMsgqr@…�r @}r!@(h‚j@h‘j@ubaubj¡)�r"@}r#@(h‚X#Msgq100 [-l|h] procId1 procId2 ....h‘j?hœj"?h�j¤hƒ}r$@(hÊhËh†]h‡]h…]hŽ]h�]uh¤M+h¥hh¦]r%@h¯X#Msgq100 [-l|h] procId1 procId2 ....r&@…�r'@}r(@(h‚Uh‘j"@ubaubhÜ)�r)@}r*@(h‚X(e.g)r+@h‘j?hœj"?h�hàhƒ}r,@(h…]hŽ]h‡]h†]h�]uh¤K^h¥hh¦]r-@h¯X(e.g)r.@…�r/@}r0@(h‚j+@h‘j)@ubaubj¡)�r1@}r2@(h‚X¤Prints list of available remote processors Msgq100 -l Run test with remote processor with id 1 Msgq100 1 Run test with remote processors with id 1 and 2 Msgq100 1 2h‘j?hœj"?h�j¤hƒ}r3@(hÊhËh†]h‡]h…]hŽ]h�]uh¤M1h¥hh¦]r4@h¯X¤Prints list of available remote processors Msgq100 -l Run test with remote processor with id 1 Msgq100 1 Run test with remote processors with id 1 and 2 Msgq100 1 2r5@…�r6@}r7@(h‚Uh‘j1@ubaubhÜ)�r8@}r9@(h‚X MessageQBenchr:@h‘j?hœj"?h�hàhƒ}r;@(h…]hŽ]h‡]h†]h�]uh¤Kih¥hh¦]r<@h¯X MessageQBenchr=@…�r>@}r?@(h‚j:@h‘j8@ubaubhÜ)�r@@}rA@(h‚XSyntax:rB@h‘j?hœj"?h�hàhƒ}rC@(h…]hŽ]h‡]h†]h�]uh¤Kkh¥hh¦]rD@h¯XSyntax:rE@…�rF@}rG@(h‚jB@h‘j@@ubaubj¡)�rH@}rI@(h‚X-MessageQBench h‘j?hœj"?h�j¤hƒ}rJ@(hÊhËh†]h‡]h…]hŽ]h�]uh¤M>h¥hh¦]rK@h¯X-MessageQBench rL@…�rM@}rN@(h‚Uh‘jH@ubaubhÜ)�rO@}rP@(h‚X(e.g)rQ@h‘j?hœj"?h�hàhƒ}rR@(h…]hŽ]h‡]h†]h�]uh¤Kqh¥hh¦]rS@h¯X(e.g)rT@…�rU@}rV@(h‚jQ@h‘jO@ubaubj¡)�rW@}rX@(h‚XMessageQBench 100 1h‘j?hœj"?h�j¤hƒ}rY@(hÊhËh†]h‡]h…]hŽ]h�]uh¤MDh¥hh¦]rZ@h¯XMessageQBench 100 1r[@…�r\@}r]@(h‚Uh‘jW@ubaubhþ)�r^@}r_@(h‚Uh‘j?hœj"?h�jhƒ}r`@(h…]hŽ]h‡]h†]h�]uh¤Kwh¥hh¦]ra@j)�rb@}rc@(h‚UjKh‘j^@hœj"?h�h¤hƒ}rd@(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�re@}rf@(h‚XU./linux/src/tests/usr/bin/ping_rpmsg: Sends ping messages and receives back messages.rg@h‘j?hœj"?h�hàhƒ}rh@(h…]hŽ]h‡]h†]h�]uh¤K|h¥hh¦]ri@h¯XU./linux/src/tests/usr/bin/ping_rpmsg: Sends ping messages and receives back messages.rj@…�rk@}rl@(h‚jg@h‘je@ubaubhÜ)�rm@}rn@(h‚XDThis test uses **ping_rpmsg**.\* binaries loaded on the slave cores.ro@h‘j?hœj"?h�hàhƒ}rp@(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]rq@(h¯XThis test uses rr@…�rs@}rt@(h‚XThis test uses h‘jm@ubj¯)�ru@}rv@(h‚X**ping_rpmsg**hƒ}rw@(h…]hŽ]h‡]h†]h�]uh‘jm@h¦]rx@h¯X ping_rpmsgry@…�rz@}r{@(h‚Uh‘ju@ubah�j·ubh¯X&.* binaries loaded on the slave cores.r|@…�r}@}r~@(h‚X'.\* binaries loaded on the slave cores.h‘jm@ubeubhÜ)�r@}r€@(h‚X2For example for the ipu1 core on AM57x/DRA7xx use:r�@h‘j?hœj"?h�hàhƒ}r‚@(h…]hŽ]h‡]h†]h�]uh¤K�h¥hh¦]rƒ@h¯X2For example for the ipu1 core on AM57x/DRA7xx use:r„@…�r…@}r†@(h‚j�@h‘j@ubaubj¡)�r‡@}rˆ@(h‚XG./packages/ti/ipc/tests/bin/ti_platforms_evmDRA7XX_ipu1/ping_rpmsg.xem4h‘j?hœj"?h�j¤hƒ}r‰@(hÊhËh†]h‡]h…]hŽ]h�]uh¤MTh¥hh¦]rŠ@h¯XG./packages/ti/ipc/tests/bin/ti_platforms_evmDRA7XX_ipu1/ping_rpmsg.xem4r‹@…�rŒ@}r�@(h‚Uh‘j‡@ubaubhÜ)�rŽ@}r�@(h‚X.On the linux console run the following commandr�@h‘j?hœj"?h�hàhƒ}r‘@(h…]hŽ]h‡]h†]h�]uh¤KŠh¥hh¦]r’@h¯X.On the linux console run the following commandr“@…�r”@}r•@(h‚j�@h‘jŽ@ubaubhÜ)�r–@}r—@(h‚Xsyntax:r˜@h‘j?hœj"?h�hàhƒ}r™@(h…]hŽ]h‡]h†]h�]uh¤KŒh¥hh¦]rš@h¯Xsyntax:r›@…�rœ@}r�@(h‚j˜@h‘j–@ubaubj¡)�rž@}rŸ@(h‚Xping_rpmsg [num_iterations]h‘j?hœj"?h�j¤hƒ}r @(hÊhËh†]h‡]h…]hŽ]h�]uh¤M_h¥hh¦]r¡@h¯Xping_rpmsg [num_iterations]r¢@…�r£@}r¤@(h‚Uh‘jž@ubaubhÜ)�r¥@}r¦@(h‚X(e.g)r§@h‘j?hœj"?h�hàhƒ}r¨@(h…]hŽ]h‡]h†]h�]uh¤K’h¥hh¦]r©@h¯X(e.g)rª@…�r«@}r¬@(h‚j§@h‘j¥@ubaubj¡)�r­@}r®@(h‚Xping_rpmsg ping_rpmsg 100h‘j?hœj"?h�j¤hƒ}r¯@(hÊhËh†]h‡]h…]hŽ]h�]uh¤Meh¥hh¦]r°@h¯Xping_rpmsg ping_rpmsg 100r±@…�r²@}r³@(h‚Uh‘j­@ubaubhþ)�r´@}rµ@(h‚Uh‘j?hœj"?h�jhƒ}r¶@(h…]hŽ]h‡]h†]h�]uh¤K™h¥hh¦]r·@j)�r¸@}r¹@(h‚UjKh‘j´@hœj"?h�h¤hƒ}rº@(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�r»@}r¼@(h‚X6./linux/src/tests/.libs/NameServerApp: NameServer testr½@h‘j?hœj"?h�hàhƒ}r¾@(h…]hŽ]h‡]h†]h�]uh¤Kžh¥hh¦]r¿@h¯X6./linux/src/tests/.libs/NameServerApp: NameServer testrÀ@…�rÁ@}rÂ@(h‚j½@h‘j»@ubaubhÜ)�rÃ@}rÄ@(h‚XCThis test uses NameServerApp.\* binaries loaded on the slave cores.rÅ@h‘j?hœj"?h�hàhƒ}rÆ@(h…]hŽ]h‡]h†]h�]uh¤K h¥hh¦]rÇ@h¯XBThis test uses NameServerApp.* binaries loaded on the slave cores.rÈ@…�rÉ@}rÊ@(h‚XCThis test uses NameServerApp.\* binaries loaded on the slave cores.h‘jÃ@ubaubhÜ)�rË@}rÌ@(h‚X2For example for the ipu1 core on AM57x/DRA7xx use:rÍ@h‘j?hœj"?h�hàhƒ}rÎ@(h…]hŽ]h‡]h†]h�]uh¤K¢h¥hh¦]rÏ@h¯X2For example for the ipu1 core on AM57x/DRA7xx use:rÐ@…�rÑ@}rÒ@(h‚jÍ@h‘jË@ubaubj¡)�rÓ@}rÔ@(h‚XJ./packages/ti/ipc/tests/bin/ti_platforms_evmDRA7XX_ipu1/NameServerApp.xem4h‘j?hœj"?h�j¤hƒ}rÕ@(hÊhËh†]h‡]h…]hŽ]h�]uh¤Muh¥hh¦]rÖ@h¯XJ./packages/ti/ipc/tests/bin/ti_platforms_evmDRA7XX_ipu1/NameServerApp.xem4r×@…�rØ@}rÙ@(h‚Uh‘jÓ@ubaubhÜ)�rÚ@}rÛ@(h‚X?With the slave processors loaded execute the following command.rÜ@h‘j?hœj"?h�hàhƒ}rÝ@(h…]hŽ]h‡]h†]h�]uh¤K«h¥hh¦]rÞ@h¯X?With the slave processors loaded execute the following command.rß@…�rà@}rá@(h‚jÜ@h‘jÚ@ubaubj¡)�râ@}rã@(h‚X NameServerApph‘j?hœj"?h�j¤hƒ}rä@(hÊhËh†]h‡]h…]hŽ]h�]uh¤M~h¥hh¦]rå@h¯X NameServerAppræ@…�rç@}rè@(h‚Uh‘jâ@ubaubhþ)�ré@}rê@(h‚Uh‘j?hœj"?h�jhƒ}rë@(h…]hŽ]h‡]h†]h�]uh¤K±h¥hh¦]rì@j)�rí@}rî@(h‚UjKh‘jé@hœj"?h�h¤hƒ}rï@(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�rð@}rñ@(h‚XO./linux/src/tests/.libs/MessageQMulti: Sends and receives with multiple threadsrò@h‘j?hœj"?h�hàhƒ}ró@(h…]hŽ]h‡]h†]h�]uh¤K¶h¥hh¦]rô@h¯XO./linux/src/tests/.libs/MessageQMulti: Sends and receives with multiple threadsrõ@…�rö@}r÷@(h‚jò@h‘jð@ubaubhÜ)�rø@}rù@(h‚XBThis test uses messageq_multi.\* images loaded on the slave cores.rú@h‘j?hœj"?h�hàhƒ}rû@(h…]hŽ]h‡]h†]h�]uh¤K¹h¥hh¦]rü@h¯XAThis test uses messageq_multi.* images loaded on the slave cores.rý@…�rþ@}rÿ@(h‚XBThis test uses messageq_multi.\* images loaded on the slave cores.h‘jø@ubaubhÜ)�rA}rA(h‚X2For example for the ipu1 core on AM57x/DRA7xx use:rAh‘j?hœj"?h�hàhƒ}rA(h…]hŽ]h‡]h†]h�]uh¤K»h¥hh¦]rAh¯X2For example for the ipu1 core on AM57x/DRA7xx use:rA…�rA}rA(h‚jAh‘jAubaubj¡)�rA}r A(h‚XK./packages/ti/ipc/tests/bin/ti_platforms_evmDRA7XX_ipu1/messageq_multi.xem4h‘j?hœj"?h�j¤hƒ}r A(hÊhËh†]h‡]h…]hŽ]h�]uh¤MŽh¥hh¦]r Ah¯XK./packages/ti/ipc/tests/bin/ti_platforms_evmDRA7XX_ipu1/messageq_multi.xem4r A…�r A}rA(h‚Uh‘jAubaubhÜ)�rA}rA(h‚X`With the slave cores loaded and running. Use the following command to run the Linux application.rAh‘j?hœj"?h�hàhƒ}rA(h…]hŽ]h‡]h†]h�]uh¤KÄh¥hh¦]rAh¯X`With the slave cores loaded and running. Use the following command to run the Linux application.rA…�rA}rA(h‚jAh‘jAubaubhÜ)�rA}rA(h‚X(e.g)rAh‘j?hœj"?h�hàhƒ}rA(h…]hŽ]h‡]h†]h�]uh¤KÇh¥hh¦]rAh¯X(e.g)rA…�rA}rA(h‚jAh‘jAubaubj¡)�rA}r A(h‚X MessageQMultih‘j?hœj"?h�j¤hƒ}r!A(hÊhËh†]h‡]h…]hŽ]h�]uh¤Mšh¥hh¦]r"Ah¯X MessageQMultir#A…�r$A}r%A(h‚Uh‘jAubaubhþ)�r&A}r'A(h‚Uh‘j?hœj"?h�jhƒ}r(A(h…]hŽ]h‡]h†]h�]uh¤KÍh¥hh¦]r)Aj)�r*A}r+A(h‚UjKh‘j&Ahœj"?h�h¤hƒ}r,A(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�r-A}r.A(h‚Xy./linux/src/tests/.libs/MessageQMultiMulti: Sends and receives multiple messages with multiple threads to multiple cores.r/Ah‘j?hœj"?h�hàhƒ}r0A(h…]hŽ]h‡]h†]h�]uh¤KÒh¥hh¦]r1Ah¯Xy./linux/src/tests/.libs/MessageQMultiMulti: Sends and receives multiple messages with multiple threads to multiple cores.r2A…�r3A}r4A(h‚j/Ah‘j-AubaubhÜ)�r5A}r6A(h‚XNNOTE: This test needs all the slave cores in the SOC to be loaded and running.r7Ah‘j?hœj"?h�hàhƒ}r8A(h…]hŽ]h‡]h†]h�]uh¤KÕh¥hh¦]r9Ah¯XNNOTE: This test needs all the slave cores in the SOC to be loaded and running.r:A…�r;A}rA(h‚XFThis uses **messageq_multimulti.\*** images loaded on the slave cores.r?Ah‘j?hœj"?h�hàhƒ}r@A(h…]hŽ]h‡]h†]h�]uh¤KØh¥hh¦]rAA(h¯X This uses rBA…�rCA}rDA(h‚X This uses h‘j=Aubj¯)�rEA}rFA(h‚X**messageq_multimulti.\***hƒ}rGA(h…]hŽ]h‡]h†]h�]uh‘j=Ah¦]rHAh¯Xmessageq_multimulti.*rIA…�rJA}rKA(h‚Uh‘jEAubah�j·ubh¯X" images loaded on the slave cores.rLA…�rMA}rNA(h‚X" images loaded on the slave cores.h‘j=AubeubhÜ)�rOA}rPA(h‚X2For example for the ipu1 core on AM57x/DRA7xx use:rQAh‘j?hœj"?h�hàhƒ}rRA(h…]hŽ]h‡]h†]h�]uh¤KÚh¥hh¦]rSAh¯X2For example for the ipu1 core on AM57x/DRA7xx use:rTA…�rUA}rVA(h‚jQAh‘jOAubaubj¡)�rWA}rXA(h‚XP./packages/ti/ipc/tests/bin/ti_platforms_evmDRA7XX_ipu1/messageq_multimulti.xem4h‘j?hœj"?h�j¤hƒ}rYA(hÊhËh†]h‡]h…]hŽ]h�]uh¤M­h¥hh¦]rZAh¯XP./packages/ti/ipc/tests/bin/ti_platforms_evmDRA7XX_ipu1/messageq_multimulti.xem4r[A…�r\A}r]A(h‚Uh‘jWAubaubhÜ)�r^A}r_A(h‚XdWith all the slave cores loaded and running. Use the following command to run the Linux application.r`Ah‘j?hœj"?h�hàhƒ}raA(h…]hŽ]h‡]h†]h�]uh¤Kãh¥hh¦]rbAh¯XdWith all the slave cores loaded and running. Use the following command to run the Linux application.rcA…�rdA}reA(h‚j`Ah‘j^AubaubhÜ)�rfA}rgA(h‚X(e.g)rhAh‘j?hœj"?h�hàhƒ}riA(h…]hŽ]h‡]h†]h�]uh¤Kæh¥hh¦]rjAh¯X(e.g)rkA…�rlA}rmA(h‚jhAh‘jfAubaubj¡)�rnA}roA(h‚XMessageQMultiMultih‘j?hœj"?h�j¤hƒ}rpA(hÊhËh†]h‡]h…]hŽ]h�]uh¤M¹h¥hh¦]rqAh¯XMessageQMultiMultirrA…�rsA}rtA(h‚Uh‘jnAubaubhþ)�ruA}rvA(h‚Uh‘j?hœj"?h�jhƒ}rwA(h…]hŽ]h‡]h†]h�]uh¤Kìh¥hh¦]rxAj)�ryA}rzA(h‚UjKh‘juAhœj"?h�h¤hƒ}r{A(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�r|A}r}A(h‚X2./linux/src/tests/.libs/fault: Test fault handlingr~Ah‘j?hœj"?h�hàhƒ}rA(h…]hŽ]h‡]h†]h�]uh¤Kñh¥hh¦]r€Ah¯X2./linux/src/tests/.libs/fault: Test fault handlingr�A…�r‚A}rƒA(h‚j~Ah‘j|AubaubhÜ)�r„A}r…A(h‚XNNOTE: This test needs all the slave cores in the SOC to be loaded and running.r†Ah‘j?hœj"?h�hàhƒ}r‡A(h…]hŽ]h‡]h†]h�]uh¤Kóh¥hh¦]rˆAh¯XNNOTE: This test needs all the slave cores in the SOC to be loaded and running.r‰A…�rŠA}r‹A(h‚j†Ah‘j„AubaubhÜ)�rŒA}r�A(h‚X4This uses fault.\* images loaded on the slave cores.rŽAh‘j?hœj"?h�hàhƒ}r�A(h…]hŽ]h‡]h†]h�]uh¤Köh¥hh¦]r�Ah¯X3This uses fault.* images loaded on the slave cores.r‘A…�r’A}r“A(h‚X4This uses fault.\* images loaded on the slave cores.h‘jŒAubaubhÜ)�r”A}r•A(h‚X2For example for the ipu1 core on AM57x/DRA7xx use:r–Ah‘j?hœj"?h�hàhƒ}r—A(h…]hŽ]h‡]h†]h�]uh¤Køh¥hh¦]r˜Ah¯X2For example for the ipu1 core on AM57x/DRA7xx use:r™A…�ršA}r›A(h‚j–Ah‘j”Aubaubj¡)�rœA}r�A(h‚XB./packages/ti/ipc/tests/bin/ti_platforms_evmDRA7XX_ipu1/fault.xem4h‘j?hœj"?h�j¤hƒ}ržA(hÊhËh†]h‡]h…]hŽ]h�]uh¤MËh¥hh¦]rŸAh¯XB./packages/ti/ipc/tests/bin/ti_platforms_evmDRA7XX_ipu1/fault.xem4r A…�r¡A}r¢A(h‚Uh‘jœAubaubhÜ)�r£A}r¤A(h‚XdWith all the slave cores loaded and running. Use the following command to run the Linux application.r¥Ah‘j?hœj"?h�hàhƒ}r¦A(h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]r§Ah¯XdWith all the slave cores loaded and running. Use the following command to run the Linux application.r¨A…�r©A}rªA(h‚j¥Ah‘j£AubaubhÜ)�r«A}r¬A(h‚X(e.g)r­Ah‘j?hœj"?h�hàhƒ}r®A(h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]r¯Ah¯X(e.g)r°A…�r±A}r²A(h‚j­Ah‘j«Aubaubj¡)�r³A}r´A(h‚Xfaulth‘j?hœj"?h�j¤hƒ}rµA(hÊhËh†]h‡]h…]hŽ]h�]uh¤M×h¥hh¦]r¶Ah¯Xfaultr·A…�r¸A}r¹A(h‚Uh‘j³Aubaubhþ)�rºA}r»A(h‚Uh‘j?hœj"?h�jhƒ}r¼A(h…]hŽ]h‡]h†]h�]uh¤M h¥hh¦]r½Aj)�r¾A}r¿A(h‚UjKh‘jºAhœj"?h�h¤hƒ}rÀA(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�rÁA}rÂA(h‚X¬These tests under qnx/src/tests have a Qnx host application binary and the binaries for the respective slave cores used in the test are located under packages/ti/ipc/tests.rÃAh‘j?hœj"?h�hàhƒ}rÄA(h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]rÅAh¯X¬These tests under qnx/src/tests have a Qnx host application binary and the binaries for the respective slave cores used in the test are located under packages/ti/ipc/tests.rÆA…�rÇA}rÈA(h‚jÃAh‘jÁAubaubj)�rÉA}rÊA(h‚XJLoading of the slave cores in general is achieved by using the ipc binary.h‘j?hœj"?h�jhƒ}rËA(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rÌAhÜ)�rÍA}rÎA(h‚XJLoading of the slave cores in general is achieved by using the ipc binary.rÏAh‘jÉAhœj"?h�hàhƒ}rÐA(h…]hŽ]h‡]h†]h�]uh¤Mh¦]rÑAh¯XJLoading of the slave cores in general is achieved by using the ipc binary.rÒA…�rÓA}rÔA(h‚jÏAh‘jÍAubaubaubhÜ)�rÕA}rÖA(h‚X_MessageQApp: Sends single messages to slave cores and gets messages sent back from slave cores.r×Ah‘j?hœj"?h�hàhƒ}rØA(h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]rÙAh¯X_MessageQApp: Sends single messages to slave cores and gets messages sent back from slave cores.rÚA…�rÛA}rÜA(h‚j×Ah‘jÕAubaubhÜ)�rÝA}rÞA(h‚XOMessageQBench: Send and get back single messages and measures round trip delay.rßAh‘j?hœj"?h�hàhƒ}ràA(h…]hŽ]h‡]h†]h�]uh¤Mh¥hh¦]ráAh¯XOMessageQBench: Send and get back single messages and measures round trip delay.râA…�rãA}räA(h‚jßAh‘jÝAubaubhÜ)�råA}ræA(h‚XÁThese unit test binaries can be built with the following commands ( See `IPC QNX Install Guide `_ for more details on setting up variables)h‘j?hœj"?h�hàhƒ}rçA(h…]hŽ]h‡]h†]h�]uh¤M h¥hh¦]rèA(h¯XHThese unit test binaries can be built with the following commands ( See réA…�rêA}rëA(h‚XHThese unit test binaries can be built with the following commands ( See h‘jåAubj))�rìA}ríA(h‚XO`IPC QNX Install Guide `_hƒ}rîA(UnameXIPC QNX Install Guidej-X4index_Foundational_Components.html#qnx-install-guiderïAh†]h‡]h…]hŽ]h�]uh‘jåAh¦]rðAh¯XIPC QNX Install GuiderñA…�ròA}róA(h‚Uh‘jìAubah�j2ubjž?)�rôA}rõA(h‚X7 h™Kh‘jåAh�j¡?hƒ}röA(UrefurijïAh†]r÷AUipc-qnx-install-guiderøAah‡]h…]hŽ]h�]rùAhHauh¦]ubh¯X* for more details on setting up variables)rúA…�rûA}rüA(h‚X* for more details on setting up variables)h‘jåAubeubj¡)�rýA}rþA(h‚X3make -f ipc-qnx.mak all make -f ipc-qnx.mak installh‘j?hœj"?h�j¤hƒ}rÿA(hÊhËh†]h‡]h…]hŽ]h�]uh¤Mõh¥hh¦]rBh¯X3make -f ipc-qnx.mak all make -f ipc-qnx.mak installrB…�rB}rB(h‚Uh‘jýAubaubj)�rB}rB(h‚Uh‘j?hœj"?h�jhƒ}rB(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rBj")�rB}r B(h‚XOAll these tests use the messageq_single.\* binaries loaded on the slave cores. h‘jBhœj"?h�j%hƒ}r B(h…]hŽ]h‡]h†]h�]uh¤M*h¦]r B(j()�r B}r B(h‚XAAll these tests use the messageq_single.\* binaries loaded on therBh‘jBhœj"?h�j,hƒ}rB(h…]hŽ]h‡]h†]h�]uh¤M*h¦]rBh¯X@All these tests use the messageq_single.* binaries loaded on therB…�rB}rB(h‚XAAll these tests use the messageq_single.\* binaries loaded on theh‘j Bubaubj9)�rB}rB(h‚Uhƒ}rB(h…]hŽ]h‡]h†]h�]uh‘jBh¦]rBhÜ)�rB}rB(h‚X slave cores.rBh‘jBhœj"?h�hàhƒ}rB(h…]hŽ]h‡]h†]h�]uh¤M*h¦]rBh¯X slave cores.rB…�rB}rB(h‚jBh‘jBubaubah�jEubeubaubhÜ)�r B}r!B(h‚X For example:r"Bh‘j?hœj"?h�hàhƒ}r#B(h…]hŽ]h‡]h†]h�]uh¤M,h¥hh¦]r$Bh¯X For example:r%B…�r&B}r'B(h‚j"Bh‘j BubaubhÜ)�r(B}r)B(h‚X For the ipu1 core on DRA7xx use:r*Bh‘j?hœj"?h�hàhƒ}r+B(h…]hŽ]h‡]h†]h�]uh¤M.h¥hh¦]r,Bh¯X For the ipu1 core on DRA7xx use:r-B…�r.B}r/B(h‚j*Bh‘j(Bubaubj¡)�r0B}r1B(h‚XL./packages/ti/ipc/tests/bin/ti_platforms_evmDRA7XX_ipu1/messageq_single.xem4h‘j?hœj"?h�j¤hƒ}r2B(hÊhËh†]h‡]h…]hŽ]h�]uh¤Mh¥hh¦]r3Bh¯XL./packages/ti/ipc/tests/bin/ti_platforms_evmDRA7XX_ipu1/messageq_single.xem4r4B…�r5B}r6B(h‚Uh‘j0BubaubhÜ)�r7B}r8B(h‚XXFollow the instructions in the Install Guide for how to load images to the remote cores.r9Bh‘j?hœj"?h�hàhƒ}r:B(h…]hŽ]h‡]h†]h�]uh¤M4h¥hh¦]r;Bh¯XXFollow the instructions in the Install Guide for how to load images to the remote cores.rB(h‚j9Bh‘j7BubaubhÜ)�r?B}r@B(h‚XaThe following procedures assume that all the relevant slave cores are already loaded and running.rABh‘j?hœj"?h�hàhƒ}rBB(h…]hŽ]h‡]h†]h�]uh¤M:h¥hh¦]rCBh¯XaThe following procedures assume that all the relevant slave cores are already loaded and running.rDB…�rEB}rFB(h‚jABh‘j?BubaubhÜ)�rGB}rHB(h‚X MessageQApprIBh‘j?hœj"?h�hàhƒ}rJB(h…]hŽ]h‡]h†]h�]uh¤M=h¥hh¦]rKBh¯X MessageQApprLB…�rMB}rNB(h‚jIBh‘jGBubaubhÜ)�rOB}rPB(h‚XSyntax:rQBh‘j?hœj"?h�hàhƒ}rRB(h…]hŽ]h‡]h†]h�]uh¤M?h¥hh¦]rSBh¯XSyntax:rTB…�rUB}rVB(h‚jQBh‘jOBubaubj¡)�rWB}rXB(h‚X+MessageQApp h‘j?hœj"?h�j¤hƒ}rYB(hÊhËh†]h‡]h…]hŽ]h�]uh¤Mh¥hh¦]rZBh¯X+MessageQApp r[B…�r\B}r]B(h‚Uh‘jWBubaubhÜ)�r^B}r_B(h‚X(e.g)r`Bh‘j?hœj"?h�hàhƒ}raB(h…]hŽ]h‡]h†]h�]uh¤MEh¥hh¦]rbBh¯X(e.g)rcB…�rdB}reB(h‚j`Bh‘j^Bubaubj¡)�rfB}rgB(h‚XMessageQApp 100 1h‘j?hœj"?h�j¤hƒ}rhB(hÊhËh†]h‡]h…]hŽ]h�]uh¤Mh¥hh¦]riBh¯XMessageQApp 100 1rjB…�rkB}rlB(h‚Uh‘jfBubaubhÜ)�rmB}rnB(h‚X MessageQBenchroBh‘j?hœj"?h�hàhƒ}rpB(h…]hŽ]h‡]h†]h�]uh¤MKh¥hh¦]rqBh¯X MessageQBenchrrB…�rsB}rtB(h‚joBh‘jmBubaubhÜ)�ruB}rvB(h‚XSyntax:rwBh‘j?hœj"?h�hàhƒ}rxB(h…]hŽ]h‡]h†]h�]uh¤MMh¥hh¦]ryBh¯XSyntax:rzB…�r{B}r|B(h‚jwBh‘juBubaubj¡)�r}B}r~B(h‚X-MessageQBench h‘j?hœj"?h�j¤hƒ}rB(hÊhËh†]h‡]h…]hŽ]h�]uh¤M h¥hh¦]r€Bh¯X-MessageQBench r�B…�r‚B}rƒB(h‚Uh‘j}BubaubhÜ)�r„B}r…B(h‚X(e.g)r†Bh‘j?hœj"?h�hàhƒ}r‡B(h…]hŽ]h‡]h†]h�]uh¤MSh¥hh¦]rˆBh¯X(e.g)r‰B…�rŠB}r‹B(h‚j†Bh‘j„Bubaubj¡)�rŒB}r�B(h‚XMessageQBench 100 1h‘j?hœj"?h�j¤hƒ}rŽB(hÊhËh†]h‡]h…]hŽ]h�]uh¤M&h¥hh¦]r�Bh¯XMessageQBench 100 1r�B…�r‘B}r’B(h‚Uh‘jŒBubaubhÜ)�r“B}r”B(h‚X../qnx/src/tests/NameServerApp: NameServer testr•Bh‘j?hœj"?h�hàhƒ}r–B(h…]hŽ]h‡]h†]h�]uh¤M\h¥hh¦]r—Bh¯X../qnx/src/tests/NameServerApp: NameServer testr˜B…�r™B}ršB(h‚j•Bh‘j“BubaubhÜ)�r›B}rœB(h‚XCThis test uses NameServerApp.\* binaries loaded on the slave cores.r�Bh‘j?hœj"?h�hàhƒ}ržB(h…]hŽ]h‡]h†]h�]uh¤M^h¥hh¦]rŸBh¯XBThis test uses NameServerApp.* binaries loaded on the slave cores.r B…�r¡B}r¢B(h‚XCThis test uses NameServerApp.\* binaries loaded on the slave cores.h‘j›BubaubhÜ)�r£B}r¤B(h‚X,For example for the ipu1 core on DRA7xx use:r¥Bh‘j?hœj"?h�hàhƒ}r¦B(h…]hŽ]h‡]h†]h�]uh¤M`h¥hh¦]r§Bh¯X,For example for the ipu1 core on DRA7xx use:r¨B…�r©B}rªB(h‚j¥Bh‘j£Bubaubj¡)�r«B}r¬B(h‚XJ./packages/ti/ipc/tests/bin/ti_platforms_evmDRA7XX_ipu1/NameServerApp.xem4h‘j?hœj"?h�j¤hƒ}r­B(hÊhËh†]h‡]h…]hŽ]h�]uh¤M3h¥hh¦]r®Bh¯XJ./packages/ti/ipc/tests/bin/ti_platforms_evmDRA7XX_ipu1/NameServerApp.xem4r¯B…�r°B}r±B(h‚Uh‘j«BubaubhÜ)�r²B}r³B(h‚X?With the slave processors loaded execute the following command.r´Bh‘j?hœj"?h�hàhƒ}rµB(h…]hŽ]h‡]h†]h�]uh¤Mih¥hh¦]r¶Bh¯X?With the slave processors loaded execute the following command.r·B…�r¸B}r¹B(h‚j´Bh‘j²Bubaubj¡)�rºB}r»B(h‚X NameServerApph‘j?hœj"?h�j¤hƒ}r¼B(hÊhËh†]h‡]h…]hŽ]h�]uh¤M<h¥hh¦]r½Bh¯X NameServerAppr¾B…�r¿B}rÀB(h‚Uh‘jºBubaubhþ)�rÁB}rÂB(h‚Uh‘j?hœj"?h�jhƒ}rÃB(h…]hŽ]h‡]h†]h�]uh¤Moh¥hh¦]rÄBj)�rÅB}rÆB(h‚UjKh‘jÁBhœj"?h�h¤hƒ}rÇB(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubhÜ)�rÈB}rÉB(h‚XG./qnx/src/tests/MessageQMulti: Sends and receives with multiple threadsrÊBh‘j?hœj"?h�hàhƒ}rËB(h…]hŽ]h‡]h†]h�]uh¤Mth¥hh¦]rÌBh¯XG./qnx/src/tests/MessageQMulti: Sends and receives with multiple threadsrÍB…�rÎB}rÏB(h‚jÊBh‘jÈBubaubhÜ)�rÐB}rÑB(h‚XBThis test uses messageq_multi.\* images loaded on the slave cores.rÒBh‘j?hœj"?h�hàhƒ}rÓB(h…]hŽ]h‡]h†]h�]uh¤Mvh¥hh¦]rÔBh¯XAThis test uses messageq_multi.* images loaded on the slave cores.rÕB…�rÖB}r×B(h‚XBThis test uses messageq_multi.\* images loaded on the slave cores.h‘jÐBubaubhÜ)�rØB}rÙB(h‚X,For example for the ipu1 core on DRA7xx use:rÚBh‘j?hœj"?h�hàhƒ}rÛB(h…]hŽ]h‡]h†]h�]uh¤Mxh¥hh¦]rÜBh¯X,For example for the ipu1 core on DRA7xx use:rÝB…�rÞB}rßB(h‚jÚBh‘jØBubaubj¡)�ràB}ráB(h‚XK./packages/ti/ipc/tests/bin/ti_platforms_evmDRA7XX_ipu1/messageq_multi.xem4h‘j?hœj"?h�j¤hƒ}râB(hÊhËh†]h‡]h…]hŽ]h�]uh¤MKh¥hh¦]rãBh¯XK./packages/ti/ipc/tests/bin/ti_platforms_evmDRA7XX_ipu1/messageq_multi.xem4räB…�råB}ræB(h‚Uh‘jàBubaubhÜ)�rçB}rèB(h‚X^With the slave cores loaded and running. Use the following command to run the Qnx application.réBh‘j?hœj"?h�hàhƒ}rêB(h…]hŽ]h‡]h†]h�]uh¤M�h¥hh¦]rëBh¯X^With the slave cores loaded and running. Use the following command to run the Qnx application.rìB…�ríB}rîB(h‚jéBh‘jçBubaubhÜ)�rïB}rðB(h‚XSyntax:rñBh‘j?hœj"?h�hàhƒ}ròB(h…]hŽ]h‡]h†]h�]uh¤M„h¥hh¦]róBh¯XSyntax:rôB…�rõB}röB(h‚jñBh‘jïBubaubj¡)�r÷B}røB(h‚X÷Usage: MessageQMulti Defaults: number of threads: 10 number of loops: 1000 number of processes: 1 Note: If number of processes is set, number of threads is forced to 1h‘j?hœj"?h�j¤hƒ}rùB(hÊhËh†]h‡]h…]hŽ]h�]uh¤MWh¥hh¦]rúBh¯X÷Usage: MessageQMulti Defaults: number of threads: 10 number of loops: 1000 number of processes: 1 Note: If number of processes is set, number of threads is forced to 1rûB…�rüB}rýB(h‚Uh‘j÷BubaubhÜ)�rþB}rÿB(h‚X(e.g)rCh‘j?hœj"?h�hàhƒ}rC(h…]hŽ]h‡]h†]h�]uh¤MŽh¥hh¦]rCh¯X(e.g)rC…�rC}rC(h‚jCh‘jþBubaubj¡)�rC}rC(h‚XMessageQMulti 10 10h‘j?hœj"?h�j¤hƒ}rC(hÊhËh†]h‡]h…]hŽ]h�]uh¤Mah¥hh¦]r Ch¯XMessageQMulti 10 10r C…�r C}r C(h‚Uh‘jCubaubhÜ)�r C}rC(h‚X*./qnx/src/tests/Fault: Test fault handlingrCh‘j?hœj"?h�hàhƒ}rC(h…]hŽ]h‡]h†]h�]uh¤M—h¥hh¦]rCh¯X*./qnx/src/tests/Fault: Test fault handlingrC…�rC}rC(h‚jCh‘j CubaubhÜ)�rC}rC(h‚X4This uses fault.\* images loaded on the slave cores.rCh‘j?hœj"?h�hàhƒ}rC(h…]hŽ]h‡]h†]h�]uh¤M™h¥hh¦]rCh¯X3This uses fault.* images loaded on the slave cores.rC…�rC}rC(h‚X4This uses fault.\* images loaded on the slave cores.h‘jCubaubhÜ)�rC}rC(h‚X,For example for the ipu1 core on DRA7xx use:rCh‘j?hœj"?h�hàhƒ}r C(h…]hŽ]h‡]h†]h�]uh¤M›h¥hh¦]r!Ch¯X,For example for the ipu1 core on DRA7xx use:r"C…�r#C}r$C(h‚jCh‘jCubaubj¡)�r%C}r&C(h‚XB./packages/ti/ipc/tests/bin/ti_platforms_evmDRA7XX_ipu1/fault.xem4h‘j?hœj"?h�j¤hƒ}r'C(hÊhËh†]h‡]h…]hŽ]h�]uh¤Mnh¥hh¦]r(Ch¯XB./packages/ti/ipc/tests/bin/ti_platforms_evmDRA7XX_ipu1/fault.xem4r)C…�r*C}r+C(h‚Uh‘j%CubaubhÜ)�r,C}r-C(h‚XbWith all the slave cores loaded and running. Use the following command to run the Qnx application.r.Ch‘j?hœj"?h�hàhƒ}r/C(h…]hŽ]h‡]h†]h�]uh¤M¤h¥hh¦]r0Ch¯XbWith all the slave cores loaded and running. Use the following command to run the Qnx application.r1C…�r2C}r3C(h‚j.Ch‘j,CubaubhÜ)�r4C}r5C(h‚XSyntax:r6Ch‘j?hœj"?h�hàhƒ}r7C(h…]hŽ]h‡]h†]h�]uh¤M§h¥hh¦]r8Ch¯XSyntax:r9C…�r:C}r;C(h‚j6Ch‘j4Cubaubj¡)�r> Where is: 0: No fault 1: MMU read fault 2: MMU write fault 3: MMU program fault 4: Exception 5: Watchdogh‘j?hœj"?h�j¤hƒ}r>C(hÊhËh†]h‡]h…]hŽ]h�]uh¤Mzh¥hh¦]r?Ch¯XÀFault <-f > Where is: 0: No fault 1: MMU read fault 2: MMU write fault 3: MMU program fault 4: Exception 5: Watchdogr@C…�rAC}rBC(h‚Uh‘j_vayu.\* images loaded on the slave cores.r’Ch‘j?hœj"?h�hàhƒ}r“C(h…]hŽ]h‡]h†]h�]uh¤MØh¥hh¦]r”Ch¯XFThis uses the test_omx__vayu.* images loaded on the slave cores.r•C…�r–C}r—C(h‚XGThis uses the test_omx__vayu.\* images loaded on the slave cores.h‘j�CubaubhÜ)�r˜C}r™C(h‚X,For example for the dsp1 core on DRA7xx use:ršCh‘j?hœj"?h�hàhƒ}r›C(h…]hŽ]h‡]h†]h�]uh¤MÚh¥hh¦]rœCh¯X,For example for the dsp1 core on DRA7xx use:r�C…�ržC}rŸC(h‚jšCh‘j˜Cubaubj¡)�r C}r¡C(h‚XO./packages/ti/ipc/tests/bin/ti_platforms_evmDRA7XX_dsp1/test_omx_ipu1_vayu.xem4h‘j?hœj"?h�j¤hƒ}r¢C(hÊhËh†]h‡]h…]hŽ]h�]uh¤M­h¥hh¦]r£Ch¯XO./packages/ti/ipc/tests/bin/ti_platforms_evmDRA7XX_dsp1/test_omx_ipu1_vayu.xem4r¤C…�r¥C}r¦C(h‚Uh‘j CubaubhÜ)�r§C}r¨C(h‚X^With the slave cores loaded and running. Use the following command to run the Qnx application.r©Ch‘j?hœj"?h�hàhƒ}rªC(h…]hŽ]h‡]h†]h�]uh¤Mãh¥hh¦]r«Ch¯X^With the slave cores loaded and running. Use the following command to run the Qnx application.r¬C…�r­C}r®C(h‚j©Ch‘j§CubaubhÜ)�r¯C}r°C(h‚XSyntax:r±Ch‘j?hœj"?h�hàhƒ}r²C(h…]hŽ]h‡]h†]h�]uh¤Mæh¥hh¦]r³Ch¯XSyntax:r´C…�rµC}r¶C(h‚j±Ch‘j¯Cubaubj¡)�r·C}r¸C(h‚Xmmrpc_test h‘j?hœj"?h�j¤hƒ}r¹C(hÊhËh†]h‡]h…]hŽ]h�]uh¤M¹h¥hh¦]rºCh¯Xmmrpc_test r»C…�r¼C}r½C(h‚Uh‘j·CubaubhÜ)�r¾C}r¿C(h‚X(e.g.)rÀCh‘j?hœj"?h�hàhƒ}rÁC(h…]hŽ]h‡]h†]h�]uh¤Mìh¥hh¦]rÂCh¯X(e.g.)rÃC…�rÄC}rÅC(h‚jÀCh‘j¾Cubaubj¡)�rÆC}rÇC(h‚X mmrpc_test 1h‘j?hœXQinternal padding after source/linux/Foundational_Components/IPC/IPC_Tests.rst.incrÈCh�j¤hƒ}rÉC(hÊhËh†]h‡]h…]hŽ]h�]uh¤M¿h¥hh¦]rÊCh¯X mmrpc_test 1rËC…�rÌC}rÍC(h‚Uh‘jÆCubaubeubh–)�rÎC}rÏC(h‚Uh‘hšhœhŒh�hžhƒ}rÐC(h…]hŽ]h‡]h†]rÑCU ipc-daemonrÒCah�]rÓChxauh¤K&h¥hh¦]rÔC(h¨)�rÕC}rÖC(h‚X IPC Daemonr×Ch‘jÎChœhŒh�h¬hƒ}rØC(h…]hŽ]h‡]h†]h�]uh¤K&h¥hh¦]rÙCh¯X IPC DaemonrÚC…�rÛC}rÜC(h‚j×Ch‘jÕCubaubhÂ)�rÝC}rÞC(h‚X2http://processors.wiki.ti.com/index.php/IPC_Daemonh‘jÎChœhŠX;source/linux/Foundational_Components/IPC/IPC_Daemon.rst.incrßC…�ràC}ráCbh�hÈhƒ}râC(hÊhËh†]h‡]h…]hŽ]h�]uh¤Kh¥hh¦]rãCh¯X2http://processors.wiki.ti.com/index.php/IPC_DaemonräC…�råC}ræC(h‚Uh‘jÝCubaubhÜ)�rçC}rèC(h‚XÌThis topic is an overview of the daemon used by IPC on Linux. The IPC daemon maintains any processor-wide state that's not specific to any process or thread on the HLOS. For example, it contains the `MultiProc `__ configuration (small database of what cores are in the system and their unique IDs), the HLOS's `NameServer `__ database, among other misc.h‘jÎChœjàCh�hàhƒ}réC(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]rêC(h¯XÇThis topic is an overview of the daemon used by IPC on Linux. The IPC daemon maintains any processor-wide state that's not specific to any process or thread on the HLOS. For example, it contains the rëC…�rìC}ríC(h‚XÇThis topic is an overview of the daemon used by IPC on Linux. The IPC daemon maintains any processor-wide state that's not specific to any process or thread on the HLOS. For example, it contains the h‘jçCubj))�rîC}rïC(h‚XC`MultiProc `__hƒ}rðC(UnameX MultiProcj-X3index_Foundational_Components.html#multiproc-moduleh†]h‡]h…]hŽ]h�]uh‘jçCh¦]rñCh¯X MultiProcròC…�róC}rôC(h‚Uh‘jîCubah�j2ubh¯Xa configuration (small database of what cores are in the system and their unique IDs), the HLOS's rõC…�röC}r÷C(h‚Xa configuration (small database of what cores are in the system and their unique IDs), the HLOS's h‘jçCubj))�røC}rùC(h‚XE`NameServer `__hƒ}rúC(UnameX NameServerj-X4index_Foundational_Components.html#nameserver-moduleh†]h‡]h…]hŽ]h�]uh‘jçCh¦]rûCh¯X NameServerrüC…�rýC}rþC(h‚Uh‘jøCubah�j2ubh¯X database, among other misc.rÿC…�rD}rD(h‚X database, among other misc.h‘jçCubeubhÜ)�rD}rD(h‚X)The IPC daemon was forked from the `Link Arbiter Daemon `__, used in DSP Link systems - and while the daemon still contains 'lad' in it's name, LAD isn't really an applicable acronym for anything. (But creative suggestions are welcome!)h‘jÎChœjàCh�hàhƒ}rD(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]rD(h¯X#The IPC daemon was forked from the rD…�rD}rD(h‚X#The IPC daemon was forked from the h‘jDubj))�r D}r D(h‚XU`Link Arbiter Daemon `__hƒ}r D(UnameXLink Arbiter Daemonj-X;http://processors.wiki.ti.com/index.php/Link_Arbiter_Daemonh†]h‡]h…]hŽ]h�]uh‘jDh¦]r Dh¯XLink Arbiter Daemonr D…�rD}rD(h‚Uh‘j Dubah�j2ubh¯X±, used in DSP Link systems - and while the daemon still contains 'lad' in it's name, LAD isn't really an applicable acronym for anything. (But creative suggestions are welcome!)rD…�rD}rD(h‚X±, used in DSP Link systems - and while the daemon still contains 'lad' in it's name, LAD isn't really an applicable acronym for anything. (But creative suggestions are welcome!)h‘jDubeubhÜ)�rD}rD(h‚XGThe IPC Daemon is a separate process from other IPC-using applications.rDh‘jÎChœjàCh�hàhƒ}rD(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]rDh¯XGThe IPC Daemon is a separate process from other IPC-using applications.rD…�rD}rD(h‚jDh‘jDubaubhÜ)�rD}rD(h‚XæThe IPC Daemon must be started **after** the slaves have been loaded, but before any application using IPC is run. Applications connect to the IPC Daemon during the call to Ipc_start() and disconnect during the call to Ipc_stop().h‘jÎChœjàCh�hàhƒ}rD(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]rD(h¯XThe IPC Daemon must be started rD…�r D}r!D(h‚XThe IPC Daemon must be started h‘jDubj¯)�r"D}r#D(h‚X **after**hƒ}r$D(h…]hŽ]h‡]h†]h�]uh‘jDh¦]r%Dh¯Xafterr&D…�r'D}r(D(h‚Uh‘j"Dubah�j·ubh¯X¾ the slaves have been loaded, but before any application using IPC is run. Applications connect to the IPC Daemon during the call to Ipc_start() and disconnect during the call to Ipc_stop().r)D…�r*D}r+D(h‚X¾ the slaves have been loaded, but before any application using IPC is run. Applications connect to the IPC Daemon during the call to Ipc_start() and disconnect during the call to Ipc_stop().h‘jDubeubhÜ)�r,D}r-D(h‚XáAt startup, the daemon creates a FIFO (named pipe) for listening for connection requests from other user-mode clients. When a connection request comes in, the daemon opens a dedicated FIFO for sending responses to the client.r.Dh‘jÎChœjàCh�hàhƒ}r/D(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]r0Dh¯XáAt startup, the daemon creates a FIFO (named pipe) for listening for connection requests from other user-mode clients. When a connection request comes in, the daemon opens a dedicated FIFO for sending responses to the client.r1D…�r2D}r3D(h‚j.Dh‘j,DubaubhÜ)�r4D}r5D(h‚X{At run-time, LAD processes command in FIFO order, and these commands run to completion before the next command is accepted.r6Dh‘jÎChœjàCh�hàhƒ}r7D(h…]hŽ]h‡]h†]h�]uh¤K$h¥hh¦]r8Dh¯X{At run-time, LAD processes command in FIFO order, and these commands run to completion before the next command is accepted.r9D…�r:D}r;D(h‚j6Dh‘j4DubaubhÜ)�rDh‘jÎChœjàCh�hàhƒ}r?D(h…]hŽ]h‡]h†]h�]uh¤K-h¥hh¦]r@Dh¯X^The IPC daemon needs to be explicitly started before any client applications call Ipc_start().rAD…�rBD}rCD(h‚j>Dh‘j`__rÉDh‘jÃDhœjeDh�hàhƒ}rÊD(h…]hŽ]h‡]h†]h�]uh¤Kh¦]rËDj))�rÌD}rÍD(h‚jÉDhƒ}rÎD(UnameX&Multiple Ways of ARM/DSP Communicationj-XGFoundational_Components_IPC.html#multiple-ways-of-arm-dsp-communicationh†]h‡]h…]hŽ]h�]uh‘jÇDh¦]rÏDh¯X&Multiple Ways of ARM/DSP CommunicationrÐD…�rÑD}rÒD(h‚Uh‘jÌDubah�j2ubaubah�joubjb)�rÓD}rÔD(h‚Uhƒ}rÕD(h…]hŽ]h‡]h†]h�]uh‘j¿Dh¦]rÖDhÜ)�r×D}rØD(h‚X8Provides brief overview of each method and pros and consrÙDh‘jÓDhœjeDh�hàhƒ}rÚD(h…]hŽ]h‡]h†]h�]uh¤Kh¦]rÛDh¯X8Provides brief overview of each method and pros and consrÜD…�rÝD}rÞD(h‚jÙDh‘j×Dubaubah�joubeh�jˆubj])�rßD}ràD(h‚Uhƒ}ráD(h…]hŽ]h‡]h†]h�]uh‘j»Dh¦]râD(jb)�rãD}räD(h‚Uhƒ}råD(h…]hŽ]h‡]h†]h�]uh‘jßDh¦]ræDhÜ)�rçD}rèD(h‚XR`IPC Quick Start Guide `__réDh‘jãDhœjeDh�hàhƒ}rêD(h…]hŽ]h‡]h†]h�]uh¤Kh¦]rëDj))�rìD}ríD(h‚jéDhƒ}rîD(UnameXIPC Quick Start Guidej-X6Foundational_Components_IPC.html#ipc-quick-start-guideh†]h‡]h…]hŽ]h�]uh‘jçDh¦]rïDh¯XIPC Quick Start GuiderðD…�rñD}ròD(h‚Uh‘jìDubah�j2ubaubah�joubjb)�róD}rôD(h‚Uhƒ}rõD(h…]hŽ]h‡]h†]h�]uh‘jßDh¦]röDhÜ)�r÷D}røD(h‚X;Building and setting up examples for IPC with Processor SDKrùDh‘jóDhœjeDh�hàhƒ}rúD(h…]hŽ]h‡]h†]h�]uh¤Kh¦]rûDh¯X;Building and setting up examples for IPC with Processor SDKrüD…�rýD}rþD(h‚jùDh‘j÷Dubaubah�joubeh�jˆubeh�jWubeh�jXubaubhþ)�rÿD}rE(h‚Uh‘h—hœjeDh�jhƒ}rE(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]rEj)�rE}rE(h‚UjKh‘jÿDhœjeDh�h¤hƒ}rE(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubh’)�rE}rE(h‚XTechnical DocumentsrEh‘h—hœjeDh�hÓhƒ}r E(h†]r EUtechnical-documentsr Eah‡]h…]hŽ]h�]r Ehgauh¤Nh¥hh¦]r Eh¯XTechnical DocumentsrE…�rE}rE(h‚jEh‘jEubaubjB)�rE}rE(h‚Uh‘h—hœjeDh�jEhƒ}rE(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rEjH)�rE}rE(h‚Uhƒ}rE(h†]h‡]h…]hŽ]h�]UcolsKuh‘jEh¦]rE(jM)�rE}rE(h‚Uhƒ}rE(h†]h‡]h…]hŽ]h�]UcolwidthKRuh‘jEh¦]h�jQubjM)�rE}rE(h‚Uhƒ}rE(h†]h‡]h…]hŽ]h�]UcolwidthKuh‘jEh¦]h�jQubjX)�rE}r E(h‚Uhƒ}r!E(h…]hŽ]h‡]h†]h�]uh‘jEh¦]r"Ej])�r#E}r$E(h‚Uhƒ}r%E(h…]hŽ]h‡]h†]h�]uh‘jEh¦]r&E(jb)�r'E}r(E(h‚Uhƒ}r)E(h…]hŽ]h‡]h†]h�]uh‘j#Eh¦]r*EhÜ)�r+E}r,E(h‚XLinksr-Eh‘j'EhœjeDh�hàhƒ}r.E(h…]hŽ]h‡]h†]h�]uh¤K#h¦]r/Eh¯XLinksr0E…�r1E}r2E(h‚j-Eh‘j+Eubaubah�joubjb)�r3E}r4E(h‚Uhƒ}r5E(h…]hŽ]h‡]h†]h�]uh‘j#Eh¦]r6EhÜ)�r7E}r8E(h‚X Descriptionr9Eh‘j3EhœjeDh�hàhƒ}r:E(h…]hŽ]h‡]h†]h�]uh¤K#h¦]r;Eh¯X DescriptionrE(h‚j9Eh‘j7Eubaubah�joubeh�jˆubah�j‰ubjŠ)�r?E}r@E(h‚Uhƒ}rAE(h…]hŽ]h‡]h†]h�]uh‘jEh¦]rBEj])�rCE}rDE(h‚Uhƒ}rEE(h…]hŽ]h‡]h†]h�]uh‘j?Eh¦]rFE(jb)�rGE}rHE(h‚Uhƒ}rIE(h…]hŽ]h‡]h†]h�]uh‘jCEh¦]rJEhÜ)�rKE}rLE(h‚X€`IPC User's Guide `__rMEh‘jGEhœjeDh�hàhƒ}rNE(h…]hŽ]h‡]h†]h�]uh¤K%h¦]rOEj))�rPE}rQE(h‚jMEhƒ}rRE(UnameXIPC User's Guidej-Xhhttp://software-dl.ti.com/processor-sdk-rtos/esd/docs/latest/rtos/index_Foundational_Components.html#ipch†]h‡]h…]hŽ]h�]uh‘jKEh¦]rSEh¯XIPC User's GuiderTE…�rUE}rVE(h‚Uh‘jPEubah�j2ubaubah�joubjb)�rWE}rXE(h‚Uhƒ}rYE(h…]hŽ]h‡]h†]h�]uh‘jCEh¦]rZEhÜ)�r[E}r\E(h‚XTI IPC User's Guider]Eh‘jWEhœjeDh�hàhƒ}r^E(h…]hŽ]h‡]h†]h�]uh¤K%h¦]r_Eh¯XTI IPC User's Guider`E…�raE}rbE(h‚j]Eh‘j[Eubaubah�joubeh�jˆubah�jWubeh�jXubaubhþ)�rcE}rdE(h‚Uh‘h—hœjeDh�jhƒ}reE(h…]hŽ]h‡]h†]h�]uh¤K)h¥hh¦]rfEj)�rgE}rhE(h‚UjKh‘jcEhœjeDh�h¤hƒ}riE(h…]hŽ]h‡]h†]h�]uh¤Kh¥hh¦]ubaubh’)�rjE}rkE(h‚XStarting IPC projectrlEh‘h—hœjeDh�hÓhƒ}rmE(h†]rnEUstarting-ipc-projectroEah‡]h…]hŽ]h�]rpEhauh¤Nh¥hh¦]rqEh¯XStarting IPC projectrrE…�rsE}rtE(h‚jlEh‘jjEubaubjB)�ruE}rvE(h‚Uh‘h—hœjeDh�jEhƒ}rwE(h…]hŽ]h‡]h†]h�]uh¤Nh¥hh¦]rxEjH)�ryE}rzE(h‚Uhƒ}r{E(h†]h‡]h…]hŽ]h�]UcolsKuh‘juEh¦]r|E(jM)�r}E}r~E(h‚Uhƒ}rE(h†]h‡]h…]hŽ]h�]UcolwidthK|uh‘jyEh¦]h�jQubjM)�r€E}r�E(h‚Uhƒ}r‚E(h†]h‡]h…]hŽ]h�]UcolwidthKTuh‘jyEh¦]h�jQubjX)�rƒE}r„E(h‚Uhƒ}r…E(h…]hŽ]h‡]h†]h�]uh‘jyEh¦]r†Ej])�r‡E}rˆE(h‚Uhƒ}r‰E(h…]hŽ]h‡]h†]h�]uh‘jƒEh¦]rŠE(jb)�r‹E}rŒE(h‚Uhƒ}r�E(h…]hŽ]h‡]h†]h�]uh‘j‡Eh¦]rŽEhÜ)�r�E}r�E(h‚XLinksr‘Eh‘j‹EhœjeDh�hàhƒ}r’E(h…]hŽ]h‡]h†]h�]uh¤K/h¦]r“Eh¯XLinksr”E…�r•E}r–E(h‚j‘Eh‘j�Eubaubah�joubjb)�r—E}r˜E(h‚Uhƒ}r™E(h…]hŽ]h‡]h†]h�]uh‘j‡Eh¦]ršEhÜ)�r›E}rœE(h‚X Descriptionr�Eh‘j—EhœjeDh�hàhƒ}ržE(h…]hŽ]h‡]h†]h�]uh¤K/h¦]rŸEh¯X Descriptionr E…�r¡E}r¢E(h‚j�Eh‘j›Eubaubah�joubeh�jˆubah�j‰ubjŠ)�r£E}r¤E(h‚Uhƒ}r¥E(h…]hŽ]h‡]h†]h�]uh‘jyEh¦]r¦E(j])�r§E}r¨E(h‚Uhƒ}r©E(h…]hŽ]h‡]h†]h�]uh‘j£Eh¦]rªE(jb)�r«E}r¬E(h‚Uhƒ}r­E(h…]hŽ]h‡]h†]h�]uh‘j§Eh¦]r®EhÜ)�r¯E}r°E(h‚XI`Linux IPC on AM57xx `__r±Eh‘j«EhœjeDh�hàhƒ}r²E(h…]hŽ]h‡]h†]h�]uh¤K1h¦]r³Ej))�r´E}rµE(h‚j±Ehƒ}r¶E(UnameXLinux IPC on AM57xxj-X/Foundational_Components_IPC.html#ipc-for-am57xxh†]h‡]h…]hŽ]h�]uh‘j¯Eh¦]r·Eh¯XLinux IPC on AM57xxr¸E…�r¹E}rºE(h‚Uh‘j´Eubah�j2ubaubah�joubjb)�r»E}r¼E(h‚Uhƒ}r½E(h…]hŽ]h‡]h†]h�]uh‘j§Eh¦]r¾EhÜ)�r¿E}rÀE(h‚X6General info on IPC under Linux environment for AM57xxrÁEh‘j»EhœjeDh�hàhƒ}rÂE(h…]hŽ]h‡]h†]h�]uh¤K1h¦]rÃEh¯X6General info on IPC under Linux environment for AM57xxrÄE…�rÅE}rÆE(h‚jÁEh‘j¿Eubaubah�joubeh�jˆubj])�rÇE}rÈE(h‚Uhƒ}rÉE(h…]hŽ]h‡]h†]h�]uh‘j£Eh¦]rÊE(jb)�rËE}rÌE(h‚Uhƒ}rÍE(h…]hŽ]h‡]h†]h�]uh‘jÇEh¦]rÎEhÜ)�rÏE}rÐE(h‚XI`Linux IPC on AM65xx `__rÑEh‘jËEhœjeDh�hàhƒ}rÒE(h…]hŽ]h‡]h†]h�]uh¤K3h¦]rÓEj))�rÔE}rÕE(h‚jÑEhƒ}rÖE(UnameXLinux IPC on AM65xxj-X/Foundational_Components_IPC.html#ipc-for-am65xxh†]h‡]h…]hŽ]h�]uh‘jÏEh¦]r×Eh¯XLinux IPC on AM65xxrØE…�rÙE}rÚE(h‚Uh‘jÔEubah�j2ubaubah�joubjb)�rÛE}rÜE(h‚Uhƒ}rÝE(h…]hŽ]h‡]h†]h�]uh‘jÇEh¦]rÞEhÜ)�rßE}ràE(h‚X6General info on IPC under Linux environment for AM65xxráEh‘jÛEhœjeDh�hàhƒ}râE(h…]hŽ]h‡]h†]h�]uh¤K3h¦]rãEh¯X6General info on IPC under Linux environment for AM65xxräE…�råE}ræE(h‚jáEh‘jßEubaubah�joubeh�jˆubj])�rçE}rèE(h‚Uhƒ}réE(h…]hŽ]h‡]h†]h�]uh‘j£Eh¦]rêE(jb)�rëE}rìE(h‚Uhƒ}ríE(h…]hŽ]h‡]h†]h�]uh‘jçEh¦]rîEhÜ)�rïE}rðE(h‚XC`Linux IPC on K2x `__rñEh‘jëEhœjeDh�hàhƒ}ròE(h…]hŽ]h‡]h†]h�]uh¤K5h¦]róEj))�rôE}rõE(h‚jñEhƒ}röE(UnameXLinux IPC on K2xj-X,Foundational_Components_IPC.html#ipc-for-k2xh†]h‡]h…]hŽ]h�]uh‘jïEh¦]r÷Eh¯XLinux IPC on K2xrøE…�rùE}rúE(h‚Uh‘jôEubah�j2ubaubah�joubjb)�rûE}rüE(h‚Uhƒ}rýE(h…]hŽ]h‡]h†]h�]uh‘jçEh¦]rþEhÜ)�rÿE}rF(h‚X3General info on IPC under Linux environment for K2xrFh‘jûEhœjeDh�hàhƒ}rF(h…]hŽ]h‡]h†]h�]uh¤K5h¦]rFh¯X3General info on IPC under Linux environment for K2xrF…�rF}rF(h‚jFh‘jÿEubaubah�joubeh�jˆubj])�rF}rF(h‚Uhƒ}r F(h…]hŽ]h‡]h†]h�]uh‘j£Eh¦]r F(jb)�r F}r F(h‚Uhƒ}r F(h…]hŽ]h‡]h†]h�]uh‘jFh¦]rFhÜ)�rF}rF(h‚X¡`Running IPC example on DRA7xx/AM572x `__rFh‘j FhœjeDh�hàhƒ}rF(h…]hŽ]h‡]h†]h�]uh¤K7h¦]rFj))�rF}rF(h‚jFhƒ}rF(UnameX$Running IPC example on DRA7xx/AM572xj-Xuhttp://software-dl.ti.com/processor-sdk-rtos/esd/docs/latest/rtos/index_how_to_guides.html#run-ipc-examples-on-am572xh†]h‡]h…]hŽ]h�]uh‘jFh¦]rFh¯X$Running IPC example on DRA7xx/AM572xrF…�rF}rF(h‚Uh‘jFubah�j2ubaubah�joubjb)�rF}rF(h‚Uhƒ}rF(h…]hŽ]h‡]h†]h�]uh‘jFh¦]rFhÜ)�rF}r F(h‚X2Info on running RTOS IPC examples on DRA7xx/AM572xr!Fh‘jFhœjeDh�hàhƒ}r"F(h…]hŽ]h‡]h†]h�]uh¤K7h¦]r#Fh¯X2Info on running RTOS IPC examples on DRA7xx/AM572xr$F…�r%F}r&F(h‚j!Fh‘jFubaubah�joubeh�jˆubj])�r'F}r(F(h‚Uhƒ}r)F(h…]hŽ]h‡]h†]h�]uh‘j£Eh¦]r*F(jb)�r+F}r,F(h‚Uhƒ}r-F(h…]hŽ]h‡]h†]h�]uh‘j'Fh¦]r.FhÜ)�r/F}r0F(h‚Xn`Training video on how to Run IPC example on AM572x `__r1Fh‘j+FhœjeDh�hàhƒ}r2F(h…]hŽ]h‡]h†]h�]uh¤K:h¦]r3Fj))�r4F}r5F(h‚j1Fhƒ}r6F(UnameX2Training video on how to Run IPC example on AM572xj-X5https://training.ti.com/am572x-build-run-ipc-examplesh†]h‡]h…]hŽ]h�]uh‘j/Fh¦]r7Fh¯X2Training video on how to Run IPC example on AM572xr8F…�r9F}r:F(h‚Uh‘j4Fubah�j2ubaubah�joubjb)�r;F}rFhÜ)�r?F}r@F(h‚XPStep-by-step Video on running the IPC examples under Linux environment on AM572xrAFh‘j;FhœjeDh�hàhƒ}rBF(h…]hŽ]h‡]h†]h�]uh¤K:h¦]rCFh¯XPStep-by-step Video on running the IPC examples under Linux environment on AM572xrDF…�rEF}rFF(h‚jAFh‘j?Fubaubah�joubeh�jˆubj])�rGF}rHF(h‚Uhƒ}rIF(h…]hŽ]h‡]h†]h�]uh‘j£Eh¦]rJF(jb)�rKF}rLF(h‚Uhƒ}rMF(h…]hŽ]h‡]h†]h�]uh‘jGFh¦]rNFhÜ)�rOF}rPF(h‚XZ`AM57x Customizing Multicore Application `__rQFh‘jKFhœjeDh�hàhƒ}rRF(h…]hŽ]h‡]h†]h�]uh¤K`__rqFh‘jkFhœjeDh�hàhƒ}rrF(h…]hŽ]h‡]h†]h�]uh¤K>h¦]rsFj))�rtF}ruF(h‚jqFhƒ}rvF(UnameX-Modifying Memory Usage For IPUMM using DRA7xxj-X.http://www.ti.com/lit/an/sprac08a/sprac08a.pdfh†]h‡]h…]hŽ]h�]uh‘joFh¦]rwFh¯X-Modifying Memory Usage For IPUMM using DRA7xxrxF…�ryF}rzF(h‚Uh‘jtFubah�j2ubaubah�joubjb)�r{F}r|F(h‚Uhƒ}r}F(h…]hŽ]h‡]h†]h�]uh‘jgFh¦]r~FhÜ)�rF}r€F(h‚X0Info on modifying memory usage of IPU for DRA7xxr�Fh‘j{FhœjeDh�hàhƒ}r‚F(h…]hŽ]h‡]h†]h�]uh¤K>h¦]rƒFh¯X0Info on modifying memory usage of IPU for DRA7xxr„F…�r…F}r†F(h‚j�Fh‘jFubaubah�joubeh�jˆubj])�r‡F}rˆF(h‚Uhƒ}r‰F(h…]hŽ]h‡]h†]h�]uh‘j£Eh¦]rŠF(jb)�r‹F}rŒF(h‚Uhƒ}r�F(h…]hŽ]h‡]h†]h�]uh‘j‡Fh¦]rŽFhÜ)�r�F}r�F(h‚X:`IPC Tests `__r‘Fh‘j‹FhœjeDh�hàhƒ}r’F(h…]hŽ]h‡]h†]h�]uh¤K@h¦]r“Fj))�r”F}r•F(h‚j‘Fhƒ}r–F(UnameX IPC Testsj-X*Foundational_Components_IPC.html#ipc-testsh†]h‡]h…]hŽ]h�]uh‘j�Fh¦]r—Fh¯X IPC Testsr˜F…�r™F}ršF(h‚Uh‘j”Fubah�j2ubaubah�joubjb)�r›F}rœF(h‚Uhƒ}r�F(h…]hŽ]h‡]h†]h�]uh‘j‡Fh¦]ržFhÜ)�rŸF}r F(h‚X IPC Testsr¡Fh‘j›FhœjeDh�hàhƒ}r¢F(h…]hŽ]h‡]h†]h�]uh¤K@h¦]r£Fh¯X IPC Testsr¤F…�r¥F}r¦F(h‚j¡Fh‘jŸFubaubah�joubeh�jˆubj])�r§F}r¨F(h‚Uhƒ}r©F(h…]hŽ]h‡]h†]h�]uh‘j£Eh¦]rªF(jb)�r«F}r¬F(h‚Uhƒ}r­F(h…]hŽ]h‡]h†]h�]uh‘j§Fh¦]r®FhÜ)�r¯F}r°F(h‚X<`IPC Daemon `__r±Fh‘j«FhœjeDh�hàhƒ}r²F(h…]hŽ]h‡]h†]h�]uh¤KBh¦]r³Fj))�r´F}rµF(h‚j±Fhƒ}r¶F(UnameX IPC Daemonj-X+Foundational_Components_IPC.html#ipc-daemonh†]h‡]h…]hŽ]h�]uh‘j¯Fh¦]r·Fh¯X IPC Daemonr¸F…�r¹F}rºF(h‚Uh‘j´Fubah�j2ubaubah�joubjb)�r»F}r¼F(h‚Uhƒ}r½F(h…]hŽ]h‡]h†]h�]uh‘j§Fh¦]r¾FhÜ)�r¿F}rÀF(h‚XOverview of the IPC DaemonrÁFh‘j»FhœjeDh�hàhƒ}rÂF(h…]hŽ]h‡]h†]h�]uh¤KBh¦]rÃFh¯XOverview of the IPC DaemonrÄF…�rÅF}rÆF(h‚jÁFh‘j¿Fubaubah�joubeh�jˆubj])�rÇF}rÈF(h‚Uhƒ}rÉF(h…]hŽ]h‡]h†]h�]uh‘j£Eh¦]rÊF(jb)�rËF}rÌF(h‚Uhƒ}rÍF(h…]hŽ]h‡]h†]h�]uh‘jÇFh¦]rÎFhÜ)�rÏF}rÐF(h‚Xx`Rpmsg Video `__rÑFh‘jËFhœjeDh�hàhƒ}rÒF(h…]hŽ]h‡]h†]h�]uh¤KDh¦]rÓFj))�rÔF}rÕF(h‚jÑFhƒ}rÖF(UnameX Rpmsg Videoj-Xfhttp://free-electrons.com/pub/video/2011/elce/elce-2011-ben-cohen-remote-processor-messaging-450p.webmh†]h‡]h…]hŽ]h�]uh‘jÏFh¦]r×Fh¯X Rpmsg VideorØF…�rÙF}rÚF(h‚Uh‘jÔFubah�j2ubaubah�joubjb)�rÛF}rÜF(h‚Uhƒ}rÝF(h…]hŽ]h‡]h†]h�]uh‘jÇFh¦]rÞFhÜ)�rßF}ràF(h‚XCVideo of the Embedded linux Conference Europe Presentation on RpmsgráFh‘jÛFhœjeDh�hàhƒ}râF(h…]hŽ]h‡]h†]h�]uh¤KDh¦]rãFh¯XCVideo of the Embedded linux Conference Europe Presentation on RpmsgräF…�råF}ræF(h‚jáFh‘jßFubaubah�joubeh�jˆubeh�jWubeh�jXubaubeubhœjeDh�hÓhƒ}rçF(h†]rèFh‰ah‡]h…]hŽ]h�]réFjVDauh¤Nh¥hh¦]rêFh¯XOverviewrëF…�rìF}ríF(h‚h•h‘h“ubaubh¦]rîFhÜ)�rïF}rðF(h‚X+Duplicate implicit target name: "overview".hƒ}rñF(h…]hŽ]h‡]h†]h�]uh‘h€h¦]ròFh¯X+Duplicate implicit target name: "overview".róF…�rôF}rõF(h‚Uh‘jïFubah�hàubah�Usystem_messageröFubh)�r÷F}røF(h‚Uh‘h³hœhÆh�jöFhƒ}rùF(h…]UlevelKh†]h‡]UsourcehŒhŽ]h�]UlineKUtypeh�uh¤KÛh¥hh¦]rúFhÜ)�rûF}rüF(h‚X:Enumerated list start value not ordinal-1: "2" (ordinal 2)hƒ}rýF(h…]hŽ]h‡]h†]h�]uh‘j÷Fh¦]rþFh¯X:Enumerated list start value not ordinal-1: "2" (ordinal 2)rÿF…�rG}rG(h‚Uh‘jûFubah�hàubaubh)�rG}rG(h‚Uh‘h³hœhÆh�jöFhƒ}rG(h…]UlevelKh†]h‡]UsourcehŒhŽ]h�]UlineKUtypeh�uh¤Mh¥hh¦]rGhÜ)�rG}rG(h‚X:Enumerated list start value not ordinal-1: "4" (ordinal 4)hƒ}rG(h…]hŽ]h‡]h†]h�]uh‘jGh¦]r Gh¯X:Enumerated list start value not ordinal-1: "4" (ordinal 4)r G…�r G}r G(h‚Uh‘jGubah�hàubaubh)�r G}rG(h‚Uh‘jÒ#hœjå#h�jöFhƒ}rG(h…]UlevelKh†]h‡]UsourcehŒhŽ]h�]UlineKUtypeh�uh¤K�h¥hh¦]rGhÜ)�rG}rG(h‚X:Enumerated list start value not ordinal-1: "4" (ordinal 4)hƒ}rG(h…]hŽ]h‡]h†]h�]uh‘j Gh¦]rGh¯X:Enumerated list start value not ordinal-1: "4" (ordinal 4)rG…�rG}rG(h‚Uh‘jGubah�hàubaubh)�rG}rG(h‚Uhƒ}rG(h…]UlevelKh†]h‡]Usourcejå#hŽ]h�]UlineK�UtypeUERRORrGuh‘jÓ$h¦]rG(hÜ)�rG}rG(h‚XMalformed table.hƒ}rG(h…]hŽ]h‡]h†]h�]uh‘jGh¦]r Gh¯XMalformed table.r!G…�r"G}r#G(h‚Uh‘jGubah�hàubj¡)�r$G}r%G(h‚Xr+--------------------------+--------------------------+------------------------------------------+ | Core | Load Address | Defined in | +==========================+==========================+==========================================+ | IPU1 | ``IPU1_LOAD_ADDR`` | ``arch/arm/mach-omap2/boot-common.c | | | | and drivers/remoteproc/ipu_rproc.c`` | +--------------------------+--------------------------+------------------------------------------+ | IPU2 | ``IPU2_LOAD_ADDR`` | ``arch/arm/mach-omap2/boot-common.c | | | | and drivers/remoteproc/ipu_rproc.c`` | +--------------------------+--------------------------+------------------------------------------+hƒ}r&G(hÊhËh†]h‡]h…]hŽ]h�]uh‘jGh¦]r'Gh¯Xr+--------------------------+--------------------------+------------------------------------------+ | Core | Load Address | Defined in | +==========================+==========================+==========================================+ | IPU1 | ``IPU1_LOAD_ADDR`` | ``arch/arm/mach-omap2/boot-common.c | | | | and drivers/remoteproc/ipu_rproc.c`` | +--------------------------+--------------------------+------------------------------------------+ | IPU2 | ``IPU2_LOAD_ADDR`` | ``arch/arm/mach-omap2/boot-common.c | | | | and drivers/remoteproc/ipu_rproc.c`` | +--------------------------+--------------------------+------------------------------------------+r(G…�r)G}r*G(h‚Uh‘j$Gubah�j¤ubeh�jöFubh)�r+G}r,G(h‚Uh‘jÒ#hœjå#h�jöFhƒ}r-G(h…]UlevelKh†]h‡]Usourcejå#hŽ]h�]UlineK©UtypejGuh¤Nh¥hh¦]r.G(hÜ)�r/G}r0G(h‚X2Error in "rubric" directive: no content permitted.hƒ}r1G(h…]hŽ]h‡]h†]h�]uh‘j+Gh¦]r2Gh¯X2Error in "rubric" directive: no content permitted.r3G…�r4G}r5G(h‚Uh‘j/Gubah�hàubj¡)�r6G}r7G(h‚X.. rubric:: Enabling Early Boot :name: enabling-early-boot Early boot is enabled by default on all DRA7xx and AM57xx EVM boards in the dra7xx_evm_defconfig and am57xx_evm_defconfig. `Typical options needed for early-booting IPU remoteprocs are: hƒ}r8G(hÊhËh†]h‡]h…]hŽ]h�]uh‘j+Gh¦]r9Gh¯X.. rubric:: Enabling Early Boot :name: enabling-early-boot Early boot is enabled by default on all DRA7xx and AM57xx EVM boards in the dra7xx_evm_defconfig and am57xx_evm_defconfig. `Typical options needed for early-booting IPU remoteprocs are: r:G…�r;G}rG(h‚Uh‘j@.hœjC.h�jöFhƒ}r?G(h…]UlevelKh†]h‡]r@GjI.aUsourcejC.hŽ]h�]UlineKUtypeh�uh¤Kh¥hh¦]rAGhÜ)�rBG}rCG(h‚X/Duplicate implicit target name: "introduction".hƒ}rDG(h…]hŽ]h‡]h†]h�]uh‘j=Gh¦]rEGh¯X/Duplicate implicit target name: "introduction".rFG…�rGG}rHG(h‚Uh‘jBGubah�hàubaubh)�rIG}rJG(h‚Uh‘j15hœjC.h�jöFhƒ}rKG(h…]UlevelKh†]h‡]UsourcejC.hŽ]h�]UlineM7UtypeUWARNINGrLGuh¤M6h¥hh¦]rMGhÜ)�rNG}rOG(h‚X#Literal block expected; none found.hƒ}rPG(h…]hŽ]h‡]h†]h�]uh‘jIGh¦]rQGh¯X#Literal block expected; none found.rRG…�rSG}rTG(h‚Uh‘jNGubah�hàubaubh)�rUG}rVG(h‚Uhƒ}rWG(h…]UlevelKh†]h‡]rXGjÁ<aUsourcehŒhŽ]h�]UlineKUtypeh�uh‘j¼<h¦]rYGhÜ)�rZG}r[G(h‚X&Duplicate implicit target name: "ipc".hƒ}r\G(h…]hŽ]h‡]h†]h�]uh‘jUGh¦]r]Gh¯X&Duplicate implicit target name: "ipc".r^G…�r_G}r`G(h‚Uh‘jZGubah�hàubah�jöFubh)�raG}rbG(h‚Uh‘jŽ9hœj 9h�jöFhƒ}rcG(h…]UlevelKh†]h‡]Usourcej 9hŽ]h�]UlineKåUtypejLGuh¤Käh¥hh¦]rdGhÜ)�reG}rfG(h‚X%Line block ends without a blank line.hƒ}rgG(h…]hŽ]h‡]h†]h�]uh‘jaGh¦]rhGh¯X%Line block ends without a blank line.riG…�rjG}rkG(h‚Uh‘jeGubah�hàubaubh)�rlG}rmG(h‚Uh‘j?hœj"?h�jöFhƒ}rnG(h…]UlevelKh†]h‡]Usourcej"?hŽ]h�]UlineKUtypeUSEVEREroGuh¤Kh¥hh¦]rpG(hÜ)�rqG}rrG(h‚XTitle level inconsistent:hƒ}rsG(h…]hŽ]h‡]h†]h�]uh‘jlGh¦]rtGh¯XTitle level inconsistent:ruG…�rvG}rwG(h‚Uh‘jqGubah�hàubj¡)�rxG}ryG(h‚XOverview -----------hƒ}rzG(hÊhËh†]h‡]h…]hŽ]h�]uh‘jlGh¦]r{Gh¯XOverview -----------r|G…�r}G}r~G(h‚Uh‘jxGubah�j¤ubeubh)�rG}r€G(h‚Uh‘j?hœj"?h�jöFhƒ}r�G(h…]UlevelKh†]h‡]Usourcej"?hŽ]h�]UlineKUtypejoGuh¤Kh¥hh¦]r‚G(hÜ)�rƒG}r„G(h‚XTitle level inconsistent:hƒ}r…G(h…]hŽ]h‡]h†]h�]uh‘jGh¦]r†Gh¯XTitle level inconsistent:r‡G…�rˆG}r‰G(h‚Uh‘jƒGubah�hàubj¡)�rŠG}r‹G(h‚X%Linux Unit tests ^^^^^^^^^^^^^^^^^^^^hƒ}rŒG(hÊhËh†]h‡]h…]hŽ]h�]uh‘jGh¦]r�Gh¯X%Linux Unit tests ^^^^^^^^^^^^^^^^^^^^rŽG…�r�G}r�G(h‚Uh‘jŠGubah�j¤ubeubh)�r‘G}r’G(h‚Uh‘j?hœj"?h�jöFhƒ}r“G(h…]UlevelKh†]h‡]Usourcej"?hŽ]h�]UlineKUtypejoGuh¤Kh¥hh¦]r”G(hÜ)�r•G}r–G(h‚XTitle level inconsistent:hƒ}r—G(h…]hŽ]h‡]h†]h�]uh‘j‘Gh¦]r˜Gh¯XTitle level inconsistent:r™G…�ršG}r›G(h‚Uh‘j•Gubah�hàubj¡)�rœG}r�G(h‚X:Single thread MessageQ tests """""""""""""""""""""""""""""hƒ}ržG(hÊhËh†]h‡]h…]hŽ]h�]uh‘j‘Gh¦]rŸGh¯X:Single thread MessageQ tests """""""""""""""""""""""""""""r G…�r¡G}r¢G(h‚Uh‘jœGubah�j¤ubeubh)�r£G}r¤G(h‚Uh‘j?hœj"?h�jöFhƒ}r¥G(h…]UlevelKh†]h‡]Usourcej"?hŽ]h�]UlineKDUtypejoGuh¤KEh¥hh¦]r¦G(hÜ)�r§G}r¨G(h‚XTitle level inconsistent:hƒ}r©G(h…]hŽ]h‡]h†]h�]uh‘j£Gh¦]rªGh¯XTitle level inconsistent:r«G…�r¬G}r­G(h‚Uh‘j§Gubah�hàubj¡)�r®G}r¯G(h‚X:Running single Message tests '''''''''''''''''''''''''''''hƒ}r°G(hÊhËh†]h‡]h…]hŽ]h�]uh‘j£Gh¦]r±Gh¯X:Running single Message tests '''''''''''''''''''''''''''''r²G…�r³G}r´G(h‚Uh‘j®Gubah�j¤ubeubh)�rµG}r¶G(h‚Uh‘j?hœj"?h�jöFhƒ}r·G(h…]UlevelKh†]h‡]Usourcej"?hŽ]h�]UlineKyUtypejoGuh¤Kzh¥hh¦]r¸G(hÜ)�r¹G}rºG(h‚XTitle level inconsistent:hƒ}r»G(h…]hŽ]h‡]h†]h�]uh‘jµGh¦]r¼Gh¯XTitle level inconsistent:r½G…�r¾G}r¿G(h‚Uh‘j¹Gubah�hàubj¡)�rÀG}rÁG(h‚Xping_rpmsg """""""""""""hƒ}rÂG(hÊhËh†]h‡]h…]hŽ]h�]uh‘jµGh¦]rÃGh¯Xping_rpmsg """""""""""""rÄG…�rÅG}rÆG(h‚Uh‘jÀGubah�j¤ubeubh)�rÇG}rÈG(h‚Uh‘j?hœj"?h�jöFhƒ}rÉG(h…]UlevelKh†]h‡]Usourcej"?hŽ]h�]UlineK‡UtypejoGuh¤Kˆh¥hh¦]rÊG(hÜ)�rËG}rÌG(h‚XTitle level inconsistent:hƒ}rÍG(h…]hŽ]h‡]h†]h�]uh‘jÇGh¦]rÎGh¯XTitle level inconsistent:rÏG…�rÐG}rÑG(h‚Uh‘jËGubah�hàubj¡)�rÒG}rÓG(h‚X!Run ping_rpmsg ''''''''''''''''''hƒ}rÔG(hÊhËh†]h‡]h…]hŽ]h�]uh‘jÇGh¦]rÕGh¯X!Run ping_rpmsg ''''''''''''''''''rÖG…�r×G}rØG(h‚Uh‘jÒGubah�j¤ubeubh)�rÙG}rÚG(h‚Uh‘j?hœj"?h�jöFhƒ}rÛG(h…]UlevelKh†]h‡]Usourcej"?hŽ]h�]UlineK›UtypejoGuh¤Kœh¥hh¦]rÜG(hÜ)�rÝG}rÞG(h‚XTitle level inconsistent:hƒ}rßG(h…]hŽ]h‡]h†]h�]uh‘jÙGh¦]ràGh¯XTitle level inconsistent:ráG…�râG}rãG(h‚Uh‘jÝGubah�hàubj¡)�räG}råG(h‚XNameServerApp """"""""""""""""hƒ}ræG(hÊhËh†]h‡]h…]hŽ]h�]uh‘jÙGh¦]rçGh¯XNameServerApp """"""""""""""""rèG…�réG}rêG(h‚Uh‘jäGubah�j¤ubeubh)�rëG}rìG(h‚Uh‘j?hœj"?h�jöFhƒ}ríG(h…]UlevelKh†]h‡]Usourcej"?hŽ]h�]UlineK¨UtypejoGuh¤K©h¥hh¦]rîG(hÜ)�rïG}rðG(h‚XTitle level inconsistent:hƒ}rñG(h…]hŽ]h‡]h†]h�]uh‘jëGh¦]ròGh¯XTitle level inconsistent:róG…�rôG}rõG(h‚Uh‘jïGubah�hàubj¡)�röG}r÷G(h‚X%Run NameServerApp '''''''''''''''''''hƒ}røG(hÊhËh†]h‡]h…]hŽ]h�]uh‘jëGh¦]rùGh¯X%Run NameServerApp '''''''''''''''''''rúG…�rûG}rüG(h‚Uh‘jöGubah�j¤ubeubh)�rýG}rþG(h‚Uh‘j?hœj"?h�jöFhƒ}rÿG(h…]UlevelKh†]h‡]Usourcej"?hŽ]h�]UlineK³UtypejoGuh¤K´h¥hh¦]rH(hÜ)�rH}rH(h‚XTitle level inconsistent:hƒ}rH(h…]hŽ]h‡]h†]h�]uh‘jýGh¦]rHh¯XTitle level inconsistent:rH…�rH}rH(h‚Uh‘jHubah�hàubj¡)�rH}r H(h‚XMessageQMulti """"""""""""""""hƒ}r H(hÊhËh†]h‡]h…]hŽ]h�]uh‘jýGh¦]r Hh¯XMessageQMulti """"""""""""""""r H…�r H}rH(h‚Uh‘jHubah�j¤ubeubh)�rH}rH(h‚Uh‘j?hœj"?h�jöFhƒ}rH(h…]UlevelKh†]h‡]Usourcej"?hŽ]h�]UlineKÁUtypejoGuh¤KÂh¥hh¦]rH(hÜ)�rH}rH(h‚XTitle level inconsistent:hƒ}rH(h…]hŽ]h‡]h†]h�]uh‘jHh¦]rHh¯XTitle level inconsistent:rH…�rH}rH(h‚Uh‘jHubah�hàubj¡)�rH}rH(h‚X,Running MessageQMulti ''''''''''''''''''''''hƒ}rH(hÊhËh†]h‡]h…]hŽ]h�]uh‘jHh¦]rHh¯X,Running MessageQMulti ''''''''''''''''''''''rH…�rH}r H(h‚Uh‘jHubah�j¤ubeubh)�r!H}r"H(h‚Uh‘j?hœj"?h�jöFhƒ}r#H(h…]UlevelKh†]h‡]Usourcej"?hŽ]h�]UlineKÏUtypejoGuh¤KÐh¥hh¦]r$H(hÜ)�r%H}r&H(h‚XTitle level inconsistent:hƒ}r'H(h…]hŽ]h‡]h†]h�]uh‘j!Hh¦]r(Hh¯XTitle level inconsistent:r)H…�r*H}r+H(h‚Uh‘j%Hubah�hàubj¡)�r,H}r-H(h‚X&MessageQMultiMulti """""""""""""""""""hƒ}r.H(hÊhËh†]h‡]h…]hŽ]h�]uh‘j!Hh¦]r/Hh¯X&MessageQMultiMulti """""""""""""""""""r0H…�r1H}r2H(h‚Uh‘j,Hubah�j¤ubeubh)�r3H}r4H(h‚Uh‘j?hœj"?h�jöFhƒ}r5H(h…]UlevelKh†]h‡]Usourcej"?hŽ]h�]UlineKàUtypejoGuh¤Káh¥hh¦]r6H(hÜ)�r7H}r8H(h‚XTitle level inconsistent:hƒ}r9H(h…]hŽ]h‡]h†]h�]uh‘j3Hh¦]r:Hh¯XTitle level inconsistent:r;H…�rH}r?H(h‚X7Running MessageQMultiMulti ''''''''''''''''''''''''''''hƒ}r@H(hÊhËh†]h‡]h…]hŽ]h�]uh‘j3Hh¦]rAHh¯X7Running MessageQMultiMulti ''''''''''''''''''''''''''''rBH…�rCH}rDH(h‚Uh‘j>Hubah�j¤ubeubh)�rEH}rFH(h‚Uh‘j?hœj"?h�jöFhƒ}rGH(h…]UlevelKh†]h‡]Usourcej"?hŽ]h�]UlineKîUtypejoGuh¤Kïh¥hh¦]rHH(hÜ)�rIH}rJH(h‚XTitle level inconsistent:hƒ}rKH(h…]hŽ]h‡]h†]h�]uh‘jEHh¦]rLHh¯XTitle level inconsistent:rMH…�rNH}rOH(h‚Uh‘jIHubah�hàubj¡)�rPH}rQH(h‚X fault """""""hƒ}rRH(hÊhËh†]h‡]h…]hŽ]h�]uh‘jEHh¦]rSHh¯X fault """""""rTH…�rUH}rVH(h‚Uh‘jPHubah�j¤ubeubh)�rWH}rXH(h‚Uh‘j?hœj"?h�jöFhƒ}rYH(h…]UlevelKh†]h‡]Usourcej"?hŽ]h�]UlineKþUtypejoGuh¤Kÿh¥hh¦]rZH(hÜ)�r[H}r\H(h‚XTitle level inconsistent:hƒ}r]H(h…]hŽ]h‡]h†]h�]uh‘jWHh¦]r^Hh¯XTitle level inconsistent:r_H…�r`H}raH(h‚Uh‘j[Hubah�hàubj¡)�rbH}rcH(h‚XRunning fault ''''''''''''''hƒ}rdH(hÊhËh†]h‡]h…]hŽ]h�]uh‘jWHh¦]reHh¯XRunning fault ''''''''''''''rfH…�rgH}rhH(h‚Uh‘jbHubah�j¤ubeubh)�riH}rjH(h‚Uh‘j?hœj"?h�jöFhƒ}rkH(h…]UlevelKh†]h‡]Usourcej"?hŽ]h�]UlineM UtypejoGuh¤M h¥hh¦]rlH(hÜ)�rmH}rnH(h‚XTitle level inconsistent:hƒ}roH(h…]hŽ]h‡]h†]h�]uh‘jiHh¦]rpHh¯XTitle level inconsistent:rqH…�rrH}rsH(h‚Uh‘jmHubah�hàubj¡)�rtH}ruH(h‚X#Qnx Unit tests ^^^^^^^^^^^^^^^^^^^^hƒ}rvH(hÊhËh†]h‡]h…]hŽ]h�]uh‘jiHh¦]rwHh¯X#Qnx Unit tests ^^^^^^^^^^^^^^^^^^^^rxH…�ryH}rzH(h‚Uh‘jtHubah�j¤ubeubh)�r{H}r|H(h‚Uh‘j?hœj"?h�jöFhƒ}r}H(h…]UlevelKh†]h‡]Usourcej"?hŽ]h�]UlineMUtypejoGuh¤Mh¥hh¦]r~H(hÜ)�rH}r€H(h‚XTitle level inconsistent:hƒ}r�H(h…]hŽ]h‡]h†]h�]uh‘j{Hh¦]r‚Hh¯XTitle level inconsistent:rƒH…�r„H}r…H(h‚Uh‘jHubah�hàubj¡)�r†H}r‡H(h‚X:Single thread MessageQ tests """""""""""""""""""""""""""""hƒ}rˆH(hÊhËh†]h‡]h…]hŽ]h�]uh‘j{Hh¦]r‰Hh¯X:Single thread MessageQ tests """""""""""""""""""""""""""""rŠH…�r‹H}rŒH(h‚Uh‘j†Hubah�j¤ubeubh)�r�H}rŽH(h‚Uh‘j?hœj"?h�jöFhƒ}r�H(h…]UlevelKh†]h‡]Usourcej"?hŽ]h�]UlineM7UtypejoGuh¤M8h¥hh¦]r�H(hÜ)�r‘H}r’H(h‚XTitle level inconsistent:hƒ}r“H(h…]hŽ]h‡]h†]h�]uh‘j�Hh¦]r”Hh¯XTitle level inconsistent:r•H…�r–H}r—H(h‚Uh‘j‘Hubah�hàubj¡)�r˜H}r™H(h‚X:Running single Message tests '''''''''''''''''''''''''''''hƒ}ršH(hÊhËh†]h‡]h…]hŽ]h�]uh‘j�Hh¦]r›Hh¯X:Running single Message tests '''''''''''''''''''''''''''''rœH…�r�H}ržH(h‚Uh‘j˜Hubah�j¤ubeubh)�rŸH}r H(h‚Uh‘j?hœj"?h�jöFhƒ}r¡H(h…]UlevelKh†]h‡]Usourcej"?hŽ]h�]UlineMYUtypejoGuh¤MZh¥hh¦]r¢H(hÜ)�r£H}r¤H(h‚XTitle level inconsistent:hƒ}r¥H(h…]hŽ]h‡]h†]h�]uh‘jŸHh¦]r¦Hh¯XTitle level inconsistent:r§H…�r¨H}r©H(h‚Uh‘j£Hubah�hàubj¡)�rªH}r«H(h‚XNameServerApp """"""""""""""""hƒ}r¬H(hÊhËh†]h‡]h…]hŽ]h�]uh‘jŸHh¦]r­Hh¯XNameServerApp """"""""""""""""r®H…�r¯H}r°H(h‚Uh‘jªHubah�j¤ubeubh)�r±H}r²H(h‚Uh‘j?hœj"?h�jöFhƒ}r³H(h…]UlevelKh†]h‡]Usourcej"?hŽ]h�]UlineMfUtypejoGuh¤Mgh¥hh¦]r´H(hÜ)�rµH}r¶H(h‚XTitle level inconsistent:hƒ}r·H(h…]hŽ]h‡]h†]h�]uh‘j±Hh¦]r¸Hh¯XTitle level inconsistent:r¹H…�rºH}r»H(h‚Uh‘jµHubah�hàubj¡)�r¼H}r½H(h‚X$Run NameServerApp ''''''''''''''''''hƒ}r¾H(hÊhËh†]h‡]h…]hŽ]h�]uh‘j±Hh¦]r¿Hh¯X$Run NameServerApp ''''''''''''''''''rÀH…�rÁH}rÂH(h‚Uh‘j¼Hubah�j¤ubeubh)�rÃH}rÄH(h‚Uh‘j?hœj"?h�jöFhƒ}rÅH(h…]UlevelKh†]h‡]Usourcej"?hŽ]h�]UlineMqUtypejoGuh¤Mrh¥hh¦]rÆH(hÜ)�rÇH}rÈH(h‚XTitle level inconsistent:hƒ}rÉH(h…]hŽ]h‡]h†]h�]uh‘jÃHh¦]rÊHh¯XTitle level inconsistent:rËH…�rÌH}rÍH(h‚Uh‘jÇHubah�hàubj¡)�rÎH}rÏH(h‚XMessageQMulti """"""""""""""""hƒ}rÐH(hÊhËh†]h‡]h…]hŽ]h�]uh‘jÃHh¦]rÑHh¯XMessageQMulti """"""""""""""""rÒH…�rÓH}rÔH(h‚Uh‘jÎHubah�j¤ubeubh)�rÕH}rÖH(h‚Uh‘j?hœj"?h�jöFhƒ}r×H(h…]UlevelKh†]h‡]Usourcej"?hŽ]h�]UlineM~UtypejoGuh¤Mh¥hh¦]rØH(hÜ)�rÙH}rÚH(h‚XTitle level inconsistent:hƒ}rÛH(h…]hŽ]h‡]h†]h�]uh‘jÕHh¦]rÜHh¯XTitle level inconsistent:rÝH…�rÞH}rßH(h‚Uh‘jÙHubah�hàubj¡)�ràH}ráH(h‚X.Running MessageQMulti ''''''''''''''''''''''''hƒ}râH(hÊhËh†]h‡]h…]hŽ]h�]uh‘jÕHh¦]rãHh¯X.Running MessageQMulti ''''''''''''''''''''''''räH…�råH}ræH(h‚Uh‘jàHubah�j¤ubeubh)�rçH}rèH(h‚Uh‘j?hœj"?h�jöFhƒ}réH(h…]UlevelKh†]h‡]Usourcej"?hŽ]h�]UlineM”UtypejoGuh¤M•h¥hh¦]rêH(hÜ)�rëH}rìH(h‚XTitle level inconsistent:hƒ}ríH(h…]hŽ]h‡]h†]h�]uh‘jçHh¦]rîHh¯XTitle level inconsistent:rïH…�rðH}rñH(h‚Uh‘jëHubah�hàubj¡)�ròH}róH(h‚X Fault """""""hƒ}rôH(hÊhËh†]h‡]h…]hŽ]h�]uh‘jçHh¦]rõHh¯X Fault """""""röH…�r÷H}røH(h‚Uh‘jòHubah�j¤ubeubh)�rùH}rúH(h‚Uh‘j?hœj"?h�jöFhƒ}rûH(h…]UlevelKh†]h‡]Usourcej"?hŽ]h�]UlineM¡UtypejoGuh¤M¢h¥hh¦]rüH(hÜ)�rýH}rþH(h‚XTitle level inconsistent:hƒ}rÿH(h…]hŽ]h‡]h†]h�]uh‘jùHh¦]rIh¯XTitle level inconsistent:rI…�rI}rI(h‚Uh‘jýHubah�hàubj¡)�rI}rI(h‚XRunning fault ''''''''''''''''hƒ}rI(hÊhËh†]h‡]h…]hŽ]h�]uh‘jùHh¦]rIh¯XRunning fault ''''''''''''''''rI…�r I}r I(h‚Uh‘jIubah�j¤ubeubh)�r I}r I(h‚Uh‘j?hœj"?h�jöFhƒ}r I(h…]UlevelKh†]h‡]Usourcej"?hŽ]h�]UlineMºUtypejoGuh¤M»h¥hh¦]rI(hÜ)�rI}rI(h‚XTitle level inconsistent:hƒ}rI(h…]hŽ]h‡]h†]h�]uh‘j Ih¦]rIh¯XTitle level inconsistent:rI…�rI}rI(h‚Uh‘jIubah�hàubj¡)�rI}rI(h‚XGateMPApp """"""""""hƒ}rI(hÊhËh†]h‡]h…]hŽ]h�]uh‘j Ih¦]rIh¯XGateMPApp """"""""""rI…�rI}rI(h‚Uh‘jIubah�j¤ubeubh)�rI}rI(h‚Uh‘j?hœj"?h�jöFhƒ}rI(h…]UlevelKh†]h‡]Usourcej"?hŽ]h�]UlineMÇUtypejoGuh¤MÈh¥hh¦]r I(hÜ)�r!I}r"I(h‚XTitle level inconsistent:hƒ}r#I(h…]hŽ]h‡]h†]h�]uh‘jIh¦]r$Ih¯XTitle level inconsistent:r%I…�r&I}r'I(h‚Uh‘j!Iubah�hàubj¡)�r(I}r)I(h‚X%Running GateMPApp '''''''''''''''''''hƒ}r*I(hÊhËh†]h‡]h…]hŽ]h�]uh‘jIh¦]r+Ih¯X%Running GateMPApp '''''''''''''''''''r,I…�r-I}r.I(h‚Uh‘j(Iubah�j¤ubeubh)�r/I}r0I(h‚Uh‘j?hœj"?h�jöFhƒ}r1I(h…]UlevelKh†]h‡]Usourcej"?hŽ]h�]UlineMÓUtypejoGuh¤MÔh¥hh¦]r2I(hÜ)�r3I}r4I(h‚XTitle level inconsistent:hƒ}r5I(h…]hŽ]h‡]h†]h�]uh‘j/Ih¦]r6Ih¯XTitle level inconsistent:r7I…�r8I}r9I(h‚Uh‘j3Iubah�hàubj¡)�r:I}r;I(h‚Xmmrpc_test """""""""""hƒ}rI…�r?I}r@I(h‚Uh‘j:Iubah�j¤ubeubh)�rAI}rBI(h‚Uh‘j?hœj"?h�jöFhƒ}rCI(h…]UlevelKh†]h‡]Usourcej"?hŽ]h�]UlineMàUtypejoGuh¤Máh¥hh¦]rDI(hÜ)�rEI}rFI(h‚XTitle level inconsistent:hƒ}rGI(h…]hŽ]h‡]h†]h�]uh‘jAIh¦]rHIh¯XTitle level inconsistent:rII…�rJI}rKI(h‚Uh‘jEIubah�hàubj¡)�rLI}rMI(h‚X'Running mmrpc_test """"""""""""""""""""hƒ}rNI(hÊhËh†]h‡]h…]hŽ]h�]uh‘jAIh¦]rOIh¯X'Running mmrpc_test """"""""""""""""""""rPI…�rQI}rRI(h‚Uh‘jLIubah�j¤ubeubh)�rSI}rTI(h‚Uh‘jÎChœjàCh�jöFhƒ}rUI(h…]UlevelKh†]h‡]UsourcejàChŽ]h�]UlineKUtypejoGuh¤Kh¥hh¦]rVI(hÜ)�rWI}rXI(h‚XTitle level inconsistent:hƒ}rYI(h…]hŽ]h‡]h†]h�]uh‘jSIh¦]rZIh¯XTitle level inconsistent:r[I…�r\I}r]I(h‚Uh‘jWIubah�hàubj¡)�r^I}r_I(h‚X,IPC Daemon (aka LAD) -----------------------hƒ}r`I(hÊhËh†]h‡]h…]hŽ]h�]uh‘jSIh¦]raIh¯X,IPC Daemon (aka LAD) -----------------------rbI…�rcI}rdI(h‚Uh‘j^Iubah�j¤ubeubh)�reI}rfI(h‚Uh‘jÎChœjàCh�jöFhƒ}rgI(h…]UlevelKh†]h‡]UsourcejàChŽ]h�]UlineKUtypejoGuh¤Kh¥hh¦]rhI(hÜ)�riI}rjI(h‚XTitle level inconsistent:hƒ}rkI(h…]hŽ]h‡]h†]h�]uh‘jeIh¦]rlIh¯XTitle level inconsistent:rmI…�rnI}roI(h‚Uh‘jiIubah�hàubj¡)�rpI}rqI(h‚XApproach ^^^^^^^^^^hƒ}rrI(hÊhËh†]h‡]h…]hŽ]h�]uh‘jeIh¦]rsIh¯XApproach ^^^^^^^^^^rtI…�ruI}rvI(h‚Uh‘jpIubah�j¤ubeubh)�rwI}rxI(h‚Uh‘jÎChœjàCh�jöFhƒ}ryI(h…]UlevelKh†]h‡]UsourcejàChŽ]h�]UlineK'UtypejoGuh¤K(h¥hh¦]rzI(hÜ)�r{I}r|I(h‚XTitle level inconsistent:hƒ}r}I(h…]hŽ]h‡]h†]h�]uh‘jwIh¦]r~Ih¯XTitle level inconsistent:rI…�r€I}r�I(h‚Uh‘j{Iubah�hàubj¡)�r‚I}rƒI(h‚XLimitations ^^^^^^^^^^^^^hƒ}r„I(hÊhËh†]h‡]h…]hŽ]h�]uh‘jwIh¦]r…Ih¯XLimitations ^^^^^^^^^^^^^r†I…�r‡I}rˆI(h‚Uh‘j‚Iubah�j¤ubeubh)�r‰I}rŠI(h‚Uh‘jÎChœjàCh�jöFhƒ}r‹I(h…]UlevelKh†]h‡]UsourcejàChŽ]h�]UlineK*UtypejoGuh¤K+h¥hh¦]rŒI(hÜ)�r�I}rŽI(h‚XTitle level inconsistent:hƒ}r�I(h…]hŽ]h‡]h†]h�]uh‘j‰Ih¦]r�Ih¯XTitle level inconsistent:r‘I…�r’I}r“I(h‚Uh‘j�Iubah�hàubj¡)�r”I}r•I(h‚X7Startup Before Any Clients """"""""""""""""""""""""""""hƒ}r–I(hÊhËh†]h‡]h…]hŽ]h�]uh‘j‰Ih¦]r—Ih¯X7Startup Before Any Clients """"""""""""""""""""""""""""r˜I…�r™I}ršI(h‚Uh‘j”Iubah�j¤ubeubh)�r›I}rœI(h‚Uh‘jÎChœjàCh�jöFhƒ}r�I(h…]UlevelKh†]h‡]UsourcejàChŽ]h�]UlineK0UtypejoGuh¤K1h¥hh¦]ržI(hÜ)�rŸI}r I(h‚XTitle level inconsistent:hƒ}r¡I(h…]hŽ]h‡]h†]h�]uh‘j›Ih¦]r¢Ih¯XTitle level inconsistent:r£I…�r¤I}r¥I(h‚Uh‘jŸIubah�hàubj¡)�r¦I}r§I(h‚XVMaximum Number of Simultaneous Connections """""""""""""""""""""""""""""""""""""""""""hƒ}r¨I(hÊhËh†]h‡]h…]hŽ]h�]uh‘j›Ih¦]r©Ih¯XVMaximum Number of Simultaneous Connections """""""""""""""""""""""""""""""""""""""""""rªI…�r«I}r¬I(h‚Uh‘j¦Iubah�j¤ubeubh)�r­I}r®I(h‚Uh‘jÎChœjàCh�jöFhƒ}r¯I(h…]UlevelKh†]h‡]UsourcejàChŽ]h�]UlineK7UtypejoGuh¤K8h¥hh¦]r°I(hÜ)�r±I}r²I(h‚XTitle level inconsistent:hƒ}r³I(h…]hŽ]h‡]h†]h�]uh‘j­Ih¦]r´Ih¯XTitle level inconsistent:rµI…�r¶I}r·I(h‚Uh‘j±Iubah�hàubj¡)�r¸I}r¹I(h‚XFHard-coded MultiProc configuration """""""""""""""""""""""""""""""""""hƒ}rºI(hÊhËh†]h‡]h…]hŽ]h�]uh‘j­Ih¦]r»Ih¯XFHard-coded MultiProc configuration """""""""""""""""""""""""""""""""""r¼I…�r½I}r¾I(h‚Uh‘j¸Iubah�j¤ubeubeUcurrent_sourcer¿INU decorationrÀINUautofootnote_startrÁIKUnameidsrÂI}rÃI(hjhj¯hjðh j’9h j›;h jK<h j„=h jÅ3hjôhj…4hjÇhj´9hj5.hj5hj¤4hjØ'hj¶3hjoEhj•/hjÝ.hj %hj<hjÀhj-%hj-hjÀ8h j‡Dh!j§h"jO4h#jÿ"h$j.h%j>h&j‡<h'jÌ=h(jã;h)j(h*j h+jÅ'h,jhh-jh.j`h/j h0jVh1j55h2jÍ9h3j@4h4j+h5jø(h6jž(h7j9h8jw%h9j%$h:j:h;jh hjé#h?jÁ<h@h‰hAj hBj‡hCj¾hDjÖ#hEj[6hFjè9hGjô#hHjøAhIj$hJj¸#hKjhLj¤?hMjß)hNj3hOjû'hPjŸ2hQjéhRj%hSji=hTjz:hUj¾(hVjEhWjƒ'hXh·hYj8$hZjÓh[j·h\jh]j‚h^jCh_jX:h`jíhajßhbj?hcj.3hdj!6hej8hfhÖhgj Ehhjåhij€;hjj#hkj0<hlj¼;hmj¥=hnjl<hojµhpjü>hqj_.hrjžhsjÆ)htj»)hujºhvjw(hwj’*hxjÒChyjÅhzjÊ2uh¦]rÄIhšah‚UU transformerrÅINU footnote_refsrÆI}rÇIUrefnamesrÈI}rÉI(Xdisable opencl application]rÊIj)3aX running the bundled ipc examples]rËIj6auUsymbol_footnotesrÌI]rÍIUautofootnote_refsrÎI]rÏIUsymbol_footnote_refsrÐI]rÑIU citationsrÒI]rÓIh¥hU current_linerÔINUtransform_messagesrÕI]rÖIUreporterr×INUid_startrØIKU autofootnotesrÙI]rÚIU citation_refsrÛI}rÜIUindirect_targetsrÝI]rÞIUsettingsrßI(cdocutils.frontend Values ràIoráI}râI(Ufootnote_backlinksrãIKUrecord_dependenciesräINU rfc_base_urlråIUhttps://tools.ietf.org/html/ræIU tracebackrçIˆUpep_referencesrèINUstrip_commentsréINU toc_backlinksrêIjoU language_coderëIUenrìIU datestampríINU report_levelrîIKU _destinationrïINU halt_levelrðIKU strip_classesrñINh¬NUerror_encoding_error_handlerròIUbackslashreplaceróIUdebugrôINUembed_stylesheetrõI‰Uoutput_encoding_error_handlerröIUstrictr÷IU sectnum_xformrøIKUdump_transformsrùINU docinfo_xformrúIKUwarning_streamrûINUpep_file_url_templaterüIUpep-%04drýIUexit_status_levelrþIKUconfigrÿINUstrict_visitorrJNUcloak_email_addressesrJˆUtrim_footnote_reference_spacerJ‰UenvrJNUdump_pseudo_xmlrJNUexpose_internalsrJNUsectsubtitle_xformrJ‰U source_linkrJNUrfc_referencesrJNUoutput_encodingr JUutf-8r JU source_urlr JNUinput_encodingr JU utf-8-sigr JU_disable_configrJNU id_prefixrJUU tab_widthrJKUerror_encodingrJUUTF-8rJU_sourcerJX[/home/gtbldadm/nightlybuilds/processor-sdk-doc/source/linux/Foundational_Components_IPC.rstrJUgettext_compactrJˆU generatorrJNUdump_internalsrJNU smart_quotesrJ‰U pep_base_urlrJU https://www.python.org/dev/peps/rJUsyntax_highlightrJUlongrJUinput_encoding_error_handlerrJj÷IUauto_id_prefixrJUidrJUdoctitle_xformr J‰Ustrip_elements_with_classesr!JNU _config_filesr"J]Ufile_insertion_enabledr#JˆU raw_enabledr$JKU dump_settingsr%JNubUsymbol_footnote_startr&JKUidsr'J}r(J(jÁ<j¼<jÍ9jÈ9j¯jªj•/j‘/jðjëj›;j–;jK<jF<j„=j=jôjïj¤4j 4jÇjÂj´9j¯9jO4jK4jè9jã9jØ'jÐ'j¶3j²3joEjjEj %j%jøAjôAj<j<j?j?jÀj»j-%j(%j-j(j‡Dj‚Dj§j¢jÿ"jú"j.j)j’9jŽ9j‡<j‚<jÖ#jÒ#jã;jÞ;j8j8jj j`j[j jjVjQj.3j�8j@4j<4jjjI.j@.jÅ3jÁ3h‰h“j>j >j+j +jø(jó(jž(j™(j…4j�4j9j4jw%jr%jÌ=jÇ=j%$j $j:jü9jh jc j�*j˜*j·j²jé#já#h£hšj5.j1.jXDh—j jj‡j‚j_.j[.j¾j¹jô#jï#j[6jW6j$jj¸#j³#jj jß)jÚ)jû'jö'jŸ2j›2jéjäj%j j!6j6ji=jd=jz:ju:j¾(j¹(jEj@jƒ'j~'h·h³jÅ'jÁ'j(j#j8$j3$jÓjÏjÒCjÎCjÀ8j¼8jjjj j‚j}jCj>jX:jS:jíjèjÝ.jÙ.jßjÚj jhÖhÐj EjEj5j5jåjàj€;j{;j#jj0<j+<j¼;j·;j¥=j =jl<jg<jµj°jü>j÷>jžj™jÊ2jÆ2jÆ)jÁ)j55j15j»)j¶)jhjdj3j 3jºjµjw(jr(j’*j�*jÅjÀj¤?jŸ?uUsubstitution_namesr)J}r*Jh�h¥hƒ}r+J(h…]h†]h‡]UsourcejJhŽ]h�]uU footnotesr,J]r-JUrefidsr.J}r/Jub.