Received: by 2002:a25:6193:0:0:0:0:0 with SMTP id v141csp2897296ybb; Fri, 27 Mar 2020 14:13:33 -0700 (PDT) X-Google-Smtp-Source: ADFU+vvUUvEaptROl0cKtqFEEBTTrBVjFKIenIgl6BjyGaN7HrgWlAO5SDkJHbXnvijjVHFCGh/Q X-Received: by 2002:a9d:65ca:: with SMTP id z10mr563778oth.86.1585343613248; Fri, 27 Mar 2020 14:13:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1585343613; cv=none; d=google.com; s=arc-20160816; b=bM3cXtgbfMWAtg60YGAnzY3rERXVbw2vcpd67zWNxxCBl595wJpYqCofDq/x0rsfd6 apW8Rw8U6BidIXm/JLd+RlwHAGLhXJxd9+EYFvUM51o8lAO4TmPRkC+uoHf39Lk+eiZj LtVUh+DpjyeRO7/SiiWYKJJaGDG/B7PW17aZuIWXJsrqRr7IGaFTuBlFuG4Y+XbPcX6D IRY0HFfbSjfpqszEhy5pM/OAbVIqmCvUOG1g7+IrsOqCiWGhaNPoh9B9Pr+nK4WY0v+9 TN79TaTQvl9BQ/Y4KHyIQRFRtdYApLJJY6IBY5FOfVYoPYv9x5dKDA6rgo8X07ZsUeWc 0Zxg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:subject:cc:to:from:date :dkim-signature; bh=pU369DtG86jsIbWwBlHqilmriJZlc4uAPV60W3fwUQ0=; b=jGIOjfJXmM1ClHHZFpXJyaK5aTEoxFfCKQi+I2+jqKfQgFJEduU3ulJSDkMTQDQiXC X7GqBhyVgRU3jXwpVA/tp0ThuywRy/Qgtbfz79+fIbT2leoNjsLK53BvwY8luwbJW4gb MWNYhLxVniTauey+keff04e5dCd7QT2G8q6lHRlLEbSJdP2FuOC3sywsTUY3qSMYksfb CCX8Jgqa9XnkIKZMVl8Ku9b77aU65THuTVSgx1Fya5UjOZt2ELsAVJNCAwx6OrQH4TNN AvraLYE4BAs8TqOixZin33X33r//5ruNqCcjmT6kvApxjc6BZNIz0m63E0vQL3dPH46w PzLQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=MIHobpqT; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i187si2931651oif.89.2020.03.27.14.13.14; Fri, 27 Mar 2020 14:13:33 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=MIHobpqT; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727509AbgC0VLu (ORCPT + 99 others); Fri, 27 Mar 2020 17:11:50 -0400 Received: from us-smtp-delivery-74.mimecast.com ([63.128.21.74]:40782 "EHLO us-smtp-delivery-74.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727352AbgC0VLu (ORCPT ); Fri, 27 Mar 2020 17:11:50 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1585343508; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=pU369DtG86jsIbWwBlHqilmriJZlc4uAPV60W3fwUQ0=; b=MIHobpqT/6bmvtF04kdeHLYKGYxDouImZFb8dwG72iLzvzsboQkZMM2cvmgaAi/yxKcOjp Q8xKjc5Bps8v99T0Fp9Aqng5ucf/NECOQEqjd8OVD4uSRaankfYB/UzKWkQ77ufug12NV0 atkF8x07pg22dTAEalFY8vJBUGhikeQ= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-298-w4oL4hpQNGqRf3z8J3_npA-1; Fri, 27 Mar 2020 17:11:44 -0400 X-MC-Unique: w4oL4hpQNGqRf3z8J3_npA-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 3A1D3800D53; Fri, 27 Mar 2020 21:11:43 +0000 (UTC) Received: from w520.home (ovpn-112-162.phx2.redhat.com [10.3.112.162]) by smtp.corp.redhat.com (Postfix) with ESMTP id A8C901001B2D; Fri, 27 Mar 2020 21:11:42 +0000 (UTC) Date: Fri, 27 Mar 2020 15:11:42 -0600 From: Alex Williamson To: Diana Craciun Cc: kvm@vger.kernel.org, laurentiu.tudor@nxp.com, linux-arm-kernel@lists.infradead.org, bharatb.yadav@gmail.com, linux-kernel@vger.kernel.org Subject: Re: [PATCH 0/9] vfio/fsl-mc: VFIO support for FSL-MC devices Message-ID: <20200327151142.79dd2554@w520.home> In-Reply-To: <20200323171911.27178-1-diana.craciun@oss.nxp.com> References: <20200323171911.27178-1-diana.craciun@oss.nxp.com> MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, 23 Mar 2020 19:19:02 +0200 Diana Craciun wrote: > DPAA2 (Data Path Acceleration Architecture) consists in > mechanisms for processing Ethernet packets, queue management, > accelerators, etc. > > The Management Complex (mc) is a hardware entity that manages the DPAA2 > hardware resources. It provides an object-based abstraction for software > drivers to use the DPAA2 hardware. The MC mediates operations such as > create, discover, destroy of DPAA2 objects. > The MC provides memory-mapped I/O command interfaces (MC portals) which > DPAA2 software drivers use to operate on DPAA2 objects. > > A DPRC is a container object that holds other types of DPAA2 objects. > Each object in the DPRC is a Linux device and bound to a driver. > The MC-bus driver is a platform driver (different from PCI or platform > bus). The DPRC driver does runtime management of a bus instance. It > performs the initial scan of the DPRC and handles changes in the DPRC > configuration (adding/removing objects). > > All objects inside a container share the same hardware isolation > context, meaning that only an entire DPRC can be assigned to > a virtual machine. > When a container is assigned to a virtual machine, all the objects > within that container are assigned to that virtual machine. > The DPRC container assigned to the virtual machine is not allowed > to change contents (add/remove objects) by the guest. The restriction > is set by the host and enforced by the mc hardware. > > The DPAA2 objects can be directly assigned to the guest. However > the MC portals (the memory mapped command interface to the MC) need > to be emulated because there are commands that configure the > interrupts and the isolation IDs which are virtual in the guest. > > Example: > echo vfio-fsl-mc > /sys/bus/fsl-mc/devices/dprc.2/driver_override > echo dprc.2 > /sys/bus/fsl-mc/drivers/vfio-fsl-mc/bind > > The dprc.2 is bound to the VFIO driver and all the objects within > dprc.2 are going to be bound to the VFIO driver. What's the composition of the IOMMU group, does it start with the DPRC and each of the objects within the container are added to the same group as they're created? For an alternative to the driver_override mechanism used in this series of passing the override through various scan/create callbacks, you might consider something like I did for PCI SR-IOV: https://lore.kernel.org/lkml/158396395214.5601.11207416598267070486.stgit@gimli.home/ ie. using the bus notifier to setup the driver_override before driver matching is done. Thanks, Alex > More details about the DPAA2 objects can be found here: > Documentation/networking/device_drivers/freescale/dpaa2/overview.rst > > The patches are dependent on some changes in the mc-bus (bus/fsl-mc) > driver. The changes were needed in order to re-use code and to export > some more functions that are needed by the VFIO driver. > Currenlty the mc-bus patches are under review: > https://www.spinics.net/lists/kernel/msg3447567.html > > Bharat Bhushan (1): > vfio/fsl-mc: Add VFIO framework skeleton for fsl-mc devices > > Diana Craciun (8): > vfio/fsl-mc: Scan DPRC objects on vfio-fsl-mc driver bind > vfio/fsl-mc: Implement VFIO_DEVICE_GET_INFO ioctl > vfio/fsl-mc: Implement VFIO_DEVICE_GET_REGION_INFO ioctl call > vfio/fsl-mc: Allow userspace to MMAP fsl-mc device MMIO regions > vfio/fsl-mc: Added lock support in preparation for interrupt handling > vfio/fsl-mc: Add irq infrastructure for fsl-mc devices > vfio/fsl-mc: trigger an interrupt via eventfd > vfio/fsl-mc: Add read/write support for fsl-mc devices > > MAINTAINERS | 6 + > drivers/vfio/Kconfig | 1 + > drivers/vfio/Makefile | 1 + > drivers/vfio/fsl-mc/Kconfig | 9 + > drivers/vfio/fsl-mc/Makefile | 4 + > drivers/vfio/fsl-mc/vfio_fsl_mc.c | 660 ++++++++++++++++++++++ > drivers/vfio/fsl-mc/vfio_fsl_mc_intr.c | 221 ++++++++ > drivers/vfio/fsl-mc/vfio_fsl_mc_private.h | 56 ++ > include/uapi/linux/vfio.h | 1 + > 9 files changed, 959 insertions(+) > create mode 100644 drivers/vfio/fsl-mc/Kconfig > create mode 100644 drivers/vfio/fsl-mc/Makefile > create mode 100644 drivers/vfio/fsl-mc/vfio_fsl_mc.c > create mode 100644 drivers/vfio/fsl-mc/vfio_fsl_mc_intr.c > create mode 100644 drivers/vfio/fsl-mc/vfio_fsl_mc_private.h >