qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] [RFC] PPC: dump DCRs from monitor
@ 2012-08-29 11:03 François Revol
  2012-08-29 14:53 ` Alexander Graf
  0 siblings, 1 reply; 5+ messages in thread
From: François Revol @ 2012-08-29 11:03 UTC (permalink / raw)
  To: qemu-devel Developers; +Cc: Alexander Graf

Hi,
I noticed the DCRs weren't shown with the registers or another command,
and tried to add one to dump them to help debugging my sam460ex target.
This first version doesn't list the names since they aren't registered
as such.
I tried adding a name arg to ppc_dcr_register, and a #define to get it
from the index, but it seems some code uses a loop to register them, so
it gives a dump like:
DCR[SDRAM0_CFGDATA 11]	00000000
DCR[dcr_base + i c0]	00000000
DCR[dcr_base + i c1]	00000000
Any suggestion?
BTW, they aren't saved in state dumps, are they?

François.

diff --git a/cpu-all.h b/cpu-all.h
index 5e07d28..a34ae25 100644
--- a/cpu-all.h
+++ b/cpu-all.h
@@ -372,6 +372,8 @@ void cpu_dump_state(CPUArchState *env, FILE *f,
fprintf_function cpu_fprintf,
                     int flags);
 void cpu_dump_statistics(CPUArchState *env, FILE *f, fprintf_function
cpu_fprintf,
                          int flags);
+void ppc_dump_dcr(CPUArchState *env, FILE *f, fprintf_function cpu_fprintf,
+                  int flags);

 void QEMU_NORETURN cpu_abort(CPUArchState *env, const char *fmt, ...)
     GCC_FMT_ATTR(2, 3);
diff --git a/hw/ppc.c b/hw/ppc.c
index 98546de..74b82b7 100644
--- a/hw/ppc.c
+++ b/hw/ppc.c
@@ -1120,6 +1120,27 @@ int ppc_dcr_init (CPUPPCState *env, int
(*read_error)(int dcrn),
     return 0;
 }

+void ppc_dump_dcr (CPUPPCState *env, FILE*f, fprintf_function cpu_fprintf,
+                   int flags)
+{
+    ppc_dcr_t *dcr_env;
+    ppc_dcrn_t *dcr;
+    int dcrn;
+
+    dcr_env = env->dcr_env;
+    if (dcr_env == NULL)
+        return;
+
+    for (dcrn = 0; dcrn < DCRN_NB; dcrn++) {
+        dcr = &dcr_env->dcrn[dcrn];
+        if (dcr->dcr_read == NULL)
+            continue;
+
+        cpu_fprintf(f, "DCR[%02x] %08x\n", dcrn,
+                    dcr->dcr_read(dcr->opaque, dcrn));
+    }
+}
+
 /*****************************************************************************/
 /* Debug port */
 void PPC_debug_write (void *opaque, uint32_t addr, uint32_t val)
diff --git a/monitor.c b/monitor.c
index b17b1bb..b7a2a4b 100644
--- a/monitor.c
+++ b/monitor.c
@@ -936,6 +936,14 @@ static void do_info_cpu_stats(Monitor *mon)
     env = mon_get_cpu();
     cpu_dump_statistics(env, (FILE *)mon, &monitor_fprintf, 0);
 }
+
+static void do_info_dcr(Monitor *mon)
+{
+    CPUArchState *env;
+
+    env = mon_get_cpu();
+    ppc_dump_dcr(env, (FILE*)mon, (fprintf_function)monitor_printf, 0);
+}
 #endif

 static void do_trace_print_events(Monitor *mon)
@@ -2768,6 +2776,15 @@ static mon_cmd_t info_cmds[] = {
         .mhandler.info = tlb_info,
     },
 #endif
+#if defined(TARGET_PPC)
+    {
+        .name       = "dcr",
+        .args_type  = "",
+        .params     = "",
+        .help       = "show device control registers",
+        .mhandler.info = do_info_dcr,
+    },
+#endif
 #if defined(TARGET_I386)
     {
         .name       = "mem",

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

* Re: [Qemu-devel] [PATCH] [RFC] PPC: dump DCRs from monitor
  2012-08-29 11:03 [Qemu-devel] [PATCH] [RFC] PPC: dump DCRs from monitor François Revol
@ 2012-08-29 14:53 ` Alexander Graf
  2012-08-29 17:43   ` François Revol
  0 siblings, 1 reply; 5+ messages in thread
From: Alexander Graf @ 2012-08-29 14:53 UTC (permalink / raw)
  To: François Revol; +Cc: qemu-devel Developers



On 29.08.2012, at 04:03, François Revol <revol@free.fr> wrote:

> Hi,
> I noticed the DCRs weren't shown with the registers or another command,
> and tried to add one to dump them to help debugging my sam460ex target.
> This first version doesn't list the names since they aren't registered
> as such.
> I tried adding a name arg to ppc_dcr_register, and a #define to get it
> from the index, but it seems some code uses a loop to register them, so
> it gives a dump like:
> DCR[SDRAM0_CFGDATA 11]    00000000
> DCR[dcr_base + i c0]    00000000
> DCR[dcr_base + i c1]    00000000
> Any suggestion?
> BTW, they aren't saved in state dumps, are they?

Are they accessible through the monitor's p command? Would be good to implement there too if not.

Alex

> 
> François.
> 
> diff --git a/cpu-all.h b/cpu-all.h
> index 5e07d28..a34ae25 100644
> --- a/cpu-all.h
> +++ b/cpu-all.h
> @@ -372,6 +372,8 @@ void cpu_dump_state(CPUArchState *env, FILE *f,
> fprintf_function cpu_fprintf,
>                     int flags);
> void cpu_dump_statistics(CPUArchState *env, FILE *f, fprintf_function
> cpu_fprintf,
>                          int flags);
> +void ppc_dump_dcr(CPUArchState *env, FILE *f, fprintf_function cpu_fprintf,
> +                  int flags);
> 
> void QEMU_NORETURN cpu_abort(CPUArchState *env, const char *fmt, ...)
>     GCC_FMT_ATTR(2, 3);
> diff --git a/hw/ppc.c b/hw/ppc.c
> index 98546de..74b82b7 100644
> --- a/hw/ppc.c
> +++ b/hw/ppc.c
> @@ -1120,6 +1120,27 @@ int ppc_dcr_init (CPUPPCState *env, int
> (*read_error)(int dcrn),
>     return 0;
> }
> 
> +void ppc_dump_dcr (CPUPPCState *env, FILE*f, fprintf_function cpu_fprintf,
> +                   int flags)
> +{
> +    ppc_dcr_t *dcr_env;
> +    ppc_dcrn_t *dcr;
> +    int dcrn;
> +
> +    dcr_env = env->dcr_env;
> +    if (dcr_env == NULL)
> +        return;
> +
> +    for (dcrn = 0; dcrn < DCRN_NB; dcrn++) {
> +        dcr = &dcr_env->dcrn[dcrn];
> +        if (dcr->dcr_read == NULL)
> +            continue;
> +
> +        cpu_fprintf(f, "DCR[%02x] %08x\n", dcrn,
> +                    dcr->dcr_read(dcr->opaque, dcrn));
> +    }
> +}
> +
> /*****************************************************************************/
> /* Debug port */
> void PPC_debug_write (void *opaque, uint32_t addr, uint32_t val)
> diff --git a/monitor.c b/monitor.c
> index b17b1bb..b7a2a4b 100644
> --- a/monitor.c
> +++ b/monitor.c
> @@ -936,6 +936,14 @@ static void do_info_cpu_stats(Monitor *mon)
>     env = mon_get_cpu();
>     cpu_dump_statistics(env, (FILE *)mon, &monitor_fprintf, 0);
> }
> +
> +static void do_info_dcr(Monitor *mon)
> +{
> +    CPUArchState *env;
> +
> +    env = mon_get_cpu();
> +    ppc_dump_dcr(env, (FILE*)mon, (fprintf_function)monitor_printf, 0);
> +}
> #endif
> 
> static void do_trace_print_events(Monitor *mon)
> @@ -2768,6 +2776,15 @@ static mon_cmd_t info_cmds[] = {
>         .mhandler.info = tlb_info,
>     },
> #endif
> +#if defined(TARGET_PPC)
> +    {
> +        .name       = "dcr",
> +        .args_type  = "",
> +        .params     = "",
> +        .help       = "show device control registers",
> +        .mhandler.info = do_info_dcr,
> +    },
> +#endif
> #if defined(TARGET_I386)
>     {
>         .name       = "mem",

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

* Re: [Qemu-devel] [PATCH] [RFC] PPC: dump DCRs from monitor
  2012-08-29 14:53 ` Alexander Graf
