Merge branch 'for-linus' into for-next
Merge pending fixes that haven't pulled into 3.8.
This commit is contained in:
@@ -656,29 +656,43 @@ static char *driver_short_names[] = {
|
||||
#define get_azx_dev(substream) (substream->runtime->private_data)
|
||||
|
||||
#ifdef CONFIG_X86
|
||||
static void __mark_pages_wc(struct azx *chip, void *addr, size_t size, bool on)
|
||||
static void __mark_pages_wc(struct azx *chip, struct snd_dma_buffer *dmab, bool on)
|
||||
{
|
||||
int pages;
|
||||
|
||||
if (azx_snoop(chip))
|
||||
return;
|
||||
if (addr && size) {
|
||||
int pages = (size + PAGE_SIZE - 1) >> PAGE_SHIFT;
|
||||
if (!dmab || !dmab->area || !dmab->bytes)
|
||||
return;
|
||||
|
||||
#ifdef CONFIG_SND_DMA_SGBUF
|
||||
if (dmab->dev.type == SNDRV_DMA_TYPE_DEV_SG) {
|
||||
struct snd_sg_buf *sgbuf = dmab->private_data;
|
||||
if (on)
|
||||
set_memory_wc((unsigned long)addr, pages);
|
||||
set_pages_array_wc(sgbuf->page_table, sgbuf->pages);
|
||||
else
|
||||
set_memory_wb((unsigned long)addr, pages);
|
||||
set_pages_array_wb(sgbuf->page_table, sgbuf->pages);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
pages = (dmab->bytes + PAGE_SIZE - 1) >> PAGE_SHIFT;
|
||||
if (on)
|
||||
set_memory_wc((unsigned long)dmab->area, pages);
|
||||
else
|
||||
set_memory_wb((unsigned long)dmab->area, pages);
|
||||
}
|
||||
|
||||
static inline void mark_pages_wc(struct azx *chip, struct snd_dma_buffer *buf,
|
||||
bool on)
|
||||
{
|
||||
__mark_pages_wc(chip, buf->area, buf->bytes, on);
|
||||
__mark_pages_wc(chip, buf, on);
|
||||
}
|
||||
static inline void mark_runtime_wc(struct azx *chip, struct azx_dev *azx_dev,
|
||||
struct snd_pcm_runtime *runtime, bool on)
|
||||
struct snd_pcm_substream *substream, bool on)
|
||||
{
|
||||
if (azx_dev->wc_marked != on) {
|
||||
__mark_pages_wc(chip, runtime->dma_area, runtime->dma_bytes, on);
|
||||
__mark_pages_wc(chip, snd_pcm_get_dma_buf(substream), on);
|
||||
azx_dev->wc_marked = on;
|
||||
}
|
||||
}
|
||||
@@ -689,7 +703,7 @@ static inline void mark_pages_wc(struct azx *chip, struct snd_dma_buffer *buf,
|
||||
{
|
||||
}
|
||||
static inline void mark_runtime_wc(struct azx *chip, struct azx_dev *azx_dev,
|
||||
struct snd_pcm_runtime *runtime, bool on)
|
||||
struct snd_pcm_substream *substream, bool on)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
@@ -1975,11 +1989,10 @@ static int azx_pcm_hw_params(struct snd_pcm_substream *substream,
|
||||
{
|
||||
struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
|
||||
struct azx *chip = apcm->chip;
|
||||
struct snd_pcm_runtime *runtime = substream->runtime;
|
||||
struct azx_dev *azx_dev = get_azx_dev(substream);
|
||||
int ret;
|
||||
|
||||
mark_runtime_wc(chip, azx_dev, runtime, false);
|
||||
mark_runtime_wc(chip, azx_dev, substream, false);
|
||||
azx_dev->bufsize = 0;
|
||||
azx_dev->period_bytes = 0;
|
||||
azx_dev->format_val = 0;
|
||||
@@ -1987,7 +2000,7 @@ static int azx_pcm_hw_params(struct snd_pcm_substream *substream,
|
||||
params_buffer_bytes(hw_params));
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
mark_runtime_wc(chip, azx_dev, runtime, true);
|
||||
mark_runtime_wc(chip, azx_dev, substream, true);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -1996,7 +2009,6 @@ static int azx_pcm_hw_free(struct snd_pcm_substream *substream)
|
||||
struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
|
||||
struct azx_dev *azx_dev = get_azx_dev(substream);
|
||||
struct azx *chip = apcm->chip;
|
||||
struct snd_pcm_runtime *runtime = substream->runtime;
|
||||
struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream];
|
||||
|
||||
/* reset BDL address */
|
||||
@@ -2009,7 +2021,7 @@ static int azx_pcm_hw_free(struct snd_pcm_substream *substream)
|
||||
|
||||
snd_hda_codec_cleanup(apcm->codec, hinfo, substream);
|
||||
|
||||
mark_runtime_wc(chip, azx_dev, runtime, false);
|
||||
mark_runtime_wc(chip, azx_dev, substream, false);
|
||||
return snd_pcm_lib_free_pages(substream);
|
||||
}
|
||||
|
||||
@@ -3624,13 +3636,12 @@ static DEFINE_PCI_DEVICE_TABLE(azx_ids) = {
|
||||
/* 5 Series/3400 */
|
||||
{ PCI_DEVICE(0x8086, 0x3b56),
|
||||
.driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH },
|
||||
/* SCH */
|
||||
/* Poulsbo */
|
||||
{ PCI_DEVICE(0x8086, 0x811b),
|
||||
.driver_data = AZX_DRIVER_SCH | AZX_DCAPS_SCH_SNOOP |
|
||||
AZX_DCAPS_BUFSIZE | AZX_DCAPS_POSFIX_LPIB }, /* Poulsbo */
|
||||
.driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_NOPM },
|
||||
/* Oaktrail */
|
||||
{ PCI_DEVICE(0x8086, 0x080a),
|
||||
.driver_data = AZX_DRIVER_SCH | AZX_DCAPS_SCH_SNOOP |
|
||||
AZX_DCAPS_BUFSIZE | AZX_DCAPS_POSFIX_LPIB }, /* Oaktrail */
|
||||
.driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_NOPM },
|
||||
/* ICH */
|
||||
{ PCI_DEVICE(0x8086, 0x2668),
|
||||
.driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
|
||||
|
Reference in New Issue
Block a user