tizen 2.4 release
[kernel/u-boot-tm1.git] / board / spreadtrum / coreprimelite / openphone.c
1 #include <common.h>
2 #include <asm/io.h>
3 #include <asm/arch/ldo.h>
4 #include <asm/arch/sprd_reg_ahb.h>
5 #include <asm/arch/regs_ahb.h>
6 #include <asm/arch/common.h>
7 #include <asm/arch/adi_hal_internal.h>
8 #include <asm/u-boot.h>
9 #include <part.h>
10 #include <sdhci.h>
11 #include <asm/arch/mfp.h>
12 #include <linux/gpio.h>
13 #include <asm/arch/gpio.h>
14 #include <asm/arch/pinmap.h>
15 DECLARE_GLOBAL_DATA_PTR;
16
17 extern void sprd_gpio_init(void);
18 extern void ADI_init (void);
19 extern int LDO_Init(void);
20 extern void ADC_Init(void);
21 extern void init_ldo_sleep_gr(void);
22
23 #ifdef CONFIG_GENERIC_MMC
24 int mv_sdh_init(u32 regbase, u32 max_clk, u32 min_clk, u32 quirks);
25 int mmc_sdcard_init();
26
27 int board_mmc_init(bd_t *bd)
28 {
29         mmc_sdcard_init();
30
31         mv_sdh_init(SDIO0_BASE_ADDR, SDIO_BASE_CLK_384M,
32                         SDIO_CLK_390K, 0);
33
34         return 0;
35 }
36 #endif
37
38 extern struct eic_gpio_resource sprd_gpio_resource[];
39
40 #ifdef CONFIG_HARDWARE_VERSION
41 #define GPIO_BOARD_ID_VALUE 0x40280080
42 unsigned int get_hw_version()
43 {
44         //HW_REV_MOD:[0, 1, 2]; RFCTL:8, 9, 12; gpio:27, 28, 31; GPIO_BASE+0x80:gpio16-gpio31
45         int gpio_states = 0;
46         unsigned int hw_version = 0;
47
48         //mask
49         REG32(GPIO_BOARD_ID_VALUE+0x4) |= (1<<11) | (1<<12) | (1<<15);
50         //data
51         gpio_states = REG32(GPIO_BOARD_ID_VALUE);
52
53         //HW Ver0.3 [0, 1, 2] values is [0, 1, 0]
54         hw_version = (
55                                 ((gpio_states & (1<<15)) >> 13) |
56                                 ((gpio_states & (1<<12)) >> 11) |
57                                 ((gpio_states & (1<<11)) >> 11)
58                                 );
59
60         printf("%s HW board ID values=%d\n", __FUNCTION__, hw_version);
61
62         return hw_version;
63 }
64 #endif
65
66 int board_init()
67 {
68         gd->bd->bi_arch_number = MACH_TYPE_OPENPHONE;
69         gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100;
70         ADI_init();
71         misc_init();
72         LDO_Init();
73         ADC_Init();
74         pin_init();
75         sprd_eic_init();
76         sprd_gpio_init();
77         init_ldo_sleep_gr();
78         TDPllRefConfig(1);
79
80         return 0;
81 }
82
83 PUBLIC phys_size_t get_dram_size_from_gd(void)
84 {
85         return gd->ram_size;
86 }
87
88 int dram_init(void)
89 {
90 #ifdef CONFIG_DDR_AUTO_DETECT
91         ulong sdram_base = CONFIG_SYS_SDRAM_BASE;
92         ulong sdram_size = 0;
93         int i;
94
95         gd->ram_size = 0;
96         ulong bank_cnt = CONFIG_NR_DRAM_BANKS_ADDR_IN_IRAM;
97
98         for (i = 1; i <= *(volatile uint32 *)CONFIG_NR_DRAM_BANKS_ADDR_IN_IRAM; i++) {
99                 gd->ram_size += *(volatile ulong *)((volatile ulong *)CONFIG_NR_DRAM_BANKS_ADDR_IN_IRAM + i);
100         }
101
102         gd->ram_size = get_ram_size((volatile void *)sdram_base, gd->ram_size);
103 #else
104         gd->ram_size = get_ram_size((volatile void *)PHYS_SDRAM_1,
105                         PHYS_SDRAM_1_SIZE);
106 #endif
107         return 0;
108 }
109
110 void fdt_fixup_chosen_bootargs_board(char *buf, const char *boot_mode, int calibration_mode)
111 {
112         char *p = buf;
113         /**
114          * Because of in u-boot, we can't find FDT chosen remove function
115          * and samsung only uses uart to do calibration,
116          * so in samsung board .dts, we remove the "console=ttyS1,115200n8" in chosen node by default.
117          * so in normal mode, we need to append console
118          */
119         if (!calibration_mode) {
120                 p += sprintf(p, "console=ttyS1,115200n8 no_console_suspend");
121         }
122 }