menuconfig ELBC_BR2_OR2
	bool "ELBC BR2/OR2"

if ELBC_BR2_OR2

config BR2_OR2_NAME
	string "Identifier"

config BR2_OR2_BASE
	hex "Port base"

choice
	prompt "Port size"

config BR2_PORTSIZE_8BIT
	bool "8-bit"

config BR2_PORTSIZE_16BIT
	depends on !BR2_MACHINE_FCM
	bool "16-bit"


config BR2_PORTSIZE_32BIT
	depends on !BR2_MACHINE_FCM
	depends on ARCH_MPC8349 || ARCH_MPC8360 || ARCH_MPC8379
	bool "32-bit"

endchoice

if BR2_MACHINE_FCM

choice
	prompt "Data Error Checking"

config BR2_ERRORCHECKING_DISABLED
	bool "Disabled"

config BR2_ERRORCHECKING_ECC_CHECKING
	bool "ECC checking / No ECC generation"

config BR2_ERRORCHECKING_BOTH
	bool "ECC checking and generation"

endchoice

endif

config BR2_WRITE_PROTECT
	bool "Write-protect"

config BR2_MACHINE_UPM
	bool

choice
	prompt "Machine select"

config BR2_MACHINE_GPCM
	bool "GPCM"

config BR2_MACHINE_FCM
	depends on !ARCH_MPC832X && !ARCH_MPC8349 && !ARCH_MPC8360
	bool "FCM"

config BR2_MACHINE_SDRAM
	depends on ARCH_MPC8349 || ARCH_MPC8360
	bool "SDRAM"

config BR2_MACHINE_UPMA
	select BR2_MACHINE_UPM
	bool "UPM (A)"

config BR2_MACHINE_UPMB
	select BR2_MACHINE_UPM
	bool "UPM (B)"

config BR2_MACHINE_UPMC
	select BR2_MACHINE_UPM
	bool "UPM (C)"

endchoice

if ARCH_MPC8313 || ARCH_MPC8323 || ARCH_MPC8360

choice
	prompt "Atomic operations"

config BR2_ATOMIC_NONE
	bool "No atomic operations"

config BR2_ATOMIC_RAWA
	bool "Read-after-write-atomic"

config BR2_ATOMIC_WARA
	bool "Write-after-read-atomic"

endchoice

endif

if BR2_MACHINE_GPCM || BR2_MACHINE_FCM || BR2_MACHINE_UPM || BR2_MACHINE_SDRAM

choice
	prompt "Address mask"

config OR2_AM_32_KBYTES
	depends on !BR2_MACHINE_SDRAM
	bool "32 kb"

config OR2_AM_64_KBYTES
	bool "64 kb"

config OR2_AM_128_KBYTES
	bool "128 kb"

config OR2_AM_256_KBYTES
	bool "256 kb"

config OR2_AM_512_KBYTES
	bool "512 kb"

config OR2_AM_1_MBYTES
	bool "1 mb"

config OR2_AM_2_MBYTES
	bool "2 mb"

config OR2_AM_4_MBYTES
	bool "4 mb"

config OR2_AM_8_MBYTES
	bool "8 mb"

config OR2_AM_16_MBYTES
	bool "16 mb"

config OR2_AM_32_MBYTES
	bool "32 mb"

config OR2_AM_64_MBYTES
	bool "64 mb"

# XXX: Some boards define 128MB AM with GPCM, even though it should not be
# possible according to the manuals
config OR2_AM_128_MBYTES
	bool "128 mb"

# XXX: Some boards define 256MB AM with GPCM, even though it should not be
# possible according to the manuals
config OR2_AM_256_MBYTES
	bool "256 mb"

config OR2_AM_512_MBYTES
	depends on BR2_MACHINE_FCM
	bool "512 mb"

# XXX: Some boards define 1GB AM with GPCM, even though it should not be
# possible according to the manuals
config OR2_AM_1_GBYTES
	bool "1 gb"

config OR2_AM_2_GBYTES
	depends on BR2_MACHINE_FCM
	bool "2 gb"

config OR2_AM_4_GBYTES
	depends on BR2_MACHINE_FCM
	bool "4 gb"

endchoice

config OR2_XAM_SET
	bool "Set unused bytes after address mask"
choice
	prompt "Buffer control disable"

config OR2_BCTLD_ASSERTED
	bool "Asserted"

config OR2_BCTLD_NOT_ASSERTED
	bool "Not asserted"

endchoice

endif

if BR2_MACHINE_GPCM || BR2_MACHINE_FCM

choice
	prompt "Cycle length in bus clocks"

config OR2_SCY_0
	bool "No wait states"

config OR2_SCY_1
	bool "1 wait state"

config OR2_SCY_2
	bool "2 wait states"

config OR2_SCY_3
	bool "3 wait states"

config OR2_SCY_4
	bool "4 wait states"

config OR2_SCY_5
	bool "5 wait states"

config OR2_SCY_6
	bool "6 wait states"

config OR2_SCY_7
	bool "7 wait states"

config OR2_SCY_8
	depends on BR2_MACHINE_GPCM
	bool "8 wait states"

config OR2_SCY_9
	depends on BR2_MACHINE_GPCM
	bool "9 wait states"

config OR2_SCY_10
	depends on BR2_MACHINE_GPCM
	bool "10 wait states"

config OR2_SCY_11
	depends on BR2_MACHINE_GPCM
	bool "11 wait states"

config OR2_SCY_12
	depends on BR2_MACHINE_GPCM
	bool "12 wait states"

config OR2_SCY_13
	depends on BR2_MACHINE_GPCM
	bool "13 wait states"

config OR2_SCY_14
	depends on BR2_MACHINE_GPCM
	bool "14 wait states"

config OR2_SCY_15
	depends on BR2_MACHINE_GPCM
	bool "15 wait states"

endchoice

endif # BR2_MACHINE_GPCM || BR2_MACHINE_FCM

if BR2_MACHINE_GPCM

choice
	prompt "Chip select negotiation time"

config OR2_CSNT_NORMAL
	bool "Normal"

config OR2_CSNT_EARLIER
	bool "Earlier"

endchoice

choice
	prompt "Address to chip-select setup"

config OR2_ACS_SAME_TIME
	bool "At the same time"

config OR2_ACS_HALF_CYCLE_EARLIER
	bool "Half of a bus clock cycle earlier"

config OR2_ACS_QUARTER_CYCLE_EARLIER
	bool "Half/Quarter of a bus clock cycle earlier"

endchoice

choice
	prompt "Extra address to check-select setup"

config OR2_XACS_NORMAL
	bool "Normal"

config OR2_XACS_EXTENDED
	bool "Extended"

endchoice

choice
	prompt "External address termination"

config OR2_SETA_INTERNAL
	bool "Access is terminated internally"

config OR2_SETA_EXTERNAL
	bool "Access is terminated externally"

endchoice

endif # BR2_MACHINE_GPCM

if BR2_MACHINE_FCM

choice
	prompt "NAND Flash EEPROM page size"

config OR2_PGS_SMALL
	bool "Small page device"

config OR2_PGS_LARGE
	bool "Large page device"

endchoice

choice
	prompt "Chip select to command time"

config OR2_CSCT_1_CYCLE
	depends on OR2_TRLX_NORMAL
	bool "1 cycle"

config OR2_CSCT_2_CYCLE
	depends on OR2_TRLX_RELAXED
	bool "2 cycles"

config OR2_CSCT_4_CYCLE
	depends on OR2_TRLX_NORMAL
	bool "4 cycles"

config OR2_CSCT_8_CYCLE
	depends on OR2_TRLX_RELAXED
	bool "8 cycles"

endchoice

choice
	prompt "Command setup time"

config OR2_CST_COINCIDENT
	depends on OR2_TRLX_NORMAL
	bool "Coincident with any command"

config OR2_CST_QUARTER_CLOCK
	depends on OR2_TRLX_NORMAL
	bool "0.25 clocks after"

config OR2_CST_HALF_CLOCK
	depends on OR2_TRLX_RELAXED
	bool "0.5 clocks after"

config OR2_CST_ONE_CLOCK
	depends on OR2_TRLX_RELAXED
	bool "1 clock after"

endchoice

choice
	prompt "Command hold time"

config OR2_CHT_HALF_CLOCK
	depends on OR2_TRLX_NORMAL
	bool "0.5 clocks before"

config OR2_CHT_ONE_CLOCK
	depends on OR2_TRLX_NORMAL
	bool "1 clock before"

config OR2_CHT_ONE_HALF_CLOCK
	depends on OR2_TRLX_RELAXED
	bool "1.5 clocks before"

config OR2_CHT_TWO_CLOCK
	depends on OR2_TRLX_RELAXED
	bool "2 clocks before"

endchoice

choice
	prompt "Reset setup time"

config OR2_RST_THREE_QUARTER_CLOCK
	depends on OR2_TRLX_NORMAL
	bool "0.75 clocks prior"

config OR2_RST_ONE_HALF_CLOCK
	depends on OR2_TRLX_RELAXED
	bool "0.5 clocks prior"

config OR2_RST_ONE_CLOCK
	bool "1 clock prior"

endchoice

endif # BR2_MACHINE_FCM

if BR2_MACHINE_UPM

choice
	prompt "Burst inhibit"

config OR2_BI_BURSTSUPPORT
	bool "Support burst access"

config OR2_BI_BURSTINHIBIT
	bool "Inhibit burst access"

endchoice

endif # BR2_MACHINE_UPM

if BR2_MACHINE_SDRAM

choice
	prompt "Number of column address lines"

config OR2_COLS_7
	bool "7"

config OR2_COLS_8
	bool "8"

config OR2_COLS_9
	bool "9"

config OR2_COLS_10
	bool "10"

config OR2_COLS_11
	bool "11"

config OR2_COLS_12
	bool "12"

config OR2_COLS_13
	bool "13"

config OR2_COLS_14
	bool "14"

endchoice

choice
	prompt "Number of rows address lines"

config OR2_ROWS_9
	bool "9"

config OR2_ROWS_10
	bool "10"

config OR2_ROWS_11
	bool "11"

config OR2_ROWS_12
	bool "12"

config OR2_ROWS_13
	bool "13"

config OR2_ROWS_14
	bool "14"

config OR2_ROWS_15
	bool "15"

endchoice

choice
	prompt "Page mode select"

config OR2_PMSEL_BTB
	bool "Back-to-back"

config OR2_PMSEL_KEPT_OPEN
	bool "Page kept open until page miss or refresh"

endchoice

endif # BR2_MACHINE_SDRAM

choice
	prompt "Relaxed timing"

config OR2_TRLX_NORMAL
	bool "Normal"

config OR2_TRLX_RELAXED
	bool "Relaxed"

endchoice

choice
	prompt "Extended hold time"

config OR2_EHTR_NORMAL
	depends on OR2_TRLX_NORMAL
	bool "Normal"

config OR2_EHTR_1_CYCLE
	depends on OR2_TRLX_NORMAL
	bool "1 idle clock cycle inserted"

config OR2_EHTR_4_CYCLE
	depends on OR2_TRLX_RELAXED
	bool "4 idle clock cycles inserted"

config OR2_EHTR_8_CYCLE
	depends on OR2_TRLX_RELAXED
	bool "8 idle clock cycles inserted"

endchoice

if !ARCH_MPC8308

choice
	prompt "External address latch delay"

config OR2_EAD_NONE
	bool "None"

config OR2_EAD_EXTRA
	bool "Extra"

endchoice

endif # !ARCH_MPC8308

endif # ELBC_BR2_OR2

config BR2_PORTSIZE
	hex
	default 0x800 if BR2_PORTSIZE_8BIT
	default 0x1000 if BR2_PORTSIZE_16BIT
	default 0x1800 if BR2_PORTSIZE_32BIT

config BR2_ERRORCHECKING
	hex
	default 0x0 if !BR2_MACHINE_FCM
	default 0x0 if BR2_ERRORCHECKING_DISABLED
	default 0x200 if BR2_ERRORCHECKING_ECC_CHECKING
	default 0x400 if BR2_ERRORCHECKING_BOTH

config BR2_WRITE_PROTECT_BIT
	hex
	default 0x0 if !BR2_WRITE_PROTECT
	default 0x100 if BR2_WRITE_PROTECT

config BR2_MACHINE
	hex
	default 0x0 if BR2_MACHINE_GPCM
	default 0x20 if BR2_MACHINE_FCM
	default 0x60 if BR2_MACHINE_SDRAM
	default 0x80 if BR2_MACHINE_UPMA
	default 0xa0 if BR2_MACHINE_UPMB
	default 0xc0 if BR2_MACHINE_UPMC

config BR2_ATOMIC
	hex
	default 0x0 if !ARCH_MPC8313 && !ARCH_MPC8323 && !ARCH_MPC8360
	default 0x0 if BR2_ATOMIC_NONE
	default 0x4 if BR2_ATOMIC_RAWA
	default 0x8 if BR2_ATOMIC_WARA

config BR2_VALID_BIT
	hex
	default 0x0 if !ELBC_BR2_OR2
	default 0x1 if ELBC_BR2_OR2

config OR2_AM
	hex
	default 0xffff8000 if OR2_AM_32_KBYTES && !BR2_MACHINE_SDRAM
	default 0xffff0000 if OR2_AM_64_KBYTES
	default 0xfffe0000 if OR2_AM_128_KBYTES
	default 0xfffc0000 if OR2_AM_256_KBYTES
	default 0xfff80000 if OR2_AM_512_KBYTES
	default 0xfff00000 if OR2_AM_1_MBYTES
	default 0xffe00000 if OR2_AM_2_MBYTES
	default 0xffc00000 if OR2_AM_4_MBYTES
	default 0xff800000 if OR2_AM_8_MBYTES
	default 0xff000000 if OR2_AM_16_MBYTES
	default 0xfe000000 if OR2_AM_32_MBYTES
	default 0xfc000000 if OR2_AM_64_MBYTES
	default 0xf8000000 if OR2_AM_128_MBYTES
	default 0xf0000000 if OR2_AM_256_MBYTES
	default 0xe0000000 if OR2_AM_512_MBYTES
	default 0xc0000000 if OR2_AM_1_GBYTES
	default 0x80000000 if OR2_AM_2_GBYTES
	default 0x00000000 if OR2_AM_4_GBYTES

config OR2_XAM
	hex
	default 0x0 if !OR2_XAM_SET
	default 0x6000 if OR2_XAM_SET

config OR2_BCTLD
	hex
	default 0x0 if OR2_BCTLD_ASSERTED
	default 0x1000 if OR2_BCTLD_NOT_ASSERTED

config OR2_BI
	hex
	default 0x0 if !BR2_MACHINE_UPM
	default 0x0 if OR2_BI_BURSTSUPPORT
	default 0x100 if OR2_BI_BURSTINHIBIT

config OR2_COLS
	hex
	default 0x0 if !BR2_MACHINE_SDRAM
	default 0x0 if OR2_COLS_7
	default 0x400 if OR2_COLS_8
	default 0x800 if OR2_COLS_9
	default 0xc00 if OR2_COLS_10
	default 0x1000 if OR2_COLS_11
	default 0x1400 if OR2_COLS_12
	default 0x1800 if OR2_COLS_13
	default 0x1c00 if OR2_COLS_14

config OR2_ROWS
	hex
	default 0x0 if !BR2_MACHINE_SDRAM
	default 0x0 if OR2_ROWS_9
	default 0x40 if OR2_ROWS_10
	default 0x80 if OR2_ROWS_11
	default 0xc0 if OR2_ROWS_12
	default 0x100 if OR2_ROWS_13
	default 0x140 if OR2_ROWS_14
	default 0x180 if OR2_ROWS_15

config OR2_PMSEL
	hex
	default 0x0 if !BR2_MACHINE_SDRAM
	default 0x0 if OR2_PMSEL_BTB
	default 0x20 if OR2_PMSEL_KEPT_OPEN

