Lines Matching defs:cirrus
23 #include <video/cirrus.h>
43 #define DRIVER_NAME "cirrus"
44 #define DRIVER_DESC "qemu cirrus vga"
77 static u8 rreg_seq(struct cirrus_device *cirrus, u8 reg)
79 iowrite8(reg, cirrus->mmio + SEQ_INDEX);
80 return ioread8(cirrus->mmio + SEQ_DATA);
83 static void wreg_seq(struct cirrus_device *cirrus, u8 reg, u8 val)
85 iowrite8(reg, cirrus->mmio + SEQ_INDEX);
86 iowrite8(val, cirrus->mmio + SEQ_DATA);
92 static u8 rreg_crt(struct cirrus_device *cirrus, u8 reg)
94 iowrite8(reg, cirrus->mmio + CRT_INDEX);
95 return ioread8(cirrus->mmio + CRT_DATA);
98 static void wreg_crt(struct cirrus_device *cirrus, u8 reg, u8 val)
100 iowrite8(reg, cirrus->mmio + CRT_INDEX);
101 iowrite8(val, cirrus->mmio + CRT_DATA);
107 static void wreg_gfx(struct cirrus_device *cirrus, u8 reg, u8 val)
109 iowrite8(reg, cirrus->mmio + GFX_INDEX);
110 iowrite8(val, cirrus->mmio + GFX_DATA);
115 static void wreg_hdr(struct cirrus_device *cirrus, u8 val)
117 ioread8(cirrus->mmio + VGA_DAC_MASK);
118 ioread8(cirrus->mmio + VGA_DAC_MASK);
119 ioread8(cirrus->mmio + VGA_DAC_MASK);
120 ioread8(cirrus->mmio + VGA_DAC_MASK);
121 iowrite8(val, cirrus->mmio + VGA_DAC_MASK);
155 static void cirrus_set_start_address(struct cirrus_device *cirrus, u32 offset)
161 if (!drm_dev_enter(&cirrus->dev, &idx))
165 wreg_crt(cirrus, 0x0c, (u8)((addr >> 8) & 0xff));
166 wreg_crt(cirrus, 0x0d, (u8)(addr & 0xff));
168 tmp = rreg_crt(cirrus, 0x1b);
172 wreg_crt(cirrus, 0x1b, tmp);
174 tmp = rreg_crt(cirrus, 0x1d);
177 wreg_crt(cirrus, 0x1d, tmp);
182 static int cirrus_mode_set(struct cirrus_device *cirrus,
191 if (!drm_dev_enter(&cirrus->dev, &idx))
210 wreg_crt(cirrus, VGA_CRTC_V_SYNC_END, 0x20);
211 wreg_crt(cirrus, VGA_CRTC_H_TOTAL, htotal);
212 wreg_crt(cirrus, VGA_CRTC_H_DISP, hdispend);
213 wreg_crt(cirrus, VGA_CRTC_H_SYNC_START, hsyncstart);
214 wreg_crt(cirrus, VGA_CRTC_H_SYNC_END, hsyncend);
215 wreg_crt(cirrus, VGA_CRTC_V_TOTAL, vtotal & 0xff);
216 wreg_crt(cirrus, VGA_CRTC_V_DISP_END, vdispend & 0xff);
221 wreg_crt(cirrus, VGA_CRTC_MAX_SCAN, tmp);
237 wreg_crt(cirrus, VGA_CRTC_OVERFLOW, tmp);
252 wreg_crt(cirrus, CL_CRT1A, tmp);
255 wreg_crt(cirrus, VGA_CRTC_MODE, 0x03);
257 sr07 = rreg_seq(cirrus, 0x07);
261 cirrus->cpp = cirrus_cpp(fb);
262 switch (cirrus->cpp * 8) {
283 wreg_seq(cirrus, 0x7, sr07);
286 cirrus->pitch = cirrus_pitch(fb);
287 tmp = cirrus->pitch / 8;
288 wreg_crt(cirrus, VGA_CRTC_OFFSET, tmp);
292 tmp |= (cirrus->pitch >> 7) & 0x10;
293 tmp |= (cirrus->pitch >> 6) & 0x40;
294 wreg_crt(cirrus, 0x1b, tmp);
297 wreg_gfx(cirrus, VGA_GFX_MODE, 0x40);
300 wreg_gfx(cirrus, VGA_GFX_MISC, 0x01);
302 wreg_hdr(cirrus, hdr);
304 cirrus_set_start_address(cirrus, 0);
316 struct cirrus_device *cirrus = to_cirrus(fb->dev);
321 if (!drm_dev_enter(&cirrus->dev, &idx))
329 if (cirrus->cpp == fb->format->cpp[0])
330 drm_fb_memcpy_dstclip(cirrus->vram,
333 else if (fb->format->cpp[0] == 4 && cirrus->cpp == 2)
334 drm_fb_xrgb8888_to_rgb565_dstclip(cirrus->vram,
335 cirrus->pitch,
338 else if (fb->format->cpp[0] == 4 && cirrus->cpp == 3)
339 drm_fb_xrgb8888_to_rgb888_dstclip(cirrus->vram,
340 cirrus->pitch,
382 /* cirrus connector */
407 static int cirrus_conn_init(struct cirrus_device *cirrus)
409 drm_connector_helper_add(&cirrus->conn, &cirrus_conn_helper_funcs);
410 return drm_connector_init(&cirrus->dev, &cirrus->conn,
416 /* cirrus (simple) display pipe */
441 struct cirrus_device *cirrus = to_cirrus(pipe->crtc.dev);
443 cirrus_mode_set(cirrus, &crtc_state->mode, plane_state->fb);
450 struct cirrus_device *cirrus = to_cirrus(pipe->crtc.dev);
456 cirrus->cpp != cirrus_cpp(pipe->plane.state->fb))
457 cirrus_mode_set(cirrus, &crtc->mode,
482 static int cirrus_pipe_init(struct cirrus_device *cirrus)
484 return drm_simple_display_pipe_init(&cirrus->dev,
485 &cirrus->pipe,
490 &cirrus->conn);
494 /* cirrus framebuffers & mode config */
515 static int cirrus_mode_config_init(struct cirrus_device *cirrus)
517 struct drm_device *dev = &cirrus->dev;
556 struct cirrus_device *cirrus;
572 cirrus = devm_drm_dev_alloc(&pdev->dev, &cirrus_driver,
574 if (IS_ERR(cirrus))
575 return PTR_ERR(cirrus);
577 dev = &cirrus->dev;
579 cirrus->vram = devm_ioremap(&pdev->dev, pci_resource_start(pdev, 0),
581 if (cirrus->vram == NULL)
584 cirrus->mmio = devm_ioremap(&pdev->dev, pci_resource_start(pdev, 1),
586 if (cirrus->mmio == NULL)
589 ret = cirrus_mode_config_init(cirrus);
593 ret = cirrus_conn_init(cirrus);
597 ret = cirrus_pipe_init(cirrus);
625 /* only bind to the cirrus chip in qemu */