Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp2549239pxj; Mon, 10 May 2021 05:42:33 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyidRkWoccsOvxFVUSC5HyjZldhOSJvkAccb2Cv2rybMspToTblUMvC8efStf2JZTEhYLB2 X-Received: by 2002:a17:906:e2d6:: with SMTP id gr22mr26191702ejb.356.1620650553386; Mon, 10 May 2021 05:42:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620650553; cv=none; d=google.com; s=arc-20160816; b=SfdR4Ybt5xB+lLcYx0kjAKZgmXM/CXq8G5+F/FSFdUvLPHKLRF+hGMIFeKizom2y/F 4bSDen9PDQaiqURVPtHdFXYGgyVCDI/WoaO3moYjyevjX8JtJnmgubBxOWbRGI8q0Ar2 0g42VKC6cy7hKRGXcIrPbzGvtN2uRphxG3khgZHYR9qByyzOZqfe+QijKbyYdiK8AGNS EY3tbuEi4HXC7xEF5bdZsFuOjghI0meTPNYxhrsruKXD8beQKlehha68gbR4T9fLVCpd LMiTGB9MuipxWg5LjGnLKC6RgXbH6togztdL2KQRj6njicav/LNDIyuRizRsJd4imY/7 ivrA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=zIrLN2crDg0xvniqICkA03uCJl5nvBi2kme/IEvw7sI=; b=uwVzzIZSSqtuQyGVH3CsBxXsYm31JvG7DLN40jplfYzdcMaON5iyFC/rprD9aUerkv VAYhqOpyS1pewgNMKBqZQQADhHoPOmZEACyjwcSJJ6Bt3L8hjFoPEhepLG6O4HKILNqr +pbx440kAnnMhHqdXgpnIsU3OclwuLgMR7DXPvkuF8AAEeaScgtVYhfTWLyQZznwXqGS islEI35VydhbAkT+lTeiLJANtOyvg+4hkjvhVEftC9okJcfMqs8sc5vujTkf6qJmZ+di WdeVjFiMGvEyG3cHaaLgwdA5BiOCleoKiLog8LFMbtP8Fel/zZELSPJwZHm45PP/jE5J bowA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=2eo1y3Pi; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id gj23si16344335ejb.57.2021.05.10.05.42.07; Mon, 10 May 2021 05:42:33 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=2eo1y3Pi; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1347781AbhEJMhM (ORCPT + 99 others); Mon, 10 May 2021 08:37:12 -0400 Received: from mail.kernel.org ([198.145.29.99]:53778 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237629AbhEJLPp (ORCPT ); Mon, 10 May 2021 07:15:45 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 63A0A61458; Mon, 10 May 2021 11:11:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1620645074; bh=VBuapzAtMSgn0oJkKrIQxusDBCzBDYqAKyIsWVpY6jM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=2eo1y3Pi1vN6+HxLqihYGO0ba49HfQRkVKcrSdx4qgl86bC/YO+kKq2NvNFIh2TpE PiUhOBngPC9Tn4tBaLciTv5Fm9pItn+2vaAlg2g1s6HwhYDicbVpRcfGa/k4RzdO5s d3FD6W9JuJnmd5wy/06az8fj16jimImADSP6olLU= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Nicholas Piggin , Michael Ellerman Subject: [PATCH 5.12 306/384] powerpc/powernv: Enable HAIL (HV AIL) for ISA v3.1 processors Date: Mon, 10 May 2021 12:21:35 +0200 Message-Id: <20210510102024.890829372@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210510102014.849075526@linuxfoundation.org> References: <20210510102014.849075526@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Nicholas Piggin commit 49c1d07fd04f54eb588c4a1dfcedc8d22c5ffd50 upstream. Starting with ISA v3.1, LPCR[AIL] no longer controls the interrupt mode for HV=1 interrupts. Instead, a new LPCR[HAIL] bit is defined which behaves like AIL=3 for HV interrupts when set. Set HAIL on bare metal to give us mmu-on interrupts and improve performance. This also fixes an scv bug: we don't implement scv real mode (AIL=0) vectors because they are at an inconvenient location, so we just disable scv support when AIL can not be set. However powernv assumes that LPCR[AIL] will enable AIL mode so it enables scv support despite HV interrupts being AIL=0, which causes scv interrupts to go off into the weeds. Fixes: 7fa95f9adaee ("powerpc/64s: system call support for scv/rfscv instructions") Cc: stable@vger.kernel.org # v5.9+ Signed-off-by: Nicholas Piggin Signed-off-by: Michael Ellerman Link: https://lore.kernel.org/r/20210402024124.545826-1-npiggin@gmail.com Signed-off-by: Greg Kroah-Hartman --- arch/powerpc/include/asm/reg.h | 1 + arch/powerpc/kernel/setup_64.c | 19 ++++++++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) --- a/arch/powerpc/include/asm/reg.h +++ b/arch/powerpc/include/asm/reg.h @@ -441,6 +441,7 @@ #define LPCR_VRMA_LP1 ASM_CONST(0x0000800000000000) #define LPCR_RMLS 0x1C000000 /* Implementation dependent RMO limit sel */ #define LPCR_RMLS_SH 26 +#define LPCR_HAIL ASM_CONST(0x0000000004000000) /* HV AIL (ISAv3.1) */ #define LPCR_ILE ASM_CONST(0x0000000002000000) /* !HV irqs set MSR:LE */ #define LPCR_AIL ASM_CONST(0x0000000001800000) /* Alternate interrupt location */ #define LPCR_AIL_0 ASM_CONST(0x0000000000000000) /* MMU off exception offset 0x0 */ --- a/arch/powerpc/kernel/setup_64.c +++ b/arch/powerpc/kernel/setup_64.c @@ -232,10 +232,23 @@ static void cpu_ready_for_interrupts(voi * If we are not in hypervisor mode the job is done once for * the whole partition in configure_exceptions(). */ - if (cpu_has_feature(CPU_FTR_HVMODE) && - cpu_has_feature(CPU_FTR_ARCH_207S)) { + if (cpu_has_feature(CPU_FTR_HVMODE)) { unsigned long lpcr = mfspr(SPRN_LPCR); - mtspr(SPRN_LPCR, lpcr | LPCR_AIL_3); + unsigned long new_lpcr = lpcr; + + if (cpu_has_feature(CPU_FTR_ARCH_31)) { + /* P10 DD1 does not have HAIL */ + if (pvr_version_is(PVR_POWER10) && + (mfspr(SPRN_PVR) & 0xf00) == 0x100) + new_lpcr |= LPCR_AIL_3; + else + new_lpcr |= LPCR_HAIL; + } else if (cpu_has_feature(CPU_FTR_ARCH_207S)) { + new_lpcr |= LPCR_AIL_3; + } + + if (new_lpcr != lpcr) + mtspr(SPRN_LPCR, new_lpcr); } /*