
This patch includes platform specific functions to platform.c and platform.h which are being called by openamp library. The patch also removes Disable DCache API from the application which was being used as a workaround for a cache issue. Signed-off-by: Kinjal Pravinbhai Patel <patelki@xilinx.com>
111 lines
4.4 KiB
C
111 lines
4.4 KiB
C
/*
|
|
* Copyright (c) 2014, Mentor Graphics Corporation
|
|
* All rights reserved.
|
|
*
|
|
* Copyright (C) 2015 Xilinx, Inc. All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are met:
|
|
*
|
|
* 1. Redistributions of source code must retain the above copyright notice,
|
|
* this list of conditions and the following disclaimer.
|
|
* 2. 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.
|
|
* 3. Neither the name of Mentor Graphics Corporation 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 HOLDER 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.
|
|
*/
|
|
|
|
#ifndef PLATFORM_H_
|
|
#define PLATFORM_H_
|
|
|
|
#include <stdio.h>
|
|
#include "hil.h"
|
|
#include "xil_cache.h"
|
|
#include "xreg_cortexr5.h"
|
|
/* ------------------------- Macros --------------------------*/
|
|
|
|
/********************/
|
|
/* Register offsets */
|
|
/********************/
|
|
|
|
/* -- FIX ME: ipi info is to be defined -- */
|
|
struct ipi_info {
|
|
uint32_t ipi_base_addr;
|
|
uint32_t ipi_chn_mask;
|
|
};
|
|
|
|
int _enable_interrupt(struct proc_vring *vring_hw);
|
|
void _reg_ipi_after_deinit(struct proc_vring *vring_hw);
|
|
void _notify(int cpu_id, struct proc_intr *intr_info);
|
|
int _boot_cpu(int cpu_id, unsigned int load_addr);
|
|
void _shutdown_cpu(int cpu_id);
|
|
void platform_isr(int vect_id, void *data);
|
|
void deinit_isr(int vect_id, void *data);
|
|
|
|
#define platform_dcache_all_flush() { Xil_DCacheFlush(); }
|
|
|
|
#define platform_dcache_flush_range(addr, len) { Xil_DCacheFlushRange(addr, len); }
|
|
/* IPI REGs OFFSET */
|
|
#define IPI_TRIG_OFFSET 0x00000000 /* IPI trigger register offset */
|
|
#define IPI_OBS_OFFSET 0x00000004 /* IPI observation register offset */
|
|
#define IPI_ISR_OFFSET 0x00000010 /* IPI interrupt status register offset */
|
|
#define IPI_IMR_OFFSET 0x00000014 /* IPI interrupt mask register offset */
|
|
#define IPI_IER_OFFSET 0x00000018 /* IPI interrupt enable register offset */
|
|
#define IPI_IDR_OFFSET 0x0000001C /* IPI interrupt disable register offset */
|
|
|
|
/* IPC Device parameters */
|
|
#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 VRING0_IPI_INTR_VECT -1
|
|
#define VRING1_IPI_INTR_VECT 79
|
|
#define MASTER_CPU_ID 0
|
|
#define REMOTE_CPU_ID 1
|
|
|
|
#define CORTEXR5_CPSR_INTERRUPTS_BITS (XREG_CPSR_IRQ_ENABLE | XREG_CPSR_FIQ_ENABLE)
|
|
|
|
/* This macro writes the current program status register (CPSR - all fields) */
|
|
#define ARM_AR_CPSR_CXSF_WRITE(cpsr_cxsf_value) \
|
|
{ \
|
|
asm volatile(" MSR CPSR_cxsf, %0" \
|
|
: /* No outputs */ \
|
|
: "r" (cpsr_cxsf_value) ); \
|
|
}
|
|
|
|
/* This macro sets the interrupt related bits in the status register / control
|
|
register to the specified value. */
|
|
#define ARM_AR_INT_BITS_SET(set_bits) \
|
|
{ \
|
|
int tmp_val; \
|
|
tmp_val = mfcpsr(); \
|
|
tmp_val &= ~((unsigned int)CORTEXR5_CPSR_INTERRUPTS_BITS); \
|
|
tmp_val |= set_bits; \
|
|
ARM_AR_CPSR_CXSF_WRITE(tmp_val); \
|
|
}
|
|
|
|
/* This macro gets the interrupt related bits from the status register / control
|
|
register. */
|
|
#define ARM_AR_INT_BITS_GET(get_bits_ptr) \
|
|
{ \
|
|
int tmp_val; \
|
|
tmp_val = mfcpsr(); \
|
|
tmp_val &= CORTEXR5_CPSR_INTERRUPTS_BITS; \
|
|
*get_bits_ptr = tmp_val; \
|
|
}
|
|
|
|
#endif /* PLATFORM_H_ */
|