From: Julien Grall <julien.grall@linaro.org>
To: Sameer Goel <sgoel@codeaurora.org>,
xen-devel@lists.xenproject.org, julien.grall@arm.com,
mjaggi@caviumnetworks.com
Cc: sstabellini@kernel.org, wei.liu2@citrix.com,
george.dunlap@eu.citrix.com, Andrew.Cooper3@citrix.com,
jbeulich@suse.com, Ian.Jackson@citrix.com, nd@arm.com,
robin.murphy@arm.com, shankerd@codeaurora.org
Subject: Re: [RFC v2 5/7] acpi:arm64: Add support for parsing IORT table
Date: Thu, 12 Oct 2017 15:06:15 +0100 [thread overview]
Message-ID: <040fde45-10f8-fa40-29e3-d1312faf311f@linaro.org> (raw)
In-Reply-To: <1505954230-18892-6-git-send-email-sgoel@codeaurora.org>
Hi Sameer,
On 21/09/17 01:37, Sameer Goel wrote:
> Add support for parsing IORT table to initialize SMMU devices.
> * The code for creating an SMMU device has been modified, so that the SMMU
> device can be initialized.
> * The NAMED NODE code has been commented out as this will need DOM0 kernel
> support.
> * ITS code has been included but it has not been tested.
>
> Signed-off-by: Sameer Goel <sgoel@codeaurora.org>
> ---
> xen/arch/arm/setup.c | 3 +
> xen/drivers/acpi/Makefile | 1 +
> xen/drivers/acpi/arm/Makefile | 1 +
> xen/drivers/acpi/arm/iort.c | 173 +++++++++++++++++++++----------------
> xen/drivers/passthrough/arm/smmu.c | 1 +
> xen/include/acpi/acpi_iort.h | 17 ++--
> xen/include/asm-arm/device.h | 2 +
> xen/include/xen/acpi.h | 21 +++++
> xen/include/xen/pci.h | 8 ++
> 9 files changed, 146 insertions(+), 81 deletions(-)
> create mode 100644 xen/drivers/acpi/arm/Makefile
>
> diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c
> index 92f173b..4ba09b2 100644
> --- a/xen/arch/arm/setup.c
> +++ b/xen/arch/arm/setup.c
> @@ -49,6 +49,7 @@
> #include <asm/setup.h>
> #include <xsm/xsm.h>
> #include <asm/acpi.h>
> +#include <acpi/acpi_iort.h>
>
> struct bootinfo __initdata bootinfo;
>
> @@ -796,6 +797,8 @@ void __init start_xen(unsigned long boot_phys_offset,
>
> tasklet_subsys_init();
>
> + /* Parse the ACPI iort data */
> + acpi_iort_init();
>
> xsm_dt_init();
>
> diff --git a/xen/drivers/acpi/Makefile b/xen/drivers/acpi/Makefile
> index 444b11d..e7ffd82 100644
> --- a/xen/drivers/acpi/Makefile
> +++ b/xen/drivers/acpi/Makefile
> @@ -1,5 +1,6 @@
> subdir-y += tables
> subdir-y += utilities
> +subdir-$(CONFIG_ARM) += arm
> subdir-$(CONFIG_X86) += apei
>
> obj-bin-y += tables.init.o
> diff --git a/xen/drivers/acpi/arm/Makefile b/xen/drivers/acpi/arm/Makefile
> new file mode 100644
> index 0000000..7c039bb
> --- /dev/null
> +++ b/xen/drivers/acpi/arm/Makefile
> @@ -0,0 +1 @@
> +obj-y += iort.o
> diff --git a/xen/drivers/acpi/arm/iort.c b/xen/drivers/acpi/arm/iort.c
> index 2e368a6..7f54062 100644
> --- a/xen/drivers/acpi/arm/iort.c
> +++ b/xen/drivers/acpi/arm/iort.c
> @@ -14,17 +14,47 @@
> * This file implements early detection/parsing of I/O mapping
> * reported to OS through firmware via I/O Remapping Table (IORT)
> * IORT document number: ARM DEN 0049A
> + *
> + * Based on Linux drivers/acpi/arm64/iort.c
> + * => commit ca78d3173cff3503bcd15723b049757f75762d15
> + *
> + * Xen modification:
> + * Sameer Goel <sgoel@codeaurora.org>
> + * Copyright (C) 2017, The Linux Foundation, All rights reserved.
> + *
> */
>
> -#define pr_fmt(fmt) "ACPI: IORT: " fmt
> -
> -#include <linux/acpi_iort.h>
> -#include <linux/iommu.h>
> -#include <linux/kernel.h>
> -#include <linux/list.h>
> -#include <linux/pci.h>
> -#include <linux/platform_device.h>
> -#include <linux/slab.h>
> +#include <xen/acpi.h>
> +#include <acpi/acpi_iort.h>
Why do you need to include there? Can't this be done after all the <xen/> ?
> +#include <xen/fwnode.h>
> +#include <xen/iommu.h>
> +#include <xen/lib.h>
> +#include <xen/list.h>
> +#include <xen/pci.h>
> +
> +#include <asm/device.h>
> +
> +/* Xen: Define compatibility functions */
> +#define FW_BUG "[Firmware Bug]: "
> +#define pr_err(fmt, ...) printk(XENLOG_ERR fmt, ## __VA_ARGS__)
> +#define pr_warn(fmt, ...) printk(XENLOG_WARNING fmt, ## __VA_ARGS__)
> +
> +/* Alias to Xen allocation helpers */
> +#define kfree xfree
> +#define kmalloc(size, flags) _xmalloc(size, sizeof(void *))
> +#define kzalloc(size, flags) _xzalloc(size, sizeof(void *))
Likely you would need the same macros in the SMMUv3 driver. Could we
think of a common headers implementing the Linux compat layer?
> +
> +/* Redefine WARN macros */
> +#undef WARN
> +#undef WARN_ON
> +#define WARN(condition, format...) ({ \
> + int __ret_warn_on = !!(condition); \
> + if (unlikely(__ret_warn_on)) \
> + printk(format); \
> + unlikely(__ret_warn_on); \
> +})
Again, you should at least try to modify the common code version before
deciding to redefine it here.
> +#define WARN_TAINT(cond, taint, format...) WARN(cond, format)
> +#define WARN_ON(cond) (!!cond)
>
> #define IORT_TYPE_MASK(type) (1 << (type))
> #define IORT_MSI_TYPE (1 << ACPI_IORT_NODE_ITS_GROUP)
> @@ -256,6 +286,13 @@ static acpi_status iort_match_node_callback(struct acpi_iort_node *node,
> acpi_status status;
>
> if (node->type == ACPI_IORT_NODE_NAMED_COMPONENT) {
> + status = AE_NOT_IMPLEMENTED;
> +/*
> + * We need the namespace object name from dsdt to match the iort node, this
Please add a "Xen: TODO:" in front.
> + * will need additions to the kernel xen bus notifiers.
> + * So, disabling the named node code till a proposal is approved.
> + */
> +#if 0
> struct acpi_buffer buf = { ACPI_ALLOCATE_BUFFER, NULL };
> struct acpi_device *adev = to_acpi_device_node(dev->fwnode);
> struct acpi_iort_named_component *ncomp;
> @@ -275,11 +312,12 @@ static acpi_status iort_match_node_callback(struct acpi_iort_node *node,
> status = !strcmp(ncomp->device_name, buf.pointer) ?
> AE_OK : AE_NOT_FOUND;
> acpi_os_free(buf.pointer);
> +#endif
> } else if (node->type == ACPI_IORT_NODE_PCI_ROOT_COMPLEX) {
> struct acpi_iort_root_complex *pci_rc;
> - struct pci_bus *bus;
> + struct pci_dev *pci_dev;
Do you really need to modify the code? Wouldn't it be possible to do
#define pci_bus pci_dev
With an explanation why you do that on top.
>
> - bus = to_pci_bus(dev);
> + pci_dev = to_pci_dev(dev);
Same here?
> pci_rc = (struct acpi_iort_root_complex *)node->node_data;
>
> /*
> @@ -287,12 +325,11 @@ static acpi_status iort_match_node_callback(struct acpi_iort_node *node,
> * with root complexes. Each segment number can represent only
> * one root complex.
> */
> - status = pci_rc->pci_segment_number == pci_domain_nr(bus) ?
> + status = pci_rc->pci_segment_number == pci_domain_nr(pci_dev) ?
> AE_OK : AE_NOT_FOUND;
> } else {
> status = AE_NOT_FOUND;
> }
> -out:
> return status;
> }
>
> @@ -320,6 +357,11 @@ static int iort_id_map(struct acpi_iort_id_mapping *map, u8 type, u32 rid_in,
> return 0;
> }
>
> +/*
> + * Named components are not supported yet so we do not need the
> + * iort_node_get_id function
Missing full stop + TODO.
> + */
> +#if 0
> static
> struct acpi_iort_node *iort_node_get_id(struct acpi_iort_node *node,
> u32 *id_out, u8 type_mask,
> @@ -358,6 +400,7 @@ struct acpi_iort_node *iort_node_get_id(struct acpi_iort_node *node,
>
> return NULL;
> }
> +#endif
>
> static struct acpi_iort_node *iort_node_map_rid(struct acpi_iort_node *node,
> u32 rid_in, u32 *rid_out,
> @@ -410,6 +453,10 @@ fail_map:
> return NULL;
> }
>
> +/* Xen: Comment out the NamedComponent and ITS mapping code till the support
+ TODO here please.
> + * is available.
> + */
> +#if 0
> static struct acpi_iort_node *iort_find_dev_node(struct device *dev)
> {
> struct pci_bus *pbus;
> @@ -481,7 +528,7 @@ static int iort_dev_find_its_id(struct device *dev, u32 req_id,
> return 0;
> }
>
> -/**
> +/*
Why this change?
> * iort_get_device_domain() - Find MSI domain related to a device
> * @dev: The device.
> * @req_id: Requester ID for the device.
> @@ -510,7 +557,7 @@ static int __get_pci_rid(struct pci_dev *pdev, u16 alias, void *data)
> *rid = alias;
> return 0;
> }
> -
> +#endif
Please avoid dropping newline.
> static int arm_smmu_iort_xlate(struct device *dev, u32 streamid,
> struct fwnode_handle *fwnode,
> const struct iommu_ops *ops)
> @@ -546,6 +593,7 @@ static const struct iommu_ops *iort_iommu_xlate(struct device *dev,
> return ret ? NULL : ops;
> }
>
> +#if 0 /* Xen: We do not need this function for Xen */
> /**
> * iort_set_dma_mask - Set-up dma mask for a device.
> *
> @@ -567,7 +615,7 @@ void iort_set_dma_mask(struct device *dev)
> if (!dev->dma_mask)
> dev->dma_mask = &dev->coherent_dma_mask;
> }
> -
> +#endif
Same here.
> /**
> * iort_iommu_configure - Set-up IOMMU configuration for a device.
> *
> @@ -583,14 +631,13 @@ const struct iommu_ops *iort_iommu_configure(struct device *dev)
> u32 streamid = 0;
>
> if (dev_is_pci(dev)) {
> - struct pci_bus *bus = to_pci_dev(dev)->bus;
> + struct pci_dev *pci_device = to_pci_dev(dev);
See above.
> u32 rid;
>
> - pci_for_each_dma_alias(to_pci_dev(dev), __get_pci_rid,
> - &rid);
> + rid = PCI_BDF2(pci_device->bus, pci_device->devfn);
I believe we had a discussion on v1 explaining why this is wrong. So I
don't understand why
>
> node = iort_scan_node(ACPI_IORT_NODE_PCI_ROOT_COMPLEX,
> - iort_match_node_callback, &bus->dev);
> + iort_match_node_callback, dev);
> if (!node)
> return NULL;
>
> @@ -600,6 +647,13 @@ const struct iommu_ops *iort_iommu_configure(struct device *dev)
> ops = iort_iommu_xlate(dev, parent, streamid);
>
> } else {
> + return NULL;
> +/*
> + * We need the namespace object name from dsdt to match the iort node, this
Xen:
> + * will need additions to the kernel xen bus notifiers.
> + * So, disabling the named node code till a proposal is approved.
> + */
> +#if 0
> int i = 0;
>
> node = iort_scan_node(ACPI_IORT_NODE_NAMED_COMPONENT,
> @@ -616,11 +670,17 @@ const struct iommu_ops *iort_iommu_configure(struct device *dev)
> parent = iort_node_get_id(node, &streamid,
> IORT_IOMMU_TYPE, i++);
> }
> +#endif
> }
>
> return ops;
> }
>
> +/*
> + * Xen: Not using the parsing ops for now. Need to check and see if it will
> + * be useful to use these in some form, or let the driver parse IORT node.
> + */
> +#if 0
> static void __init acpi_iort_register_irq(int hwirq, const char *name,
> int trigger,
> struct resource *res)
> @@ -807,7 +867,7 @@ const struct iort_iommu_config *iort_get_iommu_cfg(struct acpi_iort_node *node)
> return NULL;
> }
> }
> -
> +#endif
Please avoid dropping newline.
> /**
> * iort_add_smmu_platform_device() - Allocate a platform device for SMMU
> * @node: Pointer to SMMU ACPI IORT node
> @@ -817,78 +877,42 @@ const struct iort_iommu_config *iort_get_iommu_cfg(struct acpi_iort_node *node)
> static int __init iort_add_smmu_platform_device(struct acpi_iort_node *node)
Looking at the changes in this function. You basically rewrite
everything. I would prefer if you comment the current one and implement
from scratch the Xen version.
> {
> struct fwnode_handle *fwnode;
> - struct platform_device *pdev;
> - struct resource *r;
> - enum dev_dma_attr attr;
> - int ret, count;
> - const struct iort_iommu_config *ops = iort_get_iommu_cfg(node);
> -
> - if (!ops)
> - return -ENODEV;
> -
> - pdev = platform_device_alloc(ops->name, PLATFORM_DEVID_AUTO);
> - if (!pdev)
> - return -ENOMEM;
> -
> - count = ops->iommu_count_resources(node);
> -
> - r = kcalloc(count, sizeof(*r), GFP_KERNEL);
> - if (!r) {
> - ret = -ENOMEM;
> - goto dev_put;
> - }
> -
> - ops->iommu_init_resources(r, node);
> + struct device *dev;
> + int ret;
>
> - ret = platform_device_add_resources(pdev, r, count);
> /*
> - * Resources are duplicated in platform_device_add_resources,
> - * free their allocated memory
> + * Not enabling the parsing ops for now. The corresponding driver
> + * can parse this information as needed, so deleting relevant code as
> + * compared to base revision.
> */
> - kfree(r);
>
> - if (ret)
> - goto dev_put;
> + dev = kzalloc(sizeof(struct device), GFP_KERNEL);
> + if (!dev)
> + return -ENOMEM;
>
> /*
> * Add a copy of IORT node pointer to platform_data to
> * be used to retrieve IORT data information.
> */
> - ret = platform_device_add_data(pdev, &node, sizeof(node));
> - if (ret)
> - goto dev_put;
> -
> - /*
> - * We expect the dma masks to be equivalent for
> - * all SMMUs set-ups
> - */
> - pdev->dev.dma_mask = &pdev->dev.coherent_dma_mask;
> + dev->type = DEV_ACPI;
> + dev->acpi_node = node;
>
> fwnode = iort_get_fwnode(node);
>
> if (!fwnode) {
> ret = -ENODEV;
> - goto dev_put;
> + goto error;
> }
>
> - pdev->dev.fwnode = fwnode;
> -
> - attr = ops->iommu_is_coherent(node) ?
> - DEV_DMA_COHERENT : DEV_DMA_NON_COHERENT;
> -
> - /* Configure DMA for the page table walker */
> - acpi_dma_configure(&pdev->dev, attr);
> + dev->fwnode = fwnode;
>
> - ret = platform_device_add(pdev);
> - if (ret)
> - goto dma_deconfigure;
> + /* Call the acpi init functions for IOMMU devices */
> + ret = acpi_device_init(DEVICE_IOMMU, (void *)dev, node->type);
>
> return 0;
>
> -dma_deconfigure:
> - acpi_dma_deconfigure(&pdev->dev);
> -dev_put:
> - platform_device_put(pdev);
> +error:
> + kfree(dev);
>
> return ret;
> }
> @@ -957,5 +981,6 @@ void __init acpi_iort_init(void)
>
> iort_init_platform_devices();
>
> - acpi_probe_device_table(iort);
> + /* Xen; Do not need a device table probe */
> + /* acpi_probe_device_table(iort);*/
Please use either
#if 0
#endif
or introduce a dummy acpi_probe_device_table(...) at the start.
> }
> diff --git a/xen/drivers/passthrough/arm/smmu.c b/xen/drivers/passthrough/arm/smmu.c
> index 362d578..ad956d5 100644
> --- a/xen/drivers/passthrough/arm/smmu.c
> +++ b/xen/drivers/passthrough/arm/smmu.c
> @@ -181,6 +181,7 @@ static void __iomem *devm_ioremap_resource(struct device *dev,
> * Xen: PCI functions
> * TODO: It should be implemented when PCI will be supported
> */
> +#undef to_pci_dev
Why this change?
> #define to_pci_dev(dev) (NULL)
> static inline int pci_for_each_dma_alias(struct pci_dev *pdev,
> int (*fn) (struct pci_dev *pdev,
> diff --git a/xen/include/acpi/acpi_iort.h b/xen/include/acpi/acpi_iort.h
> index 77e0809..d4315a4 100644
> --- a/xen/include/acpi/acpi_iort.h
> +++ b/xen/include/acpi/acpi_iort.h
You probably want to re-sync this headers as it changed quite a bit and
would avoid some specific #if 0 for Xen.
> @@ -19,27 +19,32 @@
> #ifndef __ACPI_IORT_H__
> #define __ACPI_IORT_H__
>
> -#include <linux/acpi.h>
> -#include <linux/fwnode.h>
> -#include <linux/irqdomain.h>
> +#include <xen/acpi.h>
> +#include <asm/device.h>
>
> +/* Xen: Not using IORT IRQ bindings */
> +#if 0
> #define IORT_IRQ_MASK(irq) (irq & 0xffffffffULL)
> #define IORT_IRQ_TRIGGER_MASK(irq) ((irq >> 32) & 0xffffffffULL)
>
> int iort_register_domain_token(int trans_id, struct fwnode_handle *fw_node);
> void iort_deregister_domain_token(int trans_id);
> struct fwnode_handle *iort_find_domain_token(int trans_id);
> -#ifdef CONFIG_ACPI_IORT
> +#endif
> +#ifdef CONFIG_ARM_64
As said in the first version, I see no point of replacing
CONFIG_ACPI_IORT with CONFIG_ARM_64. You should instead take advantage
of the Kconfig to add a new config ACPI_IORT and select on Arm64 with ACPI.
> void acpi_iort_init(void);
> bool iort_node_match(u8 type);
> +#if 0
> u32 iort_msi_map_rid(struct device *dev, u32 req_id);
> struct irq_domain *iort_get_device_domain(struct device *dev, u32 req_id);
> /* IOMMU interface */
> void iort_set_dma_mask(struct device *dev);
> +#endif
> const struct iommu_ops *iort_iommu_configure(struct device *dev);
> #else
> static inline void acpi_iort_init(void) { }
> static inline bool iort_node_match(u8 type) { return false; }
> +#if 0
> static inline u32 iort_msi_map_rid(struct device *dev, u32 req_id)
> { return req_id; }
> static inline struct irq_domain *iort_get_device_domain(struct device *dev,
> @@ -47,12 +52,10 @@ static inline struct irq_domain *iort_get_device_domain(struct device *dev,
> { return NULL; }
> /* IOMMU interface */
> static inline void iort_set_dma_mask(struct device *dev) { }
> +#endif
> static inline
> const struct iommu_ops *iort_iommu_configure(struct device *dev)
> { return NULL; }
> #endif
>
> -#define IORT_ACPI_DECLARE(name, table_id, fn) \
> - ACPI_DECLARE_PROBE_ENTRY(iort, name, table_id, 0, NULL, 0, fn)
> -
> #endif /* __ACPI_IORT_H__ */
> diff --git a/xen/include/asm-arm/device.h b/xen/include/asm-arm/device.h
> index 5027c87..4eef9ce 100644
> --- a/xen/include/asm-arm/device.h
> +++ b/xen/include/asm-arm/device.h
> @@ -7,6 +7,7 @@
> enum device_type
> {
> DEV_DT,
> + DEV_ACPI,
> };
>
> struct dev_archdata {
> @@ -20,6 +21,7 @@ struct device
> #ifdef CONFIG_HAS_DEVICE_TREE
> struct dt_device_node *of_node; /* Used by drivers imported from Linux */
> #endif
> + void *acpi_node; /*Current use case is acpi_iort_node */
Can you explain why you need that? After the creation of fwnode, I was
expecting of_node to disappear. So I don't really fancy see acpi_node
here more it does not exist in Linux.
> struct fwnode_handle *fwnode; /*fw device node identifier */
> struct iommu_fwspec *iommu_fwspec;
> struct dev_archdata archdata;
> diff --git a/xen/include/xen/acpi.h b/xen/include/xen/acpi.h
> index 9409350..2f6aae1 100644
> --- a/xen/include/xen/acpi.h
> +++ b/xen/include/xen/acpi.h
> @@ -32,6 +32,7 @@
>
> #include <acpi/acpi.h>
> #include <asm/acpi.h>
> +#include <xen/fwnode.h>
I think this and ...
>
> #define ACPI_MADT_GET_(fld, x) (((x) & ACPI_MADT_##fld##_MASK) / \
> (ACPI_MADT_##fld##_MASK & -ACPI_MADT_##fld##_MASK))
> @@ -49,6 +50,26 @@
> (!(entry)) || (unsigned long)(entry) + sizeof(*(entry)) > (end) || \
> (entry)->header.length < sizeof(*(entry)))
>
> +static inline struct fwnode_handle *acpi_alloc_fwnode_static(void)
> +{
> + struct fwnode_handle *fwnode;
> +
> + fwnode = xzalloc(struct fwnode_handle);
> + if (!fwnode)
> + return NULL;
> +
> + fwnode->type = FWNODE_ACPI_STATIC;
> +
> + return fwnode;
> +}
> +
> +static inline void acpi_free_fwnode_static(struct fwnode_handle *fwnode)
> +{
> + if (!fwnode || fwnode->type != FWNODE_ACPI_STATIC)
> + return;
> +
> + xfree(fwnode);
> +}
... those 2 helpers should go in asm/acpi.h.
> #ifdef CONFIG_ACPI
>
> enum acpi_interrupt_id {
> diff --git a/xen/include/xen/pci.h b/xen/include/xen/pci.h
> index 43f2125..182b1a5 100644
> --- a/xen/include/xen/pci.h
> +++ b/xen/include/xen/pci.h
> @@ -92,8 +92,16 @@ struct pci_dev {
> #define PT_FAULT_THRESHOLD 10
> } fault;
> u64 vf_rlen[6];
> +#ifdef CONFIG_ARM
> + struct device dev;
> +#endif
There are a part of PCI that is already per-arch. See arch_pci_dev in
asm-arm/pci.h.
Please define the field dev in it rather than here.
> };
>
> +#ifdef CONFIG_ARM
> +#define to_pci_dev(p) container_of(p, struct pci_dev,dev)
> +#define pci_domain_nr(dev) dev->seg
> +#endif
Similarly, this should be moved in asm-arm/pci.h.
> +
> #define for_each_pdev(domain, pdev) \
> list_for_each_entry(pdev, &(domain->arch.pdev_list), domain_list)
>
>
Cheers,
--
Julien Grall
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
next prev parent reply other threads:[~2017-10-12 14:06 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-21 0:37 [RFC v2 0/7] SMMUv3 driver and the supporting framework Sameer Goel
2017-09-21 0:37 ` [RFC v2 1/7] passthrough/arm: Modify SMMU driver to use generic device definition Sameer Goel
2017-09-21 0:37 ` [RFC v2 2/7] arm64: Add definitions for fwnode_handle Sameer Goel
2017-10-12 12:45 ` Julien Grall
2017-10-19 14:53 ` Goel, Sameer
2017-10-24 14:08 ` Julien Grall
2017-11-09 0:56 ` Goel, Sameer
2017-09-21 0:37 ` [RFC v2 3/7] xen/passthrough/arm: Introduce iommu_fwspec Sameer Goel
2017-10-12 13:05 ` Julien Grall
2017-10-12 13:36 ` Julien Grall
2017-10-19 14:58 ` Goel, Sameer
2017-09-21 0:37 ` [RFC v2 4/7] ACPI: arm: Support for IORT Sameer Goel
2017-09-21 0:37 ` [RFC v2 5/7] acpi:arm64: Add support for parsing IORT table Sameer Goel
2017-10-10 12:36 ` Manish Jaggi
2017-10-19 15:00 ` Goel, Sameer
2017-10-20 6:25 ` Manish Jaggi
2017-10-12 14:06 ` Julien Grall [this message]
2017-10-19 15:21 ` Goel, Sameer
2017-10-24 14:26 ` Julien Grall
2017-10-12 14:23 ` Julien Grall
2017-11-08 14:41 ` Manish Jaggi
2017-11-15 1:27 ` Goel, Sameer
2017-11-15 8:58 ` Julien Grall
2017-09-21 0:37 ` [RFC v2 6/7] Add verbatim copy of arm-smmu-v3.c from Linux Sameer Goel
2017-09-21 0:37 ` [RFC v2 7/7] xen/iommu: smmu-v3: Add Xen specific code to enable the ported driver Sameer Goel
2017-09-26 0:03 ` Goel, Sameer
2017-10-12 16:36 ` Julien Grall
2017-11-19 7:45 ` Goel, Sameer
2017-11-20 14:25 ` Julien Grall
2017-11-20 15:19 ` Robin Murphy
2017-11-20 15:24 ` Julien Grall
2017-11-22 2:17 ` Goel, Sameer
2017-11-27 12:28 ` Julien Grall
2017-09-21 5:43 ` [RFC v2 0/7] SMMUv3 driver and the supporting framework Manish Jaggi
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=040fde45-10f8-fa40-29e3-d1312faf311f@linaro.org \
--to=julien.grall@linaro.org \
--cc=Andrew.Cooper3@citrix.com \
--cc=Ian.Jackson@citrix.com \
--cc=george.dunlap@eu.citrix.com \
--cc=jbeulich@suse.com \
--cc=julien.grall@arm.com \
--cc=mjaggi@caviumnetworks.com \
--cc=nd@arm.com \
--cc=robin.murphy@arm.com \
--cc=sgoel@codeaurora.org \
--cc=shankerd@codeaurora.org \
--cc=sstabellini@kernel.org \
--cc=wei.liu2@citrix.com \
--cc=xen-devel@lists.xenproject.org \
/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 NNTP newsgroup(s).