| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2011 The Chromium OS Authors. All rights reserved. | 2 * Copyright (c) 2011 The Chromium OS Authors. All rights reserved. |
| 3 * Use of this source code is governed by a BSD-style license that can be | 3 * Use of this source code is governed by a BSD-style license that can be |
| 4 * found in the LICENSE file. | 4 * found in the LICENSE file. |
| 5 * | 5 * |
| 6 * Alternatively, this software may be distributed under the terms of the | 6 * Alternatively, this software may be distributed under the terms of the |
| 7 * GNU General Public License ("GPL") version 2 as published by the Free | 7 * GNU General Public License ("GPL") version 2 as published by the Free |
| 8 * Software Foundation. | 8 * Software Foundation. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 66 "display <gbbaddr> <screen#> - display the screen\n" | 66 "display <gbbaddr> <screen#> - display the screen\n" |
| 67 "bmpblk info <gbbaddr> <screen#> - print the screen info\n"), | 67 "bmpblk info <gbbaddr> <screen#> - print the screen info\n"), |
| 68 #endif /* CONFIG_CHROMEOS_BMPBLK */ | 68 #endif /* CONFIG_CHROMEOS_BMPBLK */ |
| 69 U_BOOT_CMD_MKENT(fmap, 2, 1, do_fmap, | 69 U_BOOT_CMD_MKENT(fmap, 2, 1, do_fmap, |
| 70 "Find and print flash map", | 70 "Find and print flash map", |
| 71 "addr len\n - Find and print flash map " | 71 "addr len\n - Find and print flash map " |
| 72 "in memory[addr, addr+len]\n"), | 72 "in memory[addr, addr+len]\n"), |
| 73 U_BOOT_CMD_MKENT(load_fw, 3, 1, do_load_fw, | 73 U_BOOT_CMD_MKENT(load_fw, 3, 1, do_load_fw, |
| 74 "Load firmware from memory " | 74 "Load firmware from memory " |
| 75 "(you have to download the image before running this)", | 75 "(you have to download the image before running this)", |
| 76 » » "addr len kkey\n - Wrapper of LoadFirmware." | 76 » » "addr len shdata\n - Wrapper of LoadFirmware." |
| 77 "Load firmware from [addr, addr+len] and " | 77 "Load firmware from [addr, addr+len] and " |
| 78 » » "store loaded kernel key at kkey\n"), | 78 » » "store shared data at shdata\n"), |
| 79 U_BOOT_CMD_MKENT(load_k, 3, 1, do_load_k, | 79 U_BOOT_CMD_MKENT(load_k, 3, 1, do_load_k, |
| 80 "Load kernel from the boot device", | 80 "Load kernel from the boot device", |
| 81 » » "addr len kkey\n - Load kernel to [addr, addr+len]\n"), | 81 » » "addr len shdata\n - Load kernel to [addr, addr+len] and\n" |
| 82 » » "modify shared data at shdata\n"), |
| 82 U_BOOT_CMD_MKENT(help, 1, 1, do_cros_help, | 83 U_BOOT_CMD_MKENT(help, 1, 1, do_cros_help, |
| 83 "show this message", | 84 "show this message", |
| 84 "[action]") | 85 "[action]") |
| 85 }; | 86 }; |
| 86 | 87 |
| 87 int do_cros(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) | 88 int do_cros(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) |
| 88 { | 89 { |
| 89 cmd_tbl_t *c; | 90 cmd_tbl_t *c; |
| 90 | 91 |
| 91 if (argc < 2) | 92 if (argc < 2) |
| (...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 378 cxt->cur += count; | 379 cxt->cur += count; |
| 379 | 380 |
| 380 return count; | 381 return count; |
| 381 } | 382 } |
| 382 | 383 |
| 383 int do_load_fw(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) | 384 int do_load_fw(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) |
| 384 { | 385 { |
| 385 LoadFirmwareParams params; | 386 LoadFirmwareParams params; |
| 386 VbNvContext vnc; | 387 VbNvContext vnc; |
| 387 struct context_t context; | 388 struct context_t context; |
| 388 » void *gbb, *block[2]; | 389 » void *block[2]; |
| 389 » GoogleBinaryBlockHeader *gbbh; | |
| 390 uint64_t *psize[2]; | 390 uint64_t *psize[2]; |
| 391 VbKeyBlockHeader *kbh; | 391 VbKeyBlockHeader *kbh; |
| 392 VbFirmwarePreambleHeader *fph; | 392 VbFirmwarePreambleHeader *fph; |
| 393 int i, status; | 393 int i, status; |
| 394 firmware_storage_t f = { | 394 firmware_storage_t f = { |
| 395 .seek = mem_seek, | 395 .seek = mem_seek, |
| 396 .read = mem_read, | 396 .read = mem_read, |
| 397 .context = (void *) &context | 397 .context = (void *) &context |
| 398 }; | 398 }; |
| 399 | 399 |
| 400 if (argc != 4) | 400 if (argc != 4) |
| 401 USAGE(1, cmdtp, "Wrong number of arguments\n"); | 401 USAGE(1, cmdtp, "Wrong number of arguments\n"); |
| 402 | 402 |
| 403 context.begin = (void *) simple_strtoul(argv[1], NULL, 16); | 403 context.begin = (void *) simple_strtoul(argv[1], NULL, 16); |
| 404 context.cur = context.begin; | 404 context.cur = context.begin; |
| 405 context.end = context.begin + simple_strtoul(argv[2], NULL, 16); | 405 context.end = context.begin + simple_strtoul(argv[2], NULL, 16); |
| 406 | 406 |
| 407 GetFirmwareBody_setup(&f, CONFIG_OFFSET_FW_A_DATA, | 407 GetFirmwareBody_setup(&f, CONFIG_OFFSET_FW_A_DATA, |
| 408 CONFIG_OFFSET_FW_B_DATA); | 408 CONFIG_OFFSET_FW_B_DATA); |
| 409 | 409 |
| 410 » gbb = context.begin + CONFIG_OFFSET_GBB; | 410 » params.gbb_data = context.begin + CONFIG_OFFSET_GBB; |
| 411 » gbbh = (GoogleBinaryBlockHeader *) gbb; | 411 » params.gbb_size = CONFIG_LENGTH_GBB; |
| 412 » params.firmware_root_key_blob = gbb + gbbh->rootkey_offset; | |
| 413 | 412 |
| 414 debug("do_load_fw: params.firmware_root_key_blob:\t%p\n", | 413 debug("do_load_fw: params.firmware_root_key_blob:\t%p\n", |
| 415 params.firmware_root_key_blob); | 414 params.firmware_root_key_blob); |
| 416 | 415 |
| 417 params.verification_block_0 = context.begin + CONFIG_OFFSET_FW_A_KEY; | 416 params.verification_block_0 = context.begin + CONFIG_OFFSET_FW_A_KEY; |
| 418 params.verification_block_1 = context.begin + CONFIG_OFFSET_FW_B_KEY; | 417 params.verification_block_1 = context.begin + CONFIG_OFFSET_FW_B_KEY; |
| 419 | 418 |
| 420 block[0] = params.verification_block_0; | 419 block[0] = params.verification_block_0; |
| 421 block[1] = params.verification_block_1; | 420 block[1] = params.verification_block_1; |
| 422 psize[0] = ¶ms.verification_size_0; | 421 psize[0] = ¶ms.verification_size_0; |
| 423 psize[1] = ¶ms.verification_size_1; | 422 psize[1] = ¶ms.verification_size_1; |
| 424 for (i = 0; i < 2; i++) { | 423 for (i = 0; i < 2; i++) { |
| 425 kbh = (VbKeyBlockHeader *) block[i]; | 424 kbh = (VbKeyBlockHeader *) block[i]; |
| 426 fph = (VbFirmwarePreambleHeader *) | 425 fph = (VbFirmwarePreambleHeader *) |
| 427 (block[i] + kbh->key_block_size); | 426 (block[i] + kbh->key_block_size); |
| 428 | 427 |
| 429 *psize[i] = kbh->key_block_size + fph->preamble_size; | 428 *psize[i] = kbh->key_block_size + fph->preamble_size; |
| 430 | 429 |
| 431 debug("do_load_fw: params.verification_block_%d:\t%p\n", | 430 debug("do_load_fw: params.verification_block_%d:\t%p\n", |
| 432 i, block[i]); | 431 i, block[i]); |
| 433 debug("do_load_fw: params.verification_size_%d:\t%08llx\n", | 432 debug("do_load_fw: params.verification_size_%d:\t%08llx\n", |
| 434 i, *psize[i]); | 433 i, *psize[i]); |
| 435 } | 434 } |
| 436 | 435 |
| 437 » params.kernel_sign_key_blob = | 436 » params.shared_data_blob = |
| 438 (uint8_t *) simple_strtoul(argv[3], NULL, 16); | 437 (uint8_t *) simple_strtoul(argv[3], NULL, 16); |
| 439 » params.kernel_sign_key_size = LOAD_FIRMWARE_KEY_BLOB_REC_SIZE; | 438 » params.shared_data_size = VB_SHARED_DATA_REC_SIZE; |
| 440 | 439 |
| 441 » debug("do_load_fw: params.kernel_sign_key_blob:\t%p\n", | 440 » debug("do_load_fw: params.shared_data_blob:\t%p\n", |
| 442 » » » params.kernel_sign_key_blob); | 441 » » » params.shared_data_blob); |
| 443 » debug("do_load_fw: params.kernel_sign_key_size:\t%08llx\n", | 442 » debug("do_load_fw: params.shared_data_size:\t%08llx\n", |
| 444 » » » params.kernel_sign_key_size); | 443 » » » params.shared_data_size); |
| 445 | 444 |
| 446 params.caller_internal = &f; | 445 params.caller_internal = &f; |
| 447 | 446 |
| 448 params.boot_flags = 0; | 447 params.boot_flags = 0; |
| 449 | 448 |
| 450 /* TODO: load vnc.raw from NV storage */ | 449 /* TODO: load vnc.raw from NV storage */ |
| 451 params.nv_context = &vnc; | 450 params.nv_context = &vnc; |
| 452 | 451 |
| 453 status = LoadFirmware(¶ms); | 452 status = LoadFirmware(¶ms); |
| 454 | 453 |
| (...skipping 30 matching lines...) Expand all Loading... |
| 485 VbNvContext vnc; | 484 VbNvContext vnc; |
| 486 block_dev_desc_t *dev_desc; | 485 block_dev_desc_t *dev_desc; |
| 487 int i, status; | 486 int i, status; |
| 488 | 487 |
| 489 if (argc != 4) | 488 if (argc != 4) |
| 490 USAGE(1, cmdtp, "Wrong number of arguments\n"); | 489 USAGE(1, cmdtp, "Wrong number of arguments\n"); |
| 491 | 490 |
| 492 if ((dev_desc = get_bootdev()) == NULL) | 491 if ((dev_desc = get_bootdev()) == NULL) |
| 493 USAGE(1, cmdtp, "No boot device set yet\n"); | 492 USAGE(1, cmdtp, "No boot device set yet\n"); |
| 494 | 493 |
| 495 » par.header_sign_key_blob = | 494 » par.shared_data_blob = |
| 496 (uint8_t *) simple_strtoul(argv[3], NULL, 16); | 495 (uint8_t *) simple_strtoul(argv[3], NULL, 16); |
| 496 par.shared_data_size = VB_SHARED_DATA_REC_SIZE; |
| 497 |
| 497 par.bytes_per_lba = (uint64_t) dev_desc->blksz; | 498 par.bytes_per_lba = (uint64_t) dev_desc->blksz; |
| 498 par.ending_lba = (uint64_t) get_limit() - 1; | 499 par.ending_lba = (uint64_t) get_limit() - 1; |
| 499 par.kernel_buffer = (void *) simple_strtoul(argv[1], NULL, 16); | 500 par.kernel_buffer = (void *) simple_strtoul(argv[1], NULL, 16); |
| 500 par.kernel_buffer_size = (uint64_t) simple_strtoul(argv[2], NULL, 16); | 501 par.kernel_buffer_size = (uint64_t) simple_strtoul(argv[2], NULL, 16); |
| 501 par.boot_flags = BOOT_FLAG_DEVELOPER | BOOT_FLAG_SKIP_ADDR_CHECK; | 502 par.boot_flags = BOOT_FLAG_DEVELOPER | BOOT_FLAG_SKIP_ADDR_CHECK; |
| 502 | 503 |
| 504 /* TODO: load GBB; see do_load_fw() */ |
| 505 par.gbb_data = NULL; |
| 506 par.gbb_size = 0; |
| 507 |
| 503 /* TODO: load vnc.raw from NV storage */ | 508 /* TODO: load vnc.raw from NV storage */ |
| 504 par.nv_context = &vnc; | 509 par.nv_context = &vnc; |
| 505 | 510 |
| 506 status = LoadKernel(&par); | 511 status = LoadKernel(&par); |
| 507 | 512 |
| 508 if (vnc.raw_changed) { | 513 if (vnc.raw_changed) { |
| 509 /* TODO: save vnc.raw to NV storage */ | 514 /* TODO: save vnc.raw to NV storage */ |
| 510 } | 515 } |
| 511 | 516 |
| 512 switch (status) { | 517 switch (status) { |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 551 return _do_help(&cmd_cros_sub[0], ARRAY_SIZE(cmd_cros_sub), | 556 return _do_help(&cmd_cros_sub[0], ARRAY_SIZE(cmd_cros_sub), |
| 552 cmdtp, flag, argc, argv); | 557 cmdtp, flag, argc, argv); |
| 553 | 558 |
| 554 c = find_cmd_tbl(argv[1], &cmd_cros_sub[0], ARRAY_SIZE(cmd_cros_sub)); | 559 c = find_cmd_tbl(argv[1], &cmd_cros_sub[0], ARRAY_SIZE(cmd_cros_sub)); |
| 555 if (!c) | 560 if (!c) |
| 556 USAGE(1, cmdtp, "Unrecognized action: %s\n", argv[1]); | 561 USAGE(1, cmdtp, "Unrecognized action: %s\n", argv[1]); |
| 557 | 562 |
| 558 cmd_usage(c); | 563 cmd_usage(c); |
| 559 return 0; | 564 return 0; |
| 560 } | 565 } |
| OLD | NEW |