Hrvoje Čavrak has uploaded this change for review. ( https://review.coreboot.org/c/flashrom/+/44517 )
Change subject: udelay.c: Enable providing delay calibration value through CLI
......................................................................
udelay.c: Enable providing delay calibration value through CLI
This commit implements --get-loop-delay/--set-loop-delay options to
retrieve and provide the calibration loop delay through the command line.
The delay calibration procedure can take up to few seconds, which adds up
when executed a number of times consecutively. Therefore, this provides a
means to execute it only once, and then re-use the calibrated value on
subsequent runs. Also, it implements a sanity check, expecting the value
to land within 10% of the theoretical delay expectance, otherwise it
ignores the provided value and runs the calibration procedure instead.
Signed-off-by: Hrvoje Cavrak <hrvoje(a)hrvoje.org>
Change-Id: I7c9a491c5cb5fb3af56a691a0c6af9b53dcff550
---
M cli_classic.c
M flashrom.8.tmpl
M libflashrom.c
M programmer.h
M udelay.c
5 files changed, 60 insertions(+), 7 deletions(-)
git pull ssh://review.coreboot.org:29418/flashrom refs/changes/17/44517/1
diff --git a/cli_classic.c b/cli_classic.c
index 967ff50..b023c45 100644
--- a/cli_classic.c
+++ b/cli_classic.c
@@ -63,6 +63,8 @@
" -o | --output <logfile> log output to <logfile>\n"
" --flash-contents <ref-file> assume flash contents to be <ref-file>\n"
" -L | --list-supported print supported devices\n"
+ " --set-loop-delay <value> set loop delay calibration manually\n"
+ " --get-loop-delay retrieve loop delay calibration\n"
#if CONFIG_PRINT_WIKI == 1
" -z | --list-supported-wiki print supported devices in wiki syntax\n"
#endif
@@ -118,6 +120,7 @@
int flash_name = 0, flash_size = 0;
int read_it = 0, write_it = 0, erase_it = 0, verify_it = 0;
int dont_verify_it = 0, dont_verify_all = 0, list_supported = 0, operation_specified = 0;
+ unsigned long provided_delay = 0;
struct flashrom_layout *layout = NULL;
enum programmer prog = PROGRAMMER_INVALID;
enum {
@@ -127,6 +130,8 @@
OPTION_FLASH_CONTENTS,
OPTION_FLASH_NAME,
OPTION_FLASH_SIZE,
+ OPTION_GET_LOOP_DELAY,
+ OPTION_SET_LOOP_DELAY,
};
int ret = 0;
@@ -156,6 +161,8 @@
{"help", 0, NULL, 'h'},
{"version", 0, NULL, 'R'},
{"output", 1, NULL, 'o'},
+ {"get-loop-delay", 0, NULL, OPTION_GET_LOOP_DELAY},
+ {"set-loop-delay", 1, NULL, OPTION_SET_LOOP_DELAY},
{NULL, 0, NULL, 0},
};
@@ -365,6 +372,14 @@
}
#endif /* STANDALONE */
break;
+ case OPTION_GET_LOOP_DELAY:
+ /* Make it easy for scripts to parse this by omitting anything else */
+ msg_pinfo("%lu\n", get_calibration_value());
+ exit(0);
+ break;
+ case OPTION_SET_LOOP_DELAY:
+ provided_delay = strtoul(strdup(optarg), NULL, 0);
+ break;
default:
cli_classic_abort_usage(NULL);
break;
@@ -457,7 +472,10 @@
}
/* FIXME: Delay calibration should happen in programmer code. */
- myusec_calibrate_delay();
+ if (provided_delay)
+ set_external_calibration(provided_delay);
+ else
+ myusec_calibrate_delay(0);
if (programmer_init(prog, pparam)) {
msg_perr("Error: Programmer initialization failed.\n");
diff --git a/flashrom.8.tmpl b/flashrom.8.tmpl
index db50d59..4aada91 100644
--- a/flashrom.8.tmpl
+++ b/flashrom.8.tmpl
@@ -50,7 +50,7 @@
[\fB\-E\fR|\fB\-r\fR <file>|\fB\-w\fR <file>|\fB\-v\fR <file>]
[(\fB\-l\fR <file>|\fB\-\-ifd|\fB \-\-fmap\fR|\fB\-\-fmap-file\fR <file>) [\fB\-i\fR <image>]]
[\fB\-n\fR] [\fB\-N\fR] [\fB\-f\fR])]
- [\fB\-V\fR[\fBV\fR[\fBV\fR]]] [\fB-o\fR <logfile>]
+ [\fB\-V\fR[\fBV\fR[\fBV\fR]]] [\fB-o\fR <logfile>] [\fB-d\fR get | <value>]
.SH DESCRIPTION
.B flashrom
is a utility for detecting, reading, writing, verifying and erasing flash
@@ -364,6 +364,17 @@
.TP
.B "\-R, \-\-version"
Show version information and exit.
+.TP
+.B "\-\-get\-loop\-delay"
+Retrieve the loop calibration delay value or provide one externally. Calibrate
+delay procedure can take a few seconds and for repeated execution on a large
+number of hosts it can provide a significant overhead. By getting the value,
+it can later be provided by \-\-set\-loop\-delay
+.TP
+.B "\-\-set\-loop\-delay <value>"
+This argument makes it possible to provide the calibration delay through the
+command line option.
+
.SH PROGRAMMER-SPECIFIC INFORMATION
Some programmer drivers accept further parameters to set programmer-specific
parameters. These parameters are separated from the programmer name by a
diff --git a/libflashrom.c b/libflashrom.c
index ae2d33d..92e2527 100644
--- a/libflashrom.c
+++ b/libflashrom.c
@@ -51,7 +51,7 @@
{
if (perform_selfcheck && selfcheck())
return 1;
- myusec_calibrate_delay();
+ myusec_calibrate_delay(0);
return 0;
}
diff --git a/programmer.h b/programmer.h
index c5cab18..e0925e2 100644
--- a/programmer.h
+++ b/programmer.h
@@ -280,9 +280,11 @@
/* udelay.c */
void myusec_delay(unsigned int usecs);
-void myusec_calibrate_delay(void);
+void myusec_calibrate_delay(int force);
void internal_sleep(unsigned int usecs);
void internal_delay(unsigned int usecs);
+unsigned long get_calibration_value(void);
+void set_external_calibration(unsigned long external_micro);
#if CONFIG_INTERNAL == 1
/* board_enable.c */
diff --git a/udelay.c b/udelay.c
index 6c0efc4..698f1ca 100644
--- a/udelay.c
+++ b/udelay.c
@@ -133,9 +133,9 @@
return timeusec;
}
-void myusec_calibrate_delay(void)
+void myusec_calibrate_delay(int force)
{
- if (clock_check_res())
+ if (clock_check_res() && !force)
return;
unsigned long count = 1000;
@@ -221,6 +221,28 @@
msg_pinfo("OK.\n");
}
+void set_external_calibration(unsigned long external_micro)
+{
+ micro = external_micro;
+ unsigned long elapsed = measure_delay(100000);
+ /* Do a sanity check if the provided parameter makes loops fall
+ * within 10% of the desired value. Otherwise, ignore provided value
+ * and recalibrate.
+ */
+ if (elapsed > 90000 && elapsed < 110000)
+ msg_pinfo("Provided delay is acceptable!\n");
+ else {
+ msg_pinfo("Elapsed: %lu, provided delay is NOT acceptable!\n", elapsed);
+ myusec_calibrate_delay(1); /* Ignore using the system clock for loop timing */
+ }
+}
+
+unsigned long get_calibration_value(void)
+{
+ myusec_calibrate_delay(1); /* Ignore using the system clock for loop timing */
+ return micro;
+}
+
/* Not very precise sleep. */
void internal_sleep(unsigned int usecs)
{
@@ -250,7 +272,7 @@
#else
#include <libpayload.h>
-void myusec_calibrate_delay(void)
+void myusec_calibrate_delay(int force)
{
get_cpu_speed();
}
--
To view, visit https://review.coreboot.org/c/flashrom/+/44517
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: flashrom
Gerrit-Branch: master
Gerrit-Change-Id: I7c9a491c5cb5fb3af56a691a0c6af9b53dcff550
Gerrit-Change-Number: 44517
Gerrit-PatchSet: 1
Gerrit-Owner: Hrvoje Čavrak <github(a)hrvoje.org>
Gerrit-MessageType: newchange
Hrvoje Čavrak has uploaded this change for review. ( https://review.coreboot.org/c/flashrom/+/39841 )
Change subject: udelay.c: Enable providing delay calibration value through CLI
......................................................................
udelay.c: Enable providing delay calibration value through CLI
This commit implements --delay option to retrieve and provide the calibration
loop delay through the command line. The delay calibration procedure can take
up to few seconds, which adds up when executed a number of times consecutively.
Therefore, this provides a means to execute it only once, and then re-use the
calibrated value on subsequent runs. Also, it implements a sanity check,
expecting the value to land within 10% of the theoretical delay expectance,
otherwise it ignores the provided value and runs the calibration procedure
instead.
modified: cli_classic.c
modified: flashrom.8.tmpl
modified: programmer.h
modified: udelay.c
Change-Id: Iea2a7f62300663bc0a32ed4abced57c8c55c90c8
Signed-off-by: Hrvoje Cavrak <hrvoje(a)hrvoje.org>
---
M cli_classic.c
M flashrom.8.tmpl
M programmer.h
M udelay.c
4 files changed, 51 insertions(+), 3 deletions(-)
git pull ssh://review.coreboot.org:29418/flashrom refs/changes/41/39841/1
diff --git a/cli_classic.c b/cli_classic.c
index 73cc417..f0842d4 100644
--- a/cli_classic.c
+++ b/cli_classic.c
@@ -63,6 +63,8 @@
" -o | --output <logfile> log output to <logfile>\n"
" --flash-contents <ref-file> assume flash contents to be <ref-file>\n"
" -L | --list-supported print supported devices\n"
+ " -d | --loop-delay <value> set loop delay calibration manually\n"
+ " --loop-delay get show loop delay calibration\n"
#if CONFIG_PRINT_WIKI == 1
" -z | --list-supported-wiki print supported devices in wiki syntax\n"
#endif
@@ -118,6 +120,7 @@
int flash_name = 0, flash_size = 0;
int read_it = 0, write_it = 0, erase_it = 0, verify_it = 0;
int dont_verify_it = 0, dont_verify_all = 0, list_supported = 0, operation_specified = 0;
+ unsigned long provided_delay = 0;
struct flashrom_layout *layout = NULL;
enum programmer prog = PROGRAMMER_INVALID;
enum {
@@ -130,7 +133,7 @@
};
int ret = 0;
- static const char optstring[] = "r:Rw:v:nNVEfc:l:i:p:Lzho:";
+ static const char optstring[] = "r:Rw:v:nNVEfc:l:i:p:Lzho:d:";
static const struct option long_options[] = {
{"read", 1, NULL, 'r'},
{"write", 1, NULL, 'w'},
@@ -156,6 +159,7 @@
{"help", 0, NULL, 'h'},
{"version", 0, NULL, 'R'},
{"output", 1, NULL, 'o'},
+ {"delay", 1, NULL, 'd'},
{NULL, 0, NULL, 0},
};
@@ -362,6 +366,14 @@
}
#endif /* STANDALONE */
break;
+ case 'd':
+ provided_delay = strtoul(strdup(optarg), NULL, 0);
+ if (!provided_delay) {
+ /* Make it easy for scripts to parse this by omitting anything else */
+ msg_pinfo("%lu\n", get_calibration_value());
+ exit(0);
+ }
+ break;
default:
cli_classic_abort_usage(NULL);
break;
@@ -454,7 +466,10 @@
}
/* FIXME: Delay calibration should happen in programmer code. */
- myusec_calibrate_delay();
+ if (provided_delay)
+ set_external_calibration(provided_delay);
+ else
+ myusec_calibrate_delay();
if (programmer_init(prog, pparam)) {
msg_perr("Error: Programmer initialization failed.\n");
diff --git a/flashrom.8.tmpl b/flashrom.8.tmpl
index fde98c0..c14f2de 100644
--- a/flashrom.8.tmpl
+++ b/flashrom.8.tmpl
@@ -50,7 +50,7 @@
[\fB\-E\fR|\fB\-r\fR <file>|\fB\-w\fR <file>|\fB\-v\fR <file>]
[(\fB\-l\fR <file>|\fB\-\-ifd|\fB \-\-fmap\fR|\fB\-\-fmap-file\fR <file>) [\fB\-i\fR <image>]]
[\fB\-n\fR] [\fB\-N\fR] [\fB\-f\fR])]
- [\fB\-V\fR[\fBV\fR[\fBV\fR]]] [\fB-o\fR <logfile>]
+ [\fB\-V\fR[\fBV\fR[\fBV\fR]]] [\fB-o\fR <logfile>] [\fB-d\fR get | <value>]
.SH DESCRIPTION
.B flashrom
is a utility for detecting, reading, writing, verifying and erasing flash
@@ -364,6 +364,18 @@
.TP
.B "\-R, \-\-version"
Show version information and exit.
+.TP
+.B "\-d, \-\-loop\-delay"
+Retrieve the loop calibration delay value or provide one externally. Calibrate
+delay procedure can take a few seconds and for repeated execution on a large
+number of hosts it can provide a significant overhead. Therefore, this argument
+makes it possible to provide the calibration delay through the command line
+option.
+
+To retrieve the value, run
+.BR "flashrom \-\-loop\-delay get " "and to provide it during programming, add "
+.BR "\-\-loop\-delay <value> " "to your command."
+
.SH PROGRAMMER-SPECIFIC INFORMATION
Some programmer drivers accept further parameters to set programmer-specific
parameters. These parameters are separated from the programmer name by a
diff --git a/programmer.h b/programmer.h
index 08500c6..a659a18 100644
--- a/programmer.h
+++ b/programmer.h
@@ -277,6 +277,8 @@
void myusec_calibrate_delay(void);
void internal_sleep(unsigned int usecs);
void internal_delay(unsigned int usecs);
+unsigned long get_calibration_value(void);
+void set_external_calibration(unsigned long external_micro);
#if CONFIG_INTERNAL == 1
/* board_enable.c */
diff --git a/udelay.c b/udelay.c
index 6c0efc4..90c4c9e 100644
--- a/udelay.c
+++ b/udelay.c
@@ -221,6 +221,25 @@
msg_pinfo("OK.\n");
}
+void set_external_calibration(unsigned long external_micro)
+{
+ micro = external_micro;
+ unsigned long elapsed = measure_delay(100000);
+ /* Do a sanity check if the provided parameter makes loops fall within 10% of
+ * the desired value. Otherwise, ignore provided value and recalibrate.
+ */
+ if (elapsed > 90000 && elapsed < 110000)
+ msg_pinfo("Provided delay is acceptable!\n");
+ else
+ myusec_calibrate_delay();
+}
+
+unsigned long get_calibration_value(void)
+{
+ myusec_calibrate_delay();
+ return micro;
+}
+
/* Not very precise sleep. */
void internal_sleep(unsigned int usecs)
{
--
To view, visit https://review.coreboot.org/c/flashrom/+/39841
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: flashrom
Gerrit-Branch: master
Gerrit-Change-Id: Iea2a7f62300663bc0a32ed4abced57c8c55c90c8
Gerrit-Change-Number: 39841
Gerrit-PatchSet: 1
Gerrit-Owner: Hrvoje Čavrak <github(a)hrvoje.org>
Gerrit-MessageType: newchange
David Hendricks has uploaded this change for review. ( https://review.coreboot.org/c/flashrom/+/44095 )
Change subject: git-hooks: Use check-style in pre-commit hook
......................................................................
git-hooks: Use check-style in pre-commit hook
This adds the check-style script to the pre-commit hook and makes
some minor changes to warnings printed by the script. Errors are
be non-fatal for now.
Change-Id: I58b9e64f825de0ca222277a7d16c3904368edfe6
Signed-off-by: David Hendricks <david.hendricks(a)gmail.com>
---
M util/git-hooks/pre-commit
M util/lint/check-style
2 files changed, 22 insertions(+), 13 deletions(-)
git pull ssh://review.coreboot.org:29418/flashrom refs/changes/95/44095/1
diff --git a/util/git-hooks/pre-commit b/util/git-hooks/pre-commit
index dbccb9e..db6b256 100755
--- a/util/git-hooks/pre-commit
+++ b/util/git-hooks/pre-commit
@@ -1,9 +1,22 @@
#!/bin/sh
+
#
-# A hook script to verify what is about to be committed.
-# Called by "git commit" with no arguments. The hook should
-# exit with non-zero status after issuing an appropriate message if
-# it wants to stop the commit.
+# This file is part of the flashrom 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; version 2 of the License.
+#
+# 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.
+#
+
+set -e # -o errexit
+set -u # -o nounset
# Check for whitespace errors
-git diff-index --check --cached HEAD -- || exit 1
+git diff-index --check --cached HEAD --
+
+util/lint/check-style
diff --git a/util/lint/check-style b/util/lint/check-style
index 91ed197..06ced0b 100755
--- a/util/lint/check-style
+++ b/util/lint/check-style
@@ -89,6 +89,7 @@
printf "Warning: clang-format executable not found.\n"
printf "Set the correct path in $(canonicalize_filename "$0").\n"
printf "Skipping clang-format style check test.\n"
+ printf "Changes that violate style guidelines will not be accepted upstream.\n"
# exit 1
exit 0
fi
@@ -133,12 +134,7 @@
printf "and the clang-format rules:\n\n"
cat "$patch"
-printf "\nYou can apply these changes with:\n git apply $patch\n"
-printf "(may need to be called from the root directory of your repository)\n"
-
-# FIXME: clang-format is currently unusable, so don't abort the commit.
-# printf "Aborting commit. Apply changes and commit again or skip checking with"
-# printf " --no-verify (not recommended).\n"
-# exit 1
-
+printf "\nApply these changes using:\n"
+printf " git apply $patch\n"
+printf "Changes that violate style guidelines will not be accepted upstream.\n"
exit 0
--
To view, visit https://review.coreboot.org/c/flashrom/+/44095
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: flashrom
Gerrit-Branch: master
Gerrit-Change-Id: I58b9e64f825de0ca222277a7d16c3904368edfe6
Gerrit-Change-Number: 44095
Gerrit-PatchSet: 1
Gerrit-Owner: David Hendricks <david.hendricks(a)gmail.com>
Gerrit-MessageType: newchange
David Hendricks has uploaded this change for review. ( https://review.coreboot.org/c/flashrom/+/43602 )
Change subject: git-hooks: Add check-style for pre-commit hook
......................................................................
git-hooks: Add check-style for pre-commit hook
This imports check-style and some related lint tools from coreboot
for the pre-commit hook:
- Add check-style rule to Makefile
- Replace the current pre-commit hook with the one from coreboot,
omitting lint-stable for the time being.
- Import checkpatch.pl, along with certain dependencies (spelling.txt
and const_structs.checkpatch) and .checkpatch.conf.
- Add .clang-format from CB:38673.
Change-Id: Ieb77aa1aa2911e081c69c93929a2f1c4430cd2b9
Signed-off-by: David Hendricks <david.hendricks(a)gmail.com>
---
A .checkpatch.conf
A .clang-format
M Makefile
M util/git-hooks/pre-commit
A util/lint/check-style
A util/lint/checkpatch.pl
A util/lint/const_structs.checkpatch
A util/lint/lint-007-checkpatch
A util/lint/spelling.txt
9 files changed, 16,655 insertions(+), 8 deletions(-)
git pull ssh://review.coreboot.org:29418/flashrom refs/changes/02/43602/1
--
To view, visit https://review.coreboot.org/c/flashrom/+/43602
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: flashrom
Gerrit-Branch: master
Gerrit-Change-Id: Ieb77aa1aa2911e081c69c93929a2f1c4430cd2b9
Gerrit-Change-Number: 43602
Gerrit-PatchSet: 1
Gerrit-Owner: David Hendricks <david.hendricks(a)gmail.com>
Gerrit-MessageType: newchange