SUPERH platform development
 help / color / mirror / Atom feed
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: linux-sh@vger.kernel.org
Subject: Re: [PATCH] Gen2 IPMMU and DU prototype
Date: Thu, 01 Oct 2015 14:30:24 +0000	[thread overview]
Message-ID: <4286267.yRqW5QN1c3@avalon> (raw)
In-Reply-To: <20150930142242.25755.81946.sendpatchset@little-apple>

Hi Magnus,

Thank you for the patch.

On Wednesday 30 September 2015 23:22:42 Magnus Damm wrote:
> From: Magnus Damm <damm+renesas@opensource.se>
> 
> Here is a simple hack to enable the IPMMU on R-Car Gen2.
> 
> The VGA port on r8a7790 Lager may be driven by the DU
> and the IPMMU via the modetest utility to output some
> test image.
> 
> Actually the r8a7790 DU device is connected to the
> IPMMU using two separate uTLBs, but the DU driver
> is currently supporting all DU instances using a
> single device. To make testing easily the r8a7790 DU
> driver code is with this patch hacked to just cover
> a single DU instance with a single IPMMU uTLB.

You can reference multiple uTLBs in the DT ipmmus property. The ipmmu-vmsa 
driver currently requires all uTLBs to belong to the same IPMMU instance, 
which shouldn't be an issue here.

