dev_dbg(dev, "port %u with %u lanes", port, nlanes);
/* only support <1.5Gbps */ for (i = 0; i < IPU6SE_ISYS_PHY_BB_NUM; i++) { /* cphy_dll_ovrd.crcdc_fsm_dlane0 = 13 */
reg = IPU6SE_ISYS_PHY_0_BASE + PHY_CPHY_DLL_OVRD(i);
val = readl(base + reg);
val |= FIELD_PREP(GENMASK(6, 1), 13);
writel(val, base + reg);
/* cphy_rx_control1.en_crc1 = 1 */
reg = IPU6SE_ISYS_PHY_0_BASE + PHY_CPHY_RX_CONTROL1(i);
val = readl(base + reg);
val |= BIT(31);
writel(val, base + reg);
/* dphy_cfg.reserved = 1, .lden_from_dll_ovrd_0 = 1 */
reg = IPU6SE_ISYS_PHY_0_BASE + PHY_DPHY_CFG(i);
val = readl(base + reg);
val |= BIT(25) | BIT(26);
writel(val, base + reg);
/* cphy_dll_ovrd.lden_crcdc_fsm_dlane0 = 1 */
reg = IPU6SE_ISYS_PHY_0_BASE + PHY_CPHY_DLL_OVRD(i);
val = readl(base + reg);
val |= BIT(0);
writel(val, base + reg);
}
/* Front end config, use minimal channel loss */ for (i = 0; i < ARRAY_SIZE(phy_port_cfg); i++) { if (phy_port_cfg[i][0] == port &&
phy_port_cfg[i][1] == nlanes) {
bbnum = phy_port_cfg[i][2] / 2;
reg = IPU6SE_ISYS_PHY_0_BASE + PHY_BB_AFE_CONFIG(bbnum);
val = readl(base + reg);
val |= phy_port_cfg[i][3];
writel(val, base + reg);
}
}
}
switch (nlanes) { case 1:
index = 5; break; case 2:
index = 6; break; case 4:
index = 1; break; default:
dev_err(dev, "lanes nr %u is unsupported\n", nlanes); return -EINVAL;
}
dev_dbg(dev, "port config for port %u with %u lanes\n", port, nlanes);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.