/*
 * Palm Treo 680 configuration file
 *
 * Copyright (C) 2013 Mike Dunn <mikedunn@newsguy.com>
 *
 * This file is released under the terms of GPL v2 and any later version.
 * See the file COPYING in the root directory of the source tree for details.
 *
 */

#ifndef	__CONFIG_H
#define	__CONFIG_H

/*
 * High Level Board Configuration Options
 */
#define CONFIG_CPU_PXA27X
#define CONFIG_PALMTREO680
#define CONFIG_MACH_TYPE                MACH_TYPE_TREO680

#define CONFIG_SYS_MALLOC_LEN           (4096*1024)

#define CONFIG_LZMA

/*
 * Serial Console Configuration
 */
#define CONFIG_PXA_SERIAL
#define CONFIG_FFUART                   1
#define CONFIG_BAUDRATE                 9600
#define CONFIG_SYS_BAUDRATE_TABLE       { 9600, 19200, 38400, 57600, 115200 }
#define CONFIG_CONS_INDEX               3

/* we have nand (although technically nand *is* flash...) */
#define CONFIG_SYS_NO_FLASH

#define CONFIG_LCD
/* #define CONFIG_KEYBOARD */  /* TODO */

/*
 * Bootloader Components Configuration
 */
#include <config_cmd_default.h>
#undef  CONFIG_CMD_FPGA
#undef  CONFIG_CMD_LOADS
#undef  CONFIG_CMD_NET
#undef  CONFIG_CMD_NFS
#undef  CONFIG_CMD_IMLS
#undef  CONFIG_CMD_FLASH
#undef  CONFIG_CMD_SETGETDCR
#undef  CONFIG_CMD_SOURCE
#undef  CONFIG_CMD_XIMG

#define CONFIG_CMD_ENV
#define CONFIG_CMD_MMC
#define CONFIG_CMD_NAND

#define CONFIG_CMDLINE_TAG
#define CONFIG_SETUP_MEMORY_TAGS

/*
 * MMC Card Configuration
 */
#ifdef CONFIG_CMD_MMC
#define CONFIG_MMC
#define CONFIG_GENERIC_MMC
#define CONFIG_PXA_MMC_GENERIC

#define CONFIG_CMD_FAT
#define CONFIG_CMD_EXT2
#define CONFIG_DOS_PARTITION
#endif

/*
 * LCD
 */
#ifdef CONFIG_LCD
#define CONFIG_PXA_LCD
#define CONFIG_ACX544AKN
#define CONFIG_LCD_LOGO
#define CONFIG_SYS_LCD_PXA_NO_L_BIAS /* don't configure GPIO77 as L_BIAS */
#define LCD_BPP LCD_COLOR16
#define CONFIG_FB_ADDR 0x5c000000    /* internal SRAM */
#define CONFIG_CMD_BMP
#define CONFIG_SPLASH_SCREEN         /* requires "splashimage" env var */
#define CONFIG_SPLASH_SCREEN_ALIGN   /* requires "splashpos" env var */
#define CONFIG_VIDEO_BMP_GZIP
#define CONFIG_SYS_VIDEO_LOGO_MAX_SIZE  (2 << 20)

#endif

/*
 * KGDB
 */
#ifdef CONFIG_CMD_KGDB
#define CONFIG_KGDB_BAUDRATE            230400  /* kgdb serial port speed */
#endif

/*
 * HUSH Shell Configuration
 */
#define CONFIG_SYS_HUSH_PARSER          1
#define CONFIG_SYS_PROMPT_HUSH_PS2      "> "

#define CONFIG_SYS_LONGHELP
#ifdef CONFIG_SYS_HUSH_PARSER
#define CONFIG_SYS_PROMPT               "$ "
#else
#endif
#define CONFIG_SYS_CBSIZE               256
#define CONFIG_SYS_PBSIZE               \
	(CONFIG_SYS_CBSIZE+sizeof(CONFIG_SYS_PROMPT)+16)
#define CONFIG_SYS_MAXARGS              16
#define CONFIG_SYS_BARGSIZE             CONFIG_SYS_CBSIZE
#define CONFIG_SYS_DEVICE_NULLDEV       1

/*
 * Clock Configuration
 */
