xref: /aosp_15_r20/external/gsc-utils/chip/g/config_chip.h (revision 4f2df630800bdcf1d4f0decf95d8a1cb87344f5f)
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