aboutsummaryrefslogtreecommitdiffstats
path: root/package/firmware/layerscape/ls-rcw/patches/0002-Convert-to-python3.patch
blob: 8aa629dd85a67436dddb2ce80429f4bdd0e7c016 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
From 7bd43eb9e5cdf2035793d50a31bf13052eb9812a Mon Sep 17 00:00:00 2001
From: Yangbo Lu <yangbo.lu@nxp.com>
Date: Wed, 19 Jun 2019 10:25:41 +0800
Subject: [PATCH 2/2] Convert to python3

Python 2.7 will not be maintained past 2020. Let's convert
to python3 for rcw. Below were the changes of this patch.
- Adapted print usage
- Didn't use tab anymore
- Handled str and bytes type separately
- Other minor changes

Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
---
 Makefile.inc |   2 +-
 rcw.py       | 144 +++++++++++++++++++++++++++++------------------------------
 2 files changed, 73 insertions(+), 73 deletions(-)

diff --git a/Makefile.inc b/Makefile.inc
index 7d9a3d3..8bee2be 100644
--- a/Makefile.inc
+++ b/Makefile.inc
@@ -1,6 +1,6 @@
 DESTDIR = $(shell basename $(CURDIR))
 INSTALL = install
-PYTHON ?= python2
+PYTHON ?= python3
 RCW = $(PYTHON) ../rcw.py
 QSPI_SWAP_LIST = $(shell pwd)/../qspi_swap_list.txt
 QSPI_SWAP_SCRIPT=$(shell pwd)/../qspi_swap.sh
diff --git a/rcw.py b/rcw.py
index e5cd28b..619770a 100755
--- a/rcw.py
+++ b/rcw.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python2
+#!/usr/bin/env python3
 
 # rcw.py -- compiles an RCW source file into an PBL/RCW binary
 
@@ -95,7 +95,7 @@ from optparse import OptionParser, OptionGroup
 class ordered_dict(dict):
     def __init__(self, *args, **kwargs):
         dict.__init__(self, *args, **kwargs)
-        self._order = self.keys()
+        self._order = list(self.keys())
 
     def __setitem__(self, key, value):
         dict.__setitem__(self, key, value)
@@ -132,7 +132,7 @@ def crc32(data):
 
     crc = 0xffffffff
     for i in data:
-        crc = (crc << 8) ^ table[(crc >> 24) ^ ord(i)]
+        crc = (crc << 8) ^ table[(crc >> 24) ^ int(i)]
         crc = crc & 0xffffffff
 
     return crc
@@ -187,7 +187,7 @@ def command_line():
         options.output = '/dev/stdout'
 
     if options.reverse and not options.rcwi:
-        print "Error: -r option requires --rcw"
+        print("Error: -r option requires --rcw")
         sys.exit(1)
 
 # Checks if the bits for the given field overlap those of another field that
@@ -196,27 +196,27 @@ def check_for_overlap(name, begin, end):
     global symbols
 
     if name in symbols:
-        print 'Error: Duplicate bitfield definition for', name
+        print('Error: Duplicate bitfield definition for', name)
         return
 
     # Iterate over the list of symbols that have already been defined
-    for n, [b, e] in symbols.iteritems():
+    for n, [b, e] in symbols.items():
         # check if either 'begin' or 'end' is inside an bitfield range
         if (b <= begin <= e) or (b <= end <= e):
-            print 'Error: Bitfield', name, 'overlaps with', n
+            print('Error: Bitfield', name, 'overlaps with', n)
 
 #
 # Build a u-boot PBI section for SPI/SD/NAND boot
-# 	refer: Chapter 10, u-boot of QorIQ_SDK_Infocenter.pdf
+#         refer: Chapter 10, u-boot of QorIQ_SDK_Infocenter.pdf
 #
 # pre-cond 1: u-boot.xxd should be created
 # how to create u-boot.xxd
-# 	xxd u-boot.bin > u-boot.xxd1 && cut -d " " -f1-10 u-boot.xxd1 > u-boot.xxd && rm -f u-boot.xxd1
+#         xxd u-boot.bin > u-boot.xxd1 && cut -d " " -f1-10 u-boot.xxd1 > u-boot.xxd && rm -f u-boot.xxd1
 #
 # rcw file should include spi_boot.rcw as well
 #
 def build_pbi_uboot(lines):
