linux_dsm_epyc7002/drivers/acpi/acpica
Lv Zheng aca2a5d3a8 ACPICA: Hardware: Enable 64-bit firmware waking vector for selected FACS
ACPICA commit 7aa598d711644ab0de5f70ad88f1e2de253115e4

The following commit is reported to have broken s2ram on some platforms:
 Commit: 0249ed2444
 ACPICA: Add option to favor 32-bit FADT addresses.
The platform reports 2 FACS tables (which is not allowed by ACPI
specification) and the new 32-bit address favor rule forces OSPMs to use
the FACS table reported via FADT's X_FIRMWARE_CTRL field.

The root cause of the reported bug might be one of the followings:
1. BIOS may favor the 64-bit firmware waking vector address when the
   version of the FACS is greater than 0 and Linux currently only supports
   resuming from the real mode, so the 64-bit firmware waking vector has
   never been set and might be invalid to BIOS while the commit enables
   higher version FACS.
2. BIOS may favor the FACS reported via the "FIRMWARE_CTRL" field in the
   FADT while the commit doesn't set the firmware waking vector address of
   the FACS reported by "FIRMWARE_CTRL", it only sets the firware waking
   vector address of the FACS reported by "X_FIRMWARE_CTRL".

This patch excludes the cases that can trigger the bugs caused by the root
cause 1.

ACPI specification says:
A. 32-bit FACS address (FIRMWARE_CTRL field in FADT):
   Physical memory address of the FACS, where OSPM and firmware exchange
   control information.
   If the X_FIRMWARE_CTRL field contains a non zero value then this field
   must be zero.
   A zero value indicates that no FACS is specified by this field.
B. 64-bit FACS address (X_FIRMWARE_CTRL field in FADT):
   64bit physical memory address of the FACS.
   This field is used when the physical address of the FACS is above 4GB.
   If the FIRMWARE_CTRL field contains a non zero value then this field
   must be zero.
   A zero value indicates that no FACS is specified by this field.
Thus the 32bit and 64bit firmware waking vector should indicate completely
different resuming environment - real mode (1MB addressable) and non real
mode (4GB+ addressable) and currently Linux only supports resuming from
real mode.

This patch enables 64-bit firmware waking vector for selected FACS via new
acpi_set_firmware_waking_vectors() API so that it's up to OSPMs to
determine which resuming mode should be used by BIOS and ACPICA changes
won't trigger the bugs caused by the root cause 1. Lv Zheng.

