Add support for the SoftIron Overdrive 1000. This requires first moving FdtDxe/ from OverdriveBoard/ to Drivers/, so that it can be used by OverdriveBoard/ and Overdrive1000Board/
Alan.
Alan Ott (2): Platforms/AMD/Styx: Move FdtDxe/ from OverdriveBoard/ to Drivers/ Platforms/AMD/Styx: Add configuration for Overdrive 1000
.../FdtDxe/BdsLinuxFdt.c | 0 .../{OverdriveBoard => Drivers}/FdtDxe/FdtDxe.c | 0 .../{OverdriveBoard => Drivers}/FdtDxe/FdtDxe.h | 0 .../{OverdriveBoard => Drivers}/FdtDxe/FdtDxe.inf | 0 .../FdtDxe/LinuxLoader.h | 0 .../FdtDxe/LinuxLoaderHelper.c | 0 .../Overdrive1000Board/Binary/PreUefiFirmware.bin | Bin 0 -> 401408 bytes .../FdtBlob/styx-overdrive1000.dtb | Bin 0 -> 8329 bytes .../FdtBlob/styx-overdrive1000.dts | 458 +++++++++++++ .../Styx/Overdrive1000Board/Overdrive1000Board.dsc | 734 +++++++++++++++++++++ .../Styx/Overdrive1000Board/Overdrive1000Board.fdf | 412 ++++++++++++ .../AMD/Styx/OverdriveBoard/OverdriveBoard.dsc | 2 +- .../AMD/Styx/OverdriveBoard/OverdriveBoard.fdf | 2 +- 13 files changed, 1606 insertions(+), 2 deletions(-) rename Platforms/AMD/Styx/{OverdriveBoard => Drivers}/FdtDxe/BdsLinuxFdt.c (100%) rename Platforms/AMD/Styx/{OverdriveBoard => Drivers}/FdtDxe/FdtDxe.c (100%) rename Platforms/AMD/Styx/{OverdriveBoard => Drivers}/FdtDxe/FdtDxe.h (100%) rename Platforms/AMD/Styx/{OverdriveBoard => Drivers}/FdtDxe/FdtDxe.inf (100%) rename Platforms/AMD/Styx/{OverdriveBoard => Drivers}/FdtDxe/LinuxLoader.h (100%) rename Platforms/AMD/Styx/{OverdriveBoard => Drivers}/FdtDxe/LinuxLoaderHelper.c (100%) create mode 100644 Platforms/AMD/Styx/Overdrive1000Board/Binary/PreUefiFirmware.bin create mode 100644 Platforms/AMD/Styx/Overdrive1000Board/FdtBlob/styx-overdrive1000.dtb create mode 100644 Platforms/AMD/Styx/Overdrive1000Board/FdtBlob/styx-overdrive1000.dts create mode 100644 Platforms/AMD/Styx/Overdrive1000Board/Overdrive1000Board.dsc create mode 100644 Platforms/AMD/Styx/Overdrive1000Board/Overdrive1000Board.fdf
FdtDxe/ will be used by multiple platforms, so move it to a common area.
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Alan Ott alan@softiron.co.uk --- Platforms/AMD/Styx/{OverdriveBoard => Drivers}/FdtDxe/BdsLinuxFdt.c | 0 Platforms/AMD/Styx/{OverdriveBoard => Drivers}/FdtDxe/FdtDxe.c | 0 Platforms/AMD/Styx/{OverdriveBoard => Drivers}/FdtDxe/FdtDxe.h | 0 Platforms/AMD/Styx/{OverdriveBoard => Drivers}/FdtDxe/FdtDxe.inf | 0 Platforms/AMD/Styx/{OverdriveBoard => Drivers}/FdtDxe/LinuxLoader.h | 0 .../AMD/Styx/{OverdriveBoard => Drivers}/FdtDxe/LinuxLoaderHelper.c | 0 Platforms/AMD/Styx/OverdriveBoard/OverdriveBoard.dsc | 2 +- Platforms/AMD/Styx/OverdriveBoard/OverdriveBoard.fdf | 2 +- 8 files changed, 2 insertions(+), 2 deletions(-) rename Platforms/AMD/Styx/{OverdriveBoard => Drivers}/FdtDxe/BdsLinuxFdt.c (100%) rename Platforms/AMD/Styx/{OverdriveBoard => Drivers}/FdtDxe/FdtDxe.c (100%) rename Platforms/AMD/Styx/{OverdriveBoard => Drivers}/FdtDxe/FdtDxe.h (100%) rename Platforms/AMD/Styx/{OverdriveBoard => Drivers}/FdtDxe/FdtDxe.inf (100%) rename Platforms/AMD/Styx/{OverdriveBoard => Drivers}/FdtDxe/LinuxLoader.h (100%) rename Platforms/AMD/Styx/{OverdriveBoard => Drivers}/FdtDxe/LinuxLoaderHelper.c (100%)
diff --git a/Platforms/AMD/Styx/OverdriveBoard/FdtDxe/BdsLinuxFdt.c b/Platforms/AMD/Styx/Drivers/FdtDxe/BdsLinuxFdt.c similarity index 100% rename from Platforms/AMD/Styx/OverdriveBoard/FdtDxe/BdsLinuxFdt.c rename to Platforms/AMD/Styx/Drivers/FdtDxe/BdsLinuxFdt.c diff --git a/Platforms/AMD/Styx/OverdriveBoard/FdtDxe/FdtDxe.c b/Platforms/AMD/Styx/Drivers/FdtDxe/FdtDxe.c similarity index 100% rename from Platforms/AMD/Styx/OverdriveBoard/FdtDxe/FdtDxe.c rename to Platforms/AMD/Styx/Drivers/FdtDxe/FdtDxe.c diff --git a/Platforms/AMD/Styx/OverdriveBoard/FdtDxe/FdtDxe.h b/Platforms/AMD/Styx/Drivers/FdtDxe/FdtDxe.h similarity index 100% rename from Platforms/AMD/Styx/OverdriveBoard/FdtDxe/FdtDxe.h rename to Platforms/AMD/Styx/Drivers/FdtDxe/FdtDxe.h diff --git a/Platforms/AMD/Styx/OverdriveBoard/FdtDxe/FdtDxe.inf b/Platforms/AMD/Styx/Drivers/FdtDxe/FdtDxe.inf similarity index 100% rename from Platforms/AMD/Styx/OverdriveBoard/FdtDxe/FdtDxe.inf rename to Platforms/AMD/Styx/Drivers/FdtDxe/FdtDxe.inf diff --git a/Platforms/AMD/Styx/OverdriveBoard/FdtDxe/LinuxLoader.h b/Platforms/AMD/Styx/Drivers/FdtDxe/LinuxLoader.h similarity index 100% rename from Platforms/AMD/Styx/OverdriveBoard/FdtDxe/LinuxLoader.h rename to Platforms/AMD/Styx/Drivers/FdtDxe/LinuxLoader.h diff --git a/Platforms/AMD/Styx/OverdriveBoard/FdtDxe/LinuxLoaderHelper.c b/Platforms/AMD/Styx/Drivers/FdtDxe/LinuxLoaderHelper.c similarity index 100% rename from Platforms/AMD/Styx/OverdriveBoard/FdtDxe/LinuxLoaderHelper.c rename to Platforms/AMD/Styx/Drivers/FdtDxe/LinuxLoaderHelper.c diff --git a/Platforms/AMD/Styx/OverdriveBoard/OverdriveBoard.dsc b/Platforms/AMD/Styx/OverdriveBoard/OverdriveBoard.dsc index 72ceb8b..7f751f1 100644 --- a/Platforms/AMD/Styx/OverdriveBoard/OverdriveBoard.dsc +++ b/Platforms/AMD/Styx/OverdriveBoard/OverdriveBoard.dsc @@ -584,7 +584,7 @@ DEFINE DO_KCS = 1 # # FDT support # - OpenPlatformPkg/Platforms/AMD/Styx/OverdriveBoard/FdtDxe/FdtDxe.inf { + OpenPlatformPkg/Platforms/AMD/Styx/Drivers/FdtDxe/FdtDxe.inf { <LibraryClasses> # deprecated BdsLib from the ARM BDS BdsLib|ArmPkg/Library/BdsLib/BdsLib.inf diff --git a/Platforms/AMD/Styx/OverdriveBoard/OverdriveBoard.fdf b/Platforms/AMD/Styx/OverdriveBoard/OverdriveBoard.fdf index e5b079d..404810f 100644 --- a/Platforms/AMD/Styx/OverdriveBoard/OverdriveBoard.fdf +++ b/Platforms/AMD/Styx/OverdriveBoard/OverdriveBoard.fdf @@ -141,7 +141,7 @@ READ_LOCK_STATUS = TRUE # # FDT support # - INF OpenPlatformPkg/Platforms/AMD/Styx/OverdriveBoard/FdtDxe/FdtDxe.inf + INF OpenPlatformPkg/Platforms/AMD/Styx/Drivers/FdtDxe/FdtDxe.inf
FILE FREEFORM = PCD(gAmdStyxTokenSpaceGuid.PcdStyxFdt) { SECTION RAW = OpenPlatformPkg/Platforms/AMD/Styx/OverdriveBoard/FdtBlob/styx-overdrive.dtb
On 17 October 2016 at 23:15, Alan Ott alan@softiron.co.uk wrote:
FdtDxe/ will be used by multiple platforms, so move it to a common area.
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Alan Ott alan@softiron.co.uk
Reviewed-by: Ard Biesheuvel ard.biesheuvel@linaro.org
Platforms/AMD/Styx/{OverdriveBoard => Drivers}/FdtDxe/BdsLinuxFdt.c | 0 Platforms/AMD/Styx/{OverdriveBoard => Drivers}/FdtDxe/FdtDxe.c | 0 Platforms/AMD/Styx/{OverdriveBoard => Drivers}/FdtDxe/FdtDxe.h | 0 Platforms/AMD/Styx/{OverdriveBoard => Drivers}/FdtDxe/FdtDxe.inf | 0 Platforms/AMD/Styx/{OverdriveBoard => Drivers}/FdtDxe/LinuxLoader.h | 0 .../AMD/Styx/{OverdriveBoard => Drivers}/FdtDxe/LinuxLoaderHelper.c | 0 Platforms/AMD/Styx/OverdriveBoard/OverdriveBoard.dsc | 2 +- Platforms/AMD/Styx/OverdriveBoard/OverdriveBoard.fdf | 2 +- 8 files changed, 2 insertions(+), 2 deletions(-) rename Platforms/AMD/Styx/{OverdriveBoard => Drivers}/FdtDxe/BdsLinuxFdt.c (100%) rename Platforms/AMD/Styx/{OverdriveBoard => Drivers}/FdtDxe/FdtDxe.c (100%) rename Platforms/AMD/Styx/{OverdriveBoard => Drivers}/FdtDxe/FdtDxe.h (100%) rename Platforms/AMD/Styx/{OverdriveBoard => Drivers}/FdtDxe/FdtDxe.inf (100%) rename Platforms/AMD/Styx/{OverdriveBoard => Drivers}/FdtDxe/LinuxLoader.h (100%) rename Platforms/AMD/Styx/{OverdriveBoard => Drivers}/FdtDxe/LinuxLoaderHelper.c (100%)
diff --git a/Platforms/AMD/Styx/OverdriveBoard/FdtDxe/BdsLinuxFdt.c b/Platforms/AMD/Styx/Drivers/FdtDxe/BdsLinuxFdt.c similarity index 100% rename from Platforms/AMD/Styx/OverdriveBoard/FdtDxe/BdsLinuxFdt.c rename to Platforms/AMD/Styx/Drivers/FdtDxe/BdsLinuxFdt.c diff --git a/Platforms/AMD/Styx/OverdriveBoard/FdtDxe/FdtDxe.c b/Platforms/AMD/Styx/Drivers/FdtDxe/FdtDxe.c similarity index 100% rename from Platforms/AMD/Styx/OverdriveBoard/FdtDxe/FdtDxe.c rename to Platforms/AMD/Styx/Drivers/FdtDxe/FdtDxe.c diff --git a/Platforms/AMD/Styx/OverdriveBoard/FdtDxe/FdtDxe.h b/Platforms/AMD/Styx/Drivers/FdtDxe/FdtDxe.h similarity index 100% rename from Platforms/AMD/Styx/OverdriveBoard/FdtDxe/FdtDxe.h rename to Platforms/AMD/Styx/Drivers/FdtDxe/FdtDxe.h diff --git a/Platforms/AMD/Styx/OverdriveBoard/FdtDxe/FdtDxe.inf b/Platforms/AMD/Styx/Drivers/FdtDxe/FdtDxe.inf similarity index 100% rename from Platforms/AMD/Styx/OverdriveBoard/FdtDxe/FdtDxe.inf rename to Platforms/AMD/Styx/Drivers/FdtDxe/FdtDxe.inf diff --git a/Platforms/AMD/Styx/OverdriveBoard/FdtDxe/LinuxLoader.h b/Platforms/AMD/Styx/Drivers/FdtDxe/LinuxLoader.h similarity index 100% rename from Platforms/AMD/Styx/OverdriveBoard/FdtDxe/LinuxLoader.h rename to Platforms/AMD/Styx/Drivers/FdtDxe/LinuxLoader.h diff --git a/Platforms/AMD/Styx/OverdriveBoard/FdtDxe/LinuxLoaderHelper.c b/Platforms/AMD/Styx/Drivers/FdtDxe/LinuxLoaderHelper.c similarity index 100% rename from Platforms/AMD/Styx/OverdriveBoard/FdtDxe/LinuxLoaderHelper.c rename to Platforms/AMD/Styx/Drivers/FdtDxe/LinuxLoaderHelper.c diff --git a/Platforms/AMD/Styx/OverdriveBoard/OverdriveBoard.dsc b/Platforms/AMD/Styx/OverdriveBoard/OverdriveBoard.dsc index 72ceb8b..7f751f1 100644 --- a/Platforms/AMD/Styx/OverdriveBoard/OverdriveBoard.dsc +++ b/Platforms/AMD/Styx/OverdriveBoard/OverdriveBoard.dsc @@ -584,7 +584,7 @@ DEFINE DO_KCS = 1 # # FDT support #
- OpenPlatformPkg/Platforms/AMD/Styx/OverdriveBoard/FdtDxe/FdtDxe.inf {
- OpenPlatformPkg/Platforms/AMD/Styx/Drivers/FdtDxe/FdtDxe.inf {
<LibraryClasses> # deprecated BdsLib from the ARM BDS BdsLib|ArmPkg/Library/BdsLib/BdsLib.inf
diff --git a/Platforms/AMD/Styx/OverdriveBoard/OverdriveBoard.fdf b/Platforms/AMD/Styx/OverdriveBoard/OverdriveBoard.fdf index e5b079d..404810f 100644 --- a/Platforms/AMD/Styx/OverdriveBoard/OverdriveBoard.fdf +++ b/Platforms/AMD/Styx/OverdriveBoard/OverdriveBoard.fdf @@ -141,7 +141,7 @@ READ_LOCK_STATUS = TRUE # # FDT support #
- INF OpenPlatformPkg/Platforms/AMD/Styx/OverdriveBoard/FdtDxe/FdtDxe.inf
INF OpenPlatformPkg/Platforms/AMD/Styx/Drivers/FdtDxe/FdtDxe.inf
FILE FREEFORM = PCD(gAmdStyxTokenSpaceGuid.PcdStyxFdt) { SECTION RAW = OpenPlatformPkg/Platforms/AMD/Styx/OverdriveBoard/FdtBlob/styx-overdrive.dtb
-- 2.5.0
Add a configuration for the SoftIron Overdrive 1000. This is similar to OverdriveBoard/ configuration (which is for the Overdrive 3000).
The Overdrive 1000 contains an AMD Opteron-A-based SoC with 4 Cortex-A57 cores. The board contains Marvell Yukon 1Gbit ethernet, two SATA 3.0 ports, and two USB 3.0 ports.
This configuration contains a PreUefiFirmware.bin image which was generated using the AMD Firmware Development Kit (FDK) version 1.0.0.2, configured for use with DDR4 memory.
In comparison with the .dsc and .fdf in OverdriveBoard/, the files for Overdrive1000Board contain the following differences: * Number of cores, * XGBE support (none in Overdrive 1000), * SataPi and SataPortCount for available ports, * PCIe configuration, * Addition of MarvellYukonDxe driver.
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Alan Ott alan@softiron.co.uk --- .../Overdrive1000Board/Binary/PreUefiFirmware.bin | Bin 0 -> 401408 bytes .../FdtBlob/styx-overdrive1000.dtb | Bin 0 -> 8329 bytes .../FdtBlob/styx-overdrive1000.dts | 458 +++++++++++++ .../Styx/Overdrive1000Board/Overdrive1000Board.dsc | 734 +++++++++++++++++++++ .../Styx/Overdrive1000Board/Overdrive1000Board.fdf | 412 ++++++++++++ 5 files changed, 1604 insertions(+) create mode 100644 Platforms/AMD/Styx/Overdrive1000Board/Binary/PreUefiFirmware.bin create mode 100644 Platforms/AMD/Styx/Overdrive1000Board/FdtBlob/styx-overdrive1000.dtb create mode 100644 Platforms/AMD/Styx/Overdrive1000Board/FdtBlob/styx-overdrive1000.dts create mode 100644 Platforms/AMD/Styx/Overdrive1000Board/Overdrive1000Board.dsc create mode 100644 Platforms/AMD/Styx/Overdrive1000Board/Overdrive1000Board.fdf
diff --git a/Platforms/AMD/Styx/Overdrive1000Board/Binary/PreUefiFirmware.bin b/Platforms/AMD/Styx/Overdrive1000Board/Binary/PreUefiFirmware.bin new file mode 100644 index 0000000000000000000000000000000000000000..737fbb29b85db42c693a195ba3554057c3f2076e GIT binary patch literal 401408 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 z	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≪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%0Ai! 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
literal 0 HcmV?d00001
diff --git a/Platforms/AMD/Styx/Overdrive1000Board/FdtBlob/styx-overdrive1000.dtb b/Platforms/AMD/Styx/Overdrive1000Board/FdtBlob/styx-overdrive1000.dtb new file mode 100644 index 0000000000000000000000000000000000000000..ea5194ec14fea920bf185cf9466db61b28b1ca5e GIT binary patch literal 8329 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
literal 0 HcmV?d00001
diff --git a/Platforms/AMD/Styx/Overdrive1000Board/FdtBlob/styx-overdrive1000.dts b/Platforms/AMD/Styx/Overdrive1000Board/FdtBlob/styx-overdrive1000.dts new file mode 100644 index 0000000..483924e --- /dev/null +++ b/Platforms/AMD/Styx/Overdrive1000Board/FdtBlob/styx-overdrive1000.dts @@ -0,0 +1,458 @@ +/* + * DTS file for AMD Seattle (Rev.B) Overdrive Development Board + * + * Copyright 2015 - 2016 ADVANCED MICRO DEVICES, INC. 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. + * + */ + +/dts-v1/; + +/ { + model = "AMD Seattle (Rev.B) Development Board (Overdrive)"; + compatible = "amd,seattle-overdrive", "amd,seattle"; + interrupt-parent = <0x1>; + #address-cells = <0x2>; + #size-cells = <0x2>; + + interrupt-controller@e1101000 { + compatible = "arm,gic-400", "arm,cortex-a15-gic"; + interrupt-controller; + #interrupt-cells = <0x3>; + #address-cells = <0x2>; + #size-cells = <0x2>; + reg = <0x0 0xe1110000 0x0 0x1000>, + <0x0 0xe112f000 0x0 0x2000>, + <0x0 0xe1140000 0x0 0x10000>, + <0x0 0xe1160000 0x0 0x10000>; + interrupts = <0x1 0x9 0xf04>; + ranges = <0x0 0x0 0x0 0xe1100000 0x0 0x100000>; + linux,phandle = <0x1>; + phandle = <0x1>; + + v2m@e0080000 { + compatible = "arm,gic-v2m-frame"; + msi-controller; + reg = <0x0 0x80000 0x0 0x1000>; + linux,phandle = <0x4>; + phandle = <0x4>; + }; + }; + + timer { + compatible = "arm,armv8-timer"; + interrupts = <0x1 0xd 0xff04>, + <0x1 0xe 0xff04>, + <0x1 0xb 0xff04>, + <0x1 0xa 0xff04>; + }; + + pmu { + compatible = "arm,armv8-pmuv3"; + interrupts = <0x0 0x7 0x4>, + <0x0 0x8 0x4>, + <0x0 0x9 0x4>, + <0x0 0xa 0x4>, + <0x0 0xb 0x4>, + <0x0 0xc 0x4>, + <0x0 0xd 0x4>, + <0x0 0xe 0x4>; + }; + + smb { + compatible = "simple-bus"; + #address-cells = <0x2>; + #size-cells = <0x2>; + ranges; + /* + * dma-ranges is 40-bit address space containing: + * - GICv2m MSI register is at 0xe0080000 + * - DRAM range [0x8000000000 to 0xffffffffff] + */ + dma-ranges = <0x0 0x0 0x0 0x0 0x100 0x0>; + + clk100mhz_0 { + compatible = "fixed-clock"; + #clock-cells = <0x0>; + clock-frequency = <100000000>; + clock-output-names = "adl3clk_100mhz"; + }; + + clk375mhz { + compatible = "fixed-clock"; + #clock-cells = <0x0>; + clock-frequency = <375000000>; + clock-output-names = "ccpclk_375mhz"; + }; + + clk333mhz { + compatible = "fixed-clock"; + #clock-cells = <0x0>; + clock-frequency = <333000000>; + clock-output-names = "sataclk_333mhz"; + linux,phandle = <0x2>; + phandle = <0x2>; + }; + + clk500mhz_0 { + compatible = "fixed-clock"; + #clock-cells = <0x0>; + clock-frequency = <500000000>; + clock-output-names = "pcieclk_500mhz"; + }; + + clk500mhz_1 { + compatible = "fixed-clock"; + #clock-cells = <0x0>; + clock-frequency = <500000000>; + clock-output-names = "dmaclk_500mhz"; + }; + + clk250mhz_4 { + compatible = "fixed-clock"; + #clock-cells = <0x0>; + clock-frequency = <250000000>; + clock-output-names = "miscclk_250mhz"; + linux,phandle = <0xd>; + phandle = <0xd>; + }; + + clk100mhz_1 { + compatible = "fixed-clock"; + #clock-cells = <0x0>; + clock-frequency = <100000000>; + clock-output-names = "uartspiclk_100mhz"; + linux,phandle = <0x3>; + phandle = <0x3>; + }; + + sata@e0300000 { + compatible = "snps,dwc-ahci"; + reg = <0x0 0xe0300000 0x0 0xf0000>; + interrupts = <0x0 0x163 0x4>; + clocks = <0x2>; + dma-coherent; + }; + + sata@e0d00000 { + status = "disabled"; + compatible = "snps,dwc-ahci"; + reg = <0x0 0xe0d00000 0x0 0xf0000>; + interrupts = <0x0 0x162 0x4>; + clocks = <0x2>; + dma-coherent; + }; + + i2c@e1000000 { + compatible = "snps,designware-i2c"; + reg = <0x0 0xe1000000 0x0 0x1000>; + interrupts = <0x0 0x165 0x4>; + clocks = <0xd>; + }; + + i2c@e0050000 { + compatible = "snps,designware-i2c"; + reg = <0x0 0xe0050000 0x0 0x1000>; + interrupts = <0x0 0x154 0x4>; + clocks = <0xd>; + }; + + serial@e1010000 { + compatible = "arm,pl011", "arm,primecell"; + reg = <0x0 0xe1010000 0x0 0x1000>; + interrupts = <0x0 0x148 0x4>; + clocks = <0x3 0x3>; + clock-names = "uartclk", "apb_pclk"; + }; + + ssp@e1020000 { + compatible = "arm,pl022", "arm,primecell"; + reg = <0x0 0xe1020000 0x0 0x1000>; + spi-controller; + interrupts = <0x0 0x14a 0x4>; + clocks = <0x3>; + clock-names = "apb_pclk"; + }; + + ssp@e1030000 { + compatible = "arm,pl022", "arm,primecell"; + reg = <0x0 0xe1030000 0x0 0x1000>; + spi-controller; + interrupts = <0x0 0x149 0x4>; + clocks = <0x3>; + clock-names = "apb_pclk"; + num-cs = <0x1>; + #address-cells = <0x1>; + #size-cells = <0x0>; + + sdcard@0 { + compatible = "mmc-spi-slot"; + reg = <0x0>; + spi-max-frequency = <20000000>; + voltage-ranges = <3200 3400>; + pl022,hierarchy = <0x0>; + pl022,interface = <0x0>; + pl022,com-mode = <0x0>; + pl022,rx-level-trig = <0x0>; + pl022,tx-level-trig = <0x0>; + }; + }; + + gpio@e1040000 { /* [0 : 7] */ + compatible = "arm,pl061", "arm,primecell"; + #gpio-cells = <0x2>; + reg = <0x0 0xe1040000 0x0 0x1000>; + gpio-controller; + interrupt-controller; + #interrupt-cells = <0x2>; + interrupts = <0x0 0x167 0x4>; + clocks = <0x3>; + clock-names = "apb_pclk"; + }; + + gpio@e1050000 { /* [0 : 7] */ + compatible = "arm,pl061", "arm,primecell"; + #gpio-cells = <0x2>; + reg = <0x0 0xe1050000 0x0 0x1000>; + gpio-controller; + interrupt-controller; + #interrupt-cells = <0x2>; + interrupts = <0x0 0x166 0x4>; + clocks = <0x3>; + clock-names = "apb_pclk"; + }; + + gpio@e0020000 { /* [8 : 15] */ + status = "disabled"; + compatible = "arm,pl061", "arm,primecell"; + #gpio-cells = <0x2>; + reg = <0x0 0xe0020000 0x0 0x1000>; + gpio-controller; + interrupt-controller; + #interrupt-cells = <0x2>; + interrupts = <0x0 0x16e 0x4>; + clocks = <0x3>; + clock-names = "apb_pclk"; + }; + + gpio@e0030000 { /* [16 : 23] */ + status = "disabled"; + compatible = "arm,pl061", "arm,primecell"; + #gpio-cells = <0x2>; + reg = <0x0 0xe0030000 0x0 0x1000>; + gpio-controller; + interrupt-controller; + #interrupt-cells = <0x2>; + interrupts = <0x0 0x16d 0x4>; + clocks = <0x3>; + clock-names = "apb_pclk"; + }; + + gpio@e0080000 { /* [24] */ + compatible = "arm,pl061", "arm,primecell"; + #gpio-cells = <0x2>; + reg = <0x0 0xe0080000 0x0 0x1000>; + gpio-controller; + interrupt-controller; + #interrupt-cells = <0x2>; + interrupts = <0x0 0x169 0x4>; + clocks = <0x3>; + clock-names = "apb_pclk"; + }; + + ccp: ccp@e0100000 { + compatible = "amd,ccp-seattle-v1a"; + reg = <0x0 0xe0100000 0x0 0x10000>; + interrupts = <0x0 0x3 0x4>; + dma-coherent; + amd,zlib-support = <0x1>; + }; + + pcie: pcie@f0000000 { + compatible = "pci-host-ecam-generic"; + #address-cells = <0x3>; + #size-cells = <0x2>; + #interrupt-cells = <0x1>; + device_type = "pci"; + bus-range = <0x0 0x7f>; + msi-parent = <0x4>; + reg = <0x0 0xf0000000 0x0 0x10000000>; + interrupt-map-mask = <0xf800 0x0 0x0 0x7>; + interrupt-map = <0x1000 0x0 0x0 0x1 0x1 0x0 0x0 0x0 0x120 0x1>, + <0x1000 0x0 0x0 0x2 0x1 0x0 0x0 0x0 0x121 0x1>, + <0x1000 0x0 0x0 0x3 0x1 0x0 0x0 0x0 0x122 0x1>, + <0x1000 0x0 0x0 0x4 0x1 0x0 0x0 0x0 0x123 0x1>; + dma-coherent; + dma-ranges = <0x43000000 0x0 0x0 0x0 0x0 0x100 0x0>; + ranges = <0x1000000 0x0 0x00000000 0x0 0xefff0000 0x00 0x00010000>, /* I/O Memory (size=64K) */ + <0x2000000 0x0 0x40000000 0x0 0x40000000 0x00 0x80000000>, /* 32-bit MMIO (size=2G) */ + <0x3000000 0x1 0x00000000 0x1 0x00000000 0x7f 0x00000000>; /* 64-bit MMIO (size= 124G) */ + }; + + ccn@0xe8000000 { + compatible = "arm,ccn-504"; + reg = <0x0 0xe8000000 0x0 0x1000000>; + interrupts = <0x0 0x17c 0x4>; + }; + + gwdt@e0bb0000 { + status = "disabled"; + compatible = "arm,sbsa-gwdt"; + reg = <0x0 0xe0bb0000 0x0 0x10000 + 0x0 0xe0bc0000 0x0 0x10000>; + reg-names = "refresh", "control"; + interrupts = <0x0 0x151 0x4>; + interrupt-names = "ws0"; + }; + + kcs@e0010000 { + status = "disabled"; + compatible = "ipmi-kcs"; + device_type = "ipmi"; + reg = <0x0 0xe0010000 0 0x8>; + interrupts = <0 389 4>; + interrupt-names = "ipmi_kcs"; + reg-size = <1>; + reg-spacing = <4>; + }; + + clk250mhz_0 { + compatible = "fixed-clock"; + #clock-cells = <0x0>; + clock-frequency = <250000000>; + clock-output-names = "xgmacclk0_dma_250mhz"; + linux,phandle = <0x5>; + phandle = <0x5>; + }; + + clk250mhz_1 { + compatible = "fixed-clock"; + #clock-cells = <0x0>; + clock-frequency = <250000000>; + clock-output-names = "xgmacclk0_ptp_250mhz"; + linux,phandle = <0x6>; + phandle = <0x6>; + }; + + clk250mhz_2 { + compatible = "fixed-clock"; + #clock-cells = <0x0>; + clock-frequency = <250000000>; + clock-output-names = "xgmacclk1_dma_250mhz"; + linux,phandle = <0x7>; + phandle = <0x7>; + }; + + clk250mhz_3 { + compatible = "fixed-clock"; + #clock-cells = <0x0>; + clock-frequency = <250000000>; + clock-output-names = "xgmacclk1_ptp_250mhz"; + linux,phandle = <0x8>; + phandle = <0x8>; + }; + + phy@e1240800 { + status = "disabled"; + compatible = "amd,xgbe-phy-seattle-v1a"; + reg = <0x0 0xe1240800 0x0 0x0400>, /* SERDES RX/TX0 */ + <0x0 0xe1250000 0x0 0x0060>, /* SERDES IR 1/2 */ + <0x0 0xe12500f8 0x0 0x0004>; /* SERDES IR 2/2 */ + interrupts = <0x0 0x143 0x4>; + amd,speed-set = <0x0>; + amd,serdes-blwc = <0x1 0x1 0x0>; + amd,serdes-cdr-rate = <0x2 0x2 0x7>; + amd,serdes-pq-skew = <0xa 0xa 0x12>; + amd,serdes-tx-amp = <0xf 0xf 0xa>; + amd,serdes-dfe-tap-config = <0x3 0x3 0x1>; + amd,serdes-dfe-tap-enable = <0x0 0x0 0x7f>; + linux,phandle = <0x9>; + phandle = <0x9>; + }; + + phy@e1240c00 { + status = "disabled"; + compatible = "amd,xgbe-phy-seattle-v1a"; + reg = <0x0 0xe1240c00 0x0 0x0400>, /* SERDES RX/TX0 */ + <0x0 0xe1250080 0x0 0x0060>, /* SERDES IR 1/2 */ + <0x0 0xe12500fc 0x0 0x0004>; /* SERDES IR 2/2 */ + interrupts = <0x0 0x142 0x4>; + amd,speed-set = <0x0>; + amd,serdes-blwc = <0x1 0x1 0x0>; + amd,serdes-cdr-rate = <0x2 0x2 0x7>; + amd,serdes-pq-skew = <0xa 0xa 0x12>; + amd,serdes-tx-amp = <0xf 0xf 0xa>; + amd,serdes-dfe-tap-config = <0x3 0x3 0x1>; + amd,serdes-dfe-tap-enable = <0x0 0x0 0x7f>; + linux,phandle = <0xa>; + phandle = <0xa>; + }; + + xgmac@e0700000 { + status = "disabled"; + compatible = "amd,xgbe-seattle-v1a"; + reg = <0x0 0xe0700000 0x0 0x80000 0x0 0xe0780000 0x0 0x80000>; + interrupts = <0x0 0x145 0x4>, + <0x0 0x15a 0x1>, + <0x0 0x15b 0x1>, + <0x0 0x15c 0x1>, + <0x0 0x15d 0x1>; + amd,per-channel-interrupt; + mac-address = [02 a1 a2 a3 a4 a5]; + clocks = <0x5 0x6>; + clock-names = "dma_clk", "ptp_clk"; + phy-handle = <0x9>; + phy-mode = "xgmii"; + #stream-id-cells = <0x18>; + dma-coherent; + linux,phandle = <0xb>; + phandle = <0xb>; + }; + + xgmac@e0900000 { + status = "disabled"; + compatible = "amd,xgbe-seattle-v1a"; + reg = <0x0 0xe0900000 0x0 0x80000 0x0 0xe0980000 0x0 0x80000>; + interrupts = <0x0 0x144 0x4>, + <0x0 0x155 0x1>, + <0x0 0x156 0x1>, + <0x0 0x157 0x1>, + <0x0 0x158 0x1>; + amd,per-channel-interrupt; + mac-address = [02 b1 b2 b3 b4 b5]; + clocks = <0x7 0x8>; + clock-names = "dma_clk", "ptp_clk"; + phy-handle = <0xa>; + phy-mode = "xgmii"; + #stream-id-cells = <0x18>; + dma-coherent; + linux,phandle = <0xc>; + phandle = <0xc>; + }; + }; + + chosen { + stdout-path = "/smb/serial@e1010000"; + /* Note: + * Linux support for pci-probe-only DT is not + * stable. Disable this for now and let Linux + * take care of the resource assignment. + */ + /* linux,pci-probe-only = <1>; */ + }; + + psci { + compatible = "arm,psci-0.2", "arm,psci"; + method = "smc"; + }; +}; + + diff --git a/Platforms/AMD/Styx/Overdrive1000Board/Overdrive1000Board.dsc b/Platforms/AMD/Styx/Overdrive1000Board/Overdrive1000Board.dsc new file mode 100644 index 0000000..b2a5474 --- /dev/null +++ b/Platforms/AMD/Styx/Overdrive1000Board/Overdrive1000Board.dsc @@ -0,0 +1,734 @@ +# +# Copyright (c) 2014 - 2016, AMD Incorporated. 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 Section - statements that will be processed to create a Makefile. +# +################################################################################ +[Defines] + +DEFINE DO_XGBE = 0 +DEFINE NUM_CORES = 4 +DEFINE DO_PSCI = 1 +DEFINE DO_ISCP = 1 +DEFINE DO_KCS = 1 + + PLATFORM_NAME = Overdrive1000 + PLATFORM_GUID = B2296C02-9DA1-4CD1-BD48-4D4F0F1276EB + PLATFORM_VERSION = 0.1 + DSC_SPECIFICATION = 0x00010005 + OUTPUT_DIRECTORY = Build/Overdrive1000 + SUPPORTED_ARCHITECTURES = AARCH64 + BUILD_TARGETS = DEBUG|RELEASE + SKUID_IDENTIFIER = DEFAULT + FLASH_DEFINITION = OpenPlatformPkg/Platforms/AMD/Styx/Overdrive1000Board/Overdrive1000Board.fdf + +################################################################################ +# +# Library Class section - list of all Library Classes needed by this Platform. +# +################################################################################ +[LibraryClasses.common] +!if $(TARGET) == RELEASE + DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf + UncachedMemoryAllocationLib|ArmPkg/Library/UncachedMemoryAllocationLib/UncachedMemoryAllocationLib.inf +!else + DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf + UncachedMemoryAllocationLib|ArmPkg/Library/UncachedMemoryAllocationLib/UncachedMemoryAllocationLib.inf +!endif + DebugPrintErrorLevelLib|MdePkg/Library/BaseDebugPrintErrorLevelLib/BaseDebugPrintErrorLevelLib.inf + + BaseLib|MdePkg/Library/BaseLib/BaseLib.inf + SynchronizationLib|MdePkg/Library/BaseSynchronizationLib/BaseSynchronizationLib.inf + PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibNull.inf + PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf + PeCoffGetEntryPointLib|MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeCoffGetEntryPointLib.inf + PeCoffLib|MdePkg/Library/BasePeCoffLib/BasePeCoffLib.inf + IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf + PciExpressLib|MdePkg/Library/BasePciExpressLib/BasePciExpressLib.inf + UefiDecompressLib|MdePkg/Library/BaseUefiDecompressLib/BaseUefiDecompressLib.inf + CpuLib|MdePkg/Library/BaseCpuLib/BaseCpuLib.inf + + UefiLib|MdePkg/Library/UefiLib/UefiLib.inf + UefiUsbLib|MdePkg/Library/UefiUsbLib/UefiUsbLib.inf + HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf + UefiRuntimeServicesTableLib|MdePkg/Library/UefiRuntimeServicesTableLib/UefiRuntimeServicesTableLib.inf + DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf + UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.inf + DxeServicesTableLib|MdePkg/Library/DxeServicesTableLib/DxeServicesTableLib.inf + UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.inf + UefiApplicationEntryPoint|MdePkg/Library/UefiApplicationEntryPoint/UefiApplicationEntryPoint.inf + HiiLib|MdeModulePkg/Library/UefiHiiLib/UefiHiiLib.inf + UefiHiiServicesLib|MdeModulePkg/Library/UefiHiiServicesLib/UefiHiiServicesLib.inf + + UefiRuntimeLib|MdePkg/Library/UefiRuntimeLib/UefiRuntimeLib.inf + + # + # Allow dynamic PCDs + # + PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf + PeiServicesLib|MdePkg/Library/PeiServicesLib/PeiServicesLib.inf + + # 1/123 faster than Stm or Vstm version + #BaseMemoryLib|MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf + BaseMemoryLib|ArmPkg/Library/BaseMemoryLibStm/BaseMemoryLibStm.inf + + # Networking Requirements + NetLib|MdeModulePkg/Library/DxeNetLib/DxeNetLib.inf + DpcLib|MdeModulePkg/Library/DxeDpcLib/DxeDpcLib.inf + UdpIoLib|MdeModulePkg/Library/DxeUdpIoLib/DxeUdpIoLib.inf + IpIoLib|MdeModulePkg/Library/DxeIpIoLib/DxeIpIoLib.inf + + # ARM Architectural Libraries + CacheMaintenanceLib|ArmPkg/Library/ArmCacheMaintenanceLib/ArmCacheMaintenanceLib.inf + DefaultExceptionHandlerLib|ArmPkg/Library/DefaultExceptionHandlerLib/DefaultExceptionHandlerLib.inf + CpuExceptionHandlerLib|ArmPkg/Library/ArmExceptionLib/ArmExceptionLib.inf + ArmDisassemblerLib|ArmPkg/Library/ArmDisassemblerLib/ArmDisassemblerLib.inf + DmaLib|ArmPkg/Library/ArmDmaLib/ArmDmaLib.inf + ArmGicLib|ArmPkg/Drivers/ArmGic/ArmGicLib.inf + ArmGicArchLib|ArmPkg/Library/ArmGicArchLib/ArmGicArchLib.inf + ArmPlatformStackLib|ArmPlatformPkg/Library/ArmPlatformStackLib/ArmPlatformStackLib.inf + ArmSmcLib|ArmPkg/Library/ArmSmcLib/ArmSmcLib.inf + ArmGenericTimerCounterLib|ArmPkg/Library/ArmGenericTimerPhyCounterLib/ArmGenericTimerPhyCounterLib.inf + PlatformPeiLib|ArmPlatformPkg/PlatformPei/PlatformPeiLib.inf + + ArmLib|ArmPkg/Library/ArmLib/ArmBaseLib.inf + ArmCpuLib|ArmPkg/Drivers/ArmCpuLib/ArmCortexA5xLib/ArmCortexA5xLib.inf + ArmMmuLib|ArmPkg/Library/ArmMmuLib/ArmMmuBaseLib.inf + ArmPlatformLib|OpenPlatformPkg/Platforms/AMD/Styx/Library/AmdStyxLib/AmdStyxLib.inf + TimerLib|ArmPkg/Library/ArmArchTimerLib/ArmArchTimerLib.inf + UefiScsiLib|MdePkg/Library/UefiScsiLib/UefiScsiLib.inf + + # ARM PL011 UART Driver + PL011UartLib|ArmPlatformPkg/Drivers/PL011Uart/PL011Uart.inf + SerialPortLib|ArmPlatformPkg/Library/PL011SerialPortLib/PL011SerialPortLib.inf + + # + # PCI support + # + PciSegmentLib|MdePkg/Library/BasePciSegmentLibPci/BasePciSegmentLibPci.inf + PciLib|MdePkg/Library/BasePciLibPciExpress/BasePciLibPciExpress.inf + PciHostBridgeLib|OpenPlatformPkg/Platforms/AMD/Styx/Library/AmdStyxPciHostBridgeLib/AmdStyxPciHostBridgeLib.inf + + # + # Styx specific libraries + # + AmdSataInit|AmdModulePkg/Library/AmdSataInitLib/AmdSataInitLib.inf + AmdStyxAcpiLib|OpenPlatformPkg/Platforms/AMD/Styx/AcpiTables/AcpiTables.inf + EfiResetSystemLib|OpenPlatformPkg/Platforms/AMD/Styx/Library/ResetSystemLib/ResetSystemLib.inf + RealTimeClockLib|OpenPlatformPkg/Platforms/AMD/Styx/Library/RealTimeClockLib/RealTimeClockLib.inf + + CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf + UefiBootManagerLib|MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf + PlatformBootManagerLib|ArmPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf + CustomizedDisplayLib|MdeModulePkg/Library/CustomizedDisplayLib/CustomizedDisplayLib.inf + + # + # Uncomment (and comment out the next line) For RealView Debugger. The Standard IO window + # in the debugger will show load and unload commands for symbols. You can cut and paste this + # into the command window to load symbols. We should be able to use a script to do this, but + # the version of RVD I have does not support scripts accessing system memory. + # + #PeCoffExtraActionLib|ArmPkg/Library/RvdPeCoffExtraActionLib/RvdPeCoffExtraActionLib.inf + PeCoffExtraActionLib|ArmPkg/Library/DebugPeCoffExtraActionLib/DebugPeCoffExtraActionLib.inf + #PeCoffExtraActionLib|MdePkg/Library/BasePeCoffExtraActionLibNull/BasePeCoffExtraActionLibNull.inf + + DebugAgentLib|MdeModulePkg/Library/DebugAgentLibNull/DebugAgentLibNull.inf + DebugAgentTimerLib|EmbeddedPkg/Library/DebugAgentTimerLibNull/DebugAgentTimerLibNull.inf + + DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf + SortLib|MdeModulePkg/Library/UefiSortLib/UefiSortLib.inf + FileExplorerLib|MdeModulePkg/Library/FileExplorerLib/FileExplorerLib.inf + + DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf + SortLib|MdeModulePkg/Library/UefiSortLib/UefiSortLib.inf + FileExplorerLib|MdeModulePkg/Library/FileExplorerLib/FileExplorerLib.inf + +[LibraryClasses.common.SEC] + HobLib|MdePkg/Library/PeiHobLib/PeiHobLib.inf + PeiServicesTablePointerLib|ArmPkg/Library/PeiServicesTablePointerLib/PeiServicesTablePointerLib.inf + MemoryAllocationLib|MdePkg/Library/PeiMemoryAllocationLib/PeiMemoryAllocationLib.inf + + PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf + ArmPlatformLib|OpenPlatformPkg/Platforms/AMD/Styx/Library/AmdStyxLib/AmdStyxLibSec.inf + + ArmPlatformSecExtraActionLib|ArmPlatformPkg/Library/DebugSecExtraActionLib/DebugSecExtraActionLib.inf + + DebugAgentLib|ArmPkg/Library/DebugAgentSymbolsBaseLib/DebugAgentSymbolsBaseLib.inf + DefaultExceptionHandlerLib|ArmPkg/Library/DefaultExceptionHandlerLib/DefaultExceptionHandlerLibBase.inf + + # Trustzone Support + ArmTrustedMonitorLib|ArmPlatformPkg/Library/ArmTrustedMonitorLibNull/ArmTrustedMonitorLibNull.inf + ArmGicArchLib|ArmPkg/Library/ArmGicArchSecLib/ArmGicArchSecLib.inf + +[LibraryClasses.common.PEIM, LibraryClasses.common.SEC] + MemoryInitPeiLib|OpenPlatformPkg/Platforms/AMD/Styx/Library/MemoryInitPei/MemoryInitPeiLib.inf + +[LibraryClasses.common.PEI_CORE] + PcdLib|MdePkg/Library/PeiPcdLib/PeiPcdLib.inf + HobLib|MdePkg/Library/PeiHobLib/PeiHobLib.inf + MemoryAllocationLib|MdePkg/Library/PeiMemoryAllocationLib/PeiMemoryAllocationLib.inf + PeiCoreEntryPoint|MdePkg/Library/PeiCoreEntryPoint/PeiCoreEntryPoint.inf + PerformanceLib|MdeModulePkg/Library/PeiPerformanceLib/PeiPerformanceLib.inf + ReportStatusCodeLib|MdeModulePkg/Library/PeiReportStatusCodeLib/PeiReportStatusCodeLib.inf + OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf + PeCoffGetEntryPointLib|MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeCoffGetEntryPointLib.inf + UefiDecompressLib|MdePkg/Library/BaseUefiDecompressLib/BaseUefiDecompressLib.inf + ExtractGuidedSectionLib|MdePkg/Library/PeiExtractGuidedSectionLib/PeiExtractGuidedSectionLib.inf + + PeiServicesTablePointerLib|ArmPkg/Library/PeiServicesTablePointerLib/PeiServicesTablePointerLib.inf + +[LibraryClasses.common.PEIM] + PcdLib|MdePkg/Library/PeiPcdLib/PeiPcdLib.inf + HobLib|MdePkg/Library/PeiHobLib/PeiHobLib.inf + MemoryAllocationLib|MdePkg/Library/PeiMemoryAllocationLib/PeiMemoryAllocationLib.inf + PeimEntryPoint|MdePkg/Library/PeimEntryPoint/PeimEntryPoint.inf + PerformanceLib|MdeModulePkg/Library/PeiPerformanceLib/PeiPerformanceLib.inf + ReportStatusCodeLib|MdeModulePkg/Library/PeiReportStatusCodeLib/PeiReportStatusCodeLib.inf + OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf + PeCoffGetEntryPointLib|MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeCoffGetEntryPointLib.inf + PeiResourcePublicationLib|MdePkg/Library/PeiResourcePublicationLib/PeiResourcePublicationLib.inf + UefiDecompressLib|MdePkg/Library/BaseUefiDecompressLib/BaseUefiDecompressLib.inf + ExtractGuidedSectionLib|MdePkg/Library/PeiExtractGuidedSectionLib/PeiExtractGuidedSectionLib.inf + + PeiServicesTablePointerLib|ArmPkg/Library/PeiServicesTablePointerLib/PeiServicesTablePointerLib.inf + +[LibraryClasses.common.DXE_CORE] + HobLib|MdePkg/Library/DxeCoreHobLib/DxeCoreHobLib.inf + MemoryAllocationLib|MdeModulePkg/Library/DxeCoreMemoryAllocationLib/DxeCoreMemoryAllocationLib.inf + DxeCoreEntryPoint|MdePkg/Library/DxeCoreEntryPoint/DxeCoreEntryPoint.inf + ReportStatusCodeLib|IntelFrameworkModulePkg/Library/DxeReportStatusCodeLibFramework/DxeReportStatusCodeLib.inf + ExtractGuidedSectionLib|MdePkg/Library/DxeExtractGuidedSectionLib/DxeExtractGuidedSectionLib.inf + UefiDecompressLib|MdePkg/Library/BaseUefiDecompressLib/BaseUefiDecompressLib.inf + PerformanceLib|MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLib.inf + +[LibraryClasses.common.DXE_DRIVER] + ReportStatusCodeLib|IntelFrameworkModulePkg/Library/DxeReportStatusCodeLibFramework/DxeReportStatusCodeLib.inf + SecurityManagementLib|MdeModulePkg/Library/DxeSecurityManagementLib/DxeSecurityManagementLib.inf + PerformanceLib|MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf + MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf + +[LibraryClasses.common.DXE_RUNTIME_DRIVER] + HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf + MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf + ReportStatusCodeLib|IntelFrameworkModulePkg/Library/DxeReportStatusCodeLibFramework/DxeReportStatusCodeLib.inf + CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf + +[LibraryClasses.common.UEFI_APPLICATION] + UefiDecompressLib|IntelFrameworkModulePkg/Library/BaseUefiTianoCustomDecompressLib/BaseUefiTianoCustomDecompressLib.inf + PerformanceLib|MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf + MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf + HiiLib|MdeModulePkg/Library/UefiHiiLib/UefiHiiLib.inf + ReportStatusCodeLib|MdeModulePkg/Library/DxeReportStatusCodeLib/DxeReportStatusCodeLib.inf + +[LibraryClasses.common.UEFI_DRIVER] + ReportStatusCodeLib|IntelFrameworkModulePkg/Library/DxeReportStatusCodeLibFramework/DxeReportStatusCodeLib.inf + UefiDecompressLib|IntelFrameworkModulePkg/Library/BaseUefiTianoCustomDecompressLib/BaseUefiTianoCustomDecompressLib.inf + ExtractGuidedSectionLib|MdePkg/Library/DxeExtractGuidedSectionLib/DxeExtractGuidedSectionLib.inf + PerformanceLib|MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf + MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf + +[LibraryClasses.ARM] + # + # It is not possible to prevent the ARM compiler for generic intrinsic functions. + # This library provides the instrinsic functions generate by a given compiler. + # [LibraryClasses.ARM] and NULL mean link this library into all ARM images. + # + NULL|ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf + +[LibraryClasses.AARCH64] + NULL|ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf + NULL|MdePkg/Library/BaseStackCheckLib/BaseStackCheckLib.inf + +################################################################################################### +# BuildOptions Section - Define the module specific tool chain flags that should be used as +# the default flags for a module. These flags are appended to any +# standard flags that are defined by the build process. +################################################################################################### + +[BuildOptions] + RVCT:RELEASE_*_*_CC_FLAGS = -DMDEPKG_NDEBUG + GCC:RELEASE_*_*_CC_FLAGS = -DMDEPKG_NDEBUG + + *_*_*_ASL_FLAGS = -tc -li -l -so + *_*_*_ASLPP_FLAGS = -x c -E -P $(ARCHCC_FLAGS) + *_*_*_ASLCC_FLAGS = -x c $(ARCHCC_FLAGS) + + GCC:*_*_AARCH64_ARCHCC_FLAGS = -DDO_XGBE=$(DO_XGBE) -DDO_KCS=$(DO_KCS) -DNUM_CORES=$(NUM_CORES) -DARM_CPU_AARCH64 + GCC:*_*_AARCH64_PP_FLAGS = -DDO_XGBE=$(DO_XGBE) -DDO_KCS=$(DO_KCS) -DNUM_CORES=$(NUM_CORES) -DARM_CPU_AARCH64 + + GCC:*_*_AARCH64_PLATFORM_FLAGS = -I$(BIN_DIR)/OpenPlatformPkg/Platforms/AMD/Styx/AcpiTables/AcpiAml/OUTPUT + +[BuildOptions.common.EDKII.DXE_RUNTIME_DRIVER] + GCC:*_*_AARCH64_DLINK_FLAGS = -z common-page-size=0x10000 + +################################################################################ +# +# Pcd Section - list of all EDK II PCD Entries defined by this Platform +# +################################################################################ + +[PcdsFeatureFlag.common] + gEfiMdePkgTokenSpaceGuid.PcdComponentNameDisable|TRUE + gEfiMdePkgTokenSpaceGuid.PcdDriverDiagnosticsDisable|TRUE + gEfiMdePkgTokenSpaceGuid.PcdComponentName2Disable|TRUE + gEfiMdePkgTokenSpaceGuid.PcdDriverDiagnostics2Disable|TRUE + + # All pages are cached by default + gEmbeddedTokenSpaceGuid.PcdCacheEnable|TRUE + + # Use the Vector Table location in CpuDxe. We will not copy the Vector Table at PcdCpuVectorBaseAddress + gArmTokenSpaceGuid.PcdRelocateVectorTable|FALSE + + gEmbeddedTokenSpaceGuid.PcdPrePiProduceMemoryTypeInformationHob|TRUE + + gEfiMdeModulePkgTokenSpaceGuid.PcdTurnOffUsbLegacySupport|TRUE + + ## If TRUE, Graphics Output Protocol will be installed on virtual handle + ## created by ConsplitterDxe. It could be set FALSE to save size. + gEfiMdeModulePkgTokenSpaceGuid.PcdConOutGopSupport|FALSE + +[PcdsFixedAtBuild.common] + gEfiMdePkgTokenSpaceGuid.PcdMaximumUnicodeStringLength|1000000 + gEfiMdePkgTokenSpaceGuid.PcdMaximumAsciiStringLength|1000000 + gEfiMdePkgTokenSpaceGuid.PcdMaximumLinkedListLength|1000000 + gEfiMdePkgTokenSpaceGuid.PcdSpinLockTimeout|10000000 + gEfiMdePkgTokenSpaceGuid.PcdDebugClearMemoryValue|0xAF + gEfiMdePkgTokenSpaceGuid.PcdPerformanceLibraryPropertyMask|1 + gEfiMdePkgTokenSpaceGuid.PcdPostCodePropertyMask|0 + gEfiMdePkgTokenSpaceGuid.PcdUefiLibMaxPrintBufferSize|320 + + # DEBUG_ASSERT_ENABLED 0x01 + # DEBUG_PRINT_ENABLED 0x02 + # DEBUG_CODE_ENABLED 0x04 + # CLEAR_MEMORY_ENABLED 0x08 + # ASSERT_BREAKPOINT_ENABLED 0x10 + # ASSERT_DEADLOOP_ENABLED 0x20 +!if $(TARGET) == RELEASE + gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x21 +!else + gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x2f +!endif + + # DEBUG_INIT 0x00000001 // Initialization + # DEBUG_WARN 0x00000002 // Warnings + # DEBUG_LOAD 0x00000004 // Load events + # DEBUG_FS 0x00000008 // EFI File system + # DEBUG_POOL 0x00000010 // Alloc & Free's + # DEBUG_PAGE 0x00000020 // Alloc & Free's + # DEBUG_INFO 0x00000040 // Verbose + # DEBUG_DISPATCH 0x00000080 // PEI/DXE Dispatchers + # DEBUG_VARIABLE 0x00000100 // Variable + # DEBUG_BM 0x00000400 // Boot Manager + # DEBUG_BLKIO 0x00001000 // BlkIo Driver + # DEBUG_NET 0x00004000 // SNI Driver + # DEBUG_UNDI 0x00010000 // UNDI Driver + # DEBUG_LOADFILE 0x00020000 // UNDI Driver + # DEBUG_EVENT 0x00080000 // Event messages + # DEBUG_GCD 0x00100000 // Global Coherency Database changes + # DEBUG_CACHE 0x00200000 // Memory range cachability changes + # DEBUG_ERROR 0x80000000 // Error + gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000000F + + gEfiMdePkgTokenSpaceGuid.PcdReportStatusCodePropertyMask|0x07 + + # + # Optional feature to help prevent EFI memory map fragments + # Turned on and off via: PcdPrePiProduceMemoryTypeInformationHob + # Values are in EFI Pages (4K). DXE Core will make sure that + # at least this much of each type of memory can be allocated + # from a single memory range. This way you only end up with + # maximum of two fragements for each type in the memory map + # (the memory used, and the free memory that was prereserved + # but not used). + # + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiACPIReclaimMemory|0 + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiACPIMemoryNVS|0 + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiReservedMemoryType|0 + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiRuntimeServicesData|1000 + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiRuntimeServicesCode|1000 + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiBootServicesCode|400 + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiBootServicesData|12000 + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiLoaderCode|20 + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiLoaderData|0 + + gEfiMdeModulePkgTokenSpaceGuid.PcdResetOnMemoryTypeInformationChange|FALSE + gEfiMdeModulePkgTokenSpaceGuid.PcdBootManagerMenuFile|{ 0x21, 0xaa, 0x2c, 0x46, 0x14, 0x76, 0x03, 0x45, 0x83, 0x6e, 0x8a, 0xb6, 0xf4, 0x66, 0x23, 0x31 } + gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdShellFile|{ 0x83, 0xA5, 0x04, 0x7C, 0x3E, 0x9E, 0x1C, 0x4F, 0xAD, 0x65, 0xE0, 0x52, 0x68, 0xD0, 0xB4, 0xD1 } + + gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVendor|L"SoftIron Overdrive 1000" + + # Number of configured cores + gArmPlatformTokenSpaceGuid.PcdCoreCount|$(NUM_CORES) + + # Stacks for MPCores in Normal World + gArmPlatformTokenSpaceGuid.PcdCPUCoresStackBase|0x8001680000 + gArmPlatformTokenSpaceGuid.PcdCPUCorePrimaryStackSize|0x10000 + gArmPlatformTokenSpaceGuid.PcdCPUCoreSecondaryStackSize|0x800 + + # Declare system memory base + gArmTokenSpaceGuid.PcdSystemMemoryBase|0x8000000000 + + # Size of the region used by UEFI in permanent memory (Reserved 64MB) + gArmPlatformTokenSpaceGuid.PcdSystemMemoryUefiRegionSize|0x04000000 + + # 40 bits of VA space is sufficient to support up to 512 GB of RAM in the + # range 0x80_0000_0000 - 0xFF_FFFF_FFFF (all platform and PCI MMIO is below + # that) + gEmbeddedTokenSpaceGuid.PcdPrePiCpuMemorySize|40 + + # + # ARM PrimeCell + # + + ## PL011 - Serial Terminal (Atlas UART) + gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterBase|0x0E1010000 + gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate|115200 + gEfiMdePkgTokenSpaceGuid.PcdUartDefaultReceiveFifoDepth|0 + # serial port is clocked at 100MHz + gArmPlatformTokenSpaceGuid.PL011UartClkInHz|100000000 + gEfiMdePkgTokenSpaceGuid.PcdDefaultTerminalType|4 + + gAmdStyxTokenSpaceGuid.PcdSerialDbgRegisterBase|0x0E1010000 + gAmdStyxTokenSpaceGuid.PcdUartDbgBaudRate|115200 + + # + # ARM General Interrupt Controller + # + gArmTokenSpaceGuid.PcdGicDistributorBase|0xE1110000 + gArmTokenSpaceGuid.PcdGicInterruptInterfaceBase|0xE112F000 + + # + # ARM Architectual Timer Frequency + # + gArmTokenSpaceGuid.PcdArmArchTimerFreqInHz|187500000 + + # + # Bitmask for ports implemented on the SATA controller + # (2 ports active on Overdrive 1000: 0b00000011 = 0x03) + # + gAmdStyxTokenSpaceGuid.PcdSataPi|0x03 + + # Only PcdSataPortCount or PcdSata1PortCount are used. The selection is + # made by #define in Drivers/SataControllerDxe/InitController.c + gAmdStyxTokenSpaceGuid.PcdSataPortCount|2 + gAmdStyxTokenSpaceGuid.PcdSata1PortCount|0 + + # PCIe Support + gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress|0xF0000000 + + gArmTokenSpaceGuid.PcdPciBusMin|0x0 + gArmTokenSpaceGuid.PcdPciBusMax|0xFF + + gArmTokenSpaceGuid.PcdPciIoBase|0x1000 + gArmTokenSpaceGuid.PcdPciIoSize|0xF000 + gArmTokenSpaceGuid.PcdPciIoTranslation|0xEFFF0000 + gEmbeddedTokenSpaceGuid.PcdPrePiCpuIoSize|16 + + gArmTokenSpaceGuid.PcdPciMmio32Base|0x40000000 + gArmTokenSpaceGuid.PcdPciMmio32Size|0x80000000 + gArmTokenSpaceGuid.PcdPciMmio32Translation|0x0 + + gArmTokenSpaceGuid.PcdPciMmio64Base|0x100000000 + gArmTokenSpaceGuid.PcdPciMmio64Size|0x7F00000000 + gArmTokenSpaceGuid.PcdPciMmio64Translation|0x0 + + ## Use PCI emulation for ATA PassThru + # gEfiMdeModulePkgTokenSpaceGuid.PcdAtaPassThruPciEmulation|TRUE + + ## ACPI (no tables < 4GB) + gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiExposedTableVersions|0x20 + +!if $(DO_PSCI) + gAmdStyxTokenSpaceGuid.PcdPsciOsSupport|TRUE +!else + gAmdStyxTokenSpaceGuid.PcdPsciOsSupport|FALSE +!endif + +!if $(DO_ISCP) + gAmdStyxTokenSpaceGuid.PcdIscpSupport|TRUE +!else + gAmdStyxTokenSpaceGuid.PcdIscpSupport|FALSE +!endif + + # SMBIOS 3.0 only + gEfiMdeModulePkgTokenSpaceGuid.PcdSmbiosEntryPointProvideMethod|0x2 + + gAmdModulePkgTokenSpaceGuid.PcdSataNumChPerSerdes|2 + gAmdModulePkgTokenSpaceGuid.PcdSataSerdesBase|0xE1200000 + gAmdModulePkgTokenSpaceGuid.PcdSataSerdesOffset|0x00010000 + +!if $(DO_XGBE) + gAmdModulePkgTokenSpaceGuid.PcdXgbeEnable|TRUE + + gAmdModulePkgTokenSpaceGuid.PcdPort0PhyMode|0 + gAmdModulePkgTokenSpaceGuid.PcdPort1PhyMode|0 + gAmdModulePkgTokenSpaceGuid.PcdPort0NetSpeed|1 + gAmdModulePkgTokenSpaceGuid.PcdPort1NetSpeed|1 + +[PcdsDynamicDefault.common] + gAmdStyxTokenSpaceGuid.PcdEthMacA|0x02A1A2A3A4A5 + gAmdStyxTokenSpaceGuid.PcdEthMacB|0x02B1B2B3B4B5 + +[PcdsPatchableInModule] + gAmdModulePkgTokenSpaceGuid.PcdXgbeUseMacFromIscp|TRUE + gAmdModulePkgTokenSpaceGuid.PcdXgbeRev|2 +!endif + +[PcdsPatchableInModule] +# PCIe Configuration: x4x2x2 (=2 See Include/FDKGionb.h) + gAmdModulePkgTokenSpaceGuid.PcdPcieCoreConfiguration|2 + gAmdModulePkgTokenSpaceGuid.PcdPciePort0Present|0 + gAmdModulePkgTokenSpaceGuid.PcdPciePort1Present|1 + gAmdModulePkgTokenSpaceGuid.PcdPciePort2Present|1 + gAmdModulePkgTokenSpaceGuid.PcdPcieHardcodeEnumeration|TRUE + +[PcdsDynamicDefault.common] + gAmdStyxTokenSpaceGuid.PcdSocCoreCount|$(NUM_CORES) + gArmTokenSpaceGuid.PcdSystemMemorySize|0x0400000000 + + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64|0x0 + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64|0x0 + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase64|0x0 + +[PcdsDynamicExHii.common.DEFAULT] + gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut|L"Timeout"|gEfiGlobalVariableGuid|0x0|5 + +################################################################################ +# +# Components Section - list of all EDK II Modules needed by this Platform +# +################################################################################ +[Components.common] + + # + # PEI Phase modules + # + ArmPlatformPkg/PrePeiCore/PrePeiCoreUniCore.inf + MdeModulePkg/Core/Pei/PeiMain.inf + MdeModulePkg/Universal/PCD/Pei/Pcd.inf { + <LibraryClasses> + PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf + } + ArmPlatformPkg/PlatformPei/PlatformPeim.inf + AmdModulePkg/Iscp/IscpPei.inf + OpenPlatformPkg/Platforms/AMD/Styx/Drivers/PlatInitPei/PlatInitPei.inf + ArmPlatformPkg/MemoryInitPei/MemoryInitPeim.inf + ArmPkg/Drivers/CpuPei/CpuPei.inf + MdeModulePkg/Universal/Variable/Pei/VariablePei.inf + MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf { + <LibraryClasses> + NULL|IntelFrameworkModulePkg/Library/LzmaCustomDecompressLib/LzmaCustomDecompressLib.inf + } + + # + # DXE + # + MdeModulePkg/Core/Dxe/DxeMain.inf { + <LibraryClasses> + NULL|MdeModulePkg/Library/DxeCrc32GuidedSectionExtractLib/DxeCrc32GuidedSectionExtractLib.inf + } + MdeModulePkg/Universal/PCD/Dxe/Pcd.inf { + <LibraryClasses> + PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf + } + + # + # Architectural Protocols + # + ArmPkg/Drivers/CpuDxe/CpuDxe.inf + MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf + MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf + MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf + MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf + MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCounterRuntimeDxe.inf + EmbeddedPkg/ResetRuntimeDxe/ResetRuntimeDxe.inf + EmbeddedPkg/RealTimeClockRuntimeDxe/RealTimeClockRuntimeDxe.inf + EmbeddedPkg/MetronomeDxe/MetronomeDxe.inf + MdeModulePkg/Universal/EbcDxe/EbcDxe.inf + + # + # Console IO support + # + MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf + MdeModulePkg/Universal/SerialDxe/SerialDxe.inf + + MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf + MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf + + ArmPkg/Drivers/ArmGic/ArmGicDxe.inf + ArmPkg/Drivers/TimerDxe/TimerDxe.inf + + # + # Environment Variables Protocol + # + MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf { + <LibraryClasses> + AuthVariableLib|MdeModulePkg/Library/AuthVariableLibNull/AuthVariableLibNull.inf + TpmMeasurementLib|MdeModulePkg/Library/TpmMeasurementLibNull/TpmMeasurementLibNull.inf + VarCheckLib|MdeModulePkg/Library/VarCheckLib/VarCheckLib.inf + NULL|MdeModulePkg/Library/VarCheckUefiLib/VarCheckUefiLib.inf + } + OpenPlatformPkg/Platforms/AMD/Styx/Drivers/StyxSpiFvDxe/StyxSpiFvDxe.inf + + # + # Iscp support + # + AmdModulePkg/Iscp/IscpDxe.inf + + # + # FDT support + # + OpenPlatformPkg/Platforms/AMD/Styx/Drivers/FdtDxe/FdtDxe.inf { + <LibraryClasses> + # deprecated BdsLib from the ARM BDS + BdsLib|ArmPkg/Library/BdsLib/BdsLib.inf + FdtLib|EmbeddedPkg/Library/FdtLib/FdtLib.inf + } + + # + # PCI support + # + AmdModulePkg/Gionb/Gionb.inf + ArmPkg/Drivers/ArmPciCpuIo2Dxe/ArmPciCpuIo2Dxe.inf + MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciHostBridgeDxe.inf + MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf + + # + # MP-Boot: ACPI[Parking Protocol] + FDT[Spin-Table] + # + OpenPlatformPkg/Platforms/AMD/Styx/Drivers/MpBootDxe/MpBootDxe.inf + + # + # AHCI Support + # + MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf + MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf + MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBusDxe.inf + MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe.inf + OpenPlatformPkg/Platforms/AMD/Styx/Drivers/SataControllerDxe/SataControllerDxe.inf + + # + # USB Support + # + MdeModulePkg/Bus/Pci/UhciDxe/UhciDxe.inf + MdeModulePkg/Bus/Pci/EhciDxe/EhciDxe.inf + MdeModulePkg/Bus/Pci/XhciDxe/XhciDxe.inf + MdeModulePkg/Bus/Usb/UsbBusDxe/UsbBusDxe.inf + MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassStorageDxe.inf + +!if $(DO_XGBE) + # + # SNP support + # + AmdModulePkg/SnpDxe/SnpDxePort0.inf + AmdModulePkg/SnpDxe/SnpDxePort1.inf +!endif + + # + # Marvell Yukon Ethernet (Overdrive 1000 has 88e8059) + # + OpenPlatformPkg/Drivers/Net/MarvellYukonDxe/MarvellYukonDxe.inf + + # + # Networking stack + # + MdeModulePkg/Universal/Network/SnpDxe/SnpDxe.inf + MdeModulePkg/Universal/Network/DpcDxe/DpcDxe.inf + MdeModulePkg/Universal/Network/ArpDxe/ArpDxe.inf + MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Dxe.inf +# MdeModulePkg/Universal/Network/Ip4ConfigDxe/Ip4ConfigDxe.inf + MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Dxe.inf + MdeModulePkg/Universal/Network/MnpDxe/MnpDxe.inf { + <PcdsFixedAtBuild> + gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x21 + } + MdeModulePkg/Universal/Network/VlanConfigDxe/VlanConfigDxe.inf + MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Dxe.inf + MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Dxe.inf + MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Dxe.inf + MdeModulePkg/Universal/Network/UefiPxeBcDxe/UefiPxeBcDxe.inf +## Bug https://bugs.linaro.org/show_bug.cgi?id=2239 +# MdeModulePkg/Universal/Network/IScsiDxe/IScsiDxe.inf + + # + # Core Info + # + OpenPlatformPkg/Platforms/AMD/Styx/Drivers/PlatInitDxe/PlatInitDxe.inf + + # + # ACPI Support + # + MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf + OpenPlatformPkg/Platforms/AMD/Styx/AcpiTables/AcpiAml.inf + OpenPlatformPkg/Platforms/AMD/Styx/Drivers/AcpiPlatformDxe/AcpiPlatformDxe.inf + + # + # SMBIOS Support + # + MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf + OpenPlatformPkg/Platforms/AMD/Styx/Drivers/PlatformSmbiosDxe/PlatformSmbiosDxe.inf + + # + # FAT filesystem + GPT/MBR partitioning + # + MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf + MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf + FatPkg/EnhancedFatDxe/Fat.inf + MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf + + # + # Bds + # + MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf + MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf + MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf + MdeModulePkg/Universal/BdsDxe/BdsDxe.inf + MdeModulePkg/Application/UiApp/UiApp.inf { + <LibraryClasses> + NULL|MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf + NULL|MdeModulePkg/Library/BootManagerUiLib/BootManagerUiLib.inf + NULL|MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanceManagerUiLib.inf + } + + # + # Crypto Accelerator support (RNG only) + # + OpenPlatformPkg/Platforms/AMD/Styx/Drivers/StyxRngDxe/StyxRngDxe.inf + + # + # UEFI application (Shell Embedded Boot Loader) + # + ShellPkg/Application/Shell/Shell.inf { + <LibraryClasses> + ShellCommandLib|ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.inf + NULL|ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.inf + NULL|ShellPkg/Library/UefiShellLevel1CommandsLib/UefiShellLevel1CommandsLib.inf + NULL|ShellPkg/Library/UefiShellLevel3CommandsLib/UefiShellLevel3CommandsLib.inf + NULL|ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.inf + NULL|ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.inf + NULL|ShellPkg/Library/UefiShellInstall1CommandsLib/UefiShellInstall1CommandsLib.inf + NULL|ShellPkg/Library/UefiShellNetwork1CommandsLib/UefiShellNetwork1CommandsLib.inf + NULL|ShellPkg/Library/UefiShellTftpCommandLib/UefiShellTftpCommandLib.inf + HandleParsingLib|ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.inf + PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf + BcfgCommandLib|ShellPkg/Library/UefiShellBcfgCommandLib/UefiShellBcfgCommandLib.inf + + FileHandleLib|MdePkg/Library/UefiFileHandleLib/UefiFileHandleLib.inf + ShellLib|ShellPkg/Library/UefiShellLib/UefiShellLib.inf + + <PcdsFixedAtBuild> + gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0xFF + gEfiShellPkgTokenSpaceGuid.PcdShellLibAutoInitialize|FALSE + gEfiMdePkgTokenSpaceGuid.PcdUefiLibMaxPrintBufferSize|8000 + } diff --git a/Platforms/AMD/Styx/Overdrive1000Board/Overdrive1000Board.fdf b/Platforms/AMD/Styx/Overdrive1000Board/Overdrive1000Board.fdf new file mode 100644 index 0000000..95fd835 --- /dev/null +++ b/Platforms/AMD/Styx/Overdrive1000Board/Overdrive1000Board.fdf @@ -0,0 +1,412 @@ +# +# Copyright (c) 2014 - 2016, AMD Incorporated. 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. +# + +################################################################################ +# +# FD Section +# The [FD] Section is made up of the definition statements and a +# description of what goes into the Flash Device Image. Each FD section +# defines one flash "device" image. A flash device image may be one of +# the following: Removable media bootable image (like a boot floppy +# image,) an Option ROM image (that would be "flashed" into an add-in +# card,) a System "Flash" image (that would be burned into a system's +# flash) or an Update ("Capsule") image that will be used to update and +# existing system flash. +# +################################################################################ + +[FD.Overdrive1000_ROM] +BaseAddress = 0x8000C80000|gArmTokenSpaceGuid.PcdFdBaseAddress # The base address of the Firmware in NOR Flash. +Size = 0x00500000|gArmTokenSpaceGuid.PcdFdSize # The size in bytes of the FLASH Device +ErasePolarity = 1 + +# This one is tricky, it must be: BlockSize * NumBlocks = Size +BlockSize = 0x00001000 +NumBlocks = 0x500 + +################################################################################ +# +# Following are lists of FD Region layout which correspond to the locations of different +# images within the flash device. +# +# Regions must be defined in ascending order and may not overlap. +# +# A Layout Region start with a eight digit hex offset (leading "0x" required) followed by +# the pipe "|" character, followed by the size of the region, also in hex with the leading +# "0x" characters. Like: +# Offset|Size +# PcdOffsetCName|PcdSizeCName +# RegionType <FV, DATA, or FILE> +# +################################################################################ + +0x00000000|0x00200000 +FILE = OpenPlatformPkg/Platforms/AMD/Styx/Overdrive1000Board/Binary/PreUefiFirmware.bin + +0x00200000|0x00260000 +gArmTokenSpaceGuid.PcdFvBaseAddress|gArmTokenSpaceGuid.PcdFvSize +FV = STYX_EFI + +!include OpenPlatformPkg/Platforms/AMD/Styx/Common/Varstore.fdf.inc + +################################################################################ +# +# FV Section +# +# [FV] section is used to define what components or modules are placed within a flash +# device file. This section also defines order the components and modules are positioned +# within the image. The [FV] section consists of define statements, set statements and +# module statements. +# +################################################################################ + +[FV.FvMain] +FvNameGuid = 94f067ae-2aa6-4b30-aa07-4e47fe518bb8 +BlockSize = 0x40 +NumBlocks = 0 # This FV gets compressed so make it just big enough +FvAlignment = 16 # FV alignment and FV attributes setting. +ERASE_POLARITY = 1 +MEMORY_MAPPED = TRUE +STICKY_WRITE = TRUE +LOCK_CAP = TRUE +LOCK_STATUS = TRUE +WRITE_DISABLED_CAP = TRUE +WRITE_ENABLED_CAP = TRUE +WRITE_STATUS = TRUE +WRITE_LOCK_CAP = TRUE +WRITE_LOCK_STATUS = TRUE +READ_DISABLED_CAP = TRUE +READ_ENABLED_CAP = TRUE +READ_STATUS = TRUE +READ_LOCK_CAP = TRUE +READ_LOCK_STATUS = TRUE + + INF MdeModulePkg/Core/Dxe/DxeMain.inf + INF MdeModulePkg/Universal/PCD/Dxe/Pcd.inf + + # + # PI DXE Drivers producing Architectural Protocols (EFI Services) + # + INF ArmPkg/Drivers/CpuDxe/CpuDxe.inf + INF MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf + INF MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf + INF MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf + INF MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf + INF MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCounterRuntimeDxe.inf + INF EmbeddedPkg/ResetRuntimeDxe/ResetRuntimeDxe.inf + INF EmbeddedPkg/RealTimeClockRuntimeDxe/RealTimeClockRuntimeDxe.inf + INF EmbeddedPkg/MetronomeDxe/MetronomeDxe.inf + INF MdeModulePkg/Universal/EbcDxe/EbcDxe.inf + + INF MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf + INF MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf + + # + # Console IO support + # + INF MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf + INF MdeModulePkg/Universal/SerialDxe/SerialDxe.inf + + INF ArmPkg/Drivers/ArmGic/ArmGicDxe.inf + INF ArmPkg/Drivers/TimerDxe/TimerDxe.inf + + # + # FAT filesystem + GPT/MBR partitioning + # + INF MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf + INF MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf + INF FatPkg/EnhancedFatDxe/Fat.inf + INF MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf + + # + # Environment Variables Protocol + # + INF MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf + INF OpenPlatformPkg/Platforms/AMD/Styx/Drivers/StyxSpiFvDxe/StyxSpiFvDxe.inf + + # + # Iscp support + # + INF AmdModulePkg/Iscp/IscpDxe.inf + + # + # FDT support + # + INF OpenPlatformPkg/Platforms/AMD/Styx/Drivers/FdtDxe/FdtDxe.inf + + FILE FREEFORM = PCD(gAmdStyxTokenSpaceGuid.PcdStyxFdt) { + SECTION RAW = OpenPlatformPkg/Platforms/AMD/Styx/Overdrive1000Board/FdtBlob/styx-overdrive1000.dtb + } + + # + # PCI support + # + INF AmdModulePkg/Gionb/Gionb.inf + INF ArmPkg/Drivers/ArmPciCpuIo2Dxe/ArmPciCpuIo2Dxe.inf + INF MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciHostBridgeDxe.inf + INF MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf + + # + # AHCI Support + # + INF MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf + INF MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf + INF MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBusDxe.inf + INF MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe.inf + INF OpenPlatformPkg/Platforms/AMD/Styx/Drivers/SataControllerDxe/SataControllerDxe.inf + + # + # USB Support + # + INF MdeModulePkg/Bus/Pci/UhciDxe/UhciDxe.inf + INF MdeModulePkg/Bus/Pci/EhciDxe/EhciDxe.inf + INF MdeModulePkg/Bus/Pci/XhciDxe/XhciDxe.inf + INF MdeModulePkg/Bus/Usb/UsbBusDxe/UsbBusDxe.inf + INF MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassStorageDxe.inf + +!if $(DO_XGBE) + # + # SNP support + # + INF AmdModulePkg/SnpDxe/SnpDxePort0.inf + INF AmdModulePkg/SnpDxe/SnpDxePort1.inf +!endif + + # + # Marvell Ethernet Driver (Overdrive 1000) + # + INF OpenPlatformPkg/Drivers/Net/MarvellYukonDxe/MarvellYukonDxe.inf + + # + # Networking stack + # + INF MdeModulePkg/Universal/Network/SnpDxe/SnpDxe.inf + INF MdeModulePkg/Universal/Network/DpcDxe/DpcDxe.inf + INF MdeModulePkg/Universal/Network/ArpDxe/ArpDxe.inf + INF MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Dxe.inf +# INF MdeModulePkg/Universal/Network/Ip4ConfigDxe/Ip4ConfigDxe.inf + INF MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Dxe.inf + INF MdeModulePkg/Universal/Network/MnpDxe/MnpDxe.inf + INF MdeModulePkg/Universal/Network/VlanConfigDxe/VlanConfigDxe.inf + INF MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Dxe.inf + INF MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Dxe.inf + INF MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Dxe.inf + INF MdeModulePkg/Universal/Network/UefiPxeBcDxe/UefiPxeBcDxe.inf +## Bug https://bugs.linaro.org/show_bug.cgi?id=2239 +# INF MdeModulePkg/Universal/Network/IScsiDxe/IScsiDxe.inf + + # + # Core Info + # + INF OpenPlatformPkg/Platforms/AMD/Styx/Drivers/PlatInitDxe/PlatInitDxe.inf + + # + # ACPI Support + # + INF MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf + INF RuleOverride=ACPITABLE OpenPlatformPkg/Platforms/AMD/Styx/AcpiTables/AcpiAml.inf + INF OpenPlatformPkg/Platforms/AMD/Styx/Drivers/AcpiPlatformDxe/AcpiPlatformDxe.inf + + # + # MP-Boot: ACPI[Parking Protocol] + FDT[Spin-Table] + # + INF OpenPlatformPkg/Platforms/AMD/Styx/Drivers/MpBootDxe/MpBootDxe.inf + + # + # SMBIOS Support + # + INF MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf + INF OpenPlatformPkg/Platforms/AMD/Styx/Drivers/PlatformSmbiosDxe/PlatformSmbiosDxe.inf + + # + # UEFI application (Shell Embedded Boot Loader) + # + INF ShellPkg/Application/Shell/Shell.inf + + # + # Bds + # + INF MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf + INF MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf + INF MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf + INF MdeModulePkg/Universal/BdsDxe/BdsDxe.inf + INF MdeModulePkg/Application/UiApp/UiApp.inf + + # + # Crypto Accelerator support (RNG only) + # + INF OpenPlatformPkg/Platforms/AMD/Styx/Drivers/StyxRngDxe/StyxRngDxe.inf + +[FV.STYX_EFI] +FvAlignment = 16 +ERASE_POLARITY = 1 +MEMORY_MAPPED = TRUE +STICKY_WRITE = TRUE +LOCK_CAP = TRUE +LOCK_STATUS = TRUE +WRITE_DISABLED_CAP = TRUE +WRITE_ENABLED_CAP = TRUE +WRITE_STATUS = TRUE +WRITE_LOCK_CAP = TRUE +WRITE_LOCK_STATUS = TRUE +READ_DISABLED_CAP = TRUE +READ_ENABLED_CAP = TRUE +READ_STATUS = TRUE +READ_LOCK_CAP = TRUE +READ_LOCK_STATUS = TRUE + + INF ArmPlatformPkg/PrePeiCore/PrePeiCoreUniCore.inf + INF MdeModulePkg/Core/Pei/PeiMain.inf + INF ArmPlatformPkg/PlatformPei/PlatformPeim.inf + INF AmdModulePkg/Iscp/IscpPei.inf + INF OpenPlatformPkg/Platforms/AMD/Styx/Drivers/PlatInitPei/PlatInitPei.inf + INF ArmPlatformPkg/MemoryInitPei/MemoryInitPeim.inf + INF ArmPkg/Drivers/CpuPei/CpuPei.inf + INF MdeModulePkg/Universal/PCD/Pei/Pcd.inf + INF MdeModulePkg/Universal/Variable/Pei/VariablePei.inf + INF MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf + + FILE FV_IMAGE = 9E21FD93-9C72-4c15-8C4B-E77F1DB2D792 { + SECTION GUIDED EE4E5898-3914-4259-9D6E-DC7BD79403CF PROCESSING_REQUIRED = TRUE { + SECTION FV_IMAGE = FVMAIN + } + } + + +################################################################################ +# +# Rules are use with the [FV] section's module INF type to define +# how an FFS file is created for a given INF file. The following Rule are the default +# rules for the different module type. User can add the customized rules to define the +# content of the FFS file. +# +################################################################################ + + +############################################################################ +# Example of a DXE_DRIVER FFS file with a Checksum encapsulation section # +############################################################################ +# +#[Rule.Common.DXE_DRIVER] +# FILE DRIVER = $(NAMED_GUID) { +# DXE_DEPEX DXE_DEPEX Optional $(INF_OUTPUT)/$(MODULE_NAME).depex +# COMPRESS PI_STD { +# GUIDED { +# PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi +# UI STRING="$(MODULE_NAME)" Optional +# VERSION STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER) +# } +# } +# } +# +############################################################################ + +[Rule.Common.SEC] + FILE SEC = $(NAMED_GUID) RELOCS_STRIPPED { + TE TE Align = 4K $(INF_OUTPUT)/$(MODULE_NAME).efi + } + +[Rule.Common.PEI_CORE] + FILE PEI_CORE = $(NAMED_GUID) { + TE TE Align = Auto $(INF_OUTPUT)/$(MODULE_NAME).efi + UI STRING ="$(MODULE_NAME)" Optional + } + +[Rule.Common.PEIM] + FILE PEIM = $(NAMED_GUID) { + PEI_DEPEX PEI_DEPEX Optional $(INF_OUTPUT)/$(MODULE_NAME).depex + TE TE Align = Auto $(INF_OUTPUT)/$(MODULE_NAME).efi + UI STRING="$(MODULE_NAME)" Optional + } + +[Rule.Common.PEIM.Binary] + FILE PEIM = $(NAMED_GUID) { + PEI_DEPEX PEI_DEPEX Optional |.depex + TE TE Align = Auto |.efi + UI STRING="$(MODULE_NAME)" Optional + } + +[Rule.Common.PEIM.TIANOCOMPRESSED] + FILE PEIM = $(NAMED_GUID) DEBUG_MYTOOLS_IA32 { + PEI_DEPEX PEI_DEPEX Optional $(INF_OUTPUT)/$(MODULE_NAME).depex + GUIDED A31280AD-481E-41B6-95E8-127F4C984779 PROCESSING_REQUIRED = TRUE { + PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi + UI STRING="$(MODULE_NAME)" Optional + } + } + +[Rule.Common.DXE_CORE] + FILE DXE_CORE = $(NAMED_GUID) { + PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi + UI STRING="$(MODULE_NAME)" Optional + } + +[Rule.Common.UEFI_DRIVER] + FILE DRIVER = $(NAMED_GUID) { + DXE_DEPEX DXE_DEPEX Optional $(INF_OUTPUT)/$(MODULE_NAME).depex + PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi + UI STRING="$(MODULE_NAME)" Optional + } + +[Rule.Common.UEFI_DRIVER.Binary] + FILE DRIVER = $(NAMED_GUID) { + PE32 PE32 |.efi + UI STRING="$(MODULE_NAME)" Optional + } + +[Rule.Common.DXE_DRIVER] + FILE DRIVER = $(NAMED_GUID) { + DXE_DEPEX DXE_DEPEX Optional $(INF_OUTPUT)/$(MODULE_NAME).depex + PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi + UI STRING="$(MODULE_NAME)" Optional + } + +[Rule.Common.DXE_RUNTIME_DRIVER] + FILE DRIVER = $(NAMED_GUID) { + DXE_DEPEX DXE_DEPEX Optional $(INF_OUTPUT)/$(MODULE_NAME).depex + PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi + UI STRING="$(MODULE_NAME)" Optional + } + +[Rule.Common.DXE_RUNTIME_DRIVER.Binary] + FILE DRIVER = $(NAMED_GUID) { + DXE_DEPEX DXE_DEPEX Optional |.depex + PE32 PE32 |.efi + UI STRING="$(MODULE_NAME)" Optional + } + +[Rule.Common.UEFI_APPLICATION] + FILE APPLICATION = $(NAMED_GUID) { + UI STRING ="$(MODULE_NAME)" Optional + PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi + } + +[Rule.Common.UEFI_DRIVER.BINARY] + FILE DRIVER = $(NAMED_GUID) { + DXE_DEPEX DXE_DEPEX Optional |.depex + PE32 PE32 |.efi + UI STRING="$(MODULE_NAME)" Optional + VERSION STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER) + } + +[Rule.Common.UEFI_APPLICATION.BINARY] + FILE APPLICATION = $(NAMED_GUID) { + PE32 PE32 |.efi + UI STRING="$(MODULE_NAME)" Optional + VERSION STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER) + } + +[Rule.Common.USER_DEFINED.ACPITABLE] + FILE FREEFORM = $(NAMED_GUID) { + RAW ASL |.aml + } +
Hi Alan,
On 17 October 2016 at 23:15, Alan Ott alan@softiron.co.uk wrote:
Add a configuration for the SoftIron Overdrive 1000. This is similar to OverdriveBoard/ configuration (which is for the Overdrive 3000).
The Overdrive 1000 contains an AMD Opteron-A-based SoC with 4 Cortex-A57 cores. The board contains Marvell Yukon 1Gbit ethernet, two SATA 3.0 ports, and two USB 3.0 ports.
This configuration contains a PreUefiFirmware.bin image which was generated using the AMD Firmware Development Kit (FDK) version 1.0.0.2, configured for use with DDR4 memory.
In comparison with the .dsc and .fdf in OverdriveBoard/, the files for Overdrive1000Board contain the following differences:
- Number of cores,
- XGBE support (none in Overdrive 1000),
- SataPi and SataPortCount for available ports,
- PCIe configuration,
- Addition of MarvellYukonDxe driver.
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Alan Ott alan@softiron.co.uk
.../Overdrive1000Board/Binary/PreUefiFirmware.bin | Bin 0 -> 401408 bytes .../FdtBlob/styx-overdrive1000.dtb | Bin 0 -> 8329 bytes .../FdtBlob/styx-overdrive1000.dts | 458 +++++++++++++ .../Styx/Overdrive1000Board/Overdrive1000Board.dsc | 734 +++++++++++++++++++++ .../Styx/Overdrive1000Board/Overdrive1000Board.fdf | 412 ++++++++++++ 5 files changed, 1604 insertions(+) create mode 100644 Platforms/AMD/Styx/Overdrive1000Board/Binary/PreUefiFirmware.bin create mode 100644 Platforms/AMD/Styx/Overdrive1000Board/FdtBlob/styx-overdrive1000.dtb create mode 100644 Platforms/AMD/Styx/Overdrive1000Board/FdtBlob/styx-overdrive1000.dts create mode 100644 Platforms/AMD/Styx/Overdrive1000Board/Overdrive1000Board.dsc create mode 100644 Platforms/AMD/Styx/Overdrive1000Board/Overdrive1000Board.fdf
[...]
diff --git a/Platforms/AMD/Styx/Overdrive1000Board/FdtBlob/styx-overdrive1000.dts b/Platforms/AMD/Styx/Overdrive1000Board/FdtBlob/styx-overdrive1000.dts new file mode 100644 index 0000000..483924e --- /dev/null +++ b/Platforms/AMD/Styx/Overdrive1000Board/FdtBlob/styx-overdrive1000.dts
This file is mostly identical to the existing one, save for one node (see below)
@@ -0,0 +1,458 @@ +/*
- DTS file for AMD Seattle (Rev.B) Overdrive Development Board
- Copyright 2015 - 2016 ADVANCED MICRO DEVICES, INC. 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
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR
- IMPLIED.
- */
+/dts-v1/;
+/ {
model = "AMD Seattle (Rev.B) Development Board (Overdrive)";
compatible = "amd,seattle-overdrive", "amd,seattle";
interrupt-parent = <0x1>;
#address-cells = <0x2>;
#size-cells = <0x2>;
interrupt-controller@e1101000 {
compatible = "arm,gic-400", "arm,cortex-a15-gic";
interrupt-controller;
#interrupt-cells = <0x3>;
#address-cells = <0x2>;
#size-cells = <0x2>;
reg = <0x0 0xe1110000 0x0 0x1000>,
<0x0 0xe112f000 0x0 0x2000>,
<0x0 0xe1140000 0x0 0x10000>,
<0x0 0xe1160000 0x0 0x10000>;
interrupts = <0x1 0x9 0xf04>;
ranges = <0x0 0x0 0x0 0xe1100000 0x0 0x100000>;
linux,phandle = <0x1>;
phandle = <0x1>;
v2m@e0080000 {
compatible = "arm,gic-v2m-frame";
msi-controller;
reg = <0x0 0x80000 0x0 0x1000>;
linux,phandle = <0x4>;
phandle = <0x4>;
};
};
timer {
compatible = "arm,armv8-timer";
interrupts = <0x1 0xd 0xff04>,
<0x1 0xe 0xff04>,
<0x1 0xb 0xff04>,
<0x1 0xa 0xff04>;
};
pmu {
compatible = "arm,armv8-pmuv3";
interrupts = <0x0 0x7 0x4>,
<0x0 0x8 0x4>,
<0x0 0x9 0x4>,
<0x0 0xa 0x4>,
<0x0 0xb 0x4>,
<0x0 0xc 0x4>,
<0x0 0xd 0x4>,
<0x0 0xe 0x4>;
};
smb {
compatible = "simple-bus";
#address-cells = <0x2>;
#size-cells = <0x2>;
ranges;
/*
* dma-ranges is 40-bit address space containing:
* - GICv2m MSI register is at 0xe0080000
* - DRAM range [0x8000000000 to 0xffffffffff]
*/
dma-ranges = <0x0 0x0 0x0 0x0 0x100 0x0>;
clk100mhz_0 {
compatible = "fixed-clock";
#clock-cells = <0x0>;
clock-frequency = <100000000>;
clock-output-names = "adl3clk_100mhz";
};
clk375mhz {
compatible = "fixed-clock";
#clock-cells = <0x0>;
clock-frequency = <375000000>;
clock-output-names = "ccpclk_375mhz";
};
clk333mhz {
compatible = "fixed-clock";
#clock-cells = <0x0>;
clock-frequency = <333000000>;
clock-output-names = "sataclk_333mhz";
linux,phandle = <0x2>;
phandle = <0x2>;
};
clk500mhz_0 {
compatible = "fixed-clock";
#clock-cells = <0x0>;
clock-frequency = <500000000>;
clock-output-names = "pcieclk_500mhz";
};
clk500mhz_1 {
compatible = "fixed-clock";
#clock-cells = <0x0>;
clock-frequency = <500000000>;
clock-output-names = "dmaclk_500mhz";
};
clk250mhz_4 {
compatible = "fixed-clock";
#clock-cells = <0x0>;
clock-frequency = <250000000>;
clock-output-names = "miscclk_250mhz";
linux,phandle = <0xd>;
phandle = <0xd>;
};
clk100mhz_1 {
compatible = "fixed-clock";
#clock-cells = <0x0>;
clock-frequency = <100000000>;
clock-output-names = "uartspiclk_100mhz";
linux,phandle = <0x3>;
phandle = <0x3>;
};
sata@e0300000 {
compatible = "snps,dwc-ahci";
reg = <0x0 0xe0300000 0x0 0xf0000>;
interrupts = <0x0 0x163 0x4>;
clocks = <0x2>;
dma-coherent;
};
sata@e0d00000 {
status = "disabled";
compatible = "snps,dwc-ahci";
reg = <0x0 0xe0d00000 0x0 0xf0000>;
interrupts = <0x0 0x162 0x4>;
clocks = <0x2>;
dma-coherent;
};
i2c@e1000000 {
compatible = "snps,designware-i2c";
reg = <0x0 0xe1000000 0x0 0x1000>;
interrupts = <0x0 0x165 0x4>;
clocks = <0xd>;
};
i2c@e0050000 {
compatible = "snps,designware-i2c";
reg = <0x0 0xe0050000 0x0 0x1000>;
interrupts = <0x0 0x154 0x4>;
clocks = <0xd>;
};
serial@e1010000 {
compatible = "arm,pl011", "arm,primecell";
reg = <0x0 0xe1010000 0x0 0x1000>;
interrupts = <0x0 0x148 0x4>;
clocks = <0x3 0x3>;
clock-names = "uartclk", "apb_pclk";
};
ssp@e1020000 {
compatible = "arm,pl022", "arm,primecell";
reg = <0x0 0xe1020000 0x0 0x1000>;
spi-controller;
interrupts = <0x0 0x14a 0x4>;
clocks = <0x3>;
clock-names = "apb_pclk";
};
ssp@e1030000 {
compatible = "arm,pl022", "arm,primecell";
reg = <0x0 0xe1030000 0x0 0x1000>;
spi-controller;
interrupts = <0x0 0x149 0x4>;
clocks = <0x3>;
clock-names = "apb_pclk";
num-cs = <0x1>;
#address-cells = <0x1>;
#size-cells = <0x0>;
sdcard@0 {
compatible = "mmc-spi-slot";
reg = <0x0>;
spi-max-frequency = <20000000>;
voltage-ranges = <3200 3400>;
pl022,hierarchy = <0x0>;
pl022,interface = <0x0>;
pl022,com-mode = <0x0>;
pl022,rx-level-trig = <0x0>;
pl022,tx-level-trig = <0x0>;
};
};
gpio@e1040000 { /* [0 : 7] */
compatible = "arm,pl061", "arm,primecell";
#gpio-cells = <0x2>;
reg = <0x0 0xe1040000 0x0 0x1000>;
gpio-controller;
interrupt-controller;
#interrupt-cells = <0x2>;
interrupts = <0x0 0x167 0x4>;
clocks = <0x3>;
clock-names = "apb_pclk";
};
... this one, which the Seattle DTS version in the Linux kernel documents as
/* Not available to OS for B0 */
which I assume means B0 and later.
Does the OS have a use for this GPIO block in your case? If not, I'd rather we stick with a single dts/dtb combo.
gpio@e1050000 { /* [0 : 7] */
compatible = "arm,pl061", "arm,primecell";
#gpio-cells = <0x2>;
reg = <0x0 0xe1050000 0x0 0x1000>;
gpio-controller;
interrupt-controller;
#interrupt-cells = <0x2>;
interrupts = <0x0 0x166 0x4>;
clocks = <0x3>;
clock-names = "apb_pclk";
};
gpio@e0020000 { /* [8 : 15] */
status = "disabled";
compatible = "arm,pl061", "arm,primecell";
#gpio-cells = <0x2>;
reg = <0x0 0xe0020000 0x0 0x1000>;
gpio-controller;
interrupt-controller;
#interrupt-cells = <0x2>;
interrupts = <0x0 0x16e 0x4>;
clocks = <0x3>;
clock-names = "apb_pclk";
};
gpio@e0030000 { /* [16 : 23] */
status = "disabled";
compatible = "arm,pl061", "arm,primecell";
#gpio-cells = <0x2>;
reg = <0x0 0xe0030000 0x0 0x1000>;
gpio-controller;
interrupt-controller;
#interrupt-cells = <0x2>;
interrupts = <0x0 0x16d 0x4>;
clocks = <0x3>;
clock-names = "apb_pclk";
};
gpio@e0080000 { /* [24] */
compatible = "arm,pl061", "arm,primecell";
#gpio-cells = <0x2>;
reg = <0x0 0xe0080000 0x0 0x1000>;
gpio-controller;
interrupt-controller;
#interrupt-cells = <0x2>;
interrupts = <0x0 0x169 0x4>;
clocks = <0x3>;
clock-names = "apb_pclk";
};
ccp: ccp@e0100000 {
compatible = "amd,ccp-seattle-v1a";
reg = <0x0 0xe0100000 0x0 0x10000>;
interrupts = <0x0 0x3 0x4>;
dma-coherent;
amd,zlib-support = <0x1>;
};
pcie: pcie@f0000000 {
compatible = "pci-host-ecam-generic";
#address-cells = <0x3>;
#size-cells = <0x2>;
#interrupt-cells = <0x1>;
device_type = "pci";
bus-range = <0x0 0x7f>;
msi-parent = <0x4>;
reg = <0x0 0xf0000000 0x0 0x10000000>;
interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
interrupt-map = <0x1000 0x0 0x0 0x1 0x1 0x0 0x0 0x0 0x120 0x1>,
<0x1000 0x0 0x0 0x2 0x1 0x0 0x0 0x0 0x121 0x1>,
<0x1000 0x0 0x0 0x3 0x1 0x0 0x0 0x0 0x122 0x1>,
<0x1000 0x0 0x0 0x4 0x1 0x0 0x0 0x0 0x123 0x1>;
dma-coherent;
dma-ranges = <0x43000000 0x0 0x0 0x0 0x0 0x100 0x0>;
ranges = <0x1000000 0x0 0x00000000 0x0 0xefff0000 0x00 0x00010000>, /* I/O Memory (size=64K) */
<0x2000000 0x0 0x40000000 0x0 0x40000000 0x00 0x80000000>, /* 32-bit MMIO (size=2G) */
<0x3000000 0x1 0x00000000 0x1 0x00000000 0x7f 0x00000000>; /* 64-bit MMIO (size= 124G) */
};
ccn@0xe8000000 {
compatible = "arm,ccn-504";
reg = <0x0 0xe8000000 0x0 0x1000000>;
interrupts = <0x0 0x17c 0x4>;
};
gwdt@e0bb0000 {
status = "disabled";
compatible = "arm,sbsa-gwdt";
reg = <0x0 0xe0bb0000 0x0 0x10000
0x0 0xe0bc0000 0x0 0x10000>;
reg-names = "refresh", "control";
interrupts = <0x0 0x151 0x4>;
interrupt-names = "ws0";
};
kcs@e0010000 {
status = "disabled";
compatible = "ipmi-kcs";
device_type = "ipmi";
reg = <0x0 0xe0010000 0 0x8>;
interrupts = <0 389 4>;
interrupt-names = "ipmi_kcs";
reg-size = <1>;
reg-spacing = <4>;
};
clk250mhz_0 {
compatible = "fixed-clock";
#clock-cells = <0x0>;
clock-frequency = <250000000>;
clock-output-names = "xgmacclk0_dma_250mhz";
linux,phandle = <0x5>;
phandle = <0x5>;
};
clk250mhz_1 {
compatible = "fixed-clock";
#clock-cells = <0x0>;
clock-frequency = <250000000>;
clock-output-names = "xgmacclk0_ptp_250mhz";
linux,phandle = <0x6>;
phandle = <0x6>;
};
clk250mhz_2 {
compatible = "fixed-clock";
#clock-cells = <0x0>;
clock-frequency = <250000000>;
clock-output-names = "xgmacclk1_dma_250mhz";
linux,phandle = <0x7>;
phandle = <0x7>;
};
clk250mhz_3 {
compatible = "fixed-clock";
#clock-cells = <0x0>;
clock-frequency = <250000000>;
clock-output-names = "xgmacclk1_ptp_250mhz";
linux,phandle = <0x8>;
phandle = <0x8>;
};
phy@e1240800 {
status = "disabled";
compatible = "amd,xgbe-phy-seattle-v1a";
reg = <0x0 0xe1240800 0x0 0x0400>, /* SERDES RX/TX0 */
<0x0 0xe1250000 0x0 0x0060>, /* SERDES IR 1/2 */
<0x0 0xe12500f8 0x0 0x0004>; /* SERDES IR 2/2 */
interrupts = <0x0 0x143 0x4>;
amd,speed-set = <0x0>;
amd,serdes-blwc = <0x1 0x1 0x0>;
amd,serdes-cdr-rate = <0x2 0x2 0x7>;
amd,serdes-pq-skew = <0xa 0xa 0x12>;
amd,serdes-tx-amp = <0xf 0xf 0xa>;
amd,serdes-dfe-tap-config = <0x3 0x3 0x1>;
amd,serdes-dfe-tap-enable = <0x0 0x0 0x7f>;
linux,phandle = <0x9>;
phandle = <0x9>;
};
phy@e1240c00 {
status = "disabled";
compatible = "amd,xgbe-phy-seattle-v1a";
reg = <0x0 0xe1240c00 0x0 0x0400>, /* SERDES RX/TX0 */
<0x0 0xe1250080 0x0 0x0060>, /* SERDES IR 1/2 */
<0x0 0xe12500fc 0x0 0x0004>; /* SERDES IR 2/2 */
interrupts = <0x0 0x142 0x4>;
amd,speed-set = <0x0>;
amd,serdes-blwc = <0x1 0x1 0x0>;
amd,serdes-cdr-rate = <0x2 0x2 0x7>;
amd,serdes-pq-skew = <0xa 0xa 0x12>;
amd,serdes-tx-amp = <0xf 0xf 0xa>;
amd,serdes-dfe-tap-config = <0x3 0x3 0x1>;
amd,serdes-dfe-tap-enable = <0x0 0x0 0x7f>;
linux,phandle = <0xa>;
phandle = <0xa>;
};
xgmac@e0700000 {
status = "disabled";
compatible = "amd,xgbe-seattle-v1a";
reg = <0x0 0xe0700000 0x0 0x80000 0x0 0xe0780000 0x0 0x80000>;
interrupts = <0x0 0x145 0x4>,
<0x0 0x15a 0x1>,
<0x0 0x15b 0x1>,
<0x0 0x15c 0x1>,
<0x0 0x15d 0x1>;
amd,per-channel-interrupt;
mac-address = [02 a1 a2 a3 a4 a5];
clocks = <0x5 0x6>;
clock-names = "dma_clk", "ptp_clk";
phy-handle = <0x9>;
phy-mode = "xgmii";
#stream-id-cells = <0x18>;
dma-coherent;
linux,phandle = <0xb>;
phandle = <0xb>;
};
xgmac@e0900000 {
status = "disabled";
compatible = "amd,xgbe-seattle-v1a";
reg = <0x0 0xe0900000 0x0 0x80000 0x0 0xe0980000 0x0 0x80000>;
interrupts = <0x0 0x144 0x4>,
<0x0 0x155 0x1>,
<0x0 0x156 0x1>,
<0x0 0x157 0x1>,
<0x0 0x158 0x1>;
amd,per-channel-interrupt;
mac-address = [02 b1 b2 b3 b4 b5];
clocks = <0x7 0x8>;
clock-names = "dma_clk", "ptp_clk";
phy-handle = <0xa>;
phy-mode = "xgmii";
#stream-id-cells = <0x18>;
dma-coherent;
linux,phandle = <0xc>;
phandle = <0xc>;
};
};
chosen {
stdout-path = "/smb/serial@e1010000";
/* Note:
* Linux support for pci-probe-only DT is not
* stable. Disable this for now and let Linux
* take care of the resource assignment.
*/
/* linux,pci-probe-only = <1>; */
};
psci {
compatible = "arm,psci-0.2", "arm,psci";
method = "smc";
};
+};
diff --git a/Platforms/AMD/Styx/Overdrive1000Board/Overdrive1000Board.dsc b/Platforms/AMD/Styx/Overdrive1000Board/Overdrive1000Board.dsc new file mode 100644 index 0000000..b2a5474 --- /dev/null +++ b/Platforms/AMD/Styx/Overdrive1000Board/Overdrive1000Board.dsc @@ -0,0 +1,734 @@ +# +# Copyright (c) 2014 - 2016, AMD Incorporated. 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 Section - statements that will be processed to create a Makefile. +# +################################################################################ +[Defines]
+DEFINE DO_XGBE = 0
You can remove this and the dependent blocks completely (we did the same for Cello)
+DEFINE NUM_CORES = 4 +DEFINE DO_PSCI = 1 +DEFINE DO_ISCP = 1 +DEFINE DO_KCS = 1
- PLATFORM_NAME = Overdrive1000
- PLATFORM_GUID = B2296C02-9DA1-4CD1-BD48-4D4F0F1276EB
Please change the GUID
- PLATFORM_VERSION = 0.1
- DSC_SPECIFICATION = 0x00010005
- OUTPUT_DIRECTORY = Build/Overdrive1000
- SUPPORTED_ARCHITECTURES = AARCH64
- BUILD_TARGETS = DEBUG|RELEASE
- SKUID_IDENTIFIER = DEFAULT
- FLASH_DEFINITION = OpenPlatformPkg/Platforms/AMD/Styx/Overdrive1000Board/Overdrive1000Board.fdf
+################################################################################ +# +# Library Class section - list of all Library Classes needed by this Platform. +# +################################################################################ +[LibraryClasses.common] +!if $(TARGET) == RELEASE
- DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf
- UncachedMemoryAllocationLib|ArmPkg/Library/UncachedMemoryAllocationLib/UncachedMemoryAllocationLib.inf
+!else
- DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- UncachedMemoryAllocationLib|ArmPkg/Library/UncachedMemoryAllocationLib/UncachedMemoryAllocationLib.inf
+!endif
- DebugPrintErrorLevelLib|MdePkg/Library/BaseDebugPrintErrorLevelLib/BaseDebugPrintErrorLevelLib.inf
- BaseLib|MdePkg/Library/BaseLib/BaseLib.inf
- SynchronizationLib|MdePkg/Library/BaseSynchronizationLib/BaseSynchronizationLib.inf
- PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibNull.inf
- PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf
- PeCoffGetEntryPointLib|MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeCoffGetEntryPointLib.inf
- PeCoffLib|MdePkg/Library/BasePeCoffLib/BasePeCoffLib.inf
- IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
- PciExpressLib|MdePkg/Library/BasePciExpressLib/BasePciExpressLib.inf
- UefiDecompressLib|MdePkg/Library/BaseUefiDecompressLib/BaseUefiDecompressLib.inf
- CpuLib|MdePkg/Library/BaseCpuLib/BaseCpuLib.inf
- UefiLib|MdePkg/Library/UefiLib/UefiLib.inf
- UefiUsbLib|MdePkg/Library/UefiUsbLib/UefiUsbLib.inf
- HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf
- UefiRuntimeServicesTableLib|MdePkg/Library/UefiRuntimeServicesTableLib/UefiRuntimeServicesTableLib.inf
- DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf
- UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.inf
- DxeServicesTableLib|MdePkg/Library/DxeServicesTableLib/DxeServicesTableLib.inf
- UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.inf
- UefiApplicationEntryPoint|MdePkg/Library/UefiApplicationEntryPoint/UefiApplicationEntryPoint.inf
- HiiLib|MdeModulePkg/Library/UefiHiiLib/UefiHiiLib.inf
- UefiHiiServicesLib|MdeModulePkg/Library/UefiHiiServicesLib/UefiHiiServicesLib.inf
- UefiRuntimeLib|MdePkg/Library/UefiRuntimeLib/UefiRuntimeLib.inf
- #
- # Allow dynamic PCDs
- #
- PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
- PeiServicesLib|MdePkg/Library/PeiServicesLib/PeiServicesLib.inf
- # 1/123 faster than Stm or Vstm version
- #BaseMemoryLib|MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf
- BaseMemoryLib|ArmPkg/Library/BaseMemoryLibStm/BaseMemoryLibStm.inf
This library is deprecated and will be removed. Please switch to MdePkg's BaseMemoryLib (for SEC, PEIM and PEI_CORE) and BaseMemoryLibOptDxe (for remaining module types)
- # Networking Requirements
- NetLib|MdeModulePkg/Library/DxeNetLib/DxeNetLib.inf
- DpcLib|MdeModulePkg/Library/DxeDpcLib/DxeDpcLib.inf
- UdpIoLib|MdeModulePkg/Library/DxeUdpIoLib/DxeUdpIoLib.inf
- IpIoLib|MdeModulePkg/Library/DxeIpIoLib/DxeIpIoLib.inf
- # ARM Architectural Libraries
- CacheMaintenanceLib|ArmPkg/Library/ArmCacheMaintenanceLib/ArmCacheMaintenanceLib.inf
- DefaultExceptionHandlerLib|ArmPkg/Library/DefaultExceptionHandlerLib/DefaultExceptionHandlerLib.inf
- CpuExceptionHandlerLib|ArmPkg/Library/ArmExceptionLib/ArmExceptionLib.inf
- ArmDisassemblerLib|ArmPkg/Library/ArmDisassemblerLib/ArmDisassemblerLib.inf
- DmaLib|ArmPkg/Library/ArmDmaLib/ArmDmaLib.inf
- ArmGicLib|ArmPkg/Drivers/ArmGic/ArmGicLib.inf
- ArmGicArchLib|ArmPkg/Library/ArmGicArchLib/ArmGicArchLib.inf
- ArmPlatformStackLib|ArmPlatformPkg/Library/ArmPlatformStackLib/ArmPlatformStackLib.inf
- ArmSmcLib|ArmPkg/Library/ArmSmcLib/ArmSmcLib.inf
- ArmGenericTimerCounterLib|ArmPkg/Library/ArmGenericTimerPhyCounterLib/ArmGenericTimerPhyCounterLib.inf
- PlatformPeiLib|ArmPlatformPkg/PlatformPei/PlatformPeiLib.inf
- ArmLib|ArmPkg/Library/ArmLib/ArmBaseLib.inf
- ArmCpuLib|ArmPkg/Drivers/ArmCpuLib/ArmCortexA5xLib/ArmCortexA5xLib.inf
- ArmMmuLib|ArmPkg/Library/ArmMmuLib/ArmMmuBaseLib.inf
- ArmPlatformLib|OpenPlatformPkg/Platforms/AMD/Styx/Library/AmdStyxLib/AmdStyxLib.inf
- TimerLib|ArmPkg/Library/ArmArchTimerLib/ArmArchTimerLib.inf
- UefiScsiLib|MdePkg/Library/UefiScsiLib/UefiScsiLib.inf
- # ARM PL011 UART Driver
- PL011UartLib|ArmPlatformPkg/Drivers/PL011Uart/PL011Uart.inf
- SerialPortLib|ArmPlatformPkg/Library/PL011SerialPortLib/PL011SerialPortLib.inf
- #
- # PCI support
- #
- PciSegmentLib|MdePkg/Library/BasePciSegmentLibPci/BasePciSegmentLibPci.inf
- PciLib|MdePkg/Library/BasePciLibPciExpress/BasePciLibPciExpress.inf
- PciHostBridgeLib|OpenPlatformPkg/Platforms/AMD/Styx/Library/AmdStyxPciHostBridgeLib/AmdStyxPciHostBridgeLib.inf
- #
- # Styx specific libraries
- #
- AmdSataInit|AmdModulePkg/Library/AmdSataInitLib/AmdSataInitLib.inf
- AmdStyxAcpiLib|OpenPlatformPkg/Platforms/AMD/Styx/AcpiTables/AcpiTables.inf
- EfiResetSystemLib|OpenPlatformPkg/Platforms/AMD/Styx/Library/ResetSystemLib/ResetSystemLib.inf
- RealTimeClockLib|OpenPlatformPkg/Platforms/AMD/Styx/Library/RealTimeClockLib/RealTimeClockLib.inf
- CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf
- UefiBootManagerLib|MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf
- PlatformBootManagerLib|ArmPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf
- CustomizedDisplayLib|MdeModulePkg/Library/CustomizedDisplayLib/CustomizedDisplayLib.inf
- #
- # Uncomment (and comment out the next line) For RealView Debugger. The Standard IO window
- # in the debugger will show load and unload commands for symbols. You can cut and paste this
- # into the command window to load symbols. We should be able to use a script to do this, but
- # the version of RVD I have does not support scripts accessing system memory.
- #
- #PeCoffExtraActionLib|ArmPkg/Library/RvdPeCoffExtraActionLib/RvdPeCoffExtraActionLib.inf
- PeCoffExtraActionLib|ArmPkg/Library/DebugPeCoffExtraActionLib/DebugPeCoffExtraActionLib.inf
- #PeCoffExtraActionLib|MdePkg/Library/BasePeCoffExtraActionLibNull/BasePeCoffExtraActionLibNull.inf
- DebugAgentLib|MdeModulePkg/Library/DebugAgentLibNull/DebugAgentLibNull.inf
- DebugAgentTimerLib|EmbeddedPkg/Library/DebugAgentTimerLibNull/DebugAgentTimerLibNull.inf
- DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf
- SortLib|MdeModulePkg/Library/UefiSortLib/UefiSortLib.inf
- FileExplorerLib|MdeModulePkg/Library/FileExplorerLib/FileExplorerLib.inf
- DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf
- SortLib|MdeModulePkg/Library/UefiSortLib/UefiSortLib.inf
- FileExplorerLib|MdeModulePkg/Library/FileExplorerLib/FileExplorerLib.inf
+[LibraryClasses.common.SEC]
- HobLib|MdePkg/Library/PeiHobLib/PeiHobLib.inf
- PeiServicesTablePointerLib|ArmPkg/Library/PeiServicesTablePointerLib/PeiServicesTablePointerLib.inf
- MemoryAllocationLib|MdePkg/Library/PeiMemoryAllocationLib/PeiMemoryAllocationLib.inf
- PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
- ArmPlatformLib|OpenPlatformPkg/Platforms/AMD/Styx/Library/AmdStyxLib/AmdStyxLibSec.inf
- ArmPlatformSecExtraActionLib|ArmPlatformPkg/Library/DebugSecExtraActionLib/DebugSecExtraActionLib.inf
- DebugAgentLib|ArmPkg/Library/DebugAgentSymbolsBaseLib/DebugAgentSymbolsBaseLib.inf
- DefaultExceptionHandlerLib|ArmPkg/Library/DefaultExceptionHandlerLib/DefaultExceptionHandlerLibBase.inf
- # Trustzone Support
- ArmTrustedMonitorLib|ArmPlatformPkg/Library/ArmTrustedMonitorLibNull/ArmTrustedMonitorLibNull.inf
- ArmGicArchLib|ArmPkg/Library/ArmGicArchSecLib/ArmGicArchSecLib.inf
+[LibraryClasses.common.PEIM, LibraryClasses.common.SEC]
- MemoryInitPeiLib|OpenPlatformPkg/Platforms/AMD/Styx/Library/MemoryInitPei/MemoryInitPeiLib.inf
+[LibraryClasses.common.PEI_CORE]
- PcdLib|MdePkg/Library/PeiPcdLib/PeiPcdLib.inf
- HobLib|MdePkg/Library/PeiHobLib/PeiHobLib.inf
- MemoryAllocationLib|MdePkg/Library/PeiMemoryAllocationLib/PeiMemoryAllocationLib.inf
- PeiCoreEntryPoint|MdePkg/Library/PeiCoreEntryPoint/PeiCoreEntryPoint.inf
- PerformanceLib|MdeModulePkg/Library/PeiPerformanceLib/PeiPerformanceLib.inf
- ReportStatusCodeLib|MdeModulePkg/Library/PeiReportStatusCodeLib/PeiReportStatusCodeLib.inf
- OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
- PeCoffGetEntryPointLib|MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeCoffGetEntryPointLib.inf
- UefiDecompressLib|MdePkg/Library/BaseUefiDecompressLib/BaseUefiDecompressLib.inf
- ExtractGuidedSectionLib|MdePkg/Library/PeiExtractGuidedSectionLib/PeiExtractGuidedSectionLib.inf
- PeiServicesTablePointerLib|ArmPkg/Library/PeiServicesTablePointerLib/PeiServicesTablePointerLib.inf
+[LibraryClasses.common.PEIM]
- PcdLib|MdePkg/Library/PeiPcdLib/PeiPcdLib.inf
- HobLib|MdePkg/Library/PeiHobLib/PeiHobLib.inf
- MemoryAllocationLib|MdePkg/Library/PeiMemoryAllocationLib/PeiMemoryAllocationLib.inf
- PeimEntryPoint|MdePkg/Library/PeimEntryPoint/PeimEntryPoint.inf
- PerformanceLib|MdeModulePkg/Library/PeiPerformanceLib/PeiPerformanceLib.inf
- ReportStatusCodeLib|MdeModulePkg/Library/PeiReportStatusCodeLib/PeiReportStatusCodeLib.inf
- OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
- PeCoffGetEntryPointLib|MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeCoffGetEntryPointLib.inf
- PeiResourcePublicationLib|MdePkg/Library/PeiResourcePublicationLib/PeiResourcePublicationLib.inf
- UefiDecompressLib|MdePkg/Library/BaseUefiDecompressLib/BaseUefiDecompressLib.inf
- ExtractGuidedSectionLib|MdePkg/Library/PeiExtractGuidedSectionLib/PeiExtractGuidedSectionLib.inf
- PeiServicesTablePointerLib|ArmPkg/Library/PeiServicesTablePointerLib/PeiServicesTablePointerLib.inf
+[LibraryClasses.common.DXE_CORE]
- HobLib|MdePkg/Library/DxeCoreHobLib/DxeCoreHobLib.inf
- MemoryAllocationLib|MdeModulePkg/Library/DxeCoreMemoryAllocationLib/DxeCoreMemoryAllocationLib.inf
- DxeCoreEntryPoint|MdePkg/Library/DxeCoreEntryPoint/DxeCoreEntryPoint.inf
- ReportStatusCodeLib|IntelFrameworkModulePkg/Library/DxeReportStatusCodeLibFramework/DxeReportStatusCodeLib.inf
- ExtractGuidedSectionLib|MdePkg/Library/DxeExtractGuidedSectionLib/DxeExtractGuidedSectionLib.inf
- UefiDecompressLib|MdePkg/Library/BaseUefiDecompressLib/BaseUefiDecompressLib.inf
- PerformanceLib|MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLib.inf
+[LibraryClasses.common.DXE_DRIVER]
- ReportStatusCodeLib|IntelFrameworkModulePkg/Library/DxeReportStatusCodeLibFramework/DxeReportStatusCodeLib.inf
- SecurityManagementLib|MdeModulePkg/Library/DxeSecurityManagementLib/DxeSecurityManagementLib.inf
- PerformanceLib|MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf
- MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
+[LibraryClasses.common.DXE_RUNTIME_DRIVER]
- HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf
- MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
- ReportStatusCodeLib|IntelFrameworkModulePkg/Library/DxeReportStatusCodeLibFramework/DxeReportStatusCodeLib.inf
- CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf
+[LibraryClasses.common.UEFI_APPLICATION]
- UefiDecompressLib|IntelFrameworkModulePkg/Library/BaseUefiTianoCustomDecompressLib/BaseUefiTianoCustomDecompressLib.inf
- PerformanceLib|MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf
- MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
- HiiLib|MdeModulePkg/Library/UefiHiiLib/UefiHiiLib.inf
- ReportStatusCodeLib|MdeModulePkg/Library/DxeReportStatusCodeLib/DxeReportStatusCodeLib.inf
+[LibraryClasses.common.UEFI_DRIVER]
- ReportStatusCodeLib|IntelFrameworkModulePkg/Library/DxeReportStatusCodeLibFramework/DxeReportStatusCodeLib.inf
- UefiDecompressLib|IntelFrameworkModulePkg/Library/BaseUefiTianoCustomDecompressLib/BaseUefiTianoCustomDecompressLib.inf
- ExtractGuidedSectionLib|MdePkg/Library/DxeExtractGuidedSectionLib/DxeExtractGuidedSectionLib.inf
- PerformanceLib|MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf
- MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
+[LibraryClasses.ARM]
- #
- # It is not possible to prevent the ARM compiler for generic intrinsic functions.
- # This library provides the instrinsic functions generate by a given compiler.
- # [LibraryClasses.ARM] and NULL mean link this library into all ARM images.
- #
- NULL|ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf
+[LibraryClasses.AARCH64]
- NULL|ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf
- NULL|MdePkg/Library/BaseStackCheckLib/BaseStackCheckLib.inf
+################################################################################################### +# BuildOptions Section - Define the module specific tool chain flags that should be used as +# the default flags for a module. These flags are appended to any +# standard flags that are defined by the build process. +###################################################################################################
+[BuildOptions]
- RVCT:RELEASE_*_*_CC_FLAGS = -DMDEPKG_NDEBUG
You can drop RVCT
- GCC:RELEASE_*_*_CC_FLAGS = -DMDEPKG_NDEBUG
- *_*_*_ASL_FLAGS = -tc -li -l -so
- *_*_*_ASLPP_FLAGS = -x c -E -P $(ARCHCC_FLAGS)
- *_*_*_ASLCC_FLAGS = -x c $(ARCHCC_FLAGS)
- GCC:*_*_AARCH64_ARCHCC_FLAGS = -DDO_XGBE=$(DO_XGBE) -DDO_KCS=$(DO_KCS) -DNUM_CORES=$(NUM_CORES) -DARM_CPU_AARCH64
- GCC:*_*_AARCH64_PP_FLAGS = -DDO_XGBE=$(DO_XGBE) -DDO_KCS=$(DO_KCS) -DNUM_CORES=$(NUM_CORES) -DARM_CPU_AARCH64
- GCC:*_*_AARCH64_PLATFORM_FLAGS = -I$(BIN_DIR)/OpenPlatformPkg/Platforms/AMD/Styx/AcpiTables/AcpiAml/OUTPUT
+[BuildOptions.common.EDKII.DXE_RUNTIME_DRIVER]
- GCC:*_*_AARCH64_DLINK_FLAGS = -z common-page-size=0x10000
+################################################################################ +# +# Pcd Section - list of all EDK II PCD Entries defined by this Platform +# +################################################################################
+[PcdsFeatureFlag.common]
- gEfiMdePkgTokenSpaceGuid.PcdComponentNameDisable|TRUE
- gEfiMdePkgTokenSpaceGuid.PcdDriverDiagnosticsDisable|TRUE
- gEfiMdePkgTokenSpaceGuid.PcdComponentName2Disable|TRUE
- gEfiMdePkgTokenSpaceGuid.PcdDriverDiagnostics2Disable|TRUE
This is cargo culted junk. There is no reason to disable these, and dropping them makes the output of dh/drivers/etc much more comprehensible. I intend to remove these for the other board shortly as well.
- # All pages are cached by default
- gEmbeddedTokenSpaceGuid.PcdCacheEnable|TRUE
- # Use the Vector Table location in CpuDxe. We will not copy the Vector Table at PcdCpuVectorBaseAddress
- gArmTokenSpaceGuid.PcdRelocateVectorTable|FALSE
- gEmbeddedTokenSpaceGuid.PcdPrePiProduceMemoryTypeInformationHob|TRUE
- gEfiMdeModulePkgTokenSpaceGuid.PcdTurnOffUsbLegacySupport|TRUE
- ## If TRUE, Graphics Output Protocol will be installed on virtual handle
- ## created by ConsplitterDxe. It could be set FALSE to save size.
- gEfiMdeModulePkgTokenSpaceGuid.PcdConOutGopSupport|FALSE
+[PcdsFixedAtBuild.common]
- gEfiMdePkgTokenSpaceGuid.PcdMaximumUnicodeStringLength|1000000
- gEfiMdePkgTokenSpaceGuid.PcdMaximumAsciiStringLength|1000000
- gEfiMdePkgTokenSpaceGuid.PcdMaximumLinkedListLength|1000000
- gEfiMdePkgTokenSpaceGuid.PcdSpinLockTimeout|10000000
- gEfiMdePkgTokenSpaceGuid.PcdDebugClearMemoryValue|0xAF
- gEfiMdePkgTokenSpaceGuid.PcdPerformanceLibraryPropertyMask|1
- gEfiMdePkgTokenSpaceGuid.PcdPostCodePropertyMask|0
- gEfiMdePkgTokenSpaceGuid.PcdUefiLibMaxPrintBufferSize|320
- # DEBUG_ASSERT_ENABLED 0x01
- # DEBUG_PRINT_ENABLED 0x02
- # DEBUG_CODE_ENABLED 0x04
- # CLEAR_MEMORY_ENABLED 0x08
- # ASSERT_BREAKPOINT_ENABLED 0x10
- # ASSERT_DEADLOOP_ENABLED 0x20
+!if $(TARGET) == RELEASE
- gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x21
+!else
- gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x2f
+!endif
- # DEBUG_INIT 0x00000001 // Initialization
- # DEBUG_WARN 0x00000002 // Warnings
- # DEBUG_LOAD 0x00000004 // Load events
- # DEBUG_FS 0x00000008 // EFI File system
- # DEBUG_POOL 0x00000010 // Alloc & Free's
- # DEBUG_PAGE 0x00000020 // Alloc & Free's
- # DEBUG_INFO 0x00000040 // Verbose
- # DEBUG_DISPATCH 0x00000080 // PEI/DXE Dispatchers
- # DEBUG_VARIABLE 0x00000100 // Variable
- # DEBUG_BM 0x00000400 // Boot Manager
- # DEBUG_BLKIO 0x00001000 // BlkIo Driver
- # DEBUG_NET 0x00004000 // SNI Driver
- # DEBUG_UNDI 0x00010000 // UNDI Driver
- # DEBUG_LOADFILE 0x00020000 // UNDI Driver
- # DEBUG_EVENT 0x00080000 // Event messages
- # DEBUG_GCD 0x00100000 // Global Coherency Database changes
- # DEBUG_CACHE 0x00200000 // Memory range cachability changes
- # DEBUG_ERROR 0x80000000 // Error
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000000F
- gEfiMdePkgTokenSpaceGuid.PcdReportStatusCodePropertyMask|0x07
- #
- # Optional feature to help prevent EFI memory map fragments
- # Turned on and off via: PcdPrePiProduceMemoryTypeInformationHob
- # Values are in EFI Pages (4K). DXE Core will make sure that
- # at least this much of each type of memory can be allocated
- # from a single memory range. This way you only end up with
- # maximum of two fragements for each type in the memory map
- # (the memory used, and the free memory that was prereserved
- # but not used).
- #
- gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiACPIReclaimMemory|0
- gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiACPIMemoryNVS|0
- gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiReservedMemoryType|0
- gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiRuntimeServicesData|1000
- gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiRuntimeServicesCode|1000
- gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiBootServicesCode|400
- gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiBootServicesData|12000
- gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiLoaderCode|20
- gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiLoaderData|0
- gEfiMdeModulePkgTokenSpaceGuid.PcdResetOnMemoryTypeInformationChange|FALSE
- gEfiMdeModulePkgTokenSpaceGuid.PcdBootManagerMenuFile|{ 0x21, 0xaa, 0x2c, 0x46, 0x14, 0x76, 0x03, 0x45, 0x83, 0x6e, 0x8a, 0xb6, 0xf4, 0x66, 0x23, 0x31 }
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdShellFile|{ 0x83, 0xA5, 0x04, 0x7C, 0x3E, 0x9E, 0x1C, 0x4F, 0xAD, 0x65, 0xE0, 0x52, 0x68, 0xD0, 0xB4, 0xD1 }
- gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVendor|L"SoftIron Overdrive 1000"
- # Number of configured cores
- gArmPlatformTokenSpaceGuid.PcdCoreCount|$(NUM_CORES)
- # Stacks for MPCores in Normal World
- gArmPlatformTokenSpaceGuid.PcdCPUCoresStackBase|0x8001680000
- gArmPlatformTokenSpaceGuid.PcdCPUCorePrimaryStackSize|0x10000
- gArmPlatformTokenSpaceGuid.PcdCPUCoreSecondaryStackSize|0x800
- # Declare system memory base
- gArmTokenSpaceGuid.PcdSystemMemoryBase|0x8000000000
- # Size of the region used by UEFI in permanent memory (Reserved 64MB)
- gArmPlatformTokenSpaceGuid.PcdSystemMemoryUefiRegionSize|0x04000000
- # 40 bits of VA space is sufficient to support up to 512 GB of RAM in the
- # range 0x80_0000_0000 - 0xFF_FFFF_FFFF (all platform and PCI MMIO is below
- # that)
- gEmbeddedTokenSpaceGuid.PcdPrePiCpuMemorySize|40
- #
- # ARM PrimeCell
- #
- ## PL011 - Serial Terminal (Atlas UART)
- gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterBase|0x0E1010000
- gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate|115200
- gEfiMdePkgTokenSpaceGuid.PcdUartDefaultReceiveFifoDepth|0
- # serial port is clocked at 100MHz
- gArmPlatformTokenSpaceGuid.PL011UartClkInHz|100000000
- gEfiMdePkgTokenSpaceGuid.PcdDefaultTerminalType|4
- gAmdStyxTokenSpaceGuid.PcdSerialDbgRegisterBase|0x0E1010000
- gAmdStyxTokenSpaceGuid.PcdUartDbgBaudRate|115200
- #
- # ARM General Interrupt Controller
- #
- gArmTokenSpaceGuid.PcdGicDistributorBase|0xE1110000
- gArmTokenSpaceGuid.PcdGicInterruptInterfaceBase|0xE112F000
- #
- # ARM Architectual Timer Frequency
- #
- gArmTokenSpaceGuid.PcdArmArchTimerFreqInHz|187500000
- #
- # Bitmask for ports implemented on the SATA controller
- # (2 ports active on Overdrive 1000: 0b00000011 = 0x03)
- #
- gAmdStyxTokenSpaceGuid.PcdSataPi|0x03
- # Only PcdSataPortCount or PcdSata1PortCount are used. The selection is
- # made by #define in Drivers/SataControllerDxe/InitController.c
- gAmdStyxTokenSpaceGuid.PcdSataPortCount|2
- gAmdStyxTokenSpaceGuid.PcdSata1PortCount|0
- # PCIe Support
- gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress|0xF0000000
- gArmTokenSpaceGuid.PcdPciBusMin|0x0
- gArmTokenSpaceGuid.PcdPciBusMax|0xFF
- gArmTokenSpaceGuid.PcdPciIoBase|0x1000
- gArmTokenSpaceGuid.PcdPciIoSize|0xF000
- gArmTokenSpaceGuid.PcdPciIoTranslation|0xEFFF0000
- gEmbeddedTokenSpaceGuid.PcdPrePiCpuIoSize|16
- gArmTokenSpaceGuid.PcdPciMmio32Base|0x40000000
- gArmTokenSpaceGuid.PcdPciMmio32Size|0x80000000
- gArmTokenSpaceGuid.PcdPciMmio32Translation|0x0
- gArmTokenSpaceGuid.PcdPciMmio64Base|0x100000000
- gArmTokenSpaceGuid.PcdPciMmio64Size|0x7F00000000
- gArmTokenSpaceGuid.PcdPciMmio64Translation|0x0
- ## Use PCI emulation for ATA PassThru
- # gEfiMdeModulePkgTokenSpaceGuid.PcdAtaPassThruPciEmulation|TRUE
- ## ACPI (no tables < 4GB)
- gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiExposedTableVersions|0x20
+!if $(DO_PSCI)
- gAmdStyxTokenSpaceGuid.PcdPsciOsSupport|TRUE
+!else
- gAmdStyxTokenSpaceGuid.PcdPsciOsSupport|FALSE
+!endif
+!if $(DO_ISCP)
- gAmdStyxTokenSpaceGuid.PcdIscpSupport|TRUE
+!else
- gAmdStyxTokenSpaceGuid.PcdIscpSupport|FALSE
+!endif
Please remove this unless DO_ISCP==FALSE produces a working system
- # SMBIOS 3.0 only
- gEfiMdeModulePkgTokenSpaceGuid.PcdSmbiosEntryPointProvideMethod|0x2
- gAmdModulePkgTokenSpaceGuid.PcdSataNumChPerSerdes|2
- gAmdModulePkgTokenSpaceGuid.PcdSataSerdesBase|0xE1200000
- gAmdModulePkgTokenSpaceGuid.PcdSataSerdesOffset|0x00010000
+!if $(DO_XGBE)
- gAmdModulePkgTokenSpaceGuid.PcdXgbeEnable|TRUE
- gAmdModulePkgTokenSpaceGuid.PcdPort0PhyMode|0
- gAmdModulePkgTokenSpaceGuid.PcdPort1PhyMode|0
- gAmdModulePkgTokenSpaceGuid.PcdPort0NetSpeed|1
- gAmdModulePkgTokenSpaceGuid.PcdPort1NetSpeed|1
+[PcdsDynamicDefault.common]
- gAmdStyxTokenSpaceGuid.PcdEthMacA|0x02A1A2A3A4A5
- gAmdStyxTokenSpaceGuid.PcdEthMacB|0x02B1B2B3B4B5
+[PcdsPatchableInModule]
- gAmdModulePkgTokenSpaceGuid.PcdXgbeUseMacFromIscp|TRUE
- gAmdModulePkgTokenSpaceGuid.PcdXgbeRev|2
+!endif
As mentioned above, you can drop this entirely
+[PcdsPatchableInModule] +# PCIe Configuration: x4x2x2 (=2 See Include/FDKGionb.h)
- gAmdModulePkgTokenSpaceGuid.PcdPcieCoreConfiguration|2
- gAmdModulePkgTokenSpaceGuid.PcdPciePort0Present|0
- gAmdModulePkgTokenSpaceGuid.PcdPciePort1Present|1
- gAmdModulePkgTokenSpaceGuid.PcdPciePort2Present|1
- gAmdModulePkgTokenSpaceGuid.PcdPcieHardcodeEnumeration|TRUE
+[PcdsDynamicDefault.common]
- gAmdStyxTokenSpaceGuid.PcdSocCoreCount|$(NUM_CORES)
- gArmTokenSpaceGuid.PcdSystemMemorySize|0x0400000000
- gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64|0x0
- gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64|0x0
- gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase64|0x0
+[PcdsDynamicExHii.common.DEFAULT]
- gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut|L"Timeout"|gEfiGlobalVariableGuid|0x0|5
+################################################################################ +# +# Components Section - list of all EDK II Modules needed by this Platform +# +################################################################################ +[Components.common]
- #
- # PEI Phase modules
- #
- ArmPlatformPkg/PrePeiCore/PrePeiCoreUniCore.inf
- MdeModulePkg/Core/Pei/PeiMain.inf
- MdeModulePkg/Universal/PCD/Pei/Pcd.inf {
<LibraryClasses>
PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
- }
- ArmPlatformPkg/PlatformPei/PlatformPeim.inf
- AmdModulePkg/Iscp/IscpPei.inf
- OpenPlatformPkg/Platforms/AMD/Styx/Drivers/PlatInitPei/PlatInitPei.inf
- ArmPlatformPkg/MemoryInitPei/MemoryInitPeim.inf
- ArmPkg/Drivers/CpuPei/CpuPei.inf
- MdeModulePkg/Universal/Variable/Pei/VariablePei.inf
- MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf {
<LibraryClasses>
NULL|IntelFrameworkModulePkg/Library/LzmaCustomDecompressLib/LzmaCustomDecompressLib.inf
- }
- #
- # DXE
- #
- MdeModulePkg/Core/Dxe/DxeMain.inf {
<LibraryClasses>
NULL|MdeModulePkg/Library/DxeCrc32GuidedSectionExtractLib/DxeCrc32GuidedSectionExtractLib.inf
- }
- MdeModulePkg/Universal/PCD/Dxe/Pcd.inf {
<LibraryClasses>
PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
- }
- #
- # Architectural Protocols
- #
- ArmPkg/Drivers/CpuDxe/CpuDxe.inf
- MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf
- MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf
- MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf
- MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf
- MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCounterRuntimeDxe.inf
- EmbeddedPkg/ResetRuntimeDxe/ResetRuntimeDxe.inf
- EmbeddedPkg/RealTimeClockRuntimeDxe/RealTimeClockRuntimeDxe.inf
- EmbeddedPkg/MetronomeDxe/MetronomeDxe.inf
- MdeModulePkg/Universal/EbcDxe/EbcDxe.inf
- #
- # Console IO support
- #
- MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf
- MdeModulePkg/Universal/SerialDxe/SerialDxe.inf
- MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf
- MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf
- ArmPkg/Drivers/ArmGic/ArmGicDxe.inf
- ArmPkg/Drivers/TimerDxe/TimerDxe.inf
- #
- # Environment Variables Protocol
- #
- MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf {
<LibraryClasses>
AuthVariableLib|MdeModulePkg/Library/AuthVariableLibNull/AuthVariableLibNull.inf
TpmMeasurementLib|MdeModulePkg/Library/TpmMeasurementLibNull/TpmMeasurementLibNull.inf
VarCheckLib|MdeModulePkg/Library/VarCheckLib/VarCheckLib.inf
NULL|MdeModulePkg/Library/VarCheckUefiLib/VarCheckUefiLib.inf
- }
- OpenPlatformPkg/Platforms/AMD/Styx/Drivers/StyxSpiFvDxe/StyxSpiFvDxe.inf
- #
- # Iscp support
- #
- AmdModulePkg/Iscp/IscpDxe.inf
- #
- # FDT support
- #
- OpenPlatformPkg/Platforms/AMD/Styx/Drivers/FdtDxe/FdtDxe.inf {
<LibraryClasses>
# deprecated BdsLib from the ARM BDS
BdsLib|ArmPkg/Library/BdsLib/BdsLib.inf
FdtLib|EmbeddedPkg/Library/FdtLib/FdtLib.inf
- }
- #
- # PCI support
- #
- AmdModulePkg/Gionb/Gionb.inf
- ArmPkg/Drivers/ArmPciCpuIo2Dxe/ArmPciCpuIo2Dxe.inf
- MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciHostBridgeDxe.inf
- MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
- #
- # MP-Boot: ACPI[Parking Protocol] + FDT[Spin-Table]
- #
- OpenPlatformPkg/Platforms/AMD/Styx/Drivers/MpBootDxe/MpBootDxe.inf
- #
- # AHCI Support
- #
- MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf
- MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf
- MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBusDxe.inf
- MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe.inf
- OpenPlatformPkg/Platforms/AMD/Styx/Drivers/SataControllerDxe/SataControllerDxe.inf
- #
- # USB Support
- #
- MdeModulePkg/Bus/Pci/UhciDxe/UhciDxe.inf
- MdeModulePkg/Bus/Pci/EhciDxe/EhciDxe.inf
- MdeModulePkg/Bus/Pci/XhciDxe/XhciDxe.inf
- MdeModulePkg/Bus/Usb/UsbBusDxe/UsbBusDxe.inf
- MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassStorageDxe.inf
+!if $(DO_XGBE)
- #
- # SNP support
- #
- AmdModulePkg/SnpDxe/SnpDxePort0.inf
- AmdModulePkg/SnpDxe/SnpDxePort1.inf
+!endif
- #
- # Marvell Yukon Ethernet (Overdrive 1000 has 88e8059)
- #
- OpenPlatformPkg/Drivers/Net/MarvellYukonDxe/MarvellYukonDxe.inf
- #
- # Networking stack
- #
- MdeModulePkg/Universal/Network/SnpDxe/SnpDxe.inf
- MdeModulePkg/Universal/Network/DpcDxe/DpcDxe.inf
- MdeModulePkg/Universal/Network/ArpDxe/ArpDxe.inf
- MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Dxe.inf
+# MdeModulePkg/Universal/Network/Ip4ConfigDxe/Ip4ConfigDxe.inf
- MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Dxe.inf
- MdeModulePkg/Universal/Network/MnpDxe/MnpDxe.inf {
<PcdsFixedAtBuild>
gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x21
- }
- MdeModulePkg/Universal/Network/VlanConfigDxe/VlanConfigDxe.inf
- MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Dxe.inf
- MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Dxe.inf
- MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Dxe.inf
- MdeModulePkg/Universal/Network/UefiPxeBcDxe/UefiPxeBcDxe.inf
+## Bug https://bugs.linaro.org/show_bug.cgi?id=2239 +# MdeModulePkg/Universal/Network/IScsiDxe/IScsiDxe.inf
- #
- # Core Info
- #
- OpenPlatformPkg/Platforms/AMD/Styx/Drivers/PlatInitDxe/PlatInitDxe.inf
- #
- # ACPI Support
- #
- MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf
- OpenPlatformPkg/Platforms/AMD/Styx/AcpiTables/AcpiAml.inf
- OpenPlatformPkg/Platforms/AMD/Styx/Drivers/AcpiPlatformDxe/AcpiPlatformDxe.inf
- #
- # SMBIOS Support
- #
- MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf
- OpenPlatformPkg/Platforms/AMD/Styx/Drivers/PlatformSmbiosDxe/PlatformSmbiosDxe.inf
- #
- # FAT filesystem + GPT/MBR partitioning
- #
- MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf
- MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf
- FatPkg/EnhancedFatDxe/Fat.inf
- MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf
- #
- # Bds
- #
- MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf
- MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf
- MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf
- MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
- MdeModulePkg/Application/UiApp/UiApp.inf {
<LibraryClasses>
NULL|MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf
NULL|MdeModulePkg/Library/BootManagerUiLib/BootManagerUiLib.inf
NULL|MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanceManagerUiLib.inf
- }
- #
- # Crypto Accelerator support (RNG only)
- #
- OpenPlatformPkg/Platforms/AMD/Styx/Drivers/StyxRngDxe/StyxRngDxe.inf
- #
- # UEFI application (Shell Embedded Boot Loader)
- #
- ShellPkg/Application/Shell/Shell.inf {
<LibraryClasses>
ShellCommandLib|ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.inf
NULL|ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.inf
NULL|ShellPkg/Library/UefiShellLevel1CommandsLib/UefiShellLevel1CommandsLib.inf
NULL|ShellPkg/Library/UefiShellLevel3CommandsLib/UefiShellLevel3CommandsLib.inf
NULL|ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.inf
NULL|ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.inf
NULL|ShellPkg/Library/UefiShellInstall1CommandsLib/UefiShellInstall1CommandsLib.inf
NULL|ShellPkg/Library/UefiShellNetwork1CommandsLib/UefiShellNetwork1CommandsLib.inf
NULL|ShellPkg/Library/UefiShellTftpCommandLib/UefiShellTftpCommandLib.inf
HandleParsingLib|ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.inf
PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf
BcfgCommandLib|ShellPkg/Library/UefiShellBcfgCommandLib/UefiShellBcfgCommandLib.inf
FileHandleLib|MdePkg/Library/UefiFileHandleLib/UefiFileHandleLib.inf
ShellLib|ShellPkg/Library/UefiShellLib/UefiShellLib.inf
<PcdsFixedAtBuild>
gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0xFF
gEfiShellPkgTokenSpaceGuid.PcdShellLibAutoInitialize|FALSE
gEfiMdePkgTokenSpaceGuid.PcdUefiLibMaxPrintBufferSize|8000
- }
diff --git a/Platforms/AMD/Styx/Overdrive1000Board/Overdrive1000Board.fdf b/Platforms/AMD/Styx/Overdrive1000Board/Overdrive1000Board.fdf new file mode 100644 index 0000000..95fd835 --- /dev/null +++ b/Platforms/AMD/Styx/Overdrive1000Board/Overdrive1000Board.fdf @@ -0,0 +1,412 @@ +# +# Copyright (c) 2014 - 2016, AMD Incorporated. 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. +#
+################################################################################ +# +# FD Section +# The [FD] Section is made up of the definition statements and a +# description of what goes into the Flash Device Image. Each FD section +# defines one flash "device" image. A flash device image may be one of +# the following: Removable media bootable image (like a boot floppy +# image,) an Option ROM image (that would be "flashed" into an add-in +# card,) a System "Flash" image (that would be burned into a system's +# flash) or an Update ("Capsule") image that will be used to update and +# existing system flash. +# +################################################################################
+[FD.Overdrive1000_ROM] +BaseAddress = 0x8000C80000|gArmTokenSpaceGuid.PcdFdBaseAddress # The base address of the Firmware in NOR Flash. +Size = 0x00500000|gArmTokenSpaceGuid.PcdFdSize # The size in bytes of the FLASH Device +ErasePolarity = 1
+# This one is tricky, it must be: BlockSize * NumBlocks = Size +BlockSize = 0x00001000 +NumBlocks = 0x500
+################################################################################ +# +# Following are lists of FD Region layout which correspond to the locations of different +# images within the flash device. +# +# Regions must be defined in ascending order and may not overlap. +# +# A Layout Region start with a eight digit hex offset (leading "0x" required) followed by +# the pipe "|" character, followed by the size of the region, also in hex with the leading +# "0x" characters. Like: +# Offset|Size +# PcdOffsetCName|PcdSizeCName +# RegionType <FV, DATA, or FILE> +# +################################################################################
+0x00000000|0x00200000 +FILE = OpenPlatformPkg/Platforms/AMD/Styx/Overdrive1000Board/Binary/PreUefiFirmware.bin
+0x00200000|0x00260000 +gArmTokenSpaceGuid.PcdFvBaseAddress|gArmTokenSpaceGuid.PcdFvSize +FV = STYX_EFI
+!include OpenPlatformPkg/Platforms/AMD/Styx/Common/Varstore.fdf.inc
+################################################################################ +# +# FV Section +# +# [FV] section is used to define what components or modules are placed within a flash +# device file. This section also defines order the components and modules are positioned +# within the image. The [FV] section consists of define statements, set statements and +# module statements. +# +################################################################################
+[FV.FvMain] +FvNameGuid = 94f067ae-2aa6-4b30-aa07-4e47fe518bb8 +BlockSize = 0x40 +NumBlocks = 0 # This FV gets compressed so make it just big enough +FvAlignment = 16 # FV alignment and FV attributes setting. +ERASE_POLARITY = 1 +MEMORY_MAPPED = TRUE +STICKY_WRITE = TRUE +LOCK_CAP = TRUE +LOCK_STATUS = TRUE +WRITE_DISABLED_CAP = TRUE +WRITE_ENABLED_CAP = TRUE +WRITE_STATUS = TRUE +WRITE_LOCK_CAP = TRUE +WRITE_LOCK_STATUS = TRUE +READ_DISABLED_CAP = TRUE +READ_ENABLED_CAP = TRUE +READ_STATUS = TRUE +READ_LOCK_CAP = TRUE +READ_LOCK_STATUS = TRUE
- INF MdeModulePkg/Core/Dxe/DxeMain.inf
- INF MdeModulePkg/Universal/PCD/Dxe/Pcd.inf
- #
- # PI DXE Drivers producing Architectural Protocols (EFI Services)
- #
- INF ArmPkg/Drivers/CpuDxe/CpuDxe.inf
- INF MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf
- INF MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf
- INF MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf
- INF MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf
- INF MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCounterRuntimeDxe.inf
- INF EmbeddedPkg/ResetRuntimeDxe/ResetRuntimeDxe.inf
- INF EmbeddedPkg/RealTimeClockRuntimeDxe/RealTimeClockRuntimeDxe.inf
- INF EmbeddedPkg/MetronomeDxe/MetronomeDxe.inf
- INF MdeModulePkg/Universal/EbcDxe/EbcDxe.inf
- INF MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf
- INF MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf
- #
- # Console IO support
- #
- INF MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf
- INF MdeModulePkg/Universal/SerialDxe/SerialDxe.inf
- INF ArmPkg/Drivers/ArmGic/ArmGicDxe.inf
- INF ArmPkg/Drivers/TimerDxe/TimerDxe.inf
- #
- # FAT filesystem + GPT/MBR partitioning
- #
- INF MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf
- INF MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf
- INF FatPkg/EnhancedFatDxe/Fat.inf
- INF MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf
- #
- # Environment Variables Protocol
- #
- INF MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf
- INF OpenPlatformPkg/Platforms/AMD/Styx/Drivers/StyxSpiFvDxe/StyxSpiFvDxe.inf
- #
- # Iscp support
- #
- INF AmdModulePkg/Iscp/IscpDxe.inf
- #
- # FDT support
- #
- INF OpenPlatformPkg/Platforms/AMD/Styx/Drivers/FdtDxe/FdtDxe.inf
- FILE FREEFORM = PCD(gAmdStyxTokenSpaceGuid.PcdStyxFdt) {
- SECTION RAW = OpenPlatformPkg/Platforms/AMD/Styx/Overdrive1000Board/FdtBlob/styx-overdrive1000.dtb
- }
- #
- # PCI support
- #
- INF AmdModulePkg/Gionb/Gionb.inf
- INF ArmPkg/Drivers/ArmPciCpuIo2Dxe/ArmPciCpuIo2Dxe.inf
- INF MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciHostBridgeDxe.inf
- INF MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
- #
- # AHCI Support
- #
- INF MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf
- INF MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf
- INF MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBusDxe.inf
- INF MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe.inf
- INF OpenPlatformPkg/Platforms/AMD/Styx/Drivers/SataControllerDxe/SataControllerDxe.inf
- #
- # USB Support
- #
- INF MdeModulePkg/Bus/Pci/UhciDxe/UhciDxe.inf
- INF MdeModulePkg/Bus/Pci/EhciDxe/EhciDxe.inf
- INF MdeModulePkg/Bus/Pci/XhciDxe/XhciDxe.inf
- INF MdeModulePkg/Bus/Usb/UsbBusDxe/UsbBusDxe.inf
- INF MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassStorageDxe.inf
+!if $(DO_XGBE)
- #
- # SNP support
- #
- INF AmdModulePkg/SnpDxe/SnpDxePort0.inf
- INF AmdModulePkg/SnpDxe/SnpDxePort1.inf
+!endif
- #
- # Marvell Ethernet Driver (Overdrive 1000)
- #
- INF OpenPlatformPkg/Drivers/Net/MarvellYukonDxe/MarvellYukonDxe.inf
- #
- # Networking stack
- #
- INF MdeModulePkg/Universal/Network/SnpDxe/SnpDxe.inf
- INF MdeModulePkg/Universal/Network/DpcDxe/DpcDxe.inf
- INF MdeModulePkg/Universal/Network/ArpDxe/ArpDxe.inf
- INF MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Dxe.inf
+# INF MdeModulePkg/Universal/Network/Ip4ConfigDxe/Ip4ConfigDxe.inf
- INF MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Dxe.inf
- INF MdeModulePkg/Universal/Network/MnpDxe/MnpDxe.inf
- INF MdeModulePkg/Universal/Network/VlanConfigDxe/VlanConfigDxe.inf
- INF MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Dxe.inf
- INF MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Dxe.inf
- INF MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Dxe.inf
- INF MdeModulePkg/Universal/Network/UefiPxeBcDxe/UefiPxeBcDxe.inf
+## Bug https://bugs.linaro.org/show_bug.cgi?id=2239 +# INF MdeModulePkg/Universal/Network/IScsiDxe/IScsiDxe.inf
- #
- # Core Info
- #
- INF OpenPlatformPkg/Platforms/AMD/Styx/Drivers/PlatInitDxe/PlatInitDxe.inf
- #
- # ACPI Support
- #
- INF MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf
- INF RuleOverride=ACPITABLE OpenPlatformPkg/Platforms/AMD/Styx/AcpiTables/AcpiAml.inf
- INF OpenPlatformPkg/Platforms/AMD/Styx/Drivers/AcpiPlatformDxe/AcpiPlatformDxe.inf
- #
- # MP-Boot: ACPI[Parking Protocol] + FDT[Spin-Table]
- #
- INF OpenPlatformPkg/Platforms/AMD/Styx/Drivers/MpBootDxe/MpBootDxe.inf
- #
- # SMBIOS Support
- #
- INF MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf
- INF OpenPlatformPkg/Platforms/AMD/Styx/Drivers/PlatformSmbiosDxe/PlatformSmbiosDxe.inf
- #
- # UEFI application (Shell Embedded Boot Loader)
- #
- INF ShellPkg/Application/Shell/Shell.inf
- #
- # Bds
- #
- INF MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf
- INF MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf
- INF MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf
- INF MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
- INF MdeModulePkg/Application/UiApp/UiApp.inf
- #
- # Crypto Accelerator support (RNG only)
- #
- INF OpenPlatformPkg/Platforms/AMD/Styx/Drivers/StyxRngDxe/StyxRngDxe.inf
+[FV.STYX_EFI] +FvAlignment = 16 +ERASE_POLARITY = 1 +MEMORY_MAPPED = TRUE +STICKY_WRITE = TRUE +LOCK_CAP = TRUE +LOCK_STATUS = TRUE +WRITE_DISABLED_CAP = TRUE +WRITE_ENABLED_CAP = TRUE +WRITE_STATUS = TRUE +WRITE_LOCK_CAP = TRUE +WRITE_LOCK_STATUS = TRUE +READ_DISABLED_CAP = TRUE +READ_ENABLED_CAP = TRUE +READ_STATUS = TRUE +READ_LOCK_CAP = TRUE +READ_LOCK_STATUS = TRUE
- INF ArmPlatformPkg/PrePeiCore/PrePeiCoreUniCore.inf
- INF MdeModulePkg/Core/Pei/PeiMain.inf
- INF ArmPlatformPkg/PlatformPei/PlatformPeim.inf
- INF AmdModulePkg/Iscp/IscpPei.inf
- INF OpenPlatformPkg/Platforms/AMD/Styx/Drivers/PlatInitPei/PlatInitPei.inf
- INF ArmPlatformPkg/MemoryInitPei/MemoryInitPeim.inf
- INF ArmPkg/Drivers/CpuPei/CpuPei.inf
- INF MdeModulePkg/Universal/PCD/Pei/Pcd.inf
- INF MdeModulePkg/Universal/Variable/Pei/VariablePei.inf
- INF MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf
- FILE FV_IMAGE = 9E21FD93-9C72-4c15-8C4B-E77F1DB2D792 {
- SECTION GUIDED EE4E5898-3914-4259-9D6E-DC7BD79403CF PROCESSING_REQUIRED = TRUE {
SECTION FV_IMAGE = FVMAIN
- }
- }
+################################################################################ +# +# Rules are use with the [FV] section's module INF type to define +# how an FFS file is created for a given INF file. The following Rule are the default +# rules for the different module type. User can add the customized rules to define the +# content of the FFS file. +# +################################################################################
+############################################################################ +# Example of a DXE_DRIVER FFS file with a Checksum encapsulation section # +############################################################################ +# +#[Rule.Common.DXE_DRIVER] +# FILE DRIVER = $(NAMED_GUID) { +# DXE_DEPEX DXE_DEPEX Optional $(INF_OUTPUT)/$(MODULE_NAME).depex +# COMPRESS PI_STD { +# GUIDED { +# PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi +# UI STRING="$(MODULE_NAME)" Optional +# VERSION STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER) +# } +# } +# } +# +############################################################################
+[Rule.Common.SEC]
- FILE SEC = $(NAMED_GUID) RELOCS_STRIPPED {
- TE TE Align = 4K $(INF_OUTPUT)/$(MODULE_NAME).efi
- }
+[Rule.Common.PEI_CORE]
- FILE PEI_CORE = $(NAMED_GUID) {
- TE TE Align = Auto $(INF_OUTPUT)/$(MODULE_NAME).efi
- UI STRING ="$(MODULE_NAME)" Optional
- }
+[Rule.Common.PEIM]
- FILE PEIM = $(NAMED_GUID) {
PEI_DEPEX PEI_DEPEX Optional $(INF_OUTPUT)/$(MODULE_NAME).depex
TE TE Align = Auto $(INF_OUTPUT)/$(MODULE_NAME).efi
UI STRING="$(MODULE_NAME)" Optional
- }
+[Rule.Common.PEIM.Binary]
- FILE PEIM = $(NAMED_GUID) {
PEI_DEPEX PEI_DEPEX Optional |.depex
TE TE Align = Auto |.efi
UI STRING="$(MODULE_NAME)" Optional
- }
+[Rule.Common.PEIM.TIANOCOMPRESSED]
- FILE PEIM = $(NAMED_GUID) DEBUG_MYTOOLS_IA32 {
- PEI_DEPEX PEI_DEPEX Optional $(INF_OUTPUT)/$(MODULE_NAME).depex
- GUIDED A31280AD-481E-41B6-95E8-127F4C984779 PROCESSING_REQUIRED = TRUE {
PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi
UI STRING="$(MODULE_NAME)" Optional
- }
- }
+[Rule.Common.DXE_CORE]
- FILE DXE_CORE = $(NAMED_GUID) {
- PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi
- UI STRING="$(MODULE_NAME)" Optional
- }
+[Rule.Common.UEFI_DRIVER]
- FILE DRIVER = $(NAMED_GUID) {
- DXE_DEPEX DXE_DEPEX Optional $(INF_OUTPUT)/$(MODULE_NAME).depex
- PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi
- UI STRING="$(MODULE_NAME)" Optional
- }
+[Rule.Common.UEFI_DRIVER.Binary]
- FILE DRIVER = $(NAMED_GUID) {
- PE32 PE32 |.efi
- UI STRING="$(MODULE_NAME)" Optional
- }
+[Rule.Common.DXE_DRIVER]
- FILE DRIVER = $(NAMED_GUID) {
- DXE_DEPEX DXE_DEPEX Optional $(INF_OUTPUT)/$(MODULE_NAME).depex
- PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi
- UI STRING="$(MODULE_NAME)" Optional
- }
+[Rule.Common.DXE_RUNTIME_DRIVER]
- FILE DRIVER = $(NAMED_GUID) {
- DXE_DEPEX DXE_DEPEX Optional $(INF_OUTPUT)/$(MODULE_NAME).depex
- PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi
- UI STRING="$(MODULE_NAME)" Optional
- }
+[Rule.Common.DXE_RUNTIME_DRIVER.Binary]
- FILE DRIVER = $(NAMED_GUID) {
- DXE_DEPEX DXE_DEPEX Optional |.depex
- PE32 PE32 |.efi
- UI STRING="$(MODULE_NAME)" Optional
- }
+[Rule.Common.UEFI_APPLICATION]
- FILE APPLICATION = $(NAMED_GUID) {
- UI STRING ="$(MODULE_NAME)" Optional
- PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi
- }
+[Rule.Common.UEFI_DRIVER.BINARY]
- FILE DRIVER = $(NAMED_GUID) {
- DXE_DEPEX DXE_DEPEX Optional |.depex
- PE32 PE32 |.efi
- UI STRING="$(MODULE_NAME)" Optional
- VERSION STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)
- }
+[Rule.Common.UEFI_APPLICATION.BINARY]
- FILE APPLICATION = $(NAMED_GUID) {
- PE32 PE32 |.efi
- UI STRING="$(MODULE_NAME)" Optional
- VERSION STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)
- }
+[Rule.Common.USER_DEFINED.ACPITABLE]
- FILE FREEFORM = $(NAMED_GUID) {
- RAW ASL |.aml
- }
-- 2.5.0
On 10/18/2016 04:31 AM, Ard Biesheuvel wrote:
On 17 October 2016 at 23:15, Alan Ott alan@softiron.co.uk wrote:
Add a configuration for the SoftIron Overdrive 1000. This is similar to OverdriveBoard/ configuration (which is for the Overdrive 3000).
The Overdrive 1000 contains an AMD Opteron-A-based SoC with 4 Cortex-A57 cores. The board contains Marvell Yukon 1Gbit ethernet, two SATA 3.0 ports, and two USB 3.0 ports.
This configuration contains a PreUefiFirmware.bin image which was generated using the AMD Firmware Development Kit (FDK) version 1.0.0.2, configured for use with DDR4 memory.
In comparison with the .dsc and .fdf in OverdriveBoard/, the files for Overdrive1000Board contain the following differences:
- Number of cores,
- XGBE support (none in Overdrive 1000),
- SataPi and SataPortCount for available ports,
- PCIe configuration,
- Addition of MarvellYukonDxe driver.
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Alan Ott alan@softiron.co.uk
.../Overdrive1000Board/Binary/PreUefiFirmware.bin | Bin 0 -> 401408 bytes .../FdtBlob/styx-overdrive1000.dtb | Bin 0 -> 8329 bytes .../FdtBlob/styx-overdrive1000.dts | 458 +++++++++++++ .../Styx/Overdrive1000Board/Overdrive1000Board.dsc | 734 +++++++++++++++++++++ .../Styx/Overdrive1000Board/Overdrive1000Board.fdf | 412 ++++++++++++ 5 files changed, 1604 insertions(+) create mode 100644 Platforms/AMD/Styx/Overdrive1000Board/Binary/PreUefiFirmware.bin create mode 100644 Platforms/AMD/Styx/Overdrive1000Board/FdtBlob/styx-overdrive1000.dtb create mode 100644 Platforms/AMD/Styx/Overdrive1000Board/FdtBlob/styx-overdrive1000.dts create mode 100644 Platforms/AMD/Styx/Overdrive1000Board/Overdrive1000Board.dsc create mode 100644 Platforms/AMD/Styx/Overdrive1000Board/Overdrive1000Board.fdf
[...]
diff --git a/Platforms/AMD/Styx/Overdrive1000Board/FdtBlob/styx-overdrive1000.dts b/Platforms/AMD/Styx/Overdrive1000Board/FdtBlob/styx-overdrive1000.dts new file mode 100644 index 0000000..483924e --- /dev/null +++ b/Platforms/AMD/Styx/Overdrive1000Board/FdtBlob/styx-overdrive1000.dts
This file is mostly identical to the existing one, save for one node (see below)
@@ -0,0 +1,458 @@ +/*
- DTS file for AMD Seattle (Rev.B) Overdrive Development Board
- Copyright 2015 - 2016 ADVANCED MICRO DEVICES, INC. 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
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR
- IMPLIED.
- */
+/dts-v1/;
+/ {
model = "AMD Seattle (Rev.B) Development Board (Overdrive)";
compatible = "amd,seattle-overdrive", "amd,seattle";
interrupt-parent = <0x1>;
#address-cells = <0x2>;
#size-cells = <0x2>;
interrupt-controller@e1101000 {
compatible = "arm,gic-400", "arm,cortex-a15-gic";
interrupt-controller;
#interrupt-cells = <0x3>;
#address-cells = <0x2>;
#size-cells = <0x2>;
reg = <0x0 0xe1110000 0x0 0x1000>,
<0x0 0xe112f000 0x0 0x2000>,
<0x0 0xe1140000 0x0 0x10000>,
<0x0 0xe1160000 0x0 0x10000>;
interrupts = <0x1 0x9 0xf04>;
ranges = <0x0 0x0 0x0 0xe1100000 0x0 0x100000>;
linux,phandle = <0x1>;
phandle = <0x1>;
v2m@e0080000 {
compatible = "arm,gic-v2m-frame";
msi-controller;
reg = <0x0 0x80000 0x0 0x1000>;
linux,phandle = <0x4>;
phandle = <0x4>;
};
};
timer {
compatible = "arm,armv8-timer";
interrupts = <0x1 0xd 0xff04>,
<0x1 0xe 0xff04>,
<0x1 0xb 0xff04>,
<0x1 0xa 0xff04>;
};
pmu {
compatible = "arm,armv8-pmuv3";
interrupts = <0x0 0x7 0x4>,
<0x0 0x8 0x4>,
<0x0 0x9 0x4>,
<0x0 0xa 0x4>,
<0x0 0xb 0x4>,
<0x0 0xc 0x4>,
<0x0 0xd 0x4>,
<0x0 0xe 0x4>;
};
smb {
compatible = "simple-bus";
#address-cells = <0x2>;
#size-cells = <0x2>;
ranges;
/*
* dma-ranges is 40-bit address space containing:
* - GICv2m MSI register is at 0xe0080000
* - DRAM range [0x8000000000 to 0xffffffffff]
*/
dma-ranges = <0x0 0x0 0x0 0x0 0x100 0x0>;
clk100mhz_0 {
compatible = "fixed-clock";
#clock-cells = <0x0>;
clock-frequency = <100000000>;
clock-output-names = "adl3clk_100mhz";
};
clk375mhz {
compatible = "fixed-clock";
#clock-cells = <0x0>;
clock-frequency = <375000000>;
clock-output-names = "ccpclk_375mhz";
};
clk333mhz {
compatible = "fixed-clock";
#clock-cells = <0x0>;
clock-frequency = <333000000>;
clock-output-names = "sataclk_333mhz";
linux,phandle = <0x2>;
phandle = <0x2>;
};
clk500mhz_0 {
compatible = "fixed-clock";
#clock-cells = <0x0>;
clock-frequency = <500000000>;
clock-output-names = "pcieclk_500mhz";
};
clk500mhz_1 {
compatible = "fixed-clock";
#clock-cells = <0x0>;
clock-frequency = <500000000>;
clock-output-names = "dmaclk_500mhz";
};
clk250mhz_4 {
compatible = "fixed-clock";
#clock-cells = <0x0>;
clock-frequency = <250000000>;
clock-output-names = "miscclk_250mhz";
linux,phandle = <0xd>;
phandle = <0xd>;
};
clk100mhz_1 {
compatible = "fixed-clock";
#clock-cells = <0x0>;
clock-frequency = <100000000>;
clock-output-names = "uartspiclk_100mhz";
linux,phandle = <0x3>;
phandle = <0x3>;
};
sata@e0300000 {
compatible = "snps,dwc-ahci";
reg = <0x0 0xe0300000 0x0 0xf0000>;
interrupts = <0x0 0x163 0x4>;
clocks = <0x2>;
dma-coherent;
};
sata@e0d00000 {
status = "disabled";
compatible = "snps,dwc-ahci";
reg = <0x0 0xe0d00000 0x0 0xf0000>;
interrupts = <0x0 0x162 0x4>;
clocks = <0x2>;
dma-coherent;
};
i2c@e1000000 {
compatible = "snps,designware-i2c";
reg = <0x0 0xe1000000 0x0 0x1000>;
interrupts = <0x0 0x165 0x4>;
clocks = <0xd>;
};
i2c@e0050000 {
compatible = "snps,designware-i2c";
reg = <0x0 0xe0050000 0x0 0x1000>;
interrupts = <0x0 0x154 0x4>;
clocks = <0xd>;
};
serial@e1010000 {
compatible = "arm,pl011", "arm,primecell";
reg = <0x0 0xe1010000 0x0 0x1000>;
interrupts = <0x0 0x148 0x4>;
clocks = <0x3 0x3>;
clock-names = "uartclk", "apb_pclk";
};
ssp@e1020000 {
compatible = "arm,pl022", "arm,primecell";
reg = <0x0 0xe1020000 0x0 0x1000>;
spi-controller;
interrupts = <0x0 0x14a 0x4>;
clocks = <0x3>;
clock-names = "apb_pclk";
};
ssp@e1030000 {
compatible = "arm,pl022", "arm,primecell";
reg = <0x0 0xe1030000 0x0 0x1000>;
spi-controller;
interrupts = <0x0 0x149 0x4>;
clocks = <0x3>;
clock-names = "apb_pclk";
num-cs = <0x1>;
#address-cells = <0x1>;
#size-cells = <0x0>;
sdcard@0 {
compatible = "mmc-spi-slot";
reg = <0x0>;
spi-max-frequency = <20000000>;
voltage-ranges = <3200 3400>;
pl022,hierarchy = <0x0>;
pl022,interface = <0x0>;
pl022,com-mode = <0x0>;
pl022,rx-level-trig = <0x0>;
pl022,tx-level-trig = <0x0>;
};
};
gpio@e1040000 { /* [0 : 7] */
compatible = "arm,pl061", "arm,primecell";
#gpio-cells = <0x2>;
reg = <0x0 0xe1040000 0x0 0x1000>;
gpio-controller;
interrupt-controller;
#interrupt-cells = <0x2>;
interrupts = <0x0 0x167 0x4>;
clocks = <0x3>;
clock-names = "apb_pclk";
};
... this one, which the Seattle DTS version in the Linux kernel documents as
/* Not available to OS for B0 */
which I assume means B0 and later.
Those GPIOs exist on B1, which is what we are using. The issue is that LSIOC_GPIO0 - LSIOC_GPIO2 are used by the firmware for resetting the PCIe devices and are controlled by the firmware. This bank shouldn't be mapped for the OS.
Fixed in v2.
Does the OS have a use for this GPIO block in your case? If not, I'd rather we stick with a single dts/dtb combo.
Agreed. and done in v2
gpio@e1050000 { /* [0 : 7] */
compatible = "arm,pl061", "arm,primecell";
#gpio-cells = <0x2>;
reg = <0x0 0xe1050000 0x0 0x1000>;
gpio-controller;
interrupt-controller;
#interrupt-cells = <0x2>;
interrupts = <0x0 0x166 0x4>;
clocks = <0x3>;
clock-names = "apb_pclk";
};
gpio@e0020000 { /* [8 : 15] */
status = "disabled";
compatible = "arm,pl061", "arm,primecell";
#gpio-cells = <0x2>;
reg = <0x0 0xe0020000 0x0 0x1000>;
gpio-controller;
interrupt-controller;
#interrupt-cells = <0x2>;
interrupts = <0x0 0x16e 0x4>;
clocks = <0x3>;
clock-names = "apb_pclk";
};
gpio@e0030000 { /* [16 : 23] */
status = "disabled";
compatible = "arm,pl061", "arm,primecell";
#gpio-cells = <0x2>;
reg = <0x0 0xe0030000 0x0 0x1000>;
gpio-controller;
interrupt-controller;
#interrupt-cells = <0x2>;
interrupts = <0x0 0x16d 0x4>;
clocks = <0x3>;
clock-names = "apb_pclk";
};
gpio@e0080000 { /* [24] */
compatible = "arm,pl061", "arm,primecell";
#gpio-cells = <0x2>;
reg = <0x0 0xe0080000 0x0 0x1000>;
gpio-controller;
interrupt-controller;
#interrupt-cells = <0x2>;
interrupts = <0x0 0x169 0x4>;
clocks = <0x3>;
clock-names = "apb_pclk";
};
ccp: ccp@e0100000 {
compatible = "amd,ccp-seattle-v1a";
reg = <0x0 0xe0100000 0x0 0x10000>;
interrupts = <0x0 0x3 0x4>;
dma-coherent;
amd,zlib-support = <0x1>;
};
pcie: pcie@f0000000 {
compatible = "pci-host-ecam-generic";
#address-cells = <0x3>;
#size-cells = <0x2>;
#interrupt-cells = <0x1>;
device_type = "pci";
bus-range = <0x0 0x7f>;
msi-parent = <0x4>;
reg = <0x0 0xf0000000 0x0 0x10000000>;
interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
interrupt-map = <0x1000 0x0 0x0 0x1 0x1 0x0 0x0 0x0 0x120 0x1>,
<0x1000 0x0 0x0 0x2 0x1 0x0 0x0 0x0 0x121 0x1>,
<0x1000 0x0 0x0 0x3 0x1 0x0 0x0 0x0 0x122 0x1>,
<0x1000 0x0 0x0 0x4 0x1 0x0 0x0 0x0 0x123 0x1>;
dma-coherent;
dma-ranges = <0x43000000 0x0 0x0 0x0 0x0 0x100 0x0>;
ranges = <0x1000000 0x0 0x00000000 0x0 0xefff0000 0x00 0x00010000>, /* I/O Memory (size=64K) */
<0x2000000 0x0 0x40000000 0x0 0x40000000 0x00 0x80000000>, /* 32-bit MMIO (size=2G) */
<0x3000000 0x1 0x00000000 0x1 0x00000000 0x7f 0x00000000>; /* 64-bit MMIO (size= 124G) */
};
ccn@0xe8000000 {
compatible = "arm,ccn-504";
reg = <0x0 0xe8000000 0x0 0x1000000>;
interrupts = <0x0 0x17c 0x4>;
};
gwdt@e0bb0000 {
status = "disabled";
compatible = "arm,sbsa-gwdt";
reg = <0x0 0xe0bb0000 0x0 0x10000
0x0 0xe0bc0000 0x0 0x10000>;
reg-names = "refresh", "control";
interrupts = <0x0 0x151 0x4>;
interrupt-names = "ws0";
};
kcs@e0010000 {
status = "disabled";
compatible = "ipmi-kcs";
device_type = "ipmi";
reg = <0x0 0xe0010000 0 0x8>;
interrupts = <0 389 4>;
interrupt-names = "ipmi_kcs";
reg-size = <1>;
reg-spacing = <4>;
};
clk250mhz_0 {
compatible = "fixed-clock";
#clock-cells = <0x0>;
clock-frequency = <250000000>;
clock-output-names = "xgmacclk0_dma_250mhz";
linux,phandle = <0x5>;
phandle = <0x5>;
};
clk250mhz_1 {
compatible = "fixed-clock";
#clock-cells = <0x0>;
clock-frequency = <250000000>;
clock-output-names = "xgmacclk0_ptp_250mhz";
linux,phandle = <0x6>;
phandle = <0x6>;
};
clk250mhz_2 {
compatible = "fixed-clock";
#clock-cells = <0x0>;
clock-frequency = <250000000>;
clock-output-names = "xgmacclk1_dma_250mhz";
linux,phandle = <0x7>;
phandle = <0x7>;
};
clk250mhz_3 {
compatible = "fixed-clock";
#clock-cells = <0x0>;
clock-frequency = <250000000>;
clock-output-names = "xgmacclk1_ptp_250mhz";
linux,phandle = <0x8>;
phandle = <0x8>;
};
phy@e1240800 {
status = "disabled";
compatible = "amd,xgbe-phy-seattle-v1a";
reg = <0x0 0xe1240800 0x0 0x0400>, /* SERDES RX/TX0 */
<0x0 0xe1250000 0x0 0x0060>, /* SERDES IR 1/2 */
<0x0 0xe12500f8 0x0 0x0004>; /* SERDES IR 2/2 */
interrupts = <0x0 0x143 0x4>;
amd,speed-set = <0x0>;
amd,serdes-blwc = <0x1 0x1 0x0>;
amd,serdes-cdr-rate = <0x2 0x2 0x7>;
amd,serdes-pq-skew = <0xa 0xa 0x12>;
amd,serdes-tx-amp = <0xf 0xf 0xa>;
amd,serdes-dfe-tap-config = <0x3 0x3 0x1>;
amd,serdes-dfe-tap-enable = <0x0 0x0 0x7f>;
linux,phandle = <0x9>;
phandle = <0x9>;
};
phy@e1240c00 {
status = "disabled";
compatible = "amd,xgbe-phy-seattle-v1a";
reg = <0x0 0xe1240c00 0x0 0x0400>, /* SERDES RX/TX0 */
<0x0 0xe1250080 0x0 0x0060>, /* SERDES IR 1/2 */
<0x0 0xe12500fc 0x0 0x0004>; /* SERDES IR 2/2 */
interrupts = <0x0 0x142 0x4>;
amd,speed-set = <0x0>;
amd,serdes-blwc = <0x1 0x1 0x0>;
amd,serdes-cdr-rate = <0x2 0x2 0x7>;
amd,serdes-pq-skew = <0xa 0xa 0x12>;
amd,serdes-tx-amp = <0xf 0xf 0xa>;
amd,serdes-dfe-tap-config = <0x3 0x3 0x1>;
amd,serdes-dfe-tap-enable = <0x0 0x0 0x7f>;
linux,phandle = <0xa>;
phandle = <0xa>;
};
xgmac@e0700000 {
status = "disabled";
compatible = "amd,xgbe-seattle-v1a";
reg = <0x0 0xe0700000 0x0 0x80000 0x0 0xe0780000 0x0 0x80000>;
interrupts = <0x0 0x145 0x4>,
<0x0 0x15a 0x1>,
<0x0 0x15b 0x1>,
<0x0 0x15c 0x1>,
<0x0 0x15d 0x1>;
amd,per-channel-interrupt;
mac-address = [02 a1 a2 a3 a4 a5];
clocks = <0x5 0x6>;
clock-names = "dma_clk", "ptp_clk";
phy-handle = <0x9>;
phy-mode = "xgmii";
#stream-id-cells = <0x18>;
dma-coherent;
linux,phandle = <0xb>;
phandle = <0xb>;
};
xgmac@e0900000 {
status = "disabled";
compatible = "amd,xgbe-seattle-v1a";
reg = <0x0 0xe0900000 0x0 0x80000 0x0 0xe0980000 0x0 0x80000>;
interrupts = <0x0 0x144 0x4>,
<0x0 0x155 0x1>,
<0x0 0x156 0x1>,
<0x0 0x157 0x1>,
<0x0 0x158 0x1>;
amd,per-channel-interrupt;
mac-address = [02 b1 b2 b3 b4 b5];
clocks = <0x7 0x8>;
clock-names = "dma_clk", "ptp_clk";
phy-handle = <0xa>;
phy-mode = "xgmii";
#stream-id-cells = <0x18>;
dma-coherent;
linux,phandle = <0xc>;
phandle = <0xc>;
};
};
chosen {
stdout-path = "/smb/serial@e1010000";
/* Note:
* Linux support for pci-probe-only DT is not
* stable. Disable this for now and let Linux
* take care of the resource assignment.
*/
/* linux,pci-probe-only = <1>; */
};
psci {
compatible = "arm,psci-0.2", "arm,psci";
method = "smc";
};
+};
diff --git a/Platforms/AMD/Styx/Overdrive1000Board/Overdrive1000Board.dsc b/Platforms/AMD/Styx/Overdrive1000Board/Overdrive1000Board.dsc new file mode 100644 index 0000000..b2a5474 --- /dev/null +++ b/Platforms/AMD/Styx/Overdrive1000Board/Overdrive1000Board.dsc @@ -0,0 +1,734 @@ +# +# Copyright (c) 2014 - 2016, AMD Incorporated. 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 Section - statements that will be processed to create a Makefile. +# +################################################################################ +[Defines]
+DEFINE DO_XGBE = 0
You can remove this and the dependent blocks completely (we did the same for Cello)
Done in v2.
+DEFINE NUM_CORES = 4 +DEFINE DO_PSCI = 1 +DEFINE DO_ISCP = 1 +DEFINE DO_KCS = 1
- PLATFORM_NAME = Overdrive1000
- PLATFORM_GUID = B2296C02-9DA1-4CD1-BD48-4D4F0F1276EB
Please change the GUID
Done in v2.
- PLATFORM_VERSION = 0.1
- DSC_SPECIFICATION = 0x00010005
- OUTPUT_DIRECTORY = Build/Overdrive1000
- SUPPORTED_ARCHITECTURES = AARCH64
- BUILD_TARGETS = DEBUG|RELEASE
- SKUID_IDENTIFIER = DEFAULT
- FLASH_DEFINITION = OpenPlatformPkg/Platforms/AMD/Styx/Overdrive1000Board/Overdrive1000Board.fdf
+################################################################################ +# +# Library Class section - list of all Library Classes needed by this Platform. +# +################################################################################ +[LibraryClasses.common] +!if $(TARGET) == RELEASE
- DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf
- UncachedMemoryAllocationLib|ArmPkg/Library/UncachedMemoryAllocationLib/UncachedMemoryAllocationLib.inf
+!else
- DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- UncachedMemoryAllocationLib|ArmPkg/Library/UncachedMemoryAllocationLib/UncachedMemoryAllocationLib.inf
+!endif
- DebugPrintErrorLevelLib|MdePkg/Library/BaseDebugPrintErrorLevelLib/BaseDebugPrintErrorLevelLib.inf
- BaseLib|MdePkg/Library/BaseLib/BaseLib.inf
- SynchronizationLib|MdePkg/Library/BaseSynchronizationLib/BaseSynchronizationLib.inf
- PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibNull.inf
- PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf
- PeCoffGetEntryPointLib|MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeCoffGetEntryPointLib.inf
- PeCoffLib|MdePkg/Library/BasePeCoffLib/BasePeCoffLib.inf
- IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
- PciExpressLib|MdePkg/Library/BasePciExpressLib/BasePciExpressLib.inf
- UefiDecompressLib|MdePkg/Library/BaseUefiDecompressLib/BaseUefiDecompressLib.inf
- CpuLib|MdePkg/Library/BaseCpuLib/BaseCpuLib.inf
- UefiLib|MdePkg/Library/UefiLib/UefiLib.inf
- UefiUsbLib|MdePkg/Library/UefiUsbLib/UefiUsbLib.inf
- HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf
- UefiRuntimeServicesTableLib|MdePkg/Library/UefiRuntimeServicesTableLib/UefiRuntimeServicesTableLib.inf
- DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf
- UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.inf
- DxeServicesTableLib|MdePkg/Library/DxeServicesTableLib/DxeServicesTableLib.inf
- UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.inf
- UefiApplicationEntryPoint|MdePkg/Library/UefiApplicationEntryPoint/UefiApplicationEntryPoint.inf
- HiiLib|MdeModulePkg/Library/UefiHiiLib/UefiHiiLib.inf
- UefiHiiServicesLib|MdeModulePkg/Library/UefiHiiServicesLib/UefiHiiServicesLib.inf
- UefiRuntimeLib|MdePkg/Library/UefiRuntimeLib/UefiRuntimeLib.inf
- #
- # Allow dynamic PCDs
- #
- PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
- PeiServicesLib|MdePkg/Library/PeiServicesLib/PeiServicesLib.inf
- # 1/123 faster than Stm or Vstm version
- #BaseMemoryLib|MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf
- BaseMemoryLib|ArmPkg/Library/BaseMemoryLibStm/BaseMemoryLibStm.inf
This library is deprecated and will be removed. Please switch to MdePkg's BaseMemoryLib (for SEC, PEIM and PEI_CORE) and BaseMemoryLibOptDxe (for remaining module types)
Done in v2.
- # Networking Requirements
- NetLib|MdeModulePkg/Library/DxeNetLib/DxeNetLib.inf
- DpcLib|MdeModulePkg/Library/DxeDpcLib/DxeDpcLib.inf
- UdpIoLib|MdeModulePkg/Library/DxeUdpIoLib/DxeUdpIoLib.inf
- IpIoLib|MdeModulePkg/Library/DxeIpIoLib/DxeIpIoLib.inf
- # ARM Architectural Libraries
- CacheMaintenanceLib|ArmPkg/Library/ArmCacheMaintenanceLib/ArmCacheMaintenanceLib.inf
- DefaultExceptionHandlerLib|ArmPkg/Library/DefaultExceptionHandlerLib/DefaultExceptionHandlerLib.inf
- CpuExceptionHandlerLib|ArmPkg/Library/ArmExceptionLib/ArmExceptionLib.inf
- ArmDisassemblerLib|ArmPkg/Library/ArmDisassemblerLib/ArmDisassemblerLib.inf
- DmaLib|ArmPkg/Library/ArmDmaLib/ArmDmaLib.inf
- ArmGicLib|ArmPkg/Drivers/ArmGic/ArmGicLib.inf
- ArmGicArchLib|ArmPkg/Library/ArmGicArchLib/ArmGicArchLib.inf
- ArmPlatformStackLib|ArmPlatformPkg/Library/ArmPlatformStackLib/ArmPlatformStackLib.inf
- ArmSmcLib|ArmPkg/Library/ArmSmcLib/ArmSmcLib.inf
- ArmGenericTimerCounterLib|ArmPkg/Library/ArmGenericTimerPhyCounterLib/ArmGenericTimerPhyCounterLib.inf
- PlatformPeiLib|ArmPlatformPkg/PlatformPei/PlatformPeiLib.inf
- ArmLib|ArmPkg/Library/ArmLib/ArmBaseLib.inf
- ArmCpuLib|ArmPkg/Drivers/ArmCpuLib/ArmCortexA5xLib/ArmCortexA5xLib.inf
- ArmMmuLib|ArmPkg/Library/ArmMmuLib/ArmMmuBaseLib.inf
- ArmPlatformLib|OpenPlatformPkg/Platforms/AMD/Styx/Library/AmdStyxLib/AmdStyxLib.inf
- TimerLib|ArmPkg/Library/ArmArchTimerLib/ArmArchTimerLib.inf
- UefiScsiLib|MdePkg/Library/UefiScsiLib/UefiScsiLib.inf
- # ARM PL011 UART Driver
- PL011UartLib|ArmPlatformPkg/Drivers/PL011Uart/PL011Uart.inf
- SerialPortLib|ArmPlatformPkg/Library/PL011SerialPortLib/PL011SerialPortLib.inf
- #
- # PCI support
- #
- PciSegmentLib|MdePkg/Library/BasePciSegmentLibPci/BasePciSegmentLibPci.inf
- PciLib|MdePkg/Library/BasePciLibPciExpress/BasePciLibPciExpress.inf
- PciHostBridgeLib|OpenPlatformPkg/Platforms/AMD/Styx/Library/AmdStyxPciHostBridgeLib/AmdStyxPciHostBridgeLib.inf
- #
- # Styx specific libraries
- #
- AmdSataInit|AmdModulePkg/Library/AmdSataInitLib/AmdSataInitLib.inf
- AmdStyxAcpiLib|OpenPlatformPkg/Platforms/AMD/Styx/AcpiTables/AcpiTables.inf
- EfiResetSystemLib|OpenPlatformPkg/Platforms/AMD/Styx/Library/ResetSystemLib/ResetSystemLib.inf
- RealTimeClockLib|OpenPlatformPkg/Platforms/AMD/Styx/Library/RealTimeClockLib/RealTimeClockLib.inf
- CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf
- UefiBootManagerLib|MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf
- PlatformBootManagerLib|ArmPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf
- CustomizedDisplayLib|MdeModulePkg/Library/CustomizedDisplayLib/CustomizedDisplayLib.inf
- #
- # Uncomment (and comment out the next line) For RealView Debugger. The Standard IO window
- # in the debugger will show load and unload commands for symbols. You can cut and paste this
- # into the command window to load symbols. We should be able to use a script to do this, but
- # the version of RVD I have does not support scripts accessing system memory.
- #
- #PeCoffExtraActionLib|ArmPkg/Library/RvdPeCoffExtraActionLib/RvdPeCoffExtraActionLib.inf
- PeCoffExtraActionLib|ArmPkg/Library/DebugPeCoffExtraActionLib/DebugPeCoffExtraActionLib.inf
- #PeCoffExtraActionLib|MdePkg/Library/BasePeCoffExtraActionLibNull/BasePeCoffExtraActionLibNull.inf
- DebugAgentLib|MdeModulePkg/Library/DebugAgentLibNull/DebugAgentLibNull.inf
- DebugAgentTimerLib|EmbeddedPkg/Library/DebugAgentTimerLibNull/DebugAgentTimerLibNull.inf
- DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf
- SortLib|MdeModulePkg/Library/UefiSortLib/UefiSortLib.inf
- FileExplorerLib|MdeModulePkg/Library/FileExplorerLib/FileExplorerLib.inf
- DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf
- SortLib|MdeModulePkg/Library/UefiSortLib/UefiSortLib.inf
- FileExplorerLib|MdeModulePkg/Library/FileExplorerLib/FileExplorerLib.inf
+[LibraryClasses.common.SEC]
- HobLib|MdePkg/Library/PeiHobLib/PeiHobLib.inf
- PeiServicesTablePointerLib|ArmPkg/Library/PeiServicesTablePointerLib/PeiServicesTablePointerLib.inf
- MemoryAllocationLib|MdePkg/Library/PeiMemoryAllocationLib/PeiMemoryAllocationLib.inf
- PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
- ArmPlatformLib|OpenPlatformPkg/Platforms/AMD/Styx/Library/AmdStyxLib/AmdStyxLibSec.inf
- ArmPlatformSecExtraActionLib|ArmPlatformPkg/Library/DebugSecExtraActionLib/DebugSecExtraActionLib.inf
- DebugAgentLib|ArmPkg/Library/DebugAgentSymbolsBaseLib/DebugAgentSymbolsBaseLib.inf
- DefaultExceptionHandlerLib|ArmPkg/Library/DefaultExceptionHandlerLib/DefaultExceptionHandlerLibBase.inf
- # Trustzone Support
- ArmTrustedMonitorLib|ArmPlatformPkg/Library/ArmTrustedMonitorLibNull/ArmTrustedMonitorLibNull.inf
- ArmGicArchLib|ArmPkg/Library/ArmGicArchSecLib/ArmGicArchSecLib.inf
+[LibraryClasses.common.PEIM, LibraryClasses.common.SEC]
- MemoryInitPeiLib|OpenPlatformPkg/Platforms/AMD/Styx/Library/MemoryInitPei/MemoryInitPeiLib.inf
+[LibraryClasses.common.PEI_CORE]
- PcdLib|MdePkg/Library/PeiPcdLib/PeiPcdLib.inf
- HobLib|MdePkg/Library/PeiHobLib/PeiHobLib.inf
- MemoryAllocationLib|MdePkg/Library/PeiMemoryAllocationLib/PeiMemoryAllocationLib.inf
- PeiCoreEntryPoint|MdePkg/Library/PeiCoreEntryPoint/PeiCoreEntryPoint.inf
- PerformanceLib|MdeModulePkg/Library/PeiPerformanceLib/PeiPerformanceLib.inf
- ReportStatusCodeLib|MdeModulePkg/Library/PeiReportStatusCodeLib/PeiReportStatusCodeLib.inf
- OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
- PeCoffGetEntryPointLib|MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeCoffGetEntryPointLib.inf
- UefiDecompressLib|MdePkg/Library/BaseUefiDecompressLib/BaseUefiDecompressLib.inf
- ExtractGuidedSectionLib|MdePkg/Library/PeiExtractGuidedSectionLib/PeiExtractGuidedSectionLib.inf
- PeiServicesTablePointerLib|ArmPkg/Library/PeiServicesTablePointerLib/PeiServicesTablePointerLib.inf
+[LibraryClasses.common.PEIM]
- PcdLib|MdePkg/Library/PeiPcdLib/PeiPcdLib.inf
- HobLib|MdePkg/Library/PeiHobLib/PeiHobLib.inf
- MemoryAllocationLib|MdePkg/Library/PeiMemoryAllocationLib/PeiMemoryAllocationLib.inf
- PeimEntryPoint|MdePkg/Library/PeimEntryPoint/PeimEntryPoint.inf
- PerformanceLib|MdeModulePkg/Library/PeiPerformanceLib/PeiPerformanceLib.inf
- ReportStatusCodeLib|MdeModulePkg/Library/PeiReportStatusCodeLib/PeiReportStatusCodeLib.inf
- OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
- PeCoffGetEntryPointLib|MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeCoffGetEntryPointLib.inf
- PeiResourcePublicationLib|MdePkg/Library/PeiResourcePublicationLib/PeiResourcePublicationLib.inf
- UefiDecompressLib|MdePkg/Library/BaseUefiDecompressLib/BaseUefiDecompressLib.inf
- ExtractGuidedSectionLib|MdePkg/Library/PeiExtractGuidedSectionLib/PeiExtractGuidedSectionLib.inf
- PeiServicesTablePointerLib|ArmPkg/Library/PeiServicesTablePointerLib/PeiServicesTablePointerLib.inf
+[LibraryClasses.common.DXE_CORE]
- HobLib|MdePkg/Library/DxeCoreHobLib/DxeCoreHobLib.inf
- MemoryAllocationLib|MdeModulePkg/Library/DxeCoreMemoryAllocationLib/DxeCoreMemoryAllocationLib.inf
- DxeCoreEntryPoint|MdePkg/Library/DxeCoreEntryPoint/DxeCoreEntryPoint.inf
- ReportStatusCodeLib|IntelFrameworkModulePkg/Library/DxeReportStatusCodeLibFramework/DxeReportStatusCodeLib.inf
- ExtractGuidedSectionLib|MdePkg/Library/DxeExtractGuidedSectionLib/DxeExtractGuidedSectionLib.inf
- UefiDecompressLib|MdePkg/Library/BaseUefiDecompressLib/BaseUefiDecompressLib.inf
- PerformanceLib|MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLib.inf
+[LibraryClasses.common.DXE_DRIVER]
- ReportStatusCodeLib|IntelFrameworkModulePkg/Library/DxeReportStatusCodeLibFramework/DxeReportStatusCodeLib.inf
- SecurityManagementLib|MdeModulePkg/Library/DxeSecurityManagementLib/DxeSecurityManagementLib.inf
- PerformanceLib|MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf
- MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
+[LibraryClasses.common.DXE_RUNTIME_DRIVER]
- HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf
- MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
- ReportStatusCodeLib|IntelFrameworkModulePkg/Library/DxeReportStatusCodeLibFramework/DxeReportStatusCodeLib.inf
- CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf
+[LibraryClasses.common.UEFI_APPLICATION]
- UefiDecompressLib|IntelFrameworkModulePkg/Library/BaseUefiTianoCustomDecompressLib/BaseUefiTianoCustomDecompressLib.inf
- PerformanceLib|MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf
- MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
- HiiLib|MdeModulePkg/Library/UefiHiiLib/UefiHiiLib.inf
- ReportStatusCodeLib|MdeModulePkg/Library/DxeReportStatusCodeLib/DxeReportStatusCodeLib.inf
+[LibraryClasses.common.UEFI_DRIVER]
- ReportStatusCodeLib|IntelFrameworkModulePkg/Library/DxeReportStatusCodeLibFramework/DxeReportStatusCodeLib.inf
- UefiDecompressLib|IntelFrameworkModulePkg/Library/BaseUefiTianoCustomDecompressLib/BaseUefiTianoCustomDecompressLib.inf
- ExtractGuidedSectionLib|MdePkg/Library/DxeExtractGuidedSectionLib/DxeExtractGuidedSectionLib.inf
- PerformanceLib|MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf
- MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
+[LibraryClasses.ARM]
- #
- # It is not possible to prevent the ARM compiler for generic intrinsic functions.
- # This library provides the instrinsic functions generate by a given compiler.
- # [LibraryClasses.ARM] and NULL mean link this library into all ARM images.
- #
- NULL|ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf
+[LibraryClasses.AARCH64]
- NULL|ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf
- NULL|MdePkg/Library/BaseStackCheckLib/BaseStackCheckLib.inf
+################################################################################################### +# BuildOptions Section - Define the module specific tool chain flags that should be used as +# the default flags for a module. These flags are appended to any +# standard flags that are defined by the build process. +###################################################################################################
+[BuildOptions]
- RVCT:RELEASE_*_*_CC_FLAGS = -DMDEPKG_NDEBUG
You can drop RVCT
Done in v2.
- GCC:RELEASE_*_*_CC_FLAGS = -DMDEPKG_NDEBUG
- *_*_*_ASL_FLAGS = -tc -li -l -so
- *_*_*_ASLPP_FLAGS = -x c -E -P $(ARCHCC_FLAGS)
- *_*_*_ASLCC_FLAGS = -x c $(ARCHCC_FLAGS)
- GCC:*_*_AARCH64_ARCHCC_FLAGS = -DDO_XGBE=$(DO_XGBE) -DDO_KCS=$(DO_KCS) -DNUM_CORES=$(NUM_CORES) -DARM_CPU_AARCH64
- GCC:*_*_AARCH64_PP_FLAGS = -DDO_XGBE=$(DO_XGBE) -DDO_KCS=$(DO_KCS) -DNUM_CORES=$(NUM_CORES) -DARM_CPU_AARCH64
- GCC:*_*_AARCH64_PLATFORM_FLAGS = -I$(BIN_DIR)/OpenPlatformPkg/Platforms/AMD/Styx/AcpiTables/AcpiAml/OUTPUT
+[BuildOptions.common.EDKII.DXE_RUNTIME_DRIVER]
- GCC:*_*_AARCH64_DLINK_FLAGS = -z common-page-size=0x10000
+################################################################################ +# +# Pcd Section - list of all EDK II PCD Entries defined by this Platform +# +################################################################################
+[PcdsFeatureFlag.common]
- gEfiMdePkgTokenSpaceGuid.PcdComponentNameDisable|TRUE
- gEfiMdePkgTokenSpaceGuid.PcdDriverDiagnosticsDisable|TRUE
- gEfiMdePkgTokenSpaceGuid.PcdComponentName2Disable|TRUE
- gEfiMdePkgTokenSpaceGuid.PcdDriverDiagnostics2Disable|TRUE
This is cargo culted junk. There is no reason to disable these, and dropping them makes the output of dh/drivers/etc much more comprehensible. I intend to remove these for the other board shortly as well.
Removed in v2.
- # All pages are cached by default
- gEmbeddedTokenSpaceGuid.PcdCacheEnable|TRUE
- # Use the Vector Table location in CpuDxe. We will not copy the Vector Table at PcdCpuVectorBaseAddress
- gArmTokenSpaceGuid.PcdRelocateVectorTable|FALSE
- gEmbeddedTokenSpaceGuid.PcdPrePiProduceMemoryTypeInformationHob|TRUE
- gEfiMdeModulePkgTokenSpaceGuid.PcdTurnOffUsbLegacySupport|TRUE
- ## If TRUE, Graphics Output Protocol will be installed on virtual handle
- ## created by ConsplitterDxe. It could be set FALSE to save size.
- gEfiMdeModulePkgTokenSpaceGuid.PcdConOutGopSupport|FALSE
+[PcdsFixedAtBuild.common]
- gEfiMdePkgTokenSpaceGuid.PcdMaximumUnicodeStringLength|1000000
- gEfiMdePkgTokenSpaceGuid.PcdMaximumAsciiStringLength|1000000
- gEfiMdePkgTokenSpaceGuid.PcdMaximumLinkedListLength|1000000
- gEfiMdePkgTokenSpaceGuid.PcdSpinLockTimeout|10000000
- gEfiMdePkgTokenSpaceGuid.PcdDebugClearMemoryValue|0xAF
- gEfiMdePkgTokenSpaceGuid.PcdPerformanceLibraryPropertyMask|1
- gEfiMdePkgTokenSpaceGuid.PcdPostCodePropertyMask|0
- gEfiMdePkgTokenSpaceGuid.PcdUefiLibMaxPrintBufferSize|320
- # DEBUG_ASSERT_ENABLED 0x01
- # DEBUG_PRINT_ENABLED 0x02
- # DEBUG_CODE_ENABLED 0x04
- # CLEAR_MEMORY_ENABLED 0x08
- # ASSERT_BREAKPOINT_ENABLED 0x10
- # ASSERT_DEADLOOP_ENABLED 0x20
+!if $(TARGET) == RELEASE
- gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x21
+!else
- gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x2f
+!endif
- # DEBUG_INIT 0x00000001 // Initialization
- # DEBUG_WARN 0x00000002 // Warnings
- # DEBUG_LOAD 0x00000004 // Load events
- # DEBUG_FS 0x00000008 // EFI File system
- # DEBUG_POOL 0x00000010 // Alloc & Free's
- # DEBUG_PAGE 0x00000020 // Alloc & Free's
- # DEBUG_INFO 0x00000040 // Verbose
- # DEBUG_DISPATCH 0x00000080 // PEI/DXE Dispatchers
- # DEBUG_VARIABLE 0x00000100 // Variable
- # DEBUG_BM 0x00000400 // Boot Manager
- # DEBUG_BLKIO 0x00001000 // BlkIo Driver
- # DEBUG_NET 0x00004000 // SNI Driver
- # DEBUG_UNDI 0x00010000 // UNDI Driver
- # DEBUG_LOADFILE 0x00020000 // UNDI Driver
- # DEBUG_EVENT 0x00080000 // Event messages
- # DEBUG_GCD 0x00100000 // Global Coherency Database changes
- # DEBUG_CACHE 0x00200000 // Memory range cachability changes
- # DEBUG_ERROR 0x80000000 // Error
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000000F
- gEfiMdePkgTokenSpaceGuid.PcdReportStatusCodePropertyMask|0x07
- #
- # Optional feature to help prevent EFI memory map fragments
- # Turned on and off via: PcdPrePiProduceMemoryTypeInformationHob
- # Values are in EFI Pages (4K). DXE Core will make sure that
- # at least this much of each type of memory can be allocated
- # from a single memory range. This way you only end up with
- # maximum of two fragements for each type in the memory map
- # (the memory used, and the free memory that was prereserved
- # but not used).
- #
- gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiACPIReclaimMemory|0
- gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiACPIMemoryNVS|0
- gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiReservedMemoryType|0
- gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiRuntimeServicesData|1000
- gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiRuntimeServicesCode|1000
- gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiBootServicesCode|400
- gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiBootServicesData|12000
- gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiLoaderCode|20
- gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiLoaderData|0
- gEfiMdeModulePkgTokenSpaceGuid.PcdResetOnMemoryTypeInformationChange|FALSE
- gEfiMdeModulePkgTokenSpaceGuid.PcdBootManagerMenuFile|{ 0x21, 0xaa, 0x2c, 0x46, 0x14, 0x76, 0x03, 0x45, 0x83, 0x6e, 0x8a, 0xb6, 0xf4, 0x66, 0x23, 0x31 }
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdShellFile|{ 0x83, 0xA5, 0x04, 0x7C, 0x3E, 0x9E, 0x1C, 0x4F, 0xAD, 0x65, 0xE0, 0x52, 0x68, 0xD0, 0xB4, 0xD1 }
- gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVendor|L"SoftIron Overdrive 1000"
- # Number of configured cores
- gArmPlatformTokenSpaceGuid.PcdCoreCount|$(NUM_CORES)
- # Stacks for MPCores in Normal World
- gArmPlatformTokenSpaceGuid.PcdCPUCoresStackBase|0x8001680000
- gArmPlatformTokenSpaceGuid.PcdCPUCorePrimaryStackSize|0x10000
- gArmPlatformTokenSpaceGuid.PcdCPUCoreSecondaryStackSize|0x800
- # Declare system memory base
- gArmTokenSpaceGuid.PcdSystemMemoryBase|0x8000000000
- # Size of the region used by UEFI in permanent memory (Reserved 64MB)
- gArmPlatformTokenSpaceGuid.PcdSystemMemoryUefiRegionSize|0x04000000
- # 40 bits of VA space is sufficient to support up to 512 GB of RAM in the
- # range 0x80_0000_0000 - 0xFF_FFFF_FFFF (all platform and PCI MMIO is below
- # that)
- gEmbeddedTokenSpaceGuid.PcdPrePiCpuMemorySize|40
- #
- # ARM PrimeCell
- #
- ## PL011 - Serial Terminal (Atlas UART)
- gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterBase|0x0E1010000
- gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate|115200
- gEfiMdePkgTokenSpaceGuid.PcdUartDefaultReceiveFifoDepth|0
- # serial port is clocked at 100MHz
- gArmPlatformTokenSpaceGuid.PL011UartClkInHz|100000000
- gEfiMdePkgTokenSpaceGuid.PcdDefaultTerminalType|4
- gAmdStyxTokenSpaceGuid.PcdSerialDbgRegisterBase|0x0E1010000
- gAmdStyxTokenSpaceGuid.PcdUartDbgBaudRate|115200
- #
- # ARM General Interrupt Controller
- #
- gArmTokenSpaceGuid.PcdGicDistributorBase|0xE1110000
- gArmTokenSpaceGuid.PcdGicInterruptInterfaceBase|0xE112F000
- #
- # ARM Architectual Timer Frequency
- #
- gArmTokenSpaceGuid.PcdArmArchTimerFreqInHz|187500000
- #
- # Bitmask for ports implemented on the SATA controller
- # (2 ports active on Overdrive 1000: 0b00000011 = 0x03)
- #
- gAmdStyxTokenSpaceGuid.PcdSataPi|0x03
- # Only PcdSataPortCount or PcdSata1PortCount are used. The selection is
- # made by #define in Drivers/SataControllerDxe/InitController.c
- gAmdStyxTokenSpaceGuid.PcdSataPortCount|2
- gAmdStyxTokenSpaceGuid.PcdSata1PortCount|0
- # PCIe Support
- gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress|0xF0000000
- gArmTokenSpaceGuid.PcdPciBusMin|0x0
- gArmTokenSpaceGuid.PcdPciBusMax|0xFF
- gArmTokenSpaceGuid.PcdPciIoBase|0x1000
- gArmTokenSpaceGuid.PcdPciIoSize|0xF000
- gArmTokenSpaceGuid.PcdPciIoTranslation|0xEFFF0000
- gEmbeddedTokenSpaceGuid.PcdPrePiCpuIoSize|16
- gArmTokenSpaceGuid.PcdPciMmio32Base|0x40000000
- gArmTokenSpaceGuid.PcdPciMmio32Size|0x80000000
- gArmTokenSpaceGuid.PcdPciMmio32Translation|0x0
- gArmTokenSpaceGuid.PcdPciMmio64Base|0x100000000
- gArmTokenSpaceGuid.PcdPciMmio64Size|0x7F00000000
- gArmTokenSpaceGuid.PcdPciMmio64Translation|0x0
- ## Use PCI emulation for ATA PassThru
- # gEfiMdeModulePkgTokenSpaceGuid.PcdAtaPassThruPciEmulation|TRUE
- ## ACPI (no tables < 4GB)
- gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiExposedTableVersions|0x20
+!if $(DO_PSCI)
- gAmdStyxTokenSpaceGuid.PcdPsciOsSupport|TRUE
+!else
- gAmdStyxTokenSpaceGuid.PcdPsciOsSupport|FALSE
+!endif
+!if $(DO_ISCP)
- gAmdStyxTokenSpaceGuid.PcdIscpSupport|TRUE
+!else
- gAmdStyxTokenSpaceGuid.PcdIscpSupport|FALSE
+!endif
Please remove this unless DO_ISCP==FALSE produces a working system
It does boot up with DO_ISCP=0, so I left it.
- # SMBIOS 3.0 only
- gEfiMdeModulePkgTokenSpaceGuid.PcdSmbiosEntryPointProvideMethod|0x2
- gAmdModulePkgTokenSpaceGuid.PcdSataNumChPerSerdes|2
- gAmdModulePkgTokenSpaceGuid.PcdSataSerdesBase|0xE1200000
- gAmdModulePkgTokenSpaceGuid.PcdSataSerdesOffset|0x00010000
+!if $(DO_XGBE)
- gAmdModulePkgTokenSpaceGuid.PcdXgbeEnable|TRUE
- gAmdModulePkgTokenSpaceGuid.PcdPort0PhyMode|0
- gAmdModulePkgTokenSpaceGuid.PcdPort1PhyMode|0
- gAmdModulePkgTokenSpaceGuid.PcdPort0NetSpeed|1
- gAmdModulePkgTokenSpaceGuid.PcdPort1NetSpeed|1
+[PcdsDynamicDefault.common]
- gAmdStyxTokenSpaceGuid.PcdEthMacA|0x02A1A2A3A4A5
- gAmdStyxTokenSpaceGuid.PcdEthMacB|0x02B1B2B3B4B5
+[PcdsPatchableInModule]
- gAmdModulePkgTokenSpaceGuid.PcdXgbeUseMacFromIscp|TRUE
- gAmdModulePkgTokenSpaceGuid.PcdXgbeRev|2
+!endif
As mentioned above, you can drop this entirely
Done in V2.
+[PcdsPatchableInModule] +# PCIe Configuration: x4x2x2 (=2 See Include/FDKGionb.h)
- gAmdModulePkgTokenSpaceGuid.PcdPcieCoreConfiguration|2
- gAmdModulePkgTokenSpaceGuid.PcdPciePort0Present|0
- gAmdModulePkgTokenSpaceGuid.PcdPciePort1Present|1
- gAmdModulePkgTokenSpaceGuid.PcdPciePort2Present|1
- gAmdModulePkgTokenSpaceGuid.PcdPcieHardcodeEnumeration|TRUE
+[PcdsDynamicDefault.common]
- gAmdStyxTokenSpaceGuid.PcdSocCoreCount|$(NUM_CORES)
- gArmTokenSpaceGuid.PcdSystemMemorySize|0x0400000000
- gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64|0x0
- gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64|0x0
- gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase64|0x0
+[PcdsDynamicExHii.common.DEFAULT]
- gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut|L"Timeout"|gEfiGlobalVariableGuid|0x0|5
+################################################################################ +# +# Components Section - list of all EDK II Modules needed by this Platform +# +################################################################################ +[Components.common]
- #
- # PEI Phase modules
- #
- ArmPlatformPkg/PrePeiCore/PrePeiCoreUniCore.inf
- MdeModulePkg/Core/Pei/PeiMain.inf
- MdeModulePkg/Universal/PCD/Pei/Pcd.inf {
<LibraryClasses>
PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
- }
- ArmPlatformPkg/PlatformPei/PlatformPeim.inf
- AmdModulePkg/Iscp/IscpPei.inf
- OpenPlatformPkg/Platforms/AMD/Styx/Drivers/PlatInitPei/PlatInitPei.inf
- ArmPlatformPkg/MemoryInitPei/MemoryInitPeim.inf
- ArmPkg/Drivers/CpuPei/CpuPei.inf
- MdeModulePkg/Universal/Variable/Pei/VariablePei.inf
- MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf {
<LibraryClasses>
NULL|IntelFrameworkModulePkg/Library/LzmaCustomDecompressLib/LzmaCustomDecompressLib.inf
- }
- #
- # DXE
- #
- MdeModulePkg/Core/Dxe/DxeMain.inf {
<LibraryClasses>
NULL|MdeModulePkg/Library/DxeCrc32GuidedSectionExtractLib/DxeCrc32GuidedSectionExtractLib.inf
- }
- MdeModulePkg/Universal/PCD/Dxe/Pcd.inf {
<LibraryClasses>
PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
- }
- #
- # Architectural Protocols
- #
- ArmPkg/Drivers/CpuDxe/CpuDxe.inf
- MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf
- MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf
- MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf
- MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf
- MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCounterRuntimeDxe.inf
- EmbeddedPkg/ResetRuntimeDxe/ResetRuntimeDxe.inf
- EmbeddedPkg/RealTimeClockRuntimeDxe/RealTimeClockRuntimeDxe.inf
- EmbeddedPkg/MetronomeDxe/MetronomeDxe.inf
- MdeModulePkg/Universal/EbcDxe/EbcDxe.inf
- #
- # Console IO support
- #
- MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf
- MdeModulePkg/Universal/SerialDxe/SerialDxe.inf
- MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf
- MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf
- ArmPkg/Drivers/ArmGic/ArmGicDxe.inf
- ArmPkg/Drivers/TimerDxe/TimerDxe.inf
- #
- # Environment Variables Protocol
- #
- MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf {
<LibraryClasses>
AuthVariableLib|MdeModulePkg/Library/AuthVariableLibNull/AuthVariableLibNull.inf
TpmMeasurementLib|MdeModulePkg/Library/TpmMeasurementLibNull/TpmMeasurementLibNull.inf
VarCheckLib|MdeModulePkg/Library/VarCheckLib/VarCheckLib.inf
NULL|MdeModulePkg/Library/VarCheckUefiLib/VarCheckUefiLib.inf
- }
- OpenPlatformPkg/Platforms/AMD/Styx/Drivers/StyxSpiFvDxe/StyxSpiFvDxe.inf
- #
- # Iscp support
- #
- AmdModulePkg/Iscp/IscpDxe.inf
- #
- # FDT support
- #
- OpenPlatformPkg/Platforms/AMD/Styx/Drivers/FdtDxe/FdtDxe.inf {
<LibraryClasses>
# deprecated BdsLib from the ARM BDS
BdsLib|ArmPkg/Library/BdsLib/BdsLib.inf
FdtLib|EmbeddedPkg/Library/FdtLib/FdtLib.inf
- }
- #
- # PCI support
- #
- AmdModulePkg/Gionb/Gionb.inf
- ArmPkg/Drivers/ArmPciCpuIo2Dxe/ArmPciCpuIo2Dxe.inf
- MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciHostBridgeDxe.inf
- MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
- #
- # MP-Boot: ACPI[Parking Protocol] + FDT[Spin-Table]
- #
- OpenPlatformPkg/Platforms/AMD/Styx/Drivers/MpBootDxe/MpBootDxe.inf
- #
- # AHCI Support
- #
- MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf
- MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf
- MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBusDxe.inf
- MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe.inf
- OpenPlatformPkg/Platforms/AMD/Styx/Drivers/SataControllerDxe/SataControllerDxe.inf
- #
- # USB Support
- #
- MdeModulePkg/Bus/Pci/UhciDxe/UhciDxe.inf
- MdeModulePkg/Bus/Pci/EhciDxe/EhciDxe.inf
- MdeModulePkg/Bus/Pci/XhciDxe/XhciDxe.inf
- MdeModulePkg/Bus/Usb/UsbBusDxe/UsbBusDxe.inf
- MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassStorageDxe.inf
+!if $(DO_XGBE)
- #
- # SNP support
- #
- AmdModulePkg/SnpDxe/SnpDxePort0.inf
- AmdModulePkg/SnpDxe/SnpDxePort1.inf
+!endif
- #
- # Marvell Yukon Ethernet (Overdrive 1000 has 88e8059)
- #
- OpenPlatformPkg/Drivers/Net/MarvellYukonDxe/MarvellYukonDxe.inf
- #
- # Networking stack
- #
- MdeModulePkg/Universal/Network/SnpDxe/SnpDxe.inf
- MdeModulePkg/Universal/Network/DpcDxe/DpcDxe.inf
- MdeModulePkg/Universal/Network/ArpDxe/ArpDxe.inf
- MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Dxe.inf
+# MdeModulePkg/Universal/Network/Ip4ConfigDxe/Ip4ConfigDxe.inf
- MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Dxe.inf
- MdeModulePkg/Universal/Network/MnpDxe/MnpDxe.inf {
<PcdsFixedAtBuild>
gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x21
- }
- MdeModulePkg/Universal/Network/VlanConfigDxe/VlanConfigDxe.inf
- MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Dxe.inf
- MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Dxe.inf
- MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Dxe.inf
- MdeModulePkg/Universal/Network/UefiPxeBcDxe/UefiPxeBcDxe.inf
+## Bug https://bugs.linaro.org/show_bug.cgi?id=2239 +# MdeModulePkg/Universal/Network/IScsiDxe/IScsiDxe.inf
- #
- # Core Info
- #
- OpenPlatformPkg/Platforms/AMD/Styx/Drivers/PlatInitDxe/PlatInitDxe.inf
- #
- # ACPI Support
- #
- MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf
- OpenPlatformPkg/Platforms/AMD/Styx/AcpiTables/AcpiAml.inf
- OpenPlatformPkg/Platforms/AMD/Styx/Drivers/AcpiPlatformDxe/AcpiPlatformDxe.inf
- #
- # SMBIOS Support
- #
- MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf
- OpenPlatformPkg/Platforms/AMD/Styx/Drivers/PlatformSmbiosDxe/PlatformSmbiosDxe.inf
- #
- # FAT filesystem + GPT/MBR partitioning
- #
- MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf
- MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf
- FatPkg/EnhancedFatDxe/Fat.inf
- MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf
- #
- # Bds
- #
- MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf
- MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf
- MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf
- MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
- MdeModulePkg/Application/UiApp/UiApp.inf {
<LibraryClasses>
NULL|MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf
NULL|MdeModulePkg/Library/BootManagerUiLib/BootManagerUiLib.inf
NULL|MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanceManagerUiLib.inf
- }
- #
- # Crypto Accelerator support (RNG only)
- #
- OpenPlatformPkg/Platforms/AMD/Styx/Drivers/StyxRngDxe/StyxRngDxe.inf
- #
- # UEFI application (Shell Embedded Boot Loader)
- #
- ShellPkg/Application/Shell/Shell.inf {
<LibraryClasses>
ShellCommandLib|ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.inf
NULL|ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.inf
NULL|ShellPkg/Library/UefiShellLevel1CommandsLib/UefiShellLevel1CommandsLib.inf
NULL|ShellPkg/Library/UefiShellLevel3CommandsLib/UefiShellLevel3CommandsLib.inf
NULL|ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.inf
NULL|ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.inf
NULL|ShellPkg/Library/UefiShellInstall1CommandsLib/UefiShellInstall1CommandsLib.inf
NULL|ShellPkg/Library/UefiShellNetwork1CommandsLib/UefiShellNetwork1CommandsLib.inf
NULL|ShellPkg/Library/UefiShellTftpCommandLib/UefiShellTftpCommandLib.inf
HandleParsingLib|ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.inf
PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf
BcfgCommandLib|ShellPkg/Library/UefiShellBcfgCommandLib/UefiShellBcfgCommandLib.inf
FileHandleLib|MdePkg/Library/UefiFileHandleLib/UefiFileHandleLib.inf
ShellLib|ShellPkg/Library/UefiShellLib/UefiShellLib.inf
<PcdsFixedAtBuild>
gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0xFF
gEfiShellPkgTokenSpaceGuid.PcdShellLibAutoInitialize|FALSE
gEfiMdePkgTokenSpaceGuid.PcdUefiLibMaxPrintBufferSize|8000
- }
diff --git a/Platforms/AMD/Styx/Overdrive1000Board/Overdrive1000Board.fdf b/Platforms/AMD/Styx/Overdrive1000Board/Overdrive1000Board.fdf new file mode 100644 index 0000000..95fd835 --- /dev/null +++ b/Platforms/AMD/Styx/Overdrive1000Board/Overdrive1000Board.fdf @@ -0,0 +1,412 @@ +# +# Copyright (c) 2014 - 2016, AMD Incorporated. 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. +#
+################################################################################ +# +# FD Section +# The [FD] Section is made up of the definition statements and a +# description of what goes into the Flash Device Image. Each FD section +# defines one flash "device" image. A flash device image may be one of +# the following: Removable media bootable image (like a boot floppy +# image,) an Option ROM image (that would be "flashed" into an add-in +# card,) a System "Flash" image (that would be burned into a system's +# flash) or an Update ("Capsule") image that will be used to update and +# existing system flash. +# +################################################################################
+[FD.Overdrive1000_ROM] +BaseAddress = 0x8000C80000|gArmTokenSpaceGuid.PcdFdBaseAddress # The base address of the Firmware in NOR Flash. +Size = 0x00500000|gArmTokenSpaceGuid.PcdFdSize # The size in bytes of the FLASH Device +ErasePolarity = 1
+# This one is tricky, it must be: BlockSize * NumBlocks = Size +BlockSize = 0x00001000 +NumBlocks = 0x500
+################################################################################ +# +# Following are lists of FD Region layout which correspond to the locations of different +# images within the flash device. +# +# Regions must be defined in ascending order and may not overlap. +# +# A Layout Region start with a eight digit hex offset (leading "0x" required) followed by +# the pipe "|" character, followed by the size of the region, also in hex with the leading +# "0x" characters. Like: +# Offset|Size +# PcdOffsetCName|PcdSizeCName +# RegionType <FV, DATA, or FILE> +# +################################################################################
+0x00000000|0x00200000 +FILE = OpenPlatformPkg/Platforms/AMD/Styx/Overdrive1000Board/Binary/PreUefiFirmware.bin
+0x00200000|0x00260000 +gArmTokenSpaceGuid.PcdFvBaseAddress|gArmTokenSpaceGuid.PcdFvSize +FV = STYX_EFI
+!include OpenPlatformPkg/Platforms/AMD/Styx/Common/Varstore.fdf.inc
+################################################################################ +# +# FV Section +# +# [FV] section is used to define what components or modules are placed within a flash +# device file. This section also defines order the components and modules are positioned +# within the image. The [FV] section consists of define statements, set statements and +# module statements. +# +################################################################################
+[FV.FvMain] +FvNameGuid = 94f067ae-2aa6-4b30-aa07-4e47fe518bb8 +BlockSize = 0x40 +NumBlocks = 0 # This FV gets compressed so make it just big enough +FvAlignment = 16 # FV alignment and FV attributes setting. +ERASE_POLARITY = 1 +MEMORY_MAPPED = TRUE +STICKY_WRITE = TRUE +LOCK_CAP = TRUE +LOCK_STATUS = TRUE +WRITE_DISABLED_CAP = TRUE +WRITE_ENABLED_CAP = TRUE +WRITE_STATUS = TRUE +WRITE_LOCK_CAP = TRUE +WRITE_LOCK_STATUS = TRUE +READ_DISABLED_CAP = TRUE +READ_ENABLED_CAP = TRUE +READ_STATUS = TRUE +READ_LOCK_CAP = TRUE +READ_LOCK_STATUS = TRUE
- INF MdeModulePkg/Core/Dxe/DxeMain.inf
- INF MdeModulePkg/Universal/PCD/Dxe/Pcd.inf
- #
- # PI DXE Drivers producing Architectural Protocols (EFI Services)
- #
- INF ArmPkg/Drivers/CpuDxe/CpuDxe.inf
- INF MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf
- INF MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf
- INF MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf
- INF MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf
- INF MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCounterRuntimeDxe.inf
- INF EmbeddedPkg/ResetRuntimeDxe/ResetRuntimeDxe.inf
- INF EmbeddedPkg/RealTimeClockRuntimeDxe/RealTimeClockRuntimeDxe.inf
- INF EmbeddedPkg/MetronomeDxe/MetronomeDxe.inf
- INF MdeModulePkg/Universal/EbcDxe/EbcDxe.inf
- INF MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf
- INF MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf
- #
- # Console IO support
- #
- INF MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf
- INF MdeModulePkg/Universal/SerialDxe/SerialDxe.inf
- INF ArmPkg/Drivers/ArmGic/ArmGicDxe.inf
- INF ArmPkg/Drivers/TimerDxe/TimerDxe.inf
- #
- # FAT filesystem + GPT/MBR partitioning
- #
- INF MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf
- INF MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf
- INF FatPkg/EnhancedFatDxe/Fat.inf
- INF MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf
- #
- # Environment Variables Protocol
- #
- INF MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf
- INF OpenPlatformPkg/Platforms/AMD/Styx/Drivers/StyxSpiFvDxe/StyxSpiFvDxe.inf
- #
- # Iscp support
- #
- INF AmdModulePkg/Iscp/IscpDxe.inf
- #
- # FDT support
- #
- INF OpenPlatformPkg/Platforms/AMD/Styx/Drivers/FdtDxe/FdtDxe.inf
- FILE FREEFORM = PCD(gAmdStyxTokenSpaceGuid.PcdStyxFdt) {
- SECTION RAW = OpenPlatformPkg/Platforms/AMD/Styx/Overdrive1000Board/FdtBlob/styx-overdrive1000.dtb
- }
- #
- # PCI support
- #
- INF AmdModulePkg/Gionb/Gionb.inf
- INF ArmPkg/Drivers/ArmPciCpuIo2Dxe/ArmPciCpuIo2Dxe.inf
- INF MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciHostBridgeDxe.inf
- INF MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
- #
- # AHCI Support
- #
- INF MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf
- INF MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf
- INF MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBusDxe.inf
- INF MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe.inf
- INF OpenPlatformPkg/Platforms/AMD/Styx/Drivers/SataControllerDxe/SataControllerDxe.inf
- #
- # USB Support
- #
- INF MdeModulePkg/Bus/Pci/UhciDxe/UhciDxe.inf
- INF MdeModulePkg/Bus/Pci/EhciDxe/EhciDxe.inf
- INF MdeModulePkg/Bus/Pci/XhciDxe/XhciDxe.inf
- INF MdeModulePkg/Bus/Usb/UsbBusDxe/UsbBusDxe.inf
- INF MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassStorageDxe.inf
+!if $(DO_XGBE)
- #
- # SNP support
- #
- INF AmdModulePkg/SnpDxe/SnpDxePort0.inf
- INF AmdModulePkg/SnpDxe/SnpDxePort1.inf
+!endif
- #
- # Marvell Ethernet Driver (Overdrive 1000)
- #
- INF OpenPlatformPkg/Drivers/Net/MarvellYukonDxe/MarvellYukonDxe.inf
- #
- # Networking stack
- #
- INF MdeModulePkg/Universal/Network/SnpDxe/SnpDxe.inf
- INF MdeModulePkg/Universal/Network/DpcDxe/DpcDxe.inf
- INF MdeModulePkg/Universal/Network/ArpDxe/ArpDxe.inf
- INF MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Dxe.inf
+# INF MdeModulePkg/Universal/Network/Ip4ConfigDxe/Ip4ConfigDxe.inf
- INF MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Dxe.inf
- INF MdeModulePkg/Universal/Network/MnpDxe/MnpDxe.inf
- INF MdeModulePkg/Universal/Network/VlanConfigDxe/VlanConfigDxe.inf
- INF MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Dxe.inf
- INF MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Dxe.inf
- INF MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Dxe.inf
- INF MdeModulePkg/Universal/Network/UefiPxeBcDxe/UefiPxeBcDxe.inf
+## Bug https://bugs.linaro.org/show_bug.cgi?id=2239 +# INF MdeModulePkg/Universal/Network/IScsiDxe/IScsiDxe.inf
- #
- # Core Info
- #
- INF OpenPlatformPkg/Platforms/AMD/Styx/Drivers/PlatInitDxe/PlatInitDxe.inf
- #
- # ACPI Support
- #
- INF MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf
- INF RuleOverride=ACPITABLE OpenPlatformPkg/Platforms/AMD/Styx/AcpiTables/AcpiAml.inf
- INF OpenPlatformPkg/Platforms/AMD/Styx/Drivers/AcpiPlatformDxe/AcpiPlatformDxe.inf
- #
- # MP-Boot: ACPI[Parking Protocol] + FDT[Spin-Table]
- #
- INF OpenPlatformPkg/Platforms/AMD/Styx/Drivers/MpBootDxe/MpBootDxe.inf
- #
- # SMBIOS Support
- #
- INF MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf
- INF OpenPlatformPkg/Platforms/AMD/Styx/Drivers/PlatformSmbiosDxe/PlatformSmbiosDxe.inf
- #
- # UEFI application (Shell Embedded Boot Loader)
- #
- INF ShellPkg/Application/Shell/Shell.inf
- #
- # Bds
- #
- INF MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf
- INF MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf
- INF MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf
- INF MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
- INF MdeModulePkg/Application/UiApp/UiApp.inf
- #
- # Crypto Accelerator support (RNG only)
- #
- INF OpenPlatformPkg/Platforms/AMD/Styx/Drivers/StyxRngDxe/StyxRngDxe.inf
+[FV.STYX_EFI] +FvAlignment = 16 +ERASE_POLARITY = 1 +MEMORY_MAPPED = TRUE +STICKY_WRITE = TRUE +LOCK_CAP = TRUE +LOCK_STATUS = TRUE +WRITE_DISABLED_CAP = TRUE +WRITE_ENABLED_CAP = TRUE +WRITE_STATUS = TRUE +WRITE_LOCK_CAP = TRUE +WRITE_LOCK_STATUS = TRUE +READ_DISABLED_CAP = TRUE +READ_ENABLED_CAP = TRUE +READ_STATUS = TRUE +READ_LOCK_CAP = TRUE +READ_LOCK_STATUS = TRUE
- INF ArmPlatformPkg/PrePeiCore/PrePeiCoreUniCore.inf
- INF MdeModulePkg/Core/Pei/PeiMain.inf
- INF ArmPlatformPkg/PlatformPei/PlatformPeim.inf
- INF AmdModulePkg/Iscp/IscpPei.inf
- INF OpenPlatformPkg/Platforms/AMD/Styx/Drivers/PlatInitPei/PlatInitPei.inf
- INF ArmPlatformPkg/MemoryInitPei/MemoryInitPeim.inf
- INF ArmPkg/Drivers/CpuPei/CpuPei.inf
- INF MdeModulePkg/Universal/PCD/Pei/Pcd.inf
- INF MdeModulePkg/Universal/Variable/Pei/VariablePei.inf
- INF MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf
- FILE FV_IMAGE = 9E21FD93-9C72-4c15-8C4B-E77F1DB2D792 {
- SECTION GUIDED EE4E5898-3914-4259-9D6E-DC7BD79403CF PROCESSING_REQUIRED = TRUE {
SECTION FV_IMAGE = FVMAIN
- }
- }
+################################################################################ +# +# Rules are use with the [FV] section's module INF type to define +# how an FFS file is created for a given INF file. The following Rule are the default +# rules for the different module type. User can add the customized rules to define the +# content of the FFS file. +# +################################################################################
+############################################################################ +# Example of a DXE_DRIVER FFS file with a Checksum encapsulation section # +############################################################################ +# +#[Rule.Common.DXE_DRIVER] +# FILE DRIVER = $(NAMED_GUID) { +# DXE_DEPEX DXE_DEPEX Optional $(INF_OUTPUT)/$(MODULE_NAME).depex +# COMPRESS PI_STD { +# GUIDED { +# PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi +# UI STRING="$(MODULE_NAME)" Optional +# VERSION STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER) +# } +# } +# } +# +############################################################################
+[Rule.Common.SEC]
- FILE SEC = $(NAMED_GUID) RELOCS_STRIPPED {
- TE TE Align = 4K $(INF_OUTPUT)/$(MODULE_NAME).efi
- }
+[Rule.Common.PEI_CORE]
- FILE PEI_CORE = $(NAMED_GUID) {
- TE TE Align = Auto $(INF_OUTPUT)/$(MODULE_NAME).efi
- UI STRING ="$(MODULE_NAME)" Optional
- }
+[Rule.Common.PEIM]
- FILE PEIM = $(NAMED_GUID) {
PEI_DEPEX PEI_DEPEX Optional $(INF_OUTPUT)/$(MODULE_NAME).depex
TE TE Align = Auto $(INF_OUTPUT)/$(MODULE_NAME).efi
UI STRING="$(MODULE_NAME)" Optional
- }
+[Rule.Common.PEIM.Binary]
- FILE PEIM = $(NAMED_GUID) {
PEI_DEPEX PEI_DEPEX Optional |.depex
TE TE Align = Auto |.efi
UI STRING="$(MODULE_NAME)" Optional
- }
+[Rule.Common.PEIM.TIANOCOMPRESSED]
- FILE PEIM = $(NAMED_GUID) DEBUG_MYTOOLS_IA32 {
- PEI_DEPEX PEI_DEPEX Optional $(INF_OUTPUT)/$(MODULE_NAME).depex
- GUIDED A31280AD-481E-41B6-95E8-127F4C984779 PROCESSING_REQUIRED = TRUE {
PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi
UI STRING="$(MODULE_NAME)" Optional
- }
- }
+[Rule.Common.DXE_CORE]
- FILE DXE_CORE = $(NAMED_GUID) {
- PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi
- UI STRING="$(MODULE_NAME)" Optional
- }
+[Rule.Common.UEFI_DRIVER]
- FILE DRIVER = $(NAMED_GUID) {
- DXE_DEPEX DXE_DEPEX Optional $(INF_OUTPUT)/$(MODULE_NAME).depex
- PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi
- UI STRING="$(MODULE_NAME)" Optional
- }
+[Rule.Common.UEFI_DRIVER.Binary]
- FILE DRIVER = $(NAMED_GUID) {
- PE32 PE32 |.efi
- UI STRING="$(MODULE_NAME)" Optional
- }
+[Rule.Common.DXE_DRIVER]
- FILE DRIVER = $(NAMED_GUID) {
- DXE_DEPEX DXE_DEPEX Optional $(INF_OUTPUT)/$(MODULE_NAME).depex
- PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi
- UI STRING="$(MODULE_NAME)" Optional
- }
+[Rule.Common.DXE_RUNTIME_DRIVER]
- FILE DRIVER = $(NAMED_GUID) {
- DXE_DEPEX DXE_DEPEX Optional $(INF_OUTPUT)/$(MODULE_NAME).depex
- PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi
- UI STRING="$(MODULE_NAME)" Optional
- }
+[Rule.Common.DXE_RUNTIME_DRIVER.Binary]
- FILE DRIVER = $(NAMED_GUID) {
- DXE_DEPEX DXE_DEPEX Optional |.depex
- PE32 PE32 |.efi
- UI STRING="$(MODULE_NAME)" Optional
- }
+[Rule.Common.UEFI_APPLICATION]
- FILE APPLICATION = $(NAMED_GUID) {
- UI STRING ="$(MODULE_NAME)" Optional
- PE32 PE32 $(INF_OUTPUT)/$(MODULE_NAME).efi
- }
+[Rule.Common.UEFI_DRIVER.BINARY]
- FILE DRIVER = $(NAMED_GUID) {
- DXE_DEPEX DXE_DEPEX Optional |.depex
- PE32 PE32 |.efi
- UI STRING="$(MODULE_NAME)" Optional
- VERSION STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)
- }
+[Rule.Common.UEFI_APPLICATION.BINARY]
- FILE APPLICATION = $(NAMED_GUID) {
- PE32 PE32 |.efi
- UI STRING="$(MODULE_NAME)" Optional
- VERSION STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)
- }
+[Rule.Common.USER_DEFINED.ACPITABLE]
- FILE FREEFORM = $(NAMED_GUID) {
- RAW ASL |.aml
- }
-- 2.5.0
Thanks Ard for your fast review. I appreciate it.
Alan.