Commit a3c477b3 authored by Laurent Pinchart's avatar Laurent Pinchart

drm: rcar-du: Fix dot clock routing configuration

Dot clock routing is setup through different registers depending on the
DU generation. The code has been designed for Gen2 and hasn't been
updated since. This works thanks to good reset default value, but isn't
very safe. Fix it.
Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
parent 63b5053e
...@@ -105,16 +105,20 @@ static void rcar_du_group_setup(struct rcar_du_group *rgrp) ...@@ -105,16 +105,20 @@ static void rcar_du_group_setup(struct rcar_du_group *rgrp)
if (rcar_du_has(rgrp->dev, RCAR_DU_FEATURE_EXT_CTRL_REGS)) { if (rcar_du_has(rgrp->dev, RCAR_DU_FEATURE_EXT_CTRL_REGS)) {
rcar_du_group_setup_defr8(rgrp); rcar_du_group_setup_defr8(rgrp);
/* Configure input dot clock routing. We currently hardcode the /*
* configuration to routing DOTCLKINn to DUn. * Configure input dot clock routing. We currently hardcode the
* configuration to routing DOTCLKINn to DUn. Register fields
* depend on the DU generation, but the resulting value is 0 in
* all cases.
*
* On Gen2 a single register in the first group controls dot
* clock selection for all channels, while on Gen3 dot clocks
* are setup through per-group registers, only available when
* the group has two channels.
*/ */
rcar_du_group_write(rgrp, DIDSR, DIDSR_CODE | if ((rcdu->info->gen < 3 && rgrp->index == 0) ||
DIDSR_LCDS_DCLKIN(2) | (rcdu->info->gen == 3 && rgrp->num_crtcs > 1))
DIDSR_LCDS_DCLKIN(1) | rcar_du_group_write(rgrp, DIDSR, DIDSR_CODE);
DIDSR_LCDS_DCLKIN(0) |
DIDSR_PDCS_CLK(2, 0) |
DIDSR_PDCS_CLK(1, 0) |
DIDSR_PDCS_CLK(0, 0));
} }
if (rcdu->info->gen >= 3) if (rcdu->info->gen >= 3)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment