| OLD | NEW |
| 1 /* | 1 /* |
| 2 * This file is part of the flashrom project. | 2 * This file is part of the flashrom project. |
| 3 * | 3 * |
| 4 * Copyright (C) 2010 Google, Inc. | 4 * Copyright (C) 2010 Google, Inc. |
| 5 * | 5 * |
| 6 * Redistribution and use in source and binary forms, with or without | 6 * Redistribution and use in source and binary forms, with or without |
| 7 * modification, are permitted provided that the following conditions | 7 * modification, are permitted provided that the following conditions |
| 8 * are met: | 8 * are met: |
| 9 * | 9 * |
| 10 * Redistributions of source code must retain the above copyright | 10 * Redistributions of source code must retain the above copyright |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 45 #include <time.h> | 45 #include <time.h> |
| 46 #include <unistd.h> | 46 #include <unistd.h> |
| 47 #include <stdlib.h> | 47 #include <stdlib.h> |
| 48 #include "flash.h" | 48 #include "flash.h" |
| 49 #include "chipdrivers.h" | 49 #include "chipdrivers.h" |
| 50 #include "flashchips.h" | 50 #include "flashchips.h" |
| 51 #include "programmer.h" | 51 #include "programmer.h" |
| 52 #include "spi.h" | 52 #include "spi.h" |
| 53 #include "writeprotect.h" | 53 #include "writeprotect.h" |
| 54 | 54 |
| 55 void wpce775x_shutdown(void *); |
| 56 |
| 55 /** | 57 /** |
| 56 * Definition of WPCE775X WCB (Write Command Buffer), as known as Shared Access | 58 * Definition of WPCE775X WCB (Write Command Buffer), as known as Shared Access |
| 57 * Window 2. | 59 * Window 2. |
| 58 * | 60 * |
| 59 * The document name is "WPCE775X Software User Guide Revision 1.2". | 61 * The document name is "WPCE775X Software User Guide Revision 1.2". |
| 60 * | 62 * |
| 61 * Assume the host is little endian. | 63 * Assume the host is little endian. |
| 62 */ | 64 */ |
| 63 __attribute__((packed)) | 65 __attribute__((packed)) |
| 64 struct wpce775x_wcb { | 66 struct wpce775x_wcb { |
| (...skipping 525 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 590 msg_pdbg("get fwh_id: 0x%02x\n", fwh_id); | 592 msg_pdbg("get fwh_id: 0x%02x\n", fwh_id); |
| 591 | 593 |
| 592 /* TODO: set fwh_idsel of chipset. | 594 /* TODO: set fwh_idsel of chipset. |
| 593 Currently, we employ "-p internal:fwh_idsel=0x0000223e". */ | 595 Currently, we employ "-p internal:fwh_idsel=0x0000223e". */ |
| 594 | 596 |
| 595 /* Enter flash update mode unconditionally. This is required even | 597 /* Enter flash update mode unconditionally. This is required even |
| 596 for reading. */ | 598 for reading. */ |
| 597 if (EnterFlashUpdate()) return 1; | 599 if (EnterFlashUpdate()) return 1; |
| 598 | 600 |
| 599 spi_controller = SPI_CONTROLLER_WPCE775X; | 601 spi_controller = SPI_CONTROLLER_WPCE775X; |
| 602 register_shutdown(wpce775x_shutdown, NULL); |
| 600 msg_pdbg("%s(): successfully initialized wpce775x\n", __func__); | 603 msg_pdbg("%s(): successfully initialized wpce775x\n", __func__); |
| 601 return 0; | 604 return 0; |
| 602 | |
| 603 } | 605 } |
| 604 | 606 |
| 605 int wpce775x_shutdown(void) | 607 void wpce775x_shutdown(void *data) |
| 606 { | 608 { |
| 607 if (spi_controller != SPI_CONTROLLER_WPCE775X) | 609 if (spi_controller != SPI_CONTROLLER_WPCE775X) |
| 608 » » return 0; | 610 » » return; |
| 609 | 611 |
| 610 msg_pdbg("%s(): firmware %s\n", __func__, | 612 msg_pdbg("%s(): firmware %s\n", __func__, |
| 611 firmware_changed ? "changed" : "not changed"); | 613 firmware_changed ? "changed" : "not changed"); |
| 612 | 614 |
| 613 msg_pdbg("%s: in_flash_update_mode: %d\n", __func__, in_flash_update_mod
e); | 615 msg_pdbg("%s: in_flash_update_mode: %d\n", __func__, in_flash_update_mod
e); |
| 614 if (in_flash_update_mode) { | 616 if (in_flash_update_mode) { |
| 615 if (firmware_changed) | 617 if (firmware_changed) |
| 616 ExitFlashUpdateFirmwareChanged(); | 618 ExitFlashUpdateFirmwareChanged(); |
| 617 else | 619 else |
| 618 ExitFlashUpdateFirmwareNoChange(); | 620 ExitFlashUpdateFirmwareNoChange(); |
| 619 | 621 |
| 620 in_flash_update_mode = 0; | 622 in_flash_update_mode = 0; |
| 621 } | 623 } |
| 622 | 624 |
| 623 if (initflash_cfg) | 625 if (initflash_cfg) |
| 624 free(initflash_cfg); | 626 free(initflash_cfg); |
| 625 else | 627 else |
| 626 msg_perr("%s(): No initflash_cfg to free?!?\n", __func__); | 628 msg_perr("%s(): No initflash_cfg to free?!?\n", __func__); |
| 627 | |
| 628 return 0; | |
| 629 } | 629 } |
| 630 | 630 |
| 631 /* Called by internal_init() */ | 631 /* Called by internal_init() */ |
| 632 int wpce775x_probe_spi_flash(const char *name) | 632 int wpce775x_probe_spi_flash(const char *name) |
| 633 { | 633 { |
| 634 int ret; | 634 int ret; |
| 635 | 635 |
| 636 if (!(buses_supported & CHIP_BUSTYPE_FWH)) { | 636 if (!(buses_supported & CHIP_BUSTYPE_FWH)) { |
| 637 msg_pdbg("%s():%d buses not support FWH\n", __func__, __LINE__); | 637 msg_pdbg("%s():%d buses not support FWH\n", __func__, __LINE__); |
| 638 return 1; | 638 return 1; |
| (...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 976 /* unsupported opcodes */ | 976 /* unsupported opcodes */ |
| 977 msg_pdbg("unsupported SPI opcode: %02x\n", opcode); | 977 msg_pdbg("unsupported SPI opcode: %02x\n", opcode); |
| 978 rc = 1; | 978 rc = 1; |
| 979 break; | 979 break; |
| 980 } | 980 } |
| 981 | 981 |
| 982 msg_pdbg("%s: opcode: 0x%02x\n", __func__, opcode); | 982 msg_pdbg("%s: opcode: 0x%02x\n", __func__, opcode); |
| 983 return rc; | 983 return rc; |
| 984 } | 984 } |
| 985 #endif | 985 #endif |
| OLD | NEW |