K 10 svn:author V 8 dumbbell K 8 svn:date V 27 2014-03-14T12:37:42.455831Z K 7 svn:log V 4805 MFC Radeon KMS driver FreeBSD 9 already had modern Intel GPUs support, now this is the case for Radeon GPUs too. This will ease the work on ports, where there won't be a need to distinguish between FreeBSD 9/10 and different hardware vendors. Help from: jhb@, jkim@, kan@, kib@, J.R. Oldroyd (previous version of the patch) The following revisions were merged in this single commit: r254885: drm/radeon: Import the Radeon KMS driver This driver is based on Linux 3.8 and a previous effort by kan@. More informations about this project can be found on the FreeBSD wiki: https://wiki.freebsd.org/AMD_GPU The driver is split into: sys/dev/drm2: The driver sources. sys/modules/drm2/radeonkmw: The driver main kernel module's Makefile. sys/modules/drm2/radeonkmsfw: All firmware kernel module Makefiles. There's one directory and one Makefile for each firmware. sys/contrib/dev/drm2/radeonkmsfw: All firmware binary sources. tools/tools/drm/radeon Tools to update firmwares or regenerate some headers. Merging the driver to FreeBSD 9.x may be possible but not a priority for now. Help from: kib@, kan@ Tested by: avg@, kwm@, ray@, Alexander Yerenkow , Anders Bolt-Evensen , Denis Djubajlo , J.R. Oldroyd , Mikaël Urankar , Pierre-Emmanuel Pédron , Sam Fourman Jr. , Wade , (probably other I forgot...) HW donations: kyzh, Yakaz r254894: drm/radeon: Rename the (S)DEBUG macros in atom.c to avoid conflicts For instance, DEBUG is already defined in the LINT kernel configuration. This fixes the build of LINT. r254899: drm/radeon: Disable build on i386/pc98 r255572: drm/radeon: Fix usage of vga_pci_map_bios() vga_pci_(un)map_bios() takes a vgapci device as argument, not a drmn one. This fixes a bug where the BIOS couldn't be mapped if the device wasn't the boot display. Approved by: re (kib; blanket for following drm2/radeon commits) r255573: drm/radeon: Fix usage of pci_save_state() and pci_restore_state() Calling those functions with the drmn device as argument causes a panic, because it's not a direct child of pci$N. They must be called with the vgapci device instead. This fix is not enough to make suspend/resume work reliably. Approved by: re (blanket) r255587: drm/radeon: Add missing "return false" after unmapping invalid BIOS Without that, we would try to copy the unmapped BIOS. Submitted by: Christoph Mallon Approved by: re (blanket) r256771: drm/radeon: radeonkms depends on firmware(9) Submitted by: tijl@ r257869: drm: Initialize "handle" to 0 before calling drm_gem_handle_create() This is variable is being checked in drm_gem_name_create() before being set. r257870: drm/radeon: Wake up userland after page flip For instance, this caused issues in KDE, such as stuttered animations (with desktop effects enabled). r259003: Initialize modesetting sysctls in radeonkms. This is intended for MFC if re@ permits. Reviewed by: kib, dumbbell Tested by: Steven Chamberlain MFC after: 3 days r259101: drm/radeon: agp_info->ai_aperture_size is in bytes, not Mbytes This fixes radeon_agp_init() and gtt_size is now correct. However, this is not enough to make Radeon AGP cards work: ttm_agp_backend.c isn't implemented yet. Submitted by: tijl@ r259104: drm/radeon: radeon_dp_i2c_aux_ch() must return 0 on FreeBSD The code was unmodified compared to Linux and returned the amount of received bytes from the i2c bus. This led to non-working i2c bus and failure to eg. read monitor's EDID, if connected to DisplayPort. MFC after: 3 days Tested by: Mikaël Urankar r259684: drm/ttm, drm/radeon: Replace EINTR/ERESTART by ERESTARTSYS... ... for msleep/cv_*wait() return values, where wait_event*() is used on Linux. ERESTARTSYS is the return code expected by callers when the operation was interrupted. For instance, this is the case of radeon_cs_ioctl() (radeon_cs.c): if an error occurs, and the code isn't ERESTARTSYS (eg. EINTR), it logs an error. Note that ERESTARTSYS is defined as ERESTART, but this keeps callers' code close to Linux. Submitted by: avg@ (previous version) r261497: Abort when firmware isn't present in R600+ models. More details at: http://anonscm.debian.org/viewvc/kernel/dists/trunk/linux/debian/patches/bugfix/all/radeon-firmware-is-required-for-drm-and-kms-on-r600-onward.patch?revision=20909&view=co Reviewed by: dumbbell MFC after: 1 week END