mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-05-08 18:41:22 +00:00
fix(gic600): workaround for Part 1 of GIC600 erratum 2384374
GIC600 erratum 2384374 is a Category B erratum. Part 1 is fixed in this patch, and the Part 1 failure mode is described as 'If the packet to be sent is a SET packet, then a higher priority SET may not be sent when it should be until an unblocking event occurs.' This is handled by calling gicv3_apply_errata_wa_2384374() in the ehf_deactivate_priority() path, so that when EHF restores the priority to the original priority, the interrupt packet buffered in the GIC can be sent. gicv3_apply_errata_wa_2384374() is the workaround for the Part 2 of erratum 2384374 which flush packets from the GIC buffer and is being used in this patch. SDEN can be found here: https://developer.arm.com/documentation/sden892601/latest/ Signed-off-by: Arvind Ram Prakash <arvind.ramprakash@arm.com> Change-Id: I4bb6dcf86c94125cbc574e0dc5119abe43e84731
This commit is contained in:
parent
0cda4adae7
commit
24a4a0a5ec
6 changed files with 70 additions and 9 deletions
|
@ -282,9 +282,28 @@ may be signalled to the PE. The API should return the current priority value
|
|||
that it's overwriting.
|
||||
|
||||
In case of Arm standard platforms using GIC, the implementation of the API
|
||||
inserts to order memory updates before updating mask, then writes to the GIC
|
||||
*Priority Mask Register*, and make sure memory updates are visible before
|
||||
potential trigger due to mask update.
|
||||
inserts barriers to order memory updates before updating mask,
|
||||
then writes to the GIC *Priority Mask Register*, and make sure memory updates
|
||||
are visible before potential trigger due to mask update.
|
||||
|
||||
Function: unsigned int plat_ic_deactivate_priority(unsigned int id); [optional]
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
::
|
||||
|
||||
Argument : unsigned int
|
||||
Return : int
|
||||
|
||||
This API performs the operations of plat_ic_set_priority_mask along with
|
||||
calling the errata workaround gicv3_apply_errata_wa_2384374(). This is
|
||||
performed when priority mask is restored to it's older value. This API returns
|
||||
the current priority value that it's overwriting.
|
||||
|
||||
In case of Arm standard platforms using GIC, the implementation of the API
|
||||
inserts barriers to order memory updates before updating mask, then writes
|
||||
to the GIC *Priority Mask Register*, and make sure memory updates
|
||||
are visible before potential trigger due to mask update, and
|
||||
applies 2384374 GIC errata workaround to process pending interrupt packets.
|
||||
|
||||
.. _plat_ic_get_interrupt_id:
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue