xref: /rk3399_rockchip-uboot/tools/patman/test.py (revision 3abaad4c1f3bf22c8e997c43b83948de4279a8b5)
12eb5fc13SSimon Glass# -*- coding: utf-8 -*-
20d24de9dSSimon Glass#
30d24de9dSSimon Glass# Copyright (c) 2011 The Chromium OS Authors.
40d24de9dSSimon Glass#
51a459660SWolfgang Denk# SPDX-License-Identifier:	GPL-2.0+
60d24de9dSSimon Glass#
70d24de9dSSimon Glass
80d24de9dSSimon Glassimport os
90d24de9dSSimon Glassimport tempfile
100d24de9dSSimon Glassimport unittest
110d24de9dSSimon Glass
120d24de9dSSimon Glassimport checkpatch
130d24de9dSSimon Glassimport gitutil
140d24de9dSSimon Glassimport patchstream
150d24de9dSSimon Glassimport series
160d24de9dSSimon Glass
170d24de9dSSimon Glass
180d24de9dSSimon Glassclass TestPatch(unittest.TestCase):
190d24de9dSSimon Glass    """Test this program
200d24de9dSSimon Glass
210d24de9dSSimon Glass    TODO: Write tests for the rest of the functionality
220d24de9dSSimon Glass    """
230d24de9dSSimon Glass
240d24de9dSSimon Glass    def testBasic(self):
250d24de9dSSimon Glass        """Test basic filter operation"""
260d24de9dSSimon Glass        data='''
270d24de9dSSimon Glass
280d24de9dSSimon GlassFrom 656c9a8c31fa65859d924cd21da920d6ba537fad Mon Sep 17 00:00:00 2001
290d24de9dSSimon GlassFrom: Simon Glass <sjg@chromium.org>
300d24de9dSSimon GlassDate: Thu, 28 Apr 2011 09:58:51 -0700
310d24de9dSSimon GlassSubject: [PATCH (resend) 3/7] Tegra2: Add more clock support
320d24de9dSSimon Glass
330d24de9dSSimon GlassThis adds functions to enable/disable clocks and reset to on-chip peripherals.
340d24de9dSSimon Glass
352eb5fc13SSimon Glasscmd/pci.c:152:11: warning: format ‘%llx’ expects argument of type
362eb5fc13SSimon Glass   ‘long long unsigned int’, but argument 3 has type
372eb5fc13SSimon Glass   ‘u64 {aka long unsigned int}’ [-Wformat=]
382eb5fc13SSimon Glass
390d24de9dSSimon GlassBUG=chromium-os:13875
400d24de9dSSimon GlassTEST=build U-Boot for Seaboard, boot
410d24de9dSSimon Glass
420d24de9dSSimon GlassChange-Id: I80fe1d0c0b7dd10aa58ce5bb1d9290b6664d5413
430d24de9dSSimon Glass
440d24de9dSSimon GlassReview URL: http://codereview.chromium.org/6900006
450d24de9dSSimon Glass
460d24de9dSSimon GlassSigned-off-by: Simon Glass <sjg@chromium.org>
470d24de9dSSimon Glass---
480d24de9dSSimon Glass arch/arm/cpu/armv7/tegra2/Makefile         |    2 +-
490d24de9dSSimon Glass arch/arm/cpu/armv7/tegra2/ap20.c           |   57 ++----
500d24de9dSSimon Glass arch/arm/cpu/armv7/tegra2/clock.c          |  163 +++++++++++++++++
510d24de9dSSimon Glass'''
520d24de9dSSimon Glass        expected='''
530d24de9dSSimon Glass
540d24de9dSSimon GlassFrom 656c9a8c31fa65859d924cd21da920d6ba537fad Mon Sep 17 00:00:00 2001
550d24de9dSSimon GlassFrom: Simon Glass <sjg@chromium.org>
560d24de9dSSimon GlassDate: Thu, 28 Apr 2011 09:58:51 -0700
570d24de9dSSimon GlassSubject: [PATCH (resend) 3/7] Tegra2: Add more clock support
580d24de9dSSimon Glass
590d24de9dSSimon GlassThis adds functions to enable/disable clocks and reset to on-chip peripherals.
600d24de9dSSimon Glass
612eb5fc13SSimon Glasscmd/pci.c:152:11: warning: format ‘%llx’ expects argument of type
622eb5fc13SSimon Glass   ‘long long unsigned int’, but argument 3 has type
632eb5fc13SSimon Glass   ‘u64 {aka long unsigned int}’ [-Wformat=]
642eb5fc13SSimon Glass
650d24de9dSSimon GlassSigned-off-by: Simon Glass <sjg@chromium.org>
660d24de9dSSimon Glass---
67e752edcbSSimon Glass
680d24de9dSSimon Glass arch/arm/cpu/armv7/tegra2/Makefile         |    2 +-
690d24de9dSSimon Glass arch/arm/cpu/armv7/tegra2/ap20.c           |   57 ++----
700d24de9dSSimon Glass arch/arm/cpu/armv7/tegra2/clock.c          |  163 +++++++++++++++++
710d24de9dSSimon Glass'''
720d24de9dSSimon Glass        out = ''
730d24de9dSSimon Glass        inhandle, inname = tempfile.mkstemp()
740d24de9dSSimon Glass        infd = os.fdopen(inhandle, 'w')
750d24de9dSSimon Glass        infd.write(data)
760d24de9dSSimon Glass        infd.close()
770d24de9dSSimon Glass
780d24de9dSSimon Glass        exphandle, expname = tempfile.mkstemp()
790d24de9dSSimon Glass        expfd = os.fdopen(exphandle, 'w')
800d24de9dSSimon Glass        expfd.write(expected)
810d24de9dSSimon Glass        expfd.close()
820d24de9dSSimon Glass
830d24de9dSSimon Glass        patchstream.FixPatch(None, inname, series.Series(), None)
840d24de9dSSimon Glass        rc = os.system('diff -u %s %s' % (inname, expname))
850d24de9dSSimon Glass        self.assertEqual(rc, 0)
860d24de9dSSimon Glass
870d24de9dSSimon Glass        os.remove(inname)
880d24de9dSSimon Glass        os.remove(expname)
890d24de9dSSimon Glass
900d24de9dSSimon Glass    def GetData(self, data_type):
91*3abaad4cSSimon Glass        data='''From 4924887af52713cabea78420eff03badea8f0035 Mon Sep 17 00:00:00 2001
920d24de9dSSimon GlassFrom: Simon Glass <sjg@chromium.org>
930d24de9dSSimon GlassDate: Thu, 7 Apr 2011 10:14:41 -0700
940d24de9dSSimon GlassSubject: [PATCH 1/4] Add microsecond boot time measurement
950d24de9dSSimon Glass
960d24de9dSSimon GlassThis defines the basics of a new boot time measurement feature. This allows
970d24de9dSSimon Glasslogging of very accurate time measurements as the boot proceeds, by using
980d24de9dSSimon Glassan available microsecond counter.
990d24de9dSSimon Glass
1000d24de9dSSimon Glass%s
1010d24de9dSSimon Glass---
1020d24de9dSSimon Glass README              |   11 ++++++++
103*3abaad4cSSimon Glass MAINTAINERS         |    3 ++
1040d24de9dSSimon Glass common/bootstage.c  |   50 ++++++++++++++++++++++++++++++++++++
1050d24de9dSSimon Glass include/bootstage.h |   71 +++++++++++++++++++++++++++++++++++++++++++++++++++
1060d24de9dSSimon Glass include/common.h    |    8 ++++++
1070d24de9dSSimon Glass 5 files changed, 141 insertions(+), 0 deletions(-)
1080d24de9dSSimon Glass create mode 100644 common/bootstage.c
1090d24de9dSSimon Glass create mode 100644 include/bootstage.h
1100d24de9dSSimon Glass
1110d24de9dSSimon Glassdiff --git a/README b/README
1120d24de9dSSimon Glassindex 6f3748d..f9e4e65 100644
1130d24de9dSSimon Glass--- a/README
1140d24de9dSSimon Glass+++ b/README
1150d24de9dSSimon Glass@@ -2026,6 +2026,17 @@ The following options need to be configured:
1160d24de9dSSimon Glass 		example, some LED's) on your board. At the moment,
1170d24de9dSSimon Glass 		the following checkpoints are implemented:
1180d24de9dSSimon Glass
1190d24de9dSSimon Glass+- Time boot progress
1200d24de9dSSimon Glass+		CONFIG_BOOTSTAGE
1210d24de9dSSimon Glass+
1220d24de9dSSimon Glass+		Define this option to enable microsecond boot stage timing
1230d24de9dSSimon Glass+		on supported platforms. For this to work your platform
1240d24de9dSSimon Glass+		needs to define a function timer_get_us() which returns the
1250d24de9dSSimon Glass+		number of microseconds since reset. This would normally
1260d24de9dSSimon Glass+		be done in your SOC or board timer.c file.
1270d24de9dSSimon Glass+
1280d24de9dSSimon Glass+		You can add calls to bootstage_mark() to set time markers.
1290d24de9dSSimon Glass+
1300d24de9dSSimon Glass - Standalone program support:
1310d24de9dSSimon Glass 		CONFIG_STANDALONE_LOAD_ADDR
1320d24de9dSSimon Glass
133*3abaad4cSSimon Glassdiff --git a/MAINTAINERS b/MAINTAINERS
134*3abaad4cSSimon Glassindex b167b028ec..beb7dc634f 100644
135*3abaad4cSSimon Glass--- a/MAINTAINERS
136*3abaad4cSSimon Glass+++ b/MAINTAINERS
137*3abaad4cSSimon Glass@@ -474,3 +474,8 @@ S:	Maintained
138*3abaad4cSSimon Glass T:	git git://git.denx.de/u-boot.git
139*3abaad4cSSimon Glass F:	*
140*3abaad4cSSimon Glass F:	*/
141*3abaad4cSSimon Glass+
142*3abaad4cSSimon Glass+BOOTSTAGE
143*3abaad4cSSimon Glass+M:	Simon Glass <sjg@chromium.org>
144*3abaad4cSSimon Glass+L:	u-boot@lists.denx.de
145*3abaad4cSSimon Glass+F:	common/bootstage.c
1460d24de9dSSimon Glassdiff --git a/common/bootstage.c b/common/bootstage.c
1470d24de9dSSimon Glassnew file mode 100644
1480d24de9dSSimon Glassindex 0000000..2234c87
1490d24de9dSSimon Glass--- /dev/null
1500d24de9dSSimon Glass+++ b/common/bootstage.c
151*3abaad4cSSimon Glass@@ -0,0 +1,37 @@
1520d24de9dSSimon Glass+/*
1530d24de9dSSimon Glass+ * Copyright (c) 2011, Google Inc. All rights reserved.
1540d24de9dSSimon Glass+ *
1551a459660SWolfgang Denk+ * SPDX-License-Identifier:	GPL-2.0+
1560d24de9dSSimon Glass+ */
1570d24de9dSSimon Glass+
1580d24de9dSSimon Glass+/*
1590d24de9dSSimon Glass+ * This module records the progress of boot and arbitrary commands, and
1600d24de9dSSimon Glass+ * permits accurate timestamping of each. The records can optionally be
1610d24de9dSSimon Glass+ * passed to kernel in the ATAGs
1620d24de9dSSimon Glass+ */
1630d24de9dSSimon Glass+
1640d24de9dSSimon Glass+#include <common.h>
1650d24de9dSSimon Glass+
1660d24de9dSSimon Glass+struct bootstage_record {
167*3abaad4cSSimon Glass+	u32 time_us;
1680d24de9dSSimon Glass+	const char *name;
1690d24de9dSSimon Glass+};
1700d24de9dSSimon Glass+
1710d24de9dSSimon Glass+static struct bootstage_record record[BOOTSTAGE_COUNT];
1720d24de9dSSimon Glass+
173*3abaad4cSSimon Glass+u32 bootstage_mark(enum bootstage_id id, const char *name)
1740d24de9dSSimon Glass+{
1750d24de9dSSimon Glass+	struct bootstage_record *rec = &record[id];
1760d24de9dSSimon Glass+
1770d24de9dSSimon Glass+	/* Only record the first event for each */
1780d24de9dSSimon Glass+%sif (!rec->name) {
179*3abaad4cSSimon Glass+		rec->time_us = (u32)timer_get_us();
1800d24de9dSSimon Glass+		rec->name = name;
1810d24de9dSSimon Glass+	}
182d29fe6e2SSimon Glass+	if (!rec->name &&
183d29fe6e2SSimon Glass+	%ssomething_else) {
184*3abaad4cSSimon Glass+		rec->time_us = (u32)timer_get_us();
185d29fe6e2SSimon Glass+		rec->name = name;
186d29fe6e2SSimon Glass+	}
1870d24de9dSSimon Glass+%sreturn rec->time_us;
1880d24de9dSSimon Glass+}
1890d24de9dSSimon Glass--
1900d24de9dSSimon Glass1.7.3.1
1910d24de9dSSimon Glass'''
1920d24de9dSSimon Glass        signoff = 'Signed-off-by: Simon Glass <sjg@chromium.org>\n'
1930d24de9dSSimon Glass        tab = '	'
194d29fe6e2SSimon Glass        indent = '    '
1950d24de9dSSimon Glass        if data_type == 'good':
1960d24de9dSSimon Glass            pass
1970d24de9dSSimon Glass        elif data_type == 'no-signoff':
1980d24de9dSSimon Glass            signoff = ''
1990d24de9dSSimon Glass        elif data_type == 'spaces':
2000d24de9dSSimon Glass            tab = '   '
201d29fe6e2SSimon Glass        elif data_type == 'indent':
202d29fe6e2SSimon Glass            indent = tab
2030d24de9dSSimon Glass        else:
204a920a17bSPaul Burton            print('not implemented')
205d29fe6e2SSimon Glass        return data % (signoff, tab, indent, tab)
2060d24de9dSSimon Glass
2070d24de9dSSimon Glass    def SetupData(self, data_type):
2080d24de9dSSimon Glass        inhandle, inname = tempfile.mkstemp()
2090d24de9dSSimon Glass        infd = os.fdopen(inhandle, 'w')
2100d24de9dSSimon Glass        data = self.GetData(data_type)
2110d24de9dSSimon Glass        infd.write(data)
2120d24de9dSSimon Glass        infd.close()
2130d24de9dSSimon Glass        return inname
2140d24de9dSSimon Glass
215d29fe6e2SSimon Glass    def testGood(self):
2160d24de9dSSimon Glass        """Test checkpatch operation"""
2170d24de9dSSimon Glass        inf = self.SetupData('good')
218d29fe6e2SSimon Glass        result = checkpatch.CheckPatch(inf)
219d29fe6e2SSimon Glass        self.assertEqual(result.ok, True)
220d29fe6e2SSimon Glass        self.assertEqual(result.problems, [])
221d29fe6e2SSimon Glass        self.assertEqual(result.errors, 0)
222d29fe6e2SSimon Glass        self.assertEqual(result.warnings, 0)
223d29fe6e2SSimon Glass        self.assertEqual(result.checks, 0)
224*3abaad4cSSimon Glass        self.assertEqual(result.lines, 62)
2250d24de9dSSimon Glass        os.remove(inf)
2260d24de9dSSimon Glass
227d29fe6e2SSimon Glass    def testNoSignoff(self):
2280d24de9dSSimon Glass        inf = self.SetupData('no-signoff')
229d29fe6e2SSimon Glass        result = checkpatch.CheckPatch(inf)
230d29fe6e2SSimon Glass        self.assertEqual(result.ok, False)
231d29fe6e2SSimon Glass        self.assertEqual(len(result.problems), 1)
232d29fe6e2SSimon Glass        self.assertEqual(result.errors, 1)
233d29fe6e2SSimon Glass        self.assertEqual(result.warnings, 0)
234d29fe6e2SSimon Glass        self.assertEqual(result.checks, 0)
235*3abaad4cSSimon Glass        self.assertEqual(result.lines, 62)
2360d24de9dSSimon Glass        os.remove(inf)
2370d24de9dSSimon Glass
238d29fe6e2SSimon Glass    def testSpaces(self):
2390d24de9dSSimon Glass        inf = self.SetupData('spaces')
240d29fe6e2SSimon Glass        result = checkpatch.CheckPatch(inf)
241d29fe6e2SSimon Glass        self.assertEqual(result.ok, False)
242*3abaad4cSSimon Glass        self.assertEqual(len(result.problems), 3)
243d29fe6e2SSimon Glass        self.assertEqual(result.errors, 0)
244*3abaad4cSSimon Glass        self.assertEqual(result.warnings, 3)
245d29fe6e2SSimon Glass        self.assertEqual(result.checks, 0)
246*3abaad4cSSimon Glass        self.assertEqual(result.lines, 62)
247d29fe6e2SSimon Glass        os.remove(inf)
248d29fe6e2SSimon Glass
249d29fe6e2SSimon Glass    def testIndent(self):
250d29fe6e2SSimon Glass        inf = self.SetupData('indent')
251d29fe6e2SSimon Glass        result = checkpatch.CheckPatch(inf)
252d29fe6e2SSimon Glass        self.assertEqual(result.ok, False)
253d29fe6e2SSimon Glass        self.assertEqual(len(result.problems), 1)
254d29fe6e2SSimon Glass        self.assertEqual(result.errors, 0)
255d29fe6e2SSimon Glass        self.assertEqual(result.warnings, 0)
256d29fe6e2SSimon Glass        self.assertEqual(result.checks, 1)
257*3abaad4cSSimon Glass        self.assertEqual(result.lines, 62)
2580d24de9dSSimon Glass        os.remove(inf)
2590d24de9dSSimon Glass
2600d24de9dSSimon Glass
2610d24de9dSSimon Glassif __name__ == "__main__":
2620d24de9dSSimon Glass    unittest.main()
2630d24de9dSSimon Glass    gitutil.RunTests()
264