#include <config.h>
#include <api/types.h>
#include <arch/machine.h>
#include <arch/machine/hardware.h>
#include <util.h>
void arm_errata(void);
#ifdef ARM1136_WORKAROUND
BOOT_CODE static void
errata_arm1136(void)
{
if ((getProcessorID() & ~0xf) == ARM1136_R0PX) {
writeSystemControlRegister(
readSystemControlRegister() | BIT(CONTROL_FI));
writeAuxiliaryControlRegister(
readAuxiliaryControlRegister() | BIT(31));
}
}
#endif
#ifdef CONFIG_ARM_ERRATA_773022
BOOT_CODE static void errata_armA15_773022(void)
{
uint32_t proc_id = getProcessorID();
uint32_t variant = (proc_id >> 20) & MASK(4);
uint32_t revision = proc_id & MASK(4);
uint32_t part = (proc_id >> 4) & MASK(12);
if (part == 0xc0f && variant == 0 && revision <= 4) {
writeAuxiliaryControlRegister(
readAuxiliaryControlRegister() | BIT(1));
}
}
#endif
BOOT_CODE void VISIBLE arm_errata(void)
{
#ifdef ARM1136_WORKAROUND
errata_arm1136();
#endif
#ifdef CONFIG_ARM_ERRATA_773022
errata_armA15_773022();
#endif
}