[PATCH 2/5] powerpc/qe: Make qe_reset() code path safe for repeated invocation

Kumar Gala galak at kernel.crashing.org
Fri Aug 28 15:34:50 EST 2009


On Aug 27, 2009, at 12:30 PM, Anton Vorontsov wrote:

>
> For MPC8569 CPUs we'll need to reset QE after each suspend, so make
> qe_reset() code path suitable for repeated invocation, that is:
>
> - Don't initialize rheap structures if already initialized;
> - Don't allocate muram for SDMA if already allocated, just  
> reinitialize
>  registers with previously allocated muram offset;
>
> Signed-off-by: Anton Vorontsov <avorontsov at ru.mvista.com>
> ---
> arch/powerpc/sysdev/cpm_common.c |    3 +++
> arch/powerpc/sysdev/qe_lib/qe.c  |   10 ++++++----
> 2 files changed, 9 insertions(+), 4 deletions(-)
>
> diff --git a/arch/powerpc/sysdev/cpm_common.c b/arch/powerpc/sysdev/ 
> cpm_common.c
> index e4b6d66..ddfca52 100644
> --- a/arch/powerpc/sysdev/cpm_common.c
> +++ b/arch/powerpc/sysdev/cpm_common.c
> @@ -81,6 +81,9 @@ int __init cpm_muram_init(void)
> 	int i = 0;
> 	int ret = 0;
>
> +	if (muram_pbase)
> +		return 0;
> +
> 	spin_lock_init(&cpm_muram_lock);
> 	/* initialize the info header */
> 	rh_init(&cpm_muram_info, 1,
> diff --git a/arch/powerpc/sysdev/qe_lib/qe.c b/arch/powerpc/sysdev/ 
> qe_lib/qe.c
> index b06564f..f485d5a 100644
> --- a/arch/powerpc/sysdev/qe_lib/qe.c
> +++ b/arch/powerpc/sysdev/qe_lib/qe.c
> @@ -317,16 +317,18 @@ EXPORT_SYMBOL(qe_put_snum);
> static int qe_sdma_init(void)
> {
> 	struct sdma __iomem *sdma = &qe_immr->sdma;
> -	unsigned long sdma_buf_offset;
> +	static unsigned long sdma_buf_offset;
>
> 	if (!sdma)
> 		return -ENODEV;
>
> 	/* allocate 2 internal temporary buffers (512 bytes size each) for
> 	 * the SDMA */
> - 	sdma_buf_offset = qe_muram_alloc(512 * 2, 4096);
> -	if (IS_ERR_VALUE(sdma_buf_offset))
> -		return -ENOMEM;
> +	if (!sdma_buf_offset) {
> +		sdma_buf_offset = qe_muram_alloc(512 * 2, 4096);
> +		if (IS_ERR_VALUE(sdma_buf_offset))

shouldn't we zero out sdma_buf_offset otherwise if we call this again  
we'll think its set.

> +			return -ENOMEM;
> +	}
>
> 	out_be32(&sdma->sdebcr, (u32) sdma_buf_offset & QE_SDEBCR_BA_MASK);
>  	out_be32(&sdma->sdmr, (QE_SDMR_GLB_1_MSK |
> -- 
> 1.6.3.3
>
> _______________________________________________
> Linuxppc-dev mailing list
> Linuxppc-dev at lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/linuxppc-dev



More information about the Linuxppc-dev mailing list