soc: Slight cleanup of IRQ assignments
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>
Sat, 13 Jun 2020 12:29:54 +0000 (22:29 +1000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Sun, 14 Jun 2020 04:00:37 +0000 (14:00 +1000)
Use a separate process to assign selected interrupts to the
interrupt array, and document them.

There's only one interrupt *for now* but that will change
and this way is clearer.

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
include/microwatt_soc.h
soc.vhdl

index e0042fb567c9020ef32d56a412115b76719bc079..39820e69cd5727bb5ded605c301d551acd23460f 100644 (file)
 #define SPI_FLASH_BASE  0xf0000000  /* SPI Flash memory map */
 #define DRAM_INIT_BASE  0xff000000  /* Internal DRAM init firmware */
 
+/*
+ * Interrupt numbers
+ */
+#define IRQ_UART0       0
+
 /*
  * Register definitions for the syscon registers
  */
index 2f9fe68cc19201e5d75c818e8cd1d3cc0b7727d0..ceaf9a96b6fa34f45bc1b99036d992b3e601105a 100644 (file)
--- a/soc.vhdl
+++ b/soc.vhdl
@@ -33,6 +33,9 @@ use work.wishbone_types.all;
 --      IO bus, this will be fixed when it's moved out of litedram and
 --      into the main SoC once we have a common "firmware".
 
+-- Interrupt numbers:
+--
+--   0  : UART0
 
 entity soc is
     generic (
@@ -118,6 +121,7 @@ architecture behaviour of soc is
     signal wb_uart0_in   : wb_io_master_out;
     signal wb_uart0_out  : wb_io_slave_out;
     signal uart0_dat8    : std_ulogic_vector(7 downto 0);
+    signal uart0_irq     : std_ulogic;
 
     -- SPI Flash controller signals:
     signal wb_spiflash_in     : wb_io_master_out;
@@ -568,7 +572,7 @@ begin
            reset => rst_uart,
            txd => uart0_txd,
            rxd => uart0_rxd,
-           irq => int_level_in(0),
+           irq => uart0_irq,
            wb_adr_in => wb_uart0_in.adr(11 downto 0),
            wb_dat_in => wb_uart0_in.dat(7 downto 0),
            wb_dat_out => uart0_dat8,
@@ -621,6 +625,13 @@ begin
            core_irq_out => core_ext_irq
            );
 
+    -- Assign external interrupts
+    interrupts: process(all)
+    begin
+        int_level_in <= (others => '0');
+        int_level_in(0) <= uart0_irq;
+    end process;
+
     -- BRAM Memory slave
     bram: if MEMORY_SIZE /= 0 generate
         bram0: entity work.wishbone_bram_wrapper