Lines Matching refs:cirrus

82 static u8 rreg_seq(struct cirrus_device *cirrus, u8 reg)  in rreg_seq()  argument
84 iowrite8(reg, cirrus->mmio + SEQ_INDEX); in rreg_seq()
85 return ioread8(cirrus->mmio + SEQ_DATA); in rreg_seq()
88 static void wreg_seq(struct cirrus_device *cirrus, u8 reg, u8 val) in wreg_seq() argument
90 iowrite8(reg, cirrus->mmio + SEQ_INDEX); in wreg_seq()
91 iowrite8(val, cirrus->mmio + SEQ_DATA); in wreg_seq()
97 static u8 rreg_crt(struct cirrus_device *cirrus, u8 reg) in rreg_crt() argument
99 iowrite8(reg, cirrus->mmio + CRT_INDEX); in rreg_crt()
100 return ioread8(cirrus->mmio + CRT_DATA); in rreg_crt()
103 static void wreg_crt(struct cirrus_device *cirrus, u8 reg, u8 val) in wreg_crt() argument
105 iowrite8(reg, cirrus->mmio + CRT_INDEX); in wreg_crt()
106 iowrite8(val, cirrus->mmio + CRT_DATA); in wreg_crt()
112 static void wreg_gfx(struct cirrus_device *cirrus, u8 reg, u8 val) in wreg_gfx() argument
114 iowrite8(reg, cirrus->mmio + GFX_INDEX); in wreg_gfx()
115 iowrite8(val, cirrus->mmio + GFX_DATA); in wreg_gfx()
120 static void wreg_hdr(struct cirrus_device *cirrus, u8 val) in wreg_hdr() argument
122 ioread8(cirrus->mmio + VGA_DAC_MASK); in wreg_hdr()
123 ioread8(cirrus->mmio + VGA_DAC_MASK); in wreg_hdr()
124 ioread8(cirrus->mmio + VGA_DAC_MASK); in wreg_hdr()
125 ioread8(cirrus->mmio + VGA_DAC_MASK); in wreg_hdr()
126 iowrite8(val, cirrus->mmio + VGA_DAC_MASK); in wreg_hdr()
160 static void cirrus_set_start_address(struct cirrus_device *cirrus, u32 offset) in cirrus_set_start_address() argument
166 if (!drm_dev_enter(&cirrus->dev, &idx)) in cirrus_set_start_address()
170 wreg_crt(cirrus, 0x0c, (u8)((addr >> 8) & 0xff)); in cirrus_set_start_address()
171 wreg_crt(cirrus, 0x0d, (u8)(addr & 0xff)); in cirrus_set_start_address()
173 tmp = rreg_crt(cirrus, 0x1b); in cirrus_set_start_address()
177 wreg_crt(cirrus, 0x1b, tmp); in cirrus_set_start_address()
179 tmp = rreg_crt(cirrus, 0x1d); in cirrus_set_start_address()
182 wreg_crt(cirrus, 0x1d, tmp); in cirrus_set_start_address()
187 static int cirrus_mode_set(struct cirrus_device *cirrus, in cirrus_mode_set() argument
196 if (!drm_dev_enter(&cirrus->dev, &idx)) in cirrus_mode_set()
215 wreg_crt(cirrus, VGA_CRTC_V_SYNC_END, 0x20); in cirrus_mode_set()
216 wreg_crt(cirrus, VGA_CRTC_H_TOTAL, htotal); in cirrus_mode_set()
217 wreg_crt(cirrus, VGA_CRTC_H_DISP, hdispend); in cirrus_mode_set()
218 wreg_crt(cirrus, VGA_CRTC_H_SYNC_START, hsyncstart); in cirrus_mode_set()
219 wreg_crt(cirrus, VGA_CRTC_H_SYNC_END, hsyncend); in cirrus_mode_set()
220 wreg_crt(cirrus, VGA_CRTC_V_TOTAL, vtotal & 0xff); in cirrus_mode_set()
221 wreg_crt(cirrus, VGA_CRTC_V_DISP_END, vdispend & 0xff); in cirrus_mode_set()
226 wreg_crt(cirrus, VGA_CRTC_MAX_SCAN, tmp); in cirrus_mode_set()
242 wreg_crt(cirrus, VGA_CRTC_OVERFLOW, tmp); in cirrus_mode_set()
257 wreg_crt(cirrus, CL_CRT1A, tmp); in cirrus_mode_set()
260 wreg_crt(cirrus, VGA_CRTC_MODE, 0x03); in cirrus_mode_set()
262 sr07 = rreg_seq(cirrus, 0x07); in cirrus_mode_set()
266 cirrus->cpp = cirrus_cpp(fb); in cirrus_mode_set()
267 switch (cirrus->cpp * 8) { in cirrus_mode_set()
288 wreg_seq(cirrus, 0x7, sr07); in cirrus_mode_set()
291 cirrus->pitch = cirrus_pitch(fb); in cirrus_mode_set()
292 tmp = cirrus->pitch / 8; in cirrus_mode_set()
293 wreg_crt(cirrus, VGA_CRTC_OFFSET, tmp); in cirrus_mode_set()
297 tmp |= (cirrus->pitch >> 7) & 0x10; in cirrus_mode_set()
298 tmp |= (cirrus->pitch >> 6) & 0x40; in cirrus_mode_set()
299 wreg_crt(cirrus, 0x1b, tmp); in cirrus_mode_set()
302 wreg_gfx(cirrus, VGA_GFX_MODE, 0x40); in cirrus_mode_set()
305 wreg_gfx(cirrus, VGA_GFX_MISC, 0x01); in cirrus_mode_set()
307 wreg_hdr(cirrus, hdr); in cirrus_mode_set()
309 cirrus_set_start_address(cirrus, 0); in cirrus_mode_set()
322 struct cirrus_device *cirrus = to_cirrus(fb->dev); in cirrus_fb_blit_rect() local
326 if (!drm_dev_enter(&cirrus->dev, &idx)) in cirrus_fb_blit_rect()
329 iosys_map_set_vaddr_iomem(&dst, cirrus->vram); in cirrus_fb_blit_rect()
331 if (cirrus->cpp == fb->format->cpp[0]) { in cirrus_fb_blit_rect()
335 } else if (fb->format->cpp[0] == 4 && cirrus->cpp == 2) { in cirrus_fb_blit_rect()
336 iosys_map_incr(&dst, drm_fb_clip_offset(cirrus->pitch, fb->format, rect)); in cirrus_fb_blit_rect()
337 drm_fb_xrgb8888_to_rgb565(&dst, &cirrus->pitch, vmap, fb, rect, false); in cirrus_fb_blit_rect()
339 } else if (fb->format->cpp[0] == 4 && cirrus->cpp == 3) { in cirrus_fb_blit_rect()
340 iosys_map_incr(&dst, drm_fb_clip_offset(cirrus->pitch, fb->format, rect)); in cirrus_fb_blit_rect()
341 drm_fb_xrgb8888_to_rgb888(&dst, &cirrus->pitch, vmap, fb, rect); in cirrus_fb_blit_rect()
405 static int cirrus_conn_init(struct cirrus_device *cirrus) in cirrus_conn_init() argument
407 drm_connector_helper_add(&cirrus->conn, &cirrus_conn_helper_funcs); in cirrus_conn_init()
408 return drm_connector_init(&cirrus->dev, &cirrus->conn, in cirrus_conn_init()
439 struct cirrus_device *cirrus = to_cirrus(pipe->crtc.dev); in cirrus_pipe_enable() local
442 cirrus_mode_set(cirrus, &crtc_state->mode, plane_state->fb); in cirrus_pipe_enable()
449 struct cirrus_device *cirrus = to_cirrus(pipe->crtc.dev); in cirrus_pipe_update() local
455 if (state->fb && cirrus->cpp != cirrus_cpp(state->fb)) in cirrus_pipe_update()
456 cirrus_mode_set(cirrus, &crtc->mode, state->fb); in cirrus_pipe_update()
481 static int cirrus_pipe_init(struct cirrus_device *cirrus) in cirrus_pipe_init() argument
483 return drm_simple_display_pipe_init(&cirrus->dev, in cirrus_pipe_init()
484 &cirrus->pipe, in cirrus_pipe_init()
489 &cirrus->conn); in cirrus_pipe_init()
514 static int cirrus_mode_config_init(struct cirrus_device *cirrus) in cirrus_mode_config_init() argument
516 struct drm_device *dev = &cirrus->dev; in cirrus_mode_config_init()
555 struct cirrus_device *cirrus; in cirrus_pci_probe() local
571 cirrus = devm_drm_dev_alloc(&pdev->dev, &cirrus_driver, in cirrus_pci_probe()
573 if (IS_ERR(cirrus)) in cirrus_pci_probe()
574 return PTR_ERR(cirrus); in cirrus_pci_probe()
576 dev = &cirrus->dev; in cirrus_pci_probe()
578 cirrus->vram = devm_ioremap(&pdev->dev, pci_resource_start(pdev, 0), in cirrus_pci_probe()
580 if (cirrus->vram == NULL) in cirrus_pci_probe()
583 cirrus->mmio = devm_ioremap(&pdev->dev, pci_resource_start(pdev, 1), in cirrus_pci_probe()
585 if (cirrus->mmio == NULL) in cirrus_pci_probe()
588 ret = cirrus_mode_config_init(cirrus); in cirrus_pci_probe()
592 ret = cirrus_conn_init(cirrus); in cirrus_pci_probe()
596 ret = cirrus_pipe_init(cirrus); in cirrus_pci_probe()