提交 24c1d66a 编写于 作者: F fengsheng 提交者: Xie XiuQi

sfc: optimize erase and write time

driver inclusion
category: feature
bugzilla: NA
CVE: NA

optimize erase and write time
Signed-off-by: NFeng Sheng <fengsheng5@huawei.com>
Reviewed-by: Lin Siwei <linsiwei@huawei.com>a
Reviewed-by: NYang Yingliang <yangyingliang@huawei.com>
Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
上级 32c67b0e
......@@ -39,44 +39,42 @@
#define HRD_COMMON_ERR_NOT_ENOUGH_RES (int)(HRD_COMMON_ERR_BASE - 12)
#define HRD_COMMON_ERR_RES_NOT_EXIST (int)(HRD_COMMON_ERR_BASE - 13)
/* Swap tool */
/* 16bit nibble swap. For example 0x1234 -> 0x2143 */
/* 16 bit nibble swap. example 0x1234 -> 0x2143 */
#define HRD_NIBBLE_SWAP_16BIT(X) (((X&0xf) << 4) | \
((X&0xf0) >> 4) | \
((X&0xf00) << 4) | \
((X&0xf000) >> 4))
/* 32bit nibble swap. For example 0x12345678 -> 0x21436587 */
#define HRD_NIBBLE_SWAP_32BIT(X) (((X&0xf) << 4) | \
((X&0xf0) >> 4) | \
((X&0xf00) << 4) | \
((X&0xf000) >> 4) | \
((X&0xf0000) << 4) | \
((X&0xf00000) >> 4) | \
((X&0xf000000) << 4) | \
((X&0xf0000000) >> 4))
/* 16bit byte swap. For example 0x1234->0x3412 */
#define HRD_BYTE_SWAP_16BIT(X) ((((X)&0xff)<<8) | (((X)&0xff00)>>8))
/* 32bit byte swap. For example 0x12345678->0x78563412 */
#define HRD_BYTE_SWAP_32BIT(X) ((((X)&0xff)<<24) | \
(((X)&0xff00)<<8) | \
(((X)&0xff0000)>>8) | \
(((X)&0xff000000)>>24))
/* 64bit byte swap. For example 0x11223344.55667788 -> 0x88776655.44332211 */
#define HRD_BYTE_SWAP_64BIT(X) ((l64) ((((X)&0xffULL)<<56) | \
(((X)&0xff00ULL)<<40) | \
(((X)&0xff0000ULL)<<24) | \
(((X)&0xff000000ULL)<<8) | \
(((X)&0xff00000000ULL)>>8) | \
(((X)&0xff0000000000ULL)>>24) | \
(((X)&0xff000000000000ULL)>>40) | \
(((X)&0xff00000000000000ULL)>>56)))
/* Endianess macros. */
((X&0xF0) >> 4) | \
((X&0xF00) << 4) | \
((X&0xF000) >> 4))
/*32 bit nibble swap. example 0x12345678 -> 0x21436587 */
#define HRD_NIBBLE_SWAP_32BIT(X) (((X&0xF) << 4) | \
((X&0xF0) >> 4) | \
((X&0xF00) << 4) | \
((X&0xF000) >> 4) | \
((X&0xF0000) << 4) | \
((X&0xF00000) >> 4) | \
((X&0xF000000) << 4) | \
((X&0xF0000000) >> 4))
/* 16 bit byte swap. example 0x1234->0x3412 */
#define HRD_BYTE_SWAP_16BIT(X) ((((X)&0xFF)<<8) | (((X)&0xFF00)>>8))
/* 32 bit byte swap. example 0x12345678->0x78563412 */
#define HRD_BYTE_SWAP_32BIT(X) ((((X)&0xFF)<<24) | \
(((X)&0xFF00)<<8) | \
(((X)&0xFF0000)>>8) | \
(((X)&0xFF000000)>>24))
/* 64 bit byte swap. example 0x11223344.55667788 -> 0x88776655.44332211 */
#define HRD_BYTE_SWAP_64BIT(X) ((l64) ((((X)&0xFFULL)<<56) | \
(((X)&0xFF00ULL)<<40) | \
(((X)&0xFF0000ULL)<<24) | \
(((X)&0xFF000000ULL)<<8) | \
(((X)&0xFF00000000ULL)>>8) | \
(((X)&0xFF0000000000ULL)>>24) | \
(((X)&0xFF000000000000ULL)>>40) | \
(((X)&0xFF00000000000000ULL)>>56)))
/* -- Endianess macros. */
#ifdef HRD_ENDNESS_BIGEND
#define HRD_16BIT_LE(X) HRD_BYTE_SWAP_16BIT(X)
#define HRD_32BIT_LE(X) HRD_BYTE_SWAP_32BIT(X)
......
// SPDX-License-Identifier: GPL-2.0
/*
* Copyright (C) 2019 Hisilicon Limited, All Rights Reserved.
*
......@@ -29,6 +29,8 @@
#include "hrd_sflash_driver.h"
#include "hrd_sflash_hal.h"
#define SFC_DRIVER_VERSION "1.7.8.0"
static const char *sflashMtdList[] = { "sflash", NULL };
static unsigned int hrd_flash_info_fill(struct maps_init_info *maps,
......@@ -37,8 +39,7 @@ static unsigned int hrd_flash_info_fill(struct maps_init_info *maps,
{
u32 i;
/* clear the whole array */
memset((void *)maps, 0x0, sizeof(maps));
memset((void *)maps, 0x0, sizeof(struct maps_init_info)*MTD_MAX_FLASH_NUMBER);
for (i = 0; i < MTD_MAX_FLASH_NUMBER; i++) {
maps[i].mtdDrv = sflashMtdList;
......@@ -46,18 +47,18 @@ static unsigned int hrd_flash_info_fill(struct maps_init_info *maps,
maps[i].mapInfo.phys = flash_iores->start;
maps[i].mapInfo.size = resource_size(flash_iores);
maps[i].mapInfo.bankwidth = 8;
DB(pr_info("i is 0x%x, phys 0x%llx,size 0x%lx\n",
DB(pr_info("[SFC] i is 0x%x, phys 0x%llx,size 0x%lx\n",
(u32) i, maps[i].mapInfo.phys,
maps[i].mapInfo.size));
DB(pr_info("\nINFO: Found %s %d - base 0x%08x, size 0x%x",
DB(pr_info("[SFC] INFO: Found %s %d - base 0x%08x, size 0x%x\n",
maps[i].mapInfo.name, i,
(unsigned int)maps[i].mapInfo.phys,
(unsigned int)maps[i].mapInfo.size));
}
DB(pr_info("\nINFO: %s - Found %d Flash Devices", __func__, i));
DB(pr_info("[SFC] INFO: %s - Found %d Flash Devices\n", __func__, i));
return i;
}
......@@ -68,26 +69,24 @@ static int __init hrd_flashProbe(const char **mtdDrv, struct map_info *map,
if ((mtdDrv == NULL)
|| (map == NULL)
|| (mtd == NULL)) {
pr_err("\nERROR: NULL pointer parameter at %s entry", __func__);
pr_err("[SFC] ERROR: NULL pointer parameter at %s entry\n", __func__);
return -EINVAL;
}
/* remap the physical address to a virtual address */
map->virt = ioremap(map->phys, map->size);
if (!map->virt) {
pr_err("\nFailed ioremap Flash device at base 0x%x.",
pr_err("[SFC] Failed ioremap Flash device at base 0x%x.\n",
(unsigned int)map->phys);
return -EIO;
}
DB(pr_info
("\nIo remapped ok.phy addr:0x%llx, virt addr:0x%llx",
("[SFC] Io remapped ok.phy addr:0x%llx, virt addr:0x%llx\n",
(u64) map->phys, (u64) map->virt));
/* Skip bankwidths that are not supported */
if (!map_bankwidth_supported(map->bankwidth)) {
pr_err("\nERROR: bankwidth %d not supported.",
pr_err("[SFC] ERROR: bankwidth %d not supported.\n",
(unsigned int)map->bankwidth);
iounmap((void *)map->virt);
return -EIO;
......@@ -97,20 +96,19 @@ static int __init hrd_flashProbe(const char **mtdDrv, struct map_info *map,
for (; (!(*mtd) && *mtdDrv); mtdDrv++) {
DB(pr_info
("\nUsing %s probe %s at addr 0x%llx,size 0x%x, width %dm",
("[SFC] Using %s probe %s at addr 0x%llx,size 0x%x, width %dm\n",
*mtdDrv, map->name, (u64) map->phys,
(unsigned int)map->size, map->bankwidth));
*mtd = sflash_probe(map, sfc_regres);
if (*mtd) {
DB(pr_info(" - detected OK"));
/*map->size = (*mtd)->size; */
DB(pr_info(" - detected OK\n"));
(*mtd)->owner = THIS_MODULE;
if (mtd_device_register(*mtd, NULL, 0)) {
pr_err
("\nERROR: %s - Failed to add the mtd device",
("[SFC] ERROR: %s - Failed to add the mtd device\n",
__func__);
iounmap((void *)map->virt);
map->virt = 0;
......@@ -119,13 +117,13 @@ static int __init hrd_flashProbe(const char **mtdDrv, struct map_info *map,
return 0;
} else {
DB(pr_info(" - Not detected"));
DB(pr_info("[SFC] - Not detected\n"));
}
}
iounmap((void *)map->virt);
map->virt = 0;
pr_err("\nERROR: %s - probe failed", __func__);
pr_err("[SFC] ERROR: %s - probe failed\n", __func__);
return -ENXIO;
}
......@@ -139,43 +137,43 @@ static unsigned int flash_map_init(struct platform_device *pdev)
struct resource *flash_iores;
struct sfc_host *host;
pr_info("SFC Driver V0.11");
pr_info("SFC Driver\n");
host = devm_kzalloc(dev, sizeof(struct sfc_host), GFP_KERNEL);
if (!host)
if (!host) {
pr_err("[SFC] ERROR: %s devm_kzalloc failed\n", __func__);
return -ENOMEM;
}
sfc_regres = platform_get_resource(pdev, IORESOURCE_MEM, 0);
flash_iores = platform_get_resource(pdev, IORESOURCE_MEM, 1);
if (sfc_regres->end <= sfc_regres->start) {
pr_info("\nERROR: %s - sfc register error\r\n", __func__);
pr_err("ERROR: sfc register error\n");
return -EFAULT;
}
if (flash_iores->end <= flash_iores->start) {
pr_info("\nERROR: %s - sflash addr error\r\n", __func__);
pr_err("[SFC] ERROR: flash addr error\n");
return -EFAULT;
}
mapsNum = hrd_flash_info_fill(host->maps, flash_iores, pdev);
DB(pr_info
("\nINFO: hrd_flash_info_fill - DEtected %d devices\n", mapsNum));
("[SFC] INFO: DEtected %d devices\n", mapsNum));
for (i = 0; i < mapsNum; i++) {
DB(pr_info
("MTD: Initialize the %s device at address 0x%08x\n",
("[SFC] MTD: Initialize the %s device at address 0x%08x\n",
host->maps[i].mapInfo.name,
(unsigned int)host->maps[i].mapInfo.phys));
if (hrd_flashProbe
(host->maps[i].mtdDrv, &host->maps[i].mapInfo, sfc_regres,
&host->maps[i].mtdInfo) == 0) {
DB(pr_info(" - OK.\n"));
DB(pr_info("[SFC]- OK.\n"));
} else {
host->maps[i].mtdInfo = NULL;
DB(pr_err(" - FAILED!\n"));
DB(pr_err(" [SFC]- FAILED!\n"));
}
}
......@@ -203,7 +201,9 @@ static void __exit flash_map_exit(struct platform_device *pdev)
host->maps[i].mapInfo.virt = 0;
}
sflash_destroy(host->maps[i].mtdInfo);
if (host->maps[i].mtdInfo) {
sflash_destroy(host->maps[i].mtdInfo);
}
}
}
......@@ -243,4 +243,4 @@ module_platform_driver(hisi_sfc_driver);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Huawei Tech. Co., Ltd.");
MODULE_DESCRIPTION("Hi16xx SFC driver");
MODULE_VERSION("1.07");
MODULE_VERSION(SFC_DRIVER_VERSION);
// SPDX-License-Identifier: GPL-2.0
/*
* Copyright (C) 2019 Hisilicon Limited, All Rights Reserved.
*
......@@ -78,23 +78,16 @@ struct mtd_info *sflash_probe(struct map_info *map, struct resource *sfc_regres)
struct SFC_SFLASH_INFO *sflash;
unsigned long flags = 0, sflash_in_irq = 0;
DB_LOCAL(pr_info("\nINFO: entering %s", __func__));
DB_LOCAL(pr_info("[SFC] INFO: entering %s\n", __func__));
mtd = kmalloc(sizeof(*mtd), GFP_KERNEL);
if (!mtd) {
pr_err(KERN_NOTICE
"\nERROR: %s - Failed to allocate memory for mtd structure",
__func__);
pr_err("ERROR: %s - Failed to allocate memory for mtd structure\n", __func__);
return NULL;
}
sflash = kmalloc(sizeof(struct SFC_SFLASH_INFO), GFP_KERNEL);
if (!sflash) {
pr_err(KERN_NOTICE
"\nERROR: %s - Failed to allocate memory for sflash structure",
__func__);
pr_err("[SFC] ERROR: %s - Failed to allocate memory for sflash structure\n", __func__);
kfree(mtd);
return NULL;
}
......@@ -103,13 +96,10 @@ struct mtd_info *sflash_probe(struct map_info *map, struct resource *sfc_regres)
memset(sflash, 0, sizeof(*sflash));
DB_LOCAL(pr_info
("\nINFO: %s - Base address %llx\n", __func__, map->phys));
("[SFC] INFO: %s - Base address %llx\n", __func__, map->phys));
sflash->baseAddr = (u64) ioremap(map->phys, map->size);
if (!sflash->baseAddr) {
pr_err(KERN_NOTICE
"\nERROR: %s - map flash error\r\n", __func__);
pr_err("[SFC] ERROR: %s - map flash error\n", __func__);
goto exit0;
}
......@@ -117,27 +107,22 @@ struct mtd_info *sflash_probe(struct map_info *map, struct resource *sfc_regres)
(u64) ioremap_nocache(sfc_regres->start, resource_size(sfc_regres));
if (!sflash->sfc_reg_base) {
pr_err(KERN_NOTICE
"\nERROR: %s - map register error\r\n", __func__);
pr_err("[SFC] ERROR: %s - map register error\n", __func__);
goto exit1;
}
mutex_init(&sflash->lock);
sflash->index = INVALID_DEVICE_NUMBER; /* will be detected in init */
sflash->index = INVALID_DEVICE_NUMBER;
sflash_disable_irqs(flags, sflash_in_irq);
if (hrd_sflash_init(sflash) != HRD_OK) {
sflash_enable_irqs(flags, sflash_in_irq);
pr_err(KERN_NOTICE
"ERROR: %s - Failed to initialize the SFlash.",
__func__);
pr_err("[SFC] ERROR: %s - Failed to initialize the SFlash.\n", __func__);
goto exit2;
}
sflash_enable_irqs(flags, sflash_in_irq);
mtd->erasesize = sflash->sectorSize;
mtd->size = (u64) sflash->sectorSize * (u64) sflash->sectorNumber;
mtd->priv = map;
......@@ -160,21 +145,21 @@ struct mtd_info *sflash_probe(struct map_info *map, struct resource *sfc_regres)
map->fldrv_priv = sflash;
DB_LOCAL(pr_info
("\nINFO: %s - Detected SFlash device (size 0x%llx)", __func__,
("[SFC] INFO: %s - Detected SFlash device (size 0x%llx)\n", __func__,
mtd->size));
DB_LOCAL(pr_info
("\n Base Address : 0x%llx", sflash->baseAddr));
("[SFC] Base Address : 0x%llx\n", sflash->baseAddr));
DB_LOCAL(pr_info
("\n Manufacturer ID : 0x%02x",
("[SFC] Manufacturer ID : 0x%02x\n",
sflash->manufacturerId));
DB_LOCAL(pr_info
("\n Device ID : 0x%04x", sflash->deviceId));
("[SFC] Device ID : 0x%04x\n", sflash->deviceId));
DB_LOCAL(pr_info
("\n Sector Size : 0x%x", sflash->sectorSize));
("[SFC] Sector Size : 0x%x\n", sflash->sectorSize));
DB_LOCAL(pr_info
("\n Sector Number : %d", sflash->sectorNumber));
("[SFC] Sector Number : %d\n", sflash->sectorNumber));
pr_info("SPI Serial flash detected @ 0x%08llx, %dKB (%dsec x %dKB)\n",
pr_info("[SFC] detected @ 0x%08llx, %dKB (%dsec x %dKB)\n",
sflash->baseAddr,
((sflash->sectorNumber * sflash->sectorSize) / 1024),
sflash->sectorNumber, (sflash->sectorSize / 1024));
......@@ -204,7 +189,7 @@ void sflash_destroy(struct mtd_info *mtd)
struct map_info *map = mtd->priv;
struct SFC_SFLASH_INFO *sflash = map->fldrv_priv;
DB_LOCAL(pr_info("\nINFO: %s called", __func__));
DB_LOCAL(pr_info("[SFC] INFO: %s called\n", __func__));
if (sflash->baseAddr != 0)
iounmap((void *)sflash->baseAddr);
......@@ -227,7 +212,7 @@ static int sflash_read(struct mtd_info *mtd, loff_t from, size_t len,
*retlen = 0;
DB_LOCAL(pr_info
("\nINFO: %s - offset %08x, len %d", __func__, offset,
("[SFC] INFO: %s - offset %08x, len %d\n", __func__, offset,
(int)len));
mutex_lock(&sflash->lock);
......@@ -237,12 +222,8 @@ static int sflash_read(struct mtd_info *mtd, loff_t from, size_t len,
ret = SFC_RegModeRead(sflash, offset, (u8 *) buf, (u32) len);
break;
case SFC_BUS_RW_MODE:
ret = SFC_BusModeRead(sflash, offset, (u8 *) buf, (u32) len);
break;
default:
pr_err(KERN_NOTICE "\nERROR: %s - rw mode error", __func__);
pr_err("[SFC] ERROR: %s - rw mode error\n", __func__);
ret = -1;
}
......@@ -250,16 +231,14 @@ static int sflash_read(struct mtd_info *mtd, loff_t from, size_t len,
if (ret != HRD_OK) {
mutex_unlock(&sflash->lock);
pr_err(KERN_NOTICE "\nERROR: %s - Failed to read block",
__func__);
pr_err("[SFC] ERROR: %s - Failed to read block\n", __func__);
return -1;
}
mutex_unlock(&sflash->lock);
*retlen = len;
DB_LOCAL(pr_info(" - OK"));
DB_LOCAL(pr_info(" [SFC] - OK\n"));
return 0;
}
......@@ -273,7 +252,7 @@ static int sflash_write(struct mtd_info *mtd, loff_t to, size_t len,
*retlen = 0;
DB_LOCAL(pr_info("\nINFO: %s-offset %08x, len %d",
DB_LOCAL(pr_info("[SFC] INFO: %s-offset %08x, len %d\n",
__func__, offset, (u32) len));
mutex_lock(&sflash->lock);
......@@ -282,20 +261,15 @@ static int sflash_write(struct mtd_info *mtd, loff_t to, size_t len,
case SFC_REGISTER_RW_MODE:
ret = SFC_RegModeWrite(sflash, offset, buf, (u32) len);
break;
case SFC_BUS_RW_MODE:
ret = SFC_BusModeWrite(sflash, offset, buf, (u32) len);
break;
default:
pr_err(KERN_NOTICE "\nERROR: %s - rw mode error", __func__);
pr_err("[SFC] ERROR: %s - rw mode error\n", __func__);
ret = -1;
}
if (ret != HRD_OK) {
mutex_unlock(&sflash->lock);
pr_err(KERN_NOTICE "\nERROR: %s - Failed to write block",
pr_err("[SFC] ERROR: %s - Failed to write block\n",
__func__);
return -1;
}
......@@ -304,7 +278,7 @@ static int sflash_write(struct mtd_info *mtd, loff_t to, size_t len,
*retlen = len;
DB_LOCAL(pr_info(" - OK"));
DB_LOCAL(pr_info("[SFC] - OK"));
return 0;
}
......@@ -319,37 +293,31 @@ static int sflash_erase(struct mtd_info *mtd, struct erase_info *instr)
u64 i;
DB_LOCAL(pr_info
("\nINFO: %s - Addr %08llx, len %lld", __func__, instr->addr,
("[SFC] INFO: %s - Addr %08llx, len %lld\n", __func__, instr->addr,
instr->len));
if (!sflash) {
pr_err("\nError: sflash is NULL");
pr_err("[SFC] Error: sflash is NULL\n");
return -EINVAL;
}
if (instr->addr & (mtd->erasesize - 1)) {
pr_err("\nError: %s - Erase address not sector alligned",
pr_err("[SFC] Error: %s - Erase address not sector alligned\n",
__func__);
return -EINVAL;
}
if (instr->len & (mtd->erasesize - 1)) {
pr_err("\nError: %s - Erase length is not sector alligned",
pr_err("[SFC] Error: %s - Erase length is not sector alligned\n",
__func__);
return -EINVAL;
}
if (instr->len + instr->addr > mtd->size) {
pr_err("\nError: %s - Erase exceeded flash size", __func__);
pr_err("[SFC] Error: %s - Erase exceeded flash size\n", __func__);
return -EINVAL;
}
if (0 != SFC_ControllerAddrModeSet(sflash)) {
pr_err("\nError: %s - SFC_ControllerAddrModeSet %d failed",
__func__, sflash->addr_mode);
return -1;
}
{
fsec = instr->addr;
do_div(fsec, 4 * 1024);
......@@ -357,10 +325,12 @@ static int sflash_erase(struct mtd_info *mtd, struct erase_info *instr)
do_div(lsec, 4 * 1024);
if (fsec < lsec) {
pr_info("\nINFO: %s - for 4K from sector %lld to %lld",
pr_info("[SFC] INFO: %s - for 4K from sector %lld to %lld\n",
__func__, fsec, lsec - 1);
mutex_lock(&sflash->lock);
SFC_CheckErr(sflash);
for (i = fsec; i < lsec; i++) {
if (SFC_BlockErase
(sflash, ((u32) i) * 0x1000,
......@@ -368,7 +338,7 @@ static int sflash_erase(struct mtd_info *mtd, struct erase_info *instr)
mutex_unlock(&sflash->lock);
pr_err
("\nError: %s - mvSFlashSectorErase on sector %lld",
("[SFC] Error: %s - mvSFlashSectorErase on sector %lld\n",
__func__, i);
return -1;
}
......@@ -384,7 +354,7 @@ static int sflash_erase(struct mtd_info *mtd, struct erase_info *instr)
do_div(lsec, mtd->erasesize);
lsec = (fsec + lsec);
DB_LOCAL(pr_info("\nINFO: %s - from sector %u to %u", __func__, fsec,
DB_LOCAL(pr_info("[SFC] INFO: %s - from sector %u to %u\n", __func__, fsec,
lsec - 1));
mutex_lock(&sflash->lock);
......@@ -395,7 +365,7 @@ static int sflash_erase(struct mtd_info *mtd, struct erase_info *instr)
mutex_unlock(&sflash->lock);
pr_err
("\nError: %s - mvSFlashSectorErase on sector %lld",
("[SFC] Error: %s - mvSFlashSectorErase on sector %lld\n",
__func__, i);
#if LINUX_VERSION_CODE > KERNEL_VERSION(4, 16, 0)
instr->fail_addr = ((u32) i) * mtd->erasesize;
......@@ -421,7 +391,7 @@ static int sflash_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
struct map_info *map = mtd->priv;
struct SFC_SFLASH_INFO *sflash = map->fldrv_priv;
DB_LOCAL(pr_info("\nINFO: %s called", __func__));
DB_LOCAL(pr_info("[SFC] INFO: %s called\n", __func__));
mutex_lock(&sflash->lock);
ret = SFC_WPSet(sflash, 1);
......@@ -436,7 +406,7 @@ static int sflash_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
struct map_info *map = mtd->priv;
struct SFC_SFLASH_INFO *sflash = map->fldrv_priv;
pr_info("\nINFO: %s called", __func__);
pr_info("[SFC] INFO: %s called\n", __func__);
mutex_lock(&sflash->lock);
ret = SFC_WPSet(sflash, 0);
......@@ -447,28 +417,28 @@ static int sflash_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
static void sflash_sync(struct mtd_info *mtd)
{
DB_LOCAL(pr_info("\nINFO: %s called - DUMMY", __func__));
DB_LOCAL(pr_info("[SFC] INFO: %s called - DUMMY\n", __func__));
}
static int sflash_suspend(struct mtd_info *mtd)
{
DB_LOCAL(pr_info("\nINFO: %s called - DUMMY()", __func__));
DB_LOCAL(pr_info("[SFC] INFO: %s called - DUMMY()\n", __func__));
return 0;
}
static void sflash_resume(struct mtd_info *mtd)
{
DB_LOCAL(pr_info("\nINFO: %s called - DUMMY", __func__));
DB_LOCAL(pr_info("[SFC] INFO: %s called - DUMMY\n", __func__));
}
static int sflash_block_isbad(struct mtd_info *mtd, loff_t ofs)
{
DB_LOCAL(pr_info("\nINFO: %s called - DUMMY", __func__));
DB_LOCAL(pr_info("[SFC] INFO: %s called - DUMMY\n", __func__));
return 0;
}
static int sflash_block_markbad(struct mtd_info *mtd, loff_t ofs)
{
DB_LOCAL(pr_info("\nINFO: %s called - DUMMY", __func__));
DB_LOCAL(pr_info("[SFC] INFO: %s called - DUMMY\n", __func__));
return 0;
}
......@@ -131,7 +131,7 @@
#define DATABUFFER6 CMD_DATABUF(6)
#define DATABUFFER7 CMD_DATABUF(7)
#define DATABUFFER8 CMD_DATABUF(8)
#define SFC_HARD_BUF_LEN (64)
#define SFC_HARD_BUF_LEN (256)
/* GLOBAL_CONFIG */
#define RD_DELAY 3
......@@ -201,19 +201,14 @@ union UN_SFC_CMD_CONFIG {
unsigned int u32;
};
extern u32 SFC_ControllerInit(u64 sfc_reg_base);
extern s32 SFC_CheckErr(struct SFC_SFLASH_INFO *sflash);
extern s32 SFC_RegModeRead(struct SFC_SFLASH_INFO *sflash, u32 offset,
u8 *pucDest, u32 ulReadLen);
extern s32 SFC_BusModeRead(struct SFC_SFLASH_INFO *sflash, u32 offset,
u8 *pucDest, u32 ulReadLen);
extern s32 SFC_RegModeWrite(struct SFC_SFLASH_INFO *sflash, u32 offset,
const u8 *pucSrc, u32 ulWriteLen);
extern s32 SFC_BusModeWrite(struct SFC_SFLASH_INFO *sflash, u32 offset,
const u8 *pucSrc, u32 ulWriteLen);
extern s32 SFC_SPIFlashIdGet(struct SFC_SFLASH_INFO *pFlinfo,
u8 *pulManuId, u16 *pulDevId, u8 *pcfi_len,
u8 *psec_arch, u8 *pfid);
extern s32 SFC_ControllerAddrModeSet(struct SFC_SFLASH_INFO *pFlinfo);
extern s32 SFC_BlockErase(struct SFC_SFLASH_INFO *sflash, u32 ulAddr,
u32 ErCmd);
extern int hrd_sflash_init(struct SFC_SFLASH_INFO *pFlinfo);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册