diff options
Diffstat (limited to 'mmc_spl')
| -rw-r--r-- | mmc_spl/board/samsung/smdkv310/Makefile | 105 | ||||
| -rw-r--r-- | mmc_spl/board/samsung/smdkv310/mmc_boot.c | 85 | ||||
| -rw-r--r-- | mmc_spl/board/samsung/smdkv310/tools/mkv310_image.c | 116 | ||||
| -rw-r--r-- | mmc_spl/board/samsung/smdkv310/u-boot.lds | 86 | 
4 files changed, 392 insertions, 0 deletions
| diff --git a/mmc_spl/board/samsung/smdkv310/Makefile b/mmc_spl/board/samsung/smdkv310/Makefile new file mode 100644 index 000000000..f1ce066a1 --- /dev/null +++ b/mmc_spl/board/samsung/smdkv310/Makefile @@ -0,0 +1,105 @@ +# +# (C) Copyright 2006-2007 +# Stefan Roese, DENX Software Engineering, sr@denx.de. +# +# (C) Copyright 2008 +# Guennadi Liakhovetki, DENX Software Engineering, <lg@denx.de> +# +# (C) Copyright 2011 +# Chander Kashyap, Samsung Electronics, <k.chander@samsung.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 +# + +CONFIG_MMC_SPL	= y + +include $(TOPDIR)/config.mk + +LDSCRIPT= $(TOPDIR)/mmc_spl/board/$(BOARDDIR)/u-boot.lds +LDFLAGS	= -Bstatic -T $(mmcobj)u-boot.lds -Ttext $(CONFIG_SYS_TEXT_BASE) $(PLATFORM_LDFLAGS) +AFLAGS	+= -DCONFIG_MMC_SPL +CFLAGS	+= -DCONFIG_MMC_SPL +CFLAGS	+= -DCONFIG_PRELOADER + +SOBJS	= start.o mem_setup.o lowlevel_init.o +COBJS	= mmc_boot.o + +SRCS	:= $(addprefix $(obj),$(SOBJS:.o=.S) $(COBJS:.o=.c)) +OBJS	:= $(addprefix $(obj),$(SOBJS) $(COBJS)) +__OBJS	:= $(SOBJS) $(COBJS) +LNDIR	:= $(OBJTREE)/mmc_spl/board/$(BOARDDIR) + +mmcobj	:= $(OBJTREE)/mmc_spl/ + + +MKV310_MMC_SPL_EXEC = mkv310_mmc_spl_exec +MMC_SPL_BIN = u-boot-mmc-spl.bin + +ALL = $(mmcobj)u-boot-spl $(mmcobj)u-boot-spl.bin $(mmcobj)$(MMC_SPL_BIN) + +all:    $(obj).depend $(ALL) + +$(mmcobj)$(MMC_SPL_BIN):  $(mmcobj)u-boot-spl.bin tools/$(MKV310_MMC_SPL_EXEC) +	./tools/$(MKV310_MMC_SPL_EXEC) $(mmcobj)u-boot-spl.bin $(mmcobj)$(MMC_SPL_BIN) +	rm -f tools/$(MKV310_MMC_SPL_EXEC) + +tools/$(MKV310_MMC_SPL_EXEC): tools/mkv310_image.c +	$(HOSTCC) tools/mkv310_image.c -o tools/$(MKV310_MMC_SPL_EXEC) + +$(mmcobj)u-boot-spl.bin:	$(mmcobj)u-boot-spl +	$(OBJCOPY) ${OBJCFLAGS} -O binary $< $@ + +$(mmcobj)u-boot-spl:	$(OBJS) $(mmcobj)u-boot.lds +	cd $(LNDIR) && $(LD) $(LDFLAGS) $(__OBJS) \ +		-Map $(mmcobj)u-boot-spl.map \ +		-o $(mmcobj)u-boot-spl + +$(mmcobj)u-boot.lds: $(LDSCRIPT) +	$(CPP) $(CPPFLAGS) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$^ >$@ + +# create symbolic links for common files + +# from cpu directory +$(obj)start.S: +	@rm -f $@ +	@ln -s $(TOPDIR)/arch/arm/cpu/armv7/start.S $@ + +# from board directory +$(obj)mem_setup.S: +	@rm -f $@ +	@ln -s $(TOPDIR)/board/samsung/smdkv310/mem_setup.S $@ + +$(obj)lowlevel_init.S: +	@rm -f $@ +	@ln -s $(TOPDIR)/board/samsung/smdkv310/lowlevel_init.S $@ + +######################################################################### + +$(obj)%.o:	$(obj)%.S +	$(CC) $(AFLAGS) -c -o $@ $< + +$(obj)%.o:	$(obj)%.c +	$(CC) $(CFLAGS) -c -o $@ $< + +# defines $(obj).depend target +include $(SRCTREE)/rules.mk + +sinclude $(obj).depend + +######################################################################### diff --git a/mmc_spl/board/samsung/smdkv310/mmc_boot.c b/mmc_spl/board/samsung/smdkv310/mmc_boot.c new file mode 100644 index 000000000..566f34eb0 --- /dev/null +++ b/mmc_spl/board/samsung/smdkv310/mmc_boot.c @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2011 Samsung Electronics + * + * 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<config.h> + +typedef u32(*copy_sd_mmc_to_mem) \ +	(u32 start_block, u32 block_count, u32 *dest_addr); + + +void copy_uboot_to_ram(void) +{ +	copy_sd_mmc_to_mem copy_bl2 = (copy_sd_mmc_to_mem)(0x00002488); +	copy_bl2(BL2_START_OFFSET,\ +		BL2_SIZE_BLOC_COUNT, (u32 *)CONFIG_SYS_TEXT_BASE); +} + +void board_init_f(unsigned long bootflag) +{ +	__attribute__((noreturn)) void (*uboot)(void); +	copy_uboot_to_ram(); + +	/* Jump to U-Boot image */ +	uboot = (void *)CONFIG_SYS_TEXT_BASE; +	(*uboot)(); +	/* Never returns Here */ +} + +/* Place Holders */ +void board_init_r(gd_t *id, ulong dest_addr) +{ +	/*Function attribute is no-return*/ +	/*This Function never executes*/ +	while (1) +		; +} + +void do_undefined_instruction(struct pt_regs *pt_regs) +{ +} + +void do_software_interrupt(struct pt_regs *pt_regs) +{ +} + +void do_prefetch_abort(struct pt_regs *pt_regs) +{ +} + +void do_data_abort(struct pt_regs *pt_regs) +{ +} + +void do_not_used(struct pt_regs *pt_regs) +{ +} + +void do_fiq(struct pt_regs *pt_regs) +{ +} + +#ifndef CONFIG_USE_IRQ +void do_irq(struct pt_regs *pt_regs) +{ +} +#endif diff --git a/mmc_spl/board/samsung/smdkv310/tools/mkv310_image.c b/mmc_spl/board/samsung/smdkv310/tools/mkv310_image.c new file mode 100644 index 000000000..b98f23390 --- /dev/null +++ b/mmc_spl/board/samsung/smdkv310/tools/mkv310_image.c @@ -0,0 +1,116 @@ +/* + * Copyright (C) 2011 Samsung Electronics + * + * 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 <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <fcntl.h> +#include <errno.h> +#include <string.h> + +#define CHECKSUM_OFFSET		(14*1024-4) +#define BUFSIZE			(16*1024) +#define FILE_PERM		(S_IRUSR | S_IWUSR | S_IRGRP \ +				| S_IWGRP | S_IROTH | S_IWOTH) +/* +* Requirement: +* IROM code reads first 14K bytes from boot device. +* It then calculates the checksum of 14K-4 bytes and compare with data at +* 14K-4 offset. +* +* This function takes two filenames: +* IN  "u-boot-spl.bin" and +* OUT "u-boot-mmc-spl.bin" as filenames. +* It reads the "u-boot-spl.bin" in 16K buffer. +* It calculates checksum of 14K-4 Bytes and stores at 14K-4 offset in buffer. +* It writes the buffer to "u-boot-mmc-spl.bin" file. +*/ + +int main(int argc, char **argv) +{ +	int i, len; +	unsigned char buffer[BUFSIZE] = {0}; +	int ifd, ofd; +	unsigned int checksum = 0, count; + +	if (argc != 3) { +		printf(" %d Wrong number of arguments\n", argc); +		exit(EXIT_FAILURE); +	} + +	ifd = open(argv[1], O_RDONLY); +	if (ifd < 0) { +		fprintf(stderr, "%s: Can't open %s: %s\n", +			argv[0], argv[1], strerror(errno)); +		exit(EXIT_FAILURE); +	} + +	ofd = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC, FILE_PERM); +	if (ifd < 0) { +		fprintf(stderr, "%s: Can't open %s: %s\n", +			argv[0], argv[2], strerror(errno)); +		if (ifd) +			close(ifd); +		exit(EXIT_FAILURE); +	} + +	len = lseek(ifd, 0, SEEK_END); +	lseek(ifd, 0, SEEK_SET); + +	count = (len < CHECKSUM_OFFSET) ? len : CHECKSUM_OFFSET; + +	if (read(ifd, buffer, count) != count) { +		fprintf(stderr, "%s: Can't read %s: %s\n", +			argv[0], argv[1], strerror(errno)); + +		if (ifd) +			close(ifd); +		if (ofd) +			close(ofd); + +		exit(EXIT_FAILURE); +	} + +	for (i = 0, checksum = 0; i < CHECKSUM_OFFSET; i++) +		checksum += buffer[i]; + +	memcpy(&buffer[CHECKSUM_OFFSET], &checksum, sizeof(checksum)); + +	if (write(ofd, buffer, BUFSIZE) != BUFSIZE) { +		fprintf(stderr, "%s: Can't write %s: %s\n", +			argv[0], argv[2], strerror(errno)); + +		if (ifd) +			close(ifd); +		if (ofd) +			close(ofd); + +		exit(EXIT_FAILURE); +	} + +	if (ifd) +		close(ifd); +	if (ofd) +		close(ofd); + +	return EXIT_SUCCESS; +} diff --git a/mmc_spl/board/samsung/smdkv310/u-boot.lds b/mmc_spl/board/samsung/smdkv310/u-boot.lds new file mode 100644 index 000000000..61cd16a71 --- /dev/null +++ b/mmc_spl/board/samsung/smdkv310/u-boot.lds @@ -0,0 +1,86 @@ +/* + * (C) Copyright 2011 + * Chander Kashyap, Samsung Electronics, <k.chander@samsung.com> + * + * January 2004 - Changed to support H4 device + * Copyright (c) 2004-2008 Texas Instruments + * + * (C) Copyright 2002 + * Gary Jennejohn, DENX Software Engineering, <garyj@denx.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 + */ + +OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") +OUTPUT_ARCH(arm) +ENTRY(_start) +SECTIONS +{ +	. = 0x00000000; + +	. = ALIGN(4); +	.text	: +	{ +		start.o	(.text) +		*(.text) +	} + +	. = ALIGN(4); +	.rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) } + +	. = ALIGN(4); +	.data : { +		*(.data) +	} + +	. = ALIGN(4); + +	. = .; +	__u_boot_cmd_start = .; +	.u_boot_cmd : { *(.u_boot_cmd) } +	__u_boot_cmd_end = .; + +	. = ALIGN(4); + +	.rel.dyn : { +		__rel_dyn_start = .; +		*(.rel*) +		__rel_dyn_end = .; +	} + +	.dynsym : { +		__dynsym_start = .; +		*(.dynsym) +	} + +	_end = .; + +	.bss __rel_dyn_start (OVERLAY) : { +		__bss_start = .; +		*(.bss) +		 . = ALIGN(4); +		__bss_end__ = .; +	} + +	/DISCARD/ : { *(.dynstr*) } +	/DISCARD/ : { *(.dynamic*) } +	/DISCARD/ : { *(.plt*) } +	/DISCARD/ : { *(.interp*) } +	/DISCARD/ : { *(.gnu*) } +} |