From nobody Sun Feb 8 19:38:06 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1495380729585333.5737678151705; Sun, 21 May 2017 08:32:09 -0700 (PDT) Received: from localhost ([::1]:38378 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dCSpz-0003VE-U9 for importer@patchew.org; Sun, 21 May 2017 11:32:08 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53504) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dCSo2-0002Fm-SJ for qemu-devel@nongnu.org; Sun, 21 May 2017 11:30:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dCSo1-00079q-SN for qemu-devel@nongnu.org; Sun, 21 May 2017 11:30:06 -0400 Received: from mail.kernel.org ([198.145.29.99]:49518) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dCSnx-00076e-IN; Sun, 21 May 2017 11:30:01 -0400 Received: from kozik-lap.dzcmts001-cpe-001.datazug.ch (pub082136089155.dh-hfc.datazug.ch [82.136.89.155]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 74523239B0; Sun, 21 May 2017 15:29:59 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 74523239B0 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=krzk@kernel.org From: Krzysztof Kozlowski To: Igor Mitsyanko , Peter Maydell , qemu-arm@nongnu.org, qemu-devel@nongnu.org Date: Sun, 21 May 2017 17:29:39 +0200 Message-Id: <20170521152949.15338-2-krzk@kernel.org> X-Mailer: git-send-email 2.9.3 In-Reply-To: <20170521152949.15338-1-krzk@kernel.org> References: <20170521152949.15338-1-krzk@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 198.145.29.99 Subject: [Qemu-devel] [PATCH v3 01/11] hw/intc/exynos4210_gic: Fix GIC memory mappings for secondary CPU X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Krzysztof Kozlowski Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Recent Linux kernel (tested next-20170224) was complaining about missing GIC mask and was unable to bring up secondary CPU: [ =C2=A0 =C2=A00.000000] NR_IRQS:16 nr_irqs:16 16 [ 0.000000] GIC CPU mask not found - kernel will fail to boot. ... [ =C2=A0 =C2=A00.400492] smp: Bringing up secondary CPUs ... [ =C2=A0 =C2=A01.413184] CPU1: failed to boot: -110 [ =C2=A0 =C2=A01.423981] smp: Brought up 1 node, 1 CPU In its instance_init() call, the Exynos GIC driver was setting GIC memory mappings for each CPU, from 1 up to "num-cpu" property. The Exynos4210 machine init call on the other hand, first created Exynos GIC device and then set the "num-cpu" property which was too late. The init already happened with default "num-cpu" value of 1 thus GIC mappings were created only for the first CPU. Split the Exynos GIC init code into realize function so the code will see updated "num-cpu" property. This fixes the warning and brings second CPU: [ 0.435780] CPU1: thread -1, cpu 1, socket 9, mpidr 80000901 [ 0.451838] smp: Brought up 1 node, 2 CPUs Additionally this fixes missing Software Generated Interrupts (except CPU wakeup, non of SGIs are coming) which are needed for example for IRQ work. Lack of IRQ work causes kernel to hang during system power off because cpufreq_dbs_governor_stop() waits for completion with irq_work_sync(). Signed-off-by: Krzysztof Kozlowski Reviewed-by: Peter Maydell --- hw/intc/exynos4210_gic.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/hw/intc/exynos4210_gic.c b/hw/intc/exynos4210_gic.c index 2a55817b7660..222cfd6c6387 100644 --- a/hw/intc/exynos4210_gic.c +++ b/hw/intc/exynos4210_gic.c @@ -283,9 +283,20 @@ static void exynos4210_gic_set_irq(void *opaque, int i= rq, int level) =20 static void exynos4210_gic_init(Object *obj) { - DeviceState *dev =3D DEVICE(obj); Exynos4210GicState *s =3D EXYNOS4210_GIC(obj); - SysBusDevice *sbd =3D SYS_BUS_DEVICE(obj); + + memory_region_init(&s->cpu_container, obj, "exynos4210-cpu-container", + EXYNOS4210_EXT_GIC_CPU_REGION_SIZE); + memory_region_init(&s->dist_container, obj, "exynos4210-dist-container= ", + EXYNOS4210_EXT_GIC_DIST_REGION_SIZE); + +} + +static void exynos4210_gic_realize(DeviceState *dev, Error **errp) +{ + Exynos4210GicState *s =3D EXYNOS4210_GIC(dev); + SysBusDevice *sbd =3D SYS_BUS_DEVICE(dev); + Object *obj =3D OBJECT(dev); uint32_t i; const char cpu_prefix[] =3D "exynos4210-gic-alias_cpu"; const char dist_prefix[] =3D "exynos4210-gic-alias_dist"; @@ -306,11 +317,6 @@ static void exynos4210_gic_init(Object *obj) qdev_init_gpio_in(dev, exynos4210_gic_set_irq, EXYNOS4210_GIC_NIRQ - 32); =20 - memory_region_init(&s->cpu_container, obj, "exynos4210-cpu-container", - EXYNOS4210_EXT_GIC_CPU_REGION_SIZE); - memory_region_init(&s->dist_container, obj, "exynos4210-dist-container= ", - EXYNOS4210_EXT_GIC_DIST_REGION_SIZE); - for (i =3D 0; i < s->num_cpu; i++) { /* Map CPU interface per SMP Core */ sprintf(cpu_alias_name, "%s%x", cpu_prefix, i); @@ -346,6 +352,7 @@ static void exynos4210_gic_class_init(ObjectClass *klas= s, void *data) { DeviceClass *dc =3D DEVICE_CLASS(klass); =20 + dc->realize =3D exynos4210_gic_realize; dc->props =3D exynos4210_gic_properties; } =20 --=20 2.9.3