[alsa-devel] [PATCH 0/5] ASoC: Intel: IPC framework updates

Pierre-Louis Bossart pierre-louis.bossart at linux.intel.com
Mon Jul 22 23:12:19 CEST 2019



On 7/20/19 2:45 PM, Cezary Rojewski wrote:
> Existing IPC framework omits crucial part of the entire communication:
> reply header. Some IPCs cannot function at all without the access to
> said header. Update the sst-ipc with new sst_ipc_message structure to
> represent both request and reply allowing reply-processing handlers to
> save received responses.
> 
> Despite the range of changes required for model to be updated, no
> functional changes are made for core hanswell, baytrail and skylake
> message handlers. Reply-processing handlers now save received response
> header yet no usage is added by default.
> 
> To allow for future changes, righful kings of IPC kingdom need to be put
> back on the throne. This update addresses one of them: LARGE_CONFIG_GET.
> 
> Cezary Rojewski (5):
>    ASoC: Intel: Update request-reply IPC model

I had a doubt on the structure of this patchset since you first change 
the structure definitions/prototypes and then use them in follow-up 
patches, and sure enough if I apply the first patch only the compilation 
is broken, see below.

The rule is that we can't break git bisect. And if you squash the 
patches together, then you have a really complicated patch to 
review/test, so like I said earlier such invasive changes in shared 
prototypes are really painful.

>    ASoC: Intel: Haswell: Align with updated request-reply model
>    ASoC: Intel: Baytrail: Align with updated request-reply model
>    ASoC: Intel: Skylake: Align with updated request-reply model
>    ASoC: Intel: Skylake: large_config_get overhaul
> 
>   sound/soc/intel/baytrail/sst-baytrail-ipc.c |  65 ++++----
>   sound/soc/intel/common/sst-ipc.c            |  68 ++++----
>   sound/soc/intel/common/sst-ipc.h            |  27 ++--
>   sound/soc/intel/haswell/sst-haswell-ipc.c   | 164 +++++++++++---------
>   sound/soc/intel/skylake/cnl-sst.c           |   6 +-
>   sound/soc/intel/skylake/skl-messages.c      |   3 +-
>   sound/soc/intel/skylake/skl-sst-ipc.c       | 152 ++++++++++--------
>   sound/soc/intel/skylake/skl-sst-ipc.h       |   3 +-
>   8 files changed, 259 insertions(+), 229 deletions(-)


  CC [M]  sound/soc/intel/baytrail/sst-baytrail-ipc.o
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c: 
In function ‘sst_byt_stream_update’:
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c:214:18: 
error: ‘struct ipc_message’ has no member named ‘header’
   u64 header = msg->header;
                   ^~
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c: 
In function ‘sst_byt_process_reply’:
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c:244:6: 
error: ‘struct ipc_message’ has no member named ‘rx_size’
    msg->rx_size = sst_byt_header_data(header);
       ^~
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c:245:35: 
error: ‘struct ipc_message’ has no member named ‘rx_data’
    sst_dsp_inbox_read(byt->dsp, msg->rx_data, msg->rx_size);
                                    ^~
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c:245:49: 
error: ‘struct ipc_message’ has no member named ‘rx_size’
    sst_dsp_inbox_read(byt->dsp, msg->rx_data, msg->rx_size);
                                                  ^~
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c: 
In function ‘sst_byt_stream_commit’:
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c:418:43: 
error: incompatible type for argument 2 of ‘sst_ipc_tx_message_wait’
   ret = sst_ipc_tx_message_wait(&byt->ipc, header, str_req,
                                            ^~~~~~
In file included from 
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c:25:
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/../common/sst-ipc.h:70:25: 
note: expected ‘struct sst_ipc_message’ but argument is of type ‘u64’ 
{aka ‘long long unsigned int’}
   struct sst_ipc_message request, struct sst_ipc_message *reply);
   ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c:418:51: 
error: passing argument 3 of ‘sst_ipc_tx_message_wait’ from incompatible 
pointer type [-Werror=incompatible-pointer-types]
   ret = sst_ipc_tx_message_wait(&byt->ipc, header, str_req,
                                                    ^~~~~~~
In file included from 
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c:25:
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/../common/sst-ipc.h:70:58: 
note: expected ‘struct sst_ipc_message *’ but argument is of type 
‘struct sst_byt_alloc_params *’
   struct sst_ipc_message request, struct sst_ipc_message *reply);
                                   ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c:418:8: 
