drm/i915: Use the direct mapping of pipe->crtc
Why iterate all the crtcs to find the pipe, when we already know which crtc is attached to which pipe? Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Jesse Barnes <jbarnes@virtuousgeek.org>
This commit is contained in:
parent
4ef69c7a64
commit
f875c15a4f
|
@ -5226,18 +5226,6 @@ int intel_get_pipe_from_crtc_id(struct drm_device *dev, void *data,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct drm_crtc *intel_get_crtc_from_pipe(struct drm_device *dev, int pipe)
|
|
||||||
{
|
|
||||||
struct drm_crtc *crtc = NULL;
|
|
||||||
|
|
||||||
list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
|
|
||||||
struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
|
|
||||||
if (intel_crtc->pipe == pipe)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return crtc;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int intel_encoder_clones(struct drm_device *dev, int type_mask)
|
static int intel_encoder_clones(struct drm_device *dev, int type_mask)
|
||||||
{
|
{
|
||||||
struct intel_encoder *encoder;
|
struct intel_encoder *encoder;
|
||||||
|
|
|
@ -177,6 +177,13 @@ struct intel_crtc {
|
||||||
#define to_intel_encoder(x) container_of(x, struct intel_encoder, base)
|
#define to_intel_encoder(x) container_of(x, struct intel_encoder, base)
|
||||||
#define to_intel_framebuffer(x) container_of(x, struct intel_framebuffer, base)
|
#define to_intel_framebuffer(x) container_of(x, struct intel_framebuffer, base)
|
||||||
|
|
||||||
|
static inline struct drm_crtc *
|
||||||
|
intel_get_crtc_for_pipe(struct drm_device *dev, int pipe)
|
||||||
|
{
|
||||||
|
struct drm_i915_private *dev_priv = dev->dev_private;
|
||||||
|
return dev_priv->pipe_to_crtc_mapping[pipe];
|
||||||
|
}
|
||||||
|
|
||||||
struct intel_unpin_work {
|
struct intel_unpin_work {
|
||||||
struct work_struct work;
|
struct work_struct work;
|
||||||
struct drm_device *dev;
|
struct drm_device *dev;
|
||||||
|
@ -235,7 +242,6 @@ int intel_get_pipe_from_crtc_id(struct drm_device *dev, void *data,
|
||||||
struct drm_file *file_priv);
|
struct drm_file *file_priv);
|
||||||
extern void intel_wait_for_vblank_off(struct drm_device *dev, int pipe);
|
extern void intel_wait_for_vblank_off(struct drm_device *dev, int pipe);
|
||||||
extern void intel_wait_for_vblank(struct drm_device *dev, int pipe);
|
extern void intel_wait_for_vblank(struct drm_device *dev, int pipe);
|
||||||
extern struct drm_crtc *intel_get_crtc_from_pipe(struct drm_device *dev, int pipe);
|
|
||||||
extern struct drm_crtc *intel_get_load_detect_pipe(struct intel_encoder *intel_encoder,
|
extern struct drm_crtc *intel_get_load_detect_pipe(struct intel_encoder *intel_encoder,
|
||||||
struct drm_connector *connector,
|
struct drm_connector *connector,
|
||||||
struct drm_display_mode *mode,
|
struct drm_display_mode *mode,
|
||||||
|
|
|
@ -322,7 +322,7 @@ intel_dvo_get_current_mode(struct drm_connector *connector)
|
||||||
struct drm_crtc *crtc;
|
struct drm_crtc *crtc;
|
||||||
int pipe = (dvo_val & DVO_PIPE_B_SELECT) ? 1 : 0;
|
int pipe = (dvo_val & DVO_PIPE_B_SELECT) ? 1 : 0;
|
||||||
|
|
||||||
crtc = intel_get_crtc_from_pipe(dev, pipe);
|
crtc = intel_get_crtc_for_pipe(dev, pipe);
|
||||||
if (crtc) {
|
if (crtc) {
|
||||||
mode = intel_crtc_mode_get(dev, crtc);
|
mode = intel_crtc_mode_get(dev, crtc);
|
||||||
if (mode) {
|
if (mode) {
|
||||||
|
|
|
@ -932,7 +932,7 @@ void intel_lvds_init(struct drm_device *dev)
|
||||||
|
|
||||||
lvds = I915_READ(LVDS);
|
lvds = I915_READ(LVDS);
|
||||||
pipe = (lvds & LVDS_PIPEB_SELECT) ? 1 : 0;
|
pipe = (lvds & LVDS_PIPEB_SELECT) ? 1 : 0;
|
||||||
crtc = intel_get_crtc_from_pipe(dev, pipe);
|
crtc = intel_get_crtc_for_pipe(dev, pipe);
|
||||||
|
|
||||||
if (crtc && (lvds & LVDS_PORT_EN)) {
|
if (crtc && (lvds & LVDS_PORT_EN)) {
|
||||||
dev_priv->panel_fixed_mode = intel_crtc_mode_get(dev, crtc);
|
dev_priv->panel_fixed_mode = intel_crtc_mode_get(dev, crtc);
|
||||||
|
|
Reference in New Issue