123e47edeSVikram Kanigiri /* 24213e9baSAntonio Nino Diaz * Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved. 323e47edeSVikram Kanigiri * 482cb2c1aSdp-arm * SPDX-License-Identifier: BSD-3-Clause 523e47edeSVikram Kanigiri */ 623e47edeSVikram Kanigiri 7c3cf06f1SAntonio Nino Diaz #ifndef CCI_H 8c3cf06f1SAntonio Nino Diaz #define CCI_H 923e47edeSVikram Kanigiri 1009d40e0eSAntonio Nino Diaz #include <lib/utils_def.h> 114213e9baSAntonio Nino Diaz 1223e47edeSVikram Kanigiri /* Slave interface offsets from PERIPHBASE */ 134213e9baSAntonio Nino Diaz #define SLAVE_IFACE6_OFFSET UL(0x7000) 144213e9baSAntonio Nino Diaz #define SLAVE_IFACE5_OFFSET UL(0x6000) 154213e9baSAntonio Nino Diaz #define SLAVE_IFACE4_OFFSET UL(0x5000) 164213e9baSAntonio Nino Diaz #define SLAVE_IFACE3_OFFSET UL(0x4000) 174213e9baSAntonio Nino Diaz #define SLAVE_IFACE2_OFFSET UL(0x3000) 184213e9baSAntonio Nino Diaz #define SLAVE_IFACE1_OFFSET UL(0x2000) 194213e9baSAntonio Nino Diaz #define SLAVE_IFACE0_OFFSET UL(0x1000) 2023e47edeSVikram Kanigiri #define SLAVE_IFACE_OFFSET(index) (SLAVE_IFACE0_OFFSET + \ 214213e9baSAntonio Nino Diaz (UL(0x1000) * (index))) 2223e47edeSVikram Kanigiri 2323e47edeSVikram Kanigiri /* Slave interface event and count register offsets from PERIPHBASE */ 244213e9baSAntonio Nino Diaz #define EVENT_SELECT7_OFFSET UL(0x80000) 254213e9baSAntonio Nino Diaz #define EVENT_SELECT6_OFFSET UL(0x70000) 264213e9baSAntonio Nino Diaz #define EVENT_SELECT5_OFFSET UL(0x60000) 274213e9baSAntonio Nino Diaz #define EVENT_SELECT4_OFFSET UL(0x50000) 284213e9baSAntonio Nino Diaz #define EVENT_SELECT3_OFFSET UL(0x40000) 294213e9baSAntonio Nino Diaz #define EVENT_SELECT2_OFFSET UL(0x30000) 304213e9baSAntonio Nino Diaz #define EVENT_SELECT1_OFFSET UL(0x20000) 314213e9baSAntonio Nino Diaz #define EVENT_SELECT0_OFFSET UL(0x10000) 3223e47edeSVikram Kanigiri #define EVENT_OFFSET(index) (EVENT_SELECT0_OFFSET + \ 334213e9baSAntonio Nino Diaz (UL(0x10000) * (index))) 3423e47edeSVikram Kanigiri 3523e47edeSVikram Kanigiri /* Control and ID register offsets */ 364213e9baSAntonio Nino Diaz #define CTRL_OVERRIDE_REG U(0x0) 374213e9baSAntonio Nino Diaz #define SECURE_ACCESS_REG U(0x8) 384213e9baSAntonio Nino Diaz #define STATUS_REG U(0xc) 394213e9baSAntonio Nino Diaz #define IMPRECISE_ERR_REG U(0x10) 404213e9baSAntonio Nino Diaz #define PERFMON_CTRL_REG U(0x100) 414213e9baSAntonio Nino Diaz #define IFACE_MON_CTRL_REG U(0x104) 4223e47edeSVikram Kanigiri 4323e47edeSVikram Kanigiri /* Component and peripheral ID registers */ 444213e9baSAntonio Nino Diaz #define PERIPHERAL_ID0 U(0xFE0) 454213e9baSAntonio Nino Diaz #define PERIPHERAL_ID1 U(0xFE4) 464213e9baSAntonio Nino Diaz #define PERIPHERAL_ID2 U(0xFE8) 474213e9baSAntonio Nino Diaz #define PERIPHERAL_ID3 U(0xFEC) 484213e9baSAntonio Nino Diaz #define PERIPHERAL_ID4 U(0xFD0) 494213e9baSAntonio Nino Diaz #define PERIPHERAL_ID5 U(0xFD4) 504213e9baSAntonio Nino Diaz #define PERIPHERAL_ID6 U(0xFD8) 514213e9baSAntonio Nino Diaz #define PERIPHERAL_ID7 U(0xFDC) 5223e47edeSVikram Kanigiri 534213e9baSAntonio Nino Diaz #define COMPONENT_ID0 U(0xFF0) 544213e9baSAntonio Nino Diaz #define COMPONENT_ID1 U(0xFF4) 554213e9baSAntonio Nino Diaz #define COMPONENT_ID2 U(0xFF8) 564213e9baSAntonio Nino Diaz #define COMPONENT_ID3 U(0xFFC) 574213e9baSAntonio Nino Diaz #define COMPONENT_ID4 U(0x1000) 584213e9baSAntonio Nino Diaz #define COMPONENT_ID5 U(0x1004) 594213e9baSAntonio Nino Diaz #define COMPONENT_ID6 U(0x1008) 604213e9baSAntonio Nino Diaz #define COMPONENT_ID7 U(0x100C) 6123e47edeSVikram Kanigiri 6223e47edeSVikram Kanigiri /* Slave interface register offsets */ 634213e9baSAntonio Nino Diaz #define SNOOP_CTRL_REG U(0x0) 644213e9baSAntonio Nino Diaz #define SH_OVERRIDE_REG U(0x4) 654213e9baSAntonio Nino Diaz #define READ_CHNL_QOS_VAL_OVERRIDE_REG U(0x100) 664213e9baSAntonio Nino Diaz #define WRITE_CHNL_QOS_VAL_OVERRIDE_REG U(0x104) 674213e9baSAntonio Nino Diaz #define MAX_OT_REG U(0x110) 6823e47edeSVikram Kanigiri 6923e47edeSVikram Kanigiri /* Snoop Control register bit definitions */ 704213e9baSAntonio Nino Diaz #define DVM_EN_BIT BIT_32(1) 714213e9baSAntonio Nino Diaz #define SNOOP_EN_BIT BIT_32(0) 724213e9baSAntonio Nino Diaz #define SUPPORT_SNOOPS BIT_32(30) 734213e9baSAntonio Nino Diaz #define SUPPORT_DVM BIT_32(31) 7423e47edeSVikram Kanigiri 7523e47edeSVikram Kanigiri /* Status register bit definitions */ 764213e9baSAntonio Nino Diaz #define CHANGE_PENDING_BIT BIT_32(0) 7723e47edeSVikram Kanigiri 7823e47edeSVikram Kanigiri /* Event and count register offsets */ 794213e9baSAntonio Nino Diaz #define EVENT_SELECT_REG U(0x0) 804213e9baSAntonio Nino Diaz #define EVENT_COUNT_REG U(0x4) 814213e9baSAntonio Nino Diaz #define COUNT_CNTRL_REG U(0x8) 824213e9baSAntonio Nino Diaz #define COUNT_OVERFLOW_REG U(0xC) 8323e47edeSVikram Kanigiri 8423e47edeSVikram Kanigiri /* Slave interface monitor registers */ 854213e9baSAntonio Nino Diaz #define INT_MON_REG_SI0 U(0x90000) 864213e9baSAntonio Nino Diaz #define INT_MON_REG_SI1 U(0x90004) 874213e9baSAntonio Nino Diaz #define INT_MON_REG_SI2 U(0x90008) 884213e9baSAntonio Nino Diaz #define INT_MON_REG_SI3 U(0x9000C) 894213e9baSAntonio Nino Diaz #define INT_MON_REG_SI4 U(0x90010) 904213e9baSAntonio Nino Diaz #define INT_MON_REG_SI5 U(0x90014) 914213e9baSAntonio Nino Diaz #define INT_MON_REG_SI6 U(0x90018) 9223e47edeSVikram Kanigiri 9323e47edeSVikram Kanigiri /* Master interface monitor registers */ 944213e9baSAntonio Nino Diaz #define INT_MON_REG_MI0 U(0x90100) 954213e9baSAntonio Nino Diaz #define INT_MON_REG_MI1 U(0x90104) 964213e9baSAntonio Nino Diaz #define INT_MON_REG_MI2 U(0x90108) 974213e9baSAntonio Nino Diaz #define INT_MON_REG_MI3 U(0x9010c) 984213e9baSAntonio Nino Diaz #define INT_MON_REG_MI4 U(0x90110) 994213e9baSAntonio Nino Diaz #define INT_MON_REG_MI5 U(0x90114) 10023e47edeSVikram Kanigiri 10123e47edeSVikram Kanigiri #define SLAVE_IF_UNUSED -1 10223e47edeSVikram Kanigiri 103d5dfdeb6SJulius Werner #ifndef __ASSEMBLER__ 10423e47edeSVikram Kanigiri 105*3d7caf47SMaheedhar Bollapalli #include <stddef.h> 10623e47edeSVikram Kanigiri #include <stdint.h> 10723e47edeSVikram Kanigiri 10823e47edeSVikram Kanigiri /* Function declarations */ 10923e47edeSVikram Kanigiri 11023e47edeSVikram Kanigiri /* 11123e47edeSVikram Kanigiri * The ARM CCI driver needs the following: 112e33fd445SJeenu Viswambharan * 1. Base address of the CCI product 11323e47edeSVikram Kanigiri * 2. An array of map between AMBA 4 master ids and ACE/ACE lite slave 11423e47edeSVikram Kanigiri * interfaces. 11523e47edeSVikram Kanigiri * 3. Size of the array. 11623e47edeSVikram Kanigiri * 11723e47edeSVikram Kanigiri * SLAVE_IF_UNUSED should be used in the map to represent no AMBA 4 master exists 11823e47edeSVikram Kanigiri * for that interface. 11923e47edeSVikram Kanigiri */ 120*3d7caf47SMaheedhar Bollapalli void cci_init(uintptr_t base, const int *map, size_t num_cci_masters); 12123e47edeSVikram Kanigiri 122*3d7caf47SMaheedhar Bollapalli void cci_enable_snoop_dvm_reqs(size_t master_id); 123*3d7caf47SMaheedhar Bollapalli void cci_disable_snoop_dvm_reqs(size_t master_id); 12423e47edeSVikram Kanigiri 125d5dfdeb6SJulius Werner #endif /* __ASSEMBLER__ */ 126c3cf06f1SAntonio Nino Diaz #endif /* CCI_H */ 127