chromiumos/platform/vpd.git
12 months agovpd: Change target selection syntax for flashrom. 15/66315/3 master
Hung-Te Lin [Tue, 20 Aug 2013 06:59:51 +0000 (14:59 +0800)]
vpd: Change target selection syntax for flashrom.

The "-p internal:bus=spi" is deprecated by "-p host".

BUG=none
TEST=vpd -l # successfully listed on Link.

Change-Id: I9b3452f19cf893a7f66e2f509bf2cd646c47acf3
Reviewed-on: https://gerrit.chromium.org/gerrit/66315
Reviewed-by: Yung-Chieh Lo <yjlou@chromium.org>
Tested-by: Hung-Te Lin <hungte@chromium.org>
Commit-Queue: Hung-Te Lin <hungte@chromium.org>

14 months agoFix the bug of re-writing flash in vpd -l. 64/56764/2 factory-4290.B factory-4455.B factory-pit-4280.B factory-pit-4390.B factory-pit-4471.B factory-spring-4262.B firmware-falco_peppy-4389.B firmware-leon-4389.26.B firmware-pit-4482.B firmware-wolf-4389.24.B release-R29-4319.B release-R30-4537.B stabilize-4255.B stabilize-4287.B stabilize-4443.B stabilize-4512.B
Louis Yung-Chieh Lo [Tue, 28 May 2013 03:50:16 +0000 (11:50 +0800)]
Fix the bug of re-writing flash in vpd -l.

The modified variable was unexpectly ++ even if no -d is specified.

Signed-off-by: Louis Yung-Chieh Lo <yjlou@chromium.org>
BUG=chrome-os-partner:19748
TEST=make test && vpd -l on link
original time is 7.5 secs.
new time is 1.2 secs.

Change-Id: If9504ae48512e7c53cd4c21a141cf8d3d13b2498
Reviewed-on: https://gerrit.chromium.org/gerrit/56764
Commit-Queue: Yung-Chieh Lo <yjlou@chromium.org>
Tested-by: Yung-Chieh Lo <yjlou@chromium.org>
Reviewed-by: David Hendricks <dhendrix@chromium.org>
15 months agoSupport multiple -d arguments in one line. 20/51420/5
Louis Yung-Chieh Lo [Thu, 16 May 2013 03:25:39 +0000 (11:25 +0800)]
Support multiple -d arguments in one line.

The idea is adding a new function subtractContainer() which is like
mergeContainer() and doing similar with -s.

Also refactor the test cases.

Signed-off-by: Louis Yung-Chieh Lo <yjlou@chromium.org>
BUG=chrome-os-partner:18159
TEST=sudo emerge vpd && emerge-link vpd && make test

Change-Id: I0c0697c8f7a4c78b81b91bfccd57cfa396ece6be
Reviewed-on: https://gerrit.chromium.org/gerrit/51420
Commit-Queue: Yung-Chieh Lo <yjlou@chromium.org>
Reviewed-by: Yung-Chieh Lo <yjlou@chromium.org>
Tested-by: Yung-Chieh Lo <yjlou@chromium.org>
15 months agoFix the segmentation fault bug. 80/51280/2
Louis Yung-Chieh Lo [Wed, 15 May 2013 09:38:47 +0000 (17:38 +0800)]
Fix the segmentation fault bug.

Also includes the test cases.

Signed-off-by: Louis Yung-Chieh Lo <yjlou@chromium.org>
BUG=chrome-os-partner:19479
TEST=emerge-link && sudo emerge vpd && make test

Change-Id: I02fbda5de2f94e9c7ad3e6af70ca1f7042e00334
Reviewed-on: https://gerrit.chromium.org/gerrit/51280
Reviewed-by: David Hendricks <dhendrix@chromium.org>
Commit-Queue: Yung-Chieh Lo <yjlou@chromium.org>
Tested-by: Yung-Chieh Lo <yjlou@chromium.org>
16 months agoSupport -d to delete an existing key. 15/48115/4 factory-4128.B release-R28-4100.B stabilize-4008.0.B stabilize-4035.0.B stabilize-4068.0.B stabilize-4100.38.B stabilize-spring-4100.53.B toolchainB
Louis Yung-Chieh Lo [Mon, 15 Apr 2013 10:37:26 +0000 (18:37 +0800)]
Support -d to delete an existing key.

Some minor fixes:
1. compiler warnings.
2. lack of retval=1

BUG=chrome-os-partner:18159
TEST=make && make test && run on Pixel:
vpd -s A=1 -s B=2 -s C=3
vpd -l     ; ensure all are added.
vpd -d B
vpd -l     ; verify B is removed.
vpd -s D=4
vpd -l     ; ensure D is added successfully.

Change-Id: I1d8129d64df3b21b8c067b7c437c07d1a856d878
Reviewed-on: https://gerrit.chromium.org/gerrit/48115
Reviewed-by: David Hendricks <dhendrix@chromium.org>
Commit-Queue: Yung-Chieh Lo <yjlou@chromium.org>
Reviewed-by: Yung-Chieh Lo <yjlou@chromium.org>
Tested-by: Yung-Chieh Lo <yjlou@chromium.org>
22 months agodump_vpd_log: Add model_name and sku_number to VPD whitelist. factory-2985.B factory-2993.B factory-3004.B factory-3536.B factory-spring-3842.B firmware-spring-3824.4.B firmware-spring-3824.55.B firmware-spring-3824.84.B firmware-spring-3824.B firmware-spring-3833.B release-R25-3428.B release-R26-3701.B release-R27-3912.B stabilize-3428.110.0 stabilize-3428.149 stabilize-3428.149.B stabilize-3428.193 stabilize-3658.0.0 stabilize-3701.30.0 stabilize-3701.30.0b stabilize-3701.46.B stabilize-3701.81.B stabilize-3881.0.B stabilize-3912.79.B stabilize-bluetooth-smart stabilize2 toolchain-3428.65.B toolchain-3701.42.B toolchainA
Ricky Liang [Tue, 2 Oct 2012 03:07:56 +0000 (11:07 +0800)]
dump_vpd_log: Add model_name and sku_number to VPD whitelist.

