From nobody Sat Feb 7 07:10:29 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 396062C11E7 for ; Thu, 15 Jan 2026 16:10:20 +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=1768493423; cv=fail; b=Ekxo15Tzwyzb8rlphGHmk9fRw1ZBhXajIeXiIkIMtqaRKUNgelxFuUAiCOM9AZ5AlDtZm55UNZmUsusVI895/ia3yHa4nKW17/ZCJQdbiHpLDCt71Tt/7bu6wjzndPPflalNH+vbYFkxIWvIOnuyVDbZNp9NtMxfWsQECfsCbYs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768493423; c=relaxed/simple; bh=PwKrAdk2BMHvrjsDuj98rJRczNxYK+R1w/HsuylIcbk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=aKSjM5KXBMRxFmrMOdnL5qnl+WSxu7PQKeEE6DPNuRLIw/m2ngVL1ZIS+kSr/GpsGcbW05tIWg1znsdwt2TMnI4LwctDtW+2XBJTBNh76INxwgeKwl0s6Q6g5rHEj4GA0zpazTlL/LqzYzn+ouXnVEH3ZCBLSb85jAJblbyFlkQ= 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=wXkkeWIX; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=BIqCb9wK; 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="wXkkeWIX"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="BIqCb9wK" 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 60FFlYMq459372; Thu, 15 Jan 2026 09:58:35 -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=WXimmYfHxBOk5LEDYhw5NGF1Mr5DqOA7bkYOOJ7DnKM=; b=wXkkeWIXW+J0 1R44zO+KcrKfxMsKd6glE9YEhHC+pMf5hn854DjMbzHa+vRMZeWz9BupoVIG+beX +oLb+Btis//fT0e31TaSS7RZuqO9q0W9W9J/3ONq4Xfjxu5y0vn4ol7PHMAI3Rzc Jtoaa5MStAOrrUjk2fx3UnkogP4D46RMy5MiYBx1UnJWff0al4oaV5DsJcaloKYV qCxfrClE5CYPw7wY/urWpPdukNP7kvaLLhlf5VhSyRRkGVyEhbpsNzTXZZMLj81Z 6ElsA6l/pd/6zbVU3ZYd63x9N51Qf0LivaFAWEgTeBlnDNoQUfU91PfSWSpuct/a YlecPWtk5w== Received: from bl2pr02cu003.outbound.protection.outlook.com (mail-eastusazon11021127.outbound.protection.outlook.com [52.101.52.127]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4bq36kr0ut-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 15 Jan 2026 09:58:35 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=JT1L4xg26Ax2870sEZdV/XKuTjcrEIIF9j2qGNokikF3RVF0Z91m+nB+yIG/46ZMJ4Vfg+qNUqDs1+WyunCEeuG0FfkOlW1zrlyRbuYYPOJ9N83odzUUV4ieAz6EpnQu5YNV7iIUq2XAHYLcBFCJvBhT8kpq/BC0UelpaFhhGhDQMPWOnb8u4zmTCJr0MIl2z7tQcqrVChk3aiGIkYJdvKo82LLzGBb4X5NbNId3mMTCK5BPXQJDC+ijHhOanohKKBZ6BZ3qdg3kj8uV+cRIoP+s631PEfX247u4r8yOSQyDymJydk25Is0oAqOtWCW8gZUfez4CS+nfGDMRiDcmmA== 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=WXimmYfHxBOk5LEDYhw5NGF1Mr5DqOA7bkYOOJ7DnKM=; b=m7n+8PEMeWxpI0I5g4ZE8a33SDfNucv2yQU6115bvyG+pZy50y9hYtsKNyv6OeS3T1vespcJBXTaziye898oJxaCA6d5Cr8RgJffDiwKmaa8Y0+/at3rVmLuHMYGUt/Cop8BIO2AyDYxO0BNB2PA68ppbSY7BnJtyirrZ34QiW4M0ye2CzrVwkTpENi9vu4AbwK/B6EnS3dGEsMzLL2rrlkNKCYJzd3ltsAtyAH/5TUikOHPJnnrdAJcI4TElbKbXEVgqpoyEcSrfMKGk79mEW/g8NeHxft4Mx3bB/wkaDGsQa3j49DIsLjB0yU3NJKzYbk7RpEmJ4dyInGYowD5WQ== 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=WXimmYfHxBOk5LEDYhw5NGF1Mr5DqOA7bkYOOJ7DnKM=; b=BIqCb9wKyBbVYXrHCzTLBZ5tFpjp51XyBPVzWxC+qsm0wXbRzQ6PZEUr8mpE9amBBVCzNhq+5R4zGikNSUM7/4Eg2hClOW+zqxO9yq9SWTlXpXx3UvD+YRcjLZ3wTOfzBUURfOY2zJLBbjY7hbqt45LDAO3YtjmNTZkPuTQyZbQ= Received: from DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) by SA1PR11MB8811.namprd11.prod.outlook.com (2603:10b6:806:467::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.5; Thu, 15 Jan 2026 15:58:33 +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:33 +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 01/14] greybus: cpc: add minimal CPC Host Device infrastructure Date: Thu, 15 Jan 2026 10:57:54 -0500 Message-ID: <20260115155808.36102-2-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_|SA1PR11MB8811:EE_ X-MS-Office365-Filtering-Correlation-Id: d81f8ba8-bca0-4aef-34f3-08de544eeea0 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?RHIyMUh6alVZQ0FNckg0QkdySW94bjloUHBiVlZYN0p5cTJnYlJRR2RuTFFE?= =?utf-8?B?STU2SGRMUTJ6NHh4Szh5STlRUGFiVXZ6bWUzSTA0K3p0Y1JVMnlTT2VsTC9m?= =?utf-8?B?d1ZiU0xFQXM2aTZDNk5OeTBkYUFJSkhFTkUzTXU5RG9GWTZWazVzRXNwTnRU?= =?utf-8?B?cUx6eTJBdGZCK0RVZGgzU1FLdHNFa0FkeXI4S1AwYUlOZE1IYXFoT0F6cE5s?= =?utf-8?B?WnF4U2kyRzN5azA4LzhlcWtiK2Y2MVphU252ZExGeHFKb05vbEVWamdSRFF1?= =?utf-8?B?U3RnZFk2N003VkhQQys1d005UlRqRUVIQzdmb3N3QzBHRmlxM3ZjM0tSQmFt?= =?utf-8?B?N2E0Ty96bHlGcUUySllSVVVEb2wvV21oSkl3YkVvNGVrcVZwbmZ1NEJEdWFr?= =?utf-8?B?L1A3TlVuUVB6N3Y3VHRHclFydGdleStOZmlVMkc2VElndVJsOE5wUmhMZjZs?= =?utf-8?B?eWtHNWp2TEttTTJXTnFDY2x6R3VpS2h1VG1vSytYd283LzU1WXd3ZzNqN204?= =?utf-8?B?WVVoMm5YSnhRMlpDTXB6dlZQY2x6Y0RxS3FrRzV0MCtjNlNnYzB4NnZyeWVT?= =?utf-8?B?bzhFSFhZRnZieFpaREQ3VTA2ZnRJbmUrVXh3dEVLampYOWIwdGN6RnB0WHE2?= =?utf-8?B?NU8wbzRLZzZEb2paWVRadTJhY2JHWnNkV21rR01PdkVYTTZ2dVpFRUE2L2Ru?= =?utf-8?B?UkZwWm9iTU9JdzFRNHpDaWJGeVUwRGlrTkZZQ3U4STQvcVF0MmFTSVZEMnUv?= =?utf-8?B?SGp3TUg4aUR2MGUzRnFIdHoyWEhkWlgzaDVuSVZuc2xvd3JzSCtBZC9lVG1a?= =?utf-8?B?U1kyY0U2eC9QVlNBVUM1N2MrRFVTaVZuQWRpUUQzeTdYZVA0ZmJadlNYVkFM?= =?utf-8?B?WHZSZHZ0SXN5K2k2TmhoTmZWWlpPdUtaYU1DQnU5aXZhaTVOYTUxdzJNaW56?= =?utf-8?B?M1JVUlZCcFVndkllSW40L2hrL3k0Q2R3U0VpeXFLYWJJK3huR1Y0aVpLQlNB?= =?utf-8?B?V0l3ekE3L1dOU2VJNHJ0RW80ZE4vd3Y0aUNPVndseU4xd0twSTZuL3FYWkFB?= =?utf-8?B?Q3hIbDFHdDh5TnluaG01cXl3dXgvQTRmUkV1dGJ2RUZFRHVmV2ZTcXNtRWFH?= =?utf-8?B?aFJPeDl5V29BbWx5UCsvSVJUR091YWZoUHY4eXc3ZHBKYnovWHB5Tm9ucjZY?= =?utf-8?B?S2hMclc3Wm9FNFdvc3FQSjdKU0hNdTV4K1VIWU9IbHE5Y0lqRzVHQXczWXZW?= =?utf-8?B?M2M1amxkeUV1VXZQazZUY1lxRmZxR2dpdGpjS2JVKzF6TDZLMmpUZ0FuQ0tv?= =?utf-8?B?MVdBdGROZmdIaFFMT0M1aXNnQTcxeXVoVUMybEY2YzBJL0VxTHRuTGhnY3dE?= =?utf-8?B?RG1tVkNGTGNXZldVaUhaQXpjb29QSklvUkg3MkZxSmswTGxYeDRsWCtiWG9H?= =?utf-8?B?WitJT0VldzE1YUl3bThpWVczWGlpTDV6R3d3VFB1ekZXc2g3a3dtWFhKLzdB?= =?utf-8?B?c2dkUEJYK1BUcHZwMVMrbzJWT3dNYkhxN1hpQno3ZGZidmNUcGxyZUJSQ3lp?= =?utf-8?B?R3c0L1FGN0xiUFk3TmpvVlQ1VnJzSGpmeWtGMnR5WStyU255TmhCWjZEMWtt?= =?utf-8?B?THRlcUFoVmw1MTBlNkpEQUtvd2MzQXNLSGdoL2d1SkEvY080R05DbnNreUI4?= =?utf-8?B?RHFSVDE4ZUJIb2U0cTdBUkxoN3gxN1pQekRsKzJhVE5zM0R0ZGxNOEphWE5B?= =?utf-8?B?VklReDQ4YTBoOWhoVk56cU1RekQwdVhUcTN2ei90WlNNRWFmU3M5N1J5dnRN?= =?utf-8?B?NGNwb2YrQ0hMMzZEQXgxSEFJSDhrQk5oRTZXa0grU0tCaEkwQ3RnYkE3SmdJ?= =?utf-8?B?anZlQjhkNFc1U0RTSjdPY2J5dmRlSVc5Tk1ZTFdlem9lT0lBaGFiOHoyK2hZ?= =?utf-8?B?bnpjZlhkMnp0QnpUU1NBbE15amxoUVpRUEpHbnJ1MDVUdTRMREFsbCtWUk1a?= =?utf-8?B?UER5MDlDMWU5ZS9BREdGQnhyMGVSMnNWNmVLcTJKVnpYcmF0V3haMW1IZWlx?= =?utf-8?B?cTc4c0NyVllVQVFiY0k3M1RTcmNPTFVQTGFXMm1PYTVtTFN6SDF0ci9XakhK?= =?utf-8?B?RTZ5eGFhRVZlUmVhek9DZ0owa1ljajl0blpNMCthc240QSs1Yiszek1ETGxG?= =?utf-8?Q?UE2VJDgTYDleamxo7/1m1cM=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)(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?c0NZeVdrUDlVR1N5bldyeXBjaThoSFdXeDFaVU4rczRoYUJVL3Q5NUZwNXVj?= =?utf-8?B?Tjl3L3g5amluVXFraGw5aTIwdTVHUVVPeXlGRXZNdUJlajhxVnpoeVpkYjQv?= =?utf-8?B?ZjVYVjU1S3phUC9BQmVlbjFEemlhUCswZWFaRWRYcWRqMFhvSWdtbml2T3ht?= =?utf-8?B?eUM4SndhdTdsTXV0aDlXMzJOUzk2cXIrMHFJOGlZNUx6YzlrRXJqMlZGS0hE?= =?utf-8?B?YUxTNWY2WHVuTmd1NUdURG9hcEYxMWpnY2dvR0ZQRFFZQTQwbkcyZmtIVXF2?= =?utf-8?B?bDd1eHdTbmpXVDc0aURaMnVqWHo0a0k0eDJnNk1vZUx1K01FZXE2RjNOUUtr?= =?utf-8?B?QkxRUEZJZjVkTmJ4SnVOa2tveStJZ2xuMERUUnhNY0ZxMitQVXpRb2cranc5?= =?utf-8?B?NDA2ejNlWWtaOVUya3RUVldERHZOakZNQ2h2MFhEOStnQW8rcytBS2pUdUxq?= =?utf-8?B?Z2RVY040eFBjcVRLQjM5dWJESlh4ZjdvQ3Bva2R4ek5MY1dGc0hsa2dyN3RN?= =?utf-8?B?cGZrYjJsM2pWUEdJSDVZbU9lNzZIaHhVVVIvb2tkL2RxL3cvc1c0Qi9HZXNz?= =?utf-8?B?OVgvVEhwVzdyclMzdy9pdXVyNkNFYXNLRlh0L2UyTlZUM1VkNXhQVm0wWjBF?= =?utf-8?B?aUp1eVc1d0xCa3A0Y2NrelcraGlCcVlnUDZpL3JzbHFGRE1IYkNkZmREV0ZW?= =?utf-8?B?K3dqbmg3dDc2YzdEdkJSNmJuM2Q0T1MzOFpKRFFNZ0ZXZURQTVoza1NyS3BT?= =?utf-8?B?VHBQbjVac0p0L2YwSnV0ajhON2NKMTkvTFNzckhrSldxUk8vMGxLVlc4VWpz?= =?utf-8?B?dTJ3T1BiSkhod09xV3FSR0trM0FqdUJtWmhCcEkyUnhKVlNRQWNTRW11MTN5?= =?utf-8?B?Z2d6dnJBYVVXeitXdDQ0NWdFYnhYV0JpRnVGemg0eU15QmJyYUJQcVB6OXBY?= =?utf-8?B?bEN2T2lKa1k2YlE4UkQvYXlZenVTYlE1VG5nNjllZGwwY2FRZDl0VFBnM1di?= =?utf-8?B?M1Z3YU43akVNZ0pBN21GZjJEZzIvZEhtUnNBR2YwYndmd3JpbUNoQ3RiOE9n?= =?utf-8?B?K2tnRm42eW44N0JvbmxzaGtnQTd0NTE3Y0NyRkovZWg1bG1DZUtrWGViL0E1?= =?utf-8?B?aVdWdXUvUGhYcnoySWgxemVCZkNSQS9FdE9TYVVYQTdaZ1Z6STN2aWtzejhG?= =?utf-8?B?YXBoTmoyOUp2akVMOFYwZHZ6LzFpSFFYWWgwMm5PQjM4WEh5SmtWOFpHWEw5?= =?utf-8?B?QVBjd0ZjTEdXNEdqMjVzOFFKaExTZ1RrRit0cm95alQ5QXdPUmswaXkwalUw?= =?utf-8?B?L0dGLzQrSENadEFacVdKeTFzMllFTDExVTEzUVNDclRxazB3RmhnT0N1VXlw?= =?utf-8?B?Sk9nQjltWU8wVjBzVU1NeXR4SmV6d29jMTFJZ1UzMG5qOGUrTG82b29pcSs2?= =?utf-8?B?RFlIMGRKWkZzU1FXeDlHZDZrOVBselk1U0tBY1FJR0dmeS9UNGlNNnZJZWxJ?= =?utf-8?B?SWVPd2ZEV0g3eUhjenBVbEJRZTRFamJIWXIyMjdqN2dYUWhRbDI3TVE3ak1r?= =?utf-8?B?anBwNFJPT3BRZis2Vk5NVEI3STdzOXNjaXV4Qi9RcVh4QlY3cmVseGZDN0h5?= =?utf-8?B?ZFdTRzlDcXArMGZqNEJxWEhJNy9ncmFkbVpLRFRYc012QVJtRjU2L3p1Y1Bp?= =?utf-8?B?NDNwUWVObXR1cmI2dVZzR0QzVU10UTd2RjlnRGlaTmRnWVF0eG54VmlnR0RZ?= =?utf-8?B?MEtOWFJBMkU3NXZxUmt4Zy9oTFczVDRQTWRLR3R2VWhPajlwRGxKcHV3NkJQ?= =?utf-8?B?UFhSZDBDQk1MQ1huWGhTTDd0V2ZyZURBUzFFdzRZK2pSZ1pOMzBVSkU1RlNt?= =?utf-8?B?cEg4Q001NEpiZFBsZzF4TzNNZVR2QVUrOGVHRkt0ejhyWWZXY3k4ZGMxVG1J?= =?utf-8?B?dTZ6VjFDazd3SFVXMFlQVUJtVElEOUFKcWl3eS9UN2FPSU5Mb0ppTjlNa2d5?= =?utf-8?B?VkRlSzVRRjQ1T0NrWWlzTURWK3BIbFNhdlE4WjZoZDMzSjQ2NEQ1cWNjNWFx?= =?utf-8?B?akxROVdlUnBNSWxaazQ1cFAramZLM0NvREl4ekh5ZytnREF1RjZtSjQxaXZX?= =?utf-8?B?Z3d0VnIyNGxrRkNmWW9iU20wdXBPbDA1VmhSd0xMNEFhUEY3RzFvdkN6eUxq?= =?utf-8?B?MUN5OEJQYk1CRjQyc3JLUDI2NEtaR2NLZFBrVndZRmR5OHk2dUJqQi9Wd3pu?= =?utf-8?B?SStQM2Ywc3dDMW9WenVrQm1WUHNqV2E1aEZPWGpYL2poV1Jibk1Fckt3ck8r?= =?utf-8?B?OG1lZmhzYTczSWcxdS9XTGxWYitGVm5QdWxncW1BNHVpcVd6S2c1dz09?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: d81f8ba8-bca0-4aef-34f3-08de544eeea0 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:32.2466 (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: 6nwIHPQDdYvEVlimkpc7mM83U2DvJEZE9Arf9CqR0OZH/FEcm9JGN4Spnh7fUZOTqza/+7VMNZclbA+POCkdQA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR11MB8811 X-Proofpoint-GUID: tfXpgaT91aqdRptm0cUNnDXeTf6hE9cM X-Authority-Analysis: v=2.4 cv=M6BA6iws c=1 sm=1 tr=0 ts=69690eab cx=c_pps a=+Bba5nuaRI/XgWxKvljhhQ==: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=VwQbUJbxAAAA:8 a=NifzlKhAlxbwiDc_K4AA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE1MDEyMSBTYWx0ZWRfX757O2taVXnp2 cM1N8AAGqvGU442jhRCLJsomPtNNDGl9jK8+PYo3yGbmnlJnhnQfWBIJSpxGKaRrc+YManY1az4 PF3LM47IwslCcAELVszdpF4ZZ0OSgmgMG7wz+oBsh4WayHs9T5vPTWjLHesLdVjgbcw0lpF/hIr EDOSFco8XHxyZf2R59sFMRlrF2OjhiHRAOf3/vurEjNKzLOtdBS2FsHq7AcC1XzqepDqkKdX3fo BcetrK9ugUSw8q4GeQ/rnMLSTYzH7CClsh/21qJleli4O6NJOxB6TSiDrmM8eIIYh8ClL+IVs94 YFgSq9NYV1oXwgyqGMfaZBUGr9Q+kg1hYOzk/XobA+/lVZMfBcZ2rbUL0N3seiYbQZKE+Io30Zi JYrGz1a++HdyI9/oVCd3FTBE07PKNwIVakdrkgxQ0R4ttY0BVqNhhn+9y+8kr6sm0c2qiTfz/Dw 0pVjszIRbS9jDd3kHzw== X-Proofpoint-ORIG-GUID: tfXpgaT91aqdRptm0cUNnDXeTf6hE9cM 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 As the first step for adding CPC support with Greybus, add a very minimal module for CPC Host Devices. For now, this module only proxies calls to the Greybus Host Device API and does nothing useful, but further commits will use this base to add features. Signed-off-by: Damien Ri=C3=A9gel Reviewed-by: J=C3=A9r=C3=B4me Pouiller --- MAINTAINERS | 6 +++ drivers/greybus/Kconfig | 2 + drivers/greybus/Makefile | 2 + drivers/greybus/cpc/Kconfig | 10 +++++ drivers/greybus/cpc/Makefile | 6 +++ drivers/greybus/cpc/host.c | 84 ++++++++++++++++++++++++++++++++++++ drivers/greybus/cpc/host.h | 40 +++++++++++++++++ 7 files changed, 150 insertions(+) create mode 100644 drivers/greybus/cpc/Kconfig create mode 100644 drivers/greybus/cpc/Makefile create mode 100644 drivers/greybus/cpc/host.c create mode 100644 drivers/greybus/cpc/host.h diff --git a/MAINTAINERS b/MAINTAINERS index 6d1de82e6dc..56daf9ec310 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -10774,6 +10774,12 @@ S: Maintained F: Documentation/devicetree/bindings/net/ti,cc1352p7.yaml F: drivers/greybus/gb-beagleplay.c =20 +GREYBUS CPC DRIVERS +M: Damien Ri=C3=A9gel +R: Silicon Labs Kernel Team +S: Supported +F: drivers/greybus/cpc/* + GREYBUS SUBSYSTEM M: Johan Hovold M: Alex Elder diff --git a/drivers/greybus/Kconfig b/drivers/greybus/Kconfig index c3f056d28b0..565a0fdcb2c 100644 --- a/drivers/greybus/Kconfig +++ b/drivers/greybus/Kconfig @@ -30,6 +30,8 @@ config GREYBUS_BEAGLEPLAY To compile this code as a module, chose M here: the module will be called gb-beagleplay.ko =20 +source "drivers/greybus/cpc/Kconfig" + config GREYBUS_ES2 tristate "Greybus ES3 USB host controller" depends on USB diff --git a/drivers/greybus/Makefile b/drivers/greybus/Makefile index d986e94f889..92fe1d62691 100644 --- a/drivers/greybus/Makefile +++ b/drivers/greybus/Makefile @@ -21,6 +21,8 @@ ccflags-y +=3D -I$(src) obj-$(CONFIG_GREYBUS_BEAGLEPLAY) +=3D gb-beagleplay.o =20 # Greybus Host controller drivers +obj-$(CONFIG_GREYBUS_CPC) +=3D cpc/ + gb-es2-y :=3D es2.o =20 obj-$(CONFIG_GREYBUS_ES2) +=3D gb-es2.o diff --git a/drivers/greybus/cpc/Kconfig b/drivers/greybus/cpc/Kconfig new file mode 100644 index 00000000000..ab96fedd0de --- /dev/null +++ b/drivers/greybus/cpc/Kconfig @@ -0,0 +1,10 @@ +# SPDX-License-Identifier: GPL-2.0 + +config GREYBUS_CPC + tristate "Greybus CPC driver" + help + Select this option if you have a Silicon Labs device that acts as a + Greybus SVC. + + To compile this code as a module, chose M here: the module will be + called gb-cpc.ko diff --git a/drivers/greybus/cpc/Makefile b/drivers/greybus/cpc/Makefile new file mode 100644 index 00000000000..490982a0ff5 --- /dev/null +++ b/drivers/greybus/cpc/Makefile @@ -0,0 +1,6 @@ +# SPDX-License-Identifier: GPL-2.0 + +gb-cpc-y :=3D host.o + +# CPC core +obj-$(CONFIG_GREYBUS_CPC) +=3D gb-cpc.o diff --git a/drivers/greybus/cpc/host.c b/drivers/greybus/cpc/host.c new file mode 100644 index 00000000000..80516517ff6 --- /dev/null +++ b/drivers/greybus/cpc/host.c @@ -0,0 +1,84 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2025, Silicon Laboratories, Inc. + */ + +#include +#include +#include + +#include "host.h" + +static struct cpc_host_device *gb_hd_to_cpc_hd(struct gb_host_device *hd) +{ + return (struct cpc_host_device *)&hd->hd_priv; +} + +static int cpc_gb_message_send(struct gb_host_device *gb_hd, u16 cport_id, + struct gb_message *message, gfp_t gfp_mask) +{ + struct cpc_host_device *cpc_hd =3D gb_hd_to_cpc_hd(gb_hd); + + return cpc_hd->driver->message_send(cpc_hd, cport_id, message, gfp_mask); +} + +static void cpc_gb_message_cancel(struct gb_message *message) +{ + /* Not implemented */ +} + +static struct gb_hd_driver cpc_gb_driver =3D { + .hd_priv_size =3D sizeof(struct cpc_host_device), + .message_send =3D cpc_gb_message_send, + .message_cancel =3D cpc_gb_message_cancel, +}; + +struct cpc_host_device *cpc_hd_create(struct cpc_hd_driver *driver, struct= device *parent) +{ + struct cpc_host_device *cpc_hd; + struct gb_host_device *hd; + + if ((!driver->message_send) || (!driver->message_cancel)) { + dev_err(parent, "missing mandatory callbacks\n"); + return ERR_PTR(-EINVAL); + } + + hd =3D gb_hd_create(&cpc_gb_driver, parent, GB_CPC_MSG_SIZE_MAX, GB_CPC_N= UM_CPORTS); + if (IS_ERR(hd)) + return (struct cpc_host_device *)hd; + + cpc_hd =3D gb_hd_to_cpc_hd(hd); + cpc_hd->gb_hd =3D hd; + cpc_hd->driver =3D driver; + + return cpc_hd; +} +EXPORT_SYMBOL_GPL(cpc_hd_create); + +int cpc_hd_add(struct cpc_host_device *cpc_hd) +{ + return gb_hd_add(cpc_hd->gb_hd); +} +EXPORT_SYMBOL_GPL(cpc_hd_add); + +void cpc_hd_put(struct cpc_host_device *cpc_hd) +{ + return gb_hd_put(cpc_hd->gb_hd); +} +EXPORT_SYMBOL_GPL(cpc_hd_put); + +void cpc_hd_del(struct cpc_host_device *cpc_hd) +{ + return gb_hd_del(cpc_hd->gb_hd); +} +EXPORT_SYMBOL_GPL(cpc_hd_del); + +void cpc_hd_rcvd(struct cpc_host_device *cpc_hd, u16 cport_id, u8 *data, s= ize_t length) +{ + greybus_data_rcvd(cpc_hd->gb_hd, cport_id, data, length); +} +EXPORT_SYMBOL_GPL(cpc_hd_rcvd); + +MODULE_DESCRIPTION("Greybus over CPC"); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Silicon Laboratories, Inc."); diff --git a/drivers/greybus/cpc/host.h b/drivers/greybus/cpc/host.h new file mode 100644 index 00000000000..f55feb303f4 --- /dev/null +++ b/drivers/greybus/cpc/host.h @@ -0,0 +1,40 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (c) 2025, Silicon Laboratories, Inc. + */ + +#ifndef __CPC_HOST_H +#define __CPC_HOST_H + +#include +#include +#include + +#define GB_CPC_MSG_SIZE_MAX 4096 +#define GB_CPC_NUM_CPORTS 8 + +struct cpc_host_device; + +struct cpc_hd_driver { + int (*message_send)(struct cpc_host_device *hd, u16 dest_cport_id, + struct gb_message *message, gfp_t gfp_mask); + void (*message_cancel)(struct gb_message *message); +}; + +/** + * struct cpc_host_device - CPC host device. + * @gb_hd: pointer to Greybus Host Device this device belongs to. + * @driver: driver operations. + */ +struct cpc_host_device { + struct gb_host_device *gb_hd; + const struct cpc_hd_driver *driver; +}; + +struct cpc_host_device *cpc_hd_create(struct cpc_hd_driver *driver, struct= device *parent); +int cpc_hd_add(struct cpc_host_device *cpc_hd); +void cpc_hd_put(struct cpc_host_device *cpc_hd); +void cpc_hd_del(struct cpc_host_device *cpc_hd); +void cpc_hd_rcvd(struct cpc_host_device *cpc_hd, u16 cport_id, u8 *data, s= ize_t length); + +#endif --=20 2.52.0 From nobody Sat Feb 7 07:10:29 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 04E6E2C11FD for ; Thu, 15 Jan 2026 16:10:24 +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=1768493429; cv=fail; b=lzqiALS8v7rBAn9JjdkNo4SBMUKR/4feIeu0lnrmkJgSWLmRkvmr/dOb0OZzmt/i0LxbPJWddW0De1drw+3peIHP3REWKlO+oA/iK7+s3DZhGKt2AzpgfuAWWYnngOe8QRPrk3Y39gzK7WQ1kHAl6pl2486IQkI4QfJWM3q2t1g= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768493429; c=relaxed/simple; bh=UW30b9dZkUv6/NKm0CR8jOixF8tvE/GMu1C103Ab85o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=PzOW3a1TSsJCw5VUSblpm4SM2YhjuZ9ottadnwQN7fdhkCQMXQMoZ+tc/ZOEGpPMt31K4Jc6QzS+H0t+1lU7ZmaTyoaCPsYfzTBVu0WlvlipUSmKdeLYEYo3GWOUXOt200ATzIny000L/ktWHEyGKTSKnt2c1MH0Ugp2bZCiL/8= 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=b7NbGWzC; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=DPtwrKUS; 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="b7NbGWzC"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="DPtwrKUS" 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 60FFlYMs459372; Thu, 15 Jan 2026 09:58:36 -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=dY2ZY38R7KDVfc/TYv+75hVhZJztufc6KKcH5xn7Lbs=; b=b7NbGWzCsvDe VJPzChv7pMnXgx29x/mJlVTB6O3al1QpRx5K9YLL54T6yKOYuC8xnCiETXKeURXe tw6MRUgaA40TceNikDiX7g+olhqC47RyFO3uor/mIGALnoTqT4uQlfrYHdyzVuXA iqZkSO4lkRTITgib2mM3tTfXVAkTBpqLB5YhrXwOnNV7HilS6wpesCnMAfTzWkUA Z5RO6vtFCZI/qwBwMwewIL4REDSVmMAaLA4tK4xJLGf3kNkgUvM7QBQHqBSCKa6A GuIgQWcI4mNVM/I7KLf0hk7HCTMaOwejfFATwUQKKd/WpL5V5gMuPH/FKSWCT5BP 9HHNYNlHbQ== Received: from bl2pr02cu003.outbound.protection.outlook.com (mail-eastusazon11021127.outbound.protection.outlook.com [52.101.52.127]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4bq36kr0ut-3 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 15 Jan 2026 09:58:36 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=nuGUs5I5aX3wPlNktxhG3SX7JLgiL6WWnE4BqI2rFryHbnxRdVaELstz03ToYKWPEVx2OkGkzDzuE87fD+oVwXZiqme0z+qs9ohrT8gp+WPnJGIb2yzCvJQsJkERX3WXYfOBhi7rWZsm6YE/ikSImEgvAR2Lqrn2qCYXufs6g8xNw3TNyX25XPK1y+yTvdkHK/y4lCy5im3GCTh16B1Fvzs3wFuvQfFoZh/OOs0epWtV4pPjOEQXiColjPP9NHotJWG/Ah2ArxIOrUO5VCSECls+R9nzBwgtgjUQup5KYJihEMYVdl8hCB4dFLvY6TGZwm5xdwvhiVrp/4XMkzLrpw== 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=dY2ZY38R7KDVfc/TYv+75hVhZJztufc6KKcH5xn7Lbs=; b=ovII41NY9pqL+l2/eb0RST/o7AgBu+vFiVALROoe7EYkiD+rLcwy4lYJCMdWMvu124mwvs1tGLVWmkgxlZunXJD1kgXwv/AcdZE2K0pWFX+UTROjAIeYNuI0A54d/Ds2s0131yZfQ17xSU0/xNCqsiBsZnsNHjsm6Jt4/PqsM9TDO/sizh0x14WU8g2Q1SYBb0hejwnduIo/m6gTqf2buxQHLGqr/GEp7sWGFGd4OX35SavtbHYXY/pKc1dB5oP6QB+1lSWAMXn9Pfws2cKXW02NSSzAZTUWSiVey8oQA03xv9XKjJyYog2Mlh9HkLth0Lz/rOxVjBmzjJhT4a8UPQ== 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=dY2ZY38R7KDVfc/TYv+75hVhZJztufc6KKcH5xn7Lbs=; b=DPtwrKUS8a8rxdfUBdsZaRKECX/BZ5zaH8J7X7PJ5K5lNqUXPqpKhs7tIVlvvPqMwE/tb4poFZ3pWRktEy1jm/C6G8eu1vomze2NMJU7kUJ8NGgR1gjHcVpu2Jv3MQsV0M8EU/7TKXQEWoHlAXbE4VApBPxcs9jYEC7NhweyznM= Received: from DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) by SA1PR11MB8811.namprd11.prod.outlook.com (2603:10b6:806:467::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.5; Thu, 15 Jan 2026 15:58:33 +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:33 +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 02/14] greybus: cpc: introduce CPC cport structure Date: Thu, 15 Jan 2026 10:57:55 -0500 Message-ID: <20260115155808.36102-3-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_|SA1PR11MB8811:EE_ X-MS-Office365-Filtering-Correlation-Id: 59468919-dbaf-41aa-46f4-08de544eef14 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?VURsc0JIWTkvakN3aCtMNXFITXZ1cnM0aDljOUpRTlpIR3RkOFJ4bUp6SmdO?= =?utf-8?B?ZWR0TmlOQzlpZU5nc0tzYXVRYWZMN20wRThWZFNtMHQ1RWtOcnVtMklKL1VC?= =?utf-8?B?YmFTY284dkgwR3RNYm5aU2NsNWwrSEp2b0c4alpuTnhBaDZZRXBrYURuc3ZO?= =?utf-8?B?UnNMMC9QZGFjQWxJYTlRS0VncHE5SjV2amE1SHVhRmpCdTYwenpUczZtcXZZ?= =?utf-8?B?UXcxdWtYNjgxelllWWd0am0wZjhUSlR0bFIxY2RTZGtqb3RYd2M0T1RHcDFZ?= =?utf-8?B?K1VZTUVkTUY4TUlmMVFyVElaUzhGekp1V1d2UEVPYUFuc3Z5OVVNZkpWVkc4?= =?utf-8?B?V0lNMGlXN3BOeGZKSXhtbHdwdnNVN0E5dmRXSHlaZ3oxM2h0MU9qQXFtWS9v?= =?utf-8?B?MUFIN2NUU0JkTHJQeFgxeUk5Y0FlM0YwNDZ2NU1OUmc3cXNQNWtjVkppVE5S?= =?utf-8?B?NEE0RERIODlZNGtxQjZoSmEzTVRCMzdxVUJqb2tZblpSb3B4KzJuL1R1Z1VC?= =?utf-8?B?UHpPc1BlZ2Nhb2tqc3Q5YWZWc1NaK1cwaVl5S3d3bTlDWGxlT1E4eE0rQjZ5?= =?utf-8?B?VzJSSmVVeFNHWDNaY2VEakk4RnpmVTg5T09RNE5KcDF0VFRWL3dvajFMaU1G?= =?utf-8?B?Sm9wYnM0SVovUW40WmxkK1NuYWJFZlhuVHQweW9yL1l3SzBHNFdadEhUa1FM?= =?utf-8?B?NXpBU29xMjcvR3JVTWVaa1RTdUtZZ0N4NDFCTCtIWWl3UERKYXlBUVJIVVFM?= =?utf-8?B?b1VvTjhHQ1lWMk9FS0pSVERzYWNEOXFTV0p6dDFUd21JYVIwVjdsZWpYV3kx?= =?utf-8?B?ZmFDSk1yV1FRQWlrVElGbzVHcEVHSlpkZzdPeFU2ckJlcHpoc1R0VHBiQmU3?= =?utf-8?B?Y2hWVWVFVTRiMmhwWGhOS2FzdStCQlhhTVFDY1V4bG8xRHFTTUNycXdBRlpa?= =?utf-8?B?MXpPOW5SMVhZWSsxcHNoaTY1b3lpRVdROHJCY1JtUllybGhLTEE5MUxybnFj?= =?utf-8?B?Z3dBT1B1Q1lnN3JEc1h3M0ZLWW9yK3MyUHdHVVlWWVNxaXVXZ2ppMVJEQkxu?= =?utf-8?B?cngxaFVodWt4MGpVdTdJaWltYXNCU1EwYkNpOTdXbzg5Q0duOVk5aENVR0VN?= =?utf-8?B?T01tREc0TzN5OXVOUFJMYnZJaWRtSDZsTElNWCtnYVVoTUd2cDBhMUE5UUtq?= =?utf-8?B?TVBJTi9HTjdHTVo5RHNOZmROd2VWU1BLYjZoNzFlS0lMam05bXluN2J3WTkz?= =?utf-8?B?RlJqZ084dlQyeFo5L1l1dGZySW9ETUFxMXNyNndMR2FrTWJjeXdlT3Yyd0FI?= =?utf-8?B?cnBOVllvUFQrNEtLK1BpMzJmU3VRMVM3eWNpb3llUDR4cmRQOVFEUnVvU3cv?= =?utf-8?B?eWVGM0FmSGl6VnZoTGNyUW1nSXk1SWxMeTlRMmEyc0RaNHZBR05JbU9vR2cz?= =?utf-8?B?WVpsR2ZQOC9nY3YvZkc0Y0RIMDluU0V5VEh4eEl3K1FJTHdub3NZUHZaRUlt?= =?utf-8?B?S3RlTCtTeVFvZys1WVRBUzVDNE1SWHpGLy9uNTdQb2dnd0EwSGxYN2k4b0sz?= =?utf-8?B?eGhQZDdHcWhtS3hUVkhpTnZ1dTNOdzNBanF5enFLaXMxVDNpeUx4cDcxbDln?= =?utf-8?B?Tis4NlByL2ZlendVNmFpMVNlUFd3ZlZjajVhcmlJVjlxMnFjUmZMVlAzaExM?= =?utf-8?B?cE0zaG5OTUQwLzNjN2lTZmx6YTNNVUZIWnBIeEw5MngwMUZEVWlrSWV0cGNw?= =?utf-8?B?Z3h1bjBsbFFlWXl4ckg5aUhQK2lVL3lsb2FlU21pTTBRbHdWSThHYTc0STB3?= =?utf-8?B?TUxMclZWTHRvVEIyTXV5M1NDb0d1dWZ3YkxmTXBCVis2YU95c2xJOW1DNTBm?= =?utf-8?B?WXpaTTJiKzhrb1lnODJlbUt3Wkswc0huaTRxZUVPWExNa2F4UjQ3OTZ2dFJG?= =?utf-8?B?bTZHNjI1ODRJMFdXNUltNFpET2JLTHNzRTBza3YyZFBoWkttUDRIVVp0VnAr?= =?utf-8?B?OXJOMHFUejl5ZFdJblpmSTM4bERjZ0ROR0o0cXhnRDNpTlFPUmZ2VnhCNTFz?= =?utf-8?B?czltQWdmL24zOHl1S0dyTmpzZVVyZE8rejd2SXRXSmxGemJZb2djVzVoaGpw?= =?utf-8?B?LzJEL3laYmE3dkliV1hjV2NKdDBkSk1kcjBKMEQwTVpCaGlRYlZSSEtIOXYw?= =?utf-8?Q?DycZsVqnt4PvxBvn28wPcJ0=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)(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?RmlibGhRN0NEZ3VCRjZvZmpPSzhSbExZR0xwSWZ6bTFJbFIreEZYZnJyZm10?= =?utf-8?B?TjFBWEEzL2JFWHpGck1FcVJ5MU4zWnFNUENsanoxWTEraTF1bTBBKzF4ZWVw?= =?utf-8?B?VnhkQU91STgrRnRwUExmeTdHQ0tGZVREbnY5YUVJSzZkcHBmSWhHV0tkNXd2?= =?utf-8?B?cUl6eUd4Uk85cW8yNWJoY1BkenlhcWsvMEYvZFEzL203NVE4Q0lqajRmVFAz?= =?utf-8?B?WmQvR2pob3NvaHBSZnlBcXozNzNudDUwOGdVdTB1NEdlUnUwZ2lvZmdwdXYy?= =?utf-8?B?OHdjbmQybkpDeDlsSXNhclVscFc3RDlrdDgvck51cTYwZXpyMkhlVjdDSk05?= =?utf-8?B?QXJ1U25nWWFudFBVWXpscXBFTGJJVnU1V09aWUdQNkVFcDRvQnBTcitkWnNm?= =?utf-8?B?M3Z1dVNpTE1TMjE2SExKU3dUMlZ1UU4zWjFvTWZpK1dER2RrNzd4R2dKL2pX?= =?utf-8?B?VXNDNDFZQnVJellaUjgyOGdqRmtHUDdpWEs3a29uOS9Rb2djRHdaMTVNbk51?= =?utf-8?B?blZ2cjA3eVplNlcyRUhnNG9hd092YVJDb0NzUzh5eXg3dTVnbzNDaDQ1QkVr?= =?utf-8?B?SytSVzdUOU5NMmRGRVlKdlNnUnB2S2d4ZisxTDBRYldlR3ZlRENvWjhNWjFS?= =?utf-8?B?OTZaeTUwTDBTc3VwTEhRUjJIc3FTdU40dGNnUklGekFDbU1MWGRLMTc5ZDdY?= =?utf-8?B?dmVxWkJyNEhjQUtMMk4zSlkzdUNPUStmY0JhN2V0Y3BOcFNHa0lQRHJWazlD?= =?utf-8?B?NWtBUDBVdmpudnJqYkZ3cGtaOFdzRjBTZzkrSTFOWTB0TWZwUVNSNlE3LzNU?= =?utf-8?B?VHhoVlNLQm5aWHg4RC8wUTRMTTlLaFp0TFhQM1FGYWRMZVAyQm5FajN6azZ0?= =?utf-8?B?bDVVRDI0Y3J3d3V0QTJ5NDh2NlZIL2dwb0Y5UC9rRGxORFMwNS9oRHpOTHor?= =?utf-8?B?bytMMUM1dzdTak16eVFtb0ZiSElkNUt5RjBaT1pIS2hJSS9WemhkVyt4eTEy?= =?utf-8?B?REJaOTFCdkRMZ0wvQU13cEt3bXpvSm90TThsMXNFNTdaWnJ4eFkwdUFhdDVS?= =?utf-8?B?eTZIMmRHNlZwdXlvYVR6SWlZQnJFZ3VtRm5JK1dnbWNSU2oxNmszdXNFZ1Zk?= =?utf-8?B?ZG5RRnlaSThxQmpTZ1doaURyd0hsNG12c3ZEWmltcjd0R1lQUVJTbkhMaDE3?= =?utf-8?B?T2hZYjczYXdIS3dlblgwcjQ2cUM2dkhJT3J5TUxTOERqdkZPS3QvNEkvSWhq?= =?utf-8?B?MHpQaVBXT0FlRXhTcTA3cFJSVG1KV1BvUngwMWp0azVxZ3lieVVZbWcyVnZ6?= =?utf-8?B?S2JnQU1tMmZObU9qQU9kUTVkaWE1WkJ3d3d4T291WEZndXFhR2xTSG5PWkZN?= =?utf-8?B?VFo0Q05CbDZqNGovdzJuYm5iRmY5Q09yZ1ZxT1k0UXFZb3dESlRWZmY1Z2pw?= =?utf-8?B?TStiR2t3cG81SEwzbU85Z0NpTE9FTm16elJJUGx3eWk4STBMM1FtVjRZYTVR?= =?utf-8?B?N1FUYlZtb29xRVBpa09MRG1pSG11cVI0V1B4VnVxS0ZXWGVxd0JCOFRQN2xG?= =?utf-8?B?Vm50ZEZVR3pab0xDZUVwWVNkdWNkNXE0VSt4SjJHTlo0UEtwakZTblNSZEc5?= =?utf-8?B?ZlNFTUdaaVhMeENveWF5Rnp1cjVldE5BQjB3eFBsU0w0R3pRYWdCMkF6M1BZ?= =?utf-8?B?cENsTC9YWWg4U1Y4T2Zpazl6Y1FNUlZQNGkyQ1pjZHpBYmFaRXRISy80V1dZ?= =?utf-8?B?RHZZUFhhU2ZZWlFmUVdrZ0k3Q3J2TXFFODhwTWZ3eVhybGhHZ3ZKU0JRQVNQ?= =?utf-8?B?N1ZudERaWnZmVEhNeTEwb2dnLzZDcUx2WHNpK3h0a3VpVVZGWTZValJINk9a?= =?utf-8?B?T3lNYWs4ZEhtUnRhTXlBU0djbmlUblZpczBjTUt0YmRPRTNzbWFZT0d4L3Aw?= =?utf-8?B?MVVBait4OXh4NlB4RzZZYnQxVHE1Z2tGcVVFSDBnaUJtL2Jwd1ZNZUVONHVU?= =?utf-8?B?djBnN0hzbkxyazFaa2NML1RWQUJuYVZYdEROZS85dFlrd3FIeG1ZbDlmZ3lB?= =?utf-8?B?UXpsL2lyTWNpZUhoZTBOMWJEZ0JzSndoK3lsbzJIRnJYNFNhVFh4Y29XTVpR?= =?utf-8?B?Q2l5WnV5K2cvVFBUYXkwY3NSdENVVmFqcExoODNrT0VUc1Z3Z0RTdTNiQVZC?= =?utf-8?B?SlFYdThMdUhJQWpLMzlzejlyQU5YSFNESkphcldmK2s3QTZWYkpMcm5zbzlQ?= =?utf-8?B?MlFtQ0czM2lGdGpQa045eGI5SElEWHFMalBTRVNnQUNrN0lpRUVMQWZVa25j?= =?utf-8?B?bCtzQkFtZXlHNTlTbGYwQXpDNTk4SzliSHVIRmg4c0UyaCsxTWlWdz09?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 59468919-dbaf-41aa-46f4-08de544eef14 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:33.1150 (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: lo3vLNhspIGwoa4W7vwYwdpX9DeWI6Rh+Koinu7lh4hsbFWFpJZitvmB3kFMesYBOGqYGV3R5fCZhZRDupaX4Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR11MB8811 X-Proofpoint-GUID: qWPXatxaSCtsH7SvEWFlCAIzNM_3dJ4- X-Authority-Analysis: v=2.4 cv=M6BA6iws c=1 sm=1 tr=0 ts=69690eac cx=c_pps a=+Bba5nuaRI/XgWxKvljhhQ==: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=iqUPcmWXN_vvxTOgPeMA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE1MDEyMSBTYWx0ZWRfX3bCpJsOPjA4w 8NRugQceLrkqHClYT3RyAraQhUpMiv3QXjCGpDTCHq0r5jLQwwgEAL+85Qwl6fx1s3iBxqqKxbC w+nKZSnfhTG7UTa54+qXX/iKL20+yYVOYMekC2Exriw3EIRu+g0gRb8igLShOujVDaqItaxmTAW kPIfgYYfNULQZTLwwnRqhap5NrTtoVwIbO/5QdQw4JMZRIiELg0D8tneKqRiR41qovlWvGdernk hSDoybJrfIWgmw3Qa8Ykt2T83m9CIxTBZzdjF73tNkWDBdPPMyDwrz+2ZqYmEtHXLd0ooyfrkuV KYsIBukN7+ZEus/mh9vcuD51IFZ9/7RCvazgluwZWjc/u7Jerygzyw3QuWMJcGV8MYmsoyrPvfo Y4CxxjKIE31wlsy9nl22wvGMBoze6+W2uNweQODrv43YWBEr5hFBmiOiIo2AXV32TN9FnDlb3me Wmxz97TlOhEAfzMC8Fg== X-Proofpoint-ORIG-GUID: qWPXatxaSCtsH7SvEWFlCAIzNM_3dJ4- 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 A number of CPC features, like retransmission or remote's receive window, are cport-based. In order to prepare for these features, introduce a CPC CPort context structure. The CPC Host Device module now implements cport_allocate and cport_release callbacks in order to allocate and release these structures when requested by Greybus module. Signed-off-by: Damien Ri=C3=A9gel Reviewed-by: J=C3=A9r=C3=B4me Pouiller --- drivers/greybus/cpc/Makefile | 2 +- drivers/greybus/cpc/cpc.h | 29 ++++++++++ drivers/greybus/cpc/cport.c | 37 ++++++++++++ drivers/greybus/cpc/host.c | 109 ++++++++++++++++++++++++++++++++++- drivers/greybus/cpc/host.h | 12 ++++ 5 files changed, 187 insertions(+), 2 deletions(-) create mode 100644 drivers/greybus/cpc/cpc.h create mode 100644 drivers/greybus/cpc/cport.c diff --git a/drivers/greybus/cpc/Makefile b/drivers/greybus/cpc/Makefile index 490982a0ff5..3d50f8c5473 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 host.o +gb-cpc-y :=3D cport.o host.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 new file mode 100644 index 00000000000..3915a7fbc4f --- /dev/null +++ b/drivers/greybus/cpc/cpc.h @@ -0,0 +1,29 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (c) 2025, Silicon Laboratories, Inc. + */ + +#ifndef __CPC_H +#define __CPC_H + +#include +#include +#include + +/** + * struct cpc_cport - CPC cport + * @id: cport ID + * @cpc_hd: pointer to the CPC host device this cport belongs to + */ +struct cpc_cport { + u16 id; + + struct cpc_host_device *cpc_hd; +}; + +struct cpc_cport *cpc_cport_alloc(u16 cport_id, gfp_t gfp_mask); +void cpc_cport_release(struct cpc_cport *cport); + +int cpc_cport_message_send(struct cpc_cport *cport, struct gb_message *mes= sage, gfp_t gfp_mask); + +#endif diff --git a/drivers/greybus/cpc/cport.c b/drivers/greybus/cpc/cport.c new file mode 100644 index 00000000000..88bdb2f8182 --- /dev/null +++ b/drivers/greybus/cpc/cport.c @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2025, Silicon Laboratories, Inc. + */ + +#include "cpc.h" +#include "host.h" + +/** + * cpc_cport_alloc() - Allocate and initialize CPC cport. + * @cport_id: cport ID. + * @gfp_mask: GFP mask for allocation. + * + * Return: Pointer to allocated and initialized cpc_cport, or NULL on fail= ure. + */ +struct cpc_cport *cpc_cport_alloc(u16 cport_id, gfp_t gfp_mask) +{ + struct cpc_cport *cport; + + cport =3D kzalloc(sizeof(*cport), gfp_mask); + if (!cport) + return NULL; + + cport->id =3D cport_id; + + return cport; +} + +void cpc_cport_release(struct cpc_cport *cport) +{ + kfree(cport); +} + +int cpc_cport_message_send(struct cpc_cport *cport, struct gb_message *mes= sage, gfp_t gfp_mask) +{ + return cport->cpc_hd->driver->message_send(cport->cpc_hd, cport->id, mess= age, gfp_mask); +} diff --git a/drivers/greybus/cpc/host.c b/drivers/greybus/cpc/host.c index 80516517ff6..98566ce7755 100644 --- a/drivers/greybus/cpc/host.c +++ b/drivers/greybus/cpc/host.c @@ -7,6 +7,7 @@ #include #include =20 +#include "cpc.h" #include "host.h" =20 static struct cpc_host_device *gb_hd_to_cpc_hd(struct gb_host_device *hd) @@ -14,12 +15,95 @@ static struct cpc_host_device *gb_hd_to_cpc_hd(struct g= b_host_device *hd) return (struct cpc_host_device *)&hd->hd_priv; } =20 +static struct cpc_cport *cpc_hd_get_cport(struct cpc_host_device *cpc_hd, = u16 cport_id) +{ + struct cpc_cport *cport; + + mutex_lock(&cpc_hd->lock); + for (int i =3D 0; i < ARRAY_SIZE(cpc_hd->cports); i++) { + cport =3D cpc_hd->cports[i]; + if (cport && cport->id =3D=3D cport_id) + goto unlock; + } + + cport =3D NULL; + +unlock: + mutex_unlock(&cpc_hd->lock); + + return cport; +} + +static int cpc_hd_message_send(struct cpc_host_device *cpc_hd, u16 cport_i= d, + struct gb_message *message, gfp_t gfp_mask) +{ + struct cpc_cport *cport; + + cport =3D cpc_hd_get_cport(cpc_hd, cport_id); + if (!cport) { + dev_err(cpc_hd_dev(cpc_hd), "message_send: cport %u not found\n", cport_= id); + return -EINVAL; + } + + return cpc_cport_message_send(cport, message, gfp_mask); +} + +static int cpc_hd_cport_allocate(struct cpc_host_device *cpc_hd, int cport= _id, unsigned long flags) +{ + struct cpc_cport *cport; + int ret; + + mutex_lock(&cpc_hd->lock); + for (int i =3D 0; i < ARRAY_SIZE(cpc_hd->cports); i++) { + if (cpc_hd->cports[i] !=3D NULL) + continue; + + if (cport_id < 0) + cport_id =3D i; + + cport =3D cpc_cport_alloc(cport_id, GFP_KERNEL); + if (!cport) { + ret =3D -ENOMEM; + goto unlock; + } + + cport->cpc_hd =3D cpc_hd; + + cpc_hd->cports[i] =3D cport; + ret =3D cport_id; + goto unlock; + } + + ret =3D -ENOSPC; +unlock: + mutex_unlock(&cpc_hd->lock); + + return ret; +} + +static void cpc_hd_cport_release(struct cpc_host_device *cpc_hd, u16 cport= _id) +{ + struct cpc_cport *cport; + + mutex_lock(&cpc_hd->lock); + for (int i =3D 0; i < ARRAY_SIZE(cpc_hd->cports); i++) { + cport =3D cpc_hd->cports[i]; + + if (cport && cport->id =3D=3D cport_id) { + cpc_cport_release(cport); + cpc_hd->cports[i] =3D NULL; + break; + } + } + mutex_unlock(&cpc_hd->lock); +} + static int cpc_gb_message_send(struct gb_host_device *gb_hd, u16 cport_id, struct gb_message *message, gfp_t gfp_mask) { struct cpc_host_device *cpc_hd =3D gb_hd_to_cpc_hd(gb_hd); =20 - return cpc_hd->driver->message_send(cpc_hd, cport_id, message, gfp_mask); + return cpc_hd_message_send(cpc_hd, cport_id, message, gfp_mask); } =20 static void cpc_gb_message_cancel(struct gb_message *message) @@ -27,12 +111,33 @@ static void cpc_gb_message_cancel(struct gb_message *m= essage) /* Not implemented */ } =20 +static int cpc_gb_cport_allocate(struct gb_host_device *gb_hd, int cport_i= d, unsigned long flags) +{ + struct cpc_host_device *cpc_hd =3D gb_hd_to_cpc_hd(gb_hd); + + return cpc_hd_cport_allocate(cpc_hd, cport_id, flags); +} + +static void cpc_gb_cport_release(struct gb_host_device *gb_hd, u16 cport_i= d) +{ + struct cpc_host_device *cpc_hd =3D gb_hd_to_cpc_hd(gb_hd); + + return cpc_hd_cport_release(cpc_hd, cport_id); +} + static struct gb_hd_driver cpc_gb_driver =3D { .hd_priv_size =3D sizeof(struct cpc_host_device), .message_send =3D cpc_gb_message_send, .message_cancel =3D cpc_gb_message_cancel, + .cport_allocate =3D cpc_gb_cport_allocate, + .cport_release =3D cpc_gb_cport_release, }; =20 +static void cpc_hd_init(struct cpc_host_device *cpc_hd) +{ + mutex_init(&cpc_hd->lock); +} + struct cpc_host_device *cpc_hd_create(struct cpc_hd_driver *driver, struct= device *parent) { struct cpc_host_device *cpc_hd; @@ -51,6 +156,8 @@ struct cpc_host_device *cpc_hd_create(struct cpc_hd_driv= er *driver, struct devic cpc_hd->gb_hd =3D hd; cpc_hd->driver =3D driver; =20 + cpc_hd_init(cpc_hd); + return cpc_hd; } EXPORT_SYMBOL_GPL(cpc_hd_create); diff --git a/drivers/greybus/cpc/host.h b/drivers/greybus/cpc/host.h index f55feb303f4..c3f2f56a939 100644 --- a/drivers/greybus/cpc/host.h +++ b/drivers/greybus/cpc/host.h @@ -8,11 +8,13 @@ =20 #include #include +#include #include =20 #define GB_CPC_MSG_SIZE_MAX 4096 #define GB_CPC_NUM_CPORTS 8 =20 +struct cpc_cport; struct cpc_host_device; =20 struct cpc_hd_driver { @@ -25,12 +27,22 @@ struct cpc_hd_driver { * struct cpc_host_device - CPC host device. * @gb_hd: pointer to Greybus Host Device this device belongs to. * @driver: driver operations. + * @lock: mutex to synchronize access to cport array. + * @cports: array of cport pointers allocated by Greybus core. */ struct cpc_host_device { struct gb_host_device *gb_hd; const struct cpc_hd_driver *driver; + + struct mutex lock; /* Synchronize access to cports */ + struct cpc_cport *cports[GB_CPC_NUM_CPORTS]; }; =20 +static inline struct device *cpc_hd_dev(struct cpc_host_device *cpc_hd) +{ + return &cpc_hd->gb_hd->dev; +} + struct cpc_host_device *cpc_hd_create(struct cpc_hd_driver *driver, struct= device *parent); int cpc_hd_add(struct cpc_host_device *cpc_hd); void cpc_hd_put(struct cpc_host_device *cpc_hd); --=20 2.52.0 From nobody Sat Feb 7 07:10:30 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 035C23B8D56 for ; Thu, 15 Jan 2026 16:07:23 +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=1768493247; cv=fail; b=CtGTyP1I9Ed9nKea9IskiRPEaQQXDyNcq+QKF5+i+htraXCYdeiEHEieAtC4V6nG2nRSYtFSAZe+A9IunT1OEVQP9Mi//XYz7CUyROCbi40lh+981CMFaB2WdMt0Vxkq4nCL3WUgl41npcJCxx+tiudR5ADJjwAmWBa0cCVLCXw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768493247; c=relaxed/simple; bh=U9qrqyXJodRQWsR/dGUZMoJoVqjP4zz3p+/UIwBYf4s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=kOjjB+s+UTnlQ8sBP66F7SggncNFfOKjxTALwJJDleA1KKaIudOmVGzgzzey5S6RyBg8Z9sjpXej7W9GnagnJkHbtVp6M3NtDqoO+s64GP0MrJJKd7PmYWUoWHUCgR0ZGOi8vbu9zvCYMbhZUg6ervQbHTBXd/GIqKfNJAvEtng= 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=C2xHk8Fb; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=LFwYb6NS; 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="C2xHk8Fb"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="LFwYb6NS" 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 60FFlYMt459372; Thu, 15 Jan 2026 09:58:37 -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=71upq2QYWAgfoSvhqwk+YTjDWSiFCFSS4hYMQNHQw2U=; b=C2xHk8FbyvIm FizaDyM34cVYPtkhAHWUGFWcbbkDuvRVEaelvzUDDbwNrx1TqjcQzTsU9+MeBd78 D+e/vTH9WtHCHvuPtv7Qjh4IxfAhh+mZVW82VKBmZKOOv/hDd6OtYDkZ2D7kdtdl zRGTPCno8zeVQHbX4eHuktvz2blEYCq/T8Y70IUPfhexwUhl5cpMp0xO1OMMvThK Dkv+Lfkl9Grxm4raNsToR5HpC2BBeh1bEoCuPEU/GECy8snN63gtWj5DoRerEAvx Myfh0mTxeNBAp1zsSTZYwNiaCP9jBodBexjzC31Obgui+hHcAiPriGMQUAavIA/r GeHSOuuCvA== Received: from bl2pr02cu003.outbound.protection.outlook.com (mail-eastusazon11021127.outbound.protection.outlook.com [52.101.52.127]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4bq36kr0ut-4 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 15 Jan 2026 09:58:36 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=f6dcihYBeMWMD/5LdptkOXCg+OdvdSsxLJCahNMopRFUmX4ByJTKENn29dNc8hA2af6RfJ3uaErah1ugXETU1pz0JCBhHsS8YhkKUG/OL1gTolh6eRSka0otFsROxz5y0Qn2ZwD9KEmA8D2/LOUUdOrcTabdcFj061SaJf6CAHvF4mslnlykSDTvq23x7E09QrHELd64uZtXiFXVxGnfaGEMg0Rs3oCxOqPT3cR+cz1SEwxtFJw9xAfcMq8RMlFaWL+iTwDexN3w3Ifbka292aFcA+fQ57Y+TP1lKLRCZbYDsLed1f1/84Vlqw4zsPDOx1UuGbMCZvJYevRJUiOPAQ== 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=71upq2QYWAgfoSvhqwk+YTjDWSiFCFSS4hYMQNHQw2U=; b=ZC5XFfK03CFZa+uK2IX3tD/tkryxWGRCp/j/sH0OyMTtx8xj9XABYSzYRBBsEo8WaDR+ff1gcECf6GFyEJ1tOqhDdTb376Bl1dpcEbjbtbT3Y2iB3bYPA1S/Qv0cL7k479JprIF0MZSMMTt0ZlVBzVPotkpo286MkQmoTJIHHwfiVMSBa4biYgc8adgaZXMCMUOvoJdEAw2lj7LuoZ6hMjIJrMybsm5k/NAM00xMHEmGSgLvEltO4SUVbllnMbZ8cZwFNds/CdBbmPktf5FCwjKDTVcEkhHn/yqkAzBW/zw9ZnJ2+M0Q25eiB/DR31m+iGJ+AG+hyU105NXmct3obw== 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=71upq2QYWAgfoSvhqwk+YTjDWSiFCFSS4hYMQNHQw2U=; b=LFwYb6NSpEJxWCtfHEI8kE8eXFccDhMZ8K8UHp1iHA4ao6Yz/DQbeAVz9dT6vxcKpPuaJrAOtaKHYkD4u9Qn6CyYX6jOF1mRfOPcGFQPJQmijzg2U/XRuT8dQisnBmIBT9XaWJrSynCMT3DRQqU++PYplpypnh8Qk7dVDsZRc7U= Received: from DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) by SA1PR11MB8811.namprd11.prod.outlook.com (2603:10b6:806:467::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.5; Thu, 15 Jan 2026 15:58:34 +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:34 +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 03/14] greybus: cpc: use socket buffers instead of gb_message in TX path Date: Thu, 15 Jan 2026 10:57:56 -0500 Message-ID: <20260115155808.36102-4-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_|SA1PR11MB8811:EE_ X-MS-Office365-Filtering-Correlation-Id: b3535f02-1300-4e3a-4cc4-08de544eefa1 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?MUF6MFNEY1o2OWY1T2x6NkNJNkpWamhHYUpid0grYkdScThURnlFTEVHSDh1?= =?utf-8?B?elpJZHFpWnJqMG00K2dYcGVScWdpV0VSOW1ERkxrQit5V2VMdGNHRWZqRnpk?= =?utf-8?B?VXl0a3NtbmpZS1h1NDYzVng5azR4WUd0a0hCSzlSL2pBWTBDejJtOXJ2QWtD?= =?utf-8?B?TzY3eEphbVMvcHRXYXFFdE1nREY1VHhOMUFudm1rSFN1T2R3RmdMOUZUREE3?= =?utf-8?B?NExkQ0ZzL3EwQnhObW1wa3k3MXdLb0NZelpHNDhSWEduVWVndVd1dDRaN2dP?= =?utf-8?B?SjF5RWZvWkxlVG5IdUdOclZka3ZMWmJnNW03UzAwQ3Q5bDN2Yk1tNnNFcGdJ?= =?utf-8?B?WU1lK3JjMG91ZGF2SmFPSisxWVEvNGtJc092V2Q5czlHOXBqY1BvYk5pelJy?= =?utf-8?B?NUc4QzA5Um9DS0ZPcFBTVDZHTWg1NlNCckp6b0NzU01tcEtYZDZ5eElYT29Q?= =?utf-8?B?d0tVVVNoZWc0OFZqY1hMdm5YUTgzZW0vYTdlT2dlNlRDY0tEeGM5TDNPZHdL?= =?utf-8?B?bklaM05vY0hLQ3c5RVd5ZDZ3bHRnbXl0YkR2MWtiY1gxTFN1R210N0pKTmpj?= =?utf-8?B?QU83YXovQjd0dmUxekFIdHAyaU15b3ZUVDRGem4xTEg5VS8xZkxyZ21LUkhV?= =?utf-8?B?MFV2cU4zWDNIS3pxaGVxRE82VVBLUG5wbEFyUktvRkEwUlJqZ3hQRm5aNW5P?= =?utf-8?B?TDBadyttZnhHMC81d0paQnFPRWNGdmlqZzVqTlZIbzhyQ3dsOGc3QmJDMXRB?= =?utf-8?B?T1hUeUQ2V1ZBekNOYWkvWEs5eGMxbjFLZGlUR0ZvRjEwZ2pQck5SUzlPSkFZ?= =?utf-8?B?clRjdFJFMEZYekFnMGNIa2IzK2NUbi9taGxLUnhBclEza3Y2RThvbERwRTBh?= =?utf-8?B?ZStxR2tvcW9GUlBLYVVWTGZXNnBBc2w0aGl5S1pud1dnT3ZOaTkxMzdORXo1?= =?utf-8?B?eks5M0o3bHhqdGYyZnFWaVUrMGxSUHBFVjIzOE90RERMa0hxUkhhOU8va05x?= =?utf-8?B?OUdibHMyL0I4KzJkTVpabWcrUU1tWno4QVpkM1MwVno2ZWkzK0l4QjZuY0Rx?= =?utf-8?B?YlNtSjc0TFlRczUwaTJib3NlV3hteTJmQitmcVdYS0VTT3hscUlMWDlZV05j?= =?utf-8?B?Y2RXYjFhZlkvaEZ1Z2RMOTJCMzkzL0VuZENkYWJ2VThob1F4NGF1TndXYWVQ?= =?utf-8?B?bnRrdW5aczBnT2ZXQ0xBL2dmb3RlTmtYWGcweDJMMVJOdFRUQi9nS3A4Z1lh?= =?utf-8?B?bGt5OHNtQ1RPSGxzOHNKaGFCZU9qdW1QNnpPdUI1cHc2elIxb1JxSzR2aWN1?= =?utf-8?B?S0VBdlZFM0wvbFpRK1R3dTdVUC93L0JEK3YrTm0wM2FYM3hmQXgxenNaQjlz?= =?utf-8?B?ZnJXODMvbDRyM0RXSzVqRUFkaG5xMkZrdzVJZkMyYTVXQ3hWeUpFc011Z1hT?= =?utf-8?B?UnBRQkUxblNacUxzL3BZNkczcmt4Vk4zVm1sd0tkeFhXOHpid3RnTTJGWU5o?= =?utf-8?B?UFRCaFFaUnN3LzgveThwTGZnM0hQYk9XSXczTm56eWxwOWlsLzJFQmlRRUp5?= =?utf-8?B?NktjalZqY1BCSDAya3hHNTVPVCtHU3FpUWM0RkltMEhIMGpuM3dTcEJwdlBX?= =?utf-8?B?QldzVHo2N1Vpb2NoWVBWYkIyWGRud1lGSXBvcEVpT1J3WHY3aWczcThJWUl2?= =?utf-8?B?RzA1QVNoZUEyYmlOVDgrTGI4TWtZRHJ6WVVPWU85R0hQWm5hdVV4dWt3QXE2?= =?utf-8?B?KzMrOTJvMnZBK2c4MTZ0SGNVamtHNjNyYmJIaUxyRFQ3NG5wNm4rR3lqZGRB?= =?utf-8?B?RmtCOE16L3M1bTd4UUE3bkl0VFVEY0Vpa1VLUTNLU1Bmcmx3cEc1WWFuR0VL?= =?utf-8?B?emZLK250azFOVjNnaXlxVzFEMjFSdnhTdElUWmQrcHdqajhXY254K29RUW9q?= =?utf-8?B?U3lnZEk2TW5UVW9IRGZidVdxYnZPK3k2a0lkMStWd0UxdUpWeEpGcXNTWWNi?= =?utf-8?B?WlZGSGRyTkdjOVptRG90OFhzbFdXUE5kdHB6SnJqSlZSckFkMDE3cTBTbEZ6?= =?utf-8?B?SHYwWllpaWJRODNJRWo0R1VFU3kzQVc4YXhwV3lhTW5YTWFvRmZqTGxaVXA5?= =?utf-8?B?bWp1b3pQejRvSFQ0eWFqbmRJZmpZK3diNHJjUkxEWHBjSm1vUFdSYzZvbkwz?= =?utf-8?Q?x+HvbTLOJuSAekoQDmJ6aQA=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)(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?L3hNcmkxdTZSU3I1OTlZd3hBcXVHaEtaQkk4alZ4UkROM2UzNnZsYnp5S2NI?= =?utf-8?B?V3hZTTVJRGZQcU4xMXE3MFdvT2llajV1NERpOC9hY1pyVTBYeENRVS9zU0Ji?= =?utf-8?B?OEV5M0Z0RzE1WEloU3k4NXg2MkRmRmZPWjRiOHM3UHJTVCt5QWd5TCtScmdz?= =?utf-8?B?TzdJaHhQOGxkdFBoMTdXZFFTTXlmcDZhZXdXZlFJeWl5L2NoMmJGUE5VdmY4?= =?utf-8?B?N0VLYkNtcXlLZyttMHp5ZmV3UytoV2hLTUdmSFZaRm1yUWNsVVl6b003djZL?= =?utf-8?B?L09XWDFlYzIxSkdrcmRvNEdrNCszUlFUWjBXeG9LVkV0QUE3dU9QM0M1dGRP?= =?utf-8?B?MXRxWHl0MUpqK3h2NTVtQ1VtdDh0emFRaTlVb1BZeFZEK3NUamVBa2VqbDlO?= =?utf-8?B?OVNFRGJ2VUUvRlBvWWtzTkNuRENIQUw0OUsrRmMxSVRrU0FQZys2WU9iYndP?= =?utf-8?B?ZDlVY0N4VXVoSGVUWTNmTXBKRU41N2hURDk1VHpoT0s0T0hHdXVFYm5EcUpL?= =?utf-8?B?MlZyTFVzaCt4OStBMURCNkxBb0kvWmIxeFBUWWR6aEdMbVo1RXFrUFp5Mzls?= =?utf-8?B?OXlhTXhCUmJEclNOR1dnWVdaYmwrc0tiUldPRU5Vb0kwVVkwbGNHQktQR0Ir?= =?utf-8?B?YzAvQnM5SnpUTS9YTjFpSi9ueDliTGZqNWNiVWtoUXNIWEZjZjBWRTVMUVRI?= =?utf-8?B?Y1JYRkhpaDkrSlRUZDlRcDd1ZlRiRWYzSVBzbjFLYjlNRFQrcWMyMUNUdElv?= =?utf-8?B?NTA3bERBdGpySVBWY2tsOWVPNjZCdE9pd1htcU9GL0lrM29IUWFDcXEzWkJX?= =?utf-8?B?aWQxNmdocGY4YTVDOW5haXJ3ZjBvRjg2L3Y1REs0Nm0vS0RTZ0dRR0pFdld2?= =?utf-8?B?N3ladkdwbUhObXNmUGk5SXZrRzVvWHRvaUhNc2JkNndvS1lBc3ZsVWxEdlk4?= =?utf-8?B?aUFrRW12VGlLZFpBdkl6aklvV1pFeWlPdzIxS2FvdnVDU0o2Y1JEeEdtNWgx?= =?utf-8?B?WHdqaUlYMWtCMEtjMjFkNUcyYXFJY2Y1aHM2UnlRb01NeXFVM21lSWgxVE9J?= =?utf-8?B?dTFFK2h3dG55RjJFbS81NTlrSDZqSFRETEZLR0swK2ZSSHB1TnZic21zdk1T?= =?utf-8?B?QTV0dWhQNlo4ZzhsMDdnek1DQ0VyNnlRelowaEFiVmswa1FxT29hcVdCTEYy?= =?utf-8?B?bDhxV1VPY0ZtWEhVa0c2cVRNbkhmSnZxYnZvVHVkZUJlK2dzb2s0RDBmZ3kv?= =?utf-8?B?cXBWTHdOSVZ0R0tiRlNQQk55aHdIcEVzQnk3WHVYNGoyalhKcWIxRXkrZnc5?= =?utf-8?B?SGhDQWNPMEJBSS82WnRLYkYzRlB3VHZRMmc3V2k1d0E3VHZIQ3psMzNVdVF5?= =?utf-8?B?V01XT2hDbzBzaHZ1bjVXaVVVa0FJOXdwYXFMWFgyTVdYcjdNMGpnckpUbG1C?= =?utf-8?B?eHVvZ0RjRTdUR0dMSFhQM1RUZXl1SGJHNUhmZjV4RWZXMVY0ellNaVpmd2RS?= =?utf-8?B?V2k3UXVodzBNMjFvYk5IZW10ZkZXK2pyZWc2cHRWakJuK0hlYWUwLytSYkV0?= =?utf-8?B?Qy9qRm1NMHZGOXBPd2RRWU10NGZiQmw3VCtoYld0VHlIQ1lNamxQYXlFV1RT?= =?utf-8?B?L2xaamlqZXZ0RDNncy9XdHFxWXFiVFQ1aFNvZjNBRjVLTGRPM2ZKZENMdDVB?= =?utf-8?B?RE1MVHZWUTJodE9IZWRWbnFtelVOT3RKTzUwclpBb0MvQ2dMNkIrcS8zN1pQ?= =?utf-8?B?VGRnbC8waHpYU3hjbU9TZ0R5ZGV5ZXJCdW02MCtSYlUxby8xM1kwQS8xQ2lJ?= =?utf-8?B?emh4dnBpOGJyMUtUa29INzhqN3ZxZXVCamFka09MQXJyY3drOHJ0SlhHMmNQ?= =?utf-8?B?UXZtTG9JWnhvZE9TRTVjMmNKRE1pUFNhK2F3ZExLVkJBS2RSNkkwNndNNzht?= =?utf-8?B?R2sxNU5ZRmFnbWRaZ2ZvZnBJVzg3WmFoMnUyWEVZYy9HbXFTSDJHNzZBS3o2?= =?utf-8?B?YmdIMzNnUjNpNUszR2pVMDUyV1g2N2p2UisxaThCYmpncHc1NVRxaHVGa1NR?= =?utf-8?B?ZVRENVM1Zjl3UEx0dUhqdW5sckN6Z2JoVndLS2p2djNaWGR1VTM5TXg5b3hp?= =?utf-8?B?OCtYRXhLRklFdEcwWEhYRkp3QVZNVUVmZ3JyT1hCajhyTWtabGx2R1d4d3dw?= =?utf-8?B?bEplYUNJRWk1Wk5uZEUzUVZ0Y3FDSWRkWk5xVjRjTmZ3RUl1VC9sT1JIY0M5?= =?utf-8?B?ZHBUaElyWTBMUHNPcE1XOEFSTVphSkJLZGtBdmtoZDdBYnNqc0Ywa1FVbmRr?= =?utf-8?B?bU5COVZsMW9GblFCVXM5a0RYQmJWM2F6MWtiRG11UlZUdzhFV1RGdz09?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: b3535f02-1300-4e3a-4cc4-08de544eefa1 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:33.9116 (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: 5Z50cYTs5QwsBR564MGXjbXn/oGeM8UQKPm/FaWrI0CIgDD+ScpoCPn3QofsT+pMp0/5/Gy9EEAE23CxlLysFA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR11MB8811 X-Proofpoint-GUID: 6qTsQJFI1zE-TW7KYEYqXCMz7-z_hS6S X-Authority-Analysis: v=2.4 cv=M6BA6iws c=1 sm=1 tr=0 ts=69690ead cx=c_pps a=+Bba5nuaRI/XgWxKvljhhQ==: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=UI2V7ICqOKO9W4d5kokA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE1MDEyMSBTYWx0ZWRfX6pOSS9wv5qT6 ZqwJeqbtRp9+FMbzTSDNSBkJkK1oSYmpAMd1QceR1vMRP3Ib8nCrh/kldCMOLhhWGTohqTqzAxI CdHi4+c9MHOgrNndw5E6N8FY/0K9YVA+CHVgR/XbeB6vfA+KI0ihsVGTMoREdRhV/yWQlvnDC0v 9iwyAlul5ooKkgAk1++25VJ5RuGkg9TDSO2YHqeU2snIeRA9Vq7t3mMkV+z56agZ10ViOsgupUI kSYi9IiM96DbVpk1PtBVS/BhvAdaIlxExz2KkZlmRTl10XTiKaiQ8GV8jeB7dJVa9C9mV/8dW4z TUZBPgk2uPOG2PyljxWTirvfuBp0gJRbaEI0FThHGhn3Jy4CU/6/Yz2EG3HVfVuz9tzUfidhGqF BVYQ4bGzpCZt+jSdAwBU8GLKmjnwSNJHurZQOv7FR/iK9d6ST5RV8ZlN8jtxl1UOg3F6OQgKWjn UbQU3JLHRCtGLXYjWgg== X-Proofpoint-ORIG-GUID: 6qTsQJFI1zE-TW7KYEYqXCMz7-z_hS6S 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 CPC comes with its own header, that is not yet implemented. Without skb, the CPC host device drivers have to get two pointers to get a full packet: one pointer to the CPC header and one pointer to the GB message. In order to make their implementations simpler, convert the GB message into an SKB. Signed-off-by: Damien Ri=C3=A9gel Reviewed-by: J=C3=A9r=C3=B4me Pouiller --- drivers/greybus/cpc/cpc.h | 11 +++++++++- drivers/greybus/cpc/cport.c | 11 ++++++++-- drivers/greybus/cpc/host.c | 41 ++++++++++++++++++++++++++++++++++--- drivers/greybus/cpc/host.h | 7 ++++--- 4 files changed, 61 insertions(+), 9 deletions(-) diff --git a/drivers/greybus/cpc/cpc.h b/drivers/greybus/cpc/cpc.h index 3915a7fbc4f..d9f8f60913a 100644 --- a/drivers/greybus/cpc/cpc.h +++ b/drivers/greybus/cpc/cpc.h @@ -24,6 +24,15 @@ struct cpc_cport { struct cpc_cport *cpc_cport_alloc(u16 cport_id, gfp_t gfp_mask); void cpc_cport_release(struct cpc_cport *cport); =20 -int cpc_cport_message_send(struct cpc_cport *cport, struct gb_message *mes= sage, gfp_t gfp_mask); +int cpc_cport_transmit(struct cpc_cport *cport, struct sk_buff *skb); + +struct cpc_skb_cb { + struct cpc_cport *cport; + + /* Keep track of the GB message the skb originates from */ + struct gb_message *gb_message; +}; + +#define CPC_SKB_CB(__skb) ((struct cpc_skb_cb *)&((__skb)->cb[0])) =20 #endif diff --git a/drivers/greybus/cpc/cport.c b/drivers/greybus/cpc/cport.c index 88bdb2f8182..ed0b8e8b0d7 100644 --- a/drivers/greybus/cpc/cport.c +++ b/drivers/greybus/cpc/cport.c @@ -31,7 +31,14 @@ void cpc_cport_release(struct cpc_cport *cport) kfree(cport); } =20 -int cpc_cport_message_send(struct cpc_cport *cport, struct gb_message *mes= sage, gfp_t gfp_mask) +/** + * cpc_cport_transmit() - Transmit skb over cport. + * @cport: cport. + * @skb: skb to be transmitted. + */ +int cpc_cport_transmit(struct cpc_cport *cport, struct sk_buff *skb) { - return cport->cpc_hd->driver->message_send(cport->cpc_hd, cport->id, mess= age, gfp_mask); + struct cpc_host_device *cpc_hd =3D cport->cpc_hd; + + return cpc_hd_send_skb(cpc_hd, skb); } diff --git a/drivers/greybus/cpc/host.c b/drivers/greybus/cpc/host.c index 98566ce7755..ee090dd3097 100644 --- a/drivers/greybus/cpc/host.c +++ b/drivers/greybus/cpc/host.c @@ -6,6 +6,7 @@ #include #include #include +#include =20 #include "cpc.h" #include "host.h" @@ -38,6 +39,8 @@ static int cpc_hd_message_send(struct cpc_host_device *cp= c_hd, u16 cport_id, struct gb_message *message, gfp_t gfp_mask) { struct cpc_cport *cport; + struct sk_buff *skb; + unsigned int size; =20 cport =3D cpc_hd_get_cport(cpc_hd, cport_id); if (!cport) { @@ -45,7 +48,18 @@ static int cpc_hd_message_send(struct cpc_host_device *c= pc_hd, u16 cport_id, return -EINVAL; } =20 - return cpc_cport_message_send(cport, message, gfp_mask); + size =3D sizeof(*message->header) + message->payload_size; + skb =3D alloc_skb(size, gfp_mask); + if (!skb) + return -ENOMEM; + + /* Header and payload are already contiguous in Greybus message */ + skb_put_data(skb, message->buffer, sizeof(*message->header) + message->pa= yload_size); + + CPC_SKB_CB(skb)->cport =3D cport; + CPC_SKB_CB(skb)->gb_message =3D message; + + return cpc_cport_transmit(cport, skb); } =20 static int cpc_hd_cport_allocate(struct cpc_host_device *cpc_hd, int cport= _id, unsigned long flags) @@ -143,8 +157,8 @@ struct cpc_host_device *cpc_hd_create(struct cpc_hd_dri= ver *driver, struct devic struct cpc_host_device *cpc_hd; struct gb_host_device *hd; =20 - if ((!driver->message_send) || (!driver->message_cancel)) { - dev_err(parent, "missing mandatory callbacks\n"); + if (!driver->transmit) { + dev_err(parent, "missing mandatory callback\n"); return ERR_PTR(-EINVAL); } =20 @@ -180,12 +194,33 @@ void cpc_hd_del(struct cpc_host_device *cpc_hd) } EXPORT_SYMBOL_GPL(cpc_hd_del); =20 +void cpc_hd_message_sent(struct sk_buff *skb, int status) +{ + struct cpc_host_device *cpc_hd =3D CPC_SKB_CB(skb)->cport->cpc_hd; + struct gb_host_device *hd =3D cpc_hd->gb_hd; + + greybus_message_sent(hd, CPC_SKB_CB(skb)->gb_message, status); +} +EXPORT_SYMBOL_GPL(cpc_hd_message_sent); + void cpc_hd_rcvd(struct cpc_host_device *cpc_hd, u16 cport_id, u8 *data, s= ize_t length) { greybus_data_rcvd(cpc_hd->gb_hd, cport_id, data, length); } EXPORT_SYMBOL_GPL(cpc_hd_rcvd); =20 +/** + * cpc_hd_send_skb() - Queue a socket buffer for transmission. + * @cpc_hd: Host device to send SKB over. + * @skb: SKB to send. + */ +int cpc_hd_send_skb(struct cpc_host_device *cpc_hd, struct sk_buff *skb) +{ + const struct cpc_hd_driver *drv =3D cpc_hd->driver; + + return drv->transmit(cpc_hd, skb); +} + MODULE_DESCRIPTION("Greybus over CPC"); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Silicon Laboratories, Inc."); diff --git a/drivers/greybus/cpc/host.h b/drivers/greybus/cpc/host.h index c3f2f56a939..191b5e394a6 100644 --- a/drivers/greybus/cpc/host.h +++ b/drivers/greybus/cpc/host.h @@ -18,9 +18,7 @@ struct cpc_cport; struct cpc_host_device; =20 struct cpc_hd_driver { - int (*message_send)(struct cpc_host_device *hd, u16 dest_cport_id, - struct gb_message *message, gfp_t gfp_mask); - void (*message_cancel)(struct gb_message *message); + int (*transmit)(struct cpc_host_device *hd, struct sk_buff *skb); }; =20 /** @@ -48,5 +46,8 @@ int cpc_hd_add(struct cpc_host_device *cpc_hd); void cpc_hd_put(struct cpc_host_device *cpc_hd); void cpc_hd_del(struct cpc_host_device *cpc_hd); void cpc_hd_rcvd(struct cpc_host_device *cpc_hd, u16 cport_id, u8 *data, s= ize_t length); +void cpc_hd_message_sent(struct sk_buff *skb, int status); + +int cpc_hd_send_skb(struct cpc_host_device *cpc_hd, struct sk_buff *skb); =20 #endif --=20 2.52.0 From nobody Sat Feb 7 07:10:30 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 BE2B83A9018 for ; Thu, 15 Jan 2026 16:19:21 +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=1768493963; cv=fail; b=JdnoXSQfrTL/RU8PWUm62oNHh8ajRexNvwqSyVF4bFZIc1JVPt8nT3UIIbnxA1U4PsczA+yoHfjo6pJOkYaQmTcgQbYbrI2iGBHAcJ8PogTQ5bZix1VuUVB1A5GOQPfzj5rXZbS04/1khiRto/Nqs+AivAxjO2pek9ILDTN65po= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768493963; c=relaxed/simple; bh=PvHm0sZOFO+PxFgzH/4kQjGX+j8eXmrxMhoT6sy+bqk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Suv4zOOUecyl6567M9bn7rZV2OYyJBCK2se1eC6kVBUvgkgQFKRbL7ohkCBjSArsX5Wy1N8R0k0K/WaYsqDQSbt+IhF8l3kGZSLIXXaU8or2+PtE/uKsf7FSICVhemJqyzzvhk5x9Kd4v9yDt6p3+03t5T60iofV4tgrHN+n8fE= 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=gpBmS9DJ; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=KVKjG+z+; 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="gpBmS9DJ"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="KVKjG+z+" 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 60FFldAZ459480; Thu, 15 Jan 2026 09:58:38 -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=QtQ2w6J6+WzvUUqe72IB8cXHNEMd2DYmh6aaYN2FbGA=; b=gpBmS9DJpAlE tkJ7GwKVrL8YuqZsFE4wEXEUBUXqtoML8kQMrWIogxyhasePot8IJhR4/WXlMShu JQTLU6JDuV22/Wj9f6Ie+0Pfx06HG3SKkW9cHhnX5asIm9XweQ76aW6QDDlI0Q0K 9cIt24Jfb6lM7Ukcr+b+qMA6EX7tS/9zUbfuqX0LVsZTVK7OBqWJGUOM6JD3uTGg j5w5RfYrLG/iNTjd8cjO/O/g+tdO0HVavqhjq5MKYKv5YPPH8m08Dgc0T9GiACLj K88Mqbn9gH5KWkXIX9gXbDHSxXxwd7NxtEWhtadBB0H8px45luUETqS1lL3h8S5K yK63hD0XyQ== 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-2 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 15 Jan 2026 09:58:38 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=tFuUUoulkRlYrO/ceMLhCWZ/6o3+pmqDvnJaW3wHiccspu/DMGpRlYdXvGG4MxzLFfcE2+pC6aKUD4IoYNuU3cSHOhB+S2wlE8b1PbFNkQ7vF92+hEx6RYo7PDPqOZ8rhQ2Skk/yHvyz/oZDc1OhTA0PVKv3e0sxg6hVApDaahWNeriEzFJAZjovHwpwCdOs+/LrJLn/ppitQq8Bz8/j61uZz95uz9hUR4FK3coPje0iGHUlQd+MnQZ4v/r8QV89YjMPuKDJ6o5HeMWalyFqCEXEtNYDfoAHdVlcIL19vN2uVGScCxAGwjn0y/uj70rCtwndSxp6A1RT1bun0hHbyQ== 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=QtQ2w6J6+WzvUUqe72IB8cXHNEMd2DYmh6aaYN2FbGA=; b=t63eFkeri76Ja5yzJz5N360+r3dANjqIGixjr/RFEwj3f3e4pOk9MUWtLv9s8PpsnHiz35KaZjtajNEfivg5o7mDsfxKSIcJDVM76YQLe/4ddFqnV/ey1uNGSyE0zwGpDAyLQV8N15XBxY/3fUJSBiTw19hNJko65XawjwLWS9osmxOfK+6Wm9s28OFSaXYTvJnCp4qykUj5oBNJj3AFkNOwFJzvLBU+SAwSGOkgrK8xjg2s19WClKtpRnM1ZlSHLMrFBOBOxXLdKJFe0EnQ94slHOUkvwyBOiHhfdf0eJlf2JJNf+jSfh96tXmSb7GsEkjxKvrTwxhbprgJyFNdUw== 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=QtQ2w6J6+WzvUUqe72IB8cXHNEMd2DYmh6aaYN2FbGA=; b=KVKjG+z+BjEJk+cHcYyZGzAtQ8Yhw8tCO547busTo1p4vvSjBhP2hFIQrMhk9ImvRjiyGxfRne8qfcedggC+bJaDGUy82tDzKDweqGvVBUCQmrOaurk48USNPq2kKXnzLF+++NqyHSPvpiT5vYbnxsPC28WJwbIlEzJkD9Uegq8= 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:35 +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:35 +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 04/14] greybus: cpc: pack cport ID in Greybus header Date: Thu, 15 Jan 2026 10:57:57 -0500 Message-ID: <20260115155808.36102-5-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: 2128d140-f16a-40b1-55a5-08de544ef00d 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?bVJ2dnl5c1NyWXR3Y05VQUJjdXhmOVZqTlNaZjVsNDVEelFLVXh2WkVDL280?= =?utf-8?B?eEd1N216VmQzWjNQSSttK01CcU9OTHY5citnR2NPdXpUcXk0V0kwdWZ2Y0Jt?= =?utf-8?B?UGMwMHlOM1kyOG1OcWNwMllnbWJabkFPQkh5WGx3Rm9RQnZrNjRwcEFVUlEz?= =?utf-8?B?ZjZPSFNjMUVkQVFtYTVIeFM3SHpmS1BjeUNjWk1LUzJ5YURjQUh5N29Uek5Z?= =?utf-8?B?TXQvQkh1ODBkbWVlem53LzdablVPWUpDNDRaYzRvR2VPMkg0RWwyMHdEbTFk?= =?utf-8?B?TXl6TWwyR2RIOWNJS2VQaTFKbUtTVENvQk1KU3BGakZMazRhUnBMVE11a3lX?= =?utf-8?B?WGcvamVJcDEvTHg0cGZRcTJjMFloQ0lROWdKaXlqUjF3enlUdTNmMGVsTlJy?= =?utf-8?B?WE9YcCtGNXBqL1hwSTNDNjRVaDVHc2hlUHhCUWM5elB1d2Q0MXZCRlJkR2g2?= =?utf-8?B?ZVh6bHh0UU5YQ1VoajZ0QjJnZGtIS0hZRWxxZ0VBWTFqdUFLMzhtWmpUd2M5?= =?utf-8?B?a3ErV1MweDVlQUhYZitlbVQ0WGhVaGo5U01ubEo1NG8yTWdnTXJHcWRDakp4?= =?utf-8?B?cFFXazl2M0k3bmlDTm5FQ2h6dkVtOFFYQmxFODd1TjcwTlc4MVVNbjNWaE1q?= =?utf-8?B?amQ5K1VVUUIxeDR6Y21nSk5aWUJHQWpma00rV3FPZWczU2lzc3VFNlNMNzlL?= =?utf-8?B?THQrOGR3NkxSdEdGRXlkaVlZaTZHZEp5RTdFSElQYnF4VldveHFoWTFoODVK?= =?utf-8?B?Vm5wMWRkY2x0TURoZm0yRm82NFQ0TE4yVDdDQ2dkdyswelVlK0syODltUkUz?= =?utf-8?B?SEo4SkJWbk05OFVJM0plNjk1NmhXY2NtNStzTjhNc2pibHU5M0NocGRmdWM4?= =?utf-8?B?b2NOWkhHa2JzK09TQmFqQTF1TVVqYjBjaW1ZUjdUdFc3bVdXd2JuZzlRZ2dW?= =?utf-8?B?RFhBRUNNaGpYRXRDVllkeVh5ZVp6Uk5vODBUTGpyNDRyU2MvbjlSN25GcG01?= =?utf-8?B?U1FFT3RkNWYzeHVjdlo0czVLVnhWZk5EL0c5RWswbW41V3pzWkxBZ2llMVIz?= =?utf-8?B?WkJxV25ZckRzZHNZcEpwTDNZdEx6VnhTQm1tNU1TWG1xYmM2ODVzV21xN1NG?= =?utf-8?B?Rk9rcm1JdXlWTy80WlF3VERUTEd1bWFJb0RRM0tqMng0QzFSTzFXOENnMk5G?= =?utf-8?B?UkloS3RxR0tYM2pWTFRrd3pua1Faa1JlS2JoUFprVVM3RnZrVUxPY2loeFhz?= =?utf-8?B?M1FLUXQxWWtyTmNQRGxiem95K2N0M2JGQ3BTei8rR0VPTVJFZVhOejlFY2FE?= =?utf-8?B?Wjc4ckowb1lxU25yUmFRS29rYklWUXRHUXc4d3JvbmlOaHhFYlpxMEpJZGps?= =?utf-8?B?a3VQREt4R0Y0ekNjYkNQZTRGQ1A1ejNkc0laMThiRmpuMkIwQ09kVkQwazJD?= =?utf-8?B?SUFCMFpEQUkveGRkWnEyYVpWK05KcFA0MTQ3UnNvejFNS040aStvQVZiQk1R?= =?utf-8?B?MWFzbC9TMW9CZ3IzNkIrVHd4alVWVC9lOUdQL0lDTVp6Y1RtZGV2MWZBVFgz?= =?utf-8?B?emcvazljeVVwa3BlUHpRM2lZSUxNMU5MM1hLbnR2cW01S1FvVXJKeGdOOElq?= =?utf-8?B?N1NyY1Y0RS9HOFlHbXhYUGo3MCt4cHVJSWFWUUtzOWRoZVpjL0JzbGdUOUNa?= =?utf-8?B?VXhHVWxxNG56YUpkTjhWbUJVL3puL3ZZY09RNVVhMFZpNkdyWFJuUWd6OEdk?= =?utf-8?B?LzlId0pUSlh6UXd3K0NPSVFMaTNsYlB3bERhUTl6dGk0cjZnZGR3QWUzaXV3?= =?utf-8?B?R1NpUUI1NzMvZkg3LzgvYVgxbjZERkQyNW5HVGhvdG1IbnFVV0JHRVo2aXZz?= =?utf-8?B?TGNZd0w0eXZoOHlSbVRnaFZBeGZ5WmZURmp3VStydFFua2pqbTNxU0ZnZGpH?= =?utf-8?B?WDRxYTVYOGVVd1d4NDVFcTA3VDU0SjFudGFWdkdFYzQ1SVIyN29HRzI2TFVq?= =?utf-8?B?OHRpNS9TSEVOQitBQ0VhaW1QTGV4c0ZiMFpLMk0wMEZjUWxyVGZVMER2NXpm?= =?utf-8?B?T09NbitzYStyRDVMZnNpSktxZjhRd0FZOEc4NVg3KytwQ21nSk1rUU5iTXZQ?= =?utf-8?B?WFNkTWIvOXlvNFFMWExHVnduNThob2NuZ1c4UU9nY3NsMkRYcGwwdXlKWk9V?= =?utf-8?Q?Hc7MrA++9Bjzv1Ozr+EaYO4=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?NEI5aUd0Z3lkSU5NSklSU1NPR2JXeGdVK2hYY1ZZK2hVeERjUGNWRXlOQ0VI?= =?utf-8?B?TWhob0hQQXZDQ1R0SGp4TjBsOHBQUUFJeEFLSTA2ZzBaREdNaVFTNFJ6QktG?= =?utf-8?B?NnBaZmYrOEVRYnJ4cHE2U21sQmRiZk1wS3EvcVNheWdSU3hOcCt5YVBySVI4?= =?utf-8?B?ZGd0SWlCVnBzOVBqU2NmVDVTeXd2aS9ySk1GcXlITjdxNE5QQk9mYjFhZEd3?= =?utf-8?B?YlBXWm9FRmJmSHJBYVRFelUwclY2ejhncW15YWxQYTZ5aHdjREJ4dVNDZG8x?= =?utf-8?B?cU5Ra3FlSTlsUmxYaVh5SnF0TkVWYmRWbytkTWNpbkg4cWtkTHArZXU5aDZs?= =?utf-8?B?b2hvd3QvM2RMR1hHaWhkQ05SaDdITlp2TnhGR1BUc1pPZVhiWUVhK3lycits?= =?utf-8?B?eDB2MHNVaVNkYVNXSm14VGdJZ2VYOTJOM3hMS0hVRjhaZkdUTy9JdkVhczJJ?= =?utf-8?B?NllXNjB2V2hhckhkNkY5SUhYb1dKRjlJRkVidTZpRVJSaiszeWJ5Z1BjNkJr?= =?utf-8?B?ZjNZcWhobnZnS2QwTWhqQ3dUcDR1dzVReTZ3K1EvSk54OTFVMDZkMVlhUEtt?= =?utf-8?B?bWZSejFTZmpCanNRMFZWSktxRkMxU3Z3ZkJvcXRSTXFUSFJGNkc3U09BRGlK?= =?utf-8?B?SSt0U1NmelVsTUtPc3RYQXNoYyt1UTdEVERYZkd1aEMyRTgyMktVU0ZCTmhP?= =?utf-8?B?alpBUGtBK1FtdUw3Y0FHbURhbXRyUmZrOEQxVXJ0ZnVReW51WWpaM1dSc0k4?= =?utf-8?B?Vi94M3ovZnI2SzVrZGxkWGt0K25SeHNBT3lZM3BlRFh5MnVwRkczdzN5ZHJh?= =?utf-8?B?b2JsUXhFems0UmNOUTBxTHpBM3E3amhySkNJdjFaZ0w5YVpid0I0VUduKzhT?= =?utf-8?B?amxDcTBGZ1JBZTc1S2Rsd2JnUGFObVhMdklGRDRrVGNRUkl6Q2svRDJNWGdu?= =?utf-8?B?UStUbjA3TnBFS095TE5jTjRlYm4zdDZCUXhvejZ1ZjlmYVNkTDlyUUcrSEZH?= =?utf-8?B?a1FZSURBNWFKY1FwMWxZa2N6MTJXcHJOMVRPSVFoSHRMZXpvRDJPZjRzelRp?= =?utf-8?B?c1R0dlZyT21zQWZ0aytoWnA4ZWh4djhRYmliRUttc09NSmNUaVZlQmRmZ3Zt?= =?utf-8?B?eXJYdmZMRkhGRTFxdHBqdVJnN1ZMWmJVQUNZZlJ3US9tc3FXbE51dGthaGM4?= =?utf-8?B?ZlQ3Z24vNlBuZ1RxZGlUS3ZWL3llTEVSeE1TU2F2KzJQcjF5VXE4R2tsRFp1?= =?utf-8?B?eWpHWHdpU0dJL1lqVCtjS2x4VTRtUW9EQ0FwSWVpRFRmS1pTcGxrSE5DenBR?= =?utf-8?B?dzgwaXVZWTF6OTdNYjJORUNUYmRaY0tqdnBqT1gyaVpEeUVRZy9JQlI0Znhm?= =?utf-8?B?SWFpcWtoM0o2cm9na2NHZW5oZ21QaW1CSFZEaXdXRXN5Slc5STB0V0pHTlZT?= =?utf-8?B?VzJTR05TdUZ5OVpmbCtmQThJaEFvN3QxSVRJWDNCUHJXOTJCT1FEdXJQN0VC?= =?utf-8?B?U3VhNTVab3dBM2lKekRpRlE3SlBjUy9iMFUvWWNNc0pzUmRFTDJJZVMrOXhW?= =?utf-8?B?VDJEckxFZC9ZNCtkT2l2S0piMmdtNDk3cnRlRzk4Qlo0NTdqbWhCRmhnUkJk?= =?utf-8?B?YXNHcmxxZGs0cnV5NWNPbUlycDBtb3M2djlOVzVVT3d5OGlPb00zZ0dzTGdD?= =?utf-8?B?UllsWTU5Qys3c0d0S3FSL3hyanVlZVRZek5pMjBOVUZpWkF3KytVR1dhMHJZ?= =?utf-8?B?ZUVEUmx4Y2N6M2s4SmU4elRxMkpBN3dkS0t6SXBHOEpuaG9ibUFmVXAvc2hW?= =?utf-8?B?bk4zdWdZVkUvZEhTbUJvaGN3MkYrOFR0bjEvVUNXZCs4YnNITDd1dUY2b2tm?= =?utf-8?B?ei9PVDFjM2lWWVpjdUdYZk5iNHBDdzdaem1iVlhlekNzN01URGp3ZnVtNDdF?= =?utf-8?B?OFN1dlJXd1hmSUUvdm5kcmNyWGJBaWszQ2YxNjVCSnRhaWwwSXU3eTUvQUNB?= =?utf-8?B?OGFkT1BXK0t4M0tFVndPZ0F1T01Hd1ZuUVAxeGZiUGVPV3RxWFI5RWJRL2RJ?= =?utf-8?B?cGJOUTlJa3FKTW9RTHlZWmVtNitUb1prRmpOVW9vbFNnbWMrcDVGYTRIajhD?= =?utf-8?B?SUdteENseDFMVkMwbUZycVVGS2p5TWJBMm1kREp3K3hIeElacWpTTi9kMW1U?= =?utf-8?B?cy8vaFF2T2NSK0prUWFoeEgwSFc5OXpVcTIyOGZYVmRJSDI1eTA3N3V5dUN3?= =?utf-8?B?cVpIU0huODN3cHJGMkJza0NJSms1L0FCYmV2bTUzdmhWeU5VcFJYbWNaeE5P?= =?utf-8?B?RllPTktqSkMybm0xNExwckdoeFZHbXdnd0FMZmtucW9yNkZxMG5sZz09?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2128d140-f16a-40b1-55a5-08de544ef00d 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:34.6487 (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: 80nCSXXlIY/2oN79WE+8jLqxtV0Yf3XKzTfs9HPFknMcz15KzC+f/qKPDRd6lhDPGTK5mgpKUoMgkgkqHp5WZw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR11MB5097 X-Proofpoint-GUID: V8dFd4jw9NfLAGlB8StkObi1rw188Zw- X-Authority-Analysis: v=2.4 cv=M6BA6iws c=1 sm=1 tr=0 ts=69690eae 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=bWPpxp-jgQ3ylSns5SMA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE1MDEyMSBTYWx0ZWRfX71bcovq6bcso kq7FIziA4wVqYxGoBaS6EMr6vwhigCpgAV/cDdiRfbibTQYocHCknPWs6C7qXrxNfkD36hUVBxU 8MX4UMsSq51LdAqEpOSZmQKmCYE8yfQmKXLhJb2MQ4MeqxF26e+sB87/Nl36AYMPxuLVMEkD18W raf4CECGYVppPgSkrwVKB3I6W1bt/NRpTeodTq/bafrc90ipFNexEWAhrySZNV1ky6cZqKFhYf3 Bc0FkomVy7S0Z3Wlbgm9SsDQ+B0DuhCSeIFNwctwjlZz7wn1NMCvVgGvM0AS4tAqbe4EVz6i8O8 gzgBPVUr4llotfux1quVDSjae+PZHil5irgLb24nCHDEnE+Q5O70kiHy8I+zdN6hQRhVAUblPxj TqcgNj9GAmoZXzD/6YGcACEYjmNyk0Nwdp75HrgzpWu5xF3xyBglN+94A7VEii1MB7ogGxbmOEm mNiMai/NFxmmHbvlyeA== X-Proofpoint-ORIG-GUID: V8dFd4jw9NfLAGlB8StkObi1rw188Zw- 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 Take advantage of the padding bytes present in the Greybus header to store the CPort ID and minize overhead. This technique is already used by the es2 driver. Signed-off-by: Damien Ri=C3=A9gel Reviewed-by: J=C3=A9r=C3=B4me Pouiller --- Changes in v2: - clear pad bytes when unpacking CPort ID drivers/greybus/cpc/cpc.h | 3 +++ drivers/greybus/cpc/cport.c | 34 ++++++++++++++++++++++++++++++++++ drivers/greybus/cpc/host.c | 13 ++++++++++++- drivers/greybus/cpc/host.h | 2 +- 4 files changed, 50 insertions(+), 2 deletions(-) diff --git a/drivers/greybus/cpc/cpc.h b/drivers/greybus/cpc/cpc.h index d9f8f60913a..62597957814 100644 --- a/drivers/greybus/cpc/cpc.h +++ b/drivers/greybus/cpc/cpc.h @@ -24,6 +24,9 @@ struct cpc_cport { struct cpc_cport *cpc_cport_alloc(u16 cport_id, gfp_t gfp_mask); void cpc_cport_release(struct cpc_cport *cport); =20 +void cpc_cport_pack(struct gb_operation_msg_hdr *gb_hdr, u16 cport_id); +u16 cpc_cport_unpack(struct gb_operation_msg_hdr *gb_hdr); + int cpc_cport_transmit(struct cpc_cport *cport, struct sk_buff *skb); =20 struct cpc_skb_cb { diff --git a/drivers/greybus/cpc/cport.c b/drivers/greybus/cpc/cport.c index ed0b8e8b0d7..2c73d8e724e 100644 --- a/drivers/greybus/cpc/cport.c +++ b/drivers/greybus/cpc/cport.c @@ -3,6 +3,9 @@ * Copyright (c) 2025, Silicon Laboratories, Inc. */ =20 +#include +#include + #include "cpc.h" #include "host.h" =20 @@ -31,6 +34,32 @@ void cpc_cport_release(struct cpc_cport *cport) kfree(cport); } =20 +/** + * cpc_cport_pack() - Pack CPort ID into Greybus Operation Message header. + * @gb_hdr: Greybus operation message header. + * @cport_id: CPort ID to pack. + */ +void cpc_cport_pack(struct gb_operation_msg_hdr *gb_hdr, u16 cport_id) +{ + put_unaligned_le16(cport_id, gb_hdr->pad); +} + +/** + * cpc_cport_unpack() - Unpack CPort ID from Greybus Operation Message hea= der. + * @gb_hdr: Greybus operation message header. + * + * Return: CPort ID packed in the header. + */ +u16 cpc_cport_unpack(struct gb_operation_msg_hdr *gb_hdr) +{ + u16 cport_id =3D get_unaligned_le16(gb_hdr->pad); + + // Clear padding bytes + put_unaligned_le16(0, gb_hdr->pad); + + return cport_id; +} + /** * cpc_cport_transmit() - Transmit skb over cport. * @cport: cport. @@ -39,6 +68,11 @@ void cpc_cport_release(struct cpc_cport *cport) 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; + + /* Inject cport ID in Greybus header */ + gb_hdr =3D (struct gb_operation_msg_hdr *)skb->data; + cpc_cport_pack(gb_hdr, cport->id); =20 return cpc_hd_send_skb(cpc_hd, skb); } diff --git a/drivers/greybus/cpc/host.c b/drivers/greybus/cpc/host.c index ee090dd3097..b096b639182 100644 --- a/drivers/greybus/cpc/host.c +++ b/drivers/greybus/cpc/host.c @@ -203,8 +203,19 @@ void cpc_hd_message_sent(struct sk_buff *skb, int stat= us) } EXPORT_SYMBOL_GPL(cpc_hd_message_sent); =20 -void cpc_hd_rcvd(struct cpc_host_device *cpc_hd, u16 cport_id, u8 *data, s= ize_t length) +void cpc_hd_rcvd(struct cpc_host_device *cpc_hd, u8 *data, size_t length) { + struct gb_operation_msg_hdr *gb_hdr; + u16 cport_id; + + /* Prevent an out-of-bound access if called with non-sensical parameters.= */ + if (!data || length < sizeof(*gb_hdr)) + return; + + /* Retrieve cport ID that was packed in Greybus header */ + gb_hdr =3D (struct gb_operation_msg_hdr *)data; + cport_id =3D cpc_cport_unpack(gb_hdr); + greybus_data_rcvd(cpc_hd->gb_hd, cport_id, data, length); } EXPORT_SYMBOL_GPL(cpc_hd_rcvd); diff --git a/drivers/greybus/cpc/host.h b/drivers/greybus/cpc/host.h index 191b5e394a6..2e568bac44e 100644 --- a/drivers/greybus/cpc/host.h +++ b/drivers/greybus/cpc/host.h @@ -45,7 +45,7 @@ struct cpc_host_device *cpc_hd_create(struct cpc_hd_drive= r *driver, struct devic int cpc_hd_add(struct cpc_host_device *cpc_hd); void cpc_hd_put(struct cpc_host_device *cpc_hd); void cpc_hd_del(struct cpc_host_device *cpc_hd); -void cpc_hd_rcvd(struct cpc_host_device *cpc_hd, u16 cport_id, u8 *data, s= ize_t length); +void cpc_hd_rcvd(struct cpc_host_device *cpc_hd, u8 *data, size_t length); void cpc_hd_message_sent(struct sk_buff *skb, int status); =20 int cpc_hd_send_skb(struct cpc_host_device *cpc_hd, struct sk_buff *skb); --=20 2.52.0 From nobody Sat Feb 7 07:10:30 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 2F593FBF0 for ; Thu, 15 Jan 2026 16:13:20 +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=1768493602; cv=fail; b=tG6iNTBKMd/P0YEoYm9kyaXhgm9PYyK5iGeFKEjR7CBJTS/jvWoTuQH/aTf0ClBA3KfAMcIEm2dWPjUX3azGly/nzR+qtLQcBjekOf1CfDWy98iukO/QGLXIq+fqWs715yU8Q9gZP1YakqPJo3YifpiRxXb5/9uAkzhZS9uhYHQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768493602; c=relaxed/simple; bh=F3Zdm6hgas051LkHn7apLK0eLYn8bsI2LsKvweZWImI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Ycd0oXMuy1U3CJcbW0o4wEPMSuk2AgDvlGSIOIq+KGAZCIJ1mbNKQCILIboy1IQFaMQNnw2SXT/fcUwgQ1GRDgGdUQz3zKycZAXMJkUHZlevcgE6YQKx3yKr2pUrOgD2ikw71hw4f8b+3voSMq7w3RDBJFMsO/MEycXQNu/EfV4= 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=toAsRrJZ; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=eHSJbUhs; 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="toAsRrJZ"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="eHSJbUhs" 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 60FFldAY459480; Thu, 15 Jan 2026 09:58:37 -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=zKELo52QtGJ6C2nSmlBARgqTkzH8lU/8LI05rb+XfD4=; b=toAsRrJZ8mqZ aTZ0UL2+oJRsiw5Tf1tlLxE1mnXqZG8PptfAjS8pmfTzcaOvY8hIbivQkXEktCFP wnokKWbASIPjRGrpPbJYosDWmq2z1o652j6m20GgXOMaF3s+5b8/p3cF7Oyrk2g5 WyiqvHvM6/vHG4cpb/RwseICao512xfSE+rVgJiu9r7V+PY3iWOyQFN7evvDIFpb iu+EpuF7Xc72wyCC/L/Cu1RIw/paUmLFvD7QYLHjCpTKxnE//QU3i1+qgTeCLpJd asTvudZAxudakpbcgeUxnrkvJe5IUhP8n/SiwfEkxXKZ1sjJ3xgTXbt1E3VFCKyo qeiYd9p4eg== 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-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 15 Jan 2026 09:58:37 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=chcJIv/en5vWP+qwYigMb/uzidG6cQxi2eE1cUA32BkETT0iY7eF4PV+nErYhi4olhu5ygSclQKspp0nAJuV6/IbxCd8m/EVWsirbcp6WlwvZVuNm3vR5/8uejUmHa/eyhKMId2HrKVjdIMEbwV6jlNmzNfcWjj6qQDL90Bp2YybMu3hkTQcozdjKDXt/UaFvokdA6oZ06CTfzO2u9zf5Xgke2MhDDU7zUHNoeQoLsENrDqrdHT4VDrTbawdXZF3otxNIHW8pIpnV/VKtne+4JhO0zZdkBsD8CBt0fEFLox8WaiO7jKU5sfaOBPrJY0+DxjghPPnxeHZWwVMe/Eecw== 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=zKELo52QtGJ6C2nSmlBARgqTkzH8lU/8LI05rb+XfD4=; b=tSZeDmrXq3kGa6+btLh72sOCkaOmPN1ydvx+QZ4RNgkX9o6dKrBY+xMt8xUPwi1Cd2bwDZtj6yRT0CabYOO/0u1gtqTa6jxdMTeeBrqdFZqXABF+QSUQy/UYOZxnv04X2FDJlhdaEvNPuPGvlkpElmhNneNb/yI5MOv65k5f3ITs5TuvSAHtF7F1KQhPdkk0uOOnXr8W8rzBPGpYGNQrqNrwycujy8+z/XuuwfMniY19MjSoodiJlRnVNXGlfWNcow1nlmugM/u8bKBEAo102fxbD48kLv9M8q/QUJBaUz0NE/2ROx6Ej2dTFcf+nFhSJqnUb4bYqU5a4xNZNM2RXg== 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=zKELo52QtGJ6C2nSmlBARgqTkzH8lU/8LI05rb+XfD4=; b=eHSJbUhs5o9GVQCh/g5yahPqRbc2A7BEvzwmeTBejyAAfXXv2DGamMbnsNdqosacXO2q6FonyMfuw/EEhB7tsMcvXrcIYmUOe8wUJf3le+syorCTJ9DMl8Sx6aSxcrUCrLcKui8YgYLCJS78oAYDbA38XkF3Nr6ToYsTe/uTzhI= 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:35 +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:35 +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 05/14] greybus: cpc: switch RX path to socket buffers Date: Thu, 15 Jan 2026 10:57:58 -0500 Message-ID: <20260115155808.36102-6-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: 942a5f97-1064-4497-1e56-08de544ef083 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?b0dTaE40S0RKMitObllualhmdm5GZ1ZZdGRJZVk4bVpSRUprNG9BUHV0WmJP?= =?utf-8?B?Kzg4RmYzZlBLQXdra0ZkcXlzcWJTcUpSNDAwNkFsTHRHbmlRWm9yTVpueG9a?= =?utf-8?B?UEdkV1pBYTJha0owUFpaNEdsb25IWWtibVBSU2s2M05jd1d3WUhZYkNqKzQv?= =?utf-8?B?emMrSzJuZmZUMlJvS2h5QzhYelAzL3lXRjlYRnFESmlmREtvWXpyd3ZNcWli?= =?utf-8?B?VlNzdE1WZlhqc1dkNkJMRWx5bis0NmtFMzNZdE9kWXJKdTBza2NwKzNLMC9L?= =?utf-8?B?NStkNTFwVHdKWGYwWGdaaGpBMWNlMUVsaGFlbTlpNmt5c1lFK2JsN0ZwcDZX?= =?utf-8?B?c2tmS2RlMFVCcmRQTTZZeUxwWHZxd2xRVmcyUEtGWSt3VDhzM0RPck1NTC9z?= =?utf-8?B?aUJUcHF3NkdHeG5vb2d6OWo5UnZqRWgxS3hhdXB4Q2kzNDNEanhsZEN3Znhi?= =?utf-8?B?SFQ1bHRyLzFIVHJpUURNU3dQbDNrL0dzTVYyZm5YMTBmZWQzNURVU1B4SzBC?= =?utf-8?B?aS9raDJ0ZnJvQTBrbVFodGpZcWIvdTFQYlpYaURkT3VxYzZZRHJ6ZmRIeEp5?= =?utf-8?B?ZWpDdW1hQURlT3d6QXY4YUpIdFNTQVRDNjZLdmxpTy9CU2ZGVzBud1RNMVFE?= =?utf-8?B?Z1FEcmVHOVBabWJjSlVjKzVZRkQ5SWZIYzNOYzZSZjR6Y2ZXdGtxQWZ0RGtG?= =?utf-8?B?REVaTUxOajM4YjhXTzIrR011VTM3d3lNa2laNWcxVWhwS3dOeklOZUtCSEw3?= =?utf-8?B?WkVsVmhtMFJ5SXlPWFNURmdPemVyRWNHclU2eGNrL0JDVDgvTW9yc2YxejZn?= =?utf-8?B?SGlrZ1kvS1JTTXVhZE1SN0xzbnJaNW8yeGI1RmFYTDRuV3YyUFZaNkZLY3Nn?= =?utf-8?B?Uk1GWVJNb01oUmxSUnpCWm4rN2Nra0FzZnlNakFlY1BraHJYOGpMakVqM01B?= =?utf-8?B?cTJNZUNaNXlVMTY4ZjlVOU9oSW9rQUZ0UDByRzAzMXJmQkoyUjZqQ01ldGRy?= =?utf-8?B?VWZHMmxDS3JCSHBlWmlKdjNtRFRtL04ybXhSeThTQVY0amdYenQ4SnVIODJj?= =?utf-8?B?cmZhdExZTzFKRlJsdnNDcllVc3ptMWF1TmJkS1QycnFHQWRSUWxPMmI2anFS?= =?utf-8?B?QlFoZWY2K3ZHUmsvM0w5Y1d0c29zSkVrR2NIempuVy90N1FxQUN2YWt4UElh?= =?utf-8?B?WVA5alJUK0hKMm1oRVovZ2tadFB0MWpyQmFxeTJEcFdqOTFXOVFNM1FyTjRq?= =?utf-8?B?QWdFWVJnVDlxd1orUFMzVWx6MDkyQnpieiszcjV5dUtkRmJkbEMwY3BoRjRr?= =?utf-8?B?bVcvUkdDLzd5Ty9MVVVpcGZZTnI4Zkd4WENiSytiNDh4QW5BYXNKc0RVM1dP?= =?utf-8?B?blNVd3E0Tnl1VHVkVlU0b051U2dRVi9sekhrWkZUVnR5b1F5TTBIOVVRWjRl?= =?utf-8?B?bUVVelRUd29GWDQzVnNDdW91UjdLTW1zWVI1a1VPam9RNHFyR3lDOXN4R2dC?= =?utf-8?B?RUhwNUJiYWJUNVloYWFGdkZtWlNVS0hYQjJUU3NJTm5jdjJBOUxQeWRnODJK?= =?utf-8?B?OHViem1nL25EVjN5anU1MDRyOFQ5eVd1aDV1eXVsVHkxSExxenpaSXB4Qk5q?= =?utf-8?B?MGFjMEZXT3o5T0taUDYzQ1gvVUdpL1JRWWJXcUEreXkxejJra3IzdTJ0dkdi?= =?utf-8?B?OTJHUHBGNit3S1J2VHBVS2hsNVM3RW8wYjNNdjZSM1QrVlU0bGJrV3ZtcUxi?= =?utf-8?B?Z3V0bUI2Ukc2Zm5hWWRkZ0k5bGZDZEx1eWJYWk1GbUJ1Qktib0V0aEhoSTRB?= =?utf-8?B?MDJhM1cyNlpzMTJUSWhTVVBNWUV0UmdwdS9iZWxsMDdpMXp1QUxxWFFPTFl1?= =?utf-8?B?eUcvdE9rbVFwWWVoNlp6K283by9wSENxRmUwdzZWTm1GSllqNmFMb0hKbk52?= =?utf-8?B?SG5FUVFTWEM1UEgyajlpNjFYc3BLYkNwcXpxRFh6SXoxY0NoK3dPdnlVcWk2?= =?utf-8?B?R09xcHF2M2tTTllFdU5ydkpZdVJYbTI4L3c5dVRuM0lrWFZ3dzJoRjFKZFJY?= =?utf-8?B?Vzd5UytReVkrVnJUdUExVmVGaGlEdXFEQXdWUmI0dlNDQ2s0Q1pTQXVJQllL?= =?utf-8?B?aDNTU0xmeDB4SS8zbUoyUWI4dHY1WlcrdTJZUjF1NFdGanFLM3dJcEFDSGVk?= =?utf-8?Q?IPMCuNfJJup5j2CV6tTcUIg=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?d1Y1YkM2aWNRaWR5dkdyVy9zUWpkV2pwQVBKS016WU5SWVUzd1RtbCtZa3Zy?= =?utf-8?B?RS92TWRXL1habnM1QSswcDJrUmswYmpubnlvY0hNOTE1MDRnc2lEVzkybkV1?= =?utf-8?B?V0l0OFMweks3L0RhbFJlZ280bVIwdDFtM2dBOUU5eGRKeUZkSmlZck1QV2t3?= =?utf-8?B?b1VoOEY3RTRvdGY5U0xoRktoZTlWbWRmZnZ6NWhUbHNRcjc5YnBkYWcwYlhn?= =?utf-8?B?RVFqRVowY01UUjBrRXpvVTVjSTg3dkR5Tm0wZmVFQ0VRNlRYN1FnbS94bFdP?= =?utf-8?B?cWF2MUczZ015SU9WTmNwNUs4YjlVRVlIY2hId0UyVU9kcTZodTE5YWpxZEdy?= =?utf-8?B?MHRQMWdOTWYzTS90OUxHb2hGd0dDWXZmV2x3UnRiMkFjNm5lb3RPK1JPYnpn?= =?utf-8?B?UmdZbHJ3c2IycEdmcEJSTUxTSUhScS9CVXRYU1pRNjQ2bk84K2JmcGNMak42?= =?utf-8?B?alFYSG95bG5xZk9qM3VnNFhZOExIZU5ramQvdk9vUUpneEppcU9CQVdSMEdM?= =?utf-8?B?bDVRMFlsTzZyMjhOQ3M2cmVia0VqSUVXWTh3MnhrTEowVklNODhEbzNhRzNj?= =?utf-8?B?YnRaMkY2bURYaHpkMmpIMHVxZHdubmczUFovcGl4L1Q4T1prWld0cU9NaUNs?= =?utf-8?B?OFhtN3kzMlBFT2UrWU9HTlpwYnMrZHBHbEE2RStHaklncERSL3VPV2Z5bkUz?= =?utf-8?B?Y3duL2RPUUFwYWFHZUdMRGY1aXVPcFBpK1dFYjFLZnZ3K2M2Y1pmU0ZYbU5T?= =?utf-8?B?ZU1qTU10MnptUXV2dnZOQ0ZYMEUzOENWOGNYbXdCdEkzdWt0cWtVSDV6aFNQ?= =?utf-8?B?Ry9qRUlaK1ZRYVF0UTlycFo3S244MkhGQlpWYUxQakJPU0VJMFoxd3hiSk05?= =?utf-8?B?VTArMDlCbFBhYk42d1RjY0JRRWJBZW5TUXNMeFk0UTRjaFZVWGU5Y05MZGlj?= =?utf-8?B?MUJXZTN3OVNHeXJLRlVFakMvT0RrM2k0UEEva1VpZ04yWjk0N0Z0YzVHRGYz?= =?utf-8?B?V0FNUTdZeW9jQ3h5L2pqVEJ2QVNmNEVQdTlkdXRxRzNCRmh5WTYyR3E0dWhY?= =?utf-8?B?RUZEZzlYWDJGeVMxcXBSSGFWWjZuUjZZS3R3aE1sekRqMnYxU2pqWVIwQkFH?= =?utf-8?B?S3BZclpvakxDQ3BaRkdhTGxxeTc1Sm1la1N0UERRVURsVGhVMDZyYk54SjU0?= =?utf-8?B?bWhIcG5rYS9EU1RFaENtbjYyWGZQMlZWcExvY0Q5Nk0wYW1wemFPZERLYXR3?= =?utf-8?B?UkV2dnowOGZRN2pkVDlHdFI1Z2hUVm1nWXBIM3ZmYkQ3ZFRlMm5YZXJJMkFw?= =?utf-8?B?RHFSWlV4TGkrdXVUc0lWQ0I2c2tSTmdVZExTMXoreTRFUHZmdEhQejd0YWN3?= =?utf-8?B?Z3pUM0JZMG9CVngvYWlaS0dSRVBpeWtiUk5iNDQwUkhSR1Bha015bFptQ0c0?= =?utf-8?B?UTVYUWlxaXpZY1ozY3owTFZuSmFHZE4rbmpMUTNvOXBwMG5XaEdORExiczdq?= =?utf-8?B?dXRvTUVaVGJYaTFpQWlkQUFQNFpSc1pUaVRJV2dJbGNUZGhueittZ1hyaFN6?= =?utf-8?B?MHMyV3BPSHlKMXdadm0xQkYxb01BYzdSTEh3MWxTR2hlU2VSUWNVdUhmREJC?= =?utf-8?B?N3VHaHFnQlkyUFp1TGhvNVRlV1NTY0ZIVHZiQXNrT3kwZTY0OE9VZm5oOXFa?= =?utf-8?B?WXA0QzFuZjA4STFDSXUxY2xyWC9NdDQvcGtuZWI3QkMwMWRiWlRCc2FML0J6?= =?utf-8?B?SFVwS3Y1bHM0TE56NnR2ZkNwMzIwV3hFRzFJZ1ZTOENwRHhkdmhYZzBVZkcv?= =?utf-8?B?QzRQT25oSFY1K0ZHL0xxeTNqeVd3RStJTU1hMFZ6d2xJQVFRWFp5K00yMHNP?= =?utf-8?B?Q0hPVDdqMGtiQ0hSYXBzUndVemlYRXlOTEJNaGNHeXZta2pqem1iR1FYWnhn?= =?utf-8?B?WWhNZ085SGh3eFRXL3VhVHhiNk1wUDZBVFVQTnd2MFBlbCtvWW8weTR3cVpO?= =?utf-8?B?eVNRczNzVm81dHlFc1JRQjVDWFJuNWhGdEZ6clZOcnhnSDBUR1ZPZXBabEhU?= =?utf-8?B?Ujl2bVlEd3dZWGcxR0tuVW52YWtmdC9mNlNieTNEVkQvUGR3bFQ3cnJtYkFL?= =?utf-8?B?OXNabWdSQUo1WGRqTVZ0c05aNGpMZ01yL3lSb3FlZFAxdE44TVdzN201bEtO?= =?utf-8?B?ZlZLOTM1cVlsZithcEZqdmRyUmRBQU5xRVZHbWc2c3FldG9McmxpbUREcWdn?= =?utf-8?B?YnNhUHpZRHdoK2U3VUQxQmEyNnhGZ0hOSTF3UW1PZHAyQlNJWFNkRUZJOHBo?= =?utf-8?B?cklTa2YvYlV4M0JrYVlUdUM4ZVdRTzhtcm14NjhldkF5THlmR1ZWUT09?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 942a5f97-1064-4497-1e56-08de544ef083 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:35.4023 (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: qHgjzjJZQr53BXmBk9aAxFLS5mK2sZEGKZVWNtX2lNMPK7I4pkWmSYt5mT+qruymchKouS+9pm9IBxYiIsCwYw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR11MB5097 X-Proofpoint-GUID: AU_AsXBBYn6H6L6u9CVNSunM4dP5IxXE X-Authority-Analysis: v=2.4 cv=M6BA6iws c=1 sm=1 tr=0 ts=69690ead 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=9SkM2ZN-1AJx8s29AtcA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE1MDEyMSBTYWx0ZWRfXy3BZetgNjyg4 2JslpBjzbsYNy1fk8qLFQ+qzmnwcgYzHDAlBiCC04YOXYKMq8SqRuN89jf0TNAmzh/Fb0aCHIFw grV7AAFeDnQDAO3EcuSP8hLEFnWJ4dLVujiez3LRR+u4YjV7FNcr2T/3cCkIneoGtm97+ipjiaf MPoBiqsvAtmPEXSIGvN1rKzWjxOIni90PPEIQdJgZohZcC/4XEh+ThM0X1RSy/dXYSsyFRHQ6d7 jhJ1ujIIruYnmHNyWGe2EDnW1WuBJQCIVeHxYNShb/qotgsCK1ViqI/KbAkNTybj3ZQH7BTzI2f /+Rn1DnlBxS6plKwXqdLCC8vELlmjD8tb4a4+Hz2zIgoiRkZNQpk0jlDeb8Gla9ZCRBh0DJqdkh MVGl2gUKC1Zxsid75Cl7AP6AgFeOknhtjZRm9M2sc5VBzyxJePLGwFRP4wOeylqjgVR7jkDAc01 yfPeqIfMoBhl8pBc8yg== X-Proofpoint-ORIG-GUID: AU_AsXBBYn6H6L6u9CVNSunM4dP5IxXE 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 For symmetry, also convert the RX path to use socket buffers instead of u8* buffers. The main difference is that CPC host device drivers were responsible for allocating and freeing the buffers. Now they are only responsible for allocating the skb and pass it to the upper layer, the CPC "core" module will take of releasing it when it's done with it. Signed-off-by: Damien Ri=C3=A9gel Reviewed-by: J=C3=A9r=C3=B4me Pouiller --- drivers/greybus/cpc/host.c | 13 ++++++++----- drivers/greybus/cpc/host.h | 2 +- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/drivers/greybus/cpc/host.c b/drivers/greybus/cpc/host.c index b096b639182..7ffa3bf4021 100644 --- a/drivers/greybus/cpc/host.c +++ b/drivers/greybus/cpc/host.c @@ -203,20 +203,23 @@ void cpc_hd_message_sent(struct sk_buff *skb, int sta= tus) } EXPORT_SYMBOL_GPL(cpc_hd_message_sent); =20 -void cpc_hd_rcvd(struct cpc_host_device *cpc_hd, u8 *data, size_t length) +void cpc_hd_rcvd(struct cpc_host_device *cpc_hd, struct sk_buff *skb) { struct gb_operation_msg_hdr *gb_hdr; u16 cport_id; =20 /* Prevent an out-of-bound access if called with non-sensical parameters.= */ - if (!data || length < sizeof(*gb_hdr)) - return; + if (skb->len < sizeof(*gb_hdr)) + goto free_skb; =20 /* Retrieve cport ID that was packed in Greybus header */ - gb_hdr =3D (struct gb_operation_msg_hdr *)data; + gb_hdr =3D (struct gb_operation_msg_hdr *)skb->data; cport_id =3D cpc_cport_unpack(gb_hdr); =20 - greybus_data_rcvd(cpc_hd->gb_hd, cport_id, data, length); + greybus_data_rcvd(cpc_hd->gb_hd, cport_id, skb->data, skb->len); + +free_skb: + kfree_skb(skb); } EXPORT_SYMBOL_GPL(cpc_hd_rcvd); =20 diff --git a/drivers/greybus/cpc/host.h b/drivers/greybus/cpc/host.h index 2e568bac44e..cc835f5298b 100644 --- a/drivers/greybus/cpc/host.h +++ b/drivers/greybus/cpc/host.h @@ -45,7 +45,7 @@ struct cpc_host_device *cpc_hd_create(struct cpc_hd_drive= r *driver, struct devic int cpc_hd_add(struct cpc_host_device *cpc_hd); void cpc_hd_put(struct cpc_host_device *cpc_hd); void cpc_hd_del(struct cpc_host_device *cpc_hd); -void cpc_hd_rcvd(struct cpc_host_device *cpc_hd, u8 *data, size_t length); +void cpc_hd_rcvd(struct cpc_host_device *cpc_hd, struct sk_buff *skb); void cpc_hd_message_sent(struct sk_buff *skb, int status); =20 int cpc_hd_send_skb(struct cpc_host_device *cpc_hd, struct sk_buff *skb); --=20 2.52.0 From nobody Sat Feb 7 07:10:30 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 62E5829E0F8 for ; Thu, 15 Jan 2026 16:01:18 +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=1768492879; cv=fail; b=n7/K5U2s8NgQ2++KhFy5qRWOTgHh+zApLukBW3sCGjy8xI9yabPnc0TW+bN2fhWUucGQfhnkTxWeRN70pDNDX74EKa85cq1wfn8/Sadao6anQgIPUHauJPKqEn2SPuZ2jBhEuWITDVYqTg2SEAC32Xo71jVBWxlhdMdRC+9ivRs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768492879; c=relaxed/simple; bh=tVpGElNQiQQUxKnSNzK9kqZNPpATbroI1Bt88Jn4k6g=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=LDK61Eb5Hwe4wKdDdBAAmWPncyfSodUCq4LEPOlZcDsI6Kv5FozJmDtk/UcjoQRoIi6TOyzZXX/LPnEdMHRowDeziGfKkD/XkASphEYjF0dqKDPsm9aV+wmq6fJFa1KCdMJIPh0qhY+VPyYa4mUn7XFeZZgrxnSecymTX4A5DUM= 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=eg8mkWkR; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=C82pWYks; 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="eg8mkWkR"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="C82pWYks" 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 60FFldAa459480; Thu, 15 Jan 2026 09:58:39 -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=p+IFkmAgCTaDx3ezLDcQLVxUi/ttpKzkvlJMJuYwyUY=; b=eg8mkWkRxWiz EukSiJE6+O65swbUhqgOGjROoGgUFrMVMrxt1KqE/bMgBo+Rm85NP1AmpGmhJsqK cj96xJUgdZMK1IBieaGXOzWyIAHap+SMFCQZOh9Rh5ij1J9wJYPVfSE6wHuH40Tf I42zv/I8uW+7aV9Xqnf+nBu40Qgyv76XfkvwRnph+vJmhi3BK5Odnpux4FXBn1B1 6EXibzo4Mj69eduZwGYi1pwhpMwu+Zu4EqOoGjKXhX1w5kyqbPAvUDRcaJiLjIlN qo/Yfjo8F3Tm+rrxBLS0DzLovB5wqE++Q+9QnKqJacUxI6r0a0ziUkv3jnJlbdSn fkCFX6jyLg== 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-3 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 15 Jan 2026 09:58:38 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=NtJClwFXxlXStQLdPUdPEY3EMOrwIK+kUXGOcjMrsqXlI6NomY9yF9mLXQZ3g3RpOXjGLBP3uzuA1kcFwUJGjdF6ZMxYkP9N7hixO/plCkA8GCzk1smAsNQt7XgQxTXoi0I5gFTG6EBIajv2mlf1MjK4AgVgCpsZfNayLTU9LBLeLqLDJNexl8qo5z1uiy/NywYK3BhFxM+kjJryOzNlbmIb6cJz0+nkqn44gowG1l66Ogmo251HZiqR6Bm7vYpzKvOFNEizYt2NT57xRlqrQPr0fcuMtuGT3N0WPksl3fo96AbxddUd2y1rh/M0hwW5imWHoZa3DAamA3It7AIHdA== 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=p+IFkmAgCTaDx3ezLDcQLVxUi/ttpKzkvlJMJuYwyUY=; b=thtiWVxTOq0q8jbSahUPaMh03xLcPQ//C5g/zMFDvnp6FIwbgM7hOm3PKQvLXyQV0XHodJk/j7JZW9gSNSIaTWJIp8JQJLW7REFDePNhroEDB1n4DfaF+CzswPBjynR5qh+rBqj/7YvpiLPufzjpceQLJPGXiMMOJQOxGV6NMpHiYdSWB9B6AJEwG48CXB5368n4Z4BocVF7T1eHuLWK4tLBlXXZu6xywK3k5bEGwU3OJ7heUz5/fwL74/sksoNa3HxcKMs80GQO5GmAYcujlRjQ5XxIwGQ1HQvq8Z2wK6feLn/smfItygO99c7xi3fqmfwF/ahCW7nSjK4eNpMebA== 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=p+IFkmAgCTaDx3ezLDcQLVxUi/ttpKzkvlJMJuYwyUY=; b=C82pWYkscGffrqNhI4QF7FYTUOWVe0IbiextkgLf+47K1D30J3MVPFsYw7CVOhIblIrKL455of0XyZ4Y2LlhaVn0sz6wHIQ7HVdaBp9pvflE93MAQACDKqP23f4oFV34PeUQj9G0k4AdPvTY3SXqDnwNyGZ7Oqs4ma2LVOIqC04= 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:36 +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:36 +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 06/14] greybus: cpc: introduce CPC header structure Date: Thu, 15 Jan 2026 10:57:59 -0500 Message-ID: <20260115155808.36102-7-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: aa58974c-6a10-4805-521a-08de544ef10f 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?R3FSVVgxcWhDcU50M0dMblNabVpFd21XMFJFbGRSbjQwSjY0Zk9IbW13OExn?= =?utf-8?B?UzdXcDRHeXBYYXRHMDQ3V1NlM1FZTk5YS0NvQlBxcXVMRUxSbFpYZEJobVR2?= =?utf-8?B?V2d5TERTSEF2SzRGMWdNRGlGVlloUVI5TVoxYSt2d1FMNGhCMlBLTnZBb1Fj?= =?utf-8?B?ajlLU1B1RG8yQm9tcmRtcG1wRWU2WWoxdDRacEFZL3AxRm1ScUxJZVhld2N1?= =?utf-8?B?MTVMcDhSS2plVkwwcytZVGhRWmozQUZEa3gydzB5Y3FLdVNoZkx1d2JJUTdR?= =?utf-8?B?WG1WMWlzKzZpNDNTUFM3azdITEJBaDdlZHdMMzV2S0YrZ0QzeGFmTGRmOG1l?= =?utf-8?B?Qyt0MWlhSGttaHRUM2ZERVNNeWNZUGZsZVpYV3A0ZHlGTmxvRXpaTEVaZWxH?= =?utf-8?B?TTUzeVo1aWo2NCs2aDZFNERwTmZCcml5RXhmRVNXd1lRVzBpMFhUV2plcFhZ?= =?utf-8?B?aXdkai9FaTJNZE0vWlR2MGdNejV4cmd4Yk83Ymt2dU05S0lyN0VKZmVVR1Bu?= =?utf-8?B?cTVRTC80VHBNOFRxajc4am5kZTIwRzRnTGx6TVNVQzVBeWkwQzJNWTlUYzdk?= =?utf-8?B?aVVENElQMnFMSnZKTUJqalAxemU4cEpqbndOUEVYbm9Nc2dXK1dzOFVvQ0E5?= =?utf-8?B?QmswLzdDeFljdWp1bno5VGtoT1FZVlozeDU5SmljTlhtcGQ4QTJSK3dGOU1K?= =?utf-8?B?Yml4YjVJdXB6ZzBuQlNjQmZ3SkQrc1dYZkJlMi90NnAwOW1CV25RdTYrZHZ1?= =?utf-8?B?ZmhtRFFQK25lOEJ2V1UxdVVKZVlkSWFsNVdSbjFySkE5R3FWd1VOcFhiM2I1?= =?utf-8?B?NnNJZDhjUERHYWo1dVJFRWw1dXlOa21NaC9yNnQzNkRJL0JFTFBlRVRFYWxk?= =?utf-8?B?dEFyblpoYnNRMkhKOUJkcEQrNTloaWcyaHViSFlia0k2Y3dSMnYwUGVPMVd6?= =?utf-8?B?ZTNRaU1XM044ODJBeWI4MEtHd3p4V0lkWEgzTGc3aitoUER4dzJNSXM0Qzhr?= =?utf-8?B?RkUvbUdKeGwyMEpzcDNud1ZSOFMxL2tkNmVpcFVZU2FvalVkWDVVQk51eXQ0?= =?utf-8?B?MVhZVmJ4bHdTNDkzdnlaZHYyQThoZE8rd05rODQ3RE5VYUR6eFFKc09wWlVn?= =?utf-8?B?d2FoSHFycUJnVXRzSmRJczJKblFGeGptRVhtcWpLSllHWndoSkNIM2FsNEVp?= =?utf-8?B?WTgwemNqN3QrQmM4ZE1xUUI0OUZURHlWRGtXM2NGZ2pROEJoZ3g3aTVKcmNS?= =?utf-8?B?MmUyZFpQYXFwOHRFZXR4Q0RxK3NxRWRYczZaOUlSZVRxOWNwWGVMUTYwMTBD?= =?utf-8?B?dnhkUXlwOWp4MHdVSjlUNTA5RExpNEJWeEMxT1JVV0FUYjB5NkdlSDQxajNv?= =?utf-8?B?QkZFUlJJcVBoMUM2UDlYQk03OVNGckhOMTlrSUR0Y3JYMUxEcG9VTEdxY00r?= =?utf-8?B?Y09zTlIxc2lla0NNL3d1RklINitxQyt3WHpsR2JUTlloZ2g5Nm9KcGVRbkNw?= =?utf-8?B?cERialpROTkvNlBGd3c5aEtMaUdYeTNLdGYzSW5pK2pTaVRBN0JoNjFISnlU?= =?utf-8?B?SkVPRC9LZllHT1JkTm8zWGo4K0NHSlJvcTdPSWhyTVE4elVpMzh6VDNMWWpR?= =?utf-8?B?UVMzQ3FMUlpWa0wzZE5MenNrSG43azNDV1VkS1hVeUhXRXdFWTI3L2F5SmhD?= =?utf-8?B?aGhXNnRiS3NPbWMwR0h1Vm8vRDRndGxOaW9uSTMyemFEclZ6ZXptbTQyOWJH?= =?utf-8?B?ZTcreGNXSjFaWW9ONDVSK256N0w4WC9rSnI0UkdlOHBQUnF4Y1JsZTMwZ1Zv?= =?utf-8?B?d2RrSVZpckJ4S0pxRUhGMnFOOVpncEZaSjF3V0xwNXVBbTdDekgxTWV4ajAw?= =?utf-8?B?aWFuWWttNUhXSUd0NUJVdk9Pb09TOVI1ckQ3Q1dTOU1WbFU1dkFJWXNnVXIx?= =?utf-8?B?RythLzVjTVpWWUQwUVUvZ0l6TERlV0YzNVNaUUlMNXFTRTZUSnZJUVhNZHp2?= =?utf-8?B?YjdrWTJVRlB6bE1MUFh4L2tEQzFaL0FUR2hpUTRFTTZJcGJrMXZsYmZmVGtY?= =?utf-8?B?N2pPVWZVQTYyM3dhNXQzYUgrVEUzd2NITEZwaEJ6bWM5M25KYytBMkRUVEls?= =?utf-8?B?UE9yVWcvOVM0dU1RUGZSeW9sRHVobHV2ZjQ3c1o4UW1hKytYTW9hdHdsQzA5?= =?utf-8?Q?a50ZvhCW7AF66Jj5r2XqNiY=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?R1dERXRQWEVhMkZsWXFtNHlTTWQxcDhFbnQ2S1VXcjZSZXlUK2VtWDVydnhw?= =?utf-8?B?Ymt4YUllZXgrRVBFT3hnYVZEWnBJVCtmUUQzS3M4cGkweVRxbm1iRERDcXdV?= =?utf-8?B?b1dFaXFnaFBhYnJGaDFGNitsNTg4SUZLRm5ORUNrbEFsYUgrTmpDdjhBeWdG?= =?utf-8?B?VkEzS29ObnZBTEhkNmNlYU9RMDZIUXliMWxueFhJZGFCSjRGZU5INU90Qk01?= =?utf-8?B?NHgxY1V6V3lZY01RdE5aYmJYWU5wZTJQOWFaUE14YzRqclpaMlZySllIOEJq?= =?utf-8?B?eG01WkFvSDQ3RVRCSTNjWVhXeHkxNXFycHRHMmVPWmxUTncrYXI5eUdyVmRY?= =?utf-8?B?NlhzNWVpSjAzSkhiOThKUmhzRXVXc0krL3dLRGVTZUFURGVhbDVEbzMrK2dl?= =?utf-8?B?OEJ5eVBqanU0ZCtxT1Fqb2JWczdCcmhQM00rRlZNQnRQcGNpNFU4ZEMrVVRp?= =?utf-8?B?NnI1V1NUZHdFbjNQdmVwTGs2RDJuMFZLRVVWU0dua09GWW5xZVZMUEg4T1Z6?= =?utf-8?B?aURpU0VpOUZ5U2FwZWM1a2Y2QmlyUWtsSEIxeElMdUdxRStuSWNJRkxNUVZZ?= =?utf-8?B?U0lwT3BXYXdnMGdjOGlqb1p6T0JvbFVLdmtqRVVublFOMlRZbkllOGdGVEdQ?= =?utf-8?B?WWhPY2NjVUVjRlU3NURFbnUrMmpsOURKMTBXYVhuVkx4Mlk1YUR5bFdwa25m?= =?utf-8?B?bFBoQ2xvZUNhMGFBUG0zRVREczlob0hxOWdUdDBkNXRaNWlBZE9mcFlQZS8y?= =?utf-8?B?ck00T1Zkc0h6dFZpVDErT1ZrRlUrYXNGRlF2YmRMV0dxaXB1blJQSDJiUEF0?= =?utf-8?B?ZmM5MXlQbjJBYkxETzhlUnhxallWRG82d3k4OW1EZWY0ZVI1QURkNWZzUVph?= =?utf-8?B?aUNGU2dYMWxHQVlESGZCQVVRMzhjendCSWVIRFE2MmVLVWVwMFFaTDlVQ2sv?= =?utf-8?B?dWtKTzBlUDlCa0JhUk83T0Z5WEdUYVMzam5yT3dWZitORkZGNlZ0QjJWNUJy?= =?utf-8?B?ZW5nOUtWUytOK09ZSGhkRGJZNXBWTzEvbnpQZ1UrYkxGOHE2a2FZMEdsMlJY?= =?utf-8?B?UWI2OTc2Skh2NkJ1b25BTEYrTk9RaTlCdFZWdUF2V1Iwak5WaG1MelVuMUE1?= =?utf-8?B?NVN0VmtVaEdlS3B2R1VvQjRPR2NXOUF0czJqRzJ4TGtrd0VsS1JscE1IdEFi?= =?utf-8?B?SVBMQzh6bFA1WG5sK0RydFdXbU11Tzg2RDlSR0JjRks1ZlVCaFpOMXVQMnVL?= =?utf-8?B?alBtU3dvcFgxeGVnY3RWRmo3T2lXZWt6eUhWT1c1L2xZQXJyMGdBQVRHUlh0?= =?utf-8?B?cG5NNS81NXZiUjBEa1NZRGZKcmJXMU9jd1RZc2NaWEx4MmlyaWFWNjBSQ3BQ?= =?utf-8?B?ODFBRE1YalZ0dDFldnlTMFREQlJYZkF5emliUzJmMGFDVFZwUjZkL2VEK1l1?= =?utf-8?B?RDkxUHRuQkRUczNsRStxREVxNENzQ1QrSWZGa1RYNjllUE1QQXpKaTZtNEZD?= =?utf-8?B?Ym9UZWhTQ3JDZ0o3RmxtU3FYRkdUbkFWcFNrcnBMVVRRM1ZnbVEybkJLTFZ0?= =?utf-8?B?YnlNOUlRSG9nVG94OUIxNUtlV1pzano2Qm1JUFJZTDkrR3VkMStDN0Y0QWdk?= =?utf-8?B?QjBBL0VxQ05uakhTZlZaVnZ3NUorMmtrMjZ1TTUzV1R4Q20zNjlVR0dhL2ln?= =?utf-8?B?NiszRTB1K2NFWDZTemlMN1VEQ3g3aUFkMnQ0bmw3bVFrVkFYQzBHSXoyMGto?= =?utf-8?B?TGtJQzJrQjBCdFM2TWh4ellXWHVVQmYyN1Y5Uyt1blcwSytaSThOVGxyQkU5?= =?utf-8?B?c004N0w1NUt4bjlISktWeHBBSUlvNTV2TFNUbXk1eHZ0Q1ZoR3JsSEZDUG1h?= =?utf-8?B?bTlNYnhXYmJvUjJhRlIwQ29VZm9tZ3BlUlltc1JXbDZDQlRmcW43UTZ3MW1r?= =?utf-8?B?ckhwcFhTakNFb3hjdzQ0ZXdKd3pFdVB6OXFraDdrUEJVbmRwenBxTGhHelZp?= =?utf-8?B?eXlFUEM2RUMrVFdqY1JOalh4UnBETTJobzF4NGNsVmIxYmUyeEJ6UVBPOERu?= =?utf-8?B?ekV2cDhudGlScm0ySDBKTlZCMmVKNTIyUDl4NkYzWE55L0phWVR1QWZ0WGdO?= =?utf-8?B?dmkyWEs5TWFMTlkyWm1Xd0RRUHBpcUVSRUFheEdBd2ZpUUhRdWNIOUMvWUF5?= =?utf-8?B?SjFTdnF3UTVLekJOV1Y0dmtCekRqWlp5aTEwVWRlcGkvZUZmeHd0OE1zVGg0?= =?utf-8?B?OVZuR0YwbitiQVhldUQ3WFR1dnJSdzJUb0VNTHAzcTNWWlZFaFFUblNvcWhS?= =?utf-8?B?T3FEWDFFNHdTV3hKR0pPQ3lMVFlPaFp0cHhySklaaHExa21VODRqQT09?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: aa58974c-6a10-4805-521a-08de544ef10f 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:36.3026 (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: y0oKt5IaY+tfKjQhH29E+Lr5XZ4RzmRHntMx/1y66ZPzICPBPcf0eiIx0d0R7W3JnmkvX6Gkoz7M9H5hHn6JxA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR11MB5097 X-Proofpoint-GUID: ifYb2unUUwlDCKpHJT8bprw1ktf7OTJk X-Authority-Analysis: v=2.4 cv=M6BA6iws c=1 sm=1 tr=0 ts=69690eae 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=lqD4pFEZOuXrchdWF_wA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE1MDEyMSBTYWx0ZWRfX4ubrQYIUKXBu i9RC8QwC4K6DNcFgyXCl/2F9n8g1WPC9TfCH2nV1ecUkRQm/8mk2BSrb6PHYvcoHzDYfrapF8hr 5mTP5D/UcjDvEj7n6bc1rzxBJqj7QVSRSrzL0xiWEXNeYpyzNQF85kvwkErFzBP3WvWsQG5dhh+ baycEdlSR5h9/KepxObN3BnlK0b8VbKJVBL+NbNdxK2EfotGBilm0kWAd80l9Ux8Xc/5KgRueLh ugW911iFYKcj6R2BCUTxdKpMRWIQH2sYW3cY4HWdxWxdtf7IThX2yRF2VnW6Luz/sDP6+Wt7ADu aLObgLC5NjBdRT7lqZE8MqDmmt+ja/P3Igb+rSO6dZqcoLwB/JL5KrF39sPkIweql9/0cUiJ7o8 vJ9BhoC6omHAsUAA5Ax7kW9aotl5nkB6EVltKvdmQMxub0wMaKd/1Xi/X6MWxl3gI/cFORD+77X YYE1YZb2Znk/pTiqo+A== X-Proofpoint-ORIG-GUID: ifYb2unUUwlDCKpHJT8bprw1ktf7OTJk 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 CPC main features are reliable transmission and remote's receive window management. To implement these features, an additional header is needed. This header is prepended to all Greybus messages. Reliable transmission: to make transmission reliable, messages are sequenced and acknowledged. That constitutes two bytes of the header, one for the sequence number, one for the acknowledgment number. If a message is not acked in a timely manner, a retransmission mechanism will attempt another transmission. That mechanism will be implemented in a future patch set. Remote's receive window: the remote advertises the number of reception buffers that are available on this cport. The other peer must take care of not sending more messages than advertised by the remote. This is a sort of flow control. That accounts for one byte in the header. The remaining byte carries some flags. For instance, there is a flag to indicate if it's a CPC message or a Greybus message. Signed-off-by: Damien Ri=C3=A9gel Reviewed-by: J=C3=A9r=C3=B4me Pouiller --- Changes in v2: - Minor tweaks to structure documentation drivers/greybus/cpc/header.h | 44 ++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 drivers/greybus/cpc/header.h diff --git a/drivers/greybus/cpc/header.h b/drivers/greybus/cpc/header.h new file mode 100644 index 00000000000..af283fec492 --- /dev/null +++ b/drivers/greybus/cpc/header.h @@ -0,0 +1,44 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (c) 2025, Silicon Laboratories, Inc. + */ + +#ifndef __CPC_HEADER_H +#define __CPC_HEADER_H + +#include +#include + +#define CPC_HEADER_MAX_RX_WINDOW U8_MAX + +/** + * struct cpc header - Representation of CPC header. + * @ctrl_flags: contains the type of frame and other control flags. + * @recv_wnd: number of buffers that the cport can receive without blockin= g. + * @seq: sequence number. + * @ack: acknowledge number, indicate to the remote the next sequence numb= er + * this peer expects to see. + * + * Each peer can confirm reception of frames by setting the acknowledgment= number to the next frame + * it expects to see, i.e. setting the ack number to X effectively acknowl= edges frames with sequence + * number up to X-1. + * + * CPC is designed around the concept that each cport has its pool of rece= ption buffers. The number + * of buffers in a pool is advertised to the remote via the @recv_wnd attr= ibute. This acts as + * software flow-control, and a peer shall not send frames to a remote if = the @recv_wnd is zero. + * + * The eighth-bit (0x80) of the control byte indicates if the frame target= s CPC or Greybus. If the + * bit is set, the frame should be interpreted as a CPC control frame. For= simplicity, control + * frames have the same encoding as Greybus frames. + */ +struct cpc_header { + __u8 ctrl_flags; + __u8 recv_wnd; + __u8 seq; + __u8 ack; +} __packed; + +#define CPC_HEADER_SIZE (sizeof(struct cpc_header)) +#define GREYBUS_HEADER_SIZE (sizeof(struct gb_operation_msg_hdr)) + +#endif --=20 2.52.0 From nobody Sat Feb 7 07:10:30 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 C8A5729E110 for ; Thu, 15 Jan 2026 16:01:17 +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=1768492879; cv=fail; b=YTmqh2TVNR0AuKrcgl+oeG76pWphg//hi4e3xkvXefq/2bm4fzz5OmvHqM+/h/nHpPZHMa3vs5bYAug7yq9xdy9UgU8hXDFicU+OXe8RUqi9I2XJPG/bDh6URbS4z1yC/MDLjBB5ZZdUR+xmLQGgQ3mWwBZjq0z4nB80bih2rig= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768492879; c=relaxed/simple; bh=zKLwH4WuKkdFLrJkIVy+LdJ68UeGA9DfvCYR4UZYnBQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=CRxRCTZm6TfBR85oPIec+t1CBLJFHW+sEe5D6c6mAW3mmE9adNKI3BvQBmU5GiaTUctg7dVsNmq7bs69OHGSZJe2A8QdIA8E/UM25GMBV3dgy4s7dcpvpLOO9nrpHlkw8JUh1lwkuuz4GF6xH65bD6orx0HqYb6TGugg58+vcTk= 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=FrMDQ1/V; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=ZuIElHk+; 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="FrMDQ1/V"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="ZuIElHk+" 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 60FFldAb459480; Thu, 15 Jan 2026 09:58:39 -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=4UUFiuAQVvwsKF34VeOpgP2we7GeTaqXNPs8IDp9j+o=; b=FrMDQ1/Vba2e EozTwGhQdh8CUUxNJGSymuFke1JD/jJad5sXUecwewn6hcy9CbrPUYINpbIFShho cFt1SHgMYt/fpRgEboZLn4bVQrzzC6Dj6BioUj4rsRYLIteJzEGG20bZteoHf1TP AHqR8giibtxc3K2KNOJdaaToGQNP1YUP3oVBIzMzBkS14BaPK+uCRIuEkycKzgc4 LFrOywNAp330sI9FBL3ClOUOmz/nDBVJFVlg5nKyrb/1c+429L3GSLgzOPvD0oAR aRMAMf1l33vVUw4H5VicphR9fRjF4ecYTVnS+UxQ9faLWUcV1QWz942dXT+4SSVG AAMX+NR0UA== 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-4 (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=vONvygD8XILPKQQjQlaiREp0chUwKCcvg/XuV4+eHVs+3PfqvhXWSyB6Q/o6lYD0ebDEKUAQ0kZl6DJCPk8evV3XrEITZeHVgSjSJfpvWW93D1OOBzzGvRvaqqMDceOL0sYjcpyTc2tmMKSjZPe6cgl6aqIRbyzgOi/Qx6doSYnRpTnUiP5fkvHK2BzodaU0ikP18gWmryyoOsqVIDpwpaS1R1Qrsf/t8Wwbo7mX55q0NNOxnYBrcOih4z1AO4xzmVooNH+qH2ZLaopG3K/QtuRUxleVLmex0X1xNPvS+taHnNwZi864zhtj28p34QluqlAZj6G8PwvVbWhgBuHcEA== 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=4UUFiuAQVvwsKF34VeOpgP2we7GeTaqXNPs8IDp9j+o=; b=iSWF8RtAqYqwx6Hkts7liRomvrv38oaJXxeEWxTP6x8A6s3W+7/C10qu7aCN/mwy9+mlxjEFmjrON3Uuh3JnI/jYOWht4mVlTNu9dQOe/ksY/ZMWcpQDkFHPmDnbKyYwMQWv0E5BCyKLIiAPoH3cvoA3Jhil8ZLmqQPORD7jbw4WQFKA9MtJW3yxEuImPxn1yaQLHsNKTVnnOeZ9zrfrEaDX9X/sPcJWYO5kWmK8lb0UrTjQ5LnKPxcZ/D7Qt0liNC581Dz4KPZ/N7l7YqcW3b2vxGlnlnytoYxKeFQmDttyJjyv6c0WJ3uKXCKiyrgNK833KSdgs9mxPoC6nSl83g== 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=4UUFiuAQVvwsKF34VeOpgP2we7GeTaqXNPs8IDp9j+o=; b=ZuIElHk+ZXBDDMufriil0vniHNC+88sozfQLy9DOnHQB3eH1y+bv1Eoo1IgODIJ6rYQVz6k7tUkaikBkblCQyw44DU+hLscbWFpocdDkhXDlllNYXWm1eMsiS1qMlk8fXdAaF7/ejXV+zh4j+Dn5/Y0BvGcPAoQxnLshkylnbgM= 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 07/14] greybus: cpc: account for CPC header size in RX and TX path Date: Thu, 15 Jan 2026 10:58:00 -0500 Message-ID: <20260115155808.36102-8-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: c9374746-7733-4f7b-7865-08de544ef186 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?ODc3UVh6R2RlQmhTWFZWY3NUZWVjNTFlNElLUUZOcnpBWjFObWhLM3RiVGNx?= =?utf-8?B?UHNBQ0k5UE1EaWJ2QlVyaFo1dk9xeDllUzl3K3ZRTHp2TXhucFZpMzlWUjM2?= =?utf-8?B?dkNySkh1SkduTUtNUjVRSVUzc0xFbXI5UGNrVDBQMzJ3VFNYME0yeUJhYldr?= =?utf-8?B?WmFZUVgwcUttaVNYY0xBY1lZMUtxZ0lFL2xSWk1ZZUMvSllEaHJ2d25GRW42?= =?utf-8?B?eU1HNGI4MlAwNmQ5LzVWeGJOcmFXVFZtZlJJeUpGKzNUNi9MWkNHcklMR3VS?= =?utf-8?B?NjllalRRendkU084RE80M2w3VWFuZmMvcVpRTjQvMHFkS3lLSmxoM1RnVDJE?= =?utf-8?B?N1ZrNHZMN1Q1b2FFeHNQcWsvQ0F6V24xaHJPemlPTWdVUm1odUtFZkRWYXFH?= =?utf-8?B?NXREQ2taajlHeE9EK3VQaFdjK0lVSGlYQTRPL0p0OVFQTmF5Q245aHBqTmJ1?= =?utf-8?B?dGt2bWxNZTBtSzZRWE1iUUhLK3VhelFza0dncXJUVXQzdTFzVnI0TUV5VU4w?= =?utf-8?B?QWxxMjMrRU1uTlB0cW1oVTl6dGp3dGkvREE2T1NkU0RnUGx3UG1XcXNDeHNh?= =?utf-8?B?a01hMFFoKzJlb2p1eGtVVEhNVWZQc2ViaFhBWUpCeXlGaHprTnlrZ2Nkd2RB?= =?utf-8?B?cXJyd2o4ZTFaUmpMM3BMamRnMm93RXJuREdxS25QMXBESDJiUDFBT2dOUFA5?= =?utf-8?B?NEtZbjN5b09KbHRKbjU4U3FQK0xDZWNhMjdHa0NzdlFkOHdkVXJhQlVySmVp?= =?utf-8?B?dGVVMUVaYWg5THFXNFdZb0VoYzZLVm9lUURsU081QXpEOVdmRUVpUjhJTGJu?= =?utf-8?B?QjBnVUUrSHZtYm94R21GbktlSFNobDM3S3Y4aE84TjB6YnhrN1RuNzhiMnFZ?= =?utf-8?B?ZFRuNm55SWdXSVBIOFRHb2c4bXJ0a283ZTl6VWloZ3VEVWtMaU1CbnFoY2Rh?= =?utf-8?B?b042clc2Y1M5TlhQVWdoRVBWS0hVRkkwQ0F0allQWkVyVlEyTFlhSUJodjU0?= =?utf-8?B?ZXVNdFFXRmFjM0tBOVhFOTJ1ZkpmNklOakZUK1hjblNIamJaSWNjazcrY2ZO?= =?utf-8?B?N0JVQzM4NjRUWk5Ra3pTNzlMOTNsUElSQ2dnbDFHWUVIQ0FWUmdJZS9TUVhE?= =?utf-8?B?M1VaSlNkdWhMdmNVMlJyUUdJU3U1MnJ4d1RneVU0YWpQU245eXlOeUU2U3Nx?= =?utf-8?B?Q0xBcmNtVGdjek44WFNwNGZJdFpZMldGYzVWcUsxN3hidWo1TnlsRTBMZ2dp?= =?utf-8?B?YjdRQytxYjBYbHVpM2FsY1pJdTBZVmlQUkN3SHg1Mmpadkx6NGcxZHdPU2h5?= =?utf-8?B?SEFWb1hndEJzOG9lQ2VQRzE5OXhUR2xxOFM5ZldwQUtJNWE1ZC83KzlIQ0Nj?= =?utf-8?B?Qm1Gdjd2bHVEcFJ1RGUwTmg0RjRIQWR3c1g1VjRWa3RrZS9YOGM1OTIvMzNh?= =?utf-8?B?Tjd6bW02M0IwVExEUVlGUmFCekRobThtV29ZekZaVk1tSGJUS2s4Tlh5T2pB?= =?utf-8?B?azlpM2VqWG5CS3U5ZkRGVEE1NEpiTVcvUmExNGt5Q0JVbzNwL1NkdlMyZTM0?= =?utf-8?B?VUpPRE1wNGFKdmt4STI3Tk1aTEZ2TFJsR05WTlY5NEcrNnNZM3hza2NWWm0v?= =?utf-8?B?VjltckhIdnhaUGw2eUZZTXBSeDd2ZUJReVIwUGFpQ3h2NHJyb1ZQZDRwdkRq?= =?utf-8?B?dzNCcVVsbk1yOFFtaUtvaHRuclM4ak9hbDc2MjYrMlp0NXFqQW1ObitRVmd0?= =?utf-8?B?a2NoREVTbXEvakVvWGh1NXlNMWwxUnA5R1lHTHllYTU1NU0rb2hqdkFKb01y?= =?utf-8?B?Q3l3Ukh5N2FVMkFTeUtIWmxCV01wUTJmZElvZ0FxVWZtWlRFS0hMdmM5S20w?= =?utf-8?B?cE54cWZzV0NxeHg3RU9kQUdxVWZyeHAzZHlobWVtS0h2cHJSTEhPZzJucFF3?= =?utf-8?B?TjdhUnU5ejRHcmVwdGhWK2M4VFZsc1FFNjl0Y0dLVFhQcHhJbGNJQ3lNa3VL?= =?utf-8?B?a3JIdkFTWFd0aEJ3UkxDZ3N1b1R1c2VMU2NWeWZ2aGZFYUFnYU5qbCt0dDlx?= =?utf-8?B?dWliQjBPM0RTVEFWUHNyMVNLTUdoZ2kzWGhERGI4cm5nK2lOTlQwKzV3eHRs?= =?utf-8?B?dWNrSTY1UXFmell2UnJYM2xtalByWnFDUU5RSGRaMk9UeGZWODdhRnpRTzV4?= =?utf-8?Q?0pqTMVVV72/CnycWSm5aFPE=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?Rjd5dVZ0dFpUaEJvSnRNeC9iN2t1RmJzOEUwdDNHQk03OGdjTHBCekNGWmpa?= =?utf-8?B?UDdDZXdPS2Fxd09mMmM5SGorMkdUaU8wTTh5UjZWamY0cWdzamliRTVaUkhX?= =?utf-8?B?OWJua0JpOEpqMXB2KzYxVHpDdjNoMkNINGxtNTFsT1BtRVFQeFBMMHRmTUxK?= =?utf-8?B?Tm1jS0dsb3pZYjJ4K3AwWEptbWNZRmZTUmNqc1VEZ2syeXZwTE9WZENPTzR0?= =?utf-8?B?dWFibnppdGJJY242ZzNzNEpyU1NtK1FYYm1ZdWJ2eTVqVWRhOUhmOFRYSnNj?= =?utf-8?B?QkVKU3VJcnhRVHNpNFZ0bFN3NUxHcVZxYWJ2cDNMY0VoSWcrK2xNbXZieGxa?= =?utf-8?B?cWdlRzVOd2ZSUVFRSmVKQXE5cWdBSmZsaXNmQ2VvQkNWTWg3MmdNZnpMaHhB?= =?utf-8?B?UWZuRE9HblMxMFpwcC85a29mRjlZajVJY0lKaUtveFAxSjIrVGZEVkcwdnNy?= =?utf-8?B?RmV0bFZPNlJmRjB3cnNraFdEWWpWMzhzZ1R1UklzNDNHeDRwZ3Y0WDdXdVZm?= =?utf-8?B?ZU5DeG1EVFFQMlZrZTZCRExQVEErV0RLWVc5Ty9GSnk3WTBuSm9BbDhFZys5?= =?utf-8?B?OVRXOFRRWW45MWYxSER2Slgra3gvanE2SlJtUTVTQ1VjWDJDeG1aanliMHEx?= =?utf-8?B?c01zVzU1REp3blJkSW9rZzVibGwwcS9JTjN1RzA4M2ZGQ3RHUW9icWxyNjFV?= =?utf-8?B?WFhabWZGRGJ3QngwSy9iQUp6d0lvdEJKRFJvd3cycjNpTkFMSDA5d3Bya0dz?= =?utf-8?B?V29NRlBlNGxIZ2NOcDg4S3hXM1ZwNmxwdmRoT09CQXQrVkhjd05tYXlMVlpU?= =?utf-8?B?bVUyVkJsWWNPdTcyclQ5b3dVTUhCMnBhQU9SYjlFZUZwQUVyZnRnUUczcHN0?= =?utf-8?B?dngzKzFYUm43RjBpQ1NEa2pHS1BqT1U1QXFDYW9MTVFTZHo4WUNXZ2VPMjNa?= =?utf-8?B?STFVdmEzN0crRTFrMjVRcm1vbkowY2FObGQ1elBBYVBRUElQRnV1Tjcybk9l?= =?utf-8?B?Y2RjQzloL0lVZTlBM0tBY2ticEVNYVRaRGRLS0RmRDk2UDZxY2MwWlNtQTJX?= =?utf-8?B?STJBMWdRcTd1STk0QU1YVjZ4V3NsWEs0WXhlSjdYV0RsYjNkUkJlR2FvcEtQ?= =?utf-8?B?S3Q2bmVINFpENkRnR0dvYkFYMlI3anVyQmZHNXk1QXh2bHRld1V2YjhoYXlP?= =?utf-8?B?K3JMNWdWR2JzdlBSNGRsMWtMWkp4N1ZMVzdNNElOSDFOZjRtRGZtOWpqMDBo?= =?utf-8?B?NW1nanlONGY0eDdBcVlUek16RGxPUUlsMWdzMUFPaHFQTzVyRWNWWjhEdG01?= =?utf-8?B?OTIzT05CenMxcXFYa3VCNkwwVjlIYTVpako2WFh1OGxsSkFqU0lyeXJ0SE1G?= =?utf-8?B?UCtUNnpaR1Ftd1dtL2Fub1N0cmJjUFNUZS9PWERIaWtOTDB6UXdYMzRMUEhR?= =?utf-8?B?dEZBYmQ4ZlBsTWRtOU5ocDMrTy9lNnpYUm80eEw1eC9sWStEMkVTNmoxV1lI?= =?utf-8?B?NmtSbWUwSzJoSnVXZ3E3TEw4KzdDQ05PZ2FHeWRUcmIvdWtMRmVwU1ZVMUlC?= =?utf-8?B?OWgzWTRTbHpuNk9WS3dhYWsyQm5Qd2JmVXRhamh4TUQ3ZXQ1VTFOdDE2YjNw?= =?utf-8?B?R2JzM1F5V3lqc09uc1ZNMWZ0NTVjVyszTjBCUnMxc0pxaVZTSG9XTHZnVHpV?= =?utf-8?B?K1BDTXpLQzJNUWpTMkN1b0lFeWZaRDQ4OGtRa1NVRFJjN29qUjJFL1RPU0Fw?= =?utf-8?B?djYyQ1p3WHlDbHZnaWNTenFGRGtOVUZHYWlTVHN4VkxKS3ZEWDY5d1BWTXRO?= =?utf-8?B?YnNYWERaYlhlOFQ3UWVmeGM4MVlmRjRXdTN2VFBjNGJJOE1UaThLZ0dPZWcx?= =?utf-8?B?L29FdDRQTUsycU5zcXB2aDFIWFF2aW9VRS9BMTFGODNLd3h1S0ZBVjVndno3?= =?utf-8?B?NnY1a2ZwRHI2bHNLTEFUVzcrWXFBVnI2ejNHR1YzRGZrS3JlZ0lCK0JvU2xU?= =?utf-8?B?UWUvUEdlQUY1WHJiT3phSnBseFdTaEVSckJ3dkdhSVNDNUNMT2RkVXZTbFNJ?= =?utf-8?B?SEsvOTlLVmRSZkZXV3pyRWs4S1lHdnNEZ3pZOS95WGIySklqVjJPaHZUZUp6?= =?utf-8?B?YXZYcUx1dVptQllWREYvUFBpNy83RmY3MVZjTGNZb0dvcFU0Q1N5bHIwb2hI?= =?utf-8?B?REgvc3RqbC9mWE50blVvNkk4bkJ6TzBTZ2h6RFI3ZWM3T2pNR2xKdTRPd0p4?= =?utf-8?B?T3A0NGRWbzRLTVpzalZsM0xvVDJNeU9DUzRIVWVBQ2E0WnFOUnJwT1ZocmxV?= =?utf-8?B?QWlCT05QT3RCMXFpK0pZaCt4akIxMmtWYkdJanA3QjVBdkJGSDFPUT09?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: c9374746-7733-4f7b-7865-08de544ef186 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.1072 (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: SOS7XAU204ZJUowgrr5eChfqWy4UuBnyDklGEP06agKcNx3+/EVtFQgoVLyp0u+mTfvaBCYC9WhLwiBmlgB9uw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR11MB5097 X-Proofpoint-GUID: Ka8iV4zXW4vjvBhwmEXKK60Pri2BfEcv 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=d28r9nv9ZyHOM8R9p0gA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE1MDEyMSBTYWx0ZWRfXxZxnOLTzhKlz 4CfPQh5vhb/H9j+S9eQKlei6z71nIRmPwo5tM4nerpHqnIhhu6Uz+ZMEz+Xli46ytsW2+2onZJS hn+HBL8mMlNNTFJfT22RllLNWWhplfIm1JYSpQ5B7ddBrGbwvZzBW8bU310LsgqwjvqB3FrUm56 GpWDbv5EogmpH6AEQ6ZOBms9/zTRlekNQSf5N3n9C3KXeALXLNc58YXL9ucUZO1b6+J/OqwdHO2 wIgRVJgZBSxT3N3+Fd0njZLPL1MurjxVpBs52d80Mdl+uChZrIVFO2zm8ZUxNk9ydObeuw8cN6B GdnuhYQu2KQnM2RLr+XVui4gDLh/Ztb8yeNHWcNn+5rkv64ttd4i0Z3Dek9OXsnbyxPKJ20j1oR fbQYwQESg0m730pHqd3+NyoXqSM7I3KQxeyYcp692Prxg3fMNOIZBgKLexPbeMC44xcMYZkTTFX JvrZUfeisp8VAJGyUgw== X-Proofpoint-ORIG-GUID: Ka8iV4zXW4vjvBhwmEXKK60Pri2BfEcv 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 Account that a CPC header is prepended to every frame in the RX and TX path. For now, nothing is done with that headroom but at least bytes are reserved for it. Signed-off-by: Damien Ri=C3=A9gel Reviewed-by: J=C3=A9r=C3=B4me Pouiller --- drivers/greybus/cpc/host.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/greybus/cpc/host.c b/drivers/greybus/cpc/host.c index 7ffa3bf4021..c89617623e8 100644 --- a/drivers/greybus/cpc/host.c +++ b/drivers/greybus/cpc/host.c @@ -9,6 +9,7 @@ #include =20 #include "cpc.h" +#include "header.h" #include "host.h" =20 static struct cpc_host_device *gb_hd_to_cpc_hd(struct gb_host_device *hd) @@ -48,11 +49,13 @@ static int cpc_hd_message_send(struct cpc_host_device *= cpc_hd, u16 cport_id, return -EINVAL; } =20 - size =3D sizeof(*message->header) + message->payload_size; + size =3D sizeof(*message->header) + message->payload_size + CPC_HEADER_SI= ZE; skb =3D alloc_skb(size, gfp_mask); if (!skb) return -ENOMEM; =20 + skb_reserve(skb, CPC_HEADER_SIZE); + /* Header and payload are already contiguous in Greybus message */ skb_put_data(skb, message->buffer, sizeof(*message->header) + message->pa= yload_size); =20 @@ -209,9 +212,11 @@ void cpc_hd_rcvd(struct cpc_host_device *cpc_hd, struc= t sk_buff *skb) u16 cport_id; =20 /* Prevent an out-of-bound access if called with non-sensical parameters.= */ - if (skb->len < sizeof(*gb_hdr)) + 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; cport_id =3D cpc_cport_unpack(gb_hdr); --=20 2.52.0 From nobody Sat Feb 7 07:10:30 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 Reviewed-by: J=C3=A9r=C3=B4me Pouiller --- 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 From nobody Sat Feb 7 07:10:30 2026 Received: from mx0a-0024c301.pphosted.com (mx0a-0024c301.pphosted.com [148.163.149.154]) (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 725822BE647 for ; Thu, 15 Jan 2026 16:04:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=148.163.149.154 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768493058; cv=fail; b=Da8FDQtDxMpBOiNU1LmxkI6ETgaMvPWLCdRCfM4lP0lCeJUfs4Ta6ZZl3f2twzY7A4lZcFHc2C5V28gSbndK+Nimg2Dfz7fshBFjNUmzhSyWQiauAcMQu+2lyU70Ok2OGh7VNAXnnfQsjCi3R/zSXMHR7CKrhH58x/3HBKogGyY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768493058; c=relaxed/simple; bh=depPCrrMTMIGQzBM1enPDErzKqWElv6iWthab/nWTzk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=UOryo0VxoSUTFhE0oF9UOs97SUE8un5RI5OCdIWVIh/+BAAO0bPyhZJ5dqemDX+GFv5VemoZ2Xx22Dvmd6IHNaYJqw4KlqOeWvNE6oEF0JEK/4/UK0laEDFyd8o/fGgvOuR7iZVAIYEXXDc8/kerTe5xCcuA81FKs2dUuHbd024= 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=ZzCL3tob; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=Lz+ln9ab; arc=fail smtp.client-ip=148.163.149.154 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="ZzCL3tob"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="Lz+ln9ab" Received: from pps.filterd (m0101743.ppops.net [127.0.0.1]) by mx0a-0024c301.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 60FFjDIl816853; Thu, 15 Jan 2026 09:58:42 -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=NF9Fix4akWYhRnKTew2dRhK//VMugnWNAlORiL4nc68=; b=ZzCL3tobpSpN FonShHOGfSmngFh9vuF39D5e/5oqTmobXyrZGaDXa1wIlt0JBIUO7Q4YYhTw2ro7 MH+UCQhJrbOUYzMlJhShhLMltOH+z35ajx79xGjCoPUcMShwinmLGvJrvTAHL2UH c6la2jltD0sLaS+h62LcuwUC+HsjnJQYXJMcnp7tDlNBXnegpjftBCTpAiDpeEcX 57bFoz/rpK9JH/F0kBX6JY7SVd0wMrEe8ajJ8KEJ/o8KUAcsJEBGSI2tFrTvMg4M kNtH3bsd8v9TFjCeyT154NfG6TW3f8lcDjTFCwPZ5Szln3B7X0QSa/+kL6+Sbhd+ nEwaS0bupA== Received: from ch5pr02cu005.outbound.protection.outlook.com (mail-northcentralusazon11022104.outbound.protection.outlook.com [40.107.200.104]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4bq35hr13w-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 15 Jan 2026 09:58:42 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=yGVq4ujB5pLzuB9qJWiyALPnSzVk9HNscZMz2QjomOaF7AdSPZDLwuRvYhETlIEIRMRoRW4UE8vr4k4mqOM6+B/9MiFr1HGGZmVaLxurVMW2yCivLPvENXWmPCZhVzZcv/J39gakZVBunmrDCrAam6wCg1Aptp85o3TQaHlDuoA4rPZbd5lncObcSMDVGz5OiFfrTQlORNslfBXlsfznQzBsolYJyTIPUzQ3VYjtPtXyr04zf4zZjazjxXZG23k1hCaYW11AbybhcjUaeQurkkdltRdmGbCi7QlCoHBKIS/zc/Cady+5++7DlQKjkxAamabQEiBQEltkQ/khbppjjQ== 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=NF9Fix4akWYhRnKTew2dRhK//VMugnWNAlORiL4nc68=; b=RHoQS6Og9KA5VLUAEJ80o2NqsqzMwGrOnxvVPe9+X+AGmLlVoHAS+7MOu/jlLQ3jw65hqI2khox7O6z10hrbu5SBqjLPnnDepBpXJhSyAnY5HxCe1OS38iahGmb5QnTHIO9W2GFQr65Y8ILRMQ60uo7AmhrBaM0Lvxudh8ncT3fDLjJDPJgCQwalcmfE4t7DipH6AX3400nMigGbcK7J5q2SUs02Ot8DSNtMx/j1tNvur19PAg5uHfHnu6FV9Ju2iC4i2sigs09HZjj0iLCvHrh/SWR0HYyqwmToFi6b8wY9cWyR8QAc9AaIRK8LJitCKD99RT/Y0af1f69RJ8h3kw== 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=NF9Fix4akWYhRnKTew2dRhK//VMugnWNAlORiL4nc68=; b=Lz+ln9ab7lVUhWMeVpcQkPob1GXi6gnL0ts/uMkl8YVoUZAr8a9h3dFNAOC1OXWlh5H06PuIdHJn+qGc9kJHaVcFHoPcrKhPSiopXw4Y/MN6SnImbayxb5jrqb59ixwJN57+vqYPXYvly4/6ZvHvZOOi37OyxxVPtGUwLetMFRo= Received: from DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) by BL3PR11MB6457.namprd11.prod.outlook.com (2603:10b6:208:3bc::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.5; Thu, 15 Jan 2026 15:58:38 +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:38 +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 09/14] greybus: cpc: acknowledge all incoming messages Date: Thu, 15 Jan 2026 10:58:02 -0500 Message-ID: <20260115155808.36102-10-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_|BL3PR11MB6457:EE_ X-MS-Office365-Filtering-Correlation-Id: 505a6d24-4c6e-455d-2051-08de544ef279 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|52116014|376014|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?YWxoSGZackE3amVtVHQ2a2ZRWWFJL2xheFRKODBuQ0NzQXBkc3ZrcDB4M2RT?= =?utf-8?B?S2FVZDBHSGlwcmRjUDllWk5aVzZ2QzRMWEp6UVkyWklRbUtzTW5mYktFNHgw?= =?utf-8?B?eU8zQmdkUDN3R29tWnRUcDhRaGRrbmhuWkxJaXRQa3g2bXQwSGZzU0xkbXFQ?= =?utf-8?B?Q3plT09od0pXVzY5bE5kUzBxR3doWTFPOFdxekZCd0hFRXBYWU5xOXdqRjNO?= =?utf-8?B?REVEeW5pazVSSWJCVTRyaE5EUHlWN01HeFZJNVErTFFoTUxsR2Y5Uk9UNGNC?= =?utf-8?B?eklhU09GN3NnQmNiTGlQT3dwZ0RoY1NqLzF2dy9hSDZoWFVJdko3aXFFZEJ0?= =?utf-8?B?UUExc2tldDFFMlE3UVpHUE9vdjVjTVIxVHBQNGZhcThJMmVBOWFudHVTNlZs?= =?utf-8?B?QS9kdzZnU292dXVpalR2dTBhTHlwNXpqbEd1N3M3enZiUXp3dTNXaXM2cW9Z?= =?utf-8?B?QUpsQ1pucVEvazFzTDRYRjlOMlhHd0cwb01mQXk0RW9LVGlYaVZPSkpCaWRN?= =?utf-8?B?cmhwL3pxTHcxamVvYmlWaHN2dXUrRFNXNEsxN3QvbE1OUURVWGRGL2xFZDVz?= =?utf-8?B?UGxXZjEyT2xXRzd2Z3JLWTdaTEFUajdqaVNCcThyVWhIUnZ3dkdYRHJaYVkz?= =?utf-8?B?dmtHYkVpTytPbE1KVlEyN1VkUHExT1h6c3hBTmVUNU0yU1Q4dE5OTExmVW5y?= =?utf-8?B?UWF4MURsK3kraFk5WFcvTDkzbCtHWmZySThXZmtXU1o2Wk9OSWNGZ0hjR2ZR?= =?utf-8?B?OU1WL3FZaFFvK3RWWnk1dUs5UTZnaGMwejMvTTR5UUZUNXhUeGxPOXJyQzBt?= =?utf-8?B?K3F0S0xmTWYxbFNrSTFkRmt0SWlYbTR5L1ZoN2VBV3lqUzFWUE5wbnUyWXBD?= =?utf-8?B?bEcxZ0ZFOEVnMTZxK1FxQ0VrekwvYmFSbmFxMUtDYk9jRGFONWVKanNtaHY0?= =?utf-8?B?NCtuTitxMjVlQXNlS0VNeFBUb25OdG9VRGdFNEhscExYaWRQaSthajVYODdK?= =?utf-8?B?WmdYSTYrbmhEcXRmZjU4ZmJTUDBNZkhMNmJEVVdBSDNoSHp4VU1uT25mSUZK?= =?utf-8?B?ZXJOTXplZGNVUllVSFc2UWk4UUNDRVR1OGJYQ2Y1K2hFZjVyWHZLdlRPRDBI?= =?utf-8?B?d014OHBjOTgvMUQyYUpPbTZmck1KejVoeTExRFRTVERTUGJTcXEyWTE1S1dP?= =?utf-8?B?TlNOZ1VhN0ZLZ0o2ZUovZEk5U1J1b2pNVk9qNVBSWDBicDZvQVg0YmVOMlpB?= =?utf-8?B?SEtmcWxvd1RvRno2OWFhc3V0SHdiZDAwNlNlTG5adHdLWGVyMVdtL01KSlQ0?= =?utf-8?B?KzBpMVlWZERFWmJtaU5XeTcwcTRXOEtDaW9LN0pJY0xKbGg1dEUzYmF0OGlT?= =?utf-8?B?NDNIK205ZTZkUVpJWWc3bFR3djVvb3FtcFhtUjFvWFQxZ2tuUW05a2lCZVhp?= =?utf-8?B?SDdVSEgxazNyMTdBaUk4MkNkWU11Zi8zdC90L2N6WG5HVUJsRzVTOFBicG1E?= =?utf-8?B?YTRxTTV5UXpqWDB6TGJIWklJSG0rRUdldU44VGRBeHkzZFVjQytQd2ZPaDRB?= =?utf-8?B?cUtjMG1ScldtNDVmMks0aGJVN2R1V2VsTnlwcXNyblFORThPQkcvZDhWZ0F3?= =?utf-8?B?KzdlcWFNeXpKTDlsOHVzU3BCaTM1TkZqaVdxNDBIN3J6RVJoeFVYL3RCalNO?= =?utf-8?B?eExURm4yMVN4K2g2bnE4azU2WkFncytSOFJqemZSdGVPWHdraDludWtPU1N3?= =?utf-8?B?S2JSU3NVY2NxOFpBQ1ZWRFlaZnowUFJTRndYVlM0RUFpdm90elgrcjdhcGNU?= =?utf-8?B?S3EzcFNZbFVUcDRZaWNXYkZObXZRSU9FRFBWQTlOczkwVzZsWjFhUGJ0TW0z?= =?utf-8?B?NGdTSU9oQjBtaWsxeUJuU0dpbkp2M0dJUDc5eURWcGNJREp2aFZoS1ExdlVS?= =?utf-8?B?cG9QQkl4akVPd2dNVWlLNDJMR25mR0s1MUZia0hEMVpLc1RkMHRocEZzSWNK?= =?utf-8?B?dUZraERsTXhQTXhxTUNza0hlclpZVGdiek10NHF6K1NTSUd2blErTERWd0Ru?= =?utf-8?B?UGE0VmpxVmhETHhsYUk1b3ZYOFNuZnV3OVBJNG1IcTM2RWxRSS8zaGQ5Qk9u?= =?utf-8?B?ZDU3UjdRWk5yMnZkMFcwaGc4elo2NjRLbHZtTDdqSk5mdWdmN25CaGppbkhx?= =?utf-8?Q?JfkXDlBpnPqfJtOfQaP2Oqk=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)(366016)(52116014)(376014)(1800799024)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RnMwYkJUejBiOTRUSFdXd29kMjl1ZW9GVHlmd1Y5ODBIUUxsS0NKcU1TeEZ6?= =?utf-8?B?blMyYXlwVUFKakJxcWM5cTg3TWZOdDI4ckwvVlJvYWVWaVpkYmZKd3lPdHl4?= =?utf-8?B?TFZkNFhaNnhvS0ZxUG1PWDNuYkhpMjlpQkY4VHJ6Y1dWOXFnYXdUdVpXdlFm?= =?utf-8?B?RkVWZS9BN1F6UWZPN1J1NGRHbkZ6U1dMN1A5eWZJYVJuRUszR1ZsQ1YzZTdN?= =?utf-8?B?WUZlMEp4bVFRdUpKNmtGV2wrdWluRjZBTG9ubGpaaHhoOWpOeU80cEtkemRO?= =?utf-8?B?aWZ0a29FV0piUXE2eFlCbnN4QUlqMTdOZkNreC9OUktQNGdHVjg3eTNsUXEw?= =?utf-8?B?NUdBZzQ4YzRDb3orUzFJKzFTVUtJK0EyY1praUFMTDFWZ0lEeTc4Mll5c0Ix?= =?utf-8?B?bWNqUmpFOG1MTGc5Y1pWOHJKeWRGWGxSNmdIZU94bjd1N3I2V21KaTg0SlpN?= =?utf-8?B?bi90cW9jdm4ycFdXV09HRmlnNWxYU0NKeUkrTHM4WkVVRXRGUVVQRGxmZjA1?= =?utf-8?B?V0wvQmJJMERkSC8vVnlVeENlRUh2SU5YVUZPM3gxbFVIWTZBMW9DUUpaL3lj?= =?utf-8?B?YzM2WTJYYXYrbW8wUTdJUGZ2dFpsdE9DNkMwbWRHRTA1aGR2M3RNdE0xN2ZX?= =?utf-8?B?dndBanpVTmN1T0hZcTkwRmNieVV4YWhqWjZvbDR5cE52OGtuREZNc2R3ZEdO?= =?utf-8?B?aG4wcyt1V0RRM1YyNDBxM3I2M3I1eUNIN0ZSdnBvOExZMWNZMGJta1dOdUlL?= =?utf-8?B?aGNFNmd5QkRnbXNmSEtJVnYxL05OQUx2Qnh5cVhERFdMdDYvZ21aMW5DRjJo?= =?utf-8?B?Sit0aTkxYVFwSnZSc3U4UGxheWZMOElidmtvZENPYmxFVlNjRUtPNE11RHdZ?= =?utf-8?B?UkVzNVdSRXFkMmpLenpWRWhHMmxNWFRKcmJVQjlKbVBtZzBSOE9Xenk4YTll?= =?utf-8?B?eTlPMDl1Rm5FK0h6eFd2dlpaakliSmlYQnhSL1Z0SVJqUnVaNmdRR1IweDFY?= =?utf-8?B?b29MUkxFN0lvbDdwZTVUOTJGWTVOWDd0blJ6MWhtWXhkendUWDhJOWRmV1gw?= =?utf-8?B?OHFRVDdhcXdLWkE3ZERHS3p0TXdoSnZ1M3IyRU9YM3F6V0xGbzVPYjhpTEZy?= =?utf-8?B?M1Q1Zm9WL1JxdUVhMm5hU0IyYVA3SzM0eXZ1bEZaM05WdGZDN0twY3JUdGhU?= =?utf-8?B?VUJYdDFXVEsxM1cxem5HTTRtRTlDNU9lVVJzbzhTbDhnOVRHZWhDWitZaXRS?= =?utf-8?B?dkVxRlBGUGNhMmVCdG10M0ppTENUc20yQnZvNlJBRlNSWVN3UXFudGdrYm5M?= =?utf-8?B?WUlCZndYZGhMTEljaEZFdFdaSlkyYTVxMUg3MFp4SnExdDQ5QlQ2Y0pDNFhD?= =?utf-8?B?a0RkWGFiMGNSY1pXOXhaaDgrODhoRXV6UytkK05LOTNHM1dtbjlRN3lsb2pv?= =?utf-8?B?QTdtSVNtS3htYzhXd1V4SmltNEdnZUc3M0lsaFNBT0xmdVZhbjBLYjJaUys2?= =?utf-8?B?V2x2NkdXU05EMThNK09kSGhhQnlLWTdmVFJGT3Mzckl3dGRhM1lhWU43dE0x?= =?utf-8?B?ZzJCM0tvQldLZEhKWE1nZmR0VW9iN1J1eElQeWwzQmxxZjh5TGE5dWdNdUwr?= =?utf-8?B?SDc0eEFHTmZOSjdwRnAvTU13dzQ1cHBlK0tscGJ0ZVRWb1gvMzJ5T1NRMU5S?= =?utf-8?B?ZGNnOW1BcFRIblNQOXZvMVlleXRUMlo0YWFaOWVhdGhoLzdxbkRLb1M2a2Va?= =?utf-8?B?THQvUVhDdjhLMEY3OERJWmt0bzlLLzZ3SG5vVTVPQkoxYkdWMjJ2Q0VmcjRU?= =?utf-8?B?SUVQWlZDQ2RVdzdvV2RBMjA4bktnSzdtT0hoUzliMUhzNUI3UGYxOUZrUElp?= =?utf-8?B?a1U1cTB6a1hqbWRscEZjTTVmeTdFVzhmTlczbm9JSW9iYWJqYlc1RVFZSUVs?= =?utf-8?B?Wi9VQ3hKTXNTaFFPYUN3YmtVK3lQQk10RExuRGs5dkxvZnBDNzRHeExhdXRm?= =?utf-8?B?cU5TUmxFQ0lRaWcraUVzZXJRYi9uclcwUlVNZ1pLZnZ3VW12WjNSMkxJcVJH?= =?utf-8?B?czBYZnZxdU1VaWlIZElsMG0ySEJPb0pKcUFYaWlrT21FOHlNSksrYm9Yb3ls?= =?utf-8?B?b0hnWmpSL1NKc2pCN2gwd3l0Y1ZtYlZ5dUVYcllnNjZhNDJMTmhMUmh4UDVH?= =?utf-8?B?S1Fpam9ZVmxDZXZDOFZxQlFzNFRwcHJWVE9jSVVkTWdOUktZQksxdzhLSTRC?= =?utf-8?B?U0ZYTW8xSy91UUZFMU05aHpibjNla3lEUXF5UUhVaVFDY29FTDRoV0hIQm1p?= =?utf-8?B?V0Z0NERFa3dhd3ZaK1dhZVVQcmpBamFTVW5za05Qc2xBOG15aFhVQT09?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 505a6d24-4c6e-455d-2051-08de544ef279 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:38.7087 (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: R5Rd69dShatFcOq3N81Dc5aOZtnQaqD2mM902Odk8zxs2WnyoE/vD7ERFn0em8NX19Irvq+wYjTFCBZICc/owQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL3PR11MB6457 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE1MDEyMCBTYWx0ZWRfXwwqmhhwxA/iK hL3rfw1CbnkxouR3wr0voVmPVXlQxKPXx6iLx1GlSHyJABHqOwSJKTAUDgd6pp1GrpFpyWqP4Iu 7PID1gRLAda10OCLOsOfEq/M0dsSP68lf8Vwdtqq4KCHHJ30YFnPTJ7l13Ly4vwnHpU4gsdRytl AMVD5Kn4NWlpTcNIWb0a7TS04mqP0c1mzhgs9Pz5X2GKPOyY+Uwm+Rq6RbzDo8nLHh6Rmfyh5VR sFqetFBGH7GieFQJfLlpUV0kHPbckCOe8+8MNOa61sG0vNgNeM3xPaHD4siZFmDCMNnYxfF+Rbz Quv0fdHz+9JRW33Tgm+pu6nIjCbCr9i3CtCBQAUjxc5sI8I35kkG5LpfPRIdDWIhfbFq4UeYP7m OXsr/2lVpQXXPcY0zpX25Tl+fVqDmEF+hxlPPfjtitg48tKJKzN4sygcFOKtU11VeCeLuyr7tU8 EsbsqfomnUJR7iiNCsQ== X-Proofpoint-ORIG-GUID: z8UJTBewIzuIuQKYq3qKeJcy3LURFfRe X-Proofpoint-GUID: z8UJTBewIzuIuQKYq3qKeJcy3LURFfRe X-Authority-Analysis: v=2.4 cv=PcXyRyhd c=1 sm=1 tr=0 ts=69690eb2 cx=c_pps a=Yy30xeOXBChOadhm8XbUsQ==: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=mhnTNJ_rBLr-BtWZq_0A:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 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 adultscore=0 spamscore=0 phishscore=0 impostorscore=0 bulkscore=0 lowpriorityscore=0 priorityscore=1501 suspectscore=0 clxscore=1015 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2601150120 Currently, CPC doesn't send messages on its own, it only prepends its header to outgoing messages. This can lead to messages not being acknowledged, for instance in the case of an SVC Ping Host Device SVC Ping (seq=3DX, ack=3DY) SVC Ping Reply (seq=3DY, ack=3DX+1) The "Ping Reply" is never acknowledged at the CPC level, which can lead to retransmissions, or worst the device might think the link is broken and do something to recover. To prevent that scenario, an ack mechanism is implemented in the most straightforward manner: send an ACK to all incoming messages. Here, two flags need to be added: - First, an ACK frame should not be passed to the Greybus layer, so a "CONTROL" flag is added. If this flag is set, it means it's a control messages and should stay at the CPC level. Currently there is only one type of control frame, the standalone ack. Control messages have the same format as Greybus operations. - Second, ack themselves should not be acked, so to determine if a message should be acked or not, a REQUEST_ACK flag is added. Signed-off-by: Damien Ri=C3=A9gel Reviewed-by: J=C3=A9r=C3=B4me Pouiller --- Changes in v2: - add missing cpu_to_le16 conversion when setting message size drivers/greybus/cpc/cpc.h | 3 ++ drivers/greybus/cpc/cport.c | 1 + drivers/greybus/cpc/header.c | 41 +++++++++++++++++++++++++ drivers/greybus/cpc/header.h | 3 ++ drivers/greybus/cpc/protocol.c | 56 +++++++++++++++++++++++++++++----- 5 files changed, 96 insertions(+), 8 deletions(-) diff --git a/drivers/greybus/cpc/cpc.h b/drivers/greybus/cpc/cpc.h index 87b54a4fd34..725fd7f4afc 100644 --- a/drivers/greybus/cpc/cpc.h +++ b/drivers/greybus/cpc/cpc.h @@ -51,6 +51,9 @@ struct cpc_skb_cb { struct gb_message *gb_message; =20 u8 seq; + +#define CPC_SKB_FLAG_REQ_ACK (1 << 0) + u8 cpc_flags; }; =20 #define CPC_SKB_CB(__skb) ((struct cpc_skb_cb *)&((__skb)->cb[0])) diff --git a/drivers/greybus/cpc/cport.c b/drivers/greybus/cpc/cport.c index 7041a6a8a36..847cc8ebe41 100644 --- a/drivers/greybus/cpc/cport.c +++ b/drivers/greybus/cpc/cport.c @@ -91,6 +91,7 @@ int cpc_cport_transmit(struct cpc_cport *cport, struct sk= _buff *skb) mutex_lock(&cport->lock); =20 CPC_SKB_CB(skb)->seq =3D cport->tcb.seq; + CPC_SKB_CB(skb)->cpc_flags =3D CPC_SKB_FLAG_REQ_ACK; =20 cport->tcb.seq++; ack =3D cport->tcb.ack; diff --git a/drivers/greybus/cpc/header.c b/drivers/greybus/cpc/header.c index 62946d6077e..8875a6fed26 100644 --- a/drivers/greybus/cpc/header.c +++ b/drivers/greybus/cpc/header.c @@ -3,8 +3,25 @@ * Copyright (c) 2025, Silicon Laboratories, Inc. */ =20 +#include +#include + #include "header.h" =20 +#define CPC_HEADER_CONTROL_IS_CONTROL_MASK BIT(7) +#define CPC_HEADER_CONTROL_REQ_ACK_MASK BIT(6) + +/** + * cpc_header_is_control() - Identify if this is a control frame. + * @hdr: CPC header. + * + * Return: True if this is a control frame, false if this a Greybus frame. + */ +bool cpc_header_is_control(const struct cpc_header *hdr) +{ + return hdr->ctrl_flags & CPC_HEADER_CONTROL_IS_CONTROL_MASK; +} + /** * cpc_header_get_seq() - Get the sequence number. * @hdr: CPC header. @@ -15,3 +32,27 @@ u8 cpc_header_get_seq(const struct cpc_header *hdr) { return hdr->seq; } + +/** + * cpc_header_get_req_ack() - Get the request acknowledge frame flag. + * @hdr: CPC header. + * + * Return: Request acknowledge frame flag. + */ +bool cpc_header_get_req_ack(const struct cpc_header *hdr) +{ + return FIELD_GET(CPC_HEADER_CONTROL_REQ_ACK_MASK, hdr->ctrl_flags); +} + +/** + * cpc_header_encode_ctrl_flags() - Encode parameters into the control byt= e. + * @control: True if CPC control frame, false if Greybus frame. + * @req_ack: Frame flag indicating a request to be acknowledged. + * + * Return: Encoded control byte. + */ +u8 cpc_header_encode_ctrl_flags(bool control, bool req_ack) +{ + return FIELD_PREP(CPC_HEADER_CONTROL_IS_CONTROL_MASK, control) | + FIELD_PREP(CPC_HEADER_CONTROL_REQ_ACK_MASK, req_ack); +} diff --git a/drivers/greybus/cpc/header.h b/drivers/greybus/cpc/header.h index d3fa26e8a07..bf2ef41d44d 100644 --- a/drivers/greybus/cpc/header.h +++ b/drivers/greybus/cpc/header.h @@ -41,6 +41,9 @@ struct cpc_header { #define CPC_HEADER_SIZE (sizeof(struct cpc_header)) #define GREYBUS_HEADER_SIZE (sizeof(struct gb_operation_msg_hdr)) =20 +bool cpc_header_is_control(const struct cpc_header *hdr); u8 cpc_header_get_seq(const struct cpc_header *hdr); +bool cpc_header_get_req_ack(const struct cpc_header *hdr); +u8 cpc_header_encode_ctrl_flags(bool control, bool req_ack); =20 #endif diff --git a/drivers/greybus/cpc/protocol.c b/drivers/greybus/cpc/protocol.c index ff65757b40f..ad97e903b92 100644 --- a/drivers/greybus/cpc/protocol.c +++ b/drivers/greybus/cpc/protocol.c @@ -9,6 +9,11 @@ #include "header.h" #include "host.h" =20 +static bool cpc_skb_is_sequenced(struct sk_buff *skb) +{ + return CPC_SKB_CB(skb)->cpc_flags & CPC_SKB_FLAG_REQ_ACK; +} + void cpc_protocol_prepare_header(struct sk_buff *skb, u8 ack) { struct cpc_header *hdr; @@ -18,28 +23,63 @@ void cpc_protocol_prepare_header(struct sk_buff *skb, u= 8 ack) 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; + hdr->ctrl_flags =3D cpc_header_encode_ctrl_flags(!CPC_SKB_CB(skb)->gb_mes= sage, + cpc_skb_is_sequenced(skb)); +} + +static void cpc_protocol_queue_ack(struct cpc_cport *cport, u8 ack) +{ + struct gb_operation_msg_hdr *gb_hdr; + struct sk_buff *skb; + + skb =3D alloc_skb(CPC_HEADER_SIZE + sizeof(*gb_hdr), GFP_KERNEL); + if (!skb) + return; + + skb_reserve(skb, CPC_HEADER_SIZE); + + gb_hdr =3D skb_put(skb, sizeof(*gb_hdr)); + memset(gb_hdr, 0, sizeof(*gb_hdr)); + + /* In the CPC Operation Header, only the size and cport_id matter for ACK= s. */ + gb_hdr->size =3D cpu_to_le16(sizeof(*gb_hdr)); + cpc_cport_pack(gb_hdr, cport->id); + + cpc_protocol_prepare_header(skb, ack); + + cpc_hd_send_skb(cport->cpc_hd, skb); } =20 void cpc_protocol_on_data(struct cpc_cport *cport, struct sk_buff *skb) { struct cpc_header *cpc_hdr =3D (struct cpc_header *)skb->data; + bool require_ack =3D cpc_header_get_req_ack(cpc_hdr); u8 seq =3D cpc_header_get_seq(cpc_hdr); bool expected_seq =3D false; + u8 ack; =20 mutex_lock(&cport->lock); =20 - 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); + if (require_ack) { + 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); + } + + ack =3D cport->tcb.ack; =20 mutex_unlock(&cport->lock); =20 - if (expected_seq) { + /* Ack no matter if the sequence was valid or not, to resync with remote = */ + if (require_ack) + cpc_protocol_queue_ack(cport, ack); + + if (expected_seq && !cpc_header_is_control(cpc_hdr)) { skb_pull(skb, CPC_HEADER_SIZE); =20 greybus_data_rcvd(cport->cpc_hd->gb_hd, cport->id, skb->data, skb->len); --=20 2.52.0 From nobody Sat Feb 7 07:10:30 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 9BE3530CD89 for ; Thu, 15 Jan 2026 16:13:24 +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=1768493616; cv=fail; b=rdo4ozx9ROp3hT+PgUjM5v8r/X6Gs3BwSdwy3POL6DMLbF0Y0M/6TeoPMHtVRWnNiNDE61ebtHJKu2gKjqpyp4dug45l7/9qWfrxteRPw02vc3xMkk0QCVKLAKvpU9wwO9T13NEqDdanlutjjaOK8dxhtkrfmUoY90noUImfbJM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768493616; c=relaxed/simple; bh=4fdWX7suWUwjW/kSRoSEsa/HmcYzINKlMYQsyC4MBf8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=SOkl7g/87utrak7TDry+4Zilk8jNOoQ/iSPfNaek/76xY5swLRRHarvT8Fsl921wocJqfrke9+A87IQb1808hIZ3fKzzyg+Ps/AlyHiNDCf4tRe2S9P85PLUTBoJmNp6Y3VvAnZfrr27PMzMVMJQENq7X5dS7/f1e9HEoKiU0wc= 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=tqM2iPCu; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=Dsp5FlBL; 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="tqM2iPCu"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="Dsp5FlBL" 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 60FFlYh6459378; Thu, 15 Jan 2026 09:58:41 -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=Iisn/b3wZk7PfW/YLCZI7JJZd7zOmh5wJWc4DEBRH+Y=; b=tqM2iPCu1//8 YpsqutfaLzrAwkXpjra8sFx/RLaZubYJ9/fcwZy3vXT83V4PdYWmPa6OLMyASts3 /FogEKnnkU7WR1/lMcmK0XqZ0JQBynA47QyAEBS3dB6BHclLlGB0vHx8guh7gJn1 N/PLinuBHU4+7fCKXpAxbg7dTy6f7hnbrc6q1XBRzeNTKmYRNZ0sWZarteVTLKb+ 85KjHylZ1lsNsP3a2Rf5DJ1aZ8UyuDPkPS8u+uWTxfv/fqULsELnLP6zA52L7AXJ hTjasFTFCsLm96yNcDGzwLtSrCxRNLnmBDkZG+5qS5uZodt3i/yG2YihLzlwPWVa ot+EkbmfZw== Received: from cy7pr03cu001.outbound.protection.outlook.com (mail-westcentralusazon11020087.outbound.protection.outlook.com [40.93.198.87]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4bq36kr0ux-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 15 Jan 2026 09:58:41 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=RNUb9fSoKmqqzkic+ONHCPefLAWMKECtsPQEOo2c3LeyHgnxIGXPpJik97SFc8EtmF7Vz2P4RihIG6JKCTieVo74W588qH1XD80GdL0U1DHVq7GbpvrGGOrzowUPh40AycAwWov/LXmSoYTeMRs9fOK0803O7wMlPXfpg5LkmAqzFCH7RCA2AETHUjc15e2UfBGGttML3CIzxA3nTfI6pUPcPx6xiZX3+u3vwTNU9IRiG/Cq5CJE6kVLgXXsb36Opgymajmnqthuq9zHRL3IHcQlzo1U5zyJN3wMZ/JCpeSrkNBlXpHf8pSuzX8FHMrtH6JtV7z7Yl0qh0SrqyilEw== 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=Iisn/b3wZk7PfW/YLCZI7JJZd7zOmh5wJWc4DEBRH+Y=; b=jHkAyDqTKwrqbpQxA5xiZJ3s3FBJMWIm7aB+80UrmPfXBPOBZXWOi1gX8WE/0jga/L5sYYTzS02IJ0KKSb64nTec6TcNtjqwL4xzQ2fDr4ueat69v8dKiCsNTouNxjEAuE+f3RgtU7iFWGV3hp7zyO48T7XaofkopFuLkMNB8deGl1Vk87cw5LwdsinAFjjeUYN+tFksyGUvzCbwudYT5xMS4irrPO1eUaaaWGX+o9NE07GGp7iUEwGjKfnrAXWivIByhfEQTnLK2Tp+HB6pcIC0YC3s/oORZsfSP/FeUDUwHr8DLKPWaKjFtzH9JOcKaLJ9z7/OAqoTEGC+OhUwlw== 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=Iisn/b3wZk7PfW/YLCZI7JJZd7zOmh5wJWc4DEBRH+Y=; b=Dsp5FlBLzDN8aSKibrx1cj8K5vt86P/Ay1lJTeWufEoVW3BHaCAfrN9I91f0qYA5mQ6tAYrJtWNIgeFxkeI/yICxAD+rrVKUA4bm91QS3dOMX+xZ9vbBwq9KccDKgsww/R43w6aF3Wlc6ShJUKCQ125rYHQAMUDSI7V7sGGs1Wg= 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:39 +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:39 +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 10/14] greybus: cpc: use holding queue instead of sending out immediately Date: Thu, 15 Jan 2026 10:58:03 -0500 Message-ID: <20260115155808.36102-11-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: 7fcbf67a-9928-4aff-3534-08de544ef2ec 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?eHVvMHl6Q2tBZHdkd1BNYTZFWXk5dEp2ZEEzY1U1K1FEZ2lhL25aTm90cjhF?= =?utf-8?B?UUFOdUE4VGZ0SWJudVBVbUg4cnVjbjUzakZoMkEwT0J1MUppYjYwNithaGpU?= =?utf-8?B?N21XUmthVVhWYTI2WHhGSlJNWGNCSEw0enV3QnFrZ0RVQklzVGpDM0dPZkhs?= =?utf-8?B?OGc3RGRSZkpHV09xVjUwQnZBeFo5Mmc3QkV6UjdOZkt5MmRleGdrNlNWWTJ1?= =?utf-8?B?TzNlRUU1RVlZRU5pcFVqTGFPYnRGQ0ovTTNTanVwWmZHKzkvUVg2MlhRM3hL?= =?utf-8?B?eFk5dElTQTJGV1JBVkpTOGpEVkF3U3NVdFRna3ZWZUQwbXVFYXB5VzFySVNS?= =?utf-8?B?d2lTajh1M3M0YitDK1dNSkt2bFBGU2FkSGEwSHMvN1RQR1NpZlJDU290QVh2?= =?utf-8?B?VmNLS1YyRDNQcUdzRXM2Vi9LbUkzN01mU01XTjhNSG1RSHBZV2NtNEpucWdi?= =?utf-8?B?NUZmLzZYdWNyWWhHVzJ2cUM5M0Q2Yk92a1VkNHRtMFhNNS9hajBQei9WOGZs?= =?utf-8?B?WkRyT1VxS2trR2pvbDlScEtMdXdldVY5Yml4RnJhVFRzNmVvVjFseWRIQXRr?= =?utf-8?B?cG9sRWlvdTJYc2JYTitITW5ncXlnVVJhVTUwd2ZVd0c4NVVJWFFQeDQzcEVX?= =?utf-8?B?T1llV3dKbUR4azJsdXh1elZSMWZEVXlWR0JEMFZlY2NGcHdFNTNWdld1bTBq?= =?utf-8?B?cENvamZ6VWFQTTdpaHhNbXNMRmNmcHFzcnlkWng4M2xBTFhHdHhxUzF3czJ5?= =?utf-8?B?aFkxbG5oUE1nYXRuQ0ZsOUlRYkxJZzN5MmZyanFUSzFTODFDL1hhRkk2WDMv?= =?utf-8?B?NG5ZdUZRM2hZNkd1OW1Jb0tqUGZvai9HN2JvUytaL0U1bC9qYlVMQ1ByNDdH?= =?utf-8?B?Z1QrUkkvcWpyUW01cDlUZmN0T3NzVFB1NDA2UXBOdGNhZWNJcmJwNTVQTEpF?= =?utf-8?B?eVE2bHozbUlxaUQ3QUg0T2Y3amMxQXZtTStvclR1bkR4WmNSR0t1YjZJcTBX?= =?utf-8?B?VTdZaXdrbUU4ZUk0cjVsQnppMTZyMERqVWtDeXZMWERueXlnS25rSVRMZkZw?= =?utf-8?B?VlF0ZUZOWTZpeitteEtzdWZWUWw2eEs5MzYvVWYwbk1EWVhTVS9nQ01MbGZG?= =?utf-8?B?TWZnMjhhcG1DVk5zYXQ0U2pYbzFoMWdBTmw5c3J1K2hKMU9NaElCbWl3bENS?= =?utf-8?B?UlZSWEFzTUVJQ0VLV3VVSk5OSVJKbkhGd0NHVFpEMEYxR1lWZGN0K3RUVm9V?= =?utf-8?B?YzAxWS80NHRMRGVaa0Q5MVFmR25Uck1heXk3clVlNDV6cEdlcTBwRTF2c25l?= =?utf-8?B?MXlGRmdlUE0xb1Z6SWtvdWtvOVhtQnNxaFV5dElhNWNlRmhDYjl1TXpUalk0?= =?utf-8?B?NHBmSGxzLzJ0NG5GMGgvZHJhWmpBbEdVb0IrcmM0M0ZJOTF5dGFtWEYyQ0w2?= =?utf-8?B?Y1Z2WHVHbEVlSG5rK0lIQ1M1bGdFL2syVjB3RU9qRG1TL21Zd2Fjc0pMUWRM?= =?utf-8?B?V2JDaVRzcVlHaUUyVHBkQ3I0OXFUMThJcjBNZWQ3NE5zQlZGaGlJTVhRNklO?= =?utf-8?B?RzhxZ0JTRkVQc2xTTFM0ZmdlTk04bVk5UmdoR1p4aEE4Z215QUhjOHFIVjJG?= =?utf-8?B?bHdJMnFFQjN1NmZpYVVJMGlOSTRFcmk0MGRJbkh5ZFB2WFNIb254bEhON2NZ?= =?utf-8?B?a2w0Sk5YUDlMcHNOUjZ2NWJ4THdMdkVtc1E0OE5TWm1vUzl4YXROYThhMmlw?= =?utf-8?B?c2lxcHdGUEdNWEVBV2hHQng0QmVmS3BjdG5KcExTQzVnYUNXVXJ4UU5Rdi9U?= =?utf-8?B?WnNUbGhUbTkvVkU4cEg2T1NUdkRxVFBjU1RBaDdNc1AyMC9LQjV1RXI3NXJz?= =?utf-8?B?VitDR2NQZ1lXNWRXNng0am9xSjEwSjlpTS9nc3dvUXJCaWJReEF2bWU2amRh?= =?utf-8?B?dzY1SDkxZktORlJ5UzcvWEs1amI2VjJsTkFZYm5uQWNoSFdPL3F2TnAxYVM2?= =?utf-8?B?WDAwUFloRGtUWjUrVXFuaVZPWENleXdvbkxJZHN1UnJJUURFdFcvRXZZNHVJ?= =?utf-8?B?dHlselkvMU5EQzBuZndoTk02djZBSUhLUWtnRFhOb21JTlBRMXQxNThaMHRG?= =?utf-8?B?VitsVTlRRmd2a0hrd2NtbTVGTFhXOWJGRXAxT2xHVFArSUx1ZFdndC81Uk1N?= =?utf-8?Q?KGLX5OWS3XpSC4TXXu3ZCQo=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?T1hLbmg4cjdPcFpVNUZlcEgxczMvUFd1WHZDVmExdVF6VHpHWkx2NUlhQmoz?= =?utf-8?B?S25WNzFTS2d4T3dLOENFcEtMdFNoVFhXek83V2kxNUNOeXpnU3FDMGNsTGZH?= =?utf-8?B?cjZUNmpwUjI3c0Q3SzFHRVd6N1JzbDltS0M1ZU85YUVMdVZVOEZVcmo4WWhQ?= =?utf-8?B?NWtPZjQwVDdiQTJzMk95REc2b1lUYnJBYkhNNWZBMHdIMG5RRFZTOTFGLzkx?= =?utf-8?B?dE5pcDkvdk85TWNnYWN1ZEtjSnRKSmI3ay9LcmtOZW1sVTJXNjZwRU1DamF0?= =?utf-8?B?cEZZV1JqL3VVMlF5ZDgwWFFuNWh3LzM3V0lDc21SSHRoNkJKZUV0WGMyRnZW?= =?utf-8?B?WDlJRFFvekVhREJWYW5TVVUxQ3RuRzJPQUpvVDZEK0M5SUFnbU9Dc2NCcnZ1?= =?utf-8?B?R2FhZjJYSE1BU3NaSGtLSkZDczRvZXpaYndXNHNPTVUzV0djWkZYT1VzS3gw?= =?utf-8?B?bldyN3I1bkN1QTJuWXFOVHVMb3lLN25FNG9VYUVjVmVvV29mcVRKUHhLUFB0?= =?utf-8?B?SzQzNzB3azQ3Sy9QN01VcXdCVDVGUVpaNnVKb1haTWo1RTg3d09lWkNTczdC?= =?utf-8?B?QTBVNUFIMUFVeXVIVDBmQzhHVGgwTHQ5UU00VW5pNjlJL1I4ckFLRmpKeko2?= =?utf-8?B?aFVmYUNXbXhUdVlWd1UrQVBveUEwTkxKQkNCZDhvQ3FLckhnVThPdkRJVi9k?= =?utf-8?B?NCthOGJXS0FMbjQvNHJwS2VMRm9pcDFRT1Yya20rZEJPT2xHK2xXTTJuOXFq?= =?utf-8?B?Z2lUeDhWNWt3c0FCU200aDdLeldjZ1J2aGZSQzl5V0JRc21GMjlXSGxlMVh5?= =?utf-8?B?ZmNCYzdQQWI0QWJWNFpwaUQrNW5RdFJxQlhmNWdOVWk1UkdqWmMxeUNrSVph?= =?utf-8?B?Q0pLTDlZYml4cW9ZMExYQTdZa05oNEZmdnorQzg1U2tLVzZuQXpnRGp6Z0F0?= =?utf-8?B?L0xXVWtTUG1jSVFLNTF2YWZFZktyQUp6UnpDNGVQSGtJbEI0QVJJVnlIaXlF?= =?utf-8?B?c1h5M2M5K0Q3dzhKNWlYZXRzWGc5Vit0Z0dKcmVNYkw4dEIwMXRyMmc3VEg3?= =?utf-8?B?RjdBYVJ4Uy8rSExyVDFVSDFyZDhONGNlSE1FRDVmNVo2K2RHTHNMbGhMRjVD?= =?utf-8?B?RG8yMHg0RFEvMk1OWDhKa0tRZi8rbnl5K09OR0Y2enhZc203anhjZkNqaTUy?= =?utf-8?B?VGhrNXVuNTI2cWk0aXoxWEwwam9QQ0p1djBTR1lmMndkZVFTKzhkU1FEa092?= =?utf-8?B?OEc3Szd4SUVOVTFKdTVGNUt0U0JObFgzZVlWWEJmaW5ORmVwYzVyeG80MGNG?= =?utf-8?B?WCtiZ0w0SUVGT01VdW8zL1hRZXNlbm0rNWY2ekhCUHROZkNaTTZwSHdmR1dZ?= =?utf-8?B?MllGUEtUT1VGM2d3Sit3cmdGME5aRFZZam1wSklXYy95TXFSTlVoYkVsUi9Y?= =?utf-8?B?UHBhaTYvcGYzUTkyMUdpdVk1NldYdXpEZk1Ya09PanNhb0VKS3VqMzZlU1Zr?= =?utf-8?B?ZU01aUZONzI2cGtYKzZGeTBnZ2hDWTJ6TFRhZmh0anFpN1pPdS9tTzRNaGt6?= =?utf-8?B?eFJ5S3pVanBhUDhVMHFCUnJhOWprU01LRC9tckJ4RmJac2FSSDFIZ3Ryc01Q?= =?utf-8?B?ZmJ4cGlUY2p0UzhVYU5IREFwRkVPQjJ1YnlCTFZZajhMNktMbUNPaUFUNXFY?= =?utf-8?B?a3VBWW1nTzZjSjNNaGhOWkVVQlhiY0pRMXhqTzZBaEJpVlh0S3JMb3UyQ1ha?= =?utf-8?B?TnRDMHJKY3NtMStRaFBTMHhPMGdxZDBPclVNSThGbFh1ZzI4b0h6UTVyNnB5?= =?utf-8?B?ZTVrRVJQVU9hZE0yd0xEeVFHT09IWlNkN1pvZzZ3ejgwQVlLaFFLWHZDSnR3?= =?utf-8?B?SFRPSzhDeXEvZTdBUG5za1pwS2xxU29lbnJ5aDBMMUdxcmsrMFFQL3hjeTZM?= =?utf-8?B?REdxZmJyTytzOUxkN2E3RlhrWUVRU2tIVDBWckZCRTlJZzlWdjB5dTNZVEhy?= =?utf-8?B?S2kxM3RlSDNGd2tqVXJOLytMZW5qdnM2eUtrd3hqWTI1UVdBS1kxd01UbWo2?= =?utf-8?B?RTBNOG5MTFN3VVU4Q2VnZm5raXpGeGI1bGJybk5WRmdkMEMrTXhJV256Wkc0?= =?utf-8?B?eTFmazdjanpiTm0wR256OUxZbUZOTENSZlFmckR1Z3dqTWVNVUdLNm14YlhR?= =?utf-8?B?UUpuQ1gxbWFoZjhWYko4NHJEWk9NRExnOEJ6SFRrMzB0ODVSOXdyVXlHZkpq?= =?utf-8?B?TlVDYThBQmFwMng0TmQxcWcvcldoWHViNFoxQ24xTFQzb2tjVUIvQVV5TGw5?= =?utf-8?B?d2xnT2tYeDdQeVJ6cDVKMGRqU09MVDZPb0xHalpQS0wzSzRURVFhZz09?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7fcbf67a-9928-4aff-3534-08de544ef2ec 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:39.4563 (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: LpzNXKvpeX2PXnFg6wV4bL8QC0gno2kLOkUQ+OWXKnWsriCa91TIK6C8TCKLDhtZyqqBqOd02OrtyJHAFTBY+Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR11MB5097 X-Proofpoint-GUID: _XOaU3nTRUvNf03ry2i1e6sEANYhjTFK X-Authority-Analysis: v=2.4 cv=M6BA6iws c=1 sm=1 tr=0 ts=69690eb1 cx=c_pps a=Gy9E0H4ZmoUkNlDDtfVv6g==: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=4ZPe5lWXlvbldCu1ft8A:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE1MDEyMSBTYWx0ZWRfX1xAJwzl+bOCW vQVpSjnri5sTquBsR3ibWVhuQOhRY7uSImpkUNWC85j47UbGyQC63iz82YyQlAHpySeL7G7Jlri B7Ms01NqKc7+rLBRsmdF3QFAquSDUYiLY6kAmYy2o0jVL7PQXalXZwPOjlmqu+Q6IPJO3A877IO lj3HjLCPiLnXQPK8slgiMwafOigQOGeMp9uL/bYAh42FRcEZJE1dIg0uRyUnhviPEwLq9/hKwuk wUFvnGn+3Q1AnR86bEUl/tyywwMi22oWlWr3xIDO5WZPV2z87kBOZE3xO1gxZqCYkFqfgBej0Ze w3F1jnxYaFqujzL7JA4G4zpGhIr44XaRdHRRPXVYXQfDXfYB3QBgIpqmksNnjOnsihzgvOtlmYi O9ijiY63wX6G8VFgqGg43DU+NUTD+QYUlWdC5b53C9N+k5o6w/0Kk+1ZSAZE2+OPoKz9QgyvcN/ DSs08lPOSqakaTaqKdg== X-Proofpoint-ORIG-GUID: _XOaU3nTRUvNf03ry2i1e6sEANYhjTFK 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 As the first step to handle remote's RX window, store the skb in a sk_buff_head list, instead of sending a message immediately when pushed by Greybus. skbs are still sent out straight away, but now there is a place to store away if the remote's RX window is too small. Signed-off-by: Damien Ri=C3=A9gel Reviewed-by: J=C3=A9r=C3=B4me Pouiller --- drivers/greybus/cpc/cpc.h | 10 ++++++---- drivers/greybus/cpc/cport.c | 21 ++++++++++++--------- drivers/greybus/cpc/host.c | 4 +++- drivers/greybus/cpc/protocol.c | 25 ++++++++++++++++++++++++- 4 files changed, 45 insertions(+), 15 deletions(-) diff --git a/drivers/greybus/cpc/cpc.h b/drivers/greybus/cpc/cpc.h index 725fd7f4afc..f1669585c45 100644 --- a/drivers/greybus/cpc/cpc.h +++ b/drivers/greybus/cpc/cpc.h @@ -9,15 +9,15 @@ #include #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 + * @holding_queue: list of frames queued to be sent * @tcb: Transmission Control Block */ struct cpc_cport { @@ -26,6 +26,8 @@ struct cpc_cport { struct cpc_host_device *cpc_hd; struct mutex lock; /* Synchronize access to state variables */ =20 + struct sk_buff_head holding_queue; + /* * @ack: current acknowledge number * @seq: current sequence number @@ -42,7 +44,7 @@ void cpc_cport_release(struct cpc_cport *cport); void cpc_cport_pack(struct gb_operation_msg_hdr *gb_hdr, u16 cport_id); u16 cpc_cport_unpack(struct gb_operation_msg_hdr *gb_hdr); =20 -int cpc_cport_transmit(struct cpc_cport *cport, struct sk_buff *skb); +void cpc_cport_transmit(struct cpc_cport *cport, struct sk_buff *skb); =20 struct cpc_skb_cb { struct cpc_cport *cport; @@ -58,7 +60,7 @@ struct cpc_skb_cb { =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); +void __cpc_protocol_write_head(struct cpc_cport *cport); =20 #endif diff --git a/drivers/greybus/cpc/cport.c b/drivers/greybus/cpc/cport.c index 847cc8ebe41..91c39856e22 100644 --- a/drivers/greybus/cpc/cport.c +++ b/drivers/greybus/cpc/cport.c @@ -7,7 +7,6 @@ #include =20 #include "cpc.h" -#include "host.h" =20 /** * cpc_cport_tcb_reset() - Reset cport's TCB to initial values. @@ -38,15 +37,23 @@ struct cpc_cport *cpc_cport_alloc(u16 cport_id, gfp_t g= fp_mask) cpc_cport_tcb_reset(cport); =20 mutex_init(&cport->lock); + skb_queue_head_init(&cport->holding_queue); =20 return cport; } =20 void cpc_cport_release(struct cpc_cport *cport) { + skb_queue_purge(&cport->holding_queue); kfree(cport); } =20 +static void cpc_cport_queue_skb(struct cpc_cport *cport, struct sk_buff *s= kb) +{ + __skb_header_release(skb); + __skb_queue_tail(&cport->holding_queue, skb); +} + /** * cpc_cport_pack() - Pack CPort ID into Greybus Operation Message header. * @gb_hdr: Greybus operation message header. @@ -78,11 +85,9 @@ u16 cpc_cport_unpack(struct gb_operation_msg_hdr *gb_hdr) * @cport: cport. * @skb: skb to be transmitted. */ -int cpc_cport_transmit(struct cpc_cport *cport, struct sk_buff *skb) +void 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; @@ -94,11 +99,9 @@ int cpc_cport_transmit(struct cpc_cport *cport, struct s= k_buff *skb) CPC_SKB_CB(skb)->cpc_flags =3D CPC_SKB_FLAG_REQ_ACK; =20 cport->tcb.seq++; - ack =3D cport->tcb.ack; + + cpc_cport_queue_skb(cport, skb); + __cpc_protocol_write_head(cport); =20 mutex_unlock(&cport->lock); - - cpc_protocol_prepare_header(skb, ack); - - return cpc_hd_send_skb(cpc_hd, skb); } diff --git a/drivers/greybus/cpc/host.c b/drivers/greybus/cpc/host.c index 7f0579fde26..ec43d33dfc6 100644 --- a/drivers/greybus/cpc/host.c +++ b/drivers/greybus/cpc/host.c @@ -62,7 +62,9 @@ static int cpc_hd_message_send(struct cpc_host_device *cp= c_hd, u16 cport_id, CPC_SKB_CB(skb)->cport =3D cport; CPC_SKB_CB(skb)->gb_message =3D message; =20 - return cpc_cport_transmit(cport, skb); + cpc_cport_transmit(cport, skb); + + return 0; } =20 static int cpc_hd_cport_allocate(struct cpc_host_device *cpc_hd, int cport= _id, unsigned long flags) diff --git a/drivers/greybus/cpc/protocol.c b/drivers/greybus/cpc/protocol.c index ad97e903b92..72276818f17 100644 --- a/drivers/greybus/cpc/protocol.c +++ b/drivers/greybus/cpc/protocol.c @@ -14,7 +14,7 @@ static bool cpc_skb_is_sequenced(struct sk_buff *skb) return CPC_SKB_CB(skb)->cpc_flags & CPC_SKB_FLAG_REQ_ACK; } =20 -void cpc_protocol_prepare_header(struct sk_buff *skb, u8 ack) +static void cpc_protocol_prepare_header(struct sk_buff *skb, u8 ack) { struct cpc_header *hdr; =20 @@ -85,3 +85,26 @@ void cpc_protocol_on_data(struct cpc_cport *cport, struc= t sk_buff *skb) greybus_data_rcvd(cport->cpc_hd->gb_hd, cport->id, skb->data, skb->len); } } + +static void __cpc_protocol_write_skb(struct cpc_cport *cport, struct sk_bu= ff *skb, u8 ack) +{ + cpc_protocol_prepare_header(skb, ack); + + cpc_hd_send_skb(cport->cpc_hd, skb); +} + +/* Write skbs at the head of holding queue */ +void __cpc_protocol_write_head(struct cpc_cport *cport) +{ + struct sk_buff *skb; + u8 ack; + + ack =3D cport->tcb.ack; + + /* For each SKB in the holding queue, clone it and pass it to lower layer= */ + while ((skb =3D skb_peek(&cport->holding_queue))) { + skb_unlink(skb, &cport->holding_queue); + + __cpc_protocol_write_skb(cport, skb, ack); + } +} --=20 2.52.0 From nobody Sat Feb 7 07:10:30 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 B25062C0F83 for ; Thu, 15 Jan 2026 16:01:20 +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=1768492882; cv=fail; b=oc86TnBLRRKAL2cUS191ZHuuGr51cDrFEr6eE3EvIhckCAd6tWwEX2GhMg2M70TVJo12k9dVaw2BG2Dl7WlFPbkwqBgRqxfq2jpfM8QLK4U6vTRaHqgU5FUOJFvQANzV56EbtktKKWRhHO3l9hdPVvqZm23jL34LkZk4XsTLhwE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768492882; c=relaxed/simple; bh=PlOS3m/vY7R2pXkmz74cl7/sUnlP+ZtfJpvCQMkCTYc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=qEs5cJjeGJ2nHuY2BZ4GwZd5PovX+QbCuC8iYmGVGwYAkS43+EKF9T865iiaAb+DXG/K00WeYGu4NbgOIR6n+YQRf5x1ck891GhRL5etov5ueGmpTsD0M+c1iL58M9PgrrK/ui09xyoh6LfvoVMUgc8mrbeis0GuUHLbU2CD9q0= 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=z2wiHEp7; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=HiTh35Ho; 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="z2wiHEp7"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="HiTh35Ho" 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 60FFlYh7459378; Thu, 15 Jan 2026 09:58:41 -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=y/ljRzmSO63kmhrNwFzHmvmsO8xS3jAJ+e6aLO/9qKI=; b=z2wiHEp7tQoE z7hl/Jc8GDaj1mGWmq77PI2eIOoXOYsYbNSWMWo+v6LfTDiSV6UBlsUyYU3Hn5be Z+7LbQh8uYCzj3SM4DdLp5URCrwrefa8lh4N9eVxbyuJ1zGi7+tVEZH0/zarGPhi QM3b3JqZ8qL8q6/eLeWbL4qtI+p63kR6b8iIQgpx6qWRadWy+lrVEcP1EsOGDfmL nJzTRWom4b+0iM3/9XJrlHlSWQbwxedSR9oNSTw0AIzCGQGRCmBSxPZgffamUgRq u90EcfNhEuUCVVDYym1Io4RdepPnAbYsnUvUB+33r4V0N9WG4ibItfyjMdH9Emas sJ7toYP6vw== Received: from cy7pr03cu001.outbound.protection.outlook.com (mail-westcentralusazon11020087.outbound.protection.outlook.com [40.93.198.87]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4bq36kr0ux-2 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 15 Jan 2026 09:58:41 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=fJI5pJfxtXpq+mv37C9TP25QiGxjztbsNAdcMxqudp35iDA1TnT93On+RzuTeSJRC1gcIdOVLxoa5erchGI6CTk0vtrBl5R804tRrDRPR0Do/h/ftU6ChdJN8HVLHDUOvXzg4RIgTQC3LAYmTP1Q+5M/69HD00AzAjLzmP7DO59sgjckfW6fPsSbigQYXxo3KSk2KQVETCJ6+g3/CWDHqlhtOd8MH+9Dj8dzdjLFm0m9Jt7n9SkWbDvgRK2B9AzwSswuZVTbcLJ3d3+mG3vRDNGnmbEssgS2gpntE2JCE1g2H1bX92RpfFXVlb9E023Hv3PYHesTk+rA6dcvHv8EVg== 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=y/ljRzmSO63kmhrNwFzHmvmsO8xS3jAJ+e6aLO/9qKI=; b=Mlh536IYeHbLsve7j2nxTCXjJwFHUkKHtohIYvoyoaDqhBUQZklyLfA7NOeY9Ez3b+aK1V7We8XRt3ndpPy2nBVcJZOmrP+NEvpQ72cer/HA89Qbp2Y+TOKkcWI/7fZ+fRIuGJMy2RwsOphyNAoUhsDvGH/Fm1fWHrATlnciitF4lp9JNuIfQ5zl1TbmKlNF3bi3XitGDaHsnTuTX8VLFbM2oTk/hTr8MbUfb5yP0nz4qBUIAXBvlwyve+XdeTB+9yl5i7I1BGPbpEaxd2ONK/g9ZLPOCAP/yj+DzadykQp46tDV08VfVhg3H7WNTHX8W/TMO4UlJpwIlQ6UjrcBuA== 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=y/ljRzmSO63kmhrNwFzHmvmsO8xS3jAJ+e6aLO/9qKI=; b=HiTh35HopXmtQIKmk9alHf6mLuJp7jAJLHY9K+4zNty9CW2HPo6W7oZWefmLNi7gGUlBOpWyShL2dckQZe3+s8q/gplYUQAXsZ2UFcYxVjWxEV2/S/RpIkSnDN7GDsjN8Ynp0UXboKh+2LaeaXElbuHNqfOSYEilVH7Z10AJRgY= 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:40 +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:40 +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 11/14] greybus: cpc: honour remote's RX window Date: Thu, 15 Jan 2026 10:58:04 -0500 Message-ID: <20260115155808.36102-12-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: 278cccb6-4eb4-4905-1138-08de544ef35b 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?S1ZlSEF0NWpjSzZqRGJpaTdiTmwyaU1mS2tQWmVvL0ltQk5UQzJyNGVzZkw1?= =?utf-8?B?T2JxTC9mdytFeHBPaGtlc0hERlN0TDNRRUljZFBuRUxyK0NHaVM2WU1CR1I3?= =?utf-8?B?L2ZjbVJMaEI1Z0luMkFUVlRzZ2dzZ0Jxc3N0cXp5SmJpSWI5SFVGUExTSVRF?= =?utf-8?B?UDRiVjU1bk9jY2tOMVpBbjY2Q2l2NnVhWHJKOFJuSktBWVR6T1lSZm84OC9z?= =?utf-8?B?VkdZejVLWE9QaGZjSFZnaDZ3L1RxYWRVS0drQnRyNkxLbVVaS3pZeFBCVlow?= =?utf-8?B?S0pHRExaSWQzeVZRbjZTTjRhN3VNaTE1cFRKWTRnVmM5UkVNSzdHbVIvdkJO?= =?utf-8?B?N3dwN3I4Z0YzK0djVzlQSGlzZHVLdUJVY3lXcHA4NG1vNFZTcEFkbmQybk15?= =?utf-8?B?amxCUFY3SGh3MHBDRHdGU3lQbUxFL2NId3J3c2J3ODNTL3h5TGxSSnpWd3pX?= =?utf-8?B?d0JGV1ZWemVXRDlHVHNBT3A2REZlMmM2SHc0b1BSd2RXQlo3SWZNOWlMZTlG?= =?utf-8?B?bEtXd0MvZzFHVmlhTFpUcnFzb2lJclBWRGx3djZKSE1HcEVDSTloTXVsQjJj?= =?utf-8?B?eU02ZFhpaEJSb01ienZrQk4zaHJwR3Q3VEFINWtiRDkwS0VkSWNGZmNHWnYz?= =?utf-8?B?RERyUWE2cjhLbFZGWUdBVnprWlM4OG1kd1ZidEZlSGtIREtyLzVWeThia0Zs?= =?utf-8?B?Q3hHWkdhSlU4bW5NdFpVT2krdkNlb2lIaFBJRkNoUEVzLzUxUGJ1a3dvbFc3?= =?utf-8?B?SmM3VERLU3lMbG0vQk4xTm0wNGdjYnJTSTZobnhWOHNLQjZMdmIrZENkdlo4?= =?utf-8?B?aFMzRFQ4eUpLeUsxM2hmYXhFSFpXeGlVWWwrZHcxTVgvUVJIUGlHWjJYS1Rw?= =?utf-8?B?UXQybnpGcnhuWWxnODZFN0JoRUpsZnJwaHBEZEdkdHRKNXhWck80b3NYclpp?= =?utf-8?B?NDZ5S2VSbWtIekNxVGUxRGE3UnVTZzR5UGlTSHlab0tGdDkvQmFlY2xXNDl4?= =?utf-8?B?OW1EN2k4Y0VDSGhJZXcvVnoxR0VvZUhoY3RrZ2NEY2lvTkFMaldrQ1VSYnYr?= =?utf-8?B?a2ZkNnhQS2FlcmtRZWVOMmlGSGxBaCtLem9RL1h3VEZTMVhJSWJKMUFrMGdU?= =?utf-8?B?d0wwOFNjMXhWM2thT3ZLejRLUTNid3k5RHdWNnZRUDNsenIyZUVYOW9NTzJM?= =?utf-8?B?aFlNd3VUNENjRjNQb1FoS2VEK1FRd0drYlZYWTYxM1d6YktreC9OT0xSWFVO?= =?utf-8?B?M3kyeE5pbXhmVUZtdGNDSWtPWFJVdVEzM3dMTFlpbHc4M29vN25uTEtmKzhz?= =?utf-8?B?c3Y5ZWNvdnloUVkwNk1XYnAvMGw0Y3NscGN6bVlNTVN1WldjTkl5S0wrU3FM?= =?utf-8?B?ekxNZ05tOUZWU0ZLUnhmZFEwYnROYSt6d3NUcTB6VnU0Qy9pNnA5bUdGTEpu?= =?utf-8?B?MXdzcjdhZzFnS3dVK1B0RnM0VnM5MTVYaTl4OWIxN0dEcGxBZFQ5elkzcjJE?= =?utf-8?B?d2ZOYVUwSGZrY1N1SXF4aGU0cmlqeUxTdmxFaGpTQzNtYjcyamNYRVZGSkxL?= =?utf-8?B?WWk2UDU5U0krYXA5bEJHM0R1eHJRWGVISDN2Z2JhYmpxOWVVV3R0WTN5QmpC?= =?utf-8?B?Z1dsRkFRVzhCRU1EeW9DWnBEa0xGcVViSjZoOE0yTmhiWW9MYW90OElLUWh4?= =?utf-8?B?N1pkNmpXa2YwT05NZFFQbjllbEl3ZmRGTWlYWnFpekJDZE1UT2k2bmtOa1R4?= =?utf-8?B?QU93QXVSQkJ0QmY2dEFZUnViQktvWU1QeElYK0JJMDRhSVgyQ2tQOWpnNkNQ?= =?utf-8?B?SmZHbUxmK2J5a1djQnJOMEhyRldBbEFHVmFMQURHTVp5RCtMVmlpTUZXMlBV?= =?utf-8?B?dFh1bEd1VWNOb2E3bGJONlhjYVB6YnNNYU9WK0Z4RHBnbDc3dDRoSUd1MmQ0?= =?utf-8?B?Mko3WmpMTDltN0xjbWdhK0lHRkljaERGT1k1M1g0Ym1tOTVxUG5ncXRKSHd1?= =?utf-8?B?U1ZMY2ZvckhxTHFmZmNZK0gvS0xKZkVMM2VJblgvZjlZRUNpbFhvU1hDaStK?= =?utf-8?B?eFVienlIVENicjdMUHFJTmUyYWErVVB5d3lvQldCc25oVmk0cWlyWFNzbE9H?= =?utf-8?B?SG1OTzNGTmFYSjVxeEFlNmFCdkVKZ05pWXN6RGlhZzB1bHdXSnRZclVzWThl?= =?utf-8?Q?F5xn7YLubTJLOq71pbr/N3M=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?TGViMGt4aVh1VmNkdlFkTVpzMDIvbjFjV3VhUURXV2IrWHpSWEl1OUtmV3Bq?= =?utf-8?B?eWRwY2ZiditqRFpoeDlURmo4UTJjcVpGaWhWR05jWGI5VkxxS2VOVHlVSE85?= =?utf-8?B?V2dnYVdCSmVPS25td0djR3NXNTR4RHFJdEhpZkp2SDdScldHdkpoWVp5b2xP?= =?utf-8?B?WTFPSGYyUk16VjI4R05RMEw1Z2JDRFZMcXlEVmdsbGFPSHg3ZUg1Y0dVbXpD?= =?utf-8?B?Yy9BQ3ZwYVJVaVhFMkxaSTdDQlorVFNCdXdlb2hIL3NMMDJYQU1ta1JoVGh4?= =?utf-8?B?V20wZENVU0MzN2lSV2ZLeCtlRFBpcm9UUkJJb0JmUXRVUEZFQjVVRkN0aWpk?= =?utf-8?B?T2RPSEtWbkxUdlVSeHppdUhqdXBrRHpmaHl1V0VjWjJ5U1g5bmxmaDlmNjA3?= =?utf-8?B?WTNtMDdwdTlKQnVxY1p5bGtCK2J6bERXK0p6RjByMkZMYUNrNmhaMTZvTFRE?= =?utf-8?B?S25PVGk5T21TSldFeWV2bSsvWFdkM2F4bFdpMWNYSzlyOU9qcXFaUVhkbzhE?= =?utf-8?B?UlFTZ2YyWlpPeVhRak5OMVZIL0pqNUtsbGVnTG5QQ0J1L2RMMWNBbWJ0ZFNG?= =?utf-8?B?NWp4cHFCRFVkUjdvaWJMcDk1S3hMMElTWHlEZUNlUWVjdytPY09GWlMzQkZ5?= =?utf-8?B?akY4Z1ZVWUNtTVBvT0o5N2xjODRBSWZyN2dMYktub3A3SUpxb0dOZ2lndmh4?= =?utf-8?B?dW01Yit4VXQ1aHJBZHJ5WjBCUWljdVhRSzRHbVhpTFluMU5hek9yZXlVYm11?= =?utf-8?B?MHZIL2Y1K000MFdvSk8zT2RJdDZzcE8yYWpnc3VtN3UyeFh3Q1gwbnFrTmt6?= =?utf-8?B?WEo2L0ozcldwNDA2SWJmblQrU0N0S1pzdnF2QXJXd000UUxCUSt2WWVDSU41?= =?utf-8?B?N0REOFZWWEZlbzhSL2JDbmQ2c0xvcjRzRkE2MVpmbTJGb0daSmtPR0VWaEtX?= =?utf-8?B?OU1OR2Q1YlhKM1NOamRKeVBPWnJFd0VQcjI0bkRtRmhYSzh6WkgxdmlubHBC?= =?utf-8?B?cXVmOHRYZ0E1bks0MU1vVzQ4YTlVZGtibXJCZXJranJCNEVtYlZ6NXkrRWtS?= =?utf-8?B?R0kvVCtqck1lcGsvSUV2VVoyY0ZGM1NQVkhVVTZFSmMvTWJKSkxacEYzTy9n?= =?utf-8?B?UHRwMTF6WFpxMTBVU3pIc2g5KzFwMzVTMmRSR0hrRVZCZFR0aytocVRsVXlV?= =?utf-8?B?UTNNaTZid0RqRWhXWTNBb1BIM3VsNW1FNjQ4d1JqdnAvSDkwc1JtdGxWeGF4?= =?utf-8?B?Ly8yTG9Rd3piUFlaUHFZMGZQMGZ2UXpDSS9seEcwYVFCeEFqd3JnY0U2MDN1?= =?utf-8?B?NU5rVzdBT2lUZyt4ZjJlNTFtOEp3YTk2YmM0QVVkckJhYUk0Q2I1d1lNU2c5?= =?utf-8?B?M2wvRGdPY25laVJoTHhvOHNQSVpacnp3aDY1QUgzSE9iL0I4WmtpbWtJVndF?= =?utf-8?B?Ui8zeTlKM09Mc3FyKy9qNUxJYmdsSVluNWtRWFoxUy9CMnd1aTQ1RHNBUGZk?= =?utf-8?B?OE02RHBUN0NuSUhSaEdTR1pQb1U2S24rcnJHTThwcng2dDJEem1VMXJRbDBV?= =?utf-8?B?eEhzaHk4WkRsMlBTbzVFVU1rQ2Yvd2R0ZnA4VUZCMTM2aDdZUE5JWWQvcllR?= =?utf-8?B?QlBpdVlHc0RBQVUrUDY3M2l2Y2JzTVFYY2JNYWhRZy8zWU1RazZsM2ozanlp?= =?utf-8?B?N2dsV05DT0sxY0FscjI5emdsUGtVNXN0bysrVXlzWk9haHZVMVRTdFJDdnBB?= =?utf-8?B?M2Z3aS9ROHJvRXQ3ODk0YjlnWkVIaDZlYURJQjAvZTJ3UGU5RHN1U3JhcTZ3?= =?utf-8?B?RU5IZVJNR3hONlhINnVVa3ZxQUJHdVd4RTI5SThtVi9DeSsyYU9Xdk1YRXB5?= =?utf-8?B?dzh3VzhLdXpxMEdxY0ZFSWN3engwSFFBK0hjeThtYVkveHVzdzhXeEM0VDBk?= =?utf-8?B?TkpQdzJXQ1JyZFpaK3RxeGh0Z3ZPdEx5QWxUVDNoN3liTTUwUUlEOVF4Szk4?= =?utf-8?B?ZWQ4aCs3b0J6VnpBbXUySmJzNVZadjZmL2U5ZkRrMW5tUWZDamJDSTJpeDll?= =?utf-8?B?enRsZ0MwRVIxYkFaeis1bU45ZmpkMVFMeGw4Yit4bXhUdkdMWGNPbkdScE5B?= =?utf-8?B?VXNhTldyZ1hnSXpTQW9mdWsxaDk4aXJSRnJ6TXcxUWRDWGNOc1NPejN2REFm?= =?utf-8?B?UC9WYU5TUjczcURnRTJHMU13bW00SkZiWW1QeitOY3IwOU1NU3RMQjZBenNk?= =?utf-8?B?b2dHZkJWTDQvSlgrcUFtdG1RYWQzcHp1L1JGamZoZ0VsOFVFN0Vsc3pwWUxM?= =?utf-8?B?cHlXMmRHa3Nlb0wzcFRqTENkMmp6Q1d4RE5idmUrdi95SFNTVWZ3dz09?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 278cccb6-4eb4-4905-1138-08de544ef35b 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:40.1641 (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: iOy65UMYuDn4JEupyCIVshUeycp8YDmOHvokOKcEYPD0aCWkRmKyQMd7Bj0V355FB99/ByZfW/7I+8BX6wNqLg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR11MB5097 X-Proofpoint-GUID: f45u4V4m6g55ZqkNs8c7FBdIqm6cAxLp X-Authority-Analysis: v=2.4 cv=M6BA6iws c=1 sm=1 tr=0 ts=69690eb1 cx=c_pps a=Gy9E0H4ZmoUkNlDDtfVv6g==: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=LxIw55J96KH0fPlZK-gA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE1MDEyMSBTYWx0ZWRfX+QjiRj7WRP1+ B1eBY/TaPOXozVfU8kUqvkcgV5q049ZuLS6Ps2xFBMaM2dPii9NKZdev2fdzmA4gLq01GjUnvFt /tCe5uIh37puhdoo0fhm3k5hjjyC1s3rb2LFpUCPtW8iBaj2co3YqoJf0ZVWh7A/KSyrcungCon 1XaiX8mij2T3bSYTe9WiHAP8vlhr0oF2rPeQTDf8K0CoT2lHMQykLaeF9tWYaQ1NpxHuBNrZL0v i7HZAexYWy6QchH9+W3niBdeudiyLr5ArcTf7H0/B+/R+bkvGXwK1f0B41JbUzTsq7mqWq7nM0P XATm64gDG9ePx44KDdbIJk8E3tenK1kuCHi6k6K91hjjTJWgbW5ddPePe7CRQj3NAJqRd7sn3Cy XGWHGp9qjBKRFneRKY8yE5SjjT6pRpAhW4tsSKkYbF+rYqxGQqZ+Ro7Vxs1NLMe5bpco3dbr5Aj 2ABkcpjKjPSNllyPOhw== X-Proofpoint-ORIG-GUID: f45u4V4m6g55ZqkNs8c7FBdIqm6cAxLp 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 RX window indicates how many reception buffers the peer has available for that cport. The other peer must not send more messages than that window, or the chances of those messages being lost is very high, leading to retransmissions and poor performance. The RX window is associated with the ack number, and indicates the valid range of sequence number the other peer can use: Ack RX window Valid Sequence Range X 0 None X 1 X X 2 X -> X+1 So everytime an ack is received, the driver evaluates if the valid sequence range has changed and if so pops message from its holding queue. As the skb is moved to another queue, it cannot be passed directly to the lower layer anymore, instead a clone is passed. Signed-off-by: Damien Ri=C3=A9gel Reviewed-by: J=C3=A9r=C3=B4me Pouiller --- Changes in v2: - fix documentation of cpc_header_number_in_window which documented a unexisting parameter `end` - simplify implementation of cpc_header_get_frames_acked_count drivers/greybus/cpc/cpc.h | 9 ++++ drivers/greybus/cpc/cport.c | 5 +++ drivers/greybus/cpc/header.c | 78 ++++++++++++++++++++++++++++++++++ drivers/greybus/cpc/header.h | 6 +++ drivers/greybus/cpc/host.c | 9 ---- drivers/greybus/cpc/host.h | 1 - drivers/greybus/cpc/protocol.c | 72 ++++++++++++++++++++++++++++--- 7 files changed, 163 insertions(+), 17 deletions(-) diff --git a/drivers/greybus/cpc/cpc.h b/drivers/greybus/cpc/cpc.h index f1669585c45..e8cbe916630 100644 --- a/drivers/greybus/cpc/cpc.h +++ b/drivers/greybus/cpc/cpc.h @@ -18,6 +18,7 @@ * @cpc_hd: pointer to the CPC host device this cport belongs to * @lock: mutex to synchronize accesses to tcb and other attributes * @holding_queue: list of frames queued to be sent + * @retx_queue: list of frames sent and waiting for acknowledgment * @tcb: Transmission Control Block */ struct cpc_cport { @@ -27,12 +28,20 @@ struct cpc_cport { struct mutex lock; /* Synchronize access to state variables */ =20 struct sk_buff_head holding_queue; + struct sk_buff_head retx_queue; =20 /* + * @send_wnd: send window, maximum number of frames that the remote can a= ccept. + * TX frames should have a sequence in the range [send_una; se= nd_una + send_wnd] + * @send_nxt: send next, the next sequence number that will be used for t= ransmission + * @send_una: send unacknowledged, the oldest unacknowledged sequence num= ber * @ack: current acknowledge number * @seq: current sequence number */ struct { + u8 send_wnd; + u8 send_nxt; + u8 send_una; u8 ack; u8 seq; } tcb; diff --git a/drivers/greybus/cpc/cport.c b/drivers/greybus/cpc/cport.c index 91c39856e22..c05d89709f0 100644 --- a/drivers/greybus/cpc/cport.c +++ b/drivers/greybus/cpc/cport.c @@ -16,6 +16,9 @@ static void cpc_cport_tcb_reset(struct cpc_cport *cport) { cport->tcb.ack =3D 0; cport->tcb.seq =3D 0; + cport->tcb.send_nxt =3D 0; + cport->tcb.send_una =3D 0; + cport->tcb.send_wnd =3D 1; } =20 /** @@ -38,12 +41,14 @@ struct cpc_cport *cpc_cport_alloc(u16 cport_id, gfp_t g= fp_mask) =20 mutex_init(&cport->lock); skb_queue_head_init(&cport->holding_queue); + skb_queue_head_init(&cport->retx_queue); =20 return cport; } =20 void cpc_cport_release(struct cpc_cport *cport) { + skb_queue_purge(&cport->retx_queue); skb_queue_purge(&cport->holding_queue); kfree(cport); } diff --git a/drivers/greybus/cpc/header.c b/drivers/greybus/cpc/header.c index 8875a6fed26..dfcd5581133 100644 --- a/drivers/greybus/cpc/header.c +++ b/drivers/greybus/cpc/header.c @@ -22,6 +22,17 @@ bool cpc_header_is_control(const struct cpc_header *hdr) return hdr->ctrl_flags & CPC_HEADER_CONTROL_IS_CONTROL_MASK; } =20 +/** + * cpc_header_get_recv_wnd() - Get the receive window. + * @hdr: CPC header. + * + * Return: Receive window. + */ +u8 cpc_header_get_recv_wnd(const struct cpc_header *hdr) +{ + return hdr->recv_wnd; +} + /** * cpc_header_get_seq() - Get the sequence number. * @hdr: CPC header. @@ -33,6 +44,17 @@ u8 cpc_header_get_seq(const struct cpc_header *hdr) return hdr->seq; } =20 +/** + * cpc_header_get_ack() - Get the acknowledge number. + * @hdr: CPC header. + * + * Return: Acknowledge number. + */ +u8 cpc_header_get_ack(const struct cpc_header *hdr) +{ + return hdr->ack; +} + /** * cpc_header_get_req_ack() - Get the request acknowledge frame flag. * @hdr: CPC header. @@ -56,3 +78,59 @@ u8 cpc_header_encode_ctrl_flags(bool control, bool req_a= ck) return FIELD_PREP(CPC_HEADER_CONTROL_IS_CONTROL_MASK, control) | FIELD_PREP(CPC_HEADER_CONTROL_REQ_ACK_MASK, req_ack); } + +/** + * cpc_header_get_frames_acked_count() - Get frames to be acknowledged. + * @seq: Current sequence number of the endpoint. + * @ack: Acknowledge number of the received frame. + * + * Return: Frames to be acknowledged. + */ +u8 cpc_header_get_frames_acked_count(u8 seq, u8 ack) +{ + return ack - seq; +} + +/** + * cpc_header_number_in_window() - Test if a number is within a window. + * @start: Start of the window. + * @wnd: Window size. + * @n: Number to be tested. + * + * Given the start of the window and its size, test if the number is + * in the range [start; start + wnd). + * + * @return True if start <=3D n <=3D start + wnd - 1 (modulo 256), otherwi= se false. + */ +bool cpc_header_number_in_window(u8 start, u8 wnd, u8 n) +{ + u8 end; + + if (wnd =3D=3D 0) + return false; + + end =3D start + wnd - 1; + + return cpc_header_number_in_range(start, end, n); +} + +/** + * cpc_header_number_in_range() - Test if a number is between start and en= d (included). + * @start: Lowest limit. + * @end: Highest limit inclusively. + * @n: Number to be tested. + * + * @return True if start <=3D n <=3D end (modulo 256), otherwise false. + */ +bool cpc_header_number_in_range(u8 start, u8 end, u8 n) +{ + if (end >=3D start) { + if (n < start || n > end) + return false; + } else { + if (n > end && n < start) + return false; + } + + return true; +} diff --git a/drivers/greybus/cpc/header.h b/drivers/greybus/cpc/header.h index bf2ef41d44d..8c03aed28fa 100644 --- a/drivers/greybus/cpc/header.h +++ b/drivers/greybus/cpc/header.h @@ -42,8 +42,14 @@ struct cpc_header { #define GREYBUS_HEADER_SIZE (sizeof(struct gb_operation_msg_hdr)) =20 bool cpc_header_is_control(const struct cpc_header *hdr); +u8 cpc_header_get_recv_wnd(const struct cpc_header *hdr); u8 cpc_header_get_seq(const struct cpc_header *hdr); +u8 cpc_header_get_ack(const struct cpc_header *hdr); bool cpc_header_get_req_ack(const struct cpc_header *hdr); u8 cpc_header_encode_ctrl_flags(bool control, bool req_ack); =20 +u8 cpc_header_get_frames_acked_count(u8 seq, u8 ack); +bool cpc_header_number_in_window(u8 start, u8 wnd, u8 n); +bool cpc_header_number_in_range(u8 start, u8 end, u8 n); + #endif diff --git a/drivers/greybus/cpc/host.c b/drivers/greybus/cpc/host.c index ec43d33dfc6..a7715c0a960 100644 --- a/drivers/greybus/cpc/host.c +++ b/drivers/greybus/cpc/host.c @@ -199,15 +199,6 @@ void cpc_hd_del(struct cpc_host_device *cpc_hd) } EXPORT_SYMBOL_GPL(cpc_hd_del); =20 -void cpc_hd_message_sent(struct sk_buff *skb, int status) -{ - struct cpc_host_device *cpc_hd =3D CPC_SKB_CB(skb)->cport->cpc_hd; - struct gb_host_device *hd =3D cpc_hd->gb_hd; - - greybus_message_sent(hd, CPC_SKB_CB(skb)->gb_message, status); -} -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; diff --git a/drivers/greybus/cpc/host.h b/drivers/greybus/cpc/host.h index cc835f5298b..8f05877b2be 100644 --- a/drivers/greybus/cpc/host.h +++ b/drivers/greybus/cpc/host.h @@ -46,7 +46,6 @@ int cpc_hd_add(struct cpc_host_device *cpc_hd); void cpc_hd_put(struct cpc_host_device *cpc_hd); void cpc_hd_del(struct cpc_host_device *cpc_hd); void cpc_hd_rcvd(struct cpc_host_device *cpc_hd, struct sk_buff *skb); -void cpc_hd_message_sent(struct sk_buff *skb, int status); =20 int cpc_hd_send_skb(struct cpc_host_device *cpc_hd, struct sk_buff *skb); =20 diff --git a/drivers/greybus/cpc/protocol.c b/drivers/greybus/cpc/protocol.c index 72276818f17..a7adff2e7e7 100644 --- a/drivers/greybus/cpc/protocol.c +++ b/drivers/greybus/cpc/protocol.c @@ -14,7 +14,7 @@ static bool cpc_skb_is_sequenced(struct sk_buff *skb) return CPC_SKB_CB(skb)->cpc_flags & CPC_SKB_FLAG_REQ_ACK; } =20 -static void cpc_protocol_prepare_header(struct sk_buff *skb, u8 ack) +static void cpc_protocol_prepare_header(struct sk_buff *skb, u8 ack, u8 re= cv_window) { struct cpc_header *hdr; =20 @@ -22,7 +22,7 @@ static void cpc_protocol_prepare_header(struct sk_buff *s= kb, u8 ack) =20 hdr =3D (struct cpc_header *)skb->data; hdr->ack =3D ack; - hdr->recv_wnd =3D 0; + hdr->recv_wnd =3D recv_window; hdr->seq =3D CPC_SKB_CB(skb)->seq; hdr->ctrl_flags =3D cpc_header_encode_ctrl_flags(!CPC_SKB_CB(skb)->gb_mes= sage, cpc_skb_is_sequenced(skb)); @@ -46,11 +46,47 @@ static void cpc_protocol_queue_ack(struct cpc_cport *cp= ort, u8 ack) gb_hdr->size =3D cpu_to_le16(sizeof(*gb_hdr)); cpc_cport_pack(gb_hdr, cport->id); =20 - cpc_protocol_prepare_header(skb, ack); + cpc_protocol_prepare_header(skb, ack, CPC_HEADER_MAX_RX_WINDOW); =20 cpc_hd_send_skb(cport->cpc_hd, skb); } =20 +static void __cpc_protocol_receive_ack(struct cpc_cport *cport, u8 recv_wn= d, u8 ack) +{ + struct gb_host_device *gb_hd =3D cport->cpc_hd->gb_hd; + struct sk_buff *skb; + u8 acked_frames; + + cport->tcb.send_wnd =3D recv_wnd; + + skb =3D skb_peek(&cport->retx_queue); + if (!skb) + return; + + /* Return if no frame to ACK. */ + if (!cpc_header_number_in_range(cport->tcb.send_una, cport->tcb.send_nxt,= ack)) + return; + + /* Calculate how many frames will be ACK'd. */ + acked_frames =3D cpc_header_get_frames_acked_count(CPC_SKB_CB(skb)->seq, = ack); + + for (u8 i =3D 0; i < acked_frames; i++) { + skb =3D skb_dequeue(&cport->retx_queue); + if (!skb) { + dev_err_ratelimited(cpc_hd_dev(cport->cpc_hd), + "pending ack queue shorter than expected"); + break; + } + + if (CPC_SKB_CB(skb)->gb_message) + greybus_message_sent(gb_hd, CPC_SKB_CB(skb)->gb_message, 0); + + kfree_skb(skb); + + cport->tcb.send_una++; + } +} + void cpc_protocol_on_data(struct cpc_cport *cport, struct sk_buff *skb) { struct cpc_header *cpc_hdr =3D (struct cpc_header *)skb->data; @@ -61,6 +97,9 @@ void cpc_protocol_on_data(struct cpc_cport *cport, struct= sk_buff *skb) =20 mutex_lock(&cport->lock); =20 + __cpc_protocol_receive_ack(cport, cpc_header_get_recv_wnd(cpc_hdr), + cpc_header_get_ack(cpc_hdr)); + if (require_ack) { expected_seq =3D seq =3D=3D cport->tcb.ack; if (expected_seq) @@ -73,6 +112,8 @@ void cpc_protocol_on_data(struct cpc_cport *cport, struc= t sk_buff *skb) =20 ack =3D cport->tcb.ack; =20 + __cpc_protocol_write_head(cport); + mutex_unlock(&cport->lock); =20 /* Ack no matter if the sequence was valid or not, to resync with remote = */ @@ -86,9 +127,10 @@ void cpc_protocol_on_data(struct cpc_cport *cport, stru= ct sk_buff *skb) } } =20 -static void __cpc_protocol_write_skb(struct cpc_cport *cport, struct sk_bu= ff *skb, u8 ack) +static void __cpc_protocol_write_skb(struct cpc_cport *cport, struct sk_bu= ff *skb, u8 ack, + u8 recv_window) { - cpc_protocol_prepare_header(skb, ack); + cpc_protocol_prepare_header(skb, ack, recv_window); =20 cpc_hd_send_skb(cport->cpc_hd, skb); } @@ -97,14 +139,30 @@ static void __cpc_protocol_write_skb(struct cpc_cport = *cport, struct sk_buff *sk void __cpc_protocol_write_head(struct cpc_cport *cport) { struct sk_buff *skb; - u8 ack; + u8 ack, send_una, send_wnd; =20 ack =3D cport->tcb.ack; + send_una =3D cport->tcb.send_una; + send_wnd =3D cport->tcb.send_wnd; =20 /* For each SKB in the holding queue, clone it and pass it to lower layer= */ while ((skb =3D skb_peek(&cport->holding_queue))) { + struct sk_buff *out_skb; + + /* Skip this skb if it must be acked but the remote has no room for it. = */ + if (!cpc_header_number_in_window(send_una, send_wnd, CPC_SKB_CB(skb)->se= q)) + break; + + /* Clone and send out the skb */ + out_skb =3D skb_clone(skb, GFP_KERNEL); + if (!out_skb) + return; + skb_unlink(skb, &cport->holding_queue); =20 - __cpc_protocol_write_skb(cport, skb, ack); + __cpc_protocol_write_skb(cport, out_skb, ack, CPC_HEADER_MAX_RX_WINDOW); + + cport->tcb.send_nxt++; + skb_queue_tail(&cport->retx_queue, skb); } } --=20 2.52.0 From nobody Sat Feb 7 07:10:30 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 8414A28D8DB for ; Thu, 15 Jan 2026 16:01:25 +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=1768492887; cv=fail; b=JfZWC+LfSiHFv7Kkbau9ut0PjpV4URAhyF59DvZxuzLe/O3kHRxFWXG/GxViCx2f1O7b7Vw2UlzAY+ycoHrtDZx9P0MNA05nkHubozzLrC3K0L9CMtsDlNpuhzQRn8Pl6x74A6hDuiJ242/igyOhankSWpIKRynwBepTYPpQ120= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768492887; c=relaxed/simple; bh=o9odqtD0J1V46cfxDGrnuymj05GXLe0yIse6L/Y/K/U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=OcH9tiogbPqH0XY3NgjRRfSyp7yMh8djSKcZzfUsbRdgHGFZnPoHB6pIVVTzjTlIRJrf38nekRd7xd4EsqRnIlAcSxK9tSZSXOFtKTAmnG2nT+bDWHTO7kRO2tYCGZL8KuVVszX71xP6d7T6x44CJ2gfs8RyN9nOAkeV0xX2Hek= 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=w1DJV4sx; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=S6adbSon; 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="w1DJV4sx"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="S6adbSon" 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 60FFlYo7459381; Thu, 15 Jan 2026 09:58:44 -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=gyzU/lKkwxsVS49bSojUi1HzytzagTW8QhlDhMU7YkA=; b=w1DJV4sxJ5Oa /d1Qddithh9M7pFmETOGBfVaZBNtZf3oopUBBhP2D8T8zfhpHHJPXTZQzduiFHYi dao/lI/TzBUJFE2Nx5gWaytqOi9+GMw7EQ2jO9XJMIpUqrdVfZRZYuJNMh+JAzVd XcLb47fKrbD2ood6xCy0yEuyd0ToJNgh86onVUdE2jjmnY1kbilWz3JFFL125xGJ r+iDaRe8z0QI+6AxREayfQbenaDqyNJMZevVhGKcv4nPbKZvnOTsh/HFJy5CislO Gb6FO9tMC+EdLc2xqpoHBkRdHeIkh6bQ8/USUSDd6a2oADBcWYr3KyICvDwlvED2 Rkodu045fg== Received: from cy7pr03cu001.outbound.protection.outlook.com (mail-westcentralusazon11020081.outbound.protection.outlook.com [40.93.198.81]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4bq36kr0v2-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 15 Jan 2026 09:58:44 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ZvyeYAPScNHu7mkFM0u45OcpvI9vn4PkDYkv+UM5afZUdvW2in1oGmQtJnqVs2vbEGAxNw9cYZ5/KQwgcqMnA70JSBsi1wDA+3cdQUZEJFMhe60CD1FCgZiY5NkHWzImuYnkS16RVTkW+3B+otKI4o4cjJg8Nzc60+L/tv+EtZKaqR5T/SJiY4um1eD9+9XKxWBtdL5k9DRnmDVWGj88J+RDI3ScOqooKRNEQXWOqj0ZxtrSh3SPgIKy3UgI4UnYmh+9HcXyhjnBxW6IZ5Ul93am6eneJzz/yxR99jRXVW31m8JMVfAdTAs7c11hvnnTWdFdF/NG/EmlFgAFfe1f5Q== 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=gyzU/lKkwxsVS49bSojUi1HzytzagTW8QhlDhMU7YkA=; b=WwbgFahvYNaxfuChQe61vr/0ATaHdzDi34q2hQLcKBdB5oJT/utz9DvyW77Y1WAtxC51s2EI+9418xsCeOLyRX3KJxLCqB/yLK1sn6fGw9MItdl3U+30JbwhhB+35UBAV1TSPllKFW75kiXpysqIDBB5E+yy5PYq4Ac/P0eIOJyv5dezUXbqq5LBuFTHu0idSk0/sKf3zi2XnG+m2jtj3wAV1OWAws6sLfipa/2sYXjdelLOFTStRwnXjDjR1273DOS92A9GTOo9imkp6xCo0Tbg4KAQyQt35q6exJ6NVGN30hHiGBIWIk1ExEdnRBwd4Zqzgo6APkzbmoux0ptuEw== 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=gyzU/lKkwxsVS49bSojUi1HzytzagTW8QhlDhMU7YkA=; b=S6adbSonEdkSzU+hnZYGYg1acjXk0yRPg5UH24vOm/p0adYruYBvTg3RQU1EEgVo3YmveEHaEFkpggaX90XKS+Uy98d0Xa14leSJ5Xj4BsXPILgoqOqInQFQk0yMLwbnwrJJ8Iz20c8MfLPQKdgFj60jCBWxTsAiuwy3nRxEVxc= 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:41 +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:40 +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 12/14] greybus: cpc: let host device drivers dequeue TX frames Date: Thu, 15 Jan 2026 10:58:05 -0500 Message-ID: <20260115155808.36102-13-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: 989c9246-339a-4b32-48fb-08de544ef3c5 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?MmhSUE83WVBEUkJvWUl0VHIrMTJIR2Y4ejlVblBFTjdYT0hMNkNxdEg4MzRV?= =?utf-8?B?UVFhUjhZK05WV3cvR0FpQURFbDdSQnJJZFY0d1BUMjQxaWl3NnlZeGx2VS9G?= =?utf-8?B?VjR1dzUzcWVXcDBnK0M3c203YXR5UDhnMFdCb0FPOTlRcTlyd0RkN3VIQWtj?= =?utf-8?B?ZmUvbHJmWDhGejVWYXFFM2syVDZFampIYkNLNHBnUUhqS2RLV1pHckhYWmI2?= =?utf-8?B?eFNFRkIyK1RET29vR1REVVlYQjcwU0o2Qks1bWd6b3VyaEVZS1BrUzhibkFu?= =?utf-8?B?YWQ4ZytzblJwZDhiaUdFbDNpY0JVcFh4SzlFWHM1OU5FVjZyVmZOQ1hDQ1hG?= =?utf-8?B?K1dpV1dVRGxmdkVzTCs1LzVaWnk1QmFQTHJFQnd4eFViczNYSlRCdCsxMDl4?= =?utf-8?B?NWZIYlNpNmoyZEdJdTBtblREd3ord21Rd1NJTkdzUWc4Z0w4cmlrUkJJdzJy?= =?utf-8?B?NnVSd3JoVUdPS3JodWtrY3l4NGZxQTU5YmpYWHFheXhaYkZqdHVIQW1tWHpL?= =?utf-8?B?cThCYnlOTjBNVWk3THViUE4wVEJNbWEzVnFPOVdWZVBxdWtOZFBSMWRNNnR6?= =?utf-8?B?U1EwalIyNFhSN1F1OGo1WVNIZnA2YzZYYzIvOGIra1JvOFg0ZkVtZmhDazQr?= =?utf-8?B?empMeFJOaFc3ZW8yV0NLbTRUQkZMTGhpalRYWFlheTRxZTJZYWlwLzFqcWJ6?= =?utf-8?B?c2hWMDZ5QjVkY0E1eGpCak9nYkNJTHNtc05ocytvNXRjZnFYQmlhRG10RWJo?= =?utf-8?B?WGRBTnBIQ2d3Q1hWYkMxOWJOUVBGZml6RWhmaVVXRVNkejdlVm9lbGZGU2F3?= =?utf-8?B?QkNFL2Q5dGlXUTFKTDhQY2N2Umt2dUhTK0d6cWtMT1pRVDdlVnpzQndodm41?= =?utf-8?B?SitBTHlWdW5ER3pNa0xtV09PSXQ0QlJvVUJTNVhNdVhreVJZam9WVGhVMTE2?= =?utf-8?B?cVZBeDhVaTl3aXZvMTZ6ZktmZ1oxR1ZHazdhRkVpWERGWUtOU2V3a2FXTUo5?= =?utf-8?B?R0hHRlJjczdXWGs4ektJL3ZGVjRSQWxCZEUvb2JGK004d0o3a1VXVVF1eWtK?= =?utf-8?B?aW9KYU94NjNsWXI1ckkrOGc3dlFhQytQVVBOOWtTc1RXYWt0YnFQdTg0cWU0?= =?utf-8?B?ckRDbEtyeGo5M29CYkJ6WVRXUUlqVTgyWDJiT0svdXUvZjk3UHdvblNqQ25u?= =?utf-8?B?UjRvWnNRTGY4Q1B3WFhEM0psVzIrLzZ0VjdBQUExY0VydFRUTVRucWp4S0RV?= =?utf-8?B?SytvbGFoekh1Mk9ONXFkR3g1dzZYN0lUbjBwTFlsLzFHQ0h1a051aHVvTnlE?= =?utf-8?B?K2ZEWG0yUUlJTm84a1VnVEhENk1PWFoyUFozYUxoMGxYQ3VpalRuVGJISEk3?= =?utf-8?B?cW8wYU83U3lERkxFc21zdTBWUjNPaDdrdHBQN3l3c2YzQVNPcGUxc29JbXFN?= =?utf-8?B?VUE0NzlsV0N2YjJJeFBhWkluNjlNSDFDYkFGenNCZUJBanNUMVZFWGF6V3A1?= =?utf-8?B?S2lOU093ODZibm1CTXhjQjlacGxUMXJFZ1NvV1dLY1VrTU5aajB1UTBwa3JW?= =?utf-8?B?VjU4cXQxY0JXVkNEQkNqaGRPU0JHOWdORU9WSFk4Q0MzUldkd0QzVFVDUEIw?= =?utf-8?B?KzlHUk5zdmMvSmRyaTVtN1JKTno3MGwxRzNWVGRjQXhQTU1sV0xVdFhmcVU2?= =?utf-8?B?Rm1NYlVkbDk5ejhZRitBOXZpQkNiTG8xMEhTaDBDc0h4ZFZLVFlRcXlLMmFG?= =?utf-8?B?L2N0NVBDeDBiSHFSTWFOWnk3RmZvQVcxTjlKbDNpTlZkZ21Yb1RGSURadlkv?= =?utf-8?B?SG0vd1pOQVliS0xHbVF2aUVsaGRvQjNwelVWeXlFdE1vOHdJY09qcWtpbmt1?= =?utf-8?B?ck42SlE3ek5DWEd4cFgxcURtd24yT1dZQkphaTd1UmtmbytnU1MvU2FpTkQ1?= =?utf-8?B?aHo3c0lSRzhTUGNzNURuMTRVZFNrNDlhNitnenJYZ25SajJlRnRNSkc2ajkz?= =?utf-8?B?UkU1Qjg1UXVoOVVaUkpva3hjcXBpVW5qYzZQMGo4NlNQWmJYRUVoUWxxSFhT?= =?utf-8?B?RmhSN2JxZnhDVW1yVVlGQ2tURjV6b0FWM29pT2diWTRaT2dWdmlzSUdNbUM5?= =?utf-8?B?NkFjd3RVWW5obUhqU1lFYmwrRmJGS1ZJMG5Ubi9FT1o5dkJpTnNVenFuWTF3?= =?utf-8?Q?DZup5vodKpefANo0bBPkphQ=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?bEFZYjZJWkxEZitDbTg0dVhWcFdSd0RkOUlqem1raXV1RjdpaDRRZUplbXRL?= =?utf-8?B?dmliV0l3QThaS0FvLzlIMXdsT01YU2tpR3dmcGljQTlJZ3J6b01xZGdQOWN1?= =?utf-8?B?N251RVJHeHBHUFQxL0JWb0pNQU1ORzdiVzcyN21ubnZuMXdWaE1HK3ZLS3hm?= =?utf-8?B?YzZwaWZLaEcyYVdIdGczeHpneWN2c252Z1VmbUx4bk9MT3N3TUhMc3cyMHgy?= =?utf-8?B?L28rVHNPbWd1SzFCMjAyaWdXTVBTcU9WREl2MDJZcDlLZHh3VjlSQ25HMk5K?= =?utf-8?B?elA2dlJvRnB0WWZzb3hxL3Z1REM1ekpQbHlOQWdaTHoyS0lWcXh2Q1dVeGd5?= =?utf-8?B?TFYzU29KN2RWMEFhbmlkVkVGd1ZuSHFLWDN2RGFsQ0pVOHBTaHcycW1lcjA1?= =?utf-8?B?NENIMjU1SU8rYkhZYWtvb2w4WDVCNW4rMlN6UWZWS0lRa1JnWGQxVU1uSElH?= =?utf-8?B?YlZVaFpUcXFhTWxJL281eUs0Ujc1bHpLOTlxaTdKbWlNNS9BVHM0ckdRdjJJ?= =?utf-8?B?eGFoMzE3VklYeC9qeFZSWmtZaEUrWXJ3VG9JeE1tNStmdEpzYzhiNnhYU2ZG?= =?utf-8?B?MkZpaDMwZXM2c0hKZlhzbVgxZzk5TGkxelM5SDJ0WUtTdkNzUHVNcVhMSmtT?= =?utf-8?B?QkRwMWtQbnNoM1NOaUxNZmRVTGtvMkw4Ni90c1ltMDdwWThuN2hTWDF6cDI3?= =?utf-8?B?QnNmYU9DZ1IvSnJKdFV1cmtrUEh1ZEMrR1c3THpUckxFQU5udUdmaWd4dWxw?= =?utf-8?B?dHNESUFVU25OWllkN1N6T3BJVmhPWjlERVZUUkJqbW11bFRHQ3hnUmhpcE1x?= =?utf-8?B?SDBQWm5aUVl1a3RkWm4yYzExUStXdFlPVkxmZ3NpTSs5a2ZwaFk3cUlVZFR0?= =?utf-8?B?S09WMjVSSlkzMFU4cDVUaXh5RXVyeXR3QS9EVy8yZ1hEQ2VCU2NhcXIyRXgr?= =?utf-8?B?M1F5bS9FdTlRUGZGWVlIQWt5aGprRVIvTEQ5aXRRVm5SU21sUXBxM21SQjRp?= =?utf-8?B?YnpaYUxQMml6NEVrbm9ieFZuQ21sdmhhS2ZWRktOSHdVbHloUTRxdk9jb2g3?= =?utf-8?B?N2pQby9OQlRKYkc4NnFSdjFndHlZUWEwOW9pNDFUSncvZzhyUFV0WjVqWHpQ?= =?utf-8?B?S1ZuSzRHM245VVFvejN5bXRSRHU3cnhPbzcwKy9kRzI1RFFXd1Zxc1Z3TERW?= =?utf-8?B?YnJkTGRwL2pUUDVrR0cwTG80NVlqSXBWZ3lKbEJ6d2ZzWjBSVzhGMXUyc2hr?= =?utf-8?B?TTVrNHQvVmVKVzgvenFaZU5mWDdyVERRYXUydFNWYStDRE1yMkFHTkdlVUp0?= =?utf-8?B?cjhCQlgvZm1ZYmtXckVycXZOMjZzQ1FMaUtXM1IxdXl6cXNNc3daNU9jWHEz?= =?utf-8?B?MWgwYmY1eUhjZTYrdEVHaU5waFUwTE1UelM3ZklSZTU4TE9OSVJtNTZURHcy?= =?utf-8?B?N09QUitONXFjZGxac0x5aEN2a0c5emNBS3ZKSlpJUHZCT2UzeFU0UDFsVE1J?= =?utf-8?B?TWJ0dG9HZVlpeGhLQUJ6KzlPNUN4Nkl6ZlJqUnBDcHMwN1lOWlJQR0hoSFkw?= =?utf-8?B?aGtBMGRRZ2FTb2Q2UlhtYTJkQnZvWnl1WFgxRkREckVTeXRFcHRqVmhKd1V3?= =?utf-8?B?WHJmUXlFNmhDMjRjdlR6empOelJhamxETHpPN0xzQUFreUI2RFhmUFRDRm11?= =?utf-8?B?eFYwVnJuNWl6KzFlSjduN0xqYWVBL1hKdm1kZGM1cTBwM016MWlpTVdDajNt?= =?utf-8?B?SDhTSkxHN0VWNm5wNXVXVngwTk9jd1ByM3hTbmhpTHRMbXgrOXRkTk9Lc2ZD?= =?utf-8?B?a2wyaUl2R2VuOG40dWdHd1JFTzNvRGQ5TUxSU3hrdThpRWtXVkdSQmJ0WEhB?= =?utf-8?B?dWdEanBLdXhpOHpRZFhxMUtxMXRiMjJXQ1lWdmxUWG5lR2FtQTczUk5mZTli?= =?utf-8?B?T3hYSGEwamJoSUlqRkxUb2pJTUxCb3YxTmtjUmwxcnJVTVgrSzhtWndadk8v?= =?utf-8?B?NUhVSWVLc242RUtKQW1JbVpZQ2szVGRYMXRXMlM5UnVGOGRzb2ZXa2JabStG?= =?utf-8?B?VmdGK3VVblFoME5KVGdBZExlQ1BZdUdyTkc5eWxwT2wrN3ZscDJ0UWRuL3hO?= =?utf-8?B?QU9mZ3RiSnpvZjFtTFlSSmVIQUt0VHMzNGxvcGNEeHd4VXBMTllwMVVTMFd3?= =?utf-8?B?ZS8xZW5hYzVFR3J4dFcxR0JhZUVWUS9KMGlWTEtPNDR4ZTg1SFlyazk1Rjl3?= =?utf-8?B?WlZEbDlrcEkxNDVNZi9GMVZSaFlvbmh0V2dUUjl6SHpyQUt2WVlVT1lZdGxz?= =?utf-8?B?UE04dlk4eTg2Z2VwdThNZ28vajFQd3RLRzJPeXNyQUpTSnZQb3dGQT09?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 989c9246-339a-4b32-48fb-08de544ef3c5 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:40.8571 (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: MBz1/TOp8dVsLIcnsZKXNWMQZYpN8dwWwR/Z+ejZD6r89YZAOSV+/R2i+gKdJ6f+fBa/3tVOaPYF1kszlcX90A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR11MB5097 X-Proofpoint-GUID: Ci66CZR5ZdudoRdwQG21t769OhN70500 X-Authority-Analysis: v=2.4 cv=M6BA6iws c=1 sm=1 tr=0 ts=69690eb4 cx=c_pps a=vcV0SyA3r3yo/t37AMr7eA==: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=0-yszGi1pw2bLUArnyYA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE1MDEyMSBTYWx0ZWRfX+a6yQ7xQAqAa mnhw59+wuRMYJThKKre+hIC/V1GySBY6aIG7EGrJyaOPWYRHxRg8zL4eENmvQbqs+TfxWkADZVz +OQWIP2dAuDMd3/vLmu2o4NFfxgZklwysU+v+KcQeyVsY0MHCK4mN6Aia3XzQ90cxc2hMqYdTej ZKOw58I/NT1wKi5um0832NL3hBb1n7YnQN3hswjQ5gWdnb9Ll4OmvT1xtQUiXOOY4sGSBYk0e0D L1uHd/VVoEJaVFJaepumuq1+DlQFnnruUmnKU81h0ODjTHu45SIMQEvQVeyL36OqTg911uSgmvi TumkykmAQDsdUKYQwf5Rzbv7Qqns5RD8mGI1oYjOfxeJ52xGTXsuVkXdEN5ohYIE/YbQUjj+j8v cDl11wWma5pkpqdQ/RZUEbdJ+ChroOucLlTiLchF7UinZcHBatdIT7+oDfLQmLumNMhP8WKpEe1 cr2yJbmsSCeHwKmkV9w== X-Proofpoint-ORIG-GUID: Ci66CZR5ZdudoRdwQG21t769OhN70500 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 This lets the CPC host device drivers dequeue frames when it's convenient for them to do so, instead of forcing each to them to implement a queue to store pending skbs. The callback is changed from `transmit` to `wake_tx` and let CPC core notify these drivers when there is something to transmit. Signed-off-by: Damien Ri=C3=A9gel Reviewed-by: J=C3=A9r=C3=B4me Pouiller --- drivers/greybus/cpc/host.c | 74 ++++++++++++++++++++++++++++++++++++-- drivers/greybus/cpc/host.h | 12 +++++-- 2 files changed, 81 insertions(+), 5 deletions(-) diff --git a/drivers/greybus/cpc/host.c b/drivers/greybus/cpc/host.c index a7715c0a960..54f0b07efec 100644 --- a/drivers/greybus/cpc/host.c +++ b/drivers/greybus/cpc/host.c @@ -155,6 +155,7 @@ static struct gb_hd_driver cpc_gb_driver =3D { static void cpc_hd_init(struct cpc_host_device *cpc_hd) { mutex_init(&cpc_hd->lock); + skb_queue_head_init(&cpc_hd->tx_queue); } =20 struct cpc_host_device *cpc_hd_create(struct cpc_hd_driver *driver, struct= device *parent) @@ -162,7 +163,7 @@ struct cpc_host_device *cpc_hd_create(struct cpc_hd_dri= ver *driver, struct devic struct cpc_host_device *cpc_hd; struct gb_host_device *hd; =20 - if (!driver->transmit) { + if (!driver->wake_tx) { dev_err(parent, "missing mandatory callback\n"); return ERR_PTR(-EINVAL); } @@ -231,13 +232,80 @@ EXPORT_SYMBOL_GPL(cpc_hd_rcvd); * @cpc_hd: Host device to send SKB over. * @skb: SKB to send. */ -int cpc_hd_send_skb(struct cpc_host_device *cpc_hd, struct sk_buff *skb) +void cpc_hd_send_skb(struct cpc_host_device *cpc_hd, struct sk_buff *skb) { const struct cpc_hd_driver *drv =3D cpc_hd->driver; =20 - return drv->transmit(cpc_hd, skb); + mutex_lock(&cpc_hd->lock); + skb_queue_tail(&cpc_hd->tx_queue, skb); + mutex_unlock(&cpc_hd->lock); + + drv->wake_tx(cpc_hd); } =20 +/** + * cpc_hd_tx_queue_empty() - Check if transmit queue is empty. + * @cpc_hd: CPC Host Device. + * + * Return: True if transmit queue is empty, false otherwise. + */ +bool cpc_hd_tx_queue_empty(struct cpc_host_device *cpc_hd) +{ + bool empty; + + mutex_lock(&cpc_hd->lock); + empty =3D skb_queue_empty(&cpc_hd->tx_queue); + mutex_unlock(&cpc_hd->lock); + + return empty; +} +EXPORT_SYMBOL_GPL(cpc_hd_tx_queue_empty); + +/** + * cpc_hd_dequeue() - Get the next SKB that was queued for transmission. + * @cpc_hd: CPC Host Device. + * + * Get an SKB that was previously queued by cpc_hd_send_skb(). + * + * Return: An SKB, or %NULL if queue was empty. + */ +struct sk_buff *cpc_hd_dequeue(struct cpc_host_device *cpc_hd) +{ + struct sk_buff *skb; + + mutex_lock(&cpc_hd->lock); + skb =3D skb_dequeue(&cpc_hd->tx_queue); + mutex_unlock(&cpc_hd->lock); + + return skb; +} +EXPORT_SYMBOL_GPL(cpc_hd_dequeue); + +/** + * cpc_hd_dequeue_many() - Get the next max_frames SKBs that were queued f= or transmission. + * @cpc_hd: CPC host device. + * @frame_list: Caller-provided sk_buff_head to fill with dequeued frames. + * @max_frames: Maximum number of frames to dequeue. + * + * Return: Number of frames actually dequeued. + */ +u32 cpc_hd_dequeue_many(struct cpc_host_device *cpc_hd, struct sk_buff_hea= d *frame_list, + unsigned int max_frames) +{ + struct sk_buff *skb; + unsigned int count =3D 0; + + mutex_lock(&cpc_hd->lock); + while (count < max_frames && (skb =3D skb_dequeue(&cpc_hd->tx_queue))) { + skb_queue_tail(frame_list, skb); + count++; + } + mutex_unlock(&cpc_hd->lock); + + return count; +} +EXPORT_SYMBOL_GPL(cpc_hd_dequeue_many); + MODULE_DESCRIPTION("Greybus over CPC"); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Silicon Laboratories, Inc."); diff --git a/drivers/greybus/cpc/host.h b/drivers/greybus/cpc/host.h index 8f05877b2be..ee6a86de309 100644 --- a/drivers/greybus/cpc/host.h +++ b/drivers/greybus/cpc/host.h @@ -9,6 +9,7 @@ #include #include #include +#include #include =20 #define GB_CPC_MSG_SIZE_MAX 4096 @@ -18,7 +19,7 @@ struct cpc_cport; struct cpc_host_device; =20 struct cpc_hd_driver { - int (*transmit)(struct cpc_host_device *hd, struct sk_buff *skb); + int (*wake_tx)(struct cpc_host_device *cpc_hd); }; =20 /** @@ -34,6 +35,8 @@ struct cpc_host_device { =20 struct mutex lock; /* Synchronize access to cports */ struct cpc_cport *cports[GB_CPC_NUM_CPORTS]; + + struct sk_buff_head tx_queue; }; =20 static inline struct device *cpc_hd_dev(struct cpc_host_device *cpc_hd) @@ -47,6 +50,11 @@ void cpc_hd_put(struct cpc_host_device *cpc_hd); void cpc_hd_del(struct cpc_host_device *cpc_hd); void cpc_hd_rcvd(struct cpc_host_device *cpc_hd, struct sk_buff *skb); =20 -int cpc_hd_send_skb(struct cpc_host_device *cpc_hd, struct sk_buff *skb); +void cpc_hd_send_skb(struct cpc_host_device *cpc_hd, struct sk_buff *skb); + +bool cpc_hd_tx_queue_empty(struct cpc_host_device *cpc_hd); +struct sk_buff *cpc_hd_dequeue(struct cpc_host_device *cpc_hd); +u32 cpc_hd_dequeue_many(struct cpc_host_device *cpc_hd, struct sk_buff_hea= d *frame_list, + unsigned int max_frames); =20 #endif --=20 2.52.0 From nobody Sat Feb 7 07:10:30 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 EA5272C0F75 for ; Thu, 15 Jan 2026 16:13:22 +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=1768493604; cv=fail; b=YThB5K/m86g0WXGIImhiI6QWB4z7wvXdH5qzA2DkvfJSEgxtKGAuXyEOFulngnkwfOhR1zQFzm8p4Aejle8R6ujO7S9ov+Q/rJoOnOo2lEuXdYJjoem7yOodNLsbsAcYVJx+rxTLgS+IpgQ2CL3BoeXGfMJTcbKTb+O/z3th6Yo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768493604; c=relaxed/simple; bh=vuVO2kwhZk58I8eahhncIFQm8aWvIr+8fT2Dfa3dZpY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=NNfd5Tqe1dkOfq7c7KsByUaxlkHGUyyVop4sRcx2XDKWMtJeMG4r+7noR2XDex6z2Q1LoD4YLZ8/1lsZXBRchc9r5e8x6YFjjM7ESqMra4REVkh+lgE/aBxbYjUGQQkwbL2GBr98ItL0PfG5g1hPXV+hvh24VJPc4omAy07gcVY= 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=qsxrVSUD; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=IJ4KTj1F; 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="qsxrVSUD"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="IJ4KTj1F" 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 60FFlYo8459381; Thu, 15 Jan 2026 09:58:45 -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=UjahAt9N80KpRVzgR1P8+Y6TTHFQJrvR1ZV6gMudU8k=; b=qsxrVSUDBQxz yXbjvqgacKGWhbQwhkSTqGszbyBlPBt8UfDDzoAru1cgDPcsvRhwv6czL8Z2OvV2 +9QZML7Rmfa/H7+ege3nti6scL5xbUy+VA7r1LRa/C/s74nkozO6pt/7YwDFlzBO Bfn1Frbb+CmdOcTF4x8upslUZA8k05qG6Zgq+wfFoHOKg0JjpKx9tm2iNtnX8/j/ mmdvTz+2bwOAFom/byQC9Gn2sW6UxBmL6f7xqUS3P2hKM3jyNGflrev6a761pKnS C4jTFs/I0s43yn7CbQImhf+vDMjsfrGWI14PtlmE6JdyIQB2AyLOkq3cCIvKX/as 77oG4iA4mg== Received: from cy7pr03cu001.outbound.protection.outlook.com (mail-westcentralusazon11020081.outbound.protection.outlook.com [40.93.198.81]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4bq36kr0v2-2 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 15 Jan 2026 09:58:45 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=p6AC30ACnipnkzsBXPHeK+bYjDb0C2jEl1iCSDvMIit+N7Wso5s0ShhCXBbvEE/+k8JfKv9csNIMDQHPySjP6oIjJEZb+3im3NU0PQKvUqb8JQ99U8JV/n0k2d1iyFMYt7T/kvYKjPM+h6pbVfxxkjviD3a/kr54TAkN9FC15THJxdO73dtZSJhkn1LprqU4f3UKuiQhkx7hrSNc4rRAScv/dw+ox3mZT0WBbGCju6TA/WeiQCeyosqJKOBgIRnLbdQgEGuzq8VclTo5s0fQwCuoNB8SfCN6p+Edb73jhEyFjafpMBpzIHsPuVB6IYktnolRDJ24TZnN67M6mq1lSw== 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=UjahAt9N80KpRVzgR1P8+Y6TTHFQJrvR1ZV6gMudU8k=; b=noKgv6ppBpiBsMfbayIYSC8Eg+mhz2or3y0vFrr3dn/7BgzOXlRCq5EJHF0MEQeVudHBQxSWBJ+1bslCB5b9NQvRfq2kgCfxDBzkYKYYL0n+J5xTFtXwedl//DgFrafRFf6cIJbmhXaas13Ac0DpibBPRJ8xXqLh+CZuLLNPNjqUFUKxzQsnKYKp0tvLEhFvO3Kfp+b0wFm6mh7ibCr0XkUiP741Sh8NgXlCx0sW8g8bhuosSwOEdR3HRrcOE3O4stpuR2+8O8LEtceJI6lY7fe3eBRzlB+DHdA5muGcYrFWQiws2puGzrMcZ2JWZZv4dsyFiAvvPULt9l0VDqwgnQ== 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=UjahAt9N80KpRVzgR1P8+Y6TTHFQJrvR1ZV6gMudU8k=; b=IJ4KTj1F3m9o46BwIKWqHfQN7Suj2VzyU9DKgLg7OZHu6zCP4a3H6N3Sg2FtefYW2x6o040pZoy+gO9m25hMYsl5MxYbQ3l48EEyn5yQrGLAn+25mAI2swPuOzI5n5HbAngbhICVsqrX4GzkXtqLroaFHZBPOL1U6cahaQa3I1g= 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:41 +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:41 +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 13/14] greybus: cpc: add private data pointer in CPC Host Device Date: Thu, 15 Jan 2026 10:58:06 -0500 Message-ID: <20260115155808.36102-14-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: 23b98d26-1ad8-4aa8-4fce-08de544ef42f 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?M0Zqa2tVb2tHSjB1MDhzZ3JRUGI0SkFPZVE0NmFoYkpOckQvSTBvbUxNSGRm?= =?utf-8?B?QXZFbGV1cm9nZDBGRFNrTUpiUGtxd3JMTjkxLzZIVWFqb2FRU0wzNklzbnNV?= =?utf-8?B?M1Bkb2Zpa0NQbEtyU3RRYXd6MHlpYjBoYUJXUjBRdGxpd09EWnYwZHhXdGZK?= =?utf-8?B?T0NFWjJsNlc0a05PM1FCK2RmYVkweUUremp5ejJneDZ0VmJrcnh1ZW1DbHp2?= =?utf-8?B?b2U4TEZONldITEY0S2Z3c1IrZlU1eWJ3cXF4VDRERHgrZnBNUTNYNUx2bXdV?= =?utf-8?B?M2hLR3ZVaWY5NEVYK0UyYXNWMytJMWZXdkRQZSs1bzUwNWhrVjNrYVhmT2dP?= =?utf-8?B?ck1jM0ZhemxURmxjaU5VRVZlQnU1b2EwMVp0VmRXemhrQlMvS1AxTnl4TFJW?= =?utf-8?B?OWtMYjIxcHJYZW5sVldlWUxmM2ZOam5BQnkzVFQ5cHRBdTVCRHlBV1NFR0lN?= =?utf-8?B?cUxRaTJmbjRLYWFsbTR2Y0d0YVhjeS82ZWZqWCt2aEVZSDd4bmpQNzgvWXo2?= =?utf-8?B?cFNmSUcvUEMwVWJ2WndSKzdYcm9TOEdreWpqb2t0NWRUcEY5RnRUVmlxRjc5?= =?utf-8?B?WlNNY3pZdG1XcEd0YlE5SWR2Z21WbCtLNUwzdjV4aXBRRTJZcWRjMDNHYm8y?= =?utf-8?B?dmhEWmFhNU90NzQrTjZ3SGhYWE1EKzRwWUt2YnF5cXBWdG5meDFMMjNMcXM5?= =?utf-8?B?T1ptM0JXcHlUaUEvNzBUcDZKd1pZRy9TT1NtR0Q5a1NPTE41eFdwZUNsVlhQ?= =?utf-8?B?T2hxRlUvVmFpS2dJdkEzQWJTY2t5bXczd1BmOHNQeGp3ZmUyenI4QUJVQzdP?= =?utf-8?B?RXFoTFV2YWhMb2Z2WjBqUW44azByOVJaOHFkelNFeGNNWitvSGpCYWpCRDJy?= =?utf-8?B?QXU3aTh1QlBURFpaa05VKytKZmVkdngxcXBxNGVFTUZFdjZlUVFieEtmNDE5?= =?utf-8?B?QVI3RzJ6MmNpN1JqbVhKK0p0UHg2UU4ySi9mMlAzUHpHTjQyd2plMk1ubXpZ?= =?utf-8?B?cTRlTC9TMnd3UVlpVUEzdjA1MDVvRXFOL3hwY3dhR3RKMWdIUTJ2UmthZDhY?= =?utf-8?B?dndWaWxFM3Z0bmwyN014UTFGOEpscEJ4Nlc2MEZCd1lvK1Z1cXE3bUx6OVNh?= =?utf-8?B?eHlReERmL0NyNkJ3eFY2RFIvVXFvaFlPMktCRTN6eTM2UG1vMUIveW5lY2Nt?= =?utf-8?B?Nm9tRDBsN1M3U3lYME5rb0hsT2V3TWVPZGlUTTVLQktkZlZRVlFUWWpPb21m?= =?utf-8?B?VzhiNFZ4aDVnM2RFRk9pU3kweFB1bGM5TGxRYno0eC91NDN0VmRWanNyd2s3?= =?utf-8?B?UXJ1OCtMeWQ4Y1FqNmV6RURmbEc4U1pNRGlPSFdldk9tVS9ORzd0TG1MOUQz?= =?utf-8?B?THk3bTNRTG94d0QxQ0NaZFpPY0pmNG45eUZiMFlXN1NZaEhibTFpQXpRbTB4?= =?utf-8?B?K2tLdWVGVENqSVBFNTF1NDZBbGQ2bnk5SEJRZTZOOVdDaGlld2N6YkVxenF2?= =?utf-8?B?b0pxNDhDVEJ4MVBJZlM2V25reENjeXYrQnhtN24xZWkveXNyUW5XL2liSUtW?= =?utf-8?B?c2tlYjg0YVJjbmJMUEdCOCtjRjdrdVRhU3pGckNkZkM4OXp0MEZTbTB6SjBL?= =?utf-8?B?eGlhS0VKVktVck9McnZCWFJpMDdIZW1XNktYaXlabExKdldvODlhbHN1S0Fa?= =?utf-8?B?WVlLcFVac2tlaklXSXp6amRJTkt3Tlp1b2x6ZHZRZnM0U3IvMmVtWEt4anJw?= =?utf-8?B?MnBOZFFlcEsreGxHMjR3K1MzWmF4WU5uWitPb3lHdDZVeVR3VTB4djV3bVoy?= =?utf-8?B?U3hJN2xPSytHeDc1ZTFWc0hQeEY4dUVGUE5iWXZaQjQwQzRVbmhKZW52WFpN?= =?utf-8?B?YkEvSm9pb1IwSUYxdHk2c3lJdjBkSXdVK2VjT2lOT2dwU2NoWnBBUlY0ZmFZ?= =?utf-8?B?Y3BRMG5nbzZjekdmN044RlQrV0NXNDN0UXJhMWtjTmNJQlBMQmMzMDUxVGow?= =?utf-8?B?T3ovZmo0QW1rdzZYZUQwaUdXWmxoaUtZUTdkVUlrck1DeUJ6SFlqYzA0Vm15?= =?utf-8?B?am5uajVJTUpKQ3BUME9VUGpZSXJ3QWdFcTRXbFhqZjJJZWlrMHBvNEcwb2tn?= =?utf-8?B?NVJYSnMxL1IyVEF4ZnMwZlhzaUlsZis4TXFucFR1a1YzY1RqdHpmRXBXSlBp?= =?utf-8?Q?3GZ+N1INR1YhN8rKmy1o/ug=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?ZGZXYUZ1VkNjbkxzVlFmYng1dlZHa2twVHRlc0lGeDM0MVI1bU5LTjZjN01V?= =?utf-8?B?VWNGME1SM1RIRURqMjlUTTZySEMyYmprUVBkbUJiTmtmZENDdHNzWVVHd2hn?= =?utf-8?B?OEgrWDQxcmxxbjdoTDV3ZmFjSEZKLzNNTUlmUnRFbW10MmxQTkU1S09YQWpU?= =?utf-8?B?RWFjNnRVQVNqS0pWc2lvUzJOMmU1a0kwbUtyWmJWQWdzWDI1aXdVSFkvS1Mw?= =?utf-8?B?NFRkanc4NUkxY0Y3MVh1Ulp3SEZzWW8xVWVPN0pNSlNUMHlkSmpHK2dqTkVo?= =?utf-8?B?OEN4RklUUEdCb2lFbnhZYUxrS0Rwb2VWY08wWHFzRUU4NjZham9WZysra0E4?= =?utf-8?B?ekpXWVE1NjZUWkhCaUNYMDVMWHBJY1hWMjU0M2oyemRYT2MreGZ0VW16U3hi?= =?utf-8?B?c0t3Syt0SGtkb0V5YjZGTHozTFRJVFBjc21vU0RUaS84OE1lQnY4MlpCWjBw?= =?utf-8?B?eFNvY21aSW55c09NdGxMekFGdVY5WXVTcFJaSExZK2syUHdiazRoRFhtcjdv?= =?utf-8?B?dzVRcFVyWnpQY2l0QkRRZHRnQWNTMWlSTldqQllwTjRuUGlTcnV3VVlLY0lr?= =?utf-8?B?VGxOeFU1dERKbUs0cERRNnh0ekdlN2c0WFJEOCtNdTM5bzNrcFlYVFhMSTht?= =?utf-8?B?czFua0VwOXczSElZbmhHdVplR0h6NmpmVHJWbkdPUDE1OHVnYnMzTitJbjFh?= =?utf-8?B?YWhOOHoxSXdqdHVxYWdEWDM0WnNVM1pQM2JzWU5zM01hMlF4d1JlaEZJZFNI?= =?utf-8?B?MUVZN1pZRkcwNzJLbnVJM0dzcGlHbDJtaEhsQjNMWkdwaFgrcWN2YUplVk10?= =?utf-8?B?empTYW93dkZ2VS9FT245U2k4eExpRk5SMHpjbWFRcW10Wk5MczRWWU9QTUdQ?= =?utf-8?B?UkNXQzlKc0taUXNPamJwcXdnb1pUakNBb0UvR2RuakVYMmkvekxLS2Z6OHF3?= =?utf-8?B?Uks0T25JeUxZdGJna3Q0MnVmSTVjMy9uQTM5N3l4ZzF4UWFzQzlXQ2hlUnNa?= =?utf-8?B?L0dqbTBCcE5FR3dnZERxczM5V3RVSEVMV29WeDhTRS8ybCt5OS9EY2JjemRJ?= =?utf-8?B?alN2NDJFNnRNRnVBQ0VCc243dTNvOVJlQjI3L0pJeFc2NmdPeGhjUkl5Ti9n?= =?utf-8?B?M09ZOVcvdWRNU0ZsNCtVUnE0VS96T01qM1NiL0R1K3pjS3ZJWHp4aHp0Zy84?= =?utf-8?B?Q2xEcEsrMmJURnMraVN3Y2x3Qms5UFcwVDhkdDh1eld2emRINjN3L2UwM1Fz?= =?utf-8?B?TVNoV0FxVEdLdWZhWlM1S3Z5bERmdEtSNU5IYjU4WkNlZ0d3WmhIbkd4ODJ1?= =?utf-8?B?eWw1ODNtVkZuaEdDZHBQeVdjeUE0bGgwNEMzOGtaTTlzeGd5WXNrTGlaWFhi?= =?utf-8?B?RFN4N2RPMGlYSzNMaWF0a0xTNkFkNVRCL3VFWU9Kb0JLVWFPbkpKUjFnTW95?= =?utf-8?B?aEpDeVlpekhFVDF0M1d3a1U2c25GdmhHVHJiVFVGVjlkRzRmQVNGOW1qRzRt?= =?utf-8?B?SURZaS9VcVg3ZWUzL2JlVEN4RkN0U3ZXSG1mQUttejBJUVpMWGxvYmU4SGZ1?= =?utf-8?B?a09vU1Vva0lKQlpueUhoTjZaOE04TWRZZHYzeXVKSFZYajR6YzBlZ05PVXFh?= =?utf-8?B?bkdtckh1WTdZY3dLOHVQekRVSHBIWE1RbHBZYzhkaHoycUtlS2d3S2VLaTFl?= =?utf-8?B?WUNmNzlYbHhBUW5yWnlTVGhaVmZIcXpBV1ZkQ1FPRzhWTE5tUkt3Sk5KSko3?= =?utf-8?B?Z1M5VE5MRndHWHlJNVBNOWNlaXpQTUt5ZHpCTUV1d0M5TjVETzN5TmtaSmhZ?= =?utf-8?B?TnVwamczMEJPL2FDbFU5eSs5ZUIwNW02bDZIZklCZTFBeUdWS1VhVFk3UmVM?= =?utf-8?B?bXZWaDJBMnN6amIyc3hiekhmQVN5SG5DcDZsVmVXMlc3ZUxGTSt6SFBydStO?= =?utf-8?B?OWVWNzNQNHRBclZsd1E2UmVrdnhUc01DaUxObFo1cEE3WVMzTXlTR2d4RHNk?= =?utf-8?B?OC9HaTkxTXlxaVFJRXFjaTFZdWdqT3ZJM3paWWl4NmpaaWljVWpVbUhwbG9G?= =?utf-8?B?Ukxlc0pRVTE2aFpCdVE3eFB4TW9XSFVDQ2pDcytIaHpNUmwweFJ2ZzF3SEU5?= =?utf-8?B?bkg4eUNaVmNFa2pSRTNEMnJibzFOQlEzb0xTUFl6TEJ2Z3dlNXZsYXRkUTcy?= =?utf-8?B?N256UU5icnRaSjZ3bXBPMG9ISUJhQlFJOXhpRU8vb0RWdGhSZFZ5d29NZElj?= =?utf-8?B?N1BkNFlWZHgwUkdjSmpUb0RYelhzS09KZDF3Z0ZpSEVBQjFyZ3B5eS81eGp6?= =?utf-8?B?K05VaVUwd3ZIODNzNVgrd2FkZzhPV2Q3OFhLclZ4eXdUQ3RTNEgvZz09?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 23b98d26-1ad8-4aa8-4fce-08de544ef42f 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:41.5414 (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: Qg/zzAwSNVcKMlQH43RkTBHkjk5W23sJo+etqt26LdEmGbZOIVWjvPdL0PzhHoAeAmrsPdP0MAXAdvr5a8zFfw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR11MB5097 X-Proofpoint-GUID: qV9M16dX6mfDx6XHhf-IBfH5swyhdxW9 X-Authority-Analysis: v=2.4 cv=M6BA6iws c=1 sm=1 tr=0 ts=69690eb5 cx=c_pps a=vcV0SyA3r3yo/t37AMr7eA==: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=8szWe6Y7soD9Pg2qZbAA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE1MDEyMSBTYWx0ZWRfX1C0o/F6A922Q qDPz1s6/IXiEYSqmArTrJgxJCmt36QYAGI9KS9PqfQHp2TEHed+wRoRMPV5aoU3FkeFCmGGK64r clwGv9Jswe8ytEjD6oh5H2c3sfFWftVngmvLZ0S1kvt01AtKF78WeltdRq0yOujrM3wwWd/TA9e HPwy5UKX67xTx68ZNTpnkMVmljRPS7/be6Tifo31bx33/t1WAsIQGG1AFTxYBpvRbXoVV4z8xvs jG+YVff54bsNtC5Nc68pX4+rprdx2UlqAmuqh33UgaLyv7+9F5WV+zWu3DmY2lDcbueWwvEq6ZJ Yi/x9nvCdYJbk19NxyStqa+LZ9PtlIi1qcBx6hhza3OEMc9u16+EQBBZ6mf/Q1zXwmXwMuchSbN ecnyrpCxItYmL/BrOK6zjSe7Q8CTkVfJhSGKNlNqnPVCvDA2SUXFHjJhDW5ohIMARZX6ksSlV5m tXxZmQntZyL3E/DtXwQ== X-Proofpoint-ORIG-GUID: qV9M16dX6mfDx6XHhf-IBfH5swyhdxW9 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 Add a private data pointer when creating a CPC Host Device. This lets the host device drivers get back their context more easily in the callbacks. Signed-off-by: Damien Ri=C3=A9gel Reviewed-by: J=C3=A9r=C3=B4me Pouiller --- drivers/greybus/cpc/host.c | 4 +++- drivers/greybus/cpc/host.h | 5 ++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/greybus/cpc/host.c b/drivers/greybus/cpc/host.c index 54f0b07efec..2784207279e 100644 --- a/drivers/greybus/cpc/host.c +++ b/drivers/greybus/cpc/host.c @@ -158,7 +158,8 @@ static void cpc_hd_init(struct cpc_host_device *cpc_hd) skb_queue_head_init(&cpc_hd->tx_queue); } =20 -struct cpc_host_device *cpc_hd_create(struct cpc_hd_driver *driver, struct= device *parent) +struct cpc_host_device *cpc_hd_create(struct cpc_hd_driver *driver, struct= device *parent, + void *priv) { struct cpc_host_device *cpc_hd; struct gb_host_device *hd; @@ -175,6 +176,7 @@ struct cpc_host_device *cpc_hd_create(struct cpc_hd_dri= ver *driver, struct devic cpc_hd =3D gb_hd_to_cpc_hd(hd); cpc_hd->gb_hd =3D hd; cpc_hd->driver =3D driver; + cpc_hd->priv =3D priv; =20 cpc_hd_init(cpc_hd); =20 diff --git a/drivers/greybus/cpc/host.h b/drivers/greybus/cpc/host.h index ee6a86de309..4bb7339b394 100644 --- a/drivers/greybus/cpc/host.h +++ b/drivers/greybus/cpc/host.h @@ -37,6 +37,8 @@ struct cpc_host_device { struct cpc_cport *cports[GB_CPC_NUM_CPORTS]; =20 struct sk_buff_head tx_queue; + + void *priv; }; =20 static inline struct device *cpc_hd_dev(struct cpc_host_device *cpc_hd) @@ -44,7 +46,8 @@ static inline struct device *cpc_hd_dev(struct cpc_host_d= evice *cpc_hd) return &cpc_hd->gb_hd->dev; } =20 -struct cpc_host_device *cpc_hd_create(struct cpc_hd_driver *driver, struct= device *parent); +struct cpc_host_device *cpc_hd_create(struct cpc_hd_driver *driver, struct= device *parent, + void *priv); int cpc_hd_add(struct cpc_host_device *cpc_hd); void cpc_hd_put(struct cpc_host_device *cpc_hd); void cpc_hd_del(struct cpc_host_device *cpc_hd); --=20 2.52.0 From nobody Sat Feb 7 07:10:30 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 BE30C2BFC85 for ; Thu, 15 Jan 2026 16:01:33 +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=1768492895; cv=fail; b=EawvByp2RFcZtB0wsM0TSjwt1MxOW/SNI9fpB2SHl2xSBt/Gg/ri+cSXelsooA+AS3TM6uRPg4DKn4Zx4ulD7qyfF7ZTzsehHcpAj0QjTYa6OX00oRf4WtZf4w4ZKQJqGngf7y/h5ibH8T47DYTVwXnV+SDkiFcUnUH02wabuVY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768492895; c=relaxed/simple; bh=wJNsBnMY2qFM3n2LmOlnTYMZQf8ul/wywbrioDvDTjw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=p2v8OUKBMy+GBti3bNMCmeuSnHdn7Hpo9+Uixy3u5vRvMCsFu9qUEbALeq2MvoVYQxYKDMOHYCasOqBQvisKz3tzTghsqV9+RycmsSpQsPzGdz70VNfo3u5zmr2uit2i1eGaJhx3mSLVa/bWDw73x5pH65khxwg+I/DuNnbxKfE= 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=AQ+TjHrd; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=Ybs0oCcn; 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="AQ+TjHrd"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="Ybs0oCcn" 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 60FFlYo9459381; Thu, 15 Jan 2026 09:58:46 -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=wX4mgiKiMh5m9eVFFQe5fDFOFjkeKELAsuU9KpghTWc=; b=AQ+TjHrdiRjn TcIV3Klr53/ZVLJQhuPM7P2ohqc4rsSturCRqbQpAd2BaMfepHvmQcH3QGIYX3Ge 24XlLqG8IoGPSqdVH3E8euzfMLFzPdryzTPSJLnRleipzdWpfPo9PxWzbjr4rkt3 c3Uaj+vBU5tjAu0owS8paCV1HnczFnngPVmJrv6Z9mNx9y1eoSVBgOie2hMVQF3N xf1z8ltpaHF4cZ7VEuhW3/dGCikSqzFgIFHvRCrWG38Jr1Q3W78KWDTM+EE4rNyD vaRSr14m9w9bFiu+25brIOeplRIMusHSNb86e6wwzS6dzMadIHCDEpk9F1ZsylnR SQg29woEvg== Received: from cy7pr03cu001.outbound.protection.outlook.com (mail-westcentralusazon11020081.outbound.protection.outlook.com [40.93.198.81]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4bq36kr0v2-3 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 15 Jan 2026 09:58:45 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=AW7gepucfUqWuYtFjIDcLlkaQqIea0J8/WgCt4FiOnZDw6jp3PhH3THDzjT6xrRy0fDG5eFXoJMPGxQmldGydYQXWfJv+7Z9Q99D3xtdt7hQcrbcAV4ljsNdC8GCBkmGWoUHUfPlakbG4d5CLi5iRCp8QkNet2GwxVZr+GePqwoYl/A3hPmwSnT+Fkni3RxltwogeHZclBNrULzUhatqZ88Ov3RHMtXnBKG/B3Fq6orfmqb7xUZNqOkcDR2QuvEUwRnmMLuNDq0RKs9a1lhE0/PdEoT+fNsuFRL110KJGjHBxC4JLJ6AJBHy/7X9QithZh8RvUcVS7JCX3gSF/ITCg== 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=wX4mgiKiMh5m9eVFFQe5fDFOFjkeKELAsuU9KpghTWc=; b=kl/MPPxj+5XdepbgpuhrSWtzlwFKul/mAbAfTy2OKm7aOenO4S+K4yaOjpbxHGd8CbFvxgGs7mXyDPySjQecWcGaHEGXdTnj1ET5DYDqkX7MwgJqsS1lGZPX4smt16XPfUVyjfQHpzdt7Zj7QixFWsOZuVDKUjCHyfbu482sGe6hW2YjmDTmCW5u7/bKvV8Z4EvJOxdS3f+fgI1Zp1jPNvJXRUAfNXL05RqQE0mkoh4iCvy8IMUkj49Gcvvo0mycUJoiwHoacQJQs/XEZJHJFsIpQp4EoUKtpEc5UkSwDc6XkSwpIOf/mCRfGw5N1ohn1b/3wIyKPnMjnrL5Lqq7sA== 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=wX4mgiKiMh5m9eVFFQe5fDFOFjkeKELAsuU9KpghTWc=; b=Ybs0oCcnykdvN7bfQoB6YVGfGupIxCJkSTRw6SMGPnNfl3WhqW/6s/MaHRQs3z7CiZAwTDSI3BM2qofw2jvBa5bfu2crDnjdyYSloTyuSy2S3jRu3UJNiM5DVe7YEZzd4q9jL+X4/W4JLFBnl3Fsnmy0UvIG+xdkIOLjRF2+st8= 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:44 +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:42 +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 , Gabriel Beaulieu , =?UTF-8?q?Damien=20Ri=C3=A9gel?= Subject: [PATCH v2 14/14] greybus: cpc: add CPC SDIO host driver Date: Thu, 15 Jan 2026 10:58:07 -0500 Message-ID: <20260115155808.36102-15-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: 628c3b90-ef4f-4244-591e-08de544ef4a2 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?UkZHWFlENDVobXBNbHptOFRoSWtNNlNzc2ZlTTZUdGJMTDF4NWpUd2h4ZWJt?= =?utf-8?B?c2ZodS9NZkk4NUFGSERMTFUzZ3YrdzMzbUdDc2hjaGtlRVNQZzJMNUlnOC9G?= =?utf-8?B?bmh2cmxDbU1KbUlTWG5zNFhGL0dpL0NlTEtZMUk3MG4zUzF1WlNiWWNKQnI5?= =?utf-8?B?anVLeUdhRmRCb2k0eFdGOG9FME5BelFVOWllUlpLSUxZSzkxcmxTaHBPRmtF?= =?utf-8?B?eHNzN1djcU5tR2p2NDVrTkxCanBPR0ZoZGxNK3A2aThlUmhjbnNyQ1lGanRK?= =?utf-8?B?cXNkMk00c3JLc25UaFBxQ210K00vSFU1WGZYSlVROWYrMHJnVVBHSjY2R1Fa?= =?utf-8?B?Y1VUaU82T3I1Ry9hMEVyeWl6Y2k2L0xIdVZDdHVkcmVlbmFoY1FDNFpVYUFz?= =?utf-8?B?NTh3Qlh0eE11TWc4QlBsTFpGcUR6WFREN3hldVhxRTQ4YW44RlpGd3dqa0c5?= =?utf-8?B?S1Jjak9EdEJmWnN5b1BrQUhmdjBvc08wc0hYRXRUUU44RzA2bUlieHI3NjZP?= =?utf-8?B?WnlMcm1SOTdYRVAwZElHVStBdXpnek1TSExSWHB2TVYrNHlnUVJJM1NBanNG?= =?utf-8?B?UG5VNi9pakh2Mk83R2tkeE0wOThpMWU1N3Y3VEVLQm5XUGt2RW05ZjJOT0FQ?= =?utf-8?B?UlFjbGtibmlWZEhnM2VlUU5KQWVySEJGeDFLZmxNQWVraStMRmlIVjBzYkJv?= =?utf-8?B?YWdZS1dBTVdBMS9tVUM2YUU3TjZvRjFSZEtwVmtvVGNadnFxbXZEVWs3bGNW?= =?utf-8?B?VWZ4YmpZK25yWkdrZjNBYndlN3g4aE5xMWlSWVVvejZWaEFZcWtTZXBQY1hp?= =?utf-8?B?alA4TXR5U3pwMmRyS1I2K2RrbVErWHhmNTJVaWxpQ2xGVENhQjNSQmovKzYv?= =?utf-8?B?OWdGMTJYb2pWVDBQWHJXSWMxM1FqcWxobkhTR0dsbkxaWmZoLzNqQVZvK2xL?= =?utf-8?B?MXlQcDBSUzNRL0IyWUJUT2M1cnhkVzlHTnFYcFlXUWEyZXJTS1RwbFUyWUtM?= =?utf-8?B?L0Y4WU5pa2FQdXBiMTNkTmNyZ1IrM1FGUUdQSDhDbW1FeWJremRzc1JraXE4?= =?utf-8?B?S29uNXlyeXVGdEhXSFlXM0NFUHE0VGs1c2hVRGIvWERCSDNGZmQ1VkpDV2Y0?= =?utf-8?B?c280b0NxSEx5UEZSVndPVTRsL2I3MWYzZTN2WlNZYUV6aFN3RUowY0FoVmhS?= =?utf-8?B?TTY5S0oxYlNsdWlsVEQrQTdpbUprQzZqTk80YWlGTktXakhTQW9McXo2czRj?= =?utf-8?B?cVlIYUlJcVFqeUljaEZ6aUtPRmRNYzNDcUVDMGpIbldmNGV2MXJacUVJSFpK?= =?utf-8?B?SFZSaWFqWmdodVlwakxySU1RMU9PNjhQaGUyTkRMNCsvMW1GL0MwVnAxQ09F?= =?utf-8?B?eENWOEtmWmkvK3dJSXNnMHo3Zkt5c0ZsVmk1SEhoYUMxQWphK1dvUkhCZ3d5?= =?utf-8?B?QlY4UDRhVklod0N4a2FFZzA5VmRqc0U1OFl0STF0RENPTC8zdjdBM2QzeWxn?= =?utf-8?B?TStBUjVzSVVUbU4vRkIrSEZZK1NMVXNJemFKaTB1SjkxVHFUa1dlOFN3V0w2?= =?utf-8?B?RTg3SU1RTVpkTG9hd3Q5WjZ6WmpOR01IOW11QjFnZjNIc1ZFcS9wWlNUZFlv?= =?utf-8?B?S3FUY0hjRTg1cnYya1ZrQUZ6QjNJaFFlblVhL1FzK0tCSi90MWE3eGRSdmFL?= =?utf-8?B?cnE0bWorckVGek5aM1FScVR6NENJZVZPcFoxaXBZelFaYVZrV0p5MnJyUHVu?= =?utf-8?B?REpXQTNKSnhwTXlKQ0hqV0p6Z0dGNGN2dkRLNkF0b2N1SjFpelBkc3ZaWllz?= =?utf-8?B?bXB6N2o5azF6Wjg5R0xBZUgramxnOWdtTFloQzdFd3JrYUlwazJzNi9OQnBr?= =?utf-8?B?WHh1UUtDUjRvM1l3UTArVmwvRk8vcHQ4MkpRYkE0T1I0SmV1eEdzMUoxSmxn?= =?utf-8?B?VDVwSEd3b2N2VFlLbjlNYjJxNmN4SGI0VlFQa0pNYzhYeHBHQ3NwNndJTVhM?= =?utf-8?B?Ykp5bWlDOUpFTDIxa2NFUTV4YmpUcDJHd2ZhRndSaTRXYWhEN05XMnR2K0VP?= =?utf-8?B?REoyK1lSVGpXNTdUTVdNY29tSWU0U2UvdHpEYk5BT1l6MkdNRlI1V2hBMmZU?= =?utf-8?B?VHBPOGxFY0tpQTYyUGFSNFdFemEwVWJHRlNpOGVscE0vTzhBMGVCK3lkOGNK?= =?utf-8?Q?JUjx2KmmEqLuOVGZhNuSK+4=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?OENuTWpBWUhhcWZaLzRMWi8wRitFZlJPR2xOSFRJT0JXVSsvaXo5eG16ci9m?= =?utf-8?B?b3E2SEplU0hvbndQRldRL0JUSExtUzk5U0V1OWlDZnd4bEY2QmVsdWcxc3lw?= =?utf-8?B?OUZiaGpTdzZ0TFRYenBxeEhhWmlHTC95RXdId2hiMFU2TVVld043Z3BJMlBQ?= =?utf-8?B?N1Nqb0VPSVYxRXR2ZmN6cTVocW5rZzk4WFY3QW12UC90akY0NzZiZk1qZFRQ?= =?utf-8?B?ZW1vR0o4VWlzRzZTOFhaeldTQjM0cjRJTkpRQStCVDA3MTRGSXp2UWhNSWdV?= =?utf-8?B?cm9VZU5VT252MU1XQ3ZxZGxuZTh1Qjc0Vng0Zk5MaUtteThBdmd5aklOWFNW?= =?utf-8?B?dTYzalprWXZoNldrNWIvbUFEYU4wRXpzWDZYcVQ3d252WnpWeVVEOXNuTks5?= =?utf-8?B?N0d3NnRlc3F2alBpalMxUTlKY053SHJ6SlljcTZQN3A1UnI1ZlVmNXlMMXZj?= =?utf-8?B?UzQ4YVRWZGZJZzRsankvc0pLbDd5NXBObTlNMHkwdzNsc2JNT21nb2xUc2NE?= =?utf-8?B?NFppd3lEdkNibDhhZ0wwazFQZWM1b21WRFU3MURIMXRpaUJxZUZIaUxRc0Vt?= =?utf-8?B?eUdNaDQ2aUxQYnN1amVqYnUyVWpYVnMzM1lMZmI5amxGcGY4cW4vQmc1bWMr?= =?utf-8?B?VEhQUFA4UTNDcmFCbDRUc3FMbEIwM2lmRFVVcnBhbTc5eEdGVnAwZzNuU2p3?= =?utf-8?B?a25FLzRHVEpZb0hqUEMzMDFwa2ZYRDJYWmFsV21KWHlITUlObWRwVHJXb3Yx?= =?utf-8?B?RlRJckRLcDZxZ2pWblVhc2ZJSzd0bFZ1QmVIeWlTMGhYRk54NWR6Z2hNQ0tU?= =?utf-8?B?bjZ4dHF0RVp6enZiSVl4ZmNPVzNVcTV6ekdQRXZqV25XenRFMU1KZ3JIYitZ?= =?utf-8?B?cGVuZ01OeXRnQ2lGT0JQZmRPQ0xMYWFydGRRY3Q3RmRVbmU2OWdEdzVEMlA2?= =?utf-8?B?Q3lKQ1NIbEM5T0VkZ2ZaUXY3a1dMWi9URW1qV3JrK3NjRjJORitUVm9remhr?= =?utf-8?B?V29CTC9DVHZhb3ZxTU5SNUR5WVlRVkF3VDFIcTFiQXFmbUg5bmVRWDY4d0VX?= =?utf-8?B?dk1hVnQ0bFd2RkJTU01NWFVCZzREREJKcDh6OHNmT2IvOVV3NUZwSnA4VWhE?= =?utf-8?B?RzZDOWxrYlNDSzY5U0RDWnM3UXJyZWFCb3Q2RURxN3NUYnpXVlIzTlFhT3F5?= =?utf-8?B?Mjl6RkJwaUtEbHFaRDhYU3BZMXRBMTFucUZjSjhnd0t3bXhtWm1mL3NSc01k?= =?utf-8?B?NElRbVpURE1PZ1FlRHJKbFAxaXZlcWh0V0Z6S0ZtTTViWUdYUWQwVDMyWVdU?= =?utf-8?B?UTdmQ09lbFUzazh0KzQvaGhMOVFpdENUa3V6UTZqWUNZZDZpWi93ZkRSYUov?= =?utf-8?B?Wm5kSXRSK2M3VHB5VUNzZSs1a3Q2VDdWWGJOK3c5amFLZkpWVERSN25ZejNW?= =?utf-8?B?ODNvZFl4djJ6ckxaUVo1WEhqdU1wT0pXbXhwTDJlL2NBOXI0VjRSU3g5Q1BU?= =?utf-8?B?Ti91dCtGeDZmbzRJUkZSY0hCQ0FZdkZkcHR3d1hUSi9JN0RtaWFHd1BrRVkv?= =?utf-8?B?ZmFJa0lPZWdKVHpXbGp0TjUzM1FKNEVYamVOZkZDMGtZM0dWd1lNbks4blNp?= =?utf-8?B?UVdGMVNET3NMOW9KZXhLZUIxalVabDR3RkV0cXloWGRtZVV3YXYxWldZYUNl?= =?utf-8?B?Z01DaDRtMFl0czVhMERwZDJKaElDeDFqMjF3emZPZEhGMUdYdTRxNmZXTnpT?= =?utf-8?B?VVlCZkhOYVgzb2lmYTYzSHBycXE3YW9MVGlYNUJmMWNZaVN2T1AzelF0bUVD?= =?utf-8?B?cHVMZk9HMWxaeERsNkFoMDNWYVFBS0MyQ1R5cTM2cEM1N0RPSnhkcTQvcSt1?= =?utf-8?B?bFN3L29xYnZWTDFKYVV2MnRwd3pManVOWnVYSUJWT21qL1puZ2R1VUpuK2Ux?= =?utf-8?B?aWRsRGllUG02OUJLM0V5M3hPaHBSOXFzSEI3SmNva1lERUpBeDBqTEROdGhs?= =?utf-8?B?TUhKSU1NWm56THRyaWJ5eUhOSWs1S1lWQlVFQjlNMGJ1WHpjOVovMmpBUStt?= =?utf-8?B?U1AyNVB2MzRwd0c4cmV1VytaenJYVEtsS0gxNVdXUXp5K1FaMTh1YmVsYWYv?= =?utf-8?B?Z2NXU3hlcThPeUxrK0FLUytYc0hMVEpoNGkyYkhJTzFEVExCUXpyVnh3c0pp?= =?utf-8?B?T2VjRDhOdnpJTzVaYWUxcndHcklUQ2grcU9SVUhhaFUzRGR1Z0VONkFGUE5T?= =?utf-8?B?QURPZ0FZVmpOUHRZU2I2Zm80UUhKZGY0NjMrZlkxaEo0NXczaWpuVmltM2hM?= =?utf-8?B?a3ZiWE41SEg4U1lPc21JdVhESUVFaVpZTFEvZTkvQ0NJblVSSWI4dz09?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 628c3b90-ef4f-4244-591e-08de544ef4a2 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:42.3502 (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: 9WGADgeyrpKhPw1rcnTk3YKw7Bh7u3LtB4N1USmoA0l6PaKegHFH387sYf4c9oBYI3x64tPzjeouSL4jVc9sdw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR11MB5097 X-Proofpoint-GUID: HyLPZ0z9jvgJGZQEhwqievnbFdzXh1v_ X-Authority-Analysis: v=2.4 cv=M6BA6iws c=1 sm=1 tr=0 ts=69690eb6 cx=c_pps a=vcV0SyA3r3yo/t37AMr7eA==: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=ijG-J2Scc44MUVjsrbIA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE1MDEyMSBTYWx0ZWRfX+GyTZb/q2Xkn ektiUbFxKt5Xya8cS2CUwlXFK4s3KdeHyriVDABaIQZA413FAQm9Rzra+TE6wQNpVZ1T8hnklVC pmIfg7E6gwBdj7XGHOgXr8sOAIJYDBaNDkHc6GnuU0O9EpQwBGR5qhK0zMkQlevkE0DSpqZkOsN eeMEr7wt7Cc5nn35muYvhpGgvSsScnJsSnkt1KF89IqUnuItizS6TlNWUycvKrCc6sI8cCtq4XO NY+zTBUCqJtlCG42mU/3LJLxn5ZGl+1rU2LuKi8raGYy+W77xyh0MJdoSqQ61vmW0CJCZsC6IaN ww0LnyHjjTeZrFHWw/3PyNR5+nLL+DOqdepZbTQ5kF2hiVOfrbYBMMROIH5XWyjvVxB7Jf/XdrD VrurKYPM+J7MM3s76nS7ngi9AKnCwRytkqK1fPnpHqiISZyRNtaaqG4j2Pd5u1iNeKPG80EHctn RrtzuTLIoLVMWZw/REw== X-Proofpoint-ORIG-GUID: HyLPZ0z9jvgJGZQEhwqievnbFdzXh1v_ 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 From: Gabriel Beaulieu This introduces a new module gb-cpc-sdio, in order to communicate with a Greybus CPC device over SDIO. Most of the complexity stems from aggregation: packets are aggregated to minimize the number of CMD53s. In the first block, the first le32 is the number of packets in this transfer. Immediately after that are all the packet headers (CPC + Greybus). This lets the device process all the headers in a single interrupt, and prepare the ADMA descriptors for all the payloads in one go. Payloads start at the beginning of the second block and are concatained. Their lengths must be 32-bit aligned, so the driver takes care of adding and removing padding if necessary. Signed-off-by: Gabriel Beaulieu Signed-off-by: Damien Ri=C3=A9gel Reviewed-by: J=C3=A9r=C3=B4me Pouiller --- Changes in v2: - change formatting from %lu to %zu when printing size_t's - remove "/**" kernel-doc marker for static functions not actually using the kernel-doc format - reduce header inclusion list - use reverse christmas tree variable declarations consistently - update aggregation functions to try to be more legible - use define instead of constant value 0x0C for the address where to read the number of bytes the device wants to send - remove padding between headers and payloads when aggregating packets drivers/greybus/cpc/Kconfig | 12 + drivers/greybus/cpc/Makefile | 3 + drivers/greybus/cpc/sdio.c | 533 +++++++++++++++++++++++++++++++++++ 3 files changed, 548 insertions(+) create mode 100644 drivers/greybus/cpc/sdio.c diff --git a/drivers/greybus/cpc/Kconfig b/drivers/greybus/cpc/Kconfig index ab96fedd0de..8223f56795f 100644 --- a/drivers/greybus/cpc/Kconfig +++ b/drivers/greybus/cpc/Kconfig @@ -8,3 +8,15 @@ config GREYBUS_CPC =20 To compile this code as a module, chose M here: the module will be called gb-cpc.ko + +config GREYBUS_CPC_SDIO + tristate "Greybus CPC over SDIO" + depends on GREYBUS_CPC && MMC + help + This driver provides Greybus CPC host support for devices + connected via SDIO interface. + + To compile this driver as a module, choose M here: the module + will be called gb-cpc-sdio. + + If unsure, say N. diff --git a/drivers/greybus/cpc/Makefile b/drivers/greybus/cpc/Makefile index c4b530d27a3..3296536e86d 100644 --- a/drivers/greybus/cpc/Makefile +++ b/drivers/greybus/cpc/Makefile @@ -4,3 +4,6 @@ gb-cpc-y :=3D cport.o header.o host.o protocol.o =20 # CPC core obj-$(CONFIG_GREYBUS_CPC) +=3D gb-cpc.o + +gb-cpc-sdio-y :=3D sdio.o +obj-$(CONFIG_GREYBUS_CPC_SDIO) +=3D gb-cpc-sdio.o diff --git a/drivers/greybus/cpc/sdio.c b/drivers/greybus/cpc/sdio.c new file mode 100644 index 00000000000..aeeb8378dea --- /dev/null +++ b/drivers/greybus/cpc/sdio.c @@ -0,0 +1,533 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2025, Silicon Laboratories, Inc. + */ + +#include +#include +#include +#include +#include + +#include "cpc.h" +#include "header.h" +#include "host.h" + +#define GB_CPC_SDIO_MSG_SIZE_MAX 4096 +#define GB_CPC_SDIO_BLOCK_SIZE 256U +#define GB_CPC_SDIO_FIFO_ADDR 0 +#define GB_CPC_SDIO_RX_BYTES_CNT_ADDR 0x0C +#define GB_CPC_SDIO_ALIGNMENT 4 +#define GB_CPC_SDIO_DEFAULT_AGGREGATION 1 +#define CPC_FRAME_HEADER_SIZE (CPC_HEADER_SIZE + GREYBUS_HEADER_SIZE) +#define GB_CPC_SDIO_MAX_AGGREGATION ((GB_CPC_SDIO_BLOCK_SIZE - sizeof(u32)= ) / CPC_FRAME_HEADER_SIZE) + +enum cpc_sdio_flags { + CPC_SDIO_FLAG_IRQ_RUNNING, + CPC_SDIO_FLAG_TX_WORK_DELAYED, + CPC_SDIO_FLAG_SHUTDOWN, +}; + +struct cpc_sdio { + struct cpc_host_device *cpc_hd; + struct device *dev; + struct sdio_func *func; + + struct work_struct tx_work; + unsigned long flags; + + wait_queue_head_t event_queue; + u8 max_aggregation; +}; + +struct frame_header { + struct cpc_header cpc; + struct gb_operation_msg_hdr gb; +} __packed; + +static inline struct cpc_sdio *cpc_hd_to_cpc_sdio(struct cpc_host_device *= cpc_hd) +{ + return (struct cpc_sdio *)cpc_hd->priv; +} + +static int gb_cpc_sdio_wake_tx(struct cpc_host_device *cpc_hd) +{ + struct cpc_sdio *ctx =3D cpc_hd_to_cpc_sdio(cpc_hd); + + if (test_bit(CPC_SDIO_FLAG_SHUTDOWN, &ctx->flags)) + return 0; + + /* Use system workqueue for TX processing */ + schedule_work(&ctx->tx_work); + + return 0; +} + +/* + * Return the memory requirement in bytes for the aggregated frame aligned= to the block size + */ +static size_t cpc_sdio_get_aligned_size(struct cpc_sdio *ctx, struct sk_bu= ff_head *frame_list) +{ + struct sk_buff *frame; + size_t size =3D 0; + + /* Calculate total payload size */ + skb_queue_walk(frame_list, frame) { + /* payload is aligned and padded to 4 bytes */ + size +=3D ALIGN(frame->len, GB_CPC_SDIO_ALIGNMENT); + } + + /* Make sure the total payload size is a round number of blocks */ + size =3D ALIGN(size, GB_CPC_SDIO_BLOCK_SIZE); + + return size; +} + +static size_t cpc_sdio_build_aggregated_frame(struct cpc_sdio *ctx, + struct sk_buff_head *frame_list, + unsigned char **buffer) +{ + unsigned char *tx_buff; + struct sk_buff *frame; + __le32 *frame_count; + size_t xfer_size; + unsigned int i =3D 0; + + xfer_size =3D cpc_sdio_get_aligned_size(ctx, frame_list); + + /* Allocate aggregated frame */ + tx_buff =3D kmalloc(xfer_size, GFP_KERNEL); + if (!tx_buff) + return 0; + + frame_count =3D (__le32 *)tx_buff; + *frame_count =3D cpu_to_le32(skb_queue_len(frame_list)); + i +=3D sizeof(*frame_count); + + /* Copy frame headers to aggregate buffer */ + skb_queue_walk(frame_list, frame) { + struct frame_header *fh =3D (struct frame_header *)&tx_buff[i]; + + memcpy(fh, frame->data, sizeof(*fh)); + i +=3D sizeof(*fh); + } + + /* Build payload blocks if required */ + if (xfer_size > i) { + skb_queue_walk(frame_list, frame) { + size_t payload_len, padding_len; + + if (frame->len <=3D CPC_FRAME_HEADER_SIZE) + continue; + + payload_len =3D frame->len - CPC_FRAME_HEADER_SIZE; + memcpy(&tx_buff[i], &frame->data[CPC_FRAME_HEADER_SIZE], payload_len); + i +=3D payload_len; + + padding_len =3D ALIGN(payload_len, GB_CPC_SDIO_ALIGNMENT) - payload_len; + if (padding_len) { + memset(&tx_buff[i], 0, padding_len); + i +=3D padding_len; + } + } + } + + *buffer =3D tx_buff; + + return xfer_size; +} + +static bool cpc_sdio_get_payload_size(struct cpc_sdio *ctx, const struct f= rame_header *header, + size_t *payload_size) +{ + size_t gb_size; + + gb_size =3D le16_to_cpu(header->gb.size); + + /* Validate that the size is at least as large as the Greybus header */ + if (gb_size < GREYBUS_HEADER_SIZE) { + dev_dbg(ctx->dev, "Invalid Greybus header size: %zu\n", gb_size); + return false; + } + + /* Validate maximum size */ + if (gb_size > (GB_CPC_SDIO_MSG_SIZE_MAX + GREYBUS_HEADER_SIZE)) { + dev_dbg(ctx->dev, "Payload size exceeds maximum: %zu\n", gb_size); + return false; + } + + /* Size includes the Greybus header, so subtract it to get payload size */ + *payload_size =3D gb_size - GREYBUS_HEADER_SIZE; + + return true; +} + +/* + * Process aggregated frame + * Reconstructed frame layout: + * +-----+-----+-----+------+------+------+------+-------+---------+ + * | CPC Header (4B) | Size | OpID | Type | Stat | CPort | Payload | + * +-----+-----+-----+------+------+------+------+-------+---------+ + */ +static void cpc_sdio_process_aggregated_frame(struct cpc_sdio *ctx, unsign= ed char *aggregated_frame, + unsigned int frame_len) +{ + const unsigned char *payload_start; + const struct frame_header *header; + unsigned int payload_offset; + size_t aligned_payload_size; + struct sk_buff *rx_skb; + __le32 frame_count_le; + size_t payload_size; + size_t frame_size; + u32 frame_count; + + /* Get frame count from aggregated frame (4-byte u32) */ + frame_count_le =3D *((__le32 *)aggregated_frame); + frame_count =3D le32_to_cpu(frame_count_le); + + /* Ensure frame count doesn't exceed our negotiated maximum */ + if (frame_count > ctx->max_aggregation) { + dev_warn(ctx->dev, + "Process aggregated frame: frame count %u exceeds negotiated maximum %= u\n", + frame_count, ctx->max_aggregation); + return; + } + + /* Header starts at block 0 after frame count */ + header =3D (struct frame_header *)&aggregated_frame[sizeof(frame_count_le= )]; + + /* Payloads start at block 1 (after complete block 0) */ + payload_offset =3D (frame_count * CPC_FRAME_HEADER_SIZE) + sizeof(frame_c= ount_le); + + for (unsigned int i =3D 0; i < frame_count; i++) { + payload_start =3D &aggregated_frame[payload_offset]; + + /* Get payload size for this frame */ + if (!cpc_sdio_get_payload_size(ctx, header, &payload_size)) { + dev_err(ctx->dev, + "Process aggregated frame: failed to get payload size, aborting.\n"); + return; + } + + aligned_payload_size =3D ALIGN(payload_size, GB_CPC_SDIO_ALIGNMENT); + + /* Validate the payload is within the buffer boundary */ + if (payload_offset + aligned_payload_size > frame_len) { + dev_err(ctx->dev, + "Process aggregated frame: payload is out of buffer boundary, aborting= at frame %u\n", + i); + return; + } + + /* Calculate total frame size: CPC header + Greybus header + payload */ + frame_size =3D CPC_FRAME_HEADER_SIZE + payload_size; + + /* Allocate sk_buff for reconstructed frame */ + rx_skb =3D alloc_skb(frame_size, GFP_KERNEL); + if (!rx_skb) + return; + + /* Copy header */ + memcpy(skb_put(rx_skb, CPC_FRAME_HEADER_SIZE), header, CPC_FRAME_HEADER_= SIZE); + + /* Copy payload */ + if (payload_size > 0) + memcpy(skb_put(rx_skb, payload_size), payload_start, payload_size); + + /* Send reconstructed frame to CPC core */ + cpc_hd_rcvd(ctx->cpc_hd, rx_skb); + + /* Move to next header and payload start address */ + header++; + payload_offset +=3D aligned_payload_size; + } +} + +static u32 cpc_sdio_get_rx_num_bytes(struct sdio_func *func, int *err) +{ + unsigned int rx_num_block_addr =3D GB_CPC_SDIO_RX_BYTES_CNT_ADDR; + + return sdio_readl(func, rx_num_block_addr, err); +} + +static void gb_cpc_sdio_rx(struct cpc_sdio *ctx) +{ + unsigned char *rx_buff; + size_t data_len; + int err; + + sdio_claim_host(ctx->func); + data_len =3D cpc_sdio_get_rx_num_bytes(ctx->func, &err); + + if (err) { + dev_err(ctx->dev, "failed to obtain byte count (%d)\n", err); + goto release_host; + } + + /* Validate minimum RX data length */ + if (data_len < sizeof(u32) + CPC_FRAME_HEADER_SIZE) { + dev_err(ctx->dev, "failed to obtain enough bytes for a header (%zu)\n", = data_len); + goto release_host; + } + + /* Allocate sk_buff for RX data */ + rx_buff =3D kmalloc(data_len, GFP_KERNEL); + if (!rx_buff) + goto release_host; + + err =3D sdio_readsb(ctx->func, rx_buff, GB_CPC_SDIO_FIFO_ADDR, data_len); + sdio_release_host(ctx->func); + + if (err) { + dev_err(ctx->dev, "failed to sdio_readsb (%d)\n", err); + goto free_rx_skb; + } + + if (data_len < GB_CPC_SDIO_BLOCK_SIZE) { + dev_err(ctx->dev, "received %zd bytes, expected at least %u bytes\n", da= ta_len, + GB_CPC_SDIO_BLOCK_SIZE); + goto free_rx_skb; + } + + /* de-aggregate incoming skb into individual frames and send to CPC core = */ + cpc_sdio_process_aggregated_frame(ctx, rx_buff, data_len); + +free_rx_skb: + kfree(rx_buff); + + return; + +release_host: + sdio_release_host(ctx->func); +} + +static void gb_cpc_sdio_tx(struct cpc_sdio *ctx) +{ + struct sk_buff_head frame_list; + unsigned char *tx_buff; + size_t tx_len; + int err; + + skb_queue_head_init(&frame_list); + + /* Dequeue the negotiated maximum aggregated frames from the host device = */ + cpc_hd_dequeue_many(ctx->cpc_hd, &frame_list, ctx->max_aggregation); + + /* Check if any frames were dequeued */ + if (skb_queue_empty(&frame_list)) + return; + + tx_len =3D cpc_sdio_build_aggregated_frame(ctx, &frame_list, &tx_buff); + if (!tx_len) { + dev_err(ctx->dev, "failed to build aggregated frame\n"); + goto cleanup_frames; + } + + sdio_claim_host(ctx->func); + err =3D sdio_writesb(ctx->func, GB_CPC_SDIO_FIFO_ADDR, tx_buff, tx_len); + sdio_release_host(ctx->func); + + if (err) + dev_err(ctx->dev, "failed to sdio_writesb (%d)\n", err); + + kfree(tx_buff); + +cleanup_frames: + skb_queue_purge(&frame_list); +} + +static void gb_cpc_sdio_rx_tx(struct cpc_sdio *ctx) +{ + gb_cpc_sdio_rx(ctx); + + set_bit(CPC_SDIO_FLAG_IRQ_RUNNING, &ctx->flags); + gb_cpc_sdio_tx(ctx); + clear_bit(CPC_SDIO_FLAG_IRQ_RUNNING, &ctx->flags); +} + +static void gb_cpc_sdio_tx_work(struct work_struct *work) +{ + struct cpc_sdio *ctx =3D container_of(work, struct cpc_sdio, tx_work); + + /* Do not execute concurrently to the interrupt */ + if (test_bit(CPC_SDIO_FLAG_IRQ_RUNNING, &ctx->flags)) { + set_bit(CPC_SDIO_FLAG_TX_WORK_DELAYED, &ctx->flags); + return; + } + + gb_cpc_sdio_tx(ctx); +} + +static struct cpc_hd_driver cpc_sdio_driver =3D { + .wake_tx =3D gb_cpc_sdio_wake_tx, +}; + +static int cpc_sdio_init(struct sdio_func *func) +{ + unsigned char rx_data_ready_irq_en_bit =3D BIT(0); + unsigned int irq_enable_addr =3D 0x09; + int err; + + /* Enable the read data ready interrupt. */ + sdio_writeb(func, rx_data_ready_irq_en_bit, irq_enable_addr, &err); + if (err) + dev_err(&func->dev, "failed to set data ready interrupt (%d)\n", err); + + return err; +} + +static void cpc_sdio_irq_handler(struct sdio_func *func) +{ + unsigned int rx_data_pending_irq_bit =3D 0; + unsigned int irq_status_addr =3D 0x08; + unsigned long int_status; + struct cpc_sdio *ctx; + struct device *dev; + int err; + + ctx =3D sdio_get_drvdata(func); + dev =3D &func->dev; + + int_status =3D sdio_readb(func, irq_status_addr, &err); + if (err) { + dev_err(dev, "failed to read interrupt status registers (%d)\n", err); + return; + } + + if (__test_and_clear_bit(rx_data_pending_irq_bit, &int_status)) { + /* Clear the IRQ on the device side. */ + sdio_writeb(func, BIT(rx_data_pending_irq_bit), irq_status_addr, &err); + if (err) { + dev_err(dev, "failed to clear read interrupt (%d), interrupt will repea= t\n", + err); + return; + } + + cancel_work_sync(&ctx->tx_work); + gb_cpc_sdio_rx_tx(ctx); + + if (test_and_clear_bit(CPC_SDIO_FLAG_TX_WORK_DELAYED, &ctx->flags)) + schedule_work(&ctx->tx_work); + } + + if (int_status) + dev_err_once(dev, "unhandled interrupt from the device (%ld)\n", int_sta= tus); +} + +static int cpc_sdio_probe(struct sdio_func *func, const struct sdio_device= _id *id) +{ + struct cpc_host_device *cpc_hd; + struct cpc_sdio *ctx; + int err; + + /* Allocate our private context */ + ctx =3D kzalloc(sizeof(*ctx), GFP_KERNEL); + if (!ctx) + return -ENOMEM; + + /* Create CPC host device with our context as private data */ + cpc_hd =3D cpc_hd_create(&cpc_sdio_driver, &func->dev, ctx); + if (IS_ERR(cpc_hd)) { + kfree(ctx); + return PTR_ERR(cpc_hd); + } + + /* Initialize context */ + ctx->cpc_hd =3D cpc_hd; + ctx->dev =3D cpc_hd_dev(cpc_hd); + ctx->func =3D func; + ctx->max_aggregation =3D GB_CPC_SDIO_DEFAULT_AGGREGATION; + + INIT_WORK(&ctx->tx_work, gb_cpc_sdio_tx_work); + + /* Make ctx available to IRQ handler before enabling/claiming IRQ */ + sdio_set_drvdata(func, ctx); + + sdio_claim_host(func); + + err =3D sdio_enable_func(func); + if (err) + goto release_host; + + err =3D sdio_set_block_size(func, GB_CPC_SDIO_BLOCK_SIZE); + if (err) + goto disable_func; + + err =3D cpc_sdio_init(func); + if (err) + goto disable_func; + + err =3D sdio_claim_irq(func, cpc_sdio_irq_handler); + if (err) + goto disable_func; + + err =3D cpc_hd_add(cpc_hd); + if (err) + goto release_irq; + + sdio_release_host(func); + + return 0; + +release_irq: + sdio_release_irq(func); + +disable_func: + sdio_disable_func(func); + +release_host: + sdio_release_host(func); + cpc_hd_put(cpc_hd); + kfree(ctx); + + return err; +} + +static void cpc_sdio_remove(struct sdio_func *func) +{ + struct cpc_sdio *ctx =3D sdio_get_drvdata(func); + struct cpc_host_device *cpc_hd =3D ctx->cpc_hd; + + /* Prevent new TX wakeups and wake the thread */ + set_bit(CPC_SDIO_FLAG_SHUTDOWN, &ctx->flags); + + /* Cancel and flush any pending TX work */ + cancel_work_sync(&ctx->tx_work); + + sdio_claim_host(func); + sdio_release_irq(func); + sdio_disable_func(func); + sdio_release_host(func); + + cpc_hd_del(cpc_hd); + cpc_hd_put(cpc_hd); + + kfree(ctx); +} + +/* NOTE: Development/RFC purposes only. */ +static const struct sdio_device_id sdio_ids[] =3D { + { + SDIO_DEVICE(0x0296, 0x5347), + }, + {}, +}; +MODULE_DEVICE_TABLE(sdio, sdio_ids); + +static struct sdio_driver gb_cpc_sdio_driver =3D { + .name =3D KBUILD_MODNAME, + .id_table =3D sdio_ids, + .probe =3D cpc_sdio_probe, + .remove =3D cpc_sdio_remove, + .drv =3D { + .owner =3D THIS_MODULE, + .name =3D KBUILD_MODNAME, + }, +}; + +module_sdio_driver(gb_cpc_sdio_driver); + +MODULE_DESCRIPTION("Greybus Host Driver for Silicon Labs devices using SDI= O"); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Damien Ri=C3=A9gel "); --=20 2.52.0