summaryrefslogtreecommitdiff
path: root/meta-ibs/meta-common/recipes-phosphor
diff options
context:
space:
mode:
Diffstat (limited to 'meta-ibs/meta-common/recipes-phosphor')
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/dbus/ibs-dbus-interfaces-mapper-config-native.bb11
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/dbus/intel-dbus-interfaces_git.bb31
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0007-ipmi-set-BIOS-id.patch32
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0010-Increase-the-default-watchdog-timeout-value.patch34
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0012-Add-RestoreDelay-interface-for-power-restore-delay.patch34
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0013-Add-ErrConfig.yaml-interface-for-processor-error-config.patch86
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0024-Add-the-pre-timeout-interrupt-defined-in-IPMI-spec.patch57
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0025-Add-PreInterruptFlag-properity-in-DBUS.patch39
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0026-Add-StandbySpare-support-for-software-inventory.patch55
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0028-MCTP-Daemon-D-Bus-interface-definition.patch402
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0029-Add-D-Bus-interfaces-for-PLDM-FW-update.patch494
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0030-Add-PLDM-version-purpose-enumeration.patch28
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0031-update-meson-build-files-for-control-and-bios.patch149
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0032-update-meson-build-for-MCTP-interfaces.patch209
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0033-update-meson-build-for-PLDM-FWU-interfaces.patch418
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0034-Add-username-property-to-SessionInfo-interface.patch64
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces_%.bbappend22
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-mapper-config-native.bbappend1
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-mapper/xyz.openbmc_project.ObjectMapper.service20
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-mapper_%.bbappend1
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/fans/phosphor-pid-control_%.bbappend3
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/fru/default-fru.bb26
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/fru/default-fru/CMakeLists.txt7
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/fru/default-fru/SetBaseboardFru.service9
-rwxr-xr-xmeta-ibs/meta-common/recipes-phosphor/fru/default-fru/checkFru.sh54
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/fru/default-fru/decodeBoardID.sh6
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/fru/default-fru/mkfru.cpp219
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/initrdscripts/obmc-phosphor-initfs.bbappend5
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/initrdscripts/obmc-phosphor-initfs/obmc-shutdown.sh108
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/interfaces/bmcweb-init-certs.bb18
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/interfaces/bmcweb-init-certs/bmcweb-init-certs66
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/interfaces/bmcweb/0001-Enable-vm-nbdproxy-option.patch47
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/interfaces/bmcweb_%.bbappend13
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host_%.bbappend5
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-ipmb/ipmb-channels.json16
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-ipmb_%.bbappend8
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/leds/ibs-led-manager-config-native.bb21
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/leds/ibs-led-manager-config/led.yaml48
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/leds/id-led-off/id-led-off.service11
-rwxr-xr-xmeta-ibs/meta-common/recipes-phosphor/leds/id-led-off/id-led-off.sh12
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/leds/id-led-off_git.bb24
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/leds/phosphor-led-manager_%.bbappend11
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/phosphor-u-boot-mgr/phosphor-u-boot-mgr_git.bb18
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/virtual-media/virtual-media.bb25
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/watchdog/frb2-watchdog.bb35
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/watchdog/frb2-watchdog/.clang-format98
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/watchdog/frb2-watchdog/CMakeLists.txt52
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/watchdog/frb2-watchdog/cmake-format.json12
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/watchdog/frb2-watchdog/frb2-watchdog.cpp257
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/watchdog/phosphor-watchdog/0001-Customize-phosphor-watchdog-for-Intel-platforms.patch348
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/watchdog/phosphor-watchdog/phosphor-watchdog.service16
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/watchdog/phosphor-watchdog_%.bbappend9
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/watchdog/system-watchdog.bb24
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/watchdog/system-watchdog/obmc/system-watchdog/system-watchdog.conf3
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/watchdog/system-watchdog/system-watchdog.service11
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/watchdog/system-watchdog/watchdog-clear-failures.service10
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/watchdog/system-watchdog/watchdog-clear-failures.timer8
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/watchdog/system-watchdog/watchdog-reset18
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/watchdog/system-watchdog/watchdog-reset@.service7
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/webui/phosphor-webui/config.json8
-rw-r--r--meta-ibs/meta-common/recipes-phosphor/webui/phosphor-webui_%.bbappend8
61 files changed, 3891 insertions, 0 deletions
diff --git a/meta-ibs/meta-common/recipes-phosphor/dbus/ibs-dbus-interfaces-mapper-config-native.bb b/meta-ibs/meta-common/recipes-phosphor/dbus/ibs-dbus-interfaces-mapper-config-native.bb
new file mode 100644
index 0000000000..17ebc9dce1
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/dbus/ibs-dbus-interfaces-mapper-config-native.bb
@@ -0,0 +1,11 @@
+SUMMARY="Add /com/ibs namespace to phosphor-mapper"
+DESCRIPTION="Add the /com/ibs path namespace and \
+com.intel interface prefix to the mapper watch list."
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
+
+inherit phosphor-mapper
+inherit native
+
+PHOSPHOR_MAPPER_SERVICE:append = " com.ibs"
+PHOSPHOR_MAPPER_INTERFACE:append = " com.ibs"
diff --git a/meta-ibs/meta-common/recipes-phosphor/dbus/intel-dbus-interfaces_git.bb b/meta-ibs/meta-common/recipes-phosphor/dbus/intel-dbus-interfaces_git.bb
new file mode 100644
index 0000000000..ed5447d5bf
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/dbus/intel-dbus-interfaces_git.bb
@@ -0,0 +1,31 @@
+SUMMARY = "Intel DBus Interfaces"
+DESCRIPTION = "Generated bindings, using sdbus++, for the Intel YAML"
+PR = "r1"
+PV = "1.0+git${SRCPV}"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327"
+
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
+inherit python3native
+inherit phosphor-dbus-yaml
+
+DEPENDS += "autoconf-archive-native"
+DEPENDS += "${PYTHON_PN}-sdbus++-native"
+
+SRC_URI = "git://github.com/openbmc/intel-dbus-interfaces;branch=master;protocol=https"
+SRCREV = "2b1255c47fdaaee6fd2db8f38f32abc13a7edf05"
+
+PACKAGECONFIG ??= "libintel_dbus"
+PACKAGECONFIG[libintel_dbus] = " \
+ --enable-libintel_dbus, \
+ --disable-libintel_dbus, \
+ systemd sdbusplus, \
+ libsystemd \
+ "
+
+PACKAGECONFIG:remove:class-native = "libintel_dbus"
+PACKAGECONFIG:remove:class-nativesdk = "libintel_dbus"
+
+BBCLASSEXTEND += "native nativesdk"
diff --git a/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0007-ipmi-set-BIOS-id.patch b/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0007-ipmi-set-BIOS-id.patch
new file mode 100644
index 0000000000..73347a763e
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0007-ipmi-set-BIOS-id.patch
@@ -0,0 +1,32 @@
+From a6a94a79f8b94faf2bfcee0d32c406fc3dd78887 Mon Sep 17 00:00:00 2001
+From: "Jia, Chunhui" <chunhui.jia@intel.com>
+Date: Tue, 24 Jul 2018 11:40:49 +0800
+Subject: [PATCH] set BIOS id
+
+change#2
+add new dbus interface for BIOS attributes
+
+Signed-off-by: Jia, Chunhui <chunhui.jia@intel.com>
+---
+ .../openbmc_project/Inventory/Item/Bios.interface.yaml | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+ create mode 100644 yaml/xyz/openbmc_project/Inventory/Item/Bios.interface.yaml
+
+diff --git a/yaml/xyz/openbmc_project/Inventory/Item/Bios.interface.yaml b/yaml/xyz/openbmc_project/Inventory/Item/Bios.interface.yaml
+new file mode 100644
+index 00000000..d7a6b95b
+--- /dev/null
++++ b/yaml/xyz/openbmc_project/Inventory/Item/Bios.interface.yaml
+@@ -0,0 +1,9 @@
++description: >
++ Implement to provide BIOS attributes.
++properties:
++ - name: BiosId
++ type: string
++ description: >
++ BIOS ID (version) string
++
++# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
+--
+2.35.1
+
diff --git a/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0010-Increase-the-default-watchdog-timeout-value.patch b/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0010-Increase-the-default-watchdog-timeout-value.patch
new file mode 100644
index 0000000000..39e01a7786
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0010-Increase-the-default-watchdog-timeout-value.patch
@@ -0,0 +1,34 @@
+From 9e5a1b2c28fcf31b395c11d899dd2e46e97a3cbe Mon Sep 17 00:00:00 2001
+From: Yong Li <yong.b.li@linux.intel.com>
+Date: Fri, 10 Aug 2018 16:23:13 +0800
+Subject: [PATCH] Increase the default watchdog timeout value
+
+The default timeout for poweron is 30 seconds,
+but currently the host power on needs 120+ seconds
+due to unimplemented ipmi commands for BIOS.
+
+Increase the value as a workaround,
+to avoid the watchdog timeout during power on.
+Will adjust this value in the future
+
+Signed-off-by: Yong Li <yong.b.li@linux.intel.com>
+---
+ yaml/xyz/openbmc_project/State/Watchdog.interface.yaml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/yaml/xyz/openbmc_project/State/Watchdog.interface.yaml b/yaml/xyz/openbmc_project/State/Watchdog.interface.yaml
+index ac71e614..556dca10 100644
+--- a/yaml/xyz/openbmc_project/State/Watchdog.interface.yaml
++++ b/yaml/xyz/openbmc_project/State/Watchdog.interface.yaml
+@@ -37,7 +37,7 @@ properties:
+ type: uint64
+ description: >
+ Time interval to arm the watchdog, in milli-second.
+- default: 30000
++ default: 600000
+ - name: TimeRemaining
+ type: uint64
+ description: >
+--
+2.35.1
+
diff --git a/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0012-Add-RestoreDelay-interface-for-power-restore-delay.patch b/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0012-Add-RestoreDelay-interface-for-power-restore-delay.patch
new file mode 100644
index 0000000000..266965ca07
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0012-Add-RestoreDelay-interface-for-power-restore-delay.patch
@@ -0,0 +1,34 @@
+From beee21d8fe99d72b9a1b3391f818a16d110b1b86 Mon Sep 17 00:00:00 2001
+From: Kuiying Wang <kuiying.wang@intel.com>
+Date: Fri, 24 Aug 2018 17:55:35 +0800
+Subject: [PATCH] Add RestoreDelay interface for power restore delay
+
+Which provide one property "PowerRestoreDelay"
+
+Change-Id: I4e6d3e45948b1e288301b4aa52cc08cace4f1bc2
+Signed-off-by: Kuiying Wang <kuiying.wang@intel.com>
+---
+ .../Control/Power/RestoreDelay.interface.yaml | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+ create mode 100644 yaml/xyz/openbmc_project/Control/Power/RestoreDelay.interface.yaml
+
+diff --git a/yaml/xyz/openbmc_project/Control/Power/RestoreDelay.interface.yaml b/yaml/xyz/openbmc_project/Control/Power/RestoreDelay.interface.yaml
+new file mode 100644
+index 00000000..55ee80a7
+--- /dev/null
++++ b/yaml/xyz/openbmc_project/Control/Power/RestoreDelay.interface.yaml
+@@ -0,0 +1,11 @@
++description: >
++ Implement to specify power transition behavior on a BMC reset.
++ The implementation based on restore policy and set a delay time
++ for power restore.
++
++properties:
++ - name: PowerRestoreDelay
++ type: uint16
++ description: >
++ The delay time for power restore.
++ Power Restore Delay is NOT applied on power policy is "Always Off"
+--
+2.35.1
+
diff --git a/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0013-Add-ErrConfig.yaml-interface-for-processor-error-config.patch b/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0013-Add-ErrConfig.yaml-interface-for-processor-error-config.patch
new file mode 100644
index 0000000000..41c3fcd8b4
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0013-Add-ErrConfig.yaml-interface-for-processor-error-config.patch
@@ -0,0 +1,86 @@
+From 6c57cb9553a153d5fe827de80d359397c60194ed Mon Sep 17 00:00:00 2001
+From: Kuiying Wang <kuiying.wang@intel.com>
+Date: Thu, 30 Aug 2018 16:22:43 +0800
+Subject: [PATCH] Add ErrConfig.yaml interface for processor error
+ configuration.
+
+Which provide 3 properties:
+ ResetCfg
+ type: byte
+ description: >
+ Reset Configuration
+ [0]: CATERR Reset Enabled
+ 0b: Disabled
+ 1b: Enabled
+ [1]: ERR2 Reset Enabled
+ 0b: Disabled
+ 1b: Enabled
+ [7:2]: Reserved
+ ResetErrorOccurrenceCounts
+ type: byte
+ description: >
+ Reset Error Occurrence Counts
+ [0]: Reset CPU Error Counts
+ 0b: Keep CPU Error Counts
+ 1b: Reset all CPU Error Counts to zero
+ [7:1]: Reserved
+ CATERRStatus
+ type: array[byte]
+ description: >
+ For all CPUs including the non-legacy socket CPU
+ CPU CATERR (Core Error) occurrence
+ [5:0]: Error Occurrence Count
+ [7:6]: CPU Status
+ 00b: Disabled
+ 01b: Enabled
+ 11b: Not Present
+
+Change-Id: Ibc5a7a5e15c998e56c04e23b1043d99243a91171
+Signed-off-by: Kuiying Wang <kuiying.wang@intel.com>
+---
+ .../Processor/ErrConfig.interface.yaml | 33 +++++++++++++++++++
+ 1 file changed, 33 insertions(+)
+ create mode 100644 yaml/xyz/openbmc_project/Control/Processor/ErrConfig.interface.yaml
+
+diff --git a/yaml/xyz/openbmc_project/Control/Processor/ErrConfig.interface.yaml b/yaml/xyz/openbmc_project/Control/Processor/ErrConfig.interface.yaml
+new file mode 100644
+index 00000000..23042633
+--- /dev/null
++++ b/yaml/xyz/openbmc_project/Control/Processor/ErrConfig.interface.yaml
+@@ -0,0 +1,33 @@
++description: >
++ This defines processor error configuration.
++properties:
++ - name: ResetCfg
++ type: byte
++ description: >
++ Reset Configuration
++ [0]: CATERR Reset Enabled
++ 0b: Disabled
++ 1b: Enabled
++ [1]: ERR2 Reset Enabled
++ 0b: Disabled
++ 1b: Enabled
++ [7:2]: Reserved
++
++ - name: ResetErrorOccurrenceCounts
++ type: byte
++ description: >
++ Reset Error Occurrence Counts
++ [0]: Reset CPU Error Counts
++ 0b: Keep CPU Error Counts
++ 1b: Reset all CPU Error Counts to zero
++ [7:1]: Reserved
++ - name: CATERRStatus
++ type: array[byte]
++ description: >
++ For all CPUs including the non-legacy socket CPU
++ CPU CATERR (Core Error) occurrence
++ [5:0]: Error Occurrence Count
++ [7:6]: CPU Status
++ 00b: Disabled
++ 01b: Enabled
++ 11b: Not Present
+--
+2.35.1
+
diff --git a/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0024-Add-the-pre-timeout-interrupt-defined-in-IPMI-spec.patch b/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0024-Add-the-pre-timeout-interrupt-defined-in-IPMI-spec.patch
new file mode 100644
index 0000000000..4aa6f8448e
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0024-Add-the-pre-timeout-interrupt-defined-in-IPMI-spec.patch
@@ -0,0 +1,57 @@
+From d6fff68710c965741d92fd02fe473a773fcf28cd Mon Sep 17 00:00:00 2001
+From: Ren Yu <yux.ren@intel.com>
+Date: Fri, 24 May 2019 14:55:10 +0800
+Subject: [PATCH] Add the pre-timeout interrupt defined in IPMI spec
+
+The IPMI watchdog pre-timeout interrupt is used to set the different
+pre-timeout interrupt source. Add them as a dbus property,
+IPMI set/get watchdog commands will use it.
+
+Signed-off-by: Ren Yu <yux.ren@intel.com>
+---
+ .../State/Watchdog.interface.yaml | 22 +++++++++++++++++++
+ 1 file changed, 22 insertions(+)
+
+diff --git a/yaml/xyz/openbmc_project/State/Watchdog.interface.yaml b/yaml/xyz/openbmc_project/State/Watchdog.interface.yaml
+index 556dca10..5252c4ef 100644
+--- a/yaml/xyz/openbmc_project/State/Watchdog.interface.yaml
++++ b/yaml/xyz/openbmc_project/State/Watchdog.interface.yaml
+@@ -33,6 +33,11 @@ properties:
+ description: >
+ The action the watchdog should perform when it expires.
+ default: "HardReset"
++ - name: PreTimeoutInterrupt
++ type: enum[self.PreTimeoutInterruptAction]
++ description: >
++ The BMC generates the selected interrupt before the timer expires.
++ default: 'None'
+ - name: Interval
+ type: uint64
+ description: >
+@@ -73,6 +78,23 @@ enumerations:
+ description: >
+ Perform a power cycle of the system.
+
++ - name: PreTimeoutInterruptAction
++ description: >
++ The type of PreTimeout Interrupt.
++ values:
++ - name: 'None'
++ description: >
++ Do nothing.
++ - name: 'SMI'
++ description: >
++ SMI.
++ - name: 'NMI'
++ description: >
++ NMI / Diagnostic Interrupt.
++ - name: 'MI'
++ description: >
++ Messaging Interrupt.
++
+ - name: TimerUse
+ description: >
+ The type of timer use.
+--
+2.35.1
+
diff --git a/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0025-Add-PreInterruptFlag-properity-in-DBUS.patch b/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0025-Add-PreInterruptFlag-properity-in-DBUS.patch
new file mode 100644
index 0000000000..1d62a0d338
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0025-Add-PreInterruptFlag-properity-in-DBUS.patch
@@ -0,0 +1,39 @@
+From 410654c9e72f979cb3fedd495408ca389658b69b Mon Sep 17 00:00:00 2001
+From: Ren Yu <yux.ren@intel.com>
+Date: Mon, 29 Jul 2019 10:51:12 +0800
+Subject: [PATCH] Add PreInterruptFlag properity in DBUS.
+
+PreTimeoutInterruptOccurFlag in DBUS would be set 'true'
+when watchdog pre-timeout interrupt occurred.
+
+Tested:
+Enable command(raw 0x06 0x31) that get message flag
+can set right bit about watchdog,
+need record PreTimeoutInterruptOccurFlag
+at xyz.openbmmc_project.State.Watchdog when watchdog
+pre-timeout interrupt occurred.
+
+Signed-off-by: Ren Yu <yux.ren@intel.com>
+---
+ yaml/xyz/openbmc_project/State/Watchdog.interface.yaml | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/yaml/xyz/openbmc_project/State/Watchdog.interface.yaml b/yaml/xyz/openbmc_project/State/Watchdog.interface.yaml
+index 5252c4ef..5952eda9 100644
+--- a/yaml/xyz/openbmc_project/State/Watchdog.interface.yaml
++++ b/yaml/xyz/openbmc_project/State/Watchdog.interface.yaml
+@@ -59,6 +59,11 @@ properties:
+ description: >
+ The timer user at the time of expiration.
+ default: "Reserved"
++ - name: PreTimeoutInterruptOccurFlag
++ type: boolean
++ description: >
++ PreTimeoutInterruptOccurFlag that preTimeoutInterrupt action occurred.
++ default: false
+
+ enumerations:
+ - name: Action
+--
+2.35.1
+
diff --git a/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0026-Add-StandbySpare-support-for-software-inventory.patch b/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0026-Add-StandbySpare-support-for-software-inventory.patch
new file mode 100644
index 0000000000..e87c83992f
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0026-Add-StandbySpare-support-for-software-inventory.patch
@@ -0,0 +1,55 @@
+From e981c37d6813b74ec90445d9bb28eb62fc3d1d4d Mon Sep 17 00:00:00 2001
+From: Vikram Bodireddy <vikram.bodireddy@intel.com>
+Date: Wed, 15 Jan 2020 10:01:04 +0800
+Subject: [PATCH] Add StandbySpare support for software inventory
+
+Add support to allow update for active / recovery
+regions of specified firmware. This update enables
+the backend modules to advertise whether the
+software object is active or recovery (StandbySpare)
+image.
+
+Signed-off-by: Vikram Bodireddy <vikram.bodireddy@intel.com>
+---
+ .../Software/Activation.interface.yaml | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+diff --git a/yaml/xyz/openbmc_project/Software/Activation.interface.yaml b/yaml/xyz/openbmc_project/Software/Activation.interface.yaml
+index 7153c415..6cf194bd 100644
+--- a/yaml/xyz/openbmc_project/Software/Activation.interface.yaml
++++ b/yaml/xyz/openbmc_project/Software/Activation.interface.yaml
+@@ -28,12 +28,20 @@ enumerations:
+ - name: Activating
+ description: >
+ The Software.Version is in the process of being Activated.
++ - name: ActivatingAsStandbySpare
++ description: >
++ The Software.Version is in the process of being processed
++ as StandbySpare.
+ - name: Active
+ description: >
+ The Software.Version is currently Active.
+ - name: Failed
+ description: >
+ The Software.Version failed during or after Activation.
++ - name: StandbySpare
++ description: >
++ The Software.Version is part of a redundancy set and awaits
++ a failover or external action to activate.
+ - name: Staged
+ description: >
+ The Software.Version is currently in staged flash area.
+@@ -52,6 +60,10 @@ enumerations:
+ - name: Active
+ description: >
+ The Software.Version has been requested for Activation.
++ - name: StandbySpare
++ description: >
++ The Software.Version has been requested to be enabled as
++ StandbySpare.
+
+ # TODO: Specify "EAGAIN" type error when requested is unable to be acted on
+ # due to current system state. Currently, sdbusplus does not support
+--
+2.35.1
+
diff --git a/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0028-MCTP-Daemon-D-Bus-interface-definition.patch b/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0028-MCTP-Daemon-D-Bus-interface-definition.patch
new file mode 100644
index 0000000000..511707ae44
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0028-MCTP-Daemon-D-Bus-interface-definition.patch
@@ -0,0 +1,402 @@
+From 54d901a02737c62f9695c940e96fd37d8db496f4 Mon Sep 17 00:00:00 2001
+From: "Kowalski, Mariusz" <mariusz.kowalski@intel.com>
+Date: Thu, 27 Feb 2020 15:48:56 +0100
+Subject: [PATCH] MCTP Daemon D-Bus interface definition.
+
+This interface definition was created on base of the MCTP design
+proposed in this document:
+https://gerrit.openbmc-project.xyz/c/openbmc/docs/+/28424/9/designs/mctp.md
+
+Signed-off-by: Arun P. Mohanan <arun.p.m@linux.intel.com>
+Signed-off-by: Mariusz Kowalski <mariusz.kowalski@intel.com>
+Signed-off-by: Karol Wachowski <karol.wachowski@intel.com>
+Change-Id: Ida66f8ffcf00003655edcb0fb0112202797b8e1a
+---
+ .../openbmc_project/MCTP/Base.interface.yaml | 227 ++++++++++++++++++
+ .../MCTP/Binding/PCIe.interface.yaml | 29 +++
+ .../MCTP/Binding/SMBus.interface.yaml | 17 ++
+ .../MCTP/BusOwner.interface.yaml | 17 ++
+ .../MCTP/Endpoint.interface.yaml | 5 +
+ .../MCTP/SupportedMessageTypes.interface.yaml | 36 +++
+ 6 files changed, 331 insertions(+)
+ create mode 100644 yaml/xyz/openbmc_project/MCTP/Base.interface.yaml
+ create mode 100644 yaml/xyz/openbmc_project/MCTP/Binding/PCIe.interface.yaml
+ create mode 100644 yaml/xyz/openbmc_project/MCTP/Binding/SMBus.interface.yaml
+ create mode 100644 yaml/xyz/openbmc_project/MCTP/BusOwner.interface.yaml
+ create mode 100644 yaml/xyz/openbmc_project/MCTP/SupportedMessageTypes.interface.yaml
+
+diff --git a/yaml/xyz/openbmc_project/MCTP/Base.interface.yaml b/yaml/xyz/openbmc_project/MCTP/Base.interface.yaml
+new file mode 100644
+index 00000000..9438551e
+--- /dev/null
++++ b/yaml/xyz/openbmc_project/MCTP/Base.interface.yaml
+@@ -0,0 +1,227 @@
++description: >
++ Mandatory interface for each instance of the MCTP Daemon to expose
++ the base MCTP daemon and medium type interfaces.
++
++methods:
++ - name: SendMctpMessagePayload
++ description: >
++ Sends message over MCTP interface
++ parameters:
++ - name: DestinationEID
++ type: byte
++ description: >
++ Destination Endpoint ID. The logical address used to route MCTP
++ messages to a specific MCTP endpoint.
++ - name: MsgTag
++ type: byte
++ description: >
++ Message tag. Field that, along with the Source Endpoint IDs and the
++ Tag Owner (TO) field, identifies a unique message at the MCTP
++ transport level.
++ - name: TagOwner
++ type: boolean
++ description: >
++ Tag Owner bit identifies whether the message tag was originated by
++ the endpoint that is the source of the message or by the endpoint
++ that is the destination of the message.
++ - name: Payload
++ type: array[byte]
++ description: Payload of message.
++ returns:
++ - name: Status
++ type: byte
++ description: 0 - if success
++ errors:
++ - xyz.openbmc_project.Common.Error.Timeout
++ - xyz.openbmc_project.Common.Error.InvalidArgument
++ - xyz.openbmc_project.Common.Error.InternalFailure
++
++ - name: SendMctpMessageFileDescriptor
++ description: >
++ Sends message over MCTP interface
++ parameters:
++ - name: DestinationEID
++ type: byte
++ description: >
++ Destination Endpoint ID. The logical address used to route MCTP
++ messages to a specific MCTP endpoint.
++ - name: MsgTag
++ type: byte
++ description: >
++ Message tag. Field that, along with the Source Endpoint IDs and the
++ Tag Owner (TO) field, identifies a unique message at the MCTP
++ transport level.
++ - name: TagOwner
++ type: boolean
++ description: >
++ Tag Owner bit identifies whether the message tag was originated by
++ the endpoint that is the source of the message or by the endpoint
++ that is the destination of the message.
++ - name: FileDescriptor
++ type: unixfd
++ description: File descriptor of message.
++ returns:
++ - name: Status
++ type: byte
++ description: 0 - if success
++ errors:
++ - xyz.openbmc_project.Common.Error.Timeout
++ - xyz.openbmc_project.Common.Error.InvalidArgument
++ - xyz.openbmc_project.Common.Error.InternalFailure
++
++signals:
++ - name: MessageReceivedSignal
++ description: >
++ Signal indicating upper layers about arrival of a MCTP message.
++ properties:
++ - name: MessageType
++ type: enum[self.MessageTypes]
++ description: >
++ Defines the values for the Message Type field for different message
++ types transported through MCTP.
++ - name: SrcEid
++ type: byte
++ description: >
++ Source Endpoint ID. The logical address used to route MCTP messages
++ to a specific MCTP endpoint.
++ - name: MsgTag
++ type: byte
++ description: >
++ Message tag. Field that, along with the Source Endpoint IDs and the
++ Tag Owner (TO) field, identifies a unique message at the MCTP
++ transport level.
++ - name: TagOwner
++ type: boolean
++ description: >
++ Tag Owner bit identifies whether the message tag was originated by
++ the endpoint that is the source of the message or by the endpoint
++ that is the destination of the message.
++ - name: Payload
++ type: array[byte]
++ description: Payload of message.
++
++properties:
++ - name: Eid
++ type: byte
++ description: >
++ Endpoint ID. The logical address used to route MCTP messages to a
++ specific MCTP endpoint.
++
++ - name: BindingID
++ type: enum[self.BindingTypes]
++
++ - name: BindingMediumID
++ type: enum[self.MctpPhysicalMediumIdentifiers]
++
++ - name: StaticEid
++ type: boolean
++ description: Support for statically/dynamicly allocated IDs
++
++ - name: BindingMode
++ type: enum[self.BindingModeTypes]
++ description: Bus Owner / Endpoint / Bridge
++
++enumerations:
++ - name: BindingTypes
++ description: >
++ All other values than described are reserved.
++ values:
++ - name: MctpOverSmbus
++ - name: MctpOverPcieVdm
++ - name: MctpOverUsb
++ description: Reserved for MCTP over USB
++ - name: MctpOverKcs
++ - name: MctpOverSerial
++ - name: VendorDefined
++
++ - name: MctpPhysicalMediumIdentifiers
++ description: >
++ Identifies MCTP physical medium identifiers. see DSP0239.
++ values:
++ - name: Smbus
++ descritpion: SMBus 2.0 100 kHz compatible
++ - name: SmbusI2c
++ descritpion: SMBus 2.0 + I2C 100 kHz compatible
++ - name: I2cCompatible
++ description: I2C 100 kHz compatible (Standard-mode)
++ - name: Smbus3OrI2c400khzCompatible
++ description: SMBus 3.0 or I2C 400 kHz compatible (Fast-mode)
++ - name: Smbus3OrI2c1MhzCompatible
++ description: SMBus 3.0 or I2C 1 MHz compatible (Fast-mode Plus)
++ - name: I2c3Mhz4Compatible
++ description: I2C 3.4 MHz compatible (High-speed mode)
++ - name: Pcie11
++ description: PCIe revision 1.1 compatible
++ - name: Pcie2
++ description: PCIe revision 2.0 compatible
++ - name: Pcie21
++ description: PCIe revision 2.1 compatible
++ - name: Pcie3
++ description: PCIe revision 3.0 compatible
++ - name: Pcie4
++ description: PCIe revision 4.0 compatible
++ - name: Pcie5
++ description: PCIe revision 4.0 compatible
++ - name: PciCompatible
++ description: >
++ PCI compatible (PCI 1.0,2.0,2.1,2.2,2.3,3.0,PCI-X 1.0, PCI-X 2.0)
++ - name: Usb11Compatible
++ description: USB 1.1 compatible
++ - name: Usb20Compatible
++ description: USB 2.0 compatible
++ - name: Usb30Compatible
++ description: USB 3.0 compatible
++ - name: NcSiOverRbt
++ description: >
++ NC-SI over RBT (A physical interface based on RMII as defined in
++ DSP0222)
++ - name: KcsLegacy
++ description: KCS1 / Legacy (Fixed Address Decoding)
++ - name: KcsPci
++ description: KCS1 / PCI (Base Class 0xC0 Subclass 0x01)
++ - name: SerialHostLegacy
++ description: Serial Host2 / Legacy (Fixed Address Decoding)
++ - name: SerialHostPci
++ description: Serial Host2 / PCI (Base Class 0x07 Subclass 0x00)
++ - name: AsynchronousSerial
++ description: Asynchronous Serial (Between MCs and IMDs)
++ - name: I3cSDR
++ description: I3C 12.5 MHz compatible (SDR)
++ - name: I3cHDRDDR
++ description: I3C 25 MHz compatible (HDR-DDR)
++
++ - name: BindingModeTypes
++ values:
++ - name: Endpoint
++ description: >
++ An MCTP communication terminus. An MCTP endpoint is a terminus or
++ origin of MCTP packets or messages. That is, the combined
++ functionality within a physical device that communicates using the
++ MCTP transport protocol and handles MCTP control commands. This
++ includes MCTP-capable management controllers and managed devices.
++ Also referred to in this document as "endpoint".
++ - name: BusOwner
++ description: >
++ The party responsible for managing address assignments (can be
++ logical or physical addresses) on a bus (for example, in MCTP, the
++ bus owner is the party responsible for managing EID assignments for
++ a given bus). A bus owner may also have additional media-specific
++ responsibilities, such as assignment of physical addresses.
++ - name: Bridge
++ description: >
++ An MCTP endpoint that can route MCTP messages not destined for
++ itself that it receives on one interconnect onto another without
++ interpreting them. The ingress and egress media at the bridge may
++ be either homogeneous or heterogeneous. Also referred to in this
++ document as a "bridge".
++
++ - name: MessageTypes
++ values:
++ - name: MctpControl
++ - name: PLDM
++ - name: NCSI
++ - name: Ethernet
++ - name: NVMeMgmtMsg
++ - name: SPDM
++ - name: VDPCI
++ - name: VDIANA
+diff --git a/yaml/xyz/openbmc_project/MCTP/Binding/PCIe.interface.yaml b/yaml/xyz/openbmc_project/MCTP/Binding/PCIe.interface.yaml
+new file mode 100644
+index 00000000..1bd28818
+--- /dev/null
++++ b/yaml/xyz/openbmc_project/MCTP/Binding/PCIe.interface.yaml
+@@ -0,0 +1,29 @@
++description: >
++ Interface exposed by MCTP daemon for PCIe binding
++
++properties:
++ - name: DiscoveredFlag
++ type: enum[self.DiscoveryFlags]
++ description: >
++ Each endpoint (except the bus owner) on the PCIe bus maintains an
++ internal flag called the Discovered flag. The flag is set to the
++ discovered state when the Set Endpoint ID command is received.
++
++ - name: BDF
++ type: uint16
++ description: >
++ Byte 1 [7:0] Bus number
++ Byte 2 [7:3] Device number [2:0] Function Number
++
++enumerations:
++ - name: DiscoveryFlags
++ description: >
++ The Prepare for Endpoint Discovery message causes each recipient
++ endpoint on the PCIe bus to set their respective Discovered flag to
++ the undiscovered state. For the Prepare for Endpoint Discovery request
++ message, the routing in the physical transport header should be set to
++ 011b (Broadcast from Root Complex).
++ values:
++ - name: Discovered
++ - name: Undiscovered
++ - name: NotApplicable
+diff --git a/yaml/xyz/openbmc_project/MCTP/Binding/SMBus.interface.yaml b/yaml/xyz/openbmc_project/MCTP/Binding/SMBus.interface.yaml
+new file mode 100644
+index 00000000..9219ad02
+--- /dev/null
++++ b/yaml/xyz/openbmc_project/MCTP/Binding/SMBus.interface.yaml
+@@ -0,0 +1,17 @@
++description: >
++ Interface exposed by MCTP daemon for SMBus binding
++
++properties:
++ - name: ArpMasterSupport
++ type: boolean
++ description: >
++ The SMBus binding can also run ARP Master protocol and
++ assign SMBus addresses to the devices on the bus.
++
++ - name: BusNumber
++ type: byte
++ description: I2C bus number of the medium used
++
++ - name: SlaveAddress
++ type: byte
++ description: Slave address to be used for this medium
+diff --git a/yaml/xyz/openbmc_project/MCTP/BusOwner.interface.yaml b/yaml/xyz/openbmc_project/MCTP/BusOwner.interface.yaml
+new file mode 100644
+index 00000000..d46298ed
+--- /dev/null
++++ b/yaml/xyz/openbmc_project/MCTP/BusOwner.interface.yaml
+@@ -0,0 +1,17 @@
++description: >
++ Interface exposed by MCTP root object, when executing in Bus Owner mode.
++
++properties:
++ - name: EidPool
++ type: array[struct[byte, byte]]
++ description: >
++ Pool of allowed EIDs to be used.
++ EID pool of 10-100 can be specified as {{10,100}}.
++
++ - name: TopMostBusOwner
++ type: boolean
++ description: To indicate whether BMC is topmost Bus Owner
++
++ - name: OwnEidPool
++ type: boolean
++ description: Indicates Eid pool is managed by self
+diff --git a/yaml/xyz/openbmc_project/MCTP/Endpoint.interface.yaml b/yaml/xyz/openbmc_project/MCTP/Endpoint.interface.yaml
+index 8cb0f133..abb3ac93 100644
+--- a/yaml/xyz/openbmc_project/MCTP/Endpoint.interface.yaml
++++ b/yaml/xyz/openbmc_project/MCTP/Endpoint.interface.yaml
+@@ -6,6 +6,11 @@ description: >
+ MCTP-capable management controllers and managed devices.
+
+ properties:
++ - name: Mode
++ type: enum[xyz.openbmc_project.MCTP.Base.BindingModeTypes]
++ description: >
++ Endpoint / BusOwner / Bridge
++
+ - name: NetworkId
+ type: size
+ description: >
+diff --git a/yaml/xyz/openbmc_project/MCTP/SupportedMessageTypes.interface.yaml b/yaml/xyz/openbmc_project/MCTP/SupportedMessageTypes.interface.yaml
+new file mode 100644
+index 00000000..fa447ee6
+--- /dev/null
++++ b/yaml/xyz/openbmc_project/MCTP/SupportedMessageTypes.interface.yaml
+@@ -0,0 +1,36 @@
++description:
++ Interface used to represent the supported MCTP message types.
++ This will be exposed by all MCTP endpoints.
++
++properties:
++ - name: MctpControl
++ type: boolean
++ description: Indicates support availability
++
++ - name: PLDM
++ type: boolean
++ description: Indicates support availability
++
++ - name: NCSI
++ type: boolean
++ description: Indicates support availability
++
++ - name: Ethernet
++ type: boolean
++ description: Indicates support availability
++
++ - name: NVMeMgmtMsg
++ type: boolean
++ description: Indicates support availability
++
++ - name: SPDM
++ type: boolean
++ description: Indicates support availability
++
++ - name: VDPCI
++ type: boolean
++ description: Indicates support availability
++
++ - name: VDIANA
++ type: boolean
++ description: Indicates support availability
+--
+2.35.1
+
diff --git a/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0029-Add-D-Bus-interfaces-for-PLDM-FW-update.patch b/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0029-Add-D-Bus-interfaces-for-PLDM-FW-update.patch
new file mode 100644
index 0000000000..eec88dd4a0
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0029-Add-D-Bus-interfaces-for-PLDM-FW-update.patch
@@ -0,0 +1,494 @@
+From 35f98cd01cfe9e7bb6101b9dd0891afda62ee55f Mon Sep 17 00:00:00 2001
+From: "Gade-RajasekharReddy@" <Gade-RajasekharReddy@>
+Date: Wed, 16 Sep 2020 03:19:41 +0530
+Subject: [PATCH] Add D-Bus interfaces for PLDM FW update
+
+Added PLDM FW update base interface, which exposes a method. Using
+this method PLDM FWU can be initiated.
+
+Added interfaces for exposing PLDM FW update inventory info.
+
+Test
+supporting files are created for the yaml files.
+
+Signed-off-by: Gade-RajasekharReddy@ <raja.sekhar.reddy.gade@linux.intel.com>
+---
+ .../PLDM/FWU/ACPIDescriptor.interface.yaml | 14 +++
+ ...ActiveComponentImageSetInfo.interface.yaml | 9 ++
+ .../FWU/ActiveComponentInfo.interface.yaml | 55 ++++++++++
+ .../CapabilitiesDuringUpdate.interface.yaml | 32 ++++++
+ .../ComponentActivationMethods.interface.yaml | 40 +++++++
+ .../PLDM/FWU/FWUBase.interface.yaml | 21 ++++
+ .../PLDM/FWU/IANADescriptor.interface.yaml | 10 ++
+ .../PLDM/FWU/PCIDescriptor.interface.yaml | 30 +++++
+ ...endingComponentImageSetInfo.interface.yaml | 10 ++
+ .../FWU/PendingComponentInfo.interface.yaml | 40 +++++++
+ .../PLDM/FWU/PnPDescriptor.interface.yaml | 14 +++
+ yaml/xyz/openbmc_project/PLDM/FWU/README.md | 103 ++++++++++++++++++
+ 12 files changed, 378 insertions(+)
+ create mode 100644 yaml/xyz/openbmc_project/PLDM/FWU/ACPIDescriptor.interface.yaml
+ create mode 100644 yaml/xyz/openbmc_project/PLDM/FWU/ActiveComponentImageSetInfo.interface.yaml
+ create mode 100644 yaml/xyz/openbmc_project/PLDM/FWU/ActiveComponentInfo.interface.yaml
+ create mode 100644 yaml/xyz/openbmc_project/PLDM/FWU/CapabilitiesDuringUpdate.interface.yaml
+ create mode 100644 yaml/xyz/openbmc_project/PLDM/FWU/ComponentActivationMethods.interface.yaml
+ create mode 100644 yaml/xyz/openbmc_project/PLDM/FWU/FWUBase.interface.yaml
+ create mode 100644 yaml/xyz/openbmc_project/PLDM/FWU/IANADescriptor.interface.yaml
+ create mode 100644 yaml/xyz/openbmc_project/PLDM/FWU/PCIDescriptor.interface.yaml
+ create mode 100644 yaml/xyz/openbmc_project/PLDM/FWU/PendingComponentImageSetInfo.interface.yaml
+ create mode 100644 yaml/xyz/openbmc_project/PLDM/FWU/PendingComponentInfo.interface.yaml
+ create mode 100644 yaml/xyz/openbmc_project/PLDM/FWU/PnPDescriptor.interface.yaml
+ create mode 100644 yaml/xyz/openbmc_project/PLDM/FWU/README.md
+
+diff --git a/yaml/xyz/openbmc_project/PLDM/FWU/ACPIDescriptor.interface.yaml b/yaml/xyz/openbmc_project/PLDM/FWU/ACPIDescriptor.interface.yaml
+new file mode 100644
+index 00000000..e225bade
+--- /dev/null
++++ b/yaml/xyz/openbmc_project/PLDM/FWU/ACPIDescriptor.interface.yaml
+@@ -0,0 +1,14 @@
++description : >
++ This interface has ACPI descriptor properties.
++
++properties :
++
++ - name : ACPIVendorID
++ type : string
++ description: >
++ Property containing ACPI Vendor ID.
++
++ - name : ACPIProductIdentifier
++ type : string
++ description: >
++ Property containing ACPI Product Identifier.
+diff --git a/yaml/xyz/openbmc_project/PLDM/FWU/ActiveComponentImageSetInfo.interface.yaml b/yaml/xyz/openbmc_project/PLDM/FWU/ActiveComponentImageSetInfo.interface.yaml
+new file mode 100644
+index 00000000..94115a33
+--- /dev/null
++++ b/yaml/xyz/openbmc_project/PLDM/FWU/ActiveComponentImageSetInfo.interface.yaml
+@@ -0,0 +1,9 @@
++description : >
++ This interface has the PLDM FWU active component image set properties.
++
++properties :
++
++ - name : ActiveComponentImageSetVersionString
++ type : string
++ description: >
++ String describing the active component image set version.
+diff --git a/yaml/xyz/openbmc_project/PLDM/FWU/ActiveComponentInfo.interface.yaml b/yaml/xyz/openbmc_project/PLDM/FWU/ActiveComponentInfo.interface.yaml
+new file mode 100644
+index 00000000..77a75669
+--- /dev/null
++++ b/yaml/xyz/openbmc_project/PLDM/FWU/ActiveComponentInfo.interface.yaml
+@@ -0,0 +1,55 @@
++description: >
++ This interface has the component entries for all of the updatable
++ active components that reside on the FD.
++
++properties:
++
++ - name: ComponentClassification
++ type: uint16
++ description: >
++ Vendor specific component classification information.
++ Special values: 0x0000, 0xFFFF are reserved.
++
++ - name: ComponentIdentifier
++ type: uint16
++ description: >
++ FD vendor selected unique value to distinguish between
++ component images.
++
++ - name: ComponentClassificationIndex
++ type: byte
++ description: >
++ Used to distinguish identical components that have the same
++ classification and identifier that can use the same component
++ image but the images are stored in different locations in the FD.
++
++ - name: ActiveComponentComparisonStamp
++ type: uint32
++ description: >
++ Optional Firmware component comparison stamp that is currently
++ active. If the firmware component does not provide a component
++ comparison stamp, this value should be set to 0x00000000.
++
++ - name: ActiveComponentReleaseDate
++ type: string
++ description: >
++ Containing the date corresponding to the component version
++ level being reported – Format YYYYMMDD.
++ If the firmware component does not provide a date, this string
++ shall be empty.
++
++ - name: ComponentAutoApply
++ type: boolean
++ description: >
++ Firmware Device performs an ‘auto-apply’ during transfer
++ phase and apply step will be completed immediately if this
++ property is true.
++ Firmware Device will execute an operation during the APPLY
++ state that will include migrating the new component image to its
++ final non-volatile storage destination if this property is
++ false.
++
++ - name: ActiveComponentVersionString
++ type: string
++ description: >
++ String describing the active component version.
+diff --git a/yaml/xyz/openbmc_project/PLDM/FWU/CapabilitiesDuringUpdate.interface.yaml b/yaml/xyz/openbmc_project/PLDM/FWU/CapabilitiesDuringUpdate.interface.yaml
+new file mode 100644
+index 00000000..36560ff0
+--- /dev/null
++++ b/yaml/xyz/openbmc_project/PLDM/FWU/CapabilitiesDuringUpdate.interface.yaml
+@@ -0,0 +1,32 @@
++description : >
++ This interface describes the capabilities during update.
++
++properties :
++
++ - name : UpdateModeRestrictions
++ type : boolean
++ description: >
++ This property tells whether update mode restrictions are
++ supported or not.
++
++ - name : PartialUpdates
++ type : boolean
++ description: >
++ This property tells whether partial updates are supported or not.
++
++ - name : HostFunctionalityDuringFirmwareUpdate
++ type : boolean
++ description: >
++ This property tells whether the host device functionality
++ during firmware update is reduced or not.
++
++ - name : ComponentUpdateFailureRetryCapability
++ type : boolean
++ description: >
++ This property shows the component update failure retry capability.
++
++ - name : ComponentUpdateFailureRecoveryCapability
++ type : boolean
++ description: >
++ This property shows the component update failure recovery
++ capability.
+diff --git a/yaml/xyz/openbmc_project/PLDM/FWU/ComponentActivationMethods.interface.yaml b/yaml/xyz/openbmc_project/PLDM/FWU/ComponentActivationMethods.interface.yaml
+new file mode 100644
+index 00000000..d5ec47cb
+--- /dev/null
++++ b/yaml/xyz/openbmc_project/PLDM/FWU/ComponentActivationMethods.interface.yaml
+@@ -0,0 +1,40 @@
++description: >
++ This interface has the component activation methods.
++
++properties:
++
++ - name: ACPowerCycle
++ type: boolean
++ description: >
++ Property that tells whether AC power cycle is an activation
++ method or not.
++
++ - name: DCPowerCycle
++ type: boolean
++ description: >
++ Property that tells whether DC power cycle is an activation
++ method or not.
++
++ - name: SystemReboot
++ type: boolean
++ description: >
++ Property that tells whether System reboot is an activation
++ method or not.
++
++ - name: MediumSpecificReset
++ type: boolean
++ description: >
++ Property that tells whether Medium-specific reset is an
++ activation method or not.
++
++ - name: SelfContained
++ type: boolean
++ description: >
++ Property that tells whether Self-Contained option is activation
++ method or not.
++
++ - name: Automatic
++ type: boolean
++ description: >
++ Property that tells whether the component can be activated
++ automatically once apply completes.
+diff --git a/yaml/xyz/openbmc_project/PLDM/FWU/FWUBase.interface.yaml b/yaml/xyz/openbmc_project/PLDM/FWU/FWUBase.interface.yaml
+new file mode 100644
+index 00000000..2ba15e26
+--- /dev/null
++++ b/yaml/xyz/openbmc_project/PLDM/FWU/FWUBase.interface.yaml
+@@ -0,0 +1,21 @@
++description: >
++ This interface provides a method to initiate the PLDM FW update.
++
++methods:
++ - name: StartFWUpdate
++ description: >
++ This method initiates the PLDM FW update.
++ parameters:
++ - name: filePath
++ type: string
++ description: >
++ PLDM FW update package path.
++ returns:
++ - name: status
++ type: byte
++ description: >
++ PLDM FW update status.
++ errors:
++ - xyz.openbmc_project.Common.Error.NotAllowed
++ - xyz.openbmc_project.Common.Error.InvalidArgument
++ - xyz.openbmc_project.Common.Error.ResourceNotFound
+diff --git a/yaml/xyz/openbmc_project/PLDM/FWU/IANADescriptor.interface.yaml b/yaml/xyz/openbmc_project/PLDM/FWU/IANADescriptor.interface.yaml
+new file mode 100644
+index 00000000..c013955a
+--- /dev/null
++++ b/yaml/xyz/openbmc_project/PLDM/FWU/IANADescriptor.interface.yaml
+@@ -0,0 +1,10 @@
++description : >
++ This interface has device identification info, in which IANA
++ Enterprise ID is used as descriptor.
++
++properties :
++
++ - name : IANAEnterpriseID
++ type : string
++ description: >
++ Property containing the IANA Enterprise ID.
+diff --git a/yaml/xyz/openbmc_project/PLDM/FWU/PCIDescriptor.interface.yaml b/yaml/xyz/openbmc_project/PLDM/FWU/PCIDescriptor.interface.yaml
+new file mode 100644
+index 00000000..8d758ed5
+--- /dev/null
++++ b/yaml/xyz/openbmc_project/PLDM/FWU/PCIDescriptor.interface.yaml
+@@ -0,0 +1,30 @@
++description : >
++ This interface has device identification info,in which PCI Vendor ID
++ is used as descriptor.
++
++properties :
++
++ - name : PCIVendorID
++ type : string
++ description: >
++ Property containing the PCI Vendor ID.
++
++ - name : PCIDeviceID
++ type : string
++ description: >
++ Property containing the PCI Device ID.
++
++ - name : PCISubsystemVendorID
++ type : string
++ description: >
++ Property containing the PCI Subsystem Vendor ID.
++
++ - name : PCISubsystemID
++ type : string
++ description: >
++ Property containing the PCI Subsystem ID.
++
++ - name : PCIRevisionID
++ type : string
++ description: >
++ Property containing the PCI Revision ID.
+diff --git a/yaml/xyz/openbmc_project/PLDM/FWU/PendingComponentImageSetInfo.interface.yaml b/yaml/xyz/openbmc_project/PLDM/FWU/PendingComponentImageSetInfo.interface.yaml
+new file mode 100644
+index 00000000..3861572d
+--- /dev/null
++++ b/yaml/xyz/openbmc_project/PLDM/FWU/PendingComponentImageSetInfo.interface.yaml
+@@ -0,0 +1,10 @@
++description : >
++ This interface has the PLDM FWU pending component image set
++ properties.
++
++properties :
++
++ - name : PendingComponentImageSetVersionString
++ type : string
++ description: >
++ String describing the pending component image set version.
+diff --git a/yaml/xyz/openbmc_project/PLDM/FWU/PendingComponentInfo.interface.yaml b/yaml/xyz/openbmc_project/PLDM/FWU/PendingComponentInfo.interface.yaml
+new file mode 100644
+index 00000000..59a2ad8d
+--- /dev/null
++++ b/yaml/xyz/openbmc_project/PLDM/FWU/PendingComponentInfo.interface.yaml
+@@ -0,0 +1,40 @@
++description: >
++ This interface has the component entries for all of the pending
++ components that reside on the FD.
++
++properties:
++
++ - name: PendingComponentComparisonStamp
++ type: uint32
++ description: >
++ Optional firmware component comparison stamp that is pending
++ activation. This field, and all other pending component fields,
++ are valid once the firmware device has received the
++ ActivateFirmware command to prepare the firmware component for
++ activation, but the activation method requires further action
++ to enable the pending image to become the actively running code
++ image.
++ If no pending firmware component exists, this value shall be
++ set to 0x00000000
++
++ - name: PendingComponentReleaseDate
++ type: string
++ description: >
++ Eight byte field containing the date corresponding to the
++ component version level being reported – Format YYYYMMDD.
++ If no pending firmware component exists, this string
++ shall be empty.
++
++
++ - name: PendingComponentVersionString
++ type: string
++ description: >
++ Firmware component version, which is pending activation. The
++ version reported here should be the one that will become active
++ on the next initialization or activation of the component. The
++ pending component version value may be same as the active
++ component version. Contains a variable type string describing
++ the pending component version. Refer to
++ PendingComponentComparisonStamp field for additional details.
++ If no pending firmware component exists, this field is zero
++ bytes in length.
+diff --git a/yaml/xyz/openbmc_project/PLDM/FWU/PnPDescriptor.interface.yaml b/yaml/xyz/openbmc_project/PLDM/FWU/PnPDescriptor.interface.yaml
+new file mode 100644
+index 00000000..801db6d6
+--- /dev/null
++++ b/yaml/xyz/openbmc_project/PLDM/FWU/PnPDescriptor.interface.yaml
+@@ -0,0 +1,14 @@
++description : >
++ This interface has PnP descriptor properties.
++
++properties :
++
++ - name : PnPVendorID
++ type : string
++ description: >
++ Property containing the PnP Vendor ID.
++
++ - name : PnPProductIdentifier
++ type : string
++ description: >
++ Property containing the PnP Product Identifier.
+diff --git a/yaml/xyz/openbmc_project/PLDM/FWU/README.md b/yaml/xyz/openbmc_project/PLDM/FWU/README.md
+new file mode 100644
+index 00000000..29317393
+--- /dev/null
++++ b/yaml/xyz/openbmc_project/PLDM/FWU/README.md
+@@ -0,0 +1,103 @@
++#PLDM FW Update
++
++##Overview
++
++The PLDM FW update package contains two major sections: the FW package
++header, and the FW package payload. The FW package header is required to
++describe the target device that the package is intended to update and
++the component images that the FW update package contains. The FW
++package payload is the actual FW image which can be used by FW device
++for FW update.
++
++Update Agent(BMC) will send the inventory commands to the all the
++devices which are capable of PLDM FW update and exposes the inventory
++info to the D-Bus. How PLDM FW update package reaches BMC is out of
++scope of PLDM FWU spec 1.0.1. Once BMC receives the FW package, it
++matches the package header with the inventory info, if matches proceeds
++for FW update.
++
++###PLDM FW update interfaces overview and hierarchy
++
++/xyz/openbmc_project/pldm/fwu
++|--xyz.openbmc_project.PLDM.FWU.FWUBase
++|
++|__/xyz/openbmc_project/pldm/fwu/<tid>
++ |
++ |__/xyz/openbmc_project/pldm/fwu/<tid>/deviceDescriptors
++ | |--xyz.openbmc_project.PLDM.FWU.PCIDescriptor
++ | |--xyz.openbmc_project.PLDM.FWU.IANADescriptor
++ | |--xyz.openbmc_project.PLDM.FWU.PnPDescriptor
++ | |--xyz.openbmc_project.PLDM.FWU.ACPIDescriptor
++ |
++ |__/xyz/openbmc_project/pldm/fwu/<tid>/componentImageSetInfo
++ | |--xyz.openbmc_project.PLDM.FWU.ActiveComponentImageSetInfo
++ | |--xyz.openbmc_project.PLDM.FWU.PendingComponentImageSetInfo
++ |
++ |__/xyz/openbmc_project/pldm/fwu/<tid>/componentImageSetInfo/component_<component_no>
++ |--xyz.openbmc_project.PLDM.FWU.ActiveComponentInfo
++ |--xyz.openbmc_project.PLDM.FWU.PendingComponentInfo
++ |--xyz.openbmc_project.PLDM.FWU.ComponentActivationMethods
++ |--xyz.openbmc_project.PLDM.FWU.CapabilitiesDuringUpdate
++
++Note:
++Descriptor for a device shall be defined by one of the following
++(PCI Vendor ID, IANA Enterprise ID, UUID, PnP Vendor ID, or ACPI Vendor
++ID) and the corresponding descriptor`s interface is exposed by the.
++Device Descriptors object.
++No new UUID descriptor incterface is defined as the existing UUID
++interface will be used.
++
++####FW Update Base
++It is exposed by the object `/xyz/openbmc_project/pldm/fwu` with the
++following interface
++1. `xyz.openbmc_project.pldm.FWUBase` exposes a method by which PLDM
++FWU can be initiated.
++
++Each FW update capable device info is exposed by the object
++`/xyz/openbmc_project/pldm/fwu/<tid>`.
++It will have the following objects.
++1. Device Descriptors
++2. Component Image Set Info
++3. Component Image Info (Each component is exposed as an object)
++
++####Device Descriptors
++Device Descriptors are exposed under the object path
++`/xyz/openbmc_project/pldm/fwu/deviceDescriptors` with one of the
++following interfaces.
++1. `xyz.openbmc_project.PLDM.FWU.PCIDescriptor` which exposes the PCI
++device descriptors. If the FD is a PCI device then this interface will
++be exposed by the device descriptors object.
++2. `xyz.openbmc_project.PLDM.FWU.IANADescriptor` which exposes IANA
++descriptor properties. If FD have IANA Enterprise ID as the descriptor
++type then this interface will be exposed by the device descriptors
++object.
++3. `xyz.openbmc_project.PLDM.FWU.PnPDescriptor` which exposes the Pnp
++descriptor properties. If FD have PnP vendor ID as the descriptor
++type then this interface will be exposed by the device descriptors
++object.
++4. `xyz.openbmc_project.PLDM.FWU.ACPIDescriptor` which exposes the ACPI
++descriptor properties. If FD have ACPI vendor ID as the descriptor
++type then this interface will be exposed by the device descriptors
++object.
++
++####Component Image Set Info
++Component Image Set Info is exposed under the object path
++`/xyz/openbmc_project/pldm/fwu/componentImageSetInfo` with the
++following interface.
++1. `xyz.openbmc_project.PLDM.FWU.ActiveComponentImageSetInfo` which
++exposes the active component image set properties.
++2. `xyz.openbmc_project.PLDM.FWU.PendingComponentImageSetInfo` which
++exposes the pending component image set properties.
++
++####Component Image Info
++Component Image Info is exposed under the object path
++`/xyz/openbmc_project/pldm/fwu/componentImageSetInfo/componentInfo_<component_no>'
++with the following interface
++1. `xyz.openbmc_project.PLDM.FWU.ActiveComponentInfo` which exposes the
++component Image properties.
++2. `xyz.openbmc_project.PLDM.FWU.PendingComponentInfo` which exposes the
++component Image properties.
++3. `xyz.openbmc_project.PLDM.FWU.CapabilitiesDuringUpdate` which exposes
++the capabilities of the component during update.
++4. `xyz.openbmc_project.PLDM.FWU.ComponentActivationMethods` which
++exposes the component activation methods.
+--
+2.35.1
+
diff --git a/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0030-Add-PLDM-version-purpose-enumeration.patch b/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0030-Add-PLDM-version-purpose-enumeration.patch
new file mode 100644
index 0000000000..53e0fa4342
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0030-Add-PLDM-version-purpose-enumeration.patch
@@ -0,0 +1,28 @@
+From f67821226e38f3289a103840975fdb232479099f Mon Sep 17 00:00:00 2001
+From: Ayushi Smriti <smriti.ayushi@intel.com>
+Date: Wed, 23 Sep 2020 22:01:25 +0530
+Subject: [PATCH] Add PLDM version purpose enumeration
+
+This change is to add PLDM in enumeration of possible purposes
+of the version to support pldm type version purpose
+
+Change-Id: I7b914d4323bfe44a4e3cd60ed4a627aeceb6b56f
+Signed-off-by: Ayushi Smriti <smriti.ayushi@intel.com>
+---
+ yaml/xyz/openbmc_project/Software/Version.interface.yaml | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/yaml/xyz/openbmc_project/Software/Version.interface.yaml b/yaml/xyz/openbmc_project/Software/Version.interface.yaml
+index 61760102..722c6e31 100644
+--- a/yaml/xyz/openbmc_project/Software/Version.interface.yaml
++++ b/yaml/xyz/openbmc_project/Software/Version.interface.yaml
+@@ -41,3 +41,6 @@ enumerations:
+ - name: PSU
+ description: >
+ The version is a version for a PSU.
++ - name: PLDM
++ description: >
++ The version is a version for PLDM.
+--
+2.35.1
+
diff --git a/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0031-update-meson-build-files-for-control-and-bios.patch b/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0031-update-meson-build-files-for-control-and-bios.patch
new file mode 100644
index 0000000000..87cc4eefa4
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0031-update-meson-build-files-for-control-and-bios.patch
@@ -0,0 +1,149 @@
+From fd18d5d4cd98ba225ae8300ab1531a3462a9e8c5 Mon Sep 17 00:00:00 2001
+From: Zhikui Ren <zhikui.ren@intel.com>
+Date: Tue, 8 Dec 2020 15:08:21 -0800
+Subject: [PATCH] update meson build files for control and bios
+
+Signed-off-by: Zhikui Ren <zhikui.ren@intel.com>
+---
+ .../Control/Power/RestoreDelay/meson.build | 13 +++++++++++++
+ gen/xyz/openbmc_project/Control/Power/meson.build | 14 ++++++++++++++
+ .../Control/Processor/ErrConfig/meson.build | 13 +++++++++++++
+ .../openbmc_project/Control/Processor/meson.build | 13 +++++++++++++
+ .../Inventory/Item/Bios/meson.build | 13 +++++++++++++
+ gen/xyz/openbmc_project/Inventory/Item/meson.build | 14 ++++++++++++++
+ 6 files changed, 80 insertions(+)
+ create mode 100644 gen/xyz/openbmc_project/Control/Power/RestoreDelay/meson.build
+ create mode 100644 gen/xyz/openbmc_project/Control/Processor/ErrConfig/meson.build
+ create mode 100644 gen/xyz/openbmc_project/Inventory/Item/Bios/meson.build
+
+diff --git a/gen/xyz/openbmc_project/Control/Power/RestoreDelay/meson.build b/gen/xyz/openbmc_project/Control/Power/RestoreDelay/meson.build
+new file mode 100644
+index 00000000..312adfd8
+--- /dev/null
++++ b/gen/xyz/openbmc_project/Control/Power/RestoreDelay/meson.build
+@@ -0,0 +1,13 @@
++# Generated file; do not modify.
++generated_sources += custom_target(
++ 'xyz/openbmc_project/Control/Power/RestoreDelay__cpp'.underscorify(),
++ input: [ '../../../../../../yaml/xyz/openbmc_project/Control/Power/RestoreDelay.interface.yaml', ],
++ output: [ 'server.cpp', 'server.hpp', 'client.hpp', ],
++ command: [
++ sdbuspp_gen_meson_prog, '--command', 'cpp',
++ '--output', meson.current_build_dir(),
++ '--tool', sdbusplusplus_prog,
++ '--directory', meson.current_source_dir() / '../../../../../../yaml',
++ 'xyz/openbmc_project/Control/Power/RestoreDelay',
++ ],
++)
+diff --git a/gen/xyz/openbmc_project/Control/Power/meson.build b/gen/xyz/openbmc_project/Control/Power/meson.build
+index d7024e3e..6417aba5 100644
+--- a/gen/xyz/openbmc_project/Control/Power/meson.build
++++ b/gen/xyz/openbmc_project/Control/Power/meson.build
+@@ -55,6 +55,20 @@ generated_others += custom_target(
+ ],
+ )
+
++subdir('RestoreDelay')
++generated_others += custom_target(
++ 'xyz/openbmc_project/Control/Power/RestoreDelay__markdown'.underscorify(),
++ input: [ '../../../../../yaml/xyz/openbmc_project/Control/Power/RestoreDelay.interface.yaml', ],
++ output: [ 'RestoreDelay.md' ],
++ command: [
++ sdbuspp_gen_meson_prog, '--command', 'markdown',
++ '--output', meson.current_build_dir(),
++ '--tool', sdbusplusplus_prog,
++ '--directory', meson.current_source_dir() / '../../../../../yaml',
++ 'xyz/openbmc_project/Control/Power/RestoreDelay',
++ ],
++)
++
+ subdir('RestorePolicy')
+ generated_others += custom_target(
+ 'xyz/openbmc_project/Control/Power/RestorePolicy__markdown'.underscorify(),
+diff --git a/gen/xyz/openbmc_project/Control/Processor/ErrConfig/meson.build b/gen/xyz/openbmc_project/Control/Processor/ErrConfig/meson.build
+new file mode 100644
+index 00000000..25ae30c4
+--- /dev/null
++++ b/gen/xyz/openbmc_project/Control/Processor/ErrConfig/meson.build
+@@ -0,0 +1,13 @@
++# Generated file; do not modify.
++generated_sources += custom_target(
++ 'xyz/openbmc_project/Control/Processor/ErrConfig__cpp'.underscorify(),
++ input: [ '../../../../../../yaml/xyz/openbmc_project/Control/Processor/ErrConfig.interface.yaml', ],
++ output: [ 'server.cpp', 'server.hpp', 'client.hpp', ],
++ command: [
++ sdbuspp_gen_meson_prog, '--command', 'cpp',
++ '--output', meson.current_build_dir(),
++ '--tool', sdbusplusplus_prog,
++ '--directory', meson.current_source_dir() / '../../../../../../yaml',
++ 'xyz/openbmc_project/Control/Processor/ErrConfig',
++ ],
++)
+diff --git a/gen/xyz/openbmc_project/Control/Processor/meson.build b/gen/xyz/openbmc_project/Control/Processor/meson.build
+index fc32bf2f..cc2a1d65 100644
+--- a/gen/xyz/openbmc_project/Control/Processor/meson.build
++++ b/gen/xyz/openbmc_project/Control/Processor/meson.build
+@@ -13,3 +13,16 @@ generated_others += custom_target(
+ ],
+ )
+
++subdir('ErrConfig')
++generated_others += custom_target(
++ 'xyz/openbmc_project/Control/Processor/ErrConfig__markdown'.underscorify(),
++ input: [ '../../../../../yaml/xyz/openbmc_project/Control/Processor/ErrConfig.interface.yaml', ],
++ output: [ 'ErrConfig.md' ],
++ command: [
++ sdbuspp_gen_meson_prog, '--command', 'markdown',
++ '--output', meson.current_build_dir(),
++ '--tool', sdbusplusplus_prog,
++ '--directory', meson.current_source_dir() / '../../../../../yaml',
++ 'xyz/openbmc_project/Control/Processor/ErrConfig',
++ ],
++)
+diff --git a/gen/xyz/openbmc_project/Inventory/Item/Bios/meson.build b/gen/xyz/openbmc_project/Inventory/Item/Bios/meson.build
+new file mode 100644
+index 00000000..d4d8fc31
+--- /dev/null
++++ b/gen/xyz/openbmc_project/Inventory/Item/Bios/meson.build
+@@ -0,0 +1,13 @@
++# Generated file; do not modify.
++generated_sources += custom_target(
++ 'xyz/openbmc_project/Inventory/Item/Bios__cpp'.underscorify(),
++ input: [ '../../../../../../yaml/xyz/openbmc_project/Inventory/Item/Bios.interface.yaml', ],
++ output: [ 'server.cpp', 'server.hpp', 'client.hpp', ],
++ command: [
++ sdbuspp_gen_meson_prog, '--command', 'cpp',
++ '--output', meson.current_build_dir(),
++ '--tool', sdbusplusplus_prog,
++ '--directory', meson.current_source_dir() / '../../../../../../yaml',
++ 'xyz/openbmc_project/Inventory/Item/Bios',
++ ],
++)
+diff --git a/gen/xyz/openbmc_project/Inventory/Item/meson.build b/gen/xyz/openbmc_project/Inventory/Item/meson.build
+index c3bb46d9..e5f7cf93 100644
+--- a/gen/xyz/openbmc_project/Inventory/Item/meson.build
++++ b/gen/xyz/openbmc_project/Inventory/Item/meson.build
+@@ -40,6 +40,20 @@ generated_others += custom_target(
+ ],
+ )
+
++subdir('Bios')
++generated_others += custom_target(
++ 'xyz/openbmc_project/Inventory/Item/Bios__markdown'.underscorify(),
++ input: [ '../../../../../yaml/xyz/openbmc_project/Inventory/Item/Bios.interface.yaml', ],
++ output: [ 'Bios.md' ],
++ command: [
++ sdbuspp_gen_meson_prog, '--command', 'markdown',
++ '--output', meson.current_build_dir(),
++ '--tool', sdbusplusplus_prog,
++ '--directory', meson.current_source_dir() / '../../../../../yaml',
++ 'xyz/openbmc_project/Inventory/Item/Bios',
++ ],
++)
++
+ subdir('Bmc')
+ generated_others += custom_target(
+ 'xyz/openbmc_project/Inventory/Item/Bmc__markdown'.underscorify(),
+--
+2.35.1
+
diff --git a/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0032-update-meson-build-for-MCTP-interfaces.patch b/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0032-update-meson-build-for-MCTP-interfaces.patch
new file mode 100644
index 0000000000..3af5561332
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0032-update-meson-build-for-MCTP-interfaces.patch
@@ -0,0 +1,209 @@
+From e4d177845b4320408e8ccbcee79219c88d936975 Mon Sep 17 00:00:00 2001
+From: Zhikui Ren <zhikui.ren@intel.com>
+Date: Tue, 8 Dec 2020 15:16:25 -0800
+Subject: [PATCH] update meson build for MCTP interfaces
+
+Signed-off-by: Zhikui Ren <zhikui.ren@intel.com>
+---
+ gen/xyz/openbmc_project/MCTP/Base/meson.build | 13 ++++++
+ .../MCTP/Binding/PCIe/meson.build | 13 ++++++
+ .../MCTP/Binding/SMBus/meson.build | 13 ++++++
+ .../openbmc_project/MCTP/Binding/meson.build | 28 +++++++++++++
+ .../openbmc_project/MCTP/BusOwner/meson.build | 13 ++++++
+ .../MCTP/SupportedMessageTypes/meson.build | 13 ++++++
+ gen/xyz/openbmc_project/MCTP/meson.build | 42 +++++++++++++++++++
+ 7 files changed, 135 insertions(+)
+ create mode 100644 gen/xyz/openbmc_project/MCTP/Base/meson.build
+ create mode 100644 gen/xyz/openbmc_project/MCTP/Binding/PCIe/meson.build
+ create mode 100644 gen/xyz/openbmc_project/MCTP/Binding/SMBus/meson.build
+ create mode 100644 gen/xyz/openbmc_project/MCTP/Binding/meson.build
+ create mode 100644 gen/xyz/openbmc_project/MCTP/BusOwner/meson.build
+ create mode 100644 gen/xyz/openbmc_project/MCTP/SupportedMessageTypes/meson.build
+
+diff --git a/gen/xyz/openbmc_project/MCTP/Base/meson.build b/gen/xyz/openbmc_project/MCTP/Base/meson.build
+new file mode 100644
+index 00000000..c605b2d4
+--- /dev/null
++++ b/gen/xyz/openbmc_project/MCTP/Base/meson.build
+@@ -0,0 +1,13 @@
++# Generated file; do not modify.
++generated_sources += custom_target(
++ 'xyz/openbmc_project/MCTP/Base__cpp'.underscorify(),
++ input: [ '../../../../../yaml/xyz/openbmc_project/MCTP/Base.interface.yaml', ],
++ output: [ 'server.cpp', 'server.hpp', 'client.hpp', ],
++ command: [
++ sdbuspp_gen_meson_prog, '--command', 'cpp',
++ '--output', meson.current_build_dir(),
++ '--tool', sdbusplusplus_prog,
++ '--directory', meson.current_source_dir() / '../../../../../yaml',
++ 'xyz/openbmc_project/MCTP/Base',
++ ],
++)
+diff --git a/gen/xyz/openbmc_project/MCTP/Binding/PCIe/meson.build b/gen/xyz/openbmc_project/MCTP/Binding/PCIe/meson.build
+new file mode 100644
+index 00000000..382342bb
+--- /dev/null
++++ b/gen/xyz/openbmc_project/MCTP/Binding/PCIe/meson.build
+@@ -0,0 +1,13 @@
++# Generated file; do not modify.
++generated_sources += custom_target(
++ 'xyz/openbmc_project/MCTP/Binding/PCIe__cpp'.underscorify(),
++ input: [ '../../../../../../yaml/xyz/openbmc_project/MCTP/Binding/PCIe.interface.yaml', ],
++ output: [ 'server.cpp', 'server.hpp', 'client.hpp', ],
++ command: [
++ sdbuspp_gen_meson_prog, '--command', 'cpp',
++ '--output', meson.current_build_dir(),
++ '--tool', sdbusplusplus_prog,
++ '--directory', meson.current_source_dir() / '../../../../../../yaml',
++ 'xyz/openbmc_project/MCTP/Binding/PCIe',
++ ],
++)
+diff --git a/gen/xyz/openbmc_project/MCTP/Binding/SMBus/meson.build b/gen/xyz/openbmc_project/MCTP/Binding/SMBus/meson.build
+new file mode 100644
+index 00000000..6192e5b5
+--- /dev/null
++++ b/gen/xyz/openbmc_project/MCTP/Binding/SMBus/meson.build
+@@ -0,0 +1,13 @@
++# Generated file; do not modify.
++generated_sources += custom_target(
++ 'xyz/openbmc_project/MCTP/Binding/SMBus__cpp'.underscorify(),
++ input: [ '../../../../../../yaml/xyz/openbmc_project/MCTP/Binding/SMBus.interface.yaml', ],
++ output: [ 'server.cpp', 'server.hpp', 'client.hpp', ],
++ command: [
++ sdbuspp_gen_meson_prog, '--command', 'cpp',
++ '--output', meson.current_build_dir(),
++ '--tool', sdbusplusplus_prog,
++ '--directory', meson.current_source_dir() / '../../../../../../yaml',
++ 'xyz/openbmc_project/MCTP/Binding/SMBus',
++ ],
++)
+diff --git a/gen/xyz/openbmc_project/MCTP/Binding/meson.build b/gen/xyz/openbmc_project/MCTP/Binding/meson.build
+new file mode 100644
+index 00000000..1a05e9de
+--- /dev/null
++++ b/gen/xyz/openbmc_project/MCTP/Binding/meson.build
+@@ -0,0 +1,28 @@
++# Generated file; do not modify.
++subdir('PCIe')
++generated_others += custom_target(
++ 'xyz/openbmc_project/MCTP/Binding/PCIe__markdown'.underscorify(),
++ input: [ '../../../../../yaml/xyz/openbmc_project/MCTP/Binding/PCIe.interface.yaml', ],
++ output: [ 'PCIe.md' ],
++ command: [
++ sdbuspp_gen_meson_prog, '--command', 'markdown',
++ '--output', meson.current_build_dir(),
++ '--tool', sdbusplusplus_prog,
++ '--directory', meson.current_source_dir() / '../../../../../yaml',
++ 'xyz/openbmc_project/MCTP/Binding/PCIe',
++ ],
++)
++
++subdir('SMBus')
++generated_others += custom_target(
++ 'xyz/openbmc_project/MCTP/Binding/SMBus__markdown'.underscorify(),
++ input: [ '../../../../../yaml/xyz/openbmc_project/MCTP/Binding/SMBus.interface.yaml', ],
++ output: [ 'SMBus.md' ],
++ command: [
++ sdbuspp_gen_meson_prog, '--command', 'markdown',
++ '--output', meson.current_build_dir(),
++ '--tool', sdbusplusplus_prog,
++ '--directory', meson.current_source_dir() / '../../../../../yaml',
++ 'xyz/openbmc_project/MCTP/Binding/SMBus',
++ ],
++)
+diff --git a/gen/xyz/openbmc_project/MCTP/BusOwner/meson.build b/gen/xyz/openbmc_project/MCTP/BusOwner/meson.build
+new file mode 100644
+index 00000000..4b28bd6b
+--- /dev/null
++++ b/gen/xyz/openbmc_project/MCTP/BusOwner/meson.build
+@@ -0,0 +1,13 @@
++# Generated file; do not modify.
++generated_sources += custom_target(
++ 'xyz/openbmc_project/MCTP/BusOwner__cpp'.underscorify(),
++ input: [ '../../../../../yaml/xyz/openbmc_project/MCTP/BusOwner.interface.yaml', ],
++ output: [ 'server.cpp', 'server.hpp', 'client.hpp', ],
++ command: [
++ sdbuspp_gen_meson_prog, '--command', 'cpp',
++ '--output', meson.current_build_dir(),
++ '--tool', sdbusplusplus_prog,
++ '--directory', meson.current_source_dir() / '../../../../../yaml',
++ 'xyz/openbmc_project/MCTP/BusOwner',
++ ],
++)
+diff --git a/gen/xyz/openbmc_project/MCTP/SupportedMessageTypes/meson.build b/gen/xyz/openbmc_project/MCTP/SupportedMessageTypes/meson.build
+new file mode 100644
+index 00000000..4fd46823
+--- /dev/null
++++ b/gen/xyz/openbmc_project/MCTP/SupportedMessageTypes/meson.build
+@@ -0,0 +1,13 @@
++# Generated file; do not modify.
++generated_sources += custom_target(
++ 'xyz/openbmc_project/MCTP/SupportedMessageTypes__cpp'.underscorify(),
++ input: [ '../../../../../yaml/xyz/openbmc_project/MCTP/SupportedMessageTypes.interface.yaml', ],
++ output: [ 'server.cpp', 'server.hpp', 'client.hpp', ],
++ command: [
++ sdbuspp_gen_meson_prog, '--command', 'cpp',
++ '--output', meson.current_build_dir(),
++ '--tool', sdbusplusplus_prog,
++ '--directory', meson.current_source_dir() / '../../../../../yaml',
++ 'xyz/openbmc_project/MCTP/SupportedMessageTypes',
++ ],
++)
+diff --git a/gen/xyz/openbmc_project/MCTP/meson.build b/gen/xyz/openbmc_project/MCTP/meson.build
+index b9598adf..6b5e508c 100644
+--- a/gen/xyz/openbmc_project/MCTP/meson.build
++++ b/gen/xyz/openbmc_project/MCTP/meson.build
+@@ -1,4 +1,33 @@
+ # Generated file; do not modify.
++subdir('Base')
++generated_others += custom_target(
++ 'xyz/openbmc_project/MCTP/Base__markdown'.underscorify(),
++ input: [ '../../../../yaml/xyz/openbmc_project/MCTP/Base.interface.yaml', ],
++ output: [ 'Base.md' ],
++ command: [
++ sdbuspp_gen_meson_prog, '--command', 'markdown',
++ '--output', meson.current_build_dir(),
++ '--tool', sdbusplusplus_prog,
++ '--directory', meson.current_source_dir() / '../../../../yaml',
++ 'xyz/openbmc_project/MCTP/Base',
++ ],
++)
++
++subdir('Binding')
++subdir('BusOwner')
++generated_others += custom_target(
++ 'xyz/openbmc_project/MCTP/BusOwner__markdown'.underscorify(),
++ input: [ '../../../../yaml/xyz/openbmc_project/MCTP/BusOwner.interface.yaml', ],
++ output: [ 'BusOwner.md' ],
++ command: [
++ sdbuspp_gen_meson_prog, '--command', 'markdown',
++ '--output', meson.current_build_dir(),
++ '--tool', sdbusplusplus_prog,
++ '--directory', meson.current_source_dir() / '../../../../yaml',
++ 'xyz/openbmc_project/MCTP/BusOwner',
++ ],
++)
++
+ subdir('Endpoint')
+ generated_others += custom_target(
+ 'xyz/openbmc_project/MCTP/Endpoint__markdown'.underscorify(),
+@@ -13,3 +42,16 @@ generated_others += custom_target(
+ ],
+ )
+
++subdir('SupportedMessageTypes')
++generated_others += custom_target(
++ 'xyz/openbmc_project/MCTP/SupportedMessageTypes__markdown'.underscorify(),
++ input: [ '../../../../yaml/xyz/openbmc_project/MCTP/SupportedMessageTypes.interface.yaml', ],
++ output: [ 'SupportedMessageTypes.md' ],
++ command: [
++ sdbuspp_gen_meson_prog, '--command', 'markdown',
++ '--output', meson.current_build_dir(),
++ '--tool', sdbusplusplus_prog,
++ '--directory', meson.current_source_dir() / '../../../../yaml',
++ 'xyz/openbmc_project/MCTP/SupportedMessageTypes',
++ ],
++)
+--
+2.35.1
+
diff --git a/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0033-update-meson-build-for-PLDM-FWU-interfaces.patch b/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0033-update-meson-build-for-PLDM-FWU-interfaces.patch
new file mode 100644
index 0000000000..030917b058
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0033-update-meson-build-for-PLDM-FWU-interfaces.patch
@@ -0,0 +1,418 @@
+From cf5599fe499f88e8ef28a9d343a7bd776a58a55a Mon Sep 17 00:00:00 2001
+From: Zhikui Ren <zhikui.ren@intel.com>
+Date: Tue, 8 Dec 2020 15:28:42 -0800
+Subject: [PATCH] update meson build for PLDM FWU interfaces
+
+Signed-off-by: Zhikui Ren <zhikui.ren@intel.com>
+---
+ .../PLDM/FWU/ACPIDescriptor/meson.build | 13 ++
+ .../ActiveComponentImageSetInfo/meson.build | 13 ++
+ .../PLDM/FWU/ActiveComponentInfo/meson.build | 13 ++
+ .../FWU/CapabilitiesDuringUpdate/meson.build | 13 ++
+ .../ComponentActivationMethods/meson.build | 13 ++
+ .../PLDM/FWU/FWUBase/meson.build | 13 ++
+ .../PLDM/FWU/IANADescriptor/meson.build | 13 ++
+ .../PLDM/FWU/PCIDescriptor/meson.build | 13 ++
+ .../PendingComponentImageSetInfo/meson.build | 13 ++
+ .../PLDM/FWU/PendingComponentInfo/meson.build | 13 ++
+ .../PLDM/FWU/PnPDescriptor/meson.build | 13 ++
+ gen/xyz/openbmc_project/PLDM/FWU/meson.build | 154 ++++++++++++++++++
+ gen/xyz/openbmc_project/PLDM/meson.build | 1 +
+ 13 files changed, 298 insertions(+)
+ create mode 100644 gen/xyz/openbmc_project/PLDM/FWU/ACPIDescriptor/meson.build
+ create mode 100644 gen/xyz/openbmc_project/PLDM/FWU/ActiveComponentImageSetInfo/meson.build
+ create mode 100644 gen/xyz/openbmc_project/PLDM/FWU/ActiveComponentInfo/meson.build
+ create mode 100644 gen/xyz/openbmc_project/PLDM/FWU/CapabilitiesDuringUpdate/meson.build
+ create mode 100644 gen/xyz/openbmc_project/PLDM/FWU/ComponentActivationMethods/meson.build
+ create mode 100644 gen/xyz/openbmc_project/PLDM/FWU/FWUBase/meson.build
+ create mode 100644 gen/xyz/openbmc_project/PLDM/FWU/IANADescriptor/meson.build
+ create mode 100644 gen/xyz/openbmc_project/PLDM/FWU/PCIDescriptor/meson.build
+ create mode 100644 gen/xyz/openbmc_project/PLDM/FWU/PendingComponentImageSetInfo/meson.build
+ create mode 100644 gen/xyz/openbmc_project/PLDM/FWU/PendingComponentInfo/meson.build
+ create mode 100644 gen/xyz/openbmc_project/PLDM/FWU/PnPDescriptor/meson.build
+ create mode 100644 gen/xyz/openbmc_project/PLDM/FWU/meson.build
+
+diff --git a/gen/xyz/openbmc_project/PLDM/FWU/ACPIDescriptor/meson.build b/gen/xyz/openbmc_project/PLDM/FWU/ACPIDescriptor/meson.build
+new file mode 100644
+index 00000000..d749e0a1
+--- /dev/null
++++ b/gen/xyz/openbmc_project/PLDM/FWU/ACPIDescriptor/meson.build
+@@ -0,0 +1,13 @@
++# Generated file; do not modify.
++generated_sources += custom_target(
++ 'xyz/openbmc_project/PLDM/FWU/ACPIDescriptor__cpp'.underscorify(),
++ input: [ '../../../../../../yaml/xyz/openbmc_project/PLDM/FWU/ACPIDescriptor.interface.yaml', ],
++ output: [ 'server.cpp', 'server.hpp', 'client.hpp', ],
++ command: [
++ sdbuspp_gen_meson_prog, '--command', 'cpp',
++ '--output', meson.current_build_dir(),
++ '--tool', sdbusplusplus_prog,
++ '--directory', meson.current_source_dir() / '../../../../../../yaml',
++ 'xyz/openbmc_project/PLDM/FWU/ACPIDescriptor',
++ ],
++)
+diff --git a/gen/xyz/openbmc_project/PLDM/FWU/ActiveComponentImageSetInfo/meson.build b/gen/xyz/openbmc_project/PLDM/FWU/ActiveComponentImageSetInfo/meson.build
+new file mode 100644
+index 00000000..6095764a
+--- /dev/null
++++ b/gen/xyz/openbmc_project/PLDM/FWU/ActiveComponentImageSetInfo/meson.build
+@@ -0,0 +1,13 @@
++# Generated file; do not modify.
++generated_sources += custom_target(
++ 'xyz/openbmc_project/PLDM/FWU/ActiveComponentImageSetInfo__cpp'.underscorify(),
++ input: [ '../../../../../../yaml/xyz/openbmc_project/PLDM/FWU/ActiveComponentImageSetInfo.interface.yaml', ],
++ output: [ 'server.cpp', 'server.hpp', 'client.hpp', ],
++ command: [
++ sdbuspp_gen_meson_prog, '--command', 'cpp',
++ '--output', meson.current_build_dir(),
++ '--tool', sdbusplusplus_prog,
++ '--directory', meson.current_source_dir() / '../../../../../../yaml',
++ 'xyz/openbmc_project/PLDM/FWU/ActiveComponentImageSetInfo',
++ ],
++)
+diff --git a/gen/xyz/openbmc_project/PLDM/FWU/ActiveComponentInfo/meson.build b/gen/xyz/openbmc_project/PLDM/FWU/ActiveComponentInfo/meson.build
+new file mode 100644
+index 00000000..531e3050
+--- /dev/null
++++ b/gen/xyz/openbmc_project/PLDM/FWU/ActiveComponentInfo/meson.build
+@@ -0,0 +1,13 @@
++# Generated file; do not modify.
++generated_sources += custom_target(
++ 'xyz/openbmc_project/PLDM/FWU/ActiveComponentInfo__cpp'.underscorify(),
++ input: [ '../../../../../../yaml/xyz/openbmc_project/PLDM/FWU/ActiveComponentInfo.interface.yaml', ],
++ output: [ 'server.cpp', 'server.hpp', 'client.hpp', ],
++ command: [
++ sdbuspp_gen_meson_prog, '--command', 'cpp',
++ '--output', meson.current_build_dir(),
++ '--tool', sdbusplusplus_prog,
++ '--directory', meson.current_source_dir() / '../../../../../../yaml',
++ 'xyz/openbmc_project/PLDM/FWU/ActiveComponentInfo',
++ ],
++)
+diff --git a/gen/xyz/openbmc_project/PLDM/FWU/CapabilitiesDuringUpdate/meson.build b/gen/xyz/openbmc_project/PLDM/FWU/CapabilitiesDuringUpdate/meson.build
+new file mode 100644
+index 00000000..c0918434
+--- /dev/null
++++ b/gen/xyz/openbmc_project/PLDM/FWU/CapabilitiesDuringUpdate/meson.build
+@@ -0,0 +1,13 @@
++# Generated file; do not modify.
++generated_sources += custom_target(
++ 'xyz/openbmc_project/PLDM/FWU/CapabilitiesDuringUpdate__cpp'.underscorify(),
++ input: [ '../../../../../../yaml/xyz/openbmc_project/PLDM/FWU/CapabilitiesDuringUpdate.interface.yaml', ],
++ output: [ 'server.cpp', 'server.hpp', 'client.hpp', ],
++ command: [
++ sdbuspp_gen_meson_prog, '--command', 'cpp',
++ '--output', meson.current_build_dir(),
++ '--tool', sdbusplusplus_prog,
++ '--directory', meson.current_source_dir() / '../../../../../../yaml',
++ 'xyz/openbmc_project/PLDM/FWU/CapabilitiesDuringUpdate',
++ ],
++)
+diff --git a/gen/xyz/openbmc_project/PLDM/FWU/ComponentActivationMethods/meson.build b/gen/xyz/openbmc_project/PLDM/FWU/ComponentActivationMethods/meson.build
+new file mode 100644
+index 00000000..778dcd75
+--- /dev/null
++++ b/gen/xyz/openbmc_project/PLDM/FWU/ComponentActivationMethods/meson.build
+@@ -0,0 +1,13 @@
++# Generated file; do not modify.
++generated_sources += custom_target(
++ 'xyz/openbmc_project/PLDM/FWU/ComponentActivationMethods__cpp'.underscorify(),
++ input: [ '../../../../../../yaml/xyz/openbmc_project/PLDM/FWU/ComponentActivationMethods.interface.yaml', ],
++ output: [ 'server.cpp', 'server.hpp', 'client.hpp', ],
++ command: [
++ sdbuspp_gen_meson_prog, '--command', 'cpp',
++ '--output', meson.current_build_dir(),
++ '--tool', sdbusplusplus_prog,
++ '--directory', meson.current_source_dir() / '../../../../../../yaml',
++ 'xyz/openbmc_project/PLDM/FWU/ComponentActivationMethods',
++ ],
++)
+diff --git a/gen/xyz/openbmc_project/PLDM/FWU/FWUBase/meson.build b/gen/xyz/openbmc_project/PLDM/FWU/FWUBase/meson.build
+new file mode 100644
+index 00000000..61af12b6
+--- /dev/null
++++ b/gen/xyz/openbmc_project/PLDM/FWU/FWUBase/meson.build
+@@ -0,0 +1,13 @@
++# Generated file; do not modify.
++generated_sources += custom_target(
++ 'xyz/openbmc_project/PLDM/FWU/FWUBase__cpp'.underscorify(),
++ input: [ '../../../../../../yaml/xyz/openbmc_project/PLDM/FWU/FWUBase.interface.yaml', ],
++ output: [ 'server.cpp', 'server.hpp', 'client.hpp', ],
++ command: [
++ sdbuspp_gen_meson_prog, '--command', 'cpp',
++ '--output', meson.current_build_dir(),
++ '--tool', sdbusplusplus_prog,
++ '--directory', meson.current_source_dir() / '../../../../../../yaml',
++ 'xyz/openbmc_project/PLDM/FWU/FWUBase',
++ ],
++)
+diff --git a/gen/xyz/openbmc_project/PLDM/FWU/IANADescriptor/meson.build b/gen/xyz/openbmc_project/PLDM/FWU/IANADescriptor/meson.build
+new file mode 100644
+index 00000000..95a3f701
+--- /dev/null
++++ b/gen/xyz/openbmc_project/PLDM/FWU/IANADescriptor/meson.build
+@@ -0,0 +1,13 @@
++# Generated file; do not modify.
++generated_sources += custom_target(
++ 'xyz/openbmc_project/PLDM/FWU/IANADescriptor__cpp'.underscorify(),
++ input: [ '../../../../../../yaml/xyz/openbmc_project/PLDM/FWU/IANADescriptor.interface.yaml', ],
++ output: [ 'server.cpp', 'server.hpp', 'client.hpp', ],
++ command: [
++ sdbuspp_gen_meson_prog, '--command', 'cpp',
++ '--output', meson.current_build_dir(),
++ '--tool', sdbusplusplus_prog,
++ '--directory', meson.current_source_dir() / '../../../../../../yaml',
++ 'xyz/openbmc_project/PLDM/FWU/IANADescriptor',
++ ],
++)
+diff --git a/gen/xyz/openbmc_project/PLDM/FWU/PCIDescriptor/meson.build b/gen/xyz/openbmc_project/PLDM/FWU/PCIDescriptor/meson.build
+new file mode 100644
+index 00000000..16a28d25
+--- /dev/null
++++ b/gen/xyz/openbmc_project/PLDM/FWU/PCIDescriptor/meson.build
+@@ -0,0 +1,13 @@
++# Generated file; do not modify.
++generated_sources += custom_target(
++ 'xyz/openbmc_project/PLDM/FWU/PCIDescriptor__cpp'.underscorify(),
++ input: [ '../../../../../../yaml/xyz/openbmc_project/PLDM/FWU/PCIDescriptor.interface.yaml', ],
++ output: [ 'server.cpp', 'server.hpp', 'client.hpp', ],
++ command: [
++ sdbuspp_gen_meson_prog, '--command', 'cpp',
++ '--output', meson.current_build_dir(),
++ '--tool', sdbusplusplus_prog,
++ '--directory', meson.current_source_dir() / '../../../../../../yaml',
++ 'xyz/openbmc_project/PLDM/FWU/PCIDescriptor',
++ ],
++)
+diff --git a/gen/xyz/openbmc_project/PLDM/FWU/PendingComponentImageSetInfo/meson.build b/gen/xyz/openbmc_project/PLDM/FWU/PendingComponentImageSetInfo/meson.build
+new file mode 100644
+index 00000000..85f4c637
+--- /dev/null
++++ b/gen/xyz/openbmc_project/PLDM/FWU/PendingComponentImageSetInfo/meson.build
+@@ -0,0 +1,13 @@
++# Generated file; do not modify.
++generated_sources += custom_target(
++ 'xyz/openbmc_project/PLDM/FWU/PendingComponentImageSetInfo__cpp'.underscorify(),
++ input: [ '../../../../../../yaml/xyz/openbmc_project/PLDM/FWU/PendingComponentImageSetInfo.interface.yaml', ],
++ output: [ 'server.cpp', 'server.hpp', 'client.hpp', ],
++ command: [
++ sdbuspp_gen_meson_prog, '--command', 'cpp',
++ '--output', meson.current_build_dir(),
++ '--tool', sdbusplusplus_prog,
++ '--directory', meson.current_source_dir() / '../../../../../../yaml',
++ 'xyz/openbmc_project/PLDM/FWU/PendingComponentImageSetInfo',
++ ],
++)
+diff --git a/gen/xyz/openbmc_project/PLDM/FWU/PendingComponentInfo/meson.build b/gen/xyz/openbmc_project/PLDM/FWU/PendingComponentInfo/meson.build
+new file mode 100644
+index 00000000..3dcbb2de
+--- /dev/null
++++ b/gen/xyz/openbmc_project/PLDM/FWU/PendingComponentInfo/meson.build
+@@ -0,0 +1,13 @@
++# Generated file; do not modify.
++generated_sources += custom_target(
++ 'xyz/openbmc_project/PLDM/FWU/PendingComponentInfo__cpp'.underscorify(),
++ input: [ '../../../../../../yaml/xyz/openbmc_project/PLDM/FWU/PendingComponentInfo.interface.yaml', ],
++ output: [ 'server.cpp', 'server.hpp', 'client.hpp', ],
++ command: [
++ sdbuspp_gen_meson_prog, '--command', 'cpp',
++ '--output', meson.current_build_dir(),
++ '--tool', sdbusplusplus_prog,
++ '--directory', meson.current_source_dir() / '../../../../../../yaml',
++ 'xyz/openbmc_project/PLDM/FWU/PendingComponentInfo',
++ ],
++)
+diff --git a/gen/xyz/openbmc_project/PLDM/FWU/PnPDescriptor/meson.build b/gen/xyz/openbmc_project/PLDM/FWU/PnPDescriptor/meson.build
+new file mode 100644
+index 00000000..997c6ddc
+--- /dev/null
++++ b/gen/xyz/openbmc_project/PLDM/FWU/PnPDescriptor/meson.build
+@@ -0,0 +1,13 @@
++# Generated file; do not modify.
++generated_sources += custom_target(
++ 'xyz/openbmc_project/PLDM/FWU/PnPDescriptor__cpp'.underscorify(),
++ input: [ '../../../../../../yaml/xyz/openbmc_project/PLDM/FWU/PnPDescriptor.interface.yaml', ],
++ output: [ 'server.cpp', 'server.hpp', 'client.hpp', ],
++ command: [
++ sdbuspp_gen_meson_prog, '--command', 'cpp',
++ '--output', meson.current_build_dir(),
++ '--tool', sdbusplusplus_prog,
++ '--directory', meson.current_source_dir() / '../../../../../../yaml',
++ 'xyz/openbmc_project/PLDM/FWU/PnPDescriptor',
++ ],
++)
+diff --git a/gen/xyz/openbmc_project/PLDM/FWU/meson.build b/gen/xyz/openbmc_project/PLDM/FWU/meson.build
+new file mode 100644
+index 00000000..2bb71914
+--- /dev/null
++++ b/gen/xyz/openbmc_project/PLDM/FWU/meson.build
+@@ -0,0 +1,154 @@
++# Generated file; do not modify.
++subdir('ACPIDescriptor')
++generated_others += custom_target(
++ 'xyz/openbmc_project/PLDM/FWU/ACPIDescriptor__markdown'.underscorify(),
++ input: [ '../../../../../yaml/xyz/openbmc_project/PLDM/FWU/ACPIDescriptor.interface.yaml', ],
++ output: [ 'ACPIDescriptor.md' ],
++ command: [
++ sdbuspp_gen_meson_prog, '--command', 'markdown',
++ '--output', meson.current_build_dir(),
++ '--tool', sdbusplusplus_prog,
++ '--directory', meson.current_source_dir() / '../../../../../yaml',
++ 'xyz/openbmc_project/PLDM/FWU/ACPIDescriptor',
++ ],
++)
++
++subdir('ActiveComponentImageSetInfo')
++generated_others += custom_target(
++ 'xyz/openbmc_project/PLDM/FWU/ActiveComponentImageSetInfo__markdown'.underscorify(),
++ input: [ '../../../../../yaml/xyz/openbmc_project/PLDM/FWU/ActiveComponentImageSetInfo.interface.yaml', ],
++ output: [ 'ActiveComponentImageSetInfo.md' ],
++ command: [
++ sdbuspp_gen_meson_prog, '--command', 'markdown',
++ '--output', meson.current_build_dir(),
++ '--tool', sdbusplusplus_prog,
++ '--directory', meson.current_source_dir() / '../../../../../yaml',
++ 'xyz/openbmc_project/PLDM/FWU/ActiveComponentImageSetInfo',
++ ],
++)
++
++subdir('ActiveComponentInfo')
++generated_others += custom_target(
++ 'xyz/openbmc_project/PLDM/FWU/ActiveComponentInfo__markdown'.underscorify(),
++ input: [ '../../../../../yaml/xyz/openbmc_project/PLDM/FWU/ActiveComponentInfo.interface.yaml', ],
++ output: [ 'ActiveComponentInfo.md' ],
++ command: [
++ sdbuspp_gen_meson_prog, '--command', 'markdown',
++ '--output', meson.current_build_dir(),
++ '--tool', sdbusplusplus_prog,
++ '--directory', meson.current_source_dir() / '../../../../../yaml',
++ 'xyz/openbmc_project/PLDM/FWU/ActiveComponentInfo',
++ ],
++)
++
++subdir('CapabilitiesDuringUpdate')
++generated_others += custom_target(
++ 'xyz/openbmc_project/PLDM/FWU/CapabilitiesDuringUpdate__markdown'.underscorify(),
++ input: [ '../../../../../yaml/xyz/openbmc_project/PLDM/FWU/CapabilitiesDuringUpdate.interface.yaml', ],
++ output: [ 'CapabilitiesDuringUpdate.md' ],
++ command: [
++ sdbuspp_gen_meson_prog, '--command', 'markdown',
++ '--output', meson.current_build_dir(),
++ '--tool', sdbusplusplus_prog,
++ '--directory', meson.current_source_dir() / '../../../../../yaml',
++ 'xyz/openbmc_project/PLDM/FWU/CapabilitiesDuringUpdate',
++ ],
++)
++
++subdir('ComponentActivationMethods')
++generated_others += custom_target(
++ 'xyz/openbmc_project/PLDM/FWU/ComponentActivationMethods__markdown'.underscorify(),
++ input: [ '../../../../../yaml/xyz/openbmc_project/PLDM/FWU/ComponentActivationMethods.interface.yaml', ],
++ output: [ 'ComponentActivationMethods.md' ],
++ command: [
++ sdbuspp_gen_meson_prog, '--command', 'markdown',
++ '--output', meson.current_build_dir(),
++ '--tool', sdbusplusplus_prog,
++ '--directory', meson.current_source_dir() / '../../../../../yaml',
++ 'xyz/openbmc_project/PLDM/FWU/ComponentActivationMethods',
++ ],
++)
++
++subdir('FWUBase')
++generated_others += custom_target(
++ 'xyz/openbmc_project/PLDM/FWU/FWUBase__markdown'.underscorify(),
++ input: [ '../../../../../yaml/xyz/openbmc_project/PLDM/FWU/FWUBase.interface.yaml', ],
++ output: [ 'FWUBase.md' ],
++ command: [
++ sdbuspp_gen_meson_prog, '--command', 'markdown',
++ '--output', meson.current_build_dir(),
++ '--tool', sdbusplusplus_prog,
++ '--directory', meson.current_source_dir() / '../../../../../yaml',
++ 'xyz/openbmc_project/PLDM/FWU/FWUBase',
++ ],
++)
++
++subdir('IANADescriptor')
++generated_others += custom_target(
++ 'xyz/openbmc_project/PLDM/FWU/IANADescriptor__markdown'.underscorify(),
++ input: [ '../../../../../yaml/xyz/openbmc_project/PLDM/FWU/IANADescriptor.interface.yaml', ],
++ output: [ 'IANADescriptor.md' ],
++ command: [
++ sdbuspp_gen_meson_prog, '--command', 'markdown',
++ '--output', meson.current_build_dir(),
++ '--tool', sdbusplusplus_prog,
++ '--directory', meson.current_source_dir() / '../../../../../yaml',
++ 'xyz/openbmc_project/PLDM/FWU/IANADescriptor',
++ ],
++)
++
++subdir('PCIDescriptor')
++generated_others += custom_target(
++ 'xyz/openbmc_project/PLDM/FWU/PCIDescriptor__markdown'.underscorify(),
++ input: [ '../../../../../yaml/xyz/openbmc_project/PLDM/FWU/PCIDescriptor.interface.yaml', ],
++ output: [ 'PCIDescriptor.md' ],
++ command: [
++ sdbuspp_gen_meson_prog, '--command', 'markdown',
++ '--output', meson.current_build_dir(),
++ '--tool', sdbusplusplus_prog,
++ '--directory', meson.current_source_dir() / '../../../../../yaml',
++ 'xyz/openbmc_project/PLDM/FWU/PCIDescriptor',
++ ],
++)
++
++subdir('PendingComponentImageSetInfo')
++generated_others += custom_target(
++ 'xyz/openbmc_project/PLDM/FWU/PendingComponentImageSetInfo__markdown'.underscorify(),
++ input: [ '../../../../../yaml/xyz/openbmc_project/PLDM/FWU/PendingComponentImageSetInfo.interface.yaml', ],
++ output: [ 'PendingComponentImageSetInfo.md' ],
++ command: [
++ sdbuspp_gen_meson_prog, '--command', 'markdown',
++ '--output', meson.current_build_dir(),
++ '--tool', sdbusplusplus_prog,
++ '--directory', meson.current_source_dir() / '../../../../../yaml',
++ 'xyz/openbmc_project/PLDM/FWU/PendingComponentImageSetInfo',
++ ],
++)
++
++subdir('PendingComponentInfo')
++generated_others += custom_target(
++ 'xyz/openbmc_project/PLDM/FWU/PendingComponentInfo__markdown'.underscorify(),
++ input: [ '../../../../../yaml/xyz/openbmc_project/PLDM/FWU/PendingComponentInfo.interface.yaml', ],
++ output: [ 'PendingComponentInfo.md' ],
++ command: [
++ sdbuspp_gen_meson_prog, '--command', 'markdown',
++ '--output', meson.current_build_dir(),
++ '--tool', sdbusplusplus_prog,
++ '--directory', meson.current_source_dir() / '../../../../../yaml',
++ 'xyz/openbmc_project/PLDM/FWU/PendingComponentInfo',
++ ],
++)
++
++subdir('PnPDescriptor')
++generated_others += custom_target(
++ 'xyz/openbmc_project/PLDM/FWU/PnPDescriptor__markdown'.underscorify(),
++ input: [ '../../../../../yaml/xyz/openbmc_project/PLDM/FWU/PnPDescriptor.interface.yaml', ],
++ output: [ 'PnPDescriptor.md' ],
++ command: [
++ sdbuspp_gen_meson_prog, '--command', 'markdown',
++ '--output', meson.current_build_dir(),
++ '--tool', sdbusplusplus_prog,
++ '--directory', meson.current_source_dir() / '../../../../../yaml',
++ 'xyz/openbmc_project/PLDM/FWU/PnPDescriptor',
++ ],
++)
+diff --git a/gen/xyz/openbmc_project/PLDM/meson.build b/gen/xyz/openbmc_project/PLDM/meson.build
+index 2be636cb..35ff3019 100644
+--- a/gen/xyz/openbmc_project/PLDM/meson.build
++++ b/gen/xyz/openbmc_project/PLDM/meson.build
+@@ -13,6 +13,7 @@ generated_others += custom_target(
+ ],
+ )
+
++subdir('FWU')
+ subdir('PDR')
+ generated_others += custom_target(
+ 'xyz/openbmc_project/PLDM/PDR__markdown'.underscorify(),
+--
+2.35.1
+
diff --git a/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0034-Add-username-property-to-SessionInfo-interface.patch b/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0034-Add-username-property-to-SessionInfo-interface.patch
new file mode 100644
index 0000000000..5744335d6b
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0034-Add-username-property-to-SessionInfo-interface.patch
@@ -0,0 +1,64 @@
+From 1c16f55023fe3ab0a32b2cce4ef1db1a473c654a Mon Sep 17 00:00:00 2001
+From: Jayaprakash Mutyala <mutyalax.jayaprakash@intel.com>
+Date: Tue, 1 Jun 2021 12:27:50 +0000
+Subject: [PATCH] Add username property to SessionInfo interface
+
+Add username property to SessionInfo interface to get username info on
+individual IPMI session Id's on Redfish
+
+Tested:
+Verified on SessionInfo D-bus interface.
+
+busctl introspect xyz.openbmc_project.Ipmi.Channel.eth0
+ /xyz/openbmc_project/ipmi/session/eth0/0
+NAME TYPE SIGNATURE RESULT/VALUE FLAGS
+......
+xyz.openbmc_project.Ipmi.SessionInfo interface - - -
+.ChannelNum property y 0 emits-change writable
+.CurrentPrivilege property y 0 emits-change writable
+.RemoteIPAddr property u 2225389066 emits-change writable
+.RemoteMACAddress property ay 0 emits-change writable
+.RemotePort property q 35749 emits-change writable
+.SessionHandle property y 0 emits-change writable
+.State property y 0 emits-change writable
+.UserID property y 0 emits-change writable
+.Username property s "" emits-change writable
+
+Signed-off-by: Jayaprakash Mutyala <mutyalax.jayaprakash@intel.com>
+---
+ yaml/xyz/openbmc_project/Ipmi/SESSION_README.md | 1 +
+ yaml/xyz/openbmc_project/Ipmi/SessionInfo.interface.yaml | 6 ++++++
+ 2 files changed, 7 insertions(+)
+
+diff --git a/yaml/xyz/openbmc_project/Ipmi/SESSION_README.md b/yaml/xyz/openbmc_project/Ipmi/SESSION_README.md
+index 4ad60f22..43374a95 100644
+--- a/yaml/xyz/openbmc_project/Ipmi/SESSION_README.md
++++ b/yaml/xyz/openbmc_project/Ipmi/SESSION_README.md
+@@ -18,6 +18,7 @@ so that both phosphor-ipmi-host & phosphr-ipmi-net will be in sync.
+ - RemotePort - Remote port address.
+ - RemoteMACAddress -Remote MAC Address.
+ - UserID - Session created by given user id.
++- Username - Session created by given username.
+
+ ### xyz.openbmc_project.Object.Delete
+
+diff --git a/yaml/xyz/openbmc_project/Ipmi/SessionInfo.interface.yaml b/yaml/xyz/openbmc_project/Ipmi/SessionInfo.interface.yaml
+index 6d8a899d..b1a8741a 100644
+--- a/yaml/xyz/openbmc_project/Ipmi/SessionInfo.interface.yaml
++++ b/yaml/xyz/openbmc_project/Ipmi/SessionInfo.interface.yaml
+@@ -46,6 +46,12 @@ properties:
+ Session created by given user ID.
+ errors:
+ - xyz.openbmc_project.Common.Error.InternalFailure
++ - name: Username
++ type: string
++ description: >
++ Session created by given username.
++ errors:
++ - xyz.openbmc_project.Common.Error.InternalFailure
+ - name: State
+ type: byte
+ default: 0
+--
+2.35.1
+
diff --git a/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces_%.bbappend b/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces_%.bbappend
new file mode 100644
index 0000000000..f153f6a2d7
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces_%.bbappend
@@ -0,0 +1,22 @@
+# Keep this as a comment to enable the auto-bump script without
+# stomping on SRC_URI from previous .bbappend files
+#SRC_URI = "git://github.com/openbmc/phosphor-dbus-interfaces.git;branch=master;protocol=https"
+#SRCREV = "1bf1b7bfcf639a4e0eed39320181f9b155d787e7"
+
+FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
+
+SRC_URI += "file://0007-ipmi-set-BIOS-id.patch \
+ file://0010-Increase-the-default-watchdog-timeout-value.patch \
+ file://0012-Add-RestoreDelay-interface-for-power-restore-delay.patch \
+ file://0013-Add-ErrConfig.yaml-interface-for-processor-error-config.patch \
+ file://0024-Add-the-pre-timeout-interrupt-defined-in-IPMI-spec.patch \
+ file://0025-Add-PreInterruptFlag-properity-in-DBUS.patch \
+ file://0026-Add-StandbySpare-support-for-software-inventory.patch \
+ file://0028-MCTP-Daemon-D-Bus-interface-definition.patch \
+ file://0029-Add-D-Bus-interfaces-for-PLDM-FW-update.patch \
+ file://0030-Add-PLDM-version-purpose-enumeration.patch \
+ file://0031-update-meson-build-files-for-control-and-bios.patch \
+ file://0032-update-meson-build-for-MCTP-interfaces.patch \
+ file://0033-update-meson-build-for-PLDM-FWU-interfaces.patch \
+ file://0034-Add-username-property-to-SessionInfo-interface.patch \
+ "
diff --git a/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-mapper-config-native.bbappend b/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-mapper-config-native.bbappend
new file mode 100644
index 0000000000..5f38b8da94
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-mapper-config-native.bbappend
@@ -0,0 +1 @@
+PHOSPHOR_MAPPER_CONFIGS:append:ibs = " ibs-dbus-interfaces-mapper-config-native"
diff --git a/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-mapper/xyz.openbmc_project.ObjectMapper.service b/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-mapper/xyz.openbmc_project.ObjectMapper.service
new file mode 100644
index 0000000000..9af9af2546
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-mapper/xyz.openbmc_project.ObjectMapper.service
@@ -0,0 +1,20 @@
+[Unit]
+Description=Phosphor DBus Service Discovery Manager
+Before=obmc-mapper.target
+After=dbus.socket
+
+[Service]
+Restart=always
+Type=dbus
+ExecStart=/usr/bin/env mapperx \
+ --service-namespaces="xyz. com. org." \
+ --interface-namespaces="org. com. xyz." \
+ --service-blacklists="org.freedesktop.systemd1"
+SyslogIdentifier=phosphor-mapper
+BusName={BUSNAME}
+TimeoutStartSec=300
+RestartSec=5
+EnvironmentFile={envfiledir}/obmc/mapper
+
+[Install]
+WantedBy={SYSTEMD_DEFAULT_TARGET}
diff --git a/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-mapper_%.bbappend b/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-mapper_%.bbappend
new file mode 100644
index 0000000000..4fc41d0580
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/dbus/phosphor-mapper_%.bbappend
@@ -0,0 +1 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
diff --git a/meta-ibs/meta-common/recipes-phosphor/fans/phosphor-pid-control_%.bbappend b/meta-ibs/meta-common/recipes-phosphor/fans/phosphor-pid-control_%.bbappend
new file mode 100644
index 0000000000..29b3d39b08
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/fans/phosphor-pid-control_%.bbappend
@@ -0,0 +1,3 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
+
+EXTRA_OECONF:append = "--enable-configure-dbus=yes"
diff --git a/meta-ibs/meta-common/recipes-phosphor/fru/default-fru.bb b/meta-ibs/meta-common/recipes-phosphor/fru/default-fru.bb
new file mode 100644
index 0000000000..205454d9eb
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/fru/default-fru.bb
@@ -0,0 +1,26 @@
+SUMMARY = "Default Fru"
+DESCRIPTION = "Builds a default FRU file at runtime based on board ID"
+
+inherit obmc-phosphor-systemd
+inherit cmake
+
+SRC_URI = "file://checkFru.sh;subdir=${BP} \
+ file://decodeBoardID.sh;subdir=${BP} \
+ file://mkfru.cpp;subdir=${BP} \
+ file://CMakeLists.txt;subdir=${BP} \
+ "
+SYSTEMD_SERVICE:${PN} = "SetBaseboardFru.service"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "\
+ file://${IBSBASE}/COPYING.apache-2.0;md5=34400b68072d710fecd0a2940a0d1658 \
+ file://mkfru.cpp;beginline=2;endline=14;md5=c451359f18a13ee69602afce1588c01a \
+ "
+
+RDEPENDS:${PN} = "bash"
+
+do_install:append() {
+ install -d ${D}${bindir}
+ install -m 0755 ${S}/checkFru.sh ${D}${bindir}/checkFru.sh
+ install -m 0755 ${S}/decodeBoardID.sh ${D}${bindir}/decodeBoardID.sh
+}
diff --git a/meta-ibs/meta-common/recipes-phosphor/fru/default-fru/CMakeLists.txt b/meta-ibs/meta-common/recipes-phosphor/fru/default-fru/CMakeLists.txt
new file mode 100644
index 0000000000..a8e6336441
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/fru/default-fru/CMakeLists.txt
@@ -0,0 +1,7 @@
+cmake_minimum_required(VERSION 2.8.10 FATAL_ERROR)
+project(mkfru CXX)
+set(CMAKE_CXX_STANDARD 17)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+add_executable(mkfru mkfru.cpp)
+install(TARGETS mkfru DESTINATION bin)
+
diff --git a/meta-ibs/meta-common/recipes-phosphor/fru/default-fru/SetBaseboardFru.service b/meta-ibs/meta-common/recipes-phosphor/fru/default-fru/SetBaseboardFru.service
new file mode 100644
index 0000000000..d8c2a75acd
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/fru/default-fru/SetBaseboardFru.service
@@ -0,0 +1,9 @@
+[Unit]
+Description=Check for FRU presence
+
+[Service]
+ExecStart=/usr/bin/checkFru.sh
+Type=oneshot
+
+[Install]
+WantedBy=basic.target
diff --git a/meta-ibs/meta-common/recipes-phosphor/fru/default-fru/checkFru.sh b/meta-ibs/meta-common/recipes-phosphor/fru/default-fru/checkFru.sh
new file mode 100755
index 0000000000..18a6c72601
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/fru/default-fru/checkFru.sh
@@ -0,0 +1,54 @@
+#!/bin/bash
+
+# this script checks the gpio id and loads the correct baseboard fru
+FRUPATH="/etc/fru"
+PRODIDPATH="/var/cache/private"
+fruFile="$FRUPATH/baseboard.fru.bin"
+prodIDFile="$PRODIDPATH/prodID"
+source decodeBoardID.sh
+
+read_id() {
+ local idx=0
+ local result=0
+ local value=0
+ for ((idx=0; idx<6; idx++))
+ do
+ typeset -i value=$(gpioget $(gpiofind "FM_BMC_BOARD_SKU_ID${idx}_N"))
+ value=$((value << idx))
+ result=$((result | value))
+ done
+ echo $result
+}
+
+if [ -f $fruFile -a -f $prodIDFile ] &&
+ grep -q 'CPU part\s*: 0xc07' /proc/cpuinfo; then
+ exit 0
+fi
+
+NAME="Unknown"
+PRODID="0x00"
+EEPROM_FRU=false
+
+BOARD_ID=$(read_id)
+decode_board_id
+
+if [ ! -e $prodIDFile ]
+then
+ echo $PRODID >$prodIDFile
+fi
+
+if $EEPROM_FRU;
+then
+ # Remove baseboard filesystem FRU(if any), as this platform has EEPROM FRU.
+ rm -f $fruFile
+ exit 0
+fi
+
+if [ ! -f $fruFile ]
+then
+ cd /tmp
+ mkdir -p $FRUPATH
+ mkfru $NAME
+ mv $NAME.fru.bin $fruFile
+fi
+
diff --git a/meta-ibs/meta-common/recipes-phosphor/fru/default-fru/decodeBoardID.sh b/meta-ibs/meta-common/recipes-phosphor/fru/default-fru/decodeBoardID.sh
new file mode 100644
index 0000000000..80710ae26d
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/fru/default-fru/decodeBoardID.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+# this script uses the BOARD_ID set from checkFru.sh and provides the NAME,
+# PRODID, and EEPROM_FRU values for this platform
+decode_board_id() {
+}
diff --git a/meta-ibs/meta-common/recipes-phosphor/fru/default-fru/mkfru.cpp b/meta-ibs/meta-common/recipes-phosphor/fru/default-fru/mkfru.cpp
new file mode 100644
index 0000000000..bafbf8ec2f
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/fru/default-fru/mkfru.cpp
@@ -0,0 +1,219 @@
+/*
+// Copyright (c) 2019 Intel Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// Abstract: default FRU generation
+//
+*/
+
+#include <fstream>
+#include <iostream>
+#include <iterator>
+#include <numeric>
+#include <string>
+#include <vector>
+
+constexpr uint8_t fillChar = '.';
+constexpr uint8_t eof = 0xc1;
+const std::string ibs = "IBS Corporation";
+
+// round up to nearest block size (power of 2)
+constexpr size_t blockRound(size_t len, size_t blk)
+{
+ return ((len) + (((blk) - ((len) & ((blk)-1))) & ((blk)-1)));
+}
+
+uint8_t mklen(uint8_t len)
+{
+ return static_cast<uint8_t>((0x3 << 6) | len);
+}
+
+struct FruEntry
+{
+ static constexpr size_t fruBlockSize = 8; // type, length, checksum
+ static constexpr size_t fixedBytes = 3; // type, length, checksum
+ FruEntry() = delete;
+ FruEntry(const std::vector<uint8_t>& contents)
+ {
+ constexpr size_t verOffset = 0;
+ constexpr size_t lenOffset = 1;
+ value.resize(blockRound(fixedBytes + contents.size(), fruBlockSize));
+ value[verOffset] = 1;
+ value[lenOffset] = blocks();
+ std::copy(contents.begin(), contents.end(), value.begin() + 2);
+ addChecksum();
+ }
+
+ void addChecksum()
+ {
+ int sum = std::accumulate(value.begin(), value.end(), 0);
+ value.back() = static_cast<uint8_t>(256 - sum & 0xff);
+ }
+
+ uint8_t blocks() const
+ {
+ return static_cast<uint8_t>(value.size() / 8);
+ }
+
+ std::vector<uint8_t> value;
+};
+
+size_t fillDots(std::vector<uint8_t>::iterator start, size_t count)
+{
+ *start++ = mklen(count); // prefix with (0xc0 | count)
+ auto end = start + count++;
+ std::fill(start, end, '.');
+ return count;
+}
+
+size_t fillStr(std::vector<uint8_t>::iterator start, const std::string& str)
+{
+ size_t count = str.size();
+ *start++ = mklen(count++); // prefix with (0xc0 | count)
+ std::copy(str.begin(), str.end(), start);
+ return count;
+}
+
+std::vector<uint8_t> genChassisContents()
+{
+ constexpr size_t pnSize = 18;
+ constexpr size_t snSize = 18;
+ constexpr size_t amSize = 31;
+ constexpr size_t headerSize = 1;
+ constexpr size_t contentSize = headerSize + 1 + pnSize + 1 + snSize + 1 +
+ amSize + 1 + amSize + sizeof(eof);
+ std::vector<uint8_t> data(contentSize);
+ size_t offset = 0;
+ // chassis type (main server chassis)
+ data[offset++] = 0x17;
+ // chassis part number
+ offset += fillDots(data.begin() + offset, pnSize);
+ // chassis serial number
+ offset += fillDots(data.begin() + offset, snSize);
+ // info am1
+ offset += fillDots(data.begin() + offset, amSize);
+ // info am2
+ offset += fillDots(data.begin() + offset, amSize);
+ data[offset] = eof;
+
+ return data;
+}
+
+std::vector<uint8_t> genBoardContents(const std::string& name)
+{
+ constexpr size_t headerSize = 4;
+ constexpr size_t snSize = 12;
+ constexpr size_t pnSize = 10;
+ const std::string version = "FRU Ver 0.01";
+ size_t contentSize = headerSize + 1 + name.size() + 1 + ibs.size() + 1 +
+ snSize + 1 + pnSize + 1 + version.size() + sizeof(eof);
+ std::vector<uint8_t> data(contentSize);
+ size_t offset = 0;
+ // chassis type (main server chassis)
+ data[offset++] = 0; // language code
+ data[offset++] = 0; // mfg date/time
+ data[offset++] = 0; // mfg date/time
+ data[offset++] = 0; // mfg date/time
+ // manufacturer name
+ offset += fillStr(data.begin() + offset, ibs);
+ // product name
+ offset += fillStr(data.begin() + offset, name);
+ // board sn
+ offset += fillDots(data.begin() + offset, snSize);
+ // board pn
+ offset += fillDots(data.begin() + offset, pnSize);
+ // fru version string
+ offset += fillStr(data.begin() + offset, version);
+ data[offset] = eof;
+
+ return data;
+}
+
+std::vector<uint8_t> genProductContents(const std::string& name)
+{
+ constexpr size_t headerSize = 1;
+ constexpr size_t pnSize = 10;
+ constexpr size_t pvSize = 20;
+ constexpr size_t snSize = 12;
+ constexpr size_t atSize = 20;
+ constexpr size_t idSize = 0;
+ const std::string version = "FRU Ver 0.01";
+ size_t contentSize = headerSize + 1 + ibs.size() + 1 + name.size() + 1 +
+ pnSize + 1 + pvSize + 1 + snSize + 1 + atSize + 1 +
+ idSize + sizeof(eof);
+ std::vector<uint8_t> data(contentSize);
+ size_t offset = 0;
+ // chassis type (main server chassis)
+ data[offset++] = 0; // language code
+ // manufacturer name
+ offset += fillStr(data.begin() + offset, ibs);
+ // product name
+ offset += fillStr(data.begin() + offset, name);
+ // product part number
+ offset += fillDots(data.begin() + offset, pnSize);
+ // product version
+ offset += fillDots(data.begin() + offset, pvSize);
+ // product serial number
+ offset += fillDots(data.begin() + offset, snSize);
+ // product asset tag
+ offset += fillDots(data.begin() + offset, atSize);
+ // empty fru file id
+ offset += fillDots(data.begin() + offset, idSize);
+ data[offset] = eof;
+
+ return data;
+}
+
+int createFru(const std::string& name)
+{
+ std::vector<uint8_t> internal{1, 0, 0, 0, 0, 0, 0, 1}; // fixed data
+ FruEntry chassis(genChassisContents());
+ FruEntry board(genBoardContents(name));
+ FruEntry product(genProductContents(name));
+ uint8_t offset = 1; // room for header's offset
+ FruEntry header({
+ offset += 1, // internal size
+ offset += chassis.blocks(),
+ offset += board.blocks(),
+ });
+ std::string filename = name + ".fru.bin";
+ std::ofstream output(filename);
+ std::ostream_iterator<uint8_t> outputIter(output);
+ std::copy(header.value.begin(), header.value.end(), outputIter);
+ std::copy(internal.begin(), internal.end(), outputIter);
+ std::copy(chassis.value.begin(), chassis.value.end(), outputIter);
+ std::copy(board.value.begin(), board.value.end(), outputIter);
+ std::copy(product.value.begin(), product.value.end(), outputIter);
+ constexpr size_t minFruSize = 0x1ff;
+ size_t fruSize = header.value.size() + internal.size() +
+ chassis.value.size() + board.value.size() +
+ product.value.size();
+ if (fruSize < minFruSize)
+ {
+ std::vector<uint8_t> padding(minFruSize - fruSize);
+ std::copy(padding.begin(), padding.end(), outputIter);
+ }
+ output.close();
+ return 0;
+}
+
+int main(int argc, const char* argv[])
+{
+ if (argc != 2)
+ {
+ std::cerr << "Usage: " << argv[0] << " <'Product Name'>\n";
+ return 1;
+ }
+ return createFru(argv[1]);
+}
diff --git a/meta-ibs/meta-common/recipes-phosphor/initrdscripts/obmc-phosphor-initfs.bbappend b/meta-ibs/meta-common/recipes-phosphor/initrdscripts/obmc-phosphor-initfs.bbappend
new file mode 100644
index 0000000000..61fefda887
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/initrdscripts/obmc-phosphor-initfs.bbappend
@@ -0,0 +1,5 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
+
+DESCRIPTION = "Pinging system watchdog before BMC update"
+
+SRC_URI += "file://obmc-shutdown.sh"
diff --git a/meta-ibs/meta-common/recipes-phosphor/initrdscripts/obmc-phosphor-initfs/obmc-shutdown.sh b/meta-ibs/meta-common/recipes-phosphor/initrdscripts/obmc-phosphor-initfs/obmc-shutdown.sh
new file mode 100644
index 0000000000..204665de7e
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/initrdscripts/obmc-phosphor-initfs/obmc-shutdown.sh
@@ -0,0 +1,108 @@
+#!/bin/sh
+
+echo shutdown: "$@"
+
+export PS1=shutdown-sh#\
+# exec bin/sh
+
+cd /
+if [ ! -e /proc/mounts ]
+then
+ mkdir -p /proc
+ mount proc /proc -tproc
+ umount_proc=1
+else
+ umount_proc=
+fi
+
+# Remove an empty oldroot, that means we are not invoked from systemd-shutdown
+rmdir /oldroot 2>/dev/null
+
+# Move /oldroot/run to /mnt in case it has the underlying rofs loop mounted.
+# Ordered before /oldroot the overlay is unmounted before the loop mount
+mkdir -p /mnt
+mount --move /oldroot/run /mnt
+
+set -x
+for f in $( awk '/oldroot|mnt/ { print $2 }' < /proc/mounts | sort -r )
+do
+ umount $f
+done
+set +x
+
+update=/run/initramfs/update
+image=/run/initramfs/image-
+
+swdt="-t 10 -T 60"
+wdt="-t 1 -T 5"
+wdrst="-T 15"
+
+if ls $image* > /dev/null 2>&1
+then
+ if test -x $update
+ then
+ if test -c /dev/watchdog1
+ then
+ echo Pinging BMC Hardware watchdog ${swdt+with args $swdt}
+ watchdog $swdt -F /dev/watchdog1 &
+ fi
+ if test -c /dev/watchdog
+ then
+ echo Pinging watchdog ${wdt+with args $wdt}
+ watchdog $wdt -F /dev/watchdog &
+ wd=$!
+ else
+ wd=
+ fi
+ $update --clean-saved-files
+ remaining=$(ls $image*)
+ if test -n "$remaining"
+ then
+ echo 1>&2 "Flash update failed to flash these images:"
+ echo 1>&2 "$remaining"
+ else
+ echo "Flash update completed."
+ fi
+
+ if test -n "$wd"
+ then
+ kill -9 $wd
+ if test -n "$wdrst"
+ then
+ echo Resetting watchdog timeouts to $wdrst
+ watchdog $wdrst -F /dev/watchdog &
+ sleep 1
+ # Kill the watchdog daemon, setting a timeout
+ # for the remaining shutdown work
+ kill -9 $!
+ fi
+ fi
+ else
+ echo 1>&2 "Flash update requested but $update program missing!"
+ fi
+fi
+
+echo Remaining mounts:
+cat /proc/mounts
+
+test "$umount_proc" && umount /proc && rmdir /proc
+
+# tcsattr(tty, TIOCDRAIN, mode) to drain tty messages to console
+test -t 1 && stty cooked 0<&1
+
+# Execute the command systemd told us to ...
+if test -d /oldroot && test "$1"
+then
+ if test "$1" = kexec
+ then
+ $1 -f -e
+ else
+ $1 -f
+ fi
+fi
+
+
+echo "Execute ${1-reboot} -f if all unmounted ok, or exec /init"
+
+export PS1=shutdown-sh#\
+exec /bin/sh
diff --git a/meta-ibs/meta-common/recipes-phosphor/interfaces/bmcweb-init-certs.bb b/meta-ibs/meta-common/recipes-phosphor/interfaces/bmcweb-init-certs.bb
new file mode 100644
index 0000000000..21e411143f
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/interfaces/bmcweb-init-certs.bb
@@ -0,0 +1,18 @@
+SUMMARY = "BMCWEB init Certificate"
+DESCRIPTION = "At first BMC boot the BMCWEB service can create expired or invalid certificate. \
+ This script should be run once at first BMC boot to reinstall default PEM-keys \
+ and remove corresponded Logging/Entries."
+
+inherit allarch
+
+RDEPENDS:${PN} = "bash"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://${IBSBASE}/COPYING.apache-2.0;md5=34400b68072d710fecd0a2940a0d1658"
+
+SRC_URI += "file://bmcweb-init-certs"
+
+do_install:append(){
+ install -d ${D}${bindir}
+ install -m 0755 ${WORKDIR}/bmcweb-init-certs ${D}${bindir}
+}
diff --git a/meta-ibs/meta-common/recipes-phosphor/interfaces/bmcweb-init-certs/bmcweb-init-certs b/meta-ibs/meta-common/recipes-phosphor/interfaces/bmcweb-init-certs/bmcweb-init-certs
new file mode 100644
index 0000000000..ea0d796f7d
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/interfaces/bmcweb-init-certs/bmcweb-init-certs
@@ -0,0 +1,66 @@
+#!/bin/sh -eu
+
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (C) 2022 IBS
+
+#
+# At first BMC boot the BMCWEB service can create expired or invalid certificate.
+# This script should be run once at first BMC boot to reinstall default PEM-keys
+# and remove corresponded Logging/Entries.
+#
+
+SSL_PATH="/etc/ssl/certs/https"
+PRIV_KEY_NAME="${SSL_PATH}/.rsaprivkey.pem"
+SERV_KEY_NAME="${SSL_PATH}/server.pem"
+
+HOST_NAME=`hostname`
+
+#
+# Remove Keys:
+#
+rm -f ${PRIV_KEY_NAME} ${SERV_KEY_NAME}
+
+#
+# Create new private PEM-key:
+#
+systemctl restart phosphor-certificate-manager@bmcweb.service
+
+count=0
+# wait for 5 minutes until the certificate manager creates the private PEM-key
+while [ ! -f ${PRIV_KEY_NAME} ] && [ ${count} -lt 300 ]
+do
+ count=$[ $count + 1]
+ sleep 1
+done
+
+#
+# Create new server PEM-key:
+#
+systemctl restart bmcweb.service
+
+count=0
+# wait for 5 minutes until the bmcweb creates the server PEM-key
+while [ ! -f ${PRIV_KEY_NAME} ] && [ ${count} -lt 300 ]
+do
+ count=$[ $count + 1]
+ sleep 1
+done
+
+#
+# Trigger the signal for bmcweb service:
+#
+busctl set-property xyz.openbmc_project.Network /xyz/openbmc_project/network/config xyz.openbmc_project.Network.SystemConfiguration HostName s "testhost"
+busctl set-property xyz.openbmc_project.Network /xyz/openbmc_project/network/config xyz.openbmc_project.Network.SystemConfiguration HostName s "${HOSTNAME}"
+
+#
+# Remove all 'xyz.openbmc_project.Certs.Error.InvalidCertificate' Logging Entries:
+#
+for eid in `ls /var/lib/phosphor-logging/errors/` ; do
+ if `grep -q xyz.openbmc_project.Certs.Error.InvalidCertificate "/var/lib/phosphor-logging/errors/${eid}"` ; then
+ message=`busctl get-property xyz.openbmc_project.Logging /xyz/openbmc_project/logging/entry/${eid} xyz.openbmc_project.Logging.Entry Message | sed 's,s "\(.*\)",\1,'`
+ if [ "${message}" = "xyz.openbmc_project.Certs.Error.InvalidCertificate" ] ; then
+ busctl call xyz.openbmc_project.Logging /xyz/openbmc_project/logging/entry/${eid} xyz.openbmc_project.Object.Delete Delete
+ fi
+ fi
+done
+
diff --git a/meta-ibs/meta-common/recipes-phosphor/interfaces/bmcweb/0001-Enable-vm-nbdproxy-option.patch b/meta-ibs/meta-common/recipes-phosphor/interfaces/bmcweb/0001-Enable-vm-nbdproxy-option.patch
new file mode 100644
index 0000000000..e738dcae15
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/interfaces/bmcweb/0001-Enable-vm-nbdproxy-option.patch
@@ -0,0 +1,47 @@
+From dd0744e05c5de4f4e7f462e6a1bf1da20cbee10d Mon Sep 17 00:00:00 2001
+From: kx <kx@radix.pro>
+Date: Tue, 10 May 2022 17:10:11 +0300
+Subject: [PATCH] Enable vm-nbdproxy option
+
+---
+ meson.build | 2 +-
+ meson_options.txt | 10 +++++-----
+ 2 files changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/meson.build b/meson.build
+index e8897b393..a38a20466 100644
+--- a/meson.build
++++ b/meson.build
+@@ -86,7 +86,7 @@ feature_map = {
+ 'static-hosting' : '-DBMCWEB_ENABLE_STATIC_HOSTING',
+ 'vm-websocket' : '-DBMCWEB_ENABLE_VM_WEBSOCKET',
+ 'xtoken-auth' : '-DBMCWEB_ENABLE_XTOKEN_AUTHENTICATION',
+- #'vm-nbdproxy' : '-DBMCWEB_ENABLE_VM_NBDPROXY',
++ 'vm-nbdproxy' : '-DBMCWEB_ENABLE_VM_NBDPROXY',
+ }
+
+ # Get the options status and build a project summary to show which flags are
+diff --git a/meson_options.txt b/meson_options.txt
+index d943222a4..799ebfc59 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -35,11 +35,11 @@ option(
+ # this interface, so for the moment this appears to be dead code; In leiu of
+ # removing it, it has been disabled to try to give those that use it the
+ # opportunity to upstream their backend implementation
+-#option(
+-# 'vm-nbdproxy',
+-# type: 'feature', value: 'disabled',
+-# description: 'Enable the Virtual Media WebSocket.'
+-#)
++option(
++ 'vm-nbdproxy',
++ type: 'feature', value: 'disabled',
++ description: 'Enable the Virtual Media WebSocket.'
++)
+
+ option(
+ 'rest',
+--
+2.35.1
+
diff --git a/meta-ibs/meta-common/recipes-phosphor/interfaces/bmcweb_%.bbappend b/meta-ibs/meta-common/recipes-phosphor/interfaces/bmcweb_%.bbappend
new file mode 100644
index 0000000000..683f52eec9
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/interfaces/bmcweb_%.bbappend
@@ -0,0 +1,13 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
+
+SRCREV = "550a6bf85f81c1725b6c320a5ee419335cff2cf6"
+
+SRC_URI += "\
+ file://0001-Enable-vm-nbdproxy-option.patch \
+ "
+
+EXTRA_OEMESON += "\
+ -Dredfish-cpu-log=enabled \
+ -Dredfish-bmc-journal=enabled \
+ -Drest=enabled \
+ "
diff --git a/meta-ibs/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host_%.bbappend b/meta-ibs/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host_%.bbappend
new file mode 100644
index 0000000000..eb6ee2fcbb
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host_%.bbappend
@@ -0,0 +1,5 @@
+do_install:append:ibs(){
+ install -d ${D}${includedir}/phosphor-ipmi-host
+ install -m 0644 -D ${S}/sensorhandler.hpp ${D}${includedir}/phosphor-ipmi-host
+ install -m 0644 -D ${S}/selutility.hpp ${D}${includedir}/phosphor-ipmi-host
+}
diff --git a/meta-ibs/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-ipmb/ipmb-channels.json b/meta-ibs/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-ipmb/ipmb-channels.json
new file mode 100644
index 0000000000..cf5a28303a
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-ipmb/ipmb-channels.json
@@ -0,0 +1,16 @@
+{
+ "channels": [
+ {
+ "type": "me",
+ "slave-path": "/dev/ipmb-5",
+ "bmc-addr": 32,
+ "remote-addr": 44
+ },
+ {
+ "type": "ipmb",
+ "slave-path": "/dev/ipmb-13",
+ "bmc-addr": 32,
+ "remote-addr": 56
+ }
+ ]
+}
diff --git a/meta-ibs/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-ipmb_%.bbappend b/meta-ibs/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-ipmb_%.bbappend
new file mode 100644
index 0000000000..29b98581fe
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-ipmb_%.bbappend
@@ -0,0 +1,8 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
+
+SRC_URI:append = " file://ipmb-channels.json"
+
+do_install:append(){
+ install -m 0644 -D ${WORKDIR}/ipmb-channels.json \
+ ${D}/usr/share/ipmbbridge
+}
diff --git a/meta-ibs/meta-common/recipes-phosphor/leds/ibs-led-manager-config-native.bb b/meta-ibs/meta-common/recipes-phosphor/leds/ibs-led-manager-config-native.bb
new file mode 100644
index 0000000000..2624e6d5e8
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/leds/ibs-led-manager-config-native.bb
@@ -0,0 +1,21 @@
+SUMMARY = "Phosphor LED Group Management for IBS"
+PR = "r1"
+
+inherit obmc-phosphor-utils
+inherit native
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://${IBSBASE}/COPYING.apache-2.0;md5=34400b68072d710fecd0a2940a0d1658"
+
+PROVIDES += "virtual/phosphor-led-manager-config-native"
+
+SRC_URI += "file://led.yaml"
+S = "${WORKDIR}"
+
+# Overwrite the example led layout yaml file prior
+# to building the phosphor-led-manager package
+do_install() {
+ SRC=${S}
+ DEST=${D}${datadir}/phosphor-led-manager
+ install -D ${SRC}/led.yaml ${DEST}/led.yaml
+}
diff --git a/meta-ibs/meta-common/recipes-phosphor/leds/ibs-led-manager-config/led.yaml b/meta-ibs/meta-common/recipes-phosphor/leds/ibs-led-manager-config/led.yaml
new file mode 100644
index 0000000000..533df68a4e
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/leds/ibs-led-manager-config/led.yaml
@@ -0,0 +1,48 @@
+bmc_booted:
+
+power_on:
+
+status_ok:
+ status_green:
+ Action: 'On'
+ status_amber:
+ Action: 'Off'
+
+status_degraded:
+ status_green:
+ Action: 'Blink'
+ DutyOn: 50
+ Period: 1000
+ status_amber:
+ Action: 'Off'
+
+status_non_critical:
+ status_green:
+ Action: 'Off'
+ status_amber:
+ Action: 'Blink'
+ DutyOn: 50
+ Period: 1000
+
+status_critical:
+ status_green:
+ Action: 'Off'
+ status_amber:
+ Action: 'On'
+
+enclosure_identify:
+ identify:
+ Action: 'On'
+
+enclosure_identify_blink:
+ identify:
+ Action: 'Blink'
+
+cpu0_fault:
+ cpu0fault:
+ Action: 'On'
+
+cpu1_fault:
+ cpu1fault:
+ Action: 'On'
+
diff --git a/meta-ibs/meta-common/recipes-phosphor/leds/id-led-off/id-led-off.service b/meta-ibs/meta-common/recipes-phosphor/leds/id-led-off/id-led-off.service
new file mode 100644
index 0000000000..51e59c6144
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/leds/id-led-off/id-led-off.service
@@ -0,0 +1,11 @@
+[Unit]
+Description=turn off the ID LED when BMC is ready
+Wants=multi-user.target
+After=multi-user.target
+
+[Service]
+Type=oneshot
+ExecStart=/usr/bin/id-led-off.sh
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-ibs/meta-common/recipes-phosphor/leds/id-led-off/id-led-off.sh b/meta-ibs/meta-common/recipes-phosphor/leds/id-led-off/id-led-off.sh
new file mode 100755
index 0000000000..b609fc0ea8
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/leds/id-led-off/id-led-off.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+busctl set-property "xyz.openbmc_project.LED.GroupManager" \
+"/xyz/openbmc_project/led/groups/enclosure_identify" \
+"xyz.openbmc_project.Led.Group" "Asserted" b false
+
+busctl set-property "xyz.openbmc_project.LED.GroupManager" \
+"/xyz/openbmc_project/led/groups/enclosure_identify_blink" \
+"xyz.openbmc_project.Led.Group" "Asserted" b false
+
+busctl set-property "xyz.openbmc_project.LED.Controller.identify" \
+"/xyz/openbmc_project/led/physical/identify" \
+"xyz.openbmc_project.Led.Physical" "State" s "xyz.openbmc_project.Led.Physical.Action.Off"
diff --git a/meta-ibs/meta-common/recipes-phosphor/leds/id-led-off_git.bb b/meta-ibs/meta-common/recipes-phosphor/leds/id-led-off_git.bb
new file mode 100644
index 0000000000..6dc1a4306d
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/leds/id-led-off_git.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Turn off the ID LED"
+DESCRIPTION = "Script to turn off the ID LED after BMC is ready"
+
+S = "${WORKDIR}"
+SRC_URI = "file://id-led-off.sh \
+ file://id-led-off.service \
+ "
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://${IBSBASE}/COPYING.apache-2.0;md5=34400b68072d710fecd0a2940a0d1658"
+RDEPENDS:${PN} += "bash"
+
+inherit systemd
+
+FILES:${PN} += "${systemd_system_unitdir}/id-led-off.service"
+
+do_install() {
+ install -d ${D}${systemd_system_unitdir}
+ install -m 0644 ${WORKDIR}/id-led-off.service ${D}${systemd_system_unitdir}
+ install -d ${D}${bindir}
+ install -m 0755 ${S}/id-led-off.sh ${D}/${bindir}/id-led-off.sh
+}
+
+SYSTEMD_SERVICE:${PN} += " id-led-off.service"
diff --git a/meta-ibs/meta-common/recipes-phosphor/leds/phosphor-led-manager_%.bbappend b/meta-ibs/meta-common/recipes-phosphor/leds/phosphor-led-manager_%.bbappend
new file mode 100644
index 0000000000..312ec6706c
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/leds/phosphor-led-manager_%.bbappend
@@ -0,0 +1,11 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
+
+RDEPENDS:${PN}:remove = "clear-once"
+
+do_compile:prepend(){
+ install -m 0644 ${STAGING_DATADIR_NATIVE}/${PN}/led.yaml ${S}
+}
+
+do_install:append(){
+ rm -f ${S}/led.yaml
+}
diff --git a/meta-ibs/meta-common/recipes-phosphor/phosphor-u-boot-mgr/phosphor-u-boot-mgr_git.bb b/meta-ibs/meta-common/recipes-phosphor/phosphor-u-boot-mgr/phosphor-u-boot-mgr_git.bb
new file mode 100644
index 0000000000..d5c3578168
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/phosphor-u-boot-mgr/phosphor-u-boot-mgr_git.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Phosphor U-Boot environment manager"
+DESCRIPTION = "Daemon to read or write U-Boot environment variables"
+
+PV = "1.0+git${SRCPV}"
+
+S = "${WORKDIR}/git"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327"
+
+SRC_URI = "git://github.com/openbmc/phosphor-u-boot-env-mgr.git;branch=master;protocol=https"
+
+SRCREV = "1979d3b31a96e9359402ac4d7867ec5dddbece7e"
+
+inherit pkgconfig cmake systemd
+SYSTEMD_SERVICE:${PN} = "xyz.openbmc_project.U_Boot.Environment.Manager.service"
+
+DEPENDS = "boost sdbusplus phosphor-logging"
diff --git a/meta-ibs/meta-common/recipes-phosphor/virtual-media/virtual-media.bb b/meta-ibs/meta-common/recipes-phosphor/virtual-media/virtual-media.bb
new file mode 100644
index 0000000000..e1846d66d3
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/virtual-media/virtual-media.bb
@@ -0,0 +1,25 @@
+SUMMARY = "Virtual Media Service"
+DESCRIPTION = "Virtual Media Service"
+
+SRC_URI = "git://github.com/Intel-BMC/virtual-media.git;branch=main;protocol=https"
+#SRCREV = "6165e07cd0ef6da314ed1ef4f58fe47b7d8112db"
+SRCREV = "ed2aceab6ee059a40d939ea21364bc18ec80d94b"
+
+S = "${WORKDIR}/git"
+PV = "1.0+git${SRCPV}"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://${S}/LICENSE;md5=e3fc50a88d0a364313df4b21ef20c29e"
+
+SYSTEMD_SERVICE:${PN} += "xyz.openbmc_project.VirtualMedia.service"
+
+DEPENDS = "udev boost nlohmann-json systemd sdbusplus"
+
+RDEPENDS:${PN} = "nbd-client nbdkit"
+
+inherit cmake systemd
+
+EXTRA_OECMAKE += "-DYOCTO_DEPENDENCIES=ON"
+EXTRA_OECMAKE += "-DLEGACY_MODE_ENABLED=ON"
+
+FULL_OPTIMIZATION = "-Os -pipe -flto -fno-rtti"
diff --git a/meta-ibs/meta-common/recipes-phosphor/watchdog/frb2-watchdog.bb b/meta-ibs/meta-common/recipes-phosphor/watchdog/frb2-watchdog.bb
new file mode 100644
index 0000000000..26a0fb2383
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/watchdog/frb2-watchdog.bb
@@ -0,0 +1,35 @@
+
+SUMMARY = "FRB2 timer service"
+DESCRIPTION = "The FRB2 timer service will monitor the mailbox register 0\
+and start a watchdog for FRB2 if the data is 1(BIOS will write this value)"
+
+SRC_URI = "\
+ file://CMakeLists.txt \
+ file://frb2-watchdog.cpp \
+ "
+PV = "0.1"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://${IBSBASE}/COPYING.apache-2.0;md5=34400b68072d710fecd0a2940a0d1658"
+
+S = "${WORKDIR}"
+
+inherit cmake
+inherit pkgconfig
+
+DEPENDS += " \
+ systemd \
+ sdbusplus \
+ sdbusplus-native \
+ phosphor-logging \
+ phosphor-dbus-interfaces \
+ phosphor-dbus-interfaces-native \
+ boost \
+ "
+
+RDEPENDS:${PN} += " \
+ libsystemd \
+ sdbusplus \
+ phosphor-logging \
+ phosphor-dbus-interfaces \
+ "
diff --git a/meta-ibs/meta-common/recipes-phosphor/watchdog/frb2-watchdog/.clang-format b/meta-ibs/meta-common/recipes-phosphor/watchdog/frb2-watchdog/.clang-format
new file mode 100644
index 0000000000..dd27708378
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/watchdog/frb2-watchdog/.clang-format
@@ -0,0 +1,98 @@
+---
+Language: Cpp
+# BasedOnStyle: LLVM
+AccessModifierOffset: -2
+AlignAfterOpenBracket: Align
+AlignConsecutiveAssignments: false
+AlignConsecutiveDeclarations: false
+AlignEscapedNewlinesLeft: false
+AlignOperands: true
+AlignTrailingComments: true
+AllowAllParametersOfDeclarationOnNextLine: true
+AllowShortBlocksOnASingleLine: false
+AllowShortCaseLabelsOnASingleLine: false
+AllowShortFunctionsOnASingleLine: None
+AllowShortIfStatementsOnASingleLine: false
+AllowShortLoopsOnASingleLine: false
+AlwaysBreakAfterDefinitionReturnType: None
+AlwaysBreakAfterReturnType: None
+AlwaysBreakBeforeMultilineStrings: false
+AlwaysBreakTemplateDeclarations: false
+BinPackArguments: true
+BinPackParameters: true
+BraceWrapping:
+ AfterClass: true
+ AfterControlStatement: true
+ AfterEnum: true
+ AfterFunction: true
+ AfterNamespace: true
+ AfterObjCDeclaration: true
+ AfterStruct: true
+ AfterUnion: true
+ BeforeCatch: true
+ BeforeElse: true
+ IndentBraces: false
+BreakBeforeBinaryOperators: None
+BreakBeforeBraces: Custom
+BreakBeforeTernaryOperators: true
+BreakConstructorInitializers: AfterColon
+ColumnLimit: 80
+CommentPragmas: '^ IWYU pragma:'
+ConstructorInitializerAllOnOneLineOrOnePerLine: false
+ConstructorInitializerIndentWidth: 4
+ContinuationIndentWidth: 4
+Cpp11BracedListStyle: true
+DerivePointerAlignment: true
+PointerAlignment: Left
+DisableFormat: false
+ExperimentalAutoDetectBinPacking: false
+FixNamespaceComments: true
+ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ]
+IncludeBlocks: Regroup
+IncludeCategories:
+ - Regex: '^[<"](gtest|gmock)'
+ Priority: 5
+ - Regex: '^"config.h"'
+ Priority: -1
+ - Regex: '^".*\.hpp"'
+ Priority: 1
+ - Regex: '^<.*\.h>'
+ Priority: 2
+ - Regex: '^<.*'
+ Priority: 3
+ - Regex: '.*'
+ Priority: 4
+IndentCaseLabels: true
+IndentWidth: 4
+IndentWrappedFunctionNames: true
+KeepEmptyLinesAtTheStartOfBlocks: true
+MacroBlockBegin: ''
+MacroBlockEnd: ''
+MaxEmptyLinesToKeep: 1
+NamespaceIndentation: None
+ObjCBlockIndentWidth: 2
+ObjCSpaceAfterProperty: false
+ObjCSpaceBeforeProtocolList: true
+PenaltyBreakBeforeFirstCallParameter: 19
+PenaltyBreakComment: 300
+PenaltyBreakFirstLessLess: 120
+PenaltyBreakString: 1000
+PenaltyExcessCharacter: 1000000
+PenaltyReturnTypeOnItsOwnLine: 60
+PointerAlignment: Right
+ReflowComments: true
+SortIncludes: true
+SpaceAfterCStyleCast: false
+SpaceBeforeAssignmentOperators: true
+SpaceBeforeParens: ControlStatements
+SpaceInEmptyParentheses: false
+SpacesBeforeTrailingComments: 1
+SpacesInAngles: false
+SpacesInContainerLiterals: true
+SpacesInCStyleCastParentheses: false
+SpacesInParentheses: false
+SpacesInSquareBrackets: false
+Standard: Cpp11
+TabWidth: 4
+UseTab: Never
+...
diff --git a/meta-ibs/meta-common/recipes-phosphor/watchdog/frb2-watchdog/CMakeLists.txt b/meta-ibs/meta-common/recipes-phosphor/watchdog/frb2-watchdog/CMakeLists.txt
new file mode 100644
index 0000000000..bd5567d31a
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/watchdog/frb2-watchdog/CMakeLists.txt
@@ -0,0 +1,52 @@
+cmake_minimum_required (VERSION 3.5 FATAL_ERROR)
+project (frb2-watchdog CXX)
+set (CMAKE_CXX_STANDARD 17)
+set (CMAKE_CXX_STANDARD_REQUIRED ON)
+set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti")
+set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-rtti")
+
+include_directories (${CMAKE_CURRENT_SOURCE_DIR})
+
+# boost support
+find_package (Boost REQUIRED)
+# pkg_check_modules(Boost boost REQUIRED)
+include_directories (${Boost_INCLUDE_DIRS})
+add_definitions (-DBOOST_ERROR_CODE_HEADER_ONLY)
+add_definitions (-DBOOST_SYSTEM_NO_DEPRECATED)
+add_definitions (-DBOOST_ALL_NO_LIB)
+add_definitions (-DBOOST_NO_RTTI)
+add_definitions (-DBOOST_NO_TYPEID)
+add_definitions (-DBOOST_ASIO_DISABLE_THREADS)
+
+# import libsystemd
+find_package (PkgConfig REQUIRED)
+pkg_check_modules (SYSTEMD libsystemd REQUIRED)
+include_directories (${SYSTEMD_INCLUDE_DIRS})
+link_directories (${SYSTEMD_LIBRARY_DIRS})
+
+# import sdbusplus
+find_package (PkgConfig REQUIRED)
+pkg_check_modules (SDBUSPLUSPLUS sdbusplus REQUIRED)
+include_directories (${SDBUSPLUSPLUS_INCLUDE_DIRS})
+link_directories (${SDBUSPLUSPLUS_LIBRARY_DIRS})
+
+# import phosphor-logging
+find_package (PkgConfig REQUIRED)
+pkg_check_modules (LOGGING phosphor-logging REQUIRED)
+include_directories (${LOGGING_INCLUDE_DIRS})
+link_directories (${LOGGING_LIBRARY_DIRS})
+
+# import phosphor-dbus-interfaces
+find_package (PkgConfig REQUIRED)
+pkg_check_modules (DBUSINTERFACE phosphor-dbus-interfaces REQUIRED)
+include_directories (${DBUSINTERFACE_INCLUDE_DIRS})
+link_directories (${DBUSINTERFACE_LIBRARY_DIRS})
+
+add_executable (frb2-watchdog frb2-watchdog.cpp)
+
+target_link_libraries (${PROJECT_NAME} systemd)
+target_link_libraries (${PROJECT_NAME} ${Boost_LIBRARIES})
+target_link_libraries (${PROJECT_NAME} ${SDBUSPLUSPLUS_LIBRARIES})
+target_link_libraries (${PROJECT_NAME} ${DBUSINTERFACE_LIBRARIES}
+ phosphor_logging)
+install (TARGETS frb2-watchdog DESTINATION bin)
diff --git a/meta-ibs/meta-common/recipes-phosphor/watchdog/frb2-watchdog/cmake-format.json b/meta-ibs/meta-common/recipes-phosphor/watchdog/frb2-watchdog/cmake-format.json
new file mode 100644
index 0000000000..583c255a33
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/watchdog/frb2-watchdog/cmake-format.json
@@ -0,0 +1,12 @@
+{
+ "enum_char": ".",
+ "line_ending": "unix",
+ "bullet_char": "*",
+ "max_subargs_per_line": 99,
+ "command_case": "lower",
+ "tab_size": 4,
+ "line_width": 80,
+ "separate_fn_name_with_space": true,
+ "dangle_parens": true,
+ "separate_ctrl_name_with_space": true
+} \ No newline at end of file
diff --git a/meta-ibs/meta-common/recipes-phosphor/watchdog/frb2-watchdog/frb2-watchdog.cpp b/meta-ibs/meta-common/recipes-phosphor/watchdog/frb2-watchdog/frb2-watchdog.cpp
new file mode 100644
index 0000000000..792e564d9c
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/watchdog/frb2-watchdog/frb2-watchdog.cpp
@@ -0,0 +1,257 @@
+/* Copyright 2018 Intel
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <fcntl.h>
+#include <stdlib.h>
+#include <sys/ioctl.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include <boost/container/flat_set.hpp>
+#include <cassert>
+#include <cstdint>
+#include <cstring>
+#include <iostream>
+#include <memory>
+#include <optional>
+#include <phosphor-logging/log.hpp>
+#include <sdbusplus/asio/object_server.hpp>
+#include <sdbusplus/bus.hpp>
+#include <sdbusplus/bus/match.hpp>
+#include <sdbusplus/message.hpp>
+#include <sdbusplus/timer.hpp>
+#include <vector>
+#include <xyz/openbmc_project/State/Watchdog/server.hpp>
+
+void handleResponse(const boost::system::error_code &err,
+ std::size_t bytes_transferred);
+
+static int mailboxDevFd = -1;
+
+static boost::asio::io_service io;
+static auto conn = std::make_shared<sdbusplus::asio::connection>(io);
+boost::asio::ip::tcp::socket mailBoxDevSocket(io);
+boost::asio::deadline_timer pollTimer(io);
+boost::asio::posix::stream_descriptor inputDevice(io);
+
+// mailbox registre data[0:0] for FRB2 enable bit
+boost::asio::streambuf readBuf(1);
+std::string dataRead;
+
+// FRB2 watchdog timeout is 6 minutes
+static constexpr unsigned int frb2TimerIntervalMs = 360 * 1000;
+
+// mailbox device polling time interval is 2 seconds
+static constexpr unsigned int pollMs = 2000;
+
+static constexpr unsigned int frb2Started = 1;
+static constexpr unsigned int frb2Stopped = 0;
+
+// FRB2 status
+static uint8_t frb2Status = frb2Stopped;
+
+static constexpr const char *mailboxDevName = "/dev/aspeed-mbox";
+
+static constexpr const char frb2Bus[] = "xyz.openbmc_project.FRB2";
+static constexpr const char frb2Obj[] = "/xyz/openbmc_project/FRB2";
+static constexpr const char frb2Intf[] = "xyz.openbmc_project.FRB2";
+
+static constexpr char powerBus[] = "xyz.openbmc_project.Chassis.Control.Power";
+static constexpr char powerPath[] =
+ "/xyz/openbmc_project/Chassis/Control/Power0";
+static constexpr char powerIntf[] = "xyz.openbmc_project.Chassis.Control.Power";
+
+static constexpr char wdBus[] = "xyz.openbmc_project.Watchdog";
+static constexpr char wdPath[] = "/xyz/openbmc_project/watchdog/host0";
+static constexpr char wdIntf[] = "xyz.openbmc_project.State.Watchdog";
+static constexpr char propIntf[] = "org.freedesktop.DBus.Properties";
+
+typedef boost::asio::buffers_iterator<boost::asio::const_buffers_1> iterator;
+
+// check if FRB2 bit is 0x1
+std::pair<iterator, bool> matchFRB2(iterator begin, iterator end)
+{
+ unsigned char ch = 0;
+ iterator i = begin;
+
+ while (i != end)
+ {
+ ch = static_cast<unsigned char>(*i);
+ if (ch & 0x1)
+ {
+ return std::make_pair(i, true);
+ }
+ i++;
+ }
+
+ return std::make_pair(i, false);
+}
+
+static void startRead()
+{
+ boost::asio::async_read_until(inputDevice, readBuf, matchFRB2,
+ [&](const boost::system::error_code &ec,
+ std::size_t bytes_transferred) {
+ handleResponse(ec, bytes_transferred);
+ });
+}
+
+template <typename T> void setProperty(const std::string &key, const T &val)
+{
+ phosphor::logging::log<phosphor::logging::level::DEBUG>(
+ "setProperty", phosphor::logging::entry("KEY=%s", key.c_str()));
+
+ try
+ {
+ conn->async_method_call(
+ [](const boost::system::error_code &err) {
+ if (err)
+ {
+ phosphor::logging::log<phosphor::logging::level::ERR>(
+ "async_method_call error!",
+ phosphor::logging::entry(
+ "ERROR=%s",
+ boost::system::system_error(err).what()));
+ }
+ },
+ wdBus, wdPath, propIntf, "Set", wdIntf, key, std::variant<T>(val));
+ }
+ catch (sdbusplus::exception::SdBusError &e)
+ {
+ phosphor::logging::log<phosphor::logging::level::ERR>(
+ "Dbus error!", phosphor::logging::entry("ERROR=%s", e.what()));
+ }
+}
+void handleResponse(const boost::system::error_code &err,
+ std::size_t bytes_transferred)
+{
+ std::istream responseStream(&readBuf);
+ std::string response;
+ int n = 0;
+ uint64_t interval = frb2TimerIntervalMs;
+
+ std::getline(responseStream, response);
+ responseStream.clear();
+
+ if (err == boost::system::errc::bad_file_descriptor)
+ {
+
+ phosphor::logging::log<phosphor::logging::level::DEBUG>(
+ "bad file descriptor");
+ return; // we're being destroyed
+ }
+
+ if (!err)
+ {
+ // FRB2 is set by BIOS
+ if (frb2Stopped == frb2Status)
+ {
+ // start FRB2 watchdog
+ frb2Status = frb2Started;
+ phosphor::logging::log<phosphor::logging::level::DEBUG>(
+ "FRB2 enable, start FRB2 watchdog");
+ setProperty(
+ "ExpireAction",
+ std::string(
+ "xyz.openbmc_project.State.Watchdog.Action.HardReset"));
+ setProperty("Interval", interval);
+ setProperty("TimeRemaining", interval);
+ setProperty("Initialized", true);
+ setProperty("Enabled", true);
+ }
+ }
+ else if (err == boost::asio::error::misc_errors::not_found)
+ {
+ // FRB2 is clear, stop FRB2 watchdog if it is started
+ if (frb2Started == frb2Status)
+ {
+ frb2Status = frb2Stopped;
+ phosphor::logging::log<phosphor::logging::level::DEBUG>(
+ "FRB2 is unset, stop FRB2 watchdog");
+ setProperty("Enabled", false);
+ }
+ }
+ else
+ {
+ phosphor::logging::log<phosphor::logging::level::ERR>(
+ "handleResponse error!",
+ phosphor::logging::entry("ERROR=%s",
+ boost::system::system_error(err).what()));
+ }
+
+ pollTimer.expires_from_now(boost::posix_time::milliseconds(pollMs));
+ pollTimer.async_wait(
+ [](const boost::system::error_code &ec) { startRead(); });
+}
+
+int main(int argc, char **argv)
+{
+ phosphor::logging::log<phosphor::logging::level::DEBUG>(
+ "Monitor FRB2 signal");
+
+ sdbusplus::bus::match_t biosPostSignal(
+ static_cast<sdbusplus::bus::bus &>(*conn),
+ sdbusplus::bus::match::rules::type::signal() +
+ sdbusplus::bus::match::rules::member("PostCompleted") +
+ sdbusplus::bus::match::rules::path(powerPath) +
+ sdbusplus::bus::match::rules::interface(powerIntf),
+ [](sdbusplus::message::message &msg) {
+ uint8_t value = 0;
+ ssize_t rc = 0;
+ phosphor::logging::log<phosphor::logging::level::INFO>(
+ "BIOS post completed signal");
+ // stop FRB2 and clean mailbox
+ value = 0;
+ rc = ::pwrite(mailboxDevFd, &value, 1, 0);
+ if (rc != 1)
+ {
+ phosphor::logging::log<phosphor::logging::level::ERR>(
+ "mailbox write error!");
+ }
+ setProperty("Enabled", false);
+ frb2Status = frb2Stopped;
+ return;
+ });
+
+ conn->request_name(frb2Bus);
+
+ auto server = sdbusplus::asio::object_server(conn);
+
+ std::shared_ptr<sdbusplus::asio::dbus_interface> frb2Iface =
+ server.add_interface(frb2Obj, frb2Intf);
+
+ frb2Iface->register_property("frb2Status", frb2Status);
+
+ frb2Iface->initialize();
+
+ mailboxDevFd = ::open(mailboxDevName, O_RDWR | O_CLOEXEC);
+ if (mailboxDevFd < 0)
+ {
+ phosphor::logging::log<phosphor::logging::level::ERR>(
+ "mailbox device open fail!");
+ return -1;
+ }
+
+ inputDevice.assign(mailboxDevFd);
+
+ startRead();
+
+ io.run();
+
+ ::close(mailboxDevFd);
+
+ return 0;
+}
diff --git a/meta-ibs/meta-common/recipes-phosphor/watchdog/phosphor-watchdog/0001-Customize-phosphor-watchdog-for-Intel-platforms.patch b/meta-ibs/meta-common/recipes-phosphor/watchdog/phosphor-watchdog/0001-Customize-phosphor-watchdog-for-Intel-platforms.patch
new file mode 100644
index 0000000000..14aeb56ba4
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/watchdog/phosphor-watchdog/0001-Customize-phosphor-watchdog-for-Intel-platforms.patch
@@ -0,0 +1,348 @@
+From 854d461fc96bf4f76249e538065c4d1d9f61d3f8 Mon Sep 17 00:00:00 2001
+From: James Feist <james.feist@linux.intel.com>
+Date: Mon, 17 Jun 2019 12:00:58 -0700
+Subject: [PATCH] Customize phosphor-watchdog for Intel platforms
+
+This patch adds various changes to phosphor-watchdog that are
+required for compatibility with Intel platforms.
+
+ 1. Add Redfish messages for watchdog timeout and pre-interrupt
+ 2. Use dbus properties for power control insted of service files
+ 3. Use host status to enable/disable watchdog
+ 4. Set preTimeoutInterruptOccurFlag
+ 5. Assign watchdog cause for correct reset cause reporting
+ 6. Add NMI Pre-Interrupt support for IPMI watchdog timer.
+
+Signed-off-by: James Feist <james.feist@linux.intel.com>
+Signed-off-by: Ren Yu <yux.ren@intel.com>
+Signed-off-by: Yong Li <yong.b.li@linux.intel.com>
+Signed-off-by: Jason M. Bills <jason.m.bills@linux.intel.com>
+Signed-off-by: Johnathan Mantey <johnathanx.mantey@intel.com>
+Signed-off-by: Sunita Kumari <sunitax.kumari@intel.com>
+
+%% original patch: 0001-Customize-phosphor-watchdog-for-Intel-platforms.patch
+---
+ src/watchdog.cpp | 229 ++++++++++++++++++++++++++++++++++++++++++++---
+ src/watchdog.hpp | 22 ++++-
+ 2 files changed, 240 insertions(+), 11 deletions(-)
+
+diff --git a/src/watchdog.cpp b/src/watchdog.cpp
+index 05a95e9..ea94082 100644
+--- a/src/watchdog.cpp
++++ b/src/watchdog.cpp
+@@ -5,8 +5,10 @@
+ #include <phosphor-logging/elog.hpp>
+ #include <phosphor-logging/log.hpp>
+ #include <sdbusplus/exception.hpp>
++#include <systemd/sd-journal.h>
+ #include <string_view>
+ #include <xyz/openbmc_project/Common/error.hpp>
++#include <xyz/openbmc_project/State/Host/server.hpp>
+
+ namespace phosphor
+ {
+@@ -18,10 +20,86 @@ using namespace phosphor::logging;
+
+ using sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure;
+
+-// systemd service to kick start a target.
+-constexpr auto SYSTEMD_SERVICE = "org.freedesktop.systemd1";
+-constexpr auto SYSTEMD_ROOT = "/org/freedesktop/systemd1";
+-constexpr auto SYSTEMD_INTERFACE = "org.freedesktop.systemd1.Manager";
++const static constexpr char* currentHostState = "CurrentHostState";
++const static constexpr char* hostStatusOff =
++ "xyz.openbmc_project.State.Host.HostState.Off";
++
++const static constexpr char* actionDescription = " due to Watchdog timeout";
++const static constexpr char* hardResetDescription = "Hard Reset - System reset";
++const static constexpr char* powerOffDescription =
++ "Power Down - System power down";
++const static constexpr char* powerCycleDescription =
++ "Power Cycle - System power cycle";
++const static constexpr char* timerExpiredDescription = "Timer expired";
++
++const static constexpr char* preInterruptActionNone =
++ "xyz.openbmc_project.State.Watchdog.PreTimeoutInterruptAction.None";
++
++const static constexpr char* preInterruptDescriptionSMI = "SMI";
++const static constexpr char* preInterruptDescriptionNMI = "NMI";
++const static constexpr char* preInterruptDescriptionMI = "Messaging Interrupt";
++
++const static constexpr char* reservedDescription = "Reserved";
++
++const static constexpr char* timerUseDescriptionBIOSFRB2 = "BIOS FRB2";
++const static constexpr char* timerUseDescriptionBIOSPOST = "BIOS/POST";
++const static constexpr char* timerUseDescriptionOSLoad = "OSLoad";
++const static constexpr char* timerUseDescriptionSMSOS = "SMS/OS";
++const static constexpr char* timerUseDescriptionOEM = "OEM";
++
++namespace restart
++{
++static constexpr const char* busName =
++ "xyz.openbmc_project.Control.Host.RestartCause";
++static constexpr const char* path =
++ "/xyz/openbmc_project/control/host0/restart_cause";
++static constexpr const char* interface =
++ "xyz.openbmc_project.Control.Host.RestartCause";
++static constexpr const char* property = "RequestedRestartCause";
++} // namespace restart
++
++// chassis state manager service
++namespace chassis
++{
++static constexpr const char* busName = "xyz.openbmc_project.State.Chassis";
++static constexpr const char* path = "/xyz/openbmc_project/state/chassis0";
++static constexpr const char* interface = "xyz.openbmc_project.State.Chassis";
++static constexpr const char* request = "RequestedPowerTransition";
++} // namespace chassis
++
++namespace host
++{
++static constexpr const char* busName = "xyz.openbmc_project.State.Host";
++static constexpr const char* path = "/xyz/openbmc_project/state/host0";
++static constexpr const char* interface = "xyz.openbmc_project.State.Host";
++static constexpr const char* request = "RequestedHostTransition";
++} // namespace host
++
++namespace nmi
++{
++static constexpr const char* busName = "xyz.openbmc_project.Control.Host.NMI";
++static constexpr const char* path = "/xyz/openbmc_project/control/host0/nmi";
++static constexpr const char* interface = "xyz.openbmc_project.Control.Host.NMI";
++static constexpr const char* request = "NMI";
++
++} // namespace nmi
++
++void Watchdog::powerStateChangedHandler(
++ const std::map<std::string, std::variant<std::string>>& props)
++{
++ const auto iter = props.find(currentHostState);
++ if (iter != props.end())
++ {
++ const std::string* powerState = std::get_if<std::string>(&iter->second);
++ if (powerState && (*powerState == hostStatusOff))
++ {
++ if (timerEnabled())
++ {
++ enabled(false);
++ }
++ }
++ }
++}
+
+ void Watchdog::resetTimeRemaining(bool enableWatchdog)
+ {
+@@ -107,13 +185,111 @@ uint64_t Watchdog::interval(uint64_t value)
+ // Optional callback function on timer expiration
+ void Watchdog::timeOutHandler()
+ {
++ PreTimeoutInterruptAction preTimeoutInterruptAction = preTimeoutInterrupt();
++ std::string preInterruptActionMessageArgs{};
++
+ Action action = expireAction();
++ std::string actionMessageArgs{};
++
++ expiredTimerUse(currentTimerUse());
++
++ TimerUse timeUser = expiredTimerUse();
++ std::string timeUserMessage{};
++
+ if (!this->enabled())
+ {
+ action = fallback->action;
+ }
+
+- expiredTimerUse(currentTimerUse());
++ switch (timeUser)
++ {
++ case Watchdog::TimerUse::BIOSFRB2:
++ timeUserMessage = timerUseDescriptionBIOSFRB2;
++ break;
++ case Watchdog::TimerUse::BIOSPOST:
++ timeUserMessage = timerUseDescriptionBIOSPOST;
++ break;
++ case Watchdog::TimerUse::OSLoad:
++ timeUserMessage = timerUseDescriptionOSLoad;
++ break;
++ case Watchdog::TimerUse::SMSOS:
++ timeUserMessage = timerUseDescriptionSMSOS;
++ break;
++ case Watchdog::TimerUse::OEM:
++ timeUserMessage = timerUseDescriptionOEM;
++ break;
++ default:
++ timeUserMessage = reservedDescription;
++ break;
++ }
++
++ switch (action)
++ {
++ case Watchdog::Action::HardReset:
++ actionMessageArgs = std::string(hardResetDescription) +
++ std::string(actionDescription);
++ break;
++ case Watchdog::Action::PowerOff:
++ actionMessageArgs = std::string(powerOffDescription) +
++ std::string(actionDescription);
++ break;
++ case Watchdog::Action::PowerCycle:
++ actionMessageArgs = std::string(powerCycleDescription) +
++ std::string(actionDescription);
++ break;
++ case Watchdog::Action::None:
++ actionMessageArgs = timerExpiredDescription;
++ break;
++ default:
++ actionMessageArgs = reservedDescription;
++ break;
++ }
++
++ // Log into redfish event log
++ sd_journal_send("MESSAGE=IPMIWatchdog: Timed out ACTION=%s",
++ convertForMessage(action).c_str(), "PRIORITY=%i", LOG_INFO,
++ "REDFISH_MESSAGE_ID=%s", "OpenBMC.0.1.IPMIWatchdog",
++ "REDFISH_MESSAGE_ARGS=%s. timer use: %s",
++ actionMessageArgs.c_str(), timeUserMessage.c_str(), NULL);
++
++ switch (preTimeoutInterruptAction)
++ {
++ case Watchdog::PreTimeoutInterruptAction::SMI:
++ preInterruptActionMessageArgs = preInterruptDescriptionSMI;
++ break;
++ case Watchdog::PreTimeoutInterruptAction::NMI:
++ preInterruptActionMessageArgs = preInterruptDescriptionNMI;
++ break;
++ case Watchdog::PreTimeoutInterruptAction::MI:
++ preInterruptActionMessageArgs = preInterruptDescriptionMI;
++ break;
++ default:
++ preInterruptActionMessageArgs = reservedDescription;
++ break;
++ }
++
++ if (preInterruptActionNone != convertForMessage(preTimeoutInterruptAction))
++ {
++ preTimeoutInterruptOccurFlag(true);
++
++ sd_journal_send("MESSAGE=IPMIWatchdog: Pre Timed out Interrupt=%s",
++ convertForMessage(preTimeoutInterruptAction).c_str(),
++ "PRIORITY=%i", LOG_INFO, "REDFISH_MESSAGE_ID=%s",
++ "OpenBMC.0.1.IPMIWatchdog",
++ "REDFISH_MESSAGE_ARGS=Timer interrupt - %s due to "
++ "Watchdog timeout. timer use: %s",
++ preInterruptActionMessageArgs.c_str(),
++ timeUserMessage.c_str(), NULL);
++
++ if (preTimeoutInterruptAction ==
++ Watchdog::PreTimeoutInterruptAction::NMI)
++ {
++ sdbusplus::message::message preTimeoutInterruptHandler;
++ preTimeoutInterruptHandler = bus.new_method_call(
++ nmi::busName, nmi::path, nmi::interface, nmi::request);
++ bus.call_noreply(preTimeoutInterruptHandler);
++ }
++ }
+
+ auto target = actionTargetMap.find(action);
+ if (target == actionTargetMap.end())
+@@ -146,12 +322,45 @@ void Watchdog::timeOutHandler()
+
+ try
+ {
+- auto method = bus.new_method_call(SYSTEMD_SERVICE, SYSTEMD_ROOT,
+- SYSTEMD_INTERFACE, "StartUnit");
+- method.append(target->second);
+- method.append("replace");
++ sdbusplus::message::message method;
++ if (action == Watchdog::Action::HardReset)
++ {
++ auto method = bus.new_method_call(
++ restart::busName, restart::path,
++ "org.freedesktop.DBus.Properties", "Set");
++ method.append(
++ restart::interface, restart::property,
++ std::variant<std::string>("xyz.openbmc_project.State.Host."
++ "RestartCause.WatchdogTimer"));
++ bus.call_noreply(method);
+
+- bus.call_noreply(method);
++ method = bus.new_method_call(host::busName, host::path,
++ "org.freedesktop.DBus.Properties",
++ "Set");
++ method.append(host::interface, host::request,
++ std::variant<std::string>(target->second));
++ bus.call_noreply(method);
++ }
++ else
++ {
++ if (action == Watchdog::Action::PowerCycle)
++ {
++ auto method = bus.new_method_call(
++ restart::busName, restart::path,
++ "org.freedesktop.DBus.Properties", "Set");
++ method.append(restart::interface, restart::property,
++ std::variant<std::string>(
++ "xyz.openbmc_project.State.Host."
++ "RestartCause.WatchdogTimer"));
++ bus.call_noreply(method);
++ }
++ method = bus.new_method_call(chassis::busName, chassis::path,
++ "org.freedesktop.DBus.Properties",
++ "Set");
++ method.append(chassis::interface, chassis::request,
++ std::variant<std::string>(target->second));
++ bus.call_noreply(method);
++ }
+ }
+ catch (const sdbusplus::exception::exception& e)
+ {
+diff --git a/src/watchdog.hpp b/src/watchdog.hpp
+index 31cde63..2b7ff36 100644
+--- a/src/watchdog.hpp
++++ b/src/watchdog.hpp
+@@ -73,7 +73,17 @@ class Watchdog : public WatchdogInherits
+ bus(bus), actionTargetMap(std::move(actionTargetMap)),
+ fallback(fallback), minInterval(minInterval),
+ timer(event, std::bind(&Watchdog::timeOutHandler, this)),
+- objPath(objPath)
++ objPath(objPath), powerStateChangedSignal(
++ bus,
++ sdbusplus::bus::match::rules::propertiesChanged(
++ "/xyz/openbmc_project/state/host0",
++ "xyz.openbmc_project.State.Host"),
++ [this](sdbusplus::message::message& msg) {
++ std::string objectName;
++ std::map<std::string, std::variant<std::string>> props;
++ msg.read(objectName, props);
++ powerStateChangedHandler(props);
++ })
+ {
+ // Use default if passed in otherwise just use default that comes
+ // with object
+@@ -90,6 +100,12 @@ class Watchdog : public WatchdogInherits
+ tryFallbackOrDisable();
+ }
+
++ /** @brief Disable watchdog when power status change meet
++ * the specific requirement
++ */
++ void powerStateChangedHandler(
++ const std::map<std::string, std::variant<std::string>>& props);
++
+ /** @brief Resets the TimeRemaining to the configured Interval
+ * Optionally enables the watchdog.
+ *
+@@ -178,6 +194,10 @@ class Watchdog : public WatchdogInherits
+ /** @brief Contained timer object */
+ sdeventplus::utility::Timer<sdeventplus::ClockId::Monotonic> timer;
+
++ /** @brief Optional Callback handler when power status change meet
++ * the specific requirement */
++ sdbusplus::bus::match_t powerStateChangedSignal;
++
+ /** @brief Optional Callback handler on timer expirartion */
+ void timeOutHandler();
+
+--
+2.35.1
+
diff --git a/meta-ibs/meta-common/recipes-phosphor/watchdog/phosphor-watchdog/phosphor-watchdog.service b/meta-ibs/meta-common/recipes-phosphor/watchdog/phosphor-watchdog/phosphor-watchdog.service
new file mode 100644
index 0000000000..6c069febec
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/watchdog/phosphor-watchdog/phosphor-watchdog.service
@@ -0,0 +1,16 @@
+[Unit]
+Description=Phosphor Watchdog
+
+[Service]
+ExecStart=/usr/bin/env phosphor-watchdog --continue --service=xyz.openbmc_project.Watchdog \
+ --path=/xyz/openbmc_project/watchdog/host0 \
+ --action_target=xyz.openbmc_project.State.Watchdog.Action.HardReset=xyz.openbmc_project.State.Host.Transition.ForceWarmReboot \
+ --action_target=xyz.openbmc_project.State.Watchdog.Action.PowerOff=xyz.openbmc_project.State.Chassis.Transition.Off \
+ --action_target=xyz.openbmc_project.State.Watchdog.Action.PowerCycle=xyz.openbmc_project.State.Chassis.Transition.PowerCycle
+
+SyslogIdentifier=phosphor-watchdog
+BusName=xyz.openbmc_project.Watchdog
+Type=dbus
+
+[Install]
+WantedBy=basic.target
diff --git a/meta-ibs/meta-common/recipes-phosphor/watchdog/phosphor-watchdog_%.bbappend b/meta-ibs/meta-common/recipes-phosphor/watchdog/phosphor-watchdog_%.bbappend
new file mode 100644
index 0000000000..b6cbdac9c2
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/watchdog/phosphor-watchdog_%.bbappend
@@ -0,0 +1,9 @@
+FILESEXTRAPATHS:append := ":${THISDIR}/${PN}"
+
+SRCREV = "90b400938fbed35040d9adf17c2af897b1046e12"
+SRC_URI += "file://0001-Customize-phosphor-watchdog-for-Intel-platforms.patch \
+ "
+
+# Remove the override to keep service running after DC cycle
+SYSTEMD_OVERRIDE:${PN}:remove = "poweron.conf:phosphor-watchdog@poweron.service.d/poweron.conf"
+SYSTEMD_SERVICE:${PN} = "phosphor-watchdog.service"
diff --git a/meta-ibs/meta-common/recipes-phosphor/watchdog/system-watchdog.bb b/meta-ibs/meta-common/recipes-phosphor/watchdog/system-watchdog.bb
new file mode 100644
index 0000000000..4702f9f2e7
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/watchdog/system-watchdog.bb
@@ -0,0 +1,24 @@
+SUMMARY = "System watchdog"
+DESCRIPTION = "BMC hardware watchdog service that is used to reset BMC \
+ when unrecoverable events occurs"
+
+inherit allarch
+inherit obmc-phosphor-systemd
+
+RDEPENDS:${PN} = "bash"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://${IBSBASE}/COPYING.apache-2.0;md5=34400b68072d710fecd0a2940a0d1658"
+
+SYSTEMD_SERVICE:${PN} += "system-watchdog.service"
+SYSTEMD_ENVIRONMENT_FILE:${PN} += "obmc/system-watchdog/system-watchdog.conf"
+
+SYSTEMD_SERVICE:${PN} += "watchdog-reset@.service"
+SYSTEMD_SERVICE:${PN} += "watchdog-clear-failures.service"
+SYSTEMD_SERVICE:${PN} += "watchdog-clear-failures.timer"
+SRC_URI += "file://watchdog-reset"
+
+do_install:append(){
+ install -d ${D}${bindir}
+ install -m 0755 ${WORKDIR}/watchdog-reset ${D}${bindir}
+}
diff --git a/meta-ibs/meta-common/recipes-phosphor/watchdog/system-watchdog/obmc/system-watchdog/system-watchdog.conf b/meta-ibs/meta-common/recipes-phosphor/watchdog/system-watchdog/obmc/system-watchdog/system-watchdog.conf
new file mode 100644
index 0000000000..defe830a1e
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/watchdog/system-watchdog/obmc/system-watchdog/system-watchdog.conf
@@ -0,0 +1,3 @@
+TIMEOUT=60
+INTERVAL=10
+DEVICE=/dev/watchdog1
diff --git a/meta-ibs/meta-common/recipes-phosphor/watchdog/system-watchdog/system-watchdog.service b/meta-ibs/meta-common/recipes-phosphor/watchdog/system-watchdog/system-watchdog.service
new file mode 100644
index 0000000000..1564fda207
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/watchdog/system-watchdog/system-watchdog.service
@@ -0,0 +1,11 @@
+[Unit]
+Description=BMC Hardware Watchdog Daemon
+
+[Service]
+EnvironmentFile=/etc/default/obmc/system-watchdog/system-watchdog.conf
+ExecStart=/sbin/watchdog -T ${{TIMEOUT}} -t ${{INTERVAL}} -F ${{DEVICE}}
+KillSignal=SIGKILL
+
+[Install]
+WantedBy=basic.target
+
diff --git a/meta-ibs/meta-common/recipes-phosphor/watchdog/system-watchdog/watchdog-clear-failures.service b/meta-ibs/meta-common/recipes-phosphor/watchdog/system-watchdog/watchdog-clear-failures.service
new file mode 100644
index 0000000000..801f4ed273
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/watchdog/system-watchdog/watchdog-clear-failures.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=Reset BMC Hardware Watchdog Failure Count
+
+[Service]
+ExecStart=busctl call xyz.openbmc_project.U_Boot.Environment.Manager \
+ /xyz/openbmc_project/u_boot/environment/mgr \
+ xyz.openbmc_project.U_Boot.Environment.Manager \
+ Write ss bootfailures 0
+Type=oneshot
+
diff --git a/meta-ibs/meta-common/recipes-phosphor/watchdog/system-watchdog/watchdog-clear-failures.timer b/meta-ibs/meta-common/recipes-phosphor/watchdog/system-watchdog/watchdog-clear-failures.timer
new file mode 100644
index 0000000000..1abac4326c
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/watchdog/system-watchdog/watchdog-clear-failures.timer
@@ -0,0 +1,8 @@
+[Unit]
+Description=Starts the clear watchdog serivce after 30 minutes
+
+[Timer]
+OnBootSec=30min
+
+[Install]
+WantedBy=timers.target
diff --git a/meta-ibs/meta-common/recipes-phosphor/watchdog/system-watchdog/watchdog-reset b/meta-ibs/meta-common/recipes-phosphor/watchdog/system-watchdog/watchdog-reset
new file mode 100644
index 0000000000..3413fdb9f3
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/watchdog/system-watchdog/watchdog-reset
@@ -0,0 +1,18 @@
+#!/bin/bash
+
+echo "Watchdog being started by $1" > /dev/kmsg
+
+if /sbin/fw_printenv bootfailures -n | grep -q 3; then
+ exit 0 # passed boot limit, user started again on purpose
+fi
+
+if test -f "/tmp/nowatchdog"; then
+ echo "Not resetting due to nowatchdog file" > /dev/kmsg
+ exit 0
+fi
+
+echo "Log as follows:" > /dev/kmsg
+journalctl -r -n 100 | while read line; do echo $line > /dev/kmsg; done
+
+systemctl stop system-watchdog.service
+/sbin/watchdog -T 0 -F /dev/watchdog1
diff --git a/meta-ibs/meta-common/recipes-phosphor/watchdog/system-watchdog/watchdog-reset@.service b/meta-ibs/meta-common/recipes-phosphor/watchdog/system-watchdog/watchdog-reset@.service
new file mode 100644
index 0000000000..3d62cc0a89
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/watchdog/system-watchdog/watchdog-reset@.service
@@ -0,0 +1,7 @@
+[Unit]
+Description=Reset BMC Using Hardware Watchdog
+
+[Service]
+ExecStart=/usr/bin/watchdog-reset %i
+Type=oneshot
+
diff --git a/meta-ibs/meta-common/recipes-phosphor/webui/phosphor-webui/config.json b/meta-ibs/meta-common/recipes-phosphor/webui/phosphor-webui/config.json
new file mode 100644
index 0000000000..1543a62494
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/webui/phosphor-webui/config.json
@@ -0,0 +1,8 @@
+{
+ "customKeyEnable": true,
+ "keyType" : "VT100+",
+ "customConsoleDisplaySize": {
+ "width": 100,
+ "height": 32
+ }
+}
diff --git a/meta-ibs/meta-common/recipes-phosphor/webui/phosphor-webui_%.bbappend b/meta-ibs/meta-common/recipes-phosphor/webui/phosphor-webui_%.bbappend
new file mode 100644
index 0000000000..ce0138bb21
--- /dev/null
+++ b/meta-ibs/meta-common/recipes-phosphor/webui/phosphor-webui_%.bbappend
@@ -0,0 +1,8 @@
+FILESEXTRAPATHS:prepend:ibs := "${THISDIR}/${PN}:"
+
+SRC_URI:append:ibs = " file://config.json"
+
+do_compile:prepend:ibs() {
+ cp -r ${WORKDIR}/config.json ${S}/
+}
+