qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] Consolidate embedded PPC initial mappung functions
@ 2024-07-16 12:07 BALATON Zoltan
  2024-07-16 12:07 ` [PATCH 1/2] hw/ppc: Consolidate e500 initial mapping creation functions BALATON Zoltan
                   ` (3 more replies)
  0 siblings, 4 replies; 10+ messages in thread
From: BALATON Zoltan @ 2024-07-16 12:07 UTC (permalink / raw)
  To: qemu-devel, qemu-ppc
  Cc: Nicholas Piggin, Daniel Henrique Barboza, Edgar E. Iglesias

Embedded PPC has always enabled MMU so it needs initial mappings to
start. This code is duplicated within machines which this small series
aims to consolidate into helper functions to reduce duplicated code
and make the board code simpler.

Regards,
BALATON Zoltan

BALATON Zoltan (2):
  hw/ppc: Consolidate e500 initial mapping creation functions
  hw/ppc: Consolidate ppc440 initial mapping creation functions

 hw/ppc/e500.c          | 41 ++++++++++++++++++--------------------
 hw/ppc/e500.h          |  2 --
 hw/ppc/ppc440_bamboo.c | 28 +++-----------------------
 hw/ppc/ppc_booke.c     | 10 ++++++++++
 hw/ppc/ppce500_spin.c  | 30 +++++++++-------------------
 hw/ppc/sam460ex.c      | 45 ++++++++++--------------------------------
 hw/ppc/virtex_ml507.c  | 28 +++-----------------------
 include/hw/ppc/ppc.h   |  7 +++++++
 8 files changed, 61 insertions(+), 130 deletions(-)

-- 
2.30.9



^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH 1/2] hw/ppc: Consolidate e500 initial mapping creation functions
  2024-07-16 12:07 [PATCH 0/2] Consolidate embedded PPC initial mappung functions BALATON Zoltan
@ 2024-07-16 12:07 ` BALATON Zoltan
  2024-08-15 19:01   ` Bernhard Beschow
  2024-07-16 12:07 ` [PATCH 2/2] hw/ppc: Consolidate ppc440 " BALATON Zoltan
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 10+ messages in thread
From: BALATON Zoltan @ 2024-07-16 12:07 UTC (permalink / raw)
  To: qemu-devel, qemu-ppc
  Cc: Nicholas Piggin, Daniel Henrique Barboza, Edgar E. Iglesias

Add booke206_set_tlb() utility function and use it to replace very
similar create_initial_mapping functions in e500 machines.

Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu>
---
 hw/ppc/e500.c         | 41 +++++++++++++++++++----------------------
 hw/ppc/e500.h         |  2 --
 hw/ppc/ppce500_spin.c | 30 +++++++++---------------------
 include/hw/ppc/ppc.h  |  5 +++++
 4 files changed, 33 insertions(+), 45 deletions(-)

diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c
index 3bd12b54ab..8682bc7838 100644
--- a/hw/ppc/e500.c
+++ b/hw/ppc/e500.c
@@ -721,11 +721,21 @@ static int ppce500_prep_device_tree(PPCE500MachineState *machine,
                                     kernel_base, kernel_size, true);
 }
 
-hwaddr booke206_page_size_to_tlb(uint64_t size)
+static hwaddr booke206_page_size_to_tlb(uint64_t size)
 {
     return 63 - clz64(size / KiB);
 }
 
+void booke206_set_tlb(ppcmas_tlb_t *tlb, target_ulong va, hwaddr pa,
+                      hwaddr len)
+{
+    tlb->mas1 = booke206_page_size_to_tlb(len) << MAS1_TSIZE_SHIFT;
+    tlb->mas1 |= MAS1_VALID;
+    tlb->mas2 = va & TARGET_PAGE_MASK;
+    tlb->mas7_3 = pa & TARGET_PAGE_MASK;
+    tlb->mas7_3 |= MAS3_UR | MAS3_UW | MAS3_UX | MAS3_SR | MAS3_SW | MAS3_SX;
+}
+
 static int booke206_initial_map_tsize(CPUPPCState *env)
 {
     struct boot_info *bi = env->load_info;
@@ -751,25 +761,6 @@ static uint64_t mmubooke_initial_mapsize(CPUPPCState *env)
     return (1ULL << 10 << tsize);
 }
 
-/* Create -kernel TLB entries for BookE. */
-static void mmubooke_create_initial_mapping(CPUPPCState *env)
-{
-    ppcmas_tlb_t *tlb = booke206_get_tlbm(env, 1, 0, 0);
-    hwaddr size;
-    int ps;
-
-    ps = booke206_initial_map_tsize(env);
-    size = (ps << MAS1_TSIZE_SHIFT);
-    tlb->mas1 = MAS1_VALID | size;
-    tlb->mas2 = 0;
-    tlb->mas7_3 = 0;
-    tlb->mas7_3 |= MAS3_UR | MAS3_UW | MAS3_UX | MAS3_SR | MAS3_SW | MAS3_SX;
-
-#ifdef CONFIG_KVM
-    env->tlb_dirty = true;
-#endif
-}
-
 static void ppce500_cpu_reset_sec(void *opaque)
 {
     PowerPCCPU *cpu = opaque;
@@ -786,6 +777,8 @@ static void ppce500_cpu_reset(void *opaque)
     CPUState *cs = CPU(cpu);
     CPUPPCState *env = &cpu->env;
     struct boot_info *bi = env->load_info;
+    uint64_t map_size = mmubooke_initial_mapsize(env);
+    ppcmas_tlb_t *tlb = booke206_get_tlbm(env, 1, 0, 0);
 
     cpu_reset(cs);
 
@@ -796,11 +789,15 @@ static void ppce500_cpu_reset(void *opaque)
     env->gpr[4] = 0;
     env->gpr[5] = 0;
     env->gpr[6] = EPAPR_MAGIC;
-    env->gpr[7] = mmubooke_initial_mapsize(env);
+    env->gpr[7] = map_size;
     env->gpr[8] = 0;
     env->gpr[9] = 0;
     env->nip = bi->entry;
-    mmubooke_create_initial_mapping(env);
+    /* create initial mapping */
+    booke206_set_tlb(tlb, 0, 0, map_size);
+#ifdef CONFIG_KVM
+    env->tlb_dirty = true;
+#endif
 }
 
 static DeviceState *ppce500_init_mpic_qemu(PPCE500MachineState *pms,
diff --git a/hw/ppc/e500.h b/hw/ppc/e500.h
index 8c09ef92e4..01db102625 100644
--- a/hw/ppc/e500.h
+++ b/hw/ppc/e500.h
@@ -41,8 +41,6 @@ struct PPCE500MachineClass {
 
 void ppce500_init(MachineState *machine);
 
-hwaddr booke206_page_size_to_tlb(uint64_t size);
-
 #define TYPE_PPCE500_MACHINE      "ppce500-base-machine"
 OBJECT_DECLARE_TYPE(PPCE500MachineState, PPCE500MachineClass, PPCE500_MACHINE)
 
diff --git a/hw/ppc/ppce500_spin.c b/hw/ppc/ppce500_spin.c
index dfbe759481..208d87569a 100644
--- a/hw/ppc/ppce500_spin.c
+++ b/hw/ppc/ppce500_spin.c
@@ -33,6 +33,7 @@
 #include "hw/hw.h"
 #include "hw/sysbus.h"
 #include "sysemu/hw_accel.h"
+#include "hw/ppc/ppc.h"
 #include "e500.h"
 #include "qom/object.h"
 
@@ -70,30 +71,12 @@ static void spin_reset(DeviceState *dev)
     }
 }
 
-static void mmubooke_create_initial_mapping(CPUPPCState *env,
-                                     target_ulong va,
-                                     hwaddr pa,
-                                     hwaddr len)
-{
-    ppcmas_tlb_t *tlb = booke206_get_tlbm(env, 1, 0, 1);
-    hwaddr size;
-
-    size = (booke206_page_size_to_tlb(len) << MAS1_TSIZE_SHIFT);
-    tlb->mas1 = MAS1_VALID | size;
-    tlb->mas2 = (va & TARGET_PAGE_MASK) | MAS2_M;
-    tlb->mas7_3 = pa & TARGET_PAGE_MASK;
-    tlb->mas7_3 |= MAS3_UR | MAS3_UW | MAS3_UX | MAS3_SR | MAS3_SW | MAS3_SX;
-#ifdef CONFIG_KVM
-    env->tlb_dirty = true;
-#endif
-}
-
 static void spin_kick(CPUState *cs, run_on_cpu_data data)
 {
     CPUPPCState *env = cpu_env(cs);
     SpinInfo *curspin = data.host_ptr;
-    hwaddr map_size = 64 * MiB;
-    hwaddr map_start;
+    hwaddr map_start, map_size = 64 * MiB;
+    ppcmas_tlb_t *tlb = booke206_get_tlbm(env, 1, 0, 1);
 
     cpu_synchronize_state(cs);
     stl_p(&curspin->pir, env->spr[SPR_BOOKE_PIR]);
@@ -107,7 +90,12 @@ static void spin_kick(CPUState *cs, run_on_cpu_data data)
     env->gpr[9] = 0;
 
     map_start = ldq_p(&curspin->addr) & ~(map_size - 1);
-    mmubooke_create_initial_mapping(env, 0, map_start, map_size);
+    /* create initial mapping */
+    booke206_set_tlb(tlb, 0, map_start, map_size);
+    tlb->mas2 |= MAS2_M;
+#ifdef CONFIG_KVM
+    env->tlb_dirty = true;
+#endif
 
     cs->halted = 0;
     cs->exception_index = -1;
diff --git a/include/hw/ppc/ppc.h b/include/hw/ppc/ppc.h
index d5d119ea7f..070524b02e 100644
--- a/include/hw/ppc/ppc.h
+++ b/include/hw/ppc/ppc.h
@@ -116,6 +116,11 @@ enum {
 
 #define PPC_SERIAL_MM_BAUDBASE 399193
 
+#ifndef CONFIG_USER_ONLY
+void booke206_set_tlb(ppcmas_tlb_t *tlb, target_ulong va, hwaddr pa,
+                      hwaddr len);
+#endif
+
 /* ppc_booke.c */
 void ppc_booke_timers_init(PowerPCCPU *cpu, uint32_t freq, uint32_t flags);
 #endif
-- 
2.30.9



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 2/2] hw/ppc: Consolidate ppc440 initial mapping creation functions
  2024-07-16 12:07 [PATCH 0/2] Consolidate embedded PPC initial mappung functions BALATON Zoltan
  2024-07-16 12:07 ` [PATCH 1/2] hw/ppc: Consolidate e500 initial mapping creation functions BALATON Zoltan
