* [PATCH 1/2] drm: bridge: dw-mipi-dsi: Handle NO_EOT_PACKET mode
@ 2023-01-23 18:46 Jagan Teki
2023-01-23 18:46 ` [PATCH 2/2] drm: bridge: dw-mipi-dsi: Switch to regmap support Jagan Teki
2023-01-23 20:19 ` [PATCH 1/2] drm: bridge: dw-mipi-dsi: Handle NO_EOT_PACKET mode Sam Ravnborg
0 siblings, 2 replies; 5+ messages in thread
From: Jagan Teki @ 2023-01-23 18:46 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss; +Cc: dri-devel, Jagan Teki
Many downstream bridges or panels followed by dw-mipi-dsi were
using MIPI_DSI_MODE_NO_EOT_PACKET.
So, handle the EOTP bits accordingly in the dw-mipi-dsi host.
Signed-off-by: Jagan Teki <jagan@edgeble.ai>
---
drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
index b2efecf7d160..47bd69d5ac99 100644
--- a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
+++ b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
@@ -664,7 +664,13 @@ static void dw_mipi_dsi_dpi_config(struct dw_mipi_dsi *dsi,
static void dw_mipi_dsi_packet_handler_config(struct dw_mipi_dsi *dsi)
{
- dsi_write(dsi, DSI_PCKHDL_CFG, CRC_RX_EN | ECC_RX_EN | BTA_EN);
+ u32 val;
+
+ val = CRC_RX_EN | ECC_RX_EN | BTA_EN | EOTP_TX_EN;
+ if (dsi->mode_flags & MIPI_DSI_MODE_NO_EOT_PACKET)
+ val &= ~EOTP_TX_EN;
+
+ dsi_write(dsi, DSI_PCKHDL_CFG, val);
}
static void dw_mipi_dsi_video_packet_config(struct dw_mipi_dsi *dsi,
--
2.25.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/2] drm: bridge: dw-mipi-dsi: Switch to regmap support
2023-01-23 18:46 [PATCH 1/2] drm: bridge: dw-mipi-dsi: Handle NO_EOT_PACKET mode Jagan Teki
@ 2023-01-23 18:46 ` Jagan Teki
2023-01-23 20:17 ` Sam Ravnborg
2023-01-23 20:19 ` [PATCH 1/2] drm: bridge: dw-mipi-dsi: Handle NO_EOT_PACKET mode Sam Ravnborg
1 sibling, 1 reply; 5+ messages in thread
From: Jagan Teki @ 2023-01-23 18:46 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss; +Cc: dri-devel, Jagan Teki
To make debugging easier, switch the driver to use regmap
from conventional io calls.
Signed-off-by: Jagan Teki <jagan@edgeble.ai>
---
drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c | 81 ++++++++++++-------
1 file changed, 54 insertions(+), 27 deletions(-)
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
index 47bd69d5ac99..62a160af4047 100644
--- a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
+++ b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
@@ -15,6 +15,7 @@
#include <linux/module.h>
#include <linux/of_device.h>
#include <linux/pm_runtime.h>
+#include <linux/regmap.h>
#include <linux/reset.h>
#include <video/mipi_display.h>
@@ -242,7 +243,7 @@ struct dw_mipi_dsi {
struct mipi_dsi_host dsi_host;
struct drm_bridge *panel_bridge;
struct device *dev;
- void __iomem *base;
+ struct regmap *regmap;
struct clk *pclk;
@@ -301,12 +302,16 @@ static inline struct dw_mipi_dsi *bridge_to_dsi(struct drm_bridge *bridge)
static inline void dsi_write(struct dw_mipi_dsi *dsi, u32 reg, u32 val)
{
- writel(val, dsi->base + reg);
+ regmap_write(dsi->regmap, reg, val);
}
static inline u32 dsi_read(struct dw_mipi_dsi *dsi, u32 reg)
{
- return readl(dsi->base + reg);
+ u32 val;
+
+ regmap_read(dsi->regmap, reg, &val);
+
+ return val;
}
static int dw_mipi_dsi_host_attach(struct mipi_dsi_host *host,
@@ -332,6 +337,7 @@ static int dw_mipi_dsi_host_attach(struct mipi_dsi_host *host,
if (IS_ERR(bridge))
return PTR_ERR(bridge);
+ dev_info(host->dev, "Attached device %s\n", device->name);
dsi->panel_bridge = bridge;
drm_bridge_add(&dsi->bridge);
@@ -400,9 +406,9 @@ static int dw_mipi_dsi_gen_pkt_hdr_write(struct dw_mipi_dsi *dsi, u32 hdr_val)
int ret;
u32 val, mask;
- ret = readl_poll_timeout(dsi->base + DSI_CMD_PKT_STATUS,
- val, !(val & GEN_CMD_FULL), 1000,
- CMD_PKT_STATUS_TIMEOUT_US);
+ ret = regmap_read_poll_timeout(dsi->regmap, DSI_CMD_PKT_STATUS,
+ val, !(val & GEN_CMD_FULL), 1000,
+ CMD_PKT_STATUS_TIMEOUT_US);
if (ret) {
dev_err(dsi->dev, "failed to get available command FIFO\n");
return ret;
@@ -411,9 +417,9 @@ static int dw_mipi_dsi_gen_pkt_hdr_write(struct dw_mipi_dsi *dsi, u32 hdr_val)
dsi_write(dsi, DSI_GEN_HDR, hdr_val);
mask = GEN_CMD_EMPTY | GEN_PLD_W_EMPTY;
- ret = readl_poll_timeout(dsi->base + DSI_CMD_PKT_STATUS,
- val, (val & mask) == mask,
- 1000, CMD_PKT_STATUS_TIMEOUT_US);
+ ret = regmap_read_poll_timeout(dsi->regmap, DSI_CMD_PKT_STATUS,
+ val, (val & mask) == mask,
+ 1000, CMD_PKT_STATUS_TIMEOUT_US);
if (ret) {
dev_err(dsi->dev, "failed to write command FIFO\n");
return ret;
@@ -443,9 +449,9 @@ static int dw_mipi_dsi_write(struct dw_mipi_dsi *dsi,
len -= pld_data_bytes;
}
- ret = readl_poll_timeout(dsi->base + DSI_CMD_PKT_STATUS,
- val, !(val & GEN_PLD_W_FULL), 1000,
- CMD_PKT_STATUS_TIMEOUT_US);
+ ret = regmap_read_poll_timeout(dsi->regmap, DSI_CMD_PKT_STATUS,
+ val, !(val & GEN_PLD_W_FULL), 1000,
+ CMD_PKT_STATUS_TIMEOUT_US);
if (ret) {
dev_err(dsi->dev,
"failed to get available write payload FIFO\n");
@@ -466,9 +472,9 @@ static int dw_mipi_dsi_read(struct dw_mipi_dsi *dsi,
u32 val;
/* Wait end of the read operation */
- ret = readl_poll_timeout(dsi->base + DSI_CMD_PKT_STATUS,
- val, !(val & GEN_RD_CMD_BUSY),
- 1000, CMD_PKT_STATUS_TIMEOUT_US);
+ ret = regmap_read_poll_timeout(dsi->regmap, DSI_CMD_PKT_STATUS,
+ val, !(val & GEN_RD_CMD_BUSY), 1000,
+ CMD_PKT_STATUS_TIMEOUT_US);
if (ret) {
dev_err(dsi->dev, "Timeout during read operation\n");
return ret;
@@ -476,9 +482,9 @@ static int dw_mipi_dsi_read(struct dw_mipi_dsi *dsi,
for (i = 0; i < len; i += 4) {
/* Read fifo must not be empty before all bytes are read */
- ret = readl_poll_timeout(dsi->base + DSI_CMD_PKT_STATUS,
- val, !(val & GEN_PLD_R_EMPTY),
- 1000, CMD_PKT_STATUS_TIMEOUT_US);
+ ret = regmap_read_poll_timeout(dsi->regmap, DSI_CMD_PKT_STATUS,
+ val, !(val & GEN_PLD_R_EMPTY), 1000,
+ CMD_PKT_STATUS_TIMEOUT_US);
if (ret) {
dev_err(dsi->dev, "Read payload FIFO is empty\n");
return ret;
@@ -499,6 +505,9 @@ static ssize_t dw_mipi_dsi_host_transfer(struct mipi_dsi_host *host,
struct mipi_dsi_packet packet;
int ret, nb_bytes;
+ DRM_INFO("%x %x %x\n", msg->type,
+ ((((u8 *)msg->tx_buf)[0] << 8) >> 8),
+ ((((u8 *)msg->tx_buf)[1] << 16)) >> 16);
ret = mipi_dsi_create_packet(&packet, msg);
if (ret) {
dev_err(dsi->dev, "failed to create packet: %d\n", ret);
@@ -828,17 +837,18 @@ static void dw_mipi_dsi_dphy_enable(struct dw_mipi_dsi *dsi)
u32 val;
int ret;
- dsi_write(dsi, DSI_PHY_RSTZ, PHY_ENFORCEPLL | PHY_ENABLECLK |
+ dsi_write(dsi, DSI_PHY_RSTZ, PHY_ENABLECLK |
PHY_UNRSTZ | PHY_UNSHUTDOWNZ);
- ret = readl_poll_timeout(dsi->base + DSI_PHY_STATUS, val,
- val & PHY_LOCK, 1000, PHY_STATUS_TIMEOUT_US);
+ ret = regmap_read_poll_timeout(dsi->regmap, DSI_PHY_STATUS,
+ val, val & PHY_LOCK, 1000,
+ PHY_STATUS_TIMEOUT_US);
if (ret)
DRM_DEBUG_DRIVER("failed to wait phy lock state\n");
- ret = readl_poll_timeout(dsi->base + DSI_PHY_STATUS,
- val, val & PHY_STOP_STATE_CLK_LANE, 1000,
- PHY_STATUS_TIMEOUT_US);
+ ret = regmap_read_poll_timeout(dsi->regmap, DSI_PHY_STATUS,
+ val, val & PHY_STOP_STATE_CLK_LANE, 1000,
+ PHY_STATUS_TIMEOUT_US);
if (ret)
DRM_DEBUG_DRIVER("failed to wait phy clk lane stop state\n");
}
@@ -1103,6 +1113,14 @@ static void dw_mipi_dsi_debugfs_remove(struct dw_mipi_dsi *dsi) { }
#endif /* CONFIG_DEBUG_FS */
+static const struct regmap_config dw_mipi_dsi_regmap_config = {
+ .name = "dw-mipi-dsi",
+ .reg_bits = 32,
+ .val_bits = 32,
+ .reg_stride = 4,
+ .max_register = DSI_INT_MSK1,
+};
+
static struct dw_mipi_dsi *
__dw_mipi_dsi_probe(struct platform_device *pdev,
const struct dw_mipi_dsi_plat_data *plat_data)
@@ -1110,6 +1128,7 @@ __dw_mipi_dsi_probe(struct platform_device *pdev,
struct device *dev = &pdev->dev;
struct reset_control *apb_rst;
struct dw_mipi_dsi *dsi;
+ void __iomem *base;
int ret;
dsi = devm_kzalloc(dev, sizeof(*dsi), GFP_KERNEL);
@@ -1126,12 +1145,20 @@ __dw_mipi_dsi_probe(struct platform_device *pdev,
}
if (!plat_data->base) {
- dsi->base = devm_platform_ioremap_resource(pdev, 0);
- if (IS_ERR(dsi->base))
+ base = devm_platform_ioremap_resource(pdev, 0);
+ if (IS_ERR(base))
return ERR_PTR(-ENODEV);
} else {
- dsi->base = plat_data->base;
+ base = plat_data->base;
+ }
+
+ dsi->regmap = devm_regmap_init_mmio(dev, base,
+ &dw_mipi_dsi_regmap_config);
+ if (IS_ERR(dsi->regmap)) {
+ ret = PTR_ERR(dsi->regmap);
+ dev_err(dev, "failed to init register map\n");
+ return ERR_PTR(ret);
}
dsi->pclk = devm_clk_get(dev, "pclk");
--
2.25.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] drm: bridge: dw-mipi-dsi: Switch to regmap support
2023-01-23 18:46 ` [PATCH 2/2] drm: bridge: dw-mipi-dsi: Switch to regmap support Jagan Teki
@ 2023-01-23 20:17 ` Sam Ravnborg
0 siblings, 0 replies; 5+ messages in thread
From: Sam Ravnborg @ 2023-01-23 20:17 UTC (permalink / raw)
To: Jagan Teki; +Cc: Neil Armstrong, dri-devel, Robert Foss, Andrzej Hajda
Hi Jagan
The change to regmap looks nice. But two small comments below,
just some drive-by comments.
Sam
On Tue, Jan 24, 2023 at 12:16:47AM +0530, Jagan Teki wrote:
> To make debugging easier, switch the driver to use regmap
> from conventional io calls.
>
> Signed-off-by: Jagan Teki <jagan@edgeble.ai>
> ---
> drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c | 81 ++++++++++++-------
> 1 file changed, 54 insertions(+), 27 deletions(-)
>
> diff --git a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
> index 47bd69d5ac99..62a160af4047 100644
> --- a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
> +++ b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
> @@ -15,6 +15,7 @@
> #include <linux/module.h>
> #include <linux/of_device.h>
> #include <linux/pm_runtime.h>
> +#include <linux/regmap.h>
> #include <linux/reset.h>
>
> #include <video/mipi_display.h>
> @@ -242,7 +243,7 @@ struct dw_mipi_dsi {
> struct mipi_dsi_host dsi_host;
> struct drm_bridge *panel_bridge;
> struct device *dev;
> - void __iomem *base;
> + struct regmap *regmap;
>
> struct clk *pclk;
>
> @@ -301,12 +302,16 @@ static inline struct dw_mipi_dsi *bridge_to_dsi(struct drm_bridge *bridge)
>
> static inline void dsi_write(struct dw_mipi_dsi *dsi, u32 reg, u32 val)
> {
> - writel(val, dsi->base + reg);
> + regmap_write(dsi->regmap, reg, val);
> }
>
> static inline u32 dsi_read(struct dw_mipi_dsi *dsi, u32 reg)
> {
> - return readl(dsi->base + reg);
> + u32 val;
> +
> + regmap_read(dsi->regmap, reg, &val);
> +
> + return val;
> }
>
> static int dw_mipi_dsi_host_attach(struct mipi_dsi_host *host,
> @@ -332,6 +337,7 @@ static int dw_mipi_dsi_host_attach(struct mipi_dsi_host *host,
> if (IS_ERR(bridge))
> return PTR_ERR(bridge);
>
> + dev_info(host->dev, "Attached device %s\n", device->name);
> dsi->panel_bridge = bridge;
>
> drm_bridge_add(&dsi->bridge);
> @@ -400,9 +406,9 @@ static int dw_mipi_dsi_gen_pkt_hdr_write(struct dw_mipi_dsi *dsi, u32 hdr_val)
> int ret;
> u32 val, mask;
>
> - ret = readl_poll_timeout(dsi->base + DSI_CMD_PKT_STATUS,
> - val, !(val & GEN_CMD_FULL), 1000,
> - CMD_PKT_STATUS_TIMEOUT_US);
> + ret = regmap_read_poll_timeout(dsi->regmap, DSI_CMD_PKT_STATUS,
> + val, !(val & GEN_CMD_FULL), 1000,
> + CMD_PKT_STATUS_TIMEOUT_US);
> if (ret) {
> dev_err(dsi->dev, "failed to get available command FIFO\n");
> return ret;
> @@ -411,9 +417,9 @@ static int dw_mipi_dsi_gen_pkt_hdr_write(struct dw_mipi_dsi *dsi, u32 hdr_val)
> dsi_write(dsi, DSI_GEN_HDR, hdr_val);
>
> mask = GEN_CMD_EMPTY | GEN_PLD_W_EMPTY;
> - ret = readl_poll_timeout(dsi->base + DSI_CMD_PKT_STATUS,
> - val, (val & mask) == mask,
> - 1000, CMD_PKT_STATUS_TIMEOUT_US);
> + ret = regmap_read_poll_timeout(dsi->regmap, DSI_CMD_PKT_STATUS,
> + val, (val & mask) == mask,
> + 1000, CMD_PKT_STATUS_TIMEOUT_US);
> if (ret) {
> dev_err(dsi->dev, "failed to write command FIFO\n");
> return ret;
> @@ -443,9 +449,9 @@ static int dw_mipi_dsi_write(struct dw_mipi_dsi *dsi,
> len -= pld_data_bytes;
> }
>
> - ret = readl_poll_timeout(dsi->base + DSI_CMD_PKT_STATUS,
> - val, !(val & GEN_PLD_W_FULL), 1000,
> - CMD_PKT_STATUS_TIMEOUT_US);
> + ret = regmap_read_poll_timeout(dsi->regmap, DSI_CMD_PKT_STATUS,
> + val, !(val & GEN_PLD_W_FULL), 1000,
> + CMD_PKT_STATUS_TIMEOUT_US);
> if (ret) {
> dev_err(dsi->dev,
> "failed to get available write payload FIFO\n");
> @@ -466,9 +472,9 @@ static int dw_mipi_dsi_read(struct dw_mipi_dsi *dsi,
> u32 val;
>
> /* Wait end of the read operation */
> - ret = readl_poll_timeout(dsi->base + DSI_CMD_PKT_STATUS,
> - val, !(val & GEN_RD_CMD_BUSY),
> - 1000, CMD_PKT_STATUS_TIMEOUT_US);
> + ret = regmap_read_poll_timeout(dsi->regmap, DSI_CMD_PKT_STATUS,
> + val, !(val & GEN_RD_CMD_BUSY), 1000,
> + CMD_PKT_STATUS_TIMEOUT_US);
> if (ret) {
> dev_err(dsi->dev, "Timeout during read operation\n");
> return ret;
> @@ -476,9 +482,9 @@ static int dw_mipi_dsi_read(struct dw_mipi_dsi *dsi,
>
> for (i = 0; i < len; i += 4) {
> /* Read fifo must not be empty before all bytes are read */
> - ret = readl_poll_timeout(dsi->base + DSI_CMD_PKT_STATUS,
> - val, !(val & GEN_PLD_R_EMPTY),
> - 1000, CMD_PKT_STATUS_TIMEOUT_US);
> + ret = regmap_read_poll_timeout(dsi->regmap, DSI_CMD_PKT_STATUS,
> + val, !(val & GEN_PLD_R_EMPTY), 1000,
> + CMD_PKT_STATUS_TIMEOUT_US);
> if (ret) {
> dev_err(dsi->dev, "Read payload FIFO is empty\n");
> return ret;
> @@ -499,6 +505,9 @@ static ssize_t dw_mipi_dsi_host_transfer(struct mipi_dsi_host *host,
> struct mipi_dsi_packet packet;
> int ret, nb_bytes;
>
> + DRM_INFO("%x %x %x\n", msg->type,
> + ((((u8 *)msg->tx_buf)[0] << 8) >> 8),
> + ((((u8 *)msg->tx_buf)[1] << 16)) >> 16);
This looks like some debug left-over. If not, then please consider to
use drm_info or dev_info.
> ret = mipi_dsi_create_packet(&packet, msg);
> if (ret) {
> dev_err(dsi->dev, "failed to create packet: %d\n", ret);
> @@ -828,17 +837,18 @@ static void dw_mipi_dsi_dphy_enable(struct dw_mipi_dsi *dsi)
> u32 val;
> int ret;
>
> - dsi_write(dsi, DSI_PHY_RSTZ, PHY_ENFORCEPLL | PHY_ENABLECLK |
> + dsi_write(dsi, DSI_PHY_RSTZ, PHY_ENABLECLK |
> PHY_UNRSTZ | PHY_UNSHUTDOWNZ);
This change is not related to the regmap conversion and should be
separated out.
Sam
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] drm: bridge: dw-mipi-dsi: Handle NO_EOT_PACKET mode
2023-01-23 18:46 [PATCH 1/2] drm: bridge: dw-mipi-dsi: Handle NO_EOT_PACKET mode Jagan Teki
2023-01-23 18:46 ` [PATCH 2/2] drm: bridge: dw-mipi-dsi: Switch to regmap support Jagan Teki
@ 2023-01-23 20:19 ` Sam Ravnborg
2023-01-24 6:31 ` Jagan Teki
1 sibling, 1 reply; 5+ messages in thread
From: Sam Ravnborg @ 2023-01-23 20:19 UTC (permalink / raw)
To: Jagan Teki; +Cc: Neil Armstrong, dri-devel, Robert Foss, Andrzej Hajda
Hi Jagan.
One small drive-by comment.
On Tue, Jan 24, 2023 at 12:16:46AM +0530, Jagan Teki wrote:
> Many downstream bridges or panels followed by dw-mipi-dsi were
> using MIPI_DSI_MODE_NO_EOT_PACKET.
>
> So, handle the EOTP bits accordingly in the dw-mipi-dsi host.
>
> Signed-off-by: Jagan Teki <jagan@edgeble.ai>
> ---
> drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c | 8 +++++++-
> 1 file changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
> index b2efecf7d160..47bd69d5ac99 100644
> --- a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
> +++ b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
> @@ -664,7 +664,13 @@ static void dw_mipi_dsi_dpi_config(struct dw_mipi_dsi *dsi,
>
> static void dw_mipi_dsi_packet_handler_config(struct dw_mipi_dsi *dsi)
> {
> - dsi_write(dsi, DSI_PCKHDL_CFG, CRC_RX_EN | ECC_RX_EN | BTA_EN);
> + u32 val;
> +
> + val = CRC_RX_EN | ECC_RX_EN | BTA_EN | EOTP_TX_EN;
> + if (dsi->mode_flags & MIPI_DSI_MODE_NO_EOT_PACKET)
> + val &= ~EOTP_TX_EN;
I had to look twice because the bit is set, and then maybe cleared.
val = CRC_RX_EN | ECC_RX_EN | BTA_EN | EOTP_TX_EN;
if (!(dsi->mode_flags & MIPI_DSI_MODE_NO_EOT_PACKET))
val |= EOTP_TX_EN;
?
Sam
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] drm: bridge: dw-mipi-dsi: Handle NO_EOT_PACKET mode
2023-01-23 20:19 ` [PATCH 1/2] drm: bridge: dw-mipi-dsi: Handle NO_EOT_PACKET mode Sam Ravnborg
@ 2023-01-24 6:31 ` Jagan Teki
0 siblings, 0 replies; 5+ messages in thread
From: Jagan Teki @ 2023-01-24 6:31 UTC (permalink / raw)
To: Sam Ravnborg; +Cc: Neil Armstrong, dri-devel, Robert Foss, Andrzej Hajda
On Tue, 24 Jan 2023 at 01:49, Sam Ravnborg <sam@ravnborg.org> wrote:
>
> Hi Jagan.
>
> One small drive-by comment.
>
> On Tue, Jan 24, 2023 at 12:16:46AM +0530, Jagan Teki wrote:
> > Many downstream bridges or panels followed by dw-mipi-dsi were
> > using MIPI_DSI_MODE_NO_EOT_PACKET.
> >
> > So, handle the EOTP bits accordingly in the dw-mipi-dsi host.
> >
> > Signed-off-by: Jagan Teki <jagan@edgeble.ai>
> > ---
> > drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c | 8 +++++++-
> > 1 file changed, 7 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
> > index b2efecf7d160..47bd69d5ac99 100644
> > --- a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
> > +++ b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
> > @@ -664,7 +664,13 @@ static void dw_mipi_dsi_dpi_config(struct dw_mipi_dsi *dsi,
> >
> > static void dw_mipi_dsi_packet_handler_config(struct dw_mipi_dsi *dsi)
> > {
> > - dsi_write(dsi, DSI_PCKHDL_CFG, CRC_RX_EN | ECC_RX_EN | BTA_EN);
> > + u32 val;
> > +
> > + val = CRC_RX_EN | ECC_RX_EN | BTA_EN | EOTP_TX_EN;
> > + if (dsi->mode_flags & MIPI_DSI_MODE_NO_EOT_PACKET)
> > + val &= ~EOTP_TX_EN;
>
> I had to look twice because the bit is set, and then maybe cleared.
>
> val = CRC_RX_EN | ECC_RX_EN | BTA_EN | EOTP_TX_EN;
> if (!(dsi->mode_flags & MIPI_DSI_MODE_NO_EOT_PACKET))
> val |= EOTP_TX_EN;
> ?
What I understand is if NO_EOT means we need to disable EOTP_TX_EN bit
so the logic in the patch does the same. Enable the EOTP_TX_EN by
default and disable it if NO_EOT mode set.
Jagan.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2023-01-24 6:31 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-01-23 18:46 [PATCH 1/2] drm: bridge: dw-mipi-dsi: Handle NO_EOT_PACKET mode Jagan Teki
2023-01-23 18:46 ` [PATCH 2/2] drm: bridge: dw-mipi-dsi: Switch to regmap support Jagan Teki
2023-01-23 20:17 ` Sam Ravnborg
2023-01-23 20:19 ` [PATCH 1/2] drm: bridge: dw-mipi-dsi: Handle NO_EOT_PACKET mode Sam Ravnborg
2023-01-24 6:31 ` Jagan Teki
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).