On Thu, Apr 01, 2010 at 05:37:13PM +0200, Christopher Zimmermann wrote:
> Hi, 
> 
> here's a patch for auich(4). It fixes some issues with SIS 7012 
> and possibly others. But since it relies on correct behaviour of 
> the hardware at some places it needs some testing. Especially try 
> to run something like:
> 
> aucat -l; play test.wav
> 
> right after booting and before anything else is played or 
> recorded.
> 
> the typical output would be:
> 
> auich0: ac97 link rate calibration took 83337 us
> sts=7<dch,celv,lvbci> civ=0 auich0: after calibration and reset
> sts=1<dch> civ=0 auich0: measured ac97 link rate at 47997 Hz,
> will use 48000 Hz auich_trigger_output(ed99000, eda7600, 11776,
> 0xffffffff80271e20, 0xffff80000015dc00, 0xffff80000015dd90)
> sts=1<dch> auich_trigger_pipe: qptr=0
> auich_trigger_input(eda9000, edb7600, 11776, 0xffffffff80272010,
> 0xffff80000015dc00, 0xffff80000015ddb8) sts=1<dch>
> auich_trigger_pipe: qptr=0 auich0: halt_input auich0: halt_output
> 
> Important is the value of sts. dch means "DMA halted" - one 
> should not set AUICH_RR before this bit is set.
> In auich_calibrate() I wait for any of the three bits 
> <dch,celv,lvbci> to be set.
> If something goes wrong here you will see:
> auich0: ac97 link rate timed out %d us sts=%b civ=%d\n"
> 
> If something goes wrong in halt_pipe you will see:
> auich_halt_pipe: halt took %d cycles
> 
> 
> please send me your dmesg if anything goes wrong or if you chip 
> does set the sts flags in another way.
> 

below is the result on the intel chip

> A short summary of the changes:
> 
> - According to specification AUICH_RR may only be set after DMA 
>   is halted (AUICH_DCH is 0 in AUICH_STS). To accomplish this I 
> revived auich_halt_pipe();
> - auich_calibrate() did not clear interrupt and event bits in 
>   AUICH_STS. Do that now. Further it did watch the CIV index 
> counter to see when all samples are processed. I changed it to 
> watch AUICH_STS instead and set LVI=CIV. therefore it won't 
> change the CIV counter.
> - my last patch introduced a small bug in auich_trigger_pipe() I 
>   fixed that.
> 

I think we should put the corresponding chunk in, sooner
than later.