> The map/umap debug printk() will show you if the IPMMU
> is used or not. Another way could be to XOR the physical
> address in the map routine to adjust the test image.
> 
> Several sources have told me that the DU on Lager is not
> working as expected. With this hack (with or without IPMMU)
> at least the VGA output seems fine. So it would be good
> to look into HDMI and LVDS as well as unmodified VGA
> support for the DU on the Lager board.
> 
> Also, we need to figure out how to modify the DU driver
> to support multiple uTLBs.
> 
> Not for upstream merge.
> 
> Not-Yet-Signed-off-by: Magnus Damm <damm+renesas@opensource.se>
> ---
> 
>  arch/arm/boot/dts/r8a7790.dtsi        |    3 ++-
>  arch/arm/boot/dts/r8a7791.dtsi        |    3 ++-
>  arch/arm/mm/dma-mapping.c             |    4 ++--
>  drivers/gpu/drm/rcar-du/rcar_du_drv.c |    6 +++---
>  drivers/iommu/ipmmu-vmsa.c            |    8 ++++++--
>  drivers/of/device.c                   |    6 +++---
>  6 files changed, 18 insertions(+), 12 deletions(-)
> 
> --- 0001/arch/arm/boot/dts/r8a7790.dtsi
> +++ work/arch/arm/boot/dts/r8a7790.dtsi	2015-09-29 15:04:37.540513000 +0900
> @@ -882,6 +882,7 @@
>  			 <&mstp7_clks R8A7790_CLK_LVDS0>,
>  			 <&mstp7_clks R8A7790_CLK_LVDS1>;
>  		clock-names = "du.0", "du.1", "du.2", "lvds.0", "lvds.1";
> +		iommus = <&ipmmu_mx 15>;
>  		status = "disabled";
> 
>  		ports {
> @@ -1805,7 +1806,7 @@
>  		interrupts = <0 222 IRQ_TYPE_LEVEL_HIGH>,
>  			     <0 221 IRQ_TYPE_LEVEL_HIGH>;
>  		#iommu-cells = <1>;
> -		status = "disabled";
> +		status = "okay";
>  	};
> 
>  	ipmmu_rt: mmu@ffc80000 {
> --- 0001/arch/arm/boot/dts/r8a7791.dtsi
> +++ work/arch/arm/boot/dts/r8a7791.dtsi	2015-09-29 14:15:26.610513000 +0900
> @@ -919,6 +919,7 @@
>  			 <&mstp7_clks R8A7791_CLK_DU1>,
>  			 <&mstp7_clks R8A7791_CLK_LVDS0>;
>  		clock-names = "du.0", "du.1", "lvds.0";
> +		iommus = <&ipmmu_mx 15>;
>  		status = "disabled";
> 
>  		ports {
> @@ -1618,7 +1619,7 @@
>  		interrupts = <0 222 IRQ_TYPE_LEVEL_HIGH>,
>  			     <0 221 IRQ_TYPE_LEVEL_HIGH>;
>  		#iommu-cells = <1>;
> -		status = "disabled";
> +		status = "okay";
>  	};
> 
>  	ipmmu_rt: mmu@ffc80000 {
> --- 0001/arch/arm/mm/dma-mapping.c
> +++ work/arch/arm/mm/dma-mapping.c	2015-09-29 14:58:51.150513000 +0900
> @@ -1998,7 +1998,7 @@ static int __arm_iommu_attach_device(str
>  	kref_get(&mapping->kref);
>  	to_dma_iommu_mapping(dev) = mapping;
> 
> -	pr_debug("Attached IOMMU controller to %s device.\n", dev_name(dev));
> +	pr_info("Attached IOMMU controller to %s device.\n", dev_name(dev));
>  	return 0;
>  }
> 
> @@ -2043,7 +2043,7 @@ static void __arm_iommu_detach_device(st
>  	kref_put(&mapping->kref, release_iommu_mapping);
>  	to_dma_iommu_mapping(dev) = NULL;
> 
> -	pr_debug("Detached IOMMU controller from %s device.\n", dev_name(dev));
> +	pr_info("Detached IOMMU controller from %s device.\n", dev_name(dev));
>  }
> 
>  /**
> --- 0001/drivers/gpu/drm/rcar-du/rcar_du_drv.c
> +++ work/drivers/gpu/drm/rcar-du/rcar_du_drv.c	2015-09-29 
15:05:31.520513000
> +0900 @@ -60,13 +60,13 @@ static const struct rcar_du_device_info
>  	.features = RCAR_DU_FEATURE_CRTC_IRQ_CLOCK
> 
>  		  | RCAR_DU_FEATURE_EXT_CTRL_REGS,
> 
>  	.quirks = RCAR_DU_QUIRK_ALIGN_128B | RCAR_DU_QUIRK_LVDS_LANES,
> -	.num_crtcs = 3,
> +	.num_crtcs = 2,
>  	.routes = {
>  		/* R8A7790 has one RGB output, two LVDS outputs and one
>  		 * (currently unsupported) TCON output.
>  		 */
>  		[RCAR_DU_OUTPUT_DPAD0] = {
> -			.possible_crtcs = BIT(2) | BIT(1) | BIT(0),
> +			.possible_crtcs = BIT(1) | BIT(0),
>  			.encoder_type = DRM_MODE_ENCODER_NONE,
>  			.port = 0,
>  		},
> @@ -76,7 +76,7 @@ static const struct rcar_du_device_info
>  			.port = 1,
>  		},
>  		[RCAR_DU_OUTPUT_LVDS1] = {
> -			.possible_crtcs = BIT(2) | BIT(1),
> +			.possible_crtcs = BIT(1),
>  			.encoder_type = DRM_MODE_ENCODER_LVDS,
>  			.port = 2,
>  		},
> --- 0001/drivers/iommu/ipmmu-vmsa.c
> +++ work/drivers/iommu/ipmmu-vmsa.c	2015-09-29 15:12:31.610513000 +0900
> @@ -7,7 +7,7 @@
>   * it under the terms of the GNU General Public License as published by
>   * the Free Software Foundation; version 2 of the License.
>   */
> -
> +#define DEBUG
>  #include <linux/delay.h>
>  #include <linux/dma-mapping.h>
>  #include <linux/err.h>
> @@ -544,9 +544,11 @@ static int ipmmu_map(struct iommu_domain
>  {
>  	struct ipmmu_vmsa_domain *domain = to_vmsa_domain(io_domain);
> 
> +	printk("xxx map 0x%08lx <-> %pad %zu\n", iova, &paddr, size);
> +
>  	if (!domain)
>  		return -ENODEV;
> -
> +
>  	return domain->iop->map(domain->iop, iova, paddr, size, prot);
>  }
> 
> @@ -555,6 +557,8 @@ static size_t ipmmu_unmap(struct iommu_d
>  {
>  	struct ipmmu_vmsa_domain *domain = to_vmsa_domain(io_domain);
> 
> +	printk("xxx unmap 0x%08lx %zu\n", iova, size);
> +
>  	return domain->iop->unmap(domain->iop, iova, size);
>  }
> 
> --- 0001/drivers/of/device.c
> +++ work/drivers/of/device.c	2015-09-29 15:00:10.680513000 +0900
> @@ -124,7 +124,7 @@ void of_dma_configure(struct device *dev
>  			dev_err(dev, "Adjusted size 0x%llx invalid\n", size);
>  			return;
>  		}
> -		dev_dbg(dev, "dma_pfn_offset(%#08lx)\n", offset);
> +		dev_info(dev, "dma_pfn_offset(%#08lx)\n", offset);
>  	}
> 
>  	dev->dma_pfn_offset = offset;
> @@ -139,11 +139,11 @@ void of_dma_configure(struct device *dev
>  			     DMA_BIT_MASK(ilog2(dma_addr + size)));
> 
>  	coherent = of_dma_is_coherent(np);
> -	dev_dbg(dev, "device is%sdma coherent\n",
> +	dev_info(dev, "device is%sdma coherent\n",
>  		coherent ? " " : " not ");
> 
>  	iommu = of_iommu_configure(dev, np);
> -	dev_dbg(dev, "device is%sbehind an iommu\n",
> +	dev_info(dev, "device is%sbehind an iommu\n",
>  		iommu ? " " : " not ");
> 
>  	arch_setup_dma_ops(dev, dma_addr, size, iommu, coherent);

-- 
Regards,

Laurent Pinchart


  reply	other threads:[~2015-10-01 14:30 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-30 14:22 [PATCH] Gen2 IPMMU and DU prototype Magnus Damm
2015-10-01 14:30 ` Laurent Pinchart [this message]
2015-10-02  3:12 ` Magnus Damm
2015-10-02  8:13 ` Laurent Pinchart

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=4286267.yRqW5QN1c3@avalon \
    --to=laurent.pinchart@ideasonboard.com \
    --cc=linux-sh@vger.kernel.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