summaryrefslogtreecommitdiff
path: root/drivers/gpu/ipu-v3
diff options
context:
space:
mode:
authorLucas Stach <l.stach@pengutronix.de>2024-05-17 13:45:47 +0300
committerPhilipp Zabel <p.zabel@pengutronix.de>2024-06-26 18:43:54 +0300
commitee7ff5e26b9d915667db75a2c79b04590afe3b80 (patch)
treebbc18c92753e6e26e5074b66aacd7c2943b31924 /drivers/gpu/ipu-v3
parent81112c6f36b513cdcf2506ffacdb92c7674737f2 (diff)
downloadlinux-ee7ff5e26b9d915667db75a2c79b04590afe3b80.tar.xz
gpu: ipu-v3: pre: move state into struct
Move the variables tracking the current dynamic state into a struct to separate it a bit better from the static device properties. Signed-off-by: Lucas Stach <l.stach@pengutronix.de> Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de> Link: https://lore.kernel.org/r/20240517104549.3648939-1-l.stach@pengutronix.de Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de> Link: https://patchwork.freedesktop.org/patch/msgid/20240517104549.3648939-1-l.stach@pengutronix.de
Diffstat (limited to 'drivers/gpu/ipu-v3')
-rw-r--r--drivers/gpu/ipu-v3/ipu-pre.c27
1 files changed, 15 insertions, 12 deletions
diff --git a/drivers/gpu/ipu-v3/ipu-pre.c b/drivers/gpu/ipu-v3/ipu-pre.c
index 08d0034f0604..fe34433027fb 100644
--- a/drivers/gpu/ipu-v3/ipu-pre.c
+++ b/drivers/gpu/ipu-v3/ipu-pre.c
@@ -96,9 +96,12 @@ struct ipu_pre {
dma_addr_t buffer_paddr;
void *buffer_virt;
- bool in_use;
- unsigned int safe_window_end;
- unsigned int last_bufaddr;
+
+ struct {
+ bool in_use;
+ unsigned int safe_window_end;
+ unsigned int bufaddr;
+ } cur;
};
static DEFINE_MUTEX(ipu_pre_list_mutex);
@@ -135,7 +138,7 @@ int ipu_pre_get(struct ipu_pre *pre)
{
u32 val;
- if (pre->in_use)
+ if (pre->cur.in_use)
return -EBUSY;
/* first get the engine out of reset and remove clock gating */
@@ -148,7 +151,7 @@ int ipu_pre_get(struct ipu_pre *pre)
IPU_PRE_CTRL_SDW_UPDATE;
writel(val, pre->regs + IPU_PRE_CTRL);
- pre->in_use = true;
+ pre->cur.in_use = true;
return 0;
}
@@ -156,7 +159,7 @@ void ipu_pre_put(struct ipu_pre *pre)
{
writel(IPU_PRE_CTRL_SFTRST, pre->regs + IPU_PRE_CTRL);
- pre->in_use = false;
+ pre->cur.in_use = false;
}
void ipu_pre_configure(struct ipu_pre *pre, unsigned int width,
@@ -169,13 +172,13 @@ void ipu_pre_configure(struct ipu_pre *pre, unsigned int width,
/* calculate safe window for ctrl register updates */
if (modifier == DRM_FORMAT_MOD_LINEAR)
- pre->safe_window_end = height - 2;
+ pre->cur.safe_window_end = height - 2;
else
- pre->safe_window_end = DIV_ROUND_UP(height, 4) - 1;
+ pre->cur.safe_window_end = DIV_ROUND_UP(height, 4) - 1;
writel(bufaddr, pre->regs + IPU_PRE_CUR_BUF);
writel(bufaddr, pre->regs + IPU_PRE_NEXT_BUF);
- pre->last_bufaddr = bufaddr;
+ pre->cur.bufaddr = bufaddr;
val = IPU_PRE_PREF_ENG_CTRL_INPUT_PIXEL_FORMAT(0) |
IPU_PRE_PREF_ENG_CTRL_INPUT_ACTIVE_BPP(active_bpp) |
@@ -233,11 +236,11 @@ void ipu_pre_update(struct ipu_pre *pre, unsigned int bufaddr)
unsigned short current_yblock;
u32 val;
- if (bufaddr == pre->last_bufaddr)
+ if (bufaddr == pre->cur.bufaddr)
return;
writel(bufaddr, pre->regs + IPU_PRE_NEXT_BUF);
- pre->last_bufaddr = bufaddr;
+ pre->cur.bufaddr = bufaddr;
do {
if (time_after(jiffies, timeout)) {
@@ -249,7 +252,7 @@ void ipu_pre_update(struct ipu_pre *pre, unsigned int bufaddr)
current_yblock =
(val >> IPU_PRE_STORE_ENG_STATUS_STORE_BLOCK_Y_SHIFT) &
IPU_PRE_STORE_ENG_STATUS_STORE_BLOCK_Y_MASK;
- } while (current_yblock == 0 || current_yblock >= pre->safe_window_end);
+ } while (current_yblock == 0 || current_yblock >= pre->cur.safe_window_end);
writel(IPU_PRE_CTRL_SDW_UPDATE, pre->regs + IPU_PRE_CTRL_SET);
}