#undef  CONFIG_SYS_CLKS_IN_HZ
#define CONFIG_SYS_CPUSPEED             0x210           /* 416MHz ; N=2,L=16 */

/*
 * Stack sizes
 */
#define CONFIG_STACKSIZE                (128*1024)      /* regular stack */
#ifdef CONFIG_USE_IRQ
#define CONFIG_STACKSIZE_IRQ            (4*1024)        /* IRQ stack */
#define CONFIG_STACKSIZE_FIQ            (4*1024)        /* FIQ stack */
#endif

/*
 * DRAM Map
 */
#define CONFIG_NR_DRAM_BANKS            1               /* 1 bank of DRAM */
#define PHYS_SDRAM_1                    0xa0000000      /* SDRAM Bank #1 */
#define PHYS_SDRAM_1_SIZE               0x04000000      /* 64 MB */

#define CONFIG_SYS_DRAM_BASE            0xa0000000
#define CONFIG_SYS_DRAM_SIZE            0x04000000      /* 64 MB DRAM */

#define CONFIG_SYS_MEMTEST_START        0xa0400000      /* memtest works on */
#define CONFIG_SYS_MEMTEST_END          0xa0800000      /* 4 ... 8 MB in DRAM */
#define CONFIG_SYS_LOAD_ADDR            CONFIG_SYS_DRAM_BASE
#define CONFIG_SYS_SDRAM_BASE           PHYS_SDRAM_1

/*
 * GPIO settings
 */
#define CONFIG_SYS_GAFR0_L_VAL  0x0E000000
#define CONFIG_SYS_GAFR0_U_VAL  0xA500001A
#define CONFIG_SYS_GAFR1_L_VAL  0x60000002
#define CONFIG_SYS_GAFR1_U_VAL  0xAAA07959
#define CONFIG_SYS_GAFR2_L_VAL  0x02AAAAAA
#define CONFIG_SYS_GAFR2_U_VAL  0x41440F08
#define CONFIG_SYS_GAFR3_L_VAL  0x56AA95FF
#define CONFIG_SYS_GAFR3_U_VAL  0x00001401
#define CONFIG_SYS_GPCR0_VAL    0x1FF80400
#define CONFIG_SYS_GPCR1_VAL    0x03003FC1
#define CONFIG_SYS_GPCR2_VAL    0x01C1E000
#define CONFIG_SYS_GPCR3_VAL    0x01C1E000
#define CONFIG_SYS_GPDR0_VAL    0xCFF90400
#define CONFIG_SYS_GPDR1_VAL    0xFB22BFC1
#define CONFIG_SYS_GPDR2_VAL    0x93CDFFDF
#define CONFIG_SYS_GPDR3_VAL    0x0069FF81
#define CONFIG_SYS_GPSR0_VAL    0x02000018
#define CONFIG_SYS_GPSR1_VAL    0x00000000
#define CONFIG_SYS_GPSR2_VAL    0x000C0000
#define CONFIG_SYS_GPSR3_VAL    0x00080000

#define CONFIG_SYS_PSSR_VAL     0x30

/*
 * Clock settings
 */
#define CONFIG_SYS_CKEN         0x01ffffff
#define CONFIG_SYS_CCCR         0x02000210

/*
 * Memory settings
 */
#define CONFIG_SYS_MSC0_VAL     0x7ff844c8
#define CONFIG_SYS_MSC1_VAL     0x7ff86ab4
#define CONFIG_SYS_MSC2_VAL     0x7ff87ff8
#define CONFIG_SYS_MDCNFG_VAL   0x0B880acd
#define CONFIG_SYS_MDREFR_VAL   0x201fa031
#define CONFIG_SYS_MDMRS_VAL    0x00320032
#define CONFIG_SYS_FLYCNFG_VAL  0x00000000
#define CONFIG_SYS_SXCNFG_VAL   0x40044004
#define CONFIG_SYS_MECR_VAL     0x00000003
#define CONFIG_SYS_MCMEM0_VAL   0x0001c391
#define CONFIG_SYS_MCMEM1_VAL   0x0001c391
#define CONFIG_SYS_MCATT0_VAL   0x0001c391
#define CONFIG_SYS_MCATT1_VAL   0x0001c391
#define CONFIG_SYS_MCIO0_VAL    0x00014611
#define CONFIG_SYS_MCIO1_VAL    0x0001c391

