Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
cuboot-52xx.c
Go to the documentation of this file.
1 /*
2  * Old U-boot compatibility for MPC5200
3  *
4  * Author: Grant Likely <[email protected]>
5  *
6  * Copyright (c) 2007 Secret Lab Technologies Ltd.
7  * Copyright (c) 2007 Freescale Semiconductor, Inc.
8  *
9  * This program is free software; you can redistribute it and/or modify it
10  * under the terms of the GNU General Public License version 2 as published
11  * by the Free Software Foundation.
12  */
13 
14 #include "ops.h"
15 #include "stdio.h"
16 #include "io.h"
17 #include "cuboot.h"
18 
19 #define TARGET_PPC_MPC52xx
20 #include "ppcboot.h"
21 
22 static bd_t bd;
23 
24 static void platform_fixups(void)
25 {
26  void *soc, *reg;
27  int div;
28  u32 sysfreq;
29 
30 
34 
35  /* Unfortunately, the specific model number is encoded in the
36  * soc node name in existing dts files -- once that is fixed,
37  * this can do a simple path lookup.
38  */
39  soc = find_node_by_devtype(NULL, "soc");
40  if (!soc)
41  soc = find_node_by_compatible(NULL, "fsl,mpc5200-immr");
42  if (!soc)
43  soc = find_node_by_compatible(NULL, "fsl,mpc5200b-immr");
44  if (soc) {
45  setprop(soc, "bus-frequency", &bd.bi_ipbfreq,
46  sizeof(bd.bi_ipbfreq));
47 
48  if (!dt_xlate_reg(soc, 0, (void*)&reg, NULL))
49  return;
50  div = in_8(reg + 0x204) & 0x0020 ? 8 : 4;
51  sysfreq = bd.bi_busfreq * div;
52  setprop(soc, "system-frequency", &sysfreq, sizeof(sysfreq));
53  }
54 }
55 
56 void platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
57  unsigned long r6, unsigned long r7)
58 {
59  CUBOOT_INIT();
62  platform_ops.fixups = platform_fixups;
63 }