dump_i2c/dump_tpm: drop

We no longer install these, so drop them.  The sigrok (https://sigrok.org/)
set of tools provides protocol decoders now.

BUG=None
TEST=precq passes

Change-Id: I45632a7d9591c34d2b3eda7d2f5e48acf3deb11a
Reviewed-on: https://chromium-review.googlesource.com/708137
Commit-Ready: Mike Frysinger <vapier@chromium.org>
Tested-by: Mike Frysinger <vapier@chromium.org>
Reviewed-by: Vadim Bendebury <vbendeb@chromium.org>
diff --git a/host/dump_i2c b/host/dump_i2c
deleted file mode 100755
index f6e3420..0000000
--- a/host/dump_i2c
+++ /dev/null
@@ -1,312 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Dump I2C transactions from raw CSV record produced by Saleae Logic.
-
-The input file format for I2C transaction data is a comma separated value
-(CSV) file with a single header row.  The columns of the file that are
-used by dump_i2c are in the following format (data is optional for some
-events.
-
-<time>, <event>, [data]
-
-Additional columns after the first three and the header row are ignored.
-"""
-
-import fileinput
-import optparse
-import os
-import re
-import sys
-
-class I2CParseError(Exception):
-  """I2C parsing error exception.
-
-  This exception is raised when the parser failes to understand the input
-  provided.  It records the file name and line number for later formatting
-  of an error message that includes a message that is specific to the parse
-  error.
-  """
-  def __init__(self, message):
-    """Initialize a new I2CParseError exception."""
-    self.message = message
-
-    try:
-      self.file_name = fileinput.filename()
-      self.line_number = fileinput.filelineno()
-    except RuntimeError:
-      self.file_name = '<doctest>'
-      self.line_number = 0
-
-  def __str__(self):
-    """Format the exception for user consumption."""
-    return '%s:%d: %s' % (self.file_name, self.line_number, self.message)
-
-
-class Transition:
-  """Structure describing entries in the state transition table."""
-  def __init__(self, current_state, event, next_state, action):
-    self.current_state = current_state
-    self.event = event
-    self.next_state = next_state
-    self.action = action
-
-
-class I2C:
-  """State machine class that accumulates and prints full I2C bus transactions.
-
-  Once a complete bus transaction is encountered it is printed.  The output of
-  this class can be further processed by device specific scripts to further
-  understand the transaction.
-
-  This example shows the basic functionality of I2C.
-  >>> i2c = I2C(0x20, 1)
-  >>> i2c.process('0.1,Start Bit,')
-  >>> i2c.process('0.2,Write Address + ACK, 0x20')
-  >>> i2c.process('0.3,Data + ACK, 0x00')
-  >>> i2c.process('0.4,Stop Bit,')
-  0.10000000 Write 0x20 DATA 0x00 
-
-  Here we see I2C filtering out a transaction based on the device address.
-  >>> i2c = I2C(0x20, 1)
-  >>> i2c.process('0.1,Start Bit,')
-  >>> i2c.process('0.2,Write Address + ACK, 0xff')
-  >>> i2c.process('0.3,Data + ACK, 0x00')
-  >>> i2c.process('0.4,Stop Bit,')
-
-  Here is an example of an invalid I2C transaction sequence, there can not be
-  two start bits in a row.
-  >>> i2c = I2C(0x20, 1)
-  >>> i2c.process('0.1,Start Bit,')
-  >>> i2c.process('0.1,Start Bit,')
-  Traceback (most recent call last):
-  ...
-  I2CParseError: <doctest>:0: Unexpected event "Start Bit"
-
-  This is an example of I2C syncing to the beginning of the first full
-  transaction presented to it.
-  >>> i2c = I2C(0x20, 1)
-  >>> i2c.process('0.1,Stop Bit,')
-  >>> i2c.process('0.1,Start Bit,')
-  >>> i2c.state == i2c.STARTED
-  True
-
-  And a completely bogus value results in a ValueError when trying to convert
-  the time string to a float.
-  >>> i2c = I2C(0x20, 1)
-  >>> i2c.process('this,is,not,valid')
-  Traceback (most recent call last):
-  ...
-  ValueError: invalid literal for float(): this
-
-  Or a truncated line will throw an IndexError
-  >>> i2c = I2C(0x20, 1)
-  >>> i2c.process('0.1')
-  Traceback (most recent call last):
-  ...
-  IndexError: list index out of range
-  """
-
-  SYNC = 0
-  IDLE = 1
-  STARTED = 2
-  READING = 3
-  WRITING = 4
-  NAK = 5
-
-  def StartBit(self, time, data):
-    """Record start time of transaction."""
-    self.message += '%.8f ' % time
-
-  def WriteAddressNAK(self, time, data):
-    """Record NAK'ed address transaction for writing."""
-    self.address = int(data, 16)
-    self.message += 'Write %s NAK' % data
-
-  def WriteAddressACK(self, time, data):
-    """Record ACK'ed address transaction for writing."""
-    self.address = int(data, 16)
-    self.message += 'Write %s DATA ' % data
-
-  def ReadAddressNAK(self, time, data):
-    """Record NAK'ed address transaction for reading."""
-    self.address = int(data, 16)
-    self.message += 'Read  %s NAK' % data
-
-  def ReadAddressACK(self, time, data):
-    """Record ACK'ed address transaction for reading."""
-    self.address = int(data, 16)
-    self.message += 'Read  %s DATA ' % data
-
-  def AddData(self, time, data):
-    """Record read or written data."""
-    self.message += '%s ' % data
-
-  def ClearMessage(self, time, data):
-    """Clear accumulated transaction."""
-    self.message = ''
-
-  def PrintMessage(self, time, data):
-    """Print and clear accumulated transaction."""
-    if self.address == self.match_address:
-      print self.message
-
-    self.message = ''
-
-  # This state transition table records the valid I2C bus transitions that we
-  # expect to see.  Any state/action pair not defined in this table is assumed
-  # to be invalid and will result in an I2CParseError being raised.
-  #
-  # The entries in this table correspond to the current state, the event
-  # parsed, the state to transition to and the function to execute on that
-  # transition.  The function is passed a CSV instance, the time of the event
-  # and a possibly empty data field.
-  state_table = [
-    # The initial section of the state transition table describes the
-    # synchronization process.  For the I2C bus this means waiting for
-    # the first start or repeated start bit.  We can also transition to
-    # the IDLE state when we see a stop bit because the next bit has to be
-    # a start bit.  If it's not we'll raise a I2CParseError exception.
-    Transition(SYNC,    'Start Bit',           STARTED, StartBit),
-    Transition(SYNC,    'Repeated Start Bit',  STARTED, StartBit),
-    Transition(SYNC,    'Write Address + NAK', SYNC,    None),
-    Transition(SYNC,    'Write Address + ACK', SYNC,    None),
-    Transition(SYNC,    'Read Address + NAK',  SYNC,    None),
-    Transition(SYNC,    'Read Address + ACK',  SYNC,    None),
-    Transition(SYNC,    'Data + NAK',          SYNC,    None),
-    Transition(SYNC,    'Data + ACK',          SYNC,    None),
-    Transition(SYNC,    'Stop Bit',            IDLE,    None),
-
-    # After syncronization is complete the rest of the table describes the
-    # expected transitions.
-    Transition(IDLE,    'Start Bit',           STARTED, StartBit),
-    Transition(STARTED, 'Stop Bit',            IDLE,    ClearMessage),
-    Transition(STARTED, 'Write Address + NAK', NAK,     WriteAddressNAK),
-    Transition(STARTED, 'Write Address + ACK', WRITING, WriteAddressACK),
-    Transition(STARTED, 'Read Address + NAK',  NAK,     ReadAddressNAK),
-    Transition(STARTED, 'Read Address + ACK',  READING, ReadAddressACK),
-    Transition(WRITING, 'Data + NAK',          NAK,     AddData),
-    Transition(WRITING, 'Data + ACK',          WRITING, AddData),
-    Transition(READING, 'Data + NAK',          NAK,     AddData),
-    Transition(READING, 'Data + ACK',          READING, AddData),
-    Transition(WRITING, 'Stop Bit',            IDLE,    PrintMessage),
-    Transition(WRITING, 'Repeated Start Bit',  STARTED, PrintMessage),
-    Transition(NAK,     'Stop Bit',            IDLE,    PrintMessage)]
-
-  def __init__(self, match_address, timeout):
-    """Initialize a new I2C instance.
-
-    The I2C instance will print all transactions with a particular I2C device
-    specified by it's address up until the timeout.
-
-    Args:
-      match_address: I2C device address to filter for
-      timeout: Maximum time to start recording new transactions
-
-    >>> i2c = I2C(0x20, 1)
-    >>> i2c.match_address == 0x20
-    True
-    >>> i2c.timeout == 1
-    True
-    >>> i2c.state == i2c.SYNC
-    True
-    """
-    self.state = self.SYNC
-    self.address = 0x00
-    self.message = ''
-    self.match_address = match_address
-    self.timeout = timeout
-
-  def process(self, line):
-    """Update I2C state machine from one line of the CSV file.
-
-    The CSV file is assumed to have the format generated by the Saleae Logic
-    desktop I2C recording tool.
-
-    These examples show how process effects the internal state of I2C.
-    >>> i2c = I2C(0x20, 1)
-
-    >>> i2c.process('0.1,Start Bit,')
-    >>> i2c.state == i2c.STARTED
-    True
-    >>> i2c.message == '0.10000000 '
-    True
-
-    >>> i2c.process('0.1,Stop Bit,')
-    >>> i2c.state == i2c.IDLE
-    True
-    >>> i2c.message == ''
-    True
-    """
-    values = line.split(',')
-
-    time = float(values[0])
-    detail = ' '.join(values[1].split())
-
-    if len(values) > 2:
-      data = ' '.join(values[2].split())
-    else:
-      data = ''
-
-    # Once the timeout value has been reached in the input trace we ignore all
-    # future events once we've returned to the IDLE state.  We return to the
-    # IDLE state at the next "Stop Bit" and stay there.
-    if time > self.timeout and self.state == self.IDLE:
-      return
-
-    # Search the transition table for a matching state/action pair.
-    for transition in self.state_table:
-      if (transition.current_state == self.state and
-          transition.event == detail):
-        if transition.action:
-          transition.action(self, time, data)
-
-        self.state = transition.next_state
-        break
-    else:
-      raise I2CParseError('Unexpected event "%s"' % detail)
-
-
-def main():
-  parser = optparse.OptionParser(usage = 'usage: %prog [filename] [options]\n')
-
-  parser.add_option('-a', '--address', default=0x20,
-                    type='int',
-                    help='I2C device address to process',
-                    action='store',
-                    dest='address')
-
-  parser.add_option('-t', '--timeout', default=100,
-                    type='float',
-                    help='All transactions before timeout are shown',
-                    action='store',
-                    dest='timeout')
-
-  options, arguments = parser.parse_args()
-
-  input = fileinput.input(arguments)
-  i2c = I2C(options.address, options.timeout)
-
-  for line in input:
-    # The first line of the file is the header row.
-    if not fileinput.isfirstline():
-      try:
-        i2c.process(line)
-      except (I2CParseError, ValueError, IndexError) as error:
-        print error
-        return
-
-def Test():
-  """Run any built-in tests."""
-  import doctest
-  assert doctest.testmod().failed == 0
-
-
-if __name__ == '__main__':
-  # If first argument is --test, run testing code.
-  if sys.argv[1:2] == ['--test']:
-    Test()
-  else:
-    main()
diff --git a/host/dump_tpm b/host/dump_tpm
deleted file mode 100755
index 43f10a9..0000000
--- a/host/dump_tpm
+++ /dev/null
@@ -1,246 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Dump tpm transactions from previous run of dump_i2c.
-
-The output of dump_i2c can be used directly by piping it to dump_tpm's stdin.
-The dump_tpm input format is line oriented where each line should conform to:
-
-<time> <Read|Write> <address in 0xff format> NAK
-
-or:
-
-<time> <Read|Write> <address in 0xff format> DATA [data]+
-"""
-
-import fileinput
-import optparse
-import os
-import re
-import sys
-
-class TPMParseError(Exception):
-  """TPM parsing error exception.
-
-  This exception is raised when the parser failes to understand the input
-  provided.  It records the file name and line number for later formatting
-  of an error message that includes a message that is specific to the parse
-  error.
-  """
-  def __init__(self, message):
-    """Initialize a new TPMParseError exception."""
-    self.message = message
-
-    try:
-      self.file_name = fileinput.filename()
-      self.line_number = fileinput.filelineno()
-    except RuntimeError:
-      self.file_name = '<doctest>'
-      self.line_number = 0
-
-  def __str__(self):
-    """Format the exception for user consumption."""
-    return '%s:%d: %s' % (self.file_name, self.line_number, self.message)
-
-
-class Transition:
-  """Structure describing entries in the state transition table."""
-  def __init__(self, current_state, event, next_state, action):
-    self.current_state = current_state
-    self.event = event
-    self.next_state = next_state
-    self.action = action
-
-
-class TPM:
-  """State machine that reads I2C transactions and prints TPM transactions.
-
-  TPM interprets single byte writes as precursors to reads since the first
-  byte in any write is used to set the register address for subsequent bytes
-  in the write or future reads.
-  >>> tpm = TPM()
-  >>> tpm.process('0.1 Write 0x20 DATA 0x00')
-  >>> tpm.process('0.2 Read 0x20 DATA 0x81')
-  Read reg TPM_ACCESS_0 returns 0x81
-
-  A write with multiple bytes is interpreted as a write to the register
-  addressed by the first byte in the sequence.
-  >>> tpm = TPM()
-  >>> tpm.process('0.1 Write 0x20 DATA 0x09 0x12 0x34')
-  Write reg TPM_DID_VID_0.3 with 0x12 0x34
-
-  TPM interprets a write that is not a single byte write that sets the same
-  TPM register address as an error.
-  >>> tpm = TPM()
-  >>> tpm.process('0.1 Write 0x20 DATA 0x08')
-  >>> tpm.process('0.2 Write 0x20 DATA 0x09 0x12')
-  Traceback (most recent call last):
-  ...
-  TPMParseError: <doctest>:0: Unexpected action "0.2 Write 0x20 DATA 0x09 0x12"
-
-  But if the write is a redundant setting of the TPM register address it is OK
-  >>> tpm = TPM()
-  >>> tpm.process('0.1 Write 0x20 DATA 0x08')
-  >>> tpm.process('0.2 Write 0x20 DATA 0x08')
-  """
-  SYNC = 0
-  IDLE = 1
-  READ = 2
-
-  ACTION_WRITE_MULTI = 0
-  ACTION_WRITE_SINGLE = 1
-  ACTION_READ = 2
-
-  def RegisterName(self, index):
-    register = ['TPM_ACCESS_0',
-                'TPM_STS_0',
-                'TPM_STS_0.BC_0',
-                'TPM_STS_0.BC_1',
-                'TPM_STS_0.BC_2',
-                'TPM_DATA_FIFO_0',
-                'TPM_DID_VID_0.0',
-                'TPM_DID_VID_0.1',
-                'TPM_DID_VID_0.2',
-                'TPM_DID_VID_0.3']
-
-    if index < len(register):
-      return register[index]
-    else:
-      raise TPMParseError('Unknown register index %d' % index)
-
-  def PrintWrite(self, data):
-    """Print TPM write transaction."""
-    self.register = int(data[0], 16)
-
-    print 'Write reg %s with %s' % (self.RegisterName(self.register),
-                                    ' '.join(data[1:]))
-
-  def RecordAddress(self, data):
-    """Record TPM register address."""
-    self.register = int(data[0], 16)
-
-  def CheckDuplicateAddress(self, data):
-    """Check that a write while waiting for a read is actually a duplicate."""
-    if self.register != int(data[0], 16):
-      raise TPMParseError('Expected "Read" action, got "Write" to new address')
-
-  def PrintRead(self, data):
-    """Print TPM read transaction."""
-    print 'Read reg %s returns %s' % (self.RegisterName(self.register),
-                                      ' '.join(data))
-
-  # This state transition table records the valid I2C bus actions for
-  # communicating with the TPM.  And state/action pair not defined in this
-  # table is assumed to be invalid and will result in an TPMParseError being
-  # raised.
-  #
-  # The entries in this table correspond to the current state, the event
-  # parsed, the state to transition to and the function to execute on that
-  # transition.  The function is passed a TPM instance and an array of the
-  # data values parsed from the event.
-  state_table = [
-    # The initial section of the state transition table describes the
-    # synchronization process.  For the TPM this just involves waiting for
-    # the first write operation.
-    Transition(SYNC, ACTION_WRITE_MULTI,  IDLE, PrintWrite),
-    Transition(SYNC, ACTION_WRITE_SINGLE, READ, RecordAddress),
-    Transition(SYNC, ACTION_READ,         SYNC, None),
-
-    # After syncronization is complete the rest of the table describes the
-    # expected transitions.
-    Transition(IDLE, ACTION_WRITE_MULTI,  IDLE, PrintWrite),
-    Transition(IDLE, ACTION_WRITE_SINGLE, READ, RecordAddress),
-    Transition(READ, ACTION_WRITE_SINGLE, READ, CheckDuplicateAddress),
-    Transition(READ, ACTION_READ,         IDLE, PrintRead)]
-
-  def __init__(self):
-    """Initialize a new TPM instance.
-
-    >>> tpm = TPM()
-    >>> tpm.state == tpm.SYNC
-    True
-    """
-    self.state = self.SYNC
-    self.register = 0x00
-
-  def process(self, line):
-    """Update TPM state machine for one line generated by dump_i2c.
-
-    These examples show how process effects the internal state of TPM.
-    >>> tpm = TPM()
-
-    >>> tpm.process('0.1 Write 0x20 DATA 0x00')
-    >>> tpm.register == 0x00
-    True
-    >>> tpm.state == tpm.READ
-    True
-
-    >>> tpm.process('0.2 Read 0x20 DATA 0x81')
-    Read reg TPM_ACCESS_0 returns 0x81
-    >>> tpm.state == tpm.IDLE
-    True
-
-    >>> tpm.process('0.10000000 Write 0x20 DATA 0x09 0x12 0x34')
-    Write reg TPM_DID_VID_0.3 with 0x12 0x34
-    >>> tpm.register == 0x09
-    True
-    >>> tpm.state == tpm.IDLE
-    True
-    """
-    values  = line.split()
-    time    = float(values[0])
-    action  = ' '.join(values[1].split())
-    address = ' '.join(values[2].split())
-    nak     = (values[3].split()[0] == 'NAK')
-    data    = values[4:]
-
-    if nak:
-      return
-
-    if action == 'Read':
-      action_index = self.ACTION_READ
-    elif action == 'Write' and len(data) == 1:
-      action_index = self.ACTION_WRITE_SINGLE
-    elif action == 'Write' and len(data) > 1:
-      action_index = self.ACTION_WRITE_MULTI
-    else:
-      raise TPMParseError('Unknown action "%s"' % action)
-
-    # Search the transition table for a matching state/action pair.
-    for transition in self.state_table:
-      if (transition.current_state == self.state and
-          transition.event == action_index):
-        if transition.action:
-          transition.action(self, data)
-
-        self.state = transition.next_state
-        break
-    else:
-      raise TPMParseError('Unexpected action "%s"' % line)
-
-
-def main():
-  tpm = TPM()
-
-  for line in fileinput.input():
-    try:
-      tpm.process(line)
-    except (TPMParseError, ValueError, IndexError) as error:
-      print error
-      return
-
-
-def Test():
-  """Run any built-in tests."""
-  import doctest
-  assert doctest.testmod().failed == 0
-
-
-if __name__ == '__main__':
-  # If first argument is --test, run testing code.
-  if sys.argv[1:2] == ['--test']:
-    Test()
-  else:
-    main()