xref: /rk3399_rockchip-uboot/tools/patman/test.py (revision 0d24de9d558209fa525f350d1320c343f241c3f5)
1*0d24de9dSSimon Glass#
2*0d24de9dSSimon Glass# Copyright (c) 2011 The Chromium OS Authors.
3*0d24de9dSSimon Glass#
4*0d24de9dSSimon Glass# See file CREDITS for list of people who contributed to this
5*0d24de9dSSimon Glass# project.
6*0d24de9dSSimon Glass#
7*0d24de9dSSimon Glass# This program is free software; you can redistribute it and/or
8*0d24de9dSSimon Glass# modify it under the terms of the GNU General Public License as
9*0d24de9dSSimon Glass# published by the Free Software Foundation; either version 2 of
10*0d24de9dSSimon Glass# the License, or (at your option) any later version.
11*0d24de9dSSimon Glass#
12*0d24de9dSSimon Glass# This program is distributed in the hope that it will be useful,
13*0d24de9dSSimon Glass# but WITHOUT ANY WARRANTY; without even the implied warranty of
14*0d24de9dSSimon Glass# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15*0d24de9dSSimon Glass# GNU General Public License for more details.
16*0d24de9dSSimon Glass#
17*0d24de9dSSimon Glass# You should have received a copy of the GNU General Public License
18*0d24de9dSSimon Glass# along with this program; if not, write to the Free Software
19*0d24de9dSSimon Glass# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
20*0d24de9dSSimon Glass# MA 02111-1307 USA
21*0d24de9dSSimon Glass#
22*0d24de9dSSimon Glass
23*0d24de9dSSimon Glassimport os
24*0d24de9dSSimon Glassimport tempfile
25*0d24de9dSSimon Glassimport unittest
26*0d24de9dSSimon Glass
27*0d24de9dSSimon Glassimport checkpatch
28*0d24de9dSSimon Glassimport gitutil
29*0d24de9dSSimon Glassimport patchstream
30*0d24de9dSSimon Glassimport series
31*0d24de9dSSimon Glass
32*0d24de9dSSimon Glass
33*0d24de9dSSimon Glassclass TestPatch(unittest.TestCase):
34*0d24de9dSSimon Glass    """Test this program
35*0d24de9dSSimon Glass
36*0d24de9dSSimon Glass    TODO: Write tests for the rest of the functionality
37*0d24de9dSSimon Glass    """
38*0d24de9dSSimon Glass
39*0d24de9dSSimon Glass    def testBasic(self):
40*0d24de9dSSimon Glass        """Test basic filter operation"""
41*0d24de9dSSimon Glass        data='''
42*0d24de9dSSimon Glass
43*0d24de9dSSimon GlassFrom 656c9a8c31fa65859d924cd21da920d6ba537fad Mon Sep 17 00:00:00 2001
44*0d24de9dSSimon GlassFrom: Simon Glass <sjg@chromium.org>
45*0d24de9dSSimon GlassDate: Thu, 28 Apr 2011 09:58:51 -0700
46*0d24de9dSSimon GlassSubject: [PATCH (resend) 3/7] Tegra2: Add more clock support
47*0d24de9dSSimon Glass
48*0d24de9dSSimon GlassThis adds functions to enable/disable clocks and reset to on-chip peripherals.
49*0d24de9dSSimon Glass
50*0d24de9dSSimon GlassBUG=chromium-os:13875
51*0d24de9dSSimon GlassTEST=build U-Boot for Seaboard, boot
52*0d24de9dSSimon Glass
53*0d24de9dSSimon GlassChange-Id: I80fe1d0c0b7dd10aa58ce5bb1d9290b6664d5413
54*0d24de9dSSimon Glass
55*0d24de9dSSimon GlassReview URL: http://codereview.chromium.org/6900006
56*0d24de9dSSimon Glass
57*0d24de9dSSimon GlassSigned-off-by: Simon Glass <sjg@chromium.org>
58*0d24de9dSSimon Glass---
59*0d24de9dSSimon Glass arch/arm/cpu/armv7/tegra2/Makefile         |    2 +-
60*0d24de9dSSimon Glass arch/arm/cpu/armv7/tegra2/ap20.c           |   57 ++----
61*0d24de9dSSimon Glass arch/arm/cpu/armv7/tegra2/clock.c          |  163 +++++++++++++++++
62*0d24de9dSSimon Glass'''
63*0d24de9dSSimon Glass        expected='''
64*0d24de9dSSimon Glass
65*0d24de9dSSimon GlassFrom 656c9a8c31fa65859d924cd21da920d6ba537fad Mon Sep 17 00:00:00 2001
66*0d24de9dSSimon GlassFrom: Simon Glass <sjg@chromium.org>
67*0d24de9dSSimon GlassDate: Thu, 28 Apr 2011 09:58:51 -0700
68*0d24de9dSSimon GlassSubject: [PATCH (resend) 3/7] Tegra2: Add more clock support
69*0d24de9dSSimon Glass
70*0d24de9dSSimon GlassThis adds functions to enable/disable clocks and reset to on-chip peripherals.
71*0d24de9dSSimon Glass
72*0d24de9dSSimon GlassSigned-off-by: Simon Glass <sjg@chromium.org>
73*0d24de9dSSimon Glass---
74*0d24de9dSSimon Glass arch/arm/cpu/armv7/tegra2/Makefile         |    2 +-
75*0d24de9dSSimon Glass arch/arm/cpu/armv7/tegra2/ap20.c           |   57 ++----
76*0d24de9dSSimon Glass arch/arm/cpu/armv7/tegra2/clock.c          |  163 +++++++++++++++++
77*0d24de9dSSimon Glass'''
78*0d24de9dSSimon Glass        out = ''
79*0d24de9dSSimon Glass        inhandle, inname = tempfile.mkstemp()
80*0d24de9dSSimon Glass        infd = os.fdopen(inhandle, 'w')
81*0d24de9dSSimon Glass        infd.write(data)
82*0d24de9dSSimon Glass        infd.close()
83*0d24de9dSSimon Glass
84*0d24de9dSSimon Glass        exphandle, expname = tempfile.mkstemp()
85*0d24de9dSSimon Glass        expfd = os.fdopen(exphandle, 'w')
86*0d24de9dSSimon Glass        expfd.write(expected)
87*0d24de9dSSimon Glass        expfd.close()
88*0d24de9dSSimon Glass
89*0d24de9dSSimon Glass        patchstream.FixPatch(None, inname, series.Series(), None)
90*0d24de9dSSimon Glass        rc = os.system('diff -u %s %s' % (inname, expname))
91*0d24de9dSSimon Glass        self.assertEqual(rc, 0)
92*0d24de9dSSimon Glass
93*0d24de9dSSimon Glass        os.remove(inname)
94*0d24de9dSSimon Glass        os.remove(expname)
95*0d24de9dSSimon Glass
96*0d24de9dSSimon Glass    def GetData(self, data_type):
97*0d24de9dSSimon Glass        data='''
98*0d24de9dSSimon GlassFrom 4924887af52713cabea78420eff03badea8f0035 Mon Sep 17 00:00:00 2001
99*0d24de9dSSimon GlassFrom: Simon Glass <sjg@chromium.org>
100*0d24de9dSSimon GlassDate: Thu, 7 Apr 2011 10:14:41 -0700
101*0d24de9dSSimon GlassSubject: [PATCH 1/4] Add microsecond boot time measurement
102*0d24de9dSSimon Glass
103*0d24de9dSSimon GlassThis defines the basics of a new boot time measurement feature. This allows
104*0d24de9dSSimon Glasslogging of very accurate time measurements as the boot proceeds, by using
105*0d24de9dSSimon Glassan available microsecond counter.
106*0d24de9dSSimon Glass
107*0d24de9dSSimon Glass%s
108*0d24de9dSSimon Glass---
109*0d24de9dSSimon Glass README              |   11 ++++++++
110*0d24de9dSSimon Glass common/bootstage.c  |   50 ++++++++++++++++++++++++++++++++++++
111*0d24de9dSSimon Glass include/bootstage.h |   71 +++++++++++++++++++++++++++++++++++++++++++++++++++
112*0d24de9dSSimon Glass include/common.h    |    8 ++++++
113*0d24de9dSSimon Glass 5 files changed, 141 insertions(+), 0 deletions(-)
114*0d24de9dSSimon Glass create mode 100644 common/bootstage.c
115*0d24de9dSSimon Glass create mode 100644 include/bootstage.h
116*0d24de9dSSimon Glass
117*0d24de9dSSimon Glassdiff --git a/README b/README
118*0d24de9dSSimon Glassindex 6f3748d..f9e4e65 100644
119*0d24de9dSSimon Glass--- a/README
120*0d24de9dSSimon Glass+++ b/README
121*0d24de9dSSimon Glass@@ -2026,6 +2026,17 @@ The following options need to be configured:
122*0d24de9dSSimon Glass		example, some LED's) on your board. At the moment,
123*0d24de9dSSimon Glass		the following checkpoints are implemented:
124*0d24de9dSSimon Glass
125*0d24de9dSSimon Glass+- Time boot progress
126*0d24de9dSSimon Glass+		CONFIG_BOOTSTAGE
127*0d24de9dSSimon Glass+
128*0d24de9dSSimon Glass+		Define this option to enable microsecond boot stage timing
129*0d24de9dSSimon Glass+		on supported platforms. For this to work your platform
130*0d24de9dSSimon Glass+		needs to define a function timer_get_us() which returns the
131*0d24de9dSSimon Glass+		number of microseconds since reset. This would normally
132*0d24de9dSSimon Glass+		be done in your SOC or board timer.c file.
133*0d24de9dSSimon Glass+
134*0d24de9dSSimon Glass+		You can add calls to bootstage_mark() to set time markers.
135*0d24de9dSSimon Glass+
136*0d24de9dSSimon Glass - Standalone program support:
137*0d24de9dSSimon Glass		CONFIG_STANDALONE_LOAD_ADDR
138*0d24de9dSSimon Glass
139*0d24de9dSSimon Glassdiff --git a/common/bootstage.c b/common/bootstage.c
140*0d24de9dSSimon Glassnew file mode 100644
141*0d24de9dSSimon Glassindex 0000000..2234c87
142*0d24de9dSSimon Glass--- /dev/null
143*0d24de9dSSimon Glass+++ b/common/bootstage.c
144*0d24de9dSSimon Glass@@ -0,0 +1,50 @@
145*0d24de9dSSimon Glass+/*
146*0d24de9dSSimon Glass+ * Copyright (c) 2011, Google Inc. All rights reserved.
147*0d24de9dSSimon Glass+ *
148*0d24de9dSSimon Glass+ * See file CREDITS for list of people who contributed to this
149*0d24de9dSSimon Glass+ * project.
150*0d24de9dSSimon Glass+ *
151*0d24de9dSSimon Glass+ * This program is free software; you can redistribute it and/or
152*0d24de9dSSimon Glass+ * modify it under the terms of the GNU General Public License as
153*0d24de9dSSimon Glass+ * published by the Free Software Foundation; either version 2 of
154*0d24de9dSSimon Glass+ * the License, or (at your option) any later version.
155*0d24de9dSSimon Glass+ *
156*0d24de9dSSimon Glass+ * This program is distributed in the hope that it will be useful,
157*0d24de9dSSimon Glass+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
158*0d24de9dSSimon Glass+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
159*0d24de9dSSimon Glass+ * GNU General Public License for more details.
160*0d24de9dSSimon Glass+ *
161*0d24de9dSSimon Glass+ * You should have received a copy of the GNU General Public License
162*0d24de9dSSimon Glass+ * along with this program; if not, write to the Free Software
163*0d24de9dSSimon Glass+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
164*0d24de9dSSimon Glass+ * MA 02111-1307 USA
165*0d24de9dSSimon Glass+ */
166*0d24de9dSSimon Glass+
167*0d24de9dSSimon Glass+
168*0d24de9dSSimon Glass+/*
169*0d24de9dSSimon Glass+ * This module records the progress of boot and arbitrary commands, and
170*0d24de9dSSimon Glass+ * permits accurate timestamping of each. The records can optionally be
171*0d24de9dSSimon Glass+ * passed to kernel in the ATAGs
172*0d24de9dSSimon Glass+ */
173*0d24de9dSSimon Glass+
174*0d24de9dSSimon Glass+#include <common.h>
175*0d24de9dSSimon Glass+
176*0d24de9dSSimon Glass+
177*0d24de9dSSimon Glass+struct bootstage_record {
178*0d24de9dSSimon Glass+	uint32_t time_us;
179*0d24de9dSSimon Glass+	const char *name;
180*0d24de9dSSimon Glass+};
181*0d24de9dSSimon Glass+
182*0d24de9dSSimon Glass+static struct bootstage_record record[BOOTSTAGE_COUNT];
183*0d24de9dSSimon Glass+
184*0d24de9dSSimon Glass+uint32_t bootstage_mark(enum bootstage_id id, const char *name)
185*0d24de9dSSimon Glass+{
186*0d24de9dSSimon Glass+	struct bootstage_record *rec = &record[id];
187*0d24de9dSSimon Glass+
188*0d24de9dSSimon Glass+	/* Only record the first event for each */
189*0d24de9dSSimon Glass+%sif (!rec->name) {
190*0d24de9dSSimon Glass+		rec->time_us = (uint32_t)timer_get_us();
191*0d24de9dSSimon Glass+		rec->name = name;
192*0d24de9dSSimon Glass+	}
193*0d24de9dSSimon Glass+%sreturn rec->time_us;
194*0d24de9dSSimon Glass+}
195*0d24de9dSSimon Glass--
196*0d24de9dSSimon Glass1.7.3.1
197*0d24de9dSSimon Glass'''
198*0d24de9dSSimon Glass        signoff = 'Signed-off-by: Simon Glass <sjg@chromium.org>\n'
199*0d24de9dSSimon Glass        tab = '	'
200*0d24de9dSSimon Glass        if data_type == 'good':
201*0d24de9dSSimon Glass            pass
202*0d24de9dSSimon Glass        elif data_type == 'no-signoff':
203*0d24de9dSSimon Glass            signoff = ''
204*0d24de9dSSimon Glass        elif data_type == 'spaces':
205*0d24de9dSSimon Glass            tab = '   '
206*0d24de9dSSimon Glass        else:
207*0d24de9dSSimon Glass            print 'not implemented'
208*0d24de9dSSimon Glass        return data % (signoff, tab, tab)
209*0d24de9dSSimon Glass
210*0d24de9dSSimon Glass    def SetupData(self, data_type):
211*0d24de9dSSimon Glass        inhandle, inname = tempfile.mkstemp()
212*0d24de9dSSimon Glass        infd = os.fdopen(inhandle, 'w')
213*0d24de9dSSimon Glass        data = self.GetData(data_type)
214*0d24de9dSSimon Glass        infd.write(data)
215*0d24de9dSSimon Glass        infd.close()
216*0d24de9dSSimon Glass        return inname
217*0d24de9dSSimon Glass
218*0d24de9dSSimon Glass    def testCheckpatch(self):
219*0d24de9dSSimon Glass        """Test checkpatch operation"""
220*0d24de9dSSimon Glass        inf = self.SetupData('good')
221*0d24de9dSSimon Glass        result, problems, err, warn, lines, stdout = checkpatch.CheckPatch(inf)
222*0d24de9dSSimon Glass        self.assertEqual(result, True)
223*0d24de9dSSimon Glass        self.assertEqual(problems, [])
224*0d24de9dSSimon Glass        self.assertEqual(err, 0)
225*0d24de9dSSimon Glass        self.assertEqual(warn, 0)
226*0d24de9dSSimon Glass        self.assertEqual(lines, 67)
227*0d24de9dSSimon Glass        os.remove(inf)
228*0d24de9dSSimon Glass
229*0d24de9dSSimon Glass        inf = self.SetupData('no-signoff')
230*0d24de9dSSimon Glass        result, problems, err, warn, lines, stdout = checkpatch.CheckPatch(inf)
231*0d24de9dSSimon Glass        self.assertEqual(result, False)
232*0d24de9dSSimon Glass        self.assertEqual(len(problems), 1)
233*0d24de9dSSimon Glass        self.assertEqual(err, 1)
234*0d24de9dSSimon Glass        self.assertEqual(warn, 0)
235*0d24de9dSSimon Glass        self.assertEqual(lines, 67)
236*0d24de9dSSimon Glass        os.remove(inf)
237*0d24de9dSSimon Glass
238*0d24de9dSSimon Glass        inf = self.SetupData('spaces')
239*0d24de9dSSimon Glass        result, problems, err, warn, lines, stdout = checkpatch.CheckPatch(inf)
240*0d24de9dSSimon Glass        self.assertEqual(result, False)
241*0d24de9dSSimon Glass        self.assertEqual(len(problems), 2)
242*0d24de9dSSimon Glass        self.assertEqual(err, 0)
243*0d24de9dSSimon Glass        self.assertEqual(warn, 2)
244*0d24de9dSSimon Glass        self.assertEqual(lines, 67)
245*0d24de9dSSimon Glass        os.remove(inf)
246*0d24de9dSSimon Glass
247*0d24de9dSSimon Glass
248*0d24de9dSSimon Glassif __name__ == "__main__":
249*0d24de9dSSimon Glass    unittest.main()
250*0d24de9dSSimon Glass    gitutil.RunTests()
251