From 9eaa11e3b8f7fbc733d15e44672e1f9d01deb1a7 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Wed, 26 Aug 2020 10:56:12 -0500 Subject: Linux v5.8.4 Signed-off-by: Justin M. Forbes --- ...6-thinkpad_acpi-lap-or-desk-mode-interfac.patch | 202 +++++++++++++++++++++ kernel.spec | 9 +- sources | 2 +- 3 files changed, 211 insertions(+), 2 deletions(-) create mode 100644 0001-platform-x86-thinkpad_acpi-lap-or-desk-mode-interfac.patch diff --git a/0001-platform-x86-thinkpad_acpi-lap-or-desk-mode-interfac.patch b/0001-platform-x86-thinkpad_acpi-lap-or-desk-mode-interfac.patch new file mode 100644 index 000000000..3a15ae09a --- /dev/null +++ b/0001-platform-x86-thinkpad_acpi-lap-or-desk-mode-interfac.patch @@ -0,0 +1,202 @@ +From acf7f4a59114471c3964f118564fe8e7a6f34bb8 Mon Sep 17 00:00:00 2001 +From: Mark Pearson +Date: Thu, 2 Jul 2020 21:23:53 -0400 +Subject: [PATCH] platform/x86: thinkpad_acpi: lap or desk mode interface + +Newer Lenovo Thinkpad platforms have support to identify whether the +system is on-lap or not using an ACPI DYTC event from the firmware. + +This patch provides the ability to retrieve the current mode via sysfs +entrypoints and will be used by userspace for thermal mode and WWAN +functionality + +Co-developed-by: Nitin Joshi +Signed-off-by: Nitin Joshi +Reviewed-by: Sugumaran +Reviewed-by: Bastien Nocera +Signed-off-by: Mark Pearson +Signed-off-by: Andy Shevchenko +--- + .../admin-guide/laptops/thinkpad-acpi.rst | 15 +++ + drivers/platform/x86/thinkpad_acpi.c | 111 +++++++++++++++++- + 2 files changed, 124 insertions(+), 2 deletions(-) + +diff --git a/Documentation/admin-guide/laptops/thinkpad-acpi.rst b/Documentation/admin-guide/laptops/thinkpad-acpi.rst +index 822907dcc845..99066aa8d97b 100644 +--- a/Documentation/admin-guide/laptops/thinkpad-acpi.rst ++++ b/Documentation/admin-guide/laptops/thinkpad-acpi.rst +@@ -50,6 +50,7 @@ detailed description): + - WAN enable and disable + - UWB enable and disable + - LCD Shadow (PrivacyGuard) enable and disable ++ - Lap mode sensor + + A compatibility table by model and feature is maintained on the web + site, http://ibm-acpi.sf.net/. I appreciate any success or failure +@@ -1432,6 +1433,20 @@ The first command ensures the best viewing angle and the latter one turns + on the feature, restricting the viewing angles. + + ++DYTC Lapmode sensor ++------------------ ++ ++sysfs: dytc_lapmode ++ ++Newer thinkpads and mobile workstations have the ability to determine if ++the device is in deskmode or lapmode. This feature is used by user space ++to decide if WWAN transmission can be increased to maximum power and is ++also useful for understanding the different thermal modes available as ++they differ between desk and lap mode. ++ ++The property is read-only. If the platform doesn't have support the sysfs ++class is not created. ++ + EXPERIMENTAL: UWB + ----------------- + +diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c +index 0f6fceda5fc0..7fee3c1c2418 100644 +--- a/drivers/platform/x86/thinkpad_acpi.c ++++ b/drivers/platform/x86/thinkpad_acpi.c +@@ -4030,8 +4030,8 @@ static bool hotkey_notify_6xxx(const u32 hkey, + return true; + case TP_HKEY_EV_THM_CSM_COMPLETED: + pr_debug("EC reports: Thermal Control Command set completed (DYTC)\n"); +- /* recommended action: do nothing, we don't have +- * Lenovo ATM information */ ++ /* Thermal event - pass on to event handler */ ++ tpacpi_driver_event(hkey); + return true; + case TP_HKEY_EV_THM_TRANSFM_CHANGED: + pr_debug("EC reports: Thermal Transformation changed (GMTS)\n"); +@@ -9803,6 +9803,105 @@ static struct ibm_struct lcdshadow_driver_data = { + .write = lcdshadow_write, + }; + ++/************************************************************************* ++ * DYTC subdriver, for the Lenovo lapmode feature ++ */ ++ ++#define DYTC_CMD_GET 2 /* To get current IC function and mode */ ++#define DYTC_GET_LAPMODE_BIT 17 /* Set when in lapmode */ ++ ++static bool dytc_lapmode; ++ ++static void dytc_lapmode_notify_change(void) ++{ ++ sysfs_notify(&tpacpi_pdev->dev.kobj, NULL, "dytc_lapmode"); ++} ++ ++static int dytc_command(int command, int *output) ++{ ++ acpi_handle dytc_handle; ++ ++ if (ACPI_FAILURE(acpi_get_handle(hkey_handle, "DYTC", &dytc_handle))) { ++ /* Platform doesn't support DYTC */ ++ return -ENODEV; ++ } ++ if (!acpi_evalf(dytc_handle, output, NULL, "dd", command)) ++ return -EIO; ++ return 0; ++} ++ ++static int dytc_lapmode_get(bool *state) ++{ ++ int output, err; ++ ++ err = dytc_command(DYTC_CMD_GET, &output); ++ if (err) ++ return err; ++ *state = output & BIT(DYTC_GET_LAPMODE_BIT) ? true : false; ++ return 0; ++} ++ ++static void dytc_lapmode_refresh(void) ++{ ++ bool new_state; ++ int err; ++ ++ err = dytc_lapmode_get(&new_state); ++ if (err || (new_state == dytc_lapmode)) ++ return; ++ ++ dytc_lapmode = new_state; ++ dytc_lapmode_notify_change(); ++} ++ ++/* sysfs lapmode entry */ ++static ssize_t dytc_lapmode_show(struct device *dev, ++ struct device_attribute *attr, ++ char *buf) ++{ ++ return snprintf(buf, PAGE_SIZE, "%d\n", dytc_lapmode); ++} ++ ++static DEVICE_ATTR_RO(dytc_lapmode); ++ ++static struct attribute *dytc_attributes[] = { ++ &dev_attr_dytc_lapmode.attr, ++ NULL, ++}; ++ ++static const struct attribute_group dytc_attr_group = { ++ .attrs = dytc_attributes, ++}; ++ ++static int tpacpi_dytc_init(struct ibm_init_struct *iibm) ++{ ++ int err; ++ ++ err = dytc_lapmode_get(&dytc_lapmode); ++ /* If support isn't available (ENODEV) then don't return an error ++ * but just don't create the sysfs group ++ */ ++ if (err == -ENODEV) ++ return 0; ++ /* For all other errors we can flag the failure */ ++ if (err) ++ return err; ++ ++ /* Platform supports this feature - create the group */ ++ err = sysfs_create_group(&tpacpi_pdev->dev.kobj, &dytc_attr_group); ++ return err; ++} ++ ++static void dytc_exit(void) ++{ ++ sysfs_remove_group(&tpacpi_pdev->dev.kobj, &dytc_attr_group); ++} ++ ++static struct ibm_struct dytc_driver_data = { ++ .name = "dytc", ++ .exit = dytc_exit, ++}; ++ + /**************************************************************************** + **************************************************************************** + * +@@ -9850,6 +9949,10 @@ static void tpacpi_driver_event(const unsigned int hkey_event) + + mutex_unlock(&kbdlight_mutex); + } ++ ++ if (hkey_event == TP_HKEY_EV_THM_CSM_COMPLETED) ++ dytc_lapmode_refresh(); ++ + } + + static void hotkey_driver_event(const unsigned int scancode) +@@ -10288,6 +10391,10 @@ static struct ibm_init_struct ibms_init[] __initdata = { + .init = tpacpi_lcdshadow_init, + .data = &lcdshadow_driver_data, + }, ++ { ++ .init = tpacpi_dytc_init, ++ .data = &dytc_driver_data, ++ }, + }; + + static int __init set_ibm_param(const char *val, const struct kernel_param *kp) +-- +2.26.2 + diff --git a/kernel.spec b/kernel.spec index 4ba427059..34fa17eaa 100644 --- a/kernel.spec +++ b/kernel.spec @@ -92,7 +92,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 3 +%define stable_update 4 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -863,6 +863,10 @@ Patch103: arm64-tegra-Use-valid-PWM-period-for-VDD_GPU-on-Tegra210.patch # https://lkml.org/lkml/2020/8/14/221 Patch104: dma-pool-fixes.patch + +# Goes away with 5.9 +Patch105: 0001-platform-x86-thinkpad_acpi-lap-or-desk-mode-interfac.patch + # END OF PATCH DEFINITIONS %endif @@ -2967,6 +2971,9 @@ fi # # %changelog +* Wed Aug 26 2020 Justin M. Forbes - 5.8.4-300 +- Linux v5.8.4 + * Fri Aug 21 2020 Justin M. Forbes - 5.8.3-300 - Linux v5.8.3 diff --git a/sources b/sources index 885f774ab..ced8f2d91 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ SHA512 (linux-5.8.tar.xz) = 19c8694bda4533464877e2d976aca95f48c2c40c11efcc1dce0ca91cc5f9826110e277c7de2a49ff99af8ae1c76e275b7c463abf71fbf410956d63066dc4ee53 -SHA512 (patch-5.8.3.xz) = b72063dafae70e5d5393fb55e47ca73f4fb99dba7507dbefa49e6034a835b67532c1676e763bb772968a8f59445e4a4fe9d09f23e8af089b82bf27608a0f3456 +SHA512 (patch-5.8.4.xz) = 8290242773cff390d95677955d02bd1247238991ab89bef43d53b0caefeddc6f52778a98fd296ebbb56a2815fbd0fd8ab1a3da62b171120468c98a75be48a3a2 -- cgit From 6e852b6e11de8a97a4b37a343c5d870f16b62105 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Wed, 26 Aug 2020 17:08:10 -0500 Subject: Temporary build fix Signed-off-by: Justin M. Forbes --- ...4-vdso32-Install-vdso32-from-vdso_install.patch | 48 ++++++++++++++++++++++ kernel.spec | 4 ++ 2 files changed, 52 insertions(+) create mode 100644 0001-revert-ARM64-vdso32-Install-vdso32-from-vdso_install.patch diff --git a/0001-revert-ARM64-vdso32-Install-vdso32-from-vdso_install.patch b/0001-revert-ARM64-vdso32-Install-vdso32-from-vdso_install.patch new file mode 100644 index 000000000..b399551a6 --- /dev/null +++ b/0001-revert-ARM64-vdso32-Install-vdso32-from-vdso_install.patch @@ -0,0 +1,48 @@ +From 8d75785a814241587802655cc33e384230744f0c Mon Sep 17 00:00:00 2001 +From: Stephen Boyd +Date: Mon, 17 Aug 2020 18:49:50 -0700 +Subject: Revert [PATCH] ARM64: vdso32: Install vdso32 from vdso_install + +Add the 32-bit vdso Makefile to the vdso_install rule so that 'make +vdso_install' installs the 32-bit compat vdso when it is compiled. + +Fixes: a7f71a2c8903 ("arm64: compat: Add vDSO") +Signed-off-by: Stephen Boyd +Reviewed-by: Vincenzo Frascino +Acked-by: Will Deacon +Cc: Vincenzo Frascino +Link: https://lore.kernel.org/r/20200818014950.42492-1-swboyd@chromium.org +Signed-off-by: Catalin Marinas +--- + arch/arm64/Makefile | 1 - + arch/arm64/kernel/vdso32/Makefile | 2 +- + 2 files changed, 1 insertion(+), 2 deletions(-) + +diff --git a/arch/arm64/Makefile b/arch/arm64/Makefile +index 55bc8546d9c7..b45f0124cc16 100644 +--- a/arch/arm64/Makefile ++++ b/arch/arm64/Makefile +@@ -165,7 +165,6 @@ zinstall install: + PHONY += vdso_install + vdso_install: + $(Q)$(MAKE) $(build)=arch/arm64/kernel/vdso $@ +- $(Q)$(MAKE) $(build)=arch/arm64/kernel/vdso32 $@ + + # We use MRPROPER_FILES and CLEAN_FILES now + archclean: +diff --git a/arch/arm64/kernel/vdso32/Makefile b/arch/arm64/kernel/vdso32/Makefile +index 5139a5f19256..d6adb4677c25 100644 +--- a/arch/arm64/kernel/vdso32/Makefile ++++ b/arch/arm64/kernel/vdso32/Makefile +@@ -208,7 +208,7 @@ quiet_cmd_vdsosym = VDSOSYM $@ + cmd_vdsosym = $(NM) $< | $(gen-vdsosym) | LC_ALL=C sort > $@ + + # Install commands for the unstripped file +-quiet_cmd_vdso_install = INSTALL32 $@ ++quiet_cmd_vdso_install = INSTALL $@ + cmd_vdso_install = cp $(obj)/$@.dbg $(MODLIB)/vdso/vdso32.so + + vdso.so: $(obj)/vdso.so.dbg +-- +2.26.2 + diff --git a/kernel.spec b/kernel.spec index 34fa17eaa..61e785a79 100644 --- a/kernel.spec +++ b/kernel.spec @@ -867,6 +867,10 @@ Patch104: dma-pool-fixes.patch # Goes away with 5.9 Patch105: 0001-platform-x86-thinkpad_acpi-lap-or-desk-mode-interfac.patch +#Temporary build fix (will figure this out after Plumbers) +Patch106: 0001-revert-ARM64-vdso32-Install-vdso32-from-vdso_install.patch + + # END OF PATCH DEFINITIONS %endif -- cgit