All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vinod Koul <vinod.koul-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
To: Will Deacon <will.deacon-5wv7dgnIgG8@public.gmane.org>
Cc: Jassi Brar
	<jaswinder.singh-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>,
	iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org,
	devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org
Subject: Re: [PATCH 1/9] dma: pl330: rip out broken, redundant ID probing
Date: Wed, 12 Jun 2013 11:01:30 +0530	[thread overview]
Message-ID: <20130612053130.GD4107@intel.com> (raw)
In-Reply-To: <1370889285-22799-2-git-send-email-will.deacon-5wv7dgnIgG8@public.gmane.org>

On Mon, Jun 10, 2013 at 07:34:37PM +0100, Will Deacon wrote:
> The PL330 driver probes the peripheral and primecell IDs of the device to
> make sure that it is indeed an AMBA PL330. However, it does this by
> making byte accesses to a device mapping of the word-aligned ID
> registers, which is either UNPREDICTABLE or generates an alignment fault
> (depending on the presence of the virtualisation extensions).
> 
> Rather than fix this code, we can actually rip most of it out and let
> the AMBA bus driver correctly do the probing for us.
> 
> Cc: Jassi Brar <jaswinder.singh-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
> Cc: Vinod Koul <vinod.koul-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
> Signed-off-by: Will Deacon <will.deacon-5wv7dgnIgG8@public.gmane.org>
Applied, thanks

