diff --git a/lib/sw_apps/openamp_matrix_multiply/data/openamp_matrix_multiply.tcl b/lib/sw_apps/openamp_matrix_multiply/data/openamp_matrix_multiply.tcl index 484b64d5..6dd17f46 100755 --- a/lib/sw_apps/openamp_matrix_multiply/data/openamp_matrix_multiply.tcl +++ b/lib/sw_apps/openamp_matrix_multiply/data/openamp_matrix_multiply.tcl @@ -46,14 +46,14 @@ proc check_standalone_os {} { } set os [lindex $oslist 0]; - if { $os != "standalone" } { - error "This application is supported only on the Standalone Board Support Package."; + if {{ $os != "standalone" } || { $os != "freertos821_xilinx" }} { + error "This application is supported only on the Standalone Board Support Package and freertos821."; } } proc swapp_is_supported_sw {} { # make sure we are using standalone OS - #check_standalone_os; + check_standalone_os; # make sure xilffs is available set librarylist [hsi::get_libs -filter "NAME==xilopenamp"]; @@ -97,7 +97,9 @@ proc swapp_generate {} { set os [lindex $oslist 0]; if { $os != "standalone" } { set ld_file "lscript.ld" - file delete -force $ld_file + set ld_file_new "lscript_freertos.ld" + file rename -force $ld_file_new $ld_file + file delete -force $ld_file_new } else { set ld_file "lscript_freertos.ld" file delete -force $ld_file diff --git a/lib/sw_apps/openamp_matrix_multiply/src/baremetal.c b/lib/sw_apps/openamp_matrix_multiply/src/baremetal.c index 19d66952..a6a917e9 100644 --- a/lib/sw_apps/openamp_matrix_multiply/src/baremetal.c +++ b/lib/sw_apps/openamp_matrix_multiply/src/baremetal.c @@ -269,12 +269,18 @@ unsigned int old_value = 0; void restore_global_interrupts() { +#ifdef USE_FREERTOS + taskENABLE_INTERRUPTS(); +#else ARM_AR_INT_BITS_SET(old_value); +#endif } void disable_global_interrupts() { - +#ifdef USE_FREERTOS + taskDISABLE_INTERRUPTS(); +#else unsigned int value = 0; ARM_AR_INT_BITS_GET(&value); @@ -286,7 +292,7 @@ void disable_global_interrupts() { old_value = value; } - +#endif } /*==================================================================*/ diff --git a/lib/sw_apps/openamp_matrix_multiply/src/baremetal.h b/lib/sw_apps/openamp_matrix_multiply/src/baremetal.h index 70add711..78141c99 100644 --- a/lib/sw_apps/openamp_matrix_multiply/src/baremetal.h +++ b/lib/sw_apps/openamp_matrix_multiply/src/baremetal.h @@ -32,6 +32,7 @@ #ifndef _BAREMETAL_H #define _BAREMETAL_H +#include "amp_os.h" #include "xil_types.h" #include "xparameters.h" #include "xil_cache.h" @@ -116,5 +117,6 @@ void platform_cache_disable(); void platform_map_mem_region(unsigned int va,unsigned int pa, unsigned int size, unsigned int flags); unsigned long platform_vatopa(void *addr); void *platform_patova(unsigned long addr); +void process_communication(struct XOpenAMPInstPtr OpenAMPInstance); #endif /* _BAREMETAL_H */ diff --git a/lib/sw_apps/openamp_matrix_multiply/src/lscript.ld b/lib/sw_apps/openamp_matrix_multiply/src/lscript.ld index 3d7f76e4..6612d721 100644 --- a/lib/sw_apps/openamp_matrix_multiply/src/lscript.ld +++ b/lib/sw_apps/openamp_matrix_multiply/src/lscript.ld @@ -45,7 +45,7 @@ MEMORY { ps8_bbram_0_S_AXI_BASEADDR : ORIGIN = 0xFFCC4000, LENGTH = 0x00001000 ps8_csu_ram_0_S_AXI_BASEADDR : ORIGIN = 0xFFC40000, LENGTH = 0x00008000 - ps8_ocm_ram_0_S_AXI_BASEADDR : ORIGIN = 0xFFFC0000, LENGTH = 0x00020000 + ps8_ddr_S_AXI_BASEADDR : ORIGIN = 0x3ED00000, LENGTH = 0x00040000 ps8_ocm_ram_1_S_AXI_BASEADDR : ORIGIN = 0xFFFF0000, LENGTH = 0x00010000 ps8_r5_tcm_ram_0_S_AXI_BASEADDR : ORIGIN = 0x00000050, LENGTH = 0x0001FFB1 } @@ -84,23 +84,23 @@ _binary_firmware2_end = 0; *(.vfp11_veneer) *(.ARM.extab) *(.gnu.linkonce.armextab.*) -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .init : { KEEP (*(.init)) -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .fini : { KEEP (*(.fini)) -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .interp : { KEEP (*(.interp)) -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .note-ABI-tag : { KEEP (*(.note-ABI-tag)) -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .rodata : { __rodata_start = .; @@ -108,14 +108,14 @@ _binary_firmware2_end = 0; *(.rodata.*) *(.gnu.linkonce.r.*) __rodata_end = .; -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .rodata1 : { __rodata1_start = .; *(.rodata1) *(.rodata1.*) __rodata1_end = .; -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .sdata2 : { __sdata2_start = .; @@ -123,7 +123,7 @@ _binary_firmware2_end = 0; *(.sdata2.*) *(.gnu.linkonce.s2.*) __sdata2_end = .; -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .sbss2 : { __sbss2_start = .; @@ -131,7 +131,7 @@ _binary_firmware2_end = 0; *(.sbss2.*) *(.gnu.linkonce.sb2.*) __sbss2_end = .; -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .data : { __data_start = .; @@ -142,18 +142,18 @@ _binary_firmware2_end = 0; *(.got) *(.got.plt) __data_end = .; -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .data1 : { __data1_start = .; *(.data1) *(.data1.*) __data1_end = .; -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .got : { *(.got) -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .ctors : { __CTOR_LIST__ = .; @@ -164,7 +164,7 @@ _binary_firmware2_end = 0; KEEP (*(.ctors)) __CTOR_END__ = .; ___CTORS_END___ = .; -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .dtors : { __DTOR_LIST__ = .; @@ -175,67 +175,67 @@ _binary_firmware2_end = 0; KEEP (*(.dtors)) __DTOR_END__ = .; ___DTORS_END___ = .; -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .fixup : { __fixup_start = .; *(.fixup) __fixup_end = .; -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .eh_frame : { *(.eh_frame) -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .eh_framehdr : { __eh_framehdr_start = .; *(.eh_framehdr) __eh_framehdr_end = .; -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .gcc_except_table : { *(.gcc_except_table) -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .mmu_tbl (ALIGN(16384)) : { __mmu_tbl_start = .; *(.mmu_tbl) __mmu_tbl_end = .; -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .ARM.exidx : { __exidx_start = .; *(.ARM.exidx*) *(.gnu.linkonce.armexidix.*.*) __exidx_end = .; -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .preinit_array : { __preinit_array_start = .; KEEP (*(SORT(.preinit_array.*))) KEEP (*(.preinit_array)) __preinit_array_end = .; -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .init_array : { __init_array_start = .; KEEP (*(SORT(.init_array.*))) KEEP (*(.init_array)) __init_array_end = .; -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .fini_array : { __fini_array_start = .; KEEP (*(SORT(.fini_array.*))) KEEP (*(.fini_array)) __fini_array_end = .; -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .ARM.attributes : { __ARM.attributes_start = .; *(.ARM.attributes) __ARM.attributes_end = .; -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .sdata : { __sdata_start = .; @@ -243,7 +243,7 @@ _binary_firmware2_end = 0; *(.sdata.*) *(.gnu.linkonce.s.*) __sdata_end = .; -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .sbss (NOLOAD) : { __sbss_start = .; @@ -251,7 +251,7 @@ _binary_firmware2_end = 0; *(.sbss.*) *(.gnu.linkonce.sb.*) __sbss_end = .; -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .tdata : { __tdata_start = .; @@ -259,7 +259,7 @@ _binary_firmware2_end = 0; *(.tdata.*) *(.gnu.linkonce.td.*) __tdata_end = .; -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .tbss : { __tbss_start = .; @@ -267,7 +267,7 @@ _binary_firmware2_end = 0; *(.tbss.*) *(.gnu.linkonce.tb.*) __tbss_end = .; -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .bss (NOLOAD) : { . = ALIGN(4); @@ -278,7 +278,7 @@ _binary_firmware2_end = 0; *(COMMON) . = ALIGN(4); __bss_end__ = .; -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR _SDA_BASE_ = __sdata_start + ((__sbss_end - __sdata_start) / 2 ); diff --git a/lib/sw_apps/openamp_matrix_multiply/src/lscript_freertos.ld b/lib/sw_apps/openamp_matrix_multiply/src/lscript_freertos.ld index 8a7868b0..a2463569 100644 --- a/lib/sw_apps/openamp_matrix_multiply/src/lscript_freertos.ld +++ b/lib/sw_apps/openamp_matrix_multiply/src/lscript_freertos.ld @@ -45,7 +45,7 @@ MEMORY { ps8_bbram_0_S_AXI_BASEADDR : ORIGIN = 0xFFCC4000, LENGTH = 0x00001000 ps8_csu_ram_0_S_AXI_BASEADDR : ORIGIN = 0xFFC40000, LENGTH = 0x00008000 - ps8_ocm_ram_0_S_AXI_BASEADDR : ORIGIN = 0xFFFC0000, LENGTH = 0x00020000 + ps8_ddr_S_AXI_BASEADDR : ORIGIN = 0x3ED00000, LENGTH = 0x00040000 ps8_ocm_ram_1_S_AXI_BASEADDR : ORIGIN = 0xFFFF0000, LENGTH = 0x00010000 ps8_r5_tcm_ram_0_S_AXI_BASEADDR : ORIGIN = 0x00000050, LENGTH = 0x0001FFB1 } @@ -84,23 +84,23 @@ _binary_firmware2_end = 0; *(.vfp11_veneer) *(.ARM.extab) *(.gnu.linkonce.armextab.*) -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .init : { KEEP (*(.init)) -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .fini : { KEEP (*(.fini)) -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .interp : { KEEP (*(.interp)) -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .note-ABI-tag : { KEEP (*(.note-ABI-tag)) -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .rodata : { __rodata_start = .; @@ -108,14 +108,14 @@ _binary_firmware2_end = 0; *(.rodata.*) *(.gnu.linkonce.r.*) __rodata_end = .; -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .rodata1 : { __rodata1_start = .; *(.rodata1) *(.rodata1.*) __rodata1_end = .; -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .sdata2 : { __sdata2_start = .; @@ -123,7 +123,7 @@ _binary_firmware2_end = 0; *(.sdata2.*) *(.gnu.linkonce.s2.*) __sdata2_end = .; -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .sbss2 : { __sbss2_start = .; @@ -131,7 +131,7 @@ _binary_firmware2_end = 0; *(.sbss2.*) *(.gnu.linkonce.sb2.*) __sbss2_end = .; -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .data : { __data_start = .; @@ -142,18 +142,18 @@ _binary_firmware2_end = 0; *(.got) *(.got.plt) __data_end = .; -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .data1 : { __data1_start = .; *(.data1) *(.data1.*) __data1_end = .; -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .got : { *(.got) -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .ctors : { __CTOR_LIST__ = .; @@ -164,7 +164,7 @@ _binary_firmware2_end = 0; KEEP (*(.ctors)) __CTOR_END__ = .; ___CTORS_END___ = .; -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .dtors : { __DTOR_LIST__ = .; @@ -175,67 +175,67 @@ _binary_firmware2_end = 0; KEEP (*(.dtors)) __DTOR_END__ = .; ___DTORS_END___ = .; -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .fixup : { __fixup_start = .; *(.fixup) __fixup_end = .; -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .eh_frame : { *(.eh_frame) -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .eh_framehdr : { __eh_framehdr_start = .; *(.eh_framehdr) __eh_framehdr_end = .; -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .gcc_except_table : { *(.gcc_except_table) -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .mmu_tbl (ALIGN(16384)) : { __mmu_tbl_start = .; *(.mmu_tbl) __mmu_tbl_end = .; -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .ARM.exidx : { __exidx_start = .; *(.ARM.exidx*) *(.gnu.linkonce.armexidix.*.*) __exidx_end = .; -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .preinit_array : { __preinit_array_start = .; KEEP (*(SORT(.preinit_array.*))) KEEP (*(.preinit_array)) __preinit_array_end = .; -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .init_array : { __init_array_start = .; KEEP (*(SORT(.init_array.*))) KEEP (*(.init_array)) __init_array_end = .; -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .fini_array : { __fini_array_start = .; KEEP (*(SORT(.fini_array.*))) KEEP (*(.fini_array)) __fini_array_end = .; -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .ARM.attributes : { __ARM.attributes_start = .; *(.ARM.attributes) __ARM.attributes_end = .; -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .sdata : { __sdata_start = .; @@ -243,7 +243,7 @@ _binary_firmware2_end = 0; *(.sdata.*) *(.gnu.linkonce.s.*) __sdata_end = .; -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .sbss (NOLOAD) : { __sbss_start = .; @@ -251,7 +251,7 @@ _binary_firmware2_end = 0; *(.sbss.*) *(.gnu.linkonce.sb.*) __sbss_end = .; -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .tdata : { __tdata_start = .; @@ -259,7 +259,7 @@ _binary_firmware2_end = 0; *(.tdata.*) *(.gnu.linkonce.td.*) __tdata_end = .; -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .tbss : { __tbss_start = .; @@ -267,7 +267,7 @@ _binary_firmware2_end = 0; *(.tbss.*) *(.gnu.linkonce.tb.*) __tbss_end = .; -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .bss (NOLOAD) : { . = ALIGN(4); @@ -294,7 +294,7 @@ _SDA2_BASE_ = __sdata2_start + ((__sbss2_end - __sdata2_start) / 2 ); . += _HEAP_SIZE; _heap_end = .; HeapLimit = .; -} > ps8_ocm_ram_0_S_AXI_BASEADDR +} > ps8_ddr_S_AXI_BASEADDR .stack (NOLOAD) : { . = ALIGN(16); diff --git a/lib/sw_apps/openamp_matrix_multiply/src/matrix_multiply.c b/lib/sw_apps/openamp_matrix_multiply/src/matrix_multiply.c index 5cab77dd..1ed50e97 100644 --- a/lib/sw_apps/openamp_matrix_multiply/src/matrix_multiply.c +++ b/lib/sw_apps/openamp_matrix_multiply/src/matrix_multiply.c @@ -88,6 +88,9 @@ #define MAX_SIZE 6 #define NUM_MATRIX 2 #define SHUTDOWN_MSG 0xEF56A55A +#ifdef USE_FREERTOS +#define DELAY_200MSEC 200/portTICK_PERIOD_MS +#endif typedef struct _matrix { unsigned int size; @@ -191,6 +194,7 @@ void communication_task(){ xActivatedMember = xQueueSelectFromSet( comm_queueset, portMAX_DELAY); if( xActivatedMember == OpenAMPInstPtr.lock ) { env_acquire_sync_lock(OpenAMPInstPtr.lock); + env_disable_interrupt(VRING1_IPI_INTR_VECT); process_communication(OpenAMPInstPtr); } if (xActivatedMember == OpenAMPInstPtr.send_queue) { @@ -200,6 +204,7 @@ void communication_task(){ #else env_enable_interrupt(VRING1_IPI_INTR_VECT, 0, 0); env_acquire_sync_lock(OpenAMPInstPtr.lock); + env_disable_interrupt(VRING1_IPI_INTR_VECT); process_communication(OpenAMPInstPtr); matrix_mul(); if(pq_qlength(OpenAMPInstPtr.send_queue) > 0) { @@ -259,7 +264,7 @@ static void rpmsg_read_cb(struct rpmsg_channel *rp_chnl, void *data, int len, remoteproc_resource_deinit(proc); #ifdef USE_FREERTOS int TempTimerId; - stop_scheduler = xTimerCreate("TMR", 200, pdFALSE, (void *)&TempTimerId, StopSchedulerTmrCallBack); + stop_scheduler = xTimerCreate("TMR", DELAY_200MSEC, pdFALSE, (void *)&TempTimerId, StopSchedulerTmrCallBack); xTimerStart(stop_scheduler, 0); #endif }else{ @@ -286,41 +291,4 @@ static void Matrix_Multiply(const matrix *m, const matrix *n, matrix *r) { } } } -} - -#ifdef USE_FREERTOS -/*-----------------------------------------------------------*/ -void vApplicationMallocFailedHook( void ) -{ - /* vApplicationMallocFailedHook() will only be called if - configUSE_MALLOC_FAILED_HOOK is set to 1 in FreeRTOSConfig.h. It is a hook - function that will get called if a call to pvPortMalloc() fails. - pvPortMalloc() is called internally by the kernel whenever a task, queue or - semaphore is created. It is also called by various parts of the demo - application. If heap_1.c or heap_2.c are used, then the size of the heap - available to pvPortMalloc() is defined by configTOTAL_HEAP_SIZE in - FreeRTOSConfig.h, and the xPortGetFreeHeapSize() API function can be used - to query the size of free heap space that remains (although it does not - provide information on how the remaining heap might be fragmented). */ - xil_printf("malloc failed\r\n"); - taskDISABLE_INTERRUPTS(); - for( ;; ); -} - -/*-----------------------------------------------------------*/ -void vApplicationStackOverflowHook( xTaskHandle *pxTask, signed char *pcTaskName ) -{ - ( void ) pcTaskName; - ( void ) pxTask; - - /* vApplicationStackOverflowHook() will only be called if - configCHECK_FOR_STACK_OVERFLOW is set to either 1 or 2. The handle and name - of the offending task will be passed into the hook function via its - parameters. However, when a stack has overflowed, it is possible that the - parameters will have been corrupted, in which case the pxCurrentTCB variable - can be inspected directly. */ - taskDISABLE_INTERRUPTS(); - for( ;; ); -} - -#endif +} \ No newline at end of file diff --git a/lib/sw_apps/openamp_matrix_multiply/src/platform.c b/lib/sw_apps/openamp_matrix_multiply/src/platform.c index 673bf34b..fc67413d 100644 --- a/lib/sw_apps/openamp_matrix_multiply/src/platform.c +++ b/lib/sw_apps/openamp_matrix_multiply/src/platform.c @@ -96,6 +96,7 @@ void _notify(int cpu_id, struct proc_intr *intr_info) { if (chn_ipi_info == NULL) return; platform_dcache_all_flush(); + env_wmb(); /* Trigger IPI */ ipi_trigger(chn_ipi_info->ipi_base_addr, chn_ipi_info->ipi_chn_mask); } diff --git a/lib/sw_apps/openamp_matrix_multiply/src/platform.h b/lib/sw_apps/openamp_matrix_multiply/src/platform.h index 1783256e..982de123 100644 --- a/lib/sw_apps/openamp_matrix_multiply/src/platform.h +++ b/lib/sw_apps/openamp_matrix_multiply/src/platform.h @@ -48,7 +48,7 @@ struct ipi_info { #define SHM_ADDR (void *)0x3ED08000 #define SHM_SIZE 0x00200000 #define IPI_BASEADDR 0xff310000 -#define IPI_CHN_BITMASK 0x00000001 /* IPI channel bit mask APU<->RPU0 */ +#define IPI_CHN_BITMASK 0x01000000 /* IPI channel bit mask APU<->RPU0 */ #define VRING0_IPI_INTR_VECT -1 #define VRING1_IPI_INTR_VECT 65 #define MASTER_CPU_ID 0 diff --git a/lib/sw_apps/openamp_matrix_multiply/src/rsc_table.c b/lib/sw_apps/openamp_matrix_multiply/src/rsc_table.c index cd1a7897..12ad11d4 100644 --- a/lib/sw_apps/openamp_matrix_multiply/src/rsc_table.c +++ b/lib/sw_apps/openamp_matrix_multiply/src/rsc_table.c @@ -41,34 +41,33 @@ #define RPMSG_IPU_C0_FEATURES 1 + /* VirtIO rpmsg device id */ #define VIRTIO_ID_RPMSG_ 7 /* Remote supports Name Service announcement */ #define VIRTIO_RPMSG_F_NS 0 - -#define OCM_0_START 0xFFFC0000 -#define OCM_0_LEN 0x20000 #define OCM_1_START 0xFFFF0000 #define OCM_1_LEN 0x10000 #define TCM_0_START_DA 0x00000000 -#define TCM_0_LEN 0x10000 +#define TCM_0_LEN 0x20000 #define TCM_0_START_PA 0xFFE00000 #define TCM_1_START_DA 0x00020000 -#define TCM_1_LEN 0x10000 +#define TCM_1_LEN 0x20000 #define TCM_1_START_PA 0xFFE40000 +#define DDR_ELF_START 0x3ED00000 +#define DDR_ELF_LEN 0x40000 #define NUM_VRINGS 0x02 #define VRING_ALIGN 0x1000 -#define RING_TX 0x3ED00000 -#define RING_RX 0x3ED04000 +#define RING_TX 0x3ED40000 +#define RING_RX 0x3ED44000 #define VRING_SIZE 256 - #define NUM_TABLE_ENTRIES 3 -#define CARVEOUT_SRC_OFFSETS offsetof(struct remote_resource_table, ocm_0_cout), \ - offsetof(struct remote_resource_table, ocm_1_cout), +#define CARVEOUT_SRC_OFFSETS offsetof(struct remote_resource_table, ocm_1_cout), \ + offsetof(struct remote_resource_table, ddr_cout), -#define CARVEOUT_SRC {RSC_CARVEOUT, OCM_0_START, OCM_0_START, OCM_0_LEN, 0, 0, "OCM0_COUT",}, \ - {RSC_CARVEOUT, OCM_1_START, OCM_1_START, OCM_1_LEN, 0, 0, "ELF_DATA_COUT",}, +#define CARVEOUT_SRC {RSC_CARVEOUT, OCM_1_START, OCM_1_START, OCM_1_LEN, 0, 0, "OCM1_COUT",}, \ + {RSC_CARVEOUT, DDR_ELF_START, DDR_ELF_START, DDR_ELF_LEN, 0, 0, "ELF_DATA_COUT",}, const struct remote_resource_table __resource resources = diff --git a/lib/sw_apps/openamp_matrix_multiply/src/rsc_table.h b/lib/sw_apps/openamp_matrix_multiply/src/rsc_table.h index 258b9e7f..5af45cbd 100644 --- a/lib/sw_apps/openamp_matrix_multiply/src/rsc_table.h +++ b/lib/sw_apps/openamp_matrix_multiply/src/rsc_table.h @@ -45,7 +45,7 @@ struct remote_resource_table { unsigned int offset[NO_RESOURCE_ENTRIES]; /* text carve out entry */ - struct fw_rsc_carveout ocm_0_cout; + struct fw_rsc_carveout ddr_cout; struct fw_rsc_carveout ocm_1_cout; /* rpmsg vdev entry */ struct fw_rsc_vdev rpmsg_vdev;