| /* Copyright 2014 The Chromium OS Authors. All rights reserved. |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| /* Flash memory module for Chrome EC */ |
| |
| #include "common.h" |
| #include "flash.h" |
| #include "registers.h" |
| |
| /*****************************************************************************/ |
| /* Physical layer APIs */ |
| |
| int flash_physical_get_protect(int block) |
| { |
| return !(STM32_FLASH_WRPR & (1 << block)); |
| } |
| |
| uint32_t flash_physical_get_protect_flags(void) |
| { |
| uint32_t flags = 0; |
| uint32_t wrp01 = REG32(STM32_OPTB_BASE + STM32_OPTB_WRP01); |
| uint32_t wrp23 = REG32(STM32_OPTB_BASE + STM32_OPTB_WRP23); |
| |
| if (STM32_FLASH_WRPR == 0) |
| flags |= EC_FLASH_PROTECT_ALL_NOW; |
| |
| if (wrp01 == 0xff00ff00 && wrp23 == 0xff00ff00) |
| flags |= EC_FLASH_PROTECT_ALL_AT_BOOT; |
| |
| return flags; |
| } |
| |
| int flash_physical_protect_now(int all) |
| { |
| return EC_ERROR_INVAL; |
| } |
| |
| int flash_physical_restore_state(void) |
| { |
| /* Nothing to restore */ |
| return 0; |
| } |
| |
| uint32_t flash_physical_get_valid_flags(void) |
| { |
| return EC_FLASH_PROTECT_RO_AT_BOOT | |
| EC_FLASH_PROTECT_ALL_AT_BOOT | |
| EC_FLASH_PROTECT_RO_NOW | |
| EC_FLASH_PROTECT_ALL_NOW; |
| } |
| |
| uint32_t flash_physical_get_writable_flags(uint32_t cur_flags) |
| { |
| uint32_t ret = 0; |
| |
| /* If RO protection isn't enabled, its at-boot state can be changed. */ |
| if (!(cur_flags & EC_FLASH_PROTECT_RO_NOW)) |
| ret |= EC_FLASH_PROTECT_RO_AT_BOOT; |
| |
| /* |
| * RW at-boot state can be set if WP GPIO is asserted and can always |
| * be cleared. |
| */ |
| if (cur_flags & (EC_FLASH_PROTECT_ALL_AT_BOOT | |
| EC_FLASH_PROTECT_GPIO_ASSERTED)) |
| ret |= EC_FLASH_PROTECT_ALL_AT_BOOT; |
| |
| return ret; |
| } |