|
@@ -0,0 +1,163 @@
|
|
|
+/*
|
|
|
+ * TI DaVinci EVM board support
|
|
|
+ *
|
|
|
+ * Author: Kevin Hilman, MontaVista Software, Inc. <source@mvista.com>
|
|
|
+ *
|
|
|
+ * 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 <linux/kernel.h>
|
|
|
+#include <linux/init.h>
|
|
|
+#include <linux/dma-mapping.h>
|
|
|
+#include <linux/platform_device.h>
|
|
|
+#include <linux/gpio.h>
|
|
|
+#include <linux/i2c.h>
|
|
|
+#include <linux/i2c/pcf857x.h>
|
|
|
+#include <linux/i2c/at24.h>
|
|
|
+#include <linux/mtd/mtd.h>
|
|
|
+#include <linux/mtd/nand.h>
|
|
|
+#include <linux/mtd/partitions.h>
|
|
|
+#include <linux/mtd/physmap.h>
|
|
|
+#include <linux/phy.h>
|
|
|
+#include <linux/clk.h>
|
|
|
+#include <linux/videodev2.h>
|
|
|
+#include <linux/v4l2-dv-timings.h>
|
|
|
+#include <linux/export.h>
|
|
|
+
|
|
|
+#include <media/tvp514x.h>
|
|
|
+
|
|
|
+#include <asm/mach-types.h>
|
|
|
+#include <asm/mach/arch.h>
|
|
|
+
|
|
|
+#include <mach/common.h>
|
|
|
+#include <linux/platform_data/i2c-davinci.h>
|
|
|
+#include <mach/serial.h>
|
|
|
+#include <mach/mux.h>
|
|
|
+#include <linux/platform_data/mtd-davinci.h>
|
|
|
+#include <linux/platform_data/mmc-davinci.h>
|
|
|
+#include <linux/platform_data/usb-davinci.h>
|
|
|
+#include <linux/platform_data/mtd-davinci-aemif.h>
|
|
|
+
|
|
|
+#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,
|