From nobody Mon May 25 01:14:30 2026 Received: from MW6PR02CU001.outbound.protection.outlook.com (mail-westus2azon11012036.outbound.protection.outlook.com [52.101.48.36]) (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 C5DAE367B95 for ; Wed, 20 May 2026 03:57:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.48.36 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779249428; cv=fail; b=CYtpQR1UdZzAX6w0PHHEVvLmL9/8KRLJsVCZrPbz199zWdd1VveoQe1sbRYJNG9t3CMkIn2ZftpK+ldziHkgRnsNSsiOfQwFMqXQPmYkjbicTxoN7Zj7+ElVXdr/Sx+gbIuSVxQ24OP6D9rDMdyuBcUTmzDSevnj+61TOe5/SBs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779249428; c=relaxed/simple; bh=Poh5v0my9OdOMNCH2Wa/efNc8hhVbye93JhgIDy4HK4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=MO9B9f7pYpFG0T3kv9SJPEJoKJvJO7ljZrGyvPUTckb2HYso3FNI1DyBWer66/joc7kYBVtkHX1pQP1Ucu4Y7fTqUz7+3XsVGeugNM9oDwt0PKShShnpaxis27tIxjTMSQsTPJ8Us1DOXe8vuDfeBcYuaIhKbXaePKPSBJDOoik= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=altera.com; spf=pass smtp.mailfrom=altera.com; dkim=pass (2048-bit key) header.d=altera.com header.i=@altera.com header.b=a8rU/z+Y; arc=fail smtp.client-ip=52.101.48.36 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=altera.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=altera.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=altera.com header.i=@altera.com header.b="a8rU/z+Y" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=dPHhpnyyxQIpUY9ev1mMcI8UJXZaCY9a+81WuJIv/t64mvBfFmN7xWzn0FImmNKiu2CLChGz55dKdNQWGzxqctwGyADnMmw3S4ndgAo65Z2JFTlqJ7mVi20nLWEwtZm9/T5kRg2vxFoUB168H2pC626Mpn2ctaoUIeQvjt6o3z9/+q277luBVwOh2QcTX5YVcD/suVYeimxDCjtoxYIQ7Om+tXWCtLJ+bmULpktYkW5hK9baCPb+r0OMOsPXeNxkghElgWyf5mBP/nmPFtRHp3PibKMRf72soRTsLAgoJFNJZBMF7cvgKK+zr6Ij5di/kmvO90TLie092iQprkuhdw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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; bh=hAzAQDdE05QJRur3Sldm50dNztM3xQhe8wrW+yknqvs=; b=i/LDU5fJRPC9i3dmkRNWmY2dVcN9UEPkzIVX2gQMQXJlLVZbY9auygRQyvp4kKkxJ0ie44vRZrXvBhIk+nxQRjSUkwM5U7HBUO2BFW/96375H0X7rmkAz/ux/Lz4Wq4MMq7abJILQOJ9/Xyi+GVdD+Onqcs+TGFwE1RV0XuSkPHdMKNhKlJ39UO2kBFWHjj1f1DFo3h75QIOGEVaIEDE5NnY2CjFybi0dStib3L988NpIaFJYA/gnoahKKK+JCLP2OdvKrxS0OLHVnDLr/H14DrUsQrnI8JHBdvDRz2ZgzQ/6FElJn+9Bge7NvUOJ34ZfdMq4bwuc3tuzjn7aKXlXw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=altera.com; dmarc=pass action=none header.from=altera.com; dkim=pass header.d=altera.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=altera.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hAzAQDdE05QJRur3Sldm50dNztM3xQhe8wrW+yknqvs=; b=a8rU/z+YBlO0w5MOgxm88L+1WEw1AbDz+lrfMe07D+jd0mFN268NaMvL8HUo1fDUc4cLJajlGhayLfEM0+CCVMPx0pgK09+WDywMlUfMRF2PDYv6ftY28gU4vPPeAD1ItNwh1ukmNbF9vsBHNxnzpVK4Nz2nazQrlmPa2WRHVSOGuUm97YjFcRsIWnv2uQsbJaMGmNFnrQn7ECOWKuPH6BtuFmuC1MmPKZfMW/jNnF04H6s8GNrT+MVZG//d+tghzAjr+OCPRoFsKnQx7HxUoEVkKBs438w8eCQavwD7znUAW6KCQoLlp56wAhGXKpECrAkRQ9lytv5BKIvR4b8QRw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=altera.com; Received: from SJ0PR03MB5950.namprd03.prod.outlook.com (2603:10b6:a03:2d3::20) by MN6PR03MB8008.namprd03.prod.outlook.com (2603:10b6:208:4ef::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.48.14; Wed, 20 May 2026 03:57:00 +0000 Received: from SJ0PR03MB5950.namprd03.prod.outlook.com ([fe80::53a0:bf93:6b6b:de01]) by SJ0PR03MB5950.namprd03.prod.outlook.com ([fe80::53a0:bf93:6b6b:de01%4]) with mapi id 15.21.0048.013; Wed, 20 May 2026 03:57:00 +0000 From: tze.yee.ng@altera.com To: Dinh Nguyen , linux-kernel@vger.kernel.org Cc: Tze Yee Ng , Adrian Ng Ho Yin , Nazim Amirul Subject: [PATCH v3 1/3] Documentation: ABI: add stratix10-rsu QSPI size and erase_size sysfs Date: Tue, 19 May 2026 20:56:55 -0700 Message-ID: <8d3efdcc67c4d52550f38bd0ddb113f68eee71c6.1779248894.git.tze.yee.ng@altera.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: References: Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR03CA0094.namprd03.prod.outlook.com (2603:10b6:a03:333::9) To SJ0PR03MB5950.namprd03.prod.outlook.com (2603:10b6:a03:2d3::20) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR03MB5950:EE_|MN6PR03MB8008:EE_ X-MS-Office365-Filtering-Correlation-Id: d3f82a9e-d4e2-4096-e329-08deb623d7e4 X-MS-Exchange-AtpMessageProperties: SA X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016|55112099003|18002099003|22082099003|56012099003|11063799006; X-Microsoft-Antispam-Message-Info: ebVcXDCdmOy0Qjr4jk9XYiXcvXtjfz5zY3BSum4y5cnT9UsS/xukfXJSazDs+p2zzhciEl5caci+9pSh3UkZR44GxmkAta7nLWk1D945KEcEazK5ZwLFVLcKJD/0HMRQsrRKoryCTPwzrzI2PrhUQxWzM7X91HK6nOUA4FPzYNNmb1ZiafHTYz4OBiee1lKIgGGDWmdSJJc8bx+GDuAGTLVfQne807T4nIlkuNCconIoO9AzWBZMpnWY4DCs0RNwJanP43AlDm2xVqYuCSMjvTPWpu3MpF9GURlWeu/GyUE9OtFmcGvECFnySCm2j9HvfMF8t4pkPe8NWuhUJ3QKhHzgs28NWLeT37gBCPMzQcMIKtDAPUKa9Y8YZs8YD1tgha/yAIrWaq2aPQs2sIWp0v1965TWoRNh4bQFtJO7xUHCWvRw4V9fKuj7mSfZSlP2C5EK5w4/VOloGqd1C1Xu21JBzlbrOZxLmUksvKcB6oskXZriv10ZDF7X5U1rc/QG0OlWFILJCrXgzGvzgXs+KJwEsGM2/Hmloq8puwZS5jr/P615VzOlvBrl65YhdwJwnnxsm53pGUl0g4IlxCIFQi72D0zW2604iC9lrxiO8VgelLp0QpoYFKXWwVxqeziHqUn+5JRDuKfn+az5eAEaeZsLi/x77mwI/Dmuhl5iATt11wcbNxDqoFQ+kJ+8xbqP X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SJ0PR03MB5950.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(55112099003)(18002099003)(22082099003)(56012099003)(11063799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?OThxc0lUa2x5U3A1YkFGdE1pZ1luQVNMb2c2UE1qbGVjWElaL3kwWkZjeHp4?= =?utf-8?B?U0MvYmFodTBZdmtkTGxwbDJwMmVPUSswaE9yYjNkQUt3MEFteExNRFMwZXBS?= =?utf-8?B?VnZDaXZQbHVlTjFTNWhuTE9FZjIxaVFjOFFRazN2WTgvZzQwNkloYUpkWlJ4?= =?utf-8?B?OTM0dXcyTk1mUnNhZVBudmprK1Q1bU0wSSsvVG93REZzQXNlUnl0S0gwNkRO?= =?utf-8?B?ejFMMVl6R042WXBGeWEyY3BoUmlVRHM3QnhsVENBT0pISDFJd3EvaHY1c09M?= =?utf-8?B?UzFFTEg3dnhEUVB4SVljY0hKdjdGMU8yQjFhUkQ1SkNMRG1KbmNTU0YvV1Fw?= =?utf-8?B?TUFiOW9xMFRYYTdlcXZmRWtUYWlFbzlFeUl3SzVIT1MzS29xNFhxWGRic1pS?= =?utf-8?B?OTZmRXpRemRPeHBXMVVXWFJLeVBxZWJHNXRJemVnTmc4S1VCVnVJZ3p0dVpq?= =?utf-8?B?RmxhK0dtQUdCY0pjajVERmhSRXJUeGI4VjlOV1hYVnBaeFFlUkdQTGpQbkg2?= =?utf-8?B?OUhhc0NGMWZBNUxIRDFqeXJnM0o5Q2IvdTNXcHFnenlPK202MzNibUJXTUlj?= =?utf-8?B?Y1AwczRSL3dXTStZYnNkTHI5T2VZQTJRL3U4YzNMZlBueHZtRGhyb1h6TGU1?= =?utf-8?B?TnVoWXJFOFZkR0llbjQ3ZS9xR1hWc240OG5Kajk4cS9UaXdDSE1qemZGcWFN?= =?utf-8?B?ck1lMWQ3Qlg2MDhnUTZheFNWR0JZNWhPdHJaZGsrRHk0OGZZcG0xemVGajhD?= =?utf-8?B?bVRaNXBmMVVPOU9nN2s3by9VVXBCSjUyc1Q1VUVkOFozOXNKODRRR2xIY3h4?= =?utf-8?B?WXc3Wk4vWTY2R3BMbExnbWVmRlJXNnFLbUFWcW9PdXZpanh0VCtyYmY0TTBo?= =?utf-8?B?eHFVK0RxZzBGa2JkZmZDMHVQMnlmbjIxMTBLVmt3L2E1cnNEdS9yb1RKeWRJ?= =?utf-8?B?Q0hxU1hpL3B4SENVQWdjM3ZxbXM4Tkp5YXVLbkQweFZqc1FpRm01b2tmbGNo?= =?utf-8?B?V3d6TDhGQzN5ZFVvVWYxU2pzTDUzTm91VW0zb3NLM2dXNy83cTFCZ05Hc0Fv?= =?utf-8?B?TjFkSWIxa1p0TW40Z0VVT2k5aVdCQjdJZ1Mva1czS24wbjZBcWVwclNwajhH?= =?utf-8?B?RWEzMy9kSHhUTW5ZM0RUU21SNU9tNkZkSXJ3eVMyd0dHTWZ1ZWxBYmRlNGFz?= =?utf-8?B?bUhyZERsMnhXVk0zeCtENVJJSzZzKzUwNUZFQUlHNGU4eVE1b0RndFVDbTNZ?= =?utf-8?B?RjYxbU81TXdsMng5TnBGaFpoYnRFTFUxZkMyOGZyTXltMmxaZkFUM3lrYUY2?= =?utf-8?B?dysySHNqZVhhM2RPWGNtMFpjblU2KzBIZjFYTnJvMWpacmQ4ZlVQeHpNMmZj?= =?utf-8?B?dVBnUWNCL0FaU2hyNUdsUzF6VmxwUG1mL2ZKbUlFM1NJUm4wdlBXc0x3OE50?= =?utf-8?B?TGIrZTZBRTBBcE95K0xVR0g4WDdMbURQckhvLzBJYnJ0VlQreUNqR25kRkhZ?= =?utf-8?B?RkkwOHdEK3ZaRXdJNnB0djZEbncyRHB0RytFY3JjbzlUeFU2dWl0TXNyS1pG?= =?utf-8?B?KzBNR2dXV0FYcEhDSDJjOGh3VzFVSjNMcjZabzF0Q3hFUkdOMXliY1d6blBF?= =?utf-8?B?dzdYVi90Vm5vckhQMzF0V1hsdndpQXpZd2lyeW10K2srd1Z2cXNEYUJEVmcr?= =?utf-8?B?QWt0VWtXVVFpLzJpaEF0eVlTeSt1RnUzZFZ6TWswY0RLK1NzcXJrbGZCK0Uv?= =?utf-8?B?RzZqU0swRzNTRWdRVGF0eEhiYW95WUpNalBoeGw0UnlQaDZoUkRnNithS2dE?= =?utf-8?B?TWJheXM4cVFxTXE0Z1ZVeDVRaTU4b1ZzdXBHRDZnaFJDREtwUUFzNGpXLzVR?= =?utf-8?B?ZHUwa1VYWkl3Zk1JYUhGSVpFRGhXV3lMOU5vdDcvQkN6WUZoVUdGRC9ZU1h1?= =?utf-8?B?WlJZMzVGa0lOR0pBYnhWZlR5OWlKcEFyOWxZbDJMV1ZLdEVrdTV0MkJOQi9M?= =?utf-8?B?a3dGNzFiYWRVR0VLenhwZk9tZHBmNVlUSHIwcHc0eUwybjRndDZISjZEMjJn?= =?utf-8?B?SXpZcFYrWGlOZFp4eDRxU2lOVFdTV3hJV1RRMDFxQnlxTE9YN05icHQ3dk5r?= =?utf-8?B?WVJHTTBjWVdMTHFFam92U3pkYWtZbm54TVY0QVZjZVlsUjhwdWpQNTEwNEVi?= =?utf-8?B?cHJpN1BXT0hoVStXL0Fjc05QMzFsaXJYaTh1Q2lmb0ZuWDZncTdhRjk4dHRR?= =?utf-8?B?NmU5Zkl6T09KYXpFN1RiZFNFb1MxRmlvMlpqdjZKdTlXbkMrK3gvQ0RWakg4?= =?utf-8?B?SmtZRnppNUZUazBEZEIvSyswNFU1aWxKVmJwQitpSmJvWGZKeUhOdz09?= X-OriginatorOrg: altera.com X-MS-Exchange-CrossTenant-Network-Message-Id: d3f82a9e-d4e2-4096-e329-08deb623d7e4 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR03MB5950.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 May 2026 03:56:59.8449 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fbd72e03-d4a5-4110-adce-614d51f2077a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: baQQodQT6ONI8OQaNOPtE/Rsp9RnXA3rs9OGbobrunqK3LK8s3/bzawJYjgOsAF0ciMpauyVtIrSzd7uJ5jytA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN6PR03MB8008 From: Tze Yee Ng Document the eight read-only sysfs files (size0=E2=80=93size3, erase_size0= =E2=80=93 erase_size3) under platform/stratix10-rsu: flash size and erase size in bytes, 32-bit hex per line, EIO when the value is not available. Signed-off-by: Tze Yee Ng --- .../sysfs-devices-platform-stratix10-rsu | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/Documentation/ABI/testing/sysfs-devices-platform-stratix10-rsu= b/Documentation/ABI/testing/sysfs-devices-platform-stratix10-rsu index ee253b033280..b93341e4471d 100644 --- a/Documentation/ABI/testing/sysfs-devices-platform-stratix10-rsu +++ b/Documentation/ABI/testing/sysfs-devices-platform-stratix10-rsu @@ -172,3 +172,61 @@ Contact: Richard Gong Description: (RO) max retry parameter is stored in the firmware decision IO section, as a byte located at offset 0x18c. + +What: /sys/devices/platform/stratix10-rsu.0/size0 +Date: May 2026 +KernelVersion: 7.1 +Contact: Tze Yee Ng +Description: + (RO) Flash size in bytes for QSPI device 0 (32-bit hex, one + line). EIO if unavailable. + +What: /sys/devices/platform/stratix10-rsu.0/size1 +Date: May 2026 +KernelVersion: 7.1 +Contact: Tze Yee Ng +Description: + (RO) Like size0 for device 1. + +What: /sys/devices/platform/stratix10-rsu.0/size2 +Date: May 2026 +KernelVersion: 7.1 +Contact: Tze Yee Ng +Description: + (RO) Like size0 for device 2. + +What: /sys/devices/platform/stratix10-rsu.0/size3 +Date: May 2026 +KernelVersion: 7.1 +Contact: Tze Yee Ng +Description: + (RO) Like size0 for device 3. + +What: /sys/devices/platform/stratix10-rsu.0/erase_size0 +Date: May 2026 +KernelVersion: 7.1 +Contact: Tze Yee Ng +Description: + (RO) Erase size in bytes for QSPI device 0 (32-bit hex, one + line). EIO if unavailable. + +What: /sys/devices/platform/stratix10-rsu.0/erase_size1 +Date: May 2026 +KernelVersion: 7.1 +Contact: Tze Yee Ng +Description: + (RO) Like erase_size0 for device 1. + +What: /sys/devices/platform/stratix10-rsu.0/erase_size2 +Date: May 2026 +KernelVersion: 7.1 +Contact: Tze Yee Ng +Description: + (RO) Like erase_size0 for device 2. + +What: /sys/devices/platform/stratix10-rsu.0/erase_size3 +Date: May 2026 +KernelVersion: 7.1 +Contact: Tze Yee Ng +Description: + (RO) Like erase_size0 for device 3. --=20 2.43.7 From nobody Mon May 25 01:14:30 2026 Received: from MW6PR02CU001.outbound.protection.outlook.com (mail-westus2azon11012036.outbound.protection.outlook.com [52.101.48.36]) (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 D3D903242D7 for ; Wed, 20 May 2026 03:57:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.48.36 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779249433; cv=fail; b=aK1+5zXs1Cfc4SCNicfY/3sCvxKh9eA3ssgyVKIhNkRDhNcMXubtac5jWzRGG867laTC5IhR7h1jWnrcqk79bHU4dP8NAN2xT6d/5A6bCxAYxN4uOqs7d2xjfQpn9+2VMRwgLzVAum5z/Q7LF7F33BcPG/L3RgAWMQ4qSUFUPyI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779249433; c=relaxed/simple; bh=+TbHXJVF93BIPNhEAGtj+PfBNiP9XCP+FgFCKaVsDv0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=pc8AwNhjYQGrQgrasrXLReIw3WUOUHI1Gi0+9ovvYgPuxIqJEEYHlaqhaT3276i2nyFjEj1hPDREqvnlvV8MKhT7gPEDcmxjwXuwn5RXB0hyuvUJn+EC33GTo9qpsBfqI+eXs5MQytnG0BoqJR0x9szxR1sKjjxJGLebbMmp+qY= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=altera.com; spf=pass smtp.mailfrom=altera.com; dkim=pass (2048-bit key) header.d=altera.com header.i=@altera.com header.b=H2EiXjiD; arc=fail smtp.client-ip=52.101.48.36 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=altera.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=altera.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=altera.com header.i=@altera.com header.b="H2EiXjiD" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=jjze7LajzD5zhn4soC0jZ3lMPuOsj4X0HGI9ATVWQMx4w5zwDpDtSWh7oIkthI09/V5a055IvCMIJ6xl2cB47RfQnSruxxAcuVUdi7Cwr+aFFeETgdKP6zEWR4u3RkTPDRDG8RCTO68Ts4PbEUMN3pjJ7G9LfmLP86RoNDQ+EFSTcM6T/BlAhIyW9YDJDYypX8VRL4kAQipdrA/gz8oXu1QfVwHDHTIb82Yu2jmqO/T1gH+DYxM6rYfeQcMx0pS8NMRP7by82ftIOIopq5K0dsvKO8j9p13sXdzvmracl57tAraWbIFpsqw0XTkCrFGTzGbPlagX1y2SFRzynPcRcg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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; bh=pfhWj6yI+gUcX6+CygIYIg6LKKM8/qeqM7vJM4alnPc=; b=dsTSFCPfYECCTs64RRCIHShIUzPh4WKozqSRDTYZNF/YATziaLpX4gwJ0N7x9nZ8WfWHFNhpayw59Qh/2czBbTVaub55ujxnNq3NY8tglZ0/A/6sTl1p9JJ/8x3/hmh8/JG2u6r/GIX0qYwhsg+zdIKG4cYaGLnpxm44thHXhwglSb3AbyFkqcTaXDfiEVAWyZEWzxgKKFVzKfxcQ9ndBYh7enOy8UFx3KT54/B51b2wXFUzTSQwYlcgo4//DvucLvj8SwX7BNnbTYEAqdn3HHz1ItZKlx+WwkmVaseN4Kd547oUAdvzwkk7N+58tyLIMT2d2CVHTH2Jafedk9M+5w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=altera.com; dmarc=pass action=none header.from=altera.com; dkim=pass header.d=altera.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=altera.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=pfhWj6yI+gUcX6+CygIYIg6LKKM8/qeqM7vJM4alnPc=; b=H2EiXjiDpbxbPZ7rlZEU2YVHcHChIyhsQ4wHD1SW1h/0yOpI7qMdTMUfCwh+QK7N8TtIG2hmEOUz0ZKUA8uyPs6mn4QZ0hV/l9KTcxXvyYKrArCX9GtnOm5SJZTr3dnhIKPdOeMIWd8Rg7XI4SGEL9PWVQHfjERPwXvPaiIRr0qZ/0WjfUX7JGk+OPl6MVyxgjw4TjuHDcuPS/edFmHg3NmbdpaiGmL2QZRvbdX8Of2XgDJETGqvf6P/olAOLxEJ0UrLaYJaqa2VntxhZK8Qn4RA8/dR5Fzp2G8bBspj4UyPzjeZplwTvdRlHucsBvcy07gkb6RcIe+o5ZoGKAv+wg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=altera.com; Received: from SJ0PR03MB5950.namprd03.prod.outlook.com (2603:10b6:a03:2d3::20) by MN6PR03MB8008.namprd03.prod.outlook.com (2603:10b6:208:4ef::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.48.14; Wed, 20 May 2026 03:57:01 +0000 Received: from SJ0PR03MB5950.namprd03.prod.outlook.com ([fe80::53a0:bf93:6b6b:de01]) by SJ0PR03MB5950.namprd03.prod.outlook.com ([fe80::53a0:bf93:6b6b:de01%4]) with mapi id 15.21.0048.013; Wed, 20 May 2026 03:57:01 +0000 From: tze.yee.ng@altera.com To: Dinh Nguyen , linux-kernel@vger.kernel.org Cc: Tze Yee Ng , Adrian Ng Ho Yin , Nazim Amirul Subject: [PATCH v3 2/3] firmware: stratix10-rsu: Add flash device info retrieval via SMC Date: Tue, 19 May 2026 20:56:56 -0700 Message-ID: <3d03a86713180dfd985f10ccdf07cff32df16e5c.1779248894.git.tze.yee.ng@altera.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR03CA0094.namprd03.prod.outlook.com (2603:10b6:a03:333::9) To SJ0PR03MB5950.namprd03.prod.outlook.com (2603:10b6:a03:2d3::20) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR03MB5950:EE_|MN6PR03MB8008:EE_ X-MS-Office365-Filtering-Correlation-Id: f7525cb3-a994-4119-6155-08deb623d850 X-MS-Exchange-AtpMessageProperties: SA X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016|55112099003|18002099003|22082099003|56012099003|11063799006|3023799007|5023799004; X-Microsoft-Antispam-Message-Info: OnB89YpcPg2ttMuj+dAiKGcGmC5EygROSZAQ7oT5Uxsg91EbN7JxnxKg5JyO/gwQJLr85NCYzenEkZzzs9LzqzuWNWAvB2jiKY/nDyDaHkT8mvDtprCTnnhrv13vU76LEIzQ5nVydrT6V2JH04W+GvYpUl2nJPmBqIbsOq+rGZyt2XU0cHGvrs7XfE5BHWRxdqu2q1EwRluNE0RK1M4O8QgMiQNLD7ng/+WQHtrTFfwAPh5Oen1s+95gr9SQYZoi7VULcwzIdrZY3hoHmit8zyAo5AkeW+2TEpjDrpBbpKl4RsdW2oGPSUExUrGA0gTE5mLTtF/Frt6fwcHqgWDcKNgmJLCUm2ZAW1JaPJETEEZr858y2NY0m9dVzyCEgB2mlEwDotQNPy8AqmYEqcO9rKGmCIAogzS/cxt5wOE05aaNFna1M/rV/+4E02bn5qkD4/tIO67nIugcEFVwm04sAUSMdcklDrbg12Uq1+QOLLYO/AicntoMD90VFOkUkXTS4SEOlxsuCoNFOzEtGlcdge0TEuaWo5HK8jzohC9HxP7e/6Po8GSm4kAVlGxHshqipsvnh4OYHo2Hkwb+PpLUKiIORp6RHVb0ZNuHhzLBa22Ng/bJre4wikjrU1ByiWRuoRjkx3jj/JJOoJ1t/hrs+KByw7NZwrQDVdQFIk1TbyijgMvCDjNmypwQfxFuv3A/ X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SJ0PR03MB5950.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(55112099003)(18002099003)(22082099003)(56012099003)(11063799006)(3023799007)(5023799004);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?AFsHRtvwDQhZLRS4aEo1fvApDCRGbIrBn2XEqLvOvYnN9YQXapQA1lpwFeY9?= =?us-ascii?Q?HRFqDWdrlkVmSt4pYCQSDOSaB+I0WUOSfwCS7DFxO/mqdHJ3gUZfw4ZWUUWa?= =?us-ascii?Q?HrW1hB/ZmWm99QG3XuTqH0A6CHG1zUc1kWr0Yv8gTV3nGnN6Rp5Oruj84dPY?= =?us-ascii?Q?BhhaZigRk/ZlgPlCrREwaVZ4fnw48yaNrNwFLJY6E7j3Kf/KVpZmySLMR6iG?= =?us-ascii?Q?kFAM4RQgnH4SB+gPV+fg8oTrmMZKtnyOgSEXK9G7Gtv9N9O2d2ux1ehUBPU0?= =?us-ascii?Q?mZ9McEPL5tCiV+4GdW29p+6JylVidJZCIMhwdxOOOcL2x3Vu641WfOyR69pU?= =?us-ascii?Q?HVAMqxkF86IgmrMUfhbH2nO1B0k8WjFCNLlgG12PdykCVh7Oqo8kcSQt7Lrx?= =?us-ascii?Q?iLq9muPUzjN3jvQOujqfO6QiHcxWL4ArIJtWyYggPfB1AHxQgOdcCk1wD14T?= =?us-ascii?Q?g1K3aDNT0GZXwQ+J/FP1IlbSGY9zaLfNGn9aCyersIDcSqyBbSzdylNeR7Dk?= =?us-ascii?Q?V8WSEOX1qeTmM+BXd4hY9ymts1320CdxsiYvlmeSuoUplR0LxNk4E8WbIXjm?= =?us-ascii?Q?l2J+BmzVSXlLAswTxEdRlkUx33QOnBrnvLNccoBOjqyYcu8H8APEh6TmI/9s?= =?us-ascii?Q?IvsBUKs3PUHpSMq0q35vIUkXq0UkyuquiVht65ptujHZxBVf06ITr5rTaPnC?= =?us-ascii?Q?s5weoVHOTpSEXhKLG+PPGg7is/5bqAiIY+BaQggW4iIGp6Rudu16j+H71KXK?= =?us-ascii?Q?ksfwHff2TXRfIXFXxyAUcle79YyEQMMUxFoot1PM5GdOS8SHPwgWgbspP/af?= =?us-ascii?Q?UIadwWQO2xeAhkYvIAcC6LM4r36wwy61GZ2u3WDwjjwtJW/ZMPzgFffu+mF3?= =?us-ascii?Q?itQv02OHlQQ1u2jiYonC9hxrGtKa7p1Ma7QHFcEcQZ9oDxfXNslqRCFff0x2?= =?us-ascii?Q?KvTDw9DCoVkCxCsOYV0QC29ksTl9pEY9wCNDO4B4i5U39VUwcseKuRmQFrM5?= =?us-ascii?Q?12ExWzeatQs5ISjg9LO5Rfz1IDxLrm7YKujqV5+UXPjiEZ53Lb9ZeDOWP8dB?= =?us-ascii?Q?JF8xMF+7wEbygyq9MKf5V3whftD3bKMMrg2lYETVlQ7pxa8Lsttk85z3aveM?= =?us-ascii?Q?H0JvXrRzKL2bUK49697WPeg6lmlIpGnVxArZ8wMmcTJvt9jThUaOZlF1RhRM?= =?us-ascii?Q?0yg293I5aIdAiUXb9i7ukElLCCO+uKacHBFVaMfJ6/6YVki4ru3TvCBaR6E9?= =?us-ascii?Q?BxRALjgsz+6+5K3aDohZYJcK+h1KHuRibl430AtLcWdlRH3DhgNqK8VYKuof?= =?us-ascii?Q?jg7yFQwDyTVG1+iQ49M9fpzmxBzuVsZEzfrUJystoJWm0y9IoEiEgGDNbxzV?= =?us-ascii?Q?j5c4nMakidgXnF8rfOLGEzAhXMeeFBEp8g55P26KqzjUNnvKcNJw5Az3viqg?= =?us-ascii?Q?Epd4JQ+gnIPkWQehxR/QQieyVN8klaxwHkSxbZ0sa8ztYlgnH3wmv/iNfALD?= =?us-ascii?Q?+UliU5ZXu9wsarSOPV6kpnKgAmAMgNkuI0yAhO9+2mZcOHSlTZ4toyugQBo/?= =?us-ascii?Q?nD8mUVPLWdpX/MI/uMoqGMGthrNKp1NK8CB5il4jilcP/A9z1oKL3VFoR1jx?= =?us-ascii?Q?bWwqbDJVIzvhFpB3R/r0BdH7NUvJWsPcDn0cDmg+aiim/hjvEKc3uYVRbCf1?= =?us-ascii?Q?UYFXJY56cPckDmCmFjvVzt8cVU0R7vqITst9bzTqWkOCpwyN8Y9LI0lgsnkg?= =?us-ascii?Q?jGSP1QEKXA=3D=3D?= X-OriginatorOrg: altera.com X-MS-Exchange-CrossTenant-Network-Message-Id: f7525cb3-a994-4119-6155-08deb623d850 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR03MB5950.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 May 2026 03:57:00.8467 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fbd72e03-d4a5-4110-adce-614d51f2077a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: a0UOdB7cwFFsVv6KJgVPkYBf7PkTUOHHdT6zGE1GkN3M9Bivt/qA9O8gbnDLZ2C1JYu3Qp4q5SZAMxPPaykvcw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN6PR03MB8008 Content-Type: text/plain; charset="utf-8" From: Tze Yee Ng Extend the Intel Remote System Update (RSU) driver to retrieve the device info table through an ARM SMC call to the service layer. The table reports flash size and erase size for multiple devices. Signed-off-by: Tze Yee Ng --- drivers/firmware/stratix10-rsu.c | 199 +++++++++++++++++- drivers/firmware/stratix10-svc.c | 94 ++++++++- include/linux/firmware/intel/stratix10-smc.h | 25 ++- .../firmware/intel/stratix10-svc-client.h | 12 +- 4 files changed, 314 insertions(+), 16 deletions(-) diff --git a/drivers/firmware/stratix10-rsu.c b/drivers/firmware/stratix10-= rsu.c index e1912108a0fe..6c5f952f48d8 100644 --- a/drivers/firmware/stratix10-rsu.c +++ b/drivers/firmware/stratix10-rsu.c @@ -7,17 +7,24 @@ #include #include #include +#include +#include +#include #include #include #include #include #include -#include #include #include -#include =20 -#define RSU_ERASE_SIZE_MASK GENMASK_ULL(63, 32) +/* + * INTEL_SIP_SMC_RSU_GET_DEVICE_INFO packs each flash word as: + * [63:32] erase_size, [31:0] size (see stratix10-smc.h). + */ +#define RSU_DEVICE_INFO_SIZE_MASK GENMASK_ULL(31, 0) +#define RSU_DEVICE_INFO_ERASE_SIZE_MASK GENMASK_ULL(63, 32) + #define RSU_DCMF0_MASK GENMASK_ULL(31, 0) #define RSU_DCMF1_MASK GENMASK_ULL(63, 32) #define RSU_DCMF2_MASK GENMASK_ULL(31, 0) @@ -33,11 +40,31 @@ #define INVALID_DCMF_VERSION 0xFF #define INVALID_DCMF_STATUS 0xFFFFFFFF #define INVALID_SPT_ADDRESS 0x0 +#define INVALID_DEVICE_INFO (~0U) =20 #define RSU_RETRY_SLEEP_MS (1U) #define RSU_ASYNC_MSG_RETRY (3U) #define RSU_GET_SPT_RESP_LEN (4 * sizeof(unsigned int)) =20 +struct flash_device_info { + unsigned int size; + unsigned int erase_size; +}; + +/** + * rsu_device_info_set_from_packed() - Decode one RSU device-info SMC word + * @di: slot to fill + * @packed: register value: [63:32] erase_size, [31:0] size + * (INTEL_SIP_SMC_RSU_GET_DEVICE_INFO) + */ +static void rsu_device_info_set_from_packed(struct flash_device_info *di, + unsigned long packed) +{ + di->size =3D (unsigned int)FIELD_GET(RSU_DEVICE_INFO_SIZE_MASK, packed); + di->erase_size =3D (unsigned int)FIELD_GET(RSU_DEVICE_INFO_ERASE_SIZE_MAS= K, + packed); +} + typedef void (*rsu_callback)(struct stratix10_svc_client *client, struct stratix10_svc_cb_data *data); /** @@ -60,6 +87,8 @@ typedef void (*rsu_callback)(struct stratix10_svc_client = *client, * @dcmf_status.dcmf1: dcmf1 status * @dcmf_status.dcmf2: dcmf2 status * @dcmf_status.dcmf3: dcmf3 status + * @device_info: per-device flash information array; each entry contains + * size and erase size for one flash device * @retry_counter: the current image's retry counter * @max_retry: the preset max retry value * @spt0_address: address of spt0 @@ -93,6 +122,8 @@ struct stratix10_rsu_priv { unsigned int dcmf3; } dcmf_status; =20 + struct flash_device_info device_info[4]; + unsigned int retry_counter; unsigned int max_retry; =20 @@ -100,6 +131,20 @@ struct stratix10_rsu_priv { unsigned long spt1_address; }; =20 +/** + * rsu_device_info_invalidate() - Mark all cached QSPI device slots invalid + * @priv: RSU private data + */ +static void rsu_device_info_invalidate(struct stratix10_rsu_priv *priv) +{ + unsigned int i; + + for (i =3D 0; i < ARRAY_SIZE(priv->device_info); i++) { + priv->device_info[i].size =3D INVALID_DEVICE_INFO; + priv->device_info[i].erase_size =3D INVALID_DEVICE_INFO; + } +} + typedef void (*rsu_async_callback)(struct device *dev, struct stratix10_rsu_priv *priv, struct stratix10_svc_cb_data *data); =20 @@ -229,8 +274,57 @@ static void rsu_dcmf_status_callback(struct stratix10_= svc_client *client, } =20 /** - * rsu_async_get_spt_table_callback() - Callback to be used by the rsu_asy= nc_send() - * to retrieve the SPT table information. + * rsu_get_device_info_callback() - Callback from Intel service layer for + * getting the QSPI device info + * @client: pointer to client + * @data: pointer to callback data structure + * + * Callback from Intel service layer for QSPI device info. + * @data->kaddr1 points to struct arm_smccc_1_2_regs on SVC_STATUS_OK or + * SVC_STATUS_ERROR; it is NULL on SVC_STATUS_NO_SUPPORT (unsupported comm= and). + */ +static void rsu_get_device_info_callback(struct stratix10_svc_client *clie= nt, + struct stratix10_svc_cb_data *data) +{ + struct stratix10_rsu_priv *priv =3D client->priv; + struct arm_smccc_1_2_regs *res =3D data->kaddr1; + + if (data->status =3D=3D BIT(SVC_STATUS_OK)) { + if (!res) { + dev_err(client->dev, + "COMMAND_RSU_GET_DEVICE_INFO: missing result payload\n"); + rsu_device_info_invalidate(priv); + complete(&priv->completion); + return; + } + + rsu_device_info_set_from_packed(&priv->device_info[0], res->a1); + rsu_device_info_set_from_packed(&priv->device_info[1], res->a2); + rsu_device_info_set_from_packed(&priv->device_info[2], res->a3); + rsu_device_info_set_from_packed(&priv->device_info[3], res->a4); + + } else if (data->status =3D=3D BIT(SVC_STATUS_NO_SUPPORT)) { + dev_warn(client->dev, + "COMMAND_RSU_GET_DEVICE_INFO not supported by firmware\n"); + rsu_device_info_invalidate(priv); + } else { + if (res) + dev_err(client->dev, + "COMMAND_RSU_GET_DEVICE_INFO returned 0x%lX\n", + res->a0); + else + dev_err(client->dev, + "COMMAND_RSU_GET_DEVICE_INFO failed with status 0x%X\n", + data->status); + rsu_device_info_invalidate(priv); + } + + complete(&priv->completion); +} + +/** + * rsu_async_get_spt_table_callback() - Callback to be used by the + * rsu_async_send() to retrieve the SPT table information. * @dev: pointer to device object * @priv: pointer to priv object * @data: pointer to callback data structure @@ -637,6 +731,75 @@ static ssize_t notify_store(struct device *dev, return count; } =20 +static ssize_t rsu_device_info_show(struct device *dev, char *buf, + unsigned int index, bool erase_size) +{ + struct stratix10_rsu_priv *priv =3D dev_get_drvdata(dev); + unsigned int value; + + if (!priv) + return -ENODEV; + + if (index >=3D ARRAY_SIZE(priv->device_info)) + return -EINVAL; + + value =3D erase_size ? priv->device_info[index].erase_size : + priv->device_info[index].size; + + if (value =3D=3D INVALID_DEVICE_INFO) + return -EIO; + + return sysfs_emit(buf, "0x%08x\n", value); +} + +static ssize_t size0_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + return rsu_device_info_show(dev, buf, 0, false); +} + +static ssize_t size1_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + return rsu_device_info_show(dev, buf, 1, false); +} + +static ssize_t size2_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + return rsu_device_info_show(dev, buf, 2, false); +} + +static ssize_t size3_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + return rsu_device_info_show(dev, buf, 3, false); +} + +static ssize_t erase_size0_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + return rsu_device_info_show(dev, buf, 0, true); +} + +static ssize_t erase_size1_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + return rsu_device_info_show(dev, buf, 1, true); +} + +static ssize_t erase_size2_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + return rsu_device_info_show(dev, buf, 2, true); +} + +static ssize_t erase_size3_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + return rsu_device_info_show(dev, buf, 3, true); +} + static ssize_t spt0_address_show(struct device *dev, struct device_attribute *attr, char *buf) { @@ -681,6 +844,14 @@ static DEVICE_ATTR_RO(dcmf0_status); static DEVICE_ATTR_RO(dcmf1_status); static DEVICE_ATTR_RO(dcmf2_status); static DEVICE_ATTR_RO(dcmf3_status); +static DEVICE_ATTR_RO(size0); +static DEVICE_ATTR_RO(size1); +static DEVICE_ATTR_RO(size2); +static DEVICE_ATTR_RO(size3); +static DEVICE_ATTR_RO(erase_size0); +static DEVICE_ATTR_RO(erase_size1); +static DEVICE_ATTR_RO(erase_size2); +static DEVICE_ATTR_RO(erase_size3); static DEVICE_ATTR_WO(reboot_image); static DEVICE_ATTR_WO(notify); static DEVICE_ATTR_RO(spt0_address); @@ -703,6 +874,14 @@ static struct attribute *rsu_attrs[] =3D { &dev_attr_dcmf1_status.attr, &dev_attr_dcmf2_status.attr, &dev_attr_dcmf3_status.attr, + &dev_attr_size0.attr, + &dev_attr_size1.attr, + &dev_attr_size2.attr, + &dev_attr_size3.attr, + &dev_attr_erase_size0.attr, + &dev_attr_erase_size1.attr, + &dev_attr_erase_size2.attr, + &dev_attr_erase_size3.attr, &dev_attr_reboot_image.attr, &dev_attr_notify.attr, &dev_attr_spt0_address.attr, @@ -743,6 +922,7 @@ static int stratix10_rsu_probe(struct platform_device *= pdev) priv->max_retry =3D INVALID_RETRY_COUNTER; priv->spt0_address =3D INVALID_SPT_ADDRESS; priv->spt1_address =3D INVALID_SPT_ADDRESS; + rsu_device_info_invalidate(priv); =20 mutex_init(&priv->lock); priv->chan =3D stratix10_svc_request_channel_byname(&priv->client, @@ -795,6 +975,15 @@ static int stratix10_rsu_probe(struct platform_device = *pdev) stratix10_svc_free_channel(priv->chan); } =20 + /* get QSPI device info from firmware */ + ret =3D rsu_send_msg(priv, COMMAND_RSU_GET_DEVICE_INFO, 0, + rsu_get_device_info_callback); + if (ret) { + dev_err(dev, "Error, getting QSPI Device Info %i\n", ret); + stratix10_svc_remove_async_client(priv->chan); + stratix10_svc_free_channel(priv->chan); + return ret; + } =20 ret =3D rsu_send_async_msg(dev, priv, COMMAND_RSU_GET_SPT_TABLE, 0, rsu_async_get_spt_table_callback); diff --git a/drivers/firmware/stratix10-svc.c b/drivers/firmware/stratix10-= svc.c index e9e35d67ef96..d92766279c24 100644 --- a/drivers/firmware/stratix10-svc.c +++ b/drivers/firmware/stratix10-svc.c @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -443,13 +444,15 @@ static void svc_thread_cmd_config_status(struct strat= ix10_svc_controller *ctrl, * svc_thread_recv_status_ok() - handle the successful status * @p_data: pointer to service data structure * @cb_data: pointer to callback data structure to service client - * @res: result from SMC or HVC call + * @res: result from SMC or HVC call (a0-a3; used for routing and most com= mands) + * @res12: full v1.2 result for %COMMAND_RSU_GET_DEVICE_INFO, else NULL * * Send back the correspond status to the service clients. */ static void svc_thread_recv_status_ok(struct stratix10_svc_data *p_data, struct stratix10_svc_cb_data *cb_data, - struct arm_smccc_res res) + struct arm_smccc_res res, + struct arm_smccc_1_2_regs *res12) { cb_data->kaddr1 =3D NULL; cb_data->kaddr2 =3D NULL; @@ -505,6 +508,16 @@ static void svc_thread_recv_status_ok(struct stratix10= _svc_data *p_data, res.a2 =3D res.a2 * BYTE_TO_WORD_SIZE; cb_data->kaddr2 =3D &res.a2; break; + case COMMAND_RSU_GET_DEVICE_INFO: + if (WARN_ON(!res12)) { + cb_data->status =3D BIT(SVC_STATUS_ERROR); + break; + } + cb_data->status =3D BIT(SVC_STATUS_OK); + cb_data->kaddr1 =3D res12; + cb_data->kaddr2 =3D NULL; + cb_data->kaddr3 =3D NULL; + break; default: pr_warn("it shouldn't happen\n"); break; @@ -514,6 +527,10 @@ static void svc_thread_recv_status_ok(struct stratix10= _svc_data *p_data, p_data->chan->scl->receive_cb(p_data->chan->scl, cb_data); } =20 +static void svc_smccc_1_2_full(struct stratix10_svc_controller *ctrl, + const struct arm_smccc_1_2_regs *args, + struct arm_smccc_1_2_regs *res); + /** * svc_normal_to_secure_thread() - the function to run in the kthread * @data: data pointer for kthread function @@ -531,6 +548,7 @@ static int svc_normal_to_secure_thread(void *data) struct stratix10_svc_data *pdata =3D NULL; struct stratix10_svc_cb_data *cbdata =3D NULL; struct arm_smccc_res res; + struct arm_smccc_1_2_regs res12 =3D { 0 }; unsigned long a0, a1, a2, a3, a4, a5, a6, a7; int ret_fifo =3D 0; =20 @@ -713,6 +731,16 @@ static int svc_normal_to_secure_thread(void *data) a5 =3D (unsigned long)pdata->paddr_output; a6 =3D (unsigned long)pdata->size_output / BYTE_TO_WORD_SIZE; break; + case COMMAND_RSU_GET_DEVICE_INFO: + a0 =3D INTEL_SIP_SMC_RSU_GET_DEVICE_INFO; + a1 =3D 0; + a2 =3D 0; + a3 =3D 0; + a4 =3D 0; + a5 =3D 0; + a6 =3D 0; + a7 =3D 0; + break; default: pr_warn("it shouldn't happen\n"); mutex_unlock(&ctrl->sdm_lock); @@ -726,7 +754,18 @@ static int svc_normal_to_secure_thread(void *data) pr_debug(" a3=3D0x%016x\n", (unsigned int)a3); pr_debug(" a4=3D0x%016x\n", (unsigned int)a4); pr_debug(" a5=3D0x%016x\n", (unsigned int)a5); - ctrl->invoke_fn(a0, a1, a2, a3, a4, a5, a6, a7, &res); + if (pdata->command =3D=3D COMMAND_RSU_GET_DEVICE_INFO) { + struct arm_smccc_1_2_regs args12 =3D { 0 }; + + args12.a0 =3D INTEL_SIP_SMC_RSU_GET_DEVICE_INFO; + svc_smccc_1_2_full(ctrl, &args12, &res12); + res.a0 =3D res12.a0; + res.a1 =3D res12.a1; + res.a2 =3D res12.a2; + res.a3 =3D res12.a3; + } else { + ctrl->invoke_fn(a0, a1, a2, a3, a4, a5, a6, a7, &res); + } =20 pr_debug("%s: %s: after SMC call -- res.a0=3D0x%016x", __func__, chan->name, (unsigned int)res.a0); @@ -749,9 +788,15 @@ static int svc_normal_to_secure_thread(void *data) } =20 switch (res.a0) { - case INTEL_SIP_SMC_STATUS_OK: - svc_thread_recv_status_ok(pdata, cbdata, res); + case INTEL_SIP_SMC_STATUS_OK: { + struct arm_smccc_1_2_regs *devinfo_res =3D + (pdata->command =3D=3D COMMAND_RSU_GET_DEVICE_INFO) ? + &res12 : NULL; + + svc_thread_recv_status_ok(pdata, cbdata, res, + devinfo_res); break; + } case INTEL_SIP_SMC_STATUS_BUSY: switch (pdata->command) { case COMMAND_RECONFIG_DATA_SUBMIT: @@ -792,10 +837,16 @@ static int svc_normal_to_secure_thread(void *data) case INTEL_SIP_SMC_RSU_ERROR: pr_err("%s: STATUS_ERROR\n", __func__); cbdata->status =3D BIT(SVC_STATUS_ERROR); - cbdata->kaddr1 =3D &res.a1; - cbdata->kaddr2 =3D (res.a2) ? - svc_pa_to_va(res.a2) : NULL; - cbdata->kaddr3 =3D (res.a3) ? &res.a3 : NULL; + if (pdata->command =3D=3D COMMAND_RSU_GET_DEVICE_INFO) { + cbdata->kaddr1 =3D &res12; + cbdata->kaddr2 =3D NULL; + cbdata->kaddr3 =3D NULL; + } else { + cbdata->kaddr1 =3D &res.a1; + cbdata->kaddr2 =3D (res.a2) ? + svc_pa_to_va(res.a2) : NULL; + cbdata->kaddr3 =3D (res.a3) ? &res.a3 : NULL; + } pdata->chan->scl->receive_cb(pdata->chan->scl, cbdata); break; default: @@ -1011,6 +1062,31 @@ static void svc_smccc_hvc(unsigned long a0, unsigned= long a1, arm_smccc_hvc(a0, a1, a2, a3, a4, a5, a6, a7, res); } =20 +/** + * svc_smccc_1_2_full() - SMC/HVC v1.2 call matching the sync channel meth= od + * @ctrl: service controller (selects SMC vs HVC) + * @args: arguments + * @res: full register-file result (a0-a17) + */ +static void svc_smccc_1_2_full(struct stratix10_svc_controller *ctrl, + const struct arm_smccc_1_2_regs *args, + struct arm_smccc_1_2_regs *res) +{ + if (ctrl->invoke_fn =3D=3D svc_smccc_smc) { + arm_smccc_1_2_smc(args, res); + } else if (ctrl->invoke_fn =3D=3D svc_smccc_hvc) { + arm_smccc_1_2_hvc(args, res); + } else { + WARN_ON_ONCE(1); + /* + * INTEL_SIP_SMC_STATUS_OK is 0; zero-filled res would be misrouted + * as success. Force an error path and clear fabricated payload. + */ + memset(res, 0, sizeof(*res)); + res->a0 =3D INTEL_SIP_SMC_STATUS_ERROR; + } +} + /** * get_invoke_func() - invoke SMC or HVC call * @dev: pointer to device diff --git a/include/linux/firmware/intel/stratix10-smc.h b/include/linux/f= irmware/intel/stratix10-smc.h index 935dba3633b5..7455ed1d4708 100644 --- a/include/linux/firmware/intel/stratix10-smc.h +++ b/include/linux/firmware/intel/stratix10-smc.h @@ -429,6 +429,29 @@ INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_FPGA_= CONFIG_COMPLETED_WRITE) #define INTEL_SIP_SMC_RSU_DCMF_STATUS \ INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_RSU_DCMF_STATUS) =20 +/** + * Request INTEL_SIP_SMC_RSU_GET_DEVICE_INFO + * + * Sync call used by service driver at EL1 to query QSPI device info from = FW + * + * Call register usage: + * a0 INTEL_SIP_SMC_RSU_GET_DEVICE_INFO + * a1-7 not used + * + * Return status + * a0 INTEL_SIP_SMC_STATUS_OK + * a1 erasesize0 | size0 + * a2 erasesize1 | size1 + * a3 erasesize2 | size2 + * a4 erasesize3 | size3 + * Or + * + * a0 INTEL_SIP_SMC_RSU_ERROR + */ +#define INTEL_SIP_SMC_FUNCID_RSU_GET_DEVICE_INFO 22 +#define INTEL_SIP_SMC_RSU_GET_DEVICE_INFO \ + INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_RSU_GET_DEVICE_INFO) + /** * Request INTEL_SIP_SMC_SERVICE_COMPLETED * Sync call to check if the secure world have completed service request @@ -493,7 +516,7 @@ INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_FPGA_C= ONFIG_COMPLETED_WRITE) * a3 not used */ #define INTEL_SIP_SMC_FUNCID_MBOX_SEND_CMD 60 - #define INTEL_SIP_SMC_MBOX_SEND_CMD \ +#define INTEL_SIP_SMC_MBOX_SEND_CMD \ INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_MBOX_SEND_CMD) =20 /** diff --git a/include/linux/firmware/intel/stratix10-svc-client.h b/include/= linux/firmware/intel/stratix10-svc-client.h index 91013161e9db..944362657282 100644 --- a/include/linux/firmware/intel/stratix10-svc-client.h +++ b/include/linux/firmware/intel/stratix10-svc-client.h @@ -128,6 +128,10 @@ struct stratix10_svc_chan; * @COMMAND_RSU_DCMF_STATUS: query firmware for the DCMF status * return status is SVC_STATUS_OK or SVC_STATUS_ERROR * + * @COMMAND_RSU_GET_DEVICE_INFO: query firmware for QSPI device info; + * return status is SVC_STATUS_OK, SVC_STATUS_ERROR, or SVC_STATUS_NO_SUPP= ORT + * (unsupported command / firmware compatibility path in the service layer= ). + * * @COMMAND_RSU_GET_SPT_TABLE: query firmware for SPT table * return status is SVC_STATUS_OK or SVC_STATUS_ERROR * @@ -170,6 +174,7 @@ enum stratix10_svc_command_code { COMMAND_RSU_MAX_RETRY, COMMAND_RSU_DCMF_VERSION, COMMAND_RSU_DCMF_STATUS, + COMMAND_RSU_GET_DEVICE_INFO, COMMAND_FIRMWARE_VERSION, COMMAND_RSU_GET_SPT_TABLE, /* for FCS */ @@ -219,7 +224,12 @@ struct stratix10_svc_command_config_type { /** * struct stratix10_svc_cb_data - callback data structure from service lay= er * @status: the status of sent command - * @kaddr1: address of 1st completed data block + * @kaddr1: address of 1st completed data block, or command-specific paylo= ad. + * For COMMAND_RSU_GET_DEVICE_INFO on SVC_STATUS_OK or SVC_STATUS_ERROR, + * points to struct arm_smccc_1_2_regs filled by the SMC/HVC return + * registers (a0 status, a1-a4 packed device words per + * INTEL_SIP_SMC_RSU_GET_DEVICE_INFO). On SVC_STATUS_NO_SUPPORT (older + * firmware that does not handle this command), kaddr1 is NULL. * @kaddr2: address of 2nd completed data block * @kaddr3: address of 3rd completed data block */ --=20 2.43.7 From nobody Mon May 25 01:14:30 2026 Received: from MW6PR02CU001.outbound.protection.outlook.com (mail-westus2azon11012036.outbound.protection.outlook.com [52.101.48.36]) (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 2124936A356 for ; Wed, 20 May 2026 03:57:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.48.36 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779249437; cv=fail; b=YmOSYjDhYFeyuurYjBQsTQVvEI0ZQw22uDpwiSIirjsAfrQhckV49847HPjYdsNYPa/47wlssFIY7eL1pjQJa39JmBQVaaLcBT9f2oLyHGXKAiIvFH5OqPVa1zOB5veJLpaevNEcXr2cR83hWLV2YPszT3mIUMx02Mq4+M97JSA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779249437; c=relaxed/simple; bh=ub77gwJvYcpNJPqmWWtS4QKFSlN6jypiy3hO1eQuJzo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=kZsQE/ztaROrGERfP47ghDcmKxVmr1Hcz4z9yoTn5/cwZfnyKAkC4Cr0e2pQ6Pun7usi/2Qigh+3SOToatFIHCqJK9PowTkZ6OZ1tBi1ETkc9PQ3dSRW8wi7II8fX3B9lNYx/zfWdy0BsXX7+RywVTFxgCq+S9xK84QQxvdAGtc= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=altera.com; spf=pass smtp.mailfrom=altera.com; dkim=pass (2048-bit key) header.d=altera.com header.i=@altera.com header.b=wPRxhJDs; arc=fail smtp.client-ip=52.101.48.36 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=altera.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=altera.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=altera.com header.i=@altera.com header.b="wPRxhJDs" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Dzp/P5vC/bCPqQrk+C5vjeJZKlLxKeWaWfpItlfckC9bzkM6KlncFjukoSQRLIv6XQqAah2OhvtczfFo8Z2qiJeIGWz9huBUlReYA3snGBaooh6tVUltYjp3dqnt2gnrp5qYgvJl/JrXXq8ss1MeNQL6k15IwAjIXDooIYzLhBDlYpIqWjkqWKSNJ7hvWGKMfWz8vqI23aY8Iqq8yXWz0RN6DG2SpHY2wK7QCr/T/OTWhFWLtUymmsA1AZM363L4D/FawjwwnQBS+rd2yMfJ0pr8iJimXdCwm56SScaMfD14+FzDxc5mF8BlSfIoLn1GtYuRo7WtoIs8mhctbYEcVw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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; bh=IAeyyp1bkrqMG7yCgBORxwvNdHhxkP120XS4W1GUlA8=; b=mQUYddRrv+xbQyZ2lZAOl+Gopa+cIX9cisqqala46a2NiNzWR29z3EALLfqqR07rxfKxRuw9Vmuqn69fsASJ7D8+O51fFTkhPR9JdXI2LqkVXXBlBTA9CXwNxpL0ysAdPMviHVvXlXox8hHUDKdTvPyH1LjwvMwXa7xWHfpgBn4IqWwpbSN+6PfUQyEmL2a+2ACUZK7xkPsAeJ0vtiOTvsdTYLDYphVDG0P0/jZkEA9A4z6GdFX3pRm3jrJfH4SgJCdfCbxHeKvNjEa8dEPptP0muU92PgGZU4R9DzPgcVcsLTWr62rxaibn0nMKxzMvMoRP7jsIfM0qB8WSMaTxvA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=altera.com; dmarc=pass action=none header.from=altera.com; dkim=pass header.d=altera.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=altera.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=IAeyyp1bkrqMG7yCgBORxwvNdHhxkP120XS4W1GUlA8=; b=wPRxhJDsZXBWecmo5K6hOqp/fQaw0AryZk2LQVFNuwYdrGYtXkZb9fWCdaMX4q0mrNPwMvIm5FA/U/GscA1bc0HtQbFMdRBdjiaNmRUckOJz6w5nR7xHYDh/n0X8MvnPgFifY0DwoXOepmvmRiLYfSXZW9eXC3NF28/n27gC6uSOHR01gPkJqDigh4gYwwhms3MtzUPqFJ2Nmtq47OoP63Z3tU4HR/fVHf8GAOFExiyV1s0t+ARk4O2PeuQYzbmYlJGoMExSr4xP6B70De62dBK+rQHqBh3J8BSWZD6tRqigjcKvuU5CJYY0dnb39/FIzuKZMdmEb2eRQexOUko3GQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=altera.com; Received: from SJ0PR03MB5950.namprd03.prod.outlook.com (2603:10b6:a03:2d3::20) by MN6PR03MB8008.namprd03.prod.outlook.com (2603:10b6:208:4ef::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.48.14; Wed, 20 May 2026 03:57:01 +0000 Received: from SJ0PR03MB5950.namprd03.prod.outlook.com ([fe80::53a0:bf93:6b6b:de01]) by SJ0PR03MB5950.namprd03.prod.outlook.com ([fe80::53a0:bf93:6b6b:de01%4]) with mapi id 15.21.0048.013; Wed, 20 May 2026 03:57:01 +0000 From: tze.yee.ng@altera.com To: Dinh Nguyen , linux-kernel@vger.kernel.org Cc: Tze Yee Ng , Adrian Ng Ho Yin , Nazim Amirul Subject: [PATCH v3 3/3] firmware: stratix10-rsu: remove async client before freeing channel on probe errors Date: Tue, 19 May 2026 20:56:57 -0700 Message-ID: <9f06e9ba2946547de4a1ac86077957e5c62e978a.1779248894.git.tze.yee.ng@altera.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR03CA0094.namprd03.prod.outlook.com (2603:10b6:a03:333::9) To SJ0PR03MB5950.namprd03.prod.outlook.com (2603:10b6:a03:2d3::20) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR03MB5950:EE_|MN6PR03MB8008:EE_ X-MS-Office365-Filtering-Correlation-Id: 2c830b48-94ff-4db0-8999-08deb623d90b X-MS-Exchange-AtpMessageProperties: SA X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016|55112099003|18002099003|22082099003|56012099003|11063799006; X-Microsoft-Antispam-Message-Info: RLairYBJsBwybCGbtpS8z760D6JAWC9ih+VA5fo85mf2nYNyJ+Z/IuSGdISUBspllX2XPCOA6BVGkoXo54YB6N2/SPt3aY8Ofag1KLkN6fpmczTgbiwO8p9yQUcC4qlsQa9ZkhNUlqBQZMPgn8F7pQ0DDfbuczvJ/LMm0gTGa/qGJO+BBiKnYhIyC9/wl5eJDwTjjZO3ItkM9QXDGwNWUYhvciOL7eaTTT4fa4Fgsn3FzvJ0bWNiSJ6jCeBdgxuChtjx0K8+BkWpxDf2ONgSkCeuZaztFxscR+prFHhLNzhWEwgmIxnpMdSqbYyWyv3S7LL5vatHnYvoyJW0Frz0eZNSsX9znkqKiIKkKUhXzZhagHgoUfDE/6v6kWk6AsjqPjuD1kV8gB4E2hrr5c74mADujDyRJooKNnCRdXpunyK2gCNE1BIBQYm8T8c5PGvxEbFh9jMctJK/wX2lPxQJ5233qkweYx6KPnuOPCxYlnAeaDTF8d86PBtkUOF3JgV2RjOadjIZfbrjttczGBLAqEtwHrFoRD7tjJ3vA+jUn1+z0ULHrNTDCzEeFfYH7xZDRsNwnAqie67NS4hwlqbQ9EjSGYaS7bjNgZmuTjwv312LrPwWtLM1x76j4KgG7+dYEjm+c9CK9YS0sBf+9W9oT3aCarY4DsYFh9tCYc5COD4Co3nlV2YeQ4vymUxBe40C X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SJ0PR03MB5950.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(55112099003)(18002099003)(22082099003)(56012099003)(11063799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?++QA0O9p5jwh9lnwiVirg2ilZ009AglMbsnhb9q8UaWmOZkYOBg62qO66h9d?= =?us-ascii?Q?Q3y4yUy9yLbj+WAUK54t0dq76w20CivKdPY/HI5mh5rC710ZwxQTjFz05ULg?= =?us-ascii?Q?05hLEJG3seip0RN4esiwv5BHcWMHCIhIU8GeK49tJr6VPdeGNEFc7BaCS5Sw?= =?us-ascii?Q?O1T+fC8+dxh7prdG0if3UxNXW46Umde75Vp2fzJBNp9kEO4SpOFwhgsUad68?= =?us-ascii?Q?zJcjmlt8LkKyAZRjuRJ2km+fPLuJ6q102s1YMvAQPWXUjNEjep1pLtw2Sc7j?= =?us-ascii?Q?1/jGE8VCZ7FdI51xZWT4EUtgC+//FJElpCKfbclHyvPPeKWkRwRt6g/TNmuR?= =?us-ascii?Q?HqnP2ciXl7wvaSUcPx7JXmyvPvItGLL8RLxtZeTQDH1NfdWKaUtQY8khBDTj?= =?us-ascii?Q?iCGz1oB64qbekG740tZp8tiwqIDJJgCTOeAojlcbjvhlfLJV36n+htMM9BmD?= =?us-ascii?Q?eSXb113OkGsXcRJifqvJf+IeqeRNk2osSbdS20mCYDQWza6HPyjPzqlSX4Ha?= =?us-ascii?Q?kph7LLGrF7zCOJm3AQFNmsMx7yjrsr2XpBT5svkSwo6xhPqdev30npkhj+61?= =?us-ascii?Q?PBzidEtzd9+2E+k20oy84wL+i5bK1dqvrw92PuIFEjdHDvWwO6GnpynQyMpY?= =?us-ascii?Q?zARs3DDtX96O7uFjPA/Z56DxwFEDGCtTJ7iRC0c4aV9bp4BLXwbpTrw8bOHw?= =?us-ascii?Q?VuxkcNUEp47IwlAba9WttfxpJh4cDsTEVNRxdYwVBYGx0DLHJEAaUBv41TQd?= =?us-ascii?Q?dy7CJQkoQI1obHhqY6uTuR+yLeaUqHwVLEAOREK5T7h2lafGO5UGsQPE72fO?= =?us-ascii?Q?C8Ozp2sy8LFCAccULngiFIZ2sJNZUHqY1qayVrVEwhTTUzaslMnTZlDuWYPV?= =?us-ascii?Q?p58TkQjwl3foMZ4YBnoWmpaJPsTSYJ/1TQ2WFdX+PUhu2HdzEC/Hn0axgxya?= =?us-ascii?Q?/4lUCjLDmWoNj3szspV5Sbelq/y7zfqSpXsafop7OK/f+wppq/evY1V8OsMX?= =?us-ascii?Q?FeHlqBqiN/IdDU+PaPssrnyhotmVGDOCSH025pfWcf1hveO1HMpYqYldZC5N?= =?us-ascii?Q?o0vZ7rlmqen207dylSncORMIaTmZFUK1BFmWVyXCbBWFi7hLLMM1r+gLtX6i?= =?us-ascii?Q?HqTAHwK6qKi691sPHix5ep604Vvl8KJ7DzZLmMN1iYtWpjXHtpIZbLXjLdnA?= =?us-ascii?Q?8l2Xs6scm5mZnWKFjNXoczWrkeAeAfoxfgErFDIzNv/cY1IXNX/+UZAhZkJ1?= =?us-ascii?Q?5nn7N3s/ukiXjWSggzzGP75jRSaGkNwO1VVTxvqalNboJ2KadcUQI43zb+6F?= =?us-ascii?Q?S7hsf/rjke43ETTeIo9D+i0x+n5ByrC+NO//RvYDsjqCnNK5DHotgWOYUsMz?= =?us-ascii?Q?aVaQdeflzdt3uvkY+DSe1zsgk5GAmW8nu/BFA5QrlfUT0Ay3IuUgDPcGzm7D?= =?us-ascii?Q?3ZbGrWa6BcGtsBHfGTEW8r3mwu9r/usMSKbVQUhzibVHWt43l+hfT5kULQZD?= =?us-ascii?Q?SZpLw8h0BmvHqtJ0HY9yFdpCtksdLY/BsUizI/YFXbmQc4YTF7J128/v+C2M?= =?us-ascii?Q?hidX4hO5h/LtzIdmQ57ntcWY/uJsKgCdvTgJp+MTrYvbMzAcSTszLKZj3iZQ?= =?us-ascii?Q?SQYRCzqB2hCL7B4pDSlr/qKXHHiHT3G7691J56FD7p/vnDMFsK6NmRa8MALU?= =?us-ascii?Q?2pMs1lYwXBlmLtbwQq3w9yndH2F+KKioLMuWHv7xGrylA3zgNER+jeFra7bP?= =?us-ascii?Q?Iv82r1TQNQ=3D=3D?= X-OriginatorOrg: altera.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2c830b48-94ff-4db0-8999-08deb623d90b X-MS-Exchange-CrossTenant-AuthSource: SJ0PR03MB5950.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 May 2026 03:57:01.5773 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fbd72e03-d4a5-4110-adce-614d51f2077a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: m8ObMHMlWMuUEZM5fjlTe7uxOnvjm4sm8kJIBZ3yUkzVEcN9ooKecLAZxXsRZFW5rUUJNE1qjFrQGytj1JMUxA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN6PR03MB8008 Content-Type: text/plain; charset="utf-8" From: Tze Yee Ng After stratix10_svc_add_async_client() succeeds, probe error paths and remove() must call stratix10_svc_remove_async_client() before stratix10_svc_free_channel(). Otherwise async state is left allocated while the channel is released. Fixes: 15847537b623 ("firmware: stratix10-rsu: Migrate RSU driver to use st= ratix10 asynchronous framework.") Cc: stable@vger.kernel.org # 6.19+ Signed-off-by: Tze Yee Ng --- Changes in v3: - No code changes in all patches, only put Cc: stable@vger.kernel.org # 6.1= 9+=20 in the sign-off block for the Fixes: tag in Patch 3. Changes in v2: - Fix patch title. - Move the fix description to the end of the patch. --- drivers/firmware/stratix10-rsu.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/drivers/firmware/stratix10-rsu.c b/drivers/firmware/stratix10-= rsu.c index 6c5f952f48d8..a0f679f73460 100644 --- a/drivers/firmware/stratix10-rsu.c +++ b/drivers/firmware/stratix10-rsu.c @@ -958,21 +958,27 @@ static int stratix10_rsu_probe(struct platform_device= *pdev) 0, rsu_dcmf_version_callback); if (ret) { dev_err(dev, "Error, getting DCMF version %i\n", ret); + stratix10_svc_remove_async_client(priv->chan); stratix10_svc_free_channel(priv->chan); + return ret; } =20 ret =3D rsu_send_msg(priv, COMMAND_RSU_DCMF_STATUS, 0, rsu_dcmf_status_callback); if (ret) { dev_err(dev, "Error, getting DCMF status %i\n", ret); + stratix10_svc_remove_async_client(priv->chan); stratix10_svc_free_channel(priv->chan); + return ret; } =20 ret =3D rsu_send_msg(priv, COMMAND_RSU_MAX_RETRY, 0, rsu_max_retry_callback); if (ret) { dev_err(dev, "Error, getting RSU max retry %i\n", ret); + stratix10_svc_remove_async_client(priv->chan); stratix10_svc_free_channel(priv->chan); + return ret; } =20 /* get QSPI device info from firmware */ @@ -989,16 +995,19 @@ static int stratix10_rsu_probe(struct platform_device= *pdev) rsu_async_get_spt_table_callback); if (ret) { dev_err(dev, "Error, getting SPT table %i\n", ret); + stratix10_svc_remove_async_client(priv->chan); stratix10_svc_free_channel(priv->chan); + return ret; } =20 - return ret; + return 0; } =20 static void stratix10_rsu_remove(struct platform_device *pdev) { struct stratix10_rsu_priv *priv =3D platform_get_drvdata(pdev); =20 + stratix10_svc_remove_async_client(priv->chan); stratix10_svc_free_channel(priv->chan); } =20 --=20 2.43.7