From patchwork Mon Aug 5 11:43:30 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Viktor Mitin X-Patchwork-Id: 11076575 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 72FF31395 for ; Mon, 5 Aug 2019 11:45:12 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5EF0428711 for ; Mon, 5 Aug 2019 11:45:12 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 5288128862; Mon, 5 Aug 2019 11:45:12 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id D26D128711 for ; Mon, 5 Aug 2019 11:45:11 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hubP4-0003qV-EZ; Mon, 05 Aug 2019 11:43:50 +0000 Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hubP3-0003qF-5x for xen-devel@lists.xenproject.org; Mon, 05 Aug 2019 11:43:49 +0000 X-Inumbo-ID: 48be938d-b776-11e9-8980-bc764e045a96 Received: from mail-lj1-x244.google.com (unknown [2a00:1450:4864:20::244]) by us1-rack-dfw2.inumbo.com (Halon) with ESMTPS id 48be938d-b776-11e9-8980-bc764e045a96; Mon, 05 Aug 2019 11:43:47 +0000 (UTC) Received: by mail-lj1-x244.google.com with SMTP id v24so79167696ljg.13 for ; Mon, 05 Aug 2019 04:43:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=8JuvpGQ3wx8Yo7D6k7rA2XzkzCzB1WWESXIUApcCbpc=; b=OXytcxTGZ85Q9fXekMiP9JXk07frLjSow4YCeQ6ORX1pHYexTvDlvjs+JY8Rjs9wWQ xUAuf/qpEXfdZzBVuKBVZuRZsiPVcdMxWoxOpj9/uKgb72zFSVaqFEj3OY9FGBE5rmFI WrD+wkLBz4yS11/tIS7byVVl5wSeQNirxQ7P2eqQpd7rKc4idPr9hvzqDe2VrTkRr2Na 9Marf5qF0rdLnS4IiQ85DYle++VzmFTSubjYEaH5TWyLyA3r8Yrn3mJ+XsVdpGPeNuLn BDViWjoBcQ+rs1bKySGfw/PkuksRL/IEh1T7rSPwWEPRvY7c6yLTuoSZ9w88Z6VuGFps bmxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=8JuvpGQ3wx8Yo7D6k7rA2XzkzCzB1WWESXIUApcCbpc=; b=R6o/p89PpcImWYZmZhf18vOnk17pqoPmgLfcC9e9J3H4FJLTiwP8h7KWKpgfY5rz6+ BSbgX8YYa540Z0amUhC5lpjhBFVSRHYG4HTY0U/DTzLcpg9aMnUgcZmK0ghoJbv98/63 yM3osFyy8oXYx8wTk8dMhBsYhpQ0ke00WDH4HE+jLdwxAShzj52F/xtoWMSHvbTAXhJY eHRFIBKU/l944Or8dd+ed1po3r0K8j9BEma6bjd9uEmPsoFl+iimlsUMmC7NX8dxgI3h Ft1PM8qAdo1UofBZwfg7jovAnehuCSfcN+CCWX1mhCB4WmdkXeqjn235JNo8IFg6uX1a BU7w== X-Gm-Message-State: APjAAAWOzwbnxEjyQ9at1VqbTyhNi8KUdMgW04DnZW5LzOgHUJzvZR01 POaWLXA9qJ/gHpSYXTmMaCawyNVq X-Google-Smtp-Source: APXvYqxMQQvjlH8eQB3el0yNgkPHeja/iNbwW0eF+5OcRJe31Eo28zN0qOEq74uEusoF/ine1ZC33w== X-Received: by 2002:a05:651c:92:: with SMTP id 18mr70406302ljq.35.1565005425942; Mon, 05 Aug 2019 04:43:45 -0700 (PDT) Received: from 3489.kyiv.epam.com (ll-22.209.223.85.sovam.net.ua. [85.223.209.22]) by smtp.gmail.com with ESMTPSA id b1sm17285057ljj.26.2019.08.05.04.43.44 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Mon, 05 Aug 2019 04:43:45 -0700 (PDT) From: Viktor Mitin To: xen-devel@lists.xenproject.org Date: Mon, 5 Aug 2019 14:43:30 +0300 Message-Id: <20190805114332.15329-2-viktor.mitin.19@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190805114332.15329-1-viktor.mitin.19@gmail.com> References: <20190805114332.15329-1-viktor.mitin.19@gmail.com> Subject: [Xen-devel] [PATCH v6 1/2] xen/arm: extend fdt_property_interrupts to support DomU X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Volodymyr Babchuk , Julien Grall , Stefano Stabellini , Viktor Mitin , Viktor Mitin MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" X-Virus-Scanned: ClamAV using ClamSMTP Extend fdt_property_interrupts to deal with other domain than the hwdom. The prototype of fdt_property_interrupts() has been modified to support both hwdom and domU in one function. This is a preparatory for the next patch which consolidates make_timer_node and make_timer_domU_node". Original goal is to consolidate make_timer functions. Suggested-by: Julien Grall Signed-off-by: Viktor Mitin --- xen/arch/arm/domain_build.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c index 4c8404155a..bc7d17dd2c 100644 --- a/xen/arch/arm/domain_build.c +++ b/xen/arch/arm/domain_build.c @@ -621,17 +621,20 @@ static void __init set_interrupt(gic_interrupt_t interrupt, * "interrupts": contains the list of interrupts * "interrupt-parent": link to the GIC */ -static int __init fdt_property_interrupts(void *fdt, gic_interrupt_t *intr, +static int __init fdt_property_interrupts(const struct kernel_info *kinfo, + gic_interrupt_t *intr, unsigned num_irq) { int res; + uint32_t phandle = is_hardware_domain(kinfo->d) ? + dt_interrupt_controller->phandle : GUEST_PHANDLE_GIC; - res = fdt_property(fdt, "interrupts", intr, sizeof (intr[0]) * num_irq); + res = fdt_property(kinfo->fdt, "interrupts", + intr, sizeof (intr[0]) * num_irq); if ( res ) return res; - res = fdt_property_cell(fdt, "interrupt-parent", - dt_interrupt_controller->phandle); + res = fdt_property_cell(kinfo->fdt, "interrupt-parent", phandle); return res; } @@ -733,7 +736,7 @@ static int __init make_hypervisor_node(struct domain *d, * TODO: Handle properly the cpumask; */ set_interrupt(intr, d->arch.evtchn_irq, 0xf, DT_IRQ_TYPE_LEVEL_LOW); - res = fdt_property_interrupts(fdt, &intr, 1); + res = fdt_property_interrupts(kinfo, &intr, 1); if ( res ) return res; @@ -960,8 +963,9 @@ static int __init make_gic_node(const struct domain *d, void *fdt, return res; } -static int __init make_timer_node(const struct domain *d, void *fdt) +static int __init make_timer_node(const struct kernel_info *kinfo) { + void *fdt = kinfo->fdt; static const struct dt_device_match timer_ids[] __initconst = { DT_MATCH_COMPATIBLE("arm,armv7-timer"), @@ -1016,7 +1020,7 @@ static int __init make_timer_node(const struct domain *d, void *fdt) dt_dprintk(" Virt interrupt %u\n", irq); set_interrupt(intrs[2], irq, 0xf, DT_IRQ_TYPE_LEVEL_LOW); - res = fdt_property_interrupts(fdt, intrs, 3); + res = fdt_property_interrupts(kinfo, intrs, 3); if ( res ) return res; @@ -1377,7 +1381,7 @@ static int __init handle_node(struct domain *d, struct kernel_info *kinfo, if ( device_get_class(node) == DEVICE_GIC ) return make_gic_node(d, kinfo->fdt, node); if ( dt_match_node(timer_matches, node) ) - return make_timer_node(d, kinfo->fdt); + return make_timer_node(kinfo); /* Skip nodes used by Xen */ if ( dt_device_used_by(node) == DOMID_XEN ) From patchwork Mon Aug 5 11:43:31 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Viktor Mitin X-Patchwork-Id: 11076581 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 201EA112C for ; Mon, 5 Aug 2019 11:45:41 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 094F6285B9 for ; Mon, 5 Aug 2019 11:45:41 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id EDAA8285ED; Mon, 5 Aug 2019 11:45:40 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 6DD98285B9 for ; Mon, 5 Aug 2019 11:45:40 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hubP7-0003ri-OP; Mon, 05 Aug 2019 11:43:53 +0000 Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hubP6-0003rB-60 for xen-devel@lists.xenproject.org; Mon, 05 Aug 2019 11:43:52 +0000 X-Inumbo-ID: 4aec2633-b776-11e9-8980-bc764e045a96 Received: from mail-lf1-x143.google.com (unknown [2a00:1450:4864:20::143]) by us1-rack-dfw2.inumbo.com (Halon) with ESMTPS id 4aec2633-b776-11e9-8980-bc764e045a96; Mon, 05 Aug 2019 11:43:51 +0000 (UTC) Received: by mail-lf1-x143.google.com with SMTP id c19so57681813lfm.10 for ; Mon, 05 Aug 2019 04:43:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=mq/9kgjMosUAIprB5ywg2Au7PHOWEW2H+vbX8ljPcm0=; b=rnfDX7DI8yc453cKCeLRdWtZ1FQ8je9zUz+tq92fqQ8lTI/MRfzrbp5HjhgmLHjJo1 7dTQXd3fl8ZucnJZhd0ydTaGCBoFHAdtMVLqz8CxZzzZ+/82VrFBfzqgUGinXMX1/q3i oMieOCtX4oFlCgEsID1xir/qicgvnOGdLEJx36D3Beiy0oeWNhQjoqQYO6vM6HtRpoGT 68I893+Fgt62mIKmt8jDIJj3Z3auDofuCQGagdemPnJ9Ob7gY0ER+6e0R5ArtVVOomqh XtrsUl4IG3QMwHNf9B/zeeCNYtjvwuytxs0ol/2HwQ9TMUI44TeHMNm/y5yOPPadxSZv uIVQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=mq/9kgjMosUAIprB5ywg2Au7PHOWEW2H+vbX8ljPcm0=; b=Cx7qus+9rMrAkv3WMtMcxTiiY8x0YL33kbMpvjF9dRQOja5sf3Zm6SweU7YQbXbtbu EMlbjaqlwrS2VbrhuxFMfuBQbfdN3Ctd6CiCrz3YgJ2rjaFrr09IJ5eeCU+BWDd7gQOP OK9u6XdIcnErftNqkkHvR0BbJtGS8mZyPxACxYWUt6Zs9t8z3lZMypeRTy4Nb72Z2YJH 9jCNfwS9liAgPfxn+edb+Ulb23rLZ9PYe+6UnQXu++24fxGcw1zjMMoYf0zA+Lj86Kq9 F5wNJA3+WHOJjIEbfX38fv7HICsyXywFOAhgSzE1evsS9+kba7YzI0SodJHMrsstYJw/ 4rZw== X-Gm-Message-State: APjAAAVZCJnEk5bDqsCmrc4Jg575AN5MfEHqxGnxPqKshgc4ra7uaCd8 btUvZ7teuts7fQIeMT50Gk+ChoYZ X-Google-Smtp-Source: APXvYqwMGmMPKmUF7WivY2WtV8fQLYy50u3UmcyPRMp2UOmbjfxATC/fTTvoFdvzQNBiqrn2HhG9SA== X-Received: by 2002:a19:7006:: with SMTP id h6mr70138989lfc.5.1565005429279; Mon, 05 Aug 2019 04:43:49 -0700 (PDT) Received: from 3489.kyiv.epam.com (ll-22.209.223.85.sovam.net.ua. [85.223.209.22]) by smtp.gmail.com with ESMTPSA id b1sm17285057ljj.26.2019.08.05.04.43.48 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Mon, 05 Aug 2019 04:43:48 -0700 (PDT) From: Viktor Mitin To: xen-devel@lists.xenproject.org Date: Mon, 5 Aug 2019 14:43:31 +0300 Message-Id: <20190805114332.15329-3-viktor.mitin.19@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190805114332.15329-1-viktor.mitin.19@gmail.com> References: <20190805114332.15329-1-viktor.mitin.19@gmail.com> Subject: [Xen-devel] [PATCH v6 2/2] xen/arm: consolidate make_timer_node and make_timer_domU_node X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Volodymyr Babchuk , Julien Grall , Stefano Stabellini , Viktor Mitin , Viktor Mitin MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" X-Virus-Scanned: ClamAV using ClamSMTP Functions make_timer_node and make_timer_domU_node are quite similar. So it is better to consolidate them to avoid discrepancy. The main difference between the functions is the timer interrupts used. Keep the domU version for the compatible as it is simpler: do not copy platform's 'compatible' property into hwdom device tree, instead set either arm,armv7-timer or arm,armv8-timer, depending on the platform type. Keep the hw version for the clock as it is relevant for the both cases. Suggested-by: Julien Grall Signed-off-by: Viktor Mitin --- v4 updates: updated "Keep the domU version for the compatible as it is simpler" v5 updates: - changed 'kept' to 'keep', etc. - removed empty line - updated indentation of parameters in functions calls - fixed NITs - updated commit message v6 updates: - move if out of outer "if" - add full stop at the end of the last sentence - minor rephrase of commit message --- xen/arch/arm/domain_build.c | 100 +++++++++++++----------------------- 1 file changed, 35 insertions(+), 65 deletions(-) diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c index bc7d17dd2c..b9954d2c3c 100644 --- a/xen/arch/arm/domain_build.c +++ b/xen/arch/arm/domain_build.c @@ -973,10 +973,8 @@ static int __init make_timer_node(const struct kernel_info *kinfo) { /* sentinel */ }, }; struct dt_device_node *dev; - u32 len; - const void *compatible; int res; - unsigned int irq; + unsigned int irq[MAX_TIMER_PPI]; gic_interrupt_t intrs[3]; u32 clock_frequency; bool clock_valid; @@ -990,35 +988,47 @@ static int __init make_timer_node(const struct kernel_info *kinfo) return -FDT_ERR_XEN(ENOENT); } - compatible = dt_get_property(dev, "compatible", &len); - if ( !compatible ) - { - dprintk(XENLOG_ERR, "Can't find compatible property for timer node\n"); - return -FDT_ERR_XEN(ENOENT); - } - res = fdt_begin_node(fdt, "timer"); if ( res ) return res; - res = fdt_property(fdt, "compatible", compatible, len); + if ( !is_64bit_domain(kinfo->d) ) + { + res = fdt_property_string(fdt, "compatible", "arm,armv7-timer"); + } + else + { + res = fdt_property_string(fdt, "compatible", "arm,armv8-timer"); + } if ( res ) return res; - /* The timer IRQ is emulated by Xen. It always exposes an active-low - * level-sensitive interrupt */ - - irq = timer_get_irq(TIMER_PHYS_SECURE_PPI); - dt_dprintk(" Secure interrupt %u\n", irq); - set_interrupt(intrs[0], irq, 0xf, DT_IRQ_TYPE_LEVEL_LOW); - - irq = timer_get_irq(TIMER_PHYS_NONSECURE_PPI); - dt_dprintk(" Non secure interrupt %u\n", irq); - set_interrupt(intrs[1], irq, 0xf, DT_IRQ_TYPE_LEVEL_LOW); + /* + * The timer IRQ is emulated by Xen. + * It always exposes an active-low level-sensitive interrupt. + */ - irq = timer_get_irq(TIMER_VIRT_PPI); - dt_dprintk(" Virt interrupt %u\n", irq); - set_interrupt(intrs[2], irq, 0xf, DT_IRQ_TYPE_LEVEL_LOW); + if ( is_hardware_domain(kinfo->d) ) + { + irq[TIMER_PHYS_SECURE_PPI] = timer_get_irq(TIMER_PHYS_SECURE_PPI); + irq[TIMER_PHYS_NONSECURE_PPI] = + timer_get_irq(TIMER_PHYS_NONSECURE_PPI); + irq[TIMER_VIRT_PPI] = timer_get_irq(TIMER_VIRT_PPI); + } + else + { + irq[TIMER_PHYS_SECURE_PPI] = GUEST_TIMER_PHYS_S_PPI; + irq[TIMER_PHYS_NONSECURE_PPI] = GUEST_TIMER_PHYS_NS_PPI; + irq[TIMER_VIRT_PPI] = GUEST_TIMER_VIRT_PPI; + } + dt_dprintk(" Secure interrupt %u\n", irq[TIMER_PHYS_SECURE_PPI]); + set_interrupt(intrs[0], irq[TIMER_PHYS_SECURE_PPI], + 0xf, DT_IRQ_TYPE_LEVEL_LOW); + dt_dprintk(" Non secure interrupt %u\n", irq[TIMER_PHYS_NONSECURE_PPI]); + set_interrupt(intrs[1], irq[TIMER_PHYS_NONSECURE_PPI], + 0xf, DT_IRQ_TYPE_LEVEL_LOW); + dt_dprintk(" Virt interrupt %u\n", irq[TIMER_VIRT_PPI]); + set_interrupt(intrs[2], irq[TIMER_VIRT_PPI], 0xf, DT_IRQ_TYPE_LEVEL_LOW); res = fdt_property_interrupts(kinfo, intrs, 3); if ( res ) @@ -1603,46 +1613,6 @@ static int __init make_gic_domU_node(const struct domain *d, void *fdt) } } -static int __init make_timer_domU_node(const struct domain *d, void *fdt) -{ - int res; - gic_interrupt_t intrs[3]; - - res = fdt_begin_node(fdt, "timer"); - if ( res ) - return res; - - if ( !is_64bit_domain(d) ) - { - res = fdt_property_string(fdt, "compatible", "arm,armv7-timer"); - if ( res ) - return res; - } - else - { - res = fdt_property_string(fdt, "compatible", "arm,armv8-timer"); - if ( res ) - return res; - } - - set_interrupt(intrs[0], GUEST_TIMER_PHYS_S_PPI, 0xf, DT_IRQ_TYPE_LEVEL_LOW); - set_interrupt(intrs[1], GUEST_TIMER_PHYS_NS_PPI, 0xf, DT_IRQ_TYPE_LEVEL_LOW); - set_interrupt(intrs[2], GUEST_TIMER_VIRT_PPI, 0xf, DT_IRQ_TYPE_LEVEL_LOW); - - res = fdt_property(fdt, "interrupts", intrs, sizeof (intrs[0]) * 3); - if ( res ) - return res; - - res = fdt_property_cell(fdt, "interrupt-parent", - GUEST_PHANDLE_GIC); - if (res) - return res; - - res = fdt_end_node(fdt); - - return res; -} - #ifdef CONFIG_SBSA_VUART_CONSOLE static int __init make_vpl011_uart_node(const struct domain *d, void *fdt) { @@ -1748,7 +1718,7 @@ static int __init prepare_dtb_domU(struct domain *d, struct kernel_info *kinfo) if ( ret ) goto err; - ret = make_timer_domU_node(d, kinfo->fdt); + ret = make_timer_node(kinfo); if ( ret ) goto err;