Re: [PATCH v2 4/5] phy/rockchip: inno-dsidphy: Add support for rk3568

2022-09-09 Thread Heiko Stübner
Am Dienstag, 6. September 2022, 19:48:22 CEST schrieb Chris Morgan:
> From: Chris Morgan 
> 
> Add support for the Rockchip RK3568 DSI-DPHY. Registers were taken from
> the BSP kernel driver and wherever possible cross referenced with the
> TRM.

With the amount of refactoring done below, I'd expect a bit more
introductory text here ;-)

I.e. about older variants of the phy only supporting 1GHz rates and
newer ones supporting up to 2.5GHz and that you refactor some things
to make both variants work.

> 
> Signed-off-by: Chris Morgan 
> ---
>  .../phy/rockchip/phy-rockchip-inno-dsidphy.c  | 204 ++
>  1 file changed, 158 insertions(+), 46 deletions(-)
> 
> diff --git a/drivers/phy/rockchip/phy-rockchip-inno-dsidphy.c 
> b/drivers/phy/rockchip/phy-rockchip-inno-dsidphy.c
> index 630e01b5c19b..2c5847faff63 100644
> --- a/drivers/phy/rockchip/phy-rockchip-inno-dsidphy.c
> +++ b/drivers/phy/rockchip/phy-rockchip-inno-dsidphy.c
> @@ -84,9 +84,25 @@
>  #define DATA_LANE_0_SKEW_PHASE_MASK  GENMASK(2, 0)
>  #define DATA_LANE_0_SKEW_PHASE(x)UPDATE(x, 2, 0)
>  /* Analog Register Part: reg08 */
> +#define PLL_POST_DIV_ENABLE_MASK BIT(5)
> +#define PLL_POST_DIV_ENABLE  BIT(5)
>  #define SAMPLE_CLOCK_DIRECTION_MASK  BIT(4)
>  #define SAMPLE_CLOCK_DIRECTION_REVERSE   BIT(4)
>  #define SAMPLE_CLOCK_DIRECTION_FORWARD   0
> +#define LOWFRE_EN_MASK   BIT(5)

PLL_POST_DIR_ENABLE above also is BIT(5) ... is this correct?


otherwise the changes look great.

Heiko




[PATCH v2 4/5] phy/rockchip: inno-dsidphy: Add support for rk3568

2022-09-06 Thread Chris Morgan
From: Chris Morgan 

Add support for the Rockchip RK3568 DSI-DPHY. Registers were taken from
the BSP kernel driver and wherever possible cross referenced with the
TRM.

Signed-off-by: Chris Morgan 
---
 .../phy/rockchip/phy-rockchip-inno-dsidphy.c  | 204 ++
 1 file changed, 158 insertions(+), 46 deletions(-)

diff --git a/drivers/phy/rockchip/phy-rockchip-inno-dsidphy.c 
b/drivers/phy/rockchip/phy-rockchip-inno-dsidphy.c
index 630e01b5c19b..2c5847faff63 100644
--- a/drivers/phy/rockchip/phy-rockchip-inno-dsidphy.c
+++ b/drivers/phy/rockchip/phy-rockchip-inno-dsidphy.c
@@ -84,9 +84,25 @@
 #define DATA_LANE_0_SKEW_PHASE_MASKGENMASK(2, 0)
 #define DATA_LANE_0_SKEW_PHASE(x)  UPDATE(x, 2, 0)
 /* Analog Register Part: reg08 */
+#define PLL_POST_DIV_ENABLE_MASK   BIT(5)
+#define PLL_POST_DIV_ENABLEBIT(5)
 #define SAMPLE_CLOCK_DIRECTION_MASKBIT(4)
 #define SAMPLE_CLOCK_DIRECTION_REVERSE BIT(4)
 #define SAMPLE_CLOCK_DIRECTION_FORWARD 0
+#define LOWFRE_EN_MASK BIT(5)
+#define PLL_OUTPUT_FREQUENCY_DIV_BY_1  0
+#define PLL_OUTPUT_FREQUENCY_DIV_BY_2  1
+/* Analog Register Part: reg0b */
+#define CLOCK_LANE_VOD_RANGE_SET_MASK  GENMASK(3, 0)
+#define CLOCK_LANE_VOD_RANGE_SET(x)UPDATE(x, 3, 0)
+#define VOD_MIN_RANGE  0x1
+#define VOD_MID_RANGE  0x3
+#define VOD_BIG_RANGE  0x7
+#define VOD_MAX_RANGE  0xf
+/* Analog Register Part: reg1E */
+#define PLL_MODE_SEL_MASK  GENMASK(6, 5)
+#define PLL_MODE_SEL_LVDS_MODE 0
+#define PLL_MODE_SEL_MIPI_MODE BIT(5)
 /* Digital Register Part: reg00 */
 #define REG_DIG_RSTN_MASK  BIT(0)
 #define REG_DIG_RSTN_NORMALBIT(0)
