[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-ppc] [Qemu-devel] [PATCH v3 3/6] spapr_pci: encode class code
From: |
Thomas Huth |
Subject: |
Re: [Qemu-ppc] [Qemu-devel] [PATCH v3 3/6] spapr_pci: encode class code including Prog IF register |
Date: |
Tue, 5 May 2015 16:50:58 +0200 |
On Tue, 5 May 2015 22:55:00 +1000
David Gibson <address@hidden> wrote:
> On Tue, May 05, 2015 at 02:23:53PM +0530, Nikunj A Dadhania wrote:
> > Current code missed the Prog IF register. All Class Code, Subclass,
> > and Prog IF registers are needed to identify the accurate device type.
> >
> > For example: USB controllers use the PROG IF for denoting: USB
> > FullSpeed, HighSpeed or SuperSpeed.
> >
> > Signed-off-by: Nikunj A Dadhania <address@hidden>
>
> Um.. I'm guessing the CLASS_PROG register essentially includes the
> CLASS_DEVICE value? Otherwise it looks like you're losing the
> CLASS_DEVICE value.
>
> For the benefit of those who don't remember the PCI spec from memory,
> can you explain in more detail what the situation is with the several
> class registers and how they overlap / interact.
In the PCI local bus spec, the "Class Code" is a 3-bytes field starting
at offset 9 in the config space. The QEMU defines seem to split this up
into PCI_CLASS_PROG (9) and PCI_CLASS_DEVICE (10), but originally they
belong together.
> > ---
> > hw/ppc/spapr_pci.c | 3 +--
> > 1 file changed, 1 insertion(+), 2 deletions(-)
> >
> > diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c
> > index ea1a092..8b02a3e 100644
> > --- a/hw/ppc/spapr_pci.c
> > +++ b/hw/ppc/spapr_pci.c
> > @@ -899,8 +899,7 @@ static int spapr_populate_pci_child_dt(PCIDevice *dev,
> > void *fdt, int offset,
> > _FDT(fdt_setprop_cell(fdt, offset, "revision-id",
> > pci_default_read_config(dev, PCI_REVISION_ID,
> > 1)));
> > _FDT(fdt_setprop_cell(fdt, offset, "class-code",
> > - pci_default_read_config(dev, PCI_CLASS_DEVICE, 2)
> > - << 8));
> > + pci_default_read_config(dev, PCI_CLASS_PROG,
> > 3)));
> > if (pci_default_read_config(dev, PCI_INTERRUPT_PIN, 1)) {
> > _FDT(fdt_setprop_cell(fdt, offset, "interrupts",
> > pci_default_read_config(dev, PCI_INTERRUPT_PIN, 1)));
>
Patch looks fine to me.
Reviewed-by: Thomas Huth <address@hidden>
- [Qemu-ppc] [PATCH v3 1/6] spapr_pci: remove duplicate macros, (continued)
[Qemu-ppc] [PATCH v3 4/6] spapr_pci: enumerate and add PCI device tree, Nikunj A Dadhania, 2015/05/05
[Qemu-ppc] [PATCH v3 3/6] spapr_pci: encode class code including Prog IF register, Nikunj A Dadhania, 2015/05/05
[Qemu-ppc] [PATCH v3 5/6] spapr_pci: fix boot-time device tree fields for pci hotplug, Nikunj A Dadhania, 2015/05/05
[Qemu-ppc] [PATCH v3 6/6] spapr_pci: populate ibm,loc-code, Nikunj A Dadhania, 2015/05/05
[Qemu-ppc] [PATCH v3 0/6] spapr_pci: DT field fixes and PCI DT node creation in QEMU, Nikunj A Dadhania, 2015/05/05