From: "Leif Lindholm" <leif@nuviainc.com>
To: Ard Biesheuvel <ard.biesheuvel@arm.com>
Cc: devel@edk2.groups.io, philmd@redhat.com
Subject: Re: [PATCH edk2-platforms v2 5/7] Platform/RaspberryPi4: Register GENET platform device protocol
Date: Tue, 12 May 2020 15:34:24 +0100 [thread overview]
Message-ID: <20200512143424.GH21486@vanye> (raw)
In-Reply-To: <20200512075512.12645-6-ard.biesheuvel@arm.com>
On Tue, May 12, 2020 at 09:55:10 +0200, Ard Biesheuvel wrote:
> Register an event at EndOfDxe to instantiate the EFI device path protocol
> with the GENET MAC address on a new handle, and install the
> BcmGenetPlatformDeviceProtocol on that handle. This protocol is used to
> pass platform information (GENET MAC address and register base address)
> to the GENET driver, which will consume this in its implementation of the
> UEFI driver model Supported/Start/Stop methods.
>
> Co-authored-by: Samer El-Haj-Mahmoud <samer.el-haj-mahmoud@arm.com>
> Co-authored-by: Ard Biesheuvel <ard.biesheuvel@arm.com>
> Co-authored-by: Andrei Warkentin <awarkentin@vmware.com>
> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@arm.com>
> ---
> Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.inf | 29 ++++--
> Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.c | 108 ++++++++++++++++++--
> 2 files changed, 117 insertions(+), 20 deletions(-)
>
> diff --git a/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.inf b/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.inf
> index e47f3af69199..f20f3bcc1243 100644
> --- a/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.inf
> +++ b/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.inf
> @@ -1,6 +1,8 @@
> #/** @file
> #
> -# Copyright (c) 2019, ARM Limited. All rights reserved.
> +# Component description file for the RasbperryPi DXE platform config driver.
> +#
> +# Copyright (c) 2019 - 2020, ARM Limited. All rights reserved.
> # Copyright (c) 2018, Andrei Warkentin <andrey.warkentin@gmail.com>
> #
> # SPDX-License-Identifier: BSD-2-Clause-Patent
> @@ -21,7 +23,6 @@ [Defines]
> #
> # VALID_ARCHITECTURES = AARCH64
> #
> -
> [Sources]
> ConfigDxe.c
> ConfigDxeFormSetGuid.h
> @@ -31,31 +32,36 @@ [Sources]
> [Packages]
> ArmPkg/ArmPkg.dec
> ArmPlatformPkg/ArmPlatformPkg.dec
> - MdePkg/MdePkg.dec
> + EmbeddedPkg/EmbeddedPkg.dec
> MdeModulePkg/MdeModulePkg.dec
> + MdePkg/MdePkg.dec
> + NetworkPkg/NetworkPkg.dec
> + Platform/RaspberryPi/RaspberryPi.dec
> Silicon/Broadcom/Bcm27xx/Bcm27xx.dec
> Silicon/Broadcom/Bcm283x/Bcm283x.dec
> - Platform/RaspberryPi/RaspberryPi.dec
> - EmbeddedPkg/EmbeddedPkg.dec
> + Silicon/Broadcom/Drivers/Net/BcmNet.dec
>
> [LibraryClasses]
> + AcpiLib
> BaseLib
> DebugLib
> DxeServicesTableLib
> + GpioLib
> + HiiLib
> + NetLib
> PcdLib
> UefiBootServicesTableLib
> - UefiRuntimeServicesTableLib
> UefiDriverEntryPoint
> - HiiLib
> - GpioLib
> - AcpiLib
> + UefiRuntimeServicesTableLib
The cleanup is good, but could we separate functional and
non-functional changes into separate patches?
>
> [Guids]
> gConfigDxeFormSetGuid
> + gEfiEndOfDxeEventGroupGuid
>
> [Protocols]
> - gRaspberryPiFirmwareProtocolGuid ## CONSUMES
> - gRaspberryPiConfigAppliedProtocolGuid ## PRODUCES
> + gBcmGenetPlatformDeviceProtocolGuid ## PRODUCES
> + gRaspberryPiFirmwareProtocolGuid ## CONSUMES
> + gRaspberryPiConfigAppliedProtocolGuid ## PRODUCES
>
> [FixedPcd]
> gRaspberryPiTokenSpaceGuid.PcdCpuLowSpeedMHz
> @@ -64,6 +70,7 @@ [FixedPcd]
>
> [Pcd]
> gBcm27xxTokenSpaceGuid.PcdBcm27xxRegistersAddress
> + gBcm27xxTokenSpaceGuid.PcdBcmGenetRegistersAddress
> gBcm283xTokenSpaceGuid.PcdBcm283xRegistersAddress
> gRaspberryPiTokenSpaceGuid.PcdCpuClock
> gRaspberryPiTokenSpaceGuid.PcdCustomCpuClock
> diff --git a/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.c b/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.c
> index 00867879da20..47ca0a89a3d8 100644
> --- a/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.c
> +++ b/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.c
> @@ -1,6 +1,6 @@
> /** @file
> *
> - * Copyright (c) 2019, ARM Limited. All rights reserved.
> + * Copyright (c) 2019 - 2020, ARM Limited. All rights reserved.
> * Copyright (c) 2018 - 2019, Andrei Warkentin <andrey.warkentin@gmail.com>
> *
> * SPDX-License-Identifier: BSD-2-Clause-Patent
> @@ -8,19 +8,21 @@
> **/
>
> #include <Uefi.h>
> +#include <IndustryStandard/Bcm2711.h>
> +#include <IndustryStandard/Bcm2836.h>
> +#include <IndustryStandard/Bcm2836Gpio.h>
> +#include <IndustryStandard/RpiMbox.h>
> #include <Library/AcpiLib.h>
> -#include <Library/HiiLib.h>
> #include <Library/DebugLib.h>
> +#include <Library/DevicePathLib.h>
> #include <Library/DxeServicesTableLib.h>
> +#include <Library/GpioLib.h>
> +#include <Library/HiiLib.h>
> #include <Library/IoLib.h>
> +#include <Library/NetLib.h>
> #include <Library/UefiBootServicesTableLib.h>
> #include <Library/UefiRuntimeServicesTableLib.h>
> -#include <Library/DevicePathLib.h>
> -#include <IndustryStandard/RpiMbox.h>
> -#include <IndustryStandard/Bcm2711.h>
> -#include <IndustryStandard/Bcm2836.h>
> -#include <IndustryStandard/Bcm2836Gpio.h>
> -#include <Library/GpioLib.h>
> +#include <Protocol/BcmGenetPlatformDevice.h>
> #include <Protocol/RpiFirmware.h>
> #include <ConfigVars.h>
> #include "ConfigDxeFormSetGuid.h"
> @@ -34,6 +36,8 @@ STATIC RASPBERRY_PI_FIRMWARE_PROTOCOL *mFwProtocol;
> STATIC UINT32 mModelFamily = 0;
> STATIC UINT32 mModelInstalledMB = 0;
>
> +STATIC EFI_MAC_ADDRESS MacAddress;
m-prefix on global variable?
/
Leif
> +
> /*
> * The GUID inside Platform/RaspberryPi/RPi3/AcpiTables/AcpiTables.inf and
> * Platform/RaspberryPi/RPi4/AcpiTables/AcpiTables.inf _must_ match below.
> @@ -47,6 +51,18 @@ typedef struct {
> EFI_DEVICE_PATH_PROTOCOL End;
> } HII_VENDOR_DEVICE_PATH;
>
> +#pragma pack (1)
> +typedef struct {
> + MAC_ADDR_DEVICE_PATH MacAddrDP;
> + EFI_DEVICE_PATH_PROTOCOL End;
> +} GENET_DEVICE_PATH;
> +
> +typedef struct {
> + GENET_DEVICE_PATH DevicePath;
> + BCM_GENET_PLATFORM_DEVICE_PROTOCOL PlatformDevice;
> +} GENET_DEVICE;
> +#pragma pack ()
> +
> STATIC HII_VENDOR_DEVICE_PATH mVendorDevicePath = {
> {
> {
> @@ -69,6 +85,65 @@ STATIC HII_VENDOR_DEVICE_PATH mVendorDevicePath = {
> }
> };
>
> +STATIC GENET_DEVICE mGenetDevice = {
> + {
> + {
> + {
> + MESSAGING_DEVICE_PATH,
> + MSG_MAC_ADDR_DP,
> + {
> + (UINT8)(sizeof (MAC_ADDR_DEVICE_PATH)),
> + (UINT8)((sizeof (MAC_ADDR_DEVICE_PATH)) >> 8)
> + }
> + },
> + {{ 0 }},
> + NET_IFTYPE_ETHERNET
> + },
> + {
> + END_DEVICE_PATH_TYPE,
> + END_ENTIRE_DEVICE_PATH_SUBTYPE,
> + {
> + sizeof (EFI_DEVICE_PATH_PROTOCOL),
> + 0
> + }
> + }
> + },
> + {
> + GENET_BASE_ADDRESS,
> + {{ 0 }}
> + }
> +};
> +
> +
> +STATIC
> +VOID
> +EFIAPI
> +RegisterDevices (
> + EFI_EVENT Event,
> + VOID *Context
> + )
> +{
> + EFI_HANDLE Handle;
> + EFI_STATUS Status;
> +
> + if (mModelFamily == 4) {
> + DEBUG ((DEBUG_INFO, "GENET: MAC address %02X:%02X:%02X:%02X:%02X:%02X\n",
> + MacAddress.Addr[0], MacAddress.Addr[1], MacAddress.Addr[2],
> + MacAddress.Addr[3], MacAddress.Addr[4], MacAddress.Addr[5]));
> +
> + CopyMem (&mGenetDevice.DevicePath.MacAddrDP.MacAddress, MacAddress.Addr,
> + NET_ETHER_ADDR_LEN);
> + CopyMem (&mGenetDevice.PlatformDevice.MacAddress, MacAddress.Addr,
> + NET_ETHER_ADDR_LEN);
> +
> + Handle = NULL;
> + Status = gBS->InstallMultipleProtocolInterfaces (&Handle,
> + &gEfiDevicePathProtocolGuid, &mGenetDevice.DevicePath,
> + &gBcmGenetPlatformDeviceProtocolGuid, &mGenetDevice.PlatformDevice,
> + NULL);
> + ASSERT_EFI_ERROR (Status);
> + }
> +}
>
> STATIC EFI_STATUS
> InstallHiiPages (
> @@ -242,6 +317,16 @@ SetupVariables (
> PcdSet32 (PcdDisplayEnableSShot, PcdGet32 (PcdDisplayEnableSShot));
> }
>
> + if (mModelFamily == 4) {
> + //
> + // Get the MAC address from the firmware.
> + //
> + Status = mFwProtocol->GetMacAddress (MacAddress.Addr);
> + if (EFI_ERROR (Status)) {
> + DEBUG ((DEBUG_WARN, "%a: failed to retrieve MAC address\n", __FUNCTION__));
> + }
> + }
> +
> return EFI_SUCCESS;
> }
>
> @@ -448,7 +533,8 @@ ConfigInitialize (
> IN EFI_SYSTEM_TABLE *SystemTable
> )
> {
> - EFI_STATUS Status;
> + EFI_STATUS Status;
> + EFI_EVENT EndOfDxeEvent;
>
> Status = gBS->LocateProtocol (&gRaspberryPiFirmwareProtocolGuid,
> NULL, (VOID**)&mFwProtocol);
> @@ -494,5 +580,9 @@ ConfigInitialize (
> ASSERT_EFI_ERROR (Status);
> }
>
> + Status = gBS->CreateEventEx (EVT_NOTIFY_SIGNAL, TPL_NOTIFY, RegisterDevices,
> + NULL, &gEfiEndOfDxeEventGroupGuid, &EndOfDxeEvent);
> + ASSERT_EFI_ERROR (Status);
> +
> return EFI_SUCCESS;
> }
> --
> 2.17.1
>
next prev parent reply other threads:[~2020-05-12 14:34 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-12 7:55 [PATCH edk2-platforms v2 0/7] Add Broadcom GENET driver for RPi4 Ard Biesheuvel
2020-05-12 7:55 ` [PATCH edk2-platforms v2 1/7] Platform/RaspberryPi4: set DMA translation for BCM Genet driver Ard Biesheuvel
2020-05-12 7:55 ` [PATCH edk2-platforms v2 2/7] Silicon/Broadcom: Add BcmGenetPlatformDevice protocol Ard Biesheuvel
2020-05-12 7:55 ` [PATCH edk2-platforms v2 3/7] Silicon/Broadcom/BcmGenetDxe: Add GENET driver Ard Biesheuvel
2020-05-12 14:31 ` [edk2-devel] " Leif Lindholm
2020-05-12 7:55 ` [PATCH edk2-platforms v2 4/7] Platform/RaspberryPi4: Clean up PCDs out of the " Ard Biesheuvel
2020-05-12 7:55 ` [PATCH edk2-platforms v2 5/7] Platform/RaspberryPi4: Register GENET platform device protocol Ard Biesheuvel
2020-05-12 14:34 ` Leif Lindholm [this message]
2020-05-12 7:55 ` [PATCH edk2-platforms v2 6/7] Platform/RaspberryPi4: Remove PlatformPcdLib Ard Biesheuvel
2020-05-12 7:55 ` [PATCH edk2-platforms v2 7/7] Platform/RaspberryPi4: remove ASIX 88772b driver Ard Biesheuvel
2020-05-12 8:26 ` [PATCH edk2-platforms v2 0/7] Add Broadcom GENET driver for RPi4 Ard Biesheuvel
2020-05-12 14:28 ` Ard Biesheuvel
2020-05-12 14:35 ` Leif Lindholm
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200512143424.GH21486@vanye \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox