From nobody Tue Feb 10 04:03:29 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7DEBE330652 for ; Fri, 9 Jan 2026 09:03:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767949395; cv=none; b=mdWG/nUyAs/QyRqtENb+CG+8Y0zNYyTZBQrDJfzCYEk0FiaBHBvCDasIdzTGXwhGJCEk3lW6c4/QLIlSEIG5fW1QUSkMoyEiLNwToVwZpQ+1xHe8X5QQc4xFpCNcVqQympt0o7rR9UMdPtTbCnqzVuk5vFqTBvp7VBSJpRme0sc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767949395; c=relaxed/simple; bh=ytPXjHTvH1GV8RvsZkPPTIstYiltsShCpFuzHJWXpyA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=OyUu1XtW0QL3L1UX/pyB96ExvTE23pIA6cPnQO+jxgMMwrm2Z2HYEPxrQEbunJdv1jNBOGVHifBWVNUuliey3mJOhlSsNJXOYQ4q6JHwp8Y5dEo6hakmIsBkqYwOKfiFLCBnO3U5AXn+4FhLrvDGnmxRdziXsZY0No90mU4n2wA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=CxJMFgeA; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=fL3/Gsr5; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="CxJMFgeA"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="fL3/Gsr5" Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6096aMvF2843049 for ; Fri, 9 Jan 2026 09:03:10 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=Ibs2WMFWf8i sMVsnKj6F0MrAqbp9ptOr31qv7TtrWfQ=; b=CxJMFgeANbWA3+z1HjSB5VWDvYz fs9vDLWnzwlRty/+fHxvtipcPY+7ocykV1+5nStYHGcju7tubY89qejydect3Vz8 xC7fQbhjlGWG49ikob2QQ9CZRhqLIxSlM7M3vDIIe9VZm3HjJH06uYWeFxMS8Az5 8rM0PA21E1nuEUhWLrHYCESYFj3jmRFS3jtLViYMx3g9PSyY7wJkNk8SY8ci0RYk U/yPK7KHyqbNIokW2W/61mWLrZVgsw3rJpzRjaZX8Oze9s0G8hwhMHywGhDMMLdc /uS1i8wDj9d+Jm6OekWqJlg0ubtPv58TlF53k33DUz4V6B5nR2S2yMNeF8g== Received: from mail-pf1-f199.google.com (mail-pf1-f199.google.com [209.85.210.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4bjjt0hvup-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 09 Jan 2026 09:03:10 +0000 (GMT) Received: by mail-pf1-f199.google.com with SMTP id d2e1a72fcca58-7d24bbb9278so7056543b3a.0 for ; Fri, 09 Jan 2026 01:03:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1767949389; x=1768554189; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Ibs2WMFWf8isMVsnKj6F0MrAqbp9ptOr31qv7TtrWfQ=; b=fL3/Gsr5o3gICo8+xutIZnJFLtVBeYKYjpc/hmOecwa8PIBsa+7pwlCj0by/OFQUbw vXQwLeA2zLKfRV9tnJMoBwCsiAV8agnGrISQyKr1cgfYMiUenJ4lKYoqk3LGA0W5MZ2i DznizCTHBkhciqctSx+6LMH9GYMtb3wraV07+7QVPZEaAYRG/NwUk8RkrUkRaWIK4OGm AqsyQda72soZXypr8Dcz4mNuzLaL2xbFuKTMTrHaP3SPIBx3w8Yh/buw/TVYCbnKf1yB tYswQ5X6vzhFQO0JOoPoCElVSqFghKqwU9475gYypZGlyKysUeW441wWDcRuE1O+g2mP HOcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767949389; x=1768554189; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=Ibs2WMFWf8isMVsnKj6F0MrAqbp9ptOr31qv7TtrWfQ=; b=EVpQXuAXJoaz1jvU9QCyAVByST23byiYIVL7HMjQsU0VABxY/Zj3V4yhgn6w0Z87rQ 17goWx0jI0au12XLgsXzWApIV064UHx4+5/AR9GYnraygIvCOBu0G/rClZJP8TxL1Dvm Qju0RxkUq28oaMtrCZx6htLY4azglvIoMvBsIfIyhczIKKknnCMq1XHC9gVxoPPuz5Ld I4WWtJ3B5aFOmhP5yGya8rINtEejK681HiG11Vx5+J3HjFsj5JP8jiBQnJWs7iJEExVK FaZ4XDjye1UoNFhTfy6AMIT3MwgliSfUxSViqbHhLCvMIwsUcCJ8wfNgpDUKShW2F4To SNNA== X-Forwarded-Encrypted: i=1; AJvYcCWz1ha7jEGdp7t1ACcZsmedlEKiy2YifUd8CKrbj/9Qjbba71LixjIh8qDxIYxTIczgwy22YQerYvvTs5g=@vger.kernel.org X-Gm-Message-State: AOJu0YyMa6pBm4WrAqPyoKqZB3kCm+3ycl3QYbKulqHgBXtgei82UtYi lxOrxn7LSQ8dFc1KA4On5TQc5xy86Wj5DwPwsnMZg+AZofPSdjZvh8rOlQOdboL747L63fNFc5+ EDlWevsosNiskglUfAnmAxSADfaDP+8W+LklI0pXU3Q55B4VkGh+ocORAVKudeK/Bk6c= X-Gm-Gg: AY/fxX47vgR56bsidz3UHiCaER5bWNTMpwj9ISN/z56nGep2xLjhPuceHv0rIHqoKfx p1eLwFjk1GHlQqZDVAUw3T5hqhMp8bMf4dyKQhFv2gApVo69Xi00gBYUZIqm9R7Q24JCKXjtfzs BSA70DCX32N1kg2wYnvi/I6tHnAEHnnRfhFrwmhQfKXYdhtsjQP2TsH6NuGaUzsnM1afFsQKMlr ZdzUA9dUpehkYxonwqYGa4U1u1u23pwClzefLD5Rd8r8hQkCeIThMj4gUI130fNtA2EolcSb4qN UBuJCao4qUK2Bwu38LWN8NT8T11v34SCqSJJpkQeBCaqkvMtxfHjKB/faoYmhezV+I2KbItXjBs TcrmDGY6wlVifduoCP412Y9lYquKSCXeogOUp6xOO/CaKmN4tIr3Cm6mdjStfF6osavTB16nV4W vJ2YhnixUF4HCPPDJ7t1kWmkY1UfT4DvA3zw== X-Received: by 2002:a05:6a00:4c81:b0:81e:b2ba:5b36 with SMTP id d2e1a72fcca58-81eb2ba5c17mr419404b3a.63.1767949389452; Fri, 09 Jan 2026 01:03:09 -0800 (PST) X-Google-Smtp-Source: AGHT+IGejI7LmUB/luJhLPwMThP7DUoDGFXiiyakN6fBlGBN6FOHT6qVL/iPto6pXgjtHv9gY8I9Vw== X-Received: by 2002:a05:6a00:4c81:b0:81e:b2ba:5b36 with SMTP id d2e1a72fcca58-81eb2ba5c17mr419361b3a.63.1767949388939; Fri, 09 Jan 2026 01:03:08 -0800 (PST) Received: from hu-himchau-blr.qualcomm.com (blr-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com. [103.229.18.19]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-819c59e826asm9831562b3a.54.2026.01.09.01.03.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 09 Jan 2026 01:03:08 -0800 (PST) From: Himanshu Chauhan To: linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, linux-efi@vger.kernel.org, acpica-devel@lists.linux.dev, paul.walmsley@sifive.com, palmer@dabbelt.com, lenb@kernel.org, james.morse@arm.com, tony.luck@intel.com, ardb@kernel.org, conor@kernel.org, cleger@rivosinc.com, robert.moore@intel.com, sunilvl@oss.qualcomm.com, anup.patel@oss.qualcomm.com Cc: Himanshu Chauhan Subject: [PATCH v3 08/10] riscv: Introduce HEST SSE notification handlers Date: Fri, 9 Jan 2026 14:32:22 +0530 Message-ID: <20260109090224.3105465-9-himanshu.chauhan@oss.qualcomm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260109090224.3105465-1-himanshu.chauhan@oss.qualcomm.com> References: <20260109090224.3105465-1-himanshu.chauhan@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: Srvt2GP5tZ5qr4tW9SxUqkZOf9J6_TVz X-Authority-Analysis: v=2.4 cv=VJzQXtPX c=1 sm=1 tr=0 ts=6960c44e cx=c_pps a=WW5sKcV1LcKqjgzy2JUPuA==:117 a=Ou0eQOY4+eZoSc0qltEV5Q==:17 a=vUbySO9Y5rIA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=QyXUC8HyAAAA:8 a=Eu4eB5ymJzOrEwSPfFIA:9 a=OpyuDcXvxspvyRM73sMx:22 X-Proofpoint-ORIG-GUID: Srvt2GP5tZ5qr4tW9SxUqkZOf9J6_TVz X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTA5MDA2NCBTYWx0ZWRfX1jFDrF2tv04V 6E12di1c3Tni3m64gT6nLmUgTjGzswTF/PUAODqF7jkQ00twgIYM8qQKdY/IVGW0Fg3mgtKbn8l JseCZXQr13Y5PWpQaOrGzHqRI9ZOTNAFYChK19kP96FHmLvEjk5i+AEnb1BJQjqpVRplB61yOFu PCfn9FpuEt8fg8sDL3hDEHLM19JiI06qIULtS8eeMTx58Wb7PkBm7IM/+N0Zhozevu8aAw5hvgI Shq3eM4fobPOAImYlXkU3WfQHwxvsUqrFtuKUL0JZJ1RnzEtlFVy1FinJAukD/fXcZupAQLw+cU bl8dxSsp1kpWyWuRqederO6ZzN7+7XMCE5C0kKeNfzunxxMfrQ/6efcOhU4ndcwM5cIzMjkhC54 TIFHoIgj/rXoXa7WSScjz/RwTWmpD/Dw4zIRllw8jTj0EAVuD54y5yJXm/oH5QvTdnCs0TebpIt LabyCNEaAQO8WbZji1Q== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-09_02,2026-01-08_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 suspectscore=0 spamscore=0 phishscore=0 clxscore=1015 priorityscore=1501 adultscore=0 bulkscore=0 lowpriorityscore=0 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2601090064 Content-Type: text/plain; charset="utf-8" Add config option to enable SSE in APEI. When it is enabled, functions to register/unregister a ghes entry with SSE are avilable along with low and high priority event handers. If a SSE notification type is determined, a ghes common handler to handle an error event is registered. Signed-off-by: Himanshu Chauhan --- drivers/acpi/apei/Kconfig | 5 ++ drivers/acpi/apei/ghes.c | 100 +++++++++++++++++++++++++++++++++----- 2 files changed, 94 insertions(+), 11 deletions(-) diff --git a/drivers/acpi/apei/Kconfig b/drivers/acpi/apei/Kconfig index 070c07d68dfb..ada95a50805f 100644 --- a/drivers/acpi/apei/Kconfig +++ b/drivers/acpi/apei/Kconfig @@ -46,6 +46,11 @@ config ACPI_APEI_SEA depends on ARM64 && ACPI_APEI_GHES default y =20 +config ACPI_APEI_SSE + bool + depends on RISCV && RISCV_SBI_SSE && ACPI_APEI_GHES + default y + config ACPI_APEI_MEMORY_FAILURE bool "APEI memory error recovering support" depends on ACPI_APEI && MEMORY_FAILURE diff --git a/drivers/acpi/apei/ghes.c b/drivers/acpi/apei/ghes.c index 6fd84a1772c6..aa7dcd4069f9 100644 --- a/drivers/acpi/apei/ghes.c +++ b/drivers/acpi/apei/ghes.c @@ -17,6 +17,8 @@ * Author: Huang Ying */ =20 +#include +#include #include #include #include @@ -99,6 +101,11 @@ #define FIX_APEI_GHES_SDEI_CRITICAL __end_of_fixed_addresses #endif =20 +#ifndef CONFIG_RISCV_SBI_SSE +#define FIX_APEI_GHES_SSE_LOW_PRIORITY __end_of_fixed_addresses +#define FIX_APEI_GHES_SSE_HIGH_PRIORITY __end_of_fixed_addresses +#endif + static ATOMIC_NOTIFIER_HEAD(ghes_report_chain); =20 static inline bool is_hest_type_generic_v2(struct ghes *ghes) @@ -1561,6 +1568,63 @@ static int apei_sdei_unregister_ghes(struct ghes *gh= es) return sdei_unregister_ghes(ghes); } =20 +#if defined(CONFIG_ACPI_APEI_SSE) +/* SSE Handlers */ +static int __ghes_sse_callback(struct ghes *ghes, + enum fixed_addresses fixmap_idx) +{ + if (!ghes_in_nmi_queue_one_entry(ghes, fixmap_idx)) { + irq_work_queue(&ghes_proc_irq_work); + + return 0; + } + + return -ENOENT; +} + +/* Low priority */ +static int ghes_sse_lo_callback(u32 event_num, void *arg, struct pt_regs *= regs) +{ + static DEFINE_RAW_SPINLOCK(ghes_notify_lock_sse_lo); + struct ghes *ghes =3D arg; + int err; + + raw_spin_lock(&ghes_notify_lock_sse_lo); + err =3D __ghes_sse_callback(ghes, FIX_APEI_GHES_SSE_LOW_PRIORITY); + raw_spin_unlock(&ghes_notify_lock_sse_lo); + + return err; +} + +/* High priority */ +static int ghes_sse_hi_callback(u32 event_num, void *arg, struct pt_regs *= regs) +{ + static DEFINE_RAW_SPINLOCK(ghes_notify_lock_sse_hi); + struct ghes *ghes =3D arg; + int err; + + raw_spin_lock(&ghes_notify_lock_sse_hi); + err =3D __ghes_sse_callback(ghes, FIX_APEI_GHES_SSE_HIGH_PRIORITY); + raw_spin_unlock(&ghes_notify_lock_sse_hi); + + return err; +} + +static int apei_sse_register_ghes(struct ghes *ghes) +{ + return sse_register_ghes(ghes, ghes_sse_lo_callback, + ghes_sse_hi_callback); +} + +static int apei_sse_unregister_ghes(struct ghes *ghes) +{ + return sse_unregister_ghes(ghes); +} +#else /* CONFIG_ACPI_APEI_SSE */ +static int apei_sse_register_ghes(struct ghes *ghes) { return -EOPNOTSUPP;= } +static int apei_sse_unregister_ghes(struct ghes *ghes) { return -EOPNOTSUP= P; } +#endif + static int ghes_probe(struct platform_device *ghes_dev) { struct acpi_hest_generic *generic; @@ -1607,6 +1671,14 @@ static int ghes_probe(struct platform_device *ghes_d= ev) pr_warn(GHES_PFX "Generic hardware error source: %d notified via local i= nterrupt is not supported!\n", generic->header.source_id); goto err; + case ACPI_HEST_NOTIFY_SSE: + if (!IS_ENABLED(CONFIG_ACPI_APEI_SSE)) { + pr_warn(GHES_PFX "Generic hardware error source: %d notified via SSE is= not supported\n", + generic->header.source_id); + rc =3D -EOPNOTSUPP; + goto err; + } + break; default: pr_warn(FW_WARN GHES_PFX "Unknown notification type: %u for generic hard= ware error source: %d\n", generic->notify.type, generic->header.source_id); @@ -1670,6 +1742,18 @@ static int ghes_probe(struct platform_device *ghes_d= ev) if (rc) goto err; break; + + case ACPI_HEST_NOTIFY_SSE: + rc =3D apei_sse_register_ghes(ghes); + if (rc) { + pr_err(GHES_PFX "Failed to register for SSE notification" + " on vector %d\n", + generic->notify.vector); + goto err; + } + pr_err(GHES_PFX "Registered SSE notification on vector %d\n", + generic->notify.vector); + break; default: BUG(); } @@ -1699,7 +1783,6 @@ static int ghes_probe(struct platform_device *ghes_de= v) =20 static void ghes_remove(struct platform_device *ghes_dev) { - int rc; struct ghes *ghes; struct acpi_hest_generic *generic; =20 @@ -1733,16 +1816,11 @@ static void ghes_remove(struct platform_device *ghe= s_dev) ghes_nmi_remove(ghes); break; case ACPI_HEST_NOTIFY_SOFTWARE_DELEGATED: - rc =3D apei_sdei_unregister_ghes(ghes); - if (rc) { - /* - * Returning early results in a resource leak, but we're - * only here if stopping the hardware failed. - */ - dev_err(&ghes_dev->dev, "Failed to unregister ghes (%pe)\n", - ERR_PTR(rc)); - return; - } + apei_sdei_unregister_ghes(ghes); + break; + + case ACPI_HEST_NOTIFY_SSE: + apei_sse_unregister_ghes(ghes); break; default: BUG(); --=20 2.43.0