@ 2024-07-16 12:07 ` BALATON Zoltan
  2024-07-16 17:07 ` [PATCH 0/2] Consolidate embedded PPC initial mappung functions Edgar E. Iglesias
  2024-10-08 13:32 ` BALATON Zoltan
  3 siblings, 0 replies; 10+ messages in thread
From: BALATON Zoltan @ 2024-07-16 12:07 UTC (permalink / raw)
  To: qemu-devel, qemu-ppc
  Cc: Nicholas Piggin, Daniel Henrique Barboza, Edgar E. Iglesias

Add a utility function and use it to replace very similar
create_initial_mapping functions in 440 based machines.

Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu>
---
 hw/ppc/ppc440_bamboo.c | 28 +++-----------------------
 hw/ppc/ppc_booke.c     | 10 ++++++++++
 hw/ppc/sam460ex.c      | 45 ++++++++++--------------------------------
 hw/ppc/virtex_ml507.c  | 28 +++-----------------------
 include/hw/ppc/ppc.h   |  2 ++
 5 files changed, 28 insertions(+), 85 deletions(-)

diff --git a/hw/ppc/ppc440_bamboo.c b/hw/ppc/ppc440_bamboo.c
index 73f80cf706..ae4d6cd96b 100644
--- a/hw/ppc/ppc440_bamboo.c
+++ b/hw/ppc/ppc440_bamboo.c
@@ -110,29 +110,6 @@ static int bamboo_load_device_tree(MachineState *machine,
     return 0;
 }
 
-/* Create reset TLB entries for BookE, spanning the 32bit addr space.  */
-static void mmubooke_create_initial_mapping(CPUPPCState *env,
-                                     target_ulong va,
-                                     hwaddr pa)
-{
-    ppcemb_tlb_t *tlb = &env->tlb.tlbe[0];
-
-    tlb->attr = 0;
-    tlb->prot = PAGE_VALID | ((PAGE_READ | PAGE_WRITE | PAGE_EXEC) << 4);
-    tlb->size = 1U << 31; /* up to 0x80000000  */
-    tlb->EPN = va & TARGET_PAGE_MASK;
-    tlb->RPN = pa & TARGET_PAGE_MASK;
-    tlb->PID = 0;
-
-    tlb = &env->tlb.tlbe[1];
-    tlb->attr = 0;
-    tlb->prot = PAGE_VALID | ((PAGE_READ | PAGE_WRITE | PAGE_EXEC) << 4);
-    tlb->size = 1U << 31; /* up to 0xffffffff  */
-    tlb->EPN = 0x80000000 & TARGET_PAGE_MASK;
-    tlb->RPN = 0x80000000 & TARGET_PAGE_MASK;
-    tlb->PID = 0;
-}
-
 static void main_cpu_reset(void *opaque)
 {
     PowerPCCPU *cpu = opaque;
@@ -143,8 +120,9 @@ static void main_cpu_reset(void *opaque)
     env->gpr[3] = FDT_ADDR;
     env->nip = entry;
 
-    /* Create a mapping for the kernel.  */
-    mmubooke_create_initial_mapping(env, 0, 0);
+    /* Create a mapping spanning the 32bit addr space. */
+    booke_set_tlb(&env->tlb.tlbe[0], 0, 0, 1U << 31);
+    booke_set_tlb(&env->tlb.tlbe[1], 0x80000000, 0x80000000, 1U << 31);
 }
 
 static void bamboo_init(MachineState *machine)
diff --git a/hw/ppc/ppc_booke.c b/hw/ppc/ppc_booke.c
index ca22da196a..c8849e66ff 100644
--- a/hw/ppc/ppc_booke.c
+++ b/hw/ppc/ppc_booke.c
@@ -31,6 +31,16 @@
 #include "hw/loader.h"
 #include "kvm_ppc.h"
 
+void booke_set_tlb(ppcemb_tlb_t *tlb, target_ulong va, hwaddr pa,
+                   target_ulong size)
+{
+    tlb->attr = 0;
+    tlb->prot = PAGE_RWX << 4 | PAGE_VALID;
+    tlb->size = size;
+    tlb->EPN = va & TARGET_PAGE_MASK;
+    tlb->RPN = pa & TARGET_PAGE_MASK;
+    tlb->PID = 0;
+}
 
 /* Timer Control Register */
 
diff --git a/hw/ppc/sam460ex.c b/hw/ppc/sam460ex.c
index 8dc75fb9f0..ea99a4c624 100644
--- a/hw/ppc/sam460ex.c
+++ b/hw/ppc/sam460ex.c
@@ -213,38 +213,6 @@ static int sam460ex_load_device_tree(MachineState *machine,
     return fdt_size;
 }
 
-/* Create reset TLB entries for BookE, mapping only the flash memory.  */
-static void mmubooke_create_initial_mapping_uboot(CPUPPCState *env)
-{
-    ppcemb_tlb_t *tlb = &env->tlb.tlbe[0];
-
-    /* on reset the flash is mapped by a shadow TLB,
-     * but since we don't implement them we need to use
-     * the same values U-Boot will use to avoid a fault.
-     */
-    tlb->attr = 0;
-    tlb->prot = PAGE_VALID | ((PAGE_READ | PAGE_WRITE | PAGE_EXEC) << 4);
-    tlb->size = 0x10000000; /* up to 0xffffffff  */
-    tlb->EPN = 0xf0000000 & TARGET_PAGE_MASK;
-    tlb->RPN = (0xf0000000 & TARGET_PAGE_MASK) | 0x4;
-    tlb->PID = 0;
-}
-
-/* Create reset TLB entries for BookE, spanning the 32bit addr space.  */
-static void mmubooke_create_initial_mapping(CPUPPCState *env,
-                                     target_ulong va,
-                                     hwaddr pa)
-{
-    ppcemb_tlb_t *tlb = &env->tlb.tlbe[0];
-
-    tlb->attr = 0;
-    tlb->prot = PAGE_VALID | ((PAGE_READ | PAGE_WRITE | PAGE_EXEC) << 4);
-    tlb->size = 1 << 31; /* up to 0x80000000  */
-    tlb->EPN = va & TARGET_PAGE_MASK;
-    tlb->RPN = pa & TARGET_PAGE_MASK;
-    tlb->PID = 0;
-}
-
 static void main_cpu_reset(void *opaque)
 {
     PowerPCCPU *cpu = opaque;
@@ -253,20 +221,27 @@ static void main_cpu_reset(void *opaque)
 
     cpu_reset(CPU(cpu));
 
-    /* either we have a kernel to boot or we jump to U-Boot */
+    /*
+     * On reset the flash is mapped by a shadow TLB, but since we
+     * don't implement them we need to use the same values U-Boot
+     * will use to avoid a fault.
+     * either we have a kernel to boot or we jump to U-Boot
+     */
     if (bi->entry != UBOOT_ENTRY) {
         env->gpr[1] = (16 * MiB) - 8;
         env->gpr[3] = FDT_ADDR;
         env->nip = bi->entry;
 
         /* Create a mapping for the kernel.  */
-        mmubooke_create_initial_mapping(env, 0, 0);
+        booke_set_tlb(&env->tlb.tlbe[0], 0, 0, 1 << 31);
         env->gpr[6] = tswap32(EPAPR_MAGIC);
         env->gpr[7] = (16 * MiB) - 8; /* bi->ima_size; */
 
     } else {
         env->nip = UBOOT_ENTRY;
-        mmubooke_create_initial_mapping_uboot(env);
+        /* Create a mapping for U-Boot. */
+        booke_set_tlb(&env->tlb.tlbe[0], 0xf0000000, 0xf0000000, 0x10000000);
+        env->tlb.tlbe[0].RPN |= 4;
     }
 }
 
diff --git a/hw/ppc/virtex_ml507.c b/hw/ppc/virtex_ml507.c
index c49da1f46f..16ddb528fe 100644
--- a/hw/ppc/virtex_ml507.c
+++ b/hw/ppc/virtex_ml507.c
@@ -67,29 +67,6 @@ static struct boot_info
     void *vfdt;
 } boot_info;
 
-/* Create reset TLB entries for BookE, spanning the 32bit addr space.  */
-static void mmubooke_create_initial_mapping(CPUPPCState *env,
-                                     target_ulong va,
-                                     hwaddr pa)
-{
-    ppcemb_tlb_t *tlb = &env->tlb.tlbe[0];
-
-    tlb->attr = 0;
-    tlb->prot = PAGE_VALID | ((PAGE_READ | PAGE_WRITE | PAGE_EXEC) << 4);
-    tlb->size = 1U << 31; /* up to 0x80000000  */
-    tlb->EPN = va & TARGET_PAGE_MASK;
-    tlb->RPN = pa & TARGET_PAGE_MASK;
-    tlb->PID = 0;
-
-    tlb = &env->tlb.tlbe[1];
-    tlb->attr = 0;
-    tlb->prot = PAGE_VALID | ((PAGE_READ | PAGE_WRITE | PAGE_EXEC) << 4);
-    tlb->size = 1U << 31; /* up to 0xffffffff  */
-    tlb->EPN = 0x80000000 & TARGET_PAGE_MASK;
-    tlb->RPN = 0x80000000 & TARGET_PAGE_MASK;
-    tlb->PID = 0;
-}
-
 static PowerPCCPU *ppc440_init_xilinx(const char *cpu_type, uint32_t sysclk)
 {
     PowerPCCPU *cpu;
@@ -139,8 +116,9 @@ static void main_cpu_reset(void *opaque)
     env->gpr[3] = bi->fdt;
     env->nip = bi->bootstrap_pc;
 
-    /* Create a mapping for the kernel.  */
-    mmubooke_create_initial_mapping(env, 0, 0);
+    /* Create a mapping spanning the 32bit addr space. */
+    booke_set_tlb(&env->tlb.tlbe[0], 0, 0, 1U << 31);
+    booke_set_tlb(&env->tlb.tlbe[1], 0x80000000, 0x80000000, 1U << 31);
     env->gpr[6] = tswap32(EPAPR_MAGIC);
     env->gpr[7] = bi->ima_size;
 }
diff --git a/include/hw/ppc/ppc.h b/include/hw/ppc/ppc.h
index 070524b02e..8a14d623f8 100644
--- a/include/hw/ppc/ppc.h
+++ b/include/hw/ppc/ppc.h
@@ -119,6 +119,8 @@ enum {
 #ifndef CONFIG_USER_ONLY
 void booke206_set_tlb(ppcmas_tlb_t *tlb, target_ulong va, hwaddr pa,
                       hwaddr len);
+void booke_set_tlb(ppcemb_tlb_t *tlb, target_ulong va, hwaddr pa,
+                   target_ulong size);
 #endif
 
 /* ppc_booke.c */
-- 
2.30.9



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH 0/2] Consolidate embedded PPC initial mappung functions
  2024-07-16 12:07 [PATCH 0/2] Consolidate embedded PPC initial mappung functions BALATON Zoltan
  2024-07-16 12:07 ` [PATCH 1/2] hw/ppc: Consolidate e500 initial mapping creation functions BALATON Zoltan
  2024-07-16 12:07 ` [PATCH 2/2] hw/ppc: Consolidate ppc440 " BALATON Zoltan
@ 2024-07-16 17:07 ` Edgar E. Iglesias
  2024-10-08 13:32 ` BALATON Zoltan
  3 siblings, 0 replies; 10+ messages in thread
From: Edgar E. Iglesias @ 2024-07-16 17:07 UTC (permalink / raw)
  To: BALATON Zoltan
  Cc: qemu-devel, qemu-ppc, Nicholas Piggin, Daniel Henrique Barboza

On Tue, Jul 16, 2024 at 02:07:56PM +0200, BALATON Zoltan wrote:
> Embedded PPC has always enabled MMU so it needs initial mappings to
> start. This code is duplicated within machines which this small series
> aims to consolidate into helper functions to reduce duplicated code
> and make the board code simpler.
> 
> Regards,
> BALATON Zoltan

I tested this with my virtex-ml507 images:

Reviewed-by: Edgar E. Iglesias <edgar.iglesias@amd.com>
Tested-by: Edgar E. Iglesias <edgar.iglesias@amd.com>

Cheers,
Edgar


> 
> BALATON Zoltan (2):
>   hw/ppc: Consolidate e500 initial mapping creation functions
>   hw/ppc: Consolidate ppc440 initial mapping creation functions
> 
>  hw/ppc/e500.c          | 41 ++++++++++++++++++--------------------
>  hw/ppc/e500.h          |  2 --
>  hw/ppc/ppc440_bamboo.c | 28 +++-----------------------
>  hw/ppc/ppc_booke.c     | 10 ++++++++++
>  hw/ppc/ppce500_spin.c  | 30 +++++++++-------------------
>  hw/ppc/sam460ex.c      | 45 ++++++++++--------------------------------
>  hw/ppc/virtex_ml507.c  | 28 +++-----------------------
>  include/hw/ppc/ppc.h   |  7 +++++++
>  8 files changed, 61 insertions(+), 130 deletions(-)
> 
> -- 
> 2.30.9
> 


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 1/2] hw/ppc: Consolidate e500 initial mapping creation functions
  2024-07-16 12:07 ` [PATCH 1/2] hw/ppc: Consolidate e500 initial mapping creation functions BALATON Zoltan
