15 #include <linux/kernel.h>
29 #define REG_FPGA_REV 0x10
30 #define REG_FPGA_DIP_SWITCH_INPUT2 0x60
31 #define MAX_SUPPORTED_GPMC_CONFIG 3
33 #define DEBUG_BASE 0x08000000
36 #define FLASH_SIZE_SDPV1 SZ_64M
37 #define FLASH_SIZE_SDPV2 SZ_128M
43 static struct resource board_nor_resource = {
48 .name =
"physmap-flash",
51 .platform_data = &board_nor_data,
54 .resource = &board_nor_resource,
62 board_nor_data.
parts = nor_parts;
68 (
unsigned long *)&board_nor_resource.
start);
69 board_nor_resource.
end = board_nor_resource.
start
73 (
unsigned long *)&board_nor_resource.
start);
74 board_nor_resource.
end = board_nor_resource.
start
78 pr_err(
"NOR: Can't request GPMC CS\n");
82 pr_err(
"Unable to register NOR device\n");
85 #if defined(CONFIG_MTD_ONENAND_OMAP2) || \
86 defined(CONFIG_MTD_ONENAND_OMAP2_MODULE)
95 board_onenand_data.
cs =
cs;
96 board_onenand_data.
parts = onenand_parts;
103 #if defined(CONFIG_MTD_NAND_OMAP2) || \
104 defined(CONFIG_MTD_NAND_OMAP2_MODULE)
127 .wr_data_mux_bus = 0,
136 u8 nr_parts,
u8 cs,
int nand_type)
138 board_nand_data.
cs =
cs;
139 board_nand_data.
parts = nand_parts;
141 board_nand_data.
devsize = nand_type;
152 static u8 get_gpmc0_type(
void)
172 cs = ((cs & 8) >> 3) | ((cs & 4) >> 1) |
173 ((cs & 2) << 1) | ((cs & 1) << 3);
176 cs = ((cs & 4) >> 2) | (cs & 2) | ((cs & 1) << 2);
191 u8 norcs = GPMC_CS_NUM + 1;
192 u8 nandcs = GPMC_CS_NUM + 1;
193 u8 onenandcs = GPMC_CS_NUM + 1;
195 unsigned char *config_sel =
NULL;
200 idx = get_gpmc0_type();
202 pr_err(
"%s: Invalid chip select: %d\n", __func__, cs);
205 config_sel = (
unsigned char *)(chip_sel_board[idx]);
207 while (cs < GPMC_CS_NUM) {
208 switch (config_sel[cs]) {
210 if (norcs > GPMC_CS_NUM)
214 if (nandcs > GPMC_CS_NUM)
218 if (onenandcs > GPMC_CS_NUM)
225 if (norcs > GPMC_CS_NUM)
226 pr_err(
"NOR: Unable to find configuration in GPMC\n");
228 board_nor_init(partition_info[0].
parts,
229 partition_info[0].nr_parts, norcs);
231 if (onenandcs > GPMC_CS_NUM)
232 pr_err(
"OneNAND: Unable to find configuration in GPMC\n");
234 board_onenand_init(partition_info[1].parts,
235 partition_info[1].nr_parts, onenandcs);
237 if (nandcs > GPMC_CS_NUM)
238 pr_err(
"NAND: Unable to find configuration in GPMC\n");
240 board_nand_init(partition_info[2].parts,
241 partition_info[2].nr_parts, nandcs, nand_type);