Re: [U-Boot] [PATCH 01/23] x86: Enhance the microcode tool to support header files as input

2015-01-27 Thread Bin Meng
Hi Simon,

On Tue, Jan 27, 2015 at 9:22 AM, Simon Glass s...@chromium.org wrote:
 Sometimes microcode is delivered as a header file. Allow the tool to
 support this as well as collecting multiple microcode blocks into a
 single update.

 Signed-off-by: Simon Glass s...@chromium.org
 ---

Tested-by: Bin Meng bmeng...@gmail.com

But please see my comments below.

  tools/microcode-tool.py | 90 
 ++---
  1 file changed, 70 insertions(+), 20 deletions(-)

 diff --git a/tools/microcode-tool.py b/tools/microcode-tool.py
 index 003716d..71c2e91 100755
 --- a/tools/microcode-tool.py
 +++ b/tools/microcode-tool.py
 @@ -76,6 +76,35 @@ def ParseFile(fname):
  microcodes[name] = Microcode(name, data)
  return date, license_text, microcodes

 +def ParseHeaderFiles(fname_list):
 +Parse a list of header files and return the component parts
 +
 +Args:
 +fname_list: List of files to parse
 +Returns:
 +date: String containing date from the file's header
 +license_text: List of text lines for the license file
 +microcodes:   List of Microcode objects from the file
 +
 +microcodes = {}
 +license_text = []
 +date = ''
 +name = None
 +for fname in fname_list:
 +name = os.path.basename(fname).lower()
 +name = os.path.splitext(name)[0]
 +data = []
 +with open(fname) as fd:
 +for line in fd:
 +line = line.rstrip()
 +
 +# Omit anything after the last comma
 +words = line.split(',')[:-1]
 +data += [word + ',' for word in words]
 +microcodes[name] = Microcode(name, data)
 +return date, license_text, microcodes
 +
 +
  def List(date, microcodes, model):
  List the available microcode chunks

 @@ -129,13 +158,13 @@ def FindMicrocode(microcodes, model):
  break
  return found, tried

 -def CreateFile(date, license_text, mcode, outfile):
 +def CreateFile(date, license_text, mcodes, outfile):
  Create a microcode file in U-Boot's .dtsi format

  Args:
  date:   String containing date of original microcode file
  license:List of text lines for the license file
 -mcode:  Microcode object to write
 +mcodes:  Microcode objects to write (normally only 1)
  outfile:Filename to write to ('-' for stdout)
  
  out = '''/*%s
 @@ -159,15 +188,22 @@ intel,processor-flags = %#x;
  data = %s
  \t;'''
  words = ''
 -for i in range(len(mcode.words)):
 -if not (i  3):
 -words += '\n'
 -val = mcode.words[i]
 -# Change each word so it will be little-endian in the FDT
 -# This data is needed before RAM is available on some platforms so we
 -# cannot do an endianness swap on boot.
 -val = struct.unpack(I, struct.pack(I, val))[0]
 -words += '\t%#010x' % val
 +add_comments = len(mcodes)  1
 +for mcode in mcodes:
 +if add_comments:
 +words += '\n/* %s */' % mcode.name
 +for i in range(len(mcode.words)):
 +if not (i  3):
 +words += '\n'
 +val = mcode.words[i]
 +# Change each word so it will be little-endian in the FDT
 +# This data is needed before RAM is available on some platforms 
 so
 +# we cannot do an endianness swap on boot.
 +val = struct.unpack(I, struct.pack(I, val))[0]
 +words += '\t%#010x' % val
 +
 +# Use the first microcode for the headers
 +mcode = mcodes[0]

  # Take care to avoid adding a space before a tab
  text = ''
 @@ -187,8 +223,8 @@ data = %s
  print  sys.stderr, Creating directory '%s' % 
 MICROCODE_DIR
  os.makedirs(MICROCODE_DIR)
  outfile = os.path.join(MICROCODE_DIR, mcode.name + '.dtsi')
 -print  sys.stderr, Writing microcode for '%s' to '%s' % (
 - mcode.name, outfile)
 +print  sys.stderr, Writing microcode for '%s' to '%s' % (
 +', '.join([mcode.name for mcode in mcodes]), outfile)
  with open(outfile, 'w') as fd:
  print  fd, out % tuple(args)

 @@ -198,8 +234,12 @@ def MicrocodeTool():
  parser = OptionParser()
  parser.add_option('-d', '--mcfile', type='string', action='store',
  help='Name of microcode.dat file')
 +parser.add_option('-H', '--headerfile', type='string', action='append',
 +help='Name of .h file containing microcode')
  parser.add_option('-m', '--model', type='string', action='store',
 -help='Model name to extract')
 +help=Model name to extract ('all' for all))
 +parser.add_option('-M', '--multiple', type='string', action='store',
 +help=Allow output of multiple models)
  parser.add_option('-o', 

Re: [U-Boot] [PATCH 01/23] x86: Enhance the microcode tool to support header files as input

2015-01-27 Thread Bin Meng
Hi Simon,

On Tue, Jan 27, 2015 at 11:12 PM, Simon Glass s...@chromium.org wrote:
 Hi Bin,

 On 27 January 2015 at 01:59, Bin Meng bmeng...@gmail.com wrote:
 Hi Simon,

 On Tue, Jan 27, 2015 at 9:22 AM, Simon Glass s...@chromium.org wrote:
 Sometimes microcode is delivered as a header file. Allow the tool to
 support this as well as collecting multiple microcode blocks into a
 single update.

 Signed-off-by: Simon Glass s...@chromium.org
 ---

 Tested-by: Bin Meng bmeng...@gmail.com

 But please see my comments below.

  tools/microcode-tool.py | 90 
 ++---
  1 file changed, 70 insertions(+), 20 deletions(-)

 diff --git a/tools/microcode-tool.py b/tools/microcode-tool.py
 index 003716d..71c2e91 100755
 --- a/tools/microcode-tool.py
 +++ b/tools/microcode-tool.py
 @@ -76,6 +76,35 @@ def ParseFile(fname):
  microcodes[name] = Microcode(name, data)
  return date, license_text, microcodes

 +def ParseHeaderFiles(fname_list):
 +Parse a list of header files and return the component parts
 +
 +Args:
 +fname_list: List of files to parse
 +Returns:
 +date: String containing date from the file's header
 +license_text: List of text lines for the license file
 +microcodes:   List of Microcode objects from the file
 +
 +microcodes = {}
 +license_text = []
 +date = ''
 +name = None
 +for fname in fname_list:
 +name = os.path.basename(fname).lower()
 +name = os.path.splitext(name)[0]
 +data = []
 +with open(fname) as fd:
 +for line in fd:
 +line = line.rstrip()
 +
 +# Omit anything after the last comma
 +words = line.split(',')[:-1]
 +data += [word + ',' for word in words]
 +microcodes[name] = Microcode(name, data)
 +return date, license_text, microcodes
 +
 +
  def List(date, microcodes, model):
  List the available microcode chunks

 @@ -129,13 +158,13 @@ def FindMicrocode(microcodes, model):
  break
  return found, tried

 -def CreateFile(date, license_text, mcode, outfile):
 +def CreateFile(date, license_text, mcodes, outfile):
  Create a microcode file in U-Boot's .dtsi format

  Args:
  date:   String containing date of original microcode file
  license:List of text lines for the license file
 -mcode:  Microcode object to write
 +mcodes:  Microcode objects to write (normally only 1)
  outfile:Filename to write to ('-' for stdout)
  
  out = '''/*%s
 @@ -159,15 +188,22 @@ intel,processor-flags = %#x;
  data = %s
  \t;'''
  words = ''
 -for i in range(len(mcode.words)):
 -if not (i  3):
 -words += '\n'
 -val = mcode.words[i]
 -# Change each word so it will be little-endian in the FDT
 -# This data is needed before RAM is available on some platforms so 
 we
 -# cannot do an endianness swap on boot.
 -val = struct.unpack(I, struct.pack(I, val))[0]
 -words += '\t%#010x' % val
 +add_comments = len(mcodes)  1
 +for mcode in mcodes:
 +if add_comments:
 +words += '\n/* %s */' % mcode.name
 +for i in range(len(mcode.words)):
 +if not (i  3):
 +words += '\n'
 +val = mcode.words[i]
 +# Change each word so it will be little-endian in the FDT
 +# This data is needed before RAM is available on some 
 platforms so
 +# we cannot do an endianness swap on boot.
 +val = struct.unpack(I, struct.pack(I, val))[0]
 +words += '\t%#010x' % val
 +
 +# Use the first microcode for the headers
 +mcode = mcodes[0]

  # Take care to avoid adding a space before a tab
  text = ''
 @@ -187,8 +223,8 @@ data = %s
  print  sys.stderr, Creating directory '%s' % 
 MICROCODE_DIR
  os.makedirs(MICROCODE_DIR)
  outfile = os.path.join(MICROCODE_DIR, mcode.name + '.dtsi')
 -print  sys.stderr, Writing microcode for '%s' to '%s' % (
 - mcode.name, outfile)
 +print  sys.stderr, Writing microcode for '%s' to '%s' % (
 +', '.join([mcode.name for mcode in mcodes]), outfile)
  with open(outfile, 'w') as fd:
  print  fd, out % tuple(args)

 @@ -198,8 +234,12 @@ def MicrocodeTool():
  parser = OptionParser()
  parser.add_option('-d', '--mcfile', type='string', action='store',
  help='Name of microcode.dat file')
 +parser.add_option('-H', '--headerfile', type='string', action='append',
 +help='Name of .h file containing microcode')
  parser.add_option('-m', '--model', type='string', action='store',
 -help='Model name to extract')
 +help=Model name to extract ('all' for all))
 +  

Re: [U-Boot] [PATCH 01/23] x86: Enhance the microcode tool to support header files as input

2015-01-27 Thread Simon Glass
Hi Bin,

On 27 January 2015 at 01:59, Bin Meng bmeng...@gmail.com wrote:
 Hi Simon,

 On Tue, Jan 27, 2015 at 9:22 AM, Simon Glass s...@chromium.org wrote:
 Sometimes microcode is delivered as a header file. Allow the tool to
 support this as well as collecting multiple microcode blocks into a
 single update.

 Signed-off-by: Simon Glass s...@chromium.org
 ---

 Tested-by: Bin Meng bmeng...@gmail.com

 But please see my comments below.

  tools/microcode-tool.py | 90 
 ++---
  1 file changed, 70 insertions(+), 20 deletions(-)

 diff --git a/tools/microcode-tool.py b/tools/microcode-tool.py
 index 003716d..71c2e91 100755
 --- a/tools/microcode-tool.py
 +++ b/tools/microcode-tool.py
 @@ -76,6 +76,35 @@ def ParseFile(fname):
  microcodes[name] = Microcode(name, data)
  return date, license_text, microcodes

 +def ParseHeaderFiles(fname_list):
 +Parse a list of header files and return the component parts
 +
 +Args:
 +fname_list: List of files to parse
 +Returns:
 +date: String containing date from the file's header
 +license_text: List of text lines for the license file
 +microcodes:   List of Microcode objects from the file
 +
 +microcodes = {}
 +license_text = []
 +date = ''
 +name = None
 +for fname in fname_list:
 +name = os.path.basename(fname).lower()
 +name = os.path.splitext(name)[0]
 +data = []
 +with open(fname) as fd:
 +for line in fd:
 +line = line.rstrip()
 +
 +# Omit anything after the last comma
 +words = line.split(',')[:-1]
 +data += [word + ',' for word in words]
 +microcodes[name] = Microcode(name, data)
 +return date, license_text, microcodes
 +
 +
  def List(date, microcodes, model):
  List the available microcode chunks

 @@ -129,13 +158,13 @@ def FindMicrocode(microcodes, model):
  break
  return found, tried

 -def CreateFile(date, license_text, mcode, outfile):
 +def CreateFile(date, license_text, mcodes, outfile):
  Create a microcode file in U-Boot's .dtsi format

  Args:
  date:   String containing date of original microcode file
  license:List of text lines for the license file
 -mcode:  Microcode object to write
 +mcodes:  Microcode objects to write (normally only 1)
  outfile:Filename to write to ('-' for stdout)
  
  out = '''/*%s
 @@ -159,15 +188,22 @@ intel,processor-flags = %#x;
  data = %s
  \t;'''
  words = ''
 -for i in range(len(mcode.words)):
 -if not (i  3):
 -words += '\n'
 -val = mcode.words[i]
 -# Change each word so it will be little-endian in the FDT
 -# This data is needed before RAM is available on some platforms so 
 we
 -# cannot do an endianness swap on boot.
 -val = struct.unpack(I, struct.pack(I, val))[0]
 -words += '\t%#010x' % val
 +add_comments = len(mcodes)  1
 +for mcode in mcodes:
 +if add_comments:
 +words += '\n/* %s */' % mcode.name
 +for i in range(len(mcode.words)):
 +if not (i  3):
 +words += '\n'
 +val = mcode.words[i]
 +# Change each word so it will be little-endian in the FDT
 +# This data is needed before RAM is available on some platforms 
 so
 +# we cannot do an endianness swap on boot.
 +val = struct.unpack(I, struct.pack(I, val))[0]
 +words += '\t%#010x' % val
 +
 +# Use the first microcode for the headers
 +mcode = mcodes[0]

  # Take care to avoid adding a space before a tab
  text = ''
 @@ -187,8 +223,8 @@ data = %s
  print  sys.stderr, Creating directory '%s' % 
 MICROCODE_DIR
  os.makedirs(MICROCODE_DIR)
  outfile = os.path.join(MICROCODE_DIR, mcode.name + '.dtsi')
 -print  sys.stderr, Writing microcode for '%s' to '%s' % (
 - mcode.name, outfile)
 +print  sys.stderr, Writing microcode for '%s' to '%s' % (
 +', '.join([mcode.name for mcode in mcodes]), outfile)
  with open(outfile, 'w') as fd:
  print  fd, out % tuple(args)

 @@ -198,8 +234,12 @@ def MicrocodeTool():
  parser = OptionParser()
  parser.add_option('-d', '--mcfile', type='string', action='store',
  help='Name of microcode.dat file')
 +parser.add_option('-H', '--headerfile', type='string', action='append',
 +help='Name of .h file containing microcode')
  parser.add_option('-m', '--model', type='string', action='store',
 -help='Model name to extract')
 +help=Model name to extract ('all' for all))
 +parser.add_option('-M', '--multiple', type='string', action='store',
 +   

[U-Boot] [PATCH 01/23] x86: Enhance the microcode tool to support header files as input

2015-01-26 Thread Simon Glass
Sometimes microcode is delivered as a header file. Allow the tool to
support this as well as collecting multiple microcode blocks into a
single update.

Signed-off-by: Simon Glass s...@chromium.org
---

 tools/microcode-tool.py | 90 ++---
 1 file changed, 70 insertions(+), 20 deletions(-)

diff --git a/tools/microcode-tool.py b/tools/microcode-tool.py
index 003716d..71c2e91 100755
--- a/tools/microcode-tool.py
+++ b/tools/microcode-tool.py
@@ -76,6 +76,35 @@ def ParseFile(fname):
 microcodes[name] = Microcode(name, data)
 return date, license_text, microcodes
 
+def ParseHeaderFiles(fname_list):
+Parse a list of header files and return the component parts
+
+Args:
+fname_list: List of files to parse
+Returns:
+date: String containing date from the file's header
+license_text: List of text lines for the license file
+microcodes:   List of Microcode objects from the file
+
+microcodes = {}
+license_text = []
+date = ''
+name = None
+for fname in fname_list:
+name = os.path.basename(fname).lower()
+name = os.path.splitext(name)[0]
+data = []
+with open(fname) as fd:
+for line in fd:
+line = line.rstrip()
+
+# Omit anything after the last comma
+words = line.split(',')[:-1]
+data += [word + ',' for word in words]
+microcodes[name] = Microcode(name, data)
+return date, license_text, microcodes
+
+
 def List(date, microcodes, model):
 List the available microcode chunks
 
@@ -129,13 +158,13 @@ def FindMicrocode(microcodes, model):
 break
 return found, tried
 
-def CreateFile(date, license_text, mcode, outfile):
+def CreateFile(date, license_text, mcodes, outfile):
 Create a microcode file in U-Boot's .dtsi format
 
 Args:
 date:   String containing date of original microcode file
 license:List of text lines for the license file
-mcode:  Microcode object to write
+mcodes:  Microcode objects to write (normally only 1)
 outfile:Filename to write to ('-' for stdout)
 
 out = '''/*%s
@@ -159,15 +188,22 @@ intel,processor-flags = %#x;
 data = %s
 \t;'''
 words = ''
-for i in range(len(mcode.words)):
-if not (i  3):
-words += '\n'
-val = mcode.words[i]
-# Change each word so it will be little-endian in the FDT
-# This data is needed before RAM is available on some platforms so we
-# cannot do an endianness swap on boot.
-val = struct.unpack(I, struct.pack(I, val))[0]
-words += '\t%#010x' % val
+add_comments = len(mcodes)  1
+for mcode in mcodes:
+if add_comments:
+words += '\n/* %s */' % mcode.name
+for i in range(len(mcode.words)):
+if not (i  3):
+words += '\n'
+val = mcode.words[i]
+# Change each word so it will be little-endian in the FDT
+# This data is needed before RAM is available on some platforms so
+# we cannot do an endianness swap on boot.
+val = struct.unpack(I, struct.pack(I, val))[0]
+words += '\t%#010x' % val
+
+# Use the first microcode for the headers
+mcode = mcodes[0]
 
 # Take care to avoid adding a space before a tab
 text = ''
@@ -187,8 +223,8 @@ data = %s
 print  sys.stderr, Creating directory '%s' % MICROCODE_DIR
 os.makedirs(MICROCODE_DIR)
 outfile = os.path.join(MICROCODE_DIR, mcode.name + '.dtsi')
-print  sys.stderr, Writing microcode for '%s' to '%s' % (
- mcode.name, outfile)
+print  sys.stderr, Writing microcode for '%s' to '%s' % (
+', '.join([mcode.name for mcode in mcodes]), outfile)
 with open(outfile, 'w') as fd:
 print  fd, out % tuple(args)
 
@@ -198,8 +234,12 @@ def MicrocodeTool():
 parser = OptionParser()
 parser.add_option('-d', '--mcfile', type='string', action='store',
 help='Name of microcode.dat file')
+parser.add_option('-H', '--headerfile', type='string', action='append',
+help='Name of .h file containing microcode')
 parser.add_option('-m', '--model', type='string', action='store',
-help='Model name to extract')
+help=Model name to extract ('all' for all))
+parser.add_option('-M', '--multiple', type='string', action='store',
+help=Allow output of multiple models)
 parser.add_option('-o', '--outfile', type='string', action='store',
 help='Filename to use for output (- for stdout), default 
is'
 ' %s/name.dtsi' % MICROCODE_DIR)
@@ -224,9 +264,14 @@ def MicrocodeTool():
 if cmd not in commands: