[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 10/15] hw/exynos4210.c: Boot secondary CPU.
From: |
Evgeny Voevodin |
Subject: |
[Qemu-devel] [PATCH 10/15] hw/exynos4210.c: Boot secondary CPU. |
Date: |
Fri, 09 Dec 2011 17:34:37 +0400 |
Signed-off-by: Evgeny Voevodin <address@hidden>
---
hw/exynos4210.c | 28 +++++++++++++++++++++++++++-
1 files changed, 27 insertions(+), 1 deletions(-)
diff --git a/hw/exynos4210.c b/hw/exynos4210.c
index f172346..8d8a12c 100644
--- a/hw/exynos4210.c
+++ b/hw/exynos4210.c
@@ -93,6 +93,12 @@
#define EXYNOS4210_EXT_COMBINER_BASE_ADDR 0x10440000
#define EXYNOS4210_INT_COMBINER_BASE_ADDR 0x10448000
+/* Secondary CPU polling address to get loader start from */
+#define EXYNOS4210_SECOND_CPU_BOOTREG 0x10020814
+
+/* Secondary CPU startup code is in IROM memory */
+#define EXYNOS4210_SMP_BOOT_ADDR EXYNOS4210_IROM_BASE_ADDR
+
static struct arm_boot_info exynos4210_binfo = {
.loader_start = EXYNOS4210_BASE_BOOT_ADDR,
};
@@ -208,6 +214,8 @@ static void exynos4210_init(ram_addr_t ram_size,
MemoryRegion *irom_alias_mem = g_new(MemoryRegion, 1);
MemoryRegion *dram0_mem = g_new(MemoryRegion, 1);
MemoryRegion *dram1_mem = NULL;
+ MemoryRegion *hack_mem = g_new(MemoryRegion, 1);
+ MemoryRegion *bootreg_mem = g_new(MemoryRegion, 1);
Exynos4210Irq *irqs;
qemu_irq *irq_table;
qemu_irq *irqp;
@@ -219,10 +227,12 @@ static void exynos4210_init(ram_addr_t ram_size,
switch (board_type) {
case BOARD_EXYNOS4210_NURI:
- exynos4210_binfo.board_id = MACH_NURI_ID;
+ exynos4210_binfo.board_id = MACH_NURI_ID;
+ exynos4210_binfo.smp_bootreg_addr = EXYNOS4210_SECOND_CPU_BOOTREG;
break;
case BOARD_EXYNOS4210_SMDKC210:
exynos4210_binfo.board_id = MACH_SMDKC210_ID;
+ exynos4210_binfo.smp_bootreg_addr = EXYNOS4210_SECOND_CPU_BOOTREG;
break;
default:
break;
@@ -353,6 +363,21 @@ static void exynos4210_init(ram_addr_t ram_size,
memory_region_add_subregion(system_mem, EXYNOS4210_DRAM0_BASE_ADDR,
dram0_mem);
+ /*
+ * Secondary CPU startup code will be placed here.
+ */
+ memory_region_init_ram(hack_mem, NULL, "exynos4210.hack", 0x1000);
+ memory_region_add_subregion(system_mem, EXYNOS4210_SMP_BOOT_ADDR,
+ hack_mem);
+
+ /*
+ * Hack: Map SECOND_CPU_BOOTREG, because it is in PMU USER5 register.
+ */
+ memory_region_init_ram(bootreg_mem, NULL, "exynos4210.bootreg", 0x4);
+ memory_region_add_subregion(system_mem, EXYNOS4210_SECOND_CPU_BOOTREG,
+ bootreg_mem);
+
+
/* CMU */
sysbus_create_simple("exynos4210.cmu", EXYNOS4210_CMU_BASE_ADDR, NULL);
@@ -427,6 +452,7 @@ static void exynos4210_init(ram_addr_t ram_size,
exynos4210_binfo.kernel_filename = kernel_filename;
exynos4210_binfo.initrd_filename = initrd_filename;
exynos4210_binfo.kernel_cmdline = kernel_cmdline;
+ exynos4210_binfo.smp_priv_base = EXYNOS4210_SMP_PRIVATE_BASE_ADDR;
arm_load_kernel(first_cpu, &exynos4210_binfo);
}
--
1.7.4.1
- [Qemu-devel] [PATCH 00/15 V2] ARM: Samsung Exynos4210-based boards support., Evgeny Voevodin, 2011/12/09
- [Qemu-devel] [PATCH 08/15] hw/arm_gic.c: lower IRQ only on changing of enable bit., Evgeny Voevodin, 2011/12/09
- [Qemu-devel] [PATCH 04/15] hw/sysbus.h: Increase maximum number of device IRQs., Evgeny Voevodin, 2011/12/09
- [Qemu-devel] [PATCH 07/15] hw/arm_boot.c: Add new secondary CPU bootloader., Evgeny Voevodin, 2011/12/09
- [Qemu-devel] [PATCH 01/15] ARM: Samsung exynos421 0-based boards emulation, Evgeny Voevodin, 2011/12/09
- [Qemu-devel] [PATCH 03/15] ARM: exynos4210: UART support, Evgeny Voevodin, 2011/12/09
- [Qemu-devel] [PATCH 06/15] ARM: exynos4210: PWM support., Evgeny Voevodin, 2011/12/09
- [Qemu-devel] [PATCH 12/15] hw/exynos4210.c: Add LAN support for SMDKC210., Evgeny Voevodin, 2011/12/09
- [Qemu-devel] [PATCH 10/15] hw/exynos4210.c: Boot secondary CPU.,
Evgeny Voevodin <=
- [Qemu-devel] [PATCH 02/15] ARM: exynos4210: CMU support, Evgeny Voevodin, 2011/12/09
- [Qemu-devel] [PATCH 05/15] ARM: exynos4210: IRQ subsystem support., Evgeny Voevodin, 2011/12/09
- [Qemu-devel] [PATCH 11/15] hw/lan9118: Add basic 16-bit mode support., Evgeny Voevodin, 2011/12/09
- [Qemu-devel] [PATCH 09/15] ARM: exynos4210: MCT support., Evgeny Voevodin, 2011/12/09
- [Qemu-devel] [PATCH 13/15] hw/sd.c, hw/sd.h: add receive ready query routine to SD/MMC API, Evgeny Voevodin, 2011/12/09
- [Qemu-devel] [PATCH 14/15] ARM: exynos4210: added SD/MMC host controller, Evgeny Voevodin, 2011/12/09
- [Qemu-devel] [PATCH 15/15] ARM: exynos4210: added display controller implementation, Evgeny Voevodin, 2011/12/09