mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-23 12:14:10 +08:00
thunderbolt: Fixes for v6.12-rc5
This includes following USB4/Thunderbolt fixes for v6.12-rc5: - Fix KASAN reported stack out-of-bounds read - Honor Time Management Unit (TMU) requirements in the domain when configuring TMU mode of a newly plugged router. Both have been in linux-next with no reported issues. -----BEGIN PGP SIGNATURE----- iQJUBAABCgA+FiEEVTdhRGBbNzLrSUBaAP2fSd+ZWKAFAmcbK7IgHG1pa2Eud2Vz dGVyYmVyZ0BsaW51eC5pbnRlbC5jb20ACgkQAP2fSd+ZWKCz+BAAgid8LtaemRXt pIcCvvxrn4q9yoUnaAHo1qiTiXfWCnCdp+8IEEjkqba2E0/SUe4mrLQj3LAWN13Q 88b6o4oRj1vAMujuHmRzNG4yty1nZeEHw9xXoBZEstjiUmt1YsrTQGZ/etdZoTyF YtV3yX91jk16DG682i22PUNwy5OXTgmvvI/IlYFUa86ob6Bt2+EJoj53+Foa0p7U 2DEvmyC48HVrJ/8dQXJs/xSdW5nE8j0z40g7I5Hz0QiT92QFCxPXtEbZq63SEqlD yX0IgApKqPoCGI25TBa9pkgEANHKHH6akMCL5lYb0ejkclXIDj5jLJasLIScAlJ+ Rk2JMO5Yi3tlrE3nkVIxmfEIN1CPIZFO9JxrMap0TroOAeAc7aUuyJZ5/pk2g9kp e8n/ySh0MuaJAI8ydMn3/PzXP7NW5slXyYUMBL0ZMFucNQGrBSj3bZyp1Xv8zOtj kO6ZkH1Tr+1FM3ECCIgvMe22sLm8TZki/atnHW96BOCV+IOfgMCTjTOEDZhBOHiR o3mPIhpSJQBrP/SbWAXbpDV5qimCN27mCLASm19BDf99TAC+OizKIoYrcdxLRTBh tyJCGcYEMXohimACP4P/bMPNadjyzOCWUDYjlsIDWkXzdrhPRdP6KsXef53Z/1m2 o9TSZOAvcC2fQ84NnystB2Q7eoCmm+Y= =QBZT -----END PGP SIGNATURE----- Merge tag 'thunderbolt-for-v6.12-rc5' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/westeri/thunderbolt into usb-linus Mika writes: thunderbolt: Fixes for v6.12-rc5 This includes following USB4/Thunderbolt fixes for v6.12-rc5: - Fix KASAN reported stack out-of-bounds read - Honor Time Management Unit (TMU) requirements in the domain when configuring TMU mode of a newly plugged router. Both have been in linux-next with no reported issues. * tag 'thunderbolt-for-v6.12-rc5' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/westeri/thunderbolt: thunderbolt: Honor TMU requirements in the domain when setting TMU mode thunderbolt: Fix KASAN reported stack out-of-bounds read in tb_retimer_scan()
This commit is contained in:
commit
5963e0786a
@ -516,7 +516,7 @@ int tb_retimer_scan(struct tb_port *port, bool add)
|
||||
*/
|
||||
tb_retimer_set_inbound_sbtx(port);
|
||||
|
||||
for (i = 1; i <= TB_MAX_RETIMER_INDEX; i++) {
|
||||
for (max = 1, i = 1; i <= TB_MAX_RETIMER_INDEX; i++) {
|
||||
/*
|
||||
* Last retimer is true only for the last on-board
|
||||
* retimer (the one connected directly to the Type-C
|
||||
@ -527,9 +527,10 @@ int tb_retimer_scan(struct tb_port *port, bool add)
|
||||
last_idx = i;
|
||||
else if (ret < 0)
|
||||
break;
|
||||
|
||||
max = i;
|
||||
}
|
||||
|
||||
max = i;
|
||||
ret = 0;
|
||||
|
||||
/* Add retimers if they do not exist already */
|
||||
|
@ -288,6 +288,24 @@ static void tb_increase_tmu_accuracy(struct tb_tunnel *tunnel)
|
||||
device_for_each_child(&sw->dev, NULL, tb_increase_switch_tmu_accuracy);
|
||||
}
|
||||
|
||||
static int tb_switch_tmu_hifi_uni_required(struct device *dev, void *not_used)
|
||||
{
|
||||
struct tb_switch *sw = tb_to_switch(dev);
|
||||
|
||||
if (sw && tb_switch_tmu_is_enabled(sw) &&
|
||||
tb_switch_tmu_is_configured(sw, TB_SWITCH_TMU_MODE_HIFI_UNI))
|
||||
return 1;
|
||||
|
||||
return device_for_each_child(dev, NULL,
|
||||
tb_switch_tmu_hifi_uni_required);
|
||||
}
|
||||
|
||||
static bool tb_tmu_hifi_uni_required(struct tb *tb)
|
||||
{
|
||||
return device_for_each_child(&tb->dev, NULL,
|
||||
tb_switch_tmu_hifi_uni_required) == 1;
|
||||
}
|
||||
|
||||
static int tb_enable_tmu(struct tb_switch *sw)
|
||||
{
|
||||
int ret;
|
||||
@ -302,12 +320,30 @@ static int tb_enable_tmu(struct tb_switch *sw)
|
||||
ret = tb_switch_tmu_configure(sw,
|
||||
TB_SWITCH_TMU_MODE_MEDRES_ENHANCED_UNI);
|
||||
if (ret == -EOPNOTSUPP) {
|
||||
if (tb_switch_clx_is_enabled(sw, TB_CL1))
|
||||
ret = tb_switch_tmu_configure(sw,
|
||||
TB_SWITCH_TMU_MODE_LOWRES);
|
||||
else
|
||||
ret = tb_switch_tmu_configure(sw,
|
||||
TB_SWITCH_TMU_MODE_HIFI_BI);
|
||||
if (tb_switch_clx_is_enabled(sw, TB_CL1)) {
|
||||
/*
|
||||
* Figure out uni-directional HiFi TMU requirements
|
||||
* currently in the domain. If there are no
|
||||
* uni-directional HiFi requirements we can put the TMU
|
||||
* into LowRes mode.
|
||||
*
|
||||
* Deliberately skip bi-directional HiFi links
|
||||
* as these work independently of other links
|
||||
* (and they do not allow any CL states anyway).
|
||||
*/
|
||||
if (tb_tmu_hifi_uni_required(sw->tb))
|
||||
ret = tb_switch_tmu_configure(sw,
|
||||
TB_SWITCH_TMU_MODE_HIFI_UNI);
|
||||
else
|
||||
ret = tb_switch_tmu_configure(sw,
|
||||
TB_SWITCH_TMU_MODE_LOWRES);
|
||||
} else {
|
||||
ret = tb_switch_tmu_configure(sw, TB_SWITCH_TMU_MODE_HIFI_BI);
|
||||
}
|
||||
|
||||
/* If not supported, fallback to bi-directional HiFi */
|
||||
if (ret == -EOPNOTSUPP)
|
||||
ret = tb_switch_tmu_configure(sw, TB_SWITCH_TMU_MODE_HIFI_BI);
|
||||
}
|
||||
if (ret)
|
||||
return ret;
|
||||
|
Loading…
Reference in New Issue
Block a user