diff --git a/drivers/gpu/msm/adreno.c b/drivers/gpu/msm/adreno.c index 0d986b7100ecfa26ee8e6ddd2b183ba4a65f40fc..0a8712f270a8dd3ed3f23309087254f0968b4d53 100644 --- a/drivers/gpu/msm/adreno.c +++ b/drivers/gpu/msm/adreno.c @@ -1761,14 +1761,12 @@ static int adreno_start(struct kgsl_device *device) kgsl_pwrctrl_irq(device, KGSL_PWRFLAGS_ON); device->ftbl->irqctrl(device, 1); + adreno_perfcounter_start(adreno_dev); + status = adreno_ringbuffer_cold_start(&adreno_dev->ringbuffer); if (status) goto error_irq_off; - status = adreno_perfcounter_start(adreno_dev); - if (status) - goto error_rb_stop; - /* Start the dispatcher */ adreno_dispatcher_start(device); @@ -1778,8 +1776,6 @@ static int adreno_start(struct kgsl_device *device) return 0; -error_rb_stop: - adreno_ringbuffer_stop(&adreno_dev->ringbuffer); error_irq_off: kgsl_pwrctrl_irq(device, KGSL_PWRFLAGS_OFF); @@ -1832,7 +1828,6 @@ static int adreno_stop(struct kgsl_device *device) adreno_dev->drawctxt_active = NULL; adreno_dispatcher_stop(adreno_dev); - adreno_ringbuffer_stop(&adreno_dev->ringbuffer); device->ftbl->irqctrl(device, 0); kgsl_pwrctrl_irq(device, KGSL_PWRFLAGS_OFF); @@ -2437,9 +2432,6 @@ int adreno_soft_reset(struct kgsl_device *device) adreno_dev->drawctxt_active = NULL; - /* Stop the ringbuffer */ - adreno_ringbuffer_stop(&adreno_dev->ringbuffer); - if (kgsl_pwrctrl_isenabled(device)) device->ftbl->irqctrl(device, 0); diff --git a/drivers/gpu/msm/adreno_ringbuffer.c b/drivers/gpu/msm/adreno_ringbuffer.c index 6b0eb7389c232a2d506ca0794e024cb11a3f0408..b9c7c1ca0576a321f288ab84013e2673a813a86b 100644 --- a/drivers/gpu/msm/adreno_ringbuffer.c +++ b/drivers/gpu/msm/adreno_ringbuffer.c @@ -436,9 +436,6 @@ int _ringbuffer_start_common(struct adreno_ringbuffer *rb) /* idle device to validate ME INIT */ status = adreno_idle(device); - if (status == 0) - rb->flags |= KGSL_FLAGS_STARTED; - return status; } @@ -455,9 +452,6 @@ int adreno_ringbuffer_warm_start(struct adreno_ringbuffer *rb) struct kgsl_device *device = rb->device; struct adreno_device *adreno_dev = ADRENO_DEVICE(device); - if (rb->flags & KGSL_FLAGS_STARTED) - return 0; - _ringbuffer_setup_common(rb); /* If bootstrapping if supported to load jump tables */ @@ -499,8 +493,6 @@ int adreno_ringbuffer_cold_start(struct adreno_ringbuffer *rb) struct kgsl_device *device = rb->device; struct adreno_device *adreno_dev = ADRENO_DEVICE(device); - if (rb->flags & KGSL_FLAGS_STARTED) - return 0; _ringbuffer_setup_common(rb); @@ -550,19 +542,6 @@ int adreno_ringbuffer_cold_start(struct adreno_ringbuffer *rb) return status; } -void adreno_ringbuffer_stop(struct adreno_ringbuffer *rb) -{ - struct kgsl_device *device = rb->device; - struct adreno_device *adreno_dev = ADRENO_DEVICE(device); - - if (rb->flags & KGSL_FLAGS_STARTED) { - if (adreno_is_a200(adreno_dev)) - kgsl_regwrite(rb->device, REG_CP_ME_CNTL, 0x10000000); - - rb->flags &= ~KGSL_FLAGS_STARTED; - } -} - int adreno_ringbuffer_init(struct kgsl_device *device) { int status; diff --git a/drivers/gpu/msm/adreno_ringbuffer.h b/drivers/gpu/msm/adreno_ringbuffer.h index 697e113c576d30e203f5e8a457c52362426548f5..59c60cebdfc391f06b536ac1fb64f5038a432f81 100644 --- a/drivers/gpu/msm/adreno_ringbuffer.h +++ b/drivers/gpu/msm/adreno_ringbuffer.h @@ -75,8 +75,6 @@ int adreno_ringbuffer_warm_start(struct adreno_ringbuffer *rb); int adreno_ringbuffer_cold_start(struct adreno_ringbuffer *rb); -void adreno_ringbuffer_stop(struct adreno_ringbuffer *rb); - void adreno_ringbuffer_close(struct adreno_ringbuffer *rb); unsigned int adreno_ringbuffer_issuecmds(struct kgsl_device *device, diff --git a/drivers/gpu/msm/kgsl_iommu.c b/drivers/gpu/msm/kgsl_iommu.c index f8f56a8dea0bd7fc1844177a773d9225f542b6d1..cd2aa1c2b455fedbc33bcbbeca2387718e0a514f 100644 --- a/drivers/gpu/msm/kgsl_iommu.c +++ b/drivers/gpu/msm/kgsl_iommu.c @@ -1256,19 +1256,17 @@ static int kgsl_iommu_setstate(struct kgsl_mmu *mmu, { int ret = 0; - if (mmu->flags & KGSL_FLAGS_STARTED) { - /* page table not current, then setup mmu to use new - * specified page table - */ - if (mmu->hwpagetable != pagetable) { - unsigned int flags = 0; - mmu->hwpagetable = pagetable; - flags |= kgsl_mmu_pt_get_flags(mmu->hwpagetable, - mmu->device->id) | - KGSL_MMUFLAGS_TLBFLUSH; - ret = kgsl_setstate(mmu, context_id, - KGSL_MMUFLAGS_PTUPDATE | flags); - } + /* page table not current, then setup mmu to use new + * specified page table + */ + if (mmu->hwpagetable != pagetable) { + unsigned int flags = 0; + mmu->hwpagetable = pagetable; + flags |= kgsl_mmu_pt_get_flags(mmu->hwpagetable, + mmu->device->id) | + KGSL_MMUFLAGS_TLBFLUSH; + ret = kgsl_setstate(mmu, context_id, + KGSL_MMUFLAGS_PTUPDATE | flags); } return ret; @@ -1660,9 +1658,6 @@ static int kgsl_iommu_start(struct kgsl_mmu *mmu) int sctlr_val = 0; struct adreno_device *adreno_dev = ADRENO_DEVICE(mmu->device); - if (mmu->flags & KGSL_FLAGS_STARTED) - return 0; - if (mmu->defaultpagetable == NULL) { status = kgsl_iommu_setup_defaultpagetable(mmu); if (status) @@ -1740,7 +1735,6 @@ static int kgsl_iommu_start(struct kgsl_mmu *mmu) cp_nop_packet(1), sizeof(unsigned int)); kgsl_iommu_disable_clk(mmu, KGSL_IOMMU_MAX_UNITS); - mmu->flags |= KGSL_FLAGS_STARTED; done: return status; @@ -1884,16 +1878,12 @@ static void kgsl_iommu_stop(struct kgsl_mmu *mmu) * stop device mmu * * call this with the global lock held + * detach iommu attachment */ - if (mmu->flags & KGSL_FLAGS_STARTED) { - /* detach iommu attachment */ - kgsl_detach_pagetable_iommu_domain(mmu); - mmu->hwpagetable = NULL; + kgsl_detach_pagetable_iommu_domain(mmu); + mmu->hwpagetable = NULL; - mmu->flags &= ~KGSL_FLAGS_STARTED; - - kgsl_iommu_pagefault_resume(mmu); - } + kgsl_iommu_pagefault_resume(mmu); /* switch off MMU clocks and cancel any events it has queued */ kgsl_cancel_events(mmu->device, mmu); }