From patchwork Wed Apr 15 16:02:18 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Greg Bellows X-Patchwork-Id: 461584 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 140521401DE for ; Thu, 16 Apr 2015 02:08:17 +1000 (AEST) Received: from localhost ([::1]:32983 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YiPrK-0002AU-3t for incoming@patchwork.ozlabs.org; Wed, 15 Apr 2015 12:08:14 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52443) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YiPmr-00037Y-67 for qemu-devel@nongnu.org; Wed, 15 Apr 2015 12:03:41 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YiPml-00023j-Ub for qemu-devel@nongnu.org; Wed, 15 Apr 2015 12:03:37 -0400 Received: from mail-oi0-f47.google.com ([209.85.218.47]:33608) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YiPml-00023f-Q1 for qemu-devel@nongnu.org; Wed, 15 Apr 2015 12:03:31 -0400 Received: by oica37 with SMTP id a37so26941350oic.0 for ; Wed, 15 Apr 2015 09:03:31 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=RdEAOGsEe+BCHu7gVB+0X3xGU8CACUDQoYQkUC0OVP4=; b=OIey+A5xMOe2TdBXGlZ/tBpgndDri4iwQ9aunOXlaGVhmpRpZogd7EIM/J4YxPHLJG M9weZA0Ck+D8frvmu6aWsLkk9c0/7n6Gj9LYN+9b5FiarBMXvmSl0MCGTzS1AdeOFMIE cpwQ8FXIbPPXsMRIuV2j+6eITwW28z0hNaCJ+xdISfHO7UNqFH2GhX0v15K9YmMgWHNN TuatNrZyihR4V6J9imKo0CHydCY/M8gOGXG/AngKL6mib0Y4ihofLBDIsMCU1WfztIL9 xlmtLrm4Tau8ZdbTWka+C9Kcm3YVko0UZiTqMlhUyEo/j0arf4xqNZmrVvuzM8oqrIWS xrDw== X-Gm-Message-State: ALoCoQlNVDkGL7ZAZc5WGuGsnWSAlLelg8m3GoNhmd3bmbzG9NDFtkF9QOhuuKVAydfLVZyuZbbL X-Received: by 10.182.227.132 with SMTP id sa4mr21726655obc.40.1429113772497; Wed, 15 Apr 2015 09:02:52 -0700 (PDT) Received: from gbellows-linaro.gateway.pace.com (99-179-1-214.lightspeed.austtx.sbcglobal.net. [99.179.1.214]) by mx.google.com with ESMTPSA id x142sm2567707oie.19.2015.04.15.09.02.50 (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 15 Apr 2015 09:02:51 -0700 (PDT) From: Greg Bellows To: qemu-devel@nongnu.org, peter.maydell@linaro.org Date: Wed, 15 Apr 2015 11:02:18 -0500 Message-Id: <1429113742-8371-13-git-send-email-greg.bellows@linaro.org> X-Mailer: git-send-email 1.8.3.2 In-Reply-To: <1429113742-8371-1-git-send-email-greg.bellows@linaro.org> References: <1429113742-8371-1-git-send-email-greg.bellows@linaro.org> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.85.218.47 Cc: Fabian Aggeler , Greg Bellows Subject: [Qemu-devel] [PATCH v3 12/16] hw/intc/arm_gic: Change behavior of EOIR writes X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org From: Fabian Aggeler Grouping (GICv2) and Security Extensions change the behavior of EOIR writes. Completing Group0 interrupts is only allowed from Secure state and completing Group1 interrupts from Secure state is only allowed if AckCtl bit is set. Signed-off-by: Fabian Aggeler Signed-off-by: Greg Bellows --- v1 -> v2 - Fix issue with EOIR writes involving AckCtl. AckCtl is ignored on EOIR group 1 interrupts when non-secure. Group 1 interrupts are only ignored when secure and AckCTl is clear. --- hw/intc/arm_gic.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/hw/intc/arm_gic.c b/hw/intc/arm_gic.c index d6f8dae..1ba4dfd 100644 --- a/hw/intc/arm_gic.c +++ b/hw/intc/arm_gic.c @@ -384,6 +384,21 @@ void gic_complete_irq(GICState *s, int cpu, int irq) GIC_SET_PENDING(irq, cm); update = 1; } + } else if ((s->revision >= 2 && !s->security_extn) + || (s->security_extn && !ns_access())) { + /* Handle GICv2 without Security Extensions or GIC with Security + * Extensions and a secure write. + */ + if (!GIC_TEST_GROUP0(irq, cm) && !ns_access() + && !(s->cpu_control[cpu][0] & GICC_CTLR_S_ACK_CTL)) { + /* Unpredictable. We choose to ignore. */ + DPRINTF("EOI for Group1 interrupt %d ignored " + "(AckCtl disabled)\n", irq); + return; + } + } else if (s->security_extn && ns_access() && GIC_TEST_GROUP0(irq, cm)) { + DPRINTF("Non-secure EOI for Group0 interrupt %d ignored\n", irq); + return; } if (irq != s->running_irq[cpu]) {