LKML Archive mirror
 help / color / mirror / Atom feed
From: Sinan Kaya <okaya@codeaurora.org>
To: dmaengine@vger.kernel.org, marc.zyngier@arm.com,
	mark.rutland@arm.com, timur@codeaurora.org,
	devicetree@vger.kernel.org, cov@codeaurora.org,
	vinod.koul@intel.com, jcm@redhat.com
Cc: shankerd@codeaurora.org, vikrams@codeaurora.org,
	eric.auger@linaro.org, agross@codeaurora.org, arnd@arndb.de,
	linux-arm-msm@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	Sinan Kaya <okaya@codeaurora.org>,
	linux-kernel@vger.kernel.org
Subject: [PATCH V14 0/9] dma: add Qualcomm Technologies HIDMA driver
Date: Thu,  4 Feb 2016 23:34:31 -0500	[thread overview]
Message-ID: <1454646882-24369-1-git-send-email-okaya@codeaurora.org> (raw)

The Qualcomm Technologies HIDMA device has been designed
to support virtualization technology. The driver has been
divided into two to follow the hardware design.

1. HIDMA Management driver
2. HIDMA Channel driver

Each HIDMA HW consists of multiple channels. These channels
share some set of common parameters. These parameters are
initialized by the management driver during power up.
Same management driver is used for monitoring the execution
of the channels. Management driver can change the performance
behavior dynamically such as bandwidth allocation and
prioritization in the future.

The management driver is executed in host context and
is the main management entity for all channels provided by
the device.

------------------------
What's new
------------------------
- Add back default number of descriptors.
- Fix compilation error in VFIO ACPI support.
- Merge the event-channel patch back to DTS and channel driver.

------------------------
Git repos
------------------------
QEMU Support
https://www.codeaurora.org/cgit/quic/qemu/qemu/log/?h=v2.5.0-sriov