BTW, I start wondering why this calibration exists at all?
do devices running at the wrong rate exist (which would mean
they don't have the proper clock). If so should we start
adding calibration code in all of our audio drivers?

-- Alexandre

OpenBSD 4.7-current (GENERIC) #1: Fri Apr  2 21:17:19 CEST 2010
    a...@poc.localdomain:/usr/src/sys/arch/i386/compile/GENERIC
cpu0: Intel(R) Pentium(R) M processor 1.10GHz ("GenuineIntel" 686-class) 1.10 
GHz
cpu0: 
FPU,V86,DE,PSE,TSC,MSR,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,TM,SBF,EST,TM2
real mem  = 526807040 (502MB)
avail mem = 501723136 (478MB)
mainbus0 at root
bios0 at mainbus0: AT/286+ BIOS, date 09/28/05, BIOS32 rev. 0 @ 0xfd740, SMBIOS 
rev. 2.33 @ 0xe0010 (56 entries)
bios0: vendor IBM version "1UETC8WW (2.03 )" date 09/28/2005
bios0: IBM 2371CJ9
apm0 at bios0: Power Management spec V1.2
apm0: battery life expectancy 100%
apm0: AC on, battery charge high
acpi at bios0 function 0x0 not configured
pcibios0 at bios0: rev 2.1 @ 0xfd6d0/0x930
pcibios0: PCI IRQ Routing Table rev 1.0 @ 0xfdeb0/256 (14 entries)
pcibios0: PCI Interrupt Router at 000:31:0 ("Intel 82371FB ISA" rev 0x00)
pcibios0: PCI bus #3 is the last bus
bios0: ROM list: 0xc0000/0xc800! 0xcc800/0x1000 0xcd800/0x1000 0xdc000/0x4000! 
0xe0000/0x10000
cpu0 at mainbus0: (uniprocessor)
cpu0: Enhanced SpeedStep 1097 MHz: speeds: 1100, 1000, 900, 800, 600 MHz
pci0 at mainbus0 bus 0: configuration mode 1 (bios)
io address conflict 0x5800/0x8
io address conflict 0x5808/0x4
io address conflict 0x5810/0x8
io address conflict 0x580c/0x4
mem address conflict 0x1f700000/0x400
pchb0 at pci0 dev 0 function 0 "Intel 82855GM Host" rev 0x02
"Intel 82855GM Memory" rev 0x02 at pci0 dev 0 function 1 not configured
"Intel 82855GM Config" rev 0x02 at pci0 dev 0 function 3 not configured
vga1 at pci0 dev 2 function 0 "Intel 82855GM Video" rev 0x02
wsdisplay0 at vga1 mux 1: console (80x25, vt100 emulation)
wsdisplay0: screen 1-5 added (80x25, vt100 emulation)
intagp0 at vga1
agp0 at intagp0: aperture at 0xe0000000, size 0x8000000
inteldrm0 at vga1: irq 11
drm0 at inteldrm0
"Intel 82855GM Video" rev 0x02 at pci0 dev 2 function 1 not configured
uhci0 at pci0 dev 29 function 0 "Intel 82801DB USB" rev 0x01: irq 11
uhci1 at pci0 dev 29 function 1 "Intel 82801DB USB" rev 0x01: irq 11
uhci2 at pci0 dev 29 function 2 "Intel 82801DB USB" rev 0x01: irq 11
ehci0 at pci0 dev 29 function 7 "Intel 82801DB USB" rev 0x01: irq 11
usb0 at ehci0: USB revision 2.0
uhub0 at usb0 "Intel EHCI root hub" rev 2.00/1.00 addr 1
ppb0 at pci0 dev 30 function 0 "Intel 82801BAM Hub-to-PCI" rev 0x81
pci1 at ppb0 bus 2
mem address conflict 0xb0000000/0x1000
cbb0 at pci1 dev 0 function 0 "Ricoh 5C476 CardBus" rev 0x8d: irq 11
sdhc0 at pci1 dev 0 function 1 "Ricoh 5C822 SD/MMC" rev 0x13: irq 11
sdmmc0 at sdhc0
em0 at pci1 dev 1 function 0 "Intel PRO/1000MT Mobile (82541GI)" rev 0x00: irq 
11, address 00:0a:e4:37:79:dd
cardslot0 at cbb0 slot 0 flags 0
cardbus0 at cardslot0: bus 3 device 0 cacheline 0x0, lattimer 0xb0
pcmcia0 at cardslot0
ichpcib0 at pci0 dev 31 function 0 "Intel 82801DBM LPC" rev 0x01: 24-bit timer 
at 3579545Hz
pciide0 at pci0 dev 31 function 1 "Intel 82801DBM IDE" rev 0x01: DMA, channel 0 
configured to compatibility, channel 1 configured to compatibility
wd0 at pciide0 channel 0 drive 0: <HTC426020G7AT00>
wd0: 16-sector PIO, LBA, 19077MB, 39070080 sectors
wd0(pciide0:0:0): using PIO mode 4, Ultra-DMA mode 5
pciide0: channel 1 disabled (no drives)
ichiic0 at pci0 dev 31 function 3 "Intel 82801DB SMBus" rev 0x01: irq 11
iic0 at ichiic0
spdmem0 at iic0 addr 0x51: 256MB DDR SDRAM non-parity PC2700CL2.5
auich0 at pci0 dev 31 function 5 "Intel 82801DB AC97" rev 0x01: irq 11, ICH4 
AC97
auich_attach: lists 0xd955b000 0xd955b100 0xd955b200
ac97: codec id 0x41445374 (Analog Devices AD1981B)
ac97: codec features headphone, 20 bit DAC, No 3D Stereo
audio0 at auich0
"Intel 82801DB Modem" rev 0x01 at pci0 dev 31 function 6 not configured
usb1 at uhci0: USB revision 1.0
uhub1 at usb1 "Intel UHCI root hub" rev 1.00/1.00 addr 1
usb2 at uhci1: USB revision 1.0
uhub2 at usb2 "Intel UHCI root hub" rev 1.00/1.00 addr 1
usb3 at uhci2: USB revision 1.0
uhub3 at usb3 "Intel UHCI root hub" rev 1.00/1.00 addr 1
isa0 at ichpcib0
isadma0 at isa0
pckbc0 at isa0 port 0x60/5
pckbd0 at pckbc0 (kbd slot)
pckbc0: using irq 1 for kbd slot
wskbd0 at pckbd0: console keyboard, using wsdisplay0
pms0 at pckbc0 (aux slot)
pckbc0: using irq 12 for aux slot
wsmouse0 at pms0 mux 0
pcppi0 at isa0 port 0x61
midi0 at pcppi0: <PC speaker>
spkr0 at pcppi0
aps0 at isa0 port 0x1600/31
npx0 at isa0 port 0xf0/16: reported by CPUID; using exception 16
biomask effd netmask effd ttymask ffff
mtrr: Pentium Pro MTRR support
vscsi0 at root
scsibus0 at vscsi0: 256 targets
softraid0 at root
root on wd0a swap on wd0b dump on wd0b
auich0: ac97 link rate calibration took 83321 us sts=7<dch,celv,lvbci> civ=0
auich0: after calibration and reset sts=1<dch> civ=0
auich0: measured ac97 link rate at 48007 Hz, will use 48000 Hz
auich_trigger_output(d955c000, d956a600, 11776, 0xd034a5b4, 0xd1364600, 
0xd13646ec) sts=1<dch>
auich_trigger_pipe: qptr=0
auich_trigger_input(d956c000, d957a600, 11776, 0xd034a740, 0xd1364600, 
0xd1364704) sts=1<dch>
auich_trigger_pipe: qptr=0
auich0: halt_input
auich0: halt_output

Reply via email to