aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/efi_loader/efi_device_path.c21
-rw-r--r--lib/efi_loader/efi_device_path_to_text.c10
2 files changed, 31 insertions, 0 deletions
diff --git a/lib/efi_loader/efi_device_path.c b/lib/efi_loader/efi_device_path.c
index f049b9e0cd0..7ae14f34239 100644
--- a/lib/efi_loader/efi_device_path.c
+++ b/lib/efi_loader/efi_device_path.c
@@ -458,6 +458,11 @@ __maybe_unused static unsigned int dp_size(struct udevice *dev)
return dp_size(dev->parent) +
sizeof(struct efi_device_path_sd_mmc_path);
#endif
+#if defined(CONFIG_AHCI) || defined(CONFIG_SATA)
+ case UCLASS_AHCI:
+ return dp_size(dev->parent) +
+ sizeof(struct efi_device_path_sata);
+#endif
#if defined(CONFIG_NVME)
case UCLASS_NVME:
return dp_size(dev->parent) +
@@ -623,6 +628,22 @@ __maybe_unused static void *dp_fill(void *buf, struct udevice *dev)
return &sddp[1];
}
#endif
+#if defined(CONFIG_AHCI) || defined(CONFIG_SATA)
+ case UCLASS_AHCI: {
+ struct efi_device_path_sata *dp =
+ dp_fill(buf, dev->parent);
+ struct blk_desc *desc = dev_get_uclass_platdata(dev);
+
+ dp->dp.type = DEVICE_PATH_TYPE_MESSAGING_DEVICE;
+ dp->dp.sub_type = DEVICE_PATH_SUB_TYPE_MSG_SATA;
+ dp->dp.length = sizeof(*dp);
+ dp->hba_port = desc->devnum;
+ /* default 0xffff implies no port multiplier */
+ dp->port_multiplier_port = 0xffff;
+ dp->logical_unit_number = desc->lun;
+ return &dp[1];
+ }
+#endif
#if defined(CONFIG_NVME)
case UCLASS_NVME: {
struct efi_device_path_nvme *dp =
diff --git a/lib/efi_loader/efi_device_path_to_text.c b/lib/efi_loader/efi_device_path_to_text.c
index 49bebb58cc2..5ae4833fa78 100644
--- a/lib/efi_loader/efi_device_path_to_text.c
+++ b/lib/efi_loader/efi_device_path_to_text.c
@@ -149,6 +149,16 @@ static char *dp_msging(char *s, struct efi_device_path *dp)
break;
}
+ case DEVICE_PATH_SUB_TYPE_MSG_SATA: {
+ struct efi_device_path_sata *sdp =
+ (struct efi_device_path_sata *) dp;
+
+ s += sprintf(s, "Sata(0x%x,0x%x,0x%x)",
+ sdp->hba_port,
+ sdp->port_multiplier_port,
+ sdp->logical_unit_number);
+ break;
+ }
case DEVICE_PATH_SUB_TYPE_MSG_NVME: {
struct efi_device_path_nvme *ndp =
(struct efi_device_path_nvme *)dp;