.. _skiboot-5.8:

skiboot-5.8
===========

skiboot v5.8 was released on Thursday August 31st 2017. It is the first
release of skiboot 5.8, which becomes the new stable release.
It follows the 5.7 release, first released 25th July 2017.

skiboot v5.8 contains all bug fixes as of :ref:`skiboot-5.4.6`
and :ref:`skiboot-5.1.20` (the currently maintained stable releases). We
do not currently expect to do any 5.7.x stable releases.

For how the skiboot stable releases work, see :ref:`stable-rules` for details.

Over :ref:`skiboot-5.7`, we have the following changes:

New Features
------------
- sensors: occ: Add support to clear sensor groups

  Adds a generic API to clear sensor groups. OCC inband sensor groups
  such as CSM, Profiler and Job Scheduler can be cleared using this API.
  It will clear the min/max of all sensors belonging to OCC sensor
  groups.

- sensors: occ: Add CSM_{min/max} sensors

  HWMON's lowest/highest attribute is used by CSM agent, so map min/max
  device-tree properties "sensor-data-min" and "sensor-data-max" to
  the min/max of CSM.

- sensors: occ: Add support for OCC inband sensors

  Add support to parse and export OCC inband sensors which are copied
  by OCC to main memory in P9. Each OCC writes three buffers which
  includes one names buffer for sensor meta data and two buffers for
  sensor readings. While OCC writes to one buffer the sensor values
  can be read from the other buffer. The sensors are updated every
  100ms.

  This patch adds power, temperature, current and voltage sensors to
  ``/ibm,opal/sensors`` device-tree node which can be exported by the
  ibmpowernv-hwmon driver in Linux.

- psr: occ: Add support to change power-shifting-ratio

  Add support to set the CPU-GPU power shifting ratio which is used by
  the OCC power capping algorithm. PSR value of 100 takes all power away
  from CPU first and a PSR value of 0 caps GPU first.

- powercap: occ: Add a generic powercap framework

  This patch adds a generic powercap framework and exports OCC powercap
  sensors using which system powercap can be set inband through OPAL-OCC
  command-response interface.
- phb4: Enable PCI peer-to-peer

  P9 supports PCI peer-to-peer: a PCI device can write directly to the
  mmio space of another PCI device. It completely by-passes the CPU.

  It requires some configuration on the PHBs involved:

  1. on the initiating side, the address for the read/write operation is
     in the mmio space of the target, i.e. well outside the range normally
     allowed. So we disable range-checking on the TVT entry in bypass mode.

  2. on the target side, we need to explicitly enable p2p by setting a
     bit in a configuration register. It has the side-effect of reserving
     an outbound (as seen from the CPU) store queue for p2p. Therefore we
     only enable p2p on the PHBs using it, as we don't want to waste the
     resource if we don't have to.

  P9 supports p2p mmio writes. Reads are currently only supported if the
  two devices are under the same PHB but that is expected to change in
  the future, and it raises questions about intermediate switches
  configuration, so we report an error for the time being.

  The patch adds a new OPAL call to allow the OS to declare a p2p
  (initiator, target) pair.

- NX 842 and GZIP support on POWER9


POWER9 DD2
----------

Further support for POWER9 DD2 revision chips. Notable changes include:

- xscom: Grab P9 DD2 revision level
- vas: Set mmio enable bits in DD2

  POWER9 DD2 added some new "enable" bits that must be set for VAS to
  work. These bits were unused in DD1.
- hdat: Add POWER9 DD2.0 specific pa_features

  Same as the default but with TM off.

POWER9
------

Since :ref:`skiboot-5.8-rc1`:

- hw/npu2.c: Add ibm,nvlink-speed device-tree property

  NVLink2 links can support multiple different speeds. However the device driver
  has no way of determining which speed was programmed so pass it down as a device
  tree property.
- hw/npu2-hw-procedures.c: Update PHY_RESET procedure

  Newer versions of Hostboot will have various clocks powered down by default
  to save power. Therefore we need to power them up before accessing the OBUS
  PHY.
- p8-i2c: Fix random data corruption (POWER9 specific)
  While waiting for the OCC to signal that it has finished using the I2C
  master we put the master into the, poorly named, occache_dis state.
  While in this state the transaction hasn't been started, but
  p8_i2c_check_status() will only skip it's checks when the master is in
  the idle state. Any action that checks that cranks the I2C state machine
  (interrupt, poll, etc) will call p8_i2c_check_status() and since the
  master is not idle, it will check the status register, see the
  transaction complete flag set and complete the i2c request without
  actually doing anything.

  If the transaction was a I2C read, the resulting output will be a
  zeroed data buffer.

- hw/p8-i2c: Fix OCC locking (POWER9 specific)

  There's a few issues with the Host<->OCC I2C bus handshaking. First up,
  skiboot is currently examining the wrong bit when checking if the OCC
  is currently using the bus. Secondly, when we need to wait for the OCC
  to release the bus we are scheduling a recovery timer to run zero
  timebase ticks after the current moment so the recovery timeout handler
  will run immediately after the bus was requested, which will in turn
  re-schedule itself, etc, etc. There's also a race between the OCC
  interrupt and the recovery handler which can result in an assertion
  failure in the recovery thread. All of this is bad.

  This patch addresses all these issues and sets the recovery timeout to
  10ms.
- vas: export chip-id to vas platform device
  This is needed so VAS in the kernel can perform cpu to vas id mapping.
- slw: Modify the power9 stop0_lite latency & residency

  Currently skiboot exposes the exit-latency for stop0_lite as 200ns and
  the target-residency to be 2us.

  However, the kernel cpu-idle infrastructure rounds up the latency to
  microseconds and lists the stop0_lite latency as 0us, putting it on
  par with snooze state. As a result, when the predicted latency is
  small (< 1us), cpuidle will select stop0_lite instead of snooze. The
  difference between these states is that snooze doesn't require an
  interrupt to exit from the state, but stop0_lite does. And the value
  200ns doesn't include the interrupt latency.

  This shows up in the context_switch2 benchmark
  (http://ozlabs.org/~anton/junkcode/context_switch2.c) where the number
  of context switches per second with the stop0_lite disabled is found
  to be roughly 30% more than with stop0_lite enabled.
  This can be correlated with the number of times cpuidle enters
  stop0_lite compared to snooze.

  Hence, bump up the exit latency of stop0_lite to 1us. Since the target
  residency is chosen to be 10 times the exit latency, set the target
  residency to 10us.

  With these values, we see a 50% improvement in the number of context
  switches.

Since :ref:`skiboot-5.7`:

- Base NPU2 support on POWER9 DD2
- hdata/i2c: Work around broken I2C array version

  Work around a bug in the I2C devices array that shows the
  array version as being v2 when only the v1 data is populated.
- Recognize the 2s2u zz platform

  OPAL currently doesn't know about the 2s2u zz. It recognizes such a
  box as a generic BMC machine and fails to boot. Add the 2s2u as a
  supported platform.

  There will subsequently be a 2s2u-L system which may have a different
  compatible property, which will need to be handled later.
- hdata/spira: POWER9 NX isn't software compatible with P7/P8 NX, don't claim so
- NX: Add P9 NX support for gzip compression engine

  Power 9 introduces NX gzip compression engine. This patch adds gzip
  compression support in NX. Virtual Accelerator Switch (VAS) is used to
  access NX gzip engine and the channel configuration will be done with
  the receive FIFO. So RxFIFO address, logical partition ID (lpid),
  process ID (pid) and thread ID (tid) are used to configure RxFIFO.
  P9 NX supports high and normal priority FIFOS. Skiboot configures User
  Mode Access Control (UMAC) noitify match register with these values and
  also enables other registers to enable / disable the engine.

  Creates the following device-tree entries to provide RxFIFO address,
  RxFIFO size, Fifo priority, lpid, pid and tid values so that kernel
  can drive P9 NX gzip engine.

  The following nodes are located under an xscom node: ::
       /xscom@<xscom_addr>/nx@<nx_addr>

       /ibm,gzip-high-fifo          : High priority gzip RxFIFO
       /ibm,gzip-normal-fifo        : Normal priority gzip RxFIFO

    Each RxFIFO node contain:s

    ``compatible``
      ``ibm,p9-nx-gzip``
    ``priority``
      High or Normal
    ``rx-fifo-address``
      RxFIFO address
    ``rx-fifo-size``
      RxFIFO size
    ``lpid``
      0xfff (1's for 12 bits in UMAC notify match register)
    ``pid``
      gzip coprocessor type
    ``tid``
      counter for gzip

- NX: Add P9 NX support for 842 compression engine

  This patch adds changes needed for 842 compression engine on power 9.
  Virtual Accelerator Switch (VAS) is used to access NX 842 engine on P9
  and the channel setup will be done with receive FIFO. So RxFIFO
  address, logical partition ID (lpid), process ID (pid) and thread ID
  (tid) are used for this setup. p9 NX supports high and normal priority
  FIFOs. skiboot is not involved to process data with 842 engine, but
  configures User Mode Access Control (UMAC) noitify match register with
  these values and export them to kernel with device-tree entries.

  Also configure registers to setup and enable / disable the engine with
  the appropriate registers. Creates the following device-tree entries to
  provide RxFIFO address, RxFIFO size, Fifo priority, lpid, pid and tid
  values so that kernel can drive P9 NX 842 engine.

    The following nodes are located under an xscom node:
    ``/xscom@<xscom_addr>/nx@<nx_addr>``

    ``/ibm,842-high-fifo``
      High priority 842 RxFIFO
    ``/ibm,842-normal-fifo``
      Normal priority 842 RxFIFO

    Each RxFIFO node contains:

    ``compatible``
      ibm,p9-nx-842
    ``priority``
      High or Normal
    ``rx-fifo-address``
      RxFIFO address
    ``rx-fifo-size``
      RXFIFO size
    ``lpid``
      0xfff (1's for 12 bits set in UMAC notify match register)
    ``pid``
      842 coprocessor type
    ``tid``
      Counter for 842
- vas: Create MMIO device tree node

  Create a device tree node for VAS and add properties that Linux
  will need to configure/use VAS.
- opal: Extract sw checkstop fir address from HDAT.

  Extract sw checkstop fir address info from HDAT and populate device tree
  node ibm,sw-checkstop-fir.

  This patch is required for OPAL_CEC_REBOOT2 OPAL call to work as expected
  on p9.

  With this patch a device property 'ibm,sw-checkstop-fir' is now properly
  populated: ::

    # lsprop ibm,sw-checkstop-fir
    ibm,sw-checkstop-fir
                     05012000 0000001f

PHB4
----
- hdat: Fix PCIe GEN4 lane-eq setting for DD2

  For PCIe GEN4, DD2 uses only 1 byte per PCIe lane for the lane-eq
  settings (DD1 uses 2 bytes)
- pci: Wait for CRS and switch link when restoring bus numbers

  When a complete reset occurs, after the PHB recovers it propagates a
  reset down the wire to every device.  At the same time, skiboot talks to
  every device in order to restore the state of devices to what they were
  before the reset.

  In some situations, such as devices that recovered slowly and/or were
  behind a switch, skiboot attempted to access config space of the device
  before the link was up and the device could respond.

  Fix this by retrying CRS until the device responds correctly, and for
  devices behind a switch, making sure the switch has its link up first.
- pci: Track whether a PCI device is a virtual function

  This can be checked from config space, but we will need to know this when
  restoring the PCI topology, and it is not always safe to access config
  space during this period.
- phb4: Enhanced PCIe training tracing

  This add more details to the PCI training tracing (aka Rick Mata
  mode). It enables the PCIe Link Training and Status State
  Machine (LTSSM) tracing and details on speed and link width.

  Output now looks like this when enabled (via nvram): ::

    [    1.096995141,3] PHB#0000[0:0]: TRACE:0x0000001101000000  0ms          GEN1:x16:detect
    [    1.102849137,3] PHB#0000[0:0]: TRACE:0x0000102101000000 11ms presence GEN1:x16:polling
    [    1.104341838,3] PHB#0000[0:0]: TRACE:0x0000182101000000 14ms training GEN1:x16:polling
    [    1.104357444,3] PHB#0000[0:0]: TRACE:0x00001c5101000000 14ms training GEN1:x16:recovery
    [    1.104580394,3] PHB#0000[0:0]: TRACE:0x00001c5103000000 14ms training GEN3:x16:recovery
    [    1.123259359,3] PHB#0000[0:0]: TRACE:0x00001c5104000000 51ms training GEN4:x16:recovery
    [    1.141737656,3] PHB#0000[0:0]: TRACE:0x0000144104000000 87ms presence GEN4:x16:L0
    [    1.141752318,3] PHB#0000[0:0]: TRACE:0x0000154904000000 87ms trained  GEN4:x16:L0
    [    1.141757964,3] PHB#0000[0:0]: TRACE: Link trained.
    [    1.096834019,3] PHB#0001[0:1]: TRACE:0x0000001101000000  0ms          GEN1:x16:detect
    [    1.105578525,3] PHB#0001[0:1]: TRACE:0x0000102101000000 17ms presence GEN1:x16:polling
    [    1.112763075,3] PHB#0001[0:1]: TRACE:0x0000183101000000 31ms training GEN1:x16:config
    [    1.112778956,3] PHB#0001[0:1]: TRACE:0x00001c5081000000 31ms training GEN1:x08:recovery
    [    1.113002083,3] PHB#0001[0:1]: TRACE:0x00001c5083000000 31ms training GEN3:x08:recovery
    [    1.114833873,3] PHB#0001[0:1]: TRACE:0x0000144083000000 35ms presence GEN3:x08:L0
    [    1.114848832,3] PHB#0001[0:1]: TRACE:0x0000154883000000 35ms trained  GEN3:x08:L0
    [    1.114854650,3] PHB#0001[0:1]: TRACE: Link trained.

- phb4: Fix reading wrong size registers in EEH dump

  These registers are supposed to be 16bit, and it makes part of the
  register dump misleading.
- phb4: Ignore slot state if performing complete reset

  If a PHB is being completely reset, its state is about to be blown away
  anyway, so if it's not in an appropriate state, creset it regardless.
- phb4: Prepare for link down when creset called from kernel

  phb4_creset() is typically called by functions that prepare the link
  to go down.  In cases where creset() is called directly by the kernel,
  this isn't the case and it can cause issues.  Prepare for link down in
  creset, just like we do in freset and hreset.
- phb4: Skip attempting to fix PHBs broken on boot

  If a PHB is marked broken it didn't work on boot, and if it didn't work
  on boot then there's no point trying to recover it later
- phb4: Fix duplicate in EEH register dump
- phb4: Be more conservative on link presence timeout

  In this patch we tuned our link timing to be more agressive:
  ``cf960e2884 phb4: Improve reset and link training timing``

  Cards should take only 32ms but unfortunately we've seen some take
  up to 440ms. Hence bump our timer up to 1000ms.

  This can hurt boot times on systems where slots indicate a hotplug
  status but no electrical link is present (which we've seen). Since we
  have to wait 1 second between PERST and touching config space anyway,
  it shouldn't hurt too much.
- phb4: Assert PERST before PHB reset

  Currently we don't assert PERST before issuing a PHB reset. This means
  any link issues while resetting the PHB will be logged as errors.

  This asserts PERST before we start resetting the PHB to avoid this.
- Revert "phb4: Read PERST signal rather than assuming it's asserted"

  This reverts commit b42ff2b904165addf32e77679cebb94a08086966

  The original patch assumes that PERST has been asserted well before (>
  250ms) we hit here (ie. during hostboot).

  In a subesquent patch this will no longer be the case as we need to
  assert PERST during PHB reset, which may only be a few milliseconds
  before we hit this code.

  Hence revert this patch. Go back to the software mechanism using
  skip_perst to determine if PERST should be asserted or not. This
  allows us to keep the speed optimisation on boot.
- phb4: Set REGB error enables based on link state

  Currently we always set these enables when initing the PHB. If the
  link is already down, we shouldn't set them as it may cause spurious
  errors.

  This changes the code to only sets them if the link is up.
- phb4: Mark PHB as fenced on creset

  If we have to inject an error to trigger recover, we end up not
  marking the PHB as fenced in the PHB struct. This fixes that.
- phb4: Clear errors before deasserting reset

  During reset we may have logged some errors (eg. due to the link going
  down).

  Hence before we deassert PERST or Hot Reset, we need to clear these
  errors. This ensures that once link training starts, only new errors
  are logged.
- phb4: Disable device config space access when fenced

  On DD2 you can't access device config space when fenced, so just
  disable access whenever we are fenced.
- phb4: Dump devctl and devstat registers

  Dump devctl and devstat registers.  These would have been useful when
  debugging the MPS issue.
- phb4: Only clear some PHB config space registers on errors

  Currently on error we clear the entire PHB config space.  This is a
  problem as the PCIe Maximum Payload Size (MPS) negotiation may have
  already occurred. Clearing MPS in the PHB back to a default of 128
  bytes will result an error for a device which already has a larger MPS
  configured.

  This will manifest itself as error due to a malformed TLP packet. ie.
  ``phbPblErrorStatus bit 41  = "Malformed TLP error"``

  This has been seen after kexec on with some adapters.

  This fixes the problem by only clearing a subset of registers on a phb
  error.

Utilities
---------
- external/xscom-utils: Add ``--list-bits``

  When using getscom/putscom it's helpful to know what bits are set in the
  register. This patch adds an option to print out which bits are set
  along with the value that was read/written to the register. Note that
  this output indicates which bits are set using the IBM bit ordering
  since that's what the XSCOM documentation uses.


opal-prd
--------

- opal-prd: Do not pass pnor file while starting daemon.

  This change to the included systemd init file means opal-prd can
  start and run on IBM FSP based systems.

  We do not have pnor support on all the system. Also we have logic to
  autodetect PNOR. Hence do not pass ``--pnor`` by default.

- opal-prd: Disable pnor access interface on FSP system

  On FSP system host does not have access to PNOR. Hence disable PNOR
  access interfaces.

OPAL Sensors
------------
- sensor-groups : occ: Add 'ops' DT property

  Add new device-tree property 'ops' to define different operations
  supported on each sensor-group.

- OCC: Map OCC sensor to a chip-id

  Parse device tree to get chip-id for OCC sensor.

- HDAT: Add chip-id property to ipmi sensors

  Presently we do not have a way to map sensor to chip id. Hence we are
  always passing chip id 0 for occ_reset request (see occ_sensor_id_to_chip()).

  This patch adds chip-id property to sensors (whenever its available) so that
  we can map occ sensor to chip-id and pass valid chip-id to occ_reset request.

- xive: Check for valid PIR index when decoding

  This fixes an unlikely but possible assert() fail on kdump.

- sensors: occ: Skip the deconfigured core sensors

  This patch skips the deconfigured cores from the core sensors while
  parsing the sensor names in the main memory as these sensor values are
  not updated by OCC.

IBM FSP systems
---------------
Since :ref:`skiboot-5.8-rc1`:

- mktime: fix off-by-one error calling days_in_month

  From auditing all the mktime() users, there seems to be only a *very*
  small window around new years day where we could possibly return
  incorrect data to the OS, and even then, there would have to be FSP
  reset/reload on FSP machines. I don't *think* there's an opportunity
  on other machines.

Tests
-----
Since :ref:`skiboot-5.8-rc1`:

- travis: Debian Stretch must pass
- test kernels: link with -N
- core/test/run-msg: don't depend on unittest mem layout

Since :ref:`skiboot-5.7`:

- hdata_to_dt: use a realistic PVR and chip revision

- nx: PR_INFO that NX RNG and Crypto not yet supported on POWER9

- external/pflash: Add tests
- external/pflash: Reinstate the progress bars

  Recent work did some optimising which unfortunately removed some of the
  progress bars in pflash.

  It turns out that there's only one thing people prefer to correctly
  programmed flash chips, it is the ability to watch little equals
  characters go across their screens for potentially minutes.
- external/pflash: Correct erase alignment checks

  pflash should check the alignment of addresses and sizes when asked to
  erase. There are two possibilities:

  1. The user has specified sizes manually in which case pflash should
     be as flexible as possible, blocklevel_smart_erase() permits this. To
     prevent possible mistakes pflash will require --force to perform a
     manual erase of unaligned sizes.
  2. The user used -P to specify a partition, partitions aren't
     necessarily erase granule aligned anymore, blocklevel_smart_erase() can
     handle. In this it doesn't make sense to warn/error about misalignment
     since the misalignment is inherent to the FFS partition and not really
     user input.

- external/pflash: Check the result of strtoul

  Also add 0x in front of --info output to avoid a copy and paste mistake.

- libflash/file: Break up MTD erase ioctl() calls

  Unfortunately not all drivers are created equal and several drivers on
  which pflash relies block in the kernel for quite some time and ignore
  signals.

  This is really only a problem if pflash is to perform large erases. So
  don't, perform these ops in small chunks.

  An in kernel fix is possible in most cases but it takes time and systems
  will be running older drivers for quite some time. Since sector erases
  aren't significantly slower than whole chip erases there isn't much of a
  performance penalty to breaking up the erase ioctl()s.

General
-------

Since :ref:`skiboot-5.8-rc1`:

- gcov: support GCC 7.1+
- Tests build and pass on Debian
  A few things related to the Debian toolchain.

Since :ref:`skiboot-5.7`:

- opal-msg: Increase the max-async completion count by max chips possible

- occ: Add support for OPAL-OCC command/response interface

  This patch adds support for a shared memory based command/response
  interface between OCC and OPAL. In HOMER, there is an OPAL command
  buffer and an OCC response buffer which is used to send inband
  commands to OCC.

- HDAT/device-tree: only add lid-type on pre-POWER9 systems

  Largely a relic of back when we had multiple entry points into OPAL depending
  on which mechanism on an FSP we were using to get loaded, this isn't needed
  on modern P9 as we only have one entry point (we don't do the PHYP LID hack).

Contributors
------------

- Processed 156 csets from 17 developers
- 1 employers found
- A total of 6888 lines added, 1089 removed (delta 5799)

Developers with the most changesets
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

========================== === =======
Developer                    # %
========================== === =======
Cyril Bur                   35 (22.4%)
Stewart Smith               32 (20.5%)
Michael Neuling             23 (14.7%)
Sukadev Bhattiprolu         11 (7.1%)
Reza Arbab                  10 (6.4%)
Russell Currey               9 (5.8%)
Shilpasri G Bhat             9 (5.8%)
Oliver O'Halloran            5 (3.2%)
Haren Myneni                 5 (3.2%)
Alistair Popple              4 (2.6%)
Vasant Hegde                 4 (2.6%)
Nicholas Piggin              3 (1.9%)
Andrew Donnellan             2 (1.3%)
Gautham R. Shenoy            1 (0.6%)
Mahesh Salgaonkar            1 (0.6%)
Ananth N Mavinakayanahalli   1 (0.6%)
Frederic Barrat              1 (0.6%)
========================== === =======

Developers with the most changed lines
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

========================== ==== =======
Developer                     # %
========================== ==== =======
Shilpasri G Bhat           1935 (27.9%)
Cyril Bur                  1868 (26.9%)
Stewart Smith               866 (12.5%)
Sukadev Bhattiprolu         663 (9.5%)
Haren Myneni                584 (8.4%)
Michael Neuling             384 (5.5%)
Frederic Barrat             168 (2.4%)
Reza Arbab                   98 (1.4%)
Oliver O'Halloran            98 (1.4%)
Vasant Hegde                 93 (1.3%)
Alistair Popple              77 (1.1%)
Russell Currey               60 (0.9%)
Mahesh Salgaonkar            28 (0.4%)
Andrew Donnellan             11 (0.2%)
Gautham R. Shenoy             6 (0.1%)
Nicholas Piggin               4 (0.1%)
Ananth N Mavinakayanahalli    1 (0.0%)
========================== ==== =======

Developers with the most signoffs
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

========================== === =======
Developer                    # %
========================== === =======
Stewart Smith              124 (97.6%)
Benjamin Herrenschmidt       2 (1.6%)
Vaidyanathan Srinivasan      1 (0.8%)
Total                      127 (100%)
========================== === =======

Developers with the most reviews
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

=========================== == =======
Developer                    # %
=========================== == =======
Samuel Mendoza-Jonas        19 (52.8%)
Andrew Donnellan            11 (30.6%)
Vasant Hegde                 2 (5.6%)
Cédric Le Goater             1 (2.8%)
Russell Currey               1 (2.8%)
Reza Arbab                   1 (2.8%)
Cyril Bur                    1 (2.8%)
Total                       36 (100%)
=========================== == =======

Developers with the most test credits
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

=========================== == =======
Developer                    # %
=========================== == =======
Vasant Hegde                 1 (50.0%)
Hari Bathini                 1 (50.0%)
=========================== == =======


Developers who gave the most tested-by credits
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

=========================== == =======
Developer                    # %
=========================== == =======
Russell Currey               1 (50.0%)
Mahesh Salgaonkar            1 (50.0%)
=========================== == =======

Developers with the most report credits
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

=========================== == =======
Developer                    # %
=========================== == =======
Anton Blanchard              1 (16.7%)
Mark Linimon                 1 (16.7%)
Pavaman Subramaniyam         1 (16.7%)
Pridhiviraj Paidipeddi       1 (16.7%)
Rob Lippert                  1 (16.7%)
Michael Neuling              1 (16.7%)
=========================== == =======

Developers who gave the most report credits
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

=========================== == =======
Developer                    # %
=========================== == =======
Stewart Smith                2 (33.3%)
Michael Neuling              1 (16.7%)
Andrew Donnellan             1 (16.7%)
Cyril Bur                    1 (16.7%)
Gautham R. Shenoy            1 (16.7%)
=========================== == =======
