diff --git a/target/linux/generic/pending-6.6/451-block-partitions-populate-fwnode.patch b/target/linux/generic/pending-6.6/451-block-partitions-populate-fwnode.patch index 2aef22879d..e279b71173 100644 --- a/target/linux/generic/pending-6.6/451-block-partitions-populate-fwnode.patch +++ b/target/linux/generic/pending-6.6/451-block-partitions-populate-fwnode.patch @@ -1,15 +1,42 @@ -From 7f4c9c534aabe1315669e076d3fe0af0fd374cda Mon Sep 17 00:00:00 2001 +From patchwork Tue Jul 30 19:25:59 2024 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +X-Patchwork-Submitter: Daniel Golle +X-Patchwork-Id: 13747816 +Date: Tue, 30 Jul 2024 20:25:59 +0100 From: Daniel Golle -Date: Thu, 30 May 2024 03:13:19 +0100 -Subject: [PATCH 2/9] block: partitions: populate fwnode +To: Rob Herring , Krzysztof Kozlowski , + Conor Dooley , Jens Axboe , + Daniel Golle , Christian Brauner , + Al Viro , Li Lingfeng , + Ming Lei , Christian Heusel , + =?utf-8?b?UmFmYcWCIE1pxYJlY2tp?= , + Felix Fietkau , John Crispin , + Chad Monroe , Yangyu Chen , + Tianling Shen , Chuanhong Guo , + Chen Minqiang , devicetree@vger.kernel.org, + linux-kernel@vger.kernel.org, linux-block@vger.kernel.org +Subject: [PATCH v5 2/4] block: partitions: populate fwnode +Message-ID: + <3051ac090ad3b3e2f5adb6b67c923261ead729a5.1722365899.git.daniel@makrotopia.org> +References: +Precedence: bulk +X-Mailing-List: linux-block@vger.kernel.org +List-Id: +List-Subscribe: +List-Unsubscribe: +MIME-Version: 1.0 +Content-Disposition: inline +In-Reply-To: -Let block partitions to be represented by a firmware node and hence -allow them to being referenced e.g. for use with blk-nvmem. +Assign matching firmware nodes to block partitions in order to allow +them to be referenced e.g. as NVMEM providers. Signed-off-by: Daniel Golle --- - block/partitions/core.c | 41 +++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 41 insertions(+) + block/partitions/core.c | 72 +++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 72 insertions(+) --- a/block/partitions/core.c +++ b/block/partitions/core.c @@ -22,36 +49,70 @@ Signed-off-by: Daniel Golle #include "check.h" static int (*const check_part[])(struct parsed_partitions *) = { -@@ -292,6 +294,40 @@ static ssize_t whole_disk_show(struct de +@@ -292,6 +294,74 @@ static ssize_t whole_disk_show(struct de } static const DEVICE_ATTR(whole_disk, 0444, whole_disk_show, NULL); ++static bool part_meta_match(const char *attr, const char *member, size_t length) ++{ ++ /* check if length of attr exceeds specified maximum length */ ++ if (strnlen(attr, length) == length) ++ return false; ++ ++ /* return true if strings match */ ++ return !strncmp(attr, member, length); ++} ++ +static struct fwnode_handle *find_partition_fwnode(struct block_device *bdev) +{ + struct fwnode_handle *fw_parts, *fw_part; + struct device *ddev = disk_to_dev(bdev->bd_disk); + const char *partname, *uuid; + u32 partno; ++ bool got_uuid, got_partname, got_partno; + + fw_parts = device_get_named_child_node(ddev, "partitions"); + if (!fw_parts) + return NULL; + + fwnode_for_each_child_node(fw_parts, fw_part) { -+ if (!fwnode_property_read_string(fw_part, "uuid", &uuid) && -+ (!bdev->bd_meta_info || strncmp(uuid, -+ bdev->bd_meta_info->uuid, -+ PARTITION_META_INFO_UUIDLTH))) ++ got_uuid = false; ++ got_partname = false; ++ got_partno = false; ++ /* ++ * In case 'uuid' is defined in the partitions firmware node ++ * require partition meta info being present and the specified ++ * uuid to match. ++ */ ++ got_uuid = !fwnode_property_read_string(fw_part, "uuid", &uuid); ++ if (got_uuid && (!bdev->bd_meta_info || ++ !part_meta_match(uuid, bdev->bd_meta_info->uuid, ++ PARTITION_META_INFO_UUIDLTH))) + continue; + -+ if (!fwnode_property_read_string(fw_part, "partname", &partname) && -+ (!bdev->bd_meta_info || strncmp(partname, -+ bdev->bd_meta_info->volname, -+ PARTITION_META_INFO_VOLNAMELTH))) ++ /* ++ * In case 'partname' is defined in the partitions firmware node ++ * require partition meta info being present and the specified ++ * volname to match. ++ */ ++ got_partname = !fwnode_property_read_string(fw_part, "partname", ++ &partname); ++ if (got_partname && (!bdev->bd_meta_info || ++ !part_meta_match(partname, ++ bdev->bd_meta_info->volname, ++ PARTITION_META_INFO_VOLNAMELTH))) + continue; + -+ if (!fwnode_property_read_u32(fw_part, "partno", &partno) && -+ bdev->bd_partno != partno) ++ /* ++ * In case 'partno' is defined in the partitions firmware node ++ * the specified partno needs to match. ++ */ ++ got_partno = !fwnode_property_read_u32(fw_part, "partno", &partno); ++ if (got_partno && bdev->bd_partno != partno) ++ continue; ++ ++ /* Skip if no matching criteria is present in firmware node */ ++ if (!got_uuid && !got_partname && !got_partno) + continue; + + return fw_part; @@ -63,7 +124,7 @@ Signed-off-by: Daniel Golle /* * Must be called either with open_mutex held, before a disk can be opened or * after all disk users are gone. -@@ -374,6 +410,8 @@ static struct block_device *add_partitio +@@ -374,6 +444,8 @@ static struct block_device *add_partitio goto out_put; } diff --git a/target/linux/generic/pending-6.6/452-block-add-support-for-notifications.patch b/target/linux/generic/pending-6.6/452-block-add-support-for-notifications.patch index c5a3391e45..cad3fbfa90 100644 --- a/target/linux/generic/pending-6.6/452-block-add-support-for-notifications.patch +++ b/target/linux/generic/pending-6.6/452-block-add-support-for-notifications.patch @@ -1,7 +1,34 @@ -From e07ace307ce598847074a096f408bec0e3a392ed Mon Sep 17 00:00:00 2001 +From patchwork Tue Jul 30 19:26:42 2024 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +X-Patchwork-Submitter: Daniel Golle +X-Patchwork-Id: 13747817 +Date: Tue, 30 Jul 2024 20:26:42 +0100 From: Daniel Golle -Date: Thu, 30 May 2024 03:14:34 +0100 -Subject: [PATCH 3/9] block: add support for notifications +To: Rob Herring , Krzysztof Kozlowski , + Conor Dooley , Jens Axboe , + Daniel Golle , Christian Brauner , + Al Viro , Li Lingfeng , + Ming Lei , Christian Heusel , + =?utf-8?b?UmFmYcWCIE1pxYJlY2tp?= , + Felix Fietkau , John Crispin , + Chad Monroe , Yangyu Chen , + Tianling Shen , Chuanhong Guo , + Chen Minqiang , devicetree@vger.kernel.org, + linux-kernel@vger.kernel.org, linux-block@vger.kernel.org +Subject: [PATCH v5 3/4] block: add support for notifications +Message-ID: + +References: +Precedence: bulk +X-Mailing-List: linux-block@vger.kernel.org +List-Id: +List-Subscribe: +List-Unsubscribe: +MIME-Version: 1.0 +Content-Disposition: inline +In-Reply-To: Add notifier block to notify other subsystems about the addition or removal of block devices. @@ -10,9 +37,9 @@ Signed-off-by: Daniel Golle --- block/Kconfig | 6 +++ block/Makefile | 1 + - block/blk-notify.c | 88 ++++++++++++++++++++++++++++++++++++++++++ - include/linux/blkdev.h | 8 ++++ - 4 files changed, 103 insertions(+) + block/blk-notify.c | 87 ++++++++++++++++++++++++++++++++++++++++++ + include/linux/blkdev.h | 11 ++++++ + 4 files changed, 105 insertions(+) create mode 100644 block/blk-notify.c --- a/block/Kconfig @@ -39,7 +66,7 @@ Signed-off-by: Daniel Golle +obj-$(CONFIG_BLOCK_NOTIFIERS) += blk-notify.o --- /dev/null +++ b/block/blk-notify.c -@@ -0,0 +1,88 @@ +@@ -0,0 +1,87 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Notifiers for addition and removal of block devices @@ -97,7 +124,6 @@ Signed-off-by: Daniel Golle + list_add_tail(&new_blkdev->list, &blk_devices); + raw_notifier_call_chain(&blk_notifier_list, BLK_DEVICE_ADD, dev); + mutex_unlock(&blk_notifier_lock); -+ + return 0; +} + @@ -130,16 +156,19 @@ Signed-off-by: Daniel Golle +device_initcall(blk_notifications_init); --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h -@@ -1564,4 +1564,12 @@ struct io_comp_batch { +@@ -1564,4 +1564,15 @@ struct io_comp_batch { #define DEFINE_IO_COMP_BATCH(name) struct io_comp_batch name = { } + -+#ifdef CONFIG_BLOCK_NOTIFIERS +#define BLK_DEVICE_ADD 1 +#define BLK_DEVICE_REMOVE 2 ++#if defined(CONFIG_BLOCK_NOTIFIERS) +void blk_register_notify(struct notifier_block *nb); +void blk_unregister_notify(struct notifier_block *nb); ++#else ++static inline void blk_register_notify(struct notifier_block *nb) { }; ++static inline void blk_unregister_notify(struct notifier_block *nb) { }; +#endif + #endif /* _LINUX_BLKDEV_H */ diff --git a/target/linux/generic/pending-6.6/453-block-add-new-genhd-flag-GENHD_FL_NVMEM.patch b/target/linux/generic/pending-6.6/453-block-add-new-genhd-flag-GENHD_FL_NVMEM.patch index 5997680e47..79abcd0e6b 100644 --- a/target/linux/generic/pending-6.6/453-block-add-new-genhd-flag-GENHD_FL_NVMEM.patch +++ b/target/linux/generic/pending-6.6/453-block-add-new-genhd-flag-GENHD_FL_NVMEM.patch @@ -1,7 +1,34 @@ -From f4487fa1cb7e55b3c17a33f41b9c9d66f4f853b7 Mon Sep 17 00:00:00 2001 +From patchwork Tue Jul 30 19:27:07 2024 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +X-Patchwork-Submitter: Daniel Golle +X-Patchwork-Id: 13747818 +Date: Tue, 30 Jul 2024 20:27:07 +0100 From: Daniel Golle -Date: Thu, 30 May 2024 03:14:49 +0100 -Subject: [PATCH 4/9] block: add new genhd flag GENHD_FL_NVMEM +To: Rob Herring , Krzysztof Kozlowski , + Conor Dooley , Jens Axboe , + Daniel Golle , Christian Brauner , + Al Viro , Li Lingfeng , + Ming Lei , Christian Heusel , + =?utf-8?b?UmFmYcWCIE1pxYJlY2tp?= , + Felix Fietkau , John Crispin , + Chad Monroe , Yangyu Chen , + Tianling Shen , Chuanhong Guo , + Chen Minqiang , devicetree@vger.kernel.org, + linux-kernel@vger.kernel.org, linux-block@vger.kernel.org +Subject: [PATCH v5 4/4] block: add new genhd flag GENHD_FL_NVMEM +Message-ID: + <311ea569c23ce14e2896cd3b069dc494c58c49c2.1722365899.git.daniel@makrotopia.org> +References: +Precedence: bulk +X-Mailing-List: linux-block@vger.kernel.org +List-Id: +List-Subscribe: +List-Unsubscribe: +MIME-Version: 1.0 +Content-Disposition: inline +In-Reply-To: Add new flag to destinguish block devices which may act as an NVMEM provider. diff --git a/target/linux/mediatek/patches-6.6/041-block-fit-partition-parser.patch b/target/linux/mediatek/patches-6.6/041-block-fit-partition-parser.patch index 49fc7e638c..72233d5fcd 100644 --- a/target/linux/mediatek/patches-6.6/041-block-fit-partition-parser.patch +++ b/target/linux/mediatek/patches-6.6/041-block-fit-partition-parser.patch @@ -92,7 +92,7 @@ Subject: [PATCH] kernel: add block fit partition parser #ifdef CONFIG_SGI_PARTITION sgi_partition, #endif -@@ -430,6 +436,11 @@ static struct block_device *add_partitio +@@ -462,6 +468,11 @@ static struct block_device *add_partitio goto out_del; } @@ -104,7 +104,7 @@ Subject: [PATCH] kernel: add block fit partition parser /* everything is up and running, commence */ err = xa_insert(&disk->part_tbl, partno, bdev, GFP_KERNEL); if (err) -@@ -622,6 +633,11 @@ static bool blk_add_partition(struct gen +@@ -654,6 +665,11 @@ static bool blk_add_partition(struct gen (state->parts[p].flags & ADDPART_FLAG_RAID)) md_autodetect_dev(part->bd_dev);