From 7408289f53449f5dd93a8ef93c400bc5051a326c Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 31 Aug 2024 08:22:06 +0200 Subject: [PATCH] 4.19-stable patches added patches: soundwire-stream-fix-programming-slave-ports-for-non-continous-port-maps.patch --- queue-4.19/series | 1 + ...ve-ports-for-non-continous-port-maps.patch | 58 +++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 queue-4.19/soundwire-stream-fix-programming-slave-ports-for-non-continous-port-maps.patch diff --git a/queue-4.19/series b/queue-4.19/series index bd66c63571c..9d8bee9995e 100644 --- a/queue-4.19/series +++ b/queue-4.19/series @@ -84,3 +84,4 @@ fbmem-check-virtual-screen-sizes-in-fb_set_var.patch net-rds-fix-possible-deadlock-in-rds_message_put.patch ida-fix-crash-in-ida_free-when-the-bitmap-is-empty.patch net-prevent-mss-overflow-in-skb_segment.patch +soundwire-stream-fix-programming-slave-ports-for-non-continous-port-maps.patch diff --git a/queue-4.19/soundwire-stream-fix-programming-slave-ports-for-non-continous-port-maps.patch b/queue-4.19/soundwire-stream-fix-programming-slave-ports-for-non-continous-port-maps.patch new file mode 100644 index 00000000000..f20c5dbce49 --- /dev/null +++ b/queue-4.19/soundwire-stream-fix-programming-slave-ports-for-non-continous-port-maps.patch @@ -0,0 +1,58 @@ +From ab8d66d132bc8f1992d3eb6cab8d32dda6733c84 Mon Sep 17 00:00:00 2001 +From: Krzysztof Kozlowski +Date: Mon, 29 Jul 2024 16:01:57 +0200 +Subject: soundwire: stream: fix programming slave ports for non-continous port maps + +From: Krzysztof Kozlowski + +commit ab8d66d132bc8f1992d3eb6cab8d32dda6733c84 upstream. + +Two bitmasks in 'struct sdw_slave_prop' - 'source_ports' and +'sink_ports' - define which ports to program in +sdw_program_slave_port_params(). The masks are used to get the +appropriate data port properties ('struct sdw_get_slave_dpn_prop') from +an array. + +Bitmasks can be non-continuous or can start from index different than 0, +thus when looking for matching port property for given port, we must +iterate over mask bits, not from 0 up to number of ports. + +This fixes allocation and programming slave ports, when a source or sink +masks start from further index. + +Fixes: f8101c74aa54 ("soundwire: Add Master and Slave port programming") +Cc: stable@vger.kernel.org +Signed-off-by: Krzysztof Kozlowski +Reviewed-by: Pierre-Louis Bossart +Link: https://lore.kernel.org/r/20240729140157.326450-1-krzysztof.kozlowski@linaro.org +Signed-off-by: Vinod Koul +Signed-off-by: Greg Kroah-Hartman +--- + drivers/soundwire/stream.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +--- a/drivers/soundwire/stream.c ++++ b/drivers/soundwire/stream.c +@@ -1232,18 +1232,18 @@ struct sdw_dpn_prop *sdw_get_slave_dpn_p + unsigned int port_num) + { + struct sdw_dpn_prop *dpn_prop; +- u8 num_ports; ++ unsigned long mask; + int i; + + if (direction == SDW_DATA_DIR_TX) { +- num_ports = hweight32(slave->prop.source_ports); ++ mask = slave->prop.source_ports; + dpn_prop = slave->prop.src_dpn_prop; + } else { +- num_ports = hweight32(slave->prop.sink_ports); ++ mask = slave->prop.sink_ports; + dpn_prop = slave->prop.sink_dpn_prop; + } + +- for (i = 0; i < num_ports; i++) { ++ for_each_set_bit(i, &mask, 32) { + if (dpn_prop[i].num == port_num) + return &dpn_prop[i]; + } -- 2.47.3