diff options
Diffstat (limited to 'meta-ampere/meta-common/recipes-devtools')
-rw-r--r-- | meta-ampere/meta-common/recipes-devtools/mtd/mtd-utils/0001-flashcp-support-offset-option.patch | 143 | ||||
-rw-r--r-- | meta-ampere/meta-common/recipes-devtools/mtd/mtd-utils_%.bbappend | 3 |
2 files changed, 146 insertions, 0 deletions
diff --git a/meta-ampere/meta-common/recipes-devtools/mtd/mtd-utils/0001-flashcp-support-offset-option.patch b/meta-ampere/meta-common/recipes-devtools/mtd/mtd-utils/0001-flashcp-support-offset-option.patch new file mode 100644 index 000000000..174a1cd6d --- /dev/null +++ b/meta-ampere/meta-common/recipes-devtools/mtd/mtd-utils/0001-flashcp-support-offset-option.patch @@ -0,0 +1,143 @@ +From e29268bb252b4eec5830816912817a2650b04ee9 Mon Sep 17 00:00:00 2001 +From: Tung Nguyen <tung.nguyen@amperecomputing.com> +Date: Tue, 20 Jul 2021 15:32:32 +0700 +Subject: [PATCH] flashcp support offset option + +The flashcp command from mtd-utils just support to flash from offset 0. +Add offset option to specify the start offset so that firmware can be +flashed correctly + +Signed-off-by: Tung Nguyen <tung.nguyen@amperecomputing.com> + +%% original patch: 0001-support-flash-offset.patch +--- + misc-utils/flashcp.c | 50 +++++++++++++++++++++++++++++++++++++++++--- + 1 file changed, 47 insertions(+), 3 deletions(-) + +diff --git a/misc-utils/flashcp.c b/misc-utils/flashcp.c +index d7b0a59..d1ef79c 100644 +--- a/misc-utils/flashcp.c ++++ b/misc-utils/flashcp.c +@@ -90,7 +90,7 @@ static NORETURN void showusage(bool error) + "\n" + "Flash Copy - Written by Abraham van der Merwe <abraham@2d3d.co.za>\n" + "\n" +- "usage: %1$s [ -v | --verbose | -A | --erase-all ] <filename> <device>\n" ++ "usage: %1$s [ -v | --verbose | -A | --erase-all ] <filename> <device> <offset>\n" + " %1$s -h | --help\n" + " %1$s -V | --version\n" + "\n" +@@ -100,6 +100,7 @@ static NORETURN void showusage(bool error) + " -V | --version Show version information and exit\n" + " <filename> File which you want to copy to flash\n" + " <device> Flash device to write to (e.g. /dev/mtd0, /dev/mtd1, etc.)\n" ++ " <offset> The start offset. Optional, default: 0\n" + "\n", + PROGRAM_NAME); + +@@ -154,6 +155,16 @@ static void safe_rewind (int fd,const char *filename) + } + } + ++static int safe_rewind_offset(int fd, const char *filename, off_t offset) ++{ ++ if (lseek(fd, offset, SEEK_SET) < 0) { ++ log_printf(LOG_ERROR, "While seeking to start of %s: %m\n", filename); ++ return EXIT_FAILURE; ++ } ++ ++ return EXIT_SUCCESS; ++} ++ + /******************************************************************************/ + + static int dev_fd = -1,fil_fd = -1; +@@ -167,6 +178,8 @@ static void cleanup (void) + int main (int argc,char *argv[]) + { + const char *filename = NULL,*device = NULL; ++ off_t offset; ++ + int i,flags = FLAG_NONE; + ssize_t result; + size_t size,written; +@@ -218,6 +231,20 @@ int main (int argc,char *argv[]) + showusage(true); + } + } ++ ++ if (optind + 3 == argc) { ++ flags |= FLAG_FILENAME; ++ filename = argv[optind]; ++ DEBUG("Got filename: %s\n", filename); ++ ++ flags |= FLAG_DEVICE; ++ device = argv[optind + 1]; ++ DEBUG("Got device: %s\n", device); ++ ++ offset = strtoul(argv[optind + 2], NULL, 16); ++ DEBUG("Got offset: 0x%x\n", offset); ++ } ++ + if (optind+2 == argc) { + flags |= FLAG_FILENAME; + filename = argv[optind]; +@@ -226,6 +253,8 @@ int main (int argc,char *argv[]) + flags |= FLAG_DEVICE; + device = argv[optind+1]; + DEBUG("Got device: %s\n",device); ++ ++ offset = 0; + } + + if (flags & FLAG_HELP || device == NULL) +@@ -257,6 +286,12 @@ int main (int argc,char *argv[]) + exit (EXIT_FAILURE); + } + ++ /* does offset is out of the mtd */ ++ if (offset > mtd.size) { ++ log_printf(LOG_ERROR, "%s offset won't fit into %s!\n", offset, device); ++ exit(EXIT_FAILURE); ++ } ++ + /***************************************************** + * erase enough blocks so that we can write the file * + *****************************************************/ +@@ -271,6 +306,8 @@ int main (int argc,char *argv[]) + } + else + { ++ /* Erase from the offset */ ++ erase.start = offset; + erase.length = (filestat.st_size + mtd.erasesize - 1) / mtd.erasesize; + erase.length *= mtd.erasesize; + } +@@ -317,6 +354,12 @@ int main (int argc,char *argv[]) + size = filestat.st_size; + i = BUFSIZE; + written = 0; ++ ++ /* if offset is greater than 0 */ ++ if (offset) ++ if (safe_rewind_offset(dev_fd, device, offset) != EXIT_SUCCESS) ++ return EXIT_FAILURE; ++ + while (size) + { + if (size < BUFSIZE) i = size; +@@ -361,8 +404,9 @@ int main (int argc,char *argv[]) + * verify that flash == file data * + **********************************/ + +- safe_rewind (fil_fd,filename); +- safe_rewind (dev_fd,device); ++ safe_rewind(fil_fd, filename); ++ safe_rewind_offset(dev_fd, device, offset); ++ + size = filestat.st_size; + i = BUFSIZE; + written = 0; +-- +2.17.1 + diff --git a/meta-ampere/meta-common/recipes-devtools/mtd/mtd-utils_%.bbappend b/meta-ampere/meta-common/recipes-devtools/mtd/mtd-utils_%.bbappend new file mode 100644 index 000000000..08aa3ce69 --- /dev/null +++ b/meta-ampere/meta-common/recipes-devtools/mtd/mtd-utils_%.bbappend @@ -0,0 +1,3 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" + +SRC_URI += "file://0001-flashcp-support-offset-option.patch " |