[PATCH v2 01/11] rockchip: idb: prepare IDB block device

Prepare for the IDB block device by adding some constants and function extentions.
Signed-off-by: Johan Jonker jbx6244@gmail.com --- drivers/block/blk-uclass.c | 2 ++ include/blk.h | 1 + include/dm/uclass-id.h | 1 + include/efi_loader.h | 4 ++++ lib/efi_loader/efi_device_path.c | 30 ++++++++++++++++++++++++++++++ 5 files changed, 38 insertions(+)
diff --git a/drivers/block/blk-uclass.c b/drivers/block/blk-uclass.c index 21c5209b..0b5f219d 100644 --- a/drivers/block/blk-uclass.c +++ b/drivers/block/blk-uclass.c @@ -32,6 +32,7 @@ static const char *if_typename_str[IF_TYPE_COUNT] = { [IF_TYPE_EFI_LOADER] = "efiloader", [IF_TYPE_VIRTIO] = "virtio", [IF_TYPE_PVBLOCK] = "pvblock", + [IF_TYPE_RK_IDB] = "idb", };
static enum uclass_id if_type_uclass_id[IF_TYPE_COUNT] = { @@ -49,6 +50,7 @@ static enum uclass_id if_type_uclass_id[IF_TYPE_COUNT] = { [IF_TYPE_EFI_LOADER] = UCLASS_EFI_LOADER, [IF_TYPE_VIRTIO] = UCLASS_VIRTIO, [IF_TYPE_PVBLOCK] = UCLASS_PVBLOCK, + [IF_TYPE_RK_IDB] = UCLASS_RK_IDB, };
static enum if_type if_typename_to_iftype(const char *if_typename) diff --git a/include/blk.h b/include/blk.h index 9503369d..a73cc577 100644 --- a/include/blk.h +++ b/include/blk.h @@ -38,6 +38,7 @@ enum if_type { IF_TYPE_PVBLOCK, IF_TYPE_VIRTIO, IF_TYPE_EFI_MEDIA, + IF_TYPE_RK_IDB,
IF_TYPE_COUNT, /* Number of interface types */ }; diff --git a/include/dm/uclass-id.h b/include/dm/uclass-id.h index 3ba69ad9..38a227f0 100644 --- a/include/dm/uclass-id.h +++ b/include/dm/uclass-id.h @@ -104,6 +104,7 @@ enum uclass_id { UCLASS_REGULATOR, /* Regulator device */ UCLASS_REMOTEPROC, /* Remote Processor device */ UCLASS_RESET, /* Reset controller device */ + UCLASS_RK_IDB, /* Rockchip IDB device */ UCLASS_RNG, /* Random Number Generator */ UCLASS_RTC, /* Real time clock device */ UCLASS_SCMI_AGENT, /* Interface with an SCMI server */ diff --git a/include/efi_loader.h b/include/efi_loader.h index c1e00eba..44d42603 100644 --- a/include/efi_loader.h +++ b/include/efi_loader.h @@ -141,6 +141,10 @@ static inline efi_status_t efi_launch_capsules(void) #define U_BOOT_VIRTIO_DEV_GUID \ EFI_GUID(0x63293792, 0xadf5, 0x9325, \ 0xb9, 0x9f, 0x4e, 0x0e, 0x45, 0x5c, 0x1b, 0x1e) +/* GUID used as root for Rockchip IDB devices */ +#define U_BOOT_IDB_DEV_GUID \ + EFI_GUID(0xadc021df, 0x5f24, 0x464f, \ + 0x9a, 0x88, 0xdb, 0xee, 0x3f, 0x1d, 0x14, 0x0f)
/* Use internal device tree when starting UEFI application */ #define EFI_FDT_USE_INTERNAL NULL diff --git a/lib/efi_loader/efi_device_path.c b/lib/efi_loader/efi_device_path.c index 171661b8..b7535373 100644 --- a/lib/efi_loader/efi_device_path.c +++ b/lib/efi_loader/efi_device_path.c @@ -28,6 +28,9 @@ const efi_guid_t efi_guid_host_dev = U_BOOT_HOST_DEV_GUID; #ifdef CONFIG_VIRTIO_BLK const efi_guid_t efi_guid_virtio_dev = U_BOOT_VIRTIO_DEV_GUID; #endif +#if CONFIG_IS_ENABLED(ROCKCHIP_IDB) +const efi_guid_t efi_guid_idb_dev = U_BOOT_IDB_DEV_GUID; +#endif
/* template END node: */ static const struct efi_device_path END = { @@ -574,6 +577,16 @@ __maybe_unused static unsigned int dp_size(struct udevice *dev) */ return dp_size(dev->parent) + sizeof(struct efi_device_path_vendor) + 1; +#endif +#if CONFIG_IS_ENABLED(ROCKCHIP_IDB) + case UCLASS_RK_IDB: + /* + * Rockchip IDB device will be represented + * as vendor device with extra one byte for + * device number + */ + return dp_size(dev->parent) + + sizeof(struct efi_device_path_vendor) + 1; #endif default: return dp_size(dev->parent); @@ -667,6 +680,23 @@ __maybe_unused static void *dp_fill(void *buf, struct udevice *dev) return &dp->vendor_data[1]; } #endif +#if CONFIG_IS_ENABLED(ROCKCHIP_IDB) + case UCLASS_RK_IDB: { + struct efi_device_path_vendor *dp; + struct blk_desc *desc = dev_get_uclass_plat(dev); + + dp_fill(buf, dev->parent); + dp = buf; + ++dp; + dp->dp.type = DEVICE_PATH_TYPE_HARDWARE_DEVICE; + dp->dp.sub_type = DEVICE_PATH_SUB_TYPE_VENDOR; + dp->dp.length = sizeof(*dp) + 1; + memcpy(&dp->guid, &efi_guid_idb_dev, + sizeof(efi_guid_t)); + dp->vendor_data[0] = desc->devnum; + return &dp->vendor_data[1]; + } +#endif #ifdef CONFIG_IDE case UCLASS_IDE: { struct efi_device_path_atapi *dp =
participants (1)
-
Johan Jonker