1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23#include <linux/clocksource.h>
24#include <linux/delay.h>
25#include <linux/interrupt.h>
26#include <linux/kernel.h>
27#include <linux/module.h>
28#include <linux/pm_runtime.h>
29#include <linux/slab.h>
30#include <linux/reboot.h>
31#include <sound/core.h>
32#include <sound/initval.h>
33#include "hda_priv.h"
34#include "hda_controller.h"
35
36#define CREATE_TRACE_POINTS
37#include "hda_intel_trace.h"
38
39
40#ifdef CONFIG_SND_HDA_DSP_LOADER
41#define dsp_lock_init(dev) mutex_init(&(dev)->dsp_mutex)
42#define dsp_lock(dev) mutex_lock(&(dev)->dsp_mutex)
43#define dsp_unlock(dev) mutex_unlock(&(dev)->dsp_mutex)
44#define dsp_is_locked(dev) ((dev)->locked)
45#else
46#define dsp_lock_init(dev) do {} while (0)
47#define dsp_lock(dev) do {} while (0)
48#define dsp_unlock(dev) do {} while (0)
49#define dsp_is_locked(dev) 0
50#endif
51
52
53
54
55
56
57static void azx_stream_start(struct azx *chip, struct azx_dev *azx_dev)
58{
59
60
61
62 azx_dev->insufficient = 1;
63
64
65 azx_writel(chip, INTCTL,
66 azx_readl(chip, INTCTL) | (1 << azx_dev->index));
67
68 azx_sd_writeb(chip, azx_dev, SD_CTL,
69 azx_sd_readb(chip, azx_dev, SD_CTL) |
70 SD_CTL_DMA_START | SD_INT_MASK);
71}
72
73
74static void azx_stream_clear(struct azx *chip, struct azx_dev *azx_dev)
75{
76 azx_sd_writeb(chip, azx_dev, SD_CTL,
77 azx_sd_readb(chip, azx_dev, SD_CTL) &
78 ~(SD_CTL_DMA_START | SD_INT_MASK));
79 azx_sd_writeb(chip, azx_dev, SD_STS, SD_INT_MASK);
80}
81
82
83void azx_stream_stop(struct azx *chip, struct azx_dev *azx_dev)
84{
85 azx_stream_clear(chip, azx_dev);
86
87 azx_writel(chip, INTCTL,
88 azx_readl(chip, INTCTL) & ~(1 << azx_dev->index));
89}
90EXPORT_SYMBOL_GPL(azx_stream_stop);
91
92
93static void azx_stream_reset(struct azx *chip, struct azx_dev *azx_dev)
94{
95 unsigned char val;
96 int timeout;
97
98 azx_stream_clear(chip, azx_dev);
99
100 azx_sd_writeb(chip, azx_dev, SD_CTL,
101 azx_sd_readb(chip, azx_dev, SD_CTL) |
102 SD_CTL_STREAM_RESET);
103 udelay(3);
104 timeout = 300;
105 while (!((val = azx_sd_readb(chip, azx_dev, SD_CTL)) &
106 SD_CTL_STREAM_RESET) && --timeout)
107 ;
108 val &= ~SD_CTL_STREAM_RESET;
109 azx_sd_writeb(chip, azx_dev, SD_CTL, val);
110 udelay(3);
111
112 timeout = 300;
113
114 while (((val = azx_sd_readb(chip, azx_dev, SD_CTL)) &
115 SD_CTL_STREAM_RESET) && --timeout)
116 ;
117
118
119 *azx_dev->posbuf = 0;
120}
121
122
123
124
125static int azx_setup_controller(struct azx *chip, struct azx_dev *azx_dev)
126{
127 unsigned int val;
128
129 azx_stream_clear(chip, azx_dev);
130
131 val = azx_sd_readl(chip, azx_dev, SD_CTL);
132 val = (val & ~SD_CTL_STREAM_TAG_MASK) |
133 (azx_dev->stream_tag << SD_CTL_STREAM_TAG_SHIFT);
134 if (!azx_snoop(chip))
135 val |= SD_CTL_TRAFFIC_PRIO;
136 azx_sd_writel(chip, azx_dev, SD_CTL, val);
137
138
139 azx_sd_writel(chip, azx_dev, SD_CBL, azx_dev->bufsize);
140
141
142
143 azx_sd_writew(chip, azx_dev, SD_FORMAT, azx_dev->format_val);
144
145
146 azx_sd_writew(chip, azx_dev, SD_LVI, azx_dev->frags - 1);
147
148
149
150 azx_sd_writel(chip, azx_dev, SD_BDLPL, (u32)azx_dev->bdl.addr);
151
152 azx_sd_writel(chip, azx_dev, SD_BDLPU,
153 upper_32_bits(azx_dev->bdl.addr));
154
155
156 if (chip->get_position[0] != azx_get_pos_lpib ||
157 chip->get_position[1] != azx_get_pos_lpib) {
158 if (!(azx_readl(chip, DPLBASE) & AZX_DPLBASE_ENABLE))
159 azx_writel(chip, DPLBASE,
160 (u32)chip->posbuf.addr | AZX_DPLBASE_ENABLE);
161 }
162
163
164 azx_sd_writel(chip, azx_dev, SD_CTL,
165 azx_sd_readl(chip, azx_dev, SD_CTL) | SD_INT_MASK);
166
167 return 0;
168}
169
170
171static inline struct azx_dev *
172azx_assign_device(struct azx *chip, struct snd_pcm_substream *substream)
173{
174 int dev, i, nums;
175 struct azx_dev *res = NULL;
176
177 int key = (substream->pcm->device << 16) | (substream->number << 2) |
178 (substream->stream + 1);
179
180 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
181 dev = chip->playback_index_offset;
182 nums = chip->playback_streams;
183 } else {
184 dev = chip->capture_index_offset;
185 nums = chip->capture_streams;
186 }
187 for (i = 0; i < nums; i++, dev++) {
188 struct azx_dev *azx_dev = &chip->azx_dev[dev];
189 dsp_lock(azx_dev);
190 if (!azx_dev->opened && !dsp_is_locked(azx_dev)) {
191 if (azx_dev->assigned_key == key) {
192 azx_dev->opened = 1;
193 azx_dev->assigned_key = key;
194 dsp_unlock(azx_dev);
195 return azx_dev;
196 }
197 if (!res ||
198 (chip->driver_caps & AZX_DCAPS_REVERSE_ASSIGN))
199 res = azx_dev;
200 }
201 dsp_unlock(azx_dev);
202 }
203 if (res) {
204 dsp_lock(res);
205 res->opened = 1;
206 res->assigned_key = key;
207 dsp_unlock(res);
208 }
209 return res;
210}
211
212
213static inline void azx_release_device(struct azx_dev *azx_dev)
214{
215 azx_dev->opened = 0;
216}
217
218static cycle_t azx_cc_read(const struct cyclecounter *cc)
219{
220 struct azx_dev *azx_dev = container_of(cc, struct azx_dev, azx_cc);
221 struct snd_pcm_substream *substream = azx_dev->substream;
222 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
223 struct azx *chip = apcm->chip;
224
225 return azx_readl(chip, WALLCLK);
226}
227
228static void azx_timecounter_init(struct snd_pcm_substream *substream,
229 bool force, cycle_t last)
230{
231 struct azx_dev *azx_dev = get_azx_dev(substream);
232 struct timecounter *tc = &azx_dev->azx_tc;
233 struct cyclecounter *cc = &azx_dev->azx_cc;
234 u64 nsec;
235
236 cc->read = azx_cc_read;
237 cc->mask = CLOCKSOURCE_MASK(32);
238
239
240
241
242
243
244
245
246
247
248
249 cc->mult = 125;
250 cc->shift = 0;
251
252 nsec = 0;
253 timecounter_init(tc, cc, nsec);
254 if (force)
255
256
257
258
259 tc->cycle_last = last;
260}
261
262static u64 azx_adjust_codec_delay(struct snd_pcm_substream *substream,
263 u64 nsec)
264{
265 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
266 struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream];
267 u64 codec_frames, codec_nsecs;
268
269 if (!hinfo->ops.get_delay)
270 return nsec;
271
272 codec_frames = hinfo->ops.get_delay(hinfo, apcm->codec, substream);
273 codec_nsecs = div_u64(codec_frames * 1000000000LL,
274 substream->runtime->rate);
275
276 if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
277 return nsec + codec_nsecs;
278
279 return (nsec > codec_nsecs) ? nsec - codec_nsecs : 0;
280}
281
282
283
284
285static int setup_bdle(struct azx *chip,
286 struct snd_dma_buffer *dmab,
287 struct azx_dev *azx_dev, u32 **bdlp,
288 int ofs, int size, int with_ioc)
289{
290 u32 *bdl = *bdlp;
291
292 while (size > 0) {
293 dma_addr_t addr;
294 int chunk;
295
296 if (azx_dev->frags >= AZX_MAX_BDL_ENTRIES)
297 return -EINVAL;
298
299 addr = snd_sgbuf_get_addr(dmab, ofs);
300
301 bdl[0] = cpu_to_le32((u32)addr);
302 bdl[1] = cpu_to_le32(upper_32_bits(addr));
303
304 chunk = snd_sgbuf_get_chunk_size(dmab, ofs, size);
305
306 if (chip->driver_caps & AZX_DCAPS_4K_BDLE_BOUNDARY) {
307 u32 remain = 0x1000 - (ofs & 0xfff);
308 if (chunk > remain)
309 chunk = remain;
310 }
311 bdl[2] = cpu_to_le32(chunk);
312
313
314
315 size -= chunk;
316 bdl[3] = (size || !with_ioc) ? 0 : cpu_to_le32(0x01);
317 bdl += 4;
318 azx_dev->frags++;
319 ofs += chunk;
320 }
321 *bdlp = bdl;
322 return ofs;
323}
324
325
326
327
328static int azx_setup_periods(struct azx *chip,
329 struct snd_pcm_substream *substream,
330 struct azx_dev *azx_dev)
331{
332 u32 *bdl;
333 int i, ofs, periods, period_bytes;
334 int pos_adj = 0;
335
336
337 azx_sd_writel(chip, azx_dev, SD_BDLPL, 0);
338 azx_sd_writel(chip, azx_dev, SD_BDLPU, 0);
339
340 period_bytes = azx_dev->period_bytes;
341 periods = azx_dev->bufsize / period_bytes;
342
343
344 bdl = (u32 *)azx_dev->bdl.area;
345 ofs = 0;
346 azx_dev->frags = 0;
347
348 if (chip->bdl_pos_adj)
349 pos_adj = chip->bdl_pos_adj[chip->dev_index];
350 if (!azx_dev->no_period_wakeup && pos_adj > 0) {
351 struct snd_pcm_runtime *runtime = substream->runtime;
352 int pos_align = pos_adj;
353 pos_adj = (pos_adj * runtime->rate + 47999) / 48000;
354 if (!pos_adj)
355 pos_adj = pos_align;
356 else
357 pos_adj = ((pos_adj + pos_align - 1) / pos_align) *
358 pos_align;
359 pos_adj = frames_to_bytes(runtime, pos_adj);
360 if (pos_adj >= period_bytes) {
361 dev_warn(chip->card->dev,"Too big adjustment %d\n",
362 pos_adj);
363 pos_adj = 0;
364 } else {
365 ofs = setup_bdle(chip, snd_pcm_get_dma_buf(substream),
366 azx_dev,
367 &bdl, ofs, pos_adj, true);
368 if (ofs < 0)
369 goto error;
370 }
371 } else
372 pos_adj = 0;
373
374 for (i = 0; i < periods; i++) {
375 if (i == periods - 1 && pos_adj)
376 ofs = setup_bdle(chip, snd_pcm_get_dma_buf(substream),
377 azx_dev, &bdl, ofs,
378 period_bytes - pos_adj, 0);
379 else
380 ofs = setup_bdle(chip, snd_pcm_get_dma_buf(substream),
381 azx_dev, &bdl, ofs,
382 period_bytes,
383 !azx_dev->no_period_wakeup);
384 if (ofs < 0)
385 goto error;
386 }
387 return 0;
388
389 error:
390 dev_err(chip->card->dev, "Too many BDL entries: buffer=%d, period=%d\n",
391 azx_dev->bufsize, period_bytes);
392 return -EINVAL;
393}
394
395
396
397
398
399static int azx_pcm_close(struct snd_pcm_substream *substream)
400{
401 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
402 struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream];
403 struct azx *chip = apcm->chip;
404 struct azx_dev *azx_dev = get_azx_dev(substream);
405 unsigned long flags;
406
407 mutex_lock(&chip->open_mutex);
408 spin_lock_irqsave(&chip->reg_lock, flags);
409 azx_dev->substream = NULL;
410 azx_dev->running = 0;
411 spin_unlock_irqrestore(&chip->reg_lock, flags);
412 azx_release_device(azx_dev);
413 hinfo->ops.close(hinfo, apcm->codec, substream);
414 snd_hda_power_down(apcm->codec);
415 mutex_unlock(&chip->open_mutex);
416 return 0;
417}
418
419static int azx_pcm_hw_params(struct snd_pcm_substream *substream,
420 struct snd_pcm_hw_params *hw_params)
421{
422 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
423 struct azx *chip = apcm->chip;
424 int ret;
425
426 dsp_lock(get_azx_dev(substream));
427 if (dsp_is_locked(get_azx_dev(substream))) {
428 ret = -EBUSY;
429 goto unlock;
430 }
431
432 ret = chip->ops->substream_alloc_pages(chip, substream,
433 params_buffer_bytes(hw_params));
434unlock:
435 dsp_unlock(get_azx_dev(substream));
436 return ret;
437}
438
439static int azx_pcm_hw_free(struct snd_pcm_substream *substream)
440{
441 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
442 struct azx_dev *azx_dev = get_azx_dev(substream);
443 struct azx *chip = apcm->chip;
444 struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream];
445 int err;
446
447
448 dsp_lock(azx_dev);
449 if (!dsp_is_locked(azx_dev)) {
450 azx_sd_writel(chip, azx_dev, SD_BDLPL, 0);
451 azx_sd_writel(chip, azx_dev, SD_BDLPU, 0);
452 azx_sd_writel(chip, azx_dev, SD_CTL, 0);
453 azx_dev->bufsize = 0;
454 azx_dev->period_bytes = 0;
455 azx_dev->format_val = 0;
456 }
457
458 snd_hda_codec_cleanup(apcm->codec, hinfo, substream);
459
460 err = chip->ops->substream_free_pages(chip, substream);
461 azx_dev->prepared = 0;
462 dsp_unlock(azx_dev);
463 return err;
464}
465
466static int azx_pcm_prepare(struct snd_pcm_substream *substream)
467{
468 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
469 struct azx *chip = apcm->chip;
470 struct azx_dev *azx_dev = get_azx_dev(substream);
471 struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream];
472 struct snd_pcm_runtime *runtime = substream->runtime;
473 unsigned int bufsize, period_bytes, format_val, stream_tag;
474 int err;
475 struct hda_spdif_out *spdif =
476 snd_hda_spdif_out_of_nid(apcm->codec, hinfo->nid);
477 unsigned short ctls = spdif ? spdif->ctls : 0;
478
479 dsp_lock(azx_dev);
480 if (dsp_is_locked(azx_dev)) {
481 err = -EBUSY;
482 goto unlock;
483 }
484
485 azx_stream_reset(chip, azx_dev);
486 format_val = snd_hda_calc_stream_format(apcm->codec,
487 runtime->rate,
488 runtime->channels,
489 runtime->format,
490 hinfo->maxbps,
491 ctls);
492 if (!format_val) {
493 dev_err(chip->card->dev,
494 "invalid format_val, rate=%d, ch=%d, format=%d\n",
495 runtime->rate, runtime->channels, runtime->format);
496 err = -EINVAL;
497 goto unlock;
498 }
499
500 bufsize = snd_pcm_lib_buffer_bytes(substream);
501 period_bytes = snd_pcm_lib_period_bytes(substream);
502
503 dev_dbg(chip->card->dev, "azx_pcm_prepare: bufsize=0x%x, format=0x%x\n",
504 bufsize, format_val);
505
506 if (bufsize != azx_dev->bufsize ||
507 period_bytes != azx_dev->period_bytes ||
508 format_val != azx_dev->format_val ||
509 runtime->no_period_wakeup != azx_dev->no_period_wakeup) {
510 azx_dev->bufsize = bufsize;
511 azx_dev->period_bytes = period_bytes;
512 azx_dev->format_val = format_val;
513 azx_dev->no_period_wakeup = runtime->no_period_wakeup;
514 err = azx_setup_periods(chip, substream, azx_dev);
515 if (err < 0)
516 goto unlock;
517 }
518
519
520
521
522
523 if (runtime->period_size > 64)
524 azx_dev->delay_negative_threshold = -frames_to_bytes(runtime, 64);
525 else
526 azx_dev->delay_negative_threshold = 0;
527
528
529 azx_dev->period_wallclk = (((runtime->period_size * 24000) /
530 runtime->rate) * 1000);
531 azx_setup_controller(chip, azx_dev);
532 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
533 azx_dev->fifo_size =
534 azx_sd_readw(chip, azx_dev, SD_FIFOSIZE) + 1;
535 else
536 azx_dev->fifo_size = 0;
537
538 stream_tag = azx_dev->stream_tag;
539
540 if ((chip->driver_caps & AZX_DCAPS_CTX_WORKAROUND) &&
541 stream_tag > chip->capture_streams)
542 stream_tag -= chip->capture_streams;
543 err = snd_hda_codec_prepare(apcm->codec, hinfo, stream_tag,
544 azx_dev->format_val, substream);
545
546 unlock:
547 if (!err)
548 azx_dev->prepared = 1;
549 dsp_unlock(azx_dev);
550 return err;
551}
552
553static int azx_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
554{
555 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
556 struct azx *chip = apcm->chip;
557 struct azx_dev *azx_dev;
558 struct snd_pcm_substream *s;
559 int rstart = 0, start, nsync = 0, sbits = 0;
560 int nwait, timeout;
561
562 azx_dev = get_azx_dev(substream);
563 trace_azx_pcm_trigger(chip, azx_dev, cmd);
564
565 if (dsp_is_locked(azx_dev) || !azx_dev->prepared)
566 return -EPIPE;
567
568 switch (cmd) {
569 case SNDRV_PCM_TRIGGER_START:
570 rstart = 1;
571 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
572 case SNDRV_PCM_TRIGGER_RESUME:
573 start = 1;
574 break;
575 case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
576 case SNDRV_PCM_TRIGGER_SUSPEND:
577 case SNDRV_PCM_TRIGGER_STOP:
578 start = 0;
579 break;
580 default:
581 return -EINVAL;
582 }
583
584 snd_pcm_group_for_each_entry(s, substream) {
585 if (s->pcm->card != substream->pcm->card)
586 continue;
587 azx_dev = get_azx_dev(s);
588 sbits |= 1 << azx_dev->index;
589 nsync++;
590 snd_pcm_trigger_done(s, substream);
591 }
592
593 spin_lock(&chip->reg_lock);
594
595
596 if (chip->driver_caps & AZX_DCAPS_OLD_SSYNC)
597 azx_writel(chip, OLD_SSYNC,
598 azx_readl(chip, OLD_SSYNC) | sbits);
599 else
600 azx_writel(chip, SSYNC, azx_readl(chip, SSYNC) | sbits);
601
602 snd_pcm_group_for_each_entry(s, substream) {
603 if (s->pcm->card != substream->pcm->card)
604 continue;
605 azx_dev = get_azx_dev(s);
606 if (start) {
607 azx_dev->start_wallclk = azx_readl(chip, WALLCLK);
608 if (!rstart)
609 azx_dev->start_wallclk -=
610 azx_dev->period_wallclk;
611 azx_stream_start(chip, azx_dev);
612 } else {
613 azx_stream_stop(chip, azx_dev);
614 }
615 azx_dev->running = start;
616 }
617 spin_unlock(&chip->reg_lock);
618 if (start) {
619
620 for (timeout = 5000; timeout; timeout--) {
621 nwait = 0;
622 snd_pcm_group_for_each_entry(s, substream) {
623 if (s->pcm->card != substream->pcm->card)
624 continue;
625 azx_dev = get_azx_dev(s);
626 if (!(azx_sd_readb(chip, azx_dev, SD_STS) &
627 SD_STS_FIFO_READY))
628 nwait++;
629 }
630 if (!nwait)
631 break;
632 cpu_relax();
633 }
634 } else {
635
636 for (timeout = 5000; timeout; timeout--) {
637 nwait = 0;
638 snd_pcm_group_for_each_entry(s, substream) {
639 if (s->pcm->card != substream->pcm->card)
640 continue;
641 azx_dev = get_azx_dev(s);
642 if (azx_sd_readb(chip, azx_dev, SD_CTL) &
643 SD_CTL_DMA_START)
644 nwait++;
645 }
646 if (!nwait)
647 break;
648 cpu_relax();
649 }
650 }
651 spin_lock(&chip->reg_lock);
652
653 if (chip->driver_caps & AZX_DCAPS_OLD_SSYNC)
654 azx_writel(chip, OLD_SSYNC,
655 azx_readl(chip, OLD_SSYNC) & ~sbits);
656 else
657 azx_writel(chip, SSYNC, azx_readl(chip, SSYNC) & ~sbits);
658 if (start) {
659 azx_timecounter_init(substream, 0, 0);
660 snd_pcm_gettime(substream->runtime, &substream->runtime->trigger_tstamp);
661 substream->runtime->trigger_tstamp_latched = true;
662
663 if (nsync > 1) {
664 cycle_t cycle_last;
665
666
667 azx_dev = get_azx_dev(substream);
668 cycle_last = azx_dev->azx_tc.cycle_last;
669
670 snd_pcm_group_for_each_entry(s, substream) {
671 if (s->pcm->card != substream->pcm->card)
672 continue;
673 azx_timecounter_init(s, 1, cycle_last);
674 }
675 }
676 }
677 spin_unlock(&chip->reg_lock);
678 return 0;
679}
680
681unsigned int azx_get_pos_lpib(struct azx *chip, struct azx_dev *azx_dev)
682{
683 return azx_sd_readl(chip, azx_dev, SD_LPIB);
684}
685EXPORT_SYMBOL_GPL(azx_get_pos_lpib);
686
687unsigned int azx_get_pos_posbuf(struct azx *chip, struct azx_dev *azx_dev)
688{
689 return le32_to_cpu(*azx_dev->posbuf);
690}
691EXPORT_SYMBOL_GPL(azx_get_pos_posbuf);
692
693unsigned int azx_get_position(struct azx *chip,
694 struct azx_dev *azx_dev)
695{
696 struct snd_pcm_substream *substream = azx_dev->substream;
697 unsigned int pos;
698 int stream = substream->stream;
699 int delay = 0;
700
701 if (chip->get_position[stream])
702 pos = chip->get_position[stream](chip, azx_dev);
703 else
704 pos = azx_get_pos_posbuf(chip, azx_dev);
705
706 if (pos >= azx_dev->bufsize)
707 pos = 0;
708
709 if (substream->runtime) {
710 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
711 struct hda_pcm_stream *hinfo = apcm->hinfo[stream];
712
713 if (chip->get_delay[stream])
714 delay += chip->get_delay[stream](chip, azx_dev, pos);
715 if (hinfo->ops.get_delay)
716 delay += hinfo->ops.get_delay(hinfo, apcm->codec,
717 substream);
718 substream->runtime->delay = delay;
719 }
720
721 trace_azx_get_position(chip, azx_dev, pos, delay);
722 return pos;
723}
724EXPORT_SYMBOL_GPL(azx_get_position);
725
726static snd_pcm_uframes_t azx_pcm_pointer(struct snd_pcm_substream *substream)
727{
728 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
729 struct azx *chip = apcm->chip;
730 struct azx_dev *azx_dev = get_azx_dev(substream);
731 return bytes_to_frames(substream->runtime,
732 azx_get_position(chip, azx_dev));
733}
734
735static int azx_get_wallclock_tstamp(struct snd_pcm_substream *substream,
736 struct timespec *ts)
737{
738 struct azx_dev *azx_dev = get_azx_dev(substream);
739 u64 nsec;
740
741 nsec = timecounter_read(&azx_dev->azx_tc);
742 nsec = div_u64(nsec, 3);
743 nsec = azx_adjust_codec_delay(substream, nsec);
744
745 *ts = ns_to_timespec(nsec);
746
747 return 0;
748}
749
750static struct snd_pcm_hardware azx_pcm_hw = {
751 .info = (SNDRV_PCM_INFO_MMAP |
752 SNDRV_PCM_INFO_INTERLEAVED |
753 SNDRV_PCM_INFO_BLOCK_TRANSFER |
754 SNDRV_PCM_INFO_MMAP_VALID |
755
756
757 SNDRV_PCM_INFO_PAUSE |
758 SNDRV_PCM_INFO_SYNC_START |
759 SNDRV_PCM_INFO_HAS_WALL_CLOCK |
760 SNDRV_PCM_INFO_NO_PERIOD_WAKEUP),
761 .formats = SNDRV_PCM_FMTBIT_S16_LE,
762 .rates = SNDRV_PCM_RATE_48000,
763 .rate_min = 48000,
764 .rate_max = 48000,
765 .channels_min = 2,
766 .channels_max = 2,
767 .buffer_bytes_max = AZX_MAX_BUF_SIZE,
768 .period_bytes_min = 128,
769 .period_bytes_max = AZX_MAX_BUF_SIZE / 2,
770 .periods_min = 2,
771 .periods_max = AZX_MAX_FRAG,
772 .fifo_size = 0,
773};
774
775static int azx_pcm_open(struct snd_pcm_substream *substream)
776{
777 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
778 struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream];
779 struct azx *chip = apcm->chip;
780 struct azx_dev *azx_dev;
781 struct snd_pcm_runtime *runtime = substream->runtime;
782 unsigned long flags;
783 int err;
784 int buff_step;
785
786 mutex_lock(&chip->open_mutex);
787 azx_dev = azx_assign_device(chip, substream);
788 if (azx_dev == NULL) {
789 mutex_unlock(&chip->open_mutex);
790 return -EBUSY;
791 }
792 runtime->hw = azx_pcm_hw;
793 runtime->hw.channels_min = hinfo->channels_min;
794 runtime->hw.channels_max = hinfo->channels_max;
795 runtime->hw.formats = hinfo->formats;
796 runtime->hw.rates = hinfo->rates;
797 snd_pcm_limit_hw_rates(runtime);
798 snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS);
799
800
801 snd_pcm_hw_constraint_minmax(runtime, SNDRV_PCM_HW_PARAM_BUFFER_TIME,
802 20,
803 178000000);
804
805 if (chip->align_buffer_size)
806
807
808
809
810
811
812 buff_step = 128;
813 else
814
815
816
817
818 buff_step = 4;
819
820 snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_BUFFER_BYTES,
821 buff_step);
822 snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_BYTES,
823 buff_step);
824 snd_hda_power_up_d3wait(apcm->codec);
825 err = hinfo->ops.open(hinfo, apcm->codec, substream);
826 if (err < 0) {
827 azx_release_device(azx_dev);
828 snd_hda_power_down(apcm->codec);
829 mutex_unlock(&chip->open_mutex);
830 return err;
831 }
832 snd_pcm_limit_hw_rates(runtime);
833
834 if (snd_BUG_ON(!runtime->hw.channels_min) ||
835 snd_BUG_ON(!runtime->hw.channels_max) ||
836 snd_BUG_ON(!runtime->hw.formats) ||
837 snd_BUG_ON(!runtime->hw.rates)) {
838 azx_release_device(azx_dev);
839 hinfo->ops.close(hinfo, apcm->codec, substream);
840 snd_hda_power_down(apcm->codec);
841 mutex_unlock(&chip->open_mutex);
842 return -EINVAL;
843 }
844
845
846
847 if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
848 runtime->hw.info &= ~SNDRV_PCM_INFO_HAS_WALL_CLOCK;
849
850 spin_lock_irqsave(&chip->reg_lock, flags);
851 azx_dev->substream = substream;
852 azx_dev->running = 0;
853 spin_unlock_irqrestore(&chip->reg_lock, flags);
854
855 runtime->private_data = azx_dev;
856 snd_pcm_set_sync(substream);
857 mutex_unlock(&chip->open_mutex);
858 return 0;
859}
860
861static int azx_pcm_mmap(struct snd_pcm_substream *substream,
862 struct vm_area_struct *area)
863{
864 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
865 struct azx *chip = apcm->chip;
866 if (chip->ops->pcm_mmap_prepare)
867 chip->ops->pcm_mmap_prepare(substream, area);
868 return snd_pcm_lib_default_mmap(substream, area);
869}
870
871static struct snd_pcm_ops azx_pcm_ops = {
872 .open = azx_pcm_open,
873 .close = azx_pcm_close,
874 .ioctl = snd_pcm_lib_ioctl,
875 .hw_params = azx_pcm_hw_params,
876 .hw_free = azx_pcm_hw_free,
877 .prepare = azx_pcm_prepare,
878 .trigger = azx_pcm_trigger,
879 .pointer = azx_pcm_pointer,
880 .wall_clock = azx_get_wallclock_tstamp,
881 .mmap = azx_pcm_mmap,
882 .page = snd_pcm_sgbuf_ops_page,
883};
884
885static void azx_pcm_free(struct snd_pcm *pcm)
886{
887 struct azx_pcm *apcm = pcm->private_data;
888 if (apcm) {
889 list_del(&apcm->list);
890 kfree(apcm);
891 }
892}
893
894#define MAX_PREALLOC_SIZE (32 * 1024 * 1024)
895
896static int azx_attach_pcm_stream(struct hda_bus *bus, struct hda_codec *codec,
897 struct hda_pcm *cpcm)
898{
899 struct azx *chip = bus->private_data;
900 struct snd_pcm *pcm;
901 struct azx_pcm *apcm;
902 int pcm_dev = cpcm->device;
903 unsigned int size;
904 int s, err;
905
906 list_for_each_entry(apcm, &chip->pcm_list, list) {
907 if (apcm->pcm->device == pcm_dev) {
908 dev_err(chip->card->dev, "PCM %d already exists\n",
909 pcm_dev);
910 return -EBUSY;
911 }
912 }
913 err = snd_pcm_new(chip->card, cpcm->name, pcm_dev,
914 cpcm->stream[SNDRV_PCM_STREAM_PLAYBACK].substreams,
915 cpcm->stream[SNDRV_PCM_STREAM_CAPTURE].substreams,
916 &pcm);
917 if (err < 0)
918 return err;
919 strlcpy(pcm->name, cpcm->name, sizeof(pcm->name));
920 apcm = kzalloc(sizeof(*apcm), GFP_KERNEL);
921 if (apcm == NULL)
922 return -ENOMEM;
923 apcm->chip = chip;
924 apcm->pcm = pcm;
925 apcm->codec = codec;
926 pcm->private_data = apcm;
927 pcm->private_free = azx_pcm_free;
928 if (cpcm->pcm_type == HDA_PCM_TYPE_MODEM)
929 pcm->dev_class = SNDRV_PCM_CLASS_MODEM;
930 list_add_tail(&apcm->list, &chip->pcm_list);
931 cpcm->pcm = pcm;
932 for (s = 0; s < 2; s++) {
933 apcm->hinfo[s] = &cpcm->stream[s];
934 if (cpcm->stream[s].substreams)
935 snd_pcm_set_ops(pcm, s, &azx_pcm_ops);
936 }
937
938 size = CONFIG_SND_HDA_PREALLOC_SIZE * 1024;
939 if (size > MAX_PREALLOC_SIZE)
940 size = MAX_PREALLOC_SIZE;
941 snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV_SG,
942 chip->card->dev,
943 size, MAX_PREALLOC_SIZE);
944
945 for (s = 0; s < 2; s++)
946 pcm->streams[s].dev.parent = &codec->dev;
947 return 0;
948}
949
950
951
952
953static int azx_alloc_cmd_io(struct azx *chip)
954{
955 int err;
956
957
958 err = chip->ops->dma_alloc_pages(chip, SNDRV_DMA_TYPE_DEV,
959 PAGE_SIZE, &chip->rb);
960 if (err < 0)
961 dev_err(chip->card->dev, "cannot allocate CORB/RIRB\n");
962 return err;
963}
964
965static void azx_init_cmd_io(struct azx *chip)
966{
967 int timeout;
968
969 spin_lock_irq(&chip->reg_lock);
970
971 chip->corb.addr = chip->rb.addr;
972 chip->corb.buf = (u32 *)chip->rb.area;
973 azx_writel(chip, CORBLBASE, (u32)chip->corb.addr);
974 azx_writel(chip, CORBUBASE, upper_32_bits(chip->corb.addr));
975
976
977 azx_writeb(chip, CORBSIZE, 0x02);
978
979 azx_writew(chip, CORBWP, 0);
980
981
982 azx_writew(chip, CORBRP, AZX_CORBRP_RST);
983 if (!(chip->driver_caps & AZX_DCAPS_CORBRP_SELF_CLEAR)) {
984 for (timeout = 1000; timeout > 0; timeout--) {
985 if ((azx_readw(chip, CORBRP) & AZX_CORBRP_RST) == AZX_CORBRP_RST)
986 break;
987 udelay(1);
988 }
989 if (timeout <= 0)
990 dev_err(chip->card->dev, "CORB reset timeout#1, CORBRP = %d\n",
991 azx_readw(chip, CORBRP));
992
993 azx_writew(chip, CORBRP, 0);
994 for (timeout = 1000; timeout > 0; timeout--) {
995 if (azx_readw(chip, CORBRP) == 0)
996 break;
997 udelay(1);
998 }
999 if (timeout <= 0)
1000 dev_err(chip->card->dev, "CORB reset timeout#2, CORBRP = %d\n",
1001 azx_readw(chip, CORBRP));
1002 }
1003
1004
1005 azx_writeb(chip, CORBCTL, AZX_CORBCTL_RUN);
1006
1007
1008 chip->rirb.addr = chip->rb.addr + 2048;
1009 chip->rirb.buf = (u32 *)(chip->rb.area + 2048);
1010 chip->rirb.wp = chip->rirb.rp = 0;
1011 memset(chip->rirb.cmds, 0, sizeof(chip->rirb.cmds));
1012 azx_writel(chip, RIRBLBASE, (u32)chip->rirb.addr);
1013 azx_writel(chip, RIRBUBASE, upper_32_bits(chip->rirb.addr));
1014
1015
1016 azx_writeb(chip, RIRBSIZE, 0x02);
1017
1018 azx_writew(chip, RIRBWP, AZX_RIRBWP_RST);
1019
1020 if (chip->driver_caps & AZX_DCAPS_CTX_WORKAROUND)
1021 azx_writew(chip, RINTCNT, 0xc0);
1022 else
1023 azx_writew(chip, RINTCNT, 1);
1024
1025 azx_writeb(chip, RIRBCTL, AZX_RBCTL_DMA_EN | AZX_RBCTL_IRQ_EN);
1026 spin_unlock_irq(&chip->reg_lock);
1027}
1028
1029static void azx_free_cmd_io(struct azx *chip)
1030{
1031 spin_lock_irq(&chip->reg_lock);
1032
1033 azx_writeb(chip, RIRBCTL, 0);
1034 azx_writeb(chip, CORBCTL, 0);
1035 spin_unlock_irq(&chip->reg_lock);
1036}
1037
1038static unsigned int azx_command_addr(u32 cmd)
1039{
1040 unsigned int addr = cmd >> 28;
1041
1042 if (addr >= AZX_MAX_CODECS) {
1043 snd_BUG();
1044 addr = 0;
1045 }
1046
1047 return addr;
1048}
1049
1050
1051static int azx_corb_send_cmd(struct hda_bus *bus, u32 val)
1052{
1053 struct azx *chip = bus->private_data;
1054 unsigned int addr = azx_command_addr(val);
1055 unsigned int wp, rp;
1056
1057 spin_lock_irq(&chip->reg_lock);
1058
1059
1060 wp = azx_readw(chip, CORBWP);
1061 if (wp == 0xffff) {
1062
1063 spin_unlock_irq(&chip->reg_lock);
1064 return -EIO;
1065 }
1066 wp++;
1067 wp %= AZX_MAX_CORB_ENTRIES;
1068
1069 rp = azx_readw(chip, CORBRP);
1070 if (wp == rp) {
1071
1072 spin_unlock_irq(&chip->reg_lock);
1073 return -EAGAIN;
1074 }
1075
1076 chip->rirb.cmds[addr]++;
1077 chip->corb.buf[wp] = cpu_to_le32(val);
1078 azx_writew(chip, CORBWP, wp);
1079
1080 spin_unlock_irq(&chip->reg_lock);
1081
1082 return 0;
1083}
1084
1085#define AZX_RIRB_EX_UNSOL_EV (1<<4)
1086
1087
1088static void azx_update_rirb(struct azx *chip)
1089{
1090 unsigned int rp, wp;
1091 unsigned int addr;
1092 u32 res, res_ex;
1093
1094 wp = azx_readw(chip, RIRBWP);
1095 if (wp == 0xffff) {
1096
1097 return;
1098 }
1099
1100 if (wp == chip->rirb.wp)
1101 return;
1102 chip->rirb.wp = wp;
1103
1104 while (chip->rirb.rp != wp) {
1105 chip->rirb.rp++;
1106 chip->rirb.rp %= AZX_MAX_RIRB_ENTRIES;
1107
1108 rp = chip->rirb.rp << 1;
1109 res_ex = le32_to_cpu(chip->rirb.buf[rp + 1]);
1110 res = le32_to_cpu(chip->rirb.buf[rp]);
1111 addr = res_ex & 0xf;
1112 if ((addr >= AZX_MAX_CODECS) || !(chip->codec_mask & (1 << addr))) {
1113 dev_err(chip->card->dev, "spurious response %#x:%#x, rp = %d, wp = %d",
1114 res, res_ex,
1115 chip->rirb.rp, wp);
1116 snd_BUG();
1117 } else if (res_ex & AZX_RIRB_EX_UNSOL_EV)
1118 snd_hda_queue_unsol_event(chip->bus, res, res_ex);
1119 else if (chip->rirb.cmds[addr]) {
1120 chip->rirb.res[addr] = res;
1121 smp_wmb();
1122 chip->rirb.cmds[addr]--;
1123 } else if (printk_ratelimit()) {
1124 dev_err(chip->card->dev, "spurious response %#x:%#x, last cmd=%#08x\n",
1125 res, res_ex,
1126 chip->last_cmd[addr]);
1127 }
1128 }
1129}
1130
1131
1132static unsigned int azx_rirb_get_response(struct hda_bus *bus,
1133 unsigned int addr)
1134{
1135 struct azx *chip = bus->private_data;
1136 unsigned long timeout;
1137 unsigned long loopcounter;
1138 int do_poll = 0;
1139
1140 again:
1141 timeout = jiffies + msecs_to_jiffies(1000);
1142
1143 for (loopcounter = 0;; loopcounter++) {
1144 if (chip->polling_mode || do_poll) {
1145 spin_lock_irq(&chip->reg_lock);
1146 azx_update_rirb(chip);
1147 spin_unlock_irq(&chip->reg_lock);
1148 }
1149 if (!chip->rirb.cmds[addr]) {
1150 smp_rmb();
1151 bus->rirb_error = 0;
1152
1153 if (!do_poll)
1154 chip->poll_count = 0;
1155 return chip->rirb.res[addr];
1156 }
1157 if (time_after(jiffies, timeout))
1158 break;
1159 if (bus->needs_damn_long_delay || loopcounter > 3000)
1160 msleep(2);
1161 else {
1162 udelay(10);
1163 cond_resched();
1164 }
1165 }
1166
1167 if (bus->no_response_fallback)
1168 return -1;
1169
1170 if (!chip->polling_mode && chip->poll_count < 2) {
1171 dev_dbg(chip->card->dev,
1172 "azx_get_response timeout, polling the codec once: last cmd=0x%08x\n",
1173 chip->last_cmd[addr]);
1174 do_poll = 1;
1175 chip->poll_count++;
1176 goto again;
1177 }
1178
1179
1180 if (!chip->polling_mode) {
1181 dev_warn(chip->card->dev,
1182 "azx_get_response timeout, switching to polling mode: last cmd=0x%08x\n",
1183 chip->last_cmd[addr]);
1184 chip->polling_mode = 1;
1185 goto again;
1186 }
1187
1188 if (chip->msi) {
1189 dev_warn(chip->card->dev,
1190 "No response from codec, disabling MSI: last cmd=0x%08x\n",
1191 chip->last_cmd[addr]);
1192 if (chip->ops->disable_msi_reset_irq(chip) &&
1193 chip->ops->disable_msi_reset_irq(chip) < 0) {
1194 bus->rirb_error = 1;
1195 return -1;
1196 }
1197 goto again;
1198 }
1199
1200 if (chip->probing) {
1201
1202
1203
1204
1205 return -1;
1206 }
1207
1208
1209
1210
1211 bus->rirb_error = 1;
1212 if (bus->allow_bus_reset && !bus->response_reset && !bus->in_reset) {
1213 bus->response_reset = 1;
1214 return -1;
1215 }
1216
1217 dev_err(chip->card->dev,
1218 "azx_get_response timeout, switching to single_cmd mode: last cmd=0x%08x\n",
1219 chip->last_cmd[addr]);
1220 chip->single_cmd = 1;
1221 bus->response_reset = 0;
1222
1223 azx_free_cmd_io(chip);
1224
1225 azx_writel(chip, GCTL, azx_readl(chip, GCTL) & ~AZX_GCTL_UNSOL);
1226 return -1;
1227}
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240static int azx_single_wait_for_response(struct azx *chip, unsigned int addr)
1241{
1242 int timeout = 50;
1243
1244 while (timeout--) {
1245
1246 if (azx_readw(chip, IRS) & AZX_IRS_VALID) {
1247
1248 chip->rirb.res[addr] = azx_readl(chip, IR);
1249 return 0;
1250 }
1251 udelay(1);
1252 }
1253 if (printk_ratelimit())
1254 dev_dbg(chip->card->dev, "get_response timeout: IRS=0x%x\n",
1255 azx_readw(chip, IRS));
1256 chip->rirb.res[addr] = -1;
1257 return -EIO;
1258}
1259
1260
1261static int azx_single_send_cmd(struct hda_bus *bus, u32 val)
1262{
1263 struct azx *chip = bus->private_data;
1264 unsigned int addr = azx_command_addr(val);
1265 int timeout = 50;
1266
1267 bus->rirb_error = 0;
1268 while (timeout--) {
1269
1270 if (!((azx_readw(chip, IRS) & AZX_IRS_BUSY))) {
1271
1272 azx_writew(chip, IRS, azx_readw(chip, IRS) |
1273 AZX_IRS_VALID);
1274 azx_writel(chip, IC, val);
1275 azx_writew(chip, IRS, azx_readw(chip, IRS) |
1276 AZX_IRS_BUSY);
1277 return azx_single_wait_for_response(chip, addr);
1278 }
1279 udelay(1);
1280 }
1281 if (printk_ratelimit())
1282 dev_dbg(chip->card->dev,
1283 "send_cmd timeout: IRS=0x%x, val=0x%x\n",
1284 azx_readw(chip, IRS), val);
1285 return -EIO;
1286}
1287
1288
1289static unsigned int azx_single_get_response(struct hda_bus *bus,
1290 unsigned int addr)
1291{
1292 struct azx *chip = bus->private_data;
1293 return chip->rirb.res[addr];
1294}
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304static int azx_send_cmd(struct hda_bus *bus, unsigned int val)
1305{
1306 struct azx *chip = bus->private_data;
1307
1308 if (chip->disabled)
1309 return 0;
1310 chip->last_cmd[azx_command_addr(val)] = val;
1311 if (chip->single_cmd)
1312 return azx_single_send_cmd(bus, val);
1313 else
1314 return azx_corb_send_cmd(bus, val);
1315}
1316
1317
1318static unsigned int azx_get_response(struct hda_bus *bus,
1319 unsigned int addr)
1320{
1321 struct azx *chip = bus->private_data;
1322 if (chip->disabled)
1323 return 0;
1324 if (chip->single_cmd)
1325 return azx_single_get_response(bus, addr);
1326 else
1327 return azx_rirb_get_response(bus, addr);
1328}
1329
1330#ifdef CONFIG_SND_HDA_DSP_LOADER
1331
1332
1333
1334
1335
1336static struct azx_dev *
1337azx_get_dsp_loader_dev(struct azx *chip)
1338{
1339 return &chip->azx_dev[chip->playback_index_offset];
1340}
1341
1342static int azx_load_dsp_prepare(struct hda_bus *bus, unsigned int format,
1343 unsigned int byte_size,
1344 struct snd_dma_buffer *bufp)
1345{
1346 u32 *bdl;
1347 struct azx *chip = bus->private_data;
1348 struct azx_dev *azx_dev;
1349 int err;
1350
1351 azx_dev = azx_get_dsp_loader_dev(chip);
1352
1353 dsp_lock(azx_dev);
1354 spin_lock_irq(&chip->reg_lock);
1355 if (azx_dev->running || azx_dev->locked) {
1356 spin_unlock_irq(&chip->reg_lock);
1357 err = -EBUSY;
1358 goto unlock;
1359 }
1360 azx_dev->prepared = 0;
1361 chip->saved_azx_dev = *azx_dev;
1362 azx_dev->locked = 1;
1363 spin_unlock_irq(&chip->reg_lock);
1364
1365 err = chip->ops->dma_alloc_pages(chip, SNDRV_DMA_TYPE_DEV_SG,
1366 byte_size, bufp);
1367 if (err < 0)
1368 goto err_alloc;
1369
1370 azx_dev->bufsize = byte_size;
1371 azx_dev->period_bytes = byte_size;
1372 azx_dev->format_val = format;
1373
1374 azx_stream_reset(chip, azx_dev);
1375
1376
1377 azx_sd_writel(chip, azx_dev, SD_BDLPL, 0);
1378 azx_sd_writel(chip, azx_dev, SD_BDLPU, 0);
1379
1380 azx_dev->frags = 0;
1381 bdl = (u32 *)azx_dev->bdl.area;
1382 err = setup_bdle(chip, bufp, azx_dev, &bdl, 0, byte_size, 0);
1383 if (err < 0)
1384 goto error;
1385
1386 azx_setup_controller(chip, azx_dev);
1387 dsp_unlock(azx_dev);
1388 return azx_dev->stream_tag;
1389
1390 error:
1391 chip->ops->dma_free_pages(chip, bufp);
1392 err_alloc:
1393 spin_lock_irq(&chip->reg_lock);
1394 if (azx_dev->opened)
1395 *azx_dev = chip->saved_azx_dev;
1396 azx_dev->locked = 0;
1397 spin_unlock_irq(&chip->reg_lock);
1398 unlock:
1399 dsp_unlock(azx_dev);
1400 return err;
1401}
1402
1403static void azx_load_dsp_trigger(struct hda_bus *bus, bool start)
1404{
1405 struct azx *chip = bus->private_data;
1406 struct azx_dev *azx_dev = azx_get_dsp_loader_dev(chip);
1407
1408 if (start)
1409 azx_stream_start(chip, azx_dev);
1410 else
1411 azx_stream_stop(chip, azx_dev);
1412 azx_dev->running = start;
1413}
1414
1415static void azx_load_dsp_cleanup(struct hda_bus *bus,
1416 struct snd_dma_buffer *dmab)
1417{
1418 struct azx *chip = bus->private_data;
1419 struct azx_dev *azx_dev = azx_get_dsp_loader_dev(chip);
1420
1421 if (!dmab->area || !azx_dev->locked)
1422 return;
1423
1424 dsp_lock(azx_dev);
1425
1426 azx_sd_writel(chip, azx_dev, SD_BDLPL, 0);
1427 azx_sd_writel(chip, azx_dev, SD_BDLPU, 0);
1428 azx_sd_writel(chip, azx_dev, SD_CTL, 0);
1429 azx_dev->bufsize = 0;
1430 azx_dev->period_bytes = 0;
1431 azx_dev->format_val = 0;
1432
1433 chip->ops->dma_free_pages(chip, dmab);
1434 dmab->area = NULL;
1435
1436 spin_lock_irq(&chip->reg_lock);
1437 if (azx_dev->opened)
1438 *azx_dev = chip->saved_azx_dev;
1439 azx_dev->locked = 0;
1440 spin_unlock_irq(&chip->reg_lock);
1441 dsp_unlock(azx_dev);
1442}
1443#endif
1444
1445int azx_alloc_stream_pages(struct azx *chip)
1446{
1447 int i, err;
1448 struct snd_card *card = chip->card;
1449
1450 for (i = 0; i < chip->num_streams; i++) {
1451 dsp_lock_init(&chip->azx_dev[i]);
1452
1453 err = chip->ops->dma_alloc_pages(chip, SNDRV_DMA_TYPE_DEV,
1454 BDL_SIZE,
1455 &chip->azx_dev[i].bdl);
1456 if (err < 0) {
1457 dev_err(card->dev, "cannot allocate BDL\n");
1458 return -ENOMEM;
1459 }
1460 }
1461
1462 err = chip->ops->dma_alloc_pages(chip, SNDRV_DMA_TYPE_DEV,
1463 chip->num_streams * 8, &chip->posbuf);
1464 if (err < 0) {
1465 dev_err(card->dev, "cannot allocate posbuf\n");
1466 return -ENOMEM;
1467 }
1468
1469
1470 err = azx_alloc_cmd_io(chip);
1471 if (err < 0)
1472 return err;
1473 return 0;
1474}
1475EXPORT_SYMBOL_GPL(azx_alloc_stream_pages);
1476
1477void azx_free_stream_pages(struct azx *chip)
1478{
1479 int i;
1480 if (chip->azx_dev) {
1481 for (i = 0; i < chip->num_streams; i++)
1482 if (chip->azx_dev[i].bdl.area)
1483 chip->ops->dma_free_pages(
1484 chip, &chip->azx_dev[i].bdl);
1485 }
1486 if (chip->rb.area)
1487 chip->ops->dma_free_pages(chip, &chip->rb);
1488 if (chip->posbuf.area)
1489 chip->ops->dma_free_pages(chip, &chip->posbuf);
1490}
1491EXPORT_SYMBOL_GPL(azx_free_stream_pages);
1492
1493
1494
1495
1496
1497
1498void azx_enter_link_reset(struct azx *chip)
1499{
1500 unsigned long timeout;
1501
1502
1503 azx_writel(chip, GCTL, azx_readl(chip, GCTL) & ~AZX_GCTL_RESET);
1504
1505 timeout = jiffies + msecs_to_jiffies(100);
1506 while ((azx_readb(chip, GCTL) & AZX_GCTL_RESET) &&
1507 time_before(jiffies, timeout))
1508 usleep_range(500, 1000);
1509}
1510EXPORT_SYMBOL_GPL(azx_enter_link_reset);
1511
1512
1513static void azx_exit_link_reset(struct azx *chip)
1514{
1515 unsigned long timeout;
1516
1517 azx_writeb(chip, GCTL, azx_readb(chip, GCTL) | AZX_GCTL_RESET);
1518
1519 timeout = jiffies + msecs_to_jiffies(100);
1520 while (!azx_readb(chip, GCTL) &&
1521 time_before(jiffies, timeout))
1522 usleep_range(500, 1000);
1523}
1524
1525
1526static int azx_reset(struct azx *chip, bool full_reset)
1527{
1528 if (!full_reset)
1529 goto __skip;
1530
1531
1532 azx_writew(chip, STATESTS, STATESTS_INT_MASK);
1533
1534
1535 azx_enter_link_reset(chip);
1536
1537
1538
1539
1540 usleep_range(500, 1000);
1541
1542
1543 azx_exit_link_reset(chip);
1544
1545
1546 usleep_range(1000, 1200);
1547
1548 __skip:
1549
1550 if (!azx_readb(chip, GCTL)) {
1551 dev_dbg(chip->card->dev, "azx_reset: controller not ready!\n");
1552 return -EBUSY;
1553 }
1554
1555
1556 if (!chip->single_cmd)
1557 azx_writel(chip, GCTL, azx_readl(chip, GCTL) |
1558 AZX_GCTL_UNSOL);
1559
1560
1561 if (!chip->codec_mask) {
1562 chip->codec_mask = azx_readw(chip, STATESTS);
1563 dev_dbg(chip->card->dev, "codec_mask = 0x%x\n",
1564 chip->codec_mask);
1565 }
1566
1567 return 0;
1568}
1569
1570
1571static void azx_int_enable(struct azx *chip)
1572{
1573
1574 azx_writel(chip, INTCTL, azx_readl(chip, INTCTL) |
1575 AZX_INT_CTRL_EN | AZX_INT_GLOBAL_EN);
1576}
1577
1578
1579static void azx_int_disable(struct azx *chip)
1580{
1581 int i;
1582
1583
1584 for (i = 0; i < chip->num_streams; i++) {
1585 struct azx_dev *azx_dev = &chip->azx_dev[i];
1586 azx_sd_writeb(chip, azx_dev, SD_CTL,
1587 azx_sd_readb(chip, azx_dev, SD_CTL) &
1588 ~SD_INT_MASK);
1589 }
1590
1591
1592 azx_writeb(chip, INTCTL, 0);
1593
1594
1595 azx_writel(chip, INTCTL, azx_readl(chip, INTCTL) &
1596 ~(AZX_INT_CTRL_EN | AZX_INT_GLOBAL_EN));
1597}
1598
1599
1600static void azx_int_clear(struct azx *chip)
1601{
1602 int i;
1603
1604
1605 for (i = 0; i < chip->num_streams; i++) {
1606 struct azx_dev *azx_dev = &chip->azx_dev[i];
1607 azx_sd_writeb(chip, azx_dev, SD_STS, SD_INT_MASK);
1608 }
1609
1610
1611 azx_writew(chip, STATESTS, STATESTS_INT_MASK);
1612
1613
1614 azx_writeb(chip, RIRBSTS, RIRB_INT_MASK);
1615
1616
1617 azx_writel(chip, INTSTS, AZX_INT_CTRL_EN | AZX_INT_ALL_STREAM);
1618}
1619
1620
1621
1622
1623void azx_init_chip(struct azx *chip, bool full_reset)
1624{
1625 if (chip->initialized)
1626 return;
1627
1628
1629 azx_reset(chip, full_reset);
1630
1631
1632 azx_int_clear(chip);
1633 azx_int_enable(chip);
1634
1635
1636 if (!chip->single_cmd)
1637 azx_init_cmd_io(chip);
1638
1639
1640 azx_writel(chip, DPLBASE, (u32)chip->posbuf.addr);
1641 azx_writel(chip, DPUBASE, upper_32_bits(chip->posbuf.addr));
1642
1643 chip->initialized = 1;
1644}
1645EXPORT_SYMBOL_GPL(azx_init_chip);
1646
1647void azx_stop_chip(struct azx *chip)
1648{
1649 if (!chip->initialized)
1650 return;
1651
1652
1653 azx_int_disable(chip);
1654 azx_int_clear(chip);
1655
1656
1657 azx_free_cmd_io(chip);
1658
1659
1660 azx_writel(chip, DPLBASE, 0);
1661 azx_writel(chip, DPUBASE, 0);
1662
1663 chip->initialized = 0;
1664}
1665EXPORT_SYMBOL_GPL(azx_stop_chip);
1666
1667
1668
1669
1670irqreturn_t azx_interrupt(int irq, void *dev_id)
1671{
1672 struct azx *chip = dev_id;
1673 struct azx_dev *azx_dev;
1674 u32 status;
1675 u8 sd_status;
1676 int i;
1677
1678#ifdef CONFIG_PM
1679 if (chip->driver_caps & AZX_DCAPS_PM_RUNTIME)
1680 if (!pm_runtime_active(chip->card->dev))
1681 return IRQ_NONE;
1682#endif
1683
1684 spin_lock(&chip->reg_lock);
1685
1686 if (chip->disabled) {
1687 spin_unlock(&chip->reg_lock);
1688 return IRQ_NONE;
1689 }
1690
1691 status = azx_readl(chip, INTSTS);
1692 if (status == 0 || status == 0xffffffff) {
1693 spin_unlock(&chip->reg_lock);
1694 return IRQ_NONE;
1695 }
1696
1697 for (i = 0; i < chip->num_streams; i++) {
1698 azx_dev = &chip->azx_dev[i];
1699 if (status & azx_dev->sd_int_sta_mask) {
1700 sd_status = azx_sd_readb(chip, azx_dev, SD_STS);
1701 azx_sd_writeb(chip, azx_dev, SD_STS, SD_INT_MASK);
1702 if (!azx_dev->substream || !azx_dev->running ||
1703 !(sd_status & SD_INT_COMPLETE))
1704 continue;
1705
1706 if (!chip->ops->position_check ||
1707 chip->ops->position_check(chip, azx_dev)) {
1708 spin_unlock(&chip->reg_lock);
1709 snd_pcm_period_elapsed(azx_dev->substream);
1710 spin_lock(&chip->reg_lock);
1711 }
1712 }
1713 }
1714
1715
1716 status = azx_readb(chip, RIRBSTS);
1717 if (status & RIRB_INT_MASK) {
1718 if (status & RIRB_INT_RESPONSE) {
1719 if (chip->driver_caps & AZX_DCAPS_RIRB_PRE_DELAY)
1720 udelay(80);
1721 azx_update_rirb(chip);
1722 }
1723 azx_writeb(chip, RIRBSTS, RIRB_INT_MASK);
1724 }
1725
1726 spin_unlock(&chip->reg_lock);
1727
1728 return IRQ_HANDLED;
1729}
1730EXPORT_SYMBOL_GPL(azx_interrupt);
1731
1732
1733
1734
1735
1736
1737
1738
1739static int probe_codec(struct azx *chip, int addr)
1740{
1741 unsigned int cmd = (addr << 28) | (AC_NODE_ROOT << 20) |
1742 (AC_VERB_PARAMETERS << 8) | AC_PAR_VENDOR_ID;
1743 unsigned int res;
1744
1745 mutex_lock(&chip->bus->cmd_mutex);
1746 chip->probing = 1;
1747 azx_send_cmd(chip->bus, cmd);
1748 res = azx_get_response(chip->bus, addr);
1749 chip->probing = 0;
1750 mutex_unlock(&chip->bus->cmd_mutex);
1751 if (res == -1)
1752 return -EIO;
1753 dev_dbg(chip->card->dev, "codec #%d probed OK\n", addr);
1754 return 0;
1755}
1756
1757static void azx_bus_reset(struct hda_bus *bus)
1758{
1759 struct azx *chip = bus->private_data;
1760
1761 bus->in_reset = 1;
1762 azx_stop_chip(chip);
1763 azx_init_chip(chip, true);
1764#ifdef CONFIG_PM
1765 if (chip->initialized) {
1766 struct azx_pcm *p;
1767 list_for_each_entry(p, &chip->pcm_list, list)
1768 snd_pcm_suspend_all(p->pcm);
1769 snd_hda_suspend(chip->bus);
1770 snd_hda_resume(chip->bus);
1771 }
1772#endif
1773 bus->in_reset = 0;
1774}
1775
1776#ifdef CONFIG_PM
1777
1778static void azx_power_notify(struct hda_bus *bus, bool power_up)
1779{
1780 struct azx *chip = bus->private_data;
1781
1782 if (!(chip->driver_caps & AZX_DCAPS_PM_RUNTIME))
1783 return;
1784
1785 if (power_up)
1786 pm_runtime_get_sync(chip->card->dev);
1787 else
1788 pm_runtime_put_sync(chip->card->dev);
1789}
1790#endif
1791
1792static int get_jackpoll_interval(struct azx *chip)
1793{
1794 int i;
1795 unsigned int j;
1796
1797 if (!chip->jackpoll_ms)
1798 return 0;
1799
1800 i = chip->jackpoll_ms[chip->dev_index];
1801 if (i == 0)
1802 return 0;
1803 if (i < 50 || i > 60000)
1804 j = 0;
1805 else
1806 j = msecs_to_jiffies(i);
1807 if (j == 0)
1808 dev_warn(chip->card->dev,
1809 "jackpoll_ms value out of range: %d\n", i);
1810 return j;
1811}
1812
1813
1814int azx_codec_create(struct azx *chip, const char *model,
1815 unsigned int max_slots,
1816 int *power_save_to)
1817{
1818 struct hda_bus_template bus_temp;
1819 int c, codecs, err;
1820
1821 memset(&bus_temp, 0, sizeof(bus_temp));
1822 bus_temp.private_data = chip;
1823 bus_temp.modelname = model;
1824 bus_temp.pci = chip->pci;
1825 bus_temp.ops.command = azx_send_cmd;
1826 bus_temp.ops.get_response = azx_get_response;
1827 bus_temp.ops.attach_pcm = azx_attach_pcm_stream;
1828 bus_temp.ops.bus_reset = azx_bus_reset;
1829#ifdef CONFIG_PM
1830 bus_temp.power_save = power_save_to;
1831 bus_temp.ops.pm_notify = azx_power_notify;
1832#endif
1833#ifdef CONFIG_SND_HDA_DSP_LOADER
1834 bus_temp.ops.load_dsp_prepare = azx_load_dsp_prepare;
1835 bus_temp.ops.load_dsp_trigger = azx_load_dsp_trigger;
1836 bus_temp.ops.load_dsp_cleanup = azx_load_dsp_cleanup;
1837#endif
1838
1839 err = snd_hda_bus_new(chip->card, &bus_temp, &chip->bus);
1840 if (err < 0)
1841 return err;
1842
1843 if (chip->driver_caps & AZX_DCAPS_RIRB_DELAY) {
1844 dev_dbg(chip->card->dev, "Enable delay in RIRB handling\n");
1845 chip->bus->needs_damn_long_delay = 1;
1846 }
1847
1848 codecs = 0;
1849 if (!max_slots)
1850 max_slots = AZX_DEFAULT_CODECS;
1851
1852
1853 for (c = 0; c < max_slots; c++) {
1854 if ((chip->codec_mask & (1 << c)) & chip->codec_probe_mask) {
1855 if (probe_codec(chip, c) < 0) {
1856
1857
1858
1859 dev_warn(chip->card->dev,
1860 "Codec #%d probe error; disabling it...\n", c);
1861 chip->codec_mask &= ~(1 << c);
1862
1863
1864
1865
1866
1867
1868
1869 azx_stop_chip(chip);
1870 azx_init_chip(chip, true);
1871 }
1872 }
1873 }
1874
1875
1876
1877
1878
1879 if (chip->driver_caps & AZX_DCAPS_SYNC_WRITE) {
1880 dev_dbg(chip->card->dev, "Enable sync_write for stable communication\n");
1881 chip->bus->sync_write = 1;
1882 chip->bus->allow_bus_reset = 1;
1883 }
1884
1885
1886 for (c = 0; c < max_slots; c++) {
1887 if ((chip->codec_mask & (1 << c)) & chip->codec_probe_mask) {
1888 struct hda_codec *codec;
1889 err = snd_hda_codec_new(chip->bus, c, &codec);
1890 if (err < 0)
1891 continue;
1892 codec->jackpoll_interval = get_jackpoll_interval(chip);
1893 codec->beep_mode = chip->beep_mode;
1894 codecs++;
1895 }
1896 }
1897 if (!codecs) {
1898 dev_err(chip->card->dev, "no codecs initialized\n");
1899 return -ENXIO;
1900 }
1901 return 0;
1902}
1903EXPORT_SYMBOL_GPL(azx_codec_create);
1904
1905
1906int azx_codec_configure(struct azx *chip)
1907{
1908 struct hda_codec *codec;
1909 list_for_each_entry(codec, &chip->bus->codec_list, list) {
1910 snd_hda_codec_configure(codec);
1911 }
1912 return 0;
1913}
1914EXPORT_SYMBOL_GPL(azx_codec_configure);
1915
1916
1917int azx_mixer_create(struct azx *chip)
1918{
1919 return snd_hda_build_controls(chip->bus);
1920}
1921EXPORT_SYMBOL_GPL(azx_mixer_create);
1922
1923
1924static bool is_input_stream(struct azx *chip, unsigned char index)
1925{
1926 return (index >= chip->capture_index_offset &&
1927 index < chip->capture_index_offset + chip->capture_streams);
1928}
1929
1930
1931int azx_init_stream(struct azx *chip)
1932{
1933 int i;
1934 int in_stream_tag = 0;
1935 int out_stream_tag = 0;
1936
1937
1938
1939
1940
1941 for (i = 0; i < chip->num_streams; i++) {
1942 struct azx_dev *azx_dev = &chip->azx_dev[i];
1943 azx_dev->posbuf = (u32 __iomem *)(chip->posbuf.area + i * 8);
1944
1945 azx_dev->sd_addr = chip->remap_addr + (0x20 * i + 0x80);
1946
1947 azx_dev->sd_int_sta_mask = 1 << i;
1948 azx_dev->index = i;
1949
1950
1951
1952
1953
1954
1955
1956 if (chip->driver_caps & AZX_DCAPS_SEPARATE_STREAM_TAG)
1957 azx_dev->stream_tag =
1958 is_input_stream(chip, i) ?
1959 ++in_stream_tag :
1960 ++out_stream_tag;
1961 else
1962 azx_dev->stream_tag = i + 1;
1963 }
1964
1965 return 0;
1966}
1967EXPORT_SYMBOL_GPL(azx_init_stream);
1968
1969
1970
1971
1972static int azx_halt(struct notifier_block *nb, unsigned long event, void *buf)
1973{
1974 struct azx *chip = container_of(nb, struct azx, reboot_notifier);
1975 snd_hda_bus_reboot_notify(chip->bus);
1976 azx_stop_chip(chip);
1977 return NOTIFY_OK;
1978}
1979
1980void azx_notifier_register(struct azx *chip)
1981{
1982 chip->reboot_notifier.notifier_call = azx_halt;
1983 register_reboot_notifier(&chip->reboot_notifier);
1984}
1985EXPORT_SYMBOL_GPL(azx_notifier_register);
1986
1987void azx_notifier_unregister(struct azx *chip)
1988{
1989 if (chip->reboot_notifier.notifier_call)
1990 unregister_reboot_notifier(&chip->reboot_notifier);
1991}
1992EXPORT_SYMBOL_GPL(azx_notifier_unregister);
1993
1994MODULE_LICENSE("GPL");
1995MODULE_DESCRIPTION("Common HDA driver functions");
1996