Need help with device tree formation
Bharat Kumar Gogada
bharat.kumar.gogada at xilinx.com
Fri Oct 16 05:05:04 PDT 2015
> >
> > On Friday 16 October 2015 11:27:15 bharat kumar gogada wrote:
> > > nwl_pcie: pcie at fd0e0000 {
> > > #address-cells = >;
> > > #size-cells = <2>;
> > > compatible = "xlnx,nwl-pcie-2.11";
> > > #interrupt-cells = <1>;
> > > interrupt-controller;
> > > msi-controller;
> > > device_type = "pci";
> > > interrupt-parent = <&gic>;
> > > interrupts = < 0 118 4
> > > 0 116 4
> > > 0 115 4 // MSI_1 [63...32]
> > > 0 114 4 >; // MSI_0 [31...0]
> > > interrupt-names = "misc", "intx", "msi_1", "msi_0";
> > > interrupt-map-mask = <0x0 0x0 0x0 0x7>;
> > > interrupt-map = <0x0 0x0 0x0 0x1 &gic 0x0 116 0x4
> > > 0x0 0x0 0x0 0x2 &gic 0x0 116 0x4
> > > 0x0 0x0 0x0 0x3 &gic 0x0 116 0x4
> > > 0x0 0x0 0x0 0x4 &gic 0x0
> > > 116
> > > 0x4>;
> >
> > The interrupt-map looks wrong, as you point to the gic rather than
> > &nwl_pcie here. Also, you seem to have only one interrupt for all
> > INTx, so you use an all-zeroes interrupt-map-mask and only one entry
> here.
Yes I was confused with the interrupt mapping property documentation, I will correct the mapping we have all four INTx, I will change it accordingly. Thanks for pointing out.
> >
> > > msi-parent = <&nwl_pcie>;
> > > reg = <0x0 0xfd0e0000 0x1000
> > > 0x0 0xfd480000 0x1000
> > > 0x0 0xE0000000 0x1000000>;
> > > reg-names = "breg", "pcireg", "cfg";
> > > ranges = <0x02000000 0x00000000 0xE1000000
> > > 0x00000000 0xE1000000 0 0x0F000000>;
> > >
> > > };
> > >
> > > I have the above device tree node in root port driver i have two
> > > separate domains one for legacy and other is MSI hierarchy domain;
> > > in both domains I'm using same node to create domain, what i observed
> is:
> > >
> > > MSI interrupts are working only without interrupt-controller
> > > property, legacy is working with interrupt-controller property this
> > > is due to logic in of_irq_parse_and_map_pci.
> >
> > Do you know what causes the MSI to not work when there is an
> > interrupt- controller property?
> >
> > Arnd
>
> I'm not exactly sure but this is what happening when I do interface up:
>
> [ 267.167825] tg3 0000:01:00.0 eth1: No interrupt was generated using MSI.
> Switching to INTx mode. Please report this failure to the PCI maintainer and
> include system chipset information
>
> [ 267.204327] Unable to handle kernel NULL pointer dereference at virtual
> address 0000000c [ 267.213116] pgd = ffffffc0366d5000 [ 267.217173]
> [0000000c] *pgd=000000003646f003, *pud=000000003646f003,
> *pmd=0000000000000000 [ 267.227273] Internal error: Oops: 96000006 [#1]
> SMP [ 267.232849] Modules linked in:
> [ 267.237266] CPU: 1 PID: 1419 Comm: ifconfig Not tainted 4.2.0-rc2-00001-
> g3dec4f4-dirty #153 [ 267.246283] Hardware name: ZynqMP EP108 (DT) [
> 267.251564] task: ffffffc039005080 ti: ffffffc036668000 task.ti: ffffffc036668000
> [ 267.260846] PC is at pci_msi_domain_write_msg+0x10/0x34
> [ 267.267292] LR is at msi_domain_activate+0x34/0x70
>
> [ 267.850610] [<ffffffc00047e16c>] pci_msi_domain_write_msg+0x10/0x34
> [ 267.857996] [<ffffffc0000f78c4>] msi_domain_activate+0x30/0x70 [
> 267.864914] [<ffffffc0000f653c>] irq_domain_activate_irq+0x40/0x50 [
> 267.872089] [<ffffffc0000f3cb8>] irq_startup+0x34/0x90 [ 267.878169]
> [<ffffffc0000f2328>] __setup_irq+0x478/0x4ec [ 267.884395]
> [<ffffffc0000f24fc>] request_threaded_irq+0xc8/0x17c [ 267.891479]
> [<ffffffc0005668a0>] tg3_request_irq+0x94/0x178 [ 267.898132]
> [<ffffffc00057d518>] tg3_start+0xdf4/0xe4c [ 267.904257]
> [<ffffffc00057d664>] tg3_open+0xf4/0x21c [ 267.910369]
> [<ffffffc000654d88>] __dev_open+0xb0/0x120 [ 267.916514]
> [<ffffffc000655048>] __dev_change_flags+0x88/0x150 [ 267.923333]
> [<ffffffc00065512c>] dev_change_flags+0x1c/0x5c
>
> [ 267.930032] [<ffffffc0006b089c>] devinet_ioctl+0x690/0x74c [ 267.936566]
> [<ffffffc0006b1f18>] inet_ioctl+0x88/0xb0 [ 267.942738] [<ffffffc000638bbc>]
> sock_ioctl+0x20c/0x2fc [ 267.949118] [<ffffffc0001b8fbc>]
> do_vfs_ioctl+0x318/0x5bc [ 267.955538] [<ffffffc0001b92e0>]
> SyS_ioctl+0x80/0x98
>
>
> That means it is receiving msi_desc pointer null in
> pci_msi_domain_write_msg
>
> This is the domain initialization code (showing whats required)
>
> pcie->legacy_irq_domain = irq_domain_add_linear(node, 4,
> &legacy_domain_ops,
> pcie);
>
> msi->dev_domain = irq_domain_add_linear (NULL, INT_PCI_MSI_NR,
> &dev_msi_domain_ops, pcie);
>
> msi->msi_chip.domain = pci_msi_create_irq_domain (node,
> &nwl_msi_domain_info,
> msi->dev_domain);
>
> Im using same devicetree node for for both domains registration.
>
> This is what im having I did not debug more.
>
> bharat
More information about the linux-arm-kernel
mailing list