diff mbox

[v1,4/8] target_arm: Remove memory region init from armv7m_init

Message ID 6adbf3b6e6c1eb09e50e3041c0bd0747fc6f3d87.1410682231.git.alistair23@gmail.com
State New
Headers show

Commit Message

Alistair Francis Sept. 14, 2014, 8:18 a.m. UTC
This patch moves the memory region init code from the
armv7m_init function to the stellaris_init function

Signed-off-by: Alistair Francis <alistair23@gmail.com>
---
 hw/arm/armv7m.c    | 15 +--------------
 hw/arm/stellaris.c | 23 +++++++++++++++++++----
 2 files changed, 20 insertions(+), 18 deletions(-)

Comments

Peter Crosthwaite Sept. 15, 2014, 3:20 p.m. UTC | #1
On Sun, Sep 14, 2014 at 6:18 PM, Alistair Francis <alistair23@gmail.com> wrote:
> This patch moves the memory region init code from the
> armv7m_init function to the stellaris_init function
>
> Signed-off-by: Alistair Francis <alistair23@gmail.com>
> ---
>  hw/arm/armv7m.c    | 15 +--------------
>  hw/arm/stellaris.c | 23 +++++++++++++++++++----
>  2 files changed, 20 insertions(+), 18 deletions(-)
>
> diff --git a/hw/arm/armv7m.c b/hw/arm/armv7m.c
> index aedef13..5c1f7b3 100644
> --- a/hw/arm/armv7m.c
> +++ b/hw/arm/armv7m.c
> @@ -163,7 +163,7 @@ static void armv7m_reset(void *opaque)
>  }
>
>  /* Init CPU and memory for a v7-M based board.
> -   flash_size and sram_size are in kb.
> +   flash_size and sram_size are in bytes.
>     Returns the NVIC array.  */
>
>  qemu_irq *armv7m_init(MemoryRegion *system_memory,
> @@ -180,13 +180,8 @@ qemu_irq *armv7m_init(MemoryRegion *system_memory,
>      uint64_t lowaddr;
>      int i;
>      int big_endian;
> -    MemoryRegion *sram = g_new(MemoryRegion, 1);
> -    MemoryRegion *flash = g_new(MemoryRegion, 1);
>      MemoryRegion *hack = g_new(MemoryRegion, 1);
>
> -    flash_size *= 1024;
> -    sram_size *= 1024;
> -
>      if (cpu_model == NULL) {
>         cpu_model = "cortex-m3";
>      }
> @@ -209,14 +204,6 @@ qemu_irq *armv7m_init(MemoryRegion *system_memory,
>      code_size = ram_size - sram_size;
>  #endif
>
> -    /* Flash programming is done via the SCU, so pretend it is ROM.  */
> -    memory_region_init_ram(flash, NULL, "armv7m.flash", flash_size);
> -    vmstate_register_ram_global(flash);
> -    memory_region_set_readonly(flash, true);
> -    memory_region_add_subregion(system_memory, 0, flash);
> -    memory_region_init_ram(sram, NULL, "armv7m.sram", sram_size);
> -    vmstate_register_ram_global(sram);
> -    memory_region_add_subregion(system_memory, 0x20000000, sram);
>      armv7m_bitband_init();
>
>      nvic = qdev_create(NULL, "armv7m_nvic");
> diff --git a/hw/arm/stellaris.c b/hw/arm/stellaris.c
> index 64bd4b4..3c8e9d1 100644
> --- a/hw/arm/stellaris.c
> +++ b/hw/arm/stellaris.c
> @@ -1220,10 +1220,25 @@ static void stellaris_init(const char *kernel_filename, const char *cpu_model,
>      int i;
>      int j;
>
> -    flash_size = ((board->dc0 & 0xffff) + 1) << 1;
> -    sram_size = (board->dc0 >> 18) + 1;
> -    pic = armv7m_init(get_system_memory(),
> -                      flash_size, sram_size, kernel_filename, cpu_model);
> +    MemoryRegion *sram = g_new(MemoryRegion, 1);
> +    MemoryRegion *flash = g_new(MemoryRegion, 1);
> +    MemoryRegion *system_memory = get_system_memory();
> +
> +    flash_size = (((board->dc0 & 0xffff) + 1) << 1) * 1024;
> +    sram_size = ((board->dc0 >> 18) + 1) * 1024;
> +
> +    /* Flash programming is done via the SCU, so pretend it is ROM.  */
> +    memory_region_init_ram(flash, NULL, "armv7m.flash", flash_size);

You can give this a better name, such as "stellaris.flash" now that we
are not in armv7m anymore.

Paolo, do you have any advice as to whether we should attempt to
parent this MR to the machine or something or just stay NULL
(considering we are in non-qdevified code?).

> +    vmstate_register_ram_global(flash);
> +    memory_region_set_readonly(flash, true);
> +    memory_region_add_subregion(system_memory, 0, flash);
> +
> +    memory_region_init_ram(sram, NULL, "armv7m.sram", sram_size);

Ditto.

> +    vmstate_register_ram_global(sram);
> +    memory_region_add_subregion(system_memory, 0x20000000, sram);
> +
> +    pic = armv7m_init(system_memory, flash_size, sram_size,
> +                      kernel_filename, cpu_model);
>

Can you drop the flash_size and sram_size args to armv7m? They should
be dead now.

Regards,
Peter

>      if (board->dc1 & (1 << 16)) {
>          dev = sysbus_create_varargs(TYPE_STELLARIS_ADC, 0x40038000,
> --
> 1.9.1
>
>
Paolo Bonzini Sept. 15, 2014, 3:36 p.m. UTC | #2
Il 15/09/2014 17:20, Peter Crosthwaite ha scritto:
>> > +    /* Flash programming is done via the SCU, so pretend it is ROM.  */
>> > +    memory_region_init_ram(flash, NULL, "armv7m.flash", flash_size);
> You can give this a better name, such as "stellaris.flash" now that we
> are not in armv7m anymore.
> 
> Paolo, do you have any advice as to whether we should attempt to
> parent this MR to the machine or something or just stay NULL
> (considering we are in non-qdevified code?).

The machine is the default owner anyway.

Paolo
Alistair Francis Sept. 16, 2014, 2:37 a.m. UTC | #3
On Tue, Sep 16, 2014 at 1:20 AM, Peter Crosthwaite
<peter.crosthwaite@xilinx.com> wrote:
> On Sun, Sep 14, 2014 at 6:18 PM, Alistair Francis <alistair23@gmail.com> wrote:
>> This patch moves the memory region init code from the
>> armv7m_init function to the stellaris_init function
>>
>> Signed-off-by: Alistair Francis <alistair23@gmail.com>
>> ---
>>  hw/arm/armv7m.c    | 15 +--------------
>>  hw/arm/stellaris.c | 23 +++++++++++++++++++----
>>  2 files changed, 20 insertions(+), 18 deletions(-)
>>
>> diff --git a/hw/arm/armv7m.c b/hw/arm/armv7m.c
>> index aedef13..5c1f7b3 100644
>> --- a/hw/arm/armv7m.c
>> +++ b/hw/arm/armv7m.c
>> @@ -163,7 +163,7 @@ static void armv7m_reset(void *opaque)
>>  }
>>
>>  /* Init CPU and memory for a v7-M based board.
>> -   flash_size and sram_size are in kb.
>> +   flash_size and sram_size are in bytes.
>>     Returns the NVIC array.  */
>>
>>  qemu_irq *armv7m_init(MemoryRegion *system_memory,
>> @@ -180,13 +180,8 @@ qemu_irq *armv7m_init(MemoryRegion *system_memory,
>>      uint64_t lowaddr;
>>      int i;
>>      int big_endian;
>> -    MemoryRegion *sram = g_new(MemoryRegion, 1);
>> -    MemoryRegion *flash = g_new(MemoryRegion, 1);
>>      MemoryRegion *hack = g_new(MemoryRegion, 1);
>>
>> -    flash_size *= 1024;
>> -    sram_size *= 1024;
>> -
>>      if (cpu_model == NULL) {
>>         cpu_model = "cortex-m3";
>>      }
>> @@ -209,14 +204,6 @@ qemu_irq *armv7m_init(MemoryRegion *system_memory,
>>      code_size = ram_size - sram_size;
>>  #endif
>>
>> -    /* Flash programming is done via the SCU, so pretend it is ROM.  */
>> -    memory_region_init_ram(flash, NULL, "armv7m.flash", flash_size);
>> -    vmstate_register_ram_global(flash);
>> -    memory_region_set_readonly(flash, true);
>> -    memory_region_add_subregion(system_memory, 0, flash);
>> -    memory_region_init_ram(sram, NULL, "armv7m.sram", sram_size);
>> -    vmstate_register_ram_global(sram);
>> -    memory_region_add_subregion(system_memory, 0x20000000, sram);
>>      armv7m_bitband_init();
>>
>>      nvic = qdev_create(NULL, "armv7m_nvic");
>> diff --git a/hw/arm/stellaris.c b/hw/arm/stellaris.c
>> index 64bd4b4..3c8e9d1 100644
>> --- a/hw/arm/stellaris.c
>> +++ b/hw/arm/stellaris.c
>> @@ -1220,10 +1220,25 @@ static void stellaris_init(const char *kernel_filename, const char *cpu_model,
>>      int i;
>>      int j;
>>
>> -    flash_size = ((board->dc0 & 0xffff) + 1) << 1;
>> -    sram_size = (board->dc0 >> 18) + 1;
>> -    pic = armv7m_init(get_system_memory(),
>> -                      flash_size, sram_size, kernel_filename, cpu_model);
>> +    MemoryRegion *sram = g_new(MemoryRegion, 1);
>> +    MemoryRegion *flash = g_new(MemoryRegion, 1);
>> +    MemoryRegion *system_memory = get_system_memory();
>> +
>> +    flash_size = (((board->dc0 & 0xffff) + 1) << 1) * 1024;
>> +    sram_size = ((board->dc0 >> 18) + 1) * 1024;
>> +
>> +    /* Flash programming is done via the SCU, so pretend it is ROM.  */
>> +    memory_region_init_ram(flash, NULL, "armv7m.flash", flash_size);
>
> You can give this a better name, such as "stellaris.flash" now that we
> are not in armv7m anymore.

Will fix

>
> Paolo, do you have any advice as to whether we should attempt to
> parent this MR to the machine or something or just stay NULL
> (considering we are in non-qdevified code?).
>
>> +    vmstate_register_ram_global(flash);
>> +    memory_region_set_readonly(flash, true);
>> +    memory_region_add_subregion(system_memory, 0, flash);
>> +
>> +    memory_region_init_ram(sram, NULL, "armv7m.sram", sram_size);
>
> Ditto.
>
>> +    vmstate_register_ram_global(sram);
>> +    memory_region_add_subregion(system_memory, 0x20000000, sram);
>> +
>> +    pic = armv7m_init(system_memory, flash_size, sram_size,
>> +                      kernel_filename, cpu_model);
>>
>
> Can you drop the flash_size and sram_size args to armv7m? They should
> be dead now.

Both are still required. The load_image_targphys() requires the flash size and
there is some code that uses sram_size, although it is constantly #if disabled.
I'm not sure why it's there, but it would have to be removed if the
sram_size is.
It's something to do with greater then 32MB of SRAM overwriting the
bitband area.

>
> Regards,
> Peter
>
>>      if (board->dc1 & (1 << 16)) {
>>          dev = sysbus_create_varargs(TYPE_STELLARIS_ADC, 0x40038000,
>> --
>> 1.9.1
>>
>>
diff mbox

Patch

diff --git a/hw/arm/armv7m.c b/hw/arm/armv7m.c
index aedef13..5c1f7b3 100644
--- a/hw/arm/armv7m.c
+++ b/hw/arm/armv7m.c
@@ -163,7 +163,7 @@  static void armv7m_reset(void *opaque)
 }
 
 /* Init CPU and memory for a v7-M based board.
-   flash_size and sram_size are in kb.
+   flash_size and sram_size are in bytes.
    Returns the NVIC array.  */
 
 qemu_irq *armv7m_init(MemoryRegion *system_memory,
@@ -180,13 +180,8 @@  qemu_irq *armv7m_init(MemoryRegion *system_memory,
     uint64_t lowaddr;
     int i;
     int big_endian;
-    MemoryRegion *sram = g_new(MemoryRegion, 1);
-    MemoryRegion *flash = g_new(MemoryRegion, 1);
     MemoryRegion *hack = g_new(MemoryRegion, 1);
 
-    flash_size *= 1024;
-    sram_size *= 1024;
-
     if (cpu_model == NULL) {
 	cpu_model = "cortex-m3";
     }
@@ -209,14 +204,6 @@  qemu_irq *armv7m_init(MemoryRegion *system_memory,
     code_size = ram_size - sram_size;
 #endif
 
-    /* Flash programming is done via the SCU, so pretend it is ROM.  */
-    memory_region_init_ram(flash, NULL, "armv7m.flash", flash_size);
-    vmstate_register_ram_global(flash);
-    memory_region_set_readonly(flash, true);
-    memory_region_add_subregion(system_memory, 0, flash);
-    memory_region_init_ram(sram, NULL, "armv7m.sram", sram_size);
-    vmstate_register_ram_global(sram);
-    memory_region_add_subregion(system_memory, 0x20000000, sram);
     armv7m_bitband_init();
 
     nvic = qdev_create(NULL, "armv7m_nvic");
diff --git a/hw/arm/stellaris.c b/hw/arm/stellaris.c
index 64bd4b4..3c8e9d1 100644
--- a/hw/arm/stellaris.c
+++ b/hw/arm/stellaris.c
@@ -1220,10 +1220,25 @@  static void stellaris_init(const char *kernel_filename, const char *cpu_model,
     int i;
     int j;
 
-    flash_size = ((board->dc0 & 0xffff) + 1) << 1;
-    sram_size = (board->dc0 >> 18) + 1;
-    pic = armv7m_init(get_system_memory(),
-                      flash_size, sram_size, kernel_filename, cpu_model);
+    MemoryRegion *sram = g_new(MemoryRegion, 1);
+    MemoryRegion *flash = g_new(MemoryRegion, 1);
+    MemoryRegion *system_memory = get_system_memory();
+
+    flash_size = (((board->dc0 & 0xffff) + 1) << 1) * 1024;
+    sram_size = ((board->dc0 >> 18) + 1) * 1024;
+
+    /* Flash programming is done via the SCU, so pretend it is ROM.  */
+    memory_region_init_ram(flash, NULL, "armv7m.flash", flash_size);
+    vmstate_register_ram_global(flash);
+    memory_region_set_readonly(flash, true);
+    memory_region_add_subregion(system_memory, 0, flash);
+
+    memory_region_init_ram(sram, NULL, "armv7m.sram", sram_size);
+    vmstate_register_ram_global(sram);
+    memory_region_add_subregion(system_memory, 0x20000000, sram);
+
+    pic = armv7m_init(system_memory, flash_size, sram_size,
+                      kernel_filename, cpu_model);
 
     if (board->dc1 & (1 << 16)) {
         dev = sysbus_create_varargs(TYPE_STELLARIS_ADC, 0x40038000,