/* * TI DaVinci EVM board support * * Author: Kevin Hilman, MontaVista Software, Inc. * * 2007 (c) MontaVista Software, Inc. This file is licensed under * the terms of the GNU General Public License version 2. This program * is licensed "as is" without any warranty of any kind, whether express * or implied. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "davinci.h" #define DM644X_EVM_PHY_ID "davinci_mdio-0:01" #define LXT971_PHY_ID (0x001378e2) #define LXT971_PHY_MASK (0xfffffff0) static struct mtd_partition davinci_evm_norflash_partitions[] = { /* bootloader (UBL, U-Boot, etc) in first 5 sectors */ { .name = "bootloader", .offset = 0, .size = 5 * SZ_64K, .mask_flags = MTD_WRITEABLE, /* force read-only */ }, /* bootloader params in the next 1 sectors */ { .name = "params", .offset = MTDPART_OFS_APPEND, .size = SZ_64K, .mask_flags = 0, }, /* kernel */ { .name = "kernel", .offset = MTDPART_OFS_APPEND, .size = SZ_2M, .mask_flags = 0 }, /* file system */ { .name = "filesystem", .offset = MTDPART_OFS_APPEND, .size = MTDPART_SIZ_FULL, .mask_flags = 0 } }; static struct physmap_flash_data davinci_evm_norflash_data = { .width = 2, .parts = davinci_evm_norflash_partitions, .nr_parts = ARRAY_SIZE(davinci_evm_norflash_partitions), }; /* NOTE: CFI probe will correctly detect flash part as 32M, but EMIF * limits addresses to 16M, so using addresses past 16M will wrap */ static struct resource davinci_evm_norflash_resource = { .start = DM644X_ASYNC_EMIF_DATA_CE0_BASE, .end = DM644X_ASYNC_EMIF_DATA_CE0_BASE + SZ_16M - 1, .flags = IORESOURCE_MEM, }; static struct platform_device davinci_evm_norflash_device = { .name = "physmap-flash", .id = 0, .dev = { .platform_data = &davinci_evm_norflash_data, }, .num_resources = 1, .resource = &davinci_evm_norflash_resource, }; /* DM644x EVM includes a 64 MByte small-page NAND flash (16K blocks). * It may used instead of the (default) NOR chip to boot, using TI's * tools to install the secondary boot loader (UBL) and U-Boot. */ static struct mtd_partition davinci_evm_nandflash_partition[] = { /* Bootloader layout depends on whose u-boot is installed, but we * can hide all the details. * - block 0 for u-boot environment ... in mainline u-boot * - block 1 for UBL (plus up to four backup copies in blocks 2..5) * - blocks 6...? for u-boot * - blocks 16..23 for u-boot environment ... in TI's u-boot */ { .name = "bootloader", .offset = 0, .size = SZ_256K + SZ_128K, .mask_flags = MTD_WRITEABLE, /* force read-only */ }, /* Kernel */ { .name = "kernel", .offset = MTDPART_OFS_APPEND, .size = SZ_4M, .mask_flags = 0, }, /* File system (older GIT kernels started this on the 5MB mark) */ { .name = "filesystem", .offset = MTDPART_OFS_APPEND, .size = MTDPART_SIZ_FULL, .mask_flags = 0, } /* A few blocks at end hold a flash BBT ... created by TI's CCS * using flashwriter_nand.out, but ignored by TI's versions of * Linux and u-boot. We boot faster by using them. */ }; static struct davinci_aemif_timing davinci_evm_nandflash_timing = { .wsetup = 20, .wstrobe = 40, .whold = 20, .rsetup = 10, .rstrobe = 40, .rhold = 10, .ta = 40, }; static struct davinci_nand_pdata davinci_evm_nandflash_data = { .parts = davinci_evm_nandflash_partition, .nr_parts = ARRAY_SIZE(davinci_evm_nandflash_partition), .ecc_mode = NAND_ECC_HW, .bbt_options = NAND_BBT_USE_FLASH, .timing = &davinci_evm_nandflash_timing, }; static struct resource davinci_evm_nandflash_resource[] = { { .start = DM644X_ASYNC_EMIF_DATA_CE0_BASE, .end = DM644X_ASYNC_EMIF_DATA_CE0_BASE + SZ_16M - 1,