• Home
  • Raw
  • Download

Lines Matching full:qmp

25 #include "phy-qcom-qmp.h"
666 * @qmp: QMP phy to which this lane belongs
677 struct qcom_qmp *qmp; member
682 * struct qcom_qmp - structure holding QMP phy block attributes
940 static int qcom_qmp_phy_com_init(struct qcom_qmp *qmp) in qcom_qmp_phy_com_init() argument
942 const struct qmp_phy_cfg *cfg = qmp->cfg; in qcom_qmp_phy_com_init()
943 void __iomem *serdes = qmp->serdes; in qcom_qmp_phy_com_init()
944 void __iomem *dp_com = qmp->dp_com; in qcom_qmp_phy_com_init()
947 mutex_lock(&qmp->phy_mutex); in qcom_qmp_phy_com_init()
948 if (qmp->init_count++) { in qcom_qmp_phy_com_init()
949 mutex_unlock(&qmp->phy_mutex); in qcom_qmp_phy_com_init()
954 ret = regulator_bulk_enable(cfg->num_vregs, qmp->vregs); in qcom_qmp_phy_com_init()
956 dev_err(qmp->dev, "failed to enable regulators, err=%d\n", ret); in qcom_qmp_phy_com_init()
961 ret = reset_control_assert(qmp->resets[i]); in qcom_qmp_phy_com_init()
963 dev_err(qmp->dev, "%s reset assert failed\n", in qcom_qmp_phy_com_init()
970 ret = reset_control_deassert(qmp->resets[i]); in qcom_qmp_phy_com_init()
972 dev_err(qmp->dev, "%s reset deassert failed\n", in qcom_qmp_phy_com_init()
973 qmp->cfg->reset_list[i]); in qcom_qmp_phy_com_init()
978 ret = clk_bulk_prepare_enable(cfg->num_clks, qmp->clks); in qcom_qmp_phy_com_init()
980 dev_err(qmp->dev, "failed to enable clks, err=%d\n", ret); in qcom_qmp_phy_com_init()
991 /* override hardware control for reset of qmp phy */ in qcom_qmp_phy_com_init()
999 /* bring both QMP USB and QMP DP PHYs PCS block out of reset */ in qcom_qmp_phy_com_init()
1023 dev_err(qmp->dev, in qcom_qmp_phy_com_init()
1029 mutex_unlock(&qmp->phy_mutex); in qcom_qmp_phy_com_init()
1034 clk_bulk_disable_unprepare(cfg->num_clks, qmp->clks); in qcom_qmp_phy_com_init()
1037 reset_control_assert(qmp->resets[i]); in qcom_qmp_phy_com_init()
1039 regulator_bulk_disable(cfg->num_vregs, qmp->vregs); in qcom_qmp_phy_com_init()
1041 mutex_unlock(&qmp->phy_mutex); in qcom_qmp_phy_com_init()
1046 static int qcom_qmp_phy_com_exit(struct qcom_qmp *qmp) in qcom_qmp_phy_com_exit() argument
1048 const struct qmp_phy_cfg *cfg = qmp->cfg; in qcom_qmp_phy_com_exit()
1049 void __iomem *serdes = qmp->serdes; in qcom_qmp_phy_com_exit()
1052 mutex_lock(&qmp->phy_mutex); in qcom_qmp_phy_com_exit()
1053 if (--qmp->init_count) { in qcom_qmp_phy_com_exit()
1054 mutex_unlock(&qmp->phy_mutex); in qcom_qmp_phy_com_exit()
1068 reset_control_assert(qmp->resets[i]); in qcom_qmp_phy_com_exit()
1070 clk_bulk_disable_unprepare(cfg->num_clks, qmp->clks); in qcom_qmp_phy_com_exit()
1072 regulator_bulk_disable(cfg->num_vregs, qmp->vregs); in qcom_qmp_phy_com_exit()
1074 mutex_unlock(&qmp->phy_mutex); in qcom_qmp_phy_com_exit()
1083 struct qcom_qmp *qmp = qphy->qmp; in qcom_qmp_phy_init() local
1084 const struct qmp_phy_cfg *cfg = qmp->cfg; in qcom_qmp_phy_init()
1088 void __iomem *dp_com = qmp->dp_com; in qcom_qmp_phy_init()
1093 dev_vdbg(qmp->dev, "Initializing QMP phy\n"); in qcom_qmp_phy_init()
1095 ret = qcom_qmp_phy_com_init(qmp); in qcom_qmp_phy_init()
1102 dev_err(qmp->dev, "lane%d reset deassert failed\n", in qcom_qmp_phy_init()
1110 dev_err(qmp->dev, "pipe_clk enable failed err=%d\n", ret); in qcom_qmp_phy_init()
1151 dev_err(qmp->dev, "phy initialization timed-out\n"); in qcom_qmp_phy_init()
1154 qmp->phy_initialized = true; in qcom_qmp_phy_init()
1164 qcom_qmp_phy_com_exit(qmp); in qcom_qmp_phy_init()
1172 struct qcom_qmp *qmp = qphy->qmp; in qcom_qmp_phy_exit() local
1173 const struct qmp_phy_cfg *cfg = qmp->cfg; in qcom_qmp_phy_exit()
1189 qcom_qmp_phy_com_exit(qmp); in qcom_qmp_phy_exit()
1191 qmp->phy_initialized = false; in qcom_qmp_phy_exit()
1199 struct qcom_qmp *qmp = qphy->qmp; in qcom_qmp_phy_set_mode() local
1201 qmp->mode = mode; in qcom_qmp_phy_set_mode()
1208 struct qcom_qmp *qmp = qphy->qmp; in qcom_qmp_phy_enable_autonomous_mode() local
1209 const struct qmp_phy_cfg *cfg = qmp->cfg; in qcom_qmp_phy_enable_autonomous_mode()
1214 if (qmp->mode == PHY_MODE_USB_HOST_SS || in qcom_qmp_phy_enable_autonomous_mode()
1215 qmp->mode == PHY_MODE_USB_DEVICE_SS) in qcom_qmp_phy_enable_autonomous_mode()
1238 struct qcom_qmp *qmp = qphy->qmp; in qcom_qmp_phy_disable_autonomous_mode() local
1239 const struct qmp_phy_cfg *cfg = qmp->cfg; in qcom_qmp_phy_disable_autonomous_mode()
1257 struct qcom_qmp *qmp = dev_get_drvdata(dev); in qcom_qmp_phy_runtime_suspend() local
1258 struct qmp_phy *qphy = qmp->phys[0]; in qcom_qmp_phy_runtime_suspend()
1259 const struct qmp_phy_cfg *cfg = qmp->cfg; in qcom_qmp_phy_runtime_suspend()
1261 dev_vdbg(dev, "Suspending QMP phy, mode:%d\n", qmp->mode); in qcom_qmp_phy_runtime_suspend()
1267 if (!qmp->phy_initialized) { in qcom_qmp_phy_runtime_suspend()
1275 clk_bulk_disable_unprepare(cfg->num_clks, qmp->clks); in qcom_qmp_phy_runtime_suspend()
1282 struct qcom_qmp *qmp = dev_get_drvdata(dev); in qcom_qmp_phy_runtime_resume() local
1283 struct qmp_phy *qphy = qmp->phys[0]; in qcom_qmp_phy_runtime_resume()
1284 const struct qmp_phy_cfg *cfg = qmp->cfg; in qcom_qmp_phy_runtime_resume()
1287 dev_vdbg(dev, "Resuming QMP phy, mode:%d\n", qmp->mode); in qcom_qmp_phy_runtime_resume()
1293 if (!qmp->phy_initialized) { in qcom_qmp_phy_runtime_resume()
1298 ret = clk_bulk_prepare_enable(cfg->num_clks, qmp->clks); in qcom_qmp_phy_runtime_resume()
1300 dev_err(qmp->dev, "failed to enable clks, err=%d\n", ret); in qcom_qmp_phy_runtime_resume()
1307 clk_bulk_disable_unprepare(cfg->num_clks, qmp->clks); in qcom_qmp_phy_runtime_resume()
1318 struct qcom_qmp *qmp = dev_get_drvdata(dev); in qcom_qmp_phy_vreg_init() local
1319 int num = qmp->cfg->num_vregs; in qcom_qmp_phy_vreg_init()
1322 qmp->vregs = devm_kcalloc(dev, num, sizeof(*qmp->vregs), GFP_KERNEL); in qcom_qmp_phy_vreg_init()
1323 if (!qmp->vregs) in qcom_qmp_phy_vreg_init()
1327 qmp->vregs[i].supply = qmp->cfg->vreg_list[i]; in qcom_qmp_phy_vreg_init()
1329 return devm_regulator_bulk_get(dev, num, qmp->vregs); in qcom_qmp_phy_vreg_init()
1334 struct qcom_qmp *qmp = dev_get_drvdata(dev); in qcom_qmp_phy_reset_init() local
1337 qmp->resets = devm_kcalloc(dev, qmp->cfg->num_resets, in qcom_qmp_phy_reset_init()
1338 sizeof(*qmp->resets), GFP_KERNEL); in qcom_qmp_phy_reset_init()
1339 if (!qmp->resets) in qcom_qmp_phy_reset_init()
1342 for (i = 0; i < qmp->cfg->num_resets; i++) { in qcom_qmp_phy_reset_init()
1344 const char *name = qmp->cfg->reset_list[i]; in qcom_qmp_phy_reset_init()
1351 qmp->resets[i] = rst; in qcom_qmp_phy_reset_init()
1359 struct qcom_qmp *qmp = dev_get_drvdata(dev); in qcom_qmp_phy_clk_init() local
1360 int num = qmp->cfg->num_clks; in qcom_qmp_phy_clk_init()
1363 qmp->clks = devm_kcalloc(dev, num, sizeof(*qmp->clks), GFP_KERNEL); in qcom_qmp_phy_clk_init()
1364 if (!qmp->clks) in qcom_qmp_phy_clk_init()
1368 qmp->clks[i].id = qmp->cfg->clk_list[i]; in qcom_qmp_phy_clk_init()
1370 return devm_clk_bulk_get(dev, num, qmp->clks); in qcom_qmp_phy_clk_init()
1391 static int phy_pipe_clk_register(struct qcom_qmp *qmp, struct device_node *np) in phy_pipe_clk_register() argument
1397 if ((qmp->cfg->type != PHY_TYPE_USB3) && in phy_pipe_clk_register()
1398 (qmp->cfg->type != PHY_TYPE_PCIE)) { in phy_pipe_clk_register()
1405 dev_err(qmp->dev, "%s: No clock-output-names\n", np->name); in phy_pipe_clk_register()
1409 fixed = devm_kzalloc(qmp->dev, sizeof(*fixed), GFP_KERNEL); in phy_pipe_clk_register()
1415 /* controllers using QMP phys use 125MHz pipe clock interface */ in phy_pipe_clk_register()
1419 return devm_clk_hw_register(qmp->dev, &fixed->hw); in phy_pipe_clk_register()
1432 struct qcom_qmp *qmp = dev_get_drvdata(dev); in qcom_qmp_phy_create() local
1473 if (qmp->cfg->type == PHY_TYPE_PCIE || in qcom_qmp_phy_create()
1474 qmp->cfg->type == PHY_TYPE_USB3) { in qcom_qmp_phy_create()
1486 if (qmp->cfg->has_lane_rst) { in qcom_qmp_phy_create()
1504 qphy->qmp = qmp; in qcom_qmp_phy_create()
1505 qmp->phys[id] = qphy; in qcom_qmp_phy_create()
1513 .compatible = "qcom,msm8996-qmp-pcie-phy",
1516 .compatible = "qcom,msm8996-qmp-usb3-phy",
1519 .compatible = "qcom,ipq8074-qmp-pcie-phy",
1522 .compatible = "qcom,sdm845-qmp-usb3-phy",
1525 .compatible = "qcom,sdm845-qmp-usb3-uni-phy",
1539 struct qcom_qmp *qmp; in qcom_qmp_phy_probe() local
1548 qmp = devm_kzalloc(dev, sizeof(*qmp), GFP_KERNEL); in qcom_qmp_phy_probe()
1549 if (!qmp) in qcom_qmp_phy_probe()
1552 qmp->dev = dev; in qcom_qmp_phy_probe()
1553 dev_set_drvdata(dev, qmp); in qcom_qmp_phy_probe()
1555 /* Get the specific init parameters of QMP phy */ in qcom_qmp_phy_probe()
1556 qmp->cfg = of_device_get_match_data(dev); in qcom_qmp_phy_probe()
1557 if (!qmp->cfg) in qcom_qmp_phy_probe()
1566 qmp->serdes = base; in qcom_qmp_phy_probe()
1569 if (qmp->cfg->has_phy_dp_com_ctrl) { in qcom_qmp_phy_probe()
1576 qmp->dp_com = base; in qcom_qmp_phy_probe()
1579 mutex_init(&qmp->phy_mutex); in qcom_qmp_phy_probe()
1597 if (num > qmp->cfg->nlanes) in qcom_qmp_phy_probe()
1600 qmp->phys = devm_kcalloc(dev, num, sizeof(*qmp->phys), GFP_KERNEL); in qcom_qmp_phy_probe()
1601 if (!qmp->phys) in qcom_qmp_phy_probe()
1627 ret = phy_pipe_clk_register(qmp, child); in qcom_qmp_phy_probe()
1629 dev_err(qmp->dev, in qcom_qmp_phy_probe()
1639 dev_info(dev, "Registered Qcom-QMP phy\n"); in qcom_qmp_phy_probe()
1649 .name = "qcom-qmp-phy",
1658 MODULE_DESCRIPTION("Qualcomm QMP PHY driver");