Lines Matching refs:hsotg
42 static void dwc2_set_bcm_params(struct dwc2_hsotg *hsotg) in dwc2_set_bcm_params() argument
44 struct dwc2_core_params *p = &hsotg->params; in dwc2_set_bcm_params()
52 static void dwc2_set_his_params(struct dwc2_hsotg *hsotg) in dwc2_set_his_params() argument
54 struct dwc2_core_params *p = &hsotg->params; in dwc2_set_his_params()
74 static void dwc2_set_rk_params(struct dwc2_hsotg *hsotg) in dwc2_set_rk_params() argument
76 struct dwc2_core_params *p = &hsotg->params; in dwc2_set_rk_params()
86 static void dwc2_set_ltq_params(struct dwc2_hsotg *hsotg) in dwc2_set_ltq_params() argument
88 struct dwc2_core_params *p = &hsotg->params; in dwc2_set_ltq_params()
100 static void dwc2_set_amlogic_params(struct dwc2_hsotg *hsotg) in dwc2_set_amlogic_params() argument
102 struct dwc2_core_params *p = &hsotg->params; in dwc2_set_amlogic_params()
115 static void dwc2_set_amcc_params(struct dwc2_hsotg *hsotg) in dwc2_set_amcc_params() argument
117 struct dwc2_core_params *p = &hsotg->params; in dwc2_set_amcc_params()
122 static void dwc2_set_stm32f4x9_fsotg_params(struct dwc2_hsotg *hsotg) in dwc2_set_stm32f4x9_fsotg_params() argument
124 struct dwc2_core_params *p = &hsotg->params; in dwc2_set_stm32f4x9_fsotg_params()
137 static void dwc2_set_stm32f7_hsotg_params(struct dwc2_hsotg *hsotg) in dwc2_set_stm32f7_hsotg_params() argument
139 struct dwc2_core_params *p = &hsotg->params; in dwc2_set_stm32f7_hsotg_params()
170 static void dwc2_set_param_otg_cap(struct dwc2_hsotg *hsotg) in dwc2_set_param_otg_cap() argument
174 switch (hsotg->hw_params.op_mode) { in dwc2_set_param_otg_cap()
188 hsotg->params.otg_cap = val; in dwc2_set_param_otg_cap()
191 static void dwc2_set_param_phy_type(struct dwc2_hsotg *hsotg) in dwc2_set_param_phy_type() argument
194 u32 hs_phy_type = hsotg->hw_params.hs_phy_type; in dwc2_set_param_phy_type()
205 if (dwc2_is_fs_iot(hsotg)) in dwc2_set_param_phy_type()
206 hsotg->params.phy_type = DWC2_PHY_TYPE_PARAM_FS; in dwc2_set_param_phy_type()
208 hsotg->params.phy_type = val; in dwc2_set_param_phy_type()
211 static void dwc2_set_param_speed(struct dwc2_hsotg *hsotg) in dwc2_set_param_speed() argument
215 val = hsotg->params.phy_type == DWC2_PHY_TYPE_PARAM_FS ? in dwc2_set_param_speed()
218 if (dwc2_is_fs_iot(hsotg)) in dwc2_set_param_speed()
221 if (dwc2_is_hs_iot(hsotg)) in dwc2_set_param_speed()
224 hsotg->params.speed = val; in dwc2_set_param_speed()
227 static void dwc2_set_param_phy_utmi_width(struct dwc2_hsotg *hsotg) in dwc2_set_param_phy_utmi_width() argument
231 val = (hsotg->hw_params.utmi_phy_data_width == in dwc2_set_param_phy_utmi_width()
234 hsotg->params.phy_utmi_width = val; in dwc2_set_param_phy_utmi_width()
237 static void dwc2_set_param_tx_fifo_sizes(struct dwc2_hsotg *hsotg) in dwc2_set_param_tx_fifo_sizes() argument
239 struct dwc2_core_params *p = &hsotg->params; in dwc2_set_param_tx_fifo_sizes()
244 fifo_count = dwc2_hsotg_tx_fifo_count(hsotg); in dwc2_set_param_tx_fifo_sizes()
247 depth_average = dwc2_hsotg_tx_fifo_average_depth(hsotg); in dwc2_set_param_tx_fifo_sizes()
252 static void dwc2_set_param_power_down(struct dwc2_hsotg *hsotg) in dwc2_set_param_power_down() argument
256 if (hsotg->hw_params.hibernation) in dwc2_set_param_power_down()
258 else if (hsotg->hw_params.power_optimized) in dwc2_set_param_power_down()
263 hsotg->params.power_down = val; in dwc2_set_param_power_down()
273 static void dwc2_set_default_params(struct dwc2_hsotg *hsotg) in dwc2_set_default_params() argument
275 struct dwc2_hw_params *hw = &hsotg->hw_params; in dwc2_set_default_params()
276 struct dwc2_core_params *p = &hsotg->params; in dwc2_set_default_params()
279 dwc2_set_param_otg_cap(hsotg); in dwc2_set_default_params()
280 dwc2_set_param_phy_type(hsotg); in dwc2_set_default_params()
281 dwc2_set_param_speed(hsotg); in dwc2_set_default_params()
282 dwc2_set_param_phy_utmi_width(hsotg); in dwc2_set_default_params()
283 dwc2_set_param_power_down(hsotg); in dwc2_set_default_params()
306 if ((hsotg->dr_mode == USB_DR_MODE_HOST) || in dwc2_set_default_params()
307 (hsotg->dr_mode == USB_DR_MODE_OTG)) { in dwc2_set_default_params()
319 if ((hsotg->dr_mode == USB_DR_MODE_PERIPHERAL) || in dwc2_set_default_params()
320 (hsotg->dr_mode == USB_DR_MODE_OTG)) { in dwc2_set_default_params()
335 dwc2_set_param_tx_fifo_sizes(hsotg); in dwc2_set_default_params()
346 static void dwc2_get_device_properties(struct dwc2_hsotg *hsotg) in dwc2_get_device_properties() argument
348 struct dwc2_core_params *p = &hsotg->params; in dwc2_get_device_properties()
351 if ((hsotg->dr_mode == USB_DR_MODE_PERIPHERAL) || in dwc2_get_device_properties()
352 (hsotg->dr_mode == USB_DR_MODE_OTG)) { in dwc2_get_device_properties()
353 device_property_read_u32(hsotg->dev, "g-rx-fifo-size", in dwc2_get_device_properties()
356 device_property_read_u32(hsotg->dev, "g-np-tx-fifo-size", in dwc2_get_device_properties()
359 num = device_property_read_u32_array(hsotg->dev, in dwc2_get_device_properties()
367 device_property_read_u32_array(hsotg->dev, in dwc2_get_device_properties()
374 if (of_find_property(hsotg->dev->of_node, "disable-over-current", NULL)) in dwc2_get_device_properties()
378 static void dwc2_check_param_otg_cap(struct dwc2_hsotg *hsotg) in dwc2_check_param_otg_cap() argument
382 switch (hsotg->params.otg_cap) { in dwc2_check_param_otg_cap()
384 if (hsotg->hw_params.op_mode != GHWCFG2_OP_MODE_HNP_SRP_CAPABLE) in dwc2_check_param_otg_cap()
388 switch (hsotg->hw_params.op_mode) { in dwc2_check_param_otg_cap()
408 dwc2_set_param_otg_cap(hsotg); in dwc2_check_param_otg_cap()
411 static void dwc2_check_param_phy_type(struct dwc2_hsotg *hsotg) in dwc2_check_param_phy_type() argument
417 hs_phy_type = hsotg->hw_params.hs_phy_type; in dwc2_check_param_phy_type()
418 fs_phy_type = hsotg->hw_params.fs_phy_type; in dwc2_check_param_phy_type()
420 switch (hsotg->params.phy_type) { in dwc2_check_param_phy_type()
440 dwc2_set_param_phy_type(hsotg); in dwc2_check_param_phy_type()
443 static void dwc2_check_param_speed(struct dwc2_hsotg *hsotg) in dwc2_check_param_speed() argument
446 int phy_type = hsotg->params.phy_type; in dwc2_check_param_speed()
447 int speed = hsotg->params.speed; in dwc2_check_param_speed()
451 if ((hsotg->params.speed == DWC2_SPEED_PARAM_HIGH) && in dwc2_check_param_speed()
464 dwc2_set_param_speed(hsotg); in dwc2_check_param_speed()
467 static void dwc2_check_param_phy_utmi_width(struct dwc2_hsotg *hsotg) in dwc2_check_param_phy_utmi_width() argument
470 int param = hsotg->params.phy_utmi_width; in dwc2_check_param_phy_utmi_width()
471 int width = hsotg->hw_params.utmi_phy_data_width; in dwc2_check_param_phy_utmi_width()
486 dwc2_set_param_phy_utmi_width(hsotg); in dwc2_check_param_phy_utmi_width()
489 static void dwc2_check_param_power_down(struct dwc2_hsotg *hsotg) in dwc2_check_param_power_down() argument
491 int param = hsotg->params.power_down; in dwc2_check_param_power_down()
497 if (hsotg->hw_params.power_optimized) in dwc2_check_param_power_down()
499 dev_dbg(hsotg->dev, in dwc2_check_param_power_down()
504 if (hsotg->hw_params.hibernation) in dwc2_check_param_power_down()
506 dev_dbg(hsotg->dev, in dwc2_check_param_power_down()
511 dev_err(hsotg->dev, in dwc2_check_param_power_down()
518 hsotg->params.power_down = param; in dwc2_check_param_power_down()
521 static void dwc2_check_param_tx_fifo_sizes(struct dwc2_hsotg *hsotg) in dwc2_check_param_tx_fifo_sizes() argument
529 fifo_count = dwc2_hsotg_tx_fifo_count(hsotg); in dwc2_check_param_tx_fifo_sizes()
530 min = hsotg->hw_params.en_multiple_tx_fifo ? 16 : 4; in dwc2_check_param_tx_fifo_sizes()
533 total += hsotg->params.g_tx_fifo_size[fifo]; in dwc2_check_param_tx_fifo_sizes()
535 if (total > dwc2_hsotg_tx_fifo_total_depth(hsotg) || !total) { in dwc2_check_param_tx_fifo_sizes()
536 dev_warn(hsotg->dev, "%s: Invalid parameter g-tx-fifo-size, setting to default average\n", in dwc2_check_param_tx_fifo_sizes()
538 dwc2_set_param_tx_fifo_sizes(hsotg); in dwc2_check_param_tx_fifo_sizes()
542 dptxfszn = hsotg->hw_params.g_tx_fifo_size[fifo]; in dwc2_check_param_tx_fifo_sizes()
544 if (hsotg->params.g_tx_fifo_size[fifo] < min || in dwc2_check_param_tx_fifo_sizes()
545 hsotg->params.g_tx_fifo_size[fifo] > dptxfszn) { in dwc2_check_param_tx_fifo_sizes()
546 dev_warn(hsotg->dev, "%s: Invalid parameter g_tx_fifo_size[%d]=%d\n", in dwc2_check_param_tx_fifo_sizes()
548 hsotg->params.g_tx_fifo_size[fifo]); in dwc2_check_param_tx_fifo_sizes()
549 hsotg->params.g_tx_fifo_size[fifo] = dptxfszn; in dwc2_check_param_tx_fifo_sizes()
555 if ((int)(hsotg->params._param) < (_min) || \
556 (hsotg->params._param) > (_max)) { \
557 dev_warn(hsotg->dev, "%s: Invalid parameter %s=%d\n", \
558 __func__, #_param, hsotg->params._param); \
559 hsotg->params._param = (_def); \
564 if (hsotg->params._param && !(_check)) { \
565 dev_warn(hsotg->dev, "%s: Invalid parameter %s=%d\n", \
566 __func__, #_param, hsotg->params._param); \
567 hsotg->params._param = false; \
571 static void dwc2_check_params(struct dwc2_hsotg *hsotg) in dwc2_check_params() argument
573 struct dwc2_hw_params *hw = &hsotg->hw_params; in dwc2_check_params()
574 struct dwc2_core_params *p = &hsotg->params; in dwc2_check_params()
577 dwc2_check_param_otg_cap(hsotg); in dwc2_check_params()
578 dwc2_check_param_phy_type(hsotg); in dwc2_check_params()
579 dwc2_check_param_speed(hsotg); in dwc2_check_params()
580 dwc2_check_param_phy_utmi_width(hsotg); in dwc2_check_params()
581 dwc2_check_param_power_down(hsotg); in dwc2_check_params()
587 CHECK_BOOL(reload_ctl, (hsotg->hw_params.snpsid > DWC2_CORE_REV_2_92a)); in dwc2_check_params()
588 CHECK_BOOL(lpm, (hsotg->hw_params.snpsid >= DWC2_CORE_REV_2_80a)); in dwc2_check_params()
590 CHECK_BOOL(lpm_clock_gating, hsotg->params.lpm); in dwc2_check_params()
591 CHECK_BOOL(besl, hsotg->params.lpm); in dwc2_check_params()
592 CHECK_BOOL(besl, (hsotg->hw_params.snpsid >= DWC2_CORE_REV_3_00a)); in dwc2_check_params()
593 CHECK_BOOL(hird_threshold_en, hsotg->params.lpm); in dwc2_check_params()
594 CHECK_RANGE(hird_threshold, 0, hsotg->params.besl ? 12 : 7, 0); in dwc2_check_params()
602 if ((hsotg->dr_mode == USB_DR_MODE_HOST) || in dwc2_check_params()
603 (hsotg->dr_mode == USB_DR_MODE_OTG)) { in dwc2_check_params()
623 if ((hsotg->dr_mode == USB_DR_MODE_PERIPHERAL) || in dwc2_check_params()
624 (hsotg->dr_mode == USB_DR_MODE_OTG)) { in dwc2_check_params()
633 dwc2_check_param_tx_fifo_sizes(hsotg); in dwc2_check_params()
642 static void dwc2_get_host_hwparams(struct dwc2_hsotg *hsotg) in dwc2_get_host_hwparams() argument
644 struct dwc2_hw_params *hw = &hsotg->hw_params; in dwc2_get_host_hwparams()
648 if (hsotg->dr_mode == USB_DR_MODE_PERIPHERAL) in dwc2_get_host_hwparams()
651 dwc2_force_mode(hsotg, true); in dwc2_get_host_hwparams()
653 gnptxfsiz = dwc2_readl(hsotg, GNPTXFSIZ); in dwc2_get_host_hwparams()
654 hptxfsiz = dwc2_readl(hsotg, HPTXFSIZ); in dwc2_get_host_hwparams()
667 static void dwc2_get_dev_hwparams(struct dwc2_hsotg *hsotg) in dwc2_get_dev_hwparams() argument
669 struct dwc2_hw_params *hw = &hsotg->hw_params; in dwc2_get_dev_hwparams()
673 if (hsotg->dr_mode == USB_DR_MODE_HOST) in dwc2_get_dev_hwparams()
676 dwc2_force_mode(hsotg, false); in dwc2_get_dev_hwparams()
678 gnptxfsiz = dwc2_readl(hsotg, GNPTXFSIZ); in dwc2_get_dev_hwparams()
680 fifo_count = dwc2_hsotg_tx_fifo_count(hsotg); in dwc2_get_dev_hwparams()
684 (dwc2_readl(hsotg, DPTXFSIZN(fifo)) & in dwc2_get_dev_hwparams()
699 int dwc2_get_hwparams(struct dwc2_hsotg *hsotg) in dwc2_get_hwparams() argument
701 struct dwc2_hw_params *hw = &hsotg->hw_params; in dwc2_get_hwparams()
712 hw->snpsid = dwc2_readl(hsotg, GSNPSID); in dwc2_get_hwparams()
716 dev_err(hsotg->dev, "Bad value for GSNPSID: 0x%08x\n", in dwc2_get_hwparams()
721 dev_dbg(hsotg->dev, "Core Release: %1x.%1x%1x%1x (snpsid=%x)\n", in dwc2_get_hwparams()
725 hwcfg1 = dwc2_readl(hsotg, GHWCFG1); in dwc2_get_hwparams()
726 hwcfg2 = dwc2_readl(hsotg, GHWCFG2); in dwc2_get_hwparams()
727 hwcfg3 = dwc2_readl(hsotg, GHWCFG3); in dwc2_get_hwparams()
728 hwcfg4 = dwc2_readl(hsotg, GHWCFG4); in dwc2_get_hwparams()
729 grxfsiz = dwc2_readl(hsotg, GRXFSIZ); in dwc2_get_hwparams()
792 dwc2_get_host_hwparams(hsotg); in dwc2_get_hwparams()
793 dwc2_get_dev_hwparams(hsotg); in dwc2_get_hwparams()
798 int dwc2_init_params(struct dwc2_hsotg *hsotg) in dwc2_init_params() argument
803 dwc2_set_default_params(hsotg); in dwc2_init_params()
804 dwc2_get_device_properties(hsotg); in dwc2_init_params()
806 match = of_match_device(dwc2_of_match_table, hsotg->dev); in dwc2_init_params()
809 set_params(hsotg); in dwc2_init_params()
812 dwc2_check_params(hsotg); in dwc2_init_params()