Lines Matching refs:rknpu_dev

209 static int rknpu_power_on(struct rknpu_device *rknpu_dev);
210 static int rknpu_power_off(struct rknpu_device *rknpu_dev);
214 struct rknpu_device *rknpu_dev = in rknpu_power_off_delay_work() local
217 mutex_lock(&rknpu_dev->power_lock); in rknpu_power_off_delay_work()
218 if (atomic_dec_if_positive(&rknpu_dev->power_refcount) == 0) in rknpu_power_off_delay_work()
219 rknpu_power_off(rknpu_dev); in rknpu_power_off_delay_work()
220 mutex_unlock(&rknpu_dev->power_lock); in rknpu_power_off_delay_work()
223 int rknpu_power_get(struct rknpu_device *rknpu_dev) in rknpu_power_get() argument
227 mutex_lock(&rknpu_dev->power_lock); in rknpu_power_get()
228 if (atomic_inc_return(&rknpu_dev->power_refcount) == 1) in rknpu_power_get()
229 ret = rknpu_power_on(rknpu_dev); in rknpu_power_get()
230 mutex_unlock(&rknpu_dev->power_lock); in rknpu_power_get()
235 int rknpu_power_put(struct rknpu_device *rknpu_dev) in rknpu_power_put() argument
239 mutex_lock(&rknpu_dev->power_lock); in rknpu_power_put()
240 if (atomic_dec_if_positive(&rknpu_dev->power_refcount) == 0) in rknpu_power_put()
241 ret = rknpu_power_off(rknpu_dev); in rknpu_power_put()
242 mutex_unlock(&rknpu_dev->power_lock); in rknpu_power_put()
247 static int rknpu_power_put_delay(struct rknpu_device *rknpu_dev) in rknpu_power_put_delay() argument
249 if (rknpu_dev->power_put_delay == 0) in rknpu_power_put_delay()
250 return rknpu_power_put(rknpu_dev); in rknpu_power_put_delay()
252 mutex_lock(&rknpu_dev->power_lock); in rknpu_power_put_delay()
253 if (atomic_read(&rknpu_dev->power_refcount) == 1) in rknpu_power_put_delay()
255 rknpu_dev->power_off_wq, &rknpu_dev->power_off_work, in rknpu_power_put_delay()
256 msecs_to_jiffies(rknpu_dev->power_put_delay)); in rknpu_power_put_delay()
258 atomic_dec_if_positive(&rknpu_dev->power_refcount); in rknpu_power_put_delay()
259 mutex_unlock(&rknpu_dev->power_lock); in rknpu_power_put_delay()
264 static int rknpu_action(struct rknpu_device *rknpu_dev, in rknpu_action() argument
271 ret = rknpu_get_hw_version(rknpu_dev, &args->value); in rknpu_action()
278 args->value = clk_get_rate(rknpu_dev->clks[0].clk); in rknpu_action()
286 args->value = regulator_get_voltage(rknpu_dev->vdd); in rknpu_action()
293 ret = rknpu_soft_reset(rknpu_dev); in rknpu_action()
296 ret = rknpu_get_bw_priority(rknpu_dev, &args->value, NULL, in rknpu_action()
300 ret = rknpu_set_bw_priority(rknpu_dev, args->value, 0, 0); in rknpu_action()
303 ret = rknpu_get_bw_priority(rknpu_dev, NULL, &args->value, in rknpu_action()
307 ret = rknpu_set_bw_priority(rknpu_dev, 0, args->value, 0); in rknpu_action()
310 ret = rknpu_get_bw_priority(rknpu_dev, NULL, NULL, in rknpu_action()
314 ret = rknpu_set_bw_priority(rknpu_dev, 0, 0, args->value); in rknpu_action()
317 ret = rknpu_clear_rw_amount(rknpu_dev); in rknpu_action()
320 ret = rknpu_get_rw_amount(rknpu_dev, &args->value, NULL, NULL); in rknpu_action()
323 ret = rknpu_get_rw_amount(rknpu_dev, NULL, &args->value, NULL); in rknpu_action()
326 ret = rknpu_get_rw_amount(rknpu_dev, NULL, NULL, &args->value); in rknpu_action()
329 ret = rknpu_get_total_rw_amount(rknpu_dev, &args->value); in rknpu_action()
332 args->value = rknpu_dev->iommu_en; in rknpu_action()
340 if (rknpu_dev->sram_mm) in rknpu_action()
341 args->value = rknpu_dev->sram_mm->total_chunks * in rknpu_action()
342 rknpu_dev->sram_mm->chunk_size; in rknpu_action()
348 if (rknpu_dev->sram_mm) in rknpu_action()
349 args->value = rknpu_dev->sram_mm->free_chunks * in rknpu_action()
350 rknpu_dev->sram_mm->chunk_size; in rknpu_action()
366 struct rknpu_device *rknpu_dev = in rknpu_open() local
376 session->rknpu_dev = rknpu_dev; in rknpu_open()
388 struct rknpu_device *rknpu_dev = session->rknpu_dev; in rknpu_release() local
391 spin_lock(&rknpu_dev->lock); in rknpu_release()
394 spin_unlock(&rknpu_dev->lock); in rknpu_release()
419 static int rknpu_action_ioctl(struct rknpu_device *rknpu_dev, in rknpu_action_ioctl() argument
432 ret = rknpu_action(rknpu_dev, &args); in rknpu_action_ioctl()
447 struct rknpu_device *rknpu_dev = NULL; in rknpu_ioctl() local
452 rknpu_dev = ((struct rknpu_session *)file->private_data)->rknpu_dev; in rknpu_ioctl()
454 rknpu_power_get(rknpu_dev); in rknpu_ioctl()
458 ret = rknpu_action_ioctl(rknpu_dev, arg); in rknpu_ioctl()
461 ret = rknpu_submit_ioctl(rknpu_dev, arg); in rknpu_ioctl()
464 ret = rknpu_mem_create_ioctl(rknpu_dev, arg, file); in rknpu_ioctl()
469 ret = rknpu_mem_destroy_ioctl(rknpu_dev, arg, file); in rknpu_ioctl()
472 ret = rknpu_mem_sync_ioctl(rknpu_dev, arg); in rknpu_ioctl()
478 rknpu_power_put_delay(rknpu_dev); in rknpu_ioctl()
505 struct rknpu_device *rknpu_dev = dev_get_drvdata(dev->dev); in rknpu_action_ioctl() local
507 return rknpu_action(rknpu_dev, (struct rknpu_action *)data); in rknpu_action_ioctl()
514 struct rknpu_device *rknpu_dev = dev_get_drvdata(dev->dev); \
516 rknpu_power_get(rknpu_dev); \
518 rknpu_power_put_delay(rknpu_dev); \
601 struct rknpu_device *rknpu_dev = in hrtimer_handler() local
609 for (i = 0; i < rknpu_dev->config->num_irqs; i++) { in hrtimer_handler()
610 subcore_data = &rknpu_dev->subcore_datas[i]; in hrtimer_handler()
612 spin_lock_irqsave(&rknpu_dev->irq_lock, flags); in hrtimer_handler()
624 spin_unlock_irqrestore(&rknpu_dev->irq_lock, flags); in hrtimer_handler()
627 hrtimer_forward_now(timer, rknpu_dev->kt); in hrtimer_handler()
631 static void rknpu_init_timer(struct rknpu_device *rknpu_dev) in rknpu_init_timer() argument
633 rknpu_dev->kt = ktime_set(0, RKNPU_LOAD_INTERVAL); in rknpu_init_timer()
634 hrtimer_init(&rknpu_dev->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); in rknpu_init_timer()
635 rknpu_dev->timer.function = hrtimer_handler; in rknpu_init_timer()
636 hrtimer_start(&rknpu_dev->timer, rknpu_dev->kt, HRTIMER_MODE_REL); in rknpu_init_timer()
639 static void rknpu_cancel_timer(struct rknpu_device *rknpu_dev) in rknpu_cancel_timer() argument
641 hrtimer_cancel(&rknpu_dev->timer); in rknpu_cancel_timer()
670 static int rknpu_drm_probe(struct rknpu_device *rknpu_dev) in rknpu_drm_probe() argument
672 struct device *dev = rknpu_dev->dev; in rknpu_drm_probe()
685 drm_dev->dev_private = rknpu_dev; in rknpu_drm_probe()
686 rknpu_dev->drm_dev = drm_dev; in rknpu_drm_probe()
700 static void rknpu_drm_remove(struct rknpu_device *rknpu_dev) in rknpu_drm_remove() argument
702 struct drm_device *drm_dev = rknpu_dev->drm_dev; in rknpu_drm_remove()
714 static int rknpu_power_on(struct rknpu_device *rknpu_dev) in rknpu_power_on() argument
716 struct device *dev = rknpu_dev->dev; in rknpu_power_on()
720 if (rknpu_dev->vdd) { in rknpu_power_on()
721 ret = regulator_enable(rknpu_dev->vdd); in rknpu_power_on()
731 if (rknpu_dev->mem) { in rknpu_power_on()
732 ret = regulator_enable(rknpu_dev->mem); in rknpu_power_on()
743 ret = clk_bulk_prepare_enable(rknpu_dev->num_clks, rknpu_dev->clks); in rknpu_power_on()
753 rockchip_monitor_volt_adjust_lock(rknpu_dev->mdev_info); in rknpu_power_on()
757 if (rknpu_dev->multiple_domains) { in rknpu_power_on()
758 if (rknpu_dev->genpd_dev_npu0) { in rknpu_power_on()
761 rknpu_dev->genpd_dev_npu0); in rknpu_power_on()
763 ret = pm_runtime_get_sync(rknpu_dev->genpd_dev_npu0); in rknpu_power_on()
773 if (rknpu_dev->genpd_dev_npu1) { in rknpu_power_on()
776 rknpu_dev->genpd_dev_npu1); in rknpu_power_on()
778 ret = pm_runtime_get_sync(rknpu_dev->genpd_dev_npu1); in rknpu_power_on()
788 if (rknpu_dev->genpd_dev_npu2) { in rknpu_power_on()
791 rknpu_dev->genpd_dev_npu2); in rknpu_power_on()
793 ret = pm_runtime_get_sync(rknpu_dev->genpd_dev_npu2); in rknpu_power_on()
815 rockchip_monitor_volt_adjust_unlock(rknpu_dev->mdev_info); in rknpu_power_on()
822 static int rknpu_power_off(struct rknpu_device *rknpu_dev) in rknpu_power_off() argument
824 struct device *dev = rknpu_dev->dev; in rknpu_power_off()
832 rockchip_monitor_volt_adjust_lock(rknpu_dev->mdev_info); in rknpu_power_off()
838 if (rknpu_dev->multiple_domains) { in rknpu_power_off()
858 rknpu_dev->mdev_info); in rknpu_power_off()
863 if (rknpu_dev->iommu_en) in rknpu_power_off()
866 if (rknpu_dev->genpd_dev_npu2) in rknpu_power_off()
867 pm_runtime_put_sync(rknpu_dev->genpd_dev_npu2); in rknpu_power_off()
868 if (rknpu_dev->genpd_dev_npu1) in rknpu_power_off()
869 pm_runtime_put_sync(rknpu_dev->genpd_dev_npu1); in rknpu_power_off()
870 if (rknpu_dev->genpd_dev_npu0) in rknpu_power_off()
871 pm_runtime_put_sync(rknpu_dev->genpd_dev_npu0); in rknpu_power_off()
877 rockchip_monitor_volt_adjust_unlock(rknpu_dev->mdev_info); in rknpu_power_off()
881 clk_bulk_disable_unprepare(rknpu_dev->num_clks, rknpu_dev->clks); in rknpu_power_off()
884 if (rknpu_dev->vdd) in rknpu_power_off()
885 regulator_disable(rknpu_dev->vdd); in rknpu_power_off()
887 if (rknpu_dev->mem) in rknpu_power_off()
888 regulator_disable(rknpu_dev->mem); in rknpu_power_off()
916 struct rknpu_device *rknpu_dev = dev_get_drvdata(dev); in npu_opp_helper() local
917 struct rockchip_opp_info *opp_info = &rknpu_dev->opp_info; in npu_opp_helper()
1020 struct rknpu_device *rknpu_dev = dev_get_drvdata(dev); in npu_devfreq_target() local
1035 rockchip_monitor_volt_adjust_lock(rknpu_dev->mdev_info); in npu_devfreq_target()
1039 rknpu_dev->current_freq = *freq; in npu_devfreq_target()
1040 if (rknpu_dev->devfreq) in npu_devfreq_target()
1041 rknpu_dev->devfreq->last_status.current_frequency = in npu_devfreq_target()
1043 rknpu_dev->current_volt = opp_volt; in npu_devfreq_target()
1045 rknpu_dev->current_freq, rknpu_dev->current_volt); in npu_devfreq_target()
1048 rockchip_monitor_volt_adjust_unlock(rknpu_dev->mdev_info); in npu_devfreq_target()
1059 struct rknpu_device *rknpu_dev = dev_get_drvdata(dev); in npu_devfreq_target() local
1062 unsigned long old_freq = rknpu_dev->current_freq; in npu_devfreq_target()
1063 unsigned long volt, old_volt = rknpu_dev->current_volt; in npu_devfreq_target()
1090 ret = regulator_set_voltage(rknpu_dev->vdd, volt, INT_MAX); in npu_devfreq_target()
1095 rknpu_dev->current_volt = volt; in npu_devfreq_target()
1099 if (rknpu_dev->vdd && old_volt != volt && old_freq < freq) { in npu_devfreq_target()
1100 ret = regulator_set_voltage(rknpu_dev->vdd, volt, INT_MAX); in npu_devfreq_target()
1109 ret = clk_set_rate(rknpu_dev->clks[0].clk, freq); in npu_devfreq_target()
1115 rknpu_dev->current_freq = freq; in npu_devfreq_target()
1117 if (rknpu_dev->devfreq) in npu_devfreq_target()
1118 rknpu_dev->devfreq->last_status.current_frequency = freq; in npu_devfreq_target()
1120 if (rknpu_dev->vdd && old_volt != volt && old_freq > freq) { in npu_devfreq_target()
1121 ret = regulator_set_voltage(rknpu_dev->vdd, volt, INT_MAX); in npu_devfreq_target()
1128 rknpu_dev->current_volt = volt; in npu_devfreq_target()
1131 rknpu_dev->current_freq, rknpu_dev->current_volt); in npu_devfreq_target()
1145 struct rknpu_device *rknpu_dev = dev_get_drvdata(dev); in npu_devfreq_get_cur_freq() local
1147 *freq = rknpu_dev->current_freq; in npu_devfreq_get_cur_freq()
1163 struct rknpu_device *rknpu_dev = df->data; in devfreq_rknpu_ondemand_func() local
1165 if (rknpu_dev) in devfreq_rknpu_ondemand_func()
1166 *freq = rknpu_dev->ondemand_freq; in devfreq_rknpu_ondemand_func()
1191 struct rknpu_device *rknpu_dev = dev_get_drvdata(dev); in npu_get_static_power() local
1193 if (!rknpu_dev->model_data) in npu_get_static_power()
1196 return rockchip_ipa_get_static_power(rknpu_dev->model_data, voltage); in npu_get_static_power()
1309 static int rknpu_devfreq_init(struct rknpu_device *rknpu_dev) in rknpu_devfreq_init() argument
1311 struct device *dev = rknpu_dev->dev; in rknpu_devfreq_init()
1336 rockchip_get_opp_data(rockchip_npu_of_match, &rknpu_dev->opp_info); in rknpu_devfreq_init()
1337 ret = rockchip_init_opp_table(dev, &rknpu_dev->opp_info, "npu_leakage", in rknpu_devfreq_init()
1344 rknpu_dev->current_freq = clk_get_rate(rknpu_dev->clks[0].clk); in rknpu_devfreq_init()
1346 opp = devfreq_recommended_opp(dev, &rknpu_dev->current_freq, 0); in rknpu_devfreq_init()
1352 dp->initial_freq = rknpu_dev->current_freq; in rknpu_devfreq_init()
1362 rknpu_dev->devfreq = devm_devfreq_add_device(dev, dp, "rknpu_ondemand", in rknpu_devfreq_init()
1363 (void *)rknpu_dev); in rknpu_devfreq_init()
1364 if (IS_ERR(rknpu_dev->devfreq)) { in rknpu_devfreq_init()
1366 ret = PTR_ERR(rknpu_dev->devfreq); in rknpu_devfreq_init()
1369 devm_devfreq_register_opp_notifier(dev, rknpu_dev->devfreq); in rknpu_devfreq_init()
1371 rknpu_dev->devfreq->last_status.current_frequency = dp->initial_freq; in rknpu_devfreq_init()
1372 rknpu_dev->devfreq->last_status.total_time = 1; in rknpu_devfreq_init()
1373 rknpu_dev->devfreq->last_status.busy_time = 1; in rknpu_devfreq_init()
1375 npu_mdevp.data = rknpu_dev->devfreq; in rknpu_devfreq_init()
1376 npu_mdevp.opp_info = &rknpu_dev->opp_info; in rknpu_devfreq_init()
1377 rknpu_dev->mdev_info = in rknpu_devfreq_init()
1379 if (IS_ERR(rknpu_dev->mdev_info)) { in rknpu_devfreq_init()
1381 rknpu_dev->mdev_info = NULL; in rknpu_devfreq_init()
1384 rknpu_dev->current_freq = clk_get_rate(rknpu_dev->clks[0].clk); in rknpu_devfreq_init()
1385 rknpu_dev->current_volt = regulator_get_voltage(rknpu_dev->vdd); in rknpu_devfreq_init()
1389 rknpu_dev->model_data = in rknpu_devfreq_init()
1391 if (IS_ERR_OR_NULL(rknpu_dev->model_data)) { in rknpu_devfreq_init()
1392 rknpu_dev->model_data = NULL; in rknpu_devfreq_init()
1394 } else if (rknpu_dev->model_data->dynamic_coefficient) { in rknpu_devfreq_init()
1396 rknpu_dev->model_data->dynamic_coefficient; in rknpu_devfreq_init()
1403 rknpu_dev->devfreq_cooling = of_devfreq_cooling_register_power( in rknpu_devfreq_init()
1404 dev->of_node, rknpu_dev->devfreq, &npu_cooling_power); in rknpu_devfreq_init()
1405 if (IS_ERR_OR_NULL(rknpu_dev->devfreq_cooling)) in rknpu_devfreq_init()
1418 rknpu_dev->devfreq = NULL; in rknpu_devfreq_init()
1426 struct rknpu_device *rknpu_dev) in npu_devfreq_adjust_current_freq_volt() argument
1432 old_freq = clk_get_rate(rknpu_dev->clks[0].clk); in npu_devfreq_adjust_current_freq_volt()
1446 if (freq >= old_freq && rknpu_dev->vdd) { in npu_devfreq_adjust_current_freq_volt()
1447 ret = regulator_set_voltage(rknpu_dev->vdd, volt, INT_MAX); in npu_devfreq_adjust_current_freq_volt()
1455 ret = clk_set_rate(rknpu_dev->clks[0].clk, freq); in npu_devfreq_adjust_current_freq_volt()
1460 if (freq < old_freq && rknpu_dev->vdd) { in npu_devfreq_adjust_current_freq_volt()
1461 ret = regulator_set_voltage(rknpu_dev->vdd, volt, INT_MAX); in npu_devfreq_adjust_current_freq_volt()
1467 rknpu_dev->current_freq = freq; in npu_devfreq_adjust_current_freq_volt()
1468 rknpu_dev->current_volt = volt; in npu_devfreq_adjust_current_freq_volt()
1473 static int rknpu_devfreq_init(struct rknpu_device *rknpu_dev) in rknpu_devfreq_init() argument
1475 struct device *dev = rknpu_dev->dev; in rknpu_devfreq_init()
1485 ret = npu_devfreq_adjust_current_freq_volt(dev, rknpu_dev); in rknpu_devfreq_init()
1490 dp->initial_freq = rknpu_dev->current_freq; in rknpu_devfreq_init()
1500 rknpu_dev->devfreq = devm_devfreq_add_device(dev, dp, "rknpu_ondemand", in rknpu_devfreq_init()
1501 (void *)rknpu_dev); in rknpu_devfreq_init()
1502 if (IS_ERR(rknpu_dev->devfreq)) { in rknpu_devfreq_init()
1504 ret = PTR_ERR(rknpu_dev->devfreq); in rknpu_devfreq_init()
1507 devm_devfreq_register_opp_notifier(dev, rknpu_dev->devfreq); in rknpu_devfreq_init()
1509 rknpu_dev->devfreq->last_status.current_frequency = dp->initial_freq; in rknpu_devfreq_init()
1510 rknpu_dev->devfreq->last_status.total_time = 1; in rknpu_devfreq_init()
1511 rknpu_dev->devfreq->last_status.busy_time = 1; in rknpu_devfreq_init()
1513 npu_mdevp.data = rknpu_dev->devfreq; in rknpu_devfreq_init()
1514 rknpu_dev->mdev_info = in rknpu_devfreq_init()
1516 if (IS_ERR(rknpu_dev->mdev_info)) { in rknpu_devfreq_init()
1518 rknpu_dev->mdev_info = NULL; in rknpu_devfreq_init()
1520 rknpu_dev->current_freq = clk_get_rate(rknpu_dev->clks[0].clk); in rknpu_devfreq_init()
1521 rknpu_dev->current_volt = regulator_get_voltage(rknpu_dev->vdd); in rknpu_devfreq_init()
1525 rknpu_dev->model_data = in rknpu_devfreq_init()
1527 if (IS_ERR_OR_NULL(rknpu_dev->model_data)) { in rknpu_devfreq_init()
1528 rknpu_dev->model_data = NULL; in rknpu_devfreq_init()
1530 } else if (rknpu_dev->model_data->dynamic_coefficient) { in rknpu_devfreq_init()
1532 rknpu_dev->model_data->dynamic_coefficient; in rknpu_devfreq_init()
1540 rknpu_dev->devfreq_cooling = of_devfreq_cooling_register_power( in rknpu_devfreq_init()
1541 dev->of_node, rknpu_dev->devfreq, &npu_cooling_power); in rknpu_devfreq_init()
1542 if (IS_ERR_OR_NULL(rknpu_dev->devfreq_cooling)) in rknpu_devfreq_init()
1555 rknpu_dev->devfreq = NULL; in rknpu_devfreq_init()
1562 static int rknpu_devfreq_remove(struct rknpu_device *rknpu_dev) in rknpu_devfreq_remove() argument
1564 if (rknpu_dev->devfreq) { in rknpu_devfreq_remove()
1565 devfreq_unregister_opp_notifier(rknpu_dev->dev, in rknpu_devfreq_remove()
1566 rknpu_dev->devfreq); in rknpu_devfreq_remove()
1567 dev_pm_opp_of_remove_table(rknpu_dev->dev); in rknpu_devfreq_remove()
1579 struct rknpu_device *rknpu_dev) in rknpu_register_irq() argument
1581 const struct rknpu_config *config = rknpu_dev->config; in rknpu_register_irq()
1605 rknpu_dev); in rknpu_register_irq()
1621 IRQF_SHARED, dev_name(dev), rknpu_dev); in rknpu_register_irq()
1638 IRQF_SHARED, dev_name(dev), rknpu_dev); in rknpu_register_irq()
1650 static int rknpu_find_sram_resource(struct rknpu_device *rknpu_dev) in rknpu_find_sram_resource() argument
1652 struct device *dev = rknpu_dev->dev; in rknpu_find_sram_resource()
1660 rknpu_dev->sram_size = 0; in rknpu_find_sram_resource()
1671 rknpu_dev->sram_start = round_up(sram_res.start, PAGE_SIZE); in rknpu_find_sram_resource()
1672 rknpu_dev->sram_end = round_down( in rknpu_find_sram_resource()
1674 if (rknpu_dev->sram_end <= rknpu_dev->sram_start) { in rknpu_find_sram_resource()
1678 &rknpu_dev->sram_start, &rknpu_dev->sram_end); in rknpu_find_sram_resource()
1682 sram_size = rknpu_dev->sram_end - rknpu_dev->sram_start; in rknpu_find_sram_resource()
1684 rknpu_dev->sram_base_io = in rknpu_find_sram_resource()
1685 devm_ioremap(dev, rknpu_dev->sram_start, sram_size); in rknpu_find_sram_resource()
1686 if (IS_ERR(rknpu_dev->sram_base_io)) { in rknpu_find_sram_resource()
1688 rknpu_dev->sram_base_io = NULL; in rknpu_find_sram_resource()
1691 rknpu_dev->sram_size = sram_size; in rknpu_find_sram_resource()
1694 &rknpu_dev->sram_start, &rknpu_dev->sram_end, in rknpu_find_sram_resource()
1695 rknpu_dev->sram_size); in rknpu_find_sram_resource()
1700 static int rknpu_find_nbuf_resource(struct rknpu_device *rknpu_dev) in rknpu_find_nbuf_resource() argument
1702 struct device *dev = rknpu_dev->dev; in rknpu_find_nbuf_resource()
1704 if (rknpu_dev->config->nbuf_size == 0) in rknpu_find_nbuf_resource()
1707 rknpu_dev->nbuf_start = rknpu_dev->config->nbuf_phyaddr; in rknpu_find_nbuf_resource()
1708 rknpu_dev->nbuf_size = rknpu_dev->config->nbuf_size; in rknpu_find_nbuf_resource()
1709 rknpu_dev->nbuf_base_io = in rknpu_find_nbuf_resource()
1710 devm_ioremap(dev, rknpu_dev->nbuf_start, rknpu_dev->nbuf_size); in rknpu_find_nbuf_resource()
1711 if (IS_ERR(rknpu_dev->nbuf_base_io)) { in rknpu_find_nbuf_resource()
1713 rknpu_dev->nbuf_base_io = NULL; in rknpu_find_nbuf_resource()
1716 rknpu_dev->nbuf_end = rknpu_dev->nbuf_start + rknpu_dev->nbuf_size; in rknpu_find_nbuf_resource()
1719 &rknpu_dev->nbuf_start, &rknpu_dev->nbuf_end, in rknpu_find_nbuf_resource()
1720 rknpu_dev->nbuf_size); in rknpu_find_nbuf_resource()
1728 struct rknpu_device *rknpu_dev = NULL; in rknpu_probe() local
1746 rknpu_dev = devm_kzalloc(dev, sizeof(*rknpu_dev), GFP_KERNEL); in rknpu_probe()
1747 if (!rknpu_dev) { in rknpu_probe()
1756 rknpu_dev->config = config; in rknpu_probe()
1757 rknpu_dev->dev = dev; in rknpu_probe()
1759 rknpu_dev->iommu_en = rknpu_is_iommu_enable(dev); in rknpu_probe()
1760 if (!rknpu_dev->iommu_en) { in rknpu_probe()
1770 rknpu_dev->bypass_irq_handler = bypass_irq_handler; in rknpu_probe()
1771 rknpu_dev->bypass_soft_reset = bypass_soft_reset; in rknpu_probe()
1773 rknpu_reset_get(rknpu_dev); in rknpu_probe()
1775 rknpu_dev->num_clks = devm_clk_bulk_get_all(dev, &rknpu_dev->clks); in rknpu_probe()
1776 if (rknpu_dev->num_clks < 1) { in rknpu_probe()
1786 if (strstr(__clk_get_name(rknpu_dev->clks[0].clk), "scmi")) in rknpu_probe()
1787 rknpu_dev->opp_info.scmi_clk = rknpu_dev->clks[0].clk; in rknpu_probe()
1790 rknpu_dev->vdd = devm_regulator_get_optional(dev, "rknpu"); in rknpu_probe()
1791 if (IS_ERR(rknpu_dev->vdd)) { in rknpu_probe()
1792 if (PTR_ERR(rknpu_dev->vdd) != -ENODEV) { in rknpu_probe()
1793 ret = PTR_ERR(rknpu_dev->vdd); in rknpu_probe()
1800 rknpu_dev->vdd = NULL; in rknpu_probe()
1803 rknpu_dev->mem = devm_regulator_get_optional(dev, "mem"); in rknpu_probe()
1804 if (IS_ERR(rknpu_dev->mem)) { in rknpu_probe()
1805 if (PTR_ERR(rknpu_dev->mem) != -ENODEV) { in rknpu_probe()
1806 ret = PTR_ERR(rknpu_dev->mem); in rknpu_probe()
1813 rknpu_dev->mem = NULL; in rknpu_probe()
1817 spin_lock_init(&rknpu_dev->lock); in rknpu_probe()
1818 spin_lock_init(&rknpu_dev->irq_lock); in rknpu_probe()
1819 mutex_init(&rknpu_dev->power_lock); in rknpu_probe()
1820 mutex_init(&rknpu_dev->reset_lock); in rknpu_probe()
1822 INIT_LIST_HEAD(&rknpu_dev->subcore_datas[i].todo_list); in rknpu_probe()
1823 init_waitqueue_head(&rknpu_dev->subcore_datas[i].job_done_wq); in rknpu_probe()
1824 rknpu_dev->subcore_datas[i].task_num = 0; in rknpu_probe()
1833 rknpu_dev->base[i] = devm_ioremap_resource(dev, res); in rknpu_probe()
1834 if (PTR_ERR(rknpu_dev->base[i]) == -EBUSY) { in rknpu_probe()
1835 rknpu_dev->base[i] = devm_ioremap(dev, res->start, in rknpu_probe()
1839 if (IS_ERR(rknpu_dev->base[i])) { in rknpu_probe()
1842 return PTR_ERR(rknpu_dev->base[i]); in rknpu_probe()
1847 rknpu_dev->bw_priority_base = in rknpu_probe()
1850 if (IS_ERR(rknpu_dev->bw_priority_base)) { in rknpu_probe()
1852 rknpu_dev->dev, in rknpu_probe()
1854 rknpu_dev->bw_priority_base = NULL; in rknpu_probe()
1858 if (!rknpu_dev->bypass_irq_handler) { in rknpu_probe()
1859 ret = rknpu_register_irq(pdev, rknpu_dev); in rknpu_probe()
1867 ret = rknpu_drm_probe(rknpu_dev); in rknpu_probe()
1874 rknpu_dev->miscdev.minor = MISC_DYNAMIC_MINOR; in rknpu_probe()
1875 rknpu_dev->miscdev.name = "rknpu"; in rknpu_probe()
1876 rknpu_dev->miscdev.fops = &rknpu_fops; in rknpu_probe()
1878 ret = misc_register(&rknpu_dev->miscdev); in rknpu_probe()
1884 rknpu_dev->heap = rk_dma_heap_find("rk-dma-heap-cma"); in rknpu_probe()
1885 if (!rknpu_dev->heap) { in rknpu_probe()
1896 ret = rknpu_fence_context_alloc(rknpu_dev); in rknpu_probe()
1904 platform_set_drvdata(pdev, rknpu_dev); in rknpu_probe()
1912 rknpu_dev->genpd_dev_npu0 = virt_dev; in rknpu_probe()
1915 rknpu_dev->genpd_dev_npu1 = virt_dev; in rknpu_probe()
1918 rknpu_dev->genpd_dev_npu2 = virt_dev; in rknpu_probe()
1919 rknpu_dev->multiple_domains = true; in rknpu_probe()
1922 ret = rknpu_power_on(rknpu_dev); in rknpu_probe()
1928 rknpu_devfreq_init(rknpu_dev); in rknpu_probe()
1933 rknpu_dev->power_put_delay = 3000; in rknpu_probe()
1934 rknpu_dev->power_off_wq = in rknpu_probe()
1936 if (!rknpu_dev->power_off_wq) { in rknpu_probe()
1941 INIT_DEFERRABLE_WORK(&rknpu_dev->power_off_work, in rknpu_probe()
1945 IS_ENABLED(CONFIG_ROCKCHIP_RKNPU_SRAM) && rknpu_dev->iommu_en) { in rknpu_probe()
1946 if (!rknpu_find_sram_resource(rknpu_dev)) { in rknpu_probe()
1947 ret = rknpu_mm_create(rknpu_dev->sram_size, PAGE_SIZE, in rknpu_probe()
1948 &rknpu_dev->sram_mm); in rknpu_probe()
1956 if (IS_ENABLED(CONFIG_NO_GKI) && rknpu_dev->iommu_en && in rknpu_probe()
1957 rknpu_dev->config->nbuf_size > 0) in rknpu_probe()
1958 rknpu_find_nbuf_resource(rknpu_dev); in rknpu_probe()
1960 rknpu_power_off(rknpu_dev); in rknpu_probe()
1961 atomic_set(&rknpu_dev->power_refcount, 0); in rknpu_probe()
1962 atomic_set(&rknpu_dev->cmdline_power_refcount, 0); in rknpu_probe()
1964 rknpu_debugger_init(rknpu_dev); in rknpu_probe()
1965 rknpu_init_timer(rknpu_dev); in rknpu_probe()
1970 destroy_workqueue(rknpu_dev->power_off_wq); in rknpu_probe()
1974 rknpu_devfreq_remove(rknpu_dev); in rknpu_probe()
1979 rknpu_drm_remove(rknpu_dev); in rknpu_probe()
1982 misc_deregister(&(rknpu_dev->miscdev)); in rknpu_probe()
1990 struct rknpu_device *rknpu_dev = platform_get_drvdata(pdev); in rknpu_remove() local
1993 cancel_delayed_work_sync(&rknpu_dev->power_off_work); in rknpu_remove()
1994 destroy_workqueue(rknpu_dev->power_off_wq); in rknpu_remove()
1996 if (IS_ENABLED(CONFIG_ROCKCHIP_RKNPU_SRAM) && rknpu_dev->sram_mm) in rknpu_remove()
1997 rknpu_mm_destroy(rknpu_dev->sram_mm); in rknpu_remove()
1999 rknpu_debugger_remove(rknpu_dev); in rknpu_remove()
2000 rknpu_cancel_timer(rknpu_dev); in rknpu_remove()
2002 for (i = 0; i < rknpu_dev->config->num_irqs; i++) { in rknpu_remove()
2003 WARN_ON(rknpu_dev->subcore_datas[i].job); in rknpu_remove()
2004 WARN_ON(!list_empty(&rknpu_dev->subcore_datas[i].todo_list)); in rknpu_remove()
2008 rknpu_drm_remove(rknpu_dev); in rknpu_remove()
2011 misc_deregister(&(rknpu_dev->miscdev)); in rknpu_remove()
2015 rknpu_devfreq_remove(rknpu_dev); in rknpu_remove()
2018 mutex_lock(&rknpu_dev->power_lock); in rknpu_remove()
2019 if (atomic_read(&rknpu_dev->power_refcount) > 0) in rknpu_remove()
2020 rknpu_power_off(rknpu_dev); in rknpu_remove()
2021 mutex_unlock(&rknpu_dev->power_lock); in rknpu_remove()
2023 if (rknpu_dev->multiple_domains) { in rknpu_remove()
2024 if (rknpu_dev->genpd_dev_npu0) in rknpu_remove()
2025 dev_pm_domain_detach(rknpu_dev->genpd_dev_npu0, true); in rknpu_remove()
2026 if (rknpu_dev->genpd_dev_npu1) in rknpu_remove()
2027 dev_pm_domain_detach(rknpu_dev->genpd_dev_npu1, true); in rknpu_remove()
2028 if (rknpu_dev->genpd_dev_npu2) in rknpu_remove()
2029 dev_pm_domain_detach(rknpu_dev->genpd_dev_npu2, true); in rknpu_remove()
2042 struct rknpu_device *rknpu_dev = dev_get_drvdata(dev); in rknpu_runtime_suspend() local
2043 struct rockchip_opp_info *opp_info = &rknpu_dev->opp_info; in rknpu_runtime_suspend()
2056 struct rknpu_device *rknpu_dev = dev_get_drvdata(dev); in rknpu_runtime_resume() local
2057 struct rockchip_opp_info *opp_info = &rknpu_dev->opp_info; in rknpu_runtime_resume()
2060 if (!rknpu_dev->current_freq || !rknpu_dev->current_volt) in rknpu_runtime_resume()
2073 if (clk_set_rate(opp_info->scmi_clk, rknpu_dev->current_freq)) in rknpu_runtime_resume()