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