if ARCH_IMX

config ARCH_TEXT_BASE
	hex
	default 0x83f00000 if MACH_EUKREA_CPUIMX25
	default 0xa0000000 if MACH_EUKREA_CPUIMX27
	default 0x87f00000 if MACH_EUKREA_CPUIMX35
	default 0x97f00000 if MACH_EUKREA_CPUIMX51SD
	default 0x08f00000 if MACH_MX1ADS
	default 0xc0000000 if MACH_IMX21ADS
	default 0xa0000000 if MACH_IMX27ADS
	default 0x83f00000 if MACH_FREESCALE_MX25_3STACK && FREESCALE_MX25_3STACK_SDRAM_64MB_DDR2
	default 0x87f00000 if MACH_FREESCALE_MX25_3STACK && FREESCALE_MX25_3STACK_SDRAM_128MB_MDDR
	default 0x87f00000 if MACH_FREESCALE_MX35_3STACK
	default 0xa7f00000 if MACH_PCA100
	default 0xa0000000 if MACH_PCM038
	default 0x87f00000 if MACH_PCM037
	default 0x87f00000 if MACH_PCM043
	default 0x08f80000 if MACH_SCB9328
	default 0xa7e00000 if MACH_NESO
	default 0x97f00000 if MACH_MX51_PDK
	default 0x87f00000 if MACH_GUF_CUPID
	default 0x93d00000 if MACH_TX25

config BOARDINFO
	default "Eukrea CPUIMX25" if MACH_EUKREA_CPUIMX25
	default "Eukrea CPUIMX27" if MACH_EUKREA_CPUIMX27
	default "Eukrea CPUIMX35" if MACH_EUKREA_CPUIMX35
	default "Eukrea CPUIMX51" if MACH_EUKREA_CPUIMX51SD
	default "Freescale i.MX21 ADS" if MACH_IMX21ADS
	default "Freescale i.MX27 ADS" if MACH_IMX27ADS
	default "Freescale MX35 3Stack" if MACH_FREESCALE_MX35_3STACK
	default "Freescale MX25 3Stack" if MACH_FREESCALE_MX25_3STACK
	default "Phytec phyCard-i.MX27" if MACH_PCA100
	default "Phytec phyCORE-i.MX27" if MACH_PCM038
	default "Phytec phyCORE-i.MX31" if MACH_PCM037
	default "Phytec phyCORE-i.MX35" if MACH_PCM043
	default "Synertronixx scb9328" if MACH_SCB9328
	default "Garz+Fricke Neso" if MACH_NESO
	default "Freescale i.MX51 PDK" if MACH_FREESCALE_MX51_PDK
	default "Garz+Fricke Cupid" if MACH_GUF_CUPID
	default "Ka-Ro tx25" if MACH_TX25

choice
	prompt "Select boot mode"
	help
	  i.MX processors support two different boot modes. With the internal
	  boot mode the boot medium contains a header describing the image to
	  load. The header also contains a register/value table which can be
	  used to setup SDRAM. The internal ROM code then initializes SDRAM
	  using the register/value table, loads the whole barebox image to
	  SDRAM and starts it. The internal boot mode is available on newer
	  i.MX processors (i.MX25, i.MX35 and i.MX51). and supports booting
	  from NOR, NAND, MMC/SD and serial ROMs.
	  The external boot mode only supports booting from NAND and NOR. With
	  NOR flash the image is just started in NOR flash. With NAND flash
	  the NAND controller loads the first 2kbyte from NAND into the NAND
	  controllers internal SRAM where it is then started. It's the
	  responsibility of these 2kbyte to load the rest of the boot image.
	  The external boot mode is supported on older i.MX processors (i.MX1,
	  i.MX21, i.MX25, i.MX27, i.MX21, i.MX35).

config ARCH_IMX_INTERNAL_BOOT
	bool "support internal boot mode"
	depends on ARCH_IMX25 || ARCH_IMX35 || ARCH_IMX51

