summaryrefslogtreecommitdiff
path: root/disk
diff options
context:
space:
mode:
authorKever Yang <kever.yang@rock-chips.com>2018-02-10 17:55:37 +0800
committerTom Rini <trini@konsulko.com>2018-03-13 21:46:05 -0400
commitd47292691977fd77f02af44359594e46411f4a63 (patch)
treeb1bd452a3073a439f12822ec288487ad9953153e /disk
parentf5bd13ed57730fd6e0de274aa52e4faef79871e9 (diff)
disk: part: scan the disk if the part_type is unknown
If a DUT do not have partition table, and we write one with 'gpt write' cmd, we should able to list the partition with 'part list' cmd. It's reasonable to scan the disk again if the initial part_type is unknown in case we just write a new one into disk. Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
Diffstat (limited to 'disk')
-rw-r--r--disk/part.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/disk/part.c b/disk/part.c
index e9e18a0910..16de7a2c31 100644
--- a/disk/part.c
+++ b/disk/part.c
@@ -27,16 +27,28 @@
DECLARE_GLOBAL_DATA_PTR;
#ifdef CONFIG_HAVE_BLOCK_DEVICE
-static struct part_driver *part_driver_lookup_type(int part_type)
+static struct part_driver *part_driver_lookup_type(struct blk_desc *dev_desc)
{
struct part_driver *drv =
ll_entry_start(struct part_driver, part_driver);
const int n_ents = ll_entry_count(struct part_driver, part_driver);
struct part_driver *entry;
- for (entry = drv; entry != drv + n_ents; entry++) {
- if (part_type == entry->part_type)
- return entry;
+ if (dev_desc->part_type == PART_TYPE_UNKNOWN) {
+ for (entry = drv; entry != drv + n_ents; entry++) {
+ int ret;
+
+ ret = entry->test(dev_desc);
+ if (!ret) {
+ dev_desc->part_type = entry->part_type;
+ return entry;
+ }
+ }
+ } else {
+ for (entry = drv; entry != drv + n_ents; entry++) {
+ if (dev_desc->part_type == entry->part_type)
+ return entry;
+ }
}
/* Not found */
@@ -285,7 +297,7 @@ void part_print(struct blk_desc *dev_desc)
{
struct part_driver *drv;
- drv = part_driver_lookup_type(dev_desc->part_type);
+ drv = part_driver_lookup_type(dev_desc);
if (!drv) {
printf("## Unknown partition table type %x\n",
dev_desc->part_type);
@@ -314,7 +326,7 @@ int part_get_info(struct blk_desc *dev_desc, int part,
info->type_guid[0] = 0;
#endif
- drv = part_driver_lookup_type(dev_desc->part_type);
+ drv = part_driver_lookup_type(dev_desc);
if (!drv) {
debug("## Unknown partition table type %x\n",
dev_desc->part_type);