Hi,
The orientation quirks applied at virtual console initialization in
inteldrm_attachhook() are not applied at the corresponding place in
amdgpu. Adding them to amdgpu causes the Steam Deck console to display
upright instead of on its side.
ok?
Index: sys/dev/pci/drm/amd/amdgpu/amdgpu_drv.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/drm/amd/amdgpu/amdgpu_drv.c,v
retrieving revision 1.29
diff -u -p -r1.29 amdgpu_drv.c
--- sys/dev/pci/drm/amd/amdgpu/amdgpu_drv.c 31 Mar 2023 02:04:27 -0000
1.29
+++ sys/dev/pci/drm/amd/amdgpu/amdgpu_drv.c 25 Apr 2023 15:14:36 -0000
@@ -27,6 +27,11 @@
#include <drm/drm_gem.h>
#include <drm/drm_vblank.h>
#include <drm/drm_managed.h>
+
+#ifdef __OpenBSD__
+#include <drm/drm_utils.h>
+#endif
+
#include "amdgpu_drv.h"
#include <drm/drm_pciids.h>
@@ -3564,6 +3569,7 @@ amdgpu_attachhook(struct device *self)
}
{
struct wsemuldisplaydev_attach_args aa;
+ int orientation_quirk;
task_set(&adev->switchtask, amdgpu_doswitch, ri);
task_set(&adev->burner_task, amdgpu_burner_cb, adev);
@@ -3572,6 +3578,14 @@ amdgpu_attachhook(struct device *self)
return;
ri->ri_flg = RI_CENTER | RI_VCONS | RI_WRONLY;
+
+ orientation_quirk = drm_get_panel_orientation_quirk(ri->ri_width,
+ ri->ri_height);
+ if (orientation_quirk == DRM_MODE_PANEL_ORIENTATION_LEFT_UP)
+ ri->ri_flg |= RI_ROTATE_CCW;
+ else if (orientation_quirk == DRM_MODE_PANEL_ORIENTATION_RIGHT_UP)
+ ri->ri_flg |= RI_ROTATE_CW;
+
rasops_init(ri, 160, 160);
ri->ri_hw = adev;