From nobody Sun Dec 14 21:33:55 2025 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2066.outbound.protection.outlook.com [40.107.94.66]) (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 C2DF413B2B8; Wed, 5 Feb 2025 13:37:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.94.66 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738762671; cv=fail; b=DONd2gC2yzdGgp+dcyntdEvbIKZ39tgbWfLGpVJ3cF+O52tVGdDG67ZIOHUhcLk9vlR7uHuxFellIyziLOwLECiVRrKDRndZ6M08559kkWQla822Ygp/YPURljE0ql+GhwC5LbS75WbphB444+DDBM70Kr6rogTEKvXeg0PdG4k= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738762671; c=relaxed/simple; bh=u3Bt7b8J5xDxo+54EiW/CtmeF8znh6hAPIvNzGi1wNw=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=clGJpf9nV/8eaneijLzqqDCmWrgg87l+/yoTP7qK87wE15Googo4Wgc0jlePHK7zGvpVHxDArRhcNVKOhi/UHuGyCa8HbqtOGMGMyiZ+OuPx+L9GEWrFF3WYRZftsbVhs1Acgj8FtCIz9u/wr8QEuKL43cBEzJhp0+zjo8/Ug08= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=3ZdJJB/V; arc=fail smtp.client-ip=40.107.94.66 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="3ZdJJB/V" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=u5cx7NAB1zWkCpU9/Qv7r7ju+5t1TDAHzIhc9Lum5ZtamKf3ENW7pXMfzgMOBZ4I2QcztMwkMnTk1e7RmnCROw8C5GX7LoEW6aybGhtH+gonxoJQ8zuBafgyB24UYwCrSWpYdjDsivemfxZyUy3Sj09ecTWQhQzkr8Af/OohOPqw4Ukh7Spdvl4CsEC7Q8uLfVMrO0GiWUBPrO0bCoACYjKj3jF9WLbsgzxfMmziFYmiVMvTkJo1KpmA/nHUy5rG6xULOnz9fyj6jbdDkqP5603899GsLmB7xz8AHOTBcvca8Ha5cfh/L9nrtHfeD/1gWbYdWXidi5UqYtiW3A8qGQ== 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=yObSJOw1LqKBf4W7VNzSzL66WNn1WJS2eGn+hE8X68s=; b=pR3AJOpseiqSQgniL/9dJfBm/LTdgYrcs+6MBE3YKeFdtRBKheSC5FuE0MSJC4gWyO2WOCrXueS3LLtH3JVTmp7HE740Ae7udp/JJ5Q15ZWjvNQDjlrhFhrffF65XFxD2NLwBuQEAPMObqwBHe+rY6xqyiZs9IAwfbpEJjjMmdF4qxrvn0WWvo7rDDYZzVjUpkF0Oy4bvB+Hdloc5cCspb3CEEDBLr9deUtnLKw9tPhnUM0vzbNv8eyF2EmJYmBMuXnYbjLvdGohCdTfHo7yOwD8HGG6bNnMjjjqhI2b6/mHGw46Qc8szTtV2EgKYV7/uDDRcmB6ZRzxfgOFDWqx1Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=bootlin.com smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=yObSJOw1LqKBf4W7VNzSzL66WNn1WJS2eGn+hE8X68s=; b=3ZdJJB/V6Irb3ZTk6+qPAuyuPdDsgPOWvGaoGYKJtx5650ubrpEzJcxjjEHT0JZdTc+fi3rFYnGIO4iqoad1nyEb9hsvW64Obxt6znuLOF5LJkZhXpxA8iYAMUNuoa426k1S0vj4kfz2DXgM9kRmO4oGRE8WJgmv+fY6gvlEwRw= Received: from MN2PR01CA0058.prod.exchangelabs.com (2603:10b6:208:23f::27) by LV8PR12MB9418.namprd12.prod.outlook.com (2603:10b6:408:202::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8398.23; Wed, 5 Feb 2025 13:37:42 +0000 Received: from BN3PEPF0000B36D.namprd21.prod.outlook.com (2603:10b6:208:23f:cafe::e3) by MN2PR01CA0058.outlook.office365.com (2603:10b6:208:23f::27) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8398.27 via Frontend Transport; Wed, 5 Feb 2025 13:37:42 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB03.amd.com; pr=C Received: from SATLEXMB03.amd.com (165.204.84.17) by BN3PEPF0000B36D.mail.protection.outlook.com (10.167.243.164) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8445.2 via Frontend Transport; Wed, 5 Feb 2025 13:37:41 +0000 Received: from SATLEXMB06.amd.com (10.181.40.147) by SATLEXMB03.amd.com (10.181.40.144) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Wed, 5 Feb 2025 07:37:41 -0600 Received: from SATLEXMB04.amd.com (10.181.40.145) by SATLEXMB06.amd.com (10.181.40.147) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Wed, 5 Feb 2025 07:37:40 -0600 Received: from xhdakumarma40.xilinx.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server id 15.1.2507.39 via Frontend Transport; Wed, 5 Feb 2025 07:37:36 -0600 From: Amit Kumar Mahapatra To: , , , , , CC: , , , , , Amit Kumar Mahapatra Subject: [PATCH v12 1/3] dt-bindings: mtd: Describe MTD partitions concatenation Date: Wed, 5 Feb 2025 19:07:28 +0530 Message-ID: <20250205133730.273985-2-amit.kumar-mahapatra@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250205133730.273985-1-amit.kumar-mahapatra@amd.com> References: <20250205133730.273985-1-amit.kumar-mahapatra@amd.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN3PEPF0000B36D:EE_|LV8PR12MB9418:EE_ X-MS-Office365-Filtering-Correlation-Id: f9aaaee9-2829-4150-c608-08dd45ea43cf X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|82310400026|1800799024|36860700013|13003099007|7053199007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?J9Helc6zmA9V7Ep22rHUvFA4hzrWPwMbLcZvJ76f4UMt5CDsPucWo62SEuCG?= =?us-ascii?Q?ST9NYHb0yZsY0PJ7S8g02nOezrXWB+VG9nAuvPt+UxyJOjNtQh4KThtHGq4c?= =?us-ascii?Q?Df4hdx+X2FkDaj6CjZyHPRkMrJpMUuwV2x442gTa+N8XOL966p73HQsEtq/E?= =?us-ascii?Q?F7V0N6beq65/V+Eh/Xysv6FJAU2fBws+grrdmBjfA6BdO7RAm3X8A5EajDc5?= =?us-ascii?Q?f9jvMUIVo2CfpEnJzHQyZQ+4HYVLWx6BsevOIajVyS+aFCyzfcqfzmAFz0pU?= =?us-ascii?Q?umy9MPFE5dqerEoH6P+1sMFYezKxoEUyYSwh0px6aSgFUlL4R0Iswrx37dB2?= =?us-ascii?Q?s0u+smuxpRoSQPlMaRvN8GcKDWh+8W65Be0SnYD19d18/nOTSsrZcvHRQsgR?= =?us-ascii?Q?iYqPSn080bl0sDNYJaJgi5FQdK990L0L4Q7MQ4OyIXpmeuy84LyLZ2T4W5Fh?= =?us-ascii?Q?XBUS/P2FuL+FMs4RcggahF96l/KETRtYAxvs3oCT463cK2m/CTbo75FAgnRA?= =?us-ascii?Q?F1oIxkF5l2WXmNsvGL/xmUAwk/i8F3DMk6J1Ifr7+Q3u+/P6OwlkFJgl6nQo?= =?us-ascii?Q?bNyTeJ1fiY7k/1wQTu1ev3ZBoeMwSNTdnO+9CakgK8a3HEWXJ6l9JZGCZD4p?= =?us-ascii?Q?SbjuUBUuIH9KAjBW2onK43bGG5etde0AY4LWfQ+4u6lEVIthZwYP4RndLcpL?= =?us-ascii?Q?lcPILUNmFoZ8gS5ZpFNUtwrF0REw/eU6NxFOpyXJgJAwL+cIBDDK6AiM7uYH?= =?us-ascii?Q?z6C17owFSaow+uyfJAqotFU31Kw3kV/ODZ5RVTww+MFJYYi5bSy/J8QoIfPd?= =?us-ascii?Q?VqcGfsMsRkBJ0eb9X0Sd6CuGwUiL9/G75KiMeO3G8Qepk3IT37esBr1onPez?= =?us-ascii?Q?pf67MX1j66jsHsRKRY127jTNElllBQUht2UsRGjCdwr5/8UBLeR7fBVZhBc9?= =?us-ascii?Q?KfRSMaCqzX86sINljuSuEuzQBDJkbEATuTZTKrkamad4RXfy41pmBrV8nEqL?= =?us-ascii?Q?YavyS7F7l86oNOvJDTPzMtKz40UEW0VI+n7MK9jYzWXDTX/D2g3Zlz+UZNQz?= =?us-ascii?Q?DvpuLjyA399eRD68K5CXv7Opqzhdg8tS75OCU9W5zeraBWU3hXquFeT7S38P?= =?us-ascii?Q?z7MpKvO8ZgvkOtCScnEOgz78HHpNqkNcP8OnIeEoMYGTJJxKdB0l+QoQS0zM?= =?us-ascii?Q?dewUAEJCFdByPoqU83ysWV7lBbbCgml++Dejk6ao3+pltdMiBHOvDhohbd0p?= =?us-ascii?Q?3jM+TjXfmeK+oXcE7XzXxDVwjzWkSfBy0TtpG4UrPBHKSkyFttF+1YY5DQSO?= =?us-ascii?Q?9KdKsQ7U4VGvN7y66POZqNpXeyV8Acsg3d4gUQEuqWAAHwAtBcWaI5HmgDNa?= =?us-ascii?Q?+jS58rH8FifP6hrIDWTfebEErTqRkBJhqGRAhCA19HWHf8deIKLShGChBPPE?= =?us-ascii?Q?RAXtWmtZUDs=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB03.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(376014)(7416014)(82310400026)(1800799024)(36860700013)(13003099007)(7053199007);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Feb 2025 13:37:41.8207 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f9aaaee9-2829-4150-c608-08dd45ea43cf X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB03.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BN3PEPF0000B36D.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV8PR12MB9418 Content-Type: text/plain; charset="utf-8" The AMD QSPI controller supports an advanced connection modes called Stacked mode which allow the controller to treat two different flashes as one storage. In Stacked connection mode flashes share the same SPI bus, but different CS line, controller driver asserts the CS of the flash to which it needs to communicate. Stacked mode is a software abstraction rather than a controller feature or capability. At any given time, the controller communicates with one of the two connected flash devices, as determined by the requested address and data length. If an operation starts on one flash and ends on the other, the mtd layer needs to split it into two separate operations and adjust the data length accordingly. For more information on the modes please feel free to go through the controller flash interface below [1]. Introduce new DT property to specify which partitions are concatenated to each other. flash@0 { reg =3D <0>; partitions { compatible =3D "fixed-partitions"; part-concat =3D <&flash0_part1>, <&flash1_part0>; flash0_part0: part0@0 { label =3D "part0_0"; reg =3D <0x0 0x800000>; }; flash0_part1: part1@800000 { label =3D "part0_1"; reg =3D <0x800000 0x800000>; }; }; }; flash@1 { reg =3D <1>; partitions { compatible =3D "fixed-partitions"; flash1_part0: part1@0 { label =3D "part1_0"; reg =3D <0x0 0x800000>; }; flash1_part1: part1@800000 { label =3D "part1_1"; reg =3D <0x800000 0x800000>; }; }; }; The partitions that gets created are part0_0 part1_1 part0_1-part1_0-concat [1] https://docs.amd.com/r/en-US/am011-versal-acap-trm/QSPI-Flash-Device-In= terface Suggested-by: Miquel Raynal Signed-off-by: Amit Kumar Mahapatra --- .../bindings/mtd/partitions/partition.yaml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/Documentation/devicetree/bindings/mtd/partitions/partition.yam= l b/Documentation/devicetree/bindings/mtd/partitions/partition.yaml index 80d0452a2a33..f77fef368211 100644 --- a/Documentation/devicetree/bindings/mtd/partitions/partition.yaml +++ b/Documentation/devicetree/bindings/mtd/partitions/partition.yaml @@ -57,6 +57,12 @@ properties: user space from type: boolean =20 + part-concat: + description: List of MTD partitions phandles that should be concatenat= ed. + $ref: /schemas/types.yaml#/definitions/phandle-array + minItems: 2 + maxItems: 16 + align: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 2 @@ -125,6 +131,7 @@ examples: compatible =3D "fixed-partitions"; #address-cells =3D <1>; #size-cells =3D <1>; + part-concat =3D <&part0>, <&part1>; =20 partition@100000 { compatible =3D "u-boot"; @@ -138,4 +145,14 @@ examples: reg =3D <0x200000 0x100000>; align =3D <0x4000>; }; + + part0: partition@400000 { + label =3D "part0_0"; + reg =3D <0x400000 0x100000>; + }; + + part1: partition@800000 { + label =3D "part0_1"; + reg =3D <0x800000 0x800000>; + }; }; --=20 2.34.1 From nobody Sun Dec 14 21:33:55 2025 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2068.outbound.protection.outlook.com [40.107.223.68]) (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 EDA3F126C03; Wed, 5 Feb 2025 13:37:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.223.68 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738762670; cv=fail; b=Hjhkmr0AoEQJjoEfyJ5nJXFumHww0aJKQt0IRNgtF/Fhw8WLguwl4366GyLvj0Zh65naRoD5CT7ZWS+yTMOqWVtFkIhnRQaC/4nb9s001F3t+lE0nbswr5QYlx2ZVe+scwdYd5OKRHycLn3DmuF/IBllBOAHV/kt/ereQeL3IEQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738762670; c=relaxed/simple; bh=UZDyFGMgTDm9QveolAnHTNZTCq9S6cOnsnF7ZNrDelQ=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Sq3NwIoexCYpQxOGwVs98CvfBnoIjsUuejmr097EuLCa7bNrr27MToeGAQaTLchtB4cQ+1viXHEqApxUNLBnsu7IwhwTmVsi7o/E/hgp1n7C/9D2EZi4dDmVJvi3E/GtIkawhQS4D5eg7DOwUlCmyAJ0QnUzIXqhzUzxDC46E2A= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=xcMJAbwb; arc=fail smtp.client-ip=40.107.223.68 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="xcMJAbwb" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=dPGesmiFQOuGY1MJJA9NAgI2l+bsUqiEleUfqTN05UIuw7XqdEkIGFiyeTbF5weHuRKU71mBesoFsOWy5oWwddW+LopKEaAjm5kMivyDey9Qset7W2kPk6CtkZWd6uzJbjR2JuIbZLZvb8Kawmw5mLLNds4El8sTF/DohlShWrzZ4XouozJ8Nk8inrgA3x8JY3/T6a6WGmpG4SY4ReNfnd9vnCSmD+bYD9AvdPZ5NoWrQA+gsRbvvF9bjDA5nTr8YZMmbpID85Pid6NPmHl/w7BuyqU/sdIAl2ugHggcoluCsa7bSnkyEJl10fJxWsj5vTkE4L50UwTsjckWxuBvjg== 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=sOaCrmzgt3ty3XF3orj5cCWII1wOJJTN56ty7LTSg0w=; b=qTUmnkly+PF7hbryGB1IydL4FFcZ5gUR6fEOQ1rXIiqfun0tPv0oMzcEujrmeyROxuKaep0Wklo9OyRf/ipKzluFZQ+mvzVJrxQybbyRIuJPZPAEly1romPSBwB4A+cKvZZyObZNmc07o6dKdLMO5LwTrLYNNjBOQoBjQZbCQf34Sq/ppn35i2FZiksu9o+BzzaYxTxiam+2pYjv23/zcDRCj99MCPGq2lRN4Ng6hFZgJSaNgfmM7yRUmOqN07HXOynoXOAl7bWovwBeQ0B7UydXPTNRv6+P+e+FDeB7JmyueRZ15dn7+fgcJ1yWJbCNVO3Y3VfcZX9iaGlBzHoBkA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=bootlin.com smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=sOaCrmzgt3ty3XF3orj5cCWII1wOJJTN56ty7LTSg0w=; b=xcMJAbwbBsiYzgd3l42KhqY2d+X+hBLKAlz9MmTDbBHMt3s7VofzNybjfpdMreycLL9hnx1FLlqZrWAjnhuOfJqCQE7hYuLBjIFoaY/ZbFFHizDTM5tS/NvnVnUGxRWywbg7TR6HIoOftWVraAPTccB97ogHzJwq5BpLWY+5uBI= Received: from MN2PR01CA0061.prod.exchangelabs.com (2603:10b6:208:23f::30) by CH2PR12MB4072.namprd12.prod.outlook.com (2603:10b6:610:7e::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8398.25; Wed, 5 Feb 2025 13:37:46 +0000 Received: from BN3PEPF0000B36D.namprd21.prod.outlook.com (2603:10b6:208:23f:cafe::2d) by MN2PR01CA0061.outlook.office365.com (2603:10b6:208:23f::30) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8398.28 via Frontend Transport; Wed, 5 Feb 2025 13:37:46 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB03.amd.com; pr=C Received: from SATLEXMB03.amd.com (165.204.84.17) by BN3PEPF0000B36D.mail.protection.outlook.com (10.167.243.164) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8445.2 via Frontend Transport; Wed, 5 Feb 2025 13:37:46 +0000 Received: from SATLEXMB06.amd.com (10.181.40.147) by SATLEXMB03.amd.com (10.181.40.144) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Wed, 5 Feb 2025 07:37:45 -0600 Received: from SATLEXMB04.amd.com (10.181.40.145) by SATLEXMB06.amd.com (10.181.40.147) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Wed, 5 Feb 2025 07:37:43 -0600 Received: from xhdakumarma40.xilinx.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server id 15.1.2507.39 via Frontend Transport; Wed, 5 Feb 2025 07:37:40 -0600 From: Amit Kumar Mahapatra To: , , , , , CC: , , , , , Amit Kumar Mahapatra Subject: [PATCH v12 2/3] mtd: Move struct mtd_concat definition to header file Date: Wed, 5 Feb 2025 19:07:29 +0530 Message-ID: <20250205133730.273985-3-amit.kumar-mahapatra@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250205133730.273985-1-amit.kumar-mahapatra@amd.com> References: <20250205133730.273985-1-amit.kumar-mahapatra@amd.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN3PEPF0000B36D:EE_|CH2PR12MB4072:EE_ X-MS-Office365-Filtering-Correlation-Id: 8878d442-59a6-43fd-ca9b-08dd45ea46be X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|376014|82310400026|1800799024|7416014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?4nY+QSwQU1AgYGp9m9e/x8sJzthyCJuUQ8CAbg8CNYVGEUFnLiOYpo5z1ukr?= =?us-ascii?Q?ann1Pk6tT7nmRtyh6+7t0WkK4QpCKTCvTkRhQ+No48uPIDMsuoYwkpTKIpNH?= =?us-ascii?Q?Qowda0gqKdS+K7BBvzHpSDoA6lhyV3is1z6N555Hn4uLzzZMtJF/ZFG6zB7t?= =?us-ascii?Q?N1dkiR2fDvZ4KKhm0vBoMuBmtkMjcd7PSuz9jQLKA3pDNqoK2Uy1lL120y93?= =?us-ascii?Q?saQZhQ3UalsuzqHG8SVO3VDoPySEPPYB/W7TmdyHIpZtlZsMREA3IoXKqdkF?= =?us-ascii?Q?3+fs+62uGrQu6rzU0shCt/lAnKjrESA5Z0z1Llz6o31/WQJFyTNKUlZyD0UZ?= =?us-ascii?Q?sdndGuG5b3tae2wxWNr3aM1s3zqtNWYcKjj4syB7G6hT36ys4U9ApAfE+kkX?= =?us-ascii?Q?DDSKfLswC2vnLc2ZePLK81w1b4st6Zkf3YKX+G9jt50zQ3PhzZfG9j1vvqqf?= =?us-ascii?Q?sqEvfQgkBIwa8ceuV7qWAUtIvoikpOV8495u3E0oEXfeb2s3FkWNwGI2p9u7?= =?us-ascii?Q?WCO4Y8xh/TSvNP95Mt/AEQiivkRQrQ4PEMdFRCUsZZVMyYaZGcHUheuQ2oKW?= =?us-ascii?Q?fLehFx4mFUmNft30HALeNilykeLzPJx+AYVza6TJPNQbY+1AcclnGMLnSSRE?= =?us-ascii?Q?UY9V3Ru31PHdvosX18m0OZTFTEl/sie6mCfar39kcRqPbOC5o4W/4vy3nLjq?= =?us-ascii?Q?qSHDG7xztb0+APheTyUk2yhlnuvVzHBKaFcaG/YhN+FJ+5Oih2FcGyvRLx0R?= =?us-ascii?Q?fDOKdDbIFUe5iv72GWNU0jmz7Ez57H5S5yeWB058091l+FEvSQTtY31UXSCt?= =?us-ascii?Q?YWDi3yp9im1S99cjT3TnMWiIDIs6tizyXIJ1wLkopBwgg96x+6g5SctQ2Vdq?= =?us-ascii?Q?fFzorS83YW6u3Oi/2vVtcE8csFYrEgV7TnK0Zffu4JlAQeNpde09XuJE9MHK?= =?us-ascii?Q?3KS7Nf/AQit91ov8HU/35Nmn6dsnXC88dmJ1dLr05S+iZ1YnD1QnD3oyc5HD?= =?us-ascii?Q?hxQ32dYbOb/9Ha/P/IrbTjFOEGAV4C+5w4pl2sb4E2cHmyKb7DK2WInY6XQ1?= =?us-ascii?Q?oqJ4WbItD9RmMDO3B9l/or7ltKsYXGJKRyqbgecV0t++1ZLtPkRlG4JDOCAi?= =?us-ascii?Q?k+1C64akn6fokDDD0W+SVc4bBsHGi1EeBxQgcRHfTSyQqhQoz+QfG1G5YHMk?= =?us-ascii?Q?wGvmYAtV3kPzO1d3S43xJXrLv1TL/S6yUa1ZeVVVGQJeZ63oWj/+UXJJN7db?= =?us-ascii?Q?1rc5SkrnPcW3c1xWHX7pIXJvdTiLqF+5i0iNSNGEbB1OdiK5ib5j2x+affoe?= =?us-ascii?Q?6ajO9pNNjAjzkNLopQPPbnXkFu2EqWBG8pFuXddQ/OyE0XJe8WgZ8eKOnoDQ?= =?us-ascii?Q?HfRo7hWl5p4KX8Tjrk66sO4FIkbjesWdBCitP/7HHEyF0W5av7OQWuH6pBdl?= =?us-ascii?Q?Od6Slkss1rvlNCdWJ7jEdzYm8D8vK1wLcs2C/cWgbJqhN61niJhKH+3b+Egd?= =?us-ascii?Q?7yV/uPF5Zz4UFAk=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB03.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700013)(376014)(82310400026)(1800799024)(7416014);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Feb 2025 13:37:46.7426 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 8878d442-59a6-43fd-ca9b-08dd45ea46be X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB03.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BN3PEPF0000B36D.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH2PR12MB4072 Content-Type: text/plain; charset="utf-8" To enable a more generic approach for concatenating MTD devices, struct mtd_concat should be accessible beyond the mtdconcat driver. Therefore, the definition is being moved to a header file. Signed-off-by: Amit Kumar Mahapatra --- drivers/mtd/mtdconcat.c | 12 ------------ include/linux/mtd/concat.h | 12 ++++++++++++ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/drivers/mtd/mtdconcat.c b/drivers/mtd/mtdconcat.c index f56f44aa8625..6f2aaceac669 100644 --- a/drivers/mtd/mtdconcat.c +++ b/drivers/mtd/mtdconcat.c @@ -20,18 +20,6 @@ =20 #include =20 -/* - * Our storage structure: - * Subdev points to an array of pointers to struct mtd_info objects - * which is allocated along with this structure - * - */ -struct mtd_concat { - struct mtd_info mtd; - int num_subdev; - struct mtd_info **subdev; -}; - /* * how to calculate the size required for the above structure, * including the pointer array subdev points to: diff --git a/include/linux/mtd/concat.h b/include/linux/mtd/concat.h index d6f653e07426..b42d9af87c4e 100644 --- a/include/linux/mtd/concat.h +++ b/include/linux/mtd/concat.h @@ -9,6 +9,18 @@ #define MTD_CONCAT_H =20 =20 +/* + * Our storage structure: + * Subdev points to an array of pointers to struct mtd_info objects + * which is allocated along with this structure + * + */ +struct mtd_concat { + struct mtd_info mtd; + int num_subdev; + struct mtd_info **subdev; +}; + struct mtd_info *mtd_concat_create( struct mtd_info *subdev[], /* subdevices to concatenate */ int num_devs, /* number of subdevices */ --=20 2.34.1 From nobody Sun Dec 14 21:33:55 2025 Received: from NAM02-BN1-obe.outbound.protection.outlook.com (mail-bn1nam02on2042.outbound.protection.outlook.com [40.107.212.42]) (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 67EEA149DE8; Wed, 5 Feb 2025 13:37:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.212.42 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738762676; cv=fail; b=TpdG4FGPGIKA8N/LCw6G9pkxpVrcxAw//uUqIeiNQGKXjj+k2bOQIbzpynHCa7Rb+P+UjrSM31sw7gC3b7AmzLlGsRbDNxERlcJxSCraQ93kV4lu0XFueAbY6b7jd5IElzox5XlUn/ixdm8OB/odwJDDpQaXOiIculuLY8MWjFg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738762676; c=relaxed/simple; bh=FplIE3uTjRmsBh+wf2yZtnSZjA3m2Zev4mlFuUcrcec=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=pyhWsM7jDmJUQ6HeHmnlKtjXu0QHwQTQd8r0q7cp7LU/Wg8c8mrE3CdyJbIbyi2XkLXuJjHf5X1+bIsB9reNeQJFeyxLxt/ujeo0g1JXYWI/E9XgM+lcsWAk6IFlfLuNcwScqLtcCVo6sk/r7vveJmh7eAjIzHO6UhMtL3eL3aQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=IWaIPgda; arc=fail smtp.client-ip=40.107.212.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="IWaIPgda" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=stDKYSZiL04QoLhaed027wN0mzxWnbShfhJLixPBR+dPI98QJFfh7BH59QtfXUsTg5fTpu0VX7OmWLYkoZzlQpCQeB2/C9XV2Jw/MuSxiuyW+54QQ3u+afGlQxLk/diQoQIW3m8gn9NRnUZnvEKkAIfr8Ci3Ewgi0VbAVxU2FR3FVDNzZKldsBlTZkDNyFhvKbH/dD0t91E+FEAYKocvylPTokaFGKWbbGBf3MCkJ0KJ1P92759JaObru9dibk7gp09QyYgnjtwtAenW8TjLIQKhxOoBqY3RG8/LacX02zrOgLKXxB6k86tZPBCBLBvJk3n9v8/coREz9V5Yhpw80Q== 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=M34D0EJ0AP577sMN+0b5NtGG79EQTRVQmtqxiWmuo0A=; b=lxv/zeQohdH+LniT5KJ3u4LHgXUxu5XTpjIa7wW8lLb0b0GY0/WWraVS3Vx0el4t+4YQmH1aD91TdcR5BUcAbFptAHaPEpo//aiGXxHgcsne6ItiRH2qtNRtOCMFWhFYFkhNd/MWteDIFy9UT2Y3Uv/LKwOi9kkkiMm3h9vuuCWBLIC0tJWC8PtWqkffJraWqEcEcYSfRnYowOAo1iw7ES9RelXB1yQYELEPpuFrfRewYnOkxK9aj66FQBcf7fwoK50t5jMWuUlAOMV6XxaLJO2B5Y+dCWmgB6PZYs2gxuW0vlTJbqsLBEXdhvNp5AecEghbhd0JFFQ54xJukvMtsA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=bootlin.com smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=M34D0EJ0AP577sMN+0b5NtGG79EQTRVQmtqxiWmuo0A=; b=IWaIPgda2uSI4uygsi+M4BRG3CVnkZ/OtU88isskE0aZX7YUfJx7r6MVlpEd/MrgKFGFSiMU/JAbQTQLXaEiOwF/VViODbTtJaz3bLlXXGJAFMKmT13XtNnDE7+e8YZUzp43LIKNWe/iifkCwdz6vfCw4X1zRBzLlmfSv0RpbdU= Received: from LV3P220CA0011.NAMP220.PROD.OUTLOOK.COM (2603:10b6:408:234::12) by MN0PR12MB6344.namprd12.prod.outlook.com (2603:10b6:208:3d3::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8398.25; Wed, 5 Feb 2025 13:37:50 +0000 Received: from BN3PEPF0000B36E.namprd21.prod.outlook.com (2603:10b6:408:234:cafe::2a) by LV3P220CA0011.outlook.office365.com (2603:10b6:408:234::12) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8398.27 via Frontend Transport; Wed, 5 Feb 2025 13:37:50 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB03.amd.com; pr=C Received: from SATLEXMB03.amd.com (165.204.84.17) by BN3PEPF0000B36E.mail.protection.outlook.com (10.167.243.165) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8445.2 via Frontend Transport; Wed, 5 Feb 2025 13:37:49 +0000 Received: from SATLEXMB06.amd.com (10.181.40.147) by SATLEXMB03.amd.com (10.181.40.144) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Wed, 5 Feb 2025 07:37:49 -0600 Received: from SATLEXMB04.amd.com (10.181.40.145) by SATLEXMB06.amd.com (10.181.40.147) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Wed, 5 Feb 2025 07:37:47 -0600 Received: from xhdakumarma40.xilinx.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server id 15.1.2507.39 via Frontend Transport; Wed, 5 Feb 2025 07:37:44 -0600 From: Amit Kumar Mahapatra To: , , , , , CC: , , , , , Amit Kumar Mahapatra , Bernhard Frauendienst Subject: [PATCH v12 3/3] mtd: Add driver for concatenating devices Date: Wed, 5 Feb 2025 19:07:30 +0530 Message-ID: <20250205133730.273985-4-amit.kumar-mahapatra@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250205133730.273985-1-amit.kumar-mahapatra@amd.com> References: <20250205133730.273985-1-amit.kumar-mahapatra@amd.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN3PEPF0000B36E:EE_|MN0PR12MB6344:EE_ X-MS-Office365-Filtering-Correlation-Id: 1917a6d5-73cb-441f-5395-08dd45ea48a4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|36860700013|1800799024|376014|7416014|7053199007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?g/0y0WMa0ssEXhTqPB8VLC9n08elsR93sYPdCABPTiymIo/2m24/DrnrvH9S?= =?us-ascii?Q?nUizKVGEbFYMBc5KJbLlULY6IdtNfToQb8uCekClbzWIQJvrkcrYFygksOJ4?= =?us-ascii?Q?Fe/en51WiJKUIt9WPXoVXCP/nTiGiFh9zKQ1rq0c401WDajd9beKKAHfoSek?= =?us-ascii?Q?bjZgISzCC/qkqu/U2qD32hCGHTfWdBlPKzDe3EpiHbv5qDn4Glbj9PNSthJ6?= =?us-ascii?Q?S/frBVhtbDzpkGNOnuOOZR3lKq/OXQIVSrq3XoV8O6r/rEhHmOJiuz96kNm3?= =?us-ascii?Q?Fha9977Xm4VnR6DK/3KEJFeD6L4VZfh5pXqTgZqYl/jmwHdqU1iz8dki8eWf?= =?us-ascii?Q?UmQOjjg74OHj7SPTlX38URUP2+SRp4IHgBB71w5ecpJCq9VRnAKELn7T6CUo?= =?us-ascii?Q?0rQ5NHgO+NK6vHVbrnGLbe0pl2rPwgPbQ144vn2MI2ZSBynIPThsRJI+1Vhz?= =?us-ascii?Q?AtcvIH9dowbgnSWmhBeTvT1zpoKH8l+SkU3pmkH0iioqh4jNudRnHOWk+iWc?= =?us-ascii?Q?1G/pk8MnLSf1hv9TtqWrQ2SziXPHyifLOmAfpWTO564V3MfhRxDcQQfUSPjI?= =?us-ascii?Q?ne6t9XnJsdZM65PBBHU4lSYDgdyycLQzRq/L0B4+uzdf7EEvMFwHGKlVhEgF?= =?us-ascii?Q?I+LHpLiL3ez0iuBSW6Vcaf7dU3ZYst9nt0lbxhia2RzaJmS5s6CGLTlDpXAW?= =?us-ascii?Q?6WUIo104OKdG9knhno+bHcZvtNa3izxbtRfAGnM3dYeJtzDPCd+CdhUS28gn?= =?us-ascii?Q?6kYjVhg/YEiT0RKqw7KO+YrmuHPRrweQ3M6OZbhsZWgrFO6zJ9pBOXlqThVP?= =?us-ascii?Q?5IxS/E7d5MfFp5MOOH2Ly0Z9uBM33bWvMZBzGbutXSffXaPfCOUHF/18mGTu?= =?us-ascii?Q?0yQtjgFLuAdPfAt8OaVc57ZTOv7wWU9b3oo/ZnUB8D/Uq4mXfLhka4c2/+d9?= =?us-ascii?Q?Zaw4NL0FBJIE3zCibEG41uG8A8FpNOYar6NDQIYkqbe1dhMf8QHi0Rjcitet?= =?us-ascii?Q?/Xy42sIpUXnD/qTCkARXJFORvIPLKolj7ZYoNAZlB99PcrhqXFLt8MYH5wYc?= =?us-ascii?Q?dJBLri6JxmozE6p/7YXLm6IrAMLrUwehGobBWBKvVNLJ6bP/uShRSNq4b5TU?= =?us-ascii?Q?PuLxiyyH+49DaacyclCBhNE4otg7pe8GuFbmg5Nji5XO/GoUta5I0mJ8RI25?= =?us-ascii?Q?xzw/qjj6D+nXzRJkmVC490/xO8BwCHd+41Uwg71ggH28ViQeLIoblAmHgv/W?= =?us-ascii?Q?JkazCAAnojLpkN2gAWyN/0fDe1ihRSKlYRirnvmA7hSCeYaPCU4E/z8Nkh3U?= =?us-ascii?Q?nuVGK+KiZEOqpYepZWaS49HSNq08x0P31MDmQj2w5n5Z/hQOYOd+57Dc7aKm?= =?us-ascii?Q?daSlUEfgcHjKsh0w2i6ZYdMjCU35VWUquxg2j9p0uOGp//cwObPDTqS+9gid?= =?us-ascii?Q?3v9GvQo2Icz/oypUqfuZ2CKrvkVg4RZjjSDUc4DbuN9arRdI9NlTKpdK7KUg?= =?us-ascii?Q?xoq5SbWtlfm8zZE=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB03.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(82310400026)(36860700013)(1800799024)(376014)(7416014)(7053199007);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Feb 2025 13:37:49.9089 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 1917a6d5-73cb-441f-5395-08dd45ea48a4 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB03.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BN3PEPF0000B36E.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN0PR12MB6344 Content-Type: text/plain; charset="utf-8" Introducing CONFIG_VIRT_CONCAT to separate the legacy flow from the new approach, where individual partitions within a concatenated partition are not registered, as they are likely not needed by the user. Solution is focusing on fixed-partitions description only because it depends on device boundaries. Suggested-by: Bernhard Frauendienst Suggested-by: Miquel Raynal Signed-off-by: Amit Kumar Mahapatra --- drivers/mtd/Kconfig | 8 ++ drivers/mtd/Makefile | 1 + drivers/mtd/mtd_virt_concat.c | 254 ++++++++++++++++++++++++++++++++++ drivers/mtd/mtdcore.c | 7 + drivers/mtd/mtdpart.c | 6 + include/linux/mtd/concat.h | 24 ++++ 6 files changed, 300 insertions(+) create mode 100644 drivers/mtd/mtd_virt_concat.c diff --git a/drivers/mtd/Kconfig b/drivers/mtd/Kconfig index 796a2eccbef0..3dade7c469df 100644 --- a/drivers/mtd/Kconfig +++ b/drivers/mtd/Kconfig @@ -206,6 +206,14 @@ config MTD_PARTITIONED_MASTER the parent of the partition device be the master device, rather than what lies behind the master. =20 +config MTD_VIRT_CONCAT + tristate "Virtual concatenated MTD devices" + help + The driver enables the creation of a virtual MTD device + by concatenating multiple physical MTD devices into a single + entity. This allows for the creation of partitions larger than + the individual physical chips, extending across chip boundaries. + source "drivers/mtd/chips/Kconfig" =20 source "drivers/mtd/maps/Kconfig" diff --git a/drivers/mtd/Makefile b/drivers/mtd/Makefile index 593d0593a038..d1d577f89a22 100644 --- a/drivers/mtd/Makefile +++ b/drivers/mtd/Makefile @@ -22,6 +22,7 @@ obj-$(CONFIG_SM_FTL) +=3D sm_ftl.o obj-$(CONFIG_MTD_OOPS) +=3D mtdoops.o obj-$(CONFIG_MTD_PSTORE) +=3D mtdpstore.o obj-$(CONFIG_MTD_SWAP) +=3D mtdswap.o +obj-$(CONFIG_MTD_VIRT_CONCAT) +=3D mtd_virt_concat.o =20 nftl-objs :=3D nftlcore.o nftlmount.o inftl-objs :=3D inftlcore.o inftlmount.o diff --git a/drivers/mtd/mtd_virt_concat.c b/drivers/mtd/mtd_virt_concat.c new file mode 100644 index 000000000000..3de67305a09b --- /dev/null +++ b/drivers/mtd/mtd_virt_concat.c @@ -0,0 +1,254 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Virtual concat MTD device driver + * + * Copyright (C) 2018 Bernhard Frauendienst + * Author: Bernhard Frauendienst + */ + +#include +#include +#include +#include "mtdcore.h" +#include +#include +#include +#include +#include + +#define CONCAT_PROP "part-concat" +#define MIN_DEV_PER_CONCAT 2 + +static LIST_HEAD(concat_node_list); + +/** + * struct mtd_virt_concat_node - components of a concatenation + * @head: List handle + * @count: Number of nodes + * @nodes: Pointer to the nodes (partitions) to concatenate + * @concat: Concatenation container + */ +struct mtd_virt_concat_node { + struct list_head head; + unsigned int count; + struct device_node **nodes; + struct mtd_concat *concat; +}; + +static void mtd_virt_concat_put_mtd_devices(struct mtd_concat *concat) +{ + int i; + + for (i =3D 0; i < concat->num_subdev; i++) + put_mtd_device(concat->subdev[i]); +} + +static void mtd_virt_concat_destroy_joins(void) +{ + struct mtd_virt_concat_node *item, *tmp; + struct mtd_info *mtd; + + list_for_each_entry_safe(item, tmp, &concat_node_list, head) { + mtd =3D &item->concat->mtd; + if (item->concat) { + mtd_device_unregister(mtd); + kfree(mtd->name); + mtd_concat_destroy(mtd); + mtd_virt_concat_put_mtd_devices(item->concat); + } + } +} + +static int mtd_virt_concat_create_item(struct device_node *parts, + unsigned int count) +{ + struct mtd_virt_concat_node *item; + struct mtd_concat *concat; + int i; + + item =3D kzalloc(sizeof(*item), GFP_KERNEL); + if (!item) + return -ENOMEM; + + item->count =3D count; + item->nodes =3D kcalloc(count, sizeof(*item->nodes), GFP_KERNEL); + if (!item->nodes) { + kfree(item); + return -ENOMEM; + } + + for (i =3D 0; i < count; i++) + item->nodes[i] =3D of_parse_phandle(parts, CONCAT_PROP, i); + + concat =3D kzalloc(sizeof(*concat), GFP_KERNEL); + if (!concat) { + kfree(item); + return -ENOMEM; + } + + concat->subdev =3D kcalloc(count, sizeof(*concat->subdev), GFP_KERNEL); + if (!concat->subdev) { + kfree(item); + kfree(concat); + return -ENOMEM; + } + item->concat =3D concat; + + list_add_tail(&item->head, &concat_node_list); + + return 0; +} + +static void mtd_virt_concat_destroy_items(void) +{ + struct mtd_virt_concat_node *item, *temp; + int i; + + list_for_each_entry_safe(item, temp, &concat_node_list, head) { + for (i =3D 0; i < item->count; i++) + of_node_put(item->nodes[i]); + + kfree(item->nodes); + kfree(item); + } +} + +bool mtd_virt_concat_add(struct mtd_info *mtd) +{ + struct mtd_virt_concat_node *item; + struct mtd_concat *concat; + int idx; + + list_for_each_entry(item, &concat_node_list, head) { + concat =3D item->concat; + if (item->count =3D=3D concat->num_subdev) + return false; + + for (idx =3D 0; idx < item->count; idx++) { + if (item->nodes[idx] =3D=3D mtd->dev.of_node) { + concat->subdev[concat->num_subdev++] =3D mtd; + return true; + } + } + } + return false; +} +EXPORT_SYMBOL_GPL(mtd_virt_concat_add); + +int mtd_virt_concat_node_create(void) +{ + struct mtd_concat *concat; + struct device_node *parts =3D NULL; + int ret =3D 0, count; + + if (!list_empty(&concat_node_list)) + return 0; + + /* List all the concatenations found in DT */ + do { + parts =3D of_find_node_with_property(parts, CONCAT_PROP); + if (!of_device_is_available(parts)) + continue; + + count =3D of_count_phandle_with_args(parts, CONCAT_PROP, NULL); + if (count < MIN_DEV_PER_CONCAT) + continue; + + ret =3D mtd_virt_concat_create_item(parts, count); + if (ret) { + of_node_put(parts); + goto destroy_items; + } + } while (parts); + + concat =3D kzalloc(sizeof(*concat), GFP_KERNEL); + if (!concat) { + ret =3D -ENOMEM; + of_node_put(parts); + goto destroy_items; + } + + concat->subdev =3D kcalloc(count, sizeof(*concat->subdev), GFP_KERNEL); + if (!concat->subdev) { + kfree(concat); + ret =3D -ENOMEM; + of_node_put(parts); + goto destroy_items; + } + + return count; + +destroy_items: + mtd_virt_concat_destroy_items(); + + return ret; +} +EXPORT_SYMBOL_GPL(mtd_virt_concat_node_create); + +static int __init mtd_virt_concat_create_join(void) +{ + struct mtd_virt_concat_node *item; + struct mtd_concat *concat; + struct mtd_info *mtd; + ssize_t name_sz; + char *name; + int ret; + + list_for_each_entry(item, &concat_node_list, head) { + concat =3D item->concat; + mtd =3D &concat->mtd; + /* Create the virtual device */ + name_sz =3D snprintf(NULL, 0, "%s-%s%s-concat", + concat->subdev[0]->name, + concat->subdev[1]->name, + concat->num_subdev > MIN_DEV_PER_CONCAT ? + "-+" : ""); + name =3D kmalloc(name_sz + 1, GFP_KERNEL); + if (!name) { + mtd_virt_concat_put_mtd_devices(concat); + return -ENOMEM; + } + + sprintf(name, "%s-%s%s-concat", + concat->subdev[0]->name, + concat->subdev[1]->name, + concat->num_subdev > MIN_DEV_PER_CONCAT ? + "-+" : ""); + + mtd =3D mtd_concat_create(concat->subdev, concat->num_subdev, name); + if (!mtd) { + kfree(name); + return -ENXIO; + } + + /* Arbitrary set the first device as parent */ + mtd->dev.parent =3D concat->subdev[0]->dev.parent; + mtd->dev =3D concat->subdev[0]->dev; + + /* Register the platform device */ + ret =3D mtd_device_register(mtd, NULL, 0); + if (ret) + goto destroy_concat; + } + + return 0; + +destroy_concat: + mtd_concat_destroy(mtd); + + return ret; +} + +late_initcall(mtd_virt_concat_create_join); + +static void __exit mtd_virt_concat_exit(void) +{ + mtd_virt_concat_destroy_joins(); + mtd_virt_concat_destroy_items(); +} +module_exit(mtd_virt_concat_exit); + +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Bernhard Frauendienst "); +MODULE_AUTHOR("Amit Kumar Mahapatra "); +MODULE_DESCRIPTION("Virtual concat MTD device driver"); diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c index 724f917f91ba..2264fe81810f 100644 --- a/drivers/mtd/mtdcore.c +++ b/drivers/mtd/mtdcore.c @@ -34,6 +34,7 @@ =20 #include #include +#include =20 #include "mtdcore.h" =20 @@ -1067,6 +1068,12 @@ int mtd_device_parse_register(struct mtd_info *mtd, = const char * const *types, goto out; } =20 + if (IS_ENABLED(CONFIG_MTD_VIRT_CONCAT)) { + ret =3D mtd_virt_concat_node_create(); + if (ret < 0) + goto out; + } + /* Prefer parsed partitions over driver-provided fallback */ ret =3D parse_mtd_partitions(mtd, types, parser_data); if (ret =3D=3D -EPROBE_DEFER) diff --git a/drivers/mtd/mtdpart.c b/drivers/mtd/mtdpart.c index 6811a714349d..4f50e14b96dd 100644 --- a/drivers/mtd/mtdpart.c +++ b/drivers/mtd/mtdpart.c @@ -18,6 +18,7 @@ #include #include #include +#include =20 #include "mtdcore.h" =20 @@ -409,6 +410,11 @@ int add_mtd_partitions(struct mtd_info *parent, goto err_del_partitions; } =20 + if (IS_ENABLED(CONFIG_MTD_VIRT_CONCAT)) { + if (mtd_virt_concat_add(child)) + continue; + } + mutex_lock(&master->master.partitions_lock); list_add_tail(&child->part.node, &parent->partitions); mutex_unlock(&master->master.partitions_lock); diff --git a/include/linux/mtd/concat.h b/include/linux/mtd/concat.h index b42d9af87c4e..65c9a18774f6 100644 --- a/include/linux/mtd/concat.h +++ b/include/linux/mtd/concat.h @@ -28,5 +28,29 @@ struct mtd_info *mtd_concat_create( =20 void mtd_concat_destroy(struct mtd_info *mtd); =20 +/** + * mtd_virt_concat_node_create - Create a component for concatenation + * + * Returns a positive number representing the no. of devices found for + * concatenation, or a negative error code. + * + * List all the devices for concatenations found in DT and create a + * component for concatenation. + */ +int mtd_virt_concat_node_create(void); + +/** + * mtd_virt_concat_add - add mtd_info object to the list of subdevices for= concatenation + * @mtd: pointer to new MTD device info structure + * + * Returns true if the mtd_info object is added successfully else returns = false. + * + * The mtd_info object is added to the list of subdevices for concatenatio= n. + * It returns true if a match is found, and false if all subdevices have + * already been added or if the mtd_info object does not match any of the + * intended MTD devices. + */ +bool mtd_virt_concat_add(struct mtd_info *mtd); + #endif =20 --=20 2.34.1