Lines Matching refs:psp
58 struct psp_device *psp; in psp_alloc_struct() local
60 psp = devm_kzalloc(dev, sizeof(*psp), GFP_KERNEL); in psp_alloc_struct()
61 if (!psp) in psp_alloc_struct()
64 psp->dev = dev; in psp_alloc_struct()
65 psp->sp = sp; in psp_alloc_struct()
67 snprintf(psp->name, sizeof(psp->name), "psp-%u", sp->ord); in psp_alloc_struct()
69 return psp; in psp_alloc_struct()
74 struct psp_device *psp = data; in psp_irq_handler() local
79 status = ioread32(psp->io_regs + psp->vdata->intsts_reg); in psp_irq_handler()
86 reg = ioread32(psp->io_regs + psp->vdata->cmdresp_reg); in psp_irq_handler()
88 psp->sev_int_rcvd = 1; in psp_irq_handler()
89 wake_up(&psp->sev_int_queue); in psp_irq_handler()
94 iowrite32(status, psp->io_regs + psp->vdata->intsts_reg); in psp_irq_handler()
99 static int sev_wait_cmd_ioc(struct psp_device *psp, in sev_wait_cmd_ioc() argument
104 ret = wait_event_timeout(psp->sev_int_queue, in sev_wait_cmd_ioc()
105 psp->sev_int_rcvd, timeout * HZ); in sev_wait_cmd_ioc()
109 *reg = ioread32(psp->io_regs + psp->vdata->cmdresp_reg); in sev_wait_cmd_ioc()
152 struct psp_device *psp = psp_master; in __sev_do_cmd_locked() local
156 if (!psp) in __sev_do_cmd_locked()
166 dev_dbg(psp->dev, "sev command id %#x buffer 0x%08x%08x timeout %us\n", in __sev_do_cmd_locked()
172 iowrite32(phys_lsb, psp->io_regs + psp->vdata->cmdbuff_addr_lo_reg); in __sev_do_cmd_locked()
173 iowrite32(phys_msb, psp->io_regs + psp->vdata->cmdbuff_addr_hi_reg); in __sev_do_cmd_locked()
175 psp->sev_int_rcvd = 0; in __sev_do_cmd_locked()
180 iowrite32(reg, psp->io_regs + psp->vdata->cmdresp_reg); in __sev_do_cmd_locked()
183 ret = sev_wait_cmd_ioc(psp, ®, psp_timeout); in __sev_do_cmd_locked()
188 dev_err(psp->dev, "sev command %#x timed out, disabling PSP \n", cmd); in __sev_do_cmd_locked()
200 dev_dbg(psp->dev, "sev command %#x failed (%#010x)\n", in __sev_do_cmd_locked()
224 struct psp_device *psp = psp_master; in __sev_platform_init_locked() local
227 if (!psp) in __sev_platform_init_locked()
230 if (psp->sev_state == SEV_STATE_INIT) in __sev_platform_init_locked()
233 rc = __sev_do_cmd_locked(SEV_CMD_INIT, &psp->init_cmd_buf, error); in __sev_platform_init_locked()
237 psp->sev_state = SEV_STATE_INIT; in __sev_platform_init_locked()
238 dev_dbg(psp->dev, "SEV firmware initialized\n"); in __sev_platform_init_locked()
890 static int sev_misc_init(struct psp_device *psp) in sev_misc_init() argument
892 struct device *dev = psp->dev; in sev_misc_init()
923 init_waitqueue_head(&psp->sev_int_queue); in sev_misc_init()
924 psp->sev_misc = misc_dev; in sev_misc_init()
930 static int psp_check_sev_support(struct psp_device *psp) in psp_check_sev_support() argument
933 if (!(ioread32(psp->io_regs + psp->vdata->feature_reg) & 1)) { in psp_check_sev_support()
934 dev_dbg(psp->dev, "psp does not support SEV\n"); in psp_check_sev_support()
944 struct psp_device *psp; in psp_dev_init() local
948 psp = psp_alloc_struct(sp); in psp_dev_init()
949 if (!psp) in psp_dev_init()
952 sp->psp_data = psp; in psp_dev_init()
954 psp->vdata = (struct psp_vdata *)sp->dev_vdata->psp_vdata; in psp_dev_init()
955 if (!psp->vdata) { in psp_dev_init()
961 psp->io_regs = sp->io_map; in psp_dev_init()
963 ret = psp_check_sev_support(psp); in psp_dev_init()
968 iowrite32(0, psp->io_regs + psp->vdata->inten_reg); in psp_dev_init()
969 iowrite32(-1, psp->io_regs + psp->vdata->intsts_reg); in psp_dev_init()
972 ret = sp_request_psp_irq(psp->sp, psp_irq_handler, psp->name, psp); in psp_dev_init()
978 ret = sev_misc_init(psp); in psp_dev_init()
986 iowrite32(-1, psp->io_regs + psp->vdata->inten_reg); in psp_dev_init()
993 sp_free_psp_irq(psp->sp, psp); in psp_dev_init()
1009 struct psp_device *psp = sp->psp_data; in psp_dev_destroy() local
1011 if (!psp) in psp_dev_destroy()
1014 if (psp->sev_misc) in psp_dev_destroy()
1017 sp_free_psp_irq(sp, psp); in psp_dev_destroy()