BUG=chrome-os-partner:14740
TEST=run dump_vpd_log --force --stdout and see model_name and
sku_number being displayed.

Change-Id: I33b747a76e4b8aaea4a5f07e4ec29a2c159bde56
Reviewed-on: https://gerrit.chromium.org/gerrit/34399
Reviewed-by: Yung-Chieh Lo <yjlou@chromium.org>
Commit-Ready: Ricky Liang <jcliang@chromium.org>
Tested-by: Ricky Liang <jcliang@chromium.org>
23 months agodump_vpd_log: set permissions on cache directory every time
Gaurav Shah [Mon, 24 Sep 2012 21:54:27 +0000 (14:54 -0700)]
dump_vpd_log: set permissions on cache directory every time

We may be in a state where the permissions are not correctly
set on the cache directory. So instead of setting it only the first
time the cache file is being generated, do so each time.

BUG=chromium-os:34714
TEST=ran both with existing cache (but wrong permissions),
     and from scratch

Change-Id: I0f13f5827c9fdd311321da41d4b8bd12522dfab7
Reviewed-on: https://gerrit.chromium.org/gerrit/33933
Reviewed-by: Yung-Chieh Lo <yjlou@chromium.org>
Tested-by: Gaurav Shah <gauravsh@chromium.org>
Commit-Ready: Gaurav Shah <gauravsh@chromium.org>

23 months agoAdd --sh to support VPD partition shift. factory-2914.B
Louis Yung-Chieh Lo [Fri, 7 Sep 2012 14:16:44 +0000 (22:16 +0800)]
Add --sh to support VPD partition shift.

The SMBIOS header contains the VPD offset in the flash image. Thus if
the VPD partition changes the location in flash image, moving the binary
blob is non-sense.

So, we provide a --sh option for -l (--list). When use, the output
would include the necessary parameters to restore VPD in shell script
form.

Also fixed the license text to pass the pre-upload.py.

Signed-off-by: Louis Yung-Chieh Lo <yjlou@chromium.org>
BUG=chrome-os-partner:12510,
TEST=on snow
  % flashrom -r /tmp/bios
  % vpd -f /tmp/bios -O -s a=b -p 2 -s c=d
  % vpd -f /tmp/bios -l --sh > /tmp/vpd.sh  && cat /tmp/vpd.sh

  #
  # Prepend 'vpd -O' before this text to always reset VPD content.
  # Append more -s at end to set additional key/values.
  # Or an empty line followed by other commands.
  #
  vpd -i RO_VPD -f /tmp/bios  \
  -p 1 -s "a"="b" \
  -p 2 -s "c"="d" \

  % chmod +x /tmp/vpd.sh
  % /tmp/vpd.sh            ; run without error

Change-Id: I742a391cce5dbd3b9faef0c0fc4ae76f8f38848f
Reviewed-on: https://gerrit.chromium.org/gerrit/32547
Reviewed-by: David Hendricks <dhendrix@chromium.org>
Reviewed-by: Hung-Te Lin <hungte@chromium.org>
Commit-Ready: Yung-Chieh Lo <yjlou@chromium.org>
Tested-by: Yung-Chieh Lo <yjlou@chromium.org>
23 months agodump_vpd_log: Fix debug mode behavior and ECHO code cache generation.
Gaurav Shah [Fri, 7 Sep 2012 22:11:50 +0000 (15:11 -0700)]
dump_vpd_log: Fix debug mode behavior and ECHO code cache generation.

This CL fixes two issues with ECHO code cache generation.

First, to work around crosbug.com/32799 because the encrypted stateful
might not be ready during OOBE - generate the ECHO code cache on
unencrypted stateful. Create symlinks so Chrome can still find the code
cache where it expected.

Second, fix the detection logic for the --debug flag. It was using an unquoted
variable which causes dash to always follow the debug mode path
(and fail while trying to output to the debug log).

Also, while at it, add quoting to a few places where it would normally be
desirable.

BUG=chromium-os:34215
TEST=ran new dump_vpd_log script observed no errors. Re-built a ToT image with the
     change and verified ECHO code cache for correctly generated.

Change-Id: Id1bde7f7fc9ce966ef4ee4d93ddad550f896694a
Reviewed-on: https://gerrit.chromium.org/gerrit/32606
Reviewed-by: Richard Barnette <jrbarnette@chromium.org>
Commit-Ready: Gaurav Shah <gauravsh@chromium.org>
Tested-by: Gaurav Shah <gauravsh@chromium.org>
23 months agoCorrectly set cache directory permission.
Louis Yung-Chieh Lo [Mon, 3 Sep 2012 15:27:33 +0000 (23:27 +0800)]
Correctly set cache directory permission.

The OOBE reads the /var/log/vpd_2.0.txt with chronos permission.
vpd_2.0.txt is a sumlink to /mnt/stateful_partition/unencrypted/ \
cache/vpd/filtered.txt. If any directory in the middle is not
executable (for directory, un-enterable), then the reading is failed.

Thus, set the directory permission to world enterable while creating.

Change-Id: I2cc9d3f5d73c2fc98c0ea6acce3a9875d3fe1c45
Signed-off-by: Louis Yung-Chieh Lo <yjlou@chromium.org>
BUG=chrome-os-partner:11107,
TEST=On snow.
;
; prepare VPD
;
vpd -s "keyboard_layout"="xkb:gb:extd:eng"
vpd -s "initial_locale"="en-GB"
vpd -s "initial_timezone"="Europe/London"
;
; reset OOBE caches
;
dump_vpd_log --clean
rm -rf "/mnt/stateful_partition/encrypted/chronos/Local State" \
        /home/chronos/.oobe_completed
