From 8f812be36a0b894fb779232c1cbabf11980b3cb8 Mon Sep 17 00:00:00 2001 From: Mayank Rana Date: Tue, 25 May 2021 11:47:41 -0700 Subject: [PATCH 1/2] usb: f_gsi: Add API to allow selection of LLCC TCM memory This change adds and exports API which allows composite function driver (such as qti_gadget) to select LLCC TCM memory for allocating USB RMNET IN buffers instead of using DDR memory (default). Change-Id: I68f46a1e09e732841e12b9dac60181db701a51d3 Signed-off-by: Mayank Rana --- drivers/usb/gadget/function/f_gsi.c | 9 +++++++++ include/linux/usb/dwc3-msm.h | 8 ++++++++ 2 files changed, 17 insertions(+) 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/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 */ From dddcd912919654dd3d88b7174a22084eb51a0dfa Mon Sep 17 00:00:00 2001 From: Mayank Rana Date: Tue, 25 May 2021 11:50:05 -0700 Subject: [PATCH 2/2] usb: qti_gadget: Select LLCC TCM memory for USB RMNET IN buffers This change calls available API from USB GSI function driver to select LLCC TCM memory for USB RMNET IN buffers when property "qcom,rmnet_in_use_tcm_mem" is set with RMNET USB composition device tree child node of qti_gadget node. Change-Id: Ic2c3c2fb438801ebbefe15f30b92364a07059df7 Signed-off-by: Mayank Rana --- drivers/usb/gadget/legacy/qti_gadget.c | 11 +++++++++++ 1 file changed, 11 insertions(+) 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; }