forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-13 9d77db3c730780c8ef5ccd4b66403ff5675cfe4e
kernel/drivers/gpu/drm/radeon/atombios_crtc.c
....@@ -23,11 +23,14 @@
2323 * Authors: Dave Airlie
2424 * Alex Deucher
2525 */
26
-#include <drm/drmP.h>
26
+
2727 #include <drm/drm_crtc_helper.h>
2828 #include <drm/drm_fb_helper.h>
29
-#include <drm/radeon_drm.h>
3029 #include <drm/drm_fixed.h>
30
+#include <drm/drm_fourcc.h>
31
+#include <drm/drm_vblank.h>
32
+#include <drm/radeon_drm.h>
33
+
3134 #include "radeon.h"
3235 #include "atom.h"
3336 #include "atom-bits.h"
....@@ -241,9 +244,8 @@
241244
242245 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args);
243246
244
- if (ASIC_IS_DCE8(rdev)) {
247
+ if (ASIC_IS_DCE8(rdev))
245248 WREG32(vga_control_regs[radeon_crtc->crtc_id], vga_control);
246
- }
247249 }
248250
249251 static void atombios_powergate_crtc(struct drm_crtc *crtc, int state)
....@@ -1254,6 +1256,16 @@
12541256 /* Greater 8 bpc fb needs to bypass hw-lut to retain precision */
12551257 bypass_lut = true;
12561258 break;
1259
+ case DRM_FORMAT_XBGR8888:
1260
+ case DRM_FORMAT_ABGR8888:
1261
+ fb_format = (EVERGREEN_GRPH_DEPTH(EVERGREEN_GRPH_DEPTH_32BPP) |
1262
+ EVERGREEN_GRPH_FORMAT(EVERGREEN_GRPH_FORMAT_ARGB8888));
1263
+ fb_swap = (EVERGREEN_GRPH_RED_CROSSBAR(EVERGREEN_GRPH_RED_SEL_B) |
1264
+ EVERGREEN_GRPH_BLUE_CROSSBAR(EVERGREEN_GRPH_BLUE_SEL_R));
1265
+#ifdef __BIG_ENDIAN
1266
+ fb_swap |= EVERGREEN_GRPH_ENDIAN_SWAP(EVERGREEN_GRPH_ENDIAN_8IN32);
1267
+#endif
1268
+ break;
12571269 default:
12581270 DRM_ERROR("Unsupported screen format %s\n",
12591271 drm_get_format_name(target_fb->format->format, &format_name));
....@@ -1550,6 +1562,21 @@
15501562 #endif
15511563 /* Greater 8 bpc fb needs to bypass hw-lut to retain precision */
15521564 bypass_lut = true;
1565
+ break;
1566
+ case DRM_FORMAT_XBGR8888:
1567
+ case DRM_FORMAT_ABGR8888:
1568
+ fb_format =
1569
+ AVIVO_D1GRPH_CONTROL_DEPTH_32BPP |
1570
+ AVIVO_D1GRPH_CONTROL_32BPP_ARGB8888;
1571
+ if (rdev->family >= CHIP_R600)
1572
+ fb_swap =
1573
+ (R600_D1GRPH_RED_CROSSBAR(R600_D1GRPH_RED_SEL_B) |
1574
+ R600_D1GRPH_BLUE_CROSSBAR(R600_D1GRPH_BLUE_SEL_R));
1575
+ else /* DCE1 (R5xx) */
1576
+ fb_format |= AVIVO_D1GRPH_SWAP_RB;
1577
+#ifdef __BIG_ENDIAN
1578
+ fb_swap |= R600_D1GRPH_SWAP_ENDIAN_32BIT;
1579
+#endif
15531580 break;
15541581 default:
15551582 DRM_ERROR("Unsupported screen format %s\n",
....@@ -2204,6 +2231,7 @@
22042231 .prepare = atombios_crtc_prepare,
22052232 .commit = atombios_crtc_commit,
22062233 .disable = atombios_crtc_disable,
2234
+ .get_scanout_position = radeon_get_crtc_scanout_position,
22072235 };
22082236
22092237 void radeon_atombios_init_crtc(struct drm_device *dev,