1. 18 Mar, 2019 6 commits
    • Evan Lojewski's avatar
      mboxd: Add support for file-backed flash devices. · a042978b
      Evan Lojewski authored
      This commit adds a new file based backing source.  The file based
      backing source takes a raw pnor image that is usually flashed to a mtd
      device.
      
      This backing source enabled rapid testing of pnor images.
      
      Tested on Witherspoon with the VPNOR and file backends, and Romulus for
      the MTD and file backends.
      
      Change-Id: I253ecfa6b58d071c7982f153ad50da8e4ad39fa2
      Signed-off-by: default avatarEvan Lojewski <github@meklort.com>
      Signed-off-by: Andrew Jeffery's avatarAndrew Jeffery <andrew@aj.id.au>
      a042978b
    • Andrew Jeffery's avatar
      mboxd: Remove flash API compatibility shim · 0297e5b8
      Andrew Jeffery authored
      The flash API compatibility was kept to reduce the line noise in the
      previous backend patch. Remove the compatibility layer now and convert
      the remaining call-sites.
      
      Change-Id: I4b6e54f4463059a7804918add81e7572db7b7c21
      Signed-off-by: Andrew Jeffery's avatarAndrew Jeffery <andrew@aj.id.au>
      0297e5b8
    • Evan Lojewski's avatar
      mboxd: Add a backend abstraction layer to mboxd. · f1e547c7
      Evan Lojewski authored
      Introduce a backend abstraction, enabling multiple implementations to be
      compiled in at once. This change formally abstracts the two existing
      backends, mtd and vpnor.
      
      With the backend abstraction in place, subsequent backends are easier to
      implement.
      
      This change is based of Evan's work and he retains authorship credit. I
      (AJ) have reworked the patch to pass the vpnor tests, refactored some
      parts to enable broader use of const structures and others to clarify
      the initialisation sequences.
      
      Due to the existing lack of abstraction the patch has unfortunately
      wide-ranging impacts. I've whittled it down as much as I consider
      reasonable.
      
      Change-Id: I29984a36dae4ea86ec00b853d2a756f0b9afb3ec
      Signed-off-by: default avatarEvan Lojewski <github@meklort.com>
      Signed-off-by: Andrew Jeffery's avatarAndrew Jeffery <andrew@aj.id.au>
      f1e547c7
    • Andrew Jeffery's avatar
      flash: Introduce flash_validate() · cb93504e
      Andrew Jeffery authored
      Clean up the protocol_negotiate_version() mess. The existing approach
      came about due to viewing the vpnor implementation as an edge case in
      its own right. The code becomes much neater if we consider all backends
      as equal and afford them the callbacks necessary for correct behaviour.
      
      Change-Id: Ifaeee9da459818cf22b2f137ddc5b8d0356b9be9
      Signed-off-by: Andrew Jeffery's avatarAndrew Jeffery <andrew@aj.id.au>
      cb93504e
    • Andrew Jeffery's avatar
      protocol: Introduce protocol_reset() · f69760da
      Andrew Jeffery authored
      protocol_reset() encapsulates the actions necessary to return the LPC
      state to what's required to boot the host. This is backend dependent;
      for the mtd backend we can simply point the bridge at the host flash
      AHB mapping, and for the virtual pnor we want to rearrange the content
      of the LPC reserved memory (leaving the bridge pointed there). In either
      case the state of the FWH address space is distured, so inform the host
      as necessary.
      
      Change-Id: Ie8efd1f703a3616c33f76f4e735c1efea039146c
      Signed-off-by: Andrew Jeffery's avatarAndrew Jeffery <andrew@aj.id.au>
      f69760da
    • Andrew Jeffery's avatar
      vpnor: Test if HBB placement exceeds reserved memory bounds · 4e75a27a
      Andrew Jeffery authored
      If a host firmware image is provided where the placement of HBB exceeds
      the reserved memory size then an out-of-bounds write would occur.
      
      Change-Id: I0a98cb7417511cc8dd5bd2e12c9232ebc912dcd6
      Signed-off-by: Andrew Jeffery's avatarAndrew Jeffery <andrew@aj.id.au>
      4e75a27a
  2. 15 Mar, 2019 4 commits
  3. 14 Feb, 2019 1 commit
  4. 13 Feb, 2019 1 commit
  5. 08 Jan, 2019 4 commits
    • Andrew Jeffery's avatar
      transport: dbus: Remove ProtocolReset and WindowReset signals · 9ed627ca
      Andrew Jeffery authored
      These are replaced by the equivalent properties.
      
      Change-Id: Ie2acb98cc592c0ed1f2039f8aa570f1c7944b1e2
      Signed-off-by: Andrew Jeffery's avatarAndrew Jeffery <andrew@aj.id.au>
      9ed627ca
    • Andrew Jeffery's avatar
      vpnor: Enforce a read-only FFS ToC regardless of flags · 7a85d22a
      Andrew Jeffery authored
      The virtual PNOR implementation never properly honoured writes to the
      FFS ToC, as the ToC's binary representation is generated from the CSV
      file shipped in the PNOR squashfs image.
      
      What *did* happen was that opening a write window to the ToC region
      succeeded and writes could be flushed, but the flushed writes were never
      read, and ToC representation internal to mboxd was never updated to
      match the written state. Thus the written values "persisted" until the
      ToC's window fell out of the cache (with 64MiB reserved regions,
      probably on a host reboot).
      
      Short circuit the insanity of handling FFS more than we have to by
      forcefully marking the ToC as read-only, regardless of the flag
      configuration shipped in the CSV representation. This prevents the host
      from successfully opening a write window and thus the host can have no
      expectation of write persistence.
      
      Change-Id: Ib2788c56b245da506cb7d607c0758b17785766cf
      Signed-off-by: Andrew Jeffery's avatarAndrew Jeffery <andrew@aj.id.au>
      7a85d22a
    • Andrew Jeffery's avatar
      vpnor: test: Add force_readonly_toc · 8a0efd5e
      Andrew Jeffery authored
      This ensures that the ToC presented to the host indicates that it is not
      writable. The virtual PNOR implementation has never properly honoured
      writes to the ToC, so lets at least tell the host.
      
      As the code has not yet been fixed to implement the desired behaviour,
      add the test to XFAIL_TESTS.
      
      Change-Id: Ia13a0f907f916d6dec3979b17685d54bc578a106
      Signed-off-by: Andrew Jeffery's avatarAndrew Jeffery <andrew@aj.id.au>
      8a0efd5e
    • Andrew Jeffery's avatar
      vpnor: Add write-to-writable-ToC test · 89985754
      Andrew Jeffery authored
      Tests if mutations survive re-opening the window. They don't, so add the
      test to XFAIL_TESTS.
      
      Change-Id: Ic2f844c30a7da35033bf03012ea452718d2843e4
      Signed-off-by: Andrew Jeffery's avatarAndrew Jeffery <andrew@aj.id.au>
      89985754
  6. 17 Dec, 2018 1 commit
  7. 26 Nov, 2018 1 commit
    • Andrew Jeffery's avatar
      protocol: Rework publication of events over DBus transport · fd4fa34d
      Andrew Jeffery authored
      A set of races was discovered around the propagation of HIOMAP protocol
      BMC status events during BMC shutdown. In particular the change impacts
      the design of the DBus transport defined in the protocol specification,
      as signalling of both acknowledgeable and non-acknowledgeable events
      could not be made atomic.
      
      A particular case where this matters is when the daemon is terminated,
      at which point it should simultaneously clear BMC_EVENT_DAEMON_READY and
      set BMC_EVENT_PROTOCOL_RESET. The DBus interface as designed required
      this be done as two separate messages, which lead to races propagating
      the complete state update to the host during shutdown of ipmid.
      
      Change-Id: Iaf38f77c28b8e4e4dd092b0de97dc7e777bfac65
      Signed-off-by: Andrew Jeffery's avatarAndrew Jeffery <andrew@aj.id.au>
      fd4fa34d
  8. 08 Nov, 2018 1 commit
  9. 07 Nov, 2018 3 commits
    • Andrew Jeffery's avatar
      mboxd: Mark the protocol as reset on shutdown · fab672bd
      Andrew Jeffery authored
      This is necessary for the host firmware to properly recover from a
      daemon restart event, as it needs to re-perform the GET_INFO handshake
      and re-establish any window it had active prior to the daemon
      restarting.
      
      While we're here, rename the symbol to align with the documentation.
      
      Change-Id: I628d2ee5972177b7ad78392a86122d16104e7011
      Signed-off-by: Andrew Jeffery's avatarAndrew Jeffery <andrew@aj.id.au>
      fab672bd
    • Andrew Jeffery's avatar
      mboxd: Broadcast the daemon is ready on all transports · fe0c9e86
      Andrew Jeffery authored
      The code as it stood only sent the state update at startup on the active
      transport, which is somewhat arbitrarily chosen as an implementation
      detail of the mbox initialisation function.
      
      If the host firmware is using IPMI, it will not learn of the update
      unless it attempts to contact mboxd, which it won't do if it knows the
      daemon isn't there, which it may have learned of by receiving a state
      update from the daemon's shutdown path. In this circumstance the host
      firmware is now stuck.
      
      Relieve the host firmware of this problem by always sending the daemon
      state on all supported transports. To avoid some insanity we introduce a
      new callback in struct transport_ops that allows use to send the BMC's
      entire event state rather than just set or clear updates.
      
      Change-Id: I094ff4089eeebd8be99fbd343b94f7bbef023fb1
      Signed-off-by: Andrew Jeffery's avatarAndrew Jeffery <andrew@aj.id.au>
      fe0c9e86
    • Andrew Jeffery's avatar
      transport: Fix event handling · f62601b8
      Andrew Jeffery authored
      Events were not quite being handled as per the intent of the recent
      refactor: The protocol layer was meant to record the raw set of events
      and provide the protocol-version-specific mask to the transport layer,
      which the transport layer would then use to flush out the state in
      accordance with its implementation-specific requirements.
      
      What was going wrong was that the transport implementations were
      overwriting the raw set of events with the protocol-specific masked set
      of events, meaning that we'd lose the raw state and provide an
      incomplete BMC state value on protocol upgrade.
      
      Rework the event handling to make sure the responsibilities are properly
      split between the layers.
      
      Change-Id: Iace6615a121e4ce7dcca690d9adf62e5ab9ccee2
      Signed-off-by: Andrew Jeffery's avatarAndrew Jeffery <andrew@aj.id.au>
      f62601b8
  10. 01 Nov, 2018 1 commit
  11. 12 Oct, 2018 3 commits
  12. 14 Sep, 2018 14 commits