+++ /dev/null
-From 536626891b60039c0f3f9b4cd96156e9fe810f39 Mon Sep 17 00:00:00 2001
-From: Dave Airlie <airlied@redhat.com>
-Date: Fri, 17 Aug 2012 09:49:24 +1000
-Subject: [PATCH] autobind GPUs to the screen, (v2)
-
-this is racy and really not what we want for hotplug going forward,
-but until DE support is in GNOME its probably for the best.
-
-v2: fix if config or slave config is NULL
-DO NOT UPSTREAM.
----
- hw/xfree86/common/xf86Init.c | 12 ++++++++++++
- hw/xfree86/common/xf86platformBus.c | 3 +++
- hw/xfree86/modes/xf86Crtc.c | 28 ++++++++++++++++++++++++++++
- 3 files changed, 43 insertions(+)
-
-diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
-index d231ced..89629c1 100644
---- a/hw/xfree86/common/xf86Init.c
-+++ b/hw/xfree86/common/xf86Init.c
-@@ -361,6 +361,16 @@ xf86CreateRootWindow(WindowPtr pWin)
- return ret;
- }
-
-+extern void xf86AutoConfigOutputDevice(ScrnInfoPtr pScrn, ScrnInfoPtr master);
-+static void
-+xf86AutoConfigOutputDevices(void)
-+{
-+ int i;
-+
-+ for (i = 0; i < xf86NumGPUScreens; i++)
-+ xf86AutoConfigOutputDevice(xf86GPUScreens[i], xf86Screens[0]);
-+}
-+
- static void
- InstallSignalHandlers(void)
- {
-@@ -926,6 +936,8 @@ InitOutput(ScreenInfo * pScreenInfo, int argc, char **argv)
- for (i = 0; i < xf86NumGPUScreens; i++)
- AttachUnboundGPU(xf86Screens[0]->pScreen, xf86GPUScreens[i]->pScreen);
-
-+ xf86AutoConfigOutputDevices();
-+
- xf86VGAarbiterWrapFunctions();
- if (sigio_blocked)
- OsReleaseSIGIO();
-diff --git a/hw/xfree86/common/xf86platformBus.c b/hw/xfree86/common/xf86platformBus.c
-index a73aea2..3810076 100644
---- a/hw/xfree86/common/xf86platformBus.c
-+++ b/hw/xfree86/common/xf86platformBus.c
-@@ -387,6 +387,8 @@ xf86platformProbeDev(DriverPtr drvp)
- return foundScreen;
- }
-
-+extern void xf86AutoConfigOutputDevice(ScrnInfoPtr pScrn, ScrnInfoPtr master);
-+
- int
- xf86platformAddDevice(int index)
- {
-@@ -446,6 +448,7 @@ xf86platformAddDevice(int index)
-
- /* attach unbound to 0 protocol screen */
- AttachUnboundGPU(xf86Screens[0]->pScreen, xf86GPUScreens[i]->pScreen);
-+ xf86AutoConfigOutputDevice(xf86GPUScreens[i], xf86Screens[0]);
-
- return 0;
- }
-diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
-index 8f05c53..ba84e6b 100644
---- a/hw/xfree86/modes/xf86Crtc.c
-+++ b/hw/xfree86/modes/xf86Crtc.c
-@@ -3321,3 +3321,31 @@ xf86DetachAllCrtc(ScrnInfoPtr scrn)
- crtc->x = crtc->y = 0;
- }
- }
-+
-+
-+void xf86AutoConfigOutputDevice(ScrnInfoPtr pScrn, ScrnInfoPtr master)
-+{
-+ RRProviderPtr master_provider;
-+ xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(master);
-+ xf86CrtcConfigPtr slave_config = XF86_CRTC_CONFIG_PTR(pScrn);
-+
-+ if (!config || !slave_config)
-+ return;
-+
-+ master_provider = config->randr_provider;
-+
-+ if ((master->capabilities & RR_Capability_SinkOffload) &&
-+ pScrn->capabilities & RR_Capability_SourceOffload) {
-+ /* source offload */
-+
-+ DetachUnboundGPU(pScrn->pScreen);
-+ AttachOffloadGPU(master->pScreen, pScrn->pScreen);
-+ slave_config->randr_provider->offload_sink = master_provider;
-+ } else if ((master->capabilities & RR_Capability_SourceOutput) &&
-+ pScrn->capabilities & RR_Capability_SinkOutput) {
-+ /* sink offload */
-+ DetachUnboundGPU(pScrn->pScreen);
-+ AttachOutputGPU(master->pScreen, pScrn->pScreen);
-+ slave_config->randr_provider->output_source = master_provider;
-+ }
-+}
---
-1.7.10.2
-