@ 2024-08-15 19:01   ` Bernhard Beschow
  2024-10-01 19:31     ` Bernhard Beschow
  2024-10-06 18:46     ` BALATON Zoltan
  0 siblings, 2 replies; 10+ messages in thread
From: Bernhard Beschow @ 2024-08-15 19:01 UTC (permalink / raw)
  To: qemu-devel, BALATON Zoltan, qemu-ppc
  Cc: Nicholas Piggin, Daniel Henrique Barboza, Edgar E. Iglesias



Am 16. Juli 2024 12:07:57 UTC schrieb BALATON Zoltan <balaton@eik.bme.hu>:
>Add booke206_set_tlb() utility function and use it to replace very
>similar create_initial_mapping functions in e500 machines.
>
>Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu>
>---
> hw/ppc/e500.c         | 41 +++++++++++++++++++----------------------
> hw/ppc/e500.h         |  2 --
> hw/ppc/ppce500_spin.c | 30 +++++++++---------------------
> include/hw/ppc/ppc.h  |  5 +++++
> 4 files changed, 33 insertions(+), 45 deletions(-)
>
>diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c
>index 3bd12b54ab..8682bc7838 100644
>--- a/hw/ppc/e500.c
>+++ b/hw/ppc/e500.c
>@@ -721,11 +721,21 @@ static int ppce500_prep_device_tree(PPCE500MachineState *machine,
>                                     kernel_base, kernel_size, true);
> }
> 
>-hwaddr booke206_page_size_to_tlb(uint64_t size)
>+static hwaddr booke206_page_size_to_tlb(uint64_t size)
> {
>     return 63 - clz64(size / KiB);
> }
> 
>+void booke206_set_tlb(ppcmas_tlb_t *tlb, target_ulong va, hwaddr pa,
>+                      hwaddr len)
>+{
>+    tlb->mas1 = booke206_page_size_to_tlb(len) << MAS1_TSIZE_SHIFT;
>+    tlb->mas1 |= MAS1_VALID;
>+    tlb->mas2 = va & TARGET_PAGE_MASK;
>+    tlb->mas7_3 = pa & TARGET_PAGE_MASK;
>+    tlb->mas7_3 |= MAS3_UR | MAS3_UW | MAS3_UX | MAS3_SR | MAS3_SW | MAS3_SX;
>+}
>+
> static int booke206_initial_map_tsize(CPUPPCState *env)
> {
>     struct boot_info *bi = env->load_info;
>@@ -751,25 +761,6 @@ static uint64_t mmubooke_initial_mapsize(CPUPPCState *env)
>     return (1ULL << 10 << tsize);
> }
> 
>-/* Create -kernel TLB entries for BookE. */
>-static void mmubooke_create_initial_mapping(CPUPPCState *env)
>-{
>-    ppcmas_tlb_t *tlb = booke206_get_tlbm(env, 1, 0, 0);
>-    hwaddr size;
>-    int ps;
>-
>-    ps = booke206_initial_map_tsize(env);
>-    size = (ps << MAS1_TSIZE_SHIFT);
>-    tlb->mas1 = MAS1_VALID | size;
>-    tlb->mas2 = 0;
>-    tlb->mas7_3 = 0;
>-    tlb->mas7_3 |= MAS3_UR | MAS3_UW | MAS3_UX | MAS3_SR | MAS3_SW | MAS3_SX;
>-
>-#ifdef CONFIG_KVM
>-    env->tlb_dirty = true;
>-#endif
>-}
>-
> static void ppce500_cpu_reset_sec(void *opaque)
> {
>     PowerPCCPU *cpu = opaque;
>@@ -786,6 +777,8 @@ static void ppce500_cpu_reset(void *opaque)
>     CPUState *cs = CPU(cpu);
>     CPUPPCState *env = &cpu->env;
>     struct boot_info *bi = env->load_info;
>+    uint64_t map_size = mmubooke_initial_mapsize(env);
>+    ppcmas_tlb_t *tlb = booke206_get_tlbm(env, 1, 0, 0);
> 
>     cpu_reset(cs);
> 
>@@ -796,11 +789,15 @@ static void ppce500_cpu_reset(void *opaque)
>     env->gpr[4] = 0;
>     env->gpr[5] = 0;
>     env->gpr[6] = EPAPR_MAGIC;
>-    env->gpr[7] = mmubooke_initial_mapsize(env);
>+    env->gpr[7] = map_size;
>     env->gpr[8] = 0;
>     env->gpr[9] = 0;
>     env->nip = bi->entry;
>-    mmubooke_create_initial_mapping(env);
>+    /* create initial mapping */
>+    booke206_set_tlb(tlb, 0, 0, map_size);

Both invocations of booke206_set_tlb() are followed by:

>+#ifdef CONFIG_KVM
>+    env->tlb_dirty = true;
>+#endif 

Doesn't it make sense to move these three lines into booke206_set_tlb()? The two copies you're resolving did so, too.

Best regards,
Bernhard

> }
> 
> static DeviceState *ppce500_init_mpic_qemu(PPCE500MachineState *pms,
>diff --git a/hw/ppc/e500.h b/hw/ppc/e500.h
>index 8c09ef92e4..01db102625 100644
>--- a/hw/ppc/e500.h
>+++ b/hw/ppc/e500.h
>@@ -41,8 +41,6 @@ struct PPCE500MachineClass {
> 
> void ppce500_init(MachineState *machine);
> 
>-hwaddr booke206_page_size_to_tlb(uint64_t size);
>-
> #define TYPE_PPCE500_MACHINE      "ppce500-base-machine"
> OBJECT_DECLARE_TYPE(PPCE500MachineState, PPCE500MachineClass, PPCE500_MACHINE)
> 
>diff --git a/hw/ppc/ppce500_spin.c b/hw/ppc/ppce500_spin.c
>index dfbe759481..208d87569a 100644
>--- a/hw/ppc/ppce500_spin.c
>+++ b/hw/ppc/ppce500_spin.c
>@@ -33,6 +33,7 @@
> #include "hw/hw.h"
> #include "hw/sysbus.h"
> #include "sysemu/hw_accel.h"
>+#include "hw/ppc/ppc.h"
> #include "e500.h"
> #include "qom/object.h"
> 
>@@ -70,30 +71,12 @@ static void spin_reset(DeviceState *dev)
>     }
> }
> 
>-static void mmubooke_create_initial_mapping(CPUPPCState *env,
>-                                     target_ulong va,
>-                                     hwaddr pa,
>-                                     hwaddr len)
>-{
>-    ppcmas_tlb_t *tlb = booke206_get_tlbm(env, 1, 0, 1);
>-    hwaddr size;
>-
>-    size = (booke206_page_size_to_tlb(len) << MAS1_TSIZE_SHIFT);
>-    tlb->mas1 = MAS1_VALID | size;
>-    tlb->mas2 = (va & TARGET_PAGE_MASK) | MAS2_M;
>-    tlb->mas7_3 = pa & TARGET_PAGE_MASK;
>-    tlb->mas7_3 |= MAS3_UR | MAS3_UW | MAS3_UX | MAS3_SR | MAS3_SW | MAS3_SX;
>-#ifdef CONFIG_KVM
>-    env->tlb_dirty = true;
>-#endif
>-}
>-
> static void spin_kick(CPUState *cs, run_on_cpu_data data)
> {
>     CPUPPCState *env = cpu_env(cs);
>     SpinInfo *curspin = data.host_ptr;
>-    hwaddr map_size = 64 * MiB;
>-    hwaddr map_start;
>+    hwaddr map_start, map_size = 64 * MiB;
>+    ppcmas_tlb_t *tlb = booke206_get_tlbm(env, 1, 0, 1);
> 
>     cpu_synchronize_state(cs);
>     stl_p(&curspin->pir, env->spr[SPR_BOOKE_PIR]);
>@@ -107,7 +90,12 @@ static void spin_kick(CPUState *cs, run_on_cpu_data data)
>     env->gpr[9] = 0;
> 
>     map_start = ldq_p(&curspin->addr) & ~(map_size - 1);
>-    mmubooke_create_initial_mapping(env, 0, map_start, map_size);
>+    /* create initial mapping */
>+    booke206_set_tlb(tlb, 0, map_start, map_size);
>+    tlb->mas2 |= MAS2_M;
>+#ifdef CONFIG_KVM
>+    env->tlb_dirty = true;
>+#endif
> 
>     cs->halted = 0;
>     cs->exception_index = -1;
>diff --git a/include/hw/ppc/ppc.h b/include/hw/ppc/ppc.h
>index d5d119ea7f..070524b02e 100644
>--- a/include/hw/ppc/ppc.h
>+++ b/include/hw/ppc/ppc.h
>@@ -116,6 +116,11 @@ enum {
> 
> #define PPC_SERIAL_MM_BAUDBASE 399193
> 
>+#ifndef CONFIG_USER_ONLY
>+void booke206_set_tlb(ppcmas_tlb_t *tlb, target_ulong va, hwaddr pa,
>+                      hwaddr len);
>+#endif
>+
> /* ppc_booke.c */
> void ppc_booke_timers_init(PowerPCCPU *cpu, uint32_t freq, uint32_t flags);
> #endif


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 1/2] hw/ppc: Consolidate e500 initial mapping creation functions
  2024-08-15 19:01   ` Bernhard Beschow
