Blame view

bootloader/u-boot_2015_04/board/highbank/highbank.c 2.18 KB
6b13f685e   김민수   BSP 최초 추가
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
  /*
   * Copyright 2010-2011 Calxeda, Inc.
   *
   * SPDX-License-Identifier:	GPL-2.0+
   */
  
  #include <common.h>
  #include <ahci.h>
  #include <netdev.h>
  #include <scsi.h>
  
  #include <linux/sizes.h>
  #include <asm/io.h>
  
  #define HB_AHCI_BASE			0xffe08000
  
  #define HB_SREG_A9_PWR_REQ		0xfff3cf00
  #define HB_SREG_A9_BOOT_SRC_STAT	0xfff3cf04
  #define HB_SREG_A9_PWRDOM_STAT		0xfff3cf20
  
  #define HB_PWR_SUSPEND			0
  #define HB_PWR_SOFT_RESET		1
  #define HB_PWR_HARD_RESET		2
  #define HB_PWR_SHUTDOWN			3
  
  #define PWRDOM_STAT_SATA		0x80000000
  #define PWRDOM_STAT_PCI			0x40000000
  #define PWRDOM_STAT_EMMC		0x20000000
  
  DECLARE_GLOBAL_DATA_PTR;
  
  /*
   * Miscellaneous platform dependent initialisations
   */
  int board_init(void)
  {
  	icache_enable();
  
  	return 0;
  }
  
  /* We know all the init functions have been run now */
  int board_eth_init(bd_t *bis)
  {
  	int rc = 0;
  
  #ifdef CONFIG_CALXEDA_XGMAC
  	rc += calxedaxgmac_initialize(0, 0xfff50000);
  	rc += calxedaxgmac_initialize(1, 0xfff51000);
  #endif
  	return rc;
  }
  
  #ifdef CONFIG_SCSI_AHCI_PLAT
  void scsi_init(void)
  {
  	u32 reg = readl(HB_SREG_A9_PWRDOM_STAT);
  
  	if (reg & PWRDOM_STAT_SATA) {
  		ahci_init(HB_AHCI_BASE);
  		scsi_scan(1);
  	}
  }
  #endif
  
  #ifdef CONFIG_MISC_INIT_R
  int misc_init_r(void)
  {
  	char envbuffer[16];
  	u32 boot_choice;
  
  	boot_choice = readl(HB_SREG_A9_BOOT_SRC_STAT) & 0xff;
  	sprintf(envbuffer, "bootcmd%d", boot_choice);
  	if (getenv(envbuffer)) {
  		sprintf(envbuffer, "run bootcmd%d", boot_choice);
  		setenv("bootcmd", envbuffer);
  	} else
  		setenv("bootcmd", "");
  
  	return 0;
  }
  #endif
  
  int dram_init(void)
  {
  	gd->ram_size = SZ_512M;
  	return 0;
  }
  
  void dram_init_banksize(void)
  {
  	gd->bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE;
  	gd->bd->bi_dram[0].size =  PHYS_SDRAM_1_SIZE;
  }
  
  #if defined(CONFIG_OF_BOARD_SETUP)
  int ft_board_setup(void *fdt, bd_t *bd)
  {
  	static const char disabled[] = "disabled";
  	u32 reg = readl(HB_SREG_A9_PWRDOM_STAT);
  
  	if (!(reg & PWRDOM_STAT_SATA))
  		do_fixup_by_compat(fdt, "calxeda,hb-ahci", "status",
  			disabled, sizeof(disabled), 1);
  
  	if (!(reg & PWRDOM_STAT_EMMC))
  		do_fixup_by_compat(fdt, "calxeda,hb-sdhci", "status",
  			disabled, sizeof(disabled), 1);
  
  	return 0;
  }
  #endif
  
  void reset_cpu(ulong addr)
  {
  	writel(HB_PWR_HARD_RESET, HB_SREG_A9_PWR_REQ);
  
  	wfi();
  }