You are here

Add new comment

sl's picture

Hi Rui

This is proving to be tricky....

Want I want to do is use the firewire audio interface (Focusrite Saffire PRO 24) most of time, when this is not available fall back on USB audio interfaces (Behringer U-Control UCA222 and Roland UM-1) and occasionally be lazy and use the internal loudspeakers for playback.

On this naked KXStudio 14.04 installation the following IRQs are available:

simon@simon-Precision-M4300:~$ sudo cat /proc/interrupts
CPU0 CPU1
0: 20606 22313 IO-APIC-edge timer
1: 112 157 IO-APIC-edge i8042
8: 1 0 IO-APIC-edge rtc0
9: 0 1 IO-APIC-fasteoi acpi
12: 75 74 IO-APIC-edge i8042
14: 271 232 IO-APIC-edge ata_piix
15: 0 0 IO-APIC-edge ata_piix
17: 5341 5501 IO-APIC-fasteoi ata_piix
19: 43 48 IO-APIC-fasteoi firewire_ohci, yenta
20: 3260 3567 IO-APIC-fasteoi ehci_hcd:usb2, uhci_hcd:usb3, uhci_hcd:usb5
21: 0 0 IO-APIC-fasteoi uhci_hcd:usb4, uhci_hcd:usb6
22: 41 35 IO-APIC-fasteoi ehci_hcd:usb1, uhci_hcd:usb7
45: 25580 27063 PCI-MSI-edge nouveau
46: 102 103 PCI-MSI-edge snd_hda_intel
47: 13842 3226 PCI-MSI-edge iwl3945
48: 2 1 PCI-MSI-edge eth0
NMI: 40 37 Non-maskable interrupts
LOC: 75327 79526 Local timer interrupts
SPU: 0 0 Spurious interrupts
PMI: 40 37 Performance monitoring interrupts
IWI: 4489 6409 IRQ work interrupts
RTR: 0 0 APIC ICR read retries
RES: 14314 23074 Rescheduling interrupts
CAL: 444 189 Function call interrupts
TLB: 274 261 TLB shootdowns
TRM: 0 0 Thermal event interrupts
THR: 0 0 Threshold APIC interrupts
MCE: 0 0 Machine check exceptions
MCP: 2 2 Machine check polls
ERR: 0
MIS: 0
simon@simon-Precision-M4300:~$

The firewire interface is on IRQ 19 (firewire_ohci driver) - a built in 1394 host controller sitting on a card bus (yenta driver). I am guessing the card bus controller and 1394 host controller are in the same chip.

With all audio interfaces connected (which is not the normal case) the following ALSA compatible sound cards are identified:

simon@simon-Precision-M4300:~$ sudo cat /proc/asound/cards
0 [Intel ]: HDA-Intel - HDA Intel
HDA Intel at 0xfebfc000 irq 46
1 [Loopback ]: Loopback - Loopback
Loopback 1
2 [CODEC ]: USB-Audio - USB Audio CODEC
Burr-Brown from TI USB Audio CODEC at usb-0000:00:1d.1-2, full speed
3 [UM1 ]: USB-Audio - UM-1
EDIROL UM-1 at usb-0000:00:1d.0-1, full speed
simon@simon-Precision-M4300:~$

The following modules are in use:

simon@simon-Precision-M4300:~$ sudo cat /proc/asound/modules
0 snd_hda_intel
1 snd_aloop
2 snd_usb_audio
3 snd_usb_audio
simon@simon-Precision-M4300:~$

The loopback is installed by KXStudio by default and provides an ALSA-JACK bridge for routing jackd non-compliant apps like Adobe's flash player into JACK.

In theory according to http://subversion.ffado.org/wiki/IrqPriorities I need to assign the RTPRIOs as follows:

  • Realtime clock (rtc0) on IRQ 8 => RTPRIO 90 (clock used to generate timed interupts)
  • Cardbus slot (yenta) on IRQ 19 => RTPRIO 88 (higher than the audio card on the bus)
  • Firewire module (firewire_ohci) on IRQ 19 => RTPRIO 86
  • U-Control UCA222 (snd_usb_audio) => RTPRIO 84
  • UM-1 (snd_usb_audio) => RTPRIO 82
  • Internal sound card (snd_hda_intel) on IRQ 46 => RTPRIO 80
  • ALSA-JACK bridge (Loopback) => RTPRIO 78

jackd needs to start at RTPRIO 70

Also I need to get sirq-hrtimer, sirq-timer, sirq-tasklet and sirq-sched at the highest RTPRIOs.

