From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753598AbcKRPzt (ORCPT ); Fri, 18 Nov 2016 10:55:49 -0500 Received: from foss.arm.com ([217.140.101.70]:51714 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752441AbcKRPzo (ORCPT ); Fri, 18 Nov 2016 10:55:44 -0500 Date: Fri, 18 Nov 2016 15:55:43 +0000 From: Will Deacon To: Lorenzo Pieralisi Cc: iommu@lists.linux-foundation.org, Robin Murphy , Joerg Roedel , Marc Zyngier , "Rafael J. Wysocki" , Tomasz Nowicki , Hanjun Guo , Jon Masters , Eric Auger , Sinan Kaya , Nate Watterson , Prem Mallappa , Dennis Chen , linux-acpi@vger.kernel.org, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: Re: [PATCH v8 11/16] drivers: iommu: arm-smmu-v3: add IORT configuration Message-ID: <20161118155543.GV13470@arm.com> References: <20161116152936.22955-1-lorenzo.pieralisi@arm.com> <20161116152936.22955-12-lorenzo.pieralisi@arm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20161116152936.22955-12-lorenzo.pieralisi@arm.com> User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Nov 16, 2016 at 03:29:31PM +0000, Lorenzo Pieralisi wrote: > In ACPI bases systems, in order to be able to create platform > devices and initialize them for ARM SMMU v3 components, the IORT > kernel implementation requires a set of static functions to be > used by the IORT kernel layer to configure platform devices for > ARM SMMU v3 components. > > Add static configuration functions to the IORT kernel layer for > the ARM SMMU v3 components, so that the ARM SMMU v3 driver can > initialize its respective platform device by relying on the IORT > kernel infrastructure and by adding a corresponding ACPI device > early probe section entry. > > Signed-off-by: Lorenzo Pieralisi > Reviewed-by: Tomasz Nowicki > Tested-by: Hanjun Guo > Tested-by: Tomasz Nowicki > Cc: Will Deacon > Cc: Robin Murphy > Cc: Joerg Roedel > --- > drivers/acpi/arm64/iort.c | 103 +++++++++++++++++++++++++++++++++++++++++++- > drivers/iommu/arm-smmu-v3.c | 49 ++++++++++++++++++++- > 2 files changed, 150 insertions(+), 2 deletions(-) [...] > diff --git a/drivers/iommu/arm-smmu-v3.c b/drivers/iommu/arm-smmu-v3.c > index ed563307..9315bf3 100644 > --- a/drivers/iommu/arm-smmu-v3.c > +++ b/drivers/iommu/arm-smmu-v3.c > @@ -20,6 +20,8 @@ > * This driver is powered by bad coffee and bombay mix. > */ > > +#include > +#include > #include > #include > #include > @@ -2559,6 +2561,36 @@ static int arm_smmu_device_hw_probe(struct arm_smmu_device *smmu) > return 0; > } > > +#ifdef CONFIG_ACPI > +static int arm_smmu_device_acpi_probe(struct platform_device *pdev, > + struct arm_smmu_device *smmu, > + bool *bypass) > +{ > + struct acpi_iort_smmu_v3 *iort_smmu; > + struct device *dev = smmu->dev; > + struct acpi_iort_node *node; > + > + node = *(struct acpi_iort_node **)dev_get_platdata(dev); > + > + /* Retrieve SMMUv3 specific data */ > + iort_smmu = (struct acpi_iort_smmu_v3 *)node->node_data; > + > + if (iort_smmu->flags & ACPI_IORT_SMMU_V3_COHACC_OVERRIDE) > + smmu->features |= ARM_SMMU_FEAT_COHERENCY; > + > + *bypass = false; > + > + return 0; > +} > +#else > +static inline int arm_smmu_device_acpi_probe(struct platform_device *pdev, > + struct arm_smmu_device *smmu, > + bool *bypass) > +{ > + return -ENODEV; > +} > +#endif Same bypass comments as before, but you'll probably need to do something so that you *can* abort the probe if !ACPI, perhaps by allocating two error codes to distinguish the "I no nothing about this SMMU" from "I know enough to put it into bypass, but nothing more". Will