Revision 04088adb
b/hw/ppc440_bamboo.c | ||
---|---|---|
27 | 27 |
|
28 | 28 |
#define BINARY_DEVICE_TREE_FILE "bamboo.dtb" |
29 | 29 |
|
30 |
static void *bamboo_load_device_tree(target_phys_addr_t addr,
|
|
30 |
static int bamboo_load_device_tree(target_phys_addr_t addr,
|
|
31 | 31 |
uint32_t ramsize, |
32 | 32 |
target_phys_addr_t initrd_base, |
33 | 33 |
target_phys_addr_t initrd_size, |
... | ... | |
42 | 42 |
|
43 | 43 |
filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, BINARY_DEVICE_TREE_FILE); |
44 | 44 |
if (!filename) { |
45 |
ret = -1; |
|
45 | 46 |
goto out; |
46 | 47 |
} |
47 | 48 |
fdt = load_device_tree(filename, &fdt_size); |
48 | 49 |
qemu_free(filename); |
49 | 50 |
if (fdt == NULL) { |
51 |
ret = -1; |
|
50 | 52 |
goto out; |
51 | 53 |
} |
52 | 54 |
|
... | ... | |
75 | 77 |
if (kvm_enabled()) |
76 | 78 |
kvmppc_fdt_update(fdt); |
77 | 79 |
|
78 |
cpu_physical_memory_write (addr, (void *)fdt, fdt_size); |
|
80 |
ret = rom_add_blob_fixed(BINARY_DEVICE_TREE_FILE, fdt, fdt_size, addr); |
|
81 |
qemu_free(fdt); |
|
79 | 82 |
|
80 | 83 |
out: |
81 | 84 |
#endif |
82 | 85 |
|
83 |
return fdt;
|
|
86 |
return ret;
|
|
84 | 87 |
} |
85 | 88 |
|
86 | 89 |
static void bamboo_init(ram_addr_t ram_size, |
... | ... | |
101 | 104 |
target_ulong initrd_base = 0; |
102 | 105 |
target_long initrd_size = 0; |
103 | 106 |
target_ulong dt_base = 0; |
104 |
void *fdt; |
|
105 | 107 |
int i; |
106 | 108 |
|
107 | 109 |
/* Setup CPU. */ |
... | ... | |
153 | 155 |
else |
154 | 156 |
dt_base = kernel_size + loadaddr; |
155 | 157 |
|
156 |
fdt = bamboo_load_device_tree(dt_base, ram_size, |
|
157 |
initrd_base, initrd_size, kernel_cmdline); |
|
158 |
if (fdt == NULL) { |
|
158 |
if (bamboo_load_device_tree(dt_base, ram_size, |
|
159 |
initrd_base, initrd_size, kernel_cmdline) < 0) { |
|
159 | 160 |
fprintf(stderr, "couldn't load device tree\n"); |
160 | 161 |
exit(1); |
161 | 162 |
} |
b/hw/ppce500_mpc8544ds.c | ||
---|---|---|
72 | 72 |
} |
73 | 73 |
#endif |
74 | 74 |
|
75 |
static void *mpc8544_load_device_tree(target_phys_addr_t addr,
|
|
75 |
static int mpc8544_load_device_tree(target_phys_addr_t addr,
|
|
76 | 76 |
uint32_t ramsize, |
77 | 77 |
target_phys_addr_t initrd_base, |
78 | 78 |
target_phys_addr_t initrd_size, |
... | ... | |
87 | 87 |
|
88 | 88 |
filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, BINARY_DEVICE_TREE_FILE); |
89 | 89 |
if (!filename) { |
90 |
ret = -1; |
|
90 | 91 |
goto out; |
91 | 92 |
} |
92 | 93 |
fdt = load_device_tree(filename, &fdt_size); |
93 | 94 |
qemu_free(filename); |
94 | 95 |
if (fdt == NULL) { |
96 |
ret = -1; |
|
95 | 97 |
goto out; |
96 | 98 |
} |
97 | 99 |
|
... | ... | |
123 | 125 |
|
124 | 126 |
if ((dp = opendir("/proc/device-tree/cpus/")) == NULL) { |
125 | 127 |
printf("Can't open directory /proc/device-tree/cpus/\n"); |
128 |
ret = -1; |
|
126 | 129 |
goto out; |
127 | 130 |
} |
128 | 131 |
|
... | ... | |
136 | 139 |
closedir(dp); |
137 | 140 |
if (buf[0] == '\0') { |
138 | 141 |
printf("Unknow host!\n"); |
142 |
ret = -1; |
|
139 | 143 |
goto out; |
140 | 144 |
} |
141 | 145 |
|
... | ... | |
143 | 147 |
mpc8544_copy_soc_cell(fdt, buf, "timebase-frequency"); |
144 | 148 |
} |
145 | 149 |
|
146 |
cpu_physical_memory_write (addr, (void *)fdt, fdt_size); |
|
150 |
ret = rom_add_blob_fixed(BINARY_DEVICE_TREE_FILE, fdt, fdt_size, addr); |
|
151 |
qemu_free(fdt); |
|
147 | 152 |
|
148 | 153 |
out: |
149 | 154 |
#endif |
150 | 155 |
|
151 |
return fdt;
|
|
156 |
return ret;
|
|
152 | 157 |
} |
153 | 158 |
|
154 | 159 |
static void mpc8544ds_init(ram_addr_t ram_size, |
... | ... | |
168 | 173 |
target_ulong dt_base=DTB_LOAD_BASE; |
169 | 174 |
target_ulong initrd_base=INITRD_LOAD_BASE; |
170 | 175 |
target_long initrd_size=0; |
171 |
void *fdt; |
|
172 | 176 |
int i=0; |
173 | 177 |
unsigned int pci_irq_nrs[4] = {1, 2, 3, 4}; |
174 | 178 |
qemu_irq *irqs, *mpic, *pci_irqs; |
... | ... | |
254 | 258 |
|
255 | 259 |
/* If we're loading a kernel directly, we must load the device tree too. */ |
256 | 260 |
if (kernel_filename) { |
257 |
fdt = mpc8544_load_device_tree(dt_base, ram_size, |
|
258 |
initrd_base, initrd_size, kernel_cmdline); |
|
259 |
if (fdt == NULL) { |
|
261 |
if (mpc8544_load_device_tree(dt_base, ram_size, |
|
262 |
initrd_base, initrd_size, kernel_cmdline) < 0) { |
|
260 | 263 |
fprintf(stderr, "couldn't load device tree\n"); |
261 | 264 |
exit(1); |
262 | 265 |
} |
Also available in: Unified diff