From nobody Mon Feb 9 09:09:52 2026 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 DAD363B9603 for ; Thu, 15 Jan 2026 16:19:26 +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=1768493977; cv=fail; b=oc/FoqJME1zBxUtvt13VxDS2wAYM5Y7cBX9JmbAgrVrUt2socVipdHzcFJvgPZC5sc0ZqtJ3RZmT/X/2VF+bWk0EycqZh/LEuHLiTXLMTRdy4GOsOOnGWcr1Diycjh2ihKa59jP4j3lLemSN6hc3iu6iCzh3D7pRyD0394dC+4o= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768493977; c=relaxed/simple; bh=ultYous0VT3S8Zq+kgKMUMiSg81095KiPsMKuBqiibU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Vv36Tqltr+zg/9Ckc+zherCnrLdLjd+Rl6q0BD+fyRPIlvk/gq9yiTK0Ne/3YY/ZZjA4e//MOF3SGHk8iGDMehIRVO/Xve1MPW59MOtSiXH7teG1uBcPE4XXTCiB0UWrcC8pLxC9zWnwJIoPLixkYgS1zCJsmOIG2pkMdsC5DTw= 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=HKnwJJj2; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=G0BdeEdK; 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="HKnwJJj2"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="G0BdeEdK" 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 60FFldAc459480; Thu, 15 Jan 2026 09:58:40 -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=Z3tYmmCE3e9kxqbBxw3F/IQQ49I9a8YWpBkKNDAvR2U=; b=HKnwJJj2f1MY KeGCgU19mGl0ofpNXyo7i05fU6GfDy3uzCOJMfnM2F7UP1g/KG8GGToGBkWart3T ph3S8BeBwmDkIOTVaoYwDVzHqI528ze8sh8xg9gbNEkuv1+kRnjRhudBQ9hrFmpM KV6dnBURA6t3OXq3QuXFmoIgZV9ZdCY78ONNSWnlL0qUj1YgQCuALzsN3/K7YdXF 9SsCtzgbF0Kf9RKLhXD0zVgSKgT4y6GKY76ssHlR8FCzSWiuARr/buykVDZOi3Af Z/GXI7yzf2O+9jnjFxZOnIQcTpfZfPqr2h1qj9iiy13aCv9g+x4/pzbDpwbn8U0X zWCx9ewGiw== Received: from cy7pr03cu001.outbound.protection.outlook.com (mail-westcentralusazon11020073.outbound.protection.outlook.com [40.93.198.73]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4bq36kr0uv-5 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 15 Jan 2026 09:58:39 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Ca+RzE4HgKa11IhHR5YRyzk0Q5oN54L/O3jvjEupoR+vkWxOY66RPGo02tlEW+mmJWl6FuEG+NABRHHzLR3eHJSPxwH0zsxT26LV4i4RkVryEyGO6ZcDoImhUTZXMInc42iz0TrLnu0jk3/pznytDePFBIBSeS8LzSMEKyIi2az5qhvWRqPjj1QhFyWC5MQUiye8OxzrZOAiZHUylN43xFG0GnQllWczmW6ZYr1ZbvoLooXRNdBMJER+fA62vxonLISRfjZrxBvzbKPNEZbPzD1wxqTIDWheGkbAIucDiTJY4fKHx+mO02FZTi6qs5r/Eur6BGG70MRCt/wnZtgeAw== 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=Z3tYmmCE3e9kxqbBxw3F/IQQ49I9a8YWpBkKNDAvR2U=; b=N2QDRmdXBvyegz8AGEX+J8cp5cEsDhicQUr7932X4vtWZYV6ii8CgCBlYhQagu7ichvzoBzQyxHPo+svcy08FVh1JiRRDw0YDaX0fBfW99RQ7oGIUlvPLUsFGjbU9HIvTX7ppuYTrBtQCvNai1jevvJv/UikWSZB33sGD7tSfE3gZmzK2VS7jZRA+vas7sGrQ3KiQPbJh3SJGXmq9Xb+crt+baqyl3RP1ncQNyRdPr1UTDET/gNLwqOyHqOEuewMnGVJhbNZlUR4Vq+duS9yhRqPYjVY9fPH/ts5eWlE8piYtJiyB+NgQcSwpZtY/TQZG6+aXgs2rySnKa/XpfpLlw== 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=Z3tYmmCE3e9kxqbBxw3F/IQQ49I9a8YWpBkKNDAvR2U=; b=G0BdeEdKypNyUjDuVMQPYLun7rGQC6/MKKsgtP/vir/BGHGRBTjrQXIaeOBnecua9gUBHR1VKEp1o/vcOOZtvhlwinnADUU1JbJlQvTXZGPg96ezm615Z4tf2mdFmSwoq9bM86UKMpjvfHE9GLPNNkW6pMla2tjMsZA2X9e/Ox4= Received: from DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) by SA2PR11MB5097.namprd11.prod.outlook.com (2603:10b6:806:11a::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9499.7; Thu, 15 Jan 2026 15:58:37 +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.9520.005; Thu, 15 Jan 2026 15:58:37 +0000 From: =?UTF-8?q?Damien=20Ri=C3=A9gel?= To: greybus-dev@lists.linaro.org, Johan Hovold , Alex Elder , Greg Kroah-Hartman , linux-kernel@vger.kernel.org Cc: Silicon Labs Kernel Team , =?UTF-8?q?Damien=20Ri=C3=A9gel?= Subject: [PATCH v2 08/14] greybus: cpc: add and validate sequence numbers Date: Thu, 15 Jan 2026 10:58:01 -0500 Message-ID: <20260115155808.36102-9-damien.riegel@silabs.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260115155808.36102-1-damien.riegel@silabs.com> References: <20260115155808.36102-1-damien.riegel@silabs.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: YQZPR01CA0025.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:86::22) 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_|SA2PR11MB5097:EE_ X-MS-Office365-Filtering-Correlation-Id: 2383163a-08b5-4c0a-9b14-08de544ef1f6 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|52116014|376014|366016|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?U1lTN3BwUGh2UkNVZEpqRVd0aVM3VWt0T1BGdWlVL0F5Mm5MQ210OUw3ZFMz?= =?utf-8?B?cThWNkdmSjZyU0tPVjVrcU9VZ3J3OXIrdFlqbHpsRHlXMklWN1c5M25mTGNU?= =?utf-8?B?OWZqQVhkMDBobW0wSWxNNkxDRytvM0pJWEFhOVFFdW9pbW5YOEkvK0VzeFNn?= =?utf-8?B?SmNsbmdSeWlUTWtWNEpNbm9TL1BrdGFZZVN1NGZxSlQ4QVovTmJxaytJVndE?= =?utf-8?B?Y3NPNHNTWkl2amJJSDFrTThkSWdPNHVSbzNPUUNyR1dENk5ucEliN2FxUjZZ?= =?utf-8?B?YnFkZ29tUUNSNlpFR3p2U05mUnMwU2JXbnh0NDZ2Y2c2dzRIVzk3WmN3ZDVL?= =?utf-8?B?VlJXYTVlL1J2eWszcTV2MHU1TDBFK1Q0U2hKNG5CUitVWUZTV2RvTVNRQzli?= =?utf-8?B?V2VyTGt6NHgzQmd2N2Z3VExtUWN6Qmt6K09TM2dkcjNzbGthWkQyVWo3L3hN?= =?utf-8?B?VDU2NCtYKzdFZkRNcUpmUmhrTzljSlVjVi9MSi8rWUZsTzFqeHhXVkpsYW10?= =?utf-8?B?OFhXL0hNNDlDN3lkSysvZ1lJQW9iTjFnNzljSC9HNEJ1ZWRnY096aVBnTzR3?= =?utf-8?B?VC8rQ2pmTTNYUGt3WmlrbmRLaFhrY0ZUdUcrbVRwTTAyamRMM3B3WlRXaGVM?= =?utf-8?B?cHhoOFBIU0VyeTdiT0xTSGpkdlppdmJKektTeXVLdWhXSEVCOGlGMkhkeDVp?= =?utf-8?B?SjZHcVFDcXN2ZnNFUTJ3bFkwbS9Pa2l4WGZFUkk1UnZLSjVOT0JMMVMxbEpB?= =?utf-8?B?QXBoRFpaaVA5OE96Zy9xUDJMTENpWGgrb3pLclRtaEZxb0ZwR1ZhbXcvNUFh?= =?utf-8?B?RTBnSFFYaE81bjUrbis0c3E3bnFTRFkyV3VGeHhDK3VBclRITnhpMXdnQUor?= =?utf-8?B?UTFndmtxRFhjTk5RZnNVUnhXcUxReTNLSnp4elJ3bVhYbkNOYWxuME1jU2p2?= =?utf-8?B?THBGK3dMSmNmcjRhUVFhd3VyVldwVlBjbThXanJvelhYaHFYdmVvWmozWGNa?= =?utf-8?B?WWxzckw5MDM0Ujc5Sm8yNkJ4T0FGanBDbWZVR0dnMG41bGFmYW1pSHF0aC9u?= =?utf-8?B?dlE4R0ZQdFlINmR0SlpoNGw3dFkybncwRWJhQjlYTHpDMWZPVnJKMzJ6Z1Z6?= =?utf-8?B?TzY3aHltVW92YWxlWnUxQ2N1YlpmSW5sS0tlVjV6b3U5UU9rOTk4VmVqRWxJ?= =?utf-8?B?VGdCQ0g4YTNuNFRJaFIvdnErVTZIL0pDaFNoLzhUc2JZOXFmRWJIMGRsbmpv?= =?utf-8?B?cUYwaTUrZEFUdTdJWSs4VVJCWHo4ZkdSTXVqdlNGWVduVXVCTmZYSFVJeDdD?= =?utf-8?B?UXZrWlJLNG1hK3MyVU9SSmYxVnM2WVQ4Q1g1VWkrUDBPNFVES2RKamtLQjQw?= =?utf-8?B?RmorN1dBNDNjT20vWGp0b1ZlMFMrRE1CbTVVV3p4MndJNDltTUg2ZGxlMGV6?= =?utf-8?B?eDJCSVJvNXNKVm11MG5GeVVBR2Q1WkY0K2k1Q0NVR3dxLy9RT0lsMnhST3Va?= =?utf-8?B?ZjExelNDOE4wb0ZuK0h2M2FxTkwwb3ZMVDZGOXRWM2ZsdlpHNGVYcXE4TnJY?= =?utf-8?B?eVJQdlJVUFFmeGFxa1V1RHV3WUFPaTVzMXl6OVN1L3FoSEhEOXhYWW5VeDVV?= =?utf-8?B?akczaEUxUDcrcUxkRFdTdzVjWjdsMEVsMG91Z1J5cHRnYkZmSzhtZjFITDNS?= =?utf-8?B?dC8xVkdnd0VqKzJ6RWxXdXNmMlNyVmhPbHl6Y20yS1hQbzNPN0treXVDR2Q2?= =?utf-8?B?bzBuNWRaaEdTdmVqbGxqcE1ERDdxSmhqWjdJaGJOQXJhNWFhOVFJb0RxMjNW?= =?utf-8?B?amJqSGhoazBpTGlFVlFyTDFQQ3k2ekl5VEhFV25JZFBDTVpjMUNzSitLTGFH?= =?utf-8?B?S3Y3QnN1djR4RS9McnliVTdUWDRRSVplMFVJcnI4Z0NXcktTQkFMRll2WWhm?= =?utf-8?B?MWFZSENVL0YwZ1ZmazZJRDNoL1FBSVkrWVVwRTAycVkzQWJobnh3RjI4c0lD?= =?utf-8?B?cEpxM1dKYlA5NkxjRkxTcVovM29iUGFIdis2WDFzRHc2cjBaV2lteUhxSGFq?= =?utf-8?B?M3NHOThYSGRza1d6aFBKNk43c0didXIwcmQ5RWN2VDV4QXZ2Ukh2YnRsWFBl?= =?utf-8?B?c2h6RXA5R2YzeGtnSnZXaHpKOVFZQjR4TmJNRDk3bFlnZFNtTjFvNlBEbnBh?= =?utf-8?Q?RkPOBK8W1722bzkx6UEm7b4=3D?= 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)(1800799024)(52116014)(376014)(366016)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?YVM3U1JzWmJqbmhpM2h4Qmw3U0t2UlJiaGhPcXcyV3E5NlhmTXJBN0ZYcDJr?= =?utf-8?B?UVVNZ3pTemM0OGMrVGtXWFFaekc0TlhyNE00dkZ0OXpJOWxxQ1IzcWQ0dUZZ?= =?utf-8?B?Wmo4ZnI0ci91RnBEOFdSbjRTTXVQWDFjOGdpWnc0NUxBZ3U2NHZMWUtVNzM0?= =?utf-8?B?WnRtRkZKbEhTNFpmMTVqQTJWUUQ1OTVVZnRGVE52QU9MbjdjaVpueHpRRFZG?= =?utf-8?B?cmc4ZEt5Mm5qVnJnSHlqaUtDT0Y5ekU2RVZWOXBtTWtSUWJtZGxPb3dTUVdD?= =?utf-8?B?dElBM2FjZlVLM0NhQW85VHdJQVE0ZkxLaUZ6L0FWNDhTM3M5eVRvN1VCVnQ5?= =?utf-8?B?QkJsTUM2d2xQSDFPTVJyNlpmeXBDbkhFRG40RFRVUU9WOHhjTndoQ3ppTVVU?= =?utf-8?B?M240T0N6WWt1MWFmK0RtdXp6dkpqQVFNUHJXNzhYb1RVcWd6cUhLLzdtRUY5?= =?utf-8?B?RDVlci91QXhnMmg1TEU0dmgzOU9MKytpUGJPUXUzUmVOZS9CZitNNzNmVUhr?= =?utf-8?B?aDN1aFFEc09QMXQxWFdSVnlyYWJZZTVkT1cxcHhGZ2g1Q0MxV3hudmMyZ3FJ?= =?utf-8?B?VmRxYW16ZTUybkVDazhGZ0thQndCV3doT254WDRUTmlhUlRzVW1oLzkybGRB?= =?utf-8?B?Y1MrUXV3eTN1cVlGYldTdWVjdFhScUd6Zm9vc1lMU3FnbmZjaTlIaTVUbzY2?= =?utf-8?B?bGR2d0xZS0ZvWHZkZkFJYmg3TzZuSktzVXdLSExoRkU3RUtKcFA2UkI1eTlD?= =?utf-8?B?VG9iS0N4RnZMUmh0WnFWOHcwVVNvaTh5MXoxbkJWNDNqd0lrWkdaNkx5L2sy?= =?utf-8?B?VkFZVVgzaTBray8zaWU5eWkxdmFXdkZ0elJoQXBMNHdodE5mSFJicldiL0hS?= =?utf-8?B?VzNuTVBHV1pPSGxMbUgwN1VpaDFKYzNTTVJZZXQrbTFvRGlleXNSVmVnbTZ4?= =?utf-8?B?WW11NlUvVnVRMW1WTXhEM0JGNVpwSDNaOVB3eUhsVjNDMTEzbkNjOHUvMGhz?= =?utf-8?B?djA0L3o4UkdOdlRtc3cwekRHTHBMRThnbWxWNGxVTG5EaktGRlppbkxqZUZS?= =?utf-8?B?YW1tLzY4dVlvVWFZT0ovelovNEIwVUpnY29ZZlU4dGZ2c3ZKODl3dS9rUklp?= =?utf-8?B?dUVpVnl0Qk5JOElrTEptWmxhMVlyVDlZMTNIaGhRY1VsOTJ6bm9veVFNZExr?= =?utf-8?B?Nk82djFxNWhhbU50ZzFlWkYwMVFLUDJwU3d1Nnlxa0VpQXUzRW5ON2NKUTBJ?= =?utf-8?B?WHVKYTErU2UxeFFDaVFjZ2NjMTFjU1RiNExMdXlzVWRTOFpXT2RrUlJQQTZQ?= =?utf-8?B?TnZJSjhPcitFcmoyRytxVU5RWVhGbGZ4TzhSZVN3c1ovNUVNWnk4WUNVeTdS?= =?utf-8?B?S3Fkb2paT0dsSEpmQ1FuYU9RZ0dzOENlRlRWd20yZ0pxblhuQzlCWXZWc2lY?= =?utf-8?B?dUdGR1VjVVE3SGxrL1A4YStkbWowMzkycTVUMnNldUkvU1c0YVN0K0Jnc2Ft?= =?utf-8?B?a2swUHJmWDlXOUNkQ2FlbmUrMjMzcFF3QWNsVGJ5R0xUZ2VDOSs0QWZsYjRj?= =?utf-8?B?U0Z2SmxFSEVVd3Y3RDlENkVIYXpSc2ZPeDlGMkJwOGx6MzdxUzFaNkhKTnYx?= =?utf-8?B?dUxyOXE4YnhXdjdjcmhybVE5UmRjL3cvWUZ0UTNjS09HODBKRkpRMVRQUWM0?= =?utf-8?B?c01Ma1VwT3NlWlU1Qy80ZldobVBJRi8rUU1DVzQvangxSzV6bjFRdkJ0Nkpn?= =?utf-8?B?ZnNGWUo4YndqMVNSU01qU3R2bEhyNFpsdGFjTGhmSEdTYlNYSFVDZEVOazIy?= =?utf-8?B?K2ZHQjlWMGZMNE0zb2Z6V0ovR2pQUjkyL2I5YWhnUllxU05uQUVNUVR6Z0pW?= =?utf-8?B?MmhRWCtGUUpNTE9mY3hKNWk1VzVveGtVeEFYbTk1NmUvQnNoZ095ZFc0YVNv?= =?utf-8?B?L2V3UlppTkpzWmF3ZGlGNmNtb29IbTZPTTZtaTR3MzZwOEovVU15QnY0VFlB?= =?utf-8?B?aGxJRHk4VTd1M1ZYSlZJbFlUdU1kNVZYVXN1T2VtcjcrY0hNVnNmb1dKQVVP?= =?utf-8?B?V0hxUFJnc3BVQ1JxMUU4M1FVQlBGSjZtbE9BeTZQSGdBZVUvZm5TNjBseFBx?= =?utf-8?B?WmFRSlpVU1pncE1JL0YxcTRMYVVtcUY1cjFFdHZLOHZZMVI0cGhKNXljbTQ0?= =?utf-8?B?c09uNDNGTG5jTERUQjBRcmF6QXhIZ0NRR2o2L2lOUzY2NW5mcjh4VCs1ais2?= =?utf-8?B?dWx4UjYxRkdMTlNxL1ZOQTRKYkNsUnNRYXRsekxWdkdNV1k3THJPazNpTDJK?= =?utf-8?B?OERjb3pRUSsySzU3NzU1ZllXelNja0Q5UitMUUsyUXBCRGV0MzNHUT09?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2383163a-08b5-4c0a-9b14-08de544ef1f6 X-MS-Exchange-CrossTenant-AuthSource: DS0PR11MB8205.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jan 2026 15:58:37.8213 (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: 5yclJPWdHF2VauRyuiUwX/vUnL2NfDPP5Z6v1iw80iGptCpYBUCsKGtnMK1WauEJVSgEM1j/Gwh4k+ASZN1dwg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR11MB5097 X-Proofpoint-GUID: ro6TqM9geIbvIvmNfzxvvilniB0rgO7N X-Authority-Analysis: v=2.4 cv=M6BA6iws c=1 sm=1 tr=0 ts=69690eaf cx=c_pps a=XGteBKPvimVCBgpwGHxg/w==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=M51BFTxLslgA:10 a=i1IsUcr2s-wA:10 a=VkNPw1HP01LnGYTKEx00:22 a=2AEO0YjSAAAA:8 a=JVDttgvLIx4dm3Ewt8cA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE1MDEyMSBTYWx0ZWRfX0jaD4cFPGd59 uAPuSqwnjIgbMSCBcv8/uXQfdInQYPl0m2eRmHZwhSuYlweLsRfhxJ3C33qrvUiNgyJRfO1Aen+ d0jhQdkSyiYFjXKqShxGXiYZkNJ25IZmD18t+6ezVGb+oOGriNQmws7XtxgvjyVvHqczZkfE6eA RPR4MKdFqL7lK6C8s6vZnoyWSWNZ+3RJss5HFaUU8RkmaEixPLFHv3VCNT2r/v5Ai3iCVy2g+WU 8xqjPSXiuzN7Ax5xmCOBV7Q/GHwiDYMWsgGgRM5c1yIC3ntO1akXk56zcpvCnsCsAYXHiMlgv5t X+jBvN8qVpfcDtYijaQ9bq3gshVVKpHKLwp6uWhN1GW2OjPv9PYaFExpuT8GXhgY68Fz/Wia93N 8ct3HqsiNGNPUI8CeT/AT3omDIteIPCjluQ2SpjmRgdXdeh+0AdkDVBnUpaYiiGgyDvoxElwZeJ IxsqRMjsHqt/cyY6H/Q== X-Proofpoint-ORIG-GUID: ro6TqM9geIbvIvmNfzxvvilniB0rgO7N 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=2026-01-15_05,2026-01-15_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 suspectscore=0 bulkscore=0 spamscore=0 adultscore=0 priorityscore=1501 clxscore=1015 lowpriorityscore=0 phishscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2601150121 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 --- Changes in v2: - change dev_warn to ratelimited version in cpc_protocol_on_data 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 2c73d8e724e..7041a6a8a36 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; } @@ -69,10 +82,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 af283fec492..d3fa26e8a07 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..ff65757b40f --- /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_ratelimited(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.52.0