예제 #1
0
int main()
{
  /*
   * L'adresse de démarrage décodée depuis le fichier S-record n'est pas
   * prise en compte, puisque le processeur PowerPC ne peut démarrer qu'à
   * l'adresse 0xFFFFFFFC. Une fois le fichier S-record chargé en mémoire,
   * on demande au processeur de se reseter pour booter le nouveau programme.
   */
  Xuint32 start_address;
  XStatus status;

  XCache_DisableDCache();
  XCache_DisableICache();
  print("Starting bootloader.\r\n");
  status = load_srec("a:\\boot.me", &start_address);
  if (status == XST_SUCCESS)
  {
    // branchement
    print("All right ! Let's go, girls !\r\n\r\n");
    usleep(100000);
    asm("lis 0,0x3000");
    asm("mtdbcr0 0"); // soft reset powaaa !!
  }
  print("Boot failed.\r\n");
  return 0;
}
예제 #2
0
파일: main.c 프로젝트: lacombar/netbsd-alc
static void
command_load(char *opt)
{
	char	*endptr;
	char	*offset;
	
	offset = (char *) strtoul(opt, &endptr, 16);
	if (opt == endptr)
		offset = 0;
	load_srec(offset);
}
예제 #3
0
static void
sh3_load (struct serial *desc, char *file, int hashmark)
{
  if (parallel_in_use)
    {
      monitor_printf ("pl;s\r");
      load_srec (parallel, file, 0, 80, SREC_ALL, hashmark, NULL);
      monitor_expect_prompt (NULL, 0);
    }
  else
    {
      monitor_printf ("il;s:x\r");
      monitor_expect ("\005", NULL, 0);		/* Look for ENQ */
      serial_write (desc, "\006", 1);	/* Send ACK */
      monitor_expect ("LO x\r", NULL, 0);	/* Look for filename */

      load_srec (desc, file, 0, 80, SREC_ALL, hashmark, NULL);

      monitor_expect ("\005", NULL, 0);		/* Look for ENQ */
      serial_write (desc, "\006", 1);	/* Send ACK */
      monitor_expect_prompt (NULL, 0);
    }
}
예제 #4
0
static void cjdesign5307_init(ram_addr_t ram_size,
                     const char *boot_device,
                     const char *kernel_filename, const char *kernel_cmdline,
                     const char *initrd_filename, const char *cpu_model)
{
    CPUState *env;
    int kernel_size;
    uint64_t elf_entry;
    target_phys_addr_t entry;

    if (!cpu_model) {
        cpu_model = "m5307";
    }
    env = cpu_init(cpu_model);
    if (!env) {
        hw_error("Unable to find m68k CPU definition\n");
    }

    /* Initialize CPU registers.  */
    env->vbr = 0x0;
    /* TODO: allow changing MBAR and RAMBAR. */
    env->mbar = CJ5307_MBAR_ADDR | 1;
    env->rambar0 = CJ5307_RAMBAR_ADDR | 1;

    /* DRAM at address 0x10000000*/
    cpu_register_physical_memory(CJ5307_RAM_ADDR, ram_size,
        qemu_ram_alloc(NULL, "cjdesign5307.sdram", ram_size) | IO_MEM_RAM);

    /* Internal SRAM.  */
    cpu_register_physical_memory(CJ5307_RAMBAR_ADDR, 4096,
        qemu_ram_alloc(NULL, "m5307.sram", 4096) | IO_MEM_RAM);

    mcf5307_init(CJ5307_MBAR_ADDR, env);

    /* Load kernel.  */
    if (!kernel_filename) {
        fprintf(stderr, "Kernel image must be specified\n");
        exit(1);
    }

    kernel_size = load_elf(kernel_filename, NULL, NULL, &elf_entry,
                           NULL, NULL, 1, ELF_MACHINE, 0);
    entry = elf_entry;
    if (kernel_size < 0) {
        kernel_size = load_srec(kernel_filename, &entry);
    }
    if (kernel_size < 0) {
        kernel_size = load_uimage(kernel_filename, &entry, NULL, NULL);
    }
    if (kernel_size < 0) {
        kernel_size = load_image_targphys(kernel_filename, KERNEL_LOAD_ADDR,
                                          ram_size - KERNEL_LOAD_ADDR);
        entry = KERNEL_LOAD_ADDR;
    }
    if (kernel_size < 0) {
        fprintf(stderr, "qemu: could not load kernel '%s'\n", kernel_filename);
        exit(1);
    }

    env->pc = entry;
}
예제 #5
0
파일: network.cpp 프로젝트: daib/streamnoc
// build the network with the parameters given in param
Network::Network(void)
{
    success = true;
    n_of_rows = param.n_of_rows;
    n_of_cols = param.n_of_cols;
    n_of_ports = param.n_of_ports;
    n_of_extra_links = param.n_of_extra_links;
    topology = param.topology;
    n_of_switch_ports = param.n_of_switch_ports;
    n_of_vcs = param.n_of_vcs;

    Traffic_source::reset_id_base();
    Traffic_sink::reset_id_base();

    if (param.verbose)
        cout << "[I] Building network..." << endl;

    if (topology != mesh)
    {
        cerr << ERRO_ARCH_NOT_SUPPORTED;
        success = false;
        return;
    }

    if (param.verbose)
        cout << "[I] Creating routers..." << endl;

    Position pos;
    // Build all the routers and PEs in the network
    for (pos.x = 0; pos.x < param.n_of_cols; pos.x++)
    {
        for (pos.y = 0; pos.y < param.n_of_rows; pos.y++)
        {
            pRouter a_router = new Router(this, pos);
            routers.push_back(a_router);
        }
    }

    if (param.verbose)
        cout << "[I] Creating traffic sources/sinks..." << endl;

    // Build all the traffic sources/sinks in the network
    for (pos.x = 0; pos.x < param.n_of_cols; pos.x++)
    {
        for (pos.y = 0; pos.y < param.n_of_rows; pos.y++)
        {
            pTraffic_source a_source = new Traffic_source(pos,
                    param.source_buffer_size);
            pTraffic_sink a_sink =
                    new Traffic_sink(pos, param.sink_buffer_size);

            //CPU
            m_newnode(yyengine, "superH", 0, 0, 0, NULL, 0);
            //network interface 1 tx/rx queue,
            network_netnodenewifc(yyengine, yyengine->cp, 0, 0, 0, 0, 0, 0, 0,
                    0, (param.source_buffer_size * 8/sizeof(FlitPayload) - 1) * 8, 2, 2); //FIXME: how to set those parameters

            //set memory size
            m_sizemem(yyengine, yyengine->cp,0x9000000);
            //load the program
            load_srec(yyengine, yyengine->cp, "default.sr");
            m_run(yyengine, yyengine->cp, ""); //FIXME: add arguments to nodes


            a_source->state = yyengine->cp;
            a_sink->state = yyengine->cp;

            sources.push_back(a_source);
            sinks.push_back(a_sink);
        }
    }

    if (param.verbose)
        cout << "[I] Attaching traffic sources/sinks with routers..." << endl;
    // connect sources and sinks with the router
    for (pos.x = 0; pos.x < param.n_of_cols; pos.x++)
    {
        for (pos.y = 0; pos.y < param.n_of_rows; pos.y++)
        {
            pTraffic_source a_source = get_traffic_source(pos);
            pTraffic_sink a_sink = get_traffic_sink(pos);
            pRouter a_router = get_router(pos);
            pIn_port a_in_port = a_router->get_in_port(local);
            pOut_port a_out_port = a_router->get_out_port(local);
            connect(a_source, a_in_port);
            connect(a_out_port, a_sink);
        }
    }

    if (param.verbose)
        cout << "[I] Connecting routers with links..." << endl;
    // connect the port of each router to the corresponding output port
    // of its neighboring router
    for (pos.x = 0; pos.x < param.n_of_cols; pos.x++)
    {
        for (pos.y = 0; pos.y < param.n_of_rows; pos.y++)
        {
            pRouter src_router = get_router(pos);
            for (unsigned int i = 0; i < n_of_ports - n_of_extra_links; i++)
            {
                Direction dir = (Direction) i;
                if (dir == local) // no go for local router
                    continue;
                pRouter dst_router = src_router->get_router(dir);
                if (dst_router == 0)
                    continue;
                pOut_port a_out_port = src_router->get_out_port(dir);
                pIn_port a_in_port = dst_router->get_in_port(reverse(dir));
                connect(a_out_port, a_in_port);
            }
        }
    }

    if (param.verbose)
        cout << "[I] Network successfully built..." << endl;

    param.network = this;
}