blob: 59e1a4256462d382324473c84b76acb9f40353b3 [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
6#include <common.h>
7#include <dm.h>
8#include <asm/io.h>
9#include <asm/arch/gcr.h>
10
Jim Liuc5cc4bc2023-07-04 16:00:14 +080011#define SR_MII_CTRL_SWR_BIT15 15
12
13#define DRAM_512MB_ECC_SIZE 0x1C000000ULL
14#define DRAM_512MB_SIZE 0x20000000ULL
15#define DRAM_1GB_ECC_SIZE 0x38000000ULL
16#define DRAM_1GB_SIZE 0x40000000ULL
17#define DRAM_2GB_ECC_SIZE 0x70000000ULL
18#define DRAM_2GB_SIZE 0x80000000ULL
Jim Liu25efe152023-10-23 15:02:24 +080019#define DRAM_4GB_ECC_SIZE 0xE0000000ULL
Jim Liuc5cc4bc2023-07-04 16:00:14 +080020#define DRAM_4GB_SIZE 0x100000000ULL
21
Jim Liu147c0002022-09-27 16:45:15 +080022DECLARE_GLOBAL_DATA_PTR;
23
24int board_init(void)
25{
26 return 0;
27}
28
29int dram_init(void)
30{
31 struct npcm_gcr *gcr = (struct npcm_gcr *)NPCM_GCR_BA;
32
33 /*
Jim Liuc5cc4bc2023-07-04 16:00:14 +080034 * get dram active size value from bootblock.
35 * Value sent using scrpad_03 register.
36 * feature available in bootblock 0.0.6 and above.
Jim Liu147c0002022-09-27 16:45:15 +080037 */
Jim Liuc5cc4bc2023-07-04 16:00:14 +080038
39 gd->ram_size = readl(&gcr->scrpad_c);
Jim Liuc5cc4bc2023-07-04 16:00:14 +080040
Jim Liu25efe152023-10-23 15:02:24 +080041 if (gd->ram_size == 0)
Jim Liuc5cc4bc2023-07-04 16:00:14 +080042 gd->ram_size = readl(&gcr->scrpad_b);
Jim Liu25efe152023-10-23 15:02:24 +080043 else
Jim Liuc5cc4bc2023-07-04 16:00:14 +080044 gd->ram_size *= 0x100000ULL;
Jim Liuc5cc4bc2023-07-04 16:00:14 +080045
Jim Liuc5cc4bc2023-07-04 16:00:14 +080046 debug("ram_size: %llx ", gd->ram_size);
47
Jim Liu25efe152023-10-23 15:02:24 +080048 return 0;
49}
50
51int dram_init_banksize(void)
52{
53
54 gd->bd->bi_dram[0].start = 0;
55
Jim Liuc5cc4bc2023-07-04 16:00:14 +080056 switch (gd->ram_size) {
57 case DRAM_512MB_ECC_SIZE:
58 case DRAM_512MB_SIZE:
59 case DRAM_1GB_ECC_SIZE:
60 case DRAM_1GB_SIZE:
61 case DRAM_2GB_ECC_SIZE:
62 case DRAM_2GB_SIZE:
63 gd->bd->bi_dram[0].size = gd->ram_size;
64 gd->bd->bi_dram[1].start = 0;
65 gd->bd->bi_dram[1].size = 0;
66 break;
67 case DRAM_4GB_ECC_SIZE:
Jim Liu25efe152023-10-23 15:02:24 +080068 gd->bd->bi_dram[0].size = DRAM_2GB_SIZE;
Jim Liuc5cc4bc2023-07-04 16:00:14 +080069 gd->bd->bi_dram[1].start = DRAM_4GB_SIZE;
Jim Liu25efe152023-10-23 15:02:24 +080070 gd->bd->bi_dram[1].size = DRAM_2GB_SIZE -
71 (DRAM_4GB_SIZE - DRAM_4GB_ECC_SIZE);
72 /* use bank0 only */
73 gd->ram_size = DRAM_2GB_SIZE;
Jim Liuc5cc4bc2023-07-04 16:00:14 +080074 break;
75 case DRAM_4GB_SIZE:
76 gd->bd->bi_dram[0].size = DRAM_2GB_SIZE;
77 gd->bd->bi_dram[1].start = DRAM_4GB_SIZE;
78 gd->bd->bi_dram[1].size = DRAM_2GB_SIZE;
Jim Liu25efe152023-10-23 15:02:24 +080079 /* use bank0 only */
80 gd->ram_size = DRAM_2GB_SIZE;
Jim Liuc5cc4bc2023-07-04 16:00:14 +080081 break;
82 default:
83 gd->bd->bi_dram[0].size = DRAM_1GB_SIZE;
84 gd->bd->bi_dram[1].start = 0;
85 gd->bd->bi_dram[1].size = 0;
Jim Liu25efe152023-10-23 15:02:24 +080086 gd->ram_size = DRAM_1GB_SIZE;
Jim Liuc5cc4bc2023-07-04 16:00:14 +080087 break;
88 }
89
Jim Liuc5cc4bc2023-07-04 16:00:14 +080090 return 0;
91}
92