ARC770: "unexpected IRQ trap at vector 00" during boot

Alexandru Gagniuc alex.g at adaptrum.com
Mon Jul 24 10:38:25 PDT 2017


Hi,

I'm getting a storm of these messages when trying to boot an in-house 
ASIC with an ARC770. This only happens with an ethernet cable plugged 
in. I've learned that the actual interrupt number is 21. The issue is 
that the irq_find_mapping() in __handle_domain_irq() fails to find a 
mapping for vector 21, and the remaining logic will brainlessly print 
out '0' as the interrupt number (which is of course, bass-ackwards).

This happens very early in the boot process, right after interrupts are 
globally enabled. IRQ 21 is the correct IRQ vector for the ethernet 
controller, but I don't understand why the IRQ vector is unmasked before 
the ethernet driver is loaded. This is a chicken and egg problem, since 
we have no control over the state of the ethernet before the driver is 
actually loaded.

I'm hoping someone might be able to point me in the right directions, 
since at this point, I'm not sure if this is a devicetree problem, 
hardware bug, or linux bug.

Alex


# Appendix A: Relevant devicetree bindings:

/ {
	model = "adaptrum,anarion";
	compatible = "snps,nsim";
	#address-cells = <1>;
	#size-cells = <1>;
	interrupt-parent = <&core_intc>;

	chosen {
		bootargs = "earlycon console=ttyS0,115200n8";
		stdout-path = "serial0:115200n8";
	};

	aliases {
		serial0 = &uart0;
	};

	soc {
		compatible = "simple-bus";
		device_type = "soc";
		#address-cells = <1>;
		#size-cells = <1>;
		ranges;

		core_clk: core_clk {
			#clock-cells = <0>;
			compatible = "fixed-clock";
			clock-frequency = <12000000>;
		};

		core_intc: interrupt-controller {
			compatible = "snps,arc700-intc";
			interrupt-controller;
			#interrupt-cells = <1>;
		};

		uart0: serial at f2202100 {
			compatible = "ns16550";
			reg = <0xf2202100 0x20>;
			interrupts = <8>;
			reg-shift = <2>;
			reg-io-width = <4>;
			clock-frequency = <192000000>;
		};


		gmac1: ethernet at f2014000 {
			compatible = "snps,dwmac";
			reg = <0xf2014000 0x4000>;

			interrupt-parent = <&core_intc>;
			interrupts = <21>;
			interrupt-names = "macirq";

			clocks = <&core_clk>;
			clock-names = "stmmaceth";

			snps,pbl = <32>;
			status = "disabled";
		};
	};

};

&gmac1 {
	phy-mode = "rgmii";
	status = "okay";
};



More information about the linux-snps-arc mailing list