diff options
author | Jae Hyun Yoo <jae.hyun.yoo@intel.com> | 2021-08-13 01:40:54 +0300 |
---|---|---|
committer | Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com> | 2021-11-05 10:22:16 +0300 |
commit | 03c9dc78d1a70a5f747e348ce00dfd8a671b3744 (patch) | |
tree | c09ee4cf3215d59b1d77ea8052cc30cc7d65d849 /drivers | |
parent | c7ed8aecff5c32d843d9cb2c92da9c1463e6144a (diff) | |
download | linux-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.c | 30 |
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, |