Link: https://bugzilla.kernel.org/show_bug.cgi?id=74021
Link: https://github.com/acpica/acpica/commit/7aa598d7
Reported-and-tested-by: Oswald Buddenhagen <ossi@kde.org>
Signed-off-by: Lv Zheng <lv.zheng@intel.com>
Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2015-07-01 23:17:52 +02:00
..
acapps.h ACPICA: Applications: Remove use of __DATE__ macro. 2015-04-14 14:51:52 +02:00
accommon.h ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
acdebug.h ACPICA: iASL/disassembler - fix possible fault for -e option. 2015-05-22 03:22:21 +02:00
acdispat.h ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
acevents.h ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
acglobal.h ACPICA: iASL/Disassembler: Add option to assume table contains valid AML. 2015-04-14 14:51:54 +02:00
achware.h ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
acinterp.h ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
aclocal.h ACPICA: acpi_help: Add option to display all known/supported ACPI tables. 2015-05-22 03:22:21 +02:00
acmacros.h ACPICA: Utilities: Cleanup to remove useless ACPI_PRINTF/FORMAT_xxx helpers. 2015-04-14 14:51:51 +02:00
acnamesp.h ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
acobject.h ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
acopcode.h ACPICA: Add infrastructure for External() opcode. 2015-04-14 14:51:54 +02:00
acparser.h ACPICA: Parser: Move a couple externals to the proper header. 2015-05-22 03:22:19 +02:00
acpredef.h ACPICA: ACPI 6.0: Add support for new predefined names. 2015-05-22 03:22:19 +02:00
acresrc.h ACPICA: Update Resource descriptor dump module. 2015-04-14 14:51:53 +02:00
acstruct.h ACPICA: iASL: Enhancement for constant folding. 2015-04-14 14:51:54 +02:00
actables.h ACPICA: Tables: Move an iasl specific table function to iasl source file. 2015-04-14 14:51:52 +02:00
acutils.h ACPICA: iASL: Enhance detection of non-ascii or corrupted input files. 2015-05-22 03:22:19 +02:00
amlcode.h ACPICA: Remove unused internal AML opcode. 2015-04-14 14:51:55 +02:00
amlresrc.h ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
dsargs.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
dscontrol.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
dsfield.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
dsinit.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
dsmethod.c ACPICA: Dispatcher: Fix a resource leak issue in acpi_ds_auto_serialize_method(). 2015-05-22 03:22:20 +02:00
dsmthdat.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
dsobject.c ACPICA: Linuxize: Reduce divergences for 20150616 release 2015-06-23 15:44:53 +02:00
dsopcode.c ACPICA: Utilities: Cleanup to remove useless ACPI_PRINTF/FORMAT_xxx helpers. 2015-04-14 14:51:51 +02:00
dsutils.c ACPICA: Add infrastructure for External() opcode. 2015-04-14 14:51:54 +02:00
dswexec.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
dswload2.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
dswload.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
dswscope.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
dswstate.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
evevent.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
evglock.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
evgpe.c ACPICA: Store GPE register enable masks upfront 2015-04-15 04:00:27 +02:00
evgpeblk.c ACPICA: Events: Introduce ACPI_GPE_DISPATCH_RAW_HANDLER to fix 2 issues for the current GPE APIs 2015-02-05 15:34:51 +01:00
evgpeinit.c ACPICA: Events: Introduce ACPI_GPE_DISPATCH_RAW_HANDLER to fix 2 issues for the current GPE APIs 2015-02-05 15:34:51 +01:00
evgpeutil.c ACPICA: Events: Introduce ACPI_GPE_DISPATCH_RAW_HANDLER to fix 2 issues for the current GPE APIs 2015-02-05 15:34:51 +01:00
evhandler.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
evmisc.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
evregion.c ACPICA: Utilities: Cleanup to remove useless ACPI_PRINTF/FORMAT_xxx helpers. 2015-04-14 14:51:51 +02:00
evrgnini.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
evsci.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
evxface.c ACPICA: Events: Introduce ACPI_GPE_DISPATCH_RAW_HANDLER to fix 2 issues for the current GPE APIs 2015-02-05 15:34:51 +01:00
evxfevnt.c ACPICA: Events: Add support to return both enable/status register values for GPE and fixed event. 2015-04-14 14:51:52 +02:00
evxfgpe.c ACPICA: Events: Enable APIs to allow interrupt/polling adaptive request based GPE handling model 2015-02-05 15:34:51 +01:00
evxfregn.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
exconfig.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
exconvrt.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
excreate.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
exdebug.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
exdump.c ACPICA: Utilities: Cleanup to remove useless ACPI_PRINTF/FORMAT_xxx helpers. 2015-04-14 14:51:51 +02:00
exfield.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
exfldio.c ACPICA: Utilities: Cleanup to convert physical address printing formats. 2015-04-14 14:51:51 +02:00
exmisc.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
exmutex.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
exnames.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
exoparg1.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
exoparg2.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
exoparg3.c ACPICA: Add infrastructure for External() opcode. 2015-04-14 14:51:54 +02:00
exoparg6.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
exprep.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
exregion.c ACPICA: Casting changes around acpi_physical_address/acpi_size. 2015-04-14 14:51:53 +02:00
exresnte.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
exresolv.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
exresop.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
exstore.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
exstoren.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
exstorob.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
exsystem.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
exutils.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
hwacpi.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
hwesleep.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
hwgpe.c ACPICA: Store GPE register enable masks upfront 2015-04-15 04:00:27 +02:00
hwpci.c ACPICA: Hardware: Fix a resource leak issue in acpi_hw_build_pci_list(). 2015-05-22 03:22:20 +02:00
hwregs.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
hwsleep.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
hwtimer.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
hwvalid.c ACPICA: Utilities: Cleanup to convert physical address printing formats. 2015-04-14 14:51:51 +02:00
hwxface.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
hwxfsleep.c ACPICA: Hardware: Enable 64-bit firmware waking vector for selected FACS 2015-07-01 23:17:52 +02:00
Makefile Merge branch 'acpica' 2014-08-05 22:50:12 +02:00
nsaccess.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
nsalloc.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
nsarguments.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
nsconvert.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
nsdump.c ACPICA: Utilities: Cleanup to remove useless ACPI_PRINTF/FORMAT_xxx helpers. 2015-04-14 14:51:51 +02:00
nsdumpdv.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
nseval.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
nsinit.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
nsload.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
nsnames.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
nsobject.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
nsparse.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
nspredef.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
nsprepkg.c ACPICA: ACPI 6.0: Add support for new predefined names. 2015-05-22 03:22:19 +02:00
nsrepair2.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
nsrepair.c ACPICA: ACPI 6.0: Add support for new predefined names. 2015-05-22 03:22:19 +02:00
nssearch.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
nsutils.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
nswalk.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
nsxfeval.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
nsxfname.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
nsxfobj.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
psargs.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
psloop.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
psobject.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
psopcode.c ACPICA: Add infrastructure for External() opcode. 2015-04-14 14:51:54 +02:00
psopinfo.c ACPICA: Parser: Move a couple externals to the proper header. 2015-05-22 03:22:19 +02:00
psparse.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
psscope.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
pstree.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
psutils.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
pswalk.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
psxface.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
rsaddr.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
rscalc.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
rscreate.c ACPICA: Linuxize: Reduce divergences for 20150616 release 2015-06-23 15:44:53 +02:00
rsdump.c ACPICA: Update Resource descriptor dump module. 2015-04-14 14:51:53 +02:00
rsdumpinfo.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
rsinfo.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
rsio.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
rsirq.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
rslist.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
rsmemory.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
rsmisc.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
rsserial.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
rsutils.c ACPICA: Linuxize: Reduce divergences for 20150616 release 2015-06-23 15:44:53 +02:00
rsxface.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
tbdata.c ACPICA: Tables: Move an iasl specific table function to iasl source file. 2015-04-14 14:51:52 +02:00
tbfadt.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
tbfind.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
tbinstal.c ACPICA: Tables: Move an iasl specific table function to iasl source file. 2015-04-14 14:51:52 +02:00
tbprint.c ACPICA: Utilities: Cleanup to remove useless ACPI_PRINTF/FORMAT_xxx helpers. 2015-04-14 14:51:51 +02:00
tbutils.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
tbxface.c ACPICA: Linuxize: Reduce divergences for 20150616 release 2015-06-23 15:44:53 +02:00
tbxfload.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
tbxfroot.c ACPICA: Tables: Change acpi_find_root_pointer() to use acpi_physical_address. 2015-04-14 14:51:50 +02:00
utaddress.c ACPICA: Utilities: Cleanup to convert physical address printing formats. 2015-04-14 14:51:51 +02:00
utalloc.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
utbuffer.c ACPICA: Add "//" before ascii output of buffers. 2015-04-14 14:51:55 +02:00
utcache.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
utcopy.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
utdebug.c ACPICA: Linuxize: Replace __FUNCTION__ with __func__ 2015-06-24 19:54:15 +02:00
utdecode.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
utdelete.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
uterror.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
uteval.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
utexcep.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
utfileio.c ACPICA: iASL/disassembler - fix possible fault for -e option. 2015-05-22 03:22:21 +02:00
utglobal.c Revert "ACPICA: Permanently set _REV to the value '2'." 2015-05-13 00:44:14 +02:00
uthex.c ACPICA: ACPI 6.0: Add support for NFIT table. 2015-05-22 03:22:21 +02:00
utids.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
utinit.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
utlock.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
utmath.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
utmisc.c ACPICA: Utilities: Correct conditional compilation definitions. 2015-04-14 14:51:52 +02:00
utmutex.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
utobject.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
utosi.c ACPICA: Add "Windows 2015" string to _OSI support. 2015-04-14 14:51:54 +02:00
utownerid.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
utpredef.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
utprint.c ACPICA: Fix a couple issues with the local printf module. 2015-04-14 14:51:56 +02:00
utresrc.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
utstate.c ACPICA: Utilities: Remove unused acpi_ut_create_pkg_state_and_push(). 2015-04-14 14:51:52 +02:00
utstring.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
uttrack.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
utuuid.c ACPICA: Utilities: Correct conditional compilation definitions. 2015-04-14 14:51:52 +02:00
utxface.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
utxferror.c ACPICA: iASL/disassembler - fix possible fault for -e option. 2015-05-22 03:22:21 +02:00
utxfinit.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00
utxfmutex.c ACPICA: Update Copyright headers to 2015 2015-02-05 15:31:43 +01:00