From nobody Sat Jun 13 20:29:54 2026 Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EAFC1494A14 for ; Tue, 5 May 2026 16:51:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777999898; cv=none; b=UY7vzeU+yQ5czz2J6w9ql+fZ4bqa3u1xg3JzWaTVr6qMynC6vLFub25qNlnXMm8aNds4mrn4+8lh4706T8quFdO4SD4kABBsyLVuqQoUHpAot51BHedJo7GKNeucz21dTnaO4gwa0S1QhrVzpq6lFFULB/9Vb1bn1r2iYTsf4RE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777999898; c=relaxed/simple; bh=g25xeli1DLUZxdXtQblgPzKmVajY122ndufyzT+R+gY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:Cc; b=mBViQBbWEG3TqfPkdfD28Xz8HHi73j0iYOlZrqHDf9EmQcuyutyDbjyXTZZ8+RMmobA8TCssI99mCTT6qxjw+VNr3SARoojdqIfw1GtMj18v6VAx0oH2MjPUKiz/pvnOss/qazyHsCcJ792f8zOerY8VQ2pk+vLttyHKa9s6vUo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=Y+ysnNnt; arc=none smtp.client-ip=209.85.128.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="Y+ysnNnt" Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-4891e5b9c1fso52941105e9.2 for ; Tue, 05 May 2026 09:51:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1777999894; x=1778604694; darn=vger.kernel.org; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:from:to:cc:subject:date:message-id:reply-to; bh=cFOxlmgrHFRh5b7c9s/7e3CdnNG1mfP3sI5WdJh8q18=; b=Y+ysnNntPnid1Q1Q0/jc8XrZkvzkY59++t6tFrSXxvHLLol+9w8nCwXjJB9m2C0Vto l/EXLp9U49xdvNQYqYwqgvnFSgLf0AKOyBQFhV2QE0bcFGlgyOOLbyPj4Y4zjMauOpsW 1CFB4BhSQKWvxmBH3G/BgownzqgozPTFkZf7gybtAvnmtjKeKWd8P7etAY7xpBP1XKlW KPb4x3ILcowkzbwbaA2u24KwFcujGFQEtX7XVu0D4NmYiREnw/stOwqxUrcpy9+eIi+m 2c/p6i7ENaRa2QRQ1zaENG/qF3YMzJSo7AKP7Td8JsD5fOBgt4WFPJDNnptkqMt60pW/ /n4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777999894; x=1778604694; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=cFOxlmgrHFRh5b7c9s/7e3CdnNG1mfP3sI5WdJh8q18=; b=XTXQF35+ChLWNdcumKlVVbf6iXjXNGRMH+VFS33ph206fh2O3BRNeZ+W/n7sNGnlcY mqhKO2JPz5reQWv9CSs1wCIalFJt6cajDZZcGlMe2A9I5NitRqS1qXVqPsjSOP16FIxh 0tH9EVMdBw6bpUBr20wPpIhmD94uBzeV6EbJBmmkcGfuw8+ZEuaM7H/iiVfQb9NtOLjV zM8Y8bhSIMjn+r17SEO9Bmn2ZUnqBSMxzEL9vEHBhXuMne4SofCN4HlAHbgLPKVku0jT SUKAUB7e1ISIN5rSZQgl/I5C5nVYQk4aWb76j9lSVi4d4mzqH2+FZeoE1R4fyAvpcUhx 2ZdA== X-Forwarded-Encrypted: i=1; AFNElJ/pBxd4cSsM8aa5mtfM8OcqFyDcDHus+tzW90wYT6YRZiX9spJTjsIWo9YggIrSwheoKv3Qk9wcACHIXuU=@vger.kernel.org X-Gm-Message-State: AOJu0YzJZL5bby+mvVly9bOR19aje6+p8iRS0knlDsqsteYwMMxZItVu fE2HfnIBKL6HYmEXRVy8cRfGuUAByx8fsFUks35QU0xxG2JGZ1RykMXeW9iuefmjoiM= X-Gm-Gg: AeBDiesWKJZF5n0XXyJkTaeyWApyk8s4IjcxnMRjh5oroNcS8utV8zo6VMX21OW7EO6 Qe0+o1tupl1VRyXpvrBOuYfNR0UzU4j/WElAqNXYhGAqEyfHcDy0tvWquPzx9dz9dWGp4b0Yisu aI9Cln5EF90vIK2JUs7PqQtpqcerzliXlZm07ynt2eAOziCgzaAbZs3WQcAtSY5i9pid6mgbYFf 8mTVWbkzupfXODwn6cYz9gmrQTcIdDU/v2kK7gCZlvJZDbcEkw3ZP0LXTyksj9Uwa8VIMrs8UhS qaH+fs/IKWHsz0cfvATD4Jj3tpxeZ4ZIcHDmeKUsrq/BNjOxCKD+fBia/weV9p/rxdT1es1bgNq OPNW/3gj9JSB/oXpkrMJPYXf7VxOeT+IedWaWBJeFDDLgvR8Pqp2GPDNxOQRwm9A4bV7rBOlfTm c1tL3zuD3aeg6e2SrabYtLlpK2RTeZH3BwPdNl2hD6kULUL+EZnqjdiQ== X-Received: by 2002:a05:600c:3b17:b0:488:ffb1:494c with SMTP id 5b1f17b1804b1-48e51e1f0b2mr701835e9.12.1777999893963; Tue, 05 May 2026 09:51:33 -0700 (PDT) Received: from ho-tower-lan.lan ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48d149f1a77sm23721885e9.4.2026.05.05.09.51.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 May 2026 09:51:33 -0700 (PDT) From: James Clark Date: Tue, 05 May 2026 17:51:25 +0100 Subject: [PATCH v3] coresight: ete: Always save state on power down Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260505-james-cs-ete-pm_save_enable-v3-1-485d21dd79b8@linaro.org> X-B4-Tracking: v=1; b=H4sIAAwg+mkC/33NSw6CMBSF4a2Qjr2mD0DryH0YQ0q5QI20pCWNh rB3C4kxThj+Z/CdmQT0BgO5ZDPxGE0wzqYQh4zoXtkOwTSpCae8pDmn8FADBtABcEIYhyqoiBV aVT8RcpQyR1HoRmmShNFja16bfrun7k2YnH9vZ5Gt69c977qRAQV9UpJqVba5qK9PY5V3R+c7s sKR/7CCFvsYBwaNkJq1DCnK8g9bluUDBeEjERQBAAA= To: Suzuki K Poulose , Mike Leach , Leo Yan , Alexander Shishkin , Mathieu Poirier Cc: coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, James Clark X-Mailer: b4 0.14.0 System register ETMs and ETE are unlikely to be preserved on CPU power down. The ETE DT binding also never documented "arm,coresight-loses-context-with-cpu" so nobody would have legitimately been able to use that binding to fix it and ACPI has no such binding at all. Fix it by hard coding the setting for sysreg ETMs (ETE is always sysreg) or ACPI boots. Use a local variable when setting up save_state so that it's immune to concurrent probing when devices have different configurations which is an issue with modifying the global. This fixes the following error when using Coresight with ACPI on the FVP which supports CPU PM: coresight ete0: External agent took claim tag WARNING: drivers/hwtracing/coresight/coresight-core.c:248 at coresight_di= sclaim_device_unlocked+0xe0/0xe8, CPU#0: perf/117 Fixes: 35e1c9163e02 ("coresight: ete: Add support for ETE tracing") Signed-off-by: James Clark Reviewed-by: Leo Yan --- Fix PM save on ETE, which is an issue that showed up on the FVP when booted with ACPI and the newly enabled idle states. --- Changes in v3: - Setup using a local variable and then check drvdata->save_state at runtime so it's immune to concurrent probing with different configs. - Link to v2: https://lore.kernel.org/r/20260505-james-cs-ete-pm_save_enabl= e-v2-1-d39c1f1e0e96@linaro.org Changes in v2: - Expand rule to also save for ACPI and sysreg ETMs. Now module param is only read for MMIO ETMs and DT. - Drop change to save the result in drvdata as the single global is simpler. - Link to v1: https://lore.kernel.org/r/20260428-james-cs-ete-pm_save_enabl= e-v1-0-c7a90ca6f43b@linaro.org --- drivers/hwtracing/coresight/coresight-etm4x-core.c | 48 +++++++++++++++---= ---- 1 file changed, 34 insertions(+), 14 deletions(-) diff --git a/drivers/hwtracing/coresight/coresight-etm4x-core.c b/drivers/h= wtracing/coresight/coresight-etm4x-core.c index d565a73f0042..591dfe0bc635 100644 --- a/drivers/hwtracing/coresight/coresight-etm4x-core.c +++ b/drivers/hwtracing/coresight/coresight-etm4x-core.c @@ -56,10 +56,14 @@ MODULE_PARM_DESC(boot_enable, "Enable tracing on boot"); #define PARAM_PM_SAVE_NEVER 1 /* never save any state */ #define PARAM_PM_SAVE_SELF_HOSTED 2 /* save self-hosted state only */ =20 +/* + * Save option for ETM4. ETE, sysreg ETM4s and ACPI boots ignore this opti= on and + * will always save. + */ static int pm_save_enable =3D PARAM_PM_SAVE_FIRMWARE; module_param(pm_save_enable, int, 0444); MODULE_PARM_DESC(pm_save_enable, - "Save/restore state on power down: 1 =3D never, 2 =3D self-hosted"); + "Save/restore state on power down: 1 =3D never, 2 =3D self-hosted. MMIO a= nd DT only."); =20 static struct etmv4_drvdata *etmdrvdata[NR_CPUS]; static void etm4_set_default_config(struct etmv4_config *config); @@ -2012,7 +2016,7 @@ static int etm4_cpu_save(struct etmv4_drvdata *drvdat= a) { int ret =3D 0; =20 - if (pm_save_enable !=3D PARAM_PM_SAVE_SELF_HOSTED) + if (!drvdata->save_state) return 0; =20 /* @@ -2127,7 +2131,7 @@ static void __etm4_cpu_restore(struct etmv4_drvdata *= drvdata) =20 static void etm4_cpu_restore(struct etmv4_drvdata *drvdata) { - if (pm_save_enable !=3D PARAM_PM_SAVE_SELF_HOSTED) + if (!drvdata->save_state) return; =20 if (coresight_get_mode(drvdata->csdev)) @@ -2212,6 +2216,17 @@ static void etm4_pm_clear(void) } } =20 +static bool etm4x_always_pm_save(struct device *dev, struct csdev_access *= csa) +{ + /* + * Only IO mem ETM devices will benefit from skipping PM save and only + * DT has the option to control it, not ACPI. Otherwise system register + * based ETMs and ETEs will always lose context on CPU power down, so + * always save. + */ + return !csa->io_mem || is_acpi_device_node(dev_fwnode(dev)); +} + static int etm4_add_coresight_dev(struct etm4_init_arg *init_arg) { int ret; @@ -2221,6 +2236,7 @@ static int etm4_add_coresight_dev(struct etm4_init_ar= g *init_arg) struct coresight_desc desc =3D { 0 }; u8 major, minor; char *type_name; + bool pm_save; =20 if (!drvdata) return -EINVAL; @@ -2248,6 +2264,21 @@ static int etm4_add_coresight_dev(struct etm4_init_a= rg *init_arg) =20 etm4_set_default(&drvdata->config); =20 + if (etm4x_always_pm_save(dev, init_arg->csa)) + pm_save =3D true; + else if (pm_save_enable =3D=3D PARAM_PM_SAVE_FIRMWARE) + pm_save =3D coresight_loses_context_with_cpu(dev); + else + pm_save =3D pm_save_enable !=3D PARAM_PM_SAVE_NEVER; + + if (pm_save) { + drvdata->save_state =3D devm_kmalloc(dev, + sizeof(struct etmv4_save_state), + GFP_KERNEL); + if (!drvdata->save_state) + return -ENOMEM; + } + pdata =3D coresight_get_platform_data(dev); if (IS_ERR(pdata)) return PTR_ERR(pdata); @@ -2305,17 +2336,6 @@ static int etm4_probe(struct device *dev) if (ret) return ret; =20 - if (pm_save_enable =3D=3D PARAM_PM_SAVE_FIRMWARE) - pm_save_enable =3D coresight_loses_context_with_cpu(dev) ? - PARAM_PM_SAVE_SELF_HOSTED : PARAM_PM_SAVE_NEVER; - - if (pm_save_enable !=3D PARAM_PM_SAVE_NEVER) { - drvdata->save_state =3D devm_kmalloc(dev, - sizeof(struct etmv4_save_state), GFP_KERNEL); - if (!drvdata->save_state) - return -ENOMEM; - } - raw_spin_lock_init(&drvdata->spinlock); =20 drvdata->cpu =3D coresight_get_cpu(dev); --- base-commit: 971f3474f8898ae8bbab19a9b547819a5e6fbcf1 change-id: 20260420-james-cs-ete-pm_save_enable-4e994e35cdac Best regards, --=20 James Clark