1*65dd1507SSimon Glass /* 2*65dd1507SSimon Glass * Copyright (c) 2016 Google, Inc 3*65dd1507SSimon Glass * 4*65dd1507SSimon Glass * SPDX-License-Identifier: GPL-2.0 5*65dd1507SSimon Glass */ 6*65dd1507SSimon Glass 7*65dd1507SSimon Glass #ifndef __ASM_MRC_COMMON_H 8*65dd1507SSimon Glass #define __ASM_MRC_COMMON_H 9*65dd1507SSimon Glass 10*65dd1507SSimon Glass #include <linux/linkage.h> 11*65dd1507SSimon Glass 12*65dd1507SSimon Glass /** 13*65dd1507SSimon Glass * mrc_common_init() - Set up SDRAM 14*65dd1507SSimon Glass * 15*65dd1507SSimon Glass * This calls the memory reference code (MRC) to set up SDRAM 16*65dd1507SSimon Glass * 17*65dd1507SSimon Glass * @dev: Northbridge device 18*65dd1507SSimon Glass * @pei_data: Platform-specific data required by the MRC 19*65dd1507SSimon Glass * @use_asm_linkage: true if the call to MRC requires asmlinkage, false if it 20*65dd1507SSimon Glass * uses normal U-Boot calling 21*65dd1507SSimon Glass * @return 0 if OK, -ve on error 22*65dd1507SSimon Glass */ 23*65dd1507SSimon Glass int mrc_common_init(struct udevice *dev, void *pei_data, bool use_asm_linkage); 24*65dd1507SSimon Glass 25*65dd1507SSimon Glass asmlinkage void sdram_console_tx_byte(unsigned char byte); 26*65dd1507SSimon Glass 27*65dd1507SSimon Glass int mrc_locate_spd(struct udevice *dev, int size, const void **spd_datap); 28*65dd1507SSimon Glass 29*65dd1507SSimon Glass void report_memory_config(void); 30*65dd1507SSimon Glass 31*65dd1507SSimon Glass /** 32*65dd1507SSimon Glass * mrc_add_memory_area() - Add a new usable memory area to our list 33*65dd1507SSimon Glass * 34*65dd1507SSimon Glass * Note: @start and @end must not span the first 4GB boundary 35*65dd1507SSimon Glass * 36*65dd1507SSimon Glass * @info: Place to store memory info 37*65dd1507SSimon Glass * @start: Start of this memory area 38*65dd1507SSimon Glass * @end: End of this memory area + 1 39*65dd1507SSimon Glass */ 40*65dd1507SSimon Glass int mrc_add_memory_area(struct memory_info *info, uint64_t start, 41*65dd1507SSimon Glass uint64_t end); 42*65dd1507SSimon Glass 43*65dd1507SSimon Glass /* 44*65dd1507SSimon Glass * This function looks for the highest region of memory lower than 4GB which 45*65dd1507SSimon Glass * has enough space for U-Boot where U-Boot is aligned on a page boundary. 46*65dd1507SSimon Glass * It overrides the default implementation found elsewhere which simply 47*65dd1507SSimon Glass * picks the end of ram, wherever that may be. The location of the stack, 48*65dd1507SSimon Glass * the relocation address, and how far U-Boot is moved by relocation are 49*65dd1507SSimon Glass * set in the global data structure. 50*65dd1507SSimon Glass */ 51*65dd1507SSimon Glass ulong mrc_common_board_get_usable_ram_top(ulong total_size); 52*65dd1507SSimon Glass 53*65dd1507SSimon Glass void mrc_common_dram_init_banksize(void); 54*65dd1507SSimon Glass 55*65dd1507SSimon Glass #endif 56