thunderbolt: Move usb4_switch_wait_for_bit() to switch.c
Currently usb4_switch_wait_for_bit() used only in usb4.c Moving to switch.c to call it from other files. Also change the prefix to "tb_" to follow to the naming convention. Signed-off-by: Gil Fine <gil.fine@intel.com> Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
This commit is contained in:
parent
8a90e4fa3b
commit
1639664fb7
|
@ -1457,6 +1457,40 @@ int tb_switch_reset(struct tb_switch *sw)
|
||||||
return res.err;
|
return res.err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* tb_switch_wait_for_bit() - Wait for specified value of bits in offset
|
||||||
|
* @sw: Router to read the offset value from
|
||||||
|
* @offset: Offset in the router config space to read from
|
||||||
|
* @bit: Bit mask in the offset to wait for
|
||||||
|
* @value: Value of the bits to wait for
|
||||||
|
* @timeout_msec: Timeout in ms how long to wait
|
||||||
|
*
|
||||||
|
* Wait till the specified bits in specified offset reach specified value.
|
||||||
|
* Returns %0 in case of success, %-ETIMEDOUT if the @value was not reached
|
||||||
|
* within the given timeout or a negative errno in case of failure.
|
||||||
|
*/
|
||||||
|
int tb_switch_wait_for_bit(struct tb_switch *sw, u32 offset, u32 bit,
|
||||||
|
u32 value, int timeout_msec)
|
||||||
|
{
|
||||||
|
ktime_t timeout = ktime_add_ms(ktime_get(), timeout_msec);
|
||||||
|
|
||||||
|
do {
|
||||||
|
u32 val;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = tb_sw_read(sw, &val, TB_CFG_SWITCH, offset, 1);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
if ((val & bit) == value)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
usleep_range(50, 100);
|
||||||
|
} while (ktime_before(ktime_get(), timeout));
|
||||||
|
|
||||||
|
return -ETIMEDOUT;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* tb_plug_events_active() - enable/disable plug events on a switch
|
* tb_plug_events_active() - enable/disable plug events on a switch
|
||||||
*
|
*
|
||||||
|
|
|
@ -760,6 +760,8 @@ void tb_switch_remove(struct tb_switch *sw);
|
||||||
void tb_switch_suspend(struct tb_switch *sw, bool runtime);
|
void tb_switch_suspend(struct tb_switch *sw, bool runtime);
|
||||||
int tb_switch_resume(struct tb_switch *sw);
|
int tb_switch_resume(struct tb_switch *sw);
|
||||||
int tb_switch_reset(struct tb_switch *sw);
|
int tb_switch_reset(struct tb_switch *sw);
|
||||||
|
int tb_switch_wait_for_bit(struct tb_switch *sw, u32 offset, u32 bit,
|
||||||
|
u32 value, int timeout_msec);
|
||||||
void tb_sw_set_unplugged(struct tb_switch *sw);
|
void tb_sw_set_unplugged(struct tb_switch *sw);
|
||||||
struct tb_port *tb_switch_find_port(struct tb_switch *sw,
|
struct tb_port *tb_switch_find_port(struct tb_switch *sw,
|
||||||
enum tb_port_type type);
|
enum tb_port_type type);
|
||||||
|
|
|
@ -50,28 +50,6 @@ enum usb4_ba_index {
|
||||||
#define USB4_BA_VALUE_MASK GENMASK(31, 16)
|
#define USB4_BA_VALUE_MASK GENMASK(31, 16)
|
||||||
#define USB4_BA_VALUE_SHIFT 16
|
#define USB4_BA_VALUE_SHIFT 16
|
||||||
|
|
||||||
static int usb4_switch_wait_for_bit(struct tb_switch *sw, u32 offset, u32 bit,
|
|
||||||
u32 value, int timeout_msec)
|
|
||||||
{
|
|
||||||
ktime_t timeout = ktime_add_ms(ktime_get(), timeout_msec);
|
|
||||||
|
|
||||||
do {
|
|
||||||
u32 val;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
ret = tb_sw_read(sw, &val, TB_CFG_SWITCH, offset, 1);
|
|
||||||
if (ret)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
if ((val & bit) == value)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
usleep_range(50, 100);
|
|
||||||
} while (ktime_before(ktime_get(), timeout));
|
|
||||||
|
|
||||||
return -ETIMEDOUT;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int usb4_native_switch_op(struct tb_switch *sw, u16 opcode,
|
static int usb4_native_switch_op(struct tb_switch *sw, u16 opcode,
|
||||||
u32 *metadata, u8 *status,
|
u32 *metadata, u8 *status,
|
||||||
const void *tx_data, size_t tx_dwords,
|
const void *tx_data, size_t tx_dwords,
|
||||||
|
@ -97,7 +75,7 @@ static int usb4_native_switch_op(struct tb_switch *sw, u16 opcode,
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
ret = usb4_switch_wait_for_bit(sw, ROUTER_CS_26, ROUTER_CS_26_OV, 0, 500);
|
ret = tb_switch_wait_for_bit(sw, ROUTER_CS_26, ROUTER_CS_26_OV, 0, 500);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
@ -303,8 +281,8 @@ int usb4_switch_setup(struct tb_switch *sw)
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
return usb4_switch_wait_for_bit(sw, ROUTER_CS_6, ROUTER_CS_6_CR,
|
return tb_switch_wait_for_bit(sw, ROUTER_CS_6, ROUTER_CS_6_CR,
|
||||||
ROUTER_CS_6_CR, 50);
|
ROUTER_CS_6_CR, 50);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -480,8 +458,8 @@ int usb4_switch_set_sleep(struct tb_switch *sw)
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
return usb4_switch_wait_for_bit(sw, ROUTER_CS_6, ROUTER_CS_6_SLPR,
|
return tb_switch_wait_for_bit(sw, ROUTER_CS_6, ROUTER_CS_6_SLPR,
|
||||||
ROUTER_CS_6_SLPR, 500);
|
ROUTER_CS_6_SLPR, 500);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue