// SPDX-License-Identifier: GPL-2.0+ /* * Copyright (C) 2024, Texas Instruments Incorporated - https://www.ti.com/ */ #include #include #include #include #include __weak int dram_init(void) { return 0; } __weak int dram_init_banksize(void) { return 0; } #if defined(CONFIG_SPL_BUILD) void fixup_ddr_driver_for_ecc(struct spl_image_info *spl_image) { struct udevice *dev; int ret, ctr = 1; dram_init_banksize(); ret = uclass_get_device(UCLASS_RAM, 0, &dev); if (ret) panic("Cannnot get RAM device for ddr size fixup: %d\n", ret); ret = k3_ddrss_ddr_fdt_fixup(dev, spl_image->fdt_addr, gd->bd); if (ret) printf("Error fixing up ddr node for ECC use! %d\n", ret); ret = uclass_next_device_err(&dev); while (ret && ret != -ENODEV) { ret = k3_ddrss_ddr_fdt_fixup(dev, spl_image->fdt_addr, gd->bd); if (ret) printf("Error fixing up ddr node %d for ECC use! %d\n", ctr, ret); ret = uclass_next_device_err(&dev); ctr++; } } void fixup_memory_node(struct spl_image_info *spl_image) { u64 start[CONFIG_NR_DRAM_BANKS]; u64 size[CONFIG_NR_DRAM_BANKS]; int bank; int ret; dram_init(); dram_init_banksize(); for (bank = 0; bank < CONFIG_NR_DRAM_BANKS; bank++) { start[bank] = gd->bd->bi_dram[bank].start; size[bank] = gd->bd->bi_dram[bank].size; } ret = fdt_fixup_memory_banks(spl_image->fdt_addr, start, size, CONFIG_NR_DRAM_BANKS); if (ret) printf("Error fixing up memory node! %d\n", ret); } #endif