sync;sync;sync
(reset system via F3+Power button. Don't use reboot command.
 It gives OOBE time to save state in Local State)
;
; After boot-up, the OOBE should show the locale to UK.
;
Reviewed-on: https://gerrit.chromium.org/gerrit/32108
Reviewed-by: David Hendricks <dhendrix@chromium.org>
23 months agoSupports --debug for dump_vpd_log.
Louis Yung-Chieh Lo [Fri, 31 Aug 2012 09:30:51 +0000 (17:30 +0800)]
Supports --debug for dump_vpd_log.

This is especially useful when debug the early boot time error.

BUG=None
TEST=On snow:
dump_vpd_log --debug  ; /tmp/dump_vpd_log.debug shows something

Change-Id: I55cf3400dbf687a8067d0dbcfed4dc73d3160bcb
Reviewed-on: https://gerrit.chromium.org/gerrit/32109
Reviewed-by: David Hendricks <dhendrix@chromium.org>
Commit-Ready: Yung-Chieh Lo <yjlou@chromium.org>
Tested-by: Yung-Chieh Lo <yjlou@chromium.org>
2 years agoCache VPD files in unencrypted partition. factory-2717.B factory-2723.14.B factory-2846.B factory-2848.B firmware-butterfly-2788.B firmware-stout-2817.B
Louis Yung-Chieh Lo [Tue, 31 Jul 2012 14:06:31 +0000 (22:06 +0800)]
Cache VPD files in unencrypted partition.

At very early stage of boot time, the /var/log is not available so that
chromeos-boot-alert cannot get the VPD info.

So, this CL moves the cache files to /mnt/stateful_partition/unencrypted/cache
and create symlinks to be backward-compatible.

Also rename the full-v2.cache to full-v2.txt.

BUG=chromium-os:32799
TEST=Execute dump_vpd_log on link:
legacy machine with all cache files stored in encrypted partition:
  after running, all are re-generated in unencrypted.
  symlinks are created correctly.
  full-v2.cache is removed.
dump_vpd_log --clean:
  make sure all cache files are removed.
