1
From: Baihan Li <libaihan@huawei.com>
1
From: Baihan Li <libaihan@huawei.com>
2
2
3
To support DP HPD, edid printing, and colorbar display features based on
3
To support DP HPD, edid printing, and colorbar display features based on
4
the Hisislcon DP devices.
4
the Hisislcon DP devices.
5
---
5
---
6
ChangeLog:
6
ChangeLog:
7
v7 -> v8:
8
- use drm_edid_read() in hibmc_dp_connector_get_modes(), suggested by Jani Nikula
9
v7: https://lore.kernel.org/all/20250319032435.1119469-1-shiyongbang@huawei.com/
10
v6 -> v7:
11
- add if statement about drm aux in hibmc_dp_connector_get_modes(), suggested by Jani Nikula
12
v6: https://lore.kernel.org/all/20250310040138.2025715-1-shiyongbang@huawei.com/
13
v5 -> v6:
14
- fix the DP_SERDES_VOL2_PRE0 value after electrical test.
15
- move the detect_ctx() to the patch 7/9.
16
- add detect_ctx with 200ms delay, suggested by Dmitry Baryshkov.
17
v5: https://lore.kernel.org/all/20250307101640.4003229-1-shiyongbang@huawei.com/
18
v4 -> v5:
19
- add commit log about hibmc_kms_init(), suggested by Dmitry Baryshkov.
20
- fix the format of block comments, suggested by Dmitry Baryshkov.
21
- add hibmc_dp_get_serdes_rate_cfg() to correct transferring serdes cfg.
22
- separate the vga part commit, suggested by Dmitry Baryshkov.
23
- remove pci_disable_msi() in hibmc_unload()
24
v4: https://lore.kernel.org/all/20250305112647.2344438-1-shiyongbang@huawei.com/
7
v3 -> v4:
25
v3 -> v4:
8
- fix the serdes cfg in hibmc_dp_serdes_set_tx_cfg(), suggested by Dmitry Baryshkov.
26
- fix the serdes cfg in hibmc_dp_serdes_set_tx_cfg(), suggested by Dmitry Baryshkov.
9
- move the dp serdes registers to dp_reg.h, suggested by Dmitry Baryshkov.
27
- move the dp serdes registers to dp_reg.h, suggested by Dmitry Baryshkov.
10
- add comments for if-statement of dp_init(), suggested by Dmitry Baryshkov.
28
- add comments for if-statement of dp_init(), suggested by Dmitry Baryshkov.
11
- fix the comment log to imperative sentence, suggested by Dmitry Baryshkov.
29
- fix the comment log to imperative sentence, suggested by Dmitry Baryshkov.
12
- add comments in hibmc_control_write(), suggested by Dmitry Baryshkov.
30
- add comments in hibmc_control_write(), suggested by Dmitry Baryshkov.
13
- add link reset of rates and lanes in pre link training process, suggested by Dmitry Baryshkov.
31
- add link reset of rates and lanes in pre link training process, suggested by Dmitry Baryshkov.
14
- add vdac detect and connected/disconnected status to enable HPD process, suggested by Dmitry Baryshkov.
32
- add vdac detect and connected/disconnected status to enable HPD process, suggested by Dmitry Baryshkov.
15
- remove a drm_client, suggested by Dmitry Baryshkov.
33
- remove a drm_client, suggested by Dmitry Baryshkov.
16
- fix build errors reported by kernel test robot <lkp@intel.com>
34
- fix build errors reported by kernel test robot <lkp@intel.com>
17
Closes: https://lore.kernel.org/oe-kbuild-all/202502231304.BCzV4Y8D-lkp@intel.com/
35
Closes: https://lore.kernel.org/oe-kbuild-all/202502231304.BCzV4Y8D-lkp@intel.com/
36
v3: https://lore.kernel.org/all/20250222025102.1519798-1-shiyongbang@huawei.com/
18
v2 -> v3:
37
v2 -> v3:
19
- restructuring the header p_reg.h, suggested by Dmitry Baryshkov.
38
- restructuring the header p_reg.h, suggested by Dmitry Baryshkov.
20
- add commit log about dp serdes, suggested by Dmitry Baryshkov.
39
- add commit log about dp serdes, suggested by Dmitry Baryshkov.
21
- return value in hibmc_dp_serdes_init(), suggested by Dmitry Baryshkov.
40
- return value in hibmc_dp_serdes_init(), suggested by Dmitry Baryshkov.
22
- add static const in the array of serdes_tx_cfg[], suggested by Dmitry Baryshkov.
41
- add static const in the array of serdes_tx_cfg[], suggested by Dmitry Baryshkov.
...
...
34
- change drm_kms_helper_connector_hotplug_event() to
53
- change drm_kms_helper_connector_hotplug_event() to
35
drm_connector_helper_hpd_irq_event(), suggested by Dmitry Baryshkov.
54
drm_connector_helper_hpd_irq_event(), suggested by Dmitry Baryshkov.
36
- move macros to dp_reg.h, suggested by Dmitry Baryshkov.
55
- move macros to dp_reg.h, suggested by Dmitry Baryshkov.
37
- remove struct irqs, suggested by Dmitry Baryshkov.
56
- remove struct irqs, suggested by Dmitry Baryshkov.
38
- split this patch into two parts, suggested by Dmitry Baryshkov.
57
- split this patch into two parts, suggested by Dmitry Baryshkov.
58
v2: https://lore.kernel.org/all/20250210144959.100551-1-shiyongbang@huawei.com/
39
v1 -> v2:
59
v1 -> v2:
40
- splittting the patch and add more detailed the changes in the commit message, suggested by Dmitry Baryshkov.
60
- splittting the patch and add more detailed the changes in the commit message, suggested by Dmitry Baryshkov.
41
- changing all names of dp phy to dp serdes.
61
- changing all names of dp phy to dp serdes.
42
- deleting type conversion, suggested by Dmitry Baryshkov.
62
- deleting type conversion, suggested by Dmitry Baryshkov.
43
- deleting hibmc_dp_connector_get_modes() and using drm_connector_helper_get_modes(), suggested by Dmitry Baryshkov.
63
- deleting hibmc_dp_connector_get_modes() and using drm_connector_helper_get_modes(), suggested by Dmitry Baryshkov.
...
...
46
- using debugfs_init() callback, suggested by Dmitry Baryshkov.
66
- using debugfs_init() callback, suggested by Dmitry Baryshkov.
47
- splittting colorbar and debugfs in different patches, suggested by Dmitry Baryshkov.
67
- splittting colorbar and debugfs in different patches, suggested by Dmitry Baryshkov.
48
- optimizing the description in commit message, suggested by Dmitry Baryshkov.
68
- optimizing the description in commit message, suggested by Dmitry Baryshkov.
49
- add mdelay(100) comments, suggested by Dmitry Baryshkov.
69
- add mdelay(100) comments, suggested by Dmitry Baryshkov.
50
- deleting display enable in hpd event, suggested by Dmitry Baryshkov.
70
- deleting display enable in hpd event, suggested by Dmitry Baryshkov.
71
v1: https://lore.kernel.org/all/20250127032024.1542219-1-shiyongbang@huawei.com/
51
---
72
---
52
73
53
Baihan Li (8):
74
Baihan Li (9):
54
drm/hisilicon/hibmc: Restructuring the header dp_reg.h
75
drm/hisilicon/hibmc: Restructuring the header dp_reg.h
55
drm/hisilicon/hibmc: Add dp serdes cfg to adjust serdes rate, voltage
76
drm/hisilicon/hibmc: Add dp serdes cfg to adjust serdes rate, voltage
56
and pre-emphasis
77
and pre-emphasis
57
drm/hisilicon/hibmc: Add dp serdes cfg in dp process
78
drm/hisilicon/hibmc: Add dp serdes cfg in dp process
58
drm/hisilicon/hibmc: Refactor the member of drm_aux in struct hibmc_dp
79
drm/hisilicon/hibmc: Refactor the member of drm_aux in struct hibmc_dp
59
drm/hisilicon/hibmc: Getting connector info and EDID by using AUX
80
drm/hisilicon/hibmc: Getting connector info and EDID by using AUX
60
channel
81
channel
61
drm/hisilicon/hibmc: Add colorbar-cfg feature and its debugfs file
82
drm/hisilicon/hibmc: Add colorbar-cfg feature and its debugfs file
62
drm/hisilicon/hibmc: Enable this hot plug detect of irq feature
83
drm/hisilicon/hibmc: Enable this hot plug detect of irq feature
63
drm/hisilicon/hibmc: Add MSI irq getting and requesting for HPD
84
drm/hisilicon/hibmc: Add MSI irq getting and requesting for HPD
85
drm/hisilicon/hibmc: Add vga connector detect functions
64
86
65
1 | 0
66
drivers/gpu/drm/hisilicon/hibmc/Makefile | 3 +-
87
drivers/gpu/drm/hisilicon/hibmc/Makefile | 3 +-
67
drivers/gpu/drm/hisilicon/hibmc/dp/dp_aux.c | 16 ++-
88
drivers/gpu/drm/hisilicon/hibmc/dp/dp_aux.c | 16 ++-
68
drivers/gpu/drm/hisilicon/hibmc/dp/dp_comm.h | 10 +-
89
drivers/gpu/drm/hisilicon/hibmc/dp/dp_comm.h | 10 +-
69
.../gpu/drm/hisilicon/hibmc/dp/dp_config.h | 2 +
90
.../gpu/drm/hisilicon/hibmc/dp/dp_config.h | 2 +
70
drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.c | 91 +++++++++++-
91
drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.c | 91 +++++++++++-
71
drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.h | 36 +++++
92
drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.h | 36 +++++
72
drivers/gpu/drm/hisilicon/hibmc/dp/dp_link.c | 57 +++++---
93
drivers/gpu/drm/hisilicon/hibmc/dp/dp_link.c | 97 +++++++++----
73
drivers/gpu/drm/hisilicon/hibmc/dp/dp_reg.h | 130 +++++++++++++-----
94
drivers/gpu/drm/hisilicon/hibmc/dp/dp_reg.h | 130 +++++++++++++-----
74
.../gpu/drm/hisilicon/hibmc/dp/dp_serdes.c | 71 ++++++++++
95
.../gpu/drm/hisilicon/hibmc/dp/dp_serdes.c | 71 ++++++++++
75
.../drm/hisilicon/hibmc/hibmc_drm_debugfs.c | 104 ++++++++++++++
96
.../drm/hisilicon/hibmc/hibmc_drm_debugfs.c | 104 ++++++++++++++
76
.../gpu/drm/hisilicon/hibmc/hibmc_drm_dp.c | 67 ++++++++-
97
.../gpu/drm/hisilicon/hibmc/hibmc_drm_dp.c | 74 +++++++++-
77
.../gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c | 88 +++++++++---
98
.../gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c | 87 +++++++++---
78
.../gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h | 12 ++
99
.../gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h | 12 ++
79
.../gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c | 3 +
100
.../gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c | 3 +
80
15 files changed, 601 insertions(+), 89 deletions(-)
101
14 files changed, 634 insertions(+), 102 deletions(-)
81
create mode 100644 1
82
create mode 100644 drivers/gpu/drm/hisilicon/hibmc/dp/dp_serdes.c
102
create mode 100644 drivers/gpu/drm/hisilicon/hibmc/dp/dp_serdes.c
83
create mode 100644 drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_debugfs.c
103
create mode 100644 drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_debugfs.c
84
104
85
--
105
--
86
2.33.0
106
2.33.0
diff view generated by jsdifflib
1
From: Baihan Li <libaihan@huawei.com>
1
From: Baihan Li <libaihan@huawei.com>
2
2
3
Move the macros below their corresponding registers to make
3
Move the macros below their corresponding registers to make
4
them more obvious.
4
them more obvious.
5
5
6
Signed-off-by: Baihan Li <libaihan@huawei.com>
6
Signed-off-by: Baihan Li <libaihan@huawei.com>
7
Signed-off-by: Yongbang Shi <shiyongbang@huawei.com>
7
Signed-off-by: Yongbang Shi <shiyongbang@huawei.com>
8
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
8
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
9
---
9
---
10
ChangeLog:
10
ChangeLog:
11
v2 -> v3:
11
v2 -> v3:
12
- restructuring the header dp_reg.h, suggested by Dmitry Baryshkov.
12
- restructuring the header dp_reg.h, suggested by Dmitry Baryshkov.
13
---
13
---
14
drivers/gpu/drm/hisilicon/hibmc/dp/dp_reg.h | 98 +++++++++++++--------
14
drivers/gpu/drm/hisilicon/hibmc/dp/dp_reg.h | 98 +++++++++++++--------
15
1 file changed, 60 insertions(+), 38 deletions(-)
15
1 file changed, 60 insertions(+), 38 deletions(-)
16
16
17
diff --git a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_reg.h b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_reg.h
17
diff --git a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_reg.h b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_reg.h
18
index XXXXXXX..XXXXXXX 100644
18
index XXXXXXX..XXXXXXX 100644
19
--- a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_reg.h
19
--- a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_reg.h
20
+++ b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_reg.h
20
+++ b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_reg.h
21
@@ -XXX,XX +XXX,XX @@
21
@@ -XXX,XX +XXX,XX @@
22
#define DP_REG_H
22
#define DP_REG_H
23
23
24
#define HIBMC_DP_AUX_CMD_ADDR            0x50
24
#define HIBMC_DP_AUX_CMD_ADDR            0x50
25
+
25
+
26
#define HIBMC_DP_AUX_WR_DATA0            0x54
26
#define HIBMC_DP_AUX_WR_DATA0            0x54
27
#define HIBMC_DP_AUX_WR_DATA1            0x58
27
#define HIBMC_DP_AUX_WR_DATA1            0x58
28
#define HIBMC_DP_AUX_WR_DATA2            0x5c
28
#define HIBMC_DP_AUX_WR_DATA2            0x5c
29
#define HIBMC_DP_AUX_WR_DATA3            0x60
29
#define HIBMC_DP_AUX_WR_DATA3            0x60
30
#define HIBMC_DP_AUX_RD_DATA0            0x64
30
#define HIBMC_DP_AUX_RD_DATA0            0x64
31
+
31
+
32
#define HIBMC_DP_AUX_REQ            0x74
32
#define HIBMC_DP_AUX_REQ            0x74
33
+#define HIBMC_DP_CFG_AUX_REQ            BIT(0)
33
+#define HIBMC_DP_CFG_AUX_REQ            BIT(0)
34
+#define HIBMC_DP_CFG_AUX_SYNC_LEN_SEL        BIT(1)
34
+#define HIBMC_DP_CFG_AUX_SYNC_LEN_SEL        BIT(1)
35
+#define HIBMC_DP_CFG_AUX_TIMER_TIMEOUT        BIT(2)
35
+#define HIBMC_DP_CFG_AUX_TIMER_TIMEOUT        BIT(2)
36
+#define HIBMC_DP_CFG_AUX_MIN_PULSE_NUM        GENMASK(13, 9)
36
+#define HIBMC_DP_CFG_AUX_MIN_PULSE_NUM        GENMASK(13, 9)
37
+
37
+
38
#define HIBMC_DP_AUX_STATUS            0x78
38
#define HIBMC_DP_AUX_STATUS            0x78
39
+#define HIBMC_DP_CFG_AUX_TIMEOUT        BIT(0)
39
+#define HIBMC_DP_CFG_AUX_TIMEOUT        BIT(0)
40
+#define HIBMC_DP_CFG_AUX_STATUS            GENMASK(11, 4)
40
+#define HIBMC_DP_CFG_AUX_STATUS            GENMASK(11, 4)
41
+#define HIBMC_DP_CFG_AUX_READY_DATA_BYTE    GENMASK(16, 12)
41
+#define HIBMC_DP_CFG_AUX_READY_DATA_BYTE    GENMASK(16, 12)
42
+#define HIBMC_DP_CFG_AUX            GENMASK(24, 17)
42
+#define HIBMC_DP_CFG_AUX            GENMASK(24, 17)
43
+
43
+
44
#define HIBMC_DP_PHYIF_CTRL0            0xa0
44
#define HIBMC_DP_PHYIF_CTRL0            0xa0
45
+#define HIBMC_DP_CFG_SCRAMBLE_EN        BIT(0)
45
+#define HIBMC_DP_CFG_SCRAMBLE_EN        BIT(0)
46
+#define HIBMC_DP_CFG_PAT_SEL            GENMASK(7, 4)
46
+#define HIBMC_DP_CFG_PAT_SEL            GENMASK(7, 4)
47
+#define HIBMC_DP_CFG_LANE_DATA_EN        GENMASK(11, 8)
47
+#define HIBMC_DP_CFG_LANE_DATA_EN        GENMASK(11, 8)
48
+
48
+
49
#define HIBMC_DP_VIDEO_CTRL            0x100
49
#define HIBMC_DP_VIDEO_CTRL            0x100
50
+#define HIBMC_DP_CFG_STREAM_RGB_ENABLE        BIT(1)
50
+#define HIBMC_DP_CFG_STREAM_RGB_ENABLE        BIT(1)
51
+#define HIBMC_DP_CFG_STREAM_VIDEO_MAPPING    GENMASK(5, 2)
51
+#define HIBMC_DP_CFG_STREAM_VIDEO_MAPPING    GENMASK(5, 2)
52
+#define HIBMC_DP_CFG_STREAM_FRAME_MODE        BIT(6)
52
+#define HIBMC_DP_CFG_STREAM_FRAME_MODE        BIT(6)
53
+#define HIBMC_DP_CFG_STREAM_HSYNC_POLARITY    BIT(7)
53
+#define HIBMC_DP_CFG_STREAM_HSYNC_POLARITY    BIT(7)
54
+#define HIBMC_DP_CFG_STREAM_VSYNC_POLARITY    BIT(8)
54
+#define HIBMC_DP_CFG_STREAM_VSYNC_POLARITY    BIT(8)
55
+
55
+
56
#define HIBMC_DP_VIDEO_CONFIG0            0x104
56
#define HIBMC_DP_VIDEO_CONFIG0            0x104
57
+#define HIBMC_DP_CFG_STREAM_HACTIVE        GENMASK(31, 16)
57
+#define HIBMC_DP_CFG_STREAM_HACTIVE        GENMASK(31, 16)
58
+#define HIBMC_DP_CFG_STREAM_HBLANK        GENMASK(15, 0)
58
+#define HIBMC_DP_CFG_STREAM_HBLANK        GENMASK(15, 0)
59
+
59
+
60
#define HIBMC_DP_VIDEO_CONFIG1            0x108
60
#define HIBMC_DP_VIDEO_CONFIG1            0x108
61
+#define HIBMC_DP_CFG_STREAM_VACTIVE        GENMASK(31, 16)
61
+#define HIBMC_DP_CFG_STREAM_VACTIVE        GENMASK(31, 16)
62
+#define HIBMC_DP_CFG_STREAM_VBLANK        GENMASK(15, 0)
62
+#define HIBMC_DP_CFG_STREAM_VBLANK        GENMASK(15, 0)
63
+
63
+
64
#define HIBMC_DP_VIDEO_CONFIG2            0x10c
64
#define HIBMC_DP_VIDEO_CONFIG2            0x10c
65
+#define HIBMC_DP_CFG_STREAM_HSYNC_WIDTH        GENMASK(15, 0)
65
+#define HIBMC_DP_CFG_STREAM_HSYNC_WIDTH        GENMASK(15, 0)
66
+
66
+
67
#define HIBMC_DP_VIDEO_CONFIG3            0x110
67
#define HIBMC_DP_VIDEO_CONFIG3            0x110
68
+#define HIBMC_DP_CFG_STREAM_VSYNC_WIDTH        GENMASK(15, 0)
68
+#define HIBMC_DP_CFG_STREAM_VSYNC_WIDTH        GENMASK(15, 0)
69
+#define HIBMC_DP_CFG_STREAM_VFRONT_PORCH    GENMASK(31, 16)
69
+#define HIBMC_DP_CFG_STREAM_VFRONT_PORCH    GENMASK(31, 16)
70
+
70
+
71
#define HIBMC_DP_VIDEO_PACKET            0x114
71
#define HIBMC_DP_VIDEO_PACKET            0x114
72
+#define HIBMC_DP_CFG_STREAM_TU_SYMBOL_SIZE    GENMASK(5, 0)
72
+#define HIBMC_DP_CFG_STREAM_TU_SYMBOL_SIZE    GENMASK(5, 0)
73
+#define HIBMC_DP_CFG_STREAM_TU_SYMBOL_FRAC_SIZE    GENMASK(9, 6)
73
+#define HIBMC_DP_CFG_STREAM_TU_SYMBOL_FRAC_SIZE    GENMASK(9, 6)
74
+
74
+
75
#define HIBMC_DP_VIDEO_MSA0            0x118
75
#define HIBMC_DP_VIDEO_MSA0            0x118
76
+#define HIBMC_DP_CFG_STREAM_VSTART        GENMASK(31, 16)
76
+#define HIBMC_DP_CFG_STREAM_VSTART        GENMASK(31, 16)
77
+#define HIBMC_DP_CFG_STREAM_HSTART        GENMASK(15, 0)
77
+#define HIBMC_DP_CFG_STREAM_HSTART        GENMASK(15, 0)
78
+
78
+
79
#define HIBMC_DP_VIDEO_MSA1            0x11c
79
#define HIBMC_DP_VIDEO_MSA1            0x11c
80
#define HIBMC_DP_VIDEO_MSA2            0x120
80
#define HIBMC_DP_VIDEO_MSA2            0x120
81
+
81
+
82
#define HIBMC_DP_VIDEO_HORIZONTAL_SIZE        0X124
82
#define HIBMC_DP_VIDEO_HORIZONTAL_SIZE        0X124
83
+#define HIBMC_DP_CFG_STREAM_HTOTAL_SIZE        GENMASK(31, 16)
83
+#define HIBMC_DP_CFG_STREAM_HTOTAL_SIZE        GENMASK(31, 16)
84
+#define HIBMC_DP_CFG_STREAM_HBLANK_SIZE        GENMASK(15, 0)
84
+#define HIBMC_DP_CFG_STREAM_HBLANK_SIZE        GENMASK(15, 0)
85
+
85
+
86
#define HIBMC_DP_TIMING_GEN_CONFIG0        0x26c
86
#define HIBMC_DP_TIMING_GEN_CONFIG0        0x26c
87
+#define HIBMC_DP_CFG_TIMING_GEN0_HACTIVE    GENMASK(31, 16)
87
+#define HIBMC_DP_CFG_TIMING_GEN0_HACTIVE    GENMASK(31, 16)
88
+#define HIBMC_DP_CFG_TIMING_GEN0_HBLANK        GENMASK(15, 0)
88
+#define HIBMC_DP_CFG_TIMING_GEN0_HBLANK        GENMASK(15, 0)
89
+
89
+
90
#define HIBMC_DP_TIMING_GEN_CONFIG2        0x274
90
#define HIBMC_DP_TIMING_GEN_CONFIG2        0x274
91
+#define HIBMC_DP_CFG_TIMING_GEN0_VACTIVE    GENMASK(31, 16)
91
+#define HIBMC_DP_CFG_TIMING_GEN0_VACTIVE    GENMASK(31, 16)
92
+#define HIBMC_DP_CFG_TIMING_GEN0_VBLANK        GENMASK(15, 0)
92
+#define HIBMC_DP_CFG_TIMING_GEN0_VBLANK        GENMASK(15, 0)
93
+
93
+
94
#define HIBMC_DP_TIMING_GEN_CONFIG3        0x278
94
#define HIBMC_DP_TIMING_GEN_CONFIG3        0x278
95
+#define HIBMC_DP_CFG_TIMING_GEN0_VFRONT_PORCH    GENMASK(31, 16)
95
+#define HIBMC_DP_CFG_TIMING_GEN0_VFRONT_PORCH    GENMASK(31, 16)
96
+
96
+
97
#define HIBMC_DP_HDCP_CFG            0x600
97
#define HIBMC_DP_HDCP_CFG            0x600
98
+
98
+
99
#define HIBMC_DP_DPTX_RST_CTRL            0x700
99
#define HIBMC_DP_DPTX_RST_CTRL            0x700
100
+#define HIBMC_DP_CFG_AUX_RST_N            BIT(4)
100
+#define HIBMC_DP_CFG_AUX_RST_N            BIT(4)
101
+
101
+
102
#define HIBMC_DP_DPTX_CLK_CTRL            0x704
102
#define HIBMC_DP_DPTX_CLK_CTRL            0x704
103
+
103
+
104
#define HIBMC_DP_DPTX_GCTL0            0x708
104
#define HIBMC_DP_DPTX_GCTL0            0x708
105
+#define HIBMC_DP_CFG_PHY_LANE_NUM        GENMASK(2, 1)
105
+#define HIBMC_DP_CFG_PHY_LANE_NUM        GENMASK(2, 1)
106
+
106
+
107
#define HIBMC_DP_INTR_ENABLE            0x720
107
#define HIBMC_DP_INTR_ENABLE            0x720
108
#define HIBMC_DP_INTR_ORIGINAL_STATUS        0x728
108
#define HIBMC_DP_INTR_ORIGINAL_STATUS        0x728
109
-#define HIBMC_DP_TIMING_MODEL_CTRL        0x884
109
-#define HIBMC_DP_TIMING_MODEL_CTRL        0x884
110
-#define HIBMC_DP_TIMING_SYNC_CTRL        0xFF0
110
-#define HIBMC_DP_TIMING_SYNC_CTRL        0xFF0
111
111
112
-#define HIBMC_DP_CFG_AUX_SYNC_LEN_SEL        BIT(1)
112
-#define HIBMC_DP_CFG_AUX_SYNC_LEN_SEL        BIT(1)
113
-#define HIBMC_DP_CFG_AUX_TIMER_TIMEOUT        BIT(2)
113
-#define HIBMC_DP_CFG_AUX_TIMER_TIMEOUT        BIT(2)
114
-#define HIBMC_DP_CFG_STREAM_FRAME_MODE        BIT(6)
114
-#define HIBMC_DP_CFG_STREAM_FRAME_MODE        BIT(6)
115
-#define HIBMC_DP_CFG_AUX_MIN_PULSE_NUM        GENMASK(13, 9)
115
-#define HIBMC_DP_CFG_AUX_MIN_PULSE_NUM        GENMASK(13, 9)
116
-#define HIBMC_DP_CFG_LANE_DATA_EN        GENMASK(11, 8)
116
-#define HIBMC_DP_CFG_LANE_DATA_EN        GENMASK(11, 8)
117
-#define HIBMC_DP_CFG_PHY_LANE_NUM        GENMASK(2, 1)
117
-#define HIBMC_DP_CFG_PHY_LANE_NUM        GENMASK(2, 1)
118
-#define HIBMC_DP_CFG_AUX_REQ            BIT(0)
118
-#define HIBMC_DP_CFG_AUX_REQ            BIT(0)
119
-#define HIBMC_DP_CFG_AUX_RST_N            BIT(4)
119
-#define HIBMC_DP_CFG_AUX_RST_N            BIT(4)
120
-#define HIBMC_DP_CFG_AUX_TIMEOUT        BIT(0)
120
-#define HIBMC_DP_CFG_AUX_TIMEOUT        BIT(0)
121
-#define HIBMC_DP_CFG_AUX_READY_DATA_BYTE    GENMASK(16, 12)
121
-#define HIBMC_DP_CFG_AUX_READY_DATA_BYTE    GENMASK(16, 12)
122
-#define HIBMC_DP_CFG_AUX            GENMASK(24, 17)
122
-#define HIBMC_DP_CFG_AUX            GENMASK(24, 17)
123
-#define HIBMC_DP_CFG_AUX_STATUS            GENMASK(11, 4)
123
-#define HIBMC_DP_CFG_AUX_STATUS            GENMASK(11, 4)
124
-#define HIBMC_DP_CFG_SCRAMBLE_EN        BIT(0)
124
-#define HIBMC_DP_CFG_SCRAMBLE_EN        BIT(0)
125
-#define HIBMC_DP_CFG_PAT_SEL            GENMASK(7, 4)
125
-#define HIBMC_DP_CFG_PAT_SEL            GENMASK(7, 4)
126
-#define HIBMC_DP_CFG_TIMING_GEN0_HACTIVE    GENMASK(31, 16)
126
-#define HIBMC_DP_CFG_TIMING_GEN0_HACTIVE    GENMASK(31, 16)
127
-#define HIBMC_DP_CFG_TIMING_GEN0_HBLANK        GENMASK(15, 0)
127
-#define HIBMC_DP_CFG_TIMING_GEN0_HBLANK        GENMASK(15, 0)
128
-#define HIBMC_DP_CFG_TIMING_GEN0_VACTIVE    GENMASK(31, 16)
128
-#define HIBMC_DP_CFG_TIMING_GEN0_VACTIVE    GENMASK(31, 16)
129
-#define HIBMC_DP_CFG_TIMING_GEN0_VBLANK        GENMASK(15, 0)
129
-#define HIBMC_DP_CFG_TIMING_GEN0_VBLANK        GENMASK(15, 0)
130
-#define HIBMC_DP_CFG_TIMING_GEN0_VFRONT_PORCH    GENMASK(31, 16)
130
-#define HIBMC_DP_CFG_TIMING_GEN0_VFRONT_PORCH    GENMASK(31, 16)
131
-#define HIBMC_DP_CFG_STREAM_HACTIVE        GENMASK(31, 16)
131
-#define HIBMC_DP_CFG_STREAM_HACTIVE        GENMASK(31, 16)
132
-#define HIBMC_DP_CFG_STREAM_HBLANK        GENMASK(15, 0)
132
-#define HIBMC_DP_CFG_STREAM_HBLANK        GENMASK(15, 0)
133
-#define HIBMC_DP_CFG_STREAM_HSYNC_WIDTH        GENMASK(15, 0)
133
-#define HIBMC_DP_CFG_STREAM_HSYNC_WIDTH        GENMASK(15, 0)
134
-#define HIBMC_DP_CFG_STREAM_VACTIVE        GENMASK(31, 16)
134
-#define HIBMC_DP_CFG_STREAM_VACTIVE        GENMASK(31, 16)
135
-#define HIBMC_DP_CFG_STREAM_VBLANK        GENMASK(15, 0)
135
-#define HIBMC_DP_CFG_STREAM_VBLANK        GENMASK(15, 0)
136
-#define HIBMC_DP_CFG_STREAM_VFRONT_PORCH    GENMASK(31, 16)
136
-#define HIBMC_DP_CFG_STREAM_VFRONT_PORCH    GENMASK(31, 16)
137
-#define HIBMC_DP_CFG_STREAM_VSYNC_WIDTH        GENMASK(15, 0)
137
-#define HIBMC_DP_CFG_STREAM_VSYNC_WIDTH        GENMASK(15, 0)
138
-#define HIBMC_DP_CFG_STREAM_VSTART        GENMASK(31, 16)
138
-#define HIBMC_DP_CFG_STREAM_VSTART        GENMASK(31, 16)
139
-#define HIBMC_DP_CFG_STREAM_HSTART        GENMASK(15, 0)
139
-#define HIBMC_DP_CFG_STREAM_HSTART        GENMASK(15, 0)
140
-#define HIBMC_DP_CFG_STREAM_VSYNC_POLARITY    BIT(8)
140
-#define HIBMC_DP_CFG_STREAM_VSYNC_POLARITY    BIT(8)
141
-#define HIBMC_DP_CFG_STREAM_HSYNC_POLARITY    BIT(7)
141
-#define HIBMC_DP_CFG_STREAM_HSYNC_POLARITY    BIT(7)
142
-#define HIBMC_DP_CFG_STREAM_RGB_ENABLE        BIT(1)
142
-#define HIBMC_DP_CFG_STREAM_RGB_ENABLE        BIT(1)
143
-#define HIBMC_DP_CFG_STREAM_VIDEO_MAPPING    GENMASK(5, 2)
143
-#define HIBMC_DP_CFG_STREAM_VIDEO_MAPPING    GENMASK(5, 2)
144
+#define HIBMC_DP_TIMING_MODEL_CTRL        0x884
144
+#define HIBMC_DP_TIMING_MODEL_CTRL        0x884
145
#define HIBMC_DP_CFG_PIXEL_NUM_TIMING_MODE_SEL1    GENMASK(31, 16)
145
#define HIBMC_DP_CFG_PIXEL_NUM_TIMING_MODE_SEL1    GENMASK(31, 16)
146
-#define HIBMC_DP_CFG_STREAM_TU_SYMBOL_SIZE    GENMASK(5, 0)
146
-#define HIBMC_DP_CFG_STREAM_TU_SYMBOL_SIZE    GENMASK(5, 0)
147
-#define HIBMC_DP_CFG_STREAM_TU_SYMBOL_FRAC_SIZE    GENMASK(9, 6)
147
-#define HIBMC_DP_CFG_STREAM_TU_SYMBOL_FRAC_SIZE    GENMASK(9, 6)
148
-#define HIBMC_DP_CFG_STREAM_HTOTAL_SIZE        GENMASK(31, 16)
148
-#define HIBMC_DP_CFG_STREAM_HTOTAL_SIZE        GENMASK(31, 16)
149
-#define HIBMC_DP_CFG_STREAM_HBLANK_SIZE        GENMASK(15, 0)
149
-#define HIBMC_DP_CFG_STREAM_HBLANK_SIZE        GENMASK(15, 0)
150
+
150
+
151
+#define HIBMC_DP_TIMING_SYNC_CTRL        0xFF0
151
+#define HIBMC_DP_TIMING_SYNC_CTRL        0xFF0
152
152
153
#endif
153
#endif
154
--
154
--
155
2.33.0
155
2.33.0
diff view generated by jsdifflib
...
...
12
For voltage and pre-emphasis levels changing, we can cfg different
12
For voltage and pre-emphasis levels changing, we can cfg different
13
serdes ffe value.
13
serdes ffe value.
14
14
15
Signed-off-by: Baihan Li <libaihan@huawei.com>
15
Signed-off-by: Baihan Li <libaihan@huawei.com>
16
Signed-off-by: Yongbang Shi <shiyongbang@huawei.com>
16
Signed-off-by: Yongbang Shi <shiyongbang@huawei.com>
17
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
17
---
18
---
18
ChangeLog:
19
ChangeLog:
20
v5 -> v6:
21
- fix the DP_SERDES_VOL2_PRE0 value after electrical test.
19
v3 -> v4:
22
v3 -> v4:
20
- fix the serdes cfg in hibmc_dp_serdes_set_tx_cfg(), suggested by Dmitry Baryshkov.
23
- fix the serdes cfg in hibmc_dp_serdes_set_tx_cfg(), suggested by Dmitry Baryshkov.
21
- move the dp serdes registers to dp_reg.h, suggested by Dmitry Baryshkov.
24
- move the dp serdes registers to dp_reg.h, suggested by Dmitry Baryshkov.
22
-
25
-
23
v2 -> v3:
26
v2 -> v3:
...
...
117
+#define DP_SERDES_VOL0_PRE2        0x53c0
120
+#define DP_SERDES_VOL0_PRE2        0x53c0
118
+#define DP_SERDES_VOL0_PRE3        0x8400
121
+#define DP_SERDES_VOL0_PRE3        0x8400
119
+#define DP_SERDES_VOL1_PRE0        0x380
122
+#define DP_SERDES_VOL1_PRE0        0x380
120
+#define DP_SERDES_VOL1_PRE1        0x3440
123
+#define DP_SERDES_VOL1_PRE1        0x3440
121
+#define DP_SERDES_VOL1_PRE2        0x6480
124
+#define DP_SERDES_VOL1_PRE2        0x6480
122
+#define DP_SERDES_VOL2_PRE0        0x500
125
+#define DP_SERDES_VOL2_PRE0        0x4c1
123
+#define DP_SERDES_VOL2_PRE1        0x4500
126
+#define DP_SERDES_VOL2_PRE1        0x4500
124
+#define DP_SERDES_VOL3_PRE0        0x600
127
+#define DP_SERDES_VOL3_PRE0        0x600
125
+#define DP_SERDES_BW_8_1        0x3
128
+#define DP_SERDES_BW_8_1        0x3
126
+
129
+
127
#endif
130
#endif
...
...
diff view generated by jsdifflib
1
From: Baihan Li <libaihan@huawei.com>
1
From: Baihan Li <libaihan@huawei.com>
2
2
3
Add dp serdes cfg in link training process, and related adapting
3
Add dp serdes cfg in link training process, and related adapting
4
and modificating. Change some init values about training,
4
and modificating. Change some init values about training, because we want
5
because we want completely to negotiation process, so we start with
5
completely to negotiation process, so we start with the maximum rate and
6
the maximum rate and the electrical characteristic level is 0.
6
the electrical characteristic level is 0. Because serdes default cfgs is
7
changed and used in hibmc_kms_init(), we changed the if-statement to check
8
whether the value is 0.
7
9
8
Signed-off-by: Baihan Li <libaihan@huawei.com>
10
Signed-off-by: Baihan Li <libaihan@huawei.com>
9
Signed-off-by: Yongbang Shi <shiyongbang@huawei.com>
11
Signed-off-by: Yongbang Shi <shiyongbang@huawei.com>
12
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
10
---
13
---
11
ChangeLog:
14
ChangeLog:
15
v4 -> v5:
16
- add commit log about hibmc_kms_init(), suggested by Dmitry Baryshkov.
17
- fix the format of block comments, suggested by Dmitry Baryshkov.
18
- add hibmc_dp_get_serdes_rate_cfg() to correct transferring serdes cfg.
12
v3 -> v4:
19
v3 -> v4:
13
- add comments for if-statement of dp_init(), suggested by Dmitry Baryshkov.
20
- add comments for if-statement of dp_init(), suggested by Dmitry Baryshkov.
14
v2 -> v3:
21
v2 -> v3:
15
- change commit to an imperative sentence, suggested by Dmitry Baryshkov.
22
- change commit to an imperative sentence, suggested by Dmitry Baryshkov.
16
- put HIBMC_DP_HOST_SERDES_CTRL in dp_serdes.h, suggested by Dmitry Baryshkov.
23
- put HIBMC_DP_HOST_SERDES_CTRL in dp_serdes.h, suggested by Dmitry Baryshkov.
17
v1 -> v2:
24
v1 -> v2:
18
- splittting the patch and add more detailed the changes in the commit message, suggested by Dmitry Baryshkov.
25
- splittting the patch and add more detailed the changes in the commit message, suggested by Dmitry Baryshkov.
19
---
26
---
20
1 | 0
21
.../gpu/drm/hisilicon/hibmc/dp/dp_config.h | 1 +
27
.../gpu/drm/hisilicon/hibmc/dp/dp_config.h | 1 +
22
drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.c | 5 ++-
28
drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.c | 5 +-
23
drivers/gpu/drm/hisilicon/hibmc/dp/dp_link.c | 32 ++++++++++++++++---
29
drivers/gpu/drm/hisilicon/hibmc/dp/dp_link.c | 77 ++++++++++++++-----
24
drivers/gpu/drm/hisilicon/hibmc/dp/dp_reg.h | 5 +++
30
drivers/gpu/drm/hisilicon/hibmc/dp/dp_reg.h | 5 ++
25
.../gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c | 12 +++----
31
.../gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c | 13 ++--
26
6 files changed, 43 insertions(+), 12 deletions(-)
32
5 files changed, 75 insertions(+), 26 deletions(-)
27
create mode 100644 1
28
33
29
diff --git a/1 b/1
30
new file mode 100644
31
index XXXXXXX..XXXXXXX
32
diff --git a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_config.h b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_config.h
34
diff --git a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_config.h b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_config.h
33
index XXXXXXX..XXXXXXX 100644
35
index XXXXXXX..XXXXXXX 100644
34
--- a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_config.h
36
--- a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_config.h
35
+++ b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_config.h
37
+++ b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_config.h
36
@@ -XXX,XX +XXX,XX @@
38
@@ -XXX,XX +XXX,XX @@
...
...
65
    writel(HIBMC_DP_HDCP, dp_dev->base + HIBMC_DP_HDCP_CFG);
