[alsa-devel] alsa on Atmel at91
Liam Girdwood
lg at opensource.wolfsonmicro.com
Thu May 10 15:38:54 CEST 2007
On Thu, 2007-05-10 at 13:29 +0200, Michel Benoit wrote:
> I put this problem aside for a while but I have now managed to narrow
> it down a little
>
> I'm trying to build alsa-lib 1.0.13 for a at91sam9260 target
> (arm926ej-s). I'm using gcc 4.1.2 built with buildroot (uclibc). I
> seem to be having a problem passing in arguments to some libasound
> functions.
>
Iirc, the compiler bug also showed up on the dummy alsa device. Does the
same thing happen when playing to the ALSA dummy device on AT91 ?
> I have added some printfs to the following lib function (src/pcm.c):
>
>
> int snd_pcm_hw_params_get_period_size(const snd_pcm_hw_params_t
> *params, snd_pcm_uframes_t *val, int *dir)
> {
> unsigned long _val;
>
> printf("get_period_size() %lu %lu %08x %08x %08x \n", _val,
> *val, val, dir, params );
>
> int err = snd_pcm_hw_param_get(params, SND_PCM_HW_PARAM_PERIOD_SIZE,
> &_val, NULL);
> if (err >= 0)
> *val = _val;
>
> printf("get_period_size() %lu %lu %08x %08x %08x %d\n", _val,
> *val, val, dir, params, err );
>
> return err;
> }
>
>
> as well as to the program that calls the lib function (test/pcm.c):
>
>
> printf("period_size=%lu %08x dir=%d %08x params %08x \n",
> size, &size, dir, &dir, params);
> err = snd_pcm_hw_params_get_period_size(params, &size, NULL);
> if (err < 0) {
> printf("Unable to get period size for playback: %s\n",
> snd_strerror(err));
> return err;
> }
> period_size = size;
> printf("period_size=%lu %08x dir=%d %08x params %08x \n",
> size, &size, dir, &dir, params);
>
>
> When I run the program I get the following output
>
> # pcm
> Playback device is plughw:0,0
It's best to change this to hw:0,0 to help rule out any AT91 driver
issues.
> Stream parameters are 44100Hz, S16_LE, 1 channels
> Sine wave rate is 440.0000Hz
> Using transfer method: write
> period_size=49572 bec48954 dir=0 bec48950 params bec489e4
> get_period_size() 1073758756 3200551252 bec48924 bec48954 bec489e4
> get_period_size() 1248 1248 bec48924 bec48954 bec489e4 0
> period_size=49572 bec48954 dir=0 bec48950 params bec489e4
>
> which shows that the pointers to 'params' is ok but that the pointer
> to 'val' is incorrect (bec48924 instead of bec48954) and the pointer
> to 'dir' is also wrong (bec48954 instead of bec48950 = the pointer to
> val).
>
> What could be the cause of this kind of error? Somehow the arguments
> passed to snd_pcm_hw_params_get_period_size() are getting mangled.
>
> I have tried removing all optimisations, using other versions of gcc
> (4.0.4 and 3.4.6) and using EABI instead of OABI. I always get the
> same result.
>
> Any tips on how I can proceed in debugging this problem?
>
> Are there any compiler or linker flags that could be responsible ?
>
Did you build any of the toolchains with OE ? I've not had any audio gcc
problems on ARM with OE toolchains since the cse bug.
Liam
More information about the Alsa-devel
mailing list