From patchwork Thu Nov 2 01:55:35 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 833174 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3yS7bM6ycFz9t2V for ; Thu, 2 Nov 2017 13:00:47 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="hc93ueWf"; dkim-atps=neutral Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 3yS7bM4zTKzDr6s for ; Thu, 2 Nov 2017 13:00:47 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="hc93ueWf"; dkim-atps=neutral X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:400e:c00::244; helo=mail-pf0-x244.google.com; envelope-from=npiggin@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="hc93ueWf"; dkim-atps=neutral Received: from mail-pf0-x244.google.com (mail-pf0-x244.google.com [IPv6:2607:f8b0:400e:c00::244]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 3yS7Tg5sb4zDqlM for ; Thu, 2 Nov 2017 12:55:51 +1100 (AEDT) Received: by mail-pf0-x244.google.com with SMTP id b79so3382007pfk.5 for ; Wed, 01 Nov 2017 18:55:51 -0700 (PDT) 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=QEGdcpeAphUOFeVQTV7+HddnHDefceZg7L7hqwrrd6U=; b=hc93ueWfNWJCWtlipMhRHiJs6NCeOtchXJ828zVraggZQhFJKDKtEkwzYxp6U4uLNP M84F99NSs7A61WNHiP8fB6x8KqZ5hRe6xfmjrpukl2WpcJkp+wlwedcdt9TcH2xxkFsx +6SGLApjiY9PxIa5X9BkjEf2TdYT8ZdSSYp3dX1V60SowC2uatgTRoTiCfjFEu2rvXmN p+G+R2KRM6Vbe+46u8tAeHNietYBRWbafijj/2KeT4EgJerxp8q5IzGAyuUQ33Zdnicu pQtzPGDOgZqheTz5uUzrPLSMhQn6iKX66e50qgMmeP5gYdn4xhQ2rlR+OST84/c5QwG/ UPjw== 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=QEGdcpeAphUOFeVQTV7+HddnHDefceZg7L7hqwrrd6U=; b=QHk2btu5/K4WLJ1mr4C7FJlNX+aqwXWTZxdYBwu71C1AAvb8hp/rvOGXpoVgzMOkZM j6xj1lw1xTgzW/wqJzhMD5c6ZAtUaO+dC1jYCOIYw25ygj1BSE3w1dovWRqPeBxS/XNx XJuV8tGxjm59lCv6h11DUY2XUzgPOGeFbb8cpIXkEk5Wh7ktc2VRc1GEWVrB2Rjf7lZT Li0BFtXNsKVRV2F8vaa/+YHLjOlOR/kWMrfKOM7n+lB5Tk3LuSNKS/J4XJC+lZxORQwt r2/ICdviAsGGnNoMRMPgbReGbp5O+e/Q2INcq8tHs3jK8WY+fD3CeWaZocJj6TViCLd8 no/w== X-Gm-Message-State: AMCzsaVMwIzfjqscZxt2E4zD8p44H1TfYCWmfvjaYXnCW+gZCULpQHBo 2lWxU2wBI93l8pIj3QLEmpQ0Pg== X-Google-Smtp-Source: ABhQp+QMNQGXhpJzlm+cn6KXXUbeuG24nTIhFsUIxmUvrUiZGD5Jv4eNlr2Sb1AgoZ+XodD5KS1S5w== X-Received: by 10.159.207.129 with SMTP id z1mr1553420plo.174.1509587749537; Wed, 01 Nov 2017 18:55:49 -0700 (PDT) Received: from roar.ozlabs.ibm.com ([122.99.82.10]) by smtp.gmail.com with ESMTPSA id 85sm3153117pfz.119.2017.11.01.18.55.47 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 01 Nov 2017 18:55:48 -0700 (PDT) From: Nicholas Piggin To: linuxppc-dev@lists.ozlabs.org Subject: [PATCH v2 2/2] powerpc/64s: idle skip POWER9 DD1 and DD2.0 specific workarounds on DD2.1 Date: Thu, 2 Nov 2017 12:55:35 +1100 Message-Id: <20171102015535.30843-3-npiggin@gmail.com> X-Mailer: git-send-email 2.15.0 In-Reply-To: <20171102015535.30843-1-npiggin@gmail.com> References: <20171102015535.30843-1-npiggin@gmail.com> X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.24 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Nicholas Piggin Errors-To: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" DD2.1 does not have to flush the ERAT after a state-loss idle. It also does not have to save and restore MMCR0 (although it does have to save restore in deep idle states, like other PMU registers). Performance testing was done on a DD2.1 using only the stop0 idle state (the shallowest state which supports state loss), using context_switch selftest configured to ping-poing between two threads on the same core and two different cores. Performance improvement for same core is 7.0%, different cores is 14.8%. Reviewed-by: Vaidyanathan Srinivasan Signed-off-by: Nicholas Piggin --- arch/powerpc/kernel/idle_book3s.S | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/arch/powerpc/kernel/idle_book3s.S b/arch/powerpc/kernel/idle_book3s.S index 175d49f468af..59657783d1d5 100644 --- a/arch/powerpc/kernel/idle_book3s.S +++ b/arch/powerpc/kernel/idle_book3s.S @@ -112,12 +112,14 @@ power9_save_additional_sprs: std r4, STOP_HFSCR(r13) mfspr r3, SPRN_MMCRA - mfspr r4, SPRN_MMCR1 + mfspr r4, SPRN_MMCR0 std r3, STOP_MMCRA(r13) - std r4, STOP_MMCR1(r13) + std r4, _MMCR0(r1) - mfspr r3, SPRN_MMCR2 - std r3, STOP_MMCR2(r13) + mfspr r3, SPRN_MMCR1 + mfspr r4, SPRN_MMCR2 + std r3, STOP_MMCR1(r13) + std r4, STOP_MMCR2(r13) blr power9_restore_additional_sprs: @@ -135,11 +137,14 @@ power9_restore_additional_sprs: ld r4, STOP_MMCRA(r13) mtspr SPRN_HFSCR, r3 mtspr SPRN_MMCRA, r4 - /* We have already restored PACA_MMCR0 */ - ld r3, STOP_MMCR1(r13) - ld r4, STOP_MMCR2(r13) - mtspr SPRN_MMCR1, r3 - mtspr SPRN_MMCR2, r4 + + ld r3, _MMCR0(r1) + ld r4, STOP_MMCR1(r13) + mtspr SPRN_MMCR0, r3 + mtspr SPRN_MMCR1, r4 + + ld r3, STOP_MMCR2(r13) + mtspr SPRN_MMCR2, r3 blr /* @@ -350,6 +355,7 @@ power_enter_stop: b pnv_wakeup_noloss .Lhandle_esl_ec_set: +BEGIN_FTR_SECTION /* * POWER9 DD2 can incorrectly set PMAO when waking up after a * state-loss idle. Saving and restoring MMCR0 over idle is a @@ -357,6 +363,7 @@ power_enter_stop: */ mfspr r4,SPRN_MMCR0 std r4,_MMCR0(r1) +END_FTR_SECTION_IFSET(CPU_FTR_POWER9_DD1 | CPU_FTR_POWER9_DD20) /* * Check if the requested state is a deep idle state. @@ -542,15 +549,17 @@ pnv_restore_hyp_resource_arch300: * then clear bit 60 in MMCRA to ensure the PMU starts running. */ blt cr3,1f +BEGIN_FTR_SECTION PPC_INVALIDATE_ERAT ld r1,PACAR1(r13) + ld r4,_MMCR0(r1) + mtspr SPRN_MMCR0,r4 +END_FTR_SECTION_IFSET(CPU_FTR_POWER9_DD1 | CPU_FTR_POWER9_DD20) mfspr r4,SPRN_MMCRA ori r4,r4,(1 << (63-60)) mtspr SPRN_MMCRA,r4 xori r4,r4,(1 << (63-60)) mtspr SPRN_MMCRA,r4 - ld r4,_MMCR0(r1) - mtspr SPRN_MMCR0,r4 1: /* * POWER ISA 3. Use PSSCR to determine if we