board: samsung: refactor host programs
authorMasahiro Yamada <yamada.m@jp.panasonic.com>
Tue, 4 Feb 2014 08:24:11 +0000 (17:24 +0900)
committerTom Rini <trini@ti.com>
Wed, 19 Feb 2014 16:07:49 +0000 (11:07 -0500)
Some Samsung boards have their own tools under board/samsung/<board>/tools/.
This commit refactor more makefiles with "hostprogs-y".

Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Makefile
board/samsung/origen/Makefile
board/samsung/origen/tools/mkorigenspl.c [new file with mode: 0644]
board/samsung/origen/tools/mkv310_image.c [deleted file]
board/samsung/smdkv310/Makefile
board/samsung/smdkv310/tools/mksmdkv310spl.c [new file with mode: 0644]
board/samsung/smdkv310/tools/mkv310_image.c [deleted file]
spl/Makefile

index a1e2810b33dd6320b9fabffc7405de6f346e19c2..8c585b60a844319d75d31abd73749ea7c1489257 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -809,6 +809,7 @@ clean:
               $(obj)tools/proftool
        @rm -f $(obj)board/cray/L1/{bootscript.c,bootscript.image}        \
               $(obj)board/matrix_vision/*/bootscript.img                 \
+              $(obj)spl/board/samsung/$(BOARD)/tools/mk$(BOARD)spl       \
               $(obj)u-boot.lds                                           \
               $(obj)arch/blackfin/cpu/init.{lds,elf}
        @rm -f $(obj)include/bmp_logo.h
index e8818bf9b11f18a6a855bcc685d61c1a12a5c184..31e88f4424600e80e411c720e448cfcb10b49d90 100644 (file)
@@ -4,16 +4,16 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-ifndef CONFIG_SPL_BUILD
-obj-y  += origen.o
-endif
-
 ifdef CONFIG_SPL_BUILD
-all: $(OBJTREE)/tools/mk$(BOARD)spl
-endif
+hostprogs-y := tools/mkorigenspl
+always := $(hostprogs-y)
 
-# Fix ME after we implement hostprogs-y.
-ifdef CONFIG_SPL_BUILD
-$(OBJTREE)/tools/mk$(BOARD)spl:        tools/mkv310_image.c
-       $(HOSTCC) tools/mkv310_image.c -o $(OBJTREE)/tools/mk$(BOARD)spl
+# omit -O2 option to suppress
+#   warning: dereferencing type-punned pointer will break strict-aliasing rules
+#
+# TODO:
+# Fix the root cause in tools/mkorigenspl.c and delete the following work-around
+$(obj)tools/mkorigenspl: HOSTCFLAGS:=$(filter-out -O2,$(HOSTCFLAGS))
+else
+obj-y  += origen.o
 endif
diff --git a/board/samsung/origen/tools/mkorigenspl.c b/board/samsung/origen/tools/mkorigenspl.c
new file mode 100644 (file)
index 0000000..3ed20ef
--- /dev/null
@@ -0,0 +1,110 @@
+/*
+ * Copyright (C) 2011 Samsung Electronics
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <string.h>
+#include <sys/stat.h>
+
+#define BUFSIZE                        (16*1024)
+#define IMG_SIZE               (16*1024)
+#define SPL_HEADER_SIZE                16
+#define FILE_PERM              (S_IRUSR | S_IWUSR | S_IRGRP \
+                               | S_IWGRP | S_IROTH | S_IWOTH)
+#define SPL_HEADER             "S5PC210 HEADER  "
+/*
+* 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 "$(BOARD)-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 "$(BOARD)-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);
+
+       memcpy(&buffer[0], SPL_HEADER, SPL_HEADER_SIZE);
+
+       count = (len < (IMG_SIZE - SPL_HEADER_SIZE))
+               ? len : (IMG_SIZE - SPL_HEADER_SIZE);
+
+       if (read(ifd, buffer + SPL_HEADER_SIZE, 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; i < IMG_SIZE - SPL_HEADER_SIZE; i++)
+               checksum += buffer[i+16];
+
+       *(ulong *)buffer ^= 0x1f;
+       *(ulong *)(buffer+4) ^= checksum;
+
+       for (i = 1; i < SPL_HEADER_SIZE; i++)
+               buffer[i] ^= buffer[i-1];
+
+       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/board/samsung/origen/tools/mkv310_image.c b/board/samsung/origen/tools/mkv310_image.c
deleted file mode 100644 (file)
index 3ed20ef..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright (C) 2011 Samsung Electronics
- *
- * SPDX-License-Identifier:    GPL-2.0+
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <sys/stat.h>
-
-#define BUFSIZE                        (16*1024)
-#define IMG_SIZE               (16*1024)
-#define SPL_HEADER_SIZE                16
-#define FILE_PERM              (S_IRUSR | S_IWUSR | S_IRGRP \
-                               | S_IWGRP | S_IROTH | S_IWOTH)
-#define SPL_HEADER             "S5PC210 HEADER  "
-/*
-* 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 "$(BOARD)-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 "$(BOARD)-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);
-
-       memcpy(&buffer[0], SPL_HEADER, SPL_HEADER_SIZE);
-
-       count = (len < (IMG_SIZE - SPL_HEADER_SIZE))
-               ? len : (IMG_SIZE - SPL_HEADER_SIZE);
-
-       if (read(ifd, buffer + SPL_HEADER_SIZE, 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; i < IMG_SIZE - SPL_HEADER_SIZE; i++)
-               checksum += buffer[i+16];
-
-       *(ulong *)buffer ^= 0x1f;
-       *(ulong *)(buffer+4) ^= checksum;
-
-       for (i = 1; i < SPL_HEADER_SIZE; i++)
-               buffer[i] ^= buffer[i-1];
-
-       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;
-}
index dbc621bd61b191711c2db7d370af31c30d52c14d..9e37b4e78077618d20ebb4836347de344ba8975b 100644 (file)
@@ -4,16 +4,9 @@
 # SPDX-License-Identifier:     GPL-2.0+
 #
 
-ifndef CONFIG_SPL_BUILD
-obj-y  += smdkv310.o
-endif
-
 ifdef CONFIG_SPL_BUILD
-all: $(OBJTREE)/tools/mk$(BOARD)spl
-endif
-
-# Fix ME after we implement hostprogs-y.
-ifdef CONFIG_SPL_BUILD
-$(OBJTREE)/tools/mk$(BOARD)spl:        tools/mkv310_image.c
-       $(HOSTCC) tools/mkv310_image.c -o $(OBJTREE)/tools/mk$(BOARD)spl
+hostprogs-y := tools/mksmdkv310spl
+always := $(hostprogs-y)
+else
+obj-y  += smdkv310.o
 endif
diff --git a/board/samsung/smdkv310/tools/mksmdkv310spl.c b/board/samsung/smdkv310/tools/mksmdkv310spl.c
new file mode 100644 (file)
index 0000000..9a64ca6
--- /dev/null
@@ -0,0 +1,101 @@
+/*
+ * Copyright (C) 2011 Samsung Electronics
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <string.h>
+#include <sys/stat.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/board/samsung/smdkv310/tools/mkv310_image.c b/board/samsung/smdkv310/tools/mkv310_image.c
deleted file mode 100644 (file)
index 9a64ca6..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright (C) 2011 Samsung Electronics
- *
- * SPDX-License-Identifier:    GPL-2.0+
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <sys/stat.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;
-}
index 3c40a7e523c1807a63a3a4f3d2563aef9e2e6128..5339338b2b6a3638b78c14cc4c3c1f6c21639804 100644 (file)
@@ -165,8 +165,8 @@ else
 VAR_SIZE_PARAM =
 endif
 $(obj)$(BOARD)-spl.bin: $(obj)u-boot-spl.bin
-       $(if $(wildcard $(OBJTREE)/tools/mk$(BOARD)spl),\
-       $(OBJTREE)/tools/mk$(BOARD)spl,\
+       $(if $(wildcard $(OBJTREE)/spl/board/samsung/$(BOARD)/tools/mk$(BOARD)spl),\
+       $(OBJTREE)/spl/board/samsung/$(BOARD)/tools/mk$(BOARD)spl,\
        $(OBJTREE)/tools/mkexynosspl) $(VAR_SIZE_PARAM) $< $@
 endif