diff --git a/add-SERVER_SUPPORTS_NON_PCI_PLATFORM_DEVS.patch b/add-SERVER_SUPPORTS_NON_PCI_PLATFORM_DEVS.patch new file mode 100644 index 0000000..e67985a --- /dev/null +++ b/add-SERVER_SUPPORTS_NON_PCI_PLATFORM_DEVS.patch @@ -0,0 +1,107 @@ +Return-Path: +X-Original-To: dennis@ausil.us +Delivered-To: dennis@ausil.us +Received: from localhost (unknown [127.0.0.1]) + by mail.ausil.us (Postfix) with ESMTP id AE53C2E021E + for ; Mon, 16 Jun 2014 18:14:13 +0000 (UTC) +X-Virus-Scanned: amavisd-new at ausil.us +Authentication-Results: mail02.ausil.us (amavisd-new); + dkim=pass (2048-bit key) header.d=gmail.com +Received: from mail.ausil.us ([127.0.0.1]) + by localhost (mail02.ausil.us [127.0.0.1]) (amavisd-new, port 10024) + with ESMTP id 2AoZpXtuwNq4 for ; + Mon, 16 Jun 2014 18:13:56 +0000 (GMT) +X-Greylist: whitelisted by SQLgrey-1.8.0 +Received: from mail-qc0-f171.google.com (mail-qc0-f171.google.com [209.85.216.171]) + (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) + (No client certificate requested) + by mail.ausil.us (Postfix) with ESMTPS id 87F032E0261 + for ; Mon, 16 Jun 2014 18:13:40 +0000 (GMT) +Received: by mail-qc0-f171.google.com with SMTP id w7so8379019qcr.16 + for ; Mon, 16 Jun 2014 11:13:37 -0700 (PDT) +DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; + d=gmail.com; s=20120113; + h=from:to:cc:subject:date:message-id:in-reply-to:references; + bh=jsWdJaCBC84y12XEEHC+1YnahY8ti8aoJY04XygDevU=; + b=OjrxhPzRTZhaFHrLBWNtwov2CyZrFrBXUAAao9IAvRq28P35R+fASLX17l/DUgxHHO + cXhMF6daP4HsYk2565CLVY1CGakRJwhSrYR5BogqOL84+M1M678i0tUbK0O79Ah2ETlx + KIT4ANg+EB1RWqkQMGbCPaMRGpyYSerYs3qn1qn0PFj0V8O1vni9hMfqrNVi8EMw0WEF + vEp2omX0DMjOq4qnqBRTcixcnQEpxU7oX/JxqlLdtqAzB6fCKwhQvREDrOFHJyfSUV8o + CeC1cM3IYiRbgvaUz2jFzCw/cDOl2Kk6I+VXAkiGRraH7QBPzJWUT7oEXjHgSvg/en+t + qH7Q== +X-Received: by 10.140.107.52 with SMTP id g49mr7021793qgf.100.1402942416014; + Mon, 16 Jun 2014 11:13:36 -0700 (PDT) +Received: from localhost (pool-108-20-245-130.bstnma.east.verizon.net. [108.20.245.130]) + by mx.google.com with ESMTPSA id e8sm22833340qaa.12.2014.06.16.11.13.34 + for + (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); + Mon, 16 Jun 2014 11:13:35 -0700 (PDT) +From: Rob Clark +To: xorg-devel@lists.x.org +Cc: Dennis Gilmore , + Dave Airlie , + Thierry Reding , + Rob Clark +Subject: [PATCH 2/2] add SERVER_SUPPORTS_NON_PCI_PLATFORM_DEVS +Date: Mon, 16 Jun 2014 14:13:17 -0400 +Message-Id: <1402942397-16427-3-git-send-email-robdclark@gmail.com> +X-Mailer: git-send-email 1.9.3 +In-Reply-To: <1402942397-16427-1-git-send-email-robdclark@gmail.com> +References: <1402942397-16427-1-git-send-email-robdclark@gmail.com> + +Give the DDX a way to know whether non-pci platform devices are +completely broken or not. For xserver prior to the fix, the +DDX should not claim a platform device in platformProbe(), as +the server will fallback to old ->Probe(), which will fail if +the device is already claimed. Meaning that a user could not +make things work even with a .conf file to explicitly specify +the driver to use. + +Idea suggested by Hans de Goede. + +Signed-off-by: Rob Clark +Reviewed-by: Hans de Goede +--- + hw/xfree86/common/xf86Init.c | 10 +++++++++- + hw/xfree86/common/xf86str.h | 1 + + 2 files changed, 10 insertions(+), 1 deletion(-) + +diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c +index 5a45004..9b6a8b5 100644 +--- a/hw/xfree86/common/xf86Init.c ++++ b/hw/xfree86/common/xf86Init.c +@@ -546,10 +546,18 @@ InitOutput(ScreenInfo * pScreenInfo, int argc, char **argv) + if (xf86DriverList[i]->Identify != NULL) + xf86DriverList[i]->Identify(0); + +- if (xf86DriverList[i]->driverFunc) ++ if (xf86DriverList[i]->driverFunc) { + xf86DriverList[i]->driverFunc(NULL, + GET_REQUIRED_HW_INTERFACES, + &flags); ++ /* also let the driver know that it is safe to ++ * allow platformProbe() to claim the device ++ * if it is a non-pci platform device: ++ */ ++ xf86DriverList[i]->driverFunc(NULL, ++ SERVER_SUPPORTS_NON_PCI_PLATFORM_DEVS, ++ NULL); ++ } + + if (NEED_IO_ENABLED(flags)) + want_hw_access = TRUE; +diff --git a/hw/xfree86/common/xf86str.h b/hw/xfree86/common/xf86str.h +index a81e886..6f27f18 100644 +--- a/hw/xfree86/common/xf86str.h ++++ b/hw/xfree86/common/xf86str.h +@@ -258,6 +258,7 @@ typedef enum { + RR_GET_MODE_MM, + GET_REQUIRED_HW_INTERFACES = 10, + SUPPORTS_SERVER_FDS = 11, ++ SERVER_SUPPORTS_NON_PCI_PLATFORM_DEVS = 12, + } xorgDriverFuncOp; + + typedef Bool xorgDriverFuncProc(ScrnInfoPtr, xorgDriverFuncOp, void *); +-- +1.9.3 + diff --git a/platform-support-non-pci-platform-devices.patch b/platform-support-non-pci-platform-devices.patch new file mode 100644 index 0000000..4d26842 --- /dev/null +++ b/platform-support-non-pci-platform-devices.patch @@ -0,0 +1,170 @@ +Return-Path: +X-Original-To: dennis@ausil.us +Delivered-To: dennis@ausil.us +Received: from localhost (unknown [127.0.0.1]) + by mail.ausil.us (Postfix) with ESMTP id 6B14F2E021E + for ; Mon, 16 Jun 2014 18:13:57 +0000 (UTC) +X-Virus-Scanned: amavisd-new at ausil.us +Authentication-Results: mail02.ausil.us (amavisd-new); + dkim=pass (2048-bit key) header.d=gmail.com +Received: from mail.ausil.us ([127.0.0.1]) + by localhost (mail02.ausil.us [127.0.0.1]) (amavisd-new, port 10024) + with ESMTP id Z0kSi2KBV9uu for ; + Mon, 16 Jun 2014 18:13:40 +0000 (GMT) +X-Greylist: whitelisted by SQLgrey-1.8.0 +Received: from mail-qc0-x22e.google.com (mail-qc0-x22e.google.com [IPv6:2607:f8b0:400d:c01::22e]) + (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) + (No client certificate requested) + by mail.ausil.us (Postfix) with ESMTPS id 8DA682E024F + for ; Mon, 16 Jun 2014 18:13:38 +0000 (GMT) +Received: by mail-qc0-f174.google.com with SMTP id x13so8164787qcv.5 + for ; Mon, 16 Jun 2014 11:13:36 -0700 (PDT) +DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; + d=gmail.com; s=20120113; + h=from:to:cc:subject:date:message-id:in-reply-to:references; + bh=6VVOWdKY9pK2dBxdOSDqYcBMYVy4/+VDTxfgBepvrAI=; + b=MAKBIQ9TJrWGjVzYWsHECticUkQa0+TS5frl+oQnrCPULnqXN+rYmsx5HvCzVexJtm + fChdHXt/IxeAUjBH56HD3X9mkf6Pn+U2TkjUOmMJBm2q2tYgE2fYHCTDnsDYk3oMRlVP + abSXoAiURG2fODA3sPTQaAnn2Ojfvk6jzTQnN7X327u+0rA/aVjNC4u3IIcd5Cj7lo2I + dVnzPqxdKQoSDFAfpr2mC8pKoQzSabQw3TdCMrryGjN9enNnS+V5+5Sv6MIbrGotW/k5 + 2O2GkTR08WpNO/Ae1NJQYRW3QfL1UGZE/GCsDW8KYS8C91mWwXcsN+QHnx92hA9K2YVU + eerg== +X-Received: by 10.140.81.16 with SMTP id e16mr6124036qgd.110.1402942414050; + Mon, 16 Jun 2014 11:13:34 -0700 (PDT) +Received: from localhost (pool-108-20-245-130.bstnma.east.verizon.net. [108.20.245.130]) + by mx.google.com with ESMTPSA id d2sm1375720qge.24.2014.06.16.11.13.32 + for + (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); + Mon, 16 Jun 2014 11:13:33 -0700 (PDT) +From: Rob Clark +To: xorg-devel@lists.x.org +Cc: Dennis Gilmore , + Dave Airlie , + Thierry Reding , + Rob Clark +Subject: [PATCH 1/2] platform: support non-pci platform devices +Date: Mon, 16 Jun 2014 14:13:16 -0400 +Message-Id: <1402942397-16427-2-git-send-email-robdclark@gmail.com> +X-Mailer: git-send-email 1.9.3 +In-Reply-To: <1402942397-16427-1-git-send-email-robdclark@gmail.com> +References: <1402942397-16427-1-git-send-email-robdclark@gmail.com> + +This makes things not completely fail if DDX implements platformProbe() +but the device is not actually a PCI device. Also, the platform device +name does not always match the DDX name, so deal with that. I'm sure +there are more cases that find_non_pci_driver() needs to handle for +that, but this is a start. + +Signed-off-by: Rob Clark +Reviewed-by: Hans de Goede +--- + hw/xfree86/common/xf86platformBus.c | 65 ++++++++++++++++++++++++++++++++++--- + 1 file changed, 61 insertions(+), 4 deletions(-) + +diff --git a/hw/xfree86/common/xf86platformBus.c b/hw/xfree86/common/xf86platformBus.c +index dd118a2..eca0f8c 100644 +--- a/hw/xfree86/common/xf86platformBus.c ++++ b/hw/xfree86/common/xf86platformBus.c +@@ -199,6 +199,41 @@ xf86_check_platform_slot(const struct xf86_platform_device *pd) + return TRUE; + } + ++static int ++find_non_pci_driver(const char *busid, char *returnList[], int returnListMax) ++{ ++ /* Add more entries here if we ever return more than 4 drivers for ++ any device */ ++ const char *driverList[5] = { NULL, NULL, NULL, NULL, NULL }; ++ int i = 0; ++ char *p, *s; ++ ++ s = xstrdup(busid); ++ p = strtok(s, ":"); ++ ++ if (strcmp(p, "platform")) ++ goto out; ++ ++ /* extract device name: */ ++ p = strtok(NULL, ":"); ++ ++ /* check for special cases where DDX driver name does not match busid: */ ++ if (!strcmp(p, "mdp")) { ++ driverList[i++] = "freedreno"; ++ } ++ ++ /* add name derived from busid last: */ ++ driverList[i++] = p; ++ ++ for (i = 0; (i < returnListMax) && (driverList[i] != NULL); i++) { ++ returnList[i] = xnfstrdup(driverList[i]); ++ } ++ ++out: ++ free(s); ++ return i; /* Number of entries added */ ++} ++ + /** + * @return The numbers of found devices that match with the current system + * drivers. +@@ -230,6 +265,9 @@ xf86PlatformMatchDriver(char *matches[], int nmatches) + + if ((info != NULL) && (j < nmatches)) { + j += xf86VideoPtrToDriverList(info, &(matches[j]), nmatches - j); ++ } else if (j < nmatches) { ++ char *busid = xf86_get_platform_attrib(i, ODEV_ATTRIB_BUSID); ++ j += find_non_pci_driver(busid, &(matches[j]), nmatches - j); + } + } + } +@@ -248,6 +286,9 @@ xf86platformProbe(void) + pci = FALSE; + } + ++ /* First pass, look for PCI devices. If we find a suitable ++ * PCI device that takes priority. ++ */ + for (i = 0; i < xf86_num_platform_devices; i++) { + char *busid = xf86_get_platform_attrib(i, ODEV_ATTRIB_BUSID); + +@@ -255,6 +296,24 @@ xf86platformProbe(void) + platform_find_pci_info(&xf86_platform_devices[i], busid); + } + } ++ ++ /* if we found something, we are done: */ ++ if (primaryBus.type != BUS_NONE) ++ return 0; ++ ++ /* Second pass, look for real platform devices (ie. in the linux- ++ * kernel sense of platform device.. something that is not pci) ++ */ ++ for (i = 0; i < xf86_num_platform_devices; i++) { ++ char *busid = xf86_get_platform_attrib(i, ODEV_ATTRIB_BUSID); ++ ++ if (strncmp(busid, "platform:", 9) == 0) { ++ primaryBus.type = BUS_PLATFORM; ++ primaryBus.id.plat = &xf86_platform_devices[i]; ++ break; ++ } ++ } ++ + return 0; + } + +@@ -401,10 +460,8 @@ xf86platformProbeDev(DriverPtr drvp) + /* for non-seat0 servers assume first device is the master */ + if (ServerIsNotSeat0()) + break; +- if (xf86_platform_devices[j].pdev) { +- if (xf86IsPrimaryPlatform(&xf86_platform_devices[j])) +- break; +- } ++ if (xf86IsPrimaryPlatform(&xf86_platform_devices[j])) ++ break; + } + } + +-- +1.9.3 + diff --git a/xorg-x11-server.spec b/xorg-x11-server.spec index 19ff63e..cfed120 100644 --- a/xorg-x11-server.spec +++ b/xorg-x11-server.spec @@ -42,7 +42,7 @@ Summary: X.Org X11 X server Name: xorg-x11-server Version: 1.15.99.903 -Release: 1%{?gitdate:.%{gitdate}}%{dist} +Release: 2%{?gitdate:.%{gitdate}}%{dist} URL: http://www.x.org License: MIT Group: User Interface/X @@ -96,6 +96,11 @@ Patch9100: exa-only-draw-valid-trapezoids.patch # because the display-managers are not ready yet, do not upstream Patch10000: 0001-Fedora-hack-Make-the-suid-root-wrapper-always-start-.patch +# submitted http://lists.x.org/archives/xorg-devel/2014-June/042826.html +# needed to allow X to start on arm and other devices without video on pci buses +Patch10100: platform-support-non-pci-platform-devices.patch +Patch10101: add-SERVER_SUPPORTS_NON_PCI_PLATFORM_DEVS.patch + %global moduledir %{_libdir}/xorg/modules %global drimoduledir %{_libdir}/dri %global sdkdir %{_includedir}/xorg @@ -610,6 +615,9 @@ find %{inst_srcdir}/hw/xfree86 -name \*.c -delete %changelog +* Thu Jun 19 2014 Dennis Gilmore - 1.15.99.903-2 +- add support for non pci platform devices + * Wed Jun 11 2014 Hans de Goede - 1.15.99.903-1 - Update to 1.15.99.903 - This bumps the videodrv ABI once more, so all drivers must be rebuild