From: CodeWiz2280 <codewiz2280@gmail.com>
To: Stefano Stabellini <sstabellini@kernel.org>
Cc: xen-devel <xen-devel@lists.xenproject.org>, nd <nd@arm.com>,
Julien Grall <julien@xen.org>,
Bertrand Marquis <Bertrand.Marquis@arm.com>
Subject: Re: Keystone Issue
Date: Tue, 9 Jun 2020 10:33:00 -0400 [thread overview]
Message-ID: <CALYbLDh8F0JuGmRY0C1Nhp_b4FP041KMa14pOmyoSBtHcz=A2A@mail.gmail.com> (raw)
In-Reply-To: <alpine.DEB.2.21.2006080911500.2815@sstabellini-ThinkPad-T480s>
There does appear to be a secondary (CIC) controller that can forward
events to the GIC-400 and EDMA controllers for the keystone 2 family.
Admittedly, i'm not sure how it is being used with regards to the
peripherals. I only see mention of the GIC-400 parent for the devices
in the device tree. Maybe Bertrand has a better idea on whether any
peripherals go through the CIC first? I see that gic_interrupt ()
fires once in Xen, which calls doIRQ to push out the virtual interrupt
to the dom0 kernel. The dom0 kernel then handles the interrupt and
returns, but gic_interrupt() never fires again in Xen.
On Mon, Jun 8, 2020 at 12:13 PM Stefano Stabellini
<sstabellini@kernel.org> wrote:
>
>
>
> On Mon, 8 Jun 2020, CodeWiz2280 wrote:
> > It actually shows only 1 interrupt for any of the devices in that list
> > (e.g. spi, ttyS0, ethernet) so you're probably right on the money with
> > it being an interrupt acknowledge issue. Any help you can provide is
> > greatly appreciated.
> >
> > On Mon, Jun 8, 2020 at 4:40 AM Bertrand Marquis
> > <Bertrand.Marquis@arm.com> wrote:
> > >
> > >
> > >
> > > > On 5 Jun 2020, at 20:12, CodeWiz2280 <codewiz2280@gmail.com> wrote:
> > > >
> > > > On Fri, Jun 5, 2020 at 11:05 AM CodeWiz2280 <codewiz2280@gmail.com> wrote:
> > > >>
> > > >> On Fri, Jun 5, 2020 at 8:47 AM Bertrand Marquis
> > > >> <Bertrand.Marquis@arm.com> wrote:
> > > >>>
> > > >>>
> > > >>>
> > > >>>> On 5 Jun 2020, at 13:42, CodeWiz2280 <codewiz2280@gmail.com> wrote:
> > > >>>>
> > > >>>> On Fri, Jun 5, 2020 at 8:30 AM Julien Grall <julien@xen.org> wrote:
> > > >>>>>
> > > >>>>> Hi,
> > > >>>>>
> > > >>>>> On 05/06/2020 13:25, CodeWiz2280 wrote:
> > > >>>>>> The Keystone uses the netcp driver, which has interrupts from 40-79
> > > >>>>>> listed in the device tree (arch/arm/boot/keystone-k2e-netcp.dtsi).
> > > >>>>>> I'm using the same device tree between my non-xen standalone kernel
> > > >>>>>> and my dom0 kernel booted by xen. In the standalone (non-xen) kernel
> > > >>>>>> the ethernet works fine, but I don't see any of its interrupts in the
> > > >>>>>> output of /proc/iomem. I'm not seeing them in /proc/iomem when
> > > >>>>>> running dom0 under Xen either. When booting with Xen I get this
> > > >>>>>> behavior where the ifconfig output shows 1 RX message and 1 TX
> > > >>>>>> message, and then nothing else.
> > > >>>>>
> > > >>>>> I am not sure whether this is a typo in the e-mail. /proc/iomem is
> > > >>>>> listing the list of the MMIO regions. You want to use /proc/interrupts.
> > > >>>>>
> > > >>>>> Can you confirm which path you are dumping?
> > > >>>> Yes, that was a typo. Sorry about that. I meant that I am dumping
> > > >>>> /proc/interrupts and do not
> > > >>>> see them under the non-xen kernel or xen booted dom0.
> > > >>>
> > > >>> Could you post both /proc/interrupts content ?
> > > >>
> > > >> Standalone non-xen kernel (Ethernet works)
> > > >> # cat /proc/interrupts
> > > >> CPU0 CPU1 CPU2 CPU3
> > > >> 17: 0 0 0 0 GICv2 29 Level
> > > >> arch_timer
> > > >> 18: 9856 1202 457 650 GICv2 30 Level
> > > >> arch_timer
> > > >> 21: 0 0 0 0 GICv2 142 Edge
> > > >> timer-keystone
> > > >> 22: 0 0 0 0 GICv2 52 Edge arm-pmu
> > > >> 23: 0 0 0 0 GICv2 53 Edge arm-pmu
> > > >> 24: 0 0 0 0 GICv2 54 Edge arm-pmu
> > > >> 25: 0 0 0 0 GICv2 55 Edge arm-pmu
> > > >> 26: 0 0 0 0 GICv2 36 Edge
> > > >> 26202a0.keystone_irq
> > > >> 27: 1435 0 0 0 GICv2 309 Edge ttyS0
> > > >> 29: 0 0 0 0 GICv2 315 Edge
> > > >> 2530000.i2c
> > > >> 30: 1 0 0 0 GICv2 318 Edge
> > > >> 2530400.i2c
> > > >> 31: 0 0 0 0 GICv2 321 Edge
> > > >> 2530800.i2c
> > > >> 32: 69 0 0 0 GICv2 324 Edge
> > > >> 21000400.spi
> > > >> 33: 0 0 0 0 GICv2 328 Edge
> > > >> 21000600.spi
> > > >> 34: 0 0 0 0 GICv2 332 Edge
> > > >> 21000800.spi
> > > >> 70: 0 0 0 0 GICv2 417 Edge
> > > >> ks-pcie-error-irq
> > > >> 79: 0 0 0 0 PCI-MSI 0 Edge
> > > >> PCIe PME, aerdrv
> > > >> 88: 57 0 0 0 GICv2 80 Level
> > > >> hwqueue-528
> > > >> 89: 57 0 0 0 GICv2 81 Level
> > > >> hwqueue-529
> > > >> 90: 47 0 0 0 GICv2 82 Level
> > > >> hwqueue-530
> > > >> 91: 41 0 0 0 GICv2 83 Level
> > > >> hwqueue-531
> > > >> IPI0: 0 0 0 0 CPU wakeup interrupts
> > > >> IPI1: 0 0 0 0 Timer broadcast interrupts
> > > >> IPI2: 730 988 1058 937 Rescheduling interrupts
> > > >> IPI3: 2 3 4 6 Function call interrupts
> > > >> IPI4: 0 0 0 0 CPU stop interrupts
> > > >> IPI5: 0 0 0 0 IRQ work interrupts
> > > >> IPI6: 0 0 0 0 completion interrupts
> > > >>
> > > >> Xen dom0 (Ethernet stops)
> > > >> # cat /proc/interrupts
> > > >> CPU0
> > > >> 18: 10380 GIC-0 27 Level arch_timer
> > > >> 19: 0 GIC-0 142 Edge timer-keystone
> > > >> 20: 88 GIC-0 16 Level events
> > > >> 21: 0 xen-dyn Edge -event xenbus
> > > >> 22: 0 GIC-0 36 Edge 26202a0.keystone_irq
> > > >> 23: 1 GIC-0 312 Edge ttyS0
> > > >> 25: 1 GIC-0 318 Edge
> > > >> 27: 1 GIC-0 324 Edge 21000400.spi
> > > >> 28: 0 GIC-0 328 Edge 21000600.spi
> > > >> 29: 0 GIC-0 332 Edge 21000800.spi
> > > >> 65: 0 GIC-0 417 Edge ks-pcie-error-irq
> > > >> 74: 0 PCI-MSI 0 Edge PCIe PME, aerdrv
> > > >> 83: 1 GIC-0 80 Level hwqueue-528
> > > >> 84: 1 GIC-0 81 Level hwqueue-529
> > > >> 85: 1 GIC-0 82 Level hwqueue-530
> > > >> 86: 1 GIC-0 83 Level hwqueue-531
> > > >> 115: 87 xen-dyn Edge -virq hvc_console
> > > >> IPI0: 0 CPU wakeup interrupts
> > > >> IPI1: 0 Timer broadcast interrupts
> > > >> IPI2: 0 Rescheduling interrupts
> > > >> IPI3: 0 Function call interrupts
> > > >> IPI4: 0 CPU stop interrupts
> > > >> IPI5: 0 IRQ work interrupts
> > > >> IPI6: 0 completion interrupts
> > > >> Err: 0
> > > > After getting a chance to look at this a little more, I believe the
> > > > TX/RX interrupts for the ethernets map like this:
> > > >
> > > > eth0 Rx - hwqueue-528
> > > > eth1 Rx - hwqueue-529
> > > > eth0 Tx - hwqueue-530
> > > > eth1 Tx - hwqueue-531
> > > >>
> > > > The interrupt counts in the standlone working kernel seem to roughly
> > > > correspond to the counts of Tx/Rx messages in ifconfig. Going on
> > > > that, its clear that only 1 interrupt has been received for Tx and 1
> > > > for Rx in the Xen Dom0 equivalent. Any thoughts on this?
> > >
> > > This definitely look like an interrupt acknowledgement issue.
> > > This could be caused by 2 things I remember of:
> > > - front vs level interrupts
> > > - a problem with forwarded interrupt acknowledgement.
> > > I think there was something related to that where the vcpu ack was not properly
> > > handled on a keystone and I had to change the way the interrupt was acked for
> > > forwarded hardware interrupts.
>
> Is there maybe some sort of secondary interrupt controller (secondary in
> addition to the GIC) or interrupt "concentrator" on KeyStone?
>
> Or is it just a small deviation from normal GIC behavior?
next prev parent reply other threads:[~2020-06-09 14:33 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-01 12:38 Keystone Issue CodeWiz2280
2020-06-01 13:29 ` Julien Grall
2020-06-01 15:21 ` CodeWiz2280
2020-06-01 17:38 ` CodeWiz2280
2020-06-03 11:32 ` Julien Grall
2020-06-03 17:13 ` CodeWiz2280
2020-06-03 18:09 ` Julien Grall
2020-06-03 18:37 ` CodeWiz2280
2020-06-04 8:02 ` Bertrand Marquis
2020-06-04 8:59 ` Julien Grall
2020-06-04 9:08 ` Bertrand Marquis
2020-06-04 10:15 ` Julien Grall
2020-06-04 12:07 ` CodeWiz2280
2020-06-04 18:24 ` Julien Grall
2020-06-05 2:29 ` CodeWiz2280
2020-06-05 7:36 ` Bertrand Marquis
2020-06-05 12:25 ` CodeWiz2280
2020-06-05 12:30 ` Julien Grall
2020-06-05 12:42 ` CodeWiz2280
2020-06-05 12:47 ` Bertrand Marquis
2020-06-05 15:05 ` CodeWiz2280
2020-06-05 19:12 ` CodeWiz2280
2020-06-08 8:40 ` Bertrand Marquis
2020-06-08 12:33 ` CodeWiz2280
2020-06-08 16:13 ` Stefano Stabellini
2020-06-09 14:33 ` CodeWiz2280 [this message]
2020-06-09 15:28 ` Bertrand Marquis
2020-06-09 15:47 ` Julien Grall
2020-06-09 15:58 ` CodeWiz2280
2020-06-09 17:05 ` Bertrand Marquis
2020-06-09 17:03 ` Bertrand Marquis
2020-06-09 17:32 ` Julien Grall
2020-06-09 17:45 ` Marc Zyngier
2020-06-09 20:07 ` CodeWiz2280
2020-06-10 8:13 ` Bertrand Marquis
2020-06-10 8:06 ` Bertrand Marquis
2020-06-10 8:20 ` Marc Zyngier
2020-06-10 8:39 ` Bertrand Marquis
2020-06-10 12:39 ` CodeWiz2280
2020-06-10 12:53 ` Marc Zyngier
2020-06-10 12:58 ` Julien Grall
2020-06-10 21:46 ` Julien Grall
2020-06-15 19:14 ` CodeWiz2280
2020-06-15 21:32 ` Stefano Stabellini
2020-06-16 7:56 ` Bertrand Marquis
2020-06-16 8:11 ` Marc Zyngier
2020-06-16 18:13 ` CodeWiz2280
2020-06-16 18:23 ` Marc Zyngier
2020-06-17 14:45 ` CodeWiz2280
2020-06-17 15:25 ` Marc Zyngier
2020-06-17 18:46 ` Stefano Stabellini
2020-06-17 23:52 ` CodeWiz2280
2020-06-23 20:50 ` CodeWiz2280
2020-06-24 7:50 ` Bertrand Marquis
2020-06-24 17:28 ` Stefano Stabellini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CALYbLDh8F0JuGmRY0C1Nhp_b4FP041KMa14pOmyoSBtHcz=A2A@mail.gmail.com' \
--to=codewiz2280@gmail.com \
--cc=Bertrand.Marquis@arm.com \
--cc=julien@xen.org \
--cc=nd@arm.com \
--cc=sstabellini@kernel.org \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.