summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLean Sheng Tan <sheng.tan@9elements.com>2024-03-15 16:18:53 +0300
committerTan Lean Sheng <sheng.tan@9elements.com>2024-05-06 18:35:14 +0300
commit307a0efbef42678f5ec87321cc967a05612d82b7 (patch)
tree8736c700ad584ae2468f705b217e28ddf1274146
parentb8791b1cc3a730235983b1f054f7ae40de1de91b (diff)
downloadopenbmc-307a0efbef42678f5ec87321cc967a05612d82b7.tar.xz
meta-evb: meta-evb-arm: Add new board FVP Base Board
This layer contains a reference implementation of OpenBMC for Armv-A Base RevC AEM FVP. Tested: - Build success - booted to bmc kernel shell Change-Id: Ie1b100a78232fb986377e3b58d637b97bbf64f42 Signed-off-by: Lean Sheng Tan <sheng.tan@9elements.com>
-rw-r--r--meta-evb/meta-evb-arm/meta-evb-fvp-base/README.md62
-rw-r--r--meta-evb/meta-evb-arm/meta-evb-fvp-base/conf/layer.conf11
-rw-r--r--meta-evb/meta-evb-arm/meta-evb-fvp-base/conf/machine/fvp-config.inc46
-rw-r--r--meta-evb/meta-evb-arm/meta-evb-fvp-base/conf/machine/fvp.conf51
-rw-r--r--meta-evb/meta-evb-arm/meta-evb-fvp-base/conf/templates/default/bblayers.conf.sample20
-rw-r--r--meta-evb/meta-evb-arm/meta-evb-fvp-base/conf/templates/default/conf-notes.txt2
-rw-r--r--meta-evb/meta-evb-arm/meta-evb-fvp-base/conf/templates/default/local.conf.sample20
-rw-r--r--meta-evb/meta-evb-arm/meta-evb-fvp-base/recipes-bsp/trusted-firmware-a/trusted-firmware-a_%.bbappend6
-rw-r--r--meta-evb/meta-evb-arm/meta-evb-fvp-base/recipes-bsp/u-boot/files/fvp.cfg30
-rw-r--r--meta-evb/meta-evb-arm/meta-evb-fvp-base/recipes-bsp/u-boot/files/fvp.env20
-rw-r--r--meta-evb/meta-evb-arm/meta-evb-fvp-base/recipes-bsp/u-boot/u-boot_%.bbappend9
-rw-r--r--meta-evb/meta-evb-arm/meta-evb-fvp-base/recipes-kernel/linux/linux-yocto/defconfig191
-rw-r--r--meta-evb/meta-evb-arm/meta-evb-fvp-base/recipes-kernel/linux/linux-yocto_%.bbappend7
-rw-r--r--meta-evb/meta-evb-arm/meta-evb-fvp-base/recipes-phosphor/packagegroups/packagegroup-fvp-apps.bb39
-rw-r--r--meta-evb/meta-evb-arm/meta-evb-fvp-base/recipes-phosphor/pldm/files/host_eid1
-rw-r--r--meta-evb/meta-evb-arm/meta-evb-fvp-base/recipes-phosphor/pldm/pldm_%.bbappend12
-rw-r--r--meta-evb/meta-evb-arm/meta-evb-fvp-base/wic/emmc-fvp.wks.in30
17 files changed, 557 insertions, 0 deletions
diff --git a/meta-evb/meta-evb-arm/meta-evb-fvp-base/README.md b/meta-evb/meta-evb-arm/meta-evb-fvp-base/README.md
new file mode 100644
index 0000000000..135e1a05cd
--- /dev/null
+++ b/meta-evb/meta-evb-arm/meta-evb-fvp-base/README.md
@@ -0,0 +1,62 @@
+# meta-fvp-base
+
+This layer contains a reference implementation of OpenBMC for Armv-A Base RevC AEM FVP.
+
+The image can be used for the following demonstration setup
+where the Base FVP represents the management controller which is communicating
+with the Manageability Control Processor (MCP) over PLDM over MCTP over UART.
+
+## Diagram
+
+```
+ AP debug console
+ |
++---------------------+
+| Neoverse RD-N2 FVP |
+| | PLDM over
++-----+ +-------+ MCTP over +--------------------------+
+| SCP | | MCP | (terminal_0) ------- UART ----- (terminal_1)| /dev/ttyAMA1 Base FVP |--- redfish
++-----+-------+-------+ +--------------------------+
+ | | |
+ | debug console FVP debug console
+ | (terminal_uart_mcp) (terminal_0)
+debug console
+(terminal_uart_scp)
+```
+
+## Features
+
+- The MCP exposes a temperature sensor which our image then exposes over redfish
+ - pldmd should automatically pick up this sensor and expose it on dbus
+- The MCP has a PLDM Event which can be retrieved by pldmd upon using ```pldm event``` command from MCP debug console
+
+## Usage
+
+1. Start Base FVP with OpenBMC Image
+ - ```./meta-arm/scripts/runfvp build/fvp/tmp/deploy/images/fvp/obmc-phosphor-image-fvp.fvpconf```
+ - The serial /dev/ttyAMA1 will be automatically configured
+ - pldmd will find ```/usr/share/pldm/host_eid``` which is hardcoded as 18
+ - pldmd will start communicating with the MCP once it's ready
+2. Start Neoverse RD-N2 FVP
+ - Can observe SCP FW logs on MCP debug console
+ - Can enter MCP Debug Prompt by pressing Ctrl+e on MCP debug console
+3. Connect the UART's of MCP to Base FVP with
+ ```socat -x tcp:localhost:6005 tcp:localhost:5065```
+ - The port numbers are just examples, they can be hardcoded in fvp config, otherwise the fvp's will assign them dynamically
+ - ```-x``` tells socat to print the bytes being transferred
+4. Query Redfish Sensor and Event
+ - ```curl --insecure -u root:0penBmc -X GET https://127.0.0.1:4223/redfish/v1/Chassis/PLDM_Device_1/Thermal```
+ - ```curl --insecure -u root:0penBmc -X GET https://127.0.0.1:4223/redfish/v1/Systems/system/LogServices/PldmEvent/Entries/```
+
+## Known Issues
+- Because both FVP are running independently, there can be an issue with timeout.
+ That's why a large timeout was configured for pldmd.
+
+## References
+
+- SCP FW for MCP https://gitlab.arm.com/firmware/SCP-firmware
+- Base FVP Download https://developer.arm.com/Tools%20and%20Software/Fixed%20Virtual%20Platforms
+- Neoverse FVP Download https://developer.arm.com/downloads/-/arm-ecosystem-fvps
+- PLDM + MCTP Specifications https://www.dmtf.org/standards/pmci
+- Neoverse System Architecture https://developer.arm.com/documentation/102759/relc/Hardware-and-topology/System-architecture?lang=en
+- Other FVP SW Docs https://gitlab.arm.com/arm-reference-solutions/arm-reference-solutions-docs/
diff --git a/meta-evb/meta-evb-arm/meta-evb-fvp-base/conf/layer.conf b/meta-evb/meta-evb-arm/meta-evb-fvp-base/conf/layer.conf
new file mode 100644
index 0000000000..07b6e3685b
--- /dev/null
+++ b/meta-evb/meta-evb-arm/meta-evb-fvp-base/conf/layer.conf
@@ -0,0 +1,11 @@
+BBPATH .= ":${LAYERDIR}"
+
+BBFILES += "\
+${LAYERDIR}/recipes-*/*/*.bb \
+${LAYERDIR}/recipes-*/*/*.bbappend \
+"
+
+BBFILE_COLLECTIONS += "evb-fvp-base"
+BBFILE_PATTERN_evb-fvp-base = "^${LAYERDIR}/"
+BBFILE_PRIORITY_evb-fvp-base = "6"
+LAYERSERIES_COMPAT_evb-fvp-base = " nanbield scarthgap"
diff --git a/meta-evb/meta-evb-arm/meta-evb-fvp-base/conf/machine/fvp-config.inc b/meta-evb/meta-evb-arm/meta-evb-fvp-base/conf/machine/fvp-config.inc
new file mode 100644
index 0000000000..c0c22dc573
--- /dev/null
+++ b/meta-evb/meta-evb-arm/meta-evb-fvp-base/conf/machine/fvp-config.inc
@@ -0,0 +1,46 @@
+# Armv8-A Base Platform FVP Specific Parameters
+
+FVP_PROVIDER ?= "fvp-base-a-aem-native"
+FVP_EXE ?= "FVP_Base_RevC-2xAEMvA"
+
+# Network
+FVP_CONFIG[bp.hostbridge.interfaceName]="enp97s0"
+FVP_CONFIG[bp.hostbridge.userNetworking]="1"
+
+# Ethernet controller
+FVP_CONFIG[bp.smsc_91c111.enabled] = "1"
+
+# Disable dc4 device for uart1
+FVP_CONFIG[bp.pl011_uart1.enable_dc4] = "0"
+
+# Set the baseline to ARMv8.4, as the default is 8.0.
+FVP_CONFIG[cluster0.has_arm_v8-4] = "1"
+FVP_CONFIG[cluster1.has_arm_v8-4] = "1"
+
+# FVP Terminal/console outpot settings
+FVP_CONFIG[bp.hostbridge.userNetPorts] = "4222=22,4223=443,4224=80"
+FVP_CONSOLES[default] = "terminal_0"
+FVP_TERMINALS[bp.terminal_0] ?= "Console"
+FVP_TERMINALS[bp.terminal_1] ?= ""
+FVP_TERMINALS[bp.terminal_2] ?= ""
+FVP_TERMINALS[bp.terminal_3] ?= ""
+# user can update ports as needed
+FVP_CONFIG[bp.terminal_0.start_port] = "5064"
+FVP_CONFIG[bp.terminal_1.start_port] = "5065"
+FVP_CONFIG[bp.terminal_2.start_port] = "5066"
+FVP_CONFIG[bp.terminal_3.start_port] = "5067"
+
+# FIP image settings
+# fip images can be inspected with 'fiptool' from TF-A
+FVP_CONFIG[bp.secureflashloader.fname] = "bl1-fvp.bin"
+FVP_CONFIG[bp.flashloader0.fname] = "fip-fvp.bin"
+# enable randomness which is needed for various security related applications
+FVP_CONFIG[bp.virtio_rng.enabled] = "1"
+FVP_CONFIG[bp.virtio_rng.diagnostics] = "1"
+FVP_CONFIG[cache_state_modelled] ?= "0"
+
+# Enable MMC support
+FVP_CONFIG[bp.mmc.p_mmc_file]="obmc-phosphor-image-fvp.wic"
+# use pad instead of silently truncate emmc image
+FVP_CONFIG[bp.mmc.support_unpadded_images]="1"
+FVP_CONFIG[bp.mmc.diagnostics]="0x1"
diff --git a/meta-evb/meta-evb-arm/meta-evb-fvp-base/conf/machine/fvp.conf b/meta-evb/meta-evb-arm/meta-evb-fvp-base/conf/machine/fvp.conf
new file mode 100644
index 0000000000..1a65c6f5ec
--- /dev/null
+++ b/meta-evb/meta-evb-arm/meta-evb-fvp-base/conf/machine/fvp.conf
@@ -0,0 +1,51 @@
+#@TYPE: Machine
+#@NAME: Armv8-A Base Platform FVP machine
+#@DESCRIPTION: Machine configuration for Armv8-A Base Platform FVP model
+
+include fvp-config.inc
+
+require conf/distro/include/phosphor-mmc.inc
+require conf/machine/include/arm/arch-armv8-4a.inc
+require conf/distro/include/pldm.inc
+require conf/machine/include/obmc-evb-common.inc
+require conf/machine/include/obmc-bsp-common.inc
+
+INHERIT += "fvpboot"
+
+IMAGE_FSTYPES = "wic"
+WKS_FILE = "emmc-fvp.wks.in"
+IMAGE_BOOT_FILES = "fitImage-fvp.bin;fitImage"
+
+SERIAL_CONSOLES = "115200;ttyAMA0"
+
+PREFERRED_PROVIDER_virtual/kernel ?= "linux-yocto"
+KERNEL_DEVICETREE = "arm/fvp-base-revc.dtb"
+KERNEL_IMAGETYPE = "fitImage"
+
+EXTRA_IMAGEDEPENDS += "trusted-firmware-a"
+
+UBOOT_MACHINE = "vexpress_fvp_defconfig"
+
+EXTRA_IMAGEDEPENDS += "u-boot"
+
+FIT_ADDRESS_CELLS = "2"
+UBOOT_LOADADDRESS = "0xa0000000"
+UBOOT_ENTRYPOINT = "0xa0000000"
+
+INITRAMFS_IMGAGE = "core-image-minimal-initramfs"
+INITRAMFS_IMAGE_BUNDLE = "1"
+
+IMAGE_INSTALL:append = "\
+ ssh-pregen-hostkeys \
+ pldm \
+"
+
+PREFERRED_PROVIDER_virtual/obmc-chassis-mgmt = "packagegroup-fvp-apps"
+PREFERRED_PROVIDER_virtual/obmc-fan-mgmt = "packagegroup-fvp-apps"
+PREFERRED_PROVIDER_virtual/obmc-flash-mgmt = "packagegroup-fvp-apps"
+PREFERRED_PROVIDER_virtual/obmc-system-mgmt = "packagegroup-fvp-apps"
+PREFERRED_PROVIDER_virtual/obmc-inventory-data = "packagegroup-fvp-apps"
+PREFERRED_PROVIDER_virtual/obmc-user-mgmt = "packagegroup-fvp-apps"
+
+# Disable "time jumped backwards" error as FVP could be out of sync with real time due to slower simulation
+PACKAGECONFIG:remove:pn-systemd = "timesyncd"
diff --git a/meta-evb/meta-evb-arm/meta-evb-fvp-base/conf/templates/default/bblayers.conf.sample b/meta-evb/meta-evb-arm/meta-evb-fvp-base/conf/templates/default/bblayers.conf.sample
new file mode 100644
index 0000000000..b150ecb7cd
--- /dev/null
+++ b/meta-evb/meta-evb-arm/meta-evb-fvp-base/conf/templates/default/bblayers.conf.sample
@@ -0,0 +1,20 @@
+# LAYER_CONF_VERSION is increased each time build/conf/bblayers.conf
+# changes incompatibly
+LCONF_VERSION = "8"
+
+BBPATH = "${TOPDIR}"
+BBFILES ?= ""
+
+BBLAYERS ?= " \
+ ##OEROOT##/meta \
+ ##OEROOT##/meta-openembedded/meta-oe \
+ ##OEROOT##/meta-openembedded/meta-networking \
+ ##OEROOT##/meta-openembedded/meta-python \
+ ##OEROOT##/meta-phosphor \
+ ##OEROOT##/meta-arm/meta-arm \
+ ##OEROOT##/meta-arm/meta-arm-toolchain \
+ ##OEROOT##/meta-arm/meta-arm-bsp \
+ ##OEROOT##/meta-evb \
+ ##OEROOT##/meta-evb/meta-evb-arm/meta-evb-fvp-base \
+"
+
diff --git a/meta-evb/meta-evb-arm/meta-evb-fvp-base/conf/templates/default/conf-notes.txt b/meta-evb/meta-evb-arm/meta-evb-fvp-base/conf/templates/default/conf-notes.txt
new file mode 100644
index 0000000000..43d4ab099d
--- /dev/null
+++ b/meta-evb/meta-evb-arm/meta-evb-fvp-base/conf/templates/default/conf-notes.txt
@@ -0,0 +1,2 @@
+Common targets are:
+ obmc-phosphor-image
diff --git a/meta-evb/meta-evb-arm/meta-evb-fvp-base/conf/templates/default/local.conf.sample b/meta-evb/meta-evb-arm/meta-evb-fvp-base/conf/templates/default/local.conf.sample
new file mode 100644
index 0000000000..33c5d1164e
--- /dev/null
+++ b/meta-evb/meta-evb-arm/meta-evb-fvp-base/conf/templates/default/local.conf.sample
@@ -0,0 +1,20 @@
+MACHINE ??= "evb-fvp-base"
+DISTRO ?= "openbmc-phosphor"
+PACKAGE_CLASSES ?= "package_ipk"
+SANITY_TESTED_DISTROS:append ?= " *"
+EXTRA_IMAGE_FEATURES = "debug-tweaks"
+USER_CLASSES ?= "buildstats"
+PATCHRESOLVE = "noop"
+BB_DISKMON_DIRS = "\
+ STOPTASKS,${TMPDIR},1G,100K \
+ STOPTASKS,${DL_DIR},1G,100K \
+ STOPTASKS,${SSTATE_DIR},1G,100K \
+ STOPTASKS,/tmp,100M,100K \
+ HALT,${TMPDIR},100M,1K \
+ HALT,${DL_DIR},100M,1K \
+ HALT,${SSTATE_DIR},100M,1K \
+ HALT,/tmp,10M,1K"
+CONF_VERSION = "2"
+
+LICENSE_FLAGS_ACCEPTED = "Arm-FVP-EULA"
+
diff --git a/meta-evb/meta-evb-arm/meta-evb-fvp-base/recipes-bsp/trusted-firmware-a/trusted-firmware-a_%.bbappend b/meta-evb/meta-evb-arm/meta-evb-fvp-base/recipes-bsp/trusted-firmware-a/trusted-firmware-a_%.bbappend
new file mode 100644
index 0000000000..42111843f4
--- /dev/null
+++ b/meta-evb/meta-evb-arm/meta-evb-fvp-base/recipes-bsp/trusted-firmware-a/trusted-firmware-a_%.bbappend
@@ -0,0 +1,6 @@
+COMPATIBLE_MACHINE = "fvp"
+TFA_TARGET_PLATFORM = "fvp"
+TFA_PLATFORM_IS_FVP = "TRUE"
+TFA_PLATFORM = "fvp"
+TFA_UBOOT = "1"
+TFA_BUILD_TARGET = "bl1 bl2 bl31 dtbs fip"
diff --git a/meta-evb/meta-evb-arm/meta-evb-fvp-base/recipes-bsp/u-boot/files/fvp.cfg b/meta-evb/meta-evb-arm/meta-evb-fvp-base/recipes-bsp/u-boot/files/fvp.cfg
new file mode 100644
index 0000000000..9cd1815fb7
--- /dev/null
+++ b/meta-evb/meta-evb-arm/meta-evb-fvp-base/recipes-bsp/u-boot/files/fvp.cfg
@@ -0,0 +1,30 @@
+CONFIG_USE_BOOTARGS=y
+CONFIG_FVP=y
+CONFIG_SYS_BOOTM_LEN=0x6000000 # increase buffer size for decompression
+
+# Enable A/B boot scheme & MMC support
+CONFIG_USE_DEFAULT_ENV_FILE=y
+CONFIG_DEFAULT_ENV_FILE="../fvp.env"
+
+# Enable FIT support
+CONFIG_FIT=y
+CONFIG_FIT_FULL_CHECK=y
+CONFIG_TOOLS_FIT_FULL_CHECK=y
+CONFIG_FIT_SIGNATURE=n
+CONFIG_FIT_CIPHER=y
+CONFIG_FIT_VERBOSE=n
+CONFIG_FIT_PRINT=n
+
+# Hash support for FIT image
+CONFIG_SHA256=y
+CONFIG_TOOLS_SHA256=y
+CONFIG_CMD_HASH=y
+CONFIG_HASH=y
+CONFIG_HASH_VERIFY=y
+
+# MMC configs
+CONFIG_MMC=y
+CONFIG_DM_MMC=y
+CONFIG_ARM_PL180_MMCI=y
+CONFIG_DM_GPIO=y # should be dependency of ARM_PL180_MMCI
+CONFIG_CMD_MMC=y
diff --git a/meta-evb/meta-evb-arm/meta-evb-fvp-base/recipes-bsp/u-boot/files/fvp.env b/meta-evb/meta-evb-arm/meta-evb-fvp-base/recipes-bsp/u-boot/files/fvp.env
new file mode 100644
index 0000000000..946e08a8d3
--- /dev/null
+++ b/meta-evb/meta-evb-arm/meta-evb-fvp-base/recipes-bsp/u-boot/files/fvp.env
@@ -0,0 +1,20 @@
+# variables
+bootargs=console=ttyAMA0 earlycon=pl011,0x1c090000 loglevel=9 rootwait root=PARTLABEL=rofs-a
+bootside=a
+loadaddr=0x90000000
+
+# runnable variables in order of execution (for readability)
+bootcmd=setenv origbootargs ${bootargs}; run bootsidecmd
+bootsidecmd= \
+ if test ${bootside} = b; then; \
+ run bootb; \
+ run boota; \
+ else \
+ run boota; \
+ run bootb; \
+ fi
+boota=setenv bootpart 2; setenv rootfs rofs-a; run bootmmc
+bootb=setenv bootpart 3; setenv rootfs rofs-b; run bootmmc
+bootmmc=run setmmcargs; ext4load mmc 0:${bootpart} ${loadaddr} fitImage && bootm ${loadaddr}${bootmconf}; echo Error loading kernel FIT image with fitconfig ${fitconfig}; bootm ${loadaddr}; echo Error loading kernel FIT image
+setmmcargs=setenv bootargs ${origbootargs}
+
diff --git a/meta-evb/meta-evb-arm/meta-evb-fvp-base/recipes-bsp/u-boot/u-boot_%.bbappend b/meta-evb/meta-evb-arm/meta-evb-fvp-base/recipes-bsp/u-boot/u-boot_%.bbappend
new file mode 100644
index 0000000000..7e4311d62c
--- /dev/null
+++ b/meta-evb/meta-evb-arm/meta-evb-fvp-base/recipes-bsp/u-boot/u-boot_%.bbappend
@@ -0,0 +1,9 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
+
+# needed by u-boot Makefile if ENV_FILE is used
+DEPENDS:append = " xxd-native"
+
+SRC_URI:append = "\
+ file://fvp.cfg \
+ file://fvp.env \
+"
diff --git a/meta-evb/meta-evb-arm/meta-evb-fvp-base/recipes-kernel/linux/linux-yocto/defconfig b/meta-evb/meta-evb-arm/meta-evb-fvp-base/recipes-kernel/linux/linux-yocto/defconfig
new file mode 100644
index 0000000000..cf4595342b
--- /dev/null
+++ b/meta-evb/meta-evb-arm/meta-evb-fvp-base/recipes-kernel/linux/linux-yocto/defconfig
@@ -0,0 +1,191 @@
+CONFIG_LOCALVERSION="-yocto-standard"
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_PREEMPT=y
+CONFIG_LOG_BUF_SHIFT=13
+CONFIG_LOG_CPU_MAX_BUF_SHIFT=13
+CONFIG_RELAY=y
+CONFIG_BOOT_CONFIG=y
+CONFIG_ARCH_VEXPRESS=y
+CONFIG_CMDLINE="console=ttyAMA0 loglevel=9"
+# CONFIG_SUSPEND is not set
+# CONFIG_STACKPROTECTOR is not set
+CONFIG_MODULES=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+CONFIG_NET=y
+CONFIG_NETFILTER=y
+CONFIG_PACKET=y
+CONFIG_PACKET_DIAG=y
+CONFIG_UNIX=y
+CONFIG_UNIX_DIAG=y
+CONFIG_INET=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+CONFIG_SYN_COOKIES=y
+CONFIG_NET_SCHED=y
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y
+# CONFIG_EFI_BOOTLOADER_CONTROL is not set
+# CONFIG_EFI_CAPSULE_LOADER is not set
+# CONFIG_EFI_TEST is not set
+# CONFIG_RESET_ATTACK_MITIGATION is not set
+CONFIG_SCSI=y
+# CONFIG_BLK_DEV_BSG is not set
+CONFIG_NETDEVICES=y
+CONFIG_NET_CORE=y
+CONFIG_ETHERNET=y
+CONFIG_PHYLIB=y
+CONFIG_SMSC_PHY=y
+# CONFIG_NET_VENDOR_ALACRITECH is not set
+# CONFIG_NET_VENDOR_AMAZON is not set
+# CONFIG_NET_VENDOR_AMD is not set
+# CONFIG_NET_VENDOR_AQUANTIA is not set
+# CONFIG_NET_VENDOR_ARC is not set
+# CONFIG_NET_VENDOR_BROADCOM is not set
+# CONFIG_NET_VENDOR_CADENCE is not set
+# CONFIG_NET_VENDOR_CAVIUM is not set
+# CONFIG_NET_VENDOR_CORTINA is not set
+# CONFIG_NET_VENDOR_EZCHIP is not set
+# CONFIG_NET_VENDOR_GOOGLE is not set
+# CONFIG_NET_VENDOR_HISILICON is not set
+# CONFIG_NET_VENDOR_HUAWEI is not set
+# CONFIG_NET_VENDOR_INTEL is not set
+# CONFIG_NET_VENDOR_MARVELL is not set
+# CONFIG_NET_VENDOR_MICREL is not set
+# CONFIG_NET_VENDOR_MICROCHIP is not set
+# CONFIG_NET_VENDOR_MICROSEMI is not set
+# CONFIG_NET_VENDOR_NI is not set
+# CONFIG_NET_VENDOR_NATSEMI is not set
+# CONFIG_NET_VENDOR_NETRONOME is not set
+# CONFIG_NET_VENDOR_PENSANDO is not set
+# CONFIG_NET_VENDOR_QUALCOMM is not set
+# CONFIG_NET_VENDOR_RENESAS is not set
+# CONFIG_NET_VENDOR_ROCKER is not set
+# CONFIG_NET_VENDOR_SAMSUNG is not set
+# CONFIG_NET_VENDOR_SEEQ is not set
+# CONFIG_NET_VENDOR_SOLARFLARE is not set
+CONFIG_NET_VENDOR_SMSC=y
+CONFIG_SMC91X=y
+CONFIG_SMSC911X=y
+# CONFIG_NET_VENDOR_SOCIONEXT is not set
+# CONFIG_NET_VENDOR_STMICRO is not set
+# CONFIG_NET_VENDOR_SYNOPSYS is not set
+# CONFIG_NET_VENDOR_VIA is not set
+# CONFIG_NET_VENDOR_WIZNET is not set
+# CONFIG_NET_VENDOR_XILINX is not set
+# CONFIG_SERIO_SERPORT is not set
+CONFIG_SERIAL_AMBA_PL011=y
+CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
+CONFIG_USB=y
+CONFIG_USB_STORAGE=y
+CONFIG_USB_UAS=y
+CONFIG_USB_ISP1760=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_DRV_PL031=y
+CONFIG_TEE=y
+CONFIG_OPTEE=y
+CONFIG_VFAT_FS=y
+CONFIG_TMPFS=y
+CONFIG_CONFIGFS_FS=y
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_860=y
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_15=y
+CONFIG_NLS_UTF8=y
+CONFIG_LIBCRC32C=y
+# CONFIG_SECTION_MISMATCH_WARN_ONLY is not set
+CONFIG_DEBUG_FS=y
+CONFIG_PANIC_TIMEOUT=5
+
+# Enable VIRTIO
+CONFIG_VIRTIO_MENU=y
+CONFIG_VIRTIO=y
+CONFIG_VIRTIO_BLK=y
+CONFIG_EXT4_FS=y
+
+# MMC support
+CONFIG_MMC=y
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_ARMMMCI=y
+# mmc depends on the fixed voltage regulator through devicetree
+CONFIG_REGULATOR=y
+CONFIG_REGULATOR_FIXED_VOLTAGE=y
+
+CONFIG_MFD_VEXPRESS_SYSREG=y
+CONFIG_VEXPRESS_CONFIG=y
+
+# needed for boot to userspace
+CONFIG_BINFMT_ELF=y
+
+# needed by systemd
+# https://wiki.gentoo.org/wiki/Systemd#Kernel
+CONFIG_CGROUPS=y
+CONFIG_CGROUP_DEVICE=y
+CONFIG_CGROUP_SCHED=y
+CONFIG_CGROUP_PIDS=y
+CONFIG_CGROUP_FREEZER=y
+CONFIG_INOTIFY_USER=y
+CONFIG_PROC_FS=y
+CONFIG_BPF_SYSCALL=y
+
+CONFIG_CPUSETS=y
+CONFIG_PROC_PID_CPUSET=y
+CONFIG_CGROUP_CPUACCT=y
+CONFIG_PAGE_COUNTER=y
+CONFIG_MEMCG=y
+CONFIG_NAMESPACES=y
+CONFIG_OVERLAY_FS=y
+
+# not allow init=... to be a script
+CONFIG_BINFMT_SCRIPT=y
+
+# allow initramfs compression
+CONFIG_RD_GZIP=y
+
+# timestamps in kernel log
+CONFIG_PRINTK_TIME=y
+
+# from systemd config in their repo
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_BLK_DEV_SD=y
+
+CONFIG_BPF_EVENTS=y
+CONFIG_BSD_PROCESS_ACCT=y
+CONFIG_CGROUP_BPF=y
+CONFIG_CGROUP_HUGETLB=y
+CONFIG_CGROUP_MISC=y
+CONFIG_CGROUP_NET_PRIO=y
+CONFIG_CGROUP_PERF=y
+
+
+CONFIG_IKCONFIG_PROC=y
+CONFIG_IKCONFIG=y
+
+CONFIG_TMPFS_POSIX_ACL=y
+CONFIG_TMPFS_XATTR=y
+CONFIG_BINFMT_MISC=y
+
+CONFIG_BLK_CGROUP=y
+CONFIG_BLK_CGROUP_IOCOST=y
+CONFIG_BLK_CGROUP_IOLATENCY=y
+CONFIG_BLK_CGROUP_IOPRIO=y
+
+CONFIG_BLK_DEV_DM=y
+
+CONFIG_SMP=y
+
+
+# systemd tries these, better enable them
+CONFIG_POSIX_MQUEUE=y
+CONFIG_HUGETLBFS=y
+CONFIG_HUGETLB_PAGE=y
+
+
+# to get entropy quicker,
+# needed for e.g. dbus-broker
+CONFIG_HW_RANDOM=y
+CONFIG_HW_RANDOM_VIRTIO=y
+CONFIG_VIRTIO_PCI=y
+CONFIG_VIRTIO_MMIO=y
diff --git a/meta-evb/meta-evb-arm/meta-evb-fvp-base/recipes-kernel/linux/linux-yocto_%.bbappend b/meta-evb/meta-evb-arm/meta-evb-fvp-base/recipes-kernel/linux/linux-yocto_%.bbappend
new file mode 100644
index 0000000000..37aba1a744
--- /dev/null
+++ b/meta-evb/meta-evb-arm/meta-evb-fvp-base/recipes-kernel/linux/linux-yocto_%.bbappend
@@ -0,0 +1,7 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
+
+COMPATIBLE_MACHINE = "fvp"
+
+SRC_URI:append = " \
+file://defconfig \
+"
diff --git a/meta-evb/meta-evb-arm/meta-evb-fvp-base/recipes-phosphor/packagegroups/packagegroup-fvp-apps.bb b/meta-evb/meta-evb-arm/meta-evb-fvp-base/recipes-phosphor/packagegroups/packagegroup-fvp-apps.bb
new file mode 100644
index 0000000000..30d8bd45b2
--- /dev/null
+++ b/meta-evb/meta-evb-arm/meta-evb-fvp-base/recipes-phosphor/packagegroups/packagegroup-fvp-apps.bb
@@ -0,0 +1,39 @@
+SUMMARY = "OpenBMC for FVP - Applications"
+PR = "r1"
+
+inherit packagegroup
+
+PROVIDES = "${PACKAGES}"
+PACKAGES = " \
+ ${PN}-chassis \
+ ${PN}-flash \
+ ${PN}-system \
+ "
+
+PROVIDES += "virtual/obmc-chassis-mgmt"
+PROVIDES += "virtual/obmc-flash-mgmt"
+PROVIDES += "virtual/obmc-system-mgmt"
+PROVIDES += "virtual/obmc-user-mgmt"
+
+RPROVIDES:${PN}-chassis += "virtual-obmc-chassis-mgmt"
+RPROVIDES:${PN}-flash += "virtual-obmc-flash-mgmt"
+RPROVIDES:${PN}-system += "virtual-obmc-system-mgmt"
+RPROVIDES:${PN}-user += "virtual-user-system-mgmt"
+
+SUMMARY:${PN}-chassis = "FVP Chassis"
+RDEPENDS:${PN}-chassis = " \
+ "
+
+SUMMARY:${PN}-user = "FVP User"
+RDEPENDS:${PN}-user = " \
+ "
+
+SUMMARY:${PN}-flash = "FVP Flash"
+RDEPENDS:${PN}-flash = " \
+ "
+
+SUMMARY:${PN}-system = "FVP System"
+RDEPENDS:${PN}-system = " \
+ bmcweb \
+ webui-vue \
+ "
diff --git a/meta-evb/meta-evb-arm/meta-evb-fvp-base/recipes-phosphor/pldm/files/host_eid b/meta-evb/meta-evb-arm/meta-evb-fvp-base/recipes-phosphor/pldm/files/host_eid
new file mode 100644
index 0000000000..573541ac97
--- /dev/null
+++ b/meta-evb/meta-evb-arm/meta-evb-fvp-base/recipes-phosphor/pldm/files/host_eid
@@ -0,0 +1 @@
+0
diff --git a/meta-evb/meta-evb-arm/meta-evb-fvp-base/recipes-phosphor/pldm/pldm_%.bbappend b/meta-evb/meta-evb-arm/meta-evb-fvp-base/recipes-phosphor/pldm/pldm_%.bbappend
new file mode 100644
index 0000000000..8388b841fb
--- /dev/null
+++ b/meta-evb/meta-evb-arm/meta-evb-fvp-base/recipes-phosphor/pldm/pldm_%.bbappend
@@ -0,0 +1,12 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
+
+EXTRA_OEMESON:append = " \
+ -Doem-ibm=disabled \
+ "
+
+SRC_URI:append = " file://host_eid "
+
+do_install:append() {
+ install -d ${D}/usr/share/pldm/bios
+ install -D -m 0644 ${WORKDIR}/host_eid ${D}/usr/share/pldm
+}
diff --git a/meta-evb/meta-evb-arm/meta-evb-fvp-base/wic/emmc-fvp.wks.in b/meta-evb/meta-evb-arm/meta-evb-fvp-base/wic/emmc-fvp.wks.in
new file mode 100644
index 0000000000..93ae7f68f0
--- /dev/null
+++ b/meta-evb/meta-evb-arm/meta-evb-fvp-base/wic/emmc-fvp.wks.in
@@ -0,0 +1,30 @@
+# short-description: Create an image for eMMC
+# long-description: Creates an eMMC card image for the User Data Area that can
+# be used with the Arm Base FVP.
+#
+# Assumes a minimum flash size of 16GB.
+# Assumes U-Boot is stored elsewhere, such as an eMMC boot volume or NOR flash.
+#
+# --- - ----- -------- -------- -------- -------- ------ -------- -------
+# |GPT| | env | boot-a | boot-b | rofs-a | rofs-b | rwfs | hostfw |GPT-sec|
+# --- - ----- -------- -------- -------- -------- ------ -------- -------
+# ^ 1MB 64MB 64MB 1GB 1GB 7GB 5GB
+# |
+# 0x5000
+#
+# Primary GPT size (Beginning of image):
+# 512B (Protective MBR) + 512B (Primary Header) + 16KB (Primary Table)
+# First partition (u-boot-env) is 4K-aligned, which puts it at offset 0x5000
+#
+# Secondary GPT size (End of image):
+# 16KB (Secondary Table) + 512B (Secondary Header)
+
+bootloader --ptable gpt
+
+part --align 4 --fixed-size 1M
+part --fstype=ext4 --fixed-size 64M --source bootimg-partition --label boot-a
+part --fstype=ext4 --fixed-size 64M --source bootimg-partition --label boot-b
+part --fstype=ext4 --fixed-size 1G --source rootfs --label rofs-a
+part --fstype=ext4 --fixed-size 1G --source rootfs --label rofs-b
+part --fstype=ext4 --fixed-size 7G --label rwfs
+#part --fstype=ext4 --fixed-size ${WKS_HOSTFW_SIZE} --source rootfs --rootfs-dir=${DEPLOY_DIR_IMAGE}/hostfw/image/ --label hostfw