From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=57890 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PU3Mq-0006L1-DW for qemu-devel@nongnu.org; Sat, 18 Dec 2010 15:27:11 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PU3MW-0000C9-Nh for qemu-devel@nongnu.org; Sat, 18 Dec 2010 15:27:00 -0500 Received: from fmmailgate03.web.de ([217.72.192.234]:52739) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PU3MW-0000Bb-BV for qemu-devel@nongnu.org; Sat, 18 Dec 2010 15:26:40 -0500 Message-Id: From: =?ISO-8859-1?Q?Andreas_F=E4rber?= In-Reply-To: Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v936) Subject: Re: [Qemu-devel] Re: [PATCH] sparc32: ledma extra registers Date: Sat, 18 Dec 2010 21:26:16 +0100 References: <4D0CEAB0.9030706@mc.net> Sender: andreas.faerber@web.de List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Blue Swirl , Bob Breuer Cc: QEMU Developers Am 18.12.2010 um 19:53 schrieb Blue Swirl: > On Sat, Dec 18, 2010 at 5:09 PM, Bob Breuer 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 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) {