Lines Matching refs:psp
55 struct psp_device *psp; in psp_alloc_struct() local
57 psp = devm_kzalloc(dev, sizeof(*psp), GFP_KERNEL); in psp_alloc_struct()
58 if (!psp) in psp_alloc_struct()
61 psp->dev = dev; in psp_alloc_struct()
62 psp->sp = sp; in psp_alloc_struct()
64 snprintf(psp->name, sizeof(psp->name), "psp-%u", sp->ord); in psp_alloc_struct()
66 return psp; in psp_alloc_struct()
71 struct psp_device *psp = data; in psp_irq_handler() local
76 status = ioread32(psp->io_regs + psp->vdata->intsts_reg); in psp_irq_handler()
83 reg = ioread32(psp->io_regs + psp->vdata->cmdresp_reg); in psp_irq_handler()
85 psp->sev_int_rcvd = 1; in psp_irq_handler()
86 wake_up(&psp->sev_int_queue); in psp_irq_handler()
91 iowrite32(status, psp->io_regs + psp->vdata->intsts_reg); in psp_irq_handler()
96 static int sev_wait_cmd_ioc(struct psp_device *psp, in sev_wait_cmd_ioc() argument
101 ret = wait_event_timeout(psp->sev_int_queue, in sev_wait_cmd_ioc()
102 psp->sev_int_rcvd, timeout * HZ); in sev_wait_cmd_ioc()
106 *reg = ioread32(psp->io_regs + psp->vdata->cmdresp_reg); in sev_wait_cmd_ioc()
149 struct psp_device *psp = psp_master; in __sev_do_cmd_locked() local
153 if (!psp) in __sev_do_cmd_locked()
163 dev_dbg(psp->dev, "sev command id %#x buffer 0x%08x%08x timeout %us\n", in __sev_do_cmd_locked()
169 iowrite32(phys_lsb, psp->io_regs + psp->vdata->cmdbuff_addr_lo_reg); in __sev_do_cmd_locked()
170 iowrite32(phys_msb, psp->io_regs + psp->vdata->cmdbuff_addr_hi_reg); in __sev_do_cmd_locked()
172 psp->sev_int_rcvd = 0; in __sev_do_cmd_locked()
177 iowrite32(reg, psp->io_regs + psp->vdata->cmdresp_reg); in __sev_do_cmd_locked()
180 ret = sev_wait_cmd_ioc(psp, ®, psp_timeout); in __sev_do_cmd_locked()
185 dev_err(psp->dev, "sev command %#x timed out, disabling PSP \n", cmd); in __sev_do_cmd_locked()
197 dev_dbg(psp->dev, "sev command %#x failed (%#010x)\n", in __sev_do_cmd_locked()
221 struct psp_device *psp = psp_master; in __sev_platform_init_locked() local
224 if (!psp) in __sev_platform_init_locked()
227 if (psp->sev_state == SEV_STATE_INIT) in __sev_platform_init_locked()
230 rc = __sev_do_cmd_locked(SEV_CMD_INIT, &psp->init_cmd_buf, error); in __sev_platform_init_locked()
234 psp->sev_state = SEV_STATE_INIT; in __sev_platform_init_locked()
235 dev_dbg(psp->dev, "SEV firmware initialized\n"); in __sev_platform_init_locked()
783 static int sev_misc_init(struct psp_device *psp) in sev_misc_init() argument
785 struct device *dev = psp->dev; in sev_misc_init()
816 init_waitqueue_head(&psp->sev_int_queue); in sev_misc_init()
817 psp->sev_misc = misc_dev; in sev_misc_init()
823 static int sev_init(struct psp_device *psp) in sev_init() argument
826 if (!(ioread32(psp->io_regs + psp->vdata->feature_reg) & 1)) { in sev_init()
827 dev_dbg(psp->dev, "device does not support SEV\n"); in sev_init()
831 return sev_misc_init(psp); in sev_init()
837 struct psp_device *psp; in psp_dev_init() local
841 psp = psp_alloc_struct(sp); in psp_dev_init()
842 if (!psp) in psp_dev_init()
845 sp->psp_data = psp; in psp_dev_init()
847 psp->vdata = (struct psp_vdata *)sp->dev_vdata->psp_vdata; in psp_dev_init()
848 if (!psp->vdata) { in psp_dev_init()
854 psp->io_regs = sp->io_map; in psp_dev_init()
857 iowrite32(0, psp->io_regs + psp->vdata->inten_reg); in psp_dev_init()
858 iowrite32(-1, psp->io_regs + psp->vdata->intsts_reg); in psp_dev_init()
861 ret = sp_request_psp_irq(psp->sp, psp_irq_handler, psp->name, psp); in psp_dev_init()
867 ret = sev_init(psp); in psp_dev_init()
875 iowrite32(-1, psp->io_regs + psp->vdata->inten_reg); in psp_dev_init()
882 sp_free_psp_irq(psp->sp, psp); in psp_dev_init()
893 struct psp_device *psp = sp->psp_data; in psp_dev_destroy() local
895 if (!psp) in psp_dev_destroy()
898 if (psp->sev_misc) in psp_dev_destroy()
901 sp_free_psp_irq(sp, psp); in psp_dev_destroy()