diff options
Diffstat (limited to 'drivers/net/ipa/ipa_mem.c')
| -rw-r--r-- | drivers/net/ipa/ipa_mem.c | 19 | 
1 files changed, 10 insertions, 9 deletions
| diff --git a/drivers/net/ipa/ipa_mem.c b/drivers/net/ipa/ipa_mem.c index f84c6830495a..9ec5af323f73 100644 --- a/drivers/net/ipa/ipa_mem.c +++ b/drivers/net/ipa/ipa_mem.c @@ -198,9 +198,12 @@ static bool ipa_mem_id_required(struct ipa *ipa, enum ipa_mem_id mem_id)  	case IPA_MEM_PDN_CONFIG:  	case IPA_MEM_STATS_QUOTA_MODEM: -	case IPA_MEM_STATS_TETHERING:  		return ipa->version >= IPA_VERSION_4_0; +	case IPA_MEM_STATS_TETHERING: +		return ipa->version >= IPA_VERSION_4_0 && +			ipa->version != IPA_VERSION_5_0; +  	default:  		return false;		/* Anything else is optional */  	} @@ -366,14 +369,6 @@ int ipa_mem_config(struct ipa *ipa)  		while (--canary_count);  	} -	/* Make sure filter and route table memory regions are valid */ -	if (!ipa_table_valid(ipa)) -		goto err_dma_free; - -	/* Validate memory-related properties relevant to immediate commands */ -	if (!ipa_cmd_data_valid(ipa)) -		goto err_dma_free; -  	/* Verify the microcontroller ring alignment (if defined) */  	mem = ipa_mem_find(ipa, IPA_MEM_UC_EVENT_RING);  	if (mem && mem->offset % 1024) { @@ -625,6 +620,12 @@ int ipa_mem_init(struct ipa *ipa, const struct ipa_mem_data *mem_data)  	ipa->mem_count = mem_data->local_count;  	ipa->mem = mem_data->local; +	/* Check the route and filter table memory regions */ +	if (!ipa_table_mem_valid(ipa, false)) +		return -EINVAL; +	if (!ipa_table_mem_valid(ipa, true)) +		return -EINVAL; +  	ret = dma_set_mask_and_coherent(&ipa->pdev->dev, DMA_BIT_MASK(64));  	if (ret) {  		dev_err(dev, "error %d setting DMA mask\n", ret); | 
