123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- // SPDX-License-Identifier: GPL-2.0+
- /*
- * Copyright (c) Aspeed Technology Inc.
- */
- #include <common.h>
- #include <dm.h>
- #include <ram.h>
- #include <timer.h>
- #include <asm/io.h>
- #include <asm/arch/timer.h>
- #include <linux/bitops.h>
- #include <linux/err.h>
- #include <dm/uclass.h>
- #include <asm/arch/scu_ast2600.h>
- #include <asm/global_data.h>
- DECLARE_GLOBAL_DATA_PTR;
- /* Memory Control registers */
- #define MCR_BASE 0x1e6e0000
- #define MCR_CONF (MCR_BASE + 0x004)
- /* bit fields of MCR_CONF */
- #define MCR_CONF_ECC_EN BIT(7)
- #define MCR_CONF_VGA_MEMSZ_MASK GENMASK(3, 2)
- #define MCR_CONF_VGA_MEMSZ_SHIFT 2
- #define MCR_CONF_MEMSZ_MASK GENMASK(1, 0)
- #define MCR_CONF_MEMSZ_SHIFT 0
- int dram_init(void)
- {
- int ret;
- struct udevice *dev;
- struct ram_info ram;
- ret = uclass_get_device(UCLASS_RAM, 0, &dev);
- if (ret) {
- debug("cannot get DRAM driver\n");
- return ret;
- }
- ret = ram_get_info(dev, &ram);
- if (ret) {
- debug("cannot get DRAM information\n");
- return ret;
- }
- gd->ram_size = ram.size;
- return 0;
- }
- int board_init(void)
- {
- int i = 0, rc;
- struct udevice *dev;
- gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100;
- while (1) {
- rc = uclass_get_device(UCLASS_MISC, i++, &dev);
- if (rc)
- break;
- }
- return 0;
- }
- void board_add_ram_info(int use_default)
- {
- int rc;
- uint32_t conf;
- uint32_t ecc, act_size, vga_rsvd;
- struct udevice *scu_dev;
- struct ast2600_scu *scu;
- rc = uclass_get_device_by_driver(UCLASS_CLK,
- DM_DRIVER_GET(aspeed_ast2600_scu), &scu_dev);
- if (rc) {
- debug("%s: cannot find SCU device, rc=%d\n", __func__, rc);
- return;
- }
- scu = devfdt_get_addr_ptr(scu_dev);
- if (IS_ERR_OR_NULL(scu)) {
- debug("%s: cannot get SCU address pointer\n", __func__);
- return;
- }
- conf = readl(MCR_CONF);
- ecc = conf & MCR_CONF_ECC_EN;
- act_size = 0x100 << ((conf & MCR_CONF_MEMSZ_MASK) >> MCR_CONF_MEMSZ_SHIFT);
- vga_rsvd = 0x8 << ((conf & MCR_CONF_VGA_MEMSZ_MASK) >> MCR_CONF_VGA_MEMSZ_SHIFT);
- /* no VGA reservation if efuse VGA disable bit is set */
- if (readl(scu->efuse) & SCU_EFUSE_DIS_VGA)
- vga_rsvd = 0;
- printf(" (capacity:%d MiB, VGA:%d MiB), ECC %s", act_size,
- vga_rsvd, (ecc) ? "on" : "off");
- }
- void enable_caches(void)
- {
- /* get rid of the warning message */
- }
|