hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/gpu/drm/msm/adreno/a5xx_gpu.c
....@@ -36,7 +36,7 @@
3636 OUT_RING(ring, upper_32_bits(shadowptr(a5xx_gpu, ring)));
3737 }
3838
39
- spin_lock_irqsave(&ring->lock, flags);
39
+ spin_lock_irqsave(&ring->preempt_lock, flags);
4040
4141 /* Copy the shadow to the actual register */
4242 ring->cur = ring->next;
....@@ -44,7 +44,7 @@
4444 /* Make sure to wrap wptr if we need to */
4545 wptr = get_wptr(ring);
4646
47
- spin_unlock_irqrestore(&ring->lock, flags);
47
+ spin_unlock_irqrestore(&ring->preempt_lock, flags);
4848
4949 /* Make sure everything is posted before making a decision */
5050 mb();
....@@ -81,7 +81,7 @@
8181 * since we've already mapped it once in
8282 * submit_reloc()
8383 */
84
- if (WARN_ON(!ptr))
84
+ if (WARN_ON(IS_ERR_OR_NULL(ptr)))
8585 return;
8686
8787 for (i = 0; i < dwords; i++) {
....@@ -144,8 +144,8 @@
144144 OUT_RING(ring, 1);
145145
146146 /* Enable local preemption for finegrain preemption */
147
- OUT_PKT7(ring, CP_PREEMPT_ENABLE_GLOBAL, 1);
148
- OUT_RING(ring, 0x02);
147
+ OUT_PKT7(ring, CP_PREEMPT_ENABLE_LOCAL, 1);
148
+ OUT_RING(ring, 0x1);
149149
150150 /* Allow CP_CONTEXT_SWITCH_YIELD packets in the IB2 */
151151 OUT_PKT7(ring, CP_YIELD_ENABLE, 1);
....@@ -1569,6 +1569,7 @@
15691569 struct a5xx_gpu *a5xx_gpu = NULL;
15701570 struct adreno_gpu *adreno_gpu;
15711571 struct msm_gpu *gpu;
1572
+ unsigned int nr_rings;
15721573 int ret;
15731574
15741575 if (!pdev) {
....@@ -1589,7 +1590,12 @@
15891590
15901591 check_speed_bin(&pdev->dev);
15911592
1592
- ret = adreno_gpu_init(dev, pdev, adreno_gpu, &funcs, 4);
1593
+ nr_rings = 4;
1594
+
1595
+ if (adreno_is_a510(adreno_gpu))
1596
+ nr_rings = 1;
1597
+
1598
+ ret = adreno_gpu_init(dev, pdev, adreno_gpu, &funcs, nr_rings);
15931599 if (ret) {
15941600 a5xx_destroy(&(a5xx_gpu->base.base));
15951601 return ERR_PTR(ret);