Re: [PATCH v3 09/09] iommu/ipmmu-vmsa: Hook up r8a7795 DT matching code

From: Geert Uytterhoeven
Date: Wed Mar 08 2017 - 09:00:48 EST


Hi Magnus,

On Wed, Mar 8, 2017 at 12:02 PM, Magnus Damm <magnus.damm@xxxxxxxxx> wrote:
> From: Magnus Damm <damm+renesas@xxxxxxxxxxxxx>
>
> Tie in r8a7795 features and update the IOMMU_OF_DECLARE
> compat string to include the updated compat string.
>
> TODO:
> - Consider making use of iommu_fwspec_add_ids() for uTLB handling
> Needed to coexist with non-OF R-Car Gen2 somehow...
> - Break out stuff useful for R-Car Gen2 from this series
> Fix up the Gen2 IPMMU support code
> and/or
> Fold more stuff into the multi-arch series
> - Add support for sysfs and iommu_device_link()/unlink()
>
> Signed-off-by: Magnus Damm <damm+renesas@xxxxxxxxxxxxx>

> --- 0018/drivers/iommu/ipmmu-vmsa.c
> +++ work/drivers/iommu/ipmmu-vmsa.c 2017-03-08 19:11:53.600607110 +0900

> @@ -1043,6 +1048,17 @@ static struct iommu_group *ipmmu_find_gr
> return group;
> }
>
> +static bool ipmmu_slave_whitelist(struct device *dev)
> +{
> + /* By default, do not allow use of IPMMU */
> + return false;
> +}
> +
> +static const struct soc_device_attribute soc_r8a7795[] = {
> + { .soc_id = "r8a7795", },

If/when the whitelist is/becomes device/revision specific, you probably want
to store a pointer to the *_slave_whitelist() function in the .data member?

> + { /* sentinel */ }
> +};
> +
> static int ipmmu_of_xlate_dma(struct device *dev,
> struct of_phandle_args *spec)
> {
> @@ -1053,6 +1069,18 @@ static int ipmmu_of_xlate_dma(struct dev
> if (!of_device_is_available(spec->np))
> return -ENODEV;
>
> + /* Failing in ->attach_device() results in a hang, so make
> + * sure the root device is installed before going there
> + */
> + if (!__ipmmu_find_root()) {
> + dev_info(dev, "Unable to locate IPMMU root device\n");

dev_err?

> + return -ENODEV;
> + }
> +
> + /* For R-Car Gen3 use a white list to opt-in slave devices */
> + if (soc_device_match(soc_r8a7795) && !ipmmu_slave_whitelist(dev))
> + return -ENODEV;

Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds