Lines Matching refs:hsotg

18 static void dwc2_set_bcm_params(struct dwc2_hsotg *hsotg)
20 struct dwc2_core_params *p = &hsotg->params;
28 static void dwc2_set_his_params(struct dwc2_hsotg *hsotg)
30 struct dwc2_core_params *p = &hsotg->params;
51 static void dwc2_set_jz4775_params(struct dwc2_hsotg *hsotg)
53 struct dwc2_core_params *p = &hsotg->params;
60 !device_property_read_bool(hsotg->dev, "disable-over-current");
63 static void dwc2_set_loongson_params(struct dwc2_hsotg *hsotg)
65 struct dwc2_core_params *p = &hsotg->params;
71 static void dwc2_set_x1600_params(struct dwc2_hsotg *hsotg)
73 struct dwc2_core_params *p = &hsotg->params;
81 !device_property_read_bool(hsotg->dev, "disable-over-current");
84 static void dwc2_set_x2000_params(struct dwc2_hsotg *hsotg)
86 struct dwc2_core_params *p = &hsotg->params;
97 !device_property_read_bool(hsotg->dev, "disable-over-current");
100 static void dwc2_set_s3c6400_params(struct dwc2_hsotg *hsotg)
102 struct dwc2_core_params *p = &hsotg->params;
109 static void dwc2_set_socfpga_agilex_params(struct dwc2_hsotg *hsotg)
111 struct dwc2_core_params *p = &hsotg->params;
117 static void dwc2_set_rk_params(struct dwc2_hsotg *hsotg)
119 struct dwc2_core_params *p = &hsotg->params;
135 static void dwc2_set_ltq_params(struct dwc2_hsotg *hsotg)
137 struct dwc2_core_params *p = &hsotg->params;
150 static void dwc2_set_amlogic_params(struct dwc2_hsotg *hsotg)
152 struct dwc2_core_params *p = &hsotg->params;
167 static void dwc2_set_amlogic_g12a_params(struct dwc2_hsotg *hsotg)
169 struct dwc2_core_params *p = &hsotg->params;
177 static void dwc2_set_amlogic_a1_params(struct dwc2_hsotg *hsotg)
179 struct dwc2_core_params *p = &hsotg->params;
196 static void dwc2_set_amcc_params(struct dwc2_hsotg *hsotg)
198 struct dwc2_core_params *p = &hsotg->params;
203 static void dwc2_set_stm32f4x9_fsotg_params(struct dwc2_hsotg *hsotg)
205 struct dwc2_core_params *p = &hsotg->params;
219 static void dwc2_set_stm32f7_hsotg_params(struct dwc2_hsotg *hsotg)
221 struct dwc2_core_params *p = &hsotg->params;
228 static void dwc2_set_stm32mp15_fsotg_params(struct dwc2_hsotg *hsotg)
230 struct dwc2_core_params *p = &hsotg->params;
250 static void dwc2_set_stm32mp15_hsotg_params(struct dwc2_hsotg *hsotg)
252 struct dwc2_core_params *p = &hsotg->params;
257 p->activate_stm_id_vb_detection = !device_property_read_bool(hsotg->dev, "usb-role-switch");
283 { .compatible = "samsung,s3c6400-hsotg",
299 { .compatible = "st,stm32f4x9-hsotg" },
300 { .compatible = "st,stm32f7-hsotg",
304 { .compatible = "st,stm32mp15-hsotg",
306 { .compatible = "intel,socfpga-agilex-hsotg",
335 static void dwc2_set_param_otg_cap(struct dwc2_hsotg *hsotg)
337 switch (hsotg->hw_params.op_mode) {
339 hsotg->params.otg_caps.hnp_support = true;
340 hsotg->params.otg_caps.srp_support = true;
345 hsotg->params.otg_caps.hnp_support = false;
346 hsotg->params.otg_caps.srp_support = true;
349 hsotg->params.otg_caps.hnp_support = false;
350 hsotg->params.otg_caps.srp_support = false;
355 static void dwc2_set_param_phy_type(struct dwc2_hsotg *hsotg)
358 u32 hs_phy_type = hsotg->hw_params.hs_phy_type;
369 if (dwc2_is_fs_iot(hsotg))
370 hsotg->params.phy_type = DWC2_PHY_TYPE_PARAM_FS;
372 hsotg->params.phy_type = val;
375 static void dwc2_set_param_speed(struct dwc2_hsotg *hsotg)
379 val = hsotg->params.phy_type == DWC2_PHY_TYPE_PARAM_FS ?
382 if (dwc2_is_fs_iot(hsotg))
385 if (dwc2_is_hs_iot(hsotg))
388 hsotg->params.speed = val;
391 static void dwc2_set_param_phy_utmi_width(struct dwc2_hsotg *hsotg)
395 val = (hsotg->hw_params.utmi_phy_data_width ==
398 if (hsotg->phy) {
403 if (phy_get_bus_width(hsotg->phy) == 8)
407 hsotg->params.phy_utmi_width = val;
410 static void dwc2_set_param_tx_fifo_sizes(struct dwc2_hsotg *hsotg)
412 struct dwc2_core_params *p = &hsotg->params;
417 fifo_count = dwc2_hsotg_tx_fifo_count(hsotg);
420 depth_average = dwc2_hsotg_tx_fifo_average_depth(hsotg);
425 static void dwc2_set_param_power_down(struct dwc2_hsotg *hsotg)
429 if (hsotg->hw_params.hibernation)
431 else if (hsotg->hw_params.power_optimized)
436 hsotg->params.power_down = val;
439 static void dwc2_set_param_lpm(struct dwc2_hsotg *hsotg)
441 struct dwc2_core_params *p = &hsotg->params;
443 p->lpm = hsotg->hw_params.lpm_mode;
460 * @hsotg: Programming view of the DWC_otg controller
463 static void dwc2_set_default_params(struct dwc2_hsotg *hsotg)
465 struct dwc2_hw_params *hw = &hsotg->hw_params;
466 struct dwc2_core_params *p = &hsotg->params;
469 dwc2_set_param_otg_cap(hsotg);
470 dwc2_set_param_phy_type(hsotg);
471 dwc2_set_param_speed(hsotg);
472 dwc2_set_param_phy_utmi_width(hsotg);
473 dwc2_set_param_power_down(hsotg);
474 dwc2_set_param_lpm(hsotg);
495 if ((hsotg->dr_mode == USB_DR_MODE_HOST) ||
496 (hsotg->dr_mode == USB_DR_MODE_OTG)) {
508 if ((hsotg->dr_mode == USB_DR_MODE_PERIPHERAL) ||
509 (hsotg->dr_mode == USB_DR_MODE_OTG)) {
524 dwc2_set_param_tx_fifo_sizes(hsotg);
531 * @hsotg: Programming view of the DWC_otg controller
535 static void dwc2_get_device_properties(struct dwc2_hsotg *hsotg)
537 struct dwc2_core_params *p = &hsotg->params;
540 if ((hsotg->dr_mode == USB_DR_MODE_PERIPHERAL) ||
541 (hsotg->dr_mode == USB_DR_MODE_OTG)) {
542 device_property_read_u32(hsotg->dev, "g-rx-fifo-size",
545 device_property_read_u32(hsotg->dev, "g-np-tx-fifo-size",
548 num = device_property_count_u32(hsotg->dev, "g-tx-fifo-size");
553 device_property_read_u32_array(hsotg->dev,
559 of_usb_update_otg_caps(hsotg->dev->of_node, &p->otg_caps);
562 p->oc_disable = of_property_read_bool(hsotg->dev->of_node, "disable-over-current");
565 static void dwc2_check_param_otg_cap(struct dwc2_hsotg *hsotg)
569 if (hsotg->params.otg_caps.hnp_support && hsotg->params.otg_caps.srp_support) {
571 if (hsotg->hw_params.op_mode != GHWCFG2_OP_MODE_HNP_SRP_CAPABLE)
573 } else if (!hsotg->params.otg_caps.hnp_support) {
575 if (hsotg->params.otg_caps.srp_support) {
576 switch (hsotg->hw_params.op_mode) {
593 dwc2_set_param_otg_cap(hsotg);
596 static void dwc2_check_param_phy_type(struct dwc2_hsotg *hsotg)
602 hs_phy_type = hsotg->hw_params.hs_phy_type;
603 fs_phy_type = hsotg->hw_params.fs_phy_type;
605 switch (hsotg->params.phy_type) {
625 dwc2_set_param_phy_type(hsotg);
628 static void dwc2_check_param_speed(struct dwc2_hsotg *hsotg)
631 int phy_type = hsotg->params.phy_type;
632 int speed = hsotg->params.speed;
636 if ((hsotg->params.speed == DWC2_SPEED_PARAM_HIGH) &&
649 dwc2_set_param_speed(hsotg);
652 static void dwc2_check_param_phy_utmi_width(struct dwc2_hsotg *hsotg)
655 int param = hsotg->params.phy_utmi_width;
656 int width = hsotg->hw_params.utmi_phy_data_width;
671 dwc2_set_param_phy_utmi_width(hsotg);
674 static void dwc2_check_param_power_down(struct dwc2_hsotg *hsotg)
676 int param = hsotg->params.power_down;
682 if (hsotg->hw_params.power_optimized)
684 dev_dbg(hsotg->dev,
689 if (hsotg->hw_params.hibernation)
691 dev_dbg(hsotg->dev,
696 dev_err(hsotg->dev,
703 hsotg->params.power_down = param;
706 static void dwc2_check_param_tx_fifo_sizes(struct dwc2_hsotg *hsotg)
714 fifo_count = dwc2_hsotg_tx_fifo_count(hsotg);
715 min = hsotg->hw_params.en_multiple_tx_fifo ? 16 : 4;
718 total += hsotg->params.g_tx_fifo_size[fifo];
720 if (total > dwc2_hsotg_tx_fifo_total_depth(hsotg) || !total) {
721 dev_warn(hsotg->dev, "%s: Invalid parameter g-tx-fifo-size, setting to default average\n",
723 dwc2_set_param_tx_fifo_sizes(hsotg);
727 dptxfszn = hsotg->hw_params.g_tx_fifo_size[fifo];
729 if (hsotg->params.g_tx_fifo_size[fifo] < min ||
730 hsotg->params.g_tx_fifo_size[fifo] > dptxfszn) {
731 dev_warn(hsotg->dev, "%s: Invalid parameter g_tx_fifo_size[%d]=%d\n",
733 hsotg->params.g_tx_fifo_size[fifo]);
734 hsotg->params.g_tx_fifo_size[fifo] = dptxfszn;
740 if ((int)(hsotg->params._param) < (_min) || \
741 (hsotg->params._param) > (_max)) { \
742 dev_warn(hsotg->dev, "%s: Invalid parameter %s=%d\n", \
743 __func__, #_param, hsotg->params._param); \
744 hsotg->params._param = (_def); \
749 if (hsotg->params._param && !(_check)) { \
750 dev_warn(hsotg->dev, "%s: Invalid parameter %s=%d\n", \
751 __func__, #_param, hsotg->params._param); \
752 hsotg->params._param = false; \
756 static void dwc2_check_params(struct dwc2_hsotg *hsotg)
758 struct dwc2_hw_params *hw = &hsotg->hw_params;
759 struct dwc2_core_params *p = &hsotg->params;
762 dwc2_check_param_otg_cap(hsotg);
763 dwc2_check_param_phy_type(hsotg);
764 dwc2_check_param_speed(hsotg);
765 dwc2_check_param_phy_utmi_width(hsotg);
766 dwc2_check_param_power_down(hsotg);
772 CHECK_BOOL(reload_ctl, (hsotg->hw_params.snpsid > DWC2_CORE_REV_2_92a));
773 CHECK_BOOL(lpm, (hsotg->hw_params.snpsid >= DWC2_CORE_REV_2_80a));
775 CHECK_BOOL(lpm_clock_gating, hsotg->params.lpm);
776 CHECK_BOOL(besl, hsotg->params.lpm);
777 CHECK_BOOL(besl, (hsotg->hw_params.snpsid >= DWC2_CORE_REV_3_00a));
778 CHECK_BOOL(hird_threshold_en, hsotg->params.lpm);
779 CHECK_RANGE(hird_threshold, 0, hsotg->params.besl ? 12 : 7, 0);
788 if ((hsotg->dr_mode == USB_DR_MODE_HOST) ||
789 (hsotg->dr_mode == USB_DR_MODE_OTG)) {
809 if ((hsotg->dr_mode == USB_DR_MODE_PERIPHERAL) ||
810 (hsotg->dr_mode == USB_DR_MODE_OTG)) {
819 dwc2_check_param_tx_fifo_sizes(hsotg);
828 static void dwc2_get_host_hwparams(struct dwc2_hsotg *hsotg)
830 struct dwc2_hw_params *hw = &hsotg->hw_params;
834 if (hsotg->dr_mode == USB_DR_MODE_PERIPHERAL)
837 dwc2_force_mode(hsotg, true);
839 gnptxfsiz = dwc2_readl(hsotg, GNPTXFSIZ);
840 hptxfsiz = dwc2_readl(hsotg, HPTXFSIZ);
853 static void dwc2_get_dev_hwparams(struct dwc2_hsotg *hsotg)
855 struct dwc2_hw_params *hw = &hsotg->hw_params;
859 if (hsotg->dr_mode == USB_DR_MODE_HOST)
862 dwc2_force_mode(hsotg, false);
864 gnptxfsiz = dwc2_readl(hsotg, GNPTXFSIZ);
866 fifo_count = dwc2_hsotg_tx_fifo_count(hsotg);
870 (dwc2_readl(hsotg, DPTXFSIZN(fifo)) &
882 * @hsotg: Programming view of the DWC_otg controller
885 int dwc2_get_hwparams(struct dwc2_hsotg *hsotg)
887 struct dwc2_hw_params *hw = &hsotg->hw_params;
892 hwcfg1 = dwc2_readl(hsotg, GHWCFG1);
893 hwcfg2 = dwc2_readl(hsotg, GHWCFG2);
894 hwcfg3 = dwc2_readl(hsotg, GHWCFG3);
895 hwcfg4 = dwc2_readl(hsotg, GHWCFG4);
896 grxfsiz = dwc2_readl(hsotg, GRXFSIZ);
961 dwc2_get_host_hwparams(hsotg);
962 dwc2_get_dev_hwparams(hsotg);
969 int dwc2_init_params(struct dwc2_hsotg *hsotg)
974 dwc2_set_default_params(hsotg);
975 dwc2_get_device_properties(hsotg);
977 match = of_match_device(dwc2_of_match_table, hsotg->dev);
980 set_params(hsotg);
985 amatch = acpi_match_device(dwc2_acpi_match, hsotg->dev);
988 set_params(hsotg);
990 pmatch = pci_match_id(dwc2_pci_ids, to_pci_dev(hsotg->dev->parent));
994 set_params(hsotg);
998 dwc2_check_params(hsotg);