platform/x86/intel/pmt: refactor base parameter
To support an upcoming crashlog change, use the parent of struct intel_pmt_entry, struct crashlog_entry, as a main parameter. Using struct crashlog_entry will allow for a more flexible interface to control the crashlog feature. - Refactor to use struct crashlog_entry in place of struct intel_pmt_entry - Rename variables from "entry" to "crashlog" Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> Signed-off-by: Michael J. Ruhl <michael.j.ruhl@intel.com> Link: https://lore.kernel.org/r/20250713172943.7335-12-michael.j.ruhl@intel.com Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
This commit is contained in:
@@ -66,8 +66,9 @@ struct pmt_crashlog_priv {
|
||||
*/
|
||||
|
||||
/* 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)
|
||||
static void pmt_crashlog_rmw(struct crashlog_entry *crashlog, u32 bit, bool set)
|
||||
{
|
||||
struct intel_pmt_entry *entry = &crashlog->entry;
|
||||
u32 reg = readl(entry->disc_table + CONTROL_OFFSET);
|
||||
|
||||
reg &= ~CRASHLOG_FLAG_TRIGGER_MASK;
|
||||
@@ -81,23 +82,24 @@ static void pmt_crashlog_rmw(struct intel_pmt_entry *entry, u32 bit, bool set)
|
||||
}
|
||||
|
||||
/* Read the status register and see if the specified @bit is set */
|
||||
static bool pmt_crashlog_rc(struct intel_pmt_entry *entry, u32 bit)
|
||||
static bool pmt_crashlog_rc(struct crashlog_entry *crashlog, u32 bit)
|
||||
{
|
||||
struct intel_pmt_entry *entry = &crashlog->entry;
|
||||
u32 reg = readl(entry->disc_table + CONTROL_OFFSET);
|
||||
|
||||
return !!(reg & bit);
|
||||
}
|
||||
|
||||
static bool pmt_crashlog_complete(struct intel_pmt_entry *entry)
|
||||
static bool pmt_crashlog_complete(struct crashlog_entry *crashlog)
|
||||
{
|
||||
/* return current value of the crashlog complete flag */
|
||||
return pmt_crashlog_rc(entry, CRASHLOG_FLAG_TRIGGER_COMPLETE);
|
||||
return pmt_crashlog_rc(crashlog, CRASHLOG_FLAG_TRIGGER_COMPLETE);
|
||||
}
|
||||
|
||||
static bool pmt_crashlog_disabled(struct intel_pmt_entry *entry)
|
||||
static bool pmt_crashlog_disabled(struct crashlog_entry *crashlog)
|
||||
{
|
||||
/* return current value of the crashlog disabled flag */
|
||||
return pmt_crashlog_rc(entry, CRASHLOG_FLAG_DISABLE);
|
||||
return pmt_crashlog_rc(crashlog, CRASHLOG_FLAG_DISABLE);
|
||||
}
|
||||
|
||||
static bool pmt_crashlog_supported(struct intel_pmt_entry *entry)
|
||||
@@ -115,20 +117,20 @@ static bool pmt_crashlog_supported(struct intel_pmt_entry *entry)
|
||||
return crash_type == CRASH_TYPE_OOBMSM && version == 0;
|
||||
}
|
||||
|
||||
static void pmt_crashlog_set_disable(struct intel_pmt_entry *entry,
|
||||
static void pmt_crashlog_set_disable(struct crashlog_entry *crashlog,
|
||||
bool disable)
|
||||
{
|
||||
pmt_crashlog_rmw(entry, CRASHLOG_FLAG_DISABLE, disable);
|
||||
pmt_crashlog_rmw(crashlog, CRASHLOG_FLAG_DISABLE, disable);
|
||||
}
|
||||
|
||||
static void pmt_crashlog_set_clear(struct intel_pmt_entry *entry)
|
||||
static void pmt_crashlog_set_clear(struct crashlog_entry *crashlog)
|
||||
{
|
||||
pmt_crashlog_rmw(entry, CRASHLOG_FLAG_TRIGGER_CLEAR, true);
|
||||
pmt_crashlog_rmw(crashlog, CRASHLOG_FLAG_TRIGGER_CLEAR, true);
|
||||
}
|
||||
|
||||
static void pmt_crashlog_set_execute(struct intel_pmt_entry *entry)
|
||||
static void pmt_crashlog_set_execute(struct crashlog_entry *crashlog)
|
||||
{
|
||||
pmt_crashlog_rmw(entry, CRASHLOG_FLAG_TRIGGER_EXECUTE, true);
|
||||
pmt_crashlog_rmw(crashlog, CRASHLOG_FLAG_TRIGGER_EXECUTE, true);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -137,8 +139,8 @@ static void pmt_crashlog_set_execute(struct intel_pmt_entry *entry)
|
||||
static ssize_t
|
||||
enable_show(struct device *dev, struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct intel_pmt_entry *entry = dev_get_drvdata(dev);
|
||||
bool enabled = !pmt_crashlog_disabled(entry);
|
||||
struct crashlog_entry *crashlog = dev_get_drvdata(dev);
|
||||
bool enabled = !pmt_crashlog_disabled(crashlog);
|
||||
|
||||
return sprintf(buf, "%d\n", enabled);
|
||||
}
|
||||
@@ -147,19 +149,19 @@ static ssize_t
|
||||
enable_store(struct device *dev, struct device_attribute *attr,
|
||||
const char *buf, size_t count)
|
||||
{
|
||||
struct crashlog_entry *entry;
|
||||
struct crashlog_entry *crashlog;
|
||||
bool enabled;
|
||||
int result;
|
||||
|
||||
entry = dev_get_drvdata(dev);
|
||||
crashlog = dev_get_drvdata(dev);
|
||||
|
||||
result = kstrtobool(buf, &enabled);
|
||||
if (result)
|
||||
return result;
|
||||
|
||||
guard(mutex)(&entry->control_mutex);
|
||||
guard(mutex)(&crashlog->control_mutex);
|
||||
|
||||
pmt_crashlog_set_disable(&entry->entry, !enabled);
|
||||
pmt_crashlog_set_disable(crashlog, !enabled);
|
||||
|
||||
return count;
|
||||
}
|
||||
@@ -168,11 +170,11 @@ static DEVICE_ATTR_RW(enable);
|
||||
static ssize_t
|
||||
trigger_show(struct device *dev, struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct intel_pmt_entry *entry;
|
||||
struct crashlog_entry *crashlog;
|
||||
bool trigger;
|
||||
|
||||
entry = dev_get_drvdata(dev);
|
||||
trigger = pmt_crashlog_complete(entry);
|
||||
crashlog = dev_get_drvdata(dev);
|
||||
trigger = pmt_crashlog_complete(crashlog);
|
||||
|
||||
return sprintf(buf, "%d\n", trigger);
|
||||
}
|
||||
@@ -181,32 +183,32 @@ static ssize_t
|
||||
trigger_store(struct device *dev, struct device_attribute *attr,
|
||||
const char *buf, size_t count)
|
||||
{
|
||||
struct crashlog_entry *entry;
|
||||
struct crashlog_entry *crashlog;
|
||||
bool trigger;
|
||||
int result;
|
||||
|
||||
entry = dev_get_drvdata(dev);
|
||||
crashlog = dev_get_drvdata(dev);
|
||||
|
||||
result = kstrtobool(buf, &trigger);
|
||||
if (result)
|
||||
return result;
|
||||
|
||||
guard(mutex)(&entry->control_mutex);
|
||||
guard(mutex)(&crashlog->control_mutex);
|
||||
|
||||
/* if device is currently disabled, return busy */
|
||||
if (pmt_crashlog_disabled(&entry->entry))
|
||||
if (pmt_crashlog_disabled(crashlog))
|
||||
return -EBUSY;
|
||||
|
||||
if (!trigger) {
|
||||
pmt_crashlog_set_clear(&entry->entry);
|
||||
pmt_crashlog_set_clear(crashlog);
|
||||
return count;
|
||||
}
|
||||
|
||||
/* we cannot trigger a new crash if one is still pending */
|
||||
if (pmt_crashlog_complete(&entry->entry))
|
||||
if (pmt_crashlog_complete(crashlog))
|
||||
return -EEXIST;
|
||||
|
||||
pmt_crashlog_set_execute(&entry->entry);
|
||||
pmt_crashlog_set_execute(crashlog);
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user