My first thought was to set-up /etc/default/rtirq as follows:

RTIRQ_NAME_LIST="rtc0 yenta firewire snd aloop"
RTIRQ_PRIO_HIGH=90
RTIRQ_PRIO_DECR=2
# RTIRQ_PRIO_LOW=51
RTIRQ_RESET_ALL=0
# RTIRQ_NON_THREADED="rtc0 yenta firewire snd aloop"
RTIRQ_HIGH_LIST="hrtimer timer tasklet sched"

The result is:

simon@simon-Precision-M4300:~$ sudo /etc/init.d/rtirq status

PID CLS RTPRIO NI PRI %CPU STAT COMMAND
77 FF 90 - 130 0.0 S irq/8-rtc0
451 FF 88 - 128 0.0 S irq/19-yenta
615 FF 84 - 124 0.0 S irq/46-snd_hda_
31 FF 50 - 90 0.0 S irq/9-acpi
58 FF 50 - 90 0.0 S irq/14-ata_piix
59 FF 50 - 90 0.0 S irq/15-ata_piix
64 FF 50 - 90 0.2 S irq/17-ata_piix
68 FF 50 - 90 0.0 S irq/22-ehci_hcd
69 FF 50 - 90 0.0 S irq/20-ehci_hcd
70 FF 50 - 90 0.0 S irq/20-uhci_hcd
71 FF 50 - 90 0.0 S irq/21-uhci_hcd
72 FF 50 - 90 0.0 S irq/20-uhci_hcd
73 FF 50 - 90 0.0 S irq/21-uhci_hcd
74 FF 50 - 90 0.0 S irq/22-uhci_hcd
75 FF 50 - 90 0.0 S irq/12-i8042
76 FF 50 - 90 0.0 S irq/1-i8042
161 FF 50 - 90 0.0 S irq/19-firewire
176 FF 50 - 90 0.3 S irq/45-nouveau
626 FF 50 - 90 0.3 S irq/47-iwl3945
1225 FF 50 - 90 0.0 S irq/48-eth0
3 TS - 0 19 0.0 S ksoftirqd/0
20 TS - 0 19 0.0 S ksoftirqd/1

simon@simon-Precision-M4300:~$

Note the firewire host controller was left behind...

So second attempt with:

RTIRQ_NAME_LIST="rtc0 firewire snd aloop"
RTIRQ_PRIO_HIGH=90
RTIRQ_PRIO_DECR=2
# RTIRQ_PRIO_LOW=51
RTIRQ_RESET_ALL=0
# RTIRQ_NON_THREADED="rtc0 firewire snd aloop"
RTIRQ_HIGH_LIST="hrtimer timer tasklet sched"

The result is:

simon@simon-Precision-M4300:~$ sudo /etc/init.d/rtirq status

PID CLS RTPRIO NI PRI %CPU STAT COMMAND
77 FF 90 - 130 0.0 S irq/8-rtc0
149 FF 88 - 128 0.0 S irq/19-firewire
609 FF 86 - 126 0.0 S irq/46-snd_hda_
31 FF 50 - 90 0.0 S irq/9-acpi
58 FF 50 - 90 0.0 S irq/14-ata_piix
59 FF 50 - 90 0.0 S irq/15-ata_piix
64 FF 50 - 90 0.1 S irq/17-ata_piix
68 FF 50 - 90 0.0 S irq/22-ehci_hcd
69 FF 50 - 90 0.0 S irq/20-ehci_hcd
70 FF 50 - 90 0.0 S irq/20-uhci_hcd
71 FF 50 - 90 0.0 S irq/21-uhci_hcd
72 FF 50 - 90 0.0 S irq/20-uhci_hcd
73 FF 50 - 90 0.1 S irq/21-uhci_hcd
74 FF 50 - 90 0.0 S irq/22-uhci_hcd
75 FF 50 - 90 0.0 S irq/12-i8042
76 FF 50 - 90 0.0 S irq/1-i8042
177 FF 50 - 90 0.4 S irq/45-nouveau
447 FF 50 - 90 0.0 S irq/19-yenta
620 FF 50 - 90 0.5 S irq/47-iwl3945
1209 FF 50 - 90 0.0 S irq/48-eth0
3 TS - 0 19 0.1 S ksoftirqd/0
20 TS - 0 19 0.1 S ksoftirqd/1

simon@simon-Precision-M4300:~$

Now the yenta controller is left behind...

Also, the usb audio devices were not picked up, even though "snd" is in the list.

Any ideas?

Cheers, Simon