xref: /rk3399_rockchip-uboot/tools/patman/test.py (revision d29fe6e2d2cbcbfd1bfaaf886818d84edde0fc0d)
10d24de9dSSimon Glass#
20d24de9dSSimon Glass# Copyright (c) 2011 The Chromium OS Authors.
30d24de9dSSimon Glass#
40d24de9dSSimon Glass# See file CREDITS for list of people who contributed to this
50d24de9dSSimon Glass# project.
60d24de9dSSimon Glass#
70d24de9dSSimon Glass# This program is free software; you can redistribute it and/or
80d24de9dSSimon Glass# modify it under the terms of the GNU General Public License as
90d24de9dSSimon Glass# published by the Free Software Foundation; either version 2 of
100d24de9dSSimon Glass# the License, or (at your option) any later version.
110d24de9dSSimon Glass#
120d24de9dSSimon Glass# This program is distributed in the hope that it will be useful,
130d24de9dSSimon Glass# but WITHOUT ANY WARRANTY; without even the implied warranty of
140d24de9dSSimon Glass# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
150d24de9dSSimon Glass# GNU General Public License for more details.
160d24de9dSSimon Glass#
170d24de9dSSimon Glass# You should have received a copy of the GNU General Public License
180d24de9dSSimon Glass# along with this program; if not, write to the Free Software
190d24de9dSSimon Glass# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
200d24de9dSSimon Glass# MA 02111-1307 USA
210d24de9dSSimon Glass#
220d24de9dSSimon Glass
230d24de9dSSimon Glassimport os
240d24de9dSSimon Glassimport tempfile
250d24de9dSSimon Glassimport unittest
260d24de9dSSimon Glass
270d24de9dSSimon Glassimport checkpatch
280d24de9dSSimon Glassimport gitutil
290d24de9dSSimon Glassimport patchstream
300d24de9dSSimon Glassimport series
310d24de9dSSimon Glass
320d24de9dSSimon Glass
330d24de9dSSimon Glassclass TestPatch(unittest.TestCase):
340d24de9dSSimon Glass    """Test this program
350d24de9dSSimon Glass
360d24de9dSSimon Glass    TODO: Write tests for the rest of the functionality
370d24de9dSSimon Glass    """
380d24de9dSSimon Glass
390d24de9dSSimon Glass    def testBasic(self):
400d24de9dSSimon Glass        """Test basic filter operation"""
410d24de9dSSimon Glass        data='''
420d24de9dSSimon Glass
430d24de9dSSimon GlassFrom 656c9a8c31fa65859d924cd21da920d6ba537fad Mon Sep 17 00:00:00 2001
440d24de9dSSimon GlassFrom: Simon Glass <sjg@chromium.org>
450d24de9dSSimon GlassDate: Thu, 28 Apr 2011 09:58:51 -0700
460d24de9dSSimon GlassSubject: [PATCH (resend) 3/7] Tegra2: Add more clock support
470d24de9dSSimon Glass
480d24de9dSSimon GlassThis adds functions to enable/disable clocks and reset to on-chip peripherals.
490d24de9dSSimon Glass
500d24de9dSSimon GlassBUG=chromium-os:13875
510d24de9dSSimon GlassTEST=build U-Boot for Seaboard, boot
520d24de9dSSimon Glass
530d24de9dSSimon GlassChange-Id: I80fe1d0c0b7dd10aa58ce5bb1d9290b6664d5413
540d24de9dSSimon Glass
550d24de9dSSimon GlassReview URL: http://codereview.chromium.org/6900006
560d24de9dSSimon Glass
570d24de9dSSimon GlassSigned-off-by: Simon Glass <sjg@chromium.org>
580d24de9dSSimon Glass---
590d24de9dSSimon Glass arch/arm/cpu/armv7/tegra2/Makefile         |    2 +-
600d24de9dSSimon Glass arch/arm/cpu/armv7/tegra2/ap20.c           |   57 ++----
610d24de9dSSimon Glass arch/arm/cpu/armv7/tegra2/clock.c          |  163 +++++++++++++++++
620d24de9dSSimon Glass'''
630d24de9dSSimon Glass        expected='''
640d24de9dSSimon Glass
650d24de9dSSimon GlassFrom 656c9a8c31fa65859d924cd21da920d6ba537fad Mon Sep 17 00:00:00 2001
660d24de9dSSimon GlassFrom: Simon Glass <sjg@chromium.org>
670d24de9dSSimon GlassDate: Thu, 28 Apr 2011 09:58:51 -0700
680d24de9dSSimon GlassSubject: [PATCH (resend) 3/7] Tegra2: Add more clock support
690d24de9dSSimon Glass
700d24de9dSSimon GlassThis adds functions to enable/disable clocks and reset to on-chip peripherals.
710d24de9dSSimon Glass
720d24de9dSSimon GlassSigned-off-by: Simon Glass <sjg@chromium.org>
730d24de9dSSimon Glass---
740d24de9dSSimon Glass arch/arm/cpu/armv7/tegra2/Makefile         |    2 +-
750d24de9dSSimon Glass arch/arm/cpu/armv7/tegra2/ap20.c           |   57 ++----
760d24de9dSSimon Glass arch/arm/cpu/armv7/tegra2/clock.c          |  163 +++++++++++++++++
770d24de9dSSimon Glass'''
780d24de9dSSimon Glass        out = ''
790d24de9dSSimon Glass        inhandle, inname = tempfile.mkstemp()
800d24de9dSSimon Glass        infd = os.fdopen(inhandle, 'w')
810d24de9dSSimon Glass        infd.write(data)
820d24de9dSSimon Glass        infd.close()
830d24de9dSSimon Glass
840d24de9dSSimon Glass        exphandle, expname = tempfile.mkstemp()
850d24de9dSSimon Glass        expfd = os.fdopen(exphandle, 'w')
860d24de9dSSimon Glass        expfd.write(expected)
870d24de9dSSimon Glass        expfd.close()
880d24de9dSSimon Glass
890d24de9dSSimon Glass        patchstream.FixPatch(None, inname, series.Series(), None)
900d24de9dSSimon Glass        rc = os.system('diff -u %s %s' % (inname, expname))
910d24de9dSSimon Glass        self.assertEqual(rc, 0)
920d24de9dSSimon Glass
930d24de9dSSimon Glass        os.remove(inname)
940d24de9dSSimon Glass        os.remove(expname)
950d24de9dSSimon Glass
960d24de9dSSimon Glass    def GetData(self, data_type):
970d24de9dSSimon Glass        data='''
980d24de9dSSimon GlassFrom 4924887af52713cabea78420eff03badea8f0035 Mon Sep 17 00:00:00 2001
990d24de9dSSimon GlassFrom: Simon Glass <sjg@chromium.org>
1000d24de9dSSimon GlassDate: Thu, 7 Apr 2011 10:14:41 -0700
1010d24de9dSSimon GlassSubject: [PATCH 1/4] Add microsecond boot time measurement
1020d24de9dSSimon Glass
1030d24de9dSSimon GlassThis defines the basics of a new boot time measurement feature. This allows
1040d24de9dSSimon Glasslogging of very accurate time measurements as the boot proceeds, by using
1050d24de9dSSimon Glassan available microsecond counter.
1060d24de9dSSimon Glass
1070d24de9dSSimon Glass%s
1080d24de9dSSimon Glass---
1090d24de9dSSimon Glass README              |   11 ++++++++
1100d24de9dSSimon Glass common/bootstage.c  |   50 ++++++++++++++++++++++++++++++++++++
1110d24de9dSSimon Glass include/bootstage.h |   71 +++++++++++++++++++++++++++++++++++++++++++++++++++
1120d24de9dSSimon Glass include/common.h    |    8 ++++++
1130d24de9dSSimon Glass 5 files changed, 141 insertions(+), 0 deletions(-)
1140d24de9dSSimon Glass create mode 100644 common/bootstage.c
1150d24de9dSSimon Glass create mode 100644 include/bootstage.h
1160d24de9dSSimon Glass
1170d24de9dSSimon Glassdiff --git a/README b/README
1180d24de9dSSimon Glassindex 6f3748d..f9e4e65 100644
1190d24de9dSSimon Glass--- a/README
1200d24de9dSSimon Glass+++ b/README
1210d24de9dSSimon Glass@@ -2026,6 +2026,17 @@ The following options need to be configured:
1220d24de9dSSimon Glass 		example, some LED's) on your board. At the moment,
1230d24de9dSSimon Glass 		the following checkpoints are implemented:
1240d24de9dSSimon Glass
1250d24de9dSSimon Glass+- Time boot progress
1260d24de9dSSimon Glass+		CONFIG_BOOTSTAGE
1270d24de9dSSimon Glass+
1280d24de9dSSimon Glass+		Define this option to enable microsecond boot stage timing
1290d24de9dSSimon Glass+		on supported platforms. For this to work your platform
1300d24de9dSSimon Glass+		needs to define a function timer_get_us() which returns the
1310d24de9dSSimon Glass+		number of microseconds since reset. This would normally
1320d24de9dSSimon Glass+		be done in your SOC or board timer.c file.
1330d24de9dSSimon Glass+
1340d24de9dSSimon Glass+		You can add calls to bootstage_mark() to set time markers.
1350d24de9dSSimon Glass+
1360d24de9dSSimon Glass - Standalone program support:
1370d24de9dSSimon Glass 		CONFIG_STANDALONE_LOAD_ADDR
1380d24de9dSSimon Glass
1390d24de9dSSimon Glassdiff --git a/common/bootstage.c b/common/bootstage.c
1400d24de9dSSimon Glassnew file mode 100644
1410d24de9dSSimon Glassindex 0000000..2234c87
1420d24de9dSSimon Glass--- /dev/null
1430d24de9dSSimon Glass+++ b/common/bootstage.c
1440d24de9dSSimon Glass@@ -0,0 +1,50 @@
1450d24de9dSSimon Glass+/*
1460d24de9dSSimon Glass+ * Copyright (c) 2011, Google Inc. All rights reserved.
1470d24de9dSSimon Glass+ *
1480d24de9dSSimon Glass+ * See file CREDITS for list of people who contributed to this
1490d24de9dSSimon Glass+ * project.
1500d24de9dSSimon Glass+ *
1510d24de9dSSimon Glass+ * This program is free software; you can redistribute it and/or
1520d24de9dSSimon Glass+ * modify it under the terms of the GNU General Public License as
1530d24de9dSSimon Glass+ * published by the Free Software Foundation; either version 2 of
1540d24de9dSSimon Glass+ * the License, or (at your option) any later version.
1550d24de9dSSimon Glass+ *
1560d24de9dSSimon Glass+ * This program is distributed in the hope that it will be useful,
1570d24de9dSSimon Glass+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
1580d24de9dSSimon Glass+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1590d24de9dSSimon Glass+ * GNU General Public License for more details.
1600d24de9dSSimon Glass+ *
1610d24de9dSSimon Glass+ * You should have received a copy of the GNU General Public License
1620d24de9dSSimon Glass+ * along with this program; if not, write to the Free Software
1630d24de9dSSimon Glass+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
1640d24de9dSSimon Glass+ * MA 02111-1307 USA
1650d24de9dSSimon Glass+ */
1660d24de9dSSimon Glass+
1670d24de9dSSimon Glass+
1680d24de9dSSimon Glass+/*
1690d24de9dSSimon Glass+ * This module records the progress of boot and arbitrary commands, and
1700d24de9dSSimon Glass+ * permits accurate timestamping of each. The records can optionally be
1710d24de9dSSimon Glass+ * passed to kernel in the ATAGs
1720d24de9dSSimon Glass+ */
1730d24de9dSSimon Glass+
1740d24de9dSSimon Glass+#include <common.h>
1750d24de9dSSimon Glass+
1760d24de9dSSimon Glass+
1770d24de9dSSimon Glass+struct bootstage_record {
1780d24de9dSSimon Glass+	uint32_t time_us;
1790d24de9dSSimon Glass+	const char *name;
1800d24de9dSSimon Glass+};
1810d24de9dSSimon Glass+
1820d24de9dSSimon Glass+static struct bootstage_record record[BOOTSTAGE_COUNT];
1830d24de9dSSimon Glass+
1840d24de9dSSimon Glass+uint32_t bootstage_mark(enum bootstage_id id, const char *name)
1850d24de9dSSimon Glass+{
1860d24de9dSSimon Glass+	struct bootstage_record *rec = &record[id];
1870d24de9dSSimon Glass+
1880d24de9dSSimon Glass+	/* Only record the first event for each */
1890d24de9dSSimon Glass+%sif (!rec->name) {
1900d24de9dSSimon Glass+		rec->time_us = (uint32_t)timer_get_us();
1910d24de9dSSimon Glass+		rec->name = name;
1920d24de9dSSimon Glass+	}
193*d29fe6e2SSimon Glass+	if (!rec->name &&
194*d29fe6e2SSimon Glass+	%ssomething_else) {
195*d29fe6e2SSimon Glass+		rec->time_us = (uint32_t)timer_get_us();
196*d29fe6e2SSimon Glass+		rec->name = name;
197*d29fe6e2SSimon Glass+	}
1980d24de9dSSimon Glass+%sreturn rec->time_us;
1990d24de9dSSimon Glass+}
2000d24de9dSSimon Glass--
2010d24de9dSSimon Glass1.7.3.1
2020d24de9dSSimon Glass'''
2030d24de9dSSimon Glass        signoff = 'Signed-off-by: Simon Glass <sjg@chromium.org>\n'
2040d24de9dSSimon Glass        tab = '	'
205*d29fe6e2SSimon Glass        indent = '    '
2060d24de9dSSimon Glass        if data_type == 'good':
2070d24de9dSSimon Glass            pass
2080d24de9dSSimon Glass        elif data_type == 'no-signoff':
2090d24de9dSSimon Glass            signoff = ''
2100d24de9dSSimon Glass        elif data_type == 'spaces':
2110d24de9dSSimon Glass            tab = '   '
212*d29fe6e2SSimon Glass        elif data_type == 'indent':
213*d29fe6e2SSimon Glass            indent = tab
2140d24de9dSSimon Glass        else:
2150d24de9dSSimon Glass            print 'not implemented'
216*d29fe6e2SSimon Glass        return data % (signoff, tab, indent, tab)
2170d24de9dSSimon Glass
2180d24de9dSSimon Glass    def SetupData(self, data_type):
2190d24de9dSSimon Glass        inhandle, inname = tempfile.mkstemp()
2200d24de9dSSimon Glass        infd = os.fdopen(inhandle, 'w')
2210d24de9dSSimon Glass        data = self.GetData(data_type)
2220d24de9dSSimon Glass        infd.write(data)
2230d24de9dSSimon Glass        infd.close()
2240d24de9dSSimon Glass        return inname
2250d24de9dSSimon Glass
226*d29fe6e2SSimon Glass    def testGood(self):
2270d24de9dSSimon Glass        """Test checkpatch operation"""
2280d24de9dSSimon Glass        inf = self.SetupData('good')
229*d29fe6e2SSimon Glass        result = checkpatch.CheckPatch(inf)
230*d29fe6e2SSimon Glass        self.assertEqual(result.ok, True)
231*d29fe6e2SSimon Glass        self.assertEqual(result.problems, [])
232*d29fe6e2SSimon Glass        self.assertEqual(result.errors, 0)
233*d29fe6e2SSimon Glass        self.assertEqual(result.warnings, 0)
234*d29fe6e2SSimon Glass        self.assertEqual(result.checks, 0)
235*d29fe6e2SSimon Glass        self.assertEqual(result.lines, 67)
2360d24de9dSSimon Glass        os.remove(inf)
2370d24de9dSSimon Glass
238*d29fe6e2SSimon Glass    def testNoSignoff(self):
2390d24de9dSSimon Glass        inf = self.SetupData('no-signoff')
240*d29fe6e2SSimon Glass        result = checkpatch.CheckPatch(inf)
241*d29fe6e2SSimon Glass        self.assertEqual(result.ok, False)
242*d29fe6e2SSimon Glass        self.assertEqual(len(result.problems), 1)
243*d29fe6e2SSimon Glass        self.assertEqual(result.errors, 1)
244*d29fe6e2SSimon Glass        self.assertEqual(result.warnings, 0)
245*d29fe6e2SSimon Glass        self.assertEqual(result.checks, 0)
246*d29fe6e2SSimon Glass        self.assertEqual(result.lines, 67)
2470d24de9dSSimon Glass        os.remove(inf)
2480d24de9dSSimon Glass
249*d29fe6e2SSimon Glass    def testSpaces(self):
2500d24de9dSSimon Glass        inf = self.SetupData('spaces')
251*d29fe6e2SSimon Glass        result = checkpatch.CheckPatch(inf)
252*d29fe6e2SSimon Glass        self.assertEqual(result.ok, False)
253*d29fe6e2SSimon Glass        self.assertEqual(len(result.problems), 1)
254*d29fe6e2SSimon Glass        self.assertEqual(result.errors, 0)
255*d29fe6e2SSimon Glass        self.assertEqual(result.warnings, 1)
256*d29fe6e2SSimon Glass        self.assertEqual(result.checks, 0)
257*d29fe6e2SSimon Glass        self.assertEqual(result.lines, 67)
258*d29fe6e2SSimon Glass        os.remove(inf)
259*d29fe6e2SSimon Glass
260*d29fe6e2SSimon Glass    def testIndent(self):
261*d29fe6e2SSimon Glass        inf = self.SetupData('indent')
262*d29fe6e2SSimon Glass        result = checkpatch.CheckPatch(inf)
263*d29fe6e2SSimon Glass        self.assertEqual(result.ok, False)
264*d29fe6e2SSimon Glass        self.assertEqual(len(result.problems), 1)
265*d29fe6e2SSimon Glass        self.assertEqual(result.errors, 0)
266*d29fe6e2SSimon Glass        self.assertEqual(result.warnings, 0)
267*d29fe6e2SSimon Glass        self.assertEqual(result.checks, 1)
268*d29fe6e2SSimon Glass        self.assertEqual(result.lines, 67)
2690d24de9dSSimon Glass        os.remove(inf)
2700d24de9dSSimon Glass
2710d24de9dSSimon Glass
2720d24de9dSSimon Glassif __name__ == "__main__":
2730d24de9dSSimon Glass    unittest.main()
2740d24de9dSSimon Glass    gitutil.RunTests()
275