blob: 759e897131d351fe60ee34b89a90d71e795f5182 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
|
# 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.
#
# Command automation for NPCX5M5G chip
# Program spi flash
source [find mem_helper.tcl]
proc flash_npcx {image_path cram_addr image_offset image_size spifw_image} {
set UPLOAD_FLAG 0x200C4000;
set UUT_TAG 0x200C3000;
echo "*** NPCX Reset and halt CPU first ***"
reset halt
# Clear whole Code RAM
mwb $cram_addr 0xFF $image_size
# Upload binary image to Code RAM
load_image $image_path $cram_addr
# Upload program spi image FW to lower 16KB Data RAM
load_image $spifw_image 0x200C3020
# Set sp to upper 16KB Data RAM
reg sp 0x200C8000
# Set spi offset address of uploaded image
reg r0 $image_offset
# Set spi program size of uploaded image
reg r1 $image_size
# Set pc to start of spi program function
reg pc 0x200C3021
# Clear upload flag
mww $UPLOAD_FLAG 0x0
# Clear UUT Tag
mww $UUT_TAG 0x0
echo "*** Program ... ***"
# Start to program spi flash
resume
# Wait for any pending flash operations to complete
while {[expr [mrw $UPLOAD_FLAG] & 0x01] == 0} { sleep 1000 }
if {[expr [mrw $UPLOAD_FLAG] & 0x02] == 0} {
echo "*** Program Fail ***"
} else {
echo "*** Program Done ***"
}
# Halt CPU
halt
}
proc flash_npcx5m5g {image_path image_offset spifw_image} {
# 96 KB for RO & RW regions
set fw_size 0x18000
# Code RAM start address
set cram_addr 0x100A8000
echo "*** Start to program npcx5m5g with $image_path ***"
flash_npcx $image_path $cram_addr $image_offset $fw_size $spifw_image
echo "*** Finish program npcx5m5g ***\r\n"
}
proc flash_npcx5m6g {image_path image_offset spifw_image} {
# 224 KB for RO & RW regions
set fw_size 0x38000
# Code RAM start address
set cram_addr 0x10088000
echo "*** Start to program npcx5m6g with $image_path ***"
flash_npcx $image_path $cram_addr $image_offset $fw_size $spifw_image
echo "*** Finish program npcx5m6g ***\r\n"
}
proc flash_npcx7m6x {image_path image_offset spifw_image} {
# 192 KB for RO & RW regions
set fw_size 0x30000
# Code RAM start address
set cram_addr 0x10090000
echo "*** Start to program npcx7m6f/g/w with $image_path ***"
flash_npcx $image_path $cram_addr $image_offset $fw_size $spifw_image
echo "*** Finish program npcx7m6f/g/w ***\r\n"
}
proc flash_npcx7m7x {image_path image_offset spifw_image} {
# 320 KB for RO & RW regions
set fw_size 0x50000
# Code RAM start address
set cram_addr 0x10070000
echo "*** Start to program npcx7m7f/g/w with $image_path ***"
flash_npcx $image_path $cram_addr $image_offset $fw_size $spifw_image
echo "*** Finish program npcx7m7f/g/w ***\r\n"
}
proc flash_npcx_ro {chip_name image_dir image_offset} {
set MPU_RNR 0xE000ED98;
set MPU_RASR 0xE000EDA0;
# images path
set ro_image_path $image_dir/RO/ec.RO.flat
set spifw_image $image_dir/chip/npcx/spiflashfw/npcx_monitor.bin
# Halt CPU first
halt
# disable MPU for Data RAM
mww $MPU_RNR 0x1
mww $MPU_RASR 0x0
if {$chip_name == "npcx_5m5g_jtag"} {
# program RO region
flash_npcx5m5g $ro_image_path $image_offset $spifw_image
} elseif {$chip_name == "npcx_5m6g_jtag"} {
# program RO region
flash_npcx5m6g $ro_image_path $image_offset $spifw_image
} elseif {$chip_name == "npcx_7m6x_jtag"} {
# program RO region
flash_npcx7m6x $ro_image_path $image_offset $spifw_image
} elseif {$chip_name == "npcx_7m7x_jtag"} {
# program RO region
flash_npcx7m7x $ro_image_path $image_offset $spifw_image
} else {
echo $chip_name "no supported."
}
}
proc flash_npcx_all {chip_name image_dir image_offset} {
set MPU_RNR 0xE000ED98;
set MPU_RASR 0xE000EDA0;
# images path
set ro_image_path $image_dir/RO/ec.RO.flat
set rw_image_path $image_dir/RW/ec.RW.bin
set spifw_image $image_dir/chip/npcx/spiflashfw/npcx_monitor.bin
# Halt CPU first
halt
# disable MPU for Data RAM
mww $MPU_RNR 0x1
mww $MPU_RASR 0x0
if {$chip_name == "npcx_5m5g_jtag"} {
# RW images offset - 128 KB
set rw_image_offset [expr ($image_offset + 0x20000)]
# program RO region
flash_npcx5m5g $ro_image_path $image_offset $spifw_image
# program RW region
flash_npcx5m5g $rw_image_path $rw_image_offset $spifw_image
} elseif {$chip_name == "npcx_5m6g_jtag"} {
# RW images offset - 256 KB
set rw_image_offset [expr ($image_offset + 0x40000)]
# program RO region
flash_npcx5m6g $ro_image_path $image_offset $spifw_image
# program RW region
flash_npcx5m6g $rw_image_path $rw_image_offset $spifw_image
} elseif {$chip_name == "npcx_7m6x_jtag"} {
# RW images offset - 256 KB
set rw_image_offset [expr ($image_offset + 0x40000)]
# program RO region
flash_npcx7m6x $ro_image_path $image_offset $spifw_image
# program RW region
flash_npcx7m6x $rw_image_path $rw_image_offset $spifw_image
} elseif {$chip_name == "npcx_7m7x_jtag"} {
# RW images offset - 512 KB
set rw_image_offset [expr ($image_offset + 0x80000)]
# program RO region
flash_npcx7m7x $ro_image_path $image_offset $spifw_image
# program RW region
flash_npcx7m7x $rw_image_path $rw_image_offset $spifw_image
} else {
echo $chip_name "no supported."
}
}
proc reset_halt_cpu { } {
echo "*** NPCX Reset and halt CPU first ***"
reset halt
}
|