blob: 88e02155ee33362dd9452467c343e26d418485a1 [file] [log] [blame]
Suman Anna3b431102022-05-25 13:38:47 +05301// SPDX-License-Identifier: GPL-2.0+
2/*
3 * Board specific initialization for AM62x platforms
4 *
5 * Copyright (C) 2020-2022 Texas Instruments Incorporated - https://www.ti.com/
6 * Suman Anna <s-anna@ti.com>
7 *
8 */
9
Nikhil M Jain155a0822023-01-31 15:35:19 +053010#include <env.h>
Suman Anna3b431102022-05-25 13:38:47 +053011#include <spl.h>
Nikhil M Jain57a531b2023-04-10 14:19:12 +053012#include <init.h>
Nikhil M Jain155a0822023-01-31 15:35:19 +053013#include <video.h>
14#include <splash.h>
Nikhil M Jain3ad584b2023-06-21 16:29:52 +053015#include <cpu_func.h>
Georgi Vlaev18c0fbf2022-06-14 17:45:33 +030016#include <k3-ddrss.h>
Suman Anna3b431102022-05-25 13:38:47 +053017#include <fdt_support.h>
Nikhil M Jain155a0822023-01-31 15:35:19 +053018#include <asm/io.h>
Suman Anna3b431102022-05-25 13:38:47 +053019#include <asm/arch/hardware.h>
Nikhil M Jain155a0822023-01-31 15:35:19 +053020#include <dm/uclass.h>
Suman Anna3b431102022-05-25 13:38:47 +053021
22DECLARE_GLOBAL_DATA_PTR;
23
Nikhil M Jain1ff64a22023-04-20 17:41:11 +053024#if CONFIG_IS_ENABLED(SPLASH_SCREEN)
Nikhil M Jain155a0822023-01-31 15:35:19 +053025static struct splash_location default_splash_locations[] = {
26 {
Nikhil M Jain1ff64a22023-04-20 17:41:11 +053027 .name = "sf",
28 .storage = SPLASH_STORAGE_SF,
29 .flags = SPLASH_STORAGE_RAW,
30 .offset = 0x700000,
31 },
32 {
Nikhil M Jain155a0822023-01-31 15:35:19 +053033 .name = "mmc",
34 .storage = SPLASH_STORAGE_MMC,
35 .flags = SPLASH_STORAGE_FS,
36 .devpart = "1:1",
37 },
38};
39
40int splash_screen_prepare(void)
41{
42 return splash_source_load(default_splash_locations,
43 ARRAY_SIZE(default_splash_locations));
44}
45#endif
46
Suman Anna3b431102022-05-25 13:38:47 +053047int board_init(void)
48{
49 return 0;
50}
51
52int dram_init(void)
53{
Georgi Vlaev8a9ceb42022-06-14 17:45:32 +030054 return fdtdec_setup_mem_size_base();
Suman Anna3b431102022-05-25 13:38:47 +053055}
56
57int dram_init_banksize(void)
58{
Georgi Vlaev8a9ceb42022-06-14 17:45:32 +030059 return fdtdec_setup_memory_banksize();
Suman Anna3b431102022-05-25 13:38:47 +053060}
Georgi Vlaev18c0fbf2022-06-14 17:45:33 +030061
62#if defined(CONFIG_SPL_BUILD)
Nikhil M Jain57a531b2023-04-10 14:19:12 +053063
Nikhil M Jain57a531b2023-04-10 14:19:12 +053064void spl_board_init(void)
65{
Nikhil M Jain57a531b2023-04-10 14:19:12 +053066 enable_caches();
Nikhil M Jaindafda902023-07-18 14:27:29 +053067 if (IS_ENABLED(CONFIG_SPL_SPLASH_SCREEN) && IS_ENABLED(CONFIG_SPL_BMP))
68 splash_display();
69
Nikhil M Jain57a531b2023-04-10 14:19:12 +053070}
71
Georgi Vlaev18c0fbf2022-06-14 17:45:33 +030072#if defined(CONFIG_K3_AM64_DDRSS)
73static void fixup_ddr_driver_for_ecc(struct spl_image_info *spl_image)
74{
75 struct udevice *dev;
76 int ret;
77
78 dram_init_banksize();
79
80 ret = uclass_get_device(UCLASS_RAM, 0, &dev);
81 if (ret)
82 panic("Cannot get RAM device for ddr size fixup: %d\n", ret);
83
84 ret = k3_ddrss_ddr_fdt_fixup(dev, spl_image->fdt_addr, gd->bd);
85 if (ret)
86 printf("Error fixing up ddr node for ECC use! %d\n", ret);
87}
88#else
89static void fixup_memory_node(struct spl_image_info *spl_image)
90{
91 u64 start[CONFIG_NR_DRAM_BANKS];
92 u64 size[CONFIG_NR_DRAM_BANKS];
93 int bank;
94 int ret;
95
96 dram_init();
97 dram_init_banksize();
98
99 for (bank = 0; bank < CONFIG_NR_DRAM_BANKS; bank++) {
100 start[bank] = gd->bd->bi_dram[bank].start;
101 size[bank] = gd->bd->bi_dram[bank].size;
102 }
103
104 /* dram_init functions use SPL fdt, and we must fixup u-boot fdt */
105 ret = fdt_fixup_memory_banks(spl_image->fdt_addr, start, size,
106 CONFIG_NR_DRAM_BANKS);
107 if (ret)
108 printf("Error fixing up memory node! %d\n", ret);
109}
110#endif
111
112void spl_perform_fixups(struct spl_image_info *spl_image)
113{
114#if defined(CONFIG_K3_AM64_DDRSS)
115 fixup_ddr_driver_for_ecc(spl_image);
116#else
117 fixup_memory_node(spl_image);
118#endif
119}
120#endif