mlxbf-bootctl: Support sysfs entries for RTC battery status
This patch extends the mlxbf-bootctl driver's sysfs entries to support read access for the board's RTC battery status. A successful read from this attribute returns the status of the board's RTC battery. The RTC battery status register is also cleared upon successful read operation. Signed-off-by: Xiangrong Li <xiangrongl@nvidia.com> Reviewed-by: David Thompson <davthompson@nvidia.com> Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> Link: https://lore.kernel.org/r/20250124144655.48564-1-xiangrongl@nvidia.com Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
This commit is contained in:
committed by
Ilpo Järvinen
parent
2014c95afe
commit
5d40a85775
@@ -150,3 +150,13 @@ Description:
|
|||||||
The "mfg_lock" sysfs attribute is write-only.
|
The "mfg_lock" sysfs attribute is write-only.
|
||||||
A successful write to this attribute will latch the
|
A successful write to this attribute will latch the
|
||||||
board-level attributes into EEPROM, making them read-only.
|
board-level attributes into EEPROM, making them read-only.
|
||||||
|
|
||||||
|
What: /sys/bus/platform/devices/MLNXBF04:00/rtc_battery
|
||||||
|
Date: June 2025
|
||||||
|
KernelVersion: 6.15
|
||||||
|
Contact: "Xiangrong Li <xiangrongl@nvidia.com>"
|
||||||
|
Description:
|
||||||
|
The "rtc_battery" sysfs attribute is read-only.
|
||||||
|
A successful read from this attribute returns the status of
|
||||||
|
the board's RTC battery. The RTC battery status register is
|
||||||
|
also cleared upon successful read operation.
|
||||||
|
|||||||
@@ -91,6 +91,7 @@ static const char * const mlxbf_rsh_log_level[] = {
|
|||||||
static DEFINE_MUTEX(icm_ops_lock);
|
static DEFINE_MUTEX(icm_ops_lock);
|
||||||
static DEFINE_MUTEX(os_up_lock);
|
static DEFINE_MUTEX(os_up_lock);
|
||||||
static DEFINE_MUTEX(mfg_ops_lock);
|
static DEFINE_MUTEX(mfg_ops_lock);
|
||||||
|
static DEFINE_MUTEX(rtc_ops_lock);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Objects are stored within the MFG partition per type.
|
* Objects are stored within the MFG partition per type.
|
||||||
@@ -489,6 +490,23 @@ static ssize_t large_icm_store(struct device *dev,
|
|||||||
return res.a0 ? -EPERM : count;
|
return res.a0 ? -EPERM : count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ssize_t rtc_battery_show(struct device *dev,
|
||||||
|
struct device_attribute *attr,
|
||||||
|
char *buf)
|
||||||
|
{
|
||||||
|
struct arm_smccc_res res;
|
||||||
|
|
||||||
|
mutex_lock(&rtc_ops_lock);
|
||||||
|
arm_smccc_smc(MLNX_HANDLE_GET_RTC_LOW_BATT, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, &res);
|
||||||
|
mutex_unlock(&rtc_ops_lock);
|
||||||
|
|
||||||
|
if (res.a0)
|
||||||
|
return -EPERM;
|
||||||
|
|
||||||
|
return sysfs_emit(buf, "0x%lx\n", res.a1);
|
||||||
|
}
|
||||||
|
|
||||||
static ssize_t os_up_store(struct device *dev,
|
static ssize_t os_up_store(struct device *dev,
|
||||||
struct device_attribute *attr,
|
struct device_attribute *attr,
|
||||||
const char *buf, size_t count)
|
const char *buf, size_t count)
|
||||||
@@ -906,6 +924,7 @@ static DEVICE_ATTR_RW(sn);
|
|||||||
static DEVICE_ATTR_RW(uuid);
|
static DEVICE_ATTR_RW(uuid);
|
||||||
static DEVICE_ATTR_RW(rev);
|
static DEVICE_ATTR_RW(rev);
|
||||||
static DEVICE_ATTR_WO(mfg_lock);
|
static DEVICE_ATTR_WO(mfg_lock);
|
||||||
|
static DEVICE_ATTR_RO(rtc_battery);
|
||||||
|
|
||||||
static struct attribute *mlxbf_bootctl_attrs[] = {
|
static struct attribute *mlxbf_bootctl_attrs[] = {
|
||||||
&dev_attr_post_reset_wdog.attr,
|
&dev_attr_post_reset_wdog.attr,
|
||||||
@@ -925,6 +944,7 @@ static struct attribute *mlxbf_bootctl_attrs[] = {
|
|||||||
&dev_attr_uuid.attr,
|
&dev_attr_uuid.attr,
|
||||||
&dev_attr_rev.attr,
|
&dev_attr_rev.attr,
|
||||||
&dev_attr_mfg_lock.attr,
|
&dev_attr_mfg_lock.attr,
|
||||||
|
&dev_attr_rtc_battery.attr,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -103,6 +103,11 @@
|
|||||||
*/
|
*/
|
||||||
#define MLNX_HANDLE_OS_UP 0x82000014
|
#define MLNX_HANDLE_OS_UP 0x82000014
|
||||||
|
|
||||||
|
/*
|
||||||
|
* SMC function ID to get and clear the RTC low voltage bit
|
||||||
|
*/
|
||||||
|
#define MLNX_HANDLE_GET_RTC_LOW_BATT 0x82000023
|
||||||
|
|
||||||
/* SMC function IDs for SiP Service queries */
|
/* SMC function IDs for SiP Service queries */
|
||||||
#define MLXBF_BOOTCTL_SIP_SVC_CALL_COUNT 0x8200ff00
|
#define MLXBF_BOOTCTL_SIP_SVC_CALL_COUNT 0x8200ff00
|
||||||
#define MLXBF_BOOTCTL_SIP_SVC_UID 0x8200ff01
|
#define MLXBF_BOOTCTL_SIP_SVC_UID 0x8200ff01
|
||||||
|
|||||||
Reference in New Issue
Block a user