Lines Matching refs:margining
227 return usb4->margining->caps[0] & USB4_MARGIN_CAP_0_MODES_SW; in supports_software()
232 return usb4->margining->caps[0] & USB4_MARGIN_CAP_0_MODES_HW; in supports_hardware()
237 return usb4->margining->caps[0] & USB4_MARGIN_CAP_0_2_LANES; in both_lanes()
242 return (usb4->margining->caps[0] & USB4_MARGIN_CAP_0_VOLTAGE_INDP_MASK) >> in independent_voltage_margins()
248 return usb4->margining->caps[0] & USB4_MARGIN_CAP_0_TIME; in supports_time()
254 return (usb4->margining->caps[1] & USB4_MARGIN_CAP_1_TIME_INDP_MASK) >> in independent_time_margins()
273 if (usb4->margining->software) { in margining_ber_level_write()
290 if (val < usb4->margining->min_ber_level || in margining_ber_level_write()
291 val > usb4->margining->max_ber_level) { in margining_ber_level_write()
296 usb4->margining->ber_level = val; in margining_ber_level_write()
319 if (usb4->margining->software) in margining_ber_level_show()
321 ber_level_show(s, usb4->margining->ber_level); in margining_ber_level_show()
337 cap0 = usb4->margining->caps[0]; in margining_caps_show()
339 cap1 = usb4->margining->caps[1]; in margining_caps_show()
347 ber_level_show(s, usb4->margining->min_ber_level); in margining_caps_show()
349 ber_level_show(s, usb4->margining->max_ber_level); in margining_caps_show()
357 usb4->margining->voltage_steps); in margining_caps_show()
359 usb4->margining->max_voltage_offset); in margining_caps_show()
391 usb4->margining->time_steps); in margining_caps_show()
393 usb4->margining->max_time_offset); in margining_caps_show()
426 usb4->margining->lanes = 0; in margining_lanes_write()
428 usb4->margining->lanes = 1; in margining_lanes_write()
432 usb4->margining->lanes = 7; in margining_lanes_write()
456 lanes = usb4->margining->lanes; in margining_lanes_show()
500 usb4->margining->software = true; in margining_mode_write()
505 usb4->margining->software = false; in margining_mode_write()
530 if (usb4->margining->software) in margining_mode_show()
537 if (usb4->margining->software) in margining_mode_show()
555 struct tb_margining *margining; in margining_run_write() local
580 margining = usb4->margining; in margining_run_write()
582 if (margining->software) { in margining_run_write()
584 margining->time ? "time" : "voltage", margining->lanes); in margining_run_write()
585 ret = usb4_port_sw_margin(port, margining->lanes, margining->time, in margining_run_write()
586 margining->right_high, in margining_run_write()
591 ret = usb4_port_sw_margin_errors(port, &margining->results[0]); in margining_run_write()
594 margining->time ? "time" : "voltage", margining->lanes); in margining_run_write()
596 margining->results[0] = 0; in margining_run_write()
597 margining->results[1] = 0; in margining_run_write()
598 ret = usb4_port_hw_margin(port, margining->lanes, in margining_run_write()
599 margining->ber_level, margining->time, in margining_run_write()
600 margining->right_high, margining->results); in margining_run_write()
627 usb4->margining->results[0] = 0; in margining_results_write()
628 usb4->margining->results[1] = 0; in margining_results_write()
635 const struct tb_margining *margining, u8 val) in voltage_margin_show() argument
640 voltage = tmp * margining->max_voltage_offset / margining->voltage_steps; in voltage_margin_show()
648 const struct tb_margining *margining, u8 val) in time_margin_show() argument
653 interval = tmp * margining->max_time_offset / margining->time_steps; in time_margin_show()
664 struct tb_margining *margining; in margining_results_show() local
670 margining = usb4->margining; in margining_results_show()
672 seq_printf(s, "0x%08x\n", margining->results[0]); in margining_results_show()
674 if (!margining->software) { in margining_results_show()
677 seq_printf(s, "0x%08x\n", margining->results[1]); in margining_results_show()
679 if (margining->time) { in margining_results_show()
680 if (!margining->lanes || margining->lanes == 7) { in margining_results_show()
681 val = margining->results[1]; in margining_results_show()
683 time_margin_show(s, margining, val); in margining_results_show()
684 val = margining->results[1] >> in margining_results_show()
687 time_margin_show(s, margining, val); in margining_results_show()
689 if (margining->lanes == 1 || margining->lanes == 7) { in margining_results_show()
690 val = margining->results[1] >> in margining_results_show()
693 time_margin_show(s, margining, val); in margining_results_show()
694 val = margining->results[1] >> in margining_results_show()
697 time_margin_show(s, margining, val); in margining_results_show()
700 if (!margining->lanes || margining->lanes == 7) { in margining_results_show()
701 val = margining->results[1]; in margining_results_show()
703 voltage_margin_show(s, margining, val); in margining_results_show()
704 val = margining->results[1] >> in margining_results_show()
707 voltage_margin_show(s, margining, val); in margining_results_show()
709 if (margining->lanes == 1 || margining->lanes == 7) { in margining_results_show()
710 val = margining->results[1] >> in margining_results_show()
713 voltage_margin_show(s, margining, val); in margining_results_show()
714 val = margining->results[1] >> in margining_results_show()
717 voltage_margin_show(s, margining, val); in margining_results_show()
750 usb4->margining->time = true; in margining_test_write()
752 usb4->margining->time = false; in margining_test_write()
773 if (usb4->margining->time) in margining_test_show()
808 if (usb4->margining->time) { in margining_margin_write()
810 usb4->margining->right_high = false; in margining_margin_write()
812 usb4->margining->right_high = true; in margining_margin_write()
817 usb4->margining->right_high = false; in margining_margin_write()
819 usb4->margining->right_high = true; in margining_margin_write()
840 if (usb4->margining->time) { in margining_margin_show()
841 if (usb4->margining->right_high) in margining_margin_show()
846 if (usb4->margining->right_high) in margining_margin_show()
859 struct tb_margining *margining; in margining_port_init() local
873 margining = kzalloc(sizeof(*margining), GFP_KERNEL); in margining_port_init()
874 if (!margining) in margining_port_init()
877 ret = usb4_port_margining_caps(port, margining->caps); in margining_port_init()
879 kfree(margining); in margining_port_init()
883 usb4->margining = margining; in margining_port_init()
887 margining->software = true; in margining_port_init()
889 val = (margining->caps[0] & USB4_MARGIN_CAP_0_VOLTAGE_STEPS_MASK) >> in margining_port_init()
891 margining->voltage_steps = val; in margining_port_init()
892 val = (margining->caps[0] & USB4_MARGIN_CAP_0_MAX_VOLTAGE_OFFSET_MASK) >> in margining_port_init()
894 margining->max_voltage_offset = 74 + val * 2; in margining_port_init()
897 val = (margining->caps[1] & USB4_MARGIN_CAP_1_TIME_STEPS_MASK) >> in margining_port_init()
899 margining->time_steps = val; in margining_port_init()
900 val = (margining->caps[1] & USB4_MARGIN_CAP_1_TIME_OFFSET_MASK) >> in margining_port_init()
906 margining->max_time_offset = 200 + 10 * val; in margining_port_init()
911 val = (margining->caps[1] & USB4_MARGIN_CAP_1_MIN_BER_MASK) >> in margining_port_init()
913 margining->min_ber_level = val; in margining_port_init()
914 val = (margining->caps[1] & USB4_MARGIN_CAP_1_MAX_BER_MASK) >> in margining_port_init()
916 margining->max_ber_level = val; in margining_port_init()
919 margining->ber_level = margining->min_ber_level; in margining_port_init()
947 kfree(port->usb4->margining); in margining_port_remove()
948 port->usb4->margining = NULL; in margining_port_remove()