23 Sep, 2009

40 commits

  • The patch enables the driver to be used on platforms such as ARM where an
    I/O address is a 32-bit memory address.

    The patch avoids the following kernel oops:

    debian:~# modprobe sisfb
    [ 73.070000] sisfb: Video ROM found
    [ 73.080000] sisfb: Video RAM at 0x80000000, mapped to 0xe0a00000, size 1024k
    [ 73.090000] sisfb: MMIO at 0x84080000, mapped to 0xe0b80000, size 256k
    [ 73.090000] sisfb: Memory heap starting at 800K, size 32K
    [ 73.360000] Unable to handle kernel paging request at virtual address 6e000844
    [ 73.380000] pgd = df230000
    [ 73.380000] [6e000844] *pgd=00000000
    [ 73.380000] Internal error: Oops: 8f5 [#1]
    [ 73.380000] Modules linked in: sisfb(+) fb cfbcopyarea cfbimgblt cfbfillrect
    [ 73.380000] CPU: 0 Not tainted (2.6.31-iop32x #1)
    [ 73.380000] PC is at SiS_SetRegANDOR+0x10/0x38 [sisfb]
    [ 73.380000] LR is at SiS_SetSCLKHigh+0x38/0x94 [sisfb]
    [ 73.380000] pc : [] lr : [] psr: 60000013
    [ 73.380000] sp : df38fd00 ip : 6e000000 fp : 00000002
    [ 73.380000] r10: 00000108 r9 : 00000000 r8 : 00000108
    [ 73.380000] r7 : df064258 r6 : 00000110 r5 : 6e000844 r4 : 0000010a
    [ 73.380000] r3 : 00000001 r2 : 0000000e r1 : 00000011 r0 : 00000844
    [ 73.380000] Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment user
    [ 73.380000] Control: 0000397f Table: bf230000 DAC: 00000015
    [ 73.380000] Process modprobe (pid: 1849, stack limit = 0xdf38e270)
    [ 73.380000] Stack: (0xdf38fd00 to 0xdf390000)
    [ 73.380000] fd00: 0000010a 00000108 df064258 df064258 df064258 00000000 00000000 bf02c4e0
    [ 73.380000] fd20: 00000114 bf02c50c 00000013 00000114 0000010a df064258 00000000 bf02c980
    [ 73.380000] fd40: 00009c66 00000004 00000001 df064250 a0010000 a6a2a0a0 df064250 00000003
    [ 73.380000] fd60: df064250 00000000 df064258 0000fffd 00000000 00000000 00000000 bf033948
    [ 73.380000] fd80: 00000000 00000000 00000000 bf019e2c 00000000 df064a70 bf03b470 00010000
    [ 73.380000] fda0: 00000000 df064250 00000000 df831c00 00000012 bf039f70 00000000 c00abed8
    [ 73.380000] fdc0: 000008a6 000008a4 df0649b0 df064878 df064258 df064000 00000000 00000000
    [ 73.380000] fde0: 00000001 00008000 00000001 00030000 df81c930 bf049f88 df831c00 00000000
    [ 73.380000] fe00: bf049f58 df3952a0 c0447708 bf049f88 bf049fe0 c0191980 df831c00 c0191b10
    [ 73.380000] fe20: df831c58 bf049f58 df831c00 bf04aca8 df3952a0 df831c58 df831c58 bf049f88
    [ 73.380000] fe40: c01ba1b4 c01ba0a0 df831c58 df831c8c bf049f88 c01ba1b4 df3952a0 00000000
    [ 73.380000] fe60: c03e265c c01ba240 00000000 df38fe78 bf049f88 c01b990c df812938 df81b8d0
    [ 73.380000] fe80: df3952a0 df807780 00000000 00000060 bf049f88 c01b9224 bf0429c8 00000000
    [ 73.380000] fea0: bf049f58 00000000 bf049f88 00000000 00000000 bf04aea8 00000000 c01ba4e4
    [ 73.380000] fec0: e09861a0 bf049f58 00000000 bf049f88 00000000 c0191f20 00000000 00000000
    [ 73.380000] fee0: c03f7bac bf04d418 0000fff2 0000fff1 bf04ad08 0002f260 0002f260 e0986038
    [ 73.380000] ff00: e0986150 e098568b df143340 e0990280 00000036 c03d8b00 fffffffd 00000000
    [ 73.380000] ff20: bf04acfc 00000000 fffffffc 0003cf4b 00018098 c03f7bac 00000000 bf04d000
    [ 73.380000] ff40: df38e000 00000000 bedc0984 c00272a4 ffffffff c005bc88 00000000 00000000
    [ 73.380000] ff60: 0003cf4b 0003cf4b 00018098 bf04acfc 00000000 c0027fe8 df38e000 00000000
    [ 73.380000] ff80: bedc0984 c006882c 00001000 00000003 00000000 00009064 00000000 00008edc
    [ 73.380000] ffa0: 00000080 c0027e20 00009064 00000000 4014e000 0003cf4b 00018098 0003cf4b
    [ 73.380000] ffc0: 00009064 00000000 00008edc 00000080 00000000 00000000 40025000 bedc0984
    [ 73.380000] ffe0: 00000000 bedc08fc 0000b6b0 400e8f34 60000010 4014e000 00000000 00000000
    [ 73.380000] [] (SiS_SetRegANDOR+0x10/0x38 [sisfb]) from [] (0xdf064258)
    [ 73.380000] Code: e92d0030 e20110ff e280546e e3a0c46e (e5c51000)
    [ 73.680000] ---[ end trace 62a93e01df37a5f2 ]---

    Signed-off-by: Aaro Koskinen
    Cc: Thomas Winischhofer
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Aaro Koskinen
     
  • Fixes `s3c_fb_remove' referenced in section `.data' of
    drivers/built-in.o: defined in discarded section `.devexit.text' of
    drivers/built-in.o

    With CONFIG_HOTPLUG=n, functions marked with __devexit gets removed,
    so make sure we use __devexit_p when referencing pointers to them.

    Signed-off-by: Peter Korsgaard
    Acked-by: Ben Dooks
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Peter Korsgaard
     
  • drivers/video/tmiofb.c: In function 'tmiofb_resume':
    drivers/video/tmiofb.c:977: warning: 'retval' may be used uninitialized in this function

    Acked-by: Dmitry Eremin-Solenikov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andrew Morton
     
  • fbcon makes the (reasonable) assumption that it only needs to program the
    hardware once, when fbcon_init() is called for the foreground console.

    This doesn't always play well with vgacon because vgacon_deinit() is only
    doing its job when the last console it owns is closed (when switching from
    vgacon to fbcon, that's usually *after* fbcon_init() has set the new
    mode).

    Depending on the hardware this can cause the wrong framebuffer location to
    be scanned out (e.g. reproduced on nv05 with the nouveau framebuffer
    driver).

    Signed-off-by: Francisco Jerez
    Cc: "H. Peter Anvin"
    Cc: Alan Cox
    Cc: Krzysztof Helt
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Francisco Jerez
     
  • Attempting to unload a framebuffer module calls unregister_framebuffer()
    which in turn gets fbcon to release it. If fbcon has no framebuffers
    linked to a console, it will also unbind itself from the console driver.
    However, if fbcon never registered itself as a console driver, the unbind
    will fail causing the framebuffer device entry to persist. In most cases
    this failure will result in an oops when attempting to access the now
    non-existent device.

    This patch ensures that the fbcon unbind request will succeed even if a
    bind was never done. It tracks if a successful bind ever occurred & will
    only attempt to unbind if needed. If there never was a bind, it simply
    returns with no error.

    Signed-off-by: Ian Armstrong
    Cc: Krzysztof Helt
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ian Armstrong
     
  • CONFIG_FB_MATROX_32MB is always enabled, so there is no point in having
    ifdefs all around. And it is bad practice to use CONFIG_* as a name for
    something which is not a Kconfig option.

    Signed-off-by: Jean Delvare
    Acked-by: Petr Vandrovec
    Cc: Krzysztof Helt
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jean Delvare
     
  • With multihead support always enabled, macros MINFO_FROM and
    MINFO_FROM_INFO are no longer needed and make the code harder to read.

    Signed-off-by: Jean Delvare
    Acked-by: Petr Vandrovec
    Cc: Krzysztof Helt
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jean Delvare
     
  • With multihead support always enabled, these macros are no longer needed
    and make the code harder to read.

    Signed-off-by: Jean Delvare
    Acked-by: Petr Vandrovec
    Cc: Krzysztof Helt
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jean Delvare
     
  • With multihead support always enabled, these macros are no longer needed
    and make the code harder to read.

    Signed-off-by: Jean Delvare
    Acked-by: Petr Vandrovec
    Cc: Krzysztof Helt
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jean Delvare
     
  • I would like to get rid of option CONFIG_FB_MATROX_MULTIHEAD and just
    always enable it. There are many reasons for doing this:

    * CONFIG_FB_MATROX_MULTIHEAD=y is what all x86 distributions do, so it
    definitely works or we would know by now.

    * Building the matroxfb driver with CONFIG_FB_MATROX_MULTIHEAD not set
    results in the following build warning:

    drivers/video/matrox/matroxfb_crtc2.c: In function 'matroxfb_dh_open':
    drivers/video/matrox/matroxfb_crtc2.c:265: warning: the address of 'matroxfb_global_mxinfo' will always evaluate as 'true'
    drivers/video/matrox/matroxfb_crtc2.c: In function 'matroxfb_dh_release':
    drivers/video/matrox/matroxfb_crtc2.c:285: warning: the address of 'matroxfb_global_mxinfo' will always evaluate as 'true'

    This is nothing to be worried about, the driver will work fine, but build
    warnings are still annoying.

    * The trick to get multihead support without CONFIG_FB_MATROX_MULTIHEAD,
    which is described in the config help text, no longer works: you can't
    load the same kernel module more than once.

    * I fail to see how CONFIG_FB_MATROX_MULTIHEAD=y would make the code
    significantly slower, contrary to what the help text says. A few extra
    parameters on the stack here and there can't really slow things down in
    comaprison to the rest of the code, and register access.

    * The driver built without CONFIG_FB_MATROX_MULTIHEAD is larger than the
    driver build with CONFIG_FB_MATROX_MULTIHEAD=y by 8%.

    * One less configuration option makes things simpler. We add options
    all the time, being able to remove one for once is nice. It improves
    testing coverage. And I don't think the Matrox adapters are still
    popular enough to warrant overdetailed configuration settings.

    * We should be able to unobfuscate the driver code quite a bit after
    this change (patches follow.)

    Signed-off-by: Jean Delvare
    Acked-by: Petr Vandrovec
    Cc: Krzysztof Helt
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jean Delvare
     
  • At the moment about half of the framebuffer drivers can return an error
    code in fb_set_par. Until now it would be silently ignored by fbmem.c
    and fbcon.c. This patch fixes fbmem.c to return the error code and
    restore var on error.

    But it is not clear in which video mode the device is when fb_set_par
    fails. It would be good and reasonable if it were in the old state but
    there is no guarantee that this is true for all existing drivers.
    Additionally print a message if a failing fb_set_par is detected in
    fbmem.c or fbcon.c.

    Although most errors should be caught by the previous fb_check_var some
    errors can't as they are dynamic (memory allocations, ...) and can only be
    detected while performing the operations which is forbidden in
    fb_check_var.

    This patch shouldn't have a negative impact on normal operation as all
    drivers return 0 on success. The impact in case of error depends heavily
    on the driver and caller but it's expected to be better than before.

    Signed-off-by: Florian Tobias Schandinat
    Cc: Krzysztof Helt
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Florian Tobias Schandinat
     
  • In the final part of the calculation for the tft display clockrate we
    divide the output pf s3c2410fb_calc_pixclk() by 2 which leaves us with a
    rounding error if the result is odd.

    Change to using DIV_ROUND_UP() to ensure that we always choose a higher
    divisor and thus a lower frequency.

    Signed-off-by: Ben Dooks
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ben Dooks
     
  • Use DIV_ROUND_UP explicitly instead of manual shifts and adds. It makes
    the code more readable and consistent (sometimes there were shifts,
    sometimes divs).

    There is no change on the assembly level (compilers should do the right
    job).

    Signed-off-by: Jiri Slaby
    Cc: Sergey Senozhatsky
    Cc: Andi Kleen
    Cc: Krzysztof Helt
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jiri Slaby
     
  • Fix the range check for panning. The current code fails to detect some
    invalid values (very high ones that can occur if an app tries to move
    further up/left than 0,0) as the check uses the unknown values for
    calculation so that an overflow can occur.

    To fix this it is sufficient to move the calculation to the right side to
    use only trusted values.

    Kai Jiang detected this problem and proposed an initial patch.

    Signed-off-by: Florian Tobias Schandinat
    Cc: Kai Jiang
    Cc: Krzysztof Helt
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Florian Tobias Schandinat
     
  • Check that the result of kmalloc is not NULL before passing it to other
    functions.

    The semantic match that finds this problem is as follows:
    (http://www.emn.fr/x-info/coccinelle/)

    //
    @@
    expression *x;
    identifier f;
    constant char *C;
    @@

    x = \(kmalloc\|kcalloc\|kzalloc\)(...);
    ... when != x == NULL
    when != x != NULL
    when != (x || ...)
    (
    kfree(x)
    |
    f(...,C,...,x,...)
    |
    *f(...,x,...)
    |
    *x->f
    )
    //

    [akpm@linux-foundation.org: convert to kstrdup() as well]
    Signed-off-by: Julia Lawall
    Cc: Ming Lei
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Julia Lawall
     
  • It reads linetable[] before checking bounds of index, and ARRAY_SIZE is
    required because linetable[] are unsigned shorts.

    Signed-off-by: Roel Kluin
    Cc: Ralf Baechle
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Roel Kluin
     
  • Signed-off-by: Harald Welte
    Signed-off-by: Florian Tobias Schandinat
    Cc: Scott Fang
    Cc: Joseph Chan
    Cc: Jonathan Corbet
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Harald Welte
     
  • Signed-off-by: Harald Welte
    Signed-off-by: Florian Tobias Schandinat
    Cc: Scott Fang
    Cc: Joseph Chan
    Cc: Jonathan Corbet
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Harald Welte
     
  • Enable 2D hardware acceleration on VX855 for copyarea, imageblit and
    fillrect by selecting the correct engine which is the same as in VX800.

    Signed-off-by: Florian Tobias Schandinat
    Cc: Scott Fang
    Cc: Joseph Chan
    Cc: Jonathan Corbet
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Florian Tobias Schandinat
     
  • Add support for a new VIA integrated graphics chipset, the VX855.

    Signed-off-by: HaraldWelte
    Signed-off-by: Florian Tobias Schandinat
    Cc: Scott Fang
    Cc: Joseph Chan
    Cc: Jonathan Corbet
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Harald Welte
     
  • viafb: use read-only mode parsing

    The previous method of mode parsing wrote to the strings resulting in
    truncated mode strings in the sysfs.

    Signed-off-by: Florian Tobias Schandinat
    Cc: Scott Fang
    Cc: Joseph Chan
    Cc: Harald Welte
    Cc: Jonathan Corbet
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Florian Tobias Schandinat
     
  • Remove a structure member 'on_slot' in the chip_info structure which is
    completely unused.

    Signed-off-by: Harald Welte
    Signed-off-by: Florian Tobias Schandinat
    Cc: Scott Fang
    Cc: Joseph Chan
    Cc: Jonathan Corbet
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Harald Welte
     
  • Signed-off-by: Harald Welte
    Signed-off-by: Florian Tobias Schandinat
    Cc: Scott Fang
    Cc: Joseph Chan
    Cc: Jonathan Corbet
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Harald Welte
     
  • The main motivation of this patch was to merge the three initialization
    functions in one and clean it up. However as some changes in other code
    areas where needed to do it right some small other changes were made.

    Changes to viafb_par:

    io_virt renamed as engine_mmio and moved to shared
    VQ_start renamed as vq_vram_addr and moved to shared
    VQ_end removed as it is easily recalculatable

    vq_vram_addr is not strictly needed but keep it to track where we
    allocated video memory. The memory allocated for the virtual queue was
    shrunk to VQ_SIZE as VQ_SIZE+CURSOR_SIZE looked like a bug to me. But to
    be honest I don't have the faintest idea what virtual queues are for in
    the graphic hardware and whether the driver needs them in any way. I only
    know that they aren't directly accessed by the driver and so the only
    potential current use would be as hardware internal buffers. For now keep
    them to avoid regressions and only remove the double cursor allocation.

    The most changes were caused by renames and the mentioned structure
    changes so the chance of regressions is pretty low. The meaning of
    viafb_accel changed slightly as previously it was changed back and forth
    in the code and allowed to enable the hardware acceleration by software if
    previously disabled. The new behaviour is that viafb_accel=0 always
    prevents hardware acceleration. With viafb_accel!=0 the acceleration can
    be freely choosen by set_var. This means viafb_accel is a diagnostic tool
    and if someone has to use viafb_accel=0 the driver needs to be fixed.

    As this is mostly a code cleanup no regressions beside the slightly change
    of viafb_accel is expected.

    Signed-off-by: Florian Tobias Schandinat
    Cc: Scott Fang
    Cc: Joseph Chan
    Cc: Harald Welte
    Cc: Jonathan Corbet
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Florian Tobias Schandinat
     
  • Split the pitch handling up and replaces the calculation from virtual xres
    and bpp with fix.line_length which already contains the pitch and does not
    add any constrains for the virtual resolution.

    Also add a bit to the second pitch which the documentation mentions but
    which was ignored by the driver.

    Although it is a bit unclear what the right pitch for some LCD modes is
    this patch should have no negative runtime impact.

    Signed-off-by: Florian Tobias Schandinat
    Cc: Scott Fang
    Cc: Joseph Chan
    Cc: Harald Welte
    Cc: Jonathan Corbet
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Florian Tobias Schandinat
     
  • Clean the hardware cursor handling up.

    The most notable change is that it no longer buffers the values in
    viacursor but uses the ones in cursor instead as they are guaranteed to be
    always valid.

    Furthermore it uses local instead global variables where possible, moves
    the cursor variable in shared as only one hardware cursor is supported and
    returns an error if memory allocation fails. Last but not least it fixes
    a too small buffer (as u32 has only 4 and not 32 bytes) but this did not
    produce any known problems.

    This is mostly a code cleanup, no negative runtime changes are expected.

    Signed-off-by: Florian Tobias Schandinat
    Cc: Scott Fang
    Cc: Joseph Chan
    Cc: Harald Welte
    Cc: Jonathan Corbet
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Florian Tobias Schandinat
     
  • Signed-off-by: Alexey Dobriyan
    Acked-by: Florian Tobias Schandinat
    Cc: Scott Fang
    Cc: Joseph Chan
    Cc: Harald Welte
    Cc: Jonathan Corbet
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Alexey Dobriyan
     
  • This patch is a completly rewritten 2D engine. The engine is no longer in
    a default state but reinitialized every time to allow usage for both
    framebuffers regardless of their settings.

    The whole engine handling is concentrated in a big function which takes 16
    parameters. Although the number of parameters is worryingly it is good to
    have a single funtion to deal with this stuff as it allows to easily
    support different engines and avoids some code duplication.

    On the way support for the new 2D engine in VX800 was added. As the with
    less code duplication but it is probably better to duplicate the code as
    this way is easier to walk if VIA ever decides to release a new engine
    which changes anything the driver touches.

    The engine support for VX800 gives a notable boost in speed. There are no
    known regressions but as this patch changes paths I do neither have the
    hardware nor documentation to check and has the possibility to put the
    system in a critical state heavy testing is appreciated.

    Signed-off-by: Florian Tobias Schandinat
    Cc: Scott Fang
    Cc: Joseph Chan
    Cc: Harald Welte
    Cc: Jonathan Corbet
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Florian Tobias Schandinat
     
  • This patch introduces viafb_shared and is the beginning of a smooth
    transition to use it.

    viafb_shared should contain all general, non-surface specific data that
    should be shared along all viafb framebuffers while viafb_par should only
    contain things that are specific to each surface or in other words extend
    fb_info. This change is intended to clean the dual/multi framebuffer
    handling up.

    This removes the annoyance that viafbinfo1->par points to a different
    structure than viaparinfo1.

    As the last change is fundamental it is difficult to ensure that all parts
    of the driver do not depend on the previous brokenness but the chance of
    regressions is very low.

    Signed-off-by: Florian Tobias Schandinat
    Cc: Scott Fang
    Cc: Joseph Chan
    Cc: Harald Welte
    Cc: Jonathan Corbet
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Florian Tobias Schandinat
     
  • This removes the completly useless io variable as well as the temporary
    used variables mmio_base and mmio_len in favor to use directly the fb_info
    variables.

    This is a code cleanup only, no runtime change expected.

    Signed-off-by: Florian Tobias Schandinat
    Cc: Scott Fang
    Cc: Joseph Chan
    Cc: Harald Welte
    Cc: Jonathan Corbet
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Florian Tobias Schandinat
     
  • At least for VX800 this initialization is not very good as some parts of
    the register are written with reserved values. This makes the display go
    white in some configurations and not usable until the framebuffer is
    removed. It's better to not initialize it as it allows to use a
    previously (by BIOS) correctly configured display.

    This patch makes some displays work but might cause problems on others.
    This is bad but can not be easily avoided. If this causes some
    regressions it's probably the best to fix it in the 'active' display setup
    code.

    Signed-off-by: Florian Tobias Schandinat
    Cc: Scott Fang
    Cc: Joseph Chan
    Cc: Harald Welte
    Cc: Jonathan Corbet
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Florian Tobias Schandinat
     
  • Remove everything related to video devices from the driver as it did not
    influence the driver operation. This patch does change the userspace
    behaviour as it removes two IOCTLs and one module parameter. But this is
    good as it removes useless stuff and helps the user to figure out the
    options that do affect the driver behaviour (which are still too many).

    Signed-off-by: Florian Tobias Schandinat
    Cc: Scott Fang
    Cc: Joseph Chan
    Cc: Harald Welte
    Cc: Jonathan Corbet
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Florian Tobias Schandinat
     
  • Clean the handling of ioremapped video memory up. The following changes
    were made:

    info->screen_base - viafb_FB_MM
    (VRAM offset calculation) was replaced by
    info->fix.smem_start - viafbinfo->fix.smem_start
    which is essentially the same calculation but done with physical instead
    virtual addresses.

    *->fbmem_virt
    was replaced by
    viafbinfo->screen_base
    This is true for viafbinfo and viafbinfo1 as the par pointers are equal.

    An early initialization of viafbinfo1->fix.smem* was removed as done later
    in viafb_setup_fixinfo.

    This patch highlights that the only usage of the ioremapped video memory
    in the driver is for hardware cursor handling. Even if it has to hold the
    used virtual screen mapped for old-fashioned read/write calls (vs.
    mmap'ed) a lot virtual memory could be saved by only ioremapping on
    demand.

    Code cleanup, no runtime changes expected.

    Signed-off-by: Florian Tobias Schandinat
    Cc: Scott Fang
    Cc: Joseph Chan
    Cc: Harald Welte
    Cc: Jonathan Corbet
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Florian Tobias Schandinat
     
  • Clean the duoview handling up by replacing the varible with the funtion in
    the only place where it is used. This is a code cleanup only, no runtime
    change expected.

    Signed-off-by: Florian Tobias Schandinat
    Cc: Scott Fang
    Cc: Joseph Chan
    Cc: Harald Welte
    Cc: Jonathan Corbet
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Florian Tobias Schandinat
     
  • Remove the mode information from viafbdev.c and uses the one of viamode.c
    instead. This is possible because horizontal and vertical address are the
    same as horizontal and vertical resolution. The reduced blanking modes in
    the table are no problem because they have a higher index than the normal
    modes and therefore always the normal modes are selected just as the old
    behaviour.

    Signed-off-by: Florian Tobias Schandinat
    Cc: Scott Fang
    Cc: Joseph Chan
    Cc: Harald Welte
    Cc: Jonathan Corbet
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Florian Tobias Schandinat
     
  • Remove unneeeded declarations from the header and makes it more
    maintainable by evaluating the array size in the file the array exist in
    and exporting it via variables. This removes the need to keep the array
    size in the header in sync with the real array size.

    Signed-off-by: Florian Tobias Schandinat
    Cc: Scott Fang
    Cc: Joseph Chan
    Cc: Harald Welte
    Cc: Jonathan Corbet
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Florian Tobias Schandinat
     
  • Correct the returned error code for remapping the video framebuffer.
    Introduce error handling for remapping MMIO register address space to
    avoid a NULL pointer dereference. Disable hardware acceleration if
    remapping MMIO register address space failed as those registers are only
    used for hardware acceleration.

    Signed-off-by: Florian Tobias Schandinat
    Cc: Scott Fang
    Cc: Joseph Chan
    Cc: Harald Welte
    Cc: Jonathan Corbet
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Florian Tobias Schandinat
     
  • Move individual start address setting to viafb_set_primary_address and
    viafb_set_secondary_address and make it more flexible to reuse it for
    panning. Using central functions makes it easier to follow HW
    manipulations.

    Remove crt locking as it should be only needed for timing manipulation.
    Move iga_path manipulation to via_pci_probe.

    Remove memset for screen cleaning as it is currently done only for the
    second screen. This is not needed for normal operation but has a little
    chance of causing unwanted display artifacts. This can be fixed later
    more consistent and more efficient (using viafb_fillrect) if needed.

    This is a code clenup, no notable runtime changes expected.

    Signed-off-by: Florian Tobias Schandinat
    Cc: Scott Fang
    Cc: Joseph Chan
    Cc: Harald Welte
    Cc: Jonathan Corbet
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Florian Tobias Schandinat
     
  • Shrink and merge viafb_update_viafb_par. This removes a lot of duplicated
    data in viafb_par. Use the relevant data of fb_info instead. On the way
    it removes an inconsistency in handling a second framebuffer which only
    worked because viafbinfo1->par is modified to point to the same viafb_par
    as viafbinfo->par.

    Code cleanup only, no runtime change expected.

    Signed-off-by: Florian Tobias Schandinat
    Cc: Scott Fang
    Cc: Joseph Chan
    Cc: Harald Welte
    Cc: Jonathan Corbet
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Florian Tobias Schandinat
     
  • Currently the start address is set to an initial value every time
    viafb_setmode is called.

    This is not done consistently along graphic cores and not even the whole
    address but often only parts of it. On top of that it seems useless as
    the real/final address will be set by viafb_set_start_addr a few lines
    later.

    Remove this superfluous initalization to shrink register initalization and
    as a start to decouple primary and secondary display. Code cleanup, no
    notable runtime change expected.

    Signed-off-by: Florian Tobias Schandinat
    Cc: Scott Fang
    Cc: Joseph Chan
    Cc: Harald Welte
    Cc: Jonathan Corbet
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Florian Tobias Schandinat