1*33d34646SStefan Roese /* 2*33d34646SStefan Roese * Copyright (C) 2012 Stefan Roese <sr@denx.de> 3*33d34646SStefan Roese * 4*33d34646SStefan Roese * See file CREDITS for list of people who contributed to this 5*33d34646SStefan Roese * project. 6*33d34646SStefan Roese * 7*33d34646SStefan Roese * This program is free software; you can redistribute it and/or 8*33d34646SStefan Roese * modify it under the terms of the GNU General Public License as 9*33d34646SStefan Roese * published by the Free Software Foundation; either version 2 of 10*33d34646SStefan Roese * the License, or (at your option) any later version. 11*33d34646SStefan Roese * 12*33d34646SStefan Roese * This program is distributed in the hope that it will be useful, 13*33d34646SStefan Roese * but WITHOUT ANY WARRANTY; without even the implied warranty of 14*33d34646SStefan Roese * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15*33d34646SStefan Roese * GNU General Public License for more details. 16*33d34646SStefan Roese */ 17*33d34646SStefan Roese 18*33d34646SStefan Roese #include <common.h> 19*33d34646SStefan Roese #include <spl.h> 20*33d34646SStefan Roese 21*33d34646SStefan Roese void spl_nor_load_image(void) 22*33d34646SStefan Roese { 23*33d34646SStefan Roese /* 24*33d34646SStefan Roese * Loading of the payload to SDRAM is done with skipping of 25*33d34646SStefan Roese * the mkimage header in this SPL NOR driver 26*33d34646SStefan Roese */ 27*33d34646SStefan Roese spl_image.flags |= SPL_COPY_PAYLOAD_ONLY; 28*33d34646SStefan Roese 29*33d34646SStefan Roese if (spl_start_uboot()) { 30*33d34646SStefan Roese /* 31*33d34646SStefan Roese * Load real U-Boot from its location in NOR flash to its 32*33d34646SStefan Roese * defined location in SDRAM 33*33d34646SStefan Roese */ 34*33d34646SStefan Roese spl_parse_image_header( 35*33d34646SStefan Roese (const struct image_header *)CONFIG_SYS_UBOOT_BASE); 36*33d34646SStefan Roese 37*33d34646SStefan Roese memcpy((void *)spl_image.load_addr, 38*33d34646SStefan Roese (void *)(CONFIG_SYS_UBOOT_BASE + 39*33d34646SStefan Roese sizeof(struct image_header)), 40*33d34646SStefan Roese spl_image.size); 41*33d34646SStefan Roese } else { 42*33d34646SStefan Roese /* 43*33d34646SStefan Roese * Load Linux from its location in NOR flash to its defined 44*33d34646SStefan Roese * location in SDRAM 45*33d34646SStefan Roese */ 46*33d34646SStefan Roese spl_parse_image_header( 47*33d34646SStefan Roese (const struct image_header *)CONFIG_SYS_OS_BASE); 48*33d34646SStefan Roese 49*33d34646SStefan Roese memcpy((void *)spl_image.load_addr, 50*33d34646SStefan Roese (void *)(CONFIG_SYS_OS_BASE + 51*33d34646SStefan Roese sizeof(struct image_header)), 52*33d34646SStefan Roese spl_image.size); 53*33d34646SStefan Roese 54*33d34646SStefan Roese /* 55*33d34646SStefan Roese * Copy DT blob (fdt) to SDRAM. Passing pointer to flash 56*33d34646SStefan Roese * doesn't work (16 KiB should be enough for DT) 57*33d34646SStefan Roese */ 58*33d34646SStefan Roese memcpy((void *)CONFIG_SYS_SPL_ARGS_ADDR, 59*33d34646SStefan Roese (void *)(CONFIG_SYS_FDT_BASE), 60*33d34646SStefan Roese (16 << 10)); 61*33d34646SStefan Roese } 62*33d34646SStefan Roese } 63