Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

usb: mtu3: fix U3 port link issue

the issue is introduced when @is_u3_ip is used in mtu3_device_enabe()
before initialized in mtu3_mem_alloc(), so get global IP information
at first before used by following functins.

Signed-off-by: Chunfeng Yun <chunfeng.yun@mediatek.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Chunfeng Yun and committed by
Greg Kroah-Hartman
220d88ea c7d4abbc

+10 -8
+10 -8
drivers/usb/mtu3/mtu3_core.c
··· 481 481 void __iomem *mbase = mtu->mac_base; 482 482 struct mtu3_ep *ep_array; 483 483 int in_ep_num, out_ep_num; 484 - u32 cap_epinfo, cap_dev; 484 + u32 cap_epinfo; 485 485 int ret; 486 486 int i; 487 - 488 - mtu->hw_version = mtu3_readl(mtu->ippc_base, U3D_SSUSB_HW_ID); 489 - 490 - cap_dev = mtu3_readl(mtu->ippc_base, U3D_SSUSB_IP_DEV_CAP); 491 - mtu->is_u3_ip = !!SSUSB_IP_DEV_U3_PORT_NUM(cap_dev); 492 487 493 488 cap_epinfo = mtu3_readl(mbase, U3D_CAP_EPINFO); 494 489 in_ep_num = CAP_TX_EP_NUM(cap_epinfo); 495 490 out_ep_num = CAP_RX_EP_NUM(cap_epinfo); 496 491 497 - dev_info(mtu->dev, "IP version 0x%x(%s IP)\n", mtu->hw_version, 498 - mtu->is_u3_ip ? "U3" : "U2"); 499 492 dev_info(mtu->dev, "fifosz/epnum: Tx=%#x/%d, Rx=%#x/%d\n", 500 493 mtu3_readl(mbase, U3D_CAP_EPNTXFFSZ), in_ep_num, 501 494 mtu3_readl(mbase, U3D_CAP_EPNRXFFSZ), out_ep_num); ··· 725 732 726 733 static int mtu3_hw_init(struct mtu3 *mtu) 727 734 { 735 + u32 cap_dev; 728 736 int ret; 737 + 738 + mtu->hw_version = mtu3_readl(mtu->ippc_base, U3D_SSUSB_HW_ID); 739 + 740 + cap_dev = mtu3_readl(mtu->ippc_base, U3D_SSUSB_IP_DEV_CAP); 741 + mtu->is_u3_ip = !!SSUSB_IP_DEV_U3_PORT_NUM(cap_dev); 742 + 743 + dev_info(mtu->dev, "IP version 0x%x(%s IP)\n", mtu->hw_version, 744 + mtu->is_u3_ip ? "U3" : "U2"); 729 745 730 746 mtu3_device_reset(mtu); 731 747