1*4f2df630SAndroid Build Coastguard Worker /* Copyright 2014 The ChromiumOS Authors 2*4f2df630SAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 3*4f2df630SAndroid Build Coastguard Worker * found in the LICENSE file. 4*4f2df630SAndroid Build Coastguard Worker */ 5*4f2df630SAndroid Build Coastguard Worker 6*4f2df630SAndroid Build Coastguard Worker #ifndef __CROS_EC_CONFIG_CHIP_H 7*4f2df630SAndroid Build Coastguard Worker #define __CROS_EC_CONFIG_CHIP_H 8*4f2df630SAndroid Build Coastguard Worker 9*4f2df630SAndroid Build Coastguard Worker #if defined(BOARD) 10*4f2df630SAndroid Build Coastguard Worker #include "core/cortex-m/config_core.h" 11*4f2df630SAndroid Build Coastguard Worker #include "hw_regdefs.h" 12*4f2df630SAndroid Build Coastguard Worker #endif 13*4f2df630SAndroid Build Coastguard Worker 14*4f2df630SAndroid Build Coastguard Worker /* Describe the RAM layout */ 15*4f2df630SAndroid Build Coastguard Worker #define CONFIG_RAM_BASE 0x10000 16*4f2df630SAndroid Build Coastguard Worker #define CONFIG_RAM_SIZE 0x10000 17*4f2df630SAndroid Build Coastguard Worker 18*4f2df630SAndroid Build Coastguard Worker /* Flash chip specifics */ 19*4f2df630SAndroid Build Coastguard Worker #define CONFIG_FLASH_BANK_SIZE 0x800 /* protect bank size */ 20*4f2df630SAndroid Build Coastguard Worker #define CONFIG_FLASH_ERASE_SIZE 0x800 /* erase bank size */ 21*4f2df630SAndroid Build Coastguard Worker /* This flash can only be written as 4-byte words (aligned properly, too). */ 22*4f2df630SAndroid Build Coastguard Worker #define CONFIG_FLASH_WRITE_SIZE 4 /* min write size (bytes) */ 23*4f2df630SAndroid Build Coastguard Worker /* But we have a 32-word buffer for writing multiple adjacent cells */ 24*4f2df630SAndroid Build Coastguard Worker #define CONFIG_FLASH_WRITE_IDEAL_SIZE 128 /* best write size (bytes) */ 25*4f2df630SAndroid Build Coastguard Worker /* The flash controller prevents bulk writes that cross row boundaries */ 26*4f2df630SAndroid Build Coastguard Worker #define CONFIG_FLASH_ROW_SIZE 256 /* row size */ 27*4f2df630SAndroid Build Coastguard Worker 28*4f2df630SAndroid Build Coastguard Worker /* Describe the flash layout */ 29*4f2df630SAndroid Build Coastguard Worker #define CONFIG_PROGRAM_MEMORY_BASE 0x40000 30*4f2df630SAndroid Build Coastguard Worker #define CONFIG_FLASH_SIZE (512 * 1024) 31*4f2df630SAndroid Build Coastguard Worker #define CONFIG_FLASH_ERASED_VALUE32 (-1U) 32*4f2df630SAndroid Build Coastguard Worker #define CONFIG_RO_HEAD_ROOM 1024 /* Room for ROM signature. */ 33*4f2df630SAndroid Build Coastguard Worker #define CONFIG_RW_HEAD_ROOM CONFIG_RO_HEAD_ROOM /* same for RW */ 34*4f2df630SAndroid Build Coastguard Worker 35*4f2df630SAndroid Build Coastguard Worker /* Memory-mapped internal flash */ 36*4f2df630SAndroid Build Coastguard Worker #define CONFIG_INTERNAL_STORAGE 37*4f2df630SAndroid Build Coastguard Worker #define CONFIG_MAPPED_STORAGE 38*4f2df630SAndroid Build Coastguard Worker 39*4f2df630SAndroid Build Coastguard Worker /* Program is run directly from storage */ 40*4f2df630SAndroid Build Coastguard Worker #define CONFIG_MAPPED_STORAGE_BASE CONFIG_PROGRAM_MEMORY_BASE 41*4f2df630SAndroid Build Coastguard Worker 42*4f2df630SAndroid Build Coastguard Worker /* Interval between HOOK_TICK notifications */ 43*4f2df630SAndroid Build Coastguard Worker #define HOOK_TICK_INTERVAL_MS 500 44*4f2df630SAndroid Build Coastguard Worker #define HOOK_TICK_INTERVAL (HOOK_TICK_INTERVAL_MS * MSEC) 45*4f2df630SAndroid Build Coastguard Worker 46*4f2df630SAndroid Build Coastguard Worker /* System stack size */ 47*4f2df630SAndroid Build Coastguard Worker #define CONFIG_STACK_SIZE 1024 48*4f2df630SAndroid Build Coastguard Worker 49*4f2df630SAndroid Build Coastguard Worker /* Idle task stack size */ 50*4f2df630SAndroid Build Coastguard Worker #define IDLE_TASK_STACK_SIZE 512 51*4f2df630SAndroid Build Coastguard Worker 52*4f2df630SAndroid Build Coastguard Worker /* Default task stack size */ 53*4f2df630SAndroid Build Coastguard Worker #define TASK_STACK_SIZE 488 54*4f2df630SAndroid Build Coastguard Worker 55*4f2df630SAndroid Build Coastguard Worker /* Larger task stack size, for hook task */ 56*4f2df630SAndroid Build Coastguard Worker #define LARGER_TASK_STACK_SIZE 640 57*4f2df630SAndroid Build Coastguard Worker 58*4f2df630SAndroid Build Coastguard Worker /* Magic for gpio.inc */ 59*4f2df630SAndroid Build Coastguard Worker #define GPIO_PIN(port, index) (port), (1 << (index)) 60*4f2df630SAndroid Build Coastguard Worker #define GPIO_PIN_MASK(port, mask) (port), (mask) 61*4f2df630SAndroid Build Coastguard Worker #define PLACEHOLDER_GPIO_BANK 0 62*4f2df630SAndroid Build Coastguard Worker 63*4f2df630SAndroid Build Coastguard Worker #define PCLK_FREQ (24 * 1000 * 1000) 64*4f2df630SAndroid Build Coastguard Worker 65*4f2df630SAndroid Build Coastguard Worker /* Number of IRQ vectors on the NVIC */ 66*4f2df630SAndroid Build Coastguard Worker #define CONFIG_IRQ_COUNT (GC_INTERRUPTS_COUNT - 15) 67*4f2df630SAndroid Build Coastguard Worker 68*4f2df630SAndroid Build Coastguard Worker /* We'll have some special commands of our own */ 69*4f2df630SAndroid Build Coastguard Worker #define CONFIG_EXTENSION_COMMAND 0xbaccd00a 70*4f2df630SAndroid Build Coastguard Worker 71*4f2df630SAndroid Build Coastguard Worker /* Chip needs to do custom pre-init */ 72*4f2df630SAndroid Build Coastguard Worker #define CONFIG_CHIP_PRE_INIT 73*4f2df630SAndroid Build Coastguard Worker 74*4f2df630SAndroid Build Coastguard Worker /* 75*4f2df630SAndroid Build Coastguard Worker * The flash memory is implemented in two halves. The SoC bootrom will look for 76*4f2df630SAndroid Build Coastguard Worker * the first-stage bootloader at the beginning of each of the two halves and 77*4f2df630SAndroid Build Coastguard Worker * prefer the newer one if both are valid. In EC terminology the bootloader 78*4f2df630SAndroid Build Coastguard Worker * would be called the RO firmware, so we actually have two, not one. The 79*4f2df630SAndroid Build Coastguard Worker * bootloader also looks in each half of the flash for a valid RW firmware, so 80*4f2df630SAndroid Build Coastguard Worker * we have two possible RW images as well. The RO and RW images are not tightly 81*4f2df630SAndroid Build Coastguard Worker * coupled, so either RO image can choose to boot either RW image. 82*4f2df630SAndroid Build Coastguard Worker * 83*4f2df630SAndroid Build Coastguard Worker * The EC firmware configuration is not (yet?) prepared to handle multiple, 84*4f2df630SAndroid Build Coastguard Worker * non-contiguous, RO/RW combinations, so there's a bit of hackery to make this 85*4f2df630SAndroid Build Coastguard Worker * work. 86*4f2df630SAndroid Build Coastguard Worker * 87*4f2df630SAndroid Build Coastguard Worker * The following macros try to make this all work. 88*4f2df630SAndroid Build Coastguard Worker */ 89*4f2df630SAndroid Build Coastguard Worker 90*4f2df630SAndroid Build Coastguard Worker /* This isn't optional, since the bootrom will always look for both */ 91*4f2df630SAndroid Build Coastguard Worker #define CHIP_HAS_RO_B 92*4f2df630SAndroid Build Coastguard Worker 93*4f2df630SAndroid Build Coastguard Worker /* It's easier for us to consider each half as having its own RO and RW */ 94*4f2df630SAndroid Build Coastguard Worker #define CFG_FLASH_HALF (CONFIG_FLASH_SIZE >> 1) 95*4f2df630SAndroid Build Coastguard Worker 96*4f2df630SAndroid Build Coastguard Worker /* 97*4f2df630SAndroid Build Coastguard Worker * We'll reserve some space at the top of each flash half for persistent 98*4f2df630SAndroid Build Coastguard Worker * storage and other stuff that's not part of the RW image. We don't promise to 99*4f2df630SAndroid Build Coastguard Worker * use these two areas for the same thing, it's just more convenient to make 100*4f2df630SAndroid Build Coastguard Worker * them the same size. 101*4f2df630SAndroid Build Coastguard Worker */ 102*4f2df630SAndroid Build Coastguard Worker #define CFG_TOP_SIZE 0x3000 103*4f2df630SAndroid Build Coastguard Worker #define CFG_TOP_A_OFF (CFG_FLASH_HALF - CFG_TOP_SIZE) 104*4f2df630SAndroid Build Coastguard Worker #define CFG_TOP_B_OFF (CONFIG_FLASH_SIZE - CFG_TOP_SIZE) 105*4f2df630SAndroid Build Coastguard Worker 106*4f2df630SAndroid Build Coastguard Worker /* The RO images start at the very beginning of each flash half */ 107*4f2df630SAndroid Build Coastguard Worker #define CONFIG_RO_MEM_OFF 0 108*4f2df630SAndroid Build Coastguard Worker #define CHIP_RO_B_MEM_OFF CFG_FLASH_HALF 109*4f2df630SAndroid Build Coastguard Worker 110*4f2df630SAndroid Build Coastguard Worker /* Size reserved for each RO image */ 111*4f2df630SAndroid Build Coastguard Worker #define CONFIG_RO_SIZE 0x4000 112*4f2df630SAndroid Build Coastguard Worker 113*4f2df630SAndroid Build Coastguard Worker /* 114*4f2df630SAndroid Build Coastguard Worker * RW images start right after the reserved-for-RO areas in each half, but only 115*4f2df630SAndroid Build Coastguard Worker * because that's where the RO images look for them. It's not a HW constraint. 116*4f2df630SAndroid Build Coastguard Worker */ 117*4f2df630SAndroid Build Coastguard Worker #define CONFIG_RW_MEM_OFF CONFIG_RO_SIZE 118*4f2df630SAndroid Build Coastguard Worker #define CONFIG_RW_B_MEM_OFF (CFG_FLASH_HALF + CONFIG_RW_MEM_OFF) 119*4f2df630SAndroid Build Coastguard Worker 120*4f2df630SAndroid Build Coastguard Worker /* Size reserved for each RW image */ 121*4f2df630SAndroid Build Coastguard Worker #define CONFIG_RW_SIZE (CFG_FLASH_HALF - CONFIG_RW_MEM_OFF - CFG_TOP_SIZE) 122*4f2df630SAndroid Build Coastguard Worker 123*4f2df630SAndroid Build Coastguard Worker /* 124*4f2df630SAndroid Build Coastguard Worker * These are needed in a couple of places, but aren't very meaningful. Because 125*4f2df630SAndroid Build Coastguard Worker * we have two RO and two RW images, these values don't really match what's 126*4f2df630SAndroid Build Coastguard Worker * described in the EC Image Geometry Spec at www.chromium.org. 127*4f2df630SAndroid Build Coastguard Worker */ 128*4f2df630SAndroid Build Coastguard Worker /* TODO(wfrichar): Make them meaningful or learn to do without */ 129*4f2df630SAndroid Build Coastguard Worker #define CONFIG_EC_PROTECTED_STORAGE_OFF 0 130*4f2df630SAndroid Build Coastguard Worker #define CONFIG_EC_PROTECTED_STORAGE_SIZE CONFIG_FLASH_SIZE 131*4f2df630SAndroid Build Coastguard Worker #define CONFIG_EC_WRITABLE_STORAGE_OFF 0 132*4f2df630SAndroid Build Coastguard Worker #define CONFIG_EC_WRITABLE_STORAGE_SIZE CONFIG_FLASH_SIZE 133*4f2df630SAndroid Build Coastguard Worker #define CONFIG_RO_STORAGE_OFF 0 134*4f2df630SAndroid Build Coastguard Worker #define CONFIG_RW_STORAGE_OFF 0 135*4f2df630SAndroid Build Coastguard Worker #define CONFIG_WP_STORAGE_OFF 0 136*4f2df630SAndroid Build Coastguard Worker #define CONFIG_WP_STORAGE_SIZE CONFIG_EC_PROTECTED_STORAGE_SIZE 137*4f2df630SAndroid Build Coastguard Worker 138*4f2df630SAndroid Build Coastguard Worker /* 139*4f2df630SAndroid Build Coastguard Worker * Note: early versions of the SoC would let us build and manually sign our own 140*4f2df630SAndroid Build Coastguard Worker * bootloaders, and the RW images could be self-signed. Production SoCs require 141*4f2df630SAndroid Build Coastguard Worker * officially-signed binary blobs to use for the RO bootloader(s), and the RW 142*4f2df630SAndroid Build Coastguard Worker * images that we build must be manually signed. So even though we generate RO 143*4f2df630SAndroid Build Coastguard Worker * firmware images, they may not be useful. 144*4f2df630SAndroid Build Coastguard Worker */ 145*4f2df630SAndroid Build Coastguard Worker #define CONFIG_CUSTOMIZED_RO 146*4f2df630SAndroid Build Coastguard Worker 147*4f2df630SAndroid Build Coastguard Worker /* Number of I2C ports */ 148*4f2df630SAndroid Build Coastguard Worker #define I2C_PORT_COUNT 2 149*4f2df630SAndroid Build Coastguard Worker 150*4f2df630SAndroid Build Coastguard Worker #define CONFIG_FLASH_LOG_SPACE CONFIG_FLASH_BANK_SIZE 151*4f2df630SAndroid Build Coastguard Worker 152*4f2df630SAndroid Build Coastguard Worker /* 153*4f2df630SAndroid Build Coastguard Worker * Flash log occupies space in the top of RO_B section, its counterpart in 154*4f2df630SAndroid Build Coastguard Worker * RO_A is occupied by the certs. 155*4f2df630SAndroid Build Coastguard Worker */ 156*4f2df630SAndroid Build Coastguard Worker #define CONFIG_FLASH_LOG_BASE \ 157*4f2df630SAndroid Build Coastguard Worker (CONFIG_PROGRAM_MEMORY_BASE + CHIP_RO_B_MEM_OFF + CONFIG_RO_SIZE - \ 158*4f2df630SAndroid Build Coastguard Worker CONFIG_FLASH_LOG_SPACE) 159*4f2df630SAndroid Build Coastguard Worker 160*4f2df630SAndroid Build Coastguard Worker /* Space reserved for RO hashes */ 161*4f2df630SAndroid Build Coastguard Worker #define AP_RO_DATA_SPACE_SIZE CONFIG_FLASH_BANK_SIZE 162*4f2df630SAndroid Build Coastguard Worker #define AP_RO_DATA_SPACE_ADDR (CONFIG_FLASH_LOG_BASE - AP_RO_DATA_SPACE_SIZE) 163*4f2df630SAndroid Build Coastguard Worker 164*4f2df630SAndroid Build Coastguard Worker /* Maximum space available for the RO image */ 165*4f2df630SAndroid Build Coastguard Worker #define MAX_RO_CODE_SIZE (CONFIG_RO_SIZE - CONFIG_FLASH_LOG_SPACE - \ 166*4f2df630SAndroid Build Coastguard Worker AP_RO_DATA_SPACE_SIZE) 167*4f2df630SAndroid Build Coastguard Worker 168*4f2df630SAndroid Build Coastguard Worker /* Use software crypto (libcryptoc). */ 169*4f2df630SAndroid Build Coastguard Worker #define CONFIG_LIBCRYPTOC 170*4f2df630SAndroid Build Coastguard Worker #endif /* __CROS_EC_CONFIG_CHIP_H */ 171