From 21e840d154d89dda9f6ffe27daffb37ce2d53b8e Mon Sep 17 00:00:00 2001 From: Alexander von Gluck IV Date: Fri, 13 Nov 2015 14:56:03 -0600 Subject: [PATCH] intel_extreme: Cleanup pipe enablement ordering --- .../accelerants/intel_extreme/DisplayPipe.cpp | 12 +++++++++--- src/add-ons/accelerants/intel_extreme/Ports.cpp | 4 ++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/add-ons/accelerants/intel_extreme/DisplayPipe.cpp b/src/add-ons/accelerants/intel_extreme/DisplayPipe.cpp index 27e9db07f2..2876c7aa7f 100644 --- a/src/add-ons/accelerants/intel_extreme/DisplayPipe.cpp +++ b/src/add-ons/accelerants/intel_extreme/DisplayPipe.cpp @@ -94,9 +94,6 @@ DisplayPipe::Enable(display_mode* target, addr_t portAddress) return; } - // Enable display pipe - _Enable(true); - // Wait for the clocks to stabilize spin(150); @@ -123,6 +120,11 @@ DisplayPipe::Enable(display_mode* target, addr_t portAddress) write32(fPipeBase + REGISTER_REGISTER(INTEL_DISPLAY_A_POS), 0); + // This is useful for debugging: it sets the border to red, so you + // can see what is border and what is porch (black area around the + // sync) + //write32(fPipeBase + REGISTER_REGISTER(INTEL_DISPLAY_A_RED), 0x00FF0000); + // TODO: Review these write32(fPipeBase + REGISTER_REGISTER(INTEL_DISPLAY_A_IMAGE_SIZE), ((uint32)(target->virtual_width - 1) << 16) @@ -138,6 +140,10 @@ DisplayPipe::Enable(display_mode* target, addr_t portAddress) ? DISPLAY_MONITOR_POSITIVE_HSYNC : 0) | ((target->timing.flags & B_POSITIVE_VSYNC) != 0 ? DISPLAY_MONITOR_POSITIVE_VSYNC : 0)); + + // Enable display pipe + _Enable(true); + } diff --git a/src/add-ons/accelerants/intel_extreme/Ports.cpp b/src/add-ons/accelerants/intel_extreme/Ports.cpp index 51348d5881..79f6101995 100644 --- a/src/add-ons/accelerants/intel_extreme/Ports.cpp +++ b/src/add-ons/accelerants/intel_extreme/Ports.cpp @@ -100,6 +100,10 @@ Port::AssignPipe(pipe_index pipeIndex) if (fDisplayPipe == NULL) return B_NO_MEMORY; + // Disable display pipe until modesetting enables it + if (fDisplayPipe->IsEnabled()) + fDisplayPipe->Disable(); + read32(portRegister); return B_OK;