summaryrefslogtreecommitdiff
path: root/src/dev/arm/RealView.py
diff options
context:
space:
mode:
authorAndreas Sandberg <andreas.sandberg@arm.com>2015-09-11 15:55:46 +0100
committerAndreas Sandberg <andreas.sandberg@arm.com>2015-09-11 15:55:46 +0100
commitf7055e9215106fbd8297083298a815ef7098a028 (patch)
tree62ba5ed3436bd5eef88f5330846bae4f7d1f2216 /src/dev/arm/RealView.py
parentf611d4f22e913633e884b0d87b4de52def6434f3 (diff)
downloadgem5-f7055e9215106fbd8297083298a815ef7098a028.tar.xz
dev, arm: Rewrite the HDLCD controller
Rewrite the HDLCD controller to use the new DMA engine and pixel pump. This fixes several bugs in the current implementation: * Broken/missing interrupt support (VSync, underrun, DMA end) * Fragile resolution changes (changing resolutions used to cause assertion errors). * Support for resolutions with a width that isn't divisible by 32. * The pixel clock can now be set dynamically. This breaks checkpoint compatibility. Checkpoints can be upgraded with the checkpoint conversion script. However, upgraded checkpoints won't contain the state of the current frame. That means that HDLCD controllers restoring from a converted checkpoint immediately start drawing a new frame (i.e, expect timing differences).
Diffstat (limited to 'src/dev/arm/RealView.py')
-rw-r--r--src/dev/arm/RealView.py18
1 files changed, 10 insertions, 8 deletions
diff --git a/src/dev/arm/RealView.py b/src/dev/arm/RealView.py
index a9b9dede2..dc8868b9f 100644
--- a/src/dev/arm/RealView.py
+++ b/src/dev/arm/RealView.py
@@ -54,6 +54,7 @@ from Uart import Uart
from SimpleMemory import SimpleMemory
from Gic import *
from EnergyCtrl import EnergyCtrl
+from ClockDomain import SrcClockDomain
class AmbaPioDevice(BasicPioDevice):
type = 'AmbaPioDevice'
@@ -218,23 +219,23 @@ class Pl111(AmbaDmaDevice):
amba_id = 0x00141111
enable_capture = Param.Bool(True, "capture frame to system.framebuffer.bmp")
-
class HDLcd(AmbaDmaDevice):
type = 'HDLcd'
cxx_header = "dev/arm/hdlcd.hh"
- # For reference, 1024x768MR-16@60 ~= 56 MHz
- # 1920x1080MR-16@60 ~= 137 MHz
- # 3840x2160MR-16@60 ~= 533 MHz
- # Match against the resolution selected in the Linux DTS/DTB file.
- pixel_clock = Param.Clock('137MHz', "Clock frequency of the pixel clock "
- "(i.e. PXLREFCLK / OSCCLK 5")
vnc = Param.VncInput(Parent.any, "Vnc server for remote frame buffer "
"display")
amba_id = 0x00141000
workaround_swap_rb = Param.Bool(True, "Workaround incorrect color "
"selector order in some kernels")
+ workaround_dma_line_count = Param.Bool(True, "Workaround incorrect "
+ "DMA line count (off by 1)")
enable_capture = Param.Bool(True, "capture frame to system.framebuffer.bmp")
+ pixel_buffer_size = Param.MemorySize32("2kB", "Size of address range")
+
+ pxl_clk = Param.ClockDomain("Pixel clock source")
+ pixel_chunk = Param.Unsigned(32, "Number of pixels to handle in one batch")
+
class RealView(Platform):
type = 'RealView'
cxx_header = "dev/arm/realview.hh"
@@ -518,7 +519,8 @@ class VExpress_EMM(RealView):
timer0 = Sp804(int_num0=34, int_num1=34, pio_addr=0x1C110000, clock0='1MHz', clock1='1MHz')
timer1 = Sp804(int_num0=35, int_num1=35, pio_addr=0x1C120000, clock0='1MHz', clock1='1MHz')
clcd = Pl111(pio_addr=0x1c1f0000, int_num=46)
- hdlcd = HDLcd(pio_addr=0x2b000000, int_num=117)
+ hdlcd = HDLcd(pxl_clk=realview_io.osc_pxl,
+ pio_addr=0x2b000000, int_num=117)
kmi0 = Pl050(pio_addr=0x1c060000, int_num=44)
kmi1 = Pl050(pio_addr=0x1c070000, int_num=45, is_mouse=True)
vgic = VGic(vcpu_addr=0x2c006000, hv_addr=0x2c004000, ppint=25)