@ 2024-10-01 19:31     ` Bernhard Beschow
  2024-10-01 23:35       ` BALATON Zoltan
  2024-10-06 18:46     ` BALATON Zoltan
  1 sibling, 1 reply; 10+ messages in thread
From: Bernhard Beschow @ 2024-10-01 19:31 UTC (permalink / raw)
  To: qemu-devel, BALATON Zoltan, qemu-ppc
  Cc: Nicholas Piggin, Daniel Henrique Barboza, Edgar E. Iglesias



Am 15. August 2024 19:01:47 UTC schrieb Bernhard Beschow <shentey@gmail.com>:
>
>
>Am 16. Juli 2024 12:07:57 UTC schrieb BALATON Zoltan <balaton@eik.bme.hu>:
>>Add booke206_set_tlb() utility function and use it to replace very
>>similar create_initial_mapping functions in e500 machines.
>>
>>Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu>
>>---
>> hw/ppc/e500.c         | 41 +++++++++++++++++++----------------------
>> hw/ppc/e500.h         |  2 --
>> hw/ppc/ppce500_spin.c | 30 +++++++++---------------------
>> include/hw/ppc/ppc.h  |  5 +++++
>> 4 files changed, 33 insertions(+), 45 deletions(-)
>>
>>diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c
>>index 3bd12b54ab..8682bc7838 100644
>>--- a/hw/ppc/e500.c
>>+++ b/hw/ppc/e500.c
>>@@ -721,11 +721,21 @@ static int ppce500_prep_device_tree(PPCE500MachineState *machine,
>>                                     kernel_base, kernel_size, true);
>> }
>> 
>>-hwaddr booke206_page_size_to_tlb(uint64_t size)
>>+static hwaddr booke206_page_size_to_tlb(uint64_t size)
>> {
>>     return 63 - clz64(size / KiB);
>> }
>> 
>>+void booke206_set_tlb(ppcmas_tlb_t *tlb, target_ulong va, hwaddr pa,
>>+                      hwaddr len)
>>+{
>>+    tlb->mas1 = booke206_page_size_to_tlb(len) << MAS1_TSIZE_SHIFT;
>>+    tlb->mas1 |= MAS1_VALID;
>>+    tlb->mas2 = va & TARGET_PAGE_MASK;
>>+    tlb->mas7_3 = pa & TARGET_PAGE_MASK;
>>+    tlb->mas7_3 |= MAS3_UR | MAS3_UW | MAS3_UX | MAS3_SR | MAS3_SW | MAS3_SX;
>>+}
>>+
>> static int booke206_initial_map_tsize(CPUPPCState *env)
>> {
>>     struct boot_info *bi = env->load_info;
>>@@ -751,25 +761,6 @@ static uint64_t mmubooke_initial_mapsize(CPUPPCState *env)
>>     return (1ULL << 10 << tsize);
>> }
>> 
>>-/* Create -kernel TLB entries for BookE. */
>>-static void mmubooke_create_initial_mapping(CPUPPCState *env)
>>-{
>>-    ppcmas_tlb_t *tlb = booke206_get_tlbm(env, 1, 0, 0);
>>-    hwaddr size;
>>-    int ps;
>>-
>>-    ps = booke206_initial_map_tsize(env);
>>-    size = (ps << MAS1_TSIZE_SHIFT);
>>-    tlb->mas1 = MAS1_VALID | size;
>>-    tlb->mas2 = 0;
>>-    tlb->mas7_3 = 0;
>>-    tlb->mas7_3 |= MAS3_UR | MAS3_UW | MAS3_UX | MAS3_SR | MAS3_SW | MAS3_SX;
>>-
>>-#ifdef CONFIG_KVM
>>-    env->tlb_dirty = true;
>>-#endif
>>-}
>>-
>> static void ppce500_cpu_reset_sec(void *opaque)
>> {
>>     PowerPCCPU *cpu = opaque;
>>@@ -786,6 +777,8 @@ static void ppce500_cpu_reset(void *opaque)
>>     CPUState *cs = CPU(cpu);
>>     CPUPPCState *env = &cpu->env;
>>     struct boot_info *bi = env->load_info;
>>+    uint64_t map_size = mmubooke_initial_mapsize(env);
>>+    ppcmas_tlb_t *tlb = booke206_get_tlbm(env, 1, 0, 0);
>> 
>>     cpu_reset(cs);
>> 
>>@@ -796,11 +789,15 @@ static void ppce500_cpu_reset(void *opaque)
>>     env->gpr[4] = 0;
>>     env->gpr[5] = 0;
>>     env->gpr[6] = EPAPR_MAGIC;
>>-    env->gpr[7] = mmubooke_initial_mapsize(env);
>>+    env->gpr[7] = map_size;
>>     env->gpr[8] = 0;
>>     env->gpr[9] = 0;
>>     env->nip = bi->entry;
>>-    mmubooke_create_initial_mapping(env);
>>+    /* create initial mapping */
>>+    booke206_set_tlb(tlb, 0, 0, map_size);
>
>Both invocations of booke206_set_tlb() are followed by:
>
>>+#ifdef CONFIG_KVM
>>+    env->tlb_dirty = true;
>>+#endif 
>
>Doesn't it make sense to move these three lines into booke206_set_tlb()? The two copies you're resolving did so, too.

Ping

>
>Best regards,
>Bernhard
>
>> }
>> 
>> static DeviceState *ppce500_init_mpic_qemu(PPCE500MachineState *pms,
>>diff --git a/hw/ppc/e500.h b/hw/ppc/e500.h
>>index 8c09ef92e4..01db102625 100644
>>--- a/hw/ppc/e500.h
>>+++ b/hw/ppc/e500.h
>>@@ -41,8 +41,6 @@ struct PPCE500MachineClass {
>> 
>> void ppce500_init(MachineState *machine);
>> 
>>-hwaddr booke206_page_size_to_tlb(uint64_t size);
>>-
>> #define TYPE_PPCE500_MACHINE      "ppce500-base-machine"
>> OBJECT_DECLARE_TYPE(PPCE500MachineState, PPCE500MachineClass, PPCE500_MACHINE)
>> 
>>diff --git a/hw/ppc/ppce500_spin.c b/hw/ppc/ppce500_spin.c
>>index dfbe759481..208d87569a 100644
>>--- a/hw/ppc/ppce500_spin.c
>>+++ b/hw/ppc/ppce500_spin.c
>>@@ -33,6 +33,7 @@
>> #include "hw/hw.h"
>> #include "hw/sysbus.h"
>> #include "sysemu/hw_accel.h"
>>+#include "hw/ppc/ppc.h"
>> #include "e500.h"
>> #include "qom/object.h"
>> 
>>@@ -70,30 +71,12 @@ static void spin_reset(DeviceState *dev)
>>     }
>> }
>> 
>>-static void mmubooke_create_initial_mapping(CPUPPCState *env,
>>-                                     target_ulong va,
>>-                                     hwaddr pa,
>>-                                     hwaddr len)
>>-{
>>-    ppcmas_tlb_t *tlb = booke206_get_tlbm(env, 1, 0, 1);
>>-    hwaddr size;
>>-
>>-    size = (booke206_page_size_to_tlb(len) << MAS1_TSIZE_SHIFT);
>>-    tlb->mas1 = MAS1_VALID | size;
>>-    tlb->mas2 = (va & TARGET_PAGE_MASK) | MAS2_M;
>>-    tlb->mas7_3 = pa & TARGET_PAGE_MASK;
>>-    tlb->mas7_3 |= MAS3_UR | MAS3_UW | MAS3_UX | MAS3_SR | MAS3_SW | MAS3_SX;
>>-#ifdef CONFIG_KVM
>>-    env->tlb_dirty = true;
>>-#endif
>>-}
>>-
>> static void spin_kick(CPUState *cs, run_on_cpu_data data)
>> {
>>     CPUPPCState *env = cpu_env(cs);
>>     SpinInfo *curspin = data.host_ptr;
>>-    hwaddr map_size = 64 * MiB;
>>-    hwaddr map_start;
>>+    hwaddr map_start, map_size = 64 * MiB;
>>+    ppcmas_tlb_t *tlb = booke206_get_tlbm(env, 1, 0, 1);
>> 
>>     cpu_synchronize_state(cs);
>>     stl_p(&curspin->pir, env->spr[SPR_BOOKE_PIR]);
>>@@ -107,7 +90,12 @@ static void spin_kick(CPUState *cs, run_on_cpu_data data)
>>     env->gpr[9] = 0;
>> 
>>     map_start = ldq_p(&curspin->addr) & ~(map_size - 1);
>>-    mmubooke_create_initial_mapping(env, 0, map_start, map_size);
>>+    /* create initial mapping */
>>+    booke206_set_tlb(tlb, 0, map_start, map_size);
>>+    tlb->mas2 |= MAS2_M;
>>+#ifdef CONFIG_KVM
>>+    env->tlb_dirty = true;
>>+#endif
>> 
>>     cs->halted = 0;
>>     cs->exception_index = -1;
>>diff --git a/include/hw/ppc/ppc.h b/include/hw/ppc/ppc.h
>>index d5d119ea7f..070524b02e 100644
>>--- a/include/hw/ppc/ppc.h
>>+++ b/include/hw/ppc/ppc.h
>>@@ -116,6 +116,11 @@ enum {
>> 
>> #define PPC_SERIAL_MM_BAUDBASE 399193
>> 
>>+#ifndef CONFIG_USER_ONLY
>>+void booke206_set_tlb(ppcmas_tlb_t *tlb, target_ulong va, hwaddr pa,
>>+                      hwaddr len);
>>+#endif
>>+
>> /* ppc_booke.c */
>> void ppc_booke_timers_init(PowerPCCPU *cpu, uint32_t freq, uint32_t flags);
>> #endif


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 1/2] hw/ppc: Consolidate e500 initial mapping creation functions
  2024-10-01 19:31     ` Bernhard Beschow
@ 2024-10-01 23:35       ` BALATON Zoltan
  0 siblings, 0 replies; 10+ messages in thread
From: BALATON Zoltan @ 2024-10-01 23:35 UTC (permalink / raw)
  To: Bernhard Beschow
  Cc: qemu-devel, qemu-ppc, Nicholas Piggin, Daniel Henrique Barboza,
	Edgar E. Iglesias

On Tue, 1 Oct 2024, Bernhard Beschow wrote:
> Am 15. August 2024 19:01:47 UTC schrieb Bernhard Beschow <shentey@gmail.com>:
>> Am 16. Juli 2024 12:07:57 UTC schrieb BALATON Zoltan <balaton@eik.bme.hu>:
>>> Add booke206_set_tlb() utility function and use it to replace very
>>> similar create_initial_mapping functions in e500 machines.
>>>
>>> Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu>
>>> ---
[...]
>>> -    mmubooke_create_initial_mapping(env);
>>> +    /* create initial mapping */
>>> +    booke206_set_tlb(tlb, 0, 0, map_size);
>>
>> Both invocations of booke206_set_tlb() are followed by:
>>
>>> +#ifdef CONFIG_KVM
>>> +    env->tlb_dirty = true;
>>> +#endif
>>
>> Doesn't it make sense to move these three lines into booke206_set_tlb()? The two copies you're resolving did so, too.
>
> Ping

Did not forget but had no time to look at it yet. I'll come back to it 
when I'll have time.

Regards,
BALATON Zoltan

>>
>> Best regards,
>> Bernhard


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 1/2] hw/ppc: Consolidate e500 initial mapping creation functions
  2024-08-15 19:01   ` Bernhard Beschow
  2024-10-01 19:31     ` Bernhard Beschow
@ 2024-10-06 18:46     ` BALATON Zoltan
  1 sibling, 0 replies; 10+ messages in thread
