1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24#include <common.h>
25#include <asm/arch/ixp425.h>
26
27#if !defined(CONFIG_FLASH_CFI_DRIVER)
28
29
30
31
32#include "../common/flash.c"
33
34
35
36
37static ulong flash_get_size (vu_long * addr, flash_info_t * info);
38
39static inline ulong ld(ulong x)
40{
41 ulong k = 0;
42
43 while (x >>= 1)
44 ++k;
45
46 return k;
47}
48
49unsigned long flash_init(void)
50{
51 unsigned long size;
52 int i;
53
54
55 for (i=0; i<CONFIG_SYS_MAX_FLASH_BANKS; i++)
56 flash_info[i].flash_id = FLASH_UNKNOWN;
57
58 size = flash_get_size((vu_long *)FLASH_BASE0_PRELIM, &flash_info[0]);
59
60 if (flash_info[0].flash_id == FLASH_UNKNOWN)
61 printf ("## Unknown FLASH on Bank 0 - Size = 0x%08lx = %ld MB\n",
62 size, size<<20);
63
64
65 *IXP425_EXP_CS0 = (*IXP425_EXP_CS0 & ~0x00003C00) | ((ld(size) - 9) << 10);
66
67
68 flash_protect(FLAG_PROTECT_SET,
69 CONFIG_SYS_MONITOR_BASE, CONFIG_SYS_MONITOR_BASE + monitor_flash_len - 1,
70 &flash_info[CONFIG_SYS_MAX_FLASH_BANKS - 1]);
71
72
73 flash_protect(FLAG_PROTECT_SET,
74 CONFIG_ENV_ADDR,
75 CONFIG_ENV_ADDR + CONFIG_ENV_SECT_SIZE - 1,
76 &flash_info[CONFIG_SYS_MAX_FLASH_BANKS - 1]);
77
78
79 flash_protect(FLAG_PROTECT_SET,
80 CONFIG_ENV_ADDR_REDUND,
81 CONFIG_ENV_ADDR_REDUND + CONFIG_ENV_SECT_SIZE - 1,
82 &flash_info[CONFIG_SYS_MAX_FLASH_BANKS - 1]);
83
84 flash_info[0].size = size;
85
86 return size;
87}
88
89#endif
90