diff mbox series

[19/23] mdadm: enable Intel Alderlake RSTe configuration

Message ID 20220728122101.28744-20-colyli@suse.de (mailing list archive)
State Superseded, archived
Delegated to: Jes Sorensen
Headers show
Series mdadm-CI for-jes/20220728: patches for merge | expand

Commit Message

Coly Li July 28, 2022, 12:20 p.m. UTC
From: Hannes Reinecke <hare@suse.de>

Alderlake has a slightly different RST configuration; the UEFI
variable is name 'RstVmdV', and the AHCI controller shows up as
a child device of the VMD bridge, but continues to use the 'AHCI HBA'
PCI class (and not the RAID class as RSTe would normally do).

Signed-off-by: Hannes Reinecke <hare@suse.de>
Acked-by: Coly Li <colyli@suse.de>
---
 platform-intel.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

Comments

Kinga Stefaniuk Aug. 5, 2022, 10:02 a.m. UTC | #1
On Thu, 28 Jul 2022 20:20:57 +0800
Coly Li <colyli@suse.de> wrote:

> From: Hannes Reinecke <hare@suse.de>
> 
> Alderlake has a slightly different RST configuration; the UEFI
> variable is name 'RstVmdV', and the AHCI controller shows up as
> a child device of the VMD bridge, but continues to use the 'AHCI HBA'
> PCI class (and not the RAID class as RSTe would normally do).
> 
> Signed-off-by: Hannes Reinecke <hare@suse.de>
> Acked-by: Coly Li <colyli@suse.de>
> ---
>  platform-intel.c | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/platform-intel.c b/platform-intel.c
> index 5a8729e7..a4d55a38 100644
> --- a/platform-intel.c
> +++ b/platform-intel.c
> @@ -512,12 +512,14 @@ static const struct imsm_orom
> *find_imsm_hba_orom(struct sys_dev *hba) #define AHCI_PROP "RstSataV"
>  #define AHCI_SSATA_PROP "RstsSatV"
>  #define AHCI_TSATA_PROP "RsttSatV"
> +#define AHCI_RST_PROP "RstVmdV"
>  #define VMD_PROP "RstUefiV"
>  
>  #define VENDOR_GUID \
>  	EFI_GUID(0x193dfefa, 0xa445, 0x4302, 0x99, 0xd8, 0xef, 0x3a,
> 0xad, 0x1a, 0x04, 0xc6) 
>  #define PCI_CLASS_RAID_CNTRL 0x010400
> +#define PCI_CLASS_SATA_HBA 0x010601
>  
>  static int read_efi_var(void *buffer, ssize_t buf_size,
>  			const char *variable_name, struct efi_guid
> guid) @@ -604,7 +606,8 @@ const struct imsm_orom
> *find_imsm_efi(struct sys_dev *hba) struct imsm_orom orom;
>  	struct orom_entry *ret;
>  	static const char * const sata_efivars[] = {AHCI_PROP,
> AHCI_SSATA_PROP,
> -						    AHCI_TSATA_PROP};
> +						    AHCI_TSATA_PROP,
> +						    AHCI_RST_PROP};
>  	unsigned long i;
>  
>  	if (check_env("IMSM_TEST_AHCI_EFI") ||
> check_env("IMSM_TEST_SCU_EFI")) @@ -622,7 +625,8 @@ const struct
> imsm_orom *find_imsm_efi(struct sys_dev *hba) 
>  		return NULL;
>  	case SYS_DEV_SATA:
> -		if (hba->class != PCI_CLASS_RAID_CNTRL)
> +		if (hba->class != PCI_CLASS_RAID_CNTRL &&
> +		    hba->class != PCI_CLASS_SATA_HBA)
>  			return NULL;
>  
>  		for (i = 0; i < ARRAY_SIZE(sata_efivars); i++) {


Hi,

This patch causes a regression. I've checked how SATA controllers will
be visible in --detail-platform output for IMSM. If RAID mode will be
turned on for one of the SATA controllers, rest of them will be also
visible as supported ones.
Please analyze this scenario.

Regards,
Kinga Tanska
diff mbox series

Patch

diff --git a/platform-intel.c b/platform-intel.c
index 5a8729e7..a4d55a38 100644
--- a/platform-intel.c
+++ b/platform-intel.c
@@ -512,12 +512,14 @@  static const struct imsm_orom *find_imsm_hba_orom(struct sys_dev *hba)
 #define AHCI_PROP "RstSataV"
 #define AHCI_SSATA_PROP "RstsSatV"
 #define AHCI_TSATA_PROP "RsttSatV"
+#define AHCI_RST_PROP "RstVmdV"
 #define VMD_PROP "RstUefiV"
 
 #define VENDOR_GUID \
 	EFI_GUID(0x193dfefa, 0xa445, 0x4302, 0x99, 0xd8, 0xef, 0x3a, 0xad, 0x1a, 0x04, 0xc6)
 
 #define PCI_CLASS_RAID_CNTRL 0x010400
+#define PCI_CLASS_SATA_HBA 0x010601
 
 static int read_efi_var(void *buffer, ssize_t buf_size,
 			const char *variable_name, struct efi_guid guid)
@@ -604,7 +606,8 @@  const struct imsm_orom *find_imsm_efi(struct sys_dev *hba)
 	struct imsm_orom orom;
 	struct orom_entry *ret;
 	static const char * const sata_efivars[] = {AHCI_PROP, AHCI_SSATA_PROP,
-						    AHCI_TSATA_PROP};
+						    AHCI_TSATA_PROP,
+						    AHCI_RST_PROP};
 	unsigned long i;
 
 	if (check_env("IMSM_TEST_AHCI_EFI") || check_env("IMSM_TEST_SCU_EFI"))
@@ -622,7 +625,8 @@  const struct imsm_orom *find_imsm_efi(struct sys_dev *hba)
 
 		return NULL;
 	case SYS_DEV_SATA:
-		if (hba->class != PCI_CLASS_RAID_CNTRL)
+		if (hba->class != PCI_CLASS_RAID_CNTRL &&
+		    hba->class != PCI_CLASS_SATA_HBA)
 			return NULL;
 
 		for (i = 0; i < ARRAY_SIZE(sata_efivars); i++) {