mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-15 23:14:31 +08:00
drm: bridge: samsung-dsim: Fix waiting for empty cmd transfer FIFO on older Exynos
[ Upstream commit15f389da11
] Samsung DSIM used in older Exynos SoCs (like Exynos 4210, 4x12, 3250) doesn't report empty level of packer header FIFO. In case of those SoCs, use the old way of waiting for empty command tranfsfer FIFO, removed recently by commit14806c6415
("drm: bridge: samsung-dsim: Drain command transfer FIFO before transfer"). Fixes:14806c6415
("drm: bridge: samsung-dsim: Drain command transfer FIFO before transfer") Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> Reviewed-by: Marek Vasut <marex@denx.de> Signed-off-by: Robert Foss <rfoss@kernel.org> Link: https://patchwork.freedesktop.org/patch/msgid/20230809145641.3213210-1-m.szyprowski@samsung.com Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
b86ec59f7d
commit
2f56a02e2a
@ -413,6 +413,7 @@ static const struct samsung_dsim_driver_data exynos3_dsi_driver_data = {
|
||||
.m_min = 41,
|
||||
.m_max = 125,
|
||||
.min_freq = 500,
|
||||
.has_broken_fifoctrl_emptyhdr = 1,
|
||||
};
|
||||
|
||||
static const struct samsung_dsim_driver_data exynos4_dsi_driver_data = {
|
||||
@ -429,6 +430,7 @@ static const struct samsung_dsim_driver_data exynos4_dsi_driver_data = {
|
||||
.m_min = 41,
|
||||
.m_max = 125,
|
||||
.min_freq = 500,
|
||||
.has_broken_fifoctrl_emptyhdr = 1,
|
||||
};
|
||||
|
||||
static const struct samsung_dsim_driver_data exynos5_dsi_driver_data = {
|
||||
@ -1010,8 +1012,20 @@ static int samsung_dsim_wait_for_hdr_fifo(struct samsung_dsim *dsi)
|
||||
do {
|
||||
u32 reg = samsung_dsim_read(dsi, DSIM_FIFOCTRL_REG);
|
||||
|
||||
if (reg & DSIM_SFR_HEADER_EMPTY)
|
||||
return 0;
|
||||
if (!dsi->driver_data->has_broken_fifoctrl_emptyhdr) {
|
||||
if (reg & DSIM_SFR_HEADER_EMPTY)
|
||||
return 0;
|
||||
} else {
|
||||
if (!(reg & DSIM_SFR_HEADER_FULL)) {
|
||||
/*
|
||||
* Wait a little bit, so the pending data can
|
||||
* actually leave the FIFO to avoid overflow.
|
||||
*/
|
||||
if (!cond_resched())
|
||||
usleep_range(950, 1050);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (!cond_resched())
|
||||
usleep_range(950, 1050);
|
||||
|
@ -53,6 +53,7 @@ struct samsung_dsim_driver_data {
|
||||
unsigned int plltmr_reg;
|
||||
unsigned int has_freqband:1;
|
||||
unsigned int has_clklane_stop:1;
|
||||
unsigned int has_broken_fifoctrl_emptyhdr:1;
|
||||
unsigned int num_clks;
|
||||
unsigned int min_freq;
|
||||
unsigned int max_freq;
|
||||
|
Loading…
Reference in New Issue
Block a user