From: Bernhard Beschow <shentey@gmail.com>
To: qemu-devel@nongnu.org, BALATON Zoltan <balaton@eik.bme.hu>,
qemu-ppc@nongnu.org
Cc: Nicholas Piggin <npiggin@gmail.com>,
Daniel Henrique Barboza <danielhb413@gmail.com>,
"Edgar E. Iglesias" <edgar.iglesias@gmail.com>
Subject: Re: [PATCH 1/2] hw/ppc: Consolidate e500 initial mapping creation functions
Date: Thu, 15 Aug 2024 19:01:47 +0000 [thread overview]
Message-ID: <C252CEDD-75BE-4A32-9EA3-98FECBF36BA8@gmail.com> (raw)
In-Reply-To: <485a90bca642c894d94c8dbcadac58448c0bfa71.1721131193.git.balaton@eik.bme.hu>
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
next prev parent reply other threads:[~2024-08-15 19:03 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
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 [this message]
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
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=C252CEDD-75BE-4A32-9EA3-98FECBF36BA8@gmail.com \
--to=shentey@gmail.com \
--cc=balaton@eik.bme.hu \
--cc=danielhb413@gmail.com \
--cc=edgar.iglesias@gmail.com \
--cc=npiggin@gmail.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).