From nobody Mon Dec 15 22:45:57 2025 Received: from mx0b-0024c301.pphosted.com (mx0b-0024c301.pphosted.com [148.163.153.153]) (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 29195296BDA for ; Fri, 12 Dec 2025 16:41:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=148.163.153.153 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765557697; cv=fail; b=OU8j4kqAew3DWS+v5+l4/izNm56DNd5d7YBh6ionov60x3TgeMKtR36bvA86fGgHXOxTH0njkReJwr7ldEUVPilXy6eJdGSID/84cAg94iNvAPBV+DbeafrcCgtBf076cGgBMRq2/bd0LPeqp00cJW4B16H9RygBvBd4hYjx/r8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765557697; c=relaxed/simple; bh=8bWS82MuFp58exMp9Fx5whIvE6U6qnOgdigNFm+ybCs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=FZoLLSJK+O9664yh2IzD7wrfC2+Wp76SgR2WM70AKe31R8J6+uzv2YRQbLzbej8j571IKxAmUwuNPO5l3TafOvJlmnaI5051y/N/FcUu1oXHl0Hb32N82g7ubzLGdNEuH3snjdUtFDM+qM6yI0ZaDMV0Q9Q4rcU6PTmNBLrRh4Y= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=silabs.com; spf=pass smtp.mailfrom=silabs.com; dkim=pass (2048-bit key) header.d=silabs.com header.i=@silabs.com header.b=IhYqpa5T; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=bSaQD+2e; arc=fail smtp.client-ip=148.163.153.153 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=silabs.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=silabs.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=silabs.com header.i=@silabs.com header.b="IhYqpa5T"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="bSaQD+2e" Received: from pps.filterd (m0101742.ppops.net [127.0.0.1]) by mx0a-0024c301.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5BCFG5gJ2052805; Fri, 12 Dec 2025 10:13:30 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=silabs.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pps12202023; bh=LTtRpSTkZ0Z7ZtAuT9bBmc0kmx0K4Lz2Ox5KjlCE39Q=; b=IhYqpa5TKmlu sPHtVGmP8+OEZdWb33XvDLgjEd2APugtV0qA4Ea34ghPfQZsmG9cnakVOd0e9bV/ 9LMeq0w8OPqfHJ0RafztRWUWoVkd0/GlnsDrm/O7mcwTbGZDoNlNnfxSI8Yd9QCZ 2XaQESkebW1QYFLiLz0ij4RfCWCXCg0+uqBpnJmwtxeH26puwKXaJ0D95/MUAq5Q D1s02osW+kNTrWrytTABkWPj3DYOnT3dbX3icePqSvILm/8HVGq1+YJtmPJmgJY8 lZwxa3FCPSE7Cj5v2xk4fsIcda/fb43jQB0yP+3a7QYylB4h1tJsMmrJZACjnbtI STTaZZ4THg== Received: from sj2pr03cu001.outbound.protection.outlook.com (mail-westusazon11022103.outbound.protection.outlook.com [52.101.43.103]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4aykqe47hr-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Fri, 12 Dec 2025 10:13:30 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=aBoqEG/UnsC1o4knMtqulTetqziLUFuSrGJ2aovBT78gGOvhIl8fIlwE/U5zR7QDBEi4rdGwLH0Jwk9E1xakQTNMbo1OVLZ555wAYhZ3kc8RFLJRrgbhBFTnXvWBxoVGX/vMCVBvX0OT4a2weGG+gTZghV1VbLM77r+uUm68Vdo/7fdhtxSpiDGWAcFAwuQNFgpMRsl/UCWayazoSxbE5IUZUyX7TmqDlr2ziwH1ov3B42O7m47wuKWBxNq+tl/z7mYv8/CMHydVnDSByL3OKVO8Da8ru39shvbSRyM4+lWBSAHPddnWkHUZj/wx+t9H8ZITtSdRoQl469DNnFSEMQ== 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=LTtRpSTkZ0Z7ZtAuT9bBmc0kmx0K4Lz2Ox5KjlCE39Q=; b=ARVgWKAKCjRhMYeJUqLc6+M10vCZM+5euyWc9Fno+orTl/LIugCZrSdiCVhswPhUoyzgPJG86hqJ7bUXgEJbyKg/ETDdTQuWbX4Qg6CWg4O8j1BSSDrVuZqa4CtILdGPfEmvh6XlXujeaG4y6h53y5ABE9RT7SoN9zA8SPI4jpLq+AQbDNjqGGhZX8cPKiKSjS9/iMOx5TnbVxdAjxtswpl+Ju72jEkhUMpo4XhCytkIfOlhBZA269dXre0Fr3+vzHht7rOaBlGyDeyBZhp3/eMAIcwercTDNzdv4Y4wFUruSmxzkdub4wDxn1s68D6jn9qGyGJkxpqcqsYhYITB3w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=silabs.com; dmarc=pass action=none header.from=silabs.com; dkim=pass header.d=silabs.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=silabs.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=LTtRpSTkZ0Z7ZtAuT9bBmc0kmx0K4Lz2Ox5KjlCE39Q=; b=bSaQD+2e2p+WL9sqsNXQUlonpphQlrLKr+HXlxWSYnUdxpFoHj80jp8+hJ1rgHSoFL7d7sFmbniIZejkaQq/yxd4S+4mFGV0N5EeWtbZxCi3TZcGhcDJzlhT/7srfEUQiuyGtL3zoBIMiGuiX3eFnR266HBTK+m2i/MlZN1P0YQ= Received: from DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) by DM3PPF7468F7991.namprd11.prod.outlook.com (2603:10b6:f:fc00::f2d) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9412.9; Fri, 12 Dec 2025 16:13:27 +0000 Received: from DS0PR11MB8205.namprd11.prod.outlook.com ([fe80::2de6:bc88:2af7:3583]) by DS0PR11MB8205.namprd11.prod.outlook.com ([fe80::2de6:bc88:2af7:3583%3]) with mapi id 15.20.9412.005; Fri, 12 Dec 2025 16:13:27 +0000 From: =?UTF-8?q?Damien=20Ri=C3=A9gel?= To: greybus-dev@lists.linaro.org Cc: linux-kernel@vger.kernel.org, Johan Hovold , Alex Elder , Greg Kroah-Hartman , Silicon Labs Kernel Team , =?UTF-8?q?Damien=20Ri=C3=A9gel?= Subject: [PATCH 08/14] greybus: cpc: add and validate sequence numbers Date: Fri, 12 Dec 2025 11:13:02 -0500 Message-ID: <20251212161308.25678-9-damien.riegel@silabs.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20251212161308.25678-1-damien.riegel@silabs.com> References: <20251212161308.25678-1-damien.riegel@silabs.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: YQZPR01CA0176.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:8b::25) To DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) 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: DS0PR11MB8205:EE_|DM3PPF7468F7991:EE_ X-MS-Office365-Filtering-Correlation-Id: 4b1b28fd-e9e4-4365-d26d-08de3999624c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|52116014|376014|1800799024|366016|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?dTJXTHRRNEdiTVJWRWxUMEtOSmpURFBDc1BDU04yVFpKc1JlRk1LbTlDdjUv?= =?utf-8?B?K3BvcXFjcEZEMEgrRzFrM0xlRzRDUXBScnJ2MFJVbGo2WnNvWFpVbG9seldr?= =?utf-8?B?UG5BQk85QjRhakY4R0ZPYjY3T2ZjSkliUnBNT0h3RDlpYU5OMytmMUU5UXlB?= =?utf-8?B?WE4rZW00R3RFeC9ueGZ4ckhoN3lobEZ5Z0VOeUlKa3ZrbjRsdUVIVnJwWno3?= =?utf-8?B?R2F1OUx0RGMwWlRFMjJyRmMxS3k5Nm9RTFRIWVpBTGR3MXlUVDd6ODZLY3Yv?= =?utf-8?B?UnBqSXFtUTJxUldjRzhuUlh4dHArdE5IL1NVVm1OY3VKYjBVcEozRCt5SkNh?= =?utf-8?B?aXozVm8rSURWVjB4Q3lsNm1reTBkeDQyc3l5WkJUZ0V2enpjd2JvS1I5eTI0?= =?utf-8?B?ZlVVM21TditVajFUTXgveWxOVXJITFFXNjFkUEV0VENwUTRXZFVpamlUeEdH?= =?utf-8?B?Q1JPeUZncHFZRGFKOUlyK25KbmU1ZHVpbWN1R3lKU1hZaitxWTAvMXNZY2Zt?= =?utf-8?B?R3RwRzQ1Wm9QN2ZlMTJlNFQ3MzFPVkxwZTFvNG5oUXJQdzRYNFQrWUZCZFQ1?= =?utf-8?B?YjJjM3dVVFg2Z1dZcUlxV2hXTGFRYis2dWJLcnBEaG1OZzVYVVhHY1FTV080?= =?utf-8?B?SklreEd4R0IvWnR4Yjl1NWtjWUh5b0NKaXQwTkpLaTl3M3JJYXN3WXRyS2pn?= =?utf-8?B?aHdBQkVNZ1ZrREJSOVNsUElYdDJjdWlzTFFFakQ2R2lLMkM5aCtKaTFNUzFC?= =?utf-8?B?VmNtakIzSm0rR1BBbExCd1NmQnlWSzF6bTlua2lIVUNEZTkrajZnVXAyUHlw?= =?utf-8?B?aVRiY0hsSy9DR0ZPVzlVMFY2Tk8zVVBnaG9HU1YzeXdZTVZLd3ZxL3oyODNS?= =?utf-8?B?ankwNklkYmNONGt5R280ZnpidWlyWTBHRWs1dzlMOG5xMGF4azhFQ3J5Nm12?= =?utf-8?B?WUxQSVRhQmliUHZtUFpLVkppWWhTTllzVjljSmhwalkvRzdmQjR2RUJHVXRI?= =?utf-8?B?OHRkOU83cHFvanc5cExDaEU4a0RSUDJ2cHlEdzV5Zlh3S1ppRHFnOEN1ZHl0?= =?utf-8?B?NGsxN3BtUVBTNG56SlQrV0JxUXJHb25EVlJ2SjBMZlYvK01FdTZ3Z1dJcVNZ?= =?utf-8?B?OGRPelhlbDJZSEh2Z3NMejQ4T3duSmVqL2p4WUFzZGtoYStSQURsZmUwSXJS?= =?utf-8?B?QzBDOXBPL3ppNGU3TVJSdjB6Uk40Z2p0UEpMZTBHVWplclpJWGZVWEpyTFcz?= =?utf-8?B?cVhtVHB5Y2NyU2dMaEJEQjRGMDR4QUtDY2VBUnEwN2phaG4xZTNDem0zbGdx?= =?utf-8?B?OUtwelNsSTREa1lWaTdlQjZrTmhGYzNvZTh2RTN1eGVNQjBWcXplMGFpTExs?= =?utf-8?B?c1F0OTNkc0x5aVF1RHVmVWdtYjRWbkpOYlJjNDQ3dWswYXJ2OXYvTU5NRkZM?= =?utf-8?B?VGtoMWFkWEYwTVJiN0Q5Y3g2ZEVweXhJMm1ZM284eWhZWTNIcHd0c2N0cjBz?= =?utf-8?B?VjBzUmNvSkVJMnJGS0VJT3lnZDhhdXhNNjArQmE4NUJkRDdpSGZSdHhBeUJZ?= =?utf-8?B?dGJUa0JaRXhHMmtxaDZMMCtiNW1LU2dtQWtpeXVhalR3MFMxRnJsMjd3bHQ3?= =?utf-8?B?ZWhkOEJLMUh4QUVJcWJWMkI5aXNYeTgzK01GT3gyUHVPOHRNRFhzejV4MWZO?= =?utf-8?B?a3VMVzNUTzFZMFYrbmVxY0FGOWRsR05IUkhpYllOVkxQeEZieUtjNmxsSE55?= =?utf-8?B?N1NkZ3VEUHNWeEV4Wksrc08yNzdnVHlQK2NYYzJxeEE0NW5nTDBDMGJnZUx2?= =?utf-8?B?RkZJRDg4Uk5YYjNmalVJWmVTMnQySjBGeTZpeDZ3SGk0TFUxN1pOQnRrVjRW?= =?utf-8?B?QkFaYXJNOTBid3U4VGtzQVVyWUI2amNPZi9jRVJjcUQyZFlGWFVvYndWU2pw?= =?utf-8?B?WXlxdktBczFZc3VYY2IxYUsvbTNYTGk0bnZ5bGUwOXlZR042NlpnWGhHYjNv?= =?utf-8?B?cDRycHNiMEppWVhnU0lhbG01M0FJT0h3ZlovcURtS2U5d2F0L1VjTGxoc2dL?= =?utf-8?Q?n6XROS?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR11MB8205.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(52116014)(376014)(1800799024)(366016)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?bGNIMUtKbXdmcTJ5Q2NRY3F0Nk1aLzJvMndQZFVJUTUycWJLNzd2UkwvQzhs?= =?utf-8?B?S29LRnIzY0hKQ0prc3ZmYTV1d0o3SnFWNzMyYk9ldFFnbyt0SldFRDFOOWM0?= =?utf-8?B?R1JRVThqb2ZGeVdZZU9RZ29sREFneW5DdHh4SGlsdEk3WVlNcS9aalQ4VzZu?= =?utf-8?B?L285VndoaHU1N0pDdzkrY0d0bFpqV0hJWlNDcTBMLy9VcE96bGFPb3AwM3p2?= =?utf-8?B?R0M0d3BMT0w2Z1N1TlFEUCtjZytZai9xbFdpSW42RDlBMVQzczZwR2d3ZzNX?= =?utf-8?B?NEJvMXlzUm9pUGtjZ2RTclBGcllWZ1NTSjBmRUY5bG9QM0JobnJmYjlBMU5r?= =?utf-8?B?SVBjTytnR0dyM29XcmZnSFVzeDkyYkt4VnBlNWJ1RmRDL01uSC91QXRnN2Mw?= =?utf-8?B?WHhzSTNKdjFZQVhuSXlIdUJoazZGaUxVVlhSRnZLbVZYTDBoSHFldS9WS2RC?= =?utf-8?B?VlRQWHVxVkN4SzFyb0laTE00NnpkOUsvZHlXUDZDUGQxT2lyL08zS3Z0TU1k?= =?utf-8?B?Tk1Nem5UOWRDditYR2lvdmpnb3RFQnVRMlFwWUpVcGxRWDErdm5KQndiWWJM?= =?utf-8?B?dkZ4aVU1YkZnZVRlR1YyN1o5cFdTS3hzTGp0Z2FqMWtMMGRyRlYzRndRNE5W?= =?utf-8?B?NW5WTDhiQmJzaVhvUWVETmVPNGRDekMwM3V6ZHV0dzBaZzcxV2hBVW5RS0Z2?= =?utf-8?B?TXU1cklEcXVIOGJUREtjZE9CT0hMdjU2bkNESDZEeWxjM3doTENQczRhY0J3?= =?utf-8?B?amJKUm85MkJmbHlKdlBVNGZPZkdJMDl5aEJPM29DUS9JQno4L0xZOVkxSlJr?= =?utf-8?B?clVvQ01mSWtkTFZTZkFVMXB4NnUvQ3IwRzRSc0tKbHFDZHZjUlBQMWg1Uzh2?= =?utf-8?B?dnFXMUhzSmN6NENzUWZBanVDWXg3Q2pENTFyNE9IWGNtK2pxUHBLcDVGUEVn?= =?utf-8?B?UkozdjRrUmFuOU41VWsyNzAvQXFVT3RSV2lsZXNRREpnTVJWN0JoNDVqZnZR?= =?utf-8?B?MUk1QUpyZGhlTDJKS3FMQmVWT2xVdWdmMkpWcVlobVVkZk9qeWNRSU5UVGNi?= =?utf-8?B?cit1NVg3aiszVXVGYUJPOUJMVjQrTGJ1NDMzK0xoNlpLNGZoa2NIcUNsaENz?= =?utf-8?B?cnd0djljdzNublNPQUpjVGZROFc2TlVXeFkrWXpVazNLcWY0bG1IWHgxWTV4?= =?utf-8?B?RFNOdEYycjRMRzNoU2owT014OVQvdERYQ2JUY2VwdVZXTmRuRzlVMkVuN3hU?= =?utf-8?B?L1NuWDQ0eXFpM2N2R1ZmM3FLL2MxWTFvL2p3dXVyZlhyQjY2OGtsN0lsSzNM?= =?utf-8?B?bUVyd3RvaDZHTGZTaGVHam9Yb0RwaSs1T0xtekVZcmlmbnhRY2VPRkpGS1BX?= =?utf-8?B?cE50Q1c5dkJQVHh2YmZ2VVJJRnBvVTZ2SVZDbnFPNkVxRnRXZi9BZ3lnMjVv?= =?utf-8?B?OU5BaWdWSG01Umxhc2tMUGU4dHlYSlREbk0vSllZSDI0K3Z5UDF0KzJCU0dq?= =?utf-8?B?MzNJSEQvRmRxR3EybmpMMDdKSlhUL0hGQ2ZlMVZ5bVF1ZjhqUlYyUlRFYkF5?= =?utf-8?B?dUJBZ3BsK3JNN2JUaCt6aXRyQklFb0pPUHJpZmU5SzR2RWJ6ZUVJS1VSZm56?= =?utf-8?B?cWFNNU85bmxRelNSQWlnK1pmMGVjaU9nSjNwOEpkNGNPQ0NITjV3bjUvdjBS?= =?utf-8?B?RS8rVzQ0ZUlnNEdFOGNBTlJXYk16ZkZqazEyZ0hFUjRnQm5hN1E0SUpZalZ3?= =?utf-8?B?cmZJUEtFYVB6eWhpdjhMbTB5dEpuYVpMVlEvNG5EaWpsVHZCOUVkNEp0aDdz?= =?utf-8?B?QktWNktpWFFoN0ZaSmxUa0E3S1VJL0t0ZjVYWHRieEdMWVIwUDQ2c2doS2lp?= =?utf-8?B?UFFrTTRNTFA5LzRVUDE4YkZTcHBkYXhXUkpxamhhbHNGOW5UY0lNdDhrL3pN?= =?utf-8?B?VEcxZlZNZ2VEd1lJQ1p3alhIb0pqQjlBUGowL0tzRjgrK2hTSG9CbDFuUnpD?= =?utf-8?B?N1VnM2lvWFpkcmpGSFdJT3JjeUpkc1ZpTFFYNU9JMGNRZWNEKzZZM2paaVM5?= =?utf-8?B?SncwSG5ReHRkREliQWlISSttbDdhcGpQaGsxaXZUUFh3SzgyYjFUSTlaMUd1?= =?utf-8?Q?lxQGZrc+K8X3ghcw++oyKd8PC?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4b1b28fd-e9e4-4365-d26d-08de3999624c X-MS-Exchange-CrossTenant-AuthSource: DS0PR11MB8205.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Dec 2025 16:13:27.6903 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 54dbd822-5231-4b20-944d-6f4abcd541fb X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: WUJDMuuqpR0NhlvaRNWV5VDGCk5/Sh0lNH0EMjKx1aipXZbUGrSZRdFMGyoIdMqrfYTS391ux1J4+6EJUy5hpQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM3PPF7468F7991 X-Proofpoint-ORIG-GUID: 2_rMyhrWC8CWO5uCXxGgPue0RCoWSY9i X-Authority-Analysis: v=2.4 cv=brxBxUai c=1 sm=1 tr=0 ts=693c3f2a cx=c_pps a=poLntA6gJg8PyknBlaXY5w==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=wP3pNCr1ah4A:10 a=M51BFTxLslgA:10 a=i1IsUcr2s-wA:10 a=VkNPw1HP01LnGYTKEx00:22 a=2AEO0YjSAAAA:8 a=vN7oVFPIg2LUC2IVNO8A:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjEyMDEyOCBTYWx0ZWRfX4IMHebIVycLy G8ZdkFClRlFTM3iAX+z8oDY+29CoapZieH3cUdTjIH7hY5TqBeF5ki7SypiU2eWwKpRUFovp3ev /YYJb+RQExM+egzzeuogY9YuFRaSVdRLYh2XioVitVP1AFhvBnHrcyUpXlCeTljZfAFjm1qtn+p 7QJp2Fe+6meAmAT09eQUBJ3QYVcAMzzFq6fv+S1B/wPjyfkkxXKj1pIHgsLgeIbcmJjksRXjY8b hwL1SIbSxR+FNLItixrjU2OLFrvILJba+ztBKUSS2wkqEhxeYft5gt0su4Z9hCb+95VA+t2G0+v 3R+ZsiGsxN8JDqLZlRST8pSJEv3VROFG3E80VInUQ1eejOR8pWZLpeyXeM2qoEixwe1fj0c8DMX RF1k58ZCgKj/rpoGY2/zdZNoioGH9Q== X-Proofpoint-GUID: 2_rMyhrWC8CWO5uCXxGgPue0RCoWSY9i 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=2025-12-12_04,2025-12-11_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 lowpriorityscore=0 priorityscore=1501 malwarescore=0 adultscore=0 phishscore=0 spamscore=0 bulkscore=0 clxscore=1015 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512120128 The first step in making the CPC header actually do something is to add the sequence number to outgoing messages and validate that incoming frames are received in order. At this stage, the driver doesn't send standalone acks, so if a message with Sequence X is received, the remote will not be acknowledged until a message targeting that CPort comes from the Greybus layer. Only then the driver will ack with acknowledgedment number of X + 1. Signed-off-by: Damien Ri=C3=A9gel --- drivers/greybus/cpc/Makefile | 2 +- drivers/greybus/cpc/cpc.h | 20 +++++++++++++++ drivers/greybus/cpc/cport.c | 25 ++++++++++++++++++ drivers/greybus/cpc/header.c | 17 ++++++++++++ drivers/greybus/cpc/header.h | 2 ++ drivers/greybus/cpc/host.c | 13 +++++++--- drivers/greybus/cpc/protocol.c | 47 ++++++++++++++++++++++++++++++++++ 7 files changed, 121 insertions(+), 5 deletions(-) create mode 100644 drivers/greybus/cpc/header.c create mode 100644 drivers/greybus/cpc/protocol.c diff --git a/drivers/greybus/cpc/Makefile b/drivers/greybus/cpc/Makefile index 3d50f8c5473..c4b530d27a3 100644 --- a/drivers/greybus/cpc/Makefile +++ b/drivers/greybus/cpc/Makefile @@ -1,6 +1,6 @@ # SPDX-License-Identifier: GPL-2.0 =20 -gb-cpc-y :=3D cport.o host.o +gb-cpc-y :=3D cport.o header.o host.o protocol.o =20 # CPC core obj-$(CONFIG_GREYBUS_CPC) +=3D gb-cpc.o diff --git a/drivers/greybus/cpc/cpc.h b/drivers/greybus/cpc/cpc.h index 62597957814..87b54a4fd34 100644 --- a/drivers/greybus/cpc/cpc.h +++ b/drivers/greybus/cpc/cpc.h @@ -8,17 +8,32 @@ =20 #include #include +#include #include =20 +struct sk_buff; + /** * struct cpc_cport - CPC cport * @id: cport ID * @cpc_hd: pointer to the CPC host device this cport belongs to + * @lock: mutex to synchronize accesses to tcb and other attributes + * @tcb: Transmission Control Block */ struct cpc_cport { u16 id; =20 struct cpc_host_device *cpc_hd; + struct mutex lock; /* Synchronize access to state variables */ + + /* + * @ack: current acknowledge number + * @seq: current sequence number + */ + struct { + u8 ack; + u8 seq; + } tcb; }; =20 struct cpc_cport *cpc_cport_alloc(u16 cport_id, gfp_t gfp_mask); @@ -34,8 +49,13 @@ struct cpc_skb_cb { =20 /* Keep track of the GB message the skb originates from */ struct gb_message *gb_message; + + u8 seq; }; =20 #define CPC_SKB_CB(__skb) ((struct cpc_skb_cb *)&((__skb)->cb[0])) =20 +void cpc_protocol_prepare_header(struct sk_buff *skb, u8 ack); +void cpc_protocol_on_data(struct cpc_cport *cport, struct sk_buff *skb); + #endif diff --git a/drivers/greybus/cpc/cport.c b/drivers/greybus/cpc/cport.c index 0fc4ff0c5bb..2ee0b129996 100644 --- a/drivers/greybus/cpc/cport.c +++ b/drivers/greybus/cpc/cport.c @@ -9,6 +9,16 @@ #include "cpc.h" #include "host.h" =20 +/** + * cpc_cport_tcb_reset() - Reset cport's TCB to initial values. + * @cport: cport pointer + */ +static void cpc_cport_tcb_reset(struct cpc_cport *cport) +{ + cport->tcb.ack =3D 0; + cport->tcb.seq =3D 0; +} + /** * cpc_cport_alloc() - Allocate and initialize CPC cport. * @cport_id: cport ID. @@ -25,6 +35,9 @@ struct cpc_cport *cpc_cport_alloc(u16 cport_id, gfp_t gfp= _mask) return NULL; =20 cport->id =3D cport_id; + cpc_cport_tcb_reset(cport); + + mutex_init(&cport->lock); =20 return cport; } @@ -64,10 +77,22 @@ int cpc_cport_transmit(struct cpc_cport *cport, struct = sk_buff *skb) { struct cpc_host_device *cpc_hd =3D cport->cpc_hd; struct gb_operation_msg_hdr *gb_hdr; + u8 ack; =20 /* Inject cport ID in Greybus header */ gb_hdr =3D (struct gb_operation_msg_hdr *)skb->data; cpc_cport_pack(gb_hdr, cport->id); =20 + mutex_lock(&cport->lock); + + CPC_SKB_CB(skb)->seq =3D cport->tcb.seq; + + cport->tcb.seq++; + ack =3D cport->tcb.ack; + + mutex_unlock(&cport->lock); + + cpc_protocol_prepare_header(skb, ack); + return cpc_hd_send_skb(cpc_hd, skb); } diff --git a/drivers/greybus/cpc/header.c b/drivers/greybus/cpc/header.c new file mode 100644 index 00000000000..62946d6077e --- /dev/null +++ b/drivers/greybus/cpc/header.c @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2025, Silicon Laboratories, Inc. + */ + +#include "header.h" + +/** + * cpc_header_get_seq() - Get the sequence number. + * @hdr: CPC header. + * + * Return: Sequence number. + */ +u8 cpc_header_get_seq(const struct cpc_header *hdr) +{ + return hdr->seq; +} diff --git a/drivers/greybus/cpc/header.h b/drivers/greybus/cpc/header.h index afccc941726..2a64aa8d278 100644 --- a/drivers/greybus/cpc/header.h +++ b/drivers/greybus/cpc/header.h @@ -41,4 +41,6 @@ struct cpc_header { #define CPC_HEADER_SIZE (sizeof(struct cpc_header)) #define GREYBUS_HEADER_SIZE (sizeof(struct gb_operation_msg_hdr)) =20 +u8 cpc_header_get_seq(const struct cpc_header *hdr); + #endif diff --git a/drivers/greybus/cpc/host.c b/drivers/greybus/cpc/host.c index c89617623e8..7f0579fde26 100644 --- a/drivers/greybus/cpc/host.c +++ b/drivers/greybus/cpc/host.c @@ -209,19 +209,24 @@ EXPORT_SYMBOL_GPL(cpc_hd_message_sent); void cpc_hd_rcvd(struct cpc_host_device *cpc_hd, struct sk_buff *skb) { struct gb_operation_msg_hdr *gb_hdr; + struct cpc_cport *cport; u16 cport_id; =20 /* Prevent an out-of-bound access if called with non-sensical parameters.= */ if (skb->len < (sizeof(*gb_hdr) + CPC_HEADER_SIZE)) goto free_skb; =20 - skb_pull(skb, CPC_HEADER_SIZE); - /* Retrieve cport ID that was packed in Greybus header */ - gb_hdr =3D (struct gb_operation_msg_hdr *)skb->data; + gb_hdr =3D (struct gb_operation_msg_hdr *)(skb->data + CPC_HEADER_SIZE); cport_id =3D cpc_cport_unpack(gb_hdr); =20 - greybus_data_rcvd(cpc_hd->gb_hd, cport_id, skb->data, skb->len); + cport =3D cpc_hd_get_cport(cpc_hd, cport_id); + if (!cport) { + dev_warn(cpc_hd_dev(cpc_hd), "cport %u not allocated\n", cport_id); + goto free_skb; + } + + cpc_protocol_on_data(cport, skb); =20 free_skb: kfree_skb(skb); diff --git a/drivers/greybus/cpc/protocol.c b/drivers/greybus/cpc/protocol.c new file mode 100644 index 00000000000..037910e899f --- /dev/null +++ b/drivers/greybus/cpc/protocol.c @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2025, Silicon Laboratories, Inc. + */ + +#include + +#include "cpc.h" +#include "header.h" +#include "host.h" + +void cpc_protocol_prepare_header(struct sk_buff *skb, u8 ack) +{ + struct cpc_header *hdr; + + skb_push(skb, sizeof(*hdr)); + + hdr =3D (struct cpc_header *)skb->data; + hdr->ack =3D ack; + hdr->recv_wnd =3D 0; + hdr->ctrl_flags =3D 0; + hdr->seq =3D CPC_SKB_CB(skb)->seq; +} + +void cpc_protocol_on_data(struct cpc_cport *cport, struct sk_buff *skb) +{ + struct cpc_header *cpc_hdr =3D (struct cpc_header *)skb->data; + u8 seq =3D cpc_header_get_seq(cpc_hdr); + bool expected_seq =3D false; + + mutex_lock(&cport->lock); + + expected_seq =3D seq =3D=3D cport->tcb.ack; + if (expected_seq) + cport->tcb.ack++; + else + dev_warn(cpc_hd_dev(cport->cpc_hd), "unexpected seq: %u, expected seq: %= u\n", seq, + cport->tcb.ack); + + mutex_unlock(&cport->lock); + + if (expected_seq) { + skb_pull(skb, CPC_HEADER_SIZE); + + greybus_data_rcvd(cport->cpc_hd->gb_hd, cport->id, skb->data, skb->len); + } +} --=20 2.49.0