Merge git://git.infradead.org/mtd-2.6
* git://git.infradead.org/mtd-2.6: (58 commits) mtd: jedec_probe: add PSD4256G6V id mtd: OneNand support for Nomadik 8815 SoC (on NHK8815 board) mtd: nand: driver for Nomadik 8815 SoC (on NHK8815 board) m25p80: Add Spansion S25FL129P serial flashes jffs2: Use SLAB_HWCACHE_ALIGN for jffs2_raw_{dirent,inode} slabs mtd: sh_flctl: register sh_flctl using platform_driver_probe() mtd: nand: txx9ndfmc: transfer 512 byte at a time if possible mtd: nand: fix tmio_nand ecc correction mtd: nand: add __nand_correct_data helper function mtd: cfi_cmdset_0002: add 0xFF intolerance for M29W128G mtd: inftl: fix fold chain block number mtd: jedec: fix compilation problem with I28F640C3B definition mtd: nand: fix ECC Correction bug for SMC ordering for NDFC driver mtd: ofpart: Check availability of reg property instead of name property driver/Makefile: Initialize "mtd" and "spi" before "net" mtd: omap: adding DMA mode support in nand prefetch/post-write mtd: omap: add support for nand prefetch-read and post-write mtd: add nand support for w90p910 (v2) mtd: maps: add mtd-ram support to physmap_of mtd: pxa3xx_nand: add single-bit error corrections reporting ...
This commit is contained in:
@@ -87,7 +87,7 @@ static struct mtd_partition apollon_partitions[] = {
|
||||
},
|
||||
};
|
||||
|
||||
static struct flash_platform_data apollon_flash_data = {
|
||||
static struct onenand_platform_data apollon_flash_data = {
|
||||
.parts = apollon_partitions,
|
||||
.nr_parts = ARRAY_SIZE(apollon_partitions),
|
||||
};
|
||||
@@ -99,7 +99,7 @@ static struct resource apollon_flash_resource[] = {
|
||||
};
|
||||
|
||||
static struct platform_device apollon_onenand_device = {
|
||||
.name = "onenand",
|
||||
.name = "onenand-flash",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &apollon_flash_data,
|
||||
|
@@ -57,6 +57,11 @@
|
||||
#define GPMC_CHUNK_SHIFT 24 /* 16 MB */
|
||||
#define GPMC_SECTION_SHIFT 28 /* 128 MB */
|
||||
|
||||
#define PREFETCH_FIFOTHRESHOLD (0x40 << 8)
|
||||
#define CS_NUM_SHIFT 24
|
||||
#define ENABLE_PREFETCH (0x1 << 7)
|
||||
#define DMA_MPU_MODE 2
|
||||
|
||||
static struct resource gpmc_mem_root;
|
||||
static struct resource gpmc_cs_mem[GPMC_CS_NUM];
|
||||
static DEFINE_SPINLOCK(gpmc_mem_lock);
|
||||
@@ -386,6 +391,63 @@ void gpmc_cs_free(int cs)
|
||||
}
|
||||
EXPORT_SYMBOL(gpmc_cs_free);
|
||||
|
||||
/**
|
||||
* gpmc_prefetch_enable - configures and starts prefetch transfer
|
||||
* @cs: nand cs (chip select) number
|
||||
* @dma_mode: dma mode enable (1) or disable (0)
|
||||
* @u32_count: number of bytes to be transferred
|
||||
* @is_write: prefetch read(0) or write post(1) mode
|
||||
*/
|
||||
int gpmc_prefetch_enable(int cs, int dma_mode,
|
||||
unsigned int u32_count, int is_write)
|
||||
{
|
||||
uint32_t prefetch_config1;
|
||||
|
||||
if (!(gpmc_read_reg(GPMC_PREFETCH_CONTROL))) {
|
||||
/* Set the amount of bytes to be prefetched */
|
||||
gpmc_write_reg(GPMC_PREFETCH_CONFIG2, u32_count);
|
||||
|
||||
/* Set dma/mpu mode, the prefetch read / post write and
|
||||
* enable the engine. Set which cs is has requested for.
|
||||
*/
|
||||
prefetch_config1 = ((cs << CS_NUM_SHIFT) |
|
||||
PREFETCH_FIFOTHRESHOLD |
|
||||
ENABLE_PREFETCH |
|
||||
(dma_mode << DMA_MPU_MODE) |
|
||||
(0x1 & is_write));
|
||||
gpmc_write_reg(GPMC_PREFETCH_CONFIG1, prefetch_config1);
|
||||
} else {
|
||||
return -EBUSY;
|
||||
}
|
||||
/* Start the prefetch engine */
|
||||
gpmc_write_reg(GPMC_PREFETCH_CONTROL, 0x1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(gpmc_prefetch_enable);
|
||||
|
||||
/**
|
||||
* gpmc_prefetch_reset - disables and stops the prefetch engine
|
||||
*/
|
||||
void gpmc_prefetch_reset(void)
|
||||
{
|
||||
/* Stop the PFPW engine */
|
||||
gpmc_write_reg(GPMC_PREFETCH_CONTROL, 0x0);
|
||||
|
||||
/* Reset/disable the PFPW engine */
|
||||
gpmc_write_reg(GPMC_PREFETCH_CONFIG1, 0x0);
|
||||
}
|
||||
EXPORT_SYMBOL(gpmc_prefetch_reset);
|
||||
|
||||
/**
|
||||
* gpmc_prefetch_status - reads prefetch status of engine
|
||||
*/
|
||||
int gpmc_prefetch_status(void)
|
||||
{
|
||||
return gpmc_read_reg(GPMC_PREFETCH_STATUS);
|
||||
}
|
||||
EXPORT_SYMBOL(gpmc_prefetch_status);
|
||||
|
||||
static void __init gpmc_mem_init(void)
|
||||
{
|
||||
int cs;
|
||||
@@ -452,6 +514,5 @@ void __init gpmc_init(void)
|
||||
l &= 0x03 << 3;
|
||||
l |= (0x02 << 3) | (1 << 0);
|
||||
gpmc_write_reg(GPMC_SYSCONFIG, l);
|
||||
|
||||
gpmc_mem_init();
|
||||
}
|
||||
|
Reference in New Issue
Block a user