[PATCH 42/133] [Jaunty SRU] ARM.imx51 Freescale:ENGR00111297 Fix vpu compiling error on mx31

Bryan Wu bryan.wu at canonical.com
Fri Jul 10 15:28:58 UTC 2009


Brad Figg wrote:
> Fix vpu compiling error on mx31 & restruct the codes
> 
> Signed-off-by: Robby Cai <r63905 at freescale.com>
> Signed-off-by: Brad Figg <brad.figg at canonical.com>
> ---
>  arch/arm/mach-mx51/devices.c |   15 ++++++++++-----
>  drivers/mxc/vpu/mxc_vpu.c    |   31 ++++++++++++++++++++-----------
>  2 files changed, 30 insertions(+), 16 deletions(-)
> 
> diff --git a/arch/arm/mach-mx51/devices.c b/arch/arm/mach-mx51/devices.c
> index ab86d1f..915a4f6 100644
> --- a/arch/arm/mach-mx51/devices.c
> +++ b/arch/arm/mach-mx51/devices.c
> @@ -275,11 +275,16 @@ static inline void mxc_init_ipu(void)
>  
>  #if defined(CONFIG_MXC_VPU) || defined(CONFIG_MXC_VPU_MODULE)
>  static struct resource vpu_resources[] = {
> -	{
> -	 .start = VPU_IRAM_BASE_ADDR,
> -	 .end = VPU_IRAM_BASE_ADDR + VPU_IRAM_SIZE,
> -	 .flags = IORESOURCE_MEM,
> -	 },
> +	[0] = {
> +	       .start = VPU_IRAM_BASE_ADDR,
> +	       .end = VPU_IRAM_BASE_ADDR + VPU_IRAM_SIZE,
> +	       .flags = IORESOURCE_MEM,
> +	       },
> +	[1] = {
> +	       .start = IO_ADDRESS(SRC_BASE_ADDR),
> +	       .end = IO_ADDRESS(SRC_BASE_ADDR),

SRC_BASE_ADDR will store a u32 register. So the length of this IORESOURCE should
be 4. This might be a bug, IMHO.

	.end = IO_ADDRESS(SRC_BASE_ADDR) + 4;

-Bryan

> +	       .flags = IORESOURCE_MEM,
> +	       },
>  };
>  
>  /*! Platform Data for MXC VPU */
> diff --git a/drivers/mxc/vpu/mxc_vpu.c b/drivers/mxc/vpu/mxc_vpu.c
> index ed8114e..ef95ba7 100644
> --- a/drivers/mxc/vpu/mxc_vpu.c
> +++ b/drivers/mxc/vpu/mxc_vpu.c
> @@ -69,6 +69,8 @@ static struct vpu_mem_desc user_data_mem = { 0 };
>  
>  /* IRAM setting */
>  static struct iram_setting iram;
> +/* store SRC base addr */
> +static u32 src_base_addr;
>  
>  /* implement the blocking ioctl */
>  static int codec_done = 0;
> @@ -423,15 +425,15 @@ static int vpu_ioctl(struct inode *inode, struct file *filp, u_int cmd,
>  		}
>  	case VPU_IOC_SYS_SW_RESET:
>  		{
> -			u32 reg;
> -
> -#define SW_VPU_RST_BIT	0x02
> -			reg = __raw_readl(IO_ADDRESS(SRC_BASE_ADDR));
> -			reg |= SW_VPU_RST_BIT;
> -			__raw_writel(reg, IO_ADDRESS(SRC_BASE_ADDR));
> -			while (__raw_readl(IO_ADDRESS(SRC_BASE_ADDR)) &
> -			       SW_VPU_RST_BIT)
> -				;
> +			if (cpu_is_mx37() || cpu_is_mx51()) {
> +				u32 reg;
> +
> +				reg = __raw_readl(src_base_addr);
> +				reg |= 0x02;	/* SW_VPU_RST_BIT */
> +				__raw_writel(reg, src_base_addr);
> +				while (__raw_readl(src_base_addr) & 0x02)
> +					;
> +			}
>  			break;
>  		}
>  	case VPU_IOC_REG_DUMP:
> @@ -551,7 +553,7 @@ static int vpu_dev_probe(struct platform_device *pdev)
>  		res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
>  		if (!res) {
>  			printk(KERN_ERR "vpu: unable to get VL2CC base\n");
> -			return -ENOENT;
> +			return -ENODEV;
>  		}
>  
>  		err = vl2cc_init(res->start);
> @@ -563,10 +565,17 @@ static int vpu_dev_probe(struct platform_device *pdev)
>  		res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
>  		if (!res) {
>  			printk(KERN_ERR "vpu: unable to get VPU IRAM base\n");
> -			return -ENOENT;
> +			return -ENODEV;
>  		}
>  		iram.start = res->start;
>  		iram.end = res->end;
> +
> +		res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
> +		if (!res) {
> +			printk(KERN_ERR "vpu: unable to get src base addr\n");
> +			return -ENODEV;
> +		}
> +		src_base_addr = res->start;
>  	}
>  
>  	vpu_major = register_chrdev(vpu_major, "mxc_vpu", &vpu_fops);




More information about the kernel-team mailing list