Loading Documentation/devicetree/bindings/pil/pil-q6v5-mss.txt +1 −0 Original line number Diff line number Diff line Loading @@ -76,6 +76,7 @@ Optional properties: - qcom,qdsp6v56-1-8-inrush-current: Boolean- Present if the qdsp version is V56 1.8 and has in-rush current issue. - qcom,qdsp6v61-1-1: Boolean- Present if the qdsp version is v61 1.1 - qcom,qdsp6v62-1-2: Boolean- Present if the qdsp version is v62 1.2 Example: qcom,mss@fc880000 { Loading drivers/soc/qcom/pil-q6v5.c +20 −1 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ #define QDSP6SS_BHS_STATUS 0x078 #define QDSP6SS_MEM_PWR_CTL 0x0B0 #define QDSP6SS_STRAP_ACC 0x110 #define QDSP6V62SS_BHS_STATUS 0x0C4 /* AXI Halt Register Offsets */ #define AXI_HALTREQ 0x0 Loading Loading @@ -359,6 +360,19 @@ static int __pil_q6v55_reset(struct pil_desc *pil) mb(); udelay(1); if (drv->qdsp6v62_1_2) { for (i = BHS_CHECK_MAX_LOOPS; i > 0; i--) { if (readl_relaxed(drv->reg_base + QDSP6V62SS_BHS_STATUS) & QDSP6v55_BHS_EN_REST_ACK) break; udelay(1); } if (!i) { pr_err("%s: BHS_EN_REST_ACK not set!\n", __func__); return -ETIMEDOUT; } } if (drv->qdsp6v61_1_1) { for (i = BHS_CHECK_MAX_LOOPS; i > 0; i--) { if (readl_relaxed(drv->reg_base + QDSP6SS_BHS_STATUS) Loading Loading @@ -443,7 +457,7 @@ static int __pil_q6v55_reset(struct pil_desc *pil) */ udelay(1); } } else if (drv->qdsp6v61_1_1) { } else if (drv->qdsp6v61_1_1 || drv->qdsp6v62_1_2) { /* Deassert QDSP6 compiler memory clamp */ val = readl_relaxed(drv->reg_base + QDSP6SS_PWR_CTL); val &= ~QDSP6v55_CLAMP_QMC_MEM; Loading Loading @@ -609,8 +623,13 @@ struct q6v5_data *pil_q6v5_init(struct platform_device *pdev) drv->qdsp6v56_1_8_inrush_current = of_property_read_bool( pdev->dev.of_node, "qcom,qdsp6v56-1-8-inrush-current"); drv->qdsp6v61_1_1 = of_property_read_bool(pdev->dev.of_node, "qcom,qdsp6v61-1-1"); drv->qdsp6v62_1_2 = of_property_read_bool(pdev->dev.of_node, "qcom,qdsp6v62-1-2"); drv->non_elf_image = of_property_read_bool(pdev->dev.of_node, "qcom,mba-image-is-not-elf"); Loading drivers/soc/qcom/pil-q6v5.h +1 −0 Original line number Diff line number Diff line Loading @@ -60,6 +60,7 @@ struct q6v5_data { bool qdsp6v56_1_8; bool qdsp6v56_1_8_inrush_current; bool qdsp6v61_1_1; bool qdsp6v62_1_2; bool non_elf_image; bool restart_reg_sec; bool override_acc; Loading Loading
Documentation/devicetree/bindings/pil/pil-q6v5-mss.txt +1 −0 Original line number Diff line number Diff line Loading @@ -76,6 +76,7 @@ Optional properties: - qcom,qdsp6v56-1-8-inrush-current: Boolean- Present if the qdsp version is V56 1.8 and has in-rush current issue. - qcom,qdsp6v61-1-1: Boolean- Present if the qdsp version is v61 1.1 - qcom,qdsp6v62-1-2: Boolean- Present if the qdsp version is v62 1.2 Example: qcom,mss@fc880000 { Loading
drivers/soc/qcom/pil-q6v5.c +20 −1 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ #define QDSP6SS_BHS_STATUS 0x078 #define QDSP6SS_MEM_PWR_CTL 0x0B0 #define QDSP6SS_STRAP_ACC 0x110 #define QDSP6V62SS_BHS_STATUS 0x0C4 /* AXI Halt Register Offsets */ #define AXI_HALTREQ 0x0 Loading Loading @@ -359,6 +360,19 @@ static int __pil_q6v55_reset(struct pil_desc *pil) mb(); udelay(1); if (drv->qdsp6v62_1_2) { for (i = BHS_CHECK_MAX_LOOPS; i > 0; i--) { if (readl_relaxed(drv->reg_base + QDSP6V62SS_BHS_STATUS) & QDSP6v55_BHS_EN_REST_ACK) break; udelay(1); } if (!i) { pr_err("%s: BHS_EN_REST_ACK not set!\n", __func__); return -ETIMEDOUT; } } if (drv->qdsp6v61_1_1) { for (i = BHS_CHECK_MAX_LOOPS; i > 0; i--) { if (readl_relaxed(drv->reg_base + QDSP6SS_BHS_STATUS) Loading Loading @@ -443,7 +457,7 @@ static int __pil_q6v55_reset(struct pil_desc *pil) */ udelay(1); } } else if (drv->qdsp6v61_1_1) { } else if (drv->qdsp6v61_1_1 || drv->qdsp6v62_1_2) { /* Deassert QDSP6 compiler memory clamp */ val = readl_relaxed(drv->reg_base + QDSP6SS_PWR_CTL); val &= ~QDSP6v55_CLAMP_QMC_MEM; Loading Loading @@ -609,8 +623,13 @@ struct q6v5_data *pil_q6v5_init(struct platform_device *pdev) drv->qdsp6v56_1_8_inrush_current = of_property_read_bool( pdev->dev.of_node, "qcom,qdsp6v56-1-8-inrush-current"); drv->qdsp6v61_1_1 = of_property_read_bool(pdev->dev.of_node, "qcom,qdsp6v61-1-1"); drv->qdsp6v62_1_2 = of_property_read_bool(pdev->dev.of_node, "qcom,qdsp6v62-1-2"); drv->non_elf_image = of_property_read_bool(pdev->dev.of_node, "qcom,mba-image-is-not-elf"); Loading
drivers/soc/qcom/pil-q6v5.h +1 −0 Original line number Diff line number Diff line Loading @@ -60,6 +60,7 @@ struct q6v5_data { bool qdsp6v56_1_8; bool qdsp6v56_1_8_inrush_current; bool qdsp6v61_1_1; bool qdsp6v62_1_2; bool non_elf_image; bool restart_reg_sec; bool override_acc; Loading