-    subsection = ''
+    subsection = b''
     cnt = 1
     l_tmp = []
 
@@ -224,55 +224,55 @@ def build_pbi_uboot(lines):
     for l in lines:
         # prepare 0x40 per lines except the last one
         # add flush at the end 
-	lstr = l.split()
-	addr = int(lstr[0][:-1], 16)
+        lstr = l.split()
+        addr = int(lstr[0][:-1], 16)
         
         # print l
         #
         # last two lines take  0x20 numbers
         #
-	if ((cnt % 2 == 0) and (cnt > len(lines) -4)):
+        if ((cnt % 2 == 0) and (cnt > len(lines) -4)):
             l_tmp.append(l)
             b = []
 
-	    for t in l_tmp:
+            for t in l_tmp:
                 lstr = t.split()
 
-	        for i in range(1, len(lstr)):
+                for i in range(1, len(lstr)):
                     b.append(int(lstr[i], 16))
 
             subsection += struct.pack('>LHHHHHHHHHHHHHHHH',\
-		0x0C1F80000 + (addr - 0x10),\
-		b[0],  b[1],  b[2],  b[3],  b[4],  b[5],  b[6],  b[7],\
-		b[8],  b[9],  b[10], b[11], b[12], b[13], b[14], b[15])
+                0x0C1F80000 + (addr - 0x10),\
+                b[0],  b[1],  b[2],  b[3],  b[4],  b[5],  b[6],  b[7],\
+                b[8],  b[9],  b[10], b[11], b[12], b[13], b[14], b[15])
             l_tmp = []
         #
         # the rest of lines take 0x40 numbers
         elif (cnt % 4 == 0):
             l_tmp.append(l)
-	    b = []
-	    for t in l_tmp:
+            b = []
+            for t in l_tmp:
                 lstr = t.split()
-	        for i in range(1, len(lstr)):
+                for i in range(1, len(lstr)):
                     b.append(int(lstr[i], 16))
 
             subsection += struct.pack('>LHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH',\
-		0x081F80000 + (addr - 0x30),\
-		b[0],  b[1],  b[2],  b[3],  b[4],  b[5],  b[6],  b[7],\
-		b[8],  b[9],  b[10], b[11], b[12], b[13], b[14], b[15],\
-		b[16], b[17], b[18], b[19], b[20], b[21], b[22], b[23], \
-		b[24], b[25], b[26], b[27], b[28], b[29], b[30], b[31])
+                0x081F80000 + (addr - 0x30),\
+                b[0],  b[1],  b[2],  b[3],  b[4],  b[5],  b[6],  b[7],\
+                b[8],  b[9],  b[10], b[11], b[12], b[13], b[14], b[15],\
+                b[16], b[17], b[18], b[19], b[20], b[21], b[22], b[23], \
+                b[24], b[25], b[26], b[27], b[28], b[29], b[30], b[31])
             l_tmp = []
         else:
             l_tmp.append(l)
 
-	cnt = cnt + 1
+        cnt = cnt + 1
 
     return subsection
 
 # Build a PBI section
 def build_pbi(lines):
-    subsection = ''
+    subsection = b''
     global vars
 
     if 'pbiformat' in vars:
@@ -286,9 +286,9 @@ def build_pbi(lines):
     for l in lines:
         # Check for an instruction without 0-2 parameters
         # The + ' ' is a hack to make the regex work for just 'flush'
-        m = re.match(r'\s*([a-z]+)(|\.b1|\.b2|\.b4|\.short|\.long)\s*(?<=\s)([^,]*),?([^,]*),?([^,]*),?([^,]*)', l + ' ')
+        m = re.match(r'\s*([a-z]+)(|\.b1|\.b2|\.b4|\.short|\.long)\s*(?<=\s)([^,]*),?([^,]*),?([^,]*),?([^,]*)', l.decode("ascii") + ' ')
         if not m:
-            print 'Unknown PBI subsection command "%s"' % l
+            print('Unknown PBI subsection command "%s"' % l)
             return ''
         op = m.group(1)
         opsize = m.group(2)
@@ -306,7 +306,7 @@ def build_pbi(lines):
         p4 = eval(p4, {"__builtins__":None}, {}) if len(p4) else None
         if op == 'wait':
             if p1 == None:
-                print 'Error: "wait" instruction requires one parameter'
+                print('Error: "wait" instruction requires one parameter')
                 return ''
             if pbiformat == 2:
                 v1 = struct.pack(endianess + 'L', 0x80820000 | p1)
@@ -318,7 +318,7 @@ def build_pbi(lines):
                 subsection += v2
         elif op == 'write':
             if p1 == None or p2 == None:
-                print 'Error: "write" instruction requires two parameters'
+                print('Error: "write" instruction requires two parameters')
                 return ''
             if pbiformat == 2:
                 v1 = struct.pack(endianess + 'L', (opsizebytes << 28) | p1)
@@ -329,7 +329,7 @@ def build_pbi(lines):
             subsection += v2
         elif op == 'awrite':
             if p1 == None or p2 == None:
-                print 'Error: "awrite" instruction requires two parameters'
+                print('Error: "awrite" instruction requires two parameters')
                 return ''
             if pbiformat == 2:
                 v1 = struct.pack(endianess + 'L', 0x80000000 + (opsizebytes << 26) + p1)
@@ -340,10 +340,10 @@ def build_pbi(lines):
             subsection += v2
         elif op == 'poll':
             if pbiformat != 2:
-                print 'Error: "poll" not support for old PBI format'
+                print('Error: "poll" not support for old PBI format')
                 return ''
             if p1 == None or p2 == None or p3 == None:
-                print 'Error: "poll" instruction requires three parameters'
+                print('Error: "poll" instruction requires three parameters')
                 return ''
             if opsize == '.long':
                 cmd = 0x81
@@ -357,19 +357,19 @@ def build_pbi(lines):
             subsection += v3
         elif op == 'loadacwindow':
             if pbiformat != 2:
-                print 'Error: "loadacwindow" not supported for old PBI format'
+                print('Error: "loadacwindow" not supported for old PBI format')
                 return ''
             if p1 == None:
-                print 'Error: "loadacwindow" instruction requires one parameter'
+                print('Error: "loadacwindow" instruction requires one parameter')
                 return ''
             v1 = struct.pack(endianess + 'L', 0x80120000 + p1)
             subsection += v1
         elif op == 'blockcopy':
             if pbiformat != 2:
-                print 'Error: "blockcopy" not supported for old PBI format'
+                print('Error: "blockcopy" not supported for old PBI format')
                 return ''
             if p1 == None or p2 == None or p3 == None or p4 == None:
-                print 'Error: "blockcopy" instruction requires four parameters'
+                print('Error: "blockcopy" instruction requires four parameters')
                 return ''
             v1 = struct.pack(endianess + 'L', 0x80000000 + (p1 & 0xff))
             v2 = struct.pack(endianess + 'L', p2)
@@ -382,7 +382,7 @@ def build_pbi(lines):
         elif op == 'flush':
             subsection += struct.pack('>LL', 0x09000000 | (int(vars['pbladdr'], 16) & 0x00ffff00), 0)
         else:
-            print 'Unknown PBI subsection command "%s"' % l
+            print('Unknown PBI subsection command "%s"' % l)
             return ''
 
     return subsection
@@ -394,7 +394,7 @@ def parse_subsection(header, lines):
     elif header == "uboot":
         return build_pbi_uboot(lines)
 
-    print 'Error: unknown subsection "%s"' % header
+    print('Error: unknown subsection "%s"' % header)
     return ''
 
 # Parse the .rcw file, one line at a time
@@ -408,10 +408,10 @@ def parse_source_file(source):
     symbols = ordered_dict()
 
     in_subsection = False   # True == we're in a subsection
-    pbi = ''
+    pbi = b''
 
     for l2 in source:
-        l = re.sub(r'\s+', '', l2) # Remove all whitespace
+        l = re.sub(r'\s+', '', l2.decode("ascii")) # Remove all whitespace
 
         if not len(l):  # Skip blank or comment-only lines
             continue
@@ -466,14 +466,14 @@ def parse_source_file(source):
             (name, value) = m.groups()
             value = int(value, 0)
             if not name in symbols:
-                print 'Error: Unknown bitfield', name
+                print('Error: Unknown bitfield', name)
             else:
                 if options.warnings and (name in assignments):
-                    print 'Warning: Duplicate assignment for bitfield', name
+                    print('Warning: Duplicate assignment for bitfield', name)
                 assignments[name] = value
             continue
 
-        print 'Error: unknown command', ' '.join(l2)
+        print('Error: unknown command', ' '.join(l2))
 
 # Parse the -D command line parameter for additional bitfield assignments
 def parse_cmdline_bitfields():
@@ -484,12 +484,12 @@ def parse_cmdline_bitfields():
         # This is the same regex as used in parse_source_file()
         m = re.search(r'([A-Z0-9_]+)=([0-9a-zA-Z]+)', l)
         if not m:
-            print 'Unrecognized command-line bitfield:', l
+            print('Unrecognized command-line bitfield:', l)
         else:
             (name, value) = m.groups()
             value = int(value, 0)
             if not name in symbols:
-                print 'Error: Unknown bitfield', name
+                print('Error: Unknown bitfield', name)
             else:
                 # Don't bother printing a warning, since the command-line will
                 # normally be used to overwrite values in the .rcw file
@@ -510,7 +510,7 @@ def read_source_file(filename):
     global options
 
     if not find_program('gcc'):
-        print 'Could not find gcc in PATH'
+        print('Could not find gcc in PATH')
         return None
 
     i = ['-I', '.']     # Always look in the current directory
@@ -521,7 +521,7 @@ def read_source_file(filename):
         shell=False, stdin=None, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
     ret = p.communicate()
     if p.returncode != 0:
-        print ret[1],
+        print(ret[1],)
         return None
 
     return ret[0].splitlines()
@@ -532,13 +532,13 @@ def check_vars():
     global options
 
     if not 'size' in vars:
-        print 'Error: "%size" variable must be specified'
+        print('Error: "%size" variable must be specified')
         sys.exit(1)
 
     if options.pbl:
         if 'pbiformat' in vars and int(vars['pbiformat'], 0) == 2:
             if 'sysaddr' in vars:
-                print 'Error: PBL format does not use %sysaddr'
+                print('Error: PBL format does not use %sysaddr')
                 sys.exit(1)
             #if 'pbladdr' in vars:
             #    print 'Error: PBL format does not use %pbladdr'
@@ -546,7 +546,7 @@ def check_vars():
         else:
             # If we want the PBL header/footer, the vars for those must be defined
             if not 'sysaddr' in vars:
-                print 'Error: PBL format requires %sysaddr to be defined'
+                print('Error: PBL format requires %sysaddr to be defined')
                 sys.exit(1)
 
 # Create a .bin file
@@ -581,7 +581,7 @@ def create_binary():
     dont64bswapcrc = 0
     if 'dont64bswapcrc' in vars and int(vars['dont64bswapcrc'], 0):
         dont64bswapcrc = 1
-    bits = 0L
+    bits = 0
 
     # Magic hack. If a pbi is specified and we didn't set the size,
     # set it for the new format!
@@ -593,7 +593,7 @@ def create_binary():
                 pbilen += 2
             assignments['PBI_LENGTH'] = pbilen
             
-    for n, v in assignments.iteritems():
+    for n, v in assignments.items():
         # n = name of symbol
         # v = value to assign
         bb, ee = symbols[n]   # First bit and last bit
@@ -603,13 +603,13 @@ def create_binary():
 
         # Make sure it's not too large
         if v >= (1 << s):
-            print 'Error: Value', v, 'is too large for field', n
+            print('Error: Value', v, 'is too large for field', n)
             continue
 
         # If we treat the bitfield as "classic" numbered, reverse
         # the value before adding it!
         if b != bb:
-            v = int(bin(v)[2:].zfill(s)[::-1], 2)
+            v = int(bin(int(v))[2:].zfill(s)[::-1], 2)
                 
         # Set the bits.  We assume that bits [b:e] are already zero.  They can be
         # non-zero only if we have overlapping bitfield definitions, which we
@@ -617,7 +617,7 @@ def create_binary():
         bits += v << ((size - 1) - e)
 
     # Generate the binary.  First, apply the preamble, if requested
-    binary = ''
+    binary = b''
     if options.pbl:
         # Starting with LS2, we have a larger field and a different
         # format.
@@ -626,7 +626,7 @@ def create_binary():
             # Load RCW command
             binary += struct.pack(endianess + 'L', 0x80100000)
         else:
-            length_byte = (((size / 8) & 63) << 1) | 1
+            length_byte = (((size // 8) & 63) << 1) | 1
             binary += struct.pack(endianess + 'L', (length_byte << 24) | (int(vars['sysaddr'], 16) & 0x00ffffff))
 
     # Then convert 'bits' into an array of bytes
@@ -634,7 +634,7 @@ def create_binary():
         byte = bits >> i & 0xff
         if classicbitnumbers:
             byte = int(bin(byte)[2:].zfill(8)[::-1], 2)
-        binary += chr(byte)
+        binary += bytes([byte])
 
     if options.pbl:
         if pbiformat == 2:
@@ -672,11 +672,11 @@ def create_binary():
             # Precise bit any byte ordering of the CRC calculation is
             # not clearly specified. This is empirical.
             if classicbitnumbers:
-                    newcrcbinary = ''
+                    newcrcbinary = b''
                     for c in crcbinary:
-                        byte = ord(c)
+                        byte = int(c)
                         byte = int(bin(byte)[2:].zfill(8)[::-1], 2)
-                        newcrcbinary += chr(byte)
+                        newcrcbinary += bytes([byte])
                     crcbinary = newcrcbinary
 
             # Calculate and add the CRC
@@ -693,7 +693,7 @@ def create_binary():
         l = len(binary)
         if dont64bswapcrc and options.pbl:
             l -= 8
-        newbinary = ''
+        newbinary = b''
         for i in range(0, l, 8):
                 x64 = struct.unpack('>Q', binary[i:i + 8])[0]
                 newbinary += struct.pack('<Q', x64)
@@ -771,7 +771,7 @@ def create_source():
                 # We skip the checksum field
                 pbi = binary[8 + (size / 8) + 4:]
             else:
-                print 'Weird binary RCW format!'
+                print('Weird binary RCW format!')
                 bitbytes = ''
         else:
             if binary[0:4] == preambletst:
@@ -780,7 +780,7 @@ def create_source():
                 bitbytes = rcw
                 pbi = binary[8 + (size / 8):]
             else:
-                print 'Weird binary RCW format!'
+                print('Weird binary RCW format!')
                 bitbytes = ''
     else:
         bitbytes = binary
@@ -827,16 +827,16 @@ def create_source():
             bits &= ~(mask << shift)
 
     if bits:
-        print 'Unknown bits in positions:',
+        print('Unknown bits in positions:',)
         mask = 1
         n = 0
         while bits:
             if (bits & mask):
-                print n,
+                print(n,)
             n += 1
             bits &= ~mask
             mask <<= 1
-        print
+        print()
 
     if len(pbi) > 0:
         l = len(pbi)
@@ -953,7 +953,7 @@ def create_source():
                     if cnt == 0:
                         cnt = 64
                     if i + cnt >= l:
-                        print 'Error in write 0x%08x at offset %d within PBI\n' % (word, i)
+                        print('Error in write 0x%08x at offset %d within PBI\n' % (word, i))
                     if (addr & 0x00ffff00 == pbladdr):
                         arg1 = struct.unpack(endianess + 'L', pbi[i:i+4])[0]
                         i += 4
@@ -986,8 +986,8 @@ def create_source():
 
     return source
 
-if (sys.version_info < (2,6)) or (sys.version_info >= (3,0)):
-    print 'Only Python versions 2.6 or 2.7 are supported.'
+if (sys.version_info < (3,0)):
+    print('Only Python versions 3.0+ are supported.')
     sys.exit(1)
 
 # Make all 'print' statements output to stderr instead of stdout
-- 
2.7.4