Loading drivers/gpu/msm/adreno.c +25 −7 Original line number Diff line number Diff line Loading @@ -1150,6 +1150,25 @@ out: return status; } static void _adreno_free_memories(struct adreno_device *adreno_dev) { if (test_bit(ADRENO_DEVICE_CMDBATCH_PROFILE, &adreno_dev->priv)) kgsl_free_global(&adreno_dev->cmdbatch_profile_buffer); /* Free local copies of firmware and other command streams */ kfree(adreno_dev->pfp_fw); adreno_dev->pfp_fw = NULL; kfree(adreno_dev->pm4_fw); adreno_dev->pm4_fw = NULL; kfree(adreno_dev->gpmu_cmds); adreno_dev->gpmu_cmds = NULL; kgsl_free_global(&adreno_dev->pm4); kgsl_free_global(&adreno_dev->pfp); } static int adreno_remove(struct platform_device *pdev) { struct adreno_device *adreno_dev = adreno_get_dev(pdev); Loading @@ -1160,8 +1179,8 @@ static int adreno_remove(struct platform_device *pdev) device = &adreno_dev->dev; if (test_bit(ADRENO_DEVICE_CMDBATCH_PROFILE, &adreno_dev->priv)) kgsl_free_global(&adreno_dev->cmdbatch_profile_buffer); /* The memory is fading */ _adreno_free_memories(adreno_dev); #ifdef CONFIG_INPUT input_unregister_handler(&adreno_input_handler); Loading Loading @@ -1502,8 +1521,7 @@ static int _adreno_start(struct adreno_device *adreno_dev) /* Clear FSR here in case it is set from a previous pagefault */ kgsl_mmu_clear_fsr(&device->mmu); status = adreno_ringbuffer_cold_start(adreno_dev); status = adreno_ringbuffer_start(adreno_dev, ADRENO_START_COLD); if (status) goto error_mmu_off; Loading Loading @@ -2125,9 +2143,9 @@ static int adreno_soft_reset(struct kgsl_device *device) */ if (ADRENO_FEATURE(adreno_dev, ADRENO_WARM_START)) ret = adreno_ringbuffer_warm_start(adreno_dev); ret = adreno_ringbuffer_start(adreno_dev, ADRENO_START_WARM); else ret = adreno_ringbuffer_cold_start(adreno_dev); ret = adreno_ringbuffer_start(adreno_dev, ADRENO_START_COLD); if (ret) goto done; Loading Loading @@ -2608,7 +2626,7 @@ static unsigned int adreno_gpuid(struct kgsl_device *device, static int adreno_regulator_enable(struct kgsl_device *device) { int ret; int ret = 0; struct adreno_device *adreno_dev = ADRENO_DEVICE(device); struct adreno_gpudev *gpudev = ADRENO_GPU_DEVICE(adreno_dev); if (gpudev->regulator_enable && Loading drivers/gpu/msm/adreno.h +2 −4 Original line number Diff line number Diff line Loading @@ -158,10 +158,8 @@ enum adreno_gpurev { ADRENO_REV_A530 = 530, }; enum adreno_start_type { ADRENO_START_WARM, ADRENO_START_COLD, }; #define ADRENO_START_WARM 0 #define ADRENO_START_COLD 1 #define ADRENO_SOFT_FAULT BIT(0) #define ADRENO_HARD_FAULT BIT(1) Loading drivers/gpu/msm/adreno_a3xx.c +2 −1 Original line number Diff line number Diff line Loading @@ -1820,7 +1820,8 @@ int a3xx_microcode_load(struct adreno_device *adreno_dev, if (status != 0) return status; } } } else return -EINVAL; return 0; } Loading drivers/gpu/msm/adreno_ringbuffer.c +5 −40 Original line number Diff line number Diff line Loading @@ -328,15 +328,12 @@ static int _ringbuffer_start_common(struct adreno_ringbuffer *rb) } /** * adreno_ringbuffer_warm_start() - Ringbuffer warm start * adreno_ringbuffer_start() - Ringbuffer start * @adreno_dev: Pointer to adreno device * * Start the ringbuffer but load only jump tables part of the * microcode. Only need to start the current active ringbuffer * do not mess with inactive ringbuffers state because they * could contain valid commands. * @start_type: Warm or cold start */ int adreno_ringbuffer_warm_start(struct adreno_device *adreno_dev) int adreno_ringbuffer_start(struct adreno_device *adreno_dev, unsigned int start_type) { int status; struct adreno_ringbuffer *rb = ADRENO_CURRENT_RINGBUFFER(adreno_dev); Loading @@ -344,28 +341,7 @@ int adreno_ringbuffer_warm_start(struct adreno_device *adreno_dev) _ringbuffer_setup_common(rb); status = gpudev->microcode_load(adreno_dev, ADRENO_START_WARM); if (status) return status; return _ringbuffer_start_common(rb); } /** * adreno_ringbuffer_cold_start() - Ringbuffer cold start * @adreno_dev: Pointer to adreno device * * Start the ringbuffers from power collapse. All ringbuffers are started. */ int adreno_ringbuffer_cold_start(struct adreno_device *adreno_dev) { int status; struct adreno_ringbuffer *rb = ADRENO_CURRENT_RINGBUFFER(adreno_dev); struct adreno_gpudev *gpudev = ADRENO_GPU_DEVICE(adreno_dev); _ringbuffer_setup_common(rb); status = gpudev->microcode_load(adreno_dev, ADRENO_START_COLD); status = gpudev->microcode_load(adreno_dev, start_type); if (status) return status; Loading Loading @@ -453,17 +429,6 @@ void adreno_ringbuffer_close(struct adreno_device *adreno_dev) struct adreno_ringbuffer *rb; int i; kfree(adreno_dev->pfp_fw); kfree(adreno_dev->pm4_fw); kfree(adreno_dev->gpmu_cmds); adreno_dev->pfp_fw = NULL; adreno_dev->pm4_fw = NULL; adreno_dev->gpmu_cmds = NULL; kgsl_free_global(&adreno_dev->pm4); kgsl_free_global(&adreno_dev->pfp); FOR_EACH_RINGBUFFER(adreno_dev, rb, i) _adreno_ringbuffer_close(rb); } Loading drivers/gpu/msm/adreno_ringbuffer.h +2 −3 Original line number Diff line number Diff line Loading @@ -147,9 +147,8 @@ int adreno_ringbuffer_submitcmd(struct adreno_device *adreno_dev, int adreno_ringbuffer_init(struct kgsl_device *device); int adreno_ringbuffer_warm_start(struct adreno_device *adreno_dev); int adreno_ringbuffer_cold_start(struct adreno_device *adreno_dev); int adreno_ringbuffer_start(struct adreno_device *adreno_dev, unsigned int start_type); void adreno_ringbuffer_stop(struct adreno_device *adreno_dev); Loading Loading
drivers/gpu/msm/adreno.c +25 −7 Original line number Diff line number Diff line Loading @@ -1150,6 +1150,25 @@ out: return status; } static void _adreno_free_memories(struct adreno_device *adreno_dev) { if (test_bit(ADRENO_DEVICE_CMDBATCH_PROFILE, &adreno_dev->priv)) kgsl_free_global(&adreno_dev->cmdbatch_profile_buffer); /* Free local copies of firmware and other command streams */ kfree(adreno_dev->pfp_fw); adreno_dev->pfp_fw = NULL; kfree(adreno_dev->pm4_fw); adreno_dev->pm4_fw = NULL; kfree(adreno_dev->gpmu_cmds); adreno_dev->gpmu_cmds = NULL; kgsl_free_global(&adreno_dev->pm4); kgsl_free_global(&adreno_dev->pfp); } static int adreno_remove(struct platform_device *pdev) { struct adreno_device *adreno_dev = adreno_get_dev(pdev); Loading @@ -1160,8 +1179,8 @@ static int adreno_remove(struct platform_device *pdev) device = &adreno_dev->dev; if (test_bit(ADRENO_DEVICE_CMDBATCH_PROFILE, &adreno_dev->priv)) kgsl_free_global(&adreno_dev->cmdbatch_profile_buffer); /* The memory is fading */ _adreno_free_memories(adreno_dev); #ifdef CONFIG_INPUT input_unregister_handler(&adreno_input_handler); Loading Loading @@ -1502,8 +1521,7 @@ static int _adreno_start(struct adreno_device *adreno_dev) /* Clear FSR here in case it is set from a previous pagefault */ kgsl_mmu_clear_fsr(&device->mmu); status = adreno_ringbuffer_cold_start(adreno_dev); status = adreno_ringbuffer_start(adreno_dev, ADRENO_START_COLD); if (status) goto error_mmu_off; Loading Loading @@ -2125,9 +2143,9 @@ static int adreno_soft_reset(struct kgsl_device *device) */ if (ADRENO_FEATURE(adreno_dev, ADRENO_WARM_START)) ret = adreno_ringbuffer_warm_start(adreno_dev); ret = adreno_ringbuffer_start(adreno_dev, ADRENO_START_WARM); else ret = adreno_ringbuffer_cold_start(adreno_dev); ret = adreno_ringbuffer_start(adreno_dev, ADRENO_START_COLD); if (ret) goto done; Loading Loading @@ -2608,7 +2626,7 @@ static unsigned int adreno_gpuid(struct kgsl_device *device, static int adreno_regulator_enable(struct kgsl_device *device) { int ret; int ret = 0; struct adreno_device *adreno_dev = ADRENO_DEVICE(device); struct adreno_gpudev *gpudev = ADRENO_GPU_DEVICE(adreno_dev); if (gpudev->regulator_enable && Loading
drivers/gpu/msm/adreno.h +2 −4 Original line number Diff line number Diff line Loading @@ -158,10 +158,8 @@ enum adreno_gpurev { ADRENO_REV_A530 = 530, }; enum adreno_start_type { ADRENO_START_WARM, ADRENO_START_COLD, }; #define ADRENO_START_WARM 0 #define ADRENO_START_COLD 1 #define ADRENO_SOFT_FAULT BIT(0) #define ADRENO_HARD_FAULT BIT(1) Loading
drivers/gpu/msm/adreno_a3xx.c +2 −1 Original line number Diff line number Diff line Loading @@ -1820,7 +1820,8 @@ int a3xx_microcode_load(struct adreno_device *adreno_dev, if (status != 0) return status; } } } else return -EINVAL; return 0; } Loading
drivers/gpu/msm/adreno_ringbuffer.c +5 −40 Original line number Diff line number Diff line Loading @@ -328,15 +328,12 @@ static int _ringbuffer_start_common(struct adreno_ringbuffer *rb) } /** * adreno_ringbuffer_warm_start() - Ringbuffer warm start * adreno_ringbuffer_start() - Ringbuffer start * @adreno_dev: Pointer to adreno device * * Start the ringbuffer but load only jump tables part of the * microcode. Only need to start the current active ringbuffer * do not mess with inactive ringbuffers state because they * could contain valid commands. * @start_type: Warm or cold start */ int adreno_ringbuffer_warm_start(struct adreno_device *adreno_dev) int adreno_ringbuffer_start(struct adreno_device *adreno_dev, unsigned int start_type) { int status; struct adreno_ringbuffer *rb = ADRENO_CURRENT_RINGBUFFER(adreno_dev); Loading @@ -344,28 +341,7 @@ int adreno_ringbuffer_warm_start(struct adreno_device *adreno_dev) _ringbuffer_setup_common(rb); status = gpudev->microcode_load(adreno_dev, ADRENO_START_WARM); if (status) return status; return _ringbuffer_start_common(rb); } /** * adreno_ringbuffer_cold_start() - Ringbuffer cold start * @adreno_dev: Pointer to adreno device * * Start the ringbuffers from power collapse. All ringbuffers are started. */ int adreno_ringbuffer_cold_start(struct adreno_device *adreno_dev) { int status; struct adreno_ringbuffer *rb = ADRENO_CURRENT_RINGBUFFER(adreno_dev); struct adreno_gpudev *gpudev = ADRENO_GPU_DEVICE(adreno_dev); _ringbuffer_setup_common(rb); status = gpudev->microcode_load(adreno_dev, ADRENO_START_COLD); status = gpudev->microcode_load(adreno_dev, start_type); if (status) return status; Loading Loading @@ -453,17 +429,6 @@ void adreno_ringbuffer_close(struct adreno_device *adreno_dev) struct adreno_ringbuffer *rb; int i; kfree(adreno_dev->pfp_fw); kfree(adreno_dev->pm4_fw); kfree(adreno_dev->gpmu_cmds); adreno_dev->pfp_fw = NULL; adreno_dev->pm4_fw = NULL; adreno_dev->gpmu_cmds = NULL; kgsl_free_global(&adreno_dev->pm4); kgsl_free_global(&adreno_dev->pfp); FOR_EACH_RINGBUFFER(adreno_dev, rb, i) _adreno_ringbuffer_close(rb); } Loading
drivers/gpu/msm/adreno_ringbuffer.h +2 −3 Original line number Diff line number Diff line Loading @@ -147,9 +147,8 @@ int adreno_ringbuffer_submitcmd(struct adreno_device *adreno_dev, int adreno_ringbuffer_init(struct kgsl_device *device); int adreno_ringbuffer_warm_start(struct adreno_device *adreno_dev); int adreno_ringbuffer_cold_start(struct adreno_device *adreno_dev); int adreno_ringbuffer_start(struct adreno_device *adreno_dev, unsigned int start_type); void adreno_ringbuffer_stop(struct adreno_device *adreno_dev); Loading