On Tue, Feb 7, 2023 at 4:46 PM Mariusz Tkaczyk <mariusz.tkaczyk@xxxxxxxxxxxxxxx> wrote: > > Hi Kevin, > I found time to take a look into it closer. I think that it is not complete > solution. Please see my comments. > > On Wed, 25 Jan 2023 21:16:59 -0500 > Kevin Friedberg <kev.friedberg@xxxxxxxxx> wrote: > > > Detect when a SATA controller has been mapped under Intel Alderlake RST > > VMD and list it as part of the domain, instead of independently, so that > > it can use the VMD controller's RAID capabilities. > > > > Signed-off-by: Kevin Friedberg <kev.friedberg@xxxxxxxxx> > > --- > > platform-intel.c | 15 +++++++++------ > > super-intel.c | 25 ++++++++++++++++++++++++- > > 2 files changed, 33 insertions(+), 7 deletions(-) > > > > diff --git a/platform-intel.c b/platform-intel.c > > index 757f0b1b..859bf743 100644 > > --- a/platform-intel.c > > +++ b/platform-intel.c > > @@ -64,10 +64,12 @@ struct sys_dev *find_driver_devices(const char *bus, > > const char *driver) > > if (strcmp(driver, "isci") == 0) > > type = SYS_DEV_SAS; > > - else if (strcmp(driver, "ahci") == 0) > > + else if (strcmp(driver, "ahci") == 0) { > > + /* if looking for sata devs, ignore vmd */ > > + vmd = find_driver_devices("pci", "vmd"); > > type = SYS_DEV_SATA; > > - else if (strcmp(driver, "nvme") == 0) { > > - /* if looking for nvme devs, first look for vmd */ > > + } else if (strcmp(driver, "nvme") == 0) { > > + /* if looking for nvme devs, also look for vmd */ > > vmd = find_driver_devices("pci", "vmd"); > > type = SYS_DEV_NVME; > > } else if (strcmp(driver, "vmd") == 0) > > @@ -104,8 +106,8 @@ struct sys_dev *find_driver_devices(const char *bus, > > const char *driver) sprintf(path, "/sys/bus/%s/drivers/%s/%s", > > bus, driver, de->d_name); > > > > - /* if searching for nvme - skip vmd connected one */ > > - if (type == SYS_DEV_NVME) { > > + /* if searching for nvme or ahci - skip vmd connected one */ > > + if (type == SYS_DEV_NVME || type == SYS_DEV_SATA) { > > struct sys_dev *dev; > > char *rp = realpath(path, NULL); > > for (dev = vmd; dev; dev = dev->next) { > > @@ -166,7 +168,8 @@ struct sys_dev *find_driver_devices(const char *bus, > > const char *driver) } > > closedir(driver_dir); > > > > - if (vmd) { > > + /* VMD adopts multiple types but should only be listed once */ > > + if (vmd && type == SYS_DEV_NVME) { > > if (list) > > list->next = vmd; > > else > > The SATA behind VMD deserves own type, let say SYS_DEV_SATA_VMD. We cannot use > SYS_DEV_VMD because it will allow to use NVME devices behind VMD in SATA Raid > array. It means that if you have them connected, like: > VMD___ NVME0 > |_ NVME1 > |_ SATA___SATA0 > |__SATA1 > You will be able to mix SATA and NVME drives together in RAID. Mdmonitor > could mix them too (if appropriate policy is set). That is not allowed from at > least VROC requirements PoV. Hi Mariusz Through the description of VMD (https://www.chipict.com/intel_vmd_vroc/), it looks like VMD only supports pcie nvme devices. Can it also connect sata devices? And what's PoV? Best Regards Xiao