[PATCH 1/3] drm: bridge: dw-hdmi: Define and use macros for PHY register addresses
Nickey.Yang
nickey.yang at rock-chips.com
Fri Jan 13 01:32:54 UTC 2017
Hi Laurent,
在 2017年01月12日 23:26, Laurent Pinchart 写道:
> Hi Nickey,
>
> On Thursday 12 Jan 2017 09:45:31 Nickey.Yang wrote:
>> 在 2017年01月12日 07:49, Laurent Pinchart 写道:
>>> Replace the hardcoded register address numerical values with macros to
>>> clarify the code.
>>>
>>> This change has been tested by comparing the assembly code before and
>>> after the change.
>>>
>>> Signed-off-by: Laurent Pinchart
>>> <laurent.pinchart+renesas at ideasonboard.com>
>>> ---
>>>
>>> drivers/gpu/drm/bridge/dw-hdmi.c | 35 ++++++++++++---------
>>> drivers/gpu/drm/bridge/dw-hdmi.h | 66 ++++++++++++++++++++++++++++++++++++
>>> 2 files changed, 86 insertions(+), 15 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/bridge/dw-hdmi.c
>>> b/drivers/gpu/drm/bridge/dw-hdmi.c index ef4f2f96ed2c..6e605fd910ef
>>> 100644
>>> --- a/drivers/gpu/drm/bridge/dw-hdmi.c
>>> +++ b/drivers/gpu/drm/bridge/dw-hdmi.c
>>> @@ -997,21 +997,26 @@ static int hdmi_phy_configure(struct dw_hdmi *hdmi,
>>> int cscon)
>>> HDMI_PHY_I2CM_SLAVE_ADDR);
>>> hdmi_phy_test_clear(hdmi, 0);
>>>
>>> - hdmi_phy_i2c_write(hdmi, mpll_config->res[0].cpce, 0x06);
>>> - hdmi_phy_i2c_write(hdmi, mpll_config->res[0].gmp, 0x15);
>>> -
>>> - /* CURRCTRL */
>>> - hdmi_phy_i2c_write(hdmi, curr_ctrl->curr[0], 0x10);
>>> -
>>> - hdmi_phy_i2c_write(hdmi, 0x0000, 0x13); /* PLLPHBYCTRL */
>>> - hdmi_phy_i2c_write(hdmi, 0x0006, 0x17);
>>> -
>>> - hdmi_phy_i2c_write(hdmi, phy_config->term, 0x19); /* TXTERM */
>>> - hdmi_phy_i2c_write(hdmi, phy_config->sym_ctr, 0x09); /* CKSYMTXCTRL */
>>> - hdmi_phy_i2c_write(hdmi, phy_config->vlev_ctr, 0x0E); /* VLEVCTRL */
>>> -
>>> - /* REMOVE CLK TERM */
>>> - hdmi_phy_i2c_write(hdmi, 0x8000, 0x05); /* CKCALCTRL */
>>> + hdmi_phy_i2c_write(hdmi, mpll_config->res[0].cpce,
>>> + HDMI_3D_TX_PHY_CPCE_CTRL);
>>> + hdmi_phy_i2c_write(hdmi, mpll_config->res[0].gmp,
>>> + HDMI_3D_TX_PHY_GMPCTRL);
>>> + hdmi_phy_i2c_write(hdmi, curr_ctrl->curr[0],
>>> + HDMI_3D_TX_PHY_CURRCTRL);
>>> +
>>> + hdmi_phy_i2c_write(hdmi, 0, HDMI_3D_TX_PHY_PLLPHBYCTRL);
>>> + hdmi_phy_i2c_write(hdmi, HDMI_3D_TX_PHY_MSM_CTRL_CKO_SEL_FB_CLK,
>>> + HDMI_3D_TX_PHY_MSM_CTRL);
>>> +
>>> + hdmi_phy_i2c_write(hdmi, phy_config->term, HDMI_3D_TX_PHY_TXTERM);
>>> + hdmi_phy_i2c_write(hdmi, phy_config->sym_ctr,
>>> + HDMI_3D_TX_PHY_CKSYMTXCTRL);
>>> + hdmi_phy_i2c_write(hdmi, phy_config->vlev_ctr,
>>> + HDMI_3D_TX_PHY_VLEVCTRL);
>>> +
>>> + /* Override and disable clock termination. */
>>> + hdmi_phy_i2c_write(hdmi, HDMI_3D_TX_PHY_CKCALCTRL_OVERRIDE,
>>> + HDMI_3D_TX_PHY_CKCALCTRL);
>>>
>>> dw_hdmi_phy_enable_powerdown(hdmi, false);
>>>
>>> diff --git a/drivers/gpu/drm/bridge/dw-hdmi.h
>>> b/drivers/gpu/drm/bridge/dw-hdmi.h index a4fd64a203c9..f3c149c88d71
>>> 100644
>>> --- a/drivers/gpu/drm/bridge/dw-hdmi.h
>>> +++ b/drivers/gpu/drm/bridge/dw-hdmi.h
>>> @@ -1085,4 +1085,70 @@ enum {
>>> HDMI_I2CM_CTLINT_ARB_MASK = 0x4,
>>> };
>>>
>>> +/*
>>> + * HDMI 3D TX PHY registers
>>> + */
>> Why is there 3D related words?
> The register names come from the i.MX6 datasheet. I don't have access to any
> PHY datasheet from Synopsys, and the Rockchip RK3288 manuals I've been able to
> find don't document the HDMI PHY register. As the PHY used by i.MX6 is a "DWC
> HDMI 3D TX PHY", I'd used that name in the code.
>
> The "DWC MHL PHY" used by RK3288 seems to be use a similar (if not identical)
> registers map, at least for the registers configured by the driver. The "DWC
> HDMI 2.0 TX PHY" PHY used by R-Car Gen3, however, seems not to have a
> compatible register interface, except for the HDMI_3D_TX_PHY_PTRPT_ENBL
> register.
>
> I'm open to suggestions for a better naming scheme. If you have additional
> information that I don't have access to, please feel free to use them to
> propose improvements or to point out my mistakes :-)
>
>> I did not find "3D" words in PHY IP vendor document.
> How is the PHY named in the documentation you have access to ?
>
just remove 3D word,such as name HDMI_TX_PHY_PWRCTRL instead of
HDMI_3D_TX_PHY_PWRCTRL
in doc: HDMI Tx PHY for GLOBAL FOUNDRIES 28-nm SLP/1.8 V Databook,
LCA Edition
11.1 Control Registers Module Design Architecture
>>> +#define HDMI_3D_TX_PHY_PWRCTRL 0x00
>>> +#define HDMI_3D_TX_PHY_SERDIVCTRL 0x01
>>> +#define HDMI_3D_TX_PHY_SERCKCTRL 0x02
>>> +#define HDMI_3D_TX_PHY_SERCKKILLCTRL 0x03
>>> +#define HDMI_3D_TX_PHY_TXRESCTRL 0x04
>>> +#define HDMI_3D_TX_PHY_CKCALCTRL 0x05
>>> +#define HDMI_3D_TX_PHY_CPCE_CTRL 0x06
>>> +#define HDMI_3D_TX_PHY_TXCLKMEASCTRL 0x07
>>> +#define HDMI_3D_TX_PHY_TXMEASCTRL 0x08
>>> +#define HDMI_3D_TX_PHY_CKSYMTXCTRL 0x09
>>> +#define HDMI_3D_TX_PHY_CMPSEQCTRL 0x0a
>>> +#define HDMI_3D_TX_PHY_CMPPWRCTRL 0x0b
>>> +#define HDMI_3D_TX_PHY_CMPMODECTRL 0x0c
>>> +#define HDMI_3D_TX_PHY_MEASCTRL 0x0d
>>> +#define HDMI_3D_TX_PHY_VLEVCTRL 0x0e
>>> +#define HDMI_3D_TX_PHY_D2ACTRL 0x0f
>>> +#define HDMI_3D_TX_PHY_CURRCTRL 0x10
>>> +#define HDMI_3D_TX_PHY_DRVANACTRL 0x11
>>> +#define HDMI_3D_TX_PHY_PLLMEASCTRL 0x12
>>> +#define HDMI_3D_TX_PHY_PLLPHBYCTRL 0x13
>>> +#define HDMI_3D_TX_PHY_GRP_CTRL 0x14
>>> +#define HDMI_3D_TX_PHY_GMPCTRL 0x15
>>> +#define HDMI_3D_TX_PHY_MPLLMEASCTRL 0x16
>>> +#define HDMI_3D_TX_PHY_MSM_CTRL 0x17
>>> +#define HDMI_3D_TX_PHY_SCRPB_STATUS 0x18
>>> +#define HDMI_3D_TX_PHY_TXTERM 0x19
>>> +#define HDMI_3D_TX_PHY_PTRPT_ENBL 0x1a
>>> +#define HDMI_3D_TX_PHY_PATTERNGEN 0x1b
>>> +#define HDMI_3D_TX_PHY_SDCAP_MODE 0x1c
>>> +#define HDMI_3D_TX_PHY_SCOPEMODE 0x1d
>>> +#define HDMI_3D_TX_PHY_DIGTXMODE 0x1e
>>> +#define HDMI_3D_TX_PHY_STR_STATUS 0x1f
>>> +#define HDMI_3D_TX_PHY_SCOPECNT0 0x20
>>> +#define HDMI_3D_TX_PHY_SCOPECNT1 0x21
>>> +#define HDMI_3D_TX_PHY_SCOPECNT2 0x22
>>> +#define HDMI_3D_TX_PHY_SCOPECNTCLK 0x23
>>> +#define HDMI_3D_TX_PHY_SCOPESAMPLE 0x24
>>> +#define HDMI_3D_TX_PHY_SCOPECNTMSB01 0x25
>>> +#define HDMI_3D_TX_PHY_SCOPECNTMSB2CK 0x26
>>> +
>>> +/* HDMI_3D_TX_PHY_CKCALCTRL values */
>>> +#define HDMI_3D_TX_PHY_CKCALCTRL_OVERRIDE BIT(15)
>>> +
>>> +/* HDMI_3D_TX_PHY_MSM_CTRL values */
>>> +#define HDMI_3D_TX_PHY_MSM_CTRL_MPLL_PH_SEL_CK BIT(13)
>>> +#define HDMI_3D_TX_PHY_MSM_CTRL_CKO_SEL_CLK_REF_MPLL (0 << 1)
>>> +#define HDMI_3D_TX_PHY_MSM_CTRL_CKO_SEL_OFF (1 << 1)
>>> +#define HDMI_3D_TX_PHY_MSM_CTRL_CKO_SEL_PCLK (2 << 1)
>>> +#define HDMI_3D_TX_PHY_MSM_CTRL_CKO_SEL_FB_CLK (3 << 1)
>>> +#define HDMI_3D_TX_PHY_MSM_CTRL_SCOPE_CK_SEL BIT(0)
>>> +
>>> +/* HDMI_3D_TX_PHY_PTRPT_ENBL values */
>>> +#define HDMI_3D_TX_PHY_PTRPT_ENBL_OVERRIDE BIT(15)
>>> +#define HDMI_3D_TX_PHY_PTRPT_ENBL_PG_SKIP_BIT2 BIT(8)
>>> +#define HDMI_3D_TX_PHY_PTRPT_ENBL_PG_SKIP_BIT1 BIT(7)
>>> +#define HDMI_3D_TX_PHY_PTRPT_ENBL_PG_SKIP_BIT0 BIT(6)
>>> +#define HDMI_3D_TX_PHY_PTRPT_ENBL_CK_REF_ENB BIT(5)
>>> +#define HDMI_3D_TX_PHY_PTRPT_ENBL_RCAL_ENB BIT(4)
>>> +#define HDMI_3D_TX_PHY_PTRPT_ENBL_TX_CLK_ALIGN_ENB BIT(3)
>>> +#define HDMI_3D_TX_PHY_PTRPT_ENBL_TX_READY BIT(2)
>>> +#define HDMI_3D_TX_PHY_PTRPT_ENBL_CKO_WORD_ENB BIT(1)
>>> +#define HDMI_3D_TX_PHY_PTRPT_ENBL_REFCLK_ENB BIT(0)
>>> +
>>>
>>> #endif /* __DW_HDMI_H__ */
More information about the dri-devel
mailing list