From: BALATON Zoltan @ 2024-10-06 18:46 UTC (permalink / raw)
  To: Bernhard Beschow
  Cc: qemu-devel, qemu-ppc, Nicholas Piggin, Daniel Henrique Barboza,
	Edgar E. Iglesias

On Thu, 15 Aug 2024, Bernhard Beschow wrote:
> Am 16. Juli 2024 12:07:57 UTC schrieb BALATON Zoltan <balaton@eik.bme.hu>:
>> Add booke206_set_tlb() utility function and use it to replace very
>> similar create_initial_mapping functions in e500 machines.
>>
>> Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu>
>> ---
>> hw/ppc/e500.c         | 41 +++++++++++++++++++----------------------
>> hw/ppc/e500.h         |  2 --
>> hw/ppc/ppce500_spin.c | 30 +++++++++---------------------
>> include/hw/ppc/ppc.h  |  5 +++++
>> 4 files changed, 33 insertions(+), 45 deletions(-)
>>
>> diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c
>> index 3bd12b54ab..8682bc7838 100644
>> --- a/hw/ppc/e500.c
>> +++ b/hw/ppc/e500.c
>> @@ -721,11 +721,21 @@ static int ppce500_prep_device_tree(PPCE500MachineState *machine,
>>                                     kernel_base, kernel_size, true);
>> }
>>
>> -hwaddr booke206_page_size_to_tlb(uint64_t size)
>> +static hwaddr booke206_page_size_to_tlb(uint64_t size)
>> {
>>     return 63 - clz64(size / KiB);
>> }
>>
>> +void booke206_set_tlb(ppcmas_tlb_t *tlb, target_ulong va, hwaddr pa,
>> +                      hwaddr len)
>> +{
>> +    tlb->mas1 = booke206_page_size_to_tlb(len) << MAS1_TSIZE_SHIFT;
>> +    tlb->mas1 |= MAS1_VALID;
>> +    tlb->mas2 = va & TARGET_PAGE_MASK;
>> +    tlb->mas7_3 = pa & TARGET_PAGE_MASK;
>> +    tlb->mas7_3 |= MAS3_UR | MAS3_UW | MAS3_UX | MAS3_SR | MAS3_SW | MAS3_SX;
>> +}
>> +
>> static int booke206_initial_map_tsize(CPUPPCState *env)
>> {
>>     struct boot_info *bi = env->load_info;
>> @@ -751,25 +761,6 @@ static uint64_t mmubooke_initial_mapsize(CPUPPCState *env)
>>     return (1ULL << 10 << tsize);
>> }
>>
>> -/* Create -kernel TLB entries for BookE. */
>> -static void mmubooke_create_initial_mapping(CPUPPCState *env)
>> -{
>> -    ppcmas_tlb_t *tlb = booke206_get_tlbm(env, 1, 0, 0);
>> -    hwaddr size;
>> -    int ps;
>> -
>> -    ps = booke206_initial_map_tsize(env);
>> -    size = (ps << MAS1_TSIZE_SHIFT);
>> -    tlb->mas1 = MAS1_VALID | size;
>> -    tlb->mas2 = 0;
>> -    tlb->mas7_3 = 0;
>> -    tlb->mas7_3 |= MAS3_UR | MAS3_UW | MAS3_UX | MAS3_SR | MAS3_SW | MAS3_SX;
>> -
>> -#ifdef CONFIG_KVM
>> -    env->tlb_dirty = true;
>> -#endif
>> -}
>> -
>> static void ppce500_cpu_reset_sec(void *opaque)
>> {
>>     PowerPCCPU *cpu = opaque;
>> @@ -786,6 +777,8 @@ static void ppce500_cpu_reset(void *opaque)
>>     CPUState *cs = CPU(cpu);
>>     CPUPPCState *env = &cpu->env;
>>     struct boot_info *bi = env->load_info;
>> +    uint64_t map_size = mmubooke_initial_mapsize(env);
>> +    ppcmas_tlb_t *tlb = booke206_get_tlbm(env, 1, 0, 0);
>>
>>     cpu_reset(cs);
>>
>> @@ -796,11 +789,15 @@ static void ppce500_cpu_reset(void *opaque)
>>     env->gpr[4] = 0;
>>     env->gpr[5] = 0;
>>     env->gpr[6] = EPAPR_MAGIC;
>> -    env->gpr[7] = mmubooke_initial_mapsize(env);
>> +    env->gpr[7] = map_size;
>>     env->gpr[8] = 0;
>>     env->gpr[9] = 0;
>>     env->nip = bi->entry;
>> -    mmubooke_create_initial_mapping(env);
>> +    /* create initial mapping */
>> +    booke206_set_tlb(tlb, 0, 0, map_size);
>
> Both invocations of booke206_set_tlb() are followed by:
>
>> +#ifdef CONFIG_KVM
>> +    env->tlb_dirty = true;
>> +#endif
>
> Doesn't it make sense to move these three lines into booke206_set_tlb()? The two copies you're resolving did so, too.

No because tlb_dirty is in env and booke206_set_tlb only operates on the 
tlb entry. I don't want to pass the env just for this as this way it 
separates operations on tlb and on env and is also more consistent with 
the ppc440 case.

Regards,
BALATON Zoltan

> Best regards,
> Bernhard
>
>> }
>>
>> static DeviceState *ppce500_init_mpic_qemu(PPCE500MachineState *pms,
>> diff --git a/hw/ppc/e500.h b/hw/ppc/e500.h
>> index 8c09ef92e4..01db102625 100644
>> --- a/hw/ppc/e500.h
>> +++ b/hw/ppc/e500.h
>> @@ -41,8 +41,6 @@ struct PPCE500MachineClass {
>>
>> void ppce500_init(MachineState *machine);
>>
>> -hwaddr booke206_page_size_to_tlb(uint64_t size);
>> -
>> #define TYPE_PPCE500_MACHINE      "ppce500-base-machine"
>> OBJECT_DECLARE_TYPE(PPCE500MachineState, PPCE500MachineClass, PPCE500_MACHINE)
>>
>> diff --git a/hw/ppc/ppce500_spin.c b/hw/ppc/ppce500_spin.c
>> index dfbe759481..208d87569a 100644
>> --- a/hw/ppc/ppce500_spin.c
>> +++ b/hw/ppc/ppce500_spin.c
>> @@ -33,6 +33,7 @@
>> #include "hw/hw.h"
>> #include "hw/sysbus.h"
>> #include "sysemu/hw_accel.h"
>> +#include "hw/ppc/ppc.h"
>> #include "e500.h"
>> #include "qom/object.h"
>>
>> @@ -70,30 +71,12 @@ static void spin_reset(DeviceState *dev)
>>     }
>> }
>>
>> -static void mmubooke_create_initial_mapping(CPUPPCState *env,
>> -                                     target_ulong va,
>> -                                     hwaddr pa,
>> -                                     hwaddr len)
>> -{
>> -    ppcmas_tlb_t *tlb = booke206_get_tlbm(env, 1, 0, 1);
>> -    hwaddr size;
>> -
>> -    size = (booke206_page_size_to_tlb(len) << MAS1_TSIZE_SHIFT);
>> -    tlb->mas1 = MAS1_VALID | size;
>> -    tlb->mas2 = (va & TARGET_PAGE_MASK) | MAS2_M;
>> -    tlb->mas7_3 = pa & TARGET_PAGE_MASK;
>> -    tlb->mas7_3 |= MAS3_UR | MAS3_UW | MAS3_UX | MAS3_SR | MAS3_SW | MAS3_SX;
>> -#ifdef CONFIG_KVM
>> -    env->tlb_dirty = true;
>> -#endif
>> -}
>> -
>> static void spin_kick(CPUState *cs, run_on_cpu_data data)
>> {
>>     CPUPPCState *env = cpu_env(cs);
>>     SpinInfo *curspin = data.host_ptr;
>> -    hwaddr map_size = 64 * MiB;
>> -    hwaddr map_start;
>> +    hwaddr map_start, map_size = 64 * MiB;
>> +    ppcmas_tlb_t *tlb = booke206_get_tlbm(env, 1, 0, 1);
>>
>>     cpu_synchronize_state(cs);
>>     stl_p(&curspin->pir, env->spr[SPR_BOOKE_PIR]);
>> @@ -107,7 +90,12 @@ static void spin_kick(CPUState *cs, run_on_cpu_data data)
>>     env->gpr[9] = 0;
>>
>>     map_start = ldq_p(&curspin->addr) & ~(map_size - 1);
>> -    mmubooke_create_initial_mapping(env, 0, map_start, map_size);
>> +    /* create initial mapping */
>> +    booke206_set_tlb(tlb, 0, map_start, map_size);
>> +    tlb->mas2 |= MAS2_M;
>> +#ifdef CONFIG_KVM
>> +    env->tlb_dirty = true;
>> +#endif
>>
>>     cs->halted = 0;
>>     cs->exception_index = -1;
>> diff --git a/include/hw/ppc/ppc.h b/include/hw/ppc/ppc.h
>> index d5d119ea7f..070524b02e 100644
>> --- a/include/hw/ppc/ppc.h
>> +++ b/include/hw/ppc/ppc.h
>> @@ -116,6 +116,11 @@ enum {
>>
>> #define PPC_SERIAL_MM_BAUDBASE 399193
>>
>> +#ifndef CONFIG_USER_ONLY
>> +void booke206_set_tlb(ppcmas_tlb_t *tlb, target_ulong va, hwaddr pa,
>> +                      hwaddr len);
>> +#endif
>> +
>> /* ppc_booke.c */
>> void ppc_booke_timers_init(PowerPCCPU *cpu, uint32_t freq, uint32_t flags);
>> #endif
>
>


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 0/2] Consolidate embedded PPC initial mappung functions
  2024-07-16 12:07 [PATCH 0/2] Consolidate embedded PPC initial mappung functions BALATON Zoltan
                   ` (2 preceding siblings ...)
  2024-07-16 17:07 ` [PATCH 0/2] Consolidate embedded PPC initial mappung functions Edgar E. Iglesias
@ 2024-10-08 13:32 ` BALATON Zoltan
  2024-11-02 12:20   ` BALATON Zoltan
  3 siblings, 1 reply; 10+ messages in thread
From: BALATON Zoltan @ 2024-10-08 13:32 UTC (permalink / raw)
  To: qemu-devel, qemu-ppc
  Cc: Nicholas Piggin, Daniel Henrique Barboza, Edgar E. Iglesias

On Tue, 16 Jul 2024, BALATON Zoltan wrote:
> Embedded PPC has always enabled MMU so it needs initial mappings to
> start. This code is duplicated within machines which this small series
> aims to consolidate into helper functions to reduce duplicated code
> and make the board code simpler.

Ping?

> Regards,
> BALATON Zoltan
>
> BALATON Zoltan (2):
>  hw/ppc: Consolidate e500 initial mapping creation functions
>  hw/ppc: Consolidate ppc440 initial mapping creation functions
>
> hw/ppc/e500.c          | 41 ++++++++++++++++++--------------------
> hw/ppc/e500.h          |  2 --
> hw/ppc/ppc440_bamboo.c | 28 +++-----------------------
> hw/ppc/ppc_booke.c     | 10 ++++++++++
> hw/ppc/ppce500_spin.c  | 30 +++++++++-------------------
> hw/ppc/sam460ex.c      | 45 ++++++++++--------------------------------
> hw/ppc/virtex_ml507.c  | 28 +++-----------------------
> include/hw/ppc/ppc.h   |  7 +++++++
> 8 files changed, 61 insertions(+), 130 deletions(-)
>
>


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 0/2] Consolidate embedded PPC initial mappung functions
  2024-10-08 13:32 ` BALATON Zoltan
@ 2024-11-02 12:20   ` BALATON Zoltan
  0 siblings, 0 replies; 10+ messages in thread
