1. 26 Feb, 2019 2 commits
  2. 23 Feb, 2019 4 commits
  3. 22 Feb, 2019 1 commit
  4. 21 Feb, 2019 9 commits
  5. 20 Feb, 2019 1 commit
  6. 19 Feb, 2019 6 commits
  7. 18 Feb, 2019 15 commits
    • Oded Gabbay's avatar
      Update MAINTAINERS and CREDITS with habanalabs info · eadf2499
      Oded Gabbay authored
      The habanalabs driver was written from scratch from the very first days
      of Habana and is maintained by Oded Gabbay.
      Signed-off-by: default avatarOded Gabbay <oded.gabbay@gmail.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      eadf2499
    • Oded Gabbay's avatar
      habanalabs: add debugfs support · c2164773
      Oded Gabbay authored
      This patch adds debugfs support to the driver. It allows the user-space to
      display information that is contained in the internal structures of the
      driver, such as:
      - active command submissions
      - active user virtual memory mappings
      - number of allocated command buffers
      
      It also enables the user to perform reads and writes through Goya's PCI
      bars.
      Reviewed-by: default avatarMike Rapoport <rppt@linux.ibm.com>
      Signed-off-by: default avatarOded Gabbay <oded.gabbay@gmail.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      c2164773
    • Oded Gabbay's avatar
      habanalabs: implement INFO IOCTL · d8dd7b0a
      Oded Gabbay authored
      This patch implements the INFO IOCTL. That IOCTL is used by the user to
      query information that is relevant/needed by the user in order to submit
      deep learning jobs to Goya.
      
      The information is divided into several categories, such as H/W IP, Events
      that happened, DDR usage and more.
      Reviewed-by: default avatarMike Rapoport <rppt@linux.ibm.com>
      Signed-off-by: default avatarOded Gabbay <oded.gabbay@gmail.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      d8dd7b0a
    • Omer Shpigelman's avatar
      habanalabs: add virtual memory and MMU modules · 0feaf86d
      Omer Shpigelman authored
      This patch adds the Virtual Memory and MMU modules.
      
      Goya has an internal MMU which provides process isolation on the internal
      DDR. The internal MMU also performs translations for transactions that go
      from Goya to the Host.
      
      The driver is responsible for allocating and freeing memory on the DDR
      upon user request. It also provides an interface to map and unmap DDR and
      Host memory to the device address space.
      
      The MMU in Goya supports 3-level and 4-level page tables. With 3-level, the
      size of each page is 2MB, while with 4-level the size of each page is 4KB.
      
      In the DDR, the physical pages are always 2MB.
      Reviewed-by: default avatarMike Rapoport <rppt@linux.ibm.com>
      Signed-off-by: default avatarOmer Shpigelman <oshpigelman@habana.ai>
      Signed-off-by: default avatarOded Gabbay <oded.gabbay@gmail.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      0feaf86d
    • Oded Gabbay's avatar
      habanalabs: add command submission module · eff6f4a0
      Oded Gabbay authored
      This patch adds the main flow for the user to submit work to the device.
      
      Each work is described by a command submission object (CS). The CS contains
      3 arrays of command buffers: One for execution, and two for context-switch
      (store and restore).
      
      For each CB, the user specifies on which queue to put that CB. In case of
      an internal queue, the entry doesn't contain a pointer to the CB but the
      address in the on-chip memory that the CB resides at.
      
      The driver parses some of the CBs to enforce security restrictions.
      
      The user receives a sequence number that represents the CS object. The user
      can then query the driver regarding the status of the CS, using that
      sequence number.
      
      In case the CS doesn't finish before the timeout expires, the driver will
      perform a soft-reset of the device.
      Reviewed-by: default avatarMike Rapoport <rppt@linux.ibm.com>
      Signed-off-by: default avatarOded Gabbay <oded.gabbay@gmail.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      eff6f4a0
    • Oded Gabbay's avatar
      habanalabs: add device reset support · f8c8c7d5
      Oded Gabbay authored
      This patch adds support for doing various on-the-fly reset of Goya.
      
      The driver supports two types of resets:
      1. soft-reset
      2. hard-reset
      
      Soft-reset is done when the device detects a timeout of a command
      submission that was given to the device. The soft-reset process only resets
      the engines that are relevant for the submission of compute jobs, i.e. the
      DMA channels, the TPCs and the MME. The purpose is to bring the device as
      fast as possible to a working state.
      
      Hard-reset is done in several cases:
      1. After soft-reset is done but the device is not responding
      2. When fatal errors occur inside the device, e.g. ECC error
      3. When the driver is removed
      
      Hard-reset performs a reset of the entire chip except for the PCI
      controller and the PLLs. It is a much longer process then soft-reset but it
      helps to recover the device without the need to reboot the Host.
      
      After hard-reset, the driver will restore the max power attribute and in
      case of manual power management, the frequencies that were set.
      
      This patch also adds two entries to the sysfs, which allows the root user
      to initiate a soft or hard reset.
      Reviewed-by: default avatarMike Rapoport <rppt@linux.ibm.com>
      Signed-off-by: default avatarOded Gabbay <oded.gabbay@gmail.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      f8c8c7d5
    • Oded Gabbay's avatar
      habanalabs: add sysfs and hwmon support · d91389bc
      Oded Gabbay authored
      This patch add the sysfs and hwmon entries that are exposed by the driver.
      
      Goya has several sensors, from various categories such as temperature,
      voltage, current, etc. The driver exposes those sensors in the standard
      hwmon mechanism.
      
      In addition, the driver exposes a couple of interfaces in sysfs, both for
      configuration and for providing status of the device or driver.
      
      The configuration attributes is for Power Management:
      - Automatic or manual
      - Frequency value when moving to high frequency mode
      - Maximum power the device is allowed to consume
      
      The rest of the attributes are read-only and provide the following
      information:
      - Versions of the various firmwares running on the device
      - Contents of the device's EEPROM
      - The device type (currently only Goya is supported)
      - PCI address of the device (to allow user-space to connect between
        /dev/hlX to PCI address)
      - Status of the device (operational, malfunction, in_reset)
      - How many processes are open on the device's file
      Reviewed-by: default avatarMike Rapoport <rppt@linux.ibm.com>
      Signed-off-by: default avatarOded Gabbay <oded.gabbay@gmail.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      d91389bc
    • Oded Gabbay's avatar
      habanalabs: add event queue and interrupts · 1251f23a
      Oded Gabbay authored
      This patch adds support for receiving events from Goya's control CPU and
      for receiving MSI-X interrupts from Goya's DMA engines and CPU.
      
      Goya's PCI controller supports up to 8 MSI-X interrupts, which only 6 of
      them are currently used. The first 5 interrupts are dedicated for Goya's
      DMA engine queues. The 6th interrupt is dedicated for Goya's control CPU.
      
      The DMA queue will signal its MSI-X entry upon each completion of a command
      buffer that was placed on its primary queue. The driver will then mark that
      CB as completed and free the related resources. It will also update the
      command submission object which that CB belongs to.
      
      There is a dedicated event queue (EQ) between the driver and Goya's control
      CPU. The EQ is located on the Host memory. The control CPU writes a new
      entry to the EQ for various reasons, such as ECC error, MMU page fault, Hot
      temperature. After writing the new entry to the EQ, the control CPU will
      trigger its dedicated MSI-X entry to signal the driver that there is a new
      entry in the EQ. The driver will then read the entry and act accordingly.
      Reviewed-by: default avatarMike Rapoport <rppt@linux.ibm.com>
      Signed-off-by: default avatarOded Gabbay <oded.gabbay@gmail.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      1251f23a
    • Oded Gabbay's avatar
      habanalabs: add h/w queues module · 9494a8dd
      Oded Gabbay authored
      This patch adds the H/W queues module and the code to initialize Goya's
      various compute and DMA engines and their queues.
      
      Goya has 5 DMA channels, 8 TPC engines and a single MME engine. For each
      channel/engine, there is a H/W queue logic which is used to pass commands
      from the user to the H/W. That logic is called QMAN.
      
      There are two types of QMANs: external and internal. The DMA QMANs are
      considered external while the TPC and MME QMANs are considered internal.
      For each external queue there is a completion queue, which is located on
      the Host memory.
      
      The differences between external and internal QMANs are:
      
      1. The location of the queue's memory. External QMANs are located on the
         Host memory while internal QMANs are located on the on-chip memory.
      
      2. The external QMAN write an entry to a completion queue and sends an
         MSI-X interrupt upon completion of a command buffer that was given to
         it. The internal QMAN doesn't do that.
      Reviewed-by: default avatarMike Rapoport <rppt@linux.ibm.com>
      Signed-off-by: default avatarOded Gabbay <oded.gabbay@gmail.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      9494a8dd
    • Oded Gabbay's avatar
      habanalabs: add basic Goya h/w initialization · 839c4803
      Oded Gabbay authored
      This patch adds the basic part of Goya's H/W initialization. It adds code
      that initializes Goya's internal CPU, various registers that are related to
      internal routing, scrambling, workarounds for H/W bugs, etc.
      
      It also initializes Goya's security scheme that prevents the user from
      abusing Goya to steal data from the host, crash the host, change
      Goya's F/W, etc.
      Reviewed-by: default avatarMike Rapoport <rppt@linux.ibm.com>
      Signed-off-by: default avatarOded Gabbay <oded.gabbay@gmail.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      839c4803
    • Oded Gabbay's avatar
      habanalabs: add command buffer module · be5d926b
      Oded Gabbay authored
      This patch adds the command buffer (CB) module, which allows the user to
      create and destroy CBs and to map them to the user's process
      address-space.
      
      A command buffer is a memory blocks that reside in DMA-able address-space
      and is physically contiguous so it can be accessed by the device without
      MMU translation. The command buffer memory is allocated using the
      coherent DMA API.
      
      When creating a new CB, the IOCTL returns a handle of it, and the
      user-space process needs to use that handle to mmap the buffer to get a VA
      in the user's address-space.
      
      Before destroying (freeing) a CB, the user must unmap the CB's VA using the
      CB handle.
      
      Each CB has a reference counter, which tracks its usage in command
      submissions and also its mmaps (only a single mmap is allowed).
      
      The driver maintains a pool of pre-allocated CBs in order to reduce
      latency during command submissions. In case the pool is empty, the driver
      will go to the slow-path of allocating a new CB, i.e. calling
      dma_alloc_coherent.
      Reviewed-by: default avatarMike Rapoport <rppt@linux.ibm.com>
      Signed-off-by: default avatarOded Gabbay <oded.gabbay@gmail.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      be5d926b
    • Oded Gabbay's avatar
      habanalabs: add context and ASID modules · 0861e41d
      Oded Gabbay authored
      This patch adds two modules - ASID and context.
      
      Each user process that opens a device's file must have at least one
      context before it is able to "work" with the device. Each context has its
      own device address-space and contains information about its runtime state
      (its active command submissions).
      
      To have address-space separation between contexts, each context is assigned
      a unique ASID, which stands for "address-space id". Goya supports up to
      1024 ASIDs.
      
      Currently, the driver doesn't support multiple contexts. Therefore, the
      user doesn't need to actively create a context. A "primary context" is
      created automatically when the user opens the device's file.
      Reviewed-by: default avatarMike Rapoport <rppt@linux.ibm.com>
      Signed-off-by: default avatarOded Gabbay <oded.gabbay@gmail.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      0861e41d
    • Oded Gabbay's avatar
      habanalabs: add basic Goya support · 99b9d7b4
      Oded Gabbay authored
      This patch adds a basic support for the Goya device. The code initializes
      the device's PCI controller and PCI bars. It also initializes various S/W
      structures and adds some basic helper functions.
      Reviewed-by: default avatarMike Rapoport <rppt@linux.ibm.com>
      Signed-off-by: default avatarOded Gabbay <oded.gabbay@gmail.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      99b9d7b4
    • Oded Gabbay's avatar
      habanalabs: add Goya registers header files · 1ea2a20e
      Oded Gabbay authored
      This patch just adds a lot of header files that contain description of
      Goya's registers.
      Signed-off-by: default avatarOded Gabbay <oded.gabbay@gmail.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      1ea2a20e
    • Oded Gabbay's avatar
      habanalabs: add skeleton driver · c4d66343
      Oded Gabbay authored
      This patch adds the habanalabs skeleton driver. The driver does nothing at
      this stage except very basic operations. It contains the minimal code to
      insmod and rmmod the driver and to create a /dev/hlX file per PCI device.
      Reviewed-by: default avatarMike Rapoport <rppt@linux.ibm.com>
      Signed-off-by: default avatarOded Gabbay <oded.gabbay@gmail.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      c4d66343
  8. 15 Feb, 2019 2 commits
    • Loys Ollivier's avatar
      gnss: add driver for mediatek receivers · d4584bbf
      Loys Ollivier authored
      Add driver for serial-connected Mediatek-based GNSS receivers.
      
      These devices typically boot transmitting vendor specific NMEA output
      sequences. The serial port bit rate is read from the device tree
      "current-speed".
      
      Note that the driver uses the generic GNSS serial implementation and
      therefore essentially only manages power abstracted into three power
      states: ACTIVE, STANDBY, and OFF.
      
      For mediatek receivers with a main supply and no enable-gpios, this simply
      means that the main supply is disabled in STANDBY and OFF (the optional
      backup supply is kept enabled while the driver is bound).
      
      Note that the timepulse-support is left unimplemented.
      Signed-off-by: default avatarLoys Ollivier <lollivier@baylibre.com>
      [ johan: rename backup supply ]
      Signed-off-by: default avatarJohan Hovold <johan@kernel.org>
      d4584bbf
    • Loys Ollivier's avatar
      gnss: add mtk receiver type support · 625239d4
      Loys Ollivier authored
      Add an MTK (Mediatek) type to the "GNSS_TYPE" attribute.
      
      Note that MTK receivers support a subset of NMEA 0183 with vendor
      extensions.
      Signed-off-by: default avatarLoys Ollivier <lollivier@baylibre.com>
      Signed-off-by: default avatarJohan Hovold <johan@kernel.org>
      625239d4