// SPDX-License-Identifier: GPL-2.0+ /* * Copyright (C) 2022 StarFive Technology Co., Ltd. * Author: Yanhong Wang */ #include #include #include #include #include #include #include #include #define CSR_U74_FEATURE_DISABLE 0x7c1 DECLARE_GLOBAL_DATA_PTR; static bool check_ddr_size(phys_size_t size) { switch (size) { case SZ_2: case SZ_4: case SZ_8: case SZ_16: return true; default: return false; } } int spl_soc_init(void) { int ret; struct udevice *dev; phys_size_t size; ret = fdtdec_setup_mem_size_base(); if (ret) return ret; /* Read the definition of the DDR size from eeprom, and if not, * use the definition in DT */ size = (get_ddr_size_from_eeprom() >> 16) & 0xFF; if (check_ddr_size(size)) gd->ram_size = size << 30; /* DDR init */ ret = uclass_get_device(UCLASS_RAM, 0, &dev); if (ret) { debug("DRAM init failed: %d\n", ret); return ret; } return 0; } void harts_early_init(void) { /* * Feature Disable CSR * * Clear feature disable CSR to '0' to turn on all features for * each core. This operation must be in M-mode. */ if (CONFIG_IS_ENABLED(RISCV_MMODE)) csr_write(CSR_U74_FEATURE_DISABLE, 0); }