Loading drivers/gpu/msm/adreno.c +5 −0 Original line number Diff line number Diff line Loading @@ -112,6 +112,11 @@ static struct adreno_device device_3d0 = { .active_list_lock = __SPIN_LOCK_UNLOCKED(device_3d0.active_list_lock), .gpu_llc_slice_enable = true, .gpuhtw_llc_slice_enable = true, .preempt = { .preempt_level = 1, .skipsaverestore = 1, .usesgmem = 1, }, }; /* Ptr to array for the current set of fault detect registers */ Loading drivers/gpu/msm/adreno.h +6 −4 Original line number Diff line number Diff line Loading @@ -260,6 +260,9 @@ enum adreno_preempt_states { * @work: A work struct for the preemption worker (for 5XX) * @token_submit: Indicates if a preempt token has been submitted in * current ringbuffer (for 4XX) * preempt_level: The level of preemption (for 6XX) * skipsaverestore: To skip saverestore during L1 preemption (for 6XX) * usesgmem: enable GMEM save/restore across preemption (for 6XX) */ struct adreno_preemption { atomic_t state; Loading @@ -267,6 +270,9 @@ struct adreno_preemption { struct timer_list timer; struct work_struct work; bool token_submit; unsigned int preempt_level; bool skipsaverestore; bool usesgmem; }; Loading Loading @@ -485,10 +491,6 @@ struct adreno_device { void *gpuhtw_llc_slice; bool gpuhtw_llc_slice_enable; unsigned int zap_loaded; unsigned int preempt_level; bool usesgmem; bool skipsaverestore; }; /** Loading drivers/gpu/msm/adreno_a6xx_preempt.c +4 −3 Original line number Diff line number Diff line Loading @@ -208,10 +208,11 @@ void a6xx_preemption_trigger(struct adreno_device *adreno_dev) unsigned int contextidr; unsigned long flags; uint32_t preempt_level, usesgmem, skipsaverestore; struct adreno_preemption *preempt = &adreno_dev->preempt; preempt_level = adreno_dev->preempt_level; usesgmem = adreno_dev->usesgmem; skipsaverestore = adreno_dev->skipsaverestore; preempt_level = preempt->preempt_level; usesgmem = preempt->usesgmem; skipsaverestore = preempt->skipsaverestore; /* Put ourselves into a possible trigger state */ if (!adreno_move_preempt_state(adreno_dev, Loading drivers/gpu/msm/adreno_sysfs.c +18 −6 Original line number Diff line number Diff line Loading @@ -54,38 +54,50 @@ static unsigned int _ft_policy_show(struct adreno_device *adreno_dev) static int _preempt_level_store(struct adreno_device *adreno_dev, unsigned int val) { struct adreno_preemption *preempt = &adreno_dev->preempt; if (val <= 2) adreno_dev->preempt_level = val; preempt->preempt_level = val; return 0; } static unsigned int _preempt_level_show(struct adreno_device *adreno_dev) { return adreno_dev->preempt_level; struct adreno_preemption *preempt = &adreno_dev->preempt; return preempt->preempt_level; } static int _usesgmem_store(struct adreno_device *adreno_dev, unsigned int val) { adreno_dev->usesgmem = val ? 1 : 0; struct adreno_preemption *preempt = &adreno_dev->preempt; preempt->usesgmem = val ? 1 : 0; return 0; } static unsigned int _usesgmem_show(struct adreno_device *adreno_dev) { return adreno_dev->usesgmem; struct adreno_preemption *preempt = &adreno_dev->preempt; return preempt->usesgmem; } static int _skipsaverestore_store(struct adreno_device *adreno_dev, unsigned int val) { adreno_dev->skipsaverestore = val ? 1 : 0; struct adreno_preemption *preempt = &adreno_dev->preempt; preempt->skipsaverestore = val ? 1 : 0; return 0; } static unsigned int _skipsaverestore_show(struct adreno_device *adreno_dev) { return adreno_dev->skipsaverestore; struct adreno_preemption *preempt = &adreno_dev->preempt; return preempt->skipsaverestore; } static int _ft_pagefault_policy_store(struct adreno_device *adreno_dev, Loading Loading
drivers/gpu/msm/adreno.c +5 −0 Original line number Diff line number Diff line Loading @@ -112,6 +112,11 @@ static struct adreno_device device_3d0 = { .active_list_lock = __SPIN_LOCK_UNLOCKED(device_3d0.active_list_lock), .gpu_llc_slice_enable = true, .gpuhtw_llc_slice_enable = true, .preempt = { .preempt_level = 1, .skipsaverestore = 1, .usesgmem = 1, }, }; /* Ptr to array for the current set of fault detect registers */ Loading
drivers/gpu/msm/adreno.h +6 −4 Original line number Diff line number Diff line Loading @@ -260,6 +260,9 @@ enum adreno_preempt_states { * @work: A work struct for the preemption worker (for 5XX) * @token_submit: Indicates if a preempt token has been submitted in * current ringbuffer (for 4XX) * preempt_level: The level of preemption (for 6XX) * skipsaverestore: To skip saverestore during L1 preemption (for 6XX) * usesgmem: enable GMEM save/restore across preemption (for 6XX) */ struct adreno_preemption { atomic_t state; Loading @@ -267,6 +270,9 @@ struct adreno_preemption { struct timer_list timer; struct work_struct work; bool token_submit; unsigned int preempt_level; bool skipsaverestore; bool usesgmem; }; Loading Loading @@ -485,10 +491,6 @@ struct adreno_device { void *gpuhtw_llc_slice; bool gpuhtw_llc_slice_enable; unsigned int zap_loaded; unsigned int preempt_level; bool usesgmem; bool skipsaverestore; }; /** Loading
drivers/gpu/msm/adreno_a6xx_preempt.c +4 −3 Original line number Diff line number Diff line Loading @@ -208,10 +208,11 @@ void a6xx_preemption_trigger(struct adreno_device *adreno_dev) unsigned int contextidr; unsigned long flags; uint32_t preempt_level, usesgmem, skipsaverestore; struct adreno_preemption *preempt = &adreno_dev->preempt; preempt_level = adreno_dev->preempt_level; usesgmem = adreno_dev->usesgmem; skipsaverestore = adreno_dev->skipsaverestore; preempt_level = preempt->preempt_level; usesgmem = preempt->usesgmem; skipsaverestore = preempt->skipsaverestore; /* Put ourselves into a possible trigger state */ if (!adreno_move_preempt_state(adreno_dev, Loading
drivers/gpu/msm/adreno_sysfs.c +18 −6 Original line number Diff line number Diff line Loading @@ -54,38 +54,50 @@ static unsigned int _ft_policy_show(struct adreno_device *adreno_dev) static int _preempt_level_store(struct adreno_device *adreno_dev, unsigned int val) { struct adreno_preemption *preempt = &adreno_dev->preempt; if (val <= 2) adreno_dev->preempt_level = val; preempt->preempt_level = val; return 0; } static unsigned int _preempt_level_show(struct adreno_device *adreno_dev) { return adreno_dev->preempt_level; struct adreno_preemption *preempt = &adreno_dev->preempt; return preempt->preempt_level; } static int _usesgmem_store(struct adreno_device *adreno_dev, unsigned int val) { adreno_dev->usesgmem = val ? 1 : 0; struct adreno_preemption *preempt = &adreno_dev->preempt; preempt->usesgmem = val ? 1 : 0; return 0; } static unsigned int _usesgmem_show(struct adreno_device *adreno_dev) { return adreno_dev->usesgmem; struct adreno_preemption *preempt = &adreno_dev->preempt; return preempt->usesgmem; } static int _skipsaverestore_store(struct adreno_device *adreno_dev, unsigned int val) { adreno_dev->skipsaverestore = val ? 1 : 0; struct adreno_preemption *preempt = &adreno_dev->preempt; preempt->skipsaverestore = val ? 1 : 0; return 0; } static unsigned int _skipsaverestore_show(struct adreno_device *adreno_dev) { return adreno_dev->skipsaverestore; struct adreno_preemption *preempt = &adreno_dev->preempt; return preempt->skipsaverestore; } static int _ft_pagefault_policy_store(struct adreno_device *adreno_dev, Loading