[PATCH] soundwire: update Intel BPT message length limitation

Bard Liao posted 1 patch 9 months, 2 weeks ago
Documentation/driver-api/soundwire/bra.rst | 2 +-
drivers/soundwire/intel_ace2x.c            | 8 ++++----
2 files changed, 5 insertions(+), 5 deletions(-)
[PATCH] soundwire: update Intel BPT message length limitation
Posted by Bard Liao 9 months, 2 weeks ago
The limitation of "must be multiples of 32 bytes" does not fit the
requirement of current Intel platforms. Update it to meet the
requirement.

Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
---
 Documentation/driver-api/soundwire/bra.rst | 2 +-
 drivers/soundwire/intel_ace2x.c            | 8 ++++----
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/Documentation/driver-api/soundwire/bra.rst b/Documentation/driver-api/soundwire/bra.rst
index 8500253fa3e8..c08ab2591496 100644
--- a/Documentation/driver-api/soundwire/bra.rst
+++ b/Documentation/driver-api/soundwire/bra.rst
@@ -333,4 +333,4 @@ FIFO sizes to avoid xruns.
 
 Alignment requirements are currently not enforced at the core level
 but at the platform-level, e.g. for Intel the data sizes must be
-multiples of 32 bytes.
+equal to or larger than 16 bytes.
diff --git a/drivers/soundwire/intel_ace2x.c b/drivers/soundwire/intel_ace2x.c
index 5b31e1f69591..f899c966cfaf 100644
--- a/drivers/soundwire/intel_ace2x.c
+++ b/drivers/soundwire/intel_ace2x.c
@@ -245,7 +245,7 @@ static void intel_ace2x_bpt_close_stream(struct sdw_intel *sdw, struct sdw_slave
 	cdns->bus.bpt_stream = NULL;
 }
 
-#define INTEL_BPT_MSG_BYTE_ALIGNMENT 32
+#define INTEL_BPT_MSG_BYTE_MIN 16
 
 static int intel_ace2x_bpt_send_async(struct sdw_intel *sdw, struct sdw_slave *slave,
 				      struct sdw_bpt_msg *msg)
