On Tue, Apr 25, 2023 at 09:28:58AM -0600, bent...@openbsd.org wrote:
> 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.

The console starts as efifb, rasops_init() runs there.  After root is
mounted amdgpu takes it over and runs rasops_init() again.

> 
> ok?

I would prefer the include at the end of the file with the OpenBSD
specific functions.

ok jsg@ if you go with this:

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     26 Apr 2023 01:36:16 -0000
@@ -2906,6 +2906,7 @@ MODULE_LICENSE("GPL and additional right
 #endif /* __linux__ */
 
 #include <drm/drm_drv.h>
+#include <drm/drm_utils.h>
 
 #include "vga.h"
 
@@ -3564,6 +3565,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 +3574,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;

Reply via email to