From 3afe238926affaed74f6fab4fc964d1e68fc4eef Mon Sep 17 00:00:00 2001 From: Piotr Wojnarowski Date: Thu, 16 Nov 2023 16:18:11 +0100 Subject: [PATCH] drivers: intc: plic: Fix memory-mapped register offset calculation Previously, the PLIC's registers were accessed through uint32_t *, so all calculated offsets were effectively multiplied by sizeof(uint32_t). Do the same manuallly now that we have mem_addr_t/sys_read32. Signed-off-by: Piotr Wojnarowski --- drivers/interrupt_controller/intc_plic.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/interrupt_controller/intc_plic.c b/drivers/interrupt_controller/intc_plic.c index fa11faca91e..20422f23433 100644 --- a/drivers/interrupt_controller/intc_plic.c +++ b/drivers/interrupt_controller/intc_plic.c @@ -59,16 +59,21 @@ struct plic_config { static uint32_t save_irq; static const struct device *save_dev; -static inline uint32_t local_irq_to_reg_offset(uint32_t local_irq) +static inline uint32_t local_irq_to_reg_index(uint32_t local_irq) { return local_irq >> LOG2(PLIC_REG_SIZE); } +static inline uint32_t local_irq_to_reg_offset(uint32_t local_irq) +{ + return local_irq_to_reg_index(local_irq) * sizeof(uint32_t); +} + static inline uint32_t get_plic_enabled_size(const struct device *dev) { const struct plic_config *config = dev->config; - return local_irq_to_reg_offset(config->num_irqs) + 1; + return local_irq_to_reg_index(config->num_irqs) + 1; } static inline mem_addr_t get_claim_complete_addr(const struct device *dev)