summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2017-02-09 22:09:23 -0800
committerGerrit - the friendly Code Review server <code-review@localhost>2017-02-09 22:09:23 -0800
commitcbbf109dc44a3ce60afa89e95571968cbd3f8f3b (patch)
tree17ad3967b220dd3c513e0243f4ee34243f4f2522
parentd8d3d2d37d89838428d73b55e82d0dd3690a1826 (diff)
parent969473a9e08bfdc2138d21dd36b2594171c3aae0 (diff)
Merge "icnss: Avoid DOMAIN_ATTR_ATOMIC setting during S1 bypass"
-rw-r--r--Documentation/devicetree/bindings/cnss/icnss.txt2
-rw-r--r--arch/arm/boot/dts/qcom/sdm630.dtsi1
-rw-r--r--arch/arm/boot/dts/qcom/sdm660.dtsi1
-rw-r--r--drivers/soc/qcom/icnss.c22
4 files changed, 19 insertions, 7 deletions
diff --git a/Documentation/devicetree/bindings/cnss/icnss.txt b/Documentation/devicetree/bindings/cnss/icnss.txt
index 15feda3b7407..a1cbf480890a 100644
--- a/Documentation/devicetree/bindings/cnss/icnss.txt
+++ b/Documentation/devicetree/bindings/cnss/icnss.txt
@@ -19,6 +19,7 @@ Required properties:
Optional properties:
- qcom,icnss-vadc: VADC handle for vph_pwr read APIs.
- qcom,icnss-adc_tm: VADC handle for vph_pwr notification APIs.
+ - qcom,smmu-s1-bypass: Boolean context flag to set SMMU to S1 bypass
Example:
@@ -43,4 +44,5 @@ Example:
<0 140 0 /* CE10 */ >,
<0 141 0 /* CE11 */ >;
qcom,wlan-msa-memory = <0x200000>;
+ qcom,smmu-s1-bypass;
};
diff --git a/arch/arm/boot/dts/qcom/sdm630.dtsi b/arch/arm/boot/dts/qcom/sdm630.dtsi
index 8d769ae45b76..9b7004a045d5 100644
--- a/arch/arm/boot/dts/qcom/sdm630.dtsi
+++ b/arch/arm/boot/dts/qcom/sdm630.dtsi
@@ -1458,6 +1458,7 @@
<0 424 0>, /* CE10 */
<0 425 0>; /* CE11 */
qcom,wlan-msa-memory = <0x100000>;
+ qcom,smmu-s1-bypass;
};
qcom,lpass@15700000 {
diff --git a/arch/arm/boot/dts/qcom/sdm660.dtsi b/arch/arm/boot/dts/qcom/sdm660.dtsi
index 18e3318f2219..6077699ebea9 100644
--- a/arch/arm/boot/dts/qcom/sdm660.dtsi
+++ b/arch/arm/boot/dts/qcom/sdm660.dtsi
@@ -1891,6 +1891,7 @@
<0 424 0>, /* CE10 */
<0 425 0>; /* CE11 */
qcom,wlan-msa-memory = <0x100000>;
+ qcom,smmu-s1-bypass;
};
qcom,lpass@15700000 {
diff --git a/drivers/soc/qcom/icnss.c b/drivers/soc/qcom/icnss.c
index f1ce71f05682..7d7d7eb78769 100644
--- a/drivers/soc/qcom/icnss.c
+++ b/drivers/soc/qcom/icnss.c
@@ -334,6 +334,7 @@ static struct icnss_priv {
struct ramdump_device *msa0_dump_dev;
bool is_wlan_mac_set;
struct icnss_wlan_mac_addr wlan_mac_addr;
+ bool bypass_s1_smmu;
} *penv;
static void icnss_pm_stay_awake(struct icnss_priv *priv)
@@ -2914,13 +2915,15 @@ static int icnss_smmu_init(struct icnss_priv *priv)
goto map_fail;
}
- ret = iommu_domain_set_attr(mapping->domain,
- DOMAIN_ATTR_ATOMIC,
- &atomic_ctx);
- if (ret < 0) {
- icnss_pr_err("Set atomic_ctx attribute failed, err = %d\n",
- ret);
- goto set_attr_fail;
+ if (!priv->bypass_s1_smmu) {
+ ret = iommu_domain_set_attr(mapping->domain,
+ DOMAIN_ATTR_ATOMIC,
+ &atomic_ctx);
+ if (ret < 0) {
+ icnss_pr_err("Set atomic_ctx attribute failed, err = %d\n",
+ ret);
+ goto set_attr_fail;
+ }
}
ret = iommu_domain_set_attr(mapping->domain,
@@ -3666,6 +3669,11 @@ static int icnss_probe(struct platform_device *pdev)
if (ret == -EPROBE_DEFER)
goto out;
+ if (of_property_read_bool(pdev->dev.of_node, "qcom,smmu-s1-bypass"))
+ priv->bypass_s1_smmu = true;
+
+ icnss_pr_dbg("SMMU S1 BYPASS = %d\n", priv->bypass_s1_smmu);
+
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "membase");
if (!res) {
icnss_pr_err("Memory base not found in DT\n");