From nobody Sat Feb 14 02:14:10 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