------------------------
History of Changes
------------------------
dma: hidma: Add Device Tree Binding
Changes from V13: (https://lkml.org/lkml/2016/1/29/672)
* merged event-channel change.

dma: add Qualcomm Technologies HIDMA channel driver
Changes from V13: (https://lkml.org/lkml/2016/1/29/685)
* add back default descriptor count
* merged event-channel change.

dma: qcom_hidma: add support for object hierarchy
Changes from V13: (https://lkml.org/lkml/2016/1/29/680)
* initialize platform info data structure.
* configure DMA by calling of_dma_configure. DMA mask was not set when
* IOMMU driver is not present for the children devices.

vfio, platform: add support for ACPI while detecting the reset driver
Changes from V13: (https://lkml.org/lkml/2016/1/29/679)
* add forgotten pointer during merge
* clarify the driver loading rules in commit message

------------------------
FAQ
------------------------
- This doesn't seem to tie into KVM or VFIO, and as far as I can tell
  there's no mechanism for associating channels with a particular virtual
  address space (i.e. no configuration of an external or internal IOMMU),
  nor pinning of guest pages to allow for DMA to occur safely.

   I'm using VFIO platform driver for this purpose. VFIO platform driver is
   capable of assigning any platform device to a guest machine with this
   driver.

- Are there additional patches, or do you have some userspace that works
  with this in some limited configuration?

   No, these are the only patches. We have one patch for the QEMU but from
   kernel perspective this is it. I just rely on the platform VFIO driver
   to do the work.

- How do host and guest communicate, what is the infrastructure, how is
  HIDMA meant to be used?

   They don't. Guest machine uses HIDMA channel driver to offload DMA
   operations in isolation. The guest machine owns the HW registers for the
   channel. It doesn't need to trap to host for register read/writes etc.

   All guest machine pages used are assumed to be pinned similar to VFIO
   PCI. The reason is performance. The IOMMU takes care of the address
   translation for me.

- How do host and guest communicate?
   They don't.

- How is the integration performed in the hypervisor?

   Hypervisor has a bunch of channel resources. For each guest machine, the
   channel gets unbound from the hypervisor. Channels get bind to each VFIO
   platform device and then control is given to the guest machine.

   Once the guest machine is shutdown, VFIO driver still owns the channel
   device. It can assign the device to another guest machine.

- Does the HYP side requires any context switch (and how is that done)?

   No communication is needed.

- What makes it safe?
   No communication is needed.

- Does the HYP side requires any context switch (and how is that done)?

   I don't believe this requires any context-switch -- it's the same as
   assigning any other platform device other than additional proeprties
   being controlled in the managament interface.

- I'm concerned with how this is safe, and with the userspace interface.
  e.g. if the user wants to up the QoS for a VM, how to they find the
  right channel in sysfs  to alter?

   The HW supports changing the QoS values on the flight. In order to
   locate the object, I'm exporting a chid attribute in sysfs.

   Each management object has one priority and weight file per channel that
   is indexed by the channel id read from the DMA object.
   /sys/devices/platform/hidma-mgmt*/chanops/chan*/priority
   /sys/devices/platform/QCOM8060:*/chanops/chan*/priority

- So what is that hypervisor code used for? Is that your reset driver?

   The HIDMA "management" driver which runs at the hypervisor owns the
   management HW. Management driver serves two purposes.

   1. Common bus parameter configuration (could be called reset driver).
   2. Fine tuning the HW resources on the flight.

Sinan Kaya (9):
  dma: qcom_bam_dma: move to qcom directory
  dma: hidma: Add Device Tree binding
  dma: add Qualcomm Technologies HIDMA management driver
  dma: add Qualcomm Technologies HIDMA channel driver
  dma: qcom_hidma: implement lower level hardware interface
  dma: qcom_hidma: add debugfs hooks
  dma: qcom_hidma: add support for object hierarchy
  vfio, platform: add support for ACPI while detecting the reset driver
  vfio, platform: add QTI HIDMA reset driver

 Documentation/ABI/testing/sysfs-platform-hidma     |   9 +
 .../ABI/testing/sysfs-platform-hidma-mgmt          |  97 +++
 .../devicetree/bindings/dma/qcom_hidma_mgmt.txt    |  89 ++
 drivers/dma/Kconfig                                |  11 +-
 drivers/dma/Makefile                               |   2 +-
 drivers/dma/qcom/Kconfig                           |  29 +
 drivers/dma/qcom/Makefile                          |   5 +
 drivers/dma/{qcom_bam_dma.c => qcom/bam_dma.c}     |   4 +-
 drivers/dma/qcom/hidma.c                           | 746 +++++++++++++++++
 drivers/dma/qcom/hidma.h                           | 162 ++++
 drivers/dma/qcom/hidma_dbg.c                       | 219 +++++
 drivers/dma/qcom/hidma_ll.c                        | 927 +++++++++++++++++++++
 drivers/dma/qcom/hidma_mgmt.c                      | 407 +++++++++
 drivers/dma/qcom/hidma_mgmt.h                      |  39 +
 drivers/dma/qcom/hidma_mgmt_sys.c                  | 295 +++++++
 drivers/vfio/platform/reset/Kconfig                |   9 +
 drivers/vfio/platform/reset/Makefile               |   2 +
 .../vfio/platform/reset/vfio_platform_amdxgbe.c    |   3 +-
 .../platform/reset/vfio_platform_calxedaxgmac.c    |   3 +-
 .../vfio/platform/reset/vfio_platform_qcomhidma.c  |  99 +++
 drivers/vfio/platform/vfio_platform_common.c       |  80 +-
 drivers/vfio/platform/vfio_platform_private.h      |  41 +-
 22 files changed, 3235 insertions(+), 43 deletions(-)
 create mode 100644 Documentation/ABI/testing/sysfs-platform-hidma
 create mode 100644 Documentation/ABI/testing/sysfs-platform-hidma-mgmt
 create mode 100644 Documentation/devicetree/bindings/dma/qcom_hidma_mgmt.txt
 create mode 100644 drivers/dma/qcom/Kconfig
 create mode 100644 drivers/dma/qcom/Makefile
 rename drivers/dma/{qcom_bam_dma.c => qcom/bam_dma.c} (99%)
 create mode 100644 drivers/dma/qcom/hidma.c
 create mode 100644 drivers/dma/qcom/hidma.h
 create mode 100644 drivers/dma/qcom/hidma_dbg.c
 create mode 100644 drivers/dma/qcom/hidma_ll.c
 create mode 100644 drivers/dma/qcom/hidma_mgmt.c
 create mode 100644 drivers/dma/qcom/hidma_mgmt.h
 create mode 100644 drivers/dma/qcom/hidma_mgmt_sys.c
 create mode 100644 drivers/vfio/platform/reset/vfio_platform_qcomhidma.c

-- 
1.8.2.1

             reply	other threads:[~2016-02-05  4:35 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-05  4:34 Sinan Kaya [this message]
2016-02-05  4:34 ` [PATCH V14 1/9] dma: qcom_bam_dma: move to qcom directory Sinan Kaya
2016-03-11  2:13   ` Vinod Koul
2016-02-05  4:34 ` [PATCH V14 2/9] dma: hidma: Add Device Tree binding Sinan Kaya
2016-03-11  2:16   ` Vinod Koul
2016-02-05  4:34 ` [PATCH V14 3/9] dma: add Qualcomm Technologies HIDMA management driver Sinan Kaya
2016-03-11  2:16   ` Vinod Koul
2016-02-05  4:34 ` [PATCH V14 4/9] dma: add Qualcomm Technologies HIDMA channel driver Sinan Kaya
2016-03-11  2:17   ` Vinod Koul
2016-02-05  4:34 ` [PATCH V14 5/9] dma: qcom_hidma: implement lower level hardware interface Sinan Kaya
2016-03-11  2:06   ` Vinod Koul
2016-03-11  3:08     ` Okaya
2016-03-11 16:02     ` Sinan Kaya
2016-03-11 16:32       ` Vinod Koul
2016-03-11 16:44         ` Sinan Kaya
2016-03-11 19:29           ` Sinan Kaya
2016-03-11 21:59             ` Sinan Kaya
2016-03-13 16:00               ` Vinod Koul
2016-03-14 13:53                 ` Sinan Kaya
2016-03-13 15:59             ` Vinod Koul
2016-03-14 13:56               ` Sinan Kaya
2016-02-05  4:34 ` [PATCH V14 6/9] dma: qcom_hidma: add debugfs hooks Sinan Kaya
2016-02-05  4:34 ` [PATCH V14 7/9] dma: qcom_hidma: add support for object hierarchy Sinan Kaya
2016-02-05  4:34 ` [PATCH V14 8/9] vfio, platform: add support for ACPI while detecting the reset driver Sinan Kaya
2016-02-26 16:24   ` Sinan Kaya
2016-02-26 17:15   ` Eric Auger
2016-02-26 19:21     ` Sinan Kaya
2016-03-02 18:34     ` Sinan Kaya
2016-03-03 23:14       ` Eric Auger
2016-03-04  5:20         ` Sinan Kaya
2016-03-07  4:09           ` Eric Auger
2016-03-07 15:30             ` Sinan Kaya
2016-03-08  4:46               ` Eric Auger
2016-03-08  5:07                 ` Sinan Kaya
2016-03-08 15:44                   ` Sinan Kaya
2016-02-05  4:34 ` [PATCH V14 9/9] vfio, platform: add QTI HIDMA " Sinan Kaya
2016-02-26 17:52   ` Eric Auger
2016-02-26 19:05     ` Sinan Kaya
2016-02-08 10:14 ` [PATCH V14 0/9] dma: add Qualcomm Technologies HIDMA driver Christoffer Dall
2016-02-08 14:24   ` Sinan Kaya
2016-02-08 17:00     ` Christoffer Dall
2016-02-26 16:21 ` Sinan Kaya
2016-02-26 16:52   ` Timur Tabi
2016-03-02 18:40     ` Sinan Kaya
2016-03-03  3:44       ` Vinod Koul
2016-03-03 15:22         ` Sinan Kaya

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1454646882-24369-1-git-send-email-okaya@codeaurora.org \
    --to=okaya@codeaurora.org \
    --cc=agross@codeaurora.org \
    --cc=arnd@arndb.de \
    --cc=cov@codeaurora.org \
    --cc=devicetree@vger.kernel.org \
    --cc=dmaengine@vger.kernel.org \
    --cc=eric.auger@linaro.org \
    --cc=jcm@redhat.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=marc.zyngier@arm.com \
    --cc=mark.rutland@arm.com \
    --cc=shankerd@codeaurora.org \
    --cc=timur@codeaurora.org \
    --cc=vikrams@codeaurora.org \
    --cc=vinod.koul@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).