Message ID | 155300190865.2469.7364392263486575447.sendpatchset@octo (mailing list archive) |
---|---|
State | Under Review |
Delegated to: | Geert Uytterhoeven |
Headers | show |
Series | [PATCH/RFC,V2] iommu/ipmmu-vmsa: Disable IPMMU when address expansion is not needed | expand |
Hi Magnus, On Tue, Mar 19, 2019 at 2:24 PM Magnus Damm <magnus.damm@gmail.com> wrote: > From: Magnus Damm <damm+renesas@opensource.se> > > Add a memory bank location check to the whitelist handling. > > Signed-off-by: Magnus Damm <damm+renesas@opensource.se> Thanks for your patch! > --- 0001/drivers/iommu/ipmmu-vmsa.c > +++ work/drivers/iommu/ipmmu-vmsa.c 2019-03-19 21:04:43.000000000 +0900 > @@ -17,6 +17,7 @@ > #include <linux/io.h> > #include <linux/io-pgtable.h> > #include <linux/iommu.h> > +#include <linux/memblock.h> > #include <linux/of.h> > #include <linux/of_device.h> > #include <linux/of_iommu.h> > @@ -797,6 +798,12 @@ static bool ipmmu_slave_whitelist(struct > if (!soc_device_match(soc_rcar_gen3_whitelist)) > return false; > > + /* In case all system memory fits within 32 bits of physical space > + * then assume the IPMMU will not be needed for address expansion. > + */ > + if (memblock_end_of_DRAM() <= SZ_4G) > + return false; The IPMMU may still be useful for IO virtualization, with KVM+VFIO. Perhaps the check can be enhanced to keep it enabled when the CPU cores are running in HYP mode? Gr{oetje,eeting}s, Geert
Hi Geert, On Tue, Mar 19, 2019 at 10:34 PM Geert Uytterhoeven <geert@linux-m68k.org> wrote: > > Hi Magnus, > > On Tue, Mar 19, 2019 at 2:24 PM Magnus Damm <magnus.damm@gmail.com> wrote: > > From: Magnus Damm <damm+renesas@opensource.se> > > > > Add a memory bank location check to the whitelist handling. > > > > Signed-off-by: Magnus Damm <damm+renesas@opensource.se> > > Thanks for your patch! > > > --- 0001/drivers/iommu/ipmmu-vmsa.c > > +++ work/drivers/iommu/ipmmu-vmsa.c 2019-03-19 21:04:43.000000000 +0900 > > @@ -17,6 +17,7 @@ > > #include <linux/io.h> > > #include <linux/io-pgtable.h> > > #include <linux/iommu.h> > > +#include <linux/memblock.h> > > #include <linux/of.h> > > #include <linux/of_device.h> > > #include <linux/of_iommu.h> > > @@ -797,6 +798,12 @@ static bool ipmmu_slave_whitelist(struct > > if (!soc_device_match(soc_rcar_gen3_whitelist)) > > return false; > > > > + /* In case all system memory fits within 32 bits of physical space > > + * then assume the IPMMU will not be needed for address expansion. > > + */ > > + if (memblock_end_of_DRAM() <= SZ_4G) > > + return false; > > The IPMMU may still be useful for IO virtualization, with KVM+VFIO. You're right. > Perhaps the check can be enhanced to keep it enabled when the CPU cores > are running in HYP mode? That might indeed be useful. Next quarter perhaps you and I can discuss a bit about IO virtualization with KVM? Cheers, / magnus
--- 0001/drivers/iommu/ipmmu-vmsa.c +++ work/drivers/iommu/ipmmu-vmsa.c 2019-03-19 21:04:43.000000000 +0900 @@ -17,6 +17,7 @@ #include <linux/io.h> #include <linux/io-pgtable.h> #include <linux/iommu.h> +#include <linux/memblock.h> #include <linux/of.h> #include <linux/of_device.h> #include <linux/of_iommu.h> @@ -797,6 +798,12 @@ static bool ipmmu_slave_whitelist(struct if (!soc_device_match(soc_rcar_gen3_whitelist)) return false; + /* In case all system memory fits within 32 bits of physical space + * then assume the IPMMU will not be needed for address expansion. + */ + if (memblock_end_of_DRAM() <= SZ_4G) + return false; + /* Check whether this slave device can work with the IPMMU */ for (i = 0; i < ARRAY_SIZE(rcar_gen3_slave_whitelist); i++) { if (!strcmp(dev_name(dev), rcar_gen3_slave_whitelist[i]))