summaryrefslogtreecommitdiff
path: root/src
AgeCommit message (Collapse)Author
2008-11-25Remove smi_dga.c and polylines code from smi_xaa.c.Paulo Cesar Pereira de Andrade
DGA was also not being properly test to not enable the pSmi fields, but since the dga implementation is very basic, it is better to just remove it (if compiling the sources on pre 1.4 X Server, DGA will be disabled). The polylines code in xmi_xaa.c was already if 0'ed for some time, but it may be reinstantiated to accelerate (back) xaa rotated modes. Currently only randr+exa accelerates rotated modes.
2008-11-25Ensure the engine is idle before switching to a virtual terminal.Paulo Cesar Pereira de Andrade
At least in the smi501/502, it may even completely lock in some special cases (like when there is a browser playing some youtube video). The code in SMI_CloseScreen() was almost identical to SMI_LeaveVT(), so it now just call SMI_Leave() if required.
2008-11-24Use a single debug macro for leaving functions.Paulo Cesar Pereira de Andrade
The LEAVE() macro, when debug is disabled, now is defined as: <hash>define LEAVE(...) return __VA_ARGS__ This avoids the requirement of a return statement after the LEAVE() macro call, what can be confusing.
2008-11-19Declare DGA fields only when not using xf86DiDGAInit.Paulo Cesar Pereira de Andrade
2008-11-17Enable XAA and randr rotated modes.Paulo Cesar Pereira de Andrade
Use the same logic for offscreen memory management as used in smi_video.c. This also makes the functions SMI_AllocateMemory and SMI_FreeMemory no longer static in smi_video.c.
2008-11-14Correct EXA+Randr+rotated mode.Paulo Cesar Pereira de Andrade
The smi 501/502 cannot rotate-blt more than 32 bytes at a time. Patch based on smi's sample smi_shadow.c. XAA + randr + rotated mode currently not supported.
2008-11-14Don't explicitly call the cursor routines.Paulo Cesar Pereira de Andrade
On the MSOC, the hardware cursor was remaining on screen, when using EXA and a randr rotated mode.
2008-11-14Only compile smi_dga.c when xf86DiDGAInit is not available.Paulo Cesar Pereira de Andrade
Besides reducing driver size, this should make DGA+EXA accelerated.
2008-11-14Correct regressions in CSCVideoPaulo Cesar Pereira de Andrade
Commit 0870d46718fe4e01953efd63cec46c54140b20f9 broke the clipping code. That has been corrected in this patch. Anyway, the hardware color space conversion should not be hidden down in the driver code, instead it should be usable by external programs as well, instead of having some applications doing it by software.
2008-11-14MSOC: Hide cursor on mode setup when using software cursor.Paulo Cesar Pereira de Andrade
The kernel framebuffer module uses the hw cursor for the console cursor, so the driver must ensure it is hidden when setting a video mode.
2008-11-14Be more liberal about mode width validation.Paulo Cesar Pereira de Andrade
The code was inherited from first import of latest smi sources, but the driver actually programs a mode, so there is no need to check if there will be a table entry with register contents matching the requested mode.
2008-11-13Don't restore alpha registers, as they are not being modified.Paulo Cesar Pereira de Andrade
Restoring the registers "without need" caused some instability, with random locks.
2008-11-13Changed to use panel plane tl and tr to center modes smaller then panel size.Paulo Cesar Pereira de Andrade
The code is under "<hash>ifdef USE_PANEL_CENTER", as it is buggy, and regardless of value set to right and bottom, it will crop from 0 to mode-width/mode-height, and then display a lot of screen artifacts, due to improper programming. Either way, the CRT in clone mode will display correctly.
2008-11-13Enable gamma correction on the MSOC.Paulo Cesar Pereira de Andrade
2008-11-11Correct a problem in CSC video on the smi 501/502.Paulo Cesar Pereira de Andrade
This significantly simplify the function SMI_DisplayVideo0501_CSC(), but the real cause of the problem that this patch corrects is that whenever MMIO 0x1000fc bit 24 (Vertical Linear Filter Control) is set, the last line of the rendered video will display only noisy, regardless of video being rendered 1x1, or scaled up or down.
2008-11-11Disable detection of crt for the smi 501/502.Paulo Cesar Pereira de Andrade
As described by siliconmotion, it does not work on the smi 502. Does it work on older revisions? Keeping <hash>ifdef'ed out for now as it hopefully will be corrected in a newer hardware revision.
2008-11-11Implement an argb cursor using the alpha layer.Paulo Cesar Pereira de Andrade
The code is <hash>ifdef'ed out by <hash>if SMI_CURSOR_ALPHA_PLANE because the smi 502 hardware is buggy, but it appears to have worked for some older hardware revisions (by looking at code available at ftp.siliconmotion.com.tw). Keeping it at least for now, as it serves as a simple way to reproduce the problems described in smi.h.
2008-11-11Add support for the reading/writing the alpha layer registers.Paulo Cesar Pereira de Andrade
2008-11-11Correct wrong offset value for secondary hardware cursor.Paulo Cesar Pereira de Andrade
Hardware cursor is still disabled in dual head mode due to some problems, usually when having both panel and crt mapped to the same address, what appears to confuse the "modes" code.
2008-11-08Remove unused fifo_* options.Francisco Jerez
2008-11-08Remove the ZoomOnLCD option and update manpage for PCIRetry.Paulo Cesar Pereira de Andrade
ZoomOnLCD controlled if Ctrl/Alt/+ or Ctrl/Alt/- could be used to reprogram the mode on the panel. The option was not used, and now, if different resolutions could be used, it should be advertised by randr. PCIBurst and PCIRetry options are now enabled by default. The fifo_xxx options need a review, as they appear to be associated with the older WaitQueue macro, that did ignore its argument. But these options are not used, and may be removed or reimplemented at some time.
2008-11-07Bit twelve on CPR00 bitfield is not bit eleven...Nathael Pajani
2008-11-06Use the CRT Monitor Detect MSOC register.Paulo Cesar Pereira de Andrade
Probably I misunderstood the usage of this register, as it will always show the same value, regardless of having a crt connected to the "vga" port or not. Only difference is that while the detect bit is set, the crt will be blank. This patch should be more of a placeholder for a possible correction, but it should not cause any side effects, unless the data field can be zero on a valid situation. In my test computer, this field, in base 2 is always 1000000010000100, what doesn't really look like data in rgb 8:8:8...
2008-11-04Allow setting modes larger then panel for secondary output.Paulo Cesar Pereira de Andrade
Sample usage on sm502: $ DISPLAY=:0 xrandr --output VGA --newmode 1280x1024 109.00 1280 1368 1496 1712 1024 1027 1034 1063 -hsync +vsync $ DISPLAY=:0 xrandr --addmode VGA 1280x1024 $ DISPLAY=:0 xrandr --output VGA --mode 1280x1024 --pos 768x176 Last command assuming using XAA (with ``Virtual 2048 1024''), so that it will have panel in top-left, and crt in bottom-right.
2008-11-04Add CSCVideo option to smi 501/502.Paulo Cesar Pereira de Andrade
This code is an adaptation of SMI sample implementation. CSCVideo is an alternate way to render video, that should reduce memory bandwidth usage, and uses the color space conversion hardware to render video directly to the framebuffer memory. When using randr dual head mode, currently only XAA is supported. As it has a fixed format framebuffer (when using the Virtual xorg.conf option). This patch also ensures that pScrn->displayWidth, pScrn->virtualX and pScrn->virtualY are only changed by the driver when using EXA.
2008-10-30Make MSOC work with EXA offscreen manager.Paulo Cesar Pereira de Andrade
2008-10-30 Update memory detection for MSOC.Paulo Cesar Pereira de Andrade
Use "local memory" field of mmio 0x010 and not "system memory", as it uses system memory values whenever there is a choice (just sets bits to zero).
2008-10-30 Disable HW cursor in dualhead mode in smi 501/502Paulo Cesar Pereira de Andrade
Other chipsets are doing the same. But this apparently is to circumvent a problem in randr/cursor implementation, that appears to not work very well with hardware that supports two hw cursors, but not argb cursors.
2008-10-29 SMI501/502 cursor fixes.Paulo Cesar Pereira de Andrade
Use separate buffers for crt and panel hw cursors. Describe, and workaround a problem with Dualhead and hw cursor enabled. It still has the inconvenient of having a blinking X when exiting the server or switching to a VT; maybe should also save the image currently configured also (and restore on exit), or just disable hw cursor on dual head mode. Also revert change to not initialize video on dualhead. Better to have fully functional video only on panel, that can be resized, then non resizable video..
2008-10-28Update msoc to use randr cursor routinesPaulo Cesar Pereira de Andrade
pSmi->IsSecondary was not used, and there should not exist two instances of the driver managing the same card. Macro CHECK_SECONDARY() was dependant on a second instance of the driver for the same card, and also removed. Some rework should still be done in the cursor code, as it sometimes, when displaying different data, will leave the hw cursor visible, while using an argb cursor.
2008-10-28Remove shadowfb based rotation support.Francisco Jerez
Also done some clean up, like removing unused/redundant members of the screen private structure, and removing now unused configuration file options.
2008-10-28Lynx hardware cursor code adapted to the CRTC interfaces.Francisco Jerez
2008-10-28Changes in the video overlay clipping code.Francisco Jerez
Clip the video to the CRTC viewport by using xf86_crtc_clip_video_helper, and allow XV in dual head mode.
2008-10-28Simple EXA Composite implementation.Francisco Jerez
* Implementation of the PictOpSrc render operation with a source coordinate transformation through 2D engine rotate-BITBLTs. * Fix EXA Copy and Solid in 24 bpp packed color mode.
2008-10-28Some corrections in the CRTC code.Francisco Jerez
* Make screen resizing behave better with XAA. * Move some local variable declarations to the top of the function definition to conform ANSI C. * Make the Lynx panel modesetting code to actually program the panel sync pulse width in dualhead mode. * Also, fix a crash when using libpciaccess (the memory wasn't being unmapped).
2008-10-24Make Dualhead option functional.Paulo Cesar Pereira de Andrade
Slightly change clock selection code to start using 501 compatible values, before checking 502 values, if it is a 502. DPMS for the VGA/second output was being set with bits inverted, that is dpms-on was programmed as dpms-off and vice versa. This was one of the reasons of dual head not working. Corrected wrong vsync programming for the crt. Cut&paste/typo caused programming vsync with hsync values, and thus, never getting the crt to accept the mode being programmed. If adding: Option "Dualhead" "True" to xorg.conf, now you should be able to do things like: $ DISPLAY=:0.0 xrandr --output VGA --right-of LVDS $ DISPLAY=:0.0 xrandr --output VGA --below LVDS and so on. *Iff* there is some way to not have any limitations for video playback, this option should be made default or automatically configured.
2008-10-22Make UseFBDev option functional again.Paulo Cesar Pereira de Andrade
It is mean't to be a fallback option, that as long as kernel boots in framebuffer mode, the X Server should also work. Correct incorrect value being checked when printing state of Dualhead option. The M value when programming PLL3 is actually an 8 bits integer, so correct it and comments about it.
2008-10-21Use existing "Dualhead" option in MSOC.Paulo Cesar Pereira de Andrade
If Dualhead is set, it will attempt to use setups that allow different outputs with different contents, instead of crt always cloning panel. Still not fully functional.
2008-10-21Crt interface corrections.Paulo Cesar Pereira de Andrade
Correct wrong clock calculation for the 501 clock setting, that is used for pre 502 panel interface and crt. Adds a few new programmable fields to MSOCRegRec:crt_display_ctl. Call SMI501_CrtcAdjustFrame() after adjusting a mode, instead of before changing registers.
2008-10-20Don't change M1XCLK unless option specified in xorg.conf.Paulo Cesar Pereira de Andrade
Also add more complete description of programmable clocks.
2008-10-17Update sm502 pll3 programming.Paulo Cesar Pereira de Andrade
Also print the value of sm502 registers (should be a noop on sm501). Added the frequency field to the MSOCRegRec's misc_ctl, as it is a read/write registers, and changing bit 24 may change the logic of pll3 programming (needs clarification with SMI).
2008-10-16Revert/modify some RandR changes to reenable XAA.Paulo Cesar Pereira de Andrade
XAA was not initialized anymore in RandR patch, but it is still the default accel method. Also reenable offscreen fb manager. At least on the MSOC OEM sample (using X Server 1.4), needs some more work as EXA is crashing in a call to exaPrepareAccess() when switching to a terminal; this seems to be related to disabling exa offscreen pixmaps on the smi501.
2008-10-16Correct incorrect pll3 calculation.Paulo Cesar Pereira de Andrade
Double value must be truncated when calculating the difference from the possible clock and requested clock.
2008-10-14Extra MSOC tweaks for the RandR1.2 changes.Paulo Cesar Pereira de Andrade
The "prototype" computer no longer locks, and only "missing feature" from before the patch is that video and Xaa don't work (only with Exa). For the moment, just force crt as not connected, and set the proper registers to make the secondary output clone the panel.
2008-10-14Remove dependency on xf86cvt.c.Paulo Cesar Pereira de Andrade
It actually was not added in a previous commit (due to using git reset to remake a commit, and not readding it), but now, changed only call xf86CVTMode if it is available in the X Server, otherwise, for older X Servers, a modeline should be specified in xorg.conf.
2008-10-14Minor corrections for smi501 for the randr1.2 integration.Paulo Cesar Pereira de Andrade
Also correct printing information about MCLK in the smi501/502, it should print M2CLK (aka M1CLK o the 502) as it is the clock that controls video engine/memory.
2008-10-14RandR1.2 initial implementation (WIP)Francisco Jerez
Moved most of the Lynx-specific code out of the main functions at smi_driver.c to some new files: smilynx_hw.c (With CRTC-independent code like global hardware initialization and mode saving/restoring), smilynx_crtc.c (With the CRTC-local procedures) and smilynx_output.c (Output power management, DDC and monitor detection, currently). Done something similar with the SMI501 code: split SMI501_ModeInit in three separate functions: SMI501_HWInit that does the global initialization, and the CRTC mode_set callbacks SMI501_ModeSet_crt and SMI501_ModeSet_lcd at smi501_crtc.c. The SMI501_ModeSet code is divided into SMI501_WriteMode_common, SMI501_WriteMode_lcd and SMI501_WriteMode_crt, each one updates a different register set in the hardware. Inside smi_crtc.c, there is mainly hardware independent code... Initial CRT controller allocation, shadows, rotation and framebuffer resizing code. The shadow code currently relies on EXA... I'm not sure what are the problems of the EXA implementation in MSOC. Does it work? I think it would be a good thing to get rid of XAA soon: The next thing I'll be working on will be EXA Composite... I hope it's possible to get EXA acceleration working at least as fast as the current XAA. (Although Teddy Wang confirmed me that the SMI720 DMA engine is broken...) So, the patch adds some features like new Lynx dualhead modesetting code, but it probably breaks some other things: * Video Overlay: I suppose it does work with EXA activated. It seems it is also possible to have simultaneous overlays in both CRTCs with the Lynx hardware (I have some code for this, but still work in progress). * Hardware Cursor (It needs more integration in the CRTC interfaces). * The old Shadow FB / rotation code, which we should probably drop. These are in my TODO list... Along with some more cleaning and other minor issues in the modesetting code. About the SMI501 RandR1.2 implementation... I suppose it's specially lacking per-output DPMS (The DPMS field in the System Control register only affects the CRT, doesn't it?).
2008-10-09Add a PanelSize/60Hz CVT mode at driver initializationPaulo Cesar Pereira de Andrade
This driver is expected to be used with XServer 1.4 or newer, but a (probably temporary) copy of xf86cvt.c was also added to the build. This modeline automatically added implies it would not be required to specify one in xorg.conf, as it should not be uncommon "non standard" modes, like 800x480 or 1024x600.
2008-10-09Make the input frequency in SMI501_FindPLLClock a variablePaulo Cesar Pereira de Andrade
Instead of using a fixed 24Mhz input frequency, as "unofficially" specified by SMI, a guess of using a 12 multiplier was used, and it corrects the screen flicker problem as well as make a secondary output work again.
2008-10-08Rewrite WaitQueue and WaitIdle accell macrosPaulo Cesar Pereira de Andrade
WaitQueue() did receive an unused parameter, that was removed. The parameter was unused since version 1.0 in XFree86 CVS, so probably nobody knows for what it was used. WaitIdle() now also replaces WaitIdleEmpty(), as an idle engine should also have an empty fifo. SMI_SubsequentScreenToScreenCopy() was changed to use WaitIdle() instead of WaitQueue() before submitting the commands to the engine. This fixes a nasty lockup when using XaaOffscreenPixmaps (what is desired/wanted to help improve performance), and the lockup in the MSOC was clearly due to an engine overrun, when sending commands faster then the engine could process.