* Input/output error while playing a file using aplay @ 2007-06-22 20:12 Pharaoh . 2007-06-22 23:16 ` Pharaoh . 2007-06-25 6:56 ` Clemens Ladisch 0 siblings, 2 replies; 15+ messages in thread From: Pharaoh . @ 2007-06-22 20:12 UTC (permalink / raw) To: alsa-devel Hi I am testing my audio driver using aplay. I trying to play an audio file using: #aplay -Dplughw:0,0 --rate=44100 --format=S16 --channels=2 test.wav The log is as follows, snd_card_omap_alsa_open start snd_card_omap_alsa_open end Playing WAVE 'test.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo snd_omap_alsa_hw_params start snd_omap_alsa_prepare start snd_omap_alsa_prepare end snd_omap_alsa_trigger start audio_start_dma_chain start audio_start_dma_chain end omap_start_alsa_sound_dma end snd_omap_alsa_trigger end snd_omap_alsa_pointer start audio_get_dma_pos start audio_get_dma_pos end It waits here for sometime and then I get snd_omap_alsa_trigger starte error: Input/output error Then the things are wound up as: audio_stop_dma start omap_stop_alsa_sound_dma start omap_stop_alsa_sound_dma end omap_clear_alsa_sound_dma start omap_clear_alsa_sound_dma end snd_omap_alsa_trigger end snd_omap_alsa_hw_free start snd_omap_alsa_hw_free end snd_card_omap_alsa_close start snd_card_omap_alsa_close end So basically the problem is in trigger where it waits for something and then winds up things. Any idea, what could be the reason. I am thinking it has to do something with DMA interrupts etc. ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Input/output error while playing a file using aplay 2007-06-22 20:12 Input/output error while playing a file using aplay Pharaoh . @ 2007-06-22 23:16 ` Pharaoh . 2007-06-25 6:56 ` Clemens Ladisch 1 sibling, 0 replies; 15+ messages in thread From: Pharaoh . @ 2007-06-22 23:16 UTC (permalink / raw) To: alsa-devel >So basically the problem is in trigger where it waits for something >and then winds up things It is not a problem with trigger, Strace revealed that this is an ioctl error and after that the aplay pcm write fails. I do not get the DMA interrupts which I should be getting. Here is the entire log: execve("/usr/local/bin/aplay", ["aplay", "-Dplughw:0,0", "--rate=44100", "--format=S16", "--channels=2", "startup.wav"], [/* 7 vars */]) = 0 uname({sys="Linux", node="192.168.200.214", ...}) = 0 brk(0) = 0x20000 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) open("/etc/ld.so.cache", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=12436, ...}) = 0 mmap2(NULL, 12436, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40015000 close(3) = 0 open("/usr/local/lib/libasound.so.2", O_RDONLY) = 3 read(3, "\177ELF\1\1\1a\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\314\353\1"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0775, st_size=2164893, ...}) = 0 mmap2(NULL, 777620, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x4001e000 mprotect(0x400d0000, 48532, PROT_NONE) = 0 mmap2(0x400d8000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xb2) = 0x400d8000 close(3) = 0 open("/lib/libm.so.6", O_RDONLY) = 3 read(3, "\177ELF\1\1\1a\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\00003\0\000"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0644, st_size=778699, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40019000 mmap2(NULL, 713068, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x400dc000 mprotect(0x40182000, 33132, PROT_NONE) = 0 mmap2(0x40189000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xa5) = 0x40189000 close(3) = 0 open("/lib/libdl.so.2", O_RDONLY) = 3 read(3, "\177ELF\1\1\1a\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\344\v\0\000"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0644, st_size=16868, ...}) = 0 mmap2(NULL, 41152, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x4018b000 mprotect(0x4018d000, 32960, PROT_NONE) = 0 mmap2(0x40194000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1) = 0x40194000 close(3) = 0 open("/lib/libpthread.so.0", O_RDONLY) = 3 read(3, "\177ELF\1\1\1a\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0p?\0\0004"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0644, st_size=99172, ...}) = 0 mmap2(NULL, 367928, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x40196000 mprotect(0x401a5000, 306488, PROT_NONE) = 0 mmap2(0x401ac000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xe) = 0x401ac000 mmap2(0x401ae000, 269624, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x401ae000 close(3) = 0 open("/lib/libc.so.6", O_RDONLY) = 3 read(3, "\177ELF\1\1\1a\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0HM\1\0004"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0644, st_size=1424946, ...}) = 0 mmap2(NULL, 1132932, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x401f0000 mprotect(0x402f7000, 55684, PROT_NONE) = 0 mmap2(0x402ff000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x107) = 0x402ff000 mmap2(0x40303000, 6532, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x40303000 close(3) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x4001a000 mprotect(0x402ff000, 8192, PROT_READ) = 0 mprotect(0x401ac000, 4096, PROT_READ) = 0 mprotect(0x40194000, 4096, PROT_READ) = 0 mprotect(0x40189000, 4096, PROT_READ) = 0 mprotect(0x4001c000, 4096, PROT_READ) = 0 munmap(0x40015000, 12436) = 0 getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM_INFINITY}) = 0 setrlimit(RLIMIT_STACK, {rlim_cur=2044*1024, rlim_max=RLIM_INFINITY}) = 0 getpid() = 586 rt_sigaction(SIGRTMIN, {0x4019e980, [], 0x4000000 /* SA_??? */}, NULL, 8) = 0 rt_sigaction(SIGRT_1, {0x4019ea3c, [RTMIN], 0x4000000 /* SA_??? */}, NULL, 8) = 0 rt_sigaction(SIGRT_2, {0x4019eba8, [], 0x4000000 /* SA_??? */}, NULL, 8) = 0 rt_sigprocmask(SIG_BLOCK, [RTMIN], NULL, 8) = 0 rt_sigprocmask(SIG_UNBLOCK, [RT_1], NULL, 8) = 0 _sysctl({{CTL_KERN, KERN_VERSION}, 2, 0xbe863ad8, 40, (nil), 0}) = 0 brk(0) = 0x20000 brk(0x41000) = 0x41000 stat64("/usr/local/share/alsa/alsa.conf", {st_mode=S_IFREG|0664, st_size=7764, ...}) = 0 open("/usr/local/share/alsa/alsa.conf", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0664, st_size=7764, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40015000 read(3, "#\n# ALSA library configuration "..., 4096) = 4096 read(3, "cards.pcm.surround40\npcm.surroun"..., 4096) = 3668 read(3, "", 4096) = 0 read(3, "", 4096) = 0 close(3) = 0 munmap(0x40015000, 4096) = 0 access("/etc/asound.conf", R_OK) = 0 open("/etc/asound.conf", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0664, st_size=690, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40015000 read(3, "pcm.headset {\n\t@args [BDADDR TIM"..., 4096) = 690 read(3, "", 4096) = 0 read(3, "", 4096) = 0 close(3) = 0 munmap(0x40015000, 4096) = 0 access("//.asoundrc", R_OK) = -1 ENOENT (No such file or directory) open("/dev/snd/controlC0", O_RDONLY) = 3 close(3) = 0 open("/dev/snd/controlC0", O_RDWR) = 3 ioctl(3, USBDEVFS_CONTROL, 0xbe863874) = 0 ioctl(3, 0x4snd_card_omap_alsa_open start eac->base = c4954000 = 0 open("/dev/snd/pcmC0D0p", O_RDWBefore audio init R|O_NONBLOCKomap850_audio_init start eac->base = c4954000 CSMI: csmi_ctl_snd_res failed CSMI: csmi_ctl_snd failed eac_enable_clocks start Clocks are already enabled omap850_audio_init end omap850_audio_init failed after audio init snd_card_omap_alsa_open end ) = 4 close(3) = 0 ioctl(4, AGPIOC_ACQUIRE or APM_IOC_STANDBY, 0xbe863778) = 0 fcntl64(4, F_GETFL) = 0x802 (flags O_RDWR|O_NONBLOCK) ioctl(4, AGPIOC_INFO, 0xbe8636f0) = 0 ioctl(4, AGPIOC_RELEASE or APM_IOC_SUSPEND, 0xbe8636ec) = 0 mmap2(NULL, 4096, PROT_READ, MAP_SHARED, 4, 0x80000) = -1 ENXIO (No such device or address) ioctl(4, 0xc0844123, 0xbe8636f4) = 0 fcntl64(4, F_GETFL) = 0x802 (flags O_RDWR|O_NONBLOCK) fcntl64(4, F_SETFL, O_RDWR) = 0 ioctl(4, AGPIOC_ACQUIRE or APM_IOC_STANDBY, 0xbe863ccc) = 0 rt_sigaction(SIGINT, {0x401a28ac, [INT], SA_RESTART|0x4000000}, {SIG_DFL}, 8) = 0 rt_sigaction(SIGTERM, {0x401a28ac, [TERM], SA_RESTART|0x4000000}, {SIG_DFL}, 8) = 0 rt_sigaction(SIGABRT, {0x401a28ac, [ABRT], SA_RESTART|0x4000000}, {SIG_DFL}, 8) = 0 open("startup.wav", O_RDONLY|O_LARGEFILE) = 3 read(3, "RIFF(\310\24\0WAVEfmt \20\0\0\0\1\0\2\0", 24) = 24 read(3, "D\254\0\0", 4) = 4 read(3, "\20\261\2\0\4\0\20\0", 8) = 8 read(3, "data\4\310\24\0", 8) = 8 write(2, "Playing WAVE \'startup.wav\' : ", 29Playing WAVE 'startup.wav' : ) = 29 write(2, "Signed 16 bit Little Endian, ", 29Signed 16 bit Little Endian, ) = 29 write(2, "Rate 44100 Hz, ", 15Rate 44100 Hz, ) = 15 write(2, "Stereo", 6Stereo) = 6 write(2, "\n", 1 ) = 1 ioctl(4, 0xc25c4110, 0xbe8635f4) = 0 ioctl(4, 0xc25c4110, 0xbe8632e8) = 0 ioctl(4, 0xc25c4110, 0xbe8632e8) = 0 ioctl(4, 0xc25c4110, 0xbe8635f4) = 0 ioctl(4, 0xc25c4110, 0xbe8632e8) = 0 ioctl(4, 0xc25c4110, 0xbe8632e8) = 0 ioctl(4, 0xc25c4110, 0xbe8635f4) = 0 ioctl(4, 0xc25c4110, 0xbe863368) = 0 ioctl(4, 0xc25c4110, 0xbe86305c) = 0 ioctl(4, 0xc25c4110, 0xbe86305c) = 0 ioctl(4, 0xc25c4110, 0xbe863368) = 0 ioctl(4, 0xc25c4110, 0xbe863368) = 0 ioctl(4, 0xc25c4110, 0xbe86305c) = 0 ioctl(4, 0xc25c4110, 0xbe86305c) = 0 ioctl(4, 0xc25c4110, 0xbe863368) = 0 ioctl(4, 0xc25c4110, 0xbe86305c) = 0 ioctl(snd_omap_alsa_hw_params start 4, 0xc25c4110, 0xbe86305c) = 0 ioctl(4, 0xc25c4110, 0xbe863368) = 0 ioctl(4, 0xcsnd_omap_alsa_prepare start snd_omap_alsa_prepare end = 0 ioctl(4, 0xc25c4110, 0xbe86305cSNDRV_PCM_IOCTL1_RESET ) = 0 ioctl(4, 0xc25c411Inside snd_pcm_lib_ioctl_reset 0, 0xbe86305c) = 0 ioctl(4, 0xc25c4110, 0xbe863368) = 0 ioctl(4, 0xc25c4110, 0xbe86305c) = 0 ioctl(4, 0xc25c4110, 0xbe86305c) = 0 ioctl(4, 0xc25c4110, 0xbe863368) = 0 ioctl(4, 0xc25c4110, 0xbe862e6c) = 0 ioctl(4, 0xc25c4110, 0xbe862b60) = 0 ioctl(4, 0xc25c4110, 0xbe862b60) = 0 ioctl(4, 0xc25c4110, 0xbe862e6c) = 0 ioctl(4, 0xc25c4110, 0xbe862b60) = 0 ioctl(4, 0xc25c4110, 0xbe862b60) = 0 ioctl(4, 0xc25c4110, 0xbe862e6c) = 0 ioctl(4, 0xc25c4110, 0xbe8630d4) = 0 ioctl(4, 0xc25c4110, 0xbe8630d4) = 0 ioctl(4, 0xc25c4110, 0xbe8630d4) = 0 ioctl(4, 0xc25c4110, 0xbe8630d4) = 0 ioctl(4, 0xc25c4110, 0xbe8630d4) = 0 ioctl(4, 0xc25c4110, 0xbe8630d4) = 0 ioctl(4, 0xc25c4110, 0xbe8630d4) = 0 ioctl(4, 0xc25c4110, 0xbe8630d4) = 0 ioctl(4, 0xc25c4110, 0xbe8630d4) = 0 ioctl(4, 0xc25c4110, 0xbe8630d4) = 0 ioctl(4, 0xc25c4110, 0xbe8630d4) = 0 ioctl(4, 0xc25c4110, 0xbe8630d4) = 0 ioctl(4, 0xc25c4110, 0xbe863564) = 0 ioctl(4, 0xc25c4110, 0xbe863564) = 0 ioctl(4, 0xc25c4110, 0xbe863564) = 0 ioctl(4, 0xc25c4110, 0xbe863564) = 0 ioctl(4, 0xc25c4110, 0xbe863564) = 0 ioctl(4, 0xc25c4110, 0xbe863904) = 0 ioctl(4, 0xc25c4111, 0xbe863904) = 0 ioctl(4, 0xc0844123, 0x27e10) = 0 ioctl(4, 0xc0684113, 0xbe8634c4) = 0 ioctl(4, 0xc0844123, 0x27e10) = 0 ioctl(4, 0x4140, 0x400c3ed4) = 0 ioctl(4, 0xc0844123, 0x27e10) = 0 ioctl(4, 0xc0684113, 0xbe863898) = 0 read(3, "\377\377\0\0\0\0\0\0\1\0\0\0\0\0\0\0\0\0\1\0\0\0\0\0\1"..., 8192) = 8192 ioctl(4, 0x400c4150, 0xbe863bf0) = 0 ioctl(4, 0xc0844123, 0x27e10) = 0 read(3, "\377\377\0\0\1\0\0\0\0\0\0\0\377\377\376\377\0\0\3\0\377"..., 8192) = 8192 ioctl(4, 0x400c4150, 0xbe863bf0) = 0 ioctl(4, 0xc0844123, 0x27e10) = 0 read(3, "\374\377\7\0\0\0\0\0\372\377\0\0\376\377\3\0\3\0\373\377"..., 8192) = 8192 ioctl(4, 0x400c4150, 0xbe863bf0) = 0 ioctl(4, 0xc0844123, 0x27e10) = 0 read(3, "\373\377\1\0\377\377\5\0\376\377\372\377\377\377\7\0\6"..., 8192) = 8192 ioctl(4, 0x400c4150, 0xbe863bf0) = 0 ioctl(4, 0xc0844123, 0x27e10) = 0 read(3, "\212\377{\377\212\377\210\377\220\377\226\377\214\377\213"..., 8192) = 8192 ioctl(4, 0x400c4150, 0xbe863bf0) = 0 ioctl(4, 0xc0844123, 0x27e10) = 0 read(3, ".\324\326\3438\323Q\343\375\322\34\343\254\323\223\343"..., 8192Inside snd_pcm_do_start snd_omap_alsa_trigger start audio_start_dma_chain start Inside omap_start_dma 1 Inside omap_start_dma 2 Inside omap_start_dma 3 audio_start_dma_chain end snd_omap_alsa_trigger end ) = 8192 ioctl(4, 0x400c4150, 0xbe863bf0) = 0 ioctl(4, 0xc0844123, 0x27e10) =Inside snd_pcm_update_hw_ptr_pos snd_omap_alsa_pointer start Count is 34 Offset is 4294967288 and buffer size is 16384 Inside snd_pcm_update_hw_ptr_pos, pos is 0 0 read(3, "\2\fK\0x\v\220\375\361\n_\373\246\n\270\371\235\n;\371"..., 8192) = 8192 ioctl(4, 0x400c4150, 0xbe863bf0) = 0 ioctl(4, 0xc0844123, 0x27e10) = 0 read(3, "\336\327R\357\277\330\361\357\256\331\211\360d\332(\361"..., 8192) = 8192 ioctl(4, 0x400c4150, 0xbe863bf0) = 0 ioctl(4, 0xc0844123, 0x27e10) = 0 read(3, "H\343#\355\233\342\317\355\377\341\312\356\216\341\250"..., 8192) = 8192 ioctl(4, 0x400c4150, 0xbe863bf0) = -1 EIO (Input/output error) write(2, "aplay: pcm_write:1268: ", 23aplay: pcm_write:1268: ) = 23 write(2Inside snd_pcm_do_stop snd_omap_alsa_trigger start audio_stop_dma start before writing to EAC_AGCTR = 60 aftere writing to EAC_AGCTR = 60 omap_stop_alsa_sound_dma end omap_clear_alsa_sound_dma start omap_clear_alsa_sound_dma end snd_omap_alsa_trigger end , "write error: Input/output errsnd_omap_alsa_hw_free start or", 31write error: Input/outputsnd_omap_alsa_hw_free end error) = 31 write(2, "\n", 1 snd_card_omap_alsa_close start ) = 1 io_omap850_audio_shutdown start submit(0x1, 0, 0x4eac_disable_clocks start eac_disable_clocks end CSMI: csmi_ctl_snd_res failed CSMI: csmi_ctl_snd failed omap850_audio_shutdown end snd_card_omap_alsa_close end <unfinished ... exit status 1> Process 586 detached On 6/23/07, Pharaoh . <pharaoh137@gmail.com> wrote: > Hi > > I am testing my audio driver using aplay. I trying to play an audio file > using: > > #aplay -Dplughw:0,0 --rate=44100 --format=S16 --channels=2 test.wav > The log is as follows, > > snd_card_omap_alsa_open start > snd_card_omap_alsa_open end > Playing WAVE 'test.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo > snd_omap_alsa_hw_params start > snd_omap_alsa_prepare start > snd_omap_alsa_prepare end > snd_omap_alsa_trigger start > audio_start_dma_chain start > audio_start_dma_chain end > omap_start_alsa_sound_dma end > snd_omap_alsa_trigger end > snd_omap_alsa_pointer start > audio_get_dma_pos start > audio_get_dma_pos end > > It waits here for sometime and then I get > snd_omap_alsa_trigger starte error: Input/output error > > Then the things are wound up as: > > audio_stop_dma start > omap_stop_alsa_sound_dma start > omap_stop_alsa_sound_dma end > omap_clear_alsa_sound_dma start > omap_clear_alsa_sound_dma end > snd_omap_alsa_trigger end > > snd_omap_alsa_hw_free start > snd_omap_alsa_hw_free end > snd_card_omap_alsa_close start > snd_card_omap_alsa_close end > > > So basically the problem is in trigger where it waits for something > and then winds up things. Any idea, what could be the reason. I am > thinking it has to do something with > DMA interrupts etc. > ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Input/output error while playing a file using aplay 2007-06-22 20:12 Input/output error while playing a file using aplay Pharaoh . 2007-06-22 23:16 ` Pharaoh . @ 2007-06-25 6:56 ` Clemens Ladisch 2007-06-25 8:56 ` Pharaoh . 1 sibling, 1 reply; 15+ messages in thread From: Clemens Ladisch @ 2007-06-25 6:56 UTC (permalink / raw) To: Pharaoh ., alsa-devel Pharaoh . wrote: > ... > It waits here for sometime and then I get > snd_omap_alsa_trigger starte error: Input/output error The ALSA framework will stop the stream and return the error code EIO when there was no interrupt for ten seconds, i.e., when snd_pcm_period_elapsed() was not called. Either s->active got corrupted, or your interrupt handler never got called. BTW: snd_pcm_period_elapsed() can stop the stream in some situations, so you should move this call to the end of the interrupt handler, or check s->active again after calling it. HTH Clemens ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Input/output error while playing a file using aplay 2007-06-25 6:56 ` Clemens Ladisch @ 2007-06-25 8:56 ` Pharaoh . 2007-06-25 11:00 ` Clemens Ladisch 0 siblings, 1 reply; 15+ messages in thread From: Pharaoh . @ 2007-06-25 8:56 UTC (permalink / raw) To: Clemens Ladisch; +Cc: alsa-devel >The ALSA framework will stop the stream and return the error code EIO >when there was no interrupt for ten seconds, i.e., when >snd_pcm_period_elapsed() was not called. I am getting the interrupts, but why there wont be any interrupt for 10 seconds? I am setting the periods in prepare as periods = runtime->period, so interrupts should at period boundaries. May be s->active got corrupted. On 6/25/07, Clemens Ladisch <cladisch@fastmail.net> wrote: > Pharaoh . wrote: > > ... > > It waits here for sometime and then I get > > snd_omap_alsa_trigger starte error: Input/output error > > The ALSA framework will stop the stream and return the error code EIO > when there was no interrupt for ten seconds, i.e., when > snd_pcm_period_elapsed() was not called. > > Either s->active got corrupted, or your interrupt handler never got > called. > > BTW: snd_pcm_period_elapsed() can stop the stream in some situations, > so you should move this call to the end of the interrupt handler, or > check s->active again after calling it. > > > HTH > Clemens > ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Input/output error while playing a file using aplay 2007-06-25 8:56 ` Pharaoh . @ 2007-06-25 11:00 ` Clemens Ladisch 2007-06-25 12:04 ` Pharaoh . 0 siblings, 1 reply; 15+ messages in thread From: Clemens Ladisch @ 2007-06-25 11:00 UTC (permalink / raw) To: Pharaoh .; +Cc: alsa-devel Pharaoh . wrote: > >The ALSA framework will stop the stream and return the error code EIO > >when there was no interrupt for ten seconds, i.e., when > >snd_pcm_period_elapsed() was not called. > > I am getting the interrupts, but why there wont be any interrupt for > 10 seconds? I don't quite understand this sentence. You do get interrupts? And snd_pcm_period_elapsed() is not called? > I am setting the periods in prepare as periods = runtime->period, so > interrupts should at period boundaries. runtime->periods is the number of periods. I don't know how your hardware works, but I guess it wants to know the period size, i.e., runtime->period_size converted to bytes. Regards, Clemens ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Input/output error while playing a file using aplay 2007-06-25 11:00 ` Clemens Ladisch @ 2007-06-25 12:04 ` Pharaoh . 2007-06-25 13:35 ` Pharaoh . 0 siblings, 1 reply; 15+ messages in thread From: Pharaoh . @ 2007-06-25 12:04 UTC (permalink / raw) To: Clemens Ladisch; +Cc: alsa-devel On 6/25/07, Clemens Ladisch <cladisch@fastmail.net> wrote: > Pharaoh . wrote: > > >The ALSA framework will stop the stream and return the error code EIO > > >when there was no interrupt for ten seconds, i.e., when > > >snd_pcm_period_elapsed() was not called. > > > > I am getting the interrupts, but why there wont be any interrupt for > > 10 seconds? > > I don't quite understand this sentence. You do get interrupts? > And snd_pcm_period_elapsed() is not called? > > > I am setting the periods in prepare as periods = runtime->period, so > > interrupts should at period boundaries. > > runtime->periods is the number of periods. I don't know how your > hardware works, but I guess it wants to know the period size, i.e., > runtime->period_size converted to bytes. > > > Regards, > Clemens > Apologie for being ambiguous... 1. When I posted the question, I was not even getting the DMA interrupts. The input/output error was present. 2. After modifying the code a little I started getting the DMA interrupts, but the input/output error still persists. So I am doubting I might have messed up with the period size etc. 3. I am assigning s->periods = runtime->period i.e. without converting them in bytes, in prepare (I have seen some standard omap drivers doing the same, so I am not converting it to bytes, frames should be okay, but I will check this in h/w manual) and I take care in trigger too by updating the s->periods field. 4. Also, s->period is locked appropriately so dont think it is corrupted. I am attaching the source file, I have attached only 1 file since I think it is relevant. Will send the log once I get chance to test it again. ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Input/output error while playing a file using aplay 2007-06-25 12:04 ` Pharaoh . @ 2007-06-25 13:35 ` Pharaoh . 2007-06-25 18:38 ` Pharaoh . 0 siblings, 1 reply; 15+ messages in thread From: Pharaoh . @ 2007-06-25 13:35 UTC (permalink / raw) To: Clemens Ladisch; +Cc: alsa-devel Here is the log, it seems that the pointer function is not working. I am not supposed to use printks in many automic functions but I dont have any other debugging option. snd_card_omap_alsa_open start omap850_audio_init start eac_enable_clocks start Clocks are already enabled eac_set_samplerate start eac_set_samplerate end audio_dma_request start omap_request_alsa_sound_dma start omap_request_alsa_sound_dma end snd_card_omap_alsa_open end Playing WAVE 'startup.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo snd_omap_alsa_hw_params start data format is 2 -- Channel 0 rate =2 and buffer size is ac44 snd_omap_alsa_hw_params end snd_omap_alsa_prepare start audio_configure_dma_channel start dma_size is 2000 dma_ptr is c3fa0000 snd_omap_alsa_prepare end SNDRV_PCM_IOCTL1_RESET Inside snd_pcm_lib_ioctl_reset Inside snd_pcm_do_start snd_omap_alsa_trigger start audio_set_dma_params_play start audio_set_dma_params_play end audio_start_dma_chain start Inside omap_start_dma 1 Inside omap_start_dma 2 Inside omap_start_dma 3 audio_start_dma_chain end Reading from c4954180 snd_omap_alsa_trigger end sound_dma_irq_handler start !!! In DMA IRQ handler lch=0,status=0x20, dma_status=32, data=c3cb5104 callback_omap_alsa_sound_dma start Inside /snd_pcm_period_elapsed Inside snd_pcm_update_hw_ptr_interrupt Inside snd_pcm_update_hw_ptr_pos snd_omap_alsa_pointer start audio stream->offset is 1000000 runtime->framebits is 20 Count is 8192 Offset is 4192256 and buffer size is 16384 Inside snd_pcm_update_hw_ptr_pos, pos is 0 audio_set_dma_params_play start audio_set_dma_params_play end audio_start_dma_chain start audio_start_dma_chain end Reading from c4954180 sound_dma_irq_handler end Inside snd_pcm_update_hw_ptr_pos snd_omap_alsa_pointer start audio stream->offset is 2000 runtime->framebits is 20 Count is 8192 Offset is 0 and buffer size is 16384 Inside snd_pcm_update_hw_ptr_pos, pos is 0 /*Is waits here for sometime and then following error*/ Inside snd_pcm_do_stop write error: Input/output error snd_omap_alsa_trigger start audio_stop_dma start omap_stop_alsa_sound_dma end omap_clear_alsa_sound_dma start omap_clear_alsa_sound_dma end snd_omap_alsa_trigger end snd_omap_alsa_hw_free start snd_omap_alsa_hw_free end snd_card_omap_alsa_close start omap850_audio_shutdown start eac_disable_clocks start eac_disable_clocks end omap850_audio_shutdown end audio_dma_free start omap_free_alsa_sound_dma start omap_sound_dma_unlink_lch start omap_sound_dma_unlink_lch end omap_free_alsa_sound_dma end snd_card_omap_alsa_close end And detailed log using strace # strace aplay -Dplughw:0,0 --rate=44100 --format=S16 --channels=2 startup.wav execve("/usr/local/bin/aplay", ["aplay", "-Dplughw:0,0", "--rate=44100", "--format=S16", "--channels=2", "startup.wav"], [/* 7 vars */]) = 0 uname({sys="Linux", node="192.168.200.217", ...}) = 0 brk(0) = 0x20000 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) open("/etc/ld.so.cache", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0777, st_size=12436, ...}) = 0 mmap2(NULL, 12436, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40015000 close(3) = 0 open("/usr/local/lib/libasound.so.2", O_RDONLY) = 3 read(3, "\177ELF\1\1\1a\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\314\353\1"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0777, st_size=2164893, ...}) = 0 mmap2(NULL, 777620, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x4001e000 mprotect(0x400d0000, 48532, PROT_NONE) = 0 mmap2(0x400d8000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xb2) = 0x400d8000 close(3) = 0 open("/lib/libm.so.6", O_RDONLY) = 3 read(3, "\177ELF\1\1\1a\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\00003\0\000"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0777, st_size=778699, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40019000 mmap2(NULL, 713068, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x400dc000 mprotect(0x40182000, 33132, PROT_NONE) = 0 mmap2(0x40189000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xa5) = 0x40189000 close(3) = 0 open("/lib/libdl.so.2", O_RDONLY) = 3 read(3, "\177ELF\1\1\1a\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\344\v\0\000"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0777, st_size=16868, ...}) = 0 mmap2(NULL, 41152, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x4018b000 mprotect(0x4018d000, 32960, PROT_NONE) = 0 mmap2(0x40194000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1) = 0x40194000 close(3) = 0 open("/lib/libpthread.so.0", O_RDONLY) = 3 read(3, "\177ELF\1\1\1a\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0p?\0\0004"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0777, st_size=99172, ...}) = 0 mmap2(NULL, 367928, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x40196000 mprotect(0x401a5000, 306488, PROT_NONE) = 0 mmap2(0x401ac000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xe) = 0x401ac000 mmap2(0x401ae000, 269624, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x401ae000 close(3) = 0 open("/lib/libc.so.6", O_RDONLY) = 3 read(3, "\177ELF\1\1\1a\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0HM\1\0004"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0777, st_size=1424946, ...}) = 0 mmap2(NULL, 1132932, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x401f0000 mprotect(0x402f7000, 55684, PROT_NONE) = 0 mmap2(0x402ff000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x107) = 0x402ff000 mmap2(0x40303000, 6532, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x40303000 close(3) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x4001a000 mprotect(0x402ff000, 8192, PROT_READ) = 0 mprotect(0x401ac000, 4096, PROT_READ) = 0 mprotect(0x40194000, 4096, PROT_READ) = 0 mprotect(0x40189000, 4096, PROT_READ) = 0 mprotect(0x4001c000, 4096, PROT_READ) = 0 munmap(0x40015000, 12436) = 0 getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM_INFINITY}) = 0 setrlimit(RLIMIT_STACK, {rlim_cur=2044*1024, rlim_max=RLIM_INFINITY}) = 0 getpid() = 613 rt_sigaction(SIGRTMIN, {0x4019e980, [], 0x4000000 /* SA_??? */}, NULL, 8) = 0 rt_sigaction(SIGRT_1, {0x4019ea3c, [RTMIN], 0x4000000 /* SA_??? */}, NULL, 8) = 0 rt_sigaction(SIGRT_2, {0x4019eba8, [], 0x4000000 /* SA_??? */}, NULL, 8) = 0 rt_sigprocmask(SIG_BLOCK, [RTMIN], NULL, 8) = 0 rt_sigprocmask(SIG_UNBLOCK, [RT_1], NULL, 8) = 0 _sysctl({{CTL_KERN, KERN_VERSION}, 2, 0xbed04ad8, 40, (nil), 0}) = 0 brk(0) = 0x20000 brk(0x41000) = 0x41000 stat64("/usr/local/share/alsa/alsa.conf", {st_mode=S_IFREG|0777, st_size=7764, ...}) = 0 open("/usr/local/share/alsa/alsa.conf", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0777, st_size=7764, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40015000 read(3, "#\n# ALSA library configuration "..., 4096) = 4096 read(3, "cards.pcm.surround40\npcm.surroun"..., 4096) = 3668 read(3, "", 4096) = 0 read(3, "", 4096) = 0 close(3) = 0 munmap(0x40015000, 4096) = 0 access("/etc/asound.conf", R_OK) = 0 open("/etc/asound.conf", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0777, st_size=690, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40015000 read(3, "pcm.headset {\n\t@args [BDADDR TIM"..., 4096) = 690 read(3, "", 4096) = 0 read(3, "", 4096) = 0 close(3) = 0 munmap(0x40015000, 4096) = 0 access("//.asoundrc", R_OK) = -1 ENOENT (No such file or directory) open("/dev/snd/controlC0", O_RDONLY) = 3 close(3) = 0 open("/dev/snd/controlC0", O_RDWR) = 3 ioctl(3, USBDEVFS_CONTROL, 0xbed04874) = 0 ioctl(3, 0x4snd_card_omap_alsa_open start eac->base = c4954000 = 0 open("/dev/snd/pcmC0D0p", O_RDWBefore audio init R|O_NONBLOCKomap850_audio_init start eac_enable_clocks start Clocks are already enabled eac_set_samplerate start Reading from c4954178 eac_set_samplerate end after audio init audio_dma_request start omap_request_alsa_sound_dma start omap_request_alsa_sound_dma end snd_card_omap_alsa_open end ) = 4 close(3) = 0 ioctl(4, AGPIOC_ACQUIRE or APM_IOC_STANDBY, 0xbed04778) = 0 fcntl64(4, F_GETFL) = 0x802 (flags O_RDWR|O_NONBLOCK) ioctl(4, AGPIOC_INFO, 0xbed046f0) = 0 ioctl(4, AGPIOC_RELEASE or APM_IOC_SUSPEND, 0xbed046ec) = 0 mmap2(NULL, 4096, PROT_READ, MAP_SHARED, 4, 0x80000) = -1 ENXIO (No such device or address) ioctl(4, 0xc0844123, 0xbed046f4) = 0 fcntl64(4, F_GETFL) = 0x802 (flags O_RDWR|O_NONBLOCK) fcntl64(4, F_SETFL, O_RDWR) = 0 ioctl(4, AGPIOC_ACQUIRE or APM_IOC_STANDBY, 0xbed04ccc) = 0 rt_sigaction(SIGINT, {0x401a28ac, [INT], SA_RESTART|0x4000000}, {SIG_DFL}, 8) = 0 rt_sigaction(SIGTERM, {0x401a28ac, [TERM], SA_RESTART|0x4000000}, {SIG_DFL}, 8) = 0 rt_sigaction(SIGABRT, {0x401a28ac, [ABRT], SA_RESTART|0x4000000}, {SIG_DFL}, 8) = 0 open("startup.wav", O_RDONLY|O_LARGEFILE) = 3 read(3, "RIFF(\310\24\0WAVEfmt \20\0\0\0\1\0\2\0", 24) = 24 read(3, "D\254\0\0", 4) = 4 read(3, "\20\261\2\0\4\0\20\0", 8) = 8 read(3, "data\4\310\24\0", 8) = 8 write(2, "Playing WAVE \'startup.wav\' : ", 29Playing WAVE 'startup.wav' : ) = 29 write(2, "Signed 16 bit Little Endian, ", 29Signed 16 bit Little Endian, ) = 29 write(2, "Rate 44100 Hz, ", 15Rate 44100 Hz, ) = 15 write(2, "Stereo", 6Stereo) = 6 write(2, "\n", 1 ) = 1 ioctl(4, 0xc25c4110, 0xbed045f4) = 0 ioctl(4, 0xc25c4110, 0xbed042e8) = 0 ioctl(4, 0xc25c4110, 0xbed042e8) = 0 ioctl(4, 0xc25c4110, 0xbed045f4) = 0 ioctl(4, 0xc25c4110, 0xbed042e8) = 0 ioctl(4, 0xc25c4110, 0xbed042e8) = 0 ioctl(4, 0xc25c4110, 0xbed045f4) = 0 ioctl(4, 0xc25c4110, 0xbed04368) = 0 ioctl(4, 0xc25c4110, 0xbed0405c) = 0 ioctl(4, 0xc25c4110, 0xbed0405c) = 0 ioctl(4, 0xc25c4110, 0xbed04368) = 0 ioctl(4, 0xc25c4110, 0xbed04368) = 0 ioctl(4, 0xc25c4110, 0xbed0405c) = 0 ioctl(4, 0xc25c4110, 0xbed0405c) = 0 ioctl(4, 0xc25c4110, 0xbed04368) = 0 ioctl(4, 0xc25c4110snd_omap_alsa_hw_params start , 0xbed0405c) = 0 ioctl(data format is 2 -- Channel 0 rate =2 and buffer size is ac44 4, 0xc25c4110, 0xbed0405c) snd_omap_alsa_hw_params end = 0 ioctl(4, 0xc25c4110, 0xbed04368) = 0 snd_omap_alsa_prepare start4368) = 0 ioctl(4, 0xc25c4110, 0xbed0405caudio_configure_dma_channel start ) = 0 ioctl(4, 0xc25c411dma_size is 2000 0, 0xbed0405c) = 0 ioctldma_ptr is c3f20000 (4, 0xc25c4110, 0xbed04368) snd_omap_alsa_prepare end = 0 ioctl(4, 0xc25c4110, 0xbSNDRV_PCM_IOCTL1_RESET ed0405c) = 0 ioctl(4, 0xInside snd_pcm_lib_ioctl_reset c25c4110, 0xbed0405c) = 0 ioctl(4, 0xc25c4110, 0xbed04368) = 0 ioctl(4, 0xc25c4110, 0xbed03e6c) = 0 ioctl(4, 0xc25c4110, 0xbed03b60) = 0 ioctl(4, 0xc25c4110, 0xbed03b60) = 0 ioctl(4, 0xc25c4110, 0xbed03e6c) = 0 ioctl(4, 0xc25c4110, 0xbed03b60) = 0 ioctl(4, 0xc25c4110, 0xbed03b60) = 0 ioctl(4, 0xc25c4110, 0xbed03e6c) = 0 ioctl(4, 0xc25c4110, 0xbed040d4) = 0 ioctl(4, 0xc25c4110, 0xbed040d4) = 0 ioctl(4, 0xc25c4110, 0xbed040d4) = 0 ioctl(4, 0xc25c4110, 0xbed040d4) = 0 ioctl(4, 0xc25c4110, 0xbed040d4) = 0 ioctl(4, 0xc25c4110, 0xbed040d4) = 0 ioctl(4, 0xc25c4110, 0xbed040d4) = 0 ioctl(4, 0xc25c4110, 0xbed040d4) = 0 ioctl(4, 0xc25c4110, 0xbed040d4) = 0 ioctl(4, 0xc25c4110, 0xbed040d4) = 0 ioctl(4, 0xc25c4110, 0xbed040d4) = 0 ioctl(4, 0xc25c4110, 0xbed040d4) = 0 ioctl(4, 0xc25c4110, 0xbed04564) = 0 ioctl(4, 0xc25c4110, 0xbed04564) = 0 ioctl(4, 0xc25c4110, 0xbed04564) = 0 ioctl(4, 0xc25c4110, 0xbed04564) = 0 ioctl(4, 0xc25c4110, 0xbed04564) = 0 ioctl(4, 0xc25c4110, 0xbed04904) = 0 ioctl(4, 0xc25c4111, 0xbed04904) = 0 ioctl(4, 0xc0844123, 0x27e10) = 0 ioctl(4, 0xc0684113, 0xbed044c4) = 0 ioctl(4, 0xc0844123, 0x27e10) = 0 ioctl(4, 0x4140, 0x400c3ed4) = 0 ioctl(4, 0xc0844123, 0x27e10) = 0 ioctl(4, 0xc0684113, 0xbed04898) = 0 read(3, "\377\377\0\0\0\0\0\0\1\0\0\0\0\0\0\0\0\0\1\0\0\0\0\0\1"..., 8192) = 8192 ioctl(4, 0x400c4150, 0xbed04bf0) = 0 ioctl(4, 0xc0844123, 0x27e10) = 0 read(3, "\377\377\0\0\1\0\0\0\0\0\0\0\377\377\376\377\0\0\3\0\377"..., 8192) = 8192 ioctl(4, 0x400c4150, 0xbed04bf0) = 0 ioctl(4, 0xc0844123, 0x27e10) = 0 read(3, "\374\377\7\0\0\0\0\0\372\377\0\0\376\377\3\0\3\0\373\377"..., 8192) = 8192 ioctl(4, 0x400c4150, 0xbed04bf0) = 0 ioctl(4, 0xc0844123, 0x27e10) = 0 read(3, "\373\377\1\0\377\377\5\0\376\377\372\377\377\377\7\0\6"..., 8192) = 8192 ioctl(4, 0x400c4150, 0xbed04bf0) = 0 ioctl(4, 0xc0844123, 0x27e10) = 0 read(3, "\212\377{\377\212\377\210\377\220\377\226\377\214\377\213"..., 8192) = 8192 ioctl(4, 0x400c4150, 0xbed04bf0) = 0 ioctl(4, 0xc0844123, 0x27e10) = 0 read(3, ".\324\326\3438\323Q\343\375\322\34\343\254\323\223\343"..., 8192) = 8192 ioctl(4, 0x400c4150, 0xbed04bf0) = 0 ioctl(4, 0xc0844123, 0x27e10) = 0 read(3, "\2\fK\0x\v\220\375\361\n_\373\246\n\270\371\235\n;\Inside snd_pcm_do_start snd_omap_alsa_trigger start audio_set_dma_params_play start audio_set_dma_params_play end audio_start_dma_chain start Inside omap_start_dma 1 Inside omap_start_dma 2 Inside omap_start_dma 3 audio_start_dma_chain end Reading from c4954180 snd_omap_alsa_trigger end 371"..., 8192) = 8192 ioctl(4, sound_dma_irq_handler start 0x400c4150, 0xbed04bf0) =!!! In DMA IRQ handler lch=0,status=0x20, dma_status=32, data=c3cb9884 0 ioctl(4, 0xc0844123, 0x27e10callback_omap_alsa_sound_dma start ) = 0 read(3, "\336\3Inside /snd_pcm_period_elapsed 27R\357\277\330\361\357\256\331\Inside snd_pcm_update_hw_ptr_interrupt Inside snd_pcm_update_hw_ptr_pos snd_omap_alsa_pointer start audio stream->offset is 1000000 runtime->framebits is 20 Count is 8192 Offset is 4192256 and buffer size is 16384 Inside snd_pcm_update_hw_ptr_pos, pos is 0 211\360d\332(\361"..., 8192) = 8audio_set_dma_params_play start 192 ioctl(4, 0x400c4150audio_set_dma_params_play end audio_start_dma_chain start audio_start_dma_chain end Reading from c4954180 sound_dma_irq_handler end , 0xbed04bf0) = 0 ioctl(4, 0xc0844123, 0x27e10) = 0 read(3, "H\343#\3Inside snd_pcm_update_hw_ptr_pos snd_omap_alsa_pointer start audio stream->offset is 2000 runtime->framebits is 20 Count is 8192 Offset is 0 and buffer size is 16384 Inside snd_pcm_update_hw_ptr_pos, pos is 0 55\233\342\317\355\377\341\312\356\216\341\250"..., 8192) = 8192 ioctl(4, 0x400c4150 /**********waits here **************/ 0xbed04bf0) = -1 EIO (Input/output error) write(2, "aplay: pcm_write:1268: ", 23aplay: pcm_write:1268: ) = 23 write(2Inside snd_pcm_do_stop snd_omap_alsa_trigger start audio_stop_dma start Reading from c4954180 before writing to EAC_AGCTR = 60 aftere writing to EAC_AGCTR = 60 omap_stop_alsa_sound_dma end omap_clear_alsa_sound_dma start omap_clear_alsa_sound_dma end snd_omap_alsa_trigger end , "write error: Input/output errsnd_omap_alsa_hw_free start or", 31write error: Input/outputsnd_omap_alsa_hw_free end error) = 31 write(2, "\n", 1 snd_card_omap_alsa_close start ) = 1 io_omap850_audio_shutdown start submit(0x1, 0, 0x4Reading from c4954180 eac_disable_clocks start eac_disable_clocks end omap850_audio_shutdown end audio_dma_free start omap_free_alsa_sound_dma start omap_sound_dma_unlink_lch start omap_sound_dma_unlink_lch end omap_free_alsa_sound_dma end snd_card_omap_alsa_close end <unfinished ... exit status 1> Process 613 detached On 6/25/07, Pharaoh . <pharaoh137@gmail.com> wrote: > On 6/25/07, Clemens Ladisch <cladisch@fastmail.net> wrote: > > Pharaoh . wrote: > > > >The ALSA framework will stop the stream and return the error code EIO > > > >when there was no interrupt for ten seconds, i.e., when > > > >snd_pcm_period_elapsed() was not called. > > > > > > I am getting the interrupts, but why there wont be any interrupt for > > > 10 seconds? > > > > I don't quite understand this sentence. You do get interrupts? > > And snd_pcm_period_elapsed() is not called? > > > > > I am setting the periods in prepare as periods = runtime->period, so > > > interrupts should at period boundaries. > > > > runtime->periods is the number of periods. I don't know how your > > hardware works, but I guess it wants to know the period size, i.e., > > runtime->period_size converted to bytes. > > > > > > Regards, > > Clemens > > > > > Apologie for being ambiguous... > > 1. When I posted the question, I was not even getting the DMA > interrupts. The input/output error was present. > > 2. After modifying the code a little I started getting the DMA > interrupts, but the input/output error still persists. So I am > doubting I might have messed up with the > period size etc. > > 3. I am assigning s->periods = runtime->period i.e. without converting > them in bytes, in prepare (I have seen some standard omap drivers > doing the same, so I am not converting it to bytes, frames should be > okay, but I will check this in h/w manual) and I take care in trigger > too by updating the s->periods field. > > 4. Also, s->period is locked appropriately so dont think it is corrupted. > > I am attaching the source file, I have attached only 1 file since I > think it is relevant. Will send the log once I get chance to test it > again. > ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Input/output error while playing a file using aplay 2007-06-25 13:35 ` Pharaoh . @ 2007-06-25 18:38 ` Pharaoh . 2007-06-26 7:21 ` Clemens Ladisch 0 siblings, 1 reply; 15+ messages in thread From: Pharaoh . @ 2007-06-25 18:38 UTC (permalink / raw) To: Clemens Ladisch; +Cc: alsa-devel I am pruning the logs in previous e-mails here since its becoming too lengthy to read. After rewriting the pointer function I am not getting the input/output error but I am getting underruns. I think I am little closer to the working driver now, am I? here is the log, after getting couple of underrun error messages the dma just gets halted. Log: snd_card_omap_alsa_open start eac_enable_clocks start Clocks are already enabled eac_set_samplerate start eac_set_samplerate end after audio init audio_dma_request start omap_request_alsa_sound_dma start omap_request_alsa_sound_dma end snd_card_omap_alsa_open end Playing WAVE 'startup.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo snd_omap_alsa_hw_params start data format is 2 -- Channel 0 rate =2 and buffer size is ac44 snd_omap_alsa_hw_params end snd_omap_alsa_prepare start audio_configure_dma_channel start dma_size is 2000 dma_ptr is c3540000 snd_omap_alsa_prepare end SNDRV_PCM_IOCTL1_RESET Inside snd_pcm_lib_ioctl_reset Inside snd_pcm_do_start snd_omap_alsa_trigger start audio_set_dma_params_play start audio_set_dma_params_play end audio_start_dma_chain start /*These are the platform specific dma setup routines*/ Inside omap_start_dma 1 Inside omap_start_dma 2 Inside omap_start_dma 3 audio_start_dma_chain end snd_omap_alsa_trigger end sound_dma_irq_handler start !!! In DMA IRQ handler lch=0,status=0x20, dma_status=32, data=c3cb5704 callback_omap_alsa_sound_dma start Inside /snd_pcm_period_elapsed Inside snd_pcm_update_hw_ptr_interrupt Inside snd_pcm_update_hw_ptr_pos snd_omap_alsa_pointer start Inside snd_pcm_update_hw_ptr_pos, pos is 18153472 /**Here is a BUG**/ ALSA sound/core/pcm_lib.c:167: BUG: stream = 0, pos = 0x1150000, buffer size = 0x4000, period size = 0x800 Inside snd_pcm_do_stop snd_omap_alsa_trigger start audio_stop_dma start omap_stop_alsa_sound_dma end omap_clear_alsa_sound_dma start omap_clear_alsa_sound_dma end snd_omap_alsa_trigger end Not active sound_dma_irq_handler end Inside snd_pcm_status /***Under run here ****/ underrun!!! (at least -33.431 mssnd_omap_alsa_prepare start long) audio_configure_dma_channel start dma_size is 2000 dma_ptr is c3540000 snd_omap_alsa_prepare end SNDRV_PCM_IOCTL1_RESET Inside snd_pcm_lib_ioctl_reset Inside snd_pcm_do_start snd_omap_alsa_trigger start audio_set_dma_params_play start audio_set_dma_params_play end audio_start_dma_chain start Inside omap_start_dma 1 Inside omap_start_dma 2 Inside omap_start_dma 3 audio_start_dma_chain end snd_omap_alsa_trigger end sound_dma_irq_handler start !!! In DMA IRQ handler lch=0,status=0x20, dma_status=32, data=c3cb5704 callback_omap_alsa_sound_dma start Inside /snd_pcm_period_elapsed Inside snd_pcm_update_hw_ptr_interrupt Inside snd_pcm_update_hw_ptr_pos snd_omap_alsa_pointer start Inside snd_pcm_update_hw_ptr_pos, pos is 18153472 /***Bug ***/ ALSA sound/core/pcm_lib.c:167: BUG: stream = 0, pos = 0x1150000, buffer size = 0x4000, period size = 0x800 Inside snd_pcm_do_stop snd_omap_alsa_trigger start audio_stop_dma start omap_stop_alsa_sound_dma end omap_clear_alsa_sound_dma start omap_clear_alsa_sound_dma end snd_omap_alsa_trigger end Not active sound_dma_irq_handler end Inside snd_pcm_status /***underrun***/ underrun!!! (at least -33.633 mssnd_omap_alsa_prepare start long) audio_configure_dma_channel start dma_size is 2000 dma_ptr is c3540000 snd_omap_alsa_prepare end SNDRV_PCM_IOCTL1_RESET Inside snd_pcm_lib_ioctl_reset Inside snd_pcm_do_start snd_omap_alsa_trigger start audio_set_dma_params_play start audio_set_dma_params_play end audio_start_dma_chain start Inside omap_start_dma 1 Inside omap_start_dma 2 Inside omap_start_dma 3 audio_start_dma_chain end snd_omap_alsa_trigger end sound_dma_irq_handler start !!! In DMA IRQ handler lch=0,status=0x20, dma_status=32, data=c3cb5704 callback_omap_alsa_sound_dma start Inside /snd_pcm_period_elapsed Inside snd_pcm_update_hw_ptr_interrupt Inside snd_pcm_update_hw_ptr_pos snd_omap_alsa_pointer start Inside snd_pcm_update_hw_ptr_pos, pos is 18153472 /***BUG**/ ALSA sound/core/pcm_lib.c:167: BUG: stream = 0, pos = 0x1150000, buffer size = 0x4000, period size = 0x800 Inside snd_pcm_do_stop snd_omap_alsa_trigger start audio_stop_dma start omap_stop_alsa_sound_dma end omap_clear_alsa_sound_dma start omap_clear_alsa_sound_dma end snd_omap_alsa_trigger end Not active sound_dma_irq_handler end Inside snd_pcm_status /***Underrun**/ underrun!!! (at least -33.759 mssnd_omap_alsa_prepare start long) audio_configure_dma_channel start dma_size is 2000 dma_ptr is c3540000 snd_omap_alsa_prepare end SNDRV_PCM_IOCTL1_RESET Inside snd_pcm_lib_ioctl_reset Inside snd_pcm_do_start snd_omap_alsa_trigger start audio_set_dma_params_play start audio_set_dma_params_play end audio_start_dma_chain start Inside omap_start_dma 1 Inside omap_start_dma 2 /******It hangs here, the dma halts here and no further messages are shown*******/ ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Input/output error while playing a file using aplay 2007-06-25 18:38 ` Pharaoh . @ 2007-06-26 7:21 ` Clemens Ladisch 2007-06-26 10:51 ` Pharaoh . 0 siblings, 1 reply; 15+ messages in thread From: Clemens Ladisch @ 2007-06-26 7:21 UTC (permalink / raw) To: Pharaoh .; +Cc: alsa-devel Pharaoh . wrote: > After rewriting the pointer function It would really help if you'd show us the code of the version of the driver that you're currently talking about. > I am not getting the input/output error but I am getting underruns. > ... > ALSA sound/core/pcm_lib.c:167: BUG: stream = 0, pos = 0x1150000, buffer size = 0x4000, period size = 0x800 Here, "pos" is the value returned by your pointer callback. This value should have been a frame number somewhere in the buffer, i.e., in the range 0..0x3fff. Apparently, the pointer callback doesn't correctly calculate this value. Please remove most printk()s, and add some in the pointer callback to show both the value that you get from the DMA controller, and the value that this function returns. Regards, Clemens ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Input/output error while playing a file using aplay 2007-06-26 7:21 ` Clemens Ladisch @ 2007-06-26 10:51 ` Pharaoh . 2007-06-26 10:55 ` Pharaoh . 2007-06-26 13:17 ` Clemens Ladisch 0 siblings, 2 replies; 15+ messages in thread From: Pharaoh . @ 2007-06-26 10:51 UTC (permalink / raw) To: Clemens Ladisch; +Cc: alsa-devel >It would really help if you'd show us the code of the version of the >driver that you're currently talking about. Hi Clemens... I had sent you the source file having pcm callbacks yesterday, now I have modified the pointer function as follows, I am just giving the pointer function here to avoid duplication, but please let me know in case you want to have look at the entire file. static snd_pcm_uframes_t snd_omap_alsa_pointer(snd_pcm_substream_t *substream) { struct omap_eac *chip = snd_pcm_substream_chip(substream); snd_pcm_uframes_t pos = 0; FN_ENTER; pos = audio_get_dma_pos(&chip->s[substream->pstr->stream]); printk("Returning pos = %d\n", pos); return pos; FN_EXIT; } static snd_pcm_uframes_t audio_get_dma_pos(struct audio_stream *s) { snd_pcm_substream_t *substream = s->stream; snd_pcm_runtime_t *runtime = substream->runtime; unsigned long flags; dma_addr_t count; unsigned long offset; dma_addr_t src,dest; if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) { dest = omap_get_dma_dst_pos(s->lch[s->dma_q_head]); offset = dest - runtime->dma_addr; printk("dest is %u and offset is %u\n",dest,offset); } else { src = omap_get_dma_src_pos(s->lch[s->dma_q_head]); offset = src - runtime->dma_addr; printk("src is %u and offset is %u\n",dest,offset); } return bytes_to_frames(substream->runtime, offset); } And the log is as follows. For the first time. snd_omap_alsa_pointer start src is 3246792928 and offset is 3304194048 Returning pos = 20742144 Inside snd_pcm_update_hw_ptr_pos, pos is 20742144 ALSA sound/core/pcm_lib.c:167: BUG: stream = 0, pos = 0x13c8000, buffer size = 0x4000, period size = 0x800 returning pos 20742144 I can see things are horribaly wrong here.... On 6/26/07, Clemens Ladisch <cladisch@fastmail.net> wrote: > Pharaoh . wrote: > > After rewriting the pointer function > > It would really help if you'd show us the code of the version of the > driver that you're currently talking about. > > > I am not getting the input/output error but I am getting underruns. > > ... > > ALSA sound/core/pcm_lib.c:167: BUG: stream = 0, pos = 0x1150000, buffer > size = 0x4000, period size = 0x800 > > Here, "pos" is the value returned by your pointer callback. This value > should have been a frame number somewhere in the buffer, i.e., in the > range 0..0x3fff. Apparently, the pointer callback doesn't correctly > calculate this value. > > Please remove most printk()s, and add some in the pointer callback to > show both the value that you get from the DMA controller, and the value > that this function returns. > > > Regards, > Clemens > ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Input/output error while playing a file using aplay 2007-06-26 10:51 ` Pharaoh . @ 2007-06-26 10:55 ` Pharaoh . 2007-06-26 11:04 ` Pharaoh . 2007-06-26 13:17 ` Clemens Ladisch 1 sibling, 1 reply; 15+ messages in thread From: Pharaoh . @ 2007-06-26 10:55 UTC (permalink / raw) To: Clemens Ladisch; +Cc: alsa-devel wait..wait.....I need to use locking here...let me send you log after doing locking appropriately ..... On 6/26/07, Pharaoh . <pharaoh137@gmail.com> wrote: > >It would really help if you'd show us the code of the version of the > >driver that you're currently talking about. > > Hi Clemens... > > I had sent you the source file having pcm callbacks yesterday, now I > have modified the pointer function as follows, I am just giving the > pointer function here to avoid duplication, but please let me know in > case you want to have look at the entire file. > > > static snd_pcm_uframes_t snd_omap_alsa_pointer(snd_pcm_substream_t > *substream) > { > > struct omap_eac *chip = snd_pcm_substream_chip(substream); > snd_pcm_uframes_t pos = 0; > > FN_ENTER; > pos = audio_get_dma_pos(&chip->s[substream->pstr->stream]); > printk("Returning pos = %d\n", pos); > return pos; > FN_EXIT; > } > > static snd_pcm_uframes_t audio_get_dma_pos(struct audio_stream *s) > { > snd_pcm_substream_t *substream = s->stream; > snd_pcm_runtime_t *runtime = substream->runtime; > unsigned long flags; > dma_addr_t count; > unsigned long offset; > dma_addr_t src,dest; > > if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) { > dest = omap_get_dma_dst_pos(s->lch[s->dma_q_head]); > offset = dest - runtime->dma_addr; > printk("dest is %u and offset is %u\n",dest,offset); > } else { > src = omap_get_dma_src_pos(s->lch[s->dma_q_head]); > offset = src - runtime->dma_addr; > printk("src is %u and offset is %u\n",dest,offset); > } > > return bytes_to_frames(substream->runtime, offset); > } > > > And the log is as follows. > > For the first time. > > > snd_omap_alsa_pointer start > src is 3246792928 and offset is 3304194048 > Returning pos = 20742144 > Inside snd_pcm_update_hw_ptr_pos, pos is 20742144 > ALSA sound/core/pcm_lib.c:167: BUG: stream = 0, pos = 0x13c8000, > buffer size = 0x4000, period size = 0x800 > returning pos 20742144 > > I can see things are horribaly wrong here.... > > > On 6/26/07, Clemens Ladisch <cladisch@fastmail.net> wrote: > > Pharaoh . wrote: > > > After rewriting the pointer function > > > > It would really help if you'd show us the code of the version of the > > driver that you're currently talking about. > > > > > I am not getting the input/output error but I am getting underruns. > > > ... > > > ALSA sound/core/pcm_lib.c:167: BUG: stream = 0, pos = 0x1150000, buffer > > size = 0x4000, period size = 0x800 > > > > Here, "pos" is the value returned by your pointer callback. This value > > should have been a frame number somewhere in the buffer, i.e., in the > > range 0..0x3fff. Apparently, the pointer callback doesn't correctly > > calculate this value. > > > > Please remove most printk()s, and add some in the pointer callback to > > show both the value that you get from the DMA controller, and the value > > that this function returns. > > > > > > Regards, > > Clemens > > > ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Input/output error while playing a file using aplay 2007-06-26 10:55 ` Pharaoh . @ 2007-06-26 11:04 ` Pharaoh . 0 siblings, 0 replies; 15+ messages in thread From: Pharaoh . @ 2007-06-26 11:04 UTC (permalink / raw) To: Clemens Ladisch; +Cc: alsa-devel static snd_pcm_uframes_t audio_get_dma_pos(struct audio_stream *s) { snd_pcm_substream_t *substream = s->stream; snd_pcm_runtime_t *runtime = substream->runtime; unsigned long flags; dma_addr_t count; unsigned long offset; dma_addr_t src,dest; if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) { spin_lock_irqsave(&s->dma_lock, flags); dest = omap_get_dma_dst_pos(s->lch[s->dma_q_head]); offset = dest - runtime->dma_addr; spin_unlock_irqrestore(&s->dma_lock, flags); printk("dest is %u and offset is %u\n",dest,offset); } else { spin_lock_irqsave(&s->dma_lock, flags); src = omap_get_dma_src_pos(s->lch[s->dma_q_head]); offset = src - runtime->dma_addr; spin_unlock_irqrestore(&s->dma_lock, flags); printk("src is %u and offset is %u\n",dest,offset); } return bytes_to_frames(substream->runtime, offset); } and the log is as same....still no joy.. First time snd_omap_alsa_pointer start src is 3246792928 and offset is 3296722944 Returning pos = 18874368 Inside snd_pcm_update_hw_ptr_pos, pos is 18874368 ALSA sound/core/pcm_lib.c:167: BUG: stream = 0, pos = 0x1200000, buffer size = 0x4000, period size = 0x800 returning pos 18874368 ....... ....... Second time snd_omap_alsa_pointer start src is 3246792928 and offset is 3296722944 Returning pos = 18874368 Inside snd_pcm_update_hw_ptr_pos, pos is 18874368 ALSA sound/core/pcm_lib.c:167: BUG: stream = 0, pos = 0x1200000, buffer size = 0x4000, period size = 0x800 returning pos 18874368 ...... then it hangs in the omap_request_dma function. On 6/26/07, Pharaoh . <pharaoh137@gmail.com> wrote: > wait..wait.....I need to use locking here...let me send you log after > doing locking appropriately ..... > > On 6/26/07, Pharaoh . <pharaoh137@gmail.com> wrote: > > >It would really help if you'd show us the code of the version of the > > >driver that you're currently talking about. > > > > Hi Clemens... > > > > I had sent you the source file having pcm callbacks yesterday, now I > > have modified the pointer function as follows, I am just giving the > > pointer function here to avoid duplication, but please let me know in > > case you want to have look at the entire file. > > > > > > static snd_pcm_uframes_t snd_omap_alsa_pointer(snd_pcm_substream_t > > *substream) > > { > > > > struct omap_eac *chip = snd_pcm_substream_chip(substream); > > snd_pcm_uframes_t pos = 0; > > > > FN_ENTER; > > pos = audio_get_dma_pos(&chip->s[substream->pstr->stream]); > > printk("Returning pos = %d\n", pos); > > return pos; > > FN_EXIT; > > } > > > > static snd_pcm_uframes_t audio_get_dma_pos(struct audio_stream *s) > > { > > snd_pcm_substream_t *substream = s->stream; > > snd_pcm_runtime_t *runtime = substream->runtime; > > unsigned long flags; > > dma_addr_t count; > > unsigned long offset; > > dma_addr_t src,dest; > > > > if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) { > > dest = omap_get_dma_dst_pos(s->lch[s->dma_q_head]); > > offset = dest - runtime->dma_addr; > > printk("dest is %u and offset is %u\n",dest,offset); > > } else { > > src = omap_get_dma_src_pos(s->lch[s->dma_q_head]); > > offset = src - runtime->dma_addr; > > printk("src is %u and offset is %u\n",dest,offset); > > } > > > > return bytes_to_frames(substream->runtime, offset); > > } > > > > > > And the log is as follows. > > > > For the first time. > > > > > > snd_omap_alsa_pointer start > > src is 3246792928 and offset is 3304194048 > > Returning pos = 20742144 > > Inside snd_pcm_update_hw_ptr_pos, pos is 20742144 > > ALSA sound/core/pcm_lib.c:167: BUG: stream = 0, pos = 0x13c8000, > > buffer size = 0x4000, period size = 0x800 > > returning pos 20742144 > > > > I can see things are horribaly wrong here.... > > > > > > On 6/26/07, Clemens Ladisch <cladisch@fastmail.net> wrote: > > > Pharaoh . wrote: > > > > After rewriting the pointer function > > > > > > It would really help if you'd show us the code of the version of the > > > driver that you're currently talking about. > > > > > > > I am not getting the input/output error but I am getting underruns. > > > > ... > > > > ALSA sound/core/pcm_lib.c:167: BUG: stream = 0, pos = 0x1150000, > buffer > > > size = 0x4000, period size = 0x800 > > > > > > Here, "pos" is the value returned by your pointer callback. This value > > > should have been a frame number somewhere in the buffer, i.e., in the > > > range 0..0x3fff. Apparently, the pointer callback doesn't correctly > > > calculate this value. > > > > > > Please remove most printk()s, and add some in the pointer callback to > > > show both the value that you get from the DMA controller, and the value > > > that this function returns. > > > > > > > > > Regards, > > > Clemens > > > > > > ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Input/output error while playing a file using aplay 2007-06-26 10:51 ` Pharaoh . 2007-06-26 10:55 ` Pharaoh . @ 2007-06-26 13:17 ` Clemens Ladisch 2007-06-26 13:43 ` Pharaoh . 1 sibling, 1 reply; 15+ messages in thread From: Clemens Ladisch @ 2007-06-26 13:17 UTC (permalink / raw) To: Pharaoh .; +Cc: alsa-devel Pharaoh . wrote: > src = omap_get_dma_src_pos(s->lch[s->dma_q_head]); > offset = src - runtime->dma_addr; > printk("src is %u and offset is %u\n",dest,offset); > > src is 3246792928 and offset is 3304194048 > Returning pos = 20742144 > ALSA sound/core/pcm_lib.c:167: BUG: stream = 0, pos = 0x13c8000, buffer size = 0x4000, period size = 0x800 dma_addr = 0xFC9420E0 (is this correct?) src = 0xC18620E0 offset = 0xC4F20000 Apparently, the return value of omap_get_dma_src_pos() is wrong. Should this value be 16 bits? Regards, Clemens ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Input/output error while playing a file using aplay 2007-06-26 13:17 ` Clemens Ladisch @ 2007-06-26 13:43 ` Pharaoh . 2007-06-26 17:17 ` Pharaoh . 0 siblings, 1 reply; 15+ messages in thread From: Pharaoh . @ 2007-06-26 13:43 UTC (permalink / raw) To: Clemens Ladisch; +Cc: alsa-devel As per the plat-omap/dma.c the function is like this: /* * Returns current physical source address for the given DMA channel. * If the channel is running the caller must disable interrupts prior calling * this function and process the returned value before re-enabling interrupt to * prevent races with the interrupt handler. Note that in continuous mode there * is a chance for CSSA_L register overflow inbetween the two reads resulting * in incorrect return value. */ dma_addr_t omap_get_dma_src_pos(int lch) { dma_addr_t offset; if (cpu_class_is_omap1()) offset = (dma_addr_t) (OMAP1_DMA_CSSA_L_REG(lch) | (OMAP1_DMA_CSSA_U_REG(lch) << 16)); if (cpu_is_omap24xx()) offset = OMAP_DMA_CSAC_REG(lch); return offset; } I have one doubt here, I am referring Writing ALSA driver by Takashi it says following about the dma_addr_t. If you use a standard ALSA function, snd_pcm_lib_malloc_pages(), for allocating the buffer, these fields are set by the ALSA middle layer, and you should not change them by yourself. I am using the standard helper function to allocate the DMA buffer in my hw_params, so I am not setting the runtime->dma_addr field, pcm layer must be setting it, right? But in my pointer function I am accessing runtime->dma_addr where as the guide says it is i.e the physical bus address is not accessible from the main CPU. I am doing wrong accessing it? After allocating the buffer in hw_params i am trying to check the physical and virtual addr of the DMA buffer, I get Physical DMA addr is 00000000 and virtual addr is c3540000 does it mean that dma_addr is really not accessible from main CPU? In pointer when I check the dma addr I get runtime->dma_addr is 00000000 !! How come?? -pharaoh. On 6/26/07, Clemens Ladisch <cladisch@fastmail.net> wrote: > Pharaoh . wrote: > > src = omap_get_dma_src_pos(s->lch[s->dma_q_head]); > > offset = src - runtime->dma_addr; > > printk("src is %u and offset is %u\n",dest,offset); > > > > src is 3246792928 and offset is 3304194048 > > Returning pos = 20742144 > > ALSA sound/core/pcm_lib.c:167: BUG: stream = 0, pos = 0x13c8000, buffer > size = 0x4000, period size = 0x800 > > dma_addr = 0xFC9420E0 (is this correct?) > src = 0xC18620E0 > offset = 0xC4F20000 > > Apparently, the return value of omap_get_dma_src_pos() is wrong. > Should this value be 16 bits? > > > Regards, > Clemens > _______________________________________________ Alsa-devel mailing list Alsa-devel@alsa-project.org http://mailman.alsa-project.org/mailman/listinfo/alsa-devel ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Input/output error while playing a file using aplay 2007-06-26 13:43 ` Pharaoh . @ 2007-06-26 17:17 ` Pharaoh . 0 siblings, 0 replies; 15+ messages in thread From: Pharaoh . @ 2007-06-26 17:17 UTC (permalink / raw) To: Clemens Ladisch; +Cc: alsa-devel >In pointer when I check the dma addr I get >runtime->dma_addr is 00000000 !! I think runtime->dma_addr is set to 0 when the dma buffer is physically non-contiguous. ^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2007-06-26 17:17 UTC | newest] Thread overview: 15+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2007-06-22 20:12 Input/output error while playing a file using aplay Pharaoh . 2007-06-22 23:16 ` Pharaoh . 2007-06-25 6:56 ` Clemens Ladisch 2007-06-25 8:56 ` Pharaoh . 2007-06-25 11:00 ` Clemens Ladisch 2007-06-25 12:04 ` Pharaoh . 2007-06-25 13:35 ` Pharaoh . 2007-06-25 18:38 ` Pharaoh . 2007-06-26 7:21 ` Clemens Ladisch 2007-06-26 10:51 ` Pharaoh . 2007-06-26 10:55 ` Pharaoh . 2007-06-26 11:04 ` Pharaoh . 2007-06-26 13:17 ` Clemens Ladisch 2007-06-26 13:43 ` Pharaoh . 2007-06-26 17:17 ` Pharaoh .
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.