[SeaBIOS] [PATCH v15 2/2] patch dsdt to use passed-in pvpanic ioport

Hu Tao hutao at cn.fujitsu.com
Thu Mar 21 10:17:11 CET 2013


On Thu, Mar 21, 2013 at 10:11:54AM +0100, Paolo Bonzini wrote:
> Il 21/03/2013 10:08, Hu Tao ha scritto:
> > Signed-off-by: Hu Tao <hutao at cn.fujitsu.com>
> > ---
> >  src/acpi-dsdt-isa.dsl | 14 ++++++++++++--
> >  src/acpi.c            |  9 +++++++++
> >  2 files changed, 21 insertions(+), 2 deletions(-)
> > 
> > diff --git a/src/acpi-dsdt-isa.dsl b/src/acpi-dsdt-isa.dsl
> > index 87a31b9..43fe719 100644
> > --- a/src/acpi-dsdt-isa.dsl
> > +++ b/src/acpi-dsdt-isa.dsl
> > @@ -102,7 +102,9 @@ Scope(\_SB.PCI0.ISA) {
> >  
> >      Device(PEVT) {
> >          Name(_HID, "QEMU0001")
> > -        OperationRegion(PEOR, SystemIO, 0x0505, 0x01)
> > +        ACPI_EXTRACT_NAME_WORD_CONST dsdt_isa_pest
> > +        Name(PEST, 0x505)
> > +        OperationRegion(PEOR, SystemIO, PEST, 0x01)
> >          Field(PEOR, ByteAcc, NoLock, Preserve) {
> >              PEPT,   8,
> >          }
> > @@ -126,7 +128,15 @@ Scope(\_SB.PCI0.ISA) {
> >          }
> >  
> >          Name(_CRS, ResourceTemplate() {
> > -            IO(Decode16, 0x0505, 0x0505, 0x01, 0x01)
> > +            IO(Decode16, 0x0505, 0x0505, 0x01, 0x01, IO)
> >          })
> > +
> > +        CreateWordField(_CRS, IO._MIN, IOMN)
> > +        CreateWordField(_CRS, IO._MAX, IOMX)
> > +
> > +        Method(_INI, 0, NotSerialized) {
> > +            Store(PEST, IOMN)
> > +            Store(PEST, IOMX)
> > +        }
> >      }
> >  }
> > diff --git a/src/acpi.c b/src/acpi.c
> > index 119d1c1..42fa06e 100644
> > --- a/src/acpi.c
> > +++ b/src/acpi.c
> > @@ -286,11 +286,20 @@ static const struct pci_device_id fadt_init_tbl[] = {
> >      PCI_DEVICE_END
> >  };
> >  
> > +static void patch_dsdt(void *dsdt)
> > +{
> > +    u8 *dsdt_ptr = dsdt;
> > +    int pvpanic_port = romfile_loadint("etc/pvpanic-port", 0x505);
> 
> The default must be 0.
> 
> Also, here:
> 
> 
> +
> +        Method(_STA, 0, NotSerialized) {
> +            Store(PEPT, Local0)
> +            If (LEqual(Local0, Zero)) {
> +                Return (0x00)
> +            } Else {
> +                Return (0x0F)
> +            }
> +        }
> +
> 
> You must change it to look at PEST instead of PEPT (i.e. do not probe,
> just see if you have a meaningful address).
> 
> Just squash the patches, it's simpler that way probably.

I forgot to add RFC to the title. This patch doesn't work for q35 with
custom ioport.

> 
> Paolo
> 
> > +    *(u16 *)(dsdt_ptr + *dsdt_isa_pest) = pvpanic_port;
> > +}
> > +
> >  static void fill_dsdt(struct fadt_descriptor_rev1 *fadt, void *dsdt)
> >  {
> >      if (fadt->dsdt) {
> >          free((void *)le32_to_cpu(fadt->dsdt));
> >      }
> > +    patch_dsdt(dsdt);
> >      fadt->dsdt = cpu_to_le32((u32)dsdt);
> >      fadt->checksum -= checksum(fadt, sizeof(*fadt));
> >      dprintf(1, "ACPI DSDT=%p\n", dsdt);
> > 



More information about the SeaBIOS mailing list