qemu-ppc
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-ppc] [Qemu-devel] [PATCH v4 for-2.3 13/25] hw/acpi: remove fro


From: Michael S. Tsirkin
Subject: Re: [Qemu-ppc] [Qemu-devel] [PATCH v4 for-2.3 13/25] hw/acpi: remove from root bus 0 the crs resources used by other busses.
Date: Sun, 8 Mar 2015 19:34:34 +0100

On Sun, Mar 08, 2015 at 12:13:40PM -0400, Kevin O'Connor wrote:
> On Sun, Mar 08, 2015 at 01:16:15PM +0200, Marcel Apfelbaum wrote:
> > If multiple root busses are used, root bus 0 cannot use all the
> > pci holes ranges. Remove the IO/mem ranges used by the other
> > primary busses.
> [...]
> > -    aml_append(crs,
> > -        aml_word_io(aml_min_fixed, aml_max_fixed,
> > -                    aml_pos_decode, aml_entire_range,
> > -                    0x0000, 0x0D00, 0xFFFF, 0x0000, 0xF300));
> > +
> > +    /* prepare PCI IO ranges */
> > +    range.base = 0x0D00;
> > +    range.limit = 0xFFFF;
> > +    if (QLIST_EMPTY(&io_ranges)) {
> > +        aml_append(crs,
> > +            aml_word_io(aml_min_fixed, aml_max_fixed,
> > +                        aml_pos_decode, aml_entire_range,
> > +                        0x0000, range.base, range.limit,
> > +                        0x0000, range.limit - range.base + 1));
> > +    } else {
> > +        QLIST_FOREACH(entry, &io_ranges, entry) {
> > +            if (range.base < entry->base) {
> > +                aml_append(crs,
> > +                    aml_word_io(aml_min_fixed, aml_max_fixed,
> > +                                aml_pos_decode, aml_entire_range,
> > +                                0x0000, range.base, entry->base - 1,
> > +                                0x0000, entry->base - range.base));
> > +            }
> > +            range.base = entry->limit + 1;
> > +            if (!QLIST_NEXT(entry, entry)) {
> > +                aml_append(crs,
> > +                    aml_word_io(aml_min_fixed, aml_max_fixed,
> > +                                aml_pos_decode, aml_entire_range,
> > +                                0x0000, range.base, range.limit,
> > +                                0x0000, range.limit - range.base + 1));
> > +            }
> > +        }
> > +    }
> 
> If I read this correctly, it looks like a machine with two root buses
> and 20 devices, each with one memory range and one io range, would end
> up with 40 CRS ranges (ie, a CRS range for every resource).

I think that's only if you stick multiple devices directly behind the
bridge.  Looks like with a single pci bridge behind root, there will
only be 2 ranges.

Maybe try to enforce this sane topology?

> It also
> looks like this furthers the requirement that the guest firmware
> assign the PCI resources prior to QEMU being able to generate the ACPI
> tables.

That seems unavoidable unless we want to assign ranges from
hardware/management.
Which I think would be a mistake: management doesn't really know,
or care.

> 
> -Kevin



reply via email to

[Prev in Thread] Current Thread [Next in Thread]