diff options
author | Terry Lv <r65388@freescale.com> | 2013-06-24 20:28:53 +0800 |
---|---|---|
committer | Terry Lv <r65388@freescale.com> | 2013-06-25 15:08:36 +0800 |
commit | 8b982c4d11737feefe424b97945415015b4e5e38 (patch) | |
tree | 988e26a85669206d35d7450a392b803332a6180c | |
parent | aefb5f72da128d11a3355d47fd0107b86f07ea45 (diff) |
ENGR00258998: mlb unit test should exit after click stop on mitb
This patch will do the following:
1. For mlb will not be able to know whether the final package is
completely sent, add a delay for final package to be sent.
2. Adjust MLB's iram buffer usage. Old code will add addtional usage of
iram buffer.
3. Code format change.
Signed-off-by: Terry Lv <r65388@freescale.com>
-rw-r--r-- | drivers/mxc/mlb/mxc_mlb150.c | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/drivers/mxc/mlb/mxc_mlb150.c b/drivers/mxc/mlb/mxc_mlb150.c index df2382da8b95..f36a6c0f582b 100644 --- a/drivers/mxc/mlb/mxc_mlb150.c +++ b/drivers/mxc/mlb/mxc_mlb150.c @@ -292,8 +292,8 @@ enum CLK_SPEED { }; struct mlb_ringbuf { - s8 *virt_bufs[TRANS_RING_NODES + 1]; - u32 phy_addrs[TRANS_RING_NODES + 1]; + s8 *virt_bufs[TRANS_RING_NODES]; + u32 phy_addrs[TRANS_RING_NODES]; s32 head; s32 tail; s32 unit_size; @@ -1553,6 +1553,11 @@ static s32 mlb150_trans_complete_check(struct mlb_dev_info *pdevinfo) return -ETIME; } + /* Interrupt from TX can only inform that the data is sent + * to AHB bus, not mean that it is sent to MITB. Thus we add + * a delay here for data to be completed sent. */ + udelay(1000); + return 0; } @@ -1917,24 +1922,27 @@ static int mxc_mlb150_open(struct inode *inode, struct file *filp) pr_err("can not alloc rx/tx buffers: %d\n", buf_size); return ret; } + pr_debug("IRAM Range: Virt 0x%x - 0x%x, Phys 0x%x - 0x%x, size: 0x%x\n", + buf_addr, (buf_addr + buf_size - 1), phy_addr, + (phy_addr + buf_size - 1), buf_size); pdevinfo->rbuf_base_virt = buf_addr; pdevinfo->rbuf_base_phy = phy_addr; memset(buf_addr, 0, buf_size); - for (j = 0; j < (TRANS_RING_NODES + 1); + for (j = 0; j < (TRANS_RING_NODES); ++j, buf_addr += ring_buf_size, phy_addr += ring_buf_size) { pdevinfo->rx_rbuf.virt_bufs[j] = buf_addr; pdevinfo->rx_rbuf.phy_addrs[j] = phy_addr; + pr_debug("RX Ringbuf[%d]: 0x%x 0x%x\n", j, buf_addr, phy_addr); } pdevinfo->rx_rbuf.unit_size = ring_buf_size; pdevinfo->rx_rbuf.total_size = buf_size; - buf_addr += ring_buf_size; - phy_addr += ring_buf_size; for (j = 0; j < (TRANS_RING_NODES); ++j, buf_addr += ring_buf_size, phy_addr += ring_buf_size) { pdevinfo->tx_rbuf.virt_bufs[j] = buf_addr; pdevinfo->tx_rbuf.phy_addrs[j] = phy_addr; + pr_debug("TX Ringbuf[%d]: 0x%x 0x%x\n", j, buf_addr, phy_addr); } pdevinfo->tx_rbuf.unit_size = ring_buf_size; @@ -2362,9 +2370,8 @@ static ssize_t mxc_mlb150_write(struct file *filp, const char __user *buf, /* Set ADT for TX */ mlb150_dev_pipo_next(ahb_ch, ctype, adt_sts, tx_buf_ptr); - } else { + } else read_unlock_irqrestore(&tx_rbuf->rb_lock, flags); - } ret = count; out: |