/* * SiRF inner codec controllers define * * Copyright (c) 2011 Cambridge Silicon Radio Limited, a CSR plc group company. * * Licensed under GPLv2 or later. */ #ifndef _SIRF_AUDIO_CODEC_H #define _SIRF_AUDIO_CODEC_H #define AUDIO_IC_CODEC_PWR (0x00E0) #define AUDIO_IC_CODEC_CTRL0 (0x00E4) #define AUDIO_IC_CODEC_CTRL1 (0x00E8) #define AUDIO_IC_CODEC_CTRL2 (0x00EC) #define AUDIO_IC_CODEC_CTRL3 (0x00F0) #define MICBIASEN (1 << 3) #define IC_RDACEN (1 << 0) #define IC_LDACEN (1 << 1) #define IC_HSREN (1 << 2) #define IC_HSLEN (1 << 3) #define IC_SPEN (1 << 4) #define IC_CPEN (1 << 5) #define IC_HPRSELR (1 << 6) #define IC_HPLSELR (1 << 7) #define IC_HPRSELL (1 << 8) #define IC_HPLSELL (1 << 9) #define IC_SPSELR (1 << 10) #define IC_SPSELL (1 << 11) #define IC_MONOR (1 << 12) #define IC_MONOL (1 << 13) #define IC_RXOSRSEL (1 << 28) #define IC_CPFREQ (1 << 29) #define IC_HSINVEN (1 << 30) #define IC_MICINREN (1 << 0) #define IC_MICINLEN (1 << 1) #define IC_MICIN1SEL (1 << 2) #define IC_MICIN2SEL (1 << 3) #define IC_MICDIFSEL (1 << 4) #define IC_LINEIN1SEL (1 << 5) #define IC_LINEIN2SEL (1 << 6) #define IC_RADCEN (1 << 7) #define IC_LADCEN (1 << 8) #define IC_ALM (1 << 9) #define IC_DIGMICEN (1 << 22) #define IC_DIGMICFREQ (1 << 23) #define IC_ADC14B_12 (1 << 24) #define IC_FIRDAC_HSL_EN (1 << 25) #define IC_FIRDAC_HSR_EN (1 << 26) #define IC_FIRDAC_LOUT_EN (1 << 27) #define IC_POR (1 << 28) #define IC_CODEC_CLK_EN (1 << 29) #define IC_HP_3DB_BOOST (1 << 30) #define IC_ADC_LEFT_GAIN_SHIFT 16 #define IC_ADC_RIGHT_GAIN_SHIFT 10 #define IC_ADC_GAIN_MASK 0x3F #define IC_MIC_MAX_GAIN 0x39 #define IC_RXPGAR_MASK 0x3F #define IC_RXPGAR_SHIFT 14 #define IC_RXPGAL_MASK 0x3F #define IC_RXPGAL_SHIFT 21 #define IC_RXPGAR 0x7B #define IC_RXPGAL 0x7B #define AUDIO_PORT_TX_FIFO_LEVEL_CHECK_MASK 0x3F #define AUDIO_PORT_TX_FIFO_SC_OFFSET 0 #define AUDIO_PORT_TX_FIFO_LC_OFFSET 10 #define AUDIO_PORT_TX_FIFO_HC_OFFSET 20 #define TX_FIFO_SC(x) (((x) & AUDIO_PORT_TX_FIFO_LEVEL_CHECK_MASK) \ << AUDIO_PORT_TX_FIFO_SC_OFFSET) #define TX_FIFO_LC(x) (((x) & AUDIO_PORT_TX_FIFO_LEVEL_CHECK_MASK) \ << AUDIO_PORT_TX_FIFO_LC_OFFSET) #define TX_FIFO_HC(x) (((x) & AUDIO_PORT_TX_FIFO_LEVEL_CHECK_MASK) \ << AUDIO_PORT_TX_FIFO_HC_OFFSET) #define AUDIO_PORT_RX_FIFO_LEVEL_CHECK_MASK 0x0F #define AUDIO_PORT_RX_FIFO_SC_OFFSET 0 #define AUDIO_PORT_RX_FIFO_LC_OFFSET 10 #define AUDIO_PORT_RX_FIFO_HC_OFFSET 20 #define RX_FIFO_SC(x) (((x) & AUDIO_PORT_RX_FIFO_LEVEL_CHECK_MASK) \ << AUDIO_PORT_RX_FIFO_SC_OFFSET) #define RX_FIFO_LC(x) (((x) & AUDIO_PORT_RX_FIFO_LEVEL_CHECK_MASK) \ << AUDIO_PORT_RX_FIFO_LC_OFFSET) #define RX_FIFO_HC(x) (((x) & AUDIO_PORT_RX_FIFO_LEVEL_CHECK_MASK) \ << AUDIO_PORT_RX_FIFO_HC_OFFSET) #define AUDIO_PORT_IC_CODEC_TX_CTRL (0x00F4) #define AUDIO_PORT_IC_CODEC_RX_CTRL (0x00F8) #define AUDIO_PORT_IC_TXFIFO_OP (0x00FC) #define AUDIO_PORT_IC_TXFIFO_LEV_CHK (0x0100) #define AUDIO_PORT_IC_TXFIFO_STS (0x0104) #define AUDIO_PORT_IC_TXFIFO_INT (0x0108) #define AUDIO_PORT_IC_TXFIFO_INT_MSK (0x010C) #define AUDIO_PORT_IC_RXFIFO_OP (0x0110) #define AUDIO_PORT_IC_RXFIFO_LEV_CHK (0x0114) #define AUDIO_PORT_IC_RXFIFO_STS (0x0118) #define AUDIO_PORT_IC_RXFIFO_INT (0x011C) #define AUDIO_PORT_IC_RXFIFO_INT_MSK (0x0120) #define AUDIO_FIFO_START (1 << 0) #define AUDIO_FIFO_RESET (1 << 1) #define AUDIO_FIFO_FULL (1 << 0) #define AUDIO_FIFO_EMPTY (1 << 1) #define AUDIO_FIFO_OFLOW (1 << 2) #define AUDIO_FIFO_UFLOW (1 << 3) #define IC_TX_ENABLE (0x03) #define IC_RX_ENABLE_MONO (0x01) #define IC_RX_ENABLE_STEREO (0x03) #endif /*__SIRF_AUDIO_CODEC_H*/ space:mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2017-01-29 13:50:06 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2017-01-29 13:50:06 -0800
commit39cb2c9a316e77f6dfba96c543e55b6672d5a37e (patch)
tree98fe974ee4e20121253de7f61fc8d01bdb3821c1 /sound/ppc/awacs.c
parent2c5d9555d6d937966d79d4c6529a5f7b9206e405 (diff)
drm/i915: Check for NULL i915_vma in intel_unpin_fb_obj()
I've seen this trigger twice now, where the i915_gem_object_to_ggtt() call in intel_unpin_fb_obj() returns NULL, resulting in an oops immediately afterwards as the (inlined) call to i915_vma_unpin_fence() tries to dereference it. It seems to be some race condition where the object is going away at shutdown time, since both times happened when shutting down the X server. The call chains were different: - VT ioctl(KDSETMODE, KD_TEXT): intel_cleanup_plane_fb+0x5b/0xa0 [i915] drm_atomic_helper_cleanup_planes+0x6f/0x90 [drm_kms_helper] intel_atomic_commit_tail+0x749/0xfe0 [i915] intel_atomic_commit+0x3cb/0x4f0 [i915] drm_atomic_commit+0x4b/0x50 [drm] restore_fbdev_mode+0x14c/0x2a0 [drm_kms_helper] drm_fb_helper_restore_fbdev_mode_unlocked+0x34/0x80 [drm_kms_helper] drm_fb_helper_set_par+0x2d/0x60 [drm_kms_helper] intel_fbdev_set_par+0x18/0x70 [i915] fb_set_var+0x236/0x460 fbcon_blank+0x30f/0x350 do_unblank_screen+0xd2/0x1a0 vt_ioctl+0x507/0x12a0 tty_ioctl+0x355/0xc30 do_vfs_ioctl+0xa3/0x5e0 SyS_ioctl+0x79/0x90 entry_SYSCALL_64_fastpath+0x13/0x94 - i915 unpin_work workqueue: intel_unpin_work_fn+0x58/0x140 [i915] process_one_work+0x1f1/0x480 worker_thread+0x48/0x4d0 kthread+0x101/0x140 and this patch purely papers over the issue by adding a NULL pointer check and a WARN_ON_ONCE() to avoid the oops that would then generally make the machine unresponsive. Other callers of i915_gem_object_to_ggtt() seem to also check for the returned pointer being NULL and warn about it, so this clearly has happened before in other places. [ Reported it originally to the i915 developers on Jan 8, applying the ugly workaround on my own now after triggering the problem for the second time with no feedback. This is likely to be the same bug reported as https://bugs.freedesktop.org/show_bug.cgi?id=98829 https://bugs.freedesktop.org/show_bug.cgi?id=99134 which has a patch for the underlying problem, but it hasn't gotten to me, so I'm applying the workaround. ] Cc: Daniel Vetter <daniel.vetter@intel.com> Cc: Jani Nikula <jani.nikula@linux.intel.com> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> Cc: Chris Wilson <chris@chris-wilson.co.uk> Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Cc: Imre Deak <imre.deak@intel.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'sound/ppc/awacs.c')