mirror of
https://github.com/ps5-linux/ps5-linux-patches.git
synced 2026-07-16 10:10:38 +00:00
Compare commits
5 Commits
kernel-7.1
...
kernel-7.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cb839ab600 | ||
|
|
1926418e4e | ||
|
|
c445e9adf3 | ||
|
|
e81e281f38 | ||
|
|
050704a2f5 |
14
.config
14
.config
@@ -1,6 +1,6 @@
|
||||
#
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# Linux/x86 7.1.2 Kernel Configuration
|
||||
# Linux/x86 7.1.3 Kernel Configuration
|
||||
#
|
||||
CONFIG_CC_VERSION_TEXT="gcc (Ubuntu 15.2.0-16ubuntu1) 15.2.0"
|
||||
CONFIG_CC_IS_GCC=y
|
||||
@@ -11,9 +11,9 @@ CONFIG_AS_VERSION=24600
|
||||
CONFIG_LD_IS_BFD=y
|
||||
CONFIG_LD_VERSION=24600
|
||||
CONFIG_LLD_VERSION=0
|
||||
CONFIG_RUSTC_VERSION=0
|
||||
CONFIG_RUSTC_LLVM_VERSION=0
|
||||
CONFIG_RUSTC_LLVM_MAJOR_VERSION=0
|
||||
CONFIG_RUSTC_VERSION=109600
|
||||
CONFIG_RUSTC_LLVM_VERSION=220102
|
||||
CONFIG_RUSTC_LLVM_MAJOR_VERSION=22
|
||||
CONFIG_CC_CAN_LINK=y
|
||||
CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y
|
||||
CONFIG_CC_HAS_ASM_GOTO_TIED_OUTPUT=y
|
||||
@@ -24,6 +24,10 @@ CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y
|
||||
CONFIG_CC_HAS_COUNTED_BY=y
|
||||
CONFIG_CC_HAS_MULTIDIMENSIONAL_NONSTRING=y
|
||||
CONFIG_LD_CAN_USE_KEEP_IN_OVERLAY=y
|
||||
CONFIG_RUSTC_HAS_SPAN_FILE=y
|
||||
CONFIG_RUSTC_HAS_UNNECESSARY_TRANSMUTES=y
|
||||
CONFIG_RUSTC_HAS_FILE_WITH_NUL=y
|
||||
CONFIG_RUSTC_HAS_FILE_AS_C_STR=y
|
||||
CONFIG_PAHOLE_VERSION=131
|
||||
CONFIG_IRQ_WORK=y
|
||||
CONFIG_BUILDTIME_TABLE_SORT=y
|
||||
@@ -5637,7 +5641,7 @@ CONFIG_DEBUG_INFO_COMPRESSED_NONE=y
|
||||
CONFIG_DEBUG_INFO_BTF=y
|
||||
CONFIG_PAHOLE_HAS_LANG_EXCLUDE=y
|
||||
CONFIG_DEBUG_INFO_BTF_MODULES=y
|
||||
# CONFIG_MODULE_ALLOW_BTF_MISMATCH is not set
|
||||
CONFIG_MODULE_ALLOW_BTF_MISMATCH=y
|
||||
CONFIG_GDB_SCRIPTS=y
|
||||
CONFIG_FRAME_WARN=2048
|
||||
# CONFIG_STRIP_ASM_SYMS is not set
|
||||
|
||||
411
linux.patch
411
linux.patch
@@ -336,10 +336,12 @@ index 000000000000..5263181876f8
|
||||
+obj-$(CONFIG_X86_PS5) += ps5.o
|
||||
diff --git a/arch/x86/platform/ps5/ps5.c b/arch/x86/platform/ps5/ps5.c
|
||||
new file mode 100644
|
||||
index 000000000000..731fed163a83
|
||||
index 000000000000..acfbaf873315
|
||||
--- /dev/null
|
||||
+++ b/arch/x86/platform/ps5/ps5.c
|
||||
@@ -0,0 +1,51 @@
|
||||
@@ -0,0 +1,53 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0-only
|
||||
+
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/ps5.h>
|
||||
+
|
||||
@@ -3417,10 +3419,12 @@ index 000000000000..b4b42394aed9
|
||||
+obj-y += led/
|
||||
diff --git a/drivers/ps5/autoservo_param.h b/drivers/ps5/autoservo_param.h
|
||||
new file mode 100644
|
||||
index 000000000000..d2c25e461bf7
|
||||
index 000000000000..612aee5b273a
|
||||
--- /dev/null
|
||||
+++ b/drivers/ps5/autoservo_param.h
|
||||
@@ -0,0 +1,1902 @@
|
||||
@@ -0,0 +1,1904 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
+
|
||||
+#ifndef _AUTOSERVO_PARAM_H
|
||||
+#define _AUTOSERVO_PARAM_H
|
||||
+
|
||||
@@ -5622,10 +5626,10 @@ index 000000000000..f48ad6f92534
|
||||
+MODULE_LICENSE("GPL");
|
||||
diff --git a/drivers/ps5/fan.c b/drivers/ps5/fan.c
|
||||
new file mode 100644
|
||||
index 000000000000..33a48c664f73
|
||||
index 000000000000..e68819f9e32a
|
||||
--- /dev/null
|
||||
+++ b/drivers/ps5/fan.c
|
||||
@@ -0,0 +1,193 @@
|
||||
@@ -0,0 +1,368 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0-only
|
||||
+
|
||||
+#include <linux/module.h>
|
||||
@@ -5634,7 +5638,184 @@ index 000000000000..33a48c664f73
|
||||
+#include <linux/err.h>
|
||||
+#include <linux/unaligned.h>
|
||||
+#include <linux/ps5.h>
|
||||
+#include <linux/io.h>
|
||||
+#include "ps5-fan.h"
|
||||
+#include "autoservo_param.h"
|
||||
+
|
||||
+#define PS5_FAN_BOOT_TARGET_TEMP 80
|
||||
+
|
||||
+#define GDDR6_SAMSUNG 0x01
|
||||
+#define GDDR6_HYNIX 0x06
|
||||
+#define GDDR6_MICRON 0x0f
|
||||
+
|
||||
+#define BOARD_MASK_A 0xffffffffffffff00
|
||||
+#define BOARD_MASK_B 0xffffffffff00ff00
|
||||
+
|
||||
+#define BOARD_SANCARLO_1 0x2001010104010400
|
||||
+#define BOARD_SANCARLO_2 0x2001010104010500
|
||||
+#define BOARD_A_EIGER_1 0x3002010104010400
|
||||
+#define BOARD_A_EIGER_2 0x3002010104010500
|
||||
+#define BOARD_A_DENALI_1 0x3002010104030400
|
||||
+#define BOARD_A_DENALI_2 0x3002010104030500
|
||||
+#define BOARD_B_EIGER_DENALI_1 0x3002020101000400
|
||||
+#define BOARD_B_EIGER_DENALI_2 0x3002020101000500
|
||||
+#define BOARD_D_EIGER_DENALI_1 0x3002040101000400
|
||||
+#define BOARD_D_EIGER_DENALI_2 0x3002040101000500
|
||||
+
|
||||
+static void bootparam_get_config_board_id(u64 *board_id)
|
||||
+{
|
||||
+ void __iomem *bootparam = ioremap(0x9b000, 0x2000);
|
||||
+ *board_id = readq(bootparam + 0x328);
|
||||
+ iounmap(bootparam);
|
||||
+}
|
||||
+
|
||||
+static void bootparam_get_config_gddr6_id(u16 *gddr6_id)
|
||||
+{
|
||||
+ void __iomem *bootparam = ioremap(0x9b000, 0x2000);
|
||||
+ *gddr6_id = readw(bootparam + 0x1184);
|
||||
+ iounmap(bootparam);
|
||||
+}
|
||||
+
|
||||
+int icc_fan_update_param(const u8 *param)
|
||||
+{
|
||||
+ u8 buf[ICC_MSG_MAX_SIZE] = {};
|
||||
+ struct icc_msg *msg = (struct icc_msg *)buf;
|
||||
+
|
||||
+ msg->service_id = ICC_SERVICE_ID_FAN;
|
||||
+ msg->msg_type = 0xe;
|
||||
+ msg->length = sizeof(*msg) + 0x6ae;
|
||||
+ memcpy(msg->data, param, 0x6ae);
|
||||
+
|
||||
+ return icc_query(buf, buf);
|
||||
+}
|
||||
+EXPORT_SYMBOL(icc_fan_update_param);
|
||||
+
|
||||
+int icc_fan_update_autoservo_param(void)
|
||||
+{
|
||||
+ u64 board_id, board_mask_a, board_mask_b;
|
||||
+ u16 gddr6_id;
|
||||
+ u8 gddr6_vendor, gddr6_revision;
|
||||
+ const char *board_name = NULL;
|
||||
+ const char *gddr6_name = NULL;
|
||||
+ const u8 *param = NULL;
|
||||
+ int ret;
|
||||
+
|
||||
+ bootparam_get_config_board_id(&board_id);
|
||||
+ board_id = be64_to_cpu(board_id);
|
||||
+ board_mask_a = board_id & BOARD_MASK_A;
|
||||
+ board_mask_b = board_id & BOARD_MASK_B;
|
||||
+
|
||||
+ bootparam_get_config_gddr6_id(&gddr6_id);
|
||||
+ gddr6_vendor = gddr6_id & 0xf;
|
||||
+ gddr6_revision = gddr6_id >> 4;
|
||||
+
|
||||
+ if (board_mask_a == BOARD_SANCARLO_1 || board_mask_a == BOARD_SANCARLO_2) {
|
||||
+ board_name = "Sancarlo";
|
||||
+ param = autoservo_param_sancarlo;
|
||||
+ } else if (board_mask_a == BOARD_A_EIGER_1 || board_mask_a == BOARD_A_EIGER_2) {
|
||||
+ board_name = "A-Eiger";
|
||||
+ switch (gddr6_vendor) {
|
||||
+ case GDDR6_SAMSUNG:
|
||||
+ gddr6_name = "Samsung";
|
||||
+ param = autoservo_param_a_eiger_samsung;
|
||||
+ break;
|
||||
+ case GDDR6_HYNIX:
|
||||
+ gddr6_name = "Hynix";
|
||||
+ param = autoservo_param_a_eiger_hynix;
|
||||
+ break;
|
||||
+ case GDDR6_MICRON:
|
||||
+ gddr6_name = "Micron";
|
||||
+ param = autoservo_param_a_eiger_micron;
|
||||
+ break;
|
||||
+ default:
|
||||
+ pr_info("FanServo: %s Unknown Vendor 0x%x\n", board_name, gddr6_vendor);
|
||||
+ goto not_updated;
|
||||
+ }
|
||||
+ } else if (board_mask_a == BOARD_A_DENALI_1 || board_mask_a == BOARD_A_DENALI_2) {
|
||||
+ board_name = "A-Denali";
|
||||
+ switch (gddr6_vendor) {
|
||||
+ case GDDR6_SAMSUNG:
|
||||
+ gddr6_name = "Samsung";
|
||||
+ param = autoservo_param_a_denali_samsung;
|
||||
+ break;
|
||||
+ case GDDR6_HYNIX:
|
||||
+ gddr6_name = "Hynix";
|
||||
+ param = autoservo_param_a_denali_hynix;
|
||||
+ break;
|
||||
+ case GDDR6_MICRON:
|
||||
+ gddr6_name = "Micron";
|
||||
+ param = autoservo_param_a_denali_micron;
|
||||
+ break;
|
||||
+ default:
|
||||
+ pr_info("FanServo: %s Unknown Vendor 0x%x\n", board_name, gddr6_vendor);
|
||||
+ goto not_updated;
|
||||
+ }
|
||||
+ } else if (board_mask_b == BOARD_B_EIGER_DENALI_1 || board_mask_b == BOARD_B_EIGER_DENALI_2) {
|
||||
+ board_name = "B-Eiger/Denali";
|
||||
+ if (gddr6_vendor == GDDR6_SAMSUNG && gddr6_revision == 8) {
|
||||
+ gddr6_name = "Samsung D1x";
|
||||
+ param = autoservo_param_b_eiger_denali_samsung_d1x;
|
||||
+ } else if (gddr6_vendor == GDDR6_SAMSUNG && gddr6_revision == 9) {
|
||||
+ gddr6_name = "Samsung D1z";
|
||||
+ param = NULL;
|
||||
+ } else if (gddr6_vendor == GDDR6_HYNIX && gddr6_revision == 0) {
|
||||
+ gddr6_name = "Hynix 1x";
|
||||
+ param = autoservo_param_b_eiger_denali_hynix_1x_micron_120s;
|
||||
+ } else if (gddr6_vendor == GDDR6_HYNIX && gddr6_revision == 1) {
|
||||
+ gddr6_name = "Hynix 1y";
|
||||
+ param = autoservo_param_b_eiger_denali_hynix_1y_micron_130s;
|
||||
+ } else if (gddr6_vendor == GDDR6_MICRON && gddr6_revision == 0) {
|
||||
+ gddr6_name = "Micron 120s";
|
||||
+ param = autoservo_param_b_eiger_denali_hynix_1x_micron_120s;
|
||||
+ } else if (gddr6_vendor == GDDR6_MICRON && gddr6_revision == 1) {
|
||||
+ gddr6_name = "Micron 130s";
|
||||
+ param = autoservo_param_b_eiger_denali_hynix_1y_micron_130s;
|
||||
+ } else {
|
||||
+ pr_info("FanServo: %s Unknown Vendor/Revision 0x%x/0x%x\n", board_name, gddr6_vendor, gddr6_revision);
|
||||
+ goto not_updated;
|
||||
+ }
|
||||
+ } else if (board_mask_b == BOARD_D_EIGER_DENALI_1 || board_mask_b == BOARD_D_EIGER_DENALI_2) {
|
||||
+ board_name = "D-Eiger/Denali";
|
||||
+ if (gddr6_vendor == GDDR6_SAMSUNG && gddr6_revision == 9) {
|
||||
+ gddr6_name = "Samsung D1z";
|
||||
+ param = autoservo_param_d_eiger_denali_samsung_d1z;
|
||||
+ } else if (gddr6_vendor == GDDR6_HYNIX && gddr6_revision == 1) {
|
||||
+ gddr6_name = "Hynix 1y";
|
||||
+ param = autoservo_param_d_eiger_denali_hynix_1y;
|
||||
+ } else if (gddr6_vendor == GDDR6_MICRON && gddr6_revision == 1) {
|
||||
+ gddr6_name = "Micron 130s";
|
||||
+ param = autoservo_param_d_eiger_denali_micron_130s_y31j;
|
||||
+ } else if (gddr6_vendor == GDDR6_MICRON && gddr6_revision == 2) {
|
||||
+ gddr6_name = "Micron Y31J";
|
||||
+ param = autoservo_param_d_eiger_denali_micron_130s_y31j;
|
||||
+ } else {
|
||||
+ pr_info("FanServo: %s Unknown Vendor/Revision 0x%x/0x%x\n", board_name, gddr6_vendor, gddr6_revision);
|
||||
+ goto not_updated;
|
||||
+ }
|
||||
+ } else {
|
||||
+ pr_info("FanServo: 0x%016llX\n", board_id);
|
||||
+ goto not_updated;
|
||||
+ }
|
||||
+
|
||||
+ if (gddr6_name)
|
||||
+ pr_info("FanServo: %s %s\n", board_name, gddr6_name);
|
||||
+ else
|
||||
+ pr_info("FanServo: %s\n", board_name);
|
||||
+
|
||||
+ if (!param)
|
||||
+ goto not_updated;
|
||||
+
|
||||
+ ret = icc_fan_update_param(param);
|
||||
+ if (ret)
|
||||
+ pr_err("Error: %s: %d\n", __func__, ret);
|
||||
+
|
||||
+ return ret;
|
||||
+
|
||||
+not_updated:
|
||||
+ pr_info("FanServo: Not update\n");
|
||||
+ return 0;
|
||||
+}
|
||||
+EXPORT_SYMBOL(icc_fan_update_autoservo_param);
|
||||
+
|
||||
+static int icc_fan_txn(u8 svc, u16 mt, u16 len,
|
||||
+ const u8 *data, size_t dlen,
|
||||
@@ -5763,8 +5944,6 @@ index 000000000000..33a48c664f73
|
||||
+};
|
||||
+ATTRIBUTE_GROUPS(ps5_fan);
|
||||
+
|
||||
+#define PS5_FAN_BOOT_TARGET_TEMP 75
|
||||
+
|
||||
+static int ps5_fan_probe(struct platform_device *pdev)
|
||||
+{
|
||||
+ int ret = icc_fan_update_autoservo_param();
|
||||
@@ -5821,10 +6000,12 @@ index 000000000000..33a48c664f73
|
||||
+MODULE_ALIAS("platform:ps5-fan");
|
||||
diff --git a/drivers/ps5/hdmi.c b/drivers/ps5/hdmi.c
|
||||
new file mode 100644
|
||||
index 000000000000..8f094490d677
|
||||
index 000000000000..67871f238abe
|
||||
--- /dev/null
|
||||
+++ b/drivers/ps5/hdmi.c
|
||||
@@ -0,0 +1,1237 @@
|
||||
@@ -0,0 +1,1239 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0-only
|
||||
+
|
||||
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
+
|
||||
+#include <linux/module.h>
|
||||
@@ -7579,10 +7760,12 @@ index 000000000000..a234788e9990
|
||||
+#endif
|
||||
diff --git a/drivers/ps5/mp1.c b/drivers/ps5/mp1.c
|
||||
new file mode 100644
|
||||
index 000000000000..4af890c842a7
|
||||
index 000000000000..3bd1375a444c
|
||||
--- /dev/null
|
||||
+++ b/drivers/ps5/mp1.c
|
||||
@@ -0,0 +1,488 @@
|
||||
@@ -0,0 +1,490 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0-only
|
||||
+
|
||||
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
+
|
||||
+#include <linux/module.h>
|
||||
@@ -8132,10 +8315,12 @@ index 000000000000..5ea1519823c3
|
||||
+#endif /* _PS5_FAN_H */
|
||||
diff --git a/drivers/ps5/spcie.c b/drivers/ps5/spcie.c
|
||||
new file mode 100644
|
||||
index 000000000000..4a28451f89eb
|
||||
index 000000000000..547b1457ac62
|
||||
--- /dev/null
|
||||
+++ b/drivers/ps5/spcie.c
|
||||
@@ -0,0 +1,1146 @@
|
||||
@@ -0,0 +1,974 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0-only
|
||||
+
|
||||
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
+
|
||||
+#include <linux/module.h>
|
||||
@@ -8146,7 +8331,6 @@ index 000000000000..4a28451f89eb
|
||||
+#include <linux/dmi.h>
|
||||
+#include <linux/delay.h>
|
||||
+#include <linux/kfifo.h>
|
||||
+#include "autoservo_param.h"
|
||||
+
|
||||
+#define PCI_DEVICE_ID_SPCIE 0x9107
|
||||
+#define SPCIE_SUBFUNC_ICC 12
|
||||
@@ -8178,24 +8362,6 @@ index 000000000000..4a28451f89eb
|
||||
+
|
||||
+#define ICC_FAN_CHANGE_SERVO_PATTERN _IOW(ICC_IOC_MAGIC, 1, u8)
|
||||
+
|
||||
+#define GDDR6_SAMSUNG 0x01
|
||||
+#define GDDR6_HYNIX 0x06
|
||||
+#define GDDR6_MICRON 0x0f
|
||||
+
|
||||
+#define BOARD_MASK_A 0xffffffffffffff00
|
||||
+#define BOARD_MASK_B 0xffffffffff00ff00
|
||||
+
|
||||
+#define BOARD_SANCARLO_1 0x2001010104010400
|
||||
+#define BOARD_SANCARLO_2 0x2001010104010500
|
||||
+#define BOARD_A_EIGER_1 0x3002010104010400
|
||||
+#define BOARD_A_EIGER_2 0x3002010104010500
|
||||
+#define BOARD_A_DENALI_1 0x3002010104030400
|
||||
+#define BOARD_A_DENALI_2 0x3002010104030500
|
||||
+#define BOARD_B_EIGER_DENALI_1 0x3002020101000400
|
||||
+#define BOARD_B_EIGER_DENALI_2 0x3002020101000500
|
||||
+#define BOARD_D_EIGER_DENALI_1 0x3002040101000400
|
||||
+#define BOARD_D_EIGER_DENALI_2 0x3002040101000500
|
||||
+
|
||||
+struct spcie_dev;
|
||||
+
|
||||
+struct spcie_icc_dev {
|
||||
@@ -8255,20 +8421,6 @@ index 000000000000..4a28451f89eb
|
||||
+ 0x00
|
||||
+};
|
||||
+
|
||||
+static void bootparam_get_config_board_id(u64 *board_id)
|
||||
+{
|
||||
+ void __iomem *bootparam = ioremap(0x9b000, 0x2000);
|
||||
+ *board_id = readq(bootparam + 0x328);
|
||||
+ iounmap(bootparam);
|
||||
+}
|
||||
+
|
||||
+static void bootparam_get_config_gddr6_id(u16 *gddr6_id)
|
||||
+{
|
||||
+ void __iomem *bootparam = ioremap(0x9b000, 0x2000);
|
||||
+ *gddr6_id = readw(bootparam + 0x1184);
|
||||
+ iounmap(bootparam);
|
||||
+}
|
||||
+
|
||||
+static u16 icc_checksum(struct icc_msg *msg)
|
||||
+{
|
||||
+ u16 i;
|
||||
@@ -8634,147 +8786,6 @@ index 000000000000..4a28451f89eb
|
||||
+}
|
||||
+EXPORT_SYMBOL(icc_fan_change_servo_pattern);
|
||||
+
|
||||
+int icc_fan_update_param(const u8 *param)
|
||||
+{
|
||||
+ u8 buf[ICC_MSG_MAX_SIZE] = {};
|
||||
+ struct icc_msg *msg = (struct icc_msg *)buf;
|
||||
+
|
||||
+ msg->service_id = ICC_SERVICE_ID_FAN;
|
||||
+ msg->msg_type = 0xe;
|
||||
+ msg->length = sizeof(*msg) + 0x6ae;
|
||||
+ memcpy(msg->data, param, 0x6ae);
|
||||
+
|
||||
+ return icc_query(buf, buf);
|
||||
+}
|
||||
+EXPORT_SYMBOL(icc_fan_update_param);
|
||||
+
|
||||
+int icc_fan_update_autoservo_param(void)
|
||||
+{
|
||||
+ u64 board_id, board_mask_a, board_mask_b;
|
||||
+ u16 gddr6_id;
|
||||
+ u8 gddr6_vendor, gddr6_revision;
|
||||
+ const char *board_name = NULL;
|
||||
+ const char *gddr6_name = NULL;
|
||||
+ const u8 *param = NULL;
|
||||
+ int ret;
|
||||
+
|
||||
+ bootparam_get_config_board_id(&board_id);
|
||||
+ board_id = be64_to_cpu(board_id);
|
||||
+ board_mask_a = board_id & BOARD_MASK_A;
|
||||
+ board_mask_b = board_id & BOARD_MASK_B;
|
||||
+
|
||||
+ bootparam_get_config_gddr6_id(&gddr6_id);
|
||||
+ gddr6_vendor = gddr6_id & 0xf;
|
||||
+ gddr6_revision = gddr6_id >> 4;
|
||||
+
|
||||
+ if (board_mask_a == BOARD_SANCARLO_1 || board_mask_a == BOARD_SANCARLO_2) {
|
||||
+ board_name = "Sancarlo";
|
||||
+ param = autoservo_param_sancarlo;
|
||||
+ } else if (board_mask_a == BOARD_A_EIGER_1 || board_mask_a == BOARD_A_EIGER_2) {
|
||||
+ board_name = "A-Eiger";
|
||||
+ switch (gddr6_vendor) {
|
||||
+ case GDDR6_SAMSUNG:
|
||||
+ gddr6_name = "Samsung";
|
||||
+ param = autoservo_param_a_eiger_samsung;
|
||||
+ break;
|
||||
+ case GDDR6_HYNIX:
|
||||
+ gddr6_name = "Hynix";
|
||||
+ param = autoservo_param_a_eiger_hynix;
|
||||
+ break;
|
||||
+ case GDDR6_MICRON:
|
||||
+ gddr6_name = "Micron";
|
||||
+ param = autoservo_param_a_eiger_micron;
|
||||
+ break;
|
||||
+ default:
|
||||
+ pr_info("FanServo: %s Unknown Vendor 0x%x\n", board_name, gddr6_vendor);
|
||||
+ goto not_updated;
|
||||
+ }
|
||||
+ } else if (board_mask_a == BOARD_A_DENALI_1 || board_mask_a == BOARD_A_DENALI_2) {
|
||||
+ board_name = "A-Denali";
|
||||
+ switch (gddr6_vendor) {
|
||||
+ case GDDR6_SAMSUNG:
|
||||
+ gddr6_name = "Samsung";
|
||||
+ param = autoservo_param_a_denali_samsung;
|
||||
+ break;
|
||||
+ case GDDR6_HYNIX:
|
||||
+ gddr6_name = "Hynix";
|
||||
+ param = autoservo_param_a_denali_hynix;
|
||||
+ break;
|
||||
+ case GDDR6_MICRON:
|
||||
+ gddr6_name = "Micron";
|
||||
+ param = autoservo_param_a_denali_micron;
|
||||
+ break;
|
||||
+ default:
|
||||
+ pr_info("FanServo: %s Unknown Vendor 0x%x\n", board_name, gddr6_vendor);
|
||||
+ goto not_updated;
|
||||
+ }
|
||||
+ } else if (board_mask_b == BOARD_B_EIGER_DENALI_1 || board_mask_b == BOARD_B_EIGER_DENALI_2) {
|
||||
+ board_name = "B-Eiger/Denali";
|
||||
+ if (gddr6_vendor == GDDR6_SAMSUNG && gddr6_revision == 8) {
|
||||
+ gddr6_name = "Samsung D1x";
|
||||
+ param = autoservo_param_b_eiger_denali_samsung_d1x;
|
||||
+ } else if (gddr6_vendor == GDDR6_SAMSUNG && gddr6_revision == 9) {
|
||||
+ gddr6_name = "Samsung D1z";
|
||||
+ param = NULL;
|
||||
+ } else if (gddr6_vendor == GDDR6_HYNIX && gddr6_revision == 0) {
|
||||
+ gddr6_name = "Hynix 1x";
|
||||
+ param = autoservo_param_b_eiger_denali_hynix_1x_micron_120s;
|
||||
+ } else if (gddr6_vendor == GDDR6_HYNIX && gddr6_revision == 1) {
|
||||
+ gddr6_name = "Hynix 1y";
|
||||
+ param = autoservo_param_b_eiger_denali_hynix_1y_micron_130s;
|
||||
+ } else if (gddr6_vendor == GDDR6_MICRON && gddr6_revision == 0) {
|
||||
+ gddr6_name = "Micron 120s";
|
||||
+ param = autoservo_param_b_eiger_denali_hynix_1x_micron_120s;
|
||||
+ } else if (gddr6_vendor == GDDR6_MICRON && gddr6_revision == 1) {
|
||||
+ gddr6_name = "Micron 130s";
|
||||
+ param = autoservo_param_b_eiger_denali_hynix_1y_micron_130s;
|
||||
+ } else {
|
||||
+ pr_info("FanServo: %s Unknown Vendor/Revision 0x%x/0x%x\n", board_name, gddr6_vendor, gddr6_revision);
|
||||
+ goto not_updated;
|
||||
+ }
|
||||
+ } else if (board_mask_b == BOARD_D_EIGER_DENALI_1 || board_mask_b == BOARD_D_EIGER_DENALI_2) {
|
||||
+ board_name = "D-Eiger/Denali";
|
||||
+ if (gddr6_vendor == GDDR6_SAMSUNG && gddr6_revision == 9) {
|
||||
+ gddr6_name = "Samsung D1z";
|
||||
+ param = autoservo_param_d_eiger_denali_samsung_d1z;
|
||||
+ } else if (gddr6_vendor == GDDR6_HYNIX && gddr6_revision == 1) {
|
||||
+ gddr6_name = "Hynix 1y";
|
||||
+ param = autoservo_param_d_eiger_denali_hynix_1y;
|
||||
+ } else if (gddr6_vendor == GDDR6_MICRON && gddr6_revision == 1) {
|
||||
+ gddr6_name = "Micron 130s";
|
||||
+ param = autoservo_param_d_eiger_denali_micron_130s_y31j;
|
||||
+ } else if (gddr6_vendor == GDDR6_MICRON && gddr6_revision == 2) {
|
||||
+ gddr6_name = "Micron Y31J";
|
||||
+ param = autoservo_param_d_eiger_denali_micron_130s_y31j;
|
||||
+ } else {
|
||||
+ pr_info("FanServo: %s Unknown Vendor/Revision 0x%x/0x%x\n", board_name, gddr6_vendor, gddr6_revision);
|
||||
+ goto not_updated;
|
||||
+ }
|
||||
+ } else {
|
||||
+ pr_info("FanServo: 0x%016llX\n", board_id);
|
||||
+ goto not_updated;
|
||||
+ }
|
||||
+
|
||||
+ if (gddr6_name)
|
||||
+ pr_info("FanServo: %s %s\n", board_name, gddr6_name);
|
||||
+ else
|
||||
+ pr_info("FanServo: %s\n", board_name);
|
||||
+
|
||||
+ if (!param)
|
||||
+ goto not_updated;
|
||||
+
|
||||
+ ret = icc_fan_update_param(param);
|
||||
+ if (ret)
|
||||
+ pr_err("Error: %s: %d\n", __func__, ret);
|
||||
+
|
||||
+ return ret;
|
||||
+
|
||||
+not_updated:
|
||||
+ pr_info("FanServo: Not update\n");
|
||||
+ return 0;
|
||||
+}
|
||||
+EXPORT_SYMBOL(icc_fan_update_autoservo_param);
|
||||
+
|
||||
+static void button_notification_handler(struct icc_msg *msg)
|
||||
+{
|
||||
+ if (msg->msg_type == 0x8010) { // power button down
|
||||
@@ -9284,10 +9295,12 @@ index 000000000000..4a28451f89eb
|
||||
+MODULE_LICENSE("GPL");
|
||||
diff --git a/drivers/ps5/svm.c b/drivers/ps5/svm.c
|
||||
new file mode 100644
|
||||
index 000000000000..3fd58e9a6609
|
||||
index 000000000000..b9e7def39ef7
|
||||
--- /dev/null
|
||||
+++ b/drivers/ps5/svm.c
|
||||
@@ -0,0 +1,169 @@
|
||||
@@ -0,0 +1,171 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0-only
|
||||
+
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/ps5.h>
|
||||
+
|
||||
@@ -9459,10 +9472,12 @@ index 000000000000..3fd58e9a6609
|
||||
+EXPORT_SYMBOL(svm_execute_guest);
|
||||
diff --git a/drivers/ps5/tpcie.c b/drivers/ps5/tpcie.c
|
||||
new file mode 100644
|
||||
index 000000000000..23de43ea4b00
|
||||
index 000000000000..7e933c30fc3e
|
||||
--- /dev/null
|
||||
+++ b/drivers/ps5/tpcie.c
|
||||
@@ -0,0 +1,303 @@
|
||||
@@ -0,0 +1,305 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0-only
|
||||
+
|
||||
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
+
|
||||
+#include <linux/console.h>
|
||||
@@ -9768,10 +9783,12 @@ index 000000000000..23de43ea4b00
|
||||
+MODULE_LICENSE("GPL");
|
||||
diff --git a/drivers/ps5/vmenter.S b/drivers/ps5/vmenter.S
|
||||
new file mode 100644
|
||||
index 000000000000..f5348c0d7e82
|
||||
index 000000000000..e3fd6f3e59b6
|
||||
--- /dev/null
|
||||
+++ b/drivers/ps5/vmenter.S
|
||||
@@ -0,0 +1,30 @@
|
||||
@@ -0,0 +1,32 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
+
|
||||
+#include <linux/linkage.h>
|
||||
+#include <asm/asm.h>
|
||||
+
|
||||
@@ -10551,10 +10568,12 @@ index c8700e6a694d..7d0afd378c4e 100644
|
||||
extern void dmi_setup(void);
|
||||
diff --git a/include/linux/ps5.h b/include/linux/ps5.h
|
||||
new file mode 100644
|
||||
index 000000000000..24adcd953ab3
|
||||
index 000000000000..75a2d6dace5d
|
||||
--- /dev/null
|
||||
+++ b/include/linux/ps5.h
|
||||
@@ -0,0 +1,95 @@
|
||||
@@ -0,0 +1,97 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
+
|
||||
+#ifndef _LINUX_PS5_H
|
||||
+#define _LINUX_PS5_H
|
||||
+
|
||||
|
||||
Reference in New Issue
Block a user