From: BALATON Zoltan @ 2024-11-02 12:20 UTC (permalink / raw)
  To: qemu-devel, qemu-ppc
  Cc: Nicholas Piggin, Daniel Henrique Barboza, Edgar E. Iglesias

On Tue, 8 Oct 2024, BALATON Zoltan wrote:
> On Tue, 16 Jul 2024, BALATON Zoltan wrote:
>> Embedded PPC has always enabled MMU so it needs initial mappings to
>> start. This code is duplicated within machines which this small series
>> aims to consolidate into helper functions to reduce duplicated code
>> and make the board code simpler.
>
> Ping?

Ping^2

>> Regards,
>> BALATON Zoltan
>> 
>> BALATON Zoltan (2):
>>  hw/ppc: Consolidate e500 initial mapping creation functions
>>  hw/ppc: Consolidate ppc440 initial mapping creation functions
>> 
>> hw/ppc/e500.c          | 41 ++++++++++++++++++--------------------
>> hw/ppc/e500.h          |  2 --
>> hw/ppc/ppc440_bamboo.c | 28 +++-----------------------
>> hw/ppc/ppc_booke.c     | 10 ++++++++++
>> hw/ppc/ppce500_spin.c  | 30 +++++++++-------------------
>> hw/ppc/sam460ex.c      | 45 ++++++++++--------------------------------
>> hw/ppc/virtex_ml507.c  | 28 +++-----------------------
>> include/hw/ppc/ppc.h   |  7 +++++++
>> 8 files changed, 61 insertions(+), 130 deletions(-)
>> 
>> 
>
>


^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2024-11-02 12:21 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-07-16 12:07 [PATCH 0/2] Consolidate embedded PPC initial mappung functions BALATON Zoltan
2024-07-16 12:07 ` [PATCH 1/2] hw/ppc: Consolidate e500 initial mapping creation functions BALATON Zoltan
2024-08-15 19:01   ` Bernhard Beschow
2024-10-01 19:31     ` Bernhard Beschow
2024-10-01 23:35       ` BALATON Zoltan
2024-10-06 18:46     ` BALATON Zoltan
2024-07-16 12:07 ` [PATCH 2/2] hw/ppc: Consolidate ppc440 " BALATON Zoltan
2024-07-16 17:07 ` [PATCH 0/2] Consolidate embedded PPC initial mappung functions Edgar E. Iglesias
2024-10-08 13:32 ` BALATON Zoltan
2024-11-02 12:20   ` BALATON Zoltan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).