[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [5147] ETRAX-FS: Add support for DMA channel resets, needed
From: |
Edgar E. Iglesias |
Subject: |
[Qemu-devel] [5147] ETRAX-FS: Add support for DMA channel resets, needed for recent linux kernels. |
Date: |
Wed, 03 Sep 2008 14:40:17 +0000 |
Revision: 5147
http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=5147
Author: edgar_igl
Date: 2008-09-03 14:40:17 +0000 (Wed, 03 Sep 2008)
Log Message:
-----------
ETRAX-FS: Add support for DMA channel resets, needed for recent linux kernels.
* Correct numeric value for the RST state.
* Add emulation for reseting a DMA channel.
* Add a few sanity checks.
* Make it compile with debug enabled.
Modified Paths:
--------------
trunk/hw/etraxfs_dma.c
Modified: trunk/hw/etraxfs_dma.c
===================================================================
--- trunk/hw/etraxfs_dma.c 2008-09-03 14:31:11 UTC (rev 5146)
+++ trunk/hw/etraxfs_dma.c 2008-09-03 14:40:17 UTC (rev 5147)
@@ -156,7 +156,7 @@
enum dma_ch_state
{
- RST = 0,
+ RST = 1,
STOPPED = 2,
RUNNING = 4
};
@@ -398,7 +398,7 @@
saved_data_buf = channel_reg(ctrl, c, RW_SAVED_DATA_BUF);
- D(fprintf(logfile, "ch=%d buf=%x after=%x saved_data_buf=%x\n",
+ D(printf("ch=%d buf=%x after=%x saved_data_buf=%x\n",
c,
(uint32_t)ctrl->channels[c].current_d.buf,
(uint32_t)ctrl->channels[c].current_d.after,
@@ -583,6 +583,17 @@
}
static void
+dma_update_state(struct fs_dma_ctrl *ctrl, int c)
+{
+ if ((ctrl->channels[c].regs[RW_CFG] & 1) != 3) {
+ if (ctrl->channels[c].regs[RW_CFG] & 2)
+ ctrl->channels[c].state = STOPPED;
+ if (!(ctrl->channels[c].regs[RW_CFG] & 1))
+ ctrl->channels[c].state = RST;
+ }
+}
+
+static void
dma_writel (void *opaque, target_phys_addr_t addr, uint32_t value)
{
struct fs_dma_ctrl *ctrl = opaque;
@@ -599,9 +610,13 @@
case RW_CFG:
ctrl->channels[c].regs[addr] = value;
+ dma_update_state(ctrl, c);
break;
case RW_CMD:
/* continue. */
+ if (value & ~1)
+ printf("Invalid store to ch=%d RW_CMD %x\n",
+ c, value);
ctrl->channels[c].regs[addr] = value;
channel_continue(ctrl, c);
break;
@@ -622,6 +637,10 @@
break;
case RW_STREAM_CMD:
+ if (value & ~1023)
+ printf("Invalid store to ch=%d "
+ "RW_STREAMCMD %x\n",
+ c, value);
ctrl->channels[c].regs[addr] = value;
D(printf("stream_cmd ch=%d\n", c));
channel_stream_cmd(ctrl, c, value);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Qemu-devel] [5147] ETRAX-FS: Add support for DMA channel resets, needed for recent linux kernels.,
Edgar E. Iglesias <=