On Thu, Feb 08, 2018 at 08:10:54PM -0700, Sameer Goel wrote:
> Pull common defines for SMMU drives in a local header.
>
> Signed-off-by: Sameer Goel <[email protected]>
> ---
> xen/drivers/passthrough/arm/arm_smmu.h | 125
> +++++++++++++++++++++++++++++++++
> xen/drivers/passthrough/arm/smmu-v3.c | 96 +------------------------
> xen/drivers/passthrough/arm/smmu.c | 104 +--------------------------
> 3 files changed, 128 insertions(+), 197 deletions(-)
> create mode 100644 xen/drivers/passthrough/arm/arm_smmu.h
>
> diff --git a/xen/drivers/passthrough/arm/arm_smmu.h
> b/xen/drivers/passthrough/arm/arm_smmu.h
> new file mode 100644
> index 0000000000..f49dceb5b4
> --- /dev/null
> +++ b/xen/drivers/passthrough/arm/arm_smmu.h
> @@ -0,0 +1,125 @@
> +/******************************************************************************
> + * ./arm_smmu.h
> + *
> + * Common compatibility defines and data_structures for porting arm smmu
> + * drivers from Linux.
> + *
> + * Copyright (c) 2017 Linaro Limited
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; either version 2 of the License, or
> + * (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; If not, see <http://www.gnu.org/licenses/>.
> + */
> +
> +#ifndef __ARM_SMMU_H__
> +#define __ARM_SMMU_H__
> +
> +
> +/* Alias to Xen device tree helpers */
> +#define device_node dt_device_node
> +#define of_phandle_args dt_phandle_args
> +#define of_device_id dt_device_match
> +#define of_match_node dt_match_node
> +#define of_property_read_u32(np, pname, out) (!dt_property_read_u32(np,
> pname, out))
Break the line.
> +#define of_property_read_bool dt_property_read_bool
> +#define of_parse_phandle_with_args dt_parse_phandle_with_args
> +
> +/* Helpers to get device MMIO and IRQs */
> +struct resource {
> + u64 addr;
> + u64 size;
uint64_t is preferred rather than u64.
> + unsigned int type;
> +};
> +
> +#define resource_size(res) ((res)->size)
> +
> +#define platform_device device
> +
> +#define IORESOURCE_MEM 0
> +#define IORESOURCE_IRQ 1
> +
> +/* Stub out DMA domain related functions */
> +#define iommu_get_dma_cookie(dom) 0
> +#define iommu_put_dma_cookie(dom)
> +
> +#define VA_BITS 0 /* Only used for configuring stage-1 input
> size */
> +
> +#define MODULE_DEVICE_TABLE(type, name)
> +#define module_param_named(name, value, type, perm)
> +#define MODULE_PARM_DESC(_parm, desc)
> +
> +#define dma_set_mask_and_coherent(d, b) 0
> +#define of_dma_is_coherent(n) 0
> +
> +static void __iomem *devm_ioremap_resource(struct device *dev,
> + struct resource *res)
Aligment, please use spaces.
Also, is __iomem needed here at all?
> +{
> + void __iomem *ptr;
Same question about __iomem attribute.
> +
> + if ( !res || res->type != IORESOURCE_MEM )
> + {
> + dev_err(dev, "Invalid resource\n");
> + return ERR_PTR(-EINVAL);
> + }
> +
> + ptr = ioremap_nocache(res->addr, res->size);
> + if ( !ptr )
> + {
> + dev_err(dev, "ioremap failed (addr 0x%"PRIx64" size 0x%"PRIx64")\n",
> + res->addr, res->size);
> + return ERR_PTR(-ENOMEM);
> + }
> +
> + return ptr;
> +}
> +
> +/*
> + * Domain type definitions. Not really needed for Xen, defining to port
> + * Linux code as-is
> + */
> +#define IOMMU_DOMAIN_UNMANAGED 0
> +#define IOMMU_DOMAIN_DMA 1
> +#define IOMMU_DOMAIN_IDENTITY 2
> +
> +/* Xen: Compatibility define for iommu_domain_geometry.*/
> +struct iommu_domain_geometry {
> + dma_addr_t aperture_start; /* First address that can be mapped */
> + dma_addr_t aperture_end; /* Last address that can be mapped */
> + bool force_aperture; /* DMA only allowed in mappable range? */
> +};
> +
> +/* Xen: Dummy iommu_domain */
> +struct iommu_domain {
> + /* Runtime SMMU configuration for this iommu_domain */
> + struct arm_smmu_domain *priv;
> + unsigned int type;
> +
> + /* Dummy compatibility defines */
> + unsigned long pgsize_bitmap;
> + struct iommu_domain_geometry geometry;
> +
> + atomic_t ref;
> + /* Used to link iommu_domain contexts for a same domain.
> + * There is at least one per-SMMU to used by the domain.
> + */
> + struct list_head list;
No tabs please. And if you want to align the fields, please do so
uniformly for all the structs in the file.
> +};
> +
> +/* Xen: Describes information required for a Xen domain */
> +struct arm_smmu_xen_domain {
> + spinlock_t lock;
> + /* List of iommu domains associated to this domain */
> + struct list_head contexts;
> +};
Tabs.
> +
> +#endif /* __ARM_SMMU_H__ */
> +
> diff --git a/xen/drivers/passthrough/arm/smmu-v3.c
> b/xen/drivers/passthrough/arm/smmu-v3.c
> index f43485fe6e..f0a61521fb 100644
> --- a/xen/drivers/passthrough/arm/smmu-v3.c
> +++ b/xen/drivers/passthrough/arm/smmu-v3.c
> @@ -49,28 +49,7 @@
> #include <asm/io.h>
> #include <asm/platform.h>
>
> -/* Alias to Xen device tree helpers */
> -#define device_node dt_device_node
> -#define of_phandle_args dt_phandle_args
> -#define of_device_id dt_device_match
> -#define of_match_node dt_match_node
> -#define of_property_read_u32(np, pname, out) (!dt_property_read_u32(np,
> pname, out))
> -#define of_property_read_bool dt_property_read_bool
> -#define of_parse_phandle_with_args dt_parse_phandle_with_args
> -
> -/* Xen: Helpers to get device MMIO and IRQs */
> -struct resource {
> - u64 addr;
> - u64 size;
> - unsigned int type;
> -};
> -
> -#define resource_size(res) ((res)->size)
> -
> -#define platform_device device
> -
> -#define IORESOURCE_MEM 0
> -#define IORESOURCE_IRQ 1
You introduce the above code in patch 5, and remove it in patch 6, is
this really needed?
Ie: why not simply introduce this code directly in this patch?
> diff --git a/xen/drivers/passthrough/arm/smmu.c
> b/xen/drivers/passthrough/arm/smmu.c
> index ad956d5b8d..4c04391e21 100644
> --- a/xen/drivers/passthrough/arm/smmu.c
> +++ b/xen/drivers/passthrough/arm/smmu.c
> @@ -41,6 +41,7 @@
> #include <xen/irq.h>
> #include <xen/lib.h>
> #include <xen/list.h>
> +#include <xen/linux_compat.h>
> #include <xen/mm.h>
> #include <xen/vmap.h>
> #include <xen/rbtree.h>
> @@ -51,36 +52,13 @@
> #include <asm/io.h>
> #include <asm/platform.h>
>
> +#include "arm_smmu.h" /* Not a self contained header. So last in the list */
> /* Xen: The below defines are redefined within the file. Undef it */
> #undef SCTLR_AFE
> #undef SCTLR_TRE
> #undef SCTLR_M
> #undef TTBCR_EAE
>
> -/* Alias to Xen device tree helpers */
> -#define device_node dt_device_node
> -#define of_phandle_args dt_phandle_args
> -#define of_device_id dt_device_match
> -#define of_match_node dt_match_node
> -#define of_property_read_u32(np, pname, out) (!dt_property_read_u32(np,
> pname, out))
> -#define of_property_read_bool dt_property_read_bool
> -#define of_parse_phandle_with_args dt_parse_phandle_with_args
> -
> -/* Xen: Helpers to get device MMIO and IRQs */
> -struct resource
> -{
> - u64 addr;
> - u64 size;
> - unsigned int type;
> -};
> -
> -#define resource_size(res) (res)->size;
> -
> -#define platform_device device
> -
> -#define IORESOURCE_MEM 0
> -#define IORESOURCE_IRQ 1
> -
> static struct resource *platform_get_resource(struct platform_device *pdev,
> unsigned int type,
> unsigned int num)
> @@ -118,58 +96,6 @@ static struct resource *platform_get_resource(struct
> platform_device *pdev,
>
> /* Xen: Helpers for IRQ functions */
> #define request_irq(irq, func, flags, name, dev) request_irq(irq, flags,
> func, name, dev)
> -#define free_irq release_irq
> -
> -enum irqreturn {
> - IRQ_NONE = (0 << 0),
> - IRQ_HANDLED = (1 << 0),
> -};
> -
> -typedef enum irqreturn irqreturn_t;
You remove the irqreturn enum without adding any replacement, is this
really unused?
Thanks, Roger.
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel