blob: dbd328cb49f8fbce4f20d08140a2f2564822dd66 [file] [log] [blame]
Paul Burton96c68472018-12-16 19:25:22 -03001// SPDX-License-Identifier: GPL-2.0+
2/*
3 * JZ4780 common routines
4 *
5 * Copyright (c) 2013 Imagination Technologies
6 * Author: Paul Burton <paul.burton@imgtec.com>
7 */
8
9#include <config.h>
10#include <common.h>
11#include <asm/io.h>
12#include <asm/sections.h>
13#include <mach/jz4780.h>
14#include <mach/jz4780_dram.h>
15#include <mmc.h>
16#include <spl.h>
17
18#ifdef CONFIG_SPL_BUILD
19/* Pointer to the global data structure for SPL */
20DECLARE_GLOBAL_DATA_PTR;
21gd_t gdata __attribute__ ((section(".bss")));
22
23void board_init_f(ulong dummy)
24{
25 typedef void __noreturn (*image_entry_noargs_t)(void);
26 struct mmc *mmc;
27 unsigned long count;
28 struct image_header *header;
29 int ret;
30
31 /* Set global data pointer */
32 gd = &gdata;
33
34 timer_init();
35 pll_init();
36 sdram_init();
37 enable_caches();
38
39 /* Clear the BSS */
40 memset(__bss_start, 0, (char *)&__bss_end - __bss_start);
41
42 gd->flags |= GD_FLG_SPL_INIT;
43
44 ret = mmc_initialize(NULL);
45 if (ret)
46 hang();
47
48 mmc = find_mmc_device(BOOT_DEVICE_MMC1);
49 if (ret)
50 hang();
51
52 ret = mmc_init(mmc);
53 if (ret)
54 hang();
55
56 header = (struct image_header *)(CONFIG_SYS_TEXT_BASE -
57 sizeof(struct image_header));
58
59 count = blk_dread(mmc_get_blk_desc(mmc),
60 CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR,
61 0x800, header);
62 if (count == 0)
63 hang();
64
65 image_entry_noargs_t image_entry =
66 (image_entry_noargs_t)CONFIG_SYS_TEXT_BASE;
67
68 image_entry();
69
70 hang();
71}
72#endif /* CONFIG_SPL_BUILD */
73
74ulong board_get_usable_ram_top(ulong total_size)
75{
76 return CONFIG_SYS_SDRAM_BASE + (256 * 1024 * 1024);
77}
78
79int print_cpuinfo(void)
80{
81 printf("CPU: Ingenic JZ4780\n");
82 return 0;
83}