qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 08/14] ARM: s5pc210: Boot secondary CPU.


From: Evgeny Voevodin
Subject: [Qemu-devel] [PATCH 08/14] ARM: s5pc210: Boot secondary CPU.
Date: Wed, 07 Dec 2011 13:46:59 +0400

Signed-off-by: Evgeny Voevodin <address@hidden>
---
 hw/s5pc210.c |   26 +++++++++++++++++++++++++-
 1 files changed, 25 insertions(+), 1 deletions(-)

diff --git a/hw/s5pc210.c b/hw/s5pc210.c
index eabe3b1..90858e9 100644
--- a/hw/s5pc210.c
+++ b/hw/s5pc210.c
@@ -97,6 +97,12 @@
 
 #define S5PC210_BASE_BOOT_ADDR           S5PC210_DRAM0_BASE_ADDR
 
+/* Secondary CPU startup code is in IROM memory */
+#define S5PC210_SMP_BOOT_ADDR            S5PC210_IROM_BASE_ADDR
+
+/* Secondary CPU polling address to get loader start from */
+#define S5PC210_SECOND_CPU_BOOTREG       0x10020814
+
 static struct arm_boot_info s5pc210_binfo = {
         .loader_start     = S5PC210_BASE_BOOT_ADDR,
 };
@@ -213,6 +219,8 @@ static void s5pc210_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);
     S5pc210Irq *irqs;
     qemu_irq *irq_table;
     qemu_irq *irqp;
@@ -225,9 +233,11 @@ static void s5pc210_init(ram_addr_t ram_size,
     switch (board_type) {
     case BOARD_S5PC210_NURI:
         s5pc210_binfo.board_id      = MACH_NURI_ID;
+        s5pc210_binfo.smp_bootreg_addr = S5PC210_SECOND_CPU_BOOTREG;
         break;
     case BOARD_S5PC210_SMDKC210:
         s5pc210_binfo.board_id = MACH_SMDKC210_ID;
+        s5pc210_binfo.smp_bootreg_addr = S5PC210_SECOND_CPU_BOOTREG;
         break;
     default:
         break;
@@ -353,6 +363,20 @@ static void s5pc210_init(ram_addr_t ram_size,
     memory_region_add_subregion(system_mem, S5PC210_DRAM0_BASE_ADDR,
             dram0_mem);
 
+    /*
+     * Secondary CPU startup code will be placed here.
+     */
+    memory_region_init_ram(hack_mem, NULL, "s5pc210.hack", 0x1000);
+    memory_region_add_subregion(system_mem, S5PC210_SMP_BOOT_ADDR,
+            hack_mem);
+
+    /*
+     * Hack: Map SECOND_CPU_BOOTREG, because it is in PMU USER5 register.
+     */
+    memory_region_init_ram(bootreg_mem, NULL, "s5pc210.bootreg", 0x4);
+    memory_region_add_subregion(system_mem, S5PC210_SECOND_CPU_BOOTREG,
+            bootreg_mem);
+
     /* CMU */
     sysbus_create_simple("s5pc210.cmu", S5PC210_CMU_BASE_ADDR, NULL);
 
@@ -429,7 +453,7 @@ static void s5pc210_init(ram_addr_t ram_size,
     s5pc210_binfo.kernel_filename = kernel_filename;
     s5pc210_binfo.initrd_filename = initrd_filename;
     s5pc210_binfo.kernel_cmdline = kernel_cmdline;
-
+    s5pc210_binfo.smp_priv_base = S5PC210_SMP_PRIVATE_BASE_ADDR;
 
     arm_load_kernel(first_cpu, &s5pc210_binfo);
 }
-- 
1.7.4.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]