From nobody Fri Feb 13 23:22:23 2026 Received: from mx0b-0024c301.pphosted.com (mx0b-0024c301.pphosted.com [148.163.153.153]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DB6D11FBC8C for ; Thu, 12 Feb 2026 15:19:49 +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=1770909592; cv=fail; b=eZemtUoqxckcd7eavdLVsuJ8coeLsPCAkDJxOKafaWjuKtHOb/RtHtryGp5pLD4RtTJuNHawBUs7Fv5DaiQS7rsVZLfsNxC90lmZ0hPTQD55K+x7tggGQzpmgw2orSxLK1vVQTtaeSEMMW4JVcXNuSql3ojJw7f0of5HkHIo02g= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770909592; c=relaxed/simple; bh=SQQyBvdyQTtGyoBZ1NHjYrtUKzQdpbxIlg9aVCmBQ8o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=ElDA9dACk9jVbn2uQQcDlgbD7/I/nn0gePB3UzmfGYcqd8NNuljJbS92L6mrt1xNUVtLoug8CP4i9qzbqjsnTI/Z2tFGuNon2rPyoKgNIMUiryP2s4FBJZBgexT7fcUFosUY0KKab2/cffCGOTiaLgcD+Se4HkaNVRSzgb12yOg= 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=qf1RdvWP; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=aY+MYgRd; 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="qf1RdvWP"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="aY+MYgRd" 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 61BMnYg2335638; Thu, 12 Feb 2026 08:44:10 -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=L7+uT8wzOBTyTAxDy6uZQafjiGnecSFVP9VgFtsAYvw=; b=qf1RdvWP1yol 3ceA1QlmMwIE7KNiUxIV7iaquQW7PffAWciDyBftEP3Rx8GHjAU3iJMXjtJhzMyC LVqn+BFgCQ0FXQK0ylXYGkOZftezqmvCs8QX9mqdnXbQxB8rQuvDiPmo3fap/eZg Yz3eRwQbjYMZ/dbBIoUYE6/Y6ML8AQRgh6o5vQw8YQ6bCLiF9H8Xd1mLLuMKAiMd MntOXRg2LBWd9rZmQ7DCrBPCkOtBGKuABECRnFknTlRrwScC6iuogTiS5tovGEun RBazDVAkCsPswIUO8sG2M+BX7yvrPd8RPmA7bH59yNfSob9iI5d1udUWPyd/Jh0v mxbk2tItHQ== Received: from ph7pr06cu001.outbound.protection.outlook.com (mail-westus3azon11020136.outbound.protection.outlook.com [52.101.201.136]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4c92w8sk2e-2 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 12 Feb 2026 08:44:09 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=LDnts7vjS03XgluIPfmzAVmMXa0HLLx9Qr55IPf9Fi909eqWCKCUB0Wo0VOvPZlCQ9ZN7JeTfprcV9EhTiOOu64Ki7hJd27wnk6SU7Ghj4gHZVqcLutXCSevUiHlu/ZhM05xGOlL9oRnX44BDBJqyZFO6gCF1qUeCgAPa9eiZL6KSt8xOGhbAEbdI1xUSwRPmRcHOEp/wAVNmcgxSAAaOxWM460haYNd9dB9sbNNbGTP1FEVwj3Ki0lS9ogNBa2DEKX86H59LSCvppJACnekBO/wDepm7Ota8aALzEymupaGPc0dSTFlITm4qZ9+USFqlu1zgO49W+qt53B5jw9gRA== 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=L7+uT8wzOBTyTAxDy6uZQafjiGnecSFVP9VgFtsAYvw=; b=szxMQfD5pqfk3gx22Od5IihH/benFO2mxZuT5rVDzvcHqbHXoUsBuCkkt9BhgwPBGYJwlRaxtPEjFMK07nGQoSj3H0TD8zo0XYD+Nvkueepe10ADcM6cZxzKt2ajb8r8ysuPf6oY/t4dC1WOnr73w6PFVkege/sMpXAhnDit90kEycYvXb/r3e2oM49ELCszQ8Ks82Z8YpDRVWe4sbc/nWxlbHEk/l///qwYXAfzLQHM+V5EmmF/uq/73CdzGnAmi48EZb2eggwfUO0lwIZ3T4xeSNdd/ZKRCuBKvm8gaRaEWsEV1RqmV4XDSpBZgKxRnQZgVCS0J15OclQY2KU7hg== 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=L7+uT8wzOBTyTAxDy6uZQafjiGnecSFVP9VgFtsAYvw=; b=aY+MYgRd+HQdWuvb30PB5EnUH8cnODxHb4vinS8bLH4dsijhPSyT7jqO/zNAbT1suCZ/ZJadgLuyeWnGfzd4XmOrUdTv5x5TfkCkG1lUlQF2MYbA0HskwGW1Jo2U0aU5l7WSaiDRjmDK0gyirUvEpNB700r2WZsky7HGrBvjAzE= Received: from DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) by CY8PR11MB7082.namprd11.prod.outlook.com (2603:10b6:930:52::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9611.13; Thu, 12 Feb 2026 14:44:05 +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.9611.008; Thu, 12 Feb 2026 14:44:05 +0000 From: =?UTF-8?q?Damien=20Ri=C3=A9gel?= To: greybus-dev@lists.linaro.org, Johan Hovold , Alex Elder , Greg Kroah-Hartman , linux-kernel@vger.kernel.org Cc: Silicon Labs Kernel Team , =?UTF-8?q?Damien=20Ri=C3=A9gel?= Subject: [PATCH v3 01/14] greybus: cpc: add minimal CPC Host Device infrastructure Date: Thu, 12 Feb 2026 09:43:39 -0500 Message-ID: <20260212144352.93043-2-damien.riegel@silabs.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260212144352.93043-1-damien.riegel@silabs.com> References: <20260212144352.93043-1-damien.riegel@silabs.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: YQBPR0101CA0124.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:5::27) 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_|CY8PR11MB7082:EE_ X-MS-Office365-Filtering-Correlation-Id: 4f918272-f5cb-4192-f1b9-08de6a452bbf X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|52116014|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?Qk96MG10OUErejQwVXkvSFc0dE52YTQyaU0wOG53NHVRVkc5RmVHNFhYUmVY?= =?utf-8?B?czYxOVZmNTBxRTJxNHh2NW52a2s2UkNTYksvMHdLUEZjaU1DWkx0UGZPZkkx?= =?utf-8?B?ZnJvdWhIV2dMbktxclZpSWRhaWN2dnU3TmdCY2lSVi83Z0cwT09wcEkyM25k?= =?utf-8?B?c29XaGplRUFyUVB6QzRjK2tROXFaVUN6YU5pTkFkdkc1RUFRMENxMmgrTmNE?= =?utf-8?B?MHZJeXQvYkcyWWZVVHZrUTVYL0d4ZW5WZVk5VVJsWGMwMlVVZ04yZzlGM2Jy?= =?utf-8?B?VE5nL3dNMnZJb2IvNnlZNjdXMElTZjNQeFdrU202WFVOalVWUGhPczVFUEVM?= =?utf-8?B?N3lHWUZZVjVnWlNOOWpONjEwT3FYWldBemx4T0N1cXExOStrNCtjeVdMSEhZ?= =?utf-8?B?RlN6N0lyN0NRN0pUb0VHZGxvOUdwckVzUEE4aEl1dWF4dXovOTRjeGErdmht?= =?utf-8?B?Wks4YnZqRUpCVS9BdHN5MXk1bHh5SWphZnluNk9iRVQ1TmJ4eTdqWWdDL3VR?= =?utf-8?B?cVRNdHYxMGdtVUp2bVlOMjV0TGNVN2dQK2pQalY1RjVqRHFMbGNDQlQ3ZkFT?= =?utf-8?B?YXZYT1RQRkU2amZSemk1TFhEckpZYTNTRzZhdEhHdzhMY3VVRis2V1RmeVFI?= =?utf-8?B?Qi9OUUM2MzFKUGlmLzFxbnVUeThuVlNrd0NadUl6Z00xOStqQldlV0tHSWt3?= =?utf-8?B?L1ZaMTMzblJ5eUc2aGd2OHBaR3QyVFpnWkl0anN1SDBFa1ZzMzNsWTVjNk5V?= =?utf-8?B?b1FCS2FQVm1ZMEdaUWFmZXdXMFhKM2ZxdzcxRDJPbXFiTkdjOFZrWlJhbFhM?= =?utf-8?B?UkRYWFZBaVdCRXBXcVhQczk3WDFXemhnMFlDd3J6dDBJbzlOQnNpZDRGK1JH?= =?utf-8?B?VnBLeGMzaWlMZ3l3TUtHUzh4bit6bnQ4UHZHSTNyR0NpTmpoblVuQjllS0lu?= =?utf-8?B?b0kxNTErQ0x4S0R2akJCc0xnYys1QTMrb05BQnNhS0dhazZCcklCSlBBMVdD?= =?utf-8?B?QkhjNThNRHJiN0JmVmg0aHJyQ3FxNy9HNjZiVzRDOHhtMWRucnhQRzl5RDBn?= =?utf-8?B?QTlaYUVPdTErVVh1ZHY3eTNkWjh2aEk0QVJ2MFNqSEdVbENoaWNmRkY0aVpB?= =?utf-8?B?dGRGVzk2OTMvOVdPTUkvN0ltMHRxNXNTQXRZMmYxN2lRUDFnbzRtblo1N3I1?= =?utf-8?B?SGxBNlFiWW9jQzFpdVp6US9DZ2JtYlc5Q0FxbmY2Wk0vNmphM3ZCK1o0cnNV?= =?utf-8?B?d1RRSEptT0poMlAvdGNyL3RtaUtTZjE5MCs1ZFUvcHl2WVVSY01oV0JsTjJX?= =?utf-8?B?cHQrR0ExdTBSeFBEQjBFSG9xVmhxN3hUVC9qVWN1bzY1WG9NQnlwODEyTXVT?= =?utf-8?B?V1h6aTZ6aGxaVXpnd2gvNnpYT0czdVpmTG5qcjdkKzkyZkFxSXNxUE9ZcHAy?= =?utf-8?B?UmNmR05sVWZKTnFDRTQrWlhaaGtJSldmeEJIYWRoOTc4SFYxYUdlZHFMNjlt?= =?utf-8?B?ZU5SdDd1clU1ampuZ1hnLzZXbmp1NWc5Q09oVkNZUDhsalpiNEJwTXUzZVEy?= =?utf-8?B?ZjBqU2hPZGdqWXpLeTdpdE51eVh5MnNnQm1WaHJSelZnaURPcGRmYlRlK3U5?= =?utf-8?B?MERNVG5GdWRoWkd1QVJxK1dyQk1kYmc1cGNOK1hNZTkvQjBLVW51Vjh3YWlW?= =?utf-8?B?cGtSVzdncmR1ZnBjVWE5ZWt6Y0loRUt2Tzc5Ym5sSHhPU3lsaXlEamVuYXZv?= =?utf-8?B?bVJ3YjQ3YjgzZ2ljTlZWMFNUcUtYQkN1SkpWRElzUzgxT2JMQ3hJWXJIb2lI?= =?utf-8?B?SWFsejJsQTZUbndEZFRlU2k4NWlNeTN1TkhnUHN3T25zeUFFY3ozdW1HTmI1?= =?utf-8?B?YmMramRCUEVHc2YrVy9xVU45V1NLYzM5TnVnNkJZa0FUdms5RncycnQyL3lQ?= =?utf-8?B?N1Z2cmJWNVZLWkdNRHNhRlhJM2t4VERLODBEdEFsYW5DVHJVeEd0NFlNT0FT?= =?utf-8?B?dldJbmp1aWtMNGtOUkd4emxJTmZsZ1VLSS85MElaSWE3ZzFWZnpid095YmRp?= =?utf-8?B?SkJhNFBQUkVsOElxN2xPMWdqWWtDM2xoWE9HL0VUYmRZSzNiMFFPeTNkT1Rt?= =?utf-8?B?WUVNNUQ2enViRHJjeHhkSitSU1JScGMyZnpPQTFtOTdrMHlPMWIwYTZ3TCtv?= =?utf-8?Q?eguNl31UAP3OEmufdAWR6PQ=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR11MB8205.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(52116014)(1800799024)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?VXZWYmlLRjVySW5zd095NUV1YWVGRDlyTU8yc1NIZlBaMnNNWjBEdjhBajV0?= =?utf-8?B?NDNBdlJCaEFkNmdPbzFsWjMzeUpDVFFybkxoaHp3NnJhaEdCVFJqQmxsclFM?= =?utf-8?B?KzRqeGJZLzFWRFMxTlJoanNCOGNWWkJwOVhtMUdMOSswRy9ZUmhNKzdMdjJD?= =?utf-8?B?Yy90MTVTQVlMaU9OQzZYSGRYcWFVVEFFQ0VzUG1VZmFvMzFNVlJweG9meHp5?= =?utf-8?B?OVNka3E2YS9Ia3FyQTFybVdrbTVRY0ZiMHJqeklJZHdBTFZUWUNRSDFyQjZs?= =?utf-8?B?MHlXVjlJL0tHVkU0YjV1eDdLZ0p2aEtqNnVJRi9SMW15elQwWmdyMkQ1VnJP?= =?utf-8?B?MklES3B3ditPQnFNc3ZOM3VHM3ZwVEhnbWpiYmxRa2VTdXZ3OVFiVWgxeTdZ?= =?utf-8?B?WDlHcGMyVXNFSmw1em1pMXdsRzRPbGFVc1poR2x4ZEU4TE90NEUwOVlLWFRT?= =?utf-8?B?cy9YRmhUcHk3RDBmMUQ4RkMwcjBWNEdjMnpTMWoreFRna0pxdEI3VTdWRXV2?= =?utf-8?B?MWZHaS84aVlwRGNIMnM0dnN6WE9uVk5kNDhVbVBXTEtPODV4Nkdld3FyYk40?= =?utf-8?B?ay92cjJFVDFsL20ySnlqU2NVbUE0a1c4enlhNUpnMzlXQWJCdFk4NHVMNjZK?= =?utf-8?B?ZVZDdUo4QXNhazI4TFl4Qkx6REtnMkY0V1A4WG16SnBvc1h6OVFuc3hrWHRN?= =?utf-8?B?VVBxKy9iMmxYNENQck9rQmNyaFRpckJoSVQyYzB2a1hCcC9HNGN5RmZ3cWJB?= =?utf-8?B?ZndlQ3ZXT2U3YWY0aC9sczV4Nkpic29lT3ZOd0xlajlHcmo2M08vS0dtOGxT?= =?utf-8?B?LzR0VjJONkFnMUxieXkvMFVZYVQ5OVpqTmpkd2M4bFpqWVNOQ1hHRGFxSXc4?= =?utf-8?B?d2lObVIxUTV4VWtnVk9YemlldGZpNnp6eERkRTVNZ1ptc1VkS1lnbml1Q0ti?= =?utf-8?B?QlI0MHNDZlE2eEswbkNMTmJSckhRdmpmUmNIVStNQ3NzazN3c2NtVkh5b25O?= =?utf-8?B?OHU1L0R2Vjk4eForUC94V014djJzOEUxbnpTbGRWdnl1REU3K21JanlSdFVZ?= =?utf-8?B?eXR1VGxyaEc0dkpuQ0J5enNJWEtYWFhaTm9QMHBqSFJGUE10R1UzT1UyZ3BE?= =?utf-8?B?WmNlZXErb3pnOTNMaThNTWk0YkozUUM3RHp1cFdTZ0FXV2x3SDlpNzlrWTN6?= =?utf-8?B?NWV3bjE3VmI5ODA1MWpwWE9TbjNzWi9GWkl6RUpqeDNFRWMveUU5WDZPamFV?= =?utf-8?B?aXEyU1VGYWlURjlLbDZqOUttVWszbUNKcU0yT0ZEQUozK3R0dHQrZHVRNWVY?= =?utf-8?B?RW1nTnM3SlNreHd0RjQ4a2hZaUQySURxT214UzVNZnFrby9ldnc3bVNzQTIw?= =?utf-8?B?V2pCTVJHdTc5WE9WNnpjZjAwekRYaFVBMmcvd1M3RHpLeVpVMmw5bExVKzdh?= =?utf-8?B?S3N2S0wxWGJOZ3JabVBYdFhRNURtZTZQS2dXSmZhYnFjNEtjS1JNWmZ3VExH?= =?utf-8?B?bExINktIc21hTWtvUVRVRDk3Qk5TZ1hPS1RVV2JiNnpFSVBqTjVxVmZOVVBM?= =?utf-8?B?TFcwT2ZjeVdadWk0S1p0blVEaEowVFZnMUtTZDhqclVkZE9KTXJ0bEwyMWp5?= =?utf-8?B?cUlhVVovZUVUWHEveW1YSFNPcWxMMUFsZUVnVWJrUkduenk0QmNsZloyTndJ?= =?utf-8?B?RHdkbnNUM1lRK1UvNHVRek9UR0dDSDJsRlZIZEhRRDZycFpYMXBPVkFzNDhy?= =?utf-8?B?eCtZNjFJREVZVGMzQk44QmZ6eTltbWVWTTFzSHV1Q2puQktDc3ZMQk9heHNp?= =?utf-8?B?SGxOL1M1MzdGREgxSFRFRmhUd0FlZE0zSVB0Ylh6VjBCNk9iRFlHa2pxL2o3?= =?utf-8?B?eGtkRnhVNkhzaHg2MldDazZFMWJPTE9SQjZOZS9JNDBadkY5LzJLMUdadEVL?= =?utf-8?B?c21FT0h1SGhlSFIyY1hOWno5VEZqa3J0QU1adDBSbmxNZCtQVFY4QlVKRnc5?= =?utf-8?B?WG4xMUJCdnduaHIzWEFxV1ZmTjkzejQ5bHNHWURkRXluRzk0RHdyKzROQmd4?= =?utf-8?B?d2JFOHJQZG9wbmE1eEhSQ0hlTXVPcnk1emU0MXFiNWVYRmwzc2ZSbHV1c1VP?= =?utf-8?B?eXkzREVqN2s3UytKUHdPSUlqTDRJOFJKVG83QzJnYVFwNjFiWEFtQzhkbU5y?= =?utf-8?B?TUhrTy9DZDNXZmV4VVI1VWNtK3VNQzhDejFvQmZXSTd5azNwSzRiQ2k4eXNT?= =?utf-8?B?K3hYQUs2Zlc2NGhSMXJodFFXeUpobnpPSllJMVJkaGNZemVLR1E1NGFqUTg5?= =?utf-8?B?MUVWdnRKb1VydG4xaXFxMnlpS2xPdU85T0twaXZCZXZpSWxOcjhHUT09?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4f918272-f5cb-4192-f1b9-08de6a452bbf X-MS-Exchange-CrossTenant-AuthSource: DS0PR11MB8205.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Feb 2026 14:44:05.4586 (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: FcpxhJrRrhX+soSKAM3507PdkwE/eLpfzVJaAwUqMicD4T/9RsGc9FuecWeaJ2Tq5gdE3F0gGqxa1QtD8V5iBw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY8PR11MB7082 X-Authority-Analysis: v=2.4 cv=Ne3rFmD4 c=1 sm=1 tr=0 ts=698de739 cx=c_pps a=SjKxu3n00dGHhKqS4WZ18w==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=M51BFTxLslgA:10 a=i1IsUcr2s-wA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=NEAV23lmAAAA:8 a=2AEO0YjSAAAA:8 a=VwQbUJbxAAAA:8 a=XnNIu7v9ea53sXSEXX8A:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjEyMDExMSBTYWx0ZWRfX8y06EKQDKe01 F0MB0R5n9AOzpUiDuVi6DhOMdy7cMNyBAdnGR7tCw/ihOodwRNXiOxEDDUJnKVkM0gybZkvsclV QE400XXmisxOfK/ywc+1iS9ZxGwp0SvTRTI/VcLUiRtGSYsQ4zeYyT84jIKOU+FVuCN6g5jh11e 6EQ7VcL0Pj1/dDJEyfzr+PVQdABRom44ZUdoBhFP2sZh5a2lde5MjX/BXnO5uYuJ9N0Z9NYja1u gCiyQWEVkTerwt/cJacDPau0Qr8Xz2bBYELpnfk6dBuLvKuNhc7FIv5kK6s3d5V6Sr0aXWh9ujs pV3gtiP3mJ5q4932m9Rf8NmqM7VsjqgDCiX2HTTyPW3p7WAVfrw3v7kLknIxrsyzlMX7edLzMut OzcFU5SxXH9H8HlGAONi/Igc6frpuHsVXwYlhR48K6CV6iE54JVX3mbeca3j2BAXQq5bEQgNzD/ SdXetxWaPooRCs3P/Ow== X-Proofpoint-ORIG-GUID: jO2WIsoMhvj-uyLC5IwMzbpzUdRtqr4G X-Proofpoint-GUID: jO2WIsoMhvj-uyLC5IwMzbpzUdRtqr4G X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-12_04,2026-02-12_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 lowpriorityscore=0 impostorscore=0 bulkscore=0 clxscore=1015 spamscore=0 phishscore=0 malwarescore=0 priorityscore=1501 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602120111 CPC stands for Co-Processor Communication and currently exists as a userspace daemon [1]. It enables multiple applications running on a coprocessor to share a single physical link to a Linux host. CPC userspace and kernel implementations differ, as the kernel implementation relies on Greybus. So even though both share the "CPC" name, they are not the same protocol and are not intended to be compatible with each other. Kernel integration is intended to superseed the userspace daemon. The point of the kernel integration is gain access to more physical links, like SDIO, and eventually add Greybus drivers that integrate into kernel stacks like Wi-Fi and Bluetooth. The first step to add CPC support with Greybus is to 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 build upon. [1] https://github.com/SiliconLabs/cpc-daemon Signed-off-by: Damien Ri=C3=A9gel --- Changes in v3: - rewrite commit message and Kconfig help message to better explain what CPC is MAINTAINERS | 6 +++ drivers/greybus/Kconfig | 2 + drivers/greybus/Makefile | 2 + drivers/greybus/cpc/Kconfig | 12 ++++++ drivers/greybus/cpc/Makefile | 6 +++ drivers/greybus/cpc/host.c | 84 ++++++++++++++++++++++++++++++++++++ drivers/greybus/cpc/host.h | 40 +++++++++++++++++ 7 files changed, 152 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..0e72383381a --- /dev/null +++ b/drivers/greybus/cpc/Kconfig @@ -0,0 +1,12 @@ +# SPDX-License-Identifier: GPL-2.0 + +config GREYBUS_CPC + tristate "Greybus CPC driver" + help + CPC (Co-Processor Communication) is a protocol for sharing a single + physical link to a coprocessor between multiple users. CPC adds + checksumming, retransmissions and flow control to Greybus to transmit + messages as reliably as possible. + + To compile this code as a module, chose M here: the module will be + called gb-cpc.ko diff --git a/drivers/greybus/cpc/Makefile b/drivers/greybus/cpc/Makefile new file mode 100644 index 00000000000..490982a0ff5 --- /dev/null +++ b/drivers/greybus/cpc/Makefile @@ -0,0 +1,6 @@ +# SPDX-License-Identifier: GPL-2.0 + +gb-cpc-y :=3D host.o + +# CPC core +obj-$(CONFIG_GREYBUS_CPC) +=3D gb-cpc.o diff --git a/drivers/greybus/cpc/host.c b/drivers/greybus/cpc/host.c new file mode 100644 index 00000000000..80516517ff6 --- /dev/null +++ b/drivers/greybus/cpc/host.c @@ -0,0 +1,84 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2025, Silicon Laboratories, Inc. + */ + +#include +#include +#include + +#include "host.h" + +static struct cpc_host_device *gb_hd_to_cpc_hd(struct gb_host_device *hd) +{ + return (struct cpc_host_device *)&hd->hd_priv; +} + +static int cpc_gb_message_send(struct gb_host_device *gb_hd, u16 cport_id, + struct gb_message *message, gfp_t gfp_mask) +{ + struct cpc_host_device *cpc_hd =3D gb_hd_to_cpc_hd(gb_hd); + + return cpc_hd->driver->message_send(cpc_hd, cport_id, message, gfp_mask); +} + +static void cpc_gb_message_cancel(struct gb_message *message) +{ + /* Not implemented */ +} + +static struct gb_hd_driver cpc_gb_driver =3D { + .hd_priv_size =3D sizeof(struct cpc_host_device), + .message_send =3D cpc_gb_message_send, + .message_cancel =3D cpc_gb_message_cancel, +}; + +struct cpc_host_device *cpc_hd_create(struct cpc_hd_driver *driver, struct= device *parent) +{ + struct cpc_host_device *cpc_hd; + struct gb_host_device *hd; + + if ((!driver->message_send) || (!driver->message_cancel)) { + dev_err(parent, "missing mandatory callbacks\n"); + return ERR_PTR(-EINVAL); + } + + hd =3D gb_hd_create(&cpc_gb_driver, parent, GB_CPC_MSG_SIZE_MAX, GB_CPC_N= UM_CPORTS); + if (IS_ERR(hd)) + return (struct cpc_host_device *)hd; + + cpc_hd =3D gb_hd_to_cpc_hd(hd); + cpc_hd->gb_hd =3D hd; + cpc_hd->driver =3D driver; + + return cpc_hd; +} +EXPORT_SYMBOL_GPL(cpc_hd_create); + +int cpc_hd_add(struct cpc_host_device *cpc_hd) +{ + return gb_hd_add(cpc_hd->gb_hd); +} +EXPORT_SYMBOL_GPL(cpc_hd_add); + +void cpc_hd_put(struct cpc_host_device *cpc_hd) +{ + return gb_hd_put(cpc_hd->gb_hd); +} +EXPORT_SYMBOL_GPL(cpc_hd_put); + +void cpc_hd_del(struct cpc_host_device *cpc_hd) +{ + return gb_hd_del(cpc_hd->gb_hd); +} +EXPORT_SYMBOL_GPL(cpc_hd_del); + +void cpc_hd_rcvd(struct cpc_host_device *cpc_hd, u16 cport_id, u8 *data, s= ize_t length) +{ + greybus_data_rcvd(cpc_hd->gb_hd, cport_id, data, length); +} +EXPORT_SYMBOL_GPL(cpc_hd_rcvd); + +MODULE_DESCRIPTION("Greybus over CPC"); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Silicon Laboratories, Inc."); diff --git a/drivers/greybus/cpc/host.h b/drivers/greybus/cpc/host.h new file mode 100644 index 00000000000..f55feb303f4 --- /dev/null +++ b/drivers/greybus/cpc/host.h @@ -0,0 +1,40 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (c) 2025, Silicon Laboratories, Inc. + */ + +#ifndef __CPC_HOST_H +#define __CPC_HOST_H + +#include +#include +#include + +#define GB_CPC_MSG_SIZE_MAX 4096 +#define GB_CPC_NUM_CPORTS 8 + +struct cpc_host_device; + +struct cpc_hd_driver { + int (*message_send)(struct cpc_host_device *hd, u16 dest_cport_id, + struct gb_message *message, gfp_t gfp_mask); + void (*message_cancel)(struct gb_message *message); +}; + +/** + * struct cpc_host_device - CPC host device. + * @gb_hd: pointer to Greybus Host Device this device belongs to. + * @driver: driver operations. + */ +struct cpc_host_device { + struct gb_host_device *gb_hd; + const struct cpc_hd_driver *driver; +}; + +struct cpc_host_device *cpc_hd_create(struct cpc_hd_driver *driver, struct= device *parent); +int cpc_hd_add(struct cpc_host_device *cpc_hd); +void cpc_hd_put(struct cpc_host_device *cpc_hd); +void cpc_hd_del(struct cpc_host_device *cpc_hd); +void cpc_hd_rcvd(struct cpc_host_device *cpc_hd, u16 cport_id, u8 *data, s= ize_t length); + +#endif --=20 2.52.0 From nobody Fri Feb 13 23:22:23 2026 Received: from mx0b-0024c301.pphosted.com (mx0b-0024c301.pphosted.com [148.163.153.153]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3A71D2C9D for ; Thu, 12 Feb 2026 15:14:48 +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=1770909290; cv=fail; b=q+d8fWJQ12nRvLtNSPE+zErTMju4Ig5gCbsLbjLoW/1jHlQ+rIJMwN8YSq/D20iR1Foh8W5e14R52S7U12VV0tGLtN90hP3vmNqQSI7JOHU91p9yQtZP0u105nX5UDLTU7DIKpv5+9uzH6zCc8V0iynFVElD4DJiAY/mRB5fNVY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770909290; c=relaxed/simple; bh=QX+Q4rPkum4h4LkNeUGSZ4LOxdFI4EC0KEtd/qSYJFE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=dd3sak9xBb59qDh3NRPqNFP6RBiUj7aJRob2xLwXCCUjdSifgMqvDbIAqbb8h2SPupWjw7i37q7TddLdcdfLvl4RoJM7RyvnzSXcH4ozNr5O6FSCUqIe/S4ba756jO/42qn6UIT1engxRVeWgKoKfj2KqlP9PxEamZmP0iRXFWk= 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=sBGGih6v; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=IL85ijIh; 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="sBGGih6v"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="IL85ijIh" 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 61BMnYg3335638; Thu, 12 Feb 2026 08:44:10 -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=n6cRjDG0wG/9MD2V8DTsdBh3FlQESn+NT8YGQ45bU4w=; b=sBGGih6vdq6k F8A0Che3mDNF5MezI3GlBqqq898QEoB+1I5z/8g3PVi0E6FsATsEgFlAwdhr+Ni8 1S7Rq+3jy+o/J0Cm7FgZg+AXPKEYYpktulyz10tEt376s+nXLK5iT3LQk2/hOUyl xlvpPSxl4haxMh5NIUyLvgBALTnEibwkKWjKjMzeP4LNFd1XwQPc7K8hq85S5gAD cQByPyN0l940MxTsgn1Sv59Z4P+McEomQoqguu8BYn063IAIOb3/s/W8FJxKNARC Wh6OUOGYIS/tqcDCkkA6WlnU1Iq2ZfhSBxbikPdVWWRtTLFlsEBlrQ91xXqtYHoY mUBemUcljA== Received: from ph7pr06cu001.outbound.protection.outlook.com (mail-westus3azon11020136.outbound.protection.outlook.com [52.101.201.136]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4c92w8sk2e-3 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 12 Feb 2026 08:44:10 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=gzaH2r/fnZPF5O0xgK7iPzbyGtNsbDxykyAJFH3RJU16jgYlzH5E7GqCb6GmDOTFr3anyFsdJUFsHlYSlRWy1CcMH0FxCp39GPU/94gT65lkScms4GehA7K950lXEZoo/+cUNbtjcecKtE8Zcb/e0kWXcmnBHvxDZgVtpeWCe8V3KNKkZVdHMYWH8vPWe0+sGhH9u/SMdO7JhtKvyw10QtUp4gpjCkEcbYwV7nU3RD9PuILdg4+5b/rFrLiP/UM8+59of3RX6OW4SN8bSl4UPsKashEdqocT5f3O0nauqc+RKfmZHJdtYPzlp1FD6cR5r7PAbLkO3YIchxf1w3Pq+Q== 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=n6cRjDG0wG/9MD2V8DTsdBh3FlQESn+NT8YGQ45bU4w=; b=MMS8qBMY7F3b1G3+wcTIr0RmuXW7aw6v0e8ro2SUpiD/kS2mxxCHkBNxK9hPi+O+zbj3KRDBEm/13XQViH4UFGQrTffcz7jD0c1K3wY7r8pzQC/GnV3pLH6xYitPPtxQujEnL3ZHIK/ZJNpLBiOjMV9H7ZLraKi/0hpOI00AW8tU9L/2g6ozlU0pSY1wfOz0lo5/a1zV7GogP5wjvL9+N6NPzuzfAFGWwgPFYAoIwqkq+otdCKAToMskIwapdd7BpOLVJL511GhtWJdYFZ30Mo/h1cdFpJVGGXq3KEOdtpa0FKlDLH88OOuvtY7pFvJ/ojJh04I1EdJ/28wO4XdDEQ== 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=n6cRjDG0wG/9MD2V8DTsdBh3FlQESn+NT8YGQ45bU4w=; b=IL85ijIh/q0Pq+FnaYrtc7cFH4Sd6Zag27/LEpxVAZTH7Qc6IiUzca1UaK54Oo4Y6fIcbfl7Ws0T7zk3NH05D/mG6EXsgl8Ft9QgaEXXTlfckxgjS7HvJL9qN0hyl/Iix1nkhKKtdZNFyC6SkgjsU8aQmmoI5MYrNgxQQbgeVMU= Received: from DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) by CY8PR11MB7082.namprd11.prod.outlook.com (2603:10b6:930:52::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9611.13; Thu, 12 Feb 2026 14:44:07 +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.9611.008; Thu, 12 Feb 2026 14:44:07 +0000 From: =?UTF-8?q?Damien=20Ri=C3=A9gel?= To: greybus-dev@lists.linaro.org, Johan Hovold , Alex Elder , Greg Kroah-Hartman , linux-kernel@vger.kernel.org Cc: Silicon Labs Kernel Team , =?UTF-8?q?Damien=20Ri=C3=A9gel?= Subject: [PATCH v3 02/14] greybus: cpc: introduce CPC cport structure Date: Thu, 12 Feb 2026 09:43:40 -0500 Message-ID: <20260212144352.93043-3-damien.riegel@silabs.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260212144352.93043-1-damien.riegel@silabs.com> References: <20260212144352.93043-1-damien.riegel@silabs.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: YQBPR0101CA0124.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:5::27) 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_|CY8PR11MB7082:EE_ X-MS-Office365-Filtering-Correlation-Id: 22b91da6-cfb7-44ea-e945-08de6a452c41 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|52116014|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?aEFpY0NncllCN21Zd3FMSm1wMzE5UEZhbm9RYjNnR2ZDaGE2VmpGdmNSZi9I?= =?utf-8?B?RVUwZHozMzFGSy9Jdjl5eTJ0QzNvaFN1SStvK1hnNVhjTnVqZUc0WDlMVmpB?= =?utf-8?B?UUE0czAzeUZSS3JTL09CWTNTZmV0ckY3T0MrYmh0eWZTTE83aUpveXRLbnZn?= =?utf-8?B?UEVRQkZNbnhNbGVpTjl5U3JMZ1diWm1HSHduM0w2SDY2QzVpd0piaWc3STU1?= =?utf-8?B?SmlSRlFSZDZmby9GUnZQTFdkZkc4czAySTZqTUE5WFdPaGc4djk0UmZsOTA2?= =?utf-8?B?OGRhQm93V0FrWE9JU2h5S29wMEF4Z044RzBUTUNhamRqbHlKL1dwRHVzRXN0?= =?utf-8?B?ZFdDNkpwTTZndGNJVWVnbFRQeXlOWmcwTzBGMmlUbVIyTi94Q3dBR1VRaWVp?= =?utf-8?B?L3ZQR3RiNTgycUZ2V2xKdDFkdXpiT2YxaytTMCtvbGZuSE5CUXRPNDVJWWVo?= =?utf-8?B?eDBkUlFDcFJEOTNkRUx2RDRtSWhVZHNvdC9uT28xUGgySmVjOVk3Q2Y2OEps?= =?utf-8?B?WnBpT0JSRzUwVjdOZWEzMGg3Qzh1dGd4d1N0NThtTlBGVVAzVkVSbm5Zc3hL?= =?utf-8?B?NzJ0VHprOURJa3g2NFZZNGc0UldWL1BPaFhQSCtlYWcvQ2xVQTRPOUV1eGxn?= =?utf-8?B?RGg3T0g1aVN4TjEvd08xamFjTS9GazF3RXlFN2xqT1duWjBnNll6RFl6OGJ4?= =?utf-8?B?V1hjbGhOU09EUG1zTnhNNnRHSTJUbUtZSVRiOXQxaVc4dTVQRjkvbEtCTmEr?= =?utf-8?B?SkxsU291KzFYY3Z1LzZsV0VqYTRJaDk0Nk41Zy9JeFJNSkoyRWR2UnlqMksy?= =?utf-8?B?SHM3YWpTR0dUbXNpT0d2MC9WUjdFVTB4QnpDczZtRkcraktoQXZ0NVJmbTgv?= =?utf-8?B?bTZCV0FGVVgyZ25CZDRSanpXSVJtVk1aMkNxdlZRVm9SM2FxODl2Q3BUUDdY?= =?utf-8?B?UlVFdVh0MER4dVZibk5iK1U0NWZxZE91SkFCWjhlMDEzZ3BLZ0NDcW1pazR2?= =?utf-8?B?RHBsUDNiS2FMNnBjWDdIMjdUUmFLYkFyUmVwUE9lTUFYL0xZWHZkbmdXZG9v?= =?utf-8?B?K2JOSVVOTDVJdjhwaGdmTGNTY3VlVWEzOWs0SzlFRVZSZVpxekljSUUvUHlX?= =?utf-8?B?c1ZrMHNIRGtFYjUyS3Z0V1ZZZCt2T2RmREZsZkthMlkrOVJMR0pnZmtGellh?= =?utf-8?B?WTBPTmtQaEFZeG5YVk05V2xWNGRnWk1kcUdMVW5GdkY2WmtZc0M0b3hMUXo5?= =?utf-8?B?SDZrWGl2MlJQUzV3WFFYdDFpOUp2U1NKVklFSmRWS0dXZVZxZC9UTmpqSUZr?= =?utf-8?B?ZWpMcmFWTFdNcGxwdWRmbU05UUR6SzhkQldGT0pHY2J4cGZWaVF0dC82T2hn?= =?utf-8?B?NlJ4L2xMb1JTOXFZdlRsL0NtTEVJOElqcGY4VEVCLzJjZjIxTmFVNGdrdWU5?= =?utf-8?B?emw0VlZRcmgvcVNCS3ozZkNsbmxMWnhZeXBYbUIzRjc1dVNhbXVJdzZubFpZ?= =?utf-8?B?Uk45UXRHRGhIYmF6elhyZFJuSllzeUFDaUoxVFZuQmZuc1hncUd1anFnU3Bu?= =?utf-8?B?alpGQ0ZuaXJKSGRKeUp2eGlRTDJlRitZTENIQ29BaEJlOEtvRHpPQU1WckxG?= =?utf-8?B?L1UzbUhHR3F1MFF2aTZzcjVJczlaOEdtbVBEenovM24zbDZBcGsxYlN1bjg5?= =?utf-8?B?dStSWWhrWmFqbDNhZlRDWmNuN05oQWZNSVB0bVFwNFJkVGpSbzg2b3hLY3I2?= =?utf-8?B?ZjJRSjdHRktKMncrYXpYVUZQU3c0bmlqejVsWDFQRkVielhuZ1I0MlFhOXVI?= =?utf-8?B?ck9udTU5K0RqdlpKNk9kQzFwa09JVmJBdXdyZmNCRUc5czRrcWd2RzVjczUz?= =?utf-8?B?L1B5N0Znb1NVU3dZaWJDSVFzT0NqeVcwa2hEN2tpWmplQkRTb0pYaUJmeWNX?= =?utf-8?B?dDhJc3NuVytiR2FOdTY0OEh0TGV3NWtNZlU0djZFK1d4TFB3eklJWVI2a3dO?= =?utf-8?B?aHFxM0FhRGhNbWgzTTczc1Y3S0toV1BzbTZqSjByMEEyU0M3QzJyQW8xbk1n?= =?utf-8?B?NlZwQjFhY3Q4UC91Qng4VGN1dWlmcHFtZk1URnZZSWRRbnNoK08wdlRLWVJn?= =?utf-8?B?NklhSFVVN3VyaXFTYXplOWp1cjBRdmFTaFF3SmdMMGJ0bG1yb2swZVRtczlU?= =?utf-8?Q?tLvrgeXT0rkH/Vn6iauxAII=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR11MB8205.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(52116014)(1800799024)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RXNibkNjaGtCZmJ4c3RoUkJiUTMwczhDTzJrRWVVUmxkelpJb0lZY3BRRVZw?= =?utf-8?B?VzhrS2hSZ01jRWFiaDFFZ0FkSzlBT3NiNmtFNk8zSDk0cmk4dTV3Z3NNMVN5?= =?utf-8?B?UlpyeHF5M1ZYNDhNWnhZVTFkVDBmWHlSc0pqNDdETXVKRDFpb21zQ3FrdlRl?= =?utf-8?B?dGt3eVdPZVF6Q2VHLzBDTGNrN3VjMm9WMzM0WTBZbGtoM3pjdUIwSDNtRkk4?= =?utf-8?B?TEcybGI3ZXBiQkwxdlJRSFVzSkFsZHBlQ003NzBaRERKNjFabmw1QkJoK0p1?= =?utf-8?B?TFpSQXl0Y2FrMzhmRXZiUVZKNml3Um5oTkxzVGhxMHNkbnh6UVZXR1lWTW5E?= =?utf-8?B?NjBTUE1ybnVFZGw4RUF4SmJmMTRnNnZiK1p4b3I0L0phb0NRM1MwMmlEMGx3?= =?utf-8?B?VmxsSVhoOFFEZXUzcUJ4MjBmalNRSEJtV05ZVW9MWDR0VlJ4OUtzVzBoM2o1?= =?utf-8?B?cG5TeEcyR3ZXS01iU005Sm1WdlkyM2dVMmFEL1ZyRjY1WTBFOURHTWM0em43?= =?utf-8?B?VGJMb1UxTFA1bVpVVXZsWnFKZC9iRnR4ejRDL3o0NThReU85eW1Sb2VWTFVI?= =?utf-8?B?ZGhQTDlJdGRYT0lxUlRuZk1xT3BBOHhCeVhkcklrbjV4UTFISWFUUVd0TmVv?= =?utf-8?B?MkN3RkpPak1oeFU1VkROaDhkVmVpaTN0TnVZbkZsODNKdTBsSDc3alA5ckxG?= =?utf-8?B?VzV3NGhlWHE3c291czBNWjlxSFNZQTViZjZna3JCWUdBTW9BUHZUMEJJMTZD?= =?utf-8?B?MFpWR211ckRIN2Q2UEdLTC9jcjBjdVczbWtIOFdiSmhMOFlpTDYrR0pMajNs?= =?utf-8?B?dTBCSUJ3QTZHcmM4NjVyLzZUd0lWSjBqaGFmK0NFRTJ6SWxqZGNremNiWlpm?= =?utf-8?B?RjE4TjZMZFQ0ZEVqS2RwVERWVEVRYVl2OWFNRnhqdmdNeG9wUERINkJ2QlVt?= =?utf-8?B?eGlEdTRHWFBXQzBDL2dUaXBrVm5XaHlMZVJpMWgwd3Q4cTJDR3JuNWhhYzBO?= =?utf-8?B?czI3R01lTnlRZWFZaEFRcndyMVFIZnpWZENyTUtPZmJaaFZQTldVeWM1QVhP?= =?utf-8?B?bWhmUDZ0dDNzK2ZkZ3RpMUFZSWJVNE1pTHVPTlNNT0NWSDFESExFWnIwVkFE?= =?utf-8?B?QjAzVzZ5OVhzT2cxZGVrOWc0NFZKenJsdVQ4OVVMWGNiejFjdU15S04rOHpy?= =?utf-8?B?UFdzRExTaXZ3STdhMjJMZFptZkx2NzZPSGx0ZjBIOVlIaFNNWHBtcW16NlQ3?= =?utf-8?B?dEFrUkxscHV3MFF4UmdhV1ZrVHdKQXo0ZUVVVDJidkNTQWprTzlmMTdrNnV1?= =?utf-8?B?UVExanRINytGOVJRWktqdjFUMXFTbjFRcnlwWUlsVkxicU90VlFva2xWaGYw?= =?utf-8?B?RFA0dTRJUTk4UGVmOEo5UWg3cHVpZzRPSHRpSVRGcnhGTFAxV09MeUJRTEgy?= =?utf-8?B?Umc4SlAzK1p4dzVoVC9MdUZCeEVkTzBtekcrUGhMVzNFWTlSR043WldmVS9v?= =?utf-8?B?alQxNjFYVGlydXNoZmY5V0M3dUJMSW9VOWZwMUlOVllTekNhdHVvOUZIajEv?= =?utf-8?B?azFXaWdrZmVqa3pGbzhxdklrZUVWMkdUWnkwSzhOQ1p3bXM2ZlNzY0piSlJu?= =?utf-8?B?anBCUkNabitBamlMV1NpaUc1NEovOE02OGoxRWpRMmtmRmtRdUk4RTR1VkJ3?= =?utf-8?B?RHdsaVpiMFVRcnB5Qmlkc05sQjVZNEZrR3BOSGc4UGdhbzNWa2ZJQkI2c3gr?= =?utf-8?B?RDFid2MwR3dqR0Q0TUsxVkNadG9VTUxGYXlrNWJndWZHTm5NMFk3U2NocGRG?= =?utf-8?B?ZnNtK3lqb0MvSFRIOW8rQjREMUQwRndENEczR01UcFVGd1pNOUNvM1NhZFV0?= =?utf-8?B?OE5MajArbUprVkVXNmFjLy8xOGxHT3JwNTN4T2F3U1gxYWRLTTA5WDVJckNE?= =?utf-8?B?Z1lON1FOaERRSkVYU0hGenAvU2RJdkZta3FVcGRlY0k3UG1RU0c3ZjRLMXh0?= =?utf-8?B?YldDTXd4QkRMcG5zczBwNDlENGJNSXFneFRWUitVZDRDVFF2VVBoRUszeUpa?= =?utf-8?B?V3AxVUlGS1d2TGp1ejlySndLMmRZQzc4S0VCeVpWQjBFUjhrdXRXSncwVHRS?= =?utf-8?B?L21uRkxIL2h2YUR5OHlscDEwTDZvanNpb3hTNnQ4WGVBM0pBRERlZmxsejQx?= =?utf-8?B?ckUzait0TklaanhwRlFDcHhNeHFNQnBUZmpCWkU3RkNlUzdrM29CMTZYSDc2?= =?utf-8?B?L0dRS3g1Qy80NXpqUnpEWERYa1U5UU9jUHhuZkpsQkFIVzRwNWhSclhYM3R0?= =?utf-8?B?VEJod1dBTkx4S0pnR3dNcnN2WUNYNCtGN2pqYlFPL2dnUWY0VWFvUT09?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 22b91da6-cfb7-44ea-e945-08de6a452c41 X-MS-Exchange-CrossTenant-AuthSource: DS0PR11MB8205.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Feb 2026 14:44:06.3208 (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: 367rQFuF44Na4m3N7CNLtczK1qjiflNAyRhrH26oxsHMEwes4flx44rMVA5W0WvvMuh6OtCBdQzayh7w8HlJOw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY8PR11MB7082 X-Authority-Analysis: v=2.4 cv=Ne3rFmD4 c=1 sm=1 tr=0 ts=698de73a cx=c_pps a=SjKxu3n00dGHhKqS4WZ18w==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=M51BFTxLslgA:10 a=i1IsUcr2s-wA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=2AEO0YjSAAAA:8 a=iqUPcmWXN_vvxTOgPeMA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjEyMDExMSBTYWx0ZWRfXy29Fm9xTx36Y wbCfGVwNgtLAsA+FMpprHb9LfRN3dwjja69BY/7sFxgPV9NDk4prWDsEOQiQ8+3ZAUrf6tReEEI mbI4jAmxpYuDpvbvqwPWbDooCDuWRV3X50Ct9lBO6FZLPRcDNp5j+LDTBeL7gWKtEhtuIvviRQU 381ydTO4N0VwaGoRRVwnO4+d0dtrAAmXtQqYflVzvWw92lisJlRLbErRkRwuqTLDSc+LBDR3Dx9 zn00nNaxQpR4tXP92yROzazawQIMk6GUdFNYhOXd0X5QtWhOLXYRirKDezutdAdVS3hwggXukmC uOKx4MIChySFoK1iBcQV0HFVumBFI/APIplEBo994+JJLel5e+pHivLBRqYixOU3GAs0xTY82fv zMDPISrrmRIAbWG3INX31ZV/tmDkrSydeJesAj56ry5i1nhqk0WYKUY1Z8Te/0SQv2gKlzzYpjn ktRWBj+LRDJMGqFrqXA== X-Proofpoint-ORIG-GUID: GoEfKHp9Ow2qQRgacygDa2sVYt8kQj0w X-Proofpoint-GUID: GoEfKHp9Ow2qQRgacygDa2sVYt8kQj0w X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-12_04,2026-02-12_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 lowpriorityscore=0 impostorscore=0 bulkscore=0 clxscore=1015 spamscore=0 phishscore=0 malwarescore=0 priorityscore=1501 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602120111 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 --- Changes in v3: - simplify cpc_hd_cport_allocate so that cport with ID "i"is at offset "i" in cpc_hd->cports array drivers/greybus/cpc/Makefile | 2 +- drivers/greybus/cpc/cpc.h | 29 +++++++++ drivers/greybus/cpc/cport.c | 37 +++++++++++ drivers/greybus/cpc/host.c | 115 ++++++++++++++++++++++++++++++++++- drivers/greybus/cpc/host.h | 12 ++++ 5 files changed, 193 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..3dda5b06590 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,101 @@ static struct cpc_host_device *gb_hd_to_cpc_hd(struct = gb_host_device *hd) return (struct cpc_host_device *)&hd->hd_priv; } =20 +static struct cpc_cport *cpc_hd_get_cport_unlocked(struct cpc_host_device = *cpc_hd, u16 cport_id) +{ + if (cport_id >=3D ARRAY_SIZE(cpc_hd->cports)) + return NULL; + + return cpc_hd->cports[cport_id]; +} + +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); + cport =3D cpc_hd_get_cport_unlocked(cpc_hd, cport_id); + 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); + if (cport_id < 0) { + for (cport_id =3D 0; cport_id < ARRAY_SIZE(cpc_hd->cports); cport_id++) { + if (cpc_hd->cports[cport_id] =3D=3D NULL) + break; + } + } + + if (cport_id >=3D ARRAY_SIZE(cpc_hd->cports)) { + ret =3D -ENOSPC; + goto unlock; + } + + cport =3D cpc_hd_get_cport_unlocked(cpc_hd, cport_id); + if (cport) { + ret =3D -EBUSY; + goto unlock; + } + + 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[cport_id] =3D cport; + ret =3D cport_id; + +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); + + cport =3D cpc_hd->cports[cport_id]; + if (cport) { + cpc_cport_release(cport); + cpc_hd->cports[cport_id] =3D NULL; + } + + 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 +117,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 +162,8 @@ struct cpc_host_device *cpc_hd_create(struct cpc_hd_driv= er *driver, struct devic cpc_hd->gb_hd =3D hd; cpc_hd->driver =3D driver; =20 + cpc_hd_init(cpc_hd); + return cpc_hd; } EXPORT_SYMBOL_GPL(cpc_hd_create); diff --git a/drivers/greybus/cpc/host.h b/drivers/greybus/cpc/host.h index f55feb303f4..c3f2f56a939 100644 --- a/drivers/greybus/cpc/host.h +++ b/drivers/greybus/cpc/host.h @@ -8,11 +8,13 @@ =20 #include #include +#include #include =20 #define GB_CPC_MSG_SIZE_MAX 4096 #define GB_CPC_NUM_CPORTS 8 =20 +struct cpc_cport; struct cpc_host_device; =20 struct cpc_hd_driver { @@ -25,12 +27,22 @@ struct cpc_hd_driver { * struct cpc_host_device - CPC host device. * @gb_hd: pointer to Greybus Host Device this device belongs to. * @driver: driver operations. + * @lock: mutex to synchronize access to cport array. + * @cports: array of cport pointers allocated by Greybus core. */ struct cpc_host_device { struct gb_host_device *gb_hd; const struct cpc_hd_driver *driver; + + struct mutex lock; /* Synchronize access to cports */ + struct cpc_cport *cports[GB_CPC_NUM_CPORTS]; }; =20 +static inline struct device *cpc_hd_dev(struct cpc_host_device *cpc_hd) +{ + return &cpc_hd->gb_hd->dev; +} + struct cpc_host_device *cpc_hd_create(struct cpc_hd_driver *driver, struct= device *parent); int cpc_hd_add(struct cpc_host_device *cpc_hd); void cpc_hd_put(struct cpc_host_device *cpc_hd); --=20 2.52.0 From nobody Fri Feb 13 23:22:23 2026 Received: from mx0a-0024c301.pphosted.com (mx0a-0024c301.pphosted.com [148.163.149.154]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2E99435CBD8 for ; Thu, 12 Feb 2026 15:11: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=1770909079; cv=fail; b=U72ew5J8mDkG4HGuXPGq/FjX1KH4Y37533tX7ZxZOMOAXh98vtr5ZBaNrQEMp+RdtKMDXN7jpbAyWOSOc8rO6niWRYdrembTwRUrghE7nj51Yx7h5TlSYgsAP9AiYRhIcG1wDCiKhrDysD76yqaqPcaCddb3SFHl/CcAgdVTOQM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770909079; c=relaxed/simple; bh=cibXPvSR/cqvU8KzIO6arVscVUF5W0C+7G4sbxoOcho=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=AefuNkFsqVxioJAen8TFwbyWCOgRizCbnPJRv4MHkPlQU5I2YVQW9yvhBvyDqEWPbi3dtlowQv3b5m+f2TNVuRWKGfWT2+fj5BbLh2xapPP+hKg2lULGfcGVXahQhumtZCNqgYGWrc9Vn4yiAbVSZ6PQCcnuVgIt4dElSUka2Lw= 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=nWaFPePF; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=L7/xa1do; 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="nWaFPePF"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="L7/xa1do" 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 61C2Lwnd2678544; Thu, 12 Feb 2026 08:44:12 -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=aPf7r0pvtLQO4j6vrxILj6YISgls6NkTAAtXLXqgDdE=; b=nWaFPePFH5yl Lo0nQCN9G+2zMyfJBsq7LGO9WQb4XH3QixNLy3SPkbtpIbQ4pDcRTYY5J2MhZJJv QO0yGDkZw29/pOh/NPTuU3MqAcpqoSlbxSdDcPfpdkGReG8rwF02qpvEFzuDYj9W jBQyqcUkuUYe5bbfztdoNo4TH3yc71+6Z2Jf3K+hvisvsFwUCOdrFBhqZeeSjJdI YiNqJWX0oRRggNp14BzIYfZaC1AXnpowxKpVMRr+KwI1UZns4faeLrYPgtPp3C/v 05SvjLoqGCs9EnuYZu86Z+W16DC6aJ8eaxSvpRn9OiHTtin4kOyzPm+aRl6HaKRW 3igr9JLNJQ== Received: from dm1pr04cu001.outbound.protection.outlook.com (mail-centralusazon11020096.outbound.protection.outlook.com [52.101.61.96]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4c92uysn4e-2 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 12 Feb 2026 08:44:11 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=hvkK1Rm1T9/ILt2JMHtvHMYcB6uwJHAz8vXR6rwA051aLIwuVKT5YhwdD0qKlzLpflKFe4LGwWrZBqX0Cgzk3E3Hni+hZazdkQxD31sZJA1jz5oUrfODVciRPjfKiTKib9mJ7ZTnhlBYC6f1VzVwPQmKtNnjI0+w5WagFEp76TlLt8kpd3KC36xHiGQJhKjhVQgMRwDqlrbJNizH4ihb+zEpp5YXN3zg1JA2C5fMiksrq+r49Fk1jz/vXFNLpd9KQKr6IBFqTP91HXOmLB3/OK/LsxTn2bOwglHpbGWeQlJL4uKqHdoWNuIYCCT1g4LogeLfOBU/AbTwcHoIP3fzuA== 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=aPf7r0pvtLQO4j6vrxILj6YISgls6NkTAAtXLXqgDdE=; b=Q+7KRajSZSkIagHHZu8maLqYYxnY5ti1xK64eIW7dzS22P8JuzsQ1j1AESo7nKoIsiQoq1wL3AK0MJUrXjaTapOBG43+O8SLrcWxEIwMOxrNGTxQnXqyVJOn/3YK/UYz2XnYskeMRmGotRxqrRHK4XQ3WrzjmePL6jFJrFedgRkvLhRHwUS1MUO9pp9Ca6P8Uf0fC0SjnQFwyttCOFSARM8TBZm2b1p/sFD/mtmivH/wg0AZXdeA3jdiGKasL7lFNo6R1xIY9WVZv6qrB9Mk761H/uhPidKj7BgNZS0F+qvnl7l9dik3YUpu1c5+DIZQjWQC1aZULEnyZGe2YgQNQw== 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=aPf7r0pvtLQO4j6vrxILj6YISgls6NkTAAtXLXqgDdE=; b=L7/xa1doB+yGw9MCpGosZn+/NqM6GJLZbQkHwmpS5K4pkAcMCMnUYq1Z1bfdGUrGVtIwaNMV52k58qpcMtQzr0RPPWwBg+qF0Zod6dVPVbxvy05lRC4qwVKuGkG88hIpyYzaMsn0YO3Kc0brl5i0NnsZbt1Ydro2W7bwKIyMsVU= Received: from DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) by LV8PR11MB8486.namprd11.prod.outlook.com (2603:10b6:408:1e8::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.19; Thu, 12 Feb 2026 14:44:08 +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.9611.008; Thu, 12 Feb 2026 14:44:08 +0000 From: =?UTF-8?q?Damien=20Ri=C3=A9gel?= To: greybus-dev@lists.linaro.org, Johan Hovold , Alex Elder , Greg Kroah-Hartman , linux-kernel@vger.kernel.org Cc: Silicon Labs Kernel Team , =?UTF-8?q?Damien=20Ri=C3=A9gel?= Subject: [PATCH v3 03/14] greybus: cpc: use socket buffers instead of gb_message in TX path Date: Thu, 12 Feb 2026 09:43:41 -0500 Message-ID: <20260212144352.93043-4-damien.riegel@silabs.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260212144352.93043-1-damien.riegel@silabs.com> References: <20260212144352.93043-1-damien.riegel@silabs.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: YQBPR0101CA0124.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:5::27) 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_|LV8PR11MB8486:EE_ X-MS-Office365-Filtering-Correlation-Id: a129b1ed-30a2-4675-f6da-08de6a452cca X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|52116014|376014|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?S0ZITEpYcjVSMEI1N2p3Y0Y2dXNJYnlJaWhhSTJsQUFoeXhlellrQVdzNllM?= =?utf-8?B?V0JoSUxWdFI4RVJQMnBDVzYyejdiR0JFb3F1RlY1VHArT2R5ei9ka2U2WkVX?= =?utf-8?B?UXNNbktwVjBMYlFjYVBIY0srYjBSaERiT2FyYW90TWsvRHBFWlFXcW5Lb1N0?= =?utf-8?B?c3hlNTBRRDhXazZKWlc3L1BoajlsNCt2cEl1Tkh2Qk9UQlFaZFdEWEJmMjli?= =?utf-8?B?eGZUdnJZdzUwTUVSM29iM2t5ejQyaEZYZTdDVGNSajV4VzUyUFYxMEFsZ3Fi?= =?utf-8?B?dE16L21RSzBCZ2w2ZVhKS2hEZkJlaHhjWU90SURIRlJCRGRNTk1FdjdEc1c3?= =?utf-8?B?NGRKNUNsT0hhcmxWNUh5di9QUHBxd2k5WkR0L1kzMjBLaVd1TC9iK3lyN0lK?= =?utf-8?B?M1VLbTVYdWIxNlBsRE9PR1F2YUhibDVvVTV2TG1NNnJYQkY2L0FqcjhnM1dJ?= =?utf-8?B?eDBLWGlITWloMzFBbzdYWUhGbGQxUDdSTDZiNUN5emFRMWNGbUtLcGFIdzZ2?= =?utf-8?B?dkhQdDZlRTJWVUtMWEZIeUpVVis4V0pWSlNaVFVxenEzd2VHVTVTMkVqelhI?= =?utf-8?B?QjZYenU2S3BRSDFkRFZSQ01FSnM4WDk5SUpWSjRWWnpITTN5RGxVcFAvL1o2?= =?utf-8?B?c0NKVnh2OTV6bTFxeHVpU1l4WnphWjlKdjFKOTE1ai9ad1BLTTBGSEU5REcw?= =?utf-8?B?TmRoNnNmOGJyOGM0aXd3RG5LYWc5YTNtMTgyaGpnK3hmcGRCNmNJYVBPU0xt?= =?utf-8?B?aUhWMWMxNWlZN2g2eWFuMGVlMVVLVW5LMkIwYkx3Mkp6cUxZakRyVHgyenZL?= =?utf-8?B?emVBL0xraGJQVHVNb25uWDZVUGxDNHp2ejBDdjVweGdMNlIwaWliSVMrZjk0?= =?utf-8?B?SXRHbi9CcWtvRWl0SFlqK3hDdzZzN0JMTFBxay9sUk9sbTNWOGlqbkdNM3RY?= =?utf-8?B?ZllXT2FYQTlXRnYyZEdhZ3E4WjZkdHowdThpRGc0M1l1amswM2NBbm15alJ2?= =?utf-8?B?VDFadVdXZlk0bzlpblhlc2Y3NDNxODdJbkRIS05zV0FJSVUwb3c3blVwOWhG?= =?utf-8?B?MG9ONVAzalF6UTJDVVpwUVZLVnB5Ri82ckJzcWZMNUZWczRnd3laU2YzUkZB?= =?utf-8?B?L2R5YldPWG5vREYxLzE1TDM3ellEeURHSjQ0RVNmUjU0MXhSM1dNN0xVdkFt?= =?utf-8?B?U0pEZW1OVkxKVXdIWnByUE5rcWhhdGdNL0JET1QxQmVYTDY5TVVxSzhHTFc4?= =?utf-8?B?M0dLcUhjNCtGRWJKOGpoaTdWSmFuTXR6cFpDelE4bk1sNHhVa0dyV24zYmRS?= =?utf-8?B?R1paS1B1Rm1hWWJFSWFzMENqRlZXRHl4dDFDenJuNjl2bjd3T2JibXRjVUxS?= =?utf-8?B?YThEU0FMdzNja2Z0a0o2YkRDM1JmQ2o4SDF1SEcwaHBDU3ptazhjMFpGa3NG?= =?utf-8?B?TUQ2TnBoVzBrcUEzbmIxNmhLMmJZdUlpTUFLV05sRDV3ZmFqZWRycmRMRjBt?= =?utf-8?B?eHl4WlRsY0FzSTZ6YjVMT1ZWZlZYTG9Vc21RWnNpQkNrY1ZrQjd3ZHZXeWVl?= =?utf-8?B?M0F6STE0Snpya2Z2MzVtbU8zSktvOFF5VHdqSWxJQ0xtL2FjQVJQV3JPeERV?= =?utf-8?B?ZFhJQXN0enMzcWlBaUo1a3FVYndFSFloajhGR2VMZDhmaHBoMUEvNEhMRk8r?= =?utf-8?B?d0UyRXB0VUJrWHNMU01CYnFSM2RaOTBlUC9pdGFmRElLNDZMOFVEWlFZcmVn?= =?utf-8?B?SzJObkJXRWQzZWxuTzdXdVJmK216SVVVdzVvK0dWOXNhRmtNMVVhUHd4TXRF?= =?utf-8?B?NkIvYWdYb2ZqVDNzYjRWWHpLRkJpK1V2Rk1nbUlTKzltM0pScEc5U2hEd3VJ?= =?utf-8?B?bFhPOEREMWpianFkcGlmYzhjK3JuS1pUQTV6QkJnK2N1UVVtTWFaOUVRaWhw?= =?utf-8?B?bHY0WnlXaWhmbGRRTFYvVjJ0QktRYnE5VlZIMTR2NVhjeFJkbzdOUUJwRXlY?= =?utf-8?B?V3FpeWVsS05TcjBFTVhDcENRdjJIVzhNWW00TjQzZ1AyWFZjWUxLeTQ5ZFlN?= =?utf-8?B?eXg2VStJSndvN2E0Z0lPSEE1ZlorR0dTalRkbWgvMkhUSXR6ZEIyY0lEWlM1?= =?utf-8?B?M3BmT3F6MnBnVW90NHQ3QXV5ald3aWRTa2FTcmQydFVYVU5qbVBJRTV2UFpI?= =?utf-8?Q?ecpS4HMHCDc6kcFmLWJ1XxU=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR11MB8205.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(52116014)(376014)(1800799024)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?dC9NcjE5L0lEeWJzNEJ1Rm9vSUFOaFJRcE9XZEVVZG5IbVVvR2Yyd09VZkhB?= =?utf-8?B?blBNQUdUcGdTR29uUXFLTHAzYlRDc3JMc3J4OVdmZnpXOVVoZTREWENPRDVE?= =?utf-8?B?bWpUd0NIZTlraXJHOGpXaTl0aDdoeUR1QWNid2dhN1RueEFvM2ZMNkNRY1NQ?= =?utf-8?B?bXE3MjA3V2I3RitvTXdKWUNGbUU2YXNsbitqakxkWCszLzlLa0VlWVo5S0Mx?= =?utf-8?B?a0JLWk1uQllxS2hlRU9oMWtmeDJJbVdnMmdsMkI1TDgwaEI0SU84MTZLRXYy?= =?utf-8?B?anRRdmhUMUhpUkNhbDNTYTYvVk5ZQzRiMnBrcjdWbGtnV1AvYTVuZDVjdysv?= =?utf-8?B?eGExdmZIaURvbElzRTJUV2l0RVRmYmtzYnlscU5LZ0hiT2tsV1d3aDV5MEVJ?= =?utf-8?B?RGV1OThpZVI2bi84L2RPd3gzbXZtZCtIeGFySk8vZU5nbDh1UXU0TGhOZTRT?= =?utf-8?B?V3d6aStzbVN2bEJnanVaZUw5M1hsdWlNdUl5b1lYbm40MkZINkZtK2syOGtQ?= =?utf-8?B?QVFxdDZ3Ui82ZnZTeXVuSTlnU092TnEvMDhicms0OWgydGJnZ3JSOCtlOU1C?= =?utf-8?B?QzF4K0VjQ0JSejZsT3RlMno1ZlVZYWZYMENJelF5dk9BbU1ibEVrekZtMzd5?= =?utf-8?B?bjRkek5VUDExRTEyZm53WjdydC82WGhoL1RKUUd3SkNzbmUzdHRCdnNXeGxL?= =?utf-8?B?TkpxMlBuZG1jQ1FQMDE2Z0dPaWsxUkdJYkp4SVpTdUpYcC83UzdKNnczbnZU?= =?utf-8?B?K25XenV3YXFOU1pEeDVrdXowVnc3T1ozaDZucmNKdW9rNFVzaFdESW93V2lE?= =?utf-8?B?U2psVTluS3lHZmdLNFlQdkplV3doNE90bFZ1SzdRYng4OE1EdEdjalAwdnpN?= =?utf-8?B?Wk5yRnF5YjA3STVjTmZnS2RoUG91a1QzcURBaFpGTFlXMXNkZ1hLL0hwSFpP?= =?utf-8?B?aS8rQnArY1JmTmZJeHF2aVQ2TDF1U3kxbnFHZzFOYWs4VmtTeTBtZzFJa01M?= =?utf-8?B?S3hPT3BvYWQraElNTDdnVmdSWTVCaEdDVlNBV3RTNWdjOUdRZTNMN0pmRi9r?= =?utf-8?B?dEQyNVpiNmw2NTFrZ0wyTXR6NHFsQjdLNWJzRitqQk1RN1BMS3JTLzczMnQw?= =?utf-8?B?TkJBWXNhbWJkQkhxeTYvTGowNHBibzhoa3JPOERVdmoyQnE3YU9hYzFyajdl?= =?utf-8?B?SXhqbkNkWDZCNUFaaW9TWEplb2lJb3ByaHRaaU45RG85cHYyYmlSNG05WUQr?= =?utf-8?B?RDd0eVdPeEp0TFRTMXc4OWF5R2JOZlFVWjN3UHFRMlliYzFSMDdYb2QwMDIw?= =?utf-8?B?UkFxRHBxeXBoeGhNZHJVT2VmT0w5Zkhna25HenNmVTR4NENLVUVhY0MycEsr?= =?utf-8?B?d2lNTzRaU3RTT2FlQTVhZStkVlkzKzRxRGNGV0JiSmdrYnlYV1dhcTJUb0to?= =?utf-8?B?aHlPdkY0Nm00UHpqUkRVKzd1QU95RGJPMDI5Wno0eXREZmdiYi8yRksrWSs3?= =?utf-8?B?cXVuMjZRVnRhUUNnVDF6RXpmWUdwSit2SjJhdUx6OFI5YlFKZGljNTFLeXVQ?= =?utf-8?B?UVl5NnBhRWJoTExDL2xJWnBPNldyaVBNVEdEbzE1OUJLYkQxTUhxc2UyamMz?= =?utf-8?B?U1VtbGJ4N2RHWlMwdWszdDdjMHNLaGpGT1hpUXJyYjJ6NjBUNWhDS29UdTh0?= =?utf-8?B?Q1lET1AwT2ZXNmRZNTFIa0phcTJ6SWdzazhHUWc0ZjgzRFZxdmdzSVNMOHJW?= =?utf-8?B?QUh4V3h0TnozSGFuOXgzTURYTFBHaUIvSHBIMy9hTkVjR2t2NlNHckFIV29U?= =?utf-8?B?R1JHR1VGNklBK21xOVNmTFhUbHR1K0p2bDhVMXBacHRIaUFlZUVFNDVLcktV?= =?utf-8?B?dTJnQkYvYnFnZlM4cXR4L2pORmtLYjF6SVFWOTNVaFZIZVJ4OW1UYzFrQzBU?= =?utf-8?B?WjNsRTVONHNXVlc2NlZSMEhPV21rSVdxOEoyLzhPRUdBZHBDMmVYdHVrb1VW?= =?utf-8?B?S1gzbkdXOWVwdllkNXRXWUphQ0U4clI5aHdEYjArSmRtWFhmZWc1cHVzNUV1?= =?utf-8?B?WXQ1QUk4S3dGK2tTUEZNT1hnamI2anZMWk9sMnVZaHE2eVJJOWNjYmEvbkls?= =?utf-8?B?eWdnd2FibmN6RWxya0wvUkxKb0dlTGI0eUdhR1NCZUhxdncyNGFoTTJuOTJa?= =?utf-8?B?TzEwV0tVMllBRWxvdGxtU0h4TjF2TkY0MHJveFphY0UxdS9YV0NhZk1MMkJV?= =?utf-8?B?STZBcGdwSmhVY2puaFFxQXhGZmlxV0JZN0Nvam5DaHo4WjFEbHZoOGlReTU0?= =?utf-8?B?NDg2WG13cGRjVjc5OWlKSEY0S1JoWWN3bkNLQ2lvRmYzUVJTTWg1Zz09?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: a129b1ed-30a2-4675-f6da-08de6a452cca X-MS-Exchange-CrossTenant-AuthSource: DS0PR11MB8205.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Feb 2026 14:44:07.1115 (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: 05y13U2cn0wZC/D5ml4qc9Dyf6P8jTA/fjmLf72+/MsGRZgQGWZxRG6U78BEeyJQA5zcTLk8+F1HQMuTDxwTKA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV8PR11MB8486 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjEyMDExMSBTYWx0ZWRfX6hnA65rMgK0O 9gU6/kccLIBE2ISfzSGrZEhv7NvEOhNQisEzZrzZpGoFQRkH7oaqXz4MPV/kEo3D5BUv+dc4fwk hngV4I4FX/9Nb8rEtBSzju1mnCx+AjSAasmwl2fZ0shlNJ/TWBnbc/jkIXTpPfmqG8fNHAXsKR9 66lj3gqCL4tSd/XWgRXIDObhgObW2h/E3iGV8YtKFkbTAFd4gDWVMDfWPenmtwN2/DQTxatfUtb VTouEQaswhFwabY3WNRGzmgJx8SAD7w7LI7AU/bbz/YJckmvNX6drZ1GbkKTc1sAQ56wE+/Fu5x VZgvLtFs8XVWHfGBnSHZrLkVBvULanjlnhEzFHDVSW5eG6JL+rrtk8ADZEVk9ihE3mh9QWxS8I+ u2mETFjX6rV0i5lc1QT+fF8mh2b5h5hM1pMjUsBYpBe9wZOncUhfVsmm18QMdQ27vw3YVBiwVdR PGvged2B6d4ig9OQ3og== X-Authority-Analysis: v=2.4 cv=DtRbOW/+ c=1 sm=1 tr=0 ts=698de73c cx=c_pps a=TvliyZNEFSK35vtP2Nadqg==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=M51BFTxLslgA:10 a=i1IsUcr2s-wA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=2AEO0YjSAAAA:8 a=UI2V7ICqOKO9W4d5kokA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-ORIG-GUID: bwWeoJVdo_77apd-QIEqZHrVgG5GEkPr X-Proofpoint-GUID: bwWeoJVdo_77apd-QIEqZHrVgG5GEkPr X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-12_04,2026-02-12_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 suspectscore=0 spamscore=0 impostorscore=0 lowpriorityscore=0 bulkscore=0 clxscore=1015 malwarescore=0 adultscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602120111 CPC comes with its own header, whose support is added in a future commit of this series. 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 implementations simpler, convert the GB message into an SKB in the `message_send()` operation. That way, CPC internally works only with SKBs, and only convert back to GB messages when notifying Greybus core that a message has been transmitted or received. 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 3dda5b06590..a3acfc9bfca 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) @@ -149,8 +163,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 @@ -186,12 +200,33 @@ void cpc_hd_del(struct cpc_host_device *cpc_hd) } EXPORT_SYMBOL_GPL(cpc_hd_del); =20 +void cpc_hd_message_sent(struct sk_buff *skb, int status) +{ + struct cpc_host_device *cpc_hd =3D CPC_SKB_CB(skb)->cport->cpc_hd; + struct gb_host_device *hd =3D cpc_hd->gb_hd; + + greybus_message_sent(hd, CPC_SKB_CB(skb)->gb_message, status); +} +EXPORT_SYMBOL_GPL(cpc_hd_message_sent); + void cpc_hd_rcvd(struct cpc_host_device *cpc_hd, u16 cport_id, u8 *data, s= ize_t length) { greybus_data_rcvd(cpc_hd->gb_hd, cport_id, data, length); } EXPORT_SYMBOL_GPL(cpc_hd_rcvd); =20 +/** + * cpc_hd_send_skb() - Queue a socket buffer for transmission. + * @cpc_hd: Host device to send SKB over. + * @skb: SKB to send. + */ +int cpc_hd_send_skb(struct cpc_host_device *cpc_hd, struct sk_buff *skb) +{ + const struct cpc_hd_driver *drv =3D cpc_hd->driver; + + return drv->transmit(cpc_hd, skb); +} + MODULE_DESCRIPTION("Greybus over CPC"); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Silicon Laboratories, Inc."); diff --git a/drivers/greybus/cpc/host.h b/drivers/greybus/cpc/host.h index c3f2f56a939..191b5e394a6 100644 --- a/drivers/greybus/cpc/host.h +++ b/drivers/greybus/cpc/host.h @@ -18,9 +18,7 @@ struct cpc_cport; struct cpc_host_device; =20 struct cpc_hd_driver { - int (*message_send)(struct cpc_host_device *hd, u16 dest_cport_id, - struct gb_message *message, gfp_t gfp_mask); - void (*message_cancel)(struct gb_message *message); + int (*transmit)(struct cpc_host_device *hd, struct sk_buff *skb); }; =20 /** @@ -48,5 +46,8 @@ int cpc_hd_add(struct cpc_host_device *cpc_hd); void cpc_hd_put(struct cpc_host_device *cpc_hd); void cpc_hd_del(struct cpc_host_device *cpc_hd); void cpc_hd_rcvd(struct cpc_host_device *cpc_hd, u16 cport_id, u8 *data, s= ize_t length); +void cpc_hd_message_sent(struct sk_buff *skb, int status); + +int cpc_hd_send_skb(struct cpc_host_device *cpc_hd, struct sk_buff *skb); =20 #endif --=20 2.52.0 From nobody Fri Feb 13 23:22:23 2026 Received: from mx0a-0024c301.pphosted.com (mx0a-0024c301.pphosted.com [148.163.149.154]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 999DB1D5CC6 for ; Thu, 12 Feb 2026 15:18:15 +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=1770909496; cv=fail; b=EUAq59FxfpszYmHlB4hvOqAA4SDctM0qLeprrD6uPSAsjr79kpG/1DB31TNQxeYcwBYKV9Ps1e5/qyMXSb6hCr5jhB53QZDmd7V8BiIAqMBgI6Z6PkC4DIrVfG5dHmxSQboI4SIwr1qrJ45KxrfRMbMxfTdLkFI+R4LvcNdKfPo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770909496; c=relaxed/simple; bh=vWYhDkymnB/cqUehdZku9z/d0Q1725XuAjd+aN8yF2E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=dgJoCDIfk9+51TE7WOy+EkNRRM1T1PekqRfbalwoqlDFRpD9EhGjY7gGOCHcPt6sNH08XpJI5Nkodm33QR038OiUEIMb3fPa3ukEHTUBNca9JJBfFh6UqoqM0PGJ2UjXJxpkolkUB1KzYE1WloiE0o9+g2TIhdcU0ofNm3RJeL8= 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=h/GoF+ai; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=A105n2Gw; 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="h/GoF+ai"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="A105n2Gw" 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 61C2Lwnc2678544; Thu, 12 Feb 2026 08:44:11 -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=cdchD7Q2dNRnianSssDhwbWh041iL9CRGaxRW0yIxOs=; b=h/GoF+aiOHxY 8WrNv0VWnXNbXUBScnPLO9comC/TbRmgq+4zInh5VHkBSdKZpCGp+tmzT4ILLo/C 21TGsEKZTU4m52l2LUZcZklSd1mKjmRfMaSO9i1du//xy3C19Y4ihfehHgpwweQB OgT9wpdbPLK+7nJ8eph1XlNg1kWAEBe2gJ2XZtZU/mPLCJI0gU7tdyT7wkcJG0OF DofJVXXmax63yHryrY7hj/k2yOiDB15NiA6z7RGhovj3Mv/b93fA7FD4U+FJ+zq3 PZ5Bakb3ZsCcM/i3qWFFDaEPeHhMAccwfYJtZfO24eUvsvu4fViViCjwY78bsjxC DTxpUC1hGg== Received: from dm1pr04cu001.outbound.protection.outlook.com (mail-centralusazon11020096.outbound.protection.outlook.com [52.101.61.96]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4c92uysn4e-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 12 Feb 2026 08:44:11 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=qNG2q5tenEae7IRZx1utv75rH9s3DyIlCL9x6SmNS2XDX2Ds2WDMLS8GBTbd98DcOLX1vNkfAALBuLiKC55k7zEy15sEBECFScP4q8p8FCfvs+0YRVyqQBh+/OGJKUHAf9HjWtwjr4DIz83/9nlpaQhobl+o7np4LYmSsUwC/C0o9SOLmfL8yHkqiXWyHgPYpc4ecdd81Nmh6qjieVZwClsuabOneTJA81TX13qWOVG2oYTdqeXy/b6WRn8m79U6TXRvRmunYePRuPstLvaErPLuSUhxxZTDDTR0fjeAKD05OsvrwIYFkq9zLBBvJppi5fk496MrCC+A81/70flrUA== 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=cdchD7Q2dNRnianSssDhwbWh041iL9CRGaxRW0yIxOs=; b=HSE1T5rmYUBToCy5MPexwDGlTMNmKM5C8c5DKhViHwjILF5z/9WuySKbb/vjGnDl0wBCHRkIeHjQJFT7at4YzrGoe5/ZjB5L2ESsbmaHAqn1t/UIQmABnFVloa3JN1jHLmoeuYCue6WOISNbrtHJsQCWtNmC7gVVxXHDX4hhhiKbZ0uwvEGEt31LMmP2EgkB9dglYbmHZuSuJqMXLXVExuqsX6owWICvWVg+igDKRp5W0DE7x9QuDnuqN4bTxRQEwH8yJSzlceAFIx3mkeA1elYSsg8ajRQPl4bixifRzFepj2BUCrgBu5Yc7A2MzIHUg3ueE1W/h7Jz2dG9wpo9lg== 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=cdchD7Q2dNRnianSssDhwbWh041iL9CRGaxRW0yIxOs=; b=A105n2GwuyxNzbzQvwYjHvG8keLD9iIGRbCdn6nb5X4+ae9BsfRfzK2ST9WKMFZ5cZC8A9WNhc/K/0rIf/RWiL+qtT/N4VIBbEWzSIpuwFfc2pKeM2tndJijk5nUPo0hZXyGDsO0D3kJTsbPl78qk+cTfEnOUzWMK31DY+h9MAE= Received: from DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) by LV8PR11MB8486.namprd11.prod.outlook.com (2603:10b6:408:1e8::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.19; Thu, 12 Feb 2026 14:44:08 +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.9611.008; Thu, 12 Feb 2026 14:44:08 +0000 From: =?UTF-8?q?Damien=20Ri=C3=A9gel?= To: greybus-dev@lists.linaro.org, Johan Hovold , Alex Elder , Greg Kroah-Hartman , linux-kernel@vger.kernel.org Cc: Silicon Labs Kernel Team , =?UTF-8?q?Damien=20Ri=C3=A9gel?= Subject: [PATCH v3 04/14] greybus: cpc: pack cport ID in Greybus header Date: Thu, 12 Feb 2026 09:43:42 -0500 Message-ID: <20260212144352.93043-5-damien.riegel@silabs.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260212144352.93043-1-damien.riegel@silabs.com> References: <20260212144352.93043-1-damien.riegel@silabs.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: YQBPR0101CA0124.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:5::27) 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_|LV8PR11MB8486:EE_ X-MS-Office365-Filtering-Correlation-Id: faf14620-eb8d-4aae-a483-08de6a452d55 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|52116014|376014|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?S1B5RDJBdkYwWXF6WWtaQmk3RFBoVVJyQThxSERyK2c5SkJQQW1wR3gzY1NQ?= =?utf-8?B?RVJ6aVY4a042N2RvaXVxRmNzZVNrOFkvUWoveHBEQ0prQTRPaDJNVkpMZzJ1?= =?utf-8?B?dWJ0THZTWlljN3pjNE9raVpOOG9wRHJnVmh4RHJLQ1dsdjcyYm1NNXdBcjlX?= =?utf-8?B?U0d0OWdKSE4vTjVyTk1SUkZseTYvcTdkQ0FtTlAvY2NoSkJldkFBblJnWWFW?= =?utf-8?B?R09tK0xTQ1c0K2ZoNElDNmFHcHVWSDlhMUg1akJZVHl0cUtpSi83UjBaaWZN?= =?utf-8?B?N1pFMU91ckU4TDEvUCtsVWkrVWFhOGhwbEhLSGFCSXU3TnB0Nktnd0ZsVnNk?= =?utf-8?B?RFdkMGZlTzJMNEZFaTd3YTZLUXlYcS9jNzFZbGcxU2toM1h1UHFYWDVtYktI?= =?utf-8?B?RHNlSUx4SGVSa0hmM1BzaURNTVFEWjc0aDhCRFlFbms5WU91MGNBVnpUZDJk?= =?utf-8?B?QUkxZ1JkM1NoajFpTTRlM2gzd1hGTWlud1oxQTBaakg4bjBWTlg3U2xMbnZm?= =?utf-8?B?WnJBM3N5czZVUC9sNDJXUEN6djNZelFLWk4yb2M0ODlValdFZzVNVkRxZ0lN?= =?utf-8?B?UFkvZWFoZ0NzNHFqUVZkQUl2Q2RlU2NlcnJhdGdBc25QeUc1c1JsN21tSDFB?= =?utf-8?B?RUpsVkN2QkVGeWVxWUNXdEx2QUcyZ21Kb0ZPNlk5Y2ZxcERqRWZBVlhZWGxF?= =?utf-8?B?Y0xQU1RWZkppZ3JwMENIZjQ0MVdhbWx0MTY0ZDFydHl6NG1WWGN4TmcwOVYy?= =?utf-8?B?Syt2Q0pudWU3OVhVR2s3UzRrL1dRQmQrZUdPVlFFQkEwYlB3aHloTnVPWm5z?= =?utf-8?B?RlJ1MXB1RWUvNXE0cnBxYjNDTUwwd2xMaHV6dG91bW5JMmZkck5uNkFteTBh?= =?utf-8?B?ZDJwV0FoU0VVZ01tUkxwSW9kS01qalQyWDZrSUFtVlBwQ0NYOVhKRjRIcTVo?= =?utf-8?B?U1cvY1NZKzd4cU9CRUZLSHZSMFRDbENZK0tDSnZvc253QjE3clVSeWxHWURu?= =?utf-8?B?emgzSEZ0Z3FrWm9tZDYwU0V3eHp0U2dUNWRjSU1BeSthYXdOQUQzNkw1ZDli?= =?utf-8?B?QVNZNFp3WDVYZE1RUGVQL3NRa1ozUHFPVkJpTWN0MkhnU2tPSG95UlYybHh4?= =?utf-8?B?VSttbUVzQlVQczNBeTFRZ2F0L1JBeitnMEVtaVYwS0JDWDMrek1oeXNpME5m?= =?utf-8?B?SXRDU05Dd05URS9Wc1VpZ0JHVjArbk50UUpxNXljTXhTd3VIMTM2ZG9wMC9O?= =?utf-8?B?cjZkOTdsbHp2S3cwK2o3N1dHTDVqQmd2L1FpbDBaWWE5TkhBSU1lQksyWUp0?= =?utf-8?B?aHBWeC9Mbk5wQmF6Nlk2ZHVPbUxnZFJFRVFNZ21oSllVOVlweERwRVhGMHV1?= =?utf-8?B?Yk9COW02cEVLVE9oSGFReHJpQUpQOUlKTCtmSkQ4bzNuQS9KSVRvNCs2RUNF?= =?utf-8?B?a3ZjeEFYMUlWZlNhdzZMbkJWRzlwaklJTG1vMUtwdTcvVGhKdVljMm1LYmZG?= =?utf-8?B?WHBISGR3MU5US05meXZxOEREOEUrbG5VT3BhbG9wWXNHOGxTbS9pcEhTWUw4?= =?utf-8?B?NENVMUpCaUt3K3lsV3Y2Q2VqQlZ6a0RCcjFTb0hINzY4OEhkRHQrUDY1b3Ux?= =?utf-8?B?RjdzOG0wL0VTbjZySGo3eFhXQTFkaGpXUThDQ0pPbWRRSzdDWHhjQ3VnZjht?= =?utf-8?B?N29xeGFpVjJRRGNodnZ0SzBkbmU0RTk1dXd6dDlaaTROM014Qkh1alRkQVlT?= =?utf-8?B?dzZ2V0NVdkFRdlJMVVVOcGxHN2l3SWdlMnRjazZnUVQ5eTNwd3Z5L2swd1Av?= =?utf-8?B?aWxNMElEZVNOWUhydThIQUU0V3RLK2VPUkNhQ3ZKWUN5M1FlS3BaeTVZRWZF?= =?utf-8?B?endLV2V4MGFhcXNsVnVxT29LU0VHKzlXK2M4clA5elh1WFNJdmNBeGpOa0Zq?= =?utf-8?B?OGdFYVN0QWlpajloZnVXamt6UU5obDR0enRVaFN5QU80RE00MVZMVHE2Rjl4?= =?utf-8?B?cE9VcEpDeEhFRUVqQzBNc0ZITi9Ka3ZWa3A0S3FJUllmbTU2bDh4VDAwRjJl?= =?utf-8?B?amUxMTVXRTZveDMrQUM5WjRzY3NidUo2a0k4aEJaZmNYR3JnY0ZXYU1hZHRa?= =?utf-8?B?YjMxMnNuQW5BZUlPRmRscVR3S3htWWo3NmlreGQzK2Uwb0hjRHBjYlI3SGhn?= =?utf-8?Q?/+RGjmd/col/mlDDdGx+wGY=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR11MB8205.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(52116014)(376014)(1800799024)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?OGtra3Z2Q1ExT1MrUGJWL0FzM0F6czZHTVVYdjdLK1VmYkhTQ3JkMHdjd3Fv?= =?utf-8?B?UUtQYU4rUkkwalVFVzZ5aFV5SzRGNHoydWVMdWVjR3dNN0pXRjJKYVBkL3pv?= =?utf-8?B?UEF6UWcyUnpSK3ZmR3lrVXV3ZnNVM25CYmMwZzFHYVpDU3RMM3hjcWk0Rnpk?= =?utf-8?B?bTNBZTB3MkthZ3ZOd2h5WmtzTENzQ28yZG9LU1pxNmorQUNPekZ5TndKa29n?= =?utf-8?B?alM0S2NkTktIdWNiNFA2WFRUQzRFV21XenFuNUtzTTVqMHpGMFVQNjB4K29E?= =?utf-8?B?OHdPaVRxcGlqK3NheGVSNjFCMFMrVWtFcGVaRlhoUGJpQ0hCYzdQMUs2Vldk?= =?utf-8?B?TkV3bXlaS0ozMTUzMnkrTEwyZGRSb1RiVGhIMXJidlkvdlUyeHVFWnRta1VV?= =?utf-8?B?N0h0UjRabHQzVWtDTmJsUndLL2hPaXJXWGo4Yi9KL0VhelVpYWJtS1dRWGV5?= =?utf-8?B?TmY4cDFBL0cxcG5pN0ZZRCtrLzc5a0x6aXkxNUtGOWVyQjBVL2xjQ1YyMUli?= =?utf-8?B?MU9qazNyZW50eWJSNXdxdUsvTjJ2RnRhcEFUb2t4bzdpZThleDVIRHlSN0xr?= =?utf-8?B?bmxzSDk3YkhoSzFYL1czWXI2Z1RYaHFTZXN5MTRJSnhCNUxyZzl3c2RGcHBN?= =?utf-8?B?TGJiWHdSLzZYYnpLYVgzMUpaUnlMSkFhSmR5T1JYSDNSUnNJTGdWSzY3dkN4?= =?utf-8?B?d0J4cmdKdExEeUdVMmoxM0pwaThzbEdBUnNCanB3OHBObVJjQTBESHdPRlRi?= =?utf-8?B?ai9vTSs0SXBOUGwxa0tUcU9iZ3VkT29nTTdZY2JlUWJSK0JrUlp3Q1JZOGpG?= =?utf-8?B?UlZTVGVFREF4QzFBTXZRRWdxRkFYTmJONFVmZkZJbllhbVR5Ykw5Zjc2MXg3?= =?utf-8?B?WFIrMU1GdVg4b2FoSWt0bXQwYnpLbm52VWlWZ1pjRTIvK1U5Q3dIUWwxRHht?= =?utf-8?B?WVlWdU81VzZrdEZGZ2lnaFdLY3BhREV2UGIzOG8wd2NOOVlxSjV0S01jSGZN?= =?utf-8?B?ZHRGOVYwdTk3V3pQeHBpK3dQYTNJNWlvRmRLOGUrbjhQcVErUVFVS0ZKTzFR?= =?utf-8?B?NUcwRlBWajJvV0xCc20xQVJGeVRrVSsybStwMWJSUDlPZzN1Zi82Mk4vajlE?= =?utf-8?B?RjFpL28xZDcyaElXZmtnRG11ZlQzT09HZTlyTFVMNWMrSjdPUmh1VDc3MzNO?= =?utf-8?B?WHdQNmJqdW0yaVlIVnZhbzI0M0hSZUd4bGdkYVpGTkV2dmVRaFdjNmE3U2pD?= =?utf-8?B?TmJNQXhPT2ZaZmJFQUd1MXNjOS9uWjZFUEI4d1JGZHZKbmdWdVZ6bGFTSURP?= =?utf-8?B?N2h0eFNLV2czT3FNZ0gzZEVnZXRZSkRyWlQ0ZzREUHdhR1ovakRwZEtyd0lv?= =?utf-8?B?QzQ0d0l0NCtZSnhOek1JZVJ2VkVvUUNNeFZKVTdYYVRLNXdsbm5GZG56Vkp6?= =?utf-8?B?c0dZemx6ZlA5bFJkT2t1UUlYUGZwaGkrazh4KytVQXh5S1ZodFNOSUFUZnJt?= =?utf-8?B?L0xlUElDV1FDc3cwSFZzQ3lSRk80QW1nV1E2SEpZRHl0WkF6Y3d5T2dBOExV?= =?utf-8?B?TXUzTFNyeitSelB3ZDBtRHFBOEdET1NuazFQRHhXdkR3eEl2MDlZV2dMNEE3?= =?utf-8?B?cVpoeksxaE9pNlU1VXpFMytxVXB3cTBlTE1Kblg0d3A2QnJndDFNWjBsWmhu?= =?utf-8?B?eFowTCt4eVRNeHFmRWFtWEpxcW84WWpTa25YZDM0S3YrYW1LTVhnK1AvdHkz?= =?utf-8?B?L1c1SzdBTmxXOURHdCttR3VSaG5RSEVHZVh1cXg0Rm1XREowVUlCMzVVd3hW?= =?utf-8?B?b2ZOR2xJZjNEVkFJM00vSW5xQXZiNVI2M3hiS3IwbkQ5bHR4QkIwOWFpS0hD?= =?utf-8?B?a1NLUExqRlg2OVhtM0lSbUZJaEtxd2VUa0xXcWNYN29nTVVPYjY5dTFTdGNu?= =?utf-8?B?dGRwM1F1Q0p1ZUlRMzlPZXlwWHZ0YVhlc3NaU0M2N2Qxajh6U1dhamdZSkRM?= =?utf-8?B?NjZnY2NvYzAwNFdiV0Zxd1JIV2xtQitqNkRHNjNJaFZianp2bmNXWTBUYW9m?= =?utf-8?B?d29Bb0RCSXRlKzhXaHNRTTZESE5lWXpHVXUxdVl3MUwrYmRmek9hYWZjYk02?= =?utf-8?B?NS95TXB5d3BmRHF1YXVWNEZ6d0xZWmdZWldUUzEwYTYwTk9CTGRGWlE3L2Z4?= =?utf-8?B?S2k3MHFjNHp6UG9PdFdaQ3J1ZXdkZVNIVmdxVktEcC9CS0ZrMzVvSC9zSkVB?= =?utf-8?B?bndCUjFOTXlTMWhnNHpEWW1jV0wwV0cyNkVWZ1NsMlhKR2g1T2hTSDVJb3dB?= =?utf-8?B?bGhVMEFDOUo5VzFjWnIzd2dDbHpjL0JBcEZVWURzUWV0V0ZxQm8zQT09?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: faf14620-eb8d-4aae-a483-08de6a452d55 X-MS-Exchange-CrossTenant-AuthSource: DS0PR11MB8205.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Feb 2026 14:44:08.0373 (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: JGybtq7kHO9qPCIuSxHoSVdTPWRDsiXlgzcQompZEMaCNN3cvEhNu1gsdLBhAfAZz6RlCz7Bm7b6kUgop0Yo2Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV8PR11MB8486 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjEyMDExMSBTYWx0ZWRfX9SNJcX5Jc/Cs AjL4XvPKanDZZXaIVPTK6/8emBgxFPFF2WDFe7V31Yz4JSH1orn/1SWEy4OlzwCoG1o6ne52w2W WqGZJVpD16AGD08dFTgl4lDf/z3HGg7XKmcacCQEQt7lS5lOkmMZWf60sXbHr/pzCCl0SAOra4v ucxD2FitvqwfWS3sFh5yEXuweLVjJGlwJwenoxPI4siZhuDhDHza/aq90UYZQL5xuNekBAwXYRn 53NM6LHJKy/3+cgJwcVWDKXG1bXVZjeRoZuKDsTMC7odJCfVv7b82PXCkQZAYuGrNxrxsezEHhO wxv9kTD+dYN33CIhuUOJqmpCG8qHzC6Ld357CqgNf1T4xnqcs4jIuuJHj7dEO0IqQI1dn0zz23S ZgTXg+aFXljZZ1b78V0+hMyxqHWfFal8tuaCVUwOfG4C55FxPePtyMVgxqVWSeaIZWqZpYdn/He jMdRuRl7F3XEtgQdYbw== X-Authority-Analysis: v=2.4 cv=DtRbOW/+ c=1 sm=1 tr=0 ts=698de73b cx=c_pps a=TvliyZNEFSK35vtP2Nadqg==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=M51BFTxLslgA:10 a=i1IsUcr2s-wA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=2AEO0YjSAAAA:8 a=bWPpxp-jgQ3ylSns5SMA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-ORIG-GUID: Ks7WpJDEbqcxPJR1QkFEs1oSfbjPIfX7 X-Proofpoint-GUID: Ks7WpJDEbqcxPJR1QkFEs1oSfbjPIfX7 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-12_04,2026-02-12_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 suspectscore=0 spamscore=0 impostorscore=0 lowpriorityscore=0 bulkscore=0 clxscore=1015 malwarescore=0 adultscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602120111 Take advantage of the padding bytes present in the Greybus header to store the CPort ID and minimize overhead. This technique is already used by the es2 driver. Signed-off-by: Damien Ri=C3=A9gel --- Changes in v2: - clear pad bytes when unpacking CPort ID drivers/greybus/cpc/cpc.h | 3 +++ drivers/greybus/cpc/cport.c | 34 ++++++++++++++++++++++++++++++++++ drivers/greybus/cpc/host.c | 13 ++++++++++++- drivers/greybus/cpc/host.h | 2 +- 4 files changed, 50 insertions(+), 2 deletions(-) diff --git a/drivers/greybus/cpc/cpc.h b/drivers/greybus/cpc/cpc.h index d9f8f60913a..62597957814 100644 --- a/drivers/greybus/cpc/cpc.h +++ b/drivers/greybus/cpc/cpc.h @@ -24,6 +24,9 @@ struct cpc_cport { struct cpc_cport *cpc_cport_alloc(u16 cport_id, gfp_t gfp_mask); void cpc_cport_release(struct cpc_cport *cport); =20 +void cpc_cport_pack(struct gb_operation_msg_hdr *gb_hdr, u16 cport_id); +u16 cpc_cport_unpack(struct gb_operation_msg_hdr *gb_hdr); + int cpc_cport_transmit(struct cpc_cport *cport, struct sk_buff *skb); =20 struct cpc_skb_cb { diff --git a/drivers/greybus/cpc/cport.c b/drivers/greybus/cpc/cport.c index ed0b8e8b0d7..2c73d8e724e 100644 --- a/drivers/greybus/cpc/cport.c +++ b/drivers/greybus/cpc/cport.c @@ -3,6 +3,9 @@ * Copyright (c) 2025, Silicon Laboratories, Inc. */ =20 +#include +#include + #include "cpc.h" #include "host.h" =20 @@ -31,6 +34,32 @@ void cpc_cport_release(struct cpc_cport *cport) kfree(cport); } =20 +/** + * cpc_cport_pack() - Pack CPort ID into Greybus Operation Message header. + * @gb_hdr: Greybus operation message header. + * @cport_id: CPort ID to pack. + */ +void cpc_cport_pack(struct gb_operation_msg_hdr *gb_hdr, u16 cport_id) +{ + put_unaligned_le16(cport_id, gb_hdr->pad); +} + +/** + * cpc_cport_unpack() - Unpack CPort ID from Greybus Operation Message hea= der. + * @gb_hdr: Greybus operation message header. + * + * Return: CPort ID packed in the header. + */ +u16 cpc_cport_unpack(struct gb_operation_msg_hdr *gb_hdr) +{ + u16 cport_id =3D get_unaligned_le16(gb_hdr->pad); + + // Clear padding bytes + put_unaligned_le16(0, gb_hdr->pad); + + return cport_id; +} + /** * cpc_cport_transmit() - Transmit skb over cport. * @cport: cport. @@ -39,6 +68,11 @@ void cpc_cport_release(struct cpc_cport *cport) int cpc_cport_transmit(struct cpc_cport *cport, struct sk_buff *skb) { struct cpc_host_device *cpc_hd =3D cport->cpc_hd; + struct gb_operation_msg_hdr *gb_hdr; + + /* Inject cport ID in Greybus header */ + gb_hdr =3D (struct gb_operation_msg_hdr *)skb->data; + cpc_cport_pack(gb_hdr, cport->id); =20 return cpc_hd_send_skb(cpc_hd, skb); } diff --git a/drivers/greybus/cpc/host.c b/drivers/greybus/cpc/host.c index a3acfc9bfca..10b0529dc4e 100644 --- a/drivers/greybus/cpc/host.c +++ b/drivers/greybus/cpc/host.c @@ -209,8 +209,19 @@ void cpc_hd_message_sent(struct sk_buff *skb, int stat= us) } EXPORT_SYMBOL_GPL(cpc_hd_message_sent); =20 -void cpc_hd_rcvd(struct cpc_host_device *cpc_hd, u16 cport_id, u8 *data, s= ize_t length) +void cpc_hd_rcvd(struct cpc_host_device *cpc_hd, u8 *data, size_t length) { + struct gb_operation_msg_hdr *gb_hdr; + u16 cport_id; + + /* Prevent an out-of-bound access if called with non-sensical parameters.= */ + if (!data || length < sizeof(*gb_hdr)) + return; + + /* Retrieve cport ID that was packed in Greybus header */ + gb_hdr =3D (struct gb_operation_msg_hdr *)data; + cport_id =3D cpc_cport_unpack(gb_hdr); + greybus_data_rcvd(cpc_hd->gb_hd, cport_id, data, length); } EXPORT_SYMBOL_GPL(cpc_hd_rcvd); diff --git a/drivers/greybus/cpc/host.h b/drivers/greybus/cpc/host.h index 191b5e394a6..2e568bac44e 100644 --- a/drivers/greybus/cpc/host.h +++ b/drivers/greybus/cpc/host.h @@ -45,7 +45,7 @@ struct cpc_host_device *cpc_hd_create(struct cpc_hd_drive= r *driver, struct devic int cpc_hd_add(struct cpc_host_device *cpc_hd); void cpc_hd_put(struct cpc_host_device *cpc_hd); void cpc_hd_del(struct cpc_host_device *cpc_hd); -void cpc_hd_rcvd(struct cpc_host_device *cpc_hd, u16 cport_id, u8 *data, s= ize_t length); +void cpc_hd_rcvd(struct cpc_host_device *cpc_hd, u8 *data, size_t length); void cpc_hd_message_sent(struct sk_buff *skb, int status); =20 int cpc_hd_send_skb(struct cpc_host_device *cpc_hd, struct sk_buff *skb); --=20 2.52.0 From nobody Fri Feb 13 23:22:23 2026 Received: from mx0a-0024c301.pphosted.com (mx0a-0024c301.pphosted.com [148.163.149.154]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B881929CE9 for ; Thu, 12 Feb 2026 15:01:12 +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=1770908474; cv=fail; b=tsbYwSwAXeJ/UclqmCVnea3drsTT3msHyWHaa/3+o5QCB/MhLRBov+1jbEHQ5QXDxFdLT0sKFokE+0L6A96u++nfVDfeyxgMen0dSHmc2dZBDpxwX7Z4RqVoVwpA3CBqid6qXOCX/DAC2x7KSpO8YSPYhYscA8k1MaGFhpX+ri0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770908474; c=relaxed/simple; bh=el59dvnAmNVNV9Ckk2YoxraUJoyqG3JCYSc4H3rDzxQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=WHQ47PznV6rllZd5p+a34eQ0uy7DiWy0MzBoQZmw8/OxD/Ipdrqk/NKuRJ660xgYGZtzT/pAJxkeiawqdyUzUyV/fw18XTv2MNCseWXtjWRXRQeoNeXj4y0cNJZyNCvkMDFKv0hu9lY+Zz+xz36oVZ7MxfMvLlfhKqA3BRTM8Ys= 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=OKda5B0M; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=LB88Ifu2; 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="OKda5B0M"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="LB88Ifu2" 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 61C2Lwne2678544; Thu, 12 Feb 2026 08:44:13 -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=EenD0vtlm5f+lRBQE1UDgnHsf9//KsrS1rNHMUvdBjE=; b=OKda5B0Mfkq2 204xswCtzRZbDv6Mzuen+Ue2KFryyz75dKl9SJgyIbj+d6X73bTJRR+7EOx2L/d5 tYlfQft8o75UkfmaGFub/FzJObhR1efF1bEwKpNMcMkLcmahtzU3nHutyd5F973O I4/DVEYqA85NGPT8hy4zdiDtkNdJ1JGnRMadysu4K0YvxVsLiS7mr9n2n2fQwS+4 YojwmGZSsnqWONu8mp4FwY9OIe9Wajdv8ykGmOtQOJ/YcuQCw4z50OztHW+QvWMf mQX4/Vhfh+x2aw543PGVtNMorunnhx4hYS2zn1AuUUVPq+ypoasQ14YlBBjX7Yea tPdpX0EacA== Received: from dm1pr04cu001.outbound.protection.outlook.com (mail-centralusazon11020096.outbound.protection.outlook.com [52.101.61.96]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4c92uysn4e-3 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 12 Feb 2026 08:44:12 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Z/ZvJaRZSiMQ6Fhk+sYp5Ij7k/bsL3/UHSm2F27XtgFmCPzs6TulN/UicoOAI5NkIUeHKEQpSm16FIbEY2SU1q5RKWOuec5ppo7v3EW1Jzc237pNTtdnGGqQpDpgJd+CiId3JPJ3Nn0DeNyub82Tn6Cr3CfuHpwMxhiZSC8FLzeQe/o0CKfDJdPluPk3mAPZ08iq2a5u0iNL5AArYVJlmEJ/usbu7gIYzVvkNil7MJ7nZaOfLxgVkdIB2U8Z9v0qI0CMdzx152Pr3XVGm69/sfxnpb+QzRk6NuvSRBUTESGfsgUCTeAtpkyPysfUBTsrclxXdZ0ZHt2nUBO3ZJbiDw== 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=EenD0vtlm5f+lRBQE1UDgnHsf9//KsrS1rNHMUvdBjE=; b=p9jrQqV8UzRR4jeNNYZMa2BaM50m44ovsIPwKZMqwT2WjqTHt+uRKbIZEYpJ1bZH7lY7iaX2PLweth9D8XmJMdZJVrUg10s6N8hlp/PvnR8hXKgGa6d9igm0IDBvZvfcBulpQIpXZeOXblCaLyf4DaKNl3gGB5QhCwkIKj970XylIeXIq1hakKbhBmuVS13z4YRGnWUfvnDV3pD0uYCQ3T33/30ivNyYU+Y0+64mEs4ptpT0Ew3OeDu/xvPe3cz/pgvPVuCRX34MS3v7v8vlsoZ5rppPdVFKxh0/wbLEw25WIo/JdEngd5Ls0LguKGLpGv38fgC7LeNfzOhPXEXULQ== 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=EenD0vtlm5f+lRBQE1UDgnHsf9//KsrS1rNHMUvdBjE=; b=LB88Ifu2p5NK8UqkvQPgmSD8vY7CUZIa/JoiDGOsZAov0tGHL3SE+x1XNk+t/XcNIimoNkDq2jvL2dc4QMxt3JvLul/lSdXoRkRkgXz+HZheWBXO9caafcLD3MpG8qrpmrf7neRWyzAShoq/ZAV0x4fBmgu6pSBqidxh4wDE9FM= Received: from DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) by LV8PR11MB8486.namprd11.prod.outlook.com (2603:10b6:408:1e8::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.19; Thu, 12 Feb 2026 14:44:08 +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.9611.008; Thu, 12 Feb 2026 14:44:08 +0000 From: =?UTF-8?q?Damien=20Ri=C3=A9gel?= To: greybus-dev@lists.linaro.org, Johan Hovold , Alex Elder , Greg Kroah-Hartman , linux-kernel@vger.kernel.org Cc: Silicon Labs Kernel Team , =?UTF-8?q?Damien=20Ri=C3=A9gel?= Subject: [PATCH v3 05/14] greybus: cpc: switch RX path to socket buffers Date: Thu, 12 Feb 2026 09:43:43 -0500 Message-ID: <20260212144352.93043-6-damien.riegel@silabs.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260212144352.93043-1-damien.riegel@silabs.com> References: <20260212144352.93043-1-damien.riegel@silabs.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: YQBPR0101CA0124.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:5::27) 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_|LV8PR11MB8486:EE_ X-MS-Office365-Filtering-Correlation-Id: 0ad05212-ac26-435f-0858-08de6a452dc5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|52116014|376014|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?UC9icHowYUZwRXF5SVM5SjJ6N2l0US8rVm5xVWUyK1JERVNUMnZ4Ukc4K0Vm?= =?utf-8?B?dE9VNTBmbkRpOUZraUhpQmFFektldlUyYVI2Yk1BVk5oV3djcE8vRkhFVURr?= =?utf-8?B?WlM0RTd4allTbndRc3V2bkZiK1Yvb2l3YlNsSFJrWTdJckRFVXpueXZXQkxs?= =?utf-8?B?Y2szOHVTVmRTQUxPMzdVNjVwQzU5eUlQVis0a2VkVHAwNE1EcU9VSEl6eWNE?= =?utf-8?B?Y1BvRzBiV0luTndhZjdDRzVVajZQd2dycGFzL0xodXUrZTZpZ2pVdEZpaTBS?= =?utf-8?B?U1RPNmNPNmhwS1FjZTdZeHc5VjVTY0FUK1QvUjNkYXQrayt0S0V4Sk9HR2R1?= =?utf-8?B?TVg2c3UyMWFUOWl0STZURVhSVFg2TDdxcTBySms2Qk9KOWNTd2hFV05Ba2pZ?= =?utf-8?B?VzhGbGN3bjZVOUFzbTlVZk44TklFR2J3eGF4cjh4N01vQWgvdW1GUWZrcXo2?= =?utf-8?B?aHZPaEtkRWphU0RjUDNhWDF0SGZmSlNXRTdkcDN6YTBHWUlEWlBmVHhtNTZU?= =?utf-8?B?dTdCVXVFYXZzYnc2ZXNpUVNRNnVhZU5ONElYeS9FMGRPSFViMWlTVjdpczU4?= =?utf-8?B?dXMydjUwY0dkdm5EcWxQTkhqVW5xQ2hoMEJydlJkWXUwZ1p3TWJoTWQrbzkv?= =?utf-8?B?Tzl3Ym4xNkdhOUNhUG1xNXhvZjdKYWlQWEVVaW5aY0Vad0MyRVYyTGNiQlBG?= =?utf-8?B?VGZ5YUt2OGI4elFWQ3R2WUh0Z3FScUpkZkljdmtJY3VHcjhoLzFnVjdxcWJn?= =?utf-8?B?Q0xxQXZaYmlYWldzeGJCWE1KT1UvSnpkMGt2VDJSdDRwRUFzeC9wQytNdU5W?= =?utf-8?B?L2QvaGhNcjY2OHF0dTIwRVl0a1ptcjBzSmZnd1JKQndqOHRWcThhREVucThF?= =?utf-8?B?Rm01bE9KOHJYVWwyeXpWanZ5c0E3WHJGaW55QUFkc2g5M1ZqYmFCNnR3Ym81?= =?utf-8?B?T3VnOFYvQytSQU9NczFaQTFUcUJXQjVQU0ExS201T21iTy8zNmpHeWdFaHAw?= =?utf-8?B?dlk3enRUdVVVSnQ5R2dPWi9vN2FpWnVhSDUwczcwV0MrUGNyTkg1Mytqazc5?= =?utf-8?B?QkNrT3pMTkJXZHdSWGxURG52UzFQMDRXN1cvTXloaTI3ZmlwNlhDUGhjYytY?= =?utf-8?B?R2ZJeXM3MXB4NjIzRGUwTnBlRkpnQ1o3bldVb3E3NDd2UlF3SHNab3hlMWxp?= =?utf-8?B?cS9LSFNIVW9IbXFPdVB4cXpFOU1uUmEyeVpHRFlFUFNyc0lpT1pObjlaZkpn?= =?utf-8?B?VHZ5aWwxa1F0WVJPSnRpblVMUWRHNnFPaHY4Y0kxVUVpZFNEaVJ2Nk1FNEEv?= =?utf-8?B?ZGhyRGhBOG5wcDcyVzdYK3BiMndJR3ZLUUEvZVYvREhGMk1FMDFYV0R1dHM3?= =?utf-8?B?WlRtR2tNTEtaTkFCaWRzVy83WTQ1S3FCVEtwM2ZQa2NSUEkzWk1uV1QvWXJw?= =?utf-8?B?ZStUaWhFR0psZFJwRGJQaTgzYUNnQzhiNU5sUnR1ZUFTZnYyYklXbjJCMm5j?= =?utf-8?B?K0hvZ0RKelorWVBiM2tnQVNLMXJGS0NMVFVKL3dYN2lEa3ZWMUtYem9VOVVV?= =?utf-8?B?WnBGWXd0TmVZOTk4R0hoTkxRaTZOd3BDOUVVbVJvNEk1RnB1VTJTRXFacU5i?= =?utf-8?B?b09OQlFhNXJXbFYxTlZPclVZd29VM0p6M3pRc0JmUnluYjZPeWJkb3J1aWNl?= =?utf-8?B?ZE5tb2I3aThkaFQ1UENzdXlrWXVmMzlJMzBLOWpVQXdPQVlZaGtXVnpsOG9W?= =?utf-8?B?ekU5aGIreTM1Mkk2S1hWd29GYm9FczNIbk1RWU4xd3dtUTZWK2Rnek5RclRS?= =?utf-8?B?RnpOT1JjZUx0QUtFUzE2NGFoK25WSnZ3MSsvOUhNZVlGV1M5K2FSL3A5YVA4?= =?utf-8?B?WnRhT09nUml3NzhqbUxieW1wL0RBekFkOERTNXlJQThtVjNZcktMU2VMS3V1?= =?utf-8?B?THMvNG4zbllRT3VIeVZnVVVmdjUwN094bFJOS08rdXJjaDJmOUdGblJtcFRL?= =?utf-8?B?ZkdlMisveXN2OWdCNUdORFloMXdhZXAyRUU5d25oYitSZDAxYTYrMEV0bkFh?= =?utf-8?B?SmRydFQycm5jc21KWlBrYW1Jei9tZFQ0aDlGbHg1ci9UR0RCQWFOSGllUlF1?= =?utf-8?B?cjY3WUhMSHF6bm5RS3FZaC9lcnNtd2pMYWVIN2Y3Q1ErMDI2eXpyajRQSjVu?= =?utf-8?Q?sKd8b+drBqrseMG9VC4pfAE=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR11MB8205.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(52116014)(376014)(1800799024)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?dVU4dkJVQ2xzWXAzZUs3UHd6SDZJelRaWVV3WVdkUUoyZ1VoSXIyMzlvNWdN?= =?utf-8?B?MmZHZ29MN05mZ2ttaG9IM0FXWHJGUndzSTBFK3MwUVJtVnUwTGVNSHVRNEpl?= =?utf-8?B?NkU1ME94L2RPUzVOZGMvR1pMQzErbTFNUXV2ZG9CTG5wVDNaRWwvcEVFb2wr?= =?utf-8?B?UnJiWVNMaFFqK3FEYmxLSEZyVG93RCtQaC80K084aFY4aUVUT0ord0Y5SERQ?= =?utf-8?B?dXZlN2o3bkFGTnIvMXhISFY4bllHby82OFc4L3ZtcFV6UzFGb1JQWlFpS0Nz?= =?utf-8?B?Mng4RVAvbUJ6Nm9pSi8rbDhYdkdIeWNvSnJtR0tyanIrU0xCZXdsdmJmSFVL?= =?utf-8?B?UHZKaFpEZFJWZWV6ZXg3aGpmbzhwckNzMmkwb24rOFlBTzl2R0pXQkdwZUll?= =?utf-8?B?MXBhVlY1SDVyeGpYVkdKKzYrTmFUOStKQ2hOdGhXNVZIQzRNSDBTZ1V1bndV?= =?utf-8?B?aVdmR28vZ2hGNXA1dTYzYTlOcjduK08vcXMwTC94Z1hjQytzck5zWVJOY3lN?= =?utf-8?B?bjZWcUdrSnJ5YjNvVDdqVjBSY1lIZHRjSVo1SUUwcXRnUjUxNDJVUVNPendR?= =?utf-8?B?TG5kVzl3YnJXcCtXb1Z2MzkrcGhwNUNTTG93OHBjZEhuNVJtdDloYVVZc1BZ?= =?utf-8?B?SEVubUc0d0JJT3VJR2FYc2hndWkxZm8zYzNBaTR0aGZFYnNiRGNKb1NDMDk0?= =?utf-8?B?K0RuUVlJT0FZak9MQUFMam1hYVJKWFdkRTlMampScjBIbVdLYzlGYm1JT05K?= =?utf-8?B?alhLVlc0dHlPMmRpNDFXcldaSHRZYnM0b2lYWk1ZNHJiMGduNzVKUUp1alhC?= =?utf-8?B?NGVvMTRncDRZNlJEREtRTXR4bURBLzNvQ0RUZ2NTYWN3UjRXQjVMb0VtM3lD?= =?utf-8?B?cmRSZ21WdDl0cUM1NHk4TnZ5eXg0cDRxVXl2TnZiVHlHRnQ5eUxhb21wdlJz?= =?utf-8?B?eWFnV1ZDU3RIWU1QbExOUjVNeU1RakR4bGtHdk9DbHVSblFTM3ZYWXF3bWpv?= =?utf-8?B?eTZwemVOSzk0dDJGbUI4cU5jcTB6bFRKNm1uOXcxNnRXWkp3OXAvcWZrWktZ?= =?utf-8?B?Tlk4dFUyYyt1a1NuY2lKR3lOZi9FcUozVEZkRFJYci9UQTNxWVZCN1ljYkhG?= =?utf-8?B?Zi9ITXdWVmxHajBhQ1V2N2k3RUxBT1QrNnlhUXoweFVJMkd1d2k2cWtiRG9O?= =?utf-8?B?NXV1WlBFRmpJV1pHWS96NHFOS0dSUDlJZWcyWWJyUFlpSkdXci9FcFFGdXNE?= =?utf-8?B?bkVidHhvR1hFdHJ2R2R5Q3poVzlkMURxUlFNSjlKTkRzNVhRT0QvdDFTU0xS?= =?utf-8?B?NWJzUGdhOWRuYzJudGF0bWxiWjRjTUlXcHQyclJnYlhTMjF2bU5kcFM5dW0v?= =?utf-8?B?L3BCSzgrVjlMbTg4Tk43K0FFOVdLNnBrY2xXQ2Z5MCtyL0pOa0NhSUZtWW05?= =?utf-8?B?OFVGN0VqTXpxOW13aStOMXUwNG1rL1hucStEWjlxRDh5MHVPRTlVYk85WVV2?= =?utf-8?B?anBzREVURzZjcWF0NFFJNzZ3NVhKS0JlakJ3TWN3bjN2SVVDVU0xT3ExZjRR?= =?utf-8?B?WTEyd1BIYjRyWW9nek15ZFR0eHVJQVN6aDdVbHZ0Q3FybUJCNTM0SjFvb2tM?= =?utf-8?B?b1NFWmlEUWNxRzdHV0p4TzVQcXJ3SnVWUTRhRTlyNnBNZTlUSXFDcWFyUmsw?= =?utf-8?B?aE5nOWd5OGM3ZjVpWndVYnV1bDFTeTN6M2haYkc1dFh3Wk4yNk9hVkFWVm9X?= =?utf-8?B?dGc4YlhrNWpTbnByNVUzWHNWR0FYYVZyalBXUFZKaHM3bCtGN1dSV25wRUR5?= =?utf-8?B?MUVWTmZMQ3hMMk5EQzVhWDZDREJSTlJldUtDWVY3QTJqeVhYN0lzRUZTSkIy?= =?utf-8?B?YW5ldTBqcnZzeVZ0Z1liMktwNWlMZkxIdG1tZVkvaElOMUdsdjZjRks2bWlZ?= =?utf-8?B?OUJOK2h1UEN2YTFRUzRDamVXdFpQaWNINlF5TzBKNTE0a1QraGhvV1RGU1BR?= =?utf-8?B?NkRxd2wwVUV4emFBS245UXdhRHU4amhTcm93Q0gyVVlZUkIxVUEwMUt0M29i?= =?utf-8?B?VVJnbzFMUXpLaGdGcktta25GeEhBUVI2ZGJ1cmU2M0pFNHpTSldaYlRZOG5P?= =?utf-8?B?YVd5Qi9qeUloaUFPMzF6NCtIWHFaNm10SVNuNGpwdFpiWUcrYlhXcjFxM3pS?= =?utf-8?B?NHF4cW81ODhCbldHL0RoL1RPWWU4dzYyQ3hMMklZcDFjMVh6TTd0OTR1UHpW?= =?utf-8?B?RHVGSklta09SNnJkUEpFRGszamxqK1ZIczJnblU0MU5zMmNTMDRDaGgzZkM4?= =?utf-8?B?YnRYbHBldVcwYnB1OERqcU9kMnhpNUVtZXFmam43a0dKaW95bFlDdz09?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0ad05212-ac26-435f-0858-08de6a452dc5 X-MS-Exchange-CrossTenant-AuthSource: DS0PR11MB8205.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Feb 2026 14:44:08.7679 (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: vIml8u1+W65odGbeDM1sza/O1ShYpB7vnEeiKjIHMoNY+HEXLaflD60EQXzke3jXM6xaWG+y+YsveIqzEPw9WQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV8PR11MB8486 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjEyMDExMSBTYWx0ZWRfX4xM0GxT7oYd2 D/SU59hmlPG+F9JY62aMyHKbMmmtq1Nctv7mavVhpLbXRDKSExjQQ33FNH+OLQYVV9QTN7aAe8y a/pr8Rw006r41fXEnbL40XGK9DPY/02bkoJAP6XJYlW3978oCLgZ/PLLqqlZ4bgXKNdkZ3za/3k dUmH6Wt2brZRq85UYkwmD2n1pzIluxVtVWHf4tHX//mq4q1lsqhC4ACUrUFxkBvvPx9Np8h5/oW d/Y0rZDajXc8+o9i2UzSpLUvHgnln+7ke0LZt+Zi/HVy8+NIXojxVx5KKMfdgpVPiGBOy1+m+dS MkuSqdJUyntlC28VE+IHRpxU3iFgAJGwbbUzOls5aZkEUoUTlOswTczbjHDyLjAlyqMPHUoQRVt GnQUyE622vhvIWz0CuTLTkDF/tExnmRwin4JuuNSx0gV1UikBxAvpkn73KE/o/p5+/Fk7N+cp7F aMW/NqccEMfAy1CMX1A== X-Authority-Analysis: v=2.4 cv=DtRbOW/+ c=1 sm=1 tr=0 ts=698de73c cx=c_pps a=TvliyZNEFSK35vtP2Nadqg==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=M51BFTxLslgA:10 a=i1IsUcr2s-wA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=2AEO0YjSAAAA:8 a=9SkM2ZN-1AJx8s29AtcA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-ORIG-GUID: xxEEKALBSLpQO2oL3m05149bjHhrEP8Z X-Proofpoint-GUID: xxEEKALBSLpQO2oL3m05149bjHhrEP8Z X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-12_04,2026-02-12_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 suspectscore=0 spamscore=0 impostorscore=0 lowpriorityscore=0 bulkscore=0 clxscore=1015 malwarescore=0 adultscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602120111 For symmetry, also convert the RX path to use socket buffers instead of u8* buffers. Before this commit CPC host device drivers were responsible for allocating and freeing the buffers. Now they are only responsible for allocating the SKBs and pass it to the upper layer, the CPC "core" module will take of converting the SKBs into a buffer that can be consumed by Greybus' core and releasing the SKBs. 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 10b0529dc4e..66c4d7fd0b8 100644 --- a/drivers/greybus/cpc/host.c +++ b/drivers/greybus/cpc/host.c @@ -209,20 +209,23 @@ void cpc_hd_message_sent(struct sk_buff *skb, int sta= tus) } EXPORT_SYMBOL_GPL(cpc_hd_message_sent); =20 -void cpc_hd_rcvd(struct cpc_host_device *cpc_hd, u8 *data, size_t length) +void cpc_hd_rcvd(struct cpc_host_device *cpc_hd, struct sk_buff *skb) { struct gb_operation_msg_hdr *gb_hdr; u16 cport_id; =20 /* Prevent an out-of-bound access if called with non-sensical parameters.= */ - if (!data || length < sizeof(*gb_hdr)) - return; + if (skb->len < sizeof(*gb_hdr)) + goto free_skb; =20 /* Retrieve cport ID that was packed in Greybus header */ - gb_hdr =3D (struct gb_operation_msg_hdr *)data; + gb_hdr =3D (struct gb_operation_msg_hdr *)skb->data; cport_id =3D cpc_cport_unpack(gb_hdr); =20 - greybus_data_rcvd(cpc_hd->gb_hd, cport_id, data, length); + greybus_data_rcvd(cpc_hd->gb_hd, cport_id, skb->data, skb->len); + +free_skb: + kfree_skb(skb); } EXPORT_SYMBOL_GPL(cpc_hd_rcvd); =20 diff --git a/drivers/greybus/cpc/host.h b/drivers/greybus/cpc/host.h index 2e568bac44e..cc835f5298b 100644 --- a/drivers/greybus/cpc/host.h +++ b/drivers/greybus/cpc/host.h @@ -45,7 +45,7 @@ struct cpc_host_device *cpc_hd_create(struct cpc_hd_drive= r *driver, struct devic int cpc_hd_add(struct cpc_host_device *cpc_hd); void cpc_hd_put(struct cpc_host_device *cpc_hd); void cpc_hd_del(struct cpc_host_device *cpc_hd); -void cpc_hd_rcvd(struct cpc_host_device *cpc_hd, u8 *data, size_t length); +void cpc_hd_rcvd(struct cpc_host_device *cpc_hd, struct sk_buff *skb); void cpc_hd_message_sent(struct sk_buff *skb, int status); =20 int cpc_hd_send_skb(struct cpc_host_device *cpc_hd, struct sk_buff *skb); --=20 2.52.0 From nobody Fri Feb 13 23:22:23 2026 Received: from mx0a-0024c301.pphosted.com (mx0a-0024c301.pphosted.com [148.163.149.154]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D0E4235C182 for ; Thu, 12 Feb 2026 14:44:29 +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=1770907471; cv=fail; b=cAWAbuoADckKDNXbpWLtW59s/wopsgVBhoOE8tGtPEDlJjOmIHLwP6dkW1bVLbwSYGXlUaiP4d7rt/tAF2QgwAjH0D9cn6VhhfBsZqerJpnbYyk8sbkA5mp2RU3NYGQF16Yt5H4hfXUev9YLnt/VRPiUkMS70qx5u2M5Ksgzyx0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770907471; c=relaxed/simple; bh=I9abfB2ZbwUC3ZjiBlkYTlzTh0RqSucjtNxmiRisuX0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=IoZ4IOGu2FOC+Abq8w0yJSBe/nUBbZFJtDk68OEawT7f3MST/tQxvS0s0QJTbcnSa0AcjZqiJBDkOU92sJfD9jHTAmNg9BqTvnjCmDxMxuaJYx1bbVHT+HT96/ojnHk7DT1xBX1F58lCXsU+PVpYUVo57TJS5fPTSW93Dz51rAM= 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=BIX9YKrr; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=A8iKnTAO; 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="BIX9YKrr"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="A8iKnTAO" 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 61C2Lwnf2678544; Thu, 12 Feb 2026 08:44:13 -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=JyvIMniES/hEJp5c5OeabTiifgLp4ZH8+SGCNRnDIcI=; b=BIX9YKrrZljz 4JGcQDLG2Bbftc4CKGBnyOm8M5SJu6cZ4n9tt6bmGJ3kB0Bhb7tDSneqv8cBIqZE sKP5C6K78Xfgzn+6ggFhPgbVNK3Ej0KRLAfJGzkXZSVhbqU467Gcvmuc+oLWDKAZ qWJBDwBn0MKxPeOPfiZuqF+j8b3UBhZpWMKMUDYnC6ic2dfEmN96cVg/a29RWWI5 LMy5IsweuOIe6IB8kpd9sf2fGzsEiKRRSAjBI0ciwRsefA3hy1j7O+ZnXq1XJCxQ kC82Dmgf4L5UoHpak8Q7Hyrq32C9G7qgaS+bccqpQX+IU9NwgQUV1N3FH2lFb4lH wb6Ni9RXBg== Received: from dm1pr04cu001.outbound.protection.outlook.com (mail-centralusazon11020096.outbound.protection.outlook.com [52.101.61.96]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4c92uysn4e-4 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 12 Feb 2026 08:44:13 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=KUrX28Im4/FvA9havanAEqJtjEcL++l5pwqmDLRXRwzMgv0mVGnb6jUok3bSbQvVIjtXxkXJtscVjU+cXnEU+rKDtYS1pKZkHOEt2RQ41r0QQnW6Ti3Hb9R625+cUXusboP5gBmIZqdeY7po9gaCxUNYZwmmZHx1eaA9o0uK+AFt5Puifn8Dq3OyfvsdfpvGInK9v8YEW0iLhl6T9oSQuK4LPIYApOoPG9b+WbV3SCSIOhUirmycjGDNEFwlEPYwk177XNB+yQHdZiZABmZ6gBfhP9wpq06XWBg7ASLWowZp17dycZht6ZEycGVHiH8+nKrB6/9xeeWM/t53mjZ4vw== 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=JyvIMniES/hEJp5c5OeabTiifgLp4ZH8+SGCNRnDIcI=; b=N1JUDQEwDt8zlXhSMOh93hUHLb7k5W5MUpzYuZUoijSErv3w6InEFWiapX79SXEmYnUTRm0y2zjEFdNNDOM3AKTs03QbfAYdWgkABntwN6RNaLUUb5jAUmvZQMWGSotxYyFKkexiVSDJIDRx5MWJQeX/2V4isKkbPI8HkvLbgTklYynv0RSsERGUSiB781ZYaXMz9cu5cjbCe45NDNu18uKbnQI2YQbMjGw50Z7oRIpdfZwDBU/t/3WweTNC4aVWKtoM0jxdNNloxGSulE8xIFm2t7VMOrxoPClOtAbjjn3Www49KJkwDCqXueB7KIq9n1pXxCqHrLpTSEETRgFg3A== 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=JyvIMniES/hEJp5c5OeabTiifgLp4ZH8+SGCNRnDIcI=; b=A8iKnTAO7v9G07QAgTpFNH7cHDY89qgQ1672/YbFGA93b5UTr3YYD4jUGMobj+zALBOPZCiQHTK+HP2xhdmi/YXi0MKTpWif7bR7reG7GygyMJ0mmTBKi5JRDTNQM0WyoR0ljLcKoKBWqAr7/80ZQ9ljStv4FDi3UV7l8As4CAI= Received: from DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) by LV8PR11MB8486.namprd11.prod.outlook.com (2603:10b6:408:1e8::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.19; Thu, 12 Feb 2026 14:44:09 +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.9611.008; Thu, 12 Feb 2026 14:44:09 +0000 From: =?UTF-8?q?Damien=20Ri=C3=A9gel?= To: greybus-dev@lists.linaro.org, Johan Hovold , Alex Elder , Greg Kroah-Hartman , linux-kernel@vger.kernel.org Cc: Silicon Labs Kernel Team , =?UTF-8?q?Damien=20Ri=C3=A9gel?= Subject: [PATCH v3 06/14] greybus: cpc: introduce CPC header structure Date: Thu, 12 Feb 2026 09:43:44 -0500 Message-ID: <20260212144352.93043-7-damien.riegel@silabs.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260212144352.93043-1-damien.riegel@silabs.com> References: <20260212144352.93043-1-damien.riegel@silabs.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: YQBPR0101CA0124.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:5::27) 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_|LV8PR11MB8486:EE_ X-MS-Office365-Filtering-Correlation-Id: 8ef3dd43-f9f5-4b6c-f861-08de6a452e41 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|52116014|376014|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?ZTdzVFo4YnlEMlc2RHdXbk4rdEs2WWpSR2Q3VlZYNUZlaWpWZHBPVHllWXgx?= =?utf-8?B?MW9kaFlIeXM4ZVdkUzVEZmgvNkRNQ3VQZkNEeWoxM2NnYmsydEVwOHRlNW16?= =?utf-8?B?dHBWT1RSOUtRSTl3N3pHdlBFNDdaQ3k0cHprWHp5WHZ0K0x2S043NlBNWlpt?= =?utf-8?B?cko4eW56UmVMVUJFSTFPSCtEa1FMK1lMQThLSWNvb2UzNHV5RWN1RVlaZWk3?= =?utf-8?B?SlhHblUvdGMvNFl6dmYwd0FKbzU4RXhGU2VLcDFoTEJLWjRCdExaalZHNUN5?= =?utf-8?B?WkJYb1RLWlZzUk5qNHZ2ZVdST0R4Wm5tWGRBUC9wTDFkZmJxNmZWRjRyUUk3?= =?utf-8?B?cXNBanJ1dE5zOHZQTlk3OThTZDNOTmpFaTdwNmFEK2duNXh6ajR5WTZOMk9H?= =?utf-8?B?VXd6WWw1aHhSNEVQZFZCTlFYbzg4TlhwVmtFRkZ2MEhVQWh1NnNjcDJiZFVJ?= =?utf-8?B?MDhoUjdHSEM1aUxVV3duNXdyeUpnNTB6eFZyZW0reVZRM0R4Zzd2bHZoV09h?= =?utf-8?B?OGhsbzVQb3dqOWR5V1NYZmxWckFQN2RubGlJM1RiRU5pUVlKZWVRUlJuR1Y4?= =?utf-8?B?YnJPSFZ3YVIrLzdvbkNtaDAxZi9BZGs4MGpodEwvK09LQ0FDa1h0V0p4bHRr?= =?utf-8?B?aDdidnpVeG1ybUVaY1RaaFJXNEdNRlRnOTUzbVN0am16VlpQUTJucmpmRGFM?= =?utf-8?B?Zjg4VXBJckJyL05LeWkwUVJJT09kZlpUUU1nRlVESm9EWGR3ckZsMUFtam81?= =?utf-8?B?WGZDOWRVRWJaVXFuSmZocTFzVUhPRm9paVZlRG03bURjVEdpbS9zeW41QitX?= =?utf-8?B?TVk4bk1LcjFLNFFtZFNvcndwU1A0allFS3BLZEIwVUxEcGNWTjllUEhvNWRN?= =?utf-8?B?TDJ6U1JrcFFEeWRLVVg4a3R3ZDlUN2d1WUVDeHYxT3cxaDQ2a25BVUNrSDJj?= =?utf-8?B?MlJjWEV0VFNLN0dZVUxpUzN2U3EwRDViNUIrcEFmZkI4bmZxc0UrQlkycXpk?= =?utf-8?B?L0tNajY2cVZqYWNoUmtkS2ZyeUsrazdXNy8wVXFubUZaYmVoTmZRcXllVTdX?= =?utf-8?B?a09Qcy9tNWJPTG1KbDFrTytBU0Y5dDBrWTl2VzV1QWhQT1dnbGdCb0hhN0dm?= =?utf-8?B?MkVtV3hyOE8xZDZYZnNuRTFSN1U3bjhTN1Z1MTQ1RW53ZUs3TVlKMFhUbHZt?= =?utf-8?B?K2JMaERNSEZYNW9Oanp0dWhXd2Z2V0VtQ2h1TVJwTXViQVJWa2htRjRiMDd2?= =?utf-8?B?ajRjZld0SlhhRHowTnVRSDJ5Tm9PeXlUeVBSNVU0Y0lvWHYrZW5ua3hDcTZu?= =?utf-8?B?WmZ4Y3QvWWF2eTlPZ1NSN3lVaDRVMHp3dnBQanY1OGptUE1PR2tHR094eFho?= =?utf-8?B?Y2VhNXJpN1U1ajgwVWZIa2RSMUEvaTh5cDd1UlMvTnFLbkFyOWNVb2dEL293?= =?utf-8?B?bFA3Y2cwTk9sRjJPQnExVkJlVEQyVDNGU3J0MGpuK1JlN2JxRS9xbk5oWHIz?= =?utf-8?B?TE94TWh3cXJ0UTJZcHVwYzR2UHZldjBNTDllZXJScld2RlcyN1RLblVuWWVn?= =?utf-8?B?REdMR1dGaFZFRFVXYThBak9CekpBNGdvbXI3WVdwa3dFSVZRU3JDK0tSZmFF?= =?utf-8?B?U0pwRTI1c1VUUTNHeWQzVC9Qb0w2WXdmdXVtUm1Qb1NBY1pTMHpMYWNPTVJw?= =?utf-8?B?VERhbEdPQ2dFMXpWeUFiVWlWY2hZUjNmZGZoRVU1OVFwUnJQcXl0dC9vTFZh?= =?utf-8?B?T2ErL2ZKTUZBd0szVGZVNVpHcUtSdDBiemZZbVpvMDlZTWQwZlBNOEJ5OXM5?= =?utf-8?B?RkJZUEVjR2RRMGhlNlVNb1pzTEUxcTBadDFFNzRkZk1zUzBsNWxTY1M4WlEx?= =?utf-8?B?WjdDdVZ5SVprb3BodTBscG85bWczL2VWbVVJSm15SzdVVTA5Und3K09uQ0lL?= =?utf-8?B?eHJudUhvSkZFbFZhT0sxR3VVYWJXM01oMVdJRWRqU1ZrR2Z0bEZ5NmVkVEVn?= =?utf-8?B?ZHc1ZFZ1cnpLRnJwRzlqc29LSWZnOWhoejFaRHEydG5rN3RqTTdnNlUrZ1VB?= =?utf-8?B?UWpidHA1Ty9icXVLUnpta0ZHU2l5a29mZ2preWZvSjZsVk9EMkJzaEtGMklz?= =?utf-8?B?aG1rU1hnUytRYjBRYjJ6d2Q4TG04U1Bya2pydnFBOUdEV1VwZUlzdW9NQTZa?= =?utf-8?B?Ync9PQ==?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR11MB8205.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(52116014)(376014)(1800799024)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?cVdRTmtXVkxtMGM1WFkwU1duNGc5YTJWd01xWmxNY3I5b1JaZldpeXg5OEJL?= =?utf-8?B?dmUyWFg1NlpOVzkxa1FoMGNoaEFUQ2ZyUXUrb3kzMkZBT0M5VXMrQTBDVUxK?= =?utf-8?B?MmM1S2xtUklRTSt5T2tFTS9LbGVOUWk5cnpBUjFxTThPcGVJOG5td0NnaUho?= =?utf-8?B?Q05DbGtCSzlqYTJ1cmszSXJNVXFad0RLL3krMk55ZGxwQVUra1E4QlR1bkRz?= =?utf-8?B?MU1lbDBBSUw3ek5zamhJR2tLNzdJeGNFM2RrWTBTc3kvM2lBWGJBZ0Q5MzBW?= =?utf-8?B?ZzdBaG9saW9ieW0zaVk2UnA3N1lFdXFCQkROM1pSWFo0TTBnQnVWcHlNUllw?= =?utf-8?B?MXQ4WVhlRnZRU1lSYUMrNUI3NnJsalRKQnBTV1UzRW44Nzd6ZkM2V013MVRP?= =?utf-8?B?cUliTjZtNkU4V1FDclJPakVWSTk4U3VtcFhDa1QweWdPVHJpc3Q1MDJZZjdZ?= =?utf-8?B?bXIxdGIxMHBBL3h5Y1BaMnVDM1lRbElzMy9hTk1OT2NXY2xSZHBWTU1hTTdh?= =?utf-8?B?ajdDNU1kZmhWMGgwMC9sTURlNTJYZmVubVl1RHkzNFRnVVdrTEo3M2ZVZVNK?= =?utf-8?B?eXhKaUxtNk05UFE1K0pDUUxqZ3NreklueTFzaGFzekROcmpQQjVYS2NiSzR1?= =?utf-8?B?MFovTVlsTVVZNkc4OGtJekZ1ZDNqQmhlK2NINmRFellyWkN6TXJxQzNPbFFT?= =?utf-8?B?akV4N1F4aElzS0MweHV5RVExVHZKMU53eHNhVXEybFlKcFVOby9FV3FQM0tE?= =?utf-8?B?d0Via0llR1JuS1BmVklwb1MyWlJIVnF3bGRPaE4xcU5McEhGNnVRU2NFR0lI?= =?utf-8?B?UllFV3luZFZpc0dvYVVsV3IvNWdZWktoWHcyaDNXMGxuU3NOZjZPdkpwSHM4?= =?utf-8?B?N1NLR3RlL3p2WExjMHQ4QnIzNVhnKy82MFRkcTJHcXkxdFNxQW13Um1XbGhO?= =?utf-8?B?dHFjTWZtY2JSZDJQaTcrWFM3VkRmUGRIbjE3c2wrVWhENDVNWjErb2cxM1RT?= =?utf-8?B?bjdINERUV0QybWcvWjR6VFJ1QlU1QW5FSENxMk13RklsQ0FQdmxTQUFOSDc4?= =?utf-8?B?d0dpcEYrcjEvRVBBSmJuNGVPejJoTWdrdVVZUzNHN0JXQ3R1VHZHL2FZQndN?= =?utf-8?B?d0hsTVFaeUFJQm1XdkpiRWhtYXl0T3BoNmZ1ZFhlR3dkWkhiYmFLSUVGSXR5?= =?utf-8?B?ZVFwYzJhc1lXNDVlZTJxQmZnUmFVRGd3QTZUTEpjM2pzV3NCbDdRYVFnK1pj?= =?utf-8?B?anJldG52V0VIc1p2ZVNaOFAzWEFsWE8wV2d1RXhKOXAxL3U4RnQvV2JqSXpy?= =?utf-8?B?a2JXbGRuN09yQ2dYT2pzRk5vb2ZLNWMvYUErTnpXT0oyZ2Y1VlA1aE9KL25I?= =?utf-8?B?d29zbk9jcEt5ZWVHRXpBT0RUSlNyOEFYbm5qWGJNbm83MWJBanJmNFlObmpS?= =?utf-8?B?akJRTUZ0NklIWUZYNC94a01rUG5ITXlGVlpIZ091WHhJQ21RMTE5ZThVdTVB?= =?utf-8?B?NkJHNnNhRU1KYWFDUC9lcHBDbS94bXArR3lCREV1Zm1hUmM1Um96TmljT0FK?= =?utf-8?B?TFVXUkhVYm5Pby9xblg5SlFpNTRyV0NNWnlOZjllci9hUkFwcHVFenZ2OGcz?= =?utf-8?B?ZHIvNHBhRVFuaEp0UEd4RU0wRVBCSXdqYU0rM21JS3NEZHozL3A3TjVCaU9r?= =?utf-8?B?VzI2WGZDcWM3TjZXdU81S1pBdVBBeEcvZEE0aU43dkluVDU3cmVDTDRiRVVy?= =?utf-8?B?SEYyL2JoN2hPZW5uMlc5OGdaMUJiV0xUNi9EWlFPZEdNNFpmZW16eFc3aHIv?= =?utf-8?B?TUF0MVNUYnlZZFhoaWpZcVRCL2pxeGxUVlNiOFFJOU5yRHFvTVE3djFlQzl1?= =?utf-8?B?WTJDYnJZelJ1U2hneHpkSVZBZm1xblVJTXV6V3dFYUlsaW5jK0tHL2VCbTBF?= =?utf-8?B?WEdMc3ZkYmg1ZFpWak9MTUZEY0FCZEo2R1V2WDVkV1c0cWk4OFlseXgxZVpJ?= =?utf-8?B?WFBHY05WN2FtcWFqZlNVemZWMGlEZ1J4QnhGSlh4OUJESHMvbnB3Q1lvaTBw?= =?utf-8?B?VklEaExTaGNuVExEMWNpeUtZbWxybklzMGxYZ0w1UEtkUllKc2RzbTRuNmtS?= =?utf-8?B?UWZqZXlGV3ZTRjNYVlV0dE5LRmErMnMrenV4ZkpBOXQrKzZtMCs0ZG5FUXl5?= =?utf-8?B?Z3k5amVpUFlrZXA1dzNNME9vaXpiSHNackc4VWo0WXM1V3JJQ2VTcnlqbCtM?= =?utf-8?B?RVp0cEd1MEhZa1g2ODB6clpWMk1sZWRkN0ZWb0o4Z3l4Y3ZjbG16LzdYZFRN?= =?utf-8?B?RGU0aWZzUGdJcjcvMDMvRU04aG5sSHBZV0puVWxLUWY1Vmg2VC91UT09?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8ef3dd43-f9f5-4b6c-f861-08de6a452e41 X-MS-Exchange-CrossTenant-AuthSource: DS0PR11MB8205.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Feb 2026 14:44:09.6078 (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: ZKuiiWVmj2jx6zjdXhI6+Rv9o0BG2u90/9HXlage8lcJIOzhXxKCdHMVpEpuCcF/5iWKOxHwnkM2UnDizdivJg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV8PR11MB8486 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjEyMDExMSBTYWx0ZWRfXz3CwU8z9aCe4 IOg8bdMig3cQpteCyzQf3EvJVULiWb6AT9QG/e7VkkFkShcue5HSg7K+DkwX/tsNUD8YCLxxPZh NcMdTgvwnZdfRHUBR3rkeDdwyyA3SFbwpU3oEL4UDajTNrq5tUXQI2+Z/ePjNPuroS//A+WDiuk QIaeV74akQNgyu2K6Q4lG5uMH1BLdLa/EGMpocLcYgpg2TKByY0r+/95jg0LPJmZDFHMwDDUnel uTxfpYNckjjEhqZeChI7ChNmAC0EyR0TjNXrJocegMvmI8GzWS6cn7oFoqMIcDrzyu2xm3Khv08 woXjX6WEGrAmKpxWsppEsLcaWN8GHkx4lDDxpcBigXuASkatLwMf626J5M+HJX68N/P4Mz6v0z5 E/OFdmhHnTce2sJDNRvud0BJWqZ8lB9xYkmqqBPsjpd0DBaeiEma4rWZALtULLLZYBB6ZViwhHn Sn8RCYiO1+SbmYFxXhA== X-Authority-Analysis: v=2.4 cv=DtRbOW/+ c=1 sm=1 tr=0 ts=698de73d cx=c_pps a=TvliyZNEFSK35vtP2Nadqg==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=M51BFTxLslgA:10 a=i1IsUcr2s-wA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=2AEO0YjSAAAA:8 a=lqD4pFEZOuXrchdWF_wA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-ORIG-GUID: 9pRyIPyq5txTqyWDw04DOzS05jk3spoA X-Proofpoint-GUID: 9pRyIPyq5txTqyWDw04DOzS05jk3spoA X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-12_04,2026-02-12_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 suspectscore=0 spamscore=0 impostorscore=0 lowpriorityscore=0 bulkscore=0 clxscore=1015 malwarescore=0 adultscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602120111 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 before going on the wire. 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 --- Changes in v3: - remove CPC_HEADER_SIZE and GREYBUS_HEADER_SIZE macros Changes in v2: - Minor tweaks to structure documentation drivers/greybus/cpc/header.h | 41 ++++++++++++++++++++++++++++++++++++ 1 file changed, 41 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..f65a608a650 --- /dev/null +++ b/drivers/greybus/cpc/header.h @@ -0,0 +1,41 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (c) 2025, Silicon Laboratories, Inc. + */ + +#ifndef __CPC_HEADER_H +#define __CPC_HEADER_H + +#include +#include + +#define CPC_HEADER_MAX_RX_WINDOW U8_MAX + +/** + * struct cpc header - Representation of CPC header. + * @ctrl_flags: contains the type of frame and other control flags. + * @recv_wnd: number of buffers that the cport can receive without blockin= g. + * @seq: sequence number. + * @ack: acknowledge number, indicate to the remote the next sequence numb= er + * this peer expects to see. + * + * Each peer can confirm reception of frames by setting the acknowledgment= number to the next frame + * it expects to see, i.e. setting the ack number to X effectively acknowl= edges frames with sequence + * number up to X-1. + * + * CPC is designed around the concept that each cport has its pool of rece= ption buffers. The number + * of buffers in a pool is advertised to the remote via the @recv_wnd attr= ibute. This acts as + * software flow-control, and a peer shall not send frames to a remote if = the @recv_wnd is zero. + * + * The eighth-bit (0x80) of the control byte indicates if the frame target= s CPC or Greybus. If the + * bit is set, the frame should be interpreted as a CPC control frame. For= simplicity, control + * frames have the same encoding as Greybus frames. + */ +struct cpc_header { + __u8 ctrl_flags; + __u8 recv_wnd; + __u8 seq; + __u8 ack; +} __packed; + +#endif --=20 2.52.0 From nobody Fri Feb 13 23:22:23 2026 Received: from mx0a-0024c301.pphosted.com (mx0a-0024c301.pphosted.com [148.163.149.154]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 91E803B19F for ; Thu, 12 Feb 2026 14:44:29 +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=1770907470; cv=fail; b=gsF681tn0zlyRbP/w04Hny9G8StNcS8fizHnTIEncbCTfJ8mUbx1xfAKY1DihoVN89quAAKKHg/KbDRZQxFbJlo2llWE5VxGX7IgY2CoFl/aMtdxAQ/bxuUJc1lPZebG/ntiS5Wj5NRMXQLYfqRfxKV3du5y24kjyDcsD3SDnII= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770907470; c=relaxed/simple; bh=7rYByoqvgSyaeottJT9U49bBYp2gzMmd3JCvGQB2/uM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=V5cR1ZKTxkcFRax5EiAMwLDm2aRxnbCvXOs89mgCajHY03vvLuEWchvOhju/y8OTfoiDaeLlcCIx4OaC8QymbydxJBwnwo3g1+su7rTTvKgqGUiuZu5XORBnID+zMMT/RNPp+KXozBRbmj2Wxlqb3cM3Oq3Zi9fdV/wDV2flPWw= 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=Mu8gW2iV; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=GK4OOlVT; 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="Mu8gW2iV"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="GK4OOlVT" 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 61C2Lwng2678544; Thu, 12 Feb 2026 08:44:14 -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=aVfV3dLiXvPZcX9nPhBvQN0T7aBdDTRqVXIeIkYzwk4=; b=Mu8gW2iVu6sa ggo3bsELQ+BU/IUkSkgy3sehL6XDxgJT83+l+0etlnsyqs1ok/XFkYnCVvwvcdPk KEgG1YTBEuX6Hjw+Q9SIPd0LwBdtDE5D8gIEyAVKO+SqxsKkn3rP2qCTw52Nv1Ui FMLsXKQhNOzyL+Qf7jYFvjTX3qpRNLvtIJ70OewzqQ1H8+zOXwzxNXCQAarXN2R1 glrp4Q4HHrb/9zicClsqOWI9re5G8bi5kxH+5j7bryqE/Ffj3ABS/50PfcpnBAUh 7OIlj8mKT7ecU4pQ+QIhi5v7dAIwYJ0Tu1gfgl+Z8TCAkj2PyW2BqeN+5JXpARYr 9LYUM5uQSw== Received: from dm1pr04cu001.outbound.protection.outlook.com (mail-centralusazon11020096.outbound.protection.outlook.com [52.101.61.96]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4c92uysn4e-5 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 12 Feb 2026 08:44:14 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=jBGfzllQWCsfGtta9IafFzUcm4nQi9Wtl4MFprjuJtEuzTo0iJdO9DBRG+QpiSb/ZUc8t/xmQ2Y2HtYuogmlPPqQojPa+6reer5rVVU/9BZjOZhQ16HMBfts9F63yREfEjb9iigaORV0DS2M5Nsz/4ZW8rpoUkx/n9VJxyxzElFNZvmuWmB3b7c31zM7UDxqk/H/w6U/IMaWimTkOiZdHsDwAivXRtMr0W3M2glA3sZA6PLaqao8E9E44tVWRUe2QbjhLGynPO6VBVdUIg2tdMgjszSUmr7Uzk/kY6kN6qwn5R+HbUg56tmdCfuLmMyLlQVIvu7mXgy90eoJVPrsUw== 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=aVfV3dLiXvPZcX9nPhBvQN0T7aBdDTRqVXIeIkYzwk4=; b=k3Igl1ufEctUAyokjyoEKuS58OC4ll2gL+V2qlsu5dwG9vPvOb4+7OQDRPoEkUO5jzcMTR0w5vbsPDMfZn0QPAPfhtkl34WUClrWHP7LE0krqBIqvtqktSnH88pWBwig6SmzsaVNOwVxd8gFsbaT9s7GI6kmC/8txnaR/us3pYkxHPDCevNXd2S7EnAROSSFwUK6d3G2PmmLzsoRXY9HxiSH4MU98ymLU3dGUlPqzd1zEuiw20Zq77EWsZ3Imws/TMN6QraD3T2xLnVe+XoXQHSwUOdslnAo5/YB2e1mtBAG5i2PqpCuTsh1yhnPyR2qonom56g3c31sRu6gX46yow== 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=aVfV3dLiXvPZcX9nPhBvQN0T7aBdDTRqVXIeIkYzwk4=; b=GK4OOlVTiSQ9RaL7CwR9N8JXn3qK7FyBvDA2nff11dFzcNRPO5t2IxOmWHAkRvcmzWVct4cLuLtCKCgMLXbFCInnQxsmhgu/oYwMrt8w5vuHzZe3X6bYYm8HSgeTo5IYcY9jjhlycOEDadbu/LsMutY8p5KqeemnbjNIGIvK2AM= Received: from DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) by LV8PR11MB8486.namprd11.prod.outlook.com (2603:10b6:408:1e8::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.19; Thu, 12 Feb 2026 14:44:10 +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.9611.008; Thu, 12 Feb 2026 14:44:10 +0000 From: =?UTF-8?q?Damien=20Ri=C3=A9gel?= To: greybus-dev@lists.linaro.org, Johan Hovold , Alex Elder , Greg Kroah-Hartman , linux-kernel@vger.kernel.org Cc: Silicon Labs Kernel Team , =?UTF-8?q?Damien=20Ri=C3=A9gel?= Subject: [PATCH v3 07/14] greybus: cpc: account for CPC header size in RX and TX path Date: Thu, 12 Feb 2026 09:43:45 -0500 Message-ID: <20260212144352.93043-8-damien.riegel@silabs.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260212144352.93043-1-damien.riegel@silabs.com> References: <20260212144352.93043-1-damien.riegel@silabs.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: YQBPR0101CA0124.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:5::27) 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_|LV8PR11MB8486:EE_ X-MS-Office365-Filtering-Correlation-Id: ac5d181c-9420-40a8-cad1-08de6a452edf X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|52116014|376014|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?MWZNaFNXVGtVZGhwcWlCL0lKam1VZk43MEMwSkd0ZDVYZG0vVDJ4RWhRcXJD?= =?utf-8?B?RzlRalhUMUFmTlpvSldNc2VEZ00zTmY0UXRPQVZRN00vK0Y0dVJiWlk5Z0tG?= =?utf-8?B?Z2N4cjFjaFhMUG1SRWoyQ1BGUVBZZnVqdkZNTkUzVVk2UFRQQzNRZ0ZyaER4?= =?utf-8?B?N1duQkFSdE9KZE55ZGlnWVMwNGpsd21QOFJKMkdYTks5L0x5ZVlUR0ZPK3E0?= =?utf-8?B?N1BTbjh6dWVlVlpwUDlpUmtWc2t5Yk1QNDZwbVo1aEI2Mzh0NzZ4SmJHMkt0?= =?utf-8?B?bmM4bHJiMTY4TWgvR21mUXZDQmh6dUs5ZDY3N2kvaXhiQkgrcmxaMXAzM29y?= =?utf-8?B?OWFnMWFzT0wrMXliVkNvTGpVaisxcmNKSUZlYklrWlhVdTQ1dXRKUnBzNmhS?= =?utf-8?B?K3ZwVksyQk13VTcwL3A3dWlXaG9TNjNDKzJuZ1lHZHgxWjRRK3ZXYnFIQ2sr?= =?utf-8?B?V2lzcWw1QkVLYkZ1Ri9TZHI1QUhqYy8yUnROYTcwKzZLK1Baczl4L0tVbENZ?= =?utf-8?B?VHVXZllFVHB0UHVLZ3BZaFdMYjN3UkFoQXYvSDBabFNrejd0YThlNVhLZEM1?= =?utf-8?B?UEhkNWo0ZVNZcWZXQVpWUkhobmNwc1YzVlkvOWE4YTluLzROOTlUWVJWMXZY?= =?utf-8?B?ZUdwc3JKQ0xIZEhoZ25aaWJvZU5JNHphdmh1QTk1d1FOZEdVelAranAvWC93?= =?utf-8?B?eDVWb25EdlMvWVA4SkZQc0hTMTRZQ3RvN2FQWVBaVTFwa0JBUTdIYmhlcERa?= =?utf-8?B?b0x0SWd1dmFISXFCUmNuY3h5M1RyS1MxRVZZVVRweUhyeS8wWk8ybzlGM0s3?= =?utf-8?B?M1k1SkdrOXJFTGYwSlZjZlRndTM0VldhaFQ4ak1FVWY1UVZDZ2tJYzlDUWgz?= =?utf-8?B?RXRGWi96TDhkZStydGJKQXVJU29hMHJmd2c1Q0RWSW1GYWU2aUplSUV5VzB0?= =?utf-8?B?cm1BU2daVXd1STZ6ZGZGcEU5ZjRSNm45b1hhcDFsbUNqTTVXczg1MHVGZVkr?= =?utf-8?B?cEdzVjNETFRreHAvZkFKL0RvejJ1ejh5d0xHUVI0VDA3T05BOWhZYUlNSkFP?= =?utf-8?B?K1dYdk5FU3JlcFlvVzZBQzJaWTVDbExvSzcxYkYvN3RreUlvS0U3ZEp0RHE1?= =?utf-8?B?bmpTUzRkY3Ixb0xJWEZ6aWlOUWEyblEwNU55dXNsaXhZcDJHcXBmdnNLM2NS?= =?utf-8?B?ZzdSVzNSZ3ArRC82MWd2cmR4dWIrWGp5aDJBTzNHeEx6UFZmNENGYXdUUTND?= =?utf-8?B?QnpjNGNBV2ozb3ZDaFhJNGo4cEdzWVhqbDlEcDBEYnIwODNpeUhVako2WlFu?= =?utf-8?B?VkhxV2dORWhHMFZPVWdrNDR6Z3RJZ1p1aUZFUVJmcGpDTWdpNDNSVWQyc1RG?= =?utf-8?B?aHZrMEVDeklJYkxqcVk0cWRtUXczNEVCbCtHbXFjcFY0b2FrUmVwVGl0NVhW?= =?utf-8?B?Wk83c3FzdS9xNm50MER5ZzVrNUFGbTljM2wxd0Z4WEFtcnh1SnBPUGpBZ1B2?= =?utf-8?B?SDlMMzJaSW1LRHRqR2pSaHZxVFVSbFJIMFlZZWFaK3dZaVhzbVZ4VWpDL29n?= =?utf-8?B?dzN6OXg5M0t4MGtrWWNDVTdqUXUvK3pNMVZVdm5OOE5mWkhRSExETEpuN3Iy?= =?utf-8?B?T1hZU0tQTktqemprZGtUVlN3a2I5UjI3ajlHODA0Y3VrZTVvYWd5Ri9mVlZ4?= =?utf-8?B?QmwyTzZQWW1DQll4VVA5Yk5ZdW9LYndGSlMrVnBqTDVrdzMxS09LdXE0d2Qy?= =?utf-8?B?ZE10NnZsVE9wMkowUkp2QnBrMm5ueG1BTmJ3L3JnU29Hcjh6UENSOWlwbkRO?= =?utf-8?B?dElCdUJ3NVlBWFRzOW1lbWpLaGRaWUdsdDc0bDlBR0dJVHQwcDVZakFYYW9z?= =?utf-8?B?MTdmbTdqYnU5N1pDZ0c3YVYyWHVwRmhqNE5acEVocE5UVTlIekJrUEFhMThU?= =?utf-8?B?TkpjUEVmV25GQTkrbWZOUjU4MEZTTTlyVnlGaGFHczFHRjM3SUw0NWlBcTFM?= =?utf-8?B?L0Y4Z0VoNHE3ZWZQQnVDRFZDeG53Ylp0RE1Rb0orU3JLbjgwZjUyUHVUWjRl?= =?utf-8?B?U0FlbXNxeTVRR2xnREQ0SjAxSFlOWmNIM21BekUyTU5TQmdxeGYxT0ptV05C?= =?utf-8?B?enBHVVgveW1nQzRHM1VhOEFGaHIwNVdVdXJGeHdEMVIyMlFEVno1V21LT3M3?= =?utf-8?Q?W19xvi4CeWEFALPz3wlEozI=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR11MB8205.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(52116014)(376014)(1800799024)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?TnZhYmszY216SkxHNUw1bWRtWGozbUlHVGpwVk1lS3hkeFFjQmJRdEhKREtV?= =?utf-8?B?c21XeXozRTZpLzlkQkpzMUNGY2VaakdTaUxyZDdGd1FHSDNZckVFVytjMVNG?= =?utf-8?B?U0kxYkRMSGhKOGVNZk1Ld1k4SFBLQjlvbmlzM3F5VnlCTnliazFoait1MFlq?= =?utf-8?B?MEhIQk1OSEFtMEtMdVJSTWJHUGhMWEdLQzk4SHBxQ0ZsNW9YMm9yODA5L29x?= =?utf-8?B?VnBSR0tabTdQNmk0NWl2TzhCM2FOUXB5Q0ltME1PZ0dIck84dXd2aW82Q1A5?= =?utf-8?B?VkN5Zkc1cHRQc1h2ZzBrL2VNRVhpdnRXUTYvcnRSVXZGQnZ2MzMvQjNnTndO?= =?utf-8?B?d2pCdU1oYk5ueUxJQTBzNU1iY2FPRzNDS29BUHJXQUpaWFk2ZjBDUzJjU2NB?= =?utf-8?B?Vk9qVWJGdElOUzhTb0lxNTVSNVFDUEFEL3BFT0tMeFEvY3JZSW9rNXJaR1JL?= =?utf-8?B?TUIyUWpLTEhGUjNYYUxrdmFaTU5tRHJ0ZzFVMGM3NWN2WGJYOXNONjhha1l1?= =?utf-8?B?UExGdzk4TUdXQkdnRzV6QXZBMFE1OHpUa3IwclBSUml6bHBqZ0lUM1grUFZa?= =?utf-8?B?S0dxeUQ4N28rWmJrQzFVL0xyQU1xMXlxcEdXK2VrSHlJQ3RjVk5EWkRSTW5j?= =?utf-8?B?NTM4Z2R6aTBFS3M3aVdoMTc3L2J0TElzTis2S1FaNXZ0WUY5T0lISWErWXVG?= =?utf-8?B?WGJkekZZVURsalNUM2hsZjdUNldQbFJrTXltZG1hM0VranIyU2hWUlc3bjhE?= =?utf-8?B?UkQyRVYrTTRkeG9OOVVWVnljQ1grdmUyRzNHWjQ2L3p0bnJRanlQYnl6Z3U0?= =?utf-8?B?SUxlYUtscmhDTGw1L25DL2VIR2dRT29pUkMzcEFXaGdFSXBmSzhWYzRLNHVI?= =?utf-8?B?dGl1SzNwR1RyM2o0cmY3cXNsOU5UOTVZMjlnNUsyMUJTZTlxcDN4Yks3YXpu?= =?utf-8?B?ZW9sdW9zaFdWd3M2amM2N01TNDFLcTZhMUtZZVF1SnUxRHpJSGR6Sjh6Tnpu?= =?utf-8?B?dGViNFRDRGY1Mlg5QWdaQUtidGhTR1N6elpzL1g1TzdnbUtyY2pTb2diRU5k?= =?utf-8?B?eEc1dkh6S0ZPaVltRXZENlF6cnVJVnVqRVpaOWMvUUhLQk9aN1MxL0pML2Fx?= =?utf-8?B?ZUYySEMxRXRkSU5tL1FYSmxsNXNoQ2lCRXhITzBCS25YMEQ0U28xdzNBUDZG?= =?utf-8?B?RUE1Z3lUell0RGduK3V3ZUxBZ2tiYVFzZE1JTlhXN3N0aGZaaWZVSXhQcUcr?= =?utf-8?B?a0lZZExITkJ4Qk92dS8waWRIcVZEVzFBWGJwVitsTVA1dGVKanIrV1RseFQ2?= =?utf-8?B?R0o0ejlXSjFkMUxsekVKOW0weDl2L0s1L0x2QnZxanZCZGtFeThkYVVFVmFO?= =?utf-8?B?VkQzSVgxSTcrSTFiL3F1VXJ3KzZIejNkWVUwM0NNMkNySXl2QVZvNUUwSG1S?= =?utf-8?B?TG1uK1VuNHhBR2hNUzdFd3lHbHBmQUJtV1JFTjhKZVU0dTFsMDhIL0s1djhn?= =?utf-8?B?NHl2MFUxWS9kdERWWEVXOFFpN1gyMXdmQll6YkxweFpLRW50bHkrY2RlWkd4?= =?utf-8?B?YmFFNmk4SGZ6YnFvVEtSQmpzM1FTdVlUWWZwdGdxT0hSN0lML2Y1K0NzQyt6?= =?utf-8?B?blFvaXBtUDVkQXpxbmhNK05jdlNrcWR2ai9keTBZbSthRUY0MHFFSnZWeTdR?= =?utf-8?B?UEFnSGFvUSsrU3B0b3RRREFJU1ZvejVBSWQveUZSZWhMYlQvZzNtcWZ6Mmp3?= =?utf-8?B?ZGszK0hwWnc5M0orTzhZOU5rcmJ5Qm4zTzZxa29iWnFBdE4wSzRLblkrc0xJ?= =?utf-8?B?T3BTZjNMaU5HMEQ1Q0ZtSnRvZU1GZjQ5VXgzb1dMQXMxZ0lKd005bTkxSmgv?= =?utf-8?B?a3hzb0hCVmgxNXRWUVNRcGo4YkJxcjdoSzJFVldLVUl4ZFNEVXRubTRvMFcy?= =?utf-8?B?VnN4NXBWSjZrTUhLQ1pENGpKNVFxUjBGNVlSdEpNWXlPRmpiNXliekRreTVQ?= =?utf-8?B?WGZBa3NwUU9lVEhIeGNUQU02Q2hxQ3hFbU5oaXBUSWt5ZmtzZUZlS25tZ0ZE?= =?utf-8?B?b3IzQ2xzYkNxSzkzTE53dEdzWkcrd3FlS0g1V2xYUi9obHltSVlaVC9FRWNN?= =?utf-8?B?aERTMG14TFFJMVM2Z2MzbjZKdW1ac2Y1Skh5QVM2NzhoSzFzaXJMZ08wNERo?= =?utf-8?B?LzBlSGpZdWRXcDZIMXZLTjBqQXF4OC9PcmJHY1hHZlc4VVprT0ovMSt5RVFv?= =?utf-8?B?Yk9RbEh4aXprUlNIbGViMkhVbTJ5VEs0VlFmdXB2VEVOWTc1NCt0N0lWVjVh?= =?utf-8?B?MXBRUzJFZzdoZ25EK3BXcVFnUEZzS2lReEtBeFhGWS9maUJBUUdWUT09?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: ac5d181c-9420-40a8-cad1-08de6a452edf X-MS-Exchange-CrossTenant-AuthSource: DS0PR11MB8205.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Feb 2026 14:44:10.6574 (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: ZZjvggWki0E7HYuC9ZNFnPiHrjzbOtjlgqVoImIsMphcQDPf+S9S9g+2rJM8lUJeVV/dtAz5pwiHa7SzWaWd2g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV8PR11MB8486 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjEyMDExMSBTYWx0ZWRfX1xlxN37uhetO QFRsEPlqzqenRT0qiJ9lJ9DTjylaftQJ8JMzlUcpEX083EGZAAYrPjkB0uNucfOiUBIsZzqMZ5x QLbNnsH1vhTyekUjADouSw6DK1AxGiZe/iRATbMeIumt8Slm06FXyePW6vEflR//vDvnUdtM9S7 eezKAV4yxvcw2NM5w8A0qEEZV58NcHmRd4sjjEc+q/oUtqUQXRaUuGN/VIxm/mGaPRmDj5Huu+N FCOUMnUhfFB8vJOVCgPwiFsBpn/RxNc3XzK3+DqhnNvWJ+UbMRHoBn69bsjq5rsItw/SS5hSPOJ HETSiDinbsQPiMjz7XvFd5SCh8G6c5NdevRVaw2WRnsGssZOin00LkackvtumW4K4H/l+kwv2nV G83a63N6We4dYlAaJZuxvaOAfNehSYPDqKFqESACGu1rmBVcBaTqe9Ys5oOacCF+lwspIQDuYjP zjMt7szqolI1c+Q9wlA== X-Authority-Analysis: v=2.4 cv=DtRbOW/+ c=1 sm=1 tr=0 ts=698de73e cx=c_pps a=TvliyZNEFSK35vtP2Nadqg==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=M51BFTxLslgA:10 a=i1IsUcr2s-wA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=2AEO0YjSAAAA:8 a=7se7LFRQG06n2pVS12EA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-ORIG-GUID: mxc0Pw3I5raKfsZUMJ3gJDpJU2e6ACNV X-Proofpoint-GUID: mxc0Pw3I5raKfsZUMJ3gJDpJU2e6ACNV X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-12_04,2026-02-12_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 suspectscore=0 spamscore=0 impostorscore=0 lowpriorityscore=0 bulkscore=0 clxscore=1015 malwarescore=0 adultscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602120111 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 66c4d7fd0b8..759322759bd 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(struct cpc_header) + sizeof(*message->header) + message->= payload_size; skb =3D alloc_skb(size, gfp_mask); if (!skb) return -ENOMEM; =20 + skb_reserve(skb, sizeof(struct cpc_header)); + /* Header and payload are already contiguous in Greybus message */ skb_put_data(skb, message->buffer, sizeof(*message->header) + message->pa= yload_size); =20 @@ -215,9 +218,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) + sizeof(struct cpc_header))) goto free_skb; =20 + skb_pull(skb, sizeof(struct cpc_header)); + /* Retrieve cport ID that was packed in Greybus header */ gb_hdr =3D (struct gb_operation_msg_hdr *)skb->data; cport_id =3D cpc_cport_unpack(gb_hdr); --=20 2.52.0 From nobody Fri Feb 13 23:22:23 2026 Received: from mx0a-0024c301.pphosted.com (mx0a-0024c301.pphosted.com [148.163.149.154]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 26F2235C1B7 for ; Thu, 12 Feb 2026 14:44:31 +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=1770907472; cv=fail; b=ULuv6Znkdz6IJdtxBWDzyQDhhFnNU3yKzOqFrncBO2tfsNR4vrzLLrfv6lgiEVkTM4UruePrfSv5vrajw0H/AEVS+dOn7Bq5awduyMQjWeo9+hCTSQ1yhUgRvIoIjDyeOiVTTnyBtJuk+a/YvhNQbW+5vOo30cLyKZuYVwW/1x8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770907472; c=relaxed/simple; bh=qm8h8Tbqcxf74rPijla5D9tlCnT/dGIQPSCw2Hz4Xhg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=O1ZKMst9lxjoH6Dk78EjOtWsnkji6IHRb8wDWZ8mu5Z3wag7wzdyIBkt0EVJC1WjihzgGQ1tnB2Ama1QxSNsCdj059Q23k/ytP4VXdAthVZMGKgbR4ghQxEYhMWMistwONbdqcH58v6v7THuIjH256x/vjr/GxI/Vk2qTTbYgl8= 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=klcFTvmE; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=MnSjvi3/; 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="klcFTvmE"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="MnSjvi3/" 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 61C2Lwni2678544; Thu, 12 Feb 2026 08:44:15 -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=9dY5mc9962yPz1bEk4Iw6Gm/GIuV4Wrrww4w84kU1LE=; b=klcFTvmEemhP MyydDiuCfTmMlQiO80cKC4ZXK43CGpfiIZuBLuKT65UifKyj95BS8KlQ+BSoxeFO 0lULxtJX/XL2yNxgLzm7IcJtyYiTYSqGHup7E4FVe5Idm0ej2Hg4ln2jff44Ay0o h+L8QFvLT6iybusdTJSL8bv4Aii76ED7UOEB29wSwqUkDpKdpmHrautuqCXJVq3Q O0WmWq4FYfzkrfbj/Kl0D9eJ3a65n6oaX1QiCcdVmM73A+mLbvAbzFX+Cn5il/B8 bKn4T/NN0fENEIWyBUPK2SzmDK2JHAh7if48Y+snxvgcfvAkPtiO8JgEcvmMXWAS XduPOremnw== Received: from dm1pr04cu001.outbound.protection.outlook.com (mail-centralusazon11020096.outbound.protection.outlook.com [52.101.61.96]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4c92uysn4e-6 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 12 Feb 2026 08:44:15 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=AxbPIMgeMueFpgbdDjleo8Luz/+nX7i4JC0fXq5kDuWjaQKkMhMOxdDlae+8xPi0NGowfmxexGT4Qx4oWtkc5K3dGJov9tXhxQZS9r6UPUE5rxtLohZtlg/doGwPt7wmLgF0tRTwKsgKqLBXYQvEaOCaiGWZfMgeb110OqtMJNy3ab8uJVmeymU+ErE4bS8s+TfJ7zjRJD5jn9A28WzeetWhDKrzJ9Rne5ipKwrnYLgOvqWfjOKPnGmBEfYKciw69YDGJj5xjIqpTS+OYv7C97P0JQhZqCBQujplosOSQYOwuIy32MJx8rKoenW9zUa6CSEt0QfoKb0Tq2Jntcb3sQ== 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=9dY5mc9962yPz1bEk4Iw6Gm/GIuV4Wrrww4w84kU1LE=; b=rM2Lc0fkWpIM5Ia9+y4qj/Q0sLNQUqZbKxKKqnGCIFPJboAaAFCvH2OL5euVeJ8wjChTbx9Mi4ZmBfBKOylCIO6y5KRYNf+Oe95FoLUZYYPF/BWr858WspvQ1Pc6R86Jy5+caYaFGJYktv4s32HZdqvZkjHhzOlM0elEeeEFxQms9odjKa14awxUJst7RcpU6DJs9+F/FtdSq0kAuWEk38ZFwCmFURyFQH7fcLqrYXnPp0PwqzKs7WxVoDVME+dUiWM2Jbpegu+D7+b4uwiv8YzZtv/1Yhb60qSxZkaQ5EEnlHxUjuLZrD4MVf9WkZhIF7qgHxqi2zkUeBBivuE1ZQ== 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=9dY5mc9962yPz1bEk4Iw6Gm/GIuV4Wrrww4w84kU1LE=; b=MnSjvi3/nwqWz/6xcrR/ZUvGxMEkOW0HtrexF5bktUDZ8mAVldoaZhXlOLX4fYpAYTpLgvGRgxlGDM/Cq9CK46uBb6mcRZEHACF1F9EE5le+Akh4qcXQ5Q4IOxRSkuU124LdoMZyxMGk+8lHMUYRIdgjG9e8PNJRu2mEcBdCWag= Received: from DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) by LV8PR11MB8486.namprd11.prod.outlook.com (2603:10b6:408:1e8::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.19; Thu, 12 Feb 2026 14:44:11 +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.9611.008; Thu, 12 Feb 2026 14:44:11 +0000 From: =?UTF-8?q?Damien=20Ri=C3=A9gel?= To: greybus-dev@lists.linaro.org, Johan Hovold , Alex Elder , Greg Kroah-Hartman , linux-kernel@vger.kernel.org Cc: Silicon Labs Kernel Team , =?UTF-8?q?Damien=20Ri=C3=A9gel?= Subject: [PATCH v3 08/14] greybus: cpc: add and validate sequence numbers Date: Thu, 12 Feb 2026 09:43:46 -0500 Message-ID: <20260212144352.93043-9-damien.riegel@silabs.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260212144352.93043-1-damien.riegel@silabs.com> References: <20260212144352.93043-1-damien.riegel@silabs.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: YQBPR0101CA0124.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:5::27) 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_|LV8PR11MB8486:EE_ X-MS-Office365-Filtering-Correlation-Id: 10e480af-173d-4194-1be7-08de6a452f58 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|52116014|376014|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?TzdGajBScGhHb0xCdTZqYkJ5M2dzQmJ5NERkcW1ndWNaWG5wbGNCUUhpcWVH?= =?utf-8?B?NDlyeGdFZmNxWGo3Rk1BL01YUW5WOFBWeHo3eklLRWZwaTR4VTAvVkc3aDBa?= =?utf-8?B?L2R5WnlpWC9rWEdNaHlReFYzNXAxVlExWmxkMG9tcDV4UHVnZmNGa0w4SG9P?= =?utf-8?B?OG5tS1RLRmJ2RFNpc2hqWWRXK0thd1ZyNWJ0d1Btd1lCaUg4Vm1IbE5BV2dQ?= =?utf-8?B?d1lTZUNmb2ZkWHlxK2M0M2RESFFNRHhqUk1vcUFhOExuZGN4QW9zdGlHT05D?= =?utf-8?B?ZmswY2JuN2ViN0lxQXprT1NUTEtyb0ZTMGVKbTdFcDZpVlgzOHZUMm8vblRj?= =?utf-8?B?R1Z1eGhQTDJXN1RYMlFNM1cyVG9LaGVvZnYyajlRTmR5QU9BVjBRRTJFL3hN?= =?utf-8?B?UmVhRWE4OGp0Rk5XL2lzMk1RTStvbjJPaFFiaS9FdWhrSHFiNHE0aHVXc2d4?= =?utf-8?B?Tks2Q0R0ZlNCbzRQbFJIUnNYWHZOaHRPWEMzSlNnb3NUa0VqQ09FRGRnRkwz?= =?utf-8?B?RWRiSU9Ncm04eFFQTVJodFcvS0VzZ3gwcytkU0lONlhJcWxqR0MvYnFiWHlC?= =?utf-8?B?ZGI4SUxFelJjamdIcUtIV3Jha1RKdGZNeUNEV3VPOS9PMzk3ektHQ2tRekRG?= =?utf-8?B?SEkxV2FVTkgxQVI5ZVUxTEhIUjhNeFpMVDJLdVF3T1FKQUgrNHlzaXlralNt?= =?utf-8?B?bG5BWU44VExKNU94dUlxUm9jWTVyWld6UkdDUUM4cWJBd1dURjJ3Qnp5cWlv?= =?utf-8?B?VSs5ZnBYaHVJUGlFQnpPcG1tTzlFQmluOXVQQStaSHBkcnVPZDVjL21Uc2xy?= =?utf-8?B?WU1jNkNxVk5UWFZDV3RJcHFqTFRyNE1xaEQvL3ZmSWZ1NTZDcktna2JWM1Rw?= =?utf-8?B?MDN0S3JFeCt2dUs5U1A2VGpPYUN2elZNZGN3S2lieTBXM1ZCL3k2QTFFaWdN?= =?utf-8?B?NFR3cDRxcXNDVnBNZ09yM2QvcVFybUtBR2tBVWFhWFJmei91WTAzSnFDdFNq?= =?utf-8?B?VFgxWVY3R2RDcEZhKzVVUFJUM3dHSDhEeVN4Q1JzUUUxOU1vZGdnalpSSlFv?= =?utf-8?B?ZU9TMHRhM0NPYmxtZC92Mkc4dStpTCtTOEVJbkxaRnIwSzdJVDlGVHNSTE5q?= =?utf-8?B?NWwvb1o2Z0I5NVdudFBXOURGUDVsTmxwUVRMTDdKUEJXVE0reFJQUG4zU0pr?= =?utf-8?B?a1RGKzZqRGJqRllDejUzYmRPQmpOOXRvYWRIdWZXRnJlZ01wbzl0UlF3Q2hl?= =?utf-8?B?bGplSXBQWENqRVQ2YVRSUGdLc1NzRWhlYVJMZ3RCWXJzRXlSc043ZUtQbDNO?= =?utf-8?B?Zms3cWVMa284SkJzUWkxaW8xWHZPNDVsR2ZzOWVRb2RXRWRweXU4SFdYcTVk?= =?utf-8?B?TVc1OVdZMGkrUmtxWDF2bnIyYkhFNThEdXAwL3VMSFE3a2hsSGZJTlI2OFhW?= =?utf-8?B?aVY0UEtmcjhLKzI1SDJLazR1RkhDSUpia2NCdG5XbXNSc2pNS3QzelZxSnRn?= =?utf-8?B?UUxWSUZLZm5DNlB5VmF6YzE5eDVxeEdqTGpQdTVwWTYrQnBCcWV0dVM4Njl6?= =?utf-8?B?QU1mZUhpbDI4VzU5cW5hZXdzSW1kVzZEYzN3a09OOU1ZM0c0WEY2SFBFdEg5?= =?utf-8?B?STVkbS9LRzMyTEl3ZG9VUzQ1S1JVc25HTDFvc2o1TmVmUnBUNDNXcXRlTi9j?= =?utf-8?B?c1BIalljWmdHZTRsTkx3My8wb25vQk8xRFNEK2ErNE1taVpnUnBUZEt6N2Rr?= =?utf-8?B?TVFVb1NUUlRCbXM4Q0NWdE1TVWs2cS9ianpHalJXUzgrT3RDVUtOZjhiVE9Z?= =?utf-8?B?UUUrQVJGWkdBdjRwdTJqZEc5WWpNWEdOVzBraVUya3BpY2VOMFp5aTQ0YTdT?= =?utf-8?B?eGJHVHp2VFlqdUcyRzZvemlZRDdIQTdkdlpPVEpUU01lNjlCbS9LUXRqWGh1?= =?utf-8?B?UXdrNjNBQWFWZHdPTWVyWkVGdHorMUNiOFcrbTBYK2dEUnFjblBsaitFR2JE?= =?utf-8?B?Zy9NVUpYUzZ0a2JicTNzc204YitoQUdlL25oV0F2QklwSndacFEwZVdVNjlW?= =?utf-8?B?SGMxcWZpZStsaVdXR1ZJQnkzeWNndVpMTkx1RUMvYmVtU2d1TFlTRU14TU1U?= =?utf-8?B?NVIwV3hRQkhjdUZUbmhYbnFhSjNVMTFkR1FPd0hYNDY3UTZnZWd4QUwyZm1l?= =?utf-8?Q?cD7c/NR0cCBBSmcGK2/3vOE=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR11MB8205.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(52116014)(376014)(1800799024)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?SjVvQkQ3Y2orQVdleWZiRXdDSG1hTDJ5bE10dFhoVmlHZ3psSjZEQXFjYzNk?= =?utf-8?B?c1FSeWNxTzdNVzd4d2ZvUXZPWDhQdThCVlFEaFJ3aXd6bk9ZVHBjQlkrUnRn?= =?utf-8?B?UlNLUkNmR0hyRlB0Q0FoQVczVDJQTnZobTZVNFhUcmFtWGVwdHJVMVVxNVhz?= =?utf-8?B?LzlhYXovMk96a3paVWZsU20vcXBDYVRkNFZ5bEZnR3BJNGtDTURkZjR4eFNR?= =?utf-8?B?dFRnb3psVER1cERJSFFoRlRpVWxzcFhLK0NTWlJWQ0pBeUtmN3ptd01DLzJk?= =?utf-8?B?NUtqL2FteUdpSGdObW9yZjdZUFdVakhQVnV6aytuaWpyUk1aWHZIOU1wb21D?= =?utf-8?B?NXM5OG1TcnVSNVI1Y2lmNnVMNi9YNlhIdU83WHcwV2lQeGNxM01qNHFHeE9S?= =?utf-8?B?TUdua1hYamRSWFF1ZHlYTUxFS1ZCYXUyaFNrcXlIaHdpWVNHMEpKYTlUTUEr?= =?utf-8?B?UUlTUHZUR1BkTFRPZElEQ3VVMWxpdE1jRElRSFFpQU1uU1dUR0s5QmlMcXIy?= =?utf-8?B?K3hkb0FGMS9sQ0lmYWZ0czVvRUNRWW1tMk94bS9BbllCRHBTWk16TTFKekRL?= =?utf-8?B?SW4zUDdLeFpLNnNvdEFTR0g1Qk5oTVp0RG9mL05IQ2dPL2lXLzZIRnpCL3pG?= =?utf-8?B?Mm1LOE5wNmFXNzJFcnRCUzJGL3czc2pLSFE2RDM3aHhPU0l4R1ZwV0MrbnVh?= =?utf-8?B?R1JsaVl4VlMxcUlPVmRNRHdLbmlYNldZY0FvRno3TVBOeWVzZUNlRVUwZC9Q?= =?utf-8?B?azVtM1JQdCtBWVpHYVAyeDArR1lPRHg5SDNLUzJ5QnNtMzJDeHJCWlJ6Y2RH?= =?utf-8?B?dzUydUtLeUdWNTdMd3hzdWN6QUowcStZcUVhQmVuaVdnZFJCRkxWWi9tSGFM?= =?utf-8?B?ZUhteUVLSjdvZHFqcXQ0YVBHUjhxUEczNWhmcE03ZmVDUlhxcHdicVlMWExt?= =?utf-8?B?WFRUdXM1NlF4QXViT1UwR3Nvb3FsSFF1Q1RLWjhSbThjdkpVdjF0VEVTZk0x?= =?utf-8?B?Wm5jVlBQQ3oxVFJRUWdqeGdtWEVGL0tBa2I5d3pwL1J3YitZbzZHREpvbmtv?= =?utf-8?B?MWgzZ045ZjBFL0pqSXoxYzQ0U0VjWjFnaWdvcjBIQlhPVHBIaXVKd3lsVkZW?= =?utf-8?B?dXlkM085dlI0YWdGV2JsWUFLZHcxK2V6L2x0SW80Y3JDT2dFT1hFQXViUEth?= =?utf-8?B?andTY2JZUXJ5NnlaT2E1clRUQURNNzhvN1IvSFRoOHlPVEtKR2ZMdkdyM0NF?= =?utf-8?B?Lzl4ZmNCVmFmcG9ZWEtyZXdCYVl1Tjl3YVpPeVNXdlJ1KzVDbW9JakdwVy90?= =?utf-8?B?anFwYWkvdnU2LzBQeWxZNnFDeHc5RE1zVDNHaWpvN05hNjJiS0twMVZmaXY0?= =?utf-8?B?T211YXBhUTUrVks0UXVkWVp3R3VLU284Z2pBdjhNbVA1SXdybE05U3Z3eEVC?= =?utf-8?B?ZWlaeWs1cGdxdUkrN0t1aXQ0c1Y3TFFoTEFuaEhmSGIrQzZEemRNV3ZiL2No?= =?utf-8?B?NG00VFk3TkNXOXZnYXRxZzdCZU5sMCticG12WUh1anZQenZPa3NIK09mUFBL?= =?utf-8?B?d200dnBhT0lUZHRnUURRU1U2ZmpPV2FEOXM3REN0cUhqZEM1dXU3UEQ5OEVa?= =?utf-8?B?MWtnTzBQZzNmTGFGbFJFOUVYZVE1di8zYzJOUzFsYmV1OTdOTFhPQkY3L3VH?= =?utf-8?B?NWNMTDBFRjlBYjZqUUNGOFhEdU9TZFJKQlRadTc2K2lWYnl0MFFOR1JLdlFh?= =?utf-8?B?NXYwS3U4bGJzYTBZRDFLZkwxRm1yRlQ0YWFzS3QyTkNWR3Q0ekp4ZjBuNkoy?= =?utf-8?B?S1l5VFROemdnYWo0MUg1MEs3SktOZ0dUNTR2My9kT1pjRmZIL24wRzAxVGcz?= =?utf-8?B?T3VKTytGa1hwcnVqOUNZRDkvb0RJTmxNVFk2WWZ6RzlkVE8yYTV5bGFoQTFz?= =?utf-8?B?ZlI3U25pbkx1TUZZUmR0T2ZET2t3dGtGZDE0aGQrNXJGZ0pjYTI3MXFTSlZ1?= =?utf-8?B?Qis2M0dyVGpPRnU4czBJeVF4QktsREprYzlrN2p6RjM0MEIyRzV3bjBrUGZ5?= =?utf-8?B?am9xYmFwUHhveFVTc3lNTXlkblZCQVpCQzdzczJKaWJMaXcybWJ2bFlpLzVD?= =?utf-8?B?NkxuTTVtSW5ITVRmZjJON0w0S2FuSk95clU1QVEzeDNhTlVCNFhYSDJjNFNm?= =?utf-8?B?Vm4rSVptWmcrU204dFQyWER3NEM1YjYveWphbktQbkdpd3RSaWRHaXNwbXRt?= =?utf-8?B?aFVCekJSOEswRTV4cWNvZnZ6M1dub2V5aHJtdTAyK1ZIeTRjRjlQMWxXRFB5?= =?utf-8?B?cG83U3grekFjRytITGhoc0VjL3VML0o3N0x2aUxxdjJ2UzFINlltUT09?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 10e480af-173d-4194-1be7-08de6a452f58 X-MS-Exchange-CrossTenant-AuthSource: DS0PR11MB8205.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Feb 2026 14:44:11.4434 (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: GbcaZv9pCaah2XhOo2hXFi6XSAXyYU/eFm8rQr421vZHoaEoZvqbuBveGKJYL0v3XQxptSZUAJk0dAbOisYW/w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV8PR11MB8486 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjEyMDExMSBTYWx0ZWRfX1TwMAJxd+qRF ES+W0YIRfs0uwfTW86oXvgZkeOAJI9AVSnZ/+LH2FDrMjrFjKqWYeQdW6d/mQpnSCRIlgyVqEKC Q1JI3eNKGOBbFkNTPeo+2sOEpmBAzee3ncLUN3GXG3BH7WzMun2I+kzL+XIdxfnwp4R65rOyJxq DHh5/KDpOsoIC3jII6L9ioMXECqNbLUjTen9p9GiECzNIYioUaqhM+0DxaRghB13yzlBG4YAtvt jVt+cdzdzGdrBvF+5DXK3qT4rBa3fpRD/IZ7sQqviJTr4ifzPo+IaP3i/skl7TvuVzchqBPkKUr aYfTp+T34y1ymSo9BwhDD3rUl21NUI9iDk7CfyfM4CR8qpXIYYoVjhcnDHJRtnopp9DHRfkonE/ FzWHvG8BeaHr36M5LPHcrr5iBLq+zhViVoYd9BOeGczHZflJHilxsWbfABHey4XYSjtbD+DhUHJ jxDJL0Su3o78a94iBQg== X-Authority-Analysis: v=2.4 cv=DtRbOW/+ c=1 sm=1 tr=0 ts=698de73f cx=c_pps a=TvliyZNEFSK35vtP2Nadqg==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=M51BFTxLslgA:10 a=i1IsUcr2s-wA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=2AEO0YjSAAAA:8 a=vN7oVFPIg2LUC2IVNO8A:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-ORIG-GUID: AhChdjU5OQYgS1CwYvPOnpdxkCZxnAWE X-Proofpoint-GUID: AhChdjU5OQYgS1CwYvPOnpdxkCZxnAWE X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-12_04,2026-02-12_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 suspectscore=0 spamscore=0 impostorscore=0 lowpriorityscore=0 bulkscore=0 clxscore=1015 malwarescore=0 adultscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602120111 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 2c73d8e724e..7041a6a8a36 100644 --- a/drivers/greybus/cpc/cport.c +++ b/drivers/greybus/cpc/cport.c @@ -9,6 +9,16 @@ #include "cpc.h" #include "host.h" =20 +/** + * cpc_cport_tcb_reset() - Reset cport's TCB to initial values. + * @cport: cport pointer + */ +static void cpc_cport_tcb_reset(struct cpc_cport *cport) +{ + cport->tcb.ack =3D 0; + cport->tcb.seq =3D 0; +} + /** * cpc_cport_alloc() - Allocate and initialize CPC cport. * @cport_id: cport ID. @@ -25,6 +35,9 @@ struct cpc_cport *cpc_cport_alloc(u16 cport_id, gfp_t gfp= _mask) return NULL; =20 cport->id =3D cport_id; + cpc_cport_tcb_reset(cport); + + mutex_init(&cport->lock); =20 return cport; } @@ -69,10 +82,22 @@ int cpc_cport_transmit(struct cpc_cport *cport, struct = sk_buff *skb) { struct cpc_host_device *cpc_hd =3D cport->cpc_hd; struct gb_operation_msg_hdr *gb_hdr; + u8 ack; =20 /* Inject cport ID in Greybus header */ gb_hdr =3D (struct gb_operation_msg_hdr *)skb->data; cpc_cport_pack(gb_hdr, cport->id); =20 + mutex_lock(&cport->lock); + + CPC_SKB_CB(skb)->seq =3D cport->tcb.seq; + + cport->tcb.seq++; + ack =3D cport->tcb.ack; + + mutex_unlock(&cport->lock); + + cpc_protocol_prepare_header(skb, ack); + return cpc_hd_send_skb(cpc_hd, skb); } diff --git a/drivers/greybus/cpc/header.c b/drivers/greybus/cpc/header.c new file mode 100644 index 00000000000..62946d6077e --- /dev/null +++ b/drivers/greybus/cpc/header.c @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2025, Silicon Laboratories, Inc. + */ + +#include "header.h" + +/** + * cpc_header_get_seq() - Get the sequence number. + * @hdr: CPC header. + * + * Return: Sequence number. + */ +u8 cpc_header_get_seq(const struct cpc_header *hdr) +{ + return hdr->seq; +} diff --git a/drivers/greybus/cpc/header.h b/drivers/greybus/cpc/header.h index f65a608a650..5196422380e 100644 --- a/drivers/greybus/cpc/header.h +++ b/drivers/greybus/cpc/header.h @@ -38,4 +38,6 @@ struct cpc_header { __u8 ack; } __packed; =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 759322759bd..2c1b5d02ec2 100644 --- a/drivers/greybus/cpc/host.c +++ b/drivers/greybus/cpc/host.c @@ -215,19 +215,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) + sizeof(struct cpc_header))) goto free_skb; =20 - skb_pull(skb, sizeof(struct cpc_header)); - /* 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 + sizeof(struct cpc_= header)); 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..8f0ac6dfa11 --- /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; + memset(hdr, 0, sizeof(*hdr)); + + hdr->ack =3D ack; + hdr->seq =3D CPC_SKB_CB(skb)->seq; +} + +void cpc_protocol_on_data(struct cpc_cport *cport, struct sk_buff *skb) +{ + struct cpc_header *cpc_hdr =3D (struct cpc_header *)skb->data; + u8 seq =3D cpc_header_get_seq(cpc_hdr); + bool expected_seq =3D false; + + mutex_lock(&cport->lock); + + expected_seq =3D seq =3D=3D cport->tcb.ack; + if (expected_seq) + cport->tcb.ack++; + else + dev_warn_ratelimited(cpc_hd_dev(cport->cpc_hd), + "unexpected seq: %u, expected seq: %u\n", seq, cport->tcb.ack); + + mutex_unlock(&cport->lock); + + if (expected_seq) { + skb_pull(skb, sizeof(*cpc_hdr)); + + greybus_data_rcvd(cport->cpc_hd->gb_hd, cport->id, skb->data, skb->len); + } +} --=20 2.52.0 From nobody Fri Feb 13 23:22:23 2026 Received: from mx0a-0024c301.pphosted.com (mx0a-0024c301.pphosted.com [148.163.149.154]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 88E302BE630 for ; Thu, 12 Feb 2026 14:44:30 +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=1770907472; cv=fail; b=sllV+lTFoIG5TArTfuUu63Jy3hM2le6I/Ee2W6iIze2Wm5rsNAIaMxixc1kozugqii+b5yCgm1BLbhyEC9fzHsVUDmRwiHXXeVTUAl+gXiGL/a5S3Z4eg9u9Bu3dsquGX3B+FyfCMJZg7tw0mqshp/ky6J75SmrraUyAmdnKocg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770907472; c=relaxed/simple; bh=gO1sNAiOolpO9dj8UmaN3ZLFsx6QFg2Se7/xgC38Hnc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=s1v/8nwhiblVvAkVvy6AR2xz7K7wkvkb/zWbkNyGxmxprjSgo8r9n1Vv/8MHCzlIqfdYOBA3IqJG4h15Nr1dvzr6XWN+9YbN5lXPi6HQu7XpSM0V9sYlQRHDPKnWm4Ko7Ib4sLdHGz+oFHYETwl0DV2LTFRm+iuQagzXioVO4rE= 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=RpvIrWK9; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=NxRSGBsJ; 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="RpvIrWK9"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="NxRSGBsJ" 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 61C2Lwnj2678544; Thu, 12 Feb 2026 08:44:16 -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=ZZ1TKMwgYjIr2jdQ/i2Vf/uw9HLlg2Mbuklc+DINhEc=; b=RpvIrWK9qb16 pSVKOa5Ctlzurlkp2bKBqknzVp4yeMIbHFqS1v1VAsXwrgFyQvUIXRIGNObzptJL XIuwwQvQhN+jU5gjD3gAyeotZ6yxAkbFzgf5aRvWASS+mbKOGHyDa4NckYkJ79/F XeRxJxkpRf0XmhtQj9bD9kLwlFSsIF2Nao4mmn72qZ1xjncGXUR1M7TcJkfPkmxV bI9C+phz18qwwIEEkQsqKIZd2pte+DdqqykIENNixfkhqeKoyixabK1taBuemNSD MKwkIl54/cVZ9mfOguICsEyVzlPGu2KT2rqQSMBYOymAI3IBBIKuxde2eaqpTpwK R5LwxsziKA== Received: from dm1pr04cu001.outbound.protection.outlook.com (mail-centralusazon11020096.outbound.protection.outlook.com [52.101.61.96]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4c92uysn4e-7 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 12 Feb 2026 08:44:15 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=rllk0uq57ZMJSY1SgBzck754Ci1BnBOQ+w//M4atC/uxy72aYCZvY29r4tA8g8vRz9YfneHAlUqJgfm8OhGpaesSssRW/s9aWSmDgNWbkd8ZOmdyj0+UfR7nyJ+To75XCBijRBjTnZkq+3klisWTsqpfVtyxz/dHnI9+uRdboyHKtg08t1czh7py9gSeZ5+juwZgbGW3Zf3hD5e0sVDYPaydOx8P8D3PmJh1F3esccZ/s7CgWJY/Jf/ewTmjZ6ogAadQ5KvQO0LJW4E2wW1XxmrwxxtHkhU1z4sNIm7kEZQN0Lxm7vOekF8CfxSLEorj/1zqvZBbh9mU5OtooXfcLg== 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=ZZ1TKMwgYjIr2jdQ/i2Vf/uw9HLlg2Mbuklc+DINhEc=; b=V5lO3DCCDr93X465SccEoJWb4eL5L+ey72x5VtkKKWwjKaAjnJcg9txFk7jy6b2IplZ+Vz9CsIezhydKNsrXoigmWOO90JHC3R19wg4/yZb3uPs/CYLulXB57B4Gj6HmFYCxqOjmBV4Wg4QdhtujZfowNbN0JXTDSHU8LGA3yZeC2EUpwayq+ludJUhFR8Ltz0DAaT1mf3I1nFrZg7L8kphHerW7EmHIjWzYwkKOh/OcWOWZyTXL/GPBDh22tR+bkzXliWQAm0yFNk9D324ADkhv8p8cGx2UsxCBIY0E5tZ32Dv4vtAomwbSbX9doUp9Wr7W0/gdmyeOLTeVEZz4+A== 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=ZZ1TKMwgYjIr2jdQ/i2Vf/uw9HLlg2Mbuklc+DINhEc=; b=NxRSGBsJM7t/g2/qHeNLikDHr0eX609aHeZPuqdRnYsgcuRgjmIJyHZepLPEk/RGuLwkRMP2h0K6CL1aVviJMeoYKg7O6zMi2MFXS11ZtUhjW6rEYk/lyoJRFqivY9qLTm3WSCj7ZMvXX/HKx3GBBY4Wpb9pIZ1kkGQ+3evf6uM= Received: from DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) by LV8PR11MB8486.namprd11.prod.outlook.com (2603:10b6:408:1e8::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.19; Thu, 12 Feb 2026 14:44:12 +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.9611.008; Thu, 12 Feb 2026 14:44:12 +0000 From: =?UTF-8?q?Damien=20Ri=C3=A9gel?= To: greybus-dev@lists.linaro.org, Johan Hovold , Alex Elder , Greg Kroah-Hartman , linux-kernel@vger.kernel.org Cc: Silicon Labs Kernel Team , =?UTF-8?q?Damien=20Ri=C3=A9gel?= Subject: [PATCH v3 09/14] greybus: cpc: acknowledge all incoming messages Date: Thu, 12 Feb 2026 09:43:47 -0500 Message-ID: <20260212144352.93043-10-damien.riegel@silabs.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260212144352.93043-1-damien.riegel@silabs.com> References: <20260212144352.93043-1-damien.riegel@silabs.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: YQBPR0101CA0124.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:5::27) 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_|LV8PR11MB8486:EE_ X-MS-Office365-Filtering-Correlation-Id: 2158a851-e3bb-49f1-c34e-08de6a452fd7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|52116014|376014|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?R3E2OEFxbTJUZ0JScnJFbmhiMnczT1ErTHZEY1gzWTNwZTBzOFZGdVRLcGIr?= =?utf-8?B?STZFSUJOSEplVEdFNGRMZ2U1WVRLSnpkSnM4Vk9rWVZpSVdnOFJKNU9XR0Rz?= =?utf-8?B?ZVZlMlFWWE5tbHl3QXFVc1Z3WXpXR2Y3UlJRSnVoTTVIelhIRVV1d1VpdWY3?= =?utf-8?B?ZUUzS0FsWVVUTUF1WmQxY3lGRGZkaVRUUEtTNzBJV1VBc2N5NDFzL0dSQ29t?= =?utf-8?B?a054RnFMMWZwZWV1VGZxbnZZSDdpWmFlOU1jR0tNUXVKOGwwQUNXRzdWeVR5?= =?utf-8?B?VDFVQUdBbTJ4aDVCVnZERXBrVzc5TUtQSmZhSUFSVGF0ZnpPamdDR3BJWE1C?= =?utf-8?B?U09EUFlHSWZMR2dzdHlON0ZOM3dtWm9qRitTQXVjbDIzTWZBTFNlbWtFbk4y?= =?utf-8?B?c28wWFI1NGorb0NiZ1Jud3AzdmNQK3UwUEJIVTl4OGtiaXZYV2p6MVZWeERo?= =?utf-8?B?Q1pqeUZZblVvVHVpbGljSHVmRFg2YWs5QW9BT2pKK29raGU4TGRaZU5qY1Bz?= =?utf-8?B?Snpicm1MTTJNZExFc3ZldEI5dlhXb1Z5YUZSU1pWR0MyczBMb0ErN2czNC95?= =?utf-8?B?MDdna3orVkVmbFhWK2pTQ0VOS1RoOGFyOGl6M2t2MGw3Zm9hcVFSN1ArWG1V?= =?utf-8?B?dUx5LzVrUGdxY0k5YWtFZTRyWlpoMGt4Z2VjYTZWTEZxanZVSTRObnVjUkl5?= =?utf-8?B?dnE1ZUg4MStOMGZsLzJibEhpQUFUazE0OEt6WGwxNXdHYWNkYnR2M2dEdjZv?= =?utf-8?B?YkhDb0RSQWJaVlB3MUdlU0NZb1Zobm9UbGRQeUkwbm83OGhLbzN5T1orY0dO?= =?utf-8?B?Y2lHRmwxQnI5YWxwenJNV0Q3ejYyS0dPNEFtRFFFYkdGZGRoelBFUzkraG1Q?= =?utf-8?B?TXVKMWxpT1ZWMFFmVGd3OFE5b1RKVEM5MWJDb3RNN1ZZNnZJUnJUMFdKbW5R?= =?utf-8?B?cURmVmt0V2FLL1hiTUE2TTkzV2JCblMyL0ZmdFg4T25WeFZBQkdWdWhKbXN6?= =?utf-8?B?WEIrRWp6UFBEMFJ6MFBnYmZEUHEvd3Z0d3FJNWpOVk95MDRCMVlWalFxTTFD?= =?utf-8?B?d2M2eTViWXVzN2h6VGFTeGJDaUdNcC8wOFJ3Z0YrMUR6TmhtTWZJMDQ5bFc5?= =?utf-8?B?dWFBalE3OFh1NCtqcEVob3RiWTJjQkY5Z0U0aVNKMWh6cFRTMU8rYlpiQzZD?= =?utf-8?B?WldZaUZRbjVaTG5uSm5ucE5uck1ldFMyeGt2RHpOK01TTGZ1U0R5VnJnRk4y?= =?utf-8?B?dWt4cEhyaWpHbEk0ejJjb1FHZUJPNVU0Z2hQa2llN3NXUlplWlc4bUhkdHBT?= =?utf-8?B?a3RKcmxvSmQ1WDJITyt0czU5cVQ1QkNqREVKMktLc01DMklLRUVFZTJuTGRG?= =?utf-8?B?b01HMVphVnJCTFZmMjI3MWE2N3hqUE5vNC9qcSs5WXlUU3FKdlVaWE8wcDJp?= =?utf-8?B?SVFnRXNrNFNZR3EwbTFLRFVEODlIM05pUEpoVUY1Tlg5bEZKSnVNVEtiM2ZU?= =?utf-8?B?UHB6dzY0T1pwZ2tJb21BZWs2b0o5SmdpRFFhVWdSSkttQlpuekhIdGRvSDZ5?= =?utf-8?B?bUpkeldkZkY2YTBSaENzKy9lZ2Y2dUxucEtRMkIrSFV0QTlLdmh0WTRwYmRL?= =?utf-8?B?a0N4SHI4ajhxR1NZb2xRblJIWDFYeDdHanFHcUlWUTRrQ0M4cTBmOUR5ckdV?= =?utf-8?B?MHBHaEtRdjM0b3p0MVFWRGk5UldBaVdMM3JBR01adnZxeitmQU05R1VIMDRS?= =?utf-8?B?N1BPQm9VTXRZKzNRUkxqNjFxTU45TnhjUlg0SXFFbyt3WmR0OGpkbTRBNDBX?= =?utf-8?B?dGZ0ZERBakJvcnQvUmwyUGlvVkdKQzJiVHFyZHAwOGtlNzZjMC90ekM4OWM4?= =?utf-8?B?TVdwRWtJK2ZWK2I1Qi9LWTJ6VkVPWEVFTENJNU9RQmpPcWF3TEFXRndVREU2?= =?utf-8?B?QmY0em5VSHdVT2pNQVY2c0ZDM1Jhd0VwWVYzMmY4aTE3SnppU1RZYnU5USsw?= =?utf-8?B?MUwwZGFYcjNkY1lscHUyLzlXN084dE5ESlE1V2ZBeHRDTEpSeGJILzdrYm1z?= =?utf-8?B?T01lYjdvclZ0QlJPVjNXbVE0NnhtWWRkVlhoN2w4WTl1NGpsY052dmhSWmMv?= =?utf-8?B?WVEvWXRxdnBUS3hDQjkrb2J4TTNCckdxQ2VuM0tPY2lEcjFpQVdtcmxwOXQx?= =?utf-8?Q?Ei0B9AwuY5OBm6hW0FDvIBc=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR11MB8205.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(52116014)(376014)(1800799024)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?STRPU2tWZTBzeHZyRFhnOW5DbzgxVU9hbXltdXl1ejVUejViRm9Rajk0WU1Q?= =?utf-8?B?UUs4UmFscVhtUWptSWFmUW1WRVR4L05mZDhPSmF2T24yUjJrQ2RmUTBNZkFM?= =?utf-8?B?cGR5WjhtQnByQ0tUenFBaVFBUGcyM0xMUGpmdkNZcklJaHJ3clRlQy9VdXFU?= =?utf-8?B?QUV3QTJGZ2d4THJ4ZHVCTHVqZjdKbGZGeUEydHV2ZGlhWnp2bWFldUZUZmUx?= =?utf-8?B?YWtIbVphZW5HaVRGQlB6UWt3V1hKM3FpUm5MbHRHeHk3NGg3N21GSEUwTGlF?= =?utf-8?B?T1NXaldxQ0VJaHRsM08rWmZqZmRGZTJ3MjUzanhmekJiOGczM2F5Q09BaXBu?= =?utf-8?B?Zms2RTRkeUhOTk9Ock9GZ1dhRHV5TUhwbjVkaFhpUkpnYkpnbllWVzZidnpW?= =?utf-8?B?TnpHdnFNRkR0dnd3SWIrRjVkTHVNZVlIN0sxeEFndUM2blhBMm9oWDVxL1Rt?= =?utf-8?B?WkRSLzVNbGtYK1hIc0VBYzlpZ1QrcTlZYXphUGdtaTZnVjZ6bWtwVDVmV1Vh?= =?utf-8?B?ajlnK0RTWjk2YXUxaGQxVXBhZ2xuK2FRYUVNUHlKZlJOWDdGY1AvYzNxdDRC?= =?utf-8?B?RnRETnBPYUwvbFgzNFZBb0piejFTVWJrS3VMSWdHUjNWYnhQalBxdkVxVW4w?= =?utf-8?B?a2E0ZDliVEU2YmhlZnhnT1JzUTNxQjJxbGNhdVNLbHl1SnFHK044bG9jbHl2?= =?utf-8?B?VDFiOVM5MENnSVFPdGF4UENRWXdNUnJHNHN1bzRYL0hmeWp6REE1WVNWN092?= =?utf-8?B?YU5DenAzS3pzdGNGTmNlTHRVUEdQWTJEYUVlVkFLNFpKdDd2bTFQUCtmRU80?= =?utf-8?B?NjM0K0NyNDZsV3Uxa2RxeXNXM0xsYlF6bnlDSlFuK00xODRpMldGcTBXZFdt?= =?utf-8?B?NkdZR3Rxbyt0R1A1MS9MSExSV2MzMzl1bFR6R0V0dHhqVlZ4L24xcmlrRXE2?= =?utf-8?B?ZlFtajQraDBnZCtWVldqWEQxSkVTZS8zRWlZaG9FekF4ZWk4U1NROC8yMmd3?= =?utf-8?B?RVQzNUZHbjNweVVySGNDdENxODNNdWtyZlJDU0Z1L3lEbHY0NDJ2MVM5UU1I?= =?utf-8?B?U2NmOCtjTXBqc1Z1UmdDa2U2UllIUVByRWtCTjEzZGRQZG9aK0VOdG5ZcG9R?= =?utf-8?B?OWNZdW1DSVdaNEZRS0lrRkVtbm1aZ2ZPaFd2dGRUWC9jL0ZwU2taaGMrY084?= =?utf-8?B?SEJtNTJQVkxuWXhjTm1sRENYNlBJRmh5dm1hSmtySFRmYjJoNFVtdnNGbGxU?= =?utf-8?B?QUhoalhUMWphSmRLdDQydVhodTMwOTFBaUNwUEJiYThlVHUweElCVlQvSUlh?= =?utf-8?B?YTRVWThobGpXMjVYQnl3UzR0anRXTUdWMFVldjNROFBVMUcxdVRMY3gvcDZx?= =?utf-8?B?WVE2L1lzVkN4SHRaZTMxZHo2Tk9VVjdIa1Z4eFFQYU9vMVFSVGxXbkdIYUhh?= =?utf-8?B?Z1QyeTRVVkcyb3IrR0I1UGErRUpHbENIWmh2blcxSThPampKellkU3JDZjc0?= =?utf-8?B?OTJuWmdKczdZN2h5RHp2TDJVRnlFOSs5MkFvajZ6L080eVc5UEVoYUptUi9y?= =?utf-8?B?NFNWd01WcTAzUVZtVzVRUlpDYTFCWmxuSFdteXdXOEhhTEJBajBFdnlMYWI5?= =?utf-8?B?c05ad0tuK0xnTGExNjFmMFJwcy9iYmJiVmg0Z0VnbHI4T09TTlcrVDFXci9h?= =?utf-8?B?VnJ3UWFZOW1ib2FMVHlBa1pjM3V5K0NHajJCaDdZbm5lKzcyalJSYU81VTR2?= =?utf-8?B?YS9JcHhXTXVJeXcvOVBCMEJPS1lOeWEwWStDbDlKNXllQ3lFaGpaa1ZTVTVs?= =?utf-8?B?N3NjVFk2dFBPdjRLSnE3VTRqMzludE5rTTYxNTRvWDRTdGtndUJEVldCMFVt?= =?utf-8?B?cFA3d3BMcUVacHBDRWl0U3pCREgwcEhUbytSNWpBZTVzZndURjBMTk0yS1Zm?= =?utf-8?B?dnFNY0I3TVhKbDE1UlRQTFpsb1dTdmxkc0haUmx0dE11eGpPVWZzdko4RWlP?= =?utf-8?B?SDJHZ3R2WjVsaFlDb0wySWRQQklzcjBCQzlPMzYwcEd1Y2JjQmRyaEdEbk5F?= =?utf-8?B?ZW41akJkZEwxT3pnU3V1dnJNc0JDS1lFUDg4ZUUySDRhM1VXZ1h2ZGpOVlZG?= =?utf-8?B?dHB0eXcvWGtmbitXR3NuYTQ5NTg2NHpEU0QySWNmcXlhVWVXU2xaTVErd3JL?= =?utf-8?B?NW1tTk1vRGFkMFlPR2VPZ294RmdHN1B4amVVWDN6TmtIVzB1dWU1TU5VaXJs?= =?utf-8?B?RWNvWGVMNHlKSXVyNlBrbjY5OHhzaUpHem5RanRWRFZ2ZHBFUmc2UENCQ2Vh?= =?utf-8?B?dUlVdGxWbTVhazVxSmtWSFJDVFZ2bjhxcHdRV0xEKytJL1p3MVI4Zz09?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2158a851-e3bb-49f1-c34e-08de6a452fd7 X-MS-Exchange-CrossTenant-AuthSource: DS0PR11MB8205.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Feb 2026 14:44:12.2762 (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: VcDdOF45wWjzYPTMrgCywgUERRpquhNSI8Cy2V8sje/R2okwhSkD6Cu1EW7ZAlnydBxGgui7QkCQK+rmKCytLg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV8PR11MB8486 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjEyMDExMSBTYWx0ZWRfXyWbc4HDqwEP/ aVmbl9G3ylqGnt9BgLM96kuP6GlzpaA2n5G321xtovCPyEcUyf9PGS62whrcLkaFc94kFwEnFg2 zPM+sCe5MBfMllvJt7Bkwe8afUxIwzDARfpuv68f2n59ZuLL/UuLYTBYWHDkjdBsAWqoEdKrM/U 3CrA7TFGGNl2GT4HJ44DEB/kBNf9U/sL8qvSJ+kI8BqvHO6C6Ax/M7tiHKIj+roNe9DDRqIpSce 3ijxvv5NvH9lfVBAZfS9FXanUpfJB0DwVdr1TtDcWO/1kJDgf5v/3hKqDD/nGv6TASwogRZxVXc o1F+SUpJTEUkkz9/NLrftjesGKvkgKj8GSRbxFwBy2kRYAh+vdhaUathkALxStku/HM6YzoKOQP Puppi7WL1C80h2Y+OnA55glK8newE6LzsaxkmeWkhYFjCInraQ0CxVMgCngZTjP86eXDDcbSJSt k2roMfkF4aCxJR0SIBA== X-Authority-Analysis: v=2.4 cv=DtRbOW/+ c=1 sm=1 tr=0 ts=698de73f cx=c_pps a=TvliyZNEFSK35vtP2Nadqg==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=M51BFTxLslgA:10 a=i1IsUcr2s-wA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=2AEO0YjSAAAA:8 a=bNjmmVRrHTbCwxPNuCQA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-ORIG-GUID: 1gSHnUDTLKDj8MJ4WxXJwEHy6syeG3Jb X-Proofpoint-GUID: 1gSHnUDTLKDj8MJ4WxXJwEHy6syeG3Jb X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-12_04,2026-02-12_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 suspectscore=0 spamscore=0 impostorscore=0 lowpriorityscore=0 bulkscore=0 clxscore=1015 malwarescore=0 adultscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602120111 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 attempt 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, a flag is needed to differentiate between pure CPC frames, that are only meaningful at the CPC level, and regular Greybus operations. This flag is called "CONTROL". 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 --- Changes in v2: - add missing cpu_to_le16 conversion when setting message size drivers/greybus/cpc/cpc.h | 3 ++ drivers/greybus/cpc/cport.c | 1 + drivers/greybus/cpc/header.c | 41 +++++++++++++++++++++++++ drivers/greybus/cpc/header.h | 3 ++ drivers/greybus/cpc/protocol.c | 55 +++++++++++++++++++++++++++++----- 5 files changed, 96 insertions(+), 7 deletions(-) diff --git a/drivers/greybus/cpc/cpc.h b/drivers/greybus/cpc/cpc.h index 87b54a4fd34..725fd7f4afc 100644 --- a/drivers/greybus/cpc/cpc.h +++ b/drivers/greybus/cpc/cpc.h @@ -51,6 +51,9 @@ struct cpc_skb_cb { struct gb_message *gb_message; =20 u8 seq; + +#define CPC_SKB_FLAG_REQ_ACK (1 << 0) + u8 cpc_flags; }; =20 #define CPC_SKB_CB(__skb) ((struct cpc_skb_cb *)&((__skb)->cb[0])) diff --git a/drivers/greybus/cpc/cport.c b/drivers/greybus/cpc/cport.c index 7041a6a8a36..847cc8ebe41 100644 --- a/drivers/greybus/cpc/cport.c +++ b/drivers/greybus/cpc/cport.c @@ -91,6 +91,7 @@ int cpc_cport_transmit(struct cpc_cport *cport, struct sk= _buff *skb) mutex_lock(&cport->lock); =20 CPC_SKB_CB(skb)->seq =3D cport->tcb.seq; + CPC_SKB_CB(skb)->cpc_flags =3D CPC_SKB_FLAG_REQ_ACK; =20 cport->tcb.seq++; ack =3D cport->tcb.ack; diff --git a/drivers/greybus/cpc/header.c b/drivers/greybus/cpc/header.c index 62946d6077e..8875a6fed26 100644 --- a/drivers/greybus/cpc/header.c +++ b/drivers/greybus/cpc/header.c @@ -3,8 +3,25 @@ * Copyright (c) 2025, Silicon Laboratories, Inc. */ =20 +#include +#include + #include "header.h" =20 +#define CPC_HEADER_CONTROL_IS_CONTROL_MASK BIT(7) +#define CPC_HEADER_CONTROL_REQ_ACK_MASK BIT(6) + +/** + * cpc_header_is_control() - Identify if this is a control frame. + * @hdr: CPC header. + * + * Return: True if this is a control frame, false if this a Greybus frame. + */ +bool cpc_header_is_control(const struct cpc_header *hdr) +{ + return hdr->ctrl_flags & CPC_HEADER_CONTROL_IS_CONTROL_MASK; +} + /** * cpc_header_get_seq() - Get the sequence number. * @hdr: CPC header. @@ -15,3 +32,27 @@ u8 cpc_header_get_seq(const struct cpc_header *hdr) { return hdr->seq; } + +/** + * cpc_header_get_req_ack() - Get the request acknowledge frame flag. + * @hdr: CPC header. + * + * Return: Request acknowledge frame flag. + */ +bool cpc_header_get_req_ack(const struct cpc_header *hdr) +{ + return FIELD_GET(CPC_HEADER_CONTROL_REQ_ACK_MASK, hdr->ctrl_flags); +} + +/** + * cpc_header_encode_ctrl_flags() - Encode parameters into the control byt= e. + * @control: True if CPC control frame, false if Greybus frame. + * @req_ack: Frame flag indicating a request to be acknowledged. + * + * Return: Encoded control byte. + */ +u8 cpc_header_encode_ctrl_flags(bool control, bool req_ack) +{ + return FIELD_PREP(CPC_HEADER_CONTROL_IS_CONTROL_MASK, control) | + FIELD_PREP(CPC_HEADER_CONTROL_REQ_ACK_MASK, req_ack); +} diff --git a/drivers/greybus/cpc/header.h b/drivers/greybus/cpc/header.h index 5196422380e..19612012b19 100644 --- a/drivers/greybus/cpc/header.h +++ b/drivers/greybus/cpc/header.h @@ -38,6 +38,9 @@ struct cpc_header { __u8 ack; } __packed; =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 8f0ac6dfa11..97db70a53b0 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; @@ -20,26 +25,62 @@ void cpc_protocol_prepare_header(struct sk_buff *skb, u= 8 ack) =20 hdr->ack =3D ack; 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(sizeof(struct cpc_header) + sizeof(*gb_hdr), GFP_KERNEL= ); + if (!skb) + return; + + skb_reserve(skb, sizeof(struct cpc_header)); + + gb_hdr =3D skb_put(skb, sizeof(*gb_hdr)); + memset(gb_hdr, 0, sizeof(*gb_hdr)); + + /* In the CPC Operation Header, only the size and cport_id matter for ACK= s. */ + gb_hdr->size =3D cpu_to_le16(sizeof(*gb_hdr)); + cpc_cport_pack(gb_hdr, cport->id); + + cpc_protocol_prepare_header(skb, ack); + + cpc_hd_send_skb(cport->cpc_hd, skb); } =20 void cpc_protocol_on_data(struct cpc_cport *cport, struct sk_buff *skb) { struct cpc_header *cpc_hdr =3D (struct cpc_header *)skb->data; + bool require_ack =3D cpc_header_get_req_ack(cpc_hdr); u8 seq =3D cpc_header_get_seq(cpc_hdr); bool expected_seq =3D false; + u8 ack; =20 mutex_lock(&cport->lock); =20 - expected_seq =3D seq =3D=3D cport->tcb.ack; - if (expected_seq) - cport->tcb.ack++; - else - dev_warn_ratelimited(cpc_hd_dev(cport->cpc_hd), - "unexpected seq: %u, expected seq: %u\n", seq, cport->tcb.ack); + if (require_ack) { + expected_seq =3D seq =3D=3D cport->tcb.ack; + if (expected_seq) + cport->tcb.ack++; + else + dev_warn_ratelimited(cpc_hd_dev(cport->cpc_hd), + "unexpected seq: %u, expected seq: %u\n", + seq, cport->tcb.ack); + } + + ack =3D cport->tcb.ack; =20 mutex_unlock(&cport->lock); =20 - if (expected_seq) { + /* Ack no matter if the sequence was valid or not, to resync with remote = */ + if (require_ack) + cpc_protocol_queue_ack(cport, ack); + + if (expected_seq && !cpc_header_is_control(cpc_hdr)) { skb_pull(skb, sizeof(*cpc_hdr)); =20 greybus_data_rcvd(cport->cpc_hd->gb_hd, cport->id, skb->data, skb->len); --=20 2.52.0 From nobody Fri Feb 13 23:22:23 2026 Received: from mx0a-0024c301.pphosted.com (mx0a-0024c301.pphosted.com [148.163.149.154]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DA03235C1AB for ; Thu, 12 Feb 2026 14:44:30 +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=1770907472; cv=fail; b=NCPUPkRM63KAouRs1f7Gk6dpi1P2JxLm0cclz3CWswqE0kbekBjoMOoXLOmN0q7pb7m+E8rnwkiri1nM/CRMEzBmF1QwH8kVYz8hEA9xQoer+vxFj1Ha3sY/n0cAHJIEUD0dGbQddiVJTy6iWhDmSQxtRceN27jhtjc9+YHtewI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770907472; c=relaxed/simple; bh=uPa9L+KCfdR9SzrZKzBGTvnF3gcquy1ueP9gvaZVz+A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=gPSS71p3A1O0EbGusvXnbOKyWtGxDCsU5UI89bPOewgupcLIRqmwPxpG3Sy2pIvvCIQxgSRlaguePO/d0+nB3A8+3dN50jCweoGc7k9JpPPZwHvnKGe54nh/g0cmxOlPf45g+l2JWIEeHCYgGvWSJXn5hJYWBS3U0Tc0CceSAow= 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=aqHoYl8k; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=QTGGpGzU; 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="aqHoYl8k"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="QTGGpGzU" 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 61C2Lwnk2678544; Thu, 12 Feb 2026 08:44:16 -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=PgR4URbIn7F7QJbYn25yUWG+2Q8p3W8QAi+mDary0K8=; b=aqHoYl8kh5IT CfMfPETVqD9dEZS2isMsNGkI2ROHjlU4kMOiOEDW5ZelX3RZi/BOR8uaH0AL2Pqr tJY8l6718lXTtlgs1z95pjomnk0XV8tPehUocucmayWxstJKlx16gAuN9DEJkOzi XqwkTf3SCnpgvpiPhr9kGQjtWPYNEsOuJ+KFJJ9dgBH3nYNSU1xhUXXm88SUL6Dg w5UpyOrx15UAtqeiQj1ke4s4tkb+F1m/jsnXOUPenrGg4Eo+JFLLkg38Trx1hWAb GuOvUTpUYxDbXHV8SQmhQvbn98U7p9xe1icPW9getZW0LyhImBZjMsLCstFqLBW0 Kios+BC3lw== Received: from dm1pr04cu001.outbound.protection.outlook.com (mail-centralusazon11020096.outbound.protection.outlook.com [52.101.61.96]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4c92uysn4e-8 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 12 Feb 2026 08:44:16 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=y790CrzpkoJ6hcNo4eXiGoOFnl2tXyHIBq0oXclB90f11Pa3m0htmge2Zq9/hEh5RjlD02xL3uObqRzWFsnQz/0gDAaDkNZbaDESc+HQ+HeBqOMOu+pgoOa8ShUsRG3J8oQlZ14Ud/cqczidJWsgvWh/2rUy3GDB5vWL8qddtPqcP7jTRlqyySQ72CR0FMiADd3CiKVNDtRqaGxB3n4BEqE0FQJQnIBqPJOfrJ75CXsamT4+O2JK95yuRa3WkUZrprkuHQrSbNUlA40I/EM3ZmTUHP7ACjUElOu/CCv9SqdzaFuKGefAXXkVDe6kVw5cMOeh2zUHjPNH7/OT4MTvQw== 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=PgR4URbIn7F7QJbYn25yUWG+2Q8p3W8QAi+mDary0K8=; b=YfzuvH0vlE84/UUrmqlA+GTwf9wUQDfeOn75F/CIzgbc9gWdLAZZgwPoJk96QAHOmq+QmfB2LTHqd0J6bxb5cU+/IL2RdPfBW4i+c2GkacF/brpCOpWP80yGH6N/zQvkPTF5YZNZrq8xbBZWCjRO3rxldtiSZd96kPT3YmngzbHGteBiD8u1Dnk6mqBmAC+bkvm12dzpsxE5bDDwTp+SauayI6QoP5Mw+2jH/9bLC3PRH/D/l17BlCI5aNyfP9LsC75V+MRhi37u+vkUtasEM32ea2F11JDb55T5Ow5nXfgPb6f6s9iB4F7hPNrhSphuAkY0VLJ0SptCcVvRwu2smQ== 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=PgR4URbIn7F7QJbYn25yUWG+2Q8p3W8QAi+mDary0K8=; b=QTGGpGzUTkYsRIRtWr/OA5bJ5XOqkwHfrAuJjMinpvG/mEZweB/bhipCVs/D2eQJLqT8xAg7ZdbVUPQPj4YMkTUpJ0aYwx8URRIv+BCcnnb3q9MUjmoYCkkDksuaxaMUGdOe76ZDQsUlYgBE2gc+GoLFHrLQsSkGlF1psZmuD8c= Received: from DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) by LV8PR11MB8486.namprd11.prod.outlook.com (2603:10b6:408:1e8::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.19; Thu, 12 Feb 2026 14:44:13 +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.9611.008; Thu, 12 Feb 2026 14:44:13 +0000 From: =?UTF-8?q?Damien=20Ri=C3=A9gel?= To: greybus-dev@lists.linaro.org, Johan Hovold , Alex Elder , Greg Kroah-Hartman , linux-kernel@vger.kernel.org Cc: Silicon Labs Kernel Team , =?UTF-8?q?Damien=20Ri=C3=A9gel?= Subject: [PATCH v3 10/14] greybus: cpc: use holding queue instead of sending out immediately Date: Thu, 12 Feb 2026 09:43:48 -0500 Message-ID: <20260212144352.93043-11-damien.riegel@silabs.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260212144352.93043-1-damien.riegel@silabs.com> References: <20260212144352.93043-1-damien.riegel@silabs.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: YQBPR0101CA0124.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:5::27) 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_|LV8PR11MB8486:EE_ X-MS-Office365-Filtering-Correlation-Id: 6347d378-4604-42e8-6052-08de6a45304c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|52116014|376014|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?Wk9tWWdyeE5PdVVBM2lqdmFVWFJZUlg3Q0M3Y3FRQkJZRHdNVjBYR1BDeFdu?= =?utf-8?B?a0VHTHUvZUpEcWp5R0VObDRxdEJycFd2VWZIcjRmM0dGVks4QjlrWTdDYkhJ?= =?utf-8?B?Zjc5WG9pakpqTWhPRDBiL3ZCMzRqTUFZRzJqMWk5SHBqczRwKzFaME9iSHFo?= =?utf-8?B?QVB0ZUtwUXhrcEhmZW13U1l6Znlwb09ielJHUFhUMmxobllVMXd4T05ZdW5Z?= =?utf-8?B?SEZZL2lsSGtUVUx3cUZYWU9SSW15K2kyZlZMbmxvSWkyalZqSktxU1hlYkMv?= =?utf-8?B?SDdjYkVraHFWNDBObTY4Kzl0SDZmR3hJdWdmMnZvdGJmTkhxdkdlYnM2Rkcy?= =?utf-8?B?N24xcE9nR2hrUGdINnZqT3dGczQ0YXJuRnVuUlhQTmFoUXd1SEZVcTdEY1p6?= =?utf-8?B?STZvUTZ1ZENPalRMNFdGU0dTYWpjNzlkSHFRQ0tuWTJiemJLOEVxSDdWeThJ?= =?utf-8?B?SlUwVGhWalpyYm9YbU4xQVZiNGRsMGJneGVqRU5XYm1MVzlWT0lCTDZsMkor?= =?utf-8?B?V25yeGxFdmU1djJTejdETmVSSHJEcVNydHRNblowa2NNNTNtczFwUzAvWis1?= =?utf-8?B?SUx3ZDU4enNoRXFvRTdHcC83SWNQUkpBTllKU0dEUmxrMkNJbWxIKzRkY29J?= =?utf-8?B?dm5aSllKcTI0YnFEUzh4bWxESG1aVWlLOVJXN21kMmFNaHRwdWZ6RENuMXBm?= =?utf-8?B?RExHUWVuZklWT1ByOUltSHJMeHRzdUhUTEpoN2RWYXRUbGkzUk5jdXk5bXIz?= =?utf-8?B?aWIzYjd3N3FPc040Nm5vODUyOXltejNBcElSNkJrTzltdThvdHVuQTZaR0Ev?= =?utf-8?B?azQ5RHAreWRoa1Jabk1KNXZUWlhiL2h3RDZnQ3ViMzZJVWpKa0k4UmJianYr?= =?utf-8?B?Y2ZPY0NoRjc2WVpkcEtnaUU1YmNaYVFQTlRocXcwQlVPN2RNVXFxUVQ2bnpl?= =?utf-8?B?SWVuWjB5cmxsa2lPd3drWWdNRE53ajRXcFlOdTlvNk1jQUJVRmFDVGIrdmpt?= =?utf-8?B?VU5iRmNCQTRGTmREcG4vTjVHZGwxd3pMNlNGdTg5R0JJeWovcDNTZERZeUZW?= =?utf-8?B?VVVMaitjaFVMb2haMUlEOERrTFZFRit2S3dVSEZ1WlF4WVJqZzFOZ1BYTGc5?= =?utf-8?B?VjRNVUJKWVF0bkQrOFFFc0lDVENKeU56K1QxaUo5cWlHYXMwVDZZWVRqYTdu?= =?utf-8?B?QmNvelhzOWRUeHMwTmlzdXJRUk1UYjllTE9yaFFyR0I3dGx4cTUzU29BSVBK?= =?utf-8?B?M1pGQjR3OC9taVJ0S2J5N0hYaHg5QkZneDdoTEt6eWdEeVNieWdpVjliL2hU?= =?utf-8?B?K1JKbzhBak5oc1YvMDZZYUFCTnhFZ2VLRjRxbDdNQ09RUzBna0UvTFNGM1Z4?= =?utf-8?B?cDFwRkRPejZvVnkzMzQvQmlaK3ZqK1c3cjVSMWNPMWtnRkV5eWw1dDN3U3Mw?= =?utf-8?B?dVFqK3RZNkExVHdMTmtNVExDbGxuQ1BGUlkybVJKeStGK0pPSEVIY1hZZ2hi?= =?utf-8?B?Z3BNQUFjNDF2OWtQck5TNSttODRObjNWUTF3TmhyMGJhWjJHNEI5SmNyN05O?= =?utf-8?B?d0F6Q1N2aU9yQXNYODRzUkliUGdTbFpORERQQjFHeW1Oa3FLbGQ3QWFKRU9F?= =?utf-8?B?MnMwL1ZxWGlwY2lDT2VuWFdJMGFWdHM0OWpFVmpGeGNEUVI0cE5HbjFDYVdi?= =?utf-8?B?b2ErZjh4bk01MXQrWnJlMWdYai9hUXpsNmdFTG4xVjV6QS9wQnE0MjJUSlU4?= =?utf-8?B?bGZNS1dYY3VPV1RjNEN4Q3VkN25OQkZyZ3V2RmErWCttMTNrUjMvYWQyY2Zv?= =?utf-8?B?VnAzRlpiK2t0eG5PUHRsNnlGUy94cTJ3T1o4TFRMY1RBTnFVeks3aXFvbWwv?= =?utf-8?B?dTBCY0p1UEEyK01qbTdqRSszWlFrT1l5cDJxMXZ4R2ExVWRvbzdHWFE2YlFs?= =?utf-8?B?VWc2WlBKdmhndlVvSDh2Ulo1Q3FmRzJ0dmhuUHpLRFRvT1o3VXNmSlBHM0hk?= =?utf-8?B?RVVGZHpHQlVXYmdOWWl5eHdSSzFNcWh1VTY5T1N5dzdBaE5UWTFZblZYY3hZ?= =?utf-8?B?ZlR3WU04QklWUC9aUFplblI0UWFkSEg0OTRyem54YTg3YWVMSFRJR01DSlRv?= =?utf-8?B?V0Z5S1BsQm4zOVFEeTBKWWw2dzZIQndPeWV6UTMvUkxlc2FKY25Ma3FKeUZ0?= =?utf-8?Q?e+qPLrlHcDmGWo47+bX8imE=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR11MB8205.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(52116014)(376014)(1800799024)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?S28wOC9DWVJHaERpSGMzVk9tRXlMZ1JSTmQwQnFJeHFzWFRrNFlhdkl3NlNh?= =?utf-8?B?VFViMFFFQTZEYlRDbXZPb1FiS1VZUlZ5aXNaZGV5VUh3Z1V3bDViWU4wQTJU?= =?utf-8?B?VWVHZFM5UFFacGJjMTdKK2JjMjdWbGZwaFFMVkNlakNvU2tVYS9wNk1lVThV?= =?utf-8?B?N3BXRE5sV0tvMnRoeW5wRmZSV2xFbUZoWURmREY4RFZZUjBoU1lrTi9ZTVNa?= =?utf-8?B?Y0NheFBSWWRSRCtGTnRoWlozUHd3VTU0cy9KVWtnbjJ6TlhQaDZ2N3ZyYmll?= =?utf-8?B?aWZZWWJzbGRwY0dlQ3I1bnVtSUdwams1M1pWLy9NTHd0QUZvcUxsME4vcWtE?= =?utf-8?B?aGJLMzhqTldFRkZ5UUREWFFnd24zd0ZhSS9yQ2R0K2NJSVh0dm44dHc0b1lF?= =?utf-8?B?WmdZcVRHUnpwUlBnTGd2dWRvTHNqbjVvc0QyVFJhbG1oTmRNNVdyTXZrN3du?= =?utf-8?B?bmRqelBCU005b1czRW5nVFJJZXVuTkFxOUJKTXJtYnFkODV6ZTZJMHpBVFBn?= =?utf-8?B?RVh1V2FMTDFMeElXSmwyVmxpcVJMV3E5bVVZc3ZMMXZsRFh1RzdsMGM4RnNt?= =?utf-8?B?RnptaEorcUY5VUQ4SjJEV2JlZnZpSFBtVXJIWWpDSy96ek9UcHNKUW5lei80?= =?utf-8?B?eitWSi91RUdnMXlkZVVpU1M2RDNaaGdtTE0rajY1elB5NWtsVTdBb0dNNVBE?= =?utf-8?B?L0hvS1RuS0tROXQ5bUdCMkZ1K1JMQkoyY2R4S2cvMWloSlNOUlh2L2RDdnhZ?= =?utf-8?B?VTlvOXdOMTU0WnZtUGdhZmwvcEQ3eFk5bXRjNC9TUFhseWZuK09kbDV1dnNX?= =?utf-8?B?eFQwWWpIcnRVZmpFVzhCN3A1S0c2Z1BiYTdNelZtNmRVbDFmRUNsZHR3dUFR?= =?utf-8?B?OFVpc2x3WW12eXYxTnVmSVBYREhML0plOFQySTljQllUOUU5Ynk4bTlNU0Jx?= =?utf-8?B?VG5vRHFMY0M0Uy9CZ2Eyam9vOCtSbThQMmhjbEZYTndvcmJ0OWE3UC9GR1V4?= =?utf-8?B?WGZRZ2VDR2hoOU1rYTFNWmVYaVVINE5sMFJ6THJXM3dDUngrcWdpQkNhcjVL?= =?utf-8?B?MWMzdGJ2N1V0SXFUR2VJS0ZMMUs1OVYvNkl0Tk14WFRnb0s2aTk1RDM2UEti?= =?utf-8?B?a215RXJ1VVhub3drM3VkOWRTQ3Z5TklmZjFIWWttaXBKV1paU24rRnhZWGl1?= =?utf-8?B?cVFrbG5XVXJCZ0lKZWNZVUFqcVFSVjEwTndHSktHVXlCZTJmTTFDc0ovSU1I?= =?utf-8?B?MVd1cnBQUFlVcHR1NVFCYUhLMlY5bEVwMElKMWJJcWQwb083czJVbjBqcmtZ?= =?utf-8?B?cDA2bk91Z1p5cHA0NlhoOFlud2JRNVVabUlVVnZqVVV5S09jT2lqMWhKcFdX?= =?utf-8?B?QkV2V21QRzVaYXhGRzRxRjZ6R0k5NDcvcHdJcVBRMUxGLy9keTNiTWltRytB?= =?utf-8?B?UUlKdVRzNWRQZ09wcDV4Ukg5Z1JDWlpSa3VwSXV1TTI2RWN2eGV6OENFMHdY?= =?utf-8?B?M0JkT1o0R0hwUHJTKzhKaVQ1SCtVNkRSZW1LM3N5WWdkSit4Szh1WnVtT0ZQ?= =?utf-8?B?eVdWbzk0cVYxRE43WE5jYWFNUE1VNGYzQVMwQ2tBcUJ3bVpsZzlwTS9GTzk0?= =?utf-8?B?Qys1VktkY3B2VngzUGJvdFZySWd0eG1KbVFvVnNMeU03NU5vTllocHNXWjR5?= =?utf-8?B?dTNLOEJOUSs5QWxGZHg0Y0w3OTZDZk5xUGhGK3J5SVlLdVhzYkwrZkNjQWZt?= =?utf-8?B?VW03ZEhtWkJRZXZWLzMvYWlBU1dHSGZEUmEwZjVucUp5cGxvR3o3KzNodCt6?= =?utf-8?B?MFVSVlhRd3dyUjBwYzlaN3lRRGRPc2xIOVRpZzZGRHJmRDl5YmZ1V1VERnFi?= =?utf-8?B?UWhVZU05WHFWQ2crUXd6OU53WHBaZ2tSa0ttN2hZVXFjckpxRkJ0QkFyNWN5?= =?utf-8?B?d2liTEJ4dTRxYXJNbmZ4KzNxZFpEalkrcTNmbm5XYWpyWHIzZldXOGtxeG96?= =?utf-8?B?TmFqYjNldGRmMXZETWs5clZ6RFJ5S1lYNGhDNG5aQmN6RmRhNHZLZlNtcGsy?= =?utf-8?B?QUE2NTBJYnZaTzRhL21DUytTUXdxOHhPR21IeUtmUG1ua0NKUWd1ckVURmpi?= =?utf-8?B?N2o2bXJpeDVxSWplNjQvbFI4aTJxVERiQ0lpOWZBQ0lqT1gvZ2hVOUV5cUVX?= =?utf-8?B?UkMzdzIzTDkrZ1g0UmxCbVVZbkg0UXR3RndGbCtBaU9sOStXMmFoN0hDMG9W?= =?utf-8?B?YXQ2dFN5UUhJdDdqWlZoYm94cVpwY0NiMW5UUk9ZVVQ2dGZ0MUF5Z1djYzRZ?= =?utf-8?B?cXBtVXdkbVRBS1I4eXZ6cUlOZ2cvVEV3TzZQSUhDQzJzLzd2eEM4UT09?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6347d378-4604-42e8-6052-08de6a45304c X-MS-Exchange-CrossTenant-AuthSource: DS0PR11MB8205.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Feb 2026 14:44:13.0459 (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: 4nje+N35xsGOYnaNtssFI+crWYREYPp56o2cbIzPbQXRx9YyA+5LhhyEO4UJnPJfv7BxtsPQ4CcA73JU3SgL2w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV8PR11MB8486 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjEyMDExMSBTYWx0ZWRfX6fcLkLVojy7k 2DWHCAHFldUju6X1rOdjOvwQxnVLD1lVbKXJgQNyMgnkMqJypaFqhFimBAkneibukaGcemlPBcD dQiB6JmfoOkJ30YgWnoGUDltloIBZF5H9M6QyZa0xl8WbTxx26gNjCZjMBmvQ0cSgrb8e2mYzYN KCJfKCxMm/Yrvzbd325qapxmkmpXfkHdClxi8IjQCutPsHGG+z0xZX5ZOJe9c/KjxKEhN90fPmZ g+BgxiuA6dDejPjQnWis4tIDJLzadXY9bcLk+RQkemd/pyDEbhdnZe2VKcVmjUaDghepVrc7CUU cBj5sk++2aP3d6/bxvmiQaJnfoRLXoAMH9/Q4Nc8sph621GOa83yNrG7YneJlexdRPi6VFpuk+T 6C6/mZJq6AtoQ+g041Nk++9NrOYr19gv/KkEc2vNfnsDeVIFqm5X7qgggsAqPprfNlcBjZcbY2K QgvSbB2bSLsO/rTh9Dw== X-Authority-Analysis: v=2.4 cv=DtRbOW/+ c=1 sm=1 tr=0 ts=698de740 cx=c_pps a=TvliyZNEFSK35vtP2Nadqg==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=M51BFTxLslgA:10 a=i1IsUcr2s-wA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=2AEO0YjSAAAA:8 a=dgC3dof49LueHIWcyeIA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-ORIG-GUID: 2PPY8PzoeuT0HS_aAfxvdXPhlVUDe7Mq X-Proofpoint-GUID: 2PPY8PzoeuT0HS_aAfxvdXPhlVUDe7Mq X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-12_04,2026-02-12_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 suspectscore=0 spamscore=0 impostorscore=0 lowpriorityscore=0 bulkscore=0 clxscore=1015 malwarescore=0 adultscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602120111 A feature of CPC is the RX window. This value, advertised in every packet, indicates to the remote peer how many reception buffers are available for that CPort. The remote peer must not send more messages than advertised, as these extra messages are almost guaranteed to be dropped by the receiver. This is a bit similar to TCP's receive window, but expressed in a number of messages instead of bytes. 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 for now, but a future commit will make sure they stay in the holding queue instead of being sent out immediately 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 847cc8ebe41..91c39856e22 100644 --- a/drivers/greybus/cpc/cport.c +++ b/drivers/greybus/cpc/cport.c @@ -7,7 +7,6 @@ #include =20 #include "cpc.h" -#include "host.h" =20 /** * cpc_cport_tcb_reset() - Reset cport's TCB to initial values. @@ -38,15 +37,23 @@ struct cpc_cport *cpc_cport_alloc(u16 cport_id, gfp_t g= fp_mask) cpc_cport_tcb_reset(cport); =20 mutex_init(&cport->lock); + skb_queue_head_init(&cport->holding_queue); =20 return cport; } =20 void cpc_cport_release(struct cpc_cport *cport) { + skb_queue_purge(&cport->holding_queue); kfree(cport); } =20 +static void cpc_cport_queue_skb(struct cpc_cport *cport, struct sk_buff *s= kb) +{ + __skb_header_release(skb); + __skb_queue_tail(&cport->holding_queue, skb); +} + /** * cpc_cport_pack() - Pack CPort ID into Greybus Operation Message header. * @gb_hdr: Greybus operation message header. @@ -78,11 +85,9 @@ u16 cpc_cport_unpack(struct gb_operation_msg_hdr *gb_hdr) * @cport: cport. * @skb: skb to be transmitted. */ -int cpc_cport_transmit(struct cpc_cport *cport, struct sk_buff *skb) +void cpc_cport_transmit(struct cpc_cport *cport, struct sk_buff *skb) { - struct cpc_host_device *cpc_hd =3D cport->cpc_hd; struct gb_operation_msg_hdr *gb_hdr; - u8 ack; =20 /* Inject cport ID in Greybus header */ gb_hdr =3D (struct gb_operation_msg_hdr *)skb->data; @@ -94,11 +99,9 @@ int cpc_cport_transmit(struct cpc_cport *cport, struct s= k_buff *skb) CPC_SKB_CB(skb)->cpc_flags =3D CPC_SKB_FLAG_REQ_ACK; =20 cport->tcb.seq++; - ack =3D cport->tcb.ack; + + cpc_cport_queue_skb(cport, skb); + __cpc_protocol_write_head(cport); =20 mutex_unlock(&cport->lock); - - cpc_protocol_prepare_header(skb, ack); - - return cpc_hd_send_skb(cpc_hd, skb); } diff --git a/drivers/greybus/cpc/host.c b/drivers/greybus/cpc/host.c index 2c1b5d02ec2..225f9342cd2 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 97db70a53b0..4cda71994d8 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 @@ -86,3 +86,26 @@ void cpc_protocol_on_data(struct cpc_cport *cport, struc= t sk_buff *skb) greybus_data_rcvd(cport->cpc_hd->gb_hd, cport->id, skb->data, skb->len); } } + +static void __cpc_protocol_write_skb(struct cpc_cport *cport, struct sk_bu= ff *skb, u8 ack) +{ + cpc_protocol_prepare_header(skb, ack); + + cpc_hd_send_skb(cport->cpc_hd, skb); +} + +/* Write skbs at the head of holding queue */ +void __cpc_protocol_write_head(struct cpc_cport *cport) +{ + struct sk_buff *skb; + u8 ack; + + ack =3D cport->tcb.ack; + + /* For each SKB in the holding queue, clone it and pass it to lower layer= */ + while ((skb =3D skb_peek(&cport->holding_queue))) { + skb_unlink(skb, &cport->holding_queue); + + __cpc_protocol_write_skb(cport, skb, ack); + } +} --=20 2.52.0 From nobody Fri Feb 13 23:22:23 2026 Received: from mx0a-0024c301.pphosted.com (mx0a-0024c301.pphosted.com [148.163.149.154]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 88F9F168BD for ; Thu, 12 Feb 2026 15:14: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=1770909265; cv=fail; b=a9uxc0IlPKcub13TueEpuYvsrhLVRnhh87Ab/wVhRxF109al945TmASXTiC5P0L2KxubFoqyeCCs+okmD+ZeY8LYRFCmKk89RCn6Dr15AXuJmsuwoyWiP041qRRoy0GD+x6GpxSiZFhU+rVIx+7G4grFN/WsUDuN6WICddsm+bM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770909265; c=relaxed/simple; bh=A0ALFf9w/xS+3jyiQwFnAcCqvYTaCGS660QmMJ5OGyg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=XZaVNpPANIc0v1jAFcLCGhmd8vigWrnCcL9StLGVVlWbOz76EBEIEizm3nPmrGgHysPjg4xPGzfAKYFlb7X17pBpZbzYbCmQlO00H/bperfI/w2LNdjRdKBQmhXd47gYcHjkc8cZGISJ3TBB3eLQkQn+3BToYbxiQSAWck6ZCiM= 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=P2LdDjYR; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=CrhYdSKP; 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="P2LdDjYR"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="CrhYdSKP" 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 61C2Lwnl2678544; Thu, 12 Feb 2026 08:44:17 -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=oeQ6sfglfhAcPUY0AVDOdSw0Vg2TcVy6DfBadLJy0GM=; b=P2LdDjYRPxI9 R7gSzkEngs9LJVWvB0TZpxpAsS3LdmcPIxfyQac0iCwRmhzHMPHzQ1uHS1UUr0od 2tYBIQckRRQtqUduwbg/OhdojSOYT3fFvYVftjirJEnFl/t17jQyb8NcdH58n9oN 5MTaEMJtF7ZztErECSKD3Z7ShwjqvuJajX+6VzqTGZqFNRBchg6Erw7kfslAIrLZ fUtKDceZUp4UlndtLBdku973bm+UdzNWJX/cPCOj9bqFheG+ZfDTol1+3nvuRB4A RiLZ3ek40IDUWbTH5H76tnA6y308tuSPIMysEUkBSAh1sO1xP6vOaRTYxh+qSADA mr1Vz/8VPw== Received: from dm1pr04cu001.outbound.protection.outlook.com (mail-centralusazon11020096.outbound.protection.outlook.com [52.101.61.96]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4c92uysn4e-9 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 12 Feb 2026 08:44:17 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=pnLIVIi+lSptWMK5EkrVtv/uU5fY5JDJ8UNlZc0//l+xENICxlD0WpJUE+tmbO57APMW+FY/MyT8O4zD89kDy1FC2XHlRqP0SE/00wD89gbJNidDqs9CS42PO4+/saENObGbTAVZOTBNhTkSWFcWaR+6GpH0EH8elbvn783pGMMNrtA+J+W8RM2EdeqkDz0tIyKUJ/Q+78V1sTRxbanOrv/CHF6+eYkc6jiPJYQu31EPp/ebeiaBZ0KHs79cYv9GbFjKpwrRSUY6EZYmGWTfKGY+d0WnactfXbsXptibFNYzp1imyDtuGbTHbx9NRjJJOlQ9dqAnSpbQE7CLGcSuFQ== 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=oeQ6sfglfhAcPUY0AVDOdSw0Vg2TcVy6DfBadLJy0GM=; b=ekkMLUuJ/Hdj32zdB9aeDK4C4ZQ4p2j4DinhzE9qU44bOsdFszd4KG3+4usF+mi/VluH5lc1beS6uhpOJknJrQFZOQ5eIvVNYUA1DyJZ+Fl9/+VM0n919LIOzzkLbRUFLmMLB2tDi3Pj+meQ0JaOHixzLlA0orowWh2myfiQvi1wFbxK7tmxRPIcUoCvHU9rXkhDRT7HOr9Nsx4+jLvCs8QCETu+OEHih8PF2WE0O2pEG2y71Q8/0H0/VAs1qw36Fr7IuijD9LpEGuWVqTndfKuYc1KbED4Jw0AcmLbg2RkvsCPazZJMd51kDUoN2W9FysX7E7vA/D2s2lPQx28ZjQ== 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=oeQ6sfglfhAcPUY0AVDOdSw0Vg2TcVy6DfBadLJy0GM=; b=CrhYdSKPIwf9+rf10G/lriDzM0pRjR7nw+s2eTfIOSaASaiCAskB68vcyR2t6JICfTM4P17Gz11YBwuvgEIKxkAWICu2yZjDUXeBMJUl21WlDuOIVU5ufoW8fxXnEKax0fQxXmvLgb13qkLj8zSzQrSD7rb0+/4x8P5HiN22VqA= Received: from DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) by LV8PR11MB8486.namprd11.prod.outlook.com (2603:10b6:408:1e8::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.19; Thu, 12 Feb 2026 14:44:13 +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.9611.008; Thu, 12 Feb 2026 14:44:13 +0000 From: =?UTF-8?q?Damien=20Ri=C3=A9gel?= To: greybus-dev@lists.linaro.org, Johan Hovold , Alex Elder , Greg Kroah-Hartman , linux-kernel@vger.kernel.org Cc: Silicon Labs Kernel Team , =?UTF-8?q?Damien=20Ri=C3=A9gel?= Subject: [PATCH v3 11/14] greybus: cpc: honour remote's RX window Date: Thu, 12 Feb 2026 09:43:49 -0500 Message-ID: <20260212144352.93043-12-damien.riegel@silabs.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260212144352.93043-1-damien.riegel@silabs.com> References: <20260212144352.93043-1-damien.riegel@silabs.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: YQBPR0101CA0124.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:5::27) 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_|LV8PR11MB8486:EE_ X-MS-Office365-Filtering-Correlation-Id: 273dd1c0-8b7d-4c8f-2c99-08de6a4530c1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|52116014|376014|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?cDdwZ2JBQmo2K0dZSHc1T2o1b0UveFA4SnVrcGN1UjFCUngzNkFrb2VMM2hk?= =?utf-8?B?WVRkQy9DcmtMRktYSW9tOHpzaTZNNnpPSUVZeHRPSUZyYUx4eHJwY2RsWCty?= =?utf-8?B?V2trWk53cVhDZTA1UEJIdDZXNzdkQ3BWMlRnWHo3OHQ1aStiVmtOVUpjVHUr?= =?utf-8?B?c3cxQzRhRzVEMHBzNzhTYTJ6QThjUDZoSTdwSlpEQTQvb0E5L0EyZm5reDd1?= =?utf-8?B?eGtlekRPd2VmQWdkL05XZE5qNFFHTnh1ZTVMai9xRzV3NkI2YVBhR2ZpWkR6?= =?utf-8?B?TG1ZNXRRSUZDMjg4U09zWkpkOURMTU5ZeFBIT1R4RythZ0pJMnhBSC8xSGVk?= =?utf-8?B?RDJhZ0laU0Jua3VBa0VWckJUVHdjVzlPOTFDRldpN3gwYjZEbjJEaWFTL1V0?= =?utf-8?B?V0t4czZWRWdvNE9naVdqUE05VWdtSWZZRi9aaGhWY24yQmNhUzRLRDlWVFV1?= =?utf-8?B?YkdTVnoxTzN6WUU1anZRQzE4V3FJT24zQlRKUERJSzhQU0FhR1RpaWNidjFG?= =?utf-8?B?d1N1WGNtZzNBSDZ3OURJSEdrYnlEQzV0TGdFNHkvNnoycE13ZnpLL29FU1NN?= =?utf-8?B?Zk1lcnV5b3QyT0dSQTRqK0VjdmVxZjlVRkdlSmJNVDFPVmFLdXNYMk5yUEF1?= =?utf-8?B?L2tpVThLS0N5ZkkveXo1anJzNTBOL0U4MEVJUTR6UWhIZE8yTUdYbDRUNGxZ?= =?utf-8?B?c3RGbzNBWXpMdlNYaTZWeSszOXQwS1FQQU5yQk9GRlhMYVdyWXR1cS9QcVpq?= =?utf-8?B?UXA5b1gvdDJXd1c0SEs1Um5mSnpONTBNczAzZTgyMXJaR2ZMdTI5MmRURlFM?= =?utf-8?B?b0NMSWM5OW1Qb1lpMStxUHBzR0d6bkRTTWF1UXpCdnZBdnVGTWNDUWdURnEv?= =?utf-8?B?dlVTdEhhcU9PNUVrQlhlVHNmREZLMVBRKzV5a1Y0cjFCZWF1RUdYRFdTKzZD?= =?utf-8?B?ejNndFoyam05a2xsUC9LYUpuWXI5M2tIMU56bWxGdTlKbFNCZzlSdFN5a01Q?= =?utf-8?B?cjhEeDkwMGk5QlFZVFJXTlFnbFppb1pvVDhoNUNQSSt4L3NHb0JaZDF2OG41?= =?utf-8?B?OFFpeHJDNGprc01xTGlsdXJoczNPRjhEZk1sUVZJWU5SOGJsY2dYbjJCOEZt?= =?utf-8?B?ZnJwSTdaQUFHQjIwallaNS9Yb1dTY0xZRGhFUVZON3RubHdzS3BSUWRzaDdH?= =?utf-8?B?OENKOGMveEN0K2ViK3RaTXFpdnNteGtrNWk4aEwrSlJIVnlQaXd4NG8xeTVJ?= =?utf-8?B?REp4T2tYdFdpZ2tCYjd2aUJqMXl1NmlyNW9rYUd4SXE4TlI5c0ZCcldacEZu?= =?utf-8?B?ZjBOdHF3YzhkaENnakVDcjQ2Sm1wb0gvMVM3S2pyMFJMWVNEalBIaU9NTkxl?= =?utf-8?B?WlJJWjlGTm40VEZwa1lxWlI1a2orVkRrUktPSG9nQS81TC9leVlPY3U3OW4r?= =?utf-8?B?K0RleVIxdVdGYjAxMnc1bHJJamtpNTNSV2pQbnk2VnZpa1l6eDN2WDVTN0J3?= =?utf-8?B?MFBRVGQrV0ZZSHlUcm5tVVJEYlE1SzhOd1RQcWJIL3BRdVJldkJ0am05UmdG?= =?utf-8?B?VHVrbkhPMjVCRzVaQ2p1ZWFXRHl0Q25vZGphOUp4SWYwQjFPWC9yejVHa0Yz?= =?utf-8?B?dHl6eG5vUGgxVG10MzhFWk9UTC81MWxwM3JYWmp0bWU0UlZTMWJUVXFYVW8w?= =?utf-8?B?bVg2Tkt3aXNaK3RSQWtaSm9OMXVWUTM0QVphc3Y3dlJsR0pUZ1FOelVJeVVo?= =?utf-8?B?djhqd3hnamQxTk0yajd4dUczMUd3dkVNWUZGcFJYRUc1eHdlMlBrQS9EdEk4?= =?utf-8?B?QmQ3S3hHVDFXYWJYL1QwVkxTMUkvME5JYWNkcU03c05FUFlWZERYZEw3Q2J3?= =?utf-8?B?RXZXVFl1WFQ5SFpRZytnN0E5WFVHZ0RrRUlvc0w3VC9zNFk0WkR4MVdaUnN3?= =?utf-8?B?LzJHZldleTZIaG5VRkcyZE5JYzFBbWVYVXVQamE5eVJqbWx4am82eU5ETCtl?= =?utf-8?B?SkwzYnR5N3dLUThPZ2RzYzUzbG91bUYzeW9nT1Vxb29UTVNha21lcERpSVYv?= =?utf-8?B?ZjROdnFFeC81WkYwT05QWVNRbDhpUlc0bGJidk14Z1ZZekgwaThJMDByRFhr?= =?utf-8?B?TlcxSWVZd281NW5tMDdNSjQyTUFyTGVndDhFeDRKMGt4R0c5a1Q1WmxsUWZO?= =?utf-8?Q?MuuqtfusMR2b49EG1x0Opew=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR11MB8205.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(52116014)(376014)(1800799024)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?dnZnUC9CcjV3bG9nNTI3VmFrNCtJUVlNVzdGQ2MvNlQvOVY0bnJ3Zllib1lD?= =?utf-8?B?WW5Oa1hWMEZFYmtiRWxvNXFQeHJQNDBsS2MvRFFrUUJVWW9wcnhOYW5rQ3pP?= =?utf-8?B?bUVPSXZwYTd4WW9qdTBGcDRXcVE0Q2RFOGh4c2Z4TzRPbGVpWWllMDhqV1Vx?= =?utf-8?B?M25OajdSSjRjS01paGZRUDJORVk1bWJCaEpoVThXbmFkUVU1d0EzRWRJcU9t?= =?utf-8?B?Z3BtVDhkZVZ5UVZ5ajVlZjNZcllCUUJXYVhUUmkzODk3R2RKR0xTSDZLeFJC?= =?utf-8?B?d05qSmpOVTZkZnVpWDJId2JCTDRCdnRWdmk1V0FuWjVsRDZqOUhjbmViQ2J2?= =?utf-8?B?SzNhWjFFR1IvVXBrRG1ON1Vlc1FUd2JjN05QdG5sa1FGKzNiUGw1ai9lUmE5?= =?utf-8?B?MGEvc1YzZlZTTVJ6QmVVRXVybllqODd3Rk5RRkRGWFkzOHQ3RjhtTXpySm53?= =?utf-8?B?WUZpSlZBcWx4Zm5Uem93OUp0SEIrbWhwRUg1M1pGTFQ5eEhIMThzYkZoSzZr?= =?utf-8?B?dDRKK0xNNHBwSndxVTZoVk9mSXlPOW9hQnRXOG1hWldPMEw1dEx5dDAyS1lB?= =?utf-8?B?WWc5TVNsSC8vVlNLUGZSaVJRZmFWbFBMbGd3TEVzU0kwQ0swL0t0dWhrVGY0?= =?utf-8?B?aGpaVnFDWWc3ZC9tRnE4WEkzZ3JhVlZNbk53VTU1V0VjeWpCVU9DcVNZRGxI?= =?utf-8?B?UURYZ3h6ZFJrMElIbDFtdXp4VThhQUIyMkN2TkV4SWRRV0VFTm1SKzNvekRU?= =?utf-8?B?WGpqdVphWXdyUUZhajN1Q05Rd1JXckNrZUNWUmdyMUdZS3lZc2RLb0R4SkNl?= =?utf-8?B?SjV2T1FLTUdFeGZsYTdmcG5SMUkySlpoY0ZxSEQ5bS8vWFZ4Wk1CN1pGK1hi?= =?utf-8?B?V3VPY1ltbGg1S2c5WGs2a213U0RidEErRUFpME5WQWJCVWNERTBCb0hmTmFM?= =?utf-8?B?blczS1k3Z1h1Lzk4MWFFMlJEcG1wem1YRjBCQ1JGN2dlemRlUXc0bEhxNkRO?= =?utf-8?B?ZE53dDFXWDB5ODhGdUo4YjFTV1dBLzRvOXdEZnI1QmxGR0JyRmM2Y2dtcFhV?= =?utf-8?B?c0poc3hDK2kzQ1FmZGRvMlBXQm9GYnBXOEVCTDNlc2ROWDNxd0JHMlU1ZEt4?= =?utf-8?B?a1Z5bmJaQkc3OVhsdWRoMS8vWXhTOExUdFd1ekZpbXJ2TUhKMGdCWCthUVhq?= =?utf-8?B?Yzl6K3FoTis1RFZBeWlLbWNZb3RDcHhGWXFGejlQMUpLZ0x5eEVjcktCYXQr?= =?utf-8?B?WWdid1FJQTlId1diVTNPaVFLajkzS05ISGRQZVFwcGEvMXcrSk41S0FRSmtH?= =?utf-8?B?YXhMN2lKb0dscUR6RTJhbDhsNXdCNjhuVldzaVpHOUdhZS9Dd0YrZGpCZTV5?= =?utf-8?B?cU0xeWQranVONXR2U0treS81dE9MdEoyMGR5S2FQMklEd0FwMkRiL3MwTmJQ?= =?utf-8?B?KzVtYUs0b2NOKzk2T3F2b0kvNVJXcm9yZkx1eVpITkVtTXJjQWV6ckxUSm1v?= =?utf-8?B?ZzZobXFQYm0zY0JBODBYMkJJVGV5R1RSd21ieERaTGNKcThyQmJWUFRhNStC?= =?utf-8?B?WEpsbVh2SjJuT2J5U3R4aFdUWStoUnFNVnBSUTIxSVFRemcrQjdlc1Y2cmZP?= =?utf-8?B?TkVRd1lGdFRMVFg1b3RENE1uWnlQaDVDTWhycGd4OUxMZGxTdnlrb00xUFBv?= =?utf-8?B?YWUwcjlFOEhSNW1sTmJucm9SMCtHUzRSN0prVVJjUFFQQ3FHZFlicndGaVdx?= =?utf-8?B?YzBoRitLS3IzQVFHNjRnbi96cXptTG9Gcnp3OWkyS3Q0eVZUaThKSStWR0k0?= =?utf-8?B?VDVaclhxOE44M1ZmUHJxTVpGTDBDUXBNQmRwalVMZTM3S3ZSemV5ZGE4ZjdL?= =?utf-8?B?UnJrTlA4SUUyVnA0L0FoR3pPd1p3cnJHL0ZzWEtnYnNLbTRsU1ptTnYyYW9z?= =?utf-8?B?VzlnZlpUY2c4cTNOL1FCRWF3MTROL2JWUnhLTlE3dUhYM0ZjUVRwNmV5bzJ3?= =?utf-8?B?RUhYZ3QzSU9WM3A2N2V2MzNLaEkxTmQxekhrTGo4WGtYV3hyeGdZdmtUb3FW?= =?utf-8?B?em9OaWxISXQ3dGRmYUFYWEE1bjJpa1ZBRnVVbVE5WWpRZStWT1NjR3VLSVlO?= =?utf-8?B?eFVxVXBBSG9CeG5uZDkxMGN5aHdGOXoyQ3NuYXVLUnFYb2xud2VNRDNDQXc5?= =?utf-8?B?MVdET0p4ZnhrczVkOGdjaG16dUdPTFJlbGdnaXJtSk5qaWZQdFptNjR2SklO?= =?utf-8?B?TzlpdE91VTZGVmd1YXVjVDZaaVh3VEdvTGFWZEE0OHNRblQ1MG5HdHNrUmlQ?= =?utf-8?B?SlpyNTdaa3NOaG1paUt0L1hPV2RKOHpuUVdhSW00NkpyQnN4U3R3QT09?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 273dd1c0-8b7d-4c8f-2c99-08de6a4530c1 X-MS-Exchange-CrossTenant-AuthSource: DS0PR11MB8205.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Feb 2026 14:44:13.8545 (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: xyfcMoS9Ho8kd3eTncAkqojCitfSQ4btnSiXM3zsRm9CnO07VDq1IuHFGwBvO7li2ZcW3iCpvvGnGZf0rPYhLQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV8PR11MB8486 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjEyMDExMSBTYWx0ZWRfX+SJu4ZdQbZY+ AeaVEZVQCeR/F0i5hs/rnyp4GMYOdkFfuPKqUFSD62cH4jxtCoOx6s4yw968ik3IDLoyGgtLq60 xez/jW+ou4XkURaa09tDzSVDPc1WJIr4gkL6xFdiUKbt2ACe/02E73zEx4oMwoo8asB40FnZJYf 1PO6+Plif0VHTGTi4dXLO3R7lD/SgbQgJ1aqDlER8jM4GHwISTCthCzuleyFUvSfM+l7buUQwlM 0AdpTQnrSaBxMX8ITljvniT4PIzYLzNGIDYaqIb1qALeddppI/XSfSsrkhLm9hRvnqFxcJzYipI 4s9/JD2PbUT5p/g3NuR2OVR3CrxsjJD43klPa29E5zM031hH5Y/G1DvR3oGsW4j9ArCa8J1ki4c hWjtHmcQYjMTO7k709MEcgPbDguChIZffS/h+jCgpzzlMdKo4oBKEYIHsiG/Oc9KEZ+1HgV9h9U nwD9jIlS1nfTr3REELQ== X-Authority-Analysis: v=2.4 cv=DtRbOW/+ c=1 sm=1 tr=0 ts=698de741 cx=c_pps a=TvliyZNEFSK35vtP2Nadqg==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=M51BFTxLslgA:10 a=i1IsUcr2s-wA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=2AEO0YjSAAAA:8 a=LxIw55J96KH0fPlZK-gA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-ORIG-GUID: OrLQddinx1UC5zdKRf7lRg3GiGwEr_4n X-Proofpoint-GUID: OrLQddinx1UC5zdKRf7lRg3GiGwEr_4n X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-12_04,2026-02-12_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 suspectscore=0 spamscore=0 impostorscore=0 lowpriorityscore=0 bulkscore=0 clxscore=1015 malwarescore=0 adultscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602120111 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. SKBs used to be passed directly to the driver for transmission. Now SBKs still need to be passed to driver for transmission, but CPC also needs to keep track of them, to be able to trigger a retransmission if they are not acked in a timely manner. As SKBs cannot be in two lists at the same time, drivers now get cloned SKBs. Signed-off-by: Damien Ri=C3=A9gel --- Changes in v2: - fix documentation of cpc_header_number_in_window which documented a unexisting parameter `end` - simplify implementation of cpc_header_get_frames_acked_count drivers/greybus/cpc/cpc.h | 9 ++++ drivers/greybus/cpc/cport.c | 5 +++ drivers/greybus/cpc/header.c | 78 ++++++++++++++++++++++++++++++++++ drivers/greybus/cpc/header.h | 6 +++ drivers/greybus/cpc/host.c | 9 ---- drivers/greybus/cpc/host.h | 1 - drivers/greybus/cpc/protocol.c | 71 ++++++++++++++++++++++++++++--- 7 files changed, 163 insertions(+), 16 deletions(-) diff --git a/drivers/greybus/cpc/cpc.h b/drivers/greybus/cpc/cpc.h index f1669585c45..e8cbe916630 100644 --- a/drivers/greybus/cpc/cpc.h +++ b/drivers/greybus/cpc/cpc.h @@ -18,6 +18,7 @@ * @cpc_hd: pointer to the CPC host device this cport belongs to * @lock: mutex to synchronize accesses to tcb and other attributes * @holding_queue: list of frames queued to be sent + * @retx_queue: list of frames sent and waiting for acknowledgment * @tcb: Transmission Control Block */ struct cpc_cport { @@ -27,12 +28,20 @@ struct cpc_cport { struct mutex lock; /* Synchronize access to state variables */ =20 struct sk_buff_head holding_queue; + struct sk_buff_head retx_queue; =20 /* + * @send_wnd: send window, maximum number of frames that the remote can a= ccept. + * TX frames should have a sequence in the range [send_una; se= nd_una + send_wnd] + * @send_nxt: send next, the next sequence number that will be used for t= ransmission + * @send_una: send unacknowledged, the oldest unacknowledged sequence num= ber * @ack: current acknowledge number * @seq: current sequence number */ struct { + u8 send_wnd; + u8 send_nxt; + u8 send_una; u8 ack; u8 seq; } tcb; diff --git a/drivers/greybus/cpc/cport.c b/drivers/greybus/cpc/cport.c index 91c39856e22..c05d89709f0 100644 --- a/drivers/greybus/cpc/cport.c +++ b/drivers/greybus/cpc/cport.c @@ -16,6 +16,9 @@ static void cpc_cport_tcb_reset(struct cpc_cport *cport) { cport->tcb.ack =3D 0; cport->tcb.seq =3D 0; + cport->tcb.send_nxt =3D 0; + cport->tcb.send_una =3D 0; + cport->tcb.send_wnd =3D 1; } =20 /** @@ -38,12 +41,14 @@ struct cpc_cport *cpc_cport_alloc(u16 cport_id, gfp_t g= fp_mask) =20 mutex_init(&cport->lock); skb_queue_head_init(&cport->holding_queue); + skb_queue_head_init(&cport->retx_queue); =20 return cport; } =20 void cpc_cport_release(struct cpc_cport *cport) { + skb_queue_purge(&cport->retx_queue); skb_queue_purge(&cport->holding_queue); kfree(cport); } diff --git a/drivers/greybus/cpc/header.c b/drivers/greybus/cpc/header.c index 8875a6fed26..dfcd5581133 100644 --- a/drivers/greybus/cpc/header.c +++ b/drivers/greybus/cpc/header.c @@ -22,6 +22,17 @@ bool cpc_header_is_control(const struct cpc_header *hdr) return hdr->ctrl_flags & CPC_HEADER_CONTROL_IS_CONTROL_MASK; } =20 +/** + * cpc_header_get_recv_wnd() - Get the receive window. + * @hdr: CPC header. + * + * Return: Receive window. + */ +u8 cpc_header_get_recv_wnd(const struct cpc_header *hdr) +{ + return hdr->recv_wnd; +} + /** * cpc_header_get_seq() - Get the sequence number. * @hdr: CPC header. @@ -33,6 +44,17 @@ u8 cpc_header_get_seq(const struct cpc_header *hdr) return hdr->seq; } =20 +/** + * cpc_header_get_ack() - Get the acknowledge number. + * @hdr: CPC header. + * + * Return: Acknowledge number. + */ +u8 cpc_header_get_ack(const struct cpc_header *hdr) +{ + return hdr->ack; +} + /** * cpc_header_get_req_ack() - Get the request acknowledge frame flag. * @hdr: CPC header. @@ -56,3 +78,59 @@ u8 cpc_header_encode_ctrl_flags(bool control, bool req_a= ck) return FIELD_PREP(CPC_HEADER_CONTROL_IS_CONTROL_MASK, control) | FIELD_PREP(CPC_HEADER_CONTROL_REQ_ACK_MASK, req_ack); } + +/** + * cpc_header_get_frames_acked_count() - Get frames to be acknowledged. + * @seq: Current sequence number of the endpoint. + * @ack: Acknowledge number of the received frame. + * + * Return: Frames to be acknowledged. + */ +u8 cpc_header_get_frames_acked_count(u8 seq, u8 ack) +{ + return ack - seq; +} + +/** + * cpc_header_number_in_window() - Test if a number is within a window. + * @start: Start of the window. + * @wnd: Window size. + * @n: Number to be tested. + * + * Given the start of the window and its size, test if the number is + * in the range [start; start + wnd). + * + * @return True if start <=3D n <=3D start + wnd - 1 (modulo 256), otherwi= se false. + */ +bool cpc_header_number_in_window(u8 start, u8 wnd, u8 n) +{ + u8 end; + + if (wnd =3D=3D 0) + return false; + + end =3D start + wnd - 1; + + return cpc_header_number_in_range(start, end, n); +} + +/** + * cpc_header_number_in_range() - Test if a number is between start and en= d (included). + * @start: Lowest limit. + * @end: Highest limit inclusively. + * @n: Number to be tested. + * + * @return True if start <=3D n <=3D end (modulo 256), otherwise false. + */ +bool cpc_header_number_in_range(u8 start, u8 end, u8 n) +{ + if (end >=3D start) { + if (n < start || n > end) + return false; + } else { + if (n > end && n < start) + return false; + } + + return true; +} diff --git a/drivers/greybus/cpc/header.h b/drivers/greybus/cpc/header.h index 19612012b19..906bf45660d 100644 --- a/drivers/greybus/cpc/header.h +++ b/drivers/greybus/cpc/header.h @@ -39,8 +39,14 @@ struct cpc_header { } __packed; =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 225f9342cd2..9a0f8158504 100644 --- a/drivers/greybus/cpc/host.c +++ b/drivers/greybus/cpc/host.c @@ -205,15 +205,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 4cda71994d8..4afaf0eb95f 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 @@ -24,6 +24,7 @@ static void cpc_protocol_prepare_header(struct sk_buff *s= kb, u8 ack) memset(hdr, 0, sizeof(*hdr)); =20 hdr->ack =3D ack; + 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)); @@ -47,11 +48,47 @@ static void cpc_protocol_queue_ack(struct cpc_cport *cp= ort, u8 ack) gb_hdr->size =3D cpu_to_le16(sizeof(*gb_hdr)); cpc_cport_pack(gb_hdr, cport->id); =20 - cpc_protocol_prepare_header(skb, ack); + cpc_protocol_prepare_header(skb, ack, CPC_HEADER_MAX_RX_WINDOW); =20 cpc_hd_send_skb(cport->cpc_hd, skb); } =20 +static void __cpc_protocol_receive_ack(struct cpc_cport *cport, u8 recv_wn= d, u8 ack) +{ + struct gb_host_device *gb_hd =3D cport->cpc_hd->gb_hd; + struct sk_buff *skb; + u8 acked_frames; + + cport->tcb.send_wnd =3D recv_wnd; + + skb =3D skb_peek(&cport->retx_queue); + if (!skb) + return; + + /* Return if no frame to ACK. */ + if (!cpc_header_number_in_range(cport->tcb.send_una, cport->tcb.send_nxt,= ack)) + return; + + /* Calculate how many frames will be ACK'd. */ + acked_frames =3D cpc_header_get_frames_acked_count(CPC_SKB_CB(skb)->seq, = ack); + + for (u8 i =3D 0; i < acked_frames; i++) { + skb =3D skb_dequeue(&cport->retx_queue); + if (!skb) { + dev_err_ratelimited(cpc_hd_dev(cport->cpc_hd), + "pending ack queue shorter than expected"); + break; + } + + if (CPC_SKB_CB(skb)->gb_message) + greybus_message_sent(gb_hd, CPC_SKB_CB(skb)->gb_message, 0); + + kfree_skb(skb); + + cport->tcb.send_una++; + } +} + void cpc_protocol_on_data(struct cpc_cport *cport, struct sk_buff *skb) { struct cpc_header *cpc_hdr =3D (struct cpc_header *)skb->data; @@ -62,6 +99,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) @@ -74,6 +114,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 = */ @@ -87,9 +129,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); } @@ -98,14 +141,30 @@ static void __cpc_protocol_write_skb(struct cpc_cport = *cport, struct sk_buff *sk void __cpc_protocol_write_head(struct cpc_cport *cport) { struct sk_buff *skb; - u8 ack; + u8 ack, send_una, send_wnd; =20 ack =3D cport->tcb.ack; + send_una =3D cport->tcb.send_una; + send_wnd =3D cport->tcb.send_wnd; =20 /* For each SKB in the holding queue, clone it and pass it to lower layer= */ while ((skb =3D skb_peek(&cport->holding_queue))) { + struct sk_buff *out_skb; + + /* Skip this skb if it must be acked but the remote has no room for it. = */ + if (!cpc_header_number_in_window(send_una, send_wnd, CPC_SKB_CB(skb)->se= q)) + break; + + /* Clone and send out the skb */ + out_skb =3D skb_clone(skb, GFP_KERNEL); + if (!out_skb) + return; + skb_unlink(skb, &cport->holding_queue); =20 - __cpc_protocol_write_skb(cport, skb, ack); + __cpc_protocol_write_skb(cport, out_skb, ack, CPC_HEADER_MAX_RX_WINDOW); + + cport->tcb.send_nxt++; + skb_queue_tail(&cport->retx_queue, skb); } } --=20 2.52.0 From nobody Fri Feb 13 23:22:23 2026 Received: from mx0a-0024c301.pphosted.com (mx0a-0024c301.pphosted.com [148.163.149.154]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D6907DF6C for ; Thu, 12 Feb 2026 15:01: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=1770908478; cv=fail; b=PQdHpNgau9pZEkgjDYQL0UzHTUYYAHeMTWZRuIEVvTgBrTtA0766P4H74cIw86O4ELu4t3xI2WzGnmrqDVKVewCGC9326MDhHpVeeRW3LFnrVbbTHI1GG6EYVT9+r1UI5v54ktIMM3fEb7HOUiGUIj1+0E0BmMVhmvvy1SNJf6A= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770908478; c=relaxed/simple; bh=KHvt9WzXSlin5sBJv7ncygfyGEHPLdYJ0NeVUFpEuqI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=GoNC3ECCreAbMmG6Z06ZRp1vFuVD5LkuBgPkeEGuOsLWifZlvx1vGoSHVylQ0lX7cPDUtlC1bondfmxLJKFnkkfsfpCarz5yaFH2Y6Mocr+p4r6clIPDSXkOJkEzS8KwnMsMQ29aloGwpbllTABaUYqOaJtP3YMmbqKMzDF2iWc= 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=nGYYa+TU; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=DcGU+z9X; 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="nGYYa+TU"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="DcGU+z9X" 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 61C2Lwnm2678544; Thu, 12 Feb 2026 08:44:18 -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=NaJwkLGtOYJ2MaqZlMoAC38zRqSqD/20L8Jxt3YupcY=; b=nGYYa+TUnJ3W Xf3+zxaduzrgej0t/OaXb2/IIcLKKDb/kKaGrDNZtCNLwl/IdzJ4MoNpDRLlLx2c 5A/bLVOqEfOZfV0IKhVPDK6G+07vR3Us73k/Wvje4WpnzvmBQ6iKlk63L3UMw5eX xMhlJFY1lmWJcB5J4h+gBHPCPvmfIzmB1HBawsiz7fWMNA7ghyKCgGnp6XtTMY5Y MoBLnn67/33amz7IHk6ca3bEa8voK4q+PfgyF4cS/rM2IQnHP20rS2Sz4YwCGXjr NEaatz1eoqOdx/VM6iWTghUplute+L8HT3WxwJVgomLD29eGko2JUCwB6YCCompC nCm5wxkFlA== Received: from dm1pr04cu001.outbound.protection.outlook.com (mail-centralusazon11020096.outbound.protection.outlook.com [52.101.61.96]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4c92uysn4e-10 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 12 Feb 2026 08:44:17 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=I8duuW/kqerCdjlGtH+rLCftvFdiFTlzUOILJ9j7keJuZ8/5w/TETl1QwPuEZCfN9Xr29NmWrkPyhuXG4/XhIzpJ1BqrSEiNJ6dpI8Y4eAcylJa6CJZ0UvCftqGkVAlwchJM4u7zcLgFBrl4k6S6X946c4SS/vgNQNoQ/gG9zl062IL3omLlFvObjkTgxDX8Ba35U8PmEsUdmeyQPwIVNlYtxkDNkOPWz0KDNNuCxhFxD6hqRCq8R0+LhlGG50ovRJr6814PEW44LuICMUPys6d6uz9uoroLg/UKWagKP1fekdvwOMb4go0cVa8CLPH1Mnhxy9zg/adLDIK3wie1MQ== 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=NaJwkLGtOYJ2MaqZlMoAC38zRqSqD/20L8Jxt3YupcY=; b=TAJlS7oxJa+D9tDkC0r6XGs8Udl5vDIzFZRWFFilk1lAU/cI3C5pfGwzSsXzfwtvhLrqNDtvl1UxprD4KVoNaAN+rkIhnH/AnAxH+G1veuK6z+BOB9LvXam+zQ9i32YTrbjtsncVxxQzhBqJY8ftmMkHYPemcAzKcKWG+zgB7O+dcQKW+KciFXlcjU+ErN/3QZfU15eacZKURH0LYRX+ibDvFBzwCiqaUFy4yhP7tAXaSGD7pMAUyi1XY2GOg/pG8gRv3zNqdJUhgOV8L+E0ZB0MRBOYeh3EC24FpkG1quuB+tblZUKcJN9rrJdnW1g07wcIaCajWGTX79RUzvlFlA== 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=NaJwkLGtOYJ2MaqZlMoAC38zRqSqD/20L8Jxt3YupcY=; b=DcGU+z9XjY39M2q+c7FMSKFP9uRJe70kkJnotHxuFSirEHZHIXntlnh8s0dliWjH4sWfhRVYwaV+pFLruVEV+jFaZSiVgVMe2wAritR3q+048gvQVSeJ6y3tTtVD9eLt9IXItwYLPY1BBF4TvA3UZ2M0H5AJexzL5VnmygQXQOI= Received: from DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) by LV8PR11MB8486.namprd11.prod.outlook.com (2603:10b6:408:1e8::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.19; Thu, 12 Feb 2026 14:44:14 +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.9611.008; Thu, 12 Feb 2026 14:44:14 +0000 From: =?UTF-8?q?Damien=20Ri=C3=A9gel?= To: greybus-dev@lists.linaro.org, Johan Hovold , Alex Elder , Greg Kroah-Hartman , linux-kernel@vger.kernel.org Cc: Silicon Labs Kernel Team , =?UTF-8?q?Damien=20Ri=C3=A9gel?= Subject: [PATCH v3 12/14] greybus: cpc: let host device drivers dequeue TX frames Date: Thu, 12 Feb 2026 09:43:50 -0500 Message-ID: <20260212144352.93043-13-damien.riegel@silabs.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260212144352.93043-1-damien.riegel@silabs.com> References: <20260212144352.93043-1-damien.riegel@silabs.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: YQBPR0101CA0124.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:5::27) 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_|LV8PR11MB8486:EE_ X-MS-Office365-Filtering-Correlation-Id: 3bd19228-e855-4687-786d-08de6a453153 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|52116014|376014|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?cTI5d2ErQnBsSHRlNlFheDJmcS9rQ1lmMFpPMUhpODhVdmFmVzl5OGNpMnpp?= =?utf-8?B?QmYzeGVMU3dTUkJGYWp2OWN2dHVMUUtlYVY1Zno3aVdmU05Ia3VpKy9hVnZO?= =?utf-8?B?T0VVVHhWR0JaNC9ZZ0lhdlVrWWVEZklHcVUrZjJOTXliWjZIeUF4WnMxcHZ3?= =?utf-8?B?M3BwWWpuSURkdHJnM3c2bnJ2TFVJK0hOa21jVUVUOVE0eXgxQ2xCTWR4WkNZ?= =?utf-8?B?b2RWSGgwZlNWR3UzNUNncytzQWZyeDlhSFpTQkRRdXplZU5lTXQ1TjdQWndL?= =?utf-8?B?bzJoa0VlNVY2ZHBiK3JEL1liS2pKZitBOHdwbWNtQlZLajhtUnlsR3d0d3dn?= =?utf-8?B?YmZsZzhyc01veU4yOGRZUUtnZ1VpNUJuK21NMTVZcU9mcDByUFlZTjNkblRY?= =?utf-8?B?Ni9QTWxzS3hXWWE0d0dacE1ldHFCcW1iczJkN3MvbWpLWUtHTGhnbUZJREhl?= =?utf-8?B?a1c2QVA1VjRZSGNnUEhGZ0hPci81bVVVam1YK004SGNuMExzZmJQQmhYbUJR?= =?utf-8?B?VWZpMmxBU0Y4U1M5UEdHMy9UcWJ0bmNLMzV4QmlqaGVUKytCamdIR0YwUmY5?= =?utf-8?B?R3l6am5WbEFWcVF6OXorWlI1VnNzQWdtdCt5dURzWEkrSEVURmZoNVBUN1B3?= =?utf-8?B?bElZYU5OKytiWm5uUE50RitwZVdBOTE2M0lnOFdraGExYTVzZ3NENXYwYVpG?= =?utf-8?B?NlFqQ0EvRy8ybFpVZ0EvU01TWFpsQzRvWDFCYjlxVzRWMzB2My8rd3lKLy9D?= =?utf-8?B?ckxsYVRKQTE2MFNNOThTVWdnamJpMEtlM1UvdDBwWGw5MU80SEx5SWptUDZ0?= =?utf-8?B?MFoya1lCUFRUaVhrdGh6SXpnTWFSb1ZVdm1kRkozUzh6TnlPa0NVcmwvTkQ4?= =?utf-8?B?QVF6SnpQQU5WVTIzKzdkaVRaZmNiU3BVTVg2cU9XQmt1UEZ6N1BzQzNyQTVp?= =?utf-8?B?VHYyT2k3NXliNFhXSWJZTStGVGs1TUhYQWlZN3Qva3BRci9lOWtKaTFUZWRt?= =?utf-8?B?eDVJKzlGZ0tyZGlSOWh1UG81YVdKRExkbjR3eFRDRHlHTzV4RDRnS2wxZno0?= =?utf-8?B?aTREOWNuY1RkTEttTFdSMjU4KzJmQzdzMHBpakd2NzM5R3VpWTlncnBZeU1M?= =?utf-8?B?bS9YU0pIbVVRWEdIV2JWdCt0dkZDbGI1bnY2Zlo4LzBvN204d1BIY3JtTkw3?= =?utf-8?B?em1VZkh2SktkdCsrQTNGdU9xM2JNeGRjTHdZbVRyYWhXbVFKV3lGaDh5VXk4?= =?utf-8?B?TTE0OTR5cnBsSUYzL1UySTFzdFE2emlBdGc0bWdOeFRrdU9DTndoMEo2eWpK?= =?utf-8?B?YW05NktwREM4cXpjUHNLQVlDOS83aXM2Z3NMSkZsaWQ3RjZ4clBwUHJGSWN6?= =?utf-8?B?MHdjeXB0a29ieG1hNmVsUUY2MUZQQ0FIQkNHN3Nsczd2eHhWVWpHU214WmdW?= =?utf-8?B?d21teE10ODlHZmtNKy94NGw0V0R6Z1FQOXVOSkxLNlBnYWJsN2VUZFZER3RS?= =?utf-8?B?Y29KSXUxWmlLNVlUZjlPdjNMUUVHV2txbjFEbTVueDBsTVJZbEpYTU0yK25M?= =?utf-8?B?alZQSjBJQzA3b0d3VGVBc0pzQmZwVm93TTZJeWR3aXhkZFduTXNjOElibnNk?= =?utf-8?B?MU1QRlRpM21lMFBlK0JqZU5ZY2pDcjhKV3hRbG03M3VTWllvWEJ1RC9FTkVr?= =?utf-8?B?ZDIwbmlPRFhYNnMyUzRScG9ZOWlkOVcwQXlNYXFQd0FrME5nVkJSRWgzM1A4?= =?utf-8?B?S1VRVURVSENnamNiSVBMMjFkWVUrNjdhUklhUGd3SVV2bGxaaWVEbXRHZDNT?= =?utf-8?B?VUhtUXQ4bythcjVWSzlrOElONlIxOG8zWjJzY0FBbU05d09GSkpWY3I5aHMv?= =?utf-8?B?Q0cwWWlnQmJYYUZFejhoYVBKcEVOWU5RQklvV1NvcGhWMHhMdUFvS3REcFdL?= =?utf-8?B?NzA1d1dtbmJLS1kzMXNBZmkwV1JtTmxsT2FoK0NsMmI5Zzh6K1VZY3lxWVRX?= =?utf-8?B?U3VEcy9sbkQwL3VDVE10RE9hZUlWbDk1eXl3MnFWOGZpNHgwTUFGYTA2UnF3?= =?utf-8?B?U1RUOVpvVk5LQ3IvenFhSXB2VHk2cElCaHBPU01rYmNKaHc3bmFzQmlKUVJo?= =?utf-8?B?MEJHMEFLRDlULzcrSTlxdXZ0dnlLd3RIYnVTM0NidVUzbG1jYkFyM3A5bzRL?= =?utf-8?Q?BxbT72sYqvPBgDXd3/ueBPU=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR11MB8205.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(52116014)(376014)(1800799024)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?UVFlWVJuWDF5UkFvZG56SVcxMkJJNVpzWmw5MVdlL3JCNDloNHVZM0lJakw1?= =?utf-8?B?SzkxMEtrQzArRFN4NGdJeDBkRmdHN2N6cnRHMWRMYjg5SG5lTmdpYmQ0bngr?= =?utf-8?B?eDFGRjZobW9qYktZekFLUGJZaDIxanRsd2hlOHA1K25IaWhnREh6UFZ1ZXQv?= =?utf-8?B?V0p3WXJJWE9CQW10YjdxZ2JMR3IyazZONDg2Y0EwTTk1eGNEb0hMeG1yampD?= =?utf-8?B?MUdzNUQyYy9QU3NYbzA2L3o4dW9wM24rNEhLamlkbVJKOGFtelNXdkVvdExn?= =?utf-8?B?VmQvdXJteHpqeHEvQWFXZ0Y3Y3NGcWE1UlVxOFdsZjJwSkExV1hmUkdQNHJX?= =?utf-8?B?N3d6M3E4enh6ajNmYjlIK2RqTzVjaFhsdnU3dW9WQm41bDdNZFF2aUNHTENh?= =?utf-8?B?VStBQkVJTXNHaDI3QWsxRFRlb3JrQkZpN0NONnFmQjBabnF2WkZuSHFwenJJ?= =?utf-8?B?ZHdTa1pYZkdKcnc4NHF3ckE5NjJSbmpqMFBsZnJzVFBUVGVMRkRwc2p2VWFC?= =?utf-8?B?K0lIZTFMS3J1SHhhRS9sMExOcGx4UWRaZVhLN1lVZ2hMRXl0ZTVURlp0cElV?= =?utf-8?B?dFZqbUpCWk81bFoxakQxNHY0OHZIcnNyRElzRVhSV3h0aURiSDFJQ3E2bDFL?= =?utf-8?B?ZnI5aTJSSXBUOVJRNWJWRWxsNEN4UFhGSUdvNDByNzdNSmNwbER5SlhGYlhE?= =?utf-8?B?a0VnTjNMcnVoNVYvUlZxSHRZay9MREhueFFiL1phd1crb3VzMDBoV3VRcFRK?= =?utf-8?B?TmxDZzYwdmFhc0JMVU8rVnc2MEZKekJjckR1QzMyY2VxRnpVTU8reHpZRDVP?= =?utf-8?B?WFN5bEUwQVhjemdiZEM2RVpVSEtzV05jVE4wdklxb1hBV3M3bDlUN2NzVkVV?= =?utf-8?B?NXBGYXZTMUovbkN1R3pkWHBUNndPcWtpNGZHNk01cmV5VkFMVVNCMlAwVCs3?= =?utf-8?B?Tnhvc1B4Wk56OC9QajRONG9XRjlDalVGdkxIWWkzU3RLVWlqOXE0emgxOWtX?= =?utf-8?B?YUxoVlpQTkdkMHZwM0NHb215eWtZcXJwdlNLbnV0OGI4eE4zRGt2QWw1ODBG?= =?utf-8?B?ZEtkc1RRa3Z4UVRzcWZMSkxIbFcveE95Z2Zxc0lIcHBMVGJqeUtuSzk4eWs1?= =?utf-8?B?ellwUEFoM3dqQ1RWWkRNQkJ0YmJNNldxa2NXZHJub21BWGQrQnhWdUU4U09p?= =?utf-8?B?U0gwYmNPMEkybUt3TDlIVCt0K0xWZkF3dmxnTGo5bExLUVV0MzlWVnhEVnJB?= =?utf-8?B?MjlRTlFvMFFxZUErai8ybCtWdzB5WkpkbmV2UGM2cDhDSnNUdlpvbTRDdWFh?= =?utf-8?B?cHVibnJDR21FQTM1Z0Q0RGpBNGdFNlMvTEswNXFJMlpQajFtMmwrTkQ5bUYy?= =?utf-8?B?VHQ0ZVFjRS9wUjBWR25KNzFIVDYwcDkrZDN1WGxlaEZiSkpNMUJobHBlTnpT?= =?utf-8?B?ck1uaEVQUlNOaEV4L2tXV3EydWU2dTNRZlBQU1UvN0t6ZEN0QjV0U0c2Zk9m?= =?utf-8?B?a3JWMWtybWFwOThXS1pwd1NIZlpRTFR1dU01QllqU1FOUktoYnRKT0JiZURr?= =?utf-8?B?cWd1Mi9nY3l3ZGpHaUttSWVsOGdNMHFCamdjQXlhQ25nQnllZ3RGSHhPVXl1?= =?utf-8?B?TVlva1d2V0ZMQnBHTDdyMUFMVENEdjV1M1FLMU4rUTRGdXUwcjNMOVZUdXR6?= =?utf-8?B?UW5DSlRYOVhFVTMvSnUzckdDWlluRkUvdmNjOENJWHdoU2JjZzUxbUk0em5C?= =?utf-8?B?RXhqZjIzMXMyUDIwbm9TaE92Y2dwVG5GcWpBMFdNdHBvdTVNZDhkY2ZKZEpI?= =?utf-8?B?NXNIS1FUQ0lyNFVNV3dNWDc5U1pJUXBUakhlZytzNHRCL28vZkZ1SGR4MEZt?= =?utf-8?B?SlpPenQ3TGdxeVAvVXZKM0pIc1g5R0dLeUJaQkE2bUlOck5OUGIvQmwwbEl3?= =?utf-8?B?dWgzL3JWd215bksxeGprcW5BeXd1STViR3h3UzRYOGkrUnBVdTV1Ynp6V1Qr?= =?utf-8?B?RWovTGlYMW9nNHJMSE41S2M2QlZSY1RWTU1ZeS81YlJuS0FxL2tYaS82MkhC?= =?utf-8?B?bnJ1dFp0RkEzdXRUaXdFOGhGTWNpWTdwRlJaMUhPelphTVF4bUZnMkNDSHdE?= =?utf-8?B?VTd4T1JhaFlyTWwvc1FIVG9DaFYyaHlUVHAvdVI0SmV1TjVPMWsvMEhUUXpt?= =?utf-8?B?SUMvWTROaWR1VEljN2czbSs1YTQxeHZHVjdNY0FydjlXT1ErM2RWS0tOQnZn?= =?utf-8?B?TDRlZFA0Wm9aNXdpVlZmSUZLV256SHd5RU1la01lMXlKWC9VYnc4S0piZ0Uy?= =?utf-8?B?dDZhVk5QU0VJTHdHRWNqUVlJWWhheWY4c2hrcVJFNXZxRmI0cTlLQT09?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3bd19228-e855-4687-786d-08de6a453153 X-MS-Exchange-CrossTenant-AuthSource: DS0PR11MB8205.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Feb 2026 14:44:14.7437 (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: zriK+FjcI7ET43S+krwnGnxfntqh36YQ6AqehBhmjB6VTqfEFTvBZTnjRoib3O1gESVoXiGAunAl9hwdxnmECA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV8PR11MB8486 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjEyMDExMSBTYWx0ZWRfXxWF5Q6yU1tUY 0GbW33vNMbGWo15D9qV7mz2l16yhLaauz1tM8ZoLP1jLomyk+aX9gzPq/iuwOstmyfb6dTO2CKM Ob84Jp80k0eMr4jTpNXRCLoxNUY9B7kuqDDNE+rKkXMVt4YJAm2rglMcFV5y+jHgI6rQKWGCnbA qwpP/mRYye691N9avXhfYUnfKOwPd8HPJEMFaMupft7uZJvhjFIXhAFE9RddHx31PbhBzAtza/b dnnrzSZZc11p1GxS2V2SVQvL1yItwtF3l8oK0QrA+OX4U5qyqA2Wv57qh1BAnG3VwAq8acd6IlS +u4ED4MXbT2HiKk0CXMzw8dz5G1o+9+oeKiL6qqZu7ZPjkoV8Pe53pLdG9wPbVCrcEsS5sJcEpK 59Nc0VJnZ+b6VLFYspPNz4bjbywkJ9nlAo57sauAwIGqD3fM49FTT/c5UwBx+dZUMHimkY3/hJM vM+vaoTThWbu5mG+kGg== X-Authority-Analysis: v=2.4 cv=DtRbOW/+ c=1 sm=1 tr=0 ts=698de741 cx=c_pps a=TvliyZNEFSK35vtP2Nadqg==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=M51BFTxLslgA:10 a=i1IsUcr2s-wA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=2AEO0YjSAAAA:8 a=0-yszGi1pw2bLUArnyYA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-ORIG-GUID: 4AYZcIClCtuKt7oSEem2A9weh6jYrFL_ X-Proofpoint-GUID: 4AYZcIClCtuKt7oSEem2A9weh6jYrFL_ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-12_04,2026-02-12_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 suspectscore=0 spamscore=0 impostorscore=0 lowpriorityscore=0 bulkscore=0 clxscore=1015 malwarescore=0 adultscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602120111 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 9a0f8158504..d5ceb657fa9 100644 --- a/drivers/greybus/cpc/host.c +++ b/drivers/greybus/cpc/host.c @@ -161,6 +161,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) @@ -168,7 +169,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); } @@ -237,13 +238,80 @@ EXPORT_SYMBOL_GPL(cpc_hd_rcvd); * @cpc_hd: Host device to send SKB over. * @skb: SKB to send. */ -int cpc_hd_send_skb(struct cpc_host_device *cpc_hd, struct sk_buff *skb) +void cpc_hd_send_skb(struct cpc_host_device *cpc_hd, struct sk_buff *skb) { const struct cpc_hd_driver *drv =3D cpc_hd->driver; =20 - return drv->transmit(cpc_hd, skb); + mutex_lock(&cpc_hd->lock); + skb_queue_tail(&cpc_hd->tx_queue, skb); + mutex_unlock(&cpc_hd->lock); + + drv->wake_tx(cpc_hd); } =20 +/** + * cpc_hd_tx_queue_empty() - Check if transmit queue is empty. + * @cpc_hd: CPC Host Device. + * + * Return: True if transmit queue is empty, false otherwise. + */ +bool cpc_hd_tx_queue_empty(struct cpc_host_device *cpc_hd) +{ + bool empty; + + mutex_lock(&cpc_hd->lock); + empty =3D skb_queue_empty(&cpc_hd->tx_queue); + mutex_unlock(&cpc_hd->lock); + + return empty; +} +EXPORT_SYMBOL_GPL(cpc_hd_tx_queue_empty); + +/** + * cpc_hd_dequeue() - Get the next SKB that was queued for transmission. + * @cpc_hd: CPC Host Device. + * + * Get an SKB that was previously queued by cpc_hd_send_skb(). + * + * Return: An SKB, or %NULL if queue was empty. + */ +struct sk_buff *cpc_hd_dequeue(struct cpc_host_device *cpc_hd) +{ + struct sk_buff *skb; + + mutex_lock(&cpc_hd->lock); + skb =3D skb_dequeue(&cpc_hd->tx_queue); + mutex_unlock(&cpc_hd->lock); + + return skb; +} +EXPORT_SYMBOL_GPL(cpc_hd_dequeue); + +/** + * cpc_hd_dequeue_many() - Get the next max_frames SKBs that were queued f= or transmission. + * @cpc_hd: CPC host device. + * @frame_list: Caller-provided sk_buff_head to fill with dequeued frames. + * @max_frames: Maximum number of frames to dequeue. + * + * Return: Number of frames actually dequeued. + */ +u32 cpc_hd_dequeue_many(struct cpc_host_device *cpc_hd, struct sk_buff_hea= d *frame_list, + unsigned int max_frames) +{ + struct sk_buff *skb; + unsigned int count =3D 0; + + mutex_lock(&cpc_hd->lock); + while (count < max_frames && (skb =3D skb_dequeue(&cpc_hd->tx_queue))) { + skb_queue_tail(frame_list, skb); + count++; + } + mutex_unlock(&cpc_hd->lock); + + return count; +} +EXPORT_SYMBOL_GPL(cpc_hd_dequeue_many); + MODULE_DESCRIPTION("Greybus over CPC"); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Silicon Laboratories, Inc."); diff --git a/drivers/greybus/cpc/host.h b/drivers/greybus/cpc/host.h index 8f05877b2be..ee6a86de309 100644 --- a/drivers/greybus/cpc/host.h +++ b/drivers/greybus/cpc/host.h @@ -9,6 +9,7 @@ #include #include #include +#include #include =20 #define GB_CPC_MSG_SIZE_MAX 4096 @@ -18,7 +19,7 @@ struct cpc_cport; struct cpc_host_device; =20 struct cpc_hd_driver { - int (*transmit)(struct cpc_host_device *hd, struct sk_buff *skb); + int (*wake_tx)(struct cpc_host_device *cpc_hd); }; =20 /** @@ -34,6 +35,8 @@ struct cpc_host_device { =20 struct mutex lock; /* Synchronize access to cports */ struct cpc_cport *cports[GB_CPC_NUM_CPORTS]; + + struct sk_buff_head tx_queue; }; =20 static inline struct device *cpc_hd_dev(struct cpc_host_device *cpc_hd) @@ -47,6 +50,11 @@ void cpc_hd_put(struct cpc_host_device *cpc_hd); void cpc_hd_del(struct cpc_host_device *cpc_hd); void cpc_hd_rcvd(struct cpc_host_device *cpc_hd, struct sk_buff *skb); =20 -int cpc_hd_send_skb(struct cpc_host_device *cpc_hd, struct sk_buff *skb); +void cpc_hd_send_skb(struct cpc_host_device *cpc_hd, struct sk_buff *skb); + +bool cpc_hd_tx_queue_empty(struct cpc_host_device *cpc_hd); +struct sk_buff *cpc_hd_dequeue(struct cpc_host_device *cpc_hd); +u32 cpc_hd_dequeue_many(struct cpc_host_device *cpc_hd, struct sk_buff_hea= d *frame_list, + unsigned int max_frames); =20 #endif --=20 2.52.0 From nobody Fri Feb 13 23:22:23 2026 Received: from mx0a-0024c301.pphosted.com (mx0a-0024c301.pphosted.com [148.163.149.154]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B88F9225775 for ; Thu, 12 Feb 2026 15:01:12 +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=1770908474; cv=fail; b=TuHElDKxULVUHPXvd4BLpxhqI/zpF+yrYEiyV5e2xst1ZPkIZPqe91Iq27xqJBH5Xupn0jekLC2w56ehq4cuExTYzTk9c0WNYLWZxCTpyv4NLPlPRuXBNjgwruXpF+1HXl4WnlzcrQ88+qUaEi6EVeTH95p0UEwOxmITK8vF6JU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770908474; c=relaxed/simple; bh=NxDl/M3ra2FpIyeTmbFxbovicW2dpG61MiqQq0l3tlU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=PJSRYFLnyYEBfU4YUm5RMXj1UHUYUvox3/jlSxFgbB+d5NV03Jr8prNg+h2OfsTcKWFRYE8FCbU1iOBu3ZliEPMVqU5rU/aezQVwP4cirCuFDpysgwnuaiu1X1ycJi7GVzqgXs86wufTKZULQ57ySPC5Z6Ey6K1NVEQZA9vauNE= 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=smV7PDWW; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=EJaAzScp; 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="smV7PDWW"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="EJaAzScp" 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 61C2Lwnn2678544; Thu, 12 Feb 2026 08:44:18 -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=AWun+BxGj2leuJgVTMj5ykllYm8LFMqZmPe7Wu6eoAc=; b=smV7PDWWSFcd Cyff5Q4Zo/l78rpffS6yIaPap7M+PcOoY6kbfW1DgyRdcQPn5JsV04ANFT70JXZa p3MLTAk7EvgJg8Q5ASOW2sSeHrhyg+A1ROkKWD2bs0B+a0MgmnWUoOykPBormirE dsfS4ombOOw+0QdyHGkiZMBEOoaiE2GShHVRB1iWMXM0+W6INS3sdg+UcQR7G8Bh 9Aq73/CNbLv13YuJDghRCVLne91cSKShkNNo39loiW7W7Kk3aouqvQnuHEtKK29Y eT8VEu4stQ25hx26MRluKB6sb+aFLQ1UlKK8QIknQwiHVq6Uhzu78qu2xuMFtwMV w0lR07RVzA== Received: from dm1pr04cu001.outbound.protection.outlook.com (mail-centralusazon11020096.outbound.protection.outlook.com [52.101.61.96]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4c92uysn4e-11 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 12 Feb 2026 08:44:18 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=BYvO0fLVFF50Iy5k589EPBq3ALzSEC1cuQy9hGSPISn9L3ExfwXxURCAO8wMpwGzjBLlLWOBdmKpqS4yQpPfXIahGPPddTwsPDo1TDYyLFtliUVNbYfqGKvuBmhN4JqHOp+g+oRIheKhBWVzYXMZXO4YDKmchotORA0+jStJpFCVhiEQosba9xEYmxubyWDLnnFb8cq2r3Y5tUPag1OLvpMygAayCg+uNMk70Xkk3SOuUu74BZ+Udfq1ydeJqkSZnD2n0xs7JCkCMmhcMiWel/kwqguCbV2jzdCpVozOa8YZmeVf5C5QxXGlZeiz4i77q6n1jc51KHvCgm/8mFxdLA== 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=AWun+BxGj2leuJgVTMj5ykllYm8LFMqZmPe7Wu6eoAc=; b=c5DWutEaBEmBzphWepP0u6ldcbn0asyKwaw6/3K+c06IZ82kDx0pGVbCdVcRr8rFl2e6H/KGqQd03R+rIsDJLZR1Mall+eS/nG7mSiX6UmE5a5qixNUhxL85fy5BiBgph6dP7uf1gY/YDDeNzpoGNZguQwoBsFkJ1t1PkHw+USqM2oWXsh3r5/Lm59TBekahWu3PzozM87Qpjc+9ZbtQlOHHrmIuJcWf6Xvd9OC/imQsbRBaC93vYGAxt0/X14nbVPmJeYX3hr3+kG2iobyzwws8aCrphaVvkxPkCfym6JtRqj7b5mxaQy87Oe63aY2jL/zlHUagb/dbLcWnyBlIHQ== 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=AWun+BxGj2leuJgVTMj5ykllYm8LFMqZmPe7Wu6eoAc=; b=EJaAzScpGlLC+k7P7PhLg/v8wAP7kTzvsfxv9VazJQM0Sw3SArTGc9eH/5xF0SxB0jherTCegvQjLsrJgIXvnjfPfDVqZSwDuzjmOwEpqJ6rWXT1naEJJi/4Y4qyM3yNLzoRxBP4NL5NXJZP1IvSnqCf3eElnyWJ70Miy8+7x/c= Received: from DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) by LV8PR11MB8486.namprd11.prod.outlook.com (2603:10b6:408:1e8::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.19; Thu, 12 Feb 2026 14:44:15 +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.9611.008; Thu, 12 Feb 2026 14:44:15 +0000 From: =?UTF-8?q?Damien=20Ri=C3=A9gel?= To: greybus-dev@lists.linaro.org, Johan Hovold , Alex Elder , Greg Kroah-Hartman , linux-kernel@vger.kernel.org Cc: Silicon Labs Kernel Team , =?UTF-8?q?Damien=20Ri=C3=A9gel?= Subject: [PATCH v3 13/14] greybus: cpc: add private data pointer in CPC Host Device Date: Thu, 12 Feb 2026 09:43:51 -0500 Message-ID: <20260212144352.93043-14-damien.riegel@silabs.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260212144352.93043-1-damien.riegel@silabs.com> References: <20260212144352.93043-1-damien.riegel@silabs.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: YQBPR0101CA0124.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:5::27) 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_|LV8PR11MB8486:EE_ X-MS-Office365-Filtering-Correlation-Id: cd66d5d9-a093-404e-8a93-08de6a4531d8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|52116014|376014|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?R003NmtuYkFvSnphS001Nmpqc1RtUitQQTdoZnVnYjBTc3VSQ0xhekU1a04r?= =?utf-8?B?NUhnOXdIeng5U2EzMTBhM0tvSXQxckxKZ2ZEMjR6NTNmbFo5NVI4eGxMWW1M?= =?utf-8?B?L0pZMlZ4WHVGYUtjYTRyL3h4cFZmd1RVbGZBUXppaGRZRUxHdnBoSmd2QlJ6?= =?utf-8?B?alVLRmZiRFhsRTBXd2ZYekEzOVdRWmVEbVphZU1HWi9uZW9pWDRpRGJ6UFZP?= =?utf-8?B?b1hUOElhMGlmR1pDY1Q0Uno3MlREcDM1QlM1eFI1TEF2Yk1ZeGJKSy90bGF1?= =?utf-8?B?R1RTcTdVTnN4WmJ6N000MHd4N3M1cm5nU3pBdm5HMUFhK3o1Zm5kd2NTYVk3?= =?utf-8?B?aVBHL3Yzc0Q0Ykcxd1JCcG9uWVN3M2ZYUXJDU2NNeHM4S3pJTE9oSEIwRFgr?= =?utf-8?B?cmJTc2NIM0RCRGF5UlRCQ3FWN1JEWGozUGRnMjloMzRaaExvb2ZqbldWSUdk?= =?utf-8?B?ZWY0ZVBieGtEWDVRRXkrZlhCa0JXeHE3eDA5TjA2V3gzdTRGWm8yZGw1MDdu?= =?utf-8?B?VmJzUHJuTFVYSXRwMjZOa0dGaTFScmloVjhGVExwTkxSK3hFTWgyY04yRE44?= =?utf-8?B?VVBjUGJvRjFNeUw2d0V4TUVvMjU4cVQzL3hMYlZudklHejVBb3VIRjJaQldH?= =?utf-8?B?M3EwNnJtcy82dWt0VG5uVHY1RlFmeUl1eFpYQzViSFhtdzZGbGxCaEZ1Zmwr?= =?utf-8?B?M2ZqR0FJZjQ1YVlabDYvdDhZRm1oVElXQVNlc0RTL3AxMCtrLzN6K1dlSk5O?= =?utf-8?B?UFdheDRNOW1wbDgvc1J4amxBVUs2VFhaWlVLb2d5em1FOUp2NlpxVVdOaC8v?= =?utf-8?B?UkIzZ3JlazArbm8rblh3TUwraHpVSWZONTUwSWVMcCtydmdYQy94ZE01SUNM?= =?utf-8?B?R2Rnc0JSU3J2UkpLM2VDazUvTjg3ckp0R0V0dFhvTTZMOG5tM1Q1S3pZT3h3?= =?utf-8?B?aHc4SHBjTkdWUXBSUTJtZ1hyYjFyVVFTZ0krL0RRUnpkTXh2ZVJuTTdQeldp?= =?utf-8?B?RStRVm5ieFZyUFdzYldieE9XeitMOExEWnZUZ2cyWVpVYy9DWCtjcGQ3Vk9z?= =?utf-8?B?ZzIzejkwVTVLc3lPaWhReEJHczYvai9nTGJsd0h6d0VZOW15cUZwclZubVhS?= =?utf-8?B?VWdWbEloa25ZNnVHbG00WGFING5oQVRkcERwelNFdXp6QVhuSjkweGxGWW1o?= =?utf-8?B?bFBKN1h4ZU1WMU1VMCt6eERTcEJ1UDBKSmRTeFc4QzlsZkFtMkN1aVVwTUw4?= =?utf-8?B?a2VHaVJ3ZERsVXZoY1E5d2M1a1FqSFR4WE5SVjczSko4UkpSNGltWU5BMnMw?= =?utf-8?B?U0w0TDYxMTZjV1FaQUNiWTI3cXFvaXdwUms0TnJMdzBLT2lMR2R0dEtVVzIw?= =?utf-8?B?RDJOZ1NQMnd3d1Buc09HU0FmTkhFVlVnUUtZWFIzNUw1RUh4RnVUYjVuSTlq?= =?utf-8?B?RDNWSThUSE94dGMrT2l3d3Fzbjd6eU9oczIrNVJIOFh0bmhSTit4cWVzVmVj?= =?utf-8?B?R3NNUmRMSUpQVnhWTFlQSGZ0emZsQ0o5c1hoMkJoRlN0YkJIZDI5NGNCbGxX?= =?utf-8?B?ZGtuUnFPMlV5SDdJRVFlbmZWNHMrWVMwcVdkN053ZTc1RW1GY3RvK2pOSzBK?= =?utf-8?B?NXFlRWZoYklEc1NYNGdYZG1VUEFtVHljcDR3dFRLZTMvWnZJNEZmQ3FyZW5H?= =?utf-8?B?eXNYSFF4S2NnWU41aHNEMFdZRC9FV2I2QlNWRkJNZWwrQkhwcW5kWjhuMjdO?= =?utf-8?B?UU1CUWhMZjh4amgzdm85cXRPZzFPMTVNUzBjMHNHUllIT2pQL1duTHJIaXlj?= =?utf-8?B?KzRjKzFCRHlMM0FKQnVqRDRMSGdjMDlMMVU3QWhaQll6M2p4SXp1NGd3UkJj?= =?utf-8?B?Z2NkdVl6aUFDckNFd1FjNU9XczRtVXYzOCsvYkJYVHFNcUZadzM5RjlaRVBI?= =?utf-8?B?YXQ0c3lDbVJsQkhrVmhMeTNvUzdLeTZDL3NxRFo3S0l5T0xZY2dlekhDRTdp?= =?utf-8?B?Ym8rMUtPUmkvY3l3ZnZnYm9BZHc5S1dySmdMa3VtSVBTYndGS2tYZThhYU9H?= =?utf-8?B?WUlPa25hcndmN3l6bFBwSGhETTBibEhTUWxyQjJqY3BOZnlKWkE5UW5HTCtQ?= =?utf-8?B?eGtzRXVESW5Oa25zRlA1OVFiaFd2b24xakpTSkdTOWhnRU9QcTBLSExRUVRC?= =?utf-8?Q?kspswGDxpihdBvC4+8RBMNg=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR11MB8205.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(52116014)(376014)(1800799024)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZmtMSVB5dE1wNEZFdmxKODdQcnVDM1NteUcwcmxzRjdHZVd5eHdGcnRLQ2ZW?= =?utf-8?B?anRTanhNcjBoRlVhSHU5UFEwVE1WL0lUN1VoSlBKU2NUQjRqM0RNL2RxQ2R3?= =?utf-8?B?SE5pRnJFZUd6cHNNK1hWTmw3TjQvOXRJRkJGVGhkU1k0QjBHeXhtaDBFdlJr?= =?utf-8?B?N1NGQ1JwUjV2SUlBekgxMUpBbmhQWURsZUY1VDYxc01pWGpxRHBSbmlkUUNY?= =?utf-8?B?alRmSjJTSWJiN1hURm14NGhIeU9lWi9Hcjd0YS9ZWmdVejcva2NjSkZPMWQv?= =?utf-8?B?cE0wMksvTkRYUlh6Kyt2M2Z5eU5wQUIzbjRicktvb08rdHdzd1N0aW02eXg4?= =?utf-8?B?NkZBL1k1R25jQlhkdFpVZUVGdmFzUUxROUJxZ0NsVG56UXhadUtuQWNabHRR?= =?utf-8?B?ZmhNZjdicUQwUFlxK2tTVlJ2SGRYenVrRWdyS1drMTVUNmpxdTNKbFpNOThZ?= =?utf-8?B?WDZWZkR2U3R2aTRkZk1ISlZwRG9pTUM4OTE1Y2FSZEV1STl1Wk4rZHNWS2xB?= =?utf-8?B?WHpjRXVXcUJFOGJ4U0dKSjFlRWNIYlBnYWFDckkyTGV4YjhOK0c2VlhtbEhU?= =?utf-8?B?Q2NhWDc4RVBJZWFSOVlza1d3Q3JnY3FvcDlTZ04wNFRoZjlkTjlEM3VkeGpp?= =?utf-8?B?S0phd2ZqeGpLQjMzcUpqdnhXUzVEQm42c1ArZ1BKSWlIMFBMRnV1QXRFYWV4?= =?utf-8?B?VzVMQTU0clU1UEN5MCtIRTlYSWNUbldBSXpHb0l3ek1vZHE2b3dPT0FhRzZ6?= =?utf-8?B?WjZaZ2lsc1NqR283MXlZblFJSk1FOW5FeVI4QmJiSXd5WjJMZkNSQm95cFlX?= =?utf-8?B?dHdqRW1LQVR3MlNyejdNRXBYT2xKNEI5aVc5NElNUmpGSkREYXl4UzQvY0JW?= =?utf-8?B?VDYwOHdiejFVQnRhdWsyNWxuT1I2clJaNXNJZWcwRXFiSHpPRmpMM015REdU?= =?utf-8?B?UWozR2tBdkRnRDQ4Vm5PVGFQcHdDbnFBTmJNcG1NcFpNOTlPZURlNVBqc1dX?= =?utf-8?B?Z3NYUG5zenpucE5yV2JhUnNOS09kYzRJM0tmQmU0SWhsY1B2TWJ2dlN6cEsv?= =?utf-8?B?NlkrMTZwVkhKS2FFb2x5NWI4OW1GaHlUUVE0WEtaNGlYR3ZBVWJNa0NxTGtk?= =?utf-8?B?aXBpeUZ4TzkzdC9VajhTWlR0bjlYeHRINE9iTk9CbEFrWFV1ZjlMVk5rWlp1?= =?utf-8?B?b2ZIRUVQUnVJNHdHNkJWRDFTUkprM1JFNWdrTDcvUEZCOTZVTTZLSnhqV2xH?= =?utf-8?B?S3VLaFFhWHB5Y3c1b1ZTcFMzZHhHMy9YMWk1TXJCUXBKNmUrMG9XQ0dSTDBu?= =?utf-8?B?ZXVPZWM3bHJmM3paZVJpbjRlWjk5dlcrSjlZSVJXM0tLZ0ZGRis1YnRRQnBz?= =?utf-8?B?NGRBRUpnaHVQQ0ZyVFo1bGNWN1VRbGxOTXduNEFEYWJlWlI5eDQ2MERLRUMy?= =?utf-8?B?eTJoTDBOR0RGMGVnT3U1TGdSVTQ4Vkh5WW93N2ZoN1RFUGhZd21QZlNxdW5l?= =?utf-8?B?N3J1TDhUR3Z3R0dlZUozOGI2WXk1SEx4MVhRTGhuYXZWRk5sd2Rjd04zS3No?= =?utf-8?B?Q2xxMHgxT25ONDFGUUZhb2lEM3o2dXA0WkZYTDRXVE5EeG9UWkdOTHJOQU8w?= =?utf-8?B?ZDVzS083cG5TQjVvNTFmbDBESkFVdk1ici9nZmFmZ2xZTkhTQkt0dkFCZHM2?= =?utf-8?B?dGNjdVRNUm1YVVRRRlZ2dENtZjBWRUdvbm9WVFdFczdWamxjUkdKYmxHNGRj?= =?utf-8?B?TzZYRDZiZVNPaWcwNTNpdE5hTVVZWVYrSkZJL2N1SEI3c2EvM2ZqZWFQVWE2?= =?utf-8?B?U1ZIbW1vQkwwenBPcDVzV08wWFl3ck5wRm1yUjdKNzVtZWw5S3J3YldJaC84?= =?utf-8?B?YkVnQlRqamtCY0VhdFN6YjA3UnBnQ2lTNXFKcy9NS2VRRzFaZ0RSMkcxcTNl?= =?utf-8?B?RkRwMkFRNmRUSjRCcWcydUwzbC9kdUcxbDZwOSt5bU9BdVAvZGd5Y3k5V0sr?= =?utf-8?B?NCtaUmtmRDl3Zy9TVGlSdnpDNkVFVDVoR3Y4Vm5mUGxCcmI2NThFTFNVdlVL?= =?utf-8?B?dDcvS3F0dk5wMVNIemdRNzhxQlhxQTZveGpoMmNNUndaMlNCdVhYNWJ6VmhN?= =?utf-8?B?dmFNcGV1cDh3TXdaZjlEWWl5L1Y1T21MZXo1Q2ZQZmxGNnVlM1FCdmlZTTZ6?= =?utf-8?B?Mk91V2NUaU9YOHpPUlFOYlVIY08ySDgwbVZjYU9aOGdkUXBad2NZNmpqN1o3?= =?utf-8?B?anBtQldOUDZscTRFRkVaWjk2YXo2cUZsOVhmZWkrYVZyQkhLQ1plNXZvbVBQ?= =?utf-8?B?K0FHV3N5RkxENVVhMlFaNWhrT0EwcE5LSjRlVmE4VGZJQ0YyQURmdz09?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: cd66d5d9-a093-404e-8a93-08de6a4531d8 X-MS-Exchange-CrossTenant-AuthSource: DS0PR11MB8205.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Feb 2026 14:44:15.6598 (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: VR8RTWUKiw6vNYIJxwVI1Wgr8qb0p7dhcEerD7qcHgmRwzZjebFgZhIk7mMTsp5T8oEYY23DPnfJeJIMFwAP8Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV8PR11MB8486 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjEyMDExMSBTYWx0ZWRfXyH8W1iXd+Es1 X4dt312Egi3OfQozhXEKjJVLgIcqfJ9BhAv0+3FDhTeNDN52EgEEzVItmhg8V4stvJDtvvv3NYY Z26NxodQnVZGXUXmFjTdHX6/qtVENt/Grz1AIodnbhLklTd3mNAh2mm/zgwyH0NvqAhmNrXAVmi Dx8m70L8Xsuyh2WljYiDrY9rtis3gMZXYGsiMf5wft0VALykOuu6Y1AeDJoR1lqJUDoCIoWt3Ye f0bxJfOoPDt6qhVWgXbGUVX3C817Pq/HQk73P8rYbBuVccTJYihEsT9hpLZx9LLA1iPusA5jJ3D oYMe3Mr8PwzO65S5Da5BD2QAeSSm+3vWfh9SsYQa+m8Wpq/HIQ9zyq/Xs8Sjm+YcKf8HmUkk0LU hDcGIKFEur9cZTXkoLljTWUWvi5w+xAVk7THXtyDiaacXYy7No9cmPd2e7Z+/xO58FYPwESEeX5 5c+VH3YEIoTWvk6kcTA== X-Authority-Analysis: v=2.4 cv=DtRbOW/+ c=1 sm=1 tr=0 ts=698de742 cx=c_pps a=TvliyZNEFSK35vtP2Nadqg==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=M51BFTxLslgA:10 a=i1IsUcr2s-wA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=2AEO0YjSAAAA:8 a=8szWe6Y7soD9Pg2qZbAA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-ORIG-GUID: phbMnKACmKXMmTAEdGfI9griT1p3fsOI X-Proofpoint-GUID: phbMnKACmKXMmTAEdGfI9griT1p3fsOI X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-12_04,2026-02-12_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 suspectscore=0 spamscore=0 impostorscore=0 lowpriorityscore=0 bulkscore=0 clxscore=1015 malwarescore=0 adultscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602120111 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 d5ceb657fa9..5c11f9c6bd5 100644 --- a/drivers/greybus/cpc/host.c +++ b/drivers/greybus/cpc/host.c @@ -164,7 +164,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; @@ -181,6 +182,7 @@ struct cpc_host_device *cpc_hd_create(struct cpc_hd_dri= ver *driver, struct devic cpc_hd =3D gb_hd_to_cpc_hd(hd); cpc_hd->gb_hd =3D hd; cpc_hd->driver =3D driver; + cpc_hd->priv =3D priv; =20 cpc_hd_init(cpc_hd); =20 diff --git a/drivers/greybus/cpc/host.h b/drivers/greybus/cpc/host.h index ee6a86de309..4bb7339b394 100644 --- a/drivers/greybus/cpc/host.h +++ b/drivers/greybus/cpc/host.h @@ -37,6 +37,8 @@ struct cpc_host_device { struct cpc_cport *cports[GB_CPC_NUM_CPORTS]; =20 struct sk_buff_head tx_queue; + + void *priv; }; =20 static inline struct device *cpc_hd_dev(struct cpc_host_device *cpc_hd) @@ -44,7 +46,8 @@ static inline struct device *cpc_hd_dev(struct cpc_host_d= evice *cpc_hd) return &cpc_hd->gb_hd->dev; } =20 -struct cpc_host_device *cpc_hd_create(struct cpc_hd_driver *driver, struct= device *parent); +struct cpc_host_device *cpc_hd_create(struct cpc_hd_driver *driver, struct= device *parent, + void *priv); int cpc_hd_add(struct cpc_host_device *cpc_hd); void cpc_hd_put(struct cpc_host_device *cpc_hd); void cpc_hd_del(struct cpc_host_device *cpc_hd); --=20 2.52.0 From nobody Fri Feb 13 23:22:23 2026 Received: from mx0a-0024c301.pphosted.com (mx0a-0024c301.pphosted.com [148.163.149.154]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F2BB035DD15 for ; Thu, 12 Feb 2026 14:44:38 +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=1770907480; cv=fail; b=ZxFeciHmzG7zwl7o4sgu2oHzOUe3YBsk1jNh4WIWurhD/gO7Spqd2No/gEl/2kJVzSspQEcoT8cLMG6M6vfSJtKgs2cWCjl5deDyHdWu46CSjQb2dPxs1xEma075iknP/l2IFgLNQoToJuzPmgGldn84ywPm5H1bk5THenXEZyI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770907480; c=relaxed/simple; bh=S2qARm2EBlR5ULvIkhAtB8vBQ+JS5wcPaq4LTK6et6A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=PIfCA1KTcHNh3lHje1b7kNiTUYAXgaFPRz75e5dlDD5rBdvl0AAFhzAa2L/08EqLUhfelfV1tF8NuxxqcLIAkpyBVBAIWap/7faiWvPi9U/FzSBUCGVjjDH1J/HYJ/aZPGjZaQJM/I68fmx9KHANUJl0yqWwfK5fNUZIf1xcfq0= 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=dW7N8QpM; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=KPuuLQCA; 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="dW7N8QpM"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="KPuuLQCA" 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 61C2Lwnp2678544; Thu, 12 Feb 2026 08:44:21 -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=Nl0QzT7bC6vVfiXFdrOVbGV6t4ijcqbAof/+8c9ouK0=; b=dW7N8QpMl9B+ 0qrDc4JEPBAvrpFou+Ad10Ue59scplGxn7aZUuQ3LMA/yyE92gzYk0l1KAtXpi5r +56uBiG2MvQPUlFqNMKKUtvP+CEfzX+8/Rfw09lLNNSonK0MR1DOWM+F4GOTypXm gZSyXV5XayossYZ1OCW1LOc+ayqmoV18IAlSqUE0MHTdJuPJ6t8Mi80jNLpLLo7E rfI8n9eWO3BvaesZNVUl1BQgnGDTbjscfVoEJgGBkb2WytspbjdYevLunmd5dkO5 +nArWOIYtzDqJ59XmJo7V2q9NKEDQ3vbUyC2cdBmsTnv21jlpimVOC6BQUdOMwpy 5DVIYwEz0Q== Received: from dm1pr04cu001.outbound.protection.outlook.com (mail-centralusazon11020096.outbound.protection.outlook.com [52.101.61.96]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4c92uysn4e-12 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 12 Feb 2026 08:44:20 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=sOn3KoEWUJB4dXZN/Q8BFfgJHOX6TSSR64Ivhy4J1HsVX7eve+Qy23kv+Hr2RkmxB0RmCJ78s0cmkHSc+goznX0iGCpHihmwynHfdojl8XtXM8KwhcsLuONr1WQ7OMJvZCm7yOCIFOPlBTvLpj5cIR3dqRy5HEtLcldPgEUg2lS66H9xhxYqCb1MruaA3972eXmRdVFgkIMyFrYjyrOtGFoaizoP5tCRmpLjNigMx3YLUy35/kkKfqFRQcQZsMEvVdxSLTwNwRndyJgTqrU7HsjuoCVtqS1WJNrl2declVwjUze6uEtxT4UJosCvEn68uBZINSRYJtoNBTfnw9JicQ== 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=Nl0QzT7bC6vVfiXFdrOVbGV6t4ijcqbAof/+8c9ouK0=; b=pyAo3tDqk/iKoeNaO+XDiM+fLrWyPLmApZeTR0gMOfAqJ7En2Tpkr+hMSEMg5srzlLjx9LGTpwyQ6UiBzcmpZMyYERHE0e2rS+oWEW3LiQCm/ZU24HBuspFMMHprm8UWJaQWsbSu0CX/L0FHrsf4k3vFkb1yUM880WIia/z7W10DQ1+8qCHm/CHgueEJP6MCu6sUEhb99p4NZNQqqk/kljLweGhIo43EiCEufP2PdObQ1AEkX/vQNIAmZ6jFvTB0mhlkAPNXoPBHsEwNv6VeH/Rl6taE8lxiAo/SbNJLltnjQ5QdhGPJhgZF/HXQpjzS07AzIK/pcUhFYQx3mhIM4g== 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=Nl0QzT7bC6vVfiXFdrOVbGV6t4ijcqbAof/+8c9ouK0=; b=KPuuLQCAbPO+mkgyJqn5ZWK3VtQS25couaNjggBMXrpHVHTMr+A6hwhY0ZfUW2TRa+JV7cIZYsBMDl+dRLKyrfPO6ECCQlwatYN4yhI7joeHRqIaOhMQhgs/67mTgXoJasidJxFTvVbAjuIrA+QC9B7HL91qIwZQgqiHwGJsRck= Received: from DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) by LV8PR11MB8486.namprd11.prod.outlook.com (2603:10b6:408:1e8::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.19; Thu, 12 Feb 2026 14:44:16 +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.9611.008; Thu, 12 Feb 2026 14:44:16 +0000 From: =?UTF-8?q?Damien=20Ri=C3=A9gel?= To: greybus-dev@lists.linaro.org, Johan Hovold , Alex Elder , Greg Kroah-Hartman , linux-kernel@vger.kernel.org Cc: Silicon Labs Kernel Team , Gabriel Beaulieu , =?UTF-8?q?Damien=20Ri=C3=A9gel?= Subject: [PATCH v3 14/14] greybus: cpc: add CPC SDIO host driver Date: Thu, 12 Feb 2026 09:43:52 -0500 Message-ID: <20260212144352.93043-15-damien.riegel@silabs.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260212144352.93043-1-damien.riegel@silabs.com> References: <20260212144352.93043-1-damien.riegel@silabs.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: YQBPR0101CA0124.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:5::27) 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_|LV8PR11MB8486:EE_ X-MS-Office365-Filtering-Correlation-Id: 054401f7-0da9-446d-ceee-08de6a45325a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|52116014|376014|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?Y1VwTWRIbjQvVXNyVTQ1dGM1SzJmV2ZtTVJVTGpWWmlVRjZGMW9PS1NOeEFZ?= =?utf-8?B?V040UjF0TnlXd3orem5CTUkyMDNGbU02SCtXYzRhU293T2ZhYzFrZVVzZWVB?= =?utf-8?B?U1NwWmRib2E3TzFVQXJBQXhPTDhCelIwN2h0RGppK0EraDVGa3hHVElWUlNR?= =?utf-8?B?UXl4RW90TzNyTEpaSHNRNTBlc096eDVlbFovbkg0d2lGNnBaZVZQd0ZEeWRq?= =?utf-8?B?VFdENDdLOWFlUHUvZkJCL2hZbjk3dDBqSVpES0FPdzBwd3pmeTZGT3l0bmND?= =?utf-8?B?WElsRFVKcytRKzJmWjl5c3dFUnhiU0kzRzFzRU1aWnNjVS9FaGJCcUFGbElz?= =?utf-8?B?TjVlTFhZRmd3Vm1QUGo3L21HSUxmUU5RT0pKdys2L3JOK3EvS0FiRDRCYXEy?= =?utf-8?B?VWJIdkR4dGRpQjBiTmlldjRkeVFMNG1uLzhJZUt0dURnQjljbmtsdDJGcEZo?= =?utf-8?B?WkRmd3VvRTM4TEtCNHd6MDJzajFBeXFUZWI1WW8xd254K29HR3JxZHkyMnlQ?= =?utf-8?B?ZVJ4Sm93UXUwbWxEVVNVdmlreFJjcWk2SkhOOCtob3Jqdk9uUnhadXFvSHRu?= =?utf-8?B?VjZlTGR3NVlydWRiRHVQWUY0TFhybWRYRlE4Z3hVeGI1UzlMNVZXV29GRmJs?= =?utf-8?B?ZGtGcDJyR1d4S29BZWhhbE5oRzhrbUV4a2ltUDVjMFcycFBoQUZaWDJrRTZz?= =?utf-8?B?eWJFMVBxNXB3RHVybzA0SW9tLzFjUTVrU3hvaVRqOFFDVlAyZFZ4YjJEOVgv?= =?utf-8?B?SUIzN0UveWk4WlpvSGNtM09kVkl1K3RJamowUjZzTmFaSXgvekpuWGM3TDJG?= =?utf-8?B?N29aay9OSy9jR1luS3F5TUZkd3ZyWWhDdDQyek5sSHEzUlR4dTRNTDNITXM0?= =?utf-8?B?SkpVcVh1ZmdWeXFLU09qNnVQYjBpbmUxdXdVbkNYdFN6L0J1anpEWk5MTDVj?= =?utf-8?B?T0pOWjJyQU5QMU9FV2xkcGUwWTZheVpLeXNoZ3pkUUtiTnFOSnVOUTRVWUtD?= =?utf-8?B?S1FPWXJ4Qk9zVmRYVGhVekw1ZkoxQTV2bGhYY1EyNkZHRXEyOENwVnM3TFkw?= =?utf-8?B?SjFBYXd6eDlRT2t4ZlZ6VWRDV1NCbmFCeHNYV1JYVkRzR3BnQVRxK3lFeGkw?= =?utf-8?B?S094b0IrSE0vQlZPZkRtRkJ1d1U3ZHlWSlVKL0s1M2Y1V0toeUZMV0xmNzU2?= =?utf-8?B?aGJONW9OSkVRaXQyVVZ4RVUyQnhBOVROa0UwcXZyaUpuZ1U1SWpxWjZyV2l4?= =?utf-8?B?alVWTFZkTG11ZjR6MXdnQ3BOWU5MQWtoQjFXZkIzQjNVLytlUGtpYTdpbXdh?= =?utf-8?B?dzRjTFJybGozMW9XYy9CVnhEVlAwS0JQakI5Y1ZXemVldVI5b1NCckVyWHFE?= =?utf-8?B?ZHBOWDdidDg3S0J3Nk5nWUhhMkV6SXVHVDUyL0wxeDFnUWlwYmNTMUFkc2JD?= =?utf-8?B?aTZiSjE2L0NEcXk5TlB3bHAzQmxGVSt0MlBFcWhYTlRMSVluTzFUcUE4RjN0?= =?utf-8?B?VTduM3pzcmFhVHRBbkFHaE1LSCtIVFkwTmdGbElzOUcrVUs1S25RTWEza2cx?= =?utf-8?B?dTF6Uy9ldlQ0a200bEdma09VT2ZnUHlBMFhuU1BzeXY1ZWlINjByemtpVHJa?= =?utf-8?B?bHBTSG5udW1Ha2N0bEEyYUFiVjZPZDFYOUcyMm9SRmlQdkFrOHI1dXgzNkNq?= =?utf-8?B?ejJDRmd0QVVQMWNxaWI0VFJ3WmlFU05QamNKUWtoclZzcEJyWHlmV1FsaGZT?= =?utf-8?B?bmQrdld0VnIvUjQ5UjhMbS9oYXhqRUFndDJyUWJlTmV2MElReWxTUWxXbXlS?= =?utf-8?B?TGdKRG43NFhRTGhObjNRaVdDNUtYU244WElHa2xqSzZVNExYSm9QNTIrVHJr?= =?utf-8?B?UW9NWGVZQjh4dkZNdnE3TWZTc3FpQytEbG1TZ3kyVWd1WnZyeG9Bb0FEZ3lF?= =?utf-8?B?NFFtc09mUVZ5Smp4UndRN1A0RnVjRVA3Z1NraXBvQXZRcG94MkRWcXpBZkE3?= =?utf-8?B?dmdRVWxRdnM2UzVSSGxleUFrTWdtZDNjc2tKbHppRFY3OTdzeHI4U0EvQ0Zl?= =?utf-8?B?Z0N0QVM1ZXZ5ZmkzSEFWS1FZKyt3bFcrV3ZBYkZUZmJCMHpKQldxc0JkbFhM?= =?utf-8?B?VlJpOExhTVJ0R3pjNVRrY05hVGJBejJLMFN2NVp2VVE3NG5DVXVERnM5SWRO?= =?utf-8?Q?0F2/wu6CiUAA4SeitGIywH8=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR11MB8205.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(52116014)(376014)(1800799024)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZjdqZUZISU9TN1VFdzAwOFdTcllzajl2dU5BcVlrYllBVEk4VzVSV0QwSCtI?= =?utf-8?B?VWpKTFlQTVpTeVFUQ1NvbDdnUWJjR2t6ZHFJMlhhL1hscGQ3WURkdUhqeko3?= =?utf-8?B?UDRvREJuZlZhUlg3U1RpRUc3L3I1MzZoa29EYkZHMW9rd216WG1hbERkbzdR?= =?utf-8?B?eHo3OFNiVUlzMmt6M2pTc0IvM0hydFdEMVNMaDFxWDNReGVpVjMzTERPaytL?= =?utf-8?B?dnZON1U0eE54bzQwODR4L3VlSS9vOEVhckdmSWpzUlRGeDZXRlR2d1ZWNjFh?= =?utf-8?B?VWtuSG1qamZRbHFQekVhNHNFRklaNWp1SGwyZzNSZnNLUW1NOE9EOXlRUmlI?= =?utf-8?B?K2h2UnU4YU9hOFoyZlpIQ2hhdC8wNTF0SmsreHFZOVRhYVlxVTJXT1VFcTVM?= =?utf-8?B?eVBlUkRGVktHRVFEYkZmMENqc3NhOXhqOG1mZlZsVHRudHd3RmxXNkJrSTZq?= =?utf-8?B?MEhIdUxGdlV6TE8rbGF4UVhmTHhIYUo1UW1HZVJvdG5QYWZNUHVadlk0WVFk?= =?utf-8?B?RzBEbDRrQlRYUXN0NEdtOG5vdkhCQTdLbEFqdTJiMUQya21neDdQd0FkUGFx?= =?utf-8?B?ZFF1UlJsaC9UMC9XRTN6VzZ4bkpFY2RNSkI1U3UrMC9lT0VkZDVNSElhZ0hU?= =?utf-8?B?WENRV1lDc3kyZjZpRmxQM2ZtTUlQdUtIOElEaUEyZnhhUTlWUmlyaW8yZlVw?= =?utf-8?B?UWdWVUVTcUVjYlBndnJFeUZCZmh2U0VSOC83Y0ZmMndrS1Bmckx1aEp0QUlN?= =?utf-8?B?Q0dOT1hWUDBScEJxejdQZzVxby9vMm5kU2pSU2lSNnFiTEFzUFhUTCtaRlA5?= =?utf-8?B?WThFZzhaLzl5U25IY0dkMlVOSHFsdWNKVnZnWXpURFVVN1h3NHdEa1VKdHdT?= =?utf-8?B?MUFtbVlzZ2lrTkoxdytwcmFtcHpZUU5XTEgwSU44MkY5a0draE1lN0xiM0dG?= =?utf-8?B?L05mcnBmb21YRjYwMWI3UkxEVStaWStYUTVyWVpvaUhDeUM5RkNWSEVQRkZ2?= =?utf-8?B?ZE9RenNnem1OaUhyZ0VTN2NHY1dPUnQ2dVJQSHFTQUtYWWlWa3Vqc1pFYUxR?= =?utf-8?B?MDFQa0dhU1l3VVBtZHZGZ3REOHdiVHZGWnplY2xGdzVZVElsVlk5ZUVMVWQ5?= =?utf-8?B?MGR4M0ZKbkJwcFZIV002NG5VeDBIVXdlQzRsOFh3OUlDN04xOWNsNk9CWkVG?= =?utf-8?B?RHlydTB3WVB0RkJjTXBRVmpaeE14R05RVUZSN01ucVN6L0tjakNWcTMzNGxX?= =?utf-8?B?SG5udmtrNlhPTnVzcHArTVI4U1F4YkhLSDNBbENoNUxMTzdRNGluY1kycTJJ?= =?utf-8?B?eXpZRisvZHNjQXBwUFNwUzB6NDlreE5PV1UyWVIvVTFtK1pHS0ZhRDJEN1Nm?= =?utf-8?B?ZWQvMkRnMmFnSUJwY25JRTJXYUtKSjVBc0lrOUdnNjBWWE85ZWl1b1FjUmRL?= =?utf-8?B?ckdsZ0tKajhudndxS2JVcDk1emxpanBGQTczYy9yK3piaEVRU1NMaUVQQkJn?= =?utf-8?B?YVZ1Q2FBK0FVVmZWenNUR3Vwc0tSUGlkVUNEdVBEZXNYbFBYbzYwSEs2SStY?= =?utf-8?B?VG01c2xxeDRHa0RURGF0S0drdmQvV3dqRkFnK21WUVFyVjJONkpyNGhGN2dr?= =?utf-8?B?UytnYmpMRzNoRWk2K2dMcTNVOGZYMXBCZTdlOGtzdE82Qnd0N3l6c3dZanhG?= =?utf-8?B?Z2RWOEVudTNhMDd0eTJuK1ZjQ09pWVZsTldUd3hWWFdSOVZCSFUwNEh1Rm4r?= =?utf-8?B?Wm5ZTE9tRHRIVjVxdEdUbmlXNDlZeHdaTE9aUVhvY2hJbXZ2ZDQwRDZCU1JF?= =?utf-8?B?a1Z4SHZHelRKbjc2V3Rva1JCQUpQakpWaWxjTFk2TkdUME4xb1BQYkpWM0F1?= =?utf-8?B?OUI3aE13WE52T0NxRFg3R0tXYTV6Z0FlbmpVYnlMTVorOXYrR0JRNFdLK1NT?= =?utf-8?B?Rzc4OEVTWFJiMUFUMU9lMStZd0IvL0x6WkZSSG9ML3RsYjhZUExvSXo2ZFNh?= =?utf-8?B?SVhnQzBQSE9nZ3RlSzJOMFhuOWozTnRxOHRONzF3TzZXenJ0QXpydHlSL0xM?= =?utf-8?B?dFBlVW5KQ0h3Y0o5SXhSakZWdWpUMG91YTdBamxoWkVwQU93K1VORkt0M09m?= =?utf-8?B?VHVvRW50RGNQSUZ4QmlPWkhqczlucXorUEhybEpOL0hUaS9wcmRNeDIzeVhi?= =?utf-8?B?SnIrTU5ZaE5sZ2ZLUGtrbmx3eThDcXdmbXQ0WTFkZkNaNDB6WXMydzI5WVc2?= =?utf-8?B?cWszOU5QVWpsRXVHclZ2V3JJcUxDRnNMelhwTldEdnJzR0NHUFRHZ2VpT2w2?= =?utf-8?B?YnB4QWZqdEVsQXlxNTQwOFVENHlmd1VNTmZCUFNzRWFnNlR2MUQvdz09?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 054401f7-0da9-446d-ceee-08de6a45325a X-MS-Exchange-CrossTenant-AuthSource: DS0PR11MB8205.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Feb 2026 14:44:16.4743 (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: knNGmAGPzQf25G3ADfz92TnQsQI/dvgnqBOWJWpLNw4B+KjuVjbGvyqsMHWZ9hXcNOE5OQdxrm6Tn6NewRibNw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV8PR11MB8486 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjEyMDExMSBTYWx0ZWRfX34qT7oqqMXAo Hxsdk4J22E9fovRDACG8nsX1MrrBTF6JANgL5ZdE6mz5BHvooT71hCRLT1yIuApJ0w5a1DLVIZB Lb03Ls323u/1HpEBIBuMUEfEu7SKXQjL/eu5F9LG97ofarm77f2jGv7yBnoEX7Dt+CMTZbxVV3q FTZgkwCLsV761MOabTyXFJ07LZgm/10mmNKjGCskvzVTY4zpZFPyTgdT8dUEulcn4cSAvsRZuoS 9UGj3hlrA7CqMfcO73Ejp26+YRoekxZg71DDfGvBFr8/p7ccK450pIfbpatOkT0DOqMI0S3+gRM coLvvo95WUQWayQwleSJEqTVrMZLvmG5rTePD2gSkIFaAeQ2Z+n4RkPzJ4xOsSlPjc7NqcbeNjQ JwU+jum8CnWj0JhDSazc3OzjAibaaZowimzpfCwZyptOd6gpmBQVmwqVIJmoBbq+0xNT1XH3mOV SSZMAPftZwtyC0vMytQ== X-Authority-Analysis: v=2.4 cv=DtRbOW/+ c=1 sm=1 tr=0 ts=698de745 cx=c_pps a=TvliyZNEFSK35vtP2Nadqg==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=M51BFTxLslgA:10 a=i1IsUcr2s-wA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=2AEO0YjSAAAA:8 a=d9NkVR4ycPgQUKVUYPAA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-ORIG-GUID: KYhDRgtOKiVdW8uOWIQNkmyYfVWgGmfE X-Proofpoint-GUID: KYhDRgtOKiVdW8uOWIQNkmyYfVWgGmfE X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-12_04,2026-02-12_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 suspectscore=0 spamscore=0 impostorscore=0 lowpriorityscore=0 bulkscore=0 clxscore=1015 malwarescore=0 adultscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602120111 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 --- Changes in v3: - rework defines to group together address-related defines and remove orphaned value - remove trivial comments - all RX and TX are now done from the workqueue. In previous iterations, transfers could either be done from the threaded IRQ or from the workqueue. - remove erroneous SDIO VID/PID - remove padding between headers and payloads when aggregating Changes in v2: - change formatting from %lu to %zu when printing size_t's - remove "/**" kernel-doc marker for static functions not actually using the kernel-doc format - reduce header inclusion list - use reverse christmas tree variable declarations consistently - update aggregation functions to try to be more legible - use define instead of constant value 0x0C for the address where to read the number of bytes the device wants to send drivers/greybus/cpc/Kconfig | 12 + drivers/greybus/cpc/Makefile | 3 + drivers/greybus/cpc/sdio.c | 480 +++++++++++++++++++++++++++++++++++ 3 files changed, 495 insertions(+) create mode 100644 drivers/greybus/cpc/sdio.c diff --git a/drivers/greybus/cpc/Kconfig b/drivers/greybus/cpc/Kconfig index 0e72383381a..50f4c27666d 100644 --- a/drivers/greybus/cpc/Kconfig +++ b/drivers/greybus/cpc/Kconfig @@ -10,3 +10,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..34dfa7c1db1 --- /dev/null +++ b/drivers/greybus/cpc/sdio.c @@ -0,0 +1,480 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2025, Silicon Laboratories, Inc. + */ + +#include +#include +#include +#include +#include + +#include "cpc.h" +#include "header.h" +#include "host.h" + +#define GB_CPC_SDIO_MSG_SIZE_MAX 4096 +#define GB_CPC_SDIO_BLOCK_SIZE 256 +#define GB_CPC_SDIO_ALIGNMENT 4 +#define CPC_FRAME_HEADER_SIZE (sizeof(struct cpc_header) + sizeof(struct g= b_operation_msg_hdr)) + +#define GB_CPC_SDIO_ADDR_FIFO 0x00 +#define GB_CPC_SDIO_ADDR_RX_BYTES_CNT 0x0C + +enum cpc_sdio_flags { + CPC_SDIO_FLAG_RX_PENDING, + CPC_SDIO_FLAG_SHUTDOWN, +}; + +struct cpc_sdio { + struct cpc_host_device *cpc_hd; + struct device *dev; + struct sdio_func *func; + + struct work_struct rxtx_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; + + schedule_work(&ctx->rxtx_work); + + return 0; +} + +/* + * Return the memory requirement in bytes for the aggregated frame aligned= to the block size. + * All headers are contained in a dedicated block. Then payloads start at = the beginning of second + * block. Each individual payload must be 4-byte aligned, and the total mu= st be block-aligned. + */ +static size_t cpc_sdio_get_aligned_size(struct cpc_sdio *ctx, struct sk_bu= ff_head *frame_list) +{ + struct sk_buff *frame; + size_t size =3D 0; + + skb_queue_walk(frame_list, frame) + size +=3D ALIGN(frame->len, GB_CPC_SDIO_ALIGNMENT); + + size =3D ALIGN(size, GB_CPC_SDIO_BLOCK_SIZE); + + return size; +} + +static size_t cpc_sdio_build_aggregated_frame(struct cpc_sdio *ctx, + struct sk_buff_head *frame_list, + unsigned char **buffer) +{ + unsigned char *tx_buff; + struct sk_buff *frame; + __le32 *frame_count; + size_t xfer_size; + unsigned int i =3D 0; + + xfer_size =3D cpc_sdio_get_aligned_size(ctx, frame_list); + + tx_buff =3D kmalloc(xfer_size, GFP_KERNEL); + if (!tx_buff) + return 0; + + frame_count =3D (__le32 *)tx_buff; + *frame_count =3D cpu_to_le32(skb_queue_len(frame_list)); + i +=3D sizeof(*frame_count); + + /* First step is to aggregate all headers together */ + skb_queue_walk(frame_list, frame) { + struct frame_header *fh =3D (struct frame_header *)&tx_buff[i]; + + memcpy(fh, frame->data, sizeof(*fh)); + i +=3D sizeof(*fh); + } + + skb_queue_walk(frame_list, frame) { + size_t payload_len, padding_len; + + if (frame->len <=3D CPC_FRAME_HEADER_SIZE) + continue; + + payload_len =3D frame->len - CPC_FRAME_HEADER_SIZE; + memcpy(&tx_buff[i], &frame->data[CPC_FRAME_HEADER_SIZE], payload_len); + i +=3D payload_len; + + padding_len =3D ALIGN(payload_len, GB_CPC_SDIO_ALIGNMENT) - payload_len; + if (padding_len) { + memset(&tx_buff[i], 0, padding_len); + i +=3D padding_len; + } + } + + *buffer =3D tx_buff; + + return xfer_size; +} + +static bool cpc_sdio_get_payload_size(struct cpc_sdio *ctx, const struct f= rame_header *header, + size_t *payload_size) +{ + size_t gb_size; + + gb_size =3D le16_to_cpu(header->gb.size); + + if (gb_size < sizeof(header->gb)) { + dev_dbg(ctx->dev, "Invalid Greybus header size: %zu\n", gb_size); + return false; + } + + if (gb_size > (GB_CPC_SDIO_MSG_SIZE_MAX + sizeof(header->gb))) { + dev_dbg(ctx->dev, "Payload size exceeds maximum: %zu\n", gb_size); + return false; + } + + *payload_size =3D gb_size - sizeof(header->gb); + + return true; +} + +/* + * Process aggregated frame + * Reconstructed frame layout: + * +-----+-----+-----+------+------+------+------+-------+---------+ + * | CPC Header (4B) | Size | OpID | Type | Stat | CPort | Payload | + * +-----+-----+-----+------+------+------+------+-------+---------+ + */ +static void cpc_sdio_process_aggregated_frame(struct cpc_sdio *ctx, unsign= ed char *aggregated_frame, + unsigned int frame_len) +{ + const unsigned char *payload_start; + const struct frame_header *header; + unsigned int payload_offset; + size_t aligned_payload_size; + struct sk_buff *rx_skb; + __le32 frame_count_le; + size_t payload_size; + size_t frame_size; + u32 frame_count; + + frame_count_le =3D *((__le32 *)aggregated_frame); + frame_count =3D le32_to_cpu(frame_count_le); + + if (frame_count > ctx->max_aggregation) { + dev_warn(ctx->dev, + "Process aggregated frame: frame count %u exceeds negotiated maximum %= u\n", + frame_count, ctx->max_aggregation); + return; + } + + /* Header starts at block 0 after frame count */ + header =3D (struct frame_header *)&aggregated_frame[sizeof(frame_count_le= )]; + + /* Payloads start at block 1 (after complete block 0) */ + payload_offset =3D (frame_count * CPC_FRAME_HEADER_SIZE) + sizeof(frame_c= ount_le); + + for (unsigned int i =3D 0; i < frame_count; i++) { + payload_start =3D &aggregated_frame[payload_offset]; + + if (!cpc_sdio_get_payload_size(ctx, header, &payload_size)) { + dev_err(ctx->dev, + "Process aggregated frame: failed to get payload size, aborting.\n"); + return; + } + + aligned_payload_size =3D ALIGN(payload_size, GB_CPC_SDIO_ALIGNMENT); + + 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; + } + + frame_size =3D CPC_FRAME_HEADER_SIZE + payload_size; + + rx_skb =3D alloc_skb(frame_size, GFP_KERNEL); + if (!rx_skb) + return; + + memcpy(skb_put(rx_skb, CPC_FRAME_HEADER_SIZE), header, CPC_FRAME_HEADER_= SIZE); + + if (payload_size > 0) + memcpy(skb_put(rx_skb, payload_size), payload_start, payload_size); + + cpc_hd_rcvd(ctx->cpc_hd, rx_skb); + + header++; + payload_offset +=3D aligned_payload_size; + } +} + +static u32 cpc_sdio_get_rx_num_bytes(struct sdio_func *func, int *err) +{ + unsigned int rx_num_block_addr =3D GB_CPC_SDIO_ADDR_RX_BYTES_CNT; + + 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; + } + + 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; + } + + 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_ADDR_FIFO, 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; + } + + 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 int gb_cpc_sdio_tx(struct cpc_sdio *ctx) +{ + struct sk_buff_head frame_list; + unsigned char *tx_buff; + size_t tx_len; + int pkt_sent; + int err; + + skb_queue_head_init(&frame_list); + + cpc_hd_dequeue_many(ctx->cpc_hd, &frame_list, ctx->max_aggregation); + + if (skb_queue_empty(&frame_list)) + return 0; + + tx_len =3D cpc_sdio_build_aggregated_frame(ctx, &frame_list, &tx_buff); + if (!tx_len) { + dev_err(ctx->dev, "failed to build aggregated frame\n"); + goto cleanup_frames; + } + + sdio_claim_host(ctx->func); + err =3D sdio_writesb(ctx->func, GB_CPC_SDIO_ADDR_FIFO, tx_buff, tx_len); + sdio_release_host(ctx->func); + + kfree(tx_buff); + +cleanup_frames: + pkt_sent =3D skb_queue_len(&frame_list); + skb_queue_purge(&frame_list); + + return pkt_sent; +} + +static void gb_cpc_sdio_rxtx_work(struct work_struct *work) +{ + struct cpc_sdio *ctx =3D container_of(work, struct cpc_sdio, rxtx_work); + int num_tx =3D 0; + + do { + if (test_and_clear_bit(CPC_SDIO_FLAG_RX_PENDING, &ctx->flags)) + gb_cpc_sdio_rx(ctx); + + num_tx =3D gb_cpc_sdio_tx(ctx); + } while (num_tx); +} + +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; + + sdio_writeb(func, rx_data_ready_irq_en_bit, irq_enable_addr, &err); + + return err; +} + +static void cpc_sdio_irq_handler(struct sdio_func *func) +{ + unsigned int rx_data_pending_irq_bit =3D 0; + unsigned int irq_status_addr =3D 0x08; + unsigned long int_status; + struct cpc_sdio *ctx; + struct device *dev; + int err; + + ctx =3D sdio_get_drvdata(func); + dev =3D &func->dev; + + int_status =3D sdio_readb(func, irq_status_addr, &err); + if (err) + return; + + if (__test_and_clear_bit(rx_data_pending_irq_bit, &int_status)) { + sdio_writeb(func, BIT(rx_data_pending_irq_bit), irq_status_addr, &err); + if (err) + return; + + set_bit(CPC_SDIO_FLAG_RX_PENDING, &ctx->flags); + schedule_work(&ctx->rxtx_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; + + ctx =3D kzalloc(sizeof(*ctx), GFP_KERNEL); + if (!ctx) + return -ENOMEM; + + cpc_hd =3D cpc_hd_create(&cpc_sdio_driver, &func->dev, ctx); + if (IS_ERR(cpc_hd)) { + kfree(ctx); + return PTR_ERR(cpc_hd); + } + + ctx->cpc_hd =3D cpc_hd; + ctx->dev =3D cpc_hd_dev(cpc_hd); + ctx->func =3D func; + ctx->max_aggregation =3D 1; + + INIT_WORK(&ctx->rxtx_work, gb_cpc_sdio_rxtx_work); + + 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; + + set_bit(CPC_SDIO_FLAG_SHUTDOWN, &ctx->flags); + + + sdio_claim_host(func); + sdio_release_irq(func); + + cancel_work_sync(&ctx->rxtx_work); + + sdio_disable_func(func); + sdio_release_host(func); + + cpc_hd_del(cpc_hd); + cpc_hd_put(cpc_hd); + + kfree(ctx); +} + +static const struct sdio_device_id sdio_ids[] =3D { + /* No official ID */ + { SDIO_DEVICE(0x0000, 0x1000), }, + { }, +}; +MODULE_DEVICE_TABLE(sdio, sdio_ids); + +static struct sdio_driver gb_cpc_sdio_driver =3D { + .name =3D KBUILD_MODNAME, + .id_table =3D sdio_ids, + .probe =3D cpc_sdio_probe, + .remove =3D cpc_sdio_remove, + .drv =3D { + .owner =3D THIS_MODULE, + .name =3D KBUILD_MODNAME, + }, +}; + +module_sdio_driver(gb_cpc_sdio_driver); + +MODULE_DESCRIPTION("Greybus Host Driver for Silicon Labs devices using SDI= O"); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Damien Ri=C3=A9gel "); --=20 2.52.0