config ARCH_IMX_EXTERNAL_BOOT
	bool "support external boot mode"
	depends on ARCH_IMX1 || ARCH_IMX21 || ARCH_IMX25 || ARCH_IMX27 || ARCH_IMX31 || ARCH_IMX35

endchoice

choice
	depends on ARCH_IMX_INTERNAL_BOOT
	prompt "Internal boot source"
	default ARCH_IMX_INTERNAL_BOOT_NAND
	help
	  Determines the location of the header information for internal boot.
	  0x100 for OneNAND
	  0x400 for NAND, SD/MMC or Serial ROM
	  0x1000 for NOR

config ARCH_IMX_INTERNAL_BOOT_NAND
	bool "NAND, SD/MMC, Serial ROM"

config ARCH_IMX_INTERNAL_BOOT_NOR
	bool "NOR"

config ARCH_IMX_INTERNAL_BOOT_ONENAND
	bool "OneNAND"

endchoice

config NAND_IMX_BOOT
	bool
	depends on ARCH_IMX_EXTERNAL_BOOT_NAND
	default y

config ARCH_IMX_EXTERNAL_BOOT_NAND
	bool
	prompt "Support Starting barebox from NAND"
	depends on ARCH_IMX_EXTERNAL_BOOT

choice
	depends on ARCH_IMX_EXTERNAL_BOOT_NAND
	default NAND_IMX_BOOT_512_2K
	prompt "select nand pagesize you want to support booting from"

config NAND_IMX_BOOT_512
	bool "512 byte page size"

config NAND_IMX_BOOT_2K
	bool "2048 byte page size"

config NAND_IMX_BOOT_512_2K
	bool "512 byte and 2048 byte pagesize"

endchoice

comment "Freescale i.MX System-on-Chip"

choice
	prompt "Freescale i.MX Processor"

config ARCH_IMX1
	bool "i.MX1"
	select CPU_ARM920T

config ARCH_IMX21
	bool "i.MX21"
	select CPU_ARM926T

config ARCH_IMX25
	bool "i.MX25"
	select CPU_ARM926T
	select ARCH_HAS_FEC_IMX

config ARCH_IMX27
	bool "i.MX27"
	select CPU_ARM926T
	select ARCH_HAS_FEC_IMX

config ARCH_IMX31
	select CPU_V6
	bool "i.MX31"

config ARCH_IMX35
	bool "i.MX35"
	select CPU_V6
	select ARCH_HAS_FEC_IMX

config ARCH_IMX51
	bool "i.MX51"
	select CPU_V7
	select ARCH_HAS_FEC_IMX

endchoice

# ----------------------------------------------------------

if ARCH_IMX1

choice

	prompt "i.MX1 Board Type"

config MACH_MX1ADS
	bool "mx1ads"
	select HAS_CS8900
	help
	  Say Y here if you are using the Motorola MX1ADS board

config MACH_SCB9328
	bool "Synertronixx scb9328"
	select HAS_DM9000
	select HAS_CFI
	select MACH_HAS_LOWLEVEL_INIT
	select HAVE_MMU
	help
	  Say Y here if you are using the Synertronixx scb9328 board

endchoice

endif

# ----------------------------------------------------------

if ARCH_IMX21

choice

	prompt "i.MX21 Board Type"

config MACH_IMX21ADS
	bool "Freescale i.MX21ADS"
	select HAS_CFI
	select MACH_HAS_LOWLEVEL_INIT
	select HAS_CS8900
	help
	  Say Y here if you are using the Freescale i.MX21ads board equipped
	  with a Freescale i.MX21 Processor

endchoice

endif

# ----------------------------------------------------------

if ARCH_IMX25

choice

	prompt "i.MX25 Board Type"

config MACH_EUKREA_CPUIMX25
	bool "Eukrea CPUIMX25"
	select MACH_HAS_LOWLEVEL_INIT
	select HAVE_MMU
	help
	  Say Y here if you are using the Eukrea Electromatique's CPUIMX25
	  equipped with a Freescale i.MX25 Processor

