Blame view

bootloader/u-boot_2015_04/board/zeus/update.c 2.13 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
  /*
   * (C) Copyright 2007
   * Stefan Roese, DENX Software Engineering, sr@denx.de.
   *
   * SPDX-License-Identifier:	GPL-2.0+
   */
  
  #include <config.h>
  #include <common.h>
  #include <command.h>
  #include <asm/processor.h>
  #include <asm/io.h>
  #include <asm/ppc4xx-gpio.h>
  #include <i2c.h>
  
  #if defined(CONFIG_ZEUS)
  
  u8 buf_zeus_ce[] = {
  /*00    01    02    03    04    05    06    07 */
    0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  /*08    09    0a    0b    0c    0d    0e    0f */
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  /*10    11    12    13    14    15    16    17 */
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  /*18    19    1a    1b    1c    1d    1e    1f */
    0x00, 0xc0, 0x50, 0x12, 0x72, 0x3e, 0x00, 0x00 };
  
  u8 buf_zeus_pe[] = {
  
  /* CPU_CLOCK_DIV 1    = 00
     CPU_PLB_FREQ_DIV 3 = 10
     OPB_PLB_FREQ_DIV 2 = 01
     EBC_PLB_FREQ_DIV 2 = 00
     MAL_PLB_FREQ_DIV 1 = 00
     PCI_PLB_FRQ_DIV 3  = 10
     PLL_PLLOUTA        = IS SET
     PLL_OPERATING      = IS NOT SET
     PLL_FDB_MUL 10     = 1010
     PLL_FWD_DIV_A 3    = 101
     PLL_FWD_DIV_B 3    = 101
     TUNE               = 0x2be */
  /*00    01    02    03    04    05    06    07 */
    0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  /*08    09    0a    0b    0c    0d    0e    0f */
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  /*10    11    12    13    14    15    16    17 */
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  /*18    19    1a    1b    1c    1d    1e    1f */
    0x00, 0x60, 0x68, 0x2d, 0x42, 0xbe, 0x00, 0x00 };
  
  static int update_boot_eeprom(void)
  {
  	u32 len = 0x20;
  	u8 chip = CONFIG_SYS_I2C_EEPROM_ADDR;
  	u8 *pbuf;
  	u8 base;
  	int i;
  
  	if (in_be32((void *)GPIO0_IR) & GPIO_VAL(CONFIG_SYS_GPIO_ZEUS_PE)) {
  		pbuf = buf_zeus_pe;
  		base = 0x40;
  	} else {
  		pbuf = buf_zeus_ce;
  		base = 0x00;
  	}
  
  	for (i = 0; i < len; i++, base++) {
  		if (i2c_write(chip, base, 1, &pbuf[i], 1) != 0) {
  			printf("i2c_write fail
  ");
  			return 1;
  		}
  		udelay(11000);
  	}
  
  	return 0;
  }
  
  int do_update_boot_eeprom(cmd_tbl_t* cmdtp, int flag, int argc, char * const argv[])
  {
  	return update_boot_eeprom();
  }
  
  U_BOOT_CMD (
  	update_boot_eeprom, 1, 1, do_update_boot_eeprom,
  	"update boot eeprom content",
  	""
  );
  
  #endif