@ 2012-08-29 17:43   ` François Revol
  2012-08-29 17:55     ` Alexander Graf
  0 siblings, 1 reply; 5+ messages in thread
From: François Revol @ 2012-08-29 17:43 UTC (permalink / raw)
  To: Alexander Graf; +Cc: qemu-devel Developers

On 29/08/2012 16:53, Alexander Graf wrote:
> 
> 
> On 29.08.2012, at 04:03, François Revol <revol@free.fr> wrote:
> 
>> Hi,
>> I noticed the DCRs weren't shown with the registers or another command,
>> and tried to add one to dump them to help debugging my sam460ex target.
>> This first version doesn't list the names since they aren't registered
>> as such.
>> I tried adding a name arg to ppc_dcr_register, and a #define to get it
>> from the index, but it seems some code uses a loop to register them, so
>> it gives a dump like:
>> DCR[SDRAM0_CFGDATA 11]    00000000
>> DCR[dcr_base + i c0]    00000000
>> DCR[dcr_base + i c1]    00000000
>> Any suggestion?
>> BTW, they aren't saved in state dumps, are they?
> 
> Are they accessible through the monitor's p command? Would be good to implement there too if not.

I don't think so, which syntax would you use anyway? $dcr[n] ?


François.

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

* Re: [Qemu-devel] [PATCH] [RFC] PPC: dump DCRs from monitor
  2012-08-29 17:43   ` François Revol
@ 2012-08-29 17:55     ` Alexander Graf
  2012-08-30 10:01       ` François Revol
  0 siblings, 1 reply; 5+ messages in thread
From: Alexander Graf @ 2012-08-29 17:55 UTC (permalink / raw)
  To: François Revol; +Cc: qemu-devel Developers



On 29.08.2012, at 10:43, François Revol <revol@free.fr> wrote:

> On 29/08/2012 16:53, Alexander Graf wrote:
>> 
>> 
>> On 29.08.2012, at 04:03, François Revol <revol@free.fr> wrote:
>> 
>>> Hi,
>>> I noticed the DCRs weren't shown with the registers or another command,
>>> and tried to add one to dump them to help debugging my sam460ex target.
>>> This first version doesn't list the names since they aren't registered
>>> as such.
>>> I tried adding a name arg to ppc_dcr_register, and a #define to get it
>>> from the index, but it seems some code uses a loop to register them, so
>>> it gives a dump like:
>>> DCR[SDRAM0_CFGDATA 11]    00000000
>>> DCR[dcr_base + i c0]    00000000
>>> DCR[dcr_base + i c1]    00000000
>>> Any suggestion?
>>> BTW, they aren't saved in state dumps, are they?
>> 
>> Are they accessible through the monitor's p command? Would be good to implement there too if not.
> 
> I don't think so, which syntax would you use anyway? $dcr[n] ?

Sure, why not? Is that possible with the register parsing code? I don't know that one too well, but it's probably the best fit for you, right?

Alex

> 
> 
> François.

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

* Re: [Qemu-devel] [PATCH] [RFC] PPC: dump DCRs from monitor
  2012-08-29 17:55     ` Alexander Graf
@ 2012-08-30 10:01       ` François Revol
  0 siblings, 0 replies; 5+ messages in thread
From: François Revol @ 2012-08-30 10:01 UTC (permalink / raw)
  To: Alexander Graf; +Cc: qemu-devel Developers

On 29/08/2012 19:55, Alexander Graf wrote:
>>> Are they accessible through the monitor's p command? Would be good to implement there too if not.
>>
>> I don't think so, which syntax would you use anyway? $dcr[n] ?
> 
> Sure, why not? Is that possible with the register parsing code? I don't know that one too well,
> but it's probably the best fit for you, right?

Except I don't know the parsing code well enough to not waste time
digging it...
For now the full dump is enough to me, I suppose if someone wants more
he can also send a patch ;-)

We could also add logging to the read/write calls to see the ordering.
For now I just added some printf in my code just like in ppc405*.

François.

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

end of thread, other threads:[~2012-08-30 10:01 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-08-29 11:03 [Qemu-devel] [PATCH] [RFC] PPC: dump DCRs from monitor François Revol
2012-08-29 14:53 ` Alexander Graf
2012-08-29 17:43   ` François Revol
2012-08-29 17:55     ` Alexander Graf
2012-08-30 10:01       ` François Revol

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).