From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wr1-f68.google.com (mail-wr1-f68.google.com [209.85.221.68]) by mx.groups.io with SMTP id smtpd.web09.7660.1579787062676880464 for ; Thu, 23 Jan 2020 05:44:23 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@linaro.org header.s=google header.b=rsVymEPZ; spf=pass (domain: linaro.org, ip: 209.85.221.68, mailfrom: ard.biesheuvel@linaro.org) Received: by mail-wr1-f68.google.com with SMTP id w15so3147539wru.4 for ; Thu, 23 Jan 2020 05:44:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=0mwU52H/5If/FmpC8YqvNtSNQKHWhZr2+0GhT+00HrU=; b=rsVymEPZqNEdJaL+lbZ0X8s4B5fq/vzk96OdVFzQ9fhYfnV9EGK4iTPl6Ih7lqF/li fPg8VE+qEPD1h3vPhdeT+tDZPbDoZtSDnAIJRMnqh0yG6RnWMbbvI9Eh62veXy+TO6f4 c76iNTyO+z3R7oG6pPhyBvW3vVpjSmz7WyB81/mj4Dk8qkKOexEUD3hcPtx9y3uhI/8U NllW4FrIFsOzYsneJ1lDLjFn4dfkvFEPTdFD0Kbe84driWTpgJ6eB5nC9hKdLyZpiiGB xf7/NMeufWMZEUCcJJGCbhs4XZrq3bT7NcptJwEdycfK/yERixXLhKcyO/C6LkYj4j9W 4yRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=0mwU52H/5If/FmpC8YqvNtSNQKHWhZr2+0GhT+00HrU=; b=Ec2Qcivvqfx+LMtuVfh7xWSEr1s03fYaD6YYzXvrJhkpSY7r82xPvIUi4PViMhxcC/ ZyplgLAVaL07aGpknXpkMcx/r/eD3k1trfrb5/S556NnUzeOYYiCyoO6j8+aPYrapAus 0YmFskPyVa0xTuL6W9HHCPJCIZWmVwY482y79eRwgcxQHBmijl+OM9Xc+qKsowgjzIWI 6PGYUrrm78kseu/gmwhcPAUopehTqwHea/7hhZ+EfmdNYIsMQ5A5BGSovNNHvQeBfy+C uZZ8d8Ce4eMGuP97eeyfZ/QliymjImdVzCVFwsGh/qeVnh2UaL5gvigoHfjTg3L+5xwK vqqQ== X-Gm-Message-State: APjAAAVpajGelLj5xPZvybJ7RadBtNr5Y9Ci37x5fHPB+FEm0Dj5NewE v5FmftTgaYxEIqihRsJz7wDtcoGxf2ADHdnaFFCBRg== X-Google-Smtp-Source: APXvYqxFhkXt1NbgHZZVo+ANa/nuglISrJTeXQ6eL07obgifbxy9Qpr2Sm8qSmLQMk1LF+BIhSOWnTehnu4jgugYS4E= X-Received: by 2002:a5d:4d0e:: with SMTP id z14mr17910492wrt.208.1579787061073; Thu, 23 Jan 2020 05:44:21 -0800 (PST) MIME-Version: 1.0 References: <20200123120007.4784-1-pete@akeo.ie> <20200123120007.4784-2-pete@akeo.ie> In-Reply-To: <20200123120007.4784-2-pete@akeo.ie> From: "Ard Biesheuvel" Date: Thu, 23 Jan 2020 14:44:10 +0100 Message-ID: Subject: Re: [edk2-platforms][PATCH 1/3] Silicon/Broadcom/Net: Add Genet stub driver to setup MAC To: Pete Batard Cc: edk2-devel-groups-io , Leif Lindholm , =?UTF-8?Q?Philippe_Mathieu=2DDaud=C3=A9?= , Jeremy Linton Content-Type: text/plain; charset="UTF-8" On Thu, 23 Jan 2020 at 13:00, Pete Batard wrote: > > From: Jeremy Linton > > Add a stub for the Broadcom Genet network interface, that is used > by the Raspberry Pi 4 (and that may be used by other platforms). > > For the time being, the stub only performs UMAC init, using a MAC > address PCD, as, even without a working network interface in UEFI > environment, it is desirable if the hardware can describe itself > for booting in an ACPI environment, rather than pass parameters via > DSDT/DSD . > > Signed-off-by: Pete Batard > --- > Silicon/Broadcom/Drivers/Net/BcmGenetDxe/BcmGenetDxe.inf | 40 +++++++ > Silicon/Broadcom/Drivers/Net/BcmGenetDxe/Genet.c | 114 ++++++++++++++++++++ > Silicon/Broadcom/Drivers/Net/BcmGenetDxe/Genet.h | 20 ++++ > Silicon/Broadcom/Drivers/Net/BcmNet.dec | 22 ++++ > 4 files changed, 196 insertions(+) > > diff --git a/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/BcmGenetDxe.inf b/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/BcmGenetDxe.inf > new file mode 100644 > index 000000000000..9e9301608f24 > --- /dev/null > +++ b/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/BcmGenetDxe.inf > @@ -0,0 +1,40 @@ > +## @file > +# > +# Copyright (c) 2020, Jeremy Linton All rights reserved.
> +# > +# SPDX-License-Identifier: BSD-2-Clause-Patent > +# > +## > + > +[Defines] > + INF_VERSION = 0x0001001A > + BASE_NAME = BcmGenetDxe > + FILE_GUID = e2b1eaf3-50b7-4ae1-b79e-ec8020cb57ac > + MODULE_TYPE = DXE_DRIVER > + VERSION_STRING = 0.1 > + ENTRY_POINT = GenetEntryPoint > + > +[Sources] > + Genet.c > + > +[Packages] > + ArmPkg/ArmPkg.dec > + MdeModulePkg/MdeModulePkg.dec > + MdePkg/MdePkg.dec > + Silicon/Broadcom/Drivers/Net/BcmNet.dec > + > +[LibraryClasses] > + ArmLib > + BaseLib > + IoLib > + UefiDriverEntryPoint > + UefiLib > + > +[FixedPcd] > + gBcmNetTokenSpaceGuid.PcdBcmGenetRegistersAddress > + > +[Pcd] > + gBcmNetTokenSpaceGuid.PcdBcmGenetMacAddress > + > +[Depex] > + TRUE > diff --git a/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/Genet.c b/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/Genet.c > new file mode 100644 > index 000000000000..d135d889cc1f > --- /dev/null > +++ b/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/Genet.c > @@ -0,0 +1,114 @@ > +/** @file > + > + Copyright (c) 2020, Jeremy Linton All rights reserved.
> + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > + This driver acts like a stub to set the Broadcom > + Genet MAC address, until the actual network driver > + is in place. > + > +**/ > + > +#include > +#include > +#include > +#include > +#include > +#include > + > +#include > +#include > + > +STATIC > +VOID > +RMWRegister ( > + UINT32 Offset, > + UINT32 Mask, > + UINT32 In > + ) > +{ > + EFI_PHYSICAL_ADDRESS Addr; > + UINT32 Data; > + UINT32 Shift; > + > + Addr = GENET_BASE_ADDRESS + Offset; > + Data = 0; > + Shift = 1; > + if (In) { > + while (!(Mask & Shift)) > + Shift <<= 1; > + Data = (MmioRead32 (Addr) & ~Mask) | ((In * Shift) & Mask); > + } else { > + Data = MmioRead32 (Addr) & ~Mask; > + } > + > + MmioWrite32 (Addr, Data); > + > + ArmDataMemoryBarrier (); > +} > + > +STATIC > +VOID > +WdRegister ( > + UINT32 Offset, > + UINT32 In > + ) > +{ > + EFI_PHYSICAL_ADDRESS Base = GENET_BASE_ADDRESS; > + > + MmioWrite32 (Base + Offset, In); > + > + ArmDataMemoryBarrier (); > +} > + > +STATIC > +VOID > +SetMacAddress ( > + UINT8* MacAddr > +) > +{ > + // Bring the UMAC out of reset > + RMWRegister (GENET_SYS_RBUF_FLUSH_CTRL, 0x2, 1); > + gBS->Stall (10); > + RMWRegister (GENET_SYS_RBUF_FLUSH_CTRL, 0x2, 0); > + > + // Update the MAC > + DEBUG ((DEBUG_INFO, "Setting MAC address %02X:%02X:%02X:%02X:%02X:%02X\n", > + MacAddr[0], MacAddr[1], MacAddr[2], MacAddr[3], MacAddr[4], MacAddr[5])); > + > + WdRegister (GENET_UMAC_MAC0, (MacAddr[0] << 24) | (MacAddr[1] << 16) | > + (MacAddr[2] << 8) | MacAddr[3]); > + WdRegister (GENET_UMAC_MAC1, (MacAddr[4] << 8) | MacAddr[5]); > + > +} > + > +/** > + The entry point of Genet UEFI Driver. > + > + @param ImageHandle The image handle of the UEFI Driver. > + @param SystemTable A pointer to the EFI System Table. > + > + @retval EFI_SUCCESS The Driver or UEFI Driver exited normally. > + @retval EFI_INCOMPATIBLE_VERSION _gUefiDriverRevision is greater than > + SystemTable->Hdr.Revision. > + > +**/ > +EFI_STATUS > +EFIAPI > +GenetEntryPoint ( > + IN EFI_HANDLE ImageHandle, > + IN EFI_SYSTEM_TABLE *SystemTable > + ) > +{ > + UINT64 MacAddr; > + > + // Read the MAC address > + MacAddr = PcdGet64 (PcdBcmGenetMacAddress); > + > + if (MacAddr != 0) { > + SetMacAddress ((UINT8*)&MacAddr); > + } > + > + return EFI_SUCCESS; > +} > diff --git a/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/Genet.h b/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/Genet.h > new file mode 100644 > index 000000000000..4a3827c0e0d1 > --- /dev/null > +++ b/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/Genet.h > @@ -0,0 +1,20 @@ > +/** @file > + > + Copyright (c) 2020, Pete Batard > + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +#ifndef BCM_GENET_H__ > +#define BCM_GENET_H__ > + > +#include > + > +#define GENET_BASE_ADDRESS (FixedPcdGet64 (PcdBcmGenetRegistersAddress)) > + > +#define GENET_SYS_RBUF_FLUSH_CTRL 0x0008 > +#define GENET_UMAC_MAC0 0x080c > +#define GENET_UMAC_MAC1 0x0810 > + > +#endif /* BCM_GENET_H__ */ > diff --git a/Silicon/Broadcom/Drivers/Net/BcmNet.dec b/Silicon/Broadcom/Drivers/Net/BcmNet.dec > new file mode 100644 > index 000000000000..d80aac27ed9e > --- /dev/null > +++ b/Silicon/Broadcom/Drivers/Net/BcmNet.dec > @@ -0,0 +1,22 @@ > +## @file > +# > +# Copyright (c) 2020, Pete Batard > +# > +# SPDX-License-Identifier: BSD-2-Clause-Patent > +# > +## > + > +[Defines] > + DEC_SPECIFICATION = 0x0001001A > + PACKAGE_NAME = BcmNetPkg > + PACKAGE_GUID = 34E19823-D23A-41AB-9C09-ED1225B32DFF > + PACKAGE_VERSION = 1.0 > + > +[Guids] > + gBcmNetTokenSpaceGuid = {0x12b97d70, 0x9149, 0x4c2f, {0x82, 0xd5, 0xad, 0xa9, 0x1e, 0x92, 0x75, 0xa1}} > + > +[PcdsFixedAtBuild] > + gBcmNetTokenSpaceGuid.PcdBcmGenetRegistersAddress|0x0|UINT32|0x00000001 > + Can we make this UINT64 please? EFI_PHYSICAL_ADDRESSes are 64-bit in UEFI. > +[PcdsDynamic] > + gBcmNetTokenSpaceGuid.PcdBcmGenetMacAddress|0x0|UINT64|0x00000002 > -- > 2.21.0.windows.1 >