[Buildroot] [PATCH v2 3/3] pru-sample: add sample PRU application

Ash Charles ashcharles at gmail.com
Fri Nov 25 17:50:00 UTC 2016


As suggested [1], provide a sample application demonstrating how to use
the PRU toolchain (specifically, the ti-cgt-pru and
pru-software-support packages) within buildroot.  This sample is taken
from PRU Lab #4 for the AM335x [2, 3].

Note: No special userspace tools are needed to load PRU firmware. The
Linux kernel loads the specifically-named files as normal kernel
firmware.

[1] http://lists.busybox.net/pipermail/buildroot/2016-November/178050.html
[2] http://processors.wiki.ti.com/index.php/PRU_Training:_Hands-on_Labs
[3] https://git.ti.com/pru-software-support-package/pru-software-support-package/trees/v4.0.2/labs/lab_4

Signed-off-by: Ash Charles <ash.charles at savoirfairelinux.com>
---
 package/Config.in                         |   1 +
 package/pru-sample/Config.in              |   7 ++
 package/pru-sample/pru-sample.mk          |  22 +++++++
 package/pru-sample/src/AM335x_PRU.cmd     |  78 +++++++++++++++++++++++
 package/pru-sample/src/Makefile           |  31 +++++++++
 package/pru-sample/src/pru0.c             |  95 ++++++++++++++++++++++++++++
 package/pru-sample/src/pru1.c             |  65 +++++++++++++++++++
 package/pru-sample/src/resource_table_0.h | 102 ++++++++++++++++++++++++++++++
 package/pru-sample/src/resource_table_1.h |  83 ++++++++++++++++++++++++
 9 files changed, 484 insertions(+)
 create mode 100644 package/pru-sample/Config.in
 create mode 100644 package/pru-sample/pru-sample.mk
 create mode 100644 package/pru-sample/src/AM335x_PRU.cmd
 create mode 100644 package/pru-sample/src/Makefile
 create mode 100644 package/pru-sample/src/pru0.c
 create mode 100644 package/pru-sample/src/pru1.c
 create mode 100644 package/pru-sample/src/resource_table_0.h
 create mode 100644 package/pru-sample/src/resource_table_1.h

diff --git a/package/Config.in b/package/Config.in
index 9ed296f..f4995a5 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -437,6 +437,7 @@ endmenu
 	source "package/pifmrds/Config.in"
 	source "package/powertop/Config.in"
 	source "package/pps-tools/Config.in"
+	source "package/pru-sample/Config.in"
 	source "package/pulseview/Config.in"
 	source "package/read-edid/Config.in"
 	source "package/rfkill/Config.in"
diff --git a/package/pru-sample/Config.in b/package/pru-sample/Config.in
new file mode 100644
index 0000000..20d9f81
--- /dev/null
+++ b/package/pru-sample/Config.in
@@ -0,0 +1,7 @@
+config BR2_PACKAGE_PRU_SAMPLE
+	bool "PRU sample firmware"
+	depends on BR2_PACKAGE_HOST_PRU_SOFTWARE_SUPPORT
+	help
+	  Sample PRU firmware extracted from lab #4 from the TI
+	  example code. See
+	  http://processors.wiki.ti.com/index.php/PRU_Training:_Hands-on_Labs
diff --git a/package/pru-sample/pru-sample.mk b/package/pru-sample/pru-sample.mk
new file mode 100644
index 0000000..19cdf02
--- /dev/null
+++ b/package/pru-sample/pru-sample.mk
@@ -0,0 +1,22 @@
+################################################################################
+#
+# pru-sample
+#
+################################################################################
+
+PRU_SAMPLE_VERSION = 0.1
+PRU_SAMPLE_SITE = package/pru-sample/src
+PRU_SAMPLE_SITE_METHOD = local
+PRU_SAMPLE_DEPENDENCIES = host-ti-cgt-pru host-pru-software-support
+
+define PRU_SAMPLE_BUILD_CMDS
+        $(MAKE) PRU_CGT=$(TI_CGT_PRU_DIR) -C $(@D)
+endef
+
+define PRU_SAMPLE_INSTALL_TARGET_CMDS
+        mkdir -p $(TARGET_DIR)/lib/firmware/
+        $(INSTALL) -m 0644 $(@D)/pru0.out $(TARGET_DIR)/lib/firmware/am335x-pru0-fw
+        $(INSTALL) -m 0644 $(@D)/pru1.out $(TARGET_DIR)/lib/firmware/am335x-pru1-fw
+endef
+
+$(eval $(generic-package))
diff --git a/package/pru-sample/src/AM335x_PRU.cmd b/package/pru-sample/src/AM335x_PRU.cmd
new file mode 100644
index 0000000..cdd969d
--- /dev/null
+++ b/package/pru-sample/src/AM335x_PRU.cmd
@@ -0,0 +1,78 @@
+/****************************************************************************/
+/*  AM335x_PRU.cmd                                                          */
+/*  Copyright (c) 2015  Texas Instruments Incorporated                      */
+/*                                                                          */
+/*    Description: This file is a linker command file that can be used for  */
+/*                 linking PRU programs built with the C compiler and       */
+/*                 the resulting .out file on an AM335x device.             */
+/****************************************************************************/
+/* Linker command file for PRU on the AM335x */
+-cr	/* link using C conventions */
+
+/* System Memory Map */
+MEMORY
+{
+PAGE 0:
+	PRU_IMEM	: org = 0x00000000 len = 0x00002000  /* 8kB PRU0 Instruction RAM */
+
+PAGE 1:
+	PRU_DMEM_0_1	: org = 0x00000000 len = 0x00002000 CREGISTER=24 /* 8kB PRU Data RAM 0_1 */
+	PRU_DMEM_1_0	: org = 0x00002000 len = 0x00002000 CREGISTER=25 /* 8kB PRU Data RAM 1_0 */
+
+PAGE 2:
+	PRU_SHAREDMEM	: org = 0x00010000 len = 0x00003000 CREGISTER=28 /* 12kB Shared RAM */
+	DDR		: org = 0x80000000 len = 0x00000100 CREGISTER=31
+	L3OCMC		: org = 0x40000000 len = 0x00010000 CREGISTER=30
+
+	/* Peripherals */
+	PRU_CFG		: org = 0x00026000 len = 0x00000044 CREGISTER=4
+	PRU_ECAP	: org = 0x00030000 len = 0x00000060 CREGISTER=3
+	PRU_IEP		: org = 0x0002E000 len = 0x0000031C CREGISTER=26
+	PRU_INTC	: org = 0x00020000 len = 0x00001504 CREGISTER=0
+	PRU_UART	: org = 0x00028000 len = 0x00000038 CREGISTER=7
+
+	DCAN0		: org = 0x481CC000 len = 0x000001E8 CREGISTER=14
+	DCAN1		: org = 0x481D0000 len = 0x000001E8 CREGISTER=15
+	DMTIMER2	: org = 0x48040000 len = 0x0000005C CREGISTER=1
+	PWMSS0		: org = 0x48300000 len = 0x000002C4 CREGISTER=18
+	PWMSS1		: org = 0x48302000 len = 0x000002C4 CREGISTER=19
+	PWMSS2		: org = 0x48304000 len = 0x000002C4 CREGISTER=20
+	GEMAC		: org = 0x4A100000 len = 0x0000128C CREGISTER=9
+	I2C1		: org = 0x4802A000 len = 0x000000D8 CREGISTER=2
+	I2C2		: org = 0x4819C000 len = 0x000000D8 CREGISTER=17
+	MBX0		: org = 0x480C8000 len = 0x00000140 CREGISTER=22
+	MCASP0_DMA	: org = 0x46000000 len = 0x00000100 CREGISTER=8
+	MCSPI0		: org = 0x48030000 len = 0x000001A4 CREGISTER=6
+	MCSPI1		: org = 0x481A0000 len = 0x000001A4 CREGISTER=16
+	MMCHS0		: org = 0x48060000 len = 0x00000300 CREGISTER=5
+	SPINLOCK	: org = 0x480CA000 len = 0x00000880 CREGISTER=23
+	TPCC		: org = 0x49000000 len = 0x00001098 CREGISTER=29
+	UART1		: org = 0x48022000 len = 0x00000088 CREGISTER=11
+	UART2		: org = 0x48024000 len = 0x00000088 CREGISTER=12
+
+	RSVD10		: org = 0x48318000 len = 0x00000100 CREGISTER=10
+	RSVD13		: org = 0x48310000 len = 0x00000100 CREGISTER=13
+	RSVD21		: org = 0x00032400 len = 0x00000100 CREGISTER=21
+	RSVD27		: org = 0x00032000 len = 0x00000100 CREGISTER=27
+}
+
+/* Allocate sections to memory */
+SECTIONS {
+	/* Force _c_int00 to the start of PRU IRAM (for binary, not ELF) */
+	.text:_c_int00*	>  0x0, PAGE 0
+
+	.text		>  PRU_IMEM, PAGE 0
+	.stack		>  PRU_DMEM_0_1, PAGE 1
+	.bss		>  PRU_DMEM_0_1, PAGE 1
+	.cio		>  PRU_DMEM_0_1, PAGE 1
+	.data		>  PRU_DMEM_0_1, PAGE 1
+	.switch		>  PRU_DMEM_0_1, PAGE 1
+	.sysmem		>  PRU_DMEM_0_1, PAGE 1
+	.cinit		>  PRU_DMEM_0_1, PAGE 1
+	.rodata		>  PRU_DMEM_0_1, PAGE 1
+	.rofardata	>  PRU_DMEM_0_1, PAGE 1
+	.farbss		>  PRU_DMEM_0_1, PAGE 1
+	.fardata	>  PRU_DMEM_0_1, PAGE 1
+
+	.resource_table > PRU_DMEM_0_1, PAGE 1
+}
diff --git a/package/pru-sample/src/Makefile b/package/pru-sample/src/Makefile
new file mode 100644
index 0000000..c0f9c41
--- /dev/null
+++ b/package/pru-sample/src/Makefile
@@ -0,0 +1,31 @@
+ifndef PRU_CGT
+define ERROR_BODY
+*******************************************************************************
+Set PRU_CGT environment variable e.g.
+ export PRU_CGT=/path/to/pru/code/gen/tools/ti-cgt-pru
+*******************************************************************************
+endef
+$(error $(ERROR_BODY))
+endif
+
+LINKER_COMMAND_FILE=./AM335x_PRU.cmd
+LIBS=--library=$(PRU_CGT)/usr/lib/rpmsg_lib.lib
+INCLUDE=--include_path=$(PRU_CGT)/include --include_path=$(PRU_CGT)/usr/include --include_path=$(PRU_CGT)/usr/include/am335x
+CFLAGS=-v3 -O2 --display_error_number --endian=little --hardware_mac=on -ppd -ppa
+LFLAGS=--reread_libs --warn_sections --stack_size=0x100 --heap_size=0x100
+
+TARGETS=pru0.out pru1.out
+
+.PHONY: all
+all: $(TARGETS)
+
+# Invokes the linker (-z flag) to make the .out file
+%.out: %.object $(LINKER_COMMAND_FILE)
+	@echo 'Linking target: $@'
+	$(PRU_CGT)/bin/clpru $(CFLAGS) -z -i$(PRU_CGT)/lib -i$(PRU_CGT)/include $(LFLAGS) -o $@ $< $(LINKER_COMMAND_FILE) --library=libc.a $(LIBS)
+	@echo 'Finished linking building target: $@'
+
+# Invokes the compiler on all c files in the directory to create the object files
+%.object: %.c
+	@echo 'Compiling: $<'
+	$(PRU_CGT)/bin/clpru $(INCLUDE) $(CFLAGS) -fe $@ $<
diff --git a/package/pru-sample/src/pru0.c b/package/pru-sample/src/pru0.c
new file mode 100644
index 0000000..42e80c8
--- /dev/null
+++ b/package/pru-sample/src/pru0.c
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2015 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 	* Redistributions of source code must retain the above copyright
+ * 	  notice, this list of conditions and the following disclaimer.
+ *
+ * 	* Redistributions in binary form must reproduce the above copyright
+ * 	  notice, this list of conditions and the following disclaimer in the
+ * 	  documentation and/or other materials provided with the
+ * 	  distribution.
+ *
+ * 	* Neither the name of Texas Instruments Incorporated nor the names of
+ * 	  its contributors may be used to endorse or promote products derived
+ * 	  from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stdint.h>
+#include <pru_cfg.h>
+#include <pru_intc.h>
+#include "resource_table_0.h"
+
+volatile register uint32_t __R30;
+volatile register uint32_t __R31;
+
+/* PRU0-to-PRU1 interrupt */
+#define PRU0_PRU1_EVT		(16)
+#define PRU0_PRU1_TRIGGER	(__R31 = (PRU0_PRU1_EVT - 16) | (1 << 5))
+
+/* SW1 offset */
+#define SW1		(1 << 5)
+
+/* INTC configuration
+ * We are going to map User event 16 to Host 1
+ * PRU1 will then wait for r31 bit 31 (designates Host 1) to go high
+ * */
+void configIntc(){
+        /* Clear any pending PRU-generated events */
+        __R31 = 0x00000000;
+
+        /* Map event 16 to channel 1 */
+        CT_INTC.CMR4_bit.CH_MAP_16 = 1;
+
+        /* Map channel 1 to host 1 */
+        CT_INTC.HMR0_bit.HINT_MAP_1 = 1;
+
+        /* Ensure event 16 is cleared */
+        CT_INTC.SICR = 16;
+
+        /* Enable event 16 */
+        CT_INTC.EISR = 16;
+
+        /* Enable Host interrupt 1 */
+        CT_INTC.HIEISR |= (1 << 0);
+
+        // Globally enable host interrupts
+        CT_INTC.GER = 1;
+}
+
+void main(){
+	/* Configure GPI and GPO as Mode 0 (Direct Connect) */
+	CT_CFG.GPCFG0 = 0x0000;
+
+	/* Clear GPO pins */
+	__R30 &= 0xFFFF0000;
+
+	/* Configure INTC */
+	configIntc();
+
+	while(1) {
+		/* Wait for SW1 to be pressed */
+		if ((__R31 & SW1) != SW1){
+			/* Interrupt PRU1, wait 500ms for cheap "debounce" */
+			__delay_cycles(100000000);
+			PRU0_PRU1_TRIGGER;
+		}
+	}
+}
+
diff --git a/package/pru-sample/src/pru1.c b/package/pru-sample/src/pru1.c
new file mode 100644
index 0000000..f364f0b
--- /dev/null
+++ b/package/pru-sample/src/pru1.c
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2015 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 	* Redistributions of source code must retain the above copyright
+ * 	  notice, this list of conditions and the following disclaimer.
+ *
+ * 	* Redistributions in binary form must reproduce the above copyright
+ * 	  notice, this list of conditions and the following disclaimer in the
+ * 	  documentation and/or other materials provided with the
+ * 	  distribution.
+ *
+ * 	* Neither the name of Texas Instruments Incorporated nor the names of
+ * 	  its contributors may be used to endorse or promote products derived
+ * 	  from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stdint.h>
+#include <pru_cfg.h>
+#include <pru_intc.h>
+#include "resource_table_1.h"
+
+volatile register uint32_t __R30;
+volatile register uint32_t __R31;
+
+/* Defines */
+#define HOST1_MASK		(0x80000000)
+#define PRU0_PRU1_EVT	(16)
+#define TOGGLE_BLUE		(__R30 ^= (1 << 3))
+
+void main(){
+	/* Configure GPI and GPO as Mode 0 (Direct Connect) */
+	CT_CFG.GPCFG0 = 0x0000;
+
+	/* Clear GPO pins */
+	__R30 &= 0xFFFF0000;
+
+	/* Spin in loop until interrupt on HOST 1 is detected */
+	while(1) {
+		if (__R31 & HOST1_MASK) {
+			TOGGLE_BLUE;
+			/* Clear interrupt event */
+			CT_INTC.SICR = 16;
+			/* Delay to ensure the event is cleared in INTC */
+			__delay_cycles(5);
+		}
+	}
+}
+
diff --git a/package/pru-sample/src/resource_table_0.h b/package/pru-sample/src/resource_table_0.h
new file mode 100644
index 0000000..dcaf849
--- /dev/null
+++ b/package/pru-sample/src/resource_table_0.h
@@ -0,0 +1,102 @@
+/*
+ * Copyright (C) 2015 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 	* Redistributions of source code must retain the above copyright
+ * 	  notice, this list of conditions and the following disclaimer.
+ *
+ * 	* Redistributions in binary form must reproduce the above copyright
+ * 	  notice, this list of conditions and the following disclaimer in the
+ * 	  documentation and/or other materials provided with the
+ * 	  distribution.
+ *
+ * 	* Neither the name of Texas Instruments Incorporated nor the names of
+ * 	  its contributors may be used to endorse or promote products derived
+ * 	  from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ *  ======== rsc_table_pru.h ========
+ *
+ *  Define the resource table entries for all PRU cores. This will be
+ *  incorporated into corresponding base images, and used by the remoteproc
+ *  on the host-side to allocated/reserve resources.
+ *
+ */
+
+#ifndef _RSC_TABLE_PRU_H_
+#define _RSC_TABLE_PRU_H_
+
+#include <stddef.h>
+#include <rsc_types.h>
+#include <pru_virtio_ids.h>
+
+/*
+ * Sizes of the virtqueues (expressed in number of buffers supported,
+ * and must be power of 2)
+ */
+#define PRU_RPMSG_VQ0_SIZE	2
+#define PRU_RPMSG_VQ1_SIZE	2
+
+/* flip up bits whose indices represent features we support */
+#define RPMSG_PRU_C0_FEATURES	1
+
+/* Definition for unused interrupts */
+#define HOST_UNUSED		255
+
+/* Mapping sysevts to a channel. Each pair contains a sysevt, channel */
+struct ch_map pru_intc_map[] = { {16, 1},};
+
+struct my_resource_table {
+	struct resource_table base;
+
+	uint32_t offset[1]; /* Should match 'num' in actual definition */
+
+	/* intc definition */
+	struct fw_rsc_custom pru_ints;
+};
+
+#pragma DATA_SECTION(am335x_pru_remoteproc_ResourceTable, ".resource_table")
+#pragma RETAIN(am335x_pru_remoteproc_ResourceTable)
+struct my_resource_table am335x_pru_remoteproc_ResourceTable = {
+	1,	/* we're the first version that implements this */
+	1,	/* number of entries in the table */
+	0, 0,	/* reserved, must be zero */
+	/* offsets to entries */
+	{
+		offsetof(struct my_resource_table, pru_ints),
+	},
+
+	{
+		TYPE_CUSTOM, TYPE_PRU_INTS,
+		sizeof(struct fw_rsc_custom_ints),
+		{ /* PRU_INTS version */
+		  0x0000,
+		  /* Channel-to-host mapping, 255 for unused */
+		  HOST_UNUSED, 1, HOST_UNUSED, HOST_UNUSED, HOST_UNUSED,
+		  HOST_UNUSED, HOST_UNUSED, HOST_UNUSED, HOST_UNUSED, HOST_UNUSED,
+		  /* Number of evts being mapped to channels */
+		  (sizeof(pru_intc_map) / sizeof(struct ch_map)),
+		  /* Pointer to the structure containing mapped events */
+		  pru_intc_map,
+		},
+	},
+};
+
+#endif /* _RSC_TABLE_PRU_H_ */
diff --git a/package/pru-sample/src/resource_table_1.h b/package/pru-sample/src/resource_table_1.h
new file mode 100644
index 0000000..a35dd2a
--- /dev/null
+++ b/package/pru-sample/src/resource_table_1.h
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2015 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 	* Redistributions of source code must retain the above copyright
+ * 	  notice, this list of conditions and the following disclaimer.
+ *
+ * 	* Redistributions in binary form must reproduce the above copyright
+ * 	  notice, this list of conditions and the following disclaimer in the
+ * 	  documentation and/or other materials provided with the
+ * 	  distribution.
+ *
+ * 	* Neither the name of Texas Instruments Incorporated nor the names of
+ * 	  its contributors may be used to endorse or promote products derived
+ * 	  from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ *  ======== rsc_table_pru.h ========
+ *
+ *  Define the resource table entries for all PRU cores. This will be
+ *  incorporated into corresponding base images, and used by the remoteproc
+ *  on the host-side to allocated/reserve resources.
+ *
+ */
+
+#ifndef _RSC_TABLE_PRU_H_
+#define _RSC_TABLE_PRU_H_
+
+#include <stddef.h>
+#include <rsc_types.h>
+#include <pru_virtio_ids.h>
+
+/*
+ * Sizes of the virtqueues (expressed in number of buffers supported,
+ * and must be power of 2)
+ */
+#define PRU_RPMSG_VQ0_SIZE	2
+#define PRU_RPMSG_VQ1_SIZE	2
+
+/* flip up bits whose indices represent features we support */
+#define RPMSG_PRU_C0_FEATURES	1
+
+/* Definition for unused interrupts */
+#define HOST_UNUSED		255
+
+/* Mapping sysevts to a channel. Each pair contains a sysevt, channel */
+struct ch_map pru_intc_map[] = { };
+
+struct my_resource_table {
+	struct resource_table base;
+
+	uint32_t offset[1]; /* Should match 'num' in actual definition */
+
+	/* intc definition */
+	struct fw_rsc_custom pru_ints;
+};
+
+#pragma DATA_SECTION(am335x_pru_remoteproc_ResourceTable, ".resource_table")
+#pragma RETAIN(am335x_pru_remoteproc_ResourceTable)
+struct my_resource_table am335x_pru_remoteproc_ResourceTable = {
+	1,	/* we're the first version that implements this */
+	0,	/* number of entries in the table */
+	0, 0,	/* reserved, must be zero */
+};
+
+#endif /* _RSC_TABLE_PRU_H_ */
-- 
2.7.4



More information about the buildroot mailing list