/*************************************************************************/ /*!
@File
@Title          RGX META definitions
@Copyright      Copyright (c) Imagination Technologies Ltd. All Rights Reserved
@Description    RGX META helper definitions
@License        MIT

The contents of this file are subject to the MIT license as set out below.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

This License is also included in this distribution in the file called
"MIT-COPYING".

EXCEPT AS OTHERWISE STATED IN A NEGOTIATED AGREEMENT: (A) THE SOFTWARE IS
PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
PURPOSE AND NONINFRINGEMENT; AND (B) IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ /**************************************************************************/

#if !defined (__RGX_META_H__)
#define __RGX_META_H__


/***** The META HW register definitions in the file are updated manually *****/


#include "img_defs.h"
#include "km/rgxdefs_km.h"


/************************************************************************
* META registers and MACROS 
************************************************************************/
#define	META_CR_CTRLREG_BASE(T)					(0x04800000 + 0x1000*(T))

#define META_CR_TXPRIVEXT						(0x048000E8)
#define META_CR_TXPRIVEXT_MINIM_EN				(0x1<<7)

#define META_CR_SYSC_JTAG_THREAD				(0x04830030)
#define META_CR_SYSC_JTAG_THREAD_PRIV_EN		(0x00000004)

#define META_CR_PERF_COUNT0						(0x0480FFE0)
#define META_CR_PERF_COUNT1						(0x0480FFE8)
#define META_CR_PERF_COUNT_CTRL_SHIFT			(28)
#define META_CR_PERF_COUNT_CTRL_MASK			(0xF0000000)
#define META_CR_PERF_COUNT_CTRL_DCACHEHITS		(0x8 << META_CR_PERF_COUNT_CTRL_SHIFT)
#define META_CR_PERF_COUNT_CTRL_ICACHEHITS		(0x9 << META_CR_PERF_COUNT_CTRL_SHIFT)
#define META_CR_PERF_COUNT_CTRL_ICACHEMISS		(0xA << META_CR_PERF_COUNT_CTRL_SHIFT)
#define META_CR_PERF_COUNT_CTRL_ICORE			(0xD << META_CR_PERF_COUNT_CTRL_SHIFT)
#define META_CR_PERF_COUNT_THR_SHIFT			(24)
#define META_CR_PERF_COUNT_THR_MASK				(0x0F000000)
#define META_CR_PERF_COUNT_THR_0				(0x1 << META_CR_PERF_COUNT_THR_SHIFT)
#define META_CR_PERF_COUNT_THR_1				(0x2 << META_CR_PERF_COUNT_THR_1)

#define META_CR_TxVECINT_BHALT					(0x04820500)
#define META_CR_PERF_ICORE0						(0x0480FFD0)
#define META_CR_PERF_ICORE1						(0x0480FFD8)
#define META_CR_PERF_ICORE_DCACHEMISS			(0x8)

#define META_CR_PERF_COUNT(CTRL, THR)			((META_CR_PERF_COUNT_CTRL_##CTRL << META_CR_PERF_COUNT_CTRL_SHIFT) | \
												 (THR << META_CR_PERF_COUNT_THR_SHIFT))

#define	META_CR_TXUXXRXDT_OFFSET				(META_CR_CTRLREG_BASE(0) + 0x0000FFF0)
#define	META_CR_TXUXXRXRQ_OFFSET				(META_CR_CTRLREG_BASE(0) + 0x0000FFF8)

#define META_CR_TXUXXRXRQ_DREADY_BIT			(0x80000000)	/* Poll for done */
#define META_CR_TXUXXRXRQ_RDnWR_BIT  			(0x00010000)	/* Set for read  */
#define META_CR_TXUXXRXRQ_TX_S       			(12)
#define META_CR_TXUXXRXRQ_RX_S       			(4)
#define META_CR_TXUXXRXRQ_UXX_S      			(0)

