This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Juno linux bootup hang during init_IRQ

Hi,

I am bringing up linux kernel on Juno and I needed customized kernel so I have disabled most of the peripherals and customized my juno device tree.

I am facing an issue where my kernel is hanging while start_kernel during init_IRQ. I am setting following node for interrupt controller -

I am not sure what I am doing wrong but the interrupt controller node is not getting parsed ?

interrupt-parent = <&gic>;

gic: interrupt-controller@2c001000 {

  compatible = "arm,cortex-a15-gic", "arm,cortex-a9-gic";

  #interrupt-cells = <3>;

  interrupt-controller;

  reg = <0x0 0x2c010000 0 0x1000>,

       <0x0 0x2c02f000 0 0x2000>,

       <0x0 0x2c04f000 0 0x2000>,

       <0x0 0x2c06f000 0 0x2000>;

  interrupts = <1 9 0xf04>;

  };

Thanks.

Parents
  • Hi,

    Just a guess, but this line is wrong:

    gic: interrupt-controller@2c001000 {

    It should be 2C01000, but you have an extra '0' after the '2C'. Although, saying that, decompiling a working Juno DTB from the Linaro deliverables also shows 2c001000.

    From building the LSK following the Linaro instructions, and then decompiling the DTB, the GIC entry is as follows:

    interrupt-controller@2c001000 {

      compatible = "arm,gic-400", "arm,cortex-a15-gic";

      reg = <0x0 0x2c010000 0x0 0x1000 0x0 0x2c02f000 0x0 0x2000 0x0 0x2c04f000 0x0 0x2000 0x0 0x2c06f000 0x0 0x2000>;

      #address-cells = <0x0>;

      #interrupt-cells = <0x3>;

      interrupt-controller;

      interrupts = <0x1 0x9 0x3f04>;

      linux,phandle = <0x1>;

      phandle = <0x1>;

    };

    So you're missing "arm,gic-400" from the compatible entry, which may mean that Linux is failing to find a suitable driver. Adding that entry would ensure that Linux chooses the GIC-400 driver.

    Looking at the Latest kernel prebuilt DTB (which is different to the LSK one), we see this instead:

    interrupt-controller@2c010000 {

      compatible = "arm,gic-400", "arm,cortex-a15-gic";

      reg = <0x0 0x2c010000 0x0 0x1000 0x0 0x2c02f000 0x0 0x2000 0x0 0x2c04f000 0x0 0x2000 0x0 0x2c06f000 0x0 0x2000>;

      #address-cells = <0x2>;

      #interrupt-cells = <0x3>;

      #size-cells = <0x2>;

      interrupt-controller;

      interrupts = <0x1 0x9 0x3f04>;

      ranges = <0x0 0x0 0x0 0x2c1c0000 0x0 0x40000>;

      linux,phandle = <0x1>;

      phandle = <0x1>;

      v2m@0 {

      compatible = "arm,gic-v2m-frame";

      msi-controller;

      reg = <0x0 0x0 0x0 0x1000>;

      };

    };

    Note that now the address is correct ("interrupt-controller@2c010000"). This entry also has the "arm,gic-400" tag on the compatible entry.

    So from the above, I would say, first try adding "arm,gic-400" to the compatible tag and see if that works, then if that doesn't work, try changing the address to be correct (@2c010000).

    I hope that helps,

    Ash.

Reply
  • Hi,

    Just a guess, but this line is wrong:

    gic: interrupt-controller@2c001000 {

    It should be 2C01000, but you have an extra '0' after the '2C'. Although, saying that, decompiling a working Juno DTB from the Linaro deliverables also shows 2c001000.

    From building the LSK following the Linaro instructions, and then decompiling the DTB, the GIC entry is as follows:

    interrupt-controller@2c001000 {

      compatible = "arm,gic-400", "arm,cortex-a15-gic";

      reg = <0x0 0x2c010000 0x0 0x1000 0x0 0x2c02f000 0x0 0x2000 0x0 0x2c04f000 0x0 0x2000 0x0 0x2c06f000 0x0 0x2000>;

      #address-cells = <0x0>;

      #interrupt-cells = <0x3>;

      interrupt-controller;

      interrupts = <0x1 0x9 0x3f04>;

      linux,phandle = <0x1>;

      phandle = <0x1>;

    };

    So you're missing "arm,gic-400" from the compatible entry, which may mean that Linux is failing to find a suitable driver. Adding that entry would ensure that Linux chooses the GIC-400 driver.

    Looking at the Latest kernel prebuilt DTB (which is different to the LSK one), we see this instead:

    interrupt-controller@2c010000 {

      compatible = "arm,gic-400", "arm,cortex-a15-gic";

      reg = <0x0 0x2c010000 0x0 0x1000 0x0 0x2c02f000 0x0 0x2000 0x0 0x2c04f000 0x0 0x2000 0x0 0x2c06f000 0x0 0x2000>;

      #address-cells = <0x2>;

      #interrupt-cells = <0x3>;

      #size-cells = <0x2>;

      interrupt-controller;

      interrupts = <0x1 0x9 0x3f04>;

      ranges = <0x0 0x0 0x0 0x2c1c0000 0x0 0x40000>;

      linux,phandle = <0x1>;

      phandle = <0x1>;

      v2m@0 {

      compatible = "arm,gic-v2m-frame";

      msi-controller;

      reg = <0x0 0x0 0x0 0x1000>;

      };

    };

    Note that now the address is correct ("interrupt-controller@2c010000"). This entry also has the "arm,gic-400" tag on the compatible entry.

    So from the above, I would say, first try adding "arm,gic-400" to the compatible tag and see if that works, then if that doesn't work, try changing the address to be correct (@2c010000).

    I hope that helps,

    Ash.

Children
No data