Lines Matching +full:rk3066 +full:- +full:usb
1 // SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
3 * Copyright (C) 2004-2016 Synopsys, Inc.
14 * 3. The names of the above-listed copyright holders may not be used
44 struct dwc2_core_params *p = &hsotg->params; in dwc2_set_bcm_params()
46 p->host_rx_fifo_size = 774; in dwc2_set_bcm_params()
47 p->max_transfer_size = 65535; in dwc2_set_bcm_params()
48 p->max_packet_count = 511; in dwc2_set_bcm_params()
49 p->ahbcfg = 0x10; in dwc2_set_bcm_params()
54 struct dwc2_core_params *p = &hsotg->params; in dwc2_set_his_params()
56 p->otg_cap = DWC2_CAP_PARAM_NO_HNP_SRP_CAPABLE; in dwc2_set_his_params()
57 p->speed = DWC2_SPEED_PARAM_HIGH; in dwc2_set_his_params()
58 p->host_rx_fifo_size = 512; in dwc2_set_his_params()
59 p->host_nperio_tx_fifo_size = 512; in dwc2_set_his_params()
60 p->host_perio_tx_fifo_size = 512; in dwc2_set_his_params()
61 p->max_transfer_size = 65535; in dwc2_set_his_params()
62 p->max_packet_count = 511; in dwc2_set_his_params()
63 p->host_channels = 16; in dwc2_set_his_params()
64 p->phy_type = DWC2_PHY_TYPE_PARAM_UTMI; in dwc2_set_his_params()
65 p->phy_utmi_width = 8; in dwc2_set_his_params()
66 p->i2c_enable = false; in dwc2_set_his_params()
67 p->reload_ctl = false; in dwc2_set_his_params()
68 p->ahbcfg = GAHBCFG_HBSTLEN_INCR16 << in dwc2_set_his_params()
70 p->change_speed_quirk = true; in dwc2_set_his_params()
71 p->power_down = DWC2_POWER_DOWN_PARAM_NONE; in dwc2_set_his_params()
76 struct dwc2_core_params *p = &hsotg->params; in dwc2_set_s3c6400_params()
78 p->power_down = DWC2_POWER_DOWN_PARAM_NONE; in dwc2_set_s3c6400_params()
79 p->no_clock_gating = true; in dwc2_set_s3c6400_params()
80 p->phy_utmi_width = 8; in dwc2_set_s3c6400_params()
85 struct dwc2_core_params *p = &hsotg->params; in dwc2_set_rk_params()
87 p->otg_cap = DWC2_CAP_PARAM_NO_HNP_SRP_CAPABLE; in dwc2_set_rk_params()
88 p->host_rx_fifo_size = 525; in dwc2_set_rk_params()
89 p->host_nperio_tx_fifo_size = 128; in dwc2_set_rk_params()
90 p->host_perio_tx_fifo_size = 256; in dwc2_set_rk_params()
91 p->ahbcfg = GAHBCFG_HBSTLEN_INCR16 << in dwc2_set_rk_params()
93 p->power_down = DWC2_POWER_DOWN_PARAM_NONE; in dwc2_set_rk_params()
98 struct dwc2_core_params *p = &hsotg->params; in dwc2_set_ltq_params()
100 p->otg_cap = 2; in dwc2_set_ltq_params()
101 p->host_rx_fifo_size = 288; in dwc2_set_ltq_params()
102 p->host_nperio_tx_fifo_size = 128; in dwc2_set_ltq_params()
103 p->host_perio_tx_fifo_size = 96; in dwc2_set_ltq_params()
104 p->max_transfer_size = 65535; in dwc2_set_ltq_params()
105 p->max_packet_count = 511; in dwc2_set_ltq_params()
106 p->ahbcfg = GAHBCFG_HBSTLEN_INCR16 << in dwc2_set_ltq_params()
112 struct dwc2_core_params *p = &hsotg->params; in dwc2_set_amlogic_params()
114 p->otg_cap = DWC2_CAP_PARAM_NO_HNP_SRP_CAPABLE; in dwc2_set_amlogic_params()
115 p->speed = DWC2_SPEED_PARAM_HIGH; in dwc2_set_amlogic_params()
116 p->host_rx_fifo_size = 512; in dwc2_set_amlogic_params()
117 p->host_nperio_tx_fifo_size = 500; in dwc2_set_amlogic_params()
118 p->host_perio_tx_fifo_size = 500; in dwc2_set_amlogic_params()
119 p->host_channels = 16; in dwc2_set_amlogic_params()
120 p->phy_type = DWC2_PHY_TYPE_PARAM_UTMI; in dwc2_set_amlogic_params()
121 p->ahbcfg = GAHBCFG_HBSTLEN_INCR8 << in dwc2_set_amlogic_params()
123 p->power_down = DWC2_POWER_DOWN_PARAM_NONE; in dwc2_set_amlogic_params()
128 struct dwc2_core_params *p = &hsotg->params; in dwc2_set_amlogic_g12a_params()
130 p->lpm = false; in dwc2_set_amlogic_g12a_params()
131 p->lpm_clock_gating = false; in dwc2_set_amlogic_g12a_params()
132 p->besl = false; in dwc2_set_amlogic_g12a_params()
133 p->hird_threshold_en = false; in dwc2_set_amlogic_g12a_params()
138 struct dwc2_core_params *p = &hsotg->params; in dwc2_set_amcc_params()
140 p->ahbcfg = GAHBCFG_HBSTLEN_INCR16 << GAHBCFG_HBSTLEN_SHIFT; in dwc2_set_amcc_params()
145 struct dwc2_core_params *p = &hsotg->params; in dwc2_set_stm32f4x9_fsotg_params()
147 p->otg_cap = DWC2_CAP_PARAM_NO_HNP_SRP_CAPABLE; in dwc2_set_stm32f4x9_fsotg_params()
148 p->speed = DWC2_SPEED_PARAM_FULL; in dwc2_set_stm32f4x9_fsotg_params()
149 p->host_rx_fifo_size = 128; in dwc2_set_stm32f4x9_fsotg_params()
150 p->host_nperio_tx_fifo_size = 96; in dwc2_set_stm32f4x9_fsotg_params()
151 p->host_perio_tx_fifo_size = 96; in dwc2_set_stm32f4x9_fsotg_params()
152 p->max_packet_count = 256; in dwc2_set_stm32f4x9_fsotg_params()
153 p->phy_type = DWC2_PHY_TYPE_PARAM_FS; in dwc2_set_stm32f4x9_fsotg_params()
154 p->i2c_enable = false; in dwc2_set_stm32f4x9_fsotg_params()
155 p->activate_stm_fs_transceiver = true; in dwc2_set_stm32f4x9_fsotg_params()
160 struct dwc2_core_params *p = &hsotg->params; in dwc2_set_stm32f7_hsotg_params()
162 p->host_rx_fifo_size = 622; in dwc2_set_stm32f7_hsotg_params()
163 p->host_nperio_tx_fifo_size = 128; in dwc2_set_stm32f7_hsotg_params()
164 p->host_perio_tx_fifo_size = 256; in dwc2_set_stm32f7_hsotg_params()
169 struct dwc2_core_params *p = &hsotg->params; in dwc2_set_stm32mp15_fsotg_params()
171 p->otg_cap = DWC2_CAP_PARAM_NO_HNP_SRP_CAPABLE; in dwc2_set_stm32mp15_fsotg_params()
172 p->speed = DWC2_SPEED_PARAM_FULL; in dwc2_set_stm32mp15_fsotg_params()
173 p->host_rx_fifo_size = 128; in dwc2_set_stm32mp15_fsotg_params()
174 p->host_nperio_tx_fifo_size = 96; in dwc2_set_stm32mp15_fsotg_params()
175 p->host_perio_tx_fifo_size = 96; in dwc2_set_stm32mp15_fsotg_params()
176 p->max_packet_count = 256; in dwc2_set_stm32mp15_fsotg_params()
177 p->phy_type = DWC2_PHY_TYPE_PARAM_FS; in dwc2_set_stm32mp15_fsotg_params()
178 p->i2c_enable = false; in dwc2_set_stm32mp15_fsotg_params()
179 p->activate_stm_fs_transceiver = true; in dwc2_set_stm32mp15_fsotg_params()
180 p->activate_stm_id_vb_detection = true; in dwc2_set_stm32mp15_fsotg_params()
181 p->ahbcfg = GAHBCFG_HBSTLEN_INCR16 << GAHBCFG_HBSTLEN_SHIFT; in dwc2_set_stm32mp15_fsotg_params()
182 p->power_down = DWC2_POWER_DOWN_PARAM_NONE; in dwc2_set_stm32mp15_fsotg_params()
183 p->host_support_fs_ls_low_power = true; in dwc2_set_stm32mp15_fsotg_params()
184 p->host_ls_low_power_phy_clk = true; in dwc2_set_stm32mp15_fsotg_params()
189 struct dwc2_core_params *p = &hsotg->params; in dwc2_set_stm32mp15_hsotg_params()
191 p->otg_cap = DWC2_CAP_PARAM_NO_HNP_SRP_CAPABLE; in dwc2_set_stm32mp15_hsotg_params()
192 p->activate_stm_id_vb_detection = !device_property_read_bool(hsotg->dev, "usb-role-switch"); in dwc2_set_stm32mp15_hsotg_params()
193 p->host_rx_fifo_size = 440; in dwc2_set_stm32mp15_hsotg_params()
194 p->host_nperio_tx_fifo_size = 256; in dwc2_set_stm32mp15_hsotg_params()
195 p->host_perio_tx_fifo_size = 256; in dwc2_set_stm32mp15_hsotg_params()
196 p->ahbcfg = GAHBCFG_HBSTLEN_INCR16 << GAHBCFG_HBSTLEN_SHIFT; in dwc2_set_stm32mp15_hsotg_params()
197 p->power_down = DWC2_POWER_DOWN_PARAM_NONE; in dwc2_set_stm32mp15_hsotg_params()
198 p->lpm = false; in dwc2_set_stm32mp15_hsotg_params()
199 p->lpm_clock_gating = false; in dwc2_set_stm32mp15_hsotg_params()
200 p->besl = false; in dwc2_set_stm32mp15_hsotg_params()
201 p->hird_threshold_en = false; in dwc2_set_stm32mp15_hsotg_params()
205 { .compatible = "brcm,bcm2835-usb", .data = dwc2_set_bcm_params },
206 { .compatible = "hisilicon,hi6220-usb", .data = dwc2_set_his_params },
207 { .compatible = "rockchip,rk3066-usb", .data = dwc2_set_rk_params },
208 { .compatible = "lantiq,arx100-usb", .data = dwc2_set_ltq_params },
209 { .compatible = "lantiq,xrx200-usb", .data = dwc2_set_ltq_params },
211 { .compatible = "samsung,s3c6400-hsotg",
213 { .compatible = "amlogic,meson8-usb",
215 { .compatible = "amlogic,meson8b-usb",
217 { .compatible = "amlogic,meson-gxbb-usb",
219 { .compatible = "amlogic,meson-g12a-usb",
221 { .compatible = "amcc,dwc-otg", .data = dwc2_set_amcc_params },
222 { .compatible = "apm,apm82181-dwc-otg", .data = dwc2_set_amcc_params },
223 { .compatible = "st,stm32f4x9-fsotg",
225 { .compatible = "st,stm32f4x9-hsotg" },
226 { .compatible = "st,stm32f7-hsotg",
228 { .compatible = "st,stm32mp15-fsotg",
230 { .compatible = "st,stm32mp15-hsotg",
246 switch (hsotg->hw_params.op_mode) { in dwc2_set_param_otg_cap()
260 hsotg->params.otg_cap = val; in dwc2_set_param_otg_cap()
266 u32 hs_phy_type = hsotg->hw_params.hs_phy_type; in dwc2_set_param_phy_type()
278 hsotg->params.phy_type = DWC2_PHY_TYPE_PARAM_FS; in dwc2_set_param_phy_type()
280 hsotg->params.phy_type = val; in dwc2_set_param_phy_type()
287 val = hsotg->params.phy_type == DWC2_PHY_TYPE_PARAM_FS ? in dwc2_set_param_speed()
296 hsotg->params.speed = val; in dwc2_set_param_speed()
303 val = (hsotg->hw_params.utmi_phy_data_width == in dwc2_set_param_phy_utmi_width()
306 if (hsotg->phy) { in dwc2_set_param_phy_utmi_width()
309 * width is 8-bit and set the phyif appropriately. in dwc2_set_param_phy_utmi_width()
311 if (phy_get_bus_width(hsotg->phy) == 8) in dwc2_set_param_phy_utmi_width()
315 hsotg->params.phy_utmi_width = val; in dwc2_set_param_phy_utmi_width()
320 struct dwc2_core_params *p = &hsotg->params; in dwc2_set_param_tx_fifo_sizes()
327 memset(p->g_tx_fifo_size, 0, sizeof(p->g_tx_fifo_size)); in dwc2_set_param_tx_fifo_sizes()
330 p->g_tx_fifo_size[i] = depth_average; in dwc2_set_param_tx_fifo_sizes()
337 if (hsotg->hw_params.hibernation) in dwc2_set_param_power_down()
339 else if (hsotg->hw_params.power_optimized) in dwc2_set_param_power_down()
344 hsotg->params.power_down = val; in dwc2_set_param_power_down()
349 struct dwc2_core_params *p = &hsotg->params; in dwc2_set_param_lpm()
351 p->lpm = hsotg->hw_params.lpm_mode; in dwc2_set_param_lpm()
352 if (p->lpm) { in dwc2_set_param_lpm()
353 p->lpm_clock_gating = true; in dwc2_set_param_lpm()
354 p->besl = true; in dwc2_set_param_lpm()
355 p->hird_threshold_en = true; in dwc2_set_param_lpm()
356 p->hird_threshold = 4; in dwc2_set_param_lpm()
358 p->lpm_clock_gating = false; in dwc2_set_param_lpm()
359 p->besl = false; in dwc2_set_param_lpm()
360 p->hird_threshold_en = false; in dwc2_set_param_lpm()
365 * dwc2_set_default_params() - Set all core parameters to their
366 * auto-detected default values.
373 struct dwc2_hw_params *hw = &hsotg->hw_params; in dwc2_set_default_params()
374 struct dwc2_core_params *p = &hsotg->params; in dwc2_set_default_params()
375 bool dma_capable = !(hw->arch == GHWCFG2_SLAVE_ONLY_ARCH); in dwc2_set_default_params()
383 p->phy_ulpi_ddr = false; in dwc2_set_default_params()
384 p->phy_ulpi_ext_vbus = false; in dwc2_set_default_params()
386 p->enable_dynamic_fifo = hw->enable_dynamic_fifo; in dwc2_set_default_params()
387 p->en_multiple_tx_fifo = hw->en_multiple_tx_fifo; in dwc2_set_default_params()
388 p->i2c_enable = hw->i2c_enable; in dwc2_set_default_params()
389 p->acg_enable = hw->acg_enable; in dwc2_set_default_params()
390 p->ulpi_fs_ls = false; in dwc2_set_default_params()
391 p->ts_dline = false; in dwc2_set_default_params()
392 p->reload_ctl = (hw->snpsid >= DWC2_CORE_REV_2_92a); in dwc2_set_default_params()
393 p->uframe_sched = true; in dwc2_set_default_params()
394 p->external_id_pin_ctl = false; in dwc2_set_default_params()
395 p->ipg_isoc_en = false; in dwc2_set_default_params()
396 p->service_interval = false; in dwc2_set_default_params()
397 p->max_packet_count = hw->max_packet_count; in dwc2_set_default_params()
398 p->max_transfer_size = hw->max_transfer_size; in dwc2_set_default_params()
399 p->ahbcfg = GAHBCFG_HBSTLEN_INCR << GAHBCFG_HBSTLEN_SHIFT; in dwc2_set_default_params()
400 p->ref_clk_per = 33333; in dwc2_set_default_params()
401 p->sof_cnt_wkup_alert = 100; in dwc2_set_default_params()
403 if ((hsotg->dr_mode == USB_DR_MODE_HOST) || in dwc2_set_default_params()
404 (hsotg->dr_mode == USB_DR_MODE_OTG)) { in dwc2_set_default_params()
405 p->host_dma = dma_capable; in dwc2_set_default_params()
406 p->dma_desc_enable = false; in dwc2_set_default_params()
407 p->dma_desc_fs_enable = false; in dwc2_set_default_params()
408 p->host_support_fs_ls_low_power = false; in dwc2_set_default_params()
409 p->host_ls_low_power_phy_clk = false; in dwc2_set_default_params()
410 p->host_channels = hw->host_channels; in dwc2_set_default_params()
411 p->host_rx_fifo_size = hw->rx_fifo_size; in dwc2_set_default_params()
412 p->host_nperio_tx_fifo_size = hw->host_nperio_tx_fifo_size; in dwc2_set_default_params()
413 p->host_perio_tx_fifo_size = hw->host_perio_tx_fifo_size; in dwc2_set_default_params()
416 if ((hsotg->dr_mode == USB_DR_MODE_PERIPHERAL) || in dwc2_set_default_params()
417 (hsotg->dr_mode == USB_DR_MODE_OTG)) { in dwc2_set_default_params()
418 p->g_dma = dma_capable; in dwc2_set_default_params()
419 p->g_dma_desc = hw->dma_desc_enable; in dwc2_set_default_params()
424 * gadget driver. These defaults have been hard-coded in dwc2_set_default_params()
427 * auto-detect if the hardware does not support the in dwc2_set_default_params()
430 p->g_rx_fifo_size = 2048; in dwc2_set_default_params()
431 p->g_np_tx_fifo_size = 1024; in dwc2_set_default_params()
437 * dwc2_get_device_properties() - Read in device properties.
445 struct dwc2_core_params *p = &hsotg->params; in dwc2_get_device_properties()
448 if ((hsotg->dr_mode == USB_DR_MODE_PERIPHERAL) || in dwc2_get_device_properties()
449 (hsotg->dr_mode == USB_DR_MODE_OTG)) { in dwc2_get_device_properties()
450 device_property_read_u32(hsotg->dev, "g-rx-fifo-size", in dwc2_get_device_properties()
451 &p->g_rx_fifo_size); in dwc2_get_device_properties()
453 device_property_read_u32(hsotg->dev, "g-np-tx-fifo-size", in dwc2_get_device_properties()
454 &p->g_np_tx_fifo_size); in dwc2_get_device_properties()
456 num = device_property_count_u32(hsotg->dev, "g-tx-fifo-size"); in dwc2_get_device_properties()
459 memset(p->g_tx_fifo_size, 0, in dwc2_get_device_properties()
460 sizeof(p->g_tx_fifo_size)); in dwc2_get_device_properties()
461 device_property_read_u32_array(hsotg->dev, in dwc2_get_device_properties()
462 "g-tx-fifo-size", in dwc2_get_device_properties()
463 &p->g_tx_fifo_size[1], in dwc2_get_device_properties()
468 if (of_find_property(hsotg->dev->of_node, "disable-over-current", NULL)) in dwc2_get_device_properties()
469 p->oc_disable = true; in dwc2_get_device_properties()
476 switch (hsotg->params.otg_cap) { in dwc2_check_param_otg_cap()
478 if (hsotg->hw_params.op_mode != GHWCFG2_OP_MODE_HNP_SRP_CAPABLE) in dwc2_check_param_otg_cap()
482 switch (hsotg->hw_params.op_mode) { in dwc2_check_param_otg_cap()
511 hs_phy_type = hsotg->hw_params.hs_phy_type; in dwc2_check_param_phy_type()
512 fs_phy_type = hsotg->hw_params.fs_phy_type; in dwc2_check_param_phy_type()
514 switch (hsotg->params.phy_type) { in dwc2_check_param_phy_type()
540 int phy_type = hsotg->params.phy_type; in dwc2_check_param_speed()
541 int speed = hsotg->params.speed; in dwc2_check_param_speed()
545 if ((hsotg->params.speed == DWC2_SPEED_PARAM_HIGH) && in dwc2_check_param_speed()
564 int param = hsotg->params.phy_utmi_width; in dwc2_check_param_phy_utmi_width()
565 int width = hsotg->hw_params.utmi_phy_data_width; in dwc2_check_param_phy_utmi_width()
585 int param = hsotg->params.power_down; in dwc2_check_param_power_down()
591 if (hsotg->hw_params.power_optimized) in dwc2_check_param_power_down()
593 dev_dbg(hsotg->dev, in dwc2_check_param_power_down()
598 if (hsotg->hw_params.hibernation) in dwc2_check_param_power_down()
600 dev_dbg(hsotg->dev, in dwc2_check_param_power_down()
605 dev_err(hsotg->dev, in dwc2_check_param_power_down()
612 hsotg->params.power_down = param; in dwc2_check_param_power_down()
624 min = hsotg->hw_params.en_multiple_tx_fifo ? 16 : 4; in dwc2_check_param_tx_fifo_sizes()
627 total += hsotg->params.g_tx_fifo_size[fifo]; in dwc2_check_param_tx_fifo_sizes()
630 dev_warn(hsotg->dev, "%s: Invalid parameter g-tx-fifo-size, setting to default average\n", in dwc2_check_param_tx_fifo_sizes()
636 dptxfszn = hsotg->hw_params.g_tx_fifo_size[fifo]; in dwc2_check_param_tx_fifo_sizes()
638 if (hsotg->params.g_tx_fifo_size[fifo] < min || in dwc2_check_param_tx_fifo_sizes()
639 hsotg->params.g_tx_fifo_size[fifo] > dptxfszn) { in dwc2_check_param_tx_fifo_sizes()
640 dev_warn(hsotg->dev, "%s: Invalid parameter g_tx_fifo_size[%d]=%d\n", in dwc2_check_param_tx_fifo_sizes()
642 hsotg->params.g_tx_fifo_size[fifo]); in dwc2_check_param_tx_fifo_sizes()
643 hsotg->params.g_tx_fifo_size[fifo] = dptxfszn; in dwc2_check_param_tx_fifo_sizes()
649 if ((int)(hsotg->params._param) < (_min) || \
650 (hsotg->params._param) > (_max)) { \
651 dev_warn(hsotg->dev, "%s: Invalid parameter %s=%d\n", \
652 __func__, #_param, hsotg->params._param); \
653 hsotg->params._param = (_def); \
658 if (hsotg->params._param && !(_check)) { \
659 dev_warn(hsotg->dev, "%s: Invalid parameter %s=%d\n", \
660 __func__, #_param, hsotg->params._param); \
661 hsotg->params._param = false; \
667 struct dwc2_hw_params *hw = &hsotg->hw_params; in dwc2_check_params()
668 struct dwc2_core_params *p = &hsotg->params; in dwc2_check_params()
669 bool dma_capable = !(hw->arch == GHWCFG2_SLAVE_ONLY_ARCH); in dwc2_check_params()
676 CHECK_BOOL(enable_dynamic_fifo, hw->enable_dynamic_fifo); in dwc2_check_params()
677 CHECK_BOOL(en_multiple_tx_fifo, hw->en_multiple_tx_fifo); in dwc2_check_params()
678 CHECK_BOOL(i2c_enable, hw->i2c_enable); in dwc2_check_params()
679 CHECK_BOOL(ipg_isoc_en, hw->ipg_isoc_en); in dwc2_check_params()
680 CHECK_BOOL(acg_enable, hw->acg_enable); in dwc2_check_params()
681 CHECK_BOOL(reload_ctl, (hsotg->hw_params.snpsid > DWC2_CORE_REV_2_92a)); in dwc2_check_params()
682 CHECK_BOOL(lpm, (hsotg->hw_params.snpsid >= DWC2_CORE_REV_2_80a)); in dwc2_check_params()
683 CHECK_BOOL(lpm, hw->lpm_mode); in dwc2_check_params()
684 CHECK_BOOL(lpm_clock_gating, hsotg->params.lpm); in dwc2_check_params()
685 CHECK_BOOL(besl, hsotg->params.lpm); in dwc2_check_params()
686 CHECK_BOOL(besl, (hsotg->hw_params.snpsid >= DWC2_CORE_REV_3_00a)); in dwc2_check_params()
687 CHECK_BOOL(hird_threshold_en, hsotg->params.lpm); in dwc2_check_params()
688 CHECK_RANGE(hird_threshold, 0, hsotg->params.besl ? 12 : 7, 0); in dwc2_check_params()
689 CHECK_BOOL(service_interval, hw->service_interval_mode); in dwc2_check_params()
691 15, hw->max_packet_count, in dwc2_check_params()
692 hw->max_packet_count); in dwc2_check_params()
694 2047, hw->max_transfer_size, in dwc2_check_params()
695 hw->max_transfer_size); in dwc2_check_params()
697 if ((hsotg->dr_mode == USB_DR_MODE_HOST) || in dwc2_check_params()
698 (hsotg->dr_mode == USB_DR_MODE_OTG)) { in dwc2_check_params()
700 CHECK_BOOL(dma_desc_enable, p->host_dma); in dwc2_check_params()
701 CHECK_BOOL(dma_desc_fs_enable, p->dma_desc_enable); in dwc2_check_params()
703 p->phy_type == DWC2_PHY_TYPE_PARAM_FS); in dwc2_check_params()
705 1, hw->host_channels, in dwc2_check_params()
706 hw->host_channels); in dwc2_check_params()
708 16, hw->rx_fifo_size, in dwc2_check_params()
709 hw->rx_fifo_size); in dwc2_check_params()
711 16, hw->host_nperio_tx_fifo_size, in dwc2_check_params()
712 hw->host_nperio_tx_fifo_size); in dwc2_check_params()
714 16, hw->host_perio_tx_fifo_size, in dwc2_check_params()
715 hw->host_perio_tx_fifo_size); in dwc2_check_params()
718 if ((hsotg->dr_mode == USB_DR_MODE_PERIPHERAL) || in dwc2_check_params()
719 (hsotg->dr_mode == USB_DR_MODE_OTG)) { in dwc2_check_params()
721 CHECK_BOOL(g_dma_desc, (p->g_dma && hw->dma_desc_enable)); in dwc2_check_params()
723 16, hw->rx_fifo_size, in dwc2_check_params()
724 hw->rx_fifo_size); in dwc2_check_params()
726 16, hw->dev_nperio_tx_fifo_size, in dwc2_check_params()
727 hw->dev_nperio_tx_fifo_size); in dwc2_check_params()
739 struct dwc2_hw_params *hw = &hsotg->hw_params; in dwc2_get_host_hwparams()
743 if (hsotg->dr_mode == USB_DR_MODE_PERIPHERAL) in dwc2_get_host_hwparams()
751 hw->host_nperio_tx_fifo_size = (gnptxfsiz & FIFOSIZE_DEPTH_MASK) >> in dwc2_get_host_hwparams()
753 hw->host_perio_tx_fifo_size = (hptxfsiz & FIFOSIZE_DEPTH_MASK) >> in dwc2_get_host_hwparams()
764 struct dwc2_hw_params *hw = &hsotg->hw_params; in dwc2_get_dev_hwparams()
768 if (hsotg->dr_mode == USB_DR_MODE_HOST) in dwc2_get_dev_hwparams()
778 hw->g_tx_fifo_size[fifo] = in dwc2_get_dev_hwparams()
783 hw->dev_nperio_tx_fifo_size = (gnptxfsiz & FIFOSIZE_DEPTH_MASK) >> in dwc2_get_dev_hwparams()
788 * dwc2_get_hwparams() - During device initialization, read various hardware
796 struct dwc2_hw_params *hw = &hsotg->hw_params; in dwc2_get_hwparams()
808 hw->dev_ep_dirs = hwcfg1; in dwc2_get_hwparams()
811 hw->op_mode = (hwcfg2 & GHWCFG2_OP_MODE_MASK) >> in dwc2_get_hwparams()
813 hw->arch = (hwcfg2 & GHWCFG2_ARCHITECTURE_MASK) >> in dwc2_get_hwparams()
815 hw->enable_dynamic_fifo = !!(hwcfg2 & GHWCFG2_DYNAMIC_FIFO); in dwc2_get_hwparams()
816 hw->host_channels = 1 + ((hwcfg2 & GHWCFG2_NUM_HOST_CHAN_MASK) >> in dwc2_get_hwparams()
818 hw->hs_phy_type = (hwcfg2 & GHWCFG2_HS_PHY_TYPE_MASK) >> in dwc2_get_hwparams()
820 hw->fs_phy_type = (hwcfg2 & GHWCFG2_FS_PHY_TYPE_MASK) >> in dwc2_get_hwparams()
822 hw->num_dev_ep = (hwcfg2 & GHWCFG2_NUM_DEV_EP_MASK) >> in dwc2_get_hwparams()
824 hw->nperio_tx_q_depth = in dwc2_get_hwparams()
827 hw->host_perio_tx_q_depth = in dwc2_get_hwparams()
830 hw->dev_token_q_depth = in dwc2_get_hwparams()
837 hw->max_transfer_size = (1 << (width + 11)) - 1; in dwc2_get_hwparams()
840 hw->max_packet_count = (1 << (width + 4)) - 1; in dwc2_get_hwparams()
841 hw->i2c_enable = !!(hwcfg3 & GHWCFG3_I2C); in dwc2_get_hwparams()
842 hw->total_fifo_size = (hwcfg3 & GHWCFG3_DFIFO_DEPTH_MASK) >> in dwc2_get_hwparams()
844 hw->lpm_mode = !!(hwcfg3 & GHWCFG3_OTG_LPM_EN); in dwc2_get_hwparams()
847 hw->en_multiple_tx_fifo = !!(hwcfg4 & GHWCFG4_DED_FIFO_EN); in dwc2_get_hwparams()
848 hw->num_dev_perio_in_ep = (hwcfg4 & GHWCFG4_NUM_DEV_PERIO_IN_EP_MASK) >> in dwc2_get_hwparams()
850 hw->num_dev_in_eps = (hwcfg4 & GHWCFG4_NUM_IN_EPS_MASK) >> in dwc2_get_hwparams()
852 hw->dma_desc_enable = !!(hwcfg4 & GHWCFG4_DESC_DMA); in dwc2_get_hwparams()
853 hw->power_optimized = !!(hwcfg4 & GHWCFG4_POWER_OPTIMIZ); in dwc2_get_hwparams()
854 hw->hibernation = !!(hwcfg4 & GHWCFG4_HIBER); in dwc2_get_hwparams()
855 hw->utmi_phy_data_width = (hwcfg4 & GHWCFG4_UTMI_PHY_DATA_WIDTH_MASK) >> in dwc2_get_hwparams()
857 hw->acg_enable = !!(hwcfg4 & GHWCFG4_ACG_SUPPORTED); in dwc2_get_hwparams()
858 hw->ipg_isoc_en = !!(hwcfg4 & GHWCFG4_IPG_ISOC_SUPPORTED); in dwc2_get_hwparams()
859 hw->service_interval_mode = !!(hwcfg4 & in dwc2_get_hwparams()
863 hw->rx_fifo_size = (grxfsiz & GRXFSIZ_DEPTH_MASK) >> in dwc2_get_hwparams()
886 match = of_match_device(dwc2_of_match_table, hsotg->dev); in dwc2_init_params()
887 if (match && match->data) { in dwc2_init_params()
888 set_params = match->data; in dwc2_init_params()
893 amatch = acpi_match_device(dwc2_acpi_match, hsotg->dev); in dwc2_init_params()
894 if (amatch && amatch->driver_data) { in dwc2_init_params()
895 set_params = (set_params_cb)amatch->driver_data; in dwc2_init_params()