From mboxrd@z Thu Jan 1 00:00:00 1970 From: Will Deacon Subject: Re: [PATCH 2/4] kvmtool: ARM: allow level interrupts in device tree Date: Thu, 11 Dec 2014 17:15:30 +0000 Message-ID: <20141211171530.GM6067@arm.com> References: <1418315435-20342-1-git-send-email-andre.przywara@arm.com> <1418315435-20342-3-git-send-email-andre.przywara@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: "penberg@kernel.org" , "kvmarm@lists.cs.columbia.edu" , "kvm@vger.kernel.org" To: Andre Przywara Return-path: Received: from foss-mx-na.foss.arm.com ([217.140.108.86]:48369 "EHLO foss-mx-na.foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755654AbaLKRPi (ORCPT ); Thu, 11 Dec 2014 12:15:38 -0500 Content-Disposition: inline In-Reply-To: <1418315435-20342-3-git-send-email-andre.przywara@arm.com> Sender: kvm-owner@vger.kernel.org List-ID: On Thu, Dec 11, 2014 at 04:30:33PM +0000, Andre Przywara wrote: > Currently we describe every interrupt for each device in the FDT > as being edge triggered. > Add a parameter to the irq property generation to allow devices to > specify their interrupts as level triggered if needed. > > Signed-off-by: Andre Przywara > --- > tools/kvm/arm/fdt.c | 6 +++--- > tools/kvm/hw/serial.c | 5 +++-- > tools/kvm/include/kvm/ioport.h | 4 +++- > tools/kvm/ioport.c | 6 ++++-- > tools/kvm/virtio/mmio.c | 5 +++-- > 5 files changed, 16 insertions(+), 10 deletions(-) [...] > @@ -71,7 +72,8 @@ static void generate_ioport_fdt_node(void *fdt, > static void generate_ioport_fdt_node(void *fdt, > struct device_header *dev_hdr, > void (*generate_irq_prop)(void *fdt, > - u8 irq)) > + u8 irq, > + u32 irq_type)) > { > die("Unable to generate device tree nodes without libfdt\n"); > } > diff --git a/tools/kvm/virtio/mmio.c b/tools/kvm/virtio/mmio.c > index 3a2bd62..28b0651 100644 > --- a/tools/kvm/virtio/mmio.c > +++ b/tools/kvm/virtio/mmio.c > @@ -233,7 +233,8 @@ static void virtio_mmio_mmio_callback(struct kvm_cpu *vcpu, > static void generate_virtio_mmio_fdt_node(void *fdt, > struct device_header *dev_hdr, > void (*generate_irq_prop)(void *fdt, > - u8 irq)) > + u8 irq, > + u32 type)) > { > char dev_name[DEVICE_NAME_MAX_LEN]; > struct virtio_mmio *vmmio = container_of(dev_hdr, > @@ -250,7 +251,7 @@ static void generate_virtio_mmio_fdt_node(void *fdt, > _FDT(fdt_begin_node(fdt, dev_name)); > _FDT(fdt_property_string(fdt, "compatible", "virtio,mmio")); > _FDT(fdt_property(fdt, "reg", reg_prop, sizeof(reg_prop))); > - generate_irq_prop(fdt, vmmio->irq); > + generate_irq_prop(fdt, vmmio->irq, GIC_FDT_IRQ_FLAGS_EDGE_LO_HI); This is a GIC-specific #define in arch-agnostic code. I think we should have a new enum type for describing edge and level interrupts, then just use that instead. Will