41a42
> # Glenn Bergmans
42a44
> from m5.defines import buildEnv
44a47
> from m5.util.fdthelper import *
60a64
> from ClockedObject import ClockedObject
123a128,139
> def generateDeviceTree(self, state):
> node = FdtNode("sysreg@%x" % long(self.pio_addr))
> node.appendCompatible("arm,vexpress-sysreg")
> node.append(FdtPropertyWords("reg",
> state.addrCells(self.pio_addr) +
> state.sizeCells(0x1000) ))
> node.append(FdtProperty("gpio-controller"))
> node.append(FdtPropertyWords("#gpio-cells", [2]))
> node.appendPhandle(self)
>
> yield node
>
145a162,175
> def generateDeviceTree(self, state):
> phandle = state.phandle(self)
> node = FdtNode("osc@" + format(long(phandle), 'x'))
> node.appendCompatible("arm,vexpress-osc")
> node.append(FdtPropertyWords("arm,vexpress-sysreg,func",
> [0x1, int(self.device)]))
> node.append(FdtPropertyWords("#clock-cells", [0]))
> freq = int(1.0/self.freq.value) # Values are stored as a clock period
> node.append(FdtPropertyWords("freq-range", [freq, freq]))
> node.append(FdtPropertyStrings("clock-output-names",
> ["oscclk" + str(phandle)]))
> node.appendPhandle(self)
> yield node
>
183a214,227
> def generateDeviceTree(self, state):
> node = FdtNode("mcc")
> node.appendCompatible("arm,vexpress,config-bus")
> node.append(FdtPropertyWords("arm,vexpress,site", [0]))
>
> for obj in self._children.values():
> if issubclass(type(obj), SimObject):
> node.append(obj.generateDeviceTree(state))
>
> io_phandle = state.phandle(self.osc_mcc.parent.unproxy(self))
> node.append(FdtPropertyWords("arm,vexpress,config-bridge", io_phandle))
>
> yield node
>
202a247,259
> def generateDeviceTree(self, state):
> node = FdtNode("dcc")
> node.appendCompatible("arm,vexpress,config-bus")
>
> for obj in self._children.values():
> if isinstance(obj, SimObject):
> node.append(obj.generateDeviceTree(state))
>
> io_phandle = state.phandle(self.osc_cpu.parent.unproxy(self))
> node.append(FdtPropertyWords("arm,vexpress,config-bridge", io_phandle))
>
> yield node
>
213a271,298
> def generateDeviceTree(self, state):
> gic = self.gic.unproxy(self)
>
> node = FdtNode("interrupt-controller")
> node.appendCompatible(["gem5,gic", "arm,cortex-a15-gic",
> "arm,cortex-a9-gic"])
> node.append(FdtPropertyWords("#interrupt-cells", [3]))
> node.append(FdtPropertyWords("#address-cells", [0]))
> node.append(FdtProperty("interrupt-controller"))
>
> regs = (
> state.addrCells(gic.dist_addr) +
> state.sizeCells(0x1000) +
> state.addrCells(gic.cpu_addr) +
> state.sizeCells(0x1000) +
> state.addrCells(self.hv_addr) +
> state.sizeCells(0x2000) +
> state.addrCells(self.vcpu_addr) +
> state.sizeCells(0x2000) )
>
> node.append(FdtPropertyWords("reg", regs))
> node.append(FdtPropertyWords("interrupts",
> [1, int(self.ppint)-16, 0xf04]))
>
> node.appendPhandle(gic)
>
> yield node
>
227a313,326
> def generateDeviceTree(self, state):
> node = self.generateBasicPioDeviceNode(state, 'uart', self.pio_addr,
> 0x1000, [int(self.int_num)])
> node.appendCompatible(["arm,pl011", "arm,primecell"])
>
> # Hardcoded reference to the realview platform clocks, because the
> # clk_domain can only store one clock (i.e. it is not a VectorParam)
> realview = self._parent.unproxy(self)
> node.append(FdtPropertyWords("clocks",
> [state.phandle(realview.mcc.osc_peripheral),
> state.phandle(realview.dcc.osc_smb)]))
> node.append(FdtPropertyStrings("clock-names", ["uartclk", "apb_pclk"]))
> yield node
>
260a360,373
> def generateDeviceTree(self, state):
> node = FdtNode("timer")
>
> node.appendCompatible(["arm,cortex-a15-timer",
> "arm,armv7-timer",
> "arm,armv8-timer"])
> node.append(FdtPropertyWords("interrupts",
> [1, int(self.int_phys) - 16, 0xf08,
> 1, int(self.int_virt) - 16, 0xf08]))
> clock = state.phandle(self.clk_domain.unproxy(self))
> node.append(FdtPropertyWords("clocks", clock))
>
> yield node
>
276a390,399
> def generateDeviceTree(self, state):
> node = self.generateBasicPioDeviceNode(state, 'rtc', self.pio_addr,
> 0x1000, [int(self.int_num)])
>
> node.appendCompatible(["arm,pl031", "arm,primecell"])
> clock = state.phandle(self.clk_domain.unproxy(self))
> node.append(FdtPropertyWords("clocks", clock))
>
> yield node
>
284a408,417
> def generateDeviceTree(self, state):
> node = self.generateBasicPioDeviceNode(state, 'kmi', self.pio_addr,
> 0x1000, [int(self.int_num)])
>
> node.appendCompatible(["arm,pl050", "arm,primecell"])
> clock = state.phandle(self.clk_domain.unproxy(self))
> node.append(FdtPropertyWords("clocks", clock))
>
> yield node
>
314a448,464
> def generateDeviceTree(self, state):
> # Interrupt number is hardcoded; it is not a property of this class
> node = self.generateBasicPioDeviceNode(state, 'hdlcd',
> self.pio_addr, 0x1000, [63])
>
> node.appendCompatible(["arm,hdlcd"])
> node.append(FdtPropertyWords("clocks", state.phandle(self.pxl_clk)))
> node.append(FdtPropertyStrings("clock-names", ["pxlclk"]))
>
> # This driver is disabled by default since the required DT nodes
> # haven't been standardized yet. To use it, override this status to
> # "ok" and add the display configuration nodes required by the driver.
> # See the driver for more information.
> node.append(FdtPropertyStrings("status", ["disabled"]))
>
> yield node
>
374a525,528
> def generateDeviceTree(self, state):
> node = FdtNode("/") # Things in this module need to end up in the root
> node.append(FdtPropertyWords("interrupt-parent",
> state.phandle(self.gic)))
375a530,541
> for device in [getattr(self, c) for c in self._children]:
> if issubclass(type(device), SimObject):
> subnode = device.generateDeviceTree(state)
> node.append(subnode)
>
> yield node
>
> def annotateCpuDeviceNode(self, cpu, state):
> cpu.append(FdtPropertyStrings("enable-method", "spin-table"))
> cpu.append(FdtPropertyWords("cpu-release-addr", \
> state.addrCells(0x8000fff8)))
>
899a1066,1068
> clock24MHz = SrcClockDomain(clock="24MHz",
> voltage_domain=VoltageDomain(voltage="3.3V"))
>
920c1089,1090
< self.kmi0, self.kmi1,
---
> self.kmi0,
> self.kmi1,
923a1094
> self.clock24MHz,
942a1114,1127
>
> def generateDeviceTree(self, state):
> # Generate using standard RealView function
> dt = list(super(VExpress_GEM5_V1, self).generateDeviceTree(state))
> if len(dt) > 1:
> raise Exception("System returned too many DT nodes")
> node = dt[0]
>
> node.appendCompatible(["arm,vexpress"])
> node.append(FdtPropertyStrings("model", ["V2P-CA15"]))
> node.append(FdtPropertyWords("arm,hbi", [0x0]))
> node.append(FdtPropertyWords("arm,vexpress,site", [0xf]))
>
> yield node