1. 10 Jun, 2016 9 commits
  2. 09 Jun, 2016 4 commits
  3. 08 Jun, 2016 5 commits
  4. 07 Jun, 2016 7 commits
    • Bryan O'Donoghue's avatar
      greybus: timesync: Add debugfs entry to display frame-ping in ktime · 423042f4
      Bryan O'Donoghue authored
      This patch makes a debugfs entry in
      /sys/kernel/debug/greybus/X-svc/frame-ktime that generates a TimeSync ping
      event to the system and then subsequently presents that data to user-space
      as a ktime/timespec clock-monotonic value rather than as a raw frame-time,
      to aid humans in debugging and understanding frame-time and to provide an
      example of the converting a frame-time to timespec/ktime to other
      developers.
      Signed-off-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
      Acked-by: default avatarAlex Elder <elder@linaro.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
      423042f4
    • Bryan O'Donoghue's avatar
      greybus: timesync: Add gb_timesync_frame_time_to_timespec() · 00fdbae1
      Bryan O'Donoghue authored
      This patch adds gb_timesync_to_timespec_by_svc() and
      gb_timesync_to_timespec_by_interface() respectively. These routines will
      convert from a given FrameTime to a ktime/timespec within an envelope of
      about 17 seconds. The purpose of this routine is to enable reporting of a
      FrameTime from a Module such as a Camera Module and to allow the AP to
      then convert this timestamp into a Linux-native timestamp such as ktime.
      This is useful and required in the v4l layer.
      
      At 19.2MHz the accuracy of this conversion is about .3 femtoseconds per
      count, which means at a 1 second offset from the reference the cumulative
      error is about 1.59 nanoseconds. 1.59 nanoseconds is still less than 1
      clock's worth of error @ 19.2MHz where each clock is 52.0833~ nanoseconds.
      
      We're aiming for a maximum error rate of 30 nanoseconds which means at the
      clock rate we are running at, the conversion from a FrameTime to a Linux
      ktime/timespec can be plus-or-minus about 17 seconds from the reference
      FrameTime/ktime pair before the routine will refuse to convert.
      
      A realistic use-case for this routine is envisaged to be
      
      - Greybus message received
      - Some processing takes place - taking milliseconds
      - Call into this routine is made
      - Actual time between event in Module and conversion in AP < 1 second
      - Error rate in conversion at 1.59 nanoseconds is less than 1 clock
        @ 19.2MHz
      
      This routine is not designed to allow for conversions for events with
      large gaps between the event time and the current reference time for
      conversion. Since FrameTime can be a very large integer we cannot convert
      an arbitrarily large FrameTime to ktime, the feeling and objective here is
      to make an over-provisioned envelope that in practical terms can never be
      exceeded by expected use-cases. To convert longer gaps more work would have
      to be done but ultimately some limit needs to be imposed and right now 0.3
      femotseconds per clock on MSM8994 is both accurate and generous.
      
      Adds:
      - timesync.c::gb_timesync_frame_time_to_timespec_by_svc(
      						 struct gb_svc *,
      						 u64 frame_time,
                                                       struct timespec *ts)
        - gb_svc is a pointer to a standard greybus SVC data structure
        - frame_time is a system FrameTime.
        - ts is an output parameter which represents the converted FrameTime
          as a CLOCK_MONOTONIC timespec value.
        - Returns 0 on success or a negative number indicating the type of
          error on failure.
      
      - timesync.c::gb_timesync_frame_time_to_timespec_by_interface(
      						 struct gb_interface *,
      						 u64 frame_time,
                                                       struct timespec *ts)
        - gb_svc is a pointer to a standard greybus Interface data structure
        - frame_time is a system FrameTime.
        - ts is an output parameter which represents the converted FrameTime
          as a CLOCK_MONOTONIC timespec value.
        - Returns 0 on success or a negative number indicating the type of
          error on failure.
      Signed-off-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
      Acked-by: default avatarAlex Elder <elder@linaro.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
      00fdbae1
    • Bryan O'Donoghue's avatar
      greybus: tracepoints: Add standard Linux tracepoint for TimeSync event · 6da7c889
      Bryan O'Donoghue authored
      This patch adds a tracepoint to the TimeSync ISR, the purpose of which is
      to indicate a TimeSync event has happened. This tracepoint can be enabled
      by issuing the following command:
      
      echo 1 > /sys/kernel/debug/tracing/events/greybus/gb_timesync_irq/enable
      
      Synchronization looks like this:
      
       TIMESTAMP  FUNCTION
          |         |
      147.865788: gb_timesync_irq: strobe 1/4 frame-time 2910076529
      147.866781: gb_timesync_irq: strobe 2/4 frame-time 2910095689
      147.867777: gb_timesync_irq: strobe 3/4 frame-time 2910114820
      147.868791: gb_timesync_irq: strobe 4/4 frame-time 2910134038
      
      A ping can be triggered like this:
      
      cat /sys/kernel/debug/greybus/frame-time
      
      And that ping looks like this:
      
       TIMESTAMP  FUNCTION
          |         |
      147.934678: gb_timesync_irq: ping 4/4 frame-time 2911380356
      169.280551: gb_timesync_irq: ping 4/4 frame-time 3321221069
      Signed-off-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
      Reviewed-by: default avatarVaibhav Hiremath <vaibhav.hiremath@linaro.org>
      Acked-by: default avatarAlex Elder <elder@linaro.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
      6da7c889
    • Bryan O'Donoghue's avatar
      greybus: timesync: Bind TimeSync into Greybus · 4a448427
      Bryan O'Donoghue authored
      TimeSync needs to bind into Greybus in a few places.
      
      - core.c
        To initialize its internal state and tear-down its internal state.
        To schedule a timesync to a newly added Bundle after probe() completes.
      
      - svc.c
        To get access to the SVC and enable/disable timesync as well as
        extracting the authoritative time from the SVC to subsequently
        disseminate to other entities in the system.
      
      - interface.c
        To get access to an Interface in order to inform APBx of timesync
        enable/disable and authoritative operations.
      
      This patch adds those bindings into Greybus core.
      Signed-off-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
      Reviewed-by: default avatarVaibhav Hiremath <vaibhav.hiremath@linaro.org>
      Acked-by: default avatarAlex Elder <elder@linaro.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
      4a448427
    • Bryan O'Donoghue's avatar
      greybus: timesync: Add timesync core driver · 970dc85b
      Bryan O'Donoghue authored
      This patch adds the core timesync functionality.
      
      0. arche-platform.c/arche-apb-ctrl.c
         Modifies the platform layer to hook the incoming TIME_SYNC signal up to
         the timesync strobe IRQ handler. If the arche-platform driver can't
         satisfy the request for the wake-detect line, it will return -EAGAIN and
         the calling work-queue must reschedule the attempt to get exclusive
         access to the wake-detect pin logic. A private data field is added to
         the arche-platform driver to enable passing of a timesync pointer to the
         ISR responsible for synchronizing time.
      
      1. timesync.c
         A new file added which contains all of the logic associated with sending
         greybus commands to SVC, APBx or Interfaces to enable, disable and
         disseminate timing information.
      
      2. timesync_platform.c
         Any platform/arch specific code goes into timesync_platform.c.
         Originally the idea was to keep the x86 and ARM arch dependencies in a
         timesync_platform_arch.c file - however with further refinement that's
         currently not necessary however just-in-case it becomes necessary to
         resuscitate arch or platform specific methods for accessing timer
         resources that access shouldn't be part of the core timesync.c logic and
         so for the moment we access these timer resources through a thin access
         layer in timesync_platform.c. Expect this to go away long term ideally.
      Signed-off-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
      Acked-by: default avatarAlex Elder <elder@linaro.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
      970dc85b
    • Vaibhav Agarwal's avatar
      greybus: audio: Report DISCONNECT event after resource cleanup. · 698282f6
      Vaibhav Agarwal authored
      Reporting DISCONNECT event immediately on module removal causes
      race condition while re-populating mixer controls by above HAL. The
      original intent was to avoid any (invalid) mixer control modification
      request from above layer.
      
      Ideally, it should report 'MODULE_NOT_READY' on module plug-out and
      DISCONNECT after resource cleanup. This would involve changes in GB
      Audio manager and HAL layer.
      
      Since we already have a plan to remove GB Audio manager, I'm making this
      change in GB codec driver to avoid any race condition. Also, codec
      driver already ensures mixer control modifcations for disconnected
      modules are not triggered to AP Bridge audio FW & reported invalid.
      Signed-off-by: default avatarVaibhav Agarwal <vaibhav.agarwal@linaro.org>
      Reviewed-by: default avatarMark Greer <mgreer@animalcreek.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
      698282f6
    • Vaibhav Agarwal's avatar
      greybus: audio: Report warning in case module is already removed · 02f1c12c
      Vaibhav Agarwal authored
      Added warning message in find_gb_module(). This will help to identify
      invalid mixer control/widget modification triggered from above layer.
      Signed-off-by: default avatarVaibhav Agarwal <vaibhav.agarwal@linaro.org>
      Reviewed-by: default avatarMark Greer <mgreer@animalcreek.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
      02f1c12c
  5. 04 Jun, 2016 11 commits
  6. 03 Jun, 2016 3 commits
  7. 02 Jun, 2016 1 commit