mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Lv Zheng <lv.zheng@intel.com>
To: "Rafael J. Wysocki" <rafael.j.wysocki@intel.com>,
	Len Brown <len.brown@intel.com>
Cc: Lv Zheng <lv.zheng@intel.com>, Lv Zheng <zetalog@gmail.com>,
	<linux-kernel@vger.kernel.org>,
	linux-acpi@vger.kernel.org, Bob Moore <robert.moore@intel.com>
Subject: [PATCH 10/31] ACPICA: Events: Add support to return both enable/status register values for GPE and fixed event.
Date: Mon, 13 Apr 2015 11:49:13 +0800	[thread overview]
Message-ID: <314a606d644a9df232d55cd82bc4c2ca4e786d95.1428893937.git.lv.zheng@intel.com> (raw)
In-Reply-To: <cover.1428893935.git.lv.zheng@intel.com>

ACPICA commit e25d791e4b3d5b9f4ead298269610cb05f89749a

There is a facility in Linux, developers can obtain GPE and fixed event
status via /sys/firmware/interrupts/. This is implemented using
acpi_get_event_status() and acpi_get_gpe_status(). Recently while debugging some
GPE race issues, it is found that the facility is lacking in the ability to
obtain real hardware register values, the confusing information makes
debugging difficult.

This patch modifies acpi_get_gpe_status() to return EN register values to fix
this gap. Then flags returned from acpi_get_event_status() and
acpi_get_gpe_status() are also cleaned up to reflect this change.

The old ACPI_EVENT_FLAG_SET is carefully kept to avoid regressions. It can
be deleted after we can make sure all its references are removed from OSPM
code. Lv Zheng.

Link: https://github.com/acpica/acpica/commit/e25d791e
Signed-off-by: Lv Zheng <lv.zheng@intel.com>
Signed-off-by: Bob Moore <robert.moore@intel.com>
---
 drivers/acpi/acpica/evxfevnt.c |    5 +++--
 drivers/acpi/acpica/hwgpe.c    |   13 ++++++++++++-
 include/acpi/actypes.h         |   25 ++++++++++++++-----------
 3 files changed, 29 insertions(+), 14 deletions(-)

diff --git a/drivers/acpi/acpica/evxfevnt.c b/drivers/acpi/acpica/evxfevnt.c
index df06a23..faad911 100644
--- a/drivers/acpi/acpica/evxfevnt.c
+++ b/drivers/acpi/acpica/evxfevnt.c
@@ -356,7 +356,8 @@ acpi_status acpi_get_event_status(u32 event, acpi_event_status * event_status)
 	}
 
 	if (in_byte) {
-		local_event_status |= ACPI_EVENT_FLAG_ENABLED;
+		local_event_status |=
+		    (ACPI_EVENT_FLAG_ENABLED | ACPI_EVENT_FLAG_ENABLE_SET);
 	}
 
 	/* Fixed event currently active? */
@@ -369,7 +370,7 @@ acpi_status acpi_get_event_status(u32 event, acpi_event_status * event_status)
 	}
 
 	if (in_byte) {
-		local_event_status |= ACPI_EVENT_FLAG_SET;
+		local_event_status |= ACPI_EVENT_FLAG_STATUS_SET;
 	}
 
 	(*event_status) = local_event_status;
diff --git a/drivers/acpi/acpica/hwgpe.c b/drivers/acpi/acpica/hwgpe.c
index 84bc550..d7be3cb 100644
--- a/drivers/acpi/acpica/hwgpe.c
+++ b/drivers/acpi/acpica/hwgpe.c
@@ -250,6 +250,17 @@ acpi_hw_get_gpe_status(struct acpi_gpe_event_info * gpe_event_info,
 		local_event_status |= ACPI_EVENT_FLAG_WAKE_ENABLED;
 	}
 