#define META_CR_TXUIN_ID						(0x0)			/* Internal ctrl regs */
#define META_CR_TXUD0_ID						(0x1)			/* Data unit regs */
#define META_CR_TXUD1_ID						(0x2)			/* Data unit regs */
#define META_CR_TXUA0_ID						(0x3)			/* Address unit regs */
#define META_CR_TXUA1_ID						(0x4)			/* Address unit regs */
#define META_CR_TXUPC_ID						(0x5)			/* PC registers */

/* Macros to calculate register access values */
#define META_CR_CORE_REG(Thr, RegNum, Unit)	(((Thr)			<< META_CR_TXUXXRXRQ_TX_S ) | \
											 ((RegNum)		<< META_CR_TXUXXRXRQ_RX_S ) | \
											 ((Unit)		<< META_CR_TXUXXRXRQ_UXX_S))

#define META_CR_THR0_PC		META_CR_CORE_REG(0, 0, META_CR_TXUPC_ID)
#define META_CR_THR0_PCX	META_CR_CORE_REG(0, 1, META_CR_TXUPC_ID)
#define META_CR_THR0_SP		META_CR_CORE_REG(0, 0, META_CR_TXUA0_ID)

#define META_CR_THR1_PC		META_CR_CORE_REG(1, 0, META_CR_TXUPC_ID)
#define META_CR_THR1_PCX	META_CR_CORE_REG(1, 1, META_CR_TXUPC_ID)
#define META_CR_THR1_SP		META_CR_CORE_REG(1, 0, META_CR_TXUA0_ID)

#define SP_ACCESS(Thread)	META_CR_CORE_REG(Thread, 0, META_CR_TXUA0_ID)
#define PC_ACCESS(Thread)	META_CR_CORE_REG(Thread, 0, META_CR_TXUPC_ID)

#define	META_CR_COREREG_ENABLE			(0x0000000)
#define	META_CR_COREREG_STATUS			(0x0000010)
#define	META_CR_COREREG_DEFR			(0x00000A0)
#define	META_CR_COREREG_PRIVEXT			(0x00000E8)

#define	META_CR_T0ENABLE_OFFSET			(META_CR_CTRLREG_BASE(0) + META_CR_COREREG_ENABLE)
#define	META_CR_T0STATUS_OFFSET			(META_CR_CTRLREG_BASE(0) + META_CR_COREREG_STATUS)
#define	META_CR_T0DEFR_OFFSET			(META_CR_CTRLREG_BASE(0) + META_CR_COREREG_DEFR)
#define	META_CR_T0PRIVEXT_OFFSET		(META_CR_CTRLREG_BASE(0) + META_CR_COREREG_PRIVEXT)

#define	META_CR_T1ENABLE_OFFSET			(META_CR_CTRLREG_BASE(1) + META_CR_COREREG_ENABLE)
#define	META_CR_T1STATUS_OFFSET			(META_CR_CTRLREG_BASE(1) + META_CR_COREREG_STATUS)
#define	META_CR_T1DEFR_OFFSET			(META_CR_CTRLREG_BASE(1) + META_CR_COREREG_DEFR)
#define	META_CR_T1PRIVEXT_OFFSET		(META_CR_CTRLREG_BASE(1) + META_CR_COREREG_PRIVEXT)

#define META_CR_TXENABLE_ENABLE_BIT		(0x00000001)   /* Set if running */
#define META_CR_TXSTATUS_PRIV			(0x00020000)
#define META_CR_TXPRIVEXT_MINIM			(0x00000080)

#define META_MEM_GLOBAL_RANGE_BIT				(0x80000000)


/************************************************************************
* META LDR Format
************************************************************************/
/* Block header structure */
typedef struct 
{
	IMG_UINT32	ui32DevID;
	IMG_UINT32	ui32SLCode;
	IMG_UINT32	ui32SLData;
	IMG_UINT16	ui16PLCtrl;
	IMG_UINT16	ui16CRC;

} RGX_META_LDR_BLOCK_HDR;

/* High level data stream block  structure */
typedef struct 
{
	IMG_UINT16	ui16Cmd;
	IMG_UINT16	ui16Length;
	IMG_UINT32	ui32Next;
	IMG_UINT32	aui32CmdData[4];

} RGX_META_LDR_L1_DATA_BLK;

