summaryrefslogtreecommitdiff
path: root/drivers/gpu
AgeCommit message (Collapse)Author
2016-05-18msm: kgsl: Port GPU bus dcvs to kernel 4.4Oleg Perelet
Port GPU dcvs from kernel 3.18 to kernel 4.4. CRs-Fixed: 1013343 Change-Id: Ide662b12aa59effa541febcd758426e72b4a1b12 Signed-off-by: Oleg Perelet <operelet@codeaurora.org>
2016-05-11msm: kgsl: Add property to determine GPU bitnessSunil Khatri
Add the property to determine GPU bitness which is used by the clients via KGSL ioctl. Certain clients of KGSL such as Open-CL driver need to know explicitly about the GPU mode. Change-Id: I77523d7816edb9776014aaf3aa85321af0d20aaf Signed-off-by: Sunil Khatri <sunilkh@codeaurora.org>
2016-05-11msm: kgsl: Use the crash dumper to read HLSQ/shader memory on 5XXJordan Crouse
The host AHB aperture for reading the HSLQ/SP/TP and shader memory blocks might be blocked on A5XX targets so use the CP crash dump utility to read them instead. Downside if the crashdumper goes boom we'll have to skip those registers in the fallback. Change-Id: Ic0dedbad3c7b485c696198bdfcb78d45e929ec22 Signed-off-by: Jordan Crouse <jcrouse@codeaurora.org>
2016-05-11msm: kgsl: Add effuses read capabilities for A505 GPUHareesh Gundu
A505 GPU is having two different frequency plans, for loading a specific frequency plan add speed bin read information capability to A505. Change-Id: I259020d7e4613d043e213ab2cb41e80ceb11f46a Signed-off-by: Hareesh Gundu <hareeshg@codeaurora.org>
2016-05-11msm: kgsl: Do not allocate memory for profiling and sync commandsSunil Khatri
Do not allocate memory for IB descriptors for commands of types profiling buffers, sync and markers. This fixes the memory leak due to allocation of memory for such commands and these were never freed. CRs-Fixed: 996651 Change-Id: Ib168d60ad89e0fd55cd1f10b773b7cdaa7400ace Signed-off-by: Sunil Khatri <sunilkh@codeaurora.org>
2016-05-11msm: kgsl: Add 1M and 8K pools to the allocatorShrenuj Bansal
This change includes the below: - Add 1M and 8k pools and structure the allocator to use all pools from the largest page to the smallest - Reserve a set number of pages for each of these pools at init time - When allocating, use the reserved pools and then fall back to allocating from system memory using only 8k and 4k pages - Remove maximums on the pool sizes - Zero the memory when we create the pool initially and add pages back to the pool on free CRs-Fixed: 995735 Change-Id: I9440bad62d3e13b434902f167c9d23467b1c4235 Signed-off-by: Shrenuj Bansal <shrenujb@codeaurora.org>
2016-05-05msm: kgsl: Remove harmless preemption log messageHarshdeep Dhatt
This message is logged when we receive a preemption interrupt after we have already detected that preemption has been finished in hardware by reading the preemption status register. This is a harmless condition so remove it. CRs-Fixed: 993480 Change-Id: I61a48353428b3faa042fbc85e259b33c7f23bdb0 Signed-off-by: Harshdeep Dhatt <hdhatt@codeaurora.org>
2016-05-05msm: kgsl: Fix overflow in sharedmem read/write functionsSunil Khatri
There could be possibility of integer overflow on adding sizeof(uint32_t) with uint64_t maximum offset bytes and result in a value smaller than uint64_t maximum memdesc size. CRs-Fixed: 988861 Change-Id: Ifc3ec45297c2a29ad6f7d70dd0bd59238ac8cc3d Signed-off-by: Sunil Khatri <sunilkh@codeaurora.org>
2016-05-05msm: kgsl: Add MMU offset mapping functionsCarter Cooper
Allow MMU mappings to take offsets rather than only allowing full range mappings. CRs-Fixed: 971174 Change-Id: Iaa113c8414a2d2d8f92b3cb21eaf2e422f273454 Signed-off-by: Carter Cooper <ccooper@codeaurora.org>
2016-05-05msm: kgsl: Dump 64KB of preemption record in snapshotHarshdeep Dhatt
Dumping only the ctxt_record structure in a snapshot is not enough. For a more meaningful snapshot, dump 64KB of preempt record. Also, move the code to device specific snapshot function. Change-Id: I43e08ccefbf2d3911191b2aad5168979956e1626 Signed-off-by: Harshdeep Dhatt <hdhatt@codeaurora.org>
2016-05-05msm: kgsl: Clean up adreno trace codeCarter Cooper
Give trace code for IRQs a simpler format that moves around where some logic lives. CRs-Fixed: 971172 Change-Id: If426fb7599be0a79b6f37b8008a2310b1c006e93 Signed-off-by: Carter Cooper <ccooper@codeaurora.org>
2016-05-05msm: kgsl: Don't spam kmsg due to invalid IOCTL requestsCarter Cooper
When the IOCTL is called with invalid data, don't log to kmsg. The returned error code should be enough to tell the UMD what they did wrong. CRs-Fixed: 987074 Change-Id: Iae380e0f44dd53bee8ff4cec347a6b9a632b1f84 Signed-off-by: Carter Cooper <ccooper@codeaurora.org>
2016-05-05msm: kgsl: Remove superfluous NULL checks when reading timestampsCarter Cooper
There is no way for the UMD to pass in NULL pointers for reading timestamps. The KGSL driver also always has valid pointers for storing the readpointer. Remove the checks that are not needed. Change-Id: Id5f244a57a2b991a10b603ef7236193d4282fd0f Signed-off-by: Carter Cooper <ccooper@codeaurora.org>
2016-05-05msm: kgsl: Purge unused #definesCarter Cooper
Remove unused #defines, structs and members that are no longer used. CRs-Fixed: 971156 Change-Id: Ibdf6fef6f3f700f3c5315c228c0473e47fb62163 Signed-off-by: Carter Cooper <ccooper@codeaurora.org> Signed-off-by: Jordan Crouse <jcrouse@codeaurora.org>
2016-05-05msm: kgsl: Use a page pool to reduce allocation timeDeepak Kumar
Use a mempool to reduce the allocation time. When memory allocated from pages is freed, put it in a page pool. At allocation time, try to allocate from the page pool before getting pages from the system. Make sure that the pool does not grow too big by enforcing a maximum limit. Change-Id: Icac7fb4355ee1fd07e7127ea5c2721665e279272 Signed-off-by: Deepak Kumar <dkumar@codeaurora.org>
2016-05-05msm: kgsl: Check for failure in coresight initializationSunil Khatri
We need to check for both NULL pointer and error condition in coresight initialization and return with proper error. CR's-Fixed: 971398 Change-Id: Id1e3e0f756ac1c9a0ff4f4e6ce073e80e31473b8 Signed-off-by: Sunil Khatri <sunilkh@codeaurora.org>
2016-05-03msm: kgsl: Disable ISENSE CGCOleg Perelet
Disable GPU ISENSE clock gating as workaround of ISENSE HW issue. CRs-Fixed: 973565 Change-Id: If54caf008c654f488986a279bd19bea97457dc2c Signed-off-by: Oleg Perelet <operelet@codeaurora.org>
2016-04-29msm: kgsl: Explicitly set ISENSE clock rate for A540.Oleg Perelet
On A540 ISENSE clock rate is controlled by GPU driver. CRs-Fixed: 973565 Change-Id: Iab40cff01b6e65db51a4b793572714d2059a78ad Signed-off-by: Oleg Perelet <operelet@codeaurora.org>
2016-04-22msm: kgsl: Update ucode workarounds for A5xx GPUsPrakash Kamliya
Update ucode workarounds for A5xx GPUs based on new microcode and hardware changes. CRs-Fixed: 1000396 Change-Id: I87a1ba9bfc441cad2ed6a6959d07af1cc1e2c7bc Signed-off-by: Prakash Kamliya <pkamliya@codeaurora.org> Signed-off-by: Oleg Perelet <operelet@codeaurora.org>
2016-04-13msm: kgsl: Invoke DCVS callbacks on A540Oleg Perelet
As long as GPMU is enabled, DCVS has to handshake with firmware. It is a new requirement of A540 power management. CRs-Fixed: 973565 Change-Id: Ie6480fc3ba0e1b95aab40e31b09ff2bd798ff30f Signed-off-by: Oleg Perelet <operelet@codeaurora.org>
2016-04-13msm: kgsl: Return EOPNOTSUPP for A3XX command batch profilingHareesh Gundu
A3XX doesn't have support for command batch profiling. Return EOPNOTSUPP for a command batch profiling request on A3XX, so that userspace code knows that this feature is not supported. CRs-Fixed: 986169 Change-Id: I6dfcab462a933ef31e3bba6bef07f17016ae50b9 Signed-off-by: Hareesh Gundu <hareeshg@codeaurora.org>
2016-04-13msm: kgsl: Pass correct buffer size for mapping gpuobj user memoryTarun Karra
Current code incorrectly specifies buffer size as 0 for mapping gpuobj user memory. This causes the map to fail because buffer size is expected to be a non zero value. Fix this by passing the correct size of the buffer to be mapped. CRs-Fixed: 995378 Change-Id: I1a9aeb3f1dd67f014847322e5b14cba8775a82a4 Signed-off-by: Tarun Karra <tkarra@codeaurora.org>
2016-04-13msm: kgsl: Fix gpudev NULL dereference in adreno_removeHareesh Gundu
In adreno_remove() there is possibility of dereference of gpudev without NULL check. Fix this by getting gpudev after adreno_dev NULL check. CRs-Fixed: 993267 Change-Id: I17d8b4ba2c74a787a065dbdb0ac88d065605fcb1 Signed-off-by: Hareesh Gundu <hareeshg@codeaurora.org>
2016-04-13msm: kgsl: verify user memory permissions before mapping to GPU driverTarun Karra
For user memory of type KGSL_USER_MEM_TYPE_ADDR mapped to GPU driver verify permissions and map GPU permissions same as CPU permissions. If elevated permissions are requested return an error to prevent privilege escalation. Without this check user could map readonly memory into GPU driver as readwrite and gain elevated privilege. Write permissions check is currently inverted causing readonly user pages to be mapped as readwrite in GPU driver. Fix this check to map readonly pages as readonly. CRs-Fixed: 988993 Change-Id: I0e097d7e4e4c414c0849e33bcc61a26fb94291ad Signed-off-by: Tarun Karra <tkarra@codeaurora.org>
2016-04-13msm: kgsl: Enable GPMU and SPTP/RAC power collapse on A540Oleg Perelet
Enable GPMU and SPTP/RAC power collapse on A540. CRs-Fixed: 973565 Change-Id: I73b40d264c4054a43c2776337b80af88adff077e Signed-off-by: Oleg Perelet <operelet@codeaurora.org>
2016-04-13msm: kgsl: Zero the adreno ioctl command bufferHarshdeep Dhatt
The kernel command buffer is not zeroed in the adreno ioctls, and may contain garbage. The garbage value can lead to unexpected results. CRs-Fixed: 993518 Change-Id: I75033cdf4637881ecd6fa4dd31aea083b134e6d2 Signed-off-by: Harshdeep Dhatt <hdhatt@codeaurora.org>
2016-04-13msm: kgsl: Correct the order of preemption packetsHarshdeep Dhatt
Current order: IB1 batch, timestamp writes, SRM=NULL, CP_YIELD_ENABLE, CP_CONTEXT_SWITCH_YIELD Correct order: IB1 batch, SRM=NULL, CP_YIELD_ENABLE, timestamp writes, CP_CONTEXT_SWITCH_YIELD Reason: if preemption is initiated after the last checkpoint but before SET_RENDER_MODE == NULL is executed, all of the PM4s starting at the preamble of the check point will be replayed up to the SRM == NULL, including an attempt to re-timestamp/ re-retire the last batch of IBs. If what was intended here was to make sure that the IB batch would be retired once then the SET_RENDER_MODE == NULL and CP_YIELD_ENABLE should be placed immediately after IB_PFE packets and before the time stamping PM4 packets in the ring buffer. CRs-Fixed: 990078 Change-Id: I04a1a44f12dd3a09c50b4fe39e14a2bd636b24de Signed-off-by: Harshdeep Dhatt <hdhatt@codeaurora.org>
2016-03-25msm: kgsl: Attach mem_entry once we have valid GPU addressRajesh Kemisetti
kgsl_mem_entry_attach_process() adds new entry to the mem_idr list without really having a valid GPU address. This new entry can be used by other thread with GPUADDR_IN_MEMDESC() and destroy it. Get GPU address first and then add it to the mem_idr list. Change-Id: I4d66cec754ca5315df3c9fe09644f55596c3c33c Signed-off-by: Rajesh Kemisetti <rajeshk@codeaurora.org>
2016-03-25msm: kgsl: Track and pass number of active context to governorDeepak Kumar
Track number of active context and pass it to governor along with busy stats. This allows GPU DCVS to make decision based on context count and busy stats, which helps in handling sudden workloads. Change-Id: I9b40e4917b30ee3f15f2c8e99669e090578f1289 Signed-off-by: Deepak Kumar <dkumar@codeaurora.org> Signed-off-by: Divya Ponnusamy <pdivya@codeaurora.org>
2016-03-25msm: kgsl: Allocate guard page on demandHareesh Gundu
Allocate guard page when the first buffer is mapped into the IOMMU. This also ensures that the guard page gets allocated if the guard page mmu feature is enabled. CRs-Fixed: 988093 Change-Id: Id97492707463a1f15a4bf1c67b9c0f03214e6283 Signed-off-by: Hareesh Gundu <hareeshg@codeaurora.org>
2016-03-25msm: kgsl: Fix race condition during mem_entry detachRajesh Kemisetti
kgsl_mem_entry_detach_process() makes gpuaddr to NULL and then removes the entry from mem_idr list. Sometimes this can cause kgsl_sharedmem_find() to return the same entry for a different gpuaddr/thread if it satisfies GPUADDR_IN_MEMDESC(). To avoid this, first remove the entry from mem_idr list and proceed with unmap/untrack calls. Change-Id: Ib9f2bc0fdaecd394735dd61b18fdc7de57aa3748 Signed-off-by: Rajesh Kemisetti <rajeshk@codeaurora.org>
2016-03-25msm: kgsl: Avoid racing against context delete while releasing contextsDeepak Kumar
While releasing contexts take a reference to context inside read rcu lock to avoid racing against context deletion. This will avoid using dangling context pointer in device_release_contexts. Change-Id: I76e787f6dde5a324fec23e81829174bd28134c6c Signed-off-by: Deepak Kumar <dkumar@codeaurora.org>
2016-03-25msm: kgsl: Do not switch pagetable if context is detachedHarshdeep Dhatt
This is done to avoid a race condition between a context getting detached and destroyed before the GPU has executed the pt switch commands. CRs-Fixed: 987587 Change-Id: I5c485e41a23b288f27e607b3e3ed5bf66cbad98a Signed-off-by: Harshdeep Dhatt <hdhatt@codeaurora.org>
2016-03-25msm: kgsl: Standardize ringbuffers in the snapshotJordan Crouse
'start' and 'stop' in the snapshot ringbuffer header are supposed to be the dword offset that the data starts and stops at respectively. For the current ringbuffer which is parsed 'start' and 'stop' are equal to the CP wptr but all other ringbuffers are just dumped from start to finish so 'start' and stop' should be 0 and KGSL_RB_DWORDS. And having said that, why are we bothering to make the current ringbuffer special anyway? In every case we are dumping the entire ringbuffer so we might as well dump it in order. While messing about in this code go a few more steps to make sure that we don't dump the same ringbuffer more than once. Change-Id: Ic0dedbada33adda660b7f0bf5eb165b0aa159004 Signed-off-by: Jordan Crouse <jcrouse@codeaurora.org>
2016-03-25msm: kgsl: Add pm_qos_cpu_mask_latency to avoid L2PC on mask CPUDivya Ponnusamy
Add a l2pc-cpu-mask-latency in device tree. This latency is used in kgsl_pwrctrl_update_l2pc() API to avoid L2PC on masked CPUs by giving reduced latency value. Change-Id: I0447977bce5ed5c09a863b03bb42b9428686a9f5 Signed-off-by: Divya Ponnusamy <pdivya@codeaurora.org>
2016-03-25msm: kgsl: Fix VBIF out register settings for A306aHareesh Gundu
Recommended value for A306a VBIF out registers is 0x10. Change-Id: I5ea3f4203b7649007fa62bdfe70a41c8d86432ef Signed-off-by: Hareesh Gundu <hareeshg@codeaurora.org>
2016-03-25msm: kgsl: Add secure memory flag in process mem fileHarshdeep Dhatt
Secure memory will have 's' flag set in its flag fields. This is needed to track secure memory of a process. CRs-Fixed: 985767 Change-Id: I011dcc951b1db8adf763f85701aa869f6d4744d3 Signed-off-by: Harshdeep Dhatt <hdhatt@codeaurora.org>
2016-03-25msm: kgsl: Unbind the kgsl-event workqueueJonathan Wicks
Allow the kgsl-event workqueue to run on any available core. The other workqueues in KGSL were already unbound. CRs-Fixed: 985082 Change-Id: I7e843b57541b7ddcb53848078f73b05c88238711 Signed-off-by: Jonathan Wicks <jwicks@codeaurora.org>
2016-03-25msm: kgsl: change ISENSE calibration handshake orderOleg Perelet
Force ISENSE calibration to stop before starting new calibration. CRs-Fixed: 973565 Change-Id: I86dcbaa7feaecd630a027c5aca41d62a5855efda Signed-off-by: Oleg Perelet <operelet@codeaurora.org>
2016-03-25msm: kgsl: Invoke AGC handshake on A540Oleg Perelet
Invoke AGC handshake on A540 even when LM is disabled, pass 0 for LM and pass HW patchid. CRs-Fixed: 973565 Change-Id: I62c32b55bf2e3a1ec498b1ec0a8bebf34ac803a9 Signed-off-by: Oleg Perelet <operelet@codeaurora.org>
2016-03-25msm: kgsl: Streamline ringbuffer initializationCarter Cooper
Move device specific features to the device rather than trying to do them in the common initialization code. Change-Id: I812db29a2eae90ca532755c265aaa2e52db972d7 Signed-off-by: Carter Cooper <ccooper@codeaurora.org>
2016-03-25msm: kgsl: Disable guardpage for A5x and suppress pagefaultsSushmita Susheelendra
Disable the guardpage workaround for A5x and instead selectively suppress pagefaults. Suppress read pagefaults that are likely caused due to UCHE overfetches. For this, the fault address must be within the first 64 bytes of a page and the fault page must be preceded by a valid allocation. CRs-Fixed: 975293 Change-Id: I6a0995af3ab4129c6923726043c5f34c747641f9 Signed-off-by: Sushmita Susheelendra <ssusheel@codeaurora.org>
2016-03-25msm: kgsl: Change the active context trackerPrakash Kamliya
The active context tracker that we bolted on the side of the dispatcher was designed mainly to see if there was 1 OR more than 1 active context, not much more than that. Since it is apparent that we'll need to track up to 4 contexts and possibly more later the algorithm needs to change. The new algorithm puts all active contexts on a linked list - every time a context is used it is popped from the list and put on the tip with an updated time. To count the number of active contexts walk the list until you get a context with an active time older than you are looking for. You also can do other magic on the context, like see if it matches up with a given command queue. Change-Id: Ic0dedbad6be9fd1925121ee54e0000c42b089f44 Signed-off-by: Jordan Crouse <jcrouse@codeaurora.org> Signed-off-by: Prakash Kamliya <pkamliya@codeaurora.org>
2016-03-25msm: kgsl: Change GPU RAC hardware clockgatingOleg Perelet
On A5xx disable LRZ clockgating, by setting 0x0 for bits 18:16 of RBBM_CLOCK_CNTL2_RAC. CRs-Fixed: 964234 Change-Id: Icf858e3431e1c7f9943762067a74b1ce2af7ca6f Signed-off-by: Oleg Perelet <operelet@codeaurora.org>
2016-03-23sync: oneshot_sync: Add oneshot_sync driverJordan Crouse
Add the oneshot_sync driver as of msm-3.18 commit 7892968f (sync: oneshot_sync: Update oneshot_sync for new sync APIs). Signed-off-by: Jordan Crouse <jcrouse@codeaurora.org>
2016-03-23msm: kgsl: Use CONFIG_QCOM_KGSL_IOMMUJordan Crouse
The rest of the driver started using CONFIG_QCOM_KGSL_IOMMU. The replayed MMU changes didn't get the memo. Signed-off-by: Jordan Crouse <jcrouse@codeaurora.org>
2016-03-23msm: kgsl: Add NULL check for preemption_schedule callHareesh Gundu
preemption_schedule() is not implemented for A3xx targets. Invoking this function without NULL check result into crash in A3xx target. Fix this by adding a NULL check before invoking the preemption_schedule(). Change-Id: Ic600235f149cade57fedc5454bdc0f6794c67bd9 Signed-off-by: Hareesh Gundu <hareeshg@codeaurora.org>
2016-03-23msm: kgsl: Initialize coresight at boot timeJordan Crouse
Initialize coresight at boot time so that it is available to be configured before the first open of /dev/kgsl-3d0 to get GPU scan dumps during initial power up. Change-Id: Ic0dedbadbda251f12855895cc0aa53852f79a8b8 Signed-off-by: Jordan Crouse <jcrouse@codeaurora.org>
2016-03-23msm: kgsl: Add quirk for masking out hang detect signalsShrenuj Bansal
Add a quirk to mask out the RB 1-3 activity signals in the hang detection logic. Set this quirk in the devicetree for 8996v2 and v3. CRs-Fixed: 978849 Change-Id: I63073b5973644453e775b41a9361de55d7933a07 Signed-off-by: Shrenuj Bansal <shrenujb@codeaurora.org>
2016-03-23msm: kgsl: Submit a set of critical packets right after ME initShrenuj Bansal
During the initialization sequence, submit a set of important packets to the GPU in order to pre-load the I-cache with the critical ucode instructions. CRs-Fixed: 978777 Change-Id: Ic6a17b24d8c3aa383af8e25cf9ef771459d65796 Signed-off-by: Shrenuj Bansal <shrenujb@codeaurora.org>