+	/* GPE currently enabled (enable bit == 1)? */
+
+	status = acpi_hw_read(&in_byte, &gpe_register_info->enable_address);
+	if (ACPI_FAILURE(status)) {
+		return (status);
+	}
+
+	if (register_bit & in_byte) {
+		local_event_status |= ACPI_EVENT_FLAG_ENABLE_SET;
+	}
+
 	/* GPE currently active (status bit == 1)? */
 
 	status = acpi_hw_read(&in_byte, &gpe_register_info->status_address);
@@ -258,7 +269,7 @@ acpi_hw_get_gpe_status(struct acpi_gpe_event_info * gpe_event_info,
 	}
 
 	if (register_bit & in_byte) {
-		local_event_status |= ACPI_EVENT_FLAG_SET;
+		local_event_status |= ACPI_EVENT_FLAG_STATUS_SET;
 	}
 
 	/* Set return value */
diff --git a/include/acpi/actypes.h b/include/acpi/actypes.h
index 658c42e..f18b7a8 100644
--- a/include/acpi/actypes.h
+++ b/include/acpi/actypes.h
@@ -733,23 +733,26 @@ typedef u32 acpi_event_type;
  * The encoding of acpi_event_status is illustrated below.
  * Note that a set bit (1) indicates the property is TRUE
  * (e.g. if bit 0 is set then the event is enabled).
- * +-------------+-+-+-+-+
- * |   Bits 31:4 |3|2|1|0|
- * +-------------+-+-+-+-+
- *          |     | | | |
- *          |     | | | +- Enabled?
- *          |     | | +--- Enabled for wake?
- *          |     | +----- Set?
- *          |     +------- Has a handler?
- *          +------------- <Reserved>
+ * +-------------+-+-+-+-+-+
+ * |   Bits 31:5 |4|3|2|1|0|
+ * +-------------+-+-+-+-+-+
+ *          |     | | | | |
+ *          |     | | | | +- Enabled?
+ *          |     | | | +--- Enabled for wake?
+ *          |     | | +----- Status bit set?
+ *          |     | +------- Enable bit set?
+ *          |     +--------- Has a handler?
+ *          +--------------- <Reserved>
  */
 typedef u32 acpi_event_status;
 
 #define ACPI_EVENT_FLAG_DISABLED        (acpi_event_status) 0x00
 #define ACPI_EVENT_FLAG_ENABLED         (acpi_event_status) 0x01
 #define ACPI_EVENT_FLAG_WAKE_ENABLED    (acpi_event_status) 0x02
-#define ACPI_EVENT_FLAG_SET             (acpi_event_status) 0x04
-#define ACPI_EVENT_FLAG_HAS_HANDLER     (acpi_event_status) 0x08
+#define ACPI_EVENT_FLAG_STATUS_SET      (acpi_event_status) 0x04
+#define ACPI_EVENT_FLAG_ENABLE_SET      (acpi_event_status) 0x08
+#define ACPI_EVENT_FLAG_HAS_HANDLER     (acpi_event_status) 0x10
+#define ACPI_EVENT_FLAG_SET             ACPI_EVENT_FLAG_STATUS_SET
 
 /* Actions for acpi_set_gpe, acpi_gpe_wakeup, acpi_hw_low_set_gpe */
 
-- 
1.7.10


  parent reply	other threads:[~2015-04-13  3:54 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-04-13  3:48 [PATCH 00/31] ACPICA: 20150410 Release Lv Zheng
2015-04-13  3:48 ` [PATCH 01/31] ACPICA: Linuxize: Reduce divergences for 20150410 release Lv Zheng
2015-04-13  3:48 ` [PATCH 02/31] ACPICA: Tables: Change acpi_find_root_pointer() to use acpi_physical_address Lv Zheng
2015-04-13  3:48 ` [PATCH 03/31] ACPICA: Unix: Cleanup to use ACPI_TO_INTEGER() to calc page offset Lv Zheng
2015-04-13  3:48 ` [PATCH 04/31] ACPICA: Executer: Cleanup to remove an unnecessary conversion Lv Zheng
2015-04-13  3:48 ` [PATCH 05/31] ACPICA: Utilities: Cleanup to enforce ACPI_PHYSADDR_TO_PTR()/ACPI_PTR_TO_PHYSADDR() Lv Zheng
2015-04-13  3:48 ` [PATCH 06/31] ACPICA: Utilities: Cleanup to convert physical address printing formats Lv Zheng
2015-04-13  3:48 ` [PATCH 07/31] ACPICA: Utilities: Cleanup to remove useless ACPI_PRINTF/FORMAT_xxx helpers Lv Zheng
2015-04-13  3:48 ` [PATCH 08/31] ACPICA: Utilities: split IO address types from data type models Lv Zheng
2015-04-13  3:49 ` [PATCH 09/31] ACPICA: Tables: Don't release ACPI_MTX_TABLES in acpi_tb_install_standard_table() Lv Zheng
2015-04-13  3:49 ` Lv Zheng [this message]
2015-04-13  3:49 ` [PATCH 11/31] ACPICA: Applications: Remove use of __DATE__ macro Lv Zheng
2015-04-13  3:49 ` [PATCH 12/31] ACPICA: Utilities: Remove unused acpi_ut_create_pkg_state_and_push() Lv Zheng
2015-04-13  3:49 ` [PATCH 13/31] ACPICA: Tables: Move an iasl specific table function to iasl source file Lv Zheng
2015-04-13  3:49 ` [PATCH 14/31] ACPICA: Utilities: Correct conditional compilation definitions Lv Zheng
2015-04-13  3:49 ` [PATCH 15/31] ACPICA: Resources: " Lv Zheng
2015-04-13  3:49 ` [PATCH 16/31] ACPICA: Casting changes around acpi_physical_address/acpi_size Lv Zheng
2015-04-13  3:50 ` [PATCH 17/31] ACPICA: Fix a sscanf format string Lv Zheng
2015-04-13  3:50 ` [PATCH 18/31] ACPICA: Update Resource descriptor dump module Lv Zheng
2015-04-13  3:50 ` [PATCH 19/31] ACPICA: Update AML Debugger global variables Lv Zheng
2015-04-13  3:50 ` [PATCH 20/31] ACPICA: iASL/Disassembler: Add option to assume table contains valid AML Lv Zheng
2015-04-13  3:50 ` [PATCH 21/31] ACPICA: iASL: Enhancement for constant folding Lv Zheng
2015-04-13  3:50 ` [PATCH 22/31] ACPICA: Add infrastructure for External() opcode Lv Zheng
2015-04-13  3:50 ` [PATCH 23/31] ACPICA: Add "Windows 2015" string to _OSI support Lv Zheng
2015-04-13  3:50 ` [PATCH 24/31] ACPICA: Permanently set _REV to the value '2' Lv Zheng
2015-04-13  3:50 ` [PATCH 25/31] ACPICA: Remove unused internal AML opcode Lv Zheng
2015-04-13  3:50 ` [PATCH 26/31] ACPICA: Add "//" before ascii output of buffers Lv Zheng
2015-04-13  3:51 ` [PATCH 27/31] ACPICA: Update for SLIC ACPI table Lv Zheng
2015-04-13  3:51 ` [PATCH 28/31] ACPICA: iASL: Add support for MSDM " Lv Zheng
2015-04-13  3:51 ` [PATCH 29/31] ACPICA: Disassembler: Some cleanup of the table dump module Lv Zheng
2015-04-13  3:51 ` [PATCH 30/31] ACPICA: Fix a couple issues with the local printf module Lv Zheng
2015-04-13  3:51 ` [PATCH 31/31] ACPICA: Update version to 20150410 Lv Zheng

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=314a606d644a9df232d55cd82bc4c2ca4e786d95.1428893937.git.lv.zheng@intel.com \
    --to=lv.zheng@intel.com \
    --cc=len.brown@intel.com \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rafael.j.wysocki@intel.com \
    --cc=robert.moore@intel.com \
    --cc=zetalog@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®