Lines Matching refs:psp
23 struct psp_device *psp; in psp_alloc_struct() local
25 psp = devm_kzalloc(dev, sizeof(*psp), GFP_KERNEL); in psp_alloc_struct()
26 if (!psp) in psp_alloc_struct()
29 psp->dev = dev; in psp_alloc_struct()
30 psp->sp = sp; in psp_alloc_struct()
32 snprintf(psp->name, sizeof(psp->name), "psp-%u", sp->ord); in psp_alloc_struct()
34 return psp; in psp_alloc_struct()
39 struct psp_device *psp = data; in psp_irq_handler() local
43 status = ioread32(psp->io_regs + psp->vdata->intsts_reg); in psp_irq_handler()
47 if (psp->sev_irq_handler) in psp_irq_handler()
48 psp->sev_irq_handler(irq, psp->sev_irq_data, status); in psp_irq_handler()
50 if (psp->tee_irq_handler) in psp_irq_handler()
51 psp->tee_irq_handler(irq, psp->tee_irq_data, status); in psp_irq_handler()
55 iowrite32(status, psp->io_regs + psp->vdata->intsts_reg); in psp_irq_handler()
60 static unsigned int psp_get_capability(struct psp_device *psp) in psp_get_capability() argument
62 unsigned int val = ioread32(psp->io_regs + psp->vdata->feature_reg); in psp_get_capability()
72 dev_notice(psp->dev, "psp: unable to access the device: you might be running a broken BIOS.\n"); in psp_get_capability()
75 psp->capability = val; in psp_get_capability()
78 if (psp->capability & PSP_CAPABILITY_PSP_SECURITY_REPORTING && in psp_get_capability()
79 psp->capability & (PSP_SECURITY_TSME_STATUS << PSP_CAPABILITY_PSP_SECURITY_OFFSET) && in psp_get_capability()
81 …dev_notice(psp->dev, "psp: Both TSME and SME are active, SME is unnecessary when TSME is active.\n… in psp_get_capability()
86 static int psp_check_sev_support(struct psp_device *psp) in psp_check_sev_support() argument
89 if (!(psp->capability & PSP_CAPABILITY_SEV)) { in psp_check_sev_support()
90 dev_dbg(psp->dev, "psp does not support SEV\n"); in psp_check_sev_support()
97 static int psp_check_tee_support(struct psp_device *psp) in psp_check_tee_support() argument
100 if (!(psp->capability & PSP_CAPABILITY_TEE)) { in psp_check_tee_support()
101 dev_dbg(psp->dev, "psp does not support TEE\n"); in psp_check_tee_support()
108 static int psp_init(struct psp_device *psp) in psp_init() argument
112 if (!psp_check_sev_support(psp)) { in psp_init()
113 ret = sev_dev_init(psp); in psp_init()
118 if (!psp_check_tee_support(psp)) { in psp_init()
119 ret = tee_dev_init(psp); in psp_init()
130 struct psp_device *psp; in psp_dev_init() local
134 psp = psp_alloc_struct(sp); in psp_dev_init()
135 if (!psp) in psp_dev_init()
138 sp->psp_data = psp; in psp_dev_init()
140 psp->vdata = (struct psp_vdata *)sp->dev_vdata->psp_vdata; in psp_dev_init()
141 if (!psp->vdata) { in psp_dev_init()
147 psp->io_regs = sp->io_map; in psp_dev_init()
149 ret = psp_get_capability(psp); in psp_dev_init()
154 iowrite32(0, psp->io_regs + psp->vdata->inten_reg); in psp_dev_init()
155 iowrite32(-1, psp->io_regs + psp->vdata->intsts_reg); in psp_dev_init()
158 ret = sp_request_psp_irq(psp->sp, psp_irq_handler, psp->name, psp); in psp_dev_init()
164 ret = psp_init(psp); in psp_dev_init()
172 iowrite32(-1, psp->io_regs + psp->vdata->inten_reg); in psp_dev_init()
179 sp_free_psp_irq(psp->sp, psp); in psp_dev_init()
195 struct psp_device *psp = sp->psp_data; in psp_dev_destroy() local
197 if (!psp) in psp_dev_destroy()
200 sev_dev_destroy(psp); in psp_dev_destroy()
202 tee_dev_destroy(psp); in psp_dev_destroy()
204 sp_free_psp_irq(sp, psp); in psp_dev_destroy()
210 void psp_set_sev_irq_handler(struct psp_device *psp, psp_irq_handler_t handler, in psp_set_sev_irq_handler() argument
213 psp->sev_irq_data = data; in psp_set_sev_irq_handler()
214 psp->sev_irq_handler = handler; in psp_set_sev_irq_handler()
217 void psp_clear_sev_irq_handler(struct psp_device *psp) in psp_clear_sev_irq_handler() argument
219 psp_set_sev_irq_handler(psp, NULL, NULL); in psp_clear_sev_irq_handler()
222 void psp_set_tee_irq_handler(struct psp_device *psp, psp_irq_handler_t handler, in psp_set_tee_irq_handler() argument
225 psp->tee_irq_data = data; in psp_set_tee_irq_handler()
226 psp->tee_irq_handler = handler; in psp_set_tee_irq_handler()
229 void psp_clear_tee_irq_handler(struct psp_device *psp) in psp_clear_tee_irq_handler() argument
231 psp_set_tee_irq_handler(psp, NULL, NULL); in psp_clear_tee_irq_handler()