From nobody Wed Dec 17 04:05:13 2025 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 99C191FFC59 for ; Fri, 12 Dec 2025 16:38:32 +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=1765557514; cv=fail; b=frlyfU7+Sy9Hp9GA8jUYk/DMJQveqEJFnbXAk7iPVAUEXJ0MxKEJRdQINR0yuZD6PxkBYvutxLXT6+vCatoFchM0Rphc0JDEFdPKDIqCfYziTyoabDKPUoJgZxhCndev/ENrQVUeoyem3pOdqn7xsrO0UUwI8eOBr8VK7SpOf8w= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765557514; c=relaxed/simple; bh=bMUF7+Ym+ot0emFcA0xEJSw+wHbHR0Z0wjcukgTSMVk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=ZJfdMtAA8iwps/V6XCgKM4gSWoQnEmvX8RSl6gYW/PxdTi76wGl5Ks937tFvBBRaj7wrHQgZjQ3GZMpu1RUMoEiGOPftGXuZG6hrFpPnsB1xNDMt7SuM3RKCPT9AJjuObu6c1PRAwWbYAQwFsjHa7QmcWxxcKYKCufPJoXngch0= 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=IUUI66Py; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=LqzyEYNf; 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="IUUI66Py"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="LqzyEYNf" 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 5BCFG5gK2052805; Fri, 12 Dec 2025 10:13:31 -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=w1/5YRaI4nuxJ64hjAemiWucIjxSy6Sf8roGm+BoCtE=; b=IUUI66PyOniD H9jNUAK2BIMIXXpwE+4LtWhEX4Yc3kKb+b44uih1z4a8TSsgnzLnzDQXHtickuu6 81dnhy4SWz92EvPqgPKPrgSnz+ZlqBjatReTfTvrIhpqs/bOVj+wLbCoX5b233Ha gsR0HkxpC4Z+NxH7IXXqJxcOiPNlxFj/l0qbpx+meae1BneQNYD2P/WJALrwkEWM GBhLQIeNpCdOSkfdXmYjn3nJYzWlbKZ40UdrYsvQ1mdoLV9exq8pLG9e1zJ77toc 43+cA3XUoBLEiXzv8kg1Jo+Pu6wZz9CBqKvLzV/flzCXvK1V49dDnLqy21n4/fOZ JEnoGaZlBg== Received: from sj2pr03cu001.outbound.protection.outlook.com (mail-westusazon11022103.outbound.protection.outlook.com [52.101.43.103]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4aykqe47hr-2 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Fri, 12 Dec 2025 10:13:30 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=QL+hO5wTQZaIoHvpIKRmXY1w+vv+8wp5N02GJcqA0fTHWM//9iisb6f0aNgt4ibKbH/SOeaM8wLqBcgqTz/VIGIVINWUxRLWyevXMGubtWP3ig9AUrB83dXSo3VlrPiD2TtK4recGdvqFVLtwM9/8Epr9HWpB+gjlcaBIxA1RnEWcddP3F1ULeSBxyHIpE9cYtgUDQCea11VvLqY9Ts6W7qEBePWKLecV28zTzcgLauUYtdBm0l3kK4aDMdkIL6RPeOhbHTSFAO++P7mwVv4Ua6oF2FSzrynnFgpEnq9E3TaXUKewOB85JFERiBKDIJqRcIo5432AeJ4szMosTa4Lg== 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=w1/5YRaI4nuxJ64hjAemiWucIjxSy6Sf8roGm+BoCtE=; b=UkjbxsUEWJt3cpjEAcdu8dATvR2soWMADAtgHOOQ8vYaQrTwUH3477PjJ72VoiAAp5I+kbqyZu88viBKtW74lttHq+uOgVDUzZJ0XKXdoKvQ9updHDpIupqWio/MSXNJWwsJyHabXa9Yffv0zyXG+QntSBUGnnwI3mozujUmnIwwAKRanjuuSKLtUacxyhn8JRRbzpIrVjTY9uzOf6V5kpPPakJZLlSPDvJiiag3aGwgzULD3VvkG1aH87CGDH8HsNfbsXVnBRzDrvxB3AV2jHCUNCH9C4CdPrGC0OSy8KnxBfKJgyecdI29gT65bACyZyM9ILzk80YKUYup1LliXQ== 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=w1/5YRaI4nuxJ64hjAemiWucIjxSy6Sf8roGm+BoCtE=; b=LqzyEYNfopvlBdiagq2EkNt0PZQ7U1H9jdGhaCi1FgDFw+Eknulq37ErF5oWswi6DkXtwYh85Vfjt6e/nu1dNeKTgOPmJchgpcTiaF+CGgqjwOKk6Cd2+9ZwkkBfIJy4pGyW8eRG5eEixkheurUPMi+QODvojAqgltK+qP9ywK8= Received: from DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) by DM3PPF7468F7991.namprd11.prod.outlook.com (2603:10b6:f:fc00::f2d) 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:28 +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:28 +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 09/14] greybus: cpc: acknowledge all incoming messages Date: Fri, 12 Dec 2025 11:13:03 -0500 Message-ID: <20251212161308.25678-10-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_|DM3PPF7468F7991:EE_ X-MS-Office365-Filtering-Correlation-Id: dd6694e2-a64b-4bea-e919-08de399962cd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|52116014|376014|1800799024|366016|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?Rk1SZmlaNlIwYWJmSGxwZnByMTFwbFkvOURyV254WDdhb1Bmc0VqdTFXR05P?= =?utf-8?B?M0RLSUlFSFJQQ1FvNmJIdElBaVZOQmVERlE0OGprQmlabU1OQzRMODNsWnN5?= =?utf-8?B?RUNEQ1BrQkdNL2ZrL2F4d1JQYXNoOE5xQjRPTEpBZ1lmQldHZjdXRndQVW1s?= =?utf-8?B?elhpMkcvQWpGaHJibnhjWGlyU2FNYmJrMUtVVG50QW9qNUZvYTVNWGtvcWdz?= =?utf-8?B?cTcyTkovOHJlM3Jpd2oyOWxmK0RjZ2pQNFBLUFRDWXNGOFI5T01BLzZaSXNk?= =?utf-8?B?M1d0eEMxS1NjVDNQNE9tdk95cDc2cTRKQUhQNW52bG1hOHZyS1htVzJ4T0kw?= =?utf-8?B?SEtXZTBPb1VldE83TzhmUSt0OGRDRk9mY0N2L29NQ0oyRjF0NlBqOE8reXV2?= =?utf-8?B?c0lORFhadnJvU05JdzArSFdZQi9uNCtLSHphZW83SkcyaENxcUhSWGZWT05i?= =?utf-8?B?eWdyTU04bU8wb3BqbWNwZDJPWG9pNWhrSFNTMC9uM1JMekZ4blVUYWhqNElr?= =?utf-8?B?bUtWVXU3Q3RxNXBRUnVCZk1oNkxHSGJYbzdwazlRKzlpYkFqMmNkT0ZDY0ZM?= =?utf-8?B?d3VoVE1mRy9BNUN2YXNDUDNRdStxOGhVVmNGT0VqWjArenlTd1hWRngyWHpj?= =?utf-8?B?aEs0U1phcTNLcWo5amFXeDAwZDEzdnJCZXJ5TFc2NzJHcjRobTJ5ZTJrNHBt?= =?utf-8?B?VUYwU016cHZIUTMyRi9BaDhHQlJtejB0U0NkcnB5eFEycGUydlNQeU5hWkd0?= =?utf-8?B?Z1hpb2pubkk2NTNMNWxnZ3FOM1lHanpMTWFzSzNvdE0yLzZ0dnpzZHhtdzZu?= =?utf-8?B?OUFkWTh4VWF0TFVoWHpEMzBGYkZaK1ppYzNqMVUzSS9QaElMSm9TSlgxcE1Q?= =?utf-8?B?MVhwcmlXZkMzV3c5eXVHeWxpNUtLdWIwODVNSUdwZGNpM0Nka3BiRG9rTHM2?= =?utf-8?B?c3BYYmRudUtVRkFBMjFISlplbmZYQlRDMlZMNC9wQ1RNUjA4ZHZyVmlRNUxo?= =?utf-8?B?TVNWN2ovWG9ZWjdnL0NuNi8yZndVS0Z4NjFCbHg4Kzd0UmxVcjNsS0JaSlRU?= =?utf-8?B?WkoyRmlpTFh2RCtzMEFEc0x6V3ZWM3AxUklzV0s2Y3VtUkhIY3RXd3diLzlB?= =?utf-8?B?ZS82YURqOHZXMGowUEwweXEzbWl3VlhiOUlyaml6SEwxTjBtbDRxOXB4Y1ZN?= =?utf-8?B?anNKRzFnY09oSjQ1b054bFkxdjhOLzE4ZmdMTFBZektNdXdtSXlPWWgvN0gy?= =?utf-8?B?bkI0QUgxNjBqcDQzS1pFanAxaDBrblhURHRpeURBZXY2aVNIMlE3WmlycEsx?= =?utf-8?B?YjJ6V2lKS252dkdEUjUyR3hRbkVPcnBUVWNLd042Wjd0cGVkNDRsU0FyUTBo?= =?utf-8?B?ZGN3cUd3SGtZaWpKNGNxRnREWWhSV1pEMWplaXNyY1l1bExNQk9yZ1dYN2s4?= =?utf-8?B?bmJDRFJSV2ZvMVZSWngyWEdzTEZ6SEplTExHZUx4VlFvY1NYOE1nMkpTbVdH?= =?utf-8?B?aDhTU25XWnEzOXhxbDdKQnpyclE0ZldEWkhxQWpid05kV2xMc3JhSU5sRXky?= =?utf-8?B?alhPMjBaMVQrSzArMGtYQ1loRCtIY0tTd0paOFFzRjFSWmhIY3h2UVJ2UGN1?= =?utf-8?B?b1RzZVdHbWt3VzloeW1sVVNFYkkvNWNhbHR5Vkh3OGdFb0NEaXhzT2FRYm11?= =?utf-8?B?VVZOMC9PYm5vS0pDQUU2VG8wQi8wL0dUT0RkTW5YQmx4WEY5K0NvbUNZZzZR?= =?utf-8?B?UElFYUxzZVdHZjJSeVVBb2NyREh2OFNzWlM3eGRMRzBldmE5aUxINkE5QWE1?= =?utf-8?B?dG5WRGR0RDIwRFJMdWkxZWpONlJ2Q1RKSGdJYlpObjFTZTQyL051MjUzbGxq?= =?utf-8?B?eDE2VnRHV3I0NFc3MWoxbjl2cHBqNk11UWpXd3VvZEFGUFE2YVdqQjZqQjQ2?= =?utf-8?B?d011MVQ5NmY5c0pFd0J4MEROSmxzZFVkZDMvR0ZUTzJUdGt5VjFMSEVDMkM3?= =?utf-8?B?YTJxMlR4R25HRmhLYm5EcDVON0xub0ZVZi84OTNpU2hpT1hON25haFZEeDVj?= =?utf-8?Q?iX71si?= 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)(52116014)(376014)(1800799024)(366016)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?R1BnTG4yMFRRSW5YTE0yeXE3T3dPMlBUZXBlS3V3Y0ZsTmM2bGE1MUpsUGVt?= =?utf-8?B?bloyZkdUMXdBQjhNK2p3dnZ1L1QwdStKNWlKZ3IrV0QwaXVCTGE1OW5MNkZK?= =?utf-8?B?RFVIL01PQjlUbXBtRzBtc2FvYWN1cFM2SXYwZVVRcjJycExNeFRpNHZFblc1?= =?utf-8?B?UFAxeC96V2xTWTRrK0xHc0xEV2U5UkZaeGord1A3WDBVSEtSUnphM3ZQYWxp?= =?utf-8?B?aGR1bGpGc3FRSk0xYnB5R1dVMUhKbkhjRFFtZldLemZPNkNGRWZvOFh3RHNU?= =?utf-8?B?Z1ZjK1VScGF3dnpOcTRUbTBabEF6bURQU0VRR1F3SDlONmlGK1d3N1NjcXBw?= =?utf-8?B?aFFmVEdnZmZqT2o4QzUvR3J6SUNUZ2hienJLZTVLOU5KZS9ibzZ4SG1uMnYv?= =?utf-8?B?ZXM4Z1RYWTlhNVErQ3k4M2cvblZWWUY2YWo1MkZLSExqbTR3N2x1dU1WQ1FM?= =?utf-8?B?dnE4Snlqa3U0U3hEWjh6aHZ0U3hzT2dxa2c2dWNuTnVkY2kraU9iTFNJMnJF?= =?utf-8?B?NUl1QUF1UXkwV2tveWlIMHJOSzIwL2poOGIrbXBWWmNzVzFxOGlVRWRQU2gx?= =?utf-8?B?YmVIM2RucGZNRk5ncGRlN1lNYmllZklHWm52OUxxRkVUMGNrSmx1MStTNWxo?= =?utf-8?B?WXE0VGJxb0VGcTR0MkUycUowellIRnFSajhjQ3o2aEhHREtEMzdLWXVwWHE2?= =?utf-8?B?d3BGNW42NGsvSnlBQzBCeEdEa3p0UEg0WEM2RXArcXh5RXZ1Wk44Y1AwbURQ?= =?utf-8?B?aW80aWJLcytXT0REQXJOcjdwOVNEMDZOVTg0c3luam5ZY0ZjNDVJZUJtLzdJ?= =?utf-8?B?YkhISVpQWGQ4UGtpTkt4L0JhRG10czlBMEkyeUJIR0JHVXhYbTR4c21oZUR4?= =?utf-8?B?ZzNqYWtZQXFFV3FMZUNBNFdCcjVkaGZQSXdNSDFwWFRScmdHNVB1dE9zbHpR?= =?utf-8?B?ZHJFYjVab2JhN05CdDRueXhZWml5TE13TGJDdW1teTFKVzRpWGw5YWZhWDRu?= =?utf-8?B?MVd3eDNHM3E3SEhXTThEYkNKZFJhc1VwVkU0dFhEdGlLbUgycTlhaWU4NkFQ?= =?utf-8?B?YkN2WmZTVWhZb2s1c09FK0pRQkxmemdTWFJYRVVkcER4WFVPV3IvOEh1Nitp?= =?utf-8?B?WjZQY29sUUtWODdMMEIybmR5WVlJU1grdi9LVHNRN3RsRFhPR1g1QU9iZWxa?= =?utf-8?B?ZGdDSWFFOVJua2tTM3M0d3RwQ0d6YlMyWWlweDFuQUg2Qi9CTmJkdm96Tk05?= =?utf-8?B?ZjY0eFdjOFJJTnNkMXF0QUxZUVFwVzB3aEU1RzhVQ3NFZmQzSWw5QzRQOGpl?= =?utf-8?B?UWQzczlObUg1cDNuWUwvYVlONGFvZTFwRkt3cnFrcmtKK0F5MnZqZW5NSkhI?= =?utf-8?B?dkk1ckF5ZnhRM0tIaStFanlKMmtWS0FjeTZwNjRuanhDQURta2NHelVERE5p?= =?utf-8?B?c1hmS2lTaFlnVFBoVlh6MmprUVlFd0Z5ZGFkM3lNWnNjdjFFUTlBOGgxbDVT?= =?utf-8?B?V05hb016d0U4bElTRC9MbXZwK1hUaUxNRHROQ043VW5xaHVtR3dadHZYMXVP?= =?utf-8?B?WFlDMy9halNPMWpEWFhiaHZQMVFGTGFiWHhvVVVDemxSODZqRldHTkM0aTBj?= =?utf-8?B?Vk5yNVpMS3VCN09hcXlia2xVcDk2VU9INWlBOGZXNTJPcGhzL3diYXpUU1RT?= =?utf-8?B?cTkvT0p6anI5Wjh3VnIvT3NSYkRScm5xekh5YXRtc1dwSmEzNEViZE0zZCtj?= =?utf-8?B?STVkTEFDcGhZRjAvZHN0YWpQbjJJWHdnQXhzWTRLV3creWNlMEgyZnFjLzQx?= =?utf-8?B?ejdCMjRQRU84Tm5EUnFJVGEvNlYxY0xSbGc0dWtCZytkMG0zUzJrUXdhSDVq?= =?utf-8?B?Y2txMmNBaW9ibitMVVcyV1ZUS0NMd1ZNb1NTR2hzMVV6VkVDU0dDWlFqc3dw?= =?utf-8?B?V2QvSXJYdHZQNEcyU3pPRXJzTUVJbTBMQTUzN1hJV08zQjdVSEJuTDdTUHFl?= =?utf-8?B?ZkpFekxtWHNFYXNyNWxlYXBtQnVPbitvekRpT2ZRQ2F4M0xsNkxENDVlN1Y5?= =?utf-8?B?RDdXVDV4WG5sYUpKeWY1NnRObHlnSFVWQ2FsN0hNYnhaZVA5cUpmd1FIYUFv?= =?utf-8?Q?ce6589bia+nagAcGSq1MqBHwC?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: dd6694e2-a64b-4bea-e919-08de399962cd 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:28.5876 (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: aWk/lYEmDaoDy39kS5lCMwLL2Av0tZFqqWuxQX0jDuF++INo+5ScJsMp2JOIwXQAnz0AemmVgBnpOrHDE4ZIBQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM3PPF7468F7991 X-Proofpoint-ORIG-GUID: Nbc1DBrfRCQWYo5-4tZqb1O9fyodRM6W X-Authority-Analysis: v=2.4 cv=brxBxUai c=1 sm=1 tr=0 ts=693c3f2a cx=c_pps a=poLntA6gJg8PyknBlaXY5w==: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=mhnTNJ_rBLr-BtWZq_0A:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjEyMDEyOCBTYWx0ZWRfX9u9VqR7JgvyY iTUjfmnMuKoYB7KHrTnaGfnaYYKD1PSwuJIne6Va9y67n5te/KOflxh0GzOu2O0hxrRJM50Ss95 t4NUiQPKuys7H2T0U51bqBpFR+nez4zoPMZ5RZ9iZy+mImigAAlepGY20BXZOi5sBUCLmb+7d78 cRDja6ZnAM4Lbba2xpVGfZQ2XPvzyoab1MdlLOehaQTp4wLtFoxZV9sSOBpAwOE17UdPWqcmVoy eI8IL5nTSoVyS1CDML8/T3XU4wdeek5E32neRVkgfHLctU4lBOl52VF3of5uterggNPdGjcSIz6 D9ZvhCppzyHk3+DYSBeb/zzcnybob9EVugMdh3rqvdsI/5ccIgk50Wjnj7nsrhVvwV6PL54Gsnu etV5aIC0wNcNnNgNWj7ewki3SvaXUQ== X-Proofpoint-GUID: Nbc1DBrfRCQWYo5-4tZqb1O9fyodRM6W 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 suspectscore=0 lowpriorityscore=0 priorityscore=1501 malwarescore=0 adultscore=0 phishscore=0 spamscore=0 bulkscore=0 clxscore=1015 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512120128 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 do something 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, an ACK frame should not be passed to the Greybus layer, so a "CONTROL" flag is added. If this flag is set, it means it's a control messages and should stay at the CPC level. 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 --- 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, 95 insertions(+), 8 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 2ee0b129996..35a148abbed 100644 --- a/drivers/greybus/cpc/cport.c +++ b/drivers/greybus/cpc/cport.c @@ -86,6 +86,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 2a64aa8d278..0c9f6e56524 100644 --- a/drivers/greybus/cpc/header.h +++ b/drivers/greybus/cpc/header.h @@ -41,6 +41,9 @@ struct cpc_header { #define CPC_HEADER_SIZE (sizeof(struct cpc_header)) #define GREYBUS_HEADER_SIZE (sizeof(struct gb_operation_msg_hdr)) =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 037910e899f..b4dd4e173a1 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; @@ -18,28 +23,62 @@ void cpc_protocol_prepare_header(struct sk_buff *skb, u= 8 ack) hdr =3D (struct cpc_header *)skb->data; hdr->ack =3D ack; hdr->recv_wnd =3D 0; - hdr->ctrl_flags =3D 0; 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(CPC_HEADER_SIZE + sizeof(*gb_hdr), GFP_KERNEL); + if (!skb) + return; + + skb_reserve(skb, CPC_HEADER_SIZE); + + 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 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(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(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, CPC_HEADER_SIZE); =20 greybus_data_rcvd(cport->cpc_hd->gb_hd, cport->id, skb->data, skb->len); --=20 2.49.0