Message ID | 1402925713-25426-4-git-send-email-tomeu.vizoso@collabora.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 06/16/2014 07:35 AM, Tomeu Vizoso wrote: > Request it based solely on the current mode's refresh rate. More > accurate requirements can be requested in future patches. > diff --git a/drivers/gpu/drm/tegra/dc.c b/drivers/gpu/drm/tegra/dc.c > + bandwidth = mode->clock * window.bits_per_pixel / 8; > + err = tegra124_emc_reserve_bandwidth(TEGRA_EMC_CONSUMER_DISP1, bandwidth); DISP1 shouldn't be hard-coded here; the code should use DISP1 or DISP2 based on head or DC identity. We certainly have some boards capable of dual-head operation.
On Mon, Jun 16, 2014 at 02:06:43PM -0600, Stephen Warren wrote: > On 06/16/2014 07:35 AM, Tomeu Vizoso wrote: > > Request it based solely on the current mode's refresh rate. More > > accurate requirements can be requested in future patches. > > > diff --git a/drivers/gpu/drm/tegra/dc.c b/drivers/gpu/drm/tegra/dc.c > > > + bandwidth = mode->clock * window.bits_per_pixel / 8; > > + err = tegra124_emc_reserve_bandwidth(TEGRA_EMC_CONSUMER_DISP1, bandwidth); > > DISP1 shouldn't be hard-coded here; the code should use DISP1 or DISP2 > based on head or DC identity. We certainly have some boards capable of > dual-head operation. On a general note, I think perhaps a better way to represent this in an API, and perhaps this would help with making the API more generic, too, would be to make drivers request some sort of handle in .probe() and use that handle subsequently when making requests. That's somewhat analogous to the PM QoS' struct pm_qos_request. Thierry
diff --git a/drivers/gpu/drm/tegra/dc.c b/drivers/gpu/drm/tegra/dc.c index ef40381..6739d69 100644 --- a/drivers/gpu/drm/tegra/dc.c +++ b/drivers/gpu/drm/tegra/dc.c @@ -10,6 +10,7 @@ #include <linux/clk.h> #include <linux/debugfs.h> #include <linux/reset.h> +#include <linux/platform_data/tegra_emc.h> #include "dc.h" #include "drm.h" @@ -683,6 +684,8 @@ static void tegra_crtc_disable(struct drm_crtc *crtc) } drm_vblank_off(drm, dc->pipe); + + tegra124_emc_reserve_bandwidth(TEGRA_EMC_CONSUMER_DISP1, 0); } static bool tegra_crtc_mode_fixup(struct drm_crtc *crtc, @@ -769,6 +772,7 @@ static int tegra_crtc_mode_set(struct drm_crtc *crtc, struct tegra_dc *dc = to_tegra_dc(crtc); struct tegra_dc_window window; u32 value; + unsigned long bandwidth; int err; drm_vblank_pre_modeset(crtc->dev, dc->pipe); @@ -809,6 +813,11 @@ static int tegra_crtc_mode_set(struct drm_crtc *crtc, if (err < 0) dev_err(dc->dev, "failed to enable root plane\n"); + bandwidth = mode->clock * window.bits_per_pixel / 8; + err = tegra124_emc_reserve_bandwidth(TEGRA_EMC_CONSUMER_DISP1, bandwidth); + if (err) + dev_err(dc->dev, "failed to reserve EMC bandwidth: %d\n", err); + return 0; }
Request it based solely on the current mode's refresh rate. More accurate requirements can be requested in future patches. Signed-off-by: Tomeu Vizoso <tomeu.vizoso@collabora.com> --- drivers/gpu/drm/tegra/dc.c | 9 +++++++++ 1 file changed, 9 insertions(+)