mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 08:13:54 -06:00
hw/arm/boot: Propagate vCPU to arm_load_dtb()
In heterogeneous setup the first vCPU might not be the one expected, better pass it explicitly. Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Cédric Le Goater <clg@kaod.org> Message-id: 20250130112615.3219-2-philmd@linaro.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
7623676948
commit
cbb95d4968
3 changed files with 10 additions and 7 deletions
|
@ -432,13 +432,12 @@ out:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void fdt_add_psci_node(void *fdt)
|
static void fdt_add_psci_node(void *fdt, ARMCPU *armcpu)
|
||||||
{
|
{
|
||||||
uint32_t cpu_suspend_fn;
|
uint32_t cpu_suspend_fn;
|
||||||
uint32_t cpu_off_fn;
|
uint32_t cpu_off_fn;
|
||||||
uint32_t cpu_on_fn;
|
uint32_t cpu_on_fn;
|
||||||
uint32_t migrate_fn;
|
uint32_t migrate_fn;
|
||||||
ARMCPU *armcpu = ARM_CPU(qemu_get_cpu(0));
|
|
||||||
const char *psci_method;
|
const char *psci_method;
|
||||||
int64_t psci_conduit;
|
int64_t psci_conduit;
|
||||||
int rc;
|
int rc;
|
||||||
|
@ -512,7 +511,8 @@ static void fdt_add_psci_node(void *fdt)
|
||||||
}
|
}
|
||||||
|
|
||||||
int arm_load_dtb(hwaddr addr, const struct arm_boot_info *binfo,
|
int arm_load_dtb(hwaddr addr, const struct arm_boot_info *binfo,
|
||||||
hwaddr addr_limit, AddressSpace *as, MachineState *ms)
|
hwaddr addr_limit, AddressSpace *as, MachineState *ms,
|
||||||
|
ARMCPU *cpu)
|
||||||
{
|
{
|
||||||
void *fdt = NULL;
|
void *fdt = NULL;
|
||||||
int size, rc, n = 0;
|
int size, rc, n = 0;
|
||||||
|
@ -655,7 +655,7 @@ int arm_load_dtb(hwaddr addr, const struct arm_boot_info *binfo,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fdt_add_psci_node(fdt);
|
fdt_add_psci_node(fdt, cpu);
|
||||||
|
|
||||||
if (binfo->modify_dtb) {
|
if (binfo->modify_dtb) {
|
||||||
binfo->modify_dtb(binfo, fdt);
|
binfo->modify_dtb(binfo, fdt);
|
||||||
|
@ -1327,7 +1327,8 @@ void arm_load_kernel(ARMCPU *cpu, MachineState *ms, struct arm_boot_info *info)
|
||||||
* decided whether to enable PSCI and set the psci-conduit CPU properties.
|
* decided whether to enable PSCI and set the psci-conduit CPU properties.
|
||||||
*/
|
*/
|
||||||
if (!info->skip_dtb_autoload && have_dtb(info)) {
|
if (!info->skip_dtb_autoload && have_dtb(info)) {
|
||||||
if (arm_load_dtb(info->dtb_start, info, info->dtb_limit, as, ms) < 0) {
|
if (arm_load_dtb(info->dtb_start, info, info->dtb_limit,
|
||||||
|
as, ms, cpu) < 0) {
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1746,7 +1746,7 @@ void virt_machine_done(Notifier *notifier, void *data)
|
||||||
vms->memmap[VIRT_PLATFORM_BUS].size,
|
vms->memmap[VIRT_PLATFORM_BUS].size,
|
||||||
vms->irqmap[VIRT_PLATFORM_BUS]);
|
vms->irqmap[VIRT_PLATFORM_BUS]);
|
||||||
}
|
}
|
||||||
if (arm_load_dtb(info->dtb_start, info, info->dtb_limit, as, ms) < 0) {
|
if (arm_load_dtb(info->dtb_start, info, info->dtb_limit, as, ms, cpu) < 0) {
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -160,6 +160,7 @@ AddressSpace *arm_boot_address_space(ARMCPU *cpu,
|
||||||
* @binfo: struct describing the boot environment
|
* @binfo: struct describing the boot environment
|
||||||
* @addr_limit: upper limit of the available memory area at @addr
|
* @addr_limit: upper limit of the available memory area at @addr
|
||||||
* @as: address space to load image to
|
* @as: address space to load image to
|
||||||
|
* @cpu: ARM CPU object
|
||||||
*
|
*
|
||||||
* Load a device tree supplied by the machine or by the user with the
|
* Load a device tree supplied by the machine or by the user with the
|
||||||
* '-dtb' command line option, and put it at offset @addr in target
|
* '-dtb' command line option, and put it at offset @addr in target
|
||||||
|
@ -176,7 +177,8 @@ AddressSpace *arm_boot_address_space(ARMCPU *cpu,
|
||||||
* Note: Must not be called unless have_dtb(binfo) is true.
|
* Note: Must not be called unless have_dtb(binfo) is true.
|
||||||
*/
|
*/
|
||||||
int arm_load_dtb(hwaddr addr, const struct arm_boot_info *binfo,
|
int arm_load_dtb(hwaddr addr, const struct arm_boot_info *binfo,
|
||||||
hwaddr addr_limit, AddressSpace *as, MachineState *ms);
|
hwaddr addr_limit, AddressSpace *as, MachineState *ms,
|
||||||
|
ARMCPU *cpu);
|
||||||
|
|
||||||
/* Write a secure board setup routine with a dummy handler for SMCs */
|
/* Write a secure board setup routine with a dummy handler for SMCs */
|
||||||
void arm_write_secure_board_setup_dummy_smc(ARMCPU *cpu,
|
void arm_write_secure_board_setup_dummy_smc(ARMCPU *cpu,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue