Laszlo,
Sure I will add the Bugzilla url in the commit message.

Steven,
Could you please check whether this patch can fix your "reconnect -r" hang?

Thanks/Ray

> -----Original Message-----
> From: Laszlo Ersek [mailto:ler...@redhat.com]
> Sent: Tuesday, November 7, 2017 7:23 AM
> To: Ni, Ruiyu <ruiyu...@intel.com>; edk2-devel@lists.01.org
> Cc: Zeng, Star <star.z...@intel.com>; Shi, Steven <steven....@intel.com>
> Subject: Re: [PATCH] PcAtChipsetPkg/IsaAcpiDxe: Restore PCI attributes
> correctly
> 
> Hi Ray,
> 
> On 11/03/17 09:28, Ruiyu Ni wrote:
> > The original code enables some BITs in PCI attributes in Start(), but
> > wrongly to disable these BITs in Stop().
> >
> > The correct behavior is to save the original PCI attributes before
> > enables some BITs in Start(), and restore to original value in Stop().
> >
> > Contributed-under: TianoCore Contribution Agreement 1.1
> > Signed-off-by: Ruiyu Ni <ruiyu...@intel.com>
> > Cc: Star Zeng <star.z...@intel.com>
> > Cc: Laszlo Ersek <ler...@redhat.com>
> > ---
> >  PcAtChipsetPkg/IsaAcpiDxe/PcatIsaAcpi.c | 44
> > +++++++++++++++++----------------
> > PcAtChipsetPkg/IsaAcpiDxe/PcatIsaAcpi.h |  3 ++-
> >  2 files changed, 25 insertions(+), 22 deletions(-)
> 
> Is this for <https://bugzilla.tianocore.org/show_bug.cgi?id=405>?
> 
> If so, can you please add the reference to the commit message?
> 
> Also, I think we should ask Steven to test the patch. (CC'd.)
> 
> I'll try to comment more later.
> 
> Thanks
> Laszlo
> 
> 
> >
> > diff --git a/PcAtChipsetPkg/IsaAcpiDxe/PcatIsaAcpi.c
> > b/PcAtChipsetPkg/IsaAcpiDxe/PcatIsaAcpi.c
> > index 32381b112d..60d2fb5a5b 100644
> > --- a/PcAtChipsetPkg/IsaAcpiDxe/PcatIsaAcpi.c
> > +++ b/PcAtChipsetPkg/IsaAcpiDxe/PcatIsaAcpi.c
> > @@ -172,6 +172,7 @@ PcatIsaAcpiDriverBindingStart (
> >    EFI_PCI_IO_PROTOCOL  *PciIo;
> >    PCAT_ISA_ACPI_DEV    *PcatIsaAcpiDev;
> >    UINT64               Supports;
> > +  UINT64               OriginalAttributes;
> >    BOOLEAN              Enabled;
> >
> >    Enabled = FALSE;
> > @@ -210,9 +211,18 @@ PcatIsaAcpiDriverBindingStart (
> >    if (Supports == 0 || Supports == (EFI_PCI_IO_ATTRIBUTE_ISA_IO |
> EFI_PCI_IO_ATTRIBUTE_ISA_IO_16)) {
> >      Status = EFI_UNSUPPORTED;
> >      goto Done;
> > -  }
> > +  }
> > +
> > +  Status = PciIo->Attributes (
> > +                    PciIo,
> > +                    EfiPciIoAttributeOperationGet,
> > +                    0,
> > +                    &OriginalAttributes
> > +                    );
> > +  if (EFI_ERROR (Status)) {
> > +    goto Done;
> > +  }
> >
> > -  Enabled = TRUE;
> >    Status = PciIo->Attributes (
> >                      PciIo,
> >                      EfiPciIoAttributeOperationEnable, @@ -222,7
> > +232,8 @@ PcatIsaAcpiDriverBindingStart (
> >    if (EFI_ERROR (Status)) {
> >      goto Done;
> >    }
> > -
> > +
> > +  Enabled = TRUE;
> >    //
> >    // Allocate memory for the PCAT ISA ACPI Device structure
> >    //
> > @@ -239,9 +250,10 @@ PcatIsaAcpiDriverBindingStart (
> >    //
> >    // Initialize the PCAT ISA ACPI Device structure
> >    //
> > -  PcatIsaAcpiDev->Signature = PCAT_ISA_ACPI_DEV_SIGNATURE;
> > -  PcatIsaAcpiDev->Handle    = Controller;
> > -  PcatIsaAcpiDev->PciIo     = PciIo;
> > +  PcatIsaAcpiDev->Signature         = PCAT_ISA_ACPI_DEV_SIGNATURE;
> > +  PcatIsaAcpiDev->Handle            = Controller;
> > +  PcatIsaAcpiDev->PciIo             = PciIo;
> > +  PcatIsaAcpiDev->OriginalAttribute = OriginalAttributes;
> >
> >    //
> >    // Initialize PcatIsaAcpiDeviceList @@ -274,8 +286,8 @@ Done:
> >      if (PciIo != NULL && Enabled) {
> >        PciIo->Attributes (
> >                 PciIo,
> > -               EfiPciIoAttributeOperationDisable,
> > -               EFI_PCI_DEVICE_ENABLE | Supports |
> EFI_PCI_IO_ATTRIBUTE_ISA_MOTHERBOARD_IO,
> > +               EfiPciIoAttributeOperationSet,
> > +               OriginalAttributes,
> >                 NULL
> >                 );
> >      }
> > @@ -321,7 +333,6 @@ PcatIsaAcpiDriverBindingStop (
> >    EFI_STATUS             Status;
> >    EFI_ISA_ACPI_PROTOCOL  *IsaAcpi;
> >    PCAT_ISA_ACPI_DEV      *PcatIsaAcpiDev;
> > -  UINT64                 Supports;
> >
> >    //
> >    // Get the ISA ACPI Protocol Interface @@ -348,23 +359,14 @@
> > PcatIsaAcpiDriverBindingStop (
> >    //
> >    Status = PcatIsaAcpiDev->PciIo->Attributes (
> >                                      PcatIsaAcpiDev->PciIo,
> > -                                    EfiPciIoAttributeOperationSupported,
> > -                                    0,
> > -                                    &Supports
> > +                                    EfiPciIoAttributeOperationSet,
> > +                                    PcatIsaAcpiDev->OriginalAttribute,
> > +                                    0
> >                                      );
> >    if (EFI_ERROR (Status)) {
> >      return Status;
> >    }
> >
> > -  Supports &= (UINT64) (EFI_PCI_IO_ATTRIBUTE_ISA_IO |
> > EFI_PCI_IO_ATTRIBUTE_ISA_IO_16);
> > -
> > -  PcatIsaAcpiDev->PciIo->Attributes (
> > -                           PcatIsaAcpiDev->PciIo,
> > -                           EfiPciIoAttributeOperationDisable,
> > -                           EFI_PCI_DEVICE_ENABLE | Supports |
> EFI_PCI_IO_ATTRIBUTE_ISA_MOTHERBOARD_IO,
> > -                           NULL
> > -                           );
> > -
> >    //
> >    // Uninstall protocol interface: EFI_ISA_ACPI_PROTOCOL
> >    //
> > diff --git a/PcAtChipsetPkg/IsaAcpiDxe/PcatIsaAcpi.h
> > b/PcAtChipsetPkg/IsaAcpiDxe/PcatIsaAcpi.h
> > index 0671127644..3ad3a3f313 100644
> > --- a/PcAtChipsetPkg/IsaAcpiDxe/PcatIsaAcpi.h
> > +++ b/PcAtChipsetPkg/IsaAcpiDxe/PcatIsaAcpi.h
> > @@ -1,7 +1,7 @@
> >  /** @file
> >    EFI PCAT ISA ACPI Driver for a Generic PC Platform
> >
> > -Copyright (c) 2006 - 2011, Intel Corporation. All rights
> > reserved.<BR>
> > +Copyright (c) 2006 - 2017, Intel Corporation. All rights
> > +reserved.<BR>
> >  This program and the accompanying materials
> >  are licensed and made available under the terms and conditions of the BSD
> License
> >  which accompanies this distribution.  The full text of the license may be
> found at
> > @@ -43,6 +43,7 @@ typedef struct {
> >    EFI_HANDLE             Handle;
> >    EFI_ISA_ACPI_PROTOCOL  IsaAcpi;
> >    EFI_PCI_IO_PROTOCOL    *PciIo;
> > +  UINT64                 OriginalAttribute;
> >  } PCAT_ISA_ACPI_DEV;
> >
> >  #define PCAT_ISA_ACPI_DEV_FROM_THIS(a) BASE_CR(a,
> PCAT_ISA_ACPI_DEV,
> > IsaAcpi)
> >

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to