From nobody Mon Feb 9 06:07:15 2026 Received: from BN1PR04CU002.outbound.protection.outlook.com (mail-eastus2azon11010036.outbound.protection.outlook.com [52.101.56.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 1A3572BD015 for ; Wed, 3 Dec 2025 07:23:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.56.36 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764746626; cv=fail; b=ebtix6x14yx2ct4zCFH8nMAGEAnUr5HGCS1eY/jwg4cimk6RUKqJNLeZG6qbRBNvDQh/LXuBYGpTJS6HQ5s2ltfuBggqynq/FFtVMDUwjMHzmoGhCkOGpkVC/mwIB9upXClu6e37yoV2twJE+tfLTqPuQvJgF8qvznf4qdQAajA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764746626; c=relaxed/simple; bh=4e5l4PPeqQdENQNH1aZvmU3GNcYu7lg49HozFWBSTt8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=tVPcJbReIgiaTZtskrUXHd2Aw5JCy51uwN9LDdQA7rjtvJa5rw2ZzAypmAc1iOBXg0XNpv5qvkBYnqt/EX1Va6jqWQ1I4WcvxomuG7HQTXTwHizX4hk+vCVFxThcq62tYpkeAMsCBJuLO2f+BoVofMRjgzLRqeeqt8qBNbVxWLI= 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=DRh41feb; arc=fail smtp.client-ip=52.101.56.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="DRh41feb" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=O0svQNafztEkYy9ScAjBgk282iQU3kTq86qWQBbRjSz9rc6qvP1idATl8CwY+yUqZBdnE4T5L4tIzBNjvAcKIrWF0RYb4OXaahZPd1O3ciaodm9b2V6PQTBP9206qu2tX8Be/UNg5Lynxq1uQUhVJrzOwa0mU+BSfYOxpt/+Qkh7LMBOwVp2Hk6NUEZHesU1/ubnrfWC7qCopomejw/JRvMFQ4/DYTqxlvzDQXZLC3bnlo3T0JnEMUfqOjEegbNitJLRlGrarj7Yl5Nd2maFFOimqW4WSyCwqj+wcEPSomOiFHy9dJ/zpYLf65Y0lqs2EnAdZKETna5OEmDvWQrzOw== 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=8n2jgP7re9xatp5ydsrJvB2NoZDchOQzhFwYx/IAiFM=; b=tYKNJLqcwAhJ8QdK5YOsc/lFkEqt9l15z8ugPYpSDxYBMv4mGqWQk9SfM8JLYfqmM5R43YlqPNqjtV9E2I613vEdGZwRy2FT/tYSCd7EK+xDGyDIcayP1SZeJjPiVgDdd6yTRaX0Wa2uZyb9FzVS0aBh3zgAVJHnmLmBP1hsx/F/jOAZ9Nl0yYeoGEL+iUVK/fXHW1Ic1zVmEnSeLYmUOjBVbQARabdmrbN5ImO1MTo+WLz6s+zNdKe9qoFptnD4DrvYcugNJRIDgcOy1+LpXhJKBHHT74xmBrM/qOHWRsp+p6TBiVCMSG3CbI9ETQp8c08qMBYSC/uXrNS98A2u5A== 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=8n2jgP7re9xatp5ydsrJvB2NoZDchOQzhFwYx/IAiFM=; b=DRh41febPf0ZvyGhFchLT1nZqJR6c0zD56r3zMS0yo4oStLDBX9vTfSQbYDz1R9BX8e5gKrf+g/djHAtBRcp22l4l0/Fvd/9q002uAActZea2JTgG5gzp1rJkZ2UuUebOU3hhb7bBaQxikcAahTdRpH5DdFnHB+JT4CIvevoZpV3l34bU5rZeti9pomnbr/27cvRwidogZcSIlDS4GqT+VGL/H9EqoA2Xjq5HUoJVI+YEW+pdlBSKQ7HhQEWIG1FN/mgtFaui8h+8XRNp3Q+ovLGl8LtYVlWjxPIksKW9kLibTcLQQBulDMVch+aaLslTkriQvrwFXE+vSiTanGSgw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=altera.com; Received: from DM8PR03MB6230.namprd03.prod.outlook.com (2603:10b6:8:3c::13) by LV8PR03MB8140.namprd03.prod.outlook.com (2603:10b6:408:297::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9366.17; Wed, 3 Dec 2025 07:23:40 +0000 Received: from DM8PR03MB6230.namprd03.prod.outlook.com ([fe80::abad:9d80:7a13:9542]) by DM8PR03MB6230.namprd03.prod.outlook.com ([fe80::abad:9d80:7a13:9542%3]) with mapi id 15.20.9366.012; Wed, 3 Dec 2025 07:23:40 +0000 From: adrianhoyin.ng@altera.com To: alexandre.belloni@bootlin.com, Frank.Li@nxp.com, linux-i3c@lists.infradead.org, linux-kernel@vger.kernel.org Cc: adrianhoyin.ng@altera.com Subject: [PATCH v6 2/5] i3c: add sysfs attribute for device NACK retry Date: Wed, 3 Dec 2025 15:21:03 +0800 Message-ID: X-Mailer: git-send-email 2.49.GIT In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: KU2P306CA0025.MYSP306.PROD.OUTLOOK.COM (2603:1096:d10:3b::16) To DM8PR03MB6230.namprd03.prod.outlook.com (2603:10b6:8:3c::13) 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: DM8PR03MB6230:EE_|LV8PR03MB8140:EE_ X-MS-Office365-Filtering-Correlation-Id: d8a9eaa0-774f-4d08-e8d9-08de323ce1b9 X-MS-Exchange-AtpMessageProperties: SA X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?mrR81gji/VbgByLngfdL62ctC+D7CwFJX/3/CujjVAJCbMzpGv6m5Ti94PvU?= =?us-ascii?Q?bRbtOrMmU/All8hK7Q5MslKKIXpDqyatBKqpy4nH6XGCymsX9q6WZKQx/vZ2?= =?us-ascii?Q?lUuINPa+w2FG1oWJ+A4Vdk7ZqV/x3eR2foWT7dm95b+Kw9Lnk5oJ6H5zhqF5?= =?us-ascii?Q?KXIz6pq/KGpx1d3aE7K8Id4Bem6O66KRxIugnbGsJepXqMg0rpK+/7Ch9vmj?= =?us-ascii?Q?YA6FZR19YmIOVDbxf7pWWrKPz40ArJgL0A3wb5i9hWxMBKwxfIzfWeRZR3T8?= =?us-ascii?Q?BcI9pImAuJP6F+B7+rFDkTN+ZDhxC2sOcXkMh2/QFO+kh5vlkL1NnBCM6Ez0?= =?us-ascii?Q?66c+5QgSb3RkMpH1Zu7SDZdlGlXEfcuD2Avx6bh3o3DvLHCSpbvp0IDU2JlU?= =?us-ascii?Q?EtCVpoPfyfS/X9Id2CE02uX27Ex7Ho/3BF7orNa1t9YLw7Xb5kPo4oU4x0v0?= =?us-ascii?Q?Z+uYmvHjoDyqIR7aLMsvtMlN1ecF1coryPOjKOVqaFVPHxl6ibo/CGSW4u7/?= =?us-ascii?Q?R2gxk7cJwhtmuyO0zR23wO5MVByBx6fsprMiMZ/gr6/V7oGNo2x3vIANLCdx?= =?us-ascii?Q?fbaE9mpywKhYDGk8E1XIMHeeKJxJ0P1IzA2RUK5YcLKJ7HKxjXHz8mIGEmoP?= =?us-ascii?Q?e6sZjb/nSOoYDVoXsfA/HXgmBFOqmKTHV7BFtHopxM3SkXR1U8W1LCfAodLI?= =?us-ascii?Q?rObqKj8592PKH4QaAxWWYnVPIk0rzKJqa4tGAZQYnIO/FUAu7GSiORkRUbWP?= =?us-ascii?Q?smisgVEmPdWlDLAm+bb0a7YwEThocom6ViD1j+oJLO8xaxxq9056YA8ksqVR?= =?us-ascii?Q?5RjsI2SfodQWKvjAjR2UGIxiXJZdDVqlZENT2OAiZSLpafuhRkPn3oeaPXpY?= =?us-ascii?Q?YlCax1f0KLSkhVG97Xlz8cbLb7Nr6/py/NRGF9izVUYuAYiLE4ya2oVshlqD?= =?us-ascii?Q?BXhlzQeDKmfFEzmSEezcz5zuk+W25pxnjUjwjmOFF0b3/BN7rEty2JAy8Be5?= =?us-ascii?Q?9A2DTRJnzUrcYCPF5e02ntJxjJCcj8d19MZEUd7Z3N9IOZdLuv8o9vbpnELl?= =?us-ascii?Q?nji3n5+iytHhxeQjHZHV6/HxOQPziY8F9iuDjAz2ylT/reTcwyETBL4WkJCS?= =?us-ascii?Q?fRf37/7AWplV9kWQfU20+CPYN2byDrsANOtoiQ2ZAWsVUUzoSupGAgmF9UJc?= =?us-ascii?Q?W80GAhVmIATalvLHBTqoApojHvA+XrbyYjazwGrhn5YmaZ/wiAR5QFxxfHbl?= =?us-ascii?Q?55HyV3qvlQFkoh+wP1X7whkiMhqMrxhsSMucKN3p2jH/XUJrtLyNvE5Nl9lj?= =?us-ascii?Q?GZAbO/xDsDTwALNxytylHcAneOdfqA2CJxvdgONW0DkMho3kgfB+m34M5H5z?= =?us-ascii?Q?lHz1zFCWQxNSUc2CwkFGbK24SHhgEoROvL7/eOtmDOBvyexIdb3ht1CHFPC1?= =?us-ascii?Q?DAfvO5E7fSfAujtWlYs6Hbk+Bj1itHvB?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM8PR03MB6230.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Jd+6GFJMkzVGsClIQ7WJqfEP/WIIbc+MWHKjlHx/WKZ00x+oAuzEr/MYmmBC?= =?us-ascii?Q?JaCCeBdvLDQSxbeeeVolW/EQM6PCMg0SqZ6muhBDBwuCSmRdRxlSgnAaOfdP?= =?us-ascii?Q?Yjucciufe6oBYctk/HNk/bPm5IGH85+sOSen5EnCR62XxH2vxFMxALXsSRjU?= =?us-ascii?Q?JwIqhyP6g49BSsNQgk+o/aTRBVMkQY3K/jAdvvNfMQ/vqVFU0zkiId5d7MYd?= =?us-ascii?Q?rggwaS4q24dWC8GBz3hAHV73EpVOs4OPc14EUjKf8O8sdfzL3e3Z9IeceNNx?= =?us-ascii?Q?6ehHuctotKrvLXomW592I/0zxivt4OPrWFBxlsRbgUBRWgTQYjXVb3L4HRdQ?= =?us-ascii?Q?5EhHcVUrkF5cCYrnpTgCgcrIlt97u0U1/+cBc7OH250ap3cGR6JMoDhGZ8m9?= =?us-ascii?Q?1k979qXLJGt97QwdJJX1dI47yAYHZ5zYX/5RQY4rkRyv189zoYbJgfwTkbMx?= =?us-ascii?Q?6EyqUpZNZIjqOr6ygxqYajBUXd1qGWjPDvwbrP9umodBOxfWFizf/uB18skF?= =?us-ascii?Q?0+1K9tSikNorzS6SdvxZtDTORoCNC+cTAT6Im4zUACMBHHpHUX5iXDVfkk9R?= =?us-ascii?Q?u/1WzVuW7UdzugZZ+WW9gTs6w8wBDECer7buHH2tJYgTCun8QevkyqfjpS0n?= =?us-ascii?Q?x2AbfMKM4M5nm9DeiPk+NnJrkMoCDrltcpKlADOTNh678PslZdCIjdZsLT+u?= =?us-ascii?Q?lnovIptA8OUMUfCO4w0u/gLezLv3FBrHchbUKp7+Iqp3HkhVBBM+CuqQuEDz?= =?us-ascii?Q?KUuanc7hOkMXEAg6atwc8tEq6Ggqo2sE0QEtSpLeUDwkgQ72fHd9syg3kqxZ?= =?us-ascii?Q?oWzF70U4PpgC5IlJy3TDtf/xXAlM6ZDxb5QIXkF+TUa5q9ZntT37jSV2/oON?= =?us-ascii?Q?45LrvsrerCko0C6WfUJ1HlbZcJKS4Oly2FRhfci8BM251YiXZ1WfZChWNdYA?= =?us-ascii?Q?0Fd6O0n5D6Q6qqXfqDPxrbOMra1xXQQFhkAiaeECtrMnunouhgXxeevZugyB?= =?us-ascii?Q?z0rnHYbe/xgipayHw4iZi0M78XKXRaCTcD4pT8HsTu3XeYWNSyH8me86vDHL?= =?us-ascii?Q?yIoq6Kkz6ZmCfGwyOvZp1BOtk9Akxd4IXNm1PxICYLbCDsmartKG8qBuGsIx?= =?us-ascii?Q?mez0obX1ufMLL4F9ixTa0DDMz3NkYpmA9smmdPWpxlzZ+Yf8YjMh/0JHyhqM?= =?us-ascii?Q?fGbgCfKnnKk/0136YzA0g1hDosynQdnMLcsdoChC0MG16TklHSfPsOop8fS9?= =?us-ascii?Q?k6NvkCffC6MWHFANN/CS5S8EvibYaXAGQjbfNAFIzIXkEJybohZp52TgFck0?= =?us-ascii?Q?u0J7nsFLZKLWFfBb5em/Caidi4W3SlNVoZTSllPchM6hupjaESV2XNaZRgxe?= =?us-ascii?Q?u2yfVwckS2llgO3E3khzZ4wXj1/FvMIR4ON/FQ/VdeqHMFaj/Do4CJSA+oJH?= =?us-ascii?Q?soEFfTrwoNf2aMIO3ndLONYuz0BA9sGdaAcLHkE8xnhkw1+JlIu/wyZ0tG7Y?= =?us-ascii?Q?WBE/d2a0ZTuGH1OnPSnfu3L0lZ4CCv+IyTJOn8XL9NMgULwHTbtByaMMLjNR?= =?us-ascii?Q?MwfHaYe4UtfL4djrjqC79tdgt/DEdP1ISYjvgpIa5+ito4i6ojIqfDHJRa2H?= =?us-ascii?Q?kg=3D=3D?= X-OriginatorOrg: altera.com X-MS-Exchange-CrossTenant-Network-Message-Id: d8a9eaa0-774f-4d08-e8d9-08de323ce1b9 X-MS-Exchange-CrossTenant-AuthSource: DM8PR03MB6230.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Dec 2025 07:23:40.0636 (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: mlaeFdP2pZC09KhLDOeb6eFwcR5kFFPGoRdk6NtitpQf4NK0CP5FUMiBKeh+sfH3o06KQq3F+c2gYR1ifX+UZwMWNibeU15m9c1i1Z201q4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV8PR03MB8140 Content-Type: text/plain; charset="utf-8" From: Adrian Ng Ho Yin Add a `dev_nack_retry` sysfs attribute to allow reading and updating the device NACK retry count. A new `dev_nack_retry` field and an optional `set_dev_nack_retry()` callback are added to i3c_master_controller. The attribute is created only when the callback is implemented. Updates are applied under the I3C bus maintenance lock to ensure safe hardware reconfiguration. Signed-off-by: Adrian Ng Ho Yin --- drivers/i3c/master.c | 41 ++++++++++++++++++++++++++++++++++++++ include/linux/i3c/master.h | 5 +++++ 2 files changed, 46 insertions(+) diff --git a/drivers/i3c/master.c b/drivers/i3c/master.c index d946db75df70..e67f54c6e865 100644 --- a/drivers/i3c/master.c +++ b/drivers/i3c/master.c @@ -685,6 +685,41 @@ static ssize_t hotjoin_show(struct device *dev, struct= device_attribute *da, cha =20 static DEVICE_ATTR_RW(hotjoin); =20 +static ssize_t dev_nack_retry_show(struct device *dev, struct device_attri= bute *attr, + char *buf) +{ + struct i3c_bus *i3cbus =3D dev_to_i3cbus(dev); + + return sysfs_emit(buf, "%u\n", i3cbus->cur_master->common.master->dev_nac= k_retry); +} + +static ssize_t dev_nack_retry_store(struct device *dev, struct device_attr= ibute *attr, + const char *buf, size_t count) +{ + struct i3c_bus *i3cbus =3D dev_to_i3cbus(dev); + struct i3c_master_controller *master; + unsigned long val; + int ret; + + ret =3D kstrtoul(buf, 0, &val); + if (ret) + return ret; + + master =3D dev_to_i3cmaster(dev); + master->dev_nack_retry =3D val; + + i3c_bus_maintenance_lock(i3cbus); + ret =3D master->ops->set_dev_nack_retry(master); + i3c_bus_maintenance_unlock(i3cbus); + + if (ret) + return ret; + + return count; +} + +static DEVICE_ATTR_RW(dev_nack_retry); + static struct attribute *i3c_masterdev_attrs[] =3D { &dev_attr_mode.attr, &dev_attr_current_master.attr, @@ -2962,6 +2997,9 @@ int i3c_master_register(struct i3c_master_controller = *master, i3c_master_register_new_i3c_devs(master); i3c_bus_normaluse_unlock(&master->bus); =20 + if (master->ops->set_dev_nack_retry) + device_create_file(&master->dev, &dev_attr_dev_nack_retry); + return 0; =20 err_del_dev: @@ -2987,6 +3025,9 @@ void i3c_master_unregister(struct i3c_master_controll= er *master) { i3c_bus_notify(&master->bus, I3C_NOTIFY_BUS_REMOVE); =20 + if (master->ops->set_dev_nack_retry) + device_remove_file(&master->dev, &dev_attr_dev_nack_retry); + i3c_master_i2c_adapter_cleanup(master); i3c_master_unregister_i3c_devs(master); i3c_master_bus_cleanup(master); diff --git a/include/linux/i3c/master.h b/include/linux/i3c/master.h index c52a82dd79a6..ee254864c8d2 100644 --- a/include/linux/i3c/master.h +++ b/include/linux/i3c/master.h @@ -462,6 +462,8 @@ struct i3c_bus { * @enable_hotjoin: enable hot join event detect. * @disable_hotjoin: disable hot join event detect. * @set_speed: adjust I3C open drain mode timing. + * @set_dev_nack_retry: configure device NACK retry count for the master + * controller. */ struct i3c_master_controller_ops { int (*bus_init)(struct i3c_master_controller *master); @@ -491,6 +493,7 @@ struct i3c_master_controller_ops { int (*enable_hotjoin)(struct i3c_master_controller *master); int (*disable_hotjoin)(struct i3c_master_controller *master); int (*set_speed)(struct i3c_master_controller *master, enum i3c_open_drai= n_speed speed); + int (*set_dev_nack_retry)(struct i3c_master_controller *master); }; =20 /** @@ -510,6 +513,7 @@ struct i3c_master_controller_ops { * @boardinfo: board-level information attached to devices connected on th= e bus * @bus: I3C bus exposed by this master * @wq: workqueue which can be used by master + * @dev_nack_retry: retry count when slave device nack * drivers if they need to postpone operations that need to take place * in a thread context. Typical examples are Hot Join processing which * requires taking the bus lock in maintenance, which in turn, can only @@ -534,6 +538,7 @@ struct i3c_master_controller { } boardinfo; struct i3c_bus bus; struct workqueue_struct *wq; + unsigned int dev_nack_retry; }; =20 /** --=20 2.49.GIT