mirror of
https://git.openwrt.org/openwrt/openwrt.git
synced 2024-11-24 14:06:15 +00:00
f9a70a20c5
Backport BLOCK OF support patch merged upstream and refresh pending BLOCK patches. This is a new way to declare partition table for BLOCK device (eMMC currently supported) with the use of DTS. Current pending patch are adapted to not cause regression with current downstream implementation of a similar functionality. Also enable the new OF_PARTITION config by default. Link: https://github.com/openwrt/openwrt/pull/16663 Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
95 lines
3.4 KiB
Diff
95 lines
3.4 KiB
Diff
From e5f587242b6072ffab4f4a084a459a59f3035873 Mon Sep 17 00:00:00 2001
|
|
From: Christian Marangi <ansuelsmth@gmail.com>
|
|
Date: Thu, 3 Oct 2024 00:11:43 +0200
|
|
Subject: [PATCH 3/5] block: introduce add_disk_fwnode()
|
|
|
|
Introduce add_disk_fwnode() as a replacement of device_add_disk() that
|
|
permits to pass and attach a fwnode to disk dev.
|
|
|
|
This variant can be useful for eMMC that might have the partition table
|
|
for the disk defined in DT. A parser can later make use of the attached
|
|
fwnode to parse the related table and init the hardcoded partition for
|
|
the disk.
|
|
|
|
device_add_disk() is converted to a simple wrapper of add_disk_fwnode()
|
|
with the fwnode entry set as NULL.
|
|
|
|
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
|
Reviewed-by: Christoph Hellwig <hch@lst.de>
|
|
Link: https://lore.kernel.org/r/20241002221306.4403-4-ansuelsmth@gmail.com
|
|
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
|
---
|
|
block/genhd.c | 28 ++++++++++++++++++++++++----
|
|
include/linux/blkdev.h | 3 +++
|
|
2 files changed, 27 insertions(+), 4 deletions(-)
|
|
|
|
--- a/block/genhd.c
|
|
+++ b/block/genhd.c
|
|
@@ -383,16 +383,18 @@ int disk_scan_partitions(struct gendisk
|
|
}
|
|
|
|
/**
|
|
- * device_add_disk - add disk information to kernel list
|
|
+ * add_disk_fwnode - add disk information to kernel list with fwnode
|
|
* @parent: parent device for the disk
|
|
* @disk: per-device partitioning information
|
|
* @groups: Additional per-device sysfs groups
|
|
+ * @fwnode: attached disk fwnode
|
|
*
|
|
* This function registers the partitioning information in @disk
|
|
- * with the kernel.
|
|
+ * with the kernel. Also attach a fwnode to the disk device.
|
|
*/
|
|
-int __must_check device_add_disk(struct device *parent, struct gendisk *disk,
|
|
- const struct attribute_group **groups)
|
|
+int __must_check add_disk_fwnode(struct device *parent, struct gendisk *disk,
|
|
+ const struct attribute_group **groups,
|
|
+ struct fwnode_handle *fwnode)
|
|
|
|
{
|
|
struct device *ddev = disk_to_dev(disk);
|
|
@@ -451,6 +453,8 @@ int __must_check device_add_disk(struct
|
|
ddev->parent = parent;
|
|
ddev->groups = groups;
|
|
dev_set_name(ddev, "%s", disk->disk_name);
|
|
+ if (fwnode)
|
|
+ device_set_node(ddev, fwnode);
|
|
if (!(disk->flags & GENHD_FL_HIDDEN))
|
|
ddev->devt = MKDEV(disk->major, disk->first_minor);
|
|
ret = device_add(ddev);
|
|
@@ -552,6 +556,22 @@ out_exit_elevator:
|
|
elevator_exit(disk->queue);
|
|
return ret;
|
|
}
|
|
+EXPORT_SYMBOL_GPL(add_disk_fwnode);
|
|
+
|
|
+/**
|
|
+ * device_add_disk - add disk information to kernel list
|
|
+ * @parent: parent device for the disk
|
|
+ * @disk: per-device partitioning information
|
|
+ * @groups: Additional per-device sysfs groups
|
|
+ *
|
|
+ * This function registers the partitioning information in @disk
|
|
+ * with the kernel.
|
|
+ */
|
|
+int __must_check device_add_disk(struct device *parent, struct gendisk *disk,
|
|
+ const struct attribute_group **groups)
|
|
+{
|
|
+ return add_disk_fwnode(parent, disk, groups, NULL);
|
|
+}
|
|
EXPORT_SYMBOL(device_add_disk);
|
|
|
|
static void blk_report_disk_dead(struct gendisk *disk, bool surprise)
|
|
--- a/include/linux/blkdev.h
|
|
+++ b/include/linux/blkdev.h
|
|
@@ -741,6 +741,9 @@ static inline unsigned int blk_queue_dep
|
|
#define for_each_bio(_bio) \
|
|
for (; _bio; _bio = _bio->bi_next)
|
|
|
|
+int __must_check add_disk_fwnode(struct device *parent, struct gendisk *disk,
|
|
+ const struct attribute_group **groups,
|
|
+ struct fwnode_handle *fwnode);
|
|
int __must_check device_add_disk(struct device *parent, struct gendisk *disk,
|
|
const struct attribute_group **groups);
|
|
static inline int __must_check add_disk(struct gendisk *disk)
|