From nobody Mon Dec 15 00:34:36 2025 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 F400E23D2A3 for ; Fri, 12 Dec 2025 16:27:11 +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=1765556833; cv=fail; b=he0ypus9iB/+AdSarbxsK0NIt7gNh4Lrr1zm/OkcSFdKBvSnw4D7BLAhmWd7Gf74sEEZ5AcYdjRQhCQu597RowaFGpBOQnb1XkBuFsfv2Hg+Uvqadl+x9RQ7TiYmN4srqxQIeL/SS3DBHR7U9gb0wKF76rX17YoN74N/KfzwFkE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765556833; c=relaxed/simple; bh=1W/GHbA1xIbgT4oAmrn+szkxCxlfgpkFn4EOqpZ8IEs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=eLtJCefjyC+ZSFG+bGboh5BO+fkL8oMTU0GHN06+CkcgHHVfW6hiHczqOSTgTxxwZSUATZ8KofdWV6Z/u9pF/sGoR/Hrw4gF3PbfWJ3Mo4gGKPow8/f6QuLDkNQ8dOoMtC3LYKHstzy5SVvOkDvdWN3z2dxXRGvJmv5DX1coKV0= 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=wObyBWCi; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=bEnF5HiR; 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="wObyBWCi"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="bEnF5HiR" 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 5BC8WO7P3748684; Fri, 12 Dec 2025 10:13:25 -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=SL0HP6Mo0asnTZAcWqNUCzfE5V3mOAZkfIJdXjg3bLU=; b=wObyBWCi/jMp YdQpAzOj3Df5l6ic47PHkJdENVt7GGzEEW6YYmxxP5cAc2ipIM8bypJNOPCr2Esq Wm3xNivduteziXVmce+kV+hz6AKjtaGyw/cktp/KjfqYncjgEtK/Gr2aaNrA49RS 2LoOYE2CU8gEdNXbFYMKZcg8kHPo2aJNJsaALFtKOi9CP1wtJkfZ6ydK65REQ7Pj Qq7YVqW8UVJL47nwy0cSCSZvGy5NgZoOGXF7tM2xCTT9YvPqlwoEzSXvc1HLNB/U mjxT39UV7jGrJ0kh8hGJaV5cupJp42IWAJhDq2/hwnMjETVjJ3PlR8uawYTaWI67 7deEniPRAQ== Received: from bl2pr02cu003.outbound.protection.outlook.com (mail-eastusazon11021114.outbound.protection.outlook.com [52.101.52.114]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4ayht2mdee-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Fri, 12 Dec 2025 10:13:25 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=vqtWynHPg/VaBm8dmTo1smB4ANfTqxUHCw8kvP4Le7g38I6IY65KmCVjRuvUszFL2i7lw5euWRJlLehzq/gpkRIIkOaQZ9+KzafXu0gPEGitOKvbePG6WWWQL57SuuaXvZvRZ6gaJYYQqeOnLtMtO0NKPHXj7dP9Qz23XlE3vGWNZfBU1YHsUVoA1944/4kPSfyVPR6Qjf1ASM0pKy9LaEXdXfuZTr0WiOlfzOdy2p3LvxuCK02MQprS9qzRTLmsguBpwRC56gej+rSDNSlbdIaQXx2FfN3Gm+DyIBr90HhVPsGYHW3p7DUVxSSvRm7cN8JrCljbFrH9oCRGe1keLw== 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=SL0HP6Mo0asnTZAcWqNUCzfE5V3mOAZkfIJdXjg3bLU=; b=FNqWMA35hGjUjQdxhWOdrQyRz3HuRk7LKlt1tznsVEH9De9D4Z7PyR0wP/06YjqoJhq/8mEdxaIQx2wuG/KyzARy8LxdTgLz0qTb064vvlyOwA/vdwTXJMfEc0qdiS/YTV273+gAYsNiqDNs6XIISkyizuK9/QEG+bXFQEw2WEc2Ha19/nF0fA0/DcAjS0jiNSWCGarKYgGp/xmzRG1ApFkIgdcuDRI2YtLoHDu7hQ9p/B9L4dVSdQ5/V9kvwm/j0fjz7E8yFW78aqvO8EyUK57DCnNUabY0LLDCmQWVq8P+JnUow2896gickiFI3iCC3lm2Oly6qlQ5bAeXkWkqiw== 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=SL0HP6Mo0asnTZAcWqNUCzfE5V3mOAZkfIJdXjg3bLU=; b=bEnF5HiRnfO8+HeBiZUUYaYwL++4NDIBgznCj5LQVhvLAKilyQf84A1hOwGCIpiL84vjPH9ui4SaeLYAAgHaBNGwO3+pyG5TGcDVuUBgpyLh2eqYX2S+wLYPhUeVRNxs9HHlhWpWQnPmsCdzSQpyUzBstK00NSJmyEV+I53hZK8= Received: from DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) by MN0PR11MB6111.namprd11.prod.outlook.com (2603:10b6:208:3cd::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9412.9; Fri, 12 Dec 2025 16:13:22 +0000 Received: from DS0PR11MB8205.namprd11.prod.outlook.com ([fe80::2de6:bc88:2af7:3583]) by DS0PR11MB8205.namprd11.prod.outlook.com ([fe80::2de6:bc88:2af7:3583%3]) with mapi id 15.20.9412.005; Fri, 12 Dec 2025 16:13:22 +0000 From: =?UTF-8?q?Damien=20Ri=C3=A9gel?= To: greybus-dev@lists.linaro.org Cc: linux-kernel@vger.kernel.org, Johan Hovold , Alex Elder , Greg Kroah-Hartman , Silicon Labs Kernel Team , =?UTF-8?q?Damien=20Ri=C3=A9gel?= Subject: [PATCH 01/14] greybus: cpc: add minimal CPC Host Device infrastructure Date: Fri, 12 Dec 2025 11:12:55 -0500 Message-ID: <20251212161308.25678-2-damien.riegel@silabs.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20251212161308.25678-1-damien.riegel@silabs.com> References: <20251212161308.25678-1-damien.riegel@silabs.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: YQZPR01CA0176.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:8b::25) To DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS0PR11MB8205:EE_|MN0PR11MB6111:EE_ X-MS-Office365-Filtering-Correlation-Id: 93b23c64-170b-4b6d-ee02-08de39995ee5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|52116014|366016|376014|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?cVBmcWlCY2M4ajdMRklGbFBqQ0F5TC9QSmF2L3Vzd2VSUmd4UkFBODZNRitm?= =?utf-8?B?a3VEY3VEUlNHOHk5RlNwazlxc0VNNVlxWnQzUzVRdDU4ckJCSmRWL3gvUmNY?= =?utf-8?B?YTVIUEZDYU1XT2w4TjhzMWY1KzFTUVJlMUsramxvY2N2WEh3aVYxTkUza0hN?= =?utf-8?B?UGxhZFZod1daN3l1MlZ6RFNIWVpxNzl5SVhJWXBZb0ZaTWJzTEt0ekk0eGhM?= =?utf-8?B?T0xHZkI2b3dZQzNjRWd6ZHZMdVZkd05ka1FXcmZZUWdUZDhSa3VXNjBiVTU5?= =?utf-8?B?b1FhTlR5R1Y0RWJ4VjlDRVU0ejJQS3ROcll5K1k4MEtBU1BTeUxMWTlMZzY1?= =?utf-8?B?cmtxTERuVWMxOVg1ZFVxQ1ZDTS90U0lBTUYzTnZEdHAydjFDdWo3dUdUMW91?= =?utf-8?B?VkhEZ3Y5TDFUK2ZBa011YStoYWJRdDlQV2VNUEFsWXZxazcwN3lqSHFTcmpJ?= =?utf-8?B?WmtubzJzVnFVT3dqRE9uQzVzeGVxV3JvWFpSWmY3R25ROW5CUy9YVnUxTTg3?= =?utf-8?B?ejNQV1pTWU9yTU93QTFlenFBMWVyc3d1UHZNQ0poeWpwRUVjQXRUeFZhb3Av?= =?utf-8?B?bVpHakFRdlRsa3BEaS9GcEJscUtsdnVPNEpmdWhRTnU1RjQ3NmRCejdHNThR?= =?utf-8?B?VFBaZ0h5UEIxdkVrVFZrZGwxbXhLVmVYZHNHbGxwZFFxNzljZTFRMlpGUU9J?= =?utf-8?B?WUoxTWkyZ1AxY3hFVEJMR25CYUVzUDZHKy9xay95bm1hRnBDcDFobzg4TFRR?= =?utf-8?B?UnBVcVp3dnhQaEptcnVHa3IzNkpXQkV6Nk1QdklxSEtMNjBPRXhTWHpiZkd4?= =?utf-8?B?SnFyd1kxLy9iQlRUY2Uxc3FvbWtkYjQrN2JQZkY3V2VrVVRBZ2pjK0pvMm1F?= =?utf-8?B?dFNzd0h4SS9WN3k0YUZ0UWdqWityQ3dKWmkzMXJYbTVPM2xjbUJXOG9GeTdv?= =?utf-8?B?d0NaOE94bXF5L0RON0J5SGFYbGNrbVg3bmlYMnkva2xoeVpWVFFoWGxIUlp2?= =?utf-8?B?MVZvZE1COUFUeXRsdDcwTVp0WHVCL0xpUjN5N3M1eFM4Z3dzQWVpQm16NXly?= =?utf-8?B?MVZrYTVlV1ZoNWJ6cTZNcW1SZ1RBYW1HYVNtS1pYTWsxREV3Tjd5R3hZdDlB?= =?utf-8?B?K3lzUVpVc1dLeER5b1YzNmxQWGJJR3JCM2gzdGRWMTdxbVVPWlZSczFtSVd5?= =?utf-8?B?cm0ram9qMHlFRjViN3RVakhsU3pRM1YrTVhNODl1WjliaDhtVEpKZlI1a3BR?= =?utf-8?B?TDZrVlU3MVRLZVE2QWV0QytjMmt0S1J3OWQ0ZHY0dHRsV2x1VzN1V1lOcmZ1?= =?utf-8?B?MUtOd2JHQnJ6c2Y2TExycTZ2aFhodUFQZEgyelBQdFBTUU1tZm5zTEVYeTZ3?= =?utf-8?B?aEkrekJsL08xNG9vMmRiU1VZdjZVRVkxeDFIWkhDWUpLSTM3ZlFuN3M1ZVdr?= =?utf-8?B?Q0kxUDd0V2wvdFpaOXJQdm4rTzFzVkg4SjZETTRHS2paaHpVWG5JUnd2RS9u?= =?utf-8?B?c0Z3d1FTY3AyUHVxZG85Q05nejdNZ0Z0dC8yTVIwYk02WnQrYm9LbU1GU25y?= =?utf-8?B?TVhsbWZoQjJWOUxMQTcrMlE2OWI0MWlDS1BZYUlCdTJURGNzamhzS2JrNXZo?= =?utf-8?B?dWUzZU5HK21VT3JVb2FYN2JFOVlKbThqKy91VnJlcndNaGFNLzRxWFdFZGg5?= =?utf-8?B?cFlSWER6N3NvZzloWWlGN3dFbmpZaDRabWM2UWJEZElrRE9zRndyOUFHeW1n?= =?utf-8?B?TWtLcTFCcGxCWmE3Sko0R1B6akduN2M3NlJDT2x0em9MYUNZSzNhaWZqNXU0?= =?utf-8?B?WnhnTktNRWdUa1lRVU84dm1HNmtjL05sSlZsRTdCaEVLS3llSGx5T1FTeWlQ?= =?utf-8?B?YTBjRGl6STZLbWhqY3ZZY2ljUVgwMnl3QWVncUg2OFVpaEEwTHN5T2tvbzRL?= =?utf-8?B?bzVxaE9peHRyTzRrZi81aFJ3bGhxSHpwNFZiYm03OFpCZVdQR0w5eGIydzFM?= =?utf-8?B?QVNHTE55Q1duVExZTUJ1Z2lwNnVsRUVBWWFPekZkVFQwYmR1L2I3MXQ5YkZ6?= =?utf-8?Q?Gp7f63?= 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)(366016)(376014)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?TFBrTDlVYTVSNlRDWkdEcnBRMmtlbUVYMUhkTVI4WWI3cmo1RmVDMHBpdDMz?= =?utf-8?B?Z1EzRkZLYm1QSlI4QVBVTng2WmVsMGZVbXlQQW1oVlE5aXdlTWo2emZFV256?= =?utf-8?B?NlJFaWhsb1NmVGVKaGdhUWNlSFJWdDdFclV3RGU1U0xsZ1VkNFhBYTdSSGts?= =?utf-8?B?YVQ3d0tsWXBFZWM4bEJVdnQxMitsaDJOV3krTFVLdGUwRm1xSHkvWlhnWkpT?= =?utf-8?B?c1hteCtNWmR2ME83K1A5NisxVU5RVHR5WENPcTFoRlVZQlM2MjBHV2h2Uld4?= =?utf-8?B?aE1MTGVmZzBma1dYcG5zc1JTOWRDRk5SSlN1eXErdllFc1FMZHdXYjRZanAw?= =?utf-8?B?ZWM4K3ZHUmU1c09iNUNBc1dJdE9abndoMXlBMVlFYnk4QnZzRURhbUdaRytu?= =?utf-8?B?blBhYk9MWk5DRUVWTjlKNk5aZDNNMUl4ZEdGbk5hNXU0TzZDUzJ5ZDJYczAx?= =?utf-8?B?dWd1K1Q5dUtKR09uOVoybE13MG9ENmZUcHArSm1tWnVhSEpMVkYwaSttYkI1?= =?utf-8?B?TXVHTlNCYWRSN2Z3YWtRVmU1TmkvaWM0MUw1MEJua1M2Q1A1QXIrM2IzcC9K?= =?utf-8?B?OURHRmpxWDg0YkNYSURmM0djYkVJa29xajNiOTFmQUlIVmZzQjNlSWVhRFVP?= =?utf-8?B?UldFZmVQOTlyb3VqSEg0c1lqdHRXTExKeU9DM0R4MlB3R3p4QTdjMmdvZXhr?= =?utf-8?B?TElCZ2crQ08rdVF6eEIwWkw1d2NGZzU3VGt0UVoyRXZFMzViRkJjVHljTUw0?= =?utf-8?B?dFIxODJSNGtDcHQ3VGJHRGluZS9JUkRCeVdoclVhL2JrYTVSWlFkUGI1NmVi?= =?utf-8?B?N2J4RnEyeURZZjFhaGJULzlrVE1TYS9xQXVZL2pIanQ0bHc1ejJla3lmQWxQ?= =?utf-8?B?K2hjN2VpOGFITVFDNnNsK3Z3THlOQlo3VG45cXMyeW1FS0VjWnZwTy9LRG5v?= =?utf-8?B?OGpXdDdYVjFhaWFFa2tGQm4zOERKU1NhbDcrNnNVQVcxdndTdG5wbk5ybFp3?= =?utf-8?B?LytGZXc1VExVemt2dnY2ajNuK0YrR1VMWGlvNEpEd1JpWXVxbkhuVXdSaUx0?= =?utf-8?B?NGlyK0hFSDRUMUlDWFRURnlHRStOVFVyeFpmMU80b1hiNE5VU3M0VUV6aEEz?= =?utf-8?B?RmoyMUlpZVIxUUwwM2JYZU9nVmlHKzhUVkdXWEdCeDV4ZlN6NnZIZ1JTMHBT?= =?utf-8?B?MENDazRLc20yTzJOczR5aXh3TUZ0c3RBOHBIWEdMKy80RU4zZW9pSE9nNU5H?= =?utf-8?B?MmV4NGhVbXpYS3pNQS95R2FXaHlBWE5rMWRHU3NGZFVnZzcxbEt4Q243YmlE?= =?utf-8?B?UmRJUGZ5VnVQVFdCRitFZ1NoRGk4ZkV2RUlQTXVxbjB1U0V0MkJWb2NrT1lJ?= =?utf-8?B?dE91NU8vS0JiSUltcTJtRFJvSjRZUEJaeGRKU1FSZ0NnS2trdnZyN1hvaGln?= =?utf-8?B?eUNZcVB3TGJQNGxkazBkaDR2eVNHL3hXekx3MzRwUmZoRDg5RlBnMXpCYy9p?= =?utf-8?B?VGcyMzQ1UklCMmdZRmZzK09RTjQ1dlQyaG1IbE45VTBnSkNIUE9vaFAvS1Jz?= =?utf-8?B?aGNRWGVVNGxvZ1dvS2RON0QycEZCWkM3eTYvVG50Q1hEMGp4ZldRc25wamsy?= =?utf-8?B?UEpLaTN3MjI5eXFleW9sVXVFc0JtZi9BbWZ5MjcxNVBZU2ZReUtCOHNEZ3Vo?= =?utf-8?B?d2I1SmFRcnZhaXF1SmZJSDdQL1daMEhaSSs5bHE1ZDI0SXdpNDN0MnFtc1ZP?= =?utf-8?B?V1VpODdzTndmSGxNNVFlb29QcktaRnR6U2VENzRudTF4SW1WQkFwRVJGenhB?= =?utf-8?B?UXIwTHFsOUVleUR1NHhGTXptSnQzRk4rcDRlN200OGJFYmthYWFjTE5mRkdX?= =?utf-8?B?Tjc0N3N2b1BaTElxMFUzaUcvVHpSTnJXREgyVXZ3b2daRW9uV3hVbVZUYld2?= =?utf-8?B?bHdubzgyNEpsVmNwZHBQeU5PM1puWmpsd04yWjFxeUs4dVRoSUpVYWhucVFG?= =?utf-8?B?aENJNWNpUm1DK2pjMnhqVmk1Rnp6RFYrWkp5d3Q1bXhQUzByY0ZSZ3grei9j?= =?utf-8?B?UGVtTHU4NWI0R1h4aENici9jSUFsK0Q3bnRZUXljcWRaL2ZGNFB3MU5Ycnc2?= =?utf-8?Q?hVp/B7FP8xLOGUzbAAjlqQTc5?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 93b23c64-170b-4b6d-ee02-08de39995ee5 X-MS-Exchange-CrossTenant-AuthSource: DS0PR11MB8205.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Dec 2025 16:13:22.2304 (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: sXpHp2xFJ/bQGdZF36FSCawtcYFd0nUIwhN70wS3YKVJCU5h7EDlxjrW4OBtLVb+/mQmHnKg4+uPSL3pxOcUkg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN0PR11MB6111 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjEyMDEyOCBTYWx0ZWRfX2VJjUgEDz7Ev P4gLG2Ds0lKh4ho4xS5SQ6zZfcWvcKB5lN6bJJ3zTIki+WZJobWYWwVIMWl1tc3XXpDRGLGmkhu B8Dv0v8kn7XknAG/jaub+wsOVVBXUGDleirJUHf+NuzEsVYK2BGi3VN+uwI07ihXI/VjJmX0rub zdlwl+IYxF77kwA+UgspxJj4vMl9XMHgDzi/wJ4vZ1OQdKllS156HlVnFnI7pJhkoa+TdPjdwII utUdb5sFXDZ+6t+14T0pxnqc6ltYic8rs/DGbOhuAtrd1N9jhco/fkh7KflGYzq2zUFEdozBDpH ZzWRFK9WINUf+y6J4AYGTQUA17T8c2sw925zg3eaeoANBSF/dKky5M2qGTmXAW1+M3VEB709oKC V1K3YiLA+7OHsjJ6nXZ6YlC+5vzRxA== X-Authority-Analysis: v=2.4 cv=BKy+bVQG c=1 sm=1 tr=0 ts=693c3f25 cx=c_pps a=iJ0/73tnBOJCmN8OdmQeBQ==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=wP3pNCr1ah4A:10 a=M51BFTxLslgA:10 a=i1IsUcr2s-wA:10 a=VkNPw1HP01LnGYTKEx00:22 a=2AEO0YjSAAAA:8 a=VwQbUJbxAAAA:8 a=NifzlKhAlxbwiDc_K4AA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-ORIG-GUID: 3LUKxFw4kXlmlD1SQYocjgt2OSh4yWvY X-Proofpoint-GUID: 3LUKxFw4kXlmlD1SQYocjgt2OSh4yWvY X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-12_04,2025-12-11_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 spamscore=0 lowpriorityscore=0 adultscore=0 impostorscore=0 suspectscore=0 bulkscore=0 phishscore=0 priorityscore=1501 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512120128 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 --- 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.49.0 From nobody Mon Dec 15 00:34:36 2025 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 1708DA932 for ; Fri, 12 Dec 2025 16:31: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=1765557077; cv=fail; b=Ws/hbn9QH6TwotDPBLeGnkHvyR05amPvw311p5HgOcA3g79g1rRKqBj+8Fp7tBHdfnV6q+uwWG/9787q3IPnHmNNv9Ut9mzlzbUHoYaW586Mgi8luT69OX4IaKrvTsGZYCbkIeIcjCc2ihkXCCRHIb9FspUptrwaJVgoTonQmoY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765557077; c=relaxed/simple; bh=WySM5cdN2B8UR0z67sWDDV/+VlzLetyNNi60pQG7hks=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Eueh3X+Di4pTbAjhMG5JWjWxB2yVk3sf45g4ilhHvvOgD6liuxOgj17Jf5g4k1E1SvZI18QzgFSiQ/OwJj2X776yaaTJwqTBLcm3ynsyet5c4HjhkWsz05E0tBgLyndeJ+CSMwJmZzfl4TETG87SxySVeK++N3mXiw9E/AXj9JM= 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=EMt72od+; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=FzfBgnDH; 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="EMt72od+"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="FzfBgnDH" 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 5BC8WO7Q3748684; Fri, 12 Dec 2025 10:13:26 -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=dhxAU0ch0XPtQ590RjOqkh/Il+vBEamwneEDNjW9zhU=; b=EMt72od+lBGI /W8SuBPE0/TSy2jWoRiTkKHgmNWWtiot98dViVOiemOJLf71t84sPegFuu2/GtK9 61hQ6d5nHip38XihyN6rUW81oii0QPMRMlHDQg42xs2RYO21t4PiwaIDUnAYWGq1 4ZC+yiyEhaRis2z+441/M1U2Q70ZEYbBXy3ScgOvRDAdOjOf1kUv8obBc++IoDId F822Sx9+p7w5OTGWLFxWnC8kwCfliRJykLJE6YCsQWdnfjTBEzplJw9YTbAxjt1C OMtVxdYWXjIs3t/OVTV0OPESWOY5j1x+zBEHiLQ2WIOVJ1BQtX0wJKDtw7p2XumF gZe7dMsy1w== Received: from bl2pr02cu003.outbound.protection.outlook.com (mail-eastusazon11021114.outbound.protection.outlook.com [52.101.52.114]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4ayht2mdee-2 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Fri, 12 Dec 2025 10:13:26 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=A+3/TsijtzG4Sh6gB0Bj1sO/1q2N7zi6vfRlWBQ2UWMZ8T0FJOYbnaDR6k0H0GnLm1ViKQNzOvkVMhzNyi+FAWxlWXdBAVVFwWkcxPXdhbpRzSxLQEye2eUudL1j1tTPfYj6XD/i3koFAwxzg7KH8dYJCSDUb5Nq/DsDJ7tLINr6qreESTwUFmaTBDTkbugOfvWrGw4y93ynHzFFNewE40RsxfcablYvOZDEGVKZjrRWgkgCbTaU3dnxNa8Xkej2jcp54gZd5xUauDAMZQRgfVgxkCqiEn64hW775gT8pB32ABF4Lzp3Koz7lltgyfihM3e4u+JlUJx/mKwQU4z9og== 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=dhxAU0ch0XPtQ590RjOqkh/Il+vBEamwneEDNjW9zhU=; b=ph3fMt3FH1fL8p5ypc3eJ7TbGEnKYcf3PCmxosWj9fsq8bpNivL9RGmZkD+2oO/t3Dd1ueIPRk9kU5OTrrH6nN3KNaA/q1pKRVod9epsd2Hjlu+OY85w9GgDc3StBSOGg7Ip0GN/LiXG5wY0AHOU0h5/yB1izmxgc0PFgeSzwzsHNKHw+e/rN+8+XWaeoG6EP1AJnEEfLua3+QnMy97RIUMNYj3hV7PuOvNNYsLOHtnLqL56UaixyFyw5cFHWI9ejQegxOggxYGWXiyiam+P6d1xTydwYFqSfkpn8CaE7FIJuV5iq+8nq2TBsKGTKdqqxKy1PdRPUhYN5B//h79Jyg== 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=dhxAU0ch0XPtQ590RjOqkh/Il+vBEamwneEDNjW9zhU=; b=FzfBgnDHI2JgMS+NPUzeAJ1AeS48Wg/qhXnRw1DXOLjVv6+h4iPSFKqc7or6bAFN0XaDscDmpvUmWh91ja/+gx7/GDhiL2bu5VrCpLnKMUvPaxyIFJJl2i/eHRKNJefHB2/pY52nZyhFExkw/wJyqUtebtetDqC3kva3j0ipFsw= Received: from DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) by MN0PR11MB6111.namprd11.prod.outlook.com (2603:10b6:208:3cd::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9412.9; Fri, 12 Dec 2025 16:13:23 +0000 Received: from DS0PR11MB8205.namprd11.prod.outlook.com ([fe80::2de6:bc88:2af7:3583]) by DS0PR11MB8205.namprd11.prod.outlook.com ([fe80::2de6:bc88:2af7:3583%3]) with mapi id 15.20.9412.005; Fri, 12 Dec 2025 16:13:23 +0000 From: =?UTF-8?q?Damien=20Ri=C3=A9gel?= To: greybus-dev@lists.linaro.org Cc: linux-kernel@vger.kernel.org, Johan Hovold , Alex Elder , Greg Kroah-Hartman , Silicon Labs Kernel Team , =?UTF-8?q?Damien=20Ri=C3=A9gel?= Subject: [PATCH 02/14] greybus: cpc: introduce CPC cport structure Date: Fri, 12 Dec 2025 11:12:56 -0500 Message-ID: <20251212161308.25678-3-damien.riegel@silabs.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20251212161308.25678-1-damien.riegel@silabs.com> References: <20251212161308.25678-1-damien.riegel@silabs.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: YQZPR01CA0176.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:8b::25) To DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS0PR11MB8205:EE_|MN0PR11MB6111:EE_ X-MS-Office365-Filtering-Correlation-Id: 2acf8c4f-a69a-4ef5-eb1b-08de39995f78 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|52116014|366016|376014|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?amoxdmFkYUNTY25NSjBpZUlraytVWWo2dUFFMW1oY1NNZEdUMlRJODVnY3Mz?= =?utf-8?B?NDgzOUhpaDB6R0xZODJWOHRYK0k5OWFzWEN5QnhZV3lSYUpHUjhEK2E1S3Zp?= =?utf-8?B?L0h0T0psSEhrNDhqazFXS21HUG1Ic0wwTVlUWDVGTGlYMTBjb1J3Q1lpZmhL?= =?utf-8?B?YWlDaldwMCtBK0IwbnRyT2RZcU1xTzFaWjk3N0xiYUxNdVg2QzQzd1Y5ODhC?= =?utf-8?B?T1pUM3hsd1ROeFRvVVh1enJXR3RMaFZGY25sS1owNEhYWkR5MktTaUt6ZUg3?= =?utf-8?B?NitVY09zUERPdXhMbTU4UnpMcHozUjdvb1VWTlFoaGI2aXJPeWtoMTZ6d0g2?= =?utf-8?B?eHhxZ2VqZkk2NXh3ZmV6cUNrMGxnWUpNVTlLZE5uNk9tRmJuZUVHYTdVK2F4?= =?utf-8?B?a2JjcGZOOHpVbjgxRU5vVzVZZ3loR3BUckhoRkc2VVE4ZVhsQ0V0Q2xlaXdK?= =?utf-8?B?T1FJWEwvbG5RQjIwMVBSbHRUenhocm5vb2xpQXdJWCtzcnByLys2NEVGU2Z4?= =?utf-8?B?dEQrcU4rblRlNXQ2MVl4VnZDc2hlWUg5aTVSb2lLb2UzMGNkd2NYL3lJTTJP?= =?utf-8?B?UE9tMDFmeVZ0a2FTQi9zNG9STFJhZVVSRzQvdFJRK0NWQmdtdEZNcWwvZmJ4?= =?utf-8?B?cCt6NXFJL1hERGs0M2ZZc2lhNUNhNWxaMmxSWlhtWEZTVjlhalBVTEFBR3c4?= =?utf-8?B?WEJGTWFWTm1CV3lWRW4raUNlQ2VnVmwwUWJDZUFtenJUajNLbXF6WUxwQVpk?= =?utf-8?B?amNybjhWd0NYaHNNK3p5UXRmNkJabm1idHFPVVB4QVZ6S3hXOVl1UlhDYm1Y?= =?utf-8?B?Z1ZSN1hQenBhcUIza3B5VEpwNy9SYThLNGk1RGtvL2FVaXhtbFRTQ0FyUG5y?= =?utf-8?B?dnk1TnFuRmx0bDJOc1MvR25hTWU1eTN2Lzc1eWxJeU9tS0ExajAzem9ZeVFH?= =?utf-8?B?ZHBNVzh1VGhOVHNJaTJ6VGFHeUFYL25iVko2dXBSdzVzRzBaaWRpZGlNaGRK?= =?utf-8?B?UldlMGtCN3YvZDVxZDBaWFVNL3hDVHR4ZzFMQnpHY0QyaHBabktYZS9zY09G?= =?utf-8?B?aENhdGlORWtOUVMwVzhweW5BVDY2M3NzblVOM2tLcUcxS3E1OFdMREpFK1ZQ?= =?utf-8?B?b1FvNDEwUDVGeG45eHV1NkVEdkV6WFloNGtVSkxMd0QrQTd1UUdJMnhvb2Js?= =?utf-8?B?L01SV1JPNC81ZDlLRFIxc2NIUjg0Z0tWd3pSamNmQldsRmp3c0JkY2RFTmlZ?= =?utf-8?B?STl3cmRlZTYyVVRlTkV2SGVMcmtWS3h1bVdncDlGcE84UEFwWWtLNHJGem9U?= =?utf-8?B?ejVBRUV0M29raWliTjgrQklQM1FrTzg5cnJuUi9QamVwVUJYRzhVdjVkNG15?= =?utf-8?B?OFRzeWRjZllsMW8vL21rTzVZeUIxZWVLTkR4MVpTY1RUZml2YTdsckZuQmc0?= =?utf-8?B?M3Jhdk92SW5MYXluQlI5dWtVbVhqeVhjbWpKRkJGWkd3STdwelVTcHNoQ3cv?= =?utf-8?B?Yi9Ka2tyMGRkUkNFQ0kvMGtjTTNtZnN1VUlldmt0OE5mQnJyeVBrUUhhMU9h?= =?utf-8?B?c1dTQyszaXhXKzJycDZJVW5yWmNsUkVReU1ESzU5VkVqd0tzNXFWaDFaRjhj?= =?utf-8?B?RzRMcHJpZzRzNXZQNXN0eUo5citaQVN1Wmt4TmZON1ZLSldxcGJINXhKeUgy?= =?utf-8?B?cUlFbU5HblZTcTFqbGEzTHVYaDIwSEp3NUNreTRISDdTWWRWazlkdTBlaVF3?= =?utf-8?B?SFFtZWM5WFFHNjMrakhqbERjeFF0S3Fpd213ckFUVmRqZ2RsaDF6NlkwTWVu?= =?utf-8?B?NzdUTzk1UkpBemhIcTNqL1d2WjZHdjN1K3BzMVFpTUluWTNRamxkZ3psNTRx?= =?utf-8?B?Mko4aUplVWhuV1pMQjJaSG5XV2pwM3BUbExXejhPQk1CWHVQNjI2R0krV1l3?= =?utf-8?B?NDNBbHJPQmRRa0UybHlVSHZqeWI3NSs0bktaQkxLY0dSaWpZOHRsK3djb0Zh?= =?utf-8?B?ellHM2szKzRqNnIrR0pOb3ZxTkdRLzJNU1V6aWp4aTA2bUZSMjhGeVBTd1JW?= =?utf-8?Q?t61BXl?= 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)(366016)(376014)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RllzTE5wUVJvRzFpUEVHWU44ckp4dVpjT0hrWndHZlZTM3FjY2l0L2RlRkwx?= =?utf-8?B?U0FDTHNNWHFnVmJPOEJZbW56WmZkN1hLRFB2MmRxZHpSbnMwWFFETTNaVEts?= =?utf-8?B?MmdHVFU0RHkyZmM2d1htdXFLRlkzOFlubkFmTnlveHl6VFRtOHlOdW9kelVY?= =?utf-8?B?UTJDV25mcWljMHA3c3hhNnZFd09xaWRRaUFnYlJWTUtGVTBXdlJOU3lCdVZE?= =?utf-8?B?RXBCWW52MGNERGFrTEdIOWpxZFgyU002cWZncnpRUFFxNFAzMTRnL2FnK1k5?= =?utf-8?B?Q1ZPMGpwb2xrbVllc3NRWHk0dFlNaVNnbzZyMjhUK280R2RjTjJzZnpDZU9F?= =?utf-8?B?YTREZ0NTdGFOZzlVMzd2eHcvdWF2bUp0ZFJYR0Z0OHBuQ1JPN2R4Q25FU1lt?= =?utf-8?B?bUd0cGVQSTUreWpUakxJR1U2K2d6eDltcFFoMTIvTnlUdmpWdXlXNnRZM1Q4?= =?utf-8?B?aWtxSmYyUW1LYVdRZDFES1lCdTI1bktrcXA5aGRSTjNGNDNONkJycjhiejJM?= =?utf-8?B?aXM2ME9ZUmdUQ0VpSkNuV1BJTFVOcWxmUzN2ZFVwcnBiZThyRitDNTgvY1N3?= =?utf-8?B?SFVpSzZ3VFFhQmVORTloV00zclp0VHJ2MitTYlpDNDBoZ3g2S3YrN01odE9H?= =?utf-8?B?Q0FMdkREK3lEYUpVSnh0clQrdlQ1MS9SQmY3YU5FSjRZNHFqRXY4Nm45SGVk?= =?utf-8?B?ZFRiUGx2VjVKNzF1UktJc2dmUW5TT25NZVI1ZEo3VFJtMEI5UGkyc0Y2Q00x?= =?utf-8?B?dFI3WkdabXNnQjVXV3gxaTJwZzJZcnZDWUpkL2FSYlpac3ZnSXRuellwQ3FO?= =?utf-8?B?Z3ZDWURSSFlMaHQwRFhONmJWMTJDWmNIV21ZM01GNExCL1BrOUxVdmltSjdN?= =?utf-8?B?NjdMZko5K1JIb1FibThKbVMvMFA2MUVYZzdZRnhkdk90bHI2ZG9RTWpjN1Nx?= =?utf-8?B?Rm9YRUhJUGtBSUt6M2J1SXp1ZVc4ek5aNmRJQnhMN0VhekJjMmNPajFxZFlN?= =?utf-8?B?MkZQeVlyS0dPRzlES2NzYXpnNXoybmp4N1NkSDFpOGhBWUE4U29QN1dqZ002?= =?utf-8?B?cFRKUXJ2ekxwVXZySklNUXRPUnNEVVVoS1lTWmdDZlFMb2FYZk5iclhGdmRM?= =?utf-8?B?a2dLa2hBL1RWdm5GSnBDTWJBN091bS9BL3YvazkwVWY2SHVETjlEMEMwNE9q?= =?utf-8?B?VjdnYXBha1lMYUd1ajdjZjJQSkFZM0dNU3JYU0M4Zm5pRUk5K0lOSHUvWGhW?= =?utf-8?B?RHg3S05WVjZnSXh2clp5M2ZNb3ZTSG03UGszL1YzbXNTQ2pvMS9iblJRMTVl?= =?utf-8?B?M05rYWxCRkRpNGtUamR1NWM2YktDWmZCTEIwVXhkejVGNnl0cXcrbTI1RHZU?= =?utf-8?B?a0I0SlZ0ZXhEN2xSQjIwc291ZFlxMFVaR0Nzbzc2ZzhkRzlCL29KWE83TlFN?= =?utf-8?B?dE9aeWJBYkVxUUdVd2RxcERMSDZ6RGJKZzFQU2NFdGhyTmd3ZmVuM21JVTJs?= =?utf-8?B?WlFzZHFrR2pwdGwrVzRSQURuQnZkblc5WlNTRlFCUVpUMUxNSlEyd1pHN0Zp?= =?utf-8?B?anRCSU9zZlRtR3RDSnZzUkNBNEo0MkFqc29BMC8yQnYydGRlSndDYlB0U0Iv?= =?utf-8?B?eGoxWFQ5VEJsMmJvS2w0Yk9rR1k0RlhQZHlna1JKUkFyTk9NMDRLMnF5Q3ox?= =?utf-8?B?OXhuZzFMYVVuREZlT3hPUWhkRXA0M0FwbE01QnFOOWlUS3BmVGdaYzRReWJh?= =?utf-8?B?djN1K0gxaG1FU3JJdUcrOCtLL2pvQ25jSDBBTS81MW4rWldJSGpBd0F3aWh2?= =?utf-8?B?RkxuemEvMTlQSTc5S2p0d3VZay9FRCs2cmUxcmVSVjQ2QU56Mm9vS2k5VzF5?= =?utf-8?B?ekpIVFhNdDhnZk1jcVhEZXhZUFpIOFFGb1lFRXd6WTRZVGFsMGJGZWRQZzdB?= =?utf-8?B?VDhXSlh4MVNtMVhxdTRUeU52RzdMaW5DNC9hN0daS0ZSbGhYZi9zd2dkSXdQ?= =?utf-8?B?ejZVOTJNRktxSUZsVFpucmFXWXFLN3JZeHBkaWpPaTNRbDhUdmVWajRMd3dZ?= =?utf-8?B?N3dtc3EzcHBXdzVvRUxTM2RIbW5PRi94aFBXdUttM1FrYVFhekpETEpwY0dj?= =?utf-8?Q?izo/ZsCr11fLLSuGAj4w/m3rV?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2acf8c4f-a69a-4ef5-eb1b-08de39995f78 X-MS-Exchange-CrossTenant-AuthSource: DS0PR11MB8205.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Dec 2025 16:13:22.9560 (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: IZz8lnyxwcoNj3vJVBLjrK3mXvwKSEki3DyuS+xR4d9dXLrqL9ujo4nJSofueopGHroUDlQNlKftX+tvPMl1NA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN0PR11MB6111 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjEyMDEyOCBTYWx0ZWRfX/w3j6oxnCjuK jP7IKoV3UzAkSxSq0XsxJFyo4ImZsHfYWwTi3znhfIhghZT7gy9OCJI31nSjJ3YFXef2lA1YYOy IxaZWjJkdtnObv1zvpcrcCcYu//kd5KHL1adqiXlrvSQwI+0hyiHglzN/ZfQwYD/QsGCNC+QIA5 WZOiRy+4PkWNv+uc2tWJq0MwWkhjPJKF7DRNF6qNIyY9H/j2Wi165tyrL2rVdZFJDgOsTHHeFd7 VGghlbdqLY2Z3f9PIIeos+TLZU6QmWV/tGvJkKJuRkUUhF4VEvQjgqlqHV4/UhiDr5ZzFXNfMKu weNw48EmRXdG79Jxn1zYw7Ll0amtSix4mGeMSHhHlYgzW7ynbSCrKwYSzP+ZVnCS0L8TdPtyHv5 cc+nkxQjUNpFfAcW9QJZtEaTxhUx6A== X-Authority-Analysis: v=2.4 cv=BKy+bVQG c=1 sm=1 tr=0 ts=693c3f26 cx=c_pps a=iJ0/73tnBOJCmN8OdmQeBQ==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=wP3pNCr1ah4A:10 a=M51BFTxLslgA:10 a=i1IsUcr2s-wA:10 a=VkNPw1HP01LnGYTKEx00:22 a=2AEO0YjSAAAA:8 a=iqUPcmWXN_vvxTOgPeMA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-ORIG-GUID: WaWrtXISp0wT4NwjDn6E21csZKqWNA1g X-Proofpoint-GUID: WaWrtXISp0wT4NwjDn6E21csZKqWNA1g X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-12_04,2025-12-11_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 spamscore=0 lowpriorityscore=0 adultscore=0 impostorscore=0 suspectscore=0 bulkscore=0 phishscore=0 priorityscore=1501 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512120128 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 --- 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.49.0 From nobody Mon Dec 15 00:34:36 2025 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 3FD4B42050 for ; Fri, 12 Dec 2025 16:31:14 +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=1765557075; cv=fail; b=HkTV3878BuG5X/a3Sxgx7dxABOchScoIQusIrlPu7USxhp5mLcgvoZGmFh9PGyT52tv6RS/WX2G4OrJd63R4iHVhx8LAWqtLPhC85Cz5Fp6b+4hPuGGwE4XCZ3uh3Z4Girw/u962qZTmQb8gDmhqCVymtv/WyvjpCWUfeKt9IpE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765557075; c=relaxed/simple; bh=DbJdgyYwCSxNspeqa62Rt3KcsHAkHF0fz/hrnUeK1FQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Catj2V8KVhPmTRBhk9RzxqX0aQhjE9IHN7xrZw30/0rtZHq8i9TTCNH9X1oQlVg3y0e9VXztrM1wjNhZhxS8n3YaYaHY3lQhpJ2pgVPxmzsvKXzesQZIJ4bcN2k6u823Yjj/ZQDY6BEoiYq3I+MDyP94LxFDUdPboO3CABc8kSg= 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=zOmZY6JL; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=bJVddc29; 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="zOmZY6JL"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="bJVddc29" 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 5BC8WO7R3748684; Fri, 12 Dec 2025 10:13:27 -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=/vu99iSv7WNg4c3o8KjzIRRINo/BhiWALOiKHQ8sV9M=; b=zOmZY6JLQdJt ItX5HsaVximwVnsOfY5/LqGv/l7d+hMS6fye02OzfK1vL8lXheeenitEHNZy1x6+ 7oSQ67WywL7MYbNHJqf+7/1TDK35WtqluDqUnN7EvxCfAHHqutj2RPb4bC0WOy7F It8grFkWmmNfe5NwAcSJDQ+dwAT1uo5pzT+aw42kICS1O711PSdESeaB4QmbWhTr 0JZR8K2Dgws4s/gl9dXSkb3I6DGZBrCAHOTSkjXWtEW1HwuKyBNJFOkLOPQe/Y5D /fULuFJXFfzSI6NnDIWsMecIwOoiIa/a9ovw57dbz4Z3/0sI3eiMYYVt4xKqcqg+ QGbpVZmcKg== Received: from bl2pr02cu003.outbound.protection.outlook.com (mail-eastusazon11021114.outbound.protection.outlook.com [52.101.52.114]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4ayht2mdee-3 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Fri, 12 Dec 2025 10:13:26 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=B44WFTcPFjAJGiu1dyLIe64Yv3HRlqWjTNPwbv1CELpLex6H0rQSlKvEh1afKQdDgCBeIKeV+YlatOdSWX0lQt81CUXP+0x5JtDAoEaDYEXM/tPqWNF0USkuKKm7PDvrvTUnaQoDGfGeNGdq4dysaBsLHwW+YN9xq+9kGtQthmKC1XHcW6pQgFd/xN3V7kRSJl71pzD8HomUAmGF8gjYifXAJP7YJ9XkrPo5QKj8JFosIOuKzVgkPUkD/eAeGZ2SRuI8Q70BEiMcwY1d99xoWpzQIVE68dRPZR2y9nzFSjeeLaJ/0PxBjtABbCvYcNwhexjXOlclHLYteAGJHj/AqQ== 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=/vu99iSv7WNg4c3o8KjzIRRINo/BhiWALOiKHQ8sV9M=; b=trFEsK6M5Fg0MFhS935XySaogrPO2rRDu4nwc5lCGhZyfmsH4qKZFnan0veJJZqoQQfR3RJeloCIjXvnaA/4/Xu684WVM3neVhUvW3dSwY6azyTylErIjNpH2QNY5Fpmgy2sslCTOpHPOgem2cuuuLqFJdQROdCUWAnYpMDPsD3qb53LzyH3LnVyAhkcj/VVq388wVQGHxXiw1PA4hKMINfnkyDFr1dLb+vCUfNhbCZJ48Z3xVSfmMAJWqO+XLjb7vm/SS9YLMait6Lp0YBEYM4Ydw2EfOgurF2DsYGR2BNDytjSa2csCAbEguGLrqo81R9ZwmSIwjCFXoEDPOTeLw== 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=/vu99iSv7WNg4c3o8KjzIRRINo/BhiWALOiKHQ8sV9M=; b=bJVddc29gL/6aLHWSh3GzQ0wA/EcypTGNNJUUeJunGssk6Jctj6iUReFjJbeEP7kvHVw042vtGtl+ZoEta/+WtdvNU6BW8RoYLGHQ35ivElXhvsulXRrGlQxU1mQxdHEErjXOmpj+yhOlwoIMKv4uaY0uBhb1umNrRTWoQm8vBQ= Received: from DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) by MN0PR11MB6111.namprd11.prod.outlook.com (2603:10b6:208:3cd::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9412.9; Fri, 12 Dec 2025 16:13:23 +0000 Received: from DS0PR11MB8205.namprd11.prod.outlook.com ([fe80::2de6:bc88:2af7:3583]) by DS0PR11MB8205.namprd11.prod.outlook.com ([fe80::2de6:bc88:2af7:3583%3]) with mapi id 15.20.9412.005; Fri, 12 Dec 2025 16:13:23 +0000 From: =?UTF-8?q?Damien=20Ri=C3=A9gel?= To: greybus-dev@lists.linaro.org Cc: linux-kernel@vger.kernel.org, Johan Hovold , Alex Elder , Greg Kroah-Hartman , Silicon Labs Kernel Team , =?UTF-8?q?Damien=20Ri=C3=A9gel?= Subject: [PATCH 03/14] greybus: cpc: use socket buffers instead of gb_message in TX path Date: Fri, 12 Dec 2025 11:12:57 -0500 Message-ID: <20251212161308.25678-4-damien.riegel@silabs.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20251212161308.25678-1-damien.riegel@silabs.com> References: <20251212161308.25678-1-damien.riegel@silabs.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: YQZPR01CA0176.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:8b::25) To DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS0PR11MB8205:EE_|MN0PR11MB6111:EE_ X-MS-Office365-Filtering-Correlation-Id: 64452895-01cb-4952-6a32-08de39995fea X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|52116014|366016|376014|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?K2VKUitLNkg0VU9SVlAraWgzTVNqVFRvV1pMS2ZqTWZmUEZSUjloM0ZpN2VV?= =?utf-8?B?Y1NRdFlLMGhmblYxM2JKR1U5Zmh0UGJpeGN6NS9odDZVVjk0Y3prNTBhVnRa?= =?utf-8?B?d0V0dDhCdXRNaUZKVi9IVGtHWXJxRXprK1R2bU96Qm9iTkhlVU8wOHE1TTZ6?= =?utf-8?B?U3lVUUovc1BqUGpWaWR5SmF2ajRmdFZzdGxmb21ZQWVSZ3gzUGY3MUlaRVFq?= =?utf-8?B?RENwZGYwaUx6ajhYS0RHdXZXWEw1YUVSWndhbFVCQWJPazl3WWpkeDM2U2p3?= =?utf-8?B?MVozbGZQalJNYkQ0MEU0cmZOL1lVQmZnd1krZkdRM2xBSldZZUxJM1g2cWlV?= =?utf-8?B?VWNwMDlqMVlXcTlyMEFDU05HdGRDaUNhUzd1WXYwMHN3cjYzRzJLbjZVZlZ1?= =?utf-8?B?aGJmTVJtaTNkUUdxRCt3Q3UwUk9lbmRZSHVPRjR2Q3BaZm1Xa1ZlSkR2SHJR?= =?utf-8?B?SERtVU5wdFh4Wk9sUktHWmxPaENJRkNqeDgrWnZTcW5ackRqbjlOOVIvMU12?= =?utf-8?B?RTExcWFIei9pK05QL25nd3dsTk5jZnhnMzkxdGozdWt1VUROeXZKUlRiRXRy?= =?utf-8?B?K3BTL1VxNWxsZDhPNDZhNy90SW9mcXdWTG56QkR6YlBCQTQ4RnFQM1NXam1D?= =?utf-8?B?Sm5mcm5ubVFIWlpWVzhSNENlbzB0d1RtV1FHeEl6VDNsS0p6dGNPenRrMlhl?= =?utf-8?B?SmNlWWxzcjEyb2NwVkVGeDl2Yjcza1VwdjI5RGpUOGpwQVU0WkdwWU9CZi9Y?= =?utf-8?B?YThoUkV5b0lhQ3V5WHZyaGRLRGFLcnlJMXdFL01Nc2c3ZHlCTEFIRWZnQjB6?= =?utf-8?B?ODk2WGRjQ0E2Qk5jRFhBRFI2WnNhd0dJdHpOamlNWGFIcTBJNDJWZjBxMTNK?= =?utf-8?B?cmU0ZTRmTjh1dmpKUlY1WDdESHJmOE1IL01nWEdxb3BLUlFzTEQ5UmFYNU9H?= =?utf-8?B?WGlVaWNwb2NBUEt6QWV6N2s1NkJZNmcrbUdMTTh5b0Y1Ni94cEhLZ2lIc2FZ?= =?utf-8?B?OE8wWW56SUNKNDdDRlc1RkNCVGtQVlpBaS9ZWmxiS2ZDUk9DZmNaNjhpaVFN?= =?utf-8?B?YVRUUCtFSExyTVFUYk9iWVhvQWVhN1hwK1k3U2hwemVPaUhhdXVsMjdxQnJq?= =?utf-8?B?KzBjb2l0SXNISGlPczhKNGxMbTJPZUtYd3RkRGZWZE5RM002Y0RvNmxFR3BS?= =?utf-8?B?Mlh0cVlQSmhUWXFkalJIbHJNekZiMjdtbXdjN3lUQWVUdjBjdEpxa2JiMG4z?= =?utf-8?B?TmpVbU1CUzNWamhqNE9SdUpYdE9zZWpoKzNHdUZzNTZneHplckVFSWRYK0Uv?= =?utf-8?B?T3k4YXFhZnI0V3dRTnllSHVqR2MvbGtPaEZ2TmNnOTh1MUd3WEkzZEw3TEhv?= =?utf-8?B?V2RtdXRkUVdWMFdVNFZYQWhBVC9UeE1Qd0pzaFo5WkRFOVVUWWI4NFRjUlRD?= =?utf-8?B?SE1mRjJrbXZPa0ZwQTBKekphMG9IcXBGMi9CUStlOHZnTEpWU09Eek9mYlpv?= =?utf-8?B?WVNYWVVwQmp3LzVTdFJZNGlFZGgxMFJiL2pXSDVicGVOcktnRWtBb0JMTTRz?= =?utf-8?B?WE1Gd0ZyNXlXR2dFd1BCQzBHM1M2YjA5TUc0d29Sb2pPbDR5TGJINk1Mc3ZR?= =?utf-8?B?OW9SNjRVS3lQSmJCUldYVVgxQ0tYcUJ5eHNYNzY5SmJrdEh5U2tQb0g4Yk5t?= =?utf-8?B?R2czZE5lWlVpOThzNXhVKzhvcmljSDFGazNiSWdXMlgzakhTR1VsSEFrRFQv?= =?utf-8?B?a0xUYTNTeC9wRDBOcGgyeEV6S09RV0dZSGpZUUxYdTJmelBQUkpKS2NNazgr?= =?utf-8?B?b3M1a1l0ZVI0czZWQnc0L0JiWmx4K1VQN0ZydkZYNHduK0VjdGdjUitXTUlh?= =?utf-8?B?VWFtemtEajRHekhTeWR2QUtXM1dMMk5YMDZFZlFmSDV4R3hpRDgrUHkzMG1V?= =?utf-8?B?YmVLaGJmcU40N1NBWnhnMG1NM3hGYWhCdW40dkU3VzljWXVHV2M5cVNlTVhQ?= =?utf-8?B?dzdZRE5mR3NmZmJYelJWWFNOQnBhd21lZ3dIcmNaUWplVXRSS3o3NTZibExM?= =?utf-8?Q?FyvwfJ?= 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)(366016)(376014)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZUJwRWF4TytmOUtyUFd2UWV0ZE40MjV4WFA3RmdoZjZzWXBpcFhUbzlHaS9Q?= =?utf-8?B?aVlLdGJKNjE3azhxNGdvYys3a3ZjSHZGWFQzL29PUFd6VkhuMnRyRmNXeFFM?= =?utf-8?B?cE9NMDRJUlFxdEQ4c1BmZWRic1M3QVg0SitNV1RsaXJsMkRsZ3JNa2o5Qy91?= =?utf-8?B?QnRySjNWOE83TlRvNm1waWdSWEJCVUxFMGpoUjBBMGN5S0lWQVRvVUFGbjJT?= =?utf-8?B?dVdWeEJ1V2xMVUNSdzh6VDI2YUR2bTRpMnllL3phaFI2TkExNkQvcXgzQ1FO?= =?utf-8?B?OTZnRDM0ampJVUVZYnp4SkhyZHZPUUtid2NxTGFXWTgwTXliNGxJN3VTMTBO?= =?utf-8?B?Y3hEbk5nUU5udzV2M1BIOFVTWktUSVFIb09pS3RPcXJ2eTVET3ZzcFBUZDRW?= =?utf-8?B?V3ZLN2RNVVlrak11Z2p5ODFkM2lIL216dCtuRlRPYU9sSE5KdUUySlVWSmhk?= =?utf-8?B?R3ExK2poc0RJZjlNVm9oSGNqUEdIaHJiRlhVQTNoV2NCMk9zQ2F0SGFZQ3gy?= =?utf-8?B?VXo3M0RUTnJ3NkV5RmUwMGNERHVUdXFsb0M4MEo1M0FkN1NlMUhqa1ZHTHJK?= =?utf-8?B?YlpsRjNtR0NGblphT3VUR2paU3l5K0g0bXdhOHZUN2k1RGV6QWIxTlk4YVlP?= =?utf-8?B?MTBQT21HQ25zR3VTRjdZTnZsTXRJQTdoaGVOeVNVOW5YS3VUQ2FyS1dIangz?= =?utf-8?B?Y20wcDlCZHZXRmlZZmNPTE9lZG55MnZyYk5KUmpYMUNHa2RkalMzSHBVZlBr?= =?utf-8?B?UWZ1RkhwbnVHQWg5dmpxdXJnWVlGNnd1SlYwOHhwakJsWVQxOTdqT1FSSnZo?= =?utf-8?B?SFQ5NkZLaDh1QUUyZFFkQTlKc2FHVjhPdUN5ZEp2WExYTDlZRUJVUUxNd1hp?= =?utf-8?B?U2k5SElBSVNuOFZqQ3U5a0t2US9qWG03LzlVaGs0ZElORVdqYmNsN1BURU1P?= =?utf-8?B?MFh2ckYrek5wSkY4NlJ6TnJFQmdzTVFkN1pvYTdNNWV2dDBlZ1AwclJWd1lV?= =?utf-8?B?NlJCM05SUTJpYmZ3aVJZNm8rbkZSSjZPNGYzOW00R0tTYXZoMXdERGpqYXQ4?= =?utf-8?B?b01CTFlSQjVYR0p0ajF1bDUrTkZLcHRoZHVLSkw1TlMwN215blpkNXkzWGtU?= =?utf-8?B?OFREajYxRXJ3UVVtd3VENnlwWEQ0VE9wQ0RGdjd1RzM3UC8wQUhXeklPUHJC?= =?utf-8?B?UUpuR3hXYjViSWs5YWpWVGtsUVA4YU1QemcwbUkvSElVNENMVWxwTVZGNHdi?= =?utf-8?B?OEJxOEx1bkptU2xPMGhRMTJ6STlPRkRYcm1yWVQ4bzNXaWxtWGtuWld4ZENW?= =?utf-8?B?Zmt6RGRpKzczdFRUcnFSZlZHa1BqWDh4eVpqNXQ2ODFrNWcyRWNGQVgyUXBJ?= =?utf-8?B?K1I1NWIzb2Jvdkl2alBGdVlkU2Z2VXNlZUd6VjJKaW84aktrRnFYVVhrVkgw?= =?utf-8?B?cUZDa3FoN2h6SDVhdndjTjFkekRSOURsOU0wQ1lCbm9DK095YXFBaytETG1N?= =?utf-8?B?YjlnNjhYMGtqTGUrdzY5SzhXRDNnRUhkNnJTQUo5bDNPRFl6blg0ZDZRckF4?= =?utf-8?B?RGt6b005c2pJelJDMDdaRHAyTVpTSXdUa2xFWDJxdG9LbW9jOU1vVEZhKzRK?= =?utf-8?B?dG96dk52MEhGSzdWNGs0SzVPUFFIajZYSzFvVkM5TnB6dEdES0hYem1CaG1a?= =?utf-8?B?ZWFUUW4rMWR5WVhEUG5kcUxTU01xbThQMWdMK0t4cDdGSmNxekh2NzRkbXRT?= =?utf-8?B?ck5HbjZiUUIrdXY5bmFsbWFzbWhhOHhkdzloTS9YaFFXVXlWSWc5QzJ1bVZY?= =?utf-8?B?WEJzLyswRStxME9FWnk3N2lLUzJrbldKWW5QOVZPSmNaTFZ5Qy9OVXRJeFVN?= =?utf-8?B?V2xTTGZqMStEL0h0OUc3OGpyNEVFbHV1eGdvYzBEbEhQRlYwU21rNVJJeThx?= =?utf-8?B?VXFndDc2YStXUmduWXllZnU4eXlsMkpCaVRnRWtGZ2JnS1hGaWRQQW1SV3BG?= =?utf-8?B?blhnbDZwczZMb3F3ZTcrYTBlZmFxVklFa3Q1U1J2V0NtcEh2ZmtZVGY5SWlV?= =?utf-8?B?aDhueVYvaU9jYllTbVNTb1M1QWtOVGFWNm9PWVgvcFVLVWg3TUwyanVSL1N6?= =?utf-8?Q?mcZoYKenDKLjHS1cpqGV/R3JK?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 64452895-01cb-4952-6a32-08de39995fea X-MS-Exchange-CrossTenant-AuthSource: DS0PR11MB8205.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Dec 2025 16:13:23.7151 (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: PvGKiXDC1F9HLm7+RIT0Zn2c5/uYZ8jFogz5d0xDmy75wGK56W3/NiGFMLGt+v7wTISDtbrycuWpdomEfPT5cA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN0PR11MB6111 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjEyMDEyOCBTYWx0ZWRfX2I3xDbcX/lpw 1FQZVG7abAjJD3u/Wd7Tup8i63/mdUW6MJDMlaBmfGsN1so/gZRZ2x83uzi5GtDXYLWRjoXMwxv ltawZ/efty3E++CzSQ2s2dJA5G6RQkQ7RWlGCm5kOF2squAY1YS+gp1NiuSEsnbYn4MhDj0lmbZ UrJr3QSlJNwdWw+IZq1Za7/HTtOLlD/3OJ0fOPLX6gHYkdYkvsF0+DMsSR/6g2JbSIGhj3Jq3xF fT0FwSHElbYA/tCRJRw0udrc4aZ96AMjWtdPObpx1hSRe5oBrIceik1lSZzCZ9GcSg9GVOyadMm CowWwtrzs25n12mM/h6/OE7rhgcxM0gaAWbsjTWX2RTfFvlFv3dlf5xPmwTyphlRVhTDzKFDS1i 8ZE2yqLCtcOWB+yOVfVU0tf2GLrdZg== X-Authority-Analysis: v=2.4 cv=BKy+bVQG c=1 sm=1 tr=0 ts=693c3f26 cx=c_pps a=iJ0/73tnBOJCmN8OdmQeBQ==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=wP3pNCr1ah4A:10 a=M51BFTxLslgA:10 a=i1IsUcr2s-wA:10 a=VkNPw1HP01LnGYTKEx00:22 a=2AEO0YjSAAAA:8 a=UI2V7ICqOKO9W4d5kokA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-ORIG-GUID: OG5WVbA6YhbsciL3kmfzmBc9nZBmLC6P X-Proofpoint-GUID: OG5WVbA6YhbsciL3kmfzmBc9nZBmLC6P X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-12_04,2025-12-11_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 spamscore=0 lowpriorityscore=0 adultscore=0 impostorscore=0 suspectscore=0 bulkscore=0 phishscore=0 priorityscore=1501 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512120128 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 --- 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.49.0 From nobody Mon Dec 15 00:34:36 2025 Received: from mx0b-0024c301.pphosted.com (mx0b-0024c301.pphosted.com [148.163.153.153]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1737F2C0290 for ; Fri, 12 Dec 2025 16:34:32 +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=1765557275; cv=fail; b=b+9gMsivY55Aa99bECzpTgHgs3jGD4NtGo8FGFh7+znahjFKQdB3ZUVCfqH5WrgY9X27EfaSyCOvLZdJyAp0//UGxsjigQKRyl3ibG8IklnINQSk+BafBiA9g38jy7fdIqSVV6Dan7qQVcoWJW1NTSntnj3wQ7UvFFCqB8C4168= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765557275; c=relaxed/simple; bh=5BFmUG7A79HmA8r3/6QOfVTkEJ98cd9K56W/endHPso=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=HzqahRhb+CgZjUVI8MFPJe0Wja6HMg5rW0Ibl6yNvQAsqM61+BDwxdNU+AH1XFUL4dP3h79PySa48e87FYyK0lEuaZFzr6DZvNyJkLZ7Qk0CKgGrxLw+lMs/Dsn4+4f5zeerXcuQragY5A999KZWiwpP4jor4jPMSp2sn4sAMuE= 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=P8Ttji3p; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=WfIO6XAw; 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="P8Ttji3p"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="WfIO6XAw" 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 5BC2uEi82563949; Fri, 12 Dec 2025 10:13:26 -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=C0ZE1Lpao0VwLwi2WpVtPRRotAKEx9xhQpIwVpcxx84=; b=P8Ttji3p7nh8 NwDpsNP/HRc+xjYGjRPnusFC8VANqo7Vhqf6pFhHMjquNjVI4jayVjWdDSgxmLfl q9Eg7Ka/4OUhYoUBYhnRDaC48VMz8iagNR38ATbv/xC1n+VvMaMLDWJxwVVVNSx1 nJaMZFnyjhR2IyYNOl3W9bIQ6VKYXMICGlG6LP8MIIgXyueCSieeuyZuANVpcSSE 7urXJU5j2RO1Rg6pPCsX8Jdk2CFAnt5oZHGWXoJmOhQtyk3DRDoAJ+cSEykxTrUP S/68KkFRWhhhRW+9ebIljuikPXd4cuBwQCdtWAx8p8Urh3zfsqJI5el8SMMEO/v1 ekuN+twuFw== Received: from sj2pr03cu001.outbound.protection.outlook.com (mail-westusazon11022100.outbound.protection.outlook.com [52.101.43.100]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4aykqe47hk-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Fri, 12 Dec 2025 10:13:26 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=SncZRyca/E9Miv/kafun0dVmzSlliR+fyeq1svQzmn2S36mObdvIqkFhqYhqVPw/Rynju9W6Al/aKwPoKXlkHCrlF/STwOHtf2cfDDAF1U2MTRYvNMvDoV89WZo8mWOT6zKgFojJkJj5TEy7XFG9b1e42Izg1Jiq0pvIE/P/GqklWyqzZjS4e7UG4zM3NwQIx2SLX7FTktojfvK2Ky4AcCqGct60Wnm1xVOP71u79SiLbMSSQe288pHZBovKW26iNMDFfOgyTjwdHunP7V3tjcEiI0NMr+3uGoIQqwuuy+w6hHcbz3leoGpdbEX+YlJzDXs1GBz1Bdl7v96dImmr3Q== 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=C0ZE1Lpao0VwLwi2WpVtPRRotAKEx9xhQpIwVpcxx84=; b=S6m+S0lduK52BlvEPPVg+1n47kKjd4+RPIreKmQnzJM/JUTWBBy8unQVEyNNEfUSP2a9l6uk/XC7quRKLtsj1Nfib6gjoAigOtoGY1hbAR+o+m5XCLGG6wBbWKxfv0km606MMpYDooIbfEGf5MfebQuqPQInG249Sx2TD0ptoxf8/nFegkdrgx7jh4z/sa8Tfu6n+z9ILnlxke00DcB2FpTyCkMn14WhZpfW2zcdU/wHjhGDWT/zrL2cuRPe3N3LvHMuOHfFxs7XzCfdnb3dvNPDJ+Ev9syd557dS8JO1suKurjl1qnOGJVX+E5Qx6UK5ac2Epy+bj0CyZyzdsMfFw== 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=C0ZE1Lpao0VwLwi2WpVtPRRotAKEx9xhQpIwVpcxx84=; b=WfIO6XAwwP1DDVoM55nRIUQpkqPPJPZCqhRteIav9gsZKOAHt5YS7MGW1x48fWfEZtqvu8kC/dTTBFvyQz+HJFw8KEsny6fBp10Z9phhwd+elOP3nCy1ArNM6EcDIt+ib7QwUzF9VOiknb39WM0LrmXIQXO1qVxbqMWDHZb5hy0= Received: from DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) by DM3PPF7468F7991.namprd11.prod.outlook.com (2603:10b6:f:fc00::f2d) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9412.9; Fri, 12 Dec 2025 16:13:24 +0000 Received: from DS0PR11MB8205.namprd11.prod.outlook.com ([fe80::2de6:bc88:2af7:3583]) by DS0PR11MB8205.namprd11.prod.outlook.com ([fe80::2de6:bc88:2af7:3583%3]) with mapi id 15.20.9412.005; Fri, 12 Dec 2025 16:13:24 +0000 From: =?UTF-8?q?Damien=20Ri=C3=A9gel?= To: greybus-dev@lists.linaro.org Cc: linux-kernel@vger.kernel.org, Johan Hovold , Alex Elder , Greg Kroah-Hartman , Silicon Labs Kernel Team , =?UTF-8?q?Damien=20Ri=C3=A9gel?= Subject: [PATCH 04/14] greybus: cpc: pack cport ID in Greybus header Date: Fri, 12 Dec 2025 11:12:58 -0500 Message-ID: <20251212161308.25678-5-damien.riegel@silabs.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20251212161308.25678-1-damien.riegel@silabs.com> References: <20251212161308.25678-1-damien.riegel@silabs.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: YQZPR01CA0176.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:8b::25) To DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS0PR11MB8205:EE_|DM3PPF7468F7991:EE_ X-MS-Office365-Filtering-Correlation-Id: db318f60-95ab-4e29-f5e4-08de3999605f 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?czNMelU0eVJ5Y3U0N0tLa0g2WThwdW4yTy9DUjd0d0xLUFRhVTVPeXJPNmRN?= =?utf-8?B?MEdmYzNjNmxrZlB3d21pbDRIYXZxT0RxSy9BbXNBWjRmaXZVL2pmeG1Ca3VT?= =?utf-8?B?TDlnVjMyZHcxZndiL2J6dktYZm95OGlZS2RyWndsRTZxNjJBaytSdGNEb1hL?= =?utf-8?B?OVlSRkw1Tnp0TjdzWGt4ZmZ2TGFDNldMZ01zNzVIQk9TeTQwREVuclNKaVVs?= =?utf-8?B?aXRoUWlZNElQVm5MaStWMVR4aGpyMkNUOGRodktCT1pvWGUrSGNSVC9FMElX?= =?utf-8?B?OTM3OS9hZEVmNjdVUkQzVjNvODk5NnEraHgzMk5raUNtN1ZSaVBYa2E3QU4z?= =?utf-8?B?SG44cnArQmJzU0J4Wm0zcmM0NEozMTNHYUh6Z3BTZDFtQlJSZVN0OER2TjNy?= =?utf-8?B?TURRbWRMWXhpS2pFd2pReCtWZWZUQXFLNEJkdjNvMmFvd2tiMHJRRXJ0WStD?= =?utf-8?B?RFEwOWpyRHpTZVlhdjE0cjNTSDhLVUVZWUFRcjAvN1kwTjhlYnB5Q1lFb3pR?= =?utf-8?B?eG5VNmdYcEpJVHVHdHlySzN0T04yRjMvbU15TjdnTWtCNGh6OStET0tQMHRM?= =?utf-8?B?cjM1c0YrYmNTKzhNbFRZNXNIL0pHdDM2S1ZzN1lJaUM5am1WR1pPYWJpc2Rz?= =?utf-8?B?M0hLOEpENUx3cHVabytTZ2JqQkE5dlNVb1FZeVkrZURKYzF6Wk4zVWFCSXJj?= =?utf-8?B?cFJPbzErSmRYbWpCUjBuWWRuMGFoSnVoY1dBSSt5THpFdnkrT2pRYzU2T2lh?= =?utf-8?B?R05iN3pxd29yYjhzZ1F2ZDNYOHV6WjE1dnhuMEttMUszWlBveUdUZHNHSzRK?= =?utf-8?B?emhQRitZOVp0VDVKdW9NdkpKSzY3Z2ZUa3BuMnd0VkVHZzMwTTBwYzJrYUVG?= =?utf-8?B?QVBUWFlvTUpicVBpUHFMVlphZk94Mm5tTTFTUFZHNEJpaGUyT0VvS2swTjAy?= =?utf-8?B?dEFzRHJUQ2lkWU1FdTBuTGE5T0R1YW1nSm9xR00ycXlQRkJJVFh0citKUnY2?= =?utf-8?B?SFhmV2JtQmhOTkVHOHBCN2lZdE5xWE5maHBjOVdFdHlGZ1JjT1JqdmFuNHZE?= =?utf-8?B?cTgxaG1DcDZia3ZXSlFTTFNNeG1iNmNGb0pSM3RRQVY3N1VtTWlDL2NtblZh?= =?utf-8?B?eTVvcFZscW5MT1JlWHZwQlhkY01ZaHJseG5DSXpCVUZ0NzdOYStDaS9qb2NK?= =?utf-8?B?SENQUkxTZUFLNmZrQ3ZUdXR0cVFhUHZlQWRUcHM3cTVKVnptZzdJZGQ1KzQw?= =?utf-8?B?TzJKN2ZWNyt5Tm9zZ0krTzZtVS9uNEVQMUdpczNITTVla2w2R3ZoMTVRRFVo?= =?utf-8?B?RHc2Sk9nY2VoOUdNcHR6TENKK3Z6a0I0cEw3UVNsS0kzUnFzUmFseTBVZWtF?= =?utf-8?B?bWg4MzBKT0dha0Y0cDdSb0hUT0ljRU9TZ1N3dnEzNHZlSjdSTll2QWMzc3ll?= =?utf-8?B?UGs1d3dab29yVmIxNUJjVEpLMXhwbW53WTRWVGp5cUtlMUVVRnBZSXZONFU3?= =?utf-8?B?Um9NUGZRSHNsUVlwMXpEbjUwcnhQejZIbnFyN3VIZlkySWJlYks2Y1BRQ004?= =?utf-8?B?b3M2YUJScnpHdTduVUhKZEI4cUhQWlIxN3N1alMwR3VoSnFIR3oxMmQvbzlW?= =?utf-8?B?SlpsQVhJYXI0WmdzTWFPZGtLUGlyN3ZGUklDdWpJVENnN1F4RnV1T3o0TGpH?= =?utf-8?B?NHlscFU5cUlqb2hjWWZGY1lLcUlWRjgwdW1xYVY2dU5Ndmt1NG1BcGRPRVBG?= =?utf-8?B?WXlNWERiZVRhQmsxcUlZUG1FRWpxTlEvYkZZRDlrMlU1UnVWQUVqVG9UdTl4?= =?utf-8?B?aGV0UjZBdjBFMEJLZURVTnFBOFIwQ3RwS3NGRzZYaVlUTGl2a0FsZ09jMDFK?= =?utf-8?B?WFpvWGx2QlJwVzRBazQwMGptRlNSbVZud2FXMUJiMDM4S2R2Vkh1SDliamVG?= =?utf-8?B?T1FqSWpXVVhxU1BWcElmY2s5NmpmTmNuQ1ZoQUV1anpBWEZlNVhqeGQrV0RO?= =?utf-8?B?WWMxaVBVZVN2eTNEcWtrcFBGaUFaUHhtVGVLNHRUNXZLVW9aK1RISlQxaWZF?= =?utf-8?Q?EBTMqH?= 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?cm9OY0xrVUZUNndEWXM3MGsvbWcweGU0U3FwQ1VVSkVqT1BXS2lQTi9NRkkw?= =?utf-8?B?TWJmbW1CR0NUNmdDc1BxamVsVUUvbUQrQWtLRXdGcUtKcXhTQWJYL2pIWE8r?= =?utf-8?B?VFFBNURhblRheWdMWnU3QndCKzhENkJKTXV2YUFyWVQ2cUdNOHNTMEM1TlJU?= =?utf-8?B?M1BlSFhBT0JYbzNBaEN1VzZxdFZDeER6QjQxcHRjRWluRjRqSmZsMHlTUHZy?= =?utf-8?B?VVErNVRVcHA0bWZmVWhUTk5YZnViVTZIY3ZNWEdnSFZKaEVkd0NnbGt4Mko5?= =?utf-8?B?NjFvamlMZHlqUWNhK1ROOXovRzFUcG44UkpmdzliZkxOKzBLM2JZMEhyOHYw?= =?utf-8?B?YjltOFR6SWhSNnhOWUVDb0UxVCtGNWNqZGlyeFkxN041bmQ0NTdUczRja2FT?= =?utf-8?B?cjFSSzFYWW5qNVp2UTdqaE5nRkFWTlpaRGFVVkh6c1Erbis0MytrVHZMck83?= =?utf-8?B?REp0WFJ2VGdpdUFiNlNseGpDWnMyS3NaeTRKNm9JNGhGbGlVNXJ2RjJJemg0?= =?utf-8?B?OXVWdjVEN21Td2UxNzVHdXVCTE1FUkpjZ2tZbnJpbDdPR3Vzdjc4bjA2MFBD?= =?utf-8?B?VmVzR2x3TUtiOTIwSDFXYUg3UUIrZkhBaC9vdmpKNUppQjQxWVhmb3Zhc1kw?= =?utf-8?B?aWlYSkYvTW5JTjVwYWRWeWhtUGRjWGRHU05IQkVmdERKTm5nKzkxWmJ5WVh5?= =?utf-8?B?dDNpdUNSSWFRc2F4N1F3ZTdwa29tU1BXVC9FUk9wMHd6WmRIREdLZ291Smtj?= =?utf-8?B?MTlWc2RXVHNBZk90RWF5Yml0RGFXdWtjM01rWmMrODVoeEp4SER6OTZwTTBY?= =?utf-8?B?ZjN1b3pXR2lyNjdZa0d1RnFVdmRHbmRwL3EyMlNycnJqMjRJNnB3U1NhclVo?= =?utf-8?B?czBkSFZuRUt0UmJuVTJ0S2FmenJCcjhCRXQyU0NjZHNqSmFHVEYwM1RYV1o2?= =?utf-8?B?dWtZWGhWSzhCRkx5WGdYTWgwKzhRSnZMa0twUEluWTlwL1JJVTdxV1FuN3J2?= =?utf-8?B?enFCTm53WC9xVG9pd1pxL0FZVGRnZTRTNnJZS1JvZ1lCK1BYbDR1aTJudE0z?= =?utf-8?B?aE5FQVJZdHBBc0l5SkJaaXpmNm5DOFhLa2NZRDFoZ0pmTnkzd3FYMkhtNjI2?= =?utf-8?B?QWxlUFlZd3ZBM2VKN1lqem0wREZTdFlMYS9ERmRpK0hZUGFacXNVYS9NWElN?= =?utf-8?B?L3JGZTAvZ3ArWmhML2t5VjZDdDlzNXZUWC9NQVBZazdsRk9zakI0STQ1S0hT?= =?utf-8?B?R3JNM1U1a1cxMjFHUUFVS01FYUlGQ3dMSFZuOEtNMjNGUi9UbmhnaW9YZWxY?= =?utf-8?B?OFJaUHk3bldBejF6NEpKeHJiOVl5WmZ0ZDNPekQxUW5xY21nZkVudENNZ3Ru?= =?utf-8?B?b3BPaGw1eDBEREVZTXlEVlowdkxxTmorTk1laldMZDhCQlJmVXVoVlcvQzdC?= =?utf-8?B?TGJneUVWUGpXbGVmV3VnTGlxbUFZelhuNmlUVUZPK0h4aVpwOUlHdWFTbWVs?= =?utf-8?B?b2dscVRJbzRJNE8wdStIV3g5NXF5dm5wUkM3TEJaaEZkaHFYNExHTVowd1FR?= =?utf-8?B?bGFoT1V2MHdWQTl2Z0F5Y2hkTkZRQUZOT0dQcFhydis3Uzk4SmRHUjRldS9B?= =?utf-8?B?ejRtYlpTUkRwWlE4bVJFQ2E1VWJBRFQ3cGwxYkUranJlZDFKbG9SWkZOTHpK?= =?utf-8?B?S09xMk1abEQreHRoQy9tT3hHQ1JBRlF1UTZIR2Qvd0ZVVjM5RFRRRllBQ0hL?= =?utf-8?B?RXMvS2J5dnZNdVprQWI2T0dqOGFvcDYrZmswRnJSL0lsbHRWSTFZQTN2S0dI?= =?utf-8?B?NVgwemVoM0hYMFVTdDluWTVmOGZ1WXZRYzFxNzJML1FMQ0tHbHh3UlZZY2hs?= =?utf-8?B?Ulk4NzFmS2lJTVM0S2xzbUw1TytxMkl5TFh6TjV0dTRHRURoZWxXQVVPOEdC?= =?utf-8?B?cWJpV3VxcVg3YUVSQnhYRExEQk9LdUVteDBuTVcyZWRyUmdzMlRNNEtBcndV?= =?utf-8?B?dVBSNnFpUlkzSW1yWmJoREhIRjhiZDZnUU1lZlA1RDZ5SlcyVmRqNmhVcDdH?= =?utf-8?B?djNlVWlDYWdwRGpKendSU1dRRW1WNUIvV1NrVmpJRm14L0VHa2Y2T0VMS2VK?= =?utf-8?Q?4hNLpu1YUAO4OB3jW6aFW1fqI?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: db318f60-95ab-4e29-f5e4-08de3999605f X-MS-Exchange-CrossTenant-AuthSource: DS0PR11MB8205.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Dec 2025 16:13:24.4673 (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: tFCLXtD2K2AwknYh6WhnZY1Hk52s6C1XQVJ+t/Z8kf2Do8PIWoyLXF3d2iNFgJA0aK8rYTXyqfSfEh5tCn3kBQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM3PPF7468F7991 X-Proofpoint-ORIG-GUID: qPTgd9BH3p4p6pMSLR4X2tu9JxAfNPvz X-Authority-Analysis: v=2.4 cv=brxBxUai c=1 sm=1 tr=0 ts=693c3f26 cx=c_pps a=Us7513DS1gT4knu3Fiol7g==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=wP3pNCr1ah4A:10 a=M51BFTxLslgA:10 a=i1IsUcr2s-wA:10 a=VkNPw1HP01LnGYTKEx00:22 a=2AEO0YjSAAAA:8 a=bWPpxp-jgQ3ylSns5SMA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjEyMDEyOCBTYWx0ZWRfXwNXBN+OMJsX4 F3CjxQ0PLBUX++tP9+wiuYblNgW/sxRb0NEa2mfyTRH0bGKebQ3Pz7Vb2iSqBPeWBtlx0RgvzdQ L55wrwYtmq3/ZXDfSzRuJ8NE0qKH4irwPo1L3Ch2OK1XIbmVMAWyRMdQCkkVU5yjVuJh0Dfbjr0 bvZLWI7Lg3v+QLkCFyFSiaH7oDQXFamv1WYD38Qk9HkMS4L5YiGIW1kcxUx7d316jExSnoQhLV9 I97W5tdWzZaagO+9T3b3bK0E95vCQNqgTEaajtdyEzimHFzD0NPrqWpTni30e6ujdwwFBW8jooL YGX3c7OKWYslxJ1nRsaawLogSzk1/8fVDJA+PlTLj14Ml++zSIaA8o2SompiAm0937L+XmoHcxn tZTN4rc3CJK9wZVA8tewM4ZGX6nY/w== X-Proofpoint-GUID: qPTgd9BH3p4p6pMSLR4X2tu9JxAfNPvz X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-12_04,2025-12-11_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 lowpriorityscore=0 priorityscore=1501 malwarescore=0 adultscore=0 phishscore=0 spamscore=0 bulkscore=0 clxscore=1015 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512120128 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 --- drivers/greybus/cpc/cpc.h | 3 +++ drivers/greybus/cpc/cport.c | 29 +++++++++++++++++++++++++++++ drivers/greybus/cpc/host.c | 13 ++++++++++++- drivers/greybus/cpc/host.h | 2 +- 4 files changed, 45 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..0fc4ff0c5bb 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,27 @@ 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) +{ + return get_unaligned_le16(gb_hdr->pad); +} + /** * cpc_cport_transmit() - Transmit skb over cport. * @cport: cport. @@ -39,6 +63,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.49.0 From nobody Mon Dec 15 00:34:36 2025 Received: from mx0b-0024c301.pphosted.com (mx0b-0024c301.pphosted.com [148.163.153.153]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 676A32FD672 for ; Fri, 12 Dec 2025 16:47:38 +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=1765558060; cv=fail; b=tj5oma69F/rNcL0QYoV3+x14qJeCrwAb3MppwTlFwdJ0PgMc1vKRBsg9FKfKcp8FsW1/orgreTnfHPjISl16Vny7MSklvacN/h46QjTq3Pukn9KgGliPHhTVIux9gzjrfjUesYyeJMCqkzJFnIM6KJZi8IQMdFHBcPlOJhcBTQM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765558060; c=relaxed/simple; bh=9dv8ihxPMaKQU4ZS5vQzIB03Jqm+l8RXLRHOROfqCuo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=ZujplzKzg6N6nG/4WVM5jiQrBKR4ua31SfVDuGXUyp9f2mAjkCsIcwWfC6ZEbkZrwUBt1rbC1DU0b1TcS8MUGbClyJLPPImXGrb/0OSeD8sPQMk+7yQ1b6MwVKzgFo0IOfSOe5cu06vRLARQGZ2yNwP54uoyZ6iu5pZGqQNaX9w= 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=XT9jxD28; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=J3MDt/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="XT9jxD28"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="J3MDt/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 5BC2uEi92563949; Fri, 12 Dec 2025 10:13:27 -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=O20lJMFaHSFD+y67wMF6FBvgVaPOFijc7kbOs72PUYY=; b=XT9jxD28kf30 5zd9Zk9LCTbDDyIcWfi/ukYMC57RV3pht2CbHoWq/tdDQK5M4I1cNWeH/MwVcQsh zfRQtBxinziCgrX86E8mYQ6XfDO2LW3xq/7THxHJOmrQpG/XxtE3Cwk/MtMNHBET 2dCfqrZ2aoPuIiXCHiYzxLU5T8Y2dUbr8tDU0g/EclkKMjrDpxlOzWRhEGnhmSkP C/4r6ctY2nw4Bhf5vWW7ePtxi90iheM5nU86M/8cwPsoVtwSLMN6n34wRZSq0Ws4 08FWdQmtA8JihOCveGyBFxyxbCOYV7r7daGI9RvH1iIF3jCFzitVEer9ltRsEaBp yAdOXKmiaw== Received: from sj2pr03cu001.outbound.protection.outlook.com (mail-westusazon11022100.outbound.protection.outlook.com [52.101.43.100]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4aykqe47hk-2 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Fri, 12 Dec 2025 10:13:27 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=F7/Nzr4yo+ZTQXZAd+nKpQiY/R1Q3tj7jELbCogCcS2RHxoB4kgG/RJC5gh+4xUFABZCY6LNPfeS5bsXGZGapXqS1OZIly0xLcDTMIA1aIVfaSD9G5I3DhkTUB6RlV+4GrrvQZw937+rP3eNFYfxz1+LJKCp44Q66E6JAX+El/JTRBh8e8ynBOVJ7c+gB9aeTLH8WL75zBR1FjLypSzPEB3WtaeHZywQK0hh/1khdFVkTxaXUnV4L/HGlZ+abKYTZVEtnJhfflP4yCyD5Eq64H9gkO0ti07zS1tOHtPT7dItPku/rRSzeI+EoNCsHLaYwk15vtX31YP10f5Z81jzkg== 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=O20lJMFaHSFD+y67wMF6FBvgVaPOFijc7kbOs72PUYY=; b=xpT4pfFsEx7H3XCumhhSN45rsxFVcU3agfbmGYP5kaltW9cT+V7jYfZtTAw6da1muau9D2FV95bMa4m6GxfVVl2czaC7Fi2nnpK6eLGt/8P35KNeVTryzCxxD6aCyLJQlKA+oSXUhOEeizzm1u5d07nEUzNd9LDR2tZZ25VuMx4tewuP9/yURM+3a+7aT5SviUx9uCq1zdBYedxFILGGoh+QyZp6jv587odj/XErpH9B3QreSljCcJXbjhniw5Lxd2joSXqVAwLsZ5+edLs9sRoxQuiHyD/mXHjulxXXm6WGnDAU2rvqdEMZCe1WMFGBn5x5amMl5GYe3poBPGVHXQ== 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=O20lJMFaHSFD+y67wMF6FBvgVaPOFijc7kbOs72PUYY=; b=J3MDt/z/OD0/B/uMKB/LCnTW8QsHfNJTwdJIz0cRnVkVkwWCj1x2AzgwToEPb+j9MykWa0alC677mpc8UdvUMSeTvakICzZb1jcw2bBfjTo+R2R4KfoYCFKewX98QFWhKZnoas29o4+Y01V2qGCoVgGBCXY5Th7WcBmAWKHxFfc= Received: from DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) by DM3PPF7468F7991.namprd11.prod.outlook.com (2603:10b6:f:fc00::f2d) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9412.9; Fri, 12 Dec 2025 16:13:25 +0000 Received: from DS0PR11MB8205.namprd11.prod.outlook.com ([fe80::2de6:bc88:2af7:3583]) by DS0PR11MB8205.namprd11.prod.outlook.com ([fe80::2de6:bc88:2af7:3583%3]) with mapi id 15.20.9412.005; Fri, 12 Dec 2025 16:13:25 +0000 From: =?UTF-8?q?Damien=20Ri=C3=A9gel?= To: greybus-dev@lists.linaro.org Cc: linux-kernel@vger.kernel.org, Johan Hovold , Alex Elder , Greg Kroah-Hartman , Silicon Labs Kernel Team , =?UTF-8?q?Damien=20Ri=C3=A9gel?= Subject: [PATCH 05/14] greybus: cpc: switch RX path to socket buffers Date: Fri, 12 Dec 2025 11:12:59 -0500 Message-ID: <20251212161308.25678-6-damien.riegel@silabs.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20251212161308.25678-1-damien.riegel@silabs.com> References: <20251212161308.25678-1-damien.riegel@silabs.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: YQZPR01CA0176.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:8b::25) To DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS0PR11MB8205:EE_|DM3PPF7468F7991:EE_ X-MS-Office365-Filtering-Correlation-Id: 5f84a1a0-4907-46ae-7d0a-08de399960d0 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?VFg3cFUxcHBqV3pwdzVyNWsxUlh4VVE4MjY2cUtCTGs1VXlwWTR3eDh4aWdK?= =?utf-8?B?TUFTR29GYVpod1B4UGFlYmZOei9zdE5IQmZpYTdBaEVMZVV4b0ZnaFhTczhv?= =?utf-8?B?bkx2Vm13UjJiRm5pYzc2MjV3V0ZDSEIwUHZKUGJib1VyV0FXcHoxT1pZZ1pO?= =?utf-8?B?Rm05YUtNOXlXWnVPTjZ6WmhMNWV6WE45ditYVGZXSllHSzRiUVljVXlrY0hi?= =?utf-8?B?UHR4TkZheVJlTjFaanVVVEFWWEpFUGpyakJhamFjZ096V1RsQ1ZqTjliaWdQ?= =?utf-8?B?OW54a1h6OTRDUGZaOEJVSndzMUMvVUpCUjQ5WHJFTlVvMzNlT0RvcUJzbFZ4?= =?utf-8?B?OU80b2pOLzB6MWt2SE9neUc1R3dGQlFMNE9hM1cxMUtIcTVwUVBxZ3oweGZs?= =?utf-8?B?ek5WeksyMHZxVWs5MXhzUkVKcUg1NEh2Ty8xMlJRWFVyY2Q2aEFiV3ZLRjJq?= =?utf-8?B?OUN0d2Z0bDRIcUtQMlJhYUw1VzEwUGZJUERjaFFRVGFLVWUyemk4YnM0Y0N1?= =?utf-8?B?RGZRSVhCNEpmbGdZVy83VW9QSkNGVkJZQnJHU0ZHOWRUalcrMnluN3p6aVNa?= =?utf-8?B?c3RHSHBmZDNvREdwMVZUcUVvK0NYaFpDYmU3SWRhQ2ozYXlTdzI0ZitJVWk5?= =?utf-8?B?eDdWK0w0UXJJYzI1SDlTUTBIdFEwRk10anVpRnNsZjBrUHFBTG53THdra0Rp?= =?utf-8?B?MXBJTVJaWS90Q0pOaVBwUWpReWkybE1MSVdwQU1uMm5HcXhqZG1GVnV0UjVX?= =?utf-8?B?ZHpBdXV0dk1DZG9KUnFpVEpBRitYNWluZUpPcTJ0K3NKK2JtcHptZ25sbm4z?= =?utf-8?B?TEx3OXlMd25SaURHNEl0UXQ4bnhkVE9Kald2bFlsMjFkN3VtUWVOb01yV0ZM?= =?utf-8?B?dmdGM1luMWJObmxLeWxmVUROS3hLZ1RsSmM5ZjJFcy8vZTVvdms4Mkt3aDhp?= =?utf-8?B?Z2FObjZKYmZ1WmFBTUlRdFNxRW5JQ2JmSXc5bVRFVHh2M0hNcG9La2h3am1x?= =?utf-8?B?ODhzUHB1cmZpWDlNVGZldU56endhSVVaTlY1ZWFlN0xkN0h0UDZCV1FxdUxM?= =?utf-8?B?NmI3c0xqdy9PU0hnMXdMRmVJNmxsTXR2cjRtalVZbURUcS9QRmNqL2x0R0hs?= =?utf-8?B?ZkxaVHR4VUc5T0VQdTJZZDdqZUd6NWNSMnlGbU1jRWwyanFoQ0J6d3Z0bW54?= =?utf-8?B?MlIveEJZNnEwOGJNRTJHdTV0UWlJUzl3L2VwL2pwQXVJOFZDOTJ5dVlqUDc1?= =?utf-8?B?ZllnekhISmdwQjBFa28wYkdEeTMxbVc1UlZvaTJub29aeWlOeWNMWERjUFVr?= =?utf-8?B?WmlFTUV4aDB4QjEvTlo3WEFHeGVqR09hL1ppRlpQK0NpMVhUSkFpSUpMUjg5?= =?utf-8?B?L29yS0JRNFQ0bmR2ZElKU2RuQzNpYlpwTytqdHlSeC9RSUlGSHpNSHlyYUN5?= =?utf-8?B?RlBiZkJNT1NhTzhZaXpwQWlvaWFjWUVpSVFUVnRoTkUvSjRTOXF6dC8xdWJD?= =?utf-8?B?b3JianFYSnpqOHE1MzdnckRrdW5jMU9LZ2MxdWc0RWp6ZTIxTklsamVSbUZG?= =?utf-8?B?SkFKZXdCQU01Ym5yQ2pqeU9sWi9LdXNUcHpwMm5vVHlJeTZyOGhIVFRxVGVV?= =?utf-8?B?cUcvS0FldzJwVTlVN21VZ0d5TGwyZDFOOGp5V09zcmo1SFlnd092TGRVcTVG?= =?utf-8?B?MEw3cmpFSVNiNWtkSG9EeThJWlFPRjlvNmZZWlNvR09mYzZvY3dDdzNoZmJz?= =?utf-8?B?WjFEWVNSR2xPclN6alNCVXV6NGJTS3RHYXV3WnhESkY2NERSZWl0MHFuTVZo?= =?utf-8?B?bm9IYU9ZN1psakxBckI0ZjhiR0pmSHlISGNWdEdWZnZiNDd4TlNxNnpUL3JZ?= =?utf-8?B?MDlEVHo2cHprUEFvek5MSUM0R1BXOGh2eVR0Mnl4bjdPdlZvOXRYampNcGN1?= =?utf-8?B?SWllY2t4bTU0amhsRTVMcmlzdnFoR2k4ZjUyRWU3V0xyOTNsbittSmFweUVH?= =?utf-8?B?V013UmdWd2xDc0d4Wm5TOGVkaHpSQkZaSk5jc3FaOEZ0a3pyWGtUb3hYd0p2?= =?utf-8?Q?X4bJOX?= 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?TGE4eVBFZk5oMG9pb3d5QW9LV3R0UlZ0dlZrZnFDYWRseUdhajNNejBKckJz?= =?utf-8?B?SytGbnJCekNJTWYzWWRaaWx6cjhXRGpTemY0OTVMNDdlSGo3anpXWnVVUG8z?= =?utf-8?B?N0MrZG9WNndvdVBPVlprcXM1MmY2Nm9ubUZucDZPMmorQ2pxbEZTRkhOQjg2?= =?utf-8?B?emtPUGtwUU9PYUNpSk9sQlhma3JXL2FjMWtwRTNNOXlzOG9CRkhBamQ5QkZO?= =?utf-8?B?eis5cnh1SnZVYVdwWTVZRFVybHBtcElSZENzSHMrQnUxTU9WUWZBRWxKekZr?= =?utf-8?B?YlFxdUtaczNzWlJSWEpLcUtJR1BkZWxwUlJTWk9iN3lMakk2bXpBQkw3ZUJP?= =?utf-8?B?RjZ1M3lQOUtjRG1Ock1EVlUzUGlxN0FwNnFDYmpEN2l5VGVzN0k5S2RLU0Jo?= =?utf-8?B?UWNoRW9wMVU5azRvZThDQUJkNllja2ZQNjVaNEx2dk9oakc1OHlWanUwZ2xn?= =?utf-8?B?S3RkT0pqOStlRHhEUnZvY0RZSlF3VTkwMFNra3pTMTZjNWxja3Y2V2J2d0Qx?= =?utf-8?B?OStSNktMVy9paUlMQXFRTGMvRmk5dWF1TjhnQ1VFSWdXbm5ibU9IMW1raWxT?= =?utf-8?B?YTRQZE52bU1TY1NDQ3RmcUxUMUJsRnFFV2RySVVaa3JYdElLVjN5cWtLZHNm?= =?utf-8?B?QTViWVR2RERTb3Q4NVovMjdESUVtNVBKa25NcXZKVlUwTXROK3NZTnkrekpq?= =?utf-8?B?eThLbm9SdktKcG9hVFhjL3ByM1doaTk4enZjM1U2TXgvZmxpZU9tQ2IyQWZo?= =?utf-8?B?Y2JpQWVFR2dHdTI5QU5WVjZ0ZGdHbUNKN0FTRWRzZW5rT1k0V3ZrS0ZOeGVl?= =?utf-8?B?LzNiUkg4YnZtc1RyR3MyOXRHbEhzRHdDb1ZoaHQ1YWV4VitaeDZ2bGhhYy9C?= =?utf-8?B?TUZYMTlxOUdya0RvQUZuRFl0QS94c0dqUXN5b0MwSVRxMGZTRVdrZksyV01U?= =?utf-8?B?WXBDMG9ibmZwRENkNmhCRngwYVlJZ2pPYTFUQi9SWWR2UEZtbzBxZklQZW51?= =?utf-8?B?N2VTMTZmTkM0dnQ1dWpqblVBdUxaRHFIY0tKQkkyRnJsUEcwQjV2SzhKQ0pl?= =?utf-8?B?aXBTS0tRL2prZm1SMTgyUlZVZHY4bFBqR2FBVXRDZzNVQmxxYlJFTW1iTUpv?= =?utf-8?B?aTJkWDJzTy96cTNFMFJGRG9NTno4U1YwUkp5aUNDTFZTVlN5L0dnTWxXMnFv?= =?utf-8?B?anRFYmc3YXRnbEV2K2szWnZjb2pWY04wdHZtMFlueW1GUVoyL1hUWmQ1MGZo?= =?utf-8?B?d09la0ZuQzlKOGNIMHIwQnU1SnJMekNYOENUSHlaVjE2dklCQ250RzlkOVcw?= =?utf-8?B?dzJXTUdYKzhOaFMrdEhtdjNsZXBUbVVLTFM0QW1PaVNDc3VGTTI2N282WGNi?= =?utf-8?B?LzE2eER5S0R5LzF6ZVpMME9HK2lpTFBza21sM2RSN1M5dG1xRlN3OWZVUVV5?= =?utf-8?B?eVBhOWhXUDM3Z3pjUlRDNGVFcjRGR3FsVmR2SllweWwreHdHVEMwUnZZWVRt?= =?utf-8?B?YWRJV0dpZTJiT25pN3VYOHdTbGttMEpBSXVRSWlaakxmclFXUnNRdkhGUmtO?= =?utf-8?B?Ylc0S0RpYzFlSVBvYk9GNnE1OEZJSy9JdmVkMTJJQSsra2N0Nk94ZjM2MVFa?= =?utf-8?B?RDM5MHhXRXFsUE9MR1BuNzVWVGhPRk9Pd3RUdVU5a3NoZURmT2R3RndHSHIz?= =?utf-8?B?RWxCQjFVaHR1NGdPdTNYejJ6d3R0TEtCcHBoNkJkT2dUbUtDUnF2ZVhrWWQ4?= =?utf-8?B?bEVpZTJOZ3hHZTdIRlRFV1pSRitGdlNHQXZPK2ZNbURaMko1MlMyRVlFNnp4?= =?utf-8?B?cENjMDVqRnJpREtRYk5WK24yZWNmUzJ0Y0pFR0IyOTFJWm02V1hVUjBxZFha?= =?utf-8?B?cGdnUnRxMVRaclplbW15UXM4V0lpQ0UvQjdUQjdCSFpyZTlpNGhYQ0JLMVcx?= =?utf-8?B?ZTVqd1JmRm4vMGNDUmZaeFJkc2VjTzYyd3FDQjdCUVlpZzAxVW1weW8yc0Iy?= =?utf-8?B?OVcrc2NYcWZnWGZzUHBlZ0lkS1BRc3FVQVZMZlY1RHhEOFpTQmJ4MldzVGNm?= =?utf-8?B?c01vZDdtL1Q4MFJSTjlRYm82R0d3dnpNVnJSMWtsQVhTZ2hvcDJnMUNDelhH?= =?utf-8?Q?IU8M2Y3m12LoPXg5UaPijAqlR?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5f84a1a0-4907-46ae-7d0a-08de399960d0 X-MS-Exchange-CrossTenant-AuthSource: DS0PR11MB8205.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Dec 2025 16:13:25.2188 (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: Yb75dqP8n06uDToSwIBz/hi6s0P7ANiSfFfLXdZSBJ+WjtIpHw2lryGAxDiounFBNHzFDBhyu3ZFjdPX5hHSXQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM3PPF7468F7991 X-Proofpoint-ORIG-GUID: Wwu1M0cVBgf5s96t9XMmRti3tJqMXA4Y X-Authority-Analysis: v=2.4 cv=brxBxUai c=1 sm=1 tr=0 ts=693c3f27 cx=c_pps a=Us7513DS1gT4knu3Fiol7g==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=wP3pNCr1ah4A:10 a=M51BFTxLslgA:10 a=i1IsUcr2s-wA:10 a=VkNPw1HP01LnGYTKEx00:22 a=2AEO0YjSAAAA:8 a=9SkM2ZN-1AJx8s29AtcA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjEyMDEyOCBTYWx0ZWRfX3Hg/eWrv9Uiq pP8JLtef1M/vtPWrfzbmSl5Qyzvkb4wE2/+qgbhYZAHw5rfd4M83UxYAthIleWTI6G415eoTXQL LoR/gfWvNV+UBIpkKKxneDTmm292BrsLkGx3uQNtPD3WaCP6Fi9+tP29Z1UAWBt7VqzAEkJ6Pxr 7S3L+smt73bhmkM8hEnOnppITSlfrgv4U0mBe4LTuPv7Dp0Rh55kTB+m0tTuKLEAu1SPndQRAIJ AhmDu/0clFgVQ3yBWsxEiIQQd+T0I/FMn3oaCcFQpBcO5wBOQ+W2Xh1UKjobge9Yh7Crx6ExB0b LTsHVEedgvsFWa+eQO9cCcvmWiOZaj/hYMaCyel4RGDjzVWdRBSbGq/3NtA/NVynpM8N94sTPG1 Rdvn0gfnEV+HL/OHRbg0BDGi+xa6vg== X-Proofpoint-GUID: Wwu1M0cVBgf5s96t9XMmRti3tJqMXA4Y X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-12_04,2025-12-11_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 lowpriorityscore=0 priorityscore=1501 malwarescore=0 adultscore=0 phishscore=0 spamscore=0 bulkscore=0 clxscore=1015 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512120128 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 --- 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.49.0 From nobody Mon Dec 15 00:34:36 2025 Received: from mx0b-0024c301.pphosted.com (mx0b-0024c301.pphosted.com [148.163.153.153]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 74E302C326B for ; Fri, 12 Dec 2025 16:41:37 +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=1765557699; cv=fail; b=uHV9MkP61H06I2vlHjfC7kUavCRZdV2FGboSM11Ups4Wts+Ia1lxPmFSh7c63+WbvX4LtBEp8QzeitgnXVuq5TXkFNcOuf6y3dJvxpud1J7QC8/wIjF2lT9/bFdaeKhwPNKhcekGm5J9gCqWTzMZ7F+dOxcIXIYy9w1Oc/9fc48= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765557699; c=relaxed/simple; bh=RJEwO0DFXBhWAM0hMGq5ksG1S9j3Pr2ihJi18lT5ROw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Xw15Rc/cLwcyvAecVVaqju1r4eaO1K58CrPBXeClzGo9M0OCiL61IYBjFJ2aUjc3iyRS4C+5rbMF6xc+7LZWJznJFRoUOZyoNb1O1rW+5kVdIEqNykTedNcxTv2fImWJgOVY5f0ub/4Qmwgt2eEqqxgyJzyvQtfTy/9F2ltXSlc= 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=hosKgRT6; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=cuglqqfp; 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="hosKgRT6"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="cuglqqfp" 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 5BC2uEiA2563949; Fri, 12 Dec 2025 10:13:28 -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=2jn+5nmGVt6E6Ikdv2r4sjZR/pj+LV2ZAZRqtX6PhRY=; b=hosKgRT6ifqQ 7Cjqf/3emaVRsltr9X1NuO/2adC4/BmkXrTZMvsRXbz+wbYQatfnNLvbWNxOMs+U tFE96CHLsI0TeJQ7u9oaTG55H9TfPMj3BByk+qYB53kLP5ntlc3RufSw8PW05qKV kuudyUSyBzd1RRLlyadaWRS8ljnfdzMhNlpJYF/T7PDSUAMKENa11vSTRzcJwE6F ZCir5Eu/PrqsKCFPDOKX/qt1Qz/+r98C8P3Kw9QbmN5r3sk3o3uwsKz2TM55vyfX eEWW4u6N5W1Qgvzqp3etC4LtZyhvQ5L8Zx0bEendQGMj4Dcx0O0x8hyHnedVBRYO zhMem2tziQ== Received: from sj2pr03cu001.outbound.protection.outlook.com (mail-westusazon11022100.outbound.protection.outlook.com [52.101.43.100]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4aykqe47hk-3 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Fri, 12 Dec 2025 10:13:27 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=GsREp/tRJgxma4CAiryv4KIa17QwZt5wDJwGpkQhQj33hsoT/DglqD89q9BWvsmfrxl3cIN6k3gQJbRt9ly6U41PgJHh65V+Iu0DZJ1+NBq/d7clR5rf0BdGlUs7Fe7VtT8NnF6W58aSF8VUA74sjOotPL3KcT194f93FkSK5UjMN0skwCRH3lnRTupkwXNrsqAxJTDbSb5RojCMGsZ7M2ggwH8Vs1xieS2TYUrcW/UVnXV96T3aILPfGn8x1WbxxaxdaKPkuPaYOAZoEuU9moIAKV17Qqt1bA+GWCpe5CJ4pK0az/dF6FYxnMO4DovAoVV5LT2ajdH4wyjRp5DYmQ== 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=2jn+5nmGVt6E6Ikdv2r4sjZR/pj+LV2ZAZRqtX6PhRY=; b=BEMkyqa0kExNjssZOu2q5YSWqpLqS0kU/dtCxMD/2ZM0UL7ZSo6sRm3MdSktIEdZ49vyTWxP8IvS8gJjyzn6Q1u7pZYqWYRLua3uJbAQHIgjumeVoASlHweY1DLea5C7KJ0Z3CqpRyYnmUhRfBA5YPUJKY4HP2i5QhX/bDCJhnh9zQOOYsNfuHrOoFEkwEEV/i18V5wnMJ3tsxUiDpujiMcBYxDQPZa2VHZsYDuSUgrIEbFydpZEaBGUZO1uz7m9tJYkhZEPsMDZO/bOAWrjTUIrPt4aOnjubamnnp7c/HyV9Io5FAHKk1xCJPnhkf0fU0bzs7pxbHKHTu7elo0aag== 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=2jn+5nmGVt6E6Ikdv2r4sjZR/pj+LV2ZAZRqtX6PhRY=; b=cuglqqfpQJ5ytC2bQeagG/IgxKzumuOPi/K4m2QxmYoWiE4zIlTpF3lQRhfwJDabhYwNf6iYB8h79d5KdQbSj86ERIhAzA3zWfG2pfY5EHBs6evE9L84MFVH/xThIvEFD5gVN05J0GQgFwj1jgrSip4yr9BjpmN1SFo9ZQPN83I= Received: from DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) by DM3PPF7468F7991.namprd11.prod.outlook.com (2603:10b6:f:fc00::f2d) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9412.9; Fri, 12 Dec 2025 16:13:26 +0000 Received: from DS0PR11MB8205.namprd11.prod.outlook.com ([fe80::2de6:bc88:2af7:3583]) by DS0PR11MB8205.namprd11.prod.outlook.com ([fe80::2de6:bc88:2af7:3583%3]) with mapi id 15.20.9412.005; Fri, 12 Dec 2025 16:13:26 +0000 From: =?UTF-8?q?Damien=20Ri=C3=A9gel?= To: greybus-dev@lists.linaro.org Cc: linux-kernel@vger.kernel.org, Johan Hovold , Alex Elder , Greg Kroah-Hartman , Silicon Labs Kernel Team , =?UTF-8?q?Damien=20Ri=C3=A9gel?= Subject: [PATCH 06/14] greybus: cpc: introduce CPC header structure Date: Fri, 12 Dec 2025 11:13:00 -0500 Message-ID: <20251212161308.25678-7-damien.riegel@silabs.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20251212161308.25678-1-damien.riegel@silabs.com> References: <20251212161308.25678-1-damien.riegel@silabs.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: YQZPR01CA0176.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:8b::25) To DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS0PR11MB8205:EE_|DM3PPF7468F7991:EE_ X-MS-Office365-Filtering-Correlation-Id: 2cab03d9-1726-4f62-39e1-08de39996150 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?WDdvKzRwUUFMelZsUVh3TVNmZVdibU5mdXIxNldHbnpFSzRmVXJodnpxSG1F?= =?utf-8?B?aGw4blIxK3FZTWYvZkNraWFvd3JjNHhyQktLdkRpdzlJR2tJaCs1cHRMRHU4?= =?utf-8?B?ajJUN1pJTkM5MDZkb2RDWlZ4WUdWeGhJUTdyQk0raUVVdGhhcW4xVDBWWmZM?= =?utf-8?B?amQ2UXpzZHJISjdtN3lsVjJycXZtQXdjUm5XWlhRYjFVeWN4UlpyTlhqWDdU?= =?utf-8?B?aXpxQlk2RjhqZzhnTXZiampmQWhrUStRMGFmQnBTVnYrU2JxTVhBelBPL2dC?= =?utf-8?B?RmwyWDlYOEdqNjE5blVnRGQ2cTNCOVJmWThHcmFjTkRjWXZ1aHZHNFAwWnhV?= =?utf-8?B?VXFheDM2R1pGclJJZnM5dmZ5bHgvMVNWbGdiYk9Pb2lpeTJsVU4rRUR2NHBH?= =?utf-8?B?MEdmYnlBdmxwc2gxazlBZnJLV2RQM204b2pXS3BIbFlPUnpVcmZ2YWtpTGFZ?= =?utf-8?B?cjhjNFJocGUydGhPZzZUbjJWaEV4MmwyVjQvTDRtWnhTOVB3UitXOVIrcVNp?= =?utf-8?B?dVVZdllaSkpOdjFEZUhFYnV3OHV4Ykl2M0hudEVZV3RBSWJxRlE3RzZHWjNV?= =?utf-8?B?WUdFWmlIK3RWQ3lWa0pzZnF6c2tqVGFQbzBPZUNiak5JMHlHQkphSERGOVlO?= =?utf-8?B?REoyTWVmTSswdFhKR3JxUElrSXhhRTRoc0dldWdmS2x1SDUwOXRsbUE3dHFK?= =?utf-8?B?YVM0emZFVkNTSHkyWFdVYkMrbUZFY1BEcTRzcGdDRmFaVlkwclhqUXR4SG54?= =?utf-8?B?bHJmUjFNbzFxS0FFQVNHeEx3N3dqTEVQNVk3WGVMQWo1YThHVWhSazZ4OVNT?= =?utf-8?B?bjJjSVJCc29zN29MRUY5MDdLS1pFUFVLazkwMzYvQWVnRXB5eXN4dkF6M3hP?= =?utf-8?B?NFlycFBLWWh5KzBOR0MwVE5hUzY1bXdEMDEwcnNDZVdCbkJ0ckpDeFVoTVhV?= =?utf-8?B?WUhRK0NFMFJ0OHNnZzFNNitMUDBMNzVZRWpBbk5HSUt3UUh3dXFEQ3dsY1Fx?= =?utf-8?B?K2pKNHRJeUVkZ1k0QjAwM3pxdHJSVFEzMTlhU3FwQXhldFZRV093WkpuczlC?= =?utf-8?B?R3hPRkZYazNmWUc0R3p5SSs4Zm9BL2FBU3hodHNkWHNhc09BZjZEVmlKZEpx?= =?utf-8?B?Wm8xbFhFa1hIaDdEc05HeEwvckh1SUttK012eDgzSktrY09PUnl3cWhVVVRi?= =?utf-8?B?ajBoNWQ0aXFneXFkUXJCdVVsN2M4NDV4U1RxTHk5MnYxM2VwNDYyWFIzRTN5?= =?utf-8?B?eHRkeDlwaytnL21QR2dldjBpekJXSkNwZzJNK2V6YlJ1Qmc3aGE2L3dRTysr?= =?utf-8?B?SUVRcnhjYUs3bmhYQTEzRUtoUDBxeE1mYVZJNnE0OXZ6aEtIS2dGcmdGazhl?= =?utf-8?B?L3hHdVk2UDh6MHo3Y1d5ekd0V0dDQy9NVjNsNEduT2c5U2VOYnVDZTFpV3BM?= =?utf-8?B?UDhDZ1hUYUwvMUNUb3JUZXpwVDUra3BBdlk5MUxLSWI5R1JhMHk4cjdRcDh5?= =?utf-8?B?djJKMkZuRXpmKzZDUnl4cFRGczhWWmJ3MHFzWlRnVkVPbGxxQ2pMQnV4VmdX?= =?utf-8?B?bmVoSENuOWwvTEY5ZlF6dkNMVG0yV3FSVEVhSit5cU5DNXpWa05HZ0Yyczcz?= =?utf-8?B?MUoyd3gwOEExL3ppRGZRQWNSUldKNXBDYUwwYzJjcUlkaVkwdWV5Yy8zamN3?= =?utf-8?B?NXV6TFVFeitYZlRNalIvYzZuTmNxbW1hdWNqMkRPVHpNOEZTTEZuVVJiSHZ1?= =?utf-8?B?UWtvYUdTdTRxK1prY2NaZDNwUktpNDBVSzJJL2drZmJDbllrSkJybW1KRTNE?= =?utf-8?B?eHBaMzRpTVp0ek14dDRDblF0d1lGNGYyeHFnZ2lKNitjWUNRbEFsYmtDR1Nw?= =?utf-8?B?R2dYdWp3SU5aOTZ4cDUzVWZJWHdnZUFrV0VlRGYyYlk0Y1pJM3RHTEV2cVFV?= =?utf-8?B?dVl3MWVidWU4eHU1UGxINzJKMDlxQTM5RFgrSlM2OG43TVMyeDBCemtQeUlq?= =?utf-8?B?alRaMEpoVlpScXlRYjQyR05ZRmhLRi94UUxvWDdvaHo4QTl3aTc5MkJXTDY5?= =?utf-8?Q?oNgGnv?= 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?SVVPc21COGduNnFUSEc2ckNYSTFLbmZXenVUNXBVNHJvWjNmODZrYjJMc2Np?= =?utf-8?B?dW5rU3hrSlAvNml4VGZzZHdEcXFlT3k3UmlyVXpDMzg3b2ZuWFlaaDhqOEh0?= =?utf-8?B?eDdCbDk1cmUrSDI0U1Y5WWdFTTFXM3R4ZkZmTmhoRGpTYkNOcHZFSzJvc0NG?= =?utf-8?B?dDBrRUlhMDVCV2YzMVJadVdrQk9GSDVpSVNRazNEMEVkQ3pZcjRlei9mWTl4?= =?utf-8?B?QWFDVnVndXAxdUh1Z1B0bFJPb0V2aFpjdHI0NjFnREl5Tm0zeTE0UHZDbFlU?= =?utf-8?B?L1F3WEh1ek9iTkI1QU94Z2t2VEg5VWRjdDhoOUlkZnQvZU5pMWI4WjA4TmtW?= =?utf-8?B?aTNkdXV5RGVLdzBEZVJaLy9NVm5IV0hYU1VYWEMyT05LVERqZEFhVnJHZnYx?= =?utf-8?B?Yzg0THE3ZTdka01hb25aL2JESEtOckNieTNBd1BLVDdvZDhZNWpydUdpUWNm?= =?utf-8?B?UjIzNVE3d0JrRFF6QTBZaDVQVVpNcW5qMVRKeXk1UUduT0tKdEdxaW1IVko4?= =?utf-8?B?bEdHUU5tUVU4eHhpYXA4K0Q0UzArbzBmQUd6dzNOR2FQVFVNK0wyaVFZem95?= =?utf-8?B?M2s3WjhDNTh0TVhkS0tpa20vV3JiWTRJbGZtcTRabE8xaFVQMWtEVnlSWFlm?= =?utf-8?B?eXpjNERpNWtXU1d2Z3RCQ2tUbjMwTG81RXFXdHlJd2pNMGRIdlRhUHlYeUUv?= =?utf-8?B?cCtCSWNqaFdZK1V1ZXh1ZmtrOGgvVGljTXZzUkRXMzV6S3YwZlJDNGNGVnky?= =?utf-8?B?WDQ1ZXpjNHl6QktPNHhLYXkvWWVFZjR0RHQzZWRMT2VldTlxRWZablhrWDRt?= =?utf-8?B?RkNHdzdMZDRad0VrQjJQbm5Cc3pNcjQxL0VTa3V4Lzk3bVZmVXZsZWg1R0hY?= =?utf-8?B?OFpVZjVlUE9GQUQ3WEIzRnh1ZHB1d1VwRWdhelRjbUcyVGRjZ0RxR2tkS2Qx?= =?utf-8?B?bnlzWWQ5VDA2OUFPWUlmemlEN0NyUUR5Q0VmQ3dkVUJhdk5wUkRRL0dxc1B4?= =?utf-8?B?bmk0OTlrYXVEemNVZEJVMXhMejZNUExLUDg0a2ZFYXIxeGFTTTVaRWNyNEtq?= =?utf-8?B?NE5YTzBLTEFtdjM3VDAySW9NckozT2FGbUM2QmdIZWtCSTBiOTROLzRPRTk5?= =?utf-8?B?dHdSbWpuSG1FcEhpdDlJZGdjMmxhaUw3TlMvVHZaWVpyQnFVelN5Q0Viak4w?= =?utf-8?B?blF0WkVZL3Fzbys1WHM4RnhhMHZTU01sNUNTMTNRNERDTEtzenVwMmZmalhi?= =?utf-8?B?TEpUd1VKZkFlV2tUOWVnajZZTW9UYXJLVnEwMFpmWDBSOXRtdEpGMGQ5all6?= =?utf-8?B?KzljMXo3Z1pNMDdIVTgwdEtFeGF1ZWtQTGdwQU8wL0NJR3hRWDlEb3RCVURH?= =?utf-8?B?ZnZQMTVLNlZ5OE1yTU14RzIzZmdLMHhOUmVQcUtJL2xsWGtEdnBORlQyUkZW?= =?utf-8?B?NnlvU0RTMkNDKzNnTTBhbjNVVnNldld1dSsxUm52YTdXRk1KbjZXNEd2bWdX?= =?utf-8?B?YkIwOEdtcmw5aXpwZzFhTHZvc1JwcnpQOGoyRGphYmxvZWcyRWlWVHk2YnNs?= =?utf-8?B?bmlsSlVqSXVOQjVwMUVlSE9XZnpRNVArOWYxc0NtcG9FTnhQSkQ1ZEYxSjYr?= =?utf-8?B?ZmhkZU9kdStCS3dVS1BhczhLNjVyeENXTnpXQ0x5REpFbDZ0RVhHRFBxUE9v?= =?utf-8?B?R043MlBieGw2bG5RVnlZR1VhcE5BK1Z2ZVljSGxRTjZiazhPSFBEbG95MGJD?= =?utf-8?B?TVQ0dU40Yll3TkxZNCtMRTJNQlZTR1lwVktSZjc2U1ptYVlKL3NzSGI0OXBC?= =?utf-8?B?Qlg5Z2VBd0tRMWgvbHEzNlZBbE93RGJOTWxTbjNudTlLQm5zbWhJcG9qUC9x?= =?utf-8?B?RWZtcWg2dklnTzFid21GZHF4U0JZdS9aVzdsYXZRZ01FY2JDeHFuVnM1clNm?= =?utf-8?B?OG1DOGZ4dWl0bzR4dEh6aTZSSTFlOHhHaGM0UUtnR0dubTFmNjM2ZDFYVUh6?= =?utf-8?B?cFBTdFFuTFFzUGVLTHFXVWliWTUxTnZrL2dPcDc5WUVoN3BoUytCN3hHbUFP?= =?utf-8?B?RXlyRmJtY05wU1VLZ2dDNGYrdDBnT0loMlpzK0d0UnBqMm1keEJZZHZKbjUv?= =?utf-8?Q?dHnx5B68fVS+Do7CDFVrexQM1?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2cab03d9-1726-4f62-39e1-08de39996150 X-MS-Exchange-CrossTenant-AuthSource: DS0PR11MB8205.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Dec 2025 16:13:26.0099 (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: 6whJ+3HFxujk8A7gEmW45pXZ5SJz9i2lCVziFD+DEG7opAZbMXF3M9XWFaVqT+y4sBuAnqsXdc7TMeIgaiBBSQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM3PPF7468F7991 X-Proofpoint-ORIG-GUID: 4zoWbW1sIQxPO-Fxs9Ai81aEO94ZgXbQ X-Authority-Analysis: v=2.4 cv=brxBxUai c=1 sm=1 tr=0 ts=693c3f27 cx=c_pps a=Us7513DS1gT4knu3Fiol7g==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=wP3pNCr1ah4A:10 a=M51BFTxLslgA:10 a=i1IsUcr2s-wA:10 a=VkNPw1HP01LnGYTKEx00:22 a=2AEO0YjSAAAA:8 a=YpAaIpsKrikDV0a6NQsA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjEyMDEyOCBTYWx0ZWRfX20tFIjQ2zn2v OvENg+t6umLrzzn4ZKyyH9shUGhx1S2hcGC1y+pEGLeJREBgVAamAiuQBpPminPuKADqcRzsdRA JmvyBGM6CsaEEnObZ+ZIbMnGVl0ml/xRKIyWg7jABgZKfQ6qUuQPFOqFyaIsYFYRam3ATzv6hmM kihhKV/8OjjxXstny5rso/kc7kS3TzWIMlzJFPt82zUSbTaWKxGBAzlltSG6SGwcDJtq9td1OHw /0aQ/8JM3sohz9dWctG46PQ9apzEMJXPOQ4hClS60+055lY/R/MJ8v4BgCSbDEj20F0f11LWHTU fqz+o4DXZscCh+xe5vlSQ1WPvYxWg+qOAh1FJlC0if3bbT2T2rsLVP1IqkODyGQNRWvIHdwSi6o n0paV6o7eJiH4upU8JXUPt0/0rx63g== X-Proofpoint-GUID: 4zoWbW1sIQxPO-Fxs9Ai81aEO94ZgXbQ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-12_04,2025-12-11_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 lowpriorityscore=0 priorityscore=1501 malwarescore=0 adultscore=0 phishscore=0 spamscore=0 bulkscore=0 clxscore=1015 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512120128 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 --- 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..afccc941726 --- /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 hight-bit (0x80) of the control byte indicates if the frame targets= CPC or Greybus. If the + * bit is set, the frame should be interpreted as CPC control frames. 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.49.0 From nobody Mon Dec 15 00:34:36 2025 Received: from mx0b-0024c301.pphosted.com (mx0b-0024c301.pphosted.com [148.163.153.153]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C919B2DC784 for ; Fri, 12 Dec 2025 16:55:46 +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=1765558549; cv=fail; b=O5xgfcNfNI3jM8N+l4Ntb/pzyLwEsZwaHe6A8FqLFpzIE99xU8DzdYRb2/WBgpa0SUWTKrm7r+G0Pzinq9WJUJATbXaWB+HBOi7ZWYTwgnUPuYdQ3Ul4G/rOIOe5uZ+8jgsjqrRv9eIHq7CcqjvuYdYiz0zWefAYYmHTtrBBa9M= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765558549; c=relaxed/simple; bh=z3pCylW+DFFip6+99+B4JqZmPpOEN8RP6idtjfy2p8k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=UBaKmI3GurOx4d+3HiXCqqS3QvSaxfM4bR15cKBdWwolipPmumzgGV9fE5fgMKY0yem9lSfZNzTMFZO5rTXp9aJTcWUu+mdb2xVz16DSDLtr5RtRuUq+iwNa7ffF6aR8JpayIFMqFUdS9K07PrA75GMW1M+5lIyF/Fv3zT6S9Ok= 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=fk6OKU7F; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=dvi7sxWQ; 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="fk6OKU7F"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="dvi7sxWQ" 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 5BC2uEiB2563949; Fri, 12 Dec 2025 10:13:28 -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=XCWpRqnSfKi71u+IlW5PChjFVPdCV9pnlfQe4i7zT3Y=; b=fk6OKU7FCGTi z28+0FV4O3CX8VImeKpaQveo1/W5mXue/lg7l/4PPZczO+qbTCIJMStl+gANd6uJ vDgxxs5kDyuYsnBjVoi900Dk5NtEG76oW4cAwP393eHIFbnGZASioSlAwFL6kWuB gMe171+pZnZ4ai5LYs+TPE39N4ODQRvYw/atin7FOpqY3zpbmUgu5htP7jU7+DuY eRwZ7tg9F6r+Om6zOz1yiyL6CWIsjbwQF0ak0oqC6SVZlKt3bKHyyX3D80kyiB19 cZtrIVyXoy0jdfa8YJniR+YDH3+CcQtgllwCrHMxYXB9eLhNlP4WZDlAWy/tNfxP l+Dg4+NB+Q== Received: from sj2pr03cu001.outbound.protection.outlook.com (mail-westusazon11022100.outbound.protection.outlook.com [52.101.43.100]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4aykqe47hk-4 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Fri, 12 Dec 2025 10:13:28 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=wfXpaR2tb1G5m4Ht8OlZMrZkKUzC0SbcJc+UwT4kjvfjelgLcrp6zSX3RQsoyOwbJbY+6niDjxO6paP1UlJBiHNm9Ftu7CtpA6jdqF1RO6aD2GXzYx50a42TjSfnvRYCNriht5sZ2mNg5lePwaGQP18sqcLvNylwbGBHBPxl9O6IL2pJBM0pi2Z4DsUabt/t342+e/16q49xDBN6ZzyCfT77oz71fIAj/bLyhyw3hRhyssvAKiiP9bGTLk0ol7v0iw6kTys0qz0luVm50DApiH5SlOmzkFxxFthu/M7rUHCb5wHbNN/4jpRtFBK56nEloYPgs3i/yMr1ssqTpwzUrw== 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=XCWpRqnSfKi71u+IlW5PChjFVPdCV9pnlfQe4i7zT3Y=; b=kKHCxuCUx+EYoAWrigPAP2g6cwVal/rlDo5q39uYF2gVHo40ZvrtYSmyG8R0gUWInnn1THVf6+0cjKVondVgU2em7z6O3h58aWdvt5tDOM683Mexd3GH+GAZOU5oeRBWBI8GkFM5ePhubmEbwOPcecWiYJMHhGi3zqQzzZMwuSO3YfNp1pX86rE9dj7AUD3xVouWycnFKryuU4p8s9x4Hc46bHKEPnByvh9mjRB3YONPdjzp0ndwybGhcO/FX7yp4UwXddj/Ybu7IztIdD6I/v/a0hoH7oKp8bCG42rm1ay2rTIHs6F1ii4a+saDVOx+FtVaNlUBAfu7q9TW82RiHA== 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=XCWpRqnSfKi71u+IlW5PChjFVPdCV9pnlfQe4i7zT3Y=; b=dvi7sxWQ9kDACA7b3bi22jdFg1auVcLVAx4N9R+x5lvgpbPaflaPXUQNJS/AVbfXZPNe6bSNMATy7qGw3Hg0pm/pkS+dqsJPydukurkyqug9byHBMyk1KqEc/kG3ssX904B1fFL8SD/TT7SJSmSH4aaNe/VH9Gv1LWQKixbNCPo= Received: from DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) by DM3PPF7468F7991.namprd11.prod.outlook.com (2603:10b6:f:fc00::f2d) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9412.9; Fri, 12 Dec 2025 16:13:27 +0000 Received: from DS0PR11MB8205.namprd11.prod.outlook.com ([fe80::2de6:bc88:2af7:3583]) by DS0PR11MB8205.namprd11.prod.outlook.com ([fe80::2de6:bc88:2af7:3583%3]) with mapi id 15.20.9412.005; Fri, 12 Dec 2025 16:13:27 +0000 From: =?UTF-8?q?Damien=20Ri=C3=A9gel?= To: greybus-dev@lists.linaro.org Cc: linux-kernel@vger.kernel.org, Johan Hovold , Alex Elder , Greg Kroah-Hartman , Silicon Labs Kernel Team , =?UTF-8?q?Damien=20Ri=C3=A9gel?= Subject: [PATCH 07/14] greybus: cpc: account for CPC header size in RX and TX path Date: Fri, 12 Dec 2025 11:13:01 -0500 Message-ID: <20251212161308.25678-8-damien.riegel@silabs.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20251212161308.25678-1-damien.riegel@silabs.com> References: <20251212161308.25678-1-damien.riegel@silabs.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: YQZPR01CA0176.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:8b::25) To DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS0PR11MB8205:EE_|DM3PPF7468F7991:EE_ X-MS-Office365-Filtering-Correlation-Id: f2951601-2ef0-4fbf-6262-08de399961da 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?U2I3ZDdHUWFaaGlFbHFaMjQwVFVhU01idUluVUpyTU10cnUvaDFTZlBJZVBy?= =?utf-8?B?NHBBQWFZWmFBMkxXTG5lQm15aXNQa0IwR05FM3MrTERqcFBjTUpPYVFWUThr?= =?utf-8?B?ZmxiR0tCWVNYY01yT0FDMGoyaDZiZEVjODlXc3dCUzIvczRZVnJLT3VjS2Jh?= =?utf-8?B?SWVXMlR6ZGlxaG5kZFNRR2hJRTBjS3BFbzFGOWZSay83dmIxcWZpdjF0eVNT?= =?utf-8?B?VVluUlBVZUYvSTdqWGUzTDdDRVlvVTRVMU15SnVzS1RjVHVUYnFvWFJSQjdM?= =?utf-8?B?YlNxT3pwZXN4a09BTDQrOTVpK2N1UC9FNk5taG8vVnJSYjFkTnB4L28zZ3hu?= =?utf-8?B?NHgwSmRZN0JSVGh6cUdKVCtObWRST0RDSlBhY29UbWVnaE1TUE5VTXlDYmZF?= =?utf-8?B?NnNkR2Vnd0pXajJ5cSt3RXg1M2I5ZGZmVzZrckUzU3pkUkJ3ZEJRVkY2TzV4?= =?utf-8?B?ajMxMEU2NTFQeVc4bUhGNVJMTjhoekdUS2xoZGZBTGI2Wjl0YU9RNytrZm1L?= =?utf-8?B?SjcwdWtlRlh3V0dGaUJXZ2kvdVhweTFsRzd5Qm5xWmxVWmFSVHlOYWlIdEpn?= =?utf-8?B?ZzRTaHErWmlQM0hBbHJQanpDR1ZzSVpkNHAvWjNpczBhSVFuS0tXbkdNTnhO?= =?utf-8?B?NTdsRWJCV3ZCaWEyUEpCTHU0WXppenZqYkZOb0hNaHV0R243aitvTUVoOHZE?= =?utf-8?B?MUdPZ0cyVnRZN0czaWx2eTFTTWZSVVAraGFhNmdVdnBZRTc1YWZNcTN0MUt6?= =?utf-8?B?Y1V5Q0Z3dlhBaVdaaFM2RkpaSlBlQkdpeHIwS1Z2OUc5WnlWNEhvOTBtSCt3?= =?utf-8?B?NUltV0JSdVlGSjJISTh3NldBbDREZWZZYTltbVB1UnFCSzVYWmd2eFNYbm03?= =?utf-8?B?WG1pWko3VjBIdlQ4V3Fnc3BwVTBBZitsN3JKRVJHL3dEajcvNHppWnFXSzY5?= =?utf-8?B?bDNlbHdPTW84dTlwRjZubElsS0c4MDN5WVVXTi90R3FXNVhVanNmaFNuTFVs?= =?utf-8?B?YTE2cVF0eWYyekpsa1VLazdGb3dyYjFLTTBLRmtQTlRqOFJSNlRiSS9BdFR0?= =?utf-8?B?bEN1OE9lVm90cXlXTkZGU0hRbmg4MWtYcjhnM0hmb3U3WjJuT1JLYXNWa3JR?= =?utf-8?B?amxrc0ovRDFlZkhOY3BRZ29VeVBjR29uMG1KK3NwbGJVOVZCampUR056RGwv?= =?utf-8?B?RlNlREJIT3lLVHcwR1A1Q1BRenVrV2xrY0NaSmRnc3l2S205TmN5SnRscGtO?= =?utf-8?B?aVVKVTlYaGJFQVZmemF1U0U2WHExSWp0bkNCK0JYampPS1A5RXFLQ0ptSmZy?= =?utf-8?B?MEExSmhmWndMTFh0QXFzeHlaSmhCNWh4aHpUdXdVMnhKVDJjN3hmT3E0Wjky?= =?utf-8?B?Z3luR0l3alcxcjRLRXUyc055Y2Z2VHE3L1BHRE91RVJGdHZCc1JKNFZwOTBS?= =?utf-8?B?ZzE4Zm45UlpqZ1VmQlh5OS9aSzJDZ2R6MG9ocnFYUjh6QTFEOGE2Qlc1dzdF?= =?utf-8?B?a05odjZDRDdVMHBGL2VaU1VMZkwyVGc0V2ozYTRkOWJaeUVqZTd5TlArc2hj?= =?utf-8?B?d3NSMWxxWDVhVmI0eW1SVnphSk1aSXhaYXM5N3E4UDc4TU5aajY0REhaQklP?= =?utf-8?B?QnZRaTFuWm81RzltS3ZkUU9sakpId3dDRGJxbmwya1ArWmt3aVNnb25aN3Fo?= =?utf-8?B?VDFIRkhFUk5JNWVpV1p6RG9jSHZ1QThCY0N6RnUrcVRZWm56YXhEVjhvQ2NR?= =?utf-8?B?cE8rVzZJbnFxV1duZGhrZlA5QzFzd1cwclJvOVRmVmowRkppbFlZOFhJMU0z?= =?utf-8?B?TExvM3RiQTRWNFFvdHVEZHIyNzlURER6SE90YWZLYnZzTk1JL082SVY5OTlY?= =?utf-8?B?VFBhaHdyTUw4WWdRQzdYQVBJRHRLck1UMytZYVBqUWRKM2h0ZXpLRGp4TE83?= =?utf-8?B?cHFtc2Q3NmltcXJFclJTellRN3ovb0JRUHZsd3N3bXMyM2RzRDRQOFdPTmF3?= =?utf-8?B?d2k0OEpISkhIb0N4TEZjU2tlSmVuNG04bTgvWTB2eG9zN3VFbTZIQkh1TVl2?= =?utf-8?Q?mao1bu?= 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?R2N5WFBodFNpb1E0dnR0bGQ2REwxc3hZVS94QzRtR2h4RHhLL3IyY0FzU1dN?= =?utf-8?B?YWxtZTNXWDN3RUxCSlhlZ3lBallsVStDcVBiOGx4UnJTQnJSbUxvd0swMUpW?= =?utf-8?B?N0JSblJCNXBiUTZORHUrYnh5L25yTm94K0plNVNEVWtEblB4dllReGZTa2Mw?= =?utf-8?B?aGNyWU1FZ2Z0azJzbTRVODExZVJkL016aisvYjBCaExjUWpsbVlmR0IvUkwz?= =?utf-8?B?b0pFd0ZkQUR4djJNQUJ4bEZPeG1CNlF1VTd6NUgwS1cvQmN1cTNhc2xROTVw?= =?utf-8?B?QStUR21aN040a2FsMnhlTVJBMVBwY3dUSXZrdldEemo0YWwxWUUzMDVYY3BL?= =?utf-8?B?ZEVIbzB4RmFGS25Bb3NJeWU5dWJocTRsdFRBajlST2xUeVdHN0FXd2VyVE0x?= =?utf-8?B?R1hDZFpyUXVoYktJOVRIM0pjZHFkK2VZRlJDa0dnWTBaa0VEQXBvaVBQQVFZ?= =?utf-8?B?Mm1DK3lpMG5FSGY2UTJ2MkEzY015SnFHcVZoMXJtbnB1aTRhVGgrZUtRTGRJ?= =?utf-8?B?eVlpWTlhZUdzRG9keG1iTWsrS0NSYjlod3VmQXJrK085QjFKaUN1bnBkTTE5?= =?utf-8?B?YzRScFpHMlVtckZaWHhoa3FMYU1sWjBjOGZnR2tyWnhpVkVtODVYS2xhUS9p?= =?utf-8?B?c21qYysrMXJhcktZMXA0RXZTYUk4SnQrSW91T1hvM29YUDdFK3psNmZLNElV?= =?utf-8?B?WkVDNUUrT1ArUDc5dXlOaFNOMG5LaUp4UUtHQXVRSGVacmlXSzVaWjN2c2hq?= =?utf-8?B?VFV5MHErVVB1UldxWGZuWXJkajcvM0tkY3BNNVR0UjdNekZlVEw1Uk41Y0Fl?= =?utf-8?B?WWNiQVJmc0NyMVJZcWhLYTVJK0x1SkFrOS9VSjlxRERMeVlHek9KVStLUVJN?= =?utf-8?B?SzBiaERMRWNqdkJ5eVhTcHRhRGVQa1RtSVZuRE0rMjBYQ0FWVUlWN1gzRnVn?= =?utf-8?B?ZlBGWFozQUZoZzlSWjNtOWJNb0VScmN0cStCTUdDZ2MvNXZNTmcyU29SN1kx?= =?utf-8?B?aVpWNGhHaUFwMmZPbm5GbjdtZ2h6Zzdwb0hsRHZyMlNZazNLNmV1MlBzYnJn?= =?utf-8?B?OVBlcjF2ZFdOYkNwdlZJSGNNbU1hckIzcEhhNlp0SXBycEpvZ1JtM2RJWHdP?= =?utf-8?B?RjlYa3pkc0VsYjdTRVpieXZ1TC9lS1EyZ3RZT2JKdXdXYVJZR3hMdTZTeTRw?= =?utf-8?B?MC9yTk9KdzlaVXc4RmtjKzVNbjEwMHVQclZLTC9JOXBBY3J5SW9odnlnZitT?= =?utf-8?B?Zmc4V3hPZXBkMjF6Nm1YbWoyVHJEMG9MT056SFBpQ05oenpjbDR5cndRNmFV?= =?utf-8?B?R05LVHNNWGdFSmdlSzBqTDQvYmNDRXdwRVhYb2h4YlFjOUFxZ29HTERLZ0Ey?= =?utf-8?B?aUpyUW4rNmlUOHFJcEFPVE1VS3Z0cGhzQ3RQVTdpdU8yVnRZM3VCR2tmSjYv?= =?utf-8?B?OG9qYkpLVUY4Vml1TDhtcjVoNW5rYW1wWk81bXc0SEowQXptQmJaRVFLN3Zs?= =?utf-8?B?ZWhubEc0NUtDS1NxUW5UdHB0Q3BkR2EzT1p1R2R5WFV2ZHlMMlowYnQ0TEFW?= =?utf-8?B?M3poeW9xZTB1SDdQVWFIdUh3UmtQSjJaMW4xV3I3K3l3UlRKTHUxSG1IRnMv?= =?utf-8?B?Nk1jYmxyZUtsdUZ1bXZnNzFzdWQ0dGVLd0x0ZzRUcUtuLzRNWG1UdEExc1ZE?= =?utf-8?B?MG9Ecjl6S2tYeTJQZW90QlVWbGJqR2taVnhlSGRhZnh6K2tGQ3Rod1l3LzdF?= =?utf-8?B?RXFSSlMza1RkZzBLM05IemJrdDNHTE5pMkxRUXBTZ1BRK0JlZ3BuRTYzZVFv?= =?utf-8?B?T1Y1QjBIeVNZeEpzemp3dzhIY1RmcFg3QTdJdm1LY0NnSlBPK2ZTWnJ3dXhX?= =?utf-8?B?NlZWU0tWNVYvMkRwcnpDMDA1QzdIMkJuamdhZm9ncHZDWDBobVpCTGFRc25T?= =?utf-8?B?KytKS1YvZWluRGoxUzRtVi9WV080Z3pQZk9ZbU53R1pGQ1BOWHpDOWdIRXlF?= =?utf-8?B?VzRLOTNhMi9UTzg5cU9ad0IxRjA3TGVhajJGRmNiWUgzRlIwUDlubXlsYTZs?= =?utf-8?B?WWtLZ3FpK0JnS2pyUXZ6S3lncGN6NFU3Q2dRb01HTWNHeDdISEFybk9pclp6?= =?utf-8?Q?Xm0JyIwRyZTvt7ZEgtRAneWFu?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: f2951601-2ef0-4fbf-6262-08de399961da X-MS-Exchange-CrossTenant-AuthSource: DS0PR11MB8205.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Dec 2025 16:13:26.9122 (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: Qa63zTQqeiA2v2TRw/KTIukg7P2ZyjU8xzY7Njoj+1Us47MjN3QV5nzGWdoqehiPpKIV38J5RkRvDzk+NqUmdw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM3PPF7468F7991 X-Proofpoint-ORIG-GUID: 3gj-YUz3wkwzDBAmOhsfjqhoiKu7YjD4 X-Authority-Analysis: v=2.4 cv=brxBxUai c=1 sm=1 tr=0 ts=693c3f28 cx=c_pps a=Us7513DS1gT4knu3Fiol7g==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=wP3pNCr1ah4A:10 a=M51BFTxLslgA:10 a=i1IsUcr2s-wA:10 a=VkNPw1HP01LnGYTKEx00:22 a=2AEO0YjSAAAA:8 a=d28r9nv9ZyHOM8R9p0gA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjEyMDEyOCBTYWx0ZWRfX58U5I2UgjP6i f34drx9N0aUD3408WccEMs1E4PfWjA/OQyD8UTaad3tQqYpOB4nt0go+vUqfO5eY35YXQnI/OLx Z5b/2ZGMOqQnqbn1tZYtWziT+rCU4j8CO8bMLgSQC+j8WVp1jMmFTbuK/PJa8LRiuCItbhx1qtn t6e62mO9PP166fQBtKXuPHoNg3+Gml9O6bQSCcCOKRlBl+LbYUsfShlk8TzsYZb4lkVCqS9+mSO kBXJf3AFS34v5h4AV43Ajdzht1ktD/bgBDVPATgLnei/0gvetaPZ8/9fvblNBV4jUfqJHIRZhX7 MzSz0DYA6/Sn+T3wP6Ce42CobZIEc1e+klJwXt78X8i8+EHf1yN/shmcY0BenMIFWMtg5FkESgn vH6phMCDyGo/5nHFZP5OOQXuzoXG4w== X-Proofpoint-GUID: 3gj-YUz3wkwzDBAmOhsfjqhoiKu7YjD4 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-12_04,2025-12-11_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 lowpriorityscore=0 priorityscore=1501 malwarescore=0 adultscore=0 phishscore=0 spamscore=0 bulkscore=0 clxscore=1015 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512120128 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 --- 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.49.0 From nobody Mon Dec 15 00:34:36 2025 Received: from mx0b-0024c301.pphosted.com (mx0b-0024c301.pphosted.com [148.163.153.153]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 29195296BDA for ; Fri, 12 Dec 2025 16:41:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=148.163.153.153 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765557697; cv=fail; b=OU8j4kqAew3DWS+v5+l4/izNm56DNd5d7YBh6ionov60x3TgeMKtR36bvA86fGgHXOxTH0njkReJwr7ldEUVPilXy6eJdGSID/84cAg94iNvAPBV+DbeafrcCgtBf076cGgBMRq2/bd0LPeqp00cJW4B16H9RygBvBd4hYjx/r8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765557697; c=relaxed/simple; bh=8bWS82MuFp58exMp9Fx5whIvE6U6qnOgdigNFm+ybCs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=FZoLLSJK+O9664yh2IzD7wrfC2+Wp76SgR2WM70AKe31R8J6+uzv2YRQbLzbej8j571IKxAmUwuNPO5l3TafOvJlmnaI5051y/N/FcUu1oXHl0Hb32N82g7ubzLGdNEuH3snjdUtFDM+qM6yI0ZaDMV0Q9Q4rcU6PTmNBLrRh4Y= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=silabs.com; spf=pass smtp.mailfrom=silabs.com; dkim=pass (2048-bit key) header.d=silabs.com header.i=@silabs.com header.b=IhYqpa5T; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=bSaQD+2e; arc=fail smtp.client-ip=148.163.153.153 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=silabs.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=silabs.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=silabs.com header.i=@silabs.com header.b="IhYqpa5T"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="bSaQD+2e" Received: from pps.filterd (m0101742.ppops.net [127.0.0.1]) by mx0a-0024c301.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5BCFG5gJ2052805; Fri, 12 Dec 2025 10:13:30 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=silabs.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pps12202023; bh=LTtRpSTkZ0Z7ZtAuT9bBmc0kmx0K4Lz2Ox5KjlCE39Q=; b=IhYqpa5TKmlu sPHtVGmP8+OEZdWb33XvDLgjEd2APugtV0qA4Ea34ghPfQZsmG9cnakVOd0e9bV/ 9LMeq0w8OPqfHJ0RafztRWUWoVkd0/GlnsDrm/O7mcwTbGZDoNlNnfxSI8Yd9QCZ 2XaQESkebW1QYFLiLz0ij4RfCWCXCg0+uqBpnJmwtxeH26puwKXaJ0D95/MUAq5Q D1s02osW+kNTrWrytTABkWPj3DYOnT3dbX3icePqSvILm/8HVGq1+YJtmPJmgJY8 lZwxa3FCPSE7Cj5v2xk4fsIcda/fb43jQB0yP+3a7QYylB4h1tJsMmrJZACjnbtI STTaZZ4THg== Received: from sj2pr03cu001.outbound.protection.outlook.com (mail-westusazon11022103.outbound.protection.outlook.com [52.101.43.103]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4aykqe47hr-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Fri, 12 Dec 2025 10:13:30 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=aBoqEG/UnsC1o4knMtqulTetqziLUFuSrGJ2aovBT78gGOvhIl8fIlwE/U5zR7QDBEi4rdGwLH0Jwk9E1xakQTNMbo1OVLZ555wAYhZ3kc8RFLJRrgbhBFTnXvWBxoVGX/vMCVBvX0OT4a2weGG+gTZghV1VbLM77r+uUm68Vdo/7fdhtxSpiDGWAcFAwuQNFgpMRsl/UCWayazoSxbE5IUZUyX7TmqDlr2ziwH1ov3B42O7m47wuKWBxNq+tl/z7mYv8/CMHydVnDSByL3OKVO8Da8ru39shvbSRyM4+lWBSAHPddnWkHUZj/wx+t9H8ZITtSdRoQl469DNnFSEMQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=LTtRpSTkZ0Z7ZtAuT9bBmc0kmx0K4Lz2Ox5KjlCE39Q=; b=ARVgWKAKCjRhMYeJUqLc6+M10vCZM+5euyWc9Fno+orTl/LIugCZrSdiCVhswPhUoyzgPJG86hqJ7bUXgEJbyKg/ETDdTQuWbX4Qg6CWg4O8j1BSSDrVuZqa4CtILdGPfEmvh6XlXujeaG4y6h53y5ABE9RT7SoN9zA8SPI4jpLq+AQbDNjqGGhZX8cPKiKSjS9/iMOx5TnbVxdAjxtswpl+Ju72jEkhUMpo4XhCytkIfOlhBZA269dXre0Fr3+vzHht7rOaBlGyDeyBZhp3/eMAIcwercTDNzdv4Y4wFUruSmxzkdub4wDxn1s68D6jn9qGyGJkxpqcqsYhYITB3w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=silabs.com; dmarc=pass action=none header.from=silabs.com; dkim=pass header.d=silabs.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=silabs.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=LTtRpSTkZ0Z7ZtAuT9bBmc0kmx0K4Lz2Ox5KjlCE39Q=; b=bSaQD+2e2p+WL9sqsNXQUlonpphQlrLKr+HXlxWSYnUdxpFoHj80jp8+hJ1rgHSoFL7d7sFmbniIZejkaQq/yxd4S+4mFGV0N5EeWtbZxCi3TZcGhcDJzlhT/7srfEUQiuyGtL3zoBIMiGuiX3eFnR266HBTK+m2i/MlZN1P0YQ= Received: from DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) by DM3PPF7468F7991.namprd11.prod.outlook.com (2603:10b6:f:fc00::f2d) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9412.9; Fri, 12 Dec 2025 16:13:27 +0000 Received: from DS0PR11MB8205.namprd11.prod.outlook.com ([fe80::2de6:bc88:2af7:3583]) by DS0PR11MB8205.namprd11.prod.outlook.com ([fe80::2de6:bc88:2af7:3583%3]) with mapi id 15.20.9412.005; Fri, 12 Dec 2025 16:13:27 +0000 From: =?UTF-8?q?Damien=20Ri=C3=A9gel?= To: greybus-dev@lists.linaro.org Cc: linux-kernel@vger.kernel.org, Johan Hovold , Alex Elder , Greg Kroah-Hartman , Silicon Labs Kernel Team , =?UTF-8?q?Damien=20Ri=C3=A9gel?= Subject: [PATCH 08/14] greybus: cpc: add and validate sequence numbers Date: Fri, 12 Dec 2025 11:13:02 -0500 Message-ID: <20251212161308.25678-9-damien.riegel@silabs.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20251212161308.25678-1-damien.riegel@silabs.com> References: <20251212161308.25678-1-damien.riegel@silabs.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: YQZPR01CA0176.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:8b::25) To DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS0PR11MB8205:EE_|DM3PPF7468F7991:EE_ X-MS-Office365-Filtering-Correlation-Id: 4b1b28fd-e9e4-4365-d26d-08de3999624c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|52116014|376014|1800799024|366016|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?dTJXTHRRNEdiTVJWRWxUMEtOSmpURFBDc1BDU04yVFpKc1JlRk1LbTlDdjUv?= =?utf-8?B?K3BvcXFjcEZEMEgrRzFrM0xlRzRDUXBScnJ2MFJVbGo2WnNvWFpVbG9seldr?= =?utf-8?B?UG5BQk85QjRhakY4R0ZPYjY3T2ZjSkliUnBNT0h3RDlpYU5OMytmMUU5UXlB?= =?utf-8?B?WE4rZW00R3RFeC9ueGZ4ckhoN3lobEZ5Z0VOeUlKa3ZrbjRsdUVIVnJwWno3?= =?utf-8?B?R2F1OUx0RGMwWlRFMjJyRmMxS3k5Nm9RTFRIWVpBTGR3MXlUVDd6ODZLY3Yv?= =?utf-8?B?UnBqSXFtUTJxUldjRzhuUlh4dHArdE5IL1NVVm1OY3VKYjBVcEozRCt5SkNh?= =?utf-8?B?aXozVm8rSURWVjB4Q3lsNm1reTBkeDQyc3l5WkJUZ0V2enpjd2JvS1I5eTI0?= =?utf-8?B?ZlVVM21TditVajFUTXgveWxOVXJITFFXNjFkUEV0VENwUTRXZFVpamlUeEdH?= =?utf-8?B?Q1JPeUZncHFZRGFKOUlyK25KbmU1ZHVpbWN1R3lKU1hZaitxWTAvMXNZY2Zt?= =?utf-8?B?R3RwRzQ1Wm9QN2ZlMTJlNFQ3MzFPVkxwZTFvNG5oUXJQdzRYNFQrWUZCZFQ1?= =?utf-8?B?YjJjM3dVVFg2Z1dZcUlxV2hXTGFRYis2dWJLcnBEaG1OZzVYVVhHY1FTV080?= =?utf-8?B?SklreEd4R0IvWnR4Yjl1NWtjWUh5b0NKaXQwTkpLaTl3M3JJYXN3WXRyS2pn?= =?utf-8?B?aHdBQkVNZ1ZrREJSOVNsUElYdDJjdWlzTFFFakQ2R2lLMkM5aCtKaTFNUzFC?= =?utf-8?B?VmNtakIzSm0rR1BBbExCd1NmQnlWSzF6bTlua2lIVUNEZTkrajZnVXAyUHlw?= =?utf-8?B?aVRiY0hsSy9DR0ZPVzlVMFY2Tk8zVVBnaG9HU1YzeXdZTVZLd3ZxL3oyODNS?= =?utf-8?B?ankwNklkYmNONGt5R280ZnpidWlyWTBHRWs1dzlMOG5xMGF4azhFQ3J5Nm12?= =?utf-8?B?WUxQSVRhQmliUHZtUFpLVkppWWhTTllzVjljSmhwalkvRzdmQjR2RUJHVXRI?= =?utf-8?B?OHRkOU83cHFvanc5cExDaEU4a0RSUDJ2cHlEdzV5Zlh3S1ppRHFnOEN1ZHl0?= =?utf-8?B?NGsxN3BtUVBTNG56SlQrV0JxUXJHb25EVlJ2SjBMZlYvK01FdTZ3Z1dJcVNZ?= =?utf-8?B?OGRPelhlbDJZSEh2Z3NMejQ4T3duSmVqL2p4WUFzZGtoYStSQURsZmUwSXJS?= =?utf-8?B?QzBDOXBPL3ppNGU3TVJSdjB6Uk40Z2p0UEpMZTBHVWplclpJWGZVWEpyTFcz?= =?utf-8?B?cVhtVHB5Y2NyU2dMaEJEQjRGMDR4QUtDY2VBUnEwN2phaG4xZTNDem0zbGdx?= =?utf-8?B?OUtwelNsSTREa1lWaTdlQjZrTmhGYzNvZTh2RTN1eGVNQjBWcXplMGFpTExs?= =?utf-8?B?c1F0OTNkc0x5aVF1RHVmVWdtYjRWbkpOYlJjNDQ3dWswYXJ2OXYvTU5NRkZM?= =?utf-8?B?VGtoMWFkWEYwTVJiN0Q5Y3g2ZEVweXhJMm1ZM284eWhZWTNIcHd0c2N0cjBz?= =?utf-8?B?VjBzUmNvSkVJMnJGS0VJT3lnZDhhdXhNNjArQmE4NUJkRDdpSGZSdHhBeUJZ?= =?utf-8?B?dGJUa0JaRXhHMmtxaDZMMCtiNW1LU2dtQWtpeXVhalR3MFMxRnJsMjd3bHQ3?= =?utf-8?B?ZWhkOEJLMUh4QUVJcWJWMkI5aXNYeTgzK01GT3gyUHVPOHRNRFhzejV4MWZO?= =?utf-8?B?a3VMVzNUTzFZMFYrbmVxY0FGOWRsR05IUkhpYllOVkxQeEZieUtjNmxsSE55?= =?utf-8?B?N1NkZ3VEUHNWeEV4Wksrc08yNzdnVHlQK2NYYzJxeEE0NW5nTDBDMGJnZUx2?= =?utf-8?B?RkZJRDg4Uk5YYjNmalVJWmVTMnQySjBGeTZpeDZ3SGk0TFUxN1pOQnRrVjRW?= =?utf-8?B?QkFaYXJNOTBid3U4VGtzQVVyWUI2amNPZi9jRVJjcUQyZFlGWFVvYndWU2pw?= =?utf-8?B?WXlxdktBczFZc3VYY2IxYUsvbTNYTGk0bnZ5bGUwOXlZR042NlpnWGhHYjNv?= =?utf-8?B?cDRycHNiMEppWVhnU0lhbG01M0FJT0h3ZlovcURtS2U5d2F0L1VjTGxoc2dL?= =?utf-8?Q?n6XROS?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR11MB8205.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(52116014)(376014)(1800799024)(366016)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?bGNIMUtKbXdmcTJ5Q2NRY3F0Nk1aLzJvMndQZFVJUTUycWJLNzd2UkwvQzhs?= =?utf-8?B?S29LRnIzY0hKQ0prc3ZmYTV1d0o3SnFWNzMyYk9ldFFnbyt0SldFRDFOOWM0?= =?utf-8?B?R1JRVThqb2ZGeVdZZU9RZ29sREFneW5DdHh4SGlsdEk3WVlNcS9aalQ4VzZu?= =?utf-8?B?L285VndoaHU1N0pDdzkrY0d0bFpqV0hJWlNDcTBMLy9VcE96bGFPb3AwM3p2?= =?utf-8?B?R0M0d3BMT0w2Z1N1TlFEUCtjZytZai9xbFdpSW42RDlBMVQzczZwR2d3ZzNX?= =?utf-8?B?NEJvMXlzUm9pUGtjZ2RTclBGcllWZ1NTSjBmRUY5bG9QM0JobnJmYjlBMU5r?= =?utf-8?B?SVBjTytnR0dyM29XcmZnSFVzeDkyYkt4VnBlNWJ1RmRDL01uSC91QXRnN2Mw?= =?utf-8?B?WHhzSTNKdjFZQVhuSXlIdUJoazZGaUxVVlhSRnZLbVZYTDBoSHFldS9WS2RC?= =?utf-8?B?VlRQWHVxVkN4SzFyb0laTE00NnpkOUsvZHlXUDZDUGQxT2lyL08zS3Z0TU1k?= =?utf-8?B?Tk1Nem5UOWRDditYR2lvdmpnb3RFQnVRMlFwWUpVcGxRWDErdm5KQndiWWJM?= =?utf-8?B?dkZ4aVU1YkZnZVRlR1YyN1o5cFdTS3hzTGp0Z2FqMWtMMGRyRlYzRndRNE5W?= =?utf-8?B?NW5WTDhiQmJzaVhvUWVETmVPNGRDekMwM3V6ZHV0dzBaZzcxV2hBVW5RS0Z2?= =?utf-8?B?TXU1cklEcXVIOGJUREtjZE9CT0hMdjU2bkNESDZEeWxjM3doTENQczRhY0J3?= =?utf-8?B?amJKUm85MkJmbHlKdlBVNGZPZkdJMDl5aEJPM29DUS9JQno4L0xZOVkxSlJr?= =?utf-8?B?clVvQ01mSWtkTFZTZkFVMXB4NnUvQ3IwRzRSc0tKbHFDZHZjUlBQMWg1Uzh2?= =?utf-8?B?dnFXMUhzSmN6NENzUWZBanVDWXg3Q2pENTFyNE9IWGNtK2pxUHBLcDVGUEVn?= =?utf-8?B?UkozdjRrUmFuOU41VWsyNzAvQXFVT3RSV2lsZXNRREpnTVJWN0JoNDVqZnZR?= =?utf-8?B?MUk1QUpyZGhlTDJKS3FMQmVWT2xVdWdmMkpWcVlobVVkZk9qeWNRSU5UVGNi?= =?utf-8?B?cit1NVg3aiszVXVGYUJPOUJMVjQrTGJ1NDMzK0xoNlpLNGZoa2NIcUNsaENz?= =?utf-8?B?cnd0djljdzNublNPQUpjVGZROFc2TlVXeFkrWXpVazNLcWY0bG1IWHgxWTV4?= =?utf-8?B?RFNOdEYycjRMRzNoU2owT014OVQvdERYQ2JUY2VwdVZXTmRuRzlVMkVuN3hU?= =?utf-8?B?L1NuWDQ0eXFpM2N2R1ZmM3FLL2MxWTFvL2p3dXVyZlhyQjY2OGtsN0lsSzNM?= =?utf-8?B?bUVyd3RvaDZHTGZTaGVHam9Yb0RwaSs1T0xtekVZcmlmbnhRY2VPRkpGS1BX?= =?utf-8?B?cE50Q1c5dkJQVHh2YmZ2VVJJRnBvVTZ2SVZDbnFPNkVxRnRXZi9BZ3lnMjVv?= =?utf-8?B?OU5BaWdWSG01Umxhc2tMUGU4dHlYSlREbk0vSllZSDI0K3Z5UDF0KzJCU0dq?= =?utf-8?B?MzNJSEQvRmRxR3EybmpMMDdKSlhUL0hGQ2ZlMVZ5bVF1ZjhqUlYyUlRFYkF5?= =?utf-8?B?dUJBZ3BsK3JNN2JUaCt6aXRyQklFb0pPUHJpZmU5SzR2RWJ6ZUVJS1VSZm56?= =?utf-8?B?cWFNNU85bmxRelNSQWlnK1pmMGVjaU9nSjNwOEpkNGNPQ0NITjV3bjUvdjBS?= =?utf-8?B?RS8rVzQ0ZUlnNEdFOGNBTlJXYk16ZkZqazEyZ0hFUjRnQm5hN1E0SUpZalZ3?= =?utf-8?B?cmZJUEtFYVB6eWhpdjhMbTB5dEpuYVpMVlEvNG5EaWpsVHZCOUVkNEp0aDdz?= =?utf-8?B?QktWNktpWFFoN0ZaSmxUa0E3S1VJL0t0ZjVYWHRieEdMWVIwUDQ2c2doS2lp?= =?utf-8?B?UFFrTTRNTFA5LzRVUDE4YkZTcHBkYXhXUkpxamhhbHNGOW5UY0lNdDhrL3pN?= =?utf-8?B?VEcxZlZNZ2VEd1lJQ1p3alhIb0pqQjlBUGowL0tzRjgrK2hTSG9CbDFuUnpD?= =?utf-8?B?N1VnM2lvWFpkcmpGSFdJT3JjeUpkc1ZpTFFYNU9JMGNRZWNEKzZZM2paaVM5?= =?utf-8?B?SncwSG5ReHRkREliQWlISSttbDdhcGpQaGsxaXZUUFh3SzgyYjFUSTlaMUd1?= =?utf-8?Q?lxQGZrc+K8X3ghcw++oyKd8PC?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4b1b28fd-e9e4-4365-d26d-08de3999624c X-MS-Exchange-CrossTenant-AuthSource: DS0PR11MB8205.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Dec 2025 16:13:27.6903 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 54dbd822-5231-4b20-944d-6f4abcd541fb X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: WUJDMuuqpR0NhlvaRNWV5VDGCk5/Sh0lNH0EMjKx1aipXZbUGrSZRdFMGyoIdMqrfYTS391ux1J4+6EJUy5hpQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM3PPF7468F7991 X-Proofpoint-ORIG-GUID: 2_rMyhrWC8CWO5uCXxGgPue0RCoWSY9i X-Authority-Analysis: v=2.4 cv=brxBxUai c=1 sm=1 tr=0 ts=693c3f2a cx=c_pps a=poLntA6gJg8PyknBlaXY5w==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=wP3pNCr1ah4A:10 a=M51BFTxLslgA:10 a=i1IsUcr2s-wA:10 a=VkNPw1HP01LnGYTKEx00:22 a=2AEO0YjSAAAA:8 a=vN7oVFPIg2LUC2IVNO8A:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjEyMDEyOCBTYWx0ZWRfX4IMHebIVycLy G8ZdkFClRlFTM3iAX+z8oDY+29CoapZieH3cUdTjIH7hY5TqBeF5ki7SypiU2eWwKpRUFovp3ev /YYJb+RQExM+egzzeuogY9YuFRaSVdRLYh2XioVitVP1AFhvBnHrcyUpXlCeTljZfAFjm1qtn+p 7QJp2Fe+6meAmAT09eQUBJ3QYVcAMzzFq6fv+S1B/wPjyfkkxXKj1pIHgsLgeIbcmJjksRXjY8b hwL1SIbSxR+FNLItixrjU2OLFrvILJba+ztBKUSS2wkqEhxeYft5gt0su4Z9hCb+95VA+t2G0+v 3R+ZsiGsxN8JDqLZlRST8pSJEv3VROFG3E80VInUQ1eejOR8pWZLpeyXeM2qoEixwe1fj0c8DMX RF1k58ZCgKj/rpoGY2/zdZNoioGH9Q== X-Proofpoint-GUID: 2_rMyhrWC8CWO5uCXxGgPue0RCoWSY9i X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-12_04,2025-12-11_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 lowpriorityscore=0 priorityscore=1501 malwarescore=0 adultscore=0 phishscore=0 spamscore=0 bulkscore=0 clxscore=1015 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512120128 The first step in making the CPC header actually do something is to add the sequence number to outgoing messages and validate that incoming frames are received in order. At this stage, the driver doesn't send standalone acks, so if a message with Sequence X is received, the remote will not be acknowledged until a message targeting that CPort comes from the Greybus layer. Only then the driver will ack with acknowledgedment number of X + 1. Signed-off-by: Damien Ri=C3=A9gel --- drivers/greybus/cpc/Makefile | 2 +- drivers/greybus/cpc/cpc.h | 20 +++++++++++++++ drivers/greybus/cpc/cport.c | 25 ++++++++++++++++++ drivers/greybus/cpc/header.c | 17 ++++++++++++ drivers/greybus/cpc/header.h | 2 ++ drivers/greybus/cpc/host.c | 13 +++++++--- drivers/greybus/cpc/protocol.c | 47 ++++++++++++++++++++++++++++++++++ 7 files changed, 121 insertions(+), 5 deletions(-) create mode 100644 drivers/greybus/cpc/header.c create mode 100644 drivers/greybus/cpc/protocol.c diff --git a/drivers/greybus/cpc/Makefile b/drivers/greybus/cpc/Makefile index 3d50f8c5473..c4b530d27a3 100644 --- a/drivers/greybus/cpc/Makefile +++ b/drivers/greybus/cpc/Makefile @@ -1,6 +1,6 @@ # SPDX-License-Identifier: GPL-2.0 =20 -gb-cpc-y :=3D cport.o host.o +gb-cpc-y :=3D cport.o header.o host.o protocol.o =20 # CPC core obj-$(CONFIG_GREYBUS_CPC) +=3D gb-cpc.o diff --git a/drivers/greybus/cpc/cpc.h b/drivers/greybus/cpc/cpc.h index 62597957814..87b54a4fd34 100644 --- a/drivers/greybus/cpc/cpc.h +++ b/drivers/greybus/cpc/cpc.h @@ -8,17 +8,32 @@ =20 #include #include +#include #include =20 +struct sk_buff; + /** * struct cpc_cport - CPC cport * @id: cport ID * @cpc_hd: pointer to the CPC host device this cport belongs to + * @lock: mutex to synchronize accesses to tcb and other attributes + * @tcb: Transmission Control Block */ struct cpc_cport { u16 id; =20 struct cpc_host_device *cpc_hd; + struct mutex lock; /* Synchronize access to state variables */ + + /* + * @ack: current acknowledge number + * @seq: current sequence number + */ + struct { + u8 ack; + u8 seq; + } tcb; }; =20 struct cpc_cport *cpc_cport_alloc(u16 cport_id, gfp_t gfp_mask); @@ -34,8 +49,13 @@ struct cpc_skb_cb { =20 /* Keep track of the GB message the skb originates from */ struct gb_message *gb_message; + + u8 seq; }; =20 #define CPC_SKB_CB(__skb) ((struct cpc_skb_cb *)&((__skb)->cb[0])) =20 +void cpc_protocol_prepare_header(struct sk_buff *skb, u8 ack); +void cpc_protocol_on_data(struct cpc_cport *cport, struct sk_buff *skb); + #endif diff --git a/drivers/greybus/cpc/cport.c b/drivers/greybus/cpc/cport.c index 0fc4ff0c5bb..2ee0b129996 100644 --- a/drivers/greybus/cpc/cport.c +++ b/drivers/greybus/cpc/cport.c @@ -9,6 +9,16 @@ #include "cpc.h" #include "host.h" =20 +/** + * cpc_cport_tcb_reset() - Reset cport's TCB to initial values. + * @cport: cport pointer + */ +static void cpc_cport_tcb_reset(struct cpc_cport *cport) +{ + cport->tcb.ack =3D 0; + cport->tcb.seq =3D 0; +} + /** * cpc_cport_alloc() - Allocate and initialize CPC cport. * @cport_id: cport ID. @@ -25,6 +35,9 @@ struct cpc_cport *cpc_cport_alloc(u16 cport_id, gfp_t gfp= _mask) return NULL; =20 cport->id =3D cport_id; + cpc_cport_tcb_reset(cport); + + mutex_init(&cport->lock); =20 return cport; } @@ -64,10 +77,22 @@ int cpc_cport_transmit(struct cpc_cport *cport, struct = sk_buff *skb) { struct cpc_host_device *cpc_hd =3D cport->cpc_hd; struct gb_operation_msg_hdr *gb_hdr; + u8 ack; =20 /* Inject cport ID in Greybus header */ gb_hdr =3D (struct gb_operation_msg_hdr *)skb->data; cpc_cport_pack(gb_hdr, cport->id); =20 + mutex_lock(&cport->lock); + + CPC_SKB_CB(skb)->seq =3D cport->tcb.seq; + + cport->tcb.seq++; + ack =3D cport->tcb.ack; + + mutex_unlock(&cport->lock); + + cpc_protocol_prepare_header(skb, ack); + return cpc_hd_send_skb(cpc_hd, skb); } diff --git a/drivers/greybus/cpc/header.c b/drivers/greybus/cpc/header.c new file mode 100644 index 00000000000..62946d6077e --- /dev/null +++ b/drivers/greybus/cpc/header.c @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2025, Silicon Laboratories, Inc. + */ + +#include "header.h" + +/** + * cpc_header_get_seq() - Get the sequence number. + * @hdr: CPC header. + * + * Return: Sequence number. + */ +u8 cpc_header_get_seq(const struct cpc_header *hdr) +{ + return hdr->seq; +} diff --git a/drivers/greybus/cpc/header.h b/drivers/greybus/cpc/header.h index afccc941726..2a64aa8d278 100644 --- a/drivers/greybus/cpc/header.h +++ b/drivers/greybus/cpc/header.h @@ -41,4 +41,6 @@ struct cpc_header { #define CPC_HEADER_SIZE (sizeof(struct cpc_header)) #define GREYBUS_HEADER_SIZE (sizeof(struct gb_operation_msg_hdr)) =20 +u8 cpc_header_get_seq(const struct cpc_header *hdr); + #endif diff --git a/drivers/greybus/cpc/host.c b/drivers/greybus/cpc/host.c index c89617623e8..7f0579fde26 100644 --- a/drivers/greybus/cpc/host.c +++ b/drivers/greybus/cpc/host.c @@ -209,19 +209,24 @@ EXPORT_SYMBOL_GPL(cpc_hd_message_sent); void cpc_hd_rcvd(struct cpc_host_device *cpc_hd, struct sk_buff *skb) { struct gb_operation_msg_hdr *gb_hdr; + struct cpc_cport *cport; u16 cport_id; =20 /* Prevent an out-of-bound access if called with non-sensical parameters.= */ if (skb->len < (sizeof(*gb_hdr) + CPC_HEADER_SIZE)) goto free_skb; =20 - skb_pull(skb, CPC_HEADER_SIZE); - /* Retrieve cport ID that was packed in Greybus header */ - gb_hdr =3D (struct gb_operation_msg_hdr *)skb->data; + gb_hdr =3D (struct gb_operation_msg_hdr *)(skb->data + CPC_HEADER_SIZE); cport_id =3D cpc_cport_unpack(gb_hdr); =20 - greybus_data_rcvd(cpc_hd->gb_hd, cport_id, skb->data, skb->len); + cport =3D cpc_hd_get_cport(cpc_hd, cport_id); + if (!cport) { + dev_warn(cpc_hd_dev(cpc_hd), "cport %u not allocated\n", cport_id); + goto free_skb; + } + + cpc_protocol_on_data(cport, skb); =20 free_skb: kfree_skb(skb); diff --git a/drivers/greybus/cpc/protocol.c b/drivers/greybus/cpc/protocol.c new file mode 100644 index 00000000000..037910e899f --- /dev/null +++ b/drivers/greybus/cpc/protocol.c @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2025, Silicon Laboratories, Inc. + */ + +#include + +#include "cpc.h" +#include "header.h" +#include "host.h" + +void cpc_protocol_prepare_header(struct sk_buff *skb, u8 ack) +{ + struct cpc_header *hdr; + + skb_push(skb, sizeof(*hdr)); + + hdr =3D (struct cpc_header *)skb->data; + hdr->ack =3D ack; + hdr->recv_wnd =3D 0; + hdr->ctrl_flags =3D 0; + hdr->seq =3D CPC_SKB_CB(skb)->seq; +} + +void cpc_protocol_on_data(struct cpc_cport *cport, struct sk_buff *skb) +{ + struct cpc_header *cpc_hdr =3D (struct cpc_header *)skb->data; + u8 seq =3D cpc_header_get_seq(cpc_hdr); + bool expected_seq =3D false; + + mutex_lock(&cport->lock); + + expected_seq =3D seq =3D=3D cport->tcb.ack; + if (expected_seq) + cport->tcb.ack++; + else + dev_warn(cpc_hd_dev(cport->cpc_hd), "unexpected seq: %u, expected seq: %= u\n", seq, + cport->tcb.ack); + + mutex_unlock(&cport->lock); + + if (expected_seq) { + skb_pull(skb, CPC_HEADER_SIZE); + + greybus_data_rcvd(cport->cpc_hd->gb_hd, cport->id, skb->data, skb->len); + } +} --=20 2.49.0 From nobody Mon Dec 15 00:34:36 2025 Received: from mx0b-0024c301.pphosted.com (mx0b-0024c301.pphosted.com [148.163.153.153]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 99C191FFC59 for ; Fri, 12 Dec 2025 16:38:32 +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=1765557514; cv=fail; b=frlyfU7+Sy9Hp9GA8jUYk/DMJQveqEJFnbXAk7iPVAUEXJ0MxKEJRdQINR0yuZD6PxkBYvutxLXT6+vCatoFchM0Rphc0JDEFdPKDIqCfYziTyoabDKPUoJgZxhCndev/ENrQVUeoyem3pOdqn7xsrO0UUwI8eOBr8VK7SpOf8w= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765557514; c=relaxed/simple; bh=bMUF7+Ym+ot0emFcA0xEJSw+wHbHR0Z0wjcukgTSMVk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=ZJfdMtAA8iwps/V6XCgKM4gSWoQnEmvX8RSl6gYW/PxdTi76wGl5Ks937tFvBBRaj7wrHQgZjQ3GZMpu1RUMoEiGOPftGXuZG6hrFpPnsB1xNDMt7SuM3RKCPT9AJjuObu6c1PRAwWbYAQwFsjHa7QmcWxxcKYKCufPJoXngch0= 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=IUUI66Py; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=LqzyEYNf; 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="IUUI66Py"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="LqzyEYNf" 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 5BCFG5gK2052805; Fri, 12 Dec 2025 10:13:31 -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=w1/5YRaI4nuxJ64hjAemiWucIjxSy6Sf8roGm+BoCtE=; b=IUUI66PyOniD H9jNUAK2BIMIXXpwE+4LtWhEX4Yc3kKb+b44uih1z4a8TSsgnzLnzDQXHtickuu6 81dnhy4SWz92EvPqgPKPrgSnz+ZlqBjatReTfTvrIhpqs/bOVj+wLbCoX5b233Ha gsR0HkxpC4Z+NxH7IXXqJxcOiPNlxFj/l0qbpx+meae1BneQNYD2P/WJALrwkEWM GBhLQIeNpCdOSkfdXmYjn3nJYzWlbKZ40UdrYsvQ1mdoLV9exq8pLG9e1zJ77toc 43+cA3XUoBLEiXzv8kg1Jo+Pu6wZz9CBqKvLzV/flzCXvK1V49dDnLqy21n4/fOZ JEnoGaZlBg== Received: from sj2pr03cu001.outbound.protection.outlook.com (mail-westusazon11022103.outbound.protection.outlook.com [52.101.43.103]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4aykqe47hr-2 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Fri, 12 Dec 2025 10:13:30 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=QL+hO5wTQZaIoHvpIKRmXY1w+vv+8wp5N02GJcqA0fTHWM//9iisb6f0aNgt4ibKbH/SOeaM8wLqBcgqTz/VIGIVINWUxRLWyevXMGubtWP3ig9AUrB83dXSo3VlrPiD2TtK4recGdvqFVLtwM9/8Epr9HWpB+gjlcaBIxA1RnEWcddP3F1ULeSBxyHIpE9cYtgUDQCea11VvLqY9Ts6W7qEBePWKLecV28zTzcgLauUYtdBm0l3kK4aDMdkIL6RPeOhbHTSFAO++P7mwVv4Ua6oF2FSzrynnFgpEnq9E3TaXUKewOB85JFERiBKDIJqRcIo5432AeJ4szMosTa4Lg== 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=w1/5YRaI4nuxJ64hjAemiWucIjxSy6Sf8roGm+BoCtE=; b=UkjbxsUEWJt3cpjEAcdu8dATvR2soWMADAtgHOOQ8vYaQrTwUH3477PjJ72VoiAAp5I+kbqyZu88viBKtW74lttHq+uOgVDUzZJ0XKXdoKvQ9updHDpIupqWio/MSXNJWwsJyHabXa9Yffv0zyXG+QntSBUGnnwI3mozujUmnIwwAKRanjuuSKLtUacxyhn8JRRbzpIrVjTY9uzOf6V5kpPPakJZLlSPDvJiiag3aGwgzULD3VvkG1aH87CGDH8HsNfbsXVnBRzDrvxB3AV2jHCUNCH9C4CdPrGC0OSy8KnxBfKJgyecdI29gT65bACyZyM9ILzk80YKUYup1LliXQ== 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=w1/5YRaI4nuxJ64hjAemiWucIjxSy6Sf8roGm+BoCtE=; b=LqzyEYNfopvlBdiagq2EkNt0PZQ7U1H9jdGhaCi1FgDFw+Eknulq37ErF5oWswi6DkXtwYh85Vfjt6e/nu1dNeKTgOPmJchgpcTiaF+CGgqjwOKk6Cd2+9ZwkkBfIJy4pGyW8eRG5eEixkheurUPMi+QODvojAqgltK+qP9ywK8= Received: from DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) by DM3PPF7468F7991.namprd11.prod.outlook.com (2603:10b6:f:fc00::f2d) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9412.9; Fri, 12 Dec 2025 16:13:28 +0000 Received: from DS0PR11MB8205.namprd11.prod.outlook.com ([fe80::2de6:bc88:2af7:3583]) by DS0PR11MB8205.namprd11.prod.outlook.com ([fe80::2de6:bc88:2af7:3583%3]) with mapi id 15.20.9412.005; Fri, 12 Dec 2025 16:13:28 +0000 From: =?UTF-8?q?Damien=20Ri=C3=A9gel?= To: greybus-dev@lists.linaro.org Cc: linux-kernel@vger.kernel.org, Johan Hovold , Alex Elder , Greg Kroah-Hartman , Silicon Labs Kernel Team , =?UTF-8?q?Damien=20Ri=C3=A9gel?= Subject: [PATCH 09/14] greybus: cpc: acknowledge all incoming messages Date: Fri, 12 Dec 2025 11:13:03 -0500 Message-ID: <20251212161308.25678-10-damien.riegel@silabs.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20251212161308.25678-1-damien.riegel@silabs.com> References: <20251212161308.25678-1-damien.riegel@silabs.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: YQZPR01CA0176.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:8b::25) To DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS0PR11MB8205:EE_|DM3PPF7468F7991:EE_ X-MS-Office365-Filtering-Correlation-Id: dd6694e2-a64b-4bea-e919-08de399962cd 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?Rk1SZmlaNlIwYWJmSGxwZnByMTFwbFkvOURyV254WDdhb1Bmc0VqdTFXR05P?= =?utf-8?B?M0RLSUlFSFJQQ1FvNmJIdElBaVZOQmVERlE0OGprQmlabU1OQzRMODNsWnN5?= =?utf-8?B?RUNEQ1BrQkdNL2ZrL2F4d1JQYXNoOE5xQjRPTEpBZ1lmQldHZjdXRndQVW1s?= =?utf-8?B?elhpMkcvQWpGaHJibnhjWGlyU2FNYmJrMUtVVG50QW9qNUZvYTVNWGtvcWdz?= =?utf-8?B?cTcyTkovOHJlM3Jpd2oyOWxmK0RjZ2pQNFBLUFRDWXNGOFI5T01BLzZaSXNk?= =?utf-8?B?M1d0eEMxS1NjVDNQNE9tdk95cDc2cTRKQUhQNW52bG1hOHZyS1htVzJ4T0kw?= =?utf-8?B?SEtXZTBPb1VldE83TzhmUSt0OGRDRk9mY0N2L29NQ0oyRjF0NlBqOE8reXV2?= =?utf-8?B?c0lORFhadnJvU05JdzArSFdZQi9uNCtLSHphZW83SkcyaENxcUhSWGZWT05i?= =?utf-8?B?eWdyTU04bU8wb3BqbWNwZDJPWG9pNWhrSFNTMC9uM1JMekZ4blVUYWhqNElr?= =?utf-8?B?bUtWVXU3Q3RxNXBRUnVCZk1oNkxHSGJYbzdwazlRKzlpYkFqMmNkT0ZDY0ZM?= =?utf-8?B?d3VoVE1mRy9BNUN2YXNDUDNRdStxOGhVVmNGT0VqWjArenlTd1hWRngyWHpj?= =?utf-8?B?aEs0U1phcTNLcWo5amFXeDAwZDEzdnJCZXJ5TFc2NzJHcjRobTJ5ZTJrNHBt?= =?utf-8?B?VUYwU016cHZIUTMyRi9BaDhHQlJtejB0U0NkcnB5eFEycGUydlNQeU5hWkd0?= =?utf-8?B?Z1hpb2pubkk2NTNMNWxnZ3FOM1lHanpMTWFzSzNvdE0yLzZ0dnpzZHhtdzZu?= =?utf-8?B?OUFkWTh4VWF0TFVoWHpEMzBGYkZaK1ppYzNqMVUzSS9QaElMSm9TSlgxcE1Q?= =?utf-8?B?MVhwcmlXZkMzV3c5eXVHeWxpNUtLdWIwODVNSUdwZGNpM0Nka3BiRG9rTHM2?= =?utf-8?B?c3BYYmRudUtVRkFBMjFISlplbmZYQlRDMlZMNC9wQ1RNUjA4ZHZyVmlRNUxo?= =?utf-8?B?TVNWN2ovWG9ZWjdnL0NuNi8yZndVS0Z4NjFCbHg4Kzd0UmxVcjNsS0JaSlRU?= =?utf-8?B?WkoyRmlpTFh2RCtzMEFEc0x6V3ZWM3AxUklzV0s2Y3VtUkhIY3RXd3diLzlB?= =?utf-8?B?ZS82YURqOHZXMGowUEwweXEzbWl3VlhiOUlyaml6SEwxTjBtbDRxOXB4Y1ZN?= =?utf-8?B?anNKRzFnY09oSjQ1b054bFkxdjhOLzE4ZmdMTFBZektNdXdtSXlPWWgvN0gy?= =?utf-8?B?bkI0QUgxNjBqcDQzS1pFanAxaDBrblhURHRpeURBZXY2aVNIMlE3WmlycEsx?= =?utf-8?B?YjJ6V2lKS252dkdEUjUyR3hRbkVPcnBUVWNLd042Wjd0cGVkNDRsU0FyUTBo?= =?utf-8?B?ZGN3cUd3SGtZaWpKNGNxRnREWWhSV1pEMWplaXNyY1l1bExNQk9yZ1dYN2s4?= =?utf-8?B?bmJDRFJSV2ZvMVZSWngyWEdzTEZ6SEplTExHZUx4VlFvY1NYOE1nMkpTbVdH?= =?utf-8?B?aDhTU25XWnEzOXhxbDdKQnpyclE0ZldEWkhxQWpid05kV2xMc3JhSU5sRXky?= =?utf-8?B?alhPMjBaMVQrSzArMGtYQ1loRCtIY0tTd0paOFFzRjFSWmhIY3h2UVJ2UGN1?= =?utf-8?B?b1RzZVdHbWt3VzloeW1sVVNFYkkvNWNhbHR5Vkh3OGdFb0NEaXhzT2FRYm11?= =?utf-8?B?VVZOMC9PYm5vS0pDQUU2VG8wQi8wL0dUT0RkTW5YQmx4WEY5K0NvbUNZZzZR?= =?utf-8?B?UElFYUxzZVdHZjJSeVVBb2NyREh2OFNzWlM3eGRMRzBldmE5aUxINkE5QWE1?= =?utf-8?B?dG5WRGR0RDIwRFJMdWkxZWpONlJ2Q1RKSGdJYlpObjFTZTQyL051MjUzbGxq?= =?utf-8?B?eDE2VnRHV3I0NFc3MWoxbjl2cHBqNk11UWpXd3VvZEFGUFE2YVdqQjZqQjQ2?= =?utf-8?B?d011MVQ5NmY5c0pFd0J4MEROSmxzZFVkZDMvR0ZUTzJUdGt5VjFMSEVDMkM3?= =?utf-8?B?YTJxMlR4R25HRmhLYm5EcDVON0xub0ZVZi84OTNpU2hpT1hON25haFZEeDVj?= =?utf-8?Q?iX71si?= 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?R1BnTG4yMFRRSW5YTE0yeXE3T3dPMlBUZXBlS3V3Y0ZsTmM2bGE1MUpsUGVt?= =?utf-8?B?bloyZkdUMXdBQjhNK2p3dnZ1L1QwdStKNWlKZ3IrV0QwaXVCTGE1OW5MNkZK?= =?utf-8?B?RFVIL01PQjlUbXBtRzBtc2FvYWN1cFM2SXYwZVVRcjJycExNeFRpNHZFblc1?= =?utf-8?B?UFAxeC96V2xTWTRrK0xHc0xEV2U5UkZaeGord1A3WDBVSEtSUnphM3ZQYWxp?= =?utf-8?B?aGR1bGpGc3FRSk0xYnB5R1dVMUhKbkhjRFFtZldLemZPNkNGRWZvOFh3RHNU?= =?utf-8?B?Z1ZjK1VScGF3dnpOcTRUbTBabEF6bURQU0VRR1F3SDlONmlGK1d3N1NjcXBw?= =?utf-8?B?aFFmVEdnZmZqT2o4QzUvR3J6SUNUZ2hienJLZTVLOU5KZS9ibzZ4SG1uMnYv?= =?utf-8?B?ZXM4Z1RYWTlhNVErQ3k4M2cvblZWWUY2YWo1MkZLSExqbTR3N2x1dU1WQ1FM?= =?utf-8?B?dnE4Snlqa3U0U3hEWjh6aHZ0U3hzT2dxa2c2dWNuTnVkY2kraU9iTFNJMnJF?= =?utf-8?B?NUl1QUF1UXkwV2tveWlIMHJOSzIwL2poOGIrbXBWWmNzVzFxOGlVRWRQU2gx?= =?utf-8?B?YmVIM2RucGZNRk5ncGRlN1lNYmllZklHWm52OUxxRkVUMGNrSmx1MStTNWxo?= =?utf-8?B?WXE0VGJxb0VGcTR0MkUycUowellIRnFSajhjQ3o2aEhHREtEMzdLWXVwWHE2?= =?utf-8?B?d3BGNW42NGsvSnlBQzBCeEdEa3p0UEg0WEM2RXArcXh5RXZ1Wk44Y1AwbURQ?= =?utf-8?B?aW80aWJLcytXT0REQXJOcjdwOVNEMDZOVTg0c3luam5ZY0ZjNDVJZUJtLzdJ?= =?utf-8?B?YkhISVpQWGQ4UGtpTkt4L0JhRG10czlBMEkyeUJIR0JHVXhYbTR4c21oZUR4?= =?utf-8?B?ZzNqYWtZQXFFV3FMZUNBNFdCcjVkaGZQSXdNSDFwWFRScmdHNVB1dE9zbHpR?= =?utf-8?B?ZHJFYjVab2JhN05CdDRueXhZWml5TE13TGJDdW1teTFKVzRpWGw5YWZhWDRu?= =?utf-8?B?MVd3eDNHM3E3SEhXTThEYkNKZFJhc1VwVkU0dFhEdGlLbUgycTlhaWU4NkFQ?= =?utf-8?B?YkN2WmZTVWhZb2s1c09FK0pRQkxmemdTWFJYRVVkcER4WFVPV3IvOEh1Nitp?= =?utf-8?B?WjZQY29sUUtWODdMMEIybmR5WVlJU1grdi9LVHNRN3RsRFhPR1g1QU9iZWxa?= =?utf-8?B?ZGdDSWFFOVJua2tTM3M0d3RwQ0d6YlMyWWlweDFuQUg2Qi9CTmJkdm96Tk05?= =?utf-8?B?ZjY0eFdjOFJJTnNkMXF0QUxZUVFwVzB3aEU1RzhVQ3NFZmQzSWw5QzRQOGpl?= =?utf-8?B?UWQzczlObUg1cDNuWUwvYVlONGFvZTFwRkt3cnFrcmtKK0F5MnZqZW5NSkhI?= =?utf-8?B?dkk1ckF5ZnhRM0tIaStFanlKMmtWS0FjeTZwNjRuanhDQURta2NHelVERE5p?= =?utf-8?B?c1hmS2lTaFlnVFBoVlh6MmprUVlFd0Z5ZGFkM3lNWnNjdjFFUTlBOGgxbDVT?= =?utf-8?B?V05hb016d0U4bElTRC9MbXZwK1hUaUxNRHROQ043VW5xaHVtR3dadHZYMXVP?= =?utf-8?B?WFlDMy9halNPMWpEWFhiaHZQMVFGTGFiWHhvVVVDemxSODZqRldHTkM0aTBj?= =?utf-8?B?Vk5yNVpMS3VCN09hcXlia2xVcDk2VU9INWlBOGZXNTJPcGhzL3diYXpUU1RT?= =?utf-8?B?cTkvT0p6anI5Wjh3VnIvT3NSYkRScm5xekh5YXRtc1dwSmEzNEViZE0zZCtj?= =?utf-8?B?STVkTEFDcGhZRjAvZHN0YWpQbjJJWHdnQXhzWTRLV3creWNlMEgyZnFjLzQx?= =?utf-8?B?ejdCMjRQRU84Tm5EUnFJVGEvNlYxY0xSbGc0dWtCZytkMG0zUzJrUXdhSDVq?= =?utf-8?B?Y2txMmNBaW9ibitMVVcyV1ZUS0NMd1ZNb1NTR2hzMVV6VkVDU0dDWlFqc3dw?= =?utf-8?B?V2QvSXJYdHZQNEcyU3pPRXJzTUVJbTBMQTUzN1hJV08zQjdVSEJuTDdTUHFl?= =?utf-8?B?ZkpFekxtWHNFYXNyNWxlYXBtQnVPbitvekRpT2ZRQ2F4M0xsNkxENDVlN1Y5?= =?utf-8?B?RDdXVDV4WG5sYUpKeWY1NnRObHlnSFVWQ2FsN0hNYnhaZVA5cUpmd1FIYUFv?= =?utf-8?Q?ce6589bia+nagAcGSq1MqBHwC?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: dd6694e2-a64b-4bea-e919-08de399962cd X-MS-Exchange-CrossTenant-AuthSource: DS0PR11MB8205.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Dec 2025 16:13:28.5876 (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: aWk/lYEmDaoDy39kS5lCMwLL2Av0tZFqqWuxQX0jDuF++INo+5ScJsMp2JOIwXQAnz0AemmVgBnpOrHDE4ZIBQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM3PPF7468F7991 X-Proofpoint-ORIG-GUID: Nbc1DBrfRCQWYo5-4tZqb1O9fyodRM6W X-Authority-Analysis: v=2.4 cv=brxBxUai c=1 sm=1 tr=0 ts=693c3f2a cx=c_pps a=poLntA6gJg8PyknBlaXY5w==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=wP3pNCr1ah4A:10 a=M51BFTxLslgA:10 a=i1IsUcr2s-wA:10 a=VkNPw1HP01LnGYTKEx00:22 a=2AEO0YjSAAAA:8 a=mhnTNJ_rBLr-BtWZq_0A:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjEyMDEyOCBTYWx0ZWRfX9u9VqR7JgvyY iTUjfmnMuKoYB7KHrTnaGfnaYYKD1PSwuJIne6Va9y67n5te/KOflxh0GzOu2O0hxrRJM50Ss95 t4NUiQPKuys7H2T0U51bqBpFR+nez4zoPMZ5RZ9iZy+mImigAAlepGY20BXZOi5sBUCLmb+7d78 cRDja6ZnAM4Lbba2xpVGfZQ2XPvzyoab1MdlLOehaQTp4wLtFoxZV9sSOBpAwOE17UdPWqcmVoy eI8IL5nTSoVyS1CDML8/T3XU4wdeek5E32neRVkgfHLctU4lBOl52VF3of5uterggNPdGjcSIz6 D9ZvhCppzyHk3+DYSBeb/zzcnybob9EVugMdh3rqvdsI/5ccIgk50Wjnj7nsrhVvwV6PL54Gsnu etV5aIC0wNcNnNgNWj7ewki3SvaXUQ== X-Proofpoint-GUID: Nbc1DBrfRCQWYo5-4tZqb1O9fyodRM6W X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-12_04,2025-12-11_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 lowpriorityscore=0 priorityscore=1501 malwarescore=0 adultscore=0 phishscore=0 spamscore=0 bulkscore=0 clxscore=1015 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512120128 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 --- 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 | 55 +++++++++++++++++++++++++++++----- 5 files changed, 95 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 2ee0b129996..35a148abbed 100644 --- a/drivers/greybus/cpc/cport.c +++ b/drivers/greybus/cpc/cport.c @@ -86,6 +86,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 2a64aa8d278..0c9f6e56524 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 037910e899f..b4dd4e173a1 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,62 @@ 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 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(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(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.49.0 From nobody Mon Dec 15 00:34:36 2025 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 E3859126BF7 for ; Fri, 12 Dec 2025 16:29:23 +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=1765556965; cv=fail; b=buv8BImAeq4kUTEU4IEXQolK0hCBJksrJRiZYu9qp3zI9E1ZBpLmzgexsh3F41SY9JSXhi2l0PXzLIvE4+2hPKAzY8uRjMO8wz4OUydO1BMqOAA3X/Ak2ui3JLDCm/S9wsH6SvCFQI4fagJNwNPXN0l02T79xUmhC7ls/oVxd60= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765556965; c=relaxed/simple; bh=5y7nmIhriCeCJB1DZPaCXwUFS3kJp4ip6FI7bY/3J4I=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=VjCcDcxaa+BOXIvQInFCySL3Swn8B2vmTY0o07l4A6O/EIV9neXywXk2LpGCh+hvOoddOE8QDfgSG7Pt9I3/boVT4SL868hETc60/tI5tNTsrBjOpCUfPUbLmEZbTYaqIee0KmeBBVuhgcCsh8d6eZ1FmnBxwxTEHG6QAXd8Q10= 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=miDSzYDp; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=Cz5pSvYT; 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="miDSzYDp"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="Cz5pSvYT" 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 5BC1HxRt2471899; Fri, 12 Dec 2025 10:13:33 -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=IWbBfifONqTvzCqJnQ7uZMw5WqDNurfbsQIGBD9wYyY=; b=miDSzYDp8u3l NrpcGr0Q26n/AaDiqmoQY/PLUjUu+R0UdLw6lX3qLFEEUtwnMbOgESyQmCaOtSOV 6RvxjA6xnT5U0LdCYUdMQj5vnirHdMuMJqFNUZIh7zkf1gN0TlMwBzIuEhxsEFmQ wEVMKTep1BiYooiDJcBGUd4c1xnRJo+rVSGP15NOTif5FtcI/XTtg17ouB0uk5UI PtDjTIyjwbzr7iz8LM+PIvh3FDhwmsy5WHymhosR4PO9TdBh/v0q/6BiwAYea1uV twjv6A56zW/pG3+WNaQ3nANJDogXPUrJ0GTdPmC6ddU9nZz4JP/cOSSSZc+L6qxb OXyn0hga6Q== Received: from cy7pr03cu001.outbound.protection.outlook.com (mail-westcentralusazon11020120.outbound.protection.outlook.com [40.93.198.120]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4ayht2mdet-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Fri, 12 Dec 2025 10:13:32 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=czL3CoTDYIXS1WAuOqlkhVVjygP4f9xyjx7Wi0ptf1uzQAnd1gA7GG8hBiTHEAK3/XVsEo0bIPESDVOHksTBzhMQ0Uma35ZtDoU79sRPzrLGurU76O1BozEaY0TRBLvyspwQ4v463+t7uYOaqsvdbjoxIjoDmcA+e+6mvMw4vDxSwgts31Itp7c07TrqatDzxcbvnJlLB9hC0H9QmFh+tN+UK9GsKcgicODfzL5C/0j7VbyhIJY8CvdnsXhB6GgwIfQi++c3Z9FUZ5YeaZ3uwGpkDFX4KiZj3oVBVa4hNsHvMkPOxGQAjwYaJ89z0Yknd12nbOZzgDV2RPWvpjKA1g== 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=IWbBfifONqTvzCqJnQ7uZMw5WqDNurfbsQIGBD9wYyY=; b=ITTpSEgo3Q/guN8aN5Z+vi+y1ARozDDUhtSLhIJt7QeTjQB0PPL7sueTy2bQOtQMMZBd6z3GA/J5OHIQo+RYP1wPO/e8ei4MXB5cKub2PWEALWMx0vEd4/FHqDjv2W+xkrqlT6f1VFpoht24ie5i8a+WNjiD7MKIRnw3Ko+5RP5QKDRow3c5L+ZhF9fvxUowpqjj3AErVsxq6TwpWfNZ0bfI56KDN+Zd+5ctkdybScJcUKFxjMeuKJpjcpPdnWKr3RCTNEbfDnOHKKjqyMbN2H3ngwGKxiZCEzmMVIvmJS5J3CZXI6eeqzCWXO1KSaRkhPW/zQzv2h5lD5u9xemPQQ== 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=IWbBfifONqTvzCqJnQ7uZMw5WqDNurfbsQIGBD9wYyY=; b=Cz5pSvYTTCMHJeW0n2g7jN6bjbbgtjHJYS/rRR97N3MNMp0Y+boHM48kfNU4lhnAgxkYVIUaYIg4yDx1RnXEG+byEBO6euLm30UYM7RQcbpa5LG+0IIvK918e1ZurJKna6vQVCp+lOHNx9mhUc15/UY1rGIIQ9hp6iMNXUrz4hY= Received: from DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) by DM3PPF7468F7991.namprd11.prod.outlook.com (2603:10b6:f:fc00::f2d) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9412.9; Fri, 12 Dec 2025 16:13:29 +0000 Received: from DS0PR11MB8205.namprd11.prod.outlook.com ([fe80::2de6:bc88:2af7:3583]) by DS0PR11MB8205.namprd11.prod.outlook.com ([fe80::2de6:bc88:2af7:3583%3]) with mapi id 15.20.9412.005; Fri, 12 Dec 2025 16:13:29 +0000 From: =?UTF-8?q?Damien=20Ri=C3=A9gel?= To: greybus-dev@lists.linaro.org Cc: linux-kernel@vger.kernel.org, Johan Hovold , Alex Elder , Greg Kroah-Hartman , Silicon Labs Kernel Team , =?UTF-8?q?Damien=20Ri=C3=A9gel?= Subject: [PATCH 10/14] greybus: cpc: use holding queue instead of sending out immediately Date: Fri, 12 Dec 2025 11:13:04 -0500 Message-ID: <20251212161308.25678-11-damien.riegel@silabs.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20251212161308.25678-1-damien.riegel@silabs.com> References: <20251212161308.25678-1-damien.riegel@silabs.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: YQZPR01CA0176.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:8b::25) To DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS0PR11MB8205:EE_|DM3PPF7468F7991:EE_ X-MS-Office365-Filtering-Correlation-Id: c5ba8579-69bb-4010-b89b-08de39996352 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?RXRnM1UzUFM2Tm1HN0kvNExadE9oWE95MzhNZTNleUtPb01lMkNhUWVuL0Mx?= =?utf-8?B?Q0Fza1dCQVY1UkRzd2JLdmJ1dkU1SmhaZUo2aEFzdzR6RzFoc25KbU1qQk1x?= =?utf-8?B?TU5HVDJ4NGFBTGJaVXRkU2UrNTFwV0xveXpwMjY4eFlsdVYzN3RoRCt1SHJ4?= =?utf-8?B?aGxlWlNUZ3J5TlhzY3VvOHByNmlCWkJBa1FHTjhTN2ZpbmR5dHpXT0dXR2NI?= =?utf-8?B?Yi83UWl3dEdyckhDZVlGbEc1T2g5L1YwM1B6Z3ZCKzdqZlIrbkk0YWJHeTg1?= =?utf-8?B?ZHhUR1llajU1RnRLYXA1Q3FKMGZxUTFwM0pucURaNHA4SFJPdjRvblo2Rk03?= =?utf-8?B?bDJ4QW1UakVpUG5lNUUvQW5LdWFQMUozMm1zaVJhczdNSUU5ZFFqVXN5SXlp?= =?utf-8?B?UFpTYXZmc2Q2UU91STFqVHFpZkp4TVM2K0lqSXdLbGJENE10RUdzZ1QvOW45?= =?utf-8?B?RkMvcVo5Qi9vaFd6blpqRUpFMEVhOGIyYitVeEx5R0pEMVJyV3NnSEVIWUQ3?= =?utf-8?B?T09Gb0dFY2g1RG91eGpDWlNIcUtybkEreVh1UklGTzBtVjBscWcyR1F3STNu?= =?utf-8?B?bEp3SFMrMDRqK0lZa1RUanhQc3h6RndCRFZKNWNqZnE3alo3WWw1VlFJWmFh?= =?utf-8?B?T3c4aEgzckFUZDJDUWRhN05IdHB0djBHaGlYTGNLSk5PQm1oKzFNZGFsc0gy?= =?utf-8?B?UFVMVzZxN0llUkhRbFplalg1YU5RSnd6M2VBMTRlby9uMURoOVdCQmRTRTZV?= =?utf-8?B?MGRTVUJXYzlkeklaTVdkN2tydUJQV1hVZVNDcmR2WFNVVk0rckJCSGtHSzdt?= =?utf-8?B?Nmk1NzhvelRyWDllem52SU5PTTU5eXU0eEVYUXQvM3loN3MwZ0crZ3RBWEds?= =?utf-8?B?SWV6NHR5cEhRd0h4Z01KVUlDQzdpemRqcWNnZ1JlWE5LOXlNOWc4RERoVkpU?= =?utf-8?B?ckF1U1Zkb01YSXNjOEt5SHBtdElGOVZvN0x1a1BXSUdQYkhQZENYVXhIU2FG?= =?utf-8?B?dFdwZGs1dEp5SUtMazNpV1VwcER1emk2cjFsUFNSaTFmUnN6dzhCWmRVSXdm?= =?utf-8?B?eXhVbzV5QkZjbW1UUWcwL0twTi90L3dIZG50SEliWGZiRmowSWRMT0FoU3Mv?= =?utf-8?B?bzVKRmN0MHA1S3l1NEVaZkNXQXhsQmFva1RadmpnNW5XSElEeHBlbXZLYkFU?= =?utf-8?B?a3RWWE44eWhGNWFSMXU1Vkh3Mnl1SERSRmVUbUtXWUJrMjVrOUNYRTZzM3pj?= =?utf-8?B?U3RqQ0EzV05DMXRPbmhDb2l3blBQTCt5aXo2Q3BLQ0d2TlBNVTdldVo1VHZE?= =?utf-8?B?Rm1aNGxIY0pIcEJxcWNFbDBuOWhCTTIvLzZFUW9TQktST0R2RGR2QmtvMFRC?= =?utf-8?B?WHJOSW9ZZlY0NXhRVzRhWkxtOGR0Mi9MRVZ1V2JvUDlaNkZHQkpzMGhOODB4?= =?utf-8?B?QjJWcVJqN1F1dzNqWjBuQWpZcTk4d2FScFFGK0sxeWVUb3YyTUxQalRnQWd1?= =?utf-8?B?dkJ6R3pvVTVCZ3BJa0hOY3h5TlhzS2tHdm9GcnJZY3YyOHA5d0RlUy9YazNG?= =?utf-8?B?RUF1SDV4b3M3SlE5cFNZRzZXb1pwQWt6L0RwYmJHeUM4a0RnUno5d3Z0VHJu?= =?utf-8?B?OXhQOGVXT1JmL2JmWWJmQ3ZNVWlqUmFOL25MM1dkaEVteUU4L0x4SVdJVjVR?= =?utf-8?B?TENBcW9vQUFHOGRDcStUb0VybmxBYlF3TWNHL3FDWDNuOEgzOG9na2tNVmcz?= =?utf-8?B?Qm55aWtmU2NJbWE4bUJFS2hUdHhqZ29nZFJIa25DSXdEZ3hGYVJZOWlrUXhH?= =?utf-8?B?MWQyOEh6ZFEyc0NBYkxOVXI0aGJYa0c2c0RMNlZaQW5YS2tQa1gzdFBhM2RF?= =?utf-8?B?VXJNcWNtMUR4dk53RFo0YlVtR3lnaVhJaGlFNTA4SDZyVlovbG5vSm9keTJu?= =?utf-8?B?bmwwQU5RMnBDUVJLYk53ZHBvb3cwZlZ5YlQ3OXZyTUxwK2tEcmdQUys2Z3pM?= =?utf-8?B?dk9rOGRscFRNd1l5Yy9hTUhkb21keTJXUUVsQzFORnl5RGV1aVU3UkhRUnpP?= =?utf-8?Q?NufqFd?= 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?eUxpK0pBWlVJV3ZKSW5aMTBUWWt6U0RpMEFsa3RRd1BwaE04RXdSWlp0Z3lk?= =?utf-8?B?THZNeWFybTJmaHg0SCtxMGt2Yms0RFZ0dCsvM1VXOExNVDUrN1RnTEIzUGFE?= =?utf-8?B?QXh2Z3ByZU44anhRN3BNZkN1Z1BXbTdMMjc1c21PQ0RWRTRxaUo0bFdISXFq?= =?utf-8?B?TFMzdHBjdXFsTWxnek5sajJtY3FUaDh5WlJPb3gwaDdpSWMzRDhjYitoNmVZ?= =?utf-8?B?SlRQb20xTzdUNk1ncWJsTGRzR0kwZVdiZW94MEJWaDVWT3hEelN3algxa3ZJ?= =?utf-8?B?NnQzUGhJOXFXOVAzQlN3a0luejVyVmxXb2s3NklEMHZlUXZBeU9FSDVUYit5?= =?utf-8?B?dmNTZlBMbUFjMUtkd05yY2Z2V0FqTWpKdmdycjg4UGl6MVZKTjFSa2RkUzVU?= =?utf-8?B?ak1YdGp6a3drNWVYVWo0K01MUUhZTFBlblNFTFhTajZPekh2SDd4bnRpZU5h?= =?utf-8?B?bi9UeXRTUDZxeXM3azRSb1Nsb2hwMFlEVDNGNEZEOXpOUDZoZGw3K1hnV2FQ?= =?utf-8?B?ZjlOSUR5RVZlT0ZqRnlkdER6eGRSTGtjSEF4R1p5TGpMSlp5NGdjVld5OWha?= =?utf-8?B?S0tnSjFRQ3Q0UEVTSXhiSjZGMWxucURGbjkyUmtyWnJzbXJnS24vT2UydXBO?= =?utf-8?B?ZGRFMTJqYnp5MjV4SUlSUGNuRzZRUURJNFdZRHBwbEZYcWZDMEpiTVJFdlQx?= =?utf-8?B?dk9zOE15WktwYlFyellzRkxBekl0SlRJUk9uSkVWcytGdGtpUjZoaDVpWktP?= =?utf-8?B?bUliV1pNYVdEemZiMSsrMjhBWnRQbzkwMU5FTFNGUEwxMzlTMHFWWHRsdFMy?= =?utf-8?B?NmVPRmVTV1ZYZUtmTEpqWGtRSUQyREJmK3prZ1lndFo1UWRweW0rNW1PQWFS?= =?utf-8?B?VHBoak0vSUVVamd0YmFYSU5RQzFwcUNhbFJXL3owblNTNU5NWC9NY2pOQ3Zm?= =?utf-8?B?NWhGLzA2bWQ3aTJRbnRFdmNiQXNYWlhUejZPc1JFWDJJNjlHTWd6S0ZNQ2xB?= =?utf-8?B?VzZGQW84SktDcUw4cUVxT1RqWjdZM0JTNE5YSU55QVJ0SkZhRXFBZDk3ZkJK?= =?utf-8?B?SnV2V3lqb0hsVVczRGJKYm93RFRQUHFaUEh2TVZqTDdUVGxURUNTWkRpa0pG?= =?utf-8?B?MXVxRlBNQVhpcTNaSnNnTXh0cDFpMzU1VG94K1oxTVhzaWxnNTFGRkducEls?= =?utf-8?B?QU1tZVZrU0FxVTZ6WHFkemxRS0RMcmErYWVWSUd2VXJhK2JoT3dNd2RZNWpS?= =?utf-8?B?VEdFWDdCR1FlUDBIbzdHSDQwZm8vVWtSMW82VlpVWm5LdGlpSXJiM3oxQ2F2?= =?utf-8?B?TFhCSnJQcVN4MnZGQnNLYzdyOWF0bjY4WFlkRUxuWkR0a0pHOHh2Y0htcGpp?= =?utf-8?B?ZEVDYnBQd0RScjc4WURhUjZGSzhhSzRLU0wvRVg0VldIS2RIcmtEd0dQVGNl?= =?utf-8?B?SzVWQTIzLzBBZHdnSjJyTGthYWEveHN6SHd2MDBDT2E4bVJBeXlhaWk4S09p?= =?utf-8?B?SjE0Lys1czhBeE90WEdDQUZ4NmV2bHkwdklJL0ZibDlqM0dnWkR6bnRqU08z?= =?utf-8?B?TlBaWHV1RGtWMjQ4TVNYeUJ2UEZDQ2FkWFl0VkczUU1LQmlHTXB1cGNPOE50?= =?utf-8?B?c0ozajhtWXMvUEptLzNFbStBMGhpY2o3Q0VtSEVodlBjUkJUYlNMMDRISGM5?= =?utf-8?B?MndocTRabkdDTkRGekEyUFAwSDEwSEpxcFYxQWZDZmJVMFdJdE00TjJzTkky?= =?utf-8?B?bzJiZHB0N1piYnZ3Uk4rSVJHRDlIa2dJNXRMczJtZHlTWHB6aGZxYVdUSlIr?= =?utf-8?B?K0FUcVVTRlJCOUZxN1NXOUREbWtpNmRwL3FBOG1GekdLNmo3d2pYYit2MFlq?= =?utf-8?B?bzQweWVmOGoyQU5vUHJLMTJoS0xkOExxSkJtOFplSTUyT1daKzFMcWtBZHJN?= =?utf-8?B?aWhVSEgxY2lYQkFHNHp5c1o1cXc3MlFDUElIMFpLL24wUVFYTzJOb05NVHNz?= =?utf-8?B?WjFpVmNWVHgrT3J5bGhsYU03WnQvTjBmRytTakxqOXA5OXRpdVhLVlM2OCtR?= =?utf-8?B?aitsWnRQM0RRR3cxa0pYMFFSeXQxYXhjU2x2b0cwUXZFVTJHTHRlODRDRW9u?= =?utf-8?Q?am2UH3apub/BfM2fw2wW9D2Ym?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: c5ba8579-69bb-4010-b89b-08de39996352 X-MS-Exchange-CrossTenant-AuthSource: DS0PR11MB8205.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Dec 2025 16:13:29.4492 (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: jrGvtbVUVGBvSxSRIKIAja0dWLw6HPiZPZR4BXqcyWO0pqlP4vaSOpwtPD+BJaQ+SpyQhZZzIYRBeyBqarRwsw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM3PPF7468F7991 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjEyMDEyOSBTYWx0ZWRfX99hDAJrFfAE+ LsX0AzUj7zicXf8duUUBpbtOH5R4H0JN7whTO66fBsCPKG/IOv7R7glpw5ZEfiaQ9RGPZvCDUHO r46xR86K1INmtC/lbFmcZO1ph1ieCVjDWNiLipc8+Wxah6LdjxjTTllLuNtUL0QX8mKV1jxiRYp MHyy4tW1qyk7F2r4XSLNKuR1v1o4LaLiMZoImorhTRKeOZB5u8StgqXxhpuZWS3JwLhGxL8nJAw u9++8cvouS9AN/JABACJDM5QGudaWaL3Y764aryvgX/78niD1XCejJGUnAGnvswxGVIzkgHjoGe A4UCeJpfsSjTGOpk6ylp6Q+SLxSlGKo5QQcv80bzHiIKuVC8Pt3vwMURZp9dWrjFS/J+Ja5U4i1 WPBn8kbLP9O0Mnn3yEsrLzbHOM/YfQ== X-Authority-Analysis: v=2.4 cv=BKy+bVQG c=1 sm=1 tr=0 ts=693c3f2c cx=c_pps a=OsHIvx7z5txkqQhXuj38dg==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=wP3pNCr1ah4A:10 a=M51BFTxLslgA:10 a=i1IsUcr2s-wA:10 a=VkNPw1HP01LnGYTKEx00:22 a=2AEO0YjSAAAA:8 a=4ZPe5lWXlvbldCu1ft8A:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-ORIG-GUID: SBDU9jBKtgJopJuTEydYA8WSSyUEsOXX X-Proofpoint-GUID: SBDU9jBKtgJopJuTEydYA8WSSyUEsOXX X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-12_04,2025-12-11_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 spamscore=0 lowpriorityscore=0 adultscore=0 impostorscore=0 suspectscore=0 bulkscore=0 phishscore=0 priorityscore=1501 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512120129 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 --- 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 35a148abbed..f850da7acfb 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. @@ -73,11 +80,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; @@ -89,11 +94,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 b4dd4e173a1..ef8ff0cac24 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 @@ -84,3 +84,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.49.0 From nobody Mon Dec 15 00:34:36 2025 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 D90A6288CA3 for ; Fri, 12 Dec 2025 16:25:17 +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=1765556719; cv=fail; b=TDEtdH5lel9cU/jjFqBcpZq0OHsqaUSMJ0M/z/Ff6lLFi0nHVGzQZMfAwXzcCwWcpRPOEY1dZKIstnGYKAhjjPWN2ymg2RYAN7Ah/mUlAcQ/Ee9055c/EtuV4oleiywcum94YiwVUJtKvgE/Lg6H+3W80xbnEJnh9c7zx5TS7Xg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765556719; c=relaxed/simple; bh=mgGVqNGAtjmFDQo2qxqsOfeIUXqeDe3RjEKh8Z6V0XA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=p6a3lt6Gj/pMJKOSW4V45KxbiutUNE4UmDQ8uEefJSXLNg625jZPMZjhXuBecBw07pIiC/U3tc7jYZfZbMwxWi10pTQE/rSqwQZ99opaTCGuky3Q6uTpiMPl83djPHZcXANCwSVtPytUW1opZl4+N+H7isHtxcVUMr9RdI/qY70= 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=tZaa+0JJ; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=BTbqc3mS; 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="tZaa+0JJ"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="BTbqc3mS" 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 5BC1HxRv2471899; Fri, 12 Dec 2025 10:13: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=Tidwu4xWIuUwbRkz11CBAqSuqiDvoKTizfSYsIsn2qw=; b=tZaa+0JJrNNy 0J72IHV89p65e6BxSesMHaaag5TswfLIiGeLEqivbDUCNTDfJBXTqo0lr7EnfK6Q EWFyDOxViiVuSNP7v5cIX9KE2CjOccpvTNzTCkfEVwFBqI6CYdHAWIRTvSnZKIoz aGtoREpuAFTumfQutfzJ3VX0PEWPQXstaOIDSm3Du+bax2+0a4w9gW/7wOXo65qC FKEQEBvDFoJ/vgTYtod5K0HPvgGsTWQI+WfmctqNOkPKEVU8CYyjxUNtokcor6/t HzgxyBQjRUTqTZOj6wCxvWIEYqBgvYLCK1XDhUrKXLq973fjOuyU9qijh91YmO7W ghVGsmlA7g== Received: from cy7pr03cu001.outbound.protection.outlook.com (mail-westcentralusazon11020120.outbound.protection.outlook.com [40.93.198.120]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4ayht2mdet-2 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Fri, 12 Dec 2025 10:13:36 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=kSuAD+8KPsYCtw3ImJbbroEXQnKRynh8av/8NuIckprSwyb5t8doqA+3P75P2PKlg0+pu22DQZdE+hq5ym1qQ+ZCackrzCknO2aRBPJC4ZbJlb9dCCRIIAV5amUdXaEc6rFJZvp9EI7CSMjZEh7g49HJEFnzQaQ6KV/zuu3yPhaJPVQsy9Vz5cjmIWHoUONTeH39TMgrYk/fe1CuaDGTrF7fUkrnD1+w4CBhKEeizJgwmR1t/lxtHjkP2b/GE9wjRrgcaeyJvFg7kLNVe2qm0Cc5H0OTyF/GB4LBWxLlUG6pHSQuJaQUYcc2KizUIlVn4dj2hqWBySXjJlBSqfmVUQ== 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=Tidwu4xWIuUwbRkz11CBAqSuqiDvoKTizfSYsIsn2qw=; b=STmpV/2YRh39jpT0F4R85nZr/3UX3Obx5Vh/QSHTtVF8sRTVeKUulYHqZXjtv5hAqeSRM7JWOto6r/d/0QSG0XQmTbniFIjBWiBYlsSAHLQtFgXq5bnLTwA2kNoGNKO2cqsb0RtytP+CAskq/KA6ETKaVFoQHZIIC+/CgKJo/yyM/9VTAjzVK4mDG7Q6U6EWZ5pSy45EPo93FnYp2VBAO5adr5MgdRRn/8llxK45xEMkbBqg9qJttYs0CET4B8yyiAWexKGotcCapgeQVk2qpDKr6dOgbUBTh+4kmntf23Rp24DoPX+qbHzue3lnopzlBgT35+676EANAj82yT4GuQ== 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=Tidwu4xWIuUwbRkz11CBAqSuqiDvoKTizfSYsIsn2qw=; b=BTbqc3mSZc9xjatB/LLoeSzwLUkPkJUmDB609gDDydOFJl/q79UhhX1DioZy84zU3O19LCqZoWAF6lImakuuBnYsKBKFL9iRCuyCCXbgXj9gWYDlBY0uWSAwkCYwWOSc6P26SoTJpINl/Vzr69Hmtklwkmk/tM0XTzYbmeXH2q4= Received: from DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) by DM3PPF7468F7991.namprd11.prod.outlook.com (2603:10b6:f:fc00::f2d) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9412.9; Fri, 12 Dec 2025 16:13:30 +0000 Received: from DS0PR11MB8205.namprd11.prod.outlook.com ([fe80::2de6:bc88:2af7:3583]) by DS0PR11MB8205.namprd11.prod.outlook.com ([fe80::2de6:bc88:2af7:3583%3]) with mapi id 15.20.9412.005; Fri, 12 Dec 2025 16:13:30 +0000 From: =?UTF-8?q?Damien=20Ri=C3=A9gel?= To: greybus-dev@lists.linaro.org Cc: linux-kernel@vger.kernel.org, Johan Hovold , Alex Elder , Greg Kroah-Hartman , Silicon Labs Kernel Team , =?UTF-8?q?Damien=20Ri=C3=A9gel?= Subject: [PATCH 11/14] greybus: cpc: honour remote's RX window Date: Fri, 12 Dec 2025 11:13:05 -0500 Message-ID: <20251212161308.25678-12-damien.riegel@silabs.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20251212161308.25678-1-damien.riegel@silabs.com> References: <20251212161308.25678-1-damien.riegel@silabs.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: YQZPR01CA0176.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:8b::25) To DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS0PR11MB8205:EE_|DM3PPF7468F7991:EE_ X-MS-Office365-Filtering-Correlation-Id: f2ae46be-84eb-4e6f-546d-08de399963cf 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?ckJha0tjZ3U5eGszdHJBZE00NGpsQ2RucWxXT1JQZlFNOEVuZkZ2S0JvWk80?= =?utf-8?B?NGVLanMwS0M0Y05XdkVnNDNxRzhhcUtvb2MxOGpmR1ZMRzFNRkY0WWFUNzhh?= =?utf-8?B?RmRuQS94MUNRVWZQUUxBcW5OY3JmQUlHMFhpUUY5R0NyejkybTN2ek03TDJp?= =?utf-8?B?NVhPMXg2Tlh6ano1VllYUU5DdGVEdjlxS0l0cVV0enRtVElsazNudnJ2TFEw?= =?utf-8?B?M3NxaGpuN1NBWi9JMFZtWm1TTnYzd3Y5VUxTTE10MTI2OGhudVUvM2ZLVHZR?= =?utf-8?B?a21adnUzbTlidHU3djd1OE1ucFFOM3hucnhRbG5wRlhpSXpZU0JjWlBiUTlU?= =?utf-8?B?QWkyYnp5RDVCb3J2TVhmTTg5TmNWRTc0TkkyRzNIS1dta1dRZ2ZXOVphZlN2?= =?utf-8?B?ZDF4K0hVY2FwQXg0Tk1WT2xRbUFaY1NFQmZsMFJGaW9saDA3cXRucTA1UGdS?= =?utf-8?B?ZndhOFlRMlErb0k3WFhtQUZPWWlLVk9FMjVQMVh6WSs5WWE4T09jZzE4Qi9J?= =?utf-8?B?Q0duWVNhdUhCYkw2V1NsL1k3YlhSVDhEUWZKc1NWdERCVjNnNitVcFkxSXVW?= =?utf-8?B?YWxIMVBXSkRxbERhK1VpV0txU05xc2pzSCtxN0pUZERNblAwSDh4MUZPNFA5?= =?utf-8?B?SGZoRHRtZEo4ZUs2cFFjTmhsMUJDVnJlUldxNGg4YkRMWXNTQ2Fram9nRVg0?= =?utf-8?B?YWlDR1RDbjhmYjVxdFRoQllDS2hrRTgzK0xZaCt5NU9zU3dObGlpSkNDM2VG?= =?utf-8?B?Q3QyTEFlUExoUmFDRGpvOWFlS2oxdHd0T21pbE9OTklZU1pxUDdQcVJ0NllY?= =?utf-8?B?UVoxWXVsYWw5cDdBa2FnUnFhTWU0RS9oNTY0RGFsRC9LamZoR0h6KzYwd3JZ?= =?utf-8?B?VGZqcUFIN3ZFNy9pUUxnK2dZbWEzUUltV1I3SmtucXN4cFVDdU13eUszL3VQ?= =?utf-8?B?bXRaM29reEp2NkI0K3lQNXVwa2xWbkQ5bHVSYmFjVjF6NjVyMVZKZ29GSVNP?= =?utf-8?B?ZC96eHBWMkdBbmNjVFlqRzM1d1ViT3F2djJldC9wNjRoNFBmckpFY1gxRmVr?= =?utf-8?B?VFZwV1hvdHBQVDB3TVpJSTBEL1lJMm11SnRtNFMreGFOYkk5L0xiNXp2cDVP?= =?utf-8?B?Q0JzakRyUk9HR1Jqd0ZhZTU5Y0MrZWlSdUUzWHQxRjdkamVIZ1BkMXVuaVJ3?= =?utf-8?B?MmMvREtySmVVNmEwby9iVVFOTkNYRTQvaEx6ZWN2QzBYOXV3ZSszbEp0cVV4?= =?utf-8?B?cGltaXVKM1FMSXBVNE5XM25lVmNMRnM0WGwyWkxNVTBEa3NtdjFCempqSHdR?= =?utf-8?B?QnRUeUU4aElydWRXQUlYVE40QmZRYXIybkpPenVVa1k1SXdJM2pObnBKMHo0?= =?utf-8?B?bnJqMnhJVVRBQThmTzBDL0ZubHVLazd6ZS9SSVJ6SVM1Q000eVJEcVMwbmJa?= =?utf-8?B?VGZhYmJxMVczL2FRNnRoakJ6ckJ6eDJGRmRUSlVRaW1aZFpuZHJNQTcwZVBl?= =?utf-8?B?RTlYeitRUzhvTlBFMklKNzVvdmFhTVhiWVZJVTdQQTd2L3dtNzlHdHpYdEZa?= =?utf-8?B?K2NKOE1ZaVJlWWRDL3RqU0FHaWEzTE5QeXpDUkNlbnJhakpwcGhKaGtjSWhN?= =?utf-8?B?NHozaitjTm1UTzdZanZDYlpNeVp6UnNENFV3NEpKajlrTzhCQkRRMjhXemFI?= =?utf-8?B?VzhIRW5qbFRrVWVkZFNleHduUkxnUFFZYUVEdEFyelBuV0Q2MmtqbjNuSWtt?= =?utf-8?B?MmtqMTJZUW84ZnpRQkY0TStWMGVaaFJ2b0J1QlEvYmxpMVM5UGlQWDdpdSth?= =?utf-8?B?VWpFQzVPb09jM1BBNjZaeENDT0FTS2NwTDM0QXFKQytqZHpaYUpPMHFtaThF?= =?utf-8?B?QTRjVVVGWEdhTkZhOEViTHVNK3Nxc1FFMlVLU2YxaFlFckhUVVpkRk9NMW9D?= =?utf-8?B?cVJORlJGVUMxdExtUm5Da1dNb3FwWmtZbzlrTGpnaGFQbXQ2YXN5K2NLVUV1?= =?utf-8?B?UHE4bHM1KzlXckl4Z2dKT1pGUnpub2RKSW8wTllUQ25WbXpPNlk5OVgrcVB5?= =?utf-8?Q?rP2x7b?= 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?MW9xL3BBTks4T1Z2WGVwTXR0Ly9UZDdUaDJzNzI2c3dYUDREb0lFdFhJUU5D?= =?utf-8?B?dncva3diTXMwMlluWFB1VkVTcEVldHlsb1JuekZJU29NMVk4ci9KMTgwVnc4?= =?utf-8?B?aWFmNisvS0dCWnFFMHpkV3ByYzRuRVNtRStYeGFMWUd6cDI2endtQll2SXo3?= =?utf-8?B?b2pwa2dzQ29wdGZKNlNRSG5nU0xsZ3JjRjAzalZOVGl5VzdVVnZON2dUZjAw?= =?utf-8?B?K001U0FFQjlYQk9BcDFWRmUya1gvdUl3V1RENDZrajVIR3Z4YjZJSDhFSXNZ?= =?utf-8?B?Kzg5YVRkSHl4MUJ1VmF5WU5oUkFwM1VhNXFMbCtzQlR2dnBYMEY5UlRDUUoy?= =?utf-8?B?b1RqNVV0UEhtZDB6djBONkFGTlRKcVJpZDNsanQ5dytjdjhOY1NhMlcxOWVk?= =?utf-8?B?dFZRMldLSkoyS3JsNXo0SnlxbnVSOGh4dUNpQnBzdXZlcENWb2JSZ0tTOVFr?= =?utf-8?B?MnloSFJyK2tkMDN2WHZRYlJkUmloMFNwVzA3Z08xUStyM1VHVFFZK1pXSGg1?= =?utf-8?B?YTQ1Q2ticEZWMHhNTTk4NmhISWV6RHNJK3VLU0VBZmR6czByRTBxdVcvcVZW?= =?utf-8?B?VzF1NWd5YlJPVjdZU01oS04rYnhBVlQyTjdmQ1N3cG14S2dvcXNQNEpOZ2hX?= =?utf-8?B?R3haYURDZU4vY2Q5OExSSHRRK0d1NWVlam5MVktsZEtzbVZyUXh3UmcxUDVv?= =?utf-8?B?SGRhNlgwVXpjUDdpakpYNG5seWs0KzBMYlJTc2xzeEMyUHVBSUp4bXhzWGRN?= =?utf-8?B?YUcwWWQ1SjBTNnVLeDM0V281M1Q4QjdINHVBKzZTK3AxdU5uVU01WVBUK3hQ?= =?utf-8?B?ejFMQ3VwSmhKSEV2YTFiTWFLaUZPWkxXVndCVVRldnFJTmZ3Q0FheEtRUHZ2?= =?utf-8?B?cXFVMkgwcXNxRGxwamErWmNaWU9VUUVZU0NjejJObVRoQVViYSsxZTgzWVR6?= =?utf-8?B?Wm9kNFhwcGRNRENkcU1zS3hYWCtkb214SEJoZDJ6Tm5mWW5WSmd4Q0JVMFZV?= =?utf-8?B?ZDQxVlhZOHFQMFFTSDhkV05LaHFwL2lmbmhxVHMrZDJ4eVdsSENTTFpDQ1Zr?= =?utf-8?B?Y09iN1dXSjIrQUtBY21BWVBrbHh6Q0VqdnVYSENnd3VpZVh5d0NJRHRPVVE5?= =?utf-8?B?WDlSc3pGZzl2T3N6TGErdnBFcUgwQ0xoTEJac3c4VC9BT29idStDaGFBd1Jk?= =?utf-8?B?L3lpMkdoSFhMeE5sZEFnamlCQU9qQ0RhUU9XSEtXLytLMG5MOWFIejRmaEpa?= =?utf-8?B?SDdCeDI1bUFUNEZIMzFFMkh2aEpFMkFQTDRqcUR6YkF0YjA2dWFvdWZjVEFq?= =?utf-8?B?dHRodHk5L3M0S3Q3RDZvRElDaDNpV214OEhOZElNd3pLaUxTNTh1cmlQczFC?= =?utf-8?B?a3NPd0N0ME5pMWJpVzhLTmFONkY3dVZFQy9qYkl0THpBdFd4ekg1YlN6cFBw?= =?utf-8?B?T0p0eFhJNDEvOEZZOGxvcm12b3EyQmp2eUtjdDlwK2hJRDc3akxIQVlYb1hY?= =?utf-8?B?cUFlOWZzdHR5dHNWUmhYZmZNU1NkbkMvaUM0UFM5VGFxWXIzcForbnJiaG1I?= =?utf-8?B?UnFOWGF5cldnemIybXhJSzRXUi9wV1NtcysvaXNZQzhZOGs0SCtjVktKa3Y0?= =?utf-8?B?Y1ZrUjh5elV2aHNjeEo3TnVWN2ZRTUlycWRuazFWaDM3SzN5bzVicjhldTVL?= =?utf-8?B?dUxVN3RucUJvaUNJbHd4VG42OFM2TFF4bFVVc3JoNkZNUHVhc3lyS2xBbTJN?= =?utf-8?B?V1lXRnRyZytjekFBOERMdFA4QnNwMEpkWGlJRXFEUjhKcm9iYmI1U1ZGMFph?= =?utf-8?B?ZWJuRHRVREpNTlE2ZnV5OEFDb3pyUGIzUVlpNkY5WFJtdkFFaXVla0lnOUdo?= =?utf-8?B?VVhFOEVicUlCYm0rNWhzbERZRFNJeGNjaFFGYVJNbHJiZlBkaWhWdkVTSVI1?= =?utf-8?B?MGlUWG9jSUhhcGlJRlFYcURFU0dQbGdrNHBQQVdCdkhNNHJtOHdUSUJ1NDR6?= =?utf-8?B?TnNlOCtOUkJmdDNsK0o5b0pNYlZRaDlBRWQ3MnZnbUlXSEhQQ3RHVlEvUk9Z?= =?utf-8?B?ekgwdVVsWGJYTTdhVW5Va0k4QTFTQ0dvcnBtNVlRcTk3THlaWVFKbTkvSnpE?= =?utf-8?Q?VtncVsd7X8s7eQ3a4LjNtynh/?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: f2ae46be-84eb-4e6f-546d-08de399963cf X-MS-Exchange-CrossTenant-AuthSource: DS0PR11MB8205.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Dec 2025 16:13:30.2017 (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: WC7+6xILhw1DVjOc8K/5Iymi0krXuQxQCgtow31RprtKGab/RP8za+qWg11pf+/dTQeI3z66fQRGdoez34tqwg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM3PPF7468F7991 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjEyMDEyOSBTYWx0ZWRfX0xmW6t8RV+fD PVaiU5boMNs2115eH+wlr2KuuhyIqPMjPLcfS4SuFYvktM3dNTl6UYIaQSBHDPM67ZdD9IAkyba 66ZGFrwpv9PuTHDPtcKytwEvQRLT7UaAUvZwVqWvJHvwEvFqR2UEjUUahF8Er9xjSab8x8zQkr6 7Gw0jb9xOiiQ4yJ4DAbg2vU9kSXZmPbjltvlCMuCMio+xnLiT6UKqkqgl3JkSdwDa0noTppe0uE MrSmHaEiZXGmiqxz+O7E+ovXo7YBF06nGG28enjJ37p4VHpx6rfy93N170lUejGASxsP6qctwg+ MiI2MZsPYXrWM+mVzkdHbuljRaL9x5nUtOP+tc5smW7sOxKkatWaz33/VgrCXaZvuRROSF/wKfP H+a9c94tjKea2PcJiw+iH01kePgYKw== X-Authority-Analysis: v=2.4 cv=BKy+bVQG c=1 sm=1 tr=0 ts=693c3f30 cx=c_pps a=OsHIvx7z5txkqQhXuj38dg==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=wP3pNCr1ah4A:10 a=M51BFTxLslgA:10 a=i1IsUcr2s-wA:10 a=VkNPw1HP01LnGYTKEx00:22 a=2AEO0YjSAAAA:8 a=LxIw55J96KH0fPlZK-gA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-ORIG-GUID: pejU08CtYg3MSajZf0hiCs6p8-w3xpnr X-Proofpoint-GUID: pejU08CtYg3MSajZf0hiCs6p8-w3xpnr X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-12_04,2025-12-11_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 spamscore=0 lowpriorityscore=0 adultscore=0 impostorscore=0 suspectscore=0 bulkscore=0 phishscore=0 priorityscore=1501 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512120129 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 --- drivers/greybus/cpc/cpc.h | 9 ++++ drivers/greybus/cpc/cport.c | 5 ++ drivers/greybus/cpc/header.c | 88 ++++++++++++++++++++++++++++++++++ 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, 173 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 f850da7acfb..2f37bd035b6 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..43038f103b5 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,69 @@ 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) +{ + u8 frames_acked_count; + + /* Find number of frames acknowledged with ACK number. */ + if (ack > seq) { + frames_acked_count =3D ack - seq; + } else { + frames_acked_count =3D 256 - seq; + frames_acked_count +=3D ack; + } + + return frames_acked_count; +} + +/** + * cpc_header_number_in_window() - Test if a number is within a window. + * @start: Start of the window. + * @end: 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 0c9f6e56524..053dc3707d0 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 ef8ff0cac24..b5de63d0be8 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 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) @@ -72,6 +111,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 = */ @@ -85,9 +126,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); } @@ -96,14 +138,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.49.0 From nobody Mon Dec 15 00:34:36 2025 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 9C3DC23ABBE for ; Fri, 12 Dec 2025 16:29:25 +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=1765556967; cv=fail; b=cE2vEBYC2tShQlIBoFIx2JffYPIODpQsqU5W2fBZfsgxeHaYg0nZg0EaiF5xh58lnT9y5ChFovu4vCrd2zQlAv9FN6J3H9gPUTRMswS+8gdmWrI9kzzn6mjiSO07Nj3lFvpMX5aqoQTjYcP9/h3J73ecccy3DKy3jxxEUB5FLzY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765556967; c=relaxed/simple; bh=4TwVMaEbzaqgKfu25QoLmZ58QUEv29F4uP31XwCSo1Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=cUP1Gvp/tetp6XBkQwIvPRvQv/TCXWYGPakhTdcv5zE5cVixg99bUkKo4JoO1VYqkzJgE4PwPzX1nrfajOyZiXwi/RQf5fJiTPG86zMdBIyGlMU/RYTXM5L/S7xXVh98TTm5CX7vMew6P0JL3BKZ99CqsdcFrP47swFXDaioFng= 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=stAHxUsY; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=H0D5Q9F5; 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="stAHxUsY"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="H0D5Q9F5" 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 5BC1HxRw2471899; Fri, 12 Dec 2025 10:13: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=To5zo8pux2Dy/S1u99tsF/n75NjPmFS7HhKApsnO2Rc=; b=stAHxUsYJHW0 KXt89pw1JWEbrubSZEFhHynqBXKc14NCKk63Nmkn4cm30GIZzZR7XKwettKKe+f/ ro++xXxC3d4YriBmXD97Vomqkh9UVvmLeQ8h6XF8UjRxkMnrC8jbGbX9/jMyzSzg z0e3IGi4umVr+GvsilyCtoSxPCoQ28nBFsM/gwHI9murancoqvE4nLZuNRionCw4 xW7nst+cjfTXpBa3t7Z6sBQJ8EbJP3UqgjoPA1CpLy/iN3nWXNUk79ikOkoKbX1A v1c2C+YRTFaT6X6YehMlxbJ5wZWs9WTv2vJAUP9c99UGUlVmPIsPlSDuw8wrYY7u fAFNFGQZVg== Received: from cy7pr03cu001.outbound.protection.outlook.com (mail-westcentralusazon11020120.outbound.protection.outlook.com [40.93.198.120]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4ayht2mdet-3 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Fri, 12 Dec 2025 10:13:36 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=kEtzpr/bUyjTkT1ZsSfuH7MKc5W72natN9PTNareGyFDpUuq6SbkjtR9JFnTdO694WCSdsfzc8I1pkpXNBU6zt2Ye3AQ5Am0GcbOODiBUoCS1FTfiDL2iPajF5tcArWuE6oBS70/OsL06jabFhLzq1zMY9XN8R73RPf2mjAuXo09awRxR5hQP5EnwTpyiU6zfgNio3DX+LWi93a31Vo7HfRUWj3QJZknpL1pS3TDffrxCoc+z6ShJ192/G+UxpjRSQnU3GxucGT+uG6NBlY4XTeM0xMtiYzAU3XEgiJXfaAgqs7dVniXySCRNnht78rJAYhtlqFM7uGaEvgZ2DlF/A== 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=To5zo8pux2Dy/S1u99tsF/n75NjPmFS7HhKApsnO2Rc=; b=U0QokAoXGuuaaQd7U1XhijSDDWEZa+FEPP5QsbhMtU2SRAPbz8kGy2RDjbzVkBkNP+ej/e5bpQCZPNzEwNMlY+MQBh7TT183H7CeFXcRgoa9mc9XZpA0eomxV5eOkpHMwdXfRLhxcMBZiK76JP734Q9vSeqPOgLPvKVK8R6CbTJAXR9sc597x4RCzsD6s+8Pzb2iWKh4viqkMRnJjVisx9abEW8d/IMS7XYYJSivxqKd8GsWnXrpma6u5sctaHsSfR+ZkTGGN1lu2dnLvC00ld0K1XcabX9LIju05WSLLyOjoAefG9jLGYgUGkc8nOHTeFnA1eY2eL6aoIcaP3O5EQ== 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=To5zo8pux2Dy/S1u99tsF/n75NjPmFS7HhKApsnO2Rc=; b=H0D5Q9F5W6qGIWuTA0UKYmkLpJ179amKmUEPK+IvsXLathccwTvYo55EChjAa+9M8czIqkntIqDEqGYivpEizX1DiJjl6SSgUrC0Jd8e9XzA2pqUj9S8v0apI6OnoKHulu0ww72Zr/3gi253LYTAoW8/zGunWfXTsuDHmAV6yxQ= Received: from DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) by DM3PPF7468F7991.namprd11.prod.outlook.com (2603:10b6:f:fc00::f2d) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9412.9; Fri, 12 Dec 2025 16:13:31 +0000 Received: from DS0PR11MB8205.namprd11.prod.outlook.com ([fe80::2de6:bc88:2af7:3583]) by DS0PR11MB8205.namprd11.prod.outlook.com ([fe80::2de6:bc88:2af7:3583%3]) with mapi id 15.20.9412.005; Fri, 12 Dec 2025 16:13:31 +0000 From: =?UTF-8?q?Damien=20Ri=C3=A9gel?= To: greybus-dev@lists.linaro.org Cc: linux-kernel@vger.kernel.org, Johan Hovold , Alex Elder , Greg Kroah-Hartman , Silicon Labs Kernel Team , =?UTF-8?q?Damien=20Ri=C3=A9gel?= Subject: [PATCH 12/14] greybus: cpc: let host device drivers dequeue TX frames Date: Fri, 12 Dec 2025 11:13:06 -0500 Message-ID: <20251212161308.25678-13-damien.riegel@silabs.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20251212161308.25678-1-damien.riegel@silabs.com> References: <20251212161308.25678-1-damien.riegel@silabs.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: YQZPR01CA0176.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:8b::25) To DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS0PR11MB8205:EE_|DM3PPF7468F7991:EE_ X-MS-Office365-Filtering-Correlation-Id: a45267cc-7f5e-4dd7-4b18-08de39996443 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?YnNJa0YzWHoxWVpFOVVDQUZOcUxQeHFCQXRieFhiMDRIUStEQ3FtMnpVZ0Vp?= =?utf-8?B?WUN3STJxbk95S1NQSnB0dWpWY2g5bkV0Wk9UQW5uMWZuM1NOVG9XTXNENkU0?= =?utf-8?B?bnFmTWhNSXNjWlBYZjlRbldqN3grcE56WWJMZE0rTXo4bzJzQmpnd3BqOThs?= =?utf-8?B?RGxxZExvczBRVC9xT2hQUFBkTzluNW54UVdIMXk4VG96VUU1TklVdDdoQ2lG?= =?utf-8?B?Wmp4emp3R1l5ckd5Wk52cEp3MGRCOTVVMm4yQTR2enR6Ny9xQWx2UVpBUHNn?= =?utf-8?B?cFhROFUxSWNrN0wySHY4VFRMK1I3M1ZQUFdOc3V4UmtuZTk3N2NNdjRwQldO?= =?utf-8?B?cGZ4VDk4Y0lYMmgybzlwVERWaFIweHBmQmJETzEvWStxWHJUMmZxWmRrUEVG?= =?utf-8?B?SzRXdTVWL3ZpVmN0ekR4emFWT3FxYnE2TVNuak5Kd3hEK1BLWGNOZ0RicThn?= =?utf-8?B?ZjYyc01GS0NVZC9Gak1yZlJ5YXN0VUhKb0U4NFNaZmp3YzFmaVkzdFBXTmRB?= =?utf-8?B?RXFuNWV4dGE2RWNkbk1HYWpLeHVoemRNd0JQWGtsc1l6emxORHNPN1NkQ3dy?= =?utf-8?B?MkNXeHhaeG5xYXhkV21iSXFlMDZpN3E1c0dPZkliejQ1cE93ZEUxYjc4aTI5?= =?utf-8?B?N2tBQVkva0NjUEVYLy9ybktJQm0rM2lJZ0x1Z2Z5bEk5Vm5hMDF2YVBSY2NH?= =?utf-8?B?Sk1zZHU3QmVGbTh2d29SdCs1YTVGV21JZTBlbHFMWGMrcVhwY3FZVlZPZXZw?= =?utf-8?B?Sys1VUpwNGYrL3ltc3QzcVliSGo5d20xS3FaaUNHYkNzUUVoZ2VvbTRJUVIx?= =?utf-8?B?bEt0NjdnMnFZeUJFZzdaMndWc21ET1l4MTFObzJQWlQ3OGVkR3hPQWlUb1ZU?= =?utf-8?B?dDRCM2svNnMyV3FDeGg3Q1BJUzFBZ3pNNzVyMVo1cWpWSHlxR3Zid2JVNDZa?= =?utf-8?B?aGRVUTJuSFZQTXZtaG9XQU45Nk5wRGVYWGc4bmxHT2k3U1RaMzNUNVk0Y0V0?= =?utf-8?B?VXloSWJ3UWFnMTJ1Z2x2MXd6VkVGQVdmL1psL2JrYmJXRmtzYXUzTHgvYWpD?= =?utf-8?B?TmFYNGV2Y0NUeDZ4QXZ0TTJJOVBkS0ZCeTVML1hwRU1nRTJwRWJDRnYrRHY4?= =?utf-8?B?eHdINFBTWHZHOVhVN3dUcnF1NlJoa2hNWWg4enFVSmdDVWlEQ3FBWnF6RHdl?= =?utf-8?B?U2J3OHpncnY3Z0tYbkdnWFU4SGx0QndTOU1sNjdkc2paMXkrQXRyajhkUXAr?= =?utf-8?B?M3RLY3NGRnFpTkcyYTltQ1FMWVh0NmY1Ri9ITEJaNEtWaStxYmR5NWNicGo3?= =?utf-8?B?WjlnbDNxUThoYU40ajJxT1VyQjgwdjZCZDhlUEV0SUlFclp4KzFsUUxjZmNP?= =?utf-8?B?MGdmTGFvM2J2YjAyeGl3cFRXUzhzNFpKTjFuL0cvenF3VDhwZnpoamUxOTBy?= =?utf-8?B?ZlE3bUxqZ3hKL0ZXbTZLSWZzeVhFdDYrOGR6Q0lSbXJjS29ib0F2VWkvbURj?= =?utf-8?B?SzZOeHVBNXlCY3NDbThsTWg5WEw1SXJvZmtlalhyT25TeGl0ZTJkQ2R5M2JK?= =?utf-8?B?cGVyL3R2RVovTkVNbTNhUHEwVEtWNG1Ydys0ZU53NFBnVUttVWhqSGFyOUl2?= =?utf-8?B?OS91ZjdJcENrNVFIeGpVdHNSSDFHTExsemtyZGFRZUtFdWtxLys2WXdWbXRp?= =?utf-8?B?UmFsaEFLL1B5YlVmd1E2c244MTAxYjh0dEFsQTRkRXRNc3d2bXA0cThEUm9w?= =?utf-8?B?ZlRONkdSNDU4YjFWamJWMml6WXRlMmN6QUVrR0FHMnR3RklhQWx0MXZUbkNI?= =?utf-8?B?YW5TYW5UUjJkTVo0ZFFXeFhDaUJnc0l4RGF5bWRqMytvaTJWWEdBMmxVdXNz?= =?utf-8?B?am1ZVUNnVlpzSGFGeGNMcW1GdVQzalZNRzdUY01VVkRLNzFQRGFKK0lHbDJN?= =?utf-8?B?QXVmUW5UUldjdVh1T1FaR1lrTFBrR3Y4eDRrc2E3SmMvenNUTXAwYi9JdEY2?= =?utf-8?B?Sm56VnJkd2xrdFBOSlRGSWNPc3VWZGhwMFhHcXBNVWFHS3VlQkZRMThQOWgy?= =?utf-8?Q?kJ1Y+h?= 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?TU1TRXgreDEwbUgwKzRuZm9ORzdkSHFkVHBHaEE4VTFLOG4yaUhxbVBBYUxy?= =?utf-8?B?QjRUVXJOOXhsVVZ4ZWNhNEF5ekpuRndEQ200anVmdUc1eFdZL2pldW9DY2Jm?= =?utf-8?B?VGdBa242V2ZNcHZ4L1hKUEdZMm1oY0d4Mlg0K1ltVURscFZXL3o4TDhtVHFE?= =?utf-8?B?WGxvcjJNaWc0ZU1UZ1JZeStUWWEycUNtOEhKWkRuWkh3b3ZmTlJGbW1PSEJn?= =?utf-8?B?Y244dXpMRHFBMjBBWmpzTEFCRFBScm5HSlJ4ODJUd0I1YmpDV1k5S2lNRmxI?= =?utf-8?B?UTgxeXRkbE1jQkt5VjZQK0I3OXV2VlZuRzBWY0ZSbkdwR3Z0Sm1rdHJ1dEJn?= =?utf-8?B?VjV5Um16akVwZVZDeWRIYWo3OGFkODVOaWZDRmhOcmIvMGpzOFIyMkYvL2Fs?= =?utf-8?B?M2NJcTBBeVU5NENBdWhES0FwUzAyUzJncWJhUEZRZkJQejF0SC9TaFpiT1FJ?= =?utf-8?B?ZXlTbXgyZ3ErckNVTDE1RjBybm50Y2lHbERmbnNWRjJBMUhEa2NIZS9mTDlj?= =?utf-8?B?c0h0emVXWWdaRHZXVmFYSFZGWlFVM1FzMEtPVExkUjZFOG4xb0cxeitYandq?= =?utf-8?B?NTJ0QXpnOUkyNXRobEtTRitWTzhRVXNrM2hETkpiRk42OU52OUlKRk9VWlJI?= =?utf-8?B?K3ZqZklWL0lDOGEvdjZWWjdsT2FtOWZrVnFUT1J1MXNRWXVXU3BkTmFvK0JX?= =?utf-8?B?TnVlM2lnaTZLanJkZ3Y1MlE4RlUrTUR4U00xYWh5T2xaemVwQ0FJRm94eFNR?= =?utf-8?B?T3p1Nk4waUpYTkVzSURyZVJZMjFUSWV3Rzd2aUgvSnRRRWw0TEZNcFJxbmFz?= =?utf-8?B?bUZ5SFJGYjRWYjRGTVExWHFVTnNBL3VBMEpnQ0d6RUtxdlZNTXVrRThBQjlJ?= =?utf-8?B?UkhReHRFTG5RaXV1MzJKRWg4OG9pK0J0SUEzL0hyZHJVZlNkZTNNQUhZMk5r?= =?utf-8?B?MEQ5dHB3LzZ1Y1dHQTBnR0V6b3JtTVVCeTlVQXFjL25FeE1UQUVDVWY0WThD?= =?utf-8?B?dVFUdFVQbkpTMkk2Nk1hZnJqeG10NG1SbWppaHlkV29WRWdKSktXZTF6anEw?= =?utf-8?B?TWh4N1FvUHNTZWFnL2hSY2FVcUtkeDJHVi81TGNLZkFwbXZpeUFucnY1ZnFK?= =?utf-8?B?a1U5dlhuWE9aQWRWTE90eXI3L2RJUlM3K0ZINlVjTkNlZkNvYVNnSWZlWWpw?= =?utf-8?B?RVgxcVNOQ0l6S1N2OUxHSVQzQ0lHbFRjR2cwZ0pYUFd3VCtPQXNWYXl5WW5u?= =?utf-8?B?bVBnYUJBQjlRaXoxM01pZmI5WFlKakpwbURiWHUvcERXZ2I0TlVTZWJJMU5B?= =?utf-8?B?UXpYR21ab1VUd1FLWVhqQ1NETW05VEVQeTNOc0FVZmZHU1YwR2ErWkNseGdi?= =?utf-8?B?bmVmWXVmZ2NxZlVHeGxJeUJMQXp5YkNDR0JxakllaG5SRklOa3BCRDhId1Zv?= =?utf-8?B?Wm40WWRBY0VoN01HSzU2Mk5TVVU0TkFYU1Yrc3l2eHhMOVFiUEtmUDVIOUVx?= =?utf-8?B?UVVKV2MzR3VtdXpwRzdob21Lb0l2ajRGamxVL2tmQ3VTM01oayt0TXIzU1pq?= =?utf-8?B?NUNlbXBUY1JRbXhZeGVGK3hwVnZ4WFFCK1AzWnYvREdPSUp6QVRzTmZYZURF?= =?utf-8?B?c2pQZm9FSmFDdm0xR0ZLNE1QcUNsbW9mbFFodXFnUVVpSDRWWlJ1WUlHdERN?= =?utf-8?B?WFprMEIxYVdReklxR2I1ZVNVQ29wQm8xVkJONzREL3hWK0NPV1hYQXNXV3pV?= =?utf-8?B?ZGsxMkVxNnZPWmxZcG14N0hTSU1WTllwRkhpWXE0WktmQS9Fek44bzgwaHdO?= =?utf-8?B?NEtUNDlqRVRqbENTdlpIS1JPaExySmhnN28xVllINSt0K0lIY1VpdXZVUWRk?= =?utf-8?B?d0wzUi80M2Nhalh2ODdPaFZKMWRiS003MVN4K21JQnpQWnpTOUZHTDdXK1hT?= =?utf-8?B?QW5Ia2owMmNHZ2t6NGdVcnJoMlovRHFHVksyekVyZmpCNkM2YzlIa2tqU0dX?= =?utf-8?B?V3NYekdua240NEN1VkVFOGswSUVUWktDRUpWQWhwOWNIa3hXZm5xQ1FrMEFx?= =?utf-8?B?dGI2TkQzVzVpcTRpTDk4bjR6dTF6aXBuUERmdHJLSHFBZjZCRFNYMGVzYjlZ?= =?utf-8?Q?11eSFYMeBy8QnSN0tDSNRN3Bk?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: a45267cc-7f5e-4dd7-4b18-08de39996443 X-MS-Exchange-CrossTenant-AuthSource: DS0PR11MB8205.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Dec 2025 16:13:31.0294 (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: FG37I4wO7ZquYAcGBOu5fijRisay4OHT2fnWX635TplIZR1wI8EIQvqI0XbGoDCX5Mx2uJ9jsN8GZ43avpcA3g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM3PPF7468F7991 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjEyMDEyOSBTYWx0ZWRfX3GzXridikPPP qs7m4nvFG2NhXVvKzVKuTIjbvVqpelPrket6HWtlUIpA713iWQbw4yaAD/aRxLkdAuLWBpqJWj+ kjr/MtiampDOLlr2nrElPGi63NdobUX84nU5PYhJl+F+MWhOmp3/fZUjkPY4J54nTorX1u8Fm2G 7d5ArOBes3xz+LVD8eA8kq/iRqS6eYYjsR5D16HNstI7vwRYS4oQLSreCSGJv2pW+guT5B37zUh FKDfn9slMo0//GIn2ABvy7CK8mi8j8JCUbYeU5XFWO5zZDt+J1kJml8mcj7av9J6bmRT+qdhTwc +kWz85OL11RixZZxLwtSXNNcl0xqoy5Wp/gIL4FkODPDGuu4g+6rllN60McmqofEhV9I/Z9SyPz VqLBuWJYU5P6eq0tH651C5RCjib5Cw== X-Authority-Analysis: v=2.4 cv=BKy+bVQG c=1 sm=1 tr=0 ts=693c3f30 cx=c_pps a=OsHIvx7z5txkqQhXuj38dg==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=wP3pNCr1ah4A:10 a=M51BFTxLslgA:10 a=i1IsUcr2s-wA:10 a=VkNPw1HP01LnGYTKEx00:22 a=2AEO0YjSAAAA:8 a=0-yszGi1pw2bLUArnyYA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-ORIG-GUID: WM29DcWpE4jgpE6jdHr4mhJkLyzISbNg X-Proofpoint-GUID: WM29DcWpE4jgpE6jdHr4mhJkLyzISbNg X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-12_04,2025-12-11_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 spamscore=0 lowpriorityscore=0 adultscore=0 impostorscore=0 suspectscore=0 bulkscore=0 phishscore=0 priorityscore=1501 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512120129 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 --- 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.49.0 From nobody Mon Dec 15 00:34:36 2025 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 B6CD42C08CB for ; Fri, 12 Dec 2025 16:34: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=1765557258; cv=fail; b=HqqmSHwQc5Hd7qrAL3t9R6hw4kW0aBm/UY1txb40pfCzFhN1kBEZPDcuR6chhd1Q/CNkOAimzcT4kCJzUGR8z5huKn0b2OdHdxbWGAxUz5GZYX/desSr+Gvvw2b69Ozj8RQEoHEH6U1khPtS51G5/Db7FvMt7hHsa2wuZZf0RqA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765557258; c=relaxed/simple; bh=CuU2I0MqHFtIlgbLJIy4kRsZmQG9/Lc8ueugKEgd6CU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=XaPfy8TmFBnPqXpCQDntYEQ1iPKMfE0pPDQEFzJtofhfqxPcDKZvS20kPiVc/oA9v47NQQFSJRF0iCLzKdbiKZOvv8yEtLa7Q3Ueq9XTetn6C5ZGTpIJYWbGYYHiZMd1I7xrqruVGESSY0qhwbv0woApAiuJ2bbio2LNEnDZKHM= 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=bgNHPGL7; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=Sz78Qjm9; 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="bgNHPGL7"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="Sz78Qjm9" 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 5BC1HxS02471899; Fri, 12 Dec 2025 10:13: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=HEIJNVwA5aLG5LbLOYdeWvLIAHkyZ5Mi0DXjXMbvbtA=; b=bgNHPGL7hjMa SeRQv+p7IJfBmUPCm6/RbGj9PjMXGaRtwMO8cBq7xWCJ+jfUqWx5z0O9nkpHQdqP xGCNS5uZ/wuG4Ib0uO47nkCjrvh8gZwQ8BbNSG2MF/9q4JbkhwGd3qVYCYdWCrAK wxNwL0EFYutzeiIaJa6R+Poa0fO8vDgHcDXy/FlidB9q1eKYmdQhB6lbkAVCc0lY biqYthAf0hBpePR2mnSJ+MvuJPwbX1QflF4QEQY5QtlMszgiTtAzcxt0f+SkHP1+ PaMwmUR0I7qcxsHAYeRx6+f++swkAYcclrXAj+gHW7rACbDSn4DKbb4yJd/5IDeX EwXjHB47hg== Received: from cy7pr03cu001.outbound.protection.outlook.com (mail-westcentralusazon11020120.outbound.protection.outlook.com [40.93.198.120]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4ayht2mdet-4 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Fri, 12 Dec 2025 10:13:37 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=yAgEnHYJKFgbk0hvx4TFvgY9i6S04xn/XnHz0wRu5ogdkQ2xcEnnKS9p3q/UAPqVT7p2WDZMqG9yAjoRh+DwQLu1R08hFYIuF04+SWtY8bo4Q0YYMQxIRLkrS0mhQbvwq5r/yFa3ZnNrcZNREUj86NBIu1oTk6WKtTpPJZ2zIUXkuqAM9DSBhh6BV+5ha1XWhezaIG6OUAkPmddGbgqTmpZc/b2Ds668j2nVNIDiVnjlsMT/yJbo7Tj4l//LKdqmJHbRcmDcCdQiDgOHbb8XF3tGPXmkW6XS9/lSpxww6aZsyrMz/SeJiH53ccR9sm9xbtdOiFap2X+WPqZ+sHb+Yw== 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=HEIJNVwA5aLG5LbLOYdeWvLIAHkyZ5Mi0DXjXMbvbtA=; b=pT+KCRFRvzL8Pp4slQ3WW4t4PEH5C1T3C87JJZwLPZYDBF9VhngQFtE4PdcehAbyBSjGX3texRwTJ2bkuLN2viA1R+N4fbs5DPNM+kBJdjCMlY6bDzst/jhutWkTCOlV2a+S4VEHJe1d4Ev+1dr1sLRkzUYj6co8z47xv7Jm/kyl7FEwbgaaGi1R+T6ILp1rOss2rBo492u5+l0fSHB0xH2PpGrBbBABAo+tzGdmNx6gVTByZpfv8hd/PZfsSFAzF2NWVTH7FQhIEJKbqv/sNTBsinc2AcWMZCyFDt8ASLKEGyefwvBGpbNnJTcSDHveBb7/jWKA67n0J1kVCamoHw== 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=HEIJNVwA5aLG5LbLOYdeWvLIAHkyZ5Mi0DXjXMbvbtA=; b=Sz78Qjm9xPgZ9f3WBsDDhqOPgw75ivHv3fb8yU+Pn2MQm2bx+FhGPh0cHxdKCxrUoxP+xIp4ttIAin675Bdl4zkl3deEQHtpNRdhRXdIn3yny94TUrKFBSpGJsvcGlU5eRq+8JQ9KmchYVh4CdnMfYXgNOjyranAqwMF5TaryDM= Received: from DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) by DM3PPF7468F7991.namprd11.prod.outlook.com (2603:10b6:f:fc00::f2d) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9412.9; Fri, 12 Dec 2025 16:13:31 +0000 Received: from DS0PR11MB8205.namprd11.prod.outlook.com ([fe80::2de6:bc88:2af7:3583]) by DS0PR11MB8205.namprd11.prod.outlook.com ([fe80::2de6:bc88:2af7:3583%3]) with mapi id 15.20.9412.005; Fri, 12 Dec 2025 16:13:31 +0000 From: =?UTF-8?q?Damien=20Ri=C3=A9gel?= To: greybus-dev@lists.linaro.org Cc: linux-kernel@vger.kernel.org, Johan Hovold , Alex Elder , Greg Kroah-Hartman , Silicon Labs Kernel Team , =?UTF-8?q?Damien=20Ri=C3=A9gel?= Subject: [PATCH 13/14] greybus: cpc: add private data pointer in CPC Host Device Date: Fri, 12 Dec 2025 11:13:07 -0500 Message-ID: <20251212161308.25678-14-damien.riegel@silabs.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20251212161308.25678-1-damien.riegel@silabs.com> References: <20251212161308.25678-1-damien.riegel@silabs.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: YQZPR01CA0176.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:8b::25) To DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS0PR11MB8205:EE_|DM3PPF7468F7991:EE_ X-MS-Office365-Filtering-Correlation-Id: 766f8f21-ddda-42fd-e027-08de399964bc 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?MnpXVGp1VUZCOHB2TUlVSllyeFlPYzJYTXVQN0cvVVM4QndFUDVnQ0FjYXZq?= =?utf-8?B?TVlmZE5EWW1MSzhmeHo1UHlrazBDUUVJNkhmU2RrRHJ6MFJLRnBUYkxyNmV2?= =?utf-8?B?NEpFT3pXRHVaK2FidXhvcm91Tk10VFdwbC9VcTY4NVdRc2RpUjY5ZVJjL1NB?= =?utf-8?B?Vm1MNGxlSkl0bE42VlhqOFE4R3FGNzZKMy93ME1OMW03OTJ6bWl1S2hyUWZw?= =?utf-8?B?M05sdTlCVzViSnkwQTZqcnZwZzVpWDBIU2lpb3p3emRCc1huY0VwemlpcjRS?= =?utf-8?B?Z3MrS2lkL0lrbTgveU9jRVhKT1NjTGhPL1EzOWpRRG5zd0JqN1NMVk9ienhl?= =?utf-8?B?eVh2WHFuek5xdERrSFNwQ2hpNDM4b05qbkw1dFJjS2U1MUh5bUJvTkF1RnF1?= =?utf-8?B?UXJobDV0dzlwbG5rTXJEL3Q3alFSQ1RuWEcrdUNRVE93bUpjUUxDUUdYVUY0?= =?utf-8?B?Q2V0RzRhelNyVDNSZHczNDlUbGNubkt3dlhTU05sUXY4Rkx4YS94aXVPTUpG?= =?utf-8?B?UUlhRUVleWdaYi94UVc1T055NGRYN21rM29TRTFWT0ZpSmxTaGZhMFpQL2t1?= =?utf-8?B?NEJDK2c3YVg2bmZnV2IwU3RDUktQT3oxc0EwcW1OcmNLVzlxWkxUZUVhcUNl?= =?utf-8?B?TjVKdHdtVG9VQzZvczJ1YTJuc2xkc1EyVUlhUTBWdGdTUHVDWTB2Vm5rU0tn?= =?utf-8?B?QTA4VkNtQUJKb25BVm1rNGcxemdwYzQ4cUFXNWZObDVoSCs5MDVGdGVlSXlF?= =?utf-8?B?WEhoNVhVY0UvYUtMckdWeENXdDI5eTNDcEo3VUNlVzMzRVVzcWs1ak1hWUJW?= =?utf-8?B?K3FpMXNjVkg2WTJOQ3B4VTdSTGJuRUJIWEtMeGZpUE5EVlRZYXo2UUtNOTJC?= =?utf-8?B?N01ucmRjOTNaMUlNLy84dGd0dTFleXdJK1htcUpTUU1VM2Vud1djSWR0WE1m?= =?utf-8?B?TDl6R1hRSFRhOStFMjEvTmdHVGV2WUoySmpGQkZnRzl0YWRHbUQ1K3lPZW4y?= =?utf-8?B?aUwxVTFpSUhPSlk2Q1d2REthQkp4NCtmZFBqeUhneW9hZ3B5N2NEc3pSSkNr?= =?utf-8?B?TmdBSXA4MFY4cno2c3pMWnJLN3ZYR3hqNzFuMzlveUNkNVEyTWhwc0RpK0tS?= =?utf-8?B?ZkY3cnR6ditLbXpDYlliUVB4TW9oQWpEZXlTcDFTaDdWSnd0ek5WSVRQSkJt?= =?utf-8?B?c2JPSktjL2hqcitFdHNlSDNZamhwVG9KNm5HUjQxUm55TmNYaytHQjJYTEhM?= =?utf-8?B?RTljQlNGNkRxRmkrVUxqZjM0SjVBUmN5alUybUxoS3dWOTZ6V01vbERNbzRp?= =?utf-8?B?dE9SdVNIQ1lrUlJGWURaSzBMTmJzaGNUTWZqa0ZGR2dmbGVuN25iYnJ1VGhr?= =?utf-8?B?ZmdYVmM5OGlwb1JZTWUwd0hTZjh2QjB6K2RiTGkwVEkyWVBGYUV2RUVXQmc5?= =?utf-8?B?ckFNcWNQaC8xUjRFWlhneDNVNm5IS1NpbXp1SHkxNnJxMUlzTndCWkljL0hO?= =?utf-8?B?M1VCU3I1dDlRYUhMSlZrWXc2cHRvc0J0alVROTRGemxDN3RIRlFvZHpTN1Jt?= =?utf-8?B?dFdIaWJvK3grVytJdmptelJaYkorNCtvOE81bTQ5cEM1MEVNc0I4TmxvcjhJ?= =?utf-8?B?aS9QVEV4VDFVWWR5OEppeml1bjF5ZE9EcXMrOUJUdWxGSTFTc0pEQUl1MGtO?= =?utf-8?B?OEMrU3ZRRmE0UXVNTStvUEZUTEo2UXpnVUEwRUw5anFVVHFSdHhHN1dITmtU?= =?utf-8?B?bXh6VlJvQ0o1bzQ4b1pnSC9MT1NZWDhENTZheFRJS2R5VXMxSzRqUWlRZ2d2?= =?utf-8?B?WGVtMGZQZ1ZzOWp4VllwVGsxTW4yYjVycHI1RFEwanVpZEFSY1pybUJ6MFZt?= =?utf-8?B?Qm9NQmpRMFMwd05jOXFUak1PK3diVld6Q2xlZm4veXVaYVBWMG9ESDhLRm04?= =?utf-8?B?T0ZoY1pQNElXZkE4cFp5SE0yUWJtOXFBOXVFMUVxM0VLNDh3bVJuMThmTnFL?= =?utf-8?B?Yy9DeTFKbEhlWEY0eFN0VVp0UkVVVEp4b2FDbnRwSXlWQlNNL2dLNjVUYy93?= =?utf-8?Q?P72agQ?= 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?b01rRjA1YS9LQTJ3TlBtRDBLYkh0SUtnejNKQnJqRWlTM0VrQThmUnVXQ0pV?= =?utf-8?B?Z1FqUlFKSWVKVXF4bVhxc3BiTXlsTlE4Ti93ekRNaHg1UGRzdk16YVd0Y2ZP?= =?utf-8?B?b1FrZ3NIOVZ3TTJ2RjVsS3RFejh5UDRHUVpVTHk3ajlia1VGd1VXWFhEQURw?= =?utf-8?B?VjdzS2o2cURhYU15ZXpXRXNFTVZKVk9CVlFGeGRRRFFEWDR0RkF1U3hpUzNK?= =?utf-8?B?SXRWeHRhR2xzV291M1FwNUhGeUNDaUd2WWNjbE9TcjBuVmxoMEdnb2xFbWgw?= =?utf-8?B?TkNEd2FDR0pWSjdrRmtTcjBzSzVFZXRpWVZTZjkwWUVhbWRmQWlaeWx3b1A2?= =?utf-8?B?SXhrUndhYnA5RXRFTWNYT0Rlem11L0FkQUdLK3ZmbGgxZVo2MHFpYnVBVkRI?= =?utf-8?B?R0dhcmlmYWlGb0ROQ3ZhY094NVFaQXVXR0IxOGR0NDMyNXZGbCs2VCtxQXhv?= =?utf-8?B?bDlxcjBXcjNiUlRwNVVqNjJjTG14MGNmRjFTT1g2NXdvVGpBQ245VkdNM3BG?= =?utf-8?B?Zks2ZHpXdDNOME1QNUkxc0dEeHFNcnhQbFNkQXdnSzFJSDU5Mm9NQVV5M1FY?= =?utf-8?B?bUFzdlplWTRHeGpRTk5sYkJkZVgvS2s4VVlWN0MrM2grRTNqNVZ4am1wQU04?= =?utf-8?B?SzhEc2lsTzh5clh3Q2padCt1RnpQbFZNeFJhbnJqUGxLSWdHOFd4T3RvSjk4?= =?utf-8?B?SWZOalhHc2Rlem1UVWwxQUlJSlhoSUhRSEhhanpJYmxSdldsL3ZrbGhkUzk3?= =?utf-8?B?c1ZrQ2Y0Y29IakJuZXQrbGJGTGs4TlhhYlF2Um1TQldQMGdSZU01TU5PbTNo?= =?utf-8?B?ajFSWXRBQjhxYkw5RzgyU0lMUUlhQXR1WlozSHNMOUQ3UjdVaEwyQ3Fsdm9K?= =?utf-8?B?QTBDU3RLMFBJeHY3RFA3N1NiS0RQNHJUTk5tTGJDd3BWT2RvV3I2OG5PMjdC?= =?utf-8?B?QlhtZk1qNVdjbFFwbmVWRzhvSGVxZFAvKzdGK3ZyUkNZaXB3QkNaWm1QS1Zp?= =?utf-8?B?dWVxdFlmRDYwdjRGdnBGSXR1bzY2dFl6TldNSmJESk9OMXhHdlRlV1MrOFBN?= =?utf-8?B?ajJ6QzhWMmhqTmphbmhwb0xQT3pUQW1oc0ZQZ2ZJZTJudldhN1ptMXlWMWhE?= =?utf-8?B?Y1lEMnFBeEJZbW8vWXQ5QllZNWJCR0s0YS9QRlJCbCtPSGRjZGkvd25XN01C?= =?utf-8?B?b0hGYm9VNms4a1JaN0MrUTZDTTZ5N0Y4NHpEUU55cDZkdEdjeis4L2txTlVp?= =?utf-8?B?cUZKVjFvNk1Yd3FIM00xL2ZWQVRpbS9zL2FkbnA4Ni9yd2p5MDlpbDBKOTJk?= =?utf-8?B?aElXZ20zdFZiMFAzRUxHemQvSDNjQXl0WjhpK2FSUUMwVnlja1RpaTNPY2h0?= =?utf-8?B?eDNUaFNyQk04K0lRQ2Q2U1JFSHFrMm9TRUlNME9RUEc5TU12c1h3ck9qdGV0?= =?utf-8?B?UmpMUTN2YzhZUkNpRDBPSXgzc0xlRXFtSDd5cGtSR2pqTXhCUEpxQ2haQTZE?= =?utf-8?B?SXUxQ1FxNWJTSDdEQ3pqSk5rR3pGUGxGRUtpLzNrblB6YUY3Y0xTckZFL3Zy?= =?utf-8?B?ZG9TbGlIcG5iT3p3RjI1aHFNMDZ1OWcvZkdkbzJaSEJPUFg3Y0FOaEVRSUp2?= =?utf-8?B?ZXdSNHo4cmZxQ2RvOWhPVE9FUjZBd01NOGQ1dG9ySXpWMDRPTmdrZVQ5TjV4?= =?utf-8?B?YzRlZi8zc1Zvamd1d0ZDdTlqVGI1ZVdHR3lrSllCRnE5RUhPMUxabk81RlVa?= =?utf-8?B?b0YrcDJQN1NKSitaN2VIN0grK01abUdCRmhYWmVPNVlsNmFleU9SRFl2Nm0x?= =?utf-8?B?Z3ZaakVHOWZnM2NQU25PWEFwNGtLVmM1WVNPeUJzNWJnWUZmSGQzQ2pWczZN?= =?utf-8?B?WVdJSVFDUkNTL1BJWkFrUkp1UmhvQ0Qvclg4VGdTSzYvV0w1MnhUdXFqL1lx?= =?utf-8?B?Rk1LQkJ5cWdLdzRnR0xNemlGOHFJUHVIeEFTd1htZmsrdWJwK041N1dhM3J6?= =?utf-8?B?ZzBtSTE0aXVRMGZHT0ZsMTEyMCtsZGkydzlwK1FkVVc3cUNYV05YQ1VDb3pm?= =?utf-8?B?Q2swN1dGTmFEUWZCcGlmdWkrUXhVU01odEd2RTN0Z3AvVkllU1JNNFRKblNB?= =?utf-8?Q?4qX65R6lXzXWh0R5uuh3ALxCE?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 766f8f21-ddda-42fd-e027-08de399964bc X-MS-Exchange-CrossTenant-AuthSource: DS0PR11MB8205.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Dec 2025 16:13:31.7817 (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: osClpiEbGoq26TdJx2vhdI3clCZ0henaVzmRkef2TY7jtTmIZ0BGofEZIFALA9834F4bC5YSxQj29Upi0cpd3A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM3PPF7468F7991 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjEyMDEyOSBTYWx0ZWRfXyYQxvgq+6aMt /8dxzoJd2XZKT+vKpXxUCoc94nUr8ACEI8mGOSckYVLbyM0UoZWj4OdtpD+NBZl8cUo8XR91MUB OenLeWQnCh1azn3apVz/3sFCjFC+Yl+lh9474hfkod64w+zcRCsg3uCQR51EywSOgELmEFrT2Yk 6acLWYtcTMxnH18MV5pcaFHpnGpjgIHR6Sny1qabvL88QMXeoY/frUrUXbz1665amXuZvTv3nSO ODFrrWlpS1C/82ekBrCwx3J6826i6yCHVZQrs4lU2qFVUvbzpE2G05puisOYf6Rjn7IbPgyvD5e z3GDilthOyeJdC23irLpVglURWnV8s2X1UP4wZS+ZQZi8d/DKDH34ePBVFNaG8tZXThs6ghLaNY obUZ4GRpD8bLc54IkAM3dcKTlUtkbg== X-Authority-Analysis: v=2.4 cv=BKy+bVQG c=1 sm=1 tr=0 ts=693c3f31 cx=c_pps a=OsHIvx7z5txkqQhXuj38dg==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=wP3pNCr1ah4A:10 a=M51BFTxLslgA:10 a=i1IsUcr2s-wA:10 a=VkNPw1HP01LnGYTKEx00:22 a=2AEO0YjSAAAA:8 a=8szWe6Y7soD9Pg2qZbAA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-ORIG-GUID: osTCjdY3T0C8zk5y9mfBRyFRYsIS4a7G X-Proofpoint-GUID: osTCjdY3T0C8zk5y9mfBRyFRYsIS4a7G X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-12_04,2025-12-11_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 spamscore=0 lowpriorityscore=0 adultscore=0 impostorscore=0 suspectscore=0 bulkscore=0 phishscore=0 priorityscore=1501 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512120129 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 --- 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.49.0 From nobody Mon Dec 15 00:34:36 2025 Received: from mx0b-0024c301.pphosted.com (mx0b-0024c301.pphosted.com [148.163.153.153]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B6526224AE0 for ; Fri, 12 Dec 2025 16:49:36 +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=1765558180; cv=fail; b=pfsBib88j58IbkAxqwbDen+Kbv44dmxoTg6hkmwDO9FGV4ZnNbAX61xsDS5ToUBeGQGzIJXxJtSEfUZsSnMmjyjg+StA2skIGwRMfdJ1QvJq+yWnWlIHxKaCZq+irNjexaAMOKh1Z4QlmmY0T6Y0VrglD1ondpnr20P7Fb+2y4s= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765558180; c=relaxed/simple; bh=HBeWldmPbvCnedKxFTw59us13CMMykCrmUlAQ8VY5CI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Yu6ia2NmTIJaETvj2t4kzQeGy3sNdPOVQdz4xRCLnNWcZQ3/dGBhqFjm+ir8qi64siXhykIVIDnfQ41aIrMKAfAseJ5Nz1PCtW/Acd5+7Xxgt0jV1HfDMBPHByZ3MoY45qFoRsdVMj4HCSOTJc336V+SSc2UfApV2xEb1V7W9Ms= 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=EUAYmSsd; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=CdeFtDzU; 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="EUAYmSsd"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="CdeFtDzU" 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 5BCBo1De3523286; Fri, 12 Dec 2025 10:13:34 -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=4srF8DjHjXqya7FKJIhvTqDtNsPwI5GjJklr2vlKn+I=; b=EUAYmSsdlccz sYK94OgC/9nOlIk71T0V7YAIhIo8nxn1cmHWKRuOES0mUjJhDuV8nbAIAzT7Ea+5 LnzDNz4fTgyB0kreQBbcD7RkVIiA9OzJUFG/gUF4RyXW5/mDKCTXYlirNJpzCEhE qRJP7llhRfU26Q8Sug7KtJ4zSmZymhulv1g7wKxZn0tdC/6UI9UlU9WsrcZProEP UiiFBVfVeLZIqVc1P7N4+duAryXEScqTenrA+qsPsl5DvujkHh49ZTeu+Evs+B7k t+JAT/xXwUeBf+9TKgggWhMTO17CekkOpupaXNqwZtTHWXqZZRA/cMN9/aRYf7AV 2r2JzWK+3g== Received: from bl2pr02cu003.outbound.protection.outlook.com (mail-eastusazon11021107.outbound.protection.outlook.com [52.101.52.107]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4aykqe47hx-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Fri, 12 Dec 2025 10:13:34 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=dJWHYC8Pd48SDfNQD334d2Lnm3g3L3/+hKe/45pJ0NA+W10TGZlrjAp8vXmshBlEg8yerfRD075PqTNPMF6gTKwHXJWe44TCPuH8/0n6AglI5oEgeWkiC8edWbrPx0w2JvPQeP0Oj/6XwrHMnZqYPh7HoPLXmA2w6Ee0sipQ7F2xDnrDJon91LVFtxAhBuveRSoIN48tvgIJiWA9gFChvkBOY0Uz4qw5Pya3rkzanYSxS4Y1Zok7TTgfI9bwIt7KtmZr+Ih//9FW2NBLfnS8lnsU9qaz4wGYBgg2yQB5GfwoiQB2X1eWyhrUU+wcEQhQQud3CrzIdaOf0YBUpmawjA== 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=4srF8DjHjXqya7FKJIhvTqDtNsPwI5GjJklr2vlKn+I=; b=zHsFDTtQngiRDFQcjLhEhROVB1bbW3Ro6kLMw2J6r5+SqQ8Y/7ChZyYvJTXwkcwhz4tUT4VUvJhDjhwDBEtK09cwnuC34TUGH7ZLLvzdAYywg5N8yY6MYyFtEhqv/cA2+CWHWvs6n7SPUT0XOwh8QQWwqQ+ocb297X5/i+vawdn3Va5Dxw3KOjWYzd+imF3GSpZVrdy0M2lQhb5S9y+sKQxRpMxVva9C0nYeRxZ+VJoMLghAfdUiI0gbbi9e/ETGkdMdEQ/G8lwfGHT3u+8y2GRMeB1BusHkw4vF0LdxbO9wrFXl+cPHAfkiWo68O4PWw9sdIr9kcp1+Lx1rXE3bJg== 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=4srF8DjHjXqya7FKJIhvTqDtNsPwI5GjJklr2vlKn+I=; b=CdeFtDzUu9BE5Vfg0mxzyW5AHSgwqeDYZIOB87U1TBgN+YBs94dR4caQdlTnHYVT+SVWidsEVn8j7kJe/avcT1h8d6+pdjdtf7w3aIWP+akpjGurXn1y1l2+MOMqbcjvzZ+9j4G1aOcbUrzVADO0In+QB7fWdX1Wl23iHF82x2A= Received: from DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) by MN0PR11MB6111.namprd11.prod.outlook.com (2603:10b6:208:3cd::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9412.9; Fri, 12 Dec 2025 16:13:32 +0000 Received: from DS0PR11MB8205.namprd11.prod.outlook.com ([fe80::2de6:bc88:2af7:3583]) by DS0PR11MB8205.namprd11.prod.outlook.com ([fe80::2de6:bc88:2af7:3583%3]) with mapi id 15.20.9412.005; Fri, 12 Dec 2025 16:13:32 +0000 From: =?UTF-8?q?Damien=20Ri=C3=A9gel?= To: greybus-dev@lists.linaro.org Cc: linux-kernel@vger.kernel.org, Johan Hovold , Alex Elder , Greg Kroah-Hartman , Silicon Labs Kernel Team , Gabriel Beaulieu , =?UTF-8?q?Damien=20Ri=C3=A9gel?= Subject: [PATCH 14/14] greybus: cpc: add CPC SDIO host driver Date: Fri, 12 Dec 2025 11:13:08 -0500 Message-ID: <20251212161308.25678-15-damien.riegel@silabs.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20251212161308.25678-1-damien.riegel@silabs.com> References: <20251212161308.25678-1-damien.riegel@silabs.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: YQZPR01CA0176.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:8b::25) To DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS0PR11MB8205:EE_|MN0PR11MB6111:EE_ X-MS-Office365-Filtering-Correlation-Id: 8cf5b5b7-975f-4d36-2d2b-08de3999653c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|52116014|366016|376014|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?bk0vZTA3VVRIUGE0NTJCaFJ0NzZQY0N2Vmxqa1VQTFFRNjV2Z3A2QVFiZ3Fo?= =?utf-8?B?QkdFbEpZL3RoaDlicm15MjdEUGM3aFI2TSt6cTE1ZmZVYlpxR0crTHZRcTBS?= =?utf-8?B?NlptVHNETkJPVy9lZ2ZzOCs5Z1lGcTVaVXVPU3RjWng4dGg3SGltK3ozWTMz?= =?utf-8?B?UzgwY3orTU0zbUM0VVozSDhkby9GVlJBQTRsMjBZS3FLb3h5bGVuZkhFU1la?= =?utf-8?B?Nm9qaG1DTm1EanRBbHVIdXBIN0lSOVQ1ODg1YWFqeElnMWhpT3Z5OVFLWVpD?= =?utf-8?B?Z3FCZEVyZ0ZYTGd6UVI2Q2U5bUhETE9mY3l1TWQxTUorSFBjZStSSWRkRkFU?= =?utf-8?B?Z1BsU0hxa2tnYm80STVqZWhlNzBIdktBalFpNC95Y2Jycy9RdHhZSExwTzdm?= =?utf-8?B?MlFRY1RNb21wRDEyb1N4RGQyd1ptME5TUjliM1pKYVpVNHRpbU5wek1mdFdw?= =?utf-8?B?K09ndXZvUGY1ZG81MDNXcjUwSTJVSytjMW1ucXkwUUZMWW50VFIvelJ4ZTRs?= =?utf-8?B?UTZ1WExSQ1U3Z1RsbkdSNDdTOHI5clBHQnN1WlJBcmFPNlA1dnJ6OVNZSDk5?= =?utf-8?B?T1kxWGRyT202Q3c0Z243MC9MUHYxTzQ3ME9tdjZTaVBPTm5CWEdrb205M0t3?= =?utf-8?B?T25WT0YraWNrNExNOWhRZGR4aHpEWnZxZ04vd3NGbEVaUzBlSXRoVGE0T1oy?= =?utf-8?B?MWZha1VhditJRUhWVXZReVNJKzUxdEMyTnA2KzdpdkhDVDlzOWlJTGxOMXI0?= =?utf-8?B?d1RnRE8xSXBIcVJlVTJtQWt6MW9pNm5CRnBIdEVmRHAwaXNFdEx3Rk8xckFu?= =?utf-8?B?cjc5ZnhXdDFMcytkQ2dIVW9YaG0vSU5XK28yZittUnR2c3pGVUR2SjVwcWJt?= =?utf-8?B?VmNyVHpEdUhVUnhEUyswTUxjK2JhRDJYYmhxZmNzZEl1VXpRNjZXbW1INjhU?= =?utf-8?B?b01GN24wTE1uczZkaVE0dnlMdkpLK0cyOWRoc0JiRUZ0QlRCTmhRMm5LNWY0?= =?utf-8?B?QW5VcGFtd2Z3U0Jzd1k0RUpEZ214enhIZGdkWXlFcmh1bklHdE8zL2FqODkv?= =?utf-8?B?bnVoaldPaFlDczI4VnQ4QjJuNytmajFxMkZ1clN3cm5WYlZ0dUd2dzRmdnls?= =?utf-8?B?RGJaRXQ5TC9IOG1nTjVaRXEzKzhxNVVCbi9vQ1lQbXZtQzhLaU5YV0drbVNH?= =?utf-8?B?V0s2T1hiUjU3VERac0NMV0xmTm9KMnppS0hzd3MwdStZdElJRDkwcXpJaXNq?= =?utf-8?B?OTVOS1BMMlByTEtvK2FuSFRhRWpUd2hWNHFGM0J6UGFWRC9WU3Y0TWI2WUZl?= =?utf-8?B?YzJ3SGFnLzRLVEZKL29jOEZjSzN6L1k4TjF0VUVoem5vNFZ1R1EzYVRZeDU3?= =?utf-8?B?clZMMFlHbnYwUGtHblhsMkYzdEwyTTBaMW1Vb0tSMXV3VmxIbjZub21PWUVC?= =?utf-8?B?UjNqSVdWZCtKa3FjVmo4UUZWbHlxRFB2SXQwbEo3QWpJc29USDRybXRiT216?= =?utf-8?B?TkNiWU8rZzNrR0IvTDh3WU1yWWJBZW9mc3F6M3BmRGIzTWdJUW9LN0VPMDZX?= =?utf-8?B?UGU0NXZJdXZRbnpCZHVYdnVCaS9HUHF6bk4vdmFvQko1MEhKaFlFNk5vZnFO?= =?utf-8?B?S09Cb05TS0RVUzJrTzRDSTVwOHlmejRCcW1rdzNGbUZFVVpuQW1aS1JpU0p3?= =?utf-8?B?bllkNEZZamFEcnFYeEViTjdwUGhkTVYyRWtlMzJZT1ZueWNNU3lSdXdvZjZL?= =?utf-8?B?YWNDbk9aaGlDTVk3amtXK1BHdUdpL04ycERsQUx0N2NkZFR5dnRhR3BIMUNB?= =?utf-8?B?UzByUmQyeFBrcnpER0tES3o3bnF4WlUzRXNGVVlNQ3V5ZnFzRW5ZMXFkZDla?= =?utf-8?B?OWlHelFxMXFaNEZSSVcrNEFiMXNjdUI5TUFnME16WmNvbTZGYVV1WS9FSnJM?= =?utf-8?B?anlTWWFpZEtCQWNOVUFGdk43QURMQ2M2MFQ1dFk4TFhCbHRLOC9BeGdFRVNL?= =?utf-8?B?ZjdSKzVlRUt3a3ErdlIrQjJnbnh6ZExLV3ZYOFEzV24wdVVVUG1LenFoZWN2?= =?utf-8?Q?DOZ8t1?= 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)(366016)(376014)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ekR4UUw3MHBXd1ZOZkhwaFgzbmZzckIzQUJUcWIyLzh1YzFmUWRxMzQ0Zjl5?= =?utf-8?B?UmFYWG1DWlpBb1VsOWhBeTUrYktIdGhRWlhJWGpqR2hmSUh2QTh4ZkJqWStC?= =?utf-8?B?NTdyZkpNV1RiMWNYVktZd0NuYkwxUDkyQzNuUU5zVE9OQWFOQkRFdFBTcElm?= =?utf-8?B?NC9tWGVhaWxRS0J6aFR5VnYyTUxRSlRnbnJwWHVCS0Z6b3pTRzhJVzgvckUr?= =?utf-8?B?MmlYTnBqK1ljeVNMTjRrMWxIdWVXWU9DbWJQdnhRRldkMjRWNE1OWHJXRFpF?= =?utf-8?B?cFFsOXA1OGJKazBoQytMdjNocGswVzNWUWIzdW50ZXU5QStRRVpBNkhqbll5?= =?utf-8?B?azYxZ1JrYTB0YUlTMXFUNGZDVGZtRWRtODJQdld4amZ1a1ZhL3JnNEJuZ1hr?= =?utf-8?B?RlZ1K0R2R0dNUFhPNWJJeTlZcDMyNnY4SUhHdFVtQW9kNE1iNlkvMnlUYVhp?= =?utf-8?B?V3E1WVBjVzQwb2h5enAxODEyeGxPU3Q4Tk9QSHkyazVlS3V0M2xxRW0rdDJW?= =?utf-8?B?TzZQVnZCSXFMZnA1WURqZmhpOWtMUDh3MnZJY25ZYVA1MWgrS3pjS3VBMVd2?= =?utf-8?B?d1FZbHZOaWpKTXhJdXJjeUtQMDRCeVVFaXJNVGZoeURiQWR1WU1GU0hic2RP?= =?utf-8?B?NVI3SXk4WGh4VTcyWVZXWEdZdko3UkQ3dEVRaE9CSTZYQ0tPaG5jaHptNlhU?= =?utf-8?B?d0xFY1VQRENLWUlobGlmMjRPdXNxcXppdmRvVkIxM29YQnlKVmtSRW9hQzhW?= =?utf-8?B?eDFYT3VKUW5VcWFaWVFMY3IyUVdCYnhMOTkrQ3NjV0dtSFpqZkkzRTBvSlpL?= =?utf-8?B?RlNuOEhOaXFSbGxWYjM4Uzc2bmNVN2sram40VldzOEdGamVicmo1VDhSUkVS?= =?utf-8?B?L2dkcC9iMk45anJFbU9rMytOei9uOFJ6OHpiSVNWVGxvL2RoZXlYbW16WGVL?= =?utf-8?B?S2RrancwZmwvU0hadlFDZTBIQWZTY1lmdkJSUmNzTXVVeFRjUzZJQ0d1TGJI?= =?utf-8?B?cWFHSUxTNnZOdnM3U1Y2MXRMRlRHNXVjbDNVdDR6YzkwWFM2Y3hBbnVrcXR1?= =?utf-8?B?TGF2dVowMEUrSytvTVZIYVRBSzhjN3duTy9FenAzcGRKejJrWWdnalZGN2xi?= =?utf-8?B?ZFFRdklrUHhGSjYwN2tmd0xVNjhRMGFlcjNyWk9pQ1JPeVRXTGxVWlZEVFJs?= =?utf-8?B?Vm02VTZnMUs2QzltY044L0preExHcVZEN1Q5cTV4cDkzZXByNVlXcEs2Vnox?= =?utf-8?B?VGVIQVlLdkxQbVpNL0hxOTBwQkRMMUl5VURoZkpIdW9nbGRhYkpMdjNpSTZB?= =?utf-8?B?SEZLenlkK1hoemIrWnpDYmNEMHJrK3MvdU9ob0YvZmljUnJJdzhxSDRSZmlo?= =?utf-8?B?UWtCMFZ2ZFV5U3dsUHlYbWdGbE4vcnBveC9SZkRQbnprZ05UQU1rc2c5WVNK?= =?utf-8?B?TTR4SnRWOWd0M3NudjV1b0FXL3pkVW1iUmFsTmlRK05mZ3VuQmVlSjkyRHhO?= =?utf-8?B?eHpoYk15OWFrd1lVL3RveTZwVlhUOElxdzhvS0ljS2puZWFObGoxUHJ4dGZt?= =?utf-8?B?SnhobEY4Rm8rMW1UaUhjTTZNeXN5YlhlRVQzUjVEYXdGVXpwb2ZuSkFNUEM5?= =?utf-8?B?ZEM3enNySGRJMzkyb2daeDZXZ0UwK1BWcUxOalN3SkRKSDJEVjRNdzdOZGhN?= =?utf-8?B?eE1PcmtLYUZiSmxVeW54a0pyOGxEck1oYkpBYko4VEFaSGY2SzlmVzJQaEVr?= =?utf-8?B?SHc1T1FIL3VsU0VqS2FFOXgwSXZQWW1JSWYrZ2grREx6RHdURE5rR0YxNi9K?= =?utf-8?B?US9nbHNncTFFbUtYYlJCSkQ1RDlmdVpPRHRRSTBxS2NwekVoYkc4YU9yb285?= =?utf-8?B?UDZmVy9Ka1VCUEhJalVvb0FDNVZOUEg1YkZRNDh6VDB3RFVOY3FhenB3RWJm?= =?utf-8?B?OUpxVXRkTUUwZSs2S3J6ZzRJb1FaTDd3QmRDREZId2tQOE1GY0hwVi9BM3ln?= =?utf-8?B?d0JTLzVXa1hia0hNMjlnOTd1anlzd1BWN0NIRnI3WEY4aWdTUDBYL1ZlL2FS?= =?utf-8?B?dzJMVElNK2RZeXNyQytadEZOelBJSk12MXVwV1UyajBpZUN1TVZ6L29qTllW?= =?utf-8?Q?SGe4ARHRzlSXF04Og1CYSW5/k?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8cf5b5b7-975f-4d36-2d2b-08de3999653c X-MS-Exchange-CrossTenant-AuthSource: DS0PR11MB8205.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Dec 2025 16:13:32.6240 (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: hLyXaqp4rIFn9LzPskw4OIwkenClxtwg3NMeeLN6F9O66eG/BCua4j0Iheru+pBBHvYcLJ9nuAP50Q9kP5rAOA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN0PR11MB6111 X-Proofpoint-ORIG-GUID: 1D3df6QMKB667YfJDE_rIm6kdoelGoix X-Authority-Analysis: v=2.4 cv=brxBxUai c=1 sm=1 tr=0 ts=693c3f2e cx=c_pps a=xX5bFixAAzgdQQ8ihQiE1w==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=wP3pNCr1ah4A:10 a=M51BFTxLslgA:10 a=i1IsUcr2s-wA:10 a=VkNPw1HP01LnGYTKEx00:22 a=2AEO0YjSAAAA:8 a=ijG-J2Scc44MUVjsrbIA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjEyMDEyOCBTYWx0ZWRfX/fcukzEsC93A FOUo1HHfc3dUV/ZnALunnjgKmGJrin5zJnkB0P6FcFZpUQAcnq8qK1AFmlqp5f/ZPaL6814yvoj tF6qB+jTPTsKlVcuRU3R0OxaS2DADegWxG5JRX3sHDpMIVLf7PXxki54yFMAtrLdi95VIyQhLDp DNfsHX9IYwIvu07ZsYSfO2k7hMkDSwRULB0DBga0+KKyh+LTI//awEJin7nXYzgoW+lv3vaqmQj 0f6SQ+hol2Cbd6HhJf+wvX1ypxLziByfCx/hbNElJAG9bgyIHZDlFN1yEQ87XLySkdhETrwQgmz 3EQz+xrtUmNuz7msOJg/vX2+K3Z9PHtuJCZsc4v7fYeyy5/E8aWxhDybPuB7uVYZyTxul6W2RVz 3haxP0npdY004BMH0pTzI4k+ixVOGw== X-Proofpoint-GUID: 1D3df6QMKB667YfJDE_rIm6kdoelGoix X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-12_04,2025-12-11_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 lowpriorityscore=0 priorityscore=1501 malwarescore=0 adultscore=0 phishscore=0 spamscore=0 bulkscore=0 clxscore=1015 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512120128 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 --- drivers/greybus/cpc/Kconfig | 12 + drivers/greybus/cpc/Makefile | 3 + drivers/greybus/cpc/sdio.c | 554 +++++++++++++++++++++++++++++++++++ 3 files changed, 569 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..5c467b83ad9 --- /dev/null +++ b/drivers/greybus/cpc/sdio.c @@ -0,0 +1,554 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2025, Silicon Laboratories, Inc. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#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_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) +{ + size_t size =3D 0; + struct sk_buff *frame; + + /* Calculate total payload size */ + skb_queue_walk(frame_list, frame) { + size_t payload_len =3D frame->len - CPC_FRAME_HEADER_SIZE; + + /* payload is aligned and padded to 4 bytes */ + size +=3D ALIGN(payload_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); + + /* Add an additional block for headers */ + size +=3D GB_CPC_SDIO_BLOCK_SIZE; + + return size; +} + +static unsigned char *cpc_sdio_build_aggregated_frame(struct cpc_sdio *ctx, + struct sk_buff_head *frame_list, + size_t *xfer_len) +{ + 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 NULL; + + frame_count =3D (__le32 *)tx_buff; + *frame_count =3D cpu_to_le32(skb_queue_len(frame_list)); + i +=3D 4; + + /* Copy frame headers to aggregate buffer */ + skb_queue_walk(frame_list, frame) { + memcpy(&tx_buff[i], frame->data, CPC_FRAME_HEADER_SIZE); + i +=3D CPC_FRAME_HEADER_SIZE; + } + + /* Zero-pad remainder of header block to fill complete SDIO block */ + if (i < GB_CPC_SDIO_BLOCK_SIZE) + memset(&tx_buff[i], 0, GB_CPC_SDIO_BLOCK_SIZE - i); + + /* Start injecting payload at beginning of second block */ + i =3D GB_CPC_SDIO_BLOCK_SIZE; + + /* Build payload blocks if required */ + if (xfer_size > GB_CPC_SDIO_BLOCK_SIZE) { + 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; + } + } + } + + *xfer_len =3D xfer_size; + + return tx_buff; +} + +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: %lu\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: %lu\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 int cpc_sdio_process_aggregated_frame(struct cpc_sdio *ctx, unsigne= d char *aggregated_frame, + unsigned int frame_len) +{ + const struct frame_header *header; + size_t aligned_payload_size; + struct sk_buff *rx_skb; + const unsigned char *payload_start; + size_t payload_size; + size_t frame_size; + u32 frame_count; + unsigned int payload_offset; + + /* Get frame count from aggregated frame (4-byte u32) */ + frame_count =3D le32_to_cpu(*((__le32 *)aggregated_frame)); + if (frame_count =3D=3D 0) { + dev_dbg(ctx->dev, "Process aggregated frame: invalid frame count: %u\n", + frame_count); + return -EINVAL; + } + + /* 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); + //frame_count =3D ctx->effective_max_aggregation; + } + + /* Header starts at block 0 after frame count */ + header =3D (struct frame_header *)&aggregated_frame[sizeof(__le32)]; + + /* Payloads start at block 1 (after complete block 0) */ + payload_offset =3D GB_CPC_SDIO_BLOCK_SIZE; + + 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 -ERANGE; + } + + 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 -ENOSPC; + } + + /* 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) { + /* 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); + } + /* else: allocation failed, skip this frame but continue processing */ + + /* Move to next header and payload start address */ + header++; + payload_offset +=3D aligned_payload_size; + } + + return 0; +} + +static u32 cpc_sdio_get_rx_num_bytes(struct sdio_func *func, int *err) +{ + unsigned int rx_num_block_addr =3D 0x0C; + + 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_buff =3D cpc_sdio_build_aggregated_frame(ctx, &frame_list, &tx_len); + if (!tx_buff) { + 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: + /* Clean up any remaining frames in the list */ + 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) +{ + struct cpc_sdio *ctx =3D sdio_get_drvdata(func); + struct device *dev =3D &func->dev; + unsigned int rx_data_pending_irq_bit =3D 0; + unsigned int irq_status_addr =3D 0x08; + unsigned long int_status; + int err; + + 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.49.0