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.11744.1579866867115240826 for ; Fri, 24 Jan 2020 03:54:27 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@akeo-ie.20150623.gappssmtp.com header.s=20150623 header.b=Knlxpz8R; spf=none, err=permanent DNS error (domain: akeo.ie, ip: 209.85.221.68, mailfrom: pete@akeo.ie) Received: by mail-wr1-f68.google.com with SMTP id q6so1622557wro.9 for ; Fri, 24 Jan 2020 03:54:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=akeo-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=3J7goa9Lyczbh5OeI+LzfdsIqUK1VrXkn6TurXX8CQA=; b=Knlxpz8RfpZ7Fh1pzZlyXwMfazWoXygVTAHF43mzzJOrszc7XT+M2uVpPAWOWAMfdE QftPf09z1WH/6BekSeoILG4xUDxkUgduzn7ubUcHC85DSdmDdU3jQpj2giP5XshmK4jo hadLDByOp4vkLsXf9E4egu+wfrIsLpvcFTbIqFMLjZranshd6a7zsyAcU4iWiSDD4koJ KbEz/ZMMNZmfbAtMdJHfAM0Vi0DFRrAMl/QTodlYKN+1A36pjESJAz96KpmAGydUUtk6 FYAvTS6McSbV5kPszSASxj7a2/JiGLtwqRQSpNTwO1GG3PDK5Z4Hpbfe42z7fyA5SJDa gBMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=3J7goa9Lyczbh5OeI+LzfdsIqUK1VrXkn6TurXX8CQA=; b=ORcKx0uaRQ7MqVfvabkpBA/H+hfNhWxDKxUz6/8VfGkN/jWAhsdZdp2uezllJAG9cQ xrePJXOO+JGcLOGODMZO4BEzLEB5imjUFvXlhZLqfOtVtatWaz45l8OVY7N2/YidD5Ju 1pIHBiHYML6Kivdv/N+PVQe6t6XDZ1+a2auYxzGmvQs9I4T1dClWFh652nA2ZL67Qosx SSdcwOcc/ol75quvtHKFOU2s9PVkgBNZmFIcij4fsHrP1u+t+DKL2W3axa1kDp26AAj+ kK9uIor+4dlLmGWw1VZS/TWH2CNhRnpREKPYPo1zwCH+inHatBvbQ59b/UrA/1w1Ggcv wHcQ== X-Gm-Message-State: APjAAAVt8Xz5nkQxxaZFzftJCwrgBUXGIZwG8LeHS5Zbfj7P2AOMhfP1 cRbdW0UiazUfkafPVaGADWs83GCFXzk= X-Google-Smtp-Source: APXvYqxX/IU81Ir9ogBhE5zd+mBXcMOpWxPli23s90CntW3ezh0xCZQHCT8g9XPZjCkLi2dmyxQHCA== X-Received: by 2002:a5d:6144:: with SMTP id y4mr3783470wrt.367.1579866865188; Fri, 24 Jan 2020 03:54:25 -0800 (PST) Return-Path: Received: from localhost.localdomain ([84.203.49.247]) by smtp.gmail.com with ESMTPSA id p17sm7003840wrx.20.2020.01.24.03.54.24 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 24 Jan 2020 03:54:24 -0800 (PST) From: "Pete Batard" To: devel@edk2.groups.io Cc: ard.biesheuvel@linaro.org, leif@nuviainc.com, philmd@redhat.com, lintonrjeremy@gmail.com Subject: [edk2-platforms][PATCH v2 1/3] Silicon/Broadcom/Net: Add Genet stub driver to setup MAC Date: Fri, 24 Jan 2020 11:54:09 +0000 Message-Id: <20200124115411.9364-2-pete@akeo.ie> X-Mailer: git-send-email 2.21.0.windows.1 In-Reply-To: <20200124115411.9364-1-pete@akeo.ie> References: <20200124115411.9364-1-pete@akeo.ie> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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..9f29bc0c0894 --- /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, "Using 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..2a8688cb09a7 --- /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|UINT64|0x00000001 + +[PcdsDynamic] + gBcmNetTokenSpaceGuid.PcdBcmGenetMacAddress|0x0|UINT64|0x00000002 -- 2.21.0.windows.1