From patchwork Fri May 16 14:40:29 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Julien Grall X-Patchwork-Id: 30333 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-yh0-f70.google.com (mail-yh0-f70.google.com [209.85.213.70]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id 241D320A25 for ; Fri, 16 May 2014 14:42:01 +0000 (UTC) Received: by mail-yh0-f70.google.com with SMTP id z6sf18984894yhz.1 for ; Fri, 16 May 2014 07:42:00 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:delivered-to:from:to:date:message-id:in-reply-to :references:cc:subject:precedence:list-id:list-unsubscribe:list-post :list-help:list-subscribe:mime-version:sender:errors-to :x-original-sender:x-original-authentication-results:mailing-list :list-archive:content-type:content-transfer-encoding; bh=QJAk/95DCMyr5GLVTixw5K1FRp0zYXgGE0RctMr54aM=; b=giO556oIQdOE9lW94CTXuvjRFEoL+HCIHvceGAX/2LAFyNmnc/ooSgzkDUoYRy3d+3 cNG/BxkMy+aUc7DtVnI+3v9KzMujLxKKb2Jw58tWRyufDU5a9/BMYponacr+DXS36Pzy 3FA23v/4h4RCCMYe9xxKsufy8bd3o+BWxG1FB3WbDxMVZ+Q/Q3AZoQ5VMyIQw0Dj0Fx1 AdAJFFSp4QtwAv1/LNyXLYMY1Yi1X9OSnd078Jq6R0qagBcJTQDkgs9Ne/HIY2pXMN47 jI1dKynnHZn0O6T0qDjlEyiHY44ZIBzOl/wFQtlSJJ4Jsh8q0Iqrng8sMQk4yQt6jyAF HVEg== X-Gm-Message-State: ALoCoQnhyqibjkkvEwebd179ey8S3iIZ8sHdgeyz0PdbeQOwQq/78nV6jSrC4PQ1VltyAOJu/YJt X-Received: by 10.236.159.39 with SMTP id r27mr8062967yhk.7.1400251320764; Fri, 16 May 2014 07:42:00 -0700 (PDT) X-BeenThere: patchwork-forward@linaro.org Received: by 10.140.43.35 with SMTP id d32ls734710qga.87.gmail; Fri, 16 May 2014 07:42:00 -0700 (PDT) X-Received: by 10.220.183.4 with SMTP id ce4mr714962vcb.54.1400251320636; Fri, 16 May 2014 07:42:00 -0700 (PDT) Received: from mail-vc0-f182.google.com (mail-vc0-f182.google.com [209.85.220.182]) by mx.google.com with ESMTPS id xo2si1638249vec.8.2014.05.16.07.42.00 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Fri, 16 May 2014 07:42:00 -0700 (PDT) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.220.182 as permitted sender) client-ip=209.85.220.182; Received: by mail-vc0-f182.google.com with SMTP id la4so6315505vcb.13 for ; Fri, 16 May 2014 07:42:00 -0700 (PDT) X-Received: by 10.58.243.198 with SMTP id xa6mr531487vec.65.1400251320558; Fri, 16 May 2014 07:42:00 -0700 (PDT) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patch@linaro.org Received: by 10.220.221.72 with SMTP id ib8csp58329vcb; Fri, 16 May 2014 07:42:00 -0700 (PDT) X-Received: by 10.52.74.196 with SMTP id w4mr12139614vdv.19.1400251320020; Fri, 16 May 2014 07:42:00 -0700 (PDT) Received: from lists.xen.org (lists.xen.org. [50.57.142.19]) by mx.google.com with ESMTPS id gq7si1627414vdc.158.2014.05.16.07.41.59 for (version=TLSv1 cipher=RC4-SHA bits=128/128); Fri, 16 May 2014 07:42:00 -0700 (PDT) Received-SPF: none (google.com: xen-devel-bounces@lists.xen.org does not designate permitted sender hosts) client-ip=50.57.142.19; Received: from localhost ([127.0.0.1] helo=lists.xen.org) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1WlJJV-0005NB-EC; Fri, 16 May 2014 14:40:45 +0000 Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1WlJJT-0005MM-78 for xen-devel@lists.xenproject.org; Fri, 16 May 2014 14:40:43 +0000 Received: from [85.158.139.211:34925] by server-15.bemta-5.messagelabs.com id BB/2A-11079-A6326735; Fri, 16 May 2014 14:40:42 +0000 X-Env-Sender: julien.grall@linaro.org X-Msg-Ref: server-16.tower-206.messagelabs.com!1400251241!1857664!1 X-Originating-IP: [74.125.83.46] X-SpamReason: No, hits=0.0 required=7.0 tests= X-StarScan-Received: X-StarScan-Version: 6.11.3; banners=-,-,- X-VirusChecked: Checked Received: (qmail 21257 invoked from network); 16 May 2014 14:40:41 -0000 Received: from mail-ee0-f46.google.com (HELO mail-ee0-f46.google.com) (74.125.83.46) by server-16.tower-206.messagelabs.com with RC4-SHA encrypted SMTP; 16 May 2014 14:40:41 -0000 Received: by mail-ee0-f46.google.com with SMTP id t10so1627807eei.33 for ; Fri, 16 May 2014 07:40:41 -0700 (PDT) X-Received: by 10.14.218.201 with SMTP id k49mr23342659eep.16.1400251241309; Fri, 16 May 2014 07:40:41 -0700 (PDT) Received: from belegaer.uk.xensource.com ([185.25.64.249]) by mx.google.com with ESMTPSA id s46sm20538730ees.3.2014.05.16.07.40.39 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 16 May 2014 07:40:40 -0700 (PDT) From: Julien Grall To: xen-devel@lists.xenproject.org Date: Fri, 16 May 2014 15:40:29 +0100 Message-Id: <1400251232-7695-4-git-send-email-julien.grall@linaro.org> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1400251232-7695-1-git-send-email-julien.grall@linaro.org> References: <1400251232-7695-1-git-send-email-julien.grall@linaro.org> Cc: stefano.stabellini@citrix.com, Julien Grall , tim@xen.org, ian.campbell@citrix.com Subject: [Xen-devel] [PATCH v7 3/6] xen/arm: Replace route_guest_dt_irq by route_guest_irq X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: List-Unsubscribe: , List-Post: , List-Help: , List-Subscribe: , MIME-Version: 1.0 Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org X-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: julien.grall@linaro.org X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.220.182 as permitted sender) smtp.mail=patch+caf_=patchwork-forward=linaro.org@linaro.org Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org X-Google-Group-Id: 836684582541 List-Archive: We can use platform_get_irq to get the IRQ which will be route to the guest. platform_get_irq will store the type of IRQ (e.g level/edge...) directly in the irq_desc. This will avoid to have device tree specific routing function. Signed-off-by: Julien Grall Acked-by: Ian Campbell --- Changes in v7: - irq_set_type has been renamed into irq_set_spi_type Changes in v6: - Patch added --- xen/arch/arm/domain_build.c | 16 +++++++++------- xen/arch/arm/irq.c | 12 +++++------- xen/arch/arm/platforms/xgene-storm.c | 15 ++++++++++----- xen/include/asm-arm/irq.h | 4 ++-- 4 files changed, 26 insertions(+), 21 deletions(-) diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c index c424793..ddbb88d 100644 --- a/xen/arch/arm/domain_build.c +++ b/xen/arch/arm/domain_build.c @@ -686,7 +686,7 @@ static int map_device(struct domain *d, struct dt_device_node *dev) unsigned int naddr; unsigned int i; int res; - struct dt_irq irq; + unsigned int irq; struct dt_raw_irq rirq; u64 addr, size; @@ -729,20 +729,22 @@ static int map_device(struct domain *d, struct dt_device_node *dev) continue; } - res = dt_irq_translate(&rirq, &irq); - if ( res ) + res = platform_get_irq(dev, i); + if ( res < 0 ) { - printk(XENLOG_ERR "Unable to translate irq %u for %s\n", + printk(XENLOG_ERR "Unable to get irq %u for %s\n", i, dt_node_full_name(dev)); return res; } - DPRINT("irq %u = %u type = 0x%x\n", i, irq.irq, irq.type); - res = route_dt_irq_to_guest(d, &irq, dt_node_name(dev)); + irq = res; + + DPRINT("irq %u = %u\n", i, irq); + res = route_irq_to_guest(d, irq, dt_node_name(dev)); if ( res ) { printk(XENLOG_ERR "Unable to route IRQ %u to domain %u\n", - irq.irq, d->domain_id); + irq, d->domain_id); return res; } } diff --git a/xen/arch/arm/irq.c b/xen/arch/arm/irq.c index 0808e36..fa35e0d 100644 --- a/xen/arch/arm/irq.c +++ b/xen/arch/arm/irq.c @@ -316,11 +316,11 @@ err: return rc; } -int route_dt_irq_to_guest(struct domain *d, const struct dt_irq *irq, - const char * devname) +int route_irq_to_guest(struct domain *d, unsigned int irq, + const char * devname) { struct irqaction *action; - struct irq_desc *desc = irq_to_desc(irq->irq); + struct irq_desc *desc = irq_to_desc(irq); unsigned long flags; int retval = 0; @@ -348,10 +348,9 @@ int route_dt_irq_to_guest(struct domain *d, const struct dt_irq *irq, if ( desc->status & IRQ_GUEST ) printk(XENLOG_ERR "ERROR: IRQ %u is already used by domain %u\n", - irq->irq, ad->domain_id); + irq, ad->domain_id); else - printk(XENLOG_ERR "ERROR: IRQ %u is already used by Xen\n", - irq->irq); + printk(XENLOG_ERR "ERROR: IRQ %u is already used by Xen\n", irq); retval = -EBUSY; goto out; } @@ -360,7 +359,6 @@ int route_dt_irq_to_guest(struct domain *d, const struct dt_irq *irq, if ( retval ) goto out; - desc->arch.type = irq->type; gic_route_irq_to_guest(d, desc, cpumask_of(smp_processor_id()), GIC_PRI_IRQ); spin_unlock_irqrestore(&desc->lock, flags); diff --git a/xen/arch/arm/platforms/xgene-storm.c b/xen/arch/arm/platforms/xgene-storm.c index 70aab73..c9dd63c 100644 --- a/xen/arch/arm/platforms/xgene-storm.c +++ b/xen/arch/arm/platforms/xgene-storm.c @@ -57,16 +57,21 @@ static int map_one_mmio(struct domain *d, const char *what, static int map_one_spi(struct domain *d, const char *what, unsigned int spi, unsigned int type) { - struct dt_irq irq; + unsigned int irq; int ret; - irq.type = type; + irq = spi + 32; /* SPIs start at IRQ 32 */ - irq.irq = spi + 32; /* SPIs start at IRQ 32 */ + ret = irq_set_spi_type(irq, type); + if ( ret ) + { + printk("Failed to set the type for IRQ%u\n", irq); + return ret; + } - printk("Additional IRQ %u (%s)\n", irq.irq, what); + printk("Additional IRQ %u (%s)\n", irq, what); - ret = route_dt_irq_to_guest(d, &irq, what); + ret = route_irq_to_guest(d, irq, what); if ( ret ) printk("Failed to route %s to dom%d\n", what, d->domain_id); diff --git a/xen/include/asm-arm/irq.h b/xen/include/asm-arm/irq.h index bb55390..e567f71 100644 --- a/xen/include/asm-arm/irq.h +++ b/xen/include/asm-arm/irq.h @@ -40,8 +40,8 @@ void do_IRQ(struct cpu_user_regs *regs, unsigned int irq, int is_fiq); void init_IRQ(void); void init_secondary_IRQ(void); -int route_dt_irq_to_guest(struct domain *d, const struct dt_irq *irq, - const char *devname); +int route_irq_to_guest(struct domain *d, unsigned int irq, + const char *devname); /* Set IRQ type for an SPI */ int irq_set_spi_type(unsigned int spi, unsigned int type);