/*
 * USB
 */
#define CONFIG_USB_DEVICE
#define CONFIG_USB_TTY
#define CONFIG_USB_DEV_PULLUP_GPIO 114

/*
 * SPL
 */
#define CONFIG_SPL_TEXT_BASE    0xa1700000 /* IPL loads SPL here */
#define CONFIG_SPL_STACK        0x5c040000 /* end of internal SRAM */
#define CONFIG_SPL_NAND_SUPPORT /* build libnand for spl */
#define CONFIG_SPL_NAND_DOCG4   /* use lean docg4 nand spl driver */
#define CONFIG_SPL_LIBGENERIC_SUPPORT  /* spl uses memcpy */

/*
 * NAND
 */
#define CONFIG_NAND_DOCG4
#define CONFIG_SYS_NAND_SELF_INIT
#define CONFIG_SYS_MAX_NAND_DEVICE 1 /* only one device */
#define CONFIG_SYS_NAND_BASE 0x00000000 /* mapped to reset vector */
#define CONFIG_SYS_NAND_PAGE_SIZE 0x200
#define CONFIG_SYS_NAND_BLOCK_SIZE 0x40000
#define CONFIG_BITREVERSE       /* needed by docg4 driver */
#define CONFIG_BCH              /* needed by docg4 driver */

/*
 * IMPORTANT NOTE: this is the size of the concatenated spl + u-boot image.  It
 * will be rounded up to the next 64k boundary (the spl flash block size), so it
 * does not have to be exact, but you must ensure that it is not less than the
 * actual image size, or it may fail to boot (bricked phone)!
 * (Tip: reduces to three blocks with lcd and mmc support removed from u-boot.)
*/
#define CONFIG_SYS_NAND_U_BOOT_SIZE 0x40000 /* four 64k flash blocks */

/*
 * This is the byte offset into the flash at which the concatenated spl + u-boot
 * image is placed.  It must be at the start of a block (256k boundary).  Blocks
 * 0 - 5 are write-protected, so we start at block 6.
 */
#define CONFIG_SYS_NAND_U_BOOT_OFFS 0x180000  /* block 6 */

/* DRAM address to which u-boot proper is loaded (before it relocates itself) */
#define CONFIG_SYS_NAND_U_BOOT_DST  0xa0000000
#define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_NAND_U_BOOT_DST

/* passed to linker by Makefile as arg to -Ttext option */
#define CONFIG_SYS_TEXT_BASE 0xa0000000

#define CONFIG_SYS_INIT_SP_ADDR         0x5c040000 /* end of internal SRAM */

/*
 * environment
 */
#define CONFIG_ENV_IS_NOWHERE
#define CONFIG_BUILD_ENVCRC
#define CONFIG_ENV_SIZE 0x200
#define CONFIG_SYS_CONSOLE_IS_IN_ENV
#define CONFIG_EXTRA_ENV_SETTINGS  \
	"stdin=usbtty\0"           \
	"stdout=usbtty\0"          \
	"stderr=usbtty"
#define CONFIG_BOOTARGS "mtdparts=Msys_Diskonchip_G4:1536k(protected_part)ro,1024k(bootloader_part),-(filesys_part) \
ip=192.168.11.102:::255.255.255.0:treo:usb0"
#define CONFIG_BOOTDELAY   3

#if 0 /* example: try 2nd mmc partition, then nand */
#define CONFIG_BOOTCOMMAND                                              \
	"mmc rescan; "                                                  \
	"if mmcinfo && ext2load mmc 0:2 0xa1000000 uImage; then "       \
	    "bootm 0xa1000000; "					\
	"elif nand read 0xa1000000 0x280000 0x240000; then "            \
	    "bootm 0xa1000000; "					\
	"fi; "
#endif

/* u-boot lives at end of SDRAM, so use start of SDRAM for stand alone apps */
#define CONFIG_STANDALONE_LOAD_ADDR 0xa0000000

#define CONFIG_SYS_DCACHE_OFF
#define CONFIG_SYS_ICACHE_OFF

#endif  /* __CONFIG_H */
