|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [RFC for-4.5 10/12] xen/passthrough: Introduce IOMMU ARM architure
Hi Ian,
On 02/19/2014 12:49 PM, Ian Campbell wrote:
> On Fri, 2014-02-07 at 17:43 +0000, Julien Grall wrote:
>> This patch contains the architecture to use IOMMU on ARM. There is no
>
> s/IOMMU/IOMMUs/
>
>> IOMMU drivers on this patch.
>>
>> The code will run through the device tree and will initialize every IOMMUs.
>
> s/IOMMUs/IOMMU/
>
>> It's possible to have multiple IOMMUs on the same platform, but they should
>
> s/should/must/ I think for now?
Right.
>> be handled with the same drivers.
>
> s/drivers/driver/
>
>> For now, there is no support for using multiple iommu drivers at runtime.
>
> But this is in principal possible in the future, right? (I shudder to
> think what the designers of an SoC with multiple different SMMUs on it
> would have to be smoking...)
In theory yes. I will wait that someone want to support a such platfomr
on Xen before implement it :).
>
> You should mention somewhere that on ARM these are called SMMUs not
> IOMMUs.
I think SMMU is the name used for ARM IOMMU. Samsung and TI doesn't use
the term SMMU.
>
>> Each new IOMMU drivers should contain:
>>
>> static const char * const myiommu_dt_compat[] __initcontst =
>
> "__initconst".
Oops. Will fix it.
>> {
>> /* list of device compatible with the drivers. Will be matched with
>> * the "compatible" property on the device tree
>> */
>> NULL,
>> };
>>
>> DT_DEVICE_START(myiommu, "MY IOMMU", DEVICE_IOMMU)
>> .compatible = myiommu_compatible,
>> .init = myiommu_init,
>> DT_DEVICE_END
>
> This is the same as for any other driver, right?
Yes, the only change is we need to specify DEVICE_IOMMU in DT_DEVICE_START.
>
>> @@ -568,6 +571,10 @@ fail:
>>
>> void arch_domain_destroy(struct domain *d)
>> {
>> + /* IOMMU page table is shared with P2M, always call
>> + * iommu_domain_destroy() before p2m_teardown().
>
> It would be worth adding some commentary on the design we are using
> (decisions such as whether to share PTs with the stage 2 MMU) in the
> commit message as well.
I will do.
> I suppose this requirement puts constraints on the SMMU hardware we can
> support. I think it is fine to live with that until someone shows up
> with an SMMU with pagetables that are incompatible with the stage 2
> paging ones.
Adding support for a such hardware should not need too much code.
>> diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c
>> index 1f6d713..5a687d1 100644
>> --- a/xen/arch/arm/setup.c
>> +++ b/xen/arch/arm/setup.c
>> @@ -725,6 +725,8 @@ void __init start_xen(unsigned long boot_phys_offset,
>> local_irq_enable();
>> local_abort_enable();
>>
>> + iommu_setup(); /* setup iommu if available */
>
> Comment is a bit redundant ;-)
Copied for x86/setup.c. I will remove it.
>
>> diff --git a/xen/drivers/passthrough/arm/iommu.c
>> b/xen/drivers/passthrough/arm/iommu.c
>> new file mode 100644
>> index 0000000..7cf36cd
>> --- /dev/null
>> +++ b/xen/drivers/passthrough/arm/iommu.c
>> @@ -0,0 +1,65 @@
>> +/*
>> + * xen/drivers/passthrough/arm/iommu.c
>> + *
>> + * Generic IOMMU framework via the device tree
>> + *
>> + * Julien Grall <julien.grall@xxxxxxxxxx>
>> + * Copyright (c) 2013 Linaro Limited.
>
> It's not 2013 any more...
I have started the implementation in 2013 and forgot to update it.
>
>> diff --git a/xen/include/asm-arm/hvm/iommu.h
>> b/xen/include/asm-arm/hvm/iommu.h
>> new file mode 100644
>> index 0000000..461c8cf
>> --- /dev/null
>> +++ b/xen/include/asm-arm/hvm/iommu.h
>> @@ -0,0 +1,10 @@
>> +#ifndef __ASM_ARM_HVM_IOMMU_H_
>> +#define __ASM_ARM_HVM_IOMMU_H_
>> +
>> +struct arch_hvm_iommu
>> +{
>> + /* Private information for the IOMMU drivers */
>> + void *priv;
>> +};
>> +
>> +#endif /* __ASM_ARM_HVM_IOMMU_H_ */
>
> Emacs magic block please.
I will do.
> That was a surprisingly small and uncontroversial patch. Well done.
The IOMMU framework in Xen was well designed.
cheers,
--
Julien Grall
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |