Hi everyone,
I try to write the dsp code, let remoteproc load it as firmware, then use
modprobe remoteproc
modprobe da8xx_remoteproc
modprobe virtio_rpmsg_bus
to run it.
After I trace the remoteproc_core.c, I guess I need write resource table for virtio device, but I cannot find any document.
I want to reference IPC 3.X code, but I am not familiar xdc and dsp code.
Could you give me some suggestion or about virtio queue communication?
The code I ref: henryomd.blogspot.tw/2015/02/zynq-amp-linux-on-cpu0-and-bare-metal.html
#define RAM_ADDR 0xc60000
typedef unsigned int u32;
typedef unsigned char u8;
#define offsetof(s,m) (u32)&(((s *)0)->m)
struct resource_table {//Just copied from linux/remoteproc.h
 u32 ver;//Must be 1 for remoteproc module!
 u32 num;
 u32 reserved[2];
 u32 offset[1];
};
enum fw_resource_type {
 RSC_CARVEOUT = 0,
 RSC_DEVMEM = 1,
 RSC_TRACE = 2,
 RSC_VDEV = 3,
 RSC_MMU  = 4,
 RSC_LAST = 5,
};
struct fw_rsc_carveout {
 u32 type;//from struct fw_rsc_hdr
 u32 da;
 u32 pa;
 u32 len;
 u32 flags;
 u32 reserved;
 u8 name[32];
};
const struct rproc_resource 
{
    struct resource_table base;
    //u32 offset[4];
    struct fw_rsc_carveout code_cout;
} 
ti_ipc_remoteproc_rt __attribute__ ((section (".rtable"))) = 
{
 .base = { .ver = 1, .num = 1, .reserved = { 0, 0 },
   .offset = { offsetof(struct rproc_resource, code_cout) },
 },
 .code_cout = {
    //.type = RSC_CARVEOUT, .da = RAM_ADDR, .pa = RAM_ADDR, .len = 1<<19,
    .type = RSC_VDEV, .da = RAM_ADDR, .pa = RAM_ADDR, .len = 1<<19,
    .flags=0, .reserved=0, .name="CPU1CODE",
 },
};
int main()
{
  int a = ti_ipc_remoteproc_rt.base.offset; // if no use ti_ipc_remoteproc_rt, compile will optimize the variable (don't generate it)
    volatile unsigned int *message;
    message = (unsigned int *)0xc7000000;
    *message = 0xabcdef98;
    *(message + 1)= a;
    while(1);
    return 0;
}
my linker script:
/* =========================================================================* 
 * OMAPL138_DSP.cmd - Linker Command File for Linking OMAPL138 DSP Programs    * 
 *                                                                             * 
 * These linker options are for command line linking only. For IDE linking, * 
 * you should set your linker options in Project Properties.                * 
 *         -c                    Link Using C Conventions                        * 
 *        -stack     0x1000        Software Stack Size                                * 
 *        -heap    0x1000        Heap Area Size                                    * 
 * =========================================================================*/ 
-stack 0x1000 
-heap 0x1000 
 
/* =========================================================================* 
 *                         Specify the System Memory Map                        * 
 * =========================================================================*/ 
MEMORY 
{ 
    entry_point:        o = 0xc5182800        l = 0x00000080 
    L22:        o = 0x11800080        l = 0x0003FF80 
    L1P:    o = 0x11E00000        l = 0x00008000 
    L1D:    o = 0x11F00000        l = 0x00008000 
    L2:    o = 0xC5000000        l = 0x00100000 
} 
 
/* =========================================================================* 
 *                 Specify the Sections Allocation into Memory                    * 
 * =========================================================================*/ 
SECTIONS 
{ 
    .text:_c_int00 >     entry_point 
    .cinit        >        L2                /* Initialization Tables            */ 
    .pinit        >        L2                /* C++ Constructor Tables            */ 
    .const        >        L2                /* Constant Data                    */ 
    .switch        >        L2                /* Jump Tables                        */ 
    .text        >        L2                /* Executable Code                    */ 
     
    .bss        >        L2                /* Global & Static Variables         */ 
    .far        >        L2                /* Far Global & Static Variables    */ 
    .stack        >        L2                /* Software System Stack            */ 
    .sysmem        >        L2                /* Dynamic Memory Allocation Area     */ 
     
    .cio        >        L2                /* C I/O Buffer                        */ 
    .vecs        >        L2                /* Interrupt Vectors                */ 
 
    .data        >        L2 
    .args        >        L2 
    .ppinfo        >        L2 
    .ppdata        >        L2 
     
    /* EABI Sections */ 
    .binit             >          L2 
    .init_array        >          L2 
    .neardata          >          L2 
    .fardata           >          L2 
    .rodata            >          L2 
    .c6xabi.exidx      >          L2 
    .c6xabi.extab      >          L2 
 
.resource_table : { 
   __rtable_start = .; 
   *(.rtable) 
   __rtable_end = .; 
} > L2 
 
     
}
 
				 
		 
					 
                           
				