/* High level data stream block  structure */
typedef struct
{
	IMG_UINT16	ui16Tag;
	IMG_UINT16	ui16Length;
	IMG_UINT32	aui32BlockData[4];

} RGX_META_LDR_L2_DATA_BLK;

/* Config command structure */
typedef struct
{
	IMG_UINT32	ui32Type;
	IMG_UINT32	aui32BlockData[4];

} RGX_META_LDR_CFG_BLK;

/* Block type definitions */
#define RGX_META_LDR_COMMENT_TYPE_MASK			(0x0010)
#define RGX_META_LDR_BLK_IS_COMMENT(X)			((X & RGX_META_LDR_COMMENT_TYPE_MASK) != 0)

/* Command definitions
	Value	Name			Description
	0		LoadMem			Load memory with binary data.
	1		LoadCore		Load a set of core registers.
	2		LoadMMReg		Load a set of memory mapped registers.
	3		StartThreads	Set each thread PC and SP, then enable	threads.
	4		ZeroMem			Zeros a memory region.
	5		Config			Perform	a configuration command. */
#define RGX_META_LDR_CMD_MASK				(0x000F)

#define RGX_META_LDR_CMD_LOADMEM			(0x0000)
#define RGX_META_LDR_CMD_LOADCORE			(0x0001)
#define RGX_META_LDR_CMD_LOADMMREG			(0x0002)
#define RGX_META_LDR_CMD_START_THREADS		(0x0003)
#define RGX_META_LDR_CMD_ZEROMEM			(0x0004)
#define RGX_META_LDR_CMD_CONFIG			(0x0005)

/* Config Command definitions
	Value	Name		Description
	0		Pause		Pause for x times 100 instructions
	1		Read		Read a value from register - No value return needed.
						Utilises effects of issuing reads to certain registers
	2		Write		Write to mem location
	3		MemSet		Set mem to value
	4		MemCheck	check mem for specific value.*/
#define RGX_META_LDR_CFG_PAUSE			(0x0000)
#define RGX_META_LDR_CFG_READ			(0x0001)
#define RGX_META_LDR_CFG_WRITE			(0x0002)
#define RGX_META_LDR_CFG_MEMSET			(0x0003)
#define RGX_META_LDR_CFG_MEMCHECK		(0x0004)


/************************************************************************
* RGX FW segmented MMU definitions
************************************************************************/
/* All threads can access the segment */
#define RGXFW_SEGMMU_ALLTHRS	(0xf << 8)
/* Writable */
#define RGXFW_SEGMMU_WRITEABLE	(0x1 << 1)
/* All threads can access and writable */
#define RGXFW_SEGMMU_ALLTHRS_WRITEABLE	(RGXFW_SEGMMU_ALLTHRS | RGXFW_SEGMMU_WRITEABLE)

/* Direct map region 11 used for mapping GPU memory */
#define RGXFW_SEGMMU_DMAP_GPU_ID			(11)
#define RGXFW_SEGMMU_DMAP_GPU_ADDR_START	(0x07800000U)

/* Segment IDs */
#define RGXFW_SEGMMU_DATA_ID			(1)
#define RGXFW_SEGMMU_BOOTLDR_ID			(2)
#define RGXFW_SEGMMU_TEXT_ID			(RGXFW_SEGMMU_BOOTLDR_ID)

#define RGXFW_SEGMMU_META_DM_ID			(0x7)


/*
 * SLC caching strategy in S7 is emitted through the segment MMU. All the segments
 * configured through the macro RGXFW_SEGMMU_OUTADDR_TOP are CACHED in the SLC.
 * The interface has been kept the same to simplify the code changes.
 * The bifdm argument is ignored (no longer relevant) in S7.
 */
#define RGXFW_SEGMMU_OUTADDR_TOP_S7_ERN_45914(pers, coheren, mmu_ctx)  ( (((IMG_UINT64) ((pers)    & 0x3))  << 52) | \
                                                                         (((IMG_UINT64) ((mmu_ctx) & 0xFF)) << 44) | \
                                                                         (((IMG_UINT64) ((coheren) & 0x1))  << 40) )
