Enable the firmware recognizing RedHat legacy PCI bridge device ID,
so QEMU can reserve additional PCI bridge resource capability.
Change the debug level lower to 3 when it is non-QEMU bridge.
Signed-off-by: Jing Liu <jing2.liu@linux.intel.com>
---
src/fw/pciinit.c | 50 +++++++++++++++++++++++++++++---------------------
src/hw/pci_ids.h | 1 +
2 files changed, 30 insertions(+), 21 deletions(-)
diff --git a/src/fw/pciinit.c b/src/fw/pciinit.c
index 62a32f1..c0634bc 100644
--- a/src/fw/pciinit.c
+++ b/src/fw/pciinit.c
@@ -525,30 +525,38 @@ static void pci_bios_init_platform(void)
static u8 pci_find_resource_reserve_capability(u16 bdf)
{
- if (pci_config_readw(bdf, PCI_VENDOR_ID) == PCI_VENDOR_ID_REDHAT &&
- pci_config_readw(bdf, PCI_DEVICE_ID) ==
- PCI_DEVICE_ID_REDHAT_ROOT_PORT) {
- u8 cap = 0;
- do {
- cap = pci_find_capability(bdf, PCI_CAP_ID_VNDR, cap);
- } while (cap &&
- pci_config_readb(bdf, cap + PCI_CAP_REDHAT_TYPE_OFFSET) !=
- REDHAT_CAP_RESOURCE_RESERVE);
- if (cap) {
- u8 cap_len = pci_config_readb(bdf, cap + PCI_CAP_FLAGS);
- if (cap_len < RES_RESERVE_CAP_SIZE) {
- dprintf(1, "PCI: QEMU resource reserve cap length %d is invalid\n",
- cap_len);
- return 0;
- }
- } else {
- dprintf(1, "PCI: QEMU resource reserve cap not found\n");
+ u16 device_id;
+
+ if (pci_config_readw(bdf, PCI_VENDOR_ID) != PCI_VENDOR_ID_REDHAT) {
+ dprintf(3, "PCI: This is non-QEMU bridge.\n");
+ return 0;
+ }
+
+ device_id = pci_config_readw(bdf, PCI_DEVICE_ID);
+
+ if (device_id != PCI_DEVICE_ID_REDHAT_ROOT_PORT &&
+ device_id != PCI_DEVICE_ID_REDHAT_BRIDGE) {
+ dprintf(1, "PCI: QEMU resource reserve cap device ID doesn't match.\n");
+ return 0;
+ }
+ u8 cap = 0;
+
+ do {
+ cap = pci_find_capability(bdf, PCI_CAP_ID_VNDR, cap);
+ } while (cap &&
+ pci_config_readb(bdf, cap + PCI_CAP_REDHAT_TYPE_OFFSET) !=
+ REDHAT_CAP_RESOURCE_RESERVE);
+ if (cap) {
+ u8 cap_len = pci_config_readb(bdf, cap + PCI_CAP_FLAGS);
+ if (cap_len < RES_RESERVE_CAP_SIZE) {
+ dprintf(1, "PCI: QEMU resource reserve cap length %d is invalid\n",
+ cap_len);
+ return 0;
}
- return cap;
} else {
- dprintf(1, "PCI: QEMU resource reserve cap VID or DID doesn't match.\n");
- return 0;
+ dprintf(1, "PCI: QEMU resource reserve cap not found\n");
}
+ return cap;
}
/****************************************************************
diff --git a/src/hw/pci_ids.h b/src/hw/pci_ids.h
index 38fa2ca..1096461 100644
--- a/src/hw/pci_ids.h
+++ b/src/hw/pci_ids.h
@@ -2265,6 +2265,7 @@
#define PCI_VENDOR_ID_REDHAT 0x1b36
#define PCI_DEVICE_ID_REDHAT_ROOT_PORT 0x000C
+#define PCI_DEVICE_ID_REDHAT_BRIDGE 0x0001
#define PCI_VENDOR_ID_TEKRAM 0x1de1
#define PCI_DEVICE_ID_TEKRAM_DC290 0xdc29
--
1.8.3.1
_______________________________________________
SeaBIOS mailing list
SeaBIOS@seabios.org
https://mail.coreboot.org/mailman/listinfo/seabios
On 08/24/18 10:53, Jing Liu wrote: > Enable the firmware recognizing RedHat legacy PCI bridge device ID, > so QEMU can reserve additional PCI bridge resource capability. > Change the debug level lower to 3 when it is non-QEMU bridge. > > Signed-off-by: Jing Liu <jing2.liu@linux.intel.com> > --- > src/fw/pciinit.c | 50 +++++++++++++++++++++++++++++--------------------- > src/hw/pci_ids.h | 1 + > 2 files changed, 30 insertions(+), 21 deletions(-) > > diff --git a/src/fw/pciinit.c b/src/fw/pciinit.c > index 62a32f1..c0634bc 100644 > --- a/src/fw/pciinit.c > +++ b/src/fw/pciinit.c > @@ -525,30 +525,38 @@ static void pci_bios_init_platform(void) > > static u8 pci_find_resource_reserve_capability(u16 bdf) > { > - if (pci_config_readw(bdf, PCI_VENDOR_ID) == PCI_VENDOR_ID_REDHAT && > - pci_config_readw(bdf, PCI_DEVICE_ID) == > - PCI_DEVICE_ID_REDHAT_ROOT_PORT) { > - u8 cap = 0; > - do { > - cap = pci_find_capability(bdf, PCI_CAP_ID_VNDR, cap); > - } while (cap && > - pci_config_readb(bdf, cap + PCI_CAP_REDHAT_TYPE_OFFSET) != > - REDHAT_CAP_RESOURCE_RESERVE); > - if (cap) { > - u8 cap_len = pci_config_readb(bdf, cap + PCI_CAP_FLAGS); > - if (cap_len < RES_RESERVE_CAP_SIZE) { > - dprintf(1, "PCI: QEMU resource reserve cap length %d is invalid\n", > - cap_len); > - return 0; > - } > - } else { > - dprintf(1, "PCI: QEMU resource reserve cap not found\n"); > + u16 device_id; > + > + if (pci_config_readw(bdf, PCI_VENDOR_ID) != PCI_VENDOR_ID_REDHAT) { > + dprintf(3, "PCI: This is non-QEMU bridge.\n"); I think I liked the previous language slightly more ("PCI: QEMU resource reserve cap vendor ID doesn't match."), but that shouldn't be a problem. Series Reviewed-by: Laszlo Ersek <lersek@redhat.com> Thanks Laszlo > + return 0; > + } > + > + device_id = pci_config_readw(bdf, PCI_DEVICE_ID); > + > + if (device_id != PCI_DEVICE_ID_REDHAT_ROOT_PORT && > + device_id != PCI_DEVICE_ID_REDHAT_BRIDGE) { > + dprintf(1, "PCI: QEMU resource reserve cap device ID doesn't match.\n"); > + return 0; > + } > + u8 cap = 0; > + > + do { > + cap = pci_find_capability(bdf, PCI_CAP_ID_VNDR, cap); > + } while (cap && > + pci_config_readb(bdf, cap + PCI_CAP_REDHAT_TYPE_OFFSET) != > + REDHAT_CAP_RESOURCE_RESERVE); > + if (cap) { > + u8 cap_len = pci_config_readb(bdf, cap + PCI_CAP_FLAGS); > + if (cap_len < RES_RESERVE_CAP_SIZE) { > + dprintf(1, "PCI: QEMU resource reserve cap length %d is invalid\n", > + cap_len); > + return 0; > } > - return cap; > } else { > - dprintf(1, "PCI: QEMU resource reserve cap VID or DID doesn't match.\n"); > - return 0; > + dprintf(1, "PCI: QEMU resource reserve cap not found\n"); > } > + return cap; > } > > /**************************************************************** > diff --git a/src/hw/pci_ids.h b/src/hw/pci_ids.h > index 38fa2ca..1096461 100644 > --- a/src/hw/pci_ids.h > +++ b/src/hw/pci_ids.h > @@ -2265,6 +2265,7 @@ > > #define PCI_VENDOR_ID_REDHAT 0x1b36 > #define PCI_DEVICE_ID_REDHAT_ROOT_PORT 0x000C > +#define PCI_DEVICE_ID_REDHAT_BRIDGE 0x0001 > > #define PCI_VENDOR_ID_TEKRAM 0x1de1 > #define PCI_DEVICE_ID_TEKRAM_DC290 0xdc29 > _______________________________________________ SeaBIOS mailing list SeaBIOS@seabios.org https://mail.coreboot.org/mailman/listinfo/seabios
Hi Laszlo, On 8/24/2018 5:12 PM, Laszlo Ersek wrote: >> - dprintf(1, "PCI: QEMU resource reserve cap not found\n"); >> + u16 device_id; >> + >> + if (pci_config_readw(bdf, PCI_VENDOR_ID) != PCI_VENDOR_ID_REDHAT) { >> + dprintf(3, "PCI: This is non-QEMU bridge.\n"); > > I think I liked the previous language slightly more ("PCI: QEMU resource > reserve cap vendor ID doesn't match."), but that shouldn't be a problem. > > Series > Reviewed-by: Laszlo Ersek <lersek@redhat.com> > Thank you for the comments and feedback! Jing > Thanks > Laszlo > _______________________________________________ SeaBIOS mailing list SeaBIOS@seabios.org https://mail.coreboot.org/mailman/listinfo/seabios
On 08/24/2018 11:53 AM, Jing Liu wrote: > Enable the firmware recognizing RedHat legacy PCI bridge device ID, > so QEMU can reserve additional PCI bridge resource capability. > Change the debug level lower to 3 when it is non-QEMU bridge. > > Signed-off-by: Jing Liu <jing2.liu@linux.intel.com> > --- > src/fw/pciinit.c | 50 +++++++++++++++++++++++++++++--------------------- > src/hw/pci_ids.h | 1 + > 2 files changed, 30 insertions(+), 21 deletions(-) > > diff --git a/src/fw/pciinit.c b/src/fw/pciinit.c > index 62a32f1..c0634bc 100644 > --- a/src/fw/pciinit.c > +++ b/src/fw/pciinit.c > @@ -525,30 +525,38 @@ static void pci_bios_init_platform(void) > > static u8 pci_find_resource_reserve_capability(u16 bdf) > { > - if (pci_config_readw(bdf, PCI_VENDOR_ID) == PCI_VENDOR_ID_REDHAT && > - pci_config_readw(bdf, PCI_DEVICE_ID) == > - PCI_DEVICE_ID_REDHAT_ROOT_PORT) { > - u8 cap = 0; > - do { > - cap = pci_find_capability(bdf, PCI_CAP_ID_VNDR, cap); > - } while (cap && > - pci_config_readb(bdf, cap + PCI_CAP_REDHAT_TYPE_OFFSET) != > - REDHAT_CAP_RESOURCE_RESERVE); > - if (cap) { > - u8 cap_len = pci_config_readb(bdf, cap + PCI_CAP_FLAGS); > - if (cap_len < RES_RESERVE_CAP_SIZE) { > - dprintf(1, "PCI: QEMU resource reserve cap length %d is invalid\n", > - cap_len); > - return 0; > - } > - } else { > - dprintf(1, "PCI: QEMU resource reserve cap not found\n"); > + u16 device_id; > + > + if (pci_config_readw(bdf, PCI_VENDOR_ID) != PCI_VENDOR_ID_REDHAT) { > + dprintf(3, "PCI: This is non-QEMU bridge.\n"); > + return 0; > + } > + > + device_id = pci_config_readw(bdf, PCI_DEVICE_ID); > + > + if (device_id != PCI_DEVICE_ID_REDHAT_ROOT_PORT && > + device_id != PCI_DEVICE_ID_REDHAT_BRIDGE) { > + dprintf(1, "PCI: QEMU resource reserve cap device ID doesn't match.\n"); > + return 0; > + } > + u8 cap = 0; > + > + do { > + cap = pci_find_capability(bdf, PCI_CAP_ID_VNDR, cap); > + } while (cap && > + pci_config_readb(bdf, cap + PCI_CAP_REDHAT_TYPE_OFFSET) != > + REDHAT_CAP_RESOURCE_RESERVE); > + if (cap) { > + u8 cap_len = pci_config_readb(bdf, cap + PCI_CAP_FLAGS); > + if (cap_len < RES_RESERVE_CAP_SIZE) { > + dprintf(1, "PCI: QEMU resource reserve cap length %d is invalid\n", > + cap_len); > + return 0; > } > - return cap; > } else { > - dprintf(1, "PCI: QEMU resource reserve cap VID or DID doesn't match.\n"); > - return 0; I am sorry for the late review. Did you drop the above line in purpose? Thanks, Marcel > + dprintf(1, "PCI: QEMU resource reserve cap not found\n"); > } > + return cap; > } > > /**************************************************************** > diff --git a/src/hw/pci_ids.h b/src/hw/pci_ids.h > index 38fa2ca..1096461 100644 > --- a/src/hw/pci_ids.h > +++ b/src/hw/pci_ids.h > @@ -2265,6 +2265,7 @@ > > #define PCI_VENDOR_ID_REDHAT 0x1b36 > #define PCI_DEVICE_ID_REDHAT_ROOT_PORT 0x000C > +#define PCI_DEVICE_ID_REDHAT_BRIDGE 0x0001 > > #define PCI_VENDOR_ID_TEKRAM 0x1de1 > #define PCI_DEVICE_ID_TEKRAM_DC290 0xdc29 _______________________________________________ SeaBIOS mailing list SeaBIOS@seabios.org https://mail.coreboot.org/mailman/listinfo/seabios
Hi Marcel, On 8/25/2018 11:59 PM, Marcel Apfelbaum wrote: > > > On 08/24/2018 11:53 AM, Jing Liu wrote: >> Enable the firmware recognizing RedHat legacy PCI bridge device ID, >> so QEMU can reserve additional PCI bridge resource capability. >> Change the debug level lower to 3 when it is non-QEMU bridge. >> >> Signed-off-by: Jing Liu <jing2.liu@linux.intel.com> >> --- >> src/fw/pciinit.c | 50 >> +++++++++++++++++++++++++++++--------------------- >> src/hw/pci_ids.h | 1 + >> 2 files changed, 30 insertions(+), 21 deletions(-) >> >> diff --git a/src/fw/pciinit.c b/src/fw/pciinit.c >> index 62a32f1..c0634bc 100644 >> --- a/src/fw/pciinit.c >> +++ b/src/fw/pciinit.c >> @@ -525,30 +525,38 @@ static void pci_bios_init_platform(void) >> static u8 pci_find_resource_reserve_capability(u16 bdf) >> { >> - if (pci_config_readw(bdf, PCI_VENDOR_ID) == PCI_VENDOR_ID_REDHAT && >> - pci_config_readw(bdf, PCI_DEVICE_ID) == >> - PCI_DEVICE_ID_REDHAT_ROOT_PORT) { >> - u8 cap = 0; >> - do { >> - cap = pci_find_capability(bdf, PCI_CAP_ID_VNDR, cap); >> - } while (cap && >> - pci_config_readb(bdf, cap + >> PCI_CAP_REDHAT_TYPE_OFFSET) != >> - REDHAT_CAP_RESOURCE_RESERVE); >> - if (cap) { >> - u8 cap_len = pci_config_readb(bdf, cap + PCI_CAP_FLAGS); >> - if (cap_len < RES_RESERVE_CAP_SIZE) { >> - dprintf(1, "PCI: QEMU resource reserve cap length %d >> is invalid\n", >> - cap_len); >> - return 0; >> - } >> - } else { >> - dprintf(1, "PCI: QEMU resource reserve cap not found\n"); >> + u16 device_id; >> + >> + if (pci_config_readw(bdf, PCI_VENDOR_ID) != PCI_VENDOR_ID_REDHAT) { >> + dprintf(3, "PCI: This is non-QEMU bridge.\n"); >> + return 0; >> + } >> + >> + device_id = pci_config_readw(bdf, PCI_DEVICE_ID); >> + >> + if (device_id != PCI_DEVICE_ID_REDHAT_ROOT_PORT && >> + device_id != PCI_DEVICE_ID_REDHAT_BRIDGE) { >> + dprintf(1, "PCI: QEMU resource reserve cap device ID doesn't >> match.\n"); >> + return 0; >> + } >> + u8 cap = 0; >> + >> + do { >> + cap = pci_find_capability(bdf, PCI_CAP_ID_VNDR, cap); >> + } while (cap && >> + pci_config_readb(bdf, cap + PCI_CAP_REDHAT_TYPE_OFFSET) != >> + REDHAT_CAP_RESOURCE_RESERVE); >> + if (cap) { >> + u8 cap_len = pci_config_readb(bdf, cap + PCI_CAP_FLAGS); >> + if (cap_len < RES_RESERVE_CAP_SIZE) { >> + dprintf(1, "PCI: QEMU resource reserve cap length %d is >> invalid\n", >> + cap_len); >> + return 0; >> } >> - return cap; >> } else { >> - dprintf(1, "PCI: QEMU resource reserve cap VID or DID doesn't >> match.\n"); >> - return 0; > > I am sorry for the late review. > Did you drop the above line in purpose? > Thanks for the review! I replaced the above report to following phase. Check the vendor-id and device-id respectively. + if (pci_config_readw(bdf, PCI_VENDOR_ID) != PCI_VENDOR_ID_REDHAT) { + dprintf(3, "PCI: This is non-QEMU bridge.\n"); + return 0; + } + + device_id = pci_config_readw(bdf, PCI_DEVICE_ID); + + if (device_id != PCI_DEVICE_ID_REDHAT_ROOT_PORT && + device_id != PCI_DEVICE_ID_REDHAT_BRIDGE) { + dprintf(1, "PCI: QEMU resource reserve cap device ID doesn't match.\n"); + return 0; + } Thanks, Jing > Thanks, > Marcel _______________________________________________ SeaBIOS mailing list SeaBIOS@seabios.org https://mail.coreboot.org/mailman/listinfo/seabios
On 08/27/2018 05:22 AM, Liu, Jing2 wrote: > Hi Marcel, > > On 8/25/2018 11:59 PM, Marcel Apfelbaum wrote: >> >> >> On 08/24/2018 11:53 AM, Jing Liu wrote: >>> Enable the firmware recognizing RedHat legacy PCI bridge device ID, >>> so QEMU can reserve additional PCI bridge resource capability. >>> Change the debug level lower to 3 when it is non-QEMU bridge. >>> >>> Signed-off-by: Jing Liu <jing2.liu@linux.intel.com> >>> --- >>> src/fw/pciinit.c | 50 >>> +++++++++++++++++++++++++++++--------------------- >>> src/hw/pci_ids.h | 1 + >>> 2 files changed, 30 insertions(+), 21 deletions(-) >>> >>> diff --git a/src/fw/pciinit.c b/src/fw/pciinit.c >>> index 62a32f1..c0634bc 100644 >>> --- a/src/fw/pciinit.c >>> +++ b/src/fw/pciinit.c >>> @@ -525,30 +525,38 @@ static void pci_bios_init_platform(void) >>> static u8 pci_find_resource_reserve_capability(u16 bdf) >>> { >>> - if (pci_config_readw(bdf, PCI_VENDOR_ID) == >>> PCI_VENDOR_ID_REDHAT && >>> - pci_config_readw(bdf, PCI_DEVICE_ID) == >>> - PCI_DEVICE_ID_REDHAT_ROOT_PORT) { >>> - u8 cap = 0; >>> - do { >>> - cap = pci_find_capability(bdf, PCI_CAP_ID_VNDR, cap); >>> - } while (cap && >>> - pci_config_readb(bdf, cap + >>> PCI_CAP_REDHAT_TYPE_OFFSET) != >>> - REDHAT_CAP_RESOURCE_RESERVE); >>> - if (cap) { >>> - u8 cap_len = pci_config_readb(bdf, cap + PCI_CAP_FLAGS); >>> - if (cap_len < RES_RESERVE_CAP_SIZE) { >>> - dprintf(1, "PCI: QEMU resource reserve cap length >>> %d is invalid\n", >>> - cap_len); >>> - return 0; >>> - } >>> - } else { >>> - dprintf(1, "PCI: QEMU resource reserve cap not found\n"); >>> + u16 device_id; >>> + >>> + if (pci_config_readw(bdf, PCI_VENDOR_ID) != >>> PCI_VENDOR_ID_REDHAT) { >>> + dprintf(3, "PCI: This is non-QEMU bridge.\n"); >>> + return 0; >>> + } >>> + >>> + device_id = pci_config_readw(bdf, PCI_DEVICE_ID); >>> + >>> + if (device_id != PCI_DEVICE_ID_REDHAT_ROOT_PORT && >>> + device_id != PCI_DEVICE_ID_REDHAT_BRIDGE) { >>> + dprintf(1, "PCI: QEMU resource reserve cap device ID >>> doesn't match.\n"); >>> + return 0; >>> + } >>> + u8 cap = 0; >>> + >>> + do { >>> + cap = pci_find_capability(bdf, PCI_CAP_ID_VNDR, cap); >>> + } while (cap && >>> + pci_config_readb(bdf, cap + >>> PCI_CAP_REDHAT_TYPE_OFFSET) != >>> + REDHAT_CAP_RESOURCE_RESERVE); >>> + if (cap) { >>> + u8 cap_len = pci_config_readb(bdf, cap + PCI_CAP_FLAGS); >>> + if (cap_len < RES_RESERVE_CAP_SIZE) { >>> + dprintf(1, "PCI: QEMU resource reserve cap length %d is >>> invalid\n", >>> + cap_len); >>> + return 0; >>> } >>> - return cap; >>> } else { >>> - dprintf(1, "PCI: QEMU resource reserve cap VID or DID >>> doesn't match.\n"); >>> - return 0; >> >> I am sorry for the late review. >> Did you drop the above line in purpose? >> > Thanks for the review! > > I replaced the above report to following phase. > Check the vendor-id and device-id respectively. > > + if (pci_config_readw(bdf, PCI_VENDOR_ID) != PCI_VENDOR_ID_REDHAT) { > + dprintf(3, "PCI: This is non-QEMU bridge.\n"); > + return 0; > + } > + > + device_id = pci_config_readw(bdf, PCI_DEVICE_ID); > + > + if (device_id != PCI_DEVICE_ID_REDHAT_ROOT_PORT && > + device_id != PCI_DEVICE_ID_REDHAT_BRIDGE) { > + dprintf(1, "PCI: QEMU resource reserve cap device ID doesn't > match.\n"); > + return 0; > + } > I understand. Reviewed-by: Marcel Apfelbaum<marcel.apfelbaum@gmail.com> Thanks, Marcel > Thanks, > Jing > >> Thanks, >> Marcel _______________________________________________ SeaBIOS mailing list SeaBIOS@seabios.org https://mail.coreboot.org/mailman/listinfo/seabios
Hi Marcel, On 8/28/2018 12:58 AM, Marcel Apfelbaum wrote: >>> >>> On 08/24/2018 11:53 AM, Jing Liu wrote: >>>> Enable the firmware recognizing RedHat legacy PCI bridge device ID, >>>> so QEMU can reserve additional PCI bridge resource capability. >>>> Change the debug level lower to 3 when it is non-QEMU bridge. >>>> >>>> Signed-off-by: Jing Liu <jing2.liu@linux.intel.com> >>>> --- >>>> src/fw/pciinit.c | 50 >>>> +++++++++++++++++++++++++++++--------------------- >>>> src/hw/pci_ids.h | 1 + >>>> 2 files changed, 30 insertions(+), 21 deletions(-) >>>> [...] > > I understand. > > Reviewed-by: Marcel Apfelbaum<marcel.apfelbaum@gmail.com> > Thanks for your feedback! BR, Jing > > Thanks, > Marcel > >> Thanks, >> Jing >> >>> Thanks, >>> Marcel > _______________________________________________ SeaBIOS mailing list SeaBIOS@seabios.org https://mail.coreboot.org/mailman/listinfo/seabios
© 2016 - 2025 Red Hat, Inc.