d14b9caefc
Due to recent firmware changes, powerplay power limit isn't being applied/used. This patchset addresses the issue.
1736 lines
66 KiB
Diff
1736 lines
66 KiB
Diff
From f7f49141a5dbe9c99d78196b58c44307fb2e6be3 Mon Sep 17 00:00:00 2001
|
|
From: Tk-Glitch <ti3nou@gmail.com>
|
|
Date: Wed, 4 Jul 2018 04:30:08 +0200
|
|
Subject: glitched
|
|
|
|
diff --git a/scripts/mkcompile_h b/scripts/mkcompile_h
|
|
index 87f1fc9..b3be470 100755
|
|
--- a/scripts/mkcompile_h
|
|
+++ b/scripts/mkcompile_h
|
|
@@ -50,8 +50,8 @@ else
|
|
fi
|
|
|
|
UTS_VERSION="#$VERSION"
|
|
-CONFIG_FLAGS=""
|
|
-if [ -n "$SMP" ] ; then CONFIG_FLAGS="SMP"; fi
|
|
+CONFIG_FLAGS="TKG"
|
|
+if [ -n "$SMP" ] ; then CONFIG_FLAGS="$CONFIG_FLAGS SMP"; fi
|
|
if [ -n "$PREEMPT" ] ; then CONFIG_FLAGS="$CONFIG_FLAGS PREEMPT"; fi
|
|
UTS_VERSION="$UTS_VERSION $CONFIG_FLAGS $TIMESTAMP"
|
|
|
|
diff --git a/arch/x86/Kconfig.cpu b/arch/x86/Kconfig.cpu
|
|
index af9c967782f6..bf07a8c0f495 100644
|
|
--- a/arch/x86/Kconfig.cpu
|
|
+++ b/arch/x86/Kconfig.cpu
|
|
@@ -123,6 +123,7 @@ config MPENTIUMM
|
|
config MPENTIUM4
|
|
bool "Pentium-4/Celeron(P4-based)/Pentium-4 M/older Xeon"
|
|
depends on X86_32
|
|
+ select X86_P6_NOP
|
|
---help---
|
|
Select this for Intel Pentium 4 chips. This includes the
|
|
Pentium 4, Pentium D, P4-based Celeron and Xeon, and
|
|
@@ -155,9 +156,8 @@ config MPENTIUM4
|
|
-Paxville
|
|
-Dempsey
|
|
|
|
-
|
|
config MK6
|
|
- bool "K6/K6-II/K6-III"
|
|
+ bool "AMD K6/K6-II/K6-III"
|
|
depends on X86_32
|
|
---help---
|
|
Select this for an AMD K6-family processor. Enables use of
|
|
@@ -165,7 +165,7 @@ config MK6
|
|
flags to GCC.
|
|
|
|
config MK7
|
|
- bool "Athlon/Duron/K7"
|
|
+ bool "AMD Athlon/Duron/K7"
|
|
depends on X86_32
|
|
---help---
|
|
Select this for an AMD Athlon K7-family processor. Enables use of
|
|
@@ -173,12 +173,90 @@ config MK7
|
|
flags to GCC.
|
|
|
|
config MK8
|
|
- bool "Opteron/Athlon64/Hammer/K8"
|
|
+ bool "AMD Opteron/Athlon64/Hammer/K8"
|
|
---help---
|
|
Select this for an AMD Opteron or Athlon64 Hammer-family processor.
|
|
Enables use of some extended instructions, and passes appropriate
|
|
optimization flags to GCC.
|
|
|
|
+config MK8SSE3
|
|
+ bool "AMD Opteron/Athlon64/Hammer/K8 with SSE3"
|
|
+ ---help---
|
|
+ Select this for improved AMD Opteron or Athlon64 Hammer-family processors.
|
|
+ Enables use of some extended instructions, and passes appropriate
|
|
+ optimization flags to GCC.
|
|
+
|
|
+config MK10
|
|
+ bool "AMD 61xx/7x50/PhenomX3/X4/II/K10"
|
|
+ ---help---
|
|
+ Select this for an AMD 61xx Eight-Core Magny-Cours, Athlon X2 7x50,
|
|
+ Phenom X3/X4/II, Athlon II X2/X3/X4, or Turion II-family processor.
|
|
+ Enables use of some extended instructions, and passes appropriate
|
|
+ optimization flags to GCC.
|
|
+
|
|
+config MBARCELONA
|
|
+ bool "AMD Barcelona"
|
|
+ ---help---
|
|
+ Select this for AMD Family 10h Barcelona processors.
|
|
+
|
|
+ Enables -march=barcelona
|
|
+
|
|
+config MBOBCAT
|
|
+ bool "AMD Bobcat"
|
|
+ ---help---
|
|
+ Select this for AMD Family 14h Bobcat processors.
|
|
+
|
|
+ Enables -march=btver1
|
|
+
|
|
+config MJAGUAR
|
|
+ bool "AMD Jaguar"
|
|
+ ---help---
|
|
+ Select this for AMD Family 16h Jaguar processors.
|
|
+
|
|
+ Enables -march=btver2
|
|
+
|
|
+config MBULLDOZER
|
|
+ bool "AMD Bulldozer"
|
|
+ ---help---
|
|
+ Select this for AMD Family 15h Bulldozer processors.
|
|
+
|
|
+ Enables -march=bdver1
|
|
+
|
|
+config MPILEDRIVER
|
|
+ bool "AMD Piledriver"
|
|
+ ---help---
|
|
+ Select this for AMD Family 15h Piledriver processors.
|
|
+
|
|
+ Enables -march=bdver2
|
|
+
|
|
+config MSTEAMROLLER
|
|
+ bool "AMD Steamroller"
|
|
+ ---help---
|
|
+ Select this for AMD Family 15h Steamroller processors.
|
|
+
|
|
+ Enables -march=bdver3
|
|
+
|
|
+config MEXCAVATOR
|
|
+ bool "AMD Excavator"
|
|
+ ---help---
|
|
+ Select this for AMD Family 15h Excavator processors.
|
|
+
|
|
+ Enables -march=bdver4
|
|
+
|
|
+config MZEN
|
|
+ bool "AMD Zen"
|
|
+ ---help---
|
|
+ Select this for AMD Family 17h Zen processors.
|
|
+
|
|
+ Enables -march=znver1
|
|
+
|
|
+config MZEN2
|
|
+ bool "AMD Zen 2"
|
|
+ ---help---
|
|
+ Select this for AMD Family 17h Zen 2 processors.
|
|
+
|
|
+ Enables -march=znver2
|
|
+
|
|
config MCRUSOE
|
|
bool "Crusoe"
|
|
depends on X86_32
|
|
@@ -260,6 +338,7 @@ config MVIAC7
|
|
|
|
config MPSC
|
|
bool "Intel P4 / older Netburst based Xeon"
|
|
+ select X86_P6_NOP
|
|
depends on X86_64
|
|
---help---
|
|
Optimize for Intel Pentium 4, Pentium D and older Nocona/Dempsey
|
|
@@ -269,8 +348,19 @@ config MPSC
|
|
using the cpu family field
|
|
in /proc/cpuinfo. Family 15 is an older Xeon, Family 6 a newer one.
|
|
|
|
+config MATOM
|
|
+ bool "Intel Atom"
|
|
+ select X86_P6_NOP
|
|
+ ---help---
|
|
+
|
|
+ Select this for the Intel Atom platform. Intel Atom CPUs have an
|
|
+ in-order pipelining architecture and thus can benefit from
|
|
+ accordingly optimized code. Use a recent GCC with specific Atom
|
|
+ support in order to fully benefit from selecting this option.
|
|
+
|
|
config MCORE2
|
|
- bool "Core 2/newer Xeon"
|
|
+ bool "Intel Core 2"
|
|
+ select X86_P6_NOP
|
|
---help---
|
|
|
|
Select this for Intel Core 2 and newer Core 2 Xeons (Xeon 51xx and
|
|
@@ -278,14 +368,133 @@ config MCORE2
|
|
family in /proc/cpuinfo. Newer ones have 6 and older ones 15
|
|
(not a typo)
|
|
|
|
-config MATOM
|
|
- bool "Intel Atom"
|
|
+ Enables -march=core2
|
|
+
|
|
+config MNEHALEM
|
|
+ bool "Intel Nehalem"
|
|
+ select X86_P6_NOP
|
|
---help---
|
|
|
|
- Select this for the Intel Atom platform. Intel Atom CPUs have an
|
|
- in-order pipelining architecture and thus can benefit from
|
|
- accordingly optimized code. Use a recent GCC with specific Atom
|
|
- support in order to fully benefit from selecting this option.
|
|
+ Select this for 1st Gen Core processors in the Nehalem family.
|
|
+
|
|
+ Enables -march=nehalem
|
|
+
|
|
+config MWESTMERE
|
|
+ bool "Intel Westmere"
|
|
+ select X86_P6_NOP
|
|
+ ---help---
|
|
+
|
|
+ Select this for the Intel Westmere formerly Nehalem-C family.
|
|
+
|
|
+ Enables -march=westmere
|
|
+
|
|
+config MSILVERMONT
|
|
+ bool "Intel Silvermont"
|
|
+ select X86_P6_NOP
|
|
+ ---help---
|
|
+
|
|
+ Select this for the Intel Silvermont platform.
|
|
+
|
|
+ Enables -march=silvermont
|
|
+
|
|
+config MGOLDMONT
|
|
+ bool "Intel Goldmont"
|
|
+ select X86_P6_NOP
|
|
+ ---help---
|
|
+
|
|
+ Select this for the Intel Goldmont platform including Apollo Lake and Denverton.
|
|
+
|
|
+ Enables -march=goldmont
|
|
+
|
|
+config MGOLDMONTPLUS
|
|
+ bool "Intel Goldmont Plus"
|
|
+ select X86_P6_NOP
|
|
+ ---help---
|
|
+
|
|
+ Select this for the Intel Goldmont Plus platform including Gemini Lake.
|
|
+
|
|
+ Enables -march=goldmont-plus
|
|
+
|
|
+config MSANDYBRIDGE
|
|
+ bool "Intel Sandy Bridge"
|
|
+ select X86_P6_NOP
|
|
+ ---help---
|
|
+
|
|
+ Select this for 2nd Gen Core processors in the Sandy Bridge family.
|
|
+
|
|
+ Enables -march=sandybridge
|
|
+
|
|
+config MIVYBRIDGE
|
|
+ bool "Intel Ivy Bridge"
|
|
+ select X86_P6_NOP
|
|
+ ---help---
|
|
+
|
|
+ Select this for 3rd Gen Core processors in the Ivy Bridge family.
|
|
+
|
|
+ Enables -march=ivybridge
|
|
+
|
|
+config MHASWELL
|
|
+ bool "Intel Haswell"
|
|
+ select X86_P6_NOP
|
|
+ ---help---
|
|
+
|
|
+ Select this for 4th Gen Core processors in the Haswell family.
|
|
+
|
|
+ Enables -march=haswell
|
|
+
|
|
+config MBROADWELL
|
|
+ bool "Intel Broadwell"
|
|
+ select X86_P6_NOP
|
|
+ ---help---
|
|
+
|
|
+ Select this for 5th Gen Core processors in the Broadwell family.
|
|
+
|
|
+ Enables -march=broadwell
|
|
+
|
|
+config MSKYLAKE
|
|
+ bool "Intel Skylake"
|
|
+ select X86_P6_NOP
|
|
+ ---help---
|
|
+
|
|
+ Select this for 6th Gen Core processors in the Skylake family.
|
|
+
|
|
+ Enables -march=skylake
|
|
+
|
|
+config MSKYLAKEX
|
|
+ bool "Intel Skylake X"
|
|
+ select X86_P6_NOP
|
|
+ ---help---
|
|
+
|
|
+ Select this for 6th Gen Core processors in the Skylake X family.
|
|
+
|
|
+ Enables -march=skylake-avx512
|
|
+
|
|
+config MCANNONLAKE
|
|
+ bool "Intel Cannon Lake"
|
|
+ select X86_P6_NOP
|
|
+ ---help---
|
|
+
|
|
+ Select this for 8th Gen Core processors
|
|
+
|
|
+ Enables -march=cannonlake
|
|
+
|
|
+config MICELAKE
|
|
+ bool "Intel Ice Lake"
|
|
+ select X86_P6_NOP
|
|
+ ---help---
|
|
+
|
|
+ Select this for 10th Gen Core processors in the Ice Lake family.
|
|
+
|
|
+ Enables -march=icelake-client
|
|
+
|
|
+config MCASCADELAKE
|
|
+ bool "Intel Cascade Lake"
|
|
+ select X86_P6_NOP
|
|
+ ---help---
|
|
+
|
|
+ Select this for Xeon processors in the Cascade Lake family.
|
|
+
|
|
+ Enables -march=cascadelake
|
|
|
|
config GENERIC_CPU
|
|
bool "Generic-x86-64"
|
|
@@ -294,6 +503,19 @@ config GENERIC_CPU
|
|
Generic x86-64 CPU.
|
|
Run equally well on all x86-64 CPUs.
|
|
|
|
+config MNATIVE
|
|
+ bool "Native optimizations autodetected by GCC"
|
|
+ ---help---
|
|
+
|
|
+ GCC 4.2 and above support -march=native, which automatically detects
|
|
+ the optimum settings to use based on your processor. -march=native
|
|
+ also detects and applies additional settings beyond -march specific
|
|
+ to your CPU, (eg. -msse4). Unless you have a specific reason not to
|
|
+ (e.g. distcc cross-compiling), you should probably be using
|
|
+ -march=native rather than anything listed below.
|
|
+
|
|
+ Enables -march=native
|
|
+
|
|
endchoice
|
|
|
|
config X86_GENERIC
|
|
@@ -318,7 +540,7 @@ config X86_INTERNODE_CACHE_SHIFT
|
|
config X86_L1_CACHE_SHIFT
|
|
int
|
|
default "7" if MPENTIUM4 || MPSC
|
|
- default "6" if MK7 || MK8 || MPENTIUMM || MCORE2 || MATOM || MVIAC7 || X86_GENERIC || GENERIC_CPU
|
|
+ default "6" if MK7 || MK8 || MK8SSE3 || MK10 || MBARCELONA || MBOBCAT || MBULLDOZER || MPILEDRIVER || MSTEAMROLLER || MEXCAVATOR || MZEN || MZEN2 || MJAGUAR || MPENTIUMM || MCORE2 || MNEHALEM || MWESTMERE || MSILVERMONT || MGOLDMONT || MGOLDMONTPLUS || MSANDYBRIDGE || MIVYBRIDGE || MHASWELL || MBROADWELL || MSKYLAKE || MSKYLAKEX || MCANNONLAKE || MICELAKE || MCASCADELAKE || MNATIVE || MATOM || MVIAC7 || X86_GENERIC || GENERIC_CPU
|
|
default "4" if MELAN || M486SX || M486 || MGEODEGX1
|
|
default "5" if MWINCHIP3D || MWINCHIPC6 || MCRUSOE || MEFFICEON || MCYRIXIII || MK6 || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || M586TSC || M586 || MVIAC3_2 || MGEODE_LX
|
|
|
|
@@ -336,35 +558,36 @@ config X86_ALIGNMENT_16
|
|
|
|
config X86_INTEL_USERCOPY
|
|
def_bool y
|
|
- depends on MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M586MMX || X86_GENERIC || MK8 || MK7 || MEFFICEON || MCORE2
|
|
+ depends on MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M586MMX || X86_GENERIC || MK8 || MK8SSE3 || MK7 || MEFFICEON || MCORE2 || MK10 || MBARCELONA || MNEHALEM || MWESTMERE || MSILVERMONT || MGOLDMONT || MGOLDMONTPLUS || MSANDYBRIDGE || MIVYBRIDGE || MHASWELL || MBROADWELL || MSKYLAKE || MSKYLAKEX || MCANNONLAKE || MICELAKE || MCASCADELAKE || MNATIVE
|
|
|
|
config X86_USE_PPRO_CHECKSUM
|
|
def_bool y
|
|
- depends on MWINCHIP3D || MWINCHIPC6 || MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MK8 || MVIAC3_2 || MVIAC7 || MEFFICEON || MGEODE_LX || MCORE2 || MATOM
|
|
+ depends on MWINCHIP3D || MWINCHIPC6 || MCYRIXIII || MK7 || MK6 || MK10 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MK8 || MK8SSE3 || MVIAC3_2 || MVIAC7 || MEFFICEON || MGEODE_LX || MCORE2 || MNEHALEM || MWESTMERE || MSILVERMONT || MGOLDMONT || MGOLDMONTPLUS || MSANDYBRIDGE || MIVYBRIDGE || MHASWELL || MBROADWELL || MSKYLAKE || MSKYLAKEX || MCANNONLAKE || MICELAKE || MCASCADELAKE || MATOM || MNATIVE
|
|
|
|
config X86_USE_3DNOW
|
|
def_bool y
|
|
depends on (MCYRIXIII || MK7 || MGEODE_LX) && !UML
|
|
|
|
-#
|
|
-# P6_NOPs are a relatively minor optimization that require a family >=
|
|
-# 6 processor, except that it is broken on certain VIA chips.
|
|
-# Furthermore, AMD chips prefer a totally different sequence of NOPs
|
|
-# (which work on all CPUs). In addition, it looks like Virtual PC
|
|
-# does not understand them.
|
|
-#
|
|
-# As a result, disallow these if we're not compiling for X86_64 (these
|
|
-# NOPs do work on all x86-64 capable chips); the list of processors in
|
|
-# the right-hand clause are the cores that benefit from this optimization.
|
|
-#
|
|
config X86_P6_NOP
|
|
- def_bool y
|
|
- depends on X86_64
|
|
- depends on (MCORE2 || MPENTIUM4 || MPSC)
|
|
+ default n
|
|
+ bool "Support for P6_NOPs on Intel chips"
|
|
+ depends on (MCORE2 || MPENTIUM4 || MPSC || MATOM || MNEHALEM || MWESTMERE || MSILVERMONT || MGOLDMONT || MGOLDMONTPLUS || MSANDYBRIDGE || MIVYBRIDGE || MHASWELL || MBROADWELL || MSKYLAKE || MSKYLAKEX || MCANNONLAKE || MICELAKE || MCASCADELAKE || MNATIVE)
|
|
+ ---help---
|
|
+ P6_NOPs are a relatively minor optimization that require a family >=
|
|
+ 6 processor, except that it is broken on certain VIA chips.
|
|
+ Furthermore, AMD chips prefer a totally different sequence of NOPs
|
|
+ (which work on all CPUs). In addition, it looks like Virtual PC
|
|
+ does not understand them.
|
|
+
|
|
+ As a result, disallow these if we're not compiling for X86_64 (these
|
|
+ NOPs do work on all x86-64 capable chips); the list of processors in
|
|
+ the right-hand clause are the cores that benefit from this optimization.
|
|
+
|
|
+ Say Y if you have Intel CPU newer than Pentium Pro, N otherwise.
|
|
|
|
config X86_TSC
|
|
def_bool y
|
|
- depends on (MWINCHIP3D || MCRUSOE || MEFFICEON || MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || M586TSC || MK8 || MVIAC3_2 || MVIAC7 || MGEODEGX1 || MGEODE_LX || MCORE2 || MATOM) || X86_64
|
|
+ depends on (MWINCHIP3D || MCRUSOE || MEFFICEON || MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || M586TSC || MK8 || MK8SSE3 || MVIAC3_2 || MVIAC7 || MGEODEGX1 || MGEODE_LX || MCORE2 || MNEHALEM || MWESTMERE || MSILVERMONT || MGOLDMONT || MGOLDMONTPLUS || MSANDYBRIDGE || MIVYBRIDGE || MHASWELL || MBROADWELL || MSKYLAKE || MSKYLAKEX || MCANNONLAKE || MICELAKE || MCASCADELAKE || MNATIVE || MATOM) || X86_64
|
|
|
|
config X86_CMPXCHG64
|
|
def_bool y
|
|
@@ -374,7 +597,7 @@ config X86_CMPXCHG64
|
|
# generates cmov.
|
|
config X86_CMOV
|
|
def_bool y
|
|
- depends on (MK8 || MK7 || MCORE2 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MVIAC3_2 || MVIAC7 || MCRUSOE || MEFFICEON || X86_64 || MATOM || MGEODE_LX)
|
|
+ depends on (MK8 || MK8SSE3 || MK10 || MBARCELONA || MBOBCAT || MBULLDOZER || MPILEDRIVER || MSTEAMROLLER || MEXCAVATOR || MZEN || MZEN2 || MJAGUAR || MK7 || MCORE2 || MNEHALEM || MWESTMERE || MSILVERMONT || MGOLDMONT || MGOLDMONTPLUS || MSANDYBRIDGE || MIVYBRIDGE || MHASWELL || MBROADWELL || MSKYLAKE || MSKYLAKEX || MCANNONLAKE || MICELAKE || MCASCADELAKE || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MVIAC3_2 || MVIAC7 || MCRUSOE || MEFFICEON || X86_64 || MNATIVE || MATOM || MGEODE_LX)
|
|
|
|
config X86_MINIMUM_CPU_FAMILY
|
|
int
|
|
diff --git a/arch/x86/Makefile b/arch/x86/Makefile
|
|
index 94df0868804b..dcbed7e3a070 100644
|
|
--- a/arch/x86/Makefile
|
|
+++ b/arch/x86/Makefile
|
|
@@ -119,13 +119,53 @@ else
|
|
KBUILD_CFLAGS += $(call cc-option,-mskip-rax-setup)
|
|
|
|
# FIXME - should be integrated in Makefile.cpu (Makefile_32.cpu)
|
|
+ cflags-$(CONFIG_MNATIVE) += $(call cc-option,-march=native)
|
|
cflags-$(CONFIG_MK8) += $(call cc-option,-march=k8)
|
|
+ cflags-$(CONFIG_MK8SSE3) += $(call cc-option,-march=k8-sse3,-mtune=k8)
|
|
+ cflags-$(CONFIG_MK10) += $(call cc-option,-march=amdfam10)
|
|
+ cflags-$(CONFIG_MBARCELONA) += $(call cc-option,-march=barcelona)
|
|
+ cflags-$(CONFIG_MBOBCAT) += $(call cc-option,-march=btver1)
|
|
+ cflags-$(CONFIG_MJAGUAR) += $(call cc-option,-march=btver2)
|
|
+ cflags-$(CONFIG_MBULLDOZER) += $(call cc-option,-march=bdver1)
|
|
+ cflags-$(CONFIG_MPILEDRIVER) += $(call cc-option,-march=bdver2)
|
|
+ cflags-$(CONFIG_MSTEAMROLLER) += $(call cc-option,-march=bdver3)
|
|
+ cflags-$(CONFIG_MEXCAVATOR) += $(call cc-option,-march=bdver4)
|
|
+ cflags-$(CONFIG_MZEN) += $(call cc-option,-march=znver1)
|
|
+ cflags-$(CONFIG_MZEN2) += $(call cc-option,-march=znver2)
|
|
cflags-$(CONFIG_MPSC) += $(call cc-option,-march=nocona)
|
|
|
|
cflags-$(CONFIG_MCORE2) += \
|
|
- $(call cc-option,-march=core2,$(call cc-option,-mtune=generic))
|
|
- cflags-$(CONFIG_MATOM) += $(call cc-option,-march=atom) \
|
|
- $(call cc-option,-mtune=atom,$(call cc-option,-mtune=generic))
|
|
+ $(call cc-option,-march=core2,$(call cc-option,-mtune=core2))
|
|
+ cflags-$(CONFIG_MNEHALEM) += \
|
|
+ $(call cc-option,-march=nehalem,$(call cc-option,-mtune=nehalem))
|
|
+ cflags-$(CONFIG_MWESTMERE) += \
|
|
+ $(call cc-option,-march=westmere,$(call cc-option,-mtune=westmere))
|
|
+ cflags-$(CONFIG_MSILVERMONT) += \
|
|
+ $(call cc-option,-march=silvermont,$(call cc-option,-mtune=silvermont))
|
|
+ cflags-$(CONFIG_MGOLDMONT) += \
|
|
+ $(call cc-option,-march=goldmont,$(call cc-option,-mtune=goldmont))
|
|
+ cflags-$(CONFIG_MGOLDMONTPLUS) += \
|
|
+ $(call cc-option,-march=goldmont-plus,$(call cc-option,-mtune=goldmont-plus))
|
|
+ cflags-$(CONFIG_MSANDYBRIDGE) += \
|
|
+ $(call cc-option,-march=sandybridge,$(call cc-option,-mtune=sandybridge))
|
|
+ cflags-$(CONFIG_MIVYBRIDGE) += \
|
|
+ $(call cc-option,-march=ivybridge,$(call cc-option,-mtune=ivybridge))
|
|
+ cflags-$(CONFIG_MHASWELL) += \
|
|
+ $(call cc-option,-march=haswell,$(call cc-option,-mtune=haswell))
|
|
+ cflags-$(CONFIG_MBROADWELL) += \
|
|
+ $(call cc-option,-march=broadwell,$(call cc-option,-mtune=broadwell))
|
|
+ cflags-$(CONFIG_MSKYLAKE) += \
|
|
+ $(call cc-option,-march=skylake,$(call cc-option,-mtune=skylake))
|
|
+ cflags-$(CONFIG_MSKYLAKEX) += \
|
|
+ $(call cc-option,-march=skylake-avx512,$(call cc-option,-mtune=skylake-avx512))
|
|
+ cflags-$(CONFIG_MCANNONLAKE) += \
|
|
+ $(call cc-option,-march=cannonlake,$(call cc-option,-mtune=cannonlake))
|
|
+ cflags-$(CONFIG_MICELAKE) += \
|
|
+ $(call cc-option,-march=icelake-client,$(call cc-option,-mtune=icelake-client))
|
|
+ cflags-$(CONFIG_MCASCADELAKE) += \
|
|
+ $(call cc-option,-march=cascadelake,$(call cc-option,-mtune=cascadelake))
|
|
+ cflags-$(CONFIG_MATOM) += $(call cc-option,-march=bonnell) \
|
|
+ $(call cc-option,-mtune=bonnell,$(call cc-option,-mtune=generic))
|
|
cflags-$(CONFIG_GENERIC_CPU) += $(call cc-option,-mtune=generic)
|
|
KBUILD_CFLAGS += $(cflags-y)
|
|
|
|
diff --git a/arch/x86/Makefile_32.cpu b/arch/x86/Makefile_32.cpu
|
|
index cd3056759880..2c81838df533 100644
|
|
--- a/arch/x86/Makefile_32.cpu
|
|
+++ b/arch/x86/Makefile_32.cpu
|
|
@@ -24,7 +24,19 @@ cflags-$(CONFIG_MK6) += -march=k6
|
|
# Please note, that patches that add -march=athlon-xp and friends are pointless.
|
|
# They make zero difference whatsosever to performance at this time.
|
|
cflags-$(CONFIG_MK7) += -march=athlon
|
|
+cflags-$(CONFIG_MNATIVE) += $(call cc-option,-march=native)
|
|
cflags-$(CONFIG_MK8) += $(call cc-option,-march=k8,-march=athlon)
|
|
+cflags-$(CONFIG_MK8SSE3) += $(call cc-option,-march=k8-sse3,-march=athlon)
|
|
+cflags-$(CONFIG_MK10) += $(call cc-option,-march=amdfam10,-march=athlon)
|
|
+cflags-$(CONFIG_MBARCELONA) += $(call cc-option,-march=barcelona,-march=athlon)
|
|
+cflags-$(CONFIG_MBOBCAT) += $(call cc-option,-march=btver1,-march=athlon)
|
|
+cflags-$(CONFIG_MJAGUAR) += $(call cc-option,-march=btver2,-march=athlon)
|
|
+cflags-$(CONFIG_MBULLDOZER) += $(call cc-option,-march=bdver1,-march=athlon)
|
|
+cflags-$(CONFIG_MPILEDRIVER) += $(call cc-option,-march=bdver2,-march=athlon)
|
|
+cflags-$(CONFIG_MSTEAMROLLER) += $(call cc-option,-march=bdver3,-march=athlon)
|
|
+cflags-$(CONFIG_MEXCAVATOR) += $(call cc-option,-march=bdver4,-march=athlon)
|
|
+cflags-$(CONFIG_MZEN) += $(call cc-option,-march=znver1,-march=athlon)
|
|
+cflags-$(CONFIG_MZEN2) += $(call cc-option,-march=znver2,-march=athlon)
|
|
cflags-$(CONFIG_MCRUSOE) += -march=i686 -falign-functions=0 -falign-jumps=0 -falign-loops=0
|
|
cflags-$(CONFIG_MEFFICEON) += -march=i686 $(call tune,pentium3) -falign-functions=0 -falign-jumps=0 -falign-loops=0
|
|
cflags-$(CONFIG_MWINCHIPC6) += $(call cc-option,-march=winchip-c6,-march=i586)
|
|
@@ -33,8 +45,22 @@ cflags-$(CONFIG_MCYRIXIII) += $(call cc-option,-march=c3,-march=i486) -falign-fu
|
|
cflags-$(CONFIG_MVIAC3_2) += $(call cc-option,-march=c3-2,-march=i686)
|
|
cflags-$(CONFIG_MVIAC7) += -march=i686
|
|
cflags-$(CONFIG_MCORE2) += -march=i686 $(call tune,core2)
|
|
-cflags-$(CONFIG_MATOM) += $(call cc-option,-march=atom,$(call cc-option,-march=core2,-march=i686)) \
|
|
- $(call cc-option,-mtune=atom,$(call cc-option,-mtune=generic))
|
|
+cflags-$(CONFIG_MNEHALEM) += -march=i686 $(call tune,nehalem)
|
|
+cflags-$(CONFIG_MWESTMERE) += -march=i686 $(call tune,westmere)
|
|
+cflags-$(CONFIG_MSILVERMONT) += -march=i686 $(call tune,silvermont)
|
|
+cflags-$(CONFIG_MGOLDMONT) += -march=i686 $(call tune,goldmont)
|
|
+cflags-$(CONFIG_MGOLDMONTPLUS) += -march=i686 $(call tune,goldmont-plus)
|
|
+cflags-$(CONFIG_MSANDYBRIDGE) += -march=i686 $(call tune,sandybridge)
|
|
+cflags-$(CONFIG_MIVYBRIDGE) += -march=i686 $(call tune,ivybridge)
|
|
+cflags-$(CONFIG_MHASWELL) += -march=i686 $(call tune,haswell)
|
|
+cflags-$(CONFIG_MBROADWELL) += -march=i686 $(call tune,broadwell)
|
|
+cflags-$(CONFIG_MSKYLAKE) += -march=i686 $(call tune,skylake)
|
|
+cflags-$(CONFIG_MSKYLAKEX) += -march=i686 $(call tune,skylake-avx512)
|
|
+cflags-$(CONFIG_MCANNONLAKE) += -march=i686 $(call tune,cannonlake)
|
|
+cflags-$(CONFIG_MICELAKE) += -march=i686 $(call tune,icelake-client)
|
|
+cflags-$(CONFIG_MCASCADELAKE) += -march=i686 $(call tune,cascadelake)
|
|
+cflags-$(CONFIG_MATOM) += $(call cc-option,-march=bonnell,$(call cc-option,-march=core2,-march=i686)) \
|
|
+ $(call cc-option,-mtune=bonnell,$(call cc-option,-mtune=generic))
|
|
|
|
# AMD Elan support
|
|
cflags-$(CONFIG_MELAN) += -march=i486
|
|
diff --git a/arch/x86/include/asm/module.h b/arch/x86/include/asm/module.h
|
|
index c215d2762488..a4fddfe3d4fb 100644
|
|
--- a/arch/x86/include/asm/module.h
|
|
+++ b/arch/x86/include/asm/module.h
|
|
@@ -27,6 +27,36 @@ struct mod_arch_specific {
|
|
#define MODULE_PROC_FAMILY "586MMX "
|
|
#elif defined CONFIG_MCORE2
|
|
#define MODULE_PROC_FAMILY "CORE2 "
|
|
+#elif defined CONFIG_MNATIVE
|
|
+#define MODULE_PROC_FAMILY "NATIVE "
|
|
+#elif defined CONFIG_MNEHALEM
|
|
+#define MODULE_PROC_FAMILY "NEHALEM "
|
|
+#elif defined CONFIG_MWESTMERE
|
|
+#define MODULE_PROC_FAMILY "WESTMERE "
|
|
+#elif defined CONFIG_MSILVERMONT
|
|
+#define MODULE_PROC_FAMILY "SILVERMONT "
|
|
+#elif defined CONFIG_MGOLDMONT
|
|
+#define MODULE_PROC_FAMILY "GOLDMONT "
|
|
+#elif defined CONFIG_MGOLDMONTPLUS
|
|
+#define MODULE_PROC_FAMILY "GOLDMONTPLUS "
|
|
+#elif defined CONFIG_MSANDYBRIDGE
|
|
+#define MODULE_PROC_FAMILY "SANDYBRIDGE "
|
|
+#elif defined CONFIG_MIVYBRIDGE
|
|
+#define MODULE_PROC_FAMILY "IVYBRIDGE "
|
|
+#elif defined CONFIG_MHASWELL
|
|
+#define MODULE_PROC_FAMILY "HASWELL "
|
|
+#elif defined CONFIG_MBROADWELL
|
|
+#define MODULE_PROC_FAMILY "BROADWELL "
|
|
+#elif defined CONFIG_MSKYLAKE
|
|
+#define MODULE_PROC_FAMILY "SKYLAKE "
|
|
+#elif defined CONFIG_MSKYLAKEX
|
|
+#define MODULE_PROC_FAMILY "SKYLAKEX "
|
|
+#elif defined CONFIG_MCANNONLAKE
|
|
+#define MODULE_PROC_FAMILY "CANNONLAKE "
|
|
+#elif defined CONFIG_MICELAKE
|
|
+#define MODULE_PROC_FAMILY "ICELAKE "
|
|
+#elif defined CONFIG_MCASCADELAKE
|
|
+#define MODULE_PROC_FAMILY "CASCADELAKE "
|
|
#elif defined CONFIG_MATOM
|
|
#define MODULE_PROC_FAMILY "ATOM "
|
|
#elif defined CONFIG_M686
|
|
@@ -45,6 +75,28 @@ struct mod_arch_specific {
|
|
#define MODULE_PROC_FAMILY "K7 "
|
|
#elif defined CONFIG_MK8
|
|
#define MODULE_PROC_FAMILY "K8 "
|
|
+#elif defined CONFIG_MK8SSE3
|
|
+#define MODULE_PROC_FAMILY "K8SSE3 "
|
|
+#elif defined CONFIG_MK10
|
|
+#define MODULE_PROC_FAMILY "K10 "
|
|
+#elif defined CONFIG_MBARCELONA
|
|
+#define MODULE_PROC_FAMILY "BARCELONA "
|
|
+#elif defined CONFIG_MBOBCAT
|
|
+#define MODULE_PROC_FAMILY "BOBCAT "
|
|
+#elif defined CONFIG_MBULLDOZER
|
|
+#define MODULE_PROC_FAMILY "BULLDOZER "
|
|
+#elif defined CONFIG_MPILEDRIVER
|
|
+#define MODULE_PROC_FAMILY "PILEDRIVER "
|
|
+#elif defined CONFIG_MSTEAMROLLER
|
|
+#define MODULE_PROC_FAMILY "STEAMROLLER "
|
|
+#elif defined CONFIG_MJAGUAR
|
|
+#define MODULE_PROC_FAMILY "JAGUAR "
|
|
+#elif defined CONFIG_MEXCAVATOR
|
|
+#define MODULE_PROC_FAMILY "EXCAVATOR "
|
|
+#elif defined CONFIG_MZEN
|
|
+#define MODULE_PROC_FAMILY "ZEN "
|
|
+#elif defined CONFIG_MZEN2
|
|
+#define MODULE_PROC_FAMILY "ZEN2 "
|
|
#elif defined CONFIG_MELAN
|
|
#define MODULE_PROC_FAMILY "ELAN "
|
|
#elif defined CONFIG_MCRUSOE
|
|
diff --git a/fs/dcache.c b/fs/dcache.c
|
|
index 2acfc69878f5..3f1131431e06 100644
|
|
--- a/fs/dcache.c
|
|
+++ b/fs/dcache.c
|
|
@@ -69,7 +69,7 @@
|
|
* If no ancestor relationship:
|
|
* arbitrary, since it's serialized on rename_lock
|
|
*/
|
|
-int sysctl_vfs_cache_pressure __read_mostly = 100;
|
|
+int sysctl_vfs_cache_pressure __read_mostly = 50;
|
|
EXPORT_SYMBOL_GPL(sysctl_vfs_cache_pressure);
|
|
|
|
__cacheline_aligned_in_smp DEFINE_SEQLOCK(rename_lock);
|
|
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
|
|
index 211890edf37e..37121563407d 100644
|
|
--- a/kernel/sched/core.c
|
|
+++ b/kernel/sched/core.c
|
|
@@ -41,7 +41,7 @@ const_debug unsigned int sysctl_sched_features =
|
|
* Number of tasks to iterate in a single balance run.
|
|
* Limited because this is done with IRQs disabled.
|
|
*/
|
|
-const_debug unsigned int sysctl_sched_nr_migrate = 32;
|
|
+const_debug unsigned int sysctl_sched_nr_migrate = 128;
|
|
|
|
/*
|
|
* period over which we average the RT time consumption, measured
|
|
@@ -61,9 +61,9 @@ __read_mostly int scheduler_running;
|
|
|
|
/*
|
|
* part of the period that we allow rt tasks to run in us.
|
|
- * default: 0.95s
|
|
+ * XanMod default: 0.98s
|
|
*/
|
|
-int sysctl_sched_rt_runtime = 950000;
|
|
+int sysctl_sched_rt_runtime = 980000;
|
|
|
|
/*
|
|
* __task_rq_lock - lock the rq @p resides on.
|
|
diff --git a/mm/zswap.c b/mm/zswap.c
|
|
index 61a5c41972db..2674c2806130 100644
|
|
--- a/mm/zswap.c
|
|
+++ b/mm/zswap.c
|
|
@@ -91,7 +91,7 @@ static struct kernel_param_ops zswap_enabled_param_ops = {
|
|
module_param_cb(enabled, &zswap_enabled_param_ops, &zswap_enabled, 0644);
|
|
|
|
/* Crypto compressor to use */
|
|
-#define ZSWAP_COMPRESSOR_DEFAULT "lzo"
|
|
+#define ZSWAP_COMPRESSOR_DEFAULT "lz4"
|
|
static char *zswap_compressor = ZSWAP_COMPRESSOR_DEFAULT;
|
|
static int zswap_compressor_param_set(const char *,
|
|
const struct kernel_param *);
|
|
diff --git a/scripts/setlocalversion b/scripts/setlocalversion
|
|
index 71f39410691b..288f9679e883 100755
|
|
--- a/scripts/setlocalversion
|
|
+++ b/scripts/setlocalversion
|
|
@@ -54,7 +54,7 @@ scm_version()
|
|
# If only the short version is requested, don't bother
|
|
# running further git commands
|
|
if $short; then
|
|
- echo "+"
|
|
+ # echo "+"
|
|
return
|
|
fi
|
|
# If we are past a tagged commit (like
|
|
|
|
From f85ed068b4d0e6c31edce8574a95757a60e58b87 Mon Sep 17 00:00:00 2001
|
|
From: Etienne Juvigny <Ti3noU@gmail.com>
|
|
Date: Mon, 3 Sep 2018 17:36:25 +0200
|
|
Subject: Zenify & stuff
|
|
|
|
|
|
diff --git a/Documentation/tp_smapi.txt b/Documentation/tp_smapi.txt
|
|
new file mode 100644
|
|
index 000000000000..a249678a8866
|
|
--- /dev/null
|
|
+++ b/Documentation/tp_smapi.txt
|
|
@@ -0,0 +1,275 @@
|
|
+tp_smapi version 0.42
|
|
+IBM ThinkPad hardware functions driver
|
|
+
|
|
+Author: Shem Multinymous <multinymous@gmail.com>
|
|
+Project: http://sourceforge.net/projects/tpctl
|
|
+Wiki: http://thinkwiki.org/wiki/tp_smapi
|
|
+List: linux-thinkpad@linux-thinkpad.org
|
|
+ (http://mailman.linux-thinkpad.org/mailman/listinfo/linux-thinkpad)
|
|
+
|
|
+Description
|
|
+-----------
|
|
+
|
|
+ThinkPad laptops include a proprietary interface called SMAPI BIOS
|
|
+(System Management Application Program Interface) which provides some
|
|
+hardware control functionality that is not accessible by other means.
|
|
+
|
|
+This driver exposes some features of the SMAPI BIOS through a sysfs
|
|
+interface. It is suitable for newer models, on which SMAPI is invoked
|
|
+through IO port writes. Older models use a different SMAPI interface;
|
|
+for those, try the "thinkpad" module from the "tpctl" package.
|
|
+
|
|
+WARNING:
|
|
+This driver uses undocumented features and direct hardware access.
|
|
+It thus cannot be guaranteed to work, and may cause arbitrary damage
|
|
+(especially on models it wasn't tested on).
|
|
+
|
|
+
|
|
+Module parameters
|
|
+-----------------
|
|
+
|
|
+thinkpad_ec module:
|
|
+ force_io=1 lets thinkpad_ec load on some recent ThinkPad models
|
|
+ (e.g., T400 and T500) whose BIOS's ACPI DSDT reserves the ports we need.
|
|
+tp_smapi module:
|
|
+ debug=1 enables verbose dmesg output.
|
|
+
|
|
+
|
|
+Usage
|
|
+-----
|
|
+
|
|
+Control of battery charging thresholds (in percents of current full charge
|
|
+capacity):
|
|
+
|
|
+# echo 40 > /sys/devices/platform/smapi/BAT0/start_charge_thresh
|
|
+# echo 70 > /sys/devices/platform/smapi/BAT0/stop_charge_thresh
|
|
+# cat /sys/devices/platform/smapi/BAT0/*_charge_thresh
|
|
+
|
|
+ (This is useful since Li-Ion batteries wear out much faster at very
|
|
+ high or low charge levels. The driver will also keeps the thresholds
|
|
+ across suspend-to-disk with AC disconnected; this isn't done
|
|
+ automatically by the hardware.)
|
|
+
|
|
+Inhibiting battery charging for 17 minutes (overrides thresholds):
|
|
+
|
|
+# echo 17 > /sys/devices/platform/smapi/BAT0/inhibit_charge_minutes
|
|
+# echo 0 > /sys/devices/platform/smapi/BAT0/inhibit_charge_minutes # stop
|
|
+# cat /sys/devices/platform/smapi/BAT0/inhibit_charge_minutes
|
|
+
|
|
+ (This can be used to control which battery is charged when using an
|
|
+ Ultrabay battery.)
|
|
+
|
|
+Forcing battery discharging even if AC power available:
|
|
+
|
|
+# echo 1 > /sys/devices/platform/smapi/BAT0/force_discharge # start discharge
|
|
+# echo 0 > /sys/devices/platform/smapi/BAT0/force_discharge # stop discharge
|
|
+# cat /sys/devices/platform/smapi/BAT0/force_discharge
|
|
+
|
|
+ (When AC is connected, forced discharging will automatically stop
|
|
+ when battery is fully depleted -- this is useful for calibration.
|
|
+ Also, this attribute can be used to control which battery is discharged
|
|
+ when both a system battery and an Ultrabay battery are connected.)
|
|
+
|
|
+Misc read-only battery status attributes (see note about HDAPS below):
|
|
+
|
|
+/sys/devices/platform/smapi/BAT0/installed # 0 or 1
|
|
+/sys/devices/platform/smapi/BAT0/state # idle/charging/discharging
|
|
+/sys/devices/platform/smapi/BAT0/cycle_count # integer counter
|
|
+/sys/devices/platform/smapi/BAT0/current_now # instantaneous current
|
|
+/sys/devices/platform/smapi/BAT0/current_avg # last minute average
|
|
+/sys/devices/platform/smapi/BAT0/power_now # instantaneous power
|
|
+/sys/devices/platform/smapi/BAT0/power_avg # last minute average
|
|
+/sys/devices/platform/smapi/BAT0/last_full_capacity # in mWh
|
|
+/sys/devices/platform/smapi/BAT0/remaining_percent # remaining percent of energy (set by calibration)
|
|
+/sys/devices/platform/smapi/BAT0/remaining_percent_error # error range of remaing_percent (not reset by calibration)
|
|
+/sys/devices/platform/smapi/BAT0/remaining_running_time # in minutes, by last minute average power
|
|
+/sys/devices/platform/smapi/BAT0/remaining_running_time_now # in minutes, by instantenous power
|
|
+/sys/devices/platform/smapi/BAT0/remaining_charging_time # in minutes
|
|
+/sys/devices/platform/smapi/BAT0/remaining_capacity # in mWh
|
|
+/sys/devices/platform/smapi/BAT0/design_capacity # in mWh
|
|
+/sys/devices/platform/smapi/BAT0/voltage # in mV
|
|
+/sys/devices/platform/smapi/BAT0/design_voltage # in mV
|
|
+/sys/devices/platform/smapi/BAT0/charging_max_current # max charging current
|
|
+/sys/devices/platform/smapi/BAT0/charging_max_voltage # max charging voltage
|
|
+/sys/devices/platform/smapi/BAT0/group{0,1,2,3}_voltage # see below
|
|
+/sys/devices/platform/smapi/BAT0/manufacturer # string
|
|
+/sys/devices/platform/smapi/BAT0/model # string
|
|
+/sys/devices/platform/smapi/BAT0/barcoding # string
|
|
+/sys/devices/platform/smapi/BAT0/chemistry # string
|
|
+/sys/devices/platform/smapi/BAT0/serial # integer
|
|
+/sys/devices/platform/smapi/BAT0/manufacture_date # YYYY-MM-DD
|
|
+/sys/devices/platform/smapi/BAT0/first_use_date # YYYY-MM-DD
|
|
+/sys/devices/platform/smapi/BAT0/temperature # in milli-Celsius
|
|
+/sys/devices/platform/smapi/BAT0/dump # see below
|
|
+/sys/devices/platform/smapi/ac_connected # 0 or 1
|
|
+
|
|
+The BAT0/group{0,1,2,3}_voltage attribute refers to the separate cell groups
|
|
+in each battery. For example, on the ThinkPad 600, X3x, T4x and R5x models,
|
|
+the battery contains 3 cell groups in series, where each group consisting of 2
|
|
+or 3 cells connected in parallel. The voltage of each group is given by these
|
|
+attributes, and their sum (roughly) equals the "voltage" attribute.
|
|
+(The effective performance of the battery is determined by the weakest group,
|
|
+i.e., the one those voltage changes most rapidly during dis/charging.)
|
|
+
|
|
+The "BAT0/dump" attribute gives a a hex dump of the raw status data, which
|
|
+contains additional data now in the above (if you can figure it out). Some
|
|
+unused values are autodetected and replaced by "--":
|
|
+
|
|
+In all of the above, replace BAT0 with BAT1 to address the 2nd battery (e.g.
|
|
+in the UltraBay).
|
|
+
|
|
+
|
|
+Raw SMAPI calls:
|
|
+
|
|
+/sys/devices/platform/smapi/smapi_request
|
|
+This performs raw SMAPI calls. It uses a bad interface that cannot handle
|
|
+multiple simultaneous access. Don't touch it, it's for development only.
|
|
+If you did touch it, you would so something like
|
|
+# echo '211a 100 0 0' > /sys/devices/platform/smapi/smapi_request
|
|
+# cat /sys/devices/platform/smapi/smapi_request
|
|
+and notice that in the output "211a 34b b2 0 0 0 'OK'", the "4b" in the 2nd
|
|
+value, converted to decimal is 75: the current charge stop threshold.
|
|
+
|
|
+
|
|
+Model-specific status
|
|
+---------------------
|
|
+
|
|
+Works (at least partially) on the following ThinkPad model:
|
|
+* A30
|
|
+* G41
|
|
+* R40, R50p, R51, R52
|
|
+* T23, T40, T40p, T41, T41p, T42, T42p, T43, T43p, T60, T61, T400, T410, T420 (partially)
|
|
+* X24, X31, X32, X40, X41, X60, X61, X200, X201, X220 (partially)
|
|
+* Z60t, Z61m
|
|
+
|
|
+Does not work on:
|
|
+* X230 and newer
|
|
+* T430 and newer
|
|
+* Any ThinkPad Edge
|
|
+* Any ThinkPad Yoga
|
|
+* Any ThinkPad L series
|
|
+* Any ThinkPad P series
|
|
+
|
|
+Not all functions are available on all models; for detailed status, see:
|
|
+ http://thinkwiki.org/wiki/tp_smapi
|
|
+
|
|
+Please report success/failure by e-mail or on the Wiki.
|
|
+If you get a "not implemented" or "not supported" message, your laptop
|
|
+probably just can't do that (at least not via the SMAPI BIOS).
|
|
+For negative reports, follow the bug reporting guidelines below.
|
|
+If you send me the necessary technical data (i.e., SMAPI function
|
|
+interfaces), I will support additional models.
|
|
+
|
|
+
|
|
+Additional HDAPS features
|
|
+-------------------------
|
|
+
|
|
+The modified hdaps driver has several improvements on the one in mainline
|
|
+(beyond resolving the conflict with thinkpad_ec and tp_smapi):
|
|
+
|
|
+- Fixes reliability and improves support for recent ThinkPad models
|
|
+ (especially *60 and newer). Unlike the mainline driver, the modified hdaps
|
|
+ correctly follows the Embedded Controller communication protocol.
|
|
+
|
|
+- Extends the "invert" parameter to cover all possible axis orientations.
|
|
+ The possible values are as follows.
|
|
+ Let X,Y denote the hardware readouts.
|
|
+ Let R denote the laptop's roll (tilt left/right).
|
|
+ Let P denote the laptop's pitch (tilt forward/backward).
|
|
+ invert=0: R= X P= Y (same as mainline)
|
|
+ invert=1: R=-X P=-Y (same as mainline)
|
|
+ invert=2: R=-X P= Y (new)
|
|
+ invert=3: R= X P=-Y (new)
|
|
+ invert=4: R= Y P= X (new)
|
|
+ invert=5: R=-Y P=-X (new)
|
|
+ invert=6: R=-Y P= X (new)
|
|
+ invert=7: R= Y P=-X (new)
|
|
+ It's probably easiest to just try all 8 possibilities and see which yields
|
|
+ correct results (e.g., in the hdaps-gl visualisation).
|
|
+
|
|
+- Adds a whitelist which automatically sets the correct axis orientation for
|
|
+ some models. If the value for your model is wrong or missing, you can override
|
|
+ it using the "invert" parameter. Please also update the tables at
|
|
+ http://www.thinkwiki.org/wiki/tp_smapi and
|
|
+ http://www.thinkwiki.org/wiki/List_of_DMI_IDs
|
|
+ and submit a patch for the whitelist in hdaps.c.
|
|
+
|
|
+- Provides new attributes:
|
|
+ /sys/devices/platform/hdaps/sampling_rate:
|
|
+ This determines the frequency at which the host queries the embedded
|
|
+ controller for accelerometer data (and informs the hdaps input devices).
|
|
+ Default=50.
|
|
+ /sys/devices/platform/hdaps/oversampling_ratio:
|
|
+ When set to X, the embedded controller is told to do physical accelerometer
|
|
+ measurements at a rate that is X times higher than the rate at which
|
|
+ the driver reads those measurements (i.e., X*sampling_rate). This
|
|
+ makes the readouts from the embedded controller more fresh, and is also
|
|
+ useful for the running average filter (see next). Default=5
|
|
+ /sys/devices/platform/hdaps/running_avg_filter_order:
|
|
+ When set to X, reported readouts will be the average of the last X physical
|
|
+ accelerometer measurements. Current firmware allows 1<=X<=8. Setting to a
|
|
+ high value decreases readout fluctuations. The averaging is handled by the
|
|
+ embedded controller, so no CPU resources are used. Higher values make the
|
|
+ readouts smoother, since it averages out both sensor noise (good) and abrupt
|
|
+ changes (bad). Default=2.
|
|
+
|
|
+- Provides a second input device, which publishes the raw accelerometer
|
|
+ measurements (without the fuzzing needed for joystick emulation). This input
|
|
+ device can be matched by a udev rule such as the following (all on one line):
|
|
+ KERNEL=="event[0-9]*", ATTRS{phys}=="hdaps/input1",
|
|
+ ATTRS{modalias}=="input:b0019v1014p5054e4801-*",
|
|
+ SYMLINK+="input/hdaps/accelerometer-event
|
|
+
|
|
+A new version of the hdapsd userspace daemon, which uses the input device
|
|
+interface instead of polling sysfs, is available seprately. Using this reduces
|
|
+the total interrupts per second generated by hdaps+hdapsd (on tickless kernels)
|
|
+to 50, down from a value that fluctuates between 50 and 100. Set the
|
|
+sampling_rate sysfs attribute to a lower value to further reduce interrupts,
|
|
+at the expense of response latency.
|
|
+
|
|
+Licensing note: all my changes to the HDAPS driver are licensed under the
|
|
+GPL version 2 or, at your option and to the extent allowed by derivation from
|
|
+prior works, any later version. My version of hdaps is derived work from the
|
|
+mainline version, which at the time of writing is available only under
|
|
+GPL version 2.
|
|
+
|
|
+Bug reporting
|
|
+-------------
|
|
+
|
|
+Mail <multinymous@gmail.com>. Please include:
|
|
+* Details about your model,
|
|
+* Relevant "dmesg" output. Make sure thinkpad_ec and tp_smapi are loaded with
|
|
+ the "debug=1" parameter (e.g., use "make load HDAPS=1 DEBUG=1").
|
|
+* Output of "dmidecode | grep -C5 Product"
|
|
+* Does the failed functionality works under Windows?
|
|
+
|
|
+
|
|
+More about SMAPI
|
|
+----------------
|
|
+
|
|
+For hints about what may be possible via the SMAPI BIOS and how, see:
|
|
+
|
|
+* IBM Technical Reference Manual for the ThinkPad 770
|
|
+ (http://www-307.ibm.com/pc/support/site.wss/document.do?lndocid=PFAN-3TUQQD)
|
|
+* Exported symbols in PWRMGRIF.DLL or TPPWRW32.DLL (e.g., use "objdump -x").
|
|
+* drivers/char/mwave/smapi.c in the Linux kernel tree.*
|
|
+* The "thinkpad" SMAPI module (http://tpctl.sourceforge.net).
|
|
+* The SMAPI_* constants in tp_smapi.c.
|
|
+
|
|
+Note that in the above Technical Reference and in the "thinkpad" module,
|
|
+SMAPI is invoked through a function call to some physical address. However,
|
|
+the interface used by tp_smapi and the above mwave drive, and apparently
|
|
+required by newer ThinkPad, is different: you set the parameters up in the
|
|
+CPU's registers and write to ports 0xB2 (the APM control port) and 0x4F; this
|
|
+triggers an SMI (System Management Interrupt), causing the CPU to enter
|
|
+SMM (System Management Mode) and run the BIOS firmware; the results are
|
|
+returned in the CPU's registers. It is not clear what is the relation between
|
|
+the two variants of SMAPI, though the assignment of error codes seems to be
|
|
+similar.
|
|
+
|
|
+In addition, the embedded controller on ThinkPad laptops has a non-standard
|
|
+interface at IO ports 0x1600-0x161F (mapped to LCP channel 3 of the H8S chip).
|
|
+The interface provides various system management services (currently known:
|
|
+battery information and accelerometer readouts). For more information see the
|
|
+thinkpad_ec module and the H8S hardware documentation:
|
|
+http://documentation.renesas.com/eng/products/mpumcu/rej09b0300_2140bhm.pdf
|
|
diff --git a/init/Kconfig b/init/Kconfig
|
|
index b4daad2bac23..c1e59dc04209 100644
|
|
--- a/init/Kconfig
|
|
+++ b/init/Kconfig
|
|
@@ -1244,7 +1244,6 @@ config CC_OPTIMIZE_FOR_PERFORMANCE
|
|
|
|
config CC_OPTIMIZE_FOR_PERFORMANCE_O3
|
|
bool "Optimize more for performance (-O3)"
|
|
- depends on ARC
|
|
imply CC_DISABLE_WARN_MAYBE_UNINITIALIZED # avoid false positives
|
|
help
|
|
Choosing this option will pass "-O3" to your compiler to optimize
|
|
diff --git a/drivers/infiniband/core/addr.c b/drivers/infiniband/core/addr.c
|
|
index 4f32c4062fb6..c0bf039e1b40 100644
|
|
--- a/drivers/infiniband/core/addr.c
|
|
+++ b/drivers/infiniband/core/addr.c
|
|
@@ -721,6 +721,7 @@ int rdma_addr_find_l2_eth_by_grh(const union ib_gid *sgid,
|
|
struct sockaddr _sockaddr;
|
|
struct sockaddr_in _sockaddr_in;
|
|
struct sockaddr_in6 _sockaddr_in6;
|
|
+ struct sockaddr_ib _sockaddr_ib;
|
|
} sgid_addr, dgid_addr;
|
|
int ret;
|
|
|
|
diff --git a/drivers/tty/Kconfig b/drivers/tty/Kconfig
|
|
index 0840d27381ea..73aba9a31064 100644
|
|
--- a/drivers/tty/Kconfig
|
|
+++ b/drivers/tty/Kconfig
|
|
@@ -75,6 +75,19 @@ config VT_CONSOLE_SLEEP
|
|
def_bool y
|
|
depends on VT_CONSOLE && PM_SLEEP
|
|
|
|
+config NR_TTY_DEVICES
|
|
+ int "Maximum tty device number"
|
|
+ depends on VT
|
|
+ range 12 63
|
|
+ default 63
|
|
+ ---help---
|
|
+ This option is used to change the number of tty devices in /dev.
|
|
+ The default value is 63. The lowest number you can set is 12,
|
|
+ 63 is also the upper limit so we don't overrun the serial
|
|
+ consoles.
|
|
+
|
|
+ If unsure, say 63.
|
|
+
|
|
config HW_CONSOLE
|
|
bool
|
|
depends on VT && !UML
|
|
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
|
|
index 79226ca8f80f..2a30060e7e1d 100644
|
|
--- a/include/linux/blkdev.h
|
|
+++ b/include/linux/blkdev.h
|
|
@@ -47,7 +47,11 @@ struct blk_queue_stats;
|
|
struct blk_stat_callback;
|
|
|
|
#define BLKDEV_MIN_RQ 4
|
|
+#ifdef CONFIG_ZENIFY
|
|
+#define BLKDEV_MAX_RQ 512
|
|
+#else
|
|
#define BLKDEV_MAX_RQ 128 /* Default maximum */
|
|
+#endif
|
|
|
|
/* Must be consistent with blk_mq_poll_stats_bkt() */
|
|
#define BLK_MQ_POLL_STATS_BKTS 16
|
|
diff --git a/include/uapi/linux/vt.h b/include/uapi/linux/vt.h
|
|
index e9d39c48520a..3bceead8da40 100644
|
|
--- a/include/uapi/linux/vt.h
|
|
+++ b/include/uapi/linux/vt.h
|
|
@@ -3,12 +3,25 @@
|
|
#define _UAPI_LINUX_VT_H
|
|
|
|
|
|
+/*
|
|
+ * We will make this definition solely for the purpose of making packages
|
|
+ * such as splashutils build, because they can not understand that
|
|
+ * NR_TTY_DEVICES is defined in the kernel configuration.
|
|
+ */
|
|
+#ifndef CONFIG_NR_TTY_DEVICES
|
|
+#define CONFIG_NR_TTY_DEVICES 63
|
|
+#endif
|
|
+
|
|
/*
|
|
* These constants are also useful for user-level apps (e.g., VC
|
|
* resizing).
|
|
*/
|
|
#define MIN_NR_CONSOLES 1 /* must be at least 1 */
|
|
-#define MAX_NR_CONSOLES 63 /* serial lines start at 64 */
|
|
+/*
|
|
+ * NR_TTY_DEVICES:
|
|
+ * Value MUST be at least 12 and must never be higher then 63
|
|
+ */
|
|
+#define MAX_NR_CONSOLES CONFIG_NR_TTY_DEVICES /* serial lines start above this */
|
|
/* Note: the ioctl VT_GETSTATE does not work for
|
|
consoles 16 and higher (since it returns a short) */
|
|
|
|
diff --git a/init/Kconfig b/init/Kconfig
|
|
index 041f3a022122..5ed70eb1ad3a 100644
|
|
--- a/init/Kconfig
|
|
+++ b/init/Kconfig
|
|
@@ -45,6 +45,38 @@ config THREAD_INFO_IN_TASK
|
|
|
|
menu "General setup"
|
|
|
|
+config ZENIFY
|
|
+ bool "A selection of patches from Zen/Liquorix kernel and additional tweaks for a better gaming experience"
|
|
+ default y
|
|
+ help
|
|
+ Tunes the kernel for responsiveness at the cost of throughput and power usage.
|
|
+
|
|
+ --- Virtual Memory Subsystem ---------------------------
|
|
+
|
|
+ Mem dirty before bg writeback..: 10 % -> 20 %
|
|
+ Mem dirty before sync writeback: 20 % -> 50 %
|
|
+
|
|
+ --- Block Layer ----------------------------------------
|
|
+
|
|
+ Queue depth...............: 128 -> 512
|
|
+ Default MQ scheduler......: mq-deadline -> bfq
|
|
+
|
|
+ --- CFS CPU Scheduler ----------------------------------
|
|
+
|
|
+ Scheduling latency.............: 6 -> 3 ms
|
|
+ Minimal granularity............: 0.75 -> 0.3 ms
|
|
+ Wakeup granularity.............: 1 -> 0.5 ms
|
|
+ CPU migration cost.............: 0.5 -> 0.25 ms
|
|
+ Bandwidth slice size...........: 5 -> 3 ms
|
|
+ Ondemand fine upscaling limit..: 95 % -> 85 %
|
|
+
|
|
+ --- MuQSS CPU Scheduler --------------------------------
|
|
+
|
|
+ Scheduling interval............: 6 -> 3 ms
|
|
+ ISO task max realtime use......: 70 % -> 25 %
|
|
+ Ondemand coarse upscaling limit: 80 % -> 45 %
|
|
+ Ondemand fine upscaling limit..: 95 % -> 45 %
|
|
+
|
|
config BROKEN
|
|
bool
|
|
|
|
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
|
|
index 2f0a0be4d344..bada807c7e59 100644
|
|
--- a/kernel/sched/fair.c
|
|
+++ b/kernel/sched/fair.c
|
|
@@ -37,8 +37,13 @@
|
|
*
|
|
* (default: 6ms * (1 + ilog(ncpus)), units: nanoseconds)
|
|
*/
|
|
+#ifdef CONFIG_ZENIFY
|
|
+unsigned int sysctl_sched_latency = 3000000ULL;
|
|
+static unsigned int normalized_sysctl_sched_latency = 3000000ULL;
|
|
+#else
|
|
unsigned int sysctl_sched_latency = 6000000ULL;
|
|
static unsigned int normalized_sysctl_sched_latency = 6000000ULL;
|
|
+#endif
|
|
|
|
/*
|
|
* The initial- and re-scaling of tunables is configurable
|
|
@@ -58,13 +63,22 @@ enum sched_tunable_scaling sysctl_sched_tunable_scaling = SCHED_TUNABLESCALING_L
|
|
*
|
|
* (default: 0.75 msec * (1 + ilog(ncpus)), units: nanoseconds)
|
|
*/
|
|
+#ifdef CONFIG_ZENIFY
|
|
+unsigned int sysctl_sched_min_granularity = 300000ULL;
|
|
+static unsigned int normalized_sysctl_sched_min_granularity = 300000ULL;
|
|
+#else
|
|
unsigned int sysctl_sched_min_granularity = 750000ULL;
|
|
static unsigned int normalized_sysctl_sched_min_granularity = 750000ULL;
|
|
+#endif
|
|
|
|
/*
|
|
* This value is kept at sysctl_sched_latency/sysctl_sched_min_granularity
|
|
*/
|
|
+#ifdef CONFIG_ZENIFY
|
|
+static unsigned int sched_nr_latency = 10;
|
|
+#else
|
|
static unsigned int sched_nr_latency = 8;
|
|
+#endif
|
|
|
|
/*
|
|
* After fork, child runs first. If set to 0 (default) then
|
|
@@ -81,10 +95,17 @@ unsigned int sysctl_sched_child_runs_first __read_mostly;
|
|
*
|
|
* (default: 1 msec * (1 + ilog(ncpus)), units: nanoseconds)
|
|
*/
|
|
+#ifdef CONFIG_ZENIFY
|
|
+unsigned int sysctl_sched_wakeup_granularity = 500000UL;
|
|
+static unsigned int normalized_sysctl_sched_wakeup_granularity = 500000UL;
|
|
+
|
|
+const_debug unsigned int sysctl_sched_migration_cost = 50000UL;
|
|
+#else
|
|
unsigned int sysctl_sched_wakeup_granularity = 1000000UL;
|
|
static unsigned int normalized_sysctl_sched_wakeup_granularity = 1000000UL;
|
|
|
|
const_debug unsigned int sysctl_sched_migration_cost = 500000UL;
|
|
+#endif
|
|
|
|
#ifdef CONFIG_SMP
|
|
/*
|
|
@@ -107,8 +128,12 @@ int __weak arch_asym_cpu_priority(int cpu)
|
|
*
|
|
* (default: 5 msec, units: microseconds)
|
|
*/
|
|
+#ifdef CONFIG_ZENIFY
|
|
+unsigned int sysctl_sched_cfs_bandwidth_slice = 3000UL;
|
|
+#else
|
|
unsigned int sysctl_sched_cfs_bandwidth_slice = 5000UL;
|
|
#endif
|
|
+#endif
|
|
|
|
/*
|
|
* The margin used when comparing utilization with CPU capacity:
|
|
diff --git a/mm/page-writeback.c b/mm/page-writeback.c
|
|
index 337c6afb3345..9315e358f292 100644
|
|
--- a/mm/page-writeback.c
|
|
+++ b/mm/page-writeback.c
|
|
@@ -71,7 +71,11 @@ static long ratelimit_pages = 32;
|
|
/*
|
|
* Start background writeback (via writeback threads) at this percentage
|
|
*/
|
|
+#ifdef CONFIG_ZENIFY
|
|
+int dirty_background_ratio = 20;
|
|
+#else
|
|
int dirty_background_ratio = 10;
|
|
+#endif
|
|
|
|
/*
|
|
* dirty_background_bytes starts at 0 (disabled) so that it is a function of
|
|
@@ -88,7 +92,11 @@ int vm_highmem_is_dirtyable;
|
|
/*
|
|
* The generator of dirty data starts writeback at this percentage
|
|
*/
|
|
+#ifdef CONFIG_ZENIFY
|
|
+int vm_dirty_ratio = 50;
|
|
+#else
|
|
int vm_dirty_ratio = 20;
|
|
+#endif
|
|
|
|
/*
|
|
* vm_dirty_bytes starts at 0 (disabled) so that it is a function of
|
|
diff --git a/net/ipv4/Kconfig b/net/ipv4/Kconfig
|
|
index 80dad301361d..42b7fa7d01f8 100644
|
|
--- a/net/ipv4/Kconfig
|
|
+++ b/net/ipv4/Kconfig
|
|
@@ -702,6 +702,9 @@ choice
|
|
config DEFAULT_VEGAS
|
|
bool "Vegas" if TCP_CONG_VEGAS=y
|
|
|
|
+ config DEFAULT_YEAH
|
|
+ bool "YeAH" if TCP_CONG_YEAH=y
|
|
+
|
|
config DEFAULT_VENO
|
|
bool "Veno" if TCP_CONG_VENO=y
|
|
|
|
@@ -735,6 +738,7 @@ config DEFAULT_TCP_CONG
|
|
default "htcp" if DEFAULT_HTCP
|
|
default "hybla" if DEFAULT_HYBLA
|
|
default "vegas" if DEFAULT_VEGAS
|
|
+ default "yeah" if DEFAULT_YEAH
|
|
default "westwood" if DEFAULT_WESTWOOD
|
|
default "veno" if DEFAULT_VENO
|
|
default "reno" if DEFAULT_RENO
|
|
|
|
From: Nick Desaulniers <ndesaulniers@google.com>
|
|
Date: Mon, 24 Dec 2018 13:37:41 +0200
|
|
Subject: include/linux/compiler*.h: define asm_volatile_goto
|
|
|
|
asm_volatile_goto should also be defined for other compilers that
|
|
support asm goto.
|
|
|
|
Fixes commit 815f0dd ("include/linux/compiler*.h: make compiler-*.h
|
|
mutually exclusive").
|
|
|
|
Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
|
|
Signed-off-by: Miguel Ojeda <miguel.ojeda.sandonis@gmail.com>
|
|
|
|
diff --git a/include/linux/compiler_types.h b/include/linux/compiler_types.h
|
|
index ba814f1..e77eeb0 100644
|
|
--- a/include/linux/compiler_types.h
|
|
+++ b/include/linux/compiler_types.h
|
|
@@ -188,6 +188,10 @@ struct ftrace_likely_data {
|
|
#define asm_volatile_goto(x...) asm goto(x)
|
|
#endif
|
|
|
|
+#ifndef asm_volatile_goto
|
|
+#define asm_volatile_goto(x...) asm goto(x)
|
|
+#endif
|
|
+
|
|
/* Are two types/vars the same type (ignoring qualifiers)? */
|
|
#define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b))
|
|
|
|
From: Andy Lavr <andy.lavr@gmail.com>
|
|
Date: Mon, 24 Dec 2018 14:57:47 +0200
|
|
Subject: avl: Use [defer+madvise] as default khugepaged defrag strategy
|
|
|
|
For some reason, the default strategy to respond to THP fault fallbacks
|
|
is still just madvise, meaning stall if the program wants transparent
|
|
hugepages, but don't trigger a background reclaim / compaction if THP
|
|
begins to fail allocations. This creates a snowball affect where we
|
|
still use the THP code paths, but we almost always fail once a system
|
|
has been active and busy for a while.
|
|
|
|
The option "defer" was created for interactive systems where THP can
|
|
still improve performance. If we have to fallback to a regular page due
|
|
to an allocation failure or anything else, we will trigger a background
|
|
reclaim and compaction so future THP attempts succeed and previous
|
|
attempts eventually have their smaller pages combined without stalling
|
|
running applications.
|
|
|
|
We still want madvise to stall applications that explicitely want THP,
|
|
so defer+madvise _does_ make a ton of sense. Make it the default for
|
|
interactive systems, especially if the kernel maintainer left
|
|
transparent hugepages on "always".
|
|
|
|
Reasoning and details in the original patch:
|
|
https://lwn.net/Articles/711248/
|
|
|
|
Signed-off-by: Andy Lavr <andy.lavr@gmail.com>
|
|
|
|
diff --git a/mm/huge_memory.c b/mm/huge_memory.c
|
|
index e84a10b..21d62b7 100644
|
|
--- a/mm/huge_memory.c
|
|
+++ b/mm/huge_memory.c
|
|
@@ -53,7 +53,11 @@ unsigned long transparent_hugepage_flags __read_mostly =
|
|
#ifdef CONFIG_TRANSPARENT_HUGEPAGE_MADVISE
|
|
(1<<TRANSPARENT_HUGEPAGE_REQ_MADV_FLAG)|
|
|
#endif
|
|
+#ifdef CONFIG_AVL_INTERACTIVE
|
|
+ (1<<TRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_OR_MADV_FLAG)|
|
|
+#else
|
|
(1<<TRANSPARENT_HUGEPAGE_DEFRAG_REQ_MADV_FLAG)|
|
|
+#endif
|
|
(1<<TRANSPARENT_HUGEPAGE_DEFRAG_KHUGEPAGED_FLAG)|
|
|
(1<<TRANSPARENT_HUGEPAGE_USE_ZERO_PAGE_FLAG);
|
|
|
|
diff --git a/net/sched/Kconfig b/net/sched/Kconfig
|
|
--- a/net/sched/Kconfig
|
|
+++ b/net/sched/Kconfig
|
|
@@ -429,6 +429,9 @@
|
|
Select the queueing discipline that will be used by default
|
|
for all network devices.
|
|
|
|
+ config DEFAULT_CAKE
|
|
+ bool "Common Applications Kept Enhanced" if NET_SCH_CAKE
|
|
+
|
|
config DEFAULT_FQ
|
|
bool "Fair Queue" if NET_SCH_FQ
|
|
|
|
@@ -448,6 +451,7 @@
|
|
config DEFAULT_NET_SCH
|
|
string
|
|
default "pfifo_fast" if DEFAULT_PFIFO_FAST
|
|
+ default "cake" if DEFAULT_CAKE
|
|
default "fq" if DEFAULT_FQ
|
|
default "fq_codel" if DEFAULT_FQ_CODEL
|
|
default "sfq" if DEFAULT_SFQ
|
|
|
|
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
|
|
index a29043ea9..3fb219747 100644
|
|
--- a/mm/page_alloc.c
|
|
+++ b/mm/page_alloc.c
|
|
@@ -263,7 +263,7 @@ compound_page_dtor * const compound_page_dtors[] = {
|
|
#else
|
|
int watermark_boost_factor __read_mostly = 15000;
|
|
#endif
|
|
-int watermark_scale_factor = 10;
|
|
+int watermark_scale_factor = 200;
|
|
|
|
static unsigned long nr_kernel_pages __initdata;
|
|
static unsigned long nr_all_pages __initdata;
|
|
|
|
diff --git a/include/linux/mm.h b/include/linux/mm.h
|
|
index 80bb6408f..6c8b55cd1 100644
|
|
--- a/include/linux/mm.h
|
|
+++ b/include/linux/mm.h
|
|
@@ -146,8 +146,7 @@ extern int mmap_rnd_compat_bits __read_mostly;
|
|
* not a hard limit any more. Although some userspace tools can be surprised by
|
|
* that.
|
|
*/
|
|
-#define MAPCOUNT_ELF_CORE_MARGIN (5)
|
|
-#define DEFAULT_MAX_MAP_COUNT (USHRT_MAX - MAPCOUNT_ELF_CORE_MARGIN)
|
|
+#define DEFAULT_MAX_MAP_COUNT (262144)
|
|
|
|
extern int sysctl_max_map_count;
|
|
|
|
From adb1f9df27f08e6488bcd80b1607987c6114a77a Mon Sep 17 00:00:00 2001
|
|
From: Alexandre Frade <admfrade@gmail.com>
|
|
Date: Mon, 25 Nov 2019 15:13:06 -0300
|
|
Subject: [PATCH] elevator: set default scheduler to bfq for blk-mq
|
|
|
|
Signed-off-by: Alexandre Frade <admfrade@gmail.com>
|
|
---
|
|
block/elevator.c | 6 +++---
|
|
1 file changed, 3 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/block/elevator.c b/block/elevator.c
|
|
index 076ba7308e65..81f89095aa77 100644
|
|
--- a/block/elevator.c
|
|
+++ b/block/elevator.c
|
|
@@ -623,15 +623,15 @@ static inline bool elv_support_iosched(struct request_queue *q)
|
|
}
|
|
|
|
/*
|
|
- * For single queue devices, default to using mq-deadline. If we have multiple
|
|
- * queues or mq-deadline is not available, default to "none".
|
|
+ * For single queue devices, default to using bfq. If we have multiple
|
|
+ * queues or bfq is not available, default to "none".
|
|
*/
|
|
static struct elevator_type *elevator_get_default(struct request_queue *q)
|
|
{
|
|
if (q->nr_hw_queues != 1)
|
|
return NULL;
|
|
|
|
- return elevator_get(q, "mq-deadline", false);
|
|
+ return elevator_get(q, "bfq", false);
|
|
}
|
|
|
|
/*
|
|
From c3ec05777c46e19a8a26d0fc4ca0c0db8a19de97 Mon Sep 17 00:00:00 2001
|
|
From: Alexandre Frade <admfrade@gmail.com>
|
|
Date: Fri, 10 May 2019 16:45:59 -0300
|
|
Subject: [PATCH] block: set rq_affinity = 2 for full multithreading I/O
|
|
requests
|
|
|
|
Signed-off-by: Alexandre Frade <admfrade@gmail.com>
|
|
---
|
|
include/linux/blkdev.h | 3 ++-
|
|
1 file changed, 2 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
|
|
index f3ea78b0c91c..4dbacc6b073b 100644
|
|
--- a/include/linux/blkdev.h
|
|
+++ b/include/linux/blkdev.h
|
|
@@ -621,7 +621,8 @@ struct request_queue {
|
|
#define QUEUE_FLAG_RQ_ALLOC_TIME 27 /* record rq->alloc_time_ns */
|
|
|
|
#define QUEUE_FLAG_MQ_DEFAULT ((1 << QUEUE_FLAG_IO_STAT) | \
|
|
- (1 << QUEUE_FLAG_SAME_COMP))
|
|
+ (1 << QUEUE_FLAG_SAME_COMP) | \
|
|
+ (1 << QUEUE_FLAG_SAME_FORCE))
|
|
|
|
void blk_queue_flag_set(unsigned int flag, struct request_queue *q);
|
|
void blk_queue_flag_clear(unsigned int flag, struct request_queue *q);
|
|
From 8171d33d0b84a953649863538fdbe4c26c035e4f Mon Sep 17 00:00:00 2001
|
|
From: Alexandre Frade <admfrade@gmail.com>
|
|
Date: Fri, 10 May 2019 14:32:50 -0300
|
|
Subject: [PATCH] mm: set 2 megabytes for address_space-level file read-ahead
|
|
pages size
|
|
|
|
Signed-off-by: Alexandre Frade <admfrade@gmail.com>
|
|
---
|
|
include/linux/mm.h | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/include/linux/mm.h b/include/linux/mm.h
|
|
index a2adf95b3f9c..e804d9f7583a 100644
|
|
--- a/include/linux/mm.h
|
|
+++ b/include/linux/mm.h
|
|
@@ -2416,7 +2416,7 @@ int __must_check write_one_page(struct page *page);
|
|
void task_dirty_inc(struct task_struct *tsk);
|
|
|
|
/* readahead.c */
|
|
-#define VM_READAHEAD_PAGES (SZ_128K / PAGE_SIZE)
|
|
+#define VM_READAHEAD_PAGES (SZ_2M / PAGE_SIZE)
|
|
|
|
int force_page_cache_readahead(struct address_space *mapping, struct file *filp,
|
|
pgoff_t offset, unsigned long nr_to_read);
|
|
From de7119e3db9fdb4c704355854a02a7e9fad931d4 Mon Sep 17 00:00:00 2001
|
|
From: Steven Barrett <steven@liquorix.net>
|
|
Date: Wed, 15 Jan 2020 20:43:56 -0600
|
|
Subject: [PATCH] ZEN: intel-pstate: Implement "enable" parameter
|
|
|
|
If intel-pstate is compiled into the kernel, it will preempt the loading
|
|
of acpi-cpufreq so you can take advantage of hardware p-states without
|
|
any friction.
|
|
|
|
However, intel-pstate is not completely superior to cpufreq's ondemand
|
|
for one reason. There's no concept of an up_threshold property.
|
|
|
|
In ondemand, up_threshold essentially reduces the maximum utilization to
|
|
compare against, allowing you to hit max frequencies and turbo boost
|
|
from a much lower core utilization.
|
|
|
|
With intel-pstate, you have the concept of minimum and maximum
|
|
performance, but no tunable that lets you define, maximum frequency
|
|
means 50% core utilization. For just this oversight, there's reasons
|
|
you may want ondemand.
|
|
|
|
Lets support setting "enable" in kernel boot parameters. This lets
|
|
kernel maintainers include "intel_pstate=disable" statically in the
|
|
static boot parameters, but let users of the kernel override this
|
|
selection.
|
|
---
|
|
Documentation/admin-guide/kernel-parameters.txt | 3 +++
|
|
drivers/cpufreq/intel_pstate.c | 2 ++
|
|
2 files changed, 5 insertions(+)
|
|
|
|
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
|
|
index ade4e6ec23e03..0b613370d28d8 100644
|
|
--- a/Documentation/admin-guide/kernel-parameters.txt
|
|
+++ b/Documentation/admin-guide/kernel-parameters.txt
|
|
@@ -1765,6 +1765,9 @@
|
|
disable
|
|
Do not enable intel_pstate as the default
|
|
scaling driver for the supported processors
|
|
+ enable
|
|
+ Enable intel_pstate in-case "disable" was passed
|
|
+ previously in the kernel boot parameters
|
|
passive
|
|
Use intel_pstate as a scaling driver, but configure it
|
|
to work with generic cpufreq governors (instead of
|
|
diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c
|
|
index d2fa3e9ccd97c..bd10cb02fc0ff 100644
|
|
--- a/drivers/cpufreq/intel_pstate.c
|
|
+++ b/drivers/cpufreq/intel_pstate.c
|
|
@@ -2826,6 +2826,8 @@ static int __init intel_pstate_setup(char *str)
|
|
pr_info("HWP disabled\n");
|
|
no_hwp = 1;
|
|
}
|
|
+ if (!strcmp(str, "enable"))
|
|
+ no_load = 0;
|
|
if (!strcmp(str, "force"))
|
|
force_load = 1;
|
|
if (!strcmp(str, "hwp_only"))
|
|
|
|
From: Tk-Glitch <ti3nou@gmail.com>
|
|
Date: Mon, 6 Apr 2020 7:20:12 +0100
|
|
Subject: Import backported drm amd patchset based on
|
|
https://patchwork.freedesktop.org/series/74931/#rev2
|
|
|
|
Due to recent firmware changes, powerplay power limit
|
|
isn't being applied/used. This patchset addresses
|
|
the issue.
|
|
|
|
diff --git a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
|
|
index 657a6f17e91f..323e7e61493b 100644
|
|
--- a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
|
|
+++ b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
|
|
@@ -570,6 +570,7 @@ struct pptable_funcs {
|
|
int (*override_pcie_parameters)(struct smu_context *smu);
|
|
uint32_t (*get_pptable_power_limit)(struct smu_context *smu);
|
|
int (*disable_umc_cdr_12gbps_workaround)(struct smu_context *smu);
|
|
+ int (*set_power_source)(struct smu_context *smu, enum smu_power_src_type power_src);
|
|
};
|
|
|
|
int smu_load_microcode(struct smu_context *smu);
|
|
diff --git a/drivers/gpu/drm/amd/powerplay/smu_internal.h b/drivers/gpu/drm/amd/powerplay/smu_internal.h
|
|
index 6900877de845..40c35bcc5a0a 100644
|
|
--- a/drivers/gpu/drm/amd/powerplay/smu_internal.h
|
|
+++ b/drivers/gpu/drm/amd/powerplay/smu_internal.h
|
|
@@ -211,4 +211,7 @@ static inline int smu_send_smc_msg(struct smu_context *smu, enum smu_message_typ
|
|
#define smu_disable_umc_cdr_12gbps_workaround(smu) \
|
|
((smu)->ppt_funcs->disable_umc_cdr_12gbps_workaround ? (smu)->ppt_funcs->disable_umc_cdr_12gbps_workaround((smu)) : 0)
|
|
|
|
+#define smu_set_power_source(smu, power_src) \
|
|
+ ((smu)->ppt_funcs->set_power_source ? (smu)->ppt_funcs->set_power_source((smu), (power_src)) : 0)
|
|
+
|
|
#endif
|
|
diff --git a/drivers/gpu/drm/amd/powerplay/inc/smu_v11_0.h b/drivers/gpu/drm/amd/powerplay/inc/smu_v11_0.h
|
|
index 1c88219fe403..674e426ed59b 100644
|
|
--- a/drivers/gpu/drm/amd/powerplay/inc/smu_v11_0.h
|
|
+++ b/drivers/gpu/drm/amd/powerplay/inc/smu_v11_0.h
|
|
@@ -267,4 +267,7 @@ uint32_t smu_v11_0_get_max_power_limit(struct smu_context *smu);
|
|
int smu_v11_0_set_performance_level(struct smu_context *smu,
|
|
enum amd_dpm_forced_level level);
|
|
|
|
+int smu_v11_0_set_power_source(struct smu_context *smu,
|
|
+ enum smu_power_src_type power_src);
|
|
+
|
|
#endif
|
|
diff --git a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
|
|
index 4fd77c7cfc80..20174bed11ce 100644
|
|
--- a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
|
|
+++ b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
|
|
@@ -1939,3 +1939,17 @@ int smu_v11_0_set_performance_level(struct smu_context *smu,
|
|
return ret;
|
|
}
|
|
|
|
+int smu_v11_0_set_power_source(struct smu_context *smu,
|
|
+ enum smu_power_src_type power_src)
|
|
+{
|
|
+ int pwr_source;
|
|
+
|
|
+ pwr_source = smu_power_get_index(smu, (uint32_t)power_src);
|
|
+ if (pwr_source < 0)
|
|
+ return -EINVAL;
|
|
+
|
|
+ return smu_send_smc_msg_with_param(smu,
|
|
+ SMU_MSG_NotifyPowerSource,
|
|
+ pwr_source);
|
|
+}
|
|
+
|
|
diff --git a/drivers/gpu/drm/amd/powerplay/navi10_ppt.c b/drivers/gpu/drm/amd/powerplay/navi10_ppt.c
|
|
index d66dfa7410b6..a23eaac28095 100644
|
|
--- a/drivers/gpu/drm/amd/powerplay/navi10_ppt.c
|
|
+++ b/drivers/gpu/drm/amd/powerplay/navi10_ppt.c
|
|
@@ -2369,6 +2369,7 @@ static const struct pptable_funcs navi10_ppt_funcs = {
|
|
.get_pptable_power_limit = navi10_get_pptable_power_limit,
|
|
.run_btc = navi10_run_btc,
|
|
.disable_umc_cdr_12gbps_workaround = navi10_disable_umc_cdr_12gbps_workaround,
|
|
+ .set_power_source = smu_v11_0_set_power_source,
|
|
};
|
|
|
|
void navi10_set_ppt_funcs(struct smu_context *smu)
|
|
diff --git a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
|
|
index f6d4b0ef46ad..2cfb911ab370 100644
|
|
--- a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
|
|
+++ b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
|
|
@@ -1154,6 +1154,21 @@ static int smu_smc_table_hw_init(struct smu_context *smu,
|
|
}
|
|
}
|
|
}
|
|
+
|
|
+ if (adev->asic_type >= CHIP_NAVI10 &&
|
|
+ adev->asic_type <= CHIP_NAVI12) {
|
|
+ /*
|
|
+ * For Navi1X, manually switch it to AC mode as PMFW
|
|
+ * may boot it with DC mode.
|
|
+ * TODO: should check whether we are indeed under AC
|
|
+ * mode before doing this.
|
|
+ */
|
|
+ ret = smu_set_power_source(smu, SMU_POWER_SOURCE_AC);
|
|
+ if (ret) {
|
|
+ pr_err("Failed to switch to AC mode!\n");
|
|
+ return ret;
|
|
+ }
|
|
+ }
|
|
}
|
|
if (adev->asic_type != CHIP_ARCTURUS) {
|
|
ret = smu_notify_display_change(smu);
|
|
diff --git a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
|
|
index 2cfb911ab370..54d156bbc0f3 100644
|
|
--- a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
|
|
+++ b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
|
|
@@ -1155,15 +1155,15 @@ static int smu_smc_table_hw_init(struct smu_context *smu,
|
|
}
|
|
}
|
|
|
|
- if (adev->asic_type >= CHIP_NAVI10 &&
|
|
- adev->asic_type <= CHIP_NAVI12) {
|
|
+ if (smu->ppt_funcs->set_power_source) {
|
|
/*
|
|
* For Navi1X, manually switch it to AC mode as PMFW
|
|
* may boot it with DC mode.
|
|
- * TODO: should check whether we are indeed under AC
|
|
- * mode before doing this.
|
|
*/
|
|
- ret = smu_set_power_source(smu, SMU_POWER_SOURCE_AC);
|
|
+ if (adev->pm.ac_power)
|
|
+ ret = smu_set_power_source(smu, SMU_POWER_SOURCE_AC);
|
|
+ else
|
|
+ ret = smu_set_power_source(smu, SMU_POWER_SOURCE_DC);
|
|
if (ret) {
|
|
pr_err("Failed to switch to AC mode!\n");
|
|
return ret;
|
|
diff --git a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
|
|
index 323e7e61493b..18172dfec947 100644
|
|
--- a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
|
|
+++ b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
|
|
@@ -408,6 +408,7 @@ struct smu_context
|
|
uint32_t smc_if_version;
|
|
|
|
bool uploading_custom_pp_table;
|
|
+ bool dc_controlled_by_gpio;
|
|
};
|
|
|
|
struct i2c_adapter;
|
|
diff --git a/drivers/gpu/drm/amd/powerplay/navi10_ppt.c b/drivers/gpu/drm/amd/powerplay/navi10_ppt.c
|
|
index a23eaac28095..9c60b38ab53a 100644
|
|
--- a/drivers/gpu/drm/amd/powerplay/navi10_ppt.c
|
|
+++ b/drivers/gpu/drm/amd/powerplay/navi10_ppt.c
|
|
@@ -347,7 +347,6 @@ navi10_get_allowed_feature_mask(struct smu_context *smu,
|
|
| FEATURE_MASK(FEATURE_DS_DCEFCLK_BIT)
|
|
| FEATURE_MASK(FEATURE_FW_DSTATE_BIT)
|
|
| FEATURE_MASK(FEATURE_BACO_BIT)
|
|
- | FEATURE_MASK(FEATURE_ACDC_BIT)
|
|
| FEATURE_MASK(FEATURE_GFX_SS_BIT)
|
|
| FEATURE_MASK(FEATURE_APCC_DFLL_BIT)
|
|
| FEATURE_MASK(FEATURE_FW_CTF_BIT)
|
|
@@ -391,6 +390,9 @@ navi10_get_allowed_feature_mask(struct smu_context *smu,
|
|
if (smu->adev->pg_flags & AMD_PG_SUPPORT_JPEG)
|
|
*(uint64_t *)feature_mask |= FEATURE_MASK(FEATURE_JPEG_PG_BIT);
|
|
|
|
+ if (smu->dc_controlled_by_gpio)
|
|
+ *(uint64_t *)feature_mask |= FEATURE_MASK(FEATURE_ACDC_BIT);
|
|
+
|
|
/* disable DPM UCLK and DS SOCCLK on navi10 A0 secure board */
|
|
if (is_asic_secure(smu)) {
|
|
/* only for navi10 A0 */
|
|
@@ -525,6 +527,9 @@ static int navi10_store_powerplay_table(struct smu_context *smu)
|
|
|
|
table_context->thermal_controller_type = powerplay_table->thermal_controller_type;
|
|
|
|
+ if (powerplay_table->platform_caps & SMU_11_0_PP_PLATFORM_CAP_HARDWAREDC)
|
|
+ smu->dc_controlled_by_gpio = true;
|
|
+
|
|
mutex_lock(&smu_baco->mutex);
|
|
if (powerplay_table->platform_caps & SMU_11_0_PP_PLATFORM_CAP_BACO ||
|
|
powerplay_table->platform_caps & SMU_11_0_PP_PLATFORM_CAP_MACO)
|
|
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
|
|
index bc3cf04a1a94..f197f1be0969 100644
|
|
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
|
|
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
|
|
@@ -92,6 +92,9 @@ void amdgpu_pm_acpi_event_handler(struct amdgpu_device *adev)
|
|
if (adev->powerplay.pp_funcs->enable_bapm)
|
|
amdgpu_dpm_enable_bapm(adev, adev->pm.ac_power);
|
|
mutex_unlock(&adev->pm.mutex);
|
|
+
|
|
+ if (is_support_sw_smu(adev))
|
|
+ smu_set_ac_dc(&adev->smu);
|
|
}
|
|
}
|
|
|
|
diff --git a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
|
|
index 54d156bbc0f3..6f4015f87781 100644
|
|
--- a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
|
|
+++ b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
|
|
@@ -2087,6 +2087,29 @@ int smu_set_watermarks_for_clock_ranges(struct smu_context *smu,
|
|
return 0;
|
|
}
|
|
|
|
+int smu_set_ac_dc(struct smu_context *smu)
|
|
+{
|
|
+ int ret = 0;
|
|
+
|
|
+ /* controlled by firmware */
|
|
+ if (smu->dc_controlled_by_gpio)
|
|
+ return 0;
|
|
+
|
|
+ mutex_lock(&smu->mutex);
|
|
+ if (smu->ppt_funcs->set_power_source) {
|
|
+ if (smu->adev->pm.ac_power)
|
|
+ ret = smu_set_power_source(smu, SMU_POWER_SOURCE_AC);
|
|
+ else
|
|
+ ret = smu_set_power_source(smu, SMU_POWER_SOURCE_DC);
|
|
+ if (ret)
|
|
+ pr_err("Failed to switch to %s mode!\n",
|
|
+ smu->adev->pm.ac_power ? "AC" : "DC");
|
|
+ }
|
|
+ mutex_unlock(&smu->mutex);
|
|
+
|
|
+ return ret;
|
|
+}
|
|
+
|
|
const struct amd_ip_funcs smu_ip_funcs = {
|
|
.name = "smu",
|
|
.early_init = smu_early_init,
|
|
diff --git a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
|
|
index 18172dfec947..ae2c318dd6fa 100644
|
|
--- a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
|
|
+++ b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
|
|
@@ -720,6 +720,7 @@ int smu_get_dpm_level_range(struct smu_context *smu, enum smu_clk_type clk_type,
|
|
enum amd_dpm_forced_level smu_get_performance_level(struct smu_context *smu);
|
|
int smu_force_performance_level(struct smu_context *smu, enum amd_dpm_forced_level level);
|
|
int smu_set_display_count(struct smu_context *smu, uint32_t count);
|
|
+int smu_set_ac_dc(struct smu_context *smu);
|
|
bool smu_clk_dpm_is_enabled(struct smu_context *smu, enum smu_clk_type clk_type);
|
|
const char *smu_get_message_name(struct smu_context *smu, enum smu_message_type type);
|
|
const char *smu_get_feature_name(struct smu_context *smu, enum smu_feature_mask feature);
|
|
|
|
diff --git a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
|
|
index 20174bed11ce..d19e1d0d56c0 100644
|
|
--- a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
|
|
+++ b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
|
|
@@ -1525,6 +1525,12 @@ int smu_v11_0_set_xgmi_pstate(struct smu_context *smu,
|
|
return ret;
|
|
}
|
|
|
|
+static int smu_v11_0_ack_ac_dc_interrupt(struct smu_context *smu)
|
|
+{
|
|
+ return smu_send_smc_msg(smu,
|
|
+ SMU_MSG_ReenableAcDcInterrupt);
|
|
+}
|
|
+
|
|
#define THM_11_0__SRCID__THM_DIG_THERM_L2H 0 /* ASIC_TEMP > CG_THERMAL_INT.DIG_THERM_INTH */
|
|
#define THM_11_0__SRCID__THM_DIG_THERM_H2L 1 /* ASIC_TEMP < CG_THERMAL_INT.DIG_THERM_INTL */
|
|
|
|
@@ -1558,6 +1565,9 @@ static int smu_v11_0_irq_process(struct amdgpu_device *adev,
|
|
break;
|
|
|
|
}
|
|
+ } else if (client_id == SOC15_IH_CLIENTID_MP1) {
|
|
+ if (src_id == 0xfe)
|
|
+ smu_v11_0_ack_ac_dc_interrupt(&adev->smu);
|
|
}
|
|
|
|
return 0;
|
|
@@ -1597,6 +1607,12 @@ int smu_v11_0_register_irq_handler(struct smu_context *smu)
|
|
if (ret)
|
|
return ret;
|
|
|
|
+ ret = amdgpu_irq_add_id(adev, SOC15_IH_CLIENTID_MP1,
|
|
+ 0xfe,
|
|
+ irq_src);
|
|
+ if (ret)
|
|
+ return ret;
|
|
+
|
|
return ret;
|
|
}
|
|
|