#define RGXFW_SEGMMU_OUTADDR_TOP_S7_SLC_CACHED_ERN_45914(mmu_ctx)      RGXFW_SEGMMU_OUTADDR_TOP_S7_ERN_45914(0x3, 0x0, mmu_ctx)
#define RGXFW_SEGMMU_OUTADDR_TOP_S7_SLC_UNCACHED_ERN_45914(mmu_ctx)    RGXFW_SEGMMU_OUTADDR_TOP_S7_ERN_45914(0x0, 0x1, mmu_ctx)
/* Set FW code/data cached in the SLC as default */
#define RGXFW_SEGMMU_OUTADDR_TOP_ERN_45914(mmu_ctx, bifdm)             RGXFW_SEGMMU_OUTADDR_TOP_S7_SLC_CACHED_ERN_45914(mmu_ctx | (bifdm&0x0))

/* To configure the Page Catalog and BIF-DM fed into the BIF for Garten accesses through this segment */
#define RGXFW_SEGMMU_OUTADDR_TOP_PRE_S7(pc, bifdm)              ( (((IMG_UINT64) ((pc)    & 0xF)) << 44) | \
                                                                  (((IMG_UINT64) ((bifdm) & 0xF)) << 40) )

#if !defined(__KERNEL__) && defined(RGX_FEATURE_META)
#if defined(HW_ERN_45914)
#define RGXFW_SEGMMU_OUTADDR_TOP                  RGXFW_SEGMMU_OUTADDR_TOP_ERN_45914
#define RGXFW_SEGMMU_OUTADDR_TOP_S7_SLC_UNCACHED  RGXFW_SEGMMU_OUTADDR_TOP_S7_SLC_UNCACHED_ERN_45914
#else
#define RGXFW_SEGMMU_OUTADDR_TOP                  RGXFW_SEGMMU_OUTADDR_TOP_PRE_S7
#endif
#endif


/* META segments have 4kB minimum size */
#define RGXFW_SEGMMU_ALIGN			(0x1000) 

/* Segmented MMU registers (n = segment id) */
#define META_CR_MMCU_SEGMENTn_BASE(n)			(0x04850000 + (n)*0x10)
#define META_CR_MMCU_SEGMENTn_LIMIT(n)			(0x04850004 + (n)*0x10)
#define META_CR_MMCU_SEGMENTn_OUTA0(n)			(0x04850008 + (n)*0x10)
#define META_CR_MMCU_SEGMENTn_OUTA1(n)			(0x0485000C + (n)*0x10)

/* The following defines must be recalculated if the Meta MMU segments
 * used to access Host-FW data are changed
 * Current combinations are:
 * - SLC uncached, META cached,   FW base address 0x70000000
 * - SLC uncached, META uncached, FW base address 0xF0000000
 * - SLC cached,   META cached,   FW base address 0x10000000
 * - SLC cached,   META uncached, FW base address 0x90000000
 */
#define RGXFW_SEGMMU_DATA_BASE_ADDRESS        (0x10000000)
#define RGXFW_SEGMMU_DATA_META_CACHED         (0x0)
#define RGXFW_SEGMMU_DATA_META_UNCACHED       (META_MEM_GLOBAL_RANGE_BIT) // 0x80000000
#define RGXFW_SEGMMU_DATA_META_CACHE_MASK     (META_MEM_GLOBAL_RANGE_BIT)
/* For non-VIVT SLCs the cacheability of the FW data in the SLC is selected
 * in the PTEs for the FW data, not in the Meta Segment MMU,
 * which means these defines have no real effect in those cases */
#define RGXFW_SEGMMU_DATA_VIVT_SLC_CACHED     (0x0)
#define RGXFW_SEGMMU_DATA_VIVT_SLC_UNCACHED   (0x60000000)
#define RGXFW_SEGMMU_DATA_VIVT_SLC_CACHE_MASK (0x60000000)


/************************************************************************
* RGX FW RGX MMU definitions
************************************************************************/
#if defined(RGX_FEATURE_SLC_VIVT) && defined(SUPPORT_TRUSTED_DEVICE)

