mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2025-12-30 02:20:48 +00:00
BUG=chrome-os-partner:11150 TEST=manual Enable WP GPIO. Then from a root shell localhost ~ # ectool flashprotect Flash protect flags: 0x00000008 wp_gpio_asserted Writable flags: 0x00000005 ro_at_boot rw_now localhost ~ # ectool flashprotect enable Flash protect flags: 0x0000000b wp_gpio_asserted ro_at_boot ro_now Writable flags: 0x00000004 rw_now localhost ~ # ectool flashprotect enable Flash protect flags: 0x0000000b wp_gpio_asserted ro_at_boot ro_now Writable flags: 0x00000004 rw_now localhost ~ # ectool flashprotect now Flash protect flags: 0x0000000f wp_gpio_asserted ro_at_boot ro_now rw_now Writable flags: 0x00000000 localhost ~ # ectool flashprotect now Flash protect flags: 0x0000000f wp_gpio_asserted ro_at_boot ro_now rw_now Writable flags: 0x00000000 localhost ~ # ectool flashprotect disable Flash protect flags: 0x0000000f wp_gpio_asserted ro_at_boot ro_now rw_now Writable flags: 0x00000000 Unable to set requested flags (wanted mask 0x00000001 flags 0x00000000) Which is expected, because writable mask is 0x00000000. Then disable WP GPIO and reboot localhost ~ # ectool flashprotect Flash protect flags: 0x00000001 ro_at_boot Writable flags: 0x00000001 ro_at_boot localhost ~ # ectool flashprotect disable Flash protect flags: 0x00000000 Writable flags: 0x00000001 ro_at_boot Change-Id: Idc5de3b3033521467aca8fb0ba9b7c378d0ad2a1 Signed-off-by: Randall Spangler <rspangler@chromium.org> Reviewed-on: https://gerrit.chromium.org/gerrit/27799
169 lines
4.7 KiB
C
169 lines
4.7 KiB
C
/* Copyright (c) 2012 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 */
|
|
|
|
#ifndef __CROS_EC_FLASH_H
|
|
#define __CROS_EC_FLASH_H
|
|
|
|
#include "common.h"
|
|
#include "ec_commands.h" /* For EC_FLASH_PROTECT_* flags */
|
|
|
|
/*****************************************************************************/
|
|
/* Low-level methods, for use by flash_common. */
|
|
|
|
/**
|
|
* Initialize the physical flash interface.
|
|
*/
|
|
int flash_physical_pre_init(void);
|
|
|
|
/**
|
|
* Return the physical size of flash in bytes as read from the flash chip
|
|
* itself.
|
|
*
|
|
* Used during testing to confirm CONFIG_FLASH_PHYSICAL_SIZE is correct.
|
|
* Most other code should use CONFIG_FLASH_PHYSICAL_SIZE.
|
|
*/
|
|
int flash_physical_size(void);
|
|
|
|
/**
|
|
* Get the physical memory address of a flash offset
|
|
*
|
|
* This is used for direct flash access. We assume that the flash is
|
|
* contiguous from this start address through to the end of the usable
|
|
* flash.
|
|
*
|
|
* @param offset Flash offset to get address of
|
|
* @param dataptrp Returns pointer to memory address of flash offset
|
|
* @return pointer to flash memory offset, if ok, else NULL
|
|
*/
|
|
static inline char *flash_physical_dataptr(int offset)
|
|
{
|
|
return (char *)offset;
|
|
}
|
|
|
|
/**
|
|
* Write to physical flash.
|
|
*
|
|
* Offset and size must be a multiple of CONFIG_FLASH_WRITE_SIZE.
|
|
*
|
|
* @param offset Flash offset to write.
|
|
* @param size Number of bytes to write.
|
|
* @param data Data to write to flash. Must be 32-bit aligned.
|
|
*/
|
|
int flash_physical_write(int offset, int size, const char *data);
|
|
|
|
/**
|
|
* Erase physical flash.
|
|
*
|
|
* Offset and size must be a multiple of CONFIG_FLASH_ERASE_SIZE.
|
|
*
|
|
* @param offset Flash offset to erase.
|
|
* @param size Number of bytes to erase.
|
|
*/
|
|
int flash_physical_erase(int offset, int size);
|
|
|
|
/**
|
|
* Read physical write protect setting for a flash bank.
|
|
*
|
|
* @param bank Bank index to check.
|
|
* @return non-zero if bank is protected until reboot.
|
|
*/
|
|
int flash_physical_get_protect(int bank);
|
|
|
|
/**
|
|
* Protect the flash banks until reboot.
|
|
*
|
|
* @param start_bank Start bank to protect
|
|
* @param bank_count Number of banks to protect
|
|
*/
|
|
void flash_physical_set_protect(int start_bank, int bank_count);
|
|
|
|
/*****************************************************************************/
|
|
/* High-level interface for use by other modules. */
|
|
|
|
/**
|
|
* Initialize the module.
|
|
*
|
|
* Applies at-boot protection settings if necessary.
|
|
*/
|
|
int flash_pre_init(void);
|
|
|
|
/**
|
|
* Return the usable size of flash in bytes. Note that this may be smaller
|
|
* than the physical flash size.
|
|
*/
|
|
int flash_get_size(void);
|
|
|
|
/**
|
|
* Get the physical memory address of a flash offset
|
|
*
|
|
* This is used for direct flash access. We assume that the flash is
|
|
* contiguous from this start address through to the end of the usable
|
|
* flash.
|
|
*
|
|
* This function returns -1 if offset + size_req extends beyond the end
|
|
* of flash, the offset is out of range, or if either size_req or offset
|
|
* are not aligned to 'align'.
|
|
*
|
|
* @param offset Flash offset to get address of
|
|
* @param size_req Number of bytes requested
|
|
* @param align Ensure offset and size_req are aligned to given
|
|
* power of two.
|
|
* @param ptrp If not NULL, returns a pointer to this flash offset
|
|
* in memory, unless function fails, iwc it is unset.
|
|
* @return size of flash region available at *ptrp, or -1 on error
|
|
*/
|
|
int flash_dataptr(int offset, int size_req, int align, char **ptrp);
|
|
|
|
/**
|
|
* Write to flash.
|
|
*
|
|
* Offset and size must be a multiple of CONFIG_FLASH_WRITE_SIZE.
|
|
*
|
|
* @param offset Flash offset to write.
|
|
* @param size Number of bytes to write.
|
|
* @param data Data to write to flash. Must be 32-bit aligned.
|
|
*/
|
|
int flash_write(int offset, int size, const char *data);
|
|
|
|
/**
|
|
* Erase flash.
|
|
*
|
|
* Offset and size must be a multiple of CONFIG_FLASH_ERASE_SIZE.
|
|
*
|
|
* @param offset Flash offset to erase.
|
|
* @param size Number of bytes to erase.
|
|
*/
|
|
int flash_erase(int offset, int size);
|
|
|
|
/**
|
|
* Protect the entire flash until reboot.
|
|
*
|
|
* If the write protect pin is deasserted, this request is ignored.
|
|
*/
|
|
int flash_protect_until_reboot(void);
|
|
|
|
/**
|
|
* Enable write protect for the read-only code.
|
|
*
|
|
* Once write protect is enabled, it will STAY enabled until the system is
|
|
* hard-rebooted with the hardware write protect pin deasserted. If the write
|
|
* protect pin is deasserted, the protect setting is ignored, and the entire
|
|
* flash will be writable.
|
|
*
|
|
* @param enable Enable write protection
|
|
*/
|
|
int flash_enable_protect(int enable);
|
|
|
|
/**
|
|
* Return the flash protect lock status.
|
|
*
|
|
* Uses the EC_FLASH_PROTECT_* flags from ec_commands.h
|
|
*/
|
|
int flash_get_protect(void);
|
|
|
|
#endif /* __CROS_EC_FLASH_H */
|