Commit 0b18fc8d authored by Kevin Hilman's avatar Kevin Hilman

Merge branch 'davinci-upstream-submitted' into davinci-reset

parents 395e9801 cca4acfa
...@@ -412,7 +412,11 @@ __setup_mmu: sub r3, r4, #16384 @ Page directory size ...@@ -412,7 +412,11 @@ __setup_mmu: sub r3, r4, #16384 @ Page directory size
orr r1, r1, #3 << 10 orr r1, r1, #3 << 10
add r2, r3, #16384 add r2, r3, #16384
1: cmp r1, r9 @ if virt > start of RAM 1: cmp r1, r9 @ if virt > start of RAM
#ifdef CONFIG_CPU_DCACHE_WRITETHROUGH
orrhs r1, r1, #0x08 @ set cacheable
#else
orrhs r1, r1, #0x0c @ set cacheable, bufferable orrhs r1, r1, #0x0c @ set cacheable, bufferable
#endif
cmp r1, r10 @ if virt > end of RAM cmp r1, r10 @ if virt > end of RAM
bichs r1, r1, #0x0c @ clear cacheable, bufferable bichs r1, r1, #0x0c @ clear cacheable, bufferable
str r1, [r0], #4 @ 1:1 mapping str r1, [r0], #4 @ 1:1 mapping
...@@ -436,6 +440,11 @@ __setup_mmu: sub r3, r4, #16384 @ Page directory size ...@@ -436,6 +440,11 @@ __setup_mmu: sub r3, r4, #16384 @ Page directory size
mov pc, lr mov pc, lr
ENDPROC(__setup_mmu) ENDPROC(__setup_mmu)
__arm926ejs_mmu_cache_on:
#ifdef CONFIG_CPU_DCACHE_WRITETHROUGH
mov r0, #4 @ put dcache in WT mode
mcr p15, 7, r0, c15, c0, 0
#endif
__armv4_mmu_cache_on: __armv4_mmu_cache_on:
mov r12, lr mov r12, lr
#ifdef CONFIG_MMU #ifdef CONFIG_MMU
...@@ -655,6 +664,12 @@ proc_types: ...@@ -655,6 +664,12 @@ proc_types:
W(b) __armv4_mpu_cache_off W(b) __armv4_mpu_cache_off
W(b) __armv4_mpu_cache_flush W(b) __armv4_mpu_cache_flush
.word 0x41069260 @ ARM926EJ-S (v5TEJ)
.word 0xff0ffff0
b __arm926ejs_mmu_cache_on
b __armv4_mmu_cache_off
b __armv5tej_mmu_cache_flush
.word 0x00007000 @ ARM7 IDs .word 0x00007000 @ ARM7 IDs
.word 0x0000f000 .word 0x0000f000
mov pc, lr mov pc, lr
......
...@@ -79,6 +79,10 @@ struct davinci_nand_pdata { /* platform_data */ ...@@ -79,6 +79,10 @@ struct davinci_nand_pdata { /* platform_data */
/* e.g. NAND_BUSWIDTH_16 or NAND_USE_FLASH_BBT */ /* e.g. NAND_BUSWIDTH_16 or NAND_USE_FLASH_BBT */
unsigned options; unsigned options;
/* Main and mirror bbt descriptor overrides */
struct nand_bbt_descr *bbt_td;
struct nand_bbt_descr *bbt_md;
}; };
#endif /* __ARCH_ARM_DAVINCI_NAND_H */ #endif /* __ARCH_ARM_DAVINCI_NAND_H */
...@@ -251,6 +251,14 @@ config MMC_MVSDIO ...@@ -251,6 +251,14 @@ config MMC_MVSDIO
To compile this driver as a module, choose M here: the To compile this driver as a module, choose M here: the
module will be called mvsdio. module will be called mvsdio.
config MMC_DAVINCI
tristate "TI DAVINCI Multimedia Card Interface support"
depends on ARCH_DAVINCI
help
This selects the TI DAVINCI Multimedia card Interface.
If you have an DAVINCI board with a Multimedia Card slot,
say Y or M here. If unsure, say N.
config MMC_SPI config MMC_SPI
tristate "MMC/SD/SDIO over SPI" tristate "MMC/SD/SDIO over SPI"
depends on SPI_MASTER && !HIGHMEM && HAS_DMA depends on SPI_MASTER && !HIGHMEM && HAS_DMA
......
...@@ -25,6 +25,7 @@ obj-$(CONFIG_MMC_ATMELMCI) += atmel-mci.o ...@@ -25,6 +25,7 @@ obj-$(CONFIG_MMC_ATMELMCI) += atmel-mci.o
obj-$(CONFIG_MMC_TIFM_SD) += tifm_sd.o obj-$(CONFIG_MMC_TIFM_SD) += tifm_sd.o
obj-$(CONFIG_MMC_MSM7X00A) += msm_sdcc.o obj-$(CONFIG_MMC_MSM7X00A) += msm_sdcc.o
obj-$(CONFIG_MMC_MVSDIO) += mvsdio.o obj-$(CONFIG_MMC_MVSDIO) += mvsdio.o
obj-$(CONFIG_MMC_DAVINCI) += davinci_mmc.o
obj-$(CONFIG_MMC_SPI) += mmc_spi.o obj-$(CONFIG_MMC_SPI) += mmc_spi.o
ifeq ($(CONFIG_OF),y) ifeq ($(CONFIG_OF),y)
obj-$(CONFIG_MMC_SPI) += of_mmc_spi.o obj-$(CONFIG_MMC_SPI) += of_mmc_spi.o
......
This diff is collapsed.
...@@ -310,6 +310,7 @@ static int nand_davinci_correct_4bit(struct mtd_info *mtd, ...@@ -310,6 +310,7 @@ static int nand_davinci_correct_4bit(struct mtd_info *mtd,
unsigned short ecc10[8]; unsigned short ecc10[8];
unsigned short *ecc16; unsigned short *ecc16;
u32 syndrome[4]; u32 syndrome[4];
u32 ecc_state;
unsigned num_errors, corrected; unsigned num_errors, corrected;
/* All bytes 0xff? It's an erased page; ignore its ECC. */ /* All bytes 0xff? It's an erased page; ignore its ECC. */
...@@ -360,6 +361,21 @@ compare: ...@@ -360,6 +361,21 @@ compare:
*/ */
davinci_nand_writel(info, NANDFCR_OFFSET, davinci_nand_writel(info, NANDFCR_OFFSET,
davinci_nand_readl(info, NANDFCR_OFFSET) | BIT(13)); davinci_nand_readl(info, NANDFCR_OFFSET) | BIT(13));
/*
* ECC_STATE field reads 0x3 (Error correction complete) immediately
* after setting the 4BITECC_ADD_CALC_START bit. So if you immediately
* begin trying to poll for the state, you may fall right out of your
* loop without any of the correction calculations having taken place.
* The recommendation from the hardware team is to wait till ECC_STATE
* reads less than 4, which means ECC HW has entered correction state.
*/
do {
ecc_state = (davinci_nand_readl(info,
NANDFSR_OFFSET) >> 8) & 0x0f;
cpu_relax();
} while (ecc_state < 4);
for (;;) { for (;;) {
u32 fsr = davinci_nand_readl(info, NANDFSR_OFFSET); u32 fsr = davinci_nand_readl(info, NANDFSR_OFFSET);
...@@ -591,6 +607,8 @@ static int __init nand_davinci_probe(struct platform_device *pdev) ...@@ -591,6 +607,8 @@ static int __init nand_davinci_probe(struct platform_device *pdev)
/* options such as NAND_USE_FLASH_BBT or 16-bit widths */ /* options such as NAND_USE_FLASH_BBT or 16-bit widths */
info->chip.options = pdata->options; info->chip.options = pdata->options;
info->chip.bbt_td = pdata->bbt_td;
info->chip.bbt_md = pdata->bbt_md;
info->ioaddr = (uint32_t __force) vaddr; info->ioaddr = (uint32_t __force) vaddr;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment