qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] Re: [PATCH] sparc32: ledma extra registers


From: Andreas Färber
Subject: Re: [Qemu-devel] Re: [PATCH] sparc32: ledma extra registers
Date: Sat, 18 Dec 2010 21:26:16 +0100

Am 18.12.2010 um 19:53 schrieb Blue Swirl:

On Sat, Dec 18, 2010 at 5:09 PM, Bob Breuer <address@hidden> wrote:
ledma has 0x20 bytes of registers according to OBP, and at least Solaris9 reads the 5th register which is beyond what we've mapped. So let's setup a flag (inspired by a previous patch from Blue Swirl) to identify ledma
from espdma, and map another 16 bytes of registers which return 0.

Signed-off-by: Bob Breuer <address@hidden>

I'm not familar with that part of code but...

diff --git a/hw/sparc32_dma.c b/hw/sparc32_dma.c
index e78f025..56be8c8 100644
--- a/hw/sparc32_dma.c
+++ b/hw/sparc32_dma.c

@@ -165,6 +169,9 @@ static uint32_t dma_mem_readl(void *opaque, target_phys_addr_t addr)
    DMAState *s = opaque;
    uint32_t saddr;

+    if (s->is_ledma && (addr > DMA_MAX_REG_OFFSET)) {
+        return 0; /* extra mystery register(s) */

Wouldn't it be a good idea to trace these "mystery" reads...

+    }
    saddr = (addr & DMA_MASK) >> 2;
    trace_sparc32_dma_mem_readl(addr, s->dmaregs[saddr]);
    return s->dmaregs[saddr];
@@ -175,6 +182,9 @@ static void dma_mem_writel(void *opaque, target_phys_addr_t addr, uint32_t val)
    DMAState *s = opaque;
    uint32_t saddr;

+    if (s->is_ledma && (addr > DMA_MAX_REG_OFFSET)) {
+        return; /* extra mystery register(s) */

...and writes? We return just before the tracepoints fire.

Andreas

+    }
    saddr = (addr & DMA_MASK) >> 2;
    trace_sparc32_dma_mem_writel(addr, s->dmaregs[saddr], val);
    switch (saddr) {




reply via email to

[Prev in Thread] Current Thread [Next in Thread]