Commit 22d12c41 authored by Alexei Fedorov's avatar Alexei Fedorov Committed by TrustedFirmware Code Review
Browse files

Merge "drivers: add a driver for snoop control unit" into integration

parents 8a0a8199 c20c0525
/*
* Copyright (c) 2019, Arm Limited. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <assert.h>
#include <drivers/arm/scu.h>
#include <lib/mmio.h>
#include <plat/common/platform.h>
#include <stdint.h>
/*******************************************************************************
* Turn ON snoop control unit. This is needed to synchronize the data between
* CPU's.
******************************************************************************/
void enable_snoop_ctrl_unit(uintptr_t base)
{
uint32_t scu_ctrl;
INFO("[SCU]: enabling snoop control unit ... \n");
assert(base != 0U);
scu_ctrl = mmio_read_32(base + SCU_CTRL_REG);
/* already enabled? */
if ((scu_ctrl & SCU_ENABLE_BIT) != 0) {
return;
}
scu_ctrl |= SCU_ENABLE_BIT;
mmio_write_32(base + SCU_CTRL_REG, scu_ctrl);
}
/*******************************************************************************
* Snoop Control Unit configuration register. This is read-only register and
* contains information such as
* - number of CPUs present
* - is a particular CPU operating in SMP mode or AMP mode
* - data cache size of a particular CPU
* - does SCU has ACP port
* - is L2CPRESENT
* NOTE: user of this API should interpert the bits in this register according
* to the TRM
******************************************************************************/
uint32_t read_snoop_ctrl_unit_cfg(uintptr_t base)
{
assert(base != 0U);
return mmio_read_32(base + SCU_CFG_REG);
}
/*
* Copyright (c) 2019, Arm Limited. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef SCU_H
#define SCU_H
#include <stdint.h>
#define SCU_CTRL_REG 0x00
#define SCU_CFG_REG 0x04
#define SCU_ENABLE_BIT (1 << 0)
void enable_snoop_ctrl_unit(uintptr_t base);
uint32_t read_snoop_ctrl_unit_cfg(uintptr_t base);
#endif /* SCU_H */
......@@ -4,11 +4,10 @@
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <assert.h>
#include <drivers/arm/gicv2.h>
#include <lib/psci/psci.h>
#include <plat/arm/common/plat_arm.h>
#include <plat/common/platform.h>
#include <drivers/arm/gicv2.h>
/*******************************************************************************
* Platform handler called when a power domain is about to be turned on. The
......
......@@ -334,6 +334,9 @@
#define A5DS_HOLD_STATE_WAIT 0
#define A5DS_HOLD_STATE_GO 1
/* Snoop Control Unit base address */
#define A5DS_SCU_BASE 0x1C000000
/*
* GIC related constants to cater for GICv2
*/
......
......@@ -4,12 +4,17 @@
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <drivers/arm/scu.h>
#include <plat/arm/common/plat_arm.h>
void plat_arm_sp_min_early_platform_setup(u_register_t arg0, u_register_t arg1,
u_register_t arg2, u_register_t arg3)
{
arm_sp_min_early_platform_setup((void *)arg0, arg1, arg2, (void *)arg3);
/* enable snoop control unit */
enable_snoop_ctrl_unit(A5DS_SCU_BASE);
}
/*
......
......@@ -5,7 +5,8 @@
#
# SP_MIN source files specific to A5DS platform
BL32_SOURCES += drivers/cfi/v2m/v2m_flash.c \
BL32_SOURCES += drivers/arm/scu/scu.c \
drivers/cfi/v2m/v2m_flash.c \
lib/utils/mem_region.c \
lib/aarch32/arm32_aeabi_divmod.c \
lib/aarch32/arm32_aeabi_divmod_a32.S \
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment