On 06/01/2022 13:03, Ajish.Koshy@xxxxxxxxxxxxx wrote:
only a specific vector and, also, why we check at all in
an interrupt handler.
Here is my initial understanding so far based on the code
and data sheet
1. Controller has the capability to communicate
to the host about fatal error condition via configured
interrupt vector MSI/MSI-X.
2. This capability is achieved by setting two fields
a. Enable Controller Fatal error notification
Dowrd 0x1C, Bit[0].
1 - Enable; 0 - Disable
Code: pm8001_ha->main_cfg_tbl.pm80xx_tbl.
fatal_err_interrupt = 0x01;
b. Fatal Error Interrupt Vector Dword 0x1C, bit[15:8]
This parameter configures which interrupt vector
is used to notify the host of the fatal error.
Code: /* Update Fatal error interrupt vector */
pm8001_ha->main_cfg_tbl.pm80xx_tbl.
fatal_err_interrupt |=
((pm8001_ha->max_q_num - 1) << 8);
Probably this will be the reason why we check
the vector in process_oq() for processing
controller fatal error
if (vec == (pm8001_ha->max_q_num - 1)) {
Please do let me know if it helped in clarification.
Sounds reasonable. And we only discover the issue for 8008/8009 now as
we have that (pm8001_ha->max_q_num - 1) vector being used for standard IO.
So let me know of any other issue, otherwise I'll send a v2 with the
coding style fixup.
Thanks,
John