boot.c (3e29da9fd81002a0c03041aaa26dea6d9dd9bd65) boot.c (f08ced69d3a668986c30e767d8680b27868c765f)
1/*
2 * ARM kernel loader.
3 *
4 * Copyright (c) 2006-2007 CodeSourcery.
5 * Written by Paul Brook
6 *
7 * This code is licensed under the GPL.
8 */

--- 409 unchanged lines hidden (view full) ---

418 if (s) {
419 address_space_write(as, p, MEMTXATTRS_UNSPECIFIED,
420 (const uint8_t *)s, strlen(s) + 1);
421 } else {
422 WRITE_WORD(p, 0);
423 }
424}
425
1/*
2 * ARM kernel loader.
3 *
4 * Copyright (c) 2006-2007 CodeSourcery.
5 * Written by Paul Brook
6 *
7 * This code is licensed under the GPL.
8 */

--- 409 unchanged lines hidden (view full) ---

418 if (s) {
419 address_space_write(as, p, MEMTXATTRS_UNSPECIFIED,
420 (const uint8_t *)s, strlen(s) + 1);
421 } else {
422 WRITE_WORD(p, 0);
423 }
424}
425
426static int fdt_add_memory_node(void *fdt, uint32_t acells, hwaddr mem_base,
427 uint32_t scells, hwaddr mem_len,
428 int numa_node_id)
429{
430 char *nodename;
431 int ret;
432
433 nodename = g_strdup_printf("/memory@%" PRIx64, mem_base);
434 qemu_fdt_add_subnode(fdt, nodename);
435 qemu_fdt_setprop_string(fdt, nodename, "device_type", "memory");
436 ret = qemu_fdt_setprop_sized_cells(fdt, nodename, "reg", acells, mem_base,
437 scells, mem_len);
438 if (ret < 0) {
439 goto out;
440 }
441
442 /* only set the NUMA ID if it is specified */
443 if (numa_node_id >= 0) {
444 ret = qemu_fdt_setprop_cell(fdt, nodename,
445 "numa-node-id", numa_node_id);
446 }
447out:
448 g_free(nodename);
449 return ret;
450}
451
426static void fdt_add_psci_node(void *fdt)
427{
428 uint32_t cpu_suspend_fn;
429 uint32_t cpu_off_fn;
430 uint32_t cpu_on_fn;
431 uint32_t migrate_fn;
432 ARMCPU *armcpu = ARM_CPU(qemu_get_cpu(0));
433 const char *psci_method;

--- 63 unchanged lines hidden (view full) ---

497}
498
499int arm_load_dtb(hwaddr addr, const struct arm_boot_info *binfo,
500 hwaddr addr_limit, AddressSpace *as)
501{
502 void *fdt = NULL;
503 int size, rc, n = 0;
504 uint32_t acells, scells;
452static void fdt_add_psci_node(void *fdt)
453{
454 uint32_t cpu_suspend_fn;
455 uint32_t cpu_off_fn;
456 uint32_t cpu_on_fn;
457 uint32_t migrate_fn;
458 ARMCPU *armcpu = ARM_CPU(qemu_get_cpu(0));
459 const char *psci_method;

--- 63 unchanged lines hidden (view full) ---

523}
524
525int arm_load_dtb(hwaddr addr, const struct arm_boot_info *binfo,
526 hwaddr addr_limit, AddressSpace *as)
527{
528 void *fdt = NULL;
529 int size, rc, n = 0;
530 uint32_t acells, scells;
505 char *nodename;
506 unsigned int i;
507 hwaddr mem_base, mem_len;
508 char **node_path;
509 Error *err = NULL;
510
511 if (binfo->dtb_filename) {
512 char *filename;
513 filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, binfo->dtb_filename);

--- 57 unchanged lines hidden (view full) ---

571 n++;
572 }
573 g_strfreev(node_path);
574
575 if (nb_numa_nodes > 0) {
576 mem_base = binfo->loader_start;
577 for (i = 0; i < nb_numa_nodes; i++) {
578 mem_len = numa_info[i].node_mem;
531 unsigned int i;
532 hwaddr mem_base, mem_len;
533 char **node_path;
534 Error *err = NULL;
535
536 if (binfo->dtb_filename) {
537 char *filename;
538 filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, binfo->dtb_filename);

--- 57 unchanged lines hidden (view full) ---

596 n++;
597 }
598 g_strfreev(node_path);
599
600 if (nb_numa_nodes > 0) {
601 mem_base = binfo->loader_start;
602 for (i = 0; i < nb_numa_nodes; i++) {
603 mem_len = numa_info[i].node_mem;
579 nodename = g_strdup_printf("/memory@%" PRIx64, mem_base);
580 qemu_fdt_add_subnode(fdt, nodename);
581 qemu_fdt_setprop_string(fdt, nodename, "device_type", "memory");
582 rc = qemu_fdt_setprop_sized_cells(fdt, nodename, "reg",
583 acells, mem_base,
584 scells, mem_len);
604 rc = fdt_add_memory_node(fdt, acells, mem_base,
605 scells, mem_len, i);
585 if (rc < 0) {
606 if (rc < 0) {
586 fprintf(stderr, "couldn't set %s/reg for node %d\n", nodename,
587 i);
607 fprintf(stderr, "couldn't add /memory@%"PRIx64" node\n",
608 mem_base);
588 goto fail;
589 }
590
609 goto fail;
610 }
611
591 qemu_fdt_setprop_cell(fdt, nodename, "numa-node-id", i);
592 mem_base += mem_len;
612 mem_base += mem_len;
593 g_free(nodename);
594 }
595 } else {
613 }
614 } else {
596 nodename = g_strdup_printf("/memory@%" PRIx64, binfo->loader_start);
597 qemu_fdt_add_subnode(fdt, nodename);
598 qemu_fdt_setprop_string(fdt, nodename, "device_type", "memory");
599
600 rc = qemu_fdt_setprop_sized_cells(fdt, nodename, "reg",
601 acells, binfo->loader_start,
602 scells, binfo->ram_size);
615 rc = fdt_add_memory_node(fdt, acells, binfo->loader_start,
616 scells, binfo->ram_size, -1);
603 if (rc < 0) {
617 if (rc < 0) {
604 fprintf(stderr, "couldn't set %s reg\n", nodename);
618 fprintf(stderr, "couldn't add /memory@%"PRIx64" node\n",
619 binfo->loader_start);
605 goto fail;
606 }
620 goto fail;
621 }
607 g_free(nodename);
608 }
609
610 rc = fdt_path_offset(fdt, "/chosen");
611 if (rc < 0) {
612 qemu_fdt_add_subnode(fdt, "/chosen");
613 }
614
615 if (binfo->kernel_cmdline && *binfo->kernel_cmdline) {

--- 625 unchanged lines hidden ---
622 }
623
624 rc = fdt_path_offset(fdt, "/chosen");
625 if (rc < 0) {
626 qemu_fdt_add_subnode(fdt, "/chosen");
627 }
628
629 if (binfo->kernel_cmdline && *binfo->kernel_cmdline) {

--- 625 unchanged lines hidden ---