141 Commits

Author SHA1 Message Date
dumbbell
6d0deb9845 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 <mikael.urankar@gmail.com>
2013-12-08 18:48:07 +00:00
dumbbell
45fe2f2940 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@
2013-12-08 14:21:54 +00:00
ray
8d1c24c247 Merge VT(9) project (a.k.a. newcons).
Reviewed by:	nwhitehorn
MFC_to_10_after:	re approval

Sponsored by:	The FreeBSD Foundation
2013-12-05 22:38:53 +00:00
rmh
e47dbd1e3f Initialize modesetting sysctls in radeonkms.
This is intended for MFC if re@ permits.

Reviewed by:	kib, dumbbell
Tested by:	Steven Chamberlain <steven@pyro.eu.org>
MFC after:	3 days
2013-12-05 20:23:32 +00:00
ray
1af064917e MFC @r258947.
Sponsored by:	The FreeBSD Foundation
2013-12-05 00:57:53 +00:00
dumbbell
a2be75236c drm: Read PCIER_LINK_CAP/PCIER_LINK_CAP2 from the PCI bridge
Before this fix, capabilities were read from vgapci and were incorrect.
2013-12-04 19:04:56 +00:00
eadler
3488bf4874 Partial revert of r258779 and r258780:
The directory sys/dev/drm2/i915 is apperently contributed code.
	Revert to the broken version of this file to make future imports easier.

Requested by:	kib
2013-12-02 03:36:44 +00:00
eadler
44c01df173 Fix undefined behavior: (1 << 31) is not defined as 1 is an int and this
shifts into the sign bit.  Instead use (1U << 31) which gets the
expected result.

This fix is not ideal as it assumes a 32 bit int, but does fix the issue
for most cases.

A similar change was made in OpenBSD.

Discussed with:	-arch, rdivacky
Reviewed by:	cperciva
2013-11-30 22:17:27 +00:00
eadler
5bcb8c5f42 Similar to the (1 << 31) case it is not defined to do (2 << 30). 2013-11-30 22:16:37 +00:00
dumbbell
841981e64e drm: Fix build with gcc, broken with r258549
The code was easier to read without __DECONST and clang didn't report
any error. I thought the cast was enough...

