On Thu, 9 Feb 2023 08:39:21 +0800 Xiao Ni <xni@xxxxxxxxxx> wrote: > 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? > Hi Xiao, Not directly, there must be SATA controller behind VMD. In VROC on server platforms we don't use that. So far I know, the reason is to have only one driver to handle all RST devices but it could be only part of story. Thanks, Mariusz