Enable an additional VMD device id
cover Enable an additional VMD device id
This patchset enables an additional VMD device ID to the VMD driver supporting assignment of the membar addresses from shadow registers and allows more flexibility in assigning bus numbers to a VMD PCIe domain. Additional VMD root port device ids have been added to the VMD AER quirk.
Changes from rfc include comments, code structure, and using pci_add_resource_offset to correctly assign addresses while virtualized.
Applies to Bjorn's next branch
Jon Derrick (5):
PCI: Add Intel VMD devices to pci ids
PCI/VMD: Assign membar addresses from shadow registers PCI/VMD: Add offset to bus numbers if necessary x86/PCI: Add additional VMD device root ports to VMD AER quirk PCI/VMD: Add an additional VMD device id to driver device id table
arch/x86/pci/fixup.c | 4 +++ drivers/pci/host/vmd.c | 91 +++++++++++++++++++++++++++++++++++++++++++------ include/linux/pci_ids.h | 2 ++ 3 files changed, 87 insertions(+), 10 deletions(-)
Signature · 1 line
2.14.3
PATCH 1/5 PCI: Add Intel VMD devices to pci ids
Add the Intel VMD device ids to the pci id database and update the VMD driver.
--- drivers/pci/host/vmd.c | 2 +- include/linux/pci_ids.h | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-)
drivers/pci/host/vmd.c +1 -1
@@ -778,7 +778,7 @@ static int vmd_resume(struct device *dev) static SIMPLE_DEV_PM_OPS(vmd_dev_pm_ops, vmd_suspend, vmd_resume);static const struct pci_device_id vmd_ids[] = { - {PCI_DEVICE (PCI_VENDOR_ID_INTEL ,0x201d ),}, + {PCI_DEVICE (PCI_VENDOR_ID_INTEL ,PCI_DEVICE_ID_INTEL_VMD_201D ),}, {0 ,} };MODULE_DEVICE_TABLE (pci, vmd_ids);
include/linux/pci_ids.h +2 -0
@@ -2676,6 +2676,7 @@#define PCI_DEVICE_ID_INTEL_PANTHERPOINT_XHCI 0x1e31#define PCI_DEVICE_ID_INTEL_PANTHERPOINT_LPC_MIN 0x1e40#define PCI_DEVICE_ID_INTEL_PANTHERPOINT_LPC_MAX 0x1e5f +#define PCI_DEVICE_ID_INTEL_VMD_201D 0x201d#define PCI_DEVICE_ID_INTEL_DH89XXCC_LPC_MIN 0x2310#define PCI_DEVICE_ID_INTEL_DH89XXCC_LPC_MAX 0x231f#define PCI_DEVICE_ID_INTEL_82801AA_0 0x2410
@@ -2780,6 +2781,7 @@#define PCI_DEVICE_ID_INTEL_ICH8_4 0x2815#define PCI_DEVICE_ID_INTEL_ICH8_5 0x283e#define PCI_DEVICE_ID_INTEL_ICH8_6 0x2850 +#define PCI_DEVICE_ID_INTEL_VMD_28C0 0x28c0#define PCI_DEVICE_ID_INTEL_ICH9_0 0x2910#define PCI_DEVICE_ID_INTEL_ICH9_1 0x2917#define PCI_DEVICE_ID_INTEL_ICH9_2 0x2912
Signature · 1 line
2.14.3
PATCH 2/5 PCI/VMD: Assign membar addresses from shadow registers
In reply to Jon DerrickCertain VMD devices have registers within membar 2 which may shadow the membar 1 and membar 2 addresses. These are intended to be used in virtualization, where assigning a guest address wouldn't be translated in the assignment to root port and child devices because the addresses exist within the assignment message.
These values will only reflect the membars when enabled in the BIOS, as determined by a register in the VMD device.
This patch declares this option as a bit in the pci id driver_data, so that future conforming device ids can be enabled through sysfs new_id if necessary.
--- drivers/pci/host/vmd.c | 54 +++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 49 insertions(+), 5 deletions(-)
drivers/pci/host/vmd.c +49 -5
@@ -24,6 +24,18 @@#define VMD_MEMBAR1 2#define VMD_MEMBAR2 4 +#define PCI_REG_VMLOCK 0x70 +#define MB2_SHADOW_EN (vmlock) (vmlock & 0x2) + +enum vmd_features { +/* +* Device may contain registers which hint the physical location of the +* membars, in order to allow proper address translation during +* resource assignment to enable guest virtualization +*/ +VMD_FEAT_HAS_MEMBAR_SHADOW = (1 <<0 ), +}; +/* * Lock for manipulating VMD IRQ lists. */
@@ -546,7 +558,7 @@ static int vmd_find_free_domain(void)return domain +1 ; } -static int vmd_enable_domain (struct vmd_dev *vmd) +static int vmd_enable_domain (struct vmd_dev *vmd,unsigned long features) {struct pci_sysdata *sd = &vmd->sysdata;struct fwnode_handle *fn;
@@ -554,6 +566,37 @@ static int vmd_enable_domain(struct vmd_dev *vmd)u32 upper_bits;unsigned long flags;LIST_HEAD (resources); +resource_size_t offset[2 ] = {0 }; +resource_size_t membar2_offset =0x2000 ; + +/* +* Shadow registers may exist in certain VMD device ids which allow +* guests to correctly assign host physical addresses to the root ports +* and child devices. These registers will either return the host value +* or 0, depending on an enable bit in the VMD device. +*/ +if (features &VMD_FEAT_HAS_MEMBAR_SHADOW ) { +u32 vmlock; +int ret; + + membar2_offset =0x2018 ; + ret =pci_read_config_dword (vmd->dev,PCI_REG_VMLOCK , &vmlock); +if (ret || vmlock == ~0 ) +return -ENODEV ; + +if (MB2_SHADOW_EN (vmlock)) { +void __iomem *membar2; + + membar2 =pci_iomap (vmd->dev,VMD_MEMBAR2 ,0 ); +if (!membar2) +return -ENOMEM ; + offset[0 ] = vmd->dev->resource[VMD_MEMBAR1 ].start - +readq (membar2 +0x2008 ); + offset[1 ] = vmd->dev->resource[VMD_MEMBAR2 ].start - +readq (membar2 +0x2010 ); +pci_iounmap (vmd->dev, membar2); + } + } res = &vmd->dev->resource[VMD_CFGBAR ]; vmd->resources[0 ] = (struct resource ) {
@@ -600,7 +643,7 @@ static int vmd_enable_domain(struct vmd_dev *vmd) flags &= ~IORESOURCE_MEM_64 ; vmd->resources[2 ] = (struct resource ) { .name ="VMD MEMBAR2" , - .start = res->start +0x2000 , + .start = res->start + membar2_offset, .end = res->end, .flags = flags, .parent = res,
@@ -624,8 +667,9 @@ static int vmd_enable_domain(struct vmd_dev *vmd)return -ENODEV ;pci_add_resource (&resources, &vmd->resources[0 ]); -pci_add_resource (&resources, &vmd->resources[1 ]); -pci_add_resource (&resources, &vmd->resources[2 ]); +pci_add_resource_offset (&resources, &vmd->resources[1 ], offset[0 ]); +pci_add_resource_offset (&resources, &vmd->resources[2 ], offset[1 ]); + vmd->bus =pci_create_root_bus (&vmd->dev->dev,0 , &vmd_ops, sd, &resources);if (!vmd->bus) {
@@ -713,7 +757,7 @@ static int vmd_probe(struct pci_dev *dev, const struct pci_device_id *id)spin_lock_init (&vmd->cfg_lock);pci_set_drvdata (dev, vmd); - err =vmd_enable_domain (vmd); + err =vmd_enable_domain (vmd, (unsigned long ) id->driver_data);if (err)return err;
Signature · 1 line
2.14.3
PATCH 3/5 PCI/VMD: Add offset to bus numbers if necessary
In reply to Jon DerrickDepending on platform configuration, certain VMD devices may have an additional configuration option which specifies the range of bus numbers allowed in a VMD PCIe domain. We determine this requirement by checking the value of two vendor specific config registers in the VMD endpoint:
VMCAP[0] | VMCONFIG[9:8] | Bus Numbers
----------------------------------------
0 | * | 0-255
1 | 00 | 0-127
1 | 01 | 128-255
1 | 10 | 0-255This feature is also added as a bit in driver_data, to allow future conforming device ids which support these features to be enabled through sysfs new_id.
--- drivers/pci/host/vmd.c | 34 +++++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-)
drivers/pci/host/vmd.c +29 -5
@@ -24,6 +24,10 @@#define VMD_MEMBAR1 2#define VMD_MEMBAR2 4 +#define PCI_REG_VMCAP 0x40 +#define BUS_RESTRICT_CAP (vmcap) (vmcap & 0x1) +#define PCI_REG_VMCONFIG 0x44 +#define BUS_RESTRICT_CFG (vmcfg) ((vmcfg >> 8) & 0x3)#define PCI_REG_VMLOCK 0x70#define MB2_SHADOW_EN (vmlock) (vmlock & 0x2)
@@ -34,6 +38,12 @@ enum vmd_features {* resource assignment to enable guest virtualization */ VMD_FEAT_HAS_MEMBAR_SHADOW = (1 <<0 ), + +/* +* Device may provide root port configuration information which limits +* bus numbering +*/ + VMD_FEAT_HAS_BUS_RESTRICTIONS = (1 << 1), };/*
@@ -567,7 +577,7 @@ static int vmd_enable_domain(struct vmd_dev *vmd, unsigned long features)unsigned long flags;LIST_HEAD (resources);resource_size_t offset[2 ] = {0 }; -resource_size_t membar2_offset =0x2000 ; +resource_size_t membar2_offset =0x2000 , busn_start =0 ;/* * Shadow registers may exist in certain VMD device ids which allow
@@ -598,11 +608,25 @@ static int vmd_enable_domain(struct vmd_dev *vmd, unsigned long features) } } +/* +* Certain VMD devices may have a root port configuration option which +* limits the bus range to between 0-127 or 128-255 +*/ +if (features &VMD_FEAT_HAS_BUS_RESTRICTIONS ) { +u32 vmcap, vmconfig; + +pci_read_config_dword (vmd->dev,PCI_REG_VMCAP , &vmcap); +pci_read_config_dword (vmd->dev,PCI_REG_VMCONFIG , &vmconfig); +if (BUS_RESTRICT_CAP (vmcap) && + (BUS_RESTRICT_CFG (vmconfig) ==0x1 )) + busn_start =128 ; + } + res = &vmd->dev->resource[VMD_CFGBAR ]; vmd->resources[0 ] = (struct resource ) { .name ="VMD CFGBAR" , - .start =0 , - .end = (resource_size (res) >>20 ) -1 , + .start = busn_start, + .end = busn_start + (resource_size (res) >>20 ) -1 , .flags =IORESOURCE_BUS |IORESOURCE_PCI_FIXED , };
@@ -670,8 +694,8 @@ static int vmd_enable_domain(struct vmd_dev *vmd, unsigned long features)pci_add_resource_offset (&resources, &vmd->resources[1 ], offset[0 ]);pci_add_resource_offset (&resources, &vmd->resources[2 ], offset[1 ]); - vmd->bus =pci_create_root_bus (&vmd->dev->dev,0 , &vmd_ops, sd, - &resources); + vmd->bus =pci_create_root_bus (&vmd->dev->dev, busn_start, &vmd_ops, + sd, &resources);if (!vmd->bus) {pci_free_resource_list (&resources);irq_domain_remove (vmd->irq_domain);
Signature · 1 line
2.14.3
PATCH 4/5 x86/PCI: Add additional VMD device root ports to VMD AER quirk
In reply to Jon DerrickVMD devices change the source id of messages from child devices to the VMD endpoint. This patch adds additional VMD root port device ids to the AER quirk which requires walking the bus to determine which devices were throwing the error.
--- arch/x86/pci/fixup.c | 4 ++++ 1 file changed, 4 insertions(+)
arch/x86/pci/fixup.c +4 -0
@@ -636,6 +636,10 @@ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x2030, quirk_no_aersid);DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_INTEL ,0x2031 , quirk_no_aersid);DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_INTEL ,0x2032 , quirk_no_aersid);DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_INTEL ,0x2033 , quirk_no_aersid); +DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_INTEL ,0x334a , quirk_no_aersid); +DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_INTEL ,0x334b , quirk_no_aersid); +DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_INTEL ,0x334c , quirk_no_aersid); +DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_INTEL ,0x334d , quirk_no_aersid);#ifdef CONFIG_PHYS_ADDR_T_64BIT
Signature · 1 line
2.14.3
Re: [PATCH 4/5] x86/PCI: Add additional VMD device root ports to VMD AER quirk
Quoted 6 lines · Jon Derrick
VMD devices change the source id of messages from child devices to the VMD endpoint. This patch adds additional VMD root port device ids to the AER quirk which requires walking the bus to determine which devices were throwing the error.
Signed-off-by Jon Derrick <[email protected]>
Can you pick up this series, Lorenzo?
Quoted 22 lines
--- arch/x86/pci/fixup.c | 4 ++++ 1 file changed, 4 insertions(+)arch/x86/pci/fixup.c +4
-0@@ -636,6 +636,10 @@ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x2030, quirk_no_aersid);DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_INTEL ,0x2031 , quirk_no_aersid);DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_INTEL ,0x2032 , quirk_no_aersid);DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_INTEL ,0x2033 , quirk_no_aersid); +DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_INTEL ,0x334a , quirk_no_aersid); +DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_INTEL ,0x334b , quirk_no_aersid); +DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_INTEL ,0x334c , quirk_no_aersid); +DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_INTEL ,0x334d , quirk_no_aersid);#ifdef CONFIG_PHYS_ADDR_T_64BIT Signature · 1 line
2.14.3
PATCH 5/5 PCI/VMD: Add an additional VMD device id to driver device id table
In reply to Jon DerrickAllow VMD devices with PCI id 8086:28c0 to bind to VMD driver.
--- drivers/pci/host/vmd.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/pci/host/vmd.c +3 -0
@@ -847,6 +847,9 @@ static SIMPLE_DEV_PM_OPS(vmd_dev_pm_ops, vmd_suspend, vmd_resume);static const struct pci_device_id vmd_ids[] = { {PCI_DEVICE (PCI_VENDOR_ID_INTEL ,PCI_DEVICE_ID_INTEL_VMD_201D ),}, + {PCI_DEVICE (PCI_VENDOR_ID_INTEL ,PCI_DEVICE_ID_INTEL_VMD_28C0 ), + .driver_data =VMD_FEAT_HAS_MEMBAR_SHADOW | +VMD_FEAT_HAS_BUS_RESTRICTIONS ,}, {0 ,} };MODULE_DEVICE_TABLE (pci, vmd_ids);
Signature · 1 line
2.14.3
Quoted 10 lines · Jon Derrick
This patchset enables an additional VMD device ID to the VMD driver supporting assignment of the membar addresses from shadow registers and allows more flexibility in assigning bus numbers to a VMD PCIe domain. Additional VMD root port device ids have been added to the VMD AER quirk.
Changes from rfc include comments, code structure, and using
pci_add_resource_offsetto correctly assign addresses while virtualized.Applies to Bjorn's next branch
Hi Jon,
You should base it on v4.17-rc1 and if there is a dependency on later -rc* or a branch in Bjorn/my queue please let us know.
Quoted 11 lines
Jon Derrick (5):
PCI: Add Intel VMD devices to pci ids
PCI/VMD: Assign membar addresses from shadow registers PCI/VMD: Add offset to bus numbers if necessary x86/PCI: Add additional VMD device root ports to VMD AER quirk PCI/VMD: Add an additional VMD device id to driver device id tablearch/x86/pci/fixup.c | 4 +++ drivers/pci/host/vmd.c | 91 +++++++++++++++++++++++++++++++++++++++++++------ include/linux/pci_ids.h | 2 ++ 3 files changed, 87 insertions(+), 10 deletions(-)
I need Bjorn's ACK on patch (4), or if Bjorn is keen on pulling the series, here's mine on the series:
Hi Lorenzo,
Quoted 13 lines · Lorenzo Pieralisi
Quoted 12 lines · Jon Derrick
This patchset enables an additional VMD device ID to the VMD driver supporting assignment of the membar addresses from shadow registers and
allows more flexibility in assigning bus numbers to a VMD PCIe domain.
Additional VMD root port device ids have been added to the VMD AER quirk.Changes from rfc include comments, code structure, and using
pci_add_resource_offsetto correctly assign addresses while virtualized.
Quoted 6 lines
Quoted 1 line
Applies to Bjorn's next branch
Hi Jon,
You should base it on v4.17-rc1 and if there is a dependency on later -rc* or a branch in Bjorn/my queue please let us know.
It looks like it applies cleanly to 4.17-rc1 and rc6.
Quoted 14 lines
Quoted 8 lines
Jon Derrick (5):
PCI: Add Intel VMD devices to pci ids
PCI/VMD: Assign membar addresses from shadow registers PCI/VMD: Add offset to bus numbers if necessary x86/PCI: Add additional VMD device root ports to VMD AER quirk PCI/VMD: Add an additional VMD device id to driver device id
tableQuoted 5 lines
arch/x86/pci/fixup.c | 4 +++ drivers/pci/host/vmd.c | 91 +++++++++++++++++++++++++++++++++++++++++++------ include/linux/pci_ids.h | 2 ++ 3 files changed, 87 insertions(+), 10 deletions(-)
Quoted 4 lines
I need Bjorn's ACK on patch (4), or if Bjorn is keen on pulling the series, here's mine on the series:
Would you like me to rebase it and resend with Bjorn's ack?
Quoted 1 line
Quoted 38 lines · Jonathan
Hi Lorenzo,
Quoted 13 lines · Lorenzo Pieralisi
Quoted 12 lines · Jon Derrick
This patchset enables an additional VMD device ID to the VMD driver supporting assignment of the membar addresses from shadow registers and
allows more flexibility in assigning bus numbers to a VMD PCIe domain.
Additional VMD root port device ids have been added to the VMD AER quirk.Changes from rfc include comments, code structure, and using
pci_add_resource_offsetto correctly assign addresses while virtualized.Quoted 6 lines
Quoted 1 line
Applies to Bjorn's next branch
Hi Jon,
You should base it on v4.17-rc1 and if there is a dependency on later -rc* or a branch in Bjorn/my queue please let us know.
It looks like it applies cleanly to 4.17-rc1 and rc6.
Quoted 14 lines
Quoted 13 lines
Jon Derrick (5):
PCI: Add Intel VMD devices to pci ids
PCI/VMD: Assign membar addresses from shadow registers PCI/VMD: Add offset to bus numbers if necessary x86/PCI: Add additional VMD device root ports to VMD AER quirk PCI/VMD: Add an additional VMD device id to driver device id
tablearch/x86/pci/fixup.c | 4 +++ drivers/pci/host/vmd.c | 91 +++++++++++++++++++++++++++++++++++++++++++------ include/linux/pci_ids.h | 2 ++ 3 files changed, 87 insertions(+), 10 deletions(-)
Quoted 6 lines
Quoted 4 lines
I need Bjorn's ACK on patch (4), or if Bjorn is keen on pulling the series, here's mine on the series:
Would you like me to rebase it and resend with Bjorn's ack?
No need to resend but I need Bjorn's ACK on patch (4) in order to queue it.
Thanks,
Lorenzo
Quoted 50 lines · Lorenzo Pieralisi
Quoted 49 lines · Jonathan
Hi Lorenzo,
Quoted 16 lines · Lorenzo Pieralisi
Quoted 15 lines · Jon Derrick
This patchset enables an additional VMD device ID to the VMD driver
supporting assignment of the membar addresses from shadow registers
and
allows more flexibility in assigning bus numbers to a VMD PCIe domain.
Additional VMD root port device ids have been added to the VMD AER
quirk.Changes from rfc include comments, code structure, and using
pci_add_resource_offsetto correctly assign addresses while virtualized.Quoted 6 lines
Quoted 1 line
Applies to Bjorn's next branch
Hi Jon,
You should base it on v4.17-rc1 and if there is a dependency on later -rc* or a branch in Bjorn/my queue please let us know.
It looks like it applies cleanly to 4.17-rc1 and rc6.
Quoted 20 lines
Quoted 9 lines
Jon Derrick (5):
PCI: Add Intel VMD devices to pci ids
PCI/VMD: Assign membar addresses from shadow registers PCI/VMD: Add offset to bus numbers if necessary x86/PCI: Add additional VMD device root ports to VMD AER
quirk
PCI/VMD: Add an additional VMD device id to driver device id
tableQuoted 5 lines
arch/x86/pci/fixup.c | 4 +++ drivers/pci/host/vmd.c | 91 +++++++++++++++++++++++++++++++++++++++++++------ include/linux/pci_ids.h | 2 ++ 3 files changed, 87 insertions(+), 10 deletions(-)I need Bjorn's ACK on patch (4), or if Bjorn is keen on pulling the
series, here's mine on the series:
Quoted 7 lines
Quoted 1 line
Would you like me to rebase it and resend with Bjorn's ack?
No need to resend but I need Bjorn's ACK on patch (4) in order to queue it.
Thanks,
Lorenzo
Here's Bjorn's ack since you may not have it seen it yet:
https://patchwork.ozlabs.org/patch/916565/
Thanks,
Jon
Lorenzo Pieralisi
AppliedQuoted 53 lines · Jonathan
Quoted 52 lines · Lorenzo Pieralisi
Quoted 50 lines · Jonathan
Hi Lorenzo,
Quoted 16 lines · Lorenzo Pieralisi
Quoted 15 lines · Jon Derrick
This patchset enables an additional VMD device ID to the VMD driver
supporting assignment of the membar addresses from shadow registers
and
allows more flexibility in assigning bus numbers to a VMD PCIe domain.
Additional VMD root port device ids have been added to the VMD AER
quirk.Changes from rfc include comments, code structure, and using
pci_add_resource_offsetto correctly assign addresses while virtualized.Quoted 6 lines
Quoted 1 line
Applies to Bjorn's next branch
Hi Jon,
You should base it on v4.17-rc1 and if there is a dependency on later -rc* or a branch in Bjorn/my queue please let us know.
It looks like it applies cleanly to 4.17-rc1 and rc6.
Quoted 15 lines
Quoted 9 lines
Jon Derrick (5):
PCI: Add Intel VMD devices to pci ids
PCI/VMD: Assign membar addresses from shadow registers PCI/VMD: Add offset to bus numbers if necessary x86/PCI: Add additional VMD device root ports to VMD AER
quirk
PCI/VMD: Add an additional VMD device id to driver device id
tableQuoted 5 lines
arch/x86/pci/fixup.c | 4 +++ drivers/pci/host/vmd.c | 91 +++++++++++++++++++++++++++++++++++++++++++------ include/linux/pci_ids.h | 2 ++ 3 files changed, 87 insertions(+), 10 deletions(-)Quoted 5 lines
I need Bjorn's ACK on patch (4), or if Bjorn is keen on pulling the
series, here's mine on the series:Would you like me to rebase it and resend with Bjorn's ack?
Quoted 8 lines
Quoted 5 lines
No need to resend but I need Bjorn's ACK on patch (4) in order to queue it.
Thanks,
LorenzoHere's Bjorn's ack since you may not have it seen it yet:
https://patchwork.ozlabs.org/patch/916565/
Ok sorry it is because I am not CC'ed on the patches, I did not notice.
Applied the series to pci/vmd for v4.18, thanks.
Lorenzo