error: too many arguments to function ‘sst_ipc_tx_message_wait’
   ret = sst_ipc_tx_message_wait(&byt->ipc, header, str_req,
         ^~~~~~~~~~~~~~~~~~~~~~~
In file included from 
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c:25:
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/../common/sst-ipc.h:69:5: 
note: declared here
  int sst_ipc_tx_message_wait(struct sst_generic_ipc *ipc,
      ^~~~~~~~~~~~~~~~~~~~~~~
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c: 
In function ‘sst_byt_stream_free’:
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c:442:43: 
error: incompatible type for argument 2 of ‘sst_ipc_tx_message_wait’
   ret = sst_ipc_tx_message_wait(&byt->ipc, header, NULL, 0, NULL, 0);
                                            ^~~~~~
In file included from 
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c:25:
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/../common/sst-ipc.h:70:25: 
note: expected ‘struct sst_ipc_message’ but argument is of type ‘u64’ 
{aka ‘long long unsigned int’}
   struct sst_ipc_message request, struct sst_ipc_message *reply);
   ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c:442:8: 
error: too many arguments to function ‘sst_ipc_tx_message_wait’
   ret = sst_ipc_tx_message_wait(&byt->ipc, header, NULL, 0, NULL, 0);
         ^~~~~~~~~~~~~~~~~~~~~~~
In file included from 
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c:25:
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/../common/sst-ipc.h:69:5: 
note: declared here
  int sst_ipc_tx_message_wait(struct sst_generic_ipc *ipc,
      ^~~~~~~~~~~~~~~~~~~~~~~
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c: 
In function ‘sst_byt_stream_operations’:
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c:466:45: 
error: incompatible type for argument 2 of ‘sst_ipc_tx_message_wait’
    return sst_ipc_tx_message_wait(&byt->ipc, header, NULL,
                                              ^~~~~~
In file included from 
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c:25:
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/../common/sst-ipc.h:70:25: 
note: expected ‘struct sst_ipc_message’ but argument is of type ‘u64’ 
{aka ‘long long unsigned int’}
   struct sst_ipc_message request, struct sst_ipc_message *reply);
   ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c:466:10: 
error: too many arguments to function ‘sst_ipc_tx_message_wait’
    return sst_ipc_tx_message_wait(&byt->ipc, header, NULL,
           ^~~~~~~~~~~~~~~~~~~~~~~
In file included from 
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c:25:
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/../common/sst-ipc.h:69:5: 
note: declared here
  int sst_ipc_tx_message_wait(struct sst_generic_ipc *ipc,
      ^~~~~~~~~~~~~~~~~~~~~~~
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c:469:47: 
error: incompatible type for argument 2 of ‘sst_ipc_tx_message_nowait’
    return sst_ipc_tx_message_nowait(&byt->ipc, header,
                                                ^~~~~~
In file included from 
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c:25:
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/../common/sst-ipc.h:73:25: 
note: expected ‘struct sst_ipc_message’ but argument is of type ‘u64’ 
{aka ‘long long unsigned int’}
   struct sst_ipc_message request);
   ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c:469:10: 
error: too many arguments to function ‘sst_ipc_tx_message_nowait’
    return sst_ipc_tx_message_nowait(&byt->ipc, header,
           ^~~~~~~~~~~~~~~~~~~~~~~~~
In file included from 
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c:25:
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/../common/sst-ipc.h:72:5: 
note: declared here
  int sst_ipc_tx_message_nowait(struct sst_generic_ipc *ipc,
      ^~~~~~~~~~~~~~~~~~~~~~~~~
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c: 
In function ‘sst_byt_stream_start’:
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c:490:45: 
error: incompatible type for argument 2 of ‘sst_ipc_tx_message_nowait’
   ret = sst_ipc_tx_message_nowait(&byt->ipc, header, tx_msg, size);
                                              ^~~~~~
In file included from 
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c:25:
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/../common/sst-ipc.h:73:25: 
note: expected ‘struct sst_ipc_message’ but argument is of type ‘u64’ 
{aka ‘long long unsigned int’}
   struct sst_ipc_message request);
   ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c:490:8: 
error: too many arguments to function ‘sst_ipc_tx_message_nowait’
   ret = sst_ipc_tx_message_nowait(&byt->ipc, header, tx_msg, size);
         ^~~~~~~~~~~~~~~~~~~~~~~~~
In file included from 
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c:25:
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/../common/sst-ipc.h:72:5: 
note: declared here
  int sst_ipc_tx_message_nowait(struct sst_generic_ipc *ipc,
      ^~~~~~~~~~~~~~~~~~~~~~~~~
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c: 
In function ‘byt_tx_msg’:
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c:626:9: 
error: ‘struct ipc_message’ has no member named ‘header’
   if (msg->header & IPC_HEADER_LARGE(true))
          ^~
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c:627:37: 
error: ‘struct ipc_message’ has no member named ‘tx_data’
    sst_dsp_outbox_write(ipc->dsp, msg->tx_data, msg->tx_size);
                                      ^~
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c:627:51: 
error: ‘struct ipc_message’ has no member named ‘tx_size’
    sst_dsp_outbox_write(ipc->dsp, msg->tx_data, msg->tx_size);
                                                    ^~
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c:629:55: 
error: ‘struct ipc_message’ has no member named ‘header’
   sst_dsp_shim_write64_unlocked(ipc->dsp, SST_IPCX, msg->header);
                                                        ^~
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c: 
In function ‘byt_tx_data_copy’:
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c:651:13: 
error: ‘struct ipc_message’ has no member named ‘tx_data’
   *(u32 *)msg->tx_data = (u32)(msg->header & (u32)-1);
              ^~
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c:651:34: 
error: ‘struct ipc_message’ has no member named ‘header’
   *(u32 *)msg->tx_data = (u32)(msg->header & (u32)-1);
                                   ^~
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c:652:12: 
error: ‘struct ipc_message’ has no member named ‘tx_data’
   memcpy(msg->tx_data + sizeof(u32), tx_data, tx_size);
             ^~
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c:653:5: 
error: ‘struct ipc_message’ has no member named ‘tx_size’
   msg->tx_size += sizeof(u32);
      ^~
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c: 
In function ‘sst_byt_stream_operations’:
/data/pbossart/ktest/broonie-next/sound/soc/intel/baytrail/sst-baytrail-ipc.c:471:1: 
warning: control reaches end of non-void function [-Wreturn-type]
  }
  ^
cc1: some warnings being treated as errors



More information about the Alsa-devel mailing list