From nobody Thu Dec 18 03:41:01 2025 Received: from mx0a-0024c301.pphosted.com (mx0a-0024c301.pphosted.com [148.163.149.154]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1708DA932 for ; Fri, 12 Dec 2025 16:31:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=148.163.149.154 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765557077; cv=fail; b=Ws/hbn9QH6TwotDPBLeGnkHvyR05amPvw311p5HgOcA3g79g1rRKqBj+8Fp7tBHdfnV6q+uwWG/9787q3IPnHmNNv9Ut9mzlzbUHoYaW586Mgi8luT69OX4IaKrvTsGZYCbkIeIcjCc2ihkXCCRHIb9FspUptrwaJVgoTonQmoY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765557077; c=relaxed/simple; bh=WySM5cdN2B8UR0z67sWDDV/+VlzLetyNNi60pQG7hks=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Eueh3X+Di4pTbAjhMG5JWjWxB2yVk3sf45g4ilhHvvOgD6liuxOgj17Jf5g4k1E1SvZI18QzgFSiQ/OwJj2X776yaaTJwqTBLcm3ynsyet5c4HjhkWsz05E0tBgLyndeJ+CSMwJmZzfl4TETG87SxySVeK++N3mXiw9E/AXj9JM= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=silabs.com; spf=pass smtp.mailfrom=silabs.com; dkim=pass (2048-bit key) header.d=silabs.com header.i=@silabs.com header.b=EMt72od+; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=FzfBgnDH; arc=fail smtp.client-ip=148.163.149.154 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=silabs.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=silabs.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=silabs.com header.i=@silabs.com header.b="EMt72od+"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="FzfBgnDH" Received: from pps.filterd (m0101743.ppops.net [127.0.0.1]) by mx0a-0024c301.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5BC8WO7Q3748684; Fri, 12 Dec 2025 10:13:26 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=silabs.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pps12202023; bh=dhxAU0ch0XPtQ590RjOqkh/Il+vBEamwneEDNjW9zhU=; b=EMt72od+lBGI /W8SuBPE0/TSy2jWoRiTkKHgmNWWtiot98dViVOiemOJLf71t84sPegFuu2/GtK9 61hQ6d5nHip38XihyN6rUW81oii0QPMRMlHDQg42xs2RYO21t4PiwaIDUnAYWGq1 4ZC+yiyEhaRis2z+441/M1U2Q70ZEYbBXy3ScgOvRDAdOjOf1kUv8obBc++IoDId F822Sx9+p7w5OTGWLFxWnC8kwCfliRJykLJE6YCsQWdnfjTBEzplJw9YTbAxjt1C OMtVxdYWXjIs3t/OVTV0OPESWOY5j1x+zBEHiLQ2WIOVJ1BQtX0wJKDtw7p2XumF gZe7dMsy1w== Received: from bl2pr02cu003.outbound.protection.outlook.com (mail-eastusazon11021114.outbound.protection.outlook.com [52.101.52.114]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4ayht2mdee-2 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Fri, 12 Dec 2025 10:13:26 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=A+3/TsijtzG4Sh6gB0Bj1sO/1q2N7zi6vfRlWBQ2UWMZ8T0FJOYbnaDR6k0H0GnLm1ViKQNzOvkVMhzNyi+FAWxlWXdBAVVFwWkcxPXdhbpRzSxLQEye2eUudL1j1tTPfYj6XD/i3koFAwxzg7KH8dYJCSDUb5Nq/DsDJ7tLINr6qreESTwUFmaTBDTkbugOfvWrGw4y93ynHzFFNewE40RsxfcablYvOZDEGVKZjrRWgkgCbTaU3dnxNa8Xkej2jcp54gZd5xUauDAMZQRgfVgxkCqiEn64hW775gT8pB32ABF4Lzp3Koz7lltgyfihM3e4u+JlUJx/mKwQU4z9og== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=dhxAU0ch0XPtQ590RjOqkh/Il+vBEamwneEDNjW9zhU=; b=ph3fMt3FH1fL8p5ypc3eJ7TbGEnKYcf3PCmxosWj9fsq8bpNivL9RGmZkD+2oO/t3Dd1ueIPRk9kU5OTrrH6nN3KNaA/q1pKRVod9epsd2Hjlu+OY85w9GgDc3StBSOGg7Ip0GN/LiXG5wY0AHOU0h5/yB1izmxgc0PFgeSzwzsHNKHw+e/rN+8+XWaeoG6EP1AJnEEfLua3+QnMy97RIUMNYj3hV7PuOvNNYsLOHtnLqL56UaixyFyw5cFHWI9ejQegxOggxYGWXiyiam+P6d1xTydwYFqSfkpn8CaE7FIJuV5iq+8nq2TBsKGTKdqqxKy1PdRPUhYN5B//h79Jyg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=silabs.com; dmarc=pass action=none header.from=silabs.com; dkim=pass header.d=silabs.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=silabs.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=dhxAU0ch0XPtQ590RjOqkh/Il+vBEamwneEDNjW9zhU=; b=FzfBgnDHI2JgMS+NPUzeAJ1AeS48Wg/qhXnRw1DXOLjVv6+h4iPSFKqc7or6bAFN0XaDscDmpvUmWh91ja/+gx7/GDhiL2bu5VrCpLnKMUvPaxyIFJJl2i/eHRKNJefHB2/pY52nZyhFExkw/wJyqUtebtetDqC3kva3j0ipFsw= Received: from DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) by MN0PR11MB6111.namprd11.prod.outlook.com (2603:10b6:208:3cd::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9412.9; Fri, 12 Dec 2025 16:13:23 +0000 Received: from DS0PR11MB8205.namprd11.prod.outlook.com ([fe80::2de6:bc88:2af7:3583]) by DS0PR11MB8205.namprd11.prod.outlook.com ([fe80::2de6:bc88:2af7:3583%3]) with mapi id 15.20.9412.005; Fri, 12 Dec 2025 16:13:23 +0000 From: =?UTF-8?q?Damien=20Ri=C3=A9gel?= To: greybus-dev@lists.linaro.org Cc: linux-kernel@vger.kernel.org, Johan Hovold , Alex Elder , Greg Kroah-Hartman , Silicon Labs Kernel Team , =?UTF-8?q?Damien=20Ri=C3=A9gel?= Subject: [PATCH 02/14] greybus: cpc: introduce CPC cport structure Date: Fri, 12 Dec 2025 11:12:56 -0500 Message-ID: <20251212161308.25678-3-damien.riegel@silabs.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20251212161308.25678-1-damien.riegel@silabs.com> References: <20251212161308.25678-1-damien.riegel@silabs.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: YQZPR01CA0176.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:8b::25) To DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS0PR11MB8205:EE_|MN0PR11MB6111:EE_ X-MS-Office365-Filtering-Correlation-Id: 2acf8c4f-a69a-4ef5-eb1b-08de39995f78 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|52116014|366016|376014|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?amoxdmFkYUNTY25NSjBpZUlraytVWWo2dUFFMW1oY1NNZEdUMlRJODVnY3Mz?= =?utf-8?B?NDgzOUhpaDB6R0xZODJWOHRYK0k5OWFzWEN5QnhZV3lSYUpHUjhEK2E1S3Zp?= =?utf-8?B?L0h0T0psSEhrNDhqazFXS21HUG1Ic0wwTVlUWDVGTGlYMTBjb1J3Q1lpZmhL?= =?utf-8?B?YWlDaldwMCtBK0IwbnRyT2RZcU1xTzFaWjk3N0xiYUxNdVg2QzQzd1Y5ODhC?= =?utf-8?B?T1pUM3hsd1ROeFRvVVh1enJXR3RMaFZGY25sS1owNEhYWkR5MktTaUt6ZUg3?= =?utf-8?B?NitVY09zUERPdXhMbTU4UnpMcHozUjdvb1VWTlFoaGI2aXJPeWtoMTZ6d0g2?= =?utf-8?B?eHhxZ2VqZkk2NXh3ZmV6cUNrMGxnWUpNVTlLZE5uNk9tRmJuZUVHYTdVK2F4?= =?utf-8?B?a2JjcGZOOHpVbjgxRU5vVzVZZ3loR3BUckhoRkc2VVE4ZVhsQ0V0Q2xlaXdK?= =?utf-8?B?T1FJWEwvbG5RQjIwMVBSbHRUenhocm5vb2xpQXdJWCtzcnByLys2NEVGU2Z4?= =?utf-8?B?dEQrcU4rblRlNXQ2MVl4VnZDc2hlWUg5aTVSb2lLb2UzMGNkd2NYL3lJTTJP?= =?utf-8?B?UE9tMDFmeVZ0a2FTQi9zNG9STFJhZVVSRzQvdFJRK0NWQmdtdEZNcWwvZmJ4?= =?utf-8?B?cCt6NXFJL1hERGs0M2ZZc2lhNUNhNWxaMmxSWlhtWEZTVjlhalBVTEFBR3c4?= =?utf-8?B?WEJGTWFWTm1CV3lWRW4raUNlQ2VnVmwwUWJDZUFtenJUajNLbXF6WUxwQVpk?= =?utf-8?B?amNybjhWd0NYaHNNK3p5UXRmNkJabm1idHFPVVB4QVZ6S3hXOVl1UlhDYm1Y?= =?utf-8?B?Z1ZSN1hQenBhcUIza3B5VEpwNy9SYThLNGk1RGtvL2FVaXhtbFRTQ0FyUG5y?= =?utf-8?B?dnk1TnFuRmx0bDJOc1MvR25hTWU1eTN2Lzc1eWxJeU9tS0ExajAzem9ZeVFH?= =?utf-8?B?ZHBNVzh1VGhOVHNJaTJ6VGFHeUFYL25iVko2dXBSdzVzRzBaaWRpZGlNaGRK?= =?utf-8?B?UldlMGtCN3YvZDVxZDBaWFVNL3hDVHR4ZzFMQnpHY0QyaHBabktYZS9zY09G?= =?utf-8?B?aENhdGlORWtOUVMwVzhweW5BVDY2M3NzblVOM2tLcUcxS3E1OFdMREpFK1ZQ?= =?utf-8?B?b1FvNDEwUDVGeG45eHV1NkVEdkV6WFloNGtVSkxMd0QrQTd1UUdJMnhvb2Js?= =?utf-8?B?L01SV1JPNC81ZDlLRFIxc2NIUjg0Z0tWd3pSamNmQldsRmp3c0JkY2RFTmlZ?= =?utf-8?B?STl3cmRlZTYyVVRlTkV2SGVMcmtWS3h1bVdncDlGcE84UEFwWWtLNHJGem9U?= =?utf-8?B?ejVBRUV0M29raWliTjgrQklQM1FrTzg5cnJuUi9QamVwVUJYRzhVdjVkNG15?= =?utf-8?B?OFRzeWRjZllsMW8vL21rTzVZeUIxZWVLTkR4MVpTY1RUZml2YTdsckZuQmc0?= =?utf-8?B?M3Jhdk92SW5MYXluQlI5dWtVbVhqeVhjbWpKRkJGWkd3STdwelVTcHNoQ3cv?= =?utf-8?B?Yi9Ka2tyMGRkUkNFQ0kvMGtjTTNtZnN1VUlldmt0OE5mQnJyeVBrUUhhMU9h?= =?utf-8?B?c1dTQyszaXhXKzJycDZJVW5yWmNsUkVReU1ESzU5VkVqd0tzNXFWaDFaRjhj?= =?utf-8?B?RzRMcHJpZzRzNXZQNXN0eUo5citaQVN1Wmt4TmZON1ZLSldxcGJINXhKeUgy?= =?utf-8?B?cUlFbU5HblZTcTFqbGEzTHVYaDIwSEp3NUNreTRISDdTWWRWazlkdTBlaVF3?= =?utf-8?B?SFFtZWM5WFFHNjMrakhqbERjeFF0S3Fpd213ckFUVmRqZ2RsaDF6NlkwTWVu?= =?utf-8?B?NzdUTzk1UkpBemhIcTNqL1d2WjZHdjN1K3BzMVFpTUluWTNRamxkZ3psNTRx?= =?utf-8?B?Mko4aUplVWhuV1pMQjJaSG5XV2pwM3BUbExXejhPQk1CWHVQNjI2R0krV1l3?= =?utf-8?B?NDNBbHJPQmRRa0UybHlVSHZqeWI3NSs0bktaQkxLY0dSaWpZOHRsK3djb0Zh?= =?utf-8?B?ellHM2szKzRqNnIrR0pOb3ZxTkdRLzJNU1V6aWp4aTA2bUZSMjhGeVBTd1JW?= =?utf-8?Q?t61BXl?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR11MB8205.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(52116014)(366016)(376014)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RllzTE5wUVJvRzFpUEVHWU44ckp4dVpjT0hrWndHZlZTM3FjY2l0L2RlRkwx?= =?utf-8?B?U0FDTHNNWHFnVmJPOEJZbW56WmZkN1hLRFB2MmRxZHpSbnMwWFFETTNaVEts?= =?utf-8?B?MmdHVFU0RHkyZmM2d1htdXFLRlkzOFlubkFmTnlveHl6VFRtOHlOdW9kelVY?= =?utf-8?B?UTJDV25mcWljMHA3c3hhNnZFd09xaWRRaUFnYlJWTUtGVTBXdlJOU3lCdVZE?= =?utf-8?B?RXBCWW52MGNERGFrTEdIOWpxZFgyU002cWZncnpRUFFxNFAzMTRnL2FnK1k5?= =?utf-8?B?Q1ZPMGpwb2xrbVllc3NRWHk0dFlNaVNnbzZyMjhUK280R2RjTjJzZnpDZU9F?= =?utf-8?B?YTREZ0NTdGFOZzlVMzd2eHcvdWF2bUp0ZFJYR0Z0OHBuQ1JPN2R4Q25FU1lt?= =?utf-8?B?bUd0cGVQSTUreWpUakxJR1U2K2d6eDltcFFoMTIvTnlUdmpWdXlXNnRZM1Q4?= =?utf-8?B?aWtxSmYyUW1LYVdRZDFES1lCdTI1bktrcXA5aGRSTjNGNDNONkJycjhiejJM?= =?utf-8?B?aXM2ME9ZUmdUQ0VpSkNuV1BJTFVOcWxmUzN2ZFVwcnBiZThyRitDNTgvY1N3?= =?utf-8?B?SFVpSzZ3VFFhQmVORTloV00zclp0VHJ2MitTYlpDNDBoZ3g2S3YrN01odE9H?= =?utf-8?B?Q0FMdkREK3lEYUpVSnh0clQrdlQ1MS9SQmY3YU5FSjRZNHFqRXY4Nm45SGVk?= =?utf-8?B?ZFRiUGx2VjVKNzF1UktJc2dmUW5TT25NZVI1ZEo3VFJtMEI5UGkyc0Y2Q00x?= =?utf-8?B?dFI3WkdabXNnQjVXV3gxaTJwZzJZcnZDWUpkL2FSYlpac3ZnSXRuellwQ3FO?= =?utf-8?B?Z3ZDWURSSFlMaHQwRFhONmJWMTJDWmNIV21ZM01GNExCL1BrOUxVdmltSjdN?= =?utf-8?B?NjdMZko5K1JIb1FibThKbVMvMFA2MUVYZzdZRnhkdk90bHI2ZG9RTWpjN1Nx?= =?utf-8?B?Rm9YRUhJUGtBSUt6M2J1SXp1ZVc4ek5aNmRJQnhMN0VhekJjMmNPajFxZFlN?= =?utf-8?B?MkZQeVlyS0dPRzlES2NzYXpnNXoybmp4N1NkSDFpOGhBWUE4U29QN1dqZ002?= =?utf-8?B?cFRKUXJ2ekxwVXZySklNUXRPUnNEVVVoS1lTWmdDZlFMb2FYZk5iclhGdmRM?= =?utf-8?B?a2dLa2hBL1RWdm5GSnBDTWJBN091bS9BL3YvazkwVWY2SHVETjlEMEMwNE9q?= =?utf-8?B?VjdnYXBha1lMYUd1ajdjZjJQSkFZM0dNU3JYU0M4Zm5pRUk5K0lOSHUvWGhW?= =?utf-8?B?RHg3S05WVjZnSXh2clp5M2ZNb3ZTSG03UGszL1YzbXNTQ2pvMS9iblJRMTVl?= =?utf-8?B?M05rYWxCRkRpNGtUamR1NWM2YktDWmZCTEIwVXhkejVGNnl0cXcrbTI1RHZU?= =?utf-8?B?a0I0SlZ0ZXhEN2xSQjIwc291ZFlxMFVaR0Nzbzc2ZzhkRzlCL29KWE83TlFN?= =?utf-8?B?dE9aeWJBYkVxUUdVd2RxcERMSDZ6RGJKZzFQU2NFdGhyTmd3ZmVuM21JVTJs?= =?utf-8?B?WlFzZHFrR2pwdGwrVzRSQURuQnZkblc5WlNTRlFCUVpUMUxNSlEyd1pHN0Zp?= =?utf-8?B?anRCSU9zZlRtR3RDSnZzUkNBNEo0MkFqc29BMC8yQnYydGRlSndDYlB0U0Iv?= =?utf-8?B?eGoxWFQ5VEJsMmJvS2w0Yk9rR1k0RlhQZHlna1JKUkFyTk9NMDRLMnF5Q3ox?= =?utf-8?B?OXhuZzFMYVVuREZlT3hPUWhkRXA0M0FwbE01QnFOOWlUS3BmVGdaYzRReWJh?= =?utf-8?B?djN1K0gxaG1FU3JJdUcrOCtLL2pvQ25jSDBBTS81MW4rWldJSGpBd0F3aWh2?= =?utf-8?B?RkxuemEvMTlQSTc5S2p0d3VZay9FRCs2cmUxcmVSVjQ2QU56Mm9vS2k5VzF5?= =?utf-8?B?ekpIVFhNdDhnZk1jcVhEZXhZUFpIOFFGb1lFRXd6WTRZVGFsMGJGZWRQZzdB?= =?utf-8?B?VDhXSlh4MVNtMVhxdTRUeU52RzdMaW5DNC9hN0daS0ZSbGhYZi9zd2dkSXdQ?= =?utf-8?B?ejZVOTJNRktxSUZsVFpucmFXWXFLN3JZeHBkaWpPaTNRbDhUdmVWajRMd3dZ?= =?utf-8?B?N3dtc3EzcHBXdzVvRUxTM2RIbW5PRi94aFBXdUttM1FrYVFhekpETEpwY0dj?= =?utf-8?Q?izo/ZsCr11fLLSuGAj4w/m3rV?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2acf8c4f-a69a-4ef5-eb1b-08de39995f78 X-MS-Exchange-CrossTenant-AuthSource: DS0PR11MB8205.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Dec 2025 16:13:22.9560 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 54dbd822-5231-4b20-944d-6f4abcd541fb X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: IZz8lnyxwcoNj3vJVBLjrK3mXvwKSEki3DyuS+xR4d9dXLrqL9ujo4nJSofueopGHroUDlQNlKftX+tvPMl1NA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN0PR11MB6111 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjEyMDEyOCBTYWx0ZWRfX/w3j6oxnCjuK jP7IKoV3UzAkSxSq0XsxJFyo4ImZsHfYWwTi3znhfIhghZT7gy9OCJI31nSjJ3YFXef2lA1YYOy IxaZWjJkdtnObv1zvpcrcCcYu//kd5KHL1adqiXlrvSQwI+0hyiHglzN/ZfQwYD/QsGCNC+QIA5 WZOiRy+4PkWNv+uc2tWJq0MwWkhjPJKF7DRNF6qNIyY9H/j2Wi165tyrL2rVdZFJDgOsTHHeFd7 VGghlbdqLY2Z3f9PIIeos+TLZU6QmWV/tGvJkKJuRkUUhF4VEvQjgqlqHV4/UhiDr5ZzFXNfMKu weNw48EmRXdG79Jxn1zYw7Ll0amtSix4mGeMSHhHlYgzW7ynbSCrKwYSzP+ZVnCS0L8TdPtyHv5 cc+nkxQjUNpFfAcW9QJZtEaTxhUx6A== X-Authority-Analysis: v=2.4 cv=BKy+bVQG c=1 sm=1 tr=0 ts=693c3f26 cx=c_pps a=iJ0/73tnBOJCmN8OdmQeBQ==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=wP3pNCr1ah4A:10 a=M51BFTxLslgA:10 a=i1IsUcr2s-wA:10 a=VkNPw1HP01LnGYTKEx00:22 a=2AEO0YjSAAAA:8 a=iqUPcmWXN_vvxTOgPeMA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-ORIG-GUID: WaWrtXISp0wT4NwjDn6E21csZKqWNA1g X-Proofpoint-GUID: WaWrtXISp0wT4NwjDn6E21csZKqWNA1g X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-12_04,2025-12-11_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 spamscore=0 lowpriorityscore=0 adultscore=0 impostorscore=0 suspectscore=0 bulkscore=0 phishscore=0 priorityscore=1501 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512120128 A number of CPC features, like retransmission or remote's receive window, are cport-based. In order to prepare for these features, introduce a CPC CPort context structure. The CPC Host Device module now implements cport_allocate and cport_release callbacks in order to allocate and release these structures when requested by Greybus module. Signed-off-by: Damien Ri=C3=A9gel --- drivers/greybus/cpc/Makefile | 2 +- drivers/greybus/cpc/cpc.h | 29 ++++++++++ drivers/greybus/cpc/cport.c | 37 ++++++++++++ drivers/greybus/cpc/host.c | 109 ++++++++++++++++++++++++++++++++++- drivers/greybus/cpc/host.h | 12 ++++ 5 files changed, 187 insertions(+), 2 deletions(-) create mode 100644 drivers/greybus/cpc/cpc.h create mode 100644 drivers/greybus/cpc/cport.c diff --git a/drivers/greybus/cpc/Makefile b/drivers/greybus/cpc/Makefile index 490982a0ff5..3d50f8c5473 100644 --- a/drivers/greybus/cpc/Makefile +++ b/drivers/greybus/cpc/Makefile @@ -1,6 +1,6 @@ # SPDX-License-Identifier: GPL-2.0 =20 -gb-cpc-y :=3D host.o +gb-cpc-y :=3D cport.o host.o =20 # CPC core obj-$(CONFIG_GREYBUS_CPC) +=3D gb-cpc.o diff --git a/drivers/greybus/cpc/cpc.h b/drivers/greybus/cpc/cpc.h new file mode 100644 index 00000000000..3915a7fbc4f --- /dev/null +++ b/drivers/greybus/cpc/cpc.h @@ -0,0 +1,29 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (c) 2025, Silicon Laboratories, Inc. + */ + +#ifndef __CPC_H +#define __CPC_H + +#include +#include +#include + +/** + * struct cpc_cport - CPC cport + * @id: cport ID + * @cpc_hd: pointer to the CPC host device this cport belongs to + */ +struct cpc_cport { + u16 id; + + struct cpc_host_device *cpc_hd; +}; + +struct cpc_cport *cpc_cport_alloc(u16 cport_id, gfp_t gfp_mask); +void cpc_cport_release(struct cpc_cport *cport); + +int cpc_cport_message_send(struct cpc_cport *cport, struct gb_message *mes= sage, gfp_t gfp_mask); + +#endif diff --git a/drivers/greybus/cpc/cport.c b/drivers/greybus/cpc/cport.c new file mode 100644 index 00000000000..88bdb2f8182 --- /dev/null +++ b/drivers/greybus/cpc/cport.c @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2025, Silicon Laboratories, Inc. + */ + +#include "cpc.h" +#include "host.h" + +/** + * cpc_cport_alloc() - Allocate and initialize CPC cport. + * @cport_id: cport ID. + * @gfp_mask: GFP mask for allocation. + * + * Return: Pointer to allocated and initialized cpc_cport, or NULL on fail= ure. + */ +struct cpc_cport *cpc_cport_alloc(u16 cport_id, gfp_t gfp_mask) +{ + struct cpc_cport *cport; + + cport =3D kzalloc(sizeof(*cport), gfp_mask); + if (!cport) + return NULL; + + cport->id =3D cport_id; + + return cport; +} + +void cpc_cport_release(struct cpc_cport *cport) +{ + kfree(cport); +} + +int cpc_cport_message_send(struct cpc_cport *cport, struct gb_message *mes= sage, gfp_t gfp_mask) +{ + return cport->cpc_hd->driver->message_send(cport->cpc_hd, cport->id, mess= age, gfp_mask); +} diff --git a/drivers/greybus/cpc/host.c b/drivers/greybus/cpc/host.c index 80516517ff6..98566ce7755 100644 --- a/drivers/greybus/cpc/host.c +++ b/drivers/greybus/cpc/host.c @@ -7,6 +7,7 @@ #include #include =20 +#include "cpc.h" #include "host.h" =20 static struct cpc_host_device *gb_hd_to_cpc_hd(struct gb_host_device *hd) @@ -14,12 +15,95 @@ static struct cpc_host_device *gb_hd_to_cpc_hd(struct g= b_host_device *hd) return (struct cpc_host_device *)&hd->hd_priv; } =20 +static struct cpc_cport *cpc_hd_get_cport(struct cpc_host_device *cpc_hd, = u16 cport_id) +{ + struct cpc_cport *cport; + + mutex_lock(&cpc_hd->lock); + for (int i =3D 0; i < ARRAY_SIZE(cpc_hd->cports); i++) { + cport =3D cpc_hd->cports[i]; + if (cport && cport->id =3D=3D cport_id) + goto unlock; + } + + cport =3D NULL; + +unlock: + mutex_unlock(&cpc_hd->lock); + + return cport; +} + +static int cpc_hd_message_send(struct cpc_host_device *cpc_hd, u16 cport_i= d, + struct gb_message *message, gfp_t gfp_mask) +{ + struct cpc_cport *cport; + + cport =3D cpc_hd_get_cport(cpc_hd, cport_id); + if (!cport) { + dev_err(cpc_hd_dev(cpc_hd), "message_send: cport %u not found\n", cport_= id); + return -EINVAL; + } + + return cpc_cport_message_send(cport, message, gfp_mask); +} + +static int cpc_hd_cport_allocate(struct cpc_host_device *cpc_hd, int cport= _id, unsigned long flags) +{ + struct cpc_cport *cport; + int ret; + + mutex_lock(&cpc_hd->lock); + for (int i =3D 0; i < ARRAY_SIZE(cpc_hd->cports); i++) { + if (cpc_hd->cports[i] !=3D NULL) + continue; + + if (cport_id < 0) + cport_id =3D i; + + cport =3D cpc_cport_alloc(cport_id, GFP_KERNEL); + if (!cport) { + ret =3D -ENOMEM; + goto unlock; + } + + cport->cpc_hd =3D cpc_hd; + + cpc_hd->cports[i] =3D cport; + ret =3D cport_id; + goto unlock; + } + + ret =3D -ENOSPC; +unlock: + mutex_unlock(&cpc_hd->lock); + + return ret; +} + +static void cpc_hd_cport_release(struct cpc_host_device *cpc_hd, u16 cport= _id) +{ + struct cpc_cport *cport; + + mutex_lock(&cpc_hd->lock); + for (int i =3D 0; i < ARRAY_SIZE(cpc_hd->cports); i++) { + cport =3D cpc_hd->cports[i]; + + if (cport && cport->id =3D=3D cport_id) { + cpc_cport_release(cport); + cpc_hd->cports[i] =3D NULL; + break; + } + } + mutex_unlock(&cpc_hd->lock); +} + static int cpc_gb_message_send(struct gb_host_device *gb_hd, u16 cport_id, struct gb_message *message, gfp_t gfp_mask) { struct cpc_host_device *cpc_hd =3D gb_hd_to_cpc_hd(gb_hd); =20 - return cpc_hd->driver->message_send(cpc_hd, cport_id, message, gfp_mask); + return cpc_hd_message_send(cpc_hd, cport_id, message, gfp_mask); } =20 static void cpc_gb_message_cancel(struct gb_message *message) @@ -27,12 +111,33 @@ static void cpc_gb_message_cancel(struct gb_message *m= essage) /* Not implemented */ } =20 +static int cpc_gb_cport_allocate(struct gb_host_device *gb_hd, int cport_i= d, unsigned long flags) +{ + struct cpc_host_device *cpc_hd =3D gb_hd_to_cpc_hd(gb_hd); + + return cpc_hd_cport_allocate(cpc_hd, cport_id, flags); +} + +static void cpc_gb_cport_release(struct gb_host_device *gb_hd, u16 cport_i= d) +{ + struct cpc_host_device *cpc_hd =3D gb_hd_to_cpc_hd(gb_hd); + + return cpc_hd_cport_release(cpc_hd, cport_id); +} + static struct gb_hd_driver cpc_gb_driver =3D { .hd_priv_size =3D sizeof(struct cpc_host_device), .message_send =3D cpc_gb_message_send, .message_cancel =3D cpc_gb_message_cancel, + .cport_allocate =3D cpc_gb_cport_allocate, + .cport_release =3D cpc_gb_cport_release, }; =20 +static void cpc_hd_init(struct cpc_host_device *cpc_hd) +{ + mutex_init(&cpc_hd->lock); +} + struct cpc_host_device *cpc_hd_create(struct cpc_hd_driver *driver, struct= device *parent) { struct cpc_host_device *cpc_hd; @@ -51,6 +156,8 @@ struct cpc_host_device *cpc_hd_create(struct cpc_hd_driv= er *driver, struct devic cpc_hd->gb_hd =3D hd; cpc_hd->driver =3D driver; =20 + cpc_hd_init(cpc_hd); + return cpc_hd; } EXPORT_SYMBOL_GPL(cpc_hd_create); diff --git a/drivers/greybus/cpc/host.h b/drivers/greybus/cpc/host.h index f55feb303f4..c3f2f56a939 100644 --- a/drivers/greybus/cpc/host.h +++ b/drivers/greybus/cpc/host.h @@ -8,11 +8,13 @@ =20 #include #include +#include #include =20 #define GB_CPC_MSG_SIZE_MAX 4096 #define GB_CPC_NUM_CPORTS 8 =20 +struct cpc_cport; struct cpc_host_device; =20 struct cpc_hd_driver { @@ -25,12 +27,22 @@ struct cpc_hd_driver { * struct cpc_host_device - CPC host device. * @gb_hd: pointer to Greybus Host Device this device belongs to. * @driver: driver operations. + * @lock: mutex to synchronize access to cport array. + * @cports: array of cport pointers allocated by Greybus core. */ struct cpc_host_device { struct gb_host_device *gb_hd; const struct cpc_hd_driver *driver; + + struct mutex lock; /* Synchronize access to cports */ + struct cpc_cport *cports[GB_CPC_NUM_CPORTS]; }; =20 +static inline struct device *cpc_hd_dev(struct cpc_host_device *cpc_hd) +{ + return &cpc_hd->gb_hd->dev; +} + struct cpc_host_device *cpc_hd_create(struct cpc_hd_driver *driver, struct= device *parent); int cpc_hd_add(struct cpc_host_device *cpc_hd); void cpc_hd_put(struct cpc_host_device *cpc_hd); --=20 2.49.0