From dc1a4c5380be351387b1cd48dd15ee1bffaf5857 Mon Sep 17 00:00:00 2001 From: Stafford Horne Date: Thu, 29 Apr 2021 17:18:40 +0900 Subject: [PATCH] integration/soc: Wire up the sdirq to the CPU I am working on testing out the patches from: https://github.com/litex-hub/linux/pull/8 These linux patches take advantage of the sdcard interrupt to track when transfers finish. However, it seems the interrupt is not being connected to the CPU. This patch does that by allowing us to directly register and EventManager module with the irq handler. --- litex/soc/integration/soc.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/litex/soc/integration/soc.py b/litex/soc/integration/soc.py index 276bb91d8..dc26c06d0 100644 --- a/litex/soc/integration/soc.py +++ b/litex/soc/integration/soc.py @@ -1070,12 +1070,17 @@ class SoC(Module): continue if hasattr(self, name): module = getattr(self, name) - if not hasattr(module, "ev"): + ev = None + if hasattr(module, "ev"): + ev = module.ev + elif isinstance(module, EventManager): + ev = module + else: self.logger.error("EventManager {} in {} SubModule.".format( colorer("not found", color="red"), colorer(name))) raise - self.comb += self.cpu.interrupt[loc].eq(module.ev.irq) + self.comb += self.cpu.interrupt[loc].eq(ev.irq) self.add_constant(name + "_INTERRUPT", loc) # SoC Infos -------------------------------------------------------------------------------- @@ -1558,6 +1563,8 @@ class LiteXSoC(SoC): self.sdirq.mem2block_dma.trigger.eq(self.sdmem2block.irq), self.sdirq.cmd_done.trigger.eq(self.sdcore.cmd_event.fields.done) ] + if self.irq.enabled: + self.irq.add("sdirq", use_loc_if_exists=True) # Debug. if software_debug: