Re: [PATCH] qcom: llcc/edac: Correct interrupt enable register configuration

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 






On 12/5/2024 3:59 PM, Komal Bajaj wrote:

On 11/20/2024 5:29 PM, Dmitry Baryshkov wrote:
On Tue, Nov 19, 2024 at 12:16:08PM +0530, Komal Bajaj wrote:
The previous implementation incorrectly configured the cmn_interrupt_2_enable register for interrupt handling. Using cmn_interrupt_2_enable to configure Tag, Data RAM ECC interrupts would lead to issues like double handling of the interrupts (EL1 and EL3) as cmn_interrupt_2_enable is meant to be configured
for interrupts which needs to be handled by EL3.
This reads as if it was possible to write EL3-related register from EL1.
Is it true?


Both EL1 and EL3 can access the LLCC "cmn_interrupt_2_enable" register, but configuring the register from both EL1 & EL3 shouldn't be done as the register is meant to be configured from EL3. There was a bug in HPG which was
fixed recently on not to configure the register from EL1.

Thanks
Komal

Hi Dmitry,
Does this answer your query, or is there anything else you are looking for?

Thanks
Komal



EL1 LLCC EDAC driver needs to use cmn_interrupt_0_enable register to
configure Tag, Data RAM ECC interrupts instead of cmn_interrupt_2_enable.

Fixes: 27450653f1db ("drivers: edac: Add EDAC driver support for QCOM SoCs")
Signed-off-by: Komal Bajaj <quic_kbajaj@xxxxxxxxxxx>
---
  drivers/edac/qcom_edac.c | 4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/edac/qcom_edac.c b/drivers/edac/qcom_edac.c
index a9a8ba067007..0fd7a777fe7d 100644
--- a/drivers/edac/qcom_edac.c
+++ b/drivers/edac/qcom_edac.c
@@ -95,7 +95,7 @@ static int qcom_llcc_core_setup(struct llcc_drv_data *drv, struct regmap *llcc_b        * Configure interrupt enable registers such that Tag, Data RAM related        * interrupts are propagated to interrupt controller for servicing
       */
-    ret = regmap_update_bits(llcc_bcast_regmap, drv->edac_reg_offset->cmn_interrupt_2_enable, +    ret = regmap_update_bits(llcc_bcast_regmap, drv->edac_reg_offset->cmn_interrupt_0_enable,
                   TRP0_INTERRUPT_ENABLE,
                   TRP0_INTERRUPT_ENABLE);
      if (ret)
@@ -113,7 +113,7 @@ static int qcom_llcc_core_setup(struct llcc_drv_data *drv, struct regmap *llcc_b
      if (ret)
          return ret;

-    ret = regmap_update_bits(llcc_bcast_regmap, drv->edac_reg_offset->cmn_interrupt_2_enable, +    ret = regmap_update_bits(llcc_bcast_regmap, drv->edac_reg_offset->cmn_interrupt_0_enable,
                   DRP0_INTERRUPT_ENABLE,
                   DRP0_INTERRUPT_ENABLE);
      if (ret)
--
2.46.0






[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [Linux for Sparc]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux