1. 03 6月, 2015 7 次提交
  2. 06 2月, 2015 2 次提交
    • I
      cxl: Fail AFU initialisation if an invalid configuration record is found · 3d5be039
      Ian Munsie 提交于
      If an AFU claims to have a configuration record but doesn't actually
      contain a vendor and device ID, fail the AFU initialisation. Right now
      this is just a way of politely letting AFU developers know that they
      need to fix their config space, but later on we may expose the AFUs as
      actual PCI devices in their own right and don't want to inadvertendly
      expose an AFU with a bad config space.
      Signed-off-by: NIan Munsie <imunsie@au1.ibm.com>
      Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
      3d5be039
    • I
      cxl: Export optional AFU configuration record in sysfs · b087e619
      Ian Munsie 提交于
      An AFU may optionally contain one or more PCIe like configuration
      records, which can be used to identify the AFU.
      
      This patch adds support for exposing the raw config space and the
      vendor, device and class code under sysfs. These will appear in a
      subdirectory of the AFU device corresponding with the configuration
      record number, e.g.
      
      cat /sys/class/cxl/afu0.0/cr0/vendor
      0x1014
      
      cat /sys/class/cxl/afu0.0/cr0/device
      0x4350
      
      cat /sys/class/cxl/afu0.0/cr0/class
      0x120000
      
      hexdump -C /sys/class/cxl/afu0.0/cr0/config
      00000000  14 10 50 43 00 00 00 00  06 00 00 12 00 00 00 00  |..PC............|
      00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
      *
      00000100
      
      These files behave in much the same way as the equivalent files for PCI
      devices, with one exception being that the config file is currently
      read-only and restricted to the root user. It is not necessarily
      required to be this strict, but we currently do not have a compelling
      use-case to make it writable and/or world-readable, so I erred on the
      side of being restrictive.
      Signed-off-by: NIan Munsie <imunsie@au1.ibm.com>
      Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
      b087e619
  3. 02 2月, 2015 1 次提交
    • R
      cxl: Fix device_node reference counting · 6f963ec2
      Ryan Grimm 提交于
      When unbinding and rebinding the driver on a system with a card in PHB0, this
      error condition is reached after a few attempts:
      
      ERROR: Bad of_node_put() on /pciex@3fffe40000000
      CPU: 0 PID: 3040 Comm: bash Not tainted 3.18.0-rc3-12545-g3627ffe #152
      Call Trace:
      [c000000721acb5c0] [c00000000086ef94] .dump_stack+0x84/0xb0 (unreliable)
      [c000000721acb640] [c00000000073a0a8] .of_node_release+0xd8/0xe0
      [c000000721acb6d0] [c00000000044bc44] .kobject_release+0x74/0xe0
      [c000000721acb760] [c0000000007394fc] .of_node_put+0x1c/0x30
      [c000000721acb7d0] [c000000000545cd8] .cxl_probe+0x1a98/0x1d50
      [c000000721acb900] [c0000000004845a0] .local_pci_probe+0x40/0xc0
      [c000000721acb980] [c000000000484998] .pci_device_probe+0x128/0x170
      [c000000721acba30] [c00000000052400c] .driver_probe_device+0xac/0x2a0
      [c000000721acbad0] [c000000000522468] .bind_store+0x108/0x160
      [c000000721acbb70] [c000000000521448] .drv_attr_store+0x38/0x60
      [c000000721acbbe0] [c000000000293840] .sysfs_kf_write+0x60/0xa0
      [c000000721acbc50] [c000000000292500] .kernfs_fop_write+0x140/0x1d0
      [c000000721acbcf0] [c000000000208648] .vfs_write+0xd8/0x260
      [c000000721acbd90] [c000000000208b18] .SyS_write+0x58/0x100
      [c000000721acbe30] [c000000000009258] syscall_exit+0x0/0x98
      
      We are missing a call to of_node_get(). pnv_pci_to_phb_node() should
      call of_node_get() otherwise np's reference count isn't incremented and
      it might go away. Rename pnv_pci_to_phb_node() to pnv_pci_get_phb_node()
      so it's clear it calls of_node_get().
      Signed-off-by: NRyan Grimm <grimm@linux.vnet.ibm.com>
      Acked-by: NIan Munsie <imunsie@au1.ibm.com>
      Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
      6f963ec2
  4. 22 1月, 2015 3 次提交
  5. 29 12月, 2014 1 次提交
    • I
      cxl: Disable AFU debug flag · d6a6af2c
      Ian Munsie 提交于
      Upon inspection of the implementation specific registers, it was
      discovered that the high bit of the implementation specific RXCTL
      register was enabled, which enables the DEADB00F debug feature.
      
      The debug feature causes MMIO reads to a disabled AFU to respond with
      0xDEADB00F instead of all Fs. In general this should not be visible as
      the kernel will only allow MMIO access to enabled AFUs, but there may be
      some circumstances where an AFU may become disabled while it is use.
      One such case would be an AFU designed to only be used in the dedicated
      process mode and to disable itself after it has completed it's work
      (however even in that case the effects of this debug flag would be
      limited as the userspace application must have completed any required
      MMIO accesses before the AFU disables itself with or without the flag).
      
      This patch removes the debug flag and replaces the magic value
      programmed into this register with a preprocessor define so it is
      clearer what the rest of this initialisation does.
      Signed-off-by: NIan Munsie <imunsie@au1.ibm.com>
      Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
      d6a6af2c
  6. 12 12月, 2014 1 次提交
    • I
      cxl: Change contexts_lock to a mutex to fix sleep while atomic bug · ee41d11d
      Ian Munsie 提交于
      We had a known sleep while atomic bug if a CXL device was forcefully
      unbound while it was in use. This could occur as a result of EEH, or
      manually induced with something like this while the device was in use:
      
      echo 0000:01:00.0 > /sys/bus/pci/drivers/cxl-pci/unbind
      
      The issue was that in this code path we iterated over each context and
      forcefully detached it with the contexts_lock spin lock held, however
      the detach also needed to take the spu_mutex, and call schedule.
      
      This patch changes the contexts_lock to a mutex so that we are not in
      atomic context while doing the detach, thereby avoiding the sleep while
      atomic.
      
      Also delete the related TODO comment, which suggested an alternate
      solution which turned out to not be workable.
      
      Cc: stable@vger.kernel.org
      Signed-off-by: NIan Munsie <imunsie@au1.ibm.com>
      Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
      ee41d11d
  7. 08 10月, 2014 1 次提交
    • I
      cxl: Driver code for powernv PCIe based cards for userspace access · f204e0b8
      Ian Munsie 提交于
      This is the core of the cxl driver.
      
      It adds support for using cxl cards in the powernv environment only (ie POWER8
      bare metal). It allows access to cxl accelerators by userspace using the
      /dev/cxl/afuM.N char devices.
      
      The kernel driver has no knowledge of the function implemented by the
      accelerator. It provides services to userspace via the /dev/cxl/afuM.N
      devices. When a program opens this device and runs the start work IOCTL, the
      accelerator will have coherent access to that processes memory using the same
      virtual addresses. That process may mmap the device to access any MMIO space
      the accelerator provides.  Also, reads on the device will allow interrupts to
      be received. These services are further documented in a later patch in
      Documentation/powerpc/cxl.txt.
      
      Documentation of the cxl hardware architecture and userspace API is provided in
      subsequent patches.
      Signed-off-by: NIan Munsie <imunsie@au1.ibm.com>
      Signed-off-by: NMichael Neuling <mikey@neuling.org>
      Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
      f204e0b8