Re-run this script:
  .../unencrypted/.../*.txt contain real data.
  /var/log/.../*.txt point to .../unencrypted/...
  /var/log/vpd2.0.txt becomes a symlink and points to unencrypted.

Signed-off-by: Louis Yung-Chieh Lo <yjlou@chromium.org>
Change-Id: Iaded001a00cfb6fef50db5eb238945bfd1076cbf
Reviewed-on: https://gerrit.chromium.org/gerrit/28812
Reviewed-by: Kees Cook <keescook@chromium.org>
Commit-Ready: Yung-Chieh Lo <yjlou%chromium.org@gtempaccount.com>
Tested-by: Yung-Chieh Lo <yjlou%chromium.org@gtempaccount.com>
2 years agodump_vpd_log: Fix location of the ECHO code cache.
Gaurav Shah [Mon, 30 Jul 2012 23:42:56 +0000 (16:42 -0700)]
dump_vpd_log: Fix location of the ECHO code cache.

Chrome expects this under /var/cache/echo, not /var/cache/offers.

BUG=chromium-os:33085
TEST=verified dump_vpd_log (re)generates cache at the new location.

Change-Id: I5a51d0d76fb911c63c35a68d952fa6bd018f846f
Reviewed-on: https://gerrit.chromium.org/gerrit/28741
Tested-by: Gaurav Shah <gauravsh@chromium.org>
Reviewed-by: Richard Barnette <jrbarnette@chromium.org>
Commit-Ready: Gaurav Shah <gauravsh@chromium.org>

2 years agovpd: support generating both dynamic and static output. firmware-link-2695.2.B firmware-link-2695.B firmware-parrot-2685.B firmware-snow-2695.90.B firmware-snow-2695.B
Hung-Te Lin [Mon, 30 Jul 2012 08:43:58 +0000 (16:43 +0800)]
vpd: support generating both dynamic and static output.

BUG=none
TEST=emerge-link vpd

Change-Id: I3c2bd6d92f181bdaf8c48a1e11f7d5d4b27192b4
Reviewed-on: https://gerrit.chromium.org/gerrit/28686
Tested-by: Hung-Te Lin <hungte@chromium.org>
Commit-Ready: Hung-Te Lin <hungte@chromium.org>
Reviewed-by: Hung-Te Lin <hungte@chromium.org>
2 years agodump_vpd_log: --clean/--force should also clear the ECHO coupon file
Gaurav Shah [Fri, 20 Jul 2012 18:31:24 +0000 (11:31 -0700)]
dump_vpd_log: --clean/--force should also clear the ECHO coupon file

The ECHO code file is essentially an ECHO code cache extracted from the full
VPD contents and accessible to Chrome.

With --force, this has the effect of re-generating the ECHO code cache too
(which since the full vpd contents changed should be the case).

With --clean, this cleans up the entire cached VPD contents, not just parts of
it.

BUG=none
TEST=tested dump_vpd_log behavior with the --force and --clean flags.

Change-Id: Id4dd527614597d74093d40b6d9a1db60d8edb9f7
Reviewed-on: https://gerrit.chromium.org/gerrit/28034
Reviewed-by: Richard Barnette <jrbarnette@chromium.org>
Commit-Ready: Gaurav Shah <gauravsh@chromium.org>
Tested-by: Gaurav Shah <gauravsh@chromium.org>
2 years ago[ECHO] Cache coupon code values read from the VPD factory-2268.16.B factory-2305.B factory-2338.B factory-2368.B factory-2394.B factory-2460.B factory-2475.B factory-2569.B firmware-link-2348.B release-R19-2046.B release-R20-2268.B
Gaurav Shah [Fri, 23 Mar 2012 01:20:51 +0000 (18:20 -0700)]
[ECHO] Cache coupon code values read from the VPD

This CL adds support for caching coupon code values read from the OOBE.
This values need to be accessible to Chrome whenever an ECHO offers transcation
is initated.

BUG=chromium-os:27865
TEST=manually ran, also verified that the cache file is generated by
     forcing an OOBE.

Change-Id: I08b0bf806304fe6451c940015954975d04ddd74e
Reviewed-on: https://gerrit.chromium.org/gerrit/18921
Commit-Ready: Gaurav Shah <gauravsh@chromium.org>
Tested-by: Gaurav Shah <gauravsh@chromium.org>
Reviewed-by: Richard Barnette <jrbarnette@chromium.org>
2 years agovpd: Improve speed and remove temporary files. factory-1987.B
Hung-Te Lin [Tue, 21 Feb 2012 11:23:09 +0000 (19:23 +0800)]
vpd: Improve speed and remove temporary files.

To utilize the "fast-verify" command in flashrm, which improved VPD writing
speed a lot.

Also fixed a but in choosing wrong redirection output file name (/dev/null
instead of /tmp/null).

BUG=none
TEST=emerge-x86-vpd vpd;
     time vpd -s "a=b" -i RO_VPD  # 7.8s, no "null" file in /tmp
     time vpd.old -s "c=d" -i RO_VPD  # 13s, and "null" in /tmp

Change-Id: Ic79e84c9082a26a5f817c0c66c2c61a68b616fbd
Reviewed-on: https://gerrit.chromium.org/gerrit/16273
Commit-Ready: Hung-Te Lin <hungte@chromium.org>
Tested-by: Hung-Te Lin <hungte@chromium.org>
Reviewed-by: David Hendricks <dhendrix@chromium.org>
2 years agoAdvance the version of the VPD cache file used by dump_vpd_log. release-R18-1660.B
Gilad Arnold [Mon, 30 Jan 2012 14:56:10 +0000 (06:56 -0800)]
Advance the version of the VPD cache file used by dump_vpd_log.

This fix ensures that current images will necessarily refresh the VPD
cache and /var/log/vpd-2.0.txt when restarting after an upgrade. In
turn, this releases us from the need to invoke dump_vpd_log with the
--force option during the post-install process.

BUG=chromium-os:25383
TEST=Executed the script on x86-alex via terminal, verified new cache
file and absence of old one; also tested on a booting image.

Change-Id: I0c1c5ffbbc7c82a4af97d92eaf51179d67937c14
Reviewed-on: https://gerrit.chromium.org/gerrit/15020
Reviewed-by: Richard Barnette <jrbarnette@chromium.org>
Commit-Ready: Gilad Arnold <garnold@chromium.org>
Tested-by: Gilad Arnold <garnold@chromium.org>
2 years agoImprove functionality of dump_vpd_log.
Gilad Arnold [Thu, 26 Jan 2012 00:35:11 +0000 (16:35 -0800)]
Improve functionality of dump_vpd_log.

- Introduced invariant: if full cache is generated, then filtered output
  file is removed, forcing it to regenerate the next time it is needed.

- Create temporary files for full VPD cache (FULL_TEXT_TMP) and filtered
  output (TMP) on /var/tmp. This will ensure that renaming them into
  their permanent names (FULL_TEXT_CACHE and FILTERED_FILE,
  respectively) will be an atomic operation, mitigating race conditions
  due to parallel invocations of the script, which appeared to have been
  a concern of the authors.

- Consistent naming of internal variables: TMP --> FILTERED_TMP,
  FULL_TEXT_TMP --> CACHE_TMP, FULL_TEXT_CACHE --> CACHE_FILE. This way
  it's clearer what each one stores and which is a temporary name for
  what.

- Coalesced the functionality of --clean and --force: both remove the
  full cache and filtered files; --clean quits right after doing so.

- Consistent naming of variables for temporary/persistent filenames;
  consistent use of shell variables; better comments.

Change-Id: Iafab6d207582e460e1638d03543afc8ffa845d82
BUG=chromium-os:25484
TEST=Executed script on x86-alex board.
Reviewed-on: https://gerrit.chromium.org/gerrit/14839
Reviewed-by: Richard Barnette <jrbarnette@chromium.org>
Commit-Ready: Gilad Arnold <garnold@chromium.org>
Tested-by: Gilad Arnold <garnold@chromium.org>
2 years agovpd: Remove temporary files on exit.
Hung-Te Lin [Fri, 6 Jan 2012 11:41:26 +0000 (19:41 +0800)]
vpd: Remove temporary files on exit.

VPD utility should remove any files created for temporary usage.

BUG=chrome-os-partner:6221
TEST=(manual) vpd -l; ls /tmp/vpd*  # No temporary files left

Change-Id: I2f1bbf6ebfb5c15c93286fb6c66f6a662bb344d2
Reviewed-on: https://gerrit.chromium.org/gerrit/13791
Reviewed-by: Stefan Reinauer <reinauer@chromium.org>
Reviewed-by: David Hendricks <dhendrix@chromium.org>
Tested-by: Hung-Te Lin <hungte@chromium.org>
Commit-Ready: Hung-Te Lin <hungte@chromium.org>

2 years agoCache full VPD text file to speed up the dump_vpd_log performance.
Louis Yung-Chieh Lo [Fri, 2 Dec 2011 02:28:40 +0000 (10:28 +0800)]
Cache full VPD text file to speed up the dump_vpd_log performance.

The old fashion of dump_vpd_log script is calling 'vpd' twice (for RO and RW
partiions). Every 'vpd' could invoke flashrom twice (one for partial, and one
for full BIOS read) on Mario. This is a long processing time, because
Mario FMAP structure doesn't contain the 'FMAP' partition itself.

The new fashion is once dump_vpd_log is called, it would cache the full file
content in the filesystem so that the next call can benefit from it.
Also, we call flashrom only once and pass '-f bios_file' for sencond 'vpd'.
This saves half of execution time.

BUG=chromium-os:21525
TEST=Tested on Mario and Alex.

Change-Id: I1c7d2a0afb2346d1f71ae5f15a5161c3fabccd08
Reviewed-on: https://gerrit.chromium.org/gerrit/12363
Reviewed-by: Richard Barnette <jrbarnette@chromium.org>
Tested-by: Yung-Chieh Lo <yjlou%chromium.org@gtempaccount.com>
2 years agoChange to use new location of shflags factory-1284.B firmware-kiev-2.112.B firmware-uboot_v2-1299.B release-R17-1412.B
Sonny Rao [Fri, 21 Oct 2011 08:09:18 +0000 (08:09 +0000)]
Change to use new location of shflags

BUG=chromium-os:21742
TEST=manual verify this works with new dev-utils/shflags package

Change-Id: Icc7745b97366b4bf4d9726c612a4650bab027ed7
Reviewed-on: https://gerrit.chromium.org/gerrit/10477
Reviewed-by: Mike Frysinger <vapier@chromium.org>
Commit-Ready: Sonny Rao <sonnyrao@chromium.org>
Tested-by: Sonny Rao <sonnyrao@chromium.org>
2 years agodump_vpd_log by default outputs filtered fields (in whitelist). factory-1020.B factory-1235.B release-1011.B release-R16-1193.B
Louis Yung-Chieh Lo [Tue, 23 Aug 2011 01:31:39 +0000 (09:31 +0800)]
dump_vpd_log by default outputs filtered fields (in whitelist).

From this CL, this script will output VPD fields in whitelist (by default).
The reason is VPD may contain data that be able to identify a machine/user.
Since vpd_2.0.txt is world-readable (mainly for chrome://system), it is not
safe to dump all values in vpd_2.0.txt.

To dump all fields/values, please use --full instead. The --stdout argument
can output values to stdout instead of vpd_2.0.txt file. We will use these two
arguments for machine-info.

Also supports --clean to remove the cached file (/var/log/vpd_2.0.txt).

BUG=chromium-os:18503
TEST=Tested on the a* machine.

Change-Id: Ia14ab2a5490a6a083ee153769a947a634b035db0
Reviewed-on: http://gerrit.chromium.org/gerrit/6577
Reviewed-by: Yung-Chieh Lo <yjlou%chromium.org@gtempaccount.com>
Tested-by: Yung-Chieh Lo <yjlou%chromium.org@gtempaccount.com>
3 years agoEnable -Wall -Werror in Makefile factory-980.B test-982.B
Louis Yung-Chieh Lo [Fri, 12 Aug 2011 23:45:48 +0000 (07:45 +0800)]
Enable -Wall -Werror in Makefile

Most errors come from the uint8_t and char. I didn't take care that well before.
Now the rules are:
1. if it is a char or a char string (ASCII), use char.
2. if it is an 8-bit integer or a UTF-8 string, use uint8_t.

Also fixed a strict aliasing issue in lib/math.c.

BUG=chromium-os:13803
TEST=Build successfully on Z* and K* platforms.

Change-Id: I21e44c40c467ced28b2b4454148511df7a9305cc
Reviewed-on: http://gerrit.chromium.org/gerrit/5945
Reviewed-by: David Hendricks <dhendrix@chromium.org>
Tested-by: Yung-Chieh Lo <yjlou%chromium.org@gtempaccount.com>
3 years agoSupport to dump old VPD format, which is used on CR-48 only. 0.15.877.B firmware-881-u-boot-v1 firmware-u-boot-v1
Louis Yung-Chieh Lo [Fri, 22 Jul 2011 04:47:48 +0000 (12:47 +0800)]
Support to dump old VPD format, which is used on CR-48 only.

For convenience, all utilities cares about VPD may call this without
considering the model name (we use mosys for VPD info on CR-48).

The VPD 1.2 is a binary structure. This patch adds its UUID into the list,
and slightly re-factors the structure to parse SMBIOS tables. Two print methods
are used for data: zero-terminated string and the binary data, including
UUID and MAC address.

Note that we only support read-only mode. Not support write-back mode yet.

Also includes some minor fixes:
+ Add a workaround for mosys r169 bug: missing structure terminator.
+ Fixed the minor bug in normalizing the VPD area name.
  So that we can read the old FMAP naming convention seamlessly.

BUG=chromium-os:17629
TEST=Tested on the following platforms.
Mario (manual test):
  flashrom -w mario/mario.bin
  vpd -l              # see the old VPD 1.2 content.
                      # also see the warning for partial read fail.
  vpd -l -i "RW VPD"  # expected error because ODM wrote garbage here.
                      # SMBIOS signature is not matched.
  rm /var/log/vpd_2.0.txt; dump_vpd_log  #  confirmed chrome:system
Alex (regression):
  ./main.py --boards=zgb
  ./main.py --boards=chroot --storage=FILE
chroot (regression):
  ./main.py --boards=chroot,zgb,alex,kaen --storages=FILE

Change-Id: I3595bd290c8a68bb06627a91fc2ee81ab779185e
Reviewed-on: http://gerrit.chromium.org/gerrit/4552
Reviewed-by: David Hendricks <dhendrix@chromium.org>
Reviewed-by: Nick Sanders <nsanders@chromium.org>
Reviewed-by: Yung-Chieh Lo <yjlou%chromium.org@gtempaccount.com>
Tested-by: Yung-Chieh Lo <yjlou%chromium.org@gtempaccount.com>
3 years agoAlways generate absolute address for SMBIOS tables (follow the spec). 780.B
Louis Yung-Chieh Lo [Mon, 23 May 2011 15:21:40 +0000 (23:21 +0800)]
Always generate absolute address for SMBIOS tables (follow the spec).

This is a big re-factoring, which is a following CL after 1243
(see http://gerrit.chromium.org/gerrit/#change,1243).
In CL 1243, Hungte mentioned the case C & D are annoying and suggested to
remove. This CL is going to removed that. So that, when reading file, the vpd
will try 3 ways to get the 'eps_base' value:

  1. try to parse fmap structure and get the offset of VPD partition.
  2. try to search "_SM_" signature in file.
  3. try to load content from BIOS to learn the eps_base.

Alternatively, user can use -E to force the eps_base value.

For the backward-compatible, we keep the ability to read case B. Once a
write is happening on case B, the offset will be corrected to absolute.
Which means following the SMBIOS spec.

Also did some re-factoring to make code more readable and easy to maintain.

BUS=chrome-os-partner:4010
TEST=Tested all commands in CL 1243, and the following commands:
  rm -f /tmp/zero ; touch /tmp/zero
  vpd -f /tmp/zero -l  # loadFile() error
  vpd -f /tmp/zero -O  # got a 1537-byte file, the eps_base is 0x1f0000.
  rm -f /tmp/zero ; touch /tmp/zero
  vpd -f /tmp/zero -E 0x230000 -O  # a 1537-byte file, and eps_base is 0x230000.
  In addition, I write a testing script that runs combinations and corner cases.
  I have run that script on K and Z models and passed.

Change-Id: I30fb883026ed3cc540b32eb17bc6329a1a32dc99
Reviewed-on: http://gerrit.chromium.org/gerrit/1360
Reviewed-by: Yung-Chieh Lo <yjlou%chromium.org@gtempaccount.com>
Tested-by: Yung-Chieh Lo <yjlou%chromium.org@gtempaccount.com>
3 years agoFix the bug when mixing usages with and without -f argument. 0.13.558.B
Louis Yung-Chieh Lo [Fri, 20 May 2011 09:44:49 +0000 (17:44 +0800)]
Fix the bug when mixing usages with and without -f argument.

The SMBIOS requires the offset in type 241 table is absolute address.
We get in trouble if only VPD partition is read from BIOS (for speed)
because we have no overview scope to know the absolute address in BIOS.

Added a guess_offset() function to consider all combinations of how the
structure was made, and whether the whole file is read at parsing.
Please refer for the function comments for details.

Also fix the 64-bit integer issue for off_t.

BUS=chrome-os-partner:4010
TEST=tested on broken bios, and following commands (switch between w/ and w/o -f):
  vpd -O -s A=B
  vpd -l
  flashrom -r /tmp/bios
  vpd -f /tmp/bios -l
  vpd -f /tmp/bios -s C=D
  vpd -f /tmp/bios -l
  flashrom -w /tmp/bios
  vpd -l
  vpd -f /tmp/bios -O -s E=F
  flashrom -w /tmp/bios
  vpd -l
  vpd -s G=H
  vpd -l

Change-Id: I659887dfc0d5c994635cc28fdea5ade2c3d7b65f
Reviewed-on: http://gerrit.chromium.org/gerrit/1243
Reviewed-by: Hung-Te Lin <hungte@chromium.org>
Tested-by: Louis Yung-Chieh Lo <yjlou@chromium.org>
3 years agodump_vpd_log: calls mktemp to allow multiple instances.
Louis Yung-Chieh Lo [Wed, 27 Apr 2011 10:13:03 +0000 (18:13 +0800)]
dump_vpd_log: calls mktemp to allow multiple instances.

Change-Id: I22aa9eeb14fb30369b0a1cb00ad1c1a6081b0636

R=hungte@chromium.org
BUG=chrome-os-partner:3412
TEST=Tested on target machine.
% activate_date --clean && activate_date
% dump_vpd_log --force & dump_vpd_log --force & ... &
% cat /var/log/vpd_2.0.txt
Expect the ActivateDate is set to current.

Review URL: http://codereview.chromium.org/6879104

3 years agoSupport -g option to dump value string only (no key string, no quotes, no newline). 0.12.433.B 0.12.433.B109 0.12.433.B62 0.13.434.B
Louis Yung-Chieh Lo [Fri, 15 Apr 2011 02:24:58 +0000 (10:24 +0800)]
Support -g option to dump value string only (no key string, no quotes, no newline).

Added filter for exporting. Also added an export type for exporting value only.

Refined some comments too.

Change-Id: I97fdd408bd444094ccc3378564b37c252fcf213e

R=hungte@chromium.org,dhendrix@chromium.org
BUG=no bug id
TEST=Compile okay on Z600 and x86-*. Tested on Z600 machine:
vpd -f test  -s ABC=DEF -s DEF=GHI -s IJK=ABC
vpd -f test -l  # all show up
vpd -f test -g abc  # nothing shows up
vpd -f test -g ABC  # DEF is showed.
vpd -f test -l -g  # error check: need an argument for -g
vpd -f test -l -g XXX  # error check: -g and -l must be mutually exclusive.

Review URL: http://codereview.chromium.org/6849018

3 years agofix the crash bug when specifying non-existed option. 0.12.362.B 0.12.392.B
Louis Yung-Chieh Lo [Fri, 1 Apr 2011 02:13:04 +0000 (10:13 +0800)]
fix the crash bug when specifying non-existed option.

Change-Id: I68521b92c1c83bed81746d92fe11d50055843992

R=dhendrix@chromium.org
BUG=No bug id.
TEST=Tested with "vpd --clean", and program didn't segmentation fail.

Review URL: http://codereview.chromium.org/6728023

3 years agoscript to dump RO and RW VPDs into /var/log/vpd-log.conf.
Louis Yung-Chieh Lo [Fri, 11 Mar 2011 11:48:56 +0000 (19:48 +0800)]
script to dump RO and RW VPDs into /var/log/vpd-log.conf.

This work originally is done in src/platform/init/vpd-log.conf.
But somehow OOBE OEM customization code needs to read the log file in the
begin of OOBE, we extract this function into a standalone script for
chromeos_startup to call.

More CLs will follow up this change.

Change-Id: I107a2a6c44ec6b4dee4de2c1b8b45cca846dd6fe

BUG=chromium-os:12355
TEST=Tested on machine.

Review URL: http://codereview.chromium.org/6676022

3 years agoleverage flashrom fast partial read function to speed up VPD read.
Louis Yung-Chieh Lo [Thu, 10 Mar 2011 08:37:37 +0000 (16:37 +0800)]
leverage flashrom fast partial read function to speed up VPD read.

Dmitry, this is FYR. After this is committed, the VPD read can be much faster for OOBE to read default locale setting. Hi, David, please kindly review my code. Thanks.

This patch basically re-wrote the flashromRead() and  flashromWrite().
In the old code, to handle image on BIOS, we always read the whole flash
chip content and then parse fmap. Since David's CL
(http://codereview.chromium.org/6025013/) makes flashrom to parse fmap,
we can just call flashrom partial read to get VPD partition.
This reduce the VPD read from 5 secs to less than 1 sec.

fmapNormalizeAreaName() is also refined because we no longer generate
layout file for flashrom. Hence, user must specify the exact partition
name on BIOS fmap, and unfortunately Mario BIOS' partition name has space.

Some comments are also refined.

Another minor improvement is that VPD utility now guesses the EPS base address
by looking at eps->table_address. This is more user-friendly when handling the
small VPD partition slice file: no longer specify -E argument. But still can
use -E argument to overwrite it (with -O option).

Change-Id: I7caa215ff775da78b7844586d45e5e1ceae3c7a9

BUG=chromium-os:12355
TEST=Tested on Z600 and Mario machine.
On Z600, I manually run the below commands:
  1. a standalone VPD.bin file
  2. Mario BIOS with VPD 1.0 partition
  3. Mario BIOS with blank VPD partition
  4. old version of VPD 2.0 partition (located at 0x100)
  5. new BIOS with SPD data present (at 0x400) and VPD 2.0 (at 0x600)
On Mario machine,
  % vpd -i "RO VPD" -O
  % vpd -i "RO VPD" -s A=B

Review URL: http://codereview.chromium.org/6646016

3 years agoSupports SPD in VPD partition.
Louis Yung-Chieh Lo [Tue, 8 Mar 2011 11:48:00 +0000 (19:48 +0800)]
Supports SPD in VPD partition.

VPD originally assumes the whole VPD partition only contains EPS and VPD 2.0
data. Since chrome-os-partner:2129 requests the to move SPD EEPROM content
to VPD partition, VPD utility needs to be modified to support.

This patch mainly re-factored the loadFile() and saveFile() functions to
parse and store SPD data. In loadFile(), it tries to load SPD BBP first.
Then VPD 2.0 BBP. In saveFile(), it writes in this order: EPS, SPD, VPD 2.0.

This patch also refined some comments and removed few obscured/unused code.

Change-Id: I3dc00f29e8120d30c8c48182e70f755018375637

BUG=chrome-os-partner:2129
TEST=I manually run the below commands on Z600 for cases:
  1. a standalone VPD.bin file
  2. Mario BIOS with VPD 1.0 partition
  3. Mario BIOS with blank VPD partition
  4. old version of VPD 2.0 partition (located at 0x100)
  5. new BIOS with SPD data present (at 0x400) and VPD 2.0 (at 0x600)
Command sequence is like:
  % vpd -f $F -s "some=string"
  % vpd -f $F -l  # to verify
  % vpd -f $F -s "another=string"
  % vpd -f $F -l  # confirm new string is added
  % vpd -f $F -O  # make sure all VPD 2.0 data are clean
Let me know if you are interested in detailed command log I've tested.

Review URL: http://codereview.chromium.org/6628052

3 years agoAdd version string.
Louis Yung-Chieh Lo [Mon, 7 Mar 2011 01:57:35 +0000 (09:57 +0800)]
Add version string.

Copy util/getversion.sh from flashrom. And modify source to print version
information in help page. For more detailed about getversion.sh, refer to
http://codereview.chromium.org/3265003.

Change-Id: I1a284400f2432d9c741f48c821aba8912b6a1562

BUG=Not a bug.
TEST=compiled on Z600 and emerge-x86-generic.
% ./vpd -h
Chrome OS VPD 2.0 utility --
git@gitrw.chromium.org:9222/vpd.git : 49c440a : Mar 05 2011 05:41:26 UTC

Usage: ./vpd [OPTION] ...
...

Review URL: http://codereview.chromium.org/6627036

3 years agovpd should returns 1 (error) if SMBIOS signature is not expected.
Louis Yung-Chieh Lo [Thu, 13 Jan 2011 08:46:16 +0000 (16:46 +0800)]
vpd should returns 1 (error) if SMBIOS signature is not expected.

In original design, if the SMBIOS signature is not matched (i.e. garbage),
the user would get a warning message and vpd would treat it as a raw vpd binary
file (although it is a BIOS image). It leads flashrom error when trying
to write back to flash (the size is not matched to flash size).

The new behavior is that user would get an error message (and a hint), then
vpd would stop. User must specify -O to overwrite the garbage in VPD partition.

Change-Id: I5f0957d1328ca2373eea4ea204f703426b449f11

BUG=chrome-os-partner:1496
TEST=Manual tests:
write garbage to RO VPD
vpd -l  (expect to see error message: FMAP found, but SMBIOS signature is not matched.)
        (also expect to see hint: You may use -O to overwrite the data.)
vpd -O
vpd -l  (expect to see empty list. The garbage is cleaned by -O).

Review URL: http://codereview.chromium.org/6289001

3 years agoFor convenient, supports -O to overwrite the garbage in VPD partition.
Louis Yung-Chieh Lo [Thu, 13 Jan 2011 03:00:30 +0000 (11:00 +0800)]
For convenient, supports -O to overwrite the garbage in VPD partition.

Change-Id: Icc1018edc1254828e29bc347b2ac2e94ccb7a526

BUG=Not really a bug.
TEST=see below
1. damage the RO VPD with random garbage
2. vpd -l   (expect error, return non-zero)
3. vpd -O -s abc=123 -s def=456
4. vpd -l   (expect two entries listed)
5. vpd -O -s ghi=789
6. vpd -l   (expect one entries listed)

Review URL: http://codereview.chromium.org/6126006

3 years agoSupport to read/write VPD partition with flashrom directly.
Louis Yung-Chieh Lo [Tue, 28 Dec 2010 01:45:11 +0000 (09:45 +0800)]
Support to read/write VPD partition with flashrom directly.

Integrate with flashrom. If -f <filename> is not specified, the VPD utility
would call flashrom to read flash content, search the FMAP and SMBIOS headers,
update VPD content, then write back to flash if dirty.

Change-Id: I3c024755c2f507133730a8b0dbd46172b221cb2a

BUG=chrome-os-partner:1344
TEST=
    vpd -f vpd.bin -l
    vpd -f vpd.bin -s "ABC=123"
    vpd -f vpd.bin -l
    vpd -l
    vpd -s "ABC=123"
    vpd -l
    vpd -i "RW VPD" -l
    vpd -i "RW VPD" -s "ABC=123"
    vpd -i "RW VPD" -l

Review URL: http://codereview.chromium.org/6034010

3 years agoConcatenate CFLAGS and LDFLAGS instead of re-assign
David Hendricks [Wed, 22 Dec 2010 04:28:07 +0000 (20:28 -0800)]
Concatenate CFLAGS and LDFLAGS instead of re-assign

BUG=
TEST=

Review URL: http://codereview.appspot.com/3775043

3 years agoAllow compiler to be overridden (useful for cross-compiling)
David Hendricks [Wed, 22 Dec 2010 04:26:54 +0000 (20:26 -0800)]
Allow compiler to be overridden (useful for cross-compiling)

BUG=
TEST=

Review URL: http://codereview.appspot.com/3826041

3 years agoSupport --list to dump file content.
Louis Yung-Chieh Lo [Sat, 18 Dec 2010 02:58:13 +0000 (10:58 +0800)]
Support --list to dump file content.

This CL also fixed the blob offset in type 241.

Change-Id: Ie8cc82b8caca5c7b102254e4c0a8c371dd04b1f7

BUG=chrome-os-partner:1344
TEST=make ; make test
emerge-x86-generic vpd
cros_run_unit_tests -p vpd

Review URL: http://codereview.chromium.org/5831003

3 years agoSupport VPD decode and update mode.
Louis Yung-Chieh Lo [Thu, 16 Dec 2010 05:28:09 +0000 (13:28 +0800)]
Support VPD decode and update mode.

Added decode related code. Now it can read pairs from existing file,
then add some new, then write those back to the file. This is for RMA.

I also am changing the function parameters to inttypes.h style.

BUG=chrome-os-partner:1344
TEST=make ; make test
emerge vpd
emerge-x86-generic vpd
cros_run_unit_tests -p vpd
./vpd -f vpd.bin -s "A=B" && od -Ax -tx1 vpd.bin
./vpd -f vpd.bin -s "A=B" && od -Ax -tx1 vpd.bin
./vpd -f vpd.bin -p 2 -s "C=D" && od -Ax -tx1 vpd.bin
./vpd -f vpd.bin -s "E=F" && od -Ax -tx1 vpd.bin
./vpd -f vpd.bin -s "C=F" && od -Ax -tx1 vpd.bin
./vpd -f vpd.bin -p 4 -s "C=D" -p 2 -s "A=B" && od -Ax -tx1 vpd.bin

Change-Id: Ifc079c1105e637744fd7db1345a7f3c8ef3bee05

Review URL: http://codereview.appspot.com/3666044

3 years agoFixed the typo to build test in Makefile.
Louis Yung-Chieh Lo [Tue, 14 Dec 2010 22:22:13 +0000 (06:22 +0800)]
Fixed the typo to build test in Makefile.

Change-Id: I2e9bfaea6edc64c22a14345178606dca3407446b

BUG=
TEST=make test

Review URL: http://codereview.appspot.com/3628042

3 years agoThe draft version. Generates EPS and VPD 2.0 blob block.
Louis Yung-Chieh Lo [Tue, 14 Dec 2010 00:08:18 +0000 (08:08 +0800)]
The draft version. Generates EPS and VPD 2.0 blob block.

This is the first drop of code. Actually some files are modified from mosys
project while others are newly written.

This can be compiled under emerge yet. No workon support yet. Can run under normal Linux environment.

Examples:
  ./vpd -f vpd.bin -p 16 -s "Prod ID"="0123-456-89" \
                   -p 18 -s "MAC"="00:11:22:33:44:55" \
                   -p 16 -s "ActivateDate"=`date +%Y/%m/%d`

  ; the vpd.bin would contain EPS and the encoded VPD 2.0 blob.

Files from mosys:

  include/lib/lib_smbios.h
  include/lib/vpd.h
  include/lib/vpd_tables.h
  include/lib/math.h
  lib/lib_smbios.c
  lib/math.c

To play around:
  scp tpe-yjlou-01.tpe.corp.google.com://usr/local/google/home/yjlou/workon/src/platform/vpd your_dir

Change-Id: I405f40d70cc9255f4b17c6f6644b8160f82d638b

BUG=chrome-os-partner:1344
TEST=Maually tested vpd and vpd_test

Review URL: http://codereview.appspot.com/3586041

3 years agoinit repo
Louis Yung-Chieh Lo [Fri, 10 Dec 2010 23:11:47 +0000 (07:11 +0800)]
init repo