arm-trusted-firmware/plat/mediatek/mt8183/drivers/mcsi/mcsi.h
Justin Chadwell 621d5f2a5b Update mediatek platform to not rely on undefined overflow behaviour
This consists of ensuring that the left operand of each shift is
unsigned when the operation might overflow into the sign bit.

Change-Id: If5a88e1b880bcb2be2278398cf5109a6d877e632
Signed-off-by: Justin Chadwell <justin.chadwell@arm.com>
2019-07-12 09:12:12 +01:00

116 lines
3.2 KiB
C

/*
* Copyright (c) 2019, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef MCSI_H
#define MCSI_H
#define SLAVE_IFACE7_OFFSET 0x1700
#define SLAVE_IFACE6_OFFSET 0x1600
#define SLAVE_IFACE5_OFFSET 0x1500
#define SLAVE_IFACE4_OFFSET 0x1400
#define SLAVE_IFACE3_OFFSET 0x1300
#define SLAVE_IFACE2_OFFSET 0x1200
#define SLAVE_IFACE1_OFFSET 0x1100
#define SLAVE_IFACE0_OFFSET 0x1000
#define SLAVE_IFACE_OFFSET(index) (SLAVE_IFACE0_OFFSET + \
(0x100 * (index)))
/* Control and ID register offsets */
#define CENTRAL_CTRL_REG 0x0
#define ERR_FLAG_REG 0x4
#define SF_INIT_REG 0x10
#define SF_CTRL_REG 0x14
#define DCM_CTRL_REG 0x18
#define ERR_FLAG2_REG 0x20
#define SNP_PENDING_REG 0x28
#define ACP_PENDING_REG 0x2c
#define FLUSH_SF 0x500
#define SYS_CCE_CTRL 0x2000
#define MST1_CTRL 0x2100
#define MTS2_CTRL 0x2200
#define XBAR_ARAW_ARB 0x3000
#define XBAR_R_ARB 0x3004
/* Slave interface register offsets */
#define SNOOP_CTRL_REG 0x0
#define QOS_CTRL_REG 0x4
#define QOS_OVERRIDE_REG 0x8
#define QOS_TARGET_REG 0xc
#define BD_CTRL_REG 0x40
/* Snoop Control register bit definitions */
#define DVM_SUPPORT (1U << 31)
#define SNP_SUPPORT (1 << 30)
#define SHAREABLE_OVWRT (1 << 2)
#define DVM_EN_BIT (1 << 1)
#define SNOOP_EN_BIT (1 << 0)
#define SF2_INIT_DONE (1 << 17)
#define SF1_INIT_DONE (1 << 16)
#define TRIG_SF2_INIT (1 << 1)
#define TRIG_SF1_INIT (1 << 0)
/* Status register bit definitions */
#define SNP_PENDING 31
/* Status bit */
#define NS_ACC 1
#define S_ACC 0
/* Central control register bit definitions */
#define PMU_SECURE_ACC_EN (1 << 4)
#define INT_EN (1 << 3)
#define SECURE_ACC_EN (1 << 2)
#define DVM_DIS (1 << 1)
#define SNOOP_DIS (1 << 0)
#define MSCI_MEMORY_SZ (0x10000)
#define MCSI_REG_ACCESS_READ (0x0)
#define MCSI_REG_ACCESS_WRITE (0x1)
#define MCSI_REG_ACCESS_SET_BITMASK (0x2)
#define MCSI_REG_ACCESS_CLEAR_BITMASK (0x3)
#define NR_MAX_SLV (7)
/* ICCS */
#define CACHE_INSTR_EN (1 << 2)
#define IDLE_CACHE (1 << 3)
#define USE_SHARED_CACHE (1 << 4)
#define CACHE_SHARED_PRE_EN (1 << 5)
#define CACHE_SHARED_POST_EN (1 << 6)
#define ACP_PENDING_MASK (0x1007f)
#define CCI_CLK_CTRL (MCUCFG_BASE + 0x660)
#ifndef __ASSEMBLY__
#include <plat/common/common_def.h>
#include <stdint.h>
/* Function declarations */
/*
* The MCSI driver must be initialized with the base address of the
* MCSI device in the platform memory map, and the cluster indices for
* the MCSI slave interfaces 3 and 4 respectively. These are the fully
* coherent ACE slave interfaces of MCSI.
* The cluster indices must either be 0 or 1, corresponding to the level 1
* affinity instance of the mpidr representing the cluster. A negative cluster
* index indicates that no cluster is present on that slave interface.
*/
void mcsi_init(unsigned long cci_base,
unsigned int num_cci_masters);
void mcsi_cache_flush(void);
void cci_enable_cluster_coherency(unsigned long mpidr);
void cci_disable_cluster_coherency(unsigned long mpidr);
void cci_secure_switch(unsigned int ns);
void cci_init_sf(void);
unsigned long cci_reg_access(unsigned int op, unsigned long offset, unsigned long val);
#endif /* __ASSEMBLY__ */
#endif /* MCSI_H */