Lines Matching defs:isp

62 int ipu6_buttress_ipc_reset(struct ipu6_device *isp,
66 struct ipu6_buttress *b = &isp->buttress;
69 if (!isp->secure_mode) {
70 dev_dbg(&isp->pdev->dev, "Skip IPC reset for non-secure mode");
77 val = readl(isp->base + ipc->csr_in);
78 writel(val, isp->base + ipc->csr_in);
81 writel(ENTRY, isp->base + ipc->csr_out);
96 val = readl(isp->base + ipc->csr_in);
107 writel(ENTRY | EXIT, isp->base + ipc->csr_in);
108 writel(QUERY, isp->base + ipc->csr_out);
119 writel(ENTRY | QUERY, isp->base + ipc->csr_in);
120 writel(ENTRY, isp->base + ipc->csr_out);
137 writel(EXIT, isp->base + ipc->csr_in);
138 writel(0, isp->base + ipc->db0_in);
139 writel(csr_in_clr, isp->base + ipc->csr_in);
140 writel(EXIT, isp->base + ipc->csr_out);
147 val = readl(isp->base + ipc->csr_in);
149 dev_dbg(&isp->pdev->dev,
162 writel(QUERY, isp->base + ipc->csr_in);
163 writel(ENTRY, isp->base + ipc->csr_out);
166 dev_warn_ratelimited(&isp->pdev->dev,
173 dev_err(&isp->pdev->dev, "Timed out while waiting for CSE\n");
178 static void ipu6_buttress_ipc_validity_close(struct ipu6_device *isp,
182 isp->base + ipc->csr_out);
186 ipu6_buttress_ipc_validity_open(struct ipu6_device *isp,
195 isp->base + ipc->csr_out);
197 addr = isp->base + ipc->csr_in;
201 dev_err(&isp->pdev->dev, "CSE validity timeout 0x%x\n", val);
202 ipu6_buttress_ipc_validity_close(isp, ipc);
208 static void ipu6_buttress_ipc_recv(struct ipu6_device *isp,
212 *ipc_msg = readl(isp->base + ipc->data0_in);
213 writel(0, isp->base + ipc->db0_in);
216 static int ipu6_buttress_ipc_send_bulk(struct ipu6_device *isp,
223 struct ipu6_buttress *b = &isp->buttress;
233 ret = ipu6_buttress_ipc_validity_open(isp, ipc);
235 dev_err(&isp->pdev->dev, "IPC validity open failed\n");
247 dev_dbg(&isp->pdev->dev, "bulk IPC command: 0x%x\n",
249 writel(msgs[i].cmd, isp->base + ipc->data0_out);
251 writel(val, isp->base + ipc->db0_out);
256 dev_err(&isp->pdev->dev, "send IPC response timeout\n");
263 writel(0, isp->base + ipc->db0_out);
276 dev_err(&isp->pdev->dev, "recv IPC response timeout\n");
283 dev_err(&isp->pdev->dev,
290 dev_err(&isp->pdev->dev,
298 dev_dbg(&isp->pdev->dev, "bulk IPC commands done\n");
301 ipu6_buttress_ipc_validity_close(isp, ipc);
307 ipu6_buttress_ipc_send(struct ipu6_device *isp,
319 return ipu6_buttress_ipc_send_bulk(isp, ipc_domain, &msg, 1);
340 struct ipu6_device *isp = isp_ptr;
341 struct ipu6_bus_device *adev[] = { isp->isys, isp->psys };
342 struct ipu6_buttress *b = &isp->buttress;
349 pm_runtime_get_noresume(&isp->pdev->dev);
351 irq_status = readl(isp->base + reg_irq_sts);
353 pm_runtime_put_noidle(&isp->pdev->dev);
358 writel(irq_status, isp->base + BUTTRESS_REG_ISR_CLEAR);
378 dev_dbg(&isp->pdev->dev,
380 ipu6_buttress_ipc_recv(isp, &b->cse, &b->cse.recv_data);
385 dev_dbg(&isp->pdev->dev,
387 ipu6_buttress_ipc_recv(isp, &b->ish, &b->ish.recv_data);
392 dev_dbg(&isp->pdev->dev,
398 dev_dbg(&isp->pdev->dev,
404 ipu6_buttress_get_secure_mode(isp))
405 dev_err(&isp->pdev->dev,
410 dev_err(&isp->pdev->dev,
414 dev_err(&isp->pdev->dev, "BUTTRESS_ISR_UFI_ERROR\n");
417 dev_err(&isp->pdev->dev, "too many consecutive IRQs\n");
422 irq_status = readl(isp->base + reg_irq_sts);
427 isp->base + BUTTRESS_REG_ISR_ENABLE);
429 pm_runtime_put(&isp->pdev->dev);
436 struct ipu6_device *isp = isp_ptr;
437 struct ipu6_bus_device *adev[] = { isp->isys, isp->psys };
452 writel(BUTTRESS_IRQS, isp->base + BUTTRESS_REG_ISR_ENABLE);
460 struct ipu6_device *isp = to_ipu6_bus_device(dev)->isp;
467 mutex_lock(&isp->buttress.power_mutex);
483 writel(val, isp->base + ctrl->freq_ctl);
485 ret = readl_poll_timeout(isp->base + BUTTRESS_REG_PWR_STATE,
489 dev_err(&isp->pdev->dev,
494 mutex_unlock(&isp->buttress.power_mutex);
499 bool ipu6_buttress_get_secure_mode(struct ipu6_device *isp)
503 val = readl(isp->base + BUTTRESS_REG_SECURITY_CTL);
508 bool ipu6_buttress_auth_done(struct ipu6_device *isp)
512 if (!isp->secure_mode)
515 val = readl(isp->base + BUTTRESS_REG_SECURITY_CTL);
522 int ipu6_buttress_reset_authentication(struct ipu6_device *isp)
527 if (!isp->secure_mode) {
528 dev_dbg(&isp->pdev->dev, "Skip auth for non-secure mode\n");
532 writel(BUTTRESS_FW_RESET_CTL_START, isp->base +
535 ret = readl_poll_timeout(isp->base + BUTTRESS_REG_FW_RESET_CTL, val,
539 dev_err(&isp->pdev->dev,
544 dev_dbg(&isp->pdev->dev, "FW reset for authentication done\n");
545 writel(0, isp->base + BUTTRESS_REG_FW_RESET_CTL);
615 int ipu6_buttress_authenticate(struct ipu6_device *isp)
617 struct ipu6_buttress *b = &isp->buttress;
622 if (!isp->secure_mode) {
623 dev_dbg(&isp->pdev->dev, "Skip auth for non-secure mode\n");
627 psys_pdata = isp->psys->pdata;
631 if (ipu6_buttress_auth_done(isp)) {
640 data = lower_32_bits(isp->psys->pkg_dir_dma_addr);
641 writel(data, isp->base + BUTTRESS_REG_FW_SOURCE_BASE_LO);
643 data = upper_32_bits(isp->psys->pkg_dir_dma_addr);
644 writel(data, isp->base + BUTTRESS_REG_FW_SOURCE_BASE_HI);
651 dev_info(&isp->pdev->dev, "Sending BOOT_LOAD to CSE\n");
653 ret = ipu6_buttress_ipc_send(isp, IPU6_BUTTRESS_IPC_CSE,
658 dev_err(&isp->pdev->dev, "CSE boot_load failed\n");
665 ret = readl_poll_timeout(isp->base + BUTTRESS_REG_SECURITY_CTL, data,
670 dev_err(&isp->pdev->dev, "CSE boot_load timeout\n");
675 dev_err(&isp->pdev->dev, "CSE auth failed\n");
684 dev_err(&isp->pdev->dev, "Unexpected magic number 0x%x\n",
694 dev_info(&isp->pdev->dev, "Sending AUTHENTICATE_RUN to CSE\n");
695 ret = ipu6_buttress_ipc_send(isp, IPU6_BUTTRESS_IPC_CSE,
700 dev_err(&isp->pdev->dev, "CSE authenticate_run failed\n");
705 ret = readl_poll_timeout(isp->base + BUTTRESS_REG_SECURITY_CTL, data,
710 dev_err(&isp->pdev->dev, "CSE authenticate timeout\n");
715 dev_err(&isp->pdev->dev, "CSE boot_load failed\n");
720 dev_info(&isp->pdev->dev, "CSE authenticate_run done\n");
728 static int ipu6_buttress_send_tsc_request(struct ipu6_device *isp)
736 isp->base + BUTTRESS_REG_FABRIC_CMD);
738 val = readl(isp->base + BUTTRESS_REG_PWR_STATE);
741 dev_err(&isp->pdev->dev, "Start tsc sync failed\n");
746 ret = readl_poll_timeout(isp->base + BUTTRESS_REG_PWR_STATE, val,
750 dev_err(&isp->pdev->dev, "Start tsc sync timeout\n");
755 int ipu6_buttress_start_tsc_sync(struct ipu6_device *isp)
763 ret = ipu6_buttress_send_tsc_request(isp);
767 val = readl(isp->base + BUTTRESS_REG_TSW_CTL);
769 writel(val, isp->base + BUTTRESS_REG_TSW_CTL);
771 writel(val, isp->base + BUTTRESS_REG_TSW_CTL);
774 dev_err(&isp->pdev->dev, "TSC sync failed (timeout)\n");
780 void ipu6_buttress_tsc_read(struct ipu6_device *isp, u64 *val)
786 tsc_hi_1 = readl(isp->base + BUTTRESS_REG_TSC_HI);
787 tsc_lo = readl(isp->base + BUTTRESS_REG_TSC_LO);
788 tsc_hi_2 = readl(isp->base + BUTTRESS_REG_TSC_HI);
802 u64 ipu6_buttress_tsc_ticks_to_ns(u64 ticks, const struct ipu6_device *isp)
813 return div_u64(ns, isp->buttress.ref_clk);
817 void ipu6_buttress_restore(struct ipu6_device *isp)
819 struct ipu6_buttress *b = &isp->buttress;
821 writel(BUTTRESS_IRQS, isp->base + BUTTRESS_REG_ISR_CLEAR);
822 writel(BUTTRESS_IRQS, isp->base + BUTTRESS_REG_ISR_ENABLE);
823 writel(b->wdt_cached_value, isp->base + BUTTRESS_REG_WDT);
826 int ipu6_buttress_init(struct ipu6_device *isp)
829 struct ipu6_buttress *b = &isp->buttress;
854 isp->secure_mode = ipu6_buttress_get_secure_mode(isp);
855 dev_info(&isp->pdev->dev, "IPU6 in %s mode touch 0x%x mask 0x%x\n",
856 isp->secure_mode ? "secure" : "non-secure",
857 readl(isp->base + BUTTRESS_REG_SECURITY_TOUCH),
858 readl(isp->base + BUTTRESS_REG_CAMERA_MASK));
860 b->wdt_cached_value = readl(isp->base + BUTTRESS_REG_WDT);
861 writel(BUTTRESS_IRQS, isp->base + BUTTRESS_REG_ISR_CLEAR);
862 writel(BUTTRESS_IRQS, isp->base + BUTTRESS_REG_ISR_ENABLE);
865 val = readl(isp->base + BUTTRESS_REG_BTRS_CTRL);
879 dev_warn(&isp->pdev->dev,
887 ret = ipu6_buttress_ipc_reset(isp, &b->cse);
889 dev_warn(&isp->pdev->dev,
892 dev_dbg(&isp->pdev->dev, "IPC reset done\n");
897 dev_err(&isp->pdev->dev, "IPC reset protocol failed\n");
907 void ipu6_buttress_exit(struct ipu6_device *isp)
909 struct ipu6_buttress *b = &isp->buttress;
911 writel(0, isp->base + BUTTRESS_REG_ISR_ENABLE);