From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: [PATCH v3 01/18] xen/arm: timer: replace timer_dt_irq by timer_get_irq Date: Tue, 8 Apr 2014 15:43:50 +0100 Message-ID: <1396968247-8768-2-git-send-email-julien.grall@linaro.org> References: <1396968247-8768-1-git-send-email-julien.grall@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1WXXG2-000085-54 for xen-devel@lists.xenproject.org; Tue, 08 Apr 2014 14:44:14 +0000 Received: by mail-ee0-f46.google.com with SMTP id t10so764730eei.5 for ; Tue, 08 Apr 2014 07:44:12 -0700 (PDT) In-Reply-To: <1396968247-8768-1-git-send-email-julien.grall@linaro.org> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xenproject.org Cc: stefano.stabellini@citrix.com, Julien Grall , tim@xen.org, ian.campbell@citrix.com List-Id: xen-devel@lists.xenproject.org The function is nearly only used to retrieve the IRQ number. There is one place where the IRQ type is used (in domain_build.c) but as the timer IRQ is virtualised for guest we might not have the same property (e.g active-low level sensitive interrupt). Replace timer_dt_irq by timer_get_irq which will return the IRQ number. Signed-off-by: Julien Grall --- Changes in v2: - Patch added --- xen/arch/arm/domain_build.c | 23 +++++++++++++---------- xen/arch/arm/time.c | 4 ++-- xen/arch/arm/vtimer.c | 4 ++-- xen/include/asm-arm/time.h | 4 ++-- 4 files changed, 19 insertions(+), 16 deletions(-) diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c index 502db84..2035390 100644 --- a/xen/arch/arm/domain_build.c +++ b/xen/arch/arm/domain_build.c @@ -620,7 +620,7 @@ static int make_timer_node(const struct domain *d, void *fdt, u32 len; const void *compatible; int res; - const struct dt_irq *irq; + unsigned int irq; gic_interrupt_t intrs[3]; DPRINT("Create timer node\n"); @@ -647,17 +647,20 @@ static int make_timer_node(const struct domain *d, void *fdt, if ( res ) return res; - irq = timer_dt_irq(TIMER_PHYS_SECURE_PPI); - DPRINT(" Secure interrupt %u\n", irq->irq); - set_interrupt_ppi(intrs[0], irq->irq, 0xf, irq->type); + /* The timer IRQ is emulated by Xen. It always exposes an active-low + * level-sensitive interrupt */ - irq = timer_dt_irq(TIMER_PHYS_NONSECURE_PPI); - DPRINT(" Non secure interrupt %u\n", irq->irq); - set_interrupt_ppi(intrs[1], irq->irq, 0xf, irq->type); + irq = timer_get_irq(TIMER_PHYS_SECURE_PPI); + DPRINT(" Secure interrupt %u\n", irq); + set_interrupt_ppi(intrs[0], irq, 0xf, DT_IRQ_TYPE_LEVEL_LOW); - irq = timer_dt_irq(TIMER_VIRT_PPI); - DPRINT(" Virt interrupt %u\n", irq->irq); - set_interrupt_ppi(intrs[2], irq->irq, 0xf, irq->type); + irq = timer_get_irq(TIMER_PHYS_NONSECURE_PPI); + DPRINT(" Non secure interrupt %u\n", irq); + set_interrupt_ppi(intrs[1], irq, 0xf, DT_IRQ_TYPE_LEVEL_LOW); + + irq = timer_get_irq(TIMER_VIRT_PPI); + DPRINT(" Virt interrupt %u\n", irq); + set_interrupt_ppi(intrs[2], irq, 0xf, DT_IRQ_TYPE_LEVEL_LOW); res = fdt_property_interrupts(fdt, intrs, 3); if ( res ) diff --git a/xen/arch/arm/time.c b/xen/arch/arm/time.c index 8a55016..2db6148 100644 --- a/xen/arch/arm/time.c +++ b/xen/arch/arm/time.c @@ -50,11 +50,11 @@ unsigned long __read_mostly cpu_khz; /* CPU clock frequency in kHz. */ static struct dt_irq timer_irq[MAX_TIMER_PPI]; -const struct dt_irq *timer_dt_irq(enum timer_ppi ppi) +unsigned int timer_get_irq(enum timer_ppi ppi) { ASSERT(ppi >= TIMER_PHYS_SECURE_PPI && ppi < MAX_TIMER_PPI); - return &timer_irq[ppi]; + return timer_irq[ppi].irq; } /*static inline*/ s_time_t ticks_to_ns(uint64_t ticks) diff --git a/xen/arch/arm/vtimer.c b/xen/arch/arm/vtimer.c index 5603702..4a944dcf 100644 --- a/xen/arch/arm/vtimer.c +++ b/xen/arch/arm/vtimer.c @@ -64,7 +64,7 @@ int vcpu_vtimer_init(struct vcpu *v) t->ctl = 0; t->cval = NOW(); t->irq = d0 - ? timer_dt_irq(TIMER_PHYS_NONSECURE_PPI)->irq + ? timer_get_irq(TIMER_PHYS_NONSECURE_PPI) : GUEST_TIMER_PHYS_NS_PPI; t->v = v; @@ -72,7 +72,7 @@ int vcpu_vtimer_init(struct vcpu *v) init_timer(&t->timer, virt_timer_expired, t, v->processor); t->ctl = 0; t->irq = d0 - ? timer_dt_irq(TIMER_VIRT_PPI)->irq + ? timer_get_irq(TIMER_VIRT_PPI) : GUEST_TIMER_VIRT_PPI; t->v = v; diff --git a/xen/include/asm-arm/time.h b/xen/include/asm-arm/time.h index d10c737..9bbab0b 100644 --- a/xen/include/asm-arm/time.h +++ b/xen/include/asm-arm/time.h @@ -22,8 +22,8 @@ enum timer_ppi MAX_TIMER_PPI = 4, }; -/* Get one of the timer IRQ description */ -const struct dt_irq* timer_dt_irq(enum timer_ppi ppi); +/* Get one of the timer IRQ number */ +unsigned int timer_get_irq(enum timer_ppi ppi); /* Route timer's IRQ on this CPU */ extern void __cpuinit route_timer_interrupt(void); -- 1.7.10.4