diff options
author | Andreas Sandberg <Andreas.Sandberg@ARM.com> | 2015-08-07 09:59:25 +0100 |
---|---|---|
committer | Andreas Sandberg <Andreas.Sandberg@ARM.com> | 2015-08-07 09:59:25 +0100 |
commit | 598edaae0509c455e06e1689fd3c50caaeef0f30 (patch) | |
tree | ba594372e884ede6ae0c1674fa35519c93e3c0ec /src/dev/arm/RealView.py | |
parent | cd098a7e84c05d67026e3812f6952fbf3b9e070e (diff) | |
download | gem5-598edaae0509c455e06e1689fd3c50caaeef0f30.tar.xz |
arm: Add support for programmable oscillators
Add support for oscillators that can be programmed using the RealView
/ Versatile Express configuration interface. These oscillators are
typically used for things like the pixel clock in the display
controller.
The default configurations support the oscillators from a Versatile
Express motherboard (V2M-P1) with a CoreTile Express A15x2.
Diffstat (limited to 'src/dev/arm/RealView.py')
-rw-r--r-- | src/dev/arm/RealView.py | 54 |
1 files changed, 50 insertions, 4 deletions
diff --git a/src/dev/arm/RealView.py b/src/dev/arm/RealView.py index 5365ac9de..a9b9dede2 100644 --- a/src/dev/arm/RealView.py +++ b/src/dev/arm/RealView.py @@ -42,6 +42,8 @@ from m5.params import * from m5.proxy import * +from ClockDomain import ClockDomain +from VoltageDomain import VoltageDomain from Device import BasicPioDevice, PioDevice, IsaFake, BadAddr, DmaDevice from Pci import PciConfigAll from Ethernet import NSGigE, IGbE_igb, IGbE_e1000 @@ -89,6 +91,49 @@ class RealViewCtrl(BasicPioDevice): proc_id1 = Param.UInt32(0x0C000222, "Processor ID, SYS_PROCID1") idreg = Param.UInt32(0x00000000, "ID Register, SYS_ID") +class RealViewOsc(ClockDomain): + type = 'RealViewOsc' + cxx_header = "dev/arm/rv_ctrl.hh" + + parent = Param.RealViewCtrl(Parent.any, "RealView controller") + + # TODO: We currently don't have the notion of a clock source, + # which means we have to associate oscillators with a voltage + # source. + voltage_domain = Param.VoltageDomain(Parent.voltage_domain, + "Voltage domain") + + # See ARM DUI 0447J (ARM Motherboard Express uATX -- V2M-P1) and + # the individual core/logic tile reference manuals for details + # about the site/position/dcc/device allocation. + site = Param.UInt8("Board Site") + position = Param.UInt8("Position in device stack") + dcc = Param.UInt8("Daughterboard Configuration Controller") + device = Param.UInt8("Device ID") + + freq = Param.Clock("Default frequency") + +class VExpressCoreTileCtrl(RealViewCtrl): + class MotherBoardOsc(RealViewOsc): + site, position, dcc = (0, 0, 0) + + class CoreTileOsc(RealViewOsc): + site, position, dcc = (1, 0, 0) + + # See ARM DUI 0447J (ARM Motherboard Express uATX -- V2M-P1) + osc_mcc = MotherBoardOsc(device=0, freq="50MHz") + osc_clcd = MotherBoardOsc(device=1, freq="23.75MHz") + osc_peripheral = MotherBoardOsc(device=2, freq="24MHz") + osc_system_bus = MotherBoardOsc(device=4, freq="24MHz") + + # See Table 2.8 in ARM DUI 0604E (CoreTile Express A15x2 TRM). + osc_cpu = CoreTileOsc(device=0, freq="60MHz") + osc_hsbm = CoreTileOsc(device=4, freq="40MHz") + osc_pxl = CoreTileOsc(device=5, freq="23.75MHz") + osc_smb = CoreTileOsc(device=6, freq="50MHz") + osc_sys = CoreTileOsc(device=7, freq="60MHz") + osc_ddr = CoreTileOsc(device=8, freq="40MHz") + class VGic(PioDevice): type = 'VGic' cxx_header = "dev/arm/vgic.hh" @@ -227,7 +272,7 @@ class RealView(Platform): # Chapter 4: Programmer's Reference class RealViewPBX(RealView): uart = Pl011(pio_addr=0x10009000, int_num=44) - realview_io = RealViewCtrl(pio_addr=0x10000000) + realview_io = VExpressCoreTileCtrl(pio_addr=0x10000000) gic = Pl390() timer0 = Sp804(int_num0=36, int_num1=36, pio_addr=0x10011000) timer1 = Sp804(int_num0=37, int_num1=37, pio_addr=0x10012000) @@ -354,7 +399,7 @@ class RealViewPBX(RealView): # Chapter 4: Programmer's Reference class RealViewEB(RealView): uart = Pl011(pio_addr=0x10009000, int_num=44) - realview_io = RealViewCtrl(pio_addr=0x10000000, idreg=0x01400500) + realview_io = VExpressCoreTileCtrl(pio_addr=0x10000000, idreg=0x01400500) gic = Pl390(dist_addr=0x10041000, cpu_addr=0x10040000) timer0 = Sp804(int_num0=36, int_num1=36, pio_addr=0x10011000) timer1 = Sp804(int_num0=37, int_num1=37, pio_addr=0x10012000) @@ -464,8 +509,9 @@ class VExpress_EMM(RealView): _mem_regions = [(Addr('2GB'), Addr('2GB'))] pci_cfg_base = 0x30000000 uart = Pl011(pio_addr=0x1c090000, int_num=37) - realview_io = RealViewCtrl(proc_id0=0x14000000, proc_id1=0x14000000, \ - idreg=0x02250000, pio_addr=0x1C010000) + realview_io = VExpressCoreTileCtrl( + proc_id0=0x14000000, proc_id1=0x14000000, + idreg=0x02250000, pio_addr=0x1C010000) gic = Pl390(dist_addr=0x2C001000, cpu_addr=0x2C002000) local_cpu_timer = CpuLocalTimer(int_num_timer=29, int_num_watchdog=30, pio_addr=0x2C080000) generic_timer = GenericTimer(int_phys=29, int_virt=27) |