From nobody Sun Dec 14 12:18:13 2025 Received: from mx0a-0024c301.pphosted.com (mx0a-0024c301.pphosted.com [148.163.149.154]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D292832E750 for ; Fri, 14 Nov 2025 15:41:27 +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=1763134889; cv=fail; b=SpkHtpOfXfGcCa1Tfs320TrfUMbfiXoj1ItWTyX7T46xWGmVxFqI12qyik2z3aY20Fzhr+M7UbeHFg2uw3MJ07BP7sOiEMTKTVjhHu+q3v+w/94yac/kKIH4lhOoqqiZSQqkG7MoBk7rH4sO3JNrOqzSYpZ7HWjOEPgiMGYZXmc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763134889; c=relaxed/simple; bh=V/NIbUIK2UWJzgGx2SwpGr2Ri7PHcG6tMnnPJO7Cxz0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=g4mv2BiWLNGEn5+36AP2H2US4jIsiPUzWhfVVrOZRfBx5AUuCbMWg8f9CCSdxRbtZqWr87aHEUAGkDpFrJEXHNoGNAF+RTZgjpWE52pCZEwS38laZGPXrQpyWmgeftWolhv6tRCAKNDVBek/NRC+pDE2f4VLitthYORfoCjvRdU= 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=PCRupDPc; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=Bj7JhESX; 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="PCRupDPc"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="Bj7JhESX" 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 5AE9uiJb2132830; Fri, 14 Nov 2025 09:08: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=LHgz/lFtijHK41pa6ALEsVJ/2xu953e1nb/ba2nB5uY=; b=PCRupDPcAEgU u7fLgWSyHOgmipu9RINRbRLj+hrZwjLzgKQI+vyJgHfgIkh8PdEJT0l4XrFezUo0 UlCDNGs/jMtegeM6841pM00A/xx4OyomkhFDcYHB9E8iRZCxBfUg/0Daz4Kb3rkJ b8a3TeITSsWVmY4sFa52PkmzFIaXGp1PkQ5rgyOjal6IDf10SA3QZpVzr1EDoPri zuFyPnbZFdZhJ4ZOgkI5DAxEQMaiV3cThO6+3tV/ouENwunm3ju/1YOa7IaeBf78 T9zXX+wEwfVDCkNF7r0L1iEjMiXz1orgcEw1gFyyQyfLG2TIKWpIVnXkAg2CKLON 4msyq9OPlA== Received: from dm5pr21cu001.outbound.protection.outlook.com (mail-centralusazon11021143.outbound.protection.outlook.com [52.101.62.143]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4ae285rk08-2 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Fri, 14 Nov 2025 09:08:11 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Xws322Aorcfa3lvS5jDNo+hMRiLjvhDYodfhWNvU5qoCMOSyydsp/sa0R2FWDmvGuMV7xfQuoVDc6FfBg59VUz3bgDUm98ONeNrOAOJ85LcrKlpYHZ/8hoLT9yWDLzYMj2xYqWgU43MCYNP4YxOT/p39uBjFodfk5jhZrzi59v/JoNVrl1XLhK3b6aGaoNnrS4pHpPH8kduVEe+UXpSm9Gx1FVa8ajSshgVJ3Mj1qWvPZ+TDrSm4zmjAsMV3V89S1ptGf4gp5+NQFM2yv3csVobTNRsrNJIDPJ3ur8LBjRofbuo1R1nnYp+TaHkYgvkPn2tNMje1MeoYpcm+eAC8RQ== 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=LHgz/lFtijHK41pa6ALEsVJ/2xu953e1nb/ba2nB5uY=; b=mt+NEPdrKCI7GvV5VPObis8QyzDy6SsV0r+tayNSGOPtIvRXighhnRJQnxlB5KHI4UlwImBw56jD1Ztygr/IWItsIf3AqQWFTOTzXOsmR0+pjXmPYeBacTowgFaoKfCbc+py/UyGdfEOTuI6cHVJgomi8t7nKPz+hVjZLENagKsA+as+Pzt1PKozt1L4QEWN43tvfSlphXwEqpWF1cBIHZak2pOq3sntDvX5tve10sIDCwJxZS9X1hzYweB0pD0J/nfgeEWq/kKf1y/z9B8VIU7phq4CDOm2ZA/aIyNUWXExpPwb5HLvalqhV6cRJaz4t6gUNsQ3F95YyiUumgzJQA== 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=LHgz/lFtijHK41pa6ALEsVJ/2xu953e1nb/ba2nB5uY=; b=Bj7JhESX8mXs3xrxNAluzyFfsc9t2O/jg6aAImTvyaYQwH91v6ru2pcizcOAWVftmag25IlW3YbsvQbm4zUjlyCQvGu+sVS9fW1zfzhzBSgMAc4Qg0hrWG2nkPPcXQlkX8clBhCGXGAZs7xZ2NVteQnueoKGv//GrxhKasdiqJ8= Received: from DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) by MW4PR11MB7005.namprd11.prod.outlook.com (2603:10b6:303:22e::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9320.18; Fri, 14 Nov 2025 15:08:09 +0000 Received: from DS0PR11MB8205.namprd11.prod.outlook.com ([fe80::c508:9b04:3351:524a]) by DS0PR11MB8205.namprd11.prod.outlook.com ([fe80::c508:9b04:3351:524a%5]) with mapi id 15.20.9320.018; Fri, 14 Nov 2025 15:08: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: [RFC PATCH v2 02/12] greybus: cpc: introduce CPC cport structure Date: Fri, 14 Nov 2025 10:07:28 -0500 Message-ID: <20251114150738.32426-3-damien.riegel@silabs.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20251114150738.32426-1-damien.riegel@silabs.com> References: <20251114150738.32426-1-damien.riegel@silabs.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MA5P287CA0046.INDP287.PROD.OUTLOOK.COM (2603:1096:a01:175::12) 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_|MW4PR11MB7005:EE_ X-MS-Office365-Filtering-Correlation-Id: 8faabfea-14ec-4d41-5a5a-08de238f9f0e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|52116014|366016|376014|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?WmkrUVdRd0NxbUMrdlA0SDZWbzVzSWVCUFhmOEFFM3A3Zk5hTWpmZmFvYytK?= =?utf-8?B?eC9VL3ZzTyt5aHlUQmRWRGk3UXJEMngzbmFvd1RUNnc1UkhmVmdSNXo3eVhh?= =?utf-8?B?cWtlbUpaQXFhdUhndHhDK28zRlFwTWRXM25TQy9hc1ZyaFRjNVhGS3I0SFlH?= =?utf-8?B?Rmc0azdaNmM3ZHBnTFpvblg5TmhVQW5ReGd3QkQzSlRUVzRuT202cHMxbzZr?= =?utf-8?B?aE5QZ1drRWJXZ3ZobCs4dVZJbE4zbGl6OE5wYVVlcjNEOXkzTlpqQ2VUVWpK?= =?utf-8?B?OE9Lem92VFUzWVNmNjM1VzJvNUJ1Y2U1RGxWVlFLSi9ZcWhxSkFpR0MwMTdR?= =?utf-8?B?Uy96eWdsSFUybUZ2Z2VJU2xyMzBTRWcvbzc4eXVCUXg0TVlPaVlkS0VUR3Vm?= =?utf-8?B?bHNNSFhlUEZaSEcrTnVFMGtsbEs3TEk5VzBJenMrZGEzU0JseVd1c1ErbnBY?= =?utf-8?B?QUxlZ0JYYkpObWhjdWordTNWRDlDRXpDSkRGdlJYTWZXbm9lOFFoaTY2cUN5?= =?utf-8?B?K2pSblJkdGdCVW5md1ZMVmtDWm82UDFWRjdMYmhwQW9ib2lRNDEzNDJmdVNP?= =?utf-8?B?TDQzcGt6TzlXUktSV0pxTnV6RDRNSjNKZksrQmtxbTJhcTI4bEt0MmRBWGp3?= =?utf-8?B?Y3RlWG4zRUJPWDZOTWhxanowdlNlU0NKUUZPdDEzVDdEU0NVUWZseXFEVVpG?= =?utf-8?B?M3dQdFo4bXNTMmtqbEl4d04rY1B2NWlSQ3F2bVdRbHZEVEFaRERIMDFVQkJJ?= =?utf-8?B?d1lIakdpeEl2cnNNMSsyQXkwcHk1NzFEcnJuWGk1cVhvODd6Y2RkeXdrRE8y?= =?utf-8?B?dzJManVwcEhtMlhYejJDcHlmamtDQmVPSTJYTTNPOXk3bVR6c0VwZ05kclBi?= =?utf-8?B?ZlIvT1lFWkFWMXljQmJFT01WVHZBY3Rna29yZmh3U0JkWFJqcUJJemFNODNv?= =?utf-8?B?bi9PRlVrUDV3R3JIdWRDcFdGeU54RW9NTTFOUTVpOVB2cFh1N0VScTUvbXQ0?= =?utf-8?B?VDZDT2REYjAwZVQyRy9tTlg1ZGlUaW5wTTEyZVZaWlNtR0JQSG80ZUNMZHRW?= =?utf-8?B?QWoxSmIvWkI2M1dydzZ5YTdINFl6WDlGeWw0K0hRams0bms1M05tMXdQd1lD?= =?utf-8?B?eG9icjJ3ZFlTQjV3WkI0L1huWU5iRExwVThiam0yWGZkK21KSmdQbEd2REVC?= =?utf-8?B?QWZSaCswd212YXBJTDZTNEkxeFU5bnViVW81MHNaaWhCZzlia3JOQUIxZlhs?= =?utf-8?B?VEVGVU1lLzVVRGpzaG5YMUVCV1crdFpyMFpnZVVSU0dHb0tGdzVYS0JrdXpm?= =?utf-8?B?QkNiYXgvbWJUUzBEQTlYSTZxZUlWUldZdHBTSUZZeHl2NzkxWXVPWDlmTEZs?= =?utf-8?B?TlFoMlBvYmI2bVhtd3I2enlHaU1wT1ZQQkE1d1hsa040NTU2Ulo0NlVjbVFU?= =?utf-8?B?c3pRL3FzRjVJRnp1MEFBbU4yc3N4c1dzdFpsQlBVeHYvN3MzSU56Z3VCQlFo?= =?utf-8?B?TEk4TVpCdU9IUnZwUjQrZlBJMVRrR3pZeTZnVUo3WFNSUWRmK2lteXRCRkhm?= =?utf-8?B?VkxLSlVZRzZoUFQvT0FkZW96bFVidENKRDREckJqbGpZSkZTRzV4QTQ1QVdh?= =?utf-8?B?Q0JBamhRQTVrNkZldUplQlZOdUFwYXBTZHJBd3VRQ3czUzZzaExyWlNPbWtt?= =?utf-8?B?b3ZZSGdVdlZHajVjTzJQbXFlQWVLN3FmaEJwZ2FhUnY5T0NwN1lPUk5LZnF2?= =?utf-8?B?K3VXWXprV1FrazRPSzE5czRrVjRMelpVWTZQWjZoaW5CeXlkYlZPNDA4UHF4?= =?utf-8?B?Vmh5bWMwMWNnb29IVmNLQ2RINmdKTmRaaTJ4eXd1QXJIZkswRzlGRytqOEox?= =?utf-8?B?UWVtUjBDRnR6SjdoZk9mdXE5V2xTRmp5aVhvV1ZrdFVXbS9odTBmanVoS1px?= =?utf-8?B?SmlWakw2VVdVQmQyNXFJK29OZzRSZlB3S1dSZkk5ZGVMbGlxV2Z3T3NCTmU0?= =?utf-8?B?a0QxMGQ5TzV2Vm81R0FoRHE4MlZCd25SYnQyOHY1eTBhVWRiNmlZOXZ5ZElp?= =?utf-8?Q?oQEJDC?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR11MB8205.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(52116014)(366016)(376014)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?cFNFMDdXMGVaeHFkZ256WWpnYllnM0U1M1hoeFRMbERsVTNST3BjcGtnczY3?= =?utf-8?B?blo2MzlBUmJYS3lQY3lINm5ubDZwYVd1QzArVDhLZGNwcDJKUDJZQ0srRkUx?= =?utf-8?B?Q04vZ3o0V1orNmxzbFFMdkd6MG1RQzNKOWJnTjRRbXdNeG1KbzM2dExuNUt4?= =?utf-8?B?Ynhmcld2bHpHcDFXMHE2OW4yZjFQQWlWcGRPNFdMZFRvT1gvRm5GMWZ0UTRJ?= =?utf-8?B?MHRia2lHMmppRWpOR1M5d09tT0lHSUE5UW9DL2thYUt6blMvWEVjc2VrWTJy?= =?utf-8?B?TElMRWVUWjFOZjRPN1ZjL0ZuN2V0WDhtbXUraGNVbm0rdkJRKzVHUkRyUGNH?= =?utf-8?B?dm1SN3NPRXYydE5iY2pyeTR5UElqYk1Xb0x6UXViKy9lZExQN0NIb2FBNHls?= =?utf-8?B?R1I4STdIdWc0bi8vOVlHTEtLaldDNGI0ZVhDR1R2cEhRc3NUc1o1OUhBdUdV?= =?utf-8?B?Y3ZMeGN2T3JCQkJFUkxnOTB6QkJoYjlyZm1SSndGMGhxZGc0dHV6Y1JldEJ3?= =?utf-8?B?SEdCcGpPakdkT3BYeUJnQjdmcmI3WTZLdzZSLzArWUVyN3Jua2NhZ3BVaTFP?= =?utf-8?B?UDc4ZUMxL2Q3U0RGc3lFM1lmUW1SV1pLcVIrZUJ4VHIxd2haaVhIdjJvQVVB?= =?utf-8?B?Q3NMdVRqMXpwcnArOFROditQNXlwN0h1L2gvMWJBUlVOc3pSNUFDSkFOTS9D?= =?utf-8?B?dmxlKzNzSjIxR1pWYTM0ZGJ1RCt1dEFiT2l1WFRiVkx6d3dhZGJLNTlwZk1F?= =?utf-8?B?Z2luWWlOeWlkY21nVXNrYTRaNHlUZE03a2hqaVdORWFaUmxPYXRjQTB0VHha?= =?utf-8?B?RXZmTzJ3M0JaeG1DTG9XaVhMMGdxMFhlLzl5c2FhSzhVbVpZZloyd1NZdHFE?= =?utf-8?B?NlhWZllXUytjemZIanJjM0xiT1gzRkJCUU01NVJrSjBQZ2tnd0JmNlFwL1U4?= =?utf-8?B?Z1pZN0NEUW1ZZThCUEZaZGh0TFBlS200UFNoem9UeEkveDQ4Szk4TFo1TlB1?= =?utf-8?B?eEw3MEV4WEVTMkkvNTR5VlV6SzluaVdhTXczNjNRRkFNd3lPcUI3YjEvbnFl?= =?utf-8?B?NnZVT0d2WXJ2WmFreU5HZmhSR2xPU0Y3M2xHY0hoZ3EzSnBpZVVTdWZkRHlG?= =?utf-8?B?bzU1bWUzZWRjMFV2aFVCQVNRaVFCRGU3VnMwbkVZR01HT1g4TUpDMFBKamI1?= =?utf-8?B?L1c5SCt2d2t2ZW9KKzhmTmx4MExDbDlQOWhKM3Z0SjUyMklBa0E5cGorWmJ0?= =?utf-8?B?YWYvT3JlMGhxWnB4QTl2Q1VIY3M4RHdqZHR5UGxmN0VuRVhHVExXZGZJTjBp?= =?utf-8?B?MHFOZ2pyTnpKUmtySndHekw1RXZzUW9sUkhHWUlXWDR6QWpwUnJWd0ZkVVpy?= =?utf-8?B?cWlLay9HRDRUK2x3VHZ5UFNQMFFmcy9iYVJqOW13OVU4NGQ0NFpBU1pzQVU0?= =?utf-8?B?SWpuZGxDWHNWc3VJRzlaUTN0TEJVVUJYeEl5WTRZM2hzVkdhT3hWYUR0WkNq?= =?utf-8?B?MG1SWDNwMjhlbjg2Y2V0M2Fwd3FuQTdNbVF3a1J3eUN6aElDay9QdTMrNlZM?= =?utf-8?B?enc0cmlKdFhtT2RUZHplSW11TGlHakpWQXZUSzJNZkZRWWtqZFM0dFUwU1I1?= =?utf-8?B?bElPN3lPWitqa3BvaDBhSmdUY09qcXM0M3Bmd3hyQzdHbkpaRDJVSTJ2YTJx?= =?utf-8?B?UVhVc0FiSU5hNUMvbVNDVUhRTnhmeVFCNkE5cnZTVzY1NWUvUmkwWXRsUkxK?= =?utf-8?B?NHV6ZXV0WHRoYzRzb2FlaWpkdzdLazBjUVN6RmZ6NzJja3hvbjFFWlRKTzRo?= =?utf-8?B?WkVPS3dMSWM4MnJxa3lvSnU5MFl6YThEUkxVSmJRZi9oaVZxK1lPN044WVZ4?= =?utf-8?B?WTU1MTdFT2g0SWJReUk3SkFZSitQQWEyMHZpT056OStmYkhlSWVwQ2lFV0FO?= =?utf-8?B?WGlRYzQ4RFNVaEJhT1VROWZXSnR1empveDVGWUxTcEZYOVZkMGp2WkxmTXlK?= =?utf-8?B?dzVqeUtJVHdlem51dTFZbTBOZkEyVmxjdE5MSHBma0pBTC9BM0d4N09Sd2d3?= =?utf-8?B?c2pacE1LR1pkM2l6VWFKTG05QkwrbkNobmdpZGwvdnhSclMwUVVNNXlFS3dH?= =?utf-8?Q?Txui5GwbuKZCy1zXGOQcG+ePx?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8faabfea-14ec-4d41-5a5a-08de238f9f0e X-MS-Exchange-CrossTenant-AuthSource: DS0PR11MB8205.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Nov 2025 15:08:09.2587 (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: b/uVyT2trol1AuCmCSy734D/f978lDklLPn8ZUGvCH13iyHjH3ODf0OPpU3/0rgKJjE7iRp34nZ4zMJ30A8VIg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR11MB7005 X-Proofpoint-ORIG-GUID: 6jNEiEn7_1Kc-ZEVPm3ffQV9MoUCk99r X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMTE0MDEyMSBTYWx0ZWRfXyrm29uKpkmyB 2uyMoQA6pa2+cTwRmoSZvi9fWqQ2kwLuf0+jpWfwQnGY6wMql5ZkrOsRozEfdebSc2VX2PlRi0G iPhW0LI8OUWKhESxuZ4PJ9Ehul95gEi6HnDjV5ue5vejt8/jEkodIv/YYQDwxhxBku7ZUKdeYyF KJ+U4JI6DXRO0nuR/ksakZVNb7jUxz9FdUXyWty4nme65zRajnlKS5iJUJA4Axkz4C7DTbHsxG8 Tg0cT/7uhXjitc4fcRts7COVsFQBDZuzq+lI9FFVaO62TOYfImSeL3HkkbD9wcV4zmk4xHqqMNL TaTSL0Pug8Ta9yDRrswsowELFhBLC66Duhe7JQcmp75vEhMA3WfqdMsmluSiBEtU8dp/PcVtkd5 3JM62Q1DlVLDWnbm1tA2Q8I28iiffg== X-Proofpoint-GUID: 6jNEiEn7_1Kc-ZEVPm3ffQV9MoUCk99r X-Authority-Analysis: v=2.4 cv=LfAxKzfi c=1 sm=1 tr=0 ts=691745db cx=c_pps a=zUXba1i+DNHe9EVMNcbDHw==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=6UeiqGixMTsA:10 a=M51BFTxLslgA:10 a=i1IsUcr2s-wA:10 a=VkNPw1HP01LnGYTKEx00:22 a=2AEO0YjSAAAA:8 a=iqUPcmWXN_vvxTOgPeMA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cPQSjfK2_nFv0Q5t_7PE:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-11-14_04,2025-11-13_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 bulkscore=0 malwarescore=0 impostorscore=0 lowpriorityscore=0 spamscore=0 clxscore=1011 phishscore=0 priorityscore=1501 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2511140121 A number of CPC features, like retransmission or remote's receive window, are cport-based. In order to prepare for these features, introduce a CPC CPort context structure. The CPC Host Device module now implements cport_allocate and cport_release callbacks in order to allocate and release these structures when requested by Greybus module. Signed-off-by: Damien Ri=C3=A9gel --- drivers/greybus/cpc/Makefile | 2 +- drivers/greybus/cpc/cpc.h | 29 ++++++++++ drivers/greybus/cpc/cport.c | 37 ++++++++++++ drivers/greybus/cpc/host.c | 109 ++++++++++++++++++++++++++++++++++- drivers/greybus/cpc/host.h | 12 ++++ 5 files changed, 187 insertions(+), 2 deletions(-) create mode 100644 drivers/greybus/cpc/cpc.h create mode 100644 drivers/greybus/cpc/cport.c diff --git a/drivers/greybus/cpc/Makefile b/drivers/greybus/cpc/Makefile index 490982a0ff5..3d50f8c5473 100644 --- a/drivers/greybus/cpc/Makefile +++ b/drivers/greybus/cpc/Makefile @@ -1,6 +1,6 @@ # SPDX-License-Identifier: GPL-2.0 =20 -gb-cpc-y :=3D host.o +gb-cpc-y :=3D cport.o host.o =20 # CPC core obj-$(CONFIG_GREYBUS_CPC) +=3D gb-cpc.o diff --git a/drivers/greybus/cpc/cpc.h b/drivers/greybus/cpc/cpc.h new file mode 100644 index 00000000000..85d02954307 --- /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 1eb6c87e25f..033ff7f0184 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 =20 @@ -15,12 +16,95 @@ static struct cpc_host_device *gb_hd_to_cpc_hd(struct g= b_host_device *hd) return (struct cpc_host_device *)&hd->hd_priv; } =20 +static struct cpc_cport *cpc_hd_get_cport(struct cpc_host_device *cpc_hd, = u16 cport_id) +{ + struct cpc_cport *cport; + + mutex_lock(&cpc_hd->lock); + for (int i =3D 0; i < ARRAY_SIZE(cpc_hd->cports); i++) { + cport =3D cpc_hd->cports[i]; + if (cport && cport->id =3D=3D cport_id) + goto unlock; + } + + cport =3D NULL; + +unlock: + mutex_unlock(&cpc_hd->lock); + + return cport; +} + +static int cpc_hd_message_send(struct cpc_host_device *cpc_hd, u16 cport_i= d, + struct gb_message *message, gfp_t gfp_mask) +{ + struct cpc_cport *cport; + + cport =3D cpc_hd_get_cport(cpc_hd, cport_id); + if (!cport) { + dev_err(cpc_hd_dev(cpc_hd), "message_send: cport %u not found\n", cport_= id); + return -EINVAL; + } + + return cpc_cport_message_send(cport, message, gfp_mask); +} + +static int cpc_hd_cport_allocate(struct cpc_host_device *cpc_hd, int cport= _id, unsigned long flags) +{ + struct cpc_cport *cport; + int ret; + + mutex_lock(&cpc_hd->lock); + for (int i =3D 0; i < ARRAY_SIZE(cpc_hd->cports); i++) { + if (cpc_hd->cports[i] !=3D NULL) + continue; + + if (cport_id < 0) + cport_id =3D i; + + cport =3D cpc_cport_alloc(cport_id, GFP_KERNEL); + if (!cport) { + ret =3D -ENOMEM; + goto unlock; + } + + cport->cpc_hd =3D cpc_hd; + + cpc_hd->cports[i] =3D cport; + ret =3D cport_id; + goto unlock; + } + + ret =3D -ENOSPC; +unlock: + mutex_unlock(&cpc_hd->lock); + + return ret; +} + +static void cpc_hd_cport_release(struct cpc_host_device *cpc_hd, u16 cport= _id) +{ + struct cpc_cport *cport; + + mutex_lock(&cpc_hd->lock); + for (int i =3D 0; i < ARRAY_SIZE(cpc_hd->cports); i++) { + cport =3D cpc_hd->cports[i]; + + if (cport && cport->id =3D=3D cport_id) { + cpc_cport_release(cport); + cpc_hd->cports[i] =3D NULL; + break; + } + } + mutex_unlock(&cpc_hd->lock); +} + static int cpc_gb_message_send(struct gb_host_device *gb_hd, u16 cport_id, struct gb_message *message, gfp_t gfp_mask) { struct cpc_host_device *cpc_hd =3D gb_hd_to_cpc_hd(gb_hd); =20 - return cpc_hd->driver->message_send(cpc_hd, cport_id, message, gfp_mask); + return cpc_hd_message_send(cpc_hd, cport_id, message, gfp_mask); } =20 static void cpc_gb_message_cancel(struct gb_message *message) @@ -28,12 +112,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; @@ -52,6 +157,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 fe07826b765..1c168cdd2bf 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 2048 #define GB_CPC_NUM_CPORTS 8 =20 +struct cpc_cport; struct cpc_host_device; =20 struct cpc_hd_driver { @@ -25,12 +27,22 @@ struct cpc_hd_driver { * struct cpc_host_device - CPC host device. * @gb_hd: pointer to Greybus Host Device this device belongs to. * @driver: driver operations. + * @lock: mutex to synchronize access to cport array. + * @cports: array of cport pointers allocated by Greybus core. */ struct cpc_host_device { struct gb_host_device *gb_hd; const struct cpc_hd_driver *driver; + + struct mutex lock; /* Synchronize access to cports */ + struct cpc_cport *cports[GB_CPC_NUM_CPORTS]; }; =20 +static inline struct device *cpc_hd_dev(struct cpc_host_device *cpc_hd) +{ + return &cpc_hd->gb_hd->dev; +} + struct cpc_host_device *cpc_hd_create(struct cpc_hd_driver *driver, struct= device *parent); int cpc_hd_add(struct cpc_host_device *cpc_hd); void cpc_hd_put(struct cpc_host_device *cpc_hd); --=20 2.49.0