Merge "usb: dwc3: dwc3-msm-core: Avoid reading USB repeater version on CONNDONE"

This commit is contained in:
qctecmdr 2023-07-17 09:00:40 -07:00 committed by Gerrit - the friendly Code Review server
commit d3fd35877d
3 changed files with 70 additions and 17 deletions

View File

@ -637,6 +637,8 @@ struct dwc3_msm {
bool qos_rec_start;
u8 qos_rec_index;
u32 qos_rec_irq[PM_QOS_REC_MAX_RECORD];
int repeater_rev;
};
#define USB_HSPHY_3P3_VOL_MIN 3050000 /* uV */
@ -3288,21 +3290,6 @@ static void mdwc3_update_u1u2_value(struct dwc3 *dwc)
dwc->dis_u2_entry_quirk ? "disabled" : "enabled");
}
int dwc3_msm_get_repeater_ver(struct dwc3_msm *mdwc)
{
struct usb_repeater *ur = NULL;
int ver;
ur = devm_usb_get_repeater_by_phandle(mdwc->hs_phy->dev, "usb-repeater", 0);
if (IS_ERR(ur))
return -ENODEV;
ver = usb_repeater_get_version(ur);
usb_put_repeater(ur);
return ver;
}
static void handle_gsi_buffer_setup_event(struct dwc3 *dwc)
{
struct dwc3_msm *mdwc = dev_get_drvdata(dwc->dev->parent);
@ -3469,7 +3456,7 @@ void dwc3_msm_notify_event(struct dwc3 *dwc,
* silicon. Limit the controller PHY soft reset to the
* version which requires it.
*/
if (dwc3_msm_get_repeater_ver(mdwc) == USB_REPEATER_V1) {
if (mdwc->repeater_rev == USB_REPEATER_V1) {
udelay(20);
/*
* Perform usb2 phy soft reset as given
@ -5848,6 +5835,21 @@ static int dwc3_msm_core_init(struct dwc3_msm *mdwc)
return ret;
}
int dwc3_msm_get_repeater_ver(struct dwc3_msm *mdwc)
{
struct usb_repeater *ur = NULL;
ur = usb_get_repeater_by_phandle(mdwc->hs_phy->dev, "usb-repeater", 0);
if (IS_ERR(ur)) {
pr_err("unable to get repeater %ld\n", PTR_ERR(ur));
return PTR_ERR(ur);
}
mdwc->repeater_rev = usb_repeater_get_version(ur);
return 0;
}
static int dwc3_msm_parse_core_params(struct dwc3_msm *mdwc, struct device_node *dwc3_node)
{
struct device_node *phy_node;
@ -5883,6 +5885,9 @@ static int dwc3_msm_parse_core_params(struct dwc3_msm *mdwc, struct device_node
return ret;
}
/* Populate USB repeater version for TD 9.23 WA */
dwc3_msm_get_repeater_ver(mdwc);
return ret;
}

View File

@ -1,6 +1,6 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
* Copyright (c) 2021-2022, Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2021-2023, Qualcomm Innovation Center, Inc. All rights reserved.
*/
#include <linux/device.h>
#include <linux/err.h>
@ -103,6 +103,43 @@ struct usb_repeater *devm_usb_get_repeater_by_phandle(struct device *dev,
}
EXPORT_SYMBOL(devm_usb_get_repeater_by_phandle);
struct usb_repeater *usb_get_repeater_by_node(struct device_node *node)
{
struct usb_repeater *r = ERR_PTR(-ENODEV);
unsigned long flags;
spin_lock_irqsave(&repeater_lock, flags);
r = of_usb_find_repeater(node);
spin_unlock_irqrestore(&repeater_lock, flags);
return r;
}
EXPORT_SYMBOL(usb_get_repeater_by_node);
struct usb_repeater *usb_get_repeater_by_phandle(struct device *dev,
const char *phandle, u8 index)
{
struct device_node *node;
struct usb_repeater *r;
if (!dev->of_node) {
dev_dbg(dev, "device does not have a device node entry\n");
return ERR_PTR(-EINVAL);
}
node = of_parse_phandle(dev->of_node, phandle, index);
if (!node) {
dev_dbg(dev, "failed to get %s phandle in %pOF node\n", phandle,
dev->of_node);
return ERR_PTR(-ENODEV);
}
r = usb_get_repeater_by_node(node);
of_node_put(node);
return r;
}
EXPORT_SYMBOL(usb_get_repeater_by_phandle);
/**
* usb_add_repeater_dev - Add repeater device
* @r: repeater device available

View File

@ -28,6 +28,9 @@ struct usb_repeater *devm_usb_get_repeater_by_phandle(struct device *dev,
const char *phandle, u8 index);
struct usb_repeater *devm_usb_get_repeater_by_node(struct device *dev,
struct device_node *node);
struct usb_repeater *usb_get_repeater_by_phandle(struct device *dev,
const char *phandle, u8 index);
struct usb_repeater *usb_get_repeater_by_node(struct device_node *node);
void usb_put_repeater(struct usb_repeater *r);
int usb_add_repeater_dev(struct usb_repeater *r);
void usb_remove_repeater_dev(struct usb_repeater *r);
@ -40,6 +43,14 @@ static inline struct usb_repeater *devm_usb_get_repeater_by_node(
struct device *dev, struct device_node *node)
{ return ERR_PTR(-ENXIO); }
static inline struct usb_repeater *usb_get_repeater_by_phandle(
struct device *d, const char *phandle, u8 index)
{ return ERR_PTR(-ENXIO); }
static inline struct usb_repeater *usb_get_repeater_by_node(
struct device_node *node)
{ return ERR_PTR(-ENXIO); }
static inline void usb_put_repeater(struct usb_repeater *r)
{ }