Don't hard code the location of m5AlphaAccess. Instead, move the

code into a function that can be called by the AlphaConsole class.
AlphaConsole will pass in its address.

arch/alpha/ev5.hh:
    Move Phys2K0Seg to ev5.hh and fixup the TSUNAMI uncacheable
    bits so that they will be converted correctly.
dev/alpha_access.h:
    Do not hard code the location of the AlphaConsole
dev/alpha_console.cc:
    fixup #includes
    tell the system where the alpha console is
sim/system.hh:
    Provide a function that will tell the system where the AlphaAccess
    structure (device) lives

--HG--
extra : convert_revision : 92d70ca926151a32eebe9925de597459ac58013e
This commit is contained in:
Nathan Binkert 2005-06-28 12:42:15 -04:00
parent d172447a7a
commit 036a8ceb8d
5 changed files with 37 additions and 26 deletions

View file

@ -58,6 +58,16 @@ const Addr PAddrUncachedBit39 = ULL(0x8000000000);
const Addr PAddrUncachedBit40 = ULL(0x10000000000);
const Addr PAddrUncachedBit43 = ULL(0x80000000000);
const Addr PAddrUncachedMask = ULL(0x807ffffffff); // Clear PA<42:35>
inline Addr Phys2K0Seg(Addr addr)
{
#ifndef ALPHA_TLASER
if (addr & PAddrUncachedBit43) {
addr &= PAddrUncachedMask;
addr |= PAddrUncachedBit40;
}
#endif
return addr | AlphaISA::K0SegBase;
}
inline int DTB_ASN_ASN(uint64_t reg) { return reg >> 57 & AsnMask; }
inline Addr DTB_PTE_PPN(uint64_t reg)

View file

@ -38,12 +38,6 @@
#ifdef CONSOLE
typedef unsigned uint32_t;
typedef unsigned long uint64_t;
#else
#ifdef ALPHA_TLASER
#define ALPHA_ACCESS_BASE ULL(0xfffffc8000a00000)
#else
#define ALPHA_ACCESS_BASE ULL(0xfffffd0200000000)
#endif
#endif
// This structure hacked up from simos

View file

@ -35,23 +35,22 @@
#include <string>
#include "base/inifile.hh"
#include "base/str.hh" // for to_number()
#include "base/str.hh"
#include "base/trace.hh"
#include "cpu/base.hh"
#include "cpu/exec_context.hh"
#include "dev/alpha_console.hh"
#include "dev/simconsole.hh"
#include "dev/simple_disk.hh"
#include "dev/tsunami_io.hh"
#include "mem/bus/bus.hh"
#include "mem/bus/pio_interface.hh"
#include "mem/bus/pio_interface_impl.hh"
#include "mem/functional/memory_control.hh"
#include "mem/functional/physical.hh"
#include "sim/builder.hh"
#include "sim/system.hh"
#include "dev/tsunami_io.hh"
#include "sim/sim_object.hh"
#include "targetarch/byte_swap.hh"
#include "sim/system.hh"
using namespace std;
@ -85,6 +84,8 @@ AlphaConsole::AlphaConsole(const string &name, SimConsole *cons, SimpleDisk *d,
alphaAccess->bootStrapImpure = 0;
alphaAccess->bootStrapCPU = 0;
alphaAccess->align2 = 0;
system->setAlphaAccess(addr);
}
void

View file

@ -30,7 +30,6 @@
#include "base/loader/symtab.hh"
#include "base/remote_gdb.hh"
#include "cpu/exec_context.hh"
#include "dev/alpha_access.h"
#include "kern/kernel_stats.hh"
#include "mem/functional/memory_control.hh"
#include "mem/functional/physical.hh"
@ -144,21 +143,6 @@ System::System(Params *p)
strcpy(osflags, params->boot_osflags.c_str());
}
/**
* Set the m5AlphaAccess pointer in the console
*/
if (consoleSymtab->findAddress("m5AlphaAccess", addr)) {
Addr paddr = vtophys(physmem, addr);
uint64_t *m5AlphaAccess =
(uint64_t *)physmem->dma_addr(paddr, sizeof(uint64_t));
if (!m5AlphaAccess)
panic("could not translate m5AlphaAccess addr\n");
*m5AlphaAccess = htoa(ALPHA_ACCESS_BASE);
} else
panic("could not find m5AlphaAccess\n");
/**
* Set the hardware reset parameter block system type and revision
* information to Tsunami.
@ -196,6 +180,23 @@ System::~System()
#endif
}
void
System::setAlphaAccess(Addr access)
{
Addr addr = 0;
if (consoleSymtab->findAddress("m5AlphaAccess", addr)) {
Addr paddr = vtophys(physmem, addr);
uint64_t *m5AlphaAccess =
(uint64_t *)physmem->dma_addr(paddr, sizeof(uint64_t));
if (!m5AlphaAccess)
panic("could not translate m5AlphaAccess addr\n");
*m5AlphaAccess = htoa(EV5::Phys2K0Seg(access));
} else
panic("could not find m5AlphaAccess\n");
}
bool
System::breakpoint()
{

View file

@ -127,6 +127,11 @@ class System : public SimObject
void startup();
public:
/**
* Set the m5AlphaAccess pointer in the console
*/
void setAlphaAccess(Addr access);
/**
* Returns the addess the kernel starts at.
* @return address the kernel starts at