config OR2_SCY
	hex
	default 0x0 if !BR2_MACHINE_GPCM && !BR2_MACHINE_FCM
	default 0x0 if OR2_SCY_0
	default 0x10 if OR2_SCY_1
	default 0x20 if OR2_SCY_2
	default 0x30 if OR2_SCY_3
	default 0x40 if OR2_SCY_4
	default 0x50 if OR2_SCY_5
	default 0x60 if OR2_SCY_6
	default 0x70 if OR2_SCY_7
	default 0x80 if OR2_SCY_8
	default 0x90 if OR2_SCY_9
	default 0xa0 if OR2_SCY_10
	default 0xb0 if OR2_SCY_11
	default 0xc0 if OR2_SCY_12
	default 0xd0 if OR2_SCY_13
	default 0xe0 if OR2_SCY_14
	default 0xf0 if OR2_SCY_15

config OR2_PGS
	hex
	default 0x0 if !BR2_MACHINE_FCM
	default 0x0 if OR2_PGS_SMALL
	default 0x400 if OR2_PGS_LARGE

config OR2_CSCT
	hex
	default 0x0 if !BR2_MACHINE_FCM
	default 0x0 if OR2_CSCT_1_CYCLE
	default 0x0 if OR2_CSCT_2_CYCLE
	default 0x200 if OR2_CSCT_4_CYCLE
	default 0x200 if OR2_CSCT_8_CYCLE

config OR2_CST
	hex
	default 0x0 if !BR2_MACHINE_FCM
	default 0x0 if OR2_CST_COINCIDENT
	default 0x100 if OR2_CST_QUARTER_CLOCK
	default 0x0 if OR2_CST_HALF_CLOCK
	default 0x100 if OR2_CST_ONE_CLOCK

config OR2_CHT
	hex
	default 0x0 if !BR2_MACHINE_FCM
	default 0x0 if OR2_CHT_HALF_CLOCK
	default 0x80 if OR2_CHT_ONE_CLOCK
	default 0x0 if OR2_CHT_ONE_HALF_CLOCK
	default 0x80 if OR2_CHT_TWO_CLOCK

config OR2_RST
	hex
	default 0x0 if !BR2_MACHINE_FCM
	default 0x0 if OR2_RST_THREE_QUARTER_CLOCK
	default 0x8 if OR2_RST_ONE_CLOCK
	default 0x0 if OR2_RST_ONE_HALF_CLOCK

config OR2_CSNT
	hex
	default 0x0 if !BR2_MACHINE_GPCM
	default 0x0 if OR2_CSNT_NORMAL
	default 0x800 if OR2_CSNT_EARLIER

config OR2_ACS
	hex
	default 0x0 if !BR2_MACHINE_GPCM
	default 0x0 if OR2_ACS_SAME_TIME
	default 0x400 if OR2_ACS_QUARTER_CYCLE_EARLIER
	default 0x600 if OR2_ACS_HALF_CYCLE_EARLIER

config OR2_XACS
	hex
	default 0x0 if !BR2_MACHINE_GPCM
	default 0x0 if OR2_XACS_NORMAL
	default 0x100 if OR2_XACS_EXTENDED

config OR2_SETA
	hex
	default 0x0 if !BR2_MACHINE_GPCM
	default 0x0 if OR2_SETA_INTERNAL
	default 0x8 if OR2_SETA_EXTERNAL

config OR2_TRLX
	hex
	default 0x0 if OR2_TRLX_NORMAL
	default 0x4 if OR2_TRLX_RELAXED

config OR2_EHTR
	hex
	default 0x0 if OR2_EHTR_NORMAL
	default 0x2 if OR2_EHTR_1_CYCLE
	default 0x0 if OR2_EHTR_4_CYCLE
	default 0x2 if OR2_EHTR_8_CYCLE

config OR2_EAD
	hex
	default 0x0 if ARCH_MPC8308
	default 0x0 if OR2_EAD_NONE
	default 0x1 if OR2_EAD_EXTRA