summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--0001-platform-x86-thinkpad_acpi-lap-or-desk-mode-interfac.patch202
-rw-r--r--0001-revert-ARM64-vdso32-Install-vdso32-from-vdso_install.patch48
-rw-r--r--kernel.spec11
3 files changed, 261 insertions, 0 deletions
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 <markpearson@lenovo.com>
+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 <njoshi1@lenovo.com>
+Signed-off-by: Nitin Joshi <njoshi1@lenovo.com>
+Reviewed-by: Sugumaran <slacshiminar@lenovo.com>
+Reviewed-by: Bastien Nocera <bnocera@redhat.com>
+Signed-off-by: Mark Pearson <markpearson@lenovo.com>
+Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
+---
+ .../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/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 <swboyd@chromium.org>
+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 <swboyd@chromium.org>
+Reviewed-by: Vincenzo Frascino <vincenzo.frascino@arm.com>
+Acked-by: Will Deacon <will@kernel.org>
+Cc: Vincenzo Frascino <vincenzo.frascino@arm.com>
+Link: https://lore.kernel.org/r/20200818014950.42492-1-swboyd@chromium.org
+Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
+---
+ 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 de2138165..22e10b69b 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -881,6 +881,14 @@ 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
+
+#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
@@ -2988,6 +2996,9 @@ fi
#
#
%changelog
+* Wed Aug 26 2020 Justin M. Forbes <jforbes@fedoraproject.org> - 5.8.4-300
+- Linux v5.8.4
+
* Fri Aug 21 2020 Justin M. Forbes <jforbes@fedoraproject.org> - 5.8.3-300
- Linux v5.8.3