blob: 699e5ca54a730cb5fba49efe2250657f7469f5fd [file] [log] [blame]
Jim Liu147c0002022-09-27 16:45:15 +08001// SPDX-License-Identifier: GPL-2.0+
2/*
3 * Copyright (c) 2022 Nuvoton Technology Corp.
4 */
5
Jim Liu147c0002022-09-27 16:45:15 +08006#include <dm.h>
Michael Change6039fc2025-02-10 10:37:10 +08007#include <event.h>
Jim Liu147c0002022-09-27 16:45:15 +08008#include <asm/io.h>
9#include <asm/arch/gcr.h>
Jim Liuc32c95c2023-11-14 16:51:59 +080010#include "../common/uart.h"
Jim Liu147c0002022-09-27 16:45:15 +080011
Jim Liuc5cc4bc2023-07-04 16:00:14 +080012#define SR_MII_CTRL_SWR_BIT15 15
13
14#define DRAM_512MB_ECC_SIZE 0x1C000000ULL
15#define DRAM_512MB_SIZE 0x20000000ULL
16#define DRAM_1GB_ECC_SIZE 0x38000000ULL
17#define DRAM_1GB_SIZE 0x40000000ULL
18#define DRAM_2GB_ECC_SIZE 0x70000000ULL
19#define DRAM_2GB_SIZE 0x80000000ULL
Jim Liu25efe152023-10-23 15:02:24 +080020#define DRAM_4GB_ECC_SIZE 0xE0000000ULL
Jim Liuc5cc4bc2023-07-04 16:00:14 +080021#define DRAM_4GB_SIZE 0x100000000ULL
22
Jim Liu147c0002022-09-27 16:45:15 +080023DECLARE_GLOBAL_DATA_PTR;
24
25int board_init(void)
26{
27 return 0;
28}
29
Jim Liua7fe44a2024-04-23 15:22:10 +080030phys_size_t get_effective_memsize(void)
31{
32 /* Use bank0 only */
33 if (gd->ram_size > DRAM_2GB_SIZE)
34 return DRAM_2GB_SIZE;
35
36 return gd->ram_size;
37}
38
Jim Liu147c0002022-09-27 16:45:15 +080039int dram_init(void)
40{
41 struct npcm_gcr *gcr = (struct npcm_gcr *)NPCM_GCR_BA;
42
43 /*
Jim Liuc5cc4bc2023-07-04 16:00:14 +080044 * get dram active size value from bootblock.
45 * Value sent using scrpad_03 register.
46 * feature available in bootblock 0.0.6 and above.
Jim Liu147c0002022-09-27 16:45:15 +080047 */
Jim Liuc5cc4bc2023-07-04 16:00:14 +080048
49 gd->ram_size = readl(&gcr->scrpad_c);
Jim Liuc5cc4bc2023-07-04 16:00:14 +080050
Jim Liu25efe152023-10-23 15:02:24 +080051 if (gd->ram_size == 0)
Jim Liuc5cc4bc2023-07-04 16:00:14 +080052 gd->ram_size = readl(&gcr->scrpad_b);
Jim Liu25efe152023-10-23 15:02:24 +080053 else
Jim Liuc5cc4bc2023-07-04 16:00:14 +080054 gd->ram_size *= 0x100000ULL;
Jim Liuc5cc4bc2023-07-04 16:00:14 +080055
Jim Liuc5cc4bc2023-07-04 16:00:14 +080056 debug("ram_size: %llx ", gd->ram_size);
57
Jim Liu25efe152023-10-23 15:02:24 +080058 return 0;
59}
60
61int dram_init_banksize(void)
62{
Jim Liu5f162682024-09-04 10:41:04 +080063 phys_size_t ram_size = gd->ram_size;
Jim Liu25efe152023-10-23 15:02:24 +080064
65 gd->bd->bi_dram[0].start = 0;
66
Jim Liu5f162682024-09-04 10:41:04 +080067 #if defined(CONFIG_SYS_MEM_TOP_HIDE)
68 ram_size += CONFIG_SYS_MEM_TOP_HIDE;
69 #endif
70 switch (ram_size) {
Jim Liuc5cc4bc2023-07-04 16:00:14 +080071 case DRAM_512MB_ECC_SIZE:
72 case DRAM_512MB_SIZE:
73 case DRAM_1GB_ECC_SIZE:
74 case DRAM_1GB_SIZE:
75 case DRAM_2GB_ECC_SIZE:
76 case DRAM_2GB_SIZE:
Jim Liu5f162682024-09-04 10:41:04 +080077 gd->bd->bi_dram[0].size = ram_size;
Jim Liuc5cc4bc2023-07-04 16:00:14 +080078 gd->bd->bi_dram[1].start = 0;
79 gd->bd->bi_dram[1].size = 0;
80 break;
81 case DRAM_4GB_ECC_SIZE:
Jim Liu25efe152023-10-23 15:02:24 +080082 gd->bd->bi_dram[0].size = DRAM_2GB_SIZE;
Jim Liuc5cc4bc2023-07-04 16:00:14 +080083 gd->bd->bi_dram[1].start = DRAM_4GB_SIZE;
Jim Liu25efe152023-10-23 15:02:24 +080084 gd->bd->bi_dram[1].size = DRAM_2GB_SIZE -
85 (DRAM_4GB_SIZE - DRAM_4GB_ECC_SIZE);
Jim Liuc5cc4bc2023-07-04 16:00:14 +080086 break;
87 case DRAM_4GB_SIZE:
88 gd->bd->bi_dram[0].size = DRAM_2GB_SIZE;
89 gd->bd->bi_dram[1].start = DRAM_4GB_SIZE;
90 gd->bd->bi_dram[1].size = DRAM_2GB_SIZE;
Jim Liuc5cc4bc2023-07-04 16:00:14 +080091 break;
92 default:
93 gd->bd->bi_dram[0].size = DRAM_1GB_SIZE;
94 gd->bd->bi_dram[1].start = 0;
95 gd->bd->bi_dram[1].size = 0;
96 break;
97 }
98
Jim Liuc5cc4bc2023-07-04 16:00:14 +080099 return 0;
100}
101
Michael Change6039fc2025-02-10 10:37:10 +0800102EVENT_SPY_SIMPLE(EVT_LAST_STAGE_INIT, board_set_console);
Jim Liuc32c95c2023-11-14 16:51:59 +0800103