summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bifrost/r9p0/kernel/drivers/gpu/arm/midgard/platform/devicetree/mali_clock.c11
-rw-r--r--dvalin/kernel/drivers/gpu/arm/midgard/platform/devicetree/mali_clock.c11
-rw-r--r--mali/linux/mali_internal_sync.c16
3 files changed, 29 insertions, 9 deletions
diff --git a/bifrost/r9p0/kernel/drivers/gpu/arm/midgard/platform/devicetree/mali_clock.c b/bifrost/r9p0/kernel/drivers/gpu/arm/midgard/platform/devicetree/mali_clock.c
index 3ead511..d131a4b 100644
--- a/bifrost/r9p0/kernel/drivers/gpu/arm/midgard/platform/devicetree/mali_clock.c
+++ b/bifrost/r9p0/kernel/drivers/gpu/arm/midgard/platform/devicetree/mali_clock.c
@@ -374,12 +374,17 @@ int mali_dt_info(struct platform_device *pdev, struct mali_plat_info_t *mpdata)
#else
int mali_clock_init_clk_tree(struct platform_device* pdev)
{
- //mali_dvfs_threshold_table *dvfs_tbl = &pmali_plat->dvfs_table[pmali_plat->def_clock];
+ mali_dvfs_threshold_table *dvfs_tbl = &pmali_plat->dvfs_table[pmali_plat->def_clock];
struct clk *clk_mali = pmali_plat->clk_mali;
+ if ((0 == strcmp(dvfs_tbl->clk_parent, "gp0_pll")) &&
+ !IS_ERR(dvfs_tbl->clkp_handle) &&
+ (0 != dvfs_tbl->clkp_freq)) {
+ clk_prepare_enable(dvfs_tbl->clkp_handle);
+ clk_set_rate(dvfs_tbl->clkp_handle, dvfs_tbl->clkp_freq);
+ }
clk_prepare_enable(clk_mali);
- clk_set_rate(clk_mali, 500000000);
- clk_set_rate(clk_mali, 667000000);
+ clk_set_rate(clk_mali, dvfs_tbl->clk_freq);
return 0;
}
diff --git a/dvalin/kernel/drivers/gpu/arm/midgard/platform/devicetree/mali_clock.c b/dvalin/kernel/drivers/gpu/arm/midgard/platform/devicetree/mali_clock.c
index 3ead511..d131a4b 100644
--- a/dvalin/kernel/drivers/gpu/arm/midgard/platform/devicetree/mali_clock.c
+++ b/dvalin/kernel/drivers/gpu/arm/midgard/platform/devicetree/mali_clock.c
@@ -374,12 +374,17 @@ int mali_dt_info(struct platform_device *pdev, struct mali_plat_info_t *mpdata)
#else
int mali_clock_init_clk_tree(struct platform_device* pdev)
{
- //mali_dvfs_threshold_table *dvfs_tbl = &pmali_plat->dvfs_table[pmali_plat->def_clock];
+ mali_dvfs_threshold_table *dvfs_tbl = &pmali_plat->dvfs_table[pmali_plat->def_clock];
struct clk *clk_mali = pmali_plat->clk_mali;
+ if ((0 == strcmp(dvfs_tbl->clk_parent, "gp0_pll")) &&
+ !IS_ERR(dvfs_tbl->clkp_handle) &&
+ (0 != dvfs_tbl->clkp_freq)) {
+ clk_prepare_enable(dvfs_tbl->clkp_handle);
+ clk_set_rate(dvfs_tbl->clkp_handle, dvfs_tbl->clkp_freq);
+ }
clk_prepare_enable(clk_mali);
- clk_set_rate(clk_mali, 500000000);
- clk_set_rate(clk_mali, 667000000);
+ clk_set_rate(clk_mali, dvfs_tbl->clk_freq);
return 0;
}
diff --git a/mali/linux/mali_internal_sync.c b/mali/linux/mali_internal_sync.c
index d8939dc..a951cef 100644
--- a/mali/linux/mali_internal_sync.c
+++ b/mali/linux/mali_internal_sync.c
@@ -95,7 +95,8 @@ static void mali_internal_fence_check_cb_func(struct dma_fence *fence, struct dm
ret =sync_fence->fence->ops->signaled(sync_fence->fence);
if (0 > ret)
- MALI_PRINT_ERROR(("Mali internal sync:Failed to wait fence 0x%x for sync_fence 0x%x.\n", fence, sync_fence));
+ trace_printk("Mali internal sync:fence signaled? ret=%d, fence 0x%p for sync_fence 0x%p.\n", ret, fence, sync_fence);
+
if (1 == ret)
wake_up_all(&sync_fence->wq);
#endif
@@ -549,8 +550,10 @@ int mali_internal_sync_fence_wait_async(struct mali_internal_sync_fence *sync_fe
else
err = -1;
- if (0 > err)
+ if (0 > err) {
+ trace_printk("Mali, line%d, signal error\n", __LINE__);
return err;
+ }
if (1 == err)
return err;
@@ -561,8 +564,12 @@ int mali_internal_sync_fence_wait_async(struct mali_internal_sync_fence *sync_fe
err = fence_add_callback(sync_fence->fence, &waiter->cb, mali_internal_fence_check_cb_func);
#endif
- if (0 != err)
+ if (0 != err) {
+ trace_printk("Mali, fence_add_callback error %d\n", err);
+ if (-ENOENT == err)
+ err = 1;
return err;
+ }
init_waitqueue_func_entry(&waiter->work, mali_internal_sync_fence_wake_up_wq);
waiter->work.private = sync_fence;
@@ -572,7 +579,10 @@ int mali_internal_sync_fence_wait_async(struct mali_internal_sync_fence *sync_fe
if (0 == err)
__add_wait_queue_tail(&sync_fence->wq, &waiter->work);
+
spin_unlock_irqrestore(&sync_fence->wq.lock, flags);
+ if ((1 != err) && (0 != err))
+ trace_printk("Mali, line%d, signal error\n", __LINE__);
return err;
#endif