Lines Matching refs:link

47 	struct list_head link;		/* node in parent's children list */  member
96 static int policy_to_aspm_state(struct pcie_link_state *link) in policy_to_aspm_state() argument
106 return link->aspm_default; in policy_to_aspm_state()
111 static int policy_to_clkpm_state(struct pcie_link_state *link) in policy_to_clkpm_state() argument
121 return link->clkpm_default; in policy_to_clkpm_state()
126 static void pcie_set_clkpm_nocheck(struct pcie_link_state *link, int enable) in pcie_set_clkpm_nocheck() argument
129 struct pci_bus *linkbus = link->pdev->subordinate; in pcie_set_clkpm_nocheck()
136 link->clkpm_enabled = !!enable; in pcie_set_clkpm_nocheck()
139 static void pcie_set_clkpm(struct pcie_link_state *link, int enable) in pcie_set_clkpm() argument
142 if (!link->clkpm_capable && enable) in pcie_set_clkpm()
145 if (link->clkpm_enabled == enable) in pcie_set_clkpm()
147 pcie_set_clkpm_nocheck(link, enable); in pcie_set_clkpm()
150 static void pcie_clkpm_cap_init(struct pcie_link_state *link, int blacklist) in pcie_clkpm_cap_init() argument
156 struct pci_bus *linkbus = link->pdev->subordinate; in pcie_clkpm_cap_init()
170 link->clkpm_enabled = enabled; in pcie_clkpm_cap_init()
171 link->clkpm_default = enabled; in pcie_clkpm_cap_init()
172 link->clkpm_capable = (blacklist) ? 0 : capable; in pcie_clkpm_cap_init()
180 static void pcie_aspm_configure_common_clock(struct pcie_link_state *link) in pcie_aspm_configure_common_clock() argument
185 struct pci_dev *child, *parent = link->pdev; in pcie_aspm_configure_common_clock()
306 struct pcie_link_state *link; in pcie_aspm_check_latency() local
313 link = endpoint->bus->self->link_state; in pcie_aspm_check_latency()
314 acceptable = &link->acceptable[PCI_FUNC(endpoint->devfn)]; in pcie_aspm_check_latency()
316 while (link) { in pcie_aspm_check_latency()
318 if ((link->aspm_capable & ASPM_STATE_L0S_UP) && in pcie_aspm_check_latency()
319 (link->latency_up.l0s > acceptable->l0s)) in pcie_aspm_check_latency()
320 link->aspm_capable &= ~ASPM_STATE_L0S_UP; in pcie_aspm_check_latency()
323 if ((link->aspm_capable & ASPM_STATE_L0S_DW) && in pcie_aspm_check_latency()
324 (link->latency_dw.l0s > acceptable->l0s)) in pcie_aspm_check_latency()
325 link->aspm_capable &= ~ASPM_STATE_L0S_DW; in pcie_aspm_check_latency()
331 latency = max_t(u32, link->latency_up.l1, link->latency_dw.l1); in pcie_aspm_check_latency()
332 if ((link->aspm_capable & ASPM_STATE_L1) && in pcie_aspm_check_latency()
334 link->aspm_capable &= ~ASPM_STATE_L1; in pcie_aspm_check_latency()
337 link = link->parent; in pcie_aspm_check_latency()
341 static void pcie_aspm_cap_init(struct pcie_link_state *link, int blacklist) in pcie_aspm_cap_init() argument
343 struct pci_dev *child, *parent = link->pdev; in pcie_aspm_cap_init()
349 link->aspm_enabled = ASPM_STATE_ALL; in pcie_aspm_cap_init()
350 link->aspm_disable = ASPM_STATE_ALL; in pcie_aspm_cap_init()
355 pcie_aspm_configure_common_clock(link); in pcie_aspm_cap_init()
370 link->aspm_support |= ASPM_STATE_L0S; in pcie_aspm_cap_init()
372 link->aspm_enabled |= ASPM_STATE_L0S_UP; in pcie_aspm_cap_init()
374 link->aspm_enabled |= ASPM_STATE_L0S_DW; in pcie_aspm_cap_init()
375 link->latency_up.l0s = calc_l0s_latency(upreg.latency_encoding_l0s); in pcie_aspm_cap_init()
376 link->latency_dw.l0s = calc_l0s_latency(dwreg.latency_encoding_l0s); in pcie_aspm_cap_init()
380 link->aspm_support |= ASPM_STATE_L1; in pcie_aspm_cap_init()
382 link->aspm_enabled |= ASPM_STATE_L1; in pcie_aspm_cap_init()
383 link->latency_up.l1 = calc_l1_latency(upreg.latency_encoding_l1); in pcie_aspm_cap_init()
384 link->latency_dw.l1 = calc_l1_latency(dwreg.latency_encoding_l1); in pcie_aspm_cap_init()
387 link->aspm_default = link->aspm_enabled; in pcie_aspm_cap_init()
390 link->aspm_capable = link->aspm_support; in pcie_aspm_cap_init()
397 link->aspm_disable = ASPM_STATE_ALL; in pcie_aspm_cap_init()
406 &link->acceptable[PCI_FUNC(child->devfn)]; in pcie_aspm_cap_init()
430 static void pcie_config_aspm_link(struct pcie_link_state *link, u32 state) in pcie_config_aspm_link() argument
433 struct pci_dev *child, *parent = link->pdev; in pcie_config_aspm_link()
437 state &= (link->aspm_capable & ~link->aspm_disable); in pcie_config_aspm_link()
438 if (link->aspm_enabled == state) in pcie_config_aspm_link()
462 link->aspm_enabled = state; in pcie_config_aspm_link()
465 static void pcie_config_aspm_path(struct pcie_link_state *link) in pcie_config_aspm_path() argument
467 while (link) { in pcie_config_aspm_path()
468 pcie_config_aspm_link(link, policy_to_aspm_state(link)); in pcie_config_aspm_path()
469 link = link->parent; in pcie_config_aspm_path()
473 static void free_link_state(struct pcie_link_state *link) in free_link_state() argument
475 link->pdev->link_state = NULL; in free_link_state()
476 kfree(link); in free_link_state()
516 struct pcie_link_state *link; in alloc_pcie_link_state() local
518 link = kzalloc(sizeof(*link), GFP_KERNEL); in alloc_pcie_link_state()
519 if (!link) in alloc_pcie_link_state()
521 INIT_LIST_HEAD(&link->sibling); in alloc_pcie_link_state()
522 INIT_LIST_HEAD(&link->children); in alloc_pcie_link_state()
523 INIT_LIST_HEAD(&link->link); in alloc_pcie_link_state()
524 link->pdev = pdev; in alloc_pcie_link_state()
529 kfree(link); in alloc_pcie_link_state()
532 link->parent = parent; in alloc_pcie_link_state()
533 list_add(&link->link, &parent->children); in alloc_pcie_link_state()
536 if (!link->parent) in alloc_pcie_link_state()
537 link->root = link; in alloc_pcie_link_state()
539 link->root = link->parent->root; in alloc_pcie_link_state()
541 list_add(&link->sibling, &link_list); in alloc_pcie_link_state()
542 pdev->link_state = link; in alloc_pcie_link_state()
543 return link; in alloc_pcie_link_state()
553 struct pcie_link_state *link; in pcie_aspm_init_link_state() local
580 link = alloc_pcie_link_state(pdev); in pcie_aspm_init_link_state()
581 if (!link) in pcie_aspm_init_link_state()
588 pcie_aspm_cap_init(link, blacklist); in pcie_aspm_init_link_state()
591 pcie_clkpm_cap_init(link, blacklist); in pcie_aspm_init_link_state()
602 pcie_config_aspm_path(link); in pcie_aspm_init_link_state()
603 pcie_set_clkpm(link, policy_to_clkpm_state(link)); in pcie_aspm_init_link_state()
615 struct pcie_link_state *link; in pcie_update_aspm_capable() local
617 list_for_each_entry(link, &link_list, sibling) { in pcie_update_aspm_capable()
618 if (link->root != root) in pcie_update_aspm_capable()
620 link->aspm_capable = link->aspm_support; in pcie_update_aspm_capable()
622 list_for_each_entry(link, &link_list, sibling) { in pcie_update_aspm_capable()
624 struct pci_bus *linkbus = link->pdev->subordinate; in pcie_update_aspm_capable()
625 if (link->root != root) in pcie_update_aspm_capable()
640 struct pcie_link_state *link, *root, *parent_link; in pcie_aspm_exit_link_state() local
654 link = parent->link_state; in pcie_aspm_exit_link_state()
655 root = link->root; in pcie_aspm_exit_link_state()
656 parent_link = link->parent; in pcie_aspm_exit_link_state()
659 pcie_config_aspm_link(link, 0); in pcie_aspm_exit_link_state()
660 list_del(&link->sibling); in pcie_aspm_exit_link_state()
661 list_del(&link->link); in pcie_aspm_exit_link_state()
663 free_link_state(link); in pcie_aspm_exit_link_state()
678 struct pcie_link_state *link = pdev->link_state; in pcie_aspm_pm_state_change() local
680 if (aspm_disabled || !link) in pcie_aspm_pm_state_change()
688 pcie_update_aspm_capable(link->root); in pcie_aspm_pm_state_change()
689 pcie_config_aspm_path(link); in pcie_aspm_pm_state_change()
696 struct pcie_link_state *link = pdev->link_state; in pcie_aspm_powersave_config_link() local
698 if (aspm_disabled || !link) in pcie_aspm_powersave_config_link()
706 pcie_config_aspm_path(link); in pcie_aspm_powersave_config_link()
707 pcie_set_clkpm(link, policy_to_clkpm_state(link)); in pcie_aspm_powersave_config_link()
715 struct pcie_link_state *link; in __pci_disable_link_state() local
741 link = parent->link_state; in __pci_disable_link_state()
743 link->aspm_disable |= ASPM_STATE_L0S; in __pci_disable_link_state()
745 link->aspm_disable |= ASPM_STATE_L1; in __pci_disable_link_state()
746 pcie_config_aspm_link(link, policy_to_aspm_state(link)); in __pci_disable_link_state()
749 link->clkpm_capable = 0; in __pci_disable_link_state()
750 pcie_set_clkpm(link, 0); in __pci_disable_link_state()
781 struct pcie_link_state *link; in pcie_aspm_set_policy() local
796 list_for_each_entry(link, &link_list, sibling) { in pcie_aspm_set_policy()
797 pcie_config_aspm_link(link, policy_to_aspm_state(link)); in pcie_aspm_set_policy()
798 pcie_set_clkpm(link, policy_to_clkpm_state(link)); in pcie_aspm_set_policy()
836 struct pcie_link_state *link, *root = pdev->link_state->root; in link_state_store() local
855 list_for_each_entry(link, &link_list, sibling) { in link_state_store()
856 if (link->root != root) in link_state_store()
858 pcie_config_aspm_link(link, state); in link_state_store()