Lines Matching full:scheduler

46 	struct rve_scheduler_t *scheduler = NULL;  in hrtimer_handler()  local
55 scheduler = rve->scheduler[i]; in hrtimer_handler()
57 spin_lock_irqsave(&scheduler->irq_lock, flags); in hrtimer_handler()
60 job = scheduler->running_job; in hrtimer_handler()
62 scheduler->timer.busy_time += ktime_us_delta(now, job->hw_recoder_time); in hrtimer_handler()
66 scheduler->timer.busy_time_record = scheduler->timer.busy_time; in hrtimer_handler()
67 scheduler->timer.busy_time = 0; in hrtimer_handler()
70 scheduler->session.rd_bandwidth = 0; in hrtimer_handler()
71 scheduler->session.wr_bandwidth = 0; in hrtimer_handler()
72 scheduler->session.cycle_cnt = 0; in hrtimer_handler()
75 if (scheduler->session.pid_info[i].pid > 0) in hrtimer_handler()
76 scheduler->session.pid_info[i].hw_time_total = 0; in hrtimer_handler()
79 spin_unlock_irqrestore(&scheduler->irq_lock, flags); in hrtimer_handler()
111 int rve_power_enable(struct rve_scheduler_t *scheduler) in rve_power_enable() argument
116 pm_runtime_get_sync(scheduler->dev); in rve_power_enable()
117 pm_stay_awake(scheduler->dev); in rve_power_enable()
119 for (i = 0; i < scheduler->num_clks; i++) { in rve_power_enable()
120 if (!IS_ERR(scheduler->clks[i])) { in rve_power_enable()
121 ret = clk_prepare_enable(scheduler->clks[i]); in rve_power_enable()
127 scheduler->session.pd_refcount++; in rve_power_enable()
133 if (!IS_ERR(scheduler->clks[i])) in rve_power_enable()
134 clk_disable_unprepare(scheduler->clks[i]); in rve_power_enable()
136 pm_relax(scheduler->dev); in rve_power_enable()
137 pm_runtime_put_sync_suspend(scheduler->dev); in rve_power_enable()
142 int rve_power_disable(struct rve_scheduler_t *scheduler) in rve_power_disable() argument
146 for (i = scheduler->num_clks - 1; i >= 0; i--) in rve_power_disable()
147 if (!IS_ERR(scheduler->clks[i])) in rve_power_disable()
148 clk_disable_unprepare(scheduler->clks[i]); in rve_power_disable()
150 pm_relax(scheduler->dev); in rve_power_disable()
151 pm_runtime_put_sync_suspend(scheduler->dev); in rve_power_disable()
153 scheduler->session.pd_refcount--; in rve_power_disable()
412 memcpy(&hw_versions.version[i], &rve->scheduler[i]->version, in rve_ioctl()
413 sizeof(rve->scheduler[i]->version)); in rve_ioctl()
532 struct rve_scheduler_t *scheduler = data; in rve_irq_handler() local
535 error_flag = rve_read(RVE_SWREG6_IVE_WORK_STA, scheduler); in rve_irq_handler()
545 scheduler->ops->soft_reset(scheduler); in rve_irq_handler()
549 rve_write(0x30000, RVE_SWREG1_IVE_IRQ, scheduler); in rve_irq_handler()
556 struct rve_scheduler_t *scheduler = data; in rve_irq_thread() local
560 job = scheduler->running_job; in rve_irq_thread()
561 scheduler->session.total_int_cnt++; in rve_irq_thread()
568 error_flag = rve_read(RVE_SWREG6_IVE_WORK_STA, scheduler); in rve_irq_thread()
588 rve_job_done(scheduler, 0); in rve_irq_thread()
634 static void init_scheduler(struct rve_scheduler_t *scheduler, in init_scheduler() argument
637 spin_lock_init(&scheduler->irq_lock); in init_scheduler()
638 INIT_LIST_HEAD(&scheduler->todo_list); in init_scheduler()
639 init_waitqueue_head(&scheduler->job_done_wq); in init_scheduler()
642 scheduler->ops = &rve_ops; in init_scheduler()
643 scheduler->core = RVE_SCHEDULER_CORE0; in init_scheduler()
656 struct rve_scheduler_t *scheduler = NULL; in rve_drv_probe() local
669 scheduler = in rve_drv_probe()
672 if (scheduler == NULL) { in rve_drv_probe()
673 pr_err("failed to allocate scheduler. dev name = %s\n", in rve_drv_probe()
678 init_scheduler(scheduler, dev_driver_string(dev)); in rve_drv_probe()
680 scheduler->dev = &pdev->dev; in rve_drv_probe()
689 scheduler->rve_base = in rve_drv_probe()
691 if (!scheduler->rve_base) { in rve_drv_probe()
707 scheduler->irq = irq; in rve_drv_probe()
709 pr_info("%s, irq = %d, match scheduler\n", in rve_drv_probe()
715 dev_driver_string(dev), scheduler); in rve_drv_probe()
729 scheduler->clks[i] = clk; in rve_drv_probe()
731 scheduler->num_clks = match_data->num_clks; in rve_drv_probe()
734 platform_set_drvdata(pdev, scheduler); in rve_drv_probe()
742 ret = pm_runtime_get_sync(scheduler->dev); in rve_drv_probe()
749 for (i = 0; i < scheduler->num_clks; i++) { in rve_drv_probe()
750 if (!IS_ERR(scheduler->clks[i])) { in rve_drv_probe()
751 ret = clk_prepare_enable(scheduler->clks[i]); in rve_drv_probe()
760 scheduler->ops->get_version(scheduler); in rve_drv_probe()
762 scheduler->version.str); in rve_drv_probe()
764 data->scheduler[data->num_of_scheduler] = scheduler; in rve_drv_probe()
769 for (i = scheduler->num_clks - 1; i >= 0; i--) in rve_drv_probe()
770 if (!IS_ERR(scheduler->clks[i])) in rve_drv_probe()
771 clk_disable_unprepare(scheduler->clks[i]); in rve_drv_probe()