diff options
Diffstat (limited to 'drivers/dma/pl330.c')
| -rw-r--r-- | drivers/dma/pl330.c | 21 | 
1 files changed, 14 insertions, 7 deletions
diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c index e4feba6b03c..f5843bc80ba 100644 --- a/drivers/dma/pl330.c +++ b/drivers/dma/pl330.c @@ -1567,17 +1567,19 @@ static int pl330_submit_req(void *ch_id, struct pl330_req *r)  		goto xfer_exit;  	} -	/* Prefer Secure Channel */ -	if (!_manager_ns(thrd)) -		r->cfg->nonsecure = 0; -	else -		r->cfg->nonsecure = 1;  	/* Use last settings, if not provided */ -	if (r->cfg) +	if (r->cfg) { +		/* Prefer Secure Channel */ +		if (!_manager_ns(thrd)) +			r->cfg->nonsecure = 0; +		else +			r->cfg->nonsecure = 1; +  		ccr = _prepare_ccr(r->cfg); -	else +	} else {  		ccr = readl(regs + CC(thrd->id)); +	}  	/* If this req doesn't have valid xfer settings */  	if (!_is_valid(ccr)) { @@ -2928,6 +2930,11 @@ pl330_probe(struct amba_device *adev, const struct amba_id *id)  		num_chan = max_t(int, pi->pcfg.num_peri, pi->pcfg.num_chan);  	pdmac->peripherals = kzalloc(num_chan * sizeof(*pch), GFP_KERNEL); +	if (!pdmac->peripherals) { +		ret = -ENOMEM; +		dev_err(&adev->dev, "unable to allocate pdmac->peripherals\n"); +		goto probe_err5; +	}  	for (i = 0; i < num_chan; i++) {  		pch = &pdmac->peripherals[i];  |