dev-arm: improve Pl390 parameters
authorCiro Santilli <ciro.santilli@arm.com>
Thu, 30 Aug 2018 13:50:31 +0000 (14:50 +0100)
committerCiro Santilli <ciro.santilli@arm.com>
Wed, 12 Sep 2018 10:27:06 +0000 (10:27 +0000)
Remove default dist_addr and cpu_addr register addresses since those are
purely platform specific.

Parametrize the cpu_size parameter. RealViewPBX has the Gic CPU and
distributor base too close for the newer CPU size of 0x2000, leading to
overlap.

This was introduced in I90a9f669a46a37d79c6cc542087cf91f2044f104 and makes
using RealViewPBX fail with:

fatal: system.membus has two ports responding within range
[0x1f000100 : 0x1f0020ff]:
        system.realview.gic.pio
        system.realview.gic.pio

Change-Id: Ic6c0e6b3d4705ff369eb739d54a1173a47819b7d
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/12491
Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>

src/dev/arm/Gic.py
src/dev/arm/RealView.py
src/dev/arm/gic_pl390.cc
src/dev/arm/gic_pl390.hh

index 4cc661f0b9518abae8e8cc28917a2faed770e735..3d49c8597981a7ccecaf705f9531a4dc007e791e 100644 (file)
@@ -72,8 +72,9 @@ class Pl390(BaseGic):
     type = 'Pl390'
     cxx_header = "dev/arm/gic_pl390.hh"
 
-    dist_addr = Param.Addr(0x1f001000, "Address for distributor")
-    cpu_addr = Param.Addr(0x1f000100, "Address for cpu")
+    dist_addr = Param.Addr("Address for distributor")
+    cpu_addr = Param.Addr("Address for cpu")
+    cpu_size = Param.Addr(0x2000, "Size of cpu register bank")
     dist_pio_delay = Param.Latency('10ns', "Delay for PIO r/w to distributor")
     cpu_pio_delay = Param.Latency('10ns', "Delay for PIO r/w to cpu interface")
     int_latency = Param.Latency('10ns', "Delay for interrupt to get to CPU")
index a1b3130832c921192000a447b435936d99e85ab7..d38b867757c6061865ac290614632beaace30e93 100644 (file)
@@ -614,7 +614,7 @@ class RealViewPBX(RealView):
     realview_io = RealViewCtrl(pio_addr=0x10000000)
     mcc = VExpressMCC()
     dcc = CoreTile2A15DCC()
-    gic = Pl390()
+    gic = Pl390(cpu_addr=0x1f000100, dist_addr=0x1f001000, cpu_size=0x100)
     pci_host = GenericPciHost(
         conf_base=0x30000000, conf_size='256MB', conf_device_bits=16,
         pci_pio_base=0)
index b0c4e99eec8fded857124fe23ea0fcd463bea432..9b671e0ca301510aabcb090b4d5286fcdb6a0c31 100644 (file)
@@ -65,7 +65,7 @@ const AddrRange Pl390::GICD_ICFGR     (0xc00, 0xcff);
 Pl390::Pl390(const Params *p)
     : BaseGic(p),
       distRange(RangeSize(p->dist_addr, DIST_SIZE)),
-      cpuRange(RangeSize(p->cpu_addr, CPU_SIZE)),
+      cpuRange(RangeSize(p->cpu_addr, p->cpu_size)),
       addrRanges{distRange, cpuRange},
       distPioDelay(p->dist_pio_delay),
       cpuPioDelay(p->cpu_pio_delay), intLatency(p->int_latency),
index 7fd4bcbdaeee2dd5aa5ff28643128d12c2efd5cf..7183877f5f3df50fbd340aa30b2a8b8c8e5ee2e1 100644 (file)
@@ -110,8 +110,6 @@ class Pl390 : public BaseGic, public BaseGicRegisters
         GICC_APR2  = 0xd8, // active priority register 2
         GICC_APR3  = 0xdc, // active priority register 3
         GICC_IIDR  = 0xfc, // cpu interface id register
-
-        CPU_SIZE   = 0x2000,
     };
 
     static const int SGI_MAX = 16;  // Number of Software Gen Interrupts