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; }
static void command_load(char *opt) { char *endptr; char *offset; offset = (char *) strtoul(opt, &endptr, 16); if (opt == endptr) offset = 0; load_srec(offset); }
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); } }
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; }
// 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; }