From patchwork Wed Jan 18 22:38:16 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Artyom Tarasenko X-Patchwork-Id: 716875 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 3v3hkt0SCCz9t1C for ; Thu, 19 Jan 2017 09:40:38 +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="U6ed/Qki"; dkim-atps=neutral Received: from localhost ([::1]:44785 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cTyuB-0007VW-F8 for incoming@patchwork.ozlabs.org; Wed, 18 Jan 2017 17:40:35 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36679) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cTysq-0006H3-2z for qemu-devel@nongnu.org; Wed, 18 Jan 2017 17:39:13 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cTysp-0002XI-2Q for qemu-devel@nongnu.org; Wed, 18 Jan 2017 17:39:12 -0500 Received: from mail-wm0-x241.google.com ([2a00:1450:400c:c09::241]:33176) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1cTyso-0002Wu-Ph for qemu-devel@nongnu.org; Wed, 18 Jan 2017 17:39:11 -0500 Received: by mail-wm0-x241.google.com with SMTP id r144so7565917wme.0 for ; Wed, 18 Jan 2017 14:39:10 -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=5DmSYfCM28itnsNVAL2KmHZRXsfOFdinviXdTSR7E48=; b=U6ed/QkiMMuNrSHgImGrKiYUjhGDG/1y07fMLmtyaGOkPwGtAgLNJiXFY4YalMJoWB tIQBNXnhL22FY4yg1mnFO6hfRKSezNnw19YnMKq/z1VWQIk1FX2W87lJJnJF9OnoFfJ6 B/xC5PNRXnnf3mojOxthN9qBCmbJ56tSFf66lUKjs6QSVrsB8GoVaHSrmg6keQn2zxtj YLls8t0idW0Ah4ZEvvZKx2UY8P0iLRTsHjEvl28pZeCJKkLoOUBSuRnN4a0EnO8m9f5J 51Tc+9UIiN2KhD5KADmhexk05ZGzFLFSMW92T3BZvB9TENDrd3JmPxIkZ7FgBLl5XIvJ pOtw== 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=5DmSYfCM28itnsNVAL2KmHZRXsfOFdinviXdTSR7E48=; b=H18ni4yn0WiT27u/mYzc1cPXEPy/eP+lwor2BnjyRowK9xJ30ULy8f9puoa8A7kKlS y2P8SRotb3+3K/OFGU5W9embZ68DRnP4ZOpqfMiglLjN0Sf+eNQEOw1S5/V1qTSDMzvH iODbdMYhNJMZA7x5uMK3wGtYabsf2JJukeJIoymjGJ+yhtjuNpnKGGIj45/6edgSWPro P4aArUt3s4uolpQ0zVjBoBqKtJHWM2xKSmK2xYpNEbDVqCQPWk8tzveaZkpaiFxGMQmL GhnWlFFXSrn5nGHKQOKIkw1VCi44aZUpZbK+c4CCfGoJGtVRqmCxpUNlfIlw2JLJCw+A EY3A== X-Gm-Message-State: AIkVDXIv+LxBBpyRbFFVLVLo7uOEUyLSeewLxoxgBRsX4SxDNZz6w2wB7Zj4GOm0cdcZlQ== X-Received: by 10.223.160.14 with SMTP id k14mr5341738wrk.69.1484779149760; Wed, 18 Jan 2017 14:39:09 -0800 (PST) Received: from localhost (x4e33e2b8.dyn.telefonica.de. [78.51.226.184]) by smtp.gmail.com with ESMTPSA id a186sm48497900wmh.1.2017.01.18.14.39.08 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 18 Jan 2017 14:39:09 -0800 (PST) From: Artyom Tarasenko To: peter.maydell@linaro.org Date: Wed, 18 Jan 2017 23:38:16 +0100 Message-Id: <1484779123-18968-4-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::241 Subject: [Qemu-devel] [PULL 03/30] target-sparc: use explicit mmu register pointers 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" Use explicit register pointers while accessing D/I-MMU registers. Call cpu_unassigned_access on access to missing registers. Signed-off-by: Artyom Tarasenko Reviewed-by: Richard Henderson --- target/sparc/cpu.h | 4 +++ target/sparc/ldst_helper.c | 66 +++++++++++++++++++++++++++++++++++++--------- 2 files changed, 58 insertions(+), 12 deletions(-) diff --git a/target/sparc/cpu.h b/target/sparc/cpu.h index 1e65c94..10c9ac6 100644 --- a/target/sparc/cpu.h +++ b/target/sparc/cpu.h @@ -446,6 +446,8 @@ struct CPUSPARCState { uint64_t sfar; uint64_t tsb; uint64_t tag_access; + uint64_t virtual_watchpoint; + uint64_t physical_watchpoint; } immu; }; union { @@ -458,6 +460,8 @@ struct CPUSPARCState { uint64_t sfar; uint64_t tsb; uint64_t tag_access; + uint64_t virtual_watchpoint; + uint64_t physical_watchpoint; } dmmu; }; SparcTLBEntry itlb[64]; diff --git a/target/sparc/ldst_helper.c b/target/sparc/ldst_helper.c index e479efd..20e202b 100644 --- a/target/sparc/ldst_helper.c +++ b/target/sparc/ldst_helper.c @@ -1220,14 +1220,25 @@ uint64_t helper_ld_asi(CPUSPARCState *env, target_ulong addr, case ASI_IMMU: /* I-MMU regs */ { int reg = (addr >> 3) & 0xf; - - if (reg == 0) { - /* I-TSB Tag Target register */ + switch (reg) { + case 0: + /* 0x00 I-TSB Tag Target register */ ret = ultrasparc_tag_target(env->immu.tag_access); - } else { - ret = env->immuregs[reg]; + break; + case 3: /* SFSR */ + ret = env->immu.sfsr; + break; + case 5: /* TSB access */ + ret = env->immu.tsb; + break; + case 6: + /* 0x30 I-TSB Tag Access register */ + ret = env->immu.tag_access; + break; + default: + cpu_unassigned_access(cs, addr, false, false, 1, size); + ret = 0; } - break; } case ASI_IMMU_TSB_8KB_PTR: /* I-MMU 8k TSB pointer */ @@ -1263,12 +1274,38 @@ uint64_t helper_ld_asi(CPUSPARCState *env, target_ulong addr, case ASI_DMMU: /* D-MMU regs */ { int reg = (addr >> 3) & 0xf; - - if (reg == 0) { - /* D-TSB Tag Target register */ + switch (reg) { + case 0: + /* 0x00 D-TSB Tag Target register */ ret = ultrasparc_tag_target(env->dmmu.tag_access); - } else { - ret = env->dmmuregs[reg]; + break; + case 1: /* 0x08 Primary Context */ + ret = env->dmmu.mmu_primary_context; + break; + case 2: /* 0x10 Secondary Context */ + ret = env->dmmu.mmu_secondary_context; + break; + case 3: /* SFSR */ + ret = env->dmmu.sfsr; + break; + case 4: /* 0x20 SFAR */ + ret = env->dmmu.sfar; + break; + case 5: /* 0x28 TSB access */ + ret = env->dmmu.tsb; + break; + case 6: /* 0x30 D-TSB Tag Access register */ + ret = env->dmmu.tag_access; + break; + case 7: + ret = env->dmmu.virtual_watchpoint; + break; + case 8: + ret = env->dmmu.physical_watchpoint; + break; + default: + cpu_unassigned_access(cs, addr, false, false, 1, size); + ret = 0; } break; } @@ -1456,6 +1493,7 @@ void helper_st_asi(CPUSPARCState *env, target_ulong addr, target_ulong val, case 8: return; default: + cpu_unassigned_access(cs, addr, true, false, 1, size); break; } @@ -1526,9 +1564,13 @@ void helper_st_asi(CPUSPARCState *env, target_ulong addr, target_ulong val, env->dmmu.tag_access = val; break; case 7: /* Virtual Watchpoint */ + env->dmmu.virtual_watchpoint = val; + break; case 8: /* Physical Watchpoint */ + env->dmmu.physical_watchpoint = val; + break; default: - env->dmmuregs[reg] = val; + cpu_unassigned_access(cs, addr, true, false, 1, size); break; }