67
    writel(HIBMC_DP_HDCP, dp_dev->base + HIBMC_DP_HDCP_CFG);
66
diff --git a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_link.c b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_link.c
68
diff --git a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_link.c b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_link.c
67
index XXXXXXX..XXXXXXX 100644
69
index XXXXXXX..XXXXXXX 100644
68
--- a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_link.c
70
--- a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_link.c
69
+++ b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_link.c
71
+++ b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_link.c
72
@@ -XXX,XX +XXX,XX @@
73
74
#define HIBMC_EQ_MAX_RETRY 5
75
76
+static inline int hibmc_dp_get_serdes_rate_cfg(struct hibmc_dp_dev *dp)
77
+{
78
+    switch (dp->link.cap.link_rate) {
79
+    case DP_LINK_BW_1_62:
80
+        return DP_SERDES_BW_1_62;
81
+    case DP_LINK_BW_2_7:
82
+        return DP_SERDES_BW_2_7;
83
+    case DP_LINK_BW_5_4:
84
+        return DP_SERDES_BW_5_4;
85
+    case DP_LINK_BW_8_1:
86
+        return DP_SERDES_BW_8_1;
87
+    default:
88
+        return -EINVAL;
89
+    }
90
+}
91
+
92
static int hibmc_dp_link_training_configure(struct hibmc_dp_dev *dp)
93
{
94
    u8 buf[2];
95
@@ -XXX,XX +XXX,XX @@ static int hibmc_dp_link_training_configure(struct hibmc_dp_dev *dp)
96
        return ret >= 0 ? -EIO : ret;
97
    }
