From nobody Sat Feb 14 01:56:15 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 26F2235C1B7 for ; Thu, 12 Feb 2026 14:44:31 +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=ULuv6Znkdz6IJdtxBWDzyQDhhFnNU3yKzOqFrncBO2tfsNR4vrzLLrfv6lgiEVkTM4UruePrfSv5vrajw0H/AEVS+dOn7Bq5awduyMQjWeo9+hCTSQ1yhUgRvIoIjDyeOiVTTnyBtJuk+a/YvhNQbW+5vOo30cLyKZuYVwW/1x8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770907472; c=relaxed/simple; bh=qm8h8Tbqcxf74rPijla5D9tlCnT/dGIQPSCw2Hz4Xhg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=O1ZKMst9lxjoH6Dk78EjOtWsnkji6IHRb8wDWZ8mu5Z3wag7wzdyIBkt0EVJC1WjihzgGQ1tnB2Ama1QxSNsCdj059Q23k/ytP4VXdAthVZMGKgbR4ghQxEYhMWMistwONbdqcH58v6v7THuIjH256x/vjr/GxI/Vk2qTTbYgl8= 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=klcFTvmE; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=MnSjvi3/; 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="klcFTvmE"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="MnSjvi3/" 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 61C2Lwni2678544; Thu, 12 Feb 2026 08:44:15 -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=9dY5mc9962yPz1bEk4Iw6Gm/GIuV4Wrrww4w84kU1LE=; b=klcFTvmEemhP MyydDiuCfTmMlQiO80cKC4ZXK43CGpfiIZuBLuKT65UifKyj95BS8KlQ+BSoxeFO 0lULxtJX/XL2yNxgLzm7IcJtyYiTYSqGHup7E4FVe5Idm0ej2Hg4ln2jff44Ay0o h+L8QFvLT6iybusdTJSL8bv4Aii76ED7UOEB29wSwqUkDpKdpmHrautuqCXJVq3Q O0WmWq4FYfzkrfbj/Kl0D9eJ3a65n6oaX1QiCcdVmM73A+mLbvAbzFX+Cn5il/B8 bKn4T/NN0fENEIWyBUPK2SzmDK2JHAh7if48Y+snxvgcfvAkPtiO8JgEcvmMXWAS XduPOremnw== 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-6 (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=AxbPIMgeMueFpgbdDjleo8Luz/+nX7i4JC0fXq5kDuWjaQKkMhMOxdDlae+8xPi0NGowfmxexGT4Qx4oWtkc5K3dGJov9tXhxQZS9r6UPUE5rxtLohZtlg/doGwPt7wmLgF0tRTwKsgKqLBXYQvEaOCaiGWZfMgeb110OqtMJNy3ab8uJVmeymU+ErE4bS8s+TfJ7zjRJD5jn9A28WzeetWhDKrzJ9Rne5ipKwrnYLgOvqWfjOKPnGmBEfYKciw69YDGJj5xjIqpTS+OYv7C97P0JQhZqCBQujplosOSQYOwuIy32MJx8rKoenW9zUa6CSEt0QfoKb0Tq2Jntcb3sQ== 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=9dY5mc9962yPz1bEk4Iw6Gm/GIuV4Wrrww4w84kU1LE=; b=rM2Lc0fkWpIM5Ia9+y4qj/Q0sLNQUqZbKxKKqnGCIFPJboAaAFCvH2OL5euVeJ8wjChTbx9Mi4ZmBfBKOylCIO6y5KRYNf+Oe95FoLUZYYPF/BWr858WspvQ1Pc6R86Jy5+caYaFGJYktv4s32HZdqvZkjHhzOlM0elEeeEFxQms9odjKa14awxUJst7RcpU6DJs9+F/FtdSq0kAuWEk38ZFwCmFURyFQH7fcLqrYXnPp0PwqzKs7WxVoDVME+dUiWM2Jbpegu+D7+b4uwiv8YzZtv/1Yhb60qSxZkaQ5EEnlHxUjuLZrD4MVf9WkZhIF7qgHxqi2zkUeBBivuE1ZQ== 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=9dY5mc9962yPz1bEk4Iw6Gm/GIuV4Wrrww4w84kU1LE=; b=MnSjvi3/nwqWz/6xcrR/ZUvGxMEkOW0HtrexF5bktUDZ8mAVldoaZhXlOLX4fYpAYTpLgvGRgxlGDM/Cq9CK46uBb6mcRZEHACF1F9EE5le+Akh4qcXQ5Q4IOxRSkuU124LdoMZyxMGk+8lHMUYRIdgjG9e8PNJRu2mEcBdCWag= 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:11 +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:11 +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 08/14] greybus: cpc: add and validate sequence numbers Date: Thu, 12 Feb 2026 09:43:46 -0500 Message-ID: <20260212144352.93043-9-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: 10e480af-173d-4194-1be7-08de6a452f58 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?TzdGajBScGhHb0xCdTZqYkJ5M2dzQmJ5NERkcW1ndWNaWG5wbGNCUUhpcWVH?= =?utf-8?B?NDlyeGdFZmNxWGo3Rk1BL01YUW5WOFBWeHo3eklLRWZwaTR4VTAvVkc3aDBa?= =?utf-8?B?L2R5WnlpWC9rWEdNaHlReFYzNXAxVlExWmxkMG9tcDV4UHVnZmNGa0w4SG9P?= =?utf-8?B?OG5tS1RLRmJ2RFNpc2hqWWRXK0thd1ZyNWJ0d1Btd1lCaUg4Vm1IbE5BV2dQ?= =?utf-8?B?d1lTZUNmb2ZkWHlxK2M0M2RESFFNRHhqUk1vcUFhOExuZGN4QW9zdGlHT05D?= =?utf-8?B?ZmswY2JuN2ViN0lxQXprT1NUTEtyb0ZTMGVKbTdFcDZpVlgzOHZUMm8vblRj?= =?utf-8?B?R1Z1eGhQTDJXN1RYMlFNM1cyVG9LaGVvZnYyajlRTmR5QU9BVjBRRTJFL3hN?= =?utf-8?B?UmVhRWE4OGp0Rk5XL2lzMk1RTStvbjJPaFFiaS9FdWhrSHFiNHE0aHVXc2d4?= =?utf-8?B?Tks2Q0R0ZlNCbzRQbFJIUnNYWHZOaHRPWEMzSlNnb3NUa0VqQ09FRGRnRkwz?= =?utf-8?B?RWRiSU9Ncm04eFFQTVJodFcvS0VzZ3gwcytkU0lONlhJcWxqR0MvYnFiWHlC?= =?utf-8?B?ZGI4SUxFelJjamdIcUtIV3Jha1RKdGZNeUNEV3VPOS9PMzk3ektHQ2tRekRG?= =?utf-8?B?SEkxV2FVTkgxQVI5ZVUxTEhIUjhNeFpMVDJLdVF3T1FKQUgrNHlzaXlralNt?= =?utf-8?B?bG5BWU44VExKNU94dUlxUm9jWTVyWld6UkdDUUM4cWJBd1dURjJ3Qnp5cWlv?= =?utf-8?B?VSs5ZnBYaHVJUGlFQnpPcG1tTzlFQmluOXVQQStaSHBkcnVPZDVjL21Uc2xy?= =?utf-8?B?WU1jNkNxVk5UWFZDV3RJcHFqTFRyNE1xaEQvL3ZmSWZ1NTZDcktna2JWM1Rw?= =?utf-8?B?MDN0S3JFeCt2dUs5U1A2VGpPYUN2elZNZGN3S2lieTBXM1ZCL3k2QTFFaWdN?= =?utf-8?B?NFR3cDRxcXNDVnBNZ09yM2QvcVFybUtBR2tBVWFhWFJmei91WTAzSnFDdFNq?= =?utf-8?B?VFgxWVY3R2RDcEZhKzVVUFJUM3dHSDhEeVN4Q1JzUUUxOU1vZGdnalpSSlFv?= =?utf-8?B?ZU9TMHRhM0NPYmxtZC92Mkc4dStpTCtTOEVJbkxaRnIwSzdJVDlGVHNSTE5q?= =?utf-8?B?NWwvb1o2Z0I5NVdudFBXOURGUDVsTmxwUVRMTDdKUEJXVE0reFJQUG4zU0pr?= =?utf-8?B?a1RGKzZqRGJqRllDejUzYmRPQmpOOXRvYWRIdWZXRnJlZ01wbzl0UlF3Q2hl?= =?utf-8?B?bGplSXBQWENqRVQ2YVRSUGdLc1NzRWhlYVJMZ3RCWXJzRXlSc043ZUtQbDNO?= =?utf-8?B?Zms3cWVMa284SkJzUWkxaW8xWHZPNDVsR2ZzOWVRb2RXRWRweXU4SFdYcTVk?= =?utf-8?B?TVc1OVdZMGkrUmtxWDF2bnIyYkhFNThEdXAwL3VMSFE3a2hsSGZJTlI2OFhW?= =?utf-8?B?aVY0UEtmcjhLKzI1SDJLazR1RkhDSUpia2NCdG5XbXNSc2pNS3QzelZxSnRn?= =?utf-8?B?UUxWSUZLZm5DNlB5VmF6YzE5eDVxeEdqTGpQdTVwWTYrQnBCcWV0dVM4Njl6?= =?utf-8?B?QU1mZUhpbDI4VzU5cW5hZXdzSW1kVzZEYzN3a09OOU1ZM0c0WEY2SFBFdEg5?= =?utf-8?B?STVkbS9LRzMyTEl3ZG9VUzQ1S1JVc25HTDFvc2o1TmVmUnBUNDNXcXRlTi9j?= =?utf-8?B?c1BIalljWmdHZTRsTkx3My8wb25vQk8xRFNEK2ErNE1taVpnUnBUZEt6N2Rr?= =?utf-8?B?TVFVb1NUUlRCbXM4Q0NWdE1TVWs2cS9ianpHalJXUzgrT3RDVUtOZjhiVE9Z?= =?utf-8?B?UUUrQVJGWkdBdjRwdTJqZEc5WWpNWEdOVzBraVUya3BpY2VOMFp5aTQ0YTdT?= =?utf-8?B?eGJHVHp2VFlqdUcyRzZvemlZRDdIQTdkdlpPVEpUU01lNjlCbS9LUXRqWGh1?= =?utf-8?B?UXdrNjNBQWFWZHdPTWVyWkVGdHorMUNiOFcrbTBYK2dEUnFjblBsaitFR2JE?= =?utf-8?B?Zy9NVUpYUzZ0a2JicTNzc204YitoQUdlL25oV0F2QklwSndacFEwZVdVNjlW?= =?utf-8?B?SGMxcWZpZStsaVdXR1ZJQnkzeWNndVpMTkx1RUMvYmVtU2d1TFlTRU14TU1U?= =?utf-8?B?NVIwV3hRQkhjdUZUbmhYbnFhSjNVMTFkR1FPd0hYNDY3UTZnZWd4QUwyZm1l?= =?utf-8?Q?cD7c/NR0cCBBSmcGK2/3vOE=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?SjVvQkQ3Y2orQVdleWZiRXdDSG1hTDJ5bE10dFhoVmlHZ3psSjZEQXFjYzNk?= =?utf-8?B?c1FSeWNxTzdNVzd4d2ZvUXZPWDhQdThCVlFEaFJ3aXd6bk9ZVHBjQlkrUnRn?= =?utf-8?B?UlNLUkNmR0hyRlB0Q0FoQVczVDJQTnZobTZVNFhUcmFtWGVwdHJVMVVxNVhz?= =?utf-8?B?LzlhYXovMk96a3paVWZsU20vcXBDYVRkNFZ5bEZnR3BJNGtDTURkZjR4eFNR?= =?utf-8?B?dFRnb3psVER1cERJSFFoRlRpVWxzcFhLK0NTWlJWQ0pBeUtmN3ptd01DLzJk?= =?utf-8?B?NUtqL2FteUdpSGdObW9yZjdZUFdVakhQVnV6aytuaWpyUk1aWHZIOU1wb21D?= =?utf-8?B?NXM5OG1TcnVSNVI1Y2lmNnVMNi9YNlhIdU83WHcwV2lQeGNxM01qNHFHeE9S?= =?utf-8?B?TUdua1hYamRSWFF1ZHlYTUxFS1ZCYXUyaFNrcXlIaHdpWVNHMEpKYTlUTUEr?= =?utf-8?B?UUlTUHZUR1BkTFRPZElEQ3VVMWxpdE1jRElRSFFpQU1uU1dUR0s5QmlMcXIy?= =?utf-8?B?K3hkb0FGMS9sQ0lmYWZ0czVvRUNRWW1tMk94bS9BbllCRHBTWk16TTFKekRL?= =?utf-8?B?SW4zUDdLeFpLNnNvdEFTR0g1Qk5oTVp0RG9mL05IQ2dPL2lXLzZIRnpCL3pG?= =?utf-8?B?Mm1LOE5wNmFXNzJFcnRCUzJGL3czc2pLSFE2RDM3aHhPU0l4R1ZwV0MrbnVh?= =?utf-8?B?R1JsaVl4VlMxcUlPVmRNRHdLbmlYNldZY0FvRno3TVBOeWVzZUNlRVUwZC9Q?= =?utf-8?B?azVtM1JQdCtBWVpHYVAyeDArR1lPRHg5SDNLUzJ5QnNtMzJDeHJCWlJ6Y2RH?= =?utf-8?B?dzUydUtLeUdWNTdMd3hzdWN6QUowcStZcUVhQmVuaVdnZFJCRkxWWi9tSGFM?= =?utf-8?B?ZUhteUVLSjdvZHFqcXQ0YVBHUjhxUEczNWhmcE03ZmVDUlhxcHdicVlMWExt?= =?utf-8?B?WFRUdXM1NlF4QXViT1UwR3Nvb3FsSFF1Q1RLWjhSbThjdkpVdjF0VEVTZk0x?= =?utf-8?B?Wm5jVlBQQ3oxVFJRUWdqeGdtWEVGL0tBa2I5d3pwL1J3YitZbzZHREpvbmtv?= =?utf-8?B?MWgzZ045ZjBFL0pqSXoxYzQ0U0VjWjFnaWdvcjBIQlhPVHBIaXVKd3lsVkZW?= =?utf-8?B?dXlkM085dlI0YWdGV2JsWUFLZHcxK2V6L2x0SW80Y3JDT2dFT1hFQXViUEth?= =?utf-8?B?andTY2JZUXJ5NnlaT2E1clRUQURNNzhvN1IvSFRoOHlPVEtKR2ZMdkdyM0NF?= =?utf-8?B?Lzl4ZmNCVmFmcG9ZWEtyZXdCYVl1Tjl3YVpPeVNXdlJ1KzVDbW9JakdwVy90?= =?utf-8?B?anFwYWkvdnU2LzBQeWxZNnFDeHc5RE1zVDNHaWpvN05hNjJiS0twMVZmaXY0?= =?utf-8?B?T211YXBhUTUrVks0UXVkWVp3R3VLU284Z2pBdjhNbVA1SXdybE05U3Z3eEVC?= =?utf-8?B?ZWlaeWs1cGdxdUkrN0t1aXQ0c1Y3TFFoTEFuaEhmSGIrQzZEemRNV3ZiL2No?= =?utf-8?B?NG00VFk3TkNXOXZnYXRxZzdCZU5sMCticG12WUh1anZQenZPa3NIK09mUFBL?= =?utf-8?B?d200dnBhT0lUZHRnUURRU1U2ZmpPV2FEOXM3REN0cUhqZEM1dXU3UEQ5OEVa?= =?utf-8?B?MWtnTzBQZzNmTGFGbFJFOUVYZVE1di8zYzJOUzFsYmV1OTdOTFhPQkY3L3VH?= =?utf-8?B?NWNMTDBFRjlBYjZqUUNGOFhEdU9TZFJKQlRadTc2K2lWYnl0MFFOR1JLdlFh?= =?utf-8?B?NXYwS3U4bGJzYTBZRDFLZkwxRm1yRlQ0YWFzS3QyTkNWR3Q0ekp4ZjBuNkoy?= =?utf-8?B?S1l5VFROemdnYWo0MUg1MEs3SktOZ0dUNTR2My9kT1pjRmZIL24wRzAxVGcz?= =?utf-8?B?T3VKTytGa1hwcnVqOUNZRDkvb0RJTmxNVFk2WWZ6RzlkVE8yYTV5bGFoQTFz?= =?utf-8?B?ZlI3U25pbkx1TUZZUmR0T2ZET2t3dGtGZDE0aGQrNXJGZ0pjYTI3MXFTSlZ1?= =?utf-8?B?Qis2M0dyVGpPRnU4czBJeVF4QktsREprYzlrN2p6RjM0MEIyRzV3bjBrUGZ5?= =?utf-8?B?am9xYmFwUHhveFVTc3lNTXlkblZCQVpCQzdzczJKaWJMaXcybWJ2bFlpLzVD?= =?utf-8?B?NkxuTTVtSW5ITVRmZjJON0w0S2FuSk95clU1QVEzeDNhTlVCNFhYSDJjNFNm?= =?utf-8?B?Vm4rSVptWmcrU204dFQyWER3NEM1YjYveWphbktQbkdpd3RSaWRHaXNwbXRt?= =?utf-8?B?aFVCekJSOEswRTV4cWNvZnZ6M1dub2V5aHJtdTAyK1ZIeTRjRjlQMWxXRFB5?= =?utf-8?B?cG83U3grekFjRytITGhoc0VjL3VML0o3N0x2aUxxdjJ2UzFINlltUT09?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 10e480af-173d-4194-1be7-08de6a452f58 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:11.4434 (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: GbcaZv9pCaah2XhOo2hXFi6XSAXyYU/eFm8rQr421vZHoaEoZvqbuBveGKJYL0v3XQxptSZUAJk0dAbOisYW/w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV8PR11MB8486 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjEyMDExMSBTYWx0ZWRfX1TwMAJxd+qRF ES+W0YIRfs0uwfTW86oXvgZkeOAJI9AVSnZ/+LH2FDrMjrFjKqWYeQdW6d/mQpnSCRIlgyVqEKC Q1JI3eNKGOBbFkNTPeo+2sOEpmBAzee3ncLUN3GXG3BH7WzMun2I+kzL+XIdxfnwp4R65rOyJxq DHh5/KDpOsoIC3jII6L9ioMXECqNbLUjTen9p9GiECzNIYioUaqhM+0DxaRghB13yzlBG4YAtvt jVt+cdzdzGdrBvF+5DXK3qT4rBa3fpRD/IZ7sQqviJTr4ifzPo+IaP3i/skl7TvuVzchqBPkKUr aYfTp+T34y1ymSo9BwhDD3rUl21NUI9iDk7CfyfM4CR8qpXIYYoVjhcnDHJRtnopp9DHRfkonE/ FzWHvG8BeaHr36M5LPHcrr5iBLq+zhViVoYd9BOeGczHZflJHilxsWbfABHey4XYSjtbD+DhUHJ jxDJL0Su3o78a94iBQg== 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=vN7oVFPIg2LUC2IVNO8A:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-ORIG-GUID: AhChdjU5OQYgS1CwYvPOnpdxkCZxnAWE X-Proofpoint-GUID: AhChdjU5OQYgS1CwYvPOnpdxkCZxnAWE 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 The first step in making the CPC header actually do something is to add the sequence number to outgoing messages and validate that incoming frames are received in order. At this stage, the driver doesn't send standalone acks, so if a message with Sequence X is received, the remote will not be acknowledged until a message targeting that CPort comes from the Greybus layer. Only then the driver will ack with acknowledgedment number of X + 1. Signed-off-by: Damien Ri=C3=A9gel --- drivers/greybus/cpc/Makefile | 2 +- drivers/greybus/cpc/cpc.h | 20 +++++++++++++++ drivers/greybus/cpc/cport.c | 25 ++++++++++++++++++ drivers/greybus/cpc/header.c | 17 ++++++++++++ drivers/greybus/cpc/header.h | 2 ++ drivers/greybus/cpc/host.c | 13 +++++++--- drivers/greybus/cpc/protocol.c | 47 ++++++++++++++++++++++++++++++++++ 7 files changed, 121 insertions(+), 5 deletions(-) create mode 100644 drivers/greybus/cpc/header.c create mode 100644 drivers/greybus/cpc/protocol.c diff --git a/drivers/greybus/cpc/Makefile b/drivers/greybus/cpc/Makefile index 3d50f8c5473..c4b530d27a3 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 cport.o host.o +gb-cpc-y :=3D cport.o header.o host.o protocol.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 index 62597957814..87b54a4fd34 100644 --- a/drivers/greybus/cpc/cpc.h +++ b/drivers/greybus/cpc/cpc.h @@ -8,17 +8,32 @@ =20 #include #include +#include #include =20 +struct sk_buff; + /** * struct cpc_cport - CPC cport * @id: cport ID * @cpc_hd: pointer to the CPC host device this cport belongs to + * @lock: mutex to synchronize accesses to tcb and other attributes + * @tcb: Transmission Control Block */ struct cpc_cport { u16 id; =20 struct cpc_host_device *cpc_hd; + struct mutex lock; /* Synchronize access to state variables */ + + /* + * @ack: current acknowledge number + * @seq: current sequence number + */ + struct { + u8 ack; + u8 seq; + } tcb; }; =20 struct cpc_cport *cpc_cport_alloc(u16 cport_id, gfp_t gfp_mask); @@ -34,8 +49,13 @@ struct cpc_skb_cb { =20 /* Keep track of the GB message the skb originates from */ struct gb_message *gb_message; + + u8 seq; }; =20 #define CPC_SKB_CB(__skb) ((struct cpc_skb_cb *)&((__skb)->cb[0])) =20 +void cpc_protocol_prepare_header(struct sk_buff *skb, u8 ack); +void cpc_protocol_on_data(struct cpc_cport *cport, struct sk_buff *skb); + #endif diff --git a/drivers/greybus/cpc/cport.c b/drivers/greybus/cpc/cport.c index 2c73d8e724e..7041a6a8a36 100644 --- a/drivers/greybus/cpc/cport.c +++ b/drivers/greybus/cpc/cport.c @@ -9,6 +9,16 @@ #include "cpc.h" #include "host.h" =20 +/** + * cpc_cport_tcb_reset() - Reset cport's TCB to initial values. + * @cport: cport pointer + */ +static void cpc_cport_tcb_reset(struct cpc_cport *cport) +{ + cport->tcb.ack =3D 0; + cport->tcb.seq =3D 0; +} + /** * cpc_cport_alloc() - Allocate and initialize CPC cport. * @cport_id: cport ID. @@ -25,6 +35,9 @@ struct cpc_cport *cpc_cport_alloc(u16 cport_id, gfp_t gfp= _mask) return NULL; =20 cport->id =3D cport_id; + cpc_cport_tcb_reset(cport); + + mutex_init(&cport->lock); =20 return cport; } @@ -69,10 +82,22 @@ int cpc_cport_transmit(struct cpc_cport *cport, struct = sk_buff *skb) { struct cpc_host_device *cpc_hd =3D cport->cpc_hd; struct gb_operation_msg_hdr *gb_hdr; + u8 ack; =20 /* Inject cport ID in Greybus header */ gb_hdr =3D (struct gb_operation_msg_hdr *)skb->data; cpc_cport_pack(gb_hdr, cport->id); =20 + mutex_lock(&cport->lock); + + CPC_SKB_CB(skb)->seq =3D cport->tcb.seq; + + cport->tcb.seq++; + ack =3D cport->tcb.ack; + + mutex_unlock(&cport->lock); + + cpc_protocol_prepare_header(skb, ack); + return cpc_hd_send_skb(cpc_hd, skb); } diff --git a/drivers/greybus/cpc/header.c b/drivers/greybus/cpc/header.c new file mode 100644 index 00000000000..62946d6077e --- /dev/null +++ b/drivers/greybus/cpc/header.c @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2025, Silicon Laboratories, Inc. + */ + +#include "header.h" + +/** + * cpc_header_get_seq() - Get the sequence number. + * @hdr: CPC header. + * + * Return: Sequence number. + */ +u8 cpc_header_get_seq(const struct cpc_header *hdr) +{ + return hdr->seq; +} diff --git a/drivers/greybus/cpc/header.h b/drivers/greybus/cpc/header.h index f65a608a650..5196422380e 100644 --- a/drivers/greybus/cpc/header.h +++ b/drivers/greybus/cpc/header.h @@ -38,4 +38,6 @@ struct cpc_header { __u8 ack; } __packed; =20 +u8 cpc_header_get_seq(const struct cpc_header *hdr); + #endif diff --git a/drivers/greybus/cpc/host.c b/drivers/greybus/cpc/host.c index 759322759bd..2c1b5d02ec2 100644 --- a/drivers/greybus/cpc/host.c +++ b/drivers/greybus/cpc/host.c @@ -215,19 +215,24 @@ EXPORT_SYMBOL_GPL(cpc_hd_message_sent); void cpc_hd_rcvd(struct cpc_host_device *cpc_hd, struct sk_buff *skb) { struct gb_operation_msg_hdr *gb_hdr; + struct cpc_cport *cport; u16 cport_id; =20 /* Prevent an out-of-bound access if called with non-sensical parameters.= */ if (skb->len < (sizeof(*gb_hdr) + sizeof(struct cpc_header))) goto free_skb; =20 - skb_pull(skb, sizeof(struct cpc_header)); - /* Retrieve cport ID that was packed in Greybus header */ - gb_hdr =3D (struct gb_operation_msg_hdr *)skb->data; + gb_hdr =3D (struct gb_operation_msg_hdr *)(skb->data + sizeof(struct cpc_= header)); cport_id =3D cpc_cport_unpack(gb_hdr); =20 - greybus_data_rcvd(cpc_hd->gb_hd, cport_id, skb->data, skb->len); + cport =3D cpc_hd_get_cport(cpc_hd, cport_id); + if (!cport) { + dev_warn(cpc_hd_dev(cpc_hd), "cport %u not allocated\n", cport_id); + goto free_skb; + } + + cpc_protocol_on_data(cport, skb); =20 free_skb: kfree_skb(skb); diff --git a/drivers/greybus/cpc/protocol.c b/drivers/greybus/cpc/protocol.c new file mode 100644 index 00000000000..8f0ac6dfa11 --- /dev/null +++ b/drivers/greybus/cpc/protocol.c @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2025, Silicon Laboratories, Inc. + */ + +#include + +#include "cpc.h" +#include "header.h" +#include "host.h" + +void cpc_protocol_prepare_header(struct sk_buff *skb, u8 ack) +{ + struct cpc_header *hdr; + + skb_push(skb, sizeof(*hdr)); + + hdr =3D (struct cpc_header *)skb->data; + memset(hdr, 0, sizeof(*hdr)); + + hdr->ack =3D ack; + hdr->seq =3D CPC_SKB_CB(skb)->seq; +} + +void cpc_protocol_on_data(struct cpc_cport *cport, struct sk_buff *skb) +{ + struct cpc_header *cpc_hdr =3D (struct cpc_header *)skb->data; + u8 seq =3D cpc_header_get_seq(cpc_hdr); + bool expected_seq =3D false; + + mutex_lock(&cport->lock); + + 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); + + mutex_unlock(&cport->lock); + + if (expected_seq) { + skb_pull(skb, sizeof(*cpc_hdr)); + + greybus_data_rcvd(cport->cpc_hd->gb_hd, cport->id, skb->data, skb->len); + } +} --=20 2.52.0