summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorJae Hyun Yoo <jae.hyun.yoo@intel.com>2021-08-13 01:40:54 +0300
committerJae Hyun Yoo <jae.hyun.yoo@linux.intel.com>2021-11-05 10:22:16 +0300
commit03c9dc78d1a70a5f747e348ce00dfd8a671b3744 (patch)
treec09ee4cf3215d59b1d77ea8052cc30cc7d65d849 /drivers
parentc7ed8aecff5c32d843d9cb2c92da9c1463e6144a (diff)
downloadlinux-03c9dc78d1a70a5f747e348ce00dfd8a671b3744.tar.xz
soc: aspeed: lpc-sio: add SMI event triggering support
Add SMI event triggering support. Signed-off-by: Jae Hyun Yoo <jae.hyun.yoo@intel.com> Change-Id: I711b5642a654e671a2d97d3079e3a1a055d400a0
Diffstat (limited to 'drivers')
-rw-r--r--drivers/soc/aspeed/aspeed-lpc-sio.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/drivers/soc/aspeed/aspeed-lpc-sio.c b/drivers/soc/aspeed/aspeed-lpc-sio.c
index eaac7752e41c..9bbaff83f968 100644
--- a/drivers/soc/aspeed/aspeed-lpc-sio.c
+++ b/drivers/soc/aspeed/aspeed-lpc-sio.c
@@ -47,6 +47,7 @@
#define LPC_ONCTL_EN_GPIO_OUTPUT BIT(13)
#define LPC_ONCTL_EN_GPIO_MODE BIT(12)
#define LPC_BMC_TRIG_WAKEUP_EVT BIT(6)
+#define LPC_BMC_TRIG_SMI_EVT_EN BIT(0)
#define AST_LPC_SWCR0F0C 0x0C
#define AST_LPC_SWCR1310 0x10
@@ -255,6 +256,34 @@ static void sio_set_bmc_sci_event(struct aspeed_lpc_sio *lpc_sio,
sio_data->data = sio_data->param;
}
+static void sio_set_bmc_smi_event(struct aspeed_lpc_sio *lpc_sio,
+ struct sio_ioctl_data *sio_data)
+{
+ u32 reg;
+
+ if (sio_data->param) {
+ reg = lpc_sio->reg_base + AST_LPC_SWCR0704;
+ regmap_write_bits(lpc_sio->regmap, reg,
+ LPC_BMC_TRIG_WAKEUP_EVT_EN,
+ LPC_BMC_TRIG_WAKEUP_EVT_EN);
+
+ reg = lpc_sio->reg_base + AST_LPC_SWCR0B08;
+ regmap_write_bits(lpc_sio->regmap, reg,
+ LPC_BMC_TRIG_SMI_EVT_EN,
+ LPC_BMC_TRIG_SMI_EVT_EN);
+ regmap_write_bits(lpc_sio->regmap, reg,
+ LPC_BMC_TRIG_WAKEUP_EVT,
+ LPC_BMC_TRIG_WAKEUP_EVT);
+ } else {
+ reg = lpc_sio->reg_base + AST_LPC_SWCR0300;
+ regmap_write_bits(lpc_sio->regmap, reg,
+ LPC_BMC_TRIG_WAKEUP_EVT_STS,
+ LPC_BMC_TRIG_WAKEUP_EVT_STS);
+ }
+
+ sio_data->data = sio_data->param;
+}
+
typedef void (*sio_cmd_fn) (struct aspeed_lpc_sio *sio_dev,
struct sio_ioctl_data *sio_data);
@@ -266,6 +295,7 @@ static sio_cmd_fn sio_cmd_handle[SIO_MAX_CMD] = {
[SIO_GET_PWRBTN_OVERRIDE] = sio_get_pwrbtn_override,
[SIO_GET_PFAIL_STATUS] = sio_get_pfail_status,
[SIO_SET_BMC_SCI_EVENT] = sio_set_bmc_sci_event,
+ [SIO_SET_BMC_SMI_EVENT] = sio_set_bmc_smi_event,
};
static long aspeed_lpc_sio_ioctl(struct file *file, unsigned int cmd,