98
99
-    ret = drm_dp_read_dpcd_caps(&dp->aux, dp->dpcd);
100
-    if (ret)
101
-        drm_err(dp->dev, "dp aux read dpcd failed, ret: %d\n", ret);
102
-
103
-    return ret;
104
+    return 0;
105
}
106
107
static int hibmc_dp_link_set_pattern(struct hibmc_dp_dev *dp, int pattern)
70
@@ -XXX,XX +XXX,XX @@ static int hibmc_dp_link_training_cr_pre(struct hibmc_dp_dev *dp)
108
@@ -XXX,XX +XXX,XX @@ static int hibmc_dp_link_training_cr_pre(struct hibmc_dp_dev *dp)
71
        return ret;
109
        return ret;
72
110
73
    for (i = 0; i < dp->link.cap.lanes; i++)
111
    for (i = 0; i < dp->link.cap.lanes; i++)
74
-        train_set[i] = DP_TRAIN_VOLTAGE_SWING_LEVEL_2;
112
-        train_set[i] = DP_TRAIN_VOLTAGE_SWING_LEVEL_2;
...
...
85
}
123
}
86
124
87
-static inline int hibmc_dp_link_reduce_rate(struct hibmc_dp_dev *dp)
125
-static inline int hibmc_dp_link_reduce_rate(struct hibmc_dp_dev *dp)
88
+static int hibmc_dp_link_reduce_rate(struct hibmc_dp_dev *dp)
126
+static int hibmc_dp_link_reduce_rate(struct hibmc_dp_dev *dp)
89
{
127
{
90
+    u8 rate = 0;
128
-    switch (dp->link.cap.link_rate) {
91
+
129
-    case DP_LINK_BW_2_7:
92
    switch (dp->link.cap.link_rate) {
130
-        dp->link.cap.link_rate = DP_LINK_BW_1_62;
93
    case DP_LINK_BW_2_7:
94
        dp->link.cap.link_rate = DP_LINK_BW_1_62;
95
-        return 0;
131
-        return 0;
96
+        rate = DP_SERDES_BW_1_62;
132
-    case DP_LINK_BW_5_4:
97
+        break;
133
-        dp->link.cap.link_rate = DP_LINK_BW_2_7;
98
    case DP_LINK_BW_5_4:
99
        dp->link.cap.link_rate = DP_LINK_BW_2_7;
100
-        return 0;
134
-        return 0;
101
+        rate = DP_SERDES_BW_2_7;
135
-    case DP_LINK_BW_8_1:
102
+        break;
136
-        dp->link.cap.link_rate = DP_LINK_BW_5_4;
103
    case DP_LINK_BW_8_1:
104
        dp->link.cap.link_rate = DP_LINK_BW_5_4;
105
-        return 0;
137
-        return 0;
106
+        rate = DP_SERDES_BW_5_4;
138
-    default:
107
+        break;
139
+    int ret;
108
    default:
140
+
141
+    if (dp->link.cap.link_rate == DP_LINK_BW_1_62)
109
        return -EINVAL;
142
        return -EINVAL;
110
    }
143
-    }
111
+
144
+
112
+    return hibmc_dp_serdes_rate_switch(rate, dp);
145
+    ret = hibmc_dp_get_serdes_rate_cfg(dp);
113
}
146
+    if (ret < 0)
147
+        return ret;
148
+
149
+    return hibmc_dp_serdes_rate_switch(--ret, dp);
150
}
114
151
115
static inline int hibmc_dp_link_reduce_lane(struct hibmc_dp_dev *dp)
152
static inline int hibmc_dp_link_reduce_lane(struct hibmc_dp_dev *dp)
116
@@ -XXX,XX +XXX,XX @@ static inline int hibmc_dp_link_reduce_lane(struct hibmc_dp_dev *dp)
153
@@ -XXX,XX +XXX,XX @@ static inline int hibmc_dp_link_reduce_lane(struct hibmc_dp_dev *dp)
117
    switch (dp->link.cap.lanes) {
154
    switch (dp->link.cap.lanes) {
118
    case 0x2:
155
    case 0x2:
...
...
143
+            return ret;
180
+            return ret;
144
+
181
+
145
        ret = drm_dp_dpcd_write(&dp->aux, DP_TRAINING_LANE0_SET,
182
        ret = drm_dp_dpcd_write(&dp->aux, DP_TRAINING_LANE0_SET,
146
                    dp->link.train_set, dp->link.cap.lanes);
183
                    dp->link.train_set, dp->link.cap.lanes);
147
        if (ret != dp->link.cap.lanes) {
184
        if (ret != dp->link.cap.lanes) {
185
@@ -XXX,XX +XXX,XX @@ int hibmc_dp_link_training(struct hibmc_dp_dev *dp)
186
    struct hibmc_dp_link *link = &dp->link;
187
    int ret;
188
189
+    ret = drm_dp_read_dpcd_caps(&dp->aux, dp->dpcd);
190
+    if (ret)
191
+        drm_err(dp->dev, "dp aux read dpcd failed, ret: %d\n", ret);
192
+
193
+    dp->link.cap.link_rate = dp->dpcd[DP_MAX_LINK_RATE];
194
+    dp->link.cap.lanes = 0x2;
195
+
196
+    ret = hibmc_dp_get_serdes_rate_cfg(dp);
197
+    if (ret < 0)
198
+        return ret;
199
+
200
+    ret = hibmc_dp_serdes_rate_switch(ret, dp);
201
+    if (ret)
202
+        return ret;
203
+
204
    while (true) {
205
        ret = hibmc_dp_link_training_cr_pre(dp);
206
        if (ret)
148
diff --git a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_reg.h b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_reg.h
207
diff --git a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_reg.h b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_reg.h
149
index XXXXXXX..XXXXXXX 100644
208
index XXXXXXX..XXXXXXX 100644
150
--- a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_reg.h
209
--- a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_reg.h
151
+++ b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_reg.h
210
+++ b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_reg.h
152
@@ -XXX,XX +XXX,XX @@
211
@@ -XXX,XX +XXX,XX @@
...
...
194
    }
253
    }
195
254
196
-    /* if DP existed, init DP */
255
-    /* if DP existed, init DP */
197
-    if ((readl(priv->mmio + HIBMC_DP_HOST_SERDES_CTRL) &
256
-    if ((readl(priv->mmio + HIBMC_DP_HOST_SERDES_CTRL) &
198
-     HIBMC_DP_HOST_SERDES_CTRL_MASK) == HIBMC_DP_HOST_SERDES_CTRL_VAL) {
257
-     HIBMC_DP_HOST_SERDES_CTRL_MASK) == HIBMC_DP_HOST_SERDES_CTRL_VAL) {
199
+    /* if the serdes reg is readable and is not equal to 0,
258
+    /*
200
+     * DP existed, and init DP.
259
+     * If the serdes reg is readable and is not equal to 0,
260
+     * DP block exists and initializes it.
201
+     */
261
+     */
202
+    ret = readl(priv->mmio + HIBMC_DP_HOST_SERDES_CTRL);
262
+    ret = readl(priv->mmio + HIBMC_DP_HOST_SERDES_CTRL);
203
+    if (ret) {
263
+    if (ret) {
204
        ret = hibmc_dp_init(priv);
264
        ret = hibmc_dp_init(priv);
205
        if (ret)
265
        if (ret)
206
            drm_err(dev, "failed to init dp: %d\n", ret);
266
            drm_err(dev, "failed to init dp: %d\n", ret);
207
--
267
--
208
2.33.0
268
2.33.0
diff view generated by jsdifflib
...
...
147
-    ret = drm_dp_dpcd_write(&dp->aux, DP_DOWNSPREAD_CTRL, buf, sizeof(buf));
147
-    ret = drm_dp_dpcd_write(&dp->aux, DP_DOWNSPREAD_CTRL, buf, sizeof(buf));
148
+    ret = drm_dp_dpcd_write(dp->aux, DP_DOWNSPREAD_CTRL, buf, sizeof(buf));
148
+    ret = drm_dp_dpcd_write(dp->aux, DP_DOWNSPREAD_CTRL, buf, sizeof(buf));
149
    if (ret != sizeof(buf)) {
149
    if (ret != sizeof(buf)) {
150
        drm_dbg_dp(dp->dev, "dp aux write 8b/10b and downspread failed, ret: %d\n", ret);
150
        drm_dbg_dp(dp->dev, "dp aux write 8b/10b and downspread failed, ret: %d\n", ret);
151
        return ret >= 0 ? -EIO : ret;
151
        return ret >= 0 ? -EIO : ret;
152
    }
153
154
-    ret = drm_dp_read_dpcd_caps(&dp->aux, dp->dpcd);
155
+    ret = drm_dp_read_dpcd_caps(dp->aux, dp->dpcd);
156
    if (ret)
157
        drm_err(dp->dev, "dp aux read dpcd failed, ret: %d\n", ret);
158
159
@@ -XXX,XX +XXX,XX @@ static int hibmc_dp_link_set_pattern(struct hibmc_dp_dev *dp, int pattern)
152
@@ -XXX,XX +XXX,XX @@ static int hibmc_dp_link_set_pattern(struct hibmc_dp_dev *dp, int pattern)
160
153
161
    hibmc_dp_reg_write_field(dp, HIBMC_DP_PHYIF_CTRL0, HIBMC_DP_CFG_PAT_SEL, val);
154
    hibmc_dp_reg_write_field(dp, HIBMC_DP_PHYIF_CTRL0, HIBMC_DP_CFG_PAT_SEL, val);
162
155
163
-    ret = drm_dp_dpcd_write(&dp->aux, DP_TRAINING_PATTERN_SET, &buf, sizeof(buf));
156
-    ret = drm_dp_dpcd_write(&dp->aux, DP_TRAINING_PATTERN_SET, &buf, sizeof(buf));
...
...
214
-        ret = drm_dp_dpcd_write(&dp->aux, DP_TRAINING_LANE0_SET,
207
-        ret = drm_dp_dpcd_write(&dp->aux, DP_TRAINING_LANE0_SET,
215
+        ret = drm_dp_dpcd_write(dp->aux, DP_TRAINING_LANE0_SET,
208
+        ret = drm_dp_dpcd_write(dp->aux, DP_TRAINING_LANE0_SET,
216
                    dp->link.train_set, dp->link.cap.lanes);
209
                    dp->link.train_set, dp->link.cap.lanes);
217
        if (ret != dp->link.cap.lanes) {
210
        if (ret != dp->link.cap.lanes) {
218
            drm_dbg_dp(dp->dev, "Update link training failed\n");
211
            drm_dbg_dp(dp->dev, "Update link training failed\n");
212
@@ -XXX,XX +XXX,XX @@ int hibmc_dp_link_training(struct hibmc_dp_dev *dp)
213
    struct hibmc_dp_link *link = &dp->link;
214
    int ret;
215
216
-    ret = drm_dp_read_dpcd_caps(&dp->aux, dp->dpcd);
217
+    ret = drm_dp_read_dpcd_caps(dp->aux, dp->dpcd);
218
    if (ret)
219
        drm_err(dp->dev, "dp aux read dpcd failed, ret: %d\n", ret);
220
219
--
221
--
220
2.33.0
222
2.33.0
diff view generated by jsdifflib
1
From: Baihan Li <libaihan@huawei.com>
1
From: Baihan Li <libaihan@huawei.com>
2
2
3
Add registering drm_aux and use it to get connector edid with drm
3
Add registering drm_aux and use it to get connector edid with drm
4
functions. Add ddc channel in connector initialization to put drm_aux
4
functions. Add ddc channel in connector initialization to put drm_aux
5
in drm_connector. And also add detect callback to detect connector
5
in drm_connector.
6
befored call connector_get_modes.
7
6
8
Signed-off-by: Baihan Li <libaihan@huawei.com>
7
Signed-off-by: Baihan Li <libaihan@huawei.com>
9
Signed-off-by: Yongbang Shi <shiyongbang@huawei.com>
8
Signed-off-by: Yongbang Shi <shiyongbang@huawei.com>
10
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
9
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
11
---
10
---
12
ChangeLog:
11
ChangeLog:
12
v7 -> v8:
13
- use drm_edid_read() in hibmc_dp_connector_get_modes(), suggested by Jani Nikula
14
v6 -> v7:
15
- add if statement about drm aux in hibmc_dp_connector_get_modes(), suggested by Jani Nikula
16
v5 -> v6:
17
- move the detect_ctx() to the patch 7/9.
13
v2 -> v3:
18
v2 -> v3:
14
- Capitalized EDID and AUX, suggested by Dmitry Baryshkov.
19
- Capitalized EDID and AUX, suggested by Dmitry Baryshkov.
15
v1 -> v2:
20
v1 -> v2:
16
- deleting type conversion, suggested by Dmitry Baryshkov.
21
- deleting type conversion, suggested by Dmitry Baryshkov.
17
- deleting hibmc_dp_connector_get_modes() and using drm_connector_helper_get_modes(), suggested by Dmitry Baryshkov.
22
- deleting hibmc_dp_connector_get_modes() and using drm_connector_helper_get_modes(), suggested by Dmitry Baryshkov.
18
---
23
---
19
drivers/gpu/drm/hisilicon/hibmc/dp/dp_aux.c | 3 +-
24
drivers/gpu/drm/hisilicon/hibmc/dp/dp_aux.c | 3 +-
20
.../gpu/drm/hisilicon/hibmc/hibmc_drm_dp.c | 33 ++++++++++++++++---
25
.../gpu/drm/hisilicon/hibmc/hibmc_drm_dp.c | 31 ++++++++++++++++---
21
.../gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h | 5 +++
26
.../gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h | 5 +++
22
3 files changed, 35 insertions(+), 6 deletions(-)
27
3 files changed, 33 insertions(+), 6 deletions(-)
23
28
24
diff --git a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_aux.c b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_aux.c
29
diff --git a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_aux.c b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_aux.c
25
index XXXXXXX..XXXXXXX 100644
30
index XXXXXXX..XXXXXXX 100644
26
--- a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_aux.c
31
--- a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_aux.c
27
+++ b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_aux.c
32
+++ b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_aux.c
...
...
41
+++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_dp.c
46
+++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_dp.c
42
@@ -XXX,XX +XXX,XX @@
47
@@ -XXX,XX +XXX,XX @@
43
48
44
static int hibmc_dp_connector_get_modes(struct drm_connector *connector)
49
static int hibmc_dp_connector_get_modes(struct drm_connector *connector)
45
{
50
{
46
+    struct hibmc_dp *dp = to_hibmc_dp(connector);
47
+    const struct drm_edid *drm_edid;
51
+    const struct drm_edid *drm_edid;
48
    int count;
52
    int count;
49
53
50
-    count = drm_add_modes_noedid(connector, connector->dev->mode_config.max_width,
54
-    count = drm_add_modes_noedid(connector, connector->dev->mode_config.max_width,
51
-                 connector->dev->mode_config.max_height);
55
-                 connector->dev->mode_config.max_height);
52
-    drm_set_preferred_mode(connector, 1024, 768); // temporary implementation
56
-    drm_set_preferred_mode(connector, 1024, 768); // temporary implementation
53
+    drm_edid = drm_edid_read_ddc(connector, &dp->aux.ddc);
57
+    drm_edid = drm_edid_read(connector);
54
+
58
+
55
+    drm_edid_connector_update(connector, drm_edid);
59
+    drm_edid_connector_update(connector, drm_edid);
56
+
60
+
57
+    count = drm_edid_connector_add_modes(connector);
61
+    count = drm_edid_connector_add_modes(connector);
58
+
62
+
59
+    drm_edid_free(drm_edid);
63
+    drm_edid_free(drm_edid);
60
64
61
    return count;
65
    return count;
62
}
66
}
63
67
@@ -XXX,XX +XXX,XX @@ static const struct drm_connector_helper_funcs hibmc_dp_conn_helper_funcs = {
64
static const struct drm_connector_helper_funcs hibmc_dp_conn_helper_funcs = {
65
    .get_modes = hibmc_dp_connector_get_modes,
68
    .get_modes = hibmc_dp_connector_get_modes,
66
+    .detect_ctx = drm_connector_helper_detect_from_ddc,
67
};
69
};
68
70
69
+static int hibmc_dp_late_register(struct drm_connector *connector)
71
+static int hibmc_dp_late_register(struct drm_connector *connector)
70
+{
72
+{
71
+    struct hibmc_dp *dp = to_hibmc_dp(connector);
73
+    struct hibmc_dp *dp = to_hibmc_dp(connector);
...
...
diff view generated by jsdifflib
...
...
8
echo: config the color bar register to display
8
echo: config the color bar register to display
9
cat: print the color bar configuration
9
cat: print the color bar configuration
10
10
11
Signed-off-by: Baihan Li <libaihan@huawei.com>
11
Signed-off-by: Baihan Li <libaihan@huawei.com>
12
Signed-off-by: Yongbang Shi <shiyongbang@huawei.com>
12
Signed-off-by: Yongbang Shi <shiyongbang@huawei.com>
13
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
13
---
14
---
14
ChangeLog:
15
ChangeLog:
15
v3 -> v4:
16
v3 -> v4:
16
- add comments in hibmc_control_write(), suggested by Dmitry Baryshkov.
17
- add comments in hibmc_control_write(), suggested by Dmitry Baryshkov.
17
v2 -> v3:
18
v2 -> v3:
...
...
diff view generated by jsdifflib
1
From: Baihan Li <libaihan@huawei.com>
1
From: Baihan Li <libaihan@huawei.com>
2
2
3
Add HPD interrupt enable functions in drm framework. Add link reset
3
Add HPD interrupt enable functions in drm framework, and also add
4
process to reset link status when a new connector pulgged in. Because the
4
detect_ctx functions. Because of the debouncing when HPD pulled out,
5
connected VGA connector would make driver can't get the userspace
5
add 200 ms delay in detect. Add link reset process to reset link status
6
call, adding detect_ctx in vga connector to make HPD active userspace.
6
when a new connector pulgged in.
7
7
8
Signed-off-by: Baihan Li <libaihan@huawei.com>
8
Signed-off-by: Baihan Li <libaihan@huawei.com>
9
Signed-off-by: Yongbang Shi <shiyongbang@huawei.com>
9
Signed-off-by: Yongbang Shi <shiyongbang@huawei.com>
10
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
10
---
11
---
11
ChangeLog:
12
ChangeLog:
13
v5 -> v6:
14
- add detect_ctx with 200ms delay, suggested by Dmitry Baryshkov.
15
v4 -> v5:
16
- separate the vga part commit, suggested by Dmitry Baryshkov.
12
v3 -> v4:
17
v3 -> v4:
13
- add link reset of rates and lanes in pre link training process, suggested by Dmitry Baryshkov.
18
- add link reset of rates and lanes in pre link training process, suggested by Dmitry Baryshkov.
14
- add vdac detect and connected/disconnected status to enable HPD process, suggested by Dmitry Baryshkov.
19
- add vdac detect and connected/disconnected status to enable HPD process, suggested by Dmitry Baryshkov.
15
- remove a drm_client, suggested by Dmitry Baryshkov.
20
- remove a drm_client, suggested by Dmitry Baryshkov.
16
- fix build errors reported by kernel test robot <lkp@intel.com>
21
- fix build errors reported by kernel test robot <lkp@intel.com>
...
...
28
- optimizing the description in commit message, suggested by Dmitry Baryshkov.
33
- optimizing the description in commit message, suggested by Dmitry Baryshkov.
29
- add mdelay(100) comments, suggested by Dmitry Baryshkov.
34
- add mdelay(100) comments, suggested by Dmitry Baryshkov.
30
- deleting display enable in hpd event, suggested by Dmitry Baryshkov.
35
- deleting display enable in hpd event, suggested by Dmitry Baryshkov.
31
---
36
---
32
.../gpu/drm/hisilicon/hibmc/dp/dp_config.h | 1 +
37
.../gpu/drm/hisilicon/hibmc/dp/dp_config.h | 1 +
33
drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.c | 36 +++++++++++++++++++
38
drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.c | 36 ++++++++++++++++
34
drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.h | 5 +++
39
drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.h | 5 +++
35
drivers/gpu/drm/hisilicon/hibmc/dp/dp_link.c | 3 ++
40
.../gpu/drm/hisilicon/hibmc/hibmc_drm_dp.c | 42 +++++++++++++++++++
36
.../gpu/drm/hisilicon/hibmc/hibmc_drm_dp.c | 33 +++++++++++++++++
41
.../gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h | 2 +
37
.../gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h | 2 ++
42
5 files changed, 86 insertions(+)
38
.../gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c | 3 ++
39
7 files changed, 83 insertions(+)
40
43
41
diff --git a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_config.h b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_config.h
44
diff --git a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_config.h b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_config.h
42
index XXXXXXX..XXXXXXX 100644
45
index XXXXXXX..XXXXXXX 100644
43
--- a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_config.h
46
--- a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_config.h
44
+++ b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_config.h
47
+++ b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_config.h
...
...
122
+void hibmc_dp_hpd_cfg(struct hibmc_dp *dp);
125
+void hibmc_dp_hpd_cfg(struct hibmc_dp *dp);
123
+void hibmc_dp_enable_int(struct hibmc_dp *dp);
126
+void hibmc_dp_enable_int(struct hibmc_dp *dp);
124
+void hibmc_dp_disable_int(struct hibmc_dp *dp);
127
+void hibmc_dp_disable_int(struct hibmc_dp *dp);
125
128
126
#endif
129
#endif
127
diff --git a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_link.c b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_link.c
128
index XXXXXXX..XXXXXXX 100644
129
--- a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_link.c
130
+++ b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_link.c
131
@@ -XXX,XX +XXX,XX @@ static int hibmc_dp_link_training_configure(struct hibmc_dp_dev *dp)
132
    if (ret)
133
        drm_err(dp->dev, "dp aux read dpcd failed, ret: %d\n", ret);
134
135
+    dp->link.cap.link_rate = dp->dpcd[DP_MAX_LINK_RATE];
136
+    dp->link.cap.lanes = 0x2;
137
+
138
    return ret;
139
}
140
141
diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_dp.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_dp.c
130
diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_dp.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_dp.c
142
index XXXXXXX..XXXXXXX 100644
131
index XXXXXXX..XXXXXXX 100644
143
--- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_dp.c
132
--- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_dp.c
144
+++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_dp.c
133
+++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_dp.c
145
@@ -XXX,XX +XXX,XX @@
134
@@ -XXX,XX +XXX,XX @@
...
...
148
137
149
+#define DP_MASKED_SINK_HPD_PLUG_INT    BIT(2)
138
+#define DP_MASKED_SINK_HPD_PLUG_INT    BIT(2)
150
+
139
+
151
static int hibmc_dp_connector_get_modes(struct drm_connector *connector)
140
static int hibmc_dp_connector_get_modes(struct drm_connector *connector)
152
{
141
{
142
    const struct drm_edid *drm_edid;
143
@@ -XXX,XX +XXX,XX @@ static int hibmc_dp_connector_get_modes(struct drm_connector *connector)
144
    return count;
145
}
146
147
+static int hibmc_dp_detect(struct drm_connector *connector,
148
+             struct drm_modeset_acquire_ctx *ctx, bool force)
149
+{
150
+    mdelay(200);
151
+
152
+    return drm_connector_helper_detect_from_ddc(connector, ctx, force);
153
+}
154
+
155
static const struct drm_connector_helper_funcs hibmc_dp_conn_helper_funcs = {
156
    .get_modes = hibmc_dp_connector_get_modes,
157
+    .detect_ctx = hibmc_dp_detect,
158
};
159
160
static int hibmc_dp_late_register(struct drm_connector *connector)
161
{
153
    struct hibmc_dp *dp = to_hibmc_dp(connector);
162
    struct hibmc_dp *dp = to_hibmc_dp(connector);
154
@@ -XXX,XX +XXX,XX @@ static int hibmc_dp_late_register(struct drm_connector *connector)
155
{
156
    struct hibmc_dp *dp = to_hibmc_dp(connector);
157
163
158
+    hibmc_dp_enable_int(dp);
164
+    hibmc_dp_enable_int(dp);
159
+
165
+
160
    return drm_dp_aux_register(&dp->aux);
166
    return drm_dp_aux_register(&dp->aux);
161
}
167
}
...
...
218
void hibmc_debugfs_init(struct drm_connector *connector, struct dentry *root);
224
void hibmc_debugfs_init(struct drm_connector *connector, struct dentry *root);
219
225
220
+irqreturn_t hibmc_dp_hpd_isr(int irq, void *arg);
226
+irqreturn_t hibmc_dp_hpd_isr(int irq, void *arg);
221
+
227
+
222
#endif
228
#endif
223
diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c
224
index XXXXXXX..XXXXXXX 100644
225
--- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c
226
+++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c
227
@@ -XXX,XX +XXX,XX @@ static void hibmc_connector_destroy(struct drm_connector *connector)
228
static const struct drm_connector_helper_funcs
229
    hibmc_connector_helper_funcs = {
230
    .get_modes = hibmc_connector_get_modes,
231
+    .detect_ctx = drm_connector_helper_detect_from_ddc,
232
};
233
234
static const struct drm_connector_funcs hibmc_connector_funcs = {
235
@@ -XXX,XX +XXX,XX @@ int hibmc_vdac_init(struct hibmc_drm_private *priv)
236
237
    drm_connector_attach_encoder(connector, encoder);
238
239
+    connector->polled = DRM_CONNECTOR_POLL_CONNECT | DRM_CONNECTOR_POLL_DISCONNECT;
240
+
241
    return 0;
242
}
243
--
229
--
244
2.33.0
230
2.33.0
diff view generated by jsdifflib
...
...
6
6
7
Signed-off-by: Baihan Li <libaihan@huawei.com>
7
Signed-off-by: Baihan Li <libaihan@huawei.com>
8
Signed-off-by: Yongbang Shi <shiyongbang@huawei.com>
8
Signed-off-by: Yongbang Shi <shiyongbang@huawei.com>
9
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
9
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
10
---
10
---
11
ChangeLog:
12
v4 -> v5:
13
- remove pci_disable_msi() in hibmc_unload()
14
---
11
drivers/gpu/drm/hisilicon/hibmc/dp/dp_reg.h | 3 +
15
drivers/gpu/drm/hisilicon/hibmc/dp/dp_reg.h | 3 +
12
.../gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c | 76 +++++++++++++++----
16
.../gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c | 74 +++++++++++++++----
13
.../gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h | 3 +
17
.../gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h | 3 +
14
3 files changed, 68 insertions(+), 14 deletions(-)
18
3 files changed, 66 insertions(+), 14 deletions(-)
15
19
16
diff --git a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_reg.h b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_reg.h
20
diff --git a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_reg.h b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_reg.h
17
index XXXXXXX..XXXXXXX 100644
21
index XXXXXXX..XXXXXXX 100644
18
--- a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_reg.h
22
--- a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_reg.h
19
+++ b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_reg.h
23
+++ b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_reg.h
...
...
71
+static void hibmc_unload(struct drm_device *dev)
75
+static void hibmc_unload(struct drm_device *dev)
72
{
76
{
73
-    struct pci_dev *pdev = to_pci_dev(dev->dev);
77
-    struct pci_dev *pdev = to_pci_dev(dev->dev);
74
-
78
-
75
    drm_atomic_helper_shutdown(dev);
79
    drm_atomic_helper_shutdown(dev);
80
+}
76
81
77
-    free_irq(pdev->irq, dev);
82
-    free_irq(pdev->irq, dev);
78
-
79
    pci_disable_msi(to_pci_dev(dev->dev));
80
+}
81
+
82
+static int hibmc_msi_init(struct drm_device *dev)
83
+static int hibmc_msi_init(struct drm_device *dev)
83
+{
84
+{
84
+    struct pci_dev *pdev = to_pci_dev(dev->dev);
85
+    struct pci_dev *pdev = to_pci_dev(dev->dev);
85
+    char name[32] = {0};
86
+    char name[32] = {0};
86
+    int valid_irq_num;
87
+    int valid_irq_num;
87
+    int irq;
88
+    int irq;
88
+    int ret;
89
+    int ret;
89
+
90
91
-    pci_disable_msi(to_pci_dev(dev->dev));
90
+    ret = pci_alloc_irq_vectors(pdev, HIBMC_MIN_VECTORS,
92
+    ret = pci_alloc_irq_vectors(pdev, HIBMC_MIN_VECTORS,
91
+                 HIBMC_MAX_VECTORS, PCI_IRQ_MSI);
93
+                 HIBMC_MAX_VECTORS, PCI_IRQ_MSI);
92
+    if (ret < 0) {
94
+    if (ret < 0) {
93
+        drm_err(dev, "enabling MSI failed: %d\n", ret);
95
+        drm_err(dev, "enabling MSI failed: %d\n", ret);
94
+        return ret;
96
+        return ret;
...
...
diff view generated by jsdifflib
New patch
1
From: Baihan Li <libaihan@huawei.com>
1
2
3
Because the connected VGA connector would make driver can't get the
4
userspace call, adding detect_ctx in vga connector to make HPD active
5
userspace.
6
7
Signed-off-by: Baihan Li <libaihan@huawei.com>
8
Signed-off-by: Yongbang Shi <shiyongbang@huawei.com>
9
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
10
---
11
drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c | 3 +++
12
1 file changed, 3 insertions(+)
13
14
diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c
15
index XXXXXXX..XXXXXXX 100644
16
--- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c
17
+++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c
18
@@ -XXX,XX +XXX,XX @@ static void hibmc_connector_destroy(struct drm_connector *connector)
19
static const struct drm_connector_helper_funcs
20
    hibmc_connector_helper_funcs = {
21
    .get_modes = hibmc_connector_get_modes,
22
+    .detect_ctx = drm_connector_helper_detect_from_ddc,
23
};
24
25
static const struct drm_connector_funcs hibmc_connector_funcs = {
26
@@ -XXX,XX +XXX,XX @@ int hibmc_vdac_init(struct hibmc_drm_private *priv)
27
28
    drm_connector_attach_encoder(connector, encoder);
29
30
+    connector->polled = DRM_CONNECTOR_POLL_CONNECT | DRM_CONNECTOR_POLL_DISCONNECT;
31
+
32
    return 0;
33
}
34
--
35
2.33.0
diff view generated by jsdifflib