lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Wed, 19 Jul 2017 14:13:35 +0530 From: Varadarajan Narayanan <varada@...eaurora.org> To: bhelgaas@...gle.com, robh+dt@...nel.org, mark.rutland@....com, svarbanov@...sol.com, kishon@...com, sboyd@...eaurora.org, vivek.gautam@...eaurora.org, fengguang.wu@...el.com, weiyongjun1@...wei.com, linux-pci@...r.kernel.org, devicetree@...r.kernel.org, linux-kernel@...r.kernel.org, linux-arm-msm@...r.kernel.org Cc: Varadarajan Narayanan <varada@...eaurora.org> Subject: [PATCH v2 4/8] phy: qcom-qmp: Handle unavailable registers In some implementations of the QMP phy, some registers might not be present. Provide a way identify such registers and not access those registers. Signed-off-by: Varadarajan Narayanan <varada@...eaurora.org> --- drivers/phy/qualcomm/phy-qcom-qmp.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/drivers/phy/qualcomm/phy-qcom-qmp.c b/drivers/phy/qualcomm/phy-qcom-qmp.c index 97020ec..000ad1c 100644 --- a/drivers/phy/qualcomm/phy-qcom-qmp.c +++ b/drivers/phy/qualcomm/phy-qcom-qmp.c @@ -187,6 +187,8 @@ struct qmp_phy_init_tbl { .in_layout = 1, \ } +#define QPHY_REG_INVAL 0xffffffffu + /* set of registers with offsets different per-PHY */ enum qphy_reg_layout { /* Common block control registers */ @@ -676,15 +678,18 @@ static int qcom_qmp_phy_com_init(struct qcom_qmp *qmp) qphy_setbits(serdes, cfg->regs[QPHY_COM_START_CONTROL], SERDES_START | PCS_START); - status = serdes + cfg->regs[QPHY_COM_PCS_READY_STATUS]; - mask = cfg->mask_com_pcs_ready; - - ret = readl_poll_timeout(status, val, (val & mask), 10, - PHY_INIT_COMPLETE_TIMEOUT); - if (ret) { - dev_err(qmp->dev, - "phy common block init timed-out\n"); - goto err_com_init; + if (cfg->regs[QPHY_COM_PCS_READY_STATUS] != QPHY_REG_INVAL) { + status = serdes + cfg->regs[QPHY_COM_PCS_READY_STATUS]; + mask = cfg->mask_com_pcs_ready; + + ret = readl_poll_timeout(status, val, (val & mask), 10, + PHY_INIT_COMPLETE_TIMEOUT); + if (ret) { + dev_err(qmp->dev, + "%s: phy common block init timed-out\n", + __func__); + goto err_com_init; + } } } -- QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation
Powered by blists - more mailing lists