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;