Lines Matching defs:isp
63 int ipu6_buttress_ipc_reset(struct ipu6_device *isp,
67 struct ipu6_buttress *b = &isp->buttress;
70 if (!isp->secure_mode) {
71 dev_dbg(&isp->pdev->dev, "Skip IPC reset for non-secure mode");
78 val = readl(isp->base + ipc->csr_in);
79 writel(val, isp->base + ipc->csr_in);
82 writel(ENTRY, isp->base + ipc->csr_out);
97 val = readl(isp->base + ipc->csr_in);
108 writel(ENTRY | EXIT, isp->base + ipc->csr_in);
109 writel(QUERY, isp->base + ipc->csr_out);
120 writel(ENTRY | QUERY, isp->base + ipc->csr_in);
121 writel(ENTRY, isp->base + ipc->csr_out);
138 writel(EXIT, isp->base + ipc->csr_in);
139 writel(0, isp->base + ipc->db0_in);
140 writel(csr_in_clr, isp->base + ipc->csr_in);
141 writel(EXIT, isp->base + ipc->csr_out);
148 val = readl(isp->base + ipc->csr_in);
150 dev_dbg(&isp->pdev->dev,
163 writel(QUERY, isp->base + ipc->csr_in);
164 writel(ENTRY, isp->base + ipc->csr_out);
167 dev_dbg_ratelimited(&isp->pdev->dev,
174 dev_err(&isp->pdev->dev, "Timed out while waiting for CSE\n");
179 static void ipu6_buttress_ipc_validity_close(struct ipu6_device *isp,
183 isp->base + ipc->csr_out);
187 ipu6_buttress_ipc_validity_open(struct ipu6_device *isp,
196 isp->base + ipc->csr_out);
198 addr = isp->base + ipc->csr_in;
202 dev_err(&isp->pdev->dev, "CSE validity timeout 0x%x\n", val);
203 ipu6_buttress_ipc_validity_close(isp, ipc);
209 static void ipu6_buttress_ipc_recv(struct ipu6_device *isp,
213 *ipc_msg = readl(isp->base + ipc->data0_in);
214 writel(0, isp->base + ipc->db0_in);
217 static int ipu6_buttress_ipc_send_bulk(struct ipu6_device *isp,
223 struct ipu6_buttress *b = &isp->buttress;
231 ret = ipu6_buttress_ipc_validity_open(isp, ipc);
233 dev_err(&isp->pdev->dev, "IPC validity open failed\n");
245 dev_dbg(&isp->pdev->dev, "bulk IPC command: 0x%x\n",
247 writel(msgs[i].cmd, isp->base + ipc->data0_out);
249 writel(val, isp->base + ipc->db0_out);
254 dev_err(&isp->pdev->dev, "send IPC response timeout\n");
261 writel(0, isp->base + ipc->db0_out);
274 dev_err(&isp->pdev->dev, "recv IPC response timeout\n");
281 dev_err(&isp->pdev->dev,
288 dev_err(&isp->pdev->dev,
296 dev_dbg(&isp->pdev->dev, "bulk IPC commands done\n");
299 ipu6_buttress_ipc_validity_close(isp, ipc);
305 ipu6_buttress_ipc_send(struct ipu6_device *isp,
316 return ipu6_buttress_ipc_send_bulk(isp, &msg, 1);
337 struct ipu6_device *isp = isp_ptr;
338 struct ipu6_bus_device *adev[] = { isp->isys, isp->psys };
339 struct ipu6_buttress *b = &isp->buttress;
347 active = pm_runtime_get_if_active(&isp->pdev->dev);
351 irq_status = readl(isp->base + reg_irq_sts);
354 pm_runtime_put_noidle(&isp->pdev->dev);
359 writel(irq_status, isp->base + BUTTRESS_REG_ISR_CLEAR);
379 dev_dbg(&isp->pdev->dev,
381 ipu6_buttress_ipc_recv(isp, &b->cse, &b->cse.recv_data);
386 dev_dbg(&isp->pdev->dev,
392 ipu6_buttress_get_secure_mode(isp))
393 dev_err(&isp->pdev->dev,
398 dev_err(&isp->pdev->dev,
402 dev_err(&isp->pdev->dev, "BUTTRESS_ISR_UFI_ERROR\n");
405 dev_err(&isp->pdev->dev, "too many consecutive IRQs\n");
410 irq_status = readl(isp->base + reg_irq_sts);
415 isp->base + BUTTRESS_REG_ISR_ENABLE);
418 pm_runtime_put(&isp->pdev->dev);
425 struct ipu6_device *isp = isp_ptr;
426 struct ipu6_bus_device *adev[] = { isp->isys, isp->psys };
441 writel(BUTTRESS_IRQS, isp->base + BUTTRESS_REG_ISR_ENABLE);
449 struct ipu6_device *isp = to_ipu6_bus_device(dev)->isp;
456 mutex_lock(&isp->buttress.power_mutex);
472 writel(val, isp->base + ctrl->freq_ctl);
474 ret = readl_poll_timeout(isp->base + BUTTRESS_REG_PWR_STATE,
478 dev_err(&isp->pdev->dev,
481 mutex_unlock(&isp->buttress.power_mutex);
486 bool ipu6_buttress_get_secure_mode(struct ipu6_device *isp)
490 val = readl(isp->base + BUTTRESS_REG_SECURITY_CTL);
495 bool ipu6_buttress_auth_done(struct ipu6_device *isp)
499 if (!isp->secure_mode)
502 val = readl(isp->base + BUTTRESS_REG_SECURITY_CTL);
509 int ipu6_buttress_reset_authentication(struct ipu6_device *isp)
514 if (!isp->secure_mode) {
515 dev_dbg(&isp->pdev->dev, "Skip auth for non-secure mode\n");
519 writel(BUTTRESS_FW_RESET_CTL_START, isp->base +
522 ret = readl_poll_timeout(isp->base + BUTTRESS_REG_FW_RESET_CTL, val,
526 dev_err(&isp->pdev->dev,
531 dev_dbg(&isp->pdev->dev, "FW reset for authentication done\n");
532 writel(0, isp->base + BUTTRESS_REG_FW_RESET_CTL);
543 struct pci_dev *pdev = sys->isp->pdev;
604 struct pci_dev *pdev = sys->isp->pdev;
612 int ipu6_buttress_authenticate(struct ipu6_device *isp)
614 struct ipu6_buttress *b = &isp->buttress;
619 if (!isp->secure_mode) {
620 dev_dbg(&isp->pdev->dev, "Skip auth for non-secure mode\n");
624 psys_pdata = isp->psys->pdata;
628 if (ipu6_buttress_auth_done(isp)) {
637 data = lower_32_bits(isp->psys->pkg_dir_dma_addr);
638 writel(data, isp->base + BUTTRESS_REG_FW_SOURCE_BASE_LO);
640 data = upper_32_bits(isp->psys->pkg_dir_dma_addr);
641 writel(data, isp->base + BUTTRESS_REG_FW_SOURCE_BASE_HI);
648 dev_info(&isp->pdev->dev, "Sending BOOT_LOAD to CSE\n");
650 ret = ipu6_buttress_ipc_send(isp,
655 dev_err(&isp->pdev->dev, "CSE boot_load failed\n");
662 ret = readl_poll_timeout(isp->base + BUTTRESS_REG_SECURITY_CTL, data,
667 dev_err(&isp->pdev->dev, "CSE boot_load timeout\n");
672 dev_err(&isp->pdev->dev, "CSE auth failed\n");
681 dev_err(&isp->pdev->dev, "Unexpected magic number 0x%x\n",
691 dev_info(&isp->pdev->dev, "Sending AUTHENTICATE_RUN to CSE\n");
692 ret = ipu6_buttress_ipc_send(isp,
697 dev_err(&isp->pdev->dev, "CSE authenticate_run failed\n");
702 ret = readl_poll_timeout(isp->base + BUTTRESS_REG_SECURITY_CTL, data,
707 dev_err(&isp->pdev->dev, "CSE authenticate timeout\n");
712 dev_err(&isp->pdev->dev, "CSE boot_load failed\n");
717 dev_info(&isp->pdev->dev, "CSE authenticate_run done\n");
725 static int ipu6_buttress_send_tsc_request(struct ipu6_device *isp)
733 isp->base + BUTTRESS_REG_FABRIC_CMD);
735 val = readl(isp->base + BUTTRESS_REG_PWR_STATE);
738 dev_err(&isp->pdev->dev, "Start tsc sync failed\n");
743 ret = readl_poll_timeout(isp->base + BUTTRESS_REG_PWR_STATE, val,
747 dev_err(&isp->pdev->dev, "Start tsc sync timeout\n");
752 int ipu6_buttress_start_tsc_sync(struct ipu6_device *isp)
760 ret = ipu6_buttress_send_tsc_request(isp);
764 val = readl(isp->base + BUTTRESS_REG_TSW_CTL);
766 writel(val, isp->base + BUTTRESS_REG_TSW_CTL);
768 writel(val, isp->base + BUTTRESS_REG_TSW_CTL);
771 dev_err(&isp->pdev->dev, "TSC sync failed (timeout)\n");
777 void ipu6_buttress_tsc_read(struct ipu6_device *isp, u64 *val)
783 tsc_hi_1 = readl(isp->base + BUTTRESS_REG_TSC_HI);
784 tsc_lo = readl(isp->base + BUTTRESS_REG_TSC_LO);
785 tsc_hi_2 = readl(isp->base + BUTTRESS_REG_TSC_HI);
799 u64 ipu6_buttress_tsc_ticks_to_ns(u64 ticks, const struct ipu6_device *isp)
810 return div_u64(ns, isp->buttress.ref_clk);
814 void ipu6_buttress_restore(struct ipu6_device *isp)
816 struct ipu6_buttress *b = &isp->buttress;
818 writel(BUTTRESS_IRQS, isp->base + BUTTRESS_REG_ISR_CLEAR);
819 writel(BUTTRESS_IRQS, isp->base + BUTTRESS_REG_ISR_ENABLE);
820 writel(b->wdt_cached_value, isp->base + BUTTRESS_REG_WDT);
823 int ipu6_buttress_init(struct ipu6_device *isp)
826 struct ipu6_buttress *b = &isp->buttress;
847 isp->secure_mode = ipu6_buttress_get_secure_mode(isp);
848 dev_dbg(&isp->pdev->dev, "IPU6 in %s mode touch 0x%x mask 0x%x\n",
849 isp->secure_mode ? "secure" : "non-secure",
850 readl(isp->base + BUTTRESS_REG_SECURITY_TOUCH),
851 readl(isp->base + BUTTRESS_REG_CAMERA_MASK));
853 b->wdt_cached_value = readl(isp->base + BUTTRESS_REG_WDT);
854 writel(BUTTRESS_IRQS, isp->base + BUTTRESS_REG_ISR_CLEAR);
855 writel(BUTTRESS_IRQS, isp->base + BUTTRESS_REG_ISR_ENABLE);
858 val = readl(isp->base + BUTTRESS_REG_BTRS_CTRL);
872 dev_warn(&isp->pdev->dev,
880 ret = ipu6_buttress_ipc_reset(isp, &b->cse);
882 dev_warn(&isp->pdev->dev,
885 dev_dbg(&isp->pdev->dev, "IPC reset done\n");
890 dev_err(&isp->pdev->dev, "IPC reset protocol failed\n");
900 void ipu6_buttress_exit(struct ipu6_device *isp)
902 struct ipu6_buttress *b = &isp->buttress;
904 writel(0, isp->base + BUTTRESS_REG_ISR_ENABLE);