Lines Matching refs:sev

114 	struct sev_device *sev = psp_master->sev_data;  in sev_version_greater_or_equal()  local
116 if (sev->api_major > maj) in sev_version_greater_or_equal()
119 if (sev->api_major == maj && sev->api_minor >= min) in sev_version_greater_or_equal()
127 struct sev_device *sev = data; in sev_irq_handler() local
135 reg = ioread32(sev->io_regs + sev->vdata->cmdresp_reg); in sev_irq_handler()
137 sev->int_rcvd = 1; in sev_irq_handler()
138 wake_up(&sev->int_queue); in sev_irq_handler()
142 static int sev_wait_cmd_ioc(struct sev_device *sev, in sev_wait_cmd_ioc() argument
157 *reg = ioread32(sev->io_regs + sev->vdata->cmdresp_reg); in sev_wait_cmd_ioc()
166 ret = wait_event_timeout(sev->int_queue, in sev_wait_cmd_ioc()
167 sev->int_rcvd, timeout * HZ); in sev_wait_cmd_ioc()
171 *reg = ioread32(sev->io_regs + sev->vdata->cmdresp_reg); in sev_wait_cmd_ioc()
259 struct sev_device *sev = psp_master->sev_data; in sev_read_init_ex_file() local
273 dev_info(sev->dev, in sev_read_init_ex_file()
278 dev_err(sev->dev, in sev_read_init_ex_file()
287 dev_info(sev->dev, in sev_read_init_ex_file()
292 dev_dbg(sev->dev, "SEV: read %ld bytes from NV file\n", nread); in sev_read_init_ex_file()
300 struct sev_device *sev = psp_master->sev_data; in sev_write_init_ex_file() local
314 dev_err(sev->dev, in sev_write_init_ex_file()
325 dev_err(sev->dev, in sev_write_init_ex_file()
331 dev_dbg(sev->dev, "SEV: write successful to NV file\n"); in sev_write_init_ex_file()
430 struct sev_device *sev; in __snp_alloc_firmware_pages() local
441 sev = psp_master->sev_data; in __snp_alloc_firmware_pages()
442 if (!sev->snp_initialized) in __snp_alloc_firmware_pages()
464 struct sev_device *sev = psp_master->sev_data; in __snp_free_firmware_pages() local
471 if (sev->snp_initialized && in __snp_free_firmware_pages()
791 struct sev_device *sev = psp_master->sev_data; in snp_legacy_handling_needed() local
793 return cmd < SEV_CMD_SNP_INIT && sev->snp_initialized; in snp_legacy_handling_needed()
836 struct sev_device *sev; in __sev_do_cmd_locked() local
849 sev = psp->sev_data; in __sev_do_cmd_locked()
869 if (!sev->cmd_buf_active) { in __sev_do_cmd_locked()
870 cmd_buf = sev->cmd_buf; in __sev_do_cmd_locked()
871 sev->cmd_buf_active = true; in __sev_do_cmd_locked()
872 } else if (!sev->cmd_buf_backup_active) { in __sev_do_cmd_locked()
873 cmd_buf = sev->cmd_buf_backup; in __sev_do_cmd_locked()
874 sev->cmd_buf_backup_active = true; in __sev_do_cmd_locked()
876 dev_err(sev->dev, in __sev_do_cmd_locked()
889 dev_err(sev->dev, in __sev_do_cmd_locked()
895 cmd_buf = sev->cmd_buf; in __sev_do_cmd_locked()
902 dev_dbg(sev->dev, "sev command id %#x buffer 0x%08x%08x timeout %us\n", in __sev_do_cmd_locked()
908 iowrite32(phys_lsb, sev->io_regs + sev->vdata->cmdbuff_addr_lo_reg); in __sev_do_cmd_locked()
909 iowrite32(phys_msb, sev->io_regs + sev->vdata->cmdbuff_addr_hi_reg); in __sev_do_cmd_locked()
911 sev->int_rcvd = 0; in __sev_do_cmd_locked()
925 iowrite32(reg, sev->io_regs + sev->vdata->cmdresp_reg); in __sev_do_cmd_locked()
928 ret = sev_wait_cmd_ioc(sev, &reg, psp_timeout); in __sev_do_cmd_locked()
933 dev_err(sev->dev, "sev command %#x timed out, disabling PSP\n", cmd); in __sev_do_cmd_locked()
945 dev_dbg(sev->dev, "sev command %#x failed (%#010lx)\n", in __sev_do_cmd_locked()
953 cmdbuff_hi = ioread32(sev->io_regs + sev->vdata->cmdbuff_addr_hi_reg); in __sev_do_cmd_locked()
954 cmdbuff_lo = ioread32(sev->io_regs + sev->vdata->cmdbuff_addr_lo_reg); in __sev_do_cmd_locked()
956 dev_dbg(sev->dev, "Additional error information reported in cmdbuff:"); in __sev_do_cmd_locked()
957 dev_dbg(sev->dev, " cmdbuff hi: %#010x\n", cmdbuff_hi); in __sev_do_cmd_locked()
958 dev_dbg(sev->dev, " cmdbuff lo: %#010x\n", cmdbuff_lo); in __sev_do_cmd_locked()
976 dev_err(sev->dev, in __sev_do_cmd_locked()
984 if (sev->cmd_buf_backup_active) in __sev_do_cmd_locked()
985 sev->cmd_buf_backup_active = false; in __sev_do_cmd_locked()
987 sev->cmd_buf_active = false; in __sev_do_cmd_locked()
1100 struct sev_device *sev; in __sev_snp_init_locked() local
1107 sev = psp->sev_data; in __sev_snp_init_locked()
1109 if (sev->snp_initialized) in __sev_snp_init_locked()
1113 dev_dbg(sev->dev, "SEV-SNP support requires firmware version >= %d:%d\n", in __sev_snp_init_locked()
1139 dev_err(sev->dev, in __sev_snp_init_locked()
1151 dev_err(sev->dev, in __sev_snp_init_locked()
1188 sev->snp_initialized = true; in __sev_snp_init_locked()
1189 dev_dbg(sev->dev, "SEV-SNP firmware initialized\n"); in __sev_snp_init_locked()
1196 static void __sev_platform_init_handle_tmr(struct sev_device *sev) in __sev_platform_init_handle_tmr() argument
1205 if (!sev->snp_initialized) in __sev_platform_init_handle_tmr()
1208 dev_warn(sev->dev, "SEV: TMR allocation failed, SEV-ES support unavailable\n"); in __sev_platform_init_handle_tmr()
1217 static int __sev_platform_init_handle_init_ex_path(struct sev_device *sev) in __sev_platform_init_handle_init_ex_path() argument
1230 dev_err(sev->dev, "SEV: INIT_EX NV memory allocation failed\n"); in __sev_platform_init_handle_init_ex_path()
1241 if (sev->snp_initialized) { in __sev_platform_init_handle_init_ex_path()
1246 dev_err(sev->dev, "SEV: INIT_EX NV memory page state change failed.\n"); in __sev_platform_init_handle_init_ex_path()
1257 struct sev_device *sev; in __sev_platform_init_locked() local
1262 sev = psp_master->sev_data; in __sev_platform_init_locked()
1264 if (sev->state == SEV_STATE_INIT) in __sev_platform_init_locked()
1267 __sev_platform_init_handle_tmr(sev); in __sev_platform_init_locked()
1269 rc = __sev_platform_init_handle_init_ex_path(sev); in __sev_platform_init_locked()
1282 dev_err(sev->dev, in __sev_platform_init_locked()
1293 sev->state = SEV_STATE_INIT; in __sev_platform_init_locked()
1301 dev_dbg(sev->dev, "SEV firmware initialized\n"); in __sev_platform_init_locked()
1303 dev_info(sev->dev, "SEV API:%d.%d build:%d\n", sev->api_major, in __sev_platform_init_locked()
1304 sev->api_minor, sev->build); in __sev_platform_init_locked()
1311 struct sev_device *sev; in _sev_platform_init_locked() local
1317 sev = psp_master->sev_data; in _sev_platform_init_locked()
1319 if (sev->state == SEV_STATE_INIT) in _sev_platform_init_locked()
1332 dev_err(sev->dev, "SEV-SNP: failed to INIT rc %d, error %#x\n", in _sev_platform_init_locked()
1358 struct sev_device *sev; in __sev_platform_shutdown_locked() local
1364 sev = psp->sev_data; in __sev_platform_shutdown_locked()
1366 if (sev->state == SEV_STATE_UNINIT) in __sev_platform_shutdown_locked()
1373 sev->state = SEV_STATE_UNINIT; in __sev_platform_shutdown_locked()
1374 dev_dbg(sev->dev, "SEV firmware shutdown\n"); in __sev_platform_shutdown_locked()
1443 struct sev_device *sev = psp_master->sev_data; in sev_ioctl_do_pek_pdh_gen() local
1449 if (sev->state == SEV_STATE_UNINIT) { in sev_ioctl_do_pek_pdh_gen()
1460 struct sev_device *sev = psp_master->sev_data; in sev_ioctl_do_pek_csr() local
1492 if (sev->state == SEV_STATE_UNINIT) { in sev_ioctl_do_pek_csr()
1533 struct sev_device *sev = psp_master->sev_data; in sev_get_api_version() local
1539 dev_err(sev->dev, in sev_get_api_version()
1544 sev->api_major = status.api_major; in sev_get_api_version()
1545 sev->api_minor = status.api_minor; in sev_get_api_version()
1546 sev->build = status.build; in sev_get_api_version()
1547 sev->state = status.state; in sev_get_api_version()
1655 struct sev_device *sev; in __sev_snp_shutdown_locked() local
1662 sev = psp->sev_data; in __sev_snp_shutdown_locked()
1664 if (!sev->snp_initialized) in __sev_snp_shutdown_locked()
1687 dev_err(sev->dev, "SEV-SNP DF_FLUSH failed\n"); in __sev_snp_shutdown_locked()
1695 dev_err(sev->dev, "SEV-SNP firmware shutdown failed\n"); in __sev_snp_shutdown_locked()
1714 dev_err(sev->dev, "SNP IOMMU shutdown failed\n"); in __sev_snp_shutdown_locked()
1718 sev->snp_initialized = false; in __sev_snp_shutdown_locked()
1719 dev_dbg(sev->dev, "SEV-SNP firmware shutdown\n"); in __sev_snp_shutdown_locked()
1726 struct sev_device *sev = psp_master->sev_data; in sev_ioctl_do_pek_import() local
1758 if (sev->state != SEV_STATE_INIT) { in sev_ioctl_do_pek_import()
1877 struct sev_device *sev = psp_master->sev_data; in sev_ioctl_do_pdh_export() local
1886 if (sev->state != SEV_STATE_INIT) { in sev_ioctl_do_pdh_export()
1968 struct sev_device *sev = psp_master->sev_data; in sev_ioctl_do_snp_platform_status() local
1974 if (!sev->snp_initialized || !argp->data) in sev_ioctl_do_snp_platform_status()
2017 struct sev_device *sev = psp_master->sev_data; in sev_ioctl_do_snp_commit() local
2020 if (!sev->snp_initialized) in sev_ioctl_do_snp_commit()
2030 struct sev_device *sev = psp_master->sev_data; in sev_ioctl_do_snp_set_config() local
2033 if (!sev->snp_initialized || !argp->data) in sev_ioctl_do_snp_set_config()
2047 struct sev_device *sev = psp_master->sev_data; in sev_ioctl_do_snp_vlek_load() local
2052 if (!sev->snp_initialized || !argp->data) in sev_ioctl_do_snp_vlek_load()
2196 static int sev_misc_init(struct sev_device *sev) in sev_misc_init() argument
2198 struct device *dev = sev->dev; in sev_misc_init()
2229 init_waitqueue_head(&sev->int_queue); in sev_misc_init()
2230 sev->misc = misc_dev; in sev_misc_init()
2239 struct sev_device *sev; in sev_dev_init() local
2247 sev = devm_kzalloc(dev, sizeof(*sev), GFP_KERNEL); in sev_dev_init()
2248 if (!sev) in sev_dev_init()
2251 sev->cmd_buf = (void *)devm_get_free_pages(dev, GFP_KERNEL, 1); in sev_dev_init()
2252 if (!sev->cmd_buf) in sev_dev_init()
2255 sev->cmd_buf_backup = (uint8_t *)sev->cmd_buf + PAGE_SIZE; in sev_dev_init()
2257 psp->sev_data = sev; in sev_dev_init()
2259 sev->dev = dev; in sev_dev_init()
2260 sev->psp = psp; in sev_dev_init()
2262 sev->io_regs = psp->io_regs; in sev_dev_init()
2264 sev->vdata = (struct sev_vdata *)psp->vdata->sev; in sev_dev_init()
2265 if (!sev->vdata) { in sev_dev_init()
2271 psp_set_sev_irq_handler(psp, sev_irq_handler, sev); in sev_dev_init()
2273 ret = sev_misc_init(sev); in sev_dev_init()
2284 devm_free_pages(dev, (unsigned long)sev->cmd_buf); in sev_dev_init()
2286 devm_kfree(dev, sev); in sev_dev_init()
2295 static void __sev_firmware_shutdown(struct sev_device *sev, bool panic) in __sev_firmware_shutdown() argument
2335 static void sev_firmware_shutdown(struct sev_device *sev) in sev_firmware_shutdown() argument
2338 __sev_firmware_shutdown(sev, false); in sev_firmware_shutdown()
2344 struct sev_device *sev = psp->sev_data; in sev_dev_destroy() local
2346 if (!sev) in sev_dev_destroy()
2349 sev_firmware_shutdown(sev); in sev_dev_destroy()
2351 if (sev->misc) in sev_dev_destroy()
2360 struct sev_device *sev = psp_master->sev_data; in snp_shutdown_on_panic() local
2371 __sev_firmware_shutdown(sev, true); in snp_shutdown_on_panic()
2392 struct sev_device *sev = psp_master->sev_data; in sev_pci_init() local
2397 if (!sev) in sev_pci_init()
2405 api_major = sev->api_major; in sev_pci_init()
2406 api_minor = sev->api_minor; in sev_pci_init()
2407 build = sev->build; in sev_pci_init()
2409 if (sev_update_firmware(sev->dev) == 0) in sev_pci_init()
2412 if (api_major != sev->api_major || api_minor != sev->api_minor || in sev_pci_init()
2413 build != sev->build) in sev_pci_init()
2414 dev_info(sev->dev, "SEV firmware updated from %d.%d.%d to %d.%d.%d\n", in sev_pci_init()
2416 sev->api_major, sev->api_minor, sev->build); in sev_pci_init()
2422 dev_err(sev->dev, "SEV: failed to INIT error %#x, rc %d\n", in sev_pci_init()
2425 dev_info(sev->dev, "SEV%s API:%d.%d build:%d\n", sev->snp_initialized ? in sev_pci_init()
2426 "-SNP" : "", sev->api_major, sev->api_minor, sev->build); in sev_pci_init()
2440 struct sev_device *sev = psp_master->sev_data; in sev_pci_exit() local
2442 if (!sev) in sev_pci_exit()
2445 sev_firmware_shutdown(sev); in sev_pci_exit()