--
~Vinod
> ---
>  drivers/dma/pl330.c | 27 +++------------------------
>  1 file changed, 3 insertions(+), 24 deletions(-)
> 
> diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c
> index 24e0754..22e2a8f 100644
> --- a/drivers/dma/pl330.c
> +++ b/drivers/dma/pl330.c
> @@ -157,7 +157,6 @@ enum pl330_reqtype {
>  #define PERIPH_REV_R0P0		0
>  #define PERIPH_REV_R1P0		1
>  #define PERIPH_REV_R1P1		2
> -#define PCELL_ID		0xff0
>  
>  #define CR0_PERIPH_REQ_SET	(1 << 0)
>  #define CR0_BOOT_EN_SET		(1 << 1)
> @@ -193,8 +192,6 @@ enum pl330_reqtype {
>  #define INTEG_CFG		0x0
>  #define PERIPH_ID_VAL		((PART << 0) | (DESIGNER << 12))
>  
> -#define PCELL_ID_VAL		0xb105f00d
> -
>  #define PL330_STATE_STOPPED		(1 << 0)
>  #define PL330_STATE_EXECUTING		(1 << 1)
>  #define PL330_STATE_WFE			(1 << 2)
> @@ -292,7 +289,6 @@ static unsigned cmd_line;
>  /* Populated by the PL330 core driver for DMA API driver's info */
>  struct pl330_config {
>  	u32	periph_id;
> -	u32	pcell_id;
>  #define DMAC_MODE_NS	(1 << 0)
>  	unsigned int	mode;
>  	unsigned int	data_bus_width:10; /* In number of bits */
> @@ -650,19 +646,6 @@ static inline bool _manager_ns(struct pl330_thread *thrd)
>  	return (pl330->pinfo->pcfg.mode & DMAC_MODE_NS) ? true : false;
>  }
>  
> -static inline u32 get_id(struct pl330_info *pi, u32 off)
> -{
> -	void __iomem *regs = pi->base;
> -	u32 id = 0;
> -
> -	id |= (readb(regs + off + 0x0) << 0);
> -	id |= (readb(regs + off + 0x4) << 8);
> -	id |= (readb(regs + off + 0x8) << 16);
> -	id |= (readb(regs + off + 0xc) << 24);
> -
> -	return id;
> -}
> -
>  static inline u32 get_revision(u32 periph_id)
>  {
>  	return (periph_id >> PERIPH_REV_SHIFT) & PERIPH_REV_MASK;
> @@ -1986,9 +1969,6 @@ static void read_dmac_config(struct pl330_info *pi)
>  	pi->pcfg.num_events = val;
>  
>  	pi->pcfg.irq_ns = readl(regs + CR3);
> -
> -	pi->pcfg.periph_id = get_id(pi, PERIPH_ID);
> -	pi->pcfg.pcell_id = get_id(pi, PCELL_ID);
>  }
>  
>  static inline void _reset_thread(struct pl330_thread *thrd)
> @@ -2098,10 +2078,8 @@ static int pl330_add(struct pl330_info *pi)
>  	regs = pi->base;
>  
>  	/* Check if we can handle this DMAC */
> -	if ((get_id(pi, PERIPH_ID) & 0xfffff) != PERIPH_ID_VAL
> -	   || get_id(pi, PCELL_ID) != PCELL_ID_VAL) {
> -		dev_err(pi->dev, "PERIPH_ID 0x%x, PCELL_ID 0x%x !\n",
> -			get_id(pi, PERIPH_ID), get_id(pi, PCELL_ID));
> +	if ((pi->pcfg.periph_id & 0xfffff) != PERIPH_ID_VAL) {
> +		dev_err(pi->dev, "PERIPH_ID 0x%x !\n", pi->pcfg.periph_id);
>  		return -EINVAL;
>  	}
>  
> @@ -2922,6 +2900,7 @@ pl330_probe(struct amba_device *adev, const struct amba_id *id)
>  	if (ret)
>  		return ret;
>  
> +	pi->pcfg.periph_id = adev->periphid;
>  	ret = pl330_add(pi);
>  	if (ret)
>  		goto probe_err1;
> -- 
> 1.8.2.2
> 

-- 

WARNING: multiple messages have this Message-ID (diff)
From: vinod.koul@intel.com (Vinod Koul)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 1/9] dma: pl330: rip out broken, redundant ID probing
Date: Wed, 12 Jun 2013 11:01:30 +0530	[thread overview]
Message-ID: <20130612053130.GD4107@intel.com> (raw)
In-Reply-To: <1370889285-22799-2-git-send-email-will.deacon@arm.com>

On Mon, Jun 10, 2013 at 07:34:37PM +0100, Will Deacon wrote:
> The PL330 driver probes the peripheral and primecell IDs of the device to
> make sure that it is indeed an AMBA PL330. However, it does this by
> making byte accesses to a device mapping of the word-aligned ID
> registers, which is either UNPREDICTABLE or generates an alignment fault
> (depending on the presence of the virtualisation extensions).
> 
> Rather than fix this code, we can actually rip most of it out and let
> the AMBA bus driver correctly do the probing for us.
> 
> Cc: Jassi Brar <jaswinder.singh@linaro.org>
> Cc: Vinod Koul <vinod.koul@intel.com>
> Signed-off-by: Will Deacon <will.deacon@arm.com>
Applied, thanks

--
~Vinod
> ---
>  drivers/dma/pl330.c | 27 +++------------------------
>  1 file changed, 3 insertions(+), 24 deletions(-)
> 
> diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c
> index 24e0754..22e2a8f 100644
> --- a/drivers/dma/pl330.c
> +++ b/drivers/dma/pl330.c
> @@ -157,7 +157,6 @@ enum pl330_reqtype {
>  #define PERIPH_REV_R0P0		0
>  #define PERIPH_REV_R1P0		1
>  #define PERIPH_REV_R1P1		2
> -#define PCELL_ID		0xff0
>  
>  #define CR0_PERIPH_REQ_SET	(1 << 0)
>  #define CR0_BOOT_EN_SET		(1 << 1)
> @@ -193,8 +192,6 @@ enum pl330_reqtype {
>  #define INTEG_CFG		0x0
>  #define PERIPH_ID_VAL		((PART << 0) | (DESIGNER << 12))
>  
> -#define PCELL_ID_VAL		0xb105f00d
> -
>  #define PL330_STATE_STOPPED		(1 << 0)
>  #define PL330_STATE_EXECUTING		(1 << 1)
>  #define PL330_STATE_WFE			(1 << 2)
> @@ -292,7 +289,6 @@ static unsigned cmd_line;
>  /* Populated by the PL330 core driver for DMA API driver's info */
>  struct pl330_config {
>  	u32	periph_id;
> -	u32	pcell_id;
>  #define DMAC_MODE_NS	(1 << 0)
>  	unsigned int	mode;
>  	unsigned int	data_bus_width:10; /* In number of bits */
> @@ -650,19 +646,6 @@ static inline bool _manager_ns(struct pl330_thread *thrd)
>  	return (pl330->pinfo->pcfg.mode & DMAC_MODE_NS) ? true : false;
>  }
>  
> -static inline u32 get_id(struct pl330_info *pi, u32 off)
> -{
> -	void __iomem *regs = pi->base;
> -	u32 id = 0;
> -
> -	id |= (readb(regs + off + 0x0) << 0);
> -	id |= (readb(regs + off + 0x4) << 8);
> -	id |= (readb(regs + off + 0x8) << 16);
> -	id |= (readb(regs + off + 0xc) << 24);
> -
> -	return id;
> -}
> -
>  static inline u32 get_revision(u32 periph_id)
>  {
>  	return (periph_id >> PERIPH_REV_SHIFT) & PERIPH_REV_MASK;
> @@ -1986,9 +1969,6 @@ static void read_dmac_config(struct pl330_info *pi)
>  	pi->pcfg.num_events = val;
>  
>  	pi->pcfg.irq_ns = readl(regs + CR3);
> -
> -	pi->pcfg.periph_id = get_id(pi, PERIPH_ID);
> -	pi->pcfg.pcell_id = get_id(pi, PCELL_ID);
>  }
>  
>  static inline void _reset_thread(struct pl330_thread *thrd)
> @@ -2098,10 +2078,8 @@ static int pl330_add(struct pl330_info *pi)
>  	regs = pi->base;
>  
>  	/* Check if we can handle this DMAC */
> -	if ((get_id(pi, PERIPH_ID) & 0xfffff) != PERIPH_ID_VAL
> -	   || get_id(pi, PCELL_ID) != PCELL_ID_VAL) {
> -		dev_err(pi->dev, "PERIPH_ID 0x%x, PCELL_ID 0x%x !\n",
> -			get_id(pi, PERIPH_ID), get_id(pi, PCELL_ID));
> +	if ((pi->pcfg.periph_id & 0xfffff) != PERIPH_ID_VAL) {
> +		dev_err(pi->dev, "PERIPH_ID 0x%x !\n", pi->pcfg.periph_id);
>  		return -EINVAL;
>  	}
>  
> @@ -2922,6 +2900,7 @@ pl330_probe(struct amba_device *adev, const struct amba_id *id)
>  	if (ret)
>  		return ret;
>  
> +	pi->pcfg.periph_id = adev->periphid;
>  	ret = pl330_add(pi);
>  	if (ret)
>  		goto probe_err1;
> -- 
> 1.8.2.2
> 

-- 

  parent reply	other threads:[~2013-06-12  5:31 UTC|newest]

Thread overview: 97+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-10 18:34 [PATCH 0/9] Add support for ARM SMMU architectures 1 and 2 Will Deacon
2013-06-10 18:34 ` Will Deacon
     [not found] ` <1370889285-22799-1-git-send-email-will.deacon-5wv7dgnIgG8@public.gmane.org>
2013-06-10 18:34   ` [PATCH 1/9] dma: pl330: rip out broken, redundant ID probing Will Deacon
2013-06-10 18:34     ` Will Deacon
     [not found]     ` <1370889285-22799-2-git-send-email-will.deacon-5wv7dgnIgG8@public.gmane.org>
2013-06-11  4:37       ` Jassi Brar
2013-06-11 22:31       ` Grant Likely
2013-06-11 22:31         ` Grant Likely
2013-06-12  5:31       ` Vinod Koul [this message]
2013-06-12  5:31         ` Vinod Koul
2013-06-11  4:40     ` Jassi Brar
2013-06-11  4:40       ` Jassi Brar
     [not found]       ` <CAJe_Zhc1UoTC4q4oaW=dzyi_10Q7EoezoT=G8_v+yCmBxV75+A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-06-11  8:45         ` Will Deacon
2013-06-11  8:45           ` Will Deacon
2013-06-10 18:34   ` [PATCH 2/9] dma: pl330: use dma_addr_t for describing bus addresses Will Deacon
2013-06-10 18:34     ` Will Deacon
     [not found]     ` <1370889285-22799-3-git-send-email-will.deacon-5wv7dgnIgG8@public.gmane.org>
2013-06-11  4:37       ` Jassi Brar
     [not found]         ` <CAJe_ZheKMVQgq42Vx5N1TXXdgFJ2sp50ixU30A7beXhmSVHnZQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-06-12  5:31           ` Vinod Koul
2013-06-12  5:31             ` Vinod Koul
2013-06-11 22:32       ` Grant Likely
2013-06-11 22:32         ` Grant Likely
2013-06-11  4:39     ` Jassi Brar
2013-06-11  4:39       ` Jassi Brar
2013-06-10 18:34   ` [PATCH 3/9] ARM: dma-mapping: convert DMA direction into IOMMU protection attributes Will Deacon
2013-06-10 18:34     ` Will Deacon
2013-06-19  8:37     ` Marek Szyprowski
2013-06-19  8:37       ` Marek Szyprowski
     [not found]       ` <51C16DAF.1090205-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
2013-06-19  8:52         ` Will Deacon
2013-06-19  8:52           ` Will Deacon
     [not found]           ` <20130619085202.GC20351-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2013-06-19  8:57             ` Marek Szyprowski
2013-06-19  8:57               ` Marek Szyprowski
     [not found]     ` <1370889285-22799-4-git-send-email-will.deacon-5wv7dgnIgG8@public.gmane.org>
2013-06-25 10:12       ` Hiroshi Doyu
2013-06-25 10:12         ` Hiroshi Doyu
     [not found]         ` <20130625131215.d3cea2a5668a3d41dbbeb064-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-06-25 11:37           ` Will Deacon
2013-06-25 11:37             ` Will Deacon
     [not found]             ` <20130625113714.GF31838-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2013-06-25 11:52               ` Hiroshi Doyu
2013-06-25 11:52                 ` Hiroshi Doyu
2013-06-25 11:52                 ` Hiroshi Doyu
     [not found]                 ` <20130625.145226.1632119404634300971.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-06-25 12:34                   ` Will Deacon
2013-06-25 12:34                     ` Will Deacon
2013-06-10 18:34   ` [PATCH 4/9] ARM: dma-mapping: NULLify dev->archdata.mapping pointer on detach Will Deacon
2013-06-10 18:34     ` Will Deacon
     [not found]     ` <1370889285-22799-5-git-send-email-will.deacon-5wv7dgnIgG8@public.gmane.org>
2013-06-11  5:34       ` Hiroshi Doyu
2013-06-11  5:34         ` Hiroshi Doyu
     [not found]         ` <20130611.083455.1500863288897785600.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-06-11  8:50           ` Will Deacon
2013-06-11  8:50             ` Will Deacon
     [not found]             ` <20130611085015.GC24729-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2013-06-11  9:39               ` Hiroshi Doyu
2013-06-11  9:39                 ` Hiroshi Doyu
     [not found]                 ` <20130611123933.4d278ff4e056f395788ad060-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-06-19  8:59                   ` Marek Szyprowski
2013-06-19  8:59                     ` Marek Szyprowski
2013-06-10 18:34   ` [PATCH 5/9] arm64: pgtable: use pte_index instead of __pte_index Will Deacon
2013-06-10 18:34     ` Will Deacon
2013-06-10 18:34   ` [PATCH 6/9] arm64: device: add iommu pointer to device archdata Will Deacon
2013-06-10 18:34     ` Will Deacon
2013-06-10 18:34   ` [PATCH 7/9] documentation: iommu: add description of ARM System MMU binding Will Deacon
2013-06-10 18:34     ` Will Deacon
     [not found]     ` <1370889285-22799-8-git-send-email-will.deacon-5wv7dgnIgG8@public.gmane.org>
2013-06-12  8:44       ` Grant Likely
2013-06-12  8:44         ` Grant Likely
2013-06-20 20:08       ` Joerg Roedel
2013-06-20 20:08         ` Joerg Roedel
     [not found]         ` <20130620200845.GF11309-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
2013-06-21  9:57           ` Will Deacon
2013-06-21  9:57             ` Will Deacon
     [not found]             ` <20130621095729.GA7766-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2013-06-21 13:55               ` Joerg Roedel
2013-06-21 13:55                 ` Joerg Roedel
     [not found]                 ` <20130621135507.GI11309-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
2013-06-21 16:41                   ` Will Deacon
2013-06-21 16:41                     ` Will Deacon
2013-06-25 19:18       ` Stuart Yoder
2013-06-25 19:18         ` Stuart Yoder
     [not found]         ` <CALRxmdBxFWoRKv+bUu8VEwNNcAJUej9jM2V8N0rrqrr_Vpe8fQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-06-26 13:39           ` Will Deacon
2013-06-26 13:39             ` Will Deacon
     [not found]             ` <20130626133941.GD7417-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2013-06-26 16:19               ` Stuart Yoder
2013-06-26 16:19                 ` Stuart Yoder
     [not found]                 ` <CALRxmdCycFK2wW=C4aU79mudSaT+2vU8nzXxepdstubg+YSdQg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-06-26 17:42                   ` Will Deacon
2013-06-26 17:42                     ` Will Deacon
     [not found]                     ` <20130626174231.GH10333-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2013-06-27 18:22                       ` Stuart Yoder
2013-06-27 18:22                         ` Stuart Yoder
     [not found]                         ` <CALRxmdD5fyp06xW+z=rWagJc_bcJmpr1H9Zbdf=xbg9cCzvVfw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-06-28  9:06                           ` Will Deacon
2013-06-28  9:06                             ` Will Deacon
     [not found]                             ` <20130628090635.GB29002-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2013-06-28 16:03                               ` Stuart Yoder
2013-06-28 16:03                                 ` Stuart Yoder
2013-06-10 18:34   ` [PATCH 8/9] iommu: add support for ARM Ltd. System MMU architecture Will Deacon
2013-06-10 18:34     ` Will Deacon
     [not found]     ` <1370889285-22799-9-git-send-email-will.deacon-5wv7dgnIgG8@public.gmane.org>
2013-06-20 21:26       ` Joerg Roedel
2013-06-20 21:26         ` Joerg Roedel
     [not found]         ` <20130620212646.GG11309-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
2013-06-21 10:23           ` Will Deacon
2013-06-21 10:23             ` Will Deacon
     [not found]             ` <20130621102318.GB7766-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2013-06-21 14:13               ` Joerg Roedel
2013-06-21 14:13                 ` Joerg Roedel
2013-06-21 15:00                 ` Will Deacon
2013-06-21 15:00                   ` Will Deacon
     [not found]                   ` <20130621150006.GG7766-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2013-06-21 15:30                     ` Joerg Roedel
2013-06-21 15:30                       ` Joerg Roedel
     [not found]                       ` <20130621153044.GL11309-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
2013-06-21 16:40                         ` Will Deacon
2013-06-21 16:40                           ` Will Deacon
2013-06-10 18:34   ` [PATCH 9/9] MAINTAINERS: add entry for ARM system MMU driver Will Deacon
2013-06-10 18:34     ` Will Deacon
     [not found]     ` <1370889285-22799-10-git-send-email-will.deacon-5wv7dgnIgG8@public.gmane.org>
2013-06-12  8:45       ` Grant Likely
2013-06-12  8:45         ` Grant Likely

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=20130612053130.GD4107@intel.com \
    --to=vinod.koul-ral2jqcrhueavxtiumwx3w@public.gmane.org \
    --cc=devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org \
    --cc=iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
    --cc=jaswinder.singh-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
    --cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
    --cc=will.deacon-5wv7dgnIgG8@public.gmane.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.