MFC after:	3 days
X-MFC-With:	r258549
2013-11-25 15:01:59 +00:00
dumbbell
fa0e069a02 drm: Dereference pointers given to qsort_r()'s cmp callback
drm_le_cmp() (qsort_r()'s callback) receives pointers to elements in the
array passed to qsort_r(), not the elements themselves.

Before this fix, the use of qsort_r() shuffled the array, not sorted it,
because the compare callback accessed random memory locations, not the
expected elements.

This bug triggered an infinite loop in KDE/xserver:

    1. KDE has a kded module called "randrmonitor" which queries xserver
       for current monitors at startup and then listens to RandR
       notifications from xserver.

    2. xserver handles the query from "randrmonitor" by polling the
       video device using the "drm_mode_getconnector()" ioctl. This
       ioctl returns a list of connectors and, for those with a
       connected monitor, the available modes. Each modes list is sorted
       by the kernel before returning. When xserver gets the connectors
       list, it sorts the modes lists again.

       In the case of this bug, when two modes are equal (in xserver's
       compare function PoV), their order is kept stable (ie. the
       kernel order is kept for those two modes). And because the list
       was shuffled by the kernel, the order of two equal modes was
       frequently changed in the final modes list in xserver.

    3. xserver compares the returned connectors list with the list
       obtained earlier. In particular, it compares the sorted
       modes lists for each connector. If a property of a connector
       changes (eg. modes), xserver sends a "RRNotify_OutputChange"
       notification.

       Because of the change of order between equal modes, xserver sent
       a notification after each polling of the connectors.

    4. "randrmonitor" receives a notification, triggered by its query. The
       notification doesn't contain the new connectors list, therefore, it
       asks for the new list using the same function: go back to step #2.

MFC after:	3 days
2013-11-25 11:15:51 +00:00
ray
1d8a8d3009 Move mode_config up one level. DRM drivers call drm_fb_helper_restore_fbdev_mode
with that lock already held.

Suggested by:	avg

Sponsored by:	The FreeBSD Foundation
2013-11-18 22:35:02 +00:00
dumbbell
49c3716bee drm: Support DRM_CAP_TIMESTAMP_MONOTONIC capability
This fixes DPMS with KDE and radeonkms. Without this, the display would
freeze when the monitor is put into sleep state, and only resumes after
several dozens of minutes once the monitor is powered on again.

Tested by:	Mathias Picker <Mathias.Picker@virtual-earth.de>
2013-11-17 16:07:52 +00:00
ray
89f74f8743 Lock mode_config before call drm_crtc_helper_set_config.
Submitted by:	avg
Sponsored by:	The FreeBSD Foundation
2013-11-17 00:49:55 +00:00
ray
7317ada90c MFC @r258091. 2013-11-13 13:41:36 +00:00
dumbbell
9a50177f8f drm/radeon: Fix build of radeon_fb.c on i386 2013-11-12 19:44:45 +00:00
dumbbell
db30f7f6ab drm/radeon: Wake up userland after page flip
For instance, this caused issues in KDE, such as stuttered animations
(with desktop effects enabled).
2013-11-08 22:47:43 +00:00
dumbbell
ca7d4f1e4f 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.
2013-11-08 22:44:46 +00:00
dumbbell
a9987007cb drm/radeon: Implement the FB_GETINFO() newbus callback 2013-11-02 13:16:00 +00:00
dumbbell
6a6d675d3f drm: Log error if we fail to attach fbd device 2013-11-02 13:14:46 +00:00
ray
b6685245d7 Change drm2 to attach fbd as device.
Radeon driver not ready yet.

Sponsored by:	The FreeBSD Foundation
2013-10-31 14:39:04 +00:00
ray
3d72b52090 MFC @r256953 2013-10-23 09:21:14 +00:00
ray
0d3746779c o Update drivers according to fb_info structure changes.
o Switch drm_fb_helper to be simple framebuffer provider.

Sponsored by:	The FreeBSD Foundation
2013-10-22 20:27:30 +00:00
kib
3764544c53 Reset function on SandyBridge holds the gt_lock for the whole duration
already.  Also, according to the specs, GDRST register is not in the
power well, so the forcewake for reset status read is excessive for
this reason.

Use plain register read for waiting of the reset completion
notification, to avoid gt_lock recursion.  Linux upstream did the
similar change, but their code was already restructured.

Reported by:	ray
Sponsored by:	The FreeBSD Foundation
MFC after:	1 week
2013-10-21 16:22:51 +00:00
dumbbell
b11cc9295f drm/radeon: radeonkms depends on firmware(9)
Submitted by:	tijl@
2013-10-19 17:11:58 +00:00
ray
1fd948f6c9 Swap Red and Blue (too much red in dialog(1)).
Sponsored by:	The FreeBSD Foundation
2013-10-15 13:45:37 +00:00
ray
754499eca9 Don't forget to include colors/vt_termcolors.h too.
Sponsored by:	The FreeBSD Foundation
2013-10-15 13:24:10 +00:00
ray
6223ebf08b Use generated color map.
Sponsored by:	The FreeBSD Foundation
2013-10-15 13:18:39 +00:00
ray
d8cbe1290b Partially revert accidentally committed #if from r256528.
Sponsored by:	The FreeBSD Foundation
2013-10-15 13:07:24 +00:00
ray
fff7931dbb Rename bitblt method to bitbltchr.
Sponsored by:	The FreeBSD Foundation
2013-10-15 12:29:36 +00:00
ray
2324fc717d Fix off-by-one-huge-fb-line copy-pasted to every driver.
TODO: defaulting to single implementation for all FB devices.

Sponsored by:	The FreeBSD Foundation
2013-10-11 13:07:31 +00:00
dumbbell
cc50f124ba drm/radeon: Fill "struct fb_info" for Newcons
This is a first step to make Newcons work with "radeonkms". However,
this is very unstable at the moment. Especially, the locking change in
radeon_pm.c is probably not correct.
2013-10-10 12:44:00 +00:00
ray
da824c4a2b MFC @r256148. 2013-10-08 14:02:35 +00:00
ray
36deab7b3b Enable fill of fb_info for i915kms driver.
Sponsored by:	The FreeBSD Foundation
2013-10-08 11:51:20 +00:00
ray
b11a0aa768 Add Newcons KMS driver. Based on drm_fb_helper functionality.
TODO: Should be moved to separate framebuffer interface.

Sponsored by:	The FreeBSD Foundation
2013-10-08 11:48:58 +00:00
ray
a1a002ce5c Add fb_info structure definition. Drivers should fill it to give access to
framebuffer.

Sponsored by:	The FreeBSD Foundation
2013-10-08 11:33:24 +00:00
dumbbell
a58808dc62 drm/radeon: Add missing "return false" after unmapping invalid BIOS
Without that, we would try to copy the unmapped BIOS.

Submitted by:	Christoph Mallon <christoph.mallon@gmx.de>
Approved by:	re (blanket)
2013-09-15 07:48:42 +00:00
dumbbell
b2a784f068 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)
2013-09-14 17:24:41 +00:00
dumbbell
bd9c660569 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)
2013-09-14 17:22:34 +00:00
jhb
04bb6e10cd Add a mmap flag (MAP_32BIT) on 64-bit platforms to request that a mapping use
an address in the first 2GB of the process's address space.  This flag should
have the same semantics as the same flag on Linux.

To facilitate this, add a new parameter to vm_map_find() that specifies an
optional maximum virtual address.  While here, fix several callers of
vm_map_find() to use a VMFS_* constant for the findspace argument instead of
TRUE and FALSE.

Reviewed by:	alc
Approved by:	re (kib)
2013-09-09 18:11:59 +00:00
jkim
76248c6467 'u_long' is consistently spelled 'unsigned long' in this file. Fix it. 2013-08-29 23:09:34 +00:00
jkim
8fcf363f03 Partially revert r254880. The bitmap operations actually use long type now. 2013-08-29 22:46:21 +00:00
jkim
5fe5bcbff4 Fix the incomplete conversion from atomic_t to long for test_bit(). 2013-08-29 20:51:12 +00:00
jkim
6603a73740 Clarify confusions between atomic_t and bitmap. Fix bitmap operations
accordingly.
2013-08-29 20:40:45 +00:00
jkim
d60bb760ec - Remove test_and_set_bit() macro. It is unused since r255037.
- Relax atomic_read() and atomic_set() macros.  Linux does not require any
memory barrier.  Also, these macros may be even reordered or optimized away
according to the API documentation:

https://www.kernel.org/doc/Documentation/atomic_ops.txt
2013-08-29 19:47:52 +00:00
jkim
674c9801f6 Fix atomic operations on context_flag without altering semantics. 2013-08-29 18:36:47 +00:00
jkim
4c74509011 Correct atomic operations in i915. 2013-08-28 23:59:38 +00:00
jkim
28ab6fab8b Fix a compiler warning and add couple of VM map types. 2013-08-28 23:43:28 +00:00
jkim
6731dd428d Fix a compiler warning. With this fix, a negative time can be converted to
a struct timeval and back to the original nanoseconds correctly.
2013-08-28 22:57:49 +00:00
dumbbell
8b28c9e54d 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.
2013-08-26 06:31:57 +00:00