This patch ports the support for "g-rx-fifo-size", "g-np-tx-fifo-size", and "g-tx-fifo-size" devicetree properties from Linux kernel v6.3. These properties are required for proper FIFO configuration of different USB endpoints in the gadget mode. Signed-off-by: Oleksij Rempel <o.rempel@xxxxxxxxxxxxxx> --- drivers/usb/dwc2/core.c | 27 +++++++++++++++++++++++++++ drivers/usb/dwc2/dwc2.c | 1 + drivers/usb/dwc2/dwc2.h | 1 + 3 files changed, 29 insertions(+) diff --git a/drivers/usb/dwc2/core.c b/drivers/usb/dwc2/core.c index 9edd56d483..b198ba6bf8 100644 --- a/drivers/usb/dwc2/core.c +++ b/drivers/usb/dwc2/core.c @@ -188,6 +188,33 @@ void dwc2_set_default_params(struct dwc2 *dwc2) } } +void dwc2_get_device_properties(struct dwc2 *dwc2) +{ + struct dwc2_core_params *p = &dwc2->params; + struct device_node *np = dwc2->dev->of_node; + int num; + + if ((dwc2->dr_mode == USB_DR_MODE_PERIPHERAL) || + (dwc2->dr_mode == USB_DR_MODE_OTG)) { + of_property_read_u32(np, "g-rx-fifo-size", + &p->g_rx_fifo_size); + + of_property_read_u32(np, "g-np-tx-fifo-size", + &p->g_np_tx_fifo_size); + + num = of_property_count_elems_of_size(np, "g-tx-fifo-size", sizeof(u32)); + if (num > 0) { + num = min(num, 15); + memset(p->g_tx_fifo_size, 0, + sizeof(p->g_tx_fifo_size)); + of_property_read_u32_array(np, + "g-tx-fifo-size", + &p->g_tx_fifo_size[1], + num); + } + } +} + int dwc2_check_core_version(struct dwc2 *dwc2) { struct dwc2_hw_params *hw = &dwc2->hw_params; diff --git a/drivers/usb/dwc2/dwc2.c b/drivers/usb/dwc2/dwc2.c index ff4842ce62..3564cdd1d1 100644 --- a/drivers/usb/dwc2/dwc2.c +++ b/drivers/usb/dwc2/dwc2.c @@ -148,6 +148,7 @@ static int dwc2_probe(struct device *dev) goto error; dwc2_set_default_params(dwc2); + dwc2_get_device_properties(dwc2); set_params = of_device_get_match_data(dev); if (set_params) diff --git a/drivers/usb/dwc2/dwc2.h b/drivers/usb/dwc2/dwc2.h index 15d4b69759..2e740a890e 100644 --- a/drivers/usb/dwc2/dwc2.h +++ b/drivers/usb/dwc2/dwc2.h @@ -9,6 +9,7 @@ /* Core functions */ void dwc2_set_default_params(struct dwc2 *dwc2); +void dwc2_get_device_properties(struct dwc2 *dwc2); int dwc2_check_core_version(struct dwc2 *dwc2); void dwc2_get_hwparams(struct dwc2 *dwc2); -- 2.39.2