hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/gpu/drm/radeon/radeon_display.c
....@@ -23,21 +23,31 @@
2323 * Authors: Dave Airlie
2424 * Alex Deucher
2525 */
26
-#include <drm/drmP.h>
27
-#include <drm/radeon_drm.h>
28
-#include "radeon.h"
2926
30
-#include "atom.h"
27
+#include <linux/pci.h>
28
+#include <linux/pm_runtime.h>
29
+#include <linux/gcd.h>
30
+
3131 #include <asm/div64.h>
3232
33
-#include <linux/pm_runtime.h>
3433 #include <drm/drm_crtc_helper.h>
35
-#include <drm/drm_gem_framebuffer_helper.h>
36
-#include <drm/drm_fb_helper.h>
37
-#include <drm/drm_plane_helper.h>
34
+#include <drm/drm_device.h>
35
+#include <drm/drm_drv.h>
3836 #include <drm/drm_edid.h>
37
+#include <drm/drm_fb_helper.h>
38
+#include <drm/drm_fourcc.h>
39
+#include <drm/drm_gem_framebuffer_helper.h>
40
+#include <drm/drm_plane_helper.h>
41
+#include <drm/drm_probe_helper.h>
42
+#include <drm/drm_vblank.h>
43
+#include <drm/radeon_drm.h>
3944
40
-#include <linux/gcd.h>
45
+#include "atom.h"
46
+#include "radeon.h"
47
+
48
+u32 radeon_get_vblank_counter_kms(struct drm_crtc *crtc);
49
+int radeon_enable_vblank_kms(struct drm_crtc *crtc);
50
+void radeon_disable_vblank_kms(struct drm_crtc *crtc);
4151
4252 static void avivo_crtc_load_lut(struct drm_crtc *crtc)
4353 {
....@@ -271,7 +281,7 @@
271281 } else
272282 DRM_ERROR("failed to reserve buffer after flip\n");
273283
274
- drm_gem_object_put_unlocked(&work->old_rbo->gem_base);
284
+ drm_gem_object_put(&work->old_rbo->tbo.base);
275285 kfree(work);
276286 }
277287
....@@ -454,7 +464,7 @@
454464 (DRM_SCANOUTPOS_VALID | DRM_SCANOUTPOS_IN_VBLANK) &&
455465 (!ASIC_IS_AVIVO(rdev) ||
456466 ((int) (work->target_vblank -
457
- dev->driver->get_vblank_counter(dev, work->crtc_id)) > 0)))
467
+ crtc->funcs->get_vblank_counter(crtc)) > 0)))
458468 usleep_range(1000, 2000);
459469
460470 /* We borrow the event spin lock for protecting flip_status */
....@@ -529,7 +539,7 @@
529539 DRM_ERROR("failed to pin new rbo buffer before flip\n");
530540 goto cleanup;
531541 }
532
- work->fence = dma_fence_get(reservation_object_get_excl(new_rbo->tbo.resv));
542
+ work->fence = dma_fence_get(dma_resv_get_excl(new_rbo->tbo.base.resv));
533543 radeon_bo_get_tiling_flags(new_rbo, &tiling_flags, NULL);
534544 radeon_bo_unreserve(new_rbo);
535545
....@@ -570,7 +580,7 @@
570580 }
571581 work->base = base;
572582 work->target_vblank = target - (uint32_t)drm_crtc_vblank_count(crtc) +
573
- dev->driver->get_vblank_counter(dev, work->crtc_id);
583
+ crtc->funcs->get_vblank_counter(crtc);
574584
575585 /* We borrow the event spin lock for protecting flip_work */
576586 spin_lock_irqsave(&crtc->dev->event_lock, flags);
....@@ -603,7 +613,7 @@
603613 radeon_bo_unreserve(new_rbo);
604614
605615 cleanup:
606
- drm_gem_object_put_unlocked(&work->old_rbo->gem_base);
616
+ drm_gem_object_put(&work->old_rbo->tbo.base);
607617 dma_fence_put(work->fence);
608618 kfree(work);
609619 return r;
....@@ -664,13 +674,16 @@
664674 .set_config = radeon_crtc_set_config,
665675 .destroy = radeon_crtc_destroy,
666676 .page_flip_target = radeon_crtc_page_flip_target,
677
+ .get_vblank_counter = radeon_get_vblank_counter_kms,
678
+ .enable_vblank = radeon_enable_vblank_kms,
679
+ .disable_vblank = radeon_disable_vblank_kms,
680
+ .get_vblank_timestamp = drm_crtc_vblank_helper_get_vblank_timestamp,
667681 };
668682
669683 static void radeon_crtc_init(struct drm_device *dev, int index)
670684 {
671685 struct radeon_device *rdev = dev->dev_private;
672686 struct radeon_crtc *radeon_crtc;
673
- int i;
674687
675688 radeon_crtc = kzalloc(sizeof(struct radeon_crtc) + (RADEONFB_CONN_LIMIT * sizeof(struct drm_connector *)), GFP_KERNEL);
676689 if (radeon_crtc == NULL)
....@@ -698,12 +711,6 @@
698711 radeon_crtc->mode_set.connectors = (struct drm_connector **)(radeon_crtc + 1);
699712 radeon_crtc->mode_set.num_connectors = 0;
700713 #endif
701
-
702
- for (i = 0; i < 256; i++) {
703
- radeon_crtc->lut_r[i] = i << 2;
704
- radeon_crtc->lut_g[i] = i << 2;
705
- radeon_crtc->lut_b[i] = i << 2;
706
- }
707714
708715 if (rdev->is_atom_bios && (ASIC_IS_AVIVO(rdev) || radeon_r4xx_atom))
709716 radeon_atombios_init_crtc(dev, radeon_crtc);
....@@ -845,11 +852,11 @@
845852 if (rdev->bios) {
846853 if (rdev->is_atom_bios) {
847854 ret = radeon_get_atom_connector_info_from_supported_devices_table(dev);
848
- if (ret == false)
855
+ if (!ret)
849856 ret = radeon_get_atom_connector_info_from_object_table(dev);
850857 } else {
851858 ret = radeon_get_legacy_connector_info_from_bios(dev);
852
- if (ret == false)
859
+ if (!ret)
853860 ret = radeon_get_legacy_connector_info_from_table(dev);
854861 }
855862 } else {
....@@ -1333,14 +1340,14 @@
13331340
13341341 fb = kzalloc(sizeof(*fb), GFP_KERNEL);
13351342 if (fb == NULL) {
1336
- drm_gem_object_put_unlocked(obj);
1343
+ drm_gem_object_put(obj);
13371344 return ERR_PTR(-ENOMEM);
13381345 }
13391346
13401347 ret = radeon_framebuffer_init(dev, fb, mode_cmd, obj);
13411348 if (ret) {
13421349 kfree(fb);
1343
- drm_gem_object_put_unlocked(obj);
1350
+ drm_gem_object_put(obj);
13441351 return ERR_PTR(ret);
13451352 }
13461353
....@@ -1651,7 +1658,7 @@
16511658 if (rdev->mode_info.mode_config_initialized) {
16521659 drm_kms_helper_poll_fini(rdev->ddev);
16531660 radeon_hpd_fini(rdev);
1654
- drm_crtc_force_disable_all(rdev->ddev);
1661
+ drm_helper_force_disable_all(rdev->ddev);
16551662 radeon_fbdev_fini(rdev);
16561663 radeon_afmt_fini(rdev);
16571664 drm_mode_config_cleanup(rdev->ddev);
....@@ -1686,7 +1693,6 @@
16861693 struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc);
16871694 struct radeon_encoder *radeon_encoder;
16881695 struct drm_connector *connector;
1689
- struct radeon_connector *radeon_connector;
16901696 bool first = true;
16911697 u32 src_v = 1, dst_v = 1;
16921698 u32 src_h = 1, dst_h = 1;
....@@ -1699,7 +1705,6 @@
16991705 continue;
17001706 radeon_encoder = to_radeon_encoder(encoder);
17011707 connector = radeon_get_connector_for_encoder(encoder);
1702
- radeon_connector = to_radeon_connector(connector);
17031708
17041709 if (first) {
17051710 /* set scaling */
....@@ -1818,7 +1823,6 @@
18181823 struct radeon_device *rdev = dev->dev_private;
18191824
18201825 /* preempt_disable_rt() should go right here in PREEMPT_RT patchset. */
1821
- preempt_disable_rt();
18221826
18231827 /* Get optional system timestamp before query. */
18241828 if (stime)
....@@ -1911,7 +1915,6 @@
19111915 *etime = ktime_get();
19121916
19131917 /* preempt_enable_rt() should go right here in PREEMPT_RT patchset. */
1914
- preempt_enable_rt();
19151918
19161919 /* Decode into vertical and horizontal scanout position. */
19171920 *vpos = position & 0x1fff;
....@@ -1981,3 +1984,16 @@
19811984
19821985 return ret;
19831986 }
1987
+
1988
+bool
1989
+radeon_get_crtc_scanout_position(struct drm_crtc *crtc,
1990
+ bool in_vblank_irq, int *vpos, int *hpos,
1991
+ ktime_t *stime, ktime_t *etime,
1992
+ const struct drm_display_mode *mode)
1993
+{
1994
+ struct drm_device *dev = crtc->dev;
1995
+ unsigned int pipe = crtc->index;
1996
+
1997
+ return radeon_get_crtc_scanoutpos(dev, pipe, 0, vpos, hpos,
1998
+ stime, etime, mode);
1999
+}