split-up spl.c into spl.c, spl_mmc.c and spl_nand.c. This avoids problems with missing defines if a board does not use mmc or nand. This includes adding spl_ prefix to some functions which are now public. spl_image_t is now a public type. Added some of the common functions to omap-common.h Signed-off-by: Simon Schwarz <simonschwarzcor@gmail.com> Signed-off-by: Sandeep Paulraj <s-paulraj@ti.com>master
parent
409ef1bcfb
commit
9ea5c6efd8
@ -0,0 +1,150 @@ |
|||||||
|
/*
|
||||||
|
* (C) Copyright 2010 |
||||||
|
* Texas Instruments, <www.ti.com> |
||||||
|
* |
||||||
|
* Aneesh V <aneesh@ti.com> |
||||||
|
* |
||||||
|
* See file CREDITS for list of people who contributed to this |
||||||
|
* project. |
||||||
|
* |
||||||
|
* This program is free software; you can redistribute it and/or |
||||||
|
* modify it under the terms of the GNU General Public License as |
||||||
|
* published by the Free Software Foundation; either version 2 of |
||||||
|
* the License, or (at your option) any later version. |
||||||
|
* |
||||||
|
* This program is distributed in the hope that it will be useful, |
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||||
|
* GNU General Public License for more details. |
||||||
|
* |
||||||
|
* You should have received a copy of the GNU General Public License |
||||||
|
* along with this program; if not, write to the Free Software |
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, |
||||||
|
* MA 02111-1307 USA |
||||||
|
*/ |
||||||
|
#include <common.h> |
||||||
|
#include <asm/u-boot.h> |
||||||
|
#include <asm/utils.h> |
||||||
|
#include <asm/arch/sys_proto.h> |
||||||
|
#include <mmc.h> |
||||||
|
#include <fat.h> |
||||||
|
#include <timestamp_autogenerated.h> |
||||||
|
#include <version_autogenerated.h> |
||||||
|
#include <asm/omap_common.h> |
||||||
|
#include <asm/arch/mmc_host_def.h> |
||||||
|
|
||||||
|
DECLARE_GLOBAL_DATA_PTR; |
||||||
|
|
||||||
|
#ifdef CONFIG_GENERIC_MMC |
||||||
|
int board_mmc_init(bd_t *bis) |
||||||
|
{ |
||||||
|
switch (omap_boot_device()) { |
||||||
|
case BOOT_DEVICE_MMC1: |
||||||
|
omap_mmc_init(0); |
||||||
|
break; |
||||||
|
case BOOT_DEVICE_MMC2: |
||||||
|
omap_mmc_init(1); |
||||||
|
break; |
||||||
|
} |
||||||
|
return 0; |
||||||
|
} |
||||||
|
#endif |
||||||
|
|
||||||
|
static void mmc_load_image_raw(struct mmc *mmc) |
||||||
|
{ |
||||||
|
u32 image_size_sectors, err; |
||||||
|
const struct image_header *header; |
||||||
|
|
||||||
|
header = (struct image_header *)(CONFIG_SYS_TEXT_BASE - |
||||||
|
sizeof(struct image_header)); |
||||||
|
|
||||||
|
/* read image header to find the image size & load address */ |
||||||
|
err = mmc->block_dev.block_read(0, |
||||||
|
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR, 1, |
||||||
|
(void *)header); |
||||||
|
|
||||||
|
if (err <= 0) |
||||||
|
goto end; |
||||||
|
|
||||||
|
spl_parse_image_header(header); |
||||||
|
|
||||||
|
/* convert size to sectors - round up */ |
||||||
|
image_size_sectors = (spl_image.size + MMCSD_SECTOR_SIZE - 1) / |
||||||
|
MMCSD_SECTOR_SIZE; |
||||||
|
|
||||||
|
/* Read the header too to avoid extra memcpy */ |
||||||
|
err = mmc->block_dev.block_read(0, |
||||||
|
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR, |
||||||
|
image_size_sectors, (void *)spl_image.load_addr); |
||||||
|
|
||||||
|
end: |
||||||
|
if (err <= 0) { |
||||||
|
printf("spl: mmc blk read err - %d\n", err); |
||||||
|
hang(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
static void mmc_load_image_fat(struct mmc *mmc) |
||||||
|
{ |
||||||
|
s32 err; |
||||||
|
struct image_header *header; |
||||||
|
|
||||||
|
header = (struct image_header *)(CONFIG_SYS_TEXT_BASE - |
||||||
|
sizeof(struct image_header)); |
||||||
|
|
||||||
|
err = fat_register_device(&mmc->block_dev, |
||||||
|
CONFIG_SYS_MMC_SD_FAT_BOOT_PARTITION); |
||||||
|
if (err) { |
||||||
|
printf("spl: fat register err - %d\n", err); |
||||||
|
hang(); |
||||||
|
} |
||||||
|
|
||||||
|
err = file_fat_read(CONFIG_SPL_FAT_LOAD_PAYLOAD_NAME, |
||||||
|
(u8 *)header, sizeof(struct image_header)); |
||||||
|
if (err <= 0) |
||||||
|
goto end; |
||||||
|
|
||||||
|
spl_parse_image_header(header); |
||||||
|
|
||||||
|
err = file_fat_read(CONFIG_SPL_FAT_LOAD_PAYLOAD_NAME, |
||||||
|
(u8 *)spl_image.load_addr, 0); |
||||||
|
|
||||||
|
end: |
||||||
|
if (err <= 0) { |
||||||
|
printf("spl: error reading image %s, err - %d\n", |
||||||
|
CONFIG_SPL_FAT_LOAD_PAYLOAD_NAME, err); |
||||||
|
hang(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
void spl_mmc_load_image(void) |
||||||
|
{ |
||||||
|
struct mmc *mmc; |
||||||
|
int err; |
||||||
|
u32 boot_mode; |
||||||
|
|
||||||
|
mmc_initialize(gd->bd); |
||||||
|
/* We register only one device. So, the dev id is always 0 */ |
||||||
|
mmc = find_mmc_device(0); |
||||||
|
if (!mmc) { |
||||||
|
puts("spl: mmc device not found!!\n"); |
||||||
|
hang(); |
||||||
|
} |
||||||
|
|
||||||
|
err = mmc_init(mmc); |
||||||
|
if (err) { |
||||||
|
printf("spl: mmc init failed: err - %d\n", err); |
||||||
|
hang(); |
||||||
|
} |
||||||
|
boot_mode = omap_boot_mode(); |
||||||
|
if (boot_mode == MMCSD_MODE_RAW) { |
||||||
|
debug("boot mode - RAW\n"); |
||||||
|
mmc_load_image_raw(mmc); |
||||||
|
} else if (boot_mode == MMCSD_MODE_FAT) { |
||||||
|
debug("boot mode - FAT\n"); |
||||||
|
mmc_load_image_fat(mmc); |
||||||
|
} else { |
||||||
|
puts("spl: wrong MMC boot mode\n"); |
||||||
|
hang(); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,71 @@ |
|||||||
|
/*
|
||||||
|
* Copyright (C) 2011 |
||||||
|
* Corscience GmbH & Co. KG - Simon Schwarz <schwarz@corscience.de> |
||||||
|
* |
||||||
|
* See file CREDITS for list of people who contributed to this |
||||||
|
* project. |
||||||
|
* |
||||||
|
* This program is free software; you can redistribute it and/or |
||||||
|
* modify it under the terms of the GNU General Public License as |
||||||
|
* published by the Free Software Foundation; either version 2 of |
||||||
|
* the License, or (at your option) any later version. |
||||||
|
* |
||||||
|
* This program is distributed in the hope that it will be useful, |
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||||
|
* GNU General Public License for more details. |
||||||
|
* |
||||||
|
* You should have received a copy of the GNU General Public License |
||||||
|
* along with this program; if not, write to the Free Software |
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, |
||||||
|
* MA 02111-1307 USA |
||||||
|
*/ |
||||||
|
#include <common.h> |
||||||
|
#include <asm/u-boot.h> |
||||||
|
#include <asm/utils.h> |
||||||
|
#include <asm/arch/sys_proto.h> |
||||||
|
#include <nand.h> |
||||||
|
#include <timestamp_autogenerated.h> |
||||||
|
#include <version_autogenerated.h> |
||||||
|
#include <asm/omap_common.h> |
||||||
|
|
||||||
|
|
||||||
|
void spl_nand_load_image(void) |
||||||
|
{ |
||||||
|
struct image_header *header; |
||||||
|
switch (omap_boot_mode()) { |
||||||
|
case NAND_MODE_HW_ECC: |
||||||
|
debug("spl: nand - using hw ecc\n"); |
||||||
|
gpmc_init(); |
||||||
|
nand_init(); |
||||||
|
break; |
||||||
|
default: |
||||||
|
puts("spl: ERROR: This bootmode is not implemented - hanging"); |
||||||
|
hang(); |
||||||
|
} |
||||||
|
|
||||||
|
/*use CONFIG_SYS_TEXT_BASE as temporary storage area */ |
||||||
|
header = (struct image_header *)(CONFIG_SYS_TEXT_BASE); |
||||||
|
|
||||||
|
#ifdef CONFIG_NAND_ENV_DST |
||||||
|
nand_spl_load_image(CONFIG_ENV_OFFSET, |
||||||
|
CONFIG_SYS_NAND_PAGE_SIZE, (void *)header); |
||||||
|
spl_parse_image_header(header); |
||||||
|
nand_spl_load_image(CONFIG_ENV_OFFSET, spl_image.size, |
||||||
|
(void *)image_load_addr); |
||||||
|
#ifdef CONFIG_ENV_OFFSET_REDUND |
||||||
|
nand_spl_load_image(CONFIG_ENV_OFFSET_REDUND, |
||||||
|
CONFIG_SYS_NAND_PAGE_SIZE, (void *)header); |
||||||
|
spl_parse_image_header(header); |
||||||
|
nand_spl_load_image(CONFIG_ENV_OFFSET_REDUND, spl_image.size, |
||||||
|
(void *)image_load_addr); |
||||||
|
#endif |
||||||
|
#endif |
||||||
|
/* Load u-boot */ |
||||||
|
nand_spl_load_image(CONFIG_SYS_NAND_U_BOOT_OFFS, |
||||||
|
CONFIG_SYS_NAND_PAGE_SIZE, (void *)header); |
||||||
|
spl_parse_image_header(header); |
||||||
|
nand_spl_load_image(CONFIG_SYS_NAND_U_BOOT_OFFS, |
||||||
|
spl_image.size, (void *)spl_image.load_addr); |
||||||
|
nand_deselect(); |
||||||
|
} |
Loading…
Reference in new issue