在 7/25/2018 6:51 PM, Ard Biesheuvel 写道:
> On 13 July 2018 at 10:15, Ming Huang <ming.hu...@linaro.org> wrote:
>> Fix the issue of onboard Nic not work kerenl with AMD GPU and
>> NVME SSD in board. The GPU don't support 64 MSI, so need to
>> allocate INTx, but the default interrupt number 255 is invalid,
>> so Change all the PCI Device interrupt number to 0.
>>
>> Contributed-under: TianoCore Contribution Agreement 1.1
>> Signed-off-by: Ming Huang <ming.hu...@linaro.org>
>> Signed-off-by: Heyi Guo <heyi....@linaro.org>
> 
> I don't understand why this issue is specific to this platform.
> 
> Can you explain in more detail what the failure mode is, and why
> setting the PCI interrupt line is necessary here, while it doesn't
> seem to be on other platforms, even when falling back to INTx
> interrupts?
> 

I don't know exactly why setting the PCI interrupt line is necessary in uefi.
This issue is analyzed by kernel guy DongDong.Liu.

@DongDong,
Can you explain the questions?

Thanks.

>> ---
>>  Platform/Hisilicon/D05/D05.dsc                                     |  1 +
>>  Platform/Hisilicon/D05/D05.fdf                                     |  1 +
>>  Platform/Hisilicon/D05/Drivers/PlatformMiscDxe/PlatformMiscDxe.c   | 99 
>> ++++++++++++++++++++
>>  Platform/Hisilicon/D05/Drivers/PlatformMiscDxe/PlatformMiscDxe.inf | 47 
>> ++++++++++
>>  4 files changed, 148 insertions(+)
>>
>> diff --git a/Platform/Hisilicon/D05/D05.dsc b/Platform/Hisilicon/D05/D05.dsc
>> index b6e1a9d98a..0e6d5912a0 100644
>> --- a/Platform/Hisilicon/D05/D05.dsc
>> +++ b/Platform/Hisilicon/D05/D05.dsc
>> @@ -629,6 +629,7 @@
>>
>>
>>    
>> Silicon/Hisilicon/Drivers/Smbios/ProcessorSubClassDxe/ProcessorSubClassDxe.inf
>> +  Platform/Hisilicon/D05/Drivers/PlatformMiscDxe/PlatformMiscDxe.inf
>>
>>    #
>>    # Memory test
>> diff --git a/Platform/Hisilicon/D05/D05.fdf b/Platform/Hisilicon/D05/D05.fdf
>> index 4503776d63..61e8d907f9 100644
>> --- a/Platform/Hisilicon/D05/D05.fdf
>> +++ b/Platform/Hisilicon/D05/D05.fdf
>> @@ -354,6 +354,7 @@ READ_LOCK_STATUS   = TRUE
>>    INF MdeModulePkg/Universal/PCD/Pei/Pcd.inf
>>    INF IntelFrameworkModulePkg/Universal/StatusCode/Pei/StatusCodePei.inf
>>    INF Platform/Hisilicon/D05/EarlyConfigPeim/EarlyConfigPeimD05.inf
>> +  INF Platform/Hisilicon/D05/Drivers/PlatformMiscDxe/PlatformMiscDxe.inf
>>
>>    INF MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf
>>
>> diff --git 
>> a/Platform/Hisilicon/D05/Drivers/PlatformMiscDxe/PlatformMiscDxe.c 
>> b/Platform/Hisilicon/D05/Drivers/PlatformMiscDxe/PlatformMiscDxe.c
>> new file mode 100644
>> index 0000000000..8519b7139d
>> --- /dev/null
>> +++ b/Platform/Hisilicon/D05/Drivers/PlatformMiscDxe/PlatformMiscDxe.c
>> @@ -0,0 +1,99 @@
>> +/** @file
>> +*
>> +*  Copyright (c) 2018, Hisilicon Limited. All rights reserved.
>> +*  Copyright (c) 2016, Linaro Limited. All rights reserved.
>> +*
>> +*  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
>> +*  http://opensource.org/licenses/bsd-license.php
>> +*
>> +*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
>> +*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR 
>> IMPLIED.
>> +*
>> +**/
>> +
>> +#include <Uefi.h>
>> +#include <IndustryStandard/Pci.h>
>> +#include <Library/DebugLib.h>
>> +#include <Library/UefiBootServicesTableLib.h>
>> +#include <Protocol/PciIo.h>
>> +
>> +VOID
>> +SetIntLine (
>> +  )
>> +{
>> +  EFI_STATUS                         Status;
>> +  UINTN                              HandleIndex;
>> +  EFI_HANDLE                         *HandleBuffer;
>> +  UINTN                              HandleCount;
>> +  EFI_PCI_IO_PROTOCOL                *PciIo;
>> +  UINT8                              INTLine;
>> +  UINTN                              Segment;
>> +  UINTN                              Bus;
>> +  UINTN                              Device;
>> +  UINTN                              Fun;
>> +
>> +  Status = gBS->LocateHandleBuffer (
>> +                  ByProtocol,
>> +                  &gEfiPciIoProtocolGuid,
>> +                  NULL,
>> +                  &HandleCount,
>> +                  &HandleBuffer
>> +                  );
>> +  if (EFI_ERROR (Status)) {
>> +      DEBUG  ((DEBUG_ERROR, " Locate gEfiPciIoProtocol Failed.\n"));
>> +      gBS->FreePool ((VOID *)HandleBuffer);
>> +      return;
>> +  }
>> +
>> +  for (HandleIndex = 0; HandleIndex < HandleCount; HandleIndex++) {
>> +      Status = gBS->HandleProtocol (
>> +                      HandleBuffer[HandleIndex],
>> +                      &gEfiPciIoProtocolGuid,
>> +                      (VOID **)&PciIo
>> +                      );
>> +      if (EFI_ERROR (Status)) {
>> +          continue;
>> +      }
>> +
>> +      INTLine = 0;
>> +      (VOID)PciIo->Pci.Write (
>> +                         PciIo,
>> +                         EfiPciIoWidthUint8,
>> +                         PCI_INT_LINE_OFFSET,
>> +                         1,
>> +                         &INTLine);
>> +      (VOID)PciIo->GetLocation (PciIo, &Segment, &Bus, &Device, &Fun);
>> +      DEBUG ((DEBUG_INFO, "Set BDF(%x-%x-%x) IntLine to 0\n", Bus, Device, 
>> Fun));
>> +  }
>> +
>> +  gBS->FreePool ((VOID *)HandleBuffer);
>> +  return;
>> +}
>> +
>> +EFI_STATUS
>> +EFIAPI
>> +PlatformMiscDxeEntry (
>> +  IN EFI_HANDLE           ImageHandle,
>> +  IN EFI_SYSTEM_TABLE     *SystemTable
>> +  )
>> +{
>> +  EFI_STATUS  Status;
>> +  EFI_EVENT   Event;
>> +
>> +  Status = gBS->CreateEventEx (
>> +                  EVT_NOTIFY_SIGNAL,
>> +                  TPL_CALLBACK,
>> +                  SetIntLine,
>> +                  NULL,
>> +                  &gEfiEventReadyToBootGuid,
>> +                  &Event
>> +                  );
>> +  if (EFI_ERROR (Status)) {
>> +    DEBUG ((DEBUG_ERROR, "Create event for SetIntLine, %r!\n", Status));
>> +  }
>> +
>> +  return EFI_SUCCESS;
>> +}
>> +
>> diff --git 
>> a/Platform/Hisilicon/D05/Drivers/PlatformMiscDxe/PlatformMiscDxe.inf 
>> b/Platform/Hisilicon/D05/Drivers/PlatformMiscDxe/PlatformMiscDxe.inf
>> new file mode 100644
>> index 0000000000..0b365e7a53
>> --- /dev/null
>> +++ b/Platform/Hisilicon/D05/Drivers/PlatformMiscDxe/PlatformMiscDxe.inf
>> @@ -0,0 +1,47 @@
>> +#/** @file
>> +#
>> +#    Copyright (c) 2018, Hisilicon Limited. All rights reserved.
>> +#    Copyright (c) 2016, Linaro Limited. All rights reserved.
>> +#
>> +#    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
>> +#    http://opensource.org/licenses/bsd-license.php
>> +#
>> +#    THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
>> +#    WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR 
>> IMPLIED.
>> +#
>> +#**/
>> +
>> +[Defines]
>> +  INF_VERSION                    = 0x0001001A
>> +  BASE_NAME                      = PlatformMiscDxe
>> +  FILE_GUID                      = a48f7a09-253f-468b-87c6-caf78baf47bb
>> +  MODULE_TYPE                    = DXE_DRIVER
>> +  VERSION_STRING                 = 1.0
>> +  ENTRY_POINT                    = PlatformMiscDxeEntry
>> +
>> +[Sources.common]
>> +  PlatformMiscDxe.c
>> +
>> +[Packages]
>> +  MdeModulePkg/MdeModulePkg.dec
>> +  MdePkg/MdePkg.dec
>> +  Silicon/Hisilicon/HisiPkg.dec
>> +
>> +[Guids]
>> +  gEfiEventReadyToBootGuid
>> +
>> +[Protocols]
>> +  gEfiPciIoProtocolGuid
>> +
>> +[LibraryClasses]
>> +  BaseLib
>> +  DebugLib
>> +  UefiBootServicesTableLib
>> +  UefiDriverEntryPoint
>> +
>> +[FixedPcd]
>> +
>> +[Depex]
>> +  TRUE
>> --
>> 2.17.0
>>
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to