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()
79 static int psp_check_sev_support(struct psp_device *psp, in psp_check_sev_support() argument
84 dev_dbg(psp->dev, "psp does not support SEV\n"); in psp_check_sev_support()
91 static int psp_check_tee_support(struct psp_device *psp, in psp_check_tee_support() argument
96 dev_dbg(psp->dev, "psp does not support TEE\n"); in psp_check_tee_support()
103 static int psp_check_support(struct psp_device *psp, in psp_check_support() argument
106 int sev_support = psp_check_sev_support(psp, capability); in psp_check_support()
107 int tee_support = psp_check_tee_support(psp, capability); in psp_check_support()
116 static int psp_init(struct psp_device *psp, unsigned int capability) in psp_init() argument
120 if (!psp_check_sev_support(psp, capability)) { in psp_init()
121 ret = sev_dev_init(psp); in psp_init()
126 if (!psp_check_tee_support(psp, capability)) { in psp_init()
127 ret = tee_dev_init(psp); in psp_init()
138 struct psp_device *psp; in psp_dev_init() local
143 psp = psp_alloc_struct(sp); in psp_dev_init()
144 if (!psp) in psp_dev_init()
147 sp->psp_data = psp; in psp_dev_init()
149 psp->vdata = (struct psp_vdata *)sp->dev_vdata->psp_vdata; in psp_dev_init()
150 if (!psp->vdata) { in psp_dev_init()
156 psp->io_regs = sp->io_map; in psp_dev_init()
158 capability = psp_get_capability(psp); in psp_dev_init()
162 ret = psp_check_support(psp, capability); in psp_dev_init()
167 iowrite32(0, psp->io_regs + psp->vdata->inten_reg); in psp_dev_init()
168 iowrite32(-1, psp->io_regs + psp->vdata->intsts_reg); in psp_dev_init()
171 ret = sp_request_psp_irq(psp->sp, psp_irq_handler, psp->name, psp); in psp_dev_init()
177 ret = psp_init(psp, capability); in psp_dev_init()
185 iowrite32(-1, psp->io_regs + psp->vdata->inten_reg); in psp_dev_init()
192 sp_free_psp_irq(psp->sp, psp); in psp_dev_init()
208 struct psp_device *psp = sp->psp_data; in psp_dev_destroy() local
210 if (!psp) in psp_dev_destroy()
213 sev_dev_destroy(psp); in psp_dev_destroy()
215 tee_dev_destroy(psp); in psp_dev_destroy()
217 sp_free_psp_irq(sp, psp); in psp_dev_destroy()
223 void psp_set_sev_irq_handler(struct psp_device *psp, psp_irq_handler_t handler, in psp_set_sev_irq_handler() argument
226 psp->sev_irq_data = data; in psp_set_sev_irq_handler()
227 psp->sev_irq_handler = handler; in psp_set_sev_irq_handler()
230 void psp_clear_sev_irq_handler(struct psp_device *psp) in psp_clear_sev_irq_handler() argument
232 psp_set_sev_irq_handler(psp, NULL, NULL); in psp_clear_sev_irq_handler()
235 void psp_set_tee_irq_handler(struct psp_device *psp, psp_irq_handler_t handler, in psp_set_tee_irq_handler() argument
238 psp->tee_irq_data = data; in psp_set_tee_irq_handler()
239 psp->tee_irq_handler = handler; in psp_set_tee_irq_handler()
242 void psp_clear_tee_irq_handler(struct psp_device *psp) in psp_clear_tee_irq_handler() argument
244 psp_set_tee_irq_handler(psp, NULL, NULL); in psp_clear_tee_irq_handler()