From patchwork Wed Jan 18 22:38:21 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Artyom Tarasenko X-Patchwork-Id: 716882 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 3v3hr04TZFz9stc for ; Thu, 19 Jan 2017 09:45:04 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="EF1OhA5T"; dkim-atps=neutral Received: from localhost ([::1]:44805 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cTyyT-0002p9-UD for incoming@patchwork.ozlabs.org; Wed, 18 Jan 2017 17:45:02 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36833) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cTyt1-0006Ql-3m for qemu-devel@nongnu.org; Wed, 18 Jan 2017 17:39:24 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cTyt0-0002e0-B7 for qemu-devel@nongnu.org; Wed, 18 Jan 2017 17:39:23 -0500 Received: from mail-wm0-x243.google.com ([2a00:1450:400c:c09::243]:34295) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1cTyt0-0002dU-5Y for qemu-devel@nongnu.org; Wed, 18 Jan 2017 17:39:22 -0500 Received: by mail-wm0-x243.google.com with SMTP id c85so7556628wmi.1 for ; Wed, 18 Jan 2017 14:39:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=3Vma2GF0jYkksy6U7N9hcoJgs2CO96j58o6wN/FyQdY=; b=EF1OhA5TWvsk33MNwCYZlDlSzoD3WNUk6ears6mWWQ4r7onBHIxhf4tXZ/Jag6IY7j RvQgCdgF017TO/VD0mmbvo92BxSd7YLm3OXgaRvibL2ZXDb4HqmQhhJnWjoMp1kcJw5s pYrA2U5wsGQbzwQkcaqXvqT66ySDrDYkICBDv08GxssVwWrSPyS6lQA/djwWuPry7RBk 4v3JFG1jx0R+yYLEUj5g/r+yTrFbKacyu11NQiqaAhaSXfi/iFv9pZZAzk5glK/qwAjO Koe/H+VE7oMirQKJdONi3RfH+Yi+mXsFAzb8qmS4x2hdifqEzU+C2oT4vSnPFzd9Y6e4 2jpA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=3Vma2GF0jYkksy6U7N9hcoJgs2CO96j58o6wN/FyQdY=; b=Dr84pE1qp/iJpPzJ7NKaD446h6o3ZqQw+SLnA7DsYuEHZ4JWKF9hv329/S+jqaspee pJEdVc3g/p0g8w9kAX3wclL+RUwnHgnGmzHQcImHlaqYM8hXYkZA/f0GAdKZxsjj98Sc 2l2sF3NVPMQ8PWr54KJ9yheHoxsnWECxjYWOHwdNPfhEBpL2QxqY/KP+E6CPLL+ZbcU6 EuZ3buvYExxiRcMcibfFRVJD1luXgbcyNgx0cNTeuCmRIXAArNAfDZa1+71isSu4Fq1U m2V00YNhF246zQTDsQxNuJ8KONr0PKqSk4G8IdWrRpPuk9WxMagyEl8mCyb8LOKu0EAh jubg== X-Gm-Message-State: AIkVDXKt8RCSqKXBYDF9MaclAhuCCBM08P8WvJKZ/cI/c8W7wUMlV0vawWsr9VKiAiZnVQ== X-Received: by 10.223.161.222 with SMTP id v30mr5368377wrv.114.1484779161030; Wed, 18 Jan 2017 14:39:21 -0800 (PST) Received: from localhost (x4e33e2b8.dyn.telefonica.de. [78.51.226.184]) by smtp.gmail.com with ESMTPSA id a186sm48498913wmh.1.2017.01.18.14.39.20 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 18 Jan 2017 14:39:20 -0800 (PST) From: Artyom Tarasenko To: peter.maydell@linaro.org Date: Wed, 18 Jan 2017 23:38:21 +0100 Message-Id: <1484779123-18968-9-git-send-email-atar4qemu@gmail.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1484779123-18968-1-git-send-email-atar4qemu@gmail.com> References: <1484779123-18968-1-git-send-email-atar4qemu@gmail.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2a00:1450:400c:c09::243 Subject: [Qemu-devel] [PULL 08/30] target-sparc: implement UA2005 scratchpad registers X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: mark.cave-ayland@ilande.co.uk, qemu-devel@nongnu.org, Artyom Tarasenko , rth@twiddle.net Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Artyom Tarasenko --- target/sparc/asi.h | 1 + target/sparc/cpu.h | 1 + target/sparc/ldst_helper.c | 24 ++++++++++++++++++++++++ 3 files changed, 26 insertions(+) diff --git a/target/sparc/asi.h b/target/sparc/asi.h index c9a1849..d8d6284 100644 --- a/target/sparc/asi.h +++ b/target/sparc/asi.h @@ -211,6 +211,7 @@ #define ASI_AFSR 0x4c /* Async fault status register */ #define ASI_AFAR 0x4d /* Async fault address register */ #define ASI_EC_TAG_DATA 0x4e /* E-cache tag/valid ram diag acc */ +#define ASI_HYP_SCRATCHPAD 0x4f /* (4V) Hypervisor scratchpad */ #define ASI_IMMU 0x50 /* Insn-MMU main register space */ #define ASI_IMMU_TSB_8KB_PTR 0x51 /* Insn-MMU 8KB TSB pointer reg */ #define ASI_IMMU_TSB_64KB_PTR 0x52 /* Insn-MMU 64KB TSB pointer reg */ diff --git a/target/sparc/cpu.h b/target/sparc/cpu.h index 21fe0d1..9307b91 100644 --- a/target/sparc/cpu.h +++ b/target/sparc/cpu.h @@ -523,6 +523,7 @@ struct CPUSPARCState { uint32_t gl; // UA2005 /* UA 2005 hyperprivileged registers */ uint64_t hpstate, htstate[MAXTL_MAX], hintp, htba, hver, hstick_cmpr, ssr; + uint64_t scratch[8]; CPUTimer *hstick; // UA 2005 /* Interrupt vector registers */ uint64_t ivec_status; diff --git a/target/sparc/ldst_helper.c b/target/sparc/ldst_helper.c index 7a134b3..2e6439a 100644 --- a/target/sparc/ldst_helper.c +++ b/target/sparc/ldst_helper.c @@ -1351,6 +1351,18 @@ uint64_t helper_ld_asi(CPUSPARCState *env, target_ulong addr, } break; } + case ASI_SCRATCHPAD: /* UA2005 privileged scratchpad */ + if (unlikely((addr >= 0x20) && (addr < 0x30))) { + /* Hyperprivileged access only */ + cpu_unassigned_access(cs, addr, false, false, 1, size); + } + /* fall through */ + case ASI_HYP_SCRATCHPAD: /* UA2005 hyperprivileged scratchpad */ + { + unsigned int i = (addr >> 3) & 0x7; + ret = env->scratch[i]; + break; + } case ASI_DCACHE_DATA: /* D-cache data */ case ASI_DCACHE_TAG: /* D-cache tag access */ case ASI_ESTATE_ERROR_EN: /* E-cache error enable */ @@ -1603,6 +1615,18 @@ void helper_st_asi(CPUSPARCState *env, target_ulong addr, target_ulong val, case ASI_INTR_RECEIVE: /* Interrupt data receive */ env->ivec_status = val & 0x20; return; + case ASI_SCRATCHPAD: /* UA2005 privileged scratchpad */ + if (unlikely((addr >= 0x20) && (addr < 0x30))) { + /* Hyperprivileged access only */ + cpu_unassigned_access(cs, addr, true, false, 1, size); + } + /* fall through */ + case ASI_HYP_SCRATCHPAD: /* UA2005 hyperprivileged scratchpad */ + { + unsigned int i = (addr >> 3) & 0x7; + env->scratch[i] = val; + return; + } case ASI_DCACHE_DATA: /* D-cache data */ case ASI_DCACHE_TAG: /* D-cache tag access */ case ASI_ESTATE_ERROR_EN: /* E-cache error enable */