Lines Matching refs:cirrus
75 static u8 rreg_seq(struct cirrus_device *cirrus, u8 reg) in rreg_seq() argument
77 iowrite8(reg, cirrus->mmio + SEQ_INDEX); in rreg_seq()
78 return ioread8(cirrus->mmio + SEQ_DATA); in rreg_seq()
81 static void wreg_seq(struct cirrus_device *cirrus, u8 reg, u8 val) in wreg_seq() argument
83 iowrite8(reg, cirrus->mmio + SEQ_INDEX); in wreg_seq()
84 iowrite8(val, cirrus->mmio + SEQ_DATA); in wreg_seq()
90 static u8 rreg_crt(struct cirrus_device *cirrus, u8 reg) in rreg_crt() argument
92 iowrite8(reg, cirrus->mmio + CRT_INDEX); in rreg_crt()
93 return ioread8(cirrus->mmio + CRT_DATA); in rreg_crt()
96 static void wreg_crt(struct cirrus_device *cirrus, u8 reg, u8 val) in wreg_crt() argument
98 iowrite8(reg, cirrus->mmio + CRT_INDEX); in wreg_crt()
99 iowrite8(val, cirrus->mmio + CRT_DATA); in wreg_crt()
105 static void wreg_gfx(struct cirrus_device *cirrus, u8 reg, u8 val) in wreg_gfx() argument
107 iowrite8(reg, cirrus->mmio + GFX_INDEX); in wreg_gfx()
108 iowrite8(val, cirrus->mmio + GFX_DATA); in wreg_gfx()
113 static void wreg_hdr(struct cirrus_device *cirrus, u8 val) in wreg_hdr() argument
115 ioread8(cirrus->mmio + VGA_DAC_MASK); in wreg_hdr()
116 ioread8(cirrus->mmio + VGA_DAC_MASK); in wreg_hdr()
117 ioread8(cirrus->mmio + VGA_DAC_MASK); in wreg_hdr()
118 ioread8(cirrus->mmio + VGA_DAC_MASK); in wreg_hdr()
119 iowrite8(val, cirrus->mmio + VGA_DAC_MASK); in wreg_hdr()
153 static void cirrus_set_start_address(struct cirrus_device *cirrus, u32 offset) in cirrus_set_start_address() argument
159 wreg_crt(cirrus, 0x0c, (u8)((addr >> 8) & 0xff)); in cirrus_set_start_address()
160 wreg_crt(cirrus, 0x0d, (u8)(addr & 0xff)); in cirrus_set_start_address()
162 tmp = rreg_crt(cirrus, 0x1b); in cirrus_set_start_address()
166 wreg_crt(cirrus, 0x1b, tmp); in cirrus_set_start_address()
168 tmp = rreg_crt(cirrus, 0x1d); in cirrus_set_start_address()
171 wreg_crt(cirrus, 0x1d, tmp); in cirrus_set_start_address()
174 static int cirrus_mode_set(struct cirrus_device *cirrus, in cirrus_mode_set() argument
199 wreg_crt(cirrus, VGA_CRTC_V_SYNC_END, 0x20); in cirrus_mode_set()
200 wreg_crt(cirrus, VGA_CRTC_H_TOTAL, htotal); in cirrus_mode_set()
201 wreg_crt(cirrus, VGA_CRTC_H_DISP, hdispend); in cirrus_mode_set()
202 wreg_crt(cirrus, VGA_CRTC_H_SYNC_START, hsyncstart); in cirrus_mode_set()
203 wreg_crt(cirrus, VGA_CRTC_H_SYNC_END, hsyncend); in cirrus_mode_set()
204 wreg_crt(cirrus, VGA_CRTC_V_TOTAL, vtotal & 0xff); in cirrus_mode_set()
205 wreg_crt(cirrus, VGA_CRTC_V_DISP_END, vdispend & 0xff); in cirrus_mode_set()
210 wreg_crt(cirrus, VGA_CRTC_MAX_SCAN, tmp); in cirrus_mode_set()
226 wreg_crt(cirrus, VGA_CRTC_OVERFLOW, tmp); in cirrus_mode_set()
241 wreg_crt(cirrus, CL_CRT1A, tmp); in cirrus_mode_set()
244 wreg_crt(cirrus, VGA_CRTC_MODE, 0x03); in cirrus_mode_set()
246 sr07 = rreg_seq(cirrus, 0x07); in cirrus_mode_set()
250 cirrus->cpp = cirrus_cpp(fb); in cirrus_mode_set()
251 switch (cirrus->cpp * 8) { in cirrus_mode_set()
271 wreg_seq(cirrus, 0x7, sr07); in cirrus_mode_set()
274 cirrus->pitch = cirrus_pitch(fb); in cirrus_mode_set()
275 tmp = cirrus->pitch / 8; in cirrus_mode_set()
276 wreg_crt(cirrus, VGA_CRTC_OFFSET, tmp); in cirrus_mode_set()
280 tmp |= (cirrus->pitch >> 7) & 0x10; in cirrus_mode_set()
281 tmp |= (cirrus->pitch >> 6) & 0x40; in cirrus_mode_set()
282 wreg_crt(cirrus, 0x1b, tmp); in cirrus_mode_set()
285 wreg_gfx(cirrus, VGA_GFX_MODE, 0x40); in cirrus_mode_set()
288 wreg_gfx(cirrus, VGA_GFX_MISC, 0x01); in cirrus_mode_set()
290 wreg_hdr(cirrus, hdr); in cirrus_mode_set()
292 cirrus_set_start_address(cirrus, 0); in cirrus_mode_set()
302 struct cirrus_device *cirrus = fb->dev->dev_private; in cirrus_fb_blit_rect() local
309 if (cirrus->cpp == fb->format->cpp[0]) in cirrus_fb_blit_rect()
310 drm_fb_memcpy_dstclip(cirrus->vram, in cirrus_fb_blit_rect()
313 else if (fb->format->cpp[0] == 4 && cirrus->cpp == 2) in cirrus_fb_blit_rect()
314 drm_fb_xrgb8888_to_rgb565_dstclip(cirrus->vram, in cirrus_fb_blit_rect()
315 cirrus->pitch, in cirrus_fb_blit_rect()
318 else if (fb->format->cpp[0] == 4 && cirrus->cpp == 3) in cirrus_fb_blit_rect()
319 drm_fb_xrgb8888_to_rgb888_dstclip(cirrus->vram, in cirrus_fb_blit_rect()
320 cirrus->pitch, in cirrus_fb_blit_rect()
382 static int cirrus_conn_init(struct cirrus_device *cirrus) in cirrus_conn_init() argument
384 drm_connector_helper_add(&cirrus->conn, &cirrus_conn_helper_funcs); in cirrus_conn_init()
385 return drm_connector_init(&cirrus->dev, &cirrus->conn, in cirrus_conn_init()
416 struct cirrus_device *cirrus = pipe->crtc.dev->dev_private; in cirrus_pipe_enable() local
418 cirrus_mode_set(cirrus, &crtc_state->mode, plane_state->fb); in cirrus_pipe_enable()
425 struct cirrus_device *cirrus = pipe->crtc.dev->dev_private; in cirrus_pipe_update() local
431 cirrus->cpp != cirrus_cpp(pipe->plane.state->fb)) in cirrus_pipe_update()
432 cirrus_mode_set(cirrus, &crtc->mode, in cirrus_pipe_update()
464 static int cirrus_pipe_init(struct cirrus_device *cirrus) in cirrus_pipe_init() argument
466 return drm_simple_display_pipe_init(&cirrus->dev, in cirrus_pipe_init()
467 &cirrus->pipe, in cirrus_pipe_init()
472 &cirrus->conn); in cirrus_pipe_init()
497 static void cirrus_mode_config_init(struct cirrus_device *cirrus) in cirrus_mode_config_init() argument
499 struct drm_device *dev = &cirrus->dev; in cirrus_mode_config_init()
532 struct cirrus_device *cirrus; in cirrus_pci_probe() local
548 cirrus = kzalloc(sizeof(*cirrus), GFP_KERNEL); in cirrus_pci_probe()
549 if (cirrus == NULL) in cirrus_pci_probe()
552 dev = &cirrus->dev; in cirrus_pci_probe()
556 dev->dev_private = cirrus; in cirrus_pci_probe()
559 cirrus->vram = ioremap(pci_resource_start(pdev, 0), in cirrus_pci_probe()
561 if (cirrus->vram == NULL) in cirrus_pci_probe()
564 cirrus->mmio = ioremap(pci_resource_start(pdev, 1), in cirrus_pci_probe()
566 if (cirrus->mmio == NULL) in cirrus_pci_probe()
569 cirrus_mode_config_init(cirrus); in cirrus_pci_probe()
571 ret = cirrus_conn_init(cirrus); in cirrus_pci_probe()
575 ret = cirrus_pipe_init(cirrus); in cirrus_pci_probe()
592 iounmap(cirrus->mmio); in cirrus_pci_probe()
594 iounmap(cirrus->vram); in cirrus_pci_probe()
598 kfree(cirrus); in cirrus_pci_probe()
607 struct cirrus_device *cirrus = dev->dev_private; in cirrus_pci_remove() local
611 iounmap(cirrus->mmio); in cirrus_pci_remove()
612 iounmap(cirrus->vram); in cirrus_pci_remove()
614 kfree(cirrus); in cirrus_pci_remove()