@@ -253,9 +253,9 @@ static int intel_ace2x_bpt_send_async(struct sdw_intel *sdw, struct sdw_slave *s
 	struct sdw_cdns *cdns = &sdw->cdns;
 	int ret;
 
-	if (msg->len % INTEL_BPT_MSG_BYTE_ALIGNMENT) {
-		dev_err(cdns->dev, "BPT message length %d is not a multiple of %d bytes\n",
-			msg->len, INTEL_BPT_MSG_BYTE_ALIGNMENT);
+	if (msg->len < INTEL_BPT_MSG_BYTE_MIN) {
+		dev_err(cdns->dev, "BPT message length %d is less than the minimum bytes %d\n",
+			msg->len, INTEL_BPT_MSG_BYTE_MIN);
 		return -EINVAL;
 	}
 
-- 
2.43.0

Re: [PATCH] soundwire: update Intel BPT message length limitation
Posted by Vinod Koul 8 months ago
On Tue, 29 Apr 2025 20:23:37 +0800, Bard Liao wrote:
> The limitation of "must be multiples of 32 bytes" does not fit the
> requirement of current Intel platforms. Update it to meet the
> requirement.
> 
> 

Applied, thanks!

[1/1] soundwire: update Intel BPT message length limitation
      commit: 393350c1691f1cbf3a0436f2a12c2b4347c4e953

Best regards,
-- 
~Vinod
Re: [PATCH] soundwire: update Intel BPT message length limitation
Posted by Vinod Koul 8 months, 4 weeks ago
On 29-04-25, 20:23, Bard Liao wrote:
> The limitation of "must be multiples of 32 bytes" does not fit the
> requirement of current Intel platforms. Update it to meet the
> requirement.
> 
> Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
> Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
> Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
> ---
>  Documentation/driver-api/soundwire/bra.rst | 2 +-
>  drivers/soundwire/intel_ace2x.c            | 8 ++++----
>  2 files changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/Documentation/driver-api/soundwire/bra.rst b/Documentation/driver-api/soundwire/bra.rst
> index 8500253fa3e8..c08ab2591496 100644
> --- a/Documentation/driver-api/soundwire/bra.rst
> +++ b/Documentation/driver-api/soundwire/bra.rst
> @@ -333,4 +333,4 @@ FIFO sizes to avoid xruns.
>  
>  Alignment requirements are currently not enforced at the core level
>  but at the platform-level, e.g. for Intel the data sizes must be
> -multiples of 32 bytes.
> +equal to or larger than 16 bytes.
> diff --git a/drivers/soundwire/intel_ace2x.c b/drivers/soundwire/intel_ace2x.c
> index 5b31e1f69591..f899c966cfaf 100644
> --- a/drivers/soundwire/intel_ace2x.c
> +++ b/drivers/soundwire/intel_ace2x.c
> @@ -245,7 +245,7 @@ static void intel_ace2x_bpt_close_stream(struct sdw_intel *sdw, struct sdw_slave
>  	cdns->bus.bpt_stream = NULL;
>  }
>  
> -#define INTEL_BPT_MSG_BYTE_ALIGNMENT 32
> +#define INTEL_BPT_MSG_BYTE_MIN 16
>  
>  static int intel_ace2x_bpt_send_async(struct sdw_intel *sdw, struct sdw_slave *slave,
>  				      struct sdw_bpt_msg *msg)
> @@ -253,9 +253,9 @@ static int intel_ace2x_bpt_send_async(struct sdw_intel *sdw, struct sdw_slave *s
>  	struct sdw_cdns *cdns = &sdw->cdns;
>  	int ret;
>  
> -	if (msg->len % INTEL_BPT_MSG_BYTE_ALIGNMENT) {
> -		dev_err(cdns->dev, "BPT message length %d is not a multiple of %d bytes\n",
> -			msg->len, INTEL_BPT_MSG_BYTE_ALIGNMENT);
> +	if (msg->len < INTEL_BPT_MSG_BYTE_MIN) {

Reducing is fine, but we should still check it is aligned..?

> +		dev_err(cdns->dev, "BPT message length %d is less than the minimum bytes %d\n",
> +			msg->len, INTEL_BPT_MSG_BYTE_MIN);
>  		return -EINVAL;
>  	}
>  
> -- 
> 2.43.0

-- 
~Vinod
RE: [PATCH] soundwire: update Intel BPT message length limitation
Posted by Liao, Bard 8 months, 4 weeks ago

> -----Original Message-----
> From: Vinod Koul <vkoul@kernel.org>
> Sent: Wednesday, May 14, 2025 7:41 PM
> To: Bard Liao <yung-chuan.liao@linux.intel.com>
> Cc: linux-sound@vger.kernel.org; linux-kernel@vger.kernel.org; pierre-
> louis.bossart@linux.dev; Liao, Bard <bard.liao@intel.com>
> Subject: Re: [PATCH] soundwire: update Intel BPT message length limitation
> 
> On 29-04-25, 20:23, Bard Liao wrote:
> > The limitation of "must be multiples of 32 bytes" does not fit the
> > requirement of current Intel platforms. Update it to meet the
> > requirement.
> >
> > Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
> > Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
> > Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
> > ---
> >  Documentation/driver-api/soundwire/bra.rst | 2 +-
> >  drivers/soundwire/intel_ace2x.c            | 8 ++++----
> >  2 files changed, 5 insertions(+), 5 deletions(-)
> >
> > diff --git a/Documentation/driver-api/soundwire/bra.rst
> b/Documentation/driver-api/soundwire/bra.rst
> > index 8500253fa3e8..c08ab2591496 100644
> > --- a/Documentation/driver-api/soundwire/bra.rst
> > +++ b/Documentation/driver-api/soundwire/bra.rst
> > @@ -333,4 +333,4 @@ FIFO sizes to avoid xruns.
> >
> >  Alignment requirements are currently not enforced at the core level
> >  but at the platform-level, e.g. for Intel the data sizes must be
> > -multiples of 32 bytes.
> > +equal to or larger than 16 bytes.
> > diff --git a/drivers/soundwire/intel_ace2x.c b/drivers/soundwire/intel_ace2x.c
> > index 5b31e1f69591..f899c966cfaf 100644
> > --- a/drivers/soundwire/intel_ace2x.c
> > +++ b/drivers/soundwire/intel_ace2x.c
> > @@ -245,7 +245,7 @@ static void intel_ace2x_bpt_close_stream(struct
> sdw_intel *sdw, struct sdw_slave
> >  	cdns->bus.bpt_stream = NULL;
> >  }
> >
> > -#define INTEL_BPT_MSG_BYTE_ALIGNMENT 32
> > +#define INTEL_BPT_MSG_BYTE_MIN 16
> >
> >  static int intel_ace2x_bpt_send_async(struct sdw_intel *sdw, struct
> sdw_slave *slave,
> >  				      struct sdw_bpt_msg *msg)
> > @@ -253,9 +253,9 @@ static int intel_ace2x_bpt_send_async(struct
> sdw_intel *sdw, struct sdw_slave *s
> >  	struct sdw_cdns *cdns = &sdw->cdns;
> >  	int ret;
> >
> > -	if (msg->len % INTEL_BPT_MSG_BYTE_ALIGNMENT) {
> > -		dev_err(cdns->dev, "BPT message length %d is not a multiple of
> %d bytes\n",
> > -			msg->len, INTEL_BPT_MSG_BYTE_ALIGNMENT);
> > +	if (msg->len < INTEL_BPT_MSG_BYTE_MIN) {
> 
> Reducing is fine, but we should still check it is aligned..?

Pad will be added if the message length is not aligned.
For example, length = 17 works on my test.

> 
> > +		dev_err(cdns->dev, "BPT message length %d is less than the
> minimum bytes %d\n",
> > +			msg->len, INTEL_BPT_MSG_BYTE_MIN);
> >  		return -EINVAL;
> >  	}
> >
> > --
> > 2.43.0
> 
> --
> ~Vinod