@@ -102,20 +118,22 @@
 #define T_LPX_CNT_MASK GENMASK(5, 0)
 #define T_LPX_CNT(x)   UPDATE(x, 5, 0)
 /* Clock/Data0/Data1/Data2/Data3 Lane Register Part: reg06 */
+#define T_HS_ZERO_CNT_HI_MASK  BIT(7)
+#define T_HS_ZERO_CNT_HI(x)UPDATE(x, 7, 7)
 #define T_HS_PREPARE_CNT_MASK  GENMASK(6, 0)
 #define T_HS_PREPARE_CNT(x)UPDATE(x, 6, 0)
 /* Clock/Data0/Data1/Data2/Data3 Lane Register Part: reg07 */
-#define T_HS_ZERO_CNT_MASK GENMASK(5, 0)
-#define T_HS_ZERO_CNT(x)   UPDATE(x, 5, 0)
+#define T_HS_ZERO_CNT_LO_MASK  GENMASK(5, 0)
+#define T_HS_ZERO_CNT_LO(x)UPDATE(x, 5, 0)
 /* Clock/Data0/Data1/Data2/Data3 Lane Register Part: reg08 */
 #define T_HS_TRAIL_CNT_MASKGENMASK(6, 0)
 #define T_HS_TRAIL_CNT(x)  UPDATE(x, 6, 0)
 /* Clock/Data0/Data1/Data2/Data3 Lane Register Part: reg09 */
-#define T_HS_EXIT_CNT_MASK GENMASK(4, 0)
-#define T_HS_EXIT_CNT(x)   UPDATE(x, 4, 0)
+#define T_HS_EXIT_CNT_LO_MASK  GENMASK(4, 0)
+#define T_HS_EXIT_CNT_LO(x)UPDATE(x, 4, 0)
 /* Clock/Data0/Data1/Data2/Data3 Lane Register Part: reg0a */
-#define T_CLK_POST_CNT_MASKGENMASK(3, 0)
-#define T_CLK_POST_CNT(x)  UPDATE(x, 3, 0)
+#define T_CLK_POST_CNT_LO_MASK GENMASK(3, 0)
+#define T_CLK_POST_CNT_LO(x)   UPDATE(x, 3, 0)
 /* Clock/Data0/Data1/Data2/Data3 Lane Register Part: reg0c */
 #define LPDT_TX_PPI_SYNC_MASK  BIT(2)
 #define LPDT_TX_PPI_SYNC_ENABLEBIT(2)
@@ -129,9 +147,13 @@
 #define T_CLK_PRE_CNT_MASK GENMASK(3, 0)
 #define T_CLK_PRE_CNT(x)   UPDATE(x, 3, 0)
 /* Clock/Data0/Data1/Data2/Data3 Lane Register Part: reg10 */
+#define T_CLK_POST_CNT_HI_MASK GENMASK(7, 6)
+#define T_CLK_POST_CNT_HI(x)   UPDATE(x, 7, 6)
 #define T_TA_GO_CNT_MASK   GENMASK(5, 0)
 #define T_TA_GO_CNT(x) UPDATE(x, 5, 0)
 /* Clock/Data0/Data1/Data2/Data3 Lane Register Part: reg11 */
+#define T_HS_EXIT_CNT_HI_MASK  BIT(6)
+#define T_HS_EXIT_CNT_HI(x)UPDATE(x, 6, 6)
 #define T_TA_SURE_CNT_MASK GENMASK(5, 0)
 #define T_TA_SURE_CNT(x)   UPDATE(x, 5, 0)
 /* Clock/Data0/Data1/Data2/Data3 Lane Register Part: reg12 */
@@ -169,11 +191,23 @@
 #define DSI_PHY_STATUS 0xb0
 #define PHY_LOCK   BIT(0)
 
+enum phy_max_rate {
+   MAX_1GHZ,
+   MAX_2_5GHZ,
+};
+
+struct inno_video_phy_plat_data {
+   const struct inno_mipi_dphy_timing *inno_mipi_dphy_timing_table;
+   const unsigned int num_timings;
+   enum phy_max_rate max_rate;
+};
+
 struct inno_dsidphy {
struct device *dev;
struct clk *ref_clk;
struct clk *pclk_phy;
struct