mirror of
https://github.com/linux-msm/laptops-kernel.git
synced 2026-08-13 14:19:53 -07:00
thunderbolt: Don't hardcode margining capabilities size
Use or pass ARRAY_SIZE() of the capabilities array instead of hardcoding it. USB4 Gen 4 introduces an additional data word, which requires expanding the capabilities array. Signed-off-by: Aapo Vienamo <aapo.vienamo@iki.fi> Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
This commit is contained in:
committed by
Mika Westerberg
parent
8198375843
commit
480ebc2eb5
@@ -7,6 +7,7 @@
|
||||
* Mika Westerberg <mika.westerberg@linux.intel.com>
|
||||
*/
|
||||
|
||||
#include <linux/array_size.h>
|
||||
#include <linux/bitfield.h>
|
||||
#include <linux/debugfs.h>
|
||||
#include <linux/delay.h>
|
||||
@@ -570,16 +571,13 @@ static int margining_caps_show(struct seq_file *s, void *not_used)
|
||||
{
|
||||
struct tb_margining *margining = s->private;
|
||||
struct tb *tb = margining->port->sw->tb;
|
||||
u32 cap0, cap1;
|
||||
|
||||
if (mutex_lock_interruptible(&tb->lock))
|
||||
return -ERESTARTSYS;
|
||||
|
||||
/* Dump the raw caps first */
|
||||
cap0 = margining->caps[0];
|
||||
seq_printf(s, "0x%08x\n", cap0);
|
||||
cap1 = margining->caps[1];
|
||||
seq_printf(s, "0x%08x\n", cap1);
|
||||
for (int i = 0; i < ARRAY_SIZE(margining->caps); i++)
|
||||
seq_printf(s, "0x%08x\n", margining->caps[i]);
|
||||
|
||||
seq_printf(s, "# software margining: %s\n",
|
||||
supports_software(margining) ? "yes" : "no");
|
||||
@@ -623,7 +621,7 @@ static int margining_caps_show(struct seq_file *s, void *not_used)
|
||||
if (supports_time(margining)) {
|
||||
seq_puts(s, "# time margining: yes\n");
|
||||
seq_printf(s, "# time margining is destructive: %s\n",
|
||||
cap1 & USB4_MARGIN_CAP_1_TIME_DESTR ? "yes" : "no");
|
||||
str_yes_no(margining->caps[1] & USB4_MARGIN_CAP_1_TIME_DESTR));
|
||||
|
||||
switch (independent_time_margins(margining)) {
|
||||
case USB4_MARGIN_CAP_1_TIME_MIN:
|
||||
@@ -1401,7 +1399,8 @@ static struct tb_margining *margining_alloc(struct tb_port *port,
|
||||
margining->index = index;
|
||||
margining->dev = dev;
|
||||
|
||||
ret = usb4_port_margining_caps(port, target, index, margining->caps);
|
||||
ret = usb4_port_margining_caps(port, target, index, margining->caps,
|
||||
ARRAY_SIZE(margining->caps));
|
||||
if (ret) {
|
||||
kfree(margining);
|
||||
return NULL;
|
||||
|
||||
@@ -1388,7 +1388,7 @@ struct usb4_port_margining_params {
|
||||
};
|
||||
|
||||
int usb4_port_margining_caps(struct tb_port *port, enum usb4_sb_target target,
|
||||
u8 index, u32 *caps);
|
||||
u8 index, u32 *caps, size_t ncaps);
|
||||
int usb4_port_hw_margin(struct tb_port *port, enum usb4_sb_target target,
|
||||
u8 index, const struct usb4_port_margining_params *params,
|
||||
u32 *results);
|
||||
|
||||
@@ -1631,11 +1631,12 @@ int usb4_port_asym_start(struct tb_port *port)
|
||||
* @target: Sideband target
|
||||
* @index: Retimer index if taget is %USB4_SB_TARGET_RETIMER
|
||||
* @caps: Array with at least two elements to hold the results
|
||||
* @ncaps: Number of elements in the caps array
|
||||
*
|
||||
* Reads the USB4 port lane margining capabilities into @caps.
|
||||
*/
|
||||
int usb4_port_margining_caps(struct tb_port *port, enum usb4_sb_target target,
|
||||
u8 index, u32 *caps)
|
||||
u8 index, u32 *caps, size_t ncaps)
|
||||
{
|
||||
int ret;
|
||||
|
||||
@@ -1645,7 +1646,7 @@ int usb4_port_margining_caps(struct tb_port *port, enum usb4_sb_target target,
|
||||
return ret;
|
||||
|
||||
return usb4_port_sb_read(port, target, index, USB4_SB_DATA, caps,
|
||||
sizeof(*caps) * 2);
|
||||
sizeof(*caps) * ncaps);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user