config MACH_FREESCALE_MX25_3STACK
	bool "Freescale MX25 3stack"
	select HAS_CFI
	select MACH_HAS_LOWLEVEL_INIT
	select I2C
	select I2C_MC34704
	help
	  Say Y here if you are using the Freescale MX25 3stack board equipped
	  with a Freescale i.MX25 Processor

config MACH_TX25
	bool "Ka-Ro TX25"
	select MACH_HAS_LOWLEVEL_INIT
	select HAVE_MMU
	help
	  Say Y here if you are using the Ka-Ro tx25 board

endchoice

endif

# ----------------------------------------------------------

if ARCH_IMX27

choice

	prompt "i.MX27 Board Type"

config MACH_EUKREA_CPUIMX27
	bool "EUKREA CPUIMX27"
	select HAS_CFI
	select HAVE_MMU
	select MACH_HAS_LOWLEVEL_INIT
	help
	  Say Y here if you are using Eukrea's CPUIMX27 equipped
	  with a Freescale i.MX27 Processor

config MACH_IMX27ADS
	bool "Freescale i.MX27ADS"
	select HAS_CFI
	select MACH_HAS_LOWLEVEL_INIT
	help
	  Say Y here if you are using the Freescale i.MX27ads board equipped
	  with a Freescale i.MX27 Processor

config MACH_PCA100
	bool "phyCard-i.MX27"
	select MACH_HAS_LOWLEVEL_INIT
	select HAVE_MMU
	help
	  Say Y here if you are using Phytec's phyCard-i.MX27 (pca100) equipped
	  with a Freescale i.MX27 Processor

config MACH_PCM038
	bool "phyCORE-i.MX27"
	select HAS_CFI
	select MACH_HAS_LOWLEVEL_INIT
	select SPI
	select DRIVER_SPI_IMX
	select DRIVER_SPI_MC13783
	select HAVE_MMU
	help
	  Say Y here if you are using Phytec's phyCORE-i.MX27 (pcm038) equipped
	  with a Freescale i.MX27 Processor

config MACH_NESO
	bool "Garz+Fricke Neso"
	select MACH_HAS_LOWLEVEL_INIT
	select HAVE_MMU
	help
	  Say Y here if you are using the Garz+Fricke Neso board equipped
	  with a Freescale i.MX27 Processor

endchoice

endif

# ----------------------------------------------------------

if ARCH_IMX31

choice

	prompt "i.MX31 Board Type"

config MACH_PCM037
	bool "phyCORE-i.MX31"
	select MACH_HAS_LOWLEVEL_INIT
	select HAVE_MMU
	select USB_ISP1504 if USB
	select ARCH_HAS_L2X0
	help
	  Say Y here if you are using Phytec's phyCORE-i.MX31 (pcm037) equipped
	  with a Freescale i.MX31 Processor

endchoice

endif

# ----------------------------------------------------------

if ARCH_IMX35

choice

	prompt "i.MX35 Board Type"

config MACH_EUKREA_CPUIMX35
	bool "EUKREA CPUIMX35"
	select HAVE_MMU
	select MACH_HAS_LOWLEVEL_INIT
	select ARCH_HAS_L2X0
	help
	  Say Y here if you are using Eukrea's CPUIMX35 equipped
	  with a Freescale i.MX35 Processor

config MACH_FREESCALE_MX35_3STACK
	bool "Freescale MX35 3stack"
	select HAS_CFI
	select MACH_HAS_LOWLEVEL_INIT
	select I2C
	select I2C_IMX
	select I2C_MC13892
	select I2C_MC9SDZ60
	help
	  Say Y here if you are using the Freescale MX35 3stack board equipped
	  with a Freescale i.MX35 Processor

config MACH_PCM043
        bool "phyCORE-i.MX35"
        select HAS_CFI
	select HAVE_MMU
	select MACH_HAS_LOWLEVEL_INIT
	select ARCH_HAS_L2X0
        help
          Say Y here if you are using Phytec's phyCORE-i.MX35 (pcm043) equipped
          with a Freescale i.MX35 Processor

