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",
