summaryrefslogtreecommitdiff
path: root/meta-openbmc-mods/meta-common
diff options
context:
space:
mode:
authorJason M. Bills <jason.m.bills@linux.intel.com>2020-01-07 21:40:08 +0300
committerJason M. Bills <jason.m.bills@linux.intel.com>2020-01-07 21:43:56 +0300
commit820013481a115100d5f8f22dc01aac8cc0363a23 (patch)
tree99cd46b66d5b9b97d38265d553f4fb60fee0d6a2 /meta-openbmc-mods/meta-common
parent965a056096e5e043748da8766fa50cb7afedb608 (diff)
downloadopenbmc-820013481a115100d5f8f22dc01aac8cc0363a23.tar.xz
Update to internal 2020-01-07
Signed-off-by: Jason M. Bills <jason.m.bills@linux.intel.com>
Diffstat (limited to 'meta-openbmc-mods/meta-common')
-rw-r--r--meta-openbmc-mods/meta-common/recipes-bsp/u-boot/files/0003-ast2600-intel-layout-environment-addr.patch48
-rw-r--r--meta-openbmc-mods/meta-common/recipes-bsp/u-boot/files/0004-Disable-crashdump-trigger-gpio.patch57
-rw-r--r--meta-openbmc-mods/meta-common/recipes-bsp/u-boot/files/0039-AST2500-increase-boot-speed.patch44
-rw-r--r--meta-openbmc-mods/meta-common/recipes-bsp/u-boot/files/fw_env.config25
-rw-r--r--meta-openbmc-mods/meta-common/recipes-bsp/u-boot/u-boot-aspeed-sdk_%.bbappend5
-rw-r--r--meta-openbmc-mods/meta-common/recipes-bsp/u-boot/u-boot-aspeed_%.bbappend4
-rw-r--r--meta-openbmc-mods/meta-common/recipes-bsp/u-boot/u-boot-fw-utils-aspeed-sdk_%.bbappend14
-rw-r--r--meta-openbmc-mods/meta-common/recipes-core/fw-update/files/fwupd.sh7
-rw-r--r--meta-openbmc-mods/meta-common/recipes-core/interfaces/libmctp/0001-Smbus-changes-for-libmctp.patch45
-rw-r--r--meta-openbmc-mods/meta-common/recipes-core/interfaces/libmctp/smbus.c89
-rw-r--r--meta-openbmc-mods/meta-common/recipes-core/interfaces/libmctp_git.bb4
-rw-r--r--meta-openbmc-mods/meta-common/recipes-core/ipmi/intel-ipmi-oem_%.bbappend2
-rw-r--r--meta-openbmc-mods/meta-common/recipes-core/libpeci/libpeci_git.bb2
-rw-r--r--meta-openbmc-mods/meta-common/recipes-extended/rsyslog/rsyslog/rotate-event-logs.service9
-rw-r--r--meta-openbmc-mods/meta-common/recipes-extended/rsyslog/rsyslog/rotate-event-logs.timer8
-rw-r--r--meta-openbmc-mods/meta-common/recipes-extended/rsyslog/rsyslog/rsyslog-override.conf2
-rw-r--r--meta-openbmc-mods/meta-common/recipes-extended/rsyslog/rsyslog/rsyslog.conf79
-rw-r--r--meta-openbmc-mods/meta-common/recipes-extended/rsyslog/rsyslog/rsyslog.logrotate22
-rw-r--r--meta-openbmc-mods/meta-common/recipes-extended/rsyslog/rsyslog_%.bbappend23
-rw-r--r--meta-openbmc-mods/meta-common/recipes-graphics/libvncserver/libvncserver_%.bbappend2
-rw-r--r--meta-openbmc-mods/meta-common/recipes-intel/hsbp/hsbp-manager_git.bb2
-rw-r--r--meta-openbmc-mods/meta-common/recipes-intel/intel-pfr/intel-pfr-manager_git.bb2
-rw-r--r--meta-openbmc-mods/meta-common/recipes-intel/psu-manager/psu-manager.bb2
-rw-r--r--meta-openbmc-mods/meta-common/recipes-intel/smbios/smbios-mdrv2.bb2
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0001-arm-dts-add-DTS-for-Intel-ast2500-platforms.patch11
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0001-arm-dts-add-DTS-for-Intel-ast2600-platforms.patch8
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0001-arm-dts-base-aspeed-g6-dtsi-fixups.patch63
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0002-Enable-pass-through-on-GPIOE1-and-GPIOE3-free.patch22
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0006-Allow-monitoring-of-power-control-input-GPIOs.patch9
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0008-Report-link-statistics-for-the-NCSI-channel.patch6
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0014-arm-dts-aspeed-g5-add-espi.patch35
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0016-Add-ASPEED-SGPIO-driver.patch23
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0017-SGPIO-DT-and-pinctrl-fixup.patch39
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0018-Update-PECI-drivers-to-sync-with-linux-upstreaming-v.patch5611
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0020-misc-aspeed-add-lpc-mbox-driver.patch10
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0021-Initial-Port-of-Aspeed-LPC-SIO-driver.patch10
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0022-Add-AST2500-eSPI-driver.patch30
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0026-Add-support-for-new-PECI-commands.patch724
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0030-Add-dump-debug-code-into-I2C-drivers.patch12
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0031-Add-high-speed-baud-rate-support-for-UART.patch10
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0032-misc-aspeed-Add-Aspeed-UART-routing-control-driver.patch34
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0034-arm-dts-aspeed-Swap-the-mac-nodes-numbering.patch14
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0039-Add-Aspeed-PWM-driver-which-uses-FTTMR010-timer-IP.patch12
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0040-i2c-Add-mux-hold-unhold-msg-types.patch22
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0042-Add-bus-timeout-ms-and-retries-device-tree-propertie.patch12
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0043-char-ipmi-Add-clock-control-logic-into-Aspeed-LPC-BT.patch26
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0044-misc-Add-clock-control-logic-into-Aspeed-LPC-SNOOP-d.patch17
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0045-char-ipmi-Add-clock-control-logic-into-Aspeed-LPC-KC.patch28
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0047-misc-Block-error-printing-on-probe-defer-case-in-Asp.patch8
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0051-Add-AST2500-JTAG-device.patch6
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0052-drivers-jtag-Add-JTAG-core-driver.patch10
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0056-Documentation-jtag-Add-JTAG-core-driver-ioctl-number.patch6
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0057-drivers-jtag-Add-JTAG-core-driver-Maintainers.patch8
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0061-i2c-aspeed-add-buffer-mode-transfer-support.patch100
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0062-i2c-aspeed-add-DMA-mode-transfer-support.patch34
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0063-i2c-aspeed-add-general-call-support.patch22
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0068-i2c-aspeed-add-H-W-timeout-support.patch20
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0069-i2c-aspeed-add-SLAVE_ADDR_RECEIVED_PENDING-interrupt.patch6
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0070-gpio-aspeed-temporary-fix-for-gpiochip-range-setting.patch8
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0075-Refine-initialization-flow-in-I2C-driver.patch10
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0076-arm-ast2600-add-pwm_tacho-driver-from-aspeed.patch104
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0078-Fix-NCSI-driver-issue-caused-by-host-shutdown.patch10
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0079-usb-gadget-aspeed-backport-aspeed-vhub-bug-fixes.patch473
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0080-i2c-aspeed-filter-garbage-interrupts-out.patch6
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0082-ARM-dts-aspeed-g6-add-USB-virtual-hub-fixup.patch8
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0084-ARM-dts-aspeed-g6-add-GFX-node.patch6
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0085-drm-add-AST2600-GFX-support.patch10
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0086-ADC-linux-driver-for-AST2600.patch8
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0086-ARM-dts-aspeed-g6-add-video-node.patch6
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0087-media-aspeed-add-aspeed-ast2600-video-engine-compati.patch46
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0089-ast2600-enable-high-speed-uart-in-kernel.patch97
-rw-r--r--meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed_%.bbappend4
-rw-r--r--meta-openbmc-mods/meta-common/recipes-phosphor/configuration/entity-manager_%.bbappend2
-rwxr-xr-xmeta-openbmc-mods/meta-common/recipes-phosphor/fru/default-fru/checkFru.sh49
-rw-r--r--meta-openbmc-mods/meta-common/recipes-phosphor/interfaces/bmcweb_%.bbappend2
-rw-r--r--meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0002-Fixed-issue-in-setLan-command-for-IP-source.patch62
-rw-r--r--meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0003-Fix-for-return-CC-in-setLan-command-cases.patch69
-rw-r--r--meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host_%.bbappend4
-rw-r--r--meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-net/0012-Do-not-stop-session-in-deactivate-payload.patch48
-rw-r--r--meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-net_%.bbappend3
-rw-r--r--meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-node-manager-proxy_git.bb2
-rw-r--r--meta-openbmc-mods/meta-common/recipes-phosphor/phosphor-u-boot-mgr/phosphor-u-boot-mgr_git.bb2
-rw-r--r--meta-openbmc-mods/meta-common/recipes-phosphor/prov-mode-mgr/prov-mode-mgr_git.bb2
-rw-r--r--meta-openbmc-mods/meta-common/recipes-phosphor/security-manager/security-manager_git.bb2
-rw-r--r--meta-openbmc-mods/meta-common/recipes-phosphor/sel-logger/phosphor-sel-logger_%.bbappend1
-rw-r--r--meta-openbmc-mods/meta-common/recipes-phosphor/sensors/dbus-sensors_%.bbappend4
-rw-r--r--meta-openbmc-mods/meta-common/recipes-phosphor/settings/settings_git.bb2
-rw-r--r--meta-openbmc-mods/meta-common/recipes-phosphor/special-mode-mgr/special-mode-mgr_git.bb2
-rw-r--r--meta-openbmc-mods/meta-common/recipes-phosphor/srvcfg-manager/srvcfg-manager_git.bb2
-rw-r--r--meta-openbmc-mods/meta-common/recipes-phosphor/state/post-code-manager_git.bb2
-rw-r--r--meta-openbmc-mods/meta-common/recipes-phosphor/system/callback-manager.bb2
-rw-r--r--meta-openbmc-mods/meta-common/recipes-phosphor/virtual-media/virtual-media.bb2
-rw-r--r--meta-openbmc-mods/meta-common/recipes-phosphor/webui/phosphor-webui_%.bbappend2
-rwxr-xr-xmeta-openbmc-mods/meta-common/recipes-x86/chassis/x86-power-control_%.bbappend2
94 files changed, 1009 insertions, 7562 deletions
diff --git a/meta-openbmc-mods/meta-common/recipes-bsp/u-boot/files/0003-ast2600-intel-layout-environment-addr.patch b/meta-openbmc-mods/meta-common/recipes-bsp/u-boot/files/0003-ast2600-intel-layout-environment-addr.patch
index a1a8acf81..88d7cd019 100644
--- a/meta-openbmc-mods/meta-common/recipes-bsp/u-boot/files/0003-ast2600-intel-layout-environment-addr.patch
+++ b/meta-openbmc-mods/meta-common/recipes-bsp/u-boot/files/0003-ast2600-intel-layout-environment-addr.patch
@@ -1,4 +1,4 @@
-From e074cf61bd6a726c8cb513336507047ece5423d0 Mon Sep 17 00:00:00 2001
+From 2a52808ddd6a6bef40bab9a15bd22b1c7988a798 Mon Sep 17 00:00:00 2001
From: Kuiying Wang <kuiying.wang@intel.com>
Date: Thu, 12 Dec 2019 12:54:18 +0800
Subject: [PATCH] ast2600: intel-layout-environment-addr
@@ -7,21 +7,55 @@ Tested:
Both kernel and u-boot work at the area /dev/mtd/u-boot-env
Signed-off-by: Kuiying Wang <kuiying.wang@intel.com>
+Signed-off-by: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
---
- include/configs/aspeed-common.h | 5 ++++-
- include/configs/evb_ast2600_spl.h | 2 +-
- 2 files changed, 5 insertions(+), 2 deletions(-)
+ common/board_r.c | 11 +++++++++--
+ include/configs/aspeed-common.h | 12 +++++++++++-
+ include/configs/evb_ast2600_spl.h | 2 +-
+ 3 files changed, 21 insertions(+), 4 deletions(-)
+diff --git a/common/board_r.c b/common/board_r.c
+index a7f5371bac71..492d7f1cbe4c 100644
+--- a/common/board_r.c
++++ b/common/board_r.c
+@@ -433,10 +433,17 @@ static int should_load_env(void)
+ static int initr_env(void)
+ {
+ /* initialize environment */
+- if (should_load_env())
++ if (should_load_env()) {
++ /*
++ * try again, in case the environment failed to load the first
++ * time
++ */
++ if (!gd->env_valid)
++ env_init();
+ env_relocate();
+- else
++ } else {
+ set_default_env(NULL, 0);
++ }
+ #ifdef CONFIG_OF_CONTROL
+ env_set_hex("fdtcontroladdr",
+ (unsigned long)map_to_sysmem(gd->fdt_blob));
diff --git a/include/configs/aspeed-common.h b/include/configs/aspeed-common.h
-index d1eb468..8ad9deb 100644
+index d1eb4688e68f..0ece4a1b9440 100644
--- a/include/configs/aspeed-common.h
+++ b/include/configs/aspeed-common.h
-@@ -56,12 +56,15 @@
+@@ -55,13 +55,23 @@
+ #ifndef CONFIG_BOOTCOMMAND
#define CONFIG_BOOTCOMMAND "bootm 20080000"
#endif
++#define CONFIG_SYS_REDUNDAND_ENVIRONMENT
++#define CONFIG_ENV_ADDR_REDUND
#define CONFIG_ENV_OVERWRITE
++#define AST_FMC_CS0_BASE 0x20000000 /* CS0 */
+#define CONFIG_ENV_OFFSET 0x2400000
++#define CONFIG_ENV_ADDR (AST_FMC_CS0_BASE + CONFIG_ENV_OFFSET)
+#define CONFIG_ENV_SIZE 0x10000
++#define CONFIG_ENV_OFFSET_REDUND (CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE)
++#define CONFIG_ENV_ADDR_REDUND (AST_FMC_CS0_BASE + CONFIG_ENV_OFFSET_REDUND)
++#define CONFIG_ENV_SIZE_REDUND CONFIG_ENV_SIZE
+#define CONFIG_ENV_SECT_SIZE (4 << 10)
#define CONFIG_SYS_BOOTM_LEN (0x800000 * 2)
@@ -34,7 +68,7 @@ index d1eb468..8ad9deb 100644
/*
diff --git a/include/configs/evb_ast2600_spl.h b/include/configs/evb_ast2600_spl.h
-index 8bbd6e1..8529f46 100644
+index 8bbd6e18727a..8529f46c0b19 100644
--- a/include/configs/evb_ast2600_spl.h
+++ b/include/configs/evb_ast2600_spl.h
@@ -19,7 +19,7 @@
diff --git a/meta-openbmc-mods/meta-common/recipes-bsp/u-boot/files/0004-Disable-crashdump-trigger-gpio.patch b/meta-openbmc-mods/meta-common/recipes-bsp/u-boot/files/0004-Disable-crashdump-trigger-gpio.patch
new file mode 100644
index 000000000..6ffdbc702
--- /dev/null
+++ b/meta-openbmc-mods/meta-common/recipes-bsp/u-boot/files/0004-Disable-crashdump-trigger-gpio.patch
@@ -0,0 +1,57 @@
+From aae3bab86f19784cbe0767ea0973527ce217bf89 Mon Sep 17 00:00:00 2001
+From: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
+Date: Fri, 3 Jan 2020 15:14:09 -0800
+Subject: [PATCH] Disable crashdump trigger gpio
+
+This commit disables crashdump trigger gpio (GPIOC3) to prevent
+unexpected host failures.
+
+Signed-off-by: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
+---
+ board/aspeed/ast2600_intel/intel.c | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/board/aspeed/ast2600_intel/intel.c b/board/aspeed/ast2600_intel/intel.c
+index eb6fbaf77e66..7daf1b83305a 100644
+--- a/board/aspeed/ast2600_intel/intel.c
++++ b/board/aspeed/ast2600_intel/intel.c
+@@ -146,6 +146,27 @@ static void sgpio_init(void)
+ writel(value, AST_GPIO_BASE + GPIO254);
+ }
+
++static void disable_crashlog_trigger(void)
++{
++#define SCU_410 0x410 /* Multi-function Pin Control #4 */
++#define SCU_410_RGMII3TXD1 BIT(19)
++#define GPIO_004 0x004 /* GPIO A/B/C/D Direction */
++#define GPIO_000 0x000 /* GPIO A/B/C/D Value */
++#define GPIO_C3 BIT(19)
++
++ /*
++ * Set FM_BMC_CRASHLOG_TRIG_N (GPIOC3) as an output with value high
++ * explicitly since it doesn't have an external pull up. It uses direct
++ * register access because it's called from board_early_init_f().
++ */
++ writel(readl(SCU_BASE | SCU_410) & ~SCU_410_RGMII3TXD1,
++ SCU_BASE | SCU_410);
++ writel(readl(AST_GPIO_BASE | GPIO_004) | GPIO_C3,
++ AST_GPIO_BASE | GPIO_004);
++ writel(readl(AST_GPIO_BASE | GPIO_000) | GPIO_C3,
++ AST_GPIO_BASE | GPIO_000);
++}
++
+ void espi_init(void);
+ int arch_interrupt_init_early(void);
+
+@@ -162,6 +183,8 @@ int board_early_init_f(void)
+ * I am not sure if it actually does anything... */
+ arch_interrupt_init_early();
+
++ disable_crashlog_trigger();
++
+ gpio_passthru_init();
+
+ port80h_snoop_init();
+--
+2.7.4
+
diff --git a/meta-openbmc-mods/meta-common/recipes-bsp/u-boot/files/0039-AST2500-increase-boot-speed.patch b/meta-openbmc-mods/meta-common/recipes-bsp/u-boot/files/0039-AST2500-increase-boot-speed.patch
index ce36b580e..d8ac50dbd 100644
--- a/meta-openbmc-mods/meta-common/recipes-bsp/u-boot/files/0039-AST2500-increase-boot-speed.patch
+++ b/meta-openbmc-mods/meta-common/recipes-bsp/u-boot/files/0039-AST2500-increase-boot-speed.patch
@@ -1,21 +1,29 @@
-From 1e9a4afdfa995e924f74139f620e8b2f985a705f Mon Sep 17 00:00:00 2001
+From b571713f51beb467eefae8e56bfea6e5eab48f8c Mon Sep 17 00:00:00 2001
From: James Feist <james.feist@linux.intel.com>
Date: Tue, 10 Dec 2019 16:21:24 -0800
Subject: [PATCH 1/1] AST2500 increase boot speed
-This hardcodes the IOMODE to x2 as that is the fastest
-we support.
+Enable CONFIG_FLASH_SPIx2_Dummy and add it to known
+good SPI flashes.
Signed-off-by: James Feist <james.feist@linux.intel.com>
---
- arch/arm/mach-aspeed/flash.c | 6 +++++-
- 1 file changed, 5 insertions(+), 1 deletion(-)
+ arch/arm/mach-aspeed/flash.c | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/arch/arm/mach-aspeed/flash.c b/arch/arm/mach-aspeed/flash.c
-index d33fb9e0fe..31d2ef6001 100644
+index d33fb9e0fe..95fc46dd76 100644
--- a/arch/arm/mach-aspeed/flash.c
+++ b/arch/arm/mach-aspeed/flash.c
-@@ -730,7 +730,7 @@ static ulong flash_get_size (ulong base, flash_info_t *info)
+@@ -34,6 +34,7 @@
+ #include <asm/arch/ast_scu.h>
+ #include <asm/arch/aspeed.h>
+
++#define CONFIG_FLASH_SPIx2_Dummy 1
+
+ /*
+ * This file implements a Common Flash Interface (CFI) driver for U-Boot.
+@@ -730,7 +731,7 @@ static ulong flash_get_size (ulong base, flash_info_t *info)
ulID = ((ulong)ch[0]) | ((ulong)ch[1] << 8) | ((ulong)ch[2] << 16) ;
info->flash_id = ulID;
@@ -24,17 +32,19 @@ index d33fb9e0fe..31d2ef6001 100644
/* init default */
info->iomode = IOMODEx1;
-@@ -1258,6 +1258,10 @@ static ulong flash_get_size (ulong base, flash_info_t *info)
- } /* JDEC */
- }
-
-+ info->readcmd = 0xbb;
-+ info->dualport = 1;
-+ info->iomode = IOMODEx2_dummy;
-+
- sector = base;
- for (j = 0; j < info->sector_count; j++) {
+@@ -1035,6 +1036,12 @@ static ulong flash_get_size (ulong base, flash_info_t *info)
+ EraseClk = 25;
+ ReadClk = 50;
+ info->address32 = 1;
++#if defined(CONFIG_FLASH_SPIx2_Dummy)
++ info->readcmd = 0xbb;
++ info->dummybyte = 1;
++ info->dualport = 1;
++ info->iomode = IOMODEx2_dummy;
++#endif
+ break;
+ case SST25VF016B:
--
2.17.1
diff --git a/meta-openbmc-mods/meta-common/recipes-bsp/u-boot/files/fw_env.config b/meta-openbmc-mods/meta-common/recipes-bsp/u-boot/files/fw_env.config
new file mode 100644
index 000000000..19ace4b88
--- /dev/null
+++ b/meta-openbmc-mods/meta-common/recipes-bsp/u-boot/files/fw_env.config
@@ -0,0 +1,25 @@
+# Configuration file for fw_(printenv/setenv) utility.
+# Up to two entries are valid, in this case the redundant
+# environment sector is assumed present.
+# Notice, that the "Number of sectors" is ignored on NOR and SPI-dataflash.
+# Furthermore, if the Flash sector size is omitted, this value is assumed to
+# be the same as the Environment size, which is valid for NOR and SPI-dataflash
+
+# NOR example
+# MTD device name Device offset Env. size Flash sector size Number of sectors
+#/dev/mtd1 0x0000 0x20000 0x20000
+#/dev/mtd2 0x0000 0x4000 0x4000
+
+# MTD SPI-dataflash example
+# MTD device name Device offset Env. size Flash sector size Number of sectors
+#/dev/mtd2 0x00000 0x20000
+/dev/mtd/u-boot-env 0x00000 0x10000
+/dev/mtd/u-boot-env 0x10000 0x10000
+#/dev/mtd5 0x4200 0x4200
+#/dev/mtd6 0x4200 0x4200
+
+# NAND example
+#/dev/mtd0 0x4000 0x4000 0x20000 2
+
+# Block device example
+#/dev/mmcblk0 0xc0000 0x20000
diff --git a/meta-openbmc-mods/meta-common/recipes-bsp/u-boot/u-boot-aspeed-sdk_%.bbappend b/meta-openbmc-mods/meta-common/recipes-bsp/u-boot/u-boot-aspeed-sdk_%.bbappend
index 376b785c1..b5ea27dae 100644
--- a/meta-openbmc-mods/meta-common/recipes-bsp/u-boot/u-boot-aspeed-sdk_%.bbappend
+++ b/meta-openbmc-mods/meta-common/recipes-bsp/u-boot/u-boot-aspeed-sdk_%.bbappend
@@ -4,8 +4,13 @@ FILESEXTRAPATHS_append_intel-ast2600:= "${THISDIR}/files:"
# with the intel layout for environment
SRC_URI_append_intel-ast2600 = " \
+ file://fw_env.config \
file://intel.cfg \
file://0001-Add-ast2600-intel-as-a-new-board.patch \
file://0021-AST2600-Enable-host-searial-port-clock-configuration.patch \
file://0003-ast2600-intel-layout-environment-addr.patch \
+ file://0004-Disable-crashdump-trigger-gpio.patch \
"
+do_install_append () {
+ install -m 0644 ${WORKDIR}/fw_env.config ${S}/tools/env/fw_env.config
+}
diff --git a/meta-openbmc-mods/meta-common/recipes-bsp/u-boot/u-boot-aspeed_%.bbappend b/meta-openbmc-mods/meta-common/recipes-bsp/u-boot/u-boot-aspeed_%.bbappend
index a536dce34..8e35c468b 100644
--- a/meta-openbmc-mods/meta-common/recipes-bsp/u-boot/u-boot-aspeed_%.bbappend
+++ b/meta-openbmc-mods/meta-common/recipes-bsp/u-boot/u-boot-aspeed_%.bbappend
@@ -5,6 +5,7 @@ FILESEXTRAPATHS_append_intel-ast2500:= "${THISDIR}/files:"
SRC_URI_remove_intel-ast2500 = " file://0001-configs-ast-Add-redundnant-env.patch"
SRC_URI_append_intel-ast2500 = " \
+ file://fw_env.config \
file://0001-flash-use-readX-writeX-not-udelay.patch \
file://0002-intel-layout-environment-addr.patch \
file://0004-Make-sure-debug-uart-is-using-24MHz-clock-source.patch \
@@ -46,6 +47,9 @@ PFR_SRC_URI = " \
file://0035-PFR-platform-EXTRST-reset-mask-selection.patch \
"
SRC_URI_append_intel-ast2500 += "${@bb.utils.contains('IMAGE_FSTYPES', 'intel-pfr', PFR_SRC_URI, '', d)}"
+do_install_append () {
+ install -m 0644 ${WORKDIR}/fw_env.config ${S}/tools/env/fw_env.config
+}
require recipes-core/os-release/version-vars.inc
diff --git a/meta-openbmc-mods/meta-common/recipes-bsp/u-boot/u-boot-fw-utils-aspeed-sdk_%.bbappend b/meta-openbmc-mods/meta-common/recipes-bsp/u-boot/u-boot-fw-utils-aspeed-sdk_%.bbappend
new file mode 100644
index 000000000..b271f3b38
--- /dev/null
+++ b/meta-openbmc-mods/meta-common/recipes-bsp/u-boot/u-boot-fw-utils-aspeed-sdk_%.bbappend
@@ -0,0 +1,14 @@
+FILESEXTRAPATHS_append_intel-ast2600:= "${THISDIR}/files:"
+
+SRC_URI_append_intel-ast2600 = " \
+ file://fw_env.config \
+ file://intel.cfg \
+ file://0001-Add-ast2600-intel-as-a-new-board.patch \
+ file://0003-ast2600-intel-layout-environment-addr.patch \
+ "
+
+do_install_append () {
+ install -m 0644 ${WORKDIR}/fw_env.config ${D}${sysconfdir}/fw_env.config
+ install -m 0644 ${WORKDIR}/fw_env.config ${S}/tools/env/fw_env.config
+}
+RDEPENDS_${PN} = "udev-aspeed-mtd-partitions"
diff --git a/meta-openbmc-mods/meta-common/recipes-core/fw-update/files/fwupd.sh b/meta-openbmc-mods/meta-common/recipes-core/fw-update/files/fwupd.sh
index 3073128e0..03dac7582 100644
--- a/meta-openbmc-mods/meta-common/recipes-core/fw-update/files/fwupd.sh
+++ b/meta-openbmc-mods/meta-common/recipes-core/fw-update/files/fwupd.sh
@@ -124,9 +124,10 @@ touch /tmp/fwupd_progress
# Byte at location 0x8 gives image type
img_type=$(busctl get-property xyz.openbmc_project.Software.BMC.Updater /xyz/openbmc_project/software/$1 xyz.openbmc_project.Software.Version Purpose | cut -d " " -f 2 | cut -d "." -f 6 | sed 's/.\{1\}$//')
img_target=$(busctl get-property xyz.openbmc_project.Software.BMC.Updater /xyz/openbmc_project/software/$1 xyz.openbmc_project.Software.Activation RequestedActivation | cut -d " " -f 2| cut -d "." -f 6 | sed 's/.\{1\}$//')
-
+apply_time=$(busctl get-property xyz.openbmc_project.Settings /xyz/openbmc_project/software/apply_time xyz.openbmc_project.Software.ApplyTime RequestedApplyTime | cut -d " " -f 2 | cut -d "." -f 6 | sed 's/.\{1\}$//')
echo "image-type=$img_type"
echo "image-target=$img_target"
+echo "apply_time=$apply_time"
# BMC image - max size 32MB
if [ "$img_type" = 'BMC' ]; then
@@ -174,6 +175,10 @@ else
exit 1
fi
+if [ "$apply_time" == 'OnReset' ]; then
+ upd_intent_val=$(( "$upd_intent_val"|0x80 ))
+fi
+
# do a size check on the image
if [ $(stat -c "%s" "$LOCAL_PATH") -gt $img_size ]; then
echo "Update file "$LOCAL_PATH" is bigger than the supported image size"
diff --git a/meta-openbmc-mods/meta-common/recipes-core/interfaces/libmctp/0001-Smbus-changes-for-libmctp.patch b/meta-openbmc-mods/meta-common/recipes-core/interfaces/libmctp/0001-Smbus-changes-for-libmctp.patch
index e456c10ad..88da437fc 100644
--- a/meta-openbmc-mods/meta-common/recipes-core/interfaces/libmctp/0001-Smbus-changes-for-libmctp.patch
+++ b/meta-openbmc-mods/meta-common/recipes-core/interfaces/libmctp/0001-Smbus-changes-for-libmctp.patch
@@ -1,8 +1,9 @@
-From cb330f4bf1f519032ee50d60f473c28df7b772d8 Mon Sep 17 00:00:00 2001
+From 40303196d9f07b71042cd7ba87dcab6fdad29422 Mon Sep 17 00:00:00 2001
From: Nikhil Potade <nikhil.potade@linux.intel.com>
Date: Tue, 19 Feb 2019 14:16:20 +0800
-Subject: [PATCH] Smbus changes for libmctp
+Subject: [PATCH 1/1] Smbus changes for libmctp
+Signed-off-by: James Feist <james.feist@linux.intel.com>
---
CMakeLists.txt | 6 ++++--
core.c | 2 ++
@@ -16,7 +17,7 @@ index a5b1042..249b12b 100644
@@ -2,8 +2,9 @@ cmake_minimum_required (VERSION 3.5 FATAL_ERROR)
add_definitions (-DMCTP_LOG_STDERR)
- add_definitions (-DMCTP_FILEIO)
+ add_definitions (-DMCTP_HAVE_FILEIO)
+add_definitions (-DMCTP_DEFAULT_ALLOC)
-add_library (libmctp STATIC alloc.c core.c log.c libmctp.h serial.c)
@@ -33,7 +34,7 @@ index a5b1042..249b12b 100644
+ include)
diff --git a/core.c b/core.c
-index b855ced..8be7407 100644
+index 61356e9..622bc5e 100644
--- a/core.c
+++ b/core.c
@@ -17,6 +17,7 @@
@@ -44,16 +45,16 @@ index b855ced..8be7407 100644
struct mctp_bus {
mctp_eid_t eid;
struct mctp_binding *binding;
-@@ -50,6 +51,7 @@ struct mctp {
- */
- struct mctp_msg_ctx msg_ctxs[16];
+@@ -56,6 +57,7 @@ struct mctp {
+ ROUTE_BRIDGE,
+ } route_policy;
};
+/* clang-format on */
#ifndef BUILD_ASSERT
#define BUILD_ASSERT(x) \
diff --git a/libmctp.h b/libmctp.h
-index f0633e3..cec7c00 100644
+index b36a943..4f211f9 100644
--- a/libmctp.h
+++ b/libmctp.h
@@ -15,6 +15,7 @@ extern "C" {
@@ -64,16 +65,15 @@ index f0633e3..cec7c00 100644
struct mctp_hdr {
uint8_t ver;
uint8_t dest;
-@@ -30,12 +31,47 @@ struct mctp_hdr {
+@@ -30,19 +31,56 @@ struct mctp_hdr {
#define MCTP_HDR_SEQ_MASK (0x3)
#define MCTP_HDR_TAG_SHIFT (0)
#define MCTP_HDR_TAG_MASK (0x7)
+/* clang-format on */
- /* Maximum size of *payload* data in a MCTP packet
- * @todo: dynamic sixing based on channel implementation.
- */
- #define MCTP_MTU 64
+ /* Baseline maximum size of a MCTP packet */
+ #define MCTP_BMTU_PAYLOAD 64
+ #define MCTP_BMTU (MCTP_BMTU_PAYLOAD + sizeof(struct mctp_hdr))
+#define MCTP_CONTROL_MESSAGE_TYPE 0x00
+
@@ -111,23 +111,18 @@ index f0633e3..cec7c00 100644
+
/* packet buffers */
- /* Allow a little space before the MCTP header in the packet, for bindings that
-@@ -46,12 +82,14 @@ struct mctp_hdr {
- #define MCTP_PKTBUF_SIZE (MCTP_PKTBUF_BINDING_PAD + \
- (sizeof(struct mctp_hdr) + MCTP_MTU))
-
+/* clang-format off */
struct mctp_pktbuf {
- unsigned char data[MCTP_PKTBUF_SIZE];
- uint8_t start, end;
- uint8_t mctp_hdr_off;
+ size_t start, end, size;
+ size_t mctp_hdr_off;
struct mctp_pktbuf *next;
+ unsigned char data[];
};
+/* clang-format on */
- struct mctp_pktbuf *mctp_pktbuf_alloc(uint8_t len);
- void mctp_pktbuf_free(struct mctp_pktbuf *pkt);
-@@ -85,6 +123,7 @@ int mctp_message_tx(struct mctp *mctp, mctp_eid_t eid,
+ struct mctp_binding;
+
+@@ -90,6 +128,7 @@ int mctp_message_tx(struct mctp *mctp, mctp_eid_t eid,
void *msg, size_t msg_len);
/* hardware bindings */
@@ -135,7 +130,7 @@ index f0633e3..cec7c00 100644
struct mctp_binding {
const char *name;
uint8_t version;
-@@ -93,6 +132,7 @@ struct mctp_binding {
+@@ -101,6 +140,7 @@ struct mctp_binding {
int (*tx)(struct mctp_binding *binding,
struct mctp_pktbuf *pkt);
};
diff --git a/meta-openbmc-mods/meta-common/recipes-core/interfaces/libmctp/smbus.c b/meta-openbmc-mods/meta-common/recipes-core/interfaces/libmctp/smbus.c
index d7c396444..bbdfe2aa4 100644
--- a/meta-openbmc-mods/meta-common/recipes-core/interfaces/libmctp/smbus.c
+++ b/meta-openbmc-mods/meta-common/recipes-core/interfaces/libmctp/smbus.c
@@ -7,7 +7,7 @@
#include <string.h>
#include <unistd.h>
-#ifdef MCTP_FILEIO
+#ifdef MCTP_HAVE_FILEIO
#include <fcntl.h>
#endif
@@ -197,7 +197,7 @@ static int mctp_binding_smbus_tx(struct mctp_binding *b,
return 0;
}
-#ifdef MCTP_FILEIO
+#ifdef MCTP_HAVE_FILEIO
int mctp_smbus_read(struct mctp_binding_smbus *smbus)
{
ssize_t len = 0;
@@ -251,7 +251,7 @@ int mctp_smbus_read(struct mctp_binding_smbus *smbus)
break;
}
- smbus->rx_pkt = mctp_pktbuf_alloc(0);
+ smbus->rx_pkt = mctp_pktbuf_alloc(&(smbus->binding), 0);
assert(smbus->rx_pkt);
if (mctp_pktbuf_push(smbus->rx_pkt, &smbus->rxbuf[sizeof(*hdr)],
@@ -264,7 +264,6 @@ int mctp_smbus_read(struct mctp_binding_smbus *smbus)
mctp_bus_rx(&(smbus->binding), smbus->rx_pkt);
- mctp_pktbuf_free(smbus->rx_pkt);
smbus->rx_pkt = NULL;
} while (0);
@@ -284,11 +283,84 @@ int mctp_smbus_get_in_fd(struct mctp_binding_smbus *smbus)
return smbus->in_fd;
}
+
+int mctp_smbus_set_in_fd(struct mctp_binding_smbus *smbus, int fd)
+{
+ smbus->in_fd = fd;
+}
+
+int mctp_smbus_set_out_fd(struct mctp_binding_smbus *smbus, int fd)
+{
+ smbus->out_fd = fd;
+}
+
int mctp_smbus_get_out_fd(struct mctp_binding_smbus *smbus)
{
return smbus->out_fd;
}
+int mctp_smbus_open_in_bus(struct mctp_binding_smbus *smbus, int in_bus)
+{
+ char filename[60];
+ size_t filename_size = 0;
+ char slave_mqueue[20];
+ size_t mqueue_size = 0;
+ int fd = 0;
+ size_t size = sizeof(filename);
+ int address_7_bit = MCTP_SOURCE_SLAVE_ADDRESS >> 1;
+ int ret = -1;
+
+ snprintf(filename, size,
+ "/sys/bus/i2c/devices/i2c-%d/%d-%04x/slave-mqueue", in_bus,
+ in_bus, (address_7_bit << 8) + address_7_bit);
+
+ ret = open(filename, O_RDONLY | O_NONBLOCK | O_CLOEXEC);
+ if (ret >= 0) {
+ return ret;
+ }
+
+ // Device doesn't exist. Create it.
+ filename_size = sizeof(filename);
+ snprintf(filename, filename_size,
+ "/sys/bus/i2c/devices/i2c-%d/new_device", in_bus);
+ filename[filename_size - 1] = '\0';
+
+ fd = open(filename, O_WRONLY);
+ if (fd < 0) {
+ mctp_prerr("can't open root device %s: %m", filename);
+ return -1;
+ }
+
+ mqueue_size = sizeof(slave_mqueue);
+ snprintf(slave_mqueue, mqueue_size, "slave-mqueue %#04x",
+ (address_7_bit << 8) + address_7_bit);
+
+ size = write(fd, slave_mqueue, mqueue_size);
+ close(fd);
+ if (size != mqueue_size) {
+ mctp_prerr("can't create mqueue device on %s: %m", filename);
+ return -1;
+ }
+
+ size = sizeof(filename);
+ snprintf(filename, size,
+ "/sys/bus/i2c/devices/i2c-%d/%d-%04x/slave-mqueue", in_bus,
+ in_bus, (address_7_bit << 8) + address_7_bit);
+
+ return open(filename, O_RDONLY | O_NONBLOCK | O_CLOEXEC);
+}
+
+int mctp_smbus_open_out_bus(struct mctp_binding_smbus *smbus, int out_bus)
+{
+ char filename[60];
+ size_t size = sizeof(filename);
+ snprintf(filename, size, "/dev/i2c-%d", out_bus);
+ filename[size - 1] = '\0';
+
+ return open(filename, O_RDWR | O_NONBLOCK);
+}
+
+/*
int mctp_smbus_open_bus(struct mctp_binding_smbus *smbus, int out_bus_num,
int root_bus_num)
{
@@ -359,13 +431,12 @@ int mctp_smbus_open_bus(struct mctp_binding_smbus *smbus, int out_bus_num,
return 0;
}
+*/
#endif
void mctp_smbus_register_bus(struct mctp_binding_smbus *smbus,
struct mctp *mctp, mctp_eid_t eid)
{
- assert(smbus->out_fd >= 0);
- assert(smbus->in_fd >= 0);
smbus->bus_id = mctp_register_bus(mctp, &smbus->binding, eid);
mctp_binding_set_tx_enabled(&smbus->binding, true);
}
@@ -375,19 +446,21 @@ struct mctp_binding_smbus *mctp_smbus_init(void)
struct mctp_binding_smbus *smbus;
smbus = __mctp_alloc(sizeof(*smbus));
+ memset(&(smbus->binding), 0, sizeof(smbus->binding));
+
smbus->in_fd = -1;
smbus->out_fd = -1;
smbus->rx_pkt = NULL;
smbus->binding.name = "smbus";
smbus->binding.version = 1;
+ smbus->binding.pkt_size = sizeof(smbus->rxbuf);
smbus->binding.tx = mctp_binding_smbus_tx;
-
return smbus;
}
void mctp_smbus_free(struct mctp_binding_smbus *smbus)
{
__mctp_free(smbus);
-} \ No newline at end of file
+}
diff --git a/meta-openbmc-mods/meta-common/recipes-core/interfaces/libmctp_git.bb b/meta-openbmc-mods/meta-common/recipes-core/interfaces/libmctp_git.bb
index fcf6631ea..132db31c7 100644
--- a/meta-openbmc-mods/meta-common/recipes-core/interfaces/libmctp_git.bb
+++ b/meta-openbmc-mods/meta-common/recipes-core/interfaces/libmctp_git.bb
@@ -2,7 +2,7 @@ SUMMARY = "libmctp"
DESCRIPTION = "Implementation of MCTP (DTMF DSP0236)"
SRC_URI = "git://github.com/openbmc/libmctp.git"
-SRCREV = "62d7236f6be8e830e753c94b6b9018004a7f8e27"
+SRCREV = "34b9b3d82b049610775aea4460ff0f3bb9f02b1d"
PV = "0.1+git${SRCPV}"
@@ -37,4 +37,4 @@ CFLAGS_append = " -I ${STAGING_KERNEL_DIR}/include"
CXXFLAGS_append = " -I ${STAGING_KERNEL_DIR}/include/uapi"
CXXFLAGS_append = " -I ${STAGING_KERNEL_DIR}/include"
-do_configure[depends] += "virtual/kernel:do_shared_workdir" \ No newline at end of file
+do_configure[depends] += "virtual/kernel:do_shared_workdir"
diff --git a/meta-openbmc-mods/meta-common/recipes-core/ipmi/intel-ipmi-oem_%.bbappend b/meta-openbmc-mods/meta-common/recipes-core/ipmi/intel-ipmi-oem_%.bbappend
index bfe6de7b2..0cb5bd52e 100644
--- a/meta-openbmc-mods/meta-common/recipes-core/ipmi/intel-ipmi-oem_%.bbappend
+++ b/meta-openbmc-mods/meta-common/recipes-core/ipmi/intel-ipmi-oem_%.bbappend
@@ -1,4 +1,4 @@
EXTRA_OECMAKE += "${@bb.utils.contains('IMAGE_FSTYPES', 'intel-pfr', '-DINTEL_PFR_ENABLED=ON', '', d)}"
EXTRA_OECMAKE += "${@bb.utils.contains('EXTRA_IMAGE_FEATURES', 'validation-unsecure', '-DBMC_VALIDATION_UNSECURE_FEATURE=ON', '', d)}"
SRC_URI = "git://github.com/openbmc/intel-ipmi-oem.git"
-SRCREV = "822b0b40efe7695b56e1edb80f995d3c810d6d22"
+SRCREV = "38b58f5866602906833f7afc864dd2729516dd7f"
diff --git a/meta-openbmc-mods/meta-common/recipes-core/libpeci/libpeci_git.bb b/meta-openbmc-mods/meta-common/recipes-core/libpeci/libpeci_git.bb
index 9401b2496..5ec8669e6 100644
--- a/meta-openbmc-mods/meta-common/recipes-core/libpeci/libpeci_git.bb
+++ b/meta-openbmc-mods/meta-common/recipes-core/libpeci/libpeci_git.bb
@@ -5,7 +5,7 @@ inherit cmake
SRC_URI = "git://github.com/Intel-BMC/provingground.git;protocol=ssh"
PV = "0.1+git${SRCPV}"
-SRCREV = "eddf621897090ba346b1aaa81a4b8be12076ab60"
+SRCREV = "5a03fdc6a119b65ecf320622ce2809e340749fa9"
S = "${WORKDIR}/git/libpeci"
diff --git a/meta-openbmc-mods/meta-common/recipes-extended/rsyslog/rsyslog/rotate-event-logs.service b/meta-openbmc-mods/meta-common/recipes-extended/rsyslog/rsyslog/rotate-event-logs.service
deleted file mode 100644
index fdeefd417..000000000
--- a/meta-openbmc-mods/meta-common/recipes-extended/rsyslog/rsyslog/rotate-event-logs.service
+++ /dev/null
@@ -1,9 +0,0 @@
-[Unit]
-Description=Rotates the event logs
-
-[Service]
-Type=oneshot
-ExecStart=/usr/sbin/logrotate /etc/logrotate.d/logrotate.rsyslog
-
-[Install]
-WantedBy=multi-user.target
diff --git a/meta-openbmc-mods/meta-common/recipes-extended/rsyslog/rsyslog/rotate-event-logs.timer b/meta-openbmc-mods/meta-common/recipes-extended/rsyslog/rsyslog/rotate-event-logs.timer
deleted file mode 100644
index 148f8e4ae..000000000
--- a/meta-openbmc-mods/meta-common/recipes-extended/rsyslog/rsyslog/rotate-event-logs.timer
+++ /dev/null
@@ -1,8 +0,0 @@
-[Unit]
-Description=Run rotate-event-logs.service every minute
-
-[Timer]
-OnCalendar=*-*-* *:*:00
-
-[Install]
-WantedBy=timers.target
diff --git a/meta-openbmc-mods/meta-common/recipes-extended/rsyslog/rsyslog/rsyslog-override.conf b/meta-openbmc-mods/meta-common/recipes-extended/rsyslog/rsyslog/rsyslog-override.conf
deleted file mode 100644
index 14bcc0781..000000000
--- a/meta-openbmc-mods/meta-common/recipes-extended/rsyslog/rsyslog/rsyslog-override.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-[Service]
-ExecReload=/bin/kill -HUP $MAINPID
diff --git a/meta-openbmc-mods/meta-common/recipes-extended/rsyslog/rsyslog/rsyslog.conf b/meta-openbmc-mods/meta-common/recipes-extended/rsyslog/rsyslog/rsyslog.conf
deleted file mode 100644
index 46a287eef..000000000
--- a/meta-openbmc-mods/meta-common/recipes-extended/rsyslog/rsyslog/rsyslog.conf
+++ /dev/null
@@ -1,79 +0,0 @@
-# if you experience problems, check
-# http://www.rsyslog.com/troubleshoot for assistance
-
-# rsyslog v3: load input modules
-# If you do not load inputs, nothing happens!
-# You may need to set the module load path if modules are not found.
-#
-# Ported from debian's sysklogd.conf
-
-# Journal-style logging
-# Limit to no more than 2000 entries in one minute and enable the
-# journal workaround to avoid duplicate entries
-module(load="imjournal" StateFile="/var/log/state"
- RateLimit.Interval="60"
- RateLimit.Burst="2000")
-
-# Template for IPMI SEL messages
-# "<timestamp> <ID>,<Type>,<EventData>,[<Generator ID>,<Path>,<Direction>]"
-template(name="IPMISELTemplate" type="list") {
- property(name="timereported" dateFormat="rfc3339")
- constant(value=" ")
- property(name="$!IPMI_SEL_RECORD_ID")
- constant(value=",")
- property(name="$!IPMI_SEL_RECORD_TYPE")
- constant(value=",")
- property(name="$!IPMI_SEL_DATA")
- constant(value=",")
- property(name="$!IPMI_SEL_GENERATOR_ID")
- constant(value=",")
- property(name="$!IPMI_SEL_SENSOR_PATH")
- constant(value=",")
- property(name="$!IPMI_SEL_EVENT_DIR")
- constant(value="\n")
-}
-
-# Template for Redfish messages
-# "<timestamp> <MessageId>,<MessageArgs>"
-template(name="RedfishTemplate" type="list") {
- property(name="timereported" dateFormat="rfc3339")
- constant(value=" ")
- property(name="$!REDFISH_MESSAGE_ID")
- constant(value=",")
- property(name="$!REDFISH_MESSAGE_ARGS")
- constant(value="\n")
-}
-
-# Template for Application Crashes
-# "<timestamp> <MessageId>,<MessageArgs>"
-template(name="CrashTemplate" type="list") {
- property(name="timereported" dateFormat="rfc3339")
- constant(value=" ")
- constant(value="OpenBMC.0.1.ServiceFailure")
- constant(value=",")
- property(name="$!UNIT")
- constant(value="\n")
-}
-
-
-# If the journal entry has the IPMI SEL MESSAGE_ID, save as IPMI SEL
-# The MESSAGE_ID string is generated using journalctl and must match the
-# MESSAGE_ID used in IPMI to correctly find the SEL entries.
-if ($!MESSAGE_ID == "b370836ccf2f4850ac5bee185b77893a") then {
- action(type="omfile" file="/var/log/ipmi_sel" template="IPMISELTemplate")
-}
-
-# If the journal entry has a Redfish MessageId, save as a Redfish event
-if ($!REDFISH_MESSAGE_ID != "") then {
- action(type="omfile" file="/var/log/redfish" template="RedfishTemplate")
-}
-
-# If the journal entry has a Exit Code, save as a Redfish event
-if ($!EXIT_STATUS != "" and $!EXIT_STATUS != "0") then {
- action(type="omfile" file="/var/log/redfish" template="CrashTemplate")
-}
-
-#
-# Include all config files in /etc/rsyslog.d/
-#
-$IncludeConfig /etc/rsyslog.d/*.conf
diff --git a/meta-openbmc-mods/meta-common/recipes-extended/rsyslog/rsyslog/rsyslog.logrotate b/meta-openbmc-mods/meta-common/recipes-extended/rsyslog/rsyslog/rsyslog.logrotate
deleted file mode 100644
index a6ba28d86..000000000
--- a/meta-openbmc-mods/meta-common/recipes-extended/rsyslog/rsyslog/rsyslog.logrotate
+++ /dev/null
@@ -1,22 +0,0 @@
-# /etc/logrotate.d/rsyslog - Ported from Debian
-
-# Keep up to four 64k files for ipmi_sel (256k total)
-/var/log/ipmi_sel
-{
- rotate 3
- size 64k
- missingok
- postrotate
- systemctl reload rsyslog 2> /dev/null || true
- endscript
-}
-# Keep up to four 64k files for redfish (256k total)
-/var/log/redfish
-{
- rotate 3
- size 64k
- missingok
- postrotate
- systemctl reload rsyslog 2> /dev/null || true
- endscript
-}
diff --git a/meta-openbmc-mods/meta-common/recipes-extended/rsyslog/rsyslog_%.bbappend b/meta-openbmc-mods/meta-common/recipes-extended/rsyslog/rsyslog_%.bbappend
deleted file mode 100644
index ef670451e..000000000
--- a/meta-openbmc-mods/meta-common/recipes-extended/rsyslog/rsyslog_%.bbappend
+++ /dev/null
@@ -1,23 +0,0 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
-
-SRC_URI += "file://rsyslog.conf \
- file://rsyslog.logrotate \
- file://rotate-event-logs.service \
- file://rotate-event-logs.timer \
- file://rsyslog-override.conf \
-"
-
-FILES_${PN} += "${systemd_system_unitdir}/rsyslog.service.d/rsyslog-override.conf"
-
-PACKAGECONFIG_append = " imjournal"
-
-do_install_append() {
- install -m 0644 ${WORKDIR}/rotate-event-logs.service ${D}${systemd_system_unitdir}
- install -m 0644 ${WORKDIR}/rotate-event-logs.timer ${D}${systemd_system_unitdir}
- install -d ${D}${systemd_system_unitdir}/rsyslog.service.d
- install -m 0644 ${WORKDIR}/rsyslog-override.conf \
- ${D}${systemd_system_unitdir}/rsyslog.service.d/rsyslog-override.conf
- rm -f ${D}${sysconfdir}/rsyslog.d/imjournal.conf
-}
-
-SYSTEMD_SERVICE_${PN} += " rotate-event-logs.service rotate-event-logs.timer"
diff --git a/meta-openbmc-mods/meta-common/recipes-graphics/libvncserver/libvncserver_%.bbappend b/meta-openbmc-mods/meta-common/recipes-graphics/libvncserver/libvncserver_%.bbappend
index b14b0ff0b..c9aeb07b8 100644
--- a/meta-openbmc-mods/meta-common/recipes-graphics/libvncserver/libvncserver_%.bbappend
+++ b/meta-openbmc-mods/meta-common/recipes-graphics/libvncserver/libvncserver_%.bbappend
@@ -2,4 +2,4 @@ FILESEXTRAPATHS_append := ":${THISDIR}/${PN}"
# Use the latest to support obmc-ikvm properly
#SRC_URI = "git://github.com/LibVNC/libvncserver"
-SRCREV = "e00f736853289290197c290f7eb245f750e635ff"
+SRCREV = "daf250ff188e8d8d44503e2a2fdb79820d723ad5"
diff --git a/meta-openbmc-mods/meta-common/recipes-intel/hsbp/hsbp-manager_git.bb b/meta-openbmc-mods/meta-common/recipes-intel/hsbp/hsbp-manager_git.bb
index 1aa6763b2..636a8a3c3 100644
--- a/meta-openbmc-mods/meta-common/recipes-intel/hsbp/hsbp-manager_git.bb
+++ b/meta-openbmc-mods/meta-common/recipes-intel/hsbp/hsbp-manager_git.bb
@@ -2,7 +2,7 @@ SUMMARY = "HSBP Manager"
DESCRIPTION = "HSBP Manager monitors HSBPs through SMBUS"
SRC_URI = "git://github.com/openbmc/s2600wf-misc.git"
-SRCREV = "d0d36f10b1269dc863128ead80cf6eb1a9b1254b"
+SRCREV = "e6db783f06594c4f0057f7b6c22b90d6f344960b"
PV = "0.1+git${SRCPV}"
LICENSE = "Apache-2.0"
diff --git a/meta-openbmc-mods/meta-common/recipes-intel/intel-pfr/intel-pfr-manager_git.bb b/meta-openbmc-mods/meta-common/recipes-intel/intel-pfr/intel-pfr-manager_git.bb
index 4794487d6..65348652c 100644
--- a/meta-openbmc-mods/meta-common/recipes-intel/intel-pfr/intel-pfr-manager_git.bb
+++ b/meta-openbmc-mods/meta-common/recipes-intel/intel-pfr/intel-pfr-manager_git.bb
@@ -9,7 +9,7 @@ LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=e3fc50a88d0a364313df4b21ef20c29e"
SRC_URI = "git://github.com/Intel-BMC/provingground.git;protocol=ssh"
-SRCREV = "eddf621897090ba346b1aaa81a4b8be12076ab60"
+SRCREV = "5a03fdc6a119b65ecf320622ce2809e340749fa9"
inherit cmake systemd
SYSTEMD_SERVICE_${PN} = "xyz.openbmc_project.PFR.Manager.service"
diff --git a/meta-openbmc-mods/meta-common/recipes-intel/psu-manager/psu-manager.bb b/meta-openbmc-mods/meta-common/recipes-intel/psu-manager/psu-manager.bb
index c24368720..0c032c509 100644
--- a/meta-openbmc-mods/meta-common/recipes-intel/psu-manager/psu-manager.bb
+++ b/meta-openbmc-mods/meta-common/recipes-intel/psu-manager/psu-manager.bb
@@ -2,7 +2,7 @@ SUMMARY = "Power supply manager for Intel based platform"
DESCRIPTION = "Power supply manager which include PSU Cold Redundancy service"
SRC_URI = "git://github.com/Intel-BMC/provingground.git;protocol=ssh"
-SRCREV = "eddf621897090ba346b1aaa81a4b8be12076ab60"
+SRCREV = "5a03fdc6a119b65ecf320622ce2809e340749fa9"
S = "${WORKDIR}/git/psu-manager/"
diff --git a/meta-openbmc-mods/meta-common/recipes-intel/smbios/smbios-mdrv2.bb b/meta-openbmc-mods/meta-common/recipes-intel/smbios/smbios-mdrv2.bb
index e42e8fc6f..59cdc8781 100644
--- a/meta-openbmc-mods/meta-common/recipes-intel/smbios/smbios-mdrv2.bb
+++ b/meta-openbmc-mods/meta-common/recipes-intel/smbios/smbios-mdrv2.bb
@@ -2,7 +2,7 @@ SUMMARY = "SMBIOS MDR version 2 service for Intel based platform"
DESCRIPTION = "SMBIOS MDR version 2 service for Intel based platfrom"
SRC_URI = "git://github.com/Intel-BMC/provingground.git;protocol=ssh"
-SRCREV = "eddf621897090ba346b1aaa81a4b8be12076ab60"
+SRCREV = "5a03fdc6a119b65ecf320622ce2809e340749fa9"
S = "${WORKDIR}/git/services/smbios-mdrv2/"
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0001-arm-dts-add-DTS-for-Intel-ast2500-platforms.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0001-arm-dts-add-DTS-for-Intel-ast2500-platforms.patch
index a172e8fb2..baf9dba9a 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0001-arm-dts-add-DTS-for-Intel-ast2500-platforms.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0001-arm-dts-add-DTS-for-Intel-ast2500-platforms.patch
@@ -1,4 +1,4 @@
-From 9c7935cd0d6d888e86c33958a7dada2f5afcb543 Mon Sep 17 00:00:00 2001
+From 89dec433cd2fcfcb8690b315bb4e787d53de2296 Mon Sep 17 00:00:00 2001
From: Yuan Li <yuan.li@linux.intel.com>
Date: Tue, 19 Sep 2017 15:55:39 +0800
Subject: [PATCH] arm: dts: add DTS for Intel ast2500 platforms
@@ -13,14 +13,15 @@ Signed-off-by: Jason M. Bills <jason.m.bills@linux.intel.com>
Signed-off-by: Zhu, Yunge <yunge.zhu@linux.intel.com>
Signed-off-by: Qiang XU <qiang.xu@linux.intel.com>
Signed-off-by: Chen Yugang <yugang.chen@linux.intel.com>
+Signed-off-by: Zhikui Ren <zhikui.ren@intel.com>
---
- arch/arm/boot/dts/aspeed-bmc-intel-ast2500.dts | 470 +++++++++++++++++++++++++
- 1 file changed, 470 insertions(+)
+ arch/arm/boot/dts/aspeed-bmc-intel-ast2500.dts | 471 +++++++++++++++++++++++++
+ 1 file changed, 471 insertions(+)
create mode 100644 arch/arm/boot/dts/aspeed-bmc-intel-ast2500.dts
diff --git a/arch/arm/boot/dts/aspeed-bmc-intel-ast2500.dts b/arch/arm/boot/dts/aspeed-bmc-intel-ast2500.dts
new file mode 100644
-index 0000000..4f3ef45
+index 0000000..6ded94d
--- /dev/null
+++ b/arch/arm/boot/dts/aspeed-bmc-intel-ast2500.dts
@@ -0,0 +1,470 @@
@@ -181,7 +182,7 @@ index 0000000..4f3ef45
+ /*F0-F7*/ "NMI_OUT","","","","CPU_ERR0","CPU_ERR1","PLTRST_N","PRDY_N",
+ /*G0-G7*/ "CPU_ERR2","CPU_CATERR","PCH_BMC_THERMTRIP","","","FM_BMC_BOARD_SKU_ID5_N","","",
+ /*H0-H7*/ "","","","","","","","",
-+ /*I0-I7*/ "","","","","","","","",
++ /*I0-I7*/ "FM_SYS_FAN0_PRSNT_D_N","FM_SYS_FAN1_PRSNT_D_N","FM_SYS_FAN2_PRSNT_D_N","FM_SYS_FAN3_PRSNT_D_N","FM_SYS_FAN4_PRSNT_D_N","FM_SYS_FAN5_PRSNT_D_N","","",
+ /*J0-J7*/ "","","","","","","","",
+ /*K0-K7*/ "","","","","","","","",
+ /*L0-L7*/ "","","","","","","","",
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0001-arm-dts-add-DTS-for-Intel-ast2600-platforms.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0001-arm-dts-add-DTS-for-Intel-ast2600-platforms.patch
index 7fbe44141..34490822e 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0001-arm-dts-add-DTS-for-Intel-ast2600-platforms.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0001-arm-dts-add-DTS-for-Intel-ast2600-platforms.patch
@@ -150,10 +150,10 @@ index 000000000000..1ad46e8bc69b
+ NMI_OUT -> IRQ_BMC_CPU_NMI_R
+ PLTRST_N -> RST_PLTRST_BMC_N
+ PRDY_N -> DBP_ASD_BMC_PRDY_R_N
-+ PWR_DEBUG_N ->
++ PWR_DEBUG_N ->
+ XDP_PRST_N ->
-+ SYSPWROK ->
-+ RSMRST_N ->
++ SYSPWROK ->
++ RSMRST_N ->
+ SIO_S3 -> FM_SLPS3_R_N
+ SIO_S5 -> FM_SLPS4_R_N
+ SIO_ONCONTROL -> FM_BMC_ONCTL_R_N
@@ -290,7 +290,7 @@ index 000000000000..1ad46e8bc69b
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_rgmii2_default>;
+ clocks = <&syscon ASPEED_CLK_GATE_MAC2CLK>,
-+ <&syscon ASPEED_CLK_GATE_MAC2RCLK>;
++ <&syscon ASPEED_CLK_MAC2RCLK>;
+ clock-names = "MACCLK", "RCLK";
+ phy-mode = "rgmii";
+ phy-handle = <&ethphy1>;
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0001-arm-dts-base-aspeed-g6-dtsi-fixups.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0001-arm-dts-base-aspeed-g6-dtsi-fixups.patch
index 4fc3d8582..d75229a15 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0001-arm-dts-base-aspeed-g6-dtsi-fixups.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0001-arm-dts-base-aspeed-g6-dtsi-fixups.patch
@@ -1,4 +1,4 @@
-From 58d4715d6ac08a20f68044875fdc3afaf75ee2a1 Mon Sep 17 00:00:00 2001
+From 5e5758fe5929766a9b4677b86f9343a777526fe8 Mon Sep 17 00:00:00 2001
From: Vernon Mauery <vernon.mauery@linux.intel.com>
Date: Thu, 12 Sep 2019 15:55:39 +0800
Subject: [PATCH] arm: dts: base aspeed g6 dtsi fixups
@@ -8,15 +8,15 @@ This mostly includes entries for the drivers that are not upstream.
Signed-off-by: Vernon Mauery <vernon.mauery@linux.intel.com>
---
- arch/arm/boot/dts/aspeed-g6.dtsi | 207 +++++++++++++++++++++-
- include/dt-bindings/clock/ast2600-clock.h | 8 +
- 2 files changed, 213 insertions(+), 2 deletions(-)
+ arch/arm/boot/dts/aspeed-g6.dtsi | 129 +++++++++++++++++++++++++++++-
+ include/dt-bindings/clock/ast2600-clock.h | 8 ++
+ 2 files changed, 135 insertions(+), 2 deletions(-)
diff --git a/arch/arm/boot/dts/aspeed-g6.dtsi b/arch/arm/boot/dts/aspeed-g6.dtsi
-index 8ac435b3dbde..5de3af52830d 100644
+index 2af9efa1faa1..54add29d8217 100644
--- a/arch/arm/boot/dts/aspeed-g6.dtsi
+++ b/arch/arm/boot/dts/aspeed-g6.dtsi
-@@ -28,6 +28,13 @@
+@@ -28,6 +28,12 @@
i2c13 = &i2c13;
i2c14 = &i2c14;
i2c15 = &i2c15;
@@ -26,11 +26,10 @@ index 8ac435b3dbde..5de3af52830d 100644
+ i3c3 = &i3c3;
+ i3c4 = &i3c4;
+ i3c5 = &i3c5;
-+ peci0 = &peci0;
serial0 = &uart1;
serial1 = &uart2;
serial2 = &uart3;
-@@ -273,11 +284,21 @@
+@@ -297,11 +303,21 @@
quality = <100>;
};
@@ -53,7 +52,7 @@ index 8ac435b3dbde..5de3af52830d 100644
interrupts = <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>;
gpio-ranges = <&pinctrl 0 0 208>;
ngpios = <208>;
-@@ -290,7 +311,7 @@
+@@ -314,7 +330,7 @@
#gpio-cells = <2>;
gpio-controller;
compatible = "aspeed,ast2600-gpio";
@@ -62,17 +61,10 @@ index 8ac435b3dbde..5de3af52830d 100644
interrupts = <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>;
gpio-ranges = <&pinctrl 0 208 36>;
ngpios = <36>;
-@@ -338,6 +407,20 @@
- status = "disabled";
+@@ -398,6 +414,13 @@
+ ranges = <0x0 0x1e78b000 0x100>;
};
-+ peci: bus@1e78b000 {
-+ compatible = "simple-bus";
-+ #address-cells = <1>;
-+ #size-cells = <1>;
-+ ranges = <0x0 0x1e78b000 0x60>;
-+ };
-+
+ i3c: bus@1e7a0000 {
+ compatible = "simple-bus";
+ #address-cells = <1>;
@@ -83,7 +75,7 @@ index 8ac435b3dbde..5de3af52830d 100644
lpc: lpc@1e789000 {
compatible = "aspeed,ast2600-lpc", "simple-mfd";
reg = <0x1e789000 0x1000>;
-@@ -426,6 +509,20 @@
+@@ -486,6 +509,20 @@
sio_regs: regs {
compatible = "aspeed,bmc-misc";
};
@@ -104,32 +96,7 @@ index 8ac435b3dbde..5de3af52830d 100644
};
};
-@@ -529,6 +626,24 @@
-
- #include "aspeed-g6-pinctrl.dtsi"
-
-+&peci {
-+ peci0: peci-bus@0 {
-+ compatible = "aspeed,ast2500-peci";
-+ reg = <0x0 0x100>;
-+ #address-cells = <1>;
-+ #size-cells = <0>;
-+ interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>;
-+ clocks = <&syscon ASPEED_CLK_GATE_REF0CLK>, <&syscon ASPEED_CLK_AHB>;
-+ resets = <&syscon ASPEED_RESET_PECI>;
-+ clock-frequency = <24000000>;
-+ msg-timing = <1>;
-+ addr-timing = <1>;
-+ rd-sampling-point = <8>;
-+ cmd-timeout-ms = <1000>;
-+ status = "disabled";
-+ };
-+};
-+
- &i2c {
- i2c0: i2c-bus@40 {
- #address-cells = <1>;
-@@ -770,3 +885,91 @@
+@@ -871,3 +908,91 @@
status = "disabled";
};
};
@@ -222,10 +189,10 @@ index 8ac435b3dbde..5de3af52830d 100644
+ };
+};
diff --git a/include/dt-bindings/clock/ast2600-clock.h b/include/dt-bindings/clock/ast2600-clock.h
-index ac567fc84a87..94350356cfb1 100644
+index 62b9520a00fd..3d90582a813f 100644
--- a/include/dt-bindings/clock/ast2600-clock.h
+++ b/include/dt-bindings/clock/ast2600-clock.h
-@@ -92,6 +92,14 @@
+@@ -91,6 +91,14 @@
/* Only list resets here that are not part of a gate */
#define ASPEED_RESET_ADC 55
#define ASPEED_RESET_JTAG_MASTER2 54
@@ -241,5 +208,5 @@ index ac567fc84a87..94350356cfb1 100644
#define ASPEED_RESET_PWM 37
#define ASPEED_RESET_PECI 36
--
-2.17.1
+2.7.4
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0002-Enable-pass-through-on-GPIOE1-and-GPIOE3-free.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0002-Enable-pass-through-on-GPIOE1-and-GPIOE3-free.patch
index 58d81db75..6123b8701 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0002-Enable-pass-through-on-GPIOE1-and-GPIOE3-free.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0002-Enable-pass-through-on-GPIOE1-and-GPIOE3-free.patch
@@ -1,4 +1,4 @@
-From ae2bcda6000d7ec278ea78d1eda6e8aacbe5a741 Mon Sep 17 00:00:00 2001
+From 12ef9a4189cd44212a5a5bd2e1c6fce0756ace9f Mon Sep 17 00:00:00 2001
From: "Jason M. Bills" <jason.m.bills@linux.intel.com>
Date: Fri, 3 May 2019 16:12:39 -0700
Subject: [PATCH] Enable pass-through on GPIOE1 and GPIOE3 free
@@ -14,14 +14,14 @@ enabled again.
Signed-off-by: Jason M. Bills <jason.m.bills@linux.intel.com>
---
- drivers/pinctrl/aspeed/pinctrl-aspeed-g5.c | 1 +
- drivers/pinctrl/aspeed/pinctrl-aspeed-g6.c | 1 +
- drivers/pinctrl/aspeed/pinctrl-aspeed.c | 60 ++++++++++++++++++++++
+ drivers/pinctrl/aspeed/pinctrl-aspeed-g5.c | 17 ++++++++++
+ drivers/pinctrl/aspeed/pinctrl-aspeed-g6.c | 17 ++++++++++
+ drivers/pinctrl/aspeed/pinctrl-aspeed.c | 53 ++++++++++++++++++++++++++++++
drivers/pinctrl/aspeed/pinctrl-aspeed.h | 3 ++
- 4 files changed, 65 insertions(+)
+ 4 files changed, 90 insertions(+)
diff --git a/drivers/pinctrl/aspeed/pinctrl-aspeed-g5.c b/drivers/pinctrl/aspeed/pinctrl-aspeed-g5.c
-index 0cab4c2576e2..a8d64184ace1 100644
+index 0cab4c2576e2..c5406e2da320 100644
--- a/drivers/pinctrl/aspeed/pinctrl-aspeed-g5.c
+++ b/drivers/pinctrl/aspeed/pinctrl-aspeed-g5.c
@@ -2780,6 +2780,22 @@ static int aspeed_g5_sig_expr_set(struct aspeed_pinmux_data *ctx,
@@ -47,7 +47,7 @@ index 0cab4c2576e2..a8d64184ace1 100644
static const struct aspeed_pin_config_map aspeed_g5_pin_config_map[] = {
{ PIN_CONFIG_BIAS_PULL_DOWN, 0, 1, BIT_MASK(0)},
{ PIN_CONFIG_BIAS_PULL_DOWN, -1, 0, BIT_MASK(0)},
-@@ -2815,6 +2837,7 @@ static const struct pinmux_ops aspeed_g5_pinmux_ops = {
+@@ -2815,6 +2831,7 @@ static const struct pinmux_ops aspeed_g5_pinmux_ops = {
.get_function_groups = aspeed_pinmux_get_fn_groups,
.set_mux = aspeed_pinmux_set_mux,
.gpio_request_enable = aspeed_gpio_request_enable,
@@ -56,7 +56,7 @@ index 0cab4c2576e2..a8d64184ace1 100644
};
diff --git a/drivers/pinctrl/aspeed/pinctrl-aspeed-g6.c b/drivers/pinctrl/aspeed/pinctrl-aspeed-g6.c
-index eb0c11a9fbf2..cae6fdd83c80 100644
+index fb96e8d2e6c8..bcd8c5656265 100644
--- a/drivers/pinctrl/aspeed/pinctrl-aspeed-g6.c
+++ b/drivers/pinctrl/aspeed/pinctrl-aspeed-g6.c
@@ -2655,6 +2655,22 @@ static int aspeed_g6_sig_expr_set(struct aspeed_pinmux_data *ctx,
@@ -82,7 +82,7 @@ index eb0c11a9fbf2..cae6fdd83c80 100644
static const struct aspeed_pin_config_map aspeed_g6_pin_config_map[] = {
{ PIN_CONFIG_BIAS_PULL_DOWN, 0, 1, BIT_MASK(0)},
{ PIN_CONFIG_BIAS_PULL_DOWN, -1, 0, BIT_MASK(0)},
-@@ -2695,6 +2717,7 @@ static const struct pinmux_ops aspeed_g6_pinmux_ops = {
+@@ -2695,6 +2711,7 @@ static const struct pinmux_ops aspeed_g6_pinmux_ops = {
.get_function_groups = aspeed_pinmux_get_fn_groups,
.set_mux = aspeed_pinmux_set_mux,
.gpio_request_enable = aspeed_gpio_request_enable,
@@ -91,7 +91,7 @@ index eb0c11a9fbf2..cae6fdd83c80 100644
};
diff --git a/drivers/pinctrl/aspeed/pinctrl-aspeed.c b/drivers/pinctrl/aspeed/pinctrl-aspeed.c
-index 54933665b5f8..aa7d56e99824 100644
+index 53f3f8aec695..ca53f3743d16 100644
--- a/drivers/pinctrl/aspeed/pinctrl-aspeed.c
+++ b/drivers/pinctrl/aspeed/pinctrl-aspeed.c
@@ -375,6 +375,59 @@ int aspeed_gpio_request_enable(struct pinctrl_dev *pctldev,
@@ -155,7 +155,7 @@ index 54933665b5f8..aa7d56e99824 100644
struct pinctrl_desc *pdesc,
struct aspeed_pinctrl_data *pdata)
diff --git a/drivers/pinctrl/aspeed/pinctrl-aspeed.h b/drivers/pinctrl/aspeed/pinctrl-aspeed.h
-index a5d83986f32e..c1104341e202 100644
+index 4dcde3bc29c8..bd497c20a15f 100644
--- a/drivers/pinctrl/aspeed/pinctrl-aspeed.h
+++ b/drivers/pinctrl/aspeed/pinctrl-aspeed.h
@@ -101,6 +101,9 @@ int aspeed_pinmux_set_mux(struct pinctrl_dev *pctldev, unsigned int function,
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0006-Allow-monitoring-of-power-control-input-GPIOs.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0006-Allow-monitoring-of-power-control-input-GPIOs.patch
index 0b0e430c6..b9c14c1ac 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0006-Allow-monitoring-of-power-control-input-GPIOs.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0006-Allow-monitoring-of-power-control-input-GPIOs.patch
@@ -1,4 +1,4 @@
-From e9d15bf9fdec1cd17c2ed335566b7d463d63fbdb Mon Sep 17 00:00:00 2001
+From 5f984831a3f451e299ecaf42d65dee36ff0ffeee Mon Sep 17 00:00:00 2001
From: "Jason M. Bills" <jason.m.bills@linux.intel.com>
Date: Fri, 24 May 2019 12:42:59 -0700
Subject: [PATCH] Allow monitoring of power control input GPIOs
@@ -24,10 +24,11 @@ and read the GPIO value.
Signed-off-by: Jason M. Bills <jason.m.bills@linux.intel.com>
---
drivers/pinctrl/aspeed/pinctrl-aspeed-g5.c | 10 +++++-----
- 1 file changed, 5 insertions(+), 5 deletions(-)
+ drivers/pinctrl/aspeed/pinctrl-aspeed-g6.c | 10 +++++-----
+ 2 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/drivers/pinctrl/aspeed/pinctrl-aspeed-g5.c b/drivers/pinctrl/aspeed/pinctrl-aspeed-g5.c
-index 5e7f53fab76e..b08b5325edb1 100644
+index c5406e2da320..fde74c23ca7f 100644
--- a/drivers/pinctrl/aspeed/pinctrl-aspeed-g5.c
+++ b/drivers/pinctrl/aspeed/pinctrl-aspeed-g5.c
@@ -279,7 +279,7 @@ FUNC_GROUP_DECL(SD2, F19, E21, F20, D20, D21, E20, G18, C21);
@@ -76,7 +77,7 @@ index 5e7f53fab76e..b08b5325edb1 100644
SIG_EXPR_LIST_DECL_SINGLE(P21, DASHP21, DASHP21, SIG_DESC_SET(SCU94, 11));
PIN_DECL_2(P21, GPIOY3, SIOONCTRL, DASHP21);
diff --git a/drivers/pinctrl/aspeed/pinctrl-aspeed-g6.c b/drivers/pinctrl/aspeed/pinctrl-aspeed-g6.c
-index cae6fdd83c80..6ff185d63ab7 100644
+index bcd8c5656265..c18ceb52c289 100644
--- a/drivers/pinctrl/aspeed/pinctrl-aspeed-g6.c
+++ b/drivers/pinctrl/aspeed/pinctrl-aspeed-g6.c
@@ -762,7 +762,7 @@ SSSF_PIN_DECL(AC23, GPIOO7, PWM7, SIG_DESC_SET(SCU41C, 23));
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0008-Report-link-statistics-for-the-NCSI-channel.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0008-Report-link-statistics-for-the-NCSI-channel.patch
index 643deb659..7e38110af 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0008-Report-link-statistics-for-the-NCSI-channel.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0008-Report-link-statistics-for-the-NCSI-channel.patch
@@ -1,4 +1,4 @@
-From f3300099b6638df5829e75b1fbfbb6e7ebc8b2b9 Mon Sep 17 00:00:00 2001
+From b08fba62b18ecb04d3e7dafac6bd819dd9b90d35 Mon Sep 17 00:00:00 2001
From: Johnathan Mantey <johnathanx.mantey@intel.com>
Date: Thu, 1 Aug 2019 11:29:41 -0700
Subject: [PATCH] Report link statistics for the NCSI channel
@@ -14,10 +14,10 @@ Signed-off-by: Johnathan Mantey <johnathanx.mantey@intel.com>
1 file changed, 21 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/faraday/ftgmac100.c b/drivers/net/ethernet/faraday/ftgmac100.c
-index 9b7af94a40bb..4cd679233795 100644
+index 2e5fba354412..b1eb3abe759b 100644
--- a/drivers/net/ethernet/faraday/ftgmac100.c
+++ b/drivers/net/ethernet/faraday/ftgmac100.c
-@@ -1216,10 +1216,30 @@ static int ftgmac100_set_pauseparam(struct net_device *netdev,
+@@ -1218,10 +1218,30 @@ static int ftgmac100_set_pauseparam(struct net_device *netdev,
return 0;
}
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0014-arm-dts-aspeed-g5-add-espi.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0014-arm-dts-aspeed-g5-add-espi.patch
index 094fc8396..993beb9ec 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0014-arm-dts-aspeed-g5-add-espi.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0014-arm-dts-aspeed-g5-add-espi.patch
@@ -1,43 +1,18 @@
-From b70fe24abeef901b3ba8e32b5e5d8aaf35ec061d Mon Sep 17 00:00:00 2001
+From ea37c85db4d2a593d4f3392e21ec2cc108b111e5 Mon Sep 17 00:00:00 2001
From: Juston Li <juston.li@intel.com>
Date: Mon, 27 Mar 2017 11:16:00 -0700
Subject: [PATCH] arm: dts: aspeed-g5: add espi
Signed-off-by: Juston Li <juston.li@intel.com>
---
- arch/arm/boot/dts/aspeed-g5.dtsi | 18 +++++++++++++++++-
- 1 file changed, 17 insertions(+), 1 deletion(-)
+ arch/arm/boot/dts/aspeed-g5.dtsi | 7 +++++++
+ 1 file changed, 7 insertions(+)
diff --git a/arch/arm/boot/dts/aspeed-g5.dtsi b/arch/arm/boot/dts/aspeed-g5.dtsi
-index 00f05bd3375d..271f3c96456a 100644
+index 6580b232771e..452ec323534f 100644
--- a/arch/arm/boot/dts/aspeed-g5.dtsi
+++ b/arch/arm/boot/dts/aspeed-g5.dtsi
-@@ -311,7 +311,7 @@
- #gpio-cells = <2>;
- gpio-controller;
- compatible = "aspeed,ast2500-gpio";
-- reg = <0x1e780000 0x1000>;
-+ reg = <0x1e780000 0x0200>;
- interrupts = <20>;
- gpio-ranges = <&pinctrl 0 0 232>;
- clocks = <&syscon ASPEED_CLK_APB>;
-@@ -319,6 +319,15 @@
- #interrupt-cells = <2>;
- };
-
-+ sgpio: sgpio@1e780200 {
-+ #gpio-cells = <2>;
-+ gpio-controller;
-+ compatible = "aspeed,ast2500-sgpio";
-+ reg = <0x1e780200 0x0100>;
-+ interrupts = <40>;
-+ interrupt-controller;
-+ };
-+
- rtc: rtc@1e781000 {
- compatible = "aspeed,ast2500-rtc";
- reg = <0x1e781000 0x18>;
-@@ -394,6 +403,13 @@
+@@ -408,6 +408,13 @@
status = "disabled";
};
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0016-Add-ASPEED-SGPIO-driver.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0016-Add-ASPEED-SGPIO-driver.patch
index 2f03c9e5a..950272e1b 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0016-Add-ASPEED-SGPIO-driver.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0016-Add-ASPEED-SGPIO-driver.patch
@@ -1,4 +1,4 @@
-From ab104c6067683a3a251e2814991474243b7e1cb8 Mon Sep 17 00:00:00 2001
+From a49e262cca260d15dc245fdd1870c89068042063 Mon Sep 17 00:00:00 2001
From: "Feist, James" <james.feist@intel.com>
Date: Tue, 4 Jun 2019 14:00:39 -0700
Subject: [PATCH] Add ASPEED SGPIO driver
@@ -10,17 +10,17 @@ Signed-off-by: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
---
drivers/gpio/Kconfig | 8 +
drivers/gpio/Makefile | 1 +
- drivers/gpio/sgpio-aspeed.c | 703 ++++++++++++++++++++++++++++++++++++++++++++
- 3 files changed, 712 insertions(+)
+ drivers/gpio/sgpio-aspeed.c | 704 ++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 713 insertions(+)
create mode 100644 drivers/gpio/sgpio-aspeed.c
diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig
-index bb13c266c329..4061686d8651 100644
+index 7138290cdd36..0235b20a95f6 100644
--- a/drivers/gpio/Kconfig
+++ b/drivers/gpio/Kconfig
-@@ -120,6 +120,14 @@ config GPIO_ASPEED
+@@ -128,6 +128,14 @@ config GPIO_ASPEED_SGPIO
help
- Say Y here to support Aspeed AST2400 and AST2500 GPIO controllers.
+ Say Y here to support Aspeed AST2500 SGPIO functionality.
+config SGPIO_ASPEED
+ tristate "ASPEED SGPIO support"
@@ -34,23 +34,23 @@ index bb13c266c329..4061686d8651 100644
tristate "Atheros AR71XX/AR724X/AR913X GPIO support"
default y if ATH79
diff --git a/drivers/gpio/Makefile b/drivers/gpio/Makefile
-index a4e91175c708..bebbd8205c11 100644
+index e4599f90f702..0e80c8cd5ae7 100644
--- a/drivers/gpio/Makefile
+++ b/drivers/gpio/Makefile
-@@ -32,6 +32,7 @@ obj-$(CONFIG_GPIO_AMD_FCH) += gpio-amd-fch.o
- obj-$(CONFIG_GPIO_AMDPT) += gpio-amdpt.o
+@@ -33,6 +33,7 @@ obj-$(CONFIG_GPIO_AMDPT) += gpio-amdpt.o
obj-$(CONFIG_GPIO_ARIZONA) += gpio-arizona.o
obj-$(CONFIG_GPIO_ASPEED) += gpio-aspeed.o
+ obj-$(CONFIG_GPIO_ASPEED_SGPIO) += gpio-aspeed-sgpio.o
+obj-$(CONFIG_SGPIO_ASPEED) += sgpio-aspeed.o
obj-$(CONFIG_GPIO_ATH79) += gpio-ath79.o
obj-$(CONFIG_GPIO_BCM_KONA) += gpio-bcm-kona.o
obj-$(CONFIG_GPIO_BD70528) += gpio-bd70528.o
diff --git a/drivers/gpio/sgpio-aspeed.c b/drivers/gpio/sgpio-aspeed.c
new file mode 100644
-index 000000000000..b6e9ccee774d
+index 000000000000..5028e9144a75
--- /dev/null
+++ b/drivers/gpio/sgpio-aspeed.c
-@@ -0,0 +1,703 @@
+@@ -0,0 +1,704 @@
+// SPDX-License-Identifier: GPL-2.0+
+// Copyright (c) 2019 Intel Corporation
+
@@ -650,6 +650,7 @@ index 000000000000..b6e9ccee774d
+static const struct of_device_id aspeed_sgpio_of_table[] = {
+ { .compatible = "aspeed,ast2400-sgpio", .data = &ast2400_config },
+ { .compatible = "aspeed,ast2500-sgpio", .data = &ast2500_config },
++ { .compatible = "aspeed,ast2600-sgpio", .data = &ast2500_config },
+ { }
+};
+MODULE_DEVICE_TABLE(of, aspeed_sgpio_of_table);
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0017-SGPIO-DT-and-pinctrl-fixup.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0017-SGPIO-DT-and-pinctrl-fixup.patch
index b4f46c2c8..50c31f625 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0017-SGPIO-DT-and-pinctrl-fixup.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0017-SGPIO-DT-and-pinctrl-fixup.patch
@@ -1,4 +1,4 @@
-From 4c5ab7c103b693096ae719abd16bc80b81043beb Mon Sep 17 00:00:00 2001
+From 89b5ebd26fc44b4bf820aa507bc88eec028ba218 Mon Sep 17 00:00:00 2001
From: Vernon Mauery <vernon.mauery@intel.com>
Date: Wed, 16 May 2018 10:03:14 -0700
Subject: [PATCH] SGPIO DT and pinctrl fixup
@@ -9,15 +9,16 @@ Signed-off-by: Vernon Mauery <vernon.mauery@intel.com>
Signed-off-by: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
---
arch/arm/boot/dts/aspeed-g4.dtsi | 56 +++++++++++-------------------
- arch/arm/boot/dts/aspeed-g5.dtsi | 5 +++
+ arch/arm/boot/dts/aspeed-g5.dtsi | 3 +-
+ arch/arm/boot/dts/aspeed-g6.dtsi | 15 ++++++++
drivers/pinctrl/aspeed/pinctrl-aspeed-g4.c | 48 ++++++++++++-------------
- 3 files changed, 49 insertions(+), 60 deletions(-)
+ 4 files changed, 60 insertions(+), 62 deletions(-)
diff --git a/arch/arm/boot/dts/aspeed-g4.dtsi b/arch/arm/boot/dts/aspeed-g4.dtsi
-index cc78564b2f8d..ee86b41af291 100644
+index b875c0785833..e9fd66ab3099 100644
--- a/arch/arm/boot/dts/aspeed-g4.dtsi
+++ b/arch/arm/boot/dts/aspeed-g4.dtsi
-@@ -255,6 +255,20 @@
+@@ -254,6 +254,20 @@
#interrupt-cells = <2>;
};
@@ -38,7 +39,7 @@ index cc78564b2f8d..ee86b41af291 100644
timer: timer@1e782000 {
/* This timer is a Faraday FTTMR010 derivative */
compatible = "aspeed,ast2400-timer";
-@@ -1228,44 +1242,14 @@
+@@ -1227,44 +1241,14 @@
groups = "SD2";
};
@@ -90,33 +91,31 @@ index cc78564b2f8d..ee86b41af291 100644
pinctrl_sioonctrl_default: sioonctrl_default {
diff --git a/arch/arm/boot/dts/aspeed-g5.dtsi b/arch/arm/boot/dts/aspeed-g5.dtsi
-index 271f3c96456a..128e0b5bbae2 100644
+index 452ec323534f..20b2eb8052b7 100644
--- a/arch/arm/boot/dts/aspeed-g5.dtsi
+++ b/arch/arm/boot/dts/aspeed-g5.dtsi
-@@ -326,6 +326,11 @@
+@@ -326,8 +326,7 @@
reg = <0x1e780200 0x0100>;
- interrupts = <40>;
+ clocks = <&syscon ASPEED_CLK_APB>;
interrupt-controller;
-+ clocks = <&syscon ASPEED_CLK_APB>;
+- ngpios = <8>;
+- bus-frequency = <12000000>;
+ bus-frequency = <1000000>;
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&pinctrl_sgpm_default>;
-+ status = "disabled";
- };
-
- rtc: rtc@1e781000 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_sgpm_default>;
+ status = "disabled";
diff --git a/arch/arm/boot/dts/aspeed-g6.dtsi b/arch/arm/boot/dts/aspeed-g6.dtsi
-index 1aab48fbf49e..567f268a3032 100644
+index 54add29d8217..459070693aba 100644
--- a/arch/arm/boot/dts/aspeed-g6.dtsi
+++ b/arch/arm/boot/dts/aspeed-g6.dtsi
-@@ -356,6 +356,21 @@
+@@ -339,6 +339,21 @@
#interrupt-cells = <2>;
};
+ sgpio: sgpio@1e780500 {
+ #gpio-cells = <2>;
+ gpio-controller;
-+ compatible = "aspeed,ast2500-sgpio";
++ compatible = "aspeed,ast2600-sgpio";
+ reg = <0x1e780500 0x0100>;
+ #interrupt-cells = <2>;
+ interrupts = <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>;
@@ -132,7 +131,7 @@ index 1aab48fbf49e..567f268a3032 100644
compatible = "aspeed,ast2600-rtc";
reg = <0x1e781000 0x18>;
diff --git a/drivers/pinctrl/aspeed/pinctrl-aspeed-g4.c b/drivers/pinctrl/aspeed/pinctrl-aspeed-g4.c
-index 95ea593fa29d..70284c5f9ad9 100644
+index bfed0e274643..10dadfd0e6e1 100644
--- a/drivers/pinctrl/aspeed/pinctrl-aspeed-g4.c
+++ b/drivers/pinctrl/aspeed/pinctrl-aspeed-g4.c
@@ -430,16 +430,22 @@ SSSF_PIN_DECL(E16, GPIOF6, TXD4, SIG_DESC_SET(SCU80, 30));
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0018-Update-PECI-drivers-to-sync-with-linux-upstreaming-v.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0018-Update-PECI-drivers-to-sync-with-linux-upstreaming-v.patch
deleted file mode 100644
index d1da4c599..000000000
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0018-Update-PECI-drivers-to-sync-with-linux-upstreaming-v.patch
+++ /dev/null
@@ -1,5611 +0,0 @@
-From edeea958f026102ce28c8b760f7a96b9ffd7f65a Mon Sep 17 00:00:00 2001
-From: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
-Date: Mon, 7 Jan 2019 09:56:10 -0800
-Subject: [PATCH] Update PECI drivers to sync with linux upstreaming version
-
-Upstreaming is in holding. It's for adding DTS sensor with PECI
-subsystem code update.
-
-Signed-off-by: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
-Signed-off-by: Jason M. Bills <jason.m.bills@linux.intel.com>
----
- Documentation/hwmon/peci-cputemp | 34 +-
- drivers/hwmon/Kconfig | 4 +-
- drivers/hwmon/peci-cputemp.c | 171 +++---
- drivers/hwmon/peci-dimmtemp.c | 184 +++++--
- drivers/hwmon/peci-hwmon.h | 9 +-
- drivers/mfd/Kconfig | 5 +-
- drivers/mfd/intel-peci-client.c | 51 +-
- drivers/peci/Kconfig | 46 +-
- drivers/peci/Makefile | 7 +-
- drivers/peci/busses/Kconfig | 32 ++
- drivers/peci/busses/Makefile | 7 +
- drivers/peci/busses/peci-aspeed.c | 492 +++++++++++++++++
- drivers/peci/busses/peci-npcm.c | 410 +++++++++++++++
- drivers/peci/peci-aspeed.c | 505 ------------------
- drivers/peci/peci-core.c | 959 +++++++++++++++++++---------------
- drivers/peci/peci-dev.c | 346 ++++++++++++
- drivers/peci/peci-npcm.c | 410 ---------------
- include/linux/mfd/intel-peci-client.h | 31 +-
- include/linux/peci.h | 30 +-
- include/uapi/linux/peci-ioctl.h | 416 +++++++++------
- 20 files changed, 2446 insertions(+), 1703 deletions(-)
- create mode 100644 drivers/peci/busses/Kconfig
- create mode 100644 drivers/peci/busses/Makefile
- create mode 100644 drivers/peci/busses/peci-aspeed.c
- create mode 100644 drivers/peci/busses/peci-npcm.c
- delete mode 100644 drivers/peci/peci-aspeed.c
- create mode 100644 drivers/peci/peci-dev.c
- delete mode 100644 drivers/peci/peci-npcm.c
-
-diff --git a/Documentation/hwmon/peci-cputemp b/Documentation/hwmon/peci-cputemp
-index 821a925..a3a3e46 100644
---- a/Documentation/hwmon/peci-cputemp
-+++ b/Documentation/hwmon/peci-cputemp
-@@ -51,28 +51,38 @@ temp1_crit Provides shutdown temperature of the CPU package which
- temp1_crit_hyst Provides the hysteresis value from Tcontrol to Tjmax of
- the CPU package.
-
--temp2_label "Tcontrol"
--temp2_input Provides current Tcontrol temperature of the CPU
-+temp2_label "DTS"
-+temp2_input Provides current DTS temperature of the CPU package.
-+temp2_max Provides thermal control temperature of the CPU package
-+ which is also known as Tcontrol.
-+temp2_crit Provides shutdown temperature of the CPU package which
-+ is also known as the maximum processor junction
-+ temperature, Tjmax or Tprochot.
-+temp2_crit_hyst Provides the hysteresis value from Tcontrol to Tjmax of
-+ the CPU package.
-+
-+temp3_label "Tcontrol"
-+temp3_input Provides current Tcontrol temperature of the CPU
- package which is also known as Fan Temperature target.
- Indicates the relative value from thermal monitor trip
- temperature at which fans should be engaged.
--temp2_crit Provides Tcontrol critical value of the CPU package
-+temp3_crit Provides Tcontrol critical value of the CPU package
- which is same to Tjmax.
-
--temp3_label "Tthrottle"
--temp3_input Provides current Tthrottle temperature of the CPU
-+temp4_label "Tthrottle"
-+temp4_input Provides current Tthrottle temperature of the CPU
- package. Used for throttling temperature. If this value
- is allowed and lower than Tjmax - the throttle will
- occur and reported at lower than Tjmax.
-
--temp4_label "Tjmax"
--temp4_input Provides the maximum junction temperature, Tjmax of the
-+temp5_label "Tjmax"
-+temp5_input Provides the maximum junction temperature, Tjmax of the
- CPU package.
-
--temp[5-*]_label Provides string "Core X", where X is resolved core
-+temp[6-*]_label Provides string "Core X", where X is resolved core
- number.
--temp[5-*]_input Provides current temperature of each core.
--temp[5-*]_max Provides thermal control temperature of the core.
--temp[5-*]_crit Provides shutdown temperature of the core.
--temp[5-*]_crit_hyst Provides the hysteresis value from Tcontrol to Tjmax of
-+temp[6-*]_input Provides current temperature of each core.
-+temp[6-*]_max Provides thermal control temperature of the core.
-+temp[6-*]_crit Provides shutdown temperature of the core.
-+temp[6-*]_crit_hyst Provides the hysteresis value from Tcontrol to Tjmax of
- the core.
-diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig
-index c0623fa..7399c3c 100644
---- a/drivers/hwmon/Kconfig
-+++ b/drivers/hwmon/Kconfig
-@@ -1333,7 +1333,7 @@ config SENSORS_PECI_CPUTEMP
- the PECI Client Command Suite via the processor PECI client.
- Check Documentation/hwmon/peci-cputemp for details.
-
-- This driver can also be built as a module. If so, the module
-+ This driver can also be built as a module. If so, the module
- will be called peci-cputemp.
-
- config SENSORS_PECI_DIMMTEMP
-@@ -1347,7 +1347,7 @@ config SENSORS_PECI_DIMMTEMP
- Suite via the processor PECI client.
- Check Documentation/hwmon/peci-dimmtemp for details.
-
-- This driver can also be built as a module. If so, the module
-+ This driver can also be built as a module. If so, the module
- will be called peci-dimmtemp.
-
- source "drivers/hwmon/pmbus/Kconfig"
-diff --git a/drivers/hwmon/peci-cputemp.c b/drivers/hwmon/peci-cputemp.c
-index 11880c8..d0d68e8 100644
---- a/drivers/hwmon/peci-cputemp.c
-+++ b/drivers/hwmon/peci-cputemp.c
-@@ -1,5 +1,5 @@
- // SPDX-License-Identifier: GPL-2.0
--// Copyright (c) 2018 Intel Corporation
-+// Copyright (c) 2018-2019 Intel Corporation
-
- #include <linux/hwmon.h>
- #include <linux/jiffies.h>
-@@ -9,18 +9,13 @@
- #include <linux/platform_device.h>
- #include "peci-hwmon.h"
-
--#define DEFAULT_CHANNEL_NUMS 4
-+#define DEFAULT_CHANNEL_NUMS 5
- #define CORETEMP_CHANNEL_NUMS CORE_NUMS_MAX
- #define CPUTEMP_CHANNEL_NUMS (DEFAULT_CHANNEL_NUMS + CORETEMP_CHANNEL_NUMS)
-
--/* The RESOLVED_CORES register in PCU of a client CPU */
--#define REG_RESOLVED_CORES_BUS 1
--#define REG_RESOLVED_CORES_DEVICE 30
--#define REG_RESOLVED_CORES_FUNCTION 3
--#define REG_RESOLVED_CORES_OFFSET 0xB4
--
- struct temp_group {
- struct temp_data die;
-+ struct temp_data dts;
- struct temp_data tcontrol;
- struct temp_data tthrottle;
- struct temp_data tjmax;
-@@ -43,6 +38,7 @@ struct peci_cputemp {
-
- enum cputemp_channels {
- channel_die,
-+ channel_dts,
- channel_tcontrol,
- channel_tthrottle,
- channel_tjmax,
-@@ -54,6 +50,10 @@ static const u32 config_table[DEFAULT_CHANNEL_NUMS + 1] = {
- HWMON_T_LABEL | HWMON_T_INPUT | HWMON_T_MAX | HWMON_T_CRIT |
- HWMON_T_CRIT_HYST,
-
-+ /* DTS margin */
-+ HWMON_T_LABEL | HWMON_T_INPUT | HWMON_T_MAX | HWMON_T_CRIT |
-+ HWMON_T_CRIT_HYST,
-+
- /* Tcontrol temperature */
- HWMON_T_LABEL | HWMON_T_INPUT | HWMON_T_CRIT,
-
-@@ -70,6 +70,7 @@ static const u32 config_table[DEFAULT_CHANNEL_NUMS + 1] = {
-
- static const char *cputemp_label[CPUTEMP_CHANNEL_NUMS] = {
- "Die",
-+ "DTS",
- "Tcontrol",
- "Tthrottle",
- "Tjmax",
-@@ -92,19 +93,20 @@ static int get_temp_targets(struct peci_cputemp *priv)
- s32 tthrottle_offset;
- s32 tcontrol_margin;
- u8 pkg_cfg[4];
-- int rc;
-+ int ret;
-
-- /**
-+ /*
- * Just use only the tcontrol marker to determine if target values need
- * update.
- */
- if (!peci_temp_need_update(&priv->temp.tcontrol))
- return 0;
-
-- rc = peci_client_read_package_config(priv->mgr,
-- MBX_INDEX_TEMP_TARGET, 0, pkg_cfg);
-- if (rc)
-- return rc;
-+ ret = peci_client_read_package_config(priv->mgr,
-+ PECI_MBX_INDEX_TEMP_TARGET, 0,
-+ pkg_cfg);
-+ if (ret)
-+ return ret;
-
- priv->temp.tjmax.value = pkg_cfg[2] * 1000;
-
-@@ -123,17 +125,16 @@ static int get_temp_targets(struct peci_cputemp *priv)
- static int get_die_temp(struct peci_cputemp *priv)
- {
- struct peci_get_temp_msg msg;
-- int rc;
-+ int ret;
-
- if (!peci_temp_need_update(&priv->temp.die))
- return 0;
-
- msg.addr = priv->mgr->client->addr;
-
-- rc = peci_command(priv->mgr->client->adapter, PECI_CMD_GET_TEMP,
-- &msg);
-- if (rc)
-- return rc;
-+ ret = peci_command(priv->mgr->client->adapter, PECI_CMD_GET_TEMP, &msg);
-+ if (ret)
-+ return ret;
-
- /* Note that the tjmax should be available before calling it */
- priv->temp.die.value = priv->temp.tjmax.value +
-@@ -144,24 +145,64 @@ static int get_die_temp(struct peci_cputemp *priv)
- return 0;
- }
-
-+static int get_dts(struct peci_cputemp *priv)
-+{
-+ s32 dts_margin;
-+ u8 pkg_cfg[4];
-+ int ret;
-+
-+ if (!peci_temp_need_update(&priv->temp.dts))
-+ return 0;
-+
-+ ret = peci_client_read_package_config(priv->mgr,
-+ PECI_MBX_INDEX_DTS_MARGIN, 0,
-+ pkg_cfg);
-+
-+ if (ret)
-+ return ret;
-+
-+ dts_margin = (pkg_cfg[1] << 8) | pkg_cfg[0];
-+
-+ /**
-+ * Processors return a value of DTS reading in 10.6 format
-+ * (10 bits signed decimal, 6 bits fractional).
-+ * Error codes:
-+ * 0x8000: General sensor error
-+ * 0x8001: Reserved
-+ * 0x8002: Underflow on reading value
-+ * 0x8003-0x81ff: Reserved
-+ */
-+ if (dts_margin >= 0x8000 && dts_margin <= 0x81ff)
-+ return -EIO;
-+
-+ dts_margin = ten_dot_six_to_millidegree(dts_margin);
-+
-+ /* Note that the tcontrol should be available before calling it */
-+ priv->temp.dts.value = priv->temp.tcontrol.value - dts_margin;
-+
-+ peci_temp_mark_updated(&priv->temp.dts);
-+
-+ return 0;
-+}
-+
- static int get_core_temp(struct peci_cputemp *priv, int core_index)
- {
- s32 core_dts_margin;
- u8 pkg_cfg[4];
-- int rc;
-+ int ret;
-
- if (!peci_temp_need_update(&priv->temp.core[core_index]))
- return 0;
-
-- rc = peci_client_read_package_config(priv->mgr,
-- MBX_INDEX_PER_CORE_DTS_TEMP,
-- core_index, pkg_cfg);
-- if (rc)
-- return rc;
-+ ret = peci_client_read_package_config(priv->mgr,
-+ PECI_MBX_INDEX_PER_CORE_DTS_TEMP,
-+ core_index, pkg_cfg);
-+ if (ret)
-+ return ret;
-
- core_dts_margin = le16_to_cpup((__le16 *)pkg_cfg);
-
-- /**
-+ /*
- * Processors return a value of the core DTS reading in 10.6 format
- * (10 bits signed decimal, 6 bits fractional).
- * Error codes:
-@@ -192,6 +233,7 @@ static int cputemp_read_string(struct device *dev,
- return -EOPNOTSUPP;
-
- *str = cputemp_label[channel];
-+
- return 0;
- }
-
-@@ -200,26 +242,33 @@ static int cputemp_read(struct device *dev,
- u32 attr, int channel, long *val)
- {
- struct peci_cputemp *priv = dev_get_drvdata(dev);
-- int rc, core_index;
-+ int ret, core_index;
-
- if (channel >= CPUTEMP_CHANNEL_NUMS ||
- !(priv->temp_config[channel] & BIT(attr)))
- return -EOPNOTSUPP;
-
-- rc = get_temp_targets(priv);
-- if (rc)
-- return rc;
-+ ret = get_temp_targets(priv);
-+ if (ret)
-+ return ret;
-
- switch (attr) {
- case hwmon_temp_input:
- switch (channel) {
- case channel_die:
-- rc = get_die_temp(priv);
-- if (rc)
-+ ret = get_die_temp(priv);
-+ if (ret)
- break;
-
- *val = priv->temp.die.value;
- break;
-+ case channel_dts:
-+ ret = get_dts(priv);
-+ if (ret)
-+ break;
-+
-+ *val = priv->temp.dts.value;
-+ break;
- case channel_tcontrol:
- *val = priv->temp.tcontrol.value;
- break;
-@@ -231,8 +280,8 @@ static int cputemp_read(struct device *dev,
- break;
- default:
- core_index = channel - DEFAULT_CHANNEL_NUMS;
-- rc = get_core_temp(priv, core_index);
-- if (rc)
-+ ret = get_core_temp(priv, core_index);
-+ if (ret)
- break;
-
- *val = priv->temp.core[core_index].value;
-@@ -249,11 +298,11 @@ static int cputemp_read(struct device *dev,
- *val = priv->temp.tjmax.value - priv->temp.tcontrol.value;
- break;
- default:
-- rc = -EOPNOTSUPP;
-+ ret = -EOPNOTSUPP;
- break;
- }
-
-- return rc;
-+ return ret;
- }
-
- static umode_t cputemp_is_visible(const void *data,
-@@ -262,11 +311,11 @@ static umode_t cputemp_is_visible(const void *data,
- {
- const struct peci_cputemp *priv = data;
-
-- if (priv->temp_config[channel] & BIT(attr))
-- if (channel < DEFAULT_CHANNEL_NUMS ||
-- (channel >= DEFAULT_CHANNEL_NUMS &&
-- (priv->core_mask & BIT(channel - DEFAULT_CHANNEL_NUMS))))
-- return 0444;
-+ if ((priv->temp_config[channel] & BIT(attr)) &&
-+ (channel < DEFAULT_CHANNEL_NUMS ||
-+ (channel >= DEFAULT_CHANNEL_NUMS &&
-+ (priv->core_mask & BIT(channel - DEFAULT_CHANNEL_NUMS)))))
-+ return 0444;
-
- return 0;
- }
-@@ -280,40 +329,43 @@ static const struct hwmon_ops cputemp_ops = {
- static int check_resolved_cores(struct peci_cputemp *priv)
- {
- struct peci_rd_pci_cfg_local_msg msg;
-- int rc;
-+ int ret;
-
- /* Get the RESOLVED_CORES register value */
- msg.addr = priv->mgr->client->addr;
-- msg.bus = REG_RESOLVED_CORES_BUS;
-- msg.device = REG_RESOLVED_CORES_DEVICE;
-- msg.function = REG_RESOLVED_CORES_FUNCTION;
-- msg.reg = REG_RESOLVED_CORES_OFFSET;
-+ msg.bus = 1;
-+ msg.device = 30;
-+ msg.function = 3;
-+ msg.reg = 0xb4;
- msg.rx_len = 4;
-
-- rc = peci_command(priv->mgr->client->adapter,
-- PECI_CMD_RD_PCI_CFG_LOCAL, &msg);
-- if (rc)
-- return rc;
-+ ret = peci_command(priv->mgr->client->adapter,
-+ PECI_CMD_RD_PCI_CFG_LOCAL, &msg);
-+ if (msg.cc != PECI_DEV_CC_SUCCESS)
-+ ret = -EAGAIN;
-+ if (ret)
-+ return ret;
-
- priv->core_mask = le32_to_cpup((__le32 *)msg.pci_config);
- if (!priv->core_mask)
- return -EAGAIN;
-
- dev_dbg(priv->dev, "Scanned resolved cores: 0x%x\n", priv->core_mask);
-+
- return 0;
- }
-
- static int create_core_temp_info(struct peci_cputemp *priv)
- {
-- int rc, i;
-+ int ret, i;
-
-- rc = check_resolved_cores(priv);
-- if (rc)
-- return rc;
-+ ret = check_resolved_cores(priv);
-+ if (ret)
-+ return ret;
-
- for (i = 0; i < priv->gen_info->core_max; i++)
- if (priv->core_mask & BIT(i))
-- while (i + DEFAULT_CHANNEL_NUMS >= priv->config_idx)
-+ while (priv->config_idx <= i + DEFAULT_CHANNEL_NUMS)
- priv->temp_config[priv->config_idx++] =
- config_table[channel_core];
-
-@@ -326,7 +378,7 @@ static int peci_cputemp_probe(struct platform_device *pdev)
- struct device *dev = &pdev->dev;
- struct peci_cputemp *priv;
- struct device *hwmon_dev;
-- int rc;
-+ int ret;
-
- if ((mgr->client->adapter->cmd_mask &
- (BIT(PECI_CMD_GET_TEMP) | BIT(PECI_CMD_RD_PKG_CFG))) !=
-@@ -346,12 +398,13 @@ static int peci_cputemp_probe(struct platform_device *pdev)
- mgr->client->addr - PECI_BASE_ADDR);
-
- priv->temp_config[priv->config_idx++] = config_table[channel_die];
-+ priv->temp_config[priv->config_idx++] = config_table[channel_dts];
- priv->temp_config[priv->config_idx++] = config_table[channel_tcontrol];
- priv->temp_config[priv->config_idx++] = config_table[channel_tthrottle];
- priv->temp_config[priv->config_idx++] = config_table[channel_tjmax];
-
-- rc = create_core_temp_info(priv);
-- if (rc)
-+ ret = create_core_temp_info(priv);
-+ if (ret)
- dev_dbg(dev, "Skipped creating core temp info\n");
-
- priv->chip.ops = &cputemp_ops;
-@@ -385,7 +438,7 @@ MODULE_DEVICE_TABLE(platform, peci_cputemp_ids);
- static struct platform_driver peci_cputemp_driver = {
- .probe = peci_cputemp_probe,
- .id_table = peci_cputemp_ids,
-- .driver = { .name = "peci-cputemp", },
-+ .driver = { .name = KBUILD_MODNAME, },
- };
- module_platform_driver(peci_cputemp_driver);
-
-diff --git a/drivers/hwmon/peci-dimmtemp.c b/drivers/hwmon/peci-dimmtemp.c
-index 86a45a9..a404b6e 100644
---- a/drivers/hwmon/peci-dimmtemp.c
-+++ b/drivers/hwmon/peci-dimmtemp.c
-@@ -1,5 +1,5 @@
- // SPDX-License-Identifier: GPL-2.0
--// Copyright (c) 2018 Intel Corporation
-+// Copyright (c) 2018-2019 Intel Corporation
-
- #include <linux/hwmon.h>
- #include <linux/jiffies.h>
-@@ -21,6 +21,8 @@ struct peci_dimmtemp {
- struct workqueue_struct *work_queue;
- struct delayed_work work_handler;
- struct temp_data temp[DIMM_NUMS_MAX];
-+ long temp_max[DIMM_NUMS_MAX];
-+ long temp_crit[DIMM_NUMS_MAX];
- u32 dimm_mask;
- int retry_count;
- u32 temp_config[DIMM_NUMS_MAX + 1];
-@@ -44,20 +46,106 @@ static int get_dimm_temp(struct peci_dimmtemp *priv, int dimm_no)
- {
- int dimm_order = dimm_no % priv->gen_info->dimm_idx_max;
- int chan_rank = dimm_no / priv->gen_info->dimm_idx_max;
-+ struct peci_rd_pci_cfg_local_msg rp_msg;
- u8 cfg_data[4];
-- int rc;
-+ int ret;
-
- if (!peci_temp_need_update(&priv->temp[dimm_no]))
- return 0;
-
-- rc = peci_client_read_package_config(priv->mgr,
-- MBX_INDEX_DDR_DIMM_TEMP,
-- chan_rank, cfg_data);
-- if (rc)
-- return rc;
-+ ret = peci_client_read_package_config(priv->mgr,
-+ PECI_MBX_INDEX_DDR_DIMM_TEMP,
-+ chan_rank, cfg_data);
-+ if (ret)
-+ return ret;
-
- priv->temp[dimm_no].value = cfg_data[dimm_order] * 1000;
-
-+ switch (priv->gen_info->model) {
-+ case INTEL_FAM6_SKYLAKE_X:
-+ rp_msg.addr = priv->mgr->client->addr;
-+ rp_msg.bus = 2;
-+ /*
-+ * Device 10, Function 2: IMC 0 channel 0 -> rank 0
-+ * Device 10, Function 6: IMC 0 channel 1 -> rank 1
-+ * Device 11, Function 2: IMC 0 channel 2 -> rank 2
-+ * Device 12, Function 2: IMC 1 channel 0 -> rank 3
-+ * Device 12, Function 6: IMC 1 channel 1 -> rank 4
-+ * Device 13, Function 2: IMC 1 channel 2 -> rank 5
-+ */
-+ rp_msg.device = 10 + chan_rank / 3 * 2 +
-+ (chan_rank % 3 == 2 ? 1 : 0);
-+ rp_msg.function = chan_rank % 3 == 1 ? 6 : 2;
-+ rp_msg.reg = 0x120 + dimm_order * 4;
-+ rp_msg.rx_len = 4;
-+
-+ ret = peci_command(priv->mgr->client->adapter,
-+ PECI_CMD_RD_PCI_CFG_LOCAL, &rp_msg);
-+ if (rp_msg.cc != PECI_DEV_CC_SUCCESS)
-+ ret = -EAGAIN;
-+ if (ret)
-+ return ret;
-+
-+ priv->temp_max[dimm_no] = rp_msg.pci_config[1] * 1000;
-+ priv->temp_crit[dimm_no] = rp_msg.pci_config[2] * 1000;
-+ break;
-+ case INTEL_FAM6_SKYLAKE_XD:
-+ rp_msg.addr = priv->mgr->client->addr;
-+ rp_msg.bus = 2;
-+ /*
-+ * Device 10, Function 2: IMC 0 channel 0 -> rank 0
-+ * Device 10, Function 6: IMC 0 channel 1 -> rank 1
-+ * Device 12, Function 2: IMC 1 channel 0 -> rank 2
-+ * Device 12, Function 6: IMC 1 channel 1 -> rank 3
-+ */
-+ rp_msg.device = 10 + chan_rank / 2 * 2;
-+ rp_msg.function = chan_rank % 2 ? 6 : 2;
-+ rp_msg.reg = 0x120 + dimm_order * 4;
-+ rp_msg.rx_len = 4;
-+
-+ ret = peci_command(priv->mgr->client->adapter,
-+ PECI_CMD_RD_PCI_CFG_LOCAL, &rp_msg);
-+ if (rp_msg.cc != PECI_DEV_CC_SUCCESS)
-+ ret = -EAGAIN;
-+ if (ret)
-+ return ret;
-+
-+ priv->temp_max[dimm_no] = rp_msg.pci_config[1] * 1000;
-+ priv->temp_crit[dimm_no] = rp_msg.pci_config[2] * 1000;
-+ break;
-+ case INTEL_FAM6_HASWELL_X:
-+ case INTEL_FAM6_BROADWELL_X:
-+ rp_msg.addr = priv->mgr->client->addr;
-+ rp_msg.bus = 1;
-+ /*
-+ * Device 20, Function 0: IMC 0 channel 0 -> rank 0
-+ * Device 20, Function 1: IMC 0 channel 1 -> rank 1
-+ * Device 21, Function 0: IMC 0 channel 2 -> rank 2
-+ * Device 21, Function 1: IMC 0 channel 3 -> rank 3
-+ * Device 23, Function 0: IMC 1 channel 0 -> rank 4
-+ * Device 23, Function 1: IMC 1 channel 1 -> rank 5
-+ * Device 24, Function 0: IMC 1 channel 2 -> rank 6
-+ * Device 24, Function 1: IMC 1 channel 3 -> rank 7
-+ */
-+ rp_msg.device = 20 + chan_rank / 2 + chan_rank / 4;
-+ rp_msg.function = chan_rank % 2;
-+ rp_msg.reg = 0x120 + dimm_order * 4;
-+ rp_msg.rx_len = 4;
-+
-+ ret = peci_command(priv->mgr->client->adapter,
-+ PECI_CMD_RD_PCI_CFG_LOCAL, &rp_msg);
-+ if (rp_msg.cc != PECI_DEV_CC_SUCCESS)
-+ ret = -EAGAIN;
-+ if (ret)
-+ return ret;
-+
-+ priv->temp_max[dimm_no] = rp_msg.pci_config[1] * 1000;
-+ priv->temp_crit[dimm_no] = rp_msg.pci_config[2] * 1000;
-+ break;
-+ default:
-+ return -EOPNOTSUPP;
-+ }
-+
- peci_temp_mark_updated(&priv->temp[dimm_no]);
-
- return 0;
-@@ -77,6 +165,7 @@ static int dimmtemp_read_string(struct device *dev,
- chan_rank = channel / dimm_idx_max;
- dimm_idx = channel % dimm_idx_max;
- *str = dimmtemp_label[chan_rank][dimm_idx];
-+
- return 0;
- }
-
-@@ -84,17 +173,28 @@ static int dimmtemp_read(struct device *dev, enum hwmon_sensor_types type,
- u32 attr, int channel, long *val)
- {
- struct peci_dimmtemp *priv = dev_get_drvdata(dev);
-- int rc;
--
-- if (attr != hwmon_temp_input)
-- return -EOPNOTSUPP;
--
-- rc = get_dimm_temp(priv, channel);
-- if (rc)
-- return rc;
-+ int ret;
-+
-+ ret = get_dimm_temp(priv, channel);
-+ if (ret)
-+ return ret;
-+
-+ switch (attr) {
-+ case hwmon_temp_input:
-+ *val = priv->temp[channel].value;
-+ break;
-+ case hwmon_temp_max:
-+ *val = priv->temp_max[channel];
-+ break;
-+ case hwmon_temp_crit:
-+ *val = priv->temp_crit[channel];
-+ break;
-+ default:
-+ ret = -EOPNOTSUPP;
-+ break;
-+ }
-
-- *val = priv->temp[channel].value;
-- return 0;
-+ return ret;
- }
-
- static umode_t dimmtemp_is_visible(const void *data,
-@@ -120,16 +220,16 @@ static int check_populated_dimms(struct peci_dimmtemp *priv)
- {
- u32 chan_rank_max = priv->gen_info->chan_rank_max;
- u32 dimm_idx_max = priv->gen_info->dimm_idx_max;
-- int chan_rank, dimm_idx, rc;
-+ int chan_rank, dimm_idx, ret;
- u8 cfg_data[4];
-
- for (chan_rank = 0; chan_rank < chan_rank_max; chan_rank++) {
-- rc = peci_client_read_package_config(priv->mgr,
-- MBX_INDEX_DDR_DIMM_TEMP,
-- chan_rank, cfg_data);
-- if (rc) {
-+ ret = peci_client_read_package_config(priv->mgr,
-+ PECI_MBX_INDEX_DDR_DIMM_TEMP,
-+ chan_rank, cfg_data);
-+ if (ret) {
- priv->dimm_mask = 0;
-- return rc;
-+ return ret;
- }
-
- for (dimm_idx = 0; dimm_idx < dimm_idx_max; dimm_idx++)
-@@ -143,17 +243,18 @@ static int check_populated_dimms(struct peci_dimmtemp *priv)
- return -EAGAIN;
-
- dev_dbg(priv->dev, "Scanned populated DIMMs: 0x%x\n", priv->dimm_mask);
-+
- return 0;
- }
-
- static int create_dimm_temp_info(struct peci_dimmtemp *priv)
- {
-- int rc, i, config_idx, channels;
-+ int ret, i, config_idx, channels;
- struct device *hwmon_dev;
-
-- rc = check_populated_dimms(priv);
-- if (rc) {
-- if (rc == -EAGAIN) {
-+ ret = check_populated_dimms(priv);
-+ if (ret) {
-+ if (ret == -EAGAIN) {
- if (priv->retry_count < DIMM_MASK_CHECK_RETRY_MAX) {
- queue_delayed_work(priv->work_queue,
- &priv->work_handler,
-@@ -164,11 +265,11 @@ static int create_dimm_temp_info(struct peci_dimmtemp *priv)
- } else {
- dev_err(priv->dev,
- "Timeout DIMM temp info creation\n");
-- rc = -ETIMEDOUT;
-+ ret = -ETIMEDOUT;
- }
- }
-
-- return rc;
-+ return ret;
- }
-
- channels = priv->gen_info->chan_rank_max *
-@@ -177,7 +278,8 @@ static int create_dimm_temp_info(struct peci_dimmtemp *priv)
- if (priv->dimm_mask & BIT(i))
- while (i >= config_idx)
- priv->temp_config[config_idx++] =
-- HWMON_T_LABEL | HWMON_T_INPUT;
-+ HWMON_T_LABEL | HWMON_T_INPUT |
-+ HWMON_T_MAX | HWMON_T_CRIT;
-
- priv->chip.ops = &dimmtemp_ops;
- priv->chip.info = priv->info;
-@@ -192,12 +294,12 @@ static int create_dimm_temp_info(struct peci_dimmtemp *priv)
- priv,
- &priv->chip,
- NULL);
-- rc = PTR_ERR_OR_ZERO(hwmon_dev);
-- if (!rc)
-+ ret = PTR_ERR_OR_ZERO(hwmon_dev);
-+ if (!ret)
- dev_dbg(priv->dev, "%s: sensor '%s'\n",
- dev_name(hwmon_dev), priv->name);
-
-- return rc;
-+ return ret;
- }
-
- static void create_dimm_temp_info_delayed(struct work_struct *work)
-@@ -205,10 +307,10 @@ static void create_dimm_temp_info_delayed(struct work_struct *work)
- struct delayed_work *dwork = to_delayed_work(work);
- struct peci_dimmtemp *priv = container_of(dwork, struct peci_dimmtemp,
- work_handler);
-- int rc;
-+ int ret;
-
-- rc = create_dimm_temp_info(priv);
-- if (rc && rc != -EAGAIN)
-+ ret = create_dimm_temp_info(priv);
-+ if (ret && ret != -EAGAIN)
- dev_dbg(priv->dev, "Failed to create DIMM temp info\n");
- }
-
-@@ -217,7 +319,7 @@ static int peci_dimmtemp_probe(struct platform_device *pdev)
- struct peci_client_manager *mgr = dev_get_drvdata(pdev->dev.parent);
- struct device *dev = &pdev->dev;
- struct peci_dimmtemp *priv;
-- int rc;
-+ int ret;
-
- if ((mgr->client->adapter->cmd_mask &
- (BIT(PECI_CMD_GET_TEMP) | BIT(PECI_CMD_RD_PKG_CFG))) !=
-@@ -242,8 +344,8 @@ static int peci_dimmtemp_probe(struct platform_device *pdev)
-
- INIT_DELAYED_WORK(&priv->work_handler, create_dimm_temp_info_delayed);
-
-- rc = create_dimm_temp_info(priv);
-- if (rc && rc != -EAGAIN) {
-+ ret = create_dimm_temp_info(priv);
-+ if (ret && ret != -EAGAIN) {
- dev_err(dev, "Failed to create DIMM temp info\n");
- goto err_free_wq;
- }
-@@ -252,7 +354,7 @@ static int peci_dimmtemp_probe(struct platform_device *pdev)
-
- err_free_wq:
- destroy_workqueue(priv->work_queue);
-- return rc;
-+ return ret;
- }
-
- static int peci_dimmtemp_remove(struct platform_device *pdev)
-@@ -275,7 +377,7 @@ static struct platform_driver peci_dimmtemp_driver = {
- .probe = peci_dimmtemp_probe,
- .remove = peci_dimmtemp_remove,
- .id_table = peci_dimmtemp_ids,
-- .driver = { .name = "peci-dimmtemp", },
-+ .driver = { .name = KBUILD_MODNAME, },
- };
- module_platform_driver(peci_dimmtemp_driver);
-
-diff --git a/drivers/hwmon/peci-hwmon.h b/drivers/hwmon/peci-hwmon.h
-index 6ca1855..ce6b470 100644
---- a/drivers/hwmon/peci-hwmon.h
-+++ b/drivers/hwmon/peci-hwmon.h
-@@ -1,5 +1,5 @@
- /* SPDX-License-Identifier: GPL-2.0 */
--/* Copyright (c) 2018 Intel Corporation */
-+/* Copyright (c) 2018-2019 Intel Corporation */
-
- #ifndef __PECI_HWMON_H
- #define __PECI_HWMON_H
-@@ -29,11 +29,8 @@ struct temp_data {
- */
- static inline bool peci_temp_need_update(struct temp_data *temp)
- {
-- if (temp->valid &&
-- time_before(jiffies, temp->last_updated + UPDATE_INTERVAL))
-- return false;
--
-- return true;
-+ return !temp->valid ||
-+ time_after(jiffies, temp->last_updated + UPDATE_INTERVAL);
- }
-
- /**
-diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
-index 5d89546..46f52a3 100644
---- a/drivers/mfd/Kconfig
-+++ b/drivers/mfd/Kconfig
-@@ -630,7 +630,7 @@ config MFD_INTEL_MSIC
- devices used in Intel Medfield platforms.
-
- config MFD_INTEL_PECI_CLIENT
-- bool "Intel PECI client"
-+ tristate "Intel PECI client"
- depends on (PECI || COMPILE_TEST)
- select MFD_CORE
- help
-@@ -643,6 +643,9 @@ config MFD_INTEL_PECI_CLIENT
- Additional drivers must be enabled in order to use the functionality
- of the device.
-
-+ This driver can also be built as a module. If so, the module
-+ will be called intel-peci-client.
-+
- config MFD_IPAQ_MICRO
- bool "Atmel Micro ASIC (iPAQ h3100/h3600/h3700) Support"
- depends on SA1100_H3100 || SA1100_H3600
-diff --git a/drivers/mfd/intel-peci-client.c b/drivers/mfd/intel-peci-client.c
-index d53e4f1..18bf0af 100644
---- a/drivers/mfd/intel-peci-client.c
-+++ b/drivers/mfd/intel-peci-client.c
-@@ -1,12 +1,12 @@
- // SPDX-License-Identifier: GPL-2.0
--// Copyright (c) 2018 Intel Corporation
-+// Copyright (c) 2018-2019 Intel Corporation
-
- #include <linux/bitfield.h>
- #include <linux/mfd/core.h>
- #include <linux/mfd/intel-peci-client.h>
- #include <linux/module.h>
--#include <linux/peci.h>
- #include <linux/of_device.h>
-+#include <linux/peci.h>
-
- #define CPU_ID_MODEL_MASK GENMASK(7, 4)
- #define CPU_ID_FAMILY_MASK GENMASK(11, 8)
-@@ -18,12 +18,6 @@
- #define LOWER_BYTE_MASK GENMASK(7, 0)
- #define UPPER_BYTE_MASK GENMASK(16, 8)
-
--enum cpu_gens {
-- CPU_GEN_HSX = 0, /* Haswell Xeon */
-- CPU_GEN_BRX, /* Broadwell Xeon */
-- CPU_GEN_SKX, /* Skylake Xeon */
--};
--
- static struct mfd_cell peci_functions[] = {
- { .name = "peci-cputemp", },
- { .name = "peci-dimmtemp", },
-@@ -31,38 +25,45 @@ static struct mfd_cell peci_functions[] = {
- };
-
- static const struct cpu_gen_info cpu_gen_info_table[] = {
-- [CPU_GEN_HSX] = {
-+ { /* Haswell Xeon */
- .family = 6, /* Family code */
- .model = INTEL_FAM6_HASWELL_X,
- .core_max = CORE_MAX_ON_HSX,
- .chan_rank_max = CHAN_RANK_MAX_ON_HSX,
- .dimm_idx_max = DIMM_IDX_MAX_ON_HSX },
-- [CPU_GEN_BRX] = {
-+ { /* Broadwell Xeon */
- .family = 6, /* Family code */
- .model = INTEL_FAM6_BROADWELL_X,
- .core_max = CORE_MAX_ON_BDX,
- .chan_rank_max = CHAN_RANK_MAX_ON_BDX,
- .dimm_idx_max = DIMM_IDX_MAX_ON_BDX },
-- [CPU_GEN_SKX] = {
-+ { /* Skylake Xeon */
- .family = 6, /* Family code */
- .model = INTEL_FAM6_SKYLAKE_X,
- .core_max = CORE_MAX_ON_SKX,
- .chan_rank_max = CHAN_RANK_MAX_ON_SKX,
- .dimm_idx_max = DIMM_IDX_MAX_ON_SKX },
-+ { /* Skylake Xeon D */
-+ .family = 6, /* Family code */
-+ .model = INTEL_FAM6_SKYLAKE_XD,
-+ .core_max = CORE_MAX_ON_SKXD,
-+ .chan_rank_max = CHAN_RANK_MAX_ON_SKXD,
-+ .dimm_idx_max = DIMM_IDX_MAX_ON_SKXD },
- };
-
- static int peci_client_get_cpu_gen_info(struct peci_client_manager *priv)
- {
-+ struct device *dev = &priv->client->dev;
- u32 cpu_id;
- u16 family;
- u8 model;
-- int rc;
-+ int ret;
- int i;
-
-- rc = peci_get_cpu_id(priv->client->adapter, priv->client->addr,
-- &cpu_id);
-- if (rc)
-- return rc;
-+ ret = peci_get_cpu_id(priv->client->adapter, priv->client->addr,
-+ &cpu_id);
-+ if (ret)
-+ return ret;
-
- family = FIELD_PREP(LOWER_BYTE_MASK,
- FIELD_GET(CPU_ID_FAMILY_MASK, cpu_id)) |
-@@ -83,11 +84,11 @@ static int peci_client_get_cpu_gen_info(struct peci_client_manager *priv)
- }
-
- if (!priv->gen_info) {
-- dev_err(priv->dev, "Can't support this CPU: 0x%x\n", cpu_id);
-- rc = -ENODEV;
-+ dev_err(dev, "Can't support this CPU: 0x%x\n", cpu_id);
-+ ret = -ENODEV;
- }
-
-- return rc;
-+ return ret;
- }
-
- static int peci_client_probe(struct peci_client *client)
-@@ -103,31 +104,29 @@ static int peci_client_probe(struct peci_client *client)
-
- dev_set_drvdata(dev, priv);
- priv->client = client;
-- priv->dev = dev;
- cpu_no = client->addr - PECI_BASE_ADDR;
-
- ret = peci_client_get_cpu_gen_info(priv);
- if (ret)
- return ret;
-
-- ret = devm_mfd_add_devices(priv->dev, cpu_no, peci_functions,
-+ ret = devm_mfd_add_devices(dev, cpu_no, peci_functions,
- ARRAY_SIZE(peci_functions), NULL, 0, NULL);
- if (ret < 0) {
-- dev_err(priv->dev, "Failed to register child devices: %d\n",
-- ret);
-+ dev_err(dev, "Failed to register child devices: %d\n", ret);
- return ret;
- }
-
- return 0;
- }
-
--#ifdef CONFIG_OF
-+#if IS_ENABLED(CONFIG_OF)
- static const struct of_device_id peci_client_of_table[] = {
- { .compatible = "intel,peci-client" },
- { }
- };
- MODULE_DEVICE_TABLE(of, peci_client_of_table);
--#endif
-+#endif /* CONFIG_OF */
-
- static const struct peci_device_id peci_client_ids[] = {
- { .name = "peci-client" },
-@@ -139,7 +138,7 @@ static struct peci_driver peci_client_driver = {
- .probe = peci_client_probe,
- .id_table = peci_client_ids,
- .driver = {
-- .name = "peci-client",
-+ .name = KBUILD_MODNAME,
- .of_match_table = of_match_ptr(peci_client_of_table),
- },
- };
-diff --git a/drivers/peci/Kconfig b/drivers/peci/Kconfig
-index 7293108..9752fee 100644
---- a/drivers/peci/Kconfig
-+++ b/drivers/peci/Kconfig
-@@ -2,10 +2,12 @@
- # Platform Environment Control Interface (PECI) subsystem configuration
- #
-
-+menu "PECI support"
-+
- config PECI
-- bool "PECI support"
-- select RT_MUTEXES
-+ tristate "PECI support"
- select CRC8
-+ default n
- help
- The Platform Environment Control Interface (PECI) is a one-wire bus
- interface that provides a communication channel from Intel processors
-@@ -14,37 +16,23 @@ config PECI
- If you want PECI support, you should say Y here and also to the
- specific driver for your bus adapter(s) below.
-
--if PECI
--
--#
--# PECI hardware bus configuration
--#
--
--menu "PECI Hardware Bus support"
--
--config PECI_ASPEED
-- tristate "ASPEED PECI support"
-- select REGMAP_MMIO
-- depends on OF
-- depends on ARCH_ASPEED || COMPILE_TEST
-- help
-- Say Y here if you want support for the Platform Environment Control
-- Interface (PECI) bus adapter driver on the ASPEED SoCs.
-+ This support is also available as a module. If so, the module
-+ will be called peci-core.
-
-- This support is also available as a module. If so, the module
-- will be called peci-aspeed.
-+if PECI
-
--config PECI_NPCM
-- tristate "Nuvoton NPCM PECI support"
-- select REGMAP_MMIO
-- depends on OF
-- depends on ARCH_NPCM || COMPILE_TEST
-+config PECI_CHARDEV
-+ tristate "PECI device interface"
- help
-- Say Y here if you want support for the Platform Environment Control
-- Interface (PECI) bus adapter driver on the Nuvoton NPCM SoCs.
-+ Say Y here to use peci-* device files, usually found in the /dev
-+ directory on your system. They make it possible to have user-space
-+ programs use the PECI bus.
-
- This support is also available as a module. If so, the module
-- will be called peci-npcm.
--endmenu
-+ will be called peci-dev.
-+
-+source "drivers/peci/busses/Kconfig"
-
- endif # PECI
-+
-+endmenu
-diff --git a/drivers/peci/Makefile b/drivers/peci/Makefile
-index 3326da5..da8b0a3 100644
---- a/drivers/peci/Makefile
-+++ b/drivers/peci/Makefile
-@@ -1,10 +1,11 @@
-+# SPDX-License-Identifier: GPL-2.0
- #
--# Makefile for the PECI core and bus drivers.
-+# Makefile for the PECI core drivers.
- #
-
- # Core functionality
- obj-$(CONFIG_PECI) += peci-core.o
-+obj-$(CONFIG_PECI_CHARDEV) += peci-dev.o
-
- # Hardware specific bus drivers
--obj-$(CONFIG_PECI_ASPEED) += peci-aspeed.o
--obj-$(CONFIG_PECI_NPCM) += peci-npcm.o
-+obj-y += busses/
-diff --git a/drivers/peci/busses/Kconfig b/drivers/peci/busses/Kconfig
-new file mode 100644
-index 0000000..bfacafb
---- /dev/null
-+++ b/drivers/peci/busses/Kconfig
-@@ -0,0 +1,32 @@
-+#
-+# PECI hardware bus configuration
-+#
-+
-+menu "PECI Hardware Bus support"
-+
-+config PECI_ASPEED
-+ tristate "ASPEED PECI support"
-+ depends on ARCH_ASPEED || COMPILE_TEST
-+ depends on OF
-+ depends on PECI
-+ help
-+ Say Y here if you want support for the Platform Environment Control
-+ Interface (PECI) bus adapter driver on the ASPEED SoCs.
-+
-+ This support is also available as a module. If so, the module
-+ will be called peci-aspeed.
-+
-+config PECI_NPCM
-+ tristate "Nuvoton NPCM PECI support"
-+ select REGMAP_MMIO
-+ depends on OF
-+ depends on ARCH_NPCM || COMPILE_TEST
-+ depends on PECI
-+ help
-+ Say Y here if you want support for the Platform Environment Control
-+ Interface (PECI) bus adapter driver on the Nuvoton NPCM SoCs.
-+
-+ This support is also available as a module. If so, the module
-+ will be called peci-npcm.
-+
-+endmenu
-diff --git a/drivers/peci/busses/Makefile b/drivers/peci/busses/Makefile
-new file mode 100644
-index 0000000..aa8ce3a
---- /dev/null
-+++ b/drivers/peci/busses/Makefile
-@@ -0,0 +1,7 @@
-+# SPDX-License-Identifier: GPL-2.0
-+#
-+# Makefile for the PECI hardware bus drivers.
-+#
-+
-+obj-$(CONFIG_PECI_ASPEED) += peci-aspeed.o
-+obj-$(CONFIG_PECI_NPCM) += peci-npcm.o
-diff --git a/drivers/peci/busses/peci-aspeed.c b/drivers/peci/busses/peci-aspeed.c
-new file mode 100644
-index 0000000..851b71e3
---- /dev/null
-+++ b/drivers/peci/busses/peci-aspeed.c
-@@ -0,0 +1,492 @@
-+// SPDX-License-Identifier: GPL-2.0
-+// Copyright (C) 2012-2017 ASPEED Technology Inc.
-+// Copyright (c) 2018-2019 Intel Corporation
-+
-+#include <linux/bitfield.h>
-+#include <linux/clk.h>
-+#include <linux/delay.h>
-+#include <linux/interrupt.h>
-+#include <linux/io.h>
-+#include <linux/jiffies.h>
-+#include <linux/module.h>
-+#include <linux/of.h>
-+#include <linux/peci.h>
-+#include <linux/platform_device.h>
-+#include <linux/reset.h>
-+
-+/* ASPEED PECI Registers */
-+/* Control Register */
-+#define ASPEED_PECI_CTRL 0x00
-+#define ASPEED_PECI_CTRL_SAMPLING_MASK GENMASK(19, 16)
-+#define ASPEED_PECI_CTRL_READ_MODE_MASK GENMASK(13, 12)
-+#define ASPEED_PECI_CTRL_READ_MODE_COUNT BIT(12)
-+#define ASPEED_PECI_CTRL_READ_MODE_DBG BIT(13)
-+#define ASPEED_PECI_CTRL_CLK_SOURCE_MASK BIT(11)
-+#define ASPEED_PECI_CTRL_CLK_DIV_MASK GENMASK(10, 8)
-+#define ASPEED_PECI_CTRL_INVERT_OUT BIT(7)
-+#define ASPEED_PECI_CTRL_INVERT_IN BIT(6)
-+#define ASPEED_PECI_CTRL_BUS_CONTENT_EN BIT(5)
-+#define ASPEED_PECI_CTRL_PECI_EN BIT(4)
-+#define ASPEED_PECI_CTRL_PECI_CLK_EN BIT(0)
-+
-+/* Timing Negotiation Register */
-+#define ASPEED_PECI_TIMING_NEGOTIATION 0x04
-+#define ASPEED_PECI_TIMING_MESSAGE_MASK GENMASK(15, 8)
-+#define ASPEED_PECI_TIMING_ADDRESS_MASK GENMASK(7, 0)
-+
-+/* Command Register */
-+#define ASPEED_PECI_CMD 0x08
-+#define ASPEED_PECI_CMD_PIN_MON BIT(31)
-+#define ASPEED_PECI_CMD_STS_MASK GENMASK(27, 24)
-+#define ASPEED_PECI_CMD_IDLE_MASK (ASPEED_PECI_CMD_STS_MASK | \
-+ ASPEED_PECI_CMD_PIN_MON)
-+#define ASPEED_PECI_CMD_FIRE BIT(0)
-+
-+/* Read/Write Length Register */
-+#define ASPEED_PECI_RW_LENGTH 0x0c
-+#define ASPEED_PECI_AW_FCS_EN BIT(31)
-+#define ASPEED_PECI_READ_LEN_MASK GENMASK(23, 16)
-+#define ASPEED_PECI_WRITE_LEN_MASK GENMASK(15, 8)
-+#define ASPEED_PECI_TAGET_ADDR_MASK GENMASK(7, 0)
-+
-+/* Expected FCS Data Register */
-+#define ASPEED_PECI_EXP_FCS 0x10
-+#define ASPEED_PECI_EXP_READ_FCS_MASK GENMASK(23, 16)
-+#define ASPEED_PECI_EXP_AW_FCS_AUTO_MASK GENMASK(15, 8)
-+#define ASPEED_PECI_EXP_WRITE_FCS_MASK GENMASK(7, 0)
-+
-+/* Captured FCS Data Register */
-+#define ASPEED_PECI_CAP_FCS 0x14
-+#define ASPEED_PECI_CAP_READ_FCS_MASK GENMASK(23, 16)
-+#define ASPEED_PECI_CAP_WRITE_FCS_MASK GENMASK(7, 0)
-+
-+/* Interrupt Register */
-+#define ASPEED_PECI_INT_CTRL 0x18
-+#define ASPEED_PECI_TIMING_NEGO_SEL_MASK GENMASK(31, 30)
-+#define ASPEED_PECI_1ST_BIT_OF_ADDR_NEGO 0
-+#define ASPEED_PECI_2ND_BIT_OF_ADDR_NEGO 1
-+#define ASPEED_PECI_MESSAGE_NEGO 2
-+#define ASPEED_PECI_INT_MASK GENMASK(4, 0)
-+#define ASPEED_PECI_INT_BUS_TIMEOUT BIT(4)
-+#define ASPEED_PECI_INT_BUS_CONNECT BIT(3)
-+#define ASPEED_PECI_INT_W_FCS_BAD BIT(2)
-+#define ASPEED_PECI_INT_W_FCS_ABORT BIT(1)
-+#define ASPEED_PECI_INT_CMD_DONE BIT(0)
-+
-+/* Interrupt Status Register */
-+#define ASPEED_PECI_INT_STS 0x1c
-+#define ASPEED_PECI_INT_TIMING_RESULT_MASK GENMASK(29, 16)
-+ /* bits[4..0]: Same bit fields in the 'Interrupt Register' */
-+
-+/* Rx/Tx Data Buffer Registers */
-+#define ASPEED_PECI_W_DATA0 0x20
-+#define ASPEED_PECI_W_DATA1 0x24
-+#define ASPEED_PECI_W_DATA2 0x28
-+#define ASPEED_PECI_W_DATA3 0x2c
-+#define ASPEED_PECI_R_DATA0 0x30
-+#define ASPEED_PECI_R_DATA1 0x34
-+#define ASPEED_PECI_R_DATA2 0x38
-+#define ASPEED_PECI_R_DATA3 0x3c
-+#define ASPEED_PECI_W_DATA4 0x40
-+#define ASPEED_PECI_W_DATA5 0x44
-+#define ASPEED_PECI_W_DATA6 0x48
-+#define ASPEED_PECI_W_DATA7 0x4c
-+#define ASPEED_PECI_R_DATA4 0x50
-+#define ASPEED_PECI_R_DATA5 0x54
-+#define ASPEED_PECI_R_DATA6 0x58
-+#define ASPEED_PECI_R_DATA7 0x5c
-+#define ASPEED_PECI_DATA_BUF_SIZE_MAX 32
-+
-+/* Timing Negotiation */
-+#define ASPEED_PECI_RD_SAMPLING_POINT_DEFAULT 8
-+#define ASPEED_PECI_RD_SAMPLING_POINT_MAX 15
-+#define ASPEED_PECI_CLK_DIV_DEFAULT 0
-+#define ASPEED_PECI_CLK_DIV_MAX 7
-+#define ASPEED_PECI_MSG_TIMING_DEFAULT 1
-+#define ASPEED_PECI_MSG_TIMING_MAX 255
-+#define ASPEED_PECI_ADDR_TIMING_DEFAULT 1
-+#define ASPEED_PECI_ADDR_TIMING_MAX 255
-+
-+/* Timeout */
-+#define ASPEED_PECI_IDLE_CHECK_TIMEOUT_USEC 50000
-+#define ASPEED_PECI_IDLE_CHECK_INTERVAL_USEC 10000
-+#define ASPEED_PECI_CMD_TIMEOUT_MS_DEFAULT 1000
-+#define ASPEED_PECI_CMD_TIMEOUT_MS_MAX 60000
-+
-+struct aspeed_peci {
-+ struct peci_adapter *adapter;
-+ struct device *dev;
-+ void __iomem *base;
-+ struct clk *clk;
-+ struct reset_control *rst;
-+ int irq;
-+ spinlock_t lock; /* to sync completion status handling */
-+ struct completion xfer_complete;
-+ u32 status;
-+ u32 cmd_timeout_ms;
-+};
-+
-+static int aspeed_peci_check_idle(struct aspeed_peci *priv)
-+{
-+ ulong timeout = jiffies + usecs_to_jiffies(ASPEED_PECI_IDLE_CHECK_TIMEOUT_USEC);
-+ u32 cmd_sts;
-+
-+ for (;;) {
-+ cmd_sts = readl(priv->base + ASPEED_PECI_CMD);
-+ if (!(cmd_sts & ASPEED_PECI_CMD_IDLE_MASK))
-+ break;
-+ if (time_after(jiffies, timeout)) {
-+ cmd_sts = readl(priv->base + ASPEED_PECI_CMD);
-+ break;
-+ }
-+ usleep_range((ASPEED_PECI_IDLE_CHECK_INTERVAL_USEC >> 2) + 1,
-+ ASPEED_PECI_IDLE_CHECK_INTERVAL_USEC);
-+ }
-+
-+ return !(cmd_sts & ASPEED_PECI_CMD_IDLE_MASK) ? 0 : -ETIMEDOUT;
-+}
-+
-+static int aspeed_peci_xfer(struct peci_adapter *adapter,
-+ struct peci_xfer_msg *msg)
-+{
-+ struct aspeed_peci *priv = peci_get_adapdata(adapter);
-+ long err, timeout = msecs_to_jiffies(priv->cmd_timeout_ms);
-+ u32 peci_head, peci_state, rx_data = 0;
-+ ulong flags;
-+ int i, ret;
-+ uint reg;
-+
-+ if (msg->tx_len > ASPEED_PECI_DATA_BUF_SIZE_MAX ||
-+ msg->rx_len > ASPEED_PECI_DATA_BUF_SIZE_MAX)
-+ return -EINVAL;
-+
-+ /* Check command sts and bus idle state */
-+ ret = aspeed_peci_check_idle(priv);
-+ if (ret)
-+ return ret; /* -ETIMEDOUT */
-+
-+ spin_lock_irqsave(&priv->lock, flags);
-+ reinit_completion(&priv->xfer_complete);
-+
-+ peci_head = FIELD_PREP(ASPEED_PECI_TAGET_ADDR_MASK, msg->addr) |
-+ FIELD_PREP(ASPEED_PECI_WRITE_LEN_MASK, msg->tx_len) |
-+ FIELD_PREP(ASPEED_PECI_READ_LEN_MASK, msg->rx_len);
-+
-+ writel(peci_head, priv->base + ASPEED_PECI_RW_LENGTH);
-+
-+ for (i = 0; i < msg->tx_len; i += 4) {
-+ reg = i < 16 ? ASPEED_PECI_W_DATA0 + i % 16 :
-+ ASPEED_PECI_W_DATA4 + i % 16;
-+ writel(le32_to_cpup((__le32 *)&msg->tx_buf[i]),
-+ priv->base + reg);
-+ }
-+
-+ dev_dbg(priv->dev, "HEAD : 0x%08x\n", peci_head);
-+ print_hex_dump_debug("TX : ", DUMP_PREFIX_NONE, 16, 1,
-+ msg->tx_buf, msg->tx_len, true);
-+
-+ priv->status = 0;
-+ writel(ASPEED_PECI_CMD_FIRE, priv->base + ASPEED_PECI_CMD);
-+ spin_unlock_irqrestore(&priv->lock, flags);
-+
-+ err = wait_for_completion_interruptible_timeout(&priv->xfer_complete,
-+ timeout);
-+
-+ spin_lock_irqsave(&priv->lock, flags);
-+ dev_dbg(priv->dev, "INT_STS : 0x%08x\n", priv->status);
-+ peci_state = readl(priv->base + ASPEED_PECI_CMD);
-+ dev_dbg(priv->dev, "PECI_STATE : 0x%lx\n",
-+ FIELD_GET(ASPEED_PECI_CMD_STS_MASK, peci_state));
-+
-+ writel(0, priv->base + ASPEED_PECI_CMD);
-+
-+ if (err <= 0 || priv->status != ASPEED_PECI_INT_CMD_DONE) {
-+ if (err < 0) { /* -ERESTARTSYS */
-+ ret = (int)err;
-+ goto err_irqrestore;
-+ } else if (err == 0) {
-+ dev_dbg(priv->dev, "Timeout waiting for a response!\n");
-+ ret = -ETIMEDOUT;
-+ goto err_irqrestore;
-+ }
-+
-+ dev_dbg(priv->dev, "No valid response!\n");
-+ ret = -EIO;
-+ goto err_irqrestore;
-+ }
-+
-+ /*
-+ * Note that rx_len and rx_buf size can be an odd number.
-+ * Byte handling is more efficient.
-+ */
-+ for (i = 0; i < msg->rx_len; i++) {
-+ u8 byte_offset = i % 4;
-+
-+ if (byte_offset == 0) {
-+ reg = i < 16 ? ASPEED_PECI_R_DATA0 + i % 16 :
-+ ASPEED_PECI_R_DATA4 + i % 16;
-+ rx_data = readl(priv->base + reg);
-+ }
-+
-+ msg->rx_buf[i] = (u8)(rx_data >> (byte_offset << 3));
-+ }
-+
-+ print_hex_dump_debug("RX : ", DUMP_PREFIX_NONE, 16, 1,
-+ msg->rx_buf, msg->rx_len, true);
-+
-+ peci_state = readl(priv->base + ASPEED_PECI_CMD);
-+ dev_dbg(priv->dev, "PECI_STATE : 0x%lx\n",
-+ FIELD_GET(ASPEED_PECI_CMD_STS_MASK, peci_state));
-+ dev_dbg(priv->dev, "------------------------\n");
-+
-+err_irqrestore:
-+ spin_unlock_irqrestore(&priv->lock, flags);
-+ return ret;
-+}
-+
-+static irqreturn_t aspeed_peci_irq_handler(int irq, void *arg)
-+{
-+ struct aspeed_peci *priv = arg;
-+ u32 status;
-+
-+ spin_lock(&priv->lock);
-+ status = readl(priv->base + ASPEED_PECI_INT_STS);
-+ writel(status, priv->base + ASPEED_PECI_INT_STS);
-+ priv->status |= (status & ASPEED_PECI_INT_MASK);
-+
-+ /*
-+ * In most cases, interrupt bits will be set one by one but also note
-+ * that multiple interrupt bits could be set at the same time.
-+ */
-+ if (status & ASPEED_PECI_INT_BUS_TIMEOUT) {
-+ dev_dbg(priv->dev, "ASPEED_PECI_INT_BUS_TIMEOUT\n");
-+ }
-+
-+ if (status & ASPEED_PECI_INT_BUS_CONNECT) {
-+ dev_dbg(priv->dev, "ASPEED_PECI_INT_BUS_CONNECT\n");
-+ }
-+
-+ if (status & ASPEED_PECI_INT_W_FCS_BAD) {
-+ dev_dbg(priv->dev, "ASPEED_PECI_INT_W_FCS_BAD\n");
-+ }
-+
-+ if (status & ASPEED_PECI_INT_W_FCS_ABORT) {
-+ dev_dbg(priv->dev, "ASPEED_PECI_INT_W_FCS_ABORT\n");
-+ }
-+
-+ /*
-+ * All commands should be ended up with a ASPEED_PECI_INT_CMD_DONE bit
-+ * set even in an error case.
-+ */
-+ if (status & ASPEED_PECI_INT_CMD_DONE) {
-+ dev_dbg(priv->dev, "ASPEED_PECI_INT_CMD_DONE\n");
-+ complete(&priv->xfer_complete);
-+ }
-+
-+ spin_unlock(&priv->lock);
-+ return IRQ_HANDLED;
-+}
-+
-+static int aspeed_peci_init_ctrl(struct aspeed_peci *priv)
-+{
-+ u32 msg_timing, addr_timing, rd_sampling_point;
-+ u32 clk_freq, clk_divisor, clk_div_val = 0;
-+ int ret;
-+
-+ priv->clk = devm_clk_get(priv->dev, NULL);
-+ if (IS_ERR(priv->clk)) {
-+ dev_err(priv->dev, "Failed to get clk source.\n");
-+ return PTR_ERR(priv->clk);
-+ }
-+
-+ ret = clk_prepare_enable(priv->clk);
-+ if (ret) {
-+ dev_err(priv->dev, "Failed to enable clock.\n");
-+ return ret;
-+ }
-+
-+ ret = device_property_read_u32(priv->dev, "clock-frequency", &clk_freq);
-+ if (ret) {
-+ dev_err(priv->dev,
-+ "Could not read clock-frequency property.\n");
-+ clk_disable_unprepare(priv->clk);
-+ return ret;
-+ }
-+
-+ clk_divisor = clk_get_rate(priv->clk) / clk_freq;
-+
-+ while ((clk_divisor >> 1) && (clk_div_val < ASPEED_PECI_CLK_DIV_MAX))
-+ clk_div_val++;
-+
-+ ret = device_property_read_u32(priv->dev, "msg-timing", &msg_timing);
-+ if (ret || msg_timing > ASPEED_PECI_MSG_TIMING_MAX) {
-+ if (!ret)
-+ dev_warn(priv->dev,
-+ "Invalid msg-timing : %u, Use default : %u\n",
-+ msg_timing, ASPEED_PECI_MSG_TIMING_DEFAULT);
-+ msg_timing = ASPEED_PECI_MSG_TIMING_DEFAULT;
-+ }
-+
-+ ret = device_property_read_u32(priv->dev, "addr-timing", &addr_timing);
-+ if (ret || addr_timing > ASPEED_PECI_ADDR_TIMING_MAX) {
-+ if (!ret)
-+ dev_warn(priv->dev,
-+ "Invalid addr-timing : %u, Use default : %u\n",
-+ addr_timing, ASPEED_PECI_ADDR_TIMING_DEFAULT);
-+ addr_timing = ASPEED_PECI_ADDR_TIMING_DEFAULT;
-+ }
-+
-+ ret = device_property_read_u32(priv->dev, "rd-sampling-point",
-+ &rd_sampling_point);
-+ if (ret || rd_sampling_point > ASPEED_PECI_RD_SAMPLING_POINT_MAX) {
-+ if (!ret)
-+ dev_warn(priv->dev,
-+ "Invalid rd-sampling-point : %u. Use default : %u\n",
-+ rd_sampling_point,
-+ ASPEED_PECI_RD_SAMPLING_POINT_DEFAULT);
-+ rd_sampling_point = ASPEED_PECI_RD_SAMPLING_POINT_DEFAULT;
-+ }
-+
-+ ret = device_property_read_u32(priv->dev, "cmd-timeout-ms",
-+ &priv->cmd_timeout_ms);
-+ if (ret || priv->cmd_timeout_ms > ASPEED_PECI_CMD_TIMEOUT_MS_MAX ||
-+ priv->cmd_timeout_ms == 0) {
-+ if (!ret)
-+ dev_warn(priv->dev,
-+ "Invalid cmd-timeout-ms : %u. Use default : %u\n",
-+ priv->cmd_timeout_ms,
-+ ASPEED_PECI_CMD_TIMEOUT_MS_DEFAULT);
-+ priv->cmd_timeout_ms = ASPEED_PECI_CMD_TIMEOUT_MS_DEFAULT;
-+ }
-+
-+ writel(FIELD_PREP(ASPEED_PECI_CTRL_CLK_DIV_MASK,
-+ ASPEED_PECI_CLK_DIV_DEFAULT) |
-+ ASPEED_PECI_CTRL_PECI_CLK_EN, priv->base + ASPEED_PECI_CTRL);
-+
-+ /*
-+ * Timing negotiation period setting.
-+ * The unit of the programmed value is 4 times of PECI clock period.
-+ */
-+ writel(FIELD_PREP(ASPEED_PECI_TIMING_MESSAGE_MASK, msg_timing) |
-+ FIELD_PREP(ASPEED_PECI_TIMING_ADDRESS_MASK, addr_timing),
-+ priv->base + ASPEED_PECI_TIMING_NEGOTIATION);
-+
-+ /* Clear interrupts */
-+ writel(readl(priv->base + ASPEED_PECI_INT_STS) | ASPEED_PECI_INT_MASK,
-+ priv->base + ASPEED_PECI_INT_STS);
-+
-+ /* Set timing negotiation mode and enable interrupts */
-+ writel(FIELD_PREP(ASPEED_PECI_TIMING_NEGO_SEL_MASK,
-+ ASPEED_PECI_1ST_BIT_OF_ADDR_NEGO) |
-+ ASPEED_PECI_INT_MASK, priv->base + ASPEED_PECI_INT_CTRL);
-+
-+ /* Read sampling point and clock speed setting */
-+ writel(FIELD_PREP(ASPEED_PECI_CTRL_SAMPLING_MASK, rd_sampling_point) |
-+ FIELD_PREP(ASPEED_PECI_CTRL_CLK_DIV_MASK, clk_div_val) |
-+ ASPEED_PECI_CTRL_PECI_EN | ASPEED_PECI_CTRL_PECI_CLK_EN,
-+ priv->base + ASPEED_PECI_CTRL);
-+
-+ return 0;
-+}
-+
-+static int aspeed_peci_probe(struct platform_device *pdev)
-+{
-+ struct peci_adapter *adapter;
-+ struct aspeed_peci *priv;
-+ int ret;
-+
-+ adapter = peci_alloc_adapter(&pdev->dev, sizeof(*priv));
-+ if (!adapter)
-+ return -ENOMEM;
-+
-+ priv = peci_get_adapdata(adapter);
-+ priv->adapter = adapter;
-+ priv->dev = &pdev->dev;
-+ dev_set_drvdata(&pdev->dev, priv);
-+
-+ priv->base = devm_platform_ioremap_resource(pdev, 0);
-+ if (IS_ERR(priv->base)) {
-+ ret = PTR_ERR(priv->base);
-+ goto err_put_adapter_dev;
-+ }
-+
-+ priv->irq = platform_get_irq(pdev, 0);
-+ if (!priv->irq) {
-+ ret = -ENODEV;
-+ goto err_put_adapter_dev;
-+ }
-+
-+ ret = devm_request_irq(&pdev->dev, priv->irq, aspeed_peci_irq_handler,
-+ 0, "peci-aspeed-irq", priv);
-+ if (ret)
-+ goto err_put_adapter_dev;
-+
-+ init_completion(&priv->xfer_complete);
-+ spin_lock_init(&priv->lock);
-+
-+ priv->adapter->owner = THIS_MODULE;
-+ priv->adapter->dev.of_node = of_node_get(dev_of_node(priv->dev));
-+ strlcpy(priv->adapter->name, pdev->name, sizeof(priv->adapter->name));
-+ priv->adapter->xfer = aspeed_peci_xfer;
-+ priv->adapter->use_dma = false;
-+
-+ priv->rst = devm_reset_control_get(&pdev->dev, NULL);
-+ if (IS_ERR(priv->rst)) {
-+ dev_err(&pdev->dev,
-+ "missing or invalid reset controller entry\n");
-+ ret = PTR_ERR(priv->rst);
-+ goto err_put_adapter_dev;
-+ }
-+ reset_control_deassert(priv->rst);
-+
-+ ret = aspeed_peci_init_ctrl(priv);
-+ if (ret)
-+ goto err_put_adapter_dev;
-+
-+ ret = peci_add_adapter(priv->adapter);
-+ if (ret)
-+ goto err_put_adapter_dev;
-+
-+ dev_info(&pdev->dev, "peci bus %d registered, irq %d\n",
-+ priv->adapter->nr, priv->irq);
-+
-+ return 0;
-+
-+err_put_adapter_dev:
-+ put_device(&adapter->dev);
-+ return ret;
-+}
-+
-+static int aspeed_peci_remove(struct platform_device *pdev)
-+{
-+ struct aspeed_peci *priv = dev_get_drvdata(&pdev->dev);
-+
-+ clk_disable_unprepare(priv->clk);
-+ reset_control_assert(priv->rst);
-+ peci_del_adapter(priv->adapter);
-+ of_node_put(priv->adapter->dev.of_node);
-+
-+ return 0;
-+}
-+
-+static const struct of_device_id aspeed_peci_of_table[] = {
-+ { .compatible = "aspeed,ast2400-peci", },
-+ { .compatible = "aspeed,ast2500-peci", },
-+ { }
-+};
-+MODULE_DEVICE_TABLE(of, aspeed_peci_of_table);
-+
-+static struct platform_driver aspeed_peci_driver = {
-+ .probe = aspeed_peci_probe,
-+ .remove = aspeed_peci_remove,
-+ .driver = {
-+ .name = KBUILD_MODNAME,
-+ .of_match_table = of_match_ptr(aspeed_peci_of_table),
-+ },
-+};
-+module_platform_driver(aspeed_peci_driver);
-+
-+MODULE_AUTHOR("Ryan Chen <ryan_chen@aspeedtech.com>");
-+MODULE_AUTHOR("Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>");
-+MODULE_DESCRIPTION("ASPEED PECI driver");
-+MODULE_LICENSE("GPL v2");
-diff --git a/drivers/peci/busses/peci-npcm.c b/drivers/peci/busses/peci-npcm.c
-new file mode 100644
-index 0000000..f632365
---- /dev/null
-+++ b/drivers/peci/busses/peci-npcm.c
-@@ -0,0 +1,410 @@
-+// SPDX-License-Identifier: GPL-2.0
-+// Copyright (c) 2019 Nuvoton Technology corporation.
-+
-+#include <linux/bitfield.h>
-+#include <linux/clk.h>
-+#include <linux/interrupt.h>
-+#include <linux/jiffies.h>
-+#include <linux/module.h>
-+#include <linux/of.h>
-+#include <linux/peci.h>
-+#include <linux/platform_device.h>
-+#include <linux/regmap.h>
-+#include <linux/mfd/syscon.h>
-+#include <linux/reset.h>
-+
-+/* NPCM7xx GCR module */
-+#define NPCM7XX_INTCR3_OFFSET 0x9C
-+#define NPCM7XX_INTCR3_PECIVSEL BIT(19)
-+
-+/* NPCM PECI Registers */
-+#define NPCM_PECI_CTL_STS 0x00
-+#define NPCM_PECI_RD_LENGTH 0x04
-+#define NPCM_PECI_ADDR 0x08
-+#define NPCM_PECI_CMD 0x0C
-+#define NPCM_PECI_CTL2 0x10
-+#define NPCM_PECI_WR_LENGTH 0x1C
-+#define NPCM_PECI_PDDR 0x2C
-+#define NPCM_PECI_DAT_INOUT(n) (0x100 + ((n) * 4))
-+
-+#define NPCM_PECI_MAX_REG 0x200
-+
-+/* NPCM_PECI_CTL_STS - 0x00 : Control Register */
-+#define NPCM_PECI_CTRL_DONE_INT_EN BIT(6)
-+#define NPCM_PECI_CTRL_ABRT_ERR BIT(4)
-+#define NPCM_PECI_CTRL_CRC_ERR BIT(3)
-+#define NPCM_PECI_CTRL_DONE BIT(1)
-+#define NPCM_PECI_CTRL_START_BUSY BIT(0)
-+
-+/* NPCM_PECI_RD_LENGTH - 0x04 : Command Register */
-+#define NPCM_PECI_RD_LEN_MASK GENMASK(6, 0)
-+
-+/* NPCM_PECI_CMD - 0x10 : Command Register */
-+#define NPCM_PECI_CTL2_MASK GENMASK(7, 6)
-+
-+/* NPCM_PECI_WR_LENGTH - 0x1C : Command Register */
-+#define NPCM_PECI_WR_LEN_MASK GENMASK(6, 0)
-+
-+/* NPCM_PECI_PDDR - 0x2C : Command Register */
-+#define NPCM_PECI_PDDR_MASK GENMASK(4, 0)
-+
-+#define NPCM_PECI_INT_MASK (NPCM_PECI_CTRL_ABRT_ERR | \
-+ NPCM_PECI_CTRL_CRC_ERR | \
-+ NPCM_PECI_CTRL_DONE)
-+
-+#define NPCM_PECI_IDLE_CHECK_TIMEOUT_USEC 50000
-+#define NPCM_PECI_IDLE_CHECK_INTERVAL_USEC 10000
-+#define NPCM_PECI_CMD_TIMEOUT_MS_DEFAULT 1000
-+#define NPCM_PECI_CMD_TIMEOUT_MS_MAX 60000
-+#define NPCM_PECI_HOST_NEG_BIT_RATE_MAX 31
-+#define NPCM_PECI_HOST_NEG_BIT_RATE_MIN 7
-+#define NPCM_PECI_HOST_NEG_BIT_RATE_DEFAULT 15
-+#define NPCM_PECI_PULL_DOWN_DEFAULT 0
-+#define NPCM_PECI_PULL_DOWN_MAX 2
-+
-+struct npcm_peci {
-+ u32 cmd_timeout_ms;
-+ u32 host_bit_rate;
-+ struct completion xfer_complete;
-+ struct regmap *gcr_regmap;
-+ struct peci_adapter *adapter;
-+ struct regmap *regmap;
-+ u32 status;
-+ spinlock_t lock; /* to sync completion status handling */
-+ struct device *dev;
-+ struct clk *clk;
-+ int irq;
-+};
-+
-+static int npcm_peci_xfer_native(struct npcm_peci *priv,
-+ struct peci_xfer_msg *msg)
-+{
-+ long err, timeout = msecs_to_jiffies(priv->cmd_timeout_ms);
-+ unsigned long flags;
-+ unsigned int msg_rd;
-+ u32 cmd_sts;
-+ int i, rc;
-+
-+ /* Check command sts and bus idle state */
-+ rc = regmap_read_poll_timeout(priv->regmap, NPCM_PECI_CTL_STS, cmd_sts,
-+ !(cmd_sts & NPCM_PECI_CTRL_START_BUSY),
-+ NPCM_PECI_IDLE_CHECK_INTERVAL_USEC,
-+ NPCM_PECI_IDLE_CHECK_TIMEOUT_USEC);
-+ if (rc)
-+ return rc; /* -ETIMEDOUT */
-+
-+ spin_lock_irqsave(&priv->lock, flags);
-+ reinit_completion(&priv->xfer_complete);
-+
-+ regmap_write(priv->regmap, NPCM_PECI_ADDR, msg->addr);
-+ regmap_write(priv->regmap, NPCM_PECI_RD_LENGTH,
-+ NPCM_PECI_WR_LEN_MASK & msg->rx_len);
-+ regmap_write(priv->regmap, NPCM_PECI_WR_LENGTH,
-+ NPCM_PECI_WR_LEN_MASK & msg->tx_len);
-+
-+ if (msg->tx_len) {
-+ regmap_write(priv->regmap, NPCM_PECI_CMD, msg->tx_buf[0]);
-+
-+ for (i = 0; i < (msg->tx_len - 1); i++)
-+ regmap_write(priv->regmap, NPCM_PECI_DAT_INOUT(i),
-+ msg->tx_buf[i + 1]);
-+ }
-+
-+ priv->status = 0;
-+ regmap_update_bits(priv->regmap, NPCM_PECI_CTL_STS,
-+ NPCM_PECI_CTRL_START_BUSY,
-+ NPCM_PECI_CTRL_START_BUSY);
-+
-+ spin_unlock_irqrestore(&priv->lock, flags);
-+
-+ err = wait_for_completion_interruptible_timeout(&priv->xfer_complete,
-+ timeout);
-+
-+ spin_lock_irqsave(&priv->lock, flags);
-+
-+ regmap_write(priv->regmap, NPCM_PECI_CMD, 0);
-+
-+ if (err <= 0 || priv->status != NPCM_PECI_CTRL_DONE) {
-+ if (err < 0) { /* -ERESTARTSYS */
-+ rc = (int)err;
-+ goto err_irqrestore;
-+ } else if (err == 0) {
-+ dev_dbg(priv->dev, "Timeout waiting for a response!\n");
-+ rc = -ETIMEDOUT;
-+ goto err_irqrestore;
-+ }
-+
-+ dev_dbg(priv->dev, "No valid response!\n");
-+ rc = -EIO;
-+ goto err_irqrestore;
-+ }
-+
-+ for (i = 0; i < msg->rx_len; i++) {
-+ regmap_read(priv->regmap, NPCM_PECI_DAT_INOUT(i), &msg_rd);
-+ msg->rx_buf[i] = (u8)msg_rd;
-+ }
-+
-+err_irqrestore:
-+ spin_unlock_irqrestore(&priv->lock, flags);
-+ return rc;
-+}
-+
-+static irqreturn_t npcm_peci_irq_handler(int irq, void *arg)
-+{
-+ struct npcm_peci *priv = arg;
-+ u32 status_ack = 0;
-+ u32 status;
-+
-+ spin_lock(&priv->lock);
-+ regmap_read(priv->regmap, NPCM_PECI_CTL_STS, &status);
-+ priv->status |= (status & NPCM_PECI_INT_MASK);
-+
-+ if (status & NPCM_PECI_CTRL_CRC_ERR) {
-+ dev_dbg(priv->dev, "PECI_INT_W_FCS_BAD\n");
-+ status_ack |= NPCM_PECI_CTRL_CRC_ERR;
-+ }
-+
-+ if (status & NPCM_PECI_CTRL_ABRT_ERR) {
-+ dev_dbg(priv->dev, "NPCM_PECI_CTRL_ABRT_ERR\n");
-+ status_ack |= NPCM_PECI_CTRL_ABRT_ERR;
-+ }
-+
-+ /*
-+ * All commands should be ended up with a NPCM_PECI_CTRL_DONE
-+ * bit set even in an error case.
-+ */
-+ if (status & NPCM_PECI_CTRL_DONE) {
-+ dev_dbg(priv->dev, "NPCM_PECI_CTRL_DONE\n");
-+ status_ack |= NPCM_PECI_CTRL_DONE;
-+ complete(&priv->xfer_complete);
-+ }
-+
-+ regmap_write_bits(priv->regmap, NPCM_PECI_CTL_STS,
-+ NPCM_PECI_INT_MASK, status_ack);
-+
-+ spin_unlock(&priv->lock);
-+ return IRQ_HANDLED;
-+}
-+
-+static int npcm_peci_init_ctrl(struct npcm_peci *priv)
-+{
-+ u32 cmd_sts, host_neg_bit_rate = 0, pull_down = 0;
-+ int ret;
-+ bool volt;
-+
-+ priv->clk = devm_clk_get(priv->dev, NULL);
-+ if (IS_ERR(priv->clk)) {
-+ dev_err(priv->dev, "Failed to get clk source.\n");
-+ return PTR_ERR(priv->clk);
-+ }
-+
-+ ret = clk_prepare_enable(priv->clk);
-+ if (ret) {
-+ dev_err(priv->dev, "Failed to enable clock.\n");
-+ return ret;
-+ }
-+
-+ ret = of_property_read_u32(priv->dev->of_node, "cmd-timeout-ms",
-+ &priv->cmd_timeout_ms);
-+ if (ret || priv->cmd_timeout_ms > NPCM_PECI_CMD_TIMEOUT_MS_MAX ||
-+ priv->cmd_timeout_ms == 0) {
-+ if (ret)
-+ dev_warn(priv->dev,
-+ "cmd-timeout-ms not found, use default : %u\n",
-+ NPCM_PECI_CMD_TIMEOUT_MS_DEFAULT);
-+ else
-+ dev_warn(priv->dev,
-+ "Invalid cmd-timeout-ms : %u. Use default : %u\n",
-+ priv->cmd_timeout_ms,
-+ NPCM_PECI_CMD_TIMEOUT_MS_DEFAULT);
-+
-+ priv->cmd_timeout_ms = NPCM_PECI_CMD_TIMEOUT_MS_DEFAULT;
-+ }
-+
-+ if (of_device_is_compatible(priv->dev->of_node,
-+ "nuvoton,npcm750-peci")) {
-+ priv->gcr_regmap = syscon_regmap_lookup_by_compatible
-+ ("nuvoton,npcm750-gcr");
-+ if (!IS_ERR(priv->gcr_regmap)) {
-+ volt = of_property_read_bool(priv->dev->of_node,
-+ "high-volt-range");
-+ if (volt)
-+ regmap_update_bits(priv->gcr_regmap,
-+ NPCM7XX_INTCR3_OFFSET,
-+ NPCM7XX_INTCR3_PECIVSEL,
-+ NPCM7XX_INTCR3_PECIVSEL);
-+ else
-+ regmap_update_bits(priv->gcr_regmap,
-+ NPCM7XX_INTCR3_OFFSET,
-+ NPCM7XX_INTCR3_PECIVSEL, 0);
-+ }
-+ }
-+
-+ ret = of_property_read_u32(priv->dev->of_node, "pull-down",
-+ &pull_down);
-+ if (ret || pull_down > NPCM_PECI_PULL_DOWN_MAX) {
-+ if (ret)
-+ dev_warn(priv->dev,
-+ "pull-down not found, use default : %u\n",
-+ NPCM_PECI_PULL_DOWN_DEFAULT);
-+ else
-+ dev_warn(priv->dev,
-+ "Invalid pull-down : %u. Use default : %u\n",
-+ pull_down,
-+ NPCM_PECI_PULL_DOWN_DEFAULT);
-+ pull_down = NPCM_PECI_PULL_DOWN_DEFAULT;
-+ }
-+
-+ regmap_update_bits(priv->regmap, NPCM_PECI_CTL2, NPCM_PECI_CTL2_MASK,
-+ pull_down << 6);
-+
-+ ret = of_property_read_u32(priv->dev->of_node, "host-neg-bit-rate",
-+ &host_neg_bit_rate);
-+ if (ret || host_neg_bit_rate > NPCM_PECI_HOST_NEG_BIT_RATE_MAX ||
-+ host_neg_bit_rate < NPCM_PECI_HOST_NEG_BIT_RATE_MIN) {
-+ if (ret)
-+ dev_warn(priv->dev,
-+ "host-neg-bit-rate not found, use default : %u\n",
-+ NPCM_PECI_HOST_NEG_BIT_RATE_DEFAULT);
-+ else
-+ dev_warn(priv->dev,
-+ "Invalid host-neg-bit-rate : %u. Use default : %u\n",
-+ host_neg_bit_rate,
-+ NPCM_PECI_HOST_NEG_BIT_RATE_DEFAULT);
-+ host_neg_bit_rate = NPCM_PECI_HOST_NEG_BIT_RATE_DEFAULT;
-+ }
-+
-+ regmap_update_bits(priv->regmap, NPCM_PECI_PDDR, NPCM_PECI_PDDR_MASK,
-+ host_neg_bit_rate);
-+
-+ priv->host_bit_rate = clk_get_rate(priv->clk) /
-+ (4 * (host_neg_bit_rate + 1));
-+
-+ ret = regmap_read_poll_timeout(priv->regmap, NPCM_PECI_CTL_STS, cmd_sts,
-+ !(cmd_sts & NPCM_PECI_CTRL_START_BUSY),
-+ NPCM_PECI_IDLE_CHECK_INTERVAL_USEC,
-+ NPCM_PECI_IDLE_CHECK_TIMEOUT_USEC);
-+ if (ret)
-+ return ret; /* -ETIMEDOUT */
-+
-+ /* PECI interrupt enable */
-+ regmap_update_bits(priv->regmap, NPCM_PECI_CTL_STS,
-+ NPCM_PECI_CTRL_DONE_INT_EN,
-+ NPCM_PECI_CTRL_DONE_INT_EN);
-+
-+ return 0;
-+}
-+
-+static const struct regmap_config npcm_peci_regmap_config = {
-+ .reg_bits = 8,
-+ .val_bits = 8,
-+ .max_register = NPCM_PECI_MAX_REG,
-+ .fast_io = true,
-+};
-+
-+static int npcm_peci_xfer(struct peci_adapter *adapter,
-+ struct peci_xfer_msg *msg)
-+{
-+ struct npcm_peci *priv = peci_get_adapdata(adapter);
-+
-+ return npcm_peci_xfer_native(priv, msg);
-+}
-+
-+static int npcm_peci_probe(struct platform_device *pdev)
-+{
-+ struct peci_adapter *adapter;
-+ struct npcm_peci *priv;
-+ struct resource *res;
-+ void __iomem *base;
-+ int ret;
-+
-+ adapter = peci_alloc_adapter(&pdev->dev, sizeof(*priv));
-+ if (!adapter)
-+ return -ENOMEM;
-+
-+ priv = peci_get_adapdata(adapter);
-+ priv->adapter = adapter;
-+ priv->dev = &pdev->dev;
-+ dev_set_drvdata(&pdev->dev, priv);
-+
-+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-+ base = devm_ioremap_resource(&pdev->dev, res);
-+ if (IS_ERR(base)) {
-+ ret = PTR_ERR(base);
-+ goto err_put_adapter_dev;
-+ }
-+
-+ priv->regmap = devm_regmap_init_mmio(&pdev->dev, base,
-+ &npcm_peci_regmap_config);
-+ if (IS_ERR(priv->regmap)) {
-+ ret = PTR_ERR(priv->regmap);
-+ goto err_put_adapter_dev;
-+ }
-+
-+ priv->irq = platform_get_irq(pdev, 0);
-+ if (!priv->irq) {
-+ ret = -ENODEV;
-+ goto err_put_adapter_dev;
-+ }
-+
-+ ret = devm_request_irq(&pdev->dev, priv->irq, npcm_peci_irq_handler,
-+ 0, "peci-npcm-irq", priv);
-+ if (ret)
-+ goto err_put_adapter_dev;
-+
-+ init_completion(&priv->xfer_complete);
-+ spin_lock_init(&priv->lock);
-+
-+ priv->adapter->owner = THIS_MODULE;
-+ priv->adapter->dev.of_node = of_node_get(dev_of_node(priv->dev));
-+ strlcpy(priv->adapter->name, pdev->name, sizeof(priv->adapter->name));
-+ priv->adapter->xfer = npcm_peci_xfer;
-+
-+ ret = npcm_peci_init_ctrl(priv);
-+ if (ret)
-+ goto err_put_adapter_dev;
-+
-+ ret = peci_add_adapter(priv->adapter);
-+ if (ret)
-+ goto err_put_adapter_dev;
-+
-+ dev_info(&pdev->dev, "peci bus %d registered, host negotiation bit rate %dHz",
-+ priv->adapter->nr, priv->host_bit_rate);
-+
-+ return 0;
-+
-+err_put_adapter_dev:
-+ put_device(&adapter->dev);
-+ return ret;
-+}
-+
-+static int npcm_peci_remove(struct platform_device *pdev)
-+{
-+ struct npcm_peci *priv = dev_get_drvdata(&pdev->dev);
-+
-+ clk_disable_unprepare(priv->clk);
-+ peci_del_adapter(priv->adapter);
-+ of_node_put(priv->adapter->dev.of_node);
-+
-+ return 0;
-+}
-+
-+static const struct of_device_id npcm_peci_of_table[] = {
-+ { .compatible = "nuvoton,npcm750-peci", },
-+ { }
-+};
-+MODULE_DEVICE_TABLE(of, npcm_peci_of_table);
-+
-+static struct platform_driver npcm_peci_driver = {
-+ .probe = npcm_peci_probe,
-+ .remove = npcm_peci_remove,
-+ .driver = {
-+ .name = "peci-npcm",
-+ .of_match_table = of_match_ptr(npcm_peci_of_table),
-+ },
-+};
-+module_platform_driver(npcm_peci_driver);
-+
-+MODULE_AUTHOR("Tomer Maimon <tomer.maimon@nuvoton.com>");
-+MODULE_DESCRIPTION("NPCM Platform Environment Control Interface (PECI) driver");
-+MODULE_LICENSE("GPL v2");
-diff --git a/drivers/peci/peci-aspeed.c b/drivers/peci/peci-aspeed.c
-deleted file mode 100644
-index 51cb256..0000000
---- a/drivers/peci/peci-aspeed.c
-+++ /dev/null
-@@ -1,505 +0,0 @@
--// SPDX-License-Identifier: GPL-2.0
--// Copyright (C) 2012-2017 ASPEED Technology Inc.
--// Copyright (c) 2018 Intel Corporation
--
--#include <linux/bitfield.h>
--#include <linux/clk.h>
--#include <linux/interrupt.h>
--#include <linux/jiffies.h>
--#include <linux/module.h>
--#include <linux/of.h>
--#include <linux/peci.h>
--#include <linux/platform_device.h>
--#include <linux/regmap.h>
--#include <linux/reset.h>
--
--/* ASPEED PECI Registers */
--#define ASPEED_PECI_CTRL 0x00
--#define ASPEED_PECI_TIMING 0x04
--#define ASPEED_PECI_CMD 0x08
--#define ASPEED_PECI_CMD_CTRL 0x0c
--#define ASPEED_PECI_EXP_FCS 0x10
--#define ASPEED_PECI_CAP_FCS 0x14
--#define ASPEED_PECI_INT_CTRL 0x18
--#define ASPEED_PECI_INT_STS 0x1c
--#define ASPEED_PECI_W_DATA0 0x20
--#define ASPEED_PECI_W_DATA1 0x24
--#define ASPEED_PECI_W_DATA2 0x28
--#define ASPEED_PECI_W_DATA3 0x2c
--#define ASPEED_PECI_R_DATA0 0x30
--#define ASPEED_PECI_R_DATA1 0x34
--#define ASPEED_PECI_R_DATA2 0x38
--#define ASPEED_PECI_R_DATA3 0x3c
--#define ASPEED_PECI_W_DATA4 0x40
--#define ASPEED_PECI_W_DATA5 0x44
--#define ASPEED_PECI_W_DATA6 0x48
--#define ASPEED_PECI_W_DATA7 0x4c
--#define ASPEED_PECI_R_DATA4 0x50
--#define ASPEED_PECI_R_DATA5 0x54
--#define ASPEED_PECI_R_DATA6 0x58
--#define ASPEED_PECI_R_DATA7 0x5c
--
--/* ASPEED_PECI_CTRL - 0x00 : Control Register */
--#define PECI_CTRL_SAMPLING_MASK GENMASK(19, 16)
--#define PECI_CTRL_READ_MODE_MASK GENMASK(13, 12)
--#define PECI_CTRL_READ_MODE_COUNT BIT(12)
--#define PECI_CTRL_READ_MODE_DBG BIT(13)
--#define PECI_CTRL_CLK_SOURCE_MASK BIT(11)
--#define PECI_CTRL_CLK_DIV_MASK GENMASK(10, 8)
--#define PECI_CTRL_INVERT_OUT BIT(7)
--#define PECI_CTRL_INVERT_IN BIT(6)
--#define PECI_CTRL_BUS_CONTENT_EN BIT(5)
--#define PECI_CTRL_PECI_EN BIT(4)
--#define PECI_CTRL_PECI_CLK_EN BIT(0)
--
--/* ASPEED_PECI_TIMING - 0x04 : Timing Negotiation Register */
--#define PECI_TIMING_MESSAGE_MASK GENMASK(15, 8)
--#define PECI_TIMING_ADDRESS_MASK GENMASK(7, 0)
--
--/* ASPEED_PECI_CMD - 0x08 : Command Register */
--#define PECI_CMD_PIN_MON BIT(31)
--#define PECI_CMD_STS_MASK GENMASK(27, 24)
--#define PECI_CMD_IDLE_MASK (PECI_CMD_STS_MASK | PECI_CMD_PIN_MON)
--#define PECI_CMD_FIRE BIT(0)
--
--/* ASPEED_PECI_LEN - 0x0C : Read/Write Length Register */
--#define PECI_AW_FCS_EN BIT(31)
--#define PECI_READ_LEN_MASK GENMASK(23, 16)
--#define PECI_WRITE_LEN_MASK GENMASK(15, 8)
--#define PECI_TAGET_ADDR_MASK GENMASK(7, 0)
--
--/* ASPEED_PECI_EXP_FCS - 0x10 : Expected FCS Data Register */
--#define PECI_EXPECT_READ_FCS_MASK GENMASK(23, 16)
--#define PECI_EXPECT_AW_FCS_AUTO_MASK GENMASK(15, 8)
--#define PECI_EXPECT_WRITE_FCS_MASK GENMASK(7, 0)
--
--/* ASPEED_PECI_CAP_FCS - 0x14 : Captured FCS Data Register */
--#define PECI_CAPTURE_READ_FCS_MASK GENMASK(23, 16)
--#define PECI_CAPTURE_WRITE_FCS_MASK GENMASK(7, 0)
--
--/* ASPEED_PECI_INT_CTRL/STS - 0x18/0x1c : Interrupt Register */
--#define PECI_INT_TIMING_RESULT_MASK GENMASK(31, 30)
--#define PECI_INT_TIMEOUT BIT(4)
--#define PECI_INT_CONNECT BIT(3)
--#define PECI_INT_W_FCS_BAD BIT(2)
--#define PECI_INT_W_FCS_ABORT BIT(1)
--#define PECI_INT_CMD_DONE BIT(0)
--
--#define PECI_INT_MASK (PECI_INT_TIMEOUT | PECI_INT_CONNECT | \
-- PECI_INT_W_FCS_BAD | PECI_INT_W_FCS_ABORT | \
-- PECI_INT_CMD_DONE)
--
--#define PECI_IDLE_CHECK_TIMEOUT_USEC 50000
--#define PECI_IDLE_CHECK_INTERVAL_USEC 10000
--
--#define PECI_RD_SAMPLING_POINT_DEFAULT 8
--#define PECI_RD_SAMPLING_POINT_MAX 15
--#define PECI_CLK_DIV_DEFAULT 0
--#define PECI_CLK_DIV_MAX 7
--#define PECI_MSG_TIMING_DEFAULT 1
--#define PECI_MSG_TIMING_MAX 255
--#define PECI_ADDR_TIMING_DEFAULT 1
--#define PECI_ADDR_TIMING_MAX 255
--#define PECI_CMD_TIMEOUT_MS_DEFAULT 1000
--#define PECI_CMD_TIMEOUT_MS_MAX 60000
--
--struct aspeed_peci {
-- struct peci_adapter *adapter;
-- struct device *dev;
-- struct regmap *regmap;
-- struct clk *clk;
-- struct reset_control *rst;
-- int irq;
-- spinlock_t lock; /* to sync completion status handling */
-- struct completion xfer_complete;
-- u32 status;
-- u32 cmd_timeout_ms;
--};
--
--static int aspeed_peci_xfer_native(struct aspeed_peci *priv,
-- struct peci_xfer_msg *msg)
--{
-- long err, timeout = msecs_to_jiffies(priv->cmd_timeout_ms);
-- u32 peci_head, peci_state, rx_data, cmd_sts;
-- unsigned long flags;
-- int i, rc;
-- uint reg;
--
-- /* Check command sts and bus idle state */
-- rc = regmap_read_poll_timeout(priv->regmap, ASPEED_PECI_CMD, cmd_sts,
-- !(cmd_sts & PECI_CMD_IDLE_MASK),
-- PECI_IDLE_CHECK_INTERVAL_USEC,
-- PECI_IDLE_CHECK_TIMEOUT_USEC);
-- if (rc)
-- return rc; /* -ETIMEDOUT */
--
-- spin_lock_irqsave(&priv->lock, flags);
-- reinit_completion(&priv->xfer_complete);
--
-- peci_head = FIELD_PREP(PECI_TAGET_ADDR_MASK, msg->addr) |
-- FIELD_PREP(PECI_WRITE_LEN_MASK, msg->tx_len) |
-- FIELD_PREP(PECI_READ_LEN_MASK, msg->rx_len);
--
-- regmap_write(priv->regmap, ASPEED_PECI_CMD_CTRL, peci_head);
--
-- for (i = 0; i < msg->tx_len; i += 4) {
-- reg = i < 16 ? ASPEED_PECI_W_DATA0 + i % 16 :
-- ASPEED_PECI_W_DATA4 + i % 16;
-- regmap_write(priv->regmap, reg,
-- le32_to_cpup((__le32 *)&msg->tx_buf[i]));
-- }
--
-- dev_dbg(priv->dev, "HEAD : 0x%08x\n", peci_head);
-- print_hex_dump_debug("TX : ", DUMP_PREFIX_NONE, 16, 1,
-- msg->tx_buf, msg->tx_len, true);
--
-- priv->status = 0;
-- regmap_write(priv->regmap, ASPEED_PECI_CMD, PECI_CMD_FIRE);
-- spin_unlock_irqrestore(&priv->lock, flags);
--
-- err = wait_for_completion_interruptible_timeout(&priv->xfer_complete,
-- timeout);
--
-- spin_lock_irqsave(&priv->lock, flags);
-- dev_dbg(priv->dev, "INT_STS : 0x%08x\n", priv->status);
-- regmap_read(priv->regmap, ASPEED_PECI_CMD, &peci_state);
-- dev_dbg(priv->dev, "PECI_STATE : 0x%lx\n",
-- FIELD_GET(PECI_CMD_STS_MASK, peci_state));
--
-- regmap_write(priv->regmap, ASPEED_PECI_CMD, 0);
--
-- if (err <= 0 || priv->status != PECI_INT_CMD_DONE) {
-- if (err < 0) { /* -ERESTARTSYS */
-- rc = (int)err;
-- goto err_irqrestore;
-- } else if (err == 0) {
-- dev_dbg(priv->dev, "Timeout waiting for a response!\n");
-- rc = -ETIMEDOUT;
-- goto err_irqrestore;
-- }
--
-- dev_dbg(priv->dev, "No valid response!\n");
-- rc = -EIO;
-- goto err_irqrestore;
-- }
--
-- /**
-- * Note that rx_len and rx_buf size can be an odd number.
-- * Byte handling is more efficient.
-- */
-- for (i = 0; i < msg->rx_len; i++) {
-- u8 byte_offset = i % 4;
--
-- if (byte_offset == 0) {
-- reg = i < 16 ? ASPEED_PECI_R_DATA0 + i % 16 :
-- ASPEED_PECI_R_DATA4 + i % 16;
-- regmap_read(priv->regmap, reg, &rx_data);
-- }
--
-- msg->rx_buf[i] = (u8)(rx_data >> (byte_offset << 3));
-- }
--
-- print_hex_dump_debug("RX : ", DUMP_PREFIX_NONE, 16, 1,
-- msg->rx_buf, msg->rx_len, true);
--
-- regmap_read(priv->regmap, ASPEED_PECI_CMD, &peci_state);
-- dev_dbg(priv->dev, "PECI_STATE : 0x%lx\n",
-- FIELD_GET(PECI_CMD_STS_MASK, peci_state));
-- dev_dbg(priv->dev, "------------------------\n");
--
--err_irqrestore:
-- spin_unlock_irqrestore(&priv->lock, flags);
-- return rc;
--}
--
--static irqreturn_t aspeed_peci_irq_handler(int irq, void *arg)
--{
-- struct aspeed_peci *priv = arg;
-- u32 status_ack = 0;
-- u32 status;
--
-- spin_lock(&priv->lock);
-- regmap_read(priv->regmap, ASPEED_PECI_INT_STS, &status);
-- priv->status |= (status & PECI_INT_MASK);
--
-- /**
-- * In most cases, interrupt bits will be set one by one but also note
-- * that multiple interrupt bits could be set at the same time.
-- */
-- if (status & PECI_INT_TIMEOUT) {
-- dev_dbg(priv->dev, "PECI_INT_TIMEOUT\n");
-- status_ack |= PECI_INT_TIMEOUT;
-- }
--
-- if (status & PECI_INT_CONNECT) {
-- dev_dbg(priv->dev, "PECI_INT_CONNECT\n");
-- status_ack |= PECI_INT_CONNECT;
-- }
--
-- if (status & PECI_INT_W_FCS_BAD) {
-- dev_dbg(priv->dev, "PECI_INT_W_FCS_BAD\n");
-- status_ack |= PECI_INT_W_FCS_BAD;
-- }
--
-- if (status & PECI_INT_W_FCS_ABORT) {
-- dev_dbg(priv->dev, "PECI_INT_W_FCS_ABORT\n");
-- status_ack |= PECI_INT_W_FCS_ABORT;
-- }
--
-- /**
-- * All commands should be ended up with a PECI_INT_CMD_DONE bit set
-- * even in an error case.
-- */
-- if (status & PECI_INT_CMD_DONE) {
-- dev_dbg(priv->dev, "PECI_INT_CMD_DONE\n");
-- status_ack |= PECI_INT_CMD_DONE;
-- complete(&priv->xfer_complete);
-- }
--
-- regmap_write(priv->regmap, ASPEED_PECI_INT_STS, status_ack);
-- spin_unlock(&priv->lock);
-- return IRQ_HANDLED;
--}
--
--static int aspeed_peci_init_ctrl(struct aspeed_peci *priv)
--{
-- u32 msg_timing, addr_timing, rd_sampling_point;
-- u32 clk_freq, clk_divisor, clk_div_val = 0;
-- int ret;
--
-- priv->clk = devm_clk_get(priv->dev, NULL);
-- if (IS_ERR(priv->clk)) {
-- dev_err(priv->dev, "Failed to get clk source.\n");
-- return PTR_ERR(priv->clk);
-- }
--
-- ret = clk_prepare_enable(priv->clk);
-- if (ret) {
-- dev_err(priv->dev, "Failed to enable clock.\n");
-- return ret;
-- }
--
-- ret = of_property_read_u32(priv->dev->of_node, "clock-frequency",
-- &clk_freq);
-- if (ret) {
-- dev_err(priv->dev,
-- "Could not read clock-frequency property.\n");
-- clk_disable_unprepare(priv->clk);
-- return ret;
-- }
--
-- clk_divisor = clk_get_rate(priv->clk) / clk_freq;
--
-- while ((clk_divisor >> 1) && (clk_div_val < PECI_CLK_DIV_MAX))
-- clk_div_val++;
--
-- ret = of_property_read_u32(priv->dev->of_node, "msg-timing",
-- &msg_timing);
-- if (ret || msg_timing > PECI_MSG_TIMING_MAX) {
-- if (!ret)
-- dev_warn(priv->dev,
-- "Invalid msg-timing : %u, Use default : %u\n",
-- msg_timing, PECI_MSG_TIMING_DEFAULT);
-- msg_timing = PECI_MSG_TIMING_DEFAULT;
-- }
--
-- ret = of_property_read_u32(priv->dev->of_node, "addr-timing",
-- &addr_timing);
-- if (ret || addr_timing > PECI_ADDR_TIMING_MAX) {
-- if (!ret)
-- dev_warn(priv->dev,
-- "Invalid addr-timing : %u, Use default : %u\n",
-- addr_timing, PECI_ADDR_TIMING_DEFAULT);
-- addr_timing = PECI_ADDR_TIMING_DEFAULT;
-- }
--
-- ret = of_property_read_u32(priv->dev->of_node, "rd-sampling-point",
-- &rd_sampling_point);
-- if (ret || rd_sampling_point > PECI_RD_SAMPLING_POINT_MAX) {
-- if (!ret)
-- dev_warn(priv->dev,
-- "Invalid rd-sampling-point : %u. Use default : %u\n",
-- rd_sampling_point,
-- PECI_RD_SAMPLING_POINT_DEFAULT);
-- rd_sampling_point = PECI_RD_SAMPLING_POINT_DEFAULT;
-- }
--
-- ret = of_property_read_u32(priv->dev->of_node, "cmd-timeout-ms",
-- &priv->cmd_timeout_ms);
-- if (ret || priv->cmd_timeout_ms > PECI_CMD_TIMEOUT_MS_MAX ||
-- priv->cmd_timeout_ms == 0) {
-- if (!ret)
-- dev_warn(priv->dev,
-- "Invalid cmd-timeout-ms : %u. Use default : %u\n",
-- priv->cmd_timeout_ms,
-- PECI_CMD_TIMEOUT_MS_DEFAULT);
-- priv->cmd_timeout_ms = PECI_CMD_TIMEOUT_MS_DEFAULT;
-- }
--
-- regmap_write(priv->regmap, ASPEED_PECI_CTRL,
-- FIELD_PREP(PECI_CTRL_CLK_DIV_MASK, PECI_CLK_DIV_DEFAULT) |
-- PECI_CTRL_PECI_CLK_EN);
--
-- /**
-- * Timing negotiation period setting.
-- * The unit of the programmed value is 4 times of PECI clock period.
-- */
-- regmap_write(priv->regmap, ASPEED_PECI_TIMING,
-- FIELD_PREP(PECI_TIMING_MESSAGE_MASK, msg_timing) |
-- FIELD_PREP(PECI_TIMING_ADDRESS_MASK, addr_timing));
--
-- /* Clear interrupts */
-- regmap_write(priv->regmap, ASPEED_PECI_INT_STS, PECI_INT_MASK);
--
-- /* Enable interrupts */
-- regmap_write(priv->regmap, ASPEED_PECI_INT_CTRL, PECI_INT_MASK);
--
-- /* Read sampling point and clock speed setting */
-- regmap_write(priv->regmap, ASPEED_PECI_CTRL,
-- FIELD_PREP(PECI_CTRL_SAMPLING_MASK, rd_sampling_point) |
-- FIELD_PREP(PECI_CTRL_CLK_DIV_MASK, clk_div_val) |
-- PECI_CTRL_PECI_EN | PECI_CTRL_PECI_CLK_EN);
--
-- return 0;
--}
--
--static const struct regmap_config aspeed_peci_regmap_config = {
-- .reg_bits = 32,
-- .val_bits = 32,
-- .reg_stride = 4,
-- .max_register = ASPEED_PECI_R_DATA7,
-- .val_format_endian = REGMAP_ENDIAN_LITTLE,
-- .fast_io = true,
--};
--
--static int aspeed_peci_xfer(struct peci_adapter *adapter,
-- struct peci_xfer_msg *msg)
--{
-- struct aspeed_peci *priv = peci_get_adapdata(adapter);
--
-- return aspeed_peci_xfer_native(priv, msg);
--}
--
--static int aspeed_peci_probe(struct platform_device *pdev)
--{
-- struct peci_adapter *adapter;
-- struct aspeed_peci *priv;
-- struct resource *res;
-- void __iomem *base;
-- u32 cmd_sts;
-- int ret;
--
-- adapter = peci_alloc_adapter(&pdev->dev, sizeof(*priv));
-- if (!adapter)
-- return -ENOMEM;
--
-- priv = peci_get_adapdata(adapter);
-- priv->adapter = adapter;
-- priv->dev = &pdev->dev;
-- dev_set_drvdata(&pdev->dev, priv);
--
-- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-- base = devm_ioremap_resource(&pdev->dev, res);
-- if (IS_ERR(base)) {
-- ret = PTR_ERR(base);
-- goto err_put_adapter_dev;
-- }
--
-- priv->regmap = devm_regmap_init_mmio(&pdev->dev, base,
-- &aspeed_peci_regmap_config);
-- if (IS_ERR(priv->regmap)) {
-- ret = PTR_ERR(priv->regmap);
-- goto err_put_adapter_dev;
-- }
--
-- /**
-- * We check that the regmap works on this very first access,
-- * but as this is an MMIO-backed regmap, subsequent regmap
-- * access is not going to fail and we skip error checks from
-- * this point.
-- */
-- ret = regmap_read(priv->regmap, ASPEED_PECI_CMD, &cmd_sts);
-- if (ret) {
-- ret = -EIO;
-- goto err_put_adapter_dev;
-- }
--
-- priv->irq = platform_get_irq(pdev, 0);
-- if (!priv->irq) {
-- ret = -ENODEV;
-- goto err_put_adapter_dev;
-- }
--
-- ret = devm_request_irq(&pdev->dev, priv->irq, aspeed_peci_irq_handler,
-- 0, "peci-aspeed-irq", priv);
-- if (ret)
-- goto err_put_adapter_dev;
--
-- init_completion(&priv->xfer_complete);
-- spin_lock_init(&priv->lock);
--
-- priv->adapter->owner = THIS_MODULE;
-- priv->adapter->dev.of_node = of_node_get(dev_of_node(priv->dev));
-- strlcpy(priv->adapter->name, pdev->name, sizeof(priv->adapter->name));
-- priv->adapter->xfer = aspeed_peci_xfer;
--
-- priv->rst = devm_reset_control_get(&pdev->dev, NULL);
-- if (IS_ERR(priv->rst)) {
-- dev_err(&pdev->dev,
-- "missing or invalid reset controller entry");
-- ret = PTR_ERR(priv->rst);
-- goto err_put_adapter_dev;
-- }
-- reset_control_deassert(priv->rst);
--
-- ret = aspeed_peci_init_ctrl(priv);
-- if (ret)
-- goto err_put_adapter_dev;
--
-- ret = peci_add_adapter(priv->adapter);
-- if (ret)
-- goto err_put_adapter_dev;
--
-- dev_info(&pdev->dev, "peci bus %d registered, irq %d\n",
-- priv->adapter->nr, priv->irq);
--
-- return 0;
--
--err_put_adapter_dev:
-- put_device(&adapter->dev);
-- return ret;
--}
--
--static int aspeed_peci_remove(struct platform_device *pdev)
--{
-- struct aspeed_peci *priv = dev_get_drvdata(&pdev->dev);
--
-- clk_disable_unprepare(priv->clk);
-- reset_control_assert(priv->rst);
-- peci_del_adapter(priv->adapter);
-- of_node_put(priv->adapter->dev.of_node);
--
-- return 0;
--}
--
--static const struct of_device_id aspeed_peci_of_table[] = {
-- { .compatible = "aspeed,ast2400-peci", },
-- { .compatible = "aspeed,ast2500-peci", },
-- { }
--};
--MODULE_DEVICE_TABLE(of, aspeed_peci_of_table);
--
--static struct platform_driver aspeed_peci_driver = {
-- .probe = aspeed_peci_probe,
-- .remove = aspeed_peci_remove,
-- .driver = {
-- .name = "peci-aspeed",
-- .of_match_table = of_match_ptr(aspeed_peci_of_table),
-- },
--};
--module_platform_driver(aspeed_peci_driver);
--
--MODULE_AUTHOR("Ryan Chen <ryan_chen@aspeedtech.com>");
--MODULE_AUTHOR("Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>");
--MODULE_DESCRIPTION("ASPEED PECI driver");
--MODULE_LICENSE("GPL v2");
-diff --git a/drivers/peci/peci-core.c b/drivers/peci/peci-core.c
-index 6f24146..2a6be04 100644
---- a/drivers/peci/peci-core.c
-+++ b/drivers/peci/peci-core.c
-@@ -1,38 +1,31 @@
- // SPDX-License-Identifier: GPL-2.0
--// Copyright (c) 2018 Intel Corporation
-+// Copyright (c) 2018-2019 Intel Corporation
-
- #include <linux/bitfield.h>
- #include <linux/crc8.h>
- #include <linux/delay.h>
--#include <linux/fs.h>
-+#include <linux/mm.h>
- #include <linux/module.h>
- #include <linux/of_device.h>
- #include <linux/peci.h>
- #include <linux/pm_domain.h>
- #include <linux/pm_runtime.h>
-+#include <linux/sched/task_stack.h>
- #include <linux/slab.h>
--#include <linux/uaccess.h>
-
- /* Mask for getting minor revision number from DIB */
- #define REVISION_NUM_MASK GENMASK(15, 8)
-
--/* CRC8 table for Assure Write Frame Check */
-+/* CRC8 table for Assured Write Frame Check */
- #define PECI_CRC8_POLYNOMIAL 0x07
- DECLARE_CRC8_TABLE(peci_crc8_table);
-
--static struct device_type peci_adapter_type;
--static struct device_type peci_client_type;
--
--/* Max number of peci cdev */
--#define PECI_CDEV_MAX 16
--
--static dev_t peci_devt;
- static bool is_registered;
-
- static DEFINE_MUTEX(core_lock);
- static DEFINE_IDR(peci_adapter_idr);
-
--static struct peci_adapter *peci_get_adapter(int nr)
-+struct peci_adapter *peci_get_adapter(int nr)
- {
- struct peci_adapter *adapter;
-
-@@ -48,10 +41,12 @@ static struct peci_adapter *peci_get_adapter(int nr)
-
- out_unlock:
- mutex_unlock(&core_lock);
-+
- return adapter;
- }
-+EXPORT_SYMBOL_GPL(peci_get_adapter);
-
--static void peci_put_adapter(struct peci_adapter *adapter)
-+void peci_put_adapter(struct peci_adapter *adapter)
- {
- if (!adapter)
- return;
-@@ -59,6 +54,7 @@ static void peci_put_adapter(struct peci_adapter *adapter)
- put_device(&adapter->dev);
- module_put(adapter->owner);
- }
-+EXPORT_SYMBOL_GPL(peci_put_adapter);
-
- static ssize_t name_show(struct device *dev,
- struct device_attribute *attr,
-@@ -84,10 +80,11 @@ static struct attribute *peci_device_attrs[] = {
- };
- ATTRIBUTE_GROUPS(peci_device);
-
--static struct device_type peci_client_type = {
-+struct device_type peci_client_type = {
- .groups = peci_device_groups,
- .release = peci_client_dev_release,
- };
-+EXPORT_SYMBOL_GPL(peci_client_type);
-
- /**
- * peci_verify_client - return parameter as peci_client, or NULL
-@@ -103,19 +100,120 @@ struct peci_client *peci_verify_client(struct device *dev)
- }
- EXPORT_SYMBOL_GPL(peci_verify_client);
-
--static u8 peci_aw_fcs(u8 *data, int len)
-+/**
-+ * peci_get_xfer_msg() - get a DMA safe peci_xfer_msg for the given tx and rx
-+ * length
-+ * @tx_len: the length of tx_buf. May be 0 if tx_buf isn't needed.
-+ * @rx_len: the length of rx_buf. May be 0 if rx_buf isn't needed.
-+ *
-+ * Return: NULL if a DMA safe buffer was not obtained.
-+ * Or a valid pointer to be used with DMA. After use, release it by
-+ * calling peci_put_xfer_msg().
-+ *
-+ * This function must only be called from process context!
-+ */
-+struct peci_xfer_msg *peci_get_xfer_msg(u8 tx_len, u8 rx_len)
-+{
-+ struct peci_xfer_msg *msg;
-+ u8 *tx_buf, *rx_buf;
-+
-+ if (tx_len) {
-+ tx_buf = kzalloc(tx_len, GFP_KERNEL);
-+ if (!tx_buf)
-+ return NULL;
-+ } else {
-+ tx_buf = NULL;
-+ }
-+
-+ if (rx_len) {
-+ rx_buf = kzalloc(rx_len, GFP_KERNEL);
-+ if (!rx_buf)
-+ goto err_free_tx_buf;
-+ } else {
-+ rx_buf = NULL;
-+ }
-+
-+ msg = kzalloc(sizeof(struct peci_xfer_msg), GFP_KERNEL);
-+ if (!msg)
-+ goto err_free_tx_rx_buf;
-+
-+ msg->tx_len = tx_len;
-+ msg->tx_buf = tx_buf;
-+ msg->rx_len = rx_len;
-+ msg->rx_buf = rx_buf;
-+
-+ return msg;
-+
-+err_free_tx_rx_buf:
-+ kfree(rx_buf);
-+err_free_tx_buf:
-+ kfree(tx_buf);
-+
-+ return NULL;
-+}
-+EXPORT_SYMBOL_GPL(peci_get_xfer_msg);
-+
-+/**
-+ * peci_put_xfer_msg - release a DMA safe peci_xfer_msg
-+ * @msg: the message obtained from peci_get_xfer_msg(). May be NULL.
-+ */
-+void peci_put_xfer_msg(struct peci_xfer_msg *msg)
-+{
-+ if (!msg)
-+ return;
-+
-+ kfree(msg->rx_buf);
-+ kfree(msg->tx_buf);
-+ kfree(msg);
-+}
-+EXPORT_SYMBOL_GPL(peci_put_xfer_msg);
-+
-+/* Calculate an Assured Write Frame Check Sequence byte */
-+static int peci_aw_fcs(struct peci_xfer_msg *msg, int len, u8 *aw_fcs)
- {
-- return crc8(peci_crc8_table, data, (size_t)len, 0);
-+ u8 *tmp_buf;
-+
-+ /* Allocate a temporary buffer to use a contiguous byte array */
-+ tmp_buf = kmalloc(len, GFP_KERNEL);
-+ if (!tmp_buf)
-+ return -ENOMEM;
-+
-+ tmp_buf[0] = msg->addr;
-+ tmp_buf[1] = msg->tx_len;
-+ tmp_buf[2] = msg->rx_len;
-+ memcpy(&tmp_buf[3], msg->tx_buf, len - 3);
-+
-+ *aw_fcs = crc8(peci_crc8_table, tmp_buf, (size_t)len, 0);
-+
-+ kfree(tmp_buf);
-+
-+ return 0;
- }
-
- static int __peci_xfer(struct peci_adapter *adapter, struct peci_xfer_msg *msg,
- bool do_retry, bool has_aw_fcs)
- {
-- ktime_t start, end;
-- s64 elapsed_ms;
-- int rc = 0;
-+ ulong timeout = jiffies;
-+ u8 aw_fcs;
-+ int ret;
-+
-+ /*
-+ * In case if adapter uses DMA, check at here whether tx and rx buffers
-+ * are DMA capable or not.
-+ */
-+ if (IS_ENABLED(CONFIG_HAS_DMA) && adapter->use_dma) {
-+ if (is_vmalloc_addr(msg->tx_buf) ||
-+ is_vmalloc_addr(msg->rx_buf)) {
-+ WARN_ONCE(1, "xfer msg is not dma capable\n");
-+ return -EAGAIN;
-+ } else if (object_is_on_stack(msg->tx_buf) ||
-+ object_is_on_stack(msg->rx_buf)) {
-+ WARN_ONCE(1, "xfer msg is on stack\n");
-+ return -EAGAIN;
-+ }
-+ }
-
-- /**
-+ /*
- * For some commands, the PECI originator may need to retry a command if
- * the processor PECI client responds with a 0x8x completion code. In
- * each instance, the processor PECI client may have started the
-@@ -125,55 +223,51 @@ static int __peci_xfer(struct peci_adapter *adapter, struct peci_xfer_msg *msg,
- */
-
- if (do_retry)
-- start = ktime_get();
-+ timeout += msecs_to_jiffies(PECI_DEV_RETRY_TIME_MS);
-
-- do {
-- rc = adapter->xfer(adapter, msg);
-+ for (;;) {
-+ ret = adapter->xfer(adapter, msg);
-
-- if (!do_retry || rc)
-- break;
--
-- if (msg->rx_buf[0] == DEV_PECI_CC_SUCCESS)
-+ if (!do_retry || ret || !msg->rx_buf)
- break;
-
- /* Retry is needed when completion code is 0x8x */
-- if ((msg->rx_buf[0] & DEV_PECI_CC_RETRY_CHECK_MASK) !=
-- DEV_PECI_CC_NEED_RETRY) {
-- rc = -EIO;
-+ if ((msg->rx_buf[0] & PECI_DEV_CC_RETRY_CHECK_MASK) !=
-+ PECI_DEV_CC_NEED_RETRY)
- break;
-- }
-
- /* Set the retry bit to indicate a retry attempt */
-- msg->tx_buf[1] |= DEV_PECI_RETRY_BIT;
-+ msg->tx_buf[1] |= PECI_DEV_RETRY_BIT;
-
- /* Recalculate the AW FCS if it has one */
-- if (has_aw_fcs)
-- msg->tx_buf[msg->tx_len - 1] = 0x80 ^
-- peci_aw_fcs((u8 *)msg,
-- 2 + msg->tx_len);
-+ if (has_aw_fcs) {
-+ ret = peci_aw_fcs(msg, 2 + msg->tx_len, &aw_fcs);
-+ if (ret)
-+ break;
-
-- /**
-+ msg->tx_buf[msg->tx_len - 1] = 0x80 ^ aw_fcs;
-+ }
-+
-+ /*
- * Retry for at least 250ms before returning an error.
- * Retry interval guideline:
- * No minimum < Retry Interval < No maximum
- * (recommend 10ms)
- */
-- end = ktime_get();
-- elapsed_ms = ktime_to_ms(ktime_sub(end, start));
-- if (elapsed_ms >= DEV_PECI_RETRY_TIME_MS) {
-+ if (time_after(jiffies, timeout)) {
- dev_dbg(&adapter->dev, "Timeout retrying xfer!\n");
-- rc = -ETIMEDOUT;
-+ ret = -ETIMEDOUT;
- break;
- }
-
-- usleep_range((DEV_PECI_RETRY_INTERVAL_USEC >> 2) + 1,
-- DEV_PECI_RETRY_INTERVAL_USEC);
-- } while (true);
-+ usleep_range((PECI_DEV_RETRY_INTERVAL_USEC >> 2) + 1,
-+ PECI_DEV_RETRY_INTERVAL_USEC);
-+ }
-
-- if (rc)
-- dev_dbg(&adapter->dev, "xfer error, rc: %d\n", rc);
-+ if (ret)
-+ dev_dbg(&adapter->dev, "xfer error: %d\n", ret);
-
-- return rc;
-+ return ret;
- }
-
- static int peci_xfer(struct peci_adapter *adapter, struct peci_xfer_msg *msg)
-@@ -190,34 +284,37 @@ static int peci_xfer_with_retries(struct peci_adapter *adapter,
-
- static int peci_scan_cmd_mask(struct peci_adapter *adapter)
- {
-- struct peci_xfer_msg msg;
-+ struct peci_xfer_msg *msg;
- u8 revision;
-- int rc = 0;
-+ int ret;
- u64 dib;
-
- /* Update command mask just once */
- if (adapter->cmd_mask & BIT(PECI_CMD_XFER))
- return 0;
-
-- msg.addr = PECI_BASE_ADDR;
-- msg.tx_len = GET_DIB_WR_LEN;
-- msg.rx_len = GET_DIB_RD_LEN;
-- msg.tx_buf[0] = GET_DIB_PECI_CMD;
-+ msg = peci_get_xfer_msg(PECI_GET_DIB_WR_LEN, PECI_GET_DIB_RD_LEN);
-+ if (!msg)
-+ return -ENOMEM;
-+
-+ msg->addr = PECI_BASE_ADDR;
-+ msg->tx_buf[0] = PECI_GET_DIB_CMD;
-
-- rc = peci_xfer(adapter, &msg);
-- if (rc)
-- return rc;
-+ ret = peci_xfer(adapter, msg);
-+ if (ret)
-+ return ret;
-
-- dib = le64_to_cpup((__le64 *)msg.rx_buf);
-+ dib = le64_to_cpup((__le64 *)msg->rx_buf);
-
- /* Check special case for Get DIB command */
- if (dib == 0) {
- dev_dbg(&adapter->dev, "DIB read as 0\n");
-- return -EIO;
-+ ret = -EIO;
-+ goto out;
- }
-
-- /**
-- * Setting up the supporting commands based on minor revision number.
-+ /*
-+ * Setting up the supporting commands based on revision number.
- * See PECI Spec Table 3-1.
- */
- revision = FIELD_GET(REVISION_NUM_MASK, dib);
-@@ -243,10 +340,14 @@ static int peci_scan_cmd_mask(struct peci_adapter *adapter)
- adapter->cmd_mask |= BIT(PECI_CMD_GET_DIB);
- adapter->cmd_mask |= BIT(PECI_CMD_PING);
-
-- return rc;
-+out:
-+ peci_put_xfer_msg(msg);
-+
-+ return ret;
- }
-
--static int peci_cmd_support(struct peci_adapter *adapter, enum peci_cmd cmd)
-+static int peci_check_cmd_support(struct peci_adapter *adapter,
-+ enum peci_cmd cmd)
- {
- if (!(adapter->cmd_mask & BIT(PECI_CMD_PING)) &&
- peci_scan_cmd_mask(adapter) < 0) {
-@@ -262,70 +363,130 @@ static int peci_cmd_support(struct peci_adapter *adapter, enum peci_cmd cmd)
- return 0;
- }
-
--static int peci_ioctl_xfer(struct peci_adapter *adapter, void *vmsg)
-+static int peci_cmd_xfer(struct peci_adapter *adapter, void *vmsg)
- {
- struct peci_xfer_msg *msg = vmsg;
-+ u8 aw_fcs;
-+ int ret;
-+
-+ if (!msg->tx_len) {
-+ ret = peci_xfer(adapter, msg);
-+ } else {
-+ switch (msg->tx_buf[0]) {
-+ case PECI_RDPKGCFG_CMD:
-+ case PECI_RDIAMSR_CMD:
-+ case PECI_RDPCICFG_CMD:
-+ case PECI_RDPCICFGLOCAL_CMD:
-+ ret = peci_xfer_with_retries(adapter, msg, false);
-+ break;
-+ case PECI_WRPKGCFG_CMD:
-+ case PECI_WRIAMSR_CMD:
-+ case PECI_WRPCICFG_CMD:
-+ case PECI_WRPCICFGLOCAL_CMD:
-+ /* Check if the AW FCS byte is already provided */
-+ ret = peci_aw_fcs(msg, 2 + msg->tx_len, &aw_fcs);
-+ if (ret)
-+ break;
-+
-+ if (msg->tx_buf[msg->tx_len - 1] != (0x80 ^ aw_fcs)) {
-+ /* Add an Assured Write Frame Check Sequence byte */
-+ /* Increment the tx_len to include the new byte */
-+ msg->tx_len++;
-+ ret = peci_aw_fcs(msg, 2 + msg->tx_len,
-+ &aw_fcs);
-+ if (ret)
-+ break;
-+
-+ msg->tx_buf[msg->tx_len - 1] = 0x80 ^ aw_fcs;
-+ }
-+
-+ ret = peci_xfer_with_retries(adapter, msg, true);
-+ break;
-+ case PECI_GET_DIB_CMD:
-+ case PECI_GET_TEMP_CMD:
-+ default:
-+ ret = peci_xfer(adapter, msg);
-+ break;
-+ }
-+ }
-
-- return peci_xfer(adapter, msg);
-+ return ret;
- }
-
--static int peci_ioctl_ping(struct peci_adapter *adapter, void *vmsg)
-+static int peci_cmd_ping(struct peci_adapter *adapter, void *vmsg)
- {
- struct peci_ping_msg *umsg = vmsg;
-- struct peci_xfer_msg msg;
-+ struct peci_xfer_msg *msg;
-+ int ret;
-+
-+ msg = peci_get_xfer_msg(0, 0);
-+ if (!msg)
-+ return -ENOMEM;
-
-- msg.addr = umsg->addr;
-- msg.tx_len = 0;
-- msg.rx_len = 0;
-+ msg->addr = umsg->addr;
-
-- return peci_xfer(adapter, &msg);
-+ ret = peci_xfer(adapter, msg);
-+
-+ peci_put_xfer_msg(msg);
-+
-+ return ret;
- }
-
--static int peci_ioctl_get_dib(struct peci_adapter *adapter, void *vmsg)
-+static int peci_cmd_get_dib(struct peci_adapter *adapter, void *vmsg)
- {
- struct peci_get_dib_msg *umsg = vmsg;
-- struct peci_xfer_msg msg;
-- int rc;
-+ struct peci_xfer_msg *msg;
-+ int ret;
-
-- msg.addr = umsg->addr;
-- msg.tx_len = GET_DIB_WR_LEN;
-- msg.rx_len = GET_DIB_RD_LEN;
-- msg.tx_buf[0] = GET_DIB_PECI_CMD;
-+ msg = peci_get_xfer_msg(PECI_GET_DIB_WR_LEN, PECI_GET_DIB_RD_LEN);
-+ if (!msg)
-+ return -ENOMEM;
-
-- rc = peci_xfer(adapter, &msg);
-- if (rc)
-- return rc;
-+ msg->addr = umsg->addr;
-+ msg->tx_buf[0] = PECI_GET_DIB_CMD;
-
-- umsg->dib = le64_to_cpup((__le64 *)msg.rx_buf);
-+ ret = peci_xfer(adapter, msg);
-+ if (ret)
-+ goto out;
-
-- return 0;
-+ umsg->dib = le64_to_cpup((__le64 *)msg->rx_buf);
-+
-+out:
-+ peci_put_xfer_msg(msg);
-+
-+ return ret;
- }
-
--static int peci_ioctl_get_temp(struct peci_adapter *adapter, void *vmsg)
-+static int peci_cmd_get_temp(struct peci_adapter *adapter, void *vmsg)
- {
- struct peci_get_temp_msg *umsg = vmsg;
-- struct peci_xfer_msg msg;
-- int rc;
-+ struct peci_xfer_msg *msg;
-+ int ret;
-
-- msg.addr = umsg->addr;
-- msg.tx_len = GET_TEMP_WR_LEN;
-- msg.rx_len = GET_TEMP_RD_LEN;
-- msg.tx_buf[0] = GET_TEMP_PECI_CMD;
-+ msg = peci_get_xfer_msg(PECI_GET_TEMP_WR_LEN, PECI_GET_TEMP_RD_LEN);
-+ if (!msg)
-+ return -ENOMEM;
-
-- rc = peci_xfer(adapter, &msg);
-- if (rc)
-- return rc;
-+ msg->addr = umsg->addr;
-+ msg->tx_buf[0] = PECI_GET_TEMP_CMD;
-
-- umsg->temp_raw = le16_to_cpup((__le16 *)msg.rx_buf);
-+ ret = peci_xfer(adapter, msg);
-+ if (ret)
-+ goto out;
-
-- return 0;
-+ umsg->temp_raw = le16_to_cpup((__le16 *)msg->rx_buf);
-+
-+out:
-+ peci_put_xfer_msg(msg);
-+
-+ return ret;
- }
-
--static int peci_ioctl_rd_pkg_cfg(struct peci_adapter *adapter, void *vmsg)
-+static int peci_cmd_rd_pkg_cfg(struct peci_adapter *adapter, void *vmsg)
- {
- struct peci_rd_pkg_cfg_msg *umsg = vmsg;
-- struct peci_xfer_msg msg;
-- int rc = 0;
-+ struct peci_xfer_msg *msg;
-+ int ret;
-
- /* Per the PECI spec, the read length must be a byte, word, or dword */
- if (umsg->rx_len != 1 && umsg->rx_len != 2 && umsg->rx_len != 4) {
-@@ -334,29 +495,35 @@ static int peci_ioctl_rd_pkg_cfg(struct peci_adapter *adapter, void *vmsg)
- return -EINVAL;
- }
-
-- msg.addr = umsg->addr;
-- msg.tx_len = RDPKGCFG_WRITE_LEN;
-- /* read lengths of 1 and 2 result in an error, so only use 4 for now */
-- msg.rx_len = RDPKGCFG_READ_LEN_BASE + umsg->rx_len;
-- msg.tx_buf[0] = RDPKGCFG_PECI_CMD;
-- msg.tx_buf[1] = 0; /* request byte for Host ID | Retry bit */
-- /* Host ID is 0 for PECI 3.0 */
-- msg.tx_buf[2] = umsg->index; /* RdPkgConfig index */
-- msg.tx_buf[3] = (u8)umsg->param; /* LSB - Config parameter */
-- msg.tx_buf[4] = (u8)(umsg->param >> 8); /* MSB - Config parameter */
-+ msg = peci_get_xfer_msg(PECI_RDPKGCFG_WRITE_LEN,
-+ PECI_RDPKGCFG_READ_LEN_BASE + umsg->rx_len);
-+ if (!msg)
-+ return -ENOMEM;
-+
-+ msg->addr = umsg->addr;
-+ msg->tx_buf[0] = PECI_RDPKGCFG_CMD;
-+ msg->tx_buf[1] = 0; /* request byte for Host ID | Retry bit */
-+ /* Host ID is 0 for PECI 3.0 */
-+ msg->tx_buf[2] = umsg->index; /* RdPkgConfig index */
-+ msg->tx_buf[3] = (u8)umsg->param; /* LSB - Config parameter */
-+ msg->tx_buf[4] = (u8)(umsg->param >> 8); /* MSB - Config parameter */
-+
-+ ret = peci_xfer_with_retries(adapter, msg, false);
-+ if (!ret)
-+ memcpy(umsg->pkg_config, &msg->rx_buf[1], umsg->rx_len);
-
-- rc = peci_xfer_with_retries(adapter, &msg, false);
-- if (!rc)
-- memcpy(umsg->pkg_config, &msg.rx_buf[1], umsg->rx_len);
-+ umsg->cc = msg->rx_buf[0];
-+ peci_put_xfer_msg(msg);
-
-- return rc;
-+ return ret;
- }
-
--static int peci_ioctl_wr_pkg_cfg(struct peci_adapter *adapter, void *vmsg)
-+static int peci_cmd_wr_pkg_cfg(struct peci_adapter *adapter, void *vmsg)
- {
- struct peci_wr_pkg_cfg_msg *umsg = vmsg;
-- struct peci_xfer_msg msg;
-- int rc = 0, i;
-+ struct peci_xfer_msg *msg;
-+ int ret, i;
-+ u8 aw_fcs;
-
- /* Per the PECI spec, the write length must be a dword */
- if (umsg->tx_len != 4) {
-@@ -365,86 +532,116 @@ static int peci_ioctl_wr_pkg_cfg(struct peci_adapter *adapter, void *vmsg)
- return -EINVAL;
- }
-
-- msg.addr = umsg->addr;
-- msg.tx_len = WRPKGCFG_WRITE_LEN_BASE + umsg->tx_len;
-- /* read lengths of 1 and 2 result in an error, so only use 4 for now */
-- msg.rx_len = WRPKGCFG_READ_LEN;
-- msg.tx_buf[0] = WRPKGCFG_PECI_CMD;
-- msg.tx_buf[1] = 0; /* request byte for Host ID | Retry bit */
-+ msg = peci_get_xfer_msg(PECI_WRPKGCFG_WRITE_LEN_BASE + umsg->tx_len,
-+ PECI_WRPKGCFG_READ_LEN);
-+ if (!msg)
-+ return -ENOMEM;
-+
-+ msg->addr = umsg->addr;
-+ msg->tx_buf[0] = PECI_WRPKGCFG_CMD;
-+ msg->tx_buf[1] = 0; /* request byte for Host ID | Retry bit */
- /* Host ID is 0 for PECI 3.0 */
-- msg.tx_buf[2] = umsg->index; /* RdPkgConfig index */
-- msg.tx_buf[3] = (u8)umsg->param; /* LSB - Config parameter */
-- msg.tx_buf[4] = (u8)(umsg->param >> 8); /* MSB - Config parameter */
-+ msg->tx_buf[2] = umsg->index; /* RdPkgConfig index */
-+ msg->tx_buf[3] = (u8)umsg->param; /* LSB - Config parameter */
-+ msg->tx_buf[4] = (u8)(umsg->param >> 8); /* MSB - Config parameter */
- for (i = 0; i < umsg->tx_len; i++)
-- msg.tx_buf[5 + i] = (u8)(umsg->value >> (i << 3));
-+ msg->tx_buf[5 + i] = (u8)(umsg->value >> (i << 3));
-+
-+ /* Add an Assured Write Frame Check Sequence byte */
-+ ret = peci_aw_fcs(msg, 8 + umsg->tx_len, &aw_fcs);
-+ if (ret)
-+ goto out;
-+
-+ msg->tx_buf[5 + i] = 0x80 ^ aw_fcs;
-
-- /* Add an Assure Write Frame Check Sequence byte */
-- msg.tx_buf[5 + i] = 0x80 ^
-- peci_aw_fcs((u8 *)&msg, 8 + umsg->tx_len);
-+ ret = peci_xfer_with_retries(adapter, msg, true);
-
-- rc = peci_xfer_with_retries(adapter, &msg, true);
-+out:
-+ umsg->cc = msg->rx_buf[0];
-+ peci_put_xfer_msg(msg);
-
-- return rc;
-+ return ret;
- }
-
--static int peci_ioctl_rd_ia_msr(struct peci_adapter *adapter, void *vmsg)
-+static int peci_cmd_rd_ia_msr(struct peci_adapter *adapter, void *vmsg)
- {
- struct peci_rd_ia_msr_msg *umsg = vmsg;
-- struct peci_xfer_msg msg;
-- int rc = 0;
--
-- msg.addr = umsg->addr;
-- msg.tx_len = RDIAMSR_WRITE_LEN;
-- msg.rx_len = RDIAMSR_READ_LEN;
-- msg.tx_buf[0] = RDIAMSR_PECI_CMD;
-- msg.tx_buf[1] = 0;
-- msg.tx_buf[2] = umsg->thread_id;
-- msg.tx_buf[3] = (u8)umsg->address;
-- msg.tx_buf[4] = (u8)(umsg->address >> 8);
--
-- rc = peci_xfer_with_retries(adapter, &msg, false);
-- if (!rc)
-- memcpy(&umsg->value, &msg.rx_buf[1], sizeof(uint64_t));
--
-- return rc;
-+ struct peci_xfer_msg *msg;
-+ int ret;
-+
-+ msg = peci_get_xfer_msg(PECI_RDIAMSR_WRITE_LEN, PECI_RDIAMSR_READ_LEN);
-+ if (!msg)
-+ return -ENOMEM;
-+
-+ msg->addr = umsg->addr;
-+ msg->tx_buf[0] = PECI_RDIAMSR_CMD;
-+ msg->tx_buf[1] = 0;
-+ msg->tx_buf[2] = umsg->thread_id;
-+ msg->tx_buf[3] = (u8)umsg->address;
-+ msg->tx_buf[4] = (u8)(umsg->address >> 8);
-+
-+ ret = peci_xfer_with_retries(adapter, msg, false);
-+ if (!ret)
-+ memcpy(&umsg->value, &msg->rx_buf[1], sizeof(uint64_t));
-+
-+ umsg->cc = msg->rx_buf[0];
-+ peci_put_xfer_msg(msg);
-+
-+ return ret;
- }
-
--static int peci_ioctl_rd_pci_cfg(struct peci_adapter *adapter, void *vmsg)
-+static int peci_cmd_wr_ia_msr(struct peci_adapter *adapter, void *vmsg)
-+{
-+ return -ENOSYS; /* Not implemented yet */
-+}
-+
-+static int peci_cmd_rd_pci_cfg(struct peci_adapter *adapter, void *vmsg)
- {
- struct peci_rd_pci_cfg_msg *umsg = vmsg;
-- struct peci_xfer_msg msg;
-+ struct peci_xfer_msg *msg;
- u32 address;
-- int rc = 0;
-+ int ret;
-+
-+ msg = peci_get_xfer_msg(PECI_RDPCICFG_WRITE_LEN,
-+ PECI_RDPCICFG_READ_LEN);
-+ if (!msg)
-+ return -ENOMEM;
-
- address = umsg->reg; /* [11:0] - Register */
- address |= (u32)umsg->function << 12; /* [14:12] - Function */
- address |= (u32)umsg->device << 15; /* [19:15] - Device */
- address |= (u32)umsg->bus << 20; /* [27:20] - Bus */
- /* [31:28] - Reserved */
-- msg.addr = umsg->addr;
-- msg.tx_len = RDPCICFG_WRITE_LEN;
-- msg.rx_len = RDPCICFG_READ_LEN;
-- msg.tx_buf[0] = RDPCICFG_PECI_CMD;
-- msg.tx_buf[1] = 0; /* request byte for Host ID | Retry bit */
-+ msg->addr = umsg->addr;
-+ msg->tx_buf[0] = PECI_RDPCICFG_CMD;
-+ msg->tx_buf[1] = 0; /* request byte for Host ID | Retry bit */
- /* Host ID is 0 for PECI 3.0 */
-- msg.tx_buf[2] = (u8)address; /* LSB - PCI Config Address */
-- msg.tx_buf[3] = (u8)(address >> 8); /* PCI Config Address */
-- msg.tx_buf[4] = (u8)(address >> 16); /* PCI Config Address */
-- msg.tx_buf[5] = (u8)(address >> 24); /* MSB - PCI Config Address */
-+ msg->tx_buf[2] = (u8)address; /* LSB - PCI Config Address */
-+ msg->tx_buf[3] = (u8)(address >> 8); /* PCI Config Address */
-+ msg->tx_buf[4] = (u8)(address >> 16); /* PCI Config Address */
-+ msg->tx_buf[5] = (u8)(address >> 24); /* MSB - PCI Config Address */
-+
-+ ret = peci_xfer_with_retries(adapter, msg, false);
-+ if (!ret)
-+ memcpy(umsg->pci_config, &msg->rx_buf[1], 4);
-+
-+ umsg->cc = msg->rx_buf[0];
-+ peci_put_xfer_msg(msg);
-
-- rc = peci_xfer_with_retries(adapter, &msg, false);
-- if (!rc)
-- memcpy(umsg->pci_config, &msg.rx_buf[1], 4);
-+ return ret;
-+}
-
-- return rc;
-+static int peci_cmd_wr_pci_cfg(struct peci_adapter *adapter, void *vmsg)
-+{
-+ return -ENOSYS; /* Not implemented yet */
- }
-
--static int peci_ioctl_rd_pci_cfg_local(struct peci_adapter *adapter, void *vmsg)
-+static int peci_cmd_rd_pci_cfg_local(struct peci_adapter *adapter, void *vmsg)
- {
- struct peci_rd_pci_cfg_local_msg *umsg = vmsg;
-- struct peci_xfer_msg msg;
-+ struct peci_xfer_msg *msg;
- u32 address;
-- int rc = 0;
-+ int ret;
-
- /* Per the PECI spec, the read length must be a byte, word, or dword */
- if (umsg->rx_len != 1 && umsg->rx_len != 2 && umsg->rx_len != 4) {
-@@ -453,34 +650,42 @@ static int peci_ioctl_rd_pci_cfg_local(struct peci_adapter *adapter, void *vmsg)
- return -EINVAL;
- }
-
-+ msg = peci_get_xfer_msg(PECI_RDPCICFGLOCAL_WRITE_LEN,
-+ PECI_RDPCICFGLOCAL_READ_LEN_BASE +
-+ umsg->rx_len);
-+ if (!msg)
-+ return -ENOMEM;
-+
- address = umsg->reg; /* [11:0] - Register */
- address |= (u32)umsg->function << 12; /* [14:12] - Function */
- address |= (u32)umsg->device << 15; /* [19:15] - Device */
- address |= (u32)umsg->bus << 20; /* [23:20] - Bus */
-
-- msg.addr = umsg->addr;
-- msg.tx_len = RDPCICFGLOCAL_WRITE_LEN;
-- msg.rx_len = RDPCICFGLOCAL_READ_LEN_BASE + umsg->rx_len;
-- msg.tx_buf[0] = RDPCICFGLOCAL_PECI_CMD;
-- msg.tx_buf[1] = 0; /* request byte for Host ID | Retry bit */
-- /* Host ID is 0 for PECI 3.0 */
-- msg.tx_buf[2] = (u8)address; /* LSB - PCI Configuration Address */
-- msg.tx_buf[3] = (u8)(address >> 8); /* PCI Configuration Address */
-- msg.tx_buf[4] = (u8)(address >> 16); /* PCI Configuration Address */
-+ msg->addr = umsg->addr;
-+ msg->tx_buf[0] = PECI_RDPCICFGLOCAL_CMD;
-+ msg->tx_buf[1] = 0; /* request byte for Host ID | Retry bit */
-+ /* Host ID is 0 for PECI 3.0 */
-+ msg->tx_buf[2] = (u8)address; /* LSB - PCI Configuration Address */
-+ msg->tx_buf[3] = (u8)(address >> 8); /* PCI Configuration Address */
-+ msg->tx_buf[4] = (u8)(address >> 16); /* PCI Configuration Address */
-+
-+ ret = peci_xfer_with_retries(adapter, msg, false);
-+ if (!ret)
-+ memcpy(umsg->pci_config, &msg->rx_buf[1], umsg->rx_len);
-
-- rc = peci_xfer_with_retries(adapter, &msg, false);
-- if (!rc)
-- memcpy(umsg->pci_config, &msg.rx_buf[1], umsg->rx_len);
-+ umsg->cc = msg->rx_buf[0];
-+ peci_put_xfer_msg(msg);
-
-- return rc;
-+ return ret;
- }
-
--static int peci_ioctl_wr_pci_cfg_local(struct peci_adapter *adapter, void *vmsg)
-+static int peci_cmd_wr_pci_cfg_local(struct peci_adapter *adapter, void *vmsg)
- {
- struct peci_wr_pci_cfg_local_msg *umsg = vmsg;
-- struct peci_xfer_msg msg;
-- int rc = 0, i;
-+ struct peci_xfer_msg *msg;
- u32 address;
-+ int ret, i;
-+ u8 aw_fcs;
-
- /* Per the PECI spec, the write length must be a byte, word, or dword */
- if (umsg->tx_len != 1 && umsg->tx_len != 2 && umsg->tx_len != 4) {
-@@ -489,47 +694,57 @@ static int peci_ioctl_wr_pci_cfg_local(struct peci_adapter *adapter, void *vmsg)
- return -EINVAL;
- }
-
-+ msg = peci_get_xfer_msg(PECI_WRPCICFGLOCAL_WRITE_LEN_BASE +
-+ umsg->tx_len, PECI_WRPCICFGLOCAL_READ_LEN);
-+ if (!msg)
-+ return -ENOMEM;
-+
- address = umsg->reg; /* [11:0] - Register */
- address |= (u32)umsg->function << 12; /* [14:12] - Function */
- address |= (u32)umsg->device << 15; /* [19:15] - Device */
- address |= (u32)umsg->bus << 20; /* [23:20] - Bus */
-
-- msg.addr = umsg->addr;
-- msg.tx_len = WRPCICFGLOCAL_WRITE_LEN_BASE + umsg->tx_len;
-- msg.rx_len = WRPCICFGLOCAL_READ_LEN;
-- msg.tx_buf[0] = WRPCICFGLOCAL_PECI_CMD;
-- msg.tx_buf[1] = 0; /* request byte for Host ID | Retry bit */
-- /* Host ID is 0 for PECI 3.0 */
-- msg.tx_buf[2] = (u8)address; /* LSB - PCI Configuration Address */
-- msg.tx_buf[3] = (u8)(address >> 8); /* PCI Configuration Address */
-- msg.tx_buf[4] = (u8)(address >> 16); /* PCI Configuration Address */
-+ msg->addr = umsg->addr;
-+ msg->tx_buf[0] = PECI_WRPCICFGLOCAL_CMD;
-+ msg->tx_buf[1] = 0; /* request byte for Host ID | Retry bit */
-+ /* Host ID is 0 for PECI 3.0 */
-+ msg->tx_buf[2] = (u8)address; /* LSB - PCI Configuration Address */
-+ msg->tx_buf[3] = (u8)(address >> 8); /* PCI Configuration Address */
-+ msg->tx_buf[4] = (u8)(address >> 16); /* PCI Configuration Address */
- for (i = 0; i < umsg->tx_len; i++)
-- msg.tx_buf[5 + i] = (u8)(umsg->value >> (i << 3));
-+ msg->tx_buf[5 + i] = (u8)(umsg->value >> (i << 3));
-+
-+ /* Add an Assured Write Frame Check Sequence byte */
-+ ret = peci_aw_fcs(msg, 8 + umsg->tx_len, &aw_fcs);
-+ if (ret)
-+ goto out;
-
-- /* Add an Assure Write Frame Check Sequence byte */
-- msg.tx_buf[5 + i] = 0x80 ^
-- peci_aw_fcs((u8 *)&msg, 8 + umsg->tx_len);
-+ msg->tx_buf[5 + i] = 0x80 ^ aw_fcs;
-
-- rc = peci_xfer_with_retries(adapter, &msg, true);
-+ ret = peci_xfer_with_retries(adapter, msg, true);
-
-- return rc;
-+out:
-+ umsg->cc = msg->rx_buf[0];
-+ peci_put_xfer_msg(msg);
-+
-+ return ret;
- }
-
--typedef int (*peci_ioctl_fn_type)(struct peci_adapter *, void *);
--
--static const peci_ioctl_fn_type peci_ioctl_fn[PECI_CMD_MAX] = {
-- peci_ioctl_xfer,
-- peci_ioctl_ping,
-- peci_ioctl_get_dib,
-- peci_ioctl_get_temp,
-- peci_ioctl_rd_pkg_cfg,
-- peci_ioctl_wr_pkg_cfg,
-- peci_ioctl_rd_ia_msr,
-- NULL, /* Reserved */
-- peci_ioctl_rd_pci_cfg,
-- NULL, /* Reserved */
-- peci_ioctl_rd_pci_cfg_local,
-- peci_ioctl_wr_pci_cfg_local,
-+typedef int (*peci_cmd_fn_type)(struct peci_adapter *, void *);
-+
-+static const peci_cmd_fn_type peci_cmd_fn[PECI_CMD_MAX] = {
-+ peci_cmd_xfer,
-+ peci_cmd_ping,
-+ peci_cmd_get_dib,
-+ peci_cmd_get_temp,
-+ peci_cmd_rd_pkg_cfg,
-+ peci_cmd_wr_pkg_cfg,
-+ peci_cmd_rd_ia_msr,
-+ peci_cmd_wr_ia_msr,
-+ peci_cmd_rd_pci_cfg,
-+ peci_cmd_wr_pci_cfg,
-+ peci_cmd_rd_pci_cfg_local,
-+ peci_cmd_wr_pci_cfg_local,
- };
-
- /**
-@@ -545,109 +760,28 @@ static const peci_ioctl_fn_type peci_ioctl_fn[PECI_CMD_MAX] = {
- */
- int peci_command(struct peci_adapter *adapter, enum peci_cmd cmd, void *vmsg)
- {
-- int rc = 0;
-+ int ret;
-
- if (cmd >= PECI_CMD_MAX || cmd < PECI_CMD_XFER)
-- return -EINVAL;
-+ return -ENOTTY;
-
- dev_dbg(&adapter->dev, "%s, cmd=0x%02x\n", __func__, cmd);
-
-- if (!peci_ioctl_fn[cmd])
-+ if (!peci_cmd_fn[cmd])
- return -EINVAL;
-
-- rt_mutex_lock(&adapter->bus_lock);
-+ mutex_lock(&adapter->bus_lock);
-
-- rc = peci_cmd_support(adapter, cmd);
-- if (!rc)
-- rc = peci_ioctl_fn[cmd](adapter, vmsg);
-+ ret = peci_check_cmd_support(adapter, cmd);
-+ if (!ret)
-+ ret = peci_cmd_fn[cmd](adapter, vmsg);
-
-- rt_mutex_unlock(&adapter->bus_lock);
-+ mutex_unlock(&adapter->bus_lock);
-
-- return rc;
-+ return ret;
- }
- EXPORT_SYMBOL_GPL(peci_command);
-
--static long peci_ioctl(struct file *file, unsigned int iocmd, unsigned long arg)
--{
-- struct peci_adapter *adapter = file->private_data;
-- void __user *argp = (void __user *)arg;
-- unsigned int msg_len;
-- enum peci_cmd cmd;
-- int rc = 0;
-- u8 *msg;
--
-- if (!capable(CAP_SYS_ADMIN))
-- return -EPERM;
--
-- dev_dbg(&adapter->dev, "ioctl, cmd=0x%x, arg=0x%lx\n", iocmd, arg);
--
-- switch (iocmd) {
-- case PECI_IOC_XFER:
-- case PECI_IOC_PING:
-- case PECI_IOC_GET_DIB:
-- case PECI_IOC_GET_TEMP:
-- case PECI_IOC_RD_PKG_CFG:
-- case PECI_IOC_WR_PKG_CFG:
-- case PECI_IOC_RD_IA_MSR:
-- case PECI_IOC_RD_PCI_CFG:
-- case PECI_IOC_RD_PCI_CFG_LOCAL:
-- case PECI_IOC_WR_PCI_CFG_LOCAL:
-- cmd = _IOC_NR(iocmd);
-- msg_len = _IOC_SIZE(iocmd);
-- break;
--
-- default:
-- dev_dbg(&adapter->dev, "Invalid ioctl cmd : 0x%x\n", iocmd);
-- return -ENOTTY;
-- }
--
-- if (!access_ok(argp, msg_len))
-- return -EFAULT;
--
-- msg = memdup_user(argp, msg_len);
-- if (IS_ERR(msg))
-- return PTR_ERR(msg);
--
-- rc = peci_command(adapter, cmd, msg);
--
-- if (!rc && copy_to_user(argp, msg, msg_len))
-- rc = -EFAULT;
--
-- kfree(msg);
-- return (long)rc;
--}
--
--static int peci_open(struct inode *inode, struct file *file)
--{
-- unsigned int minor = iminor(inode);
-- struct peci_adapter *adapter;
--
-- adapter = peci_get_adapter(minor);
-- if (!adapter)
-- return -ENODEV;
--
-- file->private_data = adapter;
--
-- return 0;
--}
--
--static int peci_release(struct inode *inode, struct file *file)
--{
-- struct peci_adapter *adapter = file->private_data;
--
-- peci_put_adapter(adapter);
-- file->private_data = NULL;
--
-- return 0;
--}
--
--static const struct file_operations peci_fops = {
-- .owner = THIS_MODULE,
-- .unlocked_ioctl = peci_ioctl,
-- .open = peci_open,
-- .release = peci_release,
--};
--
- static int peci_detect(struct peci_adapter *adapter, u8 addr)
- {
- struct peci_ping_msg msg;
-@@ -666,9 +800,9 @@ peci_of_match_device(const struct of_device_id *matches,
- return NULL;
-
- return of_match_device(matches, &client->dev);
--#else
-+#else /* CONFIG_OF */
- return NULL;
--#endif
-+#endif /* CONFIG_OF */
- }
-
- static const struct peci_device_id *
-@@ -737,6 +871,7 @@ static int peci_device_probe(struct device *dev)
-
- err_detach_pm_domain:
- dev_pm_domain_detach(&client->dev, true);
-+
- return status;
- }
-
-@@ -775,13 +910,14 @@ static void peci_device_shutdown(struct device *dev)
- driver->shutdown(client);
- }
-
--static struct bus_type peci_bus_type = {
-+struct bus_type peci_bus_type = {
- .name = "peci",
- .match = peci_device_match,
- .probe = peci_device_probe,
- .remove = peci_device_remove,
- .shutdown = peci_device_shutdown,
- };
-+EXPORT_SYMBOL_GPL(peci_bus_type);
-
- static int peci_check_addr_validity(u8 addr)
- {
-@@ -814,18 +950,22 @@ static int peci_check_client_busy(struct device *dev, void *client_new_p)
- int peci_get_cpu_id(struct peci_adapter *adapter, u8 addr, u32 *cpu_id)
- {
- struct peci_rd_pkg_cfg_msg msg;
-- int rc;
-+ int ret;
-
- msg.addr = addr;
-- msg.index = MBX_INDEX_CPU_ID;
-- msg.param = PKG_ID_CPU_ID;
-+ msg.index = PECI_MBX_INDEX_CPU_ID;
-+ msg.param = PECI_PKG_ID_CPU_ID;
- msg.rx_len = 4;
-
-- rc = peci_command(adapter, PECI_CMD_RD_PKG_CFG, &msg);
-- if (!rc)
-- *cpu_id = le32_to_cpup((__le32 *)msg.pkg_config);
-+ ret = peci_command(adapter, PECI_CMD_RD_PKG_CFG, &msg);
-+ if (msg.cc != PECI_DEV_CC_SUCCESS)
-+ ret = -EAGAIN;
-+ if (ret)
-+ return ret;
-+
-+ *cpu_id = le32_to_cpup((__le32 *)msg.pkg_config);
-
-- return rc;
-+ return 0;
- }
- EXPORT_SYMBOL_GPL(peci_get_cpu_id);
-
-@@ -833,7 +973,7 @@ static struct peci_client *peci_new_device(struct peci_adapter *adapter,
- struct peci_board_info const *info)
- {
- struct peci_client *client;
-- int rc;
-+ int ret;
-
- /* Increase reference count for the adapter assigned */
- if (!peci_get_adapter(adapter->nr))
-@@ -847,46 +987,49 @@ static struct peci_client *peci_new_device(struct peci_adapter *adapter,
- client->addr = info->addr;
- strlcpy(client->name, info->type, sizeof(client->name));
-
-- rc = peci_check_addr_validity(client->addr);
-- if (rc) {
-+ ret = peci_check_addr_validity(client->addr);
-+ if (ret) {
- dev_err(&adapter->dev, "Invalid PECI CPU address 0x%02hx\n",
- client->addr);
- goto err_free_client_silent;
- }
-
- /* Check online status of client */
-- rc = peci_detect(adapter, client->addr);
-- if (rc)
-+ ret = peci_detect(adapter, client->addr);
-+ if (ret)
- goto err_free_client;
-
-- rc = device_for_each_child(&adapter->dev, client,
-- peci_check_client_busy);
-- if (rc)
-+ ret = device_for_each_child(&adapter->dev, client,
-+ peci_check_client_busy);
-+ if (ret)
- goto err_free_client;
-
- client->dev.parent = &client->adapter->dev;
- client->dev.bus = &peci_bus_type;
- client->dev.type = &peci_client_type;
-- client->dev.of_node = info->of_node;
-+ client->dev.of_node = of_node_get(info->of_node);
- dev_set_name(&client->dev, "%d-%02x", adapter->nr, client->addr);
-
-- rc = device_register(&client->dev);
-- if (rc)
-- goto err_free_client;
-+ ret = device_register(&client->dev);
-+ if (ret)
-+ goto err_put_of_node;
-
- dev_dbg(&adapter->dev, "client [%s] registered with bus id %s\n",
- client->name, dev_name(&client->dev));
-
- return client;
-
-+err_put_of_node:
-+ of_node_put(info->of_node);
- err_free_client:
- dev_err(&adapter->dev,
- "Failed to register peci client %s at 0x%02x (%d)\n",
-- client->name, client->addr, rc);
-+ client->name, client->addr, ret);
- err_free_client_silent:
- kfree(client);
- err_put_adapter:
- peci_put_adapter(adapter);
-+
- return NULL;
- }
-
-@@ -895,8 +1038,10 @@ static void peci_unregister_device(struct peci_client *client)
- if (!client)
- return;
-
-- if (client->dev.of_node)
-+ if (client->dev.of_node) {
- of_node_clear_flag(client->dev.of_node, OF_POPULATED);
-+ of_node_put(client->dev.of_node);
-+ }
-
- device_unregister(&client->dev);
- }
-@@ -916,7 +1061,7 @@ static void peci_adapter_dev_release(struct device *dev)
-
- dev_dbg(dev, "%s: %s\n", __func__, adapter->name);
- mutex_destroy(&adapter->userspace_clients_lock);
-- rt_mutex_destroy(&adapter->bus_lock);
-+ mutex_destroy(&adapter->bus_lock);
- kfree(adapter);
- }
-
-@@ -928,7 +1073,8 @@ static ssize_t peci_sysfs_new_device(struct device *dev,
- struct peci_board_info info = {};
- struct peci_client *client;
- char *blank, end;
-- int rc;
-+ short addr;
-+ int ret;
-
- /* Parse device type */
- blank = strchr(buf, ' ');
-@@ -943,16 +1089,17 @@ static ssize_t peci_sysfs_new_device(struct device *dev,
- memcpy(info.type, buf, blank - buf);
-
- /* Parse remaining parameters, reject extra parameters */
-- rc = sscanf(++blank, "%hi%c", &info.addr, &end);
-- if (rc < 1) {
-+ ret = sscanf(++blank, "%hi%c", &addr, &end);
-+ if (ret < 1) {
- dev_err(dev, "%s: Can't parse client address\n", "new_device");
- return -EINVAL;
- }
-- if (rc > 1 && end != '\n') {
-+ if (ret > 1 && end != '\n') {
- dev_err(dev, "%s: Extra parameters\n", "new_device");
- return -EINVAL;
- }
-
-+ info.addr = (u8)addr;
- client = peci_new_device(adapter, &info);
- if (!client)
- return -EINVAL;
-@@ -961,8 +1108,8 @@ static ssize_t peci_sysfs_new_device(struct device *dev,
- mutex_lock(&adapter->userspace_clients_lock);
- list_add_tail(&client->detected, &adapter->userspace_clients);
- mutex_unlock(&adapter->userspace_clients_lock);
-- dev_info(dev, "%s: Instantiated device %s at 0x%02hx\n", "new_device",
-- info.type, info.addr);
-+ dev_dbg(dev, "%s: Instantiated device %s at 0x%02hx\n", "new_device",
-+ info.type, info.addr);
-
- return count;
- }
-@@ -975,9 +1122,9 @@ static ssize_t peci_sysfs_delete_device(struct device *dev,
- struct peci_adapter *adapter = to_peci_adapter(dev);
- struct peci_client *client, *next;
- struct peci_board_info info = {};
-- struct peci_driver *driver;
- char *blank, end;
-- int rc;
-+ short addr;
-+ int ret;
-
- /* Parse device type */
- blank = strchr(buf, ' ');
-@@ -992,41 +1139,41 @@ static ssize_t peci_sysfs_delete_device(struct device *dev,
- memcpy(info.type, buf, blank - buf);
-
- /* Parse remaining parameters, reject extra parameters */
-- rc = sscanf(++blank, "%hi%c", &info.addr, &end);
-- if (rc < 1) {
-+ ret = sscanf(++blank, "%hi%c", &addr, &end);
-+ if (ret < 1) {
- dev_err(dev, "%s: Can't parse client address\n",
- "delete_device");
- return -EINVAL;
- }
-- if (rc > 1 && end != '\n') {
-+ if (ret > 1 && end != '\n') {
- dev_err(dev, "%s: Extra parameters\n", "delete_device");
- return -EINVAL;
- }
-
-+ info.addr = (u8)addr;
-+
- /* Make sure the device was added through sysfs */
-- rc = -ENOENT;
-+ ret = -ENOENT;
- mutex_lock(&adapter->userspace_clients_lock);
- list_for_each_entry_safe(client, next, &adapter->userspace_clients,
- detected) {
-- driver = to_peci_driver(client->dev.driver);
--
- if (client->addr == info.addr &&
- !strncmp(client->name, info.type, PECI_NAME_SIZE)) {
-- dev_info(dev, "%s: Deleting device %s at 0x%02hx\n",
-- "delete_device", client->name, client->addr);
-+ dev_dbg(dev, "%s: Deleting device %s at 0x%02hx\n",
-+ "delete_device", client->name, client->addr);
- list_del(&client->detected);
- peci_unregister_device(client);
-- rc = count;
-+ ret = count;
- break;
- }
- }
- mutex_unlock(&adapter->userspace_clients_lock);
-
-- if (rc < 0)
-- dev_err(dev, "%s: Can't find device in list\n",
-+ if (ret < 0)
-+ dev_dbg(dev, "%s: Can't find device in list\n",
- "delete_device");
-
-- return rc;
-+ return ret;
- }
- static DEVICE_ATTR_IGNORE_LOCKDEP(delete_device, 0200, NULL,
- peci_sysfs_delete_device);
-@@ -1039,10 +1186,11 @@ static struct attribute *peci_adapter_attrs[] = {
- };
- ATTRIBUTE_GROUPS(peci_adapter);
-
--static struct device_type peci_adapter_type = {
-+struct device_type peci_adapter_type = {
- .groups = peci_adapter_groups,
- .release = peci_adapter_dev_release,
- };
-+EXPORT_SYMBOL_GPL(peci_adapter_type);
-
- /**
- * peci_verify_adapter - return parameter as peci_adapter, or NULL
-@@ -1063,32 +1211,26 @@ static struct peci_client *peci_of_register_device(struct peci_adapter *adapter,
- struct device_node *node)
- {
- struct peci_board_info info = {};
-- struct peci_client *result;
-- const __be32 *addr_be;
-- int len;
-+ struct peci_client *client;
-+ u32 addr;
-+ int ret;
-
- dev_dbg(&adapter->dev, "register %pOF\n", node);
-
-- if (of_modalias_node(node, info.type, sizeof(info.type)) < 0) {
-- dev_err(&adapter->dev, "modalias failure on %pOF\n", node);
-- return ERR_PTR(-EINVAL);
-- }
--
-- addr_be = of_get_property(node, "reg", &len);
-- if (!addr_be || len < sizeof(*addr_be)) {
-+ ret = of_property_read_u32(node, "reg", &addr);
-+ if (ret) {
- dev_err(&adapter->dev, "invalid reg on %pOF\n", node);
-- return ERR_PTR(-EINVAL);
-+ return ERR_PTR(ret);
- }
-
-- info.addr = be32_to_cpup(addr_be);
-- info.of_node = of_node_get(node);
-+ info.addr = addr;
-+ info.of_node = node;
-
-- result = peci_new_device(adapter, &info);
-- if (!result)
-- result = ERR_PTR(-EINVAL);
-+ client = peci_new_device(adapter, &info);
-+ if (!client)
-+ client = ERR_PTR(-EINVAL);
-
-- of_node_put(node);
-- return result;
-+ return client;
- }
-
- static void peci_of_register_devices(struct peci_adapter *adapter)
-@@ -1119,7 +1261,7 @@ static void peci_of_register_devices(struct peci_adapter *adapter)
-
- of_node_put(bus);
- }
--#else
-+#else /* CONFIG_OF */
- static void peci_of_register_devices(struct peci_adapter *adapter) { }
- #endif /* CONFIG_OF */
-
-@@ -1163,9 +1305,7 @@ static struct peci_adapter *peci_of_find_adapter(struct device_node *node)
- return adapter;
- }
-
--static int peci_of_notify(struct notifier_block *nb,
-- unsigned long action,
-- void *arg)
-+static int peci_of_notify(struct notifier_block *nb, ulong action, void *arg)
- {
- struct of_reconfig_data *rd = arg;
- struct peci_adapter *adapter;
-@@ -1216,7 +1356,7 @@ static int peci_of_notify(struct notifier_block *nb,
- static struct notifier_block peci_of_notifier = {
- .notifier_call = peci_of_notify,
- };
--#else
-+#else /* CONFIG_OF_DYNAMIC */
- extern struct notifier_block peci_of_notifier;
- #endif /* CONFIG_OF_DYNAMIC */
-
-@@ -1240,7 +1380,7 @@ extern struct notifier_block peci_of_notifier;
- *
- * Return: the peci_adapter structure on success, else NULL.
- */
--struct peci_adapter *peci_alloc_adapter(struct device *dev, unsigned int size)
-+struct peci_adapter *peci_alloc_adapter(struct device *dev, uint size)
- {
- struct peci_adapter *adapter;
-
-@@ -1263,7 +1403,7 @@ EXPORT_SYMBOL_GPL(peci_alloc_adapter);
-
- static int peci_register_adapter(struct peci_adapter *adapter)
- {
-- int rc = -EINVAL;
-+ int ret = -EINVAL;
-
- /* Can't register until after driver model init */
- if (WARN_ON(!is_registered))
-@@ -1275,27 +1415,17 @@ static int peci_register_adapter(struct peci_adapter *adapter)
- if (WARN(!adapter->xfer, "peci adapter has no xfer function\n"))
- goto err_free_idr;
-
-- rt_mutex_init(&adapter->bus_lock);
-+ mutex_init(&adapter->bus_lock);
- mutex_init(&adapter->userspace_clients_lock);
- INIT_LIST_HEAD(&adapter->userspace_clients);
-
- dev_set_name(&adapter->dev, "peci-%d", adapter->nr);
-
-- /* cdev */
-- cdev_init(&adapter->cdev, &peci_fops);
-- adapter->cdev.owner = THIS_MODULE;
-- adapter->dev.devt = MKDEV(MAJOR(peci_devt), adapter->nr);
-- rc = cdev_add(&adapter->cdev, adapter->dev.devt, 1);
-- if (rc) {
-- pr_err("adapter '%s': can't add cdev (%d)\n",
-- adapter->name, rc);
-- goto err_free_idr;
-- }
-- rc = device_add(&adapter->dev);
-- if (rc) {
-+ ret = device_add(&adapter->dev);
-+ if (ret) {
- pr_err("adapter '%s': can't add device (%d)\n",
-- adapter->name, rc);
-- goto err_del_cdev;
-+ adapter->name, ret);
-+ goto err_free_idr;
- }
-
- dev_dbg(&adapter->dev, "adapter [%s] registered\n", adapter->name);
-@@ -1309,13 +1439,11 @@ static int peci_register_adapter(struct peci_adapter *adapter)
-
- return 0;
-
--err_del_cdev:
-- cdev_del(&adapter->cdev);
- err_free_idr:
- mutex_lock(&core_lock);
- idr_remove(&peci_adapter_idr, adapter->nr);
- mutex_unlock(&core_lock);
-- return rc;
-+ return ret;
- }
-
- static int peci_add_numbered_adapter(struct peci_adapter *adapter)
-@@ -1354,12 +1482,10 @@ int peci_add_adapter(struct peci_adapter *adapter)
- struct device *dev = &adapter->dev;
- int id;
-
-- if (dev->of_node) {
-- id = of_alias_get_id(dev->of_node, "peci");
-- if (id >= 0) {
-- adapter->nr = id;
-- return peci_add_numbered_adapter(adapter);
-- }
-+ id = of_alias_get_id(dev->of_node, "peci");
-+ if (id >= 0) {
-+ adapter->nr = id;
-+ return peci_add_numbered_adapter(adapter);
- }
-
- mutex_lock(&core_lock);
-@@ -1411,7 +1537,7 @@ void peci_del_adapter(struct peci_adapter *adapter)
- }
- mutex_unlock(&adapter->userspace_clients_lock);
-
-- /**
-+ /*
- * Detach any active clients. This can't fail, thus we do not
- * check the returned value.
- */
-@@ -1420,13 +1546,8 @@ void peci_del_adapter(struct peci_adapter *adapter)
- /* device name is gone after device_unregister */
- dev_dbg(&adapter->dev, "adapter [%s] unregistered\n", adapter->name);
-
-- /* free cdev */
-- cdev_del(&adapter->cdev);
--
- pm_runtime_disable(&adapter->dev);
--
- nr = adapter->nr;
--
- device_unregister(&adapter->dev);
-
- /* free bus id */
-@@ -1436,6 +1557,18 @@ void peci_del_adapter(struct peci_adapter *adapter)
- }
- EXPORT_SYMBOL_GPL(peci_del_adapter);
-
-+int peci_for_each_dev(void *data, int (*fn)(struct device *, void *))
-+{
-+ int ret;
-+
-+ mutex_lock(&core_lock);
-+ ret = bus_for_each_dev(&peci_bus_type, NULL, data, fn);
-+ mutex_unlock(&core_lock);
-+
-+ return ret;
-+}
-+EXPORT_SYMBOL_GPL(peci_for_each_dev);
-+
- /**
- * peci_register_driver - register a PECI driver
- * @owner: owner module of the driver being registered
-@@ -1446,7 +1579,7 @@ EXPORT_SYMBOL_GPL(peci_del_adapter);
- */
- int peci_register_driver(struct module *owner, struct peci_driver *driver)
- {
-- int rc;
-+ int ret;
-
- /* Can't register until after driver model init */
- if (WARN_ON(!is_registered))
-@@ -1456,13 +1589,13 @@ int peci_register_driver(struct module *owner, struct peci_driver *driver)
- driver->driver.owner = owner;
- driver->driver.bus = &peci_bus_type;
-
-- /**
-+ /*
- * When registration returns, the driver core
- * will have called probe() for all matching-but-unbound devices.
- */
-- rc = driver_register(&driver->driver);
-- if (rc)
-- return rc;
-+ ret = driver_register(&driver->driver);
-+ if (ret)
-+ return ret;
-
- pr_debug("driver [%s] registered\n", driver->driver.name);
-
-@@ -1492,13 +1625,6 @@ static int __init peci_init(void)
- return ret;
- }
-
-- ret = alloc_chrdev_region(&peci_devt, 0, PECI_CDEV_MAX, "peci");
-- if (ret < 0) {
-- pr_err("peci: Failed to allocate chr dev region!\n");
-- bus_unregister(&peci_bus_type);
-- return ret;
-- }
--
- crc8_populate_msb(peci_crc8_table, PECI_CRC8_POLYNOMIAL);
-
- if (IS_ENABLED(CONFIG_OF_DYNAMIC))
-@@ -1514,11 +1640,10 @@ static void __exit peci_exit(void)
- if (IS_ENABLED(CONFIG_OF_DYNAMIC))
- WARN_ON(of_reconfig_notifier_unregister(&peci_of_notifier));
-
-- unregister_chrdev_region(peci_devt, PECI_CDEV_MAX);
- bus_unregister(&peci_bus_type);
- }
-
--postcore_initcall(peci_init);
-+subsys_initcall(peci_init);
- module_exit(peci_exit);
-
- MODULE_AUTHOR("Jason M Biils <jason.m.bills@linux.intel.com>");
-diff --git a/drivers/peci/peci-dev.c b/drivers/peci/peci-dev.c
-new file mode 100644
-index 0000000..ac9cba0
---- /dev/null
-+++ b/drivers/peci/peci-dev.c
-@@ -0,0 +1,346 @@
-+// SPDX-License-Identifier: GPL-2.0
-+// Copyright (c) 2018-2019 Intel Corporation
-+
-+#include <linux/cdev.h>
-+#include <linux/fs.h>
-+#include <linux/list.h>
-+#include <linux/module.h>
-+#include <linux/notifier.h>
-+#include <linux/peci.h>
-+#include <linux/slab.h>
-+#include <linux/uaccess.h>
-+
-+/*
-+ * A peci_dev represents an peci_adapter ... an PECI or SMBus master, not a
-+ * slave (peci_client) with which messages will be exchanged. It's coupled
-+ * with a character special file which is accessed by user mode drivers.
-+ *
-+ * The list of peci_dev structures is parallel to the peci_adapter lists
-+ * maintained by the driver model, and is updated using bus notifications.
-+ */
-+struct peci_dev {
-+ struct list_head list;
-+ struct peci_adapter *adapter;
-+ struct device *dev;
-+ struct cdev cdev;
-+};
-+
-+#define PECI_MINORS MINORMASK
-+
-+static dev_t peci_devt;
-+static LIST_HEAD(peci_dev_list);
-+static DEFINE_SPINLOCK(peci_dev_list_lock);
-+
-+static struct peci_dev *peci_dev_get_by_minor(uint index)
-+{
-+ struct peci_dev *peci_dev;
-+
-+ spin_lock(&peci_dev_list_lock);
-+ list_for_each_entry(peci_dev, &peci_dev_list, list) {
-+ if (peci_dev->adapter->nr == index)
-+ goto found;
-+ }
-+ peci_dev = NULL;
-+found:
-+ spin_unlock(&peci_dev_list_lock);
-+
-+ return peci_dev;
-+}
-+
-+static struct peci_dev *peci_dev_alloc(struct peci_adapter *adapter)
-+{
-+ struct peci_dev *peci_dev;
-+
-+ if (adapter->nr >= PECI_MINORS) {
-+ printk(KERN_ERR "peci-dev: Out of device minors (%d)\n",
-+ adapter->nr);
-+ return ERR_PTR(-ENODEV);
-+ }
-+
-+ peci_dev = kzalloc(sizeof(*peci_dev), GFP_KERNEL);
-+ if (!peci_dev)
-+ return ERR_PTR(-ENOMEM);
-+ peci_dev->adapter = adapter;
-+
-+ spin_lock(&peci_dev_list_lock);
-+ list_add_tail(&peci_dev->list, &peci_dev_list);
-+ spin_unlock(&peci_dev_list_lock);
-+
-+ return peci_dev;
-+}
-+
-+static void peci_dev_put(struct peci_dev *peci_dev)
-+{
-+ spin_lock(&peci_dev_list_lock);
-+ list_del(&peci_dev->list);
-+ spin_unlock(&peci_dev_list_lock);
-+ kfree(peci_dev);
-+}
-+
-+static ssize_t name_show(struct device *dev,
-+ struct device_attribute *attr, char *buf)
-+{
-+ struct peci_dev *peci_dev = peci_dev_get_by_minor(MINOR(dev->devt));
-+
-+ if (!peci_dev)
-+ return -ENODEV;
-+
-+ return sprintf(buf, "%s\n", peci_dev->adapter->name);
-+}
-+static DEVICE_ATTR_RO(name);
-+
-+static struct attribute *peci_dev_attrs[] = {
-+ &dev_attr_name.attr,
-+ NULL,
-+};
-+ATTRIBUTE_GROUPS(peci_dev);
-+
-+static long peci_dev_ioctl(struct file *file, uint iocmd, ulong arg)
-+{
-+ struct peci_dev *peci_dev = file->private_data;
-+ void __user *umsg = (void __user *)arg;
-+ struct peci_xfer_msg *xmsg = NULL;
-+ struct peci_xfer_msg uxmsg;
-+ enum peci_cmd cmd;
-+ u8 *msg = NULL;
-+ uint msg_len;
-+ int ret;
-+
-+ cmd = _IOC_NR(iocmd);
-+ msg_len = _IOC_SIZE(iocmd);
-+
-+ switch (cmd) {
-+ case PECI_CMD_XFER:
-+ if (msg_len != sizeof(struct peci_xfer_msg)) {
-+ ret = -EFAULT;
-+ break;
-+ }
-+
-+ if (copy_from_user(&uxmsg, umsg, msg_len)) {
-+ ret = -EFAULT;
-+ break;
-+ }
-+
-+ xmsg = peci_get_xfer_msg(uxmsg.tx_len, uxmsg.rx_len);
-+ if (IS_ERR(xmsg)) {
-+ ret = PTR_ERR(xmsg);
-+ break;
-+ }
-+
-+ if (uxmsg.tx_len &&
-+ copy_from_user(xmsg->tx_buf, uxmsg.tx_buf, uxmsg.tx_len)) {
-+ ret = -EFAULT;
-+ break;
-+ }
-+
-+ xmsg->addr = uxmsg.addr;
-+ xmsg->tx_len = uxmsg.tx_len;
-+ xmsg->rx_len = uxmsg.rx_len;
-+
-+ ret = peci_command(peci_dev->adapter, cmd, xmsg);
-+ if (!ret && xmsg->rx_len &&
-+ copy_to_user(uxmsg.rx_buf, xmsg->rx_buf, xmsg->rx_len))
-+ ret = -EFAULT;
-+
-+ break;
-+
-+ default:
-+ msg = memdup_user(umsg, msg_len);
-+ if (IS_ERR(msg)) {
-+ ret = PTR_ERR(msg);
-+ break;
-+ }
-+
-+ ret = peci_command(peci_dev->adapter, cmd, msg);
-+ if ((!ret || ret == -ETIMEDOUT) &&
-+ copy_to_user(umsg, msg, msg_len))
-+ ret = -EFAULT;
-+
-+ break;
-+ }
-+
-+ peci_put_xfer_msg(xmsg);
-+ kfree(msg);
-+
-+ return (long)ret;
-+}
-+
-+static int peci_dev_open(struct inode *inode, struct file *file)
-+{
-+ struct peci_adapter *adapter;
-+ struct peci_dev *peci_dev;
-+
-+ peci_dev = peci_dev_get_by_minor(iminor(inode));
-+ if (!peci_dev)
-+ return -ENODEV;
-+
-+ adapter = peci_get_adapter(peci_dev->adapter->nr);
-+ if (!adapter)
-+ return -ENODEV;
-+
-+ file->private_data = peci_dev;
-+
-+ return 0;
-+}
-+
-+static int peci_dev_release(struct inode *inode, struct file *file)
-+{
-+ struct peci_dev *peci_dev = file->private_data;
-+
-+ peci_put_adapter(peci_dev->adapter);
-+ file->private_data = NULL;
-+
-+ return 0;
-+}
-+
-+static const struct file_operations peci_dev_fops = {
-+ .owner = THIS_MODULE,
-+ .unlocked_ioctl = peci_dev_ioctl,
-+ .open = peci_dev_open,
-+ .release = peci_dev_release,
-+ .llseek = no_llseek,
-+};
-+
-+static struct class *peci_dev_class;
-+
-+static int peci_dev_attach_adapter(struct device *dev, void *dummy)
-+{
-+ struct peci_adapter *adapter;
-+ struct peci_dev *peci_dev;
-+ dev_t devt;
-+ int ret;
-+
-+ if (dev->type != &peci_adapter_type)
-+ return 0;
-+
-+ adapter = to_peci_adapter(dev);
-+ peci_dev = peci_dev_alloc(adapter);
-+ if (IS_ERR(peci_dev))
-+ return PTR_ERR(peci_dev);
-+
-+ cdev_init(&peci_dev->cdev, &peci_dev_fops);
-+ peci_dev->cdev.owner = THIS_MODULE;
-+ devt = MKDEV(MAJOR(peci_devt), adapter->nr);
-+
-+ ret = cdev_add(&peci_dev->cdev, devt, 1);
-+ if (ret)
-+ goto err_put_dev;
-+
-+ /* register this peci device with the driver core */
-+ peci_dev->dev = device_create(peci_dev_class, &adapter->dev, devt, NULL,
-+ "peci-%d", adapter->nr);
-+ if (IS_ERR(peci_dev->dev)) {
-+ ret = PTR_ERR(peci_dev->dev);
-+ goto err_del_cdev;
-+ }
-+
-+ pr_info("peci-dev: adapter [%s] registered as minor %d\n",
-+ adapter->name, adapter->nr);
-+
-+ return 0;
-+
-+err_del_cdev:
-+ cdev_del(&peci_dev->cdev);
-+err_put_dev:
-+ peci_dev_put(peci_dev);
-+
-+ return ret;
-+}
-+
-+static int peci_dev_detach_adapter(struct device *dev, void *dummy)
-+{
-+ struct peci_adapter *adapter;
-+ struct peci_dev *peci_dev;
-+ dev_t devt;
-+
-+ if (dev->type != &peci_adapter_type)
-+ return 0;
-+
-+ adapter = to_peci_adapter(dev);
-+ peci_dev = peci_dev_get_by_minor(adapter->nr);
-+ if (!peci_dev)
-+ return 0;
-+
-+ cdev_del(&peci_dev->cdev);
-+ devt = peci_dev->dev->devt;
-+ peci_dev_put(peci_dev);
-+ device_destroy(peci_dev_class, devt);
-+
-+ pr_info("peci-dev: adapter [%s] unregistered\n", adapter->name);
-+
-+ return 0;
-+}
-+
-+static int peci_dev_notifier_call(struct notifier_block *nb, ulong action,
-+ void *data)
-+{
-+ struct device *dev = data;
-+
-+ switch (action) {
-+ case BUS_NOTIFY_ADD_DEVICE:
-+ return peci_dev_attach_adapter(dev, NULL);
-+ case BUS_NOTIFY_DEL_DEVICE:
-+ return peci_dev_detach_adapter(dev, NULL);
-+ }
-+
-+ return 0;
-+}
-+
-+static struct notifier_block peci_dev_notifier = {
-+ .notifier_call = peci_dev_notifier_call,
-+};
-+
-+static int __init peci_dev_init(void)
-+{
-+ int ret;
-+
-+ printk(KERN_INFO "peci /dev entries driver\n");
-+
-+ ret = alloc_chrdev_region(&peci_devt, 0, PECI_MINORS, "peci");
-+ if (ret < 0) {
-+ pr_err("peci: Failed to allocate chr dev region!\n");
-+ bus_unregister(&peci_bus_type);
-+ goto err;
-+ }
-+
-+ peci_dev_class = class_create(THIS_MODULE, "peci-dev");
-+ if (IS_ERR(peci_dev_class)) {
-+ ret = PTR_ERR(peci_dev_class);
-+ goto err_unreg_chrdev;
-+ }
-+ peci_dev_class->dev_groups = peci_dev_groups;
-+
-+ /* Keep track of adapters which will be added or removed later */
-+ ret = bus_register_notifier(&peci_bus_type, &peci_dev_notifier);
-+ if (ret)
-+ goto err_destroy_class;
-+
-+ /* Bind to already existing adapters right away */
-+ peci_for_each_dev(NULL, peci_dev_attach_adapter);
-+
-+ return 0;
-+
-+err_destroy_class:
-+ class_destroy(peci_dev_class);
-+err_unreg_chrdev:
-+ unregister_chrdev_region(peci_devt, PECI_MINORS);
-+err:
-+ printk(KERN_ERR "%s: Driver Initialisation failed\n", __FILE__);
-+
-+ return ret;
-+}
-+
-+static void __exit peci_dev_exit(void)
-+{
-+ bus_unregister_notifier(&peci_bus_type, &peci_dev_notifier);
-+ peci_for_each_dev(NULL, peci_dev_detach_adapter);
-+ class_destroy(peci_dev_class);
-+ unregister_chrdev_region(peci_devt, PECI_MINORS);
-+}
-+
-+module_init(peci_dev_init);
-+module_exit(peci_dev_exit);
-+
-+MODULE_AUTHOR("Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>");
-+MODULE_DESCRIPTION("PECI /dev entries driver");
-+MODULE_LICENSE("GPL v2");
-diff --git a/drivers/peci/peci-npcm.c b/drivers/peci/peci-npcm.c
-deleted file mode 100644
-index f632365..0000000
---- a/drivers/peci/peci-npcm.c
-+++ /dev/null
-@@ -1,410 +0,0 @@
--// SPDX-License-Identifier: GPL-2.0
--// Copyright (c) 2019 Nuvoton Technology corporation.
--
--#include <linux/bitfield.h>
--#include <linux/clk.h>
--#include <linux/interrupt.h>
--#include <linux/jiffies.h>
--#include <linux/module.h>
--#include <linux/of.h>
--#include <linux/peci.h>
--#include <linux/platform_device.h>
--#include <linux/regmap.h>
--#include <linux/mfd/syscon.h>
--#include <linux/reset.h>
--
--/* NPCM7xx GCR module */
--#define NPCM7XX_INTCR3_OFFSET 0x9C
--#define NPCM7XX_INTCR3_PECIVSEL BIT(19)
--
--/* NPCM PECI Registers */
--#define NPCM_PECI_CTL_STS 0x00
--#define NPCM_PECI_RD_LENGTH 0x04
--#define NPCM_PECI_ADDR 0x08
--#define NPCM_PECI_CMD 0x0C
--#define NPCM_PECI_CTL2 0x10
--#define NPCM_PECI_WR_LENGTH 0x1C
--#define NPCM_PECI_PDDR 0x2C
--#define NPCM_PECI_DAT_INOUT(n) (0x100 + ((n) * 4))
--
--#define NPCM_PECI_MAX_REG 0x200
--
--/* NPCM_PECI_CTL_STS - 0x00 : Control Register */
--#define NPCM_PECI_CTRL_DONE_INT_EN BIT(6)
--#define NPCM_PECI_CTRL_ABRT_ERR BIT(4)
--#define NPCM_PECI_CTRL_CRC_ERR BIT(3)
--#define NPCM_PECI_CTRL_DONE BIT(1)
--#define NPCM_PECI_CTRL_START_BUSY BIT(0)
--
--/* NPCM_PECI_RD_LENGTH - 0x04 : Command Register */
--#define NPCM_PECI_RD_LEN_MASK GENMASK(6, 0)
--
--/* NPCM_PECI_CMD - 0x10 : Command Register */
--#define NPCM_PECI_CTL2_MASK GENMASK(7, 6)
--
--/* NPCM_PECI_WR_LENGTH - 0x1C : Command Register */
--#define NPCM_PECI_WR_LEN_MASK GENMASK(6, 0)
--
--/* NPCM_PECI_PDDR - 0x2C : Command Register */
--#define NPCM_PECI_PDDR_MASK GENMASK(4, 0)
--
--#define NPCM_PECI_INT_MASK (NPCM_PECI_CTRL_ABRT_ERR | \
-- NPCM_PECI_CTRL_CRC_ERR | \
-- NPCM_PECI_CTRL_DONE)
--
--#define NPCM_PECI_IDLE_CHECK_TIMEOUT_USEC 50000
--#define NPCM_PECI_IDLE_CHECK_INTERVAL_USEC 10000
--#define NPCM_PECI_CMD_TIMEOUT_MS_DEFAULT 1000
--#define NPCM_PECI_CMD_TIMEOUT_MS_MAX 60000
--#define NPCM_PECI_HOST_NEG_BIT_RATE_MAX 31
--#define NPCM_PECI_HOST_NEG_BIT_RATE_MIN 7
--#define NPCM_PECI_HOST_NEG_BIT_RATE_DEFAULT 15
--#define NPCM_PECI_PULL_DOWN_DEFAULT 0
--#define NPCM_PECI_PULL_DOWN_MAX 2
--
--struct npcm_peci {
-- u32 cmd_timeout_ms;
-- u32 host_bit_rate;
-- struct completion xfer_complete;
-- struct regmap *gcr_regmap;
-- struct peci_adapter *adapter;
-- struct regmap *regmap;
-- u32 status;
-- spinlock_t lock; /* to sync completion status handling */
-- struct device *dev;
-- struct clk *clk;
-- int irq;
--};
--
--static int npcm_peci_xfer_native(struct npcm_peci *priv,
-- struct peci_xfer_msg *msg)
--{
-- long err, timeout = msecs_to_jiffies(priv->cmd_timeout_ms);
-- unsigned long flags;
-- unsigned int msg_rd;
-- u32 cmd_sts;
-- int i, rc;
--
-- /* Check command sts and bus idle state */
-- rc = regmap_read_poll_timeout(priv->regmap, NPCM_PECI_CTL_STS, cmd_sts,
-- !(cmd_sts & NPCM_PECI_CTRL_START_BUSY),
-- NPCM_PECI_IDLE_CHECK_INTERVAL_USEC,
-- NPCM_PECI_IDLE_CHECK_TIMEOUT_USEC);
-- if (rc)
-- return rc; /* -ETIMEDOUT */
--
-- spin_lock_irqsave(&priv->lock, flags);
-- reinit_completion(&priv->xfer_complete);
--
-- regmap_write(priv->regmap, NPCM_PECI_ADDR, msg->addr);
-- regmap_write(priv->regmap, NPCM_PECI_RD_LENGTH,
-- NPCM_PECI_WR_LEN_MASK & msg->rx_len);
-- regmap_write(priv->regmap, NPCM_PECI_WR_LENGTH,
-- NPCM_PECI_WR_LEN_MASK & msg->tx_len);
--
-- if (msg->tx_len) {
-- regmap_write(priv->regmap, NPCM_PECI_CMD, msg->tx_buf[0]);
--
-- for (i = 0; i < (msg->tx_len - 1); i++)
-- regmap_write(priv->regmap, NPCM_PECI_DAT_INOUT(i),
-- msg->tx_buf[i + 1]);
-- }
--
-- priv->status = 0;
-- regmap_update_bits(priv->regmap, NPCM_PECI_CTL_STS,
-- NPCM_PECI_CTRL_START_BUSY,
-- NPCM_PECI_CTRL_START_BUSY);
--
-- spin_unlock_irqrestore(&priv->lock, flags);
--
-- err = wait_for_completion_interruptible_timeout(&priv->xfer_complete,
-- timeout);
--
-- spin_lock_irqsave(&priv->lock, flags);
--
-- regmap_write(priv->regmap, NPCM_PECI_CMD, 0);
--
-- if (err <= 0 || priv->status != NPCM_PECI_CTRL_DONE) {
-- if (err < 0) { /* -ERESTARTSYS */
-- rc = (int)err;
-- goto err_irqrestore;
-- } else if (err == 0) {
-- dev_dbg(priv->dev, "Timeout waiting for a response!\n");
-- rc = -ETIMEDOUT;
-- goto err_irqrestore;
-- }
--
-- dev_dbg(priv->dev, "No valid response!\n");
-- rc = -EIO;
-- goto err_irqrestore;
-- }
--
-- for (i = 0; i < msg->rx_len; i++) {
-- regmap_read(priv->regmap, NPCM_PECI_DAT_INOUT(i), &msg_rd);
-- msg->rx_buf[i] = (u8)msg_rd;
-- }
--
--err_irqrestore:
-- spin_unlock_irqrestore(&priv->lock, flags);
-- return rc;
--}
--
--static irqreturn_t npcm_peci_irq_handler(int irq, void *arg)
--{
-- struct npcm_peci *priv = arg;
-- u32 status_ack = 0;
-- u32 status;
--
-- spin_lock(&priv->lock);
-- regmap_read(priv->regmap, NPCM_PECI_CTL_STS, &status);
-- priv->status |= (status & NPCM_PECI_INT_MASK);
--
-- if (status & NPCM_PECI_CTRL_CRC_ERR) {
-- dev_dbg(priv->dev, "PECI_INT_W_FCS_BAD\n");
-- status_ack |= NPCM_PECI_CTRL_CRC_ERR;
-- }
--
-- if (status & NPCM_PECI_CTRL_ABRT_ERR) {
-- dev_dbg(priv->dev, "NPCM_PECI_CTRL_ABRT_ERR\n");
-- status_ack |= NPCM_PECI_CTRL_ABRT_ERR;
-- }
--
-- /*
-- * All commands should be ended up with a NPCM_PECI_CTRL_DONE
-- * bit set even in an error case.
-- */
-- if (status & NPCM_PECI_CTRL_DONE) {
-- dev_dbg(priv->dev, "NPCM_PECI_CTRL_DONE\n");
-- status_ack |= NPCM_PECI_CTRL_DONE;
-- complete(&priv->xfer_complete);
-- }
--
-- regmap_write_bits(priv->regmap, NPCM_PECI_CTL_STS,
-- NPCM_PECI_INT_MASK, status_ack);
--
-- spin_unlock(&priv->lock);
-- return IRQ_HANDLED;
--}
--
--static int npcm_peci_init_ctrl(struct npcm_peci *priv)
--{
-- u32 cmd_sts, host_neg_bit_rate = 0, pull_down = 0;
-- int ret;
-- bool volt;
--
-- priv->clk = devm_clk_get(priv->dev, NULL);
-- if (IS_ERR(priv->clk)) {
-- dev_err(priv->dev, "Failed to get clk source.\n");
-- return PTR_ERR(priv->clk);
-- }
--
-- ret = clk_prepare_enable(priv->clk);
-- if (ret) {
-- dev_err(priv->dev, "Failed to enable clock.\n");
-- return ret;
-- }
--
-- ret = of_property_read_u32(priv->dev->of_node, "cmd-timeout-ms",
-- &priv->cmd_timeout_ms);
-- if (ret || priv->cmd_timeout_ms > NPCM_PECI_CMD_TIMEOUT_MS_MAX ||
-- priv->cmd_timeout_ms == 0) {
-- if (ret)
-- dev_warn(priv->dev,
-- "cmd-timeout-ms not found, use default : %u\n",
-- NPCM_PECI_CMD_TIMEOUT_MS_DEFAULT);
-- else
-- dev_warn(priv->dev,
-- "Invalid cmd-timeout-ms : %u. Use default : %u\n",
-- priv->cmd_timeout_ms,
-- NPCM_PECI_CMD_TIMEOUT_MS_DEFAULT);
--
-- priv->cmd_timeout_ms = NPCM_PECI_CMD_TIMEOUT_MS_DEFAULT;
-- }
--
-- if (of_device_is_compatible(priv->dev->of_node,
-- "nuvoton,npcm750-peci")) {
-- priv->gcr_regmap = syscon_regmap_lookup_by_compatible
-- ("nuvoton,npcm750-gcr");
-- if (!IS_ERR(priv->gcr_regmap)) {
-- volt = of_property_read_bool(priv->dev->of_node,
-- "high-volt-range");
-- if (volt)
-- regmap_update_bits(priv->gcr_regmap,
-- NPCM7XX_INTCR3_OFFSET,
-- NPCM7XX_INTCR3_PECIVSEL,
-- NPCM7XX_INTCR3_PECIVSEL);
-- else
-- regmap_update_bits(priv->gcr_regmap,
-- NPCM7XX_INTCR3_OFFSET,
-- NPCM7XX_INTCR3_PECIVSEL, 0);
-- }
-- }
--
-- ret = of_property_read_u32(priv->dev->of_node, "pull-down",
-- &pull_down);
-- if (ret || pull_down > NPCM_PECI_PULL_DOWN_MAX) {
-- if (ret)
-- dev_warn(priv->dev,
-- "pull-down not found, use default : %u\n",
-- NPCM_PECI_PULL_DOWN_DEFAULT);
-- else
-- dev_warn(priv->dev,
-- "Invalid pull-down : %u. Use default : %u\n",
-- pull_down,
-- NPCM_PECI_PULL_DOWN_DEFAULT);
-- pull_down = NPCM_PECI_PULL_DOWN_DEFAULT;
-- }
--
-- regmap_update_bits(priv->regmap, NPCM_PECI_CTL2, NPCM_PECI_CTL2_MASK,
-- pull_down << 6);
--
-- ret = of_property_read_u32(priv->dev->of_node, "host-neg-bit-rate",
-- &host_neg_bit_rate);
-- if (ret || host_neg_bit_rate > NPCM_PECI_HOST_NEG_BIT_RATE_MAX ||
-- host_neg_bit_rate < NPCM_PECI_HOST_NEG_BIT_RATE_MIN) {
-- if (ret)
-- dev_warn(priv->dev,
-- "host-neg-bit-rate not found, use default : %u\n",
-- NPCM_PECI_HOST_NEG_BIT_RATE_DEFAULT);
-- else
-- dev_warn(priv->dev,
-- "Invalid host-neg-bit-rate : %u. Use default : %u\n",
-- host_neg_bit_rate,
-- NPCM_PECI_HOST_NEG_BIT_RATE_DEFAULT);
-- host_neg_bit_rate = NPCM_PECI_HOST_NEG_BIT_RATE_DEFAULT;
-- }
--
-- regmap_update_bits(priv->regmap, NPCM_PECI_PDDR, NPCM_PECI_PDDR_MASK,
-- host_neg_bit_rate);
--
-- priv->host_bit_rate = clk_get_rate(priv->clk) /
-- (4 * (host_neg_bit_rate + 1));
--
-- ret = regmap_read_poll_timeout(priv->regmap, NPCM_PECI_CTL_STS, cmd_sts,
-- !(cmd_sts & NPCM_PECI_CTRL_START_BUSY),
-- NPCM_PECI_IDLE_CHECK_INTERVAL_USEC,
-- NPCM_PECI_IDLE_CHECK_TIMEOUT_USEC);
-- if (ret)
-- return ret; /* -ETIMEDOUT */
--
-- /* PECI interrupt enable */
-- regmap_update_bits(priv->regmap, NPCM_PECI_CTL_STS,
-- NPCM_PECI_CTRL_DONE_INT_EN,
-- NPCM_PECI_CTRL_DONE_INT_EN);
--
-- return 0;
--}
--
--static const struct regmap_config npcm_peci_regmap_config = {
-- .reg_bits = 8,
-- .val_bits = 8,
-- .max_register = NPCM_PECI_MAX_REG,
-- .fast_io = true,
--};
--
--static int npcm_peci_xfer(struct peci_adapter *adapter,
-- struct peci_xfer_msg *msg)
--{
-- struct npcm_peci *priv = peci_get_adapdata(adapter);
--
-- return npcm_peci_xfer_native(priv, msg);
--}
--
--static int npcm_peci_probe(struct platform_device *pdev)
--{
-- struct peci_adapter *adapter;
-- struct npcm_peci *priv;
-- struct resource *res;
-- void __iomem *base;
-- int ret;
--
-- adapter = peci_alloc_adapter(&pdev->dev, sizeof(*priv));
-- if (!adapter)
-- return -ENOMEM;
--
-- priv = peci_get_adapdata(adapter);
-- priv->adapter = adapter;
-- priv->dev = &pdev->dev;
-- dev_set_drvdata(&pdev->dev, priv);
--
-- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-- base = devm_ioremap_resource(&pdev->dev, res);
-- if (IS_ERR(base)) {
-- ret = PTR_ERR(base);
-- goto err_put_adapter_dev;
-- }
--
-- priv->regmap = devm_regmap_init_mmio(&pdev->dev, base,
-- &npcm_peci_regmap_config);
-- if (IS_ERR(priv->regmap)) {
-- ret = PTR_ERR(priv->regmap);
-- goto err_put_adapter_dev;
-- }
--
-- priv->irq = platform_get_irq(pdev, 0);
-- if (!priv->irq) {
-- ret = -ENODEV;
-- goto err_put_adapter_dev;
-- }
--
-- ret = devm_request_irq(&pdev->dev, priv->irq, npcm_peci_irq_handler,
-- 0, "peci-npcm-irq", priv);
-- if (ret)
-- goto err_put_adapter_dev;
--
-- init_completion(&priv->xfer_complete);
-- spin_lock_init(&priv->lock);
--
-- priv->adapter->owner = THIS_MODULE;
-- priv->adapter->dev.of_node = of_node_get(dev_of_node(priv->dev));
-- strlcpy(priv->adapter->name, pdev->name, sizeof(priv->adapter->name));
-- priv->adapter->xfer = npcm_peci_xfer;
--
-- ret = npcm_peci_init_ctrl(priv);
-- if (ret)
-- goto err_put_adapter_dev;
--
-- ret = peci_add_adapter(priv->adapter);
-- if (ret)
-- goto err_put_adapter_dev;
--
-- dev_info(&pdev->dev, "peci bus %d registered, host negotiation bit rate %dHz",
-- priv->adapter->nr, priv->host_bit_rate);
--
-- return 0;
--
--err_put_adapter_dev:
-- put_device(&adapter->dev);
-- return ret;
--}
--
--static int npcm_peci_remove(struct platform_device *pdev)
--{
-- struct npcm_peci *priv = dev_get_drvdata(&pdev->dev);
--
-- clk_disable_unprepare(priv->clk);
-- peci_del_adapter(priv->adapter);
-- of_node_put(priv->adapter->dev.of_node);
--
-- return 0;
--}
--
--static const struct of_device_id npcm_peci_of_table[] = {
-- { .compatible = "nuvoton,npcm750-peci", },
-- { }
--};
--MODULE_DEVICE_TABLE(of, npcm_peci_of_table);
--
--static struct platform_driver npcm_peci_driver = {
-- .probe = npcm_peci_probe,
-- .remove = npcm_peci_remove,
-- .driver = {
-- .name = "peci-npcm",
-- .of_match_table = of_match_ptr(npcm_peci_of_table),
-- },
--};
--module_platform_driver(npcm_peci_driver);
--
--MODULE_AUTHOR("Tomer Maimon <tomer.maimon@nuvoton.com>");
--MODULE_DESCRIPTION("NPCM Platform Environment Control Interface (PECI) driver");
--MODULE_LICENSE("GPL v2");
-diff --git a/include/linux/mfd/intel-peci-client.h b/include/linux/mfd/intel-peci-client.h
-index 8f6d823..9854303 100644
---- a/include/linux/mfd/intel-peci-client.h
-+++ b/include/linux/mfd/intel-peci-client.h
-@@ -1,5 +1,5 @@
- /* SPDX-License-Identifier: GPL-2.0 */
--/* Copyright (c) 2018 Intel Corporation */
-+/* Copyright (c) 2018-2019 Intel Corporation */
-
- #ifndef __LINUX_MFD_INTEL_PECI_CLIENT_H
- #define __LINUX_MFD_INTEL_PECI_CLIENT_H
-@@ -9,14 +9,15 @@
- #if IS_ENABLED(CONFIG_X86)
- #include <asm/intel-family.h>
- #else
--/**
-+/*
- * Architectures other than x86 cannot include the header file so define these
- * at here. These are needed for detecting type of client x86 CPUs behind a PECI
- * connection.
- */
--#define INTEL_FAM6_HASWELL_X 0x3F
--#define INTEL_FAM6_BROADWELL_X 0x4F
--#define INTEL_FAM6_SKYLAKE_X 0x55
-+#define INTEL_FAM6_HASWELL_X 0x3F
-+#define INTEL_FAM6_BROADWELL_X 0x4F
-+#define INTEL_FAM6_SKYLAKE_X 0x55
-+#define INTEL_FAM6_SKYLAKE_XD 0x56
- #endif
-
- #define CORE_MAX_ON_HSX 18 /* Max number of cores on Haswell */
-@@ -31,6 +32,10 @@
- #define CHAN_RANK_MAX_ON_SKX 6 /* Max number of channel ranks on Skylake */
- #define DIMM_IDX_MAX_ON_SKX 2 /* Max DIMM index per channel on Skylake */
-
-+#define CORE_MAX_ON_SKXD 16 /* Max number of cores on Skylake D */
-+#define CHAN_RANK_MAX_ON_SKXD 2 /* Max number of channel ranks on Skylake D */
-+#define DIMM_IDX_MAX_ON_SKXD 2 /* Max DIMM index per channel on Skylake D */
-+
- #define CORE_NUMS_MAX CORE_MAX_ON_SKX
- #define CHAN_RANK_MAX CHAN_RANK_MAX_ON_HSX
- #define DIMM_IDX_MAX DIMM_IDX_MAX_ON_HSX
-@@ -58,7 +63,6 @@ struct cpu_gen_info {
- /**
- * struct peci_client_manager - PECI client manager information
- * @client; pointer to the PECI client
-- * @dev: pointer to the struct device
- * @name: PECI client manager name
- * @gen_info: CPU generation info of the detected CPU
- *
-@@ -67,7 +71,6 @@ struct cpu_gen_info {
- */
- struct peci_client_manager {
- struct peci_client *client;
-- struct device *dev;
- char name[PECI_NAME_SIZE];
- const struct cpu_gen_info *gen_info;
- };
-@@ -93,18 +96,22 @@ peci_client_read_package_config(struct peci_client_manager *priv,
- u8 index, u16 param, u8 *data)
- {
- struct peci_rd_pkg_cfg_msg msg;
-- int rc;
-+ int ret;
-
- msg.addr = priv->client->addr;
- msg.index = index;
- msg.param = param;
- msg.rx_len = 4;
-
-- rc = peci_command(priv->client->adapter, PECI_CMD_RD_PKG_CFG, &msg);
-- if (!rc)
-- memcpy(data, msg.pkg_config, 4);
-+ ret = peci_command(priv->client->adapter, PECI_CMD_RD_PKG_CFG, &msg);
-+ if (msg.cc != PECI_DEV_CC_SUCCESS)
-+ ret = -EAGAIN;
-+ if (ret)
-+ return ret;
-+
-+ memcpy(data, msg.pkg_config, 4);
-
-- return rc;
-+ return 0;
- }
-
- #endif /* __LINUX_MFD_INTEL_PECI_CLIENT_H */
-diff --git a/include/linux/peci.h b/include/linux/peci.h
-index d0e47d4..6fc424d 100644
---- a/include/linux/peci.h
-+++ b/include/linux/peci.h
-@@ -1,19 +1,18 @@
- /* SPDX-License-Identifier: GPL-2.0 */
--/* Copyright (c) 2018 Intel Corporation */
-+/* Copyright (c) 2018-2019 Intel Corporation */
-
- #ifndef __LINUX_PECI_H
- #define __LINUX_PECI_H
-
--#include <linux/cdev.h>
- #include <linux/device.h>
-+#include <linux/mutex.h>
- #include <linux/peci-ioctl.h>
--#include <linux/rtmutex.h>
-
- #define PECI_NAME_SIZE 32
-
- struct peci_board_info {
- char type[PECI_NAME_SIZE];
-- unsigned short addr; /* CPU client address */
-+ u8 addr; /* CPU client address */
- struct device_node *of_node;
- };
-
-@@ -22,29 +21,29 @@ struct peci_board_info {
- * @owner: owner module of the PECI adpater
- * @bus_lock: mutex for exclusion of multiple callers
- * @dev: device interface to this driver
-- * @cdev: character device object to create character device
- * @nr: the bus number to map
- * @name: name of the adapter
- * @userspace_clients_lock: mutex for exclusion of clients handling
- * @userspace_clients: list of registered clients
- * @xfer: low-level transfer function pointer of the adapter
- * @cmd_mask: mask for supportable PECI commands
-+ * @use_dma: flag for indicating that adapter uses DMA
- *
- * Each PECI adapter can communicate with one or more PECI client children.
- * These make a small bus, sharing a single wired PECI connection.
- */
- struct peci_adapter {
- struct module *owner;
-- struct rt_mutex bus_lock;
-+ struct mutex bus_lock;
- struct device dev;
-- struct cdev cdev;
- int nr;
- char name[PECI_NAME_SIZE];
- struct mutex userspace_clients_lock; /* clients list mutex */
- struct list_head userspace_clients;
- int (*xfer)(struct peci_adapter *adapter,
- struct peci_xfer_msg *msg);
-- uint cmd_mask;
-+ u32 cmd_mask;
-+ bool use_dma;
- };
-
- static inline struct peci_adapter *to_peci_adapter(void *d)
-@@ -87,8 +86,8 @@ static inline struct peci_client *to_peci_client(void *d)
- }
-
- struct peci_device_id {
-- char name[PECI_NAME_SIZE];
-- unsigned long driver_data; /* Data private to the driver */
-+ char name[PECI_NAME_SIZE];
-+ ulong driver_data; /* Data private to the driver */
- };
-
- /**
-@@ -129,13 +128,22 @@ static inline struct peci_driver *to_peci_driver(void *d)
- /* use a define to avoid include chaining to get THIS_MODULE */
- #define peci_add_driver(driver) peci_register_driver(THIS_MODULE, driver)
-
-+extern struct bus_type peci_bus_type;
-+extern struct device_type peci_adapter_type;
-+extern struct device_type peci_client_type;
-+
- int peci_register_driver(struct module *owner, struct peci_driver *drv);
- void peci_del_driver(struct peci_driver *driver);
- struct peci_client *peci_verify_client(struct device *dev);
--struct peci_adapter *peci_alloc_adapter(struct device *dev, unsigned int size);
-+struct peci_adapter *peci_alloc_adapter(struct device *dev, uint size);
-+struct peci_adapter *peci_get_adapter(int nr);
-+void peci_put_adapter(struct peci_adapter *adapter);
- int peci_add_adapter(struct peci_adapter *adapter);
- void peci_del_adapter(struct peci_adapter *adapter);
- struct peci_adapter *peci_verify_adapter(struct device *dev);
-+int peci_for_each_dev(void *data, int (*fn)(struct device *, void *));
-+struct peci_xfer_msg *peci_get_xfer_msg(u8 tx_len, u8 rx_len);
-+void peci_put_xfer_msg(struct peci_xfer_msg *msg);
- int peci_command(struct peci_adapter *adpater, enum peci_cmd cmd, void *vmsg);
- int peci_get_cpu_id(struct peci_adapter *adapter, u8 addr, u32 *cpu_id);
-
-diff --git a/include/uapi/linux/peci-ioctl.h b/include/uapi/linux/peci-ioctl.h
-index a6dae71..253fb42 100644
---- a/include/uapi/linux/peci-ioctl.h
-+++ b/include/uapi/linux/peci-ioctl.h
-@@ -1,5 +1,5 @@
- /* SPDX-License-Identifier: GPL-2.0 */
--/* Copyright (c) 2018 Intel Corporation */
-+/* Copyright (c) 2018-2019 Intel Corporation */
-
- #ifndef __PECI_IOCTL_H
- #define __PECI_IOCTL_H
-@@ -7,136 +7,35 @@
- #include <linux/ioctl.h>
- #include <linux/types.h>
-
--/* Base Address of 48d */
--#define PECI_BASE_ADDR 0x30 /* The PECI client's default address of 0x30 */
--#define PECI_OFFSET_MAX 8 /* Max numver of CPU clients */
--
--/* PCI Access */
--#define MAX_PCI_READ_LEN 24 /* Number of bytes of the PCI Space read */
--
--#define PCI_BUS0_CPU0 0x00
--#define PCI_BUS0_CPU1 0x80
--#define PCI_CPUBUSNO_BUS 0x00
--#define PCI_CPUBUSNO_DEV 0x08
--#define PCI_CPUBUSNO_FUNC 0x02
--#define PCI_CPUBUSNO 0xcc
--#define PCI_CPUBUSNO_1 0xd0
--#define PCI_CPUBUSNO_VALID 0xd4
--
--/* Package Identifier Read Parameter Value */
--#define PKG_ID_CPU_ID 0x0000 /* CPUID Info */
--#define PKG_ID_PLATFORM_ID 0x0001 /* Platform ID */
--#define PKG_ID_UNCORE_ID 0x0002 /* Uncore Device ID */
--#define PKG_ID_MAX_THREAD_ID 0x0003 /* Max Thread ID */
--#define PKG_ID_MICROCODE_REV 0x0004 /* CPU Microcode Update Revision */
--#define PKG_ID_MACHINE_CHECK_STATUS 0x0005 /* Machine Check Status */
--
--/* RdPkgConfig Index */
--#define MBX_INDEX_CPU_ID 0 /* Package Identifier Read */
--#define MBX_INDEX_VR_DEBUG 1 /* VR Debug */
--#define MBX_INDEX_PKG_TEMP_READ 2 /* Package Temperature Read */
--#define MBX_INDEX_ENERGY_COUNTER 3 /* Energy counter */
--#define MBX_INDEX_ENERGY_STATUS 4 /* DDR Energy Status */
--#define MBX_INDEX_WAKE_MODE_BIT 5 /* "Wake on PECI" Mode bit */
--#define MBX_INDEX_EPI 6 /* Efficient Performance Indication */
--#define MBX_INDEX_PKG_RAPL_PERF 8 /* Pkg RAPL Performance Status Read */
--#define MBX_INDEX_PER_CORE_DTS_TEMP 9 /* Per Core DTS Temperature Read */
--#define MBX_INDEX_DTS_MARGIN 10 /* DTS thermal margin */
--#define MBX_INDEX_SKT_PWR_THRTL_DUR 11 /* Socket Power Throttled Duration */
--#define MBX_INDEX_CFG_TDP_CONTROL 12 /* TDP Config Control */
--#define MBX_INDEX_CFG_TDP_LEVELS 13 /* TDP Config Levels */
--#define MBX_INDEX_DDR_DIMM_TEMP 14 /* DDR DIMM Temperature */
--#define MBX_INDEX_CFG_ICCMAX 15 /* Configurable ICCMAX */
--#define MBX_INDEX_TEMP_TARGET 16 /* Temperature Target Read */
--#define MBX_INDEX_CURR_CFG_LIMIT 17 /* Current Config Limit */
--#define MBX_INDEX_DIMM_TEMP_READ 20 /* Package Thermal Status Read */
--#define MBX_INDEX_DRAM_IMC_TMP_READ 22 /* DRAM IMC Temperature Read */
--#define MBX_INDEX_DDR_CH_THERM_STAT 23 /* DDR Channel Thermal Status */
--#define MBX_INDEX_PKG_POWER_LIMIT1 26 /* Package Power Limit1 */
--#define MBX_INDEX_PKG_POWER_LIMIT2 27 /* Package Power Limit2 */
--#define MBX_INDEX_TDP 28 /* Thermal design power minimum */
--#define MBX_INDEX_TDP_HIGH 29 /* Thermal design power maximum */
--#define MBX_INDEX_TDP_UNITS 30 /* Units for power/energy registers */
--#define MBX_INDEX_RUN_TIME 31 /* Accumulated Run Time */
--#define MBX_INDEX_CONSTRAINED_TIME 32 /* Thermally Constrained Time Read */
--#define MBX_INDEX_TURBO_RATIO 33 /* Turbo Activation Ratio */
--#define MBX_INDEX_DDR_RAPL_PL1 34 /* DDR RAPL PL1 */
--#define MBX_INDEX_DDR_PWR_INFO_HIGH 35 /* DRAM Power Info Read (high) */
--#define MBX_INDEX_DDR_PWR_INFO_LOW 36 /* DRAM Power Info Read (low) */
--#define MBX_INDEX_DDR_RAPL_PL2 37 /* DDR RAPL PL2 */
--#define MBX_INDEX_DDR_RAPL_STATUS 38 /* DDR RAPL Performance Status */
--#define MBX_INDEX_DDR_HOT_ABSOLUTE 43 /* DDR Hottest Dimm Absolute Temp */
--#define MBX_INDEX_DDR_HOT_RELATIVE 44 /* DDR Hottest Dimm Relative Temp */
--#define MBX_INDEX_DDR_THROTTLE_TIME 45 /* DDR Throttle Time */
--#define MBX_INDEX_DDR_THERM_STATUS 46 /* DDR Thermal Status */
--#define MBX_INDEX_TIME_AVG_TEMP 47 /* Package time-averaged temperature */
--#define MBX_INDEX_TURBO_RATIO_LIMIT 49 /* Turbo Ratio Limit Read */
--#define MBX_INDEX_HWP_AUTO_OOB 53 /* HWP Autonomous Out-of-band */
--#define MBX_INDEX_DDR_WARM_BUDGET 55 /* DDR Warm Power Budget */
--#define MBX_INDEX_DDR_HOT_BUDGET 56 /* DDR Hot Power Budget */
--#define MBX_INDEX_PKG_PSYS_PWR_LIM3 57 /* Package/Psys Power Limit3 */
--#define MBX_INDEX_PKG_PSYS_PWR_LIM1 58 /* Package/Psys Power Limit1 */
--#define MBX_INDEX_PKG_PSYS_PWR_LIM2 59 /* Package/Psys Power Limit2 */
--#define MBX_INDEX_PKG_PSYS_PWR_LIM4 60 /* Package/Psys Power Limit4 */
--#define MBX_INDEX_PERF_LIMIT_REASON 65 /* Performance Limit Reasons */
--
--/* WrPkgConfig Index */
--#define MBX_INDEX_DIMM_AMBIENT 19
--#define MBX_INDEX_DIMM_TEMP 24
-+/* The PECI client's default address of 0x30 */
-+#define PECI_BASE_ADDR 0x30
-+
-+/* Max number of CPU clients */
-+#define PECI_OFFSET_MAX 8
-+
-+/* PECI read/write data buffer size max */
-+#define PECI_BUFFER_SIZE 255
-
- /* Device Specific Completion Code (CC) Definition */
--#define DEV_PECI_CC_SUCCESS 0x40
--#define DEV_PECI_CC_TIMEOUT 0x80
--#define DEV_PECI_CC_OUT_OF_RESOURCE 0x81
--#define DEV_PECI_CC_UNAVAIL_RESOURCE 0x82
--#define DEV_PECI_CC_INVALID_REQ 0x90
-+#define PECI_DEV_CC_SUCCESS 0x40
-+#define PECI_DEV_CC_NEED_RETRY 0x80
-+#define PECI_DEV_CC_OUT_OF_RESOURCE 0x81
-+#define PECI_DEV_CC_UNAVAIL_RESOURCE 0x82
-+#define PECI_DEV_CC_INVALID_REQ 0x90
-+#define PECI_DEV_CC_MCA_ERROR 0x91
-+#define PECI_DEV_CC_CATASTROPHIC_MCA_ERROR 0x93
-+#define PECI_DEV_CC_FATAL_MCA_DETECTED 0x94
-+#define PECI_DEV_CC_PARITY_ERROR_ON_GPSB_OR_PMSB 0x98
-+#define PECI_DEV_CC_PARITY_ERROR_ON_GPSB_OR_PMSB_IERR 0x9B
-+#define PECI_DEV_CC_PARITY_ERROR_ON_GPSB_OR_PMSB_MCA 0x9C
-
- /* Completion Code mask to check retry needs */
--#define DEV_PECI_CC_RETRY_CHECK_MASK 0xf0
--#define DEV_PECI_CC_NEED_RETRY 0x80
-+#define PECI_DEV_CC_RETRY_CHECK_MASK 0xf0
-
- /* Skylake EDS says to retry for 250ms */
--#define DEV_PECI_RETRY_TIME_MS 250
--#define DEV_PECI_RETRY_INTERVAL_USEC 10000
--#define DEV_PECI_RETRY_BIT 0x01
--
--#define GET_TEMP_WR_LEN 1
--#define GET_TEMP_RD_LEN 2
--#define GET_TEMP_PECI_CMD 0x01
--
--#define GET_DIB_WR_LEN 1
--#define GET_DIB_RD_LEN 8
--#define GET_DIB_PECI_CMD 0xf7
--
--#define RDPKGCFG_WRITE_LEN 5
--#define RDPKGCFG_READ_LEN_BASE 1
--#define RDPKGCFG_PECI_CMD 0xa1
--
--#define WRPKGCFG_WRITE_LEN_BASE 6
--#define WRPKGCFG_READ_LEN 1
--#define WRPKGCFG_PECI_CMD 0xa5
--
--#define RDIAMSR_WRITE_LEN 5
--#define RDIAMSR_READ_LEN 9
--#define RDIAMSR_PECI_CMD 0xb1
--
--#define WRIAMSR_PECI_CMD 0xb5
--
--#define RDPCICFG_WRITE_LEN 6
--#define RDPCICFG_READ_LEN 5
--#define RDPCICFG_PECI_CMD 0x61
--
--#define WRPCICFG_PECI_CMD 0x65
--
--#define RDPCICFGLOCAL_WRITE_LEN 5
--#define RDPCICFGLOCAL_READ_LEN_BASE 1
--#define RDPCICFGLOCAL_PECI_CMD 0xe1
--
--#define WRPCICFGLOCAL_WRITE_LEN_BASE 6
--#define WRPCICFGLOCAL_READ_LEN 1
--#define WRPCICFGLOCAL_PECI_CMD 0xe5
--
--#define PECI_BUFFER_SIZE 32
-+#define PECI_DEV_RETRY_TIME_MS 700
-+#define PECI_DEV_RETRY_INTERVAL_USEC 10000
-+#define PECI_DEV_RETRY_BIT 0x01
-
- /**
- * enum peci_cmd - PECI client commands
-@@ -186,11 +85,12 @@ enum peci_cmd {
- * raw PECI transfer
- */
- struct peci_xfer_msg {
-- __u8 addr;
-- __u8 tx_len;
-- __u8 rx_len;
-- __u8 tx_buf[PECI_BUFFER_SIZE];
-- __u8 rx_buf[PECI_BUFFER_SIZE];
-+ __u8 addr;
-+ __u8 tx_len;
-+ __u8 rx_len;
-+ __u8 padding;
-+ __u8 *tx_buf;
-+ __u8 *rx_buf;
- } __attribute__((__packed__));
-
- /**
-@@ -202,7 +102,8 @@ struct peci_xfer_msg {
- * powered-off, etc.
- */
- struct peci_ping_msg {
-- __u8 addr;
-+ __u8 addr;
-+ __u8 padding[3];
- } __attribute__((__packed__));
-
- /**
-@@ -216,8 +117,13 @@ struct peci_ping_msg {
- * command.
- */
- struct peci_get_dib_msg {
-- __u8 addr;
-- __u64 dib;
-+#define PECI_GET_DIB_WR_LEN 1
-+#define PECI_GET_DIB_RD_LEN 8
-+#define PECI_GET_DIB_CMD 0xf7
-+
-+ __u8 addr;
-+ __u8 padding[3];
-+ __u64 dib;
- } __attribute__((__packed__));
-
- /**
-@@ -232,8 +138,13 @@ struct peci_get_dib_msg {
- * below the maximum processor junction temperature.
- */
- struct peci_get_temp_msg {
-- __u8 addr;
-- __s16 temp_raw;
-+#define PECI_GET_TEMP_WR_LEN 1
-+#define PECI_GET_TEMP_RD_LEN 2
-+#define PECI_GET_TEMP_CMD 0x01
-+
-+ __u8 addr;
-+ __u8 padding;
-+ __s16 temp_raw;
- } __attribute__((__packed__));
-
- /**
-@@ -242,6 +153,7 @@ struct peci_get_temp_msg {
- * @index: encoding index for the requested service
- * @param: specific data being requested
- * @rx_len: number of data to be read in bytes
-+ * @cc: completion code
- * @pkg_config: package config data to be read
- *
- * The RdPkgConfig() command provides read access to the Package Configuration
-@@ -251,11 +163,73 @@ struct peci_get_temp_msg {
- * DIMM temperatures and so on.
- */
- struct peci_rd_pkg_cfg_msg {
-- __u8 addr;
-- __u8 index;
-- __u16 param;
-- __u8 rx_len;
-- __u8 pkg_config[4];
-+#define PECI_RDPKGCFG_WRITE_LEN 5
-+#define PECI_RDPKGCFG_READ_LEN_BASE 1
-+#define PECI_RDPKGCFG_CMD 0xa1
-+
-+ __u8 addr;
-+ __u8 index;
-+#define PECI_MBX_INDEX_CPU_ID 0 /* Package Identifier Read */
-+#define PECI_MBX_INDEX_VR_DEBUG 1 /* VR Debug */
-+#define PECI_MBX_INDEX_PKG_TEMP_READ 2 /* Package Temperature Read */
-+#define PECI_MBX_INDEX_ENERGY_COUNTER 3 /* Energy counter */
-+#define PECI_MBX_INDEX_ENERGY_STATUS 4 /* DDR Energy Status */
-+#define PECI_MBX_INDEX_WAKE_MODE_BIT 5 /* "Wake on PECI" Mode bit */
-+#define PECI_MBX_INDEX_EPI 6 /* Efficient Performance Indication */
-+#define PECI_MBX_INDEX_PKG_RAPL_PERF 8 /* Pkg RAPL Performance Status Read */
-+#define PECI_MBX_INDEX_PER_CORE_DTS_TEMP 9 /* Per Core DTS Temperature Read */
-+#define PECI_MBX_INDEX_DTS_MARGIN 10 /* DTS thermal margin */
-+#define PECI_MBX_INDEX_SKT_PWR_THRTL_DUR 11 /* Socket Power Throttled Duration */
-+#define PECI_MBX_INDEX_CFG_TDP_CONTROL 12 /* TDP Config Control */
-+#define PECI_MBX_INDEX_CFG_TDP_LEVELS 13 /* TDP Config Levels */
-+#define PECI_MBX_INDEX_DDR_DIMM_TEMP 14 /* DDR DIMM Temperature */
-+#define PECI_MBX_INDEX_CFG_ICCMAX 15 /* Configurable ICCMAX */
-+#define PECI_MBX_INDEX_TEMP_TARGET 16 /* Temperature Target Read */
-+#define PECI_MBX_INDEX_CURR_CFG_LIMIT 17 /* Current Config Limit */
-+#define PECI_MBX_INDEX_DIMM_TEMP_READ 20 /* Package Thermal Status Read */
-+#define PECI_MBX_INDEX_DRAM_IMC_TMP_READ 22 /* DRAM IMC Temperature Read */
-+#define PECI_MBX_INDEX_DDR_CH_THERM_STAT 23 /* DDR Channel Thermal Status */
-+#define PECI_MBX_INDEX_PKG_POWER_LIMIT1 26 /* Package Power Limit1 */
-+#define PECI_MBX_INDEX_PKG_POWER_LIMIT2 27 /* Package Power Limit2 */
-+#define PECI_MBX_INDEX_TDP 28 /* Thermal design power minimum */
-+#define PECI_MBX_INDEX_TDP_HIGH 29 /* Thermal design power maximum */
-+#define PECI_MBX_INDEX_TDP_UNITS 30 /* Units for power/energy registers */
-+#define PECI_MBX_INDEX_RUN_TIME 31 /* Accumulated Run Time */
-+#define PECI_MBX_INDEX_CONSTRAINED_TIME 32 /* Thermally Constrained Time Read */
-+#define PECI_MBX_INDEX_TURBO_RATIO 33 /* Turbo Activation Ratio */
-+#define PECI_MBX_INDEX_DDR_RAPL_PL1 34 /* DDR RAPL PL1 */
-+#define PECI_MBX_INDEX_DDR_PWR_INFO_HIGH 35 /* DRAM Power Info Read (high) */
-+#define PECI_MBX_INDEX_DDR_PWR_INFO_LOW 36 /* DRAM Power Info Read (low) */
-+#define PECI_MBX_INDEX_DDR_RAPL_PL2 37 /* DDR RAPL PL2 */
-+#define PECI_MBX_INDEX_DDR_RAPL_STATUS 38 /* DDR RAPL Performance Status */
-+#define PECI_MBX_INDEX_DDR_HOT_ABSOLUTE 43 /* DDR Hottest Dimm Absolute Temp */
-+#define PECI_MBX_INDEX_DDR_HOT_RELATIVE 44 /* DDR Hottest Dimm Relative Temp */
-+#define PECI_MBX_INDEX_DDR_THROTTLE_TIME 45 /* DDR Throttle Time */
-+#define PECI_MBX_INDEX_DDR_THERM_STATUS 46 /* DDR Thermal Status */
-+#define PECI_MBX_INDEX_TIME_AVG_TEMP 47 /* Package time-averaged temperature */
-+#define PECI_MBX_INDEX_TURBO_RATIO_LIMIT 49 /* Turbo Ratio Limit Read */
-+#define PECI_MBX_INDEX_HWP_AUTO_OOB 53 /* HWP Autonomous Out-of-band */
-+#define PECI_MBX_INDEX_DDR_WARM_BUDGET 55 /* DDR Warm Power Budget */
-+#define PECI_MBX_INDEX_DDR_HOT_BUDGET 56 /* DDR Hot Power Budget */
-+#define PECI_MBX_INDEX_PKG_PSYS_PWR_LIM3 57 /* Package/Psys Power Limit3 */
-+#define PECI_MBX_INDEX_PKG_PSYS_PWR_LIM1 58 /* Package/Psys Power Limit1 */
-+#define PECI_MBX_INDEX_PKG_PSYS_PWR_LIM2 59 /* Package/Psys Power Limit2 */
-+#define PECI_MBX_INDEX_PKG_PSYS_PWR_LIM4 60 /* Package/Psys Power Limit4 */
-+#define PECI_MBX_INDEX_PERF_LIMIT_REASON 65 /* Performance Limit Reasons */
-+
-+ __u16 param;
-+/* When index is PECI_MBX_INDEX_CPU_ID */
-+#define PECI_PKG_ID_CPU_ID 0x0000 /* CPUID Info */
-+#define PECI_PKG_ID_PLATFORM_ID 0x0001 /* Platform ID */
-+#define PECI_PKG_ID_UNCORE_ID 0x0002 /* Uncore Device ID */
-+#define PECI_PKG_ID_MAX_THREAD_ID 0x0003 /* Max Thread ID */
-+#define PECI_PKG_ID_MICROCODE_REV 0x0004 /* CPU Microcode Update Revision */
-+#define PECI_PKG_ID_MACHINE_CHECK_STATUS 0x0005 /* Machine Check Status */
-+
-+ __u8 rx_len;
-+ __u8 cc;
-+ __u8 padding[2];
-+ __u8 pkg_config[4];
- } __attribute__((__packed__));
-
- /**
-@@ -264,6 +238,7 @@ struct peci_rd_pkg_cfg_msg {
- * @index: encoding index for the requested service
- * @param: specific data being requested
- * @tx_len: number of data to be written in bytes
-+ * @cc: completion code
- * @value: package config data to be written
- *
- * The WrPkgConfig() command provides write access to the Package Configuration
-@@ -272,11 +247,20 @@ struct peci_rd_pkg_cfg_msg {
- * may include power limiting, thermal averaging constant programming and so on.
- */
- struct peci_wr_pkg_cfg_msg {
-- __u8 addr;
-- __u8 index;
-- __u16 param;
-- __u8 tx_len;
-- __u32 value;
-+#define PECI_WRPKGCFG_WRITE_LEN_BASE 6
-+#define PECI_WRPKGCFG_READ_LEN 1
-+#define PECI_WRPKGCFG_CMD 0xa5
-+
-+ __u8 addr;
-+ __u8 index;
-+#define PECI_MBX_INDEX_DIMM_AMBIENT 19
-+#define PECI_MBX_INDEX_DIMM_TEMP 24
-+
-+ __u16 param;
-+ __u8 tx_len;
-+ __u8 cc;
-+ __u8 padding[2];
-+ __u32 value;
- } __attribute__((__packed__));
-
- /**
-@@ -284,16 +268,47 @@ struct peci_wr_pkg_cfg_msg {
- * @addr: address of the client
- * @thread_id: ID of the specific logical processor
- * @address: address of MSR to read from
-+ * @cc: completion code
- * @value: data to be read
- *
- * The RdIAMSR() PECI command provides read access to Model Specific Registers
- * (MSRs) defined in the processor's Intel Architecture (IA).
- */
- struct peci_rd_ia_msr_msg {
-- __u8 addr;
-- __u8 thread_id;
-- __u16 address;
-- __u64 value;
-+#define PECI_RDIAMSR_WRITE_LEN 5
-+#define PECI_RDIAMSR_READ_LEN 9
-+#define PECI_RDIAMSR_CMD 0xb1
-+
-+ __u8 addr;
-+ __u8 thread_id;
-+ __u16 address;
-+ __u8 cc;
-+ __u8 padding[3];
-+ __u64 value;
-+} __attribute__((__packed__));
-+
-+/**
-+ * struct peci_wr_ia_msr_msg - WrIAMSR command
-+ * @addr: address of the client
-+ * @thread_id: ID of the specific logical processor
-+ * @address: address of MSR to write to
-+ * @tx_len: number of data to be written in bytes
-+ * @cc: completion code
-+ * @value: data to be written
-+ *
-+ * The WrIAMSR() PECI command provides write access to Model Specific Registers
-+ * (MSRs) defined in the processor's Intel Architecture (IA).
-+ */
-+struct peci_wr_ia_msr_msg {
-+#define PECI_WRIAMSR_CMD 0xb5
-+
-+ __u8 addr;
-+ __u8 thread_id;
-+ __u16 address;
-+ __u8 tx_len;
-+ __u8 cc;
-+ __u8 padding[2];
-+ __u64 value;
- } __attribute__((__packed__));
-
- /**
-@@ -303,6 +318,7 @@ struct peci_rd_ia_msr_msg {
- * @device: PCI device number
- * @function: specific function to read from
- * @reg: specific register to read from
-+ * @cc: completion code
- * @pci_config: config data to be read
- *
- * The RdPCIConfig() command provides sideband read access to the PCI
-@@ -310,12 +326,56 @@ struct peci_rd_ia_msr_msg {
- * processor.
- */
- struct peci_rd_pci_cfg_msg {
-- __u8 addr;
-- __u8 bus;
-- __u8 device;
-- __u8 function;
-- __u16 reg;
-- __u8 pci_config[4];
-+#define PECI_RDPCICFG_WRITE_LEN 6
-+#define PECI_RDPCICFG_READ_LEN 5
-+#define PECI_RDPCICFG_READ_LEN_MAX 24
-+#define PECI_RDPCICFG_CMD 0x61
-+
-+ __u8 addr;
-+ __u8 bus;
-+#define PECI_PCI_BUS0_CPU0 0x00
-+#define PECI_PCI_BUS0_CPU1 0x80
-+#define PECI_PCI_CPUBUSNO_BUS 0x00
-+#define PECI_PCI_CPUBUSNO_DEV 0x08
-+#define PECI_PCI_CPUBUSNO_FUNC 0x02
-+#define PECI_PCI_CPUBUSNO 0xcc
-+#define PECI_PCI_CPUBUSNO_1 0xd0
-+#define PECI_PCI_CPUBUSNO_VALID 0xd4
-+
-+ __u8 device;
-+ __u8 function;
-+ __u16 reg;
-+ __u8 cc;
-+ __u8 padding[1];
-+ __u8 pci_config[4];
-+} __attribute__((__packed__));
-+
-+/**
-+ * struct peci_wr_pci_cfg_msg - WrPCIConfig command
-+ * @addr: address of the client
-+ * @bus: PCI bus number
-+ * @device: PCI device number
-+ * @function: specific function to write to
-+ * @reg: specific register to write to
-+ * @tx_len: number of data to be written in bytes
-+ * @cc: completion code
-+ * @pci_config: config data to be written
-+ *
-+ * The RdPCIConfig() command provides sideband write access to the PCI
-+ * configuration space maintained in downstream devices external to the
-+ * processor.
-+ */
-+struct peci_wr_pci_cfg_msg {
-+#define PECI_WRPCICFG_CMD 0x65
-+
-+ __u8 addr;
-+ __u8 bus;
-+ __u8 device;
-+ __u8 function;
-+ __u16 reg;
-+ __u8 tx_len;
-+ __u8 cc;
-+ __u8 pci_config[4];
- } __attribute__((__packed__));
-
- /**
-@@ -326,6 +386,7 @@ struct peci_rd_pci_cfg_msg {
- * @function: specific function to read from
- * @reg: specific register to read from
- * @rx_len: number of data to be read in bytes
-+ * @cc: completion code
- * @pci_config: config data to be read
- *
- * The RdPCIConfigLocal() command provides sideband read access to the PCI
-@@ -333,13 +394,18 @@ struct peci_rd_pci_cfg_msg {
- * processor IIO and uncore registers within the PCI configuration space.
- */
- struct peci_rd_pci_cfg_local_msg {
-- __u8 addr;
-- __u8 bus;
-- __u8 device;
-- __u8 function;
-- __u16 reg;
-- __u8 rx_len;
-- __u8 pci_config[4];
-+#define PECI_RDPCICFGLOCAL_WRITE_LEN 5
-+#define PECI_RDPCICFGLOCAL_READ_LEN_BASE 1
-+#define PECI_RDPCICFGLOCAL_CMD 0xe1
-+
-+ __u8 addr;
-+ __u8 bus;
-+ __u8 device;
-+ __u8 function;
-+ __u16 reg;
-+ __u8 rx_len;
-+ __u8 cc;
-+ __u8 pci_config[4];
- } __attribute__((__packed__));
-
- /**
-@@ -350,6 +416,7 @@ struct peci_rd_pci_cfg_local_msg {
- * @function: specific function to read from
- * @reg: specific register to read from
- * @tx_len: number of data to be written in bytes
-+ * @cc: completion code
- * @value: config data to be written
- *
- * The WrPCIConfigLocal() command provides sideband write access to the PCI
-@@ -357,13 +424,18 @@ struct peci_rd_pci_cfg_local_msg {
- * access this space even before BIOS enumeration of the system buses.
- */
- struct peci_wr_pci_cfg_local_msg {
-- __u8 addr;
-- __u8 bus;
-- __u8 device;
-- __u8 function;
-- __u16 reg;
-- __u8 tx_len;
-- __u32 value;
-+#define PECI_WRPCICFGLOCAL_WRITE_LEN_BASE 6
-+#define PECI_WRPCICFGLOCAL_READ_LEN 1
-+#define PECI_WRPCICFGLOCAL_CMD 0xe5
-+
-+ __u8 addr;
-+ __u8 bus;
-+ __u8 device;
-+ __u8 function;
-+ __u16 reg;
-+ __u8 tx_len;
-+ __u8 cc;
-+ __u32 value;
- } __attribute__((__packed__));
-
- #define PECI_IOC_BASE 0xb7
-@@ -389,9 +461,15 @@ struct peci_wr_pci_cfg_local_msg {
- #define PECI_IOC_RD_IA_MSR \
- _IOWR(PECI_IOC_BASE, PECI_CMD_RD_IA_MSR, struct peci_rd_ia_msr_msg)
-
-+#define PECI_IOC_WR_IA_MSR \
-+ _IOWR(PECI_IOC_BASE, PECI_CMD_WR_IA_MSR, struct peci_wr_ia_msr_msg)
-+
- #define PECI_IOC_RD_PCI_CFG \
- _IOWR(PECI_IOC_BASE, PECI_CMD_RD_PCI_CFG, struct peci_rd_pci_cfg_msg)
-
-+#define PECI_IOC_WR_PCI_CFG \
-+ _IOWR(PECI_IOC_BASE, PECI_CMD_WR_PCI_CFG, struct peci_wr_pci_cfg_msg)
-+
- #define PECI_IOC_RD_PCI_CFG_LOCAL \
- _IOWR(PECI_IOC_BASE, PECI_CMD_RD_PCI_CFG_LOCAL, \
- struct peci_rd_pci_cfg_local_msg)
---
-2.7.4
-
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0020-misc-aspeed-add-lpc-mbox-driver.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0020-misc-aspeed-add-lpc-mbox-driver.patch
index a444d39b3..bd468e29d 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0020-misc-aspeed-add-lpc-mbox-driver.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0020-misc-aspeed-add-lpc-mbox-driver.patch
@@ -1,4 +1,4 @@
-From c1567ac196f176b19b53b6c4e7949809fd01e334 Mon Sep 17 00:00:00 2001
+From 5d411ed0d66d3d00232519ed7d4ab6fac45e7c6e Mon Sep 17 00:00:00 2001
From: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
Date: Wed, 10 Jul 2019 16:19:33 -0700
Subject: [PATCH] misc: aspeed: add lpc mbox driver
@@ -20,10 +20,10 @@ Signed-off-by: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
create mode 100644 drivers/soc/aspeed/aspeed-lpc-mbox.c
diff --git a/arch/arm/boot/dts/aspeed-g4.dtsi b/arch/arm/boot/dts/aspeed-g4.dtsi
-index ee86b41af291..b7b6e8aa3a12 100644
+index e9fd66ab3099..f3edda4ae477 100644
--- a/arch/arm/boot/dts/aspeed-g4.dtsi
+++ b/arch/arm/boot/dts/aspeed-g4.dtsi
-@@ -394,6 +394,15 @@
+@@ -393,6 +393,15 @@
sio_regs: regs {
compatible = "aspeed,bmc-misc";
};
@@ -40,10 +40,10 @@ index ee86b41af291..b7b6e8aa3a12 100644
};
diff --git a/arch/arm/boot/dts/aspeed-g5.dtsi b/arch/arm/boot/dts/aspeed-g5.dtsi
-index 128e0b5bbae2..12a81155f1ab 100644
+index 20b2eb8052b7..bd6d1461e4bd 100644
--- a/arch/arm/boot/dts/aspeed-g5.dtsi
+++ b/arch/arm/boot/dts/aspeed-g5.dtsi
-@@ -503,6 +503,15 @@
+@@ -502,6 +502,15 @@
sio_regs: regs {
compatible = "aspeed,bmc-misc";
};
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0021-Initial-Port-of-Aspeed-LPC-SIO-driver.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0021-Initial-Port-of-Aspeed-LPC-SIO-driver.patch
index 24eca1bb9..d66e84beb 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0021-Initial-Port-of-Aspeed-LPC-SIO-driver.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0021-Initial-Port-of-Aspeed-LPC-SIO-driver.patch
@@ -1,4 +1,4 @@
-From 450b6d6e58ca9954fd4b675da8b6bb25d21c020f Mon Sep 17 00:00:00 2001
+From c111aac36e2f4fa1149662c85883407315ba76a6 Mon Sep 17 00:00:00 2001
From: Yong Li <yong.b.li@intel.com>
Date: Mon, 13 Nov 2017 16:29:44 +0800
Subject: [PATCH] Aspeed LPC SIO driver
@@ -44,10 +44,10 @@ index 000000000000..c74ea3a4e5ac
+ status = "disabled";
+};
diff --git a/arch/arm/boot/dts/aspeed-g4.dtsi b/arch/arm/boot/dts/aspeed-g4.dtsi
-index b7b6e8aa3a12..71563972d2fe 100644
+index f3edda4ae477..a70bee24d058 100644
--- a/arch/arm/boot/dts/aspeed-g4.dtsi
+++ b/arch/arm/boot/dts/aspeed-g4.dtsi
-@@ -395,6 +395,13 @@
+@@ -394,6 +394,13 @@
compatible = "aspeed,bmc-misc";
};
@@ -62,10 +62,10 @@ index b7b6e8aa3a12..71563972d2fe 100644
compatible = "aspeed,ast2400-mbox";
reg = <0x180 0x5c>;
diff --git a/arch/arm/boot/dts/aspeed-g5.dtsi b/arch/arm/boot/dts/aspeed-g5.dtsi
-index 12a81155f1ab..88f75736fe48 100644
+index bd6d1461e4bd..c15be82c3a9d 100644
--- a/arch/arm/boot/dts/aspeed-g5.dtsi
+++ b/arch/arm/boot/dts/aspeed-g5.dtsi
-@@ -504,6 +504,13 @@
+@@ -503,6 +503,13 @@
compatible = "aspeed,bmc-misc";
};
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0022-Add-AST2500-eSPI-driver.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0022-Add-AST2500-eSPI-driver.patch
index a82fefba0..490104cda 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0022-Add-AST2500-eSPI-driver.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0022-Add-AST2500-eSPI-driver.patch
@@ -1,4 +1,4 @@
-From 6e55e28db5eed85b7717aa4fc92c064f11429f6d Mon Sep 17 00:00:00 2001
+From 1d0c60f1aa8b7b25d8d0d6f6f6443d307d543600 Mon Sep 17 00:00:00 2001
From: Haiyue Wang <haiyue.wang@linux.intel.com>
Date: Sat, 24 Feb 2018 11:12:32 +0800
Subject: [PATCH] Add AST2500 eSPI driver
@@ -23,21 +23,21 @@ Signed-off-by: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
Signed-off-by: James Feist <james.feist@linux.intel.com>
Signed-off-by: Vernon Mauery <vernon.mauery@intel.com>
---
- .../devicetree/bindings/misc/aspeed,espi-slave.txt | 19 +
+ .../devicetree/bindings/misc/aspeed,espi-slave.txt | 20 +
Documentation/misc-devices/espi-slave.rst | 118 ++++++
arch/arm/boot/dts/aspeed-g5.dtsi | 4 +
arch/arm/boot/dts/aspeed-g6.dtsi | 12 +
drivers/misc/Kconfig | 8 +
drivers/misc/Makefile | 1 +
- drivers/misc/aspeed-espi-slave.c | 420 +++++++++++++++++++++
- 6 files changed, 570 insertions(+)
+ drivers/misc/aspeed-espi-slave.c | 421 +++++++++++++++++++++
+ 7 files changed, 584 insertions(+)
create mode 100644 Documentation/devicetree/bindings/misc/aspeed,espi-slave.txt
create mode 100644 Documentation/misc-devices/espi-slave.rst
create mode 100644 drivers/misc/aspeed-espi-slave.c
diff --git a/Documentation/devicetree/bindings/misc/aspeed,espi-slave.txt b/Documentation/devicetree/bindings/misc/aspeed,espi-slave.txt
new file mode 100644
-index 000000000000..8660e2ffbb89
+index 000000000000..f72d9ae32f3e
--- /dev/null
+++ b/Documentation/devicetree/bindings/misc/aspeed,espi-slave.txt
@@ -0,0 +1,20 @@
@@ -186,10 +186,10 @@ index 000000000000..887a69a7130a
+- Interface Base Specification (for Client and Server Platforms)
+<https://www.intel.com/content/dam/support/us/en/documents/software/chipset-software/327432-004_espi_base_specification_rev1.0.pdf>`_
diff --git a/arch/arm/boot/dts/aspeed-g5.dtsi b/arch/arm/boot/dts/aspeed-g5.dtsi
-index 88f75736fe48..26671cc4dbd5 100644
+index c15be82c3a9d..bd2037e52a94 100644
--- a/arch/arm/boot/dts/aspeed-g5.dtsi
+++ b/arch/arm/boot/dts/aspeed-g5.dtsi
-@@ -317,6 +317,7 @@
+@@ -316,6 +316,7 @@
clocks = <&syscon ASPEED_CLK_APB>;
interrupt-controller;
#interrupt-cells = <2>;
@@ -197,7 +197,7 @@ index 88f75736fe48..26671cc4dbd5 100644
};
sgpio: sgpio@1e780200 {
-@@ -413,6 +414,9 @@
+@@ -412,6 +413,9 @@
reg = <0x1e6ee000 0x100>;
interrupts = <23>;
status = "disabled";
@@ -208,7 +208,7 @@ index 88f75736fe48..26671cc4dbd5 100644
lpc: lpc@1e789000 {
diff --git a/arch/arm/boot/dts/aspeed-g6.dtsi b/arch/arm/boot/dts/aspeed-g6.dtsi
-index 567f268a3032..48de17a24c74 100644
+index 459070693aba..e4c1ab3d274e 100644
--- a/arch/arm/boot/dts/aspeed-g6.dtsi
+++ b/arch/arm/boot/dts/aspeed-g6.dtsi
@@ -3,6 +3,7 @@
@@ -219,7 +219,7 @@ index 567f268a3032..48de17a24c74 100644
/ {
model = "Aspeed BMC";
-@@ -512,6 +513,17 @@
+@@ -651,6 +652,17 @@
status = "disabled";
};
@@ -238,10 +238,10 @@ index 567f268a3032..48de17a24c74 100644
compatible = "simple-bus";
#address-cells = <1>;
diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
-index d681b7201f8c..50814caba1d3 100644
+index 06a2b753cc7c..0f9b5a356c93 100644
--- a/drivers/misc/Kconfig
+++ b/drivers/misc/Kconfig
-@@ -455,6 +455,14 @@ config VEXPRESS_SYSCFG
+@@ -433,6 +433,14 @@ config VEXPRESS_SYSCFG
bus. System Configuration interface is one of the possible means
of generating transactions on this bus.
@@ -257,10 +257,10 @@ index d681b7201f8c..50814caba1d3 100644
depends on PCI
select CRC32
diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
-index fdd404120ed8..f168e6713440 100644
+index b9e6d4c3e906..53864687e8fd 100644
--- a/drivers/misc/Makefile
+++ b/drivers/misc/Makefile
-@@ -53,6 +53,7 @@ obj-$(CONFIG_GENWQE) += genwqe/
+@@ -51,6 +51,7 @@ obj-$(CONFIG_GENWQE) += genwqe/
obj-$(CONFIG_ECHO) += echo/
obj-$(CONFIG_VEXPRESS_SYSCFG) += vexpress-syscfg.o
obj-$(CONFIG_CXL_BASE) += cxl/
@@ -270,7 +270,7 @@ index fdd404120ed8..f168e6713440 100644
obj-y += cardreader/
diff --git a/drivers/misc/aspeed-espi-slave.c b/drivers/misc/aspeed-espi-slave.c
new file mode 100644
-index 000000000000..b0fc01692d3a
+index 000000000000..d70332d1fef3
--- /dev/null
+++ b/drivers/misc/aspeed-espi-slave.c
@@ -0,0 +1,421 @@
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0026-Add-support-for-new-PECI-commands.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0026-Add-support-for-new-PECI-commands.patch
deleted file mode 100644
index 223c15fc6..000000000
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0026-Add-support-for-new-PECI-commands.patch
+++ /dev/null
@@ -1,724 +0,0 @@
-From 5f43a95bd032279440196a1c9802e1dec5d24a65 Mon Sep 17 00:00:00 2001
-From: "Jason M. Bills" <jason.m.bills@intel.com>
-Date: Wed, 4 Apr 2018 13:52:39 -0700
-Subject: [PATCH] Add support for new PECI commands
-
-Signed-off-by: Jason M. Bills <jason.m.bills@intel.com>
-Signed-off-by: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
-Signed-off-by: Zhu, Yunge <yunge.zhu@linux.intel.com>
----
- drivers/peci/peci-core.c | 430 ++++++++++++++++++++++++++++++++++++++++
- include/uapi/linux/peci-ioctl.h | 179 +++++++++++++++++
- 2 files changed, 609 insertions(+)
-
-diff --git a/drivers/peci/peci-core.c b/drivers/peci/peci-core.c
-index 2a6be04..43a86a0 100644
---- a/drivers/peci/peci-core.c
-+++ b/drivers/peci/peci-core.c
-@@ -318,6 +318,13 @@ static int peci_scan_cmd_mask(struct peci_adapter *adapter)
- * See PECI Spec Table 3-1.
- */
- revision = FIELD_GET(REVISION_NUM_MASK, dib);
-+ if (revision >= 0x40) { /* Rev. 4.0 */
-+ adapter->cmd_mask |= BIT(PECI_CMD_RD_IA_MSREX);
-+ adapter->cmd_mask |= BIT(PECI_CMD_RD_END_PT_CFG);
-+ adapter->cmd_mask |= BIT(PECI_CMD_WR_END_PT_CFG);
-+ adapter->cmd_mask |= BIT(PECI_CMD_CRASHDUMP_DISC);
-+ adapter->cmd_mask |= BIT(PECI_CMD_CRASHDUMP_GET_FRAME);
-+ }
- if (revision >= 0x36) /* Rev. 3.6 */
- adapter->cmd_mask |= BIT(PECI_CMD_WR_IA_MSR);
- if (revision >= 0x35) /* Rev. 3.5 */
-@@ -375,14 +382,18 @@ static int peci_cmd_xfer(struct peci_adapter *adapter, void *vmsg)
- switch (msg->tx_buf[0]) {
- case PECI_RDPKGCFG_CMD:
- case PECI_RDIAMSR_CMD:
-+ case PECI_RDIAMSREX_CMD:
- case PECI_RDPCICFG_CMD:
- case PECI_RDPCICFGLOCAL_CMD:
-+ case PECI_RDENDPTCFG_CMD:
-+ case PECI_CRASHDUMP_CMD:
- ret = peci_xfer_with_retries(adapter, msg, false);
- break;
- case PECI_WRPKGCFG_CMD:
- case PECI_WRIAMSR_CMD:
- case PECI_WRPCICFG_CMD:
- case PECI_WRPCICFGLOCAL_CMD:
-+ case PECI_WRENDPTCFG_CMD:
- /* Check if the AW FCS byte is already provided */
- ret = peci_aw_fcs(msg, 2 + msg->tx_len, &aw_fcs);
- if (ret)
-@@ -590,6 +601,34 @@ static int peci_cmd_rd_ia_msr(struct peci_adapter *adapter, void *vmsg)
- return ret;
- }
-
-+static int peci_cmd_rd_ia_msrex(struct peci_adapter *adapter, void *vmsg)
-+{
-+ struct peci_rd_ia_msrex_msg *umsg = vmsg;
-+ struct peci_xfer_msg *msg;
-+ int ret;
-+
-+ msg = peci_get_xfer_msg(PECI_RDIAMSREX_WRITE_LEN, PECI_RDIAMSREX_READ_LEN);
-+ if (!msg)
-+ return -ENOMEM;
-+
-+ msg->addr = umsg->addr;
-+ msg->tx_buf[0] = PECI_RDIAMSREX_CMD;
-+ msg->tx_buf[1] = 0;
-+ msg->tx_buf[2] = (u8)umsg->thread_id;
-+ msg->tx_buf[3] = (u8)(umsg->thread_id >> 8);
-+ msg->tx_buf[4] = (u8)umsg->address;
-+ msg->tx_buf[5] = (u8)(umsg->address >> 8);
-+
-+ ret = peci_xfer_with_retries(adapter, msg, false);
-+ if (!ret)
-+ memcpy(&umsg->value, &msg->rx_buf[1], sizeof(uint64_t));
-+
-+ umsg->cc = msg->rx_buf[0];
-+ peci_put_xfer_msg(msg);
-+
-+ return ret;
-+}
-+
- static int peci_cmd_wr_ia_msr(struct peci_adapter *adapter, void *vmsg)
- {
- return -ENOSYS; /* Not implemented yet */
-@@ -730,6 +769,392 @@ static int peci_cmd_wr_pci_cfg_local(struct peci_adapter *adapter, void *vmsg)
- return ret;
- }
-
-+static int peci_cmd_rd_end_pt_cfg(struct peci_adapter *adapter, void *vmsg)
-+{
-+ struct peci_rd_end_pt_cfg_msg *umsg = vmsg;
-+ struct peci_xfer_msg *msg = NULL;
-+ u32 address;
-+ u8 tx_size;
-+ int ret;
-+
-+ switch (umsg->msg_type) {
-+ case PECI_ENDPTCFG_TYPE_LOCAL_PCI:
-+ case PECI_ENDPTCFG_TYPE_PCI:
-+ /*
-+ * Per the PECI spec, the read length must be a byte, word,
-+ * or dword
-+ */
-+ if (umsg->rx_len != 1 && umsg->rx_len != 2 &&
-+ umsg->rx_len != 4) {
-+ dev_dbg(&adapter->dev,
-+ "Invalid read length, rx_len: %d\n",
-+ umsg->rx_len);
-+ return -EINVAL;
-+ }
-+
-+ msg = peci_get_xfer_msg(PECI_RDENDPTCFG_PCI_WRITE_LEN,
-+ PECI_RDENDPTCFG_READ_LEN_BASE +
-+ umsg->rx_len);
-+ if (!msg)
-+ return -ENOMEM;
-+
-+ address = umsg->params.pci_cfg.reg; /* [11:0] - Register */
-+ address |= (u32)umsg->params.pci_cfg.function
-+ << 12; /* [14:12] - Function */
-+ address |= (u32)umsg->params.pci_cfg.device
-+ << 15; /* [19:15] - Device */
-+ address |= (u32)umsg->params.pci_cfg.bus
-+ << 20; /* [27:20] - Bus */
-+ /* [31:28] - Reserved */
-+ msg->addr = umsg->addr;
-+ msg->tx_buf[0] = PECI_RDENDPTCFG_CMD;
-+ msg->tx_buf[1] = 0x00; /* request byte for Host ID|Retry bit */
-+ msg->tx_buf[2] = umsg->msg_type; /* Message Type */
-+ msg->tx_buf[3] = 0x00; /* Endpoint ID */
-+ msg->tx_buf[4] = 0x00; /* Reserved */
-+ msg->tx_buf[5] = 0x00; /* Reserved */
-+ msg->tx_buf[6] = PECI_ENDPTCFG_ADDR_TYPE_PCI; /* Addr Type */
-+ msg->tx_buf[7] = umsg->params.pci_cfg.seg; /* PCI Segment */
-+ msg->tx_buf[8] = (u8)address; /* LSB - PCI Config Address */
-+ msg->tx_buf[9] = (u8)(address >> 8); /* PCI Config Address */
-+ msg->tx_buf[10] = (u8)(address >> 16); /* PCI Config Address */
-+ msg->tx_buf[11] =
-+ (u8)(address >> 24); /* MSB - PCI Config Address */
-+ break;
-+
-+ case PECI_ENDPTCFG_TYPE_MMIO:
-+ /*
-+ * Per the PECI spec, the read length must be a byte, word,
-+ * dword, or qword
-+ */
-+ if (umsg->rx_len != 1 && umsg->rx_len != 2 &&
-+ umsg->rx_len != 4 && umsg->rx_len != 8) {
-+ dev_dbg(&adapter->dev,
-+ "Invalid read length, rx_len: %d\n",
-+ umsg->rx_len);
-+ return -EINVAL;
-+ }
-+ /*
-+ * Per the PECI spec, the address type must specify either DWORD
-+ * or QWORD
-+ */
-+ if (umsg->params.mmio.addr_type !=
-+ PECI_ENDPTCFG_ADDR_TYPE_MMIO_D &&
-+ umsg->params.mmio.addr_type !=
-+ PECI_ENDPTCFG_ADDR_TYPE_MMIO_Q) {
-+ dev_dbg(&adapter->dev,
-+ "Invalid address type, addr_type: %d\n",
-+ umsg->params.mmio.addr_type);
-+ return -EINVAL;
-+ }
-+
-+ if (umsg->params.mmio.addr_type ==
-+ PECI_ENDPTCFG_ADDR_TYPE_MMIO_D)
-+ tx_size = PECI_RDENDPTCFG_MMIO_D_WRITE_LEN;
-+ else
-+ tx_size = PECI_RDENDPTCFG_MMIO_Q_WRITE_LEN;
-+ msg = peci_get_xfer_msg(tx_size,
-+ PECI_RDENDPTCFG_READ_LEN_BASE +
-+ umsg->rx_len);
-+ if (!msg)
-+ return -ENOMEM;
-+
-+ address = umsg->params.mmio.function; /* [2:0] - Function */
-+ address |= (u32)umsg->params.mmio.device
-+ << 3; /* [7:3] - Device */
-+
-+ msg->addr = umsg->addr;
-+ msg->tx_buf[0] = PECI_RDENDPTCFG_CMD;
-+ msg->tx_buf[1] = 0x00; /* request byte for Host ID|Retry bit */
-+ msg->tx_buf[2] = umsg->msg_type; /* Message Type */
-+ msg->tx_buf[3] = 0x00; /* Endpoint ID */
-+ msg->tx_buf[4] = 0x00; /* Reserved */
-+ msg->tx_buf[5] = umsg->params.mmio.bar; /* BAR # */
-+ msg->tx_buf[6] = umsg->params.mmio.addr_type; /* Address Type */
-+ msg->tx_buf[7] = umsg->params.mmio.seg; /* PCI Segment */
-+ msg->tx_buf[8] = (u8)address; /* Function/Device */
-+ msg->tx_buf[9] = umsg->params.mmio.bus; /* PCI Bus */
-+ msg->tx_buf[10] = (u8)umsg->params.mmio
-+ .offset; /* LSB - Register Offset */
-+ msg->tx_buf[11] = (u8)(umsg->params.mmio.offset
-+ >> 8); /* Register Offset */
-+ msg->tx_buf[12] = (u8)(umsg->params.mmio.offset
-+ >> 16); /* Register Offset */
-+ msg->tx_buf[13] = (u8)(umsg->params.mmio.offset
-+ >> 24); /* MSB - DWORD Register Offset */
-+ if (umsg->params.mmio.addr_type ==
-+ PECI_ENDPTCFG_ADDR_TYPE_MMIO_Q) {
-+ msg->tx_buf[14] = (u8)(umsg->params.mmio.offset
-+ >> 32); /* Register Offset */
-+ msg->tx_buf[15] = (u8)(umsg->params.mmio.offset
-+ >> 40); /* Register Offset */
-+ msg->tx_buf[16] = (u8)(umsg->params.mmio.offset
-+ >> 48); /* Register Offset */
-+ msg->tx_buf[17] =
-+ (u8)(umsg->params.mmio.offset
-+ >> 56); /* MSB - QWORD Register Offset */
-+ }
-+ break;
-+
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ ret = peci_xfer_with_retries(adapter, msg, false);
-+ if (!ret)
-+ memcpy(umsg->data, &msg->rx_buf[1], umsg->rx_len);
-+
-+ umsg->cc = msg->rx_buf[0];
-+ peci_put_xfer_msg(msg);
-+
-+ return ret;
-+}
-+
-+static int peci_cmd_wr_end_pt_cfg(struct peci_adapter *adapter, void *vmsg)
-+{
-+ struct peci_wr_end_pt_cfg_msg *umsg = vmsg;
-+ struct peci_xfer_msg *msg = NULL;
-+ u8 tx_size, aw_fcs;
-+ int ret, i, idx;
-+ u32 address;
-+
-+ switch (umsg->msg_type) {
-+ case PECI_ENDPTCFG_TYPE_LOCAL_PCI:
-+ case PECI_ENDPTCFG_TYPE_PCI:
-+ /*
-+ * Per the PECI spec, the write length must be a byte, word,
-+ * or dword
-+ */
-+ if (umsg->tx_len != 1 && umsg->tx_len != 2 &&
-+ umsg->tx_len != 4) {
-+ dev_dbg(&adapter->dev,
-+ "Invalid write length, tx_len: %d\n",
-+ umsg->tx_len);
-+ return -EINVAL;
-+ }
-+
-+ msg = peci_get_xfer_msg(PECI_WRENDPTCFG_PCI_WRITE_LEN_BASE +
-+ umsg->tx_len, PECI_WRENDPTCFG_READ_LEN);
-+ if (!msg)
-+ return -ENOMEM;
-+
-+ address = umsg->params.pci_cfg.reg; /* [11:0] - Register */
-+ address |= (u32)umsg->params.pci_cfg.function
-+ << 12; /* [14:12] - Function */
-+ address |= (u32)umsg->params.pci_cfg.device
-+ << 15; /* [19:15] - Device */
-+ address |= (u32)umsg->params.pci_cfg.bus
-+ << 20; /* [27:20] - Bus */
-+ /* [31:28] - Reserved */
-+ msg->addr = umsg->addr;
-+ msg->tx_buf[0] = PECI_WRENDPTCFG_CMD;
-+ msg->tx_buf[1] = 0x00; /* request byte for Host ID|Retry bit */
-+ msg->tx_buf[2] = umsg->msg_type; /* Message Type */
-+ msg->tx_buf[3] = 0x00; /* Endpoint ID */
-+ msg->tx_buf[4] = 0x00; /* Reserved */
-+ msg->tx_buf[5] = 0x00; /* Reserved */
-+ msg->tx_buf[6] = PECI_ENDPTCFG_ADDR_TYPE_PCI; /* Addr Type */
-+ msg->tx_buf[7] = umsg->params.pci_cfg.seg; /* PCI Segment */
-+ msg->tx_buf[8] = (u8)address; /* LSB - PCI Config Address */
-+ msg->tx_buf[9] = (u8)(address >> 8); /* PCI Config Address */
-+ msg->tx_buf[10] = (u8)(address >> 16); /* PCI Config Address */
-+ msg->tx_buf[11] =
-+ (u8)(address >> 24); /* MSB - PCI Config Address */
-+ for (i = 0; i < umsg->tx_len; i++)
-+ msg->tx_buf[12 + i] = (u8)(umsg->value >> (i << 3));
-+
-+ /* Add an Assured Write Frame Check Sequence byte */
-+ ret = peci_aw_fcs(msg, 15 + umsg->tx_len, &aw_fcs);
-+ if (ret)
-+ goto out;
-+
-+ msg->tx_buf[12 + i] = 0x80 ^ aw_fcs;
-+ break;
-+
-+ case PECI_ENDPTCFG_TYPE_MMIO:
-+ /*
-+ * Per the PECI spec, the write length must be a byte, word,
-+ * dword, or qword
-+ */
-+ if (umsg->tx_len != 1 && umsg->tx_len != 2 &&
-+ umsg->tx_len != 4 && umsg->tx_len != 8) {
-+ dev_dbg(&adapter->dev,
-+ "Invalid write length, tx_len: %d\n",
-+ umsg->tx_len);
-+ return -EINVAL;
-+ }
-+ /*
-+ * Per the PECI spec, the address type must specify either DWORD
-+ * or QWORD
-+ */
-+ if (umsg->params.mmio.addr_type !=
-+ PECI_ENDPTCFG_ADDR_TYPE_MMIO_D &&
-+ umsg->params.mmio.addr_type !=
-+ PECI_ENDPTCFG_ADDR_TYPE_MMIO_Q) {
-+ dev_dbg(&adapter->dev,
-+ "Invalid address type, addr_type: %d\n",
-+ umsg->params.mmio.addr_type);
-+ return -EINVAL;
-+ }
-+
-+ if (umsg->params.mmio.addr_type ==
-+ PECI_ENDPTCFG_ADDR_TYPE_MMIO_D)
-+ tx_size = PECI_WRENDPTCFG_MMIO_D_WRITE_LEN_BASE +
-+ umsg->tx_len;
-+ else
-+ tx_size = PECI_WRENDPTCFG_MMIO_Q_WRITE_LEN_BASE +
-+ umsg->tx_len;
-+ msg = peci_get_xfer_msg(tx_size, PECI_WRENDPTCFG_READ_LEN);
-+ if (!msg)
-+ return -ENOMEM;
-+
-+ address = umsg->params.mmio.function; /* [2:0] - Function */
-+ address |= (u32)umsg->params.mmio.device
-+ << 3; /* [7:3] - Device */
-+
-+ msg->addr = umsg->addr;
-+ msg->tx_buf[0] = PECI_WRENDPTCFG_CMD;
-+ msg->tx_buf[1] = 0x00; /* request byte for Host ID|Retry bit */
-+ msg->tx_buf[2] = umsg->msg_type; /* Message Type */
-+ msg->tx_buf[3] = 0x00; /* Endpoint ID */
-+ msg->tx_buf[4] = 0x00; /* Reserved */
-+ msg->tx_buf[5] = umsg->params.mmio.bar; /* BAR # */
-+ msg->tx_buf[6] = umsg->params.mmio.addr_type; /* Address Type */
-+ msg->tx_buf[7] = umsg->params.mmio.seg; /* PCI Segment */
-+ msg->tx_buf[8] = (u8)address; /* Function/Device */
-+ msg->tx_buf[9] = umsg->params.mmio.bus; /* PCI Bus */
-+ msg->tx_buf[10] = (u8)umsg->params.mmio
-+ .offset; /* LSB - Register Offset */
-+ msg->tx_buf[11] = (u8)(umsg->params.mmio.offset
-+ >> 8); /* Register Offset */
-+ msg->tx_buf[12] = (u8)(umsg->params.mmio.offset
-+ >> 16); /* Register Offset */
-+ msg->tx_buf[13] = (u8)(umsg->params.mmio.offset
-+ >> 24); /* MSB - DWORD Register Offset */
-+ if (umsg->params.mmio.addr_type ==
-+ PECI_ENDPTCFG_ADDR_TYPE_MMIO_Q) {
-+ msg->tx_len = PECI_WRENDPTCFG_MMIO_Q_WRITE_LEN_BASE;
-+ msg->tx_buf[14] = (u8)(umsg->params.mmio.offset
-+ >> 32); /* Register Offset */
-+ msg->tx_buf[15] = (u8)(umsg->params.mmio.offset
-+ >> 40); /* Register Offset */
-+ msg->tx_buf[16] = (u8)(umsg->params.mmio.offset
-+ >> 48); /* Register Offset */
-+ msg->tx_buf[17] =
-+ (u8)(umsg->params.mmio.offset
-+ >> 56); /* MSB - QWORD Register Offset */
-+ idx = 18;
-+ } else {
-+ idx = 14;
-+ }
-+ for (i = 0; i < umsg->tx_len; i++)
-+ msg->tx_buf[idx + i] = (u8)(umsg->value >> (i << 3));
-+
-+ /* Add an Assured Write Frame Check Sequence byte */
-+ ret = peci_aw_fcs(msg, idx + 3 + umsg->tx_len, &aw_fcs);
-+ if (ret)
-+ goto out;
-+
-+ msg->tx_buf[idx + i] = 0x80 ^ aw_fcs;
-+ break;
-+
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ ret = peci_xfer_with_retries(adapter, msg, false);
-+
-+out:
-+ umsg->cc = msg->rx_buf[0];
-+ peci_put_xfer_msg(msg);
-+
-+ return ret;
-+}
-+
-+static int peci_cmd_crashdump_disc(struct peci_adapter *adapter, void *vmsg)
-+{
-+ struct peci_crashdump_disc_msg *umsg = vmsg;
-+ struct peci_xfer_msg *msg;
-+ int ret;
-+
-+ /* Per the EDS, the read length must be a byte, word, or qword */
-+ if (umsg->rx_len != 1 && umsg->rx_len != 2 && umsg->rx_len != 8) {
-+ dev_dbg(&adapter->dev, "Invalid read length, rx_len: %d\n",
-+ umsg->rx_len);
-+ return -EINVAL;
-+ }
-+
-+ msg = peci_get_xfer_msg(PECI_CRASHDUMP_DISC_WRITE_LEN,
-+ PECI_CRASHDUMP_DISC_READ_LEN_BASE +
-+ umsg->rx_len);
-+ if (!msg)
-+ return -ENOMEM;
-+
-+ msg->addr = umsg->addr;
-+ msg->tx_buf[0] = PECI_CRASHDUMP_CMD;
-+ msg->tx_buf[1] = 0x00; /* request byte for Host ID | Retry bit */
-+ /* Host ID is 0 for PECI 3.0 */
-+ msg->tx_buf[2] = PECI_CRASHDUMP_DISC_VERSION;
-+ msg->tx_buf[3] = PECI_CRASHDUMP_DISC_OPCODE;
-+ msg->tx_buf[4] = umsg->subopcode;
-+ msg->tx_buf[5] = umsg->param0;
-+ msg->tx_buf[6] = (u8)umsg->param1;
-+ msg->tx_buf[7] = (u8)(umsg->param1 >> 8);
-+ msg->tx_buf[8] = umsg->param2;
-+
-+ ret = peci_xfer_with_retries(adapter, msg, false);
-+ if (!ret)
-+ memcpy(umsg->data, &msg->rx_buf[1], umsg->rx_len);
-+
-+ umsg->cc = msg->rx_buf[0];
-+ peci_put_xfer_msg(msg);
-+
-+ return ret;
-+}
-+
-+static int peci_cmd_crashdump_get_frame(struct peci_adapter *adapter,
-+ void *vmsg)
-+{
-+ struct peci_crashdump_get_frame_msg *umsg = vmsg;
-+ struct peci_xfer_msg *msg;
-+ int ret;
-+
-+ /* Per the EDS, the read length must be a qword or dqword */
-+ if (umsg->rx_len != 8 && umsg->rx_len != 16) {
-+ dev_dbg(&adapter->dev, "Invalid read length, rx_len: %d\n",
-+ umsg->rx_len);
-+ return -EINVAL;
-+ }
-+
-+ msg = peci_get_xfer_msg(PECI_CRASHDUMP_GET_FRAME_WRITE_LEN,
-+ PECI_CRASHDUMP_GET_FRAME_READ_LEN_BASE +
-+ umsg->rx_len);
-+ if (!msg)
-+ return -ENOMEM;
-+
-+ msg->addr = umsg->addr;
-+ msg->tx_buf[0] = PECI_CRASHDUMP_CMD;
-+ msg->tx_buf[1] = 0x00; /* request byte for Host ID | Retry bit */
-+ /* Host ID is 0 for PECI 3.0 */
-+ msg->tx_buf[2] = PECI_CRASHDUMP_GET_FRAME_VERSION;
-+ msg->tx_buf[3] = PECI_CRASHDUMP_GET_FRAME_OPCODE;
-+ msg->tx_buf[4] = (u8)umsg->param0;
-+ msg->tx_buf[5] = (u8)(umsg->param0 >> 8);
-+ msg->tx_buf[6] = (u8)umsg->param1;
-+ msg->tx_buf[7] = (u8)(umsg->param1 >> 8);
-+ msg->tx_buf[8] = (u8)umsg->param2;
-+ msg->tx_buf[9] = (u8)(umsg->param2 >> 8);
-+
-+ ret = peci_xfer_with_retries(adapter, msg, false);
-+ if (!ret)
-+ memcpy(umsg->data, &msg->rx_buf[1], umsg->rx_len);
-+
-+ umsg->cc = msg->rx_buf[0];
-+ peci_put_xfer_msg(msg);
-+
-+ return ret;
-+}
-+
- typedef int (*peci_cmd_fn_type)(struct peci_adapter *, void *);
-
- static const peci_cmd_fn_type peci_cmd_fn[PECI_CMD_MAX] = {
-@@ -741,10 +1166,15 @@ static const peci_cmd_fn_type peci_cmd_fn[PECI_CMD_MAX] = {
- peci_cmd_wr_pkg_cfg,
- peci_cmd_rd_ia_msr,
- peci_cmd_wr_ia_msr,
-+ peci_cmd_rd_ia_msrex,
- peci_cmd_rd_pci_cfg,
- peci_cmd_wr_pci_cfg,
- peci_cmd_rd_pci_cfg_local,
- peci_cmd_wr_pci_cfg_local,
-+ peci_cmd_rd_end_pt_cfg,
-+ peci_cmd_wr_end_pt_cfg,
-+ peci_cmd_crashdump_disc,
-+ peci_cmd_crashdump_get_frame,
- };
-
- /**
-diff --git a/include/uapi/linux/peci-ioctl.h b/include/uapi/linux/peci-ioctl.h
-index 253fb42..1158254 100644
---- a/include/uapi/linux/peci-ioctl.h
-+++ b/include/uapi/linux/peci-ioctl.h
-@@ -47,6 +47,7 @@
- * @PECI_CMD_WR_PKG_CFG: write access to the PCS (Package Configuration Space)
- * @PECI_CMD_RD_IA_MSR: read access to MSRs (Model Specific Registers)
- * @PECI_CMD_WR_IA_MSR: write access to MSRs (Model Specific Registers)
-+ * @PECI_CMD_RD_IA_MSREX: read access to MSRs (Model Specific Registers)
- * @PECI_CMD_RD_PCI_CFG: sideband read access to the PCI configuration space
- * maintained in downstream devices external to the processor
- * @PECI_CMD_WR_PCI_CFG: sideband write access to the PCI configuration space
-@@ -67,10 +68,15 @@ enum peci_cmd {
- PECI_CMD_WR_PKG_CFG,
- PECI_CMD_RD_IA_MSR,
- PECI_CMD_WR_IA_MSR,
-+ PECI_CMD_RD_IA_MSREX,
- PECI_CMD_RD_PCI_CFG,
- PECI_CMD_WR_PCI_CFG,
- PECI_CMD_RD_PCI_CFG_LOCAL,
- PECI_CMD_WR_PCI_CFG_LOCAL,
-+ PECI_CMD_RD_END_PT_CFG,
-+ PECI_CMD_WR_END_PT_CFG,
-+ PECI_CMD_CRASHDUMP_DISC,
-+ PECI_CMD_CRASHDUMP_GET_FRAME,
- PECI_CMD_MAX
- };
-
-@@ -312,6 +318,34 @@ struct peci_wr_ia_msr_msg {
- } __attribute__((__packed__));
-
- /**
-+ * struct peci_rd_ia_msrex_msg - RdIAMSREX command
-+ * @addr: address of the client
-+ * @thread_id: ID of the specific logical processor
-+ * @address: address of MSR to read from
-+ * @cc: completion code
-+ * @value: data to be read
-+ *
-+ * The RdIAMSREX() PECI command provides read access to Model Specific Registers
-+ * (MSRs) defined in the processor's Intel Architecture (IA).
-+ * The differences between RdIAMSREX() and RdIAMSR() are that:
-+ * (1)RdIAMSR() can only read MC registers, RdIAMSREX() can read all MSRs
-+ * (2)thread_id of RdIAMSR() is u8, thread_id of RdIAMSREX() is u16
-+ */
-+struct peci_rd_ia_msrex_msg {
-+#define PECI_RDIAMSREX_WRITE_LEN 6
-+#define PECI_RDIAMSREX_READ_LEN 9
-+#define PECI_RDIAMSREX_CMD 0xd1
-+
-+ __u8 addr;
-+ __u8 padding0;
-+ __u16 thread_id;
-+ __u16 address;
-+ __u8 cc;
-+ __u8 padding1;
-+ __u64 value;
-+} __attribute__((__packed__));
-+
-+/**
- * struct peci_rd_pci_cfg_msg - RdPCIConfig command
- * @addr: address of the client
- * @bus: PCI bus number
-@@ -438,6 +472,132 @@ struct peci_wr_pci_cfg_local_msg {
- __u32 value;
- } __attribute__((__packed__));
-
-+struct peci_rd_end_pt_cfg_msg {
-+#define PECI_RDENDPTCFG_PCI_WRITE_LEN 12
-+#define PECI_RDENDPTCFG_MMIO_D_WRITE_LEN 14
-+#define PECI_RDENDPTCFG_MMIO_Q_WRITE_LEN 18
-+#define PECI_RDENDPTCFG_READ_LEN_BASE 1
-+#define PECI_RDENDPTCFG_CMD 0xc1
-+
-+ __u8 addr;
-+ __u8 msg_type;
-+#define PECI_ENDPTCFG_TYPE_LOCAL_PCI 0x03
-+#define PECI_ENDPTCFG_TYPE_PCI 0x04
-+#define PECI_ENDPTCFG_TYPE_MMIO 0x05
-+
-+ union {
-+ struct {
-+ __u8 seg;
-+ __u8 bus;
-+ __u8 device;
-+ __u8 function;
-+ __u16 reg;
-+ } pci_cfg;
-+ struct {
-+ __u8 seg;
-+ __u8 bus;
-+ __u8 device;
-+ __u8 function;
-+ __u8 bar;
-+ __u8 addr_type;
-+#define PECI_ENDPTCFG_ADDR_TYPE_PCI 0x04
-+#define PECI_ENDPTCFG_ADDR_TYPE_MMIO_D 0x05
-+#define PECI_ENDPTCFG_ADDR_TYPE_MMIO_Q 0x06
-+
-+ __u64 offset;
-+ } mmio;
-+ } params;
-+ __u8 rx_len;
-+ __u8 cc;
-+ __u8 padding[2];
-+ __u8 data[8];
-+} __attribute__((__packed__));
-+
-+struct peci_wr_end_pt_cfg_msg {
-+#define PECI_WRENDPTCFG_PCI_WRITE_LEN_BASE 13
-+#define PECI_WRENDPTCFG_MMIO_D_WRITE_LEN_BASE 15
-+#define PECI_WRENDPTCFG_MMIO_Q_WRITE_LEN_BASE 19
-+#define PECI_WRENDPTCFG_READ_LEN 1
-+#define PECI_WRENDPTCFG_CMD 0xc5
-+
-+ __u8 addr;
-+ __u8 msg_type;
-+ /* See msg_type in struct peci_rd_end_pt_cfg_msg */
-+
-+ union {
-+ struct {
-+ __u8 seg;
-+ __u8 bus;
-+ __u8 device;
-+ __u8 function;
-+ __u16 reg;
-+ } pci_cfg;
-+ struct {
-+ __u8 seg;
-+ __u8 bus;
-+ __u8 device;
-+ __u8 function;
-+ __u8 bar;
-+ __u8 addr_type;
-+ /* See addr_type in struct peci_rd_end_pt_cfg_msg */
-+
-+ __u64 offset;
-+ } mmio;
-+ } params;
-+ __u8 tx_len;
-+ __u8 cc;
-+ __u8 padding[2];
-+ __u64 value;
-+} __attribute__((__packed__));
-+
-+/* Crashdump Agent */
-+#define PECI_CRASHDUMP_CORE 0x00
-+#define PECI_CRASHDUMP_TOR 0x01
-+
-+/* Crashdump Agent Param */
-+#define PECI_CRASHDUMP_PAYLOAD_SIZE 0x00
-+
-+/* Crashdump Agent Data Param */
-+#define PECI_CRASHDUMP_AGENT_ID 0x00
-+#define PECI_CRASHDUMP_AGENT_PARAM 0x01
-+
-+struct peci_crashdump_disc_msg {
-+ __u8 addr;
-+ __u8 subopcode;
-+#define PECI_CRASHDUMP_ENABLED 0x00
-+#define PECI_CRASHDUMP_NUM_AGENTS 0x01
-+#define PECI_CRASHDUMP_AGENT_DATA 0x02
-+
-+ __u8 cc;
-+ __u8 param0;
-+ __u16 param1;
-+ __u8 param2;
-+ __u8 rx_len;
-+ __u8 data[8];
-+} __attribute__((__packed__));
-+
-+struct peci_crashdump_get_frame_msg {
-+#define PECI_CRASHDUMP_DISC_WRITE_LEN 9
-+#define PECI_CRASHDUMP_DISC_READ_LEN_BASE 1
-+#define PECI_CRASHDUMP_DISC_VERSION 0
-+#define PECI_CRASHDUMP_DISC_OPCODE 1
-+#define PECI_CRASHDUMP_GET_FRAME_WRITE_LEN 10
-+#define PECI_CRASHDUMP_GET_FRAME_READ_LEN_BASE 1
-+#define PECI_CRASHDUMP_GET_FRAME_VERSION 0
-+#define PECI_CRASHDUMP_GET_FRAME_OPCODE 3
-+#define PECI_CRASHDUMP_CMD 0x71
-+
-+ __u8 addr;
-+ __u8 padding0;
-+ __u16 param0;
-+ __u16 param1;
-+ __u16 param2;
-+ __u8 rx_len;
-+ __u8 cc;
-+ __u8 padding1[2];
-+ __u8 data[16];
-+} __attribute__((__packed__));
-+
- #define PECI_IOC_BASE 0xb7
-
- #define PECI_IOC_XFER \
-@@ -464,6 +624,9 @@ struct peci_wr_pci_cfg_local_msg {
- #define PECI_IOC_WR_IA_MSR \
- _IOWR(PECI_IOC_BASE, PECI_CMD_WR_IA_MSR, struct peci_wr_ia_msr_msg)
-
-+#define PECI_IOC_RD_IA_MSREX \
-+ _IOWR(PECI_IOC_BASE, PECI_CMD_RD_IA_MSREX, struct peci_rd_ia_msrex_msg)
-+
- #define PECI_IOC_RD_PCI_CFG \
- _IOWR(PECI_IOC_BASE, PECI_CMD_RD_PCI_CFG, struct peci_rd_pci_cfg_msg)
-
-@@ -478,4 +641,20 @@ struct peci_wr_pci_cfg_local_msg {
- _IOWR(PECI_IOC_BASE, PECI_CMD_WR_PCI_CFG_LOCAL, \
- struct peci_wr_pci_cfg_local_msg)
-
-+#define PECI_IOC_RD_END_PT_CFG \
-+ _IOWR(PECI_IOC_BASE, PECI_CMD_RD_END_PT_CFG, \
-+ struct peci_rd_end_pt_cfg_msg)
-+
-+#define PECI_IOC_WR_END_PT_CFG \
-+ _IOWR(PECI_IOC_BASE, PECI_CMD_WR_END_PT_CFG, \
-+ struct peci_wr_end_pt_cfg_msg)
-+
-+#define PECI_IOC_CRASHDUMP_DISC \
-+ _IOWR(PECI_IOC_BASE, PECI_CMD_CRASHDUMP_DISC, \
-+ struct peci_crashdump_disc_msg)
-+
-+#define PECI_IOC_CRASHDUMP_GET_FRAME \
-+ _IOWR(PECI_IOC_BASE, PECI_CMD_CRASHDUMP_GET_FRAME, \
-+ struct peci_crashdump_get_frame_msg)
-+
- #endif /* __PECI_IOCTL_H */
---
-2.7.4
-
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0030-Add-dump-debug-code-into-I2C-drivers.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0030-Add-dump-debug-code-into-I2C-drivers.patch
index bef1d0ae8..c9844e1bd 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0030-Add-dump-debug-code-into-I2C-drivers.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0030-Add-dump-debug-code-into-I2C-drivers.patch
@@ -1,4 +1,4 @@
-From 8b9bca54ec03fb80834eb8d15dd599293af6d971 Mon Sep 17 00:00:00 2001
+From a57f401058e452f9abb6f3233e7f2776af1e6b8d Mon Sep 17 00:00:00 2001
From: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
Date: Fri, 29 Jun 2018 11:00:02 -0700
Subject: [PATCH] Add dump debug code into I2C drivers
@@ -20,10 +20,10 @@ Signed-off-by: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
2 files changed, 50 insertions(+)
diff --git a/drivers/i2c/busses/i2c-aspeed.c b/drivers/i2c/busses/i2c-aspeed.c
-index c2a6e5a27314..e1719b1f2020 100644
+index a7be6f24450b..c113ffa8d5df 100644
--- a/drivers/i2c/busses/i2c-aspeed.c
+++ b/drivers/i2c/busses/i2c-aspeed.c
-@@ -163,6 +163,21 @@ struct aspeed_i2c_bus {
+@@ -169,6 +169,21 @@ struct aspeed_i2c_bus {
#endif /* CONFIG_I2C_SLAVE */
};
@@ -45,7 +45,7 @@ index c2a6e5a27314..e1719b1f2020 100644
static int aspeed_i2c_reset(struct aspeed_i2c_bus *bus);
static int aspeed_i2c_recover_bus(struct aspeed_i2c_bus *bus)
-@@ -652,6 +667,7 @@ static int aspeed_i2c_master_xfer(struct i2c_adapter *adap,
+@@ -657,6 +672,7 @@ static int aspeed_i2c_master_xfer(struct i2c_adapter *adap,
{
struct aspeed_i2c_bus *bus = i2c_get_adapdata(adap);
unsigned long time_left, flags;
@@ -53,7 +53,7 @@ index c2a6e5a27314..e1719b1f2020 100644
spin_lock_irqsave(&bus->lock, flags);
bus->cmd_err = 0;
-@@ -694,6 +710,11 @@ static int aspeed_i2c_master_xfer(struct i2c_adapter *adap,
+@@ -708,6 +724,11 @@ static int aspeed_i2c_master_xfer(struct i2c_adapter *adap,
return -ETIMEDOUT;
}
@@ -65,7 +65,7 @@ index c2a6e5a27314..e1719b1f2020 100644
return bus->master_xfer_result;
}
-@@ -1065,6 +1086,11 @@ static struct platform_driver aspeed_i2c_bus_driver = {
+@@ -1079,6 +1100,11 @@ static struct platform_driver aspeed_i2c_bus_driver = {
};
module_platform_driver(aspeed_i2c_bus_driver);
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0031-Add-high-speed-baud-rate-support-for-UART.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0031-Add-high-speed-baud-rate-support-for-UART.patch
index 931483954..5240a05f5 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0031-Add-high-speed-baud-rate-support-for-UART.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0031-Add-high-speed-baud-rate-support-for-UART.patch
@@ -1,4 +1,4 @@
-From d80fcbb3e9d95a7e926598290012eea88a7c474d Mon Sep 17 00:00:00 2001
+From 0bc792097e73c07bc324e2c9b0172fb27b51a087 Mon Sep 17 00:00:00 2001
From: Yong Li <yong.b.li@linux.intel.com>
Date: Wed, 2 Jan 2019 15:06:43 +0800
Subject: [PATCH] Add high speed baud rate support for UART
@@ -19,7 +19,7 @@ Signed-off-by: Yong Li <yong.b.li@linux.intel.com>
2 files changed, 39 insertions(+), 7 deletions(-)
diff --git a/drivers/clk/clk-aspeed.c b/drivers/clk/clk-aspeed.c
-index 9bd5155598d6..24d56a724969 100644
+index 411ff5fb2c07..5e1c87bc8a99 100644
--- a/drivers/clk/clk-aspeed.c
+++ b/drivers/clk/clk-aspeed.c
@@ -14,7 +14,9 @@
@@ -118,13 +118,13 @@ index 9bd5155598d6..24d56a724969 100644
map,
gd->clock_idx,
diff --git a/include/dt-bindings/clock/aspeed-clock.h b/include/dt-bindings/clock/aspeed-clock.h
-index 64e245fb113f..df2f9fdfe5c1 100644
+index 9ff4f6e4558c..41d531dd0b48 100644
--- a/include/dt-bindings/clock/aspeed-clock.h
+++ b/include/dt-bindings/clock/aspeed-clock.h
@@ -41,6 +41,8 @@
#define ASPEED_CLK_24M 35
- #define ASPEED_CLK_GATE_MAC1RCLK 36
- #define ASPEED_CLK_GATE_MAC2RCLK 37
+ #define ASPEED_CLK_MAC1RCLK 36
+ #define ASPEED_CLK_MAC2RCLK 37
+#define ASPEED_CLK_UART_HS 38
+#define ASPEED_CLK_MAX 39
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0032-misc-aspeed-Add-Aspeed-UART-routing-control-driver.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0032-misc-aspeed-Add-Aspeed-UART-routing-control-driver.patch
index f1507020a..2ba9e5002 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0032-misc-aspeed-Add-Aspeed-UART-routing-control-driver.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0032-misc-aspeed-Add-Aspeed-UART-routing-control-driver.patch
@@ -1,4 +1,4 @@
-From af686df07d23080834332b63fe37ee28b630ca2f Mon Sep 17 00:00:00 2001
+From 09aa5d5af94823f100fb515d45b0a04fc8d7ee4f Mon Sep 17 00:00:00 2001
From: Oskar Senft <osk@google.com>
Date: Wed, 8 Aug 2018 10:15:05 -0400
Subject: [PATCH] misc: aspeed: Add Aspeed UART routing control driver.
@@ -15,13 +15,13 @@ Signed-off-by: Oskar Senft <osk@google.com>
Signed-off-by: Yong Li <yong.b.li@linux.intel.com>
Signed-off-by: Vernon Mauery <vernon.mauery@linux.intel.com>
---
- .../stable/sysfs-driver-aspeed-uart-routing | 14 +
- .../misc-devices/aspeed-uart-routing.txt | 49 +++
- arch/arm/boot/dts/aspeed-g5.dtsi | 6 +
- arch/arm/boot/dts/aspeed-g6.dtsi | 6 +
- drivers/misc/Kconfig | 6 +
- drivers/misc/Makefile | 1 +
- drivers/misc/aspeed-uart-routing.c | 383 ++++++++++++++++++
+ .../ABI/stable/sysfs-driver-aspeed-uart-routing | 14 +
+ Documentation/misc-devices/aspeed-uart-routing.txt | 49 +++
+ arch/arm/boot/dts/aspeed-g5.dtsi | 6 +
+ arch/arm/boot/dts/aspeed-g6.dtsi | 6 +
+ drivers/misc/Kconfig | 6 +
+ drivers/misc/Makefile | 1 +
+ drivers/misc/aspeed-uart-routing.c | 383 +++++++++++++++++++++
7 files changed, 465 insertions(+)
create mode 100644 Documentation/ABI/stable/sysfs-driver-aspeed-uart-routing
create mode 100644 Documentation/misc-devices/aspeed-uart-routing.txt
@@ -49,7 +49,7 @@ index 000000000000..5068737d9c12
+ openbmc@lists.ozlabs.org
diff --git a/Documentation/misc-devices/aspeed-uart-routing.txt b/Documentation/misc-devices/aspeed-uart-routing.txt
new file mode 100644
-index 000000000000..afaf17cb7eda
+index 000000000000..cf1c2a466875
--- /dev/null
+++ b/Documentation/misc-devices/aspeed-uart-routing.txt
@@ -0,0 +1,49 @@
@@ -103,10 +103,10 @@ index 000000000000..afaf17cb7eda
+$ cat /sys/bus/platform/drivers/aspeed-uart-routing/*.uart_routing/uart1
+io1 io2 io3 io4 uart2 [uart3] uart4 io6
diff --git a/arch/arm/boot/dts/aspeed-g5.dtsi b/arch/arm/boot/dts/aspeed-g5.dtsi
-index 26671cc4dbd5..8288002e4f02 100644
+index bd2037e52a94..797013debaa7 100644
--- a/arch/arm/boot/dts/aspeed-g5.dtsi
+++ b/arch/arm/boot/dts/aspeed-g5.dtsi
-@@ -524,6 +524,12 @@
+@@ -523,6 +523,12 @@
status = "disabled";
};
};
@@ -120,10 +120,10 @@ index 26671cc4dbd5..8288002e4f02 100644
peci: bus@1e78b000 {
diff --git a/arch/arm/boot/dts/aspeed-g6.dtsi b/arch/arm/boot/dts/aspeed-g6.dtsi
-index 48de17a24c74..3a6ff98df8ea 100644
+index e4c1ab3d274e..8cc978058f16 100644
--- a/arch/arm/boot/dts/aspeed-g6.dtsi
+++ b/arch/arm/boot/dts/aspeed-g6.dtsi
-@@ -311,6 +311,12 @@
+@@ -291,6 +291,12 @@
compatible = "aspeed,ast2600-pinctrl";
};
@@ -137,10 +137,10 @@ index 48de17a24c74..3a6ff98df8ea 100644
compatible = "aspeed,ast2600-smpmem";
reg = <0x180 0x40>;
diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
-index 50814caba1d3..439f3b0de702 100644
+index 0f9b5a356c93..8af817694648 100644
--- a/drivers/misc/Kconfig
+++ b/drivers/misc/Kconfig
-@@ -463,6 +463,12 @@ config ASPEED_ESPI_SLAVE
+@@ -441,6 +441,12 @@ config ASPEED_ESPI_SLAVE
Control Aspeed ast2500 eSPI slave controller to handle event
which needs the firmware's processing.
@@ -154,10 +154,10 @@ index 50814caba1d3..439f3b0de702 100644
depends on PCI
select CRC32
diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
-index f168e6713440..87958cb74d00 100644
+index 53864687e8fd..a4372208f4de 100644
--- a/drivers/misc/Makefile
+++ b/drivers/misc/Makefile
-@@ -54,6 +54,7 @@ obj-$(CONFIG_ECHO) += echo/
+@@ -52,6 +52,7 @@ obj-$(CONFIG_ECHO) += echo/
obj-$(CONFIG_VEXPRESS_SYSCFG) += vexpress-syscfg.o
obj-$(CONFIG_CXL_BASE) += cxl/
obj-$(CONFIG_ASPEED_ESPI_SLAVE) += aspeed-espi-slave.o
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0034-arm-dts-aspeed-Swap-the-mac-nodes-numbering.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0034-arm-dts-aspeed-Swap-the-mac-nodes-numbering.patch
index 08f406ac1..2f0fd3a31 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0034-arm-dts-aspeed-Swap-the-mac-nodes-numbering.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0034-arm-dts-aspeed-Swap-the-mac-nodes-numbering.patch
@@ -1,4 +1,4 @@
-From 89112c3971a540302834e5e987a1dec236bd752d Mon Sep 17 00:00:00 2001
+From 65c8090f2b418892aee9f239729fa417bd508a00 Mon Sep 17 00:00:00 2001
From: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
Date: Wed, 3 Oct 2018 10:17:58 -0700
Subject: [PATCH] arm: dts: aspeed: Swap the mac nodes numbering
@@ -13,10 +13,10 @@ Signed-off-by: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
2 files changed, 16 insertions(+), 16 deletions(-)
diff --git a/arch/arm/boot/dts/aspeed-g4.dtsi b/arch/arm/boot/dts/aspeed-g4.dtsi
-index 71563972d2fe..78251541a109 100644
+index a70bee24d058..054d97229626 100644
--- a/arch/arm/boot/dts/aspeed-g4.dtsi
+++ b/arch/arm/boot/dts/aspeed-g4.dtsi
-@@ -121,14 +121,6 @@
+@@ -120,14 +120,6 @@
reg = <0x1e6c2000 0x80>;
};
@@ -31,7 +31,7 @@ index 71563972d2fe..78251541a109 100644
mac1: ethernet@1e680000 {
compatible = "aspeed,ast2400-mac", "faraday,ftgmac100";
reg = <0x1e680000 0x180>;
-@@ -137,6 +129,14 @@
+@@ -136,6 +128,14 @@
status = "disabled";
};
@@ -47,10 +47,10 @@ index 71563972d2fe..78251541a109 100644
compatible = "aspeed,ast2400-ehci", "generic-ehci";
reg = <0x1e6a1000 0x100>;
diff --git a/arch/arm/boot/dts/aspeed-g5.dtsi b/arch/arm/boot/dts/aspeed-g5.dtsi
-index 8288002e4f02..6d2c4494ce04 100644
+index 797013debaa7..27ed188296a1 100644
--- a/arch/arm/boot/dts/aspeed-g5.dtsi
+++ b/arch/arm/boot/dts/aspeed-g5.dtsi
-@@ -149,14 +149,6 @@
+@@ -148,14 +148,6 @@
reg = <0x1e6c2000 0x80>;
};
@@ -65,7 +65,7 @@ index 8288002e4f02..6d2c4494ce04 100644
mac1: ethernet@1e680000 {
compatible = "aspeed,ast2500-mac", "faraday,ftgmac100";
reg = <0x1e680000 0x180>;
-@@ -165,6 +157,14 @@
+@@ -164,6 +156,14 @@
status = "disabled";
};
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0039-Add-Aspeed-PWM-driver-which-uses-FTTMR010-timer-IP.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0039-Add-Aspeed-PWM-driver-which-uses-FTTMR010-timer-IP.patch
index e6de3e473..0fdd40d77 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0039-Add-Aspeed-PWM-driver-which-uses-FTTMR010-timer-IP.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0039-Add-Aspeed-PWM-driver-which-uses-FTTMR010-timer-IP.patch
@@ -1,4 +1,4 @@
-From e2df269568c6c0c8c8edbca73118c2dbdaea75bd Mon Sep 17 00:00:00 2001
+From b20b1ce81f4451d9e906b84e7edcc22d4e70e7df Mon Sep 17 00:00:00 2001
From: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
Date: Mon, 11 Feb 2019 17:02:35 -0800
Subject: [PATCH] Add Aspeed PWM driver which uses FTTMR010 timer IP
@@ -18,10 +18,10 @@ Signed-off-by: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
create mode 100644 drivers/pwm/pwm-fttmr010.c
diff --git a/arch/arm/boot/dts/aspeed-g5.dtsi b/arch/arm/boot/dts/aspeed-g5.dtsi
-index 6d2c4494ce04..653e03a0fa4c 100644
+index 27ed188296a1..45202bc3d60c 100644
--- a/arch/arm/boot/dts/aspeed-g5.dtsi
+++ b/arch/arm/boot/dts/aspeed-g5.dtsi
-@@ -342,7 +342,7 @@
+@@ -341,7 +341,7 @@
timer: timer@1e782000 {
/* This timer is a Faraday FTTMR010 derivative */
@@ -31,7 +31,7 @@ index 6d2c4494ce04..653e03a0fa4c 100644
interrupts = <16 17 18 35 36 37 38 39>;
clocks = <&syscon ASPEED_CLK_APB>;
diff --git a/drivers/pwm/Kconfig b/drivers/pwm/Kconfig
-index a7e57516959e..3388f837fcf9 100644
+index e3a2518503ed..21def8cd5af6 100644
--- a/drivers/pwm/Kconfig
+++ b/drivers/pwm/Kconfig
@@ -171,6 +171,15 @@ config PWM_FSL_FTM
@@ -51,7 +51,7 @@ index a7e57516959e..3388f837fcf9 100644
tristate "HiSilicon BVT PWM support"
depends on ARCH_HISI || COMPILE_TEST
diff --git a/drivers/pwm/Makefile b/drivers/pwm/Makefile
-index 76b555b51887..19ecfd82d8c5 100644
+index 26326adf71d7..3a9e9840b5ae 100644
--- a/drivers/pwm/Makefile
+++ b/drivers/pwm/Makefile
@@ -15,6 +15,7 @@ obj-$(CONFIG_PWM_CRC) += pwm-crc.o
@@ -64,7 +64,7 @@ index 76b555b51887..19ecfd82d8c5 100644
obj-$(CONFIG_PWM_IMX1) += pwm-imx1.o
diff --git a/drivers/pwm/pwm-fttmr010.c b/drivers/pwm/pwm-fttmr010.c
new file mode 100644
-index 000000000000..4c929a25e27c
+index 000000000000..283ded6906f1
--- /dev/null
+++ b/drivers/pwm/pwm-fttmr010.c
@@ -0,0 +1,441 @@
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0040-i2c-Add-mux-hold-unhold-msg-types.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0040-i2c-Add-mux-hold-unhold-msg-types.patch
index ce77494f4..198beaa93 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0040-i2c-Add-mux-hold-unhold-msg-types.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0040-i2c-Add-mux-hold-unhold-msg-types.patch
@@ -1,4 +1,4 @@
-From be693c1c21979c067623434aa653f85a83c8eac7 Mon Sep 17 00:00:00 2001
+From ee9cee93b96b791f52295d7763985fdb10903e2b Mon Sep 17 00:00:00 2001
From: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
Date: Fri, 15 Feb 2019 16:05:09 -0800
Subject: [PATCH] i2c: Add mux hold/unhold msg types
@@ -48,10 +48,10 @@ Signed-off-by: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
6 files changed, 214 insertions(+), 16 deletions(-)
diff --git a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-base.c
-index 9c440fa6a3dd..53ff27cae5d3 100644
+index 5f6a4985f2bc..d1cd7afe4068 100644
--- a/drivers/i2c/i2c-core-base.c
+++ b/drivers/i2c/i2c-core-base.c
-@@ -1299,6 +1299,25 @@ int i2c_handle_smbus_host_notify(struct i2c_adapter *adap, unsigned short addr)
+@@ -1297,6 +1297,25 @@ int i2c_handle_smbus_host_notify(struct i2c_adapter *adap, unsigned short addr)
}
EXPORT_SYMBOL_GPL(i2c_handle_smbus_host_notify);
@@ -77,7 +77,7 @@ index 9c440fa6a3dd..53ff27cae5d3 100644
static int i2c_register_adapter(struct i2c_adapter *adap)
{
int res = -EINVAL;
-@@ -1381,6 +1400,9 @@ static int i2c_register_adapter(struct i2c_adapter *adap)
+@@ -1379,6 +1398,9 @@ static int i2c_register_adapter(struct i2c_adapter *adap)
bus_for_each_drv(&i2c_bus_type, NULL, adap, __process_new_adapter);
mutex_unlock(&core_lock);
@@ -87,7 +87,7 @@ index 9c440fa6a3dd..53ff27cae5d3 100644
return 0;
out_reg:
-@@ -1601,6 +1623,8 @@ void i2c_del_adapter(struct i2c_adapter *adap)
+@@ -1599,6 +1621,8 @@ void i2c_del_adapter(struct i2c_adapter *adap)
idr_remove(&i2c_adapter_idr, adap->nr);
mutex_unlock(&core_lock);
@@ -96,7 +96,7 @@ index 9c440fa6a3dd..53ff27cae5d3 100644
/* Clear the device structure in case this adapter is ever going to be
added again */
memset(&adap->dev, 0, sizeof(adap->dev));
-@@ -1950,7 +1974,9 @@ static int i2c_check_for_quirks(struct i2c_adapter *adap, struct i2c_msg *msgs,
+@@ -1948,7 +1972,9 @@ static int i2c_check_for_quirks(struct i2c_adapter *adap, struct i2c_msg *msgs,
*/
int __i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
{
@@ -106,7 +106,7 @@ index 9c440fa6a3dd..53ff27cae5d3 100644
int ret, try;
if (WARN_ON(!msgs || num < 1))
-@@ -1963,6 +1989,25 @@ int __i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
+@@ -1961,6 +1987,25 @@ int __i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
if (adap->quirks && i2c_check_for_quirks(adap, msgs, num))
return -EOPNOTSUPP;
@@ -132,7 +132,7 @@ index 9c440fa6a3dd..53ff27cae5d3 100644
/*
* i2c_trace_msg_key gets enabled when tracepoint i2c_transfer gets
* enabled. This is an efficient way of keeping the for-loop from
-@@ -1999,6 +2044,9 @@ int __i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
+@@ -1997,6 +2042,9 @@ int __i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
trace_i2c_result(adap, num, ret);
}
@@ -142,7 +142,7 @@ index 9c440fa6a3dd..53ff27cae5d3 100644
return ret;
}
EXPORT_SYMBOL(__i2c_transfer);
-@@ -2017,6 +2065,7 @@ EXPORT_SYMBOL(__i2c_transfer);
+@@ -2015,6 +2063,7 @@ EXPORT_SYMBOL(__i2c_transfer);
*/
int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
{
@@ -150,7 +150,7 @@ index 9c440fa6a3dd..53ff27cae5d3 100644
int ret;
if (!adap->algo->master_xfer) {
-@@ -2040,12 +2089,25 @@ int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
+@@ -2038,12 +2087,25 @@ int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
* one (discarding status on the second message) or errno
* (discarding status on the first one).
*/
@@ -431,7 +431,7 @@ index c5a977320f82..47f8763d6ed2 100644
int max_adapters;
struct i2c_adapter *adapter[0];
diff --git a/include/linux/i2c.h b/include/linux/i2c.h
-index fa5552c2307b..92c795ce9081 100644
+index 1361637c369d..b4055d133338 100644
--- a/include/linux/i2c.h
+++ b/include/linux/i2c.h
@@ -711,6 +711,13 @@ struct i2c_adapter {
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0042-Add-bus-timeout-ms-and-retries-device-tree-propertie.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0042-Add-bus-timeout-ms-and-retries-device-tree-propertie.patch
index 0a9bccf23..5b9d4ef8b 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0042-Add-bus-timeout-ms-and-retries-device-tree-propertie.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0042-Add-bus-timeout-ms-and-retries-device-tree-propertie.patch
@@ -1,4 +1,4 @@
-From 04af6987c904225fdd4657e7b87874edd11c4e0b Mon Sep 17 00:00:00 2001
+From 37e7896bf297edef4f2877998ca7a5c086015591 Mon Sep 17 00:00:00 2001
From: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
Date: Thu, 7 Mar 2019 15:17:40 -0800
Subject: [PATCH] Add bus-timeout-ms and #retries device tree properties
@@ -59,10 +59,10 @@ index 44efafdfd7f5..e382931cf3d6 100644
used by the device. I2C core will assign "irq" interrupt (or the very first
interrupt if not using interrupt names) as primary interrupt for the slave.
diff --git a/drivers/i2c/busses/i2c-aspeed.c b/drivers/i2c/busses/i2c-aspeed.c
-index e1719b1f2020..58bdbe472721 100644
+index c113ffa8d5df..7becfcd67142 100644
--- a/drivers/i2c/busses/i2c-aspeed.c
+++ b/drivers/i2c/busses/i2c-aspeed.c
-@@ -1018,7 +1018,6 @@ static int aspeed_i2c_probe_bus(struct platform_device *pdev)
+@@ -1032,7 +1032,6 @@ static int aspeed_i2c_probe_bus(struct platform_device *pdev)
spin_lock_init(&bus->lock);
init_completion(&bus->cmd_complete);
bus->adap.owner = THIS_MODULE;
@@ -71,10 +71,10 @@ index e1719b1f2020..58bdbe472721 100644
bus->adap.dev.parent = &pdev->dev;
bus->adap.dev.of_node = pdev->dev.of_node;
diff --git a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-base.c
-index 302d2d0c87d0..825e2d85d5a7 100644
+index d1cd7afe4068..1db991220fae 100644
--- a/drivers/i2c/i2c-core-base.c
+++ b/drivers/i2c/i2c-core-base.c
-@@ -1320,6 +1320,7 @@ static void i2c_adapter_hold_timer_callback(struct timer_list *t)
+@@ -1318,6 +1318,7 @@ static void i2c_adapter_hold_timer_callback(struct timer_list *t)
static int i2c_register_adapter(struct i2c_adapter *adap)
{
@@ -82,7 +82,7 @@ index 302d2d0c87d0..825e2d85d5a7 100644
int res = -EINVAL;
/* Can't register until after driver model init */
-@@ -1347,8 +1348,15 @@ static int i2c_register_adapter(struct i2c_adapter *adap)
+@@ -1345,8 +1346,15 @@ static int i2c_register_adapter(struct i2c_adapter *adap)
INIT_LIST_HEAD(&adap->userspace_clients);
/* Set default timeout to 1 second if not already set */
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0043-char-ipmi-Add-clock-control-logic-into-Aspeed-LPC-BT.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0043-char-ipmi-Add-clock-control-logic-into-Aspeed-LPC-BT.patch
index c59ff1e9c..6cc7d1138 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0043-char-ipmi-Add-clock-control-logic-into-Aspeed-LPC-BT.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0043-char-ipmi-Add-clock-control-logic-into-Aspeed-LPC-BT.patch
@@ -1,4 +1,4 @@
-From 4d90c5ba05ee3e8a4bf5e4c1a5fdcf2664b1800b Mon Sep 17 00:00:00 2001
+From 301c1aaba9e59eb593406d878451e3ea4fe355bb Mon Sep 17 00:00:00 2001
From: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
Date: Wed, 13 Mar 2019 15:04:16 -0700
Subject: [PATCH] char: ipmi: Add clock control logic into Aspeed LPC BT driver
@@ -17,11 +17,11 @@ BT driver.
Signed-off-by: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
Signed-off-by: Vernon Mauery <vernon.mauery@linux.intel.com>
---
- .../bindings/ipmi/aspeed,ast2400-ibt-bmc.txt | 3 +++
- arch/arm/boot/dts/aspeed-g4.dtsi | 1 +
- arch/arm/boot/dts/aspeed-g5.dtsi | 1 +
- arch/arm/boot/dts/aspeed-g6.dtsi | 1 +
- drivers/char/ipmi/bt-bmc.c | 24 ++++++++++++++++++-
+ .../bindings/ipmi/aspeed,ast2400-ibt-bmc.txt | 3 +++
+ arch/arm/boot/dts/aspeed-g4.dtsi | 1 +
+ arch/arm/boot/dts/aspeed-g5.dtsi | 1 +
+ arch/arm/boot/dts/aspeed-g6.dtsi | 1 +
+ drivers/char/ipmi/bt-bmc.c | 24 +++++++++++++++++++++-
5 files changed, 29 insertions(+), 1 deletion(-)
diff --git a/Documentation/devicetree/bindings/ipmi/aspeed,ast2400-ibt-bmc.txt b/Documentation/devicetree/bindings/ipmi/aspeed,ast2400-ibt-bmc.txt
@@ -44,10 +44,10 @@ index 028268fd99ee..d13887d60f19 100644
+ clocks = <&syscon ASPEED_CLK_GATE_LCLK>;
};
diff --git a/arch/arm/boot/dts/aspeed-g4.dtsi b/arch/arm/boot/dts/aspeed-g4.dtsi
-index 78251541a109..b3b6720fb6fb 100644
+index 054d97229626..db962ab435af 100644
--- a/arch/arm/boot/dts/aspeed-g4.dtsi
+++ b/arch/arm/boot/dts/aspeed-g4.dtsi
-@@ -387,6 +387,7 @@
+@@ -386,6 +386,7 @@
ibt: ibt@c0 {
compatible = "aspeed,ast2400-ibt-bmc";
reg = <0xc0 0x18>;
@@ -56,10 +56,10 @@ index 78251541a109..b3b6720fb6fb 100644
status = "disabled";
};
diff --git a/arch/arm/boot/dts/aspeed-g5.dtsi b/arch/arm/boot/dts/aspeed-g5.dtsi
-index 653e03a0fa4c..49f792eafdd1 100644
+index 45202bc3d60c..c4724ec27041 100644
--- a/arch/arm/boot/dts/aspeed-g5.dtsi
+++ b/arch/arm/boot/dts/aspeed-g5.dtsi
-@@ -500,6 +500,7 @@
+@@ -499,6 +499,7 @@
ibt: ibt@c0 {
compatible = "aspeed,ast2500-ibt-bmc";
reg = <0xc0 0x18>;
@@ -68,10 +68,10 @@ index 653e03a0fa4c..49f792eafdd1 100644
status = "disabled";
};
diff --git a/arch/arm/boot/dts/aspeed-g6.dtsi b/arch/arm/boot/dts/aspeed-g6.dtsi
-index 653e03a0fa4c..49f792eafdd1 100644
+index 8cc978058f16..a557a7e6fe8d 100644
--- a/arch/arm/boot/dts/aspeed-g6.dtsi
+++ b/arch/arm/boot/dts/aspeed-g6.dtsi
-@@ -546,6 +546,7 @@
+@@ -524,6 +524,7 @@
ibt: ibt@c0 {
compatible = "aspeed,ast2600-ibt-bmc";
reg = <0xc0 0x18>;
@@ -80,7 +80,7 @@ index 653e03a0fa4c..49f792eafdd1 100644
status = "disabled";
};
diff --git a/drivers/char/ipmi/bt-bmc.c b/drivers/char/ipmi/bt-bmc.c
-index 40b9927c072c..a4ec9d1743d7 100644
+index 0e600449931b..87bf3ff28542 100644
--- a/drivers/char/ipmi/bt-bmc.c
+++ b/drivers/char/ipmi/bt-bmc.c
@@ -5,6 +5,7 @@
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0044-misc-Add-clock-control-logic-into-Aspeed-LPC-SNOOP-d.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0044-misc-Add-clock-control-logic-into-Aspeed-LPC-SNOOP-d.patch
index bfd65cbe3..b3ace73f6 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0044-misc-Add-clock-control-logic-into-Aspeed-LPC-SNOOP-d.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0044-misc-Add-clock-control-logic-into-Aspeed-LPC-SNOOP-d.patch
@@ -1,4 +1,4 @@
-From f2e7fb51e4832a0da2fdb8fb267471b54581312b Mon Sep 17 00:00:00 2001
+From 404f73827714e324a21250b1a855fdc10fcfaf51 Mon Sep 17 00:00:00 2001
From: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
Date: Wed, 13 Mar 2019 15:27:48 -0700
Subject: [PATCH] misc: Add clock control logic into Aspeed LPC SNOOP driver
@@ -21,14 +21,13 @@ Signed-off-by: Vernon Mauery <vernon.mauery@linux.intel.com>
arch/arm/boot/dts/aspeed-g5.dtsi | 1 +
arch/arm/boot/dts/aspeed-g6.dtsi | 1 +
drivers/soc/aspeed/aspeed-lpc-snoop.c | 30 +++++++++++++++++++++++++++---
- 3 files changed, 29 insertions(+), 3 deletions(-)
4 files changed, 30 insertions(+), 3 deletions(-)
diff --git a/arch/arm/boot/dts/aspeed-g4.dtsi b/arch/arm/boot/dts/aspeed-g4.dtsi
-index b3b6720fb6fb..58c5148194a3 100644
+index db962ab435af..24a20384b5e8 100644
--- a/arch/arm/boot/dts/aspeed-g4.dtsi
+++ b/arch/arm/boot/dts/aspeed-g4.dtsi
-@@ -370,6 +370,7 @@
+@@ -369,6 +369,7 @@
compatible = "aspeed,ast2400-lpc-snoop";
reg = <0x0 0x80>;
interrupts = <8>;
@@ -37,10 +36,10 @@ index b3b6720fb6fb..58c5148194a3 100644
};
diff --git a/arch/arm/boot/dts/aspeed-g5.dtsi b/arch/arm/boot/dts/aspeed-g5.dtsi
-index 49f792eafdd1..955789d8c736 100644
+index c4724ec27041..18d2a465c0ed 100644
--- a/arch/arm/boot/dts/aspeed-g5.dtsi
+++ b/arch/arm/boot/dts/aspeed-g5.dtsi
-@@ -483,6 +483,7 @@
+@@ -482,6 +482,7 @@
compatible = "aspeed,ast2500-lpc-snoop";
reg = <0x0 0x80>;
interrupts = <8>;
@@ -49,10 +48,10 @@ index 49f792eafdd1..955789d8c736 100644
};
diff --git a/arch/arm/boot/dts/aspeed-g6.dtsi b/arch/arm/boot/dts/aspeed-g6.dtsi
-index 49f792eafdd1..955789d8c736 100644
+index a557a7e6fe8d..4035d7bd647e 100644
--- a/arch/arm/boot/dts/aspeed-g6.dtsi
+++ b/arch/arm/boot/dts/aspeed-g6.dtsi
-@@ -400,6 +527,7 @@
+@@ -507,6 +507,7 @@
compatible = "aspeed,ast2600-lpc-snoop";
reg = <0x0 0x80>;
interrupts = <GIC_SPI 144 IRQ_TYPE_LEVEL_HIGH>;
@@ -61,7 +60,7 @@ index 49f792eafdd1..955789d8c736 100644
};
diff --git a/drivers/soc/aspeed/aspeed-lpc-snoop.c b/drivers/soc/aspeed/aspeed-lpc-snoop.c
-index 48f7ac238861..96ea52db25be 100644
+index c7b4ac066b40..ed272677fc82 100644
--- a/drivers/soc/aspeed/aspeed-lpc-snoop.c
+++ b/drivers/soc/aspeed/aspeed-lpc-snoop.c
@@ -11,6 +11,7 @@
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0045-char-ipmi-Add-clock-control-logic-into-Aspeed-LPC-KC.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0045-char-ipmi-Add-clock-control-logic-into-Aspeed-LPC-KC.patch
index f8515351b..1c0903d71 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0045-char-ipmi-Add-clock-control-logic-into-Aspeed-LPC-KC.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0045-char-ipmi-Add-clock-control-logic-into-Aspeed-LPC-KC.patch
@@ -1,4 +1,4 @@
-From 9a6eafbba9f5d972065f65431093ec74968cae39 Mon Sep 17 00:00:00 2001
+From cd62ca008a771bd6b7aeb06526c37d8435f86648 Mon Sep 17 00:00:00 2001
From: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
Date: Wed, 13 Mar 2019 15:36:34 -0700
Subject: [PATCH] char: ipmi: Add clock control logic into Aspeed LPC KCS
@@ -21,9 +21,9 @@ Signed-off-by: Vernon Mauery <vernon.mauery@linux.intel.com>
.../devicetree/bindings/ipmi/aspeed-kcs-bmc.txt | 3 ++
arch/arm/boot/dts/aspeed-g4.dtsi | 35 ++++++++++++++++++++
arch/arm/boot/dts/aspeed-g5.dtsi | 6 +++-
- arch/arm/boot/dts/aspeed-g6.dtsi | 4 ++
+ arch/arm/boot/dts/aspeed-g6.dtsi | 6 ++++
drivers/char/ipmi/kcs_bmc_aspeed.c | 37 ++++++++++++++++++----
- 5 files changed, 77 insertions(+), 8 deletions(-)
+ 5 files changed, 79 insertions(+), 8 deletions(-)
diff --git a/Documentation/devicetree/bindings/ipmi/aspeed-kcs-bmc.txt b/Documentation/devicetree/bindings/ipmi/aspeed-kcs-bmc.txt
index d98a9bf45d6c..3453eb0bf8f2 100644
@@ -47,10 +47,10 @@ index d98a9bf45d6c..3453eb0bf8f2 100644
kcs_addr = <0xCA2>;
status = "okay";
diff --git a/arch/arm/boot/dts/aspeed-g4.dtsi b/arch/arm/boot/dts/aspeed-g4.dtsi
-index 58c5148194a3..14e5dc260a3b 100644
+index 24a20384b5e8..fc6f4e009db7 100644
--- a/arch/arm/boot/dts/aspeed-g4.dtsi
+++ b/arch/arm/boot/dts/aspeed-g4.dtsi
-@@ -348,6 +348,33 @@
+@@ -347,6 +347,33 @@
lpc_bmc: lpc-bmc@0 {
compatible = "aspeed,ast2400-lpc-bmc";
reg = <0x0 0x80>;
@@ -84,7 +84,7 @@ index 58c5148194a3..14e5dc260a3b 100644
};
lpc_host: lpc-host@80 {
-@@ -359,6 +386,14 @@
+@@ -358,6 +385,14 @@
#size-cells = <1>;
ranges = <0x0 0x80 0x1e0>;
@@ -100,10 +100,10 @@ index 58c5148194a3..14e5dc260a3b 100644
compatible = "aspeed,ast2400-lpc-ctrl";
reg = <0x0 0x80>;
diff --git a/arch/arm/boot/dts/aspeed-g5.dtsi b/arch/arm/boot/dts/aspeed-g5.dtsi
-index 955789d8c736..19739183c1c8 100644
+index 18d2a465c0ed..751a8f0316d6 100644
--- a/arch/arm/boot/dts/aspeed-g5.dtsi
+++ b/arch/arm/boot/dts/aspeed-g5.dtsi
-@@ -135,7 +135,7 @@
+@@ -134,7 +134,7 @@
};
vic: interrupt-controller@1e6c0080 {
@@ -112,7 +112,7 @@ index 955789d8c736..19739183c1c8 100644
interrupt-controller;
#interrupt-cells = <1>;
valid-sources = <0xfefff7ff 0x0807ffff>;
-@@ -440,18 +440,21 @@
+@@ -439,18 +439,21 @@
compatible = "aspeed,ast2500-kcs-bmc";
interrupts = <8>;
kcs_chan = <1>;
@@ -134,7 +134,7 @@ index 955789d8c736..19739183c1c8 100644
status = "disabled";
};
};
-@@ -469,6 +472,7 @@
+@@ -468,6 +471,7 @@
compatible = "aspeed,ast2500-kcs-bmc";
interrupts = <8>;
kcs_chan = <4>;
@@ -143,10 +143,10 @@ index 955789d8c736..19739183c1c8 100644
};
diff --git a/arch/arm/boot/dts/aspeed-g6.dtsi b/arch/arm/boot/dts/aspeed-g6.dtsi
-index 955789d8c736..19739183c1c8 100644
+index 4035d7bd647e..0e35c4598df5 100644
--- a/arch/arm/boot/dts/aspeed-g6.dtsi
+++ b/arch/arm/boot/dts/aspeed-g6.dtsi
-@@ -356,18 +477,23 @@
+@@ -463,18 +463,23 @@
kcs1: kcs1@0 {
compatible = "aspeed,ast2600-kcs-bmc";
interrupts = <GIC_SPI 138 IRQ_TYPE_LEVEL_HIGH>;
@@ -170,7 +170,7 @@ index 955789d8c736..19739183c1c8 100644
kcs_chan = <3>;
status = "disabled";
};
-@@ -385,6 +511,7 @@
+@@ -492,6 +497,7 @@
kcs4: kcs4@0 {
compatible = "aspeed,ast2600-kcs-bmc";
interrupts = <GIC_SPI 141 IRQ_TYPE_LEVEL_HIGH>;
@@ -179,7 +179,7 @@ index 955789d8c736..19739183c1c8 100644
status = "disabled";
};
diff --git a/drivers/char/ipmi/kcs_bmc_aspeed.c b/drivers/char/ipmi/kcs_bmc_aspeed.c
-index 3c955946e647..bd1912dc5a21 100644
+index a0a8bb89c9b3..94cfb879f520 100644
--- a/drivers/char/ipmi/kcs_bmc_aspeed.c
+++ b/drivers/char/ipmi/kcs_bmc_aspeed.c
@@ -1,11 +1,10 @@
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0047-misc-Block-error-printing-on-probe-defer-case-in-Asp.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0047-misc-Block-error-printing-on-probe-defer-case-in-Asp.patch
index c3d1f4e8d..8e9c793ba 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0047-misc-Block-error-printing-on-probe-defer-case-in-Asp.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0047-misc-Block-error-printing-on-probe-defer-case-in-Asp.patch
@@ -1,4 +1,4 @@
-From 108b39883e73f822b8f03e0d3fe3818b85b29b41 Mon Sep 17 00:00:00 2001
+From 5473931df3348b7284c16fac3e7d336c9d0c4294 Mon Sep 17 00:00:00 2001
From: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
Date: Wed, 13 Mar 2019 15:57:08 -0700
Subject: [PATCH] misc: Block error printing on probe defer case in Aspeed LPC
@@ -14,10 +14,10 @@ Signed-off-by: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/drivers/soc/aspeed/aspeed-lpc-ctrl.c b/drivers/soc/aspeed/aspeed-lpc-ctrl.c
-index 01ed21e8bfee..ae08419834a3 100644
+index f4ac14c40518..432128b8db87 100644
--- a/drivers/soc/aspeed/aspeed-lpc-ctrl.c
+++ b/drivers/soc/aspeed/aspeed-lpc-ctrl.c
-@@ -252,8 +252,10 @@ static int aspeed_lpc_ctrl_probe(struct platform_device *pdev)
+@@ -265,8 +265,10 @@ static int aspeed_lpc_ctrl_probe(struct platform_device *pdev)
lpc_ctrl->clk = devm_clk_get(dev, NULL);
if (IS_ERR(lpc_ctrl->clk)) {
@@ -30,7 +30,7 @@ index 01ed21e8bfee..ae08419834a3 100644
}
rc = clk_prepare_enable(lpc_ctrl->clk);
if (rc) {
-@@ -275,6 +277,7 @@ static int aspeed_lpc_ctrl_probe(struct platform_device *pdev)
+@@ -288,6 +290,7 @@ static int aspeed_lpc_ctrl_probe(struct platform_device *pdev)
err:
clk_disable_unprepare(lpc_ctrl->clk);
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0051-Add-AST2500-JTAG-device.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0051-Add-AST2500-JTAG-device.patch
index abfbcd68c..c3c1eb509 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0051-Add-AST2500-JTAG-device.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0051-Add-AST2500-JTAG-device.patch
@@ -1,4 +1,4 @@
-From ce35414258a8541a8b81a4a8a929bcf9cdface97 Mon Sep 17 00:00:00 2001
+From fe860284fb5e062b430dc7b882144f69cb605353 Mon Sep 17 00:00:00 2001
From: "Hunt, Bryan" <bryan.hunt@intel.com>
Date: Mon, 6 May 2019 10:02:14 -0700
Subject: [PATCH] Add AST2500 JTAG device
@@ -11,10 +11,10 @@ Signed-off-by: Hunt, Bryan <bryan.hunt@intel.com>
1 file changed, 9 insertions(+)
diff --git a/arch/arm/boot/dts/aspeed-g5.dtsi b/arch/arm/boot/dts/aspeed-g5.dtsi
-index 19739183c1c8..3d615708a0cd 100644
+index 751a8f0316d6..eb1f9c9d9cca 100644
--- a/arch/arm/boot/dts/aspeed-g5.dtsi
+++ b/arch/arm/boot/dts/aspeed-g5.dtsi
-@@ -419,6 +419,15 @@
+@@ -418,6 +418,15 @@
pinctrl-0 = <&pinctrl_espi_default>;
};
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0052-drivers-jtag-Add-JTAG-core-driver.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0052-drivers-jtag-Add-JTAG-core-driver.patch
index 4162046e7..484c576b9 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0052-drivers-jtag-Add-JTAG-core-driver.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0052-drivers-jtag-Add-JTAG-core-driver.patch
@@ -1,4 +1,4 @@
-From 45dd8ca9bb83b688aa0d0b5472fd0b1ed9fcf29a Mon Sep 17 00:00:00 2001
+From ea6fa8fd6e36c776d560b4f69d1ede4a3bbe5f6b Mon Sep 17 00:00:00 2001
From: "Corona, Ernesto" <ernesto.corona@intel.com>
Date: Fri, 7 Jun 2019 07:37:39 -0800
Subject: [PATCH v29 1/6] drivers: jtag: Add JTAG core driver
@@ -267,20 +267,20 @@ Comments pointed by Tobias Klauser <tklauser@distanz.ch>
create mode 100644 include/uapi/linux/jtag.h
diff --git a/drivers/Kconfig b/drivers/Kconfig
-index 92f4a9bb83f1..7403af7ffa85 100644
+index 4322efa37732..e5e4fe21b5d9 100644
--- a/drivers/Kconfig
+++ b/drivers/Kconfig
-@@ -232,4 +232,5 @@ source "drivers/counter/Kconfig"
+@@ -230,4 +230,5 @@ source "drivers/counter/Kconfig"
source "drivers/peci/Kconfig"
+source "drivers/jtag/Kconfig"
endmenu
diff --git a/drivers/Makefile b/drivers/Makefile
-index 47cad1b9f992..cd240910c56e 100644
+index 82f78cfedf69..297047d4ed9b 100644
--- a/drivers/Makefile
+++ b/drivers/Makefile
-@@ -188,3 +188,4 @@ obj-$(CONFIG_GNSS) += gnss/
+@@ -187,3 +187,4 @@ obj-$(CONFIG_GNSS) += gnss/
obj-$(CONFIG_INTERCONNECT) += interconnect/
obj-$(CONFIG_COUNTER) += counter/
obj-$(CONFIG_PECI) += peci/
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0056-Documentation-jtag-Add-JTAG-core-driver-ioctl-number.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0056-Documentation-jtag-Add-JTAG-core-driver-ioctl-number.patch
index 3efe2c5f3..99cc318ab 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0056-Documentation-jtag-Add-JTAG-core-driver-ioctl-number.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0056-Documentation-jtag-Add-JTAG-core-driver-ioctl-number.patch
@@ -1,4 +1,4 @@
-From d5efb0ec2b28bc1074472ab4eaa937dcbe490f6a Mon Sep 17 00:00:00 2001
+From 8618c2cd920d10681859bacf8af56c71f168b5a2 Mon Sep 17 00:00:00 2001
From: "Corona, Ernesto" <ernesto.corona@intel.com>
Date: Sun, 10 Mar 2019 11:48:18 -0800
Subject: [PATCH] Documentation jtag: Add JTAG core driver ioctl number
@@ -40,10 +40,10 @@ Cc: Bryan Hunt <bryan.hunt@intel.com>
1 file changed, 2 insertions(+)
diff --git a/Documentation/ioctl/ioctl-number.rst b/Documentation/ioctl/ioctl-number.rst
-index 7f8dcae7a230..4d25966d44e5 100644
+index de23fc0f0fce..339d198c5adf 100644
--- a/Documentation/ioctl/ioctl-number.rst
+++ b/Documentation/ioctl/ioctl-number.rst
-@@ -332,6 +332,8 @@ Code Seq# Include File Comments
+@@ -333,6 +333,8 @@ Code Seq# Include File Comments
<mailto:vgo@ratio.de>
0xB1 00-1F PPPoX
<mailto:mostrows@styx.uwaterloo.ca>
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0057-drivers-jtag-Add-JTAG-core-driver-Maintainers.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0057-drivers-jtag-Add-JTAG-core-driver-Maintainers.patch
index b5f5a93a0..9ff92d8ec 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0057-drivers-jtag-Add-JTAG-core-driver-Maintainers.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0057-drivers-jtag-Add-JTAG-core-driver-Maintainers.patch
@@ -1,7 +1,7 @@
-From 01fc94b1193f4e97d498e2bcb05dfe21b991b01d Mon Sep 17 00:00:00 2001
+From fcf8f7fd3cb4e0b08cb1540f9ff9e5988cd285d1 Mon Sep 17 00:00:00 2001
From: "Corona, Ernesto" <ernesto.corona@intel.com>
Date: Sun, 10 Mar 2019 11:49:37 -0800
-Subject: [PATCH v29 6/6] drivers: jtag: Add JTAG core driver Maintainers
+Subject: [PATCH] drivers: jtag: Add JTAG core driver Maintainers
JTAG class driver provide infrastructure to support hardware/software
JTAG platform drivers. It provide user layer API interface for flashing
@@ -24,10 +24,10 @@ Cc: Bryan Hunt <bryan.hunt@intel.com>
1 file changed, 11 insertions(+)
diff --git a/MAINTAINERS b/MAINTAINERS
-index f5c5eaa69f2f..92b0932c4b9f 100644
+index 3bbdae50eb7e..34ab3522801c 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
-@@ -8709,6 +8709,17 @@ L: linux-serial@vger.kernel.org
+@@ -8819,6 +8819,17 @@ L: linux-serial@vger.kernel.org
S: Orphan
F: drivers/tty/serial/jsm/
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0061-i2c-aspeed-add-buffer-mode-transfer-support.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0061-i2c-aspeed-add-buffer-mode-transfer-support.patch
index b5c1840b5..24032087b 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0061-i2c-aspeed-add-buffer-mode-transfer-support.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0061-i2c-aspeed-add-buffer-mode-transfer-support.patch
@@ -1,4 +1,4 @@
-From b4a70701c6bc4eb5bbbf622716498948ae2211bc Mon Sep 17 00:00:00 2001
+From fcee7b9515140486ad8c58beedf88cf12cd09b8b Mon Sep 17 00:00:00 2001
From: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
Date: Tue, 11 Jun 2019 15:07:08 -0700
Subject: [PATCH] i2c: aspeed: add buffer mode transfer support
@@ -108,10 +108,10 @@ index 7da7e813b2b0..0ff3539cee95 100644
+ };
};
diff --git a/arch/arm/boot/dts/aspeed-g4.dtsi b/arch/arm/boot/dts/aspeed-g4.dtsi
-index ae6f24fd5ba3..c8235c1b381b 100644
+index fc6f4e009db7..0b30c8546e64 100644
--- a/arch/arm/boot/dts/aspeed-g4.dtsi
+++ b/arch/arm/boot/dts/aspeed-g4.dtsi
-@@ -519,12 +519,21 @@
+@@ -518,12 +518,21 @@
};
&i2c {
@@ -138,7 +138,7 @@ index ae6f24fd5ba3..c8235c1b381b 100644
};
i2c0: i2c-bus@40 {
-@@ -532,7 +541,7 @@
+@@ -531,7 +540,7 @@
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -147,7 +147,7 @@ index ae6f24fd5ba3..c8235c1b381b 100644
compatible = "aspeed,ast2400-i2c-bus";
clocks = <&syscon ASPEED_CLK_APB>;
resets = <&syscon ASPEED_RESET_I2C>;
-@@ -548,7 +557,7 @@
+@@ -547,7 +556,7 @@
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -156,7 +156,7 @@ index ae6f24fd5ba3..c8235c1b381b 100644
compatible = "aspeed,ast2400-i2c-bus";
clocks = <&syscon ASPEED_CLK_APB>;
resets = <&syscon ASPEED_RESET_I2C>;
-@@ -564,7 +573,7 @@
+@@ -563,7 +572,7 @@
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -165,7 +165,7 @@ index ae6f24fd5ba3..c8235c1b381b 100644
compatible = "aspeed,ast2400-i2c-bus";
clocks = <&syscon ASPEED_CLK_APB>;
resets = <&syscon ASPEED_RESET_I2C>;
-@@ -581,7 +590,7 @@
+@@ -580,7 +589,7 @@
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -174,7 +174,7 @@ index ae6f24fd5ba3..c8235c1b381b 100644
compatible = "aspeed,ast2400-i2c-bus";
clocks = <&syscon ASPEED_CLK_APB>;
resets = <&syscon ASPEED_RESET_I2C>;
-@@ -598,7 +607,7 @@
+@@ -597,7 +606,7 @@
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -183,7 +183,7 @@ index ae6f24fd5ba3..c8235c1b381b 100644
compatible = "aspeed,ast2400-i2c-bus";
clocks = <&syscon ASPEED_CLK_APB>;
resets = <&syscon ASPEED_RESET_I2C>;
-@@ -615,7 +624,7 @@
+@@ -614,7 +623,7 @@
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -192,7 +192,7 @@ index ae6f24fd5ba3..c8235c1b381b 100644
compatible = "aspeed,ast2400-i2c-bus";
clocks = <&syscon ASPEED_CLK_APB>;
resets = <&syscon ASPEED_RESET_I2C>;
-@@ -632,7 +641,7 @@
+@@ -631,7 +640,7 @@
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -201,7 +201,7 @@ index ae6f24fd5ba3..c8235c1b381b 100644
compatible = "aspeed,ast2400-i2c-bus";
clocks = <&syscon ASPEED_CLK_APB>;
resets = <&syscon ASPEED_RESET_I2C>;
-@@ -649,7 +658,7 @@
+@@ -648,7 +657,7 @@
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -210,7 +210,7 @@ index ae6f24fd5ba3..c8235c1b381b 100644
compatible = "aspeed,ast2400-i2c-bus";
clocks = <&syscon ASPEED_CLK_APB>;
resets = <&syscon ASPEED_RESET_I2C>;
-@@ -666,7 +675,7 @@
+@@ -665,7 +674,7 @@
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -219,7 +219,7 @@ index ae6f24fd5ba3..c8235c1b381b 100644
compatible = "aspeed,ast2400-i2c-bus";
clocks = <&syscon ASPEED_CLK_APB>;
resets = <&syscon ASPEED_RESET_I2C>;
-@@ -683,7 +692,7 @@
+@@ -682,7 +691,7 @@
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -228,7 +228,7 @@ index ae6f24fd5ba3..c8235c1b381b 100644
compatible = "aspeed,ast2400-i2c-bus";
clocks = <&syscon ASPEED_CLK_APB>;
resets = <&syscon ASPEED_RESET_I2C>;
-@@ -700,7 +709,7 @@
+@@ -699,7 +708,7 @@
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -237,7 +237,7 @@ index ae6f24fd5ba3..c8235c1b381b 100644
compatible = "aspeed,ast2400-i2c-bus";
clocks = <&syscon ASPEED_CLK_APB>;
resets = <&syscon ASPEED_RESET_I2C>;
-@@ -717,7 +726,7 @@
+@@ -716,7 +725,7 @@
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -246,7 +246,7 @@ index ae6f24fd5ba3..c8235c1b381b 100644
compatible = "aspeed,ast2400-i2c-bus";
clocks = <&syscon ASPEED_CLK_APB>;
resets = <&syscon ASPEED_RESET_I2C>;
-@@ -734,7 +743,7 @@
+@@ -733,7 +742,7 @@
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -255,7 +255,7 @@ index ae6f24fd5ba3..c8235c1b381b 100644
compatible = "aspeed,ast2400-i2c-bus";
clocks = <&syscon ASPEED_CLK_APB>;
resets = <&syscon ASPEED_RESET_I2C>;
-@@ -751,7 +760,7 @@
+@@ -750,7 +759,7 @@
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -265,10 +265,10 @@ index ae6f24fd5ba3..c8235c1b381b 100644
clocks = <&syscon ASPEED_CLK_APB>;
resets = <&syscon ASPEED_RESET_I2C>;
diff --git a/arch/arm/boot/dts/aspeed-g5.dtsi b/arch/arm/boot/dts/aspeed-g5.dtsi
-index 8f87c848b7f4..af5f54f9ade2 100644
+index eb1f9c9d9cca..51593a0a8a23 100644
--- a/arch/arm/boot/dts/aspeed-g5.dtsi
+++ b/arch/arm/boot/dts/aspeed-g5.dtsi
-@@ -616,12 +616,21 @@
+@@ -615,12 +615,21 @@
};
&i2c {
@@ -295,7 +295,7 @@ index 8f87c848b7f4..af5f54f9ade2 100644
};
i2c0: i2c-bus@40 {
-@@ -629,7 +638,7 @@
+@@ -628,7 +637,7 @@
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -304,7 +304,7 @@ index 8f87c848b7f4..af5f54f9ade2 100644
compatible = "aspeed,ast2500-i2c-bus";
clocks = <&syscon ASPEED_CLK_APB>;
resets = <&syscon ASPEED_RESET_I2C>;
-@@ -645,7 +654,7 @@
+@@ -644,7 +653,7 @@
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -313,7 +313,7 @@ index 8f87c848b7f4..af5f54f9ade2 100644
compatible = "aspeed,ast2500-i2c-bus";
clocks = <&syscon ASPEED_CLK_APB>;
resets = <&syscon ASPEED_RESET_I2C>;
-@@ -661,7 +670,7 @@
+@@ -660,7 +669,7 @@
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -322,7 +322,7 @@ index 8f87c848b7f4..af5f54f9ade2 100644
compatible = "aspeed,ast2500-i2c-bus";
clocks = <&syscon ASPEED_CLK_APB>;
resets = <&syscon ASPEED_RESET_I2C>;
-@@ -678,7 +687,7 @@
+@@ -677,7 +686,7 @@
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -331,7 +331,7 @@ index 8f87c848b7f4..af5f54f9ade2 100644
compatible = "aspeed,ast2500-i2c-bus";
clocks = <&syscon ASPEED_CLK_APB>;
resets = <&syscon ASPEED_RESET_I2C>;
-@@ -695,7 +704,7 @@
+@@ -694,7 +703,7 @@
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -340,7 +340,7 @@ index 8f87c848b7f4..af5f54f9ade2 100644
compatible = "aspeed,ast2500-i2c-bus";
clocks = <&syscon ASPEED_CLK_APB>;
resets = <&syscon ASPEED_RESET_I2C>;
-@@ -712,7 +721,7 @@
+@@ -711,7 +720,7 @@
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -349,7 +349,7 @@ index 8f87c848b7f4..af5f54f9ade2 100644
compatible = "aspeed,ast2500-i2c-bus";
clocks = <&syscon ASPEED_CLK_APB>;
resets = <&syscon ASPEED_RESET_I2C>;
-@@ -729,7 +738,7 @@
+@@ -728,7 +737,7 @@
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -358,7 +358,7 @@ index 8f87c848b7f4..af5f54f9ade2 100644
compatible = "aspeed,ast2500-i2c-bus";
clocks = <&syscon ASPEED_CLK_APB>;
resets = <&syscon ASPEED_RESET_I2C>;
-@@ -746,7 +755,7 @@
+@@ -745,7 +754,7 @@
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -367,7 +367,7 @@ index 8f87c848b7f4..af5f54f9ade2 100644
compatible = "aspeed,ast2500-i2c-bus";
clocks = <&syscon ASPEED_CLK_APB>;
resets = <&syscon ASPEED_RESET_I2C>;
-@@ -763,7 +772,7 @@
+@@ -762,7 +771,7 @@
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -376,7 +376,7 @@ index 8f87c848b7f4..af5f54f9ade2 100644
compatible = "aspeed,ast2500-i2c-bus";
clocks = <&syscon ASPEED_CLK_APB>;
resets = <&syscon ASPEED_RESET_I2C>;
-@@ -780,7 +789,7 @@
+@@ -779,7 +788,7 @@
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -385,7 +385,7 @@ index 8f87c848b7f4..af5f54f9ade2 100644
compatible = "aspeed,ast2500-i2c-bus";
clocks = <&syscon ASPEED_CLK_APB>;
resets = <&syscon ASPEED_RESET_I2C>;
-@@ -797,7 +806,7 @@
+@@ -796,7 +805,7 @@
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -394,7 +394,7 @@ index 8f87c848b7f4..af5f54f9ade2 100644
compatible = "aspeed,ast2500-i2c-bus";
clocks = <&syscon ASPEED_CLK_APB>;
resets = <&syscon ASPEED_RESET_I2C>;
-@@ -814,7 +823,7 @@
+@@ -813,7 +822,7 @@
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -403,7 +403,7 @@ index 8f87c848b7f4..af5f54f9ade2 100644
compatible = "aspeed,ast2500-i2c-bus";
clocks = <&syscon ASPEED_CLK_APB>;
resets = <&syscon ASPEED_RESET_I2C>;
-@@ -831,7 +840,7 @@
+@@ -830,7 +839,7 @@
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -412,7 +412,7 @@ index 8f87c848b7f4..af5f54f9ade2 100644
compatible = "aspeed,ast2500-i2c-bus";
clocks = <&syscon ASPEED_CLK_APB>;
resets = <&syscon ASPEED_RESET_I2C>;
-@@ -848,7 +857,7 @@
+@@ -847,7 +856,7 @@
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -422,10 +422,10 @@ index 8f87c848b7f4..af5f54f9ade2 100644
clocks = <&syscon ASPEED_CLK_APB>;
resets = <&syscon ASPEED_RESET_I2C>;
diff --git a/arch/arm/boot/dts/aspeed-g6.dtsi b/arch/arm/boot/dts/aspeed-g6.dtsi
-index 6db29ee769d5..b3a0085cd066 100644
+index 0e35c4598df5..eeace4b7b725 100644
--- a/arch/arm/boot/dts/aspeed-g6.dtsi
+++ b/arch/arm/boot/dts/aspeed-g6.dtsi
-@@ -594,7 +594,7 @@
+@@ -713,7 +713,7 @@
#address-cells = <1>;
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -434,7 +434,7 @@ index 6db29ee769d5..b3a0085cd066 100644
compatible = "aspeed,ast2600-i2c-bus";
clocks = <&syscon ASPEED_CLK_APB2>;
resets = <&syscon ASPEED_RESET_I2C>;
-@@ -609,7 +609,7 @@
+@@ -728,7 +728,7 @@
#address-cells = <1>;
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -443,7 +443,7 @@ index 6db29ee769d5..b3a0085cd066 100644
compatible = "aspeed,ast2600-i2c-bus";
clocks = <&syscon ASPEED_CLK_APB2>;
resets = <&syscon ASPEED_RESET_I2C>;
-@@ -624,7 +624,7 @@
+@@ -743,7 +743,7 @@
#address-cells = <1>;
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -452,7 +452,7 @@ index 6db29ee769d5..b3a0085cd066 100644
compatible = "aspeed,ast2600-i2c-bus";
clocks = <&syscon ASPEED_CLK_APB2>;
resets = <&syscon ASPEED_RESET_I2C>;
-@@ -639,7 +639,7 @@
+@@ -758,7 +758,7 @@
#address-cells = <1>;
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -461,7 +461,7 @@ index 6db29ee769d5..b3a0085cd066 100644
compatible = "aspeed,ast2600-i2c-bus";
clocks = <&syscon ASPEED_CLK_APB2>;
resets = <&syscon ASPEED_RESET_I2C>;
-@@ -654,7 +654,7 @@
+@@ -773,7 +773,7 @@
#address-cells = <1>;
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -470,7 +470,7 @@ index 6db29ee769d5..b3a0085cd066 100644
compatible = "aspeed,ast2600-i2c-bus";
clocks = <&syscon ASPEED_CLK_APB2>;
resets = <&syscon ASPEED_RESET_I2C>;
-@@ -669,7 +669,7 @@
+@@ -788,7 +788,7 @@
#address-cells = <1>;
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -479,7 +479,7 @@ index 6db29ee769d5..b3a0085cd066 100644
compatible = "aspeed,ast2600-i2c-bus";
clocks = <&syscon ASPEED_CLK_APB2>;
resets = <&syscon ASPEED_RESET_I2C>;
-@@ -684,7 +684,7 @@
+@@ -803,7 +803,7 @@
#address-cells = <1>;
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -488,7 +488,7 @@ index 6db29ee769d5..b3a0085cd066 100644
compatible = "aspeed,ast2600-i2c-bus";
clocks = <&syscon ASPEED_CLK_APB2>;
resets = <&syscon ASPEED_RESET_I2C>;
-@@ -699,7 +699,7 @@
+@@ -818,7 +818,7 @@
#address-cells = <1>;
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -497,7 +497,7 @@ index 6db29ee769d5..b3a0085cd066 100644
compatible = "aspeed,ast2600-i2c-bus";
clocks = <&syscon ASPEED_CLK_APB2>;
resets = <&syscon ASPEED_RESET_I2C>;
-@@ -714,7 +714,7 @@
+@@ -833,7 +833,7 @@
#address-cells = <1>;
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -506,7 +506,7 @@ index 6db29ee769d5..b3a0085cd066 100644
compatible = "aspeed,ast2600-i2c-bus";
clocks = <&syscon ASPEED_CLK_APB2>;
resets = <&syscon ASPEED_RESET_I2C>;
-@@ -729,7 +729,7 @@
+@@ -848,7 +848,7 @@
#address-cells = <1>;
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -515,7 +515,7 @@ index 6db29ee769d5..b3a0085cd066 100644
compatible = "aspeed,ast2600-i2c-bus";
clocks = <&syscon ASPEED_CLK_APB2>;
resets = <&syscon ASPEED_RESET_I2C>;
-@@ -744,7 +744,7 @@
+@@ -863,7 +863,7 @@
#address-cells = <1>;
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -524,7 +524,7 @@ index 6db29ee769d5..b3a0085cd066 100644
compatible = "aspeed,ast2600-i2c-bus";
clocks = <&syscon ASPEED_CLK_APB2>;
resets = <&syscon ASPEED_RESET_I2C>;
-@@ -759,7 +759,7 @@
+@@ -878,7 +878,7 @@
#address-cells = <1>;
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -533,7 +533,7 @@ index 6db29ee769d5..b3a0085cd066 100644
compatible = "aspeed,ast2600-i2c-bus";
clocks = <&syscon ASPEED_CLK_APB2>;
resets = <&syscon ASPEED_RESET_I2C>;
-@@ -774,7 +774,7 @@
+@@ -893,7 +893,7 @@
#address-cells = <1>;
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -542,7 +542,7 @@ index 6db29ee769d5..b3a0085cd066 100644
compatible = "aspeed,ast2600-i2c-bus";
clocks = <&syscon ASPEED_CLK_APB2>;
resets = <&syscon ASPEED_RESET_I2C>;
-@@ -789,7 +789,7 @@
+@@ -908,7 +908,7 @@
#address-cells = <1>;
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -551,7 +551,7 @@ index 6db29ee769d5..b3a0085cd066 100644
compatible = "aspeed,ast2600-i2c-bus";
clocks = <&syscon ASPEED_CLK_APB2>;
resets = <&syscon ASPEED_RESET_I2C>;
-@@ -804,7 +804,7 @@
+@@ -923,7 +923,7 @@
#address-cells = <1>;
#size-cells = <0>;
#interrupt-cells = <1>;
@@ -560,7 +560,7 @@ index 6db29ee769d5..b3a0085cd066 100644
compatible = "aspeed,ast2600-i2c-bus";
clocks = <&syscon ASPEED_CLK_APB2>;
resets = <&syscon ASPEED_RESET_I2C>;
-@@ -819,7 +819,7 @@
+@@ -938,7 +938,7 @@
#address-cells = <1>;
#size-cells = <0>;
#interrupt-cells = <1>;
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0062-i2c-aspeed-add-DMA-mode-transfer-support.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0062-i2c-aspeed-add-DMA-mode-transfer-support.patch
index f3021d410..a66e759e7 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0062-i2c-aspeed-add-DMA-mode-transfer-support.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0062-i2c-aspeed-add-DMA-mode-transfer-support.patch
@@ -1,4 +1,4 @@
-From 09aece99e18a0fd0612c865394424afa74050171 Mon Sep 17 00:00:00 2001
+From 0d237f4b5111aa192a1ae9aaee6e6779761906bc Mon Sep 17 00:00:00 2001
From: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
Date: Tue, 18 Jun 2019 08:47:50 -0700
Subject: [PATCH] i2c: aspeed: add DMA mode transfer support
@@ -61,7 +61,7 @@ index 0ff3539cee95..d3f4a39f7ba6 100644
+ };
};
diff --git a/drivers/i2c/busses/i2c-aspeed.c b/drivers/i2c/busses/i2c-aspeed.c
-index e37f0764d184..4567ec3498dc 100644
+index 1b338492c68a..8dc6723bfaaf 100644
--- a/drivers/i2c/busses/i2c-aspeed.c
+++ b/drivers/i2c/busses/i2c-aspeed.c
@@ -10,6 +10,8 @@
@@ -91,7 +91,7 @@ index e37f0764d184..4567ec3498dc 100644
#define ASPEED_I2CD_RX_BUFF_ENABLE BIT(7)
#define ASPEED_I2CD_TX_BUFF_ENABLE BIT(6)
#define ASPEED_I2CD_M_STOP_CMD BIT(5)
-@@ -129,6 +135,14 @@
+@@ -135,6 +141,14 @@
#define ASPEED_I2CD_BUF_TX_COUNT_MASK GENMASK(15, 8)
#define ASPEED_I2CD_BUF_OFFSET_MASK GENMASK(5, 0)
@@ -106,7 +106,7 @@ index e37f0764d184..4567ec3498dc 100644
enum aspeed_i2c_master_state {
ASPEED_I2C_MASTER_INACTIVE,
ASPEED_I2C_MASTER_PENDING,
-@@ -179,6 +193,12 @@ struct aspeed_i2c_bus {
+@@ -185,6 +199,12 @@ struct aspeed_i2c_bus {
size_t buf_size;
u8 buf_offset;
u8 buf_page;
@@ -119,7 +119,7 @@ index e37f0764d184..4567ec3498dc 100644
#if IS_ENABLED(CONFIG_I2C_SLAVE)
struct i2c_client *slave;
enum aspeed_i2c_slave_state slave_state;
-@@ -298,9 +318,13 @@ static u32 aspeed_i2c_slave_irq(struct aspeed_i2c_bus *bus, u32 irq_status)
+@@ -304,9 +324,13 @@ static u32 aspeed_i2c_slave_irq(struct aspeed_i2c_bus *bus, u32 irq_status)
/* Slave was sent something. */
if (irq_status & ASPEED_I2CD_INTR_RX_DONE) {
@@ -134,7 +134,7 @@ index e37f0764d184..4567ec3498dc 100644
value = readb(bus->buf_base);
else
value = readl(bus->base + ASPEED_I2C_BYTE_BUF_REG) >> 8;
-@@ -320,7 +344,18 @@ static u32 aspeed_i2c_slave_irq(struct aspeed_i2c_bus *bus, u32 irq_status)
+@@ -326,7 +350,18 @@ static u32 aspeed_i2c_slave_irq(struct aspeed_i2c_bus *bus, u32 irq_status)
if (irq_status & ASPEED_I2CD_INTR_NORMAL_STOP) {
if (bus->slave_state == ASPEED_I2C_SLAVE_WRITE_RECEIVED &&
irq_status & ASPEED_I2CD_INTR_RX_DONE) {
@@ -154,7 +154,7 @@ index e37f0764d184..4567ec3498dc 100644
len = FIELD_GET(ASPEED_I2CD_BUF_RX_COUNT_MASK,
readl(bus->base +
ASPEED_I2C_BUF_CTRL_REG));
-@@ -364,7 +399,15 @@ static u32 aspeed_i2c_slave_irq(struct aspeed_i2c_bus *bus, u32 irq_status)
+@@ -370,7 +405,15 @@ static u32 aspeed_i2c_slave_irq(struct aspeed_i2c_bus *bus, u32 irq_status)
case ASPEED_I2C_SLAVE_WRITE_REQUESTED:
bus->slave_state = ASPEED_I2C_SLAVE_WRITE_RECEIVED;
i2c_slave_event(slave, I2C_SLAVE_WRITE_REQUESTED, &value);
@@ -171,7 +171,7 @@ index e37f0764d184..4567ec3498dc 100644
writel(FIELD_PREP(ASPEED_I2CD_BUF_RX_SIZE_MASK,
bus->buf_size - 1) |
FIELD_PREP(ASPEED_I2CD_BUF_OFFSET_MASK,
-@@ -376,7 +419,25 @@ static u32 aspeed_i2c_slave_irq(struct aspeed_i2c_bus *bus, u32 irq_status)
+@@ -382,7 +425,25 @@ static u32 aspeed_i2c_slave_irq(struct aspeed_i2c_bus *bus, u32 irq_status)
break;
case ASPEED_I2C_SLAVE_WRITE_RECEIVED:
i2c_slave_event(slave, I2C_SLAVE_WRITE_RECEIVED, &value);
@@ -198,7 +198,7 @@ index e37f0764d184..4567ec3498dc 100644
len = FIELD_GET(ASPEED_I2CD_BUF_RX_COUNT_MASK,
readl(bus->base +
ASPEED_I2C_BUF_CTRL_REG));
-@@ -440,7 +501,23 @@ static void aspeed_i2c_do_start(struct aspeed_i2c_bus *bus)
+@@ -446,7 +507,23 @@ static void aspeed_i2c_do_start(struct aspeed_i2c_bus *bus)
if (msg->flags & I2C_M_RD) {
command |= ASPEED_I2CD_M_RX_CMD;
@@ -223,7 +223,7 @@ index e37f0764d184..4567ec3498dc 100644
command |= ASPEED_I2CD_RX_BUFF_ENABLE;
if (msg->len > bus->buf_size) {
-@@ -461,7 +538,26 @@ static void aspeed_i2c_do_start(struct aspeed_i2c_bus *bus)
+@@ -467,7 +544,26 @@ static void aspeed_i2c_do_start(struct aspeed_i2c_bus *bus)
command |= ASPEED_I2CD_M_S_RX_CMD_LAST;
}
} else {
@@ -251,7 +251,7 @@ index e37f0764d184..4567ec3498dc 100644
int i;
command |= ASPEED_I2CD_TX_BUFF_ENABLE;
-@@ -497,7 +593,8 @@ static void aspeed_i2c_do_start(struct aspeed_i2c_bus *bus)
+@@ -503,7 +599,8 @@ static void aspeed_i2c_do_start(struct aspeed_i2c_bus *bus)
}
}
@@ -261,7 +261,7 @@ index e37f0764d184..4567ec3498dc 100644
writel(slave_addr, bus->base + ASPEED_I2C_BYTE_BUF_REG);
writel(command, bus->base + ASPEED_I2C_CMD_REG);
}
-@@ -653,7 +750,28 @@ static u32 aspeed_i2c_master_irq(struct aspeed_i2c_bus *bus, u32 irq_status)
+@@ -649,7 +746,28 @@ static u32 aspeed_i2c_master_irq(struct aspeed_i2c_bus *bus, u32 irq_status)
if (bus->buf_index < msg->len) {
command = ASPEED_I2CD_M_TX_CMD;
@@ -291,7 +291,7 @@ index e37f0764d184..4567ec3498dc 100644
u8 wbuf[4];
int i;
-@@ -704,7 +822,15 @@ static u32 aspeed_i2c_master_irq(struct aspeed_i2c_bus *bus, u32 irq_status)
+@@ -700,7 +818,15 @@ static u32 aspeed_i2c_master_irq(struct aspeed_i2c_bus *bus, u32 irq_status)
}
irq_handled |= ASPEED_I2CD_INTR_RX_DONE;
@@ -308,7 +308,7 @@ index e37f0764d184..4567ec3498dc 100644
len = FIELD_GET(ASPEED_I2CD_BUF_RX_COUNT_MASK,
readl(bus->base +
ASPEED_I2C_BUF_CTRL_REG));
-@@ -732,7 +858,25 @@ static u32 aspeed_i2c_master_irq(struct aspeed_i2c_bus *bus, u32 irq_status)
+@@ -728,7 +854,25 @@ static u32 aspeed_i2c_master_irq(struct aspeed_i2c_bus *bus, u32 irq_status)
if (bus->buf_index < msg->len) {
command = ASPEED_I2CD_M_RX_CMD;
bus->master_state = ASPEED_I2C_MASTER_RX;
@@ -335,7 +335,7 @@ index e37f0764d184..4567ec3498dc 100644
command |= ASPEED_I2CD_RX_BUFF_ENABLE;
if (msg->len - bus->buf_index >
-@@ -1222,7 +1366,51 @@ static int aspeed_i2c_probe_bus(struct platform_device *pdev)
+@@ -1235,7 +1379,51 @@ static int aspeed_i2c_probe_bus(struct platform_device *pdev)
sram_enabled = false;
}
@@ -388,7 +388,7 @@ index e37f0764d184..4567ec3498dc 100644
struct resource *res = platform_get_resource(pdev,
IORESOURCE_MEM, 1);
-@@ -1262,24 +1450,33 @@ static int aspeed_i2c_probe_bus(struct platform_device *pdev)
+@@ -1275,24 +1463,33 @@ static int aspeed_i2c_probe_bus(struct platform_device *pdev)
*/
ret = aspeed_i2c_init(bus, pdev);
if (ret < 0)
@@ -426,7 +426,7 @@ index e37f0764d184..4567ec3498dc 100644
}
static int aspeed_i2c_remove_bus(struct platform_device *pdev)
-@@ -1297,6 +1494,10 @@ static int aspeed_i2c_remove_bus(struct platform_device *pdev)
+@@ -1310,6 +1507,10 @@ static int aspeed_i2c_remove_bus(struct platform_device *pdev)
reset_control_assert(bus->rst);
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0063-i2c-aspeed-add-general-call-support.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0063-i2c-aspeed-add-general-call-support.patch
index 381197a64..2f51c3fc9 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0063-i2c-aspeed-add-general-call-support.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0063-i2c-aspeed-add-general-call-support.patch
@@ -1,4 +1,4 @@
-From f9f2e586985f90197b30208599bd37a9fd7a7f63 Mon Sep 17 00:00:00 2001
+From 3f73215941667176ba05f358f4ee08816299bd32 Mon Sep 17 00:00:00 2001
From: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
Date: Wed, 1 May 2019 13:27:34 -0700
Subject: [PATCH] i2c: aspeed: add general call support
@@ -28,7 +28,7 @@ index d3f4a39f7ba6..c1ee99398517 100644
specified.
- #retries : Number of retries for master transfer.
diff --git a/drivers/i2c/busses/i2c-aspeed.c b/drivers/i2c/busses/i2c-aspeed.c
-index 4567ec3498dc..3e72068f6a2b 100644
+index 8dc6723bfaaf..891b2b5c4b7a 100644
--- a/drivers/i2c/busses/i2c-aspeed.c
+++ b/drivers/i2c/busses/i2c-aspeed.c
@@ -59,6 +59,7 @@
@@ -47,7 +47,7 @@ index 4567ec3498dc..3e72068f6a2b 100644
#define ASPEED_I2CD_INTR_SLAVE_MATCH BIT(7)
#define ASPEED_I2CD_INTR_SCL_TIMEOUT BIT(6)
#define ASPEED_I2CD_INTR_ABNORMAL BIT(5)
-@@ -161,6 +163,8 @@ enum aspeed_i2c_slave_state {
+@@ -167,6 +169,8 @@ enum aspeed_i2c_slave_state {
ASPEED_I2C_SLAVE_READ_PROCESSED,
ASPEED_I2C_SLAVE_WRITE_REQUESTED,
ASPEED_I2C_SLAVE_WRITE_RECEIVED,
@@ -56,7 +56,7 @@ index 4567ec3498dc..3e72068f6a2b 100644
ASPEED_I2C_SLAVE_STOP,
};
-@@ -202,6 +206,8 @@ struct aspeed_i2c_bus {
+@@ -208,6 +212,8 @@ struct aspeed_i2c_bus {
#if IS_ENABLED(CONFIG_I2C_SLAVE)
struct i2c_client *slave;
enum aspeed_i2c_slave_state slave_state;
@@ -65,7 +65,7 @@ index 4567ec3498dc..3e72068f6a2b 100644
#endif /* CONFIG_I2C_SLAVE */
};
-@@ -309,6 +315,12 @@ static u32 aspeed_i2c_slave_irq(struct aspeed_i2c_bus *bus, u32 irq_status)
+@@ -315,6 +321,12 @@ static u32 aspeed_i2c_slave_irq(struct aspeed_i2c_bus *bus, u32 irq_status)
bus->slave_state = ASPEED_I2C_SLAVE_START;
}
@@ -78,7 +78,7 @@ index 4567ec3498dc..3e72068f6a2b 100644
/* Slave is not currently active, irq was for someone else. */
if (bus->slave_state == ASPEED_I2C_SLAVE_INACTIVE)
return irq_handled;
-@@ -336,6 +348,21 @@ static u32 aspeed_i2c_slave_irq(struct aspeed_i2c_bus *bus, u32 irq_status)
+@@ -342,6 +354,21 @@ static u32 aspeed_i2c_slave_irq(struct aspeed_i2c_bus *bus, u32 irq_status)
else
bus->slave_state =
ASPEED_I2C_SLAVE_WRITE_REQUESTED;
@@ -100,7 +100,7 @@ index 4567ec3498dc..3e72068f6a2b 100644
}
irq_handled |= ASPEED_I2CD_INTR_RX_DONE;
}
-@@ -456,11 +483,16 @@ static u32 aspeed_i2c_slave_irq(struct aspeed_i2c_bus *bus, u32 irq_status)
+@@ -462,11 +489,16 @@ static u32 aspeed_i2c_slave_irq(struct aspeed_i2c_bus *bus, u32 irq_status)
bus->base + ASPEED_I2C_CMD_REG);
}
break;
@@ -117,7 +117,7 @@ index 4567ec3498dc..3e72068f6a2b 100644
/* Slave was just started. Waiting for the next event. */;
break;
default:
-@@ -1071,6 +1103,8 @@ static void __aspeed_i2c_reg_slave(struct aspeed_i2c_bus *bus, u16 slave_addr)
+@@ -1084,6 +1116,8 @@ static void __aspeed_i2c_reg_slave(struct aspeed_i2c_bus *bus, u16 slave_addr)
/* Turn on slave mode. */
func_ctrl_reg_val = readl(bus->base + ASPEED_I2C_FUN_CTRL_REG);
func_ctrl_reg_val |= ASPEED_I2CD_SLAVE_EN;
@@ -126,7 +126,7 @@ index 4567ec3498dc..3e72068f6a2b 100644
writel(func_ctrl_reg_val, bus->base + ASPEED_I2C_FUN_CTRL_REG);
}
-@@ -1109,6 +1143,8 @@ static int aspeed_i2c_unreg_slave(struct i2c_client *client)
+@@ -1122,6 +1156,8 @@ static int aspeed_i2c_unreg_slave(struct i2c_client *client)
/* Turn off slave mode. */
func_ctrl_reg_val = readl(bus->base + ASPEED_I2C_FUN_CTRL_REG);
func_ctrl_reg_val &= ~ASPEED_I2CD_SLAVE_EN;
@@ -135,7 +135,7 @@ index 4567ec3498dc..3e72068f6a2b 100644
writel(func_ctrl_reg_val, bus->base + ASPEED_I2C_FUN_CTRL_REG);
bus->slave = NULL;
-@@ -1256,6 +1292,9 @@ static int aspeed_i2c_init(struct aspeed_i2c_bus *bus,
+@@ -1269,6 +1305,9 @@ static int aspeed_i2c_init(struct aspeed_i2c_bus *bus,
bus->base + ASPEED_I2C_FUN_CTRL_REG);
#if IS_ENABLED(CONFIG_I2C_SLAVE)
@@ -164,7 +164,7 @@ index 2c7a6038409c..1d4db584b393 100644
case I2C_SLAVE_WRITE_RECEIVED:
diff --git a/include/linux/i2c.h b/include/linux/i2c.h
-index 92c795ce9081..1e5c74888160 100644
+index b4055d133338..52369ea150b4 100644
--- a/include/linux/i2c.h
+++ b/include/linux/i2c.h
@@ -365,6 +365,7 @@ enum i2c_slave_event {
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0068-i2c-aspeed-add-H-W-timeout-support.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0068-i2c-aspeed-add-H-W-timeout-support.patch
index ba564e695..a5f4fa216 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0068-i2c-aspeed-add-H-W-timeout-support.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0068-i2c-aspeed-add-H-W-timeout-support.patch
@@ -1,4 +1,4 @@
-From 25a38287274f9c39eb8355d51ba06203efdb07aa Mon Sep 17 00:00:00 2001
+From 3e359be7e8a96b068479d01aa671ff642d291bca Mon Sep 17 00:00:00 2001
From: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
Date: Thu, 11 Jul 2019 13:53:34 -0700
Subject: [PATCH] i2c: aspeed: add H/W timeout support
@@ -11,7 +11,7 @@ Signed-off-by: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
1 file changed, 76 insertions(+), 6 deletions(-)
diff --git a/drivers/i2c/busses/i2c-aspeed.c b/drivers/i2c/busses/i2c-aspeed.c
-index 127bc69952ca..542b0f4017eb 100644
+index 891b2b5c4b7a..71ebf3bbf38b 100644
--- a/drivers/i2c/busses/i2c-aspeed.c
+++ b/drivers/i2c/busses/i2c-aspeed.c
@@ -55,6 +55,7 @@
@@ -59,7 +59,7 @@ index 127bc69952ca..542b0f4017eb 100644
ASPEED_I2CD_INTR_BUS_RECOVER_DONE | \
ASPEED_I2CD_INTR_SCL_TIMEOUT | \
ASPEED_I2CD_INTR_ABNORMAL | \
-@@ -180,6 +189,7 @@ struct aspeed_i2c_bus {
+@@ -186,6 +195,7 @@ struct aspeed_i2c_bus {
u32 divisor);
unsigned long parent_clk_frequency;
u32 bus_frequency;
@@ -67,7 +67,7 @@ index 127bc69952ca..542b0f4017eb 100644
/* Transaction state. */
enum aspeed_i2c_master_state master_state;
struct i2c_msg *msgs;
-@@ -297,6 +307,14 @@ static int aspeed_i2c_recover_bus(struct aspeed_i2c_bus *bus)
+@@ -303,6 +313,14 @@ static int aspeed_i2c_recover_bus(struct aspeed_i2c_bus *bus)
}
#if IS_ENABLED(CONFIG_I2C_SLAVE)
@@ -82,7 +82,7 @@ index 127bc69952ca..542b0f4017eb 100644
static u32 aspeed_i2c_slave_irq(struct aspeed_i2c_bus *bus, u32 irq_status)
{
u32 command, irq_handled = 0;
-@@ -307,6 +325,14 @@ static u32 aspeed_i2c_slave_irq(struct aspeed_i2c_bus *bus, u32 irq_status)
+@@ -313,6 +331,14 @@ static u32 aspeed_i2c_slave_irq(struct aspeed_i2c_bus *bus, u32 irq_status)
if (!slave)
return 0;
@@ -97,7 +97,7 @@ index 127bc69952ca..542b0f4017eb 100644
command = readl(bus->base + ASPEED_I2C_CMD_REG);
/* Slave was requested, restart state machine. */
-@@ -649,7 +675,7 @@ static void aspeed_i2c_next_msg_or_stop(struct aspeed_i2c_bus *bus)
+@@ -655,7 +681,7 @@ static void aspeed_i2c_next_msg_or_stop(struct aspeed_i2c_bus *bus)
}
}
@@ -106,7 +106,7 @@ index 127bc69952ca..542b0f4017eb 100644
{
if (irq_status & ASPEED_I2CD_INTR_ARBIT_LOSS)
return -EAGAIN;
-@@ -680,9 +706,9 @@ static u32 aspeed_i2c_master_irq(struct aspeed_i2c_bus *bus, u32 irq_status)
+@@ -686,9 +712,9 @@ static u32 aspeed_i2c_master_irq(struct aspeed_i2c_bus *bus, u32 irq_status)
* should clear the command queue effectively taking us back to the
* INACTIVE state.
*/
@@ -118,7 +118,7 @@ index 127bc69952ca..542b0f4017eb 100644
irq_status);
irq_handled |= (irq_status & ASPEED_I2CD_INTR_MASTER_ERRORS);
if (bus->master_state != ASPEED_I2C_MASTER_INACTIVE) {
-@@ -1251,6 +1277,7 @@ static u32 aspeed_i2c_25xx_get_clk_reg_val(struct device *dev, u32 divisor)
+@@ -1264,6 +1290,7 @@ static u32 aspeed_i2c_25xx_get_clk_reg_val(struct device *dev, u32 divisor)
/* precondition: bus.lock has been acquired. */
static int aspeed_i2c_init_clk(struct aspeed_i2c_bus *bus)
{
@@ -126,7 +126,7 @@ index 127bc69952ca..542b0f4017eb 100644
u32 divisor, clk_reg_val;
divisor = DIV_ROUND_UP(bus->parent_clk_frequency, bus->bus_frequency);
-@@ -1259,8 +1286,46 @@ static int aspeed_i2c_init_clk(struct aspeed_i2c_bus *bus)
+@@ -1272,8 +1299,46 @@ static int aspeed_i2c_init_clk(struct aspeed_i2c_bus *bus)
ASPEED_I2CD_TIME_THDSTA_MASK |
ASPEED_I2CD_TIME_TACST_MASK);
clk_reg_val |= bus->get_clk_reg_val(bus->dev, divisor);
@@ -174,7 +174,7 @@ index 127bc69952ca..542b0f4017eb 100644
return 0;
}
-@@ -1275,6 +1340,11 @@ static int aspeed_i2c_init(struct aspeed_i2c_bus *bus,
+@@ -1288,6 +1353,11 @@ static int aspeed_i2c_init(struct aspeed_i2c_bus *bus,
/* Disable everything. */
writel(0, bus->base + ASPEED_I2C_FUN_CTRL_REG);
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0069-i2c-aspeed-add-SLAVE_ADDR_RECEIVED_PENDING-interrupt.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0069-i2c-aspeed-add-SLAVE_ADDR_RECEIVED_PENDING-interrupt.patch
index 8fc35243c..a304de019 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0069-i2c-aspeed-add-SLAVE_ADDR_RECEIVED_PENDING-interrupt.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0069-i2c-aspeed-add-SLAVE_ADDR_RECEIVED_PENDING-interrupt.patch
@@ -1,4 +1,4 @@
-From 6ffb52e1f1d80fd3116fccef045bcdc78d2d361c Mon Sep 17 00:00:00 2001
+From 78ad5c6291df33b7cba0e6be9a2b6ed6e7bbd571 Mon Sep 17 00:00:00 2001
From: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
Date: Thu, 11 Jul 2019 14:04:39 -0700
Subject: [PATCH] i2c: aspeed: add SLAVE_ADDR_RECEIVED_PENDING interrupt
@@ -15,7 +15,7 @@ Signed-off-by: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
1 file changed, 13 insertions(+)
diff --git a/drivers/i2c/busses/i2c-aspeed.c b/drivers/i2c/busses/i2c-aspeed.c
-index bcc354d11e29..0070366e9d6d 100644
+index 71ebf3bbf38b..a15f54f64b50 100644
--- a/drivers/i2c/busses/i2c-aspeed.c
+++ b/drivers/i2c/busses/i2c-aspeed.c
@@ -87,6 +87,7 @@
@@ -26,7 +26,7 @@ index bcc354d11e29..0070366e9d6d 100644
#define ASPEED_I2CD_INTR_SLAVE_INACTIVE_TIMEOUT BIT(15)
#define ASPEED_I2CD_INTR_SDA_DL_TIMEOUT BIT(14)
#define ASPEED_I2CD_INTR_BUS_RECOVER_DONE BIT(13)
-@@ -354,6 +355,18 @@ static u32 aspeed_i2c_slave_irq(struct aspeed_i2c_bus *bus, u32 irq_status)
+@@ -360,6 +361,18 @@ static u32 aspeed_i2c_slave_irq(struct aspeed_i2c_bus *bus, u32 irq_status)
dev_dbg(bus->dev, "slave irq status 0x%08x, cmd 0x%08x\n",
irq_status, command);
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0070-gpio-aspeed-temporary-fix-for-gpiochip-range-setting.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0070-gpio-aspeed-temporary-fix-for-gpiochip-range-setting.patch
index bcee8bc6c..5c3e35016 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0070-gpio-aspeed-temporary-fix-for-gpiochip-range-setting.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0070-gpio-aspeed-temporary-fix-for-gpiochip-range-setting.patch
@@ -1,4 +1,4 @@
-From 89e1d083726d4d56703a6787f4707d61a2c0efd1 Mon Sep 17 00:00:00 2001
+From 0bda96c5fe3064c71f190bc484e2ce59c51d5585 Mon Sep 17 00:00:00 2001
From: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
Date: Fri, 19 Jul 2019 12:54:38 -0700
Subject: [PATCH] gpio: aspeed: temporary fix for gpiochip range setting
@@ -14,7 +14,7 @@ Signed-off-by: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/gpio/gpio-aspeed.c b/drivers/gpio/gpio-aspeed.c
-index ac33f8134fe6..4f1a40b3a73f 100644
+index 39c50c53dae3..05945470bd89 100644
--- a/drivers/gpio/gpio-aspeed.c
+++ b/drivers/gpio/gpio-aspeed.c
@@ -1181,7 +1181,7 @@ static int __init aspeed_gpio_probe(struct platform_device *pdev)
@@ -27,10 +27,10 @@ index ac33f8134fe6..4f1a40b3a73f 100644
/* Allocate a cache of the output registers */
banks = DIV_ROUND_UP(gpio->chip.ngpio, 32);
diff --git a/drivers/gpio/sgpio-aspeed.c b/drivers/gpio/sgpio-aspeed.c
-index d2dbfce531a4..792ef0d70ecf 100644
+index 5028e9144a75..850539da43f5 100644
--- a/drivers/gpio/sgpio-aspeed.c
+++ b/drivers/gpio/sgpio-aspeed.c
-@@ -678,7 +678,7 @@ static int __init aspeed_sgpio_probe(struct platform_device *pdev)
+@@ -681,7 +681,7 @@ static int __init aspeed_sgpio_probe(struct platform_device *pdev)
gpio->chip.set = aspeed_sgpio_set;
gpio->chip.set_config = aspeed_sgpio_set_config;
gpio->chip.label = dev_name(&pdev->dev);
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0075-Refine-initialization-flow-in-I2C-driver.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0075-Refine-initialization-flow-in-I2C-driver.patch
index 363f25368..009fccacf 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0075-Refine-initialization-flow-in-I2C-driver.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0075-Refine-initialization-flow-in-I2C-driver.patch
@@ -1,4 +1,4 @@
-From a98e86429ce520cab3505c76ce02703837ef79b9 Mon Sep 17 00:00:00 2001
+From 83c1fcb7dacb59d22b41356e3b7009ff2387d448 Mon Sep 17 00:00:00 2001
From: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
Date: Mon, 23 Sep 2019 13:48:49 -0700
Subject: [PATCH] Refine initialization flow in I2C driver
@@ -15,10 +15,10 @@ Signed-off-by: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
1 file changed, 9 insertions(+), 11 deletions(-)
diff --git a/drivers/i2c/busses/i2c-aspeed.c b/drivers/i2c/busses/i2c-aspeed.c
-index 0070366e9d6d..ab771a57a252 100644
+index a15f54f64b50..62b803e15ce2 100644
--- a/drivers/i2c/busses/i2c-aspeed.c
+++ b/drivers/i2c/busses/i2c-aspeed.c
-@@ -1441,6 +1441,11 @@ static int aspeed_i2c_probe_bus(struct platform_device *pdev)
+@@ -1454,6 +1454,11 @@ static int aspeed_i2c_probe_bus(struct platform_device *pdev)
if (IS_ERR(bus->base))
return PTR_ERR(bus->base);
@@ -30,7 +30,7 @@ index 0070366e9d6d..ab771a57a252 100644
parent_clk = devm_clk_get(&pdev->dev, NULL);
if (IS_ERR(parent_clk))
return PTR_ERR(parent_clk);
-@@ -1563,17 +1568,6 @@ static int aspeed_i2c_probe_bus(struct platform_device *pdev)
+@@ -1576,17 +1581,6 @@ static int aspeed_i2c_probe_bus(struct platform_device *pdev)
bus->dev = &pdev->dev;
@@ -48,7 +48,7 @@ index 0070366e9d6d..ab771a57a252 100644
irq = irq_of_parse_and_map(pdev->dev.of_node, 0);
ret = devm_request_irq(&pdev->dev, irq, aspeed_i2c_bus_irq,
0, dev_name(&pdev->dev), bus);
-@@ -1586,6 +1580,10 @@ static int aspeed_i2c_probe_bus(struct platform_device *pdev)
+@@ -1599,6 +1593,10 @@ static int aspeed_i2c_probe_bus(struct platform_device *pdev)
platform_set_drvdata(pdev, bus);
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0076-arm-ast2600-add-pwm_tacho-driver-from-aspeed.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0076-arm-ast2600-add-pwm_tacho-driver-from-aspeed.patch
index 38a8a4a45..9515a1a89 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0076-arm-ast2600-add-pwm_tacho-driver-from-aspeed.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0076-arm-ast2600-add-pwm_tacho-driver-from-aspeed.patch
@@ -1,4 +1,4 @@
-From d5c421c1fc4c3bfd724a92e8563bc4fac128362c Mon Sep 17 00:00:00 2001
+From a17a084c4889dcc7cb43ef5f93032997cfcee4f0 Mon Sep 17 00:00:00 2001
From: Vernon Mauery <vernon.mauery@intel.com>
Date: Fri, 27 Sep 2019 13:09:48 -0700
Subject: [PATCH] arm: ast2600: add pwm_tacho driver from aspeed
@@ -12,15 +12,15 @@ Signed-off-by: Vernon Mauery <vernon.mauery@intel.com>
arch/arm/boot/dts/aspeed-g6.dtsi | 10 +
drivers/hwmon/Kconfig | 11 +
drivers/hwmon/Makefile | 1 +
- drivers/hwmon/aspeed-g6-pwm-tacho.c | 1025 +++++++++++++++++++++++++++
+ drivers/hwmon/aspeed-g6-pwm-tacho.c | 1025 +++++++++++++++++++++++++++++++++++
4 files changed, 1047 insertions(+)
create mode 100644 drivers/hwmon/aspeed-g6-pwm-tacho.c
diff --git a/arch/arm/boot/dts/aspeed-g6.dtsi b/arch/arm/boot/dts/aspeed-g6.dtsi
-index 03a991c97f00..b793b2f294a4 100644
+index eeace4b7b725..33fcd89db6b8 100644
--- a/arch/arm/boot/dts/aspeed-g6.dtsi
+++ b/arch/arm/boot/dts/aspeed-g6.dtsi
-@@ -257,6 +257,16 @@
+@@ -278,6 +278,16 @@
#size-cells = <1>;
ranges;
@@ -38,10 +38,10 @@ index 03a991c97f00..b793b2f294a4 100644
compatible = "aspeed,ast2600-scu", "syscon", "simple-mfd";
reg = <0x1e6e2000 0x1000>;
diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig
-index 7399c3cef30c..b5365f5602b9 100644
+index e244a7901392..8312b3798b82 100644
--- a/drivers/hwmon/Kconfig
+++ b/drivers/hwmon/Kconfig
-@@ -361,6 +361,17 @@ config SENSORS_ASPEED
+@@ -371,6 +371,17 @@ config SENSORS_ASPEED
This driver can also be built as a module. If so, the module
will be called aspeed_pwm_tacho.
@@ -60,11 +60,11 @@ index 7399c3cef30c..b5365f5602b9 100644
tristate "Attansic ATXP1 VID controller"
depends on I2C
diff --git a/drivers/hwmon/Makefile b/drivers/hwmon/Makefile
-index 22e0882ffc70..d21a69797a86 100644
+index 1c7ab361adc7..e74ea925fb56 100644
--- a/drivers/hwmon/Makefile
+++ b/drivers/hwmon/Makefile
-@@ -50,6 +50,7 @@ obj-$(CONFIG_SENSORS_ARM_SCMI) += scmi-hwmon.o
- obj-$(CONFIG_SENSORS_ARM_SCPI) += scpi-hwmon.o
+@@ -50,6 +50,7 @@ obj-$(CONFIG_SENSORS_ARM_SCPI) += scpi-hwmon.o
+ obj-$(CONFIG_SENSORS_AS370) += as370-hwmon.o
obj-$(CONFIG_SENSORS_ASC7621) += asc7621.o
obj-$(CONFIG_SENSORS_ASPEED) += aspeed-pwm-tacho.o
+obj-$(CONFIG_SENSORS_ASPEED_G6) += aspeed-g6-pwm-tacho.o
@@ -73,7 +73,7 @@ index 22e0882ffc70..d21a69797a86 100644
obj-$(CONFIG_SENSORS_DA9052_ADC)+= da9052-hwmon.o
diff --git a/drivers/hwmon/aspeed-g6-pwm-tacho.c b/drivers/hwmon/aspeed-g6-pwm-tacho.c
new file mode 100644
-index 000000000000..d6aa5a36ca88
+index 000000000000..1894f6ad5edb
--- /dev/null
+++ b/drivers/hwmon/aspeed-g6-pwm-tacho.c
@@ -0,0 +1,1025 @@
@@ -137,9 +137,9 @@ index 000000000000..d6aa5a36ca88
+#define PWM_LOOP_BIT_MASK (0xf << 24) //loop bit [7:0]
+#define PWM_PERIOD_BIT (24) //pwm period bit [7:0]
+#define PWM_PERIOD_BIT_MASK (0xff << 24) //pwm period bit [7:0]
-+#define PWM_RISING_FALLING_AS_WDT_BIT (16)
++#define PWM_RISING_FALLING_AS_WDT_BIT (16)
+#define PWM_RISING_FALLING_AS_WDT_MASK (0xff << 16) //pwm rising/falling point bit [7:0] as WDT
-+#define PWM_RISING_FALLING_MASK (0xffff)
++#define PWM_RISING_FALLING_MASK (0xffff)
+#define PWM_RISING_FALLING_BIT (8) //pwm falling point bit [7:0]
+#define PWM_RISING_RISING_BIT (0) //pwm rising point bit [7:0]
+
@@ -153,7 +153,7 @@ index 000000000000..d6aa5a36ca88
+#define TACHO_DEBOUNCE_MASK (0x3 << 26) //{tacho de-bounce}
+#define TECHIO_EDGE_MASK (0x3 << 24) //tacho edge}
+#define TECHIO_EDGE_BIT (24) //tacho edge}
-+#define TACHO_CLK_DIV_T_MASK (0xf << 20)
++#define TACHO_CLK_DIV_T_MASK (0xf << 20)
+#define TACHO_CLK_DIV_BIT (20)
+#define TACHO_THRESHOLD_MASK (0xfffff) //tacho threshold bit
+/*
@@ -208,7 +208,7 @@ index 000000000000..d6aa5a36ca88
+ .falling = 0x0a,
+ },
+ [1] = {
-+ .load_wdt_rising_falling_pt = 0x10,
++ .load_wdt_rising_falling_pt = 0x10,
+ .load_wdt_selection = 0,
+ .load_wdt_enable = 0,
+ .duty_sync_enable = 0,
@@ -220,7 +220,7 @@ index 000000000000..d6aa5a36ca88
+ .falling = 0x0a,
+ },
+ [2] = {
-+ .load_wdt_rising_falling_pt = 0x10,
++ .load_wdt_rising_falling_pt = 0x10,
+ .load_wdt_selection = 0,
+ .load_wdt_enable = 0,
+ .duty_sync_enable = 0,
@@ -232,7 +232,7 @@ index 000000000000..d6aa5a36ca88
+ .falling = 0x0a,
+ },
+ [3] = {
-+ .load_wdt_rising_falling_pt = 0x10,
++ .load_wdt_rising_falling_pt = 0x10,
+ .load_wdt_selection = 0,
+ .load_wdt_enable = 0,
+ .duty_sync_enable = 0,
@@ -244,7 +244,7 @@ index 000000000000..d6aa5a36ca88
+ .falling = 0x0a,
+ },
+ [4] = {
-+ .load_wdt_rising_falling_pt = 0x10,
++ .load_wdt_rising_falling_pt = 0x10,
+ .load_wdt_selection = 0,
+ .load_wdt_enable = 0,
+ .duty_sync_enable = 0,
@@ -256,7 +256,7 @@ index 000000000000..d6aa5a36ca88
+ .falling = 0x0a,
+ },
+ [5] = {
-+ .load_wdt_rising_falling_pt = 0x10,
++ .load_wdt_rising_falling_pt = 0x10,
+ .load_wdt_selection = 0,
+ .load_wdt_enable = 0,
+ .duty_sync_enable = 0,
@@ -268,7 +268,7 @@ index 000000000000..d6aa5a36ca88
+ .falling = 0x0a,
+ },
+ [6] = {
-+ .load_wdt_rising_falling_pt = 0x10,
++ .load_wdt_rising_falling_pt = 0x10,
+ .load_wdt_selection = 0,
+ .load_wdt_enable = 0,
+ .duty_sync_enable = 0,
@@ -280,7 +280,7 @@ index 000000000000..d6aa5a36ca88
+ .falling = 0x0a,
+ },
+ [7] = {
-+ .load_wdt_rising_falling_pt = 0x10,
++ .load_wdt_rising_falling_pt = 0x10,
+ .load_wdt_selection = 0,
+ .load_wdt_enable = 0,
+ .duty_sync_enable = 0,
@@ -292,7 +292,7 @@ index 000000000000..d6aa5a36ca88
+ .falling = 0x0a,
+ },
+ [8] = {
-+ .load_wdt_rising_falling_pt = 0x10,
++ .load_wdt_rising_falling_pt = 0x10,
+ .load_wdt_selection = 0,
+ .load_wdt_enable = 0,
+ .duty_sync_enable = 0,
@@ -304,7 +304,7 @@ index 000000000000..d6aa5a36ca88
+ .falling = 0x0a,
+ },
+ [9] = {
-+ .load_wdt_rising_falling_pt = 0x10,
++ .load_wdt_rising_falling_pt = 0x10,
+ .load_wdt_selection = 0,
+ .load_wdt_enable = 0,
+ .duty_sync_enable = 0,
@@ -316,7 +316,7 @@ index 000000000000..d6aa5a36ca88
+ .falling = 0x0a,
+ },
+ [10] = {
-+ .load_wdt_rising_falling_pt = 0x10,
++ .load_wdt_rising_falling_pt = 0x10,
+ .load_wdt_selection = 0,
+ .load_wdt_enable = 0,
+ .duty_sync_enable = 0,
@@ -328,7 +328,7 @@ index 000000000000..d6aa5a36ca88
+ .falling = 0x0a,
+ },
+ [11] = {
-+ .load_wdt_rising_falling_pt = 0x10,
++ .load_wdt_rising_falling_pt = 0x10,
+ .load_wdt_selection = 0,
+ .load_wdt_enable = 0,
+ .duty_sync_enable = 0,
@@ -340,7 +340,7 @@ index 000000000000..d6aa5a36ca88
+ .falling = 0x0a,
+ },
+ [12] = {
-+ .load_wdt_rising_falling_pt = 0x10,
++ .load_wdt_rising_falling_pt = 0x10,
+ .load_wdt_selection = 0,
+ .load_wdt_enable = 0,
+ .duty_sync_enable = 0,
@@ -352,7 +352,7 @@ index 000000000000..d6aa5a36ca88
+ .falling = 0x0a,
+ },
+ [13] = {
-+ .load_wdt_rising_falling_pt = 0x10,
++ .load_wdt_rising_falling_pt = 0x10,
+ .load_wdt_selection = 0,
+ .load_wdt_enable = 0,
+ .duty_sync_enable = 0,
@@ -364,7 +364,7 @@ index 000000000000..d6aa5a36ca88
+ .falling = 0x0a,
+ },
+ [14] = {
-+ .load_wdt_rising_falling_pt = 0x10,
++ .load_wdt_rising_falling_pt = 0x10,
+ .load_wdt_selection = 0,
+ .load_wdt_enable = 0,
+ .duty_sync_enable = 0,
@@ -376,7 +376,7 @@ index 000000000000..d6aa5a36ca88
+ .falling = 0x0a,
+ },
+ [15] = {
-+ .load_wdt_rising_falling_pt = 0x10,
++ .load_wdt_rising_falling_pt = 0x10,
+ .load_wdt_selection = 0,
+ .load_wdt_enable = 0,
+ .duty_sync_enable = 0,
@@ -401,7 +401,7 @@ index 000000000000..d6aa5a36ca88
+ int limited_inverse;
+ u16 threshold;
+ u8 tacho_edge;
-+ u8 tacho_debounce;
++ u8 tacho_debounce;
+ u8 divide;
+};
+
@@ -418,105 +418,105 @@ index 000000000000..d6aa5a36ca88
+ .limited_inverse = 0,
+ .threshold = 0,
+ .tacho_edge = 0,
-+ .tacho_debounce = 0,
++ .tacho_debounce = 0,
+ .divide = 8,
+ },
+ [2] = {
+ .limited_inverse = 0,
+ .threshold = 0,
+ .tacho_edge = 0,
-+ .tacho_debounce = 0,
++ .tacho_debounce = 0,
+ .divide = 8,
+ },
+ [3] = {
+ .limited_inverse = 0,
+ .threshold = 0,
+ .tacho_edge = 0,
-+ .tacho_debounce = 0,
++ .tacho_debounce = 0,
+ .divide = 8,
+ },
+ [4] = {
+ .limited_inverse = 0,
+ .threshold = 0,
+ .tacho_edge = 0,
-+ .tacho_debounce = 0,
++ .tacho_debounce = 0,
+ .divide = 8,
+ },
+ [5] = {
+ .limited_inverse = 0,
+ .threshold = 0,
+ .tacho_edge = 0,
-+ .tacho_debounce = 0,
++ .tacho_debounce = 0,
+ .divide = 8,
+ },
+ [6] = {
+ .limited_inverse = 0,
+ .threshold = 0,
+ .tacho_edge = 0,
-+ .tacho_debounce = 0,
++ .tacho_debounce = 0,
+ .divide = 8,
+ },
+ [7] = {
+ .limited_inverse = 0,
+ .threshold = 0,
+ .tacho_edge = 0,
-+ .tacho_debounce = 0,
++ .tacho_debounce = 0,
+ .divide = 8,
+ },
+ [8] = {
+ .limited_inverse = 0,
+ .threshold = 0,
+ .tacho_edge = 0,
-+ .tacho_debounce = 0,
++ .tacho_debounce = 0,
+ .divide = 8,
+ },
+ [9] = {
+ .limited_inverse = 0,
+ .threshold = 0,
+ .tacho_edge = 0,
-+ .tacho_debounce = 0,
++ .tacho_debounce = 0,
+ .divide = 8,
+ },
+ [10] = {
+ .limited_inverse = 0,
+ .threshold = 0,
+ .tacho_edge = 0,
-+ .tacho_debounce = 0,
++ .tacho_debounce = 0,
+ .divide = 8,
+ },
+ [11] = {
+ .limited_inverse = 0,
+ .threshold = 0,
+ .tacho_edge = 0,
-+ .tacho_debounce = 0,
++ .tacho_debounce = 0,
+ .divide = 8,
+ },
+ [12] = {
+ .limited_inverse = 0,
+ .threshold = 0,
+ .tacho_edge = 0,
-+ .tacho_debounce = 0,
++ .tacho_debounce = 0,
+ .divide = 8,
+ },
+ [13] = {
+ .limited_inverse = 0,
+ .threshold = 0,
+ .tacho_edge = 0,
-+ .tacho_debounce = 0,
++ .tacho_debounce = 0,
+ .divide = 8,
+ },
+ [14] = {
+ .limited_inverse = 0,
+ .threshold = 0,
+ .tacho_edge = 0,
-+ .tacho_debounce = 0,
++ .tacho_debounce = 0,
+ .divide = 8,
+ },
+ [15] = {
+ .limited_inverse = 0,
+ .threshold = 0,
+ .tacho_edge = 0,
-+ .tacho_debounce = 0,
++ .tacho_debounce = 0,
+ .divide = 8,
+ },
+};
@@ -524,7 +524,7 @@ index 000000000000..d6aa5a36ca88
+struct aspeed_pwm_tachometer_data {
+ struct regmap *regmap;
+ unsigned long clk_freq;
-+ struct reset_control *reset;
++ struct reset_control *reset;
+ bool pwm_present[16];
+ bool fan_tach_present[16];
+ struct aspeed_pwm_channel_params *pwm_channel;
@@ -589,7 +589,7 @@ index 000000000000..d6aa5a36ca88
+ //check pwm clk and to change tacho devide 25KZ
+ for(i = 0; i < 12; i++) {
+ divide_val = 1;
-+ for(j = 1; j <= i; j++)
++ for (j = 1; j <= i; j++)
+ divide_val *= 4;
+// printk("i : %d , priv->clk_freq/divide_val %d ",i, priv->clk_freq/divide_val);
+ if((priv->clk_freq/divide_val) < 250000)
@@ -600,7 +600,7 @@ index 000000000000..d6aa5a36ca88
+// printk("tacho divide_val %d , i %x max tacho clk %d \n", divide_val, i, priv->clk_freq / divide_val);
+ priv->tacho_channel[fan_tach_ch].divide = i;
+
-+ reg_value = TACHO_ENABLE |
++ reg_value = TACHO_ENABLE |
+ (priv->tacho_channel[fan_tach_ch].tacho_edge << TECHIO_EDGE_BIT) |
+ (priv->tacho_channel[fan_tach_ch].divide << TACHO_CLK_DIV_BIT) |
+ (priv->tacho_channel[fan_tach_ch].tacho_debounce << TACHO_DEBOUNCE_BIT);
@@ -609,7 +609,7 @@ index 000000000000..d6aa5a36ca88
+ reg_value |= TACHO_INVERS_LIMIT;
+
+ if(priv->tacho_channel[fan_tach_ch].threshold)
-+ reg_value |= (TACHO_IER | priv->tacho_channel[fan_tach_ch].threshold);
++ reg_value |= (TACHO_IER | priv->tacho_channel[fan_tach_ch].threshold);
+
+ regmap_write(priv->regmap, ASPEED_TACHO_CTRL_CH(fan_tach_ch), reg_value);
+ } else
@@ -624,7 +624,7 @@ index 000000000000..d6aa5a36ca88
+ if (fan_ctrl == 0) {
+ aspeed_set_pwm_channel_enable(priv->regmap, index, false);
+ } else {
-+ duty_value = (priv->pwm_channel[index].period << PWM_PERIOD_BIT) |
++ duty_value = (priv->pwm_channel[index].period << PWM_PERIOD_BIT) |
+ (0 << PWM_RISING_RISING_BIT) | (fan_ctrl << PWM_RISING_FALLING_BIT);
+
+ ctrl_value = (priv->pwm_channel[index].divide_h << 8) | priv->pwm_channel[index].divide_l;
@@ -876,7 +876,7 @@ index 000000000000..d6aa5a36ca88
+{
+ priv->pwm_present[pwm_channel] = true;
+
-+ //use default
++ //use default
+ aspeed_set_pwm_channel_fan_ctrl(priv, pwm_channel, priv->pwm_channel[pwm_channel].falling);
+}
+
@@ -1043,7 +1043,7 @@ index 000000000000..d6aa5a36ca88
+ if (!priv)
+ return -ENOMEM;
+
-+ priv->pwm_channel = default_pwm_params;
++ priv->pwm_channel = default_pwm_params;
+ priv->tacho_channel = default_tacho_params;
+ priv->regmap = devm_regmap_init(dev, NULL, (__force void *)regs,
+ &aspeed_pwm_tachometer_regmap_config);
@@ -1103,5 +1103,5 @@ index 000000000000..d6aa5a36ca88
+MODULE_DESCRIPTION("ASPEED PWM and Fan Tachometer device driver");
+MODULE_LICENSE("GPL");
--
-2.17.1
+2.7.4
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0078-Fix-NCSI-driver-issue-caused-by-host-shutdown.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0078-Fix-NCSI-driver-issue-caused-by-host-shutdown.patch
index c02131b6a..09a957860 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0078-Fix-NCSI-driver-issue-caused-by-host-shutdown.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0078-Fix-NCSI-driver-issue-caused-by-host-shutdown.patch
@@ -1,4 +1,4 @@
-From 3e698a7666ec54582d0e2b4842f3e7f27fabe303 Mon Sep 17 00:00:00 2001
+From 3eaf814c51f85aaad0d181d27ff686ce35b31d6a Mon Sep 17 00:00:00 2001
From: Kuiying Wang <kuiying.wang@intel.com>
Date: Tue, 29 Oct 2019 11:28:29 +0800
Subject: [PATCH] Fix NCSI driver issue caused by host shutdown due to
@@ -16,10 +16,10 @@ Signed-off-by: Kuiying Wang <kuiying.wang@intel.com>
1 file changed, 13 insertions(+), 5 deletions(-)
diff --git a/net/ncsi/ncsi-manage.c b/net/ncsi/ncsi-manage.c
-index 755aab66dcab..2c5294582ef6 100644
+index 70fe02697544..4e16a0015f26 100644
--- a/net/ncsi/ncsi-manage.c
+++ b/net/ncsi/ncsi-manage.c
-@@ -133,18 +133,15 @@ static void ncsi_channel_monitor(struct timer_list *t)
+@@ -132,18 +132,15 @@ static void ncsi_channel_monitor(struct timer_list *t)
netdev_err(ndp->ndev.dev, "NCSI Channel %d timed out!\n",
nc->id);
ncsi_report_link(ndp, true);
@@ -40,7 +40,7 @@ index 755aab66dcab..2c5294582ef6 100644
list_add_tail_rcu(&nc->link, &ndp->channel_queue);
spin_unlock_irqrestore(&ndp->lock, flags);
ncsi_process_next_channel(ndp);
-@@ -425,6 +422,7 @@ static void ncsi_request_timeout(struct timer_list *t)
+@@ -424,6 +421,7 @@ static void ncsi_request_timeout(struct timer_list *t)
{
struct ncsi_request *nr = from_timer(nr, t, timer);
struct ncsi_dev_priv *ndp = nr->ndp;
@@ -48,7 +48,7 @@ index 755aab66dcab..2c5294582ef6 100644
struct ncsi_cmd_pkt *cmd;
struct ncsi_package *np;
struct ncsi_channel *nc;
-@@ -439,6 +437,16 @@ static void ncsi_request_timeout(struct timer_list *t)
+@@ -438,6 +436,16 @@ static void ncsi_request_timeout(struct timer_list *t)
spin_unlock_irqrestore(&ndp->lock, flags);
return;
}
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0079-usb-gadget-aspeed-backport-aspeed-vhub-bug-fixes.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0079-usb-gadget-aspeed-backport-aspeed-vhub-bug-fixes.patch
deleted file mode 100644
index 17db705d1..000000000
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0079-usb-gadget-aspeed-backport-aspeed-vhub-bug-fixes.patch
+++ /dev/null
@@ -1,473 +0,0 @@
-From 0475ac3698cf3d95d78b0230418ec7ef5fdc62c7 Mon Sep 17 00:00:00 2001
-From: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
-Date: Tue, 29 Oct 2019 11:42:08 -0700
-Subject: [PATCH] usb: gadget: aspeed: backport aspeed vhub bug fixes
-
-usb: gadget: aspeed: Implement dummy hub TT requests
-
-We just accept them instead of stalling and return
-zeros on GetTTState.
-
-usb: Add definitions for the USB2.0 hub TT requests
-
-usb: gadget: aspeed: Improve debugging when nuking
-
-When nuking requests, it's useful to display how many were
-actually nuked. It has proven handy when debugging issues
-where EP0 went in a wrong state.
-
-usb: gadget: aspeed: Remove unused "suspended" flag
-
-The state bit in the hub is sufficient
-
-usb: gadget: aspeed: Rework the reset logic
-
-We had some dodgy code using the speed setting to decide whether a
-port reset would reset the device or just enable it.
-
-Instead, if the device is disabled and has a gadget attached, a
-reset will enable it. If it's already enabled, a reset will
-reset it.
-
-usb: gadget: aspeed: Check suspend/resume callback existence
-
-.. before calling them
-
-usb: gadget: aspeed: Don't reject requests on suspended devices
-
-A disconnect may just suspend the hub in absence of a physical
-disconnect detection. If we start rejecting requests, the mass
-storage function gets into a spin trying to requeue the same
-request for ever and hangs.
-
-usb: gadget: aspeed: Fix EP0 stall handling
-
-When stalling EP0, we need to wait for an ACK interrupt,
-otherwise we may get out of sync on the next setup packet
-data phase. Also we need to ignore the direction when
-processing that interrupt as the HW reports a potential
-mismatch.
-
-Implement this by adding a stall state to EP0. This fixes
-some reported issues with mass storage and some hosts.
-
-usb: gadget: aspeed: Cleanup EP0 state on port reset
-
-Otherwise, we can have a stale state after a disconnect and reconnect
-causing errors on the first SETUP packet to the device.
-
-causing errors on the first SETUP packet to the device.
-
-usb: gadget: aspeed: Don't set port enable change bit on reset
-
-This bit should be only set when the port enable goes down, for
-example, on errors. Not when it gets set after a port reset. Some
-USB stacks seem to be sensitive to this and fails enumeration.
-
-Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
-Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
-Signed-off-by: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
----
- drivers/usb/gadget/udc/aspeed-vhub/core.c | 7 +--
- drivers/usb/gadget/udc/aspeed-vhub/dev.c | 80 +++++++++++++++----------------
- drivers/usb/gadget/udc/aspeed-vhub/ep0.c | 59 ++++++++++++++++-------
- drivers/usb/gadget/udc/aspeed-vhub/epn.c | 2 +-
- drivers/usb/gadget/udc/aspeed-vhub/hub.c | 15 +++++-
- drivers/usb/gadget/udc/aspeed-vhub/vhub.h | 3 +-
- include/linux/usb/hcd.h | 4 ++
- 7 files changed, 107 insertions(+), 63 deletions(-)
-
-diff --git a/drivers/usb/gadget/udc/aspeed-vhub/core.c b/drivers/usb/gadget/udc/aspeed-vhub/core.c
-index db3628be38c0..90b134d5dca9 100644
---- a/drivers/usb/gadget/udc/aspeed-vhub/core.c
-+++ b/drivers/usb/gadget/udc/aspeed-vhub/core.c
-@@ -65,14 +65,16 @@ void ast_vhub_done(struct ast_vhub_ep *ep, struct ast_vhub_req *req,
- void ast_vhub_nuke(struct ast_vhub_ep *ep, int status)
- {
- struct ast_vhub_req *req;
--
-- EPDBG(ep, "Nuking\n");
-+ int count = 0;
-
- /* Beware, lock will be dropped & req-acquired by done() */
- while (!list_empty(&ep->queue)) {
- req = list_first_entry(&ep->queue, struct ast_vhub_req, queue);
- ast_vhub_done(ep, req, status);
-+ count++;
- }
-+ if (count)
-+ EPDBG(ep, "Nuked %d request(s)\n", count);
- }
-
- struct usb_request *ast_vhub_alloc_request(struct usb_ep *u_ep,
-@@ -348,7 +350,6 @@ static int ast_vhub_probe(struct platform_device *pdev)
- /* Find interrupt and install handler */
- vhub->irq = platform_get_irq(pdev, 0);
- if (vhub->irq < 0) {
-- dev_err(&pdev->dev, "Failed to get interrupt\n");
- rc = vhub->irq;
- goto err;
- }
-diff --git a/drivers/usb/gadget/udc/aspeed-vhub/dev.c b/drivers/usb/gadget/udc/aspeed-vhub/dev.c
-index 6b1b16b17d7d..4008e7a51188 100644
---- a/drivers/usb/gadget/udc/aspeed-vhub/dev.c
-+++ b/drivers/usb/gadget/udc/aspeed-vhub/dev.c
-@@ -50,11 +50,14 @@ void ast_vhub_dev_irq(struct ast_vhub_dev *d)
-
- static void ast_vhub_dev_enable(struct ast_vhub_dev *d)
- {
-- u32 reg, hmsk;
-+ u32 reg, hmsk, i;
-
- if (d->enabled)
- return;
-
-+ /* Cleanup EP0 state */
-+ ast_vhub_reset_ep0(d);
-+
- /* Enable device and its EP0 interrupts */
- reg = VHUB_DEV_EN_ENABLE_PORT |
- VHUB_DEV_EN_EP0_IN_ACK_IRQEN |
-@@ -73,6 +76,19 @@ static void ast_vhub_dev_enable(struct ast_vhub_dev *d)
- /* Set EP0 DMA buffer address */
- writel(d->ep0.buf_dma, d->regs + AST_VHUB_DEV_EP0_DATA);
-
-+ /* Clear stall on all EPs */
-+ for (i = 0; i < AST_VHUB_NUM_GEN_EPs; i++) {
-+ struct ast_vhub_ep *ep = d->epns[i];
-+
-+ if (ep && (ep->epn.stalled || ep->epn.wedged)) {
-+ ep->epn.stalled = false;
-+ ep->epn.wedged = false;
-+ ast_vhub_update_epn_stall(ep);
-+ }
-+ }
-+
-+ /* Additional cleanups */
-+ d->wakeup_en = false;
- d->enabled = true;
- }
-
-@@ -93,7 +109,6 @@ static void ast_vhub_dev_disable(struct ast_vhub_dev *d)
- writel(0, d->regs + AST_VHUB_DEV_EN_CTRL);
- d->gadget.speed = USB_SPEED_UNKNOWN;
- d->enabled = false;
-- d->suspended = false;
- }
-
- static int ast_vhub_dev_feature(struct ast_vhub_dev *d,
-@@ -201,14 +216,19 @@ int ast_vhub_std_dev_request(struct ast_vhub_ep *ep,
- u16 wValue, wIndex;
-
- /* No driver, we shouldn't be enabled ... */
-- if (!d->driver || !d->enabled || d->suspended) {
-+ if (!d->driver || !d->enabled) {
- EPDBG(ep,
-- "Device is wrong state driver=%p enabled=%d"
-- " suspended=%d\n",
-- d->driver, d->enabled, d->suspended);
-+ "Device is wrong state driver=%p enabled=%d\n",
-+ d->driver, d->enabled);
- return std_req_stall;
- }
-
-+ /*
-+ * Note: we used to reject/stall requests while suspended,
-+ * we don't do that anymore as we seem to have cases of
-+ * mass storage getting very upset.
-+ */
-+
- /* First packet, grab speed */
- if (d->gadget.speed == USB_SPEED_UNKNOWN) {
- d->gadget.speed = ep->vhub->speed;
-@@ -449,8 +469,7 @@ static const struct usb_gadget_ops ast_vhub_udc_ops = {
-
- void ast_vhub_dev_suspend(struct ast_vhub_dev *d)
- {
-- d->suspended = true;
-- if (d->driver) {
-+ if (d->driver && d->driver->suspend) {
- spin_unlock(&d->vhub->lock);
- d->driver->suspend(&d->gadget);
- spin_lock(&d->vhub->lock);
-@@ -459,8 +478,7 @@ void ast_vhub_dev_suspend(struct ast_vhub_dev *d)
-
- void ast_vhub_dev_resume(struct ast_vhub_dev *d)
- {
-- d->suspended = false;
-- if (d->driver) {
-+ if (d->driver && d->driver->resume) {
- spin_unlock(&d->vhub->lock);
- d->driver->resume(&d->gadget);
- spin_lock(&d->vhub->lock);
-@@ -469,46 +487,28 @@ void ast_vhub_dev_resume(struct ast_vhub_dev *d)
-
- void ast_vhub_dev_reset(struct ast_vhub_dev *d)
- {
-- /*
-- * If speed is not set, we enable the port. If it is,
-- * send reset to the gadget and reset "speed".
-- *
-- * Speed is an indication that we have got the first
-- * setup packet to the device.
-- */
-- if (d->gadget.speed == USB_SPEED_UNKNOWN && !d->enabled) {
-- DDBG(d, "Reset at unknown speed of disabled device, enabling...\n");
-- ast_vhub_dev_enable(d);
-- d->suspended = false;
-+ /* No driver, just disable the device and return */
-+ if (!d->driver) {
-+ ast_vhub_dev_disable(d);
-+ return;
- }
-- if (d->gadget.speed != USB_SPEED_UNKNOWN && d->driver) {
-- unsigned int i;
-
-- DDBG(d, "Reset at known speed of bound device, resetting...\n");
-+ /* If the port isn't enabled, just enable it */
-+ if (!d->enabled) {
-+ DDBG(d, "Reset of disabled device, enabling...\n");
-+ ast_vhub_dev_enable(d);
-+ } else {
-+ DDBG(d, "Reset of enabled device, resetting...\n");
- spin_unlock(&d->vhub->lock);
-- d->driver->reset(&d->gadget);
-+ usb_gadget_udc_reset(&d->gadget, d->driver);
- spin_lock(&d->vhub->lock);
-
- /*
-- * Disable/re-enable HW, this will clear the address
-+ * Disable and maybe re-enable HW, this will clear the address
- * and speed setting.
- */
- ast_vhub_dev_disable(d);
- ast_vhub_dev_enable(d);
--
-- /* Clear stall on all EPs */
-- for (i = 0; i < AST_VHUB_NUM_GEN_EPs; i++) {
-- struct ast_vhub_ep *ep = d->epns[i];
--
-- if (ep && ep->epn.stalled) {
-- ep->epn.stalled = false;
-- ast_vhub_update_epn_stall(ep);
-- }
-- }
--
-- /* Additional cleanups */
-- d->wakeup_en = false;
-- d->suspended = false;
- }
- }
-
-diff --git a/drivers/usb/gadget/udc/aspeed-vhub/ep0.c b/drivers/usb/gadget/udc/aspeed-vhub/ep0.c
-index e2927fb083cf..022b777b85f8 100644
---- a/drivers/usb/gadget/udc/aspeed-vhub/ep0.c
-+++ b/drivers/usb/gadget/udc/aspeed-vhub/ep0.c
-@@ -105,18 +105,20 @@ void ast_vhub_ep0_handle_setup(struct ast_vhub_ep *ep)
- (crq.bRequestType & USB_DIR_IN) ? "in" : "out",
- ep->ep0.state);
-
-- /* Check our state, cancel pending requests if needed */
-- if (ep->ep0.state != ep0_state_token) {
-+ /*
-+ * Check our state, cancel pending requests if needed
-+ *
-+ * Note: Under some circumstances, we can get a new setup
-+ * packet while waiting for the stall ack, just accept it.
-+ *
-+ * In any case, a SETUP packet in wrong state should have
-+ * reset the HW state machine, so let's just log, nuke
-+ * requests, move on.
-+ */
-+ if (ep->ep0.state != ep0_state_token &&
-+ ep->ep0.state != ep0_state_stall) {
- EPDBG(ep, "wrong state\n");
- ast_vhub_nuke(ep, -EIO);
--
-- /*
-- * Accept the packet regardless, this seems to happen
-- * when stalling a SETUP packet that has an OUT data
-- * phase.
-- */
-- ast_vhub_nuke(ep, 0);
-- goto stall;
- }
-
- /* Calculate next state for EP0 */
-@@ -165,7 +167,7 @@ void ast_vhub_ep0_handle_setup(struct ast_vhub_ep *ep)
- stall:
- EPDBG(ep, "stalling\n");
- writel(VHUB_EP0_CTRL_STALL, ep->ep0.ctlstat);
-- ep->ep0.state = ep0_state_status;
-+ ep->ep0.state = ep0_state_stall;
- ep->ep0.dir_in = false;
- return;
-
-@@ -299,8 +301,8 @@ void ast_vhub_ep0_handle_ack(struct ast_vhub_ep *ep, bool in_ack)
- if ((ep->ep0.dir_in && (stat & VHUB_EP0_TX_BUFF_RDY)) ||
- (!ep->ep0.dir_in && (stat & VHUB_EP0_RX_BUFF_RDY)) ||
- (ep->ep0.dir_in != in_ack)) {
-+ /* In that case, ignore interrupt */
- dev_warn(dev, "irq state mismatch");
-- stall = true;
- break;
- }
- /*
-@@ -335,12 +337,22 @@ void ast_vhub_ep0_handle_ack(struct ast_vhub_ep *ep, bool in_ack)
- dev_warn(dev, "status direction mismatch\n");
- stall = true;
- }
-+ break;
-+ case ep0_state_stall:
-+ /*
-+ * There shouldn't be any request left, but nuke just in case
-+ * otherwise the stale request will block subsequent ones
-+ */
-+ ast_vhub_nuke(ep, -EIO);
-+ break;
- }
-
-- /* Reset to token state */
-- ep->ep0.state = ep0_state_token;
-- if (stall)
-+ /* Reset to token state or stall */
-+ if (stall) {
- writel(VHUB_EP0_CTRL_STALL, ep->ep0.ctlstat);
-+ ep->ep0.state = ep0_state_stall;
-+ } else
-+ ep->ep0.state = ep0_state_token;
- }
-
- static int ast_vhub_ep0_queue(struct usb_ep* u_ep, struct usb_request *u_req,
-@@ -367,7 +379,7 @@ static int ast_vhub_ep0_queue(struct usb_ep* u_ep, struct usb_request *u_req,
- return -EINVAL;
-
- /* Disabled device */
-- if (ep->dev && (!ep->dev->enabled || ep->dev->suspended))
-+ if (ep->dev && !ep->dev->enabled)
- return -ESHUTDOWN;
-
- /* Data, no buffer and not internal ? */
-@@ -390,8 +402,12 @@ static int ast_vhub_ep0_queue(struct usb_ep* u_ep, struct usb_request *u_req,
- spin_lock_irqsave(&vhub->lock, flags);
-
- /* EP0 can only support a single request at a time */
-- if (!list_empty(&ep->queue) || ep->ep0.state == ep0_state_token) {
-+ if (!list_empty(&ep->queue) ||
-+ ep->ep0.state == ep0_state_token ||
-+ ep->ep0.state == ep0_state_stall) {
- dev_warn(dev, "EP0: Request in wrong state\n");
-+ EPVDBG(ep, "EP0: list_empty=%d state=%d\n",
-+ list_empty(&ep->queue), ep->ep0.state);
- spin_unlock_irqrestore(&vhub->lock, flags);
- return -EBUSY;
- }
-@@ -459,6 +475,15 @@ static const struct usb_ep_ops ast_vhub_ep0_ops = {
- .free_request = ast_vhub_free_request,
- };
-
-+void ast_vhub_reset_ep0(struct ast_vhub_dev *dev)
-+{
-+ struct ast_vhub_ep *ep = &dev->ep0;
-+
-+ ast_vhub_nuke(ep, -EIO);
-+ ep->ep0.state = ep0_state_token;
-+}
-+
-+
- void ast_vhub_init_ep0(struct ast_vhub *vhub, struct ast_vhub_ep *ep,
- struct ast_vhub_dev *dev)
- {
-diff --git a/drivers/usb/gadget/udc/aspeed-vhub/epn.c b/drivers/usb/gadget/udc/aspeed-vhub/epn.c
-index 35941dc125f9..7475c74aa5c5 100644
---- a/drivers/usb/gadget/udc/aspeed-vhub/epn.c
-+++ b/drivers/usb/gadget/udc/aspeed-vhub/epn.c
-@@ -352,7 +352,7 @@ static int ast_vhub_epn_queue(struct usb_ep* u_ep, struct usb_request *u_req,
-
- /* Endpoint enabled ? */
- if (!ep->epn.enabled || !u_ep->desc || !ep->dev || !ep->d_idx ||
-- !ep->dev->enabled || ep->dev->suspended) {
-+ !ep->dev->enabled) {
- EPDBG(ep, "Enqueuing request on wrong or disabled EP\n");
- return -ESHUTDOWN;
- }
-diff --git a/drivers/usb/gadget/udc/aspeed-vhub/hub.c b/drivers/usb/gadget/udc/aspeed-vhub/hub.c
-index 7c040f56100e..19b3517e04c0 100644
---- a/drivers/usb/gadget/udc/aspeed-vhub/hub.c
-+++ b/drivers/usb/gadget/udc/aspeed-vhub/hub.c
-@@ -449,8 +449,15 @@ static void ast_vhub_change_port_stat(struct ast_vhub *vhub,
- USB_PORT_STAT_C_OVERCURRENT |
- USB_PORT_STAT_C_RESET |
- USB_PORT_STAT_C_L1;
-- p->change |= chg;
-
-+ /*
-+ * We only set USB_PORT_STAT_C_ENABLE if we are disabling
-+ * the port as per USB spec, otherwise MacOS gets upset
-+ */
-+ if (p->status & USB_PORT_STAT_ENABLE)
-+ chg &= ~USB_PORT_STAT_C_ENABLE;
-+
-+ p->change = chg;
- ast_vhub_update_hub_ep1(vhub, port);
- }
- }
-@@ -723,6 +730,12 @@ enum std_req_rc ast_vhub_class_hub_request(struct ast_vhub_ep *ep,
- case ClearPortFeature:
- EPDBG(ep, "ClearPortFeature(%d,%d)\n", wIndex & 0xf, wValue);
- return ast_vhub_clr_port_feature(ep, wIndex & 0xf, wValue);
-+ case ClearTTBuffer:
-+ case ResetTT:
-+ case StopTT:
-+ return std_req_complete;
-+ case GetTTState:
-+ return ast_vhub_simple_reply(ep, 0, 0, 0, 0);
- default:
- EPDBG(ep, "Unknown class request\n");
- }
-diff --git a/drivers/usb/gadget/udc/aspeed-vhub/vhub.h b/drivers/usb/gadget/udc/aspeed-vhub/vhub.h
-index 4ed03d33a5a9..761919e220d3 100644
---- a/drivers/usb/gadget/udc/aspeed-vhub/vhub.h
-+++ b/drivers/usb/gadget/udc/aspeed-vhub/vhub.h
-@@ -257,6 +257,7 @@ enum ep0_state {
- ep0_state_token,
- ep0_state_data,
- ep0_state_status,
-+ ep0_state_stall,
- };
-
- /*
-@@ -353,7 +354,6 @@ struct ast_vhub_dev {
- struct usb_gadget_driver *driver;
- bool registered : 1;
- bool wakeup_en : 1;
-- bool suspended : 1;
- bool enabled : 1;
-
- /* Endpoint structures */
-@@ -507,6 +507,7 @@ void ast_vhub_init_hw(struct ast_vhub *vhub);
- /* ep0.c */
- void ast_vhub_ep0_handle_ack(struct ast_vhub_ep *ep, bool in_ack);
- void ast_vhub_ep0_handle_setup(struct ast_vhub_ep *ep);
-+void ast_vhub_reset_ep0(struct ast_vhub_dev *dev);
- void ast_vhub_init_ep0(struct ast_vhub *vhub, struct ast_vhub_ep *ep,
- struct ast_vhub_dev *dev);
- int ast_vhub_reply(struct ast_vhub_ep *ep, char *ptr, int len);
-diff --git a/include/linux/usb/hcd.h b/include/linux/usb/hcd.h
-index a20e7815d814..774a03028da2 100644
---- a/include/linux/usb/hcd.h
-+++ b/include/linux/usb/hcd.h
-@@ -594,6 +594,10 @@ extern void usb_ep0_reinit(struct usb_device *);
- #define GetPortStatus HUB_CLASS_REQ(USB_DIR_IN, USB_RT_PORT, USB_REQ_GET_STATUS)
- #define SetHubFeature HUB_CLASS_REQ(USB_DIR_OUT, USB_RT_HUB, USB_REQ_SET_FEATURE)
- #define SetPortFeature HUB_CLASS_REQ(USB_DIR_OUT, USB_RT_PORT, USB_REQ_SET_FEATURE)
-+#define ClearTTBuffer HUB_CLASS_REQ(USB_DIR_OUT, USB_RT_PORT, HUB_CLEAR_TT_BUFFER)
-+#define ResetTT HUB_CLASS_REQ(USB_DIR_OUT, USB_RT_PORT, HUB_RESET_TT)
-+#define GetTTState HUB_CLASS_REQ(USB_DIR_IN, USB_RT_PORT, HUB_GET_TT_STATE)
-+#define StopTT HUB_CLASS_REQ(USB_DIR_OUT, USB_RT_PORT, HUB_STOP_TT)
-
-
- /*-------------------------------------------------------------------------*/
---
-2.7.4
-
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0080-i2c-aspeed-filter-garbage-interrupts-out.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0080-i2c-aspeed-filter-garbage-interrupts-out.patch
index 801fc2eae..89e7b894f 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0080-i2c-aspeed-filter-garbage-interrupts-out.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0080-i2c-aspeed-filter-garbage-interrupts-out.patch
@@ -1,4 +1,4 @@
-From b080287881fd76acd54b7971d1f0910907c4f673 Mon Sep 17 00:00:00 2001
+From a90b8f7dfcfcab2d40d1a575e3948ef3a34f643f Mon Sep 17 00:00:00 2001
From: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
Date: Fri, 8 Nov 2019 15:57:27 -0800
Subject: [PATCH] i2c: aspeed: filter garbage interrupts out
@@ -12,7 +12,7 @@ Signed-off-by: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
1 file changed, 14 insertions(+)
diff --git a/drivers/i2c/busses/i2c-aspeed.c b/drivers/i2c/busses/i2c-aspeed.c
-index 15a9e1b..916ff7f 100644
+index 62b803e15ce2..c24cecdcfe89 100644
--- a/drivers/i2c/busses/i2c-aspeed.c
+++ b/drivers/i2c/busses/i2c-aspeed.c
@@ -87,7 +87,11 @@
@@ -39,7 +39,7 @@ index 15a9e1b..916ff7f 100644
/* 0x14 : I2CD Command/Status Register */
#define ASPEED_I2CD_SCL_LINE_STS BIT(18)
-@@ -1032,6 +1041,11 @@ static irqreturn_t aspeed_i2c_bus_irq(int irq, void *dev_id)
+@@ -1021,6 +1030,11 @@ static irqreturn_t aspeed_i2c_bus_irq(int irq, void *dev_id)
/* Ack all interrupts except for Rx done */
writel(irq_received & ~ASPEED_I2CD_INTR_RX_DONE,
bus->base + ASPEED_I2C_INTR_STS_REG);
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0082-ARM-dts-aspeed-g6-add-USB-virtual-hub-fixup.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0082-ARM-dts-aspeed-g6-add-USB-virtual-hub-fixup.patch
index 252b2203c..f950c9262 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0082-ARM-dts-aspeed-g6-add-USB-virtual-hub-fixup.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0082-ARM-dts-aspeed-g6-add-USB-virtual-hub-fixup.patch
@@ -1,4 +1,4 @@
-From f034e4129e5ad6b102be4cbe2add0fe46bfe413e Mon Sep 17 00:00:00 2001
+From e0e33dfafe30f6dfb175caaf6be99aa9cbfe295a Mon Sep 17 00:00:00 2001
From: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
Date: Wed, 20 Nov 2019 13:06:58 -0800
Subject: [PATCH] ARM: dts: aspeed-g6: add USB virtual hub fixup
@@ -12,7 +12,7 @@ Signed-off-by: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
2 files changed, 15 insertions(+)
diff --git a/arch/arm/boot/dts/aspeed-g6-pinctrl.dtsi b/arch/arm/boot/dts/aspeed-g6-pinctrl.dtsi
-index 045ce66..6ea66aa 100644
+index 045ce66ca876..6ea66aaf9dd0 100644
--- a/arch/arm/boot/dts/aspeed-g6-pinctrl.dtsi
+++ b/arch/arm/boot/dts/aspeed-g6-pinctrl.dtsi
@@ -1112,6 +1112,11 @@
@@ -28,10 +28,10 @@ index 045ce66..6ea66aa 100644
function = "VB";
groups = "VB";
diff --git a/arch/arm/boot/dts/aspeed-g6.dtsi b/arch/arm/boot/dts/aspeed-g6.dtsi
-index 88bd020..b2549f2 100644
+index 33fcd89db6b8..b880e8e8f999 100644
--- a/arch/arm/boot/dts/aspeed-g6.dtsi
+++ b/arch/arm/boot/dts/aspeed-g6.dtsi
-@@ -253,6 +253,16 @@
+@@ -272,6 +272,16 @@
status = "disabled";
};
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0084-ARM-dts-aspeed-g6-add-GFX-node.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0084-ARM-dts-aspeed-g6-add-GFX-node.patch
index 81aefdf47..f578d0f04 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0084-ARM-dts-aspeed-g6-add-GFX-node.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0084-ARM-dts-aspeed-g6-add-GFX-node.patch
@@ -1,4 +1,4 @@
-From 1a80650c970c8d5f7332249db5d26d2e553ef4c2 Mon Sep 17 00:00:00 2001
+From 523bbaaf9f9d064c9cf1f627d64dd7ba169d175d Mon Sep 17 00:00:00 2001
From: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
Date: Wed, 20 Nov 2019 15:01:06 -0800
Subject: [PATCH] ARM: dts: aspeed-g6: add GFX node
@@ -11,10 +11,10 @@ Signed-off-by: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
1 file changed, 9 insertions(+)
diff --git a/arch/arm/boot/dts/aspeed-g6.dtsi b/arch/arm/boot/dts/aspeed-g6.dtsi
-index b2549f2..34281b1 100644
+index b880e8e8f999..3e2153416e11 100644
--- a/arch/arm/boot/dts/aspeed-g6.dtsi
+++ b/arch/arm/boot/dts/aspeed-g6.dtsi
-@@ -311,6 +311,15 @@
+@@ -330,6 +330,15 @@
quality = <100>;
};
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0085-drm-add-AST2600-GFX-support.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0085-drm-add-AST2600-GFX-support.patch
index 856da7caf..259720e87 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0085-drm-add-AST2600-GFX-support.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0085-drm-add-AST2600-GFX-support.patch
@@ -1,4 +1,4 @@
-From 4090d7ab2e7282ff5680c3e574e644964a8ae7d6 Mon Sep 17 00:00:00 2001
+From 195cd60ff2fe38b18ebdea90245b908548f4e985 Mon Sep 17 00:00:00 2001
From: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
Date: Wed, 20 Nov 2019 14:58:24 -0800
Subject: [PATCH] drm: add AST2600 GFX support
@@ -13,7 +13,7 @@ Signed-off-by: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
3 files changed, 18 insertions(+), 10 deletions(-)
diff --git a/drivers/gpu/drm/aspeed/aspeed_gfx.h b/drivers/gpu/drm/aspeed/aspeed_gfx.h
-index a10358b..eebd72e 100644
+index a10358bb61ec..eebd72eb1220 100644
--- a/drivers/gpu/drm/aspeed/aspeed_gfx.h
+++ b/drivers/gpu/drm/aspeed/aspeed_gfx.h
@@ -13,11 +13,15 @@ struct aspeed_gfx {
@@ -33,7 +33,7 @@ index a10358b..eebd72e 100644
#define CRT_CTRL2 0x64 /* CRT Control II */
#define CRT_STATUS 0x68 /* CRT Status */
diff --git a/drivers/gpu/drm/aspeed/aspeed_gfx_crtc.c b/drivers/gpu/drm/aspeed/aspeed_gfx_crtc.c
-index 15db9e4..2c95c72 100644
+index 2184b8be6fd4..86359a0fe05f 100644
--- a/drivers/gpu/drm/aspeed/aspeed_gfx_crtc.c
+++ b/drivers/gpu/drm/aspeed/aspeed_gfx_crtc.c
@@ -59,8 +59,8 @@ static void aspeed_gfx_enable_controller(struct aspeed_gfx *priv)
@@ -57,7 +57,7 @@ index 15db9e4..2c95c72 100644
static void aspeed_gfx_crtc_mode_set_nofb(struct aspeed_gfx *priv)
diff --git a/drivers/gpu/drm/aspeed/aspeed_gfx_drv.c b/drivers/gpu/drm/aspeed/aspeed_gfx_drv.c
-index eeb22ec..aa44e01 100644
+index ada2f6aca906..92bc9b475e0f 100644
--- a/drivers/gpu/drm/aspeed/aspeed_gfx_drv.c
+++ b/drivers/gpu/drm/aspeed/aspeed_gfx_drv.c
@@ -112,8 +112,14 @@ static int aspeed_gfx_load(struct drm_device *drm)
@@ -92,7 +92,7 @@ index eeb22ec..aa44e01 100644
priv->clk = devm_clk_get(drm->dev, NULL);
if (IS_ERR(priv->clk)) {
-@@ -212,6 +215,7 @@ static struct drm_driver aspeed_gfx_driver = {
+@@ -211,6 +214,7 @@ static struct drm_driver aspeed_gfx_driver = {
static const struct of_device_id aspeed_gfx_match[] = {
{ .compatible = "aspeed,ast2500-gfx" },
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0086-ADC-linux-driver-for-AST2600.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0086-ADC-linux-driver-for-AST2600.patch
index 8f1e14b86..4dde9fb06 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0086-ADC-linux-driver-for-AST2600.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0086-ADC-linux-driver-for-AST2600.patch
@@ -1,4 +1,4 @@
-From 8ed59cc252af9a87d2d7b3e45a949030d91761b7 Mon Sep 17 00:00:00 2001
+From 278db13a36f128b84f76fc0f0f13860b5bf62588 Mon Sep 17 00:00:00 2001
From: Chen Yugang <yugang.chen@linux.intel.com>
Date: Tue, 3 Dec 2019 13:41:37 +0800
Subject: [PATCH] ADC linux driver for AST2600
@@ -13,10 +13,10 @@ Signed-off-by: Chen Yugang <yugang.chen@linux.intel.com>
2 files changed, 99 insertions(+), 14 deletions(-)
diff --git a/arch/arm/boot/dts/aspeed-g6.dtsi b/arch/arm/boot/dts/aspeed-g6.dtsi
-index 34281b1..4e8d25f 100644
+index 3e2153416e11..5acc1085526d 100644
--- a/arch/arm/boot/dts/aspeed-g6.dtsi
+++ b/arch/arm/boot/dts/aspeed-g6.dtsi
-@@ -320,12 +320,22 @@
+@@ -339,12 +339,22 @@
interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
};
@@ -42,7 +42,7 @@ index 34281b1..4e8d25f 100644
status = "disabled";
};
diff --git a/drivers/iio/adc/aspeed_adc.c b/drivers/iio/adc/aspeed_adc.c
-index d3fc39d..1dd5a97 100644
+index d3fc39df535d..1dd5a97a16bc 100644
--- a/drivers/iio/adc/aspeed_adc.c
+++ b/drivers/iio/adc/aspeed_adc.c
@@ -1,8 +1,12 @@
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0086-ARM-dts-aspeed-g6-add-video-node.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0086-ARM-dts-aspeed-g6-add-video-node.patch
index 06043dbb0..221800720 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0086-ARM-dts-aspeed-g6-add-video-node.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0086-ARM-dts-aspeed-g6-add-video-node.patch
@@ -1,4 +1,4 @@
-From 14931c741e837871672bad0208591ea571b0a6ea Mon Sep 17 00:00:00 2001
+From 90c72bbe5f1ac2c8d62736c44492bd8bbc4fcab0 Mon Sep 17 00:00:00 2001
From: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
Date: Tue, 26 Nov 2019 16:37:36 -0800
Subject: [PATCH] ARM: dts: aspeed-g6: add video node
@@ -11,10 +11,10 @@ Signed-off-by: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
1 file changed, 10 insertions(+)
diff --git a/arch/arm/boot/dts/aspeed-g6.dtsi b/arch/arm/boot/dts/aspeed-g6.dtsi
-index 4e8d25f..239c904 100644
+index 5acc1085526d..b0283e03e9ff 100644
--- a/arch/arm/boot/dts/aspeed-g6.dtsi
+++ b/arch/arm/boot/dts/aspeed-g6.dtsi
-@@ -340,6 +340,16 @@
+@@ -359,6 +359,16 @@
status = "disabled";
};
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0087-media-aspeed-add-aspeed-ast2600-video-engine-compati.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0087-media-aspeed-add-aspeed-ast2600-video-engine-compati.patch
index f8c44ea96..1d8b722de 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0087-media-aspeed-add-aspeed-ast2600-video-engine-compati.patch
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0087-media-aspeed-add-aspeed-ast2600-video-engine-compati.patch
@@ -1,22 +1,56 @@
-From 9ca66177376464ce7c1bbe95c392c4509331ad74 Mon Sep 17 00:00:00 2001
+From 1765cb18bacff9d1f48b833f44da198a09f7d5cb Mon Sep 17 00:00:00 2001
From: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
Date: Tue, 26 Nov 2019 16:39:16 -0800
Subject: [PATCH] media: aspeed: add aspeed,ast2600-video-engine compatible
string
This commit adds "aspeed,ast2600-video-engine" compatible string
-to support AST2600 video engine H/W.
+to support AST2600 video engine H/W. Also. it adds G6 specific
+register handling flow.
Signed-off-by: Jae Hyun Yoo <jae.hyun.yoo@intel.com>
---
- drivers/media/platform/aspeed-video.c | 1 +
- 1 file changed, 1 insertion(+)
+ drivers/media/platform/aspeed-video.c | 13 ++++++++++---
+ 1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/drivers/media/platform/aspeed-video.c b/drivers/media/platform/aspeed-video.c
-index 0473f31..5fa48d3 100644
+index db45502774b1..fe70ad408375 100644
--- a/drivers/media/platform/aspeed-video.c
+++ b/drivers/media/platform/aspeed-video.c
-@@ -1717,6 +1717,7 @@ static int aspeed_video_remove(struct platform_device *pdev)
+@@ -72,8 +72,8 @@
+ #define VE_SEQ_CTRL_CAP_BUSY BIT(16)
+ #define VE_SEQ_CTRL_COMP_BUSY BIT(18)
+
+-#ifdef CONFIG_MACH_ASPEED_G5
+-#define VE_SEQ_CTRL_JPEG_MODE BIT(13) /* AST2500 */
++#if defined(CONFIG_MACH_ASPEED_G5) || defined(CONFIG_MACH_ASPEED_G6)
++#define VE_SEQ_CTRL_JPEG_MODE BIT(13) /* AST2500/2600 */
+ #else
+ #define VE_SEQ_CTRL_JPEG_MODE BIT(8) /* AST2400 */
+ #endif /* CONFIG_MACH_ASPEED_G5 */
+@@ -135,6 +135,12 @@
+
+ #define VE_OFFSET_COMP_STREAM 0x078
+
++#ifdef CONFIG_MACH_ASPEED_G6
++#define VE_JPEG_COMP_SIZE_READ_BACK 0x084 /* AST2600 */
++#else
++#define VE_JPEG_COMP_SIZE_READ_BACK VE_OFFSET_COMP_STREAM
++#endif
++
+ #define VE_SRC_LR_EDGE_DET 0x090
+ #define VE_SRC_LR_EDGE_DET_LEFT GENMASK(11, 0)
+ #define VE_SRC_LR_EDGE_DET_NO_V BIT(12)
+@@ -572,7 +578,7 @@ static irqreturn_t aspeed_video_irq(int irq, void *arg)
+ if (sts & VE_INTERRUPT_COMP_COMPLETE) {
+ struct aspeed_video_buffer *buf;
+ u32 frame_size = aspeed_video_read(video,
+- VE_OFFSET_COMP_STREAM);
++ VE_JPEG_COMP_SIZE_READ_BACK);
+
+ spin_lock(&video->lock);
+ clear_bit(VIDEO_FRAME_INPRG, &video->flags);
+@@ -1718,6 +1724,7 @@ static int aspeed_video_remove(struct platform_device *pdev)
static const struct of_device_id aspeed_video_of_match[] = {
{ .compatible = "aspeed,ast2400-video-engine" },
{ .compatible = "aspeed,ast2500-video-engine" },
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0089-ast2600-enable-high-speed-uart-in-kernel.patch b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0089-ast2600-enable-high-speed-uart-in-kernel.patch
new file mode 100644
index 000000000..962d42e6f
--- /dev/null
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed/0089-ast2600-enable-high-speed-uart-in-kernel.patch
@@ -0,0 +1,97 @@
+From 054391014d04e5b97ae62e1bf5e6aed005f3c67a Mon Sep 17 00:00:00 2001
+From: Kuiying Wang <kuiying.wang@intel.com>
+Date: Fri, 13 Dec 2019 16:15:16 +0800
+Subject: [PATCH] ast2600: enable high speed uart in kernel.
+
+Tested:
+1. Config baud rate to 921600 in BIOS setup page
+2. BMC could change env variable "hostserialcfg" to 1.
+3. BMC is force to reboot and SPA baud rate is changed to 921600 successfully.
+4. It is same for back to 115200.
+
+Signed-off-by: Kuiying Wang <kuiying.wang@intel.com>
+---
+ drivers/clk/clk-ast2600.c | 26 +++++++++++++++++++-------
+ include/dt-bindings/clock/ast2600-clock.h | 2 ++
+ 2 files changed, 21 insertions(+), 7 deletions(-)
+
+diff --git a/drivers/clk/clk-ast2600.c b/drivers/clk/clk-ast2600.c
+index c7236e39ef85..af908b2dbeb6 100644
+--- a/drivers/clk/clk-ast2600.c
++++ b/drivers/clk/clk-ast2600.c
+@@ -15,7 +15,7 @@
+
+ #include "clk-aspeed.h"
+
+-#define ASPEED_G6_NUM_CLKS 71
++#define ASPEED_G6_NUM_CLKS ASPEED_CLK_MAX
+
+ #define ASPEED_G6_SILICON_REV 0x004
+
+@@ -43,6 +43,9 @@
+ #define ASPEED_MAC12_CLK_DLY 0x340
+ #define ASPEED_MAC34_CLK_DLY 0x350
+
++#define ASPEED_G6_GEN_UART_REF 0x338
++#define UART_192MHZ_R_N_VALUE 0x3c38e
++
+ /* Globally visible clocks */
+ static DEFINE_SPINLOCK(aspeed_g6_clk_lock);
+
+@@ -76,7 +79,7 @@ static const struct aspeed_gate_data aspeed_g6_gates[] = {
+ /* Reserved 11/12 */
+ [ASPEED_CLK_GATE_YCLK] = { 13, 4, "yclk-gate", NULL, 0 }, /* HAC */
+ [ASPEED_CLK_GATE_USBPORT1CLK] = { 14, 14, "usb-port1-gate", NULL, 0 }, /* USB2 hub/USB2 host port 1/USB1.1 dev */
+- [ASPEED_CLK_GATE_UART5CLK] = { 15, -1, "uart5clk-gate", "uart", 0 }, /* UART5 */
++ [ASPEED_CLK_GATE_UART5CLK] = { 15, -1, "uart5clk-gate", "uart5", 0 }, /* UART5 */
+ /* Reserved 16/19 */
+ [ASPEED_CLK_GATE_MAC1CLK] = { 20, 11, "mac1clk-gate", "mac12", 0 }, /* MAC1 */
+ [ASPEED_CLK_GATE_MAC2CLK] = { 21, 12, "mac2clk-gate", "mac12", 0 }, /* MAC2 */
+@@ -437,17 +440,26 @@ static int aspeed_g6_clk_probe(struct platform_device *pdev)
+ return ret;
+ }
+
+- /* UART clock div13 setting */
+- regmap_read(map, ASPEED_G6_MISC_CTRL, &val);
+- if (val & UART_DIV13_EN)
+- rate = 24000000 / 13;
++ /* UART clock setting */
++ regmap_read(map, ASPEED_G6_GEN_UART_REF, &val);
++ if (val == UART_192MHZ_R_N_VALUE){
++ rate = 192000000 / 13;
++ dev_err(dev, "192Mhz baud rate 921600\n");
++ }
+ else
+- rate = 24000000;
++ rate = 24000000 / 13;
+ hw = clk_hw_register_fixed_rate(dev, "uart", NULL, 0, rate);
+ if (IS_ERR(hw))
+ return PTR_ERR(hw);
+ aspeed_g6_clk_data->hws[ASPEED_CLK_UART] = hw;
+
++ /* UART5 clock setting */
++ rate = 24000000 / 13;
++ hw = clk_hw_register_fixed_rate(dev, "uart5", NULL, 0, rate);
++ if (IS_ERR(hw))
++ return PTR_ERR(hw);
++ aspeed_g6_clk_data->hws[ASPEED_CLK_UART5] = hw;
++
+ /* UART6~13 clock div13 setting */
+ regmap_read(map, 0x80, &val);
+ if (val & BIT(31))
+diff --git a/include/dt-bindings/clock/ast2600-clock.h b/include/dt-bindings/clock/ast2600-clock.h
+index 3d90582a813f..4952f7683be7 100644
+--- a/include/dt-bindings/clock/ast2600-clock.h
++++ b/include/dt-bindings/clock/ast2600-clock.h
+@@ -87,6 +87,8 @@
+ #define ASPEED_CLK_MAC2RCLK 68
+ #define ASPEED_CLK_MAC3RCLK 69
+ #define ASPEED_CLK_MAC4RCLK 70
++#define ASPEED_CLK_UART5 71
++#define ASPEED_CLK_MAX 72
+
+ /* Only list resets here that are not part of a gate */
+ #define ASPEED_RESET_ADC 55
+--
+2.7.4
+
diff --git a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed_%.bbappend b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed_%.bbappend
index 7532aa8a4..1898e95f0 100644
--- a/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed_%.bbappend
+++ b/meta-openbmc-mods/meta-common/recipes-kernel/linux/linux-aspeed_%.bbappend
@@ -19,12 +19,10 @@ SRC_URI += " \
file://0015-New-flash-map-for-intel.patch \
file://0016-Add-ASPEED-SGPIO-driver.patch \
file://0017-SGPIO-DT-and-pinctrl-fixup.patch \
- file://0018-Update-PECI-drivers-to-sync-with-linux-upstreaming-v.patch \
file://0019-Add-I2C-IPMB-support.patch \
file://0020-misc-aspeed-add-lpc-mbox-driver.patch \
file://0021-Initial-Port-of-Aspeed-LPC-SIO-driver.patch \
file://0022-Add-AST2500-eSPI-driver.patch \
- file://0026-Add-support-for-new-PECI-commands.patch \
file://0028-Add-AST2500-JTAG-driver.patch \
file://0030-Add-dump-debug-code-into-I2C-drivers.patch \
file://0031-Add-high-speed-baud-rate-support-for-UART.patch \
@@ -61,7 +59,6 @@ SRC_URI += " \
file://0076-arm-ast2600-add-pwm_tacho-driver-from-aspeed.patch \
file://0077-soc-aspeed-Add-read-only-property-support.patch \
file://0078-Fix-NCSI-driver-issue-caused-by-host-shutdown.patch \
- file://0079-usb-gadget-aspeed-backport-aspeed-vhub-bug-fixes.patch \
file://0080-i2c-aspeed-filter-garbage-interrupts-out.patch \
file://0082-ARM-dts-aspeed-g6-add-USB-virtual-hub-fixup.patch \
file://0083-usb-gadget-aspeed-add-ast2600-compatible-string.patch \
@@ -71,6 +68,7 @@ SRC_URI += " \
file://0086-ARM-dts-aspeed-g6-add-video-node.patch \
file://0087-media-aspeed-add-aspeed-ast2600-video-engine-compati.patch \
file://0088-clk-ast2600-enable-ESPICLK-always.patch \
+ file://0089-ast2600-enable-high-speed-uart-in-kernel.patch \
"
SRC_URI += "${@bb.utils.contains('IMAGE_FSTYPES', 'intel-pfr', 'file://0005-128MB-flashmap-for-PFR.patch', '', d)}"
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/configuration/entity-manager_%.bbappend b/meta-openbmc-mods/meta-common/recipes-phosphor/configuration/entity-manager_%.bbappend
index 60c9fdb67..ff89f2ad2 100644
--- a/meta-openbmc-mods/meta-common/recipes-phosphor/configuration/entity-manager_%.bbappend
+++ b/meta-openbmc-mods/meta-common/recipes-phosphor/configuration/entity-manager_%.bbappend
@@ -1,6 +1,6 @@
# this is here just to bump faster than upstream
SRC_URI = "git://github.com/openbmc/entity-manager.git"
-SRCREV = "7d807754cc9153b04b599804464edd9654d7a81e"
+SRCREV = "01542d2af1b1f45335cc8813fffcd3ed07f22989"
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/fru/default-fru/checkFru.sh b/meta-openbmc-mods/meta-common/recipes-phosphor/fru/default-fru/checkFru.sh
index 9f22b179e..3bf1aedb5 100755
--- a/meta-openbmc-mods/meta-common/recipes-phosphor/fru/default-fru/checkFru.sh
+++ b/meta-openbmc-mods/meta-common/recipes-phosphor/fru/default-fru/checkFru.sh
@@ -2,8 +2,11 @@
# this script checks the gpio id and loads the correct baseboard fru
FRUPATH="/etc/fru"
+PRODIDPATH="/var/cache/private"
fruFile="$FRUPATH/baseboard.fru.bin"
-if [ -f $fruFile ]; then
+prodIDFile="$PRODIDPATH/prodID"
+
+if [ -f $fruFile -a -f $prodIDFile ]; then
exit 0
fi
@@ -24,20 +27,29 @@ BOARD_ID=$(read_id)
if grep -q 'CPU part\s*: 0xb76' /proc/cpuinfo; then
# AST2500
case $BOARD_ID in
- 12) NAME="D50TNP1SB";;
- 40) NAME="CooperCity";;
- 42) NAME="WilsonCity";;
- 45) NAME="WilsonCity";;
- 60) NAME="M50CYP2SB2U";;
- 62) NAME="WilsonPoint";;
- *) NAME="S2600WFT";;
+ 12) NAME="D50TNP1SB"
+ PRODID="0x99";;
+ 40) NAME="CooperCity"
+ PRODID="0x9d";;
+ 42) NAME="WilsonCity"
+ PRODID="0x91";;
+ 45) NAME="WilsonCity"
+ PRODID="0x91";;
+ 60) NAME="M50CYP2SB2U"
+ PRODID="0x98";;
+ 62) NAME="WilsonPoint"
+ PRODID="0x9a";;
+ *) NAME="S2600WFT"
+ PRODID="0x7b";;
esac
elif grep -q 'CPU part\s*: 0xc07' /proc/cpuinfo; then
# AST2600
case $BOARD_ID in
- 62) NAME="ArcherCity";;
- *) NAME="AST2600EVB";;
+ 62) NAME="ArcherCity"
+ PRODID="0x9c";;
+ *) NAME="AST2600EVB"
+ PRODID="0x00";;
esac
fi
@@ -46,8 +58,17 @@ if [ -z "$NAME" ]; then
NAME="Unknown"
fi
-cd /tmp
-mkdir -p $FRUPATH
-mkfru $NAME
-mv $NAME.fru.bin $fruFile
+if [ ! -e $prodIDFile ]
+then
+ echo $PRODID >$prodIDFile
+fi
+
+if [ ! -f $fruFile ]
+then
+ cd /tmp
+ mkdir -p $FRUPATH
+ mkfru $NAME
+ mv $NAME.fru.bin $fruFile
+fi
+
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/interfaces/bmcweb_%.bbappend b/meta-openbmc-mods/meta-common/recipes-phosphor/interfaces/bmcweb_%.bbappend
index 00eb38799..3c679fc51 100644
--- a/meta-openbmc-mods/meta-common/recipes-phosphor/interfaces/bmcweb_%.bbappend
+++ b/meta-openbmc-mods/meta-common/recipes-phosphor/interfaces/bmcweb_%.bbappend
@@ -1,5 +1,5 @@
SRC_URI = "git://github.com/openbmc/bmcweb.git"
-SRCREV = "97d57aaa0b95a110c71016d190f95f853051126a"
+SRCREV = "123e823757a6efc08b215766124ba7321e3cca55"
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0002-Fixed-issue-in-setLan-command-for-IP-source.patch b/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0002-Fixed-issue-in-setLan-command-for-IP-source.patch
new file mode 100644
index 000000000..6f080a4f4
--- /dev/null
+++ b/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0002-Fixed-issue-in-setLan-command-for-IP-source.patch
@@ -0,0 +1,62 @@
+From 12ebdc2d53a18d286e34abf0f1553ca423ca6ca5 Mon Sep 17 00:00:00 2001
+From: Rajashekar Gade Reddy <raja.sekhar.reddy.gade@linux.intel.com>
+Date: Wed, 18 Dec 2019 12:01:36 +0530
+Subject: [PATCH] Fixed issue in setLan command for IP source.
+
+Issue: returns success completion code for multiple requests which
+is not correct as per IPMI spec.
+
+Fix: Added proper conditional checks
+
+Tested:
+//IP Address Source: 0x0 (unspecified)
+ipmitool -I lanplus -U root -P 0penBmc -H <ip_addr> raw 0x0c 0x01 0x03 0x04 0x0
+0xCC// Invalid data field in request
+
+//IP Address Source: 0x1 (static address)
+ipmitool -I lanplus -U root -P 0penBmc -H <ip_addr> raw 0x0c 0x01 0x03 0x04 0x1
+0x00 //Success
+
+//IP Address Source: 0x2 (address obtained by BMC running DHCP)
+ipmitool -I lanplus -U root -P 0penBmc -H <ip_addr> raw 0x0c 0x01 0x03 0x04 0x2
+0x00 //Success
+
+//IP Address Source: 0x3 (address loaded by the BIOS or system software)
+ipmitool -I lanplus -U root -P 0penBmc -H <ip_addr> raw 0x0c 0x01 0x03 0x04 0x3
+0xCC// Invalid data field in request
+
+//IP Address Source: 0x4 (address obtained by BMC running other address assignment protocol)
+ipmitool -I lanplus -U root -P 0penBmc -H <ip_addr> raw 0x0c 0x01 0x03 0x04 0x4
+0xCC// Invalid data field in request
+
+ipmitool -I lanplus -U root -P 0penBmc -H <ip_addr> raw 0x0c 0x01 0x03 0x04 0x5
+0x80 // param not supported
+
+Signed-off-by: Rajashekar Gade Reddy <raja.sekhar.reddy.gade@linux.intel.com>
+
+%% original patch: 0002-Fixed-issue-in-setLan-command-for-IP-source.patch
+---
+ transporthandler.cpp | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/transporthandler.cpp b/transporthandler.cpp
+index 7407396..2df3e45 100644
+--- a/transporthandler.cpp
++++ b/transporthandler.cpp
+@@ -1453,9 +1453,12 @@ RspType<> setLan(uint4_t channelBits, uint4_t, uint8_t parameter,
+ return responseSuccess();
+ }
+ case IPSrc::Unspecified:
+- case IPSrc::Static:
+ case IPSrc::BIOS:
+ case IPSrc::BMC:
++ {
++ return responseInvalidFieldRequest();
++ }
++ case IPSrc::Static:
+ {
+ channelCall<setDHCPProperty>(channel, dhcpoff);
+ return responseSuccess();
+--
+2.17.1
+
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0003-Fix-for-return-CC-in-setLan-command-cases.patch b/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0003-Fix-for-return-CC-in-setLan-command-cases.patch
new file mode 100644
index 000000000..bab451f32
--- /dev/null
+++ b/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0003-Fix-for-return-CC-in-setLan-command-cases.patch
@@ -0,0 +1,69 @@
+From 8b3cb6842746d43c0cab3d32821dc5239768642f Mon Sep 17 00:00:00 2001
+From: "Joshi, Mansi" <mansi.joshi@linux.intel.com>
+Date: Wed, 18 Dec 2019 15:10:25 +0530
+Subject: [PATCH] Fix for return CC in setLan command cases
+
+Issue: When DHCP is enabled, setting ip and setting subnet mask returns
+completion code 0xff. Setting default gateway returns 0x00.
+
+Fix: Returns CC 0xd5 because this parameter is R/W. It is only unable
+to be updated because the current state blocks it (i.e. 0xd5).
+
+Tested:
+ipmitool raw 0x0c 0x01 0x03 0x03 0x00 0x00 0x00 0x00 //setting ip
+0xd5 //Command, or request parameter, not supported in present state.
+
+ipmitool raw 0x0c 0x01 0x03 0x06 0xff 0xff 0xf0 0x00 //subnet mask
+0xd5 //Command, or request parameter, not supported in present state.
+
+ipmitool raw 0x0c 0x01 0x03 0x0c 0x0a 0xfe 0xef 0x77 //default gateway
+0xd5 //Command, or request parameter, not supported in present state.
+
+%% original patch: 0065-Fix-for-return-CC-in-setLan-command-cases.patch
+---
+ transporthandler.cpp | 15 +++++++++++++++
+ 1 file changed, 15 insertions(+)
+
+diff --git a/transporthandler.cpp b/transporthandler.cpp
+index 7407396..7b9ff3d 100644
+--- a/transporthandler.cpp
++++ b/transporthandler.cpp
+@@ -1423,6 +1423,11 @@ RspType<> setLan(uint4_t channelBits, uint4_t, uint8_t parameter,
+ }
+ case LanParam::IP:
+ {
++ std::string dhcp = channelCall<getDHCPProperty>(channel);
++ if ((dhcp == dhcpv4) || (dhcp == dhcpv4v6))
++ {
++ return responseCommandNotAvailable();
++ }
+ in_addr ip;
+ std::array<uint8_t, sizeof(ip)> bytes;
+ if (req.unpack(bytes) != 0 || !req.fullyUnpacked())
+@@ -1477,6 +1482,11 @@ RspType<> setLan(uint4_t channelBits, uint4_t, uint8_t parameter,
+ }
+ case LanParam::SubnetMask:
+ {
++ std::string dhcp = channelCall<getDHCPProperty>(channel);
++ if ((dhcp == dhcpv4) || (dhcp == dhcpv4v6))
++ {
++ return responseCommandNotAvailable();
++ }
+ in_addr netmask;
+ std::array<uint8_t, sizeof(netmask)> bytes;
+ if (req.unpack(bytes) != 0 || !req.fullyUnpacked())
+@@ -1490,6 +1500,11 @@ RspType<> setLan(uint4_t channelBits, uint4_t, uint8_t parameter,
+ }
+ case LanParam::Gateway1:
+ {
++ std::string dhcp = channelCall<getDHCPProperty>(channel);
++ if ((dhcp == dhcpv4) || (dhcp == dhcpv4v6))
++ {
++ return responseCommandNotAvailable();
++ }
+ in_addr gateway;
+ std::array<uint8_t, sizeof(gateway)> bytes;
+ if (req.unpack(bytes) != 0 || !req.fullyUnpacked())
+--
+2.7.4
+
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host_%.bbappend b/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host_%.bbappend
index c6bc80202..ba148779f 100644
--- a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host_%.bbappend
+++ b/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host_%.bbappend
@@ -2,7 +2,7 @@ FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
PROJECT_SRC_DIR := "${THISDIR}/${PN}"
SRC_URI = "git://github.com/openbmc/phosphor-host-ipmid"
-SRCREV = "225dec858e52f0e8319acfe72d7b3630adcc7a0d"
+SRCREV = "ebc53cb165ea26aa48f0bbf01d9bce0e4abb0b7d"
SRC_URI += "file://phosphor-ipmi-host.service \
file://host-ipmid-whitelist.conf \
@@ -15,6 +15,8 @@ SRC_URI += "file://phosphor-ipmi-host.service \
file://0063-Save-the-pre-timeout-interrupt-in-dbus-property.patch \
file://0064-Update-provisioning-mode-filter-logic.patch \
file://0001-Modify-Get-Lan-Configuration-IP-Address-Source-to-us.patch \
+ file://0002-Fixed-issue-in-setLan-command-for-IP-source.patch \
+ file://0003-Fix-for-return-CC-in-setLan-command-cases.patch \
"
EXTRA_OECONF_append = " --disable-i2c-whitelist-check"
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-net/0012-Do-not-stop-session-in-deactivate-payload.patch b/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-net/0012-Do-not-stop-session-in-deactivate-payload.patch
deleted file mode 100644
index 6430a6928..000000000
--- a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-net/0012-Do-not-stop-session-in-deactivate-payload.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-From cf8c0e1bf18334fe4a8f76c1e9b34ccfdc82f6f9 Mon Sep 17 00:00:00 2001
-From: Yong Li <yong.b.li@linux.intel.com>
-Date: Fri, 15 Nov 2019 18:34:04 +0800
-Subject: [PATCH] Do not stop session in deactivate payload
-
-IPMI spec defines that:
-The Deactivate Payload command does not cause the session to be terminated;
-
-Also during SOL looptest, there is only one time startSession call,
-but multiple stopSessions calls,
-This causes the looptest will fail if there is any new sessions comes in,
-needs to remove the stopSession call.
-
-Tested:
-Start the loop test in a terminal:
-ipmitool -H $BMCIP -Uroot -P 0penBmc -I lanplus sol looptest 500 200
-
-Then start a new session in another terminal:
-ipmitool -H $BMCIP -Uroot -P 0penBmc -I lanplus raw 6 1
-
-The looptest still works
-
-Signed-off-by: Yong Li <yong.b.li@linux.intel.com>
----
- command/payload_cmds.cpp | 7 -------
- 1 file changed, 7 deletions(-)
-
-diff --git a/command/payload_cmds.cpp b/command/payload_cmds.cpp
-index f558781..363b843 100644
---- a/command/payload_cmds.cpp
-+++ b/command/payload_cmds.cpp
-@@ -176,13 +176,6 @@ std::vector<uint8_t> deactivatePayload(const std::vector<uint8_t>& inPayload,
- */
- return outPayload;
- }
--
-- auto check =
-- std::get<session::Manager&>(singletonPool).stopSession(sessionID);
-- if (!check)
-- {
-- response->completionCode = IPMI_CC_UNSPECIFIED_ERROR;
-- }
- }
- catch (std::exception& e)
- {
---
-2.7.4
-
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-net_%.bbappend b/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-net_%.bbappend
index b488e6d8e..614133645 100644
--- a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-net_%.bbappend
+++ b/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-net_%.bbappend
@@ -3,7 +3,7 @@ inherit useradd
# TODO: This should be removed, once up-stream bump up
# issue is resolved
SRC_URI += "git://github.com/openbmc/phosphor-net-ipmid"
-SRCREV = "0f63e01ce6bb11920d78d999267558500ca9a272"
+SRCREV = "46bec0f60a201a644c1f3af4cec2f31da58a0595"
USERADD_PACKAGES = "${PN}"
# add a group called ipmi
@@ -22,6 +22,5 @@ FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
SRC_URI += " file://0006-Modify-dbus-namespace-of-chassis-control-for-guid.patch \
file://0009-Add-dbus-interface-for-sol-commands.patch \
file://0011-Remove-Get-SOL-Config-Command-from-Netipmid.patch \
- file://0012-Do-not-stop-session-in-deactivate-payload.patch \
"
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-node-manager-proxy_git.bb b/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-node-manager-proxy_git.bb
index 635f2d3a4..9f657e39b 100644
--- a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-node-manager-proxy_git.bb
+++ b/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-node-manager-proxy_git.bb
@@ -3,7 +3,7 @@ DESCRIPTION = "The Node Manager Proxy provides a simple interface for communicat
with Management Engine via IPMB"
SRC_URI = "git://github.com/Intel-BMC/node-manager;protocol=ssh"
-SRCREV = "13c62849bce28161fc58134c52920e0c494745f9"
+SRCREV = "ddba32d5ac94cdd8db19e18215535d7fe86675e6"
PV = "0.1+git${SRCPV}"
LICENSE = "Apache-2.0"
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/phosphor-u-boot-mgr/phosphor-u-boot-mgr_git.bb b/meta-openbmc-mods/meta-common/recipes-phosphor/phosphor-u-boot-mgr/phosphor-u-boot-mgr_git.bb
index d89b30380..12cb4ef78 100644
--- a/meta-openbmc-mods/meta-common/recipes-phosphor/phosphor-u-boot-mgr/phosphor-u-boot-mgr_git.bb
+++ b/meta-openbmc-mods/meta-common/recipes-phosphor/phosphor-u-boot-mgr/phosphor-u-boot-mgr_git.bb
@@ -10,7 +10,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=e3fc50a88d0a364313df4b21ef20c29e"
SRC_URI = "git://github.com/Intel-BMC/provingground.git;protocol=ssh"
-SRCREV = "eddf621897090ba346b1aaa81a4b8be12076ab60"
+SRCREV = "5a03fdc6a119b65ecf320622ce2809e340749fa9"
inherit cmake systemd
SYSTEMD_SERVICE_${PN} = "xyz.openbmc_project.U_Boot.Environment.Manager.service"
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/prov-mode-mgr/prov-mode-mgr_git.bb b/meta-openbmc-mods/meta-common/recipes-phosphor/prov-mode-mgr/prov-mode-mgr_git.bb
index 0b5a8f395..146d2e523 100644
--- a/meta-openbmc-mods/meta-common/recipes-phosphor/prov-mode-mgr/prov-mode-mgr_git.bb
+++ b/meta-openbmc-mods/meta-common/recipes-phosphor/prov-mode-mgr/prov-mode-mgr_git.bb
@@ -10,7 +10,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=e3fc50a88d0a364313df4b21ef20c29e"
SRC_URI = "git://github.com/Intel-BMC/provingground.git;protocol=ssh"
-SRCREV = "eddf621897090ba346b1aaa81a4b8be12076ab60"
+SRCREV = "5a03fdc6a119b65ecf320622ce2809e340749fa9"
inherit cmake systemd
SYSTEMD_SERVICE_${PN} = "xyz.openbmc_project.RestrictionMode.Manager.service"
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/security-manager/security-manager_git.bb b/meta-openbmc-mods/meta-common/recipes-phosphor/security-manager/security-manager_git.bb
index 6e1df2f89..8faa23f97 100644
--- a/meta-openbmc-mods/meta-common/recipes-phosphor/security-manager/security-manager_git.bb
+++ b/meta-openbmc-mods/meta-common/recipes-phosphor/security-manager/security-manager_git.bb
@@ -10,7 +10,7 @@ LIC_FILES_CHKSUM = "file://${INTELBASE}/COPYING.apache-2.0;md5=34400b68072d710fe
inherit cmake systemd
SRC_URI = "git://github.com/Intel-BMC/provingground.git;protocol=ssh"
-SRCREV = "eddf621897090ba346b1aaa81a4b8be12076ab60"
+SRCREV = "5a03fdc6a119b65ecf320622ce2809e340749fa9"
SYSTEMD_SERVICE_${PN} += "xyz.openbmc_project.SecurityManager.service"
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/sel-logger/phosphor-sel-logger_%.bbappend b/meta-openbmc-mods/meta-common/recipes-phosphor/sel-logger/phosphor-sel-logger_%.bbappend
index de8bdccd7..e80464274 100644
--- a/meta-openbmc-mods/meta-common/recipes-phosphor/sel-logger/phosphor-sel-logger_%.bbappend
+++ b/meta-openbmc-mods/meta-common/recipes-phosphor/sel-logger/phosphor-sel-logger_%.bbappend
@@ -2,4 +2,3 @@
SRC_URI = "git://github.com/openbmc/phosphor-sel-logger.git"
SRCREV = "151b7c1fc62971b7d319146e5ea129d44eadd9d7"
-EXTRA_OECMAKE_intel += "-DREDFISH_LOG_MONITOR_PULSE_EVENTS=ON"
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/sensors/dbus-sensors_%.bbappend b/meta-openbmc-mods/meta-common/recipes-phosphor/sensors/dbus-sensors_%.bbappend
index f0bec9feb..5511e3b0f 100644
--- a/meta-openbmc-mods/meta-common/recipes-phosphor/sensors/dbus-sensors_%.bbappend
+++ b/meta-openbmc-mods/meta-common/recipes-phosphor/sensors/dbus-sensors_%.bbappend
@@ -1,7 +1,7 @@
-SRCREV = "9f9b38d89a751e70cdf61bfb3f78c05800201f95"
+SRCREV = "347dd4e7a0a4923583151e4d9eb483b65dba9e7b"
SRC_URI = "git://github.com/openbmc/dbus-sensors.git"
-DEPENDS_append = " libgpiod"
+DEPENDS_append = " libgpiod libmctp"
FILESEXTRAPATHS_append := ":${THISDIR}/${PN}"
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/settings/settings_git.bb b/meta-openbmc-mods/meta-common/recipes-phosphor/settings/settings_git.bb
index f8fe0682d..314e31779 100644
--- a/meta-openbmc-mods/meta-common/recipes-phosphor/settings/settings_git.bb
+++ b/meta-openbmc-mods/meta-common/recipes-phosphor/settings/settings_git.bb
@@ -1,7 +1,7 @@
SUMMARY = "Settings"
SRC_URI = "git://github.com/Intel-BMC/provingground.git;protocol=ssh"
-SRCREV = "eddf621897090ba346b1aaa81a4b8be12076ab60"
+SRCREV = "5a03fdc6a119b65ecf320622ce2809e340749fa9"
PV = "0.1+git${SRCPV}"
LICENSE = "Apache-2.0"
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/special-mode-mgr/special-mode-mgr_git.bb b/meta-openbmc-mods/meta-common/recipes-phosphor/special-mode-mgr/special-mode-mgr_git.bb
index a6f5a433e..2c4cb80a7 100644
--- a/meta-openbmc-mods/meta-common/recipes-phosphor/special-mode-mgr/special-mode-mgr_git.bb
+++ b/meta-openbmc-mods/meta-common/recipes-phosphor/special-mode-mgr/special-mode-mgr_git.bb
@@ -9,7 +9,7 @@ LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=e3fc50a88d0a364313df4b21ef20c29e"
SRC_URI = "git://github.com/Intel-BMC/provingground.git;protocol=ssh"
-SRCREV = "eddf621897090ba346b1aaa81a4b8be12076ab60"
+SRCREV = "5a03fdc6a119b65ecf320622ce2809e340749fa9"
EXTRA_OECMAKE += "${@bb.utils.contains('EXTRA_IMAGE_FEATURES', 'validation-unsecure', '-DBMC_VALIDATION_UNSECURE_FEATURE=ON', '', d)}"
inherit cmake systemd
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/srvcfg-manager/srvcfg-manager_git.bb b/meta-openbmc-mods/meta-common/recipes-phosphor/srvcfg-manager/srvcfg-manager_git.bb
index 05f97d1a9..6cef4c3ea 100644
--- a/meta-openbmc-mods/meta-common/recipes-phosphor/srvcfg-manager/srvcfg-manager_git.bb
+++ b/meta-openbmc-mods/meta-common/recipes-phosphor/srvcfg-manager/srvcfg-manager_git.bb
@@ -9,7 +9,7 @@ LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=e3fc50a88d0a364313df4b21ef20c29e"
SRC_URI = "git://github.com/Intel-BMC/provingground.git;protocol=ssh"
-SRCREV = "eddf621897090ba346b1aaa81a4b8be12076ab60"
+SRCREV = "5a03fdc6a119b65ecf320622ce2809e340749fa9"
inherit cmake systemd
SYSTEMD_SERVICE_${PN} = "srvcfg-manager.service"
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/state/post-code-manager_git.bb b/meta-openbmc-mods/meta-common/recipes-phosphor/state/post-code-manager_git.bb
index 0d612f3b3..98e0706fa 100644
--- a/meta-openbmc-mods/meta-common/recipes-phosphor/state/post-code-manager_git.bb
+++ b/meta-openbmc-mods/meta-common/recipes-phosphor/state/post-code-manager_git.bb
@@ -2,7 +2,7 @@ SUMMARY = "Phosphor post code manager"
DESCRIPTION = "Post Code Manager"
SRC_URI = "git://github.com/openbmc/phosphor-post-code-manager.git"
-SRCREV = "3a0444002398714c3a5539c93355c74eb184b2b1"
+SRCREV = "655837973feb51da3767f5f246ec198877900b0b"
S = "${WORKDIR}/git"
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/system/callback-manager.bb b/meta-openbmc-mods/meta-common/recipes-phosphor/system/callback-manager.bb
index 433bc7ca5..910bf9fae 100644
--- a/meta-openbmc-mods/meta-common/recipes-phosphor/system/callback-manager.bb
+++ b/meta-openbmc-mods/meta-common/recipes-phosphor/system/callback-manager.bb
@@ -7,7 +7,7 @@ inherit cmake systemd
DEPENDS = "boost sdbusplus"
PV = "0.1+git${SRCPV}"
-SRCREV = "eddf621897090ba346b1aaa81a4b8be12076ab60"
+SRCREV = "5a03fdc6a119b65ecf320622ce2809e340749fa9"
S = "${WORKDIR}/git/callback-manager"
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/virtual-media/virtual-media.bb b/meta-openbmc-mods/meta-common/recipes-phosphor/virtual-media/virtual-media.bb
index ca86bd525..007265667 100644
--- a/meta-openbmc-mods/meta-common/recipes-phosphor/virtual-media/virtual-media.bb
+++ b/meta-openbmc-mods/meta-common/recipes-phosphor/virtual-media/virtual-media.bb
@@ -2,7 +2,7 @@ SUMMARY = "Virtual Media Service"
DESCRIPTION = "Virtual Media Service"
SRC_URI = "git://github.com/Intel-BMC/provingground.git;protocol=ssh"
-SRCREV = "eddf621897090ba346b1aaa81a4b8be12076ab60"
+SRCREV = "5a03fdc6a119b65ecf320622ce2809e340749fa9"
S = "${WORKDIR}/git/virtual-media/"
PV = "1.0+git${SRCPV}"
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/webui/phosphor-webui_%.bbappend b/meta-openbmc-mods/meta-common/recipes-phosphor/webui/phosphor-webui_%.bbappend
index e77d8fd65..bd72b27be 100644
--- a/meta-openbmc-mods/meta-common/recipes-phosphor/webui/phosphor-webui_%.bbappend
+++ b/meta-openbmc-mods/meta-common/recipes-phosphor/webui/phosphor-webui_%.bbappend
@@ -1,2 +1,2 @@
SRC_URI = "git://github.com/Intel-BMC/phosphor-webui;protocol=ssh;branch=intel2"
-SRCREV = "f9935eccf5b9de75d6622b3d0a719ce0f8a425d0"
+SRCREV = "376cb79388c70253cc8c2b2f8eb40e0f5833ac40"
diff --git a/meta-openbmc-mods/meta-common/recipes-x86/chassis/x86-power-control_%.bbappend b/meta-openbmc-mods/meta-common/recipes-x86/chassis/x86-power-control_%.bbappend
index 217345885..554d44ece 100755
--- a/meta-openbmc-mods/meta-common/recipes-x86/chassis/x86-power-control_%.bbappend
+++ b/meta-openbmc-mods/meta-common/recipes-x86/chassis/x86-power-control_%.bbappend
@@ -1,3 +1,3 @@
# Enable downstream autobump
SRC_URI = "git://github.com/openbmc/x86-power-control.git;protocol=ssh"
-SRCREV = "3f6ecb212494d1a9362256d7aae03e11f3efb6f7"
+SRCREV = "8d6602196d496a8611a789cd36036b2f4ea14f76"