Lines Matching refs:sev
34 #include "sev-dev.h"
36 #define DEVICE_NAME "sev"
37 #define SEV_FW_FILE "amd/sev.fw"
85 struct sev_device *sev = psp_master->sev_data;
87 if (sev->api_major > maj)
90 if (sev->api_major == maj && sev->api_minor >= min)
98 struct sev_device *sev = data;
106 reg = ioread32(sev->io_regs + sev->vdata->cmdresp_reg);
108 sev->int_rcvd = 1;
109 wake_up(&sev->int_queue);
113 static int sev_wait_cmd_ioc(struct sev_device *sev,
118 ret = wait_event_timeout(sev->int_queue,
119 sev->int_rcvd, timeout * HZ);
123 *reg = ioread32(sev->io_regs + sev->vdata->cmdresp_reg);
205 struct sev_device *sev = psp_master->sev_data;
219 dev_info(sev->dev,
224 dev_err(sev->dev,
233 dev_info(sev->dev,
238 dev_dbg(sev->dev, "SEV: read %ld bytes from NV file\n", nread);
246 struct sev_device *sev = psp_master->sev_data;
260 dev_err(sev->dev,
271 dev_err(sev->dev,
277 dev_dbg(sev->dev, "SEV: write successful to NV file\n");
311 struct sev_device *sev;
322 sev = psp->sev_data;
334 memcpy(sev->cmd_buf, data, buf_len);
337 phys_lsb = data ? lower_32_bits(__psp_pa(sev->cmd_buf)) : 0;
338 phys_msb = data ? upper_32_bits(__psp_pa(sev->cmd_buf)) : 0;
340 dev_dbg(sev->dev, "sev command id %#x buffer 0x%08x%08x timeout %us\n",
346 iowrite32(phys_lsb, sev->io_regs + sev->vdata->cmdbuff_addr_lo_reg);
347 iowrite32(phys_msb, sev->io_regs + sev->vdata->cmdbuff_addr_hi_reg);
349 sev->int_rcvd = 0;
352 iowrite32(reg, sev->io_regs + sev->vdata->cmdresp_reg);
355 ret = sev_wait_cmd_ioc(sev, ®, psp_timeout);
360 dev_err(sev->dev, "sev command %#x timed out, disabling PSP\n", cmd);
372 dev_dbg(sev->dev, "sev command %#x failed (%#010lx)\n",
387 memcpy(data, sev->cmd_buf, buf_len);
457 struct sev_device *sev;
462 sev = psp->sev_data;
464 if (sev->state == SEV_STATE_INIT)
482 dev_err(sev->dev,
493 sev->state = SEV_STATE_INIT;
501 dev_dbg(sev->dev, "SEV firmware initialized\n");
503 dev_info(sev->dev, "SEV API:%d.%d build:%d\n", sev->api_major,
504 sev->api_minor, sev->build);
524 struct sev_device *sev;
530 sev = psp->sev_data;
532 if (sev->state == SEV_STATE_UNINIT)
539 sev->state = SEV_STATE_UNINIT;
540 dev_dbg(sev->dev, "SEV firmware shutdown\n");
620 struct sev_device *sev = psp_master->sev_data;
626 if (sev->state == SEV_STATE_UNINIT) {
637 struct sev_device *sev = psp_master->sev_data;
669 if (sev->state == SEV_STATE_UNINIT) {
710 struct sev_device *sev = psp_master->sev_data;
716 dev_err(sev->dev,
721 sev->api_major = status.api_major;
722 sev->api_minor = status.api_minor;
723 sev->build = status.build;
724 sev->state = status.state;
754 * Fall-back to using generic name: sev.fw
833 struct sev_device *sev = psp_master->sev_data;
865 if (sev->state != SEV_STATE_INIT) {
984 struct sev_device *sev = psp_master->sev_data;
993 if (sev->state != SEV_STATE_INIT) {
1179 static int sev_misc_init(struct sev_device *sev)
1181 struct device *dev = sev->dev;
1187 * know the master hence we create /dev/sev on the first device probe.
1212 init_waitqueue_head(&sev->int_queue);
1213 sev->misc = misc_dev;
1222 struct sev_device *sev;
1230 sev = devm_kzalloc(dev, sizeof(*sev), GFP_KERNEL);
1231 if (!sev)
1234 sev->cmd_buf = (void *)devm_get_free_pages(dev, GFP_KERNEL, 0);
1235 if (!sev->cmd_buf)
1238 psp->sev_data = sev;
1240 sev->dev = dev;
1241 sev->psp = psp;
1243 sev->io_regs = psp->io_regs;
1245 sev->vdata = (struct sev_vdata *)psp->vdata->sev;
1246 if (!sev->vdata) {
1248 dev_err(dev, "sev: missing driver data\n");
1252 psp_set_sev_irq_handler(psp, sev_irq_handler, sev);
1254 ret = sev_misc_init(sev);
1258 dev_notice(dev, "sev enabled\n");
1265 devm_free_pages(dev, (unsigned long)sev->cmd_buf);
1267 devm_kfree(dev, sev);
1271 dev_notice(dev, "sev initialization failed\n");
1276 static void sev_firmware_shutdown(struct sev_device *sev)
1298 struct sev_device *sev = psp->sev_data;
1300 if (!sev)
1303 sev_firmware_shutdown(sev);
1305 if (sev->misc)
1323 struct sev_device *sev = psp_master->sev_data;
1326 if (!sev)
1334 if (sev_update_firmware(sev->dev) == 0)
1343 dev_err(sev->dev,
1355 dev_warn(sev->dev,
1364 dev_err(sev->dev, "SEV: failed to INIT error %#x, rc %d\n",
1375 struct sev_device *sev = psp_master->sev_data;
1377 if (!sev)
1380 sev_firmware_shutdown(sev);