that is an issue. One of them has the data in a core cache and the other is going to DRAM to get it. There are two options.
(1) Map the storage location as uncacheable, so both cores always go to DRAM. (2) Implement the addrBootUncacheable() function in your system class (I assume you've got a BarrelFishArmSystem class). This class checks certain known symbols and make them uncacheable until linux all caches are enabled. Ali On 12.07.2012 09:17, Samuel Hitz wrote: > Yes the newly booted core reads it before caches get enabled. Shouldn't it be going to memory then instead? > > On Thu, Jul 12, 2012 at 3:15 PM, Ali Saidi <[email protected] [4]> wrote: > >> Did one of them save/read it with caches disabled? >> >> Ali >> >> On 12.07.2012 08:07, Samuel Hitz wrote: >> >>> Ok I digged a little deeper now. The problem isn't the SYSFLAG register anymore, the second core gets booted. However I save right at the beginning the base of the .got section in r10. This is the instruction which achieves this >>> 0x6401018 ldr r10, [pc, #16] ; 0x6401030 >>> >>> and this is whats at 0x6401030 >>> >>> 0x6401030: 0x06427acc >>> >>> which is indeed the address of the .got section. The problem is that after this instruction r10 contains 0 with caches enabled and the real value if I disable caches. I traced cache accesses and I didn't give me any clues. You said once that Gem5 handles cache coherency on it's own. Do you have any ideas how this can happen and what I could do to fix it? >>> Best, >>> Samuel >>> >>> On Thu, Jul 12, 2012 at 12:15 AM, Ali Saidi <[email protected] [3]> wrote: >>> >>>> On 11.07.2012 03:35, Samuel Hitz wrote: >>>> >>>>> Hi there, >>>>> I have a problem reading/writing to the SYSFLAG register when caches are turned on. I wan to write the entry point for the new core in there, which works fine when caches are turned of. However when caches are turned on I get >>>>> >>>>> gem5.debug: build/ARM/dev/arm/rv_ctrl.cc:55: virtual Tick RealViewCtrl::read(Packet*): Assertion `pkt->getSize() == 4' failed. >>>>> Here is a dump of the 'pkt' in question >>>>> >>>>> (gdb) p/x *pkt >>>>> $4 = {= {},= {_vptr.Printable = 0x2020d30}, static PUBLIC_FLAGS = 0x0, static PRIVATE_FLAGS = 0x7f0f, >>>>> >>>>> static COPY_FLAGS = 0xf, static SHARED = 0x1, static EXPRESS_SNOOP = 0x2, static SUPPLY_EXCLUSIVE = 0x4, static MEM_INHIBIT = 0x8, >>>>> static VALID_ADDR = 0x100, static VALID_SIZE = 0x200, static VALID_SRC = 0x400, static VALID_DST = 0x800, static STATIC_DATA = 0x1000, >>>>> static DYNAMIC_DATA = 0x2000, static ARRAY_DATA = 0x4000, static SUPPRESS_FUNC_ERROR = 0x8000, flags = {_flags = 0x6700}, cmd = { >>>>> static commandInfo = 0x28ce780, cmd = 0x12}, req = 0x39024a0, data = 0x468b0d0, addr = 0xff000000, size = 0x40, src = 0x0, dest = 0x2, origCmd = { >>>>> static commandInfo =, cmd = 0x0}, bytesValidStart = 0x0, bytesValidEnd = 0x0, time = 0x2495f27114, >>>>> >>>>> finishTime = 0x2495f2e450, firstWordTime = 0x7fff000a6425, senderState = 0x0} >>>>> (gdb) p/x pkt->getAddr() >>>>> $5 = 0xff000000 >>>>> (gdb) p/x pkt->getSize() >>>>> $6 = 0x40 >>>>> >>>>> and a backtrace of whats happening >>>>> >>>>> #0 RealViewCtrl::read (this=0x382c350, pkt=0x466a3f0) at build/ARM/dev/arm/rv_ctrl.cc:54 >>>>> #1 0x0000000001788b16 in PioPort::recvAtomic (this=0x382c380, pkt=0x466a3f0) at build/ARM/dev/io_device.cc:60 >>>>> #2 0x00000000018a1421 in MasterPort::sendAtomic (this=0x38f9f50, pkt=0x466a3f0) at build/ARM/mem/port.cc:111 >>>>> #3 0x0000000001885564 in Bus::recvAtomic (this=0x38f9c60, pkt=0x466a3f0) at build/ARM/mem/bus.cc:566 >>>>> #4 0x000000000188b7ef in Bus::BusSlavePort::recvAtomic (this=0x38fa670, pkt=0x466a3f0) at build/ARM/mem/bus.hh:105 >>>>> #5 0x00000000018a1421 in MasterPort::sendAtomic (this=0x3813cf8, pkt=0x466a3f0) at build/ARM/mem/port.cc:111 >>>>> #6 0x0000000001876d26 in Bridge::BridgeSlavePort::recvAtomic (this=0x3813c38, pkt=0x466a3f0) at build/ARM/mem/bridge.cc:413 >>>>> #7 0x00000000018a1421 in MasterPort::sendAtomic (this=0x380be50, pkt=0x466a3f0) at build/ARM/mem/port.cc:111 >>>>> #8 0x0000000001885564 in Bus::recvAtomic (this=0x38125e0, pkt=0x466a3f0) at build/ARM/mem/bus.cc:566 >>>>> #9 0x000000000188b7ef in Bus::BusSlavePort::recvAtomic (this=0x36fc8e0, pkt=0x466a3f0) at build/ARM/mem/bus.hh:105 >>>>> #10 0x00000000018a1421 in MasterPort::sendAtomic (this=0x38f9140, pkt=0x466a3f0) at build/ARM/mem/port.cc:111 >>>>> #11 0x0000000001969a2a in Cache::atomicAccess (this=0x38a03f0, pkt=0x466a170) at build/ARM/mem/cache/cache_impl.hh:675 >>>>> #12 0x0000000001971b6c in Cache::CpuSidePort::recvAtomic (this=0x38f8fc0, pkt=0x466a170) at build/ARM/mem/cache/cache_impl.hh:1605 >>>>> >>>>> #13 0x00000000018a1421 in MasterPort::sendAtomic (this=0x38f9690, pkt=0x466a170) at build/ARM/mem/port.cc:111 >>>>> #14 0x0000000001885564 in Bus::recvAtomic (this=0x38f9490, pkt=0x466a170) at build/ARM/mem/bus.cc:566 >>>>> #15 0x000000000188b7ef in Bus::BusSlavePort::recvAtomic (this=0x38f9790, pkt=0x466a170) at build/ARM/mem/bus.hh:105 >>>>> #16 0x00000000018a1421 in MasterPort::sendAtomic (this=0x39f1f80, pkt=0x466a170) at build/ARM/mem/port.cc:111 >>>>> #17 0x0000000001969a2a in Cache::atomicAccess (this=0x399a180, pkt=0x7fffffffc6f0) at build/ARM/mem/cache/cache_impl.hh:675 >>>>> #18 0x0000000001971b6c in Cache::CpuSidePort::recvAtomic (this=0x39f1df0, pkt=0x7fffffffc6f0) at build/ARM/mem/cache/cache_impl.hh:1605 >>>>> >>>>> #19 0x00000000018a1421 in MasterPort::sendAtomic (this=0x39023d8, pkt=0x7fffffffc6f0) at build/ARM/mem/port.cc:111 >>>>> #20 0x000000000151ea11 in AtomicSimpleCPU::writeMem (this=0x39020d0, data=0x7fffffffc84c "", size=4, addr=4278190128, flags=163, res=0x0) >>>>> at build/ARM/cpu/simple/atomic.cc:387 >>>>> #21 0x00000000008e7938 in writeMemTiming(xc=0x39020d0, traceData=0x0, mem=83890176, addr=4278190128, flags=163, res=0x0) >>>>> at build/ARM/arch/generic/memhelpers.hh:84 >>>>> #22 0x00000000008e7851 in writeMemAtomic(xc=0x39020d0, traceData=0x0, mem=@0x7fffffffc938: 83890176, addr=4278190128, >>>>> >>>>> flags=163, res=0x0) at build/ARM/arch/generic/memhelpers.hh:93 >>>>> #23 0x000000000080532d in ArmISAInst::STORE_IMM_AY_PN_SN_UN_WN_SZ4::execute (this=0x46a3200, xc=0x39020d0, traceData=0x0) >>>>> at build/ARM/arch/arm/generated/atomic_simple_cpu_exec.cc:27640 >>>>> #24 0x000000000151f675 in AtomicSimpleCPU::tick (this=0x39020d0) at build/ARM/cpu/simple/atomic.cc:494 >>>>> #25 0x000000000151b028 in AtomicSimpleCPU::TickEvent::process (this=0x3902360) at build/ARM/cpu/simple/atomic.cc:72 >>>>> #26 0x000000000145df30 in EventQueue::serviceOne (this=0x28cc8c0) at build/ARM/sim/eventq.cc:204 >>>>> #27 0x00000000014b2487 in simulate (num_cycles=9223372036854775807) at build/ARM/sim/simulate.cc:73 >>>>> >>>>> It also doesn't work if I map in the page containing the register as uncacheable. >>>>> Can someone with more insight guess why this is happening? As I said with caches turned of the same code works like a charm. >>>>> Best, >>>>> Samuel >>>> >>>> Hi Samuel, >>>> >>>> I don't think you're managing to actually mark the page as uncachable. The read that you're doing is actually causing the cache to fetch 64 bytes from the device, which is the cause of the issue. If you've updated the translation in memory, have you flushed the TLB? >>>> >>>> Thanks, >>>> >>>> Ali >>>> >>>> _______________________________________________ >>>> gem5-users mailing list >>>> [email protected] [1] >>>> http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users [2] Links: ------ [1] mailto:[email protected] [2] http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users [3] mailto:[email protected] [4] mailto:[email protected]
_______________________________________________ gem5-users mailing list [email protected] http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users
