]>
Commit | Line | Data |
---|---|---|
2eb5fc13 | 1 | # -*- coding: utf-8 -*- |
0d24de9d SG |
2 | # |
3 | # Copyright (c) 2011 The Chromium OS Authors. | |
4 | # | |
1a459660 | 5 | # SPDX-License-Identifier: GPL-2.0+ |
0d24de9d SG |
6 | # |
7 | ||
8 | import os | |
9 | import tempfile | |
10 | import unittest | |
11 | ||
12 | import checkpatch | |
13 | import gitutil | |
14 | import patchstream | |
15 | import series | |
16 | ||
17 | ||
18 | class TestPatch(unittest.TestCase): | |
19 | """Test this program | |
20 | ||
21 | TODO: Write tests for the rest of the functionality | |
22 | """ | |
23 | ||
24 | def testBasic(self): | |
25 | """Test basic filter operation""" | |
26 | data=''' | |
27 | ||
28 | From 656c9a8c31fa65859d924cd21da920d6ba537fad Mon Sep 17 00:00:00 2001 | |
29 | From: Simon Glass <sjg@chromium.org> | |
30 | Date: Thu, 28 Apr 2011 09:58:51 -0700 | |
31 | Subject: [PATCH (resend) 3/7] Tegra2: Add more clock support | |
32 | ||
33 | This adds functions to enable/disable clocks and reset to on-chip peripherals. | |
34 | ||
2eb5fc13 SG |
35 | cmd/pci.c:152:11: warning: format ‘%llx’ expects argument of type |
36 | ‘long long unsigned int’, but argument 3 has type | |
37 | ‘u64 {aka long unsigned int}’ [-Wformat=] | |
38 | ||
0d24de9d SG |
39 | BUG=chromium-os:13875 |
40 | TEST=build U-Boot for Seaboard, boot | |
41 | ||
42 | Change-Id: I80fe1d0c0b7dd10aa58ce5bb1d9290b6664d5413 | |
43 | ||
44 | Review URL: http://codereview.chromium.org/6900006 | |
45 | ||
46 | Signed-off-by: Simon Glass <sjg@chromium.org> | |
47 | --- | |
48 | arch/arm/cpu/armv7/tegra2/Makefile | 2 +- | |
49 | arch/arm/cpu/armv7/tegra2/ap20.c | 57 ++---- | |
50 | arch/arm/cpu/armv7/tegra2/clock.c | 163 +++++++++++++++++ | |
51 | ''' | |
52 | expected=''' | |
53 | ||
54 | From 656c9a8c31fa65859d924cd21da920d6ba537fad Mon Sep 17 00:00:00 2001 | |
55 | From: Simon Glass <sjg@chromium.org> | |
56 | Date: Thu, 28 Apr 2011 09:58:51 -0700 | |
57 | Subject: [PATCH (resend) 3/7] Tegra2: Add more clock support | |
58 | ||
59 | This adds functions to enable/disable clocks and reset to on-chip peripherals. | |
60 | ||
2eb5fc13 SG |
61 | cmd/pci.c:152:11: warning: format ‘%llx’ expects argument of type |
62 | ‘long long unsigned int’, but argument 3 has type | |
63 | ‘u64 {aka long unsigned int}’ [-Wformat=] | |
64 | ||
0d24de9d SG |
65 | Signed-off-by: Simon Glass <sjg@chromium.org> |
66 | --- | |
e752edcb | 67 | |
0d24de9d SG |
68 | arch/arm/cpu/armv7/tegra2/Makefile | 2 +- |
69 | arch/arm/cpu/armv7/tegra2/ap20.c | 57 ++---- | |
70 | arch/arm/cpu/armv7/tegra2/clock.c | 163 +++++++++++++++++ | |
71 | ''' | |
72 | out = '' | |
73 | inhandle, inname = tempfile.mkstemp() | |
74 | infd = os.fdopen(inhandle, 'w') | |
75 | infd.write(data) | |
76 | infd.close() | |
77 | ||
78 | exphandle, expname = tempfile.mkstemp() | |
79 | expfd = os.fdopen(exphandle, 'w') | |
80 | expfd.write(expected) | |
81 | expfd.close() | |
82 | ||
83 | patchstream.FixPatch(None, inname, series.Series(), None) | |
84 | rc = os.system('diff -u %s %s' % (inname, expname)) | |
85 | self.assertEqual(rc, 0) | |
86 | ||
87 | os.remove(inname) | |
88 | os.remove(expname) | |
89 | ||
90 | def GetData(self, data_type): | |
91 | data=''' | |
92 | From 4924887af52713cabea78420eff03badea8f0035 Mon Sep 17 00:00:00 2001 | |
93 | From: Simon Glass <sjg@chromium.org> | |
94 | Date: Thu, 7 Apr 2011 10:14:41 -0700 | |
95 | Subject: [PATCH 1/4] Add microsecond boot time measurement | |
96 | ||
97 | This defines the basics of a new boot time measurement feature. This allows | |
98 | logging of very accurate time measurements as the boot proceeds, by using | |
99 | an available microsecond counter. | |
100 | ||
101 | %s | |
102 | --- | |
103 | README | 11 ++++++++ | |
104 | common/bootstage.c | 50 ++++++++++++++++++++++++++++++++++++ | |
105 | include/bootstage.h | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++ | |
106 | include/common.h | 8 ++++++ | |
107 | 5 files changed, 141 insertions(+), 0 deletions(-) | |
108 | create mode 100644 common/bootstage.c | |
109 | create mode 100644 include/bootstage.h | |
110 | ||
111 | diff --git a/README b/README | |
112 | index 6f3748d..f9e4e65 100644 | |
113 | --- a/README | |
114 | +++ b/README | |
115 | @@ -2026,6 +2026,17 @@ The following options need to be configured: | |
05d5282b DA |
116 | example, some LED's) on your board. At the moment, |
117 | the following checkpoints are implemented: | |
0d24de9d SG |
118 | |
119 | +- Time boot progress | |
120 | + CONFIG_BOOTSTAGE | |
121 | + | |
122 | + Define this option to enable microsecond boot stage timing | |
123 | + on supported platforms. For this to work your platform | |
124 | + needs to define a function timer_get_us() which returns the | |
125 | + number of microseconds since reset. This would normally | |
126 | + be done in your SOC or board timer.c file. | |
127 | + | |
128 | + You can add calls to bootstage_mark() to set time markers. | |
129 | + | |
130 | - Standalone program support: | |
05d5282b | 131 | CONFIG_STANDALONE_LOAD_ADDR |
0d24de9d SG |
132 | |
133 | diff --git a/common/bootstage.c b/common/bootstage.c | |
134 | new file mode 100644 | |
135 | index 0000000..2234c87 | |
136 | --- /dev/null | |
137 | +++ b/common/bootstage.c | |
1a459660 | 138 | @@ -0,0 +1,39 @@ |
0d24de9d SG |
139 | +/* |
140 | + * Copyright (c) 2011, Google Inc. All rights reserved. | |
141 | + * | |
1a459660 | 142 | + * SPDX-License-Identifier: GPL-2.0+ |
0d24de9d SG |
143 | + */ |
144 | + | |
145 | + | |
146 | +/* | |
147 | + * This module records the progress of boot and arbitrary commands, and | |
148 | + * permits accurate timestamping of each. The records can optionally be | |
149 | + * passed to kernel in the ATAGs | |
150 | + */ | |
151 | + | |
152 | +#include <common.h> | |
153 | + | |
154 | + | |
155 | +struct bootstage_record { | |
156 | + uint32_t time_us; | |
157 | + const char *name; | |
158 | +}; | |
159 | + | |
160 | +static struct bootstage_record record[BOOTSTAGE_COUNT]; | |
161 | + | |
162 | +uint32_t bootstage_mark(enum bootstage_id id, const char *name) | |
163 | +{ | |
164 | + struct bootstage_record *rec = &record[id]; | |
165 | + | |
166 | + /* Only record the first event for each */ | |
167 | +%sif (!rec->name) { | |
168 | + rec->time_us = (uint32_t)timer_get_us(); | |
169 | + rec->name = name; | |
170 | + } | |
d29fe6e2 SG |
171 | + if (!rec->name && |
172 | + %ssomething_else) { | |
173 | + rec->time_us = (uint32_t)timer_get_us(); | |
174 | + rec->name = name; | |
175 | + } | |
0d24de9d SG |
176 | +%sreturn rec->time_us; |
177 | +} | |
178 | -- | |
179 | 1.7.3.1 | |
180 | ''' | |
181 | signoff = 'Signed-off-by: Simon Glass <sjg@chromium.org>\n' | |
182 | tab = ' ' | |
d29fe6e2 | 183 | indent = ' ' |
0d24de9d SG |
184 | if data_type == 'good': |
185 | pass | |
186 | elif data_type == 'no-signoff': | |
187 | signoff = '' | |
188 | elif data_type == 'spaces': | |
189 | tab = ' ' | |
d29fe6e2 SG |
190 | elif data_type == 'indent': |
191 | indent = tab | |
0d24de9d | 192 | else: |
a920a17b | 193 | print('not implemented') |
d29fe6e2 | 194 | return data % (signoff, tab, indent, tab) |
0d24de9d SG |
195 | |
196 | def SetupData(self, data_type): | |
197 | inhandle, inname = tempfile.mkstemp() | |
198 | infd = os.fdopen(inhandle, 'w') | |
199 | data = self.GetData(data_type) | |
200 | infd.write(data) | |
201 | infd.close() | |
202 | return inname | |
203 | ||
d29fe6e2 | 204 | def testGood(self): |
0d24de9d SG |
205 | """Test checkpatch operation""" |
206 | inf = self.SetupData('good') | |
d29fe6e2 SG |
207 | result = checkpatch.CheckPatch(inf) |
208 | self.assertEqual(result.ok, True) | |
209 | self.assertEqual(result.problems, []) | |
210 | self.assertEqual(result.errors, 0) | |
211 | self.assertEqual(result.warnings, 0) | |
212 | self.assertEqual(result.checks, 0) | |
e752edcb | 213 | self.assertEqual(result.lines, 56) |
0d24de9d SG |
214 | os.remove(inf) |
215 | ||
d29fe6e2 | 216 | def testNoSignoff(self): |
0d24de9d | 217 | inf = self.SetupData('no-signoff') |
d29fe6e2 SG |
218 | result = checkpatch.CheckPatch(inf) |
219 | self.assertEqual(result.ok, False) | |
220 | self.assertEqual(len(result.problems), 1) | |
221 | self.assertEqual(result.errors, 1) | |
222 | self.assertEqual(result.warnings, 0) | |
223 | self.assertEqual(result.checks, 0) | |
e752edcb | 224 | self.assertEqual(result.lines, 56) |
0d24de9d SG |
225 | os.remove(inf) |
226 | ||
d29fe6e2 | 227 | def testSpaces(self): |
0d24de9d | 228 | inf = self.SetupData('spaces') |
d29fe6e2 SG |
229 | result = checkpatch.CheckPatch(inf) |
230 | self.assertEqual(result.ok, False) | |
e752edcb | 231 | self.assertEqual(len(result.problems), 2) |
d29fe6e2 | 232 | self.assertEqual(result.errors, 0) |
e752edcb | 233 | self.assertEqual(result.warnings, 2) |
d29fe6e2 | 234 | self.assertEqual(result.checks, 0) |
e752edcb | 235 | self.assertEqual(result.lines, 56) |
d29fe6e2 SG |
236 | os.remove(inf) |
237 | ||
238 | def testIndent(self): | |
239 | inf = self.SetupData('indent') | |
240 | result = checkpatch.CheckPatch(inf) | |
241 | self.assertEqual(result.ok, False) | |
242 | self.assertEqual(len(result.problems), 1) | |
243 | self.assertEqual(result.errors, 0) | |
244 | self.assertEqual(result.warnings, 0) | |
245 | self.assertEqual(result.checks, 1) | |
e752edcb | 246 | self.assertEqual(result.lines, 56) |
0d24de9d SG |
247 | os.remove(inf) |
248 | ||
249 | ||
250 | if __name__ == "__main__": | |
251 | unittest.main() | |
252 | gitutil.RunTests() |