{"id":2229982,"url":"http://patchwork.ozlabs.org/api/1.1/patches/2229982/?format=json","web_url":"http://patchwork.ozlabs.org/project/linux-gpio/patch/20260429025247.1372984-1-mario.limonciello@amd.com/","project":{"id":42,"url":"http://patchwork.ozlabs.org/api/1.1/projects/42/?format=json","name":"Linux GPIO development","link_name":"linux-gpio","list_id":"linux-gpio.vger.kernel.org","list_email":"linux-gpio@vger.kernel.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20260429025247.1372984-1-mario.limonciello@amd.com>","date":"2026-04-29T02:52:39","name":"gpiolib: acpi: Only trigger ActiveBoth interrupts on boot","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"630bcba4e519f45c52b32f7c85c726082eb5a35a","submitter":{"id":81779,"url":"http://patchwork.ozlabs.org/api/1.1/people/81779/?format=json","name":"Mario Limonciello","email":"Mario.Limonciello@amd.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/linux-gpio/patch/20260429025247.1372984-1-mario.limonciello@amd.com/mbox/","series":[{"id":501977,"url":"http://patchwork.ozlabs.org/api/1.1/series/501977/?format=json","web_url":"http://patchwork.ozlabs.org/project/linux-gpio/list/?series=501977","date":"2026-04-29T02:52:39","name":"gpiolib: acpi: Only trigger ActiveBoth interrupts on boot","version":1,"mbox":"http://patchwork.ozlabs.org/series/501977/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2229982/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2229982/checks/","tags":{},"headers":{"Return-Path":"\n <linux-gpio+bounces-35740-incoming=patchwork.ozlabs.org@vger.kernel.org>","X-Original-To":["incoming@patchwork.ozlabs.org","linux-gpio@vger.kernel.org"],"Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=amd.com header.i=@amd.com header.a=rsa-sha256\n header.s=selector1 header.b=vy4Hw+uV;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=172.105.105.114; helo=tor.lore.kernel.org;\n envelope-from=linux-gpio+bounces-35740-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)","smtp.subspace.kernel.org;\n\tdkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com\n header.b=\"vy4Hw+uV\"","smtp.subspace.kernel.org;\n arc=fail smtp.client-ip=40.107.200.64","smtp.subspace.kernel.org;\n dmarc=pass (p=quarantine dis=none) header.from=amd.com","smtp.subspace.kernel.org;\n spf=fail smtp.mailfrom=amd.com"],"Received":["from tor.lore.kernel.org (tor.lore.kernel.org [172.105.105.114])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g52124h5wz1xvV\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 29 Apr 2026 12:53:10 +1000 (AEST)","from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby tor.lore.kernel.org (Postfix) with ESMTP id 66CA2305037E\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 29 Apr 2026 02:53:07 +0000 (UTC)","from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id EEFF535E931;\n\tWed, 29 Apr 2026 02:53:03 +0000 (UTC)","from CH5PR02CU005.outbound.protection.outlook.com\n (mail-northcentralusazon11012064.outbound.protection.outlook.com\n [40.107.200.64])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id 47D0927CCE0;\n\tWed, 29 Apr 2026 02:53:02 +0000 (UTC)","from SJ0PR05CA0206.namprd05.prod.outlook.com (2603:10b6:a03:330::31)\n by IA0PPF12042BF6F.namprd12.prod.outlook.com (2603:10b6:20f:fc04::bc8) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9818.25; Wed, 29 Apr\n 2026 02:52:57 +0000","from SJ1PEPF00001CE4.namprd03.prod.outlook.com\n (2603:10b6:a03:330:cafe::f6) by SJ0PR05CA0206.outlook.office365.com\n (2603:10b6:a03:330::31) with Microsoft SMTP Server (version=TLS1_3,\n cipher=TLS_AES_256_GCM_SHA384) id 15.20.9846.26 via Frontend Transport; Wed,\n 29 Apr 2026 02:52:56 +0000","from satlexmb07.amd.com (165.204.84.17) by\n SJ1PEPF00001CE4.mail.protection.outlook.com (10.167.242.20) with Microsoft\n SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n 15.20.9846.18 via Frontend Transport; Wed, 29 Apr 2026 02:52:56 +0000","from ausmlimonci-lx1.amd.com (10.180.168.240) by satlexmb07.amd.com\n (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Tue, 28 Apr\n 2026 21:52:54 -0500"],"ARC-Seal":["i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1777431183; cv=fail;\n b=XBhUXHr8u9v0pmxRVUCuSvABPhyxEo6FTiSZxjkmGQWj9c43+F3LbWtaDoYd3+Jc7U1OTSXDXlKsAGkoSNmHjgDqog5J/HtslDJhRwX+2D4UI1DbKLP7swK+xd5REtLDxJy6ZN/6kUjlVz6YknjTlFkQZVneOnK80ursK13QdOc=","i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=d9We3vjdEFG87jmduU5R7needkRwr4N9c+G1CrraYjymj5TJuBmC3LedbgI/fW6gpuNdNFQ3fGC2mx7cxtuopa6cfRFBeQd+r88lvFyK18vlGruZSJB6czRHGhwUvWENQNxshPRnsYxs6GHH/BMDLOhXXce1xF8EYGSl+IyDpYFNv0FhR2dgTrRPvVlXoduZmsF6RaFGeBv9h/TVYmm6JQ7jssrARetpdJd6VQ20F9ReIGuPEwpkLEUptSGSlg8/JfNg+po72J9F+zE6ApiS5crdV1VZTDXJqqT76rgxTAVvsEPqhUWxyQBrpEfTA1hn1g6NPDthvWZME4dpubk7lA=="],"ARC-Message-Signature":["i=2; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1777431183; c=relaxed/simple;\n\tbh=s65iGYiuGKIXPK/K7W6Fd0YmB9G7G2CbeIuHEjp4gIY=;\n\th=From:To:CC:Subject:Date:Message-ID:MIME-Version:Content-Type;\n b=tvXv0eVeFfwAN8A0ZYtKLrHt90hluPYONzq+TRN8FmM4n3itc2l0JPFYgRMpgl5bbkNyDo3ePZVoDMSDVkUQowfRAT+V62HFu/7JcIKmUuEY/D1BkLA0ysv3YzkYw1HjEICEt58dGO3ZogZRRz9LYebYTnIe83Gd81GkRkWO5O0=","i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n bh=lKn72xxoNMpEebuHZfyfLnDSSRkL4s2pLib/P/AELA4=;\n b=xx6zHUsMnfajvO64c9BkGAsaAAqLaTh8aow2NtCFm570LNw/b4J8ncTwVXw/fyzhIAO6aUWHzynJPu8TA/EP1/IunOp5pNthdNBpuMbHbWroJqGInEO/4FUvtpjUc5t6UAbnILSCQarUEu2fj01wo1ruq9632hJ5E8Pk6EuAJpghremjioG5Iw+h2h6jgDVnvve7Uc1RJp189ElwNF/4LmjRFLBjshaek+7D3F6Cc+QMs7b9N7Po1kbmkQ/nVOmwn45Zmd7GxXLAkGOcxXR9v1AVaP5WjI0QeD8nqMpIJZ+UYZjWfN4d83+n30KvixS1B0AHr8iYJX40fhz0hRM+2w=="],"ARC-Authentication-Results":["i=2; smtp.subspace.kernel.org;\n dmarc=pass (p=quarantine dis=none) header.from=amd.com;\n spf=fail smtp.mailfrom=amd.com;\n dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com\n header.b=vy4Hw+uV; arc=fail smtp.client-ip=40.107.200.64","i=1; mx.microsoft.com 1; spf=pass (sender ip is\n 165.204.84.17) smtp.rcpttodomain=kernel.org smtp.mailfrom=amd.com; dmarc=pass\n (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com;\n dkim=none (message not signed); arc=none (0)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=lKn72xxoNMpEebuHZfyfLnDSSRkL4s2pLib/P/AELA4=;\n b=vy4Hw+uV9mVKLUAXTP8X0CZJ4Kk4oiddjaneIM9AXBGlfiPRegFel/dkFP67/wddaMkoyu0gtedheTGtandnsN3st+Gma9Jmsnd2ZT9f/Q6MvqAxBWv+6b0ReTUpb6jp3bkDP5dKZh2nVbghDw6z29G4OpHKcIT3Flqi+Up03A8=","X-MS-Exchange-Authentication-Results":"spf=pass (sender IP is 165.204.84.17)\n smtp.mailfrom=amd.com; dkim=none (message not signed)\n header.d=none;dmarc=pass action=none header.from=amd.com;","Received-SPF":"Pass (protection.outlook.com: domain of amd.com designates\n 165.204.84.17 as permitted sender) receiver=protection.outlook.com;\n client-ip=165.204.84.17; helo=satlexmb07.amd.com; pr=C","From":"Mario Limonciello <mario.limonciello@amd.com>","To":"<westeri@kernel.org>, <andriy.shevchenko@linux.intel.com>,\n\t<linusw@kernel.org>, <brgl@kernel.org>, <bentiss@kernel.org>,\n\t<hansg@kernel.org>","CC":"Mario Limonciello <mario.limonciello@amd.com>, Francesco Lauritano\n\t<francesco.lauritano1@protonmail.com>, Marco Scardovi\n\t<mscardovi95@gmail.com>, Armin Wolf <W_Armin@gmx.de>,\n\t<mika.westerberg@linux.intel.com>, <linux-gpio@vger.kernel.org>,\n\t<linux-acpi@vger.kernel.org>","Subject":"[PATCH] gpiolib: acpi: Only trigger ActiveBoth interrupts on boot","Date":"Tue, 28 Apr 2026 21:52:39 -0500","Message-ID":"<20260429025247.1372984-1-mario.limonciello@amd.com>","X-Mailer":"git-send-email 2.43.0","Precedence":"bulk","X-Mailing-List":"linux-gpio@vger.kernel.org","List-Id":"<linux-gpio.vger.kernel.org>","List-Subscribe":"<mailto:linux-gpio+subscribe@vger.kernel.org>","List-Unsubscribe":"<mailto:linux-gpio+unsubscribe@vger.kernel.org>","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","Content-Type":"text/plain","X-ClientProxiedBy":"satlexmb07.amd.com (10.181.42.216) To satlexmb07.amd.com\n (10.181.42.216)","X-EOPAttributedMessage":"0","X-MS-PublicTrafficType":"Email","X-MS-TrafficTypeDiagnostic":"SJ1PEPF00001CE4:EE_|IA0PPF12042BF6F:EE_","X-MS-Office365-Filtering-Correlation-Id":"0a98b2d6-848b-4fb2-5aa1-08dea59a6a88","X-MS-Exchange-SenderADCheck":"1","X-MS-Exchange-AntiSpam-Relay":"0","X-Microsoft-Antispam":"\n\tBCL:0;ARA:13230040|82310400026|36860700016|376014|1800799024|7416014|13003099007|18002099003|56012099003;","X-Microsoft-Antispam-Message-Info":"\n\tyxutk3QxiJVNQpFM/kVyZ5qQ4oqAGXcxedQzmgUN5c6zXFnFToAoZlFXD4iOPUDVWsPw9l6pgyEfkez/ZZjCO7dFQ9wGlwRWFLLwxcXfmerfT2QwVf5+39J1e+mLRzMUj6YInxPRD7qdiRu7TuNg39vSgrZoy67OKSTKznKHuKcr9r2C64uM2d0UOFD+m836/vB4D+KK51tCu32mTMLzjOFM4+zRVf2mKUj7XOUGqs4dQ89xPJgY4WhuKoqKmoVefWxw6QlI2f/JV4gwgbZ1fHebcbHs341hXEOs+lAYpcNPjAHIJrQIy/qnMnMPAXr2lbc/IJ0XG2tHf/REOTOnEWURVfBOA2TgAvUN+kRTAZojsh/5/dMO4pJODT6DJfJ2ClzmoBobu4nhRRuS8paBshwlwGTQUpE+9E/fs6jT1b9GjTBrET46OWUjPhbxjaKWx6BZ4ZlxihIt65nyDTSRk/L3VvFRYXdumu6VXh0iEsH5LsFoj92js7tX0ub6mN1cMdrdddYIC9mcRAXE8ykjeYYSmD/r2/YR7HeuQqIRwSXebL+xXlp9YPgg5EF0yjpVWsl8+EwI7XzMhVz+0GTQyanP+O3Kn5wMchD/C0+t81rdFtZXRAEKhWMQlRvBgdpOZQptawV04gh8PrI+2OI2KUsH9Z4pivURtr7Z7He7onoDGLqcKcw0daifqycLE/EjvzSvQD86WIjpjb4LxL0lEZ2MTs2Cb2tWdd5yvVMmSzc=","X-Forefront-Antispam-Report":"\n\tCIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(82310400026)(36860700016)(376014)(1800799024)(7416014)(13003099007)(18002099003)(56012099003);DIR:OUT;SFP:1101;","X-MS-Exchange-AntiSpam-MessageData-ChunkCount":"1","X-MS-Exchange-AntiSpam-MessageData-0":"\n\tHd7SqZ4RWZa2nFTIDggCq0StVOFdZqr676yAwZCy0YLPPjt4bKi7CAFx4Or0Cge+RhFfu9X5p4C5h5WCx2sIhTnjG9x4eA943KPEDOVVtaesqyR+rF1W6w+03drh6RWbZhzVCc5MFax8EeGE7Dm+pLrtNeYT6I5aMTKaP4W/twNu2P3ezSsshkyXbBZrR3sCLCSH5NGrwHi3r7FqRFe+8dDknrGTYgoRrxDNjPNspYNYrlY7Jut/pdyJOEYNOLE7uQ2r0FLSZ5vn21rn/3AvbFZtda1bBWp23KLaErP9fadVVeo97crVAJlrj+yUtQWLolSSnU2Qs8TpH8XNoQTtsfMxS0SupzP/FjGciogbgpW9c5LNdukGrPmBbvR51w4gEkFVxqXTPh2y3oKDy+98csfzHj4k8M+Ld1/5CppcguPwXQr20Ye8ixH9ddFVeQ7n","X-OriginatorOrg":"amd.com","X-MS-Exchange-CrossTenant-OriginalArrivalTime":"29 Apr 2026 02:52:56.2707\n (UTC)","X-MS-Exchange-CrossTenant-Network-Message-Id":"\n 0a98b2d6-848b-4fb2-5aa1-08dea59a6a88","X-MS-Exchange-CrossTenant-Id":"3dd8961f-e488-4e60-8e11-a82d994e183d","X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp":"\n TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[satlexmb07.amd.com]","X-MS-Exchange-CrossTenant-AuthSource":"\n\tSJ1PEPF00001CE4.namprd03.prod.outlook.com","X-MS-Exchange-CrossTenant-AuthAs":"Anonymous","X-MS-Exchange-CrossTenant-FromEntityHeader":"HybridOnPrem","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"IA0PPF12042BF6F"},"content":"Commit ca876c7483b6 (\"gpiolib-acpi: make sure we trigger edge events at\nleast once on boot\") introduced logic to trigger edge-based GPIO\ninterrupts during initialization to ensure proper initial state setup\nwhen firmware doesn't initialize it.\n\nHowever, according to the Microsoft GPIO documentation, triggering GPIO\ninterrupts during initialization should only happen for interrupts\nmarked as ActiveBoth (both IRQF_TRIGGER_RISING and IRQF_TRIGGER_FALLING)\nand only when the associated GPIO line is already asserted (logic level\nlow).\n\nThe current implementation incorrectly triggers:\n1. Any edge-triggered interrupt (RISING-only or FALLING-only)\n2. RISING interrupts when value is high and FALLING when value is low\n\nThis causes problems at bootup for single-edge interrupts that\ndon't follow the ActiveBoth pattern.\n\nFix this by:\n- Only triggering when BOTH rising and falling edges are configured\n- Only triggering when the GPIO line is asserted (value == 0)\n\nReported-by: Francesco Lauritano <francesco.lauritano1@protonmail.com>\nCloses: https://lore.kernel.org/all/6iFCwGH2vssb7NRUTWGpkubGMNbgIlBHSz40z8ZsezjxngXpoiiRiJaijviNvhiDAGIr43bfUmdxLmxYoHDjyft4DgwFc3Pnu5hzPguTa0s=@protonmail.com/\nTested-by: Marco Scardovi <mscardovi95@gmail.com>\nFixes: ca876c7483b69 (\"gpiolib-acpi: make sure we trigger edge events at least once on boot\")\nLink: https://learn.microsoft.com/en-us/windows-hardware/drivers/bringup/general-purpose-i-o--gpio-\nSuggested-by: Armin Wolf <W_Armin@gmx.de>\nSigned-off-by: Mario Limonciello <mario.limonciello@amd.com>\n---\n drivers/gpio/gpiolib-acpi-core.c | 19 +++++++++++++++----\n 1 file changed, 15 insertions(+), 4 deletions(-)","diff":"diff --git a/drivers/gpio/gpiolib-acpi-core.c b/drivers/gpio/gpiolib-acpi-core.c\nindex 09f860200a059..eb8a40cfb7a98 100644\n--- a/drivers/gpio/gpiolib-acpi-core.c\n+++ b/drivers/gpio/gpiolib-acpi-core.c\n@@ -233,12 +233,23 @@ static void acpi_gpiochip_request_irq(struct acpi_gpio_chip *acpi_gpio,\n \n \tevent->irq_requested = true;\n \n-\t/* Make sure we trigger the initial state of edge-triggered IRQs */\n+\t/*\n+\t * Make sure we trigger the initial state of ActiveBoth IRQs.\n+\t *\n+\t * According to the Microsoft GPIO documentation, triggering GPIO\n+\t * interrupts marked as ActiveBoth during initialization is correct\n+\t * as long as the associated GPIO line is already \"asserted\"\n+\t * (logic level low). We should not trigger edge-based GPIO\n+\t * interrupts not marked as ActiveBoth.\n+\t *\n+\t * See: https://learn.microsoft.com/en-us/windows-hardware/drivers/bringup/general-purpose-i-o--gpio-\n+\t * Section: \"GPIO controllers and ActiveBoth interrupts\"\n+\t */\n \tif (acpi_gpio_need_run_edge_events_on_boot() &&\n-\t    (event->irqflags & (IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING))) {\n+\t    ((event->irqflags & (IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING)) ==\n+\t     (IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING))) {\n \t\tvalue = gpiod_get_raw_value_cansleep(event->desc);\n-\t\tif (((event->irqflags & IRQF_TRIGGER_RISING) && value == 1) ||\n-\t\t    ((event->irqflags & IRQF_TRIGGER_FALLING) && value == 0))\n+\t\tif (value == 0)\n \t\t\tevent->handler(event->irq, event);\n \t}\n }\n","prefixes":[]}