193 lines
6.4 KiB
Diff
193 lines
6.4 KiB
Diff
|
From b1d38b512aa3162b5089fbf6b02357ed5fdf5760 Mon Sep 17 00:00:00 2001
|
||
|
From: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
|
||
|
Date: Thu, 22 Aug 2024 12:18:06 +0200
|
||
|
Subject: [PATCH 166/201] imsm: add IMSM_OROM_CAPABILITIES_TPV to nvme orom
|
||
|
|
||
|
Add it to avoid excluding. It has some value for users even if it is
|
||
|
always true for nvme virtual orom.
|
||
|
|
||
|
Rework detail-platform printing code, move printing 3rd party nvmes
|
||
|
to print_imsm_capability (as it should be), but keep it meaningful
|
||
|
only for nvme controllers (NVME and VMD hba types). Pass whole
|
||
|
orom_entry instead of orom there.
|
||
|
|
||
|
Squash code responsible for printing NVME and VMD hbas.
|
||
|
|
||
|
Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
|
||
|
---
|
||
|
platform-intel.c | 3 +-
|
||
|
super-intel.c | 76 +++++++++++++++++++++++-------------------------
|
||
|
2 files changed, 39 insertions(+), 40 deletions(-)
|
||
|
|
||
|
diff --git a/platform-intel.c b/platform-intel.c
|
||
|
index 3a86f785..21591317 100644
|
||
|
--- a/platform-intel.c
|
||
|
+++ b/platform-intel.c
|
||
|
@@ -1089,7 +1089,8 @@ const struct imsm_orom *find_imsm_nvme(struct sys_dev *hba)
|
||
|
.vpa = IMSM_OROM_VOLUMES_PER_ARRAY,
|
||
|
.vphba = IMSM_OROM_TOTAL_DISKS_NVME / 2 * IMSM_OROM_VOLUMES_PER_ARRAY,
|
||
|
.attr = IMSM_OROM_ATTR_2TB | IMSM_OROM_ATTR_2TB_DISK,
|
||
|
- .driver_features = IMSM_OROM_CAPABILITIES_EnterpriseSystem
|
||
|
+ .driver_features = IMSM_OROM_CAPABILITIES_EnterpriseSystem |
|
||
|
+ IMSM_OROM_CAPABILITIES_TPV
|
||
|
};
|
||
|
nvme_orom = add_orom(&nvme_orom_compat);
|
||
|
}
|
||
|
diff --git a/super-intel.c b/super-intel.c
|
||
|
index 50fd56d0..744715d5 100644
|
||
|
--- a/super-intel.c
|
||
|
+++ b/super-intel.c
|
||
|
@@ -2663,9 +2663,12 @@ static void print_imsm_chunk_size_capability(const struct imsm_orom *orom)
|
||
|
}
|
||
|
|
||
|
|
||
|
-static void print_imsm_capability(const struct imsm_orom *orom)
|
||
|
+static void print_imsm_capability(const struct orom_entry *entry)
|
||
|
{
|
||
|
+ const struct imsm_orom *orom = &entry->orom;
|
||
|
+
|
||
|
printf(" Platform : Intel(R) ");
|
||
|
+
|
||
|
if (orom->capabilities == 0 && orom->driver_features == 0)
|
||
|
printf("Matrix Storage Manager\n");
|
||
|
else if (imsm_orom_is_enterprise(orom) && orom->major_ver >= 6)
|
||
|
@@ -2673,6 +2676,7 @@ static void print_imsm_capability(const struct imsm_orom *orom)
|
||
|
else
|
||
|
printf("Rapid Storage Technology%s\n",
|
||
|
imsm_orom_is_enterprise(orom) ? " enterprise" : "");
|
||
|
+
|
||
|
if (orom->major_ver || orom->minor_ver || orom->hotfix_ver || orom->build) {
|
||
|
if (imsm_orom_is_vmd_without_efi(orom))
|
||
|
printf(" Version : %d.%d\n", orom->major_ver, orom->minor_ver);
|
||
|
@@ -2690,11 +2694,19 @@ static void print_imsm_capability(const struct imsm_orom *orom)
|
||
|
printf("\n");
|
||
|
|
||
|
printf(" 2TB volumes :%s supported\n", (orom->attr & IMSM_OROM_ATTR_2TB) ? "" : " not");
|
||
|
+
|
||
|
printf(" 2TB disks :%s supported\n",
|
||
|
(orom->attr & IMSM_OROM_ATTR_2TB_DISK) ? "" : " not");
|
||
|
+
|
||
|
printf(" Max Disks : %d\n", orom->tds);
|
||
|
+
|
||
|
printf(" Max Volumes : %d per array, %d per %s\n", orom->vpa, orom->vphba,
|
||
|
imsm_orom_is_nvme(orom) ? "platform" : "controller");
|
||
|
+
|
||
|
+ if (entry->type == SYS_DEV_VMD || entry->type == SYS_DEV_NVME)
|
||
|
+ /* This is only meaningful for controllers with nvme support */
|
||
|
+ printf(" 3rd party NVMe :%s supported\n",
|
||
|
+ imsm_orom_has_tpv_support(&entry->orom) ? "" : " not");
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
@@ -2733,26 +2745,25 @@ static int detail_platform_imsm(int verbose, int enumerate_only, char *controlle
|
||
|
* platform capabilities. If raid support is disabled in the BIOS the
|
||
|
* option-rom capability structure will not be available.
|
||
|
*/
|
||
|
+ const struct orom_entry *entry;
|
||
|
struct sys_dev *list, *hba;
|
||
|
- int host_base = 0;
|
||
|
+ struct devid_list *devid;
|
||
|
int port_count = 0;
|
||
|
- int result=1;
|
||
|
+ int host_base = 0;
|
||
|
+ int result = 1;
|
||
|
|
||
|
if (enumerate_only) {
|
||
|
if (check_no_platform())
|
||
|
return 0;
|
||
|
+
|
||
|
list = find_intel_devices();
|
||
|
if (!list)
|
||
|
return 2;
|
||
|
- for (hba = list; hba; hba = hba->next) {
|
||
|
- if (find_imsm_capability(hba)) {
|
||
|
- result = 0;
|
||
|
- break;
|
||
|
- }
|
||
|
- else
|
||
|
- result = 2;
|
||
|
- }
|
||
|
- return result;
|
||
|
+
|
||
|
+ for (hba = list; hba; hba = hba->next)
|
||
|
+ if (find_imsm_capability(hba))
|
||
|
+ return 0;
|
||
|
+ return 2;
|
||
|
}
|
||
|
|
||
|
list = find_intel_devices();
|
||
|
@@ -2768,6 +2779,7 @@ static int detail_platform_imsm(int verbose, int enumerate_only, char *controlle
|
||
|
continue;
|
||
|
if (!find_imsm_capability(hba)) {
|
||
|
char buf[PATH_MAX];
|
||
|
+
|
||
|
pr_err("imsm capabilities not found for controller: %s (type %s)\n",
|
||
|
hba->type == SYS_DEV_VMD || hba->type == SYS_DEV_SATA_VMD ?
|
||
|
vmd_domain_to_controller(hba, buf) :
|
||
|
@@ -2783,40 +2795,27 @@ static int detail_platform_imsm(int verbose, int enumerate_only, char *controlle
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
- const struct orom_entry *entry;
|
||
|
-
|
||
|
for (entry = orom_entries; entry; entry = entry->next) {
|
||
|
- if (entry->type == SYS_DEV_VMD) {
|
||
|
- print_imsm_capability(&entry->orom);
|
||
|
- printf(" 3rd party NVMe :%s supported\n",
|
||
|
- imsm_orom_has_tpv_support(&entry->orom)?"":" not");
|
||
|
+ print_imsm_capability(entry);
|
||
|
+
|
||
|
+ if (entry->type == SYS_DEV_VMD || entry->type == SYS_DEV_NVME) {
|
||
|
for (hba = list; hba; hba = hba->next) {
|
||
|
- if (hba->type == SYS_DEV_VMD) {
|
||
|
- char buf[PATH_MAX];
|
||
|
+ char buf[PATH_MAX];
|
||
|
+
|
||
|
+ if (hba->type != entry->type)
|
||
|
+ continue;
|
||
|
+
|
||
|
+ if (hba->type == SYS_DEV_VMD)
|
||
|
printf(" I/O Controller : %s (%s)\n",
|
||
|
- vmd_domain_to_controller(hba, buf), get_sys_dev_type(hba->type));
|
||
|
- if (print_nvme_info(hba)) {
|
||
|
- if (verbose > 0)
|
||
|
- pr_err("failed to get devices attached to VMD domain.\n");
|
||
|
- result |= 2;
|
||
|
- }
|
||
|
- }
|
||
|
- }
|
||
|
- printf("\n");
|
||
|
- continue;
|
||
|
- }
|
||
|
+ vmd_domain_to_controller(hba, buf),
|
||
|
+ get_sys_dev_type(hba->type));
|
||
|
|
||
|
- print_imsm_capability(&entry->orom);
|
||
|
- if (entry->type == SYS_DEV_NVME) {
|
||
|
- for (hba = list; hba; hba = hba->next) {
|
||
|
- if (hba->type == SYS_DEV_NVME)
|
||
|
- print_nvme_info(hba);
|
||
|
+ print_nvme_info(hba);
|
||
|
}
|
||
|
printf("\n");
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
- struct devid_list *devid;
|
||
|
for (devid = entry->devid_list; devid; devid = devid->next) {
|
||
|
hba = device_by_id(devid->devid);
|
||
|
if (!hba)
|
||
|
@@ -6035,8 +6034,7 @@ static int add_to_super_imsm(struct supertype *st, mdu_disk_info_t *dk,
|
||
|
pr_err("%s controller supports Multi-Path I/O, Intel (R) VROC does not support multipathing\n",
|
||
|
basename(cntrl_path));
|
||
|
|
||
|
- if (super->hba->type == SYS_DEV_VMD && super->orom &&
|
||
|
- !imsm_orom_has_tpv_support(super->orom)) {
|
||
|
+ if (super->orom && !imsm_orom_has_tpv_support(super->orom)) {
|
||
|
pr_err("\tPlatform configuration does not support non-Intel NVMe drives.\n"
|
||
|
"\tPlease refer to Intel(R) RSTe/VROC user guide.\n");
|
||
|
goto error;
|
||
|
--
|
||
|
2.41.0
|
||
|
|