Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp2240369imm; Mon, 28 May 2018 04:34:58 -0700 (PDT) X-Google-Smtp-Source: ADUXVKJP79OeCrLnBqYW+X6Ckv/X+qIFWvQ6r0N3vveEJnvQgf42kvwJmyA3dUEcW7G7FAsjeLbz X-Received: by 2002:a62:1c43:: with SMTP id c64-v6mr8449689pfc.176.1527507298675; Mon, 28 May 2018 04:34:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527507298; cv=none; d=google.com; s=arc-20160816; b=u1EOliQfcnhuTgQ09wtGPGxMHDdGrPPLiaN6HJmoGrFvWpryEyHAJ7tSxHqdl7t+dT 2T3naR46Ghb74n95+ozu77OXzH/BMLLwYLSXg6CGpPCjUgemrt2kxo4/7nGgVpDwPaIU nSnaFtS7qeuAylGDumvxCN4ZZcPgKi2GkesqMwPpADaxhlFxZaHpzYKRM6G23sb2IU2M pmyO4amD26tADGUMODf47xAIVh7tVfy6jaErvMm26sBeqxCKBEcqkvGdFQ0VhEATlJ9v j6ZN+0Kzs6PCkf/sPSS38RfwRP0HkYhJnXjU02eqYgzhsmi8QbZM9dxUPaFawGjIqAKI KI7Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:message-id:date:subject:cc:to:from:dkim-signature :arc-authentication-results; bh=TVM3tWq0gDEy5Ssu4yW8GyB5GEQ4sLuigXgk1GqcbQs=; b=L0NOi1upaRCjiL/LZk4Yfhe1o4N5qI1sf3z8pHNzlMGtXA+YffQdPn+rsE9bYMWJaL lM6fcyMd2y8UnqVxBNGJCyNKLUyUA5QBN93ZslbFq+sl6Oox/8Qc47GGZk+0r/Jfteew imcd4iAQ1j/lFX7NvgIV1qYprPY3KCmat7ri10a9F12TK9USB14kRuUEb9Hrp/01/bXk 55wYoxo+OQsTGz+qiUSchVXHDp7yAOJBpJAcZpBzoi6uBsGtwbJOMCIlegIcvVdNKm1L vG5VohsDhpN/FiaKk8/bl/XiuNgLwYM8nLwRhe84tGgbewMclHYMPCCXNvnaZAbDorFU kuBA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=Th9bjRPA; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id v16-v6si29164800pfn.77.2018.05.28.04.34.43; Mon, 28 May 2018 04:34:58 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=Th9bjRPA; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1424495AbeE1Ld4 (ORCPT + 99 others); Mon, 28 May 2018 07:33:56 -0400 Received: from mail.kernel.org ([198.145.29.99]:33298 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1424337AbeE1LN7 (ORCPT ); Mon, 28 May 2018 07:13:59 -0400 Received: from localhost (LFbn-1-12247-202.w90-92.abo.wanadoo.fr [90.92.61.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id D2A9620845; Mon, 28 May 2018 11:13:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1527506038; bh=iWUitRGMc6d89zX4qLIUoWUbePJiqj8pdm6WELGMVuA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Th9bjRPAVw05CkyUp8zsaQ1+Cfx4iMl+kixKq8Hkzpff/B+aZJJ5O1vUSGO/6sjFG dWGYNxP0pYQz0QCfLOYwnGiTVQBuDOi+tXUS72FFZ+jadAVRlNQiZjdz+kgb3TyFWq krW0Aa1TOazPcXv5GJ4Q8/JBy+4vrOCau8qGVDPw= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Srinivas Kandagatla , Vinod Koul , Sasha Levin Subject: [PATCH 4.16 219/272] dmaengine: qcom: bam_dma: get num-channels and num-ees from dt Date: Mon, 28 May 2018 12:04:12 +0200 Message-Id: <20180528100258.874087650@linuxfoundation.org> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180528100240.256525891@linuxfoundation.org> References: <20180528100240.256525891@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.16-stable review patch. If anyone has any objections, please let me know. ------------------ From: Srinivas Kandagatla [ Upstream commit 48d163b1aa6e7f650c0b7a4f9c61c387a6def868 ] When Linux is master of BAM, it can directly read registers to know number of supported channels, however when its remotely controlled reading these registers would trigger a crash if the BAM is not yet initialized or powered up on the remote side. This patch allows driver to read num-channels and num-ees from Device Tree for remotely controlled BAM. Signed-off-by: Srinivas Kandagatla Signed-off-by: Vinod Koul Signed-off-by: Sasha Levin Signed-off-by: Greg Kroah-Hartman --- drivers/dma/qcom/bam_dma.c | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) --- a/drivers/dma/qcom/bam_dma.c +++ b/drivers/dma/qcom/bam_dma.c @@ -393,6 +393,7 @@ struct bam_device { struct device_dma_parameters dma_parms; struct bam_chan *channels; u32 num_channels; + u32 num_ees; /* execution environment ID, from DT */ u32 ee; @@ -1128,15 +1129,19 @@ static int bam_init(struct bam_device *b u32 val; /* read revision and configuration information */ - val = readl_relaxed(bam_addr(bdev, 0, BAM_REVISION)) >> NUM_EES_SHIFT; - val &= NUM_EES_MASK; + if (!bdev->num_ees) { + val = readl_relaxed(bam_addr(bdev, 0, BAM_REVISION)); + bdev->num_ees = (val >> NUM_EES_SHIFT) & NUM_EES_MASK; + } /* check that configured EE is within range */ - if (bdev->ee >= val) + if (bdev->ee >= bdev->num_ees) return -EINVAL; - val = readl_relaxed(bam_addr(bdev, 0, BAM_NUM_PIPES)); - bdev->num_channels = val & BAM_NUM_PIPES_MASK; + if (!bdev->num_channels) { + val = readl_relaxed(bam_addr(bdev, 0, BAM_NUM_PIPES)); + bdev->num_channels = val & BAM_NUM_PIPES_MASK; + } if (bdev->controlled_remotely) return 0; @@ -1232,6 +1237,18 @@ static int bam_dma_probe(struct platform bdev->controlled_remotely = of_property_read_bool(pdev->dev.of_node, "qcom,controlled-remotely"); + if (bdev->controlled_remotely) { + ret = of_property_read_u32(pdev->dev.of_node, "num-channels", + &bdev->num_channels); + if (ret) + dev_err(bdev->dev, "num-channels unspecified in dt\n"); + + ret = of_property_read_u32(pdev->dev.of_node, "qcom,num-ees", + &bdev->num_ees); + if (ret) + dev_err(bdev->dev, "num-ees unspecified in dt\n"); + } + bdev->bamclk = devm_clk_get(bdev->dev, "bam_clk"); if (IS_ERR(bdev->bamclk)) return PTR_ERR(bdev->bamclk);