[U-Boot] [U-BOOT][PATCH 1/4] mflash : Change MG_BASE define to inline function
unsik Kim
donari75 at gmail.com
Wed Feb 18 11:51:34 CET 2009
Signed-off-by: unsik Kim <donari75 at gmail.com>
---
drivers/block/mg_disk.c | 45 ++++++++++++++++++++++++---------------------
1 files changed, 24 insertions(+), 21 deletions(-)
diff --git a/drivers/block/mg_disk.c b/drivers/block/mg_disk.c
index bbfeeda..26b6a80 100644
--- a/drivers/block/mg_disk.c
+++ b/drivers/block/mg_disk.c
@@ -34,10 +34,13 @@
#define MG_RES_SEC ((CONFIG_MG_DISK_RES) << 1)
-#define MG_BASE (host.drv_data->base)
-
static struct mg_host host;
+static inline u32 mg_base(void)
+{
+ return host.drv_data->base;
+}
+
static block_dev_desc_t mg_disk_dev = {
.if_type = IF_TYPE_ATAPI,
.part_type = PART_TYPE_UNKNOWN,
@@ -122,7 +125,7 @@ static unsigned int mg_wait (u32 expect, u32 msec)
reset_timer();
from = get_timer(0);
- status = readb(MG_BASE + MG_REG_STATUS);
+ status = readb(mg_base() + MG_REG_STATUS);
do {
cur = get_timer(from);
if (status & MG_REG_STATUS_BIT_BUSY) {
@@ -131,7 +134,7 @@ static unsigned int mg_wait (u32 expect, u32 msec)
} else {
/* Check the error condition! */
if (status & MG_REG_STATUS_BIT_ERROR) {
- err = readb(MG_BASE + MG_REG_ERROR);
+ err = readb(mg_base() + MG_REG_ERROR);
mg_dump_status("mg_wait", status, err);
break;
}
@@ -144,7 +147,7 @@ static unsigned int mg_wait (u32 expect, u32 msec)
if (status & MG_REG_STATUS_BIT_DATA_REQ)
break;
}
- status = readb(MG_BASE + MG_REG_STATUS);
+ status = readb(mg_base() + MG_REG_STATUS);
} while (cur < msec);
if (cur >= msec)
@@ -160,15 +163,15 @@ static int mg_get_disk_id (void)
u32 i, err, res;
u16 *buff = (u16 *)iobuf;
- writeb(MG_CMD_ID, MG_BASE + MG_REG_COMMAND);
+ writeb(MG_CMD_ID, mg_base() + MG_REG_COMMAND);
err = mg_wait(MG_REG_STATUS_BIT_DATA_REQ, 3000);
if (err)
return err;
for(i = 0; i < (MG_SECTOR_SIZE / sizeof(u32)) >> 1; i++)
- buff[i] = readw(MG_BASE + MG_BUFF_OFFSET + i * 2);
+ buff[i] = readw(mg_base() + MG_BUFF_OFFSET + i * 2);
- writeb(MG_CMD_RD_CONF, MG_BASE + MG_REG_COMMAND);
+ writeb(MG_CMD_RD_CONF, mg_base() + MG_REG_COMMAND);
err = mg_wait(MG_STAT_READY, 3000);
if (err)
return err;
@@ -235,18 +238,18 @@ static int mg_disk_reset (void)
/* soft reset on */
writeb(MG_REG_CTRL_RESET | MG_REG_CTRL_INTR_DISABLE,
- MG_BASE + MG_REG_DRV_CTRL);
+ mg_base() + MG_REG_DRV_CTRL);
err = mg_wait(MG_REG_STATUS_BIT_BUSY, 3000);
if(err)
return err;
/* soft reset off */
- writeb(MG_REG_CTRL_INTR_DISABLE, MG_BASE + MG_REG_DRV_CTRL);
+ writeb(MG_REG_CTRL_INTR_DISABLE, mg_base() + MG_REG_DRV_CTRL);
err = mg_wait(MG_STAT_READY, 3000);
if(err)
return err;
- init_status = readb(MG_BASE + MG_REG_STATUS) & 0xf;
+ init_status = readb(mg_base() + MG_REG_STATUS) & 0xf;
if (init_status == 0xf)
return MG_ERR_INIT_STAT;
@@ -265,13 +268,13 @@ static unsigned int mg_out(unsigned int sect_num,
if (err)
return err;
- writeb((u8)sect_cnt, MG_BASE + MG_REG_SECT_CNT);
- writeb((u8)sect_num, MG_BASE + MG_REG_SECT_NUM);
- writeb((u8)(sect_num >> 8), MG_BASE + MG_REG_CYL_LOW);
- writeb((u8)(sect_num >> 16), MG_BASE + MG_REG_CYL_HIGH);
+ writeb((u8)sect_cnt, mg_base() + MG_REG_SECT_CNT);
+ writeb((u8)sect_num, mg_base() + MG_REG_SECT_NUM);
+ writeb((u8)(sect_num >> 8), mg_base() + MG_REG_CYL_LOW);
+ writeb((u8)(sect_num >> 16), mg_base() + MG_REG_CYL_HIGH);
writeb((u8)((sect_num >> 24) | MG_REG_HEAD_LBA_MODE),
- MG_BASE + MG_REG_DRV_HEAD);
- writeb(cmd, MG_BASE + MG_REG_COMMAND);
+ mg_base() + MG_REG_DRV_HEAD);
+ writeb(cmd, mg_base() + MG_REG_COMMAND);
return err;
}
@@ -293,11 +296,11 @@ static unsigned int mg_do_read_sects(void *buff, u32 sect_num, u32 sect_cnt)
/* TODO : u16 unaligned case */
for(j = 0; j < MG_SECTOR_SIZE >> 1; j++) {
*(u16 *)buff_ptr =
- readw(MG_BASE + MG_BUFF_OFFSET + (j << 1));
+ readw(mg_base() + MG_BUFF_OFFSET + (j << 1));
buff_ptr += 2;
}
- writeb(MG_CMD_RD_CONF, MG_BASE + MG_REG_COMMAND);
+ writeb(MG_CMD_RD_CONF, mg_base() + MG_REG_COMMAND);
MG_DBG("%u (0x%8.8x) sector read", sect_num + i,
(sect_num + i) * MG_SECTOR_SIZE);
@@ -426,11 +429,11 @@ static int mg_do_write_sects(void *buff, u32 sect_num, u32 sect_cnt)
/* TODO : u16 unaligned case */
for(j = 0; j < MG_SECTOR_SIZE >> 1; j++) {
writew(*(u16 *)buff_ptr,
- MG_BASE + MG_BUFF_OFFSET + (j << 1));
+ mg_base() + MG_BUFF_OFFSET + (j << 1));
buff_ptr += 2;
}
- writeb(MG_CMD_WR_CONF, MG_BASE + MG_REG_COMMAND);
+ writeb(MG_CMD_WR_CONF, mg_base() + MG_REG_COMMAND);
MG_DBG("%u (0x%8.8x) sector write",
sect_num + i, (sect_num + i) * MG_SECTOR_SIZE);
--
1.5.6.6
More information about the U-Boot
mailing list