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 --- |