bsps/arm: L2C 310 simplify and remove white space

This commit is contained in:
Sebastian Huber
2014-11-19 12:23:02 +01:00
parent 957c07575a
commit a9d6c2091b

View File

@@ -478,16 +478,12 @@ rtems_interrupt_lock l2c_310_cache_lock = RTEMS_INTERRUPT_LOCK_INITIALIZER(
* http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0360f/BABJFIBA.html
* Please see this document for more information on these erratas */
static bool l2c_310_cache_errata_is_applicable_753970(
void
cache_l2c_310_rtl_release rtl_release
)
{
volatile L2CC *l2cc =
(volatile L2CC *) BSP_ARM_L2C_310_BASE;
const cache_l2c_310_rtl_release RTL_RELEASE =
l2cc->cache_id & CACHE_L2C_310_L2CC_ID_RTL_MASK;
bool is_applicable = false;
bool is_applicable = false;
switch( RTL_RELEASE ) {
switch ( rtl_release ) {
case CACHE_L2C_310_RTL_RELEASE_R3_P3:
case CACHE_L2C_310_RTL_RELEASE_R3_P2:
case CACHE_L2C_310_RTL_RELEASE_R3_P1:
@@ -495,18 +491,12 @@ static bool l2c_310_cache_errata_is_applicable_753970(
case CACHE_L2C_310_RTL_RELEASE_R1_P0:
case CACHE_L2C_310_RTL_RELEASE_R0_P0:
is_applicable = false;
break;
break;
case CACHE_L2C_310_RTL_RELEASE_R3_P0:
is_applicable = true;
break;
break;
default:
assert( RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P3
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P2
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P1
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P0
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R2_P0
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R1_P0
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R0_P0 );
assert( 0 );
break;
}
@@ -514,16 +504,12 @@ static bool l2c_310_cache_errata_is_applicable_753970(
}
static bool l2c_310_cache_errata_is_applicable_727913(
void
cache_l2c_310_rtl_release rtl_release
)
{
volatile L2CC *l2cc =
(volatile L2CC *) BSP_ARM_L2C_310_BASE;
const cache_l2c_310_rtl_release RTL_RELEASE =
l2cc->cache_id & CACHE_L2C_310_L2CC_ID_RTL_MASK;
bool is_applicable = false;
bool is_applicable = false;
switch( RTL_RELEASE ) {
switch ( rtl_release ) {
case CACHE_L2C_310_RTL_RELEASE_R3_P3:
case CACHE_L2C_310_RTL_RELEASE_R3_P2:
case CACHE_L2C_310_RTL_RELEASE_R3_P1:
@@ -531,35 +517,25 @@ static bool l2c_310_cache_errata_is_applicable_727913(
case CACHE_L2C_310_RTL_RELEASE_R1_P0:
case CACHE_L2C_310_RTL_RELEASE_R0_P0:
is_applicable = false;
break;
break;
case CACHE_L2C_310_RTL_RELEASE_R3_P0:
is_applicable = true;
break;
break;
default:
assert( RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P3
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P2
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P1
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P0
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R2_P0
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R1_P0
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R0_P0 );
break;
assert( 0 );
break;
}
return is_applicable;
}
static bool l2c_310_cache_errata_is_applicable_727914(
void
cache_l2c_310_rtl_release rtl_release
)
{
volatile L2CC *l2cc =
(volatile L2CC *) BSP_ARM_L2C_310_BASE;
const cache_l2c_310_rtl_release RTL_RELEASE =
l2cc->cache_id & CACHE_L2C_310_L2CC_ID_RTL_MASK;
bool is_applicable = false;
bool is_applicable = false;
switch( RTL_RELEASE ) {
switch ( rtl_release ) {
case CACHE_L2C_310_RTL_RELEASE_R3_P3:
case CACHE_L2C_310_RTL_RELEASE_R3_P2:
case CACHE_L2C_310_RTL_RELEASE_R3_P1:
@@ -567,143 +543,103 @@ static bool l2c_310_cache_errata_is_applicable_727914(
case CACHE_L2C_310_RTL_RELEASE_R1_P0:
case CACHE_L2C_310_RTL_RELEASE_R0_P0:
is_applicable = false;
break;
break;
case CACHE_L2C_310_RTL_RELEASE_R3_P0:
is_applicable = true;
break;
break;
default:
assert( RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P3
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P2
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P1
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P0
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R2_P0
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R1_P0
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R0_P0 );
break;
assert( 0 );
break;
}
return is_applicable;
}
static bool l2c_310_cache_errata_is_applicable_727915(
void
cache_l2c_310_rtl_release rtl_release
)
{
volatile L2CC *l2cc =
(volatile L2CC *) BSP_ARM_L2C_310_BASE;
const cache_l2c_310_rtl_release RTL_RELEASE =
l2cc->cache_id & CACHE_L2C_310_L2CC_ID_RTL_MASK;
bool is_applicable = false;
bool is_applicable = false;
switch( RTL_RELEASE ) {
switch ( rtl_release ) {
case CACHE_L2C_310_RTL_RELEASE_R3_P3:
case CACHE_L2C_310_RTL_RELEASE_R3_P2:
case CACHE_L2C_310_RTL_RELEASE_R3_P1:
case CACHE_L2C_310_RTL_RELEASE_R1_P0:
case CACHE_L2C_310_RTL_RELEASE_R0_P0:
is_applicable = false;
break;
break;
case CACHE_L2C_310_RTL_RELEASE_R3_P0:
case CACHE_L2C_310_RTL_RELEASE_R2_P0:
is_applicable = true;
break;
break;
default:
assert( RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P3
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P2
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P1
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P0
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R2_P0
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R1_P0
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R0_P0 );
break;
assert( 0 );
break;
}
return is_applicable;
}
static bool l2c_310_cache_errata_is_applicable_729806(
void
cache_l2c_310_rtl_release rtl_release
)
{
volatile L2CC *l2cc =
(volatile L2CC *) BSP_ARM_L2C_310_BASE;
const cache_l2c_310_rtl_release RTL_RELEASE =
l2cc->cache_id & CACHE_L2C_310_L2CC_ID_RTL_MASK;
bool is_applicable = false;
bool is_applicable = false;
switch( RTL_RELEASE ) {
switch ( rtl_release ) {
case CACHE_L2C_310_RTL_RELEASE_R3_P3:
case CACHE_L2C_310_RTL_RELEASE_R3_P2:
case CACHE_L2C_310_RTL_RELEASE_R2_P0:
case CACHE_L2C_310_RTL_RELEASE_R1_P0:
case CACHE_L2C_310_RTL_RELEASE_R0_P0:
is_applicable = false;
break;
break;
case CACHE_L2C_310_RTL_RELEASE_R3_P1:
case CACHE_L2C_310_RTL_RELEASE_R3_P0:
is_applicable = true;
break;
break;
default:
assert( RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P3
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P2
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P1
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P0
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R2_P0
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R1_P0
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R0_P0 );
break;
assert( 0 );
break;
}
return is_applicable;
}
static bool l2c_310_cache_errata_is_applicable_729815(
void
cache_l2c_310_rtl_release rtl_release
)
{
volatile L2CC *l2cc =
(volatile L2CC *) BSP_ARM_L2C_310_BASE;
const cache_l2c_310_rtl_release RTL_RELEASE =
l2cc->cache_id & CACHE_L2C_310_L2CC_ID_RTL_MASK;
bool is_applicable = false;
bool is_applicable = false;
switch( RTL_RELEASE ) {
switch ( rtl_release ) {
case CACHE_L2C_310_RTL_RELEASE_R3_P3:
case CACHE_L2C_310_RTL_RELEASE_R1_P0:
case CACHE_L2C_310_RTL_RELEASE_R0_P0:
is_applicable = false;
break;
break;
case CACHE_L2C_310_RTL_RELEASE_R3_P2:
case CACHE_L2C_310_RTL_RELEASE_R3_P1:
case CACHE_L2C_310_RTL_RELEASE_R3_P0:
case CACHE_L2C_310_RTL_RELEASE_R2_P0:
is_applicable = true;
break;
break;
default:
assert( RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P3
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P2
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P1
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P0
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R2_P0
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R1_P0
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R0_P0 );
break;
assert( 0 );
break;
}
return is_applicable;
}
static bool l2c_310_cache_errata_is_applicable_742884(
void
cache_l2c_310_rtl_release rtl_release
)
{
volatile L2CC *l2cc =
(volatile L2CC *) BSP_ARM_L2C_310_BASE;
const cache_l2c_310_rtl_release RTL_RELEASE =
l2cc->cache_id & CACHE_L2C_310_L2CC_ID_RTL_MASK;
bool is_applicable = false;
bool is_applicable = false;
switch( RTL_RELEASE ) {
switch ( rtl_release ) {
case CACHE_L2C_310_RTL_RELEASE_R3_P3:
case CACHE_L2C_310_RTL_RELEASE_R3_P2:
case CACHE_L2C_310_RTL_RELEASE_R3_P0:
@@ -711,71 +647,51 @@ static bool l2c_310_cache_errata_is_applicable_742884(
case CACHE_L2C_310_RTL_RELEASE_R1_P0:
case CACHE_L2C_310_RTL_RELEASE_R0_P0:
is_applicable = false;
break;
break;
case CACHE_L2C_310_RTL_RELEASE_R3_P1:
is_applicable = true;
break;
break;
default:
assert( RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P3
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P2
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P1
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P0
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R2_P0
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R1_P0
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R0_P0 );
break;
assert( 0 );
break;
}
return is_applicable;
}
static bool l2c_310_cache_errata_is_applicable_752271(
void
cache_l2c_310_rtl_release rtl_release
)
{
volatile L2CC *l2cc =
(volatile L2CC *) BSP_ARM_L2C_310_BASE;
const cache_l2c_310_rtl_release RTL_RELEASE =
l2cc->cache_id & CACHE_L2C_310_L2CC_ID_RTL_MASK;
bool is_applicable = false;
bool is_applicable = false;
switch( RTL_RELEASE ) {
switch ( rtl_release ) {
case CACHE_L2C_310_RTL_RELEASE_R3_P3:
case CACHE_L2C_310_RTL_RELEASE_R3_P2:
case CACHE_L2C_310_RTL_RELEASE_R2_P0:
case CACHE_L2C_310_RTL_RELEASE_R1_P0:
case CACHE_L2C_310_RTL_RELEASE_R0_P0:
is_applicable = false;
break;
break;
case CACHE_L2C_310_RTL_RELEASE_R3_P1:
case CACHE_L2C_310_RTL_RELEASE_R3_P0:
is_applicable = true;
break;
break;
default:
assert( RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P3
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P2
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P1
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P0
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R2_P0
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R1_P0
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R0_P0 );
break;
assert( 0 );
break;
}
return is_applicable;
}
static bool l2c_310_cache_errata_is_applicable_765569(
void
cache_l2c_310_rtl_release rtl_release
)
{
volatile L2CC *l2cc =
(volatile L2CC *) BSP_ARM_L2C_310_BASE;
const cache_l2c_310_rtl_release RTL_RELEASE =
l2cc->cache_id & CACHE_L2C_310_L2CC_ID_RTL_MASK;
bool is_applicable = false;
bool is_applicable = false;
switch( RTL_RELEASE ) {
switch ( rtl_release ) {
case CACHE_L2C_310_RTL_RELEASE_R3_P3:
case CACHE_L2C_310_RTL_RELEASE_R3_P2:
case CACHE_L2C_310_RTL_RELEASE_R3_P1:
@@ -784,88 +700,62 @@ static bool l2c_310_cache_errata_is_applicable_765569(
case CACHE_L2C_310_RTL_RELEASE_R1_P0:
case CACHE_L2C_310_RTL_RELEASE_R0_P0:
is_applicable = true;
break;
break;
default:
assert( RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P3
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P2
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P1
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P0
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R2_P0
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R1_P0
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R0_P0 );
break;
assert( 0 );
break;
}
return is_applicable;
}
static bool l2c_310_cache_errata_is_applicable_769419(
void
cache_l2c_310_rtl_release rtl_release
)
{
volatile L2CC *l2cc =
(volatile L2CC *) BSP_ARM_L2C_310_BASE;
const cache_l2c_310_rtl_release RTL_RELEASE =
l2cc->cache_id & CACHE_L2C_310_L2CC_ID_RTL_MASK;
bool is_applicable = false;
bool is_applicable = false;
switch( RTL_RELEASE ) {
switch ( rtl_release ) {
case CACHE_L2C_310_RTL_RELEASE_R3_P3:
case CACHE_L2C_310_RTL_RELEASE_R3_P2:
is_applicable = false;
break;
break;
case CACHE_L2C_310_RTL_RELEASE_R3_P1:
case CACHE_L2C_310_RTL_RELEASE_R3_P0:
case CACHE_L2C_310_RTL_RELEASE_R2_P0:
case CACHE_L2C_310_RTL_RELEASE_R1_P0:
case CACHE_L2C_310_RTL_RELEASE_R0_P0:
is_applicable = true;
break;
break;
default:
assert( RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P3
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P2
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P1
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P0
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R2_P0
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R1_P0
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R0_P0 );
break;
assert( 0 );
break;
}
return is_applicable;
}
static bool l2c_310_cache_errata_is_applicable_588369(
void
cache_l2c_310_rtl_release rtl_release
)
{
volatile L2CC *l2cc =
(volatile L2CC *) BSP_ARM_L2C_310_BASE;
const cache_l2c_310_rtl_release RTL_RELEASE =
l2cc->cache_id & CACHE_L2C_310_L2CC_ID_RTL_MASK;
bool is_applicable = false;
bool is_applicable = false;
switch( RTL_RELEASE ) {
switch ( rtl_release ) {
case CACHE_L2C_310_RTL_RELEASE_R3_P3:
case CACHE_L2C_310_RTL_RELEASE_R3_P2:
case CACHE_L2C_310_RTL_RELEASE_R3_P1:
case CACHE_L2C_310_RTL_RELEASE_R3_P0:
case CACHE_L2C_310_RTL_RELEASE_R2_P0:
is_applicable = false;
break;
break;
case CACHE_L2C_310_RTL_RELEASE_R1_P0:
case CACHE_L2C_310_RTL_RELEASE_R0_P0:
is_applicable = true;
break;
break;
default:
assert( RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P3
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P2
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P1
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P0
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R2_P0
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R1_P0
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R0_P0 );
break;
assert( 0 );
break;
}
return is_applicable;
@@ -873,16 +763,12 @@ static bool l2c_310_cache_errata_is_applicable_588369(
#ifdef CACHE_ERRATA_CHECKS_FOR_IMPLEMENTED_ERRATAS
static bool l2c_310_cache_errata_is_applicable_754670(
void
cache_l2c_310_rtl_release rtl_release
)
{
volatile L2CC *l2cc =
(volatile L2CC *) BSP_ARM_L2C_310_BASE;
const cache_l2c_310_rtl_release RTL_RELEASE =
l2cc->cache_id & CACHE_L2C_310_L2CC_ID_RTL_MASK;
bool is_applicable = false;
bool is_applicable = false;
switch( RTL_RELEASE ) {
switch ( rtl_release ) {
case CACHE_L2C_310_RTL_RELEASE_R3_P3:
case CACHE_L2C_310_RTL_RELEASE_R3_P2:
case CACHE_L2C_310_RTL_RELEASE_R3_P1:
@@ -893,14 +779,8 @@ static bool l2c_310_cache_errata_is_applicable_754670(
is_applicable = true;
break;
default:
assert( RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P3
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P2
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P1
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P0
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R2_P0
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R1_P0
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R0_P0 );
break;
assert( 0 );
break;
}
return is_applicable;
@@ -915,32 +795,32 @@ static bool l2c_310_cache_errata_is_applicable_754670(
if( arm_errata_is_applicable_processor_errata_775420 ) { \
} \
static void l2c_310_cache_check_errata( void )
static void l2c_310_cache_check_errata( cache_l2c_310_rtl_release rtl_release )
{
/* This erratum gets handled within the sources */
/* Unhandled erratum present: 588369 Errata 588369 says that clean + inv may
* keep the cache line if it was clean. See ARMs documentation on the erratum
* for a workaround */
/* assert( ! l2c_310_cache_errata_is_applicable_588369() ); */
/* assert( ! l2c_310_cache_errata_is_applicable_588369( rtl_release ) ); */
/* Unhandled erratum present: 727913 Prefetch dropping feature can cause
* incorrect behavior when PL310 handles reads that cross cache line
* boundary */
assert( ! l2c_310_cache_errata_is_applicable_727913() );
assert( ! l2c_310_cache_errata_is_applicable_727913( rtl_release ) );
/* Unhandled erratum present: 727914 Double linefill feature can cause
* deadlock */
assert( ! l2c_310_cache_errata_is_applicable_727914() );
assert( ! l2c_310_cache_errata_is_applicable_727914( rtl_release ) );
/* Unhandled erratum present: 727915 Background Clean and Invalidate by Way
* operation can cause data corruption */
assert( ! l2c_310_cache_errata_is_applicable_727915() );
assert( ! l2c_310_cache_errata_is_applicable_727915( rtl_release ) );
/* Unhandled erratum present: 729806 Speculative reads from the Cortex-A9
* MPCore processor can cause deadlock */
assert( ! l2c_310_cache_errata_is_applicable_729806() );
assert( ! l2c_310_cache_errata_is_applicable_729806( rtl_release ) );
if( l2c_310_cache_errata_is_applicable_729815() )
if( l2c_310_cache_errata_is_applicable_729815( rtl_release ) )
{
volatile L2CC *l2cc = (volatile L2CC *) BSP_ARM_L2C_310_BASE;
@@ -965,18 +845,18 @@ static void l2c_310_cache_check_errata( void )
/* Unhandled erratum present: 742884 Double linefill feature might introduce
* circular dependency and deadlock */
assert( ! l2c_310_cache_errata_is_applicable_742884() );
assert( ! l2c_310_cache_errata_is_applicable_742884( rtl_release ) );
/* Unhandled erratum present: 752271 Double linefill feature can cause data
* corruption */
assert( ! l2c_310_cache_errata_is_applicable_752271() );
assert( ! l2c_310_cache_errata_is_applicable_752271( rtl_release ) );
/* This erratum can not be worked around: 754670 A continuous write flow can
* stall a read targeting the same memory area
* But this erratum does not lead to any data corruption */
/* assert( ! l2c_310_cache_errata_is_applicable_754670() ); */
if( l2c_310_cache_errata_is_applicable_765569() )
if( l2c_310_cache_errata_is_applicable_765569( rtl_release ) )
{
volatile L2CC *l2cc = (volatile L2CC *) BSP_ARM_L2C_310_BASE;
@@ -1000,15 +880,17 @@ static void l2c_310_cache_check_errata( void )
/* Unhandled erratum present: 769419 No automatic Store Buffer drain,
* visibility of written data requires an explicit Cache */
assert( ! l2c_310_cache_errata_is_applicable_769419() );
assert( ! l2c_310_cache_errata_is_applicable_769419( rtl_release ) );
}
static inline void
cache_l2c_310_sync( void )
{
volatile L2CC *l2cc = (volatile L2CC *) BSP_ARM_L2C_310_BASE;
cache_l2c_310_rtl_release rtl_release =
l2cc->cache_id & CACHE_L2C_310_L2CC_ID_RTL_MASK;
if( l2c_310_cache_errata_is_applicable_753970() ) {
if( l2c_310_cache_errata_is_applicable_753970( rtl_release ) ) {
l2cc->dummy_cache_sync_reg = 0;
} else {
l2cc->cache_sync = 0;
@@ -1049,8 +931,11 @@ cache_l2c_310_flush_range( const void* d_addr, const size_t n_bytes )
(uint32_t)( (size_t)d_addr + n_bytes - 1 );
uint32_t block_end =
CACHE_MIN( ADDR_LAST, adx + CACHE_MAX_LOCKING_BYTES );
volatile L2CC *l2cc = (volatile L2CC *) BSP_ARM_L2C_310_BASE;
cache_l2c_310_rtl_release rtl_release =
l2cc->cache_id & CACHE_L2C_310_L2CC_ID_RTL_MASK;
bool is_errata_588369_applicable =
l2c_310_cache_errata_is_applicable_588369();
l2c_310_cache_errata_is_applicable_588369( rtl_release );
rtems_interrupt_lock_acquire( &l2c_310_cache_lock, &lock_context );
@@ -1244,6 +1129,8 @@ static inline void
cache_l2c_310_enable( void )
{
volatile L2CC *l2cc = (volatile L2CC *) BSP_ARM_L2C_310_BASE;
cache_l2c_310_rtl_release rtl_release =
l2cc->cache_id & CACHE_L2C_310_L2CC_ID_RTL_MASK;
/* Only enable if L2CC is currently disabled */
if( ( l2cc->ctrl & CACHE_L2C_310_L2CC_ENABLE_MASK ) == 0 ) {
@@ -1256,19 +1143,17 @@ cache_l2c_310_enable( void )
switch ( cache_id ) {
case CACHE_L2C_310_L2CC_ID_PART_L310:
{
const cache_l2c_310_rtl_release RTL_RELEASE =
l2cc->cache_id & CACHE_L2C_310_L2CC_ID_RTL_MASK;
/* If this assertion fails, you have a release of the
* L2C-310 cache for which the l2c_310_cache_errata_is_applicable_ ...
* methods are not yet implemented. This means you will get incorrect
* errata handling */
assert( RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P3
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P2
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P1
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R3_P0
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R2_P0
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R1_P0
|| RTL_RELEASE == CACHE_L2C_310_RTL_RELEASE_R0_P0 );
assert( rtl_release == CACHE_L2C_310_RTL_RELEASE_R3_P3
|| rtl_release == CACHE_L2C_310_RTL_RELEASE_R3_P2
|| rtl_release == CACHE_L2C_310_RTL_RELEASE_R3_P1
|| rtl_release == CACHE_L2C_310_RTL_RELEASE_R3_P0
|| rtl_release == CACHE_L2C_310_RTL_RELEASE_R2_P0
|| rtl_release == CACHE_L2C_310_RTL_RELEASE_R1_P0
|| rtl_release == CACHE_L2C_310_RTL_RELEASE_R0_P0 );
if ( l2cc->aux_ctrl & ( 1 << 16 ) ) {
ways = 16;
} else {
@@ -1324,7 +1209,7 @@ cache_l2c_310_enable( void )
/* Clear the pending interrupts */
l2cc->int_clr = l2cc->int_raw_status;
l2c_310_cache_check_errata();
l2c_310_cache_check_errata( rtl_release );
/* Enable the L2CC */
l2cc->ctrl |= CACHE_L2C_310_L2CC_ENABLE_MASK;