config MACH_GUF_CUPID
        bool "Garz+Fricke Cupid"
	select HAVE_MMU
	select MACH_HAS_LOWLEVEL_INIT
	select ARCH_HAS_L2X0
        help
	  Say Y here if you are using the Garz+Fricke Neso board equipped
	  with a Freescale i.MX35 Processor

endchoice

endif

# ----------------------------------------------------------

if ARCH_IMX51

choice

	prompt "i.MX51 Board Type"

config MACH_FREESCALE_MX51_PDK
	bool "Freescale i.MX51 PDK"
	select HAVE_MMU
	select MACH_HAS_LOWLEVEL_INIT

config MACH_EUKREA_CPUIMX51SD
	bool "EUKREA CPUIMX51"
	select HAVE_MMU
	select MACH_HAS_LOWLEVEL_INIT
	help
	  Say Y here if you are using Eukrea's CPUIMX51 equipped
	  with a Freescale i.MX51 Processor

endchoice

endif

menu "Board specific settings       "

if MACH_PCM043
choice
	prompt "Display type"
config PCM043_DISPLAY_SHARP
	bool "Sharp LQ035Q7"
config PCM043_DISPLAY_TY090
	bool "TX090"
endchoice
endif

if MACH_PCM037
choice
	prompt "SDRAM Bank0"
config PCM037_SDRAM_BANK0_128MB
	bool "128MB"
config PCM037_SDRAM_BANK0_256MB
	bool "256MB"
endchoice

choice
	prompt "SDRAM Bank1"
config PCM037_SDRAM_BANK1_NONE
	bool "none"
config PCM037_SDRAM_BANK1_128MB
	bool "128MB"
config PCM037_SDRAM_BANK1_256MB
	bool "256MB"
endchoice
endif

if MACH_EUKREA_CPUIMX27
choice
	prompt "SDRAM Size"
config EUKREA_CPUIMX27_SDRAM_128MB
	bool "128 MB"
config EUKREA_CPUIMX27_SDRAM_256MB
	bool "256 MB"
endchoice
choice
	prompt "NOR Flash Size"
config EUKREA_CPUIMX27_NOR_32MB
	bool "<= 32 MB"
config EUKREA_CPUIMX27_NOR_64MB
	bool "> 32 MB"
endchoice
choice
	prompt "Quad UART Port"
	depends on DRIVER_SERIAL_NS16550
config EUKREA_CPUIMX27_QUART1
	bool "Q1"
config EUKREA_CPUIMX27_QUART2
	bool "Q2"
config EUKREA_CPUIMX27_QUART3
	bool "Q3"
config EUKREA_CPUIMX27_QUART4
	bool "Q4"
endchoice
endif
if MACH_FREESCALE_MX25_3STACK
choice
	prompt "SDRAM Type"
config FREESCALE_MX25_3STACK_SDRAM_64MB_DDR2
	bool "64 MB (DDR2)"
config FREESCALE_MX25_3STACK_SDRAM_128MB_MDDR
	bool "128 MB (mDDR)"
endchoice
endif
endmenu

menu "i.MX specific settings        "

config IMX_CLKO
	bool "clko command"
	depends on ARCH_IMX21 || ARCH_IMX27 || ARCH_IMX35 || ARCH_IMX25
	help
	  The i.MX SoCs have a Pin which can output different reference frequencies.
	  Say y here if you want to have the clko command which lets you select the
	  frequency to output on this pin.

config IMX_IIM
	tristate "IIM fusebox device"
	depends on ARCH_IMX25 || ARCH_IMX35
	help
	  Device driver for the IC Identification Module (IIM) fusebox. Use the 
	  regular md/mw commands to program and read the fusebox.

config IMX_IIM_FUSE_BLOW
	bool "IIM fuses blow support"
	depends on IMX_IIM
	help
	  Enable this option to add permanent programming of the fusebox, using
	  fuses blowing.

	  Warning: blown fuses can not be unblown. Using this option may damage
	  your CPU, or make it unbootalbe. Use with care.

endmenu

endif
