summaryrefslogtreecommitdiff
path: root/drivers/block
diff options
context:
space:
mode:
authorMarek Vasut <marex@denx.de>2012-03-04 15:11:32 +0000
committerWolfgang Denk <wd@denx.de>2012-06-21 20:53:09 +0200
commitb37d41aa24aedd84f718d019e5b7a27a06aa73fc (patch)
treee12a4ccd3275a88b8075e6ef592dd0091b631f03 /drivers/block
parent3648ff2d9d352b175008dd5637c9e8b85b85e844 (diff)
downloadu-boot-imx-b37d41aa24aedd84f718d019e5b7a27a06aa73fc.zip
u-boot-imx-b37d41aa24aedd84f718d019e5b7a27a06aa73fc.tar.gz
u-boot-imx-b37d41aa24aedd84f718d019e5b7a27a06aa73fc.tar.bz2
Block: Remove MG DISK support
This driver is unused and obsolete. Signed-off-by: Marek Vasut <marex@denx.de> Cc: Wolfgang Denk <wd@denx.de> Cc: unsik Kim <donari75@gmail.com>
Diffstat (limited to 'drivers/block')
-rw-r--r--drivers/block/Makefile1
-rw-r--r--drivers/block/mg_disk.c586
-rw-r--r--drivers/block/mg_disk_prv.h144
3 files changed, 0 insertions, 731 deletions
diff --git a/drivers/block/Makefile b/drivers/block/Makefile
index b9c2047..f1ebdcc 100644
--- a/drivers/block/Makefile
+++ b/drivers/block/Makefile
@@ -31,7 +31,6 @@ COBJS-$(CONFIG_DWC_AHSATA) += dwc_ahsata.o
COBJS-$(CONFIG_FSL_SATA) += fsl_sata.o
COBJS-$(CONFIG_IDE_FTIDE020) += ftide020.o
COBJS-$(CONFIG_LIBATA) += libata.o
-COBJS-$(CONFIG_CMD_MG_DISK) += mg_disk.o
COBJS-$(CONFIG_MVSATA_IDE) += mvsata_ide.o
COBJS-$(CONFIG_MX51_PATA) += mxc_ata.o
COBJS-$(CONFIG_PATA_BFIN) += pata_bfin.o
diff --git a/drivers/block/mg_disk.c b/drivers/block/mg_disk.c
deleted file mode 100644
index 4407006..0000000
--- a/drivers/block/mg_disk.c
+++ /dev/null
@@ -1,586 +0,0 @@
-/*
- * (C) Copyright 2009 mGine co.
- * unsik Kim <donari75@gmail.com>
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#include <common.h>
-#include <malloc.h>
-#include <part.h>
-#include <ata.h>
-#include <asm/io.h>
-#include "mg_disk_prv.h"
-
-#ifndef CONFIG_MG_DISK_RES
-#define CONFIG_MG_DISK_RES 0
-#endif
-
-#define MG_RES_SEC ((CONFIG_MG_DISK_RES) << 1)
-
-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,
- .type = DEV_TYPE_HARDDISK,
- .blksz = MG_SECTOR_SIZE,
- .priv = &host };
-
-static void mg_dump_status (const char *msg, unsigned int stat, unsigned err)
-{
- char *name = MG_DEV_NAME;
-
- printf("%s: %s: status=0x%02x { ", name, msg, stat & 0xff);
- if (stat & MG_REG_STATUS_BIT_BUSY)
- printf("Busy ");
- if (stat & MG_REG_STATUS_BIT_READY)
- printf("DriveReady ");
- if (stat & MG_REG_STATUS_BIT_WRITE_FAULT)
- printf("WriteFault ");
- if (stat & MG_REG_STATUS_BIT_SEEK_DONE)
- printf("SeekComplete ");
- if (stat & MG_REG_STATUS_BIT_DATA_REQ)
- printf("DataRequest ");
- if (stat & MG_REG_STATUS_BIT_CORRECTED_ERROR)
- printf("CorrectedError ");
- if (stat & MG_REG_STATUS_BIT_ERROR)
- printf("Error ");
- printf("}\n");
-
- if ((stat & MG_REG_STATUS_BIT_ERROR)) {
- printf("%s: %s: error=0x%02x { ", name, msg, err & 0xff);
- if (err & MG_REG_ERR_BBK)
- printf("BadSector ");
- if (err & MG_REG_ERR_UNC)
- printf("UncorrectableError ");
- if (err & MG_REG_ERR_IDNF)
- printf("SectorIdNotFound ");
- if (err & MG_REG_ERR_ABRT)
- printf("DriveStatusError ");
- if (err & MG_REG_ERR_AMNF)
- printf("AddrMarkNotFound ");
- printf("}\n");
- }
-}
-
-static unsigned int mg_wait (u32 expect, u32 msec)
-{
- u8 status;
- u32 from, cur, err;
-
- err = MG_ERR_NONE;
-#ifdef CONFIG_SYS_LOW_RES_TIMER
- reset_timer();
-#endif
- from = get_timer(0);
-
- status = readb(mg_base() + MG_REG_STATUS);
- do {
- cur = get_timer(from);
- if (status & MG_REG_STATUS_BIT_BUSY) {
- if (expect == MG_REG_STATUS_BIT_BUSY)
- break;
- } else {
- /* Check the error condition! */
- if (status & MG_REG_STATUS_BIT_ERROR) {
- err = readb(mg_base() + MG_REG_ERROR);
- mg_dump_status("mg_wait", status, err);
- break;
- }
-
- if (expect == MG_STAT_READY)
- if (MG_READY_OK(status))
- break;
-
- if (expect == MG_REG_STATUS_BIT_DATA_REQ)
- if (status & MG_REG_STATUS_BIT_DATA_REQ)
- break;
- }
- status = readb(mg_base() + MG_REG_STATUS);
- } while (cur < msec);
-
- if (cur >= msec)
- err = MG_ERR_TIMEOUT;
-
- return err;
-}
-
-static int mg_get_disk_id (void)
-{
- u16 id[(MG_SECTOR_SIZE / sizeof(u16))];
- hd_driveid_t *iop = (hd_driveid_t *)id;
- u32 i, err, res;
-
- 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(u16)); i++)
- id[i] = readw(mg_base() + MG_BUFF_OFFSET + i * 2);
-
- writeb(MG_CMD_RD_CONF, mg_base() + MG_REG_COMMAND);
- err = mg_wait(MG_STAT_READY, 3000);
- if (err)
- return err;
-
- ata_swap_buf_le16(id, MG_SECTOR_SIZE / sizeof(u16));
-
- if((iop->field_valid & 1) == 0)
- return MG_ERR_TRANSLATION;
-
- ata_id_c_string(id, (unsigned char *)mg_disk_dev.revision,
- ATA_ID_FW_REV, sizeof(mg_disk_dev.revision));
- ata_id_c_string(id, (unsigned char *)mg_disk_dev.vendor,
- ATA_ID_PROD, sizeof(mg_disk_dev.vendor));
- ata_id_c_string(id, (unsigned char *)mg_disk_dev.product,
- ATA_ID_SERNO, sizeof(mg_disk_dev.product));
-
-#ifdef __BIG_ENDIAN
- iop->lba_capacity = (iop->lba_capacity << 16) |
- (iop->lba_capacity >> 16);
-#endif /* __BIG_ENDIAN */
-
- if (MG_RES_SEC) {
- MG_DBG("MG_RES_SEC=%d\n", MG_RES_SEC);
- iop->cyls = (iop->lba_capacity - MG_RES_SEC) /
- iop->sectors / iop->heads;
- res = iop->lba_capacity -
- iop->cyls * iop->heads * iop->sectors;
- iop->lba_capacity -= res;
- printf("mg_disk: %d sectors reserved\n", res);
- }
-
- mg_disk_dev.lba = iop->lba_capacity;
- return MG_ERR_NONE;
-}
-
-static int mg_disk_reset (void)
-{
- struct mg_drv_data *prv_data = host.drv_data;
- s32 err;
- u8 init_status;
-
- /* hdd rst low */
- prv_data->mg_hdrst_pin(0);
- err = mg_wait(MG_REG_STATUS_BIT_BUSY, 300);
- if(err)
- return err;
-
- /* hdd rst high */
- prv_data->mg_hdrst_pin(1);
- err = mg_wait(MG_STAT_READY, 3000);
- if(err)
- return err;
-
- /* soft reset on */
- writeb(MG_REG_CTRL_RESET | MG_REG_CTRL_INTR_DISABLE,
- 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);
- err = mg_wait(MG_STAT_READY, 3000);
- if(err)
- return err;
-
- init_status = readb(mg_base() + MG_REG_STATUS) & 0xf;
-
- if (init_status == 0xf)
- return MG_ERR_INIT_STAT;
-
- return err;
-}
-
-
-static unsigned int mg_out(unsigned int sect_num,
- unsigned int sect_cnt,
- unsigned int cmd)
-{
- u32 err = MG_ERR_NONE;
-
- err = mg_wait(MG_STAT_READY, 3000);
- 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_num >> 24) | MG_REG_HEAD_LBA_MODE),
- mg_base() + MG_REG_DRV_HEAD);
- writeb(cmd, mg_base() + MG_REG_COMMAND);
-
- return err;
-}
-
-static unsigned int mg_do_read_sects(void *buff, u32 sect_num, u32 sect_cnt)
-{
- u32 i, j, err;
- u8 *buff_ptr = buff;
- union mg_uniwb uniwb;
-
- err = mg_out(sect_num, sect_cnt, MG_CMD_RD);
- if (err)
- return err;
-
- for (i = 0; i < sect_cnt; i++) {
- err = mg_wait(MG_REG_STATUS_BIT_DATA_REQ, 3000);
- if (err)
- return err;
-
- if ((u32)buff_ptr & 1) {
- for (j = 0; j < MG_SECTOR_SIZE >> 1; j++) {
- uniwb.w = readw(mg_base() + MG_BUFF_OFFSET
- + (j << 1));
- *buff_ptr++ = uniwb.b[0];
- *buff_ptr++ = uniwb.b[1];
- }
- } else {
- for(j = 0; j < MG_SECTOR_SIZE >> 1; j++) {
- *(u16 *)buff_ptr = readw(mg_base() +
- MG_BUFF_OFFSET + (j << 1));
- buff_ptr += 2;
- }
- }
- 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);
- }
-
- return err;
-}
-
-unsigned int mg_disk_read_sects(void *buff, u32 sect_num, u32 sect_cnt)
-{
- u32 quotient, residue, i, err;
- u8 *buff_ptr = buff;
-
- quotient = sect_cnt >> 8;
- residue = sect_cnt % 256;
-
- for (i = 0; i < quotient; i++) {
- MG_DBG("sect num : %u buff : 0x%8.8x", sect_num, (u32)buff_ptr);
- err = mg_do_read_sects(buff_ptr, sect_num, 256);
- if (err)
- return err;
- sect_num += 256;
- buff_ptr += 256 * MG_SECTOR_SIZE;
- }
-
- if (residue) {
- MG_DBG("sect num : %u buff : %8.8x", sect_num, (u32)buff_ptr);
- err = mg_do_read_sects(buff_ptr, sect_num, residue);
- }
-
- return err;
-}
-
-unsigned long mg_block_read (int dev, unsigned long start,
- lbaint_t blkcnt, void *buffer)
-{
- start += MG_RES_SEC;
- if (! mg_disk_read_sects(buffer, start, blkcnt))
- return blkcnt;
- else
- return 0;
-}
-
-unsigned int mg_disk_read (u32 addr, u8 *buff, u32 len)
-{
- u8 *sect_buff, *buff_ptr = buff;
- u32 cur_addr, next_sec_addr, end_addr, cnt, sect_num;
- u32 err = MG_ERR_NONE;
-
- /* TODO : sanity chk */
- cnt = 0;
- cur_addr = addr;
- end_addr = addr + len;
-
- sect_buff = malloc(MG_SECTOR_SIZE);
-
- if (cur_addr & MG_SECTOR_SIZE_MASK) {
- next_sec_addr = (cur_addr + MG_SECTOR_SIZE) &
- ~MG_SECTOR_SIZE_MASK;
- sect_num = cur_addr >> MG_SECTOR_SIZE_SHIFT;
- err = mg_disk_read_sects(sect_buff, sect_num, 1);
- if (err)
- goto mg_read_exit;
-
- if (end_addr < next_sec_addr) {
- memcpy(buff_ptr,
- sect_buff + (cur_addr & MG_SECTOR_SIZE_MASK),
- end_addr - cur_addr);
- MG_DBG("copies %u byte from sector offset 0x%8.8x",
- end_addr - cur_addr, cur_addr);
- cur_addr = end_addr;
- } else {
- memcpy(buff_ptr,
- sect_buff + (cur_addr & MG_SECTOR_SIZE_MASK),
- next_sec_addr - cur_addr);
- MG_DBG("copies %u byte from sector offset 0x%8.8x",
- next_sec_addr - cur_addr, cur_addr);
- buff_ptr += (next_sec_addr - cur_addr);
- cur_addr = next_sec_addr;
- }
- }
-
- if (cur_addr < end_addr) {
- sect_num = cur_addr >> MG_SECTOR_SIZE_SHIFT;
- cnt = ((end_addr & ~MG_SECTOR_SIZE_MASK) - cur_addr) >>
- MG_SECTOR_SIZE_SHIFT;
-
- if (cnt)
- err = mg_disk_read_sects(buff_ptr, sect_num, cnt);
- if (err)
- goto mg_read_exit;
-
- buff_ptr += cnt * MG_SECTOR_SIZE;
- cur_addr += cnt * MG_SECTOR_SIZE;
-
- if (cur_addr < end_addr) {
- sect_num = cur_addr >> MG_SECTOR_SIZE_SHIFT;
- err = mg_disk_read_sects(sect_buff, sect_num, 1);
- if (err)
- goto mg_read_exit;
- memcpy(buff_ptr, sect_buff, end_addr - cur_addr);
- MG_DBG("copies %u byte", end_addr - cur_addr);
- }
- }
-
-mg_read_exit:
- free(sect_buff);
-
- return err;
-}
-static int mg_do_write_sects(void *buff, u32 sect_num, u32 sect_cnt)
-{
- u32 i, j, err;
- u8 *buff_ptr = buff;
- union mg_uniwb uniwb;
-
- err = mg_out(sect_num, sect_cnt, MG_CMD_WR);
- if (err)
- return err;
-
- for (i = 0; i < sect_cnt; i++) {
- err = mg_wait(MG_REG_STATUS_BIT_DATA_REQ, 3000);
- if (err)
- return err;
-
- if ((u32)buff_ptr & 1) {
- uniwb.b[0] = *buff_ptr++;
- uniwb.b[1] = *buff_ptr++;
- writew(uniwb.w, mg_base() + MG_BUFF_OFFSET + (j << 1));
- } else {
- for(j = 0; j < MG_SECTOR_SIZE >> 1; j++) {
- writew(*(u16 *)buff_ptr,
- mg_base() + MG_BUFF_OFFSET +
- (j << 1));
- buff_ptr += 2;
- }
- }
- 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);
- }
-
- return err;
-}
-
-unsigned int mg_disk_write_sects(void *buff, u32 sect_num, u32 sect_cnt)
-{
- u32 quotient, residue, i;
- u32 err = MG_ERR_NONE;
- u8 *buff_ptr = buff;
-
- quotient = sect_cnt >> 8;
- residue = sect_cnt % 256;
-
- for (i = 0; i < quotient; i++) {
- MG_DBG("sect num : %u buff : %8.8x", sect_num, (u32)buff_ptr);
- err = mg_do_write_sects(buff_ptr, sect_num, 256);
- if (err)
- return err;
- sect_num += 256;
- buff_ptr += 256 * MG_SECTOR_SIZE;
- }
-
- if (residue) {
- MG_DBG("sect num : %u buff : %8.8x", sect_num, (u32)buff_ptr);
- err = mg_do_write_sects(buff_ptr, sect_num, residue);
- }
-
- return err;
-}
-
-unsigned long mg_block_write (int dev, unsigned long start,
- lbaint_t blkcnt, const void *buffer)
-{
- start += MG_RES_SEC;
- if (!mg_disk_write_sects((void *)buffer, start, blkcnt))
- return blkcnt;
- else
- return 0;
-}
-
-unsigned int mg_disk_write(u32 addr, u8 *buff, u32 len)
-{
- u8 *sect_buff, *buff_ptr = buff;
- u32 cur_addr, next_sec_addr, end_addr, cnt, sect_num;
- u32 err = MG_ERR_NONE;
-
- /* TODO : sanity chk */
- cnt = 0;
- cur_addr = addr;
- end_addr = addr + len;
-
- sect_buff = malloc(MG_SECTOR_SIZE);
-
- if (cur_addr & MG_SECTOR_SIZE_MASK) {
-
- next_sec_addr = (cur_addr + MG_SECTOR_SIZE) &
- ~MG_SECTOR_SIZE_MASK;
- sect_num = cur_addr >> MG_SECTOR_SIZE_SHIFT;
- err = mg_disk_read_sects(sect_buff, sect_num, 1);
- if (err)
- goto mg_write_exit;
-
- if (end_addr < next_sec_addr) {
- memcpy(sect_buff + (cur_addr & MG_SECTOR_SIZE_MASK),
- buff_ptr, end_addr - cur_addr);
- MG_DBG("copies %u byte to sector offset 0x%8.8x",
- end_addr - cur_addr, cur_addr);
- cur_addr = end_addr;
- } else {
- memcpy(sect_buff + (cur_addr & MG_SECTOR_SIZE_MASK),
- buff_ptr, next_sec_addr - cur_addr);
- MG_DBG("copies %u byte to sector offset 0x%8.8x",
- next_sec_addr - cur_addr, cur_addr);
- buff_ptr += (next_sec_addr - cur_addr);
- cur_addr = next_sec_addr;
- }
-
- err = mg_disk_write_sects(sect_buff, sect_num, 1);
- if (err)
- goto mg_write_exit;
- }
-
- if (cur_addr < end_addr) {
-
- sect_num = cur_addr >> MG_SECTOR_SIZE_SHIFT;
- cnt = ((end_addr & ~MG_SECTOR_SIZE_MASK) - cur_addr) >>
- MG_SECTOR_SIZE_SHIFT;
-
- if (cnt)
- err = mg_disk_write_sects(buff_ptr, sect_num, cnt);
- if (err)
- goto mg_write_exit;
-
- buff_ptr += cnt * MG_SECTOR_SIZE;
- cur_addr += cnt * MG_SECTOR_SIZE;
-
- if (cur_addr < end_addr) {
- sect_num = cur_addr >> MG_SECTOR_SIZE_SHIFT;
- err = mg_disk_read_sects(sect_buff, sect_num, 1);
- if (err)
- goto mg_write_exit;
- memcpy(sect_buff, buff_ptr, end_addr - cur_addr);
- MG_DBG("copies %u byte", end_addr - cur_addr);
- err = mg_disk_write_sects(sect_buff, sect_num, 1);
- }
-
- }
-
-mg_write_exit:
- free(sect_buff);
-
- return err;
-}
-
-#ifdef CONFIG_PARTITIONS
-block_dev_desc_t *mg_disk_get_dev(int dev)
-{
- return ((block_dev_desc_t *) & mg_disk_dev);
-}
-#endif
-
-/* must override this function */
-struct mg_drv_data * __attribute__((weak)) mg_get_drv_data (void)
-{
- puts ("### WARNING ### port mg_get_drv_data function\n");
- return NULL;
-}
-
-unsigned int mg_disk_init (void)
-{
- struct mg_drv_data *prv_data;
- u32 err = MG_ERR_NONE;
-
- prv_data = mg_get_drv_data();
- if (! prv_data) {
- printf("%s:%d fail (no driver_data)\n", __func__, __LINE__);
- err = MG_ERR_NO_DRV_DATA;
- return err;
- }
-
- ((struct mg_host *)mg_disk_dev.priv)->drv_data = prv_data;
-
- /* init ctrl pin */
- if (prv_data->mg_ctrl_pin_init)
- prv_data->mg_ctrl_pin_init();
-
- if (! prv_data->mg_hdrst_pin) {
- err = MG_ERR_CTRL_RST;
- return err;
- }
-
- /* disk reset */
- err = mg_disk_reset();
- if (err) {
- printf("%s:%d fail (err code : %d)\n", __func__, __LINE__, err);
- return err;
- }
-
- /* get disk id */
- err = mg_get_disk_id();
- if (err) {
- printf("%s:%d fail (err code : %d)\n", __func__, __LINE__, err);
- return err;
- }
-
- mg_disk_dev.block_read = mg_block_read;
- mg_disk_dev.block_write = mg_block_write;
-
- init_part(&mg_disk_dev);
-
- dev_print(&mg_disk_dev);
-
- return err;
-}
diff --git a/drivers/block/mg_disk_prv.h b/drivers/block/mg_disk_prv.h
deleted file mode 100644
index 43e90ea..0000000
--- a/drivers/block/mg_disk_prv.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * (C) Copyright 2009 mGine co.
- * unsik Kim <donari75@gmail.com>
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#ifndef __MG_DISK_PRV_H__
-#define __MG_DISK_PRV_H__
-
-#include <mg_disk.h>
-
-/* name for block device */
-#define MG_DISK_NAME "mgd"
-/* name for platform device */
-#define MG_DEV_NAME "mg_disk"
-
-#define MG_DISK_MAJ 240
-#define MG_DISK_MAX_PART 16
-#define MG_SECTOR_SIZE 512
-#define MG_SECTOR_SIZE_MASK (512 - 1)
-#define MG_SECTOR_SIZE_SHIFT (9)
-#define MG_MAX_SECTS 256
-
-/* Register offsets */
-#define MG_BUFF_OFFSET 0x8000
-#define MG_STORAGE_BUFFER_SIZE 0x200
-#define MG_REG_OFFSET 0xC000
-#define MG_REG_FEATURE (MG_REG_OFFSET + 2) /* write case */
-#define MG_REG_ERROR (MG_REG_OFFSET + 2) /* read case */
-#define MG_REG_SECT_CNT (MG_REG_OFFSET + 4)
-#define MG_REG_SECT_NUM (MG_REG_OFFSET + 6)
-#define MG_REG_CYL_LOW (MG_REG_OFFSET + 8)
-#define MG_REG_CYL_HIGH (MG_REG_OFFSET + 0xA)
-#define MG_REG_DRV_HEAD (MG_REG_OFFSET + 0xC)
-#define MG_REG_COMMAND (MG_REG_OFFSET + 0xE) /* write case */
-#define MG_REG_STATUS (MG_REG_OFFSET + 0xE) /* read case */
-#define MG_REG_DRV_CTRL (MG_REG_OFFSET + 0x10)
-#define MG_REG_BURST_CTRL (MG_REG_OFFSET + 0x12)
-
-/* "Drive Select/Head Register" bit values */
-#define MG_REG_HEAD_MUST_BE_ON 0xA0 /* These 2 bits are always on */
-#define MG_REG_HEAD_DRIVE_MASTER (0x00 | MG_REG_HEAD_MUST_BE_ON)
-#define MG_REG_HEAD_DRIVE_SLAVE (0x10 | MG_REG_HEAD_MUST_BE_ON)
-#define MG_REG_HEAD_LBA_MODE (0x40 | MG_REG_HEAD_MUST_BE_ON)
-
-
-/* "Device Control Register" bit values */
-#define MG_REG_CTRL_INTR_ENABLE 0x0
-#define MG_REG_CTRL_INTR_DISABLE (0x1 << 1)
-#define MG_REG_CTRL_RESET (0x1 << 2)
-#define MG_REG_CTRL_INTR_POLA_ACTIVE_HIGH 0x0
-#define MG_REG_CTRL_INTR_POLA_ACTIVE_LOW (0x1 << 4)
-#define MG_REG_CTRL_DPD_POLA_ACTIVE_LOW 0x0
-#define MG_REG_CTRL_DPD_POLA_ACTIVE_HIGH (0x1 << 5)
-#define MG_REG_CTRL_DPD_DISABLE 0x0
-#define MG_REG_CTRL_DPD_ENABLE (0x1 << 6)
-
-/* Status register bit */
- /* error bit in status register */
-#define MG_REG_STATUS_BIT_ERROR 0x01
- /* corrected error in status register */
-#define MG_REG_STATUS_BIT_CORRECTED_ERROR 0x04
- /* data request bit in status register */
-#define MG_REG_STATUS_BIT_DATA_REQ 0x08
- /* DSC - Drive Seek Complete */
-#define MG_REG_STATUS_BIT_SEEK_DONE 0x10
- /* DWF - Drive Write Fault */
-#define MG_REG_STATUS_BIT_WRITE_FAULT 0x20
-#define MG_REG_STATUS_BIT_READY 0x40
-#define MG_REG_STATUS_BIT_BUSY 0x80
-
-/* handy status */
-#define MG_STAT_READY (MG_REG_STATUS_BIT_READY | MG_REG_STATUS_BIT_SEEK_DONE)
-#define MG_READY_OK(s) (((s) & (MG_STAT_READY | \
- (MG_REG_STATUS_BIT_BUSY | \
- MG_REG_STATUS_BIT_WRITE_FAULT | \
- MG_REG_STATUS_BIT_ERROR))) == MG_STAT_READY)
-
-/* Error register */
-#define MG_REG_ERR_AMNF 0x01
-#define MG_REG_ERR_ABRT 0x04
-#define MG_REG_ERR_IDNF 0x10
-#define MG_REG_ERR_UNC 0x40
-#define MG_REG_ERR_BBK 0x80
-
-/* error code for others */
-#define MG_ERR_NONE 0
-#define MG_ERR_TIMEOUT 0x100
-#define MG_ERR_INIT_STAT 0x101
-#define MG_ERR_TRANSLATION 0x102
-#define MG_ERR_CTRL_RST 0x103
-#define MG_ERR_NO_DRV_DATA 0x104
-
-#define MG_MAX_ERRORS 16 /* Max read/write errors/sector */
-#define MG_RESET_FREQ 4 /* Reset controller every 4th retry */
-
-/* command */
-#define MG_CMD_RD 0x20
-#define MG_CMD_WR 0x30
-#define MG_CMD_SLEEP 0x99
-#define MG_CMD_WAKEUP 0xC3
-#define MG_CMD_ID 0xEC
-#define MG_CMD_WR_CONF 0x3C
-#define MG_CMD_RD_CONF 0x40
-
-union mg_uniwb{
- u16 w;
- u8 b[2];
-};
-
-/* main structure for mflash driver */
-struct mg_host {
- struct mg_drv_data *drv_data;
- /* for future use */
-};
-
-/*
- * Debugging macro and defines
- */
-#undef DO_MG_DEBUG
-#ifdef DO_MG_DEBUG
-# define MG_DBG(fmt, args...) printf("%s:%d "fmt"\n", __func__, __LINE__,##args)
-#else /* CONFIG_MG_DEBUG */
-# define MG_DBG(fmt, args...) do { } while(0)
-#endif /* CONFIG_MG_DEBUG */
-
-#endif