From patchwork Mon Jan 21 18:50:56 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 156229 Delivered-To: patches@linaro.org Received: by 2002:a02:48:0:0:0:0:0 with SMTP id 69csp6700928jaa; Mon, 21 Jan 2019 10:51:22 -0800 (PST) X-Received: by 2002:a1c:864f:: with SMTP id i76mr517620wmd.83.1548096681991; Mon, 21 Jan 2019 10:51:21 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548096681; cv=none; d=google.com; s=arc-20160816; b=J+SMfN9aX5y7Bkx1hvsknAJwPTrOA5vpc5JAIeqm9nwjZN6Kayfx2JAhCr4IGpd/zG c93Ugs2Tc26sNjMsl5inQ4tssShW6fvvW1Xf50/1QWDOymgl9yDDnpLsJHfDsvBRSefJ cJpu31bYsM+G0khXr46trBET/ta1uFbqETEjMJ65JzQZqvgc75FiI0qQoNNTgSlzbQqR R64NZKOLanqt8Ee0guFEu+IMZef6IkyNNavMsuXFLp52L+8RUdrLwD6zGwEUu0LDDVMR UNchllf9CDt5/5waGlo4uwVanE52ada+MsXHJmKDD4C09qfPjn3Or8FU93fTfTsb/euY eJKw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=BudMfJPXXih/S5U7jqBZwz9zkq27ugNQSCi2J5JSPGU=; b=kI4CL68XzwYIJ+E8vEbjZFgzTuN7pc2GFSo7ZopzzMbhyVTHTPlKswnT6NtNTy1t5I R1mtT8GZegq8bjX4Fek3YrNPotbM+tuRk/rIrxlHlHpIqtLaHNxjNYDvGk8GpL/cpNed RdCj8jXjRoI2CzUD/tVoF/tYLouBufOq7lCtMw578OsTf52igtuuaqe4ndMPnbmjCAPx xRhlarpNmJN8RxkdsG8bwyhTiyNKCnVB1buooSZNPUfZV4svEQG+4dg/8J5ej+MtANnS biCllyokn/dQZZhOcKnvarFSjmC9ltaXBlyRFniyx0gFJF208rKdVHYZ3mlA4QA5b/a7 WJBA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=XGzQP9dE; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id m21sor31307066wmi.23.2019.01.21.10.51.21 for (Google Transport Security); Mon, 21 Jan 2019 10:51:21 -0800 (PST) Received-SPF: pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) client-ip=209.85.220.65; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=XGzQP9dE; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=BudMfJPXXih/S5U7jqBZwz9zkq27ugNQSCi2J5JSPGU=; b=XGzQP9dEvABjlLxrY/+/pZ/MQQI8uNCahT7MkkBNCbeGAYlBVVnNTWqUxZqbOioDx2 DPrEyzLGeU+PumTbco9Pj9sbKuO+/xtnqD4ZI35xnJQw+Nw9htZ7VIfhPZ1M7mLh3Mig Jhy4GdPtL7l4afGLwQnDQtaA7XBGoN8f2bVo4= 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:mime-version:content-transfer-encoding; bh=BudMfJPXXih/S5U7jqBZwz9zkq27ugNQSCi2J5JSPGU=; b=CwqLlK1FXYJGG8EcuYcUqJR3NS9USPpWGCMqvLG6s8ONGnn3k6+PbxZpHXwd++D6tB BoiAsb73mJEdQsPFqeZhOiSkM5tm7u4CnpKHwoBqOAMczV9Y4qUHUC7KCEdBk2JWHbsL xu7UtgMzYD6tYzZiqIMDeQGDOKfKbp5BhFcJ2ATVoSP2xFd/6hMIivPkIP4Zucnhjre/ mbTZV9fn1DjutUvEqjvA52L7IznXQJDPTduM8ARSr8gF9YIJJOYFLqi1mi4edVcUw/gP Prmot5Mjw1IryX7P9+95XFmCMm0mfjqsgdFGsno2BI9jfyMZEdtw+Y/JXS2t8mW7jZwB KVjg== X-Gm-Message-State: AJcUukd/7vqazMr6tUhB+UqhV2z0HFbZg06dA6j/ntCWQW+sQ8HyyqQc zZ1mcXonelhKZEz31Gn4IjRxH4Dz X-Google-Smtp-Source: ALg8bN6lHnG1wHLT2fssKPXA128lwayAB6B3XPWM3uG1o0UZd7gdtXUfRvw2lsKMv25QDq82KZlvYw== X-Received: by 2002:a1c:5984:: with SMTP id n126mr555831wmb.62.1548096681581; Mon, 21 Jan 2019 10:51:21 -0800 (PST) Return-Path: Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id n82sm50386660wma.42.2019.01.21.10.51.20 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 21 Jan 2019 10:51:20 -0800 (PST) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Cc: patches@linaro.org Subject: [PATCH 01/23] armv7m: Don't assume the NVIC's CPU is CPU 0 Date: Mon, 21 Jan 2019 18:50:56 +0000 Message-Id: <20190121185118.18550-2-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190121185118.18550-1-peter.maydell@linaro.org> References: <20190121185118.18550-1-peter.maydell@linaro.org> MIME-Version: 1.0 Currently the ARMv7M NVIC object's realize method assumes that the CPU the NVIC is attached to is CPU 0, because it thinks there can only ever be one CPU in the system. To allow a dual-Cortex-M33 setup we need to remove this assumption; instead the armv7m wrapper object tells the NVIC its CPU, in the same way that it already tells the CPU what the NVIC is. Signed-off-by: Peter Maydell --- hw/arm/armv7m.c | 6 ++++-- hw/intc/armv7m_nvic.c | 3 +-- 2 files changed, 5 insertions(+), 4 deletions(-) -- 2.20.1 Reviewed-by: Philippe Mathieu-Daudé Reviewed-by: Richard Henderson diff --git a/hw/arm/armv7m.c b/hw/arm/armv7m.c index f4446528307..f9aa83d20ef 100644 --- a/hw/arm/armv7m.c +++ b/hw/arm/armv7m.c @@ -178,10 +178,12 @@ static void armv7m_realize(DeviceState *dev, Error **errp) } } - /* Tell the CPU where the NVIC is; it will fail realize if it doesn't - * have one. + /* + * Tell the CPU where the NVIC is; it will fail realize if it doesn't + * have one. Similarly, tell the NVIC where its CPU is. */ s->cpu->env.nvic = &s->nvic; + s->nvic.cpu = s->cpu; object_property_set_bool(OBJECT(s->cpu), true, "realized", &err); if (err != NULL) { diff --git a/hw/intc/armv7m_nvic.c b/hw/intc/armv7m_nvic.c index 0beefb05d44..790a3d95849 100644 --- a/hw/intc/armv7m_nvic.c +++ b/hw/intc/armv7m_nvic.c @@ -2274,8 +2274,7 @@ static void armv7m_nvic_realize(DeviceState *dev, Error **errp) Error *err = NULL; int regionlen; - s->cpu = ARM_CPU(qemu_get_cpu(0)); - + /* The armv7m container object will have set our CPU pointer */ if (!s->cpu || !arm_feature(&s->cpu->env, ARM_FEATURE_M)) { error_setg(errp, "The NVIC can only be used with a Cortex-M CPU"); return; From patchwork Mon Jan 21 18:50:57 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 156230 Delivered-To: patches@linaro.org Received: by 2002:a02:48:0:0:0:0:0 with SMTP id 69csp6700946jaa; Mon, 21 Jan 2019 10:51:23 -0800 (PST) X-Received: by 2002:a7b:ce84:: with SMTP id q4mr545270wmj.105.1548096683016; Mon, 21 Jan 2019 10:51:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548096683; cv=none; d=google.com; s=arc-20160816; b=mrd8EQ6x0SAllBKEyW9gVfSnVbGCZ6YITiqq/7DKBowrDywyYWNPP+gijhuzMZ93uG MM/T/0g5xFUum+ahUCFGSbh501z6Zl9HOKxFy5ZycDpzqdXkP+PV5mOTr3R8LKKf8MMX sJ8xcLl55EsCdpMs3GiR/tDYYMOOmbET0R13vE4yoNhMu/3YBJ8RHxcZx7jCKDhfv1SW SuUAWRmIVx3lV0z7lUBICz7mihS72fGSXlAmXvQkYQ6TMl09KHWVPEfgTVIFWSQOPPi8 FfT+HP9wWQmt2gpof3BjRdigtdux/hDFrBPaanC8Isp52CMnoeNtlFw/3YGwuVkCXifk nIXQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=Riqos2VP4k1FpZGAuE3wK4J/sKpJkrJvi5DAGfdCgXc=; b=WdgLq5FgMaPCa6UMJ6ulYoCeSytjxZ/SloVXTUlunc0WzkHdahaMaLSUaaYBbyHUn8 8Bh2dVL8cMYqZ93++hlV9ssHUOFQ+Qgcuf8zwcRVrYfGMZE37ptUuMuSAdQiH/FFHpCP OFZuTwog3nsXOcpHqCi3ZdRD0xxurkLT8Yz5dUTQuehn1Z+JDHVItkvWjMRnc8M+zLQH Hp2+M3FLSY9gEpA9YZDil8zgjs2kEUjAeC+jvgRUM5ywfCMcVRSY/FLFS+3D44OWLhh5 xbgcwXbd8c+TMSpfJ1PhNHgdqYuwxMQW7rJpNl/I9gwZiohaNa4V0m7sVLtRZrs5kHWs miFw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=EvbakUOs; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id r17sor25120365wrv.44.2019.01.21.10.51.22 for (Google Transport Security); Mon, 21 Jan 2019 10:51:22 -0800 (PST) Received-SPF: pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) client-ip=209.85.220.65; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=EvbakUOs; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Riqos2VP4k1FpZGAuE3wK4J/sKpJkrJvi5DAGfdCgXc=; b=EvbakUOsiQn1dEFRXSf/ntddoYujwEmLJBVnqkFQFDYG04lBDchLWPq76KUWx6nRd3 b0J+2Oq7JRrChIcSdsT4WVYi889yEFogbROpRP8CW1goEQ/GZkwPXqqX2pNeg0MEsG/j slGuUfA+u/GcZbfHIfygPLW1s4Oz9hcClk2NQ= 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:mime-version:content-transfer-encoding; bh=Riqos2VP4k1FpZGAuE3wK4J/sKpJkrJvi5DAGfdCgXc=; b=cA/tNzyVDxp8Mg44KEumubtUglYusHl8BXuhgBg4LVOF5pIRPiZvg0bIj1zs5Vyk0B DsFeW6aKDtstLZgudGrhGvTri2BXz0mftzLwEFoj+TfdjlZM8rX8W67m9Ba7gvVBLSnX KIx4TrVJHherVyDATJIz1f73PHIoIvd2RW98dtmEnQ8LAVRLtsDCnQHfRDP17UQpfnV3 jgryhPSIFd8Mn4QE41PLe1xCFsPV1VMShOTW96WG7MLL02jeWXAAON82nq0toTF6ZIDX rMQUkbktgW6OfC+yD83m1KU1d7p1ZwEl2riYoGXKJ5mjpiAaTs3lG41V+Ao36gmdmur0 D0dw== X-Gm-Message-State: AJcUukfvyRsA6gmFo75A4Ca5JQb08Tyee3jA4Eg+0xfsyxGxhqyyCkR5 g/Sndl79IzlW1SRK6YBPYxdFCbDSWOyAucLw X-Google-Smtp-Source: ALg8bN6XNOdoDuJrYJCPwHdvi1b9dBWSYfEtimjlBPBKhP0ZqZFQYm72CM77rZnd/b0asqgx++EYag== X-Received: by 2002:a5d:42ce:: with SMTP id t14mr29775792wrr.51.1548096682643; Mon, 21 Jan 2019 10:51:22 -0800 (PST) Return-Path: Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id n82sm50386660wma.42.2019.01.21.10.51.21 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 21 Jan 2019 10:51:22 -0800 (PST) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Cc: patches@linaro.org Subject: [PATCH 02/23] armv7m: Make cpu object a child of the armv7m container Date: Mon, 21 Jan 2019 18:50:57 +0000 Message-Id: <20190121185118.18550-3-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190121185118.18550-1-peter.maydell@linaro.org> References: <20190121185118.18550-1-peter.maydell@linaro.org> MIME-Version: 1.0 Rather than just creating the CPUs with object_new, make them child objects of the armv7m container. This will allow the cluster code to find the CPUs if an armv7m object is made a child of a cluster object. object_new_with_props() will do the parenting for us. Signed-off-by: Peter Maydell --- hw/arm/armv7m.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) -- 2.20.1 Reviewed-by: Philippe Mathieu-Daudé Reviewed-by: Richard Henderson diff --git a/hw/arm/armv7m.c b/hw/arm/armv7m.c index f9aa83d20ef..0f2c8e066cf 100644 --- a/hw/arm/armv7m.c +++ b/hw/arm/armv7m.c @@ -158,7 +158,12 @@ static void armv7m_realize(DeviceState *dev, Error **errp) memory_region_add_subregion_overlap(&s->container, 0, s->board_memory, -1); - s->cpu = ARM_CPU(object_new(s->cpu_type)); + s->cpu = ARM_CPU(object_new_with_props(s->cpu_type, OBJECT(s), "cpu", + &err, NULL)); + if (err != NULL) { + error_propagate(errp, err); + return; + } object_property_set_link(OBJECT(s->cpu), OBJECT(&s->container), "memory", &error_abort); From patchwork Mon Jan 21 18:50:58 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 156231 Delivered-To: patches@linaro.org Received: by 2002:a02:48:0:0:0:0:0 with SMTP id 69csp6700960jaa; Mon, 21 Jan 2019 10:51:24 -0800 (PST) X-Received: by 2002:a5d:49cd:: with SMTP id t13mr29885939wrs.144.1548096684089; Mon, 21 Jan 2019 10:51:24 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548096684; cv=none; d=google.com; s=arc-20160816; b=pFZOdVtUB5+bksFmza3q0ah0bJ7MFk65GbPQKiyVOoKu4DtihQpEu1hnP81jFqEUbp lDVRzBowyqorEEVPOXu7Mcbo7RDuHWItvJxCU4tM+4C3RiEm6+qHtuTcrKWMm/kddB3h jT5fs8ej0srjO9JJN4ibJ5HncndQUwouGB0gxB6gXEJ4TOUsivj82qxI3RJcYkA34PPj 7lip7nUaz97LlReE8bYiBVdeE+miio2S+C0Uq7OTnQ963QPJJtOCGre/r4yKSvYCOYPT 9gr1bqgSkFXbxf3REcFnoLiTGtauqePK3oDkbKiNGStT6s7o68H5ARp8eRbvMYIQlQCP H0Fw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=WmmMPknEg5hUgKMPxj3CIX2ru0eV6+lHEZhIc4wzqM8=; b=H7F8mFze8qxsnlwPIHWx4wEfR5OlWL79LYeoNNfIxXZ3/3csjq8dGrINIdKqigkOfr 9cenNktWdQQXnLK9HguSRt00PknLAmLHCR1uxHTH3n0jrbJVUJdUl9En5vTNPaqCtVn3 rZAyKs6e4ldknaedDZ3IxTHnHzGvBWNzCJhOeF4cq7ec1dsS8gO+YDMLZHKHYWQWO9yo WveNL8FjXKUVSUAxLuV0SL4v4IGN2ZUzETJ2qztuYsBn+GOPsomEBrFVCeHIrZVzRy6V PRwtp1rStw3GoTs9AFjECPMyFjlMheF40V21nTbWRY3BGycD6bxNf8SJsmPZ3ER6rJvG wumw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=kH4B50ds; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id k3sor63929122wre.42.2019.01.21.10.51.23 for (Google Transport Security); Mon, 21 Jan 2019 10:51:24 -0800 (PST) Received-SPF: pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) client-ip=209.85.220.65; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=kH4B50ds; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=WmmMPknEg5hUgKMPxj3CIX2ru0eV6+lHEZhIc4wzqM8=; b=kH4B50dshKqdlBEi6X0rMUGnH6egzwECFs6BSbOgtvrdRxemJY4HfY13l7SC5DYKHB 7OER1cxXNm7G6ztPQKqunG7Hnzaum2GCAifUl3gx/wr9h0pVFo3Z/e+uYtRevlhvoVhU vn+oclbjsas45TKGbePHHNtXJbMLFnYIQNe6w= 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:mime-version:content-transfer-encoding; bh=WmmMPknEg5hUgKMPxj3CIX2ru0eV6+lHEZhIc4wzqM8=; b=Np0H81I57yCB1mMEzXtAvRV5fzm6lWbPWonSOZuigXL6d1X1cFxBjhV/d9oJEpsuKt x8S4dfsRI25rgBJBR7V7LeXWJZBqHsfViEq5DxaFb9c+rHaNHNqWMM8yy8kMofvRpK8Q IDesykTsNLo2EmZCeBzTKyOuLPshZbamQR4XqywgB+jrHjkVFS5G34dh2oQnmhSJuJV5 30o49TdkSIukkp5PcvxOAvfl8EPBATUYJrGK5By1Z6bNVCqng7aXNlNkSFF4Yw3m/IY/ 6s/0YdoQmvu8FxzMDlVZLX3nsIrQsL6zzgtcDbLTzoIeGLVfvKaRqZc7rZ9SALrimrVb mx5Q== X-Gm-Message-State: AJcUukfP98C/Vf9O51bbdHnU3a6sejjD5KX4r63pEV0HMKQc6w1Gf6eg Btn2whJ6AdgqLx8+rwCZd8pUa3rS X-Google-Smtp-Source: ALg8bN40GC0rRvzHIHkzbMX64/LuIT+NuKFgFmD8W/jqvnmInODPCvaQJF732AZaeVE/iazwYrb35g== X-Received: by 2002:adf:9f10:: with SMTP id l16mr30472796wrf.206.1548096683696; Mon, 21 Jan 2019 10:51:23 -0800 (PST) Return-Path: Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id n82sm50386660wma.42.2019.01.21.10.51.22 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 21 Jan 2019 10:51:23 -0800 (PST) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Cc: patches@linaro.org Subject: [PATCH 03/23] armv7m: Pass through start-powered-off CPU property Date: Mon, 21 Jan 2019 18:50:58 +0000 Message-Id: <20190121185118.18550-4-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190121185118.18550-1-peter.maydell@linaro.org> References: <20190121185118.18550-1-peter.maydell@linaro.org> MIME-Version: 1.0 Expose "start-powered-off" as a property of the ARMv7M container, which we just pass through to the CPU object in the same way that we do for "init-svtor" and "idau". (We want this for the SSE-200, which powers up only the first CPU at reset and leaves the second powered down.) As with the other CPU properties here, we can't just use alias properties, because the CPU QOM object is not created until armv7m realize time. Signed-off-by: Peter Maydell --- include/hw/arm/armv7m.h | 1 + hw/arm/armv7m.c | 10 ++++++++++ 2 files changed, 11 insertions(+) -- 2.20.1 Reviewed-by: Richard Henderson diff --git a/include/hw/arm/armv7m.h b/include/hw/arm/armv7m.h index 2ba24953b63..e96a98f8093 100644 --- a/include/hw/arm/armv7m.h +++ b/include/hw/arm/armv7m.h @@ -65,6 +65,7 @@ typedef struct ARMv7MState { Object *idau; uint32_t init_svtor; bool enable_bitband; + bool start_powered_off; } ARMv7MState; #endif diff --git a/hw/arm/armv7m.c b/hw/arm/armv7m.c index 0f2c8e066cf..adae11e76ed 100644 --- a/hw/arm/armv7m.c +++ b/hw/arm/armv7m.c @@ -182,6 +182,14 @@ static void armv7m_realize(DeviceState *dev, Error **errp) return; } } + if (object_property_find(OBJECT(s->cpu), "start-powered-off", NULL)) { + object_property_set_bool(OBJECT(s->cpu), s->start_powered_off, + "start-powered-off", &err); + if (err != NULL) { + error_propagate(errp, err); + return; + } + } /* * Tell the CPU where the NVIC is; it will fail realize if it doesn't @@ -250,6 +258,8 @@ static Property armv7m_properties[] = { DEFINE_PROP_LINK("idau", ARMv7MState, idau, TYPE_IDAU_INTERFACE, Object *), DEFINE_PROP_UINT32("init-svtor", ARMv7MState, init_svtor, 0), DEFINE_PROP_BOOL("enable-bitband", ARMv7MState, enable_bitband, false), + DEFINE_PROP_BOOL("start-powered-off", ARMv7MState, start_powered_off, + false), DEFINE_PROP_END_OF_LIST(), }; From patchwork Mon Jan 21 18:50:59 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 156232 Delivered-To: patches@linaro.org Received: by 2002:a02:48:0:0:0:0:0 with SMTP id 69csp6700979jaa; Mon, 21 Jan 2019 10:51:25 -0800 (PST) X-Received: by 2002:adf:8228:: with SMTP id 37mr28617067wrb.160.1548096685503; Mon, 21 Jan 2019 10:51:25 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548096685; cv=none; d=google.com; s=arc-20160816; b=NIVOMaD3Ok72mXRWfS6RHCCWHIJUpSTQyhOMYnYaYzQHYznDDygHIcVVh3mHJ/UfD7 NTOlI6HIe0NodGIMtcwODAFLYDRx4r6aCrfQJzW7E6hRzNGWR/KfmJoMiHE0thGoU2zd gUkK0OxhA20QQwxvFSH1E+ACIdOaMcrkv0RL/+vknt7nPLMc6mR4yyB1Lss+11VJVn2T gKWp9szFWNtVnPQ/BdaCNHana71y92myhFQgA0q5XdSjYzNA37LgQopQxathVKZbVkUL OcLMfOiRsyCy3nPwVe34k6LNzTjkq55Ta3yWMklKdvVlhlu1dHCboclbjCnnG2pHwpLd TBTg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=GGm0EepQW4CpO+lX7AkPi0zjfoy2SviKPe3G9gGyJx4=; b=mqI3Glt6ed5Klz9T/VYbVthLmp288c2PAqM0Hb+7KOornji8dPzElLGXcqoPe42ifl LRrVs7CVME1UC3ghHDxknhJhcKqgmhV2C4S9Cdlp0Ucoy48f75Pub5RmphU3PbaYscCr pWSft8jo2dVwIMRUMBbLpep6DxrPVuVsQkXFUYbLukJ53mQIl00kFpe5ESIjNB1P6oaB +OqO6LGqRgCCYwEkn7wSg4hmLotpYU23E6zrTXfEjS494LNxeIFX4hzYbVnJq/GIVB0J Rnj6JqIGg42qnBW3aZgHGxrkB0NtXP/QPJb60i8fvJTyiKa4RKCaVFaWEPYkjoKSuouO kfzw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=YfHdsCji; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id m14sor5857090wmc.18.2019.01.21.10.51.25 for (Google Transport Security); Mon, 21 Jan 2019 10:51:25 -0800 (PST) Received-SPF: pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) client-ip=209.85.220.65; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=YfHdsCji; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=GGm0EepQW4CpO+lX7AkPi0zjfoy2SviKPe3G9gGyJx4=; b=YfHdsCjizcCsLAbf3gRWn3IhWz6cr7bEgsgJZ5i8TntyhRbsku0wYrGqEssQ8pQZil eddIxA2AataA0XctefU7foeLALVWbyfB8o5DndIUuS7gzlgntPF/dff5UT0zY2om+D0x C3ka0sUv0MD2ewW1oSde3ipn16pc9TrSmVlbo= 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:mime-version:content-transfer-encoding; bh=GGm0EepQW4CpO+lX7AkPi0zjfoy2SviKPe3G9gGyJx4=; b=b7b6ZSFIjPREobBGl8lJEpQu8RYPgVkKqr0Ufbt3ywObIoNUGzkBWzUF0bW1VlDAbL ZElQF2OZ/aQsbK1OiqHU18ALWBOrPY6eyWeuDx+iyBgQN9sOiGdR1lLXi0PbCqbZWWV8 RGcmQcg/LwLWw6qx/Ntg/48BQx+3Zp88Xm6gpC67pFQ6rwjo+tGglM+NkKPgeVHIMYlr f34NItNJRB5kDd9MPdBqBL6DXJXjEgiMrGqYYCXS2Jtj4wrDxyamReqBvPpFLw7prhdD 4dakEvhdhj/86nnVBXypG0DO8pd9joYN69nWqwzwNgnQaW246qUx0sWJ6lNsiWlusrQw KRSw== X-Gm-Message-State: AJcUukfKQm73yALQSVZE8GhDRY0LRNODGHo5FUvr5i/IQpskdW4tGOUy l3suj0HlOj1Goys/PybvLZmKL8xW X-Google-Smtp-Source: ALg8bN711016e7xAdPfDdfrPAOv2gG4Z+q3H00wyb/F7iG6GLn/0KOaNk3vfJBnZjjTo++LQBdq59A== X-Received: by 2002:a1c:13d1:: with SMTP id 200mr577151wmt.4.1548096684911; Mon, 21 Jan 2019 10:51:24 -0800 (PST) Return-Path: Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id n82sm50386660wma.42.2019.01.21.10.51.23 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 21 Jan 2019 10:51:24 -0800 (PST) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Cc: patches@linaro.org Subject: [PATCH 04/23] hw/arm/iotkit: Rename IoTKit to ARMSSE Date: Mon, 21 Jan 2019 18:50:59 +0000 Message-Id: <20190121185118.18550-5-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190121185118.18550-1-peter.maydell@linaro.org> References: <20190121185118.18550-1-peter.maydell@linaro.org> MIME-Version: 1.0 The Arm IoTKit was effectively the forerunner of a series of subsystems for embedded SoCs, named the SSE-050, SSE-100 and SSE-200: https://developer.arm.com/products/system-design/subsystems These are generally quite similar, though later iterations have extra devices that earlier ones do not. We want to add a model of the SSE-200, which means refactoring the IoTKit code into an abstract base class and subclasses (using the same design that the bcm283x SoC and Aspeed SoC family implementations do). As a first step, rename the IoTKit struct and QOM macros to ARMSSE, which is what we're going to name the base class. We temporarily retain TYPE_IOTKIT to avoid changing the code that instantiates a TYPE_IOTKIT device here and then changing it back again when it is re-introduced as a subclass. Signed-off-by: Peter Maydell --- include/hw/arm/iotkit.h | 22 ++++++++++----- hw/arm/iotkit.c | 59 +++++++++++++++++++++-------------------- hw/arm/mps2-tz.c | 2 +- 3 files changed, 47 insertions(+), 36 deletions(-) -- 2.20.1 Reviewed-by: Philippe Mathieu-Daudé Reviewed-by: Richard Henderson diff --git a/include/hw/arm/iotkit.h b/include/hw/arm/iotkit.h index 3a8ee639085..9701738ec75 100644 --- a/include/hw/arm/iotkit.h +++ b/include/hw/arm/iotkit.h @@ -1,5 +1,5 @@ /* - * ARM IoT Kit + * ARM SSE (Subsystems for Embedded): IoTKit * * Copyright (c) 2018 Linaro Limited * Written by Peter Maydell @@ -9,7 +9,10 @@ * (at your option) any later version. */ -/* This is a model of the Arm IoT Kit which is documented in +/* + * This is a model of the Arm "Subsystems for Embedded" family of + * hardware, which include the IoT Kit and the SSE-050, SSE-100 and + * SSE-200. Currently we model only the Arm IoT Kit which is documented in * http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ecm0601256/index.html * It contains: * a Cortex-M33 @@ -71,8 +74,15 @@ #include "hw/or-irq.h" #include "hw/core/split-irq.h" -#define TYPE_IOTKIT "iotkit" -#define IOTKIT(obj) OBJECT_CHECK(IoTKit, (obj), TYPE_IOTKIT) +#define TYPE_ARMSSE "iotkit" +#define ARMSSE(obj) OBJECT_CHECK(ARMSSE, (obj), TYPE_ARMSSE) + +/* + * For the moment TYPE_IOTKIT is a synonym for TYPE_ARMSSE (and the + * latter's underlying name is left as "iotkit"); in a later + * commit it will become a subclass of TYPE_ARMSSE. + */ +#define TYPE_IOTKIT TYPE_ARMSSE /* We have an IRQ splitter and an OR gate input for each external PPC * and the 2 internal PPCs @@ -80,7 +90,7 @@ #define NUM_EXTERNAL_PPCS (IOTS_NUM_AHB_EXP_PPC + IOTS_NUM_APB_EXP_PPC) #define NUM_PPCS (NUM_EXTERNAL_PPCS + 2) -typedef struct IoTKit { +typedef struct ARMSSE { /*< private >*/ SysBusDevice parent_obj; @@ -131,6 +141,6 @@ typedef struct IoTKit { MemoryRegion *board_memory; uint32_t exp_numirq; uint32_t mainclk_frq; -} IoTKit; +} ARMSSE; #endif diff --git a/hw/arm/iotkit.c b/hw/arm/iotkit.c index 8742200fb42..9360053184e 100644 --- a/hw/arm/iotkit.c +++ b/hw/arm/iotkit.c @@ -1,5 +1,5 @@ /* - * Arm IoT Kit + * Arm SSE (Subsystems for Embedded): IoTKit * * Copyright (c) 2018 Linaro Limited * Written by Peter Maydell @@ -24,7 +24,7 @@ /* Create an alias region of @size bytes starting at @base * which mirrors the memory starting at @orig. */ -static void make_alias(IoTKit *s, MemoryRegion *mr, const char *name, +static void make_alias(ARMSSE *s, MemoryRegion *mr, const char *name, hwaddr base, hwaddr size, hwaddr orig) { memory_region_init_alias(mr, NULL, name, &s->container, orig, size); @@ -41,18 +41,18 @@ static void irq_status_forwarder(void *opaque, int n, int level) static void nsccfg_handler(void *opaque, int n, int level) { - IoTKit *s = IOTKIT(opaque); + ARMSSE *s = ARMSSE(opaque); s->nsccfg = level; } -static void iotkit_forward_ppc(IoTKit *s, const char *ppcname, int ppcnum) +static void iotkit_forward_ppc(ARMSSE *s, const char *ppcname, int ppcnum) { /* Each of the 4 AHB and 4 APB PPCs that might be present in a - * system using the IoTKit has a collection of control lines which + * system using the ARMSSE has a collection of control lines which * are provided by the security controller and which we want to - * expose as control lines on the IoTKit device itself, so the - * code using the IoTKit can wire them up to the PPCs. + * expose as control lines on the ARMSSE device itself, so the + * code using the ARMSSE can wire them up to the PPCs. */ SplitIRQ *splitter = &s->ppc_irq_splitter[ppcnum]; DeviceState *iotkitdev = DEVICE(s); @@ -91,7 +91,7 @@ static void iotkit_forward_ppc(IoTKit *s, const char *ppcname, int ppcnum) g_free(name); } -static void iotkit_forward_sec_resp_cfg(IoTKit *s) +static void iotkit_forward_sec_resp_cfg(ARMSSE *s) { /* Forward the 3rd output from the splitter device as a * named GPIO output of the iotkit object. @@ -107,7 +107,7 @@ static void iotkit_forward_sec_resp_cfg(IoTKit *s) static void iotkit_init(Object *obj) { - IoTKit *s = IOTKIT(obj); + ARMSSE *s = ARMSSE(obj); int i; memory_region_init(&s->container, obj, "iotkit-container", UINT64_MAX); @@ -175,20 +175,20 @@ static void iotkit_init(Object *obj) static void iotkit_exp_irq(void *opaque, int n, int level) { - IoTKit *s = IOTKIT(opaque); + ARMSSE *s = ARMSSE(opaque); qemu_set_irq(s->exp_irqs[n], level); } static void iotkit_mpcexp_status(void *opaque, int n, int level) { - IoTKit *s = IOTKIT(opaque); + ARMSSE *s = ARMSSE(opaque); qemu_set_irq(s->mpcexp_status_in[n], level); } static void iotkit_realize(DeviceState *dev, Error **errp) { - IoTKit *s = IOTKIT(dev); + ARMSSE *s = ARMSSE(dev); int i; MemoryRegion *mr; Error *err = NULL; @@ -215,9 +215,9 @@ static void iotkit_realize(DeviceState *dev, Error **errp) * devices exist in both address spaces but with hard-wired security * permissions that will cause the CPU to fault for non-secure accesses. * - * The IoTKit has an IDAU (Implementation Defined Access Unit), + * The ARMSSE has an IDAU (Implementation Defined Access Unit), * which specifies hard-wired security permissions for different - * areas of the physical address space. For the IoTKit IDAU, the + * areas of the physical address space. For the ARMSSE IDAU, the * top 4 bits of the physical address are the IDAU region ID, and * if bit 28 (ie the lowest bit of the ID) is 0 then this is an NS * region, otherwise it is an S region. @@ -239,7 +239,7 @@ static void iotkit_realize(DeviceState *dev, Error **errp) * 0x20000000..0x2007ffff 32KB FPGA block RAM * 0x30000000..0x3fffffff alias of 0x20000000..0x2fffffff * 0x40000000..0x4000ffff base peripheral region 1 - * 0x40010000..0x4001ffff CPU peripherals (none for IoTKit) + * 0x40010000..0x4001ffff CPU peripherals (none for ARMSSE) * 0x40020000..0x4002ffff system control element peripherals * 0x40080000..0x400fffff base peripheral region 2 * 0x50000000..0x5fffffff alias of 0x40000000..0x4fffffff @@ -306,8 +306,8 @@ static void iotkit_realize(DeviceState *dev, Error **errp) qdev_connect_gpio_out_named(dev_secctl, "nsc_cfg", 0, s->nsc_cfg_in); /* The sec_resp_cfg output from the security controller must be split into - * multiple lines, one for each of the PPCs within the IoTKit and one - * that will be an output from the IoTKit to the system. + * multiple lines, one for each of the PPCs within the ARMSSE and one + * that will be an output from the ARMSSE to the system. */ object_property_set_int(OBJECT(&s->sec_resp_splitter), 3, "num-lines", &err); @@ -475,7 +475,7 @@ static void iotkit_realize(DeviceState *dev, Error **errp) /* 0x40010000 .. 0x4001ffff: private CPU region: unused in IoTKit */ - /* 0x40020000 .. 0x4002ffff : IoTKit system control peripheral region */ + /* 0x40020000 .. 0x4002ffff : ARMSSE system control peripheral region */ /* Devices behind APB PPC1: * 0x4002f000: S32K timer */ @@ -558,7 +558,7 @@ static void iotkit_realize(DeviceState *dev, Error **errp) qdev_get_gpio_in(DEVICE(&s->nmi_orgate), 0)); sysbus_mmio_map(SYS_BUS_DEVICE(&s->s32kwatchdog), 0, 0x5002e000); - /* 0x40080000 .. 0x4008ffff : IoTKit second Base peripheral region */ + /* 0x40080000 .. 0x4008ffff : ARMSSE second Base peripheral region */ qdev_prop_set_uint32(DEVICE(&s->nswatchdog), "wdogclk-frq", s->mainclk_frq); object_property_set_bool(OBJECT(&s->nswatchdog), true, "realized", &err); @@ -678,7 +678,7 @@ static void iotkit_realize(DeviceState *dev, Error **errp) * Expose our container region to the board model; this corresponds * to the AHB Slave Expansion ports which allow bus master devices * (eg DMA controllers) in the board model to make transactions into - * devices in the IoTKit. + * devices in the ARMSSE. */ sysbus_init_mmio(SYS_BUS_DEVICE(s), &s->container); @@ -688,11 +688,12 @@ static void iotkit_realize(DeviceState *dev, Error **errp) static void iotkit_idau_check(IDAUInterface *ii, uint32_t address, int *iregion, bool *exempt, bool *ns, bool *nsc) { - /* For IoTKit systems the IDAU responses are simple logical functions + /* + * For ARMSSE systems the IDAU responses are simple logical functions * of the address bits. The NSC attribute is guest-adjustable via the * NSCCFG register in the security controller. */ - IoTKit *s = IOTKIT(ii); + ARMSSE *s = ARMSSE(ii); int region = extract32(address, 28, 4); *ns = !(region & 1); @@ -707,22 +708,22 @@ static const VMStateDescription iotkit_vmstate = { .version_id = 1, .minimum_version_id = 1, .fields = (VMStateField[]) { - VMSTATE_UINT32(nsccfg, IoTKit), + VMSTATE_UINT32(nsccfg, ARMSSE), VMSTATE_END_OF_LIST() } }; static Property iotkit_properties[] = { - DEFINE_PROP_LINK("memory", IoTKit, board_memory, TYPE_MEMORY_REGION, + DEFINE_PROP_LINK("memory", ARMSSE, board_memory, TYPE_MEMORY_REGION, MemoryRegion *), - DEFINE_PROP_UINT32("EXP_NUMIRQ", IoTKit, exp_numirq, 64), - DEFINE_PROP_UINT32("MAINCLK", IoTKit, mainclk_frq, 0), + DEFINE_PROP_UINT32("EXP_NUMIRQ", ARMSSE, exp_numirq, 64), + DEFINE_PROP_UINT32("MAINCLK", ARMSSE, mainclk_frq, 0), DEFINE_PROP_END_OF_LIST() }; static void iotkit_reset(DeviceState *dev) { - IoTKit *s = IOTKIT(dev); + ARMSSE *s = ARMSSE(dev); s->nsccfg = 0; } @@ -740,9 +741,9 @@ static void iotkit_class_init(ObjectClass *klass, void *data) } static const TypeInfo iotkit_info = { - .name = TYPE_IOTKIT, + .name = TYPE_ARMSSE, .parent = TYPE_SYS_BUS_DEVICE, - .instance_size = sizeof(IoTKit), + .instance_size = sizeof(ARMSSE), .instance_init = iotkit_init, .class_init = iotkit_class_init, .interfaces = (InterfaceInfo[]) { diff --git a/hw/arm/mps2-tz.c b/hw/arm/mps2-tz.c index 82b1d020a58..5824335b4fb 100644 --- a/hw/arm/mps2-tz.c +++ b/hw/arm/mps2-tz.c @@ -66,7 +66,7 @@ typedef struct { typedef struct { MachineState parent; - IoTKit iotkit; + ARMSSE iotkit; MemoryRegion psram; MemoryRegion ssram[3]; MemoryRegion ssram1_m; From patchwork Mon Jan 21 18:51:00 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 156233 Delivered-To: patches@linaro.org Received: by 2002:a02:48:0:0:0:0:0 with SMTP id 69csp6700995jaa; Mon, 21 Jan 2019 10:51:26 -0800 (PST) X-Received: by 2002:adf:f009:: with SMTP id j9mr28837750wro.170.1548096686641; Mon, 21 Jan 2019 10:51:26 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548096686; cv=none; d=google.com; s=arc-20160816; b=r/s0o0xWtbcsNgDwySdlrOSDiow4/Sh1gff6J11aSNYgrbC/hkiqaW6QY5YU0Bevo/ h/bk5mEhyfsZ9YbZFb7SabAxcG4R/2aSX5nJGb3DtzVkHYGsn93ButrIDvkRYGea0b+W YOmiVt21+UXptHWI5d/6VOqgCkrGml+suqQszg91kSTMLnSD0ySNBCNGhOTjGXTGDb68 7PqNu7ANOH/HYsGz6cCHBI7eUQ4brsMNFzHKBApYJrNWfoGPyqU23Mwcus4WG2TJAB7q GhqLzrHFnwCaX+AfMsgbzI3PVj+25v4sRHEHQ4d8yjIXWv1bKEo+WmNaPa4tRSTjHvjI bSWw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=8/8nrDNxFDGGiKzCXqhPzki/Hbmqf6CuZf0plZpfE7M=; b=rhvZvAAFs/ebglkWPjo6Q+9ivRWv1zUs6nbP2P0ifP8M7WJR136ERkUanZhWaMXqA4 R5AyIDvi0OhnlfAawnkrF4pdzJB/RF8ZlY0KJtCYSHP3gm+dOwdSTX2FkbHP/zQYCb6t QZKM/2UP6L3mT+jqYfEcTWJBSPaqJEy3xtFngrU/MIzddhIrAs2TJz2c1M9TQ3bJ//qk UDL7GzwvY4euRBuKLAmri+I2eEBBEzGTCTlsGBcX4MBkflh+dy9iscHWoMLslzQoluaT AIWnxv56saA7cBz59waphy8a+Npnhpgrg+apAAbPqmNeeftqVnp7PncP3Ibf81dHGosZ tJWg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=XvIAnboj; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id w22sor32573197wmi.5.2019.01.21.10.51.26 for (Google Transport Security); Mon, 21 Jan 2019 10:51:26 -0800 (PST) Received-SPF: pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) client-ip=209.85.220.65; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=XvIAnboj; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=8/8nrDNxFDGGiKzCXqhPzki/Hbmqf6CuZf0plZpfE7M=; b=XvIAnboji2u7aobGX3RE5JSxCNVqGBP1JBOfYm4yjDB2ljtp5oDzEEj5FM9j/R0MAj K101rhiL0ot6tc63jnBc58PF8Ms+fwyTWhJ5eglyo36AGQ7GOliWyjIrz3pupx9xq+xA 4MPfHSveN1ZfpshNq1bLtyTo33sIhOMtEOTkk= 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:mime-version:content-transfer-encoding; bh=8/8nrDNxFDGGiKzCXqhPzki/Hbmqf6CuZf0plZpfE7M=; b=aeaHxi1pESIGn1EuG7V7LrekjTaAk/JPeupTmunj9x1d5w9IIwSy/vDFU4B1aDkX0T F+omNeXyWzLzT4JcRUw7hmzE2JEPbAL2UCJ0F1xrbdpYJ418s8O+p0JKlLSw7QbBTbIz 9os1ykXrrOlHimSkO6CGaV/oqz30PGoghsWddTKoEv6S9Ivh2bTp+ib+s22weGKPi2a5 YPNlNHMRNp2sYDDZ6wvDJ7PNda3UIbK+FT+s9HIGl/zooiucHbkDoMkDEAsk2jtu5LBt 8dFg5dnhvhwP/aObCjyp+41G67yL2gwK9L0uMddjkD8enyJjHr52NxFu/4lFccyt7poA lidA== X-Gm-Message-State: AJcUukcaKOTcQmajPzzk0c9SI+yssbZZlsrGwScnmzmTXDrOTZ1uweO3 hG4C/dw5lIdP6hXASys/Ag53Tegr X-Google-Smtp-Source: ALg8bN5kpxoBDnrxq6W4QBbtu6bdfs7MHw+7Aw0d+QGJcxhu6iQAxf6VApidNoWtLVVn1tIdREl5ww== X-Received: by 2002:a1c:e913:: with SMTP id q19mr550689wmc.55.1548096686163; Mon, 21 Jan 2019 10:51:26 -0800 (PST) Return-Path: Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id n82sm50386660wma.42.2019.01.21.10.51.24 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 21 Jan 2019 10:51:25 -0800 (PST) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Cc: patches@linaro.org Subject: [PATCH 05/23] hw/arm/iotkit: Refactor into abstract base class and subclass Date: Mon, 21 Jan 2019 18:51:00 +0000 Message-Id: <20190121185118.18550-6-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190121185118.18550-1-peter.maydell@linaro.org> References: <20190121185118.18550-1-peter.maydell@linaro.org> MIME-Version: 1.0 The Arm SSE-200 Subsystem for Embedded is a revised and extended version of the older IoTKit SoC. Prepare for adding a model of it by refactoring the IoTKit code into an abstract base class which contains the functionality, driven by a class data block specific to each subclass. (This is the same approach used by the existing bcm283x SoC family implementation.) Signed-off-by: Peter Maydell --- include/hw/arm/iotkit.h | 22 +++++++++++++++++----- hw/arm/iotkit.c | 34 +++++++++++++++++++++++++++++----- 2 files changed, 46 insertions(+), 10 deletions(-) -- 2.20.1 Reviewed-by: Philippe Mathieu-Daudé Reviewed-by: Richard Henderson diff --git a/include/hw/arm/iotkit.h b/include/hw/arm/iotkit.h index 9701738ec75..521d1f73757 100644 --- a/include/hw/arm/iotkit.h +++ b/include/hw/arm/iotkit.h @@ -74,15 +74,15 @@ #include "hw/or-irq.h" #include "hw/core/split-irq.h" -#define TYPE_ARMSSE "iotkit" +#define TYPE_ARMSSE "arm-sse" #define ARMSSE(obj) OBJECT_CHECK(ARMSSE, (obj), TYPE_ARMSSE) /* - * For the moment TYPE_IOTKIT is a synonym for TYPE_ARMSSE (and the - * latter's underlying name is left as "iotkit"); in a later - * commit it will become a subclass of TYPE_ARMSSE. + * These type names are for specific IoTKit subsystems; other than + * instantiating them, code using these devices should always handle + * them via the ARMSSE base class, so they have no IOTKIT() etc macros. */ -#define TYPE_IOTKIT TYPE_ARMSSE +#define TYPE_IOTKIT "iotkit" /* We have an IRQ splitter and an OR gate input for each external PPC * and the 2 internal PPCs @@ -143,4 +143,16 @@ typedef struct ARMSSE { uint32_t mainclk_frq; } ARMSSE; +typedef struct ARMSSEInfo ARMSSEInfo; + +typedef struct ARMSSEClass { + DeviceClass parent_class; + const ARMSSEInfo *info; +} ARMSSEClass; + +#define ARMSSE_CLASS(klass) \ + OBJECT_CLASS_CHECK(ARMSSEClass, (klass), TYPE_ARMSSE) +#define ARMSSE_GET_CLASS(obj) \ + OBJECT_GET_CLASS(ARMSSEClass, (obj), TYPE_ARMSSE) + #endif diff --git a/hw/arm/iotkit.c b/hw/arm/iotkit.c index 9360053184e..d5b172933c3 100644 --- a/hw/arm/iotkit.c +++ b/hw/arm/iotkit.c @@ -18,6 +18,16 @@ #include "hw/arm/iotkit.h" #include "hw/arm/arm.h" +struct ARMSSEInfo { + const char *name; +}; + +static const ARMSSEInfo armsse_variants[] = { + { + .name = TYPE_IOTKIT, + }, +}; + /* Clock frequency in HZ of the 32KHz "slow clock" */ #define S32KCLK (32 * 1000) @@ -732,29 +742,43 @@ static void iotkit_class_init(ObjectClass *klass, void *data) { DeviceClass *dc = DEVICE_CLASS(klass); IDAUInterfaceClass *iic = IDAU_INTERFACE_CLASS(klass); + ARMSSEClass *asc = ARMSSE_CLASS(klass); dc->realize = iotkit_realize; dc->vmsd = &iotkit_vmstate; dc->props = iotkit_properties; dc->reset = iotkit_reset; iic->check = iotkit_idau_check; + asc->info = data; } -static const TypeInfo iotkit_info = { +static const TypeInfo armsse_info = { .name = TYPE_ARMSSE, .parent = TYPE_SYS_BUS_DEVICE, .instance_size = sizeof(ARMSSE), .instance_init = iotkit_init, - .class_init = iotkit_class_init, + .abstract = true, .interfaces = (InterfaceInfo[]) { { TYPE_IDAU_INTERFACE }, { } } }; -static void iotkit_register_types(void) +static void armsse_register_types(void) { - type_register_static(&iotkit_info); + int i; + + type_register_static(&armsse_info); + + for (i = 0; i < ARRAY_SIZE(armsse_variants); i++) { + TypeInfo ti = { + .name = armsse_variants[i].name, + .parent = TYPE_ARMSSE, + .class_init = iotkit_class_init, + .class_data = (void *)&armsse_variants[i], + }; + type_register(&ti); + } } -type_init(iotkit_register_types); +type_init(armsse_register_types); From patchwork Mon Jan 21 18:51:01 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 156234 Delivered-To: patches@linaro.org Received: by 2002:a02:48:0:0:0:0:0 with SMTP id 69csp6701016jaa; Mon, 21 Jan 2019 10:51:27 -0800 (PST) X-Received: by 2002:adf:e54a:: with SMTP id z10mr28461898wrm.238.1548096687877; Mon, 21 Jan 2019 10:51:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548096687; cv=none; d=google.com; s=arc-20160816; b=CH+jV3YVMsYe7tUijyUTV5ZZ3kAJM/AWZEXzXPxNk3sXTRVpTGg3NSsHLfkwyLrz2e R+5VbVmkR0D8xD6xQNl5VWAJLU+mP9DtDVMOZKuaUPnwdV/XouRnm8hzXXRBl1DsSKYj WK/ITgDdHQoWIZqBPV0MGkt/M+iZroj3q/P9UZF9asmew1IJJYakt7T4lbKWefdxQ7Uf oLQ+7NaUMGScXiOToLglg5felL5tiH2mnhnl2vSattA38sC+FzlhsJnAH295MpLkry/R S+qOW+Q0HDc8Vjz7UVWQV7JfgjdhjHJYuzBcChW3DoHKhy0r173KKhRyLNbZSbbEx8Va Te/A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=GwOkcaqB4nWlxWAy1SiSdUxzJLjM4/IN2mfdSNwClek=; b=YSkFeGYm0y7z2rj4pfu29oStIBMXDXSL1th8ExuX+q893+d/hYXm1xXakqFSbuYxAb fCbAO2MXasU8CjXw8pDBtpLRE5XGX+zngbcU3aOp6KUZF5vMTHQk9VuR0/58bYp4EOIe fsJPIZkI3Wo8x5+2pZDFk2jVjJLp4QWvcZS2j/tgbKLLYQ8xFohPZ0b7eRKtDOg4J+2f PIh8PNhrR0+6O6se5+1Ak+45Zkb2g6DSNlGAYq/jXTTLWPp2098lbdXDyn27RY/TSMn0 7A1EKO5JpxgsQVeTZnQfW01TLXhIzoua25I9ldAteJCqXNnVohaCFMUjfJ9YoBMUbDdD rn/Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=NYRKVfhK; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id w9sor64675840wrm.8.2019.01.21.10.51.27 for (Google Transport Security); Mon, 21 Jan 2019 10:51:27 -0800 (PST) Received-SPF: pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) client-ip=209.85.220.65; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=NYRKVfhK; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=GwOkcaqB4nWlxWAy1SiSdUxzJLjM4/IN2mfdSNwClek=; b=NYRKVfhK0bl0+Rx6WK64jDuRfNTgKFq3Ifv/AFF9m3+CxYnmDg795Y6zahCpFxUgWI LZOq98MmawMUasCmvAvsmwwFeNsQ6kk6+8FqxGEx2mvvWFMgQzc+o5VJ51OGIkRc5lwn r6TY9shzKF/7d0q1VTHofuS24pMdG+iguf06w= 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:mime-version:content-transfer-encoding; bh=GwOkcaqB4nWlxWAy1SiSdUxzJLjM4/IN2mfdSNwClek=; b=miSjr/4QfIIcSnjpiNISPy6hHPRdgy0KG+EV+m3wD0N1g5Xe7qt26n9v4HbUIXy05T 5lRaBUH0RPUiq6c5Wz8HY4at0L9SqqRg2hxq0RN9NHf8HVlW5dVCLXxh0z2i6b5g1aiA sKB7ia+dfmLaYhZW6OPPLARX8Qb6yWQTl33r1Th0WjbBUOM78kp+hSzEXBHyRC6VOg3U m4RrzS65VlBFNcoyf3eddKel7ccfpjh45Fy4V+ll0WGjZJn+uwrdbJwcnXtwHZjGMmwf eD6P+7dOcf74WIEecMzI7fplBcYOrTwlpiXee8hbxp0JZUx/33wWhRby9Rn5uEjn24lc pXFw== X-Gm-Message-State: AJcUukdMGSgInQdDIV8HSANGKHf75sZ4E5nWC27ibQ+OE2noVkV5Xhq0 hlRKgYB52SFOLuHkwRVECQenGRfD X-Google-Smtp-Source: ALg8bN6KOkKgflz9bGoxw4lJICGdOvQgAD9N9ZHfjAwub29cI487LsDpHB/T5orf8eK8JkQSUOBCkQ== X-Received: by 2002:adf:f848:: with SMTP id d8mr31169495wrq.178.1548096687479; Mon, 21 Jan 2019 10:51:27 -0800 (PST) Return-Path: Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id n82sm50386660wma.42.2019.01.21.10.51.26 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 21 Jan 2019 10:51:26 -0800 (PST) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Cc: patches@linaro.org Subject: [PATCH 06/23] hw/arm/iotkit: Rename 'iotkit' local variables and functions Date: Mon, 21 Jan 2019 18:51:01 +0000 Message-Id: <20190121185118.18550-7-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190121185118.18550-1-peter.maydell@linaro.org> References: <20190121185118.18550-1-peter.maydell@linaro.org> MIME-Version: 1.0 Rename various internal uses of 'iotkit' in hw/arm/iotkit.c to 'armsse', for consistency. The remaining occurences are: * related to the devices TYPE_IOTKIT_SYSCTL, TYPE_IOTKIT_SYSINFO, etc, which this refactor is not touching * references that apply specifically to the IoTKit (like the lack of a private CPU region) * the vmstate, which keeps its old "iotkit" name for migration compatibility reasons Signed-off-by: Peter Maydell --- hw/arm/iotkit.c | 68 ++++++++++++++++++++++++------------------------- 1 file changed, 34 insertions(+), 34 deletions(-) -- 2.20.1 Reviewed-by: Philippe Mathieu-Daudé Reviewed-by: Richard Henderson diff --git a/hw/arm/iotkit.c b/hw/arm/iotkit.c index d5b172933c3..7ff14fd5aef 100644 --- a/hw/arm/iotkit.c +++ b/hw/arm/iotkit.c @@ -56,7 +56,7 @@ static void nsccfg_handler(void *opaque, int n, int level) s->nsccfg = level; } -static void iotkit_forward_ppc(ARMSSE *s, const char *ppcname, int ppcnum) +static void armsse_forward_ppc(ARMSSE *s, const char *ppcname, int ppcnum) { /* Each of the 4 AHB and 4 APB PPCs that might be present in a * system using the ARMSSE has a collection of control lines which @@ -65,22 +65,22 @@ static void iotkit_forward_ppc(ARMSSE *s, const char *ppcname, int ppcnum) * code using the ARMSSE can wire them up to the PPCs. */ SplitIRQ *splitter = &s->ppc_irq_splitter[ppcnum]; - DeviceState *iotkitdev = DEVICE(s); + DeviceState *armssedev = DEVICE(s); DeviceState *dev_secctl = DEVICE(&s->secctl); DeviceState *dev_splitter = DEVICE(splitter); char *name; name = g_strdup_printf("%s_nonsec", ppcname); - qdev_pass_gpios(dev_secctl, iotkitdev, name); + qdev_pass_gpios(dev_secctl, armssedev, name); g_free(name); name = g_strdup_printf("%s_ap", ppcname); - qdev_pass_gpios(dev_secctl, iotkitdev, name); + qdev_pass_gpios(dev_secctl, armssedev, name); g_free(name); name = g_strdup_printf("%s_irq_enable", ppcname); - qdev_pass_gpios(dev_secctl, iotkitdev, name); + qdev_pass_gpios(dev_secctl, armssedev, name); g_free(name); name = g_strdup_printf("%s_irq_clear", ppcname); - qdev_pass_gpios(dev_secctl, iotkitdev, name); + qdev_pass_gpios(dev_secctl, armssedev, name); g_free(name); /* irq_status is a little more tricky, because we need to @@ -96,15 +96,15 @@ static void iotkit_forward_ppc(ARMSSE *s, const char *ppcname, int ppcnum) qdev_connect_gpio_out(dev_splitter, 1, qdev_get_gpio_in(DEVICE(&s->ppc_irq_orgate), ppcnum)); s->irq_status_in[ppcnum] = qdev_get_gpio_in(dev_splitter, 0); - qdev_init_gpio_in_named_with_opaque(iotkitdev, irq_status_forwarder, + qdev_init_gpio_in_named_with_opaque(armssedev, irq_status_forwarder, s->irq_status_in[ppcnum], name, 1); g_free(name); } -static void iotkit_forward_sec_resp_cfg(ARMSSE *s) +static void armsse_forward_sec_resp_cfg(ARMSSE *s) { /* Forward the 3rd output from the splitter device as a - * named GPIO output of the iotkit object. + * named GPIO output of the armsse object. */ DeviceState *dev = DEVICE(s); DeviceState *dev_splitter = DEVICE(&s->sec_resp_splitter); @@ -115,12 +115,12 @@ static void iotkit_forward_sec_resp_cfg(ARMSSE *s) qdev_connect_gpio_out(dev_splitter, 2, s->sec_resp_cfg_in); } -static void iotkit_init(Object *obj) +static void armsse_init(Object *obj) { ARMSSE *s = ARMSSE(obj); int i; - memory_region_init(&s->container, obj, "iotkit-container", UINT64_MAX); + memory_region_init(&s->container, obj, "armsse-container", UINT64_MAX); sysbus_init_child_obj(obj, "armv7m", &s->armv7m, sizeof(s->armv7m), TYPE_ARMV7M); @@ -160,9 +160,9 @@ static void iotkit_init(Object *obj) sizeof(s->nswatchdog), TYPE_CMSDK_APB_WATCHDOG); sysbus_init_child_obj(obj, "swatchdog", &s->swatchdog, sizeof(s->swatchdog), TYPE_CMSDK_APB_WATCHDOG); - sysbus_init_child_obj(obj, "iotkit-sysctl", &s->sysctl, + sysbus_init_child_obj(obj, "armsse-sysctl", &s->sysctl, sizeof(s->sysctl), TYPE_IOTKIT_SYSCTL); - sysbus_init_child_obj(obj, "iotkit-sysinfo", &s->sysinfo, + sysbus_init_child_obj(obj, "armsse-sysinfo", &s->sysinfo, sizeof(s->sysinfo), TYPE_IOTKIT_SYSINFO); object_initialize_child(obj, "nmi-orgate", &s->nmi_orgate, sizeof(s->nmi_orgate), TYPE_OR_IRQ, @@ -183,20 +183,20 @@ static void iotkit_init(Object *obj) } } -static void iotkit_exp_irq(void *opaque, int n, int level) +static void armsse_exp_irq(void *opaque, int n, int level) { ARMSSE *s = ARMSSE(opaque); qemu_set_irq(s->exp_irqs[n], level); } -static void iotkit_mpcexp_status(void *opaque, int n, int level) +static void armsse_mpcexp_status(void *opaque, int n, int level) { ARMSSE *s = ARMSSE(opaque); qemu_set_irq(s->mpcexp_status_in[n], level); } -static void iotkit_realize(DeviceState *dev, Error **errp) +static void armsse_realize(DeviceState *dev, Error **errp) { ARMSSE *s = ARMSSE(dev); int i; @@ -287,7 +287,7 @@ static void iotkit_realize(DeviceState *dev, Error **errp) for (i = 0; i < s->exp_numirq; i++) { s->exp_irqs[i] = qdev_get_gpio_in(DEVICE(&s->armv7m), i + 32); } - qdev_init_gpio_in_named(dev, iotkit_exp_irq, "EXP_IRQ", s->exp_numirq); + qdev_init_gpio_in_named(dev, armsse_exp_irq, "EXP_IRQ", s->exp_numirq); /* Set up the big aliases first */ make_alias(s, &s->alias1, "alias 1", 0x10000000, 0x10000000, 0x00000000); @@ -336,7 +336,7 @@ static void iotkit_realize(DeviceState *dev, Error **errp) qdev_get_gpio_in(dev_splitter, 0)); /* This RAM lives behind the Memory Protection Controller */ - memory_region_init_ram(&s->sram0, NULL, "iotkit.sram0", 0x00008000, &err); + memory_region_init_ram(&s->sram0, NULL, "armsse.sram0", 0x00008000, &err); if (err) { error_propagate(errp, err); return; @@ -608,14 +608,14 @@ static void iotkit_realize(DeviceState *dev, Error **errp) for (i = 0; i < IOTS_NUM_AHB_EXP_PPC; i++) { char *ppcname = g_strdup_printf("ahb_ppcexp%d", i); - iotkit_forward_ppc(s, ppcname, i); + armsse_forward_ppc(s, ppcname, i); g_free(ppcname); } for (i = 0; i < IOTS_NUM_APB_EXP_PPC; i++) { char *ppcname = g_strdup_printf("apb_ppcexp%d", i); - iotkit_forward_ppc(s, ppcname, i + IOTS_NUM_AHB_EXP_PPC); + armsse_forward_ppc(s, ppcname, i + IOTS_NUM_AHB_EXP_PPC); g_free(ppcname); } @@ -672,10 +672,10 @@ static void iotkit_realize(DeviceState *dev, Error **errp) /* Create GPIO inputs which will pass the line state for our * mpcexp_irq inputs to the correct splitter devices. */ - qdev_init_gpio_in_named(dev, iotkit_mpcexp_status, "mpcexp_status", + qdev_init_gpio_in_named(dev, armsse_mpcexp_status, "mpcexp_status", IOTS_NUM_EXP_MPC); - iotkit_forward_sec_resp_cfg(s); + armsse_forward_sec_resp_cfg(s); /* Forward the MSC related signals */ qdev_pass_gpios(dev_secctl, dev, "mscexp_status"); @@ -695,7 +695,7 @@ static void iotkit_realize(DeviceState *dev, Error **errp) system_clock_scale = NANOSECONDS_PER_SECOND / s->mainclk_frq; } -static void iotkit_idau_check(IDAUInterface *ii, uint32_t address, +static void armsse_idau_check(IDAUInterface *ii, uint32_t address, int *iregion, bool *exempt, bool *ns, bool *nsc) { /* @@ -713,7 +713,7 @@ static void iotkit_idau_check(IDAUInterface *ii, uint32_t address, *iregion = region; } -static const VMStateDescription iotkit_vmstate = { +static const VMStateDescription armsse_vmstate = { .name = "iotkit", .version_id = 1, .minimum_version_id = 1, @@ -723,7 +723,7 @@ static const VMStateDescription iotkit_vmstate = { } }; -static Property iotkit_properties[] = { +static Property armsse_properties[] = { DEFINE_PROP_LINK("memory", ARMSSE, board_memory, TYPE_MEMORY_REGION, MemoryRegion *), DEFINE_PROP_UINT32("EXP_NUMIRQ", ARMSSE, exp_numirq, 64), @@ -731,24 +731,24 @@ static Property iotkit_properties[] = { DEFINE_PROP_END_OF_LIST() }; -static void iotkit_reset(DeviceState *dev) +static void armsse_reset(DeviceState *dev) { ARMSSE *s = ARMSSE(dev); s->nsccfg = 0; } -static void iotkit_class_init(ObjectClass *klass, void *data) +static void armsse_class_init(ObjectClass *klass, void *data) { DeviceClass *dc = DEVICE_CLASS(klass); IDAUInterfaceClass *iic = IDAU_INTERFACE_CLASS(klass); ARMSSEClass *asc = ARMSSE_CLASS(klass); - dc->realize = iotkit_realize; - dc->vmsd = &iotkit_vmstate; - dc->props = iotkit_properties; - dc->reset = iotkit_reset; - iic->check = iotkit_idau_check; + dc->realize = armsse_realize; + dc->vmsd = &armsse_vmstate; + dc->props = armsse_properties; + dc->reset = armsse_reset; + iic->check = armsse_idau_check; asc->info = data; } @@ -756,7 +756,7 @@ static const TypeInfo armsse_info = { .name = TYPE_ARMSSE, .parent = TYPE_SYS_BUS_DEVICE, .instance_size = sizeof(ARMSSE), - .instance_init = iotkit_init, + .instance_init = armsse_init, .abstract = true, .interfaces = (InterfaceInfo[]) { { TYPE_IDAU_INTERFACE }, @@ -774,7 +774,7 @@ static void armsse_register_types(void) TypeInfo ti = { .name = armsse_variants[i].name, .parent = TYPE_ARMSSE, - .class_init = iotkit_class_init, + .class_init = armsse_class_init, .class_data = (void *)&armsse_variants[i], }; type_register(&ti); From patchwork Mon Jan 21 18:51:02 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 156235 Delivered-To: patches@linaro.org Received: by 2002:a02:48:0:0:0:0:0 with SMTP id 69csp6701027jaa; Mon, 21 Jan 2019 10:51:29 -0800 (PST) X-Received: by 2002:a5d:42ce:: with SMTP id t14mr29776136wrr.51.1548096688977; Mon, 21 Jan 2019 10:51:28 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548096688; cv=none; d=google.com; s=arc-20160816; b=0dU8R8J3eVjEDwILnzWomotLt0986fadxAFiBioxv3X3AbYAEAn9kZjLmgZPGxT5hh yd0h+vo+QwW9o8WJ94l5cYkSYEMnfQwKXsNjw1/HxYp3sv+nE9nhobGmiZeAXAq63Gnw 8uIw/VjLKCYwN/5HjT38tBNYIAxVXpTMwX+TydVn9HtAD+XdVs7gvFeQKwpH8bo9QuWb mHroUmVtR/L/d2KdYmwV0Yw9hohhtqRUUa157qKRAjcinTf/YLygEy2OFjQ4mYZOHUzQ lFPlrsYLZaf9/dIIxi6PMMa0ou3Wo77X6ajDYOPu/m9pDQ/INZqQQtbE3EyHuo/fusAI kgGg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=PvO18lRzUs66YBhl5hb4KNvCqQL2PZhRg/eBt9ybWrc=; b=dVEHJOrwxNsB5rIGuolrBLy0oUT2OH28ffqSNCzN/2yrmbWOxWUzln/+AsqDupNjCz W/WS03op3MJOyvZ3TukFygjl8iElPi/noZNTxdxeJQBqSBcqdiQ/XXl/9rdcJkfsHAFM rQvZ3sU1WZTT3y+u4QPDmjWJf1FYfxD7C7xJgHONkWMrlc1KLl9jYrs6FBKQq/hRA4rt V5FezKYy44tDkFTHQQyHX3Usi3EEDKFpUPJ4IgWQyouX9YCNYzp7+md2yK2Q+57UORRL 0HeCSjFmrg9TfqnpFwzjWwfAfWB27IJQ19cIRgNHmetNhXFMaHDplpq6rRPj1/8hxWmk FFKA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=FS1zvB3L; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id v16sor32553457wmc.26.2019.01.21.10.51.28 for (Google Transport Security); Mon, 21 Jan 2019 10:51:28 -0800 (PST) Received-SPF: pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) client-ip=209.85.220.65; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=FS1zvB3L; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=PvO18lRzUs66YBhl5hb4KNvCqQL2PZhRg/eBt9ybWrc=; b=FS1zvB3Lf0kfZmeTKPrbGpQmprlmH8Jl/MPGrCkn8roIJSKQxYbQel2UPSAe3sPRTS uh/zsR4oscSRe4gbLPj55vOegvdLBZWsreGSAOZo00qqXfuFlhXk6I5THugxf9U09TJH XVxz2w7BJJWn6X6tB5DorxfMa5LBcLhhBr5Xk= 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:mime-version:content-transfer-encoding; bh=PvO18lRzUs66YBhl5hb4KNvCqQL2PZhRg/eBt9ybWrc=; b=W508kKP4/ps407rogu/Dz64Kg2cT6aii++78Sg4qkPpjKix+CxaC61ZtTmflRpy8nK sWJQI9h3Tlp2RqB4wU/04W+FRLNm8lhDJ0DE49pD/CquzIMKP/vQw5op++gYgc0559A2 5sdXoUvEWA0d6d/3c+CDOhxmuT4s+AaLZp+0jw/PWkThmcxboemBSHmYPZbrUs7JrU4i Q8uNbLRewZVokaDUSkbbNbcIxZdacv1StShuqhCpIE46w7C7omrNXfaUxBwII0igEKQX saWu44Cw87cjfnXRQcsMc7GLSIDDmyNS7R7AO461BiYLFImOXhf608lSwe1NN/znUcaS 2SBA== X-Gm-Message-State: AJcUukfQXGXc8Yksf4OiDWcmbNBA+ZNtaj0H1+Q/VXHzcwLnHvXjudbf x91PhC0A+BP+pdSGdNL7UDdy0ZTYn6V8/7M5 X-Google-Smtp-Source: ALg8bN7nU2A2VdZLmMINokPEgSsc0zyVHAZA9HgyMREznblGnaibnbO28l/wA5rfzcFYnEM4PUwTHw== X-Received: by 2002:a1c:6489:: with SMTP id y131mr572455wmb.34.1548096688538; Mon, 21 Jan 2019 10:51:28 -0800 (PST) Return-Path: Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id n82sm50386660wma.42.2019.01.21.10.51.27 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 21 Jan 2019 10:51:27 -0800 (PST) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Cc: patches@linaro.org Subject: [PATCH 07/23] hw/arm/iotkit: Rename files to hw/arm/armsse.[ch] Date: Mon, 21 Jan 2019 18:51:02 +0000 Message-Id: <20190121185118.18550-8-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190121185118.18550-1-peter.maydell@linaro.org> References: <20190121185118.18550-1-peter.maydell@linaro.org> MIME-Version: 1.0 Rename the files that used to be iotkit.[ch] to armsse.[ch] to reflect the fact they new cover multiple Arm subsystems for embedded. Signed-off-by: Peter Maydell --- hw/arm/Makefile.objs | 2 +- include/hw/arm/{iotkit.h => armsse.h} | 4 ++-- hw/arm/{iotkit.c => armsse.c} | 2 +- hw/arm/mps2-tz.c | 2 +- MAINTAINERS | 4 ++-- default-configs/arm-softmmu.mak | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) rename include/hw/arm/{iotkit.h => armsse.h} (99%) rename hw/arm/{iotkit.c => armsse.c} (99%) -- 2.20.1 Reviewed-by: Philippe Mathieu-Daudé Reviewed-by: Richard Henderson diff --git a/hw/arm/Makefile.objs b/hw/arm/Makefile.objs index 50c7b4a927d..22b7f0ed0ba 100644 --- a/hw/arm/Makefile.objs +++ b/hw/arm/Makefile.objs @@ -34,7 +34,7 @@ obj-$(CONFIG_ASPEED_SOC) += aspeed_soc.o aspeed.o obj-$(CONFIG_MPS2) += mps2.o obj-$(CONFIG_MPS2) += mps2-tz.o obj-$(CONFIG_MSF2) += msf2-soc.o msf2-som.o -obj-$(CONFIG_IOTKIT) += iotkit.o +obj-$(CONFIG_ARMSSE) += armsse.o obj-$(CONFIG_FSL_IMX7) += fsl-imx7.o mcimx7d-sabre.o obj-$(CONFIG_ARM_SMMUV3) += smmu-common.o smmuv3.o obj-$(CONFIG_FSL_IMX6UL) += fsl-imx6ul.o mcimx6ul-evk.o diff --git a/include/hw/arm/iotkit.h b/include/hw/arm/armsse.h similarity index 99% rename from include/hw/arm/iotkit.h rename to include/hw/arm/armsse.h index 521d1f73757..ff512054988 100644 --- a/include/hw/arm/iotkit.h +++ b/include/hw/arm/armsse.h @@ -58,8 +58,8 @@ * + named GPIO outputs mscexp_ns[0..15] */ -#ifndef IOTKIT_H -#define IOTKIT_H +#ifndef ARMSSE_H +#define ARMSSE_H #include "hw/sysbus.h" #include "hw/arm/armv7m.h" diff --git a/hw/arm/iotkit.c b/hw/arm/armsse.c similarity index 99% rename from hw/arm/iotkit.c rename to hw/arm/armsse.c index 7ff14fd5aef..8554be14128 100644 --- a/hw/arm/iotkit.c +++ b/hw/arm/armsse.c @@ -15,7 +15,7 @@ #include "trace.h" #include "hw/sysbus.h" #include "hw/registerfields.h" -#include "hw/arm/iotkit.h" +#include "hw/arm/armsse.h" #include "hw/arm/arm.h" struct ARMSSEInfo { diff --git a/hw/arm/mps2-tz.c b/hw/arm/mps2-tz.c index 5824335b4fb..3859f17d98b 100644 --- a/hw/arm/mps2-tz.c +++ b/hw/arm/mps2-tz.c @@ -46,7 +46,7 @@ #include "hw/misc/mps2-fpgaio.h" #include "hw/misc/tz-mpc.h" #include "hw/misc/tz-msc.h" -#include "hw/arm/iotkit.h" +#include "hw/arm/armsse.h" #include "hw/dma/pl080.h" #include "hw/ssi/pl022.h" #include "hw/devices.h" diff --git a/MAINTAINERS b/MAINTAINERS index af339b86db7..52222117d77 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -625,8 +625,8 @@ F: hw/arm/mps2.c F: hw/arm/mps2-tz.c F: hw/misc/mps2-*.c F: include/hw/misc/mps2-*.h -F: hw/arm/iotkit.c -F: include/hw/arm/iotkit.h +F: hw/arm/armsse.c +F: include/hw/arm/armsse.h F: hw/misc/iotkit-secctl.c F: include/hw/misc/iotkit-secctl.h F: hw/misc/iotkit-sysctl.c diff --git a/default-configs/arm-softmmu.mak b/default-configs/arm-softmmu.mak index 2420491aacd..3f200157879 100644 --- a/default-configs/arm-softmmu.mak +++ b/default-configs/arm-softmmu.mak @@ -114,7 +114,7 @@ CONFIG_MPS2_SCC=y CONFIG_TZ_MPC=y CONFIG_TZ_MSC=y CONFIG_TZ_PPC=y -CONFIG_IOTKIT=y +CONFIG_ARMSSE=y CONFIG_IOTKIT_SECCTL=y CONFIG_IOTKIT_SYSCTL=y CONFIG_IOTKIT_SYSINFO=y From patchwork Mon Jan 21 18:51:03 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 156236 Delivered-To: patches@linaro.org Received: by 2002:a02:48:0:0:0:0:0 with SMTP id 69csp6701047jaa; Mon, 21 Jan 2019 10:51:30 -0800 (PST) X-Received: by 2002:adf:f649:: with SMTP id x9mr28845312wrp.247.1548096690009; Mon, 21 Jan 2019 10:51:30 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548096690; cv=none; d=google.com; s=arc-20160816; b=pkO4A+dJ0KSe9Wj6RyApM8MGsQxwIT/2sYpKj7yLwrvN93VB2c8fhiZCoFD83gju2V 6lMcd//bj0dmNgJAqH0+UG7CHDWNy5X053YK+qqo5o3VqW5zRoMyIVESkrdTnmJEsxXA 2EHT4sG5EHyZz4aV8KPDkgT4SFqmw2SRFMuUiXefQxALt/KMBLhJb9dbJ7/k/qJrjLYa lYFZU+zs/XlZQ4IbQzu65BbYRcSJidTNXIgBCEo189hMsce1k+9vWlmgh3lMoctI0Ory JKMqRcI2KF+KkTrhVmu4yW6XGiN+hrjMlAsQ6YDthDK1h2p4eH52hoGyHzJEBjcML33N WcMQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=NyOzJo6HdhqirSo4FTNN+HWWChIIYH9S1hj1nxz1Els=; b=fk8l3oQ9tJIHaWtzlkdBylOYafNXdDKY/u+jJ+aJG04sDFhpYYgJS9e1zxnOPHpJCE ihwr6FAqttXiVCSrfGrQjNo2K2zkT0EuQEmH2Ri/jMlijrK4zeHA7AH89nk+qaJ7JTMt nsqWlv7q/9BMOrfG0jllxicvCotINJ3dJZg5fTf89trdtf66WDExN1aOg8xkq4Mcps2z +HZbhH33omHckerm3AvimjUiaSGrLY3CwC0o0LFoCxoJRhiueNebnUoZPxO/AgUeS3Vq 6hSJ7V8BHlZQqBjYPWXwTxOBPp/JSQVnDHFeMM2MR9gjE5/EjKhlYM6o77pn9E4Mj7E4 8zOg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=emaPeNzZ; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id v18sor65021878wrn.45.2019.01.21.10.51.29 for (Google Transport Security); Mon, 21 Jan 2019 10:51:30 -0800 (PST) Received-SPF: pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) client-ip=209.85.220.65; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=emaPeNzZ; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=NyOzJo6HdhqirSo4FTNN+HWWChIIYH9S1hj1nxz1Els=; b=emaPeNzZfiytvchph1Vs4rV0jasLnMCz6Otco+zPhu8DUgwpls2bYG/kT3lx72wYme O3sceL8DhdZAM5NH4XLjCOAzNE6POmWlzSNyINL7L8hYBzSt3bIFFoV16Tiiv+pfVKOx 76I+JzpWLzw0yZKrlK29K4t/N9E7OeyKAqr0g= 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:mime-version:content-transfer-encoding; bh=NyOzJo6HdhqirSo4FTNN+HWWChIIYH9S1hj1nxz1Els=; b=G9XB8bBImNko98xzQ5+s6PeZFYvOQSZz+s91r3sfDx5xaHF0RKywkIbNkgogmiqAFJ 3D1UtBmTPw083VFZ5kjkkqDmB0/7+Xeo/CVRdumm9fia7VSY1dUqcm73vgiv1xCc8J4C fJZM0rS06arjYQ55hi2ZcrK8TU7tb719IwDxQiyIddU3bfzurUYXQu8xIgCGySGjeOsb SoHVd2HVLRQYg1z9ywfq6vuNrK6pkhbGUJixHjFrLne408bEeGJigfqUJs04Yy127ceK ey3nMuDwwwM5UAH51msdh29hkMBrT/uvA/SpDaFZv6JBgwMVXiff/1Ee6qeMrlDwgGnB Lr/Q== X-Gm-Message-State: AJcUukdBtIbmvxLq7dxQlNuoHYt9SSBzhIT7EwXZq+CUOyB6KgPm1BQX YnP288WJSGKHu80H3mzMkknlGL72 X-Google-Smtp-Source: ALg8bN49KtCxV3r66NgbjoNAW/HZTvij1jmLbBdZ76o5a1eSjVF0b0l5ie+G6Lo9ooS6pyKJTGswbw== X-Received: by 2002:a5d:678b:: with SMTP id v11mr31458990wru.245.1548096689601; Mon, 21 Jan 2019 10:51:29 -0800 (PST) Return-Path: Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id n82sm50386660wma.42.2019.01.21.10.51.28 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 21 Jan 2019 10:51:29 -0800 (PST) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Cc: patches@linaro.org Subject: [PATCH 08/23] hw/misc/iotkit-secctl: Support 4 internal MPCs Date: Mon, 21 Jan 2019 18:51:03 +0000 Message-Id: <20190121185118.18550-9-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190121185118.18550-1-peter.maydell@linaro.org> References: <20190121185118.18550-1-peter.maydell@linaro.org> MIME-Version: 1.0 The SSE-200 has 4 banks of SRAM, each with its own internal Memory Protection Controller. The interrupt status for these extra MPCs appears in the same security controller SECMPCINTSTATUS register as the MPC for the IoTKit's single SRAM bank. Enhance the iotkit-secctl device to allow 4 MPCs. (If the particular IoTKit/SSE variant in use does not have all 4 MPCs then the unused inputs will simply result in the SECMPCINTSTATUS bits being zero as required.) The hardcoded constant "1"s in armsse.c indicate the actual number of SRAM MPCs the IoTKit has, and will be replaced in the following commit. Signed-off-by: Peter Maydell --- include/hw/misc/iotkit-secctl.h | 6 +++--- hw/arm/armsse.c | 6 +++--- hw/misc/iotkit-secctl.c | 5 +++-- 3 files changed, 9 insertions(+), 8 deletions(-) -- 2.20.1 Reviewed-by: Richard Henderson diff --git a/include/hw/misc/iotkit-secctl.h b/include/hw/misc/iotkit-secctl.h index 1a193b306f1..bcb0437be5b 100644 --- a/include/hw/misc/iotkit-secctl.h +++ b/include/hw/misc/iotkit-secctl.h @@ -40,8 +40,8 @@ * + named GPIO outputs ahb_ppcexp{0,1,2,3}_irq_enable * + named GPIO outputs ahb_ppcexp{0,1,2,3}_irq_clear * + named GPIO inputs ahb_ppcexp{0,1,2,3}_irq_status - * Controlling the MPC in the IoTKit: - * + named GPIO input mpc_status + * Controlling the (up to) 4 MPCs in the IoTKit/SSE: + * + named GPIO inputs mpc_status[0..3] * Controlling each of the 16 expansion MPCs which a system using the IoTKit * might provide: * + named GPIO inputs mpcexp_status[0..15] @@ -67,7 +67,7 @@ #define IOTS_NUM_APB_EXP_PPC 4 #define IOTS_NUM_AHB_EXP_PPC 4 #define IOTS_NUM_EXP_MPC 16 -#define IOTS_NUM_MPC 1 +#define IOTS_NUM_MPC 4 #define IOTS_NUM_EXP_MSC 16 typedef struct IoTKitSecCtl IoTKitSecCtl; diff --git a/hw/arm/armsse.c b/hw/arm/armsse.c index 8554be14128..074c1d3a6cf 100644 --- a/hw/arm/armsse.c +++ b/hw/arm/armsse.c @@ -138,7 +138,7 @@ static void armsse_init(Object *obj) sizeof(s->mpc_irq_orgate), TYPE_OR_IRQ, &error_abort, NULL); - for (i = 0; i < ARRAY_SIZE(s->mpc_irq_splitter); i++) { + for (i = 0; i < IOTS_NUM_EXP_MPC + 1; i++) { char *name = g_strdup_printf("mpc-irq-splitter-%d", i); SplitIRQ *splitter = &s->mpc_irq_splitter[i]; @@ -363,7 +363,7 @@ static void armsse_realize(DeviceState *dev, Error **errp) /* We must OR together lines from the MPC splitters to go to the NVIC */ object_property_set_int(OBJECT(&s->mpc_irq_orgate), - IOTS_NUM_EXP_MPC + IOTS_NUM_MPC, "num-lines", &err); + IOTS_NUM_EXP_MPC + 1, "num-lines", &err); if (err) { error_propagate(errp, err); return; @@ -636,7 +636,7 @@ static void armsse_realize(DeviceState *dev, Error **errp) } /* Wire up the splitters for the MPC IRQs */ - for (i = 0; i < IOTS_NUM_EXP_MPC + IOTS_NUM_MPC; i++) { + for (i = 0; i < IOTS_NUM_EXP_MPC + 1; i++) { SplitIRQ *splitter = &s->mpc_irq_splitter[i]; DeviceState *dev_splitter = DEVICE(splitter); diff --git a/hw/misc/iotkit-secctl.c b/hw/misc/iotkit-secctl.c index 2222b3e147d..537601cd53f 100644 --- a/hw/misc/iotkit-secctl.c +++ b/hw/misc/iotkit-secctl.c @@ -600,7 +600,7 @@ static void iotkit_secctl_mpc_status(void *opaque, int n, int level) { IoTKitSecCtl *s = IOTKIT_SECCTL(opaque); - s->mpcintstatus = deposit32(s->mpcintstatus, 0, 1, !!level); + s->mpcintstatus = deposit32(s->mpcintstatus, n, 1, !!level); } static void iotkit_secctl_mpcexp_status(void *opaque, int n, int level) @@ -686,7 +686,8 @@ static void iotkit_secctl_init(Object *obj) qdev_init_gpio_out_named(dev, &s->sec_resp_cfg, "sec_resp_cfg", 1); qdev_init_gpio_out_named(dev, &s->nsc_cfg_irq, "nsc_cfg", 1); - qdev_init_gpio_in_named(dev, iotkit_secctl_mpc_status, "mpc_status", 1); + qdev_init_gpio_in_named(dev, iotkit_secctl_mpc_status, "mpc_status", + IOTS_NUM_MPC); qdev_init_gpio_in_named(dev, iotkit_secctl_mpcexp_status, "mpcexp_status", IOTS_NUM_EXP_MPC); From patchwork Mon Jan 21 18:51:04 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 156237 Delivered-To: patches@linaro.org Received: by 2002:a02:48:0:0:0:0:0 with SMTP id 69csp6701059jaa; Mon, 21 Jan 2019 10:51:31 -0800 (PST) X-Received: by 2002:a1c:180a:: with SMTP id 10mr574151wmy.92.1548096691242; Mon, 21 Jan 2019 10:51:31 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548096691; cv=none; d=google.com; s=arc-20160816; b=kWcdo3xk3DW3Gsj1xrdqrgL8H/e7q3Kuw8/0WsMiHHuSJlH932E7HMfcKlwPDWeBZP 0ZBhkPlYGvvIOEM1SeWA9We4FZLslD1Yp3C0yxZ0oaIvvr8JCb/kK2CMcyc1/MuaeFOX 1S9pveDsN6lBgedW3HMWXCJrFfaX1x7OAAE4x4ZjvvujEiPcGeIE5f8RKP7i6xQXh5l7 S8poAf6Q2YRAU0qGy9sw5tb7Dv1Zq9Thja3z4pMyOIiMZ5+DuLdkfLm1LbuD7/lg8eWK YTZxFb5bcjrSJcXuu9JcW9IgKUNZkSVb7ZEZxs9Plqt3W9eI6O+QY1UQhKxQHqijZqVC oYpQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=rmaI+kkyf9uJRswykyw1+Rfz8wtF0OuwFSjC/Eb5qSY=; b=bBWi9YHcHkW4jNBGjsnFy1Vjwq4gHxjrWZihdy+xyINBI06wufxo6jDeApi6dDkyuI sHDVvAccsoQPIvDU4VOqSg29tEpxOVA4Tw0a9oF8rs/iD21cMr90PqAxxWiIGiGE/Xl2 kdhkD22JR2X5G9LjwiZsUDGNvCmpr1QxbRsVH2GwtPwUtWeuBCJ9pwZmaliK6HiDaWiI dwOWfs/jJwbg7m17sTVL9+Ct4Y++vvUKqeapOybj9wO5myR8ca66o5YZuvNG/ukYoxOg utjZqAyX1S/UjyG/GWYDV/ucarBPono29WXohRaQSJ0EwfCMKmoBdOlZPMtaIY/ayYhl rE/A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=NgT4LneB; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id a13sor20796993wrq.46.2019.01.21.10.51.31 for (Google Transport Security); Mon, 21 Jan 2019 10:51:31 -0800 (PST) Received-SPF: pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) client-ip=209.85.220.65; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=NgT4LneB; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=rmaI+kkyf9uJRswykyw1+Rfz8wtF0OuwFSjC/Eb5qSY=; b=NgT4LneBBMvw0kDkLDvSpQiBIPRjr8l2M2Cq2zUTQi7FHfUoqM0f5LEX4QOQK0mCtz VI4zl206m5KIxK5jbs3zo5fTaf3aR0b5rXW52vw9sm/zQtwD3+uriaJzIAFsfNsa7fWu WpqX14k+wA6xc6APHOINQ+YZeMESM5cjSqfjg= 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:mime-version:content-transfer-encoding; bh=rmaI+kkyf9uJRswykyw1+Rfz8wtF0OuwFSjC/Eb5qSY=; b=JG+WDdiuhhOpeZ/UeK97vFDw4Qbdq1r5kNFy1XOfknueE4k5e1t8LiEmliVTgbQQPc h3HMkD4X22r+P0xoTCd4k66tkj7Ty8RzmNGlEaQQFxOX2nkY4WiOG8ci78lzb1uGiZGr jF6X5OfFPZrlj1OaX0EZS+UiTEa00xJczVBAL5V9x/hMtyqubBzXvNbBzC9APw3zPuJi IxEq8tGOLauKLLfeKotjC9XuVgq1BS0lcQ35EnfH9wGKBP8t0eD8P+tVHdGzKVDx3JfR +MtjNI7zzW3EvfrEz4Nrnd/USn04Wy+R1fwucJM18yirS9ny2PuAuKDDXwqpK/mZocgE 5n6A== X-Gm-Message-State: AJcUukePNjw6k/7jnZL3I9KckMUqPgjFOk9/6YFDwkHIuqCrbFce05mq aiozpeJWQFR5CK/RnpQ3oANSMWnA X-Google-Smtp-Source: ALg8bN6UcskssWrZ30dPS0LT9CAknEuHbcAur8fuiXFyNUwUYQcXGgt0xr86OU9HS4jqmGxRBpVOBg== X-Received: by 2002:adf:ea11:: with SMTP id q17mr28257724wrm.328.1548096690792; Mon, 21 Jan 2019 10:51:30 -0800 (PST) Return-Path: Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id n82sm50386660wma.42.2019.01.21.10.51.29 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 21 Jan 2019 10:51:30 -0800 (PST) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Cc: patches@linaro.org Subject: [PATCH 09/23] hw/arm/armsse: Make number of SRAM banks parameterised Date: Mon, 21 Jan 2019 18:51:04 +0000 Message-Id: <20190121185118.18550-10-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190121185118.18550-1-peter.maydell@linaro.org> References: <20190121185118.18550-1-peter.maydell@linaro.org> MIME-Version: 1.0 The SSE-200 has four banks of SRAM, each with its own Memory Protection Controller, where the IoTKit has only one. Make the number of SRAM banks a field in ARMSSEInfo. Signed-off-by: Peter Maydell --- include/hw/arm/armsse.h | 9 +++-- hw/arm/armsse.c | 78 ++++++++++++++++++++++++++--------------- 2 files changed, 56 insertions(+), 31 deletions(-) -- 2.20.1 Reviewed-by: Richard Henderson diff --git a/include/hw/arm/armsse.h b/include/hw/arm/armsse.h index ff512054988..99714aa63cd 100644 --- a/include/hw/arm/armsse.h +++ b/include/hw/arm/armsse.h @@ -90,6 +90,11 @@ #define NUM_EXTERNAL_PPCS (IOTS_NUM_AHB_EXP_PPC + IOTS_NUM_APB_EXP_PPC) #define NUM_PPCS (NUM_EXTERNAL_PPCS + 2) +#define MAX_SRAM_BANKS 4 +#if MAX_SRAM_BANKS > IOTS_NUM_MPC +#error Too many SRAM banks +#endif + typedef struct ARMSSE { /*< private >*/ SysBusDevice parent_obj; @@ -99,7 +104,7 @@ typedef struct ARMSSE { IoTKitSecCtl secctl; TZPPC apb_ppc0; TZPPC apb_ppc1; - TZMPC mpc; + TZMPC mpc[IOTS_NUM_MPC]; CMSDKAPBTIMER timer0; CMSDKAPBTIMER timer1; CMSDKAPBTIMER s32ktimer; @@ -123,7 +128,7 @@ typedef struct ARMSSE { MemoryRegion alias1; MemoryRegion alias2; MemoryRegion alias3; - MemoryRegion sram0; + MemoryRegion sram[MAX_SRAM_BANKS]; qemu_irq *exp_irqs; qemu_irq ppc0_irq; diff --git a/hw/arm/armsse.c b/hw/arm/armsse.c index 074c1d3a6cf..b639b54e0db 100644 --- a/hw/arm/armsse.c +++ b/hw/arm/armsse.c @@ -20,11 +20,13 @@ struct ARMSSEInfo { const char *name; + int sram_banks; }; static const ARMSSEInfo armsse_variants[] = { { .name = TYPE_IOTKIT, + .sram_banks = 1, }, }; @@ -118,8 +120,12 @@ static void armsse_forward_sec_resp_cfg(ARMSSE *s) static void armsse_init(Object *obj) { ARMSSE *s = ARMSSE(obj); + ARMSSEClass *asc = ARMSSE_GET_CLASS(obj); + const ARMSSEInfo *info = asc->info; int i; + assert(info->sram_banks <= MAX_SRAM_BANKS); + memory_region_init(&s->container, obj, "armsse-container", UINT64_MAX); sysbus_init_child_obj(obj, "armv7m", &s->armv7m, sizeof(s->armv7m), @@ -133,12 +139,17 @@ static void armsse_init(Object *obj) TYPE_TZ_PPC); sysbus_init_child_obj(obj, "apb-ppc1", &s->apb_ppc1, sizeof(s->apb_ppc1), TYPE_TZ_PPC); - sysbus_init_child_obj(obj, "mpc", &s->mpc, sizeof(s->mpc), TYPE_TZ_MPC); + for (i = 0; i < info->sram_banks; i++) { + char *name = g_strdup_printf("mpc%d", i); + sysbus_init_child_obj(obj, name, &s->mpc[i], + sizeof(s->mpc[i]), TYPE_TZ_MPC); + g_free(name); + } object_initialize_child(obj, "mpc-irq-orgate", &s->mpc_irq_orgate, sizeof(s->mpc_irq_orgate), TYPE_OR_IRQ, &error_abort, NULL); - for (i = 0; i < IOTS_NUM_EXP_MPC + 1; i++) { + for (i = 0; i < IOTS_NUM_EXP_MPC + info->sram_banks; i++) { char *name = g_strdup_printf("mpc-irq-splitter-%d", i); SplitIRQ *splitter = &s->mpc_irq_splitter[i]; @@ -199,6 +210,8 @@ static void armsse_mpcexp_status(void *opaque, int n, int level) static void armsse_realize(DeviceState *dev, Error **errp) { ARMSSE *s = ARMSSE(dev); + ARMSSEClass *asc = ARMSSE_GET_CLASS(dev); + const ARMSSEInfo *info = asc->info; int i; MemoryRegion *mr; Error *err = NULL; @@ -335,35 +348,41 @@ static void armsse_realize(DeviceState *dev, Error **errp) qdev_connect_gpio_out_named(dev_secctl, "sec_resp_cfg", 0, qdev_get_gpio_in(dev_splitter, 0)); - /* This RAM lives behind the Memory Protection Controller */ - memory_region_init_ram(&s->sram0, NULL, "armsse.sram0", 0x00008000, &err); - if (err) { - error_propagate(errp, err); - return; + /* Each SRAM bank lives behind its own Memory Protection Controller */ + for (i = 0; i < info->sram_banks; i++) { + char *ramname = g_strdup_printf("armsse.sram%d", i); + SysBusDevice *sbd_mpc; + + memory_region_init_ram(&s->sram[i], NULL, ramname, 0x00008000, &err); + g_free(ramname); + if (err) { + error_propagate(errp, err); + return; + } + object_property_set_link(OBJECT(&s->mpc[i]), OBJECT(&s->sram[i]), + "downstream", &err); + if (err) { + error_propagate(errp, err); + return; + } + object_property_set_bool(OBJECT(&s->mpc[i]), true, "realized", &err); + if (err) { + error_propagate(errp, err); + return; + } + /* Map the upstream end of the MPC into the right place... */ + sbd_mpc = SYS_BUS_DEVICE(&s->mpc[i]); + memory_region_add_subregion(&s->container, 0x20000000 + i * 0x8000, + sysbus_mmio_get_region(sbd_mpc, 1)); + /* ...and its register interface */ + memory_region_add_subregion(&s->container, 0x50083000 + i * 0x1000, + sysbus_mmio_get_region(sbd_mpc, 0)); } - object_property_set_link(OBJECT(&s->mpc), OBJECT(&s->sram0), - "downstream", &err); - if (err) { - error_propagate(errp, err); - return; - } - object_property_set_bool(OBJECT(&s->mpc), true, "realized", &err); - if (err) { - error_propagate(errp, err); - return; - } - /* Map the upstream end of the MPC into the right place... */ - memory_region_add_subregion(&s->container, 0x20000000, - sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->mpc), - 1)); - /* ...and its register interface */ - memory_region_add_subregion(&s->container, 0x50083000, - sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->mpc), - 0)); /* We must OR together lines from the MPC splitters to go to the NVIC */ object_property_set_int(OBJECT(&s->mpc_irq_orgate), - IOTS_NUM_EXP_MPC + 1, "num-lines", &err); + IOTS_NUM_EXP_MPC + info->sram_banks, + "num-lines", &err); if (err) { error_propagate(errp, err); return; @@ -636,7 +655,7 @@ static void armsse_realize(DeviceState *dev, Error **errp) } /* Wire up the splitters for the MPC IRQs */ - for (i = 0; i < IOTS_NUM_EXP_MPC + 1; i++) { + for (i = 0; i < IOTS_NUM_EXP_MPC + info->sram_banks; i++) { SplitIRQ *splitter = &s->mpc_irq_splitter[i]; DeviceState *dev_splitter = DEVICE(splitter); @@ -659,7 +678,8 @@ static void armsse_realize(DeviceState *dev, Error **errp) "mpcexp_status", i)); } else { /* Splitter input is from our own MPC */ - qdev_connect_gpio_out_named(DEVICE(&s->mpc), "irq", 0, + qdev_connect_gpio_out_named(DEVICE(&s->mpc[i - IOTS_NUM_EXP_MPC]), + "irq", 0, qdev_get_gpio_in(dev_splitter, 0)); qdev_connect_gpio_out(dev_splitter, 0, qdev_get_gpio_in_named(dev_secctl, From patchwork Mon Jan 21 18:51:05 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 156238 Delivered-To: patches@linaro.org Received: by 2002:a02:48:0:0:0:0:0 with SMTP id 69csp6701076jaa; Mon, 21 Jan 2019 10:51:32 -0800 (PST) X-Received: by 2002:adf:ce86:: with SMTP id r6mr30748750wrn.257.1548096692393; Mon, 21 Jan 2019 10:51:32 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548096692; cv=none; d=google.com; s=arc-20160816; b=FAdp1naHMY3y+Z9B3IKdOeHRq2f3uD9vPzHFxVM9TEPHPdpHmPG25qA7trBBkZ97MN RIrr7ec2akeU/NYxfJ3peNg3l9oNUKqT3iy1xxpatX3EUDMZlpveMIE7be9ZIFSAMjp9 kQ2cC+akA13JJAdjZseUDIilr0G5+6K3RSfHcSJwo70dYuK+Fu1vhzn8rJ7sAb84Ou9H Jc74f/bO++NLqcnD/7+8Z+ArffJr5eJvs/940B7nKdm3RDKkRGL3WmQyaLS65EHQSQLn fQVV/yrngriu+XeGmPd1oQxW0zOQNCmbg0P9J7IRtxSWcNyEYswZuMHnECWUkLmAsq6A CqWg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=ZtglysStG0tXIkc7Lj+My+7b7XqiO1d9EdiWVYmU19M=; b=cR+sWuOoPgGk9SzAVMoL/flGz37Da9QW7yvxrgPy8H+lsWqvqUfDBWshFNrgPnepdd XOqRqXL+r5aW4C9B2Tq2qoNna/eReXF8BImH4zWdSzMwpitFgP1KGMXspEbUxIzdkdgx XXjs6uJspwhVB1X5gHm97VYtRnGoZRVuX0wnNCDrghABXJoAorZuEInbTYuSjI4XbJWn pn8h48l4rBSGaQj9BS83FesNavFfF71hBKXmxQxprjhJ/pNDjXVSNNAC9otEDr0mg15e 2HDN7JclKIo0RRb5cNr5Rjg5kVSbo4QSzrHy6UAgPnloYICQyrm8LWGatMEQmYpUP8Rq KI6g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=ZMdYJmqz; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id g84sor32369143wmg.19.2019.01.21.10.51.32 for (Google Transport Security); Mon, 21 Jan 2019 10:51:32 -0800 (PST) Received-SPF: pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) client-ip=209.85.220.65; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=ZMdYJmqz; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ZtglysStG0tXIkc7Lj+My+7b7XqiO1d9EdiWVYmU19M=; b=ZMdYJmqzA5/BcWiQm8dp6Y66h5RsB/6WGQZ6Uk6pgVk1JEReUlPo7fupO4z0o2YNxA Ie7svBsqsr5CU2IvQ2/w8aV80Eymgqel6wyFcc2nyhwbklU79jDpfUXeuu6nrn+hRd21 BOyNKJIjrV8gfpfmEJgJeGL4OuQPaPmti0yCk= 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:mime-version:content-transfer-encoding; bh=ZtglysStG0tXIkc7Lj+My+7b7XqiO1d9EdiWVYmU19M=; b=ULyJQJ7FHyj6rgN5suMoH6HsR1CkWXm0svhPn5sVKKKEgHkiL13slzAjZsHtj4Gs9L dGRnpTpRoJJcB/5RCbhT5gYd+le7l7AmwQiYMLPzG2AelYVo8HTvK5rYvCcLhigKC2vG UfyFM+R1GQHylplakh4zJ42RnwTKIFikSLYT8b+HGKYPWBaCNQVnFNa/9WqcLfkyWipf lKkSLTmYKSPLSUoFMCRQr+DP8PuCSqsyKqQMxUnTIqIimBvACwc4THS4PApu2P8XF7NG KTNUqwzWBOQyKv1i4U1yU1EQEn6hLRL/6oYnE2YIKQjqVjrRATC5gQ7Z1nd/NXSQEPEh WKWQ== X-Gm-Message-State: AJcUukeZzop9AN5wfSWzq9PNQO1/ku5YIzAZadUB+LvC2jrPlooxjGLM RzMF9jhOrchsq/BlkceI5ro6Cnw0 X-Google-Smtp-Source: ALg8bN6eONj0omW2Km1lqm7d3AhBgeoePlM6hLj85GNaoo8xG2UX1CLOX4be8/Ji9Tq9Y4bYw5yPOA== X-Received: by 2002:a7b:c44d:: with SMTP id l13mr578253wmi.144.1548096691956; Mon, 21 Jan 2019 10:51:31 -0800 (PST) Return-Path: Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id n82sm50386660wma.42.2019.01.21.10.51.30 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 21 Jan 2019 10:51:31 -0800 (PST) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Cc: patches@linaro.org Subject: [PATCH 10/23] hw/arm/armsse: Make SRAM bank size configurable Date: Mon, 21 Jan 2019 18:51:05 +0000 Message-Id: <20190121185118.18550-11-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190121185118.18550-1-peter.maydell@linaro.org> References: <20190121185118.18550-1-peter.maydell@linaro.org> MIME-Version: 1.0 For the IoTKit the SRAM bank size is always 32K (15 bits); for the SSE-200 this is a configurable parameter, which defaults to 32K but can be changed when it is built into a particular SoC. For instance the Musca-B1 board sets it to 128K (17 bits). Make the bank size a QOM property. We follow the SSE-200 hardware in naming the parameter SRAM_ADDR_WIDTH, which specifies the number of address bits of a single SRAM bank. Signed-off-by: Peter Maydell --- include/hw/arm/armsse.h | 1 + hw/arm/armsse.c | 18 ++++++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) -- 2.20.1 Reviewed-by: Richard Henderson diff --git a/include/hw/arm/armsse.h b/include/hw/arm/armsse.h index 99714aa63cd..e4a05013316 100644 --- a/include/hw/arm/armsse.h +++ b/include/hw/arm/armsse.h @@ -146,6 +146,7 @@ typedef struct ARMSSE { MemoryRegion *board_memory; uint32_t exp_numirq; uint32_t mainclk_frq; + uint32_t sram_addr_width; } ARMSSE; typedef struct ARMSSEInfo ARMSSEInfo; diff --git a/hw/arm/armsse.c b/hw/arm/armsse.c index b639b54e0db..a2ae5d3c4b9 100644 --- a/hw/arm/armsse.c +++ b/hw/arm/armsse.c @@ -221,6 +221,7 @@ static void armsse_realize(DeviceState *dev, Error **errp) DeviceState *dev_apb_ppc1; DeviceState *dev_secctl; DeviceState *dev_splitter; + uint32_t addr_width_max; if (!s->board_memory) { error_setg(errp, "memory property was not set"); @@ -232,6 +233,15 @@ static void armsse_realize(DeviceState *dev, Error **errp) return; } + /* max SRAM_ADDR_WIDTH: 24 - log2(SRAM_NUM_BANK) */ + assert(is_power_of_2(info->sram_banks)); + addr_width_max = 24 - ctz32(info->sram_banks); + if (s->sram_addr_width < 1 || s->sram_addr_width > addr_width_max) { + error_setg(errp, "SRAM_ADDR_WIDTH must be between 1 and %d", + addr_width_max); + return; + } + /* Handling of which devices should be available only to secure * code is usually done differently for M profile than for A profile. * Instead of putting some devices only into the secure address space, @@ -352,8 +362,10 @@ static void armsse_realize(DeviceState *dev, Error **errp) for (i = 0; i < info->sram_banks; i++) { char *ramname = g_strdup_printf("armsse.sram%d", i); SysBusDevice *sbd_mpc; + uint32_t sram_bank_size = 1 << s->sram_addr_width; - memory_region_init_ram(&s->sram[i], NULL, ramname, 0x00008000, &err); + memory_region_init_ram(&s->sram[i], NULL, ramname, + sram_bank_size, &err); g_free(ramname); if (err) { error_propagate(errp, err); @@ -372,7 +384,8 @@ static void armsse_realize(DeviceState *dev, Error **errp) } /* Map the upstream end of the MPC into the right place... */ sbd_mpc = SYS_BUS_DEVICE(&s->mpc[i]); - memory_region_add_subregion(&s->container, 0x20000000 + i * 0x8000, + memory_region_add_subregion(&s->container, + 0x20000000 + i * sram_bank_size, sysbus_mmio_get_region(sbd_mpc, 1)); /* ...and its register interface */ memory_region_add_subregion(&s->container, 0x50083000 + i * 0x1000, @@ -748,6 +761,7 @@ static Property armsse_properties[] = { MemoryRegion *), DEFINE_PROP_UINT32("EXP_NUMIRQ", ARMSSE, exp_numirq, 64), DEFINE_PROP_UINT32("MAINCLK", ARMSSE, mainclk_frq, 0), + DEFINE_PROP_UINT32("SRAM_ADDR_WIDTH", ARMSSE, sram_addr_width, 15), DEFINE_PROP_END_OF_LIST() }; From patchwork Mon Jan 21 18:51:06 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 156239 Delivered-To: patches@linaro.org Received: by 2002:a02:48:0:0:0:0:0 with SMTP id 69csp6701105jaa; Mon, 21 Jan 2019 10:51:34 -0800 (PST) X-Received: by 2002:a1c:7c07:: with SMTP id x7mr573641wmc.82.1548096693883; Mon, 21 Jan 2019 10:51:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548096693; cv=none; d=google.com; s=arc-20160816; b=qN9oiWUR4vRXoVIA3hSYUAdkb0Stnob5PQywHaY/SLXrOG4f+PUcHQd4IJHEZLi5+Y YZs0w8OwgYa101493hJ7xMwdH51PEDFIbVgMzTbtTkWQ3vW1MDGniQWBaQ/eZyNNxjS8 kEe2DqQxE9grPqoIhcDjoFTY69Uh50WrKEpftjXr8OcxaGdGtK1rN4sZ3nXYvOSmXenX s8ztgLD2rpzFtjSDoB6+OlIrpbE+0uVbZDzUJbHmUPlqCzr6X7rTDAW0jA07C1zBjJ+/ dB4YRIRlFXAHg3K89gkb/+t8yqllZn/cqT1uIASHkTJDHJZN1q7gNF3UjjR161mvAvNu l80A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=ERgJG9PhtMoyjC++bigjOAZTdVMBDVouJXesxc5aBKU=; b=r3qW/T+3yYnVRLUW9RIo3iI+jmzH28Wb+GW1vhzsOnSQqzekzML2JjhpW/Gf8XwjnU zZLXvV0WadMp0j9cQN+nF80B3AI9MYOtXYf3kltC9QlCdja6N86tsix6H1/2kODlwHwa 4+A8Na2QrZpm2ZFpFl9z15MEQpDPUrPKoo6tlZ+0TDb+FLJz1wxZ5DBkn+5+wIaMTTnW 96ff2TV6UMndNFowcIMFPnSNZJdqaIIZ/AjcBldxMKP8GXyapgbfsftY58uvARqopuZm ed+D1sWv10Az6uG0LEj7+549fLkOPkZ2wB13ZuloIQ091muv5QtHl8M5KLAAqCCgNeF5 MzDA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=Nbmar4Ta; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.41 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from mail-sor-f41.google.com (mail-sor-f41.google.com. [209.85.220.41]) by mx.google.com with SMTPS id r17sor25120622wrv.44.2019.01.21.10.51.33 for (Google Transport Security); Mon, 21 Jan 2019 10:51:33 -0800 (PST) Received-SPF: pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.41 as permitted sender) client-ip=209.85.220.41; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=Nbmar4Ta; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.41 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ERgJG9PhtMoyjC++bigjOAZTdVMBDVouJXesxc5aBKU=; b=Nbmar4Ta2YoevbRAXWViDayhj3522vcuqTNxt5Ir0Og/25a15O8haSV24npiZfiDJQ zygnLbMgJgOIp7m4pyoVVno7G88GFzgk+mIhpT/1m0TdRrbAiNlKGcZC/hklxZr7wjpH p/Hy8trwsC9eymAItvjO5j49jykp8l67dYvdk= 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:mime-version:content-transfer-encoding; bh=ERgJG9PhtMoyjC++bigjOAZTdVMBDVouJXesxc5aBKU=; b=ddJtufyaqxoUK95R5g0ybjQ+4fI5lAvSFlCt8vXE/VII+LLox7zqbcyQVV9TMwWCU/ jNEd3vM5K6xicy8U08reR9kEEoJEt9bbxDG6r6Ml2Pf2xQc+0IRInWa/uRt0HT4N4tcJ IYiGxUaEtnXkJcwTzwzGkK8J9L92ibQV0V5+yfoqTgiN1MpYWJsxDU66e8aEp/2s70OV 2QkCdyYuM/SrkB6mANteuSTzrxItr9jNFVZX9XryTZ/h3VYYk/O9nvZAOa/9GU6l9cF1 IVagmrUsTMyvHcQ2RVH5PNstctpsh2UQIb7ipHH3psU6kmEs9NQznPrBp1PLZzNYz4Hw eT7Q== X-Gm-Message-State: AJcUukePbuhja8pZkkNs5eHhh16BzSewGsb6e5Yk4GLN7zcmBzLvDU4i nCjAN4VrYHq+qUuM6TTX0Q8CpE+f X-Google-Smtp-Source: ALg8bN5X5LXwQAmTOOhHIcdUYpKwWALKF+y5R9cFQ/bQ7rd/OHcuI1E9sm9lNGj/AjmWzEPoAUcbSQ== X-Received: by 2002:adf:9f10:: with SMTP id l16mr30473325wrf.206.1548096693322; Mon, 21 Jan 2019 10:51:33 -0800 (PST) Return-Path: Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id n82sm50386660wma.42.2019.01.21.10.51.32 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 21 Jan 2019 10:51:32 -0800 (PST) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Cc: patches@linaro.org Subject: [PATCH 11/23] hw/arm/armsse: Support dual-CPU configuration Date: Mon, 21 Jan 2019 18:51:06 +0000 Message-Id: <20190121185118.18550-12-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190121185118.18550-1-peter.maydell@linaro.org> References: <20190121185118.18550-1-peter.maydell@linaro.org> MIME-Version: 1.0 The SSE-200 has two Cortex-M33 CPUs. These see the same view of memory, with the exception of the "private CPU region" which has per-CPU devices. Internal device interrupts for SSE-200 devices are mostly wired up to both CPUs, with the exception of a few per-CPU devices. External GPIO inputs on the SSE-200 device are provided for the second CPU's interrupts above 32, as is already the case for the first CPU. Refactor the code to support creation of multiple CPUs. For the moment we leave all CPUs with the same view of memory: this will not work in the multiple-CPU case, but we will fix this in the following commit. Signed-off-by: Peter Maydell --- include/hw/arm/armsse.h | 21 +++- hw/arm/armsse.c | 206 ++++++++++++++++++++++++++++++++-------- 2 files changed, 180 insertions(+), 47 deletions(-) -- 2.20.1 Reviewed-by: Richard Henderson diff --git a/include/hw/arm/armsse.h b/include/hw/arm/armsse.h index e4a05013316..faf5dfed252 100644 --- a/include/hw/arm/armsse.h +++ b/include/hw/arm/armsse.h @@ -28,9 +28,16 @@ * + QOM property "memory" is a MemoryRegion containing the devices provided * by the board model. * + QOM property "MAINCLK" is the frequency of the main system clock - * + QOM property "EXP_NUMIRQ" sets the number of expansion interrupts - * + Named GPIO inputs "EXP_IRQ" 0..n are the expansion interrupts, which - * are wired to the NVIC lines 32 .. n+32 + * + QOM property "EXP_NUMIRQ" sets the number of expansion interrupts. + * (In hardware, the SSE-200 permits the number of expansion interrupts + * for the two CPUs to be configured separately, but we restrict it to + * being the same for both, to avoid having to have separate Property + * lists for different variants. This restriction can be relaxed later + * if necessary.) + * + Named GPIO inputs "EXP_IRQ" 0..n are the expansion interrupts for CPU 0, + * which are wired to its NVIC lines 32 .. n+32 + * + Named GPIO inputs "EXP_CPU1_IRQ" 0..n are the expansion interrupts for + * CPU 1, which are wired to its NVIC lines 32 .. n+32 * + sysbus MMIO region 0 is the "AHB Slave Expansion" which allows * bus master devices in the board model to make transactions into * all the devices and memory areas in the IoTKit @@ -95,12 +102,14 @@ #error Too many SRAM banks #endif +#define SSE_MAX_CPUS 2 + typedef struct ARMSSE { /*< private >*/ SysBusDevice parent_obj; /*< public >*/ - ARMv7MState armv7m; + ARMv7MState armv7m[SSE_MAX_CPUS]; IoTKitSecCtl secctl; TZPPC apb_ppc0; TZPPC apb_ppc1; @@ -115,6 +124,8 @@ typedef struct ARMSSE { qemu_or_irq mpc_irq_orgate; qemu_or_irq nmi_orgate; + SplitIRQ cpu_irq_splitter[32]; + CMSDKAPBDualTimer dualtimer; CMSDKAPBWatchdog s32kwatchdog; @@ -130,7 +141,7 @@ typedef struct ARMSSE { MemoryRegion alias3; MemoryRegion sram[MAX_SRAM_BANKS]; - qemu_irq *exp_irqs; + qemu_irq *exp_irqs[SSE_MAX_CPUS]; qemu_irq ppc0_irq; qemu_irq ppc1_irq; qemu_irq sec_resp_cfg; diff --git a/hw/arm/armsse.c b/hw/arm/armsse.c index a2ae5d3c4b9..5cb2b78b1fc 100644 --- a/hw/arm/armsse.c +++ b/hw/arm/armsse.c @@ -21,18 +21,35 @@ struct ARMSSEInfo { const char *name; int sram_banks; + int num_cpus; }; static const ARMSSEInfo armsse_variants[] = { { .name = TYPE_IOTKIT, .sram_banks = 1, + .num_cpus = 1, }, }; /* Clock frequency in HZ of the 32KHz "slow clock" */ #define S32KCLK (32 * 1000) +/* Is internal IRQ n shared between CPUs in a multi-core SSE ? */ +static bool irq_is_common[32] = { + [0 ... 5] = true, + /* 6, 7: per-CPU MHU interrupts */ + [8 ... 12] = true, + /* 13: per-CPU icache interrupt */ + /* 14: reserved */ + [15 ... 20] = true, + /* 21: reserved */ + [22 ... 26] = true, + /* 27: reserved */ + /* 28, 29: per-CPU CTI interrupts */ + /* 30, 31: reserved */ +}; + /* Create an alias region of @size bytes starting at @base * which mirrors the memory starting at @orig. */ @@ -125,13 +142,18 @@ static void armsse_init(Object *obj) int i; assert(info->sram_banks <= MAX_SRAM_BANKS); + assert(info->num_cpus <= SSE_MAX_CPUS); memory_region_init(&s->container, obj, "armsse-container", UINT64_MAX); - sysbus_init_child_obj(obj, "armv7m", &s->armv7m, sizeof(s->armv7m), - TYPE_ARMV7M); - qdev_prop_set_string(DEVICE(&s->armv7m), "cpu-type", - ARM_CPU_TYPE_NAME("cortex-m33")); + for (i = 0; i < info->num_cpus; i++) { + char *name = g_strdup_printf("armv7m%d", i); + sysbus_init_child_obj(obj, name, &s->armv7m[i], sizeof(s->armv7m), + TYPE_ARMV7M); + qdev_prop_set_string(DEVICE(&s->armv7m[i]), "cpu-type", + ARM_CPU_TYPE_NAME("cortex-m33")); + g_free(name); + } sysbus_init_child_obj(obj, "secctl", &s->secctl, sizeof(s->secctl), TYPE_IOTKIT_SECCTL); @@ -192,13 +214,25 @@ static void armsse_init(Object *obj) TYPE_SPLIT_IRQ, &error_abort, NULL); g_free(name); } + if (info->num_cpus > 1) { + for (i = 0; i < ARRAY_SIZE(s->cpu_irq_splitter); i++) { + if (irq_is_common[i]) { + char *name = g_strdup_printf("cpu-irq-splitter%d", i); + SplitIRQ *splitter = &s->cpu_irq_splitter[i]; + + object_initialize_child(obj, name, splitter, sizeof(*splitter), + TYPE_SPLIT_IRQ, &error_abort, NULL); + g_free(name); + } + } + } } static void armsse_exp_irq(void *opaque, int n, int level) { - ARMSSE *s = ARMSSE(opaque); + qemu_irq *irqarray = opaque; - qemu_set_irq(s->exp_irqs[n], level); + qemu_set_irq(irqarray[n], level); } static void armsse_mpcexp_status(void *opaque, int n, int level) @@ -207,6 +241,26 @@ static void armsse_mpcexp_status(void *opaque, int n, int level) qemu_set_irq(s->mpcexp_status_in[n], level); } +static qemu_irq armsse_get_common_irq_in(ARMSSE *s, int irqno) +{ + /* + * Return a qemu_irq which can be used to signal IRQ n to + * all CPUs in the SSE. + */ + ARMSSEClass *asc = ARMSSE_GET_CLASS(s); + const ARMSSEInfo *info = asc->info; + + assert(irq_is_common[irqno]); + + if (info->num_cpus == 1) { + /* Only one CPU -- just connect directly to it */ + return qdev_get_gpio_in(DEVICE(&s->armv7m[0]), irqno); + } else { + /* Connect to the splitter which feeds all CPUs */ + return qdev_get_gpio_in(DEVICE(&s->cpu_irq_splitter[irqno]), 0); + } +} + static void armsse_realize(DeviceState *dev, Error **errp) { ARMSSE *s = ARMSSE(dev); @@ -280,37 +334,105 @@ static void armsse_realize(DeviceState *dev, Error **errp) memory_region_add_subregion_overlap(&s->container, 0, s->board_memory, -1); - qdev_prop_set_uint32(DEVICE(&s->armv7m), "num-irq", s->exp_numirq + 32); - /* In real hardware the initial Secure VTOR is set from the INITSVTOR0 - * register in the IoT Kit System Control Register block, and the - * initial value of that is in turn specifiable by the FPGA that - * instantiates the IoT Kit. In QEMU we don't implement this wrinkle, - * and simply set the CPU's init-svtor to the IoT Kit default value. - */ - qdev_prop_set_uint32(DEVICE(&s->armv7m), "init-svtor", 0x10000000); - object_property_set_link(OBJECT(&s->armv7m), OBJECT(&s->container), - "memory", &err); - if (err) { - error_propagate(errp, err); - return; - } - object_property_set_link(OBJECT(&s->armv7m), OBJECT(s), "idau", &err); - if (err) { - error_propagate(errp, err); - return; - } - object_property_set_bool(OBJECT(&s->armv7m), true, "realized", &err); - if (err) { - error_propagate(errp, err); - return; + for (i = 0; i < info->num_cpus; i++) { + DeviceState *cpudev = DEVICE(&s->armv7m[i]); + Object *cpuobj = OBJECT(&s->armv7m[i]); + int j; + char *gpioname; + + qdev_prop_set_uint32(cpudev, "num-irq", s->exp_numirq + 32); + /* + * In real hardware the initial Secure VTOR is set from the INITSVTOR0 + * register in the IoT Kit System Control Register block, and the + * initial value of that is in turn specifiable by the FPGA that + * instantiates the IoT Kit. In QEMU we don't implement this wrinkle, + * and simply set the CPU's init-svtor to the IoT Kit default value. + * In SSE-200 the situation is similar, except that the default value + * is a reset-time signal input. Typically a board using the SSE-200 + * will have a system control processor whose boot firmware initializes + * the INITSVTOR* registers before powering up the CPUs in any case, + * so the hardware's default value doesn't matter. QEMU doesn't emulate + * the control processor, so instead we behave in the way that the + * firmware does. All boards currently known about have firmware that + * sets the INITSVTOR0 and INITSVTOR1 registers to 0x10000000, like the + * IoTKit default. We can make this more configurable if necessary. + */ + qdev_prop_set_uint32(cpudev, "init-svtor", 0x10000000); + /* + * Start all CPUs except CPU0 powered down. In real hardware it is + * a configurable property of the SSE-200 which CPUs start powered up + * (via the CPUWAIT0_RST and CPUWAIT1_RST parameters), but since all + * the boards we care about start CPU0 and leave CPU1 powered off, + * we hard-code that for now. We can add QOM properties for this + * later if necessary. + */ + if (i > 0) { + object_property_set_bool(cpuobj, true, "start-powered-off", &err); + if (err) { + error_propagate(errp, err); + return; + } + } + object_property_set_link(cpuobj, OBJECT(&s->container), "memory", &err); + if (err) { + error_propagate(errp, err); + return; + } + object_property_set_link(cpuobj, OBJECT(s), "idau", &err); + if (err) { + error_propagate(errp, err); + return; + } + object_property_set_bool(cpuobj, true, "realized", &err); + if (err) { + error_propagate(errp, err); + return; + } + + /* Connect EXP_IRQ/EXP_CPUn_IRQ GPIOs to the NVIC's lines 32 and up */ + s->exp_irqs[i] = g_new(qemu_irq, s->exp_numirq); + for (j = 0; j < s->exp_numirq; j++) { + s->exp_irqs[i][j] = qdev_get_gpio_in(cpudev, i + 32); + } + if (i == 0) { + gpioname = g_strdup("EXP_IRQ"); + } else { + gpioname = g_strdup_printf("EXP_CPU%d_IRQ", i); + } + qdev_init_gpio_in_named_with_opaque(dev, armsse_exp_irq, + s->exp_irqs[i], + gpioname, s->exp_numirq); + g_free(gpioname); } - /* Connect our EXP_IRQ GPIOs to the NVIC's lines 32 and up. */ - s->exp_irqs = g_new(qemu_irq, s->exp_numirq); - for (i = 0; i < s->exp_numirq; i++) { - s->exp_irqs[i] = qdev_get_gpio_in(DEVICE(&s->armv7m), i + 32); + /* Wire up the splitters that connect common IRQs to all CPUs */ + if (info->num_cpus > 1) { + for (i = 0; i < ARRAY_SIZE(s->cpu_irq_splitter); i++) { + if (irq_is_common[i]) { + Object *splitter = OBJECT(&s->cpu_irq_splitter[i]); + DeviceState *devs = DEVICE(splitter); + int cpunum; + + object_property_set_int(splitter, info->num_cpus, + "num-lines", &err); + if (err) { + error_propagate(errp, err); + return; + } + object_property_set_bool(splitter, true, "realized", &err); + if (err) { + error_propagate(errp, err); + return; + } + for (cpunum = 0; cpunum < info->num_cpus; cpunum++) { + DeviceState *cpudev = DEVICE(&s->armv7m[cpunum]); + + qdev_connect_gpio_out(devs, cpunum, + qdev_get_gpio_in(cpudev, i)); + } + } + } } - qdev_init_gpio_in_named(dev, armsse_exp_irq, "EXP_IRQ", s->exp_numirq); /* Set up the big aliases first */ make_alias(s, &s->alias1, "alias 1", 0x10000000, 0x10000000, 0x00000000); @@ -407,7 +529,7 @@ static void armsse_realize(DeviceState *dev, Error **errp) return; } qdev_connect_gpio_out(DEVICE(&s->mpc_irq_orgate), 0, - qdev_get_gpio_in(DEVICE(&s->armv7m), 9)); + armsse_get_common_irq_in(s, 9)); /* Devices behind APB PPC0: * 0x40000000: timer0 @@ -424,7 +546,7 @@ static void armsse_realize(DeviceState *dev, Error **errp) return; } sysbus_connect_irq(SYS_BUS_DEVICE(&s->timer0), 0, - qdev_get_gpio_in(DEVICE(&s->armv7m), 3)); + armsse_get_common_irq_in(s, 3)); mr = sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->timer0), 0); object_property_set_link(OBJECT(&s->apb_ppc0), OBJECT(mr), "port[0]", &err); if (err) { @@ -439,7 +561,7 @@ static void armsse_realize(DeviceState *dev, Error **errp) return; } sysbus_connect_irq(SYS_BUS_DEVICE(&s->timer1), 0, - qdev_get_gpio_in(DEVICE(&s->armv7m), 4)); + armsse_get_common_irq_in(s, 4)); mr = sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->timer1), 0); object_property_set_link(OBJECT(&s->apb_ppc0), OBJECT(mr), "port[1]", &err); if (err) { @@ -455,7 +577,7 @@ static void armsse_realize(DeviceState *dev, Error **errp) return; } sysbus_connect_irq(SYS_BUS_DEVICE(&s->dualtimer), 0, - qdev_get_gpio_in(DEVICE(&s->armv7m), 5)); + armsse_get_common_irq_in(s, 5)); mr = sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->dualtimer), 0); object_property_set_link(OBJECT(&s->apb_ppc0), OBJECT(mr), "port[2]", &err); if (err) { @@ -513,7 +635,7 @@ static void armsse_realize(DeviceState *dev, Error **errp) return; } qdev_connect_gpio_out(DEVICE(&s->ppc_irq_orgate), 0, - qdev_get_gpio_in(DEVICE(&s->armv7m), 10)); + armsse_get_common_irq_in(s, 10)); /* 0x40010000 .. 0x4001ffff: private CPU region: unused in IoTKit */ @@ -528,7 +650,7 @@ static void armsse_realize(DeviceState *dev, Error **errp) return; } sysbus_connect_irq(SYS_BUS_DEVICE(&s->s32ktimer), 0, - qdev_get_gpio_in(DEVICE(&s->armv7m), 2)); + armsse_get_common_irq_in(s, 2)); mr = sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->s32ktimer), 0); object_property_set_link(OBJECT(&s->apb_ppc1), OBJECT(mr), "port[0]", &err); if (err) { @@ -609,7 +731,7 @@ static void armsse_realize(DeviceState *dev, Error **errp) return; } sysbus_connect_irq(SYS_BUS_DEVICE(&s->nswatchdog), 0, - qdev_get_gpio_in(DEVICE(&s->armv7m), 1)); + armsse_get_common_irq_in(s, 1)); sysbus_mmio_map(SYS_BUS_DEVICE(&s->nswatchdog), 0, 0x40081000); qdev_prop_set_uint32(DEVICE(&s->swatchdog), "wdogclk-frq", s->mainclk_frq); @@ -715,7 +837,7 @@ static void armsse_realize(DeviceState *dev, Error **errp) qdev_pass_gpios(dev_secctl, dev, "mscexp_clear"); qdev_pass_gpios(dev_secctl, dev, "mscexp_ns"); qdev_connect_gpio_out_named(dev_secctl, "msc_irq", 0, - qdev_get_gpio_in(DEVICE(&s->armv7m), 11)); + armsse_get_common_irq_in(s, 11)); /* * Expose our container region to the board model; this corresponds From patchwork Mon Jan 21 18:51:07 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 156240 Delivered-To: patches@linaro.org Received: by 2002:a02:48:0:0:0:0:0 with SMTP id 69csp6701117jaa; Mon, 21 Jan 2019 10:51:34 -0800 (PST) X-Received: by 2002:a5d:6647:: with SMTP id f7mr29228867wrw.225.1548096694738; Mon, 21 Jan 2019 10:51:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548096694; cv=none; d=google.com; s=arc-20160816; b=Kc++mFu7jdbnVkB+lrauEgKeQrFednBHC6xIJ3ybD/wzvSbe79rfNUp/NGw+Yj7/2i n6ga0Ohwm5iDih+mcwC6rwHgE8FcCHZehg7yEB3+VcDoS8pKHEN/0JFDQvVk8UM4ZM4q NuXu5RnTeY7rsOm/cPj9Fp141qf36kVkoSi6PtUfbNTAPj+pGCrg2sRZZG1EAa5M/+RW 9QYO2CbKR8YVgUAEg/32aYqrPLRi9yjX5CuVvCEMUWD0WVS1xUTT0odpsOxlmm2JP4/g imy7E5+0CFsNz0i3Nbvy0IHnVamK7amgPn8QDJjgg6fu+AlyosNYLJHd37bciflRccjZ KYMw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=hxN9w6vB/LiDEV5gzGDXQH/dDiAcrkx41p69PfQpSas=; b=u0i7lrNYq1HmzvrIqJACpeGzI9T+DAdplHcZ77Y0tCYQXpelLameS/j7eR2BOqFQFi dhuPsez2Iv5ujgKFb1tWvHF8fcxx2C4JuUXSw6Ezw3K1ouhw4qNNpuMg64r1a4U2tudY 5kFCzVDq65xvbkJ5tH2iqj7XkfDApb0m/fNuwZFqTU3RDT+oRmaXXYbnzQ6DYLY7/84g R6Qonb4YvIvWUJxkJUJR32nmglLLFB4NQF4yt61v/3JZWYrLzNiFf2e/HXtFfUu5y6Ey NDXj/jAXnxDfhKDYC3t86ByoRVzyJ38jAAj8igD9Ep4Ek9Rr2nmYjArutoQGr3Pdkg8N hMDA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=czH42x5G; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id r126sor21573702wmf.22.2019.01.21.10.51.34 for (Google Transport Security); Mon, 21 Jan 2019 10:51:34 -0800 (PST) Received-SPF: pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) client-ip=209.85.220.65; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=czH42x5G; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=hxN9w6vB/LiDEV5gzGDXQH/dDiAcrkx41p69PfQpSas=; b=czH42x5GG7hu82urZ1qyzXtX0PdCCEGBdww4vSZWEk9jkvtCRhQaIcvOupgjxp8P9o H8TDD10vorRCkBfzamXuZjCt0SbF3jT9NifOw9nnqbbxXJJeaAKHioQbjDVlhaqokLs4 lntdSHJc1OwoFJzZfgv57zVRJPva8RG0DQTMk= 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:mime-version:content-transfer-encoding; bh=hxN9w6vB/LiDEV5gzGDXQH/dDiAcrkx41p69PfQpSas=; b=nP4DssWnF3daXlTJA+2pI/btxI3q/9cigoYtxE3O/mqF5oFyFQKfRx0gWZe7zWDw8l 70TKTIC6CKESSdnix7SCjsCOVXW5AqDl+iNTGAPzuUes8Dit+mE4yQfIMCakRuGNJ9p6 05e5q7108APtbrEM0FbY2Y8KtVQitEj785kY7ISS46IVtM9QfJvJfgHthb4q1mNnZxBj 9FxUnJKBG7G8GmvsCHdgTFjRVg+PFGg/xY7YWOSyioWLwu4E8DBssaNiCWefRhUslcDu PZMOtVnE4B5qc/29hu5TRa8RS4V1U5cO9VXXzU8O7FOpsLCuqO4rncslUSD3loo+v/qi C+xQ== X-Gm-Message-State: AJcUukcnp5B2qmdB6dFyl0UF0YczkQjRdaJIFXgPBnsoEDoyhcKqOzNL YIPrjVZ+dRmn8B7lODNDIGI+IXg4 X-Google-Smtp-Source: ALg8bN4VYlkN4p7M6UFf+/LAA/xBTHibRlpkM1eL9pbPZw+s+GfC8iN97d+qsaH1j7EnsEvwvQlWmA== X-Received: by 2002:a1c:bd86:: with SMTP id n128mr588135wmf.22.1548096694400; Mon, 21 Jan 2019 10:51:34 -0800 (PST) Return-Path: Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id n82sm50386660wma.42.2019.01.21.10.51.33 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 21 Jan 2019 10:51:33 -0800 (PST) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Cc: patches@linaro.org Subject: [PATCH 12/23] hw/arm/armsse: Give each CPU its own view of memory Date: Mon, 21 Jan 2019 18:51:07 +0000 Message-Id: <20190121185118.18550-13-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190121185118.18550-1-peter.maydell@linaro.org> References: <20190121185118.18550-1-peter.maydell@linaro.org> MIME-Version: 1.0 Give each CPU its own container memory region. This is necessary for two reasons: * some devices are instantiated one per CPU and the CPU sees only its own device * since a memory region can only be put into one container, we must give each armv7m object a different MemoryRegion as its 'memory' property, or a dual-CPU configuration will assert on realize when the second armv7m object tries to put the MR into a container when it is already in the first armv7m object's container Signed-off-by: Peter Maydell --- include/hw/arm/armsse.h | 10 ++++++++++ hw/arm/armsse.c | 22 ++++++++++++++++++++-- 2 files changed, 30 insertions(+), 2 deletions(-) -- 2.20.1 Reviewed-by: Richard Henderson diff --git a/include/hw/arm/armsse.h b/include/hw/arm/armsse.h index faf5dfed252..89f19a971f4 100644 --- a/include/hw/arm/armsse.h +++ b/include/hw/arm/armsse.h @@ -135,7 +135,17 @@ typedef struct ARMSSE { IoTKitSysCtl sysctl; IoTKitSysCtl sysinfo; + /* + * 'container' holds all devices seen by all CPUs. + * 'cpu_container[i]' is the view that CPU i has: this has the + * per-CPU devices of that CPU, plus as the background 'container' + * (or an alias of it, since we can only use it directly once). + * container_alias[i] is the alias of 'container' used by CPU i+1; + * CPU 0 can use 'container' directly. + */ MemoryRegion container; + MemoryRegion container_alias[SSE_MAX_CPUS - 1]; + MemoryRegion cpu_container[SSE_MAX_CPUS]; MemoryRegion alias1; MemoryRegion alias2; MemoryRegion alias3; diff --git a/hw/arm/armsse.c b/hw/arm/armsse.c index 5cb2b78b1fc..2472dfef3a1 100644 --- a/hw/arm/armsse.c +++ b/hw/arm/armsse.c @@ -153,6 +153,15 @@ static void armsse_init(Object *obj) qdev_prop_set_string(DEVICE(&s->armv7m[i]), "cpu-type", ARM_CPU_TYPE_NAME("cortex-m33")); g_free(name); + name = g_strdup_printf("arm-sse-cpu-container%d", i); + memory_region_init(&s->cpu_container[i], obj, name, UINT64_MAX); + g_free(name); + if (i > 0) { + name = g_strdup_printf("arm-sse-container-alias%d", i); + memory_region_init_alias(&s->container_alias[i - 1], obj, + name, &s->container, 0, UINT64_MAX); + g_free(name); + } } sysbus_init_child_obj(obj, "secctl", &s->secctl, sizeof(s->secctl), @@ -332,7 +341,7 @@ static void armsse_realize(DeviceState *dev, Error **errp) * 0x50000000..0x5fffffff alias of 0x40000000..0x4fffffff */ - memory_region_add_subregion_overlap(&s->container, 0, s->board_memory, -1); + memory_region_add_subregion_overlap(&s->container, 0, s->board_memory, -2); for (i = 0; i < info->num_cpus; i++) { DeviceState *cpudev = DEVICE(&s->armv7m[i]); @@ -373,7 +382,16 @@ static void armsse_realize(DeviceState *dev, Error **errp) return; } } - object_property_set_link(cpuobj, OBJECT(&s->container), "memory", &err); + + if (i > 0) { + memory_region_add_subregion_overlap(&s->cpu_container[i], 0, + &s->container_alias[i - 1], -1); + } else { + memory_region_add_subregion_overlap(&s->cpu_container[i], 0, + &s->container, -1); + } + object_property_set_link(cpuobj, OBJECT(&s->cpu_container[i]), + "memory", &err); if (err) { error_propagate(errp, err); return; From patchwork Mon Jan 21 18:51:08 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 156241 Delivered-To: patches@linaro.org Received: by 2002:a02:48:0:0:0:0:0 with SMTP id 69csp6701145jaa; Mon, 21 Jan 2019 10:51:36 -0800 (PST) X-Received: by 2002:a1c:7616:: with SMTP id r22mr554065wmc.35.1548096696184; Mon, 21 Jan 2019 10:51:36 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548096696; cv=none; d=google.com; s=arc-20160816; b=wh96a2thbIxxDdNAMF0W8EfBhAfjKXgHaGBnpV1pC21f32q9vixsyRfCEYL7FJPXQ9 ju2SWnpGOOB2behHxQEgYW2Og+8BG00XjvuK750wUFjY2gLWoF21c5r5KBLGKy6AoHNr Ko7EH+W0E8qD2xJ5L2Ul2jFlH4P8zU5927+K7+ymXfXm/2ZD/vR/RpLbdmGuzqKX4Z0X phBPSztweSO6eVmi/OI9K9gt1hnLzDo5fyjTJdMv8crRJtHYmzSxjidkw3mHNrU5QeCu LyfM+owZmp4Kb33yHidClhHH+Mp9i257ccQ3cvSIrh/93xeCaV+3rxDpd/T2XdbF3RlK +Oag== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=e/n/E9zIC87pmNrtpyul6OlAohOOfM09CA6XexX2VVY=; b=KBvYFdvxHL8F4dOIsDtsgfLnFeM5dzIke0kjH4VxFIEaWHLm7QfmX87ts+qyuXjJjo goXdNnzmbRk6ihrDxEap5jZE6pMWTFHrsECPaxTHl7ErF8bDlj/fLMrO+pKQ+2L61V20 TlbwGUqgcgRIKJKc8Hy9KJQPpNq2pg3MiR9j5SqCXcmOlBquuDPtniyJHsLCIpzSveD/ skdyDDFypOFroooXySknH/UCHFY2bIzx1UZFUcLlgK58tdTsz1RKCGWJHoSYWZ8U8PKV ETs0sr4OAjE8vl7KrkgS06tSOasf01ji9MERlXMgvZBhTqvYS7yGbtksyq0rBjmzhD2n K7mw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=fJcrt2ee; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id y132sor31112776wmc.28.2019.01.21.10.51.36 for (Google Transport Security); Mon, 21 Jan 2019 10:51:36 -0800 (PST) Received-SPF: pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) client-ip=209.85.220.65; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=fJcrt2ee; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=e/n/E9zIC87pmNrtpyul6OlAohOOfM09CA6XexX2VVY=; b=fJcrt2ee0cMoAYCl8VUBXDczHAbuDqtq7DELrUDquPqh7qPmJ/FmOgv6miS2LibFPa etUHy1h3HjFArQw7XTQwd0BFmHyfj9p8JPN61KDaq1FdK3aQ/QvoFU1FMsmuvB8kf6xm ASaLu9/85WEhGFmlgaAJTIevTxY1ySu+LmWtY= 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:mime-version:content-transfer-encoding; bh=e/n/E9zIC87pmNrtpyul6OlAohOOfM09CA6XexX2VVY=; b=pXwFQtB4cHPs5n0nM/QTz1cFDpgSqSpozpowKJRsFWrDPiiZdvW3zjElvVMQzV49xx e1A4Kd/A8K6nivJBpKZ9eVvlSDOGHhm7TsvC3q1lkeu58CQHU2VEvj+i0hTOROr+hyuY WuV4aWK9faTR9SqjRXuscrpSSMoy5C+w/enGgnml/RHOpYkeQwROeJfs1pjqCNqlpqXN lU6ef5JtMi3efMos9jG6gw+siQHOixB3Pkq083BI46ZguiQwjUcrbp6d3lYAPaGUIeNg C1O30wu2Ej0jhemt3nv4t3hb5itSmdjFgOX2vc3rsHN1ePAC57hipWGFIM+fqy7qs5cD Vbvw== X-Gm-Message-State: AJcUukcFJ4fRFUi8QWGNyg/NOneqeJZIvAkyjxfUeNbo+KoBvvXDUfcd epuB6gcsJJwUM79VeBfL/MYRnmxj X-Google-Smtp-Source: ALg8bN7az6jkgFRO/wP9chzZj7eYZlRhd20Ob/GgkSE1WlLYU/JJkv2KpZPCQO5MZ5o6NZGkO7ejJw== X-Received: by 2002:a1c:ca15:: with SMTP id a21mr532240wmg.132.1548096695764; Mon, 21 Jan 2019 10:51:35 -0800 (PST) Return-Path: Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id n82sm50386660wma.42.2019.01.21.10.51.34 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 21 Jan 2019 10:51:34 -0800 (PST) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Cc: patches@linaro.org Subject: [PATCH 13/23] hw/arm/armsse: Put each CPU in its own cluster object Date: Mon, 21 Jan 2019 18:51:08 +0000 Message-Id: <20190121185118.18550-14-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190121185118.18550-1-peter.maydell@linaro.org> References: <20190121185118.18550-1-peter.maydell@linaro.org> MIME-Version: 1.0 Create a cluster object to hold each CPU in the SSE. They are logically distinct and may be configured differently (for instance one may not have an FPU where the other does). Signed-off-by: Peter Maydell --- include/hw/arm/armsse.h | 2 ++ hw/arm/armsse.c | 31 ++++++++++++++++++++++++++++--- 2 files changed, 30 insertions(+), 3 deletions(-) -- 2.20.1 Reviewed-by: Richard Henderson diff --git a/include/hw/arm/armsse.h b/include/hw/arm/armsse.h index 89f19a971f4..999c2e4f7e5 100644 --- a/include/hw/arm/armsse.h +++ b/include/hw/arm/armsse.h @@ -80,6 +80,7 @@ #include "hw/misc/iotkit-sysinfo.h" #include "hw/or-irq.h" #include "hw/core/split-irq.h" +#include "hw/cpu/cluster.h" #define TYPE_ARMSSE "arm-sse" #define ARMSSE(obj) OBJECT_CHECK(ARMSSE, (obj), TYPE_ARMSSE) @@ -110,6 +111,7 @@ typedef struct ARMSSE { /*< public >*/ ARMv7MState armv7m[SSE_MAX_CPUS]; + CPUClusterState cluster[SSE_MAX_CPUS]; IoTKitSecCtl secctl; TZPPC apb_ppc0; TZPPC apb_ppc1; diff --git a/hw/arm/armsse.c b/hw/arm/armsse.c index 2472dfef3a1..2eb4ea3bfe0 100644 --- a/hw/arm/armsse.c +++ b/hw/arm/armsse.c @@ -147,9 +147,22 @@ static void armsse_init(Object *obj) memory_region_init(&s->container, obj, "armsse-container", UINT64_MAX); for (i = 0; i < info->num_cpus; i++) { - char *name = g_strdup_printf("armv7m%d", i); - sysbus_init_child_obj(obj, name, &s->armv7m[i], sizeof(s->armv7m), - TYPE_ARMV7M); + /* + * We put each CPU in its own cluster as they are logically + * distinct and may be configured differently. + */ + char *name; + + name = g_strdup_printf("cluster%d", i); + object_initialize_child(obj, name, &s->cluster[i], + sizeof(s->cluster[i]), TYPE_CPU_CLUSTER, + &error_abort, NULL); + qdev_prop_set_uint32(DEVICE(&s->cluster[i]), "cluster-id", i); + g_free(name); + + name = g_strdup_printf("armv7m%d", i); + sysbus_init_child_obj(OBJECT(&s->cluster[i]), name, + &s->armv7m[i], sizeof(s->armv7m), TYPE_ARMV7M); qdev_prop_set_string(DEVICE(&s->armv7m[i]), "cpu-type", ARM_CPU_TYPE_NAME("cortex-m33")); g_free(name); @@ -406,6 +419,18 @@ static void armsse_realize(DeviceState *dev, Error **errp) error_propagate(errp, err); return; } + /* + * The cluster must be realized after the armv7m container, as + * the container's CPU object is only created on realize, and the + * CPU must exist and have been parented into the cluster before + * the cluster is realized. + */ + object_property_set_bool(OBJECT(&s->cluster[i]), + true, "realized", &err); + if (err) { + error_propagate(errp, err); + return; + } /* Connect EXP_IRQ/EXP_CPUn_IRQ GPIOs to the NVIC's lines 32 and up */ s->exp_irqs[i] = g_new(qemu_irq, s->exp_numirq); From patchwork Mon Jan 21 18:51:09 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 156242 Delivered-To: patches@linaro.org Received: by 2002:a02:48:0:0:0:0:0 with SMTP id 69csp6701165jaa; Mon, 21 Jan 2019 10:51:37 -0800 (PST) X-Received: by 2002:a5d:6a42:: with SMTP id t2mr31595998wrw.50.1548096697345; Mon, 21 Jan 2019 10:51:37 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548096697; cv=none; d=google.com; s=arc-20160816; b=E9AcfNoyqmME4HxkG3+AxTcfzM2cOvaYVC6sJBQHyIXKvS85UItR4QqcAIwTxWUydc An05uc4BsgBArvpgKvPJcC59KP5KsTtKq7Vgzh579BLusnbkGAOh2HLX9OjhY1Hzmeqc wfi4Lui2V24gtskRXG4O7Jiiolp3r+GUXDPjR9QA4Pii2buo7w8OBj0WFSxVg1JNnG6/ 15WkpYOvGN4eREO9mjtYGf90fqGeyC0a0rDSj6vs3xDcxbVlPatgK5R78abLyswP+sfN hqI6NnS0G0Lj3nNNis9QQ/wcpUfpOKy9uCqFDYla2RY4pnNz+24m0AYR8NpBvw0krfF2 20ow== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=VmHuIRIe0slMKOXr+14HFfLZdXo4lblxIN5l7d3ILAc=; b=Rwr8P8+EKacEVfBBp4L2XipNJU3v1bq8TNPiP+Qf6zIom8Xbau2sNZL84VnQ5AyO3g 4amoTjVNIm8zXKRp8UoN+oMI5iuXAH3d11H4hg6gm02grN62acos4kgICYqm60aIAEi8 RreSwZM4BIdfeqYGyIt523v0dJHPLOLc6iOp1R8vpzgUQidwJSxh2sAxsnqDhl4r3vM6 4t8gzouwcJV750s7yALLcAwBP1Fv9iEZ3MSeOpQ84MA9LygcS9fGkUHVq/ojzUpjFya3 LdHZzXFhRb2+q5YWAMJKk1zo3gk56JzDw2/P4/zwHalVNVm7kx/G9Lnog0Ft0L4AuTKI ywew== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=SesOGL77; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id r124sor5810329wma.0.2019.01.21.10.51.37 for (Google Transport Security); Mon, 21 Jan 2019 10:51:37 -0800 (PST) Received-SPF: pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) client-ip=209.85.220.65; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=SesOGL77; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=VmHuIRIe0slMKOXr+14HFfLZdXo4lblxIN5l7d3ILAc=; b=SesOGL775fsc9/86PZIQVXi1iJ6ymEgeMQdsTAHfJr1xh8SHO19KzSSu3eNIUYmhts 01un4Q/lXFCf9G2YD66HKEQJKS8AqvREwmM/9i4cnnrnHsyQZ4UobZgM4vztejm7fjtM /a6c8+/FvgP1E1hpF9FmIdF+JD8Rkl3Xx+jcE= 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:mime-version:content-transfer-encoding; bh=VmHuIRIe0slMKOXr+14HFfLZdXo4lblxIN5l7d3ILAc=; b=SF19x7ZKQpt6TEzWOlFOCGkJihBGxjdV9Waan0kRCmE6TgoLC8nRMMd8m62r/mlnrj ZzGzUCxlhqYkR1h2MepxfuWpiS1LsRW/wa9B72nmcFFhMFANrpAgOHdslS7ltXXx8FRE 0CZ7d+dBHsTRDEhMkmCS/ILd2myvL4mmFfgJ5wPUvyZHdTC1a0q8IHRPThbsVrQcWaHk daQqDpcQICky6kI8dssAOcrdEKGEVoJ7U/hybK02cYbUAENq3dUsGAFwlV5qHp3m9NqT sL0WbaXOzHsKFs9GrJPkuMjF+/brjCCAA5K78b3y2gyDeeidykKyc4jJXPqVUjhcfsI5 lN0A== X-Gm-Message-State: AJcUukcDxN9I5iaVzIaODXvQS9pbrDNUhTNNoH+rgeZdbuVar8H+B+bs fvS2vfQ/DD9bzwNw4+tdyV5zCIvZZ2Gh3YCd X-Google-Smtp-Source: ALg8bN4SD6VtGPSe4qgq4pF/Twajt18eftHA/2OLSmOKYgGv6s48F39+LHzsyvNXAQooSX8z3h/Sag== X-Received: by 2002:a1c:cf0d:: with SMTP id f13mr559540wmg.70.1548096696872; Mon, 21 Jan 2019 10:51:36 -0800 (PST) Return-Path: Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id n82sm50386660wma.42.2019.01.21.10.51.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 21 Jan 2019 10:51:36 -0800 (PST) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Cc: patches@linaro.org Subject: [PATCH 14/23] iotkit-sysinfo: Make SYS_VERSION and SYS_CONFIG configurable Date: Mon, 21 Jan 2019 18:51:09 +0000 Message-Id: <20190121185118.18550-15-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190121185118.18550-1-peter.maydell@linaro.org> References: <20190121185118.18550-1-peter.maydell@linaro.org> MIME-Version: 1.0 The SYS_VERSION and SYS_CONFIG register values differ between the IoTKit and SSE-200. Make them configurable via QOM properties rather than hard-coded, and set them appropriately in the ARMSSE code that instantiates the IOTKIT_SYSINFO device. Signed-off-by: Peter Maydell --- include/hw/misc/iotkit-sysinfo.h | 6 ++++ hw/arm/armsse.c | 51 ++++++++++++++++++++++++++++++++ hw/misc/iotkit-sysinfo.c | 15 ++++++++-- 3 files changed, 70 insertions(+), 2 deletions(-) -- 2.20.1 Reviewed-by: Richard Henderson diff --git a/include/hw/misc/iotkit-sysinfo.h b/include/hw/misc/iotkit-sysinfo.h index 7b2e1a5e48b..d84eb203b90 100644 --- a/include/hw/misc/iotkit-sysinfo.h +++ b/include/hw/misc/iotkit-sysinfo.h @@ -14,6 +14,8 @@ * Arm IoTKit and documented in * http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ecm0601256/index.html * QEMU interface: + * + QOM property "SYS_VERSION": value to use for SYS_VERSION register + * + QOM property "SYS_CONFIG": value to use for SYS_CONFIG register * + sysbus MMIO region 0: the system information register bank */ @@ -32,6 +34,10 @@ typedef struct IoTKitSysInfo { /*< public >*/ MemoryRegion iomem; + + /* Properties */ + uint32_t sys_version; + uint32_t sys_config; } IoTKitSysInfo; #endif diff --git a/hw/arm/armsse.c b/hw/arm/armsse.c index 2eb4ea3bfe0..19cae77e770 100644 --- a/hw/arm/armsse.c +++ b/hw/arm/armsse.c @@ -18,10 +18,18 @@ #include "hw/arm/armsse.h" #include "hw/arm/arm.h" +/* Format of the System Information block SYS_CONFIG register */ +typedef enum SysConfigFormat { + IoTKitFormat, + SSE200Format, +} SysConfigFormat; + struct ARMSSEInfo { const char *name; int sram_banks; int num_cpus; + uint32_t sys_version; + SysConfigFormat sys_config_format; }; static const ARMSSEInfo armsse_variants[] = { @@ -29,9 +37,39 @@ static const ARMSSEInfo armsse_variants[] = { .name = TYPE_IOTKIT, .sram_banks = 1, .num_cpus = 1, + .sys_version = 0x41743, + .sys_config_format = IoTKitFormat, }, }; +static uint32_t armsse_sys_config_value(ARMSSE *s, const ARMSSEInfo *info) +{ + /* Return the SYS_CONFIG value for this SSE */ + uint32_t sys_config; + + switch (info->sys_config_format) { + case IoTKitFormat: + sys_config = 0; + sys_config = deposit32(sys_config, 0, 4, info->sram_banks); + sys_config = deposit32(sys_config, 4, 4, s->sram_addr_width - 12); + break; + case SSE200Format: + sys_config = 0; + sys_config = deposit32(sys_config, 0, 4, info->sram_banks); + sys_config = deposit32(sys_config, 4, 5, s->sram_addr_width); + sys_config = deposit32(sys_config, 24, 4, 2); + if (info->num_cpus > 1) { + sys_config = deposit32(sys_config, 10, 1, 1); + sys_config = deposit32(sys_config, 20, 4, info->sram_banks - 1); + sys_config = deposit32(sys_config, 28, 4, 2); + } + break; + default: + g_assert_not_reached(); + } + return sys_config; +} + /* Clock frequency in HZ of the 32KHz "slow clock" */ #define S32KCLK (32 * 1000) @@ -726,6 +764,19 @@ static void armsse_realize(DeviceState *dev, Error **errp) qdev_get_gpio_in_named(dev_apb_ppc1, "cfg_sec_resp", 0)); + object_property_set_int(OBJECT(&s->sysinfo), info->sys_version, + "SYS_VERSION", &err); + if (err) { + error_propagate(errp, err); + return; + } + object_property_set_int(OBJECT(&s->sysinfo), + armsse_sys_config_value(s, info), + "SYS_CONFIG", &err); + if (err) { + error_propagate(errp, err); + return; + } object_property_set_bool(OBJECT(&s->sysinfo), true, "realized", &err); if (err) { error_propagate(errp, err); diff --git a/hw/misc/iotkit-sysinfo.c b/hw/misc/iotkit-sysinfo.c index 78955bc45f5..026ba942613 100644 --- a/hw/misc/iotkit-sysinfo.c +++ b/hw/misc/iotkit-sysinfo.c @@ -51,15 +51,16 @@ static const int sysinfo_id[] = { static uint64_t iotkit_sysinfo_read(void *opaque, hwaddr offset, unsigned size) { + IoTKitSysInfo *s = IOTKIT_SYSINFO(opaque); uint64_t r; switch (offset) { case A_SYS_VERSION: - r = 0x41743; + r = s->sys_version; break; case A_SYS_CONFIG: - r = 0x31; + r = s->sys_config; break; case A_PID4 ... A_CID3: r = sysinfo_id[(offset - A_PID4) / 4]; @@ -94,6 +95,12 @@ static const MemoryRegionOps iotkit_sysinfo_ops = { .valid.max_access_size = 4, }; +static Property iotkit_sysinfo_props[] = { + DEFINE_PROP_UINT32("SYS_VERSION", IoTKitSysInfo, sys_version, 0), + DEFINE_PROP_UINT32("SYS_CONFIG", IoTKitSysInfo, sys_config, 0), + DEFINE_PROP_END_OF_LIST() +}; + static void iotkit_sysinfo_init(Object *obj) { SysBusDevice *sbd = SYS_BUS_DEVICE(obj); @@ -106,10 +113,14 @@ static void iotkit_sysinfo_init(Object *obj) static void iotkit_sysinfo_class_init(ObjectClass *klass, void *data) { + DeviceClass *dc = DEVICE_CLASS(klass); + /* * This device has no guest-modifiable state and so it * does not need a reset function or VMState. */ + + dc->props = iotkit_sysinfo_props; } static const TypeInfo iotkit_sysinfo_info = { From patchwork Mon Jan 21 18:51:10 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 156243 Delivered-To: patches@linaro.org Received: by 2002:a02:48:0:0:0:0:0 with SMTP id 69csp6701182jaa; Mon, 21 Jan 2019 10:51:38 -0800 (PST) X-Received: by 2002:a5d:6152:: with SMTP id y18mr30941818wrt.141.1548096698374; Mon, 21 Jan 2019 10:51:38 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548096698; cv=none; d=google.com; s=arc-20160816; b=qr17hHZHgUsxjTSthCW2C2fCnSh5vNvttrlLMO3kS1YlAJ+EpqXIa7Ohkck/GYKKC7 NlfeaIGdxha1Df0q9BKeQh6Z+Xw7mhRKSk6bPEsBHHUoAGwOgMRYdsb4y3vdFeAqFTbJ sesWYqjMDaDLGdXhChnn7Jnq8AReocSt3LDOrJcaEATlSbxMuA18KZrVdSIy8PAunlgz NiILR4nSzfxBIzFPBr8yUvgAoVmoiUb5qyduwxLq70GT9ZyRBNcBxjjek3qtK1oMbs7H TwWTFneDkGSI642tL3q3jVFf/OQeL/r36l98pR7ku/lc+xgWxSb0oaU3ttGW/htjVHCX jg4A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=6dJlwUKV/mqO+LXLnxltTP2TIDBTQAdk8nXHap2RUUY=; b=LDNbfKYvp9AP8lFH2P/ksgVbIlgkJSsyPBaGiamG3cMnYgklH+4xwflEHvHf2k3fP0 OFWRqtllyva+ovHz2A+AVvupQQ9gx/WDVOPtC4Xg0uH8OFcQi98CrFTO4gFgUx9sISVE mdK3c8RS9eh2ZepJFXHlz4WRgwYtvoGHIJKhdVhKirFKncLYw1wQ3yx8dPLhDTCgxd4t AftdxCwIxKXDfbEETD+4EJNMIbmiq8YoVkm2h/KjaXXD3sJGPT/H2/zh5JEXEauSPBRh 4ztq4oPcq9x+Z+IdHhF5FTPAhHTAFXodlvoD8Hjxg/+ciGfsXE/BZCvF3e1F4VbjHPFr ih+A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=SAD5tiJY; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id y197sor32343171wmd.29.2019.01.21.10.51.38 for (Google Transport Security); Mon, 21 Jan 2019 10:51:38 -0800 (PST) Received-SPF: pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) client-ip=209.85.220.65; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=SAD5tiJY; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=6dJlwUKV/mqO+LXLnxltTP2TIDBTQAdk8nXHap2RUUY=; b=SAD5tiJYu6GshOFt06OOesXbZzTo7uSnbOUYUPP6hioR7NUflBeSy72YkIuyrwN7oX aLQuXcQhe+ZMXQfxHe50YOXIq3qbei+/aVge2SxWMv7fEOg+ZqoeT/h18L2PM4D6aSfa nI9sisNjgTfbfI3NdCCJl6IPaOOHRZbEp5pXE= 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:mime-version:content-transfer-encoding; bh=6dJlwUKV/mqO+LXLnxltTP2TIDBTQAdk8nXHap2RUUY=; b=pkM3aSp1Nxdi0vHs9XJakqbkAN9KeJ5Sc37PIbJm+ABGXhx9PMIkDEhPNX+5o/Jyli Nuc/BazMafTfQF//4QhpESQAasK4uXOJcCSIFOCKoqYVkUCZ0vw6yKiWUFtEvSZMjn1r NH4Cj2e8LLy24uhEBg1Z2aureSfC3fPidnCBIovQrIEn1W0iqeHgqyS4Ot7PBpun2Qhh y0K+OgLr1k+7PrvJ2kvcL3QdZlj9V6WAVEic4YF/1YfY4flaJOggGnl2ue+ZVs4jucCr 6c9YWbLuObDyYORL1VGJjaj2nHHG8ZZbgixKwR5CrXUMa4qq8MX/69XYNbpBbS2pxRj7 gQ8Q== X-Gm-Message-State: AJcUukdbeKZdO7h3q+H/XnA8Vk6euERTeilYrx6pJuVw+0MIHaZZfJ8N 4GzyBjnv62L1zq1/Bso8lSGDqJ2xeXVnZxCz X-Google-Smtp-Source: ALg8bN69OhaQokesDM5SCBqVsqokbgk72zS9fwThEkrY6Fk4Rlf0+5CQP+AsJabJCXcsAqoh57ocjg== X-Received: by 2002:a1c:4807:: with SMTP id v7mr555289wma.53.1548096697933; Mon, 21 Jan 2019 10:51:37 -0800 (PST) Return-Path: Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id n82sm50386660wma.42.2019.01.21.10.51.36 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 21 Jan 2019 10:51:37 -0800 (PST) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Cc: patches@linaro.org Subject: [PATCH 15/23] hw/arm/armsse: Add unimplemented-device stubs for MHUs Date: Mon, 21 Jan 2019 18:51:10 +0000 Message-Id: <20190121185118.18550-16-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190121185118.18550-1-peter.maydell@linaro.org> References: <20190121185118.18550-1-peter.maydell@linaro.org> MIME-Version: 1.0 The SSE-200 has two Message Handling Units (MHUs), which sit behind the APB PPC0. Wire up some unimplemented-device stubs for these, since we don't yet implement a real model of this device. Signed-off-by: Peter Maydell --- include/hw/arm/armsse.h | 3 +++ hw/arm/armsse.c | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) -- 2.20.1 Reviewed-by: Richard Henderson diff --git a/include/hw/arm/armsse.h b/include/hw/arm/armsse.h index 999c2e4f7e5..dbfcb280605 100644 --- a/include/hw/arm/armsse.h +++ b/include/hw/arm/armsse.h @@ -78,6 +78,7 @@ #include "hw/watchdog/cmsdk-apb-watchdog.h" #include "hw/misc/iotkit-sysctl.h" #include "hw/misc/iotkit-sysinfo.h" +#include "hw/misc/unimp.h" #include "hw/or-irq.h" #include "hw/core/split-irq.h" #include "hw/cpu/cluster.h" @@ -137,6 +138,8 @@ typedef struct ARMSSE { IoTKitSysCtl sysctl; IoTKitSysCtl sysinfo; + UnimplementedDeviceState mhu[2]; + /* * 'container' holds all devices seen by all CPUs. * 'cpu_container[i]' is the view that CPU i has: this has the diff --git a/hw/arm/armsse.c b/hw/arm/armsse.c index 19cae77e770..1f3dc89c8e8 100644 --- a/hw/arm/armsse.c +++ b/hw/arm/armsse.c @@ -30,6 +30,7 @@ struct ARMSSEInfo { int num_cpus; uint32_t sys_version; SysConfigFormat sys_config_format; + bool has_mhus; }; static const ARMSSEInfo armsse_variants[] = { @@ -39,6 +40,7 @@ static const ARMSSEInfo armsse_variants[] = { .num_cpus = 1, .sys_version = 0x41743, .sys_config_format = IoTKitFormat, + .has_mhus = false, }, }; @@ -257,6 +259,12 @@ static void armsse_init(Object *obj) sizeof(s->sysctl), TYPE_IOTKIT_SYSCTL); sysbus_init_child_obj(obj, "armsse-sysinfo", &s->sysinfo, sizeof(s->sysinfo), TYPE_IOTKIT_SYSINFO); + if (info->has_mhus) { + sysbus_init_child_obj(obj, "mhu0", &s->mhu[0], sizeof(s->mhu[0]), + TYPE_UNIMPLEMENTED_DEVICE); + sysbus_init_child_obj(obj, "mhu1", &s->mhu[1], sizeof(s->mhu[1]), + TYPE_UNIMPLEMENTED_DEVICE); + } object_initialize_child(obj, "nmi-orgate", &s->nmi_orgate, sizeof(s->nmi_orgate), TYPE_OR_IRQ, &error_abort, NULL); @@ -616,6 +624,8 @@ static void armsse_realize(DeviceState *dev, Error **errp) * 0x40000000: timer0 * 0x40001000: timer1 * 0x40002000: dual timer + * 0x40003000: MHU0 (SSE-200 only) + * 0x40004000: MHU1 (SSE-200 only) * We must configure and realize each downstream device and connect * it to the appropriate PPC port; then we can realize the PPC and * map its upstream ends to the right place in the container. @@ -666,6 +676,31 @@ static void armsse_realize(DeviceState *dev, Error **errp) return; } + if (info->has_mhus) { + for (i = 0; i < ARRAY_SIZE(s->mhu); i++) { + char *name = g_strdup_printf("MHU%d", i); + char *port = g_strdup_printf("port[%d]", i + 3); + + qdev_prop_set_string(DEVICE(&s->mhu[i]), "name", name); + qdev_prop_set_uint64(DEVICE(&s->mhu[i]), "size", 0x1000); + object_property_set_bool(OBJECT(&s->mhu[i]), true, + "realized", &err); + if (err) { + error_propagate(errp, err); + return; + } + mr = sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->mhu[i]), 0); + object_property_set_link(OBJECT(&s->apb_ppc0), OBJECT(mr), + port, &err); + if (err) { + error_propagate(errp, err); + return; + } + g_free(name); + g_free(port); + } + } + object_property_set_bool(OBJECT(&s->apb_ppc0), true, "realized", &err); if (err) { error_propagate(errp, err); @@ -681,6 +716,12 @@ static void armsse_realize(DeviceState *dev, Error **errp) memory_region_add_subregion(&s->container, 0x40001000, mr); mr = sysbus_mmio_get_region(sbd_apb_ppc0, 2); memory_region_add_subregion(&s->container, 0x40002000, mr); + if (info->has_mhus) { + mr = sysbus_mmio_get_region(sbd_apb_ppc0, 3); + memory_region_add_subregion(&s->container, 0x40003000, mr); + mr = sysbus_mmio_get_region(sbd_apb_ppc0, 4); + memory_region_add_subregion(&s->container, 0x40004000, mr); + } for (i = 0; i < IOTS_APB_PPC0_NUM_PORTS; i++) { qdev_connect_gpio_out_named(dev_secctl, "apb_ppc0_nonsec", i, qdev_get_gpio_in_named(dev_apb_ppc0, From patchwork Mon Jan 21 18:51:11 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 156244 Delivered-To: patches@linaro.org Received: by 2002:a02:48:0:0:0:0:0 with SMTP id 69csp6701205jaa; Mon, 21 Jan 2019 10:51:39 -0800 (PST) X-Received: by 2002:adf:c612:: with SMTP id n18mr28397187wrg.174.1548096699298; Mon, 21 Jan 2019 10:51:39 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548096699; cv=none; d=google.com; s=arc-20160816; b=F70xqz3bOrgYtsga9i0NsxELbi4Gwc0w0KbRlym2L2C6Kc18NcoTowkzFXwZBkpgkZ 7AhUdMTVFPJoEIhMGrNOm8hzu7EEYYBONYlXn1GOeRUttd+ooIUZxq0cToU7TAdb3d6/ +aBTaShSiL9CL09RVqpwkylqqOUwlVo8bDJnp3+8A9OdAayrhTtQJr6rx9koVJfeLzy1 JNUdJ6WISwU4orib8dDGwePfA3QBKK654fDUy6yoXZyFcQxcUKHMoA8XGG+H7Scc6A+x Voi+j85rdAh0ANVbatUHJG+JkJ8bOmxRfEmV02JL7EJnBeKMt6qeEPyD75o4gdNsy37m O49Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=LzRvPMbQkQGhAdwFKIwhiAq/gXzdlKz74UrTsx5pEqs=; b=wW4gOIBSFbCb5e2W+jiYild+rOD4g7pOH/AZZNw9d5PZBhX5egJawPc+d9/Iji4QNT xXy2aWMaZ/f6KU6Kq7qMxU45uscSlinAzRNvzEi2liSnWjSVPpI33VppaQUB6CMDlq/v JANKWav2Sgwm8yaL4qD7PvdHqFkyJbMrGs9icETZ6YWwM/ZKYk70G798tXbhX4nyLcP+ 9cAvahhY6siKLaGXKYhYhPU7qDDA9ixY3vYHUkgNTb+8ZHt133OFkA0zkunm64hSL5RA 6nzRjdN3LxT4/2ax2PhmMM79G8l4B3AukQx+V0S6+l+MUCKcPIlRvVCeUeYH0wEXvvZq OzHg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=HTFIpc6p; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id e7sor64988079wra.9.2019.01.21.10.51.39 for (Google Transport Security); Mon, 21 Jan 2019 10:51:39 -0800 (PST) Received-SPF: pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) client-ip=209.85.220.65; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=HTFIpc6p; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=LzRvPMbQkQGhAdwFKIwhiAq/gXzdlKz74UrTsx5pEqs=; b=HTFIpc6plfz5Oe4OMdVqt3PxMZFqJEa+VBhskWdK6sf8arXNcOMps+Q2BlZwycXeBf E9lnYWNq7kxZO4dLaFcxCQRB6rSV2JVVGHFzwh4N5lTSiy/x7kh53azg+JKckGvl3nCj CNzGrg5OHRU7RTpouszJJTG1tcRz6D45isqDo= 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:mime-version:content-transfer-encoding; bh=LzRvPMbQkQGhAdwFKIwhiAq/gXzdlKz74UrTsx5pEqs=; b=TYTGNzMeMsAhLcqrLzB5FuPCNpixym3IMHWeYikHNCWlVTaeHsJif896f+/ZxfuYBJ MKpskv9vbJMatag3i7PP9MFB+go+9z/xS6TgHCZkZnIY0+gm+3Qj9FMul3MzNuDC8Q8e ZrpTamVfIMt3rp2vedfju+QavpPK3ljL+cAq0wrLZ0OillK7EENJdFRu+fM4wIj+6hmO C8vffPp8CC++EfTtMYDBU7pid3LIoDODw1HIYOQ8QiadwKmVkdtEeOi1rbRQ/lIwiY81 61Z1JBkkFXEcaHkHdzbDFaPscfImJl227/VrRDjRpsJYq/n5yuynyLTu6OuUmh0IDiV5 30gg== X-Gm-Message-State: AJcUukdKt9VvIjuDG/pyEUrocTPorRWBQQR+OSdbfmJOBF1DRynZytdR uokcSwLizcapxHc4knhEub3VokV/ X-Google-Smtp-Source: ALg8bN45w2p1E0/xf2Y5Eyksdnp2txrpoYFYaJsaqJco8ucxFZZc/SaZX9YLqFIbsSGYJH5Kn0HJGg== X-Received: by 2002:a5d:678b:: with SMTP id v11mr31459517wru.245.1548096698977; Mon, 21 Jan 2019 10:51:38 -0800 (PST) Return-Path: Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id n82sm50386660wma.42.2019.01.21.10.51.37 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 21 Jan 2019 10:51:38 -0800 (PST) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Cc: patches@linaro.org Subject: [PATCH 16/23] hw/arm/armsse: Add unimplemented-device stubs for PPUs Date: Mon, 21 Jan 2019 18:51:11 +0000 Message-Id: <20190121185118.18550-17-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190121185118.18550-1-peter.maydell@linaro.org> References: <20190121185118.18550-1-peter.maydell@linaro.org> MIME-Version: 1.0 Add unimplemented-device stubs for the various Power Policy Unit devices that the SSE-200 has. Signed-off-by: Peter Maydell --- include/hw/arm/armsse.h | 11 ++++++++ hw/arm/armsse.c | 58 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) -- 2.20.1 Reviewed-by: Richard Henderson diff --git a/include/hw/arm/armsse.h b/include/hw/arm/armsse.h index dbfcb280605..9855ec5f269 100644 --- a/include/hw/arm/armsse.h +++ b/include/hw/arm/armsse.h @@ -106,6 +106,16 @@ #define SSE_MAX_CPUS 2 +/* These define what each PPU in the ppu[] index is for */ +#define CPU0CORE_PPU 0 +#define CPU1CORE_PPU 1 +#define DBG_PPU 2 +#define RAM0_PPU 3 +#define RAM1_PPU 4 +#define RAM2_PPU 5 +#define RAM3_PPU 6 +#define NUM_PPUS 7 + typedef struct ARMSSE { /*< private >*/ SysBusDevice parent_obj; @@ -139,6 +149,7 @@ typedef struct ARMSSE { IoTKitSysCtl sysinfo; UnimplementedDeviceState mhu[2]; + UnimplementedDeviceState ppu[NUM_PPUS]; /* * 'container' holds all devices seen by all CPUs. diff --git a/hw/arm/armsse.c b/hw/arm/armsse.c index 1f3dc89c8e8..280ba5c78be 100644 --- a/hw/arm/armsse.c +++ b/hw/arm/armsse.c @@ -31,6 +31,7 @@ struct ARMSSEInfo { uint32_t sys_version; SysConfigFormat sys_config_format; bool has_mhus; + bool has_ppus; }; static const ARMSSEInfo armsse_variants[] = { @@ -41,6 +42,7 @@ static const ARMSSEInfo armsse_variants[] = { .sys_version = 0x41743, .sys_config_format = IoTKitFormat, .has_mhus = false, + .has_ppus = false, }, }; @@ -265,6 +267,29 @@ static void armsse_init(Object *obj) sysbus_init_child_obj(obj, "mhu1", &s->mhu[1], sizeof(s->mhu[1]), TYPE_UNIMPLEMENTED_DEVICE); } + if (info->has_ppus) { + for (i = 0; i < info->num_cpus; i++) { + char *name = g_strdup_printf("CPU%dCORE_PPU", i); + int ppuidx = CPU0CORE_PPU + i; + + sysbus_init_child_obj(obj, name, &s->ppu[ppuidx], + sizeof(s->ppu[ppuidx]), + TYPE_UNIMPLEMENTED_DEVICE); + g_free(name); + } + sysbus_init_child_obj(obj, "DBG_PPU", &s->ppu[DBG_PPU], + sizeof(s->ppu[DBG_PPU]), + TYPE_UNIMPLEMENTED_DEVICE); + for (i = 0; i < info->sram_banks; i++) { + char *name = g_strdup_printf("RAM%d_PPU", i); + int ppuidx = RAM0_PPU + i; + + sysbus_init_child_obj(obj, name, &s->ppu[ppuidx], + sizeof(s->ppu[ppuidx]), + TYPE_UNIMPLEMENTED_DEVICE); + g_free(name); + } + } object_initialize_child(obj, "nmi-orgate", &s->nmi_orgate, sizeof(s->nmi_orgate), TYPE_OR_IRQ, &error_abort, NULL); @@ -329,6 +354,17 @@ static qemu_irq armsse_get_common_irq_in(ARMSSE *s, int irqno) } } +static void map_ppu(ARMSSE *s, int ppuidx, const char *name, hwaddr addr) +{ + /* Map a PPU unimplemented device stub */ + DeviceState *dev = DEVICE(&s->ppu[ppuidx]); + + qdev_prop_set_string(dev, "name", name); + qdev_prop_set_uint64(dev, "size", 0x1000); + qdev_init_nofail(dev); + sysbus_mmio_map(SYS_BUS_DEVICE(&s->ppu[ppuidx]), 0, addr); +} + static void armsse_realize(DeviceState *dev, Error **errp) { ARMSSE *s = ARMSSE(dev); @@ -833,6 +869,28 @@ static void armsse_realize(DeviceState *dev, Error **errp) } sysbus_mmio_map(SYS_BUS_DEVICE(&s->sysctl), 0, 0x50021000); + if (info->has_ppus) { + /* CPUnCORE_PPU for each CPU */ + for (i = 0; i < info->num_cpus; i++) { + char *name = g_strdup_printf("CPU%dCORE_PPU", i); + + map_ppu(s, CPU0CORE_PPU + i, name, 0x50023000 + i * 0x2000); + /* + * We don't support CPU debug so don't create the + * CPU0DEBUG_PPU at 0x50024000 and 0x50026000. + */ + g_free(name); + } + map_ppu(s, DBG_PPU, "DBG_PPU", 0x50029000); + + for (i = 0; i < info->sram_banks; i++) { + char *name = g_strdup_printf("RAM%d_PPU", i); + + map_ppu(s, RAM0_PPU + i, name, 0x5002a000 + i * 0x1000); + g_free(name); + } + } + /* This OR gate wires together outputs from the secure watchdogs to NMI */ object_property_set_int(OBJECT(&s->nmi_orgate), 2, "num-lines", &err); if (err) { From patchwork Mon Jan 21 18:51:12 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 156245 Delivered-To: patches@linaro.org Received: by 2002:a02:48:0:0:0:0:0 with SMTP id 69csp6701230jaa; Mon, 21 Jan 2019 10:51:40 -0800 (PST) X-Received: by 2002:a5d:43d0:: with SMTP id v16mr30919471wrr.67.1548096700449; Mon, 21 Jan 2019 10:51:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548096700; cv=none; d=google.com; s=arc-20160816; b=pzXxMhIF51Y4qq+ZyhMRLN8+vGLVF6uFz4pWlq95hxa5YX03YSWWXQPR7JRCcM2Sy+ 1Ey+MtV4338u4WuaJwI+gQmEEw2DivsBOYujBatR+ZGBwPmzKiKYbeRHQXg3cMnoS9Eu jzXSmQ2EkB1brq6fXG7T7KMheNpLu9licrEUDgTc6g5xSFZ6viugGbCk0l/TfRFzZMQX kGdA/9liFYQHsM5wCZ8GtBxAODvglAgY5e86xRGF6nG0pa9kM520IMdDsfJQdG0UozSz Ks0LsNohwbuEXEFcO8GC9yvGXljIN1AqjeAWW+oZClAU861lQt77N/G+rFFqG2w3gXYy BPow== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=16YcVXkNI0qZQIE9OU/93mNUdU9hbKw0nKOMHfNAYQc=; b=muSX5YcvDNPLTcAKSOaHQ1YT+yiqa07Xwu7ALe4RnbuJgZB4yNX6rum/yje6bcXZB0 m5O/OCXbNYjJO7MzMgRgDjJR76R8bnQf3i1BRjO9lfBEvq+ED2Jka07FNldHk0+/n2n0 a04JTkKaq82PNKnheUR1w4xbctX958aQMJPqRAtVqIBW2zAakSRJwDRp5wASEAJqKlcC WLGS+5BtIC6aJYQAhGTr1Xd49snweczR6FUtBc5B2H2gFODFfgavlEHCr97wW3rTdYvi 7F6Z3P5t9psWVoHJ+ChHf6wpINm7AdelzIoax+EL1UJh8QVNZy/Wj5HZ/RhlYpW9fvnq KHmQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=RRyB9+r1; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id z13sor64630325wrl.43.2019.01.21.10.51.40 for (Google Transport Security); Mon, 21 Jan 2019 10:51:40 -0800 (PST) Received-SPF: pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) client-ip=209.85.220.65; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=RRyB9+r1; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=16YcVXkNI0qZQIE9OU/93mNUdU9hbKw0nKOMHfNAYQc=; b=RRyB9+r1E4aTDZK4X/LljGD24LU6DFmbEl+Dgrb40u5v9tttO5ToKm4rgdX2rqxkva MG4hVDu6AjK+kHLE+cm/K6IFt8oEkvGIwAGAzFvNk7hRCsCneFHVaitePfhvv+SIVwJ+ tLGN+7vZBz4ooX1E2WevPKd7kr9YEsQyHzccw= 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:mime-version:content-transfer-encoding; bh=16YcVXkNI0qZQIE9OU/93mNUdU9hbKw0nKOMHfNAYQc=; b=K5jcuTeEuov3N5MqqEeKNLGC3i+RTomhoWoumQ7ix9dS6SnpIUqV/JI5XtvpPUCWhU OBPp+ksuE/Q5P9JyyvIOLNVqKLysVIyaKphcc/OeAvNQDm0T7FCSxI4zoavPjJdQIO33 Hz1ElZO4s3s3tr6XMytKWOy+TGSSnzgIume8qCaxntlIeMSsa8jfUbN+f/nidN5RXQsr dpAxGsmQ5yxSb/OKS9J+iWyhHfxG8FxRnRk0YJ9EqhOQOHIXrOMywmrkgG1jyXqklxtf Takt4zkVd0kyQ9+8YzJ1dKPsqKnhvpSS5vyfBddSoH/v/UKcsunWRaOZZkskBAVvWYhi Z55w== X-Gm-Message-State: AJcUuke2w6UltuA6vAEGBpUtICkrLI8LsBjLP4YveXCdsnNM6CyeTTDh IlAbNCe7EU31//dSaq+fwu2gX1+C X-Google-Smtp-Source: ALg8bN4huX0n6vA9wOioumb58JSq3w0TB5hTQJ21O0Fg71HWtcKBv76BttZZVyhSu9h37MM3K3QJZQ== X-Received: by 2002:a5d:568c:: with SMTP id f12mr27701887wrv.101.1548096700023; Mon, 21 Jan 2019 10:51:40 -0800 (PST) Return-Path: Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id n82sm50386660wma.42.2019.01.21.10.51.39 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 21 Jan 2019 10:51:39 -0800 (PST) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Cc: patches@linaro.org Subject: [PATCH 17/23] hw/arm/armsse: Add unimplemented-device stub for cache control registers Date: Mon, 21 Jan 2019 18:51:12 +0000 Message-Id: <20190121185118.18550-18-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190121185118.18550-1-peter.maydell@linaro.org> References: <20190121185118.18550-1-peter.maydell@linaro.org> MIME-Version: 1.0 The SSE-200 gives each CPU a register bank to use to control its L1 instruction cache. Put in an unimplemented-device stub for this. Signed-off-by: Peter Maydell --- include/hw/arm/armsse.h | 1 + hw/arm/armsse.c | 39 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 39 insertions(+), 1 deletion(-) -- 2.20.1 Reviewed-by: Richard Henderson diff --git a/include/hw/arm/armsse.h b/include/hw/arm/armsse.h index 9855ec5f269..9d830057d5c 100644 --- a/include/hw/arm/armsse.h +++ b/include/hw/arm/armsse.h @@ -150,6 +150,7 @@ typedef struct ARMSSE { UnimplementedDeviceState mhu[2]; UnimplementedDeviceState ppu[NUM_PPUS]; + UnimplementedDeviceState cachectrl[SSE_MAX_CPUS]; /* * 'container' holds all devices seen by all CPUs. diff --git a/hw/arm/armsse.c b/hw/arm/armsse.c index 280ba5c78be..41e4a781e11 100644 --- a/hw/arm/armsse.c +++ b/hw/arm/armsse.c @@ -32,6 +32,7 @@ struct ARMSSEInfo { SysConfigFormat sys_config_format; bool has_mhus; bool has_ppus; + bool has_cachectrl; }; static const ARMSSEInfo armsse_variants[] = { @@ -43,6 +44,7 @@ static const ARMSSEInfo armsse_variants[] = { .sys_config_format = IoTKitFormat, .has_mhus = false, .has_ppus = false, + .has_cachectrl = false, }, }; @@ -290,6 +292,16 @@ static void armsse_init(Object *obj) g_free(name); } } + if (info->has_cachectrl) { + for (i = 0; i < info->num_cpus; i++) { + char *name = g_strdup_printf("cachectrl%d", i); + + sysbus_init_child_obj(obj, name, &s->cachectrl[i], + sizeof(s->cachectrl[i]), + TYPE_UNIMPLEMENTED_DEVICE); + g_free(name); + } + } object_initialize_child(obj, "nmi-orgate", &s->nmi_orgate, sizeof(s->nmi_orgate), TYPE_OR_IRQ, &error_abort, NULL); @@ -795,7 +807,32 @@ static void armsse_realize(DeviceState *dev, Error **errp) qdev_connect_gpio_out(DEVICE(&s->ppc_irq_orgate), 0, armsse_get_common_irq_in(s, 10)); - /* 0x40010000 .. 0x4001ffff: private CPU region: unused in IoTKit */ + /* + * 0x40010000 .. 0x4001ffff (and the 0x5001000... secure-only alias): + * private per-CPU region (all these devices are SSE-200 only): + * 0x50010000: L1 icache control registers + * 0x50011000: CPUSECCTRL (CPU local security control registers) + * 0x4001f000 and 0x5001f000: CPU_IDENTITY register block + */ + if (info->has_cachectrl) { + for (i = 0; i < info->num_cpus; i++) { + char *name = g_strdup_printf("cachectrl%d", i); + MemoryRegion *mr; + + qdev_prop_set_string(DEVICE(&s->cachectrl[i]), "name", name); + g_free(name); + qdev_prop_set_uint64(DEVICE(&s->cachectrl[i]), "size", 0x1000); + object_property_set_bool(OBJECT(&s->cachectrl[i]), true, + "realized", &err); + if (err) { + error_propagate(errp, err); + return; + } + + mr = sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->cachectrl[i]), 0); + memory_region_add_subregion(&s->cpu_container[i], 0x50010000, mr); + } + } /* 0x40020000 .. 0x4002ffff : ARMSSE system control peripheral region */ /* Devices behind APB PPC1: From patchwork Mon Jan 21 18:51:13 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 156246 Delivered-To: patches@linaro.org Received: by 2002:a02:48:0:0:0:0:0 with SMTP id 69csp6701252jaa; Mon, 21 Jan 2019 10:51:41 -0800 (PST) X-Received: by 2002:adf:9c8a:: with SMTP id d10mr28233201wre.244.1548096701493; Mon, 21 Jan 2019 10:51:41 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548096701; cv=none; d=google.com; s=arc-20160816; b=mbkbkpC/CGmJ1KUSX9R+S+CXjmElXqAsx/Vr/WIoHjxe0zB0iegt2t1HJfke646tXJ AVDb2NWcuRBinfM9fmdGshgWR159edNziSivj1Mwu5qnGdUwaZJKX/Fs9FA7Rf+fXI84 yd0Ll6LCCYlJbkxKgR8P73cJ9deqacYXnUuHgAE+0IoplUEyfifodNJJbDY99iniBAky ZatbTDdJ4Nmwf3/LkeLCEYO1PRmGuUKHBDA//j0ahBqmbBTqxZM6528iHI5rhSQdeHSz BK4dPWmtjxoZHP7hVh56hWbZU/mJVvlzHjevyXhjRBdiW09fdgXu7+n73UO0ue3mTTV5 14tQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=5oXNf8YbRJ27W92QaQUg2Jg/rlBLxD7V8QWz6bSn8Tg=; b=DG9PuYJtFiwTrhWGNzvPTgOomsIzDr/xybBisMyeB35bpahPv0qUKAa5MLPesjOu2h 3bgIsG5zpMYYLChKFDNSYQNNdDwn7ERjahsEeIqzm3mp7LYC7XlBuZqKLJ9Dsh/L8c2y WcIcn6pUYpKy81BrdB6E7/CyjrSOCEsv5ugh1l/bap+x7X5U6i9A1YZls3gSI+EWstUY mosW+90IUIuJwcbGMGdBZ5SR5dupRKUrlV9Ga7G8W3jCjQC5rVG6SpQ/VIdsVjCfm5nk TKgglJrvj6cpJWXd7nM/0yllaAFMeTimGk3CzzhLl0xm7BdS8n4bNTcfHSQv+XxWgav9 H5yw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=NMEiUA6j; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id n12sor64618784wrm.10.2019.01.21.10.51.41 for (Google Transport Security); Mon, 21 Jan 2019 10:51:41 -0800 (PST) Received-SPF: pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) client-ip=209.85.220.65; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=NMEiUA6j; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=5oXNf8YbRJ27W92QaQUg2Jg/rlBLxD7V8QWz6bSn8Tg=; b=NMEiUA6jC+0+m1CiYmjfyxKZWyJRx0xr6H4P9drgvZ5QPfqBhY/BKSqZk/IPbrU/Xf OGNPviQ/5fYaPqA18k0svK4vT1RQaKgBapMB2EvRQiEnTxO/pZJ0pETAcz0p12JMtNLg bx580M/WbdelgqUl1aoX8/tCqBjJSdjgqtGlE= 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:mime-version:content-transfer-encoding; bh=5oXNf8YbRJ27W92QaQUg2Jg/rlBLxD7V8QWz6bSn8Tg=; b=XkExrsZR4B+zzuEdWefGn7hGX+MJdejkMCGkMNJxpz4GsnHRcTvqxKGQ4I4JnZndiu 7Efs143Tya10NfVIvTZel+tGWZNvWK+Em56r6gTa7/xzEJIgIDfdRaUCG90CcHUiNKQp 1fjtQWjFuWKc7ZsJG2v0f6LiKE9Gybdj3mMkkzMga/WokAptxhVH/TQdekCvC4skjSlK 0nsSNw1kYSj8EBUZNuuXwhFAjTcl/UglLaXoTzBxQnV9SMVorWUcg1YMRRzMVJWnzvKP i6AJ0EuU8qsJQJogcAU+okvOai0Lb6Eu01YFw/kxE9/oltTsvjYte7u2jmQTWe7/GhG9 cnZg== X-Gm-Message-State: AJcUukeL34UC7QPlTinsr7Sgj79mtGrAos8Z36tXEL64Rd6ta1sqoMCK VgZh8JpYGGGGRdTqWcZjM3r864oDkW/nSi5F X-Google-Smtp-Source: ALg8bN74c/3XSF9S+ykrcrnY28J2F5cQo6oflXsSA29QWkMqYizS0wBi+4xODclwajSVej8N5quI9A== X-Received: by 2002:adf:9c01:: with SMTP id f1mr30514330wrc.286.1548096701027; Mon, 21 Jan 2019 10:51:41 -0800 (PST) Return-Path: Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id n82sm50386660wma.42.2019.01.21.10.51.40 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 21 Jan 2019 10:51:40 -0800 (PST) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Cc: patches@linaro.org Subject: [PATCH 18/23] hw/arm/armsse: Add unimplemented-device stub for CPU local control registers Date: Mon, 21 Jan 2019 18:51:13 +0000 Message-Id: <20190121185118.18550-19-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190121185118.18550-1-peter.maydell@linaro.org> References: <20190121185118.18550-1-peter.maydell@linaro.org> MIME-Version: 1.0 The SSE-200 has a "CPU local security control" register bank; add an unimplemented-device stub for it. (The register bank has only one interesting register, which allows the guest to lock down changes to various CPU registers so they cannot be modified further. We don't support that in our Cortex-M33 model anyway.) Signed-off-by: Peter Maydell --- include/hw/arm/armsse.h | 1 + hw/arm/armsse.c | 31 +++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) -- 2.20.1 Reviewed-by: Richard Henderson diff --git a/include/hw/arm/armsse.h b/include/hw/arm/armsse.h index 9d830057d5c..961dbb3032a 100644 --- a/include/hw/arm/armsse.h +++ b/include/hw/arm/armsse.h @@ -151,6 +151,7 @@ typedef struct ARMSSE { UnimplementedDeviceState mhu[2]; UnimplementedDeviceState ppu[NUM_PPUS]; UnimplementedDeviceState cachectrl[SSE_MAX_CPUS]; + UnimplementedDeviceState cpusecctrl[SSE_MAX_CPUS]; /* * 'container' holds all devices seen by all CPUs. diff --git a/hw/arm/armsse.c b/hw/arm/armsse.c index 41e4a781e11..9c111ac6a40 100644 --- a/hw/arm/armsse.c +++ b/hw/arm/armsse.c @@ -33,6 +33,7 @@ struct ARMSSEInfo { bool has_mhus; bool has_ppus; bool has_cachectrl; + bool has_cpusecctrl; }; static const ARMSSEInfo armsse_variants[] = { @@ -45,6 +46,7 @@ static const ARMSSEInfo armsse_variants[] = { .has_mhus = false, .has_ppus = false, .has_cachectrl = false, + .has_cpusecctrl = false, }, }; @@ -302,6 +304,16 @@ static void armsse_init(Object *obj) g_free(name); } } + if (info->has_cpusecctrl) { + for (i = 0; i < info->num_cpus; i++) { + char *name = g_strdup_printf("cpusecctrl%d", i); + + sysbus_init_child_obj(obj, name, &s->cpusecctrl[i], + sizeof(s->cpusecctrl[i]), + TYPE_UNIMPLEMENTED_DEVICE); + g_free(name); + } + } object_initialize_child(obj, "nmi-orgate", &s->nmi_orgate, sizeof(s->nmi_orgate), TYPE_OR_IRQ, &error_abort, NULL); @@ -833,6 +845,25 @@ static void armsse_realize(DeviceState *dev, Error **errp) memory_region_add_subregion(&s->cpu_container[i], 0x50010000, mr); } } + if (info->has_cpusecctrl) { + for (i = 0; i < info->num_cpus; i++) { + char *name = g_strdup_printf("CPUSECCTRL%d", i); + MemoryRegion *mr; + + qdev_prop_set_string(DEVICE(&s->cpusecctrl[i]), "name", name); + g_free(name); + qdev_prop_set_uint64(DEVICE(&s->cpusecctrl[i]), "size", 0x1000); + object_property_set_bool(OBJECT(&s->cpusecctrl[i]), true, + "realized", &err); + if (err) { + error_propagate(errp, err); + return; + } + + mr = sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->cpusecctrl[i]), 0); + memory_region_add_subregion(&s->cpu_container[i], 0x50011000, mr); + } + } /* 0x40020000 .. 0x4002ffff : ARMSSE system control peripheral region */ /* Devices behind APB PPC1: From patchwork Mon Jan 21 18:51:14 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 156247 Delivered-To: patches@linaro.org Received: by 2002:a02:48:0:0:0:0:0 with SMTP id 69csp6701273jaa; Mon, 21 Jan 2019 10:51:42 -0800 (PST) X-Received: by 2002:adf:9246:: with SMTP id 64mr31062799wrj.130.1548096702687; Mon, 21 Jan 2019 10:51:42 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548096702; cv=none; d=google.com; s=arc-20160816; b=EfkxYtVbNlJ3KwT4n8hB0fbL20fsKLG6IUUeiOrt0O/Yv4onCgKmrZgFSewSFBFvnd WJtjCYwJr9zLO4IYTbf9gIzEcsmvvrBtHPMDIIC8Z/4vXLBtMt2ptZZOps6x6B1I9izS AUIbmqh3z8deiA9h6t+eYXqX+fe0qDpXg24pMpsyffpVIiDkcjc8/GLLyoPg1tG8hGcU /GBtTQW3cM2/Hz8OqbA1FgigfsSMBLpjijSmuZf9foujQbxp6fClj2aSuOPo9FmFtNcY qNQene2sHiOYfT7OCd8uRT+2sG3bkCj34g6+btd+cGoJaJqVkUSTTusuQ1ZY9cBNwfKX ffmg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=ptElJAOC24V6aCwdEwgL13NkItv2g2+5CEz3KW95t8w=; b=HFKGbzHJbrBR5Jg3KawCfJRSdYp+Q76F6NQnizFOyoWmZohmCcSoEpEkRJF+1znm4I +AtBJwVesCuM1SySvEO2h7D3+FTkuAjKi+moB80SMRj+lC/Sy2WK+Akg52HPaKqudg9g JHmGxLVDonWFrzr7zOjU8d2SO1CdCR74x/bTThiQmGp2m7v/tTPHiIRUZ4c4b8AYX9Rh w+pjYPVgQo/HwKeyLvhdZyQH/0dGLd6LiS7poSX6PuRgRcawYVCQZZPTn6nuv/JDwdRn 5X9iEk9T9ucr4MwJjT+bnnfa+QbHKHpOUqzIYkMdivzZUoJ19mJ/CxQQnELAtcli0kn5 EQYQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=WFIkmDzw; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id r124sor5810434wma.0.2019.01.21.10.51.42 for (Google Transport Security); Mon, 21 Jan 2019 10:51:42 -0800 (PST) Received-SPF: pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) client-ip=209.85.220.65; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=WFIkmDzw; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ptElJAOC24V6aCwdEwgL13NkItv2g2+5CEz3KW95t8w=; b=WFIkmDzwGTUR/d4XtIBue0PmRyHGfjn/zBABzmHq8uB3lM2vPa/5lSypbCInheqrGu P5oC9v+vF1oTX7Xe9HVHLsCiz7vZT4pho36KQp9ihgLNbnbKD5fPcDrXhUSWIs/GDd3Y kVh8nXca6cKp//P4B+PCZBdQF6Sekflec1OOs= 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:mime-version:content-transfer-encoding; bh=ptElJAOC24V6aCwdEwgL13NkItv2g2+5CEz3KW95t8w=; b=Cz6IuTG4WCaFNf9z7zEtY2fnN/D2g7dhDpEP6nI0//Jt1PjXfIzraBGK9W05yd1sCZ Ra74CUqrC8Rv0EBg5B8tBU/4GrPp0Gp7iDdiomMOih3A/jojFwSyv/fvJFBdt7PjEGyh 9SCNUgc+9LQsbEy0+McQ1q6xVHjn1AFOvTV/dCRjeEkkKcU9an8WRRmQGj/HwnBdvioc htlDupNESVd1sTzIFAi8d+oSMjKCLLuBLenK78htajUlC5GQfbeLK6KMd3W/JQOWv/oP euKhLVRWP64Hi9hmlpo9e2IzImiclNcCjQw4gbRwq+X3J66c//JtNuMC7C+yPd1gba/K sOrg== X-Gm-Message-State: AJcUukeCZqiPwXDNGSwzRleas/Xwh3ef009QGlgRDio8kECB849T3txO IscXetnt+V5G2mnDzv7h4ijdgsyL X-Google-Smtp-Source: ALg8bN6ZfUmKolV2PAJRXSQ5hHtFy8lpEgvmzvnBpme19JD/Wkb7AYSYdEYeFXCnFC7bk/0FjMjVrA== X-Received: by 2002:a1c:bc82:: with SMTP id m124mr527840wmf.77.1548096702192; Mon, 21 Jan 2019 10:51:42 -0800 (PST) Return-Path: Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id n82sm50386660wma.42.2019.01.21.10.51.41 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 21 Jan 2019 10:51:41 -0800 (PST) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Cc: patches@linaro.org Subject: [PATCH 19/23] hw/misc/armsse-cpuid: Implement SSE-200 CPU_IDENTITY register block Date: Mon, 21 Jan 2019 18:51:14 +0000 Message-Id: <20190121185118.18550-20-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190121185118.18550-1-peter.maydell@linaro.org> References: <20190121185118.18550-1-peter.maydell@linaro.org> MIME-Version: 1.0 The SSE-200 has a CPU_IDENTITY register block, which is a set of read-only registers. As well as the usual PID/CID registers, there is a single CPUID register which indicates whether the CPU is CPU 0 or CPU 1. Implement a model of this register block. Signed-off-by: Peter Maydell --- hw/misc/Makefile.objs | 1 + include/hw/misc/armsse-cpuid.h | 41 ++++++++++ hw/misc/armsse-cpuid.c | 134 ++++++++++++++++++++++++++++++++ MAINTAINERS | 2 + default-configs/arm-softmmu.mak | 1 + hw/misc/trace-events | 4 + 6 files changed, 183 insertions(+) create mode 100644 include/hw/misc/armsse-cpuid.h create mode 100644 hw/misc/armsse-cpuid.c -- 2.20.1 Reviewed-by: Richard Henderson diff --git a/hw/misc/Makefile.objs b/hw/misc/Makefile.objs index 04f3bfa516e..74c91d250c8 100644 --- a/hw/misc/Makefile.objs +++ b/hw/misc/Makefile.objs @@ -69,6 +69,7 @@ obj-$(CONFIG_TZ_PPC) += tz-ppc.o obj-$(CONFIG_IOTKIT_SECCTL) += iotkit-secctl.o obj-$(CONFIG_IOTKIT_SYSCTL) += iotkit-sysctl.o obj-$(CONFIG_IOTKIT_SYSINFO) += iotkit-sysinfo.o +obj-$(CONFIG_ARMSSE_CPUID) += armsse-cpuid.o obj-$(CONFIG_PVPANIC) += pvpanic.o obj-$(CONFIG_AUX) += auxbus.o diff --git a/include/hw/misc/armsse-cpuid.h b/include/hw/misc/armsse-cpuid.h new file mode 100644 index 00000000000..0ef33fcaba2 --- /dev/null +++ b/include/hw/misc/armsse-cpuid.h @@ -0,0 +1,41 @@ +/* + * ARM SSE-200 CPU_IDENTITY register block + * + * Copyright (c) 2019 Linaro Limited + * Written by Peter Maydell + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 or + * (at your option) any later version. + */ + +/* + * This is a model of the "CPU_IDENTITY" register block which is part of the + * Arm SSE-200 and documented in + * http://infocenter.arm.com/help/topic/com.arm.doc.101104_0100_00_en/corelink_sse200_subsystem_for_embedded_technical_reference_manual_101104_0100_00_en.pdf + * + * QEMU interface: + * + QOM property "CPUID": the value to use for the CPUID register + * + sysbus MMIO region 0: the system information register bank + */ + +#ifndef HW_MISC_ARMSSE_CPUID_H +#define HW_MISC_ARMSSE_CPUID_H + +#include "hw/sysbus.h" + +#define TYPE_ARMSSE_CPUID "armsse-cpuid" +#define ARMSSE_CPUID(obj) OBJECT_CHECK(ARMSSECPUID, (obj), TYPE_ARMSSE_CPUID) + +typedef struct ARMSSECPUID { + /*< private >*/ + SysBusDevice parent_obj; + + /*< public >*/ + MemoryRegion iomem; + + /* Properties */ + uint32_t cpuid; +} ARMSSECPUID; + +#endif diff --git a/hw/misc/armsse-cpuid.c b/hw/misc/armsse-cpuid.c new file mode 100644 index 00000000000..7788f6ced6a --- /dev/null +++ b/hw/misc/armsse-cpuid.c @@ -0,0 +1,134 @@ +/* + * ARM SSE-200 CPU_IDENTITY register block + * + * Copyright (c) 2019 Linaro Limited + * Written by Peter Maydell + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 or + * (at your option) any later version. + */ + +/* + * This is a model of the "CPU_IDENTITY" register block which is part of the + * Arm SSE-200 and documented in + * http://infocenter.arm.com/help/topic/com.arm.doc.101104_0100_00_en/corelink_sse200_subsystem_for_embedded_technical_reference_manual_101104_0100_00_en.pdf + * + * It consists of one read-only CPUID register (set by QOM property), plus the + * usual ID registers. + */ + +#include "qemu/osdep.h" +#include "qemu/log.h" +#include "trace.h" +#include "qapi/error.h" +#include "sysemu/sysemu.h" +#include "hw/sysbus.h" +#include "hw/registerfields.h" +#include "hw/misc/armsse-cpuid.h" + +REG32(CPUID, 0x0) +REG32(PID4, 0xfd0) +REG32(PID5, 0xfd4) +REG32(PID6, 0xfd8) +REG32(PID7, 0xfdc) +REG32(PID0, 0xfe0) +REG32(PID1, 0xfe4) +REG32(PID2, 0xfe8) +REG32(PID3, 0xfec) +REG32(CID0, 0xff0) +REG32(CID1, 0xff4) +REG32(CID2, 0xff8) +REG32(CID3, 0xffc) + +/* PID/CID values */ +static const int sysinfo_id[] = { + 0x04, 0x00, 0x00, 0x00, /* PID4..PID7 */ + 0x58, 0xb8, 0x0b, 0x00, /* PID0..PID3 */ + 0x0d, 0xf0, 0x05, 0xb1, /* CID0..CID3 */ +}; + +static uint64_t armsse_cpuid_read(void *opaque, hwaddr offset, + unsigned size) +{ + ARMSSECPUID *s = ARMSSE_CPUID(opaque); + uint64_t r; + + switch (offset) { + case A_CPUID: + r = s->cpuid; + break; + case A_PID4 ... A_CID3: + r = sysinfo_id[(offset - A_PID4) / 4]; + break; + default: + qemu_log_mask(LOG_GUEST_ERROR, + "SSE CPU_IDENTITY read: bad offset 0x%x\n", (int)offset); + r = 0; + break; + } + trace_armsse_cpuid_read(offset, r, size); + return r; +} + +static void armsse_cpuid_write(void *opaque, hwaddr offset, + uint64_t value, unsigned size) +{ + trace_armsse_cpuid_write(offset, value, size); + + qemu_log_mask(LOG_GUEST_ERROR, + "SSE CPU_IDENTITY: write to RO offset 0x%x\n", (int)offset); +} + +static const MemoryRegionOps armsse_cpuid_ops = { + .read = armsse_cpuid_read, + .write = armsse_cpuid_write, + .endianness = DEVICE_LITTLE_ENDIAN, + /* byte/halfword accesses are just zero-padded on reads and writes */ + .impl.min_access_size = 4, + .impl.max_access_size = 4, + .valid.min_access_size = 1, + .valid.max_access_size = 4, +}; + +static Property armsse_cpuid_props[] = { + DEFINE_PROP_UINT32("CPUID", ARMSSECPUID, cpuid, 0), + DEFINE_PROP_END_OF_LIST() +}; + +static void armsse_cpuid_init(Object *obj) +{ + SysBusDevice *sbd = SYS_BUS_DEVICE(obj); + ARMSSECPUID *s = ARMSSE_CPUID(obj); + + memory_region_init_io(&s->iomem, obj, &armsse_cpuid_ops, + s, "armsse-cpuid", 0x1000); + sysbus_init_mmio(sbd, &s->iomem); +} + +static void armsse_cpuid_class_init(ObjectClass *klass, void *data) +{ + DeviceClass *dc = DEVICE_CLASS(klass); + + /* + * This device has no guest-modifiable state and so it + * does not need a reset function or VMState. + */ + + dc->props = armsse_cpuid_props; +} + +static const TypeInfo armsse_cpuid_info = { + .name = TYPE_ARMSSE_CPUID, + .parent = TYPE_SYS_BUS_DEVICE, + .instance_size = sizeof(ARMSSECPUID), + .instance_init = armsse_cpuid_init, + .class_init = armsse_cpuid_class_init, +}; + +static void armsse_cpuid_register_types(void) +{ + type_register_static(&armsse_cpuid_info); +} + +type_init(armsse_cpuid_register_types); diff --git a/MAINTAINERS b/MAINTAINERS index 52222117d77..42719880bad 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -633,6 +633,8 @@ F: hw/misc/iotkit-sysctl.c F: include/hw/misc/iotkit-sysctl.h F: hw/misc/iotkit-sysinfo.c F: include/hw/misc/iotkit-sysinfo.h +F: hw/misc/armsse-cpuid.c +F: include/hw/misc/armsse-cpuid.h Musicpal M: Jan Kiszka diff --git a/default-configs/arm-softmmu.mak b/default-configs/arm-softmmu.mak index 3f200157879..be88870799c 100644 --- a/default-configs/arm-softmmu.mak +++ b/default-configs/arm-softmmu.mak @@ -118,6 +118,7 @@ CONFIG_ARMSSE=y CONFIG_IOTKIT_SECCTL=y CONFIG_IOTKIT_SYSCTL=y CONFIG_IOTKIT_SYSINFO=y +CONFIG_ARMSSE_CPUID=y CONFIG_VERSATILE=y CONFIG_VERSATILE_PCI=y diff --git a/hw/misc/trace-events b/hw/misc/trace-events index 52466c77c4e..b0701bddd3c 100644 --- a/hw/misc/trace-events +++ b/hw/misc/trace-events @@ -132,3 +132,7 @@ iotkit_sysinfo_write(uint64_t offset, uint64_t data, unsigned size) "IoTKit SysI iotkit_sysctl_read(uint64_t offset, uint64_t data, unsigned size) "IoTKit SysCtl read: offset 0x%" PRIx64 " data 0x%" PRIx64 " size %u" iotkit_sysctl_write(uint64_t offset, uint64_t data, unsigned size) "IoTKit SysCtl write: offset 0x%" PRIx64 " data 0x%" PRIx64 " size %u" iotkit_sysctl_reset(void) "IoTKit SysCtl: reset" + +# hw/misc/armsse-cpuid.c +armsse_cpuid_read(uint64_t offset, uint64_t data, unsigned size) "SSE-200 CPU_IDENTITY read: offset 0x%" PRIx64 " data 0x%" PRIx64 " size %u" +armsse_cpuid_write(uint64_t offset, uint64_t data, unsigned size) "SSE-200 CPU_IDENTITY write: offset 0x%" PRIx64 " data 0x%" PRIx64 " size %u" From patchwork Mon Jan 21 18:51:15 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 156248 Delivered-To: patches@linaro.org Received: by 2002:a02:48:0:0:0:0:0 with SMTP id 69csp6701288jaa; Mon, 21 Jan 2019 10:51:43 -0800 (PST) X-Received: by 2002:adf:c505:: with SMTP id q5mr28613405wrf.84.1548096703662; Mon, 21 Jan 2019 10:51:43 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548096703; cv=none; d=google.com; s=arc-20160816; b=xF1Ol3WQJTtqaNgZ6WjWVuRY540EkIJX/a+Pc2f9MYRrdY4rWZPZ8BdZLqTL7kqLSf 9rDlYvTQOzaiCm3k9q0MfAZhrfQbo7+F0TaWz/IcECbsYzRP2Od9QOLDRjVLgQtTLRLn SqcJWF4xqh7X4tAG/7qGdlYn9v51Z8TrmS1/1UwNZ9BfEpKwCjR8pWQE4B+afBQxY9ez UmzdFmQ2M+bBTIwybERx843822YoLitpTTLeX8ApdNAEVlMuMUrHgmX4XfQ9I0Ylf5/j N1gonQn41TijgufY/9IlJ8S/eYnofL0FDjsj5xoVaiGFyU3O5FPV5Qb6p7YCAC2Gf9LV NW9Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=bbMrEQttECEQjo2HwYbstwzK4LFM5IR2j7Wqx0jx8pQ=; b=FIojrTN/RwJaiVS2gK4l/dZZAvJjHVJhhjRUmNRynP/Cd73uaYDbnfh5l0a72cX+A8 SaSjeZR0Nsc8v8hv6eWza/o6VQE3EHJRQzxBejSoP4gFjGOKhLBzVYfHpG1IHv1yu0XV KQIISa9rPEWHGipaofstnhsu/G2kNaiGIrB+UW3zB/zaI60PlAapA7GgoTvFNhCRi+J4 O4448RWfwfYis3oaL70AunwGDs/qpZCZVm6ZMigjnJB8pbfgv877UyhVEoEkXDOgiWpX fgjOzMvC90Eq4f42Hg1/PBFnyfUmZ2YmWfCNL0yTjof4QuMhlbNtSp+UZdvxVpTubLv9 bKfg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=e2LCMT9L; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id v16sor32553759wmc.26.2019.01.21.10.51.43 for (Google Transport Security); Mon, 21 Jan 2019 10:51:43 -0800 (PST) Received-SPF: pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) client-ip=209.85.220.65; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=e2LCMT9L; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=bbMrEQttECEQjo2HwYbstwzK4LFM5IR2j7Wqx0jx8pQ=; b=e2LCMT9LQ1Mdjr+1MMgPhcU5vqCfD42pcIcOC2kWUhNHqY2Hc1atNU7gxGo9xrxpVm 0L2D8irYgnl4IBD04V40VfOQYRYlzIR5e6GK+UuaKXe7jWiSzJfkCIwAARWuc+K/R7co Zck7bUIm2d70xj0kbfJ6chpxPUq+9MVMgmAnc= 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:mime-version:content-transfer-encoding; bh=bbMrEQttECEQjo2HwYbstwzK4LFM5IR2j7Wqx0jx8pQ=; b=At0c1SDUpA1zNRxeMpXhi7ogJVI9ted4DWwc6AXrFOaaGhR9Zcvnip2Me3S0R6WBdN hQEATurjJDJXSPRy9m5er5NjehhFEnOtW4AZpPa4h32TZ1MATSSl0VWbfKhD+Yp53Hm6 ICLXJ1oyKCv68kPdUtOEj43pA3+rAu+cZC+WTc1nRR75OxGGYRq8lvIvkaYp27CR6xIr 74RBfQBcu/vNMzLgmEOWQLX3yr2cEgTWOq0WQlqxMN28TRepclXMXGDgxbvh6LWDPX+O Y7NuA6ISeTuezToCgmK5Uk7xfZO/eg7ISGH0gPYu5iGJq4fY2Avvl+12zAh8Egj0alze YZvQ== X-Gm-Message-State: AJcUuket9UhPjV9dErbOLu0bGg9+yLPGmi002xSDrGZlIlmbHYoC77oP M1TwctrMNTRErjxwVN6SfIT31sqY X-Google-Smtp-Source: ALg8bN4uM0f+FMSiaksFJBXbe+NEu1SdpRLUM/SLXZfFST86d4sMexyn4KJPVciGmLmOvdTkKR0Iog== X-Received: by 2002:a7b:c757:: with SMTP id w23mr504644wmk.59.1548096703334; Mon, 21 Jan 2019 10:51:43 -0800 (PST) Return-Path: Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id n82sm50386660wma.42.2019.01.21.10.51.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 21 Jan 2019 10:51:42 -0800 (PST) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Cc: patches@linaro.org Subject: [PATCH 20/23] hw/arm/armsse: Add CPU_IDENTITY block to SSE-200 Date: Mon, 21 Jan 2019 18:51:15 +0000 Message-Id: <20190121185118.18550-21-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190121185118.18550-1-peter.maydell@linaro.org> References: <20190121185118.18550-1-peter.maydell@linaro.org> MIME-Version: 1.0 Instantiate a copy of the CPU_IDENTITY register block for each CPU in an SSE-200. Signed-off-by: Peter Maydell --- include/hw/arm/armsse.h | 3 +++ hw/arm/armsse.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) -- 2.20.1 Reviewed-by: Richard Henderson diff --git a/include/hw/arm/armsse.h b/include/hw/arm/armsse.h index 961dbb3032a..3914e8e4bf2 100644 --- a/include/hw/arm/armsse.h +++ b/include/hw/arm/armsse.h @@ -78,6 +78,7 @@ #include "hw/watchdog/cmsdk-apb-watchdog.h" #include "hw/misc/iotkit-sysctl.h" #include "hw/misc/iotkit-sysinfo.h" +#include "hw/misc/armsse-cpuid.h" #include "hw/misc/unimp.h" #include "hw/or-irq.h" #include "hw/core/split-irq.h" @@ -153,6 +154,8 @@ typedef struct ARMSSE { UnimplementedDeviceState cachectrl[SSE_MAX_CPUS]; UnimplementedDeviceState cpusecctrl[SSE_MAX_CPUS]; + ARMSSECPUID cpuid[SSE_MAX_CPUS]; + /* * 'container' holds all devices seen by all CPUs. * 'cpu_container[i]' is the view that CPU i has: this has the diff --git a/hw/arm/armsse.c b/hw/arm/armsse.c index 9c111ac6a40..eb691faf720 100644 --- a/hw/arm/armsse.c +++ b/hw/arm/armsse.c @@ -34,6 +34,7 @@ struct ARMSSEInfo { bool has_ppus; bool has_cachectrl; bool has_cpusecctrl; + bool has_cpuid; }; static const ARMSSEInfo armsse_variants[] = { @@ -47,6 +48,7 @@ static const ARMSSEInfo armsse_variants[] = { .has_ppus = false, .has_cachectrl = false, .has_cpusecctrl = false, + .has_cpuid = false, }, }; @@ -314,6 +316,16 @@ static void armsse_init(Object *obj) g_free(name); } } + if (info->has_cpuid) { + for (i = 0; i < info->num_cpus; i++) { + char *name = g_strdup_printf("cpuid%d", i); + + sysbus_init_child_obj(obj, name, &s->cpuid[i], + sizeof(s->cpuid[i]), + TYPE_ARMSSE_CPUID); + g_free(name); + } + } object_initialize_child(obj, "nmi-orgate", &s->nmi_orgate, sizeof(s->nmi_orgate), TYPE_OR_IRQ, &error_abort, NULL); @@ -864,6 +876,22 @@ static void armsse_realize(DeviceState *dev, Error **errp) memory_region_add_subregion(&s->cpu_container[i], 0x50011000, mr); } } + if (info->has_cpuid) { + for (i = 0; i < info->num_cpus; i++) { + MemoryRegion *mr; + + qdev_prop_set_uint32(DEVICE(&s->cpuid[i]), "CPUID", i); + object_property_set_bool(OBJECT(&s->cpuid[i]), true, + "realized", &err); + if (err) { + error_propagate(errp, err); + return; + } + + mr = sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->cpuid[i]), 0); + memory_region_add_subregion(&s->cpu_container[i], 0x4001F000, mr); + } + } /* 0x40020000 .. 0x4002ffff : ARMSSE system control peripheral region */ /* Devices behind APB PPC1: From patchwork Mon Jan 21 18:51:16 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 156249 Delivered-To: patches@linaro.org Received: by 2002:a02:48:0:0:0:0:0 with SMTP id 69csp6701305jaa; Mon, 21 Jan 2019 10:51:44 -0800 (PST) X-Received: by 2002:a1c:9c15:: with SMTP id f21mr537372wme.94.1548096704795; Mon, 21 Jan 2019 10:51:44 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548096704; cv=none; d=google.com; s=arc-20160816; b=ZUq/0DJkyCZR0xEjCZFdWgR+4kOACB4ltEFQ1dKuDZqDAixtverlNMAwcUAJBJfWOE A238nZhkY5OnARFnU5jynX23Xn9A3xAdsJBVcorwvBAP4rFGx9mzlfRwvQKIdcr+FPpw j81XhafXa1MjDC3NsszRZhhBmqzKlGlIzQ5aPl+iBQ2Se3Vt8PHqZSrtKnYa520PFUw/ 5PjXa5WeILeSqx9lgR38iEM3ehzPqarLBXD/ajakc9HLA/7ntfsK1HlIMI8AJSNTVosP t5smnnCgY2SHNaqMInxAftDvGCgqxO2bvN08KwviK+wwHgwd/Ml0tSWJ2g3Ev9Or52dd 9ToA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=y0iJP1/0IWSi2a//xChFZD3ZT9ballXzK0ZjLQwVNl8=; b=cqtU8g0aujbEwU+6wN0YczegzxAokyxQ4oYhq4Bbu42D8C6TZwFqBXOhTavdxOVGOr YID0mrqMiN07WQBdrfApIPqINo08f5JC2HLXO2q0P8kQifgGiwXpEkXw1t2i9h7WzSdm KNGs8792mndUDzA+0o6hLjqhylA+rmcyVzHtOxk0VqwhQpn7f+7XrFx3lh6J4Ku0pSmF Zxg20ag07bJ1qfxMExLyQnk+YLwc/7n4kBXDjl+AnVwM5hcNBR/AoXmjbYLHQ7ugKR78 WE7JssO3gz1zjHXRiQfiB8/mNLIQ0/lyTcFytOdLyoil8Oj64nqSFtmdV8VI0Wo7+vJA nsEg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="L/V3fAmO"; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id z17sor14174585wrw.33.2019.01.21.10.51.44 for (Google Transport Security); Mon, 21 Jan 2019 10:51:44 -0800 (PST) Received-SPF: pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) client-ip=209.85.220.65; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="L/V3fAmO"; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=y0iJP1/0IWSi2a//xChFZD3ZT9ballXzK0ZjLQwVNl8=; b=L/V3fAmOrajnLxIzBOWs3x+pFR3SCRdZ1OX/H++FufMgmt8nooRFHp8b+BOJxnOAyk N7daPs0ZVixlYoj23Q/4gEeVdRWkQXUNdvGGG43WZtU0NtXTbPk8bd9O2z0a6QSvgVGO VmWSHiIGcDjEFRp+2ge/EXNA87V3598kxjMTo= 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:mime-version:content-transfer-encoding; bh=y0iJP1/0IWSi2a//xChFZD3ZT9ballXzK0ZjLQwVNl8=; b=EWpdx5T9X3e4luRlk+Gwn8oZIC6Wz4c29Dhgns20EIJcqNhy7LijFe5FtACvno0lN6 DQV2knBiSH5+i27ltP59wDrC8YMCfoFW4fCg4Xgh5QFGpn3ihqB/4DKqKPodXhzyiduL 3K1qM6IzqCv+azoE5IadEmbDJO0suFUQ7c4o8FwhmzWsRyKqEtoLUAiVKmT2FS+s1H0P RbbQD6RXGmGbX7ahhKG6Bfde8O7jsQpWfTG8Djh7B/fhS1RCuHeKaM6PUOB544ED5TGU VvFxpyTkHjyySGdaw0lf67sowBiZHTe58XGJY+XHi65uiJgDq+rn4x+o+49CEkOxlsIX G/Aw== X-Gm-Message-State: AJcUukds1dpkszaC2WMh1PotJYpmGOeoJGcQ0jtnxdMi3Y2YbF2ldapG 3Yu7X+q0qGFhAgR4FbmwaW+8pUYd X-Google-Smtp-Source: ALg8bN7mn8BBfV+t0ww8EfNNo+ogUUTdsnWiD2ensAtoc0SxdHlyxwLKoAWKGDoAMxZoH3NtRSJCIw== X-Received: by 2002:adf:9f10:: with SMTP id l16mr30473940wrf.206.1548096704432; Mon, 21 Jan 2019 10:51:44 -0800 (PST) Return-Path: Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id n82sm50386660wma.42.2019.01.21.10.51.43 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 21 Jan 2019 10:51:43 -0800 (PST) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Cc: patches@linaro.org Subject: [PATCH 21/23] hw/arm/armsse: Add SSE-200 model Date: Mon, 21 Jan 2019 18:51:16 +0000 Message-Id: <20190121185118.18550-22-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190121185118.18550-1-peter.maydell@linaro.org> References: <20190121185118.18550-1-peter.maydell@linaro.org> MIME-Version: 1.0 Add a model of the SSE-200, now we have put in all the code that lets us make it different from the IoTKit. Signed-off-by: Peter Maydell --- include/hw/arm/armsse.h | 19 ++++++++++++++++--- hw/arm/armsse.c | 12 ++++++++++++ 2 files changed, 28 insertions(+), 3 deletions(-) -- 2.20.1 Reviewed-by: Richard Henderson diff --git a/include/hw/arm/armsse.h b/include/hw/arm/armsse.h index 3914e8e4bf2..f800bafb14a 100644 --- a/include/hw/arm/armsse.h +++ b/include/hw/arm/armsse.h @@ -1,5 +1,5 @@ /* - * ARM SSE (Subsystems for Embedded): IoTKit + * ARM SSE (Subsystems for Embedded): IoTKit, SSE-200 * * Copyright (c) 2018 Linaro Limited * Written by Peter Maydell @@ -12,9 +12,13 @@ /* * This is a model of the Arm "Subsystems for Embedded" family of * hardware, which include the IoT Kit and the SSE-050, SSE-100 and - * SSE-200. Currently we model only the Arm IoT Kit which is documented in + * SSE-200. Currently we model: + * - the Arm IoT Kit which is documented in * http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ecm0601256/index.html - * It contains: + * - the SSE-200 which is documented in + * http://infocenter.arm.com/help/topic/com.arm.doc.101104_0100_00_en/corelink_sse200_subsystem_for_embedded_technical_reference_manual_101104_0100_00_en.pdf + * + * The IoTKit contains: * a Cortex-M33 * the IDAU * some timers and watchdogs @@ -23,6 +27,14 @@ * a security controller * a bus fabric which arranges that some parts of the address * space are secure and non-secure aliases of each other + * The SSE-200 additionally contains: + * a second Cortex-M33 + * two Message Handling Units (MHUs) + * an optional CryptoCell (which we do not model) + * more SRAM banks with associated MPCs + * multiple Power Policy Units (PPUs) + * a control interface for an icache for each CPU + * per-CPU identity and control register blocks * * QEMU interface: * + QOM property "memory" is a MemoryRegion containing the devices provided @@ -93,6 +105,7 @@ * them via the ARMSSE base class, so they have no IOTKIT() etc macros. */ #define TYPE_IOTKIT "iotkit" +#define TYPE_SSE200 "sse-200" /* We have an IRQ splitter and an OR gate input for each external PPC * and the 2 internal PPCs diff --git a/hw/arm/armsse.c b/hw/arm/armsse.c index eb691faf720..5d53071a5a0 100644 --- a/hw/arm/armsse.c +++ b/hw/arm/armsse.c @@ -50,6 +50,18 @@ static const ARMSSEInfo armsse_variants[] = { .has_cpusecctrl = false, .has_cpuid = false, }, + { + .name = TYPE_SSE200, + .sram_banks = 4, + .num_cpus = 2, + .sys_version = 0x22041743, + .sys_config_format = SSE200Format, + .has_mhus = true, + .has_ppus = true, + .has_cachectrl = true, + .has_cpusecctrl = true, + .has_cpuid = true, + }, }; static uint32_t armsse_sys_config_value(ARMSSE *s, const ARMSSEInfo *info) From patchwork Mon Jan 21 18:51:17 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 156250 Delivered-To: patches@linaro.org Received: by 2002:a02:48:0:0:0:0:0 with SMTP id 69csp6701324jaa; Mon, 21 Jan 2019 10:51:46 -0800 (PST) X-Received: by 2002:a1c:c64e:: with SMTP id w75mr601419wmf.46.1548096706204; Mon, 21 Jan 2019 10:51:46 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548096706; cv=none; d=google.com; s=arc-20160816; b=DFa+z/AGKbbuEfcH9CSryjt4cVN7a4nY1JB4dlzH0yAZ6W0PsFz6tXOMiVEjOq05H4 TwbVRVPTEic6Jf3YheBp38kUQR6sozLHya+I0foaw9RYbW2UdtItoUGHd8TpqkxpLoyu MKUbgcyTfxTmNkD/XXPgqlwwpohmyGLyHYWxxLHczcHHgJlFsXMucPq8uD/yprWSUzmg BlxG0Dy4153R2oyohLEo3QCsp9YJWJZ+4851ZeErm3ro0VYHWn2DOxu+YhQI3LM2kjSr q+79ttrJfwpawbde742f/SepZmy+0oP9XaHqOvgsPKicMXSbhJDuN82G3p/aXjbqXjr4 7R6w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=Yb+iGSLny/NNKQr0eBfsaeiJgzhFFuz8UhpvCuLEuGQ=; b=Y+J+N98trQXn9fRL6/q52OBqwnALDlbDmRNSyxC7TUAdi3gT1XmCZH3jtN3Gwrw8XL FCsL7EAv1jK1aeH+LdqqaikUPW6ybEdKP/PV0tL2NCiW6w9wkyLeDsGLEMfeGbxrzqi+ Ooz/aLM0sg9iwFDUxWXbS94xfTREFxRauI/WvJErdZjnxiFkorfTItg2FJfEv9kXkUjW 2A51Smlw77JXkQ+2ZmVIm5YhxK7u5Js0luVOClO/0Kb6CK0/uuqcb1zI8azP3/wQ2i+t hAeBrkOcsk52WAD+421EkB/hS/i3UKbFyVjoA9Y0ATW5Li0kuz1BpM1tfDtAqqx8lCcY AtMg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="A7I/5q9c"; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id t129sor32664313wmb.0.2019.01.21.10.51.45 for (Google Transport Security); Mon, 21 Jan 2019 10:51:46 -0800 (PST) Received-SPF: pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) client-ip=209.85.220.65; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="A7I/5q9c"; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Yb+iGSLny/NNKQr0eBfsaeiJgzhFFuz8UhpvCuLEuGQ=; b=A7I/5q9cXc9mckH8SWkYhVVGGpKGt1aG6AbtZF9CIN6RK69DzBblaj3ory+n/dJ3B+ wKYaW2jQpEWcdm4dIzxCA7gybsgO+QWFyUszgYWKFB2cAo41ASUlCfM7Fbg6Jdg56Gsm jwGei6/ir6KSAwMnXVJ/t3bYmn7CQI0xJ0NNM= 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:mime-version:content-transfer-encoding; bh=Yb+iGSLny/NNKQr0eBfsaeiJgzhFFuz8UhpvCuLEuGQ=; b=P01q5YaI2KM+z9h+AoGRI0ZxhaFi04XmBz/kSvjdbaJHFsNeCgfn75AZRV8Vc4YFpC kaOYdWQSDVOzLjm9OTD4wZYqwxU4f9SXZ90RufmyFfg0uMU5GFFT1P9V7vQ/H936xYfq YzcJtpeJM6K3SmoDMi0B8fwuBLNwovsYVVqBy035ovWjqoxm0plYe3b3sYzTPBsEoPJ7 BhpcgJN+5rHBpA2fHNtZ40WceEDe2SW71theygD00FgXuTr2ICLUdrRWHy6aeXd3h43i qFd25xPnRKRcU1/4cRSGPUU94bl2Mmr+zROaobzn7+zNP2UTr+3QQ0JTpKrApbv8L21P IJ+Q== X-Gm-Message-State: AJcUukeN+kqw1Q/Pr0FMX0h4+qsi1hkiT0UFKPBcBanxBQmR2RUKI3pq 9PFvl83QWjY2xaKkYBQ8aqAW6IbGO2dG8Poz X-Google-Smtp-Source: ALg8bN6yesf6W/5VfsxAPADUYmK/8rflni+KaKI1SwDDcNF35Y2zfK0E7VTwnXjz9bll+gd5mJbJQQ== X-Received: by 2002:a1c:e046:: with SMTP id x67mr558024wmg.122.1548096705604; Mon, 21 Jan 2019 10:51:45 -0800 (PST) Return-Path: Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id n82sm50386660wma.42.2019.01.21.10.51.44 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 21 Jan 2019 10:51:44 -0800 (PST) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Cc: patches@linaro.org Subject: [PATCH 22/23] hw/arm/mps2-tz: Add IRQ infrastructure to support SSE-200 Date: Mon, 21 Jan 2019 18:51:17 +0000 Message-Id: <20190121185118.18550-23-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190121185118.18550-1-peter.maydell@linaro.org> References: <20190121185118.18550-1-peter.maydell@linaro.org> MIME-Version: 1.0 In preparation for adding support for the AN521 MPS2 image, we need to handle wiring up the MPS2 device interrupt lines to both CPUs in the SSE-200, rather than just the one that the IoTKit has. Abstract out a "connect to the IoTKit interrupt line" function and make it connect to a splitter which feeds both sets of inputs for the SSE-200 case. Signed-off-by: Peter Maydell --- hw/arm/mps2-tz.c | 79 ++++++++++++++++++++++++++++++++++++------------ 1 file changed, 59 insertions(+), 20 deletions(-) -- 2.20.1 Reviewed-by: Richard Henderson diff --git a/hw/arm/mps2-tz.c b/hw/arm/mps2-tz.c index 3859f17d98b..95adcd478ab 100644 --- a/hw/arm/mps2-tz.c +++ b/hw/arm/mps2-tz.c @@ -53,8 +53,11 @@ #include "net/net.h" #include "hw/core/split-irq.h" +#define MPS2TZ_NUMIRQ 92 + typedef enum MPS2TZFPGAType { FPGA_AN505, + FPGA_AN521, } MPS2TZFPGAType; typedef struct { @@ -85,6 +88,7 @@ typedef struct { SplitIRQ sec_resp_splitter; qemu_or_irq uart_irq_orgate; DeviceState *lan9118; + SplitIRQ cpu_irq_splitter[MPS2TZ_NUMIRQ]; } MPS2TZMachineState; #define TYPE_MPS2TZ_MACHINE "mps2tz" @@ -111,6 +115,23 @@ static void make_ram_alias(MemoryRegion *mr, const char *name, memory_region_add_subregion(get_system_memory(), base, mr); } +static qemu_irq get_sse_irq_in(MPS2TZMachineState *mms, int irqno) +{ + /* Return a qemu_irq which will signal IRQ n to all CPUs in the SSE. */ + MPS2TZMachineClass *mmc = MPS2TZ_MACHINE_GET_CLASS(mms); + + assert(irqno < MPS2TZ_NUMIRQ); + + switch (mmc->fpga_type) { + case FPGA_AN505: + return qdev_get_gpio_in_named(DEVICE(&mms->iotkit), "EXP_IRQ", irqno); + case FPGA_AN521: + return qdev_get_gpio_in(DEVICE(&mms->cpu_irq_splitter[irqno]), 0); + default: + g_assert_not_reached(); + } +} + /* Most of the devices in the AN505 FPGA image sit behind * Peripheral Protection Controllers. These data structures * define the layout of which devices sit behind which PPCs. @@ -161,7 +182,6 @@ static MemoryRegion *make_uart(MPS2TZMachineState *mms, void *opaque, int txirqno = i * 2 + 1; int combirqno = i + 10; SysBusDevice *s; - DeviceState *iotkitdev = DEVICE(&mms->iotkit); DeviceState *orgate_dev = DEVICE(&mms->uart_irq_orgate); sysbus_init_child_obj(OBJECT(mms), name, uart, sizeof(mms->uart[0]), @@ -170,14 +190,11 @@ static MemoryRegion *make_uart(MPS2TZMachineState *mms, void *opaque, qdev_prop_set_uint32(DEVICE(uart), "pclk-frq", SYSCLK_FRQ); object_property_set_bool(OBJECT(uart), true, "realized", &error_fatal); s = SYS_BUS_DEVICE(uart); - sysbus_connect_irq(s, 0, qdev_get_gpio_in_named(iotkitdev, - "EXP_IRQ", txirqno)); - sysbus_connect_irq(s, 1, qdev_get_gpio_in_named(iotkitdev, - "EXP_IRQ", rxirqno)); + sysbus_connect_irq(s, 0, get_sse_irq_in(mms, txirqno)); + sysbus_connect_irq(s, 1, get_sse_irq_in(mms, rxirqno)); sysbus_connect_irq(s, 2, qdev_get_gpio_in(orgate_dev, i * 2)); sysbus_connect_irq(s, 3, qdev_get_gpio_in(orgate_dev, i * 2 + 1)); - sysbus_connect_irq(s, 4, qdev_get_gpio_in_named(iotkitdev, - "EXP_IRQ", combirqno)); + sysbus_connect_irq(s, 4, get_sse_irq_in(mms, combirqno)); return sysbus_mmio_get_region(SYS_BUS_DEVICE(uart), 0); } @@ -213,7 +230,6 @@ static MemoryRegion *make_eth_dev(MPS2TZMachineState *mms, void *opaque, const char *name, hwaddr size) { SysBusDevice *s; - DeviceState *iotkitdev = DEVICE(&mms->iotkit); NICInfo *nd = &nd_table[0]; /* In hardware this is a LAN9220; the LAN9118 is software compatible @@ -225,7 +241,7 @@ static MemoryRegion *make_eth_dev(MPS2TZMachineState *mms, void *opaque, qdev_init_nofail(mms->lan9118); s = SYS_BUS_DEVICE(mms->lan9118); - sysbus_connect_irq(s, 0, qdev_get_gpio_in_named(iotkitdev, "EXP_IRQ", 16)); + sysbus_connect_irq(s, 0, get_sse_irq_in(mms, 16)); return sysbus_mmio_get_region(s, 0); } @@ -315,12 +331,9 @@ static MemoryRegion *make_dma(MPS2TZMachineState *mms, void *opaque, s = SYS_BUS_DEVICE(dma); /* Wire up DMACINTR, DMACINTERR, DMACINTTC */ - sysbus_connect_irq(s, 0, qdev_get_gpio_in_named(iotkitdev, - "EXP_IRQ", 58 + i * 3)); - sysbus_connect_irq(s, 1, qdev_get_gpio_in_named(iotkitdev, - "EXP_IRQ", 56 + i * 3)); - sysbus_connect_irq(s, 2, qdev_get_gpio_in_named(iotkitdev, - "EXP_IRQ", 57 + i * 3)); + sysbus_connect_irq(s, 0, get_sse_irq_in(mms, 58 + i * 3)); + sysbus_connect_irq(s, 1, get_sse_irq_in(mms, 56 + i * 3)); + sysbus_connect_irq(s, 2, get_sse_irq_in(mms, 57 + i * 3)); g_free(mscname); return sysbus_mmio_get_region(s, 0); @@ -339,21 +352,20 @@ static MemoryRegion *make_spi(MPS2TZMachineState *mms, void *opaque, */ PL022State *spi = opaque; int i = spi - &mms->spi[0]; - DeviceState *iotkitdev = DEVICE(&mms->iotkit); SysBusDevice *s; sysbus_init_child_obj(OBJECT(mms), name, spi, sizeof(mms->spi[0]), TYPE_PL022); object_property_set_bool(OBJECT(spi), true, "realized", &error_fatal); s = SYS_BUS_DEVICE(spi); - sysbus_connect_irq(s, 0, - qdev_get_gpio_in_named(iotkitdev, "EXP_IRQ", 51 + i)); + sysbus_connect_irq(s, 0, get_sse_irq_in(mms, 51 + i)); return sysbus_mmio_get_region(s, 0); } static void mps2tz_common_init(MachineState *machine) { MPS2TZMachineState *mms = MPS2TZ_MACHINE(machine); + MPS2TZMachineClass *mmc = MPS2TZ_MACHINE_GET_CLASS(mms); MachineClass *mc = MACHINE_GET_CLASS(machine); MemoryRegion *system_memory = get_system_memory(); DeviceState *iotkitdev; @@ -371,11 +383,38 @@ static void mps2tz_common_init(MachineState *machine) iotkitdev = DEVICE(&mms->iotkit); object_property_set_link(OBJECT(&mms->iotkit), OBJECT(system_memory), "memory", &error_abort); - qdev_prop_set_uint32(iotkitdev, "EXP_NUMIRQ", 92); + qdev_prop_set_uint32(iotkitdev, "EXP_NUMIRQ", MPS2TZ_NUMIRQ); qdev_prop_set_uint32(iotkitdev, "MAINCLK", SYSCLK_FRQ); object_property_set_bool(OBJECT(&mms->iotkit), true, "realized", &error_fatal); + /* + * The AN521 needs us to create splitters to feed the IRQ inputs + * for each CPU in the SSE-200 from each device in the board. + */ + if (mmc->fpga_type == FPGA_AN521) { + for (i = 0; i < MPS2TZ_NUMIRQ; i++) { + char *name = g_strdup_printf("mps2-irq-splitter%d", i); + SplitIRQ *splitter = &mms->cpu_irq_splitter[i]; + + object_initialize_child(OBJECT(machine), name, + splitter, sizeof(*splitter), + TYPE_SPLIT_IRQ, &error_fatal, NULL); + g_free(name); + + object_property_set_int(OBJECT(splitter), 2, "num-lines", + &error_fatal); + object_property_set_bool(OBJECT(splitter), true, "realized", + &error_fatal); + qdev_connect_gpio_out(DEVICE(splitter), 0, + qdev_get_gpio_in_named(DEVICE(&mms->iotkit), + "EXP_IRQ", i)); + qdev_connect_gpio_out(DEVICE(splitter), 1, + qdev_get_gpio_in_named(DEVICE(&mms->iotkit), + "EXP_CPU1_IRQ", i)); + } + } + /* The sec_resp_cfg output from the IoTKit must be split into multiple * lines, one for each of the PPCs we create here, plus one per MSC. */ @@ -426,7 +465,7 @@ static void mps2tz_common_init(MachineState *machine) object_property_set_bool(OBJECT(&mms->uart_irq_orgate), true, "realized", &error_fatal); qdev_connect_gpio_out(DEVICE(&mms->uart_irq_orgate), 0, - qdev_get_gpio_in_named(iotkitdev, "EXP_IRQ", 15)); + get_sse_irq_in(mms, 15)); /* Most of the devices in the FPGA are behind Peripheral Protection * Controllers. The required order for initializing things is: From patchwork Mon Jan 21 18:51:18 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 156251 Delivered-To: patches@linaro.org Received: by 2002:a02:48:0:0:0:0:0 with SMTP id 69csp6701336jaa; Mon, 21 Jan 2019 10:51:47 -0800 (PST) X-Received: by 2002:adf:bb44:: with SMTP id x4mr30605081wrg.24.1548096707159; Mon, 21 Jan 2019 10:51:47 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548096707; cv=none; d=google.com; s=arc-20160816; b=L7ubaw7Qqmu/MulYdz5txNMb0FKVCb5+LnI7Qwr0jUjDpryrAObtGyrLK5L1Cbe94C /PsLZJZ0dPC7+jV9U6z//ixMNl4Up37tfL1sLA23/gTTk9X40vcWk+2JoiAEqd7il/ze GP8O6IGzQy5xNgFWAD5ih46CbMTgB9gO93+xSo7WFeYcH7g/0xKjcfUdhhT+07Glkikc wqW/4FacOxXk5CrtERUtdlYA6v/yS7zEh8+Yr+y8r7QW3kSqz4KuUYuzhv02353zdRNu PneQm5my8iO1CzmOAbaPSBP0QBRdJGci22oc5S3dTq6DbS9QIdOa5de4AGd0YkX/rDsq 8GxQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=JNtduwYQb9S31DnKOmDqWMP8TZCY2KnxF33CO6L/1os=; b=qMb6p3U6KSI+7JVRSJkgye/9UldNsOYYpVQ8jmXWg1cZgdkUKMBkkVq9L/C+5pl9hw Dw8n51z6POY84HCyOYlZFpwzmzlp/gNpe8/ZDo9QZVfl6+AjH3ecm88D58Y9JhyiI1kJ acNdGQRos4x9VDe5bGGHwccFUHKfbVRjvKDGHoJhTeSvGUUxM5EbriX8OwoteatMMwdj mUJP3tmEdhYzjgFIiYPTCCHTi0L61Yl/rs4ql4/QYYIKHHEdk2IzuEvauZ93RMocOJZS vTxD8evjtDXjSGCouIUkmQ5y45V16whcKT3e/OrIQwlKANLdrGnc2hinIh/kvVx95WNF j3RA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=UmFxpTCy; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id y72sor32873335wme.1.2019.01.21.10.51.47 for (Google Transport Security); Mon, 21 Jan 2019 10:51:47 -0800 (PST) Received-SPF: pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) client-ip=209.85.220.65; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=UmFxpTCy; spf=pass (google.com: domain of peter.maydell@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=peter.maydell@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=JNtduwYQb9S31DnKOmDqWMP8TZCY2KnxF33CO6L/1os=; b=UmFxpTCyQNPsd5yCz3IUG6NDUQgDTjtRNvrJkg/jl0KKO9fLl6vg6uJsaM+7eIVoOC Oze52UFN9sCOQqMHMzDYLIvmT6oMGkaY8HzgYdEp+f9QGE+hqqQeLrJ0zDb7uPapXqMw EHeR8uZdmLNyhUH7P/18x96aaILmDt8Nwxweo= 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:mime-version:content-transfer-encoding; bh=JNtduwYQb9S31DnKOmDqWMP8TZCY2KnxF33CO6L/1os=; b=IirLKnUJQkXzpPWMly5zFKda/1iNLLUfro5E5jUSZ1n8x0zqwE9lXIIN0aD3PMe+ad 9ytuGNEkuTfV+WWX2ZBKBEH5sUc0PcnRybLZSff7eykqMdN0AJYnEf1mJx9BQnpklCZZ kJt5mUx1SPfrSGI3GzYXSh37tbolx+/CiCaKGWViMDpKuzWzEEszD3/OHsL63FwEQpTt WVfuJt113wIJz0/mNIRfs6z/kJ0+m/KGuE1ml+Lo2Q228L6WDhLgdVZ2rJ4ti+PrShUC 7dOYJhsGZA3R+iZI7fxNgUkqqzYCtvohoz2YOtyd4Z3ftfK19VCmHqNlxjfD0agngO/L KYoQ== X-Gm-Message-State: AJcUukfPlNM+LaJySGazS5Hg6P696NGysm+pDprpGobhSRJ9dVymefT+ MsEqqvPuA82fRCvFDBsDl8mJRTrcNoM7pJyr X-Google-Smtp-Source: ALg8bN69eiRqlsu349udfgkapvP9rtlYzrrbqAcJPe9kkJfgGAjBPd7BDEtg37MjdCYsq+HZZFuJaQ== X-Received: by 2002:a1c:d74a:: with SMTP id o71mr531544wmg.73.1548096706692; Mon, 21 Jan 2019 10:51:46 -0800 (PST) Return-Path: Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id n82sm50386660wma.42.2019.01.21.10.51.45 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 21 Jan 2019 10:51:46 -0800 (PST) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Cc: patches@linaro.org Subject: [PATCH 23/23] hw/arm/mps2-tz: Add mps2-an521 model Date: Mon, 21 Jan 2019 18:51:18 +0000 Message-Id: <20190121185118.18550-24-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190121185118.18550-1-peter.maydell@linaro.org> References: <20190121185118.18550-1-peter.maydell@linaro.org> MIME-Version: 1.0 Add a model of the MPS2 FPGA image described in Application Note AN521. This is identical to the AN505 image, except that it uses the SSE-200 rather than the IoTKit and so has two Cortex-M33 CPUs. Signed-off-by: Peter Maydell --- hw/arm/mps2-tz.c | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) -- 2.20.1 Reviewed-by: Richard Henderson diff --git a/hw/arm/mps2-tz.c b/hw/arm/mps2-tz.c index 95adcd478ab..f5f0b0e0fa5 100644 --- a/hw/arm/mps2-tz.c +++ b/hw/arm/mps2-tz.c @@ -15,6 +15,7 @@ * as seen by the guest depend significantly on the FPGA image. * This source file covers the following FPGA images, for TrustZone cores: * "mps2-an505" -- Cortex-M33 as documented in ARM Application Note AN505 + * "mps2-an521" -- Dual Cortex-M33 as documented in Application Note AN521 * * Links to the TRM for the board itself and to the various Application * Notes which document the FPGA images can be found here: @@ -24,10 +25,16 @@ * http://infocenter.arm.com/help/topic/com.arm.doc.100112_0200_06_en/versatile_express_cortex_m_prototyping_systems_v2m_mps2_and_v2m_mps2plus_technical_reference_100112_0200_06_en.pdf * Application Note AN505: * http://infocenter.arm.com/help/topic/com.arm.doc.dai0505b/index.html + * Application Note AN521: + * http://infocenter.arm.com/help/topic/com.arm.doc.dai0521c/index.html * * The AN505 defers to the Cortex-M33 processor ARMv8M IoT Kit FVP User Guide * (ARM ECM0601256) for the details of some of the device layout: * http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ecm0601256/index.html + * Similarly, the AN521 uses the SSE-200, and the SSE-200 TRM defines + * most of the device layout: + * http://infocenter.arm.com/help/topic/com.arm.doc.101104_0100_00_en/corelink_sse200_subsystem_for_embedded_technical_reference_manual_101104_0100_00_en.pdf + * */ #include "qemu/osdep.h" @@ -64,6 +71,7 @@ typedef struct { MachineClass parent; MPS2TZFPGAType fpga_type; uint32_t scc_id; + const char *armsse_type; } MPS2TZMachineClass; typedef struct { @@ -93,6 +101,7 @@ typedef struct { #define TYPE_MPS2TZ_MACHINE "mps2tz" #define TYPE_MPS2TZ_AN505_MACHINE MACHINE_TYPE_NAME("mps2-an505") +#define TYPE_MPS2TZ_AN521_MACHINE MACHINE_TYPE_NAME("mps2-an521") #define MPS2TZ_MACHINE(obj) \ OBJECT_CHECK(MPS2TZMachineState, obj, TYPE_MPS2TZ_MACHINE) @@ -379,7 +388,7 @@ static void mps2tz_common_init(MachineState *machine) } sysbus_init_child_obj(OBJECT(machine), "iotkit", &mms->iotkit, - sizeof(mms->iotkit), TYPE_IOTKIT); + sizeof(mms->iotkit), mmc->armsse_type); iotkitdev = DEVICE(&mms->iotkit); object_property_set_link(OBJECT(&mms->iotkit), OBJECT(system_memory), "memory", &error_abort); @@ -632,7 +641,6 @@ static void mps2tz_class_init(ObjectClass *oc, void *data) IDAUInterfaceClass *iic = IDAU_INTERFACE_CLASS(oc); mc->init = mps2tz_common_init; - mc->max_cpus = 1; iic->check = mps2_tz_idau_check; } @@ -642,9 +650,28 @@ static void mps2tz_an505_class_init(ObjectClass *oc, void *data) MPS2TZMachineClass *mmc = MPS2TZ_MACHINE_CLASS(oc); mc->desc = "ARM MPS2 with AN505 FPGA image for Cortex-M33"; + mc->default_cpus = 1; + mc->min_cpus = mc->default_cpus; + mc->max_cpus = mc->default_cpus; mmc->fpga_type = FPGA_AN505; mc->default_cpu_type = ARM_CPU_TYPE_NAME("cortex-m33"); mmc->scc_id = 0x41045050; + mmc->armsse_type = TYPE_IOTKIT; +} + +static void mps2tz_an521_class_init(ObjectClass *oc, void *data) +{ + MachineClass *mc = MACHINE_CLASS(oc); + MPS2TZMachineClass *mmc = MPS2TZ_MACHINE_CLASS(oc); + + mc->desc = "ARM MPS2 with AN521 FPGA image for dual Cortex-M33"; + mc->default_cpus = 2; + mc->min_cpus = mc->default_cpus; + mc->max_cpus = mc->default_cpus; + mmc->fpga_type = FPGA_AN521; + mc->default_cpu_type = ARM_CPU_TYPE_NAME("cortex-m33"); + mmc->scc_id = 0x41045210; + mmc->armsse_type = TYPE_SSE200; } static const TypeInfo mps2tz_info = { @@ -666,10 +693,17 @@ static const TypeInfo mps2tz_an505_info = { .class_init = mps2tz_an505_class_init, }; +static const TypeInfo mps2tz_an521_info = { + .name = TYPE_MPS2TZ_AN521_MACHINE, + .parent = TYPE_MPS2TZ_MACHINE, + .class_init = mps2tz_an521_class_init, +}; + static void mps2tz_machine_init(void) { type_register_static(&mps2tz_info); type_register_static(&mps2tz_an505_info); + type_register_static(&mps2tz_an521_info); } type_init(mps2tz_machine_init);