/* STANDALONE DPHY CSR */
#define IMX95_CSR_PHY_MODE_CTRL 0x00
#define IMX95_CSR_PHY_FREQ_CTRL 0x04
#define IMX95_CSR_PHY_TEST_MODE_CTRL 0x08
#define IMX95_CSR_PHY_TEST_MODE_STS 0x0C
static const struct dw_dphy_reg imx95_dphy_regs[] = {
[DPHY_RX_CFGCLKFREQRANGE] = PHY_REG(IMX95_CSR_PHY_FREQ_CTRL, 6, 0),
[DPHY_RX_HSFREQRANGE] = PHY_REG(IMX95_CSR_PHY_FREQ_CTRL, 7, 16),
[DPHY_RX_DATA_LANE_EN] = PHY_REG(IMX95_CSR_PHY_MODE_CTRL, 4, 4),
[DPHY_RX_DATA_LANE_BASEDIR] = PHY_REG(IMX95_CSR_PHY_TEST_MODE_CTRL, 1, 0),
[DPHY_RX_DATA_LANE_FORCETXSTOPMODE] = PHY_REG(IMX95_CSR_PHY_TEST_MODE_CTRL, 1, 4),
[DPHY_RX_DATA_LANE_FORCERXMODE] = PHY_REG(IMX95_CSR_PHY_TEST_MODE_CTRL, 4, 8),
[DPHY_RX_ENABLE_CLK_EXT] = PHY_REG(IMX95_CSR_PHY_TEST_MODE_CTRL, 1, 12),
[DPHY_RX_PHY_ENABLE_BYP] = PHY_REG(IMX95_CSR_PHY_TEST_MODE_CTRL, 1, 14),
};
static void imx95_dphy_config(struct dw_dphy *priv)
{
struct phy_configure_opts_mipi_dphy *config = &priv->config;
u32 active_lanes = GENMASK(config->lanes - 1, 0);
printk("%s(%d) cfgclkfreqrange=%u\n",__FUNCTION__,__LINE__,priv->cfgclkfreqrange);
printk("%s(%d) hsfreqrange=%u\n",__FUNCTION__,__LINE__,priv->hsfreqrange);
/* Configure the PHY frequency range */
dphy_write(priv, DPHY_RX_CFGCLKFREQRANGE, priv->cfgclkfreqrange);
dphy_write(priv, DPHY_RX_HSFREQRANGE, priv->hsfreqrange);
dphy_write(priv, DPHY_RX_DATA_LANE_BASEDIR, 1);
ndelay(15);
dphy_write(priv, DPHY_RX_DATA_LANE_FORCERXMODE, active_lanes);
ndelay(15);
dphy_write(priv, DPHY_RX_DATA_LANE_EN, active_lanes);
dphy_write(priv, DPHY_RX_DATA_LANE_FORCERXMODE, 0);
dphy_write(priv, DPHY_RX_ENABLE_CLK_EXT, 1);
dphy_write(priv, DPHY_RX_PHY_ENABLE_BYP, 1);
}
static const struct dw_dphy_config_ops imx95_dphy_cfg_ops = {
.config = imx95_dphy_config,
};
static const struct dw_dphy_drv_data imx95_dphy_drvdata = {
.regs = imx95_dphy_regs,
.regs_size = ARRAY_SIZE(imx95_dphy_regs),
.cfg_ops = &imx95_dphy_cfg_ops,
.max_lanes = 4,
.max_data_rate = 2500,
};
в логе постоянно:
root@imx95-19x19-lpddr5-evk:~# dmesg | grep cfgclkfreqrange
[ 2571.026793] imx95_dphy_config(512) cfgclkfreqrange=28
[ 3222.510226] imx95_dphy_config(512) cfgclkfreqrange=28
[ 3401.440671] imx95_dphy_config(512) cfgclkfreqrange=28
[ 3706.174335] imx95_dphy_config(512) cfgclkfreqrange=28
[ 3926.560878] imx95_dphy_config(512) cfgclkfreqrange=28
root@imx95-19x19-lpddr5-evk:~# dmesg | grep hsfreqrange
[ 2571.026797] imx95_dphy_config(513) hsfreqrange=44
[ 3222.510231] imx95_dphy_config(513) hsfreqrange=44
[ 3401.440676] imx95_dphy_config(513) hsfreqrange=44
[ 3706.174340] imx95_dphy_config(513) hsfreqrange=44
[ 3926.560882] imx95_dphy_config(513) hsfreqrange=44