1. 05 May, 2007 40 commits
    • Sergei Shtylyov's avatar
      aec62xx: fix PIO/DMA setup issues · 826a1b65
      Sergei Shtylyov authored
      Teach the driver's tuneproc() method to do PIO auto-runing properly since it
      treated 5 instead of 255 as auto-tune request, and also passed the mode limit
      of PIO5 to ide_get_best_pio_mode() despite supporting up to PIO4 only.
      
      While at it, also:
      
      - remove the driver's wrong claim about supporting SWDMA modes;
      
      - stop hooking ide_dma_timeout() method as the handler clearly doesn't fit for
        the task...
      Signed-off-by: default avatarSergei Shtylyov <sshtylyov@ru.mvista.com>
      Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      826a1b65
    • Sergei Shtylyov's avatar
      cmd64x: use interrupt status from MRDMODE register (take 2) · 66602c83
      Sergei Shtylyov authored
      Fold the parts of the ide_dma_end() methods identical to __ide_dma_end() into a
      mere call to it.
      Start using faster versions of the ide_dma_end() and ide_dma_test_irq() methods
      for the PCI0646U and newer chips that have the duplicate interrupt status bits
      in the I/O mapped MRDMODE register, determing what methods to use at the driver
      load time. Do some cleanup/renaming in the "old" ide_dma_test_irq() method too.
      Signed-off-by: default avatarSergei Shtylyov <sshtylyov@ru.mvista.com>
      Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      66602c83
    • Sergei Shtylyov's avatar
      cmd64x: procfs code fixes/cleanups (take 2) · 5826b318
      Sergei Shtylyov authored
      Fix several issues with the driver's procfs output:
      
      - when testing if channel is enabled, the code looks at the "simplex" bits, not
        at the real enable bits -- add #define for the primary channel enable bit;
      
      - UltraDMA modes 0, 1, 3 for slave drive reported incorrectly due to using the
        master drive's clock cycle resolution bit.
      
      While at it, also perform the following cleanups:
      
      - don't print extra newline before the first controller's dump;
      
      - correct the chipset names (from CMDxxx to PCI-xxx)
      
      - don't read from the registers which aren't used for dump;
      
      - better align the table column sizes;
      
      - rework UltraDMA mode dump code;
      
      - remove PIO mode dump code that has never been finished;
      
      - remove the duplicate interrupt status (the MRDMODE register bits mirror those
        those in the CFR and ARTTIM23 registers) and fold the dump into single line;
      
      - correct the style of the ?: operators...
      Signed-off-by: default avatarSergei Shtylyov <sshtylyov@ru.mvista.com>
      Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      5826b318
    • Sergei Shtylyov's avatar
      cmd64x: add/fix enablebits (take 2) · 7accbffd
      Sergei Shtylyov authored
      The IDE core looks at the wrong bit when checking if the secondary channel is
      enabled on PCI0646 -- CNTRL register bit 7 is read-ahead disable, bit 3 is the
      correct one.
      Starting with PCI0646U chip, the primary channel can also be enabled/disabled --
      so, add 'enablebits' initializers to each 'ide_pci_device_t' structure, handling
      the original PCI0646 via adding the init_setup() method and clearing the 'reg'
      field there if necessary...
      Signed-off-by: default avatarSergei Shtylyov <sshtylyov@ru.mvista.com>
      Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      7accbffd
    • Sergei Shtylyov's avatar
      cmd64x: interrupt status fixes (take 2) · e51e2528
      Sergei Shtylyov authored
      The driver's ide_dma_test_irq() method was reading the MRDMODE register even on
      PCI0643/6 where it was write-only -- fix this by always reading the "backward-
      compatible" interrupt bits, renaming dma_alt_stat to irq_stat as the interrupt
      status bits are not coupled to DMA.
      In addition, wrong interrupt bit was tested/cleared for the primary channel --
      it's bit 2 in all the chip specs and the driver used bit 1... :-/
      Signed-off-by: default avatarSergei Shtylyov <sshtylyov@ru.mvista.com>
      Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      e51e2528
    • Sergei Shtylyov's avatar
      cmd64x: fix multiword and remove single-word DMA support · 60e7a82f
      Sergei Shtylyov authored
      Fix the multiword DMA and drop the single-word DMA support (which nobody will
      miss, I think).  In order to do it, a number of changes was necessary:
      
      - rename program_drive_counts() to program_cycle_times(), pass to it cycle's
        total/active times instead of the clock counts, and convert them into the
        active/recovery clocks there instead of cmd64x_tune_pio() -- this causes
        quantize_timing() to also move;
      
      - contrarywise, move all the code handling the address setup timing into
        cmd64x_tune_pio(), so that setting MWDMA mode wouldn't change address setup;
      
      - remove from the speedproc() method the  bogus code pretending to set the DMA
        timings by twiddling bits in the BMIDE status register, handle setting MWDMA
        by just calling program_cycle_times(); while at it, improve the style of that
        whole switch statement;
      
      - stop fiddling with the DMA capable bits in the speedproc() method -- they do
        not enable DMA, and are properly dealt with by the dma_host_{on,off} methods;
      
      - don't set hwif->swdma_mask in the init_hwif() method anymore.
      
      In addition to those changes, do the following:
      
      - in cmd64x_tune_pio(), when writing to ARTTIM23 register preserve the interrupt
        status bit, eliminate local_irq_{save|restore}() around this code as there's
        *no* actual race with the interrupt handler, and move cmdprintk() to a more
        fitting place -- after ide_get_best_pio_mode() call;
      
      - make {arttim|drwtim}_regs arrays single-dimensional, indexed with drive->dn;
      
      - rename {setup|recovery}_counts[] into more fitting {setup|recovery}_values[];
      
      - in  the speedproc() method, get rid of the duplicate reads/writes from/to the
        UDIDETCRx registers and of the extra variable used to store the transfer mode
        value after filtering,  use another method of determining master/slave drive,
        and cleanup useless parens;
      
      - beautify cmdprintk() output here and there.
      
      While at it, remove meaningless comment about the driver being used only on
      UltraSPARC and long non-relevant RCS tag. :-)
      Signed-off-by: default avatarSergei Shtylyov <sshtylyov@ru.mvista.com>
      Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      60e7a82f
    • Sergei Shtylyov's avatar
      sl82c105: DMA support code cleanup (take 4) · 688a87d1
      Sergei Shtylyov authored
      Fold the now equivalent code in the ide_dma_check() method into a mere call to
      ide_use_dma().  Make config_for_dma() return non-zero if DMA mode has been set
      and call it from the ide_dma_check() method instead of ide_dma_on().
      Defer writing the DMA timings to the chip registers until DMA is really turned
      on (and do not enable IORDY for DMA).
      Remove unneeded code from the init_hwif() method, improve its overall looks.
      Rename the dma_start(), ide_dma_check(), and ide_dma_lostirq() methods, and
      also use more proper hwif->dma_command, fix printk() and comment in the latter
      one as well.  While at it, cleanup style in several places.
      Signed-off-by: default avatarSergei Shtylyov <sshtylyov@ru.mvista.com>
      Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      688a87d1
    • Sergei Shtylyov's avatar
      sl82c105: rework PIO support (take 2) · e93df705
      Sergei Shtylyov authored
      Get rid of the 'pio_speed' member of 'ide_drive_t' that was only used by this
      driver by storing the PIO mode timings in the 'drive_data' instead -- this
      allows us to greatly  simplify the process of "reloading" of the chip's timing
      register and do it right in sl82c150_dma_off_quietly() and to get rid of two
      extra arguments to config_for_pio() -- which got renamed to sl82c105_tune_pio()
      and now returns a PIO mode selected, with ide_config_drive_speed() call moved
      into the tuneproc() method, now called sl82c105_tune_drive() with the code to
      set drive's 'io_32bit' and 'unmask' flags in its turn moved to its proper place
      in the init_hwif() method.
      Also, while at it, rename get_timing_sl82c105() into get_pio_timings() and get
      rid of the code in it clamping cycle counts to 32 which was both incorrect and
      never executed anyway...
      Signed-off-by: default avatarSergei Shtylyov <sshtylyov@ru.mvista.com>
      Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      e93df705
    • Linus Torvalds's avatar
      Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/drzeus/mmc · 62ea6d80
      Linus Torvalds authored
      * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/drzeus/mmc: (46 commits)
        mmc-omap: Clean up omap set_ios and make MMC_POWER_ON work
        mmc-omap: Fix omap to use MMC_POWER_ON
        mmc-omap: add missing '\n'
        mmc: make tifm_sd_set_dma_data() static
        mmc: remove old card states
        mmc: support unsafe resume of cards
        mmc: separate out reading EXT_CSD
        mmc: break apart switch function
        MMC: Fix handling of low-voltage cards
        MMC: Consolidate voltage definitions
        mmc: add bus handler
        wbsd: check for data opcode earlier
        mmc: Separate out protocol ops
        mmc: Move core functions to subdir
        mmc: deprecate mmc bus topology
        mmc: remove card upon suspend
        mmc: allow suspended block driver to be removed
        mmc: Flush pending detects on host removal
        mmc: Move host and card drivers to subdirs
        mmc: Move queue functions to mmc_block
        ...
      62ea6d80
    • Linus Torvalds's avatar
      Merge branch 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mfasheh/ocfs2 · fa24aa56
      Linus Torvalds authored
      * 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mfasheh/ocfs2:
        ocfs2: Force use of GFP_NOFS in ocfs2_write()
        ocfs2: fix sparse warnings in fs/ocfs2/cluster
        ocfs2: fix sparse warnings in fs/ocfs2/dlm
        ocfs2: fix sparse warnings in fs/ocfs2
        [PATCH] Copy i_flags to ocfs2 inode flags on write
        [PATCH] ocfs2: use __set_current_state()
        ocfs2: Wrap access of directory allocations with ip_alloc_sem.
        [PATCH] fs/ocfs2/: make 3 functions static
        ocfs2: Implement compat_ioctl()
      fa24aa56
    • Linus Torvalds's avatar
      iomap: make the default iomap functions fail softer · 6cbf0c70
      Linus Torvalds authored
      We used to BUG_ON() for a badly mapped IO port, which is certainly
      correct, but actually made it harder to debug the case where the ATA
      drivers had incorrectly mapped a nonconnected ATA port.
      
      So make badly mapped ports trigger a WARN_ON(), and throw the IO away
      instead (and return all ones for reads).  For things like broken driver
      initialization - which is the most likely cause anyway - that should
      mean that the machine comes up and is usable (at least that was the case
      for the ATA breakage that triggered this patch).
      
      It tends to be a whole lot easier to do a "dmesg" on a working machine
      than to try to capture logs off a dead one.
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      6cbf0c70
    • Linus Torvalds's avatar
      Merge git://git.linux-nfs.org/pub/linux/nfs-2.6 · 4d470070
      Linus Torvalds authored
      * git://git.linux-nfs.org/pub/linux/nfs-2.6: (28 commits)
        NFS: Fix a compile glitch on 64-bit systems
        NFS: Clean up nfs_create_request comments
        spkm3: initialize hash
        spkm3: remove bad kfree, unnecessary export
        spkm3: fix spkm3's use of hmac
        NFS4: invalidate cached acl on setacl
        NFS: Fix directory caching problem - with test case and patch.
        NFS: Set meaningful value for fattr->time_start in readdirplus results.
        NFS: Added support to turn off the NFSv3 READDIRPLUS RPC.
        SUNRPC: RPC client should retry with different versions of rpcbind
        SUNRPC: remove old portmapper
        NFS: switch NFSROOT to use new rpcbind client
        SUNRPC: switch the RPC server to use the new rpcbind registration API
        SUNRPC: switch socket-based RPC transports to use rpcbind
        SUNRPC: introduce rpcbind: replacement for in-kernel portmapper
        SUNRPC: Eliminate side effects from rpc_malloc
        SUNRPC: RPC buffer size estimates are too large
        NLM: Shrink the maximum request size of NLM4 requests
        NFS: Use pgoff_t in structures and functions that pass page cache offsets
        NFS: Clean up nfs_sync_mapping_wait()
        ...
      4d470070
    • Linus Torvalds's avatar
      Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 · 7e20ef03
      Linus Torvalds authored
      * master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6: (49 commits)
        [SCTP]: Set assoc_id correctly during INIT collision.
        [SCTP]: Re-order SCTP initializations to avoid race with sctp_rcv()
        [SCTP]: Fix the SO_REUSEADDR handling to be similar to TCP.
        [SCTP]: Verify all destination ports in sctp_connectx.
        [XFRM] SPD info TLV aggregation
        [XFRM] SAD info TLV aggregationx
        [AF_RXRPC]: Sort out MTU handling.
        [AF_IUCV/IUCV] : Add missing section annotations
        [AF_IUCV]: Implementation of a skb backlog queue
        [NETLINK]: Remove bogus BUG_ON
        [IPV6]: Some cleanups in include/net/ipv6.h
        [TCP]: zero out rx_opt in tcp_disconnect()
        [BNX2]: Fix TSO problem with small MSS.
        [NET]: Rework dev_base via list_head (v3)
        [TCP] Highspeed: Limited slow-start is nowadays in tcp_slow_start
        [BNX2]: Update version and reldate.
        [BNX2]: Print bus information for PCIE devices.
        [BNX2]: Add 1-shot MSI handler for 5709.
        [BNX2]: Restructure PHY event handling.
        [BNX2]: Add indirect spinlock.
        ...
      7e20ef03
    • Linus Torvalds's avatar
      Merge branch 'for-linus' of master.kernel.org:/pub/scm/linux/kernel/git/dtor/input · a3d52136
      Linus Torvalds authored
      * 'for-linus' of master.kernel.org:/pub/scm/linux/kernel/git/dtor/input: (65 commits)
        Input: gpio_keys - add support for switches (EV_SW)
        Input: cobalt_btns - convert to use polldev library
        Input: add skeleton for simple polled devices
        Input: update some documentation
        Input: wistron - fix typo in keymap for Acer TM610
        Input: add input_set_capability() helper
        Input: i8042 - add Fujitsu touchscreen/touchpad PNP IDs
        Input: i8042 - add Panasonic CF-29 to nomux list
        Input: lifebook - split into 2 devices
        Input: lifebook - add signature of Panasonic CF-29
        Input: lifebook - activate 6-byte protocol on select models
        Input: lifebook - work properly on Panasonic CF-18
        Input: cobalt buttons - separate device and driver registration
        Input: ati_remote - make button repeat sensitivity configurable
        Input: pxa27x - do not use deprecated SA_INTERRUPT flag
        Input: ucb1400 - make delays configurable
        Input: misc devices - switch to using input_dev->dev.parent
        Input: joysticks - switch to using input_dev->dev.parent
        Input: touchscreens - switch to using input_dev->dev.parent
        Input: mice - switch to using input_dev->dev.parent
        ...
      
      Fixed up conflicts with core device model removal of "struct subsystem" manually.
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      a3d52136
    • Linus Torvalds's avatar
      Merge master.kernel.org:/pub/scm/linux/kernel/git/gregkh/driver-2.6 · 5b339915
      Linus Torvalds authored
      * master.kernel.org:/pub/scm/linux/kernel/git/gregkh/driver-2.6:
        remove "struct subsystem" as it is no longer needed
        sysfs: printk format warning
        DOC: Fix wrong identifier name in Documentation/driver-model/devres.txt
        platform: reorder platform_device_del
        Driver core: fix show_uevent from taking up way too much stack
      5b339915
    • Linus Torvalds's avatar
      Merge master.kernel.org:/pub/scm/linux/kernel/git/gregkh/pci-2.6 · 89661ada
      Linus Torvalds authored
      * master.kernel.org:/pub/scm/linux/kernel/git/gregkh/pci-2.6: (59 commits)
        PCI: Free resource files in error path of pci_create_sysfs_dev_files()
        pci-quirks: disable MSI on RS400-200 and RS480
        PCI hotplug: Use menuconfig objects
        PCI: ZT5550 CPCI Hotplug driver fix
        PCI: rpaphp: Remove semaphores
        PCI: rpaphp: Ensure more pcibios_add/pcibios_remove symmetry
        PCI: rpaphp: Use pcibios_remove_pci_devices() symmetrically
        PCI: rpaphp: Document is_php_dn()
        PCI: rpaphp: Document find_php_slot()
        PCI: rpaphp: Rename rpaphp_register_pci_slot() to rpaphp_enable_slot()
        PCI: rpaphp: refactor tail call to rpaphp_register_slot()
        PCI: rpaphp: remove rpaphp_set_attention_status()
        PCI: rpaphp: remove print_slot_pci_funcs()
        PCI: rpaphp: Remove setup_pci_slot()
        PCI: rpaphp: remove a call that does nothing but a pointer lookup
        PCI: rpaphp: Remove another wrappered function
        PCI: rpaphp: Remve another call that is a wrapper
        PCI: rpaphp: remove a function that does nothing but wrap debug printks
        PCI: rpaphp: Remove un-needed goto
        PCI: rpaphp: Fix a memleak; slot->location string was never freed
        ...
      89661ada
    • Linus Torvalds's avatar
      Merge master.kernel.org:/pub/scm/linux/kernel/git/herbert/crypto-2.6 · 6adae5d9
      Linus Torvalds authored
      * master.kernel.org:/pub/scm/linux/kernel/git/herbert/crypto-2.6:
        [CRYPTO] padlock: Remove pointless padlock module
        [CRYPTO] api: Add ablkcipher_request_set_tfm
        [CRYPTO] cryptd: Add software async crypto daemon
        [CRYPTO] api: Do not remove users unless new algorithm matches
        [CRYPTO] cryptomgr: Fix parsing of nested templates 
        [CRYPTO] api: Add async blkcipher type
        [CRYPTO] templates: Pass type/mask when creating instances
        [CRYPTO] tcrypt: Use async blkcipher interface
        [CRYPTO] api: Add async block cipher interface
        [CRYPTO] api: Proc functions should be marked as unused
      6adae5d9
    • Geert Uytterhoeven's avatar
      ps3av: Use __func__ instead of __FUNCTION__ · 253f04e7
      Geert Uytterhoeven authored
      ps3av: Replace GNU extension `__FUNCTION__' by C99 `__func__'
      Signed-off-by: default avatarGeert Uytterhoeven <Geert.Uytterhoeven@sonycom.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      253f04e7
    • Geert Uytterhoeven's avatar
      ps3fb: Use __func__ instead of __FUNCTION__ · d778c9a4
      Geert Uytterhoeven authored
      ps3fb: Replace GNU extension `__FUNCTION__' by C99 `__func__'
      Signed-off-by: default avatarGeert Uytterhoeven <Geert.Uytterhoeven@sonycom.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      d778c9a4
    • Masashi Kimoto's avatar
      ps3: Make `ps3videomode -v 0 (auto mode) work again · 64072901
      Masashi Kimoto authored
      ps3: Make `ps3videomode -v 0' (auto mode) work again
      Signed-off-by: default avatarGeert Uytterhoeven <Geert.Uytterhoeven@sonycom.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      64072901
    • Geert Uytterhoeven's avatar
      ps3av: misc updates · fffe52e8
      Geert Uytterhoeven authored
      ps3av:
        - Move the definition of struct ps3av to ps3av.c, as it's locally used only.
        - Kill ps3av.sem, use the existing ps3av.mutex instead.
        - Make the 512-byte buffer in ps3av_do_pkt() static to reduce stack usage.
          Its use is protected by a semaphore anyway.
      Signed-off-by: default avatarGeert Uytterhoeven <Geert.Uytterhoeven@sonycom.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      fffe52e8
    • Geert Uytterhoeven's avatar
      ps3fb: kill superfluous zero initializations · bd685ac8
      Geert Uytterhoeven authored
      ps3fb: kill superfluous zero initializations
      Signed-off-by: default avatarGeert Uytterhoeven <Geert.Uytterhoeven@sonycom.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      bd685ac8
    • Geert Uytterhoeven's avatar
      ps3av: thread updates · 5caf5db8
      Geert Uytterhoeven authored
      ps3av: Replace the kernel_thread and the ping pong semaphores by a singlethread
      workqueue and a completion.
      Signed-off-by: default avatarGeert Uytterhoeven <Geert.Uytterhoeven@sonycom.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      5caf5db8
    • Geert Uytterhoeven's avatar
      ps3fb: atomic fixes · eca28743
      Geert Uytterhoeven authored
      ps3fb: Use atomic_dec_if_positive() instead of bogus atomic_read()/atomic_dec()
      combinations
      Signed-off-by: default avatarGeert Uytterhoeven <Geert.Uytterhoeven@sonycom.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      eca28743
    • Geert Uytterhoeven's avatar
      ps3fb: thread updates · 1c0c8461
      Geert Uytterhoeven authored
      ps3fb: Replace the kernel_thread and the semaphore by a proper kthread, which
      is simply woken up when the screen must be updated
      Signed-off-by: default avatarGeert Uytterhoeven <Geert.Uytterhoeven@sonycom.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      1c0c8461
    • Geert Uytterhoeven's avatar
      Convert non-highmem kmap_atomic() to static inline function · 254f9c5c
      Geert Uytterhoeven authored
      Convert kmap_atomic() in the non-highmem case from a macro to a static
      inline function, for better type-checking and the ability to pass void
      pointers instead of struct page pointers.
      Signed-off-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      254f9c5c
    • Geert Uytterhoeven's avatar
      m68k: export csum_partial_copy_from_user · f5456e04
      Geert Uytterhoeven authored
      net/rxrpc/af-rxrpc.ko needs csum_partial_copy_from_user
      Signed-off-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      f5456e04
    • Geert Uytterhoeven's avatar
      m68k: kill skb_copy_from_linear_data compiler warnings · cfa08bb5
      Geert Uytterhoeven authored
      The recent conversion from `memcpy' to `skb_copy_from_linear_data' removed a
      few casts, which were needed to silence compiler warnings. Re-add them.
      Signed-off-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      cfa08bb5
    • Geert Uytterhoeven's avatar
      Amiga Zorro bus: kill resource_size_t warnings · 31817576
      Geert Uytterhoeven authored
      Kill resource_size_t warnings by casting resource_size_t to unsigned long when
      formatting Zorro bus resources, as they are always 32-bit.
      Signed-off-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      31817576
    • Finn Thain's avatar
      SONIC interrupt handling · f4d86754
      Finn Thain authored
      Install the built-in macsonic interrupt handler on both IRQs when using
      via_alt_mapping. Otherwise the rare interrupt that still comes from the
      nubus slot will wedge the nubus.
      
      $ cat /proc/interrupts
      auto       2:      89176 via2
      auto       3:     744367 sonic
      auto       4:          0 scc
      auto       6:     318363 via1
      auto       7:          0 NMI
      mac        9:     119413 framebuffer vbl
      mac       10:       1971 ADB
      mac       14:     198517 timer
      mac       17:      89104 nubus
      mac       19:         72 Mac ESP SCSI
      mac       56:        629 sonic
      mac       62:    1142593 ide0
      
      Version 1 of this patch had a bug where a nubus sonic card would register
      two interrupt handlers. Only a built-in sonic needs both.
      
      Versions 2 and 3 needed some cleanups, as Raylynn Knight and Christoph
      Hellwig pointed out (thanks).
      Signed-off-by: default avatarFinn Thain <fthain@telegraphics.com.au>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      f4d86754
    • Finn Thain's avatar
      SONIC: small fix and cleanup · d74472f0
      Finn Thain authored
      Fix a potential problem in the timeout handling: don't free the DMA buffers
      before resetting the chip.
      
      Also a trivial cleanup. Bring macsonic and jazzsonic into sync.
      Signed-off-by: default avatarFinn Thain <fthain@telegraphics.com.au>
      Signed-off-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      d74472f0
    • Finn Thain's avatar
      m68k: macmace fixes · 8b6aaab8
      Finn Thain authored
      Fix a race condition in the transmit code, where the dma interrupt could update
      the free tx buffer count concurrently and wedge the tx queue.
      
      Fix the misuse of the rx frame status and rx frame length registers: no more
      "fifo overrun" errors caused by the OFLOW bit being tested in the frame length
      register (instead of the status register), and no more missed packets due to
      incorrect length taken from status register (instead of the frame length
      register).
      
      Fix a panic (skb_over_panic BUG) caused by allocating and then copying an
      incoming packet while the packet length register was changing.
      
      Cut-and-paste the reset code from the powermac mace driver (mace.c), so the NIC
      functions when MacOS does not initialise it (important for anyone wanting to
      use the Emile boot loader).
      
      Cut-and-paste the error counting and timeout recovery code from mace.c.
      
      Fix over allocation of rx buffer memory (it's page order, not page count).
      
      Converted to driver model.
      
      Converted to DMA API.
      
      Since I've run out of ways to make it fail, and since it performs well now,
      promote the driver from EXPERIMENTAL status. Tested on both quadra 840av and
      660av.
      Signed-off-by: default avatarFinn Thain <fthain@telegraphics.com.au>
      Signed-off-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      8b6aaab8
    • Finn Thain's avatar
      CUDA ADB fixes · 0251c38c
      Finn Thain authored
      Fix the flakiness in the CUDA ADB driver on m68k macs (keypresses getting
      wedged down or ADB just going AWOL altogether).
      
      The only IRQ used by this driver is the VIA shift register IRQ. The PowerMac
      conditional code disables the other VIA IRQ sources, so don't mess with the
      other IRQ flags in the common code -- m68k macs need them.
      
      When polling, don't disable local interrupts when we only need to disable the
      CUDA interrupt.
      
      Unless polling, don't clear the shift register IRQ flag. On m68k macs this
      creates a race that often breaks CUDA ADB.
      
      Tested on Quadra 840av and LC630 (both m68k); also Beige G3 (powerpc).
      Signed-off-by: default avatarFinn Thain <fthain@telegraphics.com.au>
      Signed-off-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      0251c38c
    • Finn Thain's avatar
      m68k: Mac II ADB fixes · d95fd5fc
      Finn Thain authored
      Fix a crash caused by requests placed in the queue with the completed flag
      already set. This lead to some ADB_SYNC requests returning early and their
      request structs being popped off the stack while still queued. Stack corruption
      ensued or an invalid request callback pointer was invoked or both. Eliminate
      macii_retransmit() and its buggy implementation of macii_write(). Have
      macii_queue_poll() fully initialise the request queues.
      
      Fix a bug in macii_queue_poll() where the last_req pointer was not being set.
      This caused some requests to leave the queue before being completed (and would
      also corrupt the stack under certain conditions).
      
      Fix a race in macii_start that could set the state machine to "reading" while
      current_req was null.
      
      No longer send poll commands with the ADBREQ_REPLY flag -- doing that caused
      the replies to be stored in the request buffer where they were forgotten
      about.
      
      Don't autopoll by continuously sending new Talk commands. Get the controller to
      do that for us. This reduces the ADB interrupt rate on an idle bus to about 5
      per second. Only autopoll the devices that were probed.
      
      Explicitly clear the interrupt flag when polling.
      
      Use disable_irq rather than local_irq_save when polling.
      
      Remove excess local_irq_save/restore pairs.
      
      Improve bus timeout and service request detection.
      
      Remove unused code (last_reply, adb_dir etc) and unneeded code (prefix_len,
      first_byte etc).
      
      Change TIP and TACK to their correct names on this ADB controller (ST_EVEN and
      ST_ODD).
      
      Add some commentry.
      
      Add a generous quantity of sanity checks (BUG_ONs).
      
      Let m68k macs use the adb_sync boot param too.
      
      Tested on Mac II, Mac IIci, Quadra 650, Quadra 700 etc.
      Signed-off-by: default avatarFinn Thain <fthain@telegraphics.com.au>
      Signed-off-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      d95fd5fc
    • Finn Thain's avatar
      m68k: Mac IRQ cleanup · 217f6710
      Finn Thain authored
      There are no slow IRQs on Macs since Roman Zippel's IRQ reorganisation that
      went into 2.6.16 and removed mac_irq_list[] and the do_mac_irq_list()
      dispatcher. (They were implemented in do_mac_irq_list() by lowering the IPL.)
      Hence there's no more use for mutual exclusion in the Mac interrupt
      dispatchers. Remove it.
      Signed-off-by: default avatarFinn Thain <fthain@telegraphics.com.au>
      Signed-off-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      217f6710
    • Finn Thain's avatar
      m68k: Mac nubus IRQ fixes (plan E) · cd713ddc
      Finn Thain authored
      Some Macs lack a slot interrupt enable register. So the existing code makes
      disabled and unregistered slot IRQ lines outputs set high. This seems to work
      on quadras, but does not work on genuine VIAs (perhaps the card still succeeds
      in pulling the line low, or perhaps because this increases the settle time on
      the port A input, meaning that the CA1 IRQ could fire before the slot line
      reads active).
      
      Because of this, the nubus_active flags were used to mask IRQs, which is
      actually worse than the problem it tries to solve. Any interrupt masked by
      nubus_active will remain asserted and prevent further transitions on CA1. And
      so the nubus gets wedged regardless of hardware (emulated VIA ASIC, real VIA
      chip or RBV).
      
      The best solution to this hardware limitation of genuine VIAs is to disable the
      umbrella SLOTS IRQ when disabling a slot on those machines. Unfortunately, this
      means all slot IRQs get disabled when any slot IRQ is disabled. But it is only
      a problem when there's more than 1 device using nubus interrupts.
      
      Another potential problem for genuine VIAs is an unregistered nubus IRQ.
      Eventually it will be possible to enable the CA1 interrupt by installing its
      handler only _after_ all nubus drivers have loaded but _before_ the kernel
      needs them, at which time this last problem can be fixed. For now it can be
      worked around:
      
        - disable MacOS extensions
        - don't boot MacOS (use the Emile bootloader instead)
        - get the bootloaders to disable ROM drivers (Penguin does this for video
          cards already, don't know about Emile)
        - physically remove unsupported cards
      Signed-off-by: default avatarFinn Thain <fthain@telegraphics.com.au>
      Signed-off-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      cd713ddc
    • Finn Thain's avatar
      m68k: Mac IRQ prep · 67dfb153
      Finn Thain authored
      Make sure that there are no slot IRQs asserted before leaving the nubus
      handler. If there are and we don't then the nubus gets wedged because this
      prevents a CA1 transition, which means no more nubus IRQs.
      
      Make the interrupt dispatch loops terminate sooner.
      
      Explicitly initialise the VIA latches to make the code more easily understood.
      
      Also some cleanups.
      Signed-off-by: default avatarFinn Thain <fthain@telegraphics.com.au>
      Signed-off-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      67dfb153
    • Finn Thain's avatar
      m68k: reverse Mac IRQ damage · 647b804c
      Finn Thain authored
      Reverse the last of a monumental brown-paper-bag commit that went into the 2.3
      kernel.
      Signed-off-by: default avatarFinn Thain <fthain@telegraphics.com.au>
      Signed-off-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      647b804c
    • Finn Thain's avatar
      m68k: Mac DP8390 update · 2964db0f
      Finn Thain authored
      Fix the support for C/NET nubus ethernet cards etc. Sync up the DP8390 driver
      with the latest code in the mac68k repo.
      Signed-off-by: default avatarFinn Thain <fthain@telegraphics.com.au>
      Signed-off-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      2964db0f
    • Finn Thain's avatar
      NuBus header update · f8779588
      Finn Thain authored
      Sync the nubus defines with the latest code in the mac68k repo. Some of these
      are needed for DP8390 driver update in the next patch.
      Signed-off-by: default avatarFinn Thain <fthain@telegraphics.com.au>
      Signed-off-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      f8779588