diff --git a/drivers/usb/gadget/function/f_gsi.c b/drivers/usb/gadget/function/f_gsi.c index 4c52ac91f0ca..687c6a2a96b5 100644 --- a/drivers/usb/gadget/function/f_gsi.c +++ b/drivers/usb/gadget/function/f_gsi.c @@ -3010,6 +3010,15 @@ static void gsi_get_ether_addr(const char *str, u8 *dev_addr) random_ether_addr(dev_addr); } +void rmnet_gsi_update_in_buffer_mem_type(struct usb_function *f, bool use_tcm) +{ + struct f_gsi *gsi = func_to_gsi(f); + + if (gsi && gsi->prot_id == IPA_USB_RMNET) + gsi->rmnet_use_tcm_mem = use_tcm; +} +EXPORT_SYMBOL(rmnet_gsi_update_in_buffer_mem_type); + static int gsi_bind(struct usb_configuration *c, struct usb_function *f) { struct usb_composite_dev *cdev = c->cdev; diff --git a/drivers/usb/gadget/legacy/qti_gadget.c b/drivers/usb/gadget/legacy/qti_gadget.c index dc8af82d3992..48c42cd4c53d 100644 --- a/drivers/usb/gadget/legacy/qti_gadget.c +++ b/drivers/usb/gadget/legacy/qti_gadget.c @@ -9,6 +9,7 @@ #include #include #include +#include struct qti_usb_function { struct usb_function_instance *fi; @@ -322,6 +323,16 @@ static int qti_usb_func_alloc(struct qti_usb_config *qcfg, memcpy(cdev->qw_sign, qw_sign, QW_SIGN_LEN); } +#if IS_ENABLED(CONFIG_USB_F_GSI) + struct qti_usb_gadget *qg; + + if (!strcmp(instance_name, "rmnet")) { + qg = container_of(cdev, struct qti_usb_gadget, cdev); + rmnet_gsi_update_in_buffer_mem_type(f, + of_property_read_bool(qg->cfg_node, + "qcom,rmnet_in_use_tcm_mem")); + } +#endif return 0; } diff --git a/include/linux/usb/dwc3-msm.h b/include/linux/usb/dwc3-msm.h index f3739a65ea0e..6e9e6783fb12 100644 --- a/include/linux/usb/dwc3-msm.h +++ b/include/linux/usb/dwc3-msm.h @@ -164,4 +164,12 @@ static bool __maybe_unused usb_get_remote_wakeup_status(struct usb_gadget *gadge { return false; } #endif +#if IS_ENABLED(CONFIG_USB_F_GSI) +void rmnet_gsi_update_in_buffer_mem_type(struct usb_function *f, bool use_tcm); +#else +static inline __maybe_unused void rmnet_gsi_update_in_buffer_mem_type( + struct usb_function *f, bool use_tcm) +{ } +#endif + #endif /* __LINUX_USB_DWC3_MSM_H */