/* * Low-level accessors * * These system registers are 32 bits, but we make sure that the compiler * sets the GP register's most significant bits to 0 with an explicit cast.
*/
/* * Cavium ThunderX erratum 23154 * * The gicv3 of ThunderX requires a modified version for reading the * IAR status to ensure data synchronization (access to icc_iar1_el1 * is not sync'ed before and after). * * Erratum 38545 * * When a IAR register read races with a GIC interrupt RELEASE event, * GIC-CPU interface could wrongly return a valid INTID to the CPU * for an interrupt that is already released(non activated) instead of 0x3ff. * * To workaround this, return a valid interrupt ID only if there is a change * in the active priority list after the IAR read. * * Common function used for both the workarounds since, * 1. On Thunderx 88xx 1.x both erratas are applicable. * 2. Having extra nops doesn't add any side effects for Silicons where * erratum 23154 is not applicable.
*/ staticinline u64 gic_read_iar_cavium_thunderx(void)
{
u64 irqstat, apr;
#define gic_read_typer(c) readq_relaxed(c) #define gic_write_irouter(v, c) writeq_relaxed(v, c) #define gic_read_lpir(c) readq_relaxed(c) #define gic_write_lpir(v, c) writeq_relaxed(v, c)
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.