diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/gsp_display_engine.c | 11 | ||||
| -rw-r--r-- | kernel/include/gsp_display_engine.h | 4 |
2 files changed, 12 insertions, 3 deletions
diff --git a/kernel/gsp_display_engine.c b/kernel/gsp_display_engine.c index 3e0c162..f96fc6a 100644 --- a/kernel/gsp_display_engine.c +++ b/kernel/gsp_display_engine.c @@ -310,7 +310,16 @@ static u32 gsp_disp_ctl_offset(u32 hclass, u32 instance) return GSP_DISP_CORE_CTL_BASE; case GSP_DISP_CLASS_WINDOW: return GSP_DISP_WIN_CTL_BASE + instance * 0x1000; - case GSP_DISP_CLASS_CURSOR: + case GSP_DISP_CLASS_WINDOW_IMM: + /* + * Immediate-mode window channels sit 32 windows above the + * ordinary window block (0x690000 + (instance+32)*0x1000 + * = 0x6d0000 + instance*0x1000). The old mapping put them + * in the cursor-PIO block at 0x6d8000, so their PUT was + * never seen and their flips never completed (r1638). + */ + return GSP_DISP_WIN_CTL_BASE + (instance + 32) * 0x1000; + case GSP_DISP_CLASS_CURSOR_PIO: return GSP_DISP_CURS_CTL_BASE + instance * 0x1000; default: return 0; diff --git a/kernel/include/gsp_display_engine.h b/kernel/include/gsp_display_engine.h index aa0ad98..8b62c21 100644 --- a/kernel/include/gsp_display_engine.h +++ b/kernel/include/gsp_display_engine.h @@ -36,8 +36,8 @@ struct nv_vgpu_device; #define GSP_DISP_CLASS_CORE 0xc57d #define GSP_DISP_CLASS_WINDOW 0xc57e -#define GSP_DISP_CLASS_CURSOR 0xc57b -#define GSP_DISP_CLASS_BASE 0xc57a +#define GSP_DISP_CLASS_WINDOW_IMM 0xc57b /* immediate-mode window */ +#define GSP_DISP_CLASS_CURSOR_PIO 0xc57a /* PIO cursor (valid=0) */ /* Channel was announced by NV2080_CTRL_CMD_INTERNAL_DISPLAY_CHANNEL_PUSHBUFFER. */ void gsp_disp_engine_channel_add(struct nv_vgpu_device *vgpu, u32 hclass, |