#define META_MMU_CONTEXT_MAPPING        (0x1) /* fw data */
#define META_MMU_CONTEXT_MAPPING_CODE   (0x0) /* fw code */

#else 

#define META_MMU_CONTEXT_MAPPING       (0x0)

#endif 

#if defined(SECURE_FW_CODE_OSID) && defined(RGX_FEATURE_META)
#error "SECURE_FW_CODE_OSID is not supported on META cores"
#endif


/************************************************************************
* RGX FW Bootloader defaults
************************************************************************/
#define RGXFW_BOOTLDR_META_ADDR		(0x40000000)
#define RGXFW_BOOTLDR_DEVV_ADDR_0	(0xC0000000)
#define RGXFW_BOOTLDR_DEVV_ADDR_1	(0x000000E1)
#define RGXFW_BOOTLDR_DEVV_ADDR		((((IMG_UINT64) RGXFW_BOOTLDR_DEVV_ADDR_1) << 32) | RGXFW_BOOTLDR_DEVV_ADDR_0)
#define RGXFW_BOOTLDR_LIMIT			(0x1FFFF000)

/* Bootloader configuration offset is in dwords (512 bytes) */
#define RGXFW_BOOTLDR_CONF_OFFSET	(0x80)


/************************************************************************
* RGX META Stack
************************************************************************/
#define RGX_META_STACK_SIZE  (0x1000)

/************************************************************************
 RGX META Core memory
 ====================
 Sections:
    * Stack: Thread internal stack
	* BSS: Internal/private FW memory (rgxfw_ctl.h and static vars)
	* CCB Buf: DMA buffer to request CCB data
	* Code: Functions marked with RGXFW_COREMEM_CODE_<xx>
	
   +---------+  0
   |         |
   |  Stack  |
   |         |
   +---------+- RGX_META_COREMEM_2ND_STACK_ADDR
   *         *
   * 2nd Thr * #if RGXFW_META_SUPPORT_2ND_THREAD
   *  Stack  *    
   *         *
   +---------+- RGX_META_COREMEM_BSS_ADDR
   |         |
   |   BSS   |
   |         |
   +---------+- RGX_META_COREMEM_CCBBUF_ADDR
   *         *
   * CCB Buf * #if RGX_FEATURE_META_DMA
   *         *
   +---------+- RGX_META_COREMEM_DATA_SIZE
   |         |
   |  Code   |
   |         |
   +---------+
   /         /
   / Unused  /
   /         /
   +---------+  RGX_META_COREMEM_SIZE
************************************************************************/
/* code and data both map to the same physical memory */
#define RGX_META_COREMEM_CODE_ADDR   (0x80000000)
#define RGX_META_COREMEM_DATA_ADDR   (0x82000000)
#define RGX_META_COREMEM_OFFSET_MASK (0x01ffffff)

#define RGX_META_COREMEM_STACK_ADDR      (RGX_META_COREMEM_DATA_ADDR)

#if defined(RGXFW_META_SUPPORT_2ND_THREAD)
	#define RGX_META_COREMEM_STACK_SIZE      (RGX_META_STACK_SIZE*2)
	#define RGX_META_COREMEM_BSS_SIZE        (0xF40)
	#define RGX_META_COREMEM_2ND_STACK_ADDR  (RGX_META_COREMEM_STACK_ADDR + RGX_META_STACK_SIZE)
#else
	#define RGX_META_COREMEM_STACK_SIZE      (RGX_META_STACK_SIZE)
	#define RGX_META_COREMEM_BSS_SIZE        (0xE00)
#endif

#define RGX_META_COREMEM_BSS_ADDR            (RGX_META_COREMEM_STACK_ADDR + RGX_META_COREMEM_STACK_SIZE)

#if defined(RGX_FEATURE_META_DMA)
	#define RGX_META_COREMEM_CCBBUF_ADDR     (RGX_META_COREMEM_BSS_ADDR + RGX_META_COREMEM_BSS_SIZE)
	#define RGX_META_COREMEM_CCBBUF_SIZE     (0x3C0)
	#define RGXFW_DMA_BLOCK_SIZE             (32U)
	#define RGXFW_DMA_BLOCK_ALIGNMENT_MASK   (0xFFFFFFE0)
