xref: /rk3399_rockchip-uboot/tools/patman/test.py (revision e752edcb6b22b2c42c8064d66a93f0910cac6fef)
10d24de9dSSimon Glass#
20d24de9dSSimon Glass# Copyright (c) 2011 The Chromium OS Authors.
30d24de9dSSimon Glass#
41a459660SWolfgang Denk# SPDX-License-Identifier:	GPL-2.0+
50d24de9dSSimon Glass#
60d24de9dSSimon Glass
70d24de9dSSimon Glassimport os
80d24de9dSSimon Glassimport tempfile
90d24de9dSSimon Glassimport unittest
100d24de9dSSimon Glass
110d24de9dSSimon Glassimport checkpatch
120d24de9dSSimon Glassimport gitutil
130d24de9dSSimon Glassimport patchstream
140d24de9dSSimon Glassimport series
150d24de9dSSimon Glass
160d24de9dSSimon Glass
170d24de9dSSimon Glassclass TestPatch(unittest.TestCase):
180d24de9dSSimon Glass    """Test this program
190d24de9dSSimon Glass
200d24de9dSSimon Glass    TODO: Write tests for the rest of the functionality
210d24de9dSSimon Glass    """
220d24de9dSSimon Glass
230d24de9dSSimon Glass    def testBasic(self):
240d24de9dSSimon Glass        """Test basic filter operation"""
250d24de9dSSimon Glass        data='''
260d24de9dSSimon Glass
270d24de9dSSimon GlassFrom 656c9a8c31fa65859d924cd21da920d6ba537fad Mon Sep 17 00:00:00 2001
280d24de9dSSimon GlassFrom: Simon Glass <sjg@chromium.org>
290d24de9dSSimon GlassDate: Thu, 28 Apr 2011 09:58:51 -0700
300d24de9dSSimon GlassSubject: [PATCH (resend) 3/7] Tegra2: Add more clock support
310d24de9dSSimon Glass
320d24de9dSSimon GlassThis adds functions to enable/disable clocks and reset to on-chip peripherals.
330d24de9dSSimon Glass
340d24de9dSSimon GlassBUG=chromium-os:13875
350d24de9dSSimon GlassTEST=build U-Boot for Seaboard, boot
360d24de9dSSimon Glass
370d24de9dSSimon GlassChange-Id: I80fe1d0c0b7dd10aa58ce5bb1d9290b6664d5413
380d24de9dSSimon Glass
390d24de9dSSimon GlassReview URL: http://codereview.chromium.org/6900006
400d24de9dSSimon Glass
410d24de9dSSimon GlassSigned-off-by: Simon Glass <sjg@chromium.org>
420d24de9dSSimon Glass---
430d24de9dSSimon Glass arch/arm/cpu/armv7/tegra2/Makefile         |    2 +-
440d24de9dSSimon Glass arch/arm/cpu/armv7/tegra2/ap20.c           |   57 ++----
450d24de9dSSimon Glass arch/arm/cpu/armv7/tegra2/clock.c          |  163 +++++++++++++++++
460d24de9dSSimon Glass'''
470d24de9dSSimon Glass        expected='''
480d24de9dSSimon Glass
490d24de9dSSimon GlassFrom 656c9a8c31fa65859d924cd21da920d6ba537fad Mon Sep 17 00:00:00 2001
500d24de9dSSimon GlassFrom: Simon Glass <sjg@chromium.org>
510d24de9dSSimon GlassDate: Thu, 28 Apr 2011 09:58:51 -0700
520d24de9dSSimon GlassSubject: [PATCH (resend) 3/7] Tegra2: Add more clock support
530d24de9dSSimon Glass
540d24de9dSSimon GlassThis adds functions to enable/disable clocks and reset to on-chip peripherals.
550d24de9dSSimon Glass
560d24de9dSSimon GlassSigned-off-by: Simon Glass <sjg@chromium.org>
570d24de9dSSimon Glass---
58*e752edcbSSimon 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        out = ''
640d24de9dSSimon Glass        inhandle, inname = tempfile.mkstemp()
650d24de9dSSimon Glass        infd = os.fdopen(inhandle, 'w')
660d24de9dSSimon Glass        infd.write(data)
670d24de9dSSimon Glass        infd.close()
680d24de9dSSimon Glass
690d24de9dSSimon Glass        exphandle, expname = tempfile.mkstemp()
700d24de9dSSimon Glass        expfd = os.fdopen(exphandle, 'w')
710d24de9dSSimon Glass        expfd.write(expected)
720d24de9dSSimon Glass        expfd.close()
730d24de9dSSimon Glass
740d24de9dSSimon Glass        patchstream.FixPatch(None, inname, series.Series(), None)
750d24de9dSSimon Glass        rc = os.system('diff -u %s %s' % (inname, expname))
760d24de9dSSimon Glass        self.assertEqual(rc, 0)
770d24de9dSSimon Glass
780d24de9dSSimon Glass        os.remove(inname)
790d24de9dSSimon Glass        os.remove(expname)
800d24de9dSSimon Glass
810d24de9dSSimon Glass    def GetData(self, data_type):
820d24de9dSSimon Glass        data='''
830d24de9dSSimon GlassFrom 4924887af52713cabea78420eff03badea8f0035 Mon Sep 17 00:00:00 2001
840d24de9dSSimon GlassFrom: Simon Glass <sjg@chromium.org>
850d24de9dSSimon GlassDate: Thu, 7 Apr 2011 10:14:41 -0700
860d24de9dSSimon GlassSubject: [PATCH 1/4] Add microsecond boot time measurement
870d24de9dSSimon Glass
880d24de9dSSimon GlassThis defines the basics of a new boot time measurement feature. This allows
890d24de9dSSimon Glasslogging of very accurate time measurements as the boot proceeds, by using
900d24de9dSSimon Glassan available microsecond counter.
910d24de9dSSimon Glass
920d24de9dSSimon Glass%s
930d24de9dSSimon Glass---
940d24de9dSSimon Glass README              |   11 ++++++++
950d24de9dSSimon Glass common/bootstage.c  |   50 ++++++++++++++++++++++++++++++++++++
960d24de9dSSimon Glass include/bootstage.h |   71 +++++++++++++++++++++++++++++++++++++++++++++++++++
970d24de9dSSimon Glass include/common.h    |    8 ++++++
980d24de9dSSimon Glass 5 files changed, 141 insertions(+), 0 deletions(-)
990d24de9dSSimon Glass create mode 100644 common/bootstage.c
1000d24de9dSSimon Glass create mode 100644 include/bootstage.h
1010d24de9dSSimon Glass
1020d24de9dSSimon Glassdiff --git a/README b/README
1030d24de9dSSimon Glassindex 6f3748d..f9e4e65 100644
1040d24de9dSSimon Glass--- a/README
1050d24de9dSSimon Glass+++ b/README
1060d24de9dSSimon Glass@@ -2026,6 +2026,17 @@ The following options need to be configured:
1070d24de9dSSimon Glass 		example, some LED's) on your board. At the moment,
1080d24de9dSSimon Glass 		the following checkpoints are implemented:
1090d24de9dSSimon Glass
1100d24de9dSSimon Glass+- Time boot progress
1110d24de9dSSimon Glass+		CONFIG_BOOTSTAGE
1120d24de9dSSimon Glass+
1130d24de9dSSimon Glass+		Define this option to enable microsecond boot stage timing
1140d24de9dSSimon Glass+		on supported platforms. For this to work your platform
1150d24de9dSSimon Glass+		needs to define a function timer_get_us() which returns the
1160d24de9dSSimon Glass+		number of microseconds since reset. This would normally
1170d24de9dSSimon Glass+		be done in your SOC or board timer.c file.
1180d24de9dSSimon Glass+
1190d24de9dSSimon Glass+		You can add calls to bootstage_mark() to set time markers.
1200d24de9dSSimon Glass+
1210d24de9dSSimon Glass - Standalone program support:
1220d24de9dSSimon Glass 		CONFIG_STANDALONE_LOAD_ADDR
1230d24de9dSSimon Glass
1240d24de9dSSimon Glassdiff --git a/common/bootstage.c b/common/bootstage.c
1250d24de9dSSimon Glassnew file mode 100644
1260d24de9dSSimon Glassindex 0000000..2234c87
1270d24de9dSSimon Glass--- /dev/null
1280d24de9dSSimon Glass+++ b/common/bootstage.c
1291a459660SWolfgang Denk@@ -0,0 +1,39 @@
1300d24de9dSSimon Glass+/*
1310d24de9dSSimon Glass+ * Copyright (c) 2011, Google Inc. All rights reserved.
1320d24de9dSSimon Glass+ *
1331a459660SWolfgang Denk+ * SPDX-License-Identifier:	GPL-2.0+
1340d24de9dSSimon Glass+ */
1350d24de9dSSimon Glass+
1360d24de9dSSimon Glass+
1370d24de9dSSimon Glass+/*
1380d24de9dSSimon Glass+ * This module records the progress of boot and arbitrary commands, and
1390d24de9dSSimon Glass+ * permits accurate timestamping of each. The records can optionally be
1400d24de9dSSimon Glass+ * passed to kernel in the ATAGs
1410d24de9dSSimon Glass+ */
1420d24de9dSSimon Glass+
1430d24de9dSSimon Glass+#include <common.h>
1440d24de9dSSimon Glass+
1450d24de9dSSimon Glass+
1460d24de9dSSimon Glass+struct bootstage_record {
1470d24de9dSSimon Glass+	uint32_t time_us;
1480d24de9dSSimon Glass+	const char *name;
1490d24de9dSSimon Glass+};
1500d24de9dSSimon Glass+
1510d24de9dSSimon Glass+static struct bootstage_record record[BOOTSTAGE_COUNT];
1520d24de9dSSimon Glass+
1530d24de9dSSimon Glass+uint32_t bootstage_mark(enum bootstage_id id, const char *name)
1540d24de9dSSimon Glass+{
1550d24de9dSSimon Glass+	struct bootstage_record *rec = &record[id];
1560d24de9dSSimon Glass+
1570d24de9dSSimon Glass+	/* Only record the first event for each */
1580d24de9dSSimon Glass+%sif (!rec->name) {
1590d24de9dSSimon Glass+		rec->time_us = (uint32_t)timer_get_us();
1600d24de9dSSimon Glass+		rec->name = name;
1610d24de9dSSimon Glass+	}
162d29fe6e2SSimon Glass+	if (!rec->name &&
163d29fe6e2SSimon Glass+	%ssomething_else) {
164d29fe6e2SSimon Glass+		rec->time_us = (uint32_t)timer_get_us();
165d29fe6e2SSimon Glass+		rec->name = name;
166d29fe6e2SSimon Glass+	}
1670d24de9dSSimon Glass+%sreturn rec->time_us;
1680d24de9dSSimon Glass+}
1690d24de9dSSimon Glass--
1700d24de9dSSimon Glass1.7.3.1
1710d24de9dSSimon Glass'''
1720d24de9dSSimon Glass        signoff = 'Signed-off-by: Simon Glass <sjg@chromium.org>\n'
1730d24de9dSSimon Glass        tab = '	'
174d29fe6e2SSimon Glass        indent = '    '
1750d24de9dSSimon Glass        if data_type == 'good':
1760d24de9dSSimon Glass            pass
1770d24de9dSSimon Glass        elif data_type == 'no-signoff':
1780d24de9dSSimon Glass            signoff = ''
1790d24de9dSSimon Glass        elif data_type == 'spaces':
1800d24de9dSSimon Glass            tab = '   '
181d29fe6e2SSimon Glass        elif data_type == 'indent':
182d29fe6e2SSimon Glass            indent = tab
1830d24de9dSSimon Glass        else:
1840d24de9dSSimon Glass            print 'not implemented'
185d29fe6e2SSimon Glass        return data % (signoff, tab, indent, tab)
1860d24de9dSSimon Glass
1870d24de9dSSimon Glass    def SetupData(self, data_type):
1880d24de9dSSimon Glass        inhandle, inname = tempfile.mkstemp()
1890d24de9dSSimon Glass        infd = os.fdopen(inhandle, 'w')
1900d24de9dSSimon Glass        data = self.GetData(data_type)
1910d24de9dSSimon Glass        infd.write(data)
1920d24de9dSSimon Glass        infd.close()
1930d24de9dSSimon Glass        return inname
1940d24de9dSSimon Glass
195d29fe6e2SSimon Glass    def testGood(self):
1960d24de9dSSimon Glass        """Test checkpatch operation"""
1970d24de9dSSimon Glass        inf = self.SetupData('good')
198d29fe6e2SSimon Glass        result = checkpatch.CheckPatch(inf)
199d29fe6e2SSimon Glass        self.assertEqual(result.ok, True)
200d29fe6e2SSimon Glass        self.assertEqual(result.problems, [])
201d29fe6e2SSimon Glass        self.assertEqual(result.errors, 0)
202d29fe6e2SSimon Glass        self.assertEqual(result.warnings, 0)
203d29fe6e2SSimon Glass        self.assertEqual(result.checks, 0)
204*e752edcbSSimon Glass        self.assertEqual(result.lines, 56)
2050d24de9dSSimon Glass        os.remove(inf)
2060d24de9dSSimon Glass
207d29fe6e2SSimon Glass    def testNoSignoff(self):
2080d24de9dSSimon Glass        inf = self.SetupData('no-signoff')
209d29fe6e2SSimon Glass        result = checkpatch.CheckPatch(inf)
210d29fe6e2SSimon Glass        self.assertEqual(result.ok, False)
211d29fe6e2SSimon Glass        self.assertEqual(len(result.problems), 1)
212d29fe6e2SSimon Glass        self.assertEqual(result.errors, 1)
213d29fe6e2SSimon Glass        self.assertEqual(result.warnings, 0)
214d29fe6e2SSimon Glass        self.assertEqual(result.checks, 0)
215*e752edcbSSimon Glass        self.assertEqual(result.lines, 56)
2160d24de9dSSimon Glass        os.remove(inf)
2170d24de9dSSimon Glass
218d29fe6e2SSimon Glass    def testSpaces(self):
2190d24de9dSSimon Glass        inf = self.SetupData('spaces')
220d29fe6e2SSimon Glass        result = checkpatch.CheckPatch(inf)
221d29fe6e2SSimon Glass        self.assertEqual(result.ok, False)
222*e752edcbSSimon Glass        self.assertEqual(len(result.problems), 2)
223d29fe6e2SSimon Glass        self.assertEqual(result.errors, 0)
224*e752edcbSSimon Glass        self.assertEqual(result.warnings, 2)
225d29fe6e2SSimon Glass        self.assertEqual(result.checks, 0)
226*e752edcbSSimon Glass        self.assertEqual(result.lines, 56)
227d29fe6e2SSimon Glass        os.remove(inf)
228d29fe6e2SSimon Glass
229d29fe6e2SSimon Glass    def testIndent(self):
230d29fe6e2SSimon Glass        inf = self.SetupData('indent')
231d29fe6e2SSimon Glass        result = checkpatch.CheckPatch(inf)
232d29fe6e2SSimon Glass        self.assertEqual(result.ok, False)
233d29fe6e2SSimon Glass        self.assertEqual(len(result.problems), 1)
234d29fe6e2SSimon Glass        self.assertEqual(result.errors, 0)
235d29fe6e2SSimon Glass        self.assertEqual(result.warnings, 0)
236d29fe6e2SSimon Glass        self.assertEqual(result.checks, 1)
237*e752edcbSSimon Glass        self.assertEqual(result.lines, 56)
2380d24de9dSSimon Glass        os.remove(inf)
2390d24de9dSSimon Glass
2400d24de9dSSimon Glass
2410d24de9dSSimon Glassif __name__ == "__main__":
2420d24de9dSSimon Glass    unittest.main()
2430d24de9dSSimon Glass    gitutil.RunTests()
244