mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2025-04-21 12:27:27 +03:00
remove useless functions in jz_mmc.c:
mmc_block_write, mmc_write, mmc_ident, mmc2info remove auto-generate file: board/xburst/nanonote/config.tmp cleanup the mmc_bread function: since we always read block, no aligned problem. Signed-off-by: Xiangfu Liu <xiangfu@sharism.cc>
This commit is contained in:
@@ -1 +0,0 @@
|
|||||||
TEXT_BASE = 0x80100000
|
|
||||||
@@ -29,10 +29,25 @@
|
|||||||
#include <asm/jz4740.h>
|
#include <asm/jz4740.h>
|
||||||
#include "jz_mmc.h"
|
#include "jz_mmc.h"
|
||||||
|
|
||||||
#define debug(...) ;
|
|
||||||
|
|
||||||
#define CFG_MMC_BASE 0x80600000
|
#define CFG_MMC_BASE 0x80600000
|
||||||
static int sd2_0 = 0;
|
static int sd2_0 = 0;
|
||||||
|
static uchar mmc_buf[1024];
|
||||||
|
static int mmc_ready = 0;
|
||||||
|
static int use_4bit; /* Use 4-bit data bus */
|
||||||
|
/*
|
||||||
|
* MMC Events
|
||||||
|
*/
|
||||||
|
#define MMC_EVENT_NONE 0x00 /* No events */
|
||||||
|
#define MMC_EVENT_RX_DATA_DONE 0x01 /* Rx data done */
|
||||||
|
#define MMC_EVENT_TX_DATA_DONE 0x02 /* Tx data done */
|
||||||
|
#define MMC_EVENT_PROG_DONE 0x04 /* Programming is done */
|
||||||
|
|
||||||
|
|
||||||
|
#define MMC_IRQ_MASK() \
|
||||||
|
do { \
|
||||||
|
REG_MSC_IMASK = 0xffff; \
|
||||||
|
REG_MSC_IREG = 0xffff; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* GPIO definition
|
* GPIO definition
|
||||||
@@ -77,7 +92,6 @@ do { \
|
|||||||
* Local functions
|
* Local functions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef CONFIG_MMC
|
|
||||||
extern int
|
extern int
|
||||||
fat_register_device(block_dev_desc_t *dev_desc, int part_no);
|
fat_register_device(block_dev_desc_t *dev_desc, int part_no);
|
||||||
|
|
||||||
@@ -88,28 +102,6 @@ block_dev_desc_t * mmc_get_dev(int dev)
|
|||||||
return ((block_dev_desc_t *)&mmc_dev);
|
return ((block_dev_desc_t *)&mmc_dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* FIXME needs to read cid and csd info to determine block size
|
|
||||||
* and other parameters
|
|
||||||
*/
|
|
||||||
static uchar mmc_buf[1024];
|
|
||||||
static int mmc_ready = 0;
|
|
||||||
static int use_4bit; /* Use 4-bit data bus */
|
|
||||||
/*
|
|
||||||
* MMC Events
|
|
||||||
*/
|
|
||||||
#define MMC_EVENT_NONE 0x00 /* No events */
|
|
||||||
#define MMC_EVENT_RX_DATA_DONE 0x01 /* Rx data done */
|
|
||||||
#define MMC_EVENT_TX_DATA_DONE 0x02 /* Tx data done */
|
|
||||||
#define MMC_EVENT_PROG_DONE 0x04 /* Programming is done */
|
|
||||||
|
|
||||||
|
|
||||||
#define MMC_IRQ_MASK() \
|
|
||||||
do { \
|
|
||||||
REG_MSC_IMASK = 0xffff; \
|
|
||||||
REG_MSC_IREG = 0xffff; \
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
/* Stop the MMC clock and wait while it happens */
|
/* Stop the MMC clock and wait while it happens */
|
||||||
static inline int jz_mmc_stop_clock(void)
|
static inline int jz_mmc_stop_clock(void)
|
||||||
{
|
{
|
||||||
@@ -565,165 +557,40 @@ int mmc_block_read(u8 *dst, ulong src, ulong len)
|
|||||||
goto exit;
|
goto exit;
|
||||||
|
|
||||||
mmc_simple_cmd(&request, MMC_CMD_SET_BLOCKLEN, len, RESPONSE_R1);
|
mmc_simple_cmd(&request, MMC_CMD_SET_BLOCKLEN, len, RESPONSE_R1);
|
||||||
if ((retval = mmc_unpack_r1(&request, &r1, 0)))
|
if (retval = mmc_unpack_r1(&request, &r1, 0))
|
||||||
goto exit;
|
goto exit;
|
||||||
|
|
||||||
if (sd2_0)
|
if (sd2_0)
|
||||||
src /= len;
|
src /= len;
|
||||||
|
|
||||||
mmc_send_cmd(&request, MMC_CMD_READ_SINGLE_BLOCK, src, 1,len, RESPONSE_R1, dst);
|
mmc_send_cmd(&request, MMC_CMD_READ_SINGLE_BLOCK, src, 1, len, RESPONSE_R1, dst);
|
||||||
if ((retval = mmc_unpack_r1(&request, &r1, 0)))
|
if (retval = mmc_unpack_r1(&request, &r1, 0))
|
||||||
goto exit;
|
goto exit;
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
int mmc_block_write(ulong dst, uchar *src, int len)
|
ulong mmc_bread(int dev_num, ulong blkstart, ulong blkcnt, ulong *dst)
|
||||||
{
|
{
|
||||||
return 0;
|
if (!mmc_ready) {
|
||||||
}
|
printf("Please initial the MMC first\n");
|
||||||
|
return -1;
|
||||||
int xburst_mmc_read(u64 src, uchar *dst, int size)
|
}
|
||||||
{
|
|
||||||
ulong end, part_start, part_end, part_len, aligned_start, aligned_end;
|
|
||||||
ulong mmc_block_size, mmc_block_address;
|
|
||||||
|
|
||||||
if (size == 0) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!mmc_ready) {
|
|
||||||
printf("Please initial the MMC first\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
debug("---- start %s ---- \n", __func__);
|
|
||||||
|
|
||||||
mmc_block_size = mmcinfo.block_len;
|
|
||||||
mmc_block_address = ~(mmc_block_size - 1);
|
|
||||||
|
|
||||||
end = src + size;
|
|
||||||
part_start = ~mmc_block_address & src;
|
|
||||||
part_end = ~mmc_block_address & end;
|
|
||||||
aligned_start = mmc_block_address & src;
|
|
||||||
aligned_end = mmc_block_address & end;
|
|
||||||
/* all block aligned accesses */
|
|
||||||
debug("src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
|
|
||||||
src, (ulong)dst, end, part_start, part_end, aligned_start,
|
|
||||||
aligned_end);
|
|
||||||
|
|
||||||
if (part_start) {
|
|
||||||
part_len = mmc_block_size - part_start;
|
|
||||||
debug("ps src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
|
|
||||||
src, (ulong) dst, end, part_start, part_end, aligned_start,
|
|
||||||
aligned_end);
|
|
||||||
|
|
||||||
if ((mmc_block_read(mmc_buf, aligned_start, mmc_block_size)) < 0) {
|
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
ulong src = blkstart * mmcinfo.block_len;
|
||||||
|
ulong dst_tmp = dst;
|
||||||
|
|
||||||
|
for (i = 0; i < blkcnt; i++) {
|
||||||
|
if ((mmc_block_read((uchar *)(dst_tmp), src, mmcinfo.block_len)) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
|
||||||
memcpy(dst, mmc_buf + part_start, part_len);
|
dst_tmp += mmcinfo.block_len;
|
||||||
dst += part_len;
|
src += mmcinfo.block_len;
|
||||||
src += part_len;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (; src < aligned_end; src += mmc_block_size, dst += mmc_block_size) {
|
return i;
|
||||||
debug("src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
|
|
||||||
src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
|
|
||||||
|
|
||||||
if ((mmc_block_read((uchar *)(dst), src, mmc_block_size)) < 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
debug("src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
|
|
||||||
src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
|
|
||||||
|
|
||||||
if (part_end && src < end) {
|
|
||||||
if ((mmc_block_read(mmc_buf, aligned_end, mmc_block_size)) < 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
memcpy(dst, mmc_buf, part_end);
|
|
||||||
}
|
|
||||||
|
|
||||||
debug("---- end %s ---- \n", __func__);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int mmc_write(uchar *src, ulong dst, int size)
|
|
||||||
{
|
|
||||||
ulong end, part_start, part_end, part_len, aligned_start, aligned_end;
|
|
||||||
ulong mmc_block_size, mmc_block_address;
|
|
||||||
|
|
||||||
if (size == 0) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!mmc_ready) {
|
|
||||||
printf("MMC card is not ready\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
mmc_block_size = mmcinfo.block_len;
|
|
||||||
mmc_block_address = ~(mmc_block_size - 1);
|
|
||||||
|
|
||||||
dst -= CFG_MMC_BASE;
|
|
||||||
end = dst + size;
|
|
||||||
part_start = ~mmc_block_address & dst;
|
|
||||||
part_end = ~mmc_block_address & end;
|
|
||||||
aligned_start = mmc_block_address & dst;
|
|
||||||
aligned_end = mmc_block_address & end;
|
|
||||||
|
|
||||||
/* all block aligned accesses */
|
|
||||||
debug("src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
|
|
||||||
src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
|
|
||||||
if (part_start) {
|
|
||||||
part_len = mmc_block_size - part_start;
|
|
||||||
debug("ps src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
|
|
||||||
(ulong)src, dst, end, part_start, part_end, aligned_start, aligned_end);
|
|
||||||
if ((mmc_block_read(mmc_buf, aligned_start, mmc_block_size)) < 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
memcpy(mmc_buf+part_start, src, part_len);
|
|
||||||
if ((mmc_block_write(aligned_start, mmc_buf, mmc_block_size)) < 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
dst += part_len;
|
|
||||||
src += part_len;
|
|
||||||
}
|
|
||||||
debug("src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
|
|
||||||
src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
|
|
||||||
for (; dst < aligned_end; src += mmc_block_size, dst += mmc_block_size) {
|
|
||||||
debug("al src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
|
|
||||||
src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
|
|
||||||
if ((mmc_block_write(dst, (uchar *)src, mmc_block_size)) < 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
debug("src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
|
|
||||||
src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
|
|
||||||
if (part_end && dst < end) {
|
|
||||||
debug("pe src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
|
|
||||||
src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
|
|
||||||
if ((mmc_block_read(mmc_buf, aligned_end, mmc_block_size)) < 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
memcpy(mmc_buf, src, part_end);
|
|
||||||
if ((mmc_block_write(aligned_end, mmc_buf, mmc_block_size)) < 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
ulong mmc_bread(int dev_num, ulong blknr, ulong blkcnt, ulong *dst)
|
|
||||||
{
|
|
||||||
int mmc_block_size = mmcinfo.block_len;
|
|
||||||
ulong src = blknr * mmc_block_size ;//+ CFG_MMC_BASE;
|
|
||||||
|
|
||||||
xburst_mmc_read(src, (uchar *)dst, blkcnt*mmc_block_size);
|
|
||||||
return blkcnt;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int mmc_select_card(void)
|
int mmc_select_card(void)
|
||||||
@@ -1008,23 +875,9 @@ int mmc_legacy_init(int verbose)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int mmc_ident(block_dev_desc_t *dev)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int mmc2info(ulong addr)
|
|
||||||
{
|
|
||||||
/* FIXME hard codes to 32 MB device */
|
|
||||||
if (addr >= CFG_MMC_BASE && addr < CFG_MMC_BASE + 0x02000000) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
return 0;;
|
|
||||||
}
|
|
||||||
/*
|
/*
|
||||||
* Debugging functions
|
* Debugging functions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static char * mmc_result_strings[] = {
|
static char * mmc_result_strings[] = {
|
||||||
"NO_RESPONSE",
|
"NO_RESPONSE",
|
||||||
"NO_ERROR",
|
"NO_ERROR",
|
||||||
@@ -1326,5 +1179,3 @@ void mmc_send_cmd(struct mmc_request *request, int cmd, u32 arg,
|
|||||||
|
|
||||||
jz_mmc_exec_cmd(request);
|
jz_mmc_exec_cmd(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* CONFIG_MMC */
|
|
||||||
|
|||||||
@@ -13,7 +13,6 @@
|
|||||||
#ifndef __MMC_JZMMC_H__
|
#ifndef __MMC_JZMMC_H__
|
||||||
#define __MMC_JZMMC_H__
|
#define __MMC_JZMMC_H__
|
||||||
|
|
||||||
#define MMC_DEBUG_LEVEL 0 /* Enable Debug: 0 - no debug */
|
|
||||||
#define ID_TO_RCA(x) ((x)+1)
|
#define ID_TO_RCA(x) ((x)+1)
|
||||||
#define MMC_OCR_ARG 0x00ff8000 /* Argument of OCR */
|
#define MMC_OCR_ARG 0x00ff8000 /* Argument of OCR */
|
||||||
|
|
||||||
@@ -174,6 +173,4 @@ static inline void mmc_simple_cmd(struct mmc_request *request, int cmd, u32 arg,
|
|||||||
mmc_send_cmd( request, cmd, arg, 0, 0, rtype, 0);
|
mmc_send_cmd( request, cmd, arg, 0, 0, rtype, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int mmc2info(ulong addr);
|
|
||||||
|
|
||||||
#endif /* __MMC_JZMMC_H__ */
|
#endif /* __MMC_JZMMC_H__ */
|
||||||
|
|||||||
Reference in New Issue
Block a user