1. 10 Dec, 2015 8 commits
    • Takashi Iwai's avatar
      ALSA: hda - Move audio component accesses to hdac_i915.c · e2dc7d7d
      Takashi Iwai authored
      A couple of i915_audio_component ops have been added and accessed
      directly from patch_hdmi.c.  Ideally all these should be factored out
      into hdac_i915.c.
      
      This patch does it, adds two new helper functions for setting N/CTS
      and fetching ELD bytes.  One bonus is that the hackish widget vs port
      mapping is also moved to hdac_i915.c, so that it can be fixed /
      enhanced more cleanly.
      Reviewed-by: default avatarVinod Koul <vinod.koul@intel.com>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      e2dc7d7d
    • Takashi Iwai's avatar
      ALSA: hda - Use component ops for i915 HDMI/DP audio jack handling · 788d441a
      Takashi Iwai authored
      Since we have a new audio component ops to fetch the current ELD and
      state now, we can reduce the usage of unsol event of HDMI/DP pins.
      The unsol event isn't only unreliable, but it also needs the power
      up/down of the codec and link at each time, which is a significant
      power and time loss.
      
      In this patch, the jack creation and unsol/jack event handling are
      modified to use the audio component for the dedicated Intel chips.
      
      The jack handling got slightly more codes than a simple usage of
      hda_jack layer since we need to deal directly with snd_jack object;
      the hda_jack layer is basically designed for the pin sense read and
      unsol events, both of which aren't used any longer in our case.
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      788d441a
    • Takashi Iwai's avatar
      Merge tag 'drm-i915-get-eld' into topic/hdmi-jack · e826d22e
      Takashi Iwai authored
      Merge the latest i915 audio component changes for HDMI/DP get_eld ops.
      This is actually used in HD-audio side in this branch.
      e826d22e
    • Takashi Iwai's avatar
      ALSA: hda - Fix superfluous HDMI jack repoll · 9a5e5234
      Takashi Iwai authored
      The recent commit [e90247f9: ALSA: hda - Split ELD update code
      from hdmi_present_sense()] rewrote the HDMI jack handling code, but a
      slight behavior change sneaked in unexpectedly.  When the jack isn't
      connected, it tries repoll unnecessarily.
      
      This patch addresses the flaw, to the right behavior as before.
      
      Fixes: e90247f9 ('ALSA: hda - Split ELD update code from hdmi_present_sense()')
      Reported-and-tested-by: default avatarDavid Henningsson <david.henningsson@canonical.com>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      9a5e5234
    • Takashi Iwai's avatar
      drm/i915: Add reverse mapping between port and intel_encoder · 0bdf5a05
      Takashi Iwai authored
      This patch adds a reverse mapping from a digital port number to
      intel_encoder object containing the corresponding intel_digital_port.
      It simplifies the query of the encoder a lot.
      
      Note that, even if it's a valid digital port, the dig_port_map[] might
      point still to NULL -- usually it implies a DP MST port.  Due to this
      fact, the NULL check in each place has no WARN_ON() and just skips the
      port.  Once when the situation changes in future, we might introduce
      WARN_ON() for a more strict check.
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      0bdf5a05
    • Takashi Iwai's avatar
      drm/i915: Add get_eld audio component · cae666ce
      Takashi Iwai authored
      Implement a new i915_audio_component_ops, get_eld().  It's called by
      the audio driver to fetch the current audio status and ELD of the
      given HDMI/DP port.  It returns the size of expected ELD bytes if it's
      valid, zero if no valid ELD is found, or a negative error code.  The
      current state of audio on/off is stored in the given pointer, too.
      
      Note that the returned size isn't limited to the given max bytes.  If
      the size is greater than the max bytes, it means that only a part of
      ELD has been copied back.
      
      For achieving this implementation, a new field audio_connector is
      added to struct intel_digital_port.  It points to the connector
      assigned to the given digital port.  It's set/reset at each audio
      enable/disable call in intel_audio.c, and protected with av_mutex.
      Reviewed-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      cae666ce
    • Takashi Iwai's avatar
      ALSA: hda - Allow i915 binding later in codec driver · 55913110
      Takashi Iwai authored
      Due to the recent change, HDA controller driver for Intel PCH tries to
      bind i915 audio component always at the probe time no matter whether
      HDMI/DP codec is found.  This is, however, superflulous for old
      chipsets (e.g. on IVB) where they don't have always the HDMI/DP codecs
      but  often have only a discrete GPU instead.
      
      For the newer chipsets, we need already the i915 binding from the
      beginning due to power well control.  Meanwhile, for older chipsets
      where we don't need power well, we don't need the i915 binding at the
      controller level.
      
      This patch removes again the i915 binding in the HDA controller driver
      for old Intel PCHs, but adds the binding in HDMI/DP codec driver
      instead.  This allows still the use of the direct notification from
      the graphics driver while we can avoid the unnecessary load of i915
      driver for machines only with another GPU.
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      55913110
    • Takashi Iwai's avatar
      ALSA: hda - Optimize audio component check in patch_hdmi.c · f4e3040b
      Takashi Iwai authored
      The audio component is enabled only when CONFIG_SND_HDA_I915 is set.
      Give a dummy macro for allowing the compiler optimize out the relevant
      codes when this Kconfig isn't set.
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      f4e3040b
  2. 09 Dec, 2015 3 commits
    • Arnd Bergmann's avatar
      sound/oss: remove VIRT_TO_BUS dependency · c83d1b37
      Arnd Bergmann authored
      The OSS sound drivers used to rely on virt_to_bus(), but don't any more,
      so we can remove the Kconfig dependency.
      
      As a lot of architectures don't provide VIRT_TO_BUS any more, removing
      the dependency in sounds/oss/ would make the deprecated drivers appear
      there, which we probably don't want. Instead I'm replacing the
      simple dependency with 'VIRT_TO_BUS || RPC || NETWINDER' so we can
      still build these sound drivers for the platforms that need them,
      but don't change anything on other architectures.
      
      As a follow-up, we can remove the virt_to_bus() implementation
      and Kconfig symbol in the ARM architecture.
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      c83d1b37
    • Takashi Iwai's avatar
      ALSA: hda - Don't try to bind i915 unless CONFIG_SND_HDA_I915 is set · fbaf9f9f
      Takashi Iwai authored
      snd-hda-intel driver tries to bind with i915 audio component always
      when AZX_DCAPS_I915_POWERWELL is set in the driver caps.  This was
      mostly OK in the past, as the flag was applied only to a limited set
      of devices, namely, Haswell and Broadwell.  On these machines, i915
      graphics is almost mandatory as long as HDMI/DP is concerned.
      
      Recently the application of i915 binding was widened to more Intel
      chips.  On these chips, the chance of a kernel without i915 graphics
      is much higher, and such user would hit an error like:
      
       snd_hda_intel 0000:00:1b.0: failed to add i915 component master (-19)
      
      Although the error itself is harmless, it's certainly superfluous even
      to try binding with i915, if we already know that there isn't any.
      
      This patch fixes it by simply defining AZX_DCAPS_I915_POWERWELL as 0
      in the case without i915.  Then all codes referring to this flag will
      be optimized out by the compiler.
      
      Fixes: 6603249d ('ALSA: hda - Enable audio component for old Intel PCH devices')
      Reported-by: default avatarkernel test robot <ying.huang@linux.intel.com>
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      fbaf9f9f
    • Takashi Iwai's avatar
      ALSA: hda - Less grumbling about lack of i915 binding · 6ee8eeb4
      Takashi Iwai authored
      The recent commit [6603249d: ALSA: hda - Enable audio component
      for old Intel PCH devices] enabled the i915 binding for HDMI/DP on old
      Intel PCHs.  But many boards are without HDMI/DP, and they actually
      don't need i915 binding, and yet the driver has a check of i915
      binding and complains like
      	Haswell must be built with CONFIG_SND_HDA_I915
      This error is false-positive, and it should be put only for HSW/BDW,
      instead of all devices that may be bound with i915.
      
      This patch fixes the condition to check, as well as rephrasing the
      message specific to HSW/BDW HDMI/DP.
      
      Fixes: 6603249d ('ALSA: hda - Enable audio component for old Intel PCH devices')
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      6ee8eeb4
  3. 08 Dec, 2015 4 commits
    • Takashi Iwai's avatar
      ALSA: hda - Implement loopback control switch for Realtek and other codecs · e7fdd527
      Takashi Iwai authored
      Many codecs, typically found on Realtek codecs, have the analog
      loopback path merged to the secondary input of the middle of the
      output paths.  Currently, we don't offer the dynamic switching in such
      configuration but let each loopback path mute by itself.
      
      This should work well in theory, but in reality, we often see that
      such a dead loopback path causes some background noises even if all
      the elements get muted.  Such a problem has been fixed by adding the
      quirk accordingly to disable aamix, and it's the right fix, per se.
      The only problem is that it's not so trivial to achieve it; user needs
      to pass a hint string via patch module option or sysfs.
      
      This patch gives a bit improvement on the situation: it adds "Loopback
      Mixing" control element for such codecs like other codecs (e.g. IDT or
      VIA codecs) with the individual loopback paths.  User can turn on/off
      the loopback path simply via a mixer app.
      
      For keeping the compatibility, the loopback is still enabled on these
      codecs.  But user can try to turn it off if experiencing a suspicious
      background or click noise on the fly, then build a static fixup later
      once after the problem is addressed.
      
      Other than the addition of the loopback enable/disablement control,
      there should be no changes.
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      e7fdd527
    • Takashi Iwai's avatar
      ALSA: hda - Make snd_hda_parse_nid_path() local · c4a58c30
      Takashi Iwai authored
      An exported function snd_hda_parse_nid_path() is used only inside
      hda_generic.c.  Let's make it a static local function for a better
      code optimization.
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      c4a58c30
    • Takashi Iwai's avatar
      ALSA: hda - Remove unused snd_hda_get_nid_path() · 1e73bf78
      Takashi Iwai authored
      An exported helper function snd_hda_get_nid_path() is nowhere used.
      Let's remove it.
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      1e73bf78
    • Dave Airlie's avatar
      Back merge tag 'v4.4-rc4' into drm-next · e876b41a
      Dave Airlie authored
      We've picked up a few conflicts and it would be nice
      to resolve them before we move onwards.
      e876b41a
  4. 07 Dec, 2015 2 commits
  5. 06 Dec, 2015 10 commits
    • Linus Torvalds's avatar
      Linux 4.4-rc4 · 527e9316
      Linus Torvalds authored
      527e9316
    • James Simmons's avatar
      staging/lustre: remove IOC_LIBCFS_PING_TEST ioctl · d035e336
      James Simmons authored
      The ioctl IOC_LIBCFS_PING_TEST has not been used in ages.  The recent
      nidstring changes which moved all the nidstring operations from libcfs
      to the LNet layer but this ioctl code was still using an nidstring
      operation that was causing a circular dependency loop between libcfs and
      LNet.
      Signed-off-by: default avatarJames Simmons <jsimmons@infradead.org>
      Signed-off-by: default avatarOleg Drokin <green@linuxhacker.ru>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      d035e336
    • Linus Torvalds's avatar
      Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs · d8cd93ea
      Linus Torvalds authored
      Pull vfs fixes from Al Viro:
       "A couple of fixes (-stable fodder) + dead code removal after the
        overlayfs fix.
      
        I agree that it's better to separate from the fix part to make
        backporting easier, but IMO it's not worth delaying said dead code
        removal until the next window"
      
      * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
        Don't reset ->total_link_count on nested calls of vfs_path_lookup()
        ovl: get rid of the dead code left from broken (and disabled) optimizations
        ovl: fix permission checking for setattr
      d8cd93ea
    • Al Viro's avatar
      Don't reset ->total_link_count on nested calls of vfs_path_lookup() · 2788cc47
      Al Viro authored
      we already zero it on outermost set_nameidata(), so initialization in
      path_init() is pointless and wrong.  The same DoS exists on pre-4.2
      kernels, but there a slightly different fix will be needed.
      
      Cc: stable@vger.kernel.org # v4.2
      Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
      2788cc47
    • Al Viro's avatar
    • Miklos Szeredi's avatar
      ovl: fix permission checking for setattr · acff81ec
      Miklos Szeredi authored
      [Al Viro] The bug is in being too enthusiastic about optimizing ->setattr()
      away - instead of "copy verbatim with metadata" + "chmod/chown/utimes"
      (with the former being always safe and the latter failing in case of
      insufficient permissions) it tries to combine these two.  Note that copyup
      itself will have to do ->setattr() anyway; _that_ is where the elevated
      capabilities are right.  Having these two ->setattr() (one to set verbatim
      copy of metadata, another to do what overlayfs ->setattr() had been asked
      to do in the first place) combined is where it breaks.
      Signed-off-by: default avatarMiklos Szeredi <miklos@szeredi.hu>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
      acff81ec
    • Linus Torvalds's avatar
      Merge branch 'sched-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · fb7b26e4
      Linus Torvalds authored
      Pull scheduler fixes from Thomas Gleixner:
       "This updates contains the following changes:
      
         - Fix a signal handling regression in the bit wait functions.
      
         - Avoid false positive warnings in the wakeup path.
      
         - Initialize the scheduler root domain properly.
      
         - Handle gtime calculations in proc/$PID/stat proper.
      
         - Add more documentation for the barriers in try_to_wake_up().
      
         - Fix a subtle race in try_to_wake_up() which might cause a task to
           be scheduled on two cpus
      
         - Compile static helper function only when it is used"
      
      * 'sched-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        sched/core: Fix an SMP ordering race in try_to_wake_up() vs. schedule()
        sched/core: Better document the try_to_wake_up() barriers
        sched/cputime: Fix invalid gtime in proc
        sched/core: Clear the root_domain cpumasks in init_rootdomain()
        sched/core: Remove false-positive warning from wake_up_process()
        sched/wait: Fix signal handling in bit wait helpers
        sched/rt: Hide the push_irq_work_func() declaration
      fb7b26e4
    • Linus Torvalds's avatar
      Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 69d2ca60
      Linus Torvalds authored
      Pull x86 fixes from Thoma Gleixner:
       "Another round of fixes for x86:
      
         - Move the initialization of the microcode driver to late_initcall to
           make sure everything that init function needs is available.
      
         - Make sure that lockdep knows about interrupts being off in the
           entry code before calling into c-code.
      
         - Undo the cpu hotplug init delay regression.
      
         - Use the proper conditionals in the mpx instruction decoder.
      
         - Fixup restart_syscall for x32 tasks.
      
         - Fix the hugepage regression on PAE kernels which was introduced
           with the latest PAT changes"
      
      * 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        x86/signal: Fix restart_syscall number for x32 tasks
        x86/mpx: Fix instruction decoder condition
        x86/mm: Fix regression with huge pages on PAE
        x86 smpboot: Re-enable init_udelay=0 by default on modern CPUs
        x86/entry/64: Fix irqflag tracing wrt context tracking
        x86/microcode: Initialize the driver late when facilities are up
      69d2ca60
    • Linus Torvalds's avatar
      Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi · 19190f5e
      Linus Torvalds authored
      Pull SCSI fixes from James Bottomley:
       "This is quite a bumper crop of fixes: three from Arnd correcting
        various build issues in some configurations, a lock recursion in
        qla2xxx.  Two potentially exploitable issues in hpsa and mvsas, a
        potential null deref in st, a revert of a bdi registration fix that
        turned out to cause even more problems, a set of fixes to allow people
        who only defined MPT2SAS to still work after the mpt2/mpt3sas merger
        and a couple of fixes for issues turned up by the hyper-v storvsc
        driver"
      
      * tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi:
        mpt3sas: fix Kconfig dependency problem for mpt2sas back compatibility
        Revert "scsi: Fix a bdi reregistration race"
        mpt3sas: Add dummy Kconfig option for backwards compatibility
        Fix a memory leak in scsi_host_dev_release()
        block/sd: Fix device-imposed transfer length limits
        scsi_debug: fix prevent_allow+verify regressions
        MAINTAINERS: Add myself as co-maintainer of the SCSI subsystem.
        sd: Make discard granularity match logical block size when LBPRZ=1
        scsi: hpsa: select CONFIG_SCSI_SAS_ATTR
        scsi: advansys needs ISA dma api for ISA support
        scsi_sysfs: protect against double execution of __scsi_remove_device()
        st: fix potential null pointer dereference.
        scsi: report 'INQUIRY result too short' once per host
        advansys: fix big-endian builds
        qla2xxx: Fix rwlock recursion
        hpsa: logical vs bitwise AND typo
        mvsas: don't allow negative timeouts
        mpt3sas: Fix use sas_is_tlr_enabled API before enabling MPI2_SCSIIO_CONTROL_TLR_ON flag
      19190f5e
    • Linus Torvalds's avatar
      Merge branch 'drm-fixes' of git://people.freedesktop.org/~airlied/linux · a2dbb7b5
      Linus Torvalds authored
      Pull drm fixes from Dave Airlie:
       "A bunch of change across the board, the main things are some vblank
        fallout in radeon and nouveau required some work, but I think this
        should fix it all.  There is also one drm fix for an oops in vmwgfx
        with how we pass the drm master around.
      
        The rest is just some amdgpu, i915, imx and rockchip fixes.
      
        Probably more than I'd like at this point, but hopefully things settle
        down now"
      
      * 'drm-fixes' of git://people.freedesktop.org/~airlied/linux: (40 commits)
        drm/amdgpu: Fixup hw vblank counter/ts for new drm_update_vblank_count() (v3)
        drm/radeon: Fixup hw vblank counter/ts for new drm_update_vblank_count() (v2)
        drm/radeon: Retry DDC probing on DVI on failure if we got an HPD interrupt
        drm/amdgpu: add spin lock to protect freed list in vm (v2)
        drm/amdgpu: partially revert "drm/amdgpu: fix VM_CONTEXT*_PAGE_TABLE_END_ADDR" v2
        drm/amdgpu: take a BO reference for the user fence
        drm/amdgpu: take a BO reference in the display code
        drm/amdgpu: set snooped flags only on system addresses v2
        drm/nouveau: Fix pre-nv50 pageflip events (v4)
        drm: Fix an unwanted master inheritance v2
        drm/amdgpu: fix race condition in amd_sched_entity_push_job
        drm/amdgpu: add err check for pin userptr
        drm/i915: take a power domain reference while checking the HDMI live status
        drm/i915: add MISSING_CASE to a few port/aux power domain helpers
        drm/i915/ddi: fix intel_display_port_aux_power_domain() after HDMI detect
        drm/i915: Introduce a gmbus power domain
        drm/i915: Clean up AUX power domain handling
        drm/rockchip: Use CRTC vblank event interface
        drm/rockchip: Fix module autoload for OF platform driver
        drm/rockchip: vop: fix window origin calculation
        ...
      a2dbb7b5
  6. 05 Dec, 2015 4 commits
  7. 04 Dec, 2015 9 commits
    • Linus Torvalds's avatar
      Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client · 849ee3d4
      Linus Torvalds authored
      Pull Ceph fix from Sage Weil:
       "This addresses a refcounting bug that leads to a use-after-free"
      
      * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client:
        rbd: don't put snap_context twice in rbd_queue_workfn()
      849ee3d4
    • Alex Deucher's avatar
      drm/amdgpu: Fixup hw vblank counter/ts for new drm_update_vblank_count() (v3) · 8e36f9d3
      Alex Deucher authored
      commit 4dfd6486 "drm: Use vblank timestamps to guesstimate how many
      vblanks were missed" introduced in Linux 4.4-rc1 makes the drm core
      more fragile to drivers which don't update hw vblank counters and
      vblank timestamps in sync with firing of the vblank irq and
      essentially at leading edge of vblank.
      
      This exposed a problem with radeon-kms/amdgpu-kms which do not
      satisfy above requirements:
      
      The vblank irq fires a few scanlines before start of vblank, but
      programmed pageflips complete at start of vblank and
      vblank timestamps update at start of vblank, whereas the
      hw vblank counter increments only later, at start of vsync.
      
      This leads to problems like off by one errors for vblank counter
      updates, vblank counters apparently going backwards or vblank
      timestamps apparently having time going backwards. The net result
      is stuttering of graphics in games, or little hangs, as well as
      total failure of timing sensitive applications.
      
      See bug #93147 for an example of the regression on Linux 4.4-rc:
      
      https://bugs.freedesktop.org/show_bug.cgi?id=93147
      
      This patch tries to align all above events better from the
      viewpoint of the drm core / of external callers to fix the problem:
      
      1. The apparent start of vblank is shifted a few scanlines earlier,
      so the vblank irq now always happens after start of this extended
      vblank interval and thereby drm_update_vblank_count() always samples
      the updated vblank count and timestamp of the new vblank interval.
      
      To achieve this, the reporting of scanout positions by
      radeon_get_crtc_scanoutpos() now operates as if the vblank starts
      radeon_crtc->lb_vblank_lead_lines before the real start of the hw
      vblank interval. This means that the vblank timestamps which are based
      on these scanout positions will now update at this earlier start of
      vblank.
      
      2. The driver->get_vblank_counter() function will bump the returned
      vblank count as read from the hw by +1 if the query happens after
      the shifted earlier start of the vblank, but before the real hw increment
      at start of vsync, so the counter appears to increment at start of vblank
      in sync with the timestamp update.
      
      3. Calls from vblank irq-context and regular non-irq calls are now
      treated identical, always simulating the shifted vblank start, to
      avoid inconsistent results for queries happening from vblank irq vs.
      happening from drm_vblank_enable() or vblank_disable_fn().
      
      4. The radeon_flip_work_func will delay mmio programming a pageflip until
      the start of the real vblank iff it happens to execute inside the shifted
      earlier start of the vblank, so pageflips now also appear to execute at
      start of the shifted vblank, in sync with vblank counter and timestamp
      updates. This to avoid some races between updates of vblank count and
      timestamps that are used for swap scheduling and pageflip execution which
      could cause pageflips to execute before the scheduled target vblank.
      
      The lb_vblank_lead_lines "fudge" value is calculated as the size of
      the display controllers line buffer in scanlines for the given video
      mode: Vblank irq's are triggered by the line buffer logic when the line
      buffer refill for a video frame ends, ie. when the line buffer source read
      position enters the hw vblank. This means that a vblank irq could fire at
      most as many scanlines before the current reported scanout position of the
      crtc timing generator as the number of scanlines the line buffer can
      maximally hold for a given video mode.
      
      This patch has been successfully tested on a RV730 card with DCE-3 display
      engine and on a evergreen card with DCE-4 display engine, in single-display
      and dual-display configuration, with different video modes.
      
      A similar patch is needed for amdgpu-kms to fix the same problem.
      
      Limitations:
      
      - Maybe replace the udelay() in the flip_work_func() by a suitable
        usleep_range() for a bit better efficiency? Will try that.
      
      - Line buffer sizes in pixels are hard-coded on < DCE-4 to a value
        i just guessed to be high enough to work ok, lacking info on the true
        sizes atm.
      
      Probably fixes: fdo#93147
      
      Port of Mario's radeon fix to amdgpu.
      Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
      (v1) Reviewed-by: Mario Kleiner <mario.kleiner.de@gmail.com>
      
      (v2) Refine amdgpu_flip_work_func() for better efficiency.
      
           In amdgpu_flip_work_func, replace the busy waiting udelay(5)
           with event lock held by a more performance and energy efficient
           usleep_range() until at least predicted true start of hw vblank,
           with some slack for scheduler happiness. Release the event lock
           during waits to not delay other outputs in doing their stuff, as
           the waiting can last up to 200 usecs in some cases.
      
           Also small fix to code comment and formatting in that function.
      
      (v2) Signed-off-by: Mario Kleiner <mario.kleiner.de@gmail.com>
      
      (v3) Fix crash in crtc disabled case
      8e36f9d3
    • Linus Torvalds's avatar
      Merge branch 'libnvdimm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm · fb39cbda
      Linus Torvalds authored
      Pull libnvdimm fixes from Dan Williams:
      
       - NFIT parsing regression fixes from Linda.  The nvdimm hot-add
         implementation merged in 4.4-rc1 interpreted the specification in a
         way that breaks actual HPE platforms.  We are also closing the loop
         with the ACPI Working Group to get this clarification added to the
         spec.
      
       - Andy pointed out that his laptop without nvdimm resources is loading
         the e820-nvdimm module by default, fix that up to only load the
         module when an e820-type-12 range is present.
      
      * 'libnvdimm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm:
        nfit: Adjust for different _FIT and NFIT headers
        nfit: Fix the check for a successful NFIT merge
        nfit: Account for table size length variation
        libnvdimm, e820: skip module loading when no type-12
      fb39cbda
    • Linus Torvalds's avatar
      Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm · db281766
      Linus Torvalds authored
      Pull ARM KVM fixes from Paolo Bonzini:
      
       - a series of fixes to deal with the aliasing between the sp and xzr
         register
      
       - a fix for the cache flush fix that went in -rc3
      
      * tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm:
        ARM/arm64: KVM: correct PTE uncachedness check
        arm64: KVM: Get rid of old vcpu_reg()
        arm64: KVM: Correctly handle zero register in system register accesses
        arm64: KVM: Remove const from struct sys_reg_params
        arm64: KVM: Correctly handle zero register during MMIO
      db281766
    • Mario Kleiner's avatar
      drm/radeon: Fixup hw vblank counter/ts for new drm_update_vblank_count() (v2) · 5b5561b3
      Mario Kleiner authored
      commit 4dfd6486 "drm: Use vblank timestamps to guesstimate how many
      vblanks were missed" introduced in Linux 4.4-rc1 makes the drm core
      more fragile to drivers which don't update hw vblank counters and
      vblank timestamps in sync with firing of the vblank irq and
      essentially at leading edge of vblank.
      
      This exposed a problem with radeon-kms/amdgpu-kms which do not
      satisfy above requirements:
      
      The vblank irq fires a few scanlines before start of vblank, but
      programmed pageflips complete at start of vblank and
      vblank timestamps update at start of vblank, whereas the
      hw vblank counter increments only later, at start of vsync.
      
      This leads to problems like off by one errors for vblank counter
      updates, vblank counters apparently going backwards or vblank
      timestamps apparently having time going backwards. The net result
      is stuttering of graphics in games, or little hangs, as well as
      total failure of timing sensitive applications.
      
      See bug #93147 for an example of the regression on Linux 4.4-rc:
      
      https://bugs.freedesktop.org/show_bug.cgi?id=93147
      
      This patch tries to align all above events better from the
      viewpoint of the drm core / of external callers to fix the problem:
      
      1. The apparent start of vblank is shifted a few scanlines earlier,
      so the vblank irq now always happens after start of this extended
      vblank interval and thereby drm_update_vblank_count() always samples
      the updated vblank count and timestamp of the new vblank interval.
      
      To achieve this, the reporting of scanout positions by
      radeon_get_crtc_scanoutpos() now operates as if the vblank starts
      radeon_crtc->lb_vblank_lead_lines before the real start of the hw
      vblank interval. This means that the vblank timestamps which are based
      on these scanout positions will now update at this earlier start of
      vblank.
      
      2. The driver->get_vblank_counter() function will bump the returned
      vblank count as read from the hw by +1 if the query happens after
      the shifted earlier start of the vblank, but before the real hw increment
      at start of vsync, so the counter appears to increment at start of vblank
      in sync with the timestamp update.
      
      3. Calls from vblank irq-context and regular non-irq calls are now
      treated identical, always simulating the shifted vblank start, to
      avoid inconsistent results for queries happening from vblank irq vs.
      happening from drm_vblank_enable() or vblank_disable_fn().
      
      4. The radeon_flip_work_func will delay mmio programming a pageflip until
      the start of the real vblank iff it happens to execute inside the shifted
      earlier start of the vblank, so pageflips now also appear to execute at
      start of the shifted vblank, in sync with vblank counter and timestamp
      updates. This to avoid some races between updates of vblank count and
      timestamps that are used for swap scheduling and pageflip execution which
      could cause pageflips to execute before the scheduled target vblank.
      
      The lb_vblank_lead_lines "fudge" value is calculated as the size of
      the display controllers line buffer in scanlines for the given video
      mode: Vblank irq's are triggered by the line buffer logic when the line
      buffer refill for a video frame ends, ie. when the line buffer source read
      position enters the hw vblank. This means that a vblank irq could fire at
      most as many scanlines before the current reported scanout position of the
      crtc timing generator as the number of scanlines the line buffer can
      maximally hold for a given video mode.
      
      This patch has been successfully tested on a RV730 card with DCE-3 display
      engine and on a evergreen card with DCE-4 display engine, in single-display
      and dual-display configuration, with different video modes.
      
      A similar patch is needed for amdgpu-kms to fix the same problem.
      
      Limitations:
      
      - Line buffer sizes in pixels are hard-coded on < DCE-4 to a value
        i just guessed to be high enough to work ok, lacking info on the true
        sizes atm.
      
      Fixes: fdo#93147
      Signed-off-by: default avatarMario Kleiner <mario.kleiner.de@gmail.com>
      Cc: Alex Deucher <alexander.deucher@amd.com>
      Cc: Michel Dänzer <michel.daenzer@amd.com>
      Cc: Harry Wentland <Harry.Wentland@amd.com>
      Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
      
      (v1) Tested-by: Dave Witbrodt <dawitbro@sbcglobal.net>
      
      (v2) Refine radeon_flip_work_func() for better efficiency:
      
           In radeon_flip_work_func, replace the busy waiting udelay(5)
           with event lock held by a more performance and energy efficient
           usleep_range() until at least predicted true start of hw vblank,
           with some slack for scheduler happiness. Release the event lock
           during waits to not delay other outputs in doing their stuff, as
           the waiting can last up to 200 usecs in some cases.
      
           Retested on DCE-3 and DCE-4 to verify it still works nicely.
      
      (v2) Signed-off-by: Mario Kleiner <mario.kleiner.de@gmail.com>
      Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
      5b5561b3
    • Lyude's avatar
      drm/radeon: Retry DDC probing on DVI on failure if we got an HPD interrupt · cb5d4166
      Lyude authored
      HPD signals on DVI ports can be fired off before the pins required for
      DDC probing actually make contact, due to the pins for HPD making
      contact first. This results in a HPD signal being asserted but DDC
      probing failing, resulting in hotplugging occasionally failing.
      
      This is somewhat rare on most cards (depending on what angle you plug
      the DVI connector in), but on some cards it happens constantly. The
      Radeon R5 on the machine used for testing this patch for instance, runs
      into this issue just about every time I try to hotplug a DVI monitor and
      as a result hotplugging almost never works.
      
      Rescheduling the hotplug work for a second when we run into an HPD
      signal with a failing DDC probe usually gives enough time for the rest
      of the connector's pins to make contact, and fixes this issue.
      Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
      Signed-off-by: default avatarLyude <cpaul@redhat.com>
      Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
      cb5d4166
    • jimqu's avatar
      drm/amdgpu: add spin lock to protect freed list in vm (v2) · 81d75a30
      jimqu authored
      there is a protection fault about freed list when OCL test.
      add a spin lock to protect it.
      
      v2: drop changes in vm_fini
      Signed-off-by: default avatarJimQu <jim.qu@amd.com>
      Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
      81d75a30
    • Christian König's avatar
      drm/amdgpu: partially revert "drm/amdgpu: fix VM_CONTEXT*_PAGE_TABLE_END_ADDR" v2 · 9c97b5ab
      Christian König authored
      The gtt_end is already inclusive, we don't need to subtract one here.
      
      v2 (chk): keep the fix for the VM code, cause here it really applies.
      Signed-off-by: default avatarChristian König <christian.koenig@amd.com>
      Signed-off-by: default avatarAnatoli Antonovitch <anatoli.antonovitch@amd.com>
      Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
      9c97b5ab
    • Christian König's avatar
      drm/amdgpu: take a BO reference for the user fence · f3f17692
      Christian König authored
      No need for a GEM reference here.
      Reviewed-by: default avatarMichel Dänzer <michel.daenzer@amd.com>
      Signed-off-by: default avatarChristian König <christian.koenig@amd.com>
      Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
      f3f17692