#else
	#define RGX_META_COREMEM_CCBBUF_SIZE     (0x0)
	#define RGXFW_DMA_BLOCK_SIZE             (0x0)
	#define RGXFW_DMA_BLOCK_ALIGNMENT_MASK   (0x0)
#endif

#define RGX_META_COREMEM_DATA_SIZE       (RGX_META_COREMEM_STACK_SIZE + RGX_META_COREMEM_BSS_SIZE + RGX_META_COREMEM_CCBBUF_SIZE)

#if defined (RGX_META_COREMEM_CODE)
#define RGX_META_COREMEM_CODE_SIZE   (RGX_META_COREMEM_SIZE - RGX_META_COREMEM_DATA_SIZE)
#endif

/* because data and code share the same memory, base address for code is offset by the data */
#define RGX_META_COREMEM_CODE_BADDR  (RGX_META_COREMEM_CODE_ADDR + RGX_META_COREMEM_DATA_SIZE)

#if !defined(__KERNEL__)
#define RGX_META_IS_COREMEM_CODE(A)  ((((IMG_UINT32)A) >= RGX_META_COREMEM_CODE_BADDR) && (((IMG_UINT32)A) < (RGX_META_COREMEM_CODE_ADDR + RGX_META_COREMEM_SIZE)))
#define RGX_META_IS_COREMEM_DATA(A)  ((((IMG_UINT32)A) >= RGX_META_COREMEM_DATA_ADDR) && (((IMG_UINT32)A) < (RGX_META_COREMEM_DATA_ADDR + RGX_META_COREMEM_DATA_SIZE)))
#define RGX_META_IS_COREMEM_FUNC(A)  ((((IMG_UINT32)&A) >= RGX_META_COREMEM_CODE_ADDR) && (((IMG_UINT32)&A) < (RGX_META_COREMEM_CODE_ADDR + RGX_META_COREMEM_SIZE*2)))
#else
#define RGX_META_IS_COREMEM_CODE(A, B)  (((A) >= RGX_META_COREMEM_CODE_ADDR) && ((A) < (RGX_META_COREMEM_CODE_ADDR + (B))))
#define RGX_META_IS_COREMEM_DATA(A, B)  (((A) >= RGX_META_COREMEM_DATA_ADDR) && ((A) < (RGX_META_COREMEM_DATA_ADDR + (B))))
#endif

/************************************************************************
* 2nd thread
************************************************************************/
#define RGXFW_THR1_PC		(0x18930000)
#define RGXFW_THR1_SP		(0x78890000)

/************************************************************************
* META compatibility
************************************************************************/

#define META_CR_CORE_ID			(0x04831000)
#define META_CR_CORE_ID_VER_SHIFT	(16U)
#define META_CR_CORE_ID_VER_CLRMSK	(0XFF00FFFFU)

#if !defined(__KERNEL__) && defined(RGX_FEATURE_META)

	#if (RGX_FEATURE_META == MTP218)
	#define RGX_CR_META_CORE_ID_VALUE 0x19
	#elif (RGX_FEATURE_META == MTP219)
	#define RGX_CR_META_CORE_ID_VALUE 0x1E
	#elif (RGX_FEATURE_META == LTP218)
	#define RGX_CR_META_CORE_ID_VALUE 0x1C
	#elif (RGX_FEATURE_META == LTP217)
	#define RGX_CR_META_CORE_ID_VALUE 0x1F
	#else
	#error "Unknown META ID"
	#endif
#else

	#define RGX_CR_META_MTP218_CORE_ID_VALUE 0x19
	#define RGX_CR_META_MTP219_CORE_ID_VALUE 0x1E
	#define RGX_CR_META_LTP218_CORE_ID_VALUE 0x1C
	#define RGX_CR_META_LTP217_CORE_ID_VALUE 0x1F

#endif
#define RGXFW_PROCESSOR_META        "META"


#endif /*  __RGX_META_H__ */

/******************************************************************************
 End of file (rgx_meta.h)
******************************************************************************/


