/* * Copyright 2021 NXP * * SPDX-License-Identifier: BSD-3-Clause * */ #include #include #include #include #include void erratum_a008850_early(void) { /* part 1 of 2 */ uintptr_t cci_base = NXP_CCI_ADDR; uint32_t val = mmio_read_32(cci_base + CTRL_OVERRIDE_REG); /* enabling forced barrier termination on CCI400 */ mmio_write_32(cci_base + CTRL_OVERRIDE_REG, (val | CCI_TERMINATE_BARRIER_TX)); } void erratum_a008850_post(void) { /* part 2 of 2 */ uintptr_t cci_base = NXP_CCI_ADDR; uint32_t val = mmio_read_32(cci_base + CTRL_OVERRIDE_REG); /* Clear the BARRIER_TX bit */ val = val & ~(CCI_TERMINATE_BARRIER_TX); /* * Disable barrier termination on CCI400, allowing * barriers to propagate across CCI */ mmio_write_32(cci_base + CTRL_OVERRIDE_REG, val); INFO("SoC workaround for Errata A008850 Post-Phase was applied\n"); }