summaryrefslogtreecommitdiff
path: root/drivers/platform/x86/intel/pmt/crashlog.c
diff options
context:
space:
mode:
authorMichael J. Ruhl <michael.j.ruhl@intel.com>2025-07-13 13:29:40 -0400
committerIlpo Järvinen <ilpo.jarvinen@linux.intel.com>2025-07-22 17:39:06 +0300
commitf57b32cb4adb28b62f61c4729f7b85f55518cb2b (patch)
tree5814b93b87b603ea3a9f50f4cbe4a4fed7906c6e /drivers/platform/x86/intel/pmt/crashlog.c
parent8ab4f88d46c70bade0633b56a0f03e20102bf10c (diff)
platform/x86/intel/pmt: add register access helpers
The control register is used in a read/modify/write pattern. The status register is used in a read/check bit pattern. Add helpers to eliminate common code. Signed-off-by: Michael J. Ruhl <michael.j.ruhl@intel.com> Link: https://lore.kernel.org/r/20250713172943.7335-11-michael.j.ruhl@intel.com Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Diffstat (limited to 'drivers/platform/x86/intel/pmt/crashlog.c')
-rw-r--r--drivers/platform/x86/intel/pmt/crashlog.c58
1 files changed, 29 insertions, 29 deletions
diff --git a/drivers/platform/x86/intel/pmt/crashlog.c b/drivers/platform/x86/intel/pmt/crashlog.c
index 23b3971da40ac..ed781548e59d2 100644
--- a/drivers/platform/x86/intel/pmt/crashlog.c
+++ b/drivers/platform/x86/intel/pmt/crashlog.c
@@ -64,20 +64,40 @@ struct pmt_crashlog_priv {
/*
* I/O
*/
-static bool pmt_crashlog_complete(struct intel_pmt_entry *entry)
+
+/* Read, modify, write the control register, setting or clearing @bit based on @set */
+static void pmt_crashlog_rmw(struct intel_pmt_entry *entry, u32 bit, bool set)
{
- u32 control = readl(entry->disc_table + CONTROL_OFFSET);
+ u32 reg = readl(entry->disc_table + CONTROL_OFFSET);
+
+ reg &= ~CRASHLOG_FLAG_TRIGGER_MASK;
+
+ if (set)
+ reg |= bit;
+ else
+ reg &= ~bit;
+
+ writel(reg, entry->disc_table + CONTROL_OFFSET);
+}
+
+/* Read the status register and see if the specified @bit is set */
+static bool pmt_crashlog_rc(struct intel_pmt_entry *entry, u32 bit)
+{
+ u32 reg = readl(entry->disc_table + CONTROL_OFFSET);
+
+ return !!(reg & bit);
+}
+static bool pmt_crashlog_complete(struct intel_pmt_entry *entry)
+{
/* return current value of the crashlog complete flag */
- return !!(control & CRASHLOG_FLAG_TRIGGER_COMPLETE);
+ return pmt_crashlog_rc(entry, CRASHLOG_FLAG_TRIGGER_COMPLETE);
}
static bool pmt_crashlog_disabled(struct intel_pmt_entry *entry)
{
- u32 control = readl(entry->disc_table + CONTROL_OFFSET);
-
/* return current value of the crashlog disabled flag */
- return !!(control & CRASHLOG_FLAG_DISABLE);
+ return pmt_crashlog_rc(entry, CRASHLOG_FLAG_DISABLE);
}
static bool pmt_crashlog_supported(struct intel_pmt_entry *entry)
@@ -98,37 +118,17 @@ static bool pmt_crashlog_supported(struct intel_pmt_entry *entry)
static void pmt_crashlog_set_disable(struct intel_pmt_entry *entry,
bool disable)
{
- u32 control = readl(entry->disc_table + CONTROL_OFFSET);
-
- /* clear trigger bits so we are only modifying disable flag */
- control &= ~CRASHLOG_FLAG_TRIGGER_MASK;
-
- if (disable)
- control |= CRASHLOG_FLAG_DISABLE;
- else
- control &= ~CRASHLOG_FLAG_DISABLE;
-
- writel(control, entry->disc_table + CONTROL_OFFSET);
+ pmt_crashlog_rmw(entry, CRASHLOG_FLAG_DISABLE, disable);
}
static void pmt_crashlog_set_clear(struct intel_pmt_entry *entry)
{
- u32 control = readl(entry->disc_table + CONTROL_OFFSET);
-
- control &= ~CRASHLOG_FLAG_TRIGGER_MASK;
- control |= CRASHLOG_FLAG_TRIGGER_CLEAR;
-
- writel(control, entry->disc_table + CONTROL_OFFSET);
+ pmt_crashlog_rmw(entry, CRASHLOG_FLAG_TRIGGER_CLEAR, true);
}
static void pmt_crashlog_set_execute(struct intel_pmt_entry *entry)
{
- u32 control = readl(entry->disc_table + CONTROL_OFFSET);
-
- control &= ~CRASHLOG_FLAG_TRIGGER_MASK;
- control |= CRASHLOG_FLAG_TRIGGER_EXECUTE;
-
- writel(control, entry->disc_table + CONTROL_OFFSET);
+ pmt_crashlog_rmw(entry, CRASHLOG_FLAG_TRIGGER_EXECUTE, true);
}
/*