]> git.ipfire.org Git - thirdparty/u-boot.git/blame - arch/arm/mach-imx/mx5/soc.c
common: Drop net.h from common header
[thirdparty/u-boot.git] / arch / arm / mach-imx / mx5 / soc.c
CommitLineData
83d290c5 1// SPDX-License-Identifier: GPL-2.0+
64fdf452
SB
2/*
3 * (C) Copyright 2007
4 * Sascha Hauer, Pengutronix
5 *
6 * (C) Copyright 2009 Freescale Semiconductor, Inc.
64fdf452
SB
7 */
8
9#include <common.h>
9edefc27 10#include <cpu_func.h>
64fdf452 11#include <asm/arch/imx-regs.h>
e4d34492 12#include <asm/arch/clock.h>
77f11a99 13#include <asm/arch/sys_proto.h>
90526e9f 14#include <asm/cache.h>
77f11a99 15
1221ce45 16#include <linux/errno.h>
64fdf452 17#include <asm/io.h>
552a848e 18#include <asm/mach-imx/boot_mode.h>
64fdf452 19
595f3e56 20#if !(defined(CONFIG_MX51) || defined(CONFIG_MX53))
ff9f475d
JL
21#error "CPU_TYPE not defined"
22#endif
23
64fdf452
SB
24u32 get_cpu_rev(void)
25{
595f3e56
LHR
26#ifdef CONFIG_MX51
27 int system_rev = 0x51000;
28#else
29 int system_rev = 0x53000;
30#endif
ff9f475d 31 int reg = __raw_readl(ROM_SI_REV);
64fdf452 32
595f3e56 33#if defined(CONFIG_MX51)
64fdf452
SB
34 switch (reg) {
35 case 0x02:
ff9f475d 36 system_rev |= CHIP_REV_1_1;
64fdf452
SB
37 break;
38 case 0x10:
39 if ((__raw_readl(GPIO1_BASE_ADDR + 0x0) & (0x1 << 22)) == 0)
ff9f475d 40 system_rev |= CHIP_REV_2_5;
64fdf452 41 else
ff9f475d 42 system_rev |= CHIP_REV_2_0;
64fdf452
SB
43 break;
44 case 0x20:
ff9f475d 45 system_rev |= CHIP_REV_3_0;
64fdf452 46 break;
64fdf452 47 default:
ff9f475d 48 system_rev |= CHIP_REV_1_0;
64fdf452
SB
49 break;
50 }
595f3e56 51#else
aa1cb689 52 if (reg < 0x20)
595f3e56 53 system_rev |= CHIP_REV_1_0;
aa1cb689
FE
54 else
55 system_rev |= reg;
595f3e56 56#endif
64fdf452
SB
57 return system_rev;
58}
59
11c08d4e
FE
60#ifdef CONFIG_REVISION_TAG
61u32 __weak get_board_rev(void)
62{
63 return get_cpu_rev();
64}
65#endif
66
10015025 67#if !CONFIG_IS_ENABLED(SYS_DCACHE_OFF)
78ff1a6c
BT
68void enable_caches(void)
69{
70 /* Enable D-cache. I-cache is already enabled in start.S */
71 dcache_enable();
72}
73#endif
74
565e39c5 75#if defined(CONFIG_FEC_MXC)
0d8a7499 76void imx_get_mac_from_fuse(int dev_id, unsigned char *mac)
565e39c5
LHR
77{
78 int i;
79 struct iim_regs *iim = (struct iim_regs *)IMX_IIM_BASE;
80 struct fuse_bank *bank = &iim->bank[1];
81 struct fuse_bank1_regs *fuse =
82 (struct fuse_bank1_regs *)bank->fuse_regs;
83
84 for (i = 0; i < 6; i++)
85 mac[i] = readl(&fuse->mac_addr[i]) & 0xff;
86}
87#endif
88
124a06d7
TK
89#ifdef CONFIG_MX53
90void boot_mode_apply(unsigned cfg_val)
91{
92 writel(cfg_val, &((struct srtc_regs *)SRTC_BASE_ADDR)->lpgr);
93}
94/*
95 * cfg_val will be used for
96 * Boot_cfg3[7:0]:Boot_cfg2[7:0]:Boot_cfg1[7:0]
97 *
98 * If bit 28 of LPGR is set upon watchdog reset,
99 * bits[25:0] of LPGR will move to SBMR.
100 */
101const struct boot_mode soc_boot_modes[] = {
102 {"normal", MAKE_CFGVAL(0x00, 0x00, 0x00, 0x00)},
103 /* usb or serial download */
104 {"usb", MAKE_CFGVAL(0x00, 0x00, 0x00, 0x13)},
105 {"sata", MAKE_CFGVAL(0x28, 0x00, 0x00, 0x12)},
106 {"escpi1:0", MAKE_CFGVAL(0x38, 0x20, 0x00, 0x12)},
107 {"escpi1:1", MAKE_CFGVAL(0x38, 0x20, 0x04, 0x12)},
108 {"escpi1:2", MAKE_CFGVAL(0x38, 0x20, 0x08, 0x12)},
109 {"escpi1:3", MAKE_CFGVAL(0x38, 0x20, 0x0c, 0x12)},
110 /* 4 bit bus width */
111 {"esdhc1", MAKE_CFGVAL(0x40, 0x20, 0x00, 0x12)},
112 {"esdhc2", MAKE_CFGVAL(0x40, 0x20, 0x08, 0x12)},
113 {"esdhc3", MAKE_CFGVAL(0x40, 0x20, 0x10, 0x12)},
114 {"esdhc4", MAKE_CFGVAL(0x40, 0x20, 0x18, 0x12)},
115 {NULL, 0},
116};
117#endif