Lines Matching refs:sev

29 #include "sev-dev.h"
31 #define DEVICE_NAME "sev"
32 #define SEV_FW_FILE "amd/sev.fw"
63 struct sev_device *sev = psp_master->sev_data;
65 if (sev->api_major > maj)
68 if (sev->api_major == maj && sev->api_minor >= min)
76 struct sev_device *sev = data;
84 reg = ioread32(sev->io_regs + sev->vdata->cmdresp_reg);
86 sev->int_rcvd = 1;
87 wake_up(&sev->int_queue);
91 static int sev_wait_cmd_ioc(struct sev_device *sev,
96 ret = wait_event_timeout(sev->int_queue,
97 sev->int_rcvd, timeout * HZ);
101 *reg = ioread32(sev->io_regs + sev->vdata->cmdresp_reg);
156 struct sev_device *sev;
167 sev = psp->sev_data;
179 memcpy(sev->cmd_buf, data, buf_len);
182 phys_lsb = data ? lower_32_bits(__psp_pa(sev->cmd_buf)) : 0;
183 phys_msb = data ? upper_32_bits(__psp_pa(sev->cmd_buf)) : 0;
185 dev_dbg(sev->dev, "sev command id %#x buffer 0x%08x%08x timeout %us\n",
191 iowrite32(phys_lsb, sev->io_regs + sev->vdata->cmdbuff_addr_lo_reg);
192 iowrite32(phys_msb, sev->io_regs + sev->vdata->cmdbuff_addr_hi_reg);
194 sev->int_rcvd = 0;
199 iowrite32(reg, sev->io_regs + sev->vdata->cmdresp_reg);
202 ret = sev_wait_cmd_ioc(sev, &reg, psp_timeout);
207 dev_err(sev->dev, "sev command %#x timed out, disabling PSP\n", cmd);
219 dev_dbg(sev->dev, "sev command %#x failed (%#010x)\n",
232 memcpy(data, sev->cmd_buf, buf_len);
251 struct sev_device *sev;
257 sev = psp->sev_data;
259 if (sev->state == SEV_STATE_INIT)
271 sev->init_cmd_buf.flags |= SEV_INIT_FLAGS_SEV_ES;
272 sev->init_cmd_buf.tmr_address = tmr_pa;
273 sev->init_cmd_buf.tmr_len = SEV_ES_TMR_SIZE;
276 rc = __sev_do_cmd_locked(SEV_CMD_INIT, &sev->init_cmd_buf, error);
280 sev->state = SEV_STATE_INIT;
288 dev_dbg(sev->dev, "SEV firmware initialized\n");
308 struct sev_device *sev;
314 sev = psp->sev_data;
316 if (sev->state == SEV_STATE_UNINIT)
323 sev->state = SEV_STATE_UNINIT;
324 dev_dbg(sev->dev, "SEV firmware shutdown\n");
404 struct sev_device *sev = psp_master->sev_data;
410 if (sev->state == SEV_STATE_UNINIT) {
421 struct sev_device *sev = psp_master->sev_data;
453 if (sev->state == SEV_STATE_UNINIT) {
494 struct sev_device *sev = psp_master->sev_data;
500 dev_err(sev->dev,
505 sev->api_major = status.api_major;
506 sev->api_minor = status.api_minor;
507 sev->build = status.build;
508 sev->state = status.state;
538 * Fall-back to using generic name: sev.fw
604 struct sev_device *sev = psp_master->sev_data;
636 if (sev->state != SEV_STATE_INIT) {
755 struct sev_device *sev = psp_master->sev_data;
764 if (sev->state != SEV_STATE_INIT) {
950 static int sev_misc_init(struct sev_device *sev)
952 struct device *dev = sev->dev;
958 * know the master hence we create /dev/sev on the first device probe.
983 init_waitqueue_head(&sev->int_queue);
984 sev->misc = misc_dev;
993 struct sev_device *sev;
996 sev = devm_kzalloc(dev, sizeof(*sev), GFP_KERNEL);
997 if (!sev)
1000 sev->cmd_buf = (void *)devm_get_free_pages(dev, GFP_KERNEL, 0);
1001 if (!sev->cmd_buf)
1004 psp->sev_data = sev;
1006 sev->dev = dev;
1007 sev->psp = psp;
1009 sev->io_regs = psp->io_regs;
1011 sev->vdata = (struct sev_vdata *)psp->vdata->sev;
1012 if (!sev->vdata) {
1014 dev_err(dev, "sev: missing driver data\n");
1018 psp_set_sev_irq_handler(psp, sev_irq_handler, sev);
1020 ret = sev_misc_init(sev);
1024 dev_notice(dev, "sev enabled\n");
1031 devm_free_pages(dev, (unsigned long)sev->cmd_buf);
1033 devm_kfree(dev, sev);
1037 dev_notice(dev, "sev initialization failed\n");
1042 static void sev_firmware_shutdown(struct sev_device *sev)
1058 struct sev_device *sev = psp->sev_data;
1060 if (!sev)
1063 sev_firmware_shutdown(sev);
1065 if (sev->misc)
1083 struct sev_device *sev = psp_master->sev_data;
1086 if (!sev)
1095 sev_update_firmware(sev->dev) == 0)
1104 dev_warn(sev->dev,
1117 dev_dbg(sev->dev, "SEV: retrying INIT command");
1122 dev_err(sev->dev, "SEV: failed to INIT error %#x\n", error);
1126 dev_info(sev->dev, "SEV API:%d.%d build:%d\n", sev->api_major,
1127 sev->api_minor, sev->build);
1137 struct sev_device *sev = psp_master->sev_data;
1139 if (!sev)
1142 sev_firmware_shutdown(sev);