aspm.c (40665B)
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * Enable PCIe link L0s/L1 state and Clock Power Management 4 * 5 * Copyright (C) 2007 Intel 6 * Copyright (C) Zhang Yanmin (yanmin.zhang@intel.com) 7 * Copyright (C) Shaohua Li (shaohua.li@intel.com) 8 */ 9 10#include <linux/kernel.h> 11#include <linux/module.h> 12#include <linux/moduleparam.h> 13#include <linux/pci.h> 14#include <linux/pci_regs.h> 15#include <linux/errno.h> 16#include <linux/pm.h> 17#include <linux/init.h> 18#include <linux/slab.h> 19#include <linux/jiffies.h> 20#include <linux/delay.h> 21#include "../pci.h" 22 23#ifdef MODULE_PARAM_PREFIX 24#undef MODULE_PARAM_PREFIX 25#endif 26#define MODULE_PARAM_PREFIX "pcie_aspm." 27 28/* Note: those are not register definitions */ 29#define ASPM_STATE_L0S_UP (1) /* Upstream direction L0s state */ 30#define ASPM_STATE_L0S_DW (2) /* Downstream direction L0s state */ 31#define ASPM_STATE_L1 (4) /* L1 state */ 32#define ASPM_STATE_L1_1 (8) /* ASPM L1.1 state */ 33#define ASPM_STATE_L1_2 (0x10) /* ASPM L1.2 state */ 34#define ASPM_STATE_L1_1_PCIPM (0x20) /* PCI PM L1.1 state */ 35#define ASPM_STATE_L1_2_PCIPM (0x40) /* PCI PM L1.2 state */ 36#define ASPM_STATE_L1_SS_PCIPM (ASPM_STATE_L1_1_PCIPM | ASPM_STATE_L1_2_PCIPM) 37#define ASPM_STATE_L1_2_MASK (ASPM_STATE_L1_2 | ASPM_STATE_L1_2_PCIPM) 38#define ASPM_STATE_L1SS (ASPM_STATE_L1_1 | ASPM_STATE_L1_1_PCIPM |\ 39 ASPM_STATE_L1_2_MASK) 40#define ASPM_STATE_L0S (ASPM_STATE_L0S_UP | ASPM_STATE_L0S_DW) 41#define ASPM_STATE_ALL (ASPM_STATE_L0S | ASPM_STATE_L1 | \ 42 ASPM_STATE_L1SS) 43 44struct pcie_link_state { 45 struct pci_dev *pdev; /* Upstream component of the Link */ 46 struct pci_dev *downstream; /* Downstream component, function 0 */ 47 struct pcie_link_state *root; /* pointer to the root port link */ 48 struct pcie_link_state *parent; /* pointer to the parent Link state */ 49 struct list_head sibling; /* node in link_list */ 50 51 /* ASPM state */ 52 u32 aspm_support:7; /* Supported ASPM state */ 53 u32 aspm_enabled:7; /* Enabled ASPM state */ 54 u32 aspm_capable:7; /* Capable ASPM state with latency */ 55 u32 aspm_default:7; /* Default ASPM state by BIOS */ 56 u32 aspm_disable:7; /* Disabled ASPM state */ 57 58 /* Clock PM state */ 59 u32 clkpm_capable:1; /* Clock PM capable? */ 60 u32 clkpm_enabled:1; /* Current Clock PM state */ 61 u32 clkpm_default:1; /* Default Clock PM state by BIOS */ 62 u32 clkpm_disable:1; /* Clock PM disabled */ 63}; 64 65static int aspm_disabled, aspm_force; 66static bool aspm_support_enabled = true; 67static DEFINE_MUTEX(aspm_lock); 68static LIST_HEAD(link_list); 69 70#define POLICY_DEFAULT 0 /* BIOS default setting */ 71#define POLICY_PERFORMANCE 1 /* high performance */ 72#define POLICY_POWERSAVE 2 /* high power saving */ 73#define POLICY_POWER_SUPERSAVE 3 /* possibly even more power saving */ 74 75#ifdef CONFIG_PCIEASPM_PERFORMANCE 76static int aspm_policy = POLICY_PERFORMANCE; 77#elif defined CONFIG_PCIEASPM_POWERSAVE 78static int aspm_policy = POLICY_POWERSAVE; 79#elif defined CONFIG_PCIEASPM_POWER_SUPERSAVE 80static int aspm_policy = POLICY_POWER_SUPERSAVE; 81#else 82static int aspm_policy; 83#endif 84 85static const char *policy_str[] = { 86 [POLICY_DEFAULT] = "default", 87 [POLICY_PERFORMANCE] = "performance", 88 [POLICY_POWERSAVE] = "powersave", 89 [POLICY_POWER_SUPERSAVE] = "powersupersave" 90}; 91 92#define LINK_RETRAIN_TIMEOUT HZ 93 94/* 95 * The L1 PM substate capability is only implemented in function 0 in a 96 * multi function device. 97 */ 98static struct pci_dev *pci_function_0(struct pci_bus *linkbus) 99{ 100 struct pci_dev *child; 101 102 list_for_each_entry(child, &linkbus->devices, bus_list) 103 if (PCI_FUNC(child->devfn) == 0) 104 return child; 105 return NULL; 106} 107 108static int policy_to_aspm_state(struct pcie_link_state *link) 109{ 110 switch (aspm_policy) { 111 case POLICY_PERFORMANCE: 112 /* Disable ASPM and Clock PM */ 113 return 0; 114 case POLICY_POWERSAVE: 115 /* Enable ASPM L0s/L1 */ 116 return (ASPM_STATE_L0S | ASPM_STATE_L1); 117 case POLICY_POWER_SUPERSAVE: 118 /* Enable Everything */ 119 return ASPM_STATE_ALL; 120 case POLICY_DEFAULT: 121 return link->aspm_default; 122 } 123 return 0; 124} 125 126static int policy_to_clkpm_state(struct pcie_link_state *link) 127{ 128 switch (aspm_policy) { 129 case POLICY_PERFORMANCE: 130 /* Disable ASPM and Clock PM */ 131 return 0; 132 case POLICY_POWERSAVE: 133 case POLICY_POWER_SUPERSAVE: 134 /* Enable Clock PM */ 135 return 1; 136 case POLICY_DEFAULT: 137 return link->clkpm_default; 138 } 139 return 0; 140} 141 142static void pcie_set_clkpm_nocheck(struct pcie_link_state *link, int enable) 143{ 144 struct pci_dev *child; 145 struct pci_bus *linkbus = link->pdev->subordinate; 146 u32 val = enable ? PCI_EXP_LNKCTL_CLKREQ_EN : 0; 147 148 list_for_each_entry(child, &linkbus->devices, bus_list) 149 pcie_capability_clear_and_set_word(child, PCI_EXP_LNKCTL, 150 PCI_EXP_LNKCTL_CLKREQ_EN, 151 val); 152 link->clkpm_enabled = !!enable; 153} 154 155static void pcie_set_clkpm(struct pcie_link_state *link, int enable) 156{ 157 /* 158 * Don't enable Clock PM if the link is not Clock PM capable 159 * or Clock PM is disabled 160 */ 161 if (!link->clkpm_capable || link->clkpm_disable) 162 enable = 0; 163 /* Need nothing if the specified equals to current state */ 164 if (link->clkpm_enabled == enable) 165 return; 166 pcie_set_clkpm_nocheck(link, enable); 167} 168 169static void pcie_clkpm_cap_init(struct pcie_link_state *link, int blacklist) 170{ 171 int capable = 1, enabled = 1; 172 u32 reg32; 173 u16 reg16; 174 struct pci_dev *child; 175 struct pci_bus *linkbus = link->pdev->subordinate; 176 177 /* All functions should have the same cap and state, take the worst */ 178 list_for_each_entry(child, &linkbus->devices, bus_list) { 179 pcie_capability_read_dword(child, PCI_EXP_LNKCAP, ®32); 180 if (!(reg32 & PCI_EXP_LNKCAP_CLKPM)) { 181 capable = 0; 182 enabled = 0; 183 break; 184 } 185 pcie_capability_read_word(child, PCI_EXP_LNKCTL, ®16); 186 if (!(reg16 & PCI_EXP_LNKCTL_CLKREQ_EN)) 187 enabled = 0; 188 } 189 link->clkpm_enabled = enabled; 190 link->clkpm_default = enabled; 191 link->clkpm_capable = capable; 192 link->clkpm_disable = blacklist ? 1 : 0; 193} 194 195static bool pcie_retrain_link(struct pcie_link_state *link) 196{ 197 struct pci_dev *parent = link->pdev; 198 unsigned long end_jiffies; 199 u16 reg16; 200 201 pcie_capability_read_word(parent, PCI_EXP_LNKCTL, ®16); 202 reg16 |= PCI_EXP_LNKCTL_RL; 203 pcie_capability_write_word(parent, PCI_EXP_LNKCTL, reg16); 204 if (parent->clear_retrain_link) { 205 /* 206 * Due to an erratum in some devices the Retrain Link bit 207 * needs to be cleared again manually to allow the link 208 * training to succeed. 209 */ 210 reg16 &= ~PCI_EXP_LNKCTL_RL; 211 pcie_capability_write_word(parent, PCI_EXP_LNKCTL, reg16); 212 } 213 214 /* Wait for link training end. Break out after waiting for timeout */ 215 end_jiffies = jiffies + LINK_RETRAIN_TIMEOUT; 216 do { 217 pcie_capability_read_word(parent, PCI_EXP_LNKSTA, ®16); 218 if (!(reg16 & PCI_EXP_LNKSTA_LT)) 219 break; 220 msleep(1); 221 } while (time_before(jiffies, end_jiffies)); 222 return !(reg16 & PCI_EXP_LNKSTA_LT); 223} 224 225/* 226 * pcie_aspm_configure_common_clock: check if the 2 ends of a link 227 * could use common clock. If they are, configure them to use the 228 * common clock. That will reduce the ASPM state exit latency. 229 */ 230static void pcie_aspm_configure_common_clock(struct pcie_link_state *link) 231{ 232 int same_clock = 1; 233 u16 reg16, parent_reg, child_reg[8]; 234 struct pci_dev *child, *parent = link->pdev; 235 struct pci_bus *linkbus = parent->subordinate; 236 /* 237 * All functions of a slot should have the same Slot Clock 238 * Configuration, so just check one function 239 */ 240 child = list_entry(linkbus->devices.next, struct pci_dev, bus_list); 241 BUG_ON(!pci_is_pcie(child)); 242 243 /* Check downstream component if bit Slot Clock Configuration is 1 */ 244 pcie_capability_read_word(child, PCI_EXP_LNKSTA, ®16); 245 if (!(reg16 & PCI_EXP_LNKSTA_SLC)) 246 same_clock = 0; 247 248 /* Check upstream component if bit Slot Clock Configuration is 1 */ 249 pcie_capability_read_word(parent, PCI_EXP_LNKSTA, ®16); 250 if (!(reg16 & PCI_EXP_LNKSTA_SLC)) 251 same_clock = 0; 252 253 /* Port might be already in common clock mode */ 254 pcie_capability_read_word(parent, PCI_EXP_LNKCTL, ®16); 255 if (same_clock && (reg16 & PCI_EXP_LNKCTL_CCC)) { 256 bool consistent = true; 257 258 list_for_each_entry(child, &linkbus->devices, bus_list) { 259 pcie_capability_read_word(child, PCI_EXP_LNKCTL, 260 ®16); 261 if (!(reg16 & PCI_EXP_LNKCTL_CCC)) { 262 consistent = false; 263 break; 264 } 265 } 266 if (consistent) 267 return; 268 pci_info(parent, "ASPM: current common clock configuration is inconsistent, reconfiguring\n"); 269 } 270 271 /* Configure downstream component, all functions */ 272 list_for_each_entry(child, &linkbus->devices, bus_list) { 273 pcie_capability_read_word(child, PCI_EXP_LNKCTL, ®16); 274 child_reg[PCI_FUNC(child->devfn)] = reg16; 275 if (same_clock) 276 reg16 |= PCI_EXP_LNKCTL_CCC; 277 else 278 reg16 &= ~PCI_EXP_LNKCTL_CCC; 279 pcie_capability_write_word(child, PCI_EXP_LNKCTL, reg16); 280 } 281 282 /* Configure upstream component */ 283 pcie_capability_read_word(parent, PCI_EXP_LNKCTL, ®16); 284 parent_reg = reg16; 285 if (same_clock) 286 reg16 |= PCI_EXP_LNKCTL_CCC; 287 else 288 reg16 &= ~PCI_EXP_LNKCTL_CCC; 289 pcie_capability_write_word(parent, PCI_EXP_LNKCTL, reg16); 290 291 if (pcie_retrain_link(link)) 292 return; 293 294 /* Training failed. Restore common clock configurations */ 295 pci_err(parent, "ASPM: Could not configure common clock\n"); 296 list_for_each_entry(child, &linkbus->devices, bus_list) 297 pcie_capability_write_word(child, PCI_EXP_LNKCTL, 298 child_reg[PCI_FUNC(child->devfn)]); 299 pcie_capability_write_word(parent, PCI_EXP_LNKCTL, parent_reg); 300} 301 302/* Convert L0s latency encoding to ns */ 303static u32 calc_l0s_latency(u32 lnkcap) 304{ 305 u32 encoding = (lnkcap & PCI_EXP_LNKCAP_L0SEL) >> 12; 306 307 if (encoding == 0x7) 308 return (5 * 1000); /* > 4us */ 309 return (64 << encoding); 310} 311 312/* Convert L0s acceptable latency encoding to ns */ 313static u32 calc_l0s_acceptable(u32 encoding) 314{ 315 if (encoding == 0x7) 316 return -1U; 317 return (64 << encoding); 318} 319 320/* Convert L1 latency encoding to ns */ 321static u32 calc_l1_latency(u32 lnkcap) 322{ 323 u32 encoding = (lnkcap & PCI_EXP_LNKCAP_L1EL) >> 15; 324 325 if (encoding == 0x7) 326 return (65 * 1000); /* > 64us */ 327 return (1000 << encoding); 328} 329 330/* Convert L1 acceptable latency encoding to ns */ 331static u32 calc_l1_acceptable(u32 encoding) 332{ 333 if (encoding == 0x7) 334 return -1U; 335 return (1000 << encoding); 336} 337 338/* Convert L1SS T_pwr encoding to usec */ 339static u32 calc_l1ss_pwron(struct pci_dev *pdev, u32 scale, u32 val) 340{ 341 switch (scale) { 342 case 0: 343 return val * 2; 344 case 1: 345 return val * 10; 346 case 2: 347 return val * 100; 348 } 349 pci_err(pdev, "%s: Invalid T_PwrOn scale: %u\n", __func__, scale); 350 return 0; 351} 352 353static void encode_l12_threshold(u32 threshold_us, u32 *scale, u32 *value) 354{ 355 u32 threshold_ns = threshold_us * 1000; 356 357 /* See PCIe r3.1, sec 7.33.3 and sec 6.18 */ 358 if (threshold_ns < 32) { 359 *scale = 0; 360 *value = threshold_ns; 361 } else if (threshold_ns < 1024) { 362 *scale = 1; 363 *value = threshold_ns >> 5; 364 } else if (threshold_ns < 32768) { 365 *scale = 2; 366 *value = threshold_ns >> 10; 367 } else if (threshold_ns < 1048576) { 368 *scale = 3; 369 *value = threshold_ns >> 15; 370 } else if (threshold_ns < 33554432) { 371 *scale = 4; 372 *value = threshold_ns >> 20; 373 } else { 374 *scale = 5; 375 *value = threshold_ns >> 25; 376 } 377} 378 379static void pcie_aspm_check_latency(struct pci_dev *endpoint) 380{ 381 u32 latency, encoding, lnkcap_up, lnkcap_dw; 382 u32 l1_switch_latency = 0, latency_up_l0s; 383 u32 latency_up_l1, latency_dw_l0s, latency_dw_l1; 384 u32 acceptable_l0s, acceptable_l1; 385 struct pcie_link_state *link; 386 387 /* Device not in D0 doesn't need latency check */ 388 if ((endpoint->current_state != PCI_D0) && 389 (endpoint->current_state != PCI_UNKNOWN)) 390 return; 391 392 link = endpoint->bus->self->link_state; 393 394 /* Calculate endpoint L0s acceptable latency */ 395 encoding = (endpoint->devcap & PCI_EXP_DEVCAP_L0S) >> 6; 396 acceptable_l0s = calc_l0s_acceptable(encoding); 397 398 /* Calculate endpoint L1 acceptable latency */ 399 encoding = (endpoint->devcap & PCI_EXP_DEVCAP_L1) >> 9; 400 acceptable_l1 = calc_l1_acceptable(encoding); 401 402 while (link) { 403 struct pci_dev *dev = pci_function_0(link->pdev->subordinate); 404 405 /* Read direction exit latencies */ 406 pcie_capability_read_dword(link->pdev, PCI_EXP_LNKCAP, 407 &lnkcap_up); 408 pcie_capability_read_dword(dev, PCI_EXP_LNKCAP, 409 &lnkcap_dw); 410 latency_up_l0s = calc_l0s_latency(lnkcap_up); 411 latency_up_l1 = calc_l1_latency(lnkcap_up); 412 latency_dw_l0s = calc_l0s_latency(lnkcap_dw); 413 latency_dw_l1 = calc_l1_latency(lnkcap_dw); 414 415 /* Check upstream direction L0s latency */ 416 if ((link->aspm_capable & ASPM_STATE_L0S_UP) && 417 (latency_up_l0s > acceptable_l0s)) 418 link->aspm_capable &= ~ASPM_STATE_L0S_UP; 419 420 /* Check downstream direction L0s latency */ 421 if ((link->aspm_capable & ASPM_STATE_L0S_DW) && 422 (latency_dw_l0s > acceptable_l0s)) 423 link->aspm_capable &= ~ASPM_STATE_L0S_DW; 424 /* 425 * Check L1 latency. 426 * Every switch on the path to root complex need 1 427 * more microsecond for L1. Spec doesn't mention L0s. 428 * 429 * The exit latencies for L1 substates are not advertised 430 * by a device. Since the spec also doesn't mention a way 431 * to determine max latencies introduced by enabling L1 432 * substates on the components, it is not clear how to do 433 * a L1 substate exit latency check. We assume that the 434 * L1 exit latencies advertised by a device include L1 435 * substate latencies (and hence do not do any check). 436 */ 437 latency = max_t(u32, latency_up_l1, latency_dw_l1); 438 if ((link->aspm_capable & ASPM_STATE_L1) && 439 (latency + l1_switch_latency > acceptable_l1)) 440 link->aspm_capable &= ~ASPM_STATE_L1; 441 l1_switch_latency += 1000; 442 443 link = link->parent; 444 } 445} 446 447static void pci_clear_and_set_dword(struct pci_dev *pdev, int pos, 448 u32 clear, u32 set) 449{ 450 u32 val; 451 452 pci_read_config_dword(pdev, pos, &val); 453 val &= ~clear; 454 val |= set; 455 pci_write_config_dword(pdev, pos, val); 456} 457 458/* Calculate L1.2 PM substate timing parameters */ 459static void aspm_calc_l1ss_info(struct pcie_link_state *link, 460 u32 parent_l1ss_cap, u32 child_l1ss_cap) 461{ 462 struct pci_dev *child = link->downstream, *parent = link->pdev; 463 u32 val1, val2, scale1, scale2; 464 u32 t_common_mode, t_power_on, l1_2_threshold, scale, value; 465 u32 ctl1 = 0, ctl2 = 0; 466 u32 pctl1, pctl2, cctl1, cctl2; 467 u32 pl1_2_enables, cl1_2_enables; 468 469 if (!(link->aspm_support & ASPM_STATE_L1_2_MASK)) 470 return; 471 472 /* Choose the greater of the two Port Common_Mode_Restore_Times */ 473 val1 = (parent_l1ss_cap & PCI_L1SS_CAP_CM_RESTORE_TIME) >> 8; 474 val2 = (child_l1ss_cap & PCI_L1SS_CAP_CM_RESTORE_TIME) >> 8; 475 t_common_mode = max(val1, val2); 476 477 /* Choose the greater of the two Port T_POWER_ON times */ 478 val1 = (parent_l1ss_cap & PCI_L1SS_CAP_P_PWR_ON_VALUE) >> 19; 479 scale1 = (parent_l1ss_cap & PCI_L1SS_CAP_P_PWR_ON_SCALE) >> 16; 480 val2 = (child_l1ss_cap & PCI_L1SS_CAP_P_PWR_ON_VALUE) >> 19; 481 scale2 = (child_l1ss_cap & PCI_L1SS_CAP_P_PWR_ON_SCALE) >> 16; 482 483 if (calc_l1ss_pwron(parent, scale1, val1) > 484 calc_l1ss_pwron(child, scale2, val2)) { 485 ctl2 |= scale1 | (val1 << 3); 486 t_power_on = calc_l1ss_pwron(parent, scale1, val1); 487 } else { 488 ctl2 |= scale2 | (val2 << 3); 489 t_power_on = calc_l1ss_pwron(child, scale2, val2); 490 } 491 492 /* 493 * Set LTR_L1.2_THRESHOLD to the time required to transition the 494 * Link from L0 to L1.2 and back to L0 so we enter L1.2 only if 495 * downstream devices report (via LTR) that they can tolerate at 496 * least that much latency. 497 * 498 * Based on PCIe r3.1, sec 5.5.3.3.1, Figures 5-16 and 5-17, and 499 * Table 5-11. T(POWER_OFF) is at most 2us and T(L1.2) is at 500 * least 4us. 501 */ 502 l1_2_threshold = 2 + 4 + t_common_mode + t_power_on; 503 encode_l12_threshold(l1_2_threshold, &scale, &value); 504 ctl1 |= t_common_mode << 8 | scale << 29 | value << 16; 505 506 /* Some broken devices only support dword access to L1 SS */ 507 pci_read_config_dword(parent, parent->l1ss + PCI_L1SS_CTL1, &pctl1); 508 pci_read_config_dword(parent, parent->l1ss + PCI_L1SS_CTL2, &pctl2); 509 pci_read_config_dword(child, child->l1ss + PCI_L1SS_CTL1, &cctl1); 510 pci_read_config_dword(child, child->l1ss + PCI_L1SS_CTL2, &cctl2); 511 512 if (ctl1 == pctl1 && ctl1 == cctl1 && 513 ctl2 == pctl2 && ctl2 == cctl2) 514 return; 515 516 /* Disable L1.2 while updating. See PCIe r5.0, sec 5.5.4, 7.8.3.3 */ 517 pl1_2_enables = pctl1 & PCI_L1SS_CTL1_L1_2_MASK; 518 cl1_2_enables = cctl1 & PCI_L1SS_CTL1_L1_2_MASK; 519 520 if (pl1_2_enables || cl1_2_enables) { 521 pci_clear_and_set_dword(child, child->l1ss + PCI_L1SS_CTL1, 522 PCI_L1SS_CTL1_L1_2_MASK, 0); 523 pci_clear_and_set_dword(parent, parent->l1ss + PCI_L1SS_CTL1, 524 PCI_L1SS_CTL1_L1_2_MASK, 0); 525 } 526 527 /* Program T_POWER_ON times in both ports */ 528 pci_write_config_dword(parent, parent->l1ss + PCI_L1SS_CTL2, ctl2); 529 pci_write_config_dword(child, child->l1ss + PCI_L1SS_CTL2, ctl2); 530 531 /* Program Common_Mode_Restore_Time in upstream device */ 532 pci_clear_and_set_dword(parent, parent->l1ss + PCI_L1SS_CTL1, 533 PCI_L1SS_CTL1_CM_RESTORE_TIME, ctl1); 534 535 /* Program LTR_L1.2_THRESHOLD time in both ports */ 536 pci_clear_and_set_dword(parent, parent->l1ss + PCI_L1SS_CTL1, 537 PCI_L1SS_CTL1_LTR_L12_TH_VALUE | 538 PCI_L1SS_CTL1_LTR_L12_TH_SCALE, ctl1); 539 pci_clear_and_set_dword(child, child->l1ss + PCI_L1SS_CTL1, 540 PCI_L1SS_CTL1_LTR_L12_TH_VALUE | 541 PCI_L1SS_CTL1_LTR_L12_TH_SCALE, ctl1); 542 543 if (pl1_2_enables || cl1_2_enables) { 544 pci_clear_and_set_dword(parent, parent->l1ss + PCI_L1SS_CTL1, 0, 545 pl1_2_enables); 546 pci_clear_and_set_dword(child, child->l1ss + PCI_L1SS_CTL1, 0, 547 cl1_2_enables); 548 } 549} 550 551static void pcie_aspm_cap_init(struct pcie_link_state *link, int blacklist) 552{ 553 struct pci_dev *child = link->downstream, *parent = link->pdev; 554 u32 parent_lnkcap, child_lnkcap; 555 u16 parent_lnkctl, child_lnkctl; 556 u32 parent_l1ss_cap, child_l1ss_cap; 557 u32 parent_l1ss_ctl1 = 0, child_l1ss_ctl1 = 0; 558 struct pci_bus *linkbus = parent->subordinate; 559 560 if (blacklist) { 561 /* Set enabled/disable so that we will disable ASPM later */ 562 link->aspm_enabled = ASPM_STATE_ALL; 563 link->aspm_disable = ASPM_STATE_ALL; 564 return; 565 } 566 567 /* 568 * If ASPM not supported, don't mess with the clocks and link, 569 * bail out now. 570 */ 571 pcie_capability_read_dword(parent, PCI_EXP_LNKCAP, &parent_lnkcap); 572 pcie_capability_read_dword(child, PCI_EXP_LNKCAP, &child_lnkcap); 573 if (!(parent_lnkcap & child_lnkcap & PCI_EXP_LNKCAP_ASPMS)) 574 return; 575 576 /* Configure common clock before checking latencies */ 577 pcie_aspm_configure_common_clock(link); 578 579 /* 580 * Re-read upstream/downstream components' register state after 581 * clock configuration. L0s & L1 exit latencies in the otherwise 582 * read-only Link Capabilities may change depending on common clock 583 * configuration (PCIe r5.0, sec 7.5.3.6). 584 */ 585 pcie_capability_read_dword(parent, PCI_EXP_LNKCAP, &parent_lnkcap); 586 pcie_capability_read_dword(child, PCI_EXP_LNKCAP, &child_lnkcap); 587 pcie_capability_read_word(parent, PCI_EXP_LNKCTL, &parent_lnkctl); 588 pcie_capability_read_word(child, PCI_EXP_LNKCTL, &child_lnkctl); 589 590 /* 591 * Setup L0s state 592 * 593 * Note that we must not enable L0s in either direction on a 594 * given link unless components on both sides of the link each 595 * support L0s. 596 */ 597 if (parent_lnkcap & child_lnkcap & PCI_EXP_LNKCAP_ASPM_L0S) 598 link->aspm_support |= ASPM_STATE_L0S; 599 600 if (child_lnkctl & PCI_EXP_LNKCTL_ASPM_L0S) 601 link->aspm_enabled |= ASPM_STATE_L0S_UP; 602 if (parent_lnkctl & PCI_EXP_LNKCTL_ASPM_L0S) 603 link->aspm_enabled |= ASPM_STATE_L0S_DW; 604 605 /* Setup L1 state */ 606 if (parent_lnkcap & child_lnkcap & PCI_EXP_LNKCAP_ASPM_L1) 607 link->aspm_support |= ASPM_STATE_L1; 608 609 if (parent_lnkctl & child_lnkctl & PCI_EXP_LNKCTL_ASPM_L1) 610 link->aspm_enabled |= ASPM_STATE_L1; 611 612 /* Setup L1 substate */ 613 pci_read_config_dword(parent, parent->l1ss + PCI_L1SS_CAP, 614 &parent_l1ss_cap); 615 pci_read_config_dword(child, child->l1ss + PCI_L1SS_CAP, 616 &child_l1ss_cap); 617 618 if (!(parent_l1ss_cap & PCI_L1SS_CAP_L1_PM_SS)) 619 parent_l1ss_cap = 0; 620 if (!(child_l1ss_cap & PCI_L1SS_CAP_L1_PM_SS)) 621 child_l1ss_cap = 0; 622 623 /* 624 * If we don't have LTR for the entire path from the Root Complex 625 * to this device, we can't use ASPM L1.2 because it relies on the 626 * LTR_L1.2_THRESHOLD. See PCIe r4.0, secs 5.5.4, 6.18. 627 */ 628 if (!child->ltr_path) 629 child_l1ss_cap &= ~PCI_L1SS_CAP_ASPM_L1_2; 630 631 if (parent_l1ss_cap & child_l1ss_cap & PCI_L1SS_CAP_ASPM_L1_1) 632 link->aspm_support |= ASPM_STATE_L1_1; 633 if (parent_l1ss_cap & child_l1ss_cap & PCI_L1SS_CAP_ASPM_L1_2) 634 link->aspm_support |= ASPM_STATE_L1_2; 635 if (parent_l1ss_cap & child_l1ss_cap & PCI_L1SS_CAP_PCIPM_L1_1) 636 link->aspm_support |= ASPM_STATE_L1_1_PCIPM; 637 if (parent_l1ss_cap & child_l1ss_cap & PCI_L1SS_CAP_PCIPM_L1_2) 638 link->aspm_support |= ASPM_STATE_L1_2_PCIPM; 639 640 if (parent_l1ss_cap) 641 pci_read_config_dword(parent, parent->l1ss + PCI_L1SS_CTL1, 642 &parent_l1ss_ctl1); 643 if (child_l1ss_cap) 644 pci_read_config_dword(child, child->l1ss + PCI_L1SS_CTL1, 645 &child_l1ss_ctl1); 646 647 if (parent_l1ss_ctl1 & child_l1ss_ctl1 & PCI_L1SS_CTL1_ASPM_L1_1) 648 link->aspm_enabled |= ASPM_STATE_L1_1; 649 if (parent_l1ss_ctl1 & child_l1ss_ctl1 & PCI_L1SS_CTL1_ASPM_L1_2) 650 link->aspm_enabled |= ASPM_STATE_L1_2; 651 if (parent_l1ss_ctl1 & child_l1ss_ctl1 & PCI_L1SS_CTL1_PCIPM_L1_1) 652 link->aspm_enabled |= ASPM_STATE_L1_1_PCIPM; 653 if (parent_l1ss_ctl1 & child_l1ss_ctl1 & PCI_L1SS_CTL1_PCIPM_L1_2) 654 link->aspm_enabled |= ASPM_STATE_L1_2_PCIPM; 655 656 if (link->aspm_support & ASPM_STATE_L1SS) 657 aspm_calc_l1ss_info(link, parent_l1ss_cap, child_l1ss_cap); 658 659 /* Save default state */ 660 link->aspm_default = link->aspm_enabled; 661 662 /* Setup initial capable state. Will be updated later */ 663 link->aspm_capable = link->aspm_support; 664 665 /* Get and check endpoint acceptable latencies */ 666 list_for_each_entry(child, &linkbus->devices, bus_list) { 667 if (pci_pcie_type(child) != PCI_EXP_TYPE_ENDPOINT && 668 pci_pcie_type(child) != PCI_EXP_TYPE_LEG_END) 669 continue; 670 671 pcie_aspm_check_latency(child); 672 } 673} 674 675/* Configure the ASPM L1 substates */ 676static void pcie_config_aspm_l1ss(struct pcie_link_state *link, u32 state) 677{ 678 u32 val, enable_req; 679 struct pci_dev *child = link->downstream, *parent = link->pdev; 680 681 enable_req = (link->aspm_enabled ^ state) & state; 682 683 /* 684 * Here are the rules specified in the PCIe spec for enabling L1SS: 685 * - When enabling L1.x, enable bit at parent first, then at child 686 * - When disabling L1.x, disable bit at child first, then at parent 687 * - When enabling ASPM L1.x, need to disable L1 688 * (at child followed by parent). 689 * - The ASPM/PCIPM L1.2 must be disabled while programming timing 690 * parameters 691 * 692 * To keep it simple, disable all L1SS bits first, and later enable 693 * what is needed. 694 */ 695 696 /* Disable all L1 substates */ 697 pci_clear_and_set_dword(child, child->l1ss + PCI_L1SS_CTL1, 698 PCI_L1SS_CTL1_L1SS_MASK, 0); 699 pci_clear_and_set_dword(parent, parent->l1ss + PCI_L1SS_CTL1, 700 PCI_L1SS_CTL1_L1SS_MASK, 0); 701 /* 702 * If needed, disable L1, and it gets enabled later 703 * in pcie_config_aspm_link(). 704 */ 705 if (enable_req & (ASPM_STATE_L1_1 | ASPM_STATE_L1_2)) { 706 pcie_capability_clear_and_set_word(child, PCI_EXP_LNKCTL, 707 PCI_EXP_LNKCTL_ASPM_L1, 0); 708 pcie_capability_clear_and_set_word(parent, PCI_EXP_LNKCTL, 709 PCI_EXP_LNKCTL_ASPM_L1, 0); 710 } 711 712 val = 0; 713 if (state & ASPM_STATE_L1_1) 714 val |= PCI_L1SS_CTL1_ASPM_L1_1; 715 if (state & ASPM_STATE_L1_2) 716 val |= PCI_L1SS_CTL1_ASPM_L1_2; 717 if (state & ASPM_STATE_L1_1_PCIPM) 718 val |= PCI_L1SS_CTL1_PCIPM_L1_1; 719 if (state & ASPM_STATE_L1_2_PCIPM) 720 val |= PCI_L1SS_CTL1_PCIPM_L1_2; 721 722 /* Enable what we need to enable */ 723 pci_clear_and_set_dword(parent, parent->l1ss + PCI_L1SS_CTL1, 724 PCI_L1SS_CTL1_L1SS_MASK, val); 725 pci_clear_and_set_dword(child, child->l1ss + PCI_L1SS_CTL1, 726 PCI_L1SS_CTL1_L1SS_MASK, val); 727} 728 729static void pcie_config_aspm_dev(struct pci_dev *pdev, u32 val) 730{ 731 pcie_capability_clear_and_set_word(pdev, PCI_EXP_LNKCTL, 732 PCI_EXP_LNKCTL_ASPMC, val); 733} 734 735static void pcie_config_aspm_link(struct pcie_link_state *link, u32 state) 736{ 737 u32 upstream = 0, dwstream = 0; 738 struct pci_dev *child = link->downstream, *parent = link->pdev; 739 struct pci_bus *linkbus = parent->subordinate; 740 741 /* Enable only the states that were not explicitly disabled */ 742 state &= (link->aspm_capable & ~link->aspm_disable); 743 744 /* Can't enable any substates if L1 is not enabled */ 745 if (!(state & ASPM_STATE_L1)) 746 state &= ~ASPM_STATE_L1SS; 747 748 /* Spec says both ports must be in D0 before enabling PCI PM substates*/ 749 if (parent->current_state != PCI_D0 || child->current_state != PCI_D0) { 750 state &= ~ASPM_STATE_L1_SS_PCIPM; 751 state |= (link->aspm_enabled & ASPM_STATE_L1_SS_PCIPM); 752 } 753 754 /* Nothing to do if the link is already in the requested state */ 755 if (link->aspm_enabled == state) 756 return; 757 /* Convert ASPM state to upstream/downstream ASPM register state */ 758 if (state & ASPM_STATE_L0S_UP) 759 dwstream |= PCI_EXP_LNKCTL_ASPM_L0S; 760 if (state & ASPM_STATE_L0S_DW) 761 upstream |= PCI_EXP_LNKCTL_ASPM_L0S; 762 if (state & ASPM_STATE_L1) { 763 upstream |= PCI_EXP_LNKCTL_ASPM_L1; 764 dwstream |= PCI_EXP_LNKCTL_ASPM_L1; 765 } 766 767 if (link->aspm_capable & ASPM_STATE_L1SS) 768 pcie_config_aspm_l1ss(link, state); 769 770 /* 771 * Spec 2.0 suggests all functions should be configured the 772 * same setting for ASPM. Enabling ASPM L1 should be done in 773 * upstream component first and then downstream, and vice 774 * versa for disabling ASPM L1. Spec doesn't mention L0S. 775 */ 776 if (state & ASPM_STATE_L1) 777 pcie_config_aspm_dev(parent, upstream); 778 list_for_each_entry(child, &linkbus->devices, bus_list) 779 pcie_config_aspm_dev(child, dwstream); 780 if (!(state & ASPM_STATE_L1)) 781 pcie_config_aspm_dev(parent, upstream); 782 783 link->aspm_enabled = state; 784} 785 786static void pcie_config_aspm_path(struct pcie_link_state *link) 787{ 788 while (link) { 789 pcie_config_aspm_link(link, policy_to_aspm_state(link)); 790 link = link->parent; 791 } 792} 793 794static void free_link_state(struct pcie_link_state *link) 795{ 796 link->pdev->link_state = NULL; 797 kfree(link); 798} 799 800static int pcie_aspm_sanity_check(struct pci_dev *pdev) 801{ 802 struct pci_dev *child; 803 u32 reg32; 804 805 /* 806 * Some functions in a slot might not all be PCIe functions, 807 * very strange. Disable ASPM for the whole slot 808 */ 809 list_for_each_entry(child, &pdev->subordinate->devices, bus_list) { 810 if (!pci_is_pcie(child)) 811 return -EINVAL; 812 813 /* 814 * If ASPM is disabled then we're not going to change 815 * the BIOS state. It's safe to continue even if it's a 816 * pre-1.1 device 817 */ 818 819 if (aspm_disabled) 820 continue; 821 822 /* 823 * Disable ASPM for pre-1.1 PCIe device, we follow MS to use 824 * RBER bit to determine if a function is 1.1 version device 825 */ 826 pcie_capability_read_dword(child, PCI_EXP_DEVCAP, ®32); 827 if (!(reg32 & PCI_EXP_DEVCAP_RBER) && !aspm_force) { 828 pci_info(child, "disabling ASPM on pre-1.1 PCIe device. You can enable it with 'pcie_aspm=force'\n"); 829 return -EINVAL; 830 } 831 } 832 return 0; 833} 834 835static struct pcie_link_state *alloc_pcie_link_state(struct pci_dev *pdev) 836{ 837 struct pcie_link_state *link; 838 839 link = kzalloc(sizeof(*link), GFP_KERNEL); 840 if (!link) 841 return NULL; 842 843 INIT_LIST_HEAD(&link->sibling); 844 link->pdev = pdev; 845 link->downstream = pci_function_0(pdev->subordinate); 846 847 /* 848 * Root Ports and PCI/PCI-X to PCIe Bridges are roots of PCIe 849 * hierarchies. Note that some PCIe host implementations omit 850 * the root ports entirely, in which case a downstream port on 851 * a switch may become the root of the link state chain for all 852 * its subordinate endpoints. 853 */ 854 if (pci_pcie_type(pdev) == PCI_EXP_TYPE_ROOT_PORT || 855 pci_pcie_type(pdev) == PCI_EXP_TYPE_PCIE_BRIDGE || 856 !pdev->bus->parent->self) { 857 link->root = link; 858 } else { 859 struct pcie_link_state *parent; 860 861 parent = pdev->bus->parent->self->link_state; 862 if (!parent) { 863 kfree(link); 864 return NULL; 865 } 866 867 link->parent = parent; 868 link->root = link->parent->root; 869 } 870 871 list_add(&link->sibling, &link_list); 872 pdev->link_state = link; 873 return link; 874} 875 876static void pcie_aspm_update_sysfs_visibility(struct pci_dev *pdev) 877{ 878 struct pci_dev *child; 879 880 list_for_each_entry(child, &pdev->subordinate->devices, bus_list) 881 sysfs_update_group(&child->dev.kobj, &aspm_ctrl_attr_group); 882} 883 884/* 885 * pcie_aspm_init_link_state: Initiate PCI express link state. 886 * It is called after the pcie and its children devices are scanned. 887 * @pdev: the root port or switch downstream port 888 */ 889void pcie_aspm_init_link_state(struct pci_dev *pdev) 890{ 891 struct pcie_link_state *link; 892 int blacklist = !!pcie_aspm_sanity_check(pdev); 893 894 if (!aspm_support_enabled) 895 return; 896 897 if (pdev->link_state) 898 return; 899 900 /* 901 * We allocate pcie_link_state for the component on the upstream 902 * end of a Link, so there's nothing to do unless this device is 903 * downstream port. 904 */ 905 if (!pcie_downstream_port(pdev)) 906 return; 907 908 /* VIA has a strange chipset, root port is under a bridge */ 909 if (pci_pcie_type(pdev) == PCI_EXP_TYPE_ROOT_PORT && 910 pdev->bus->self) 911 return; 912 913 down_read(&pci_bus_sem); 914 if (list_empty(&pdev->subordinate->devices)) 915 goto out; 916 917 mutex_lock(&aspm_lock); 918 link = alloc_pcie_link_state(pdev); 919 if (!link) 920 goto unlock; 921 /* 922 * Setup initial ASPM state. Note that we need to configure 923 * upstream links also because capable state of them can be 924 * update through pcie_aspm_cap_init(). 925 */ 926 pcie_aspm_cap_init(link, blacklist); 927 928 /* Setup initial Clock PM state */ 929 pcie_clkpm_cap_init(link, blacklist); 930 931 /* 932 * At this stage drivers haven't had an opportunity to change the 933 * link policy setting. Enabling ASPM on broken hardware can cripple 934 * it even before the driver has had a chance to disable ASPM, so 935 * default to a safe level right now. If we're enabling ASPM beyond 936 * the BIOS's expectation, we'll do so once pci_enable_device() is 937 * called. 938 */ 939 if (aspm_policy != POLICY_POWERSAVE && 940 aspm_policy != POLICY_POWER_SUPERSAVE) { 941 pcie_config_aspm_path(link); 942 pcie_set_clkpm(link, policy_to_clkpm_state(link)); 943 } 944 945 pcie_aspm_update_sysfs_visibility(pdev); 946 947unlock: 948 mutex_unlock(&aspm_lock); 949out: 950 up_read(&pci_bus_sem); 951} 952 953/* Recheck latencies and update aspm_capable for links under the root */ 954static void pcie_update_aspm_capable(struct pcie_link_state *root) 955{ 956 struct pcie_link_state *link; 957 BUG_ON(root->parent); 958 list_for_each_entry(link, &link_list, sibling) { 959 if (link->root != root) 960 continue; 961 link->aspm_capable = link->aspm_support; 962 } 963 list_for_each_entry(link, &link_list, sibling) { 964 struct pci_dev *child; 965 struct pci_bus *linkbus = link->pdev->subordinate; 966 if (link->root != root) 967 continue; 968 list_for_each_entry(child, &linkbus->devices, bus_list) { 969 if ((pci_pcie_type(child) != PCI_EXP_TYPE_ENDPOINT) && 970 (pci_pcie_type(child) != PCI_EXP_TYPE_LEG_END)) 971 continue; 972 pcie_aspm_check_latency(child); 973 } 974 } 975} 976 977/* @pdev: the endpoint device */ 978void pcie_aspm_exit_link_state(struct pci_dev *pdev) 979{ 980 struct pci_dev *parent = pdev->bus->self; 981 struct pcie_link_state *link, *root, *parent_link; 982 983 if (!parent || !parent->link_state) 984 return; 985 986 down_read(&pci_bus_sem); 987 mutex_lock(&aspm_lock); 988 /* 989 * All PCIe functions are in one slot, remove one function will remove 990 * the whole slot, so just wait until we are the last function left. 991 */ 992 if (!list_empty(&parent->subordinate->devices)) 993 goto out; 994 995 link = parent->link_state; 996 root = link->root; 997 parent_link = link->parent; 998 999 /* All functions are removed, so just disable ASPM for the link */ 1000 pcie_config_aspm_link(link, 0); 1001 list_del(&link->sibling); 1002 /* Clock PM is for endpoint device */ 1003 free_link_state(link); 1004 1005 /* Recheck latencies and configure upstream links */ 1006 if (parent_link) { 1007 pcie_update_aspm_capable(root); 1008 pcie_config_aspm_path(parent_link); 1009 } 1010out: 1011 mutex_unlock(&aspm_lock); 1012 up_read(&pci_bus_sem); 1013} 1014 1015/* @pdev: the root port or switch downstream port */ 1016void pcie_aspm_pm_state_change(struct pci_dev *pdev) 1017{ 1018 struct pcie_link_state *link = pdev->link_state; 1019 1020 if (aspm_disabled || !link) 1021 return; 1022 /* 1023 * Devices changed PM state, we should recheck if latency 1024 * meets all functions' requirement 1025 */ 1026 down_read(&pci_bus_sem); 1027 mutex_lock(&aspm_lock); 1028 pcie_update_aspm_capable(link->root); 1029 pcie_config_aspm_path(link); 1030 mutex_unlock(&aspm_lock); 1031 up_read(&pci_bus_sem); 1032} 1033 1034void pcie_aspm_powersave_config_link(struct pci_dev *pdev) 1035{ 1036 struct pcie_link_state *link = pdev->link_state; 1037 1038 if (aspm_disabled || !link) 1039 return; 1040 1041 if (aspm_policy != POLICY_POWERSAVE && 1042 aspm_policy != POLICY_POWER_SUPERSAVE) 1043 return; 1044 1045 down_read(&pci_bus_sem); 1046 mutex_lock(&aspm_lock); 1047 pcie_config_aspm_path(link); 1048 pcie_set_clkpm(link, policy_to_clkpm_state(link)); 1049 mutex_unlock(&aspm_lock); 1050 up_read(&pci_bus_sem); 1051} 1052 1053static struct pcie_link_state *pcie_aspm_get_link(struct pci_dev *pdev) 1054{ 1055 struct pci_dev *bridge; 1056 1057 if (!pci_is_pcie(pdev)) 1058 return NULL; 1059 1060 bridge = pci_upstream_bridge(pdev); 1061 if (!bridge || !pci_is_pcie(bridge)) 1062 return NULL; 1063 1064 return bridge->link_state; 1065} 1066 1067static int __pci_disable_link_state(struct pci_dev *pdev, int state, bool sem) 1068{ 1069 struct pcie_link_state *link = pcie_aspm_get_link(pdev); 1070 1071 if (!link) 1072 return -EINVAL; 1073 /* 1074 * A driver requested that ASPM be disabled on this device, but 1075 * if we don't have permission to manage ASPM (e.g., on ACPI 1076 * systems we have to observe the FADT ACPI_FADT_NO_ASPM bit and 1077 * the _OSC method), we can't honor that request. Windows has 1078 * a similar mechanism using "PciASPMOptOut", which is also 1079 * ignored in this situation. 1080 */ 1081 if (aspm_disabled) { 1082 pci_warn(pdev, "can't disable ASPM; OS doesn't have ASPM control\n"); 1083 return -EPERM; 1084 } 1085 1086 if (sem) 1087 down_read(&pci_bus_sem); 1088 mutex_lock(&aspm_lock); 1089 if (state & PCIE_LINK_STATE_L0S) 1090 link->aspm_disable |= ASPM_STATE_L0S; 1091 if (state & PCIE_LINK_STATE_L1) 1092 /* L1 PM substates require L1 */ 1093 link->aspm_disable |= ASPM_STATE_L1 | ASPM_STATE_L1SS; 1094 if (state & PCIE_LINK_STATE_L1_1) 1095 link->aspm_disable |= ASPM_STATE_L1_1; 1096 if (state & PCIE_LINK_STATE_L1_2) 1097 link->aspm_disable |= ASPM_STATE_L1_2; 1098 if (state & PCIE_LINK_STATE_L1_1_PCIPM) 1099 link->aspm_disable |= ASPM_STATE_L1_1_PCIPM; 1100 if (state & PCIE_LINK_STATE_L1_2_PCIPM) 1101 link->aspm_disable |= ASPM_STATE_L1_2_PCIPM; 1102 pcie_config_aspm_link(link, policy_to_aspm_state(link)); 1103 1104 if (state & PCIE_LINK_STATE_CLKPM) 1105 link->clkpm_disable = 1; 1106 pcie_set_clkpm(link, policy_to_clkpm_state(link)); 1107 mutex_unlock(&aspm_lock); 1108 if (sem) 1109 up_read(&pci_bus_sem); 1110 1111 return 0; 1112} 1113 1114int pci_disable_link_state_locked(struct pci_dev *pdev, int state) 1115{ 1116 return __pci_disable_link_state(pdev, state, false); 1117} 1118EXPORT_SYMBOL(pci_disable_link_state_locked); 1119 1120/** 1121 * pci_disable_link_state - Disable device's link state, so the link will 1122 * never enter specific states. Note that if the BIOS didn't grant ASPM 1123 * control to the OS, this does nothing because we can't touch the LNKCTL 1124 * register. Returns 0 or a negative errno. 1125 * 1126 * @pdev: PCI device 1127 * @state: ASPM link state to disable 1128 */ 1129int pci_disable_link_state(struct pci_dev *pdev, int state) 1130{ 1131 return __pci_disable_link_state(pdev, state, true); 1132} 1133EXPORT_SYMBOL(pci_disable_link_state); 1134 1135static int pcie_aspm_set_policy(const char *val, 1136 const struct kernel_param *kp) 1137{ 1138 int i; 1139 struct pcie_link_state *link; 1140 1141 if (aspm_disabled) 1142 return -EPERM; 1143 i = sysfs_match_string(policy_str, val); 1144 if (i < 0) 1145 return i; 1146 if (i == aspm_policy) 1147 return 0; 1148 1149 down_read(&pci_bus_sem); 1150 mutex_lock(&aspm_lock); 1151 aspm_policy = i; 1152 list_for_each_entry(link, &link_list, sibling) { 1153 pcie_config_aspm_link(link, policy_to_aspm_state(link)); 1154 pcie_set_clkpm(link, policy_to_clkpm_state(link)); 1155 } 1156 mutex_unlock(&aspm_lock); 1157 up_read(&pci_bus_sem); 1158 return 0; 1159} 1160 1161static int pcie_aspm_get_policy(char *buffer, const struct kernel_param *kp) 1162{ 1163 int i, cnt = 0; 1164 for (i = 0; i < ARRAY_SIZE(policy_str); i++) 1165 if (i == aspm_policy) 1166 cnt += sprintf(buffer + cnt, "[%s] ", policy_str[i]); 1167 else 1168 cnt += sprintf(buffer + cnt, "%s ", policy_str[i]); 1169 cnt += sprintf(buffer + cnt, "\n"); 1170 return cnt; 1171} 1172 1173module_param_call(policy, pcie_aspm_set_policy, pcie_aspm_get_policy, 1174 NULL, 0644); 1175 1176/** 1177 * pcie_aspm_enabled - Check if PCIe ASPM has been enabled for a device. 1178 * @pdev: Target device. 1179 * 1180 * Relies on the upstream bridge's link_state being valid. The link_state 1181 * is deallocated only when the last child of the bridge (i.e., @pdev or a 1182 * sibling) is removed, and the caller should be holding a reference to 1183 * @pdev, so this should be safe. 1184 */ 1185bool pcie_aspm_enabled(struct pci_dev *pdev) 1186{ 1187 struct pcie_link_state *link = pcie_aspm_get_link(pdev); 1188 1189 if (!link) 1190 return false; 1191 1192 return link->aspm_enabled; 1193} 1194EXPORT_SYMBOL_GPL(pcie_aspm_enabled); 1195 1196static ssize_t aspm_attr_show_common(struct device *dev, 1197 struct device_attribute *attr, 1198 char *buf, u8 state) 1199{ 1200 struct pci_dev *pdev = to_pci_dev(dev); 1201 struct pcie_link_state *link = pcie_aspm_get_link(pdev); 1202 1203 return sysfs_emit(buf, "%d\n", (link->aspm_enabled & state) ? 1 : 0); 1204} 1205 1206static ssize_t aspm_attr_store_common(struct device *dev, 1207 struct device_attribute *attr, 1208 const char *buf, size_t len, u8 state) 1209{ 1210 struct pci_dev *pdev = to_pci_dev(dev); 1211 struct pcie_link_state *link = pcie_aspm_get_link(pdev); 1212 bool state_enable; 1213 1214 if (kstrtobool(buf, &state_enable) < 0) 1215 return -EINVAL; 1216 1217 down_read(&pci_bus_sem); 1218 mutex_lock(&aspm_lock); 1219 1220 if (state_enable) { 1221 link->aspm_disable &= ~state; 1222 /* need to enable L1 for substates */ 1223 if (state & ASPM_STATE_L1SS) 1224 link->aspm_disable &= ~ASPM_STATE_L1; 1225 } else { 1226 link->aspm_disable |= state; 1227 } 1228 1229 pcie_config_aspm_link(link, policy_to_aspm_state(link)); 1230 1231 mutex_unlock(&aspm_lock); 1232 up_read(&pci_bus_sem); 1233 1234 return len; 1235} 1236 1237#define ASPM_ATTR(_f, _s) \ 1238static ssize_t _f##_show(struct device *dev, \ 1239 struct device_attribute *attr, char *buf) \ 1240{ return aspm_attr_show_common(dev, attr, buf, ASPM_STATE_##_s); } \ 1241 \ 1242static ssize_t _f##_store(struct device *dev, \ 1243 struct device_attribute *attr, \ 1244 const char *buf, size_t len) \ 1245{ return aspm_attr_store_common(dev, attr, buf, len, ASPM_STATE_##_s); } 1246 1247ASPM_ATTR(l0s_aspm, L0S) 1248ASPM_ATTR(l1_aspm, L1) 1249ASPM_ATTR(l1_1_aspm, L1_1) 1250ASPM_ATTR(l1_2_aspm, L1_2) 1251ASPM_ATTR(l1_1_pcipm, L1_1_PCIPM) 1252ASPM_ATTR(l1_2_pcipm, L1_2_PCIPM) 1253 1254static ssize_t clkpm_show(struct device *dev, 1255 struct device_attribute *attr, char *buf) 1256{ 1257 struct pci_dev *pdev = to_pci_dev(dev); 1258 struct pcie_link_state *link = pcie_aspm_get_link(pdev); 1259 1260 return sysfs_emit(buf, "%d\n", link->clkpm_enabled); 1261} 1262 1263static ssize_t clkpm_store(struct device *dev, 1264 struct device_attribute *attr, 1265 const char *buf, size_t len) 1266{ 1267 struct pci_dev *pdev = to_pci_dev(dev); 1268 struct pcie_link_state *link = pcie_aspm_get_link(pdev); 1269 bool state_enable; 1270 1271 if (kstrtobool(buf, &state_enable) < 0) 1272 return -EINVAL; 1273 1274 down_read(&pci_bus_sem); 1275 mutex_lock(&aspm_lock); 1276 1277 link->clkpm_disable = !state_enable; 1278 pcie_set_clkpm(link, policy_to_clkpm_state(link)); 1279 1280 mutex_unlock(&aspm_lock); 1281 up_read(&pci_bus_sem); 1282 1283 return len; 1284} 1285 1286static DEVICE_ATTR_RW(clkpm); 1287static DEVICE_ATTR_RW(l0s_aspm); 1288static DEVICE_ATTR_RW(l1_aspm); 1289static DEVICE_ATTR_RW(l1_1_aspm); 1290static DEVICE_ATTR_RW(l1_2_aspm); 1291static DEVICE_ATTR_RW(l1_1_pcipm); 1292static DEVICE_ATTR_RW(l1_2_pcipm); 1293 1294static struct attribute *aspm_ctrl_attrs[] = { 1295 &dev_attr_clkpm.attr, 1296 &dev_attr_l0s_aspm.attr, 1297 &dev_attr_l1_aspm.attr, 1298 &dev_attr_l1_1_aspm.attr, 1299 &dev_attr_l1_2_aspm.attr, 1300 &dev_attr_l1_1_pcipm.attr, 1301 &dev_attr_l1_2_pcipm.attr, 1302 NULL 1303}; 1304 1305static umode_t aspm_ctrl_attrs_are_visible(struct kobject *kobj, 1306 struct attribute *a, int n) 1307{ 1308 struct device *dev = kobj_to_dev(kobj); 1309 struct pci_dev *pdev = to_pci_dev(dev); 1310 struct pcie_link_state *link = pcie_aspm_get_link(pdev); 1311 static const u8 aspm_state_map[] = { 1312 ASPM_STATE_L0S, 1313 ASPM_STATE_L1, 1314 ASPM_STATE_L1_1, 1315 ASPM_STATE_L1_2, 1316 ASPM_STATE_L1_1_PCIPM, 1317 ASPM_STATE_L1_2_PCIPM, 1318 }; 1319 1320 if (aspm_disabled || !link) 1321 return 0; 1322 1323 if (n == 0) 1324 return link->clkpm_capable ? a->mode : 0; 1325 1326 return link->aspm_capable & aspm_state_map[n - 1] ? a->mode : 0; 1327} 1328 1329const struct attribute_group aspm_ctrl_attr_group = { 1330 .name = "link", 1331 .attrs = aspm_ctrl_attrs, 1332 .is_visible = aspm_ctrl_attrs_are_visible, 1333}; 1334 1335static int __init pcie_aspm_disable(char *str) 1336{ 1337 if (!strcmp(str, "off")) { 1338 aspm_policy = POLICY_DEFAULT; 1339 aspm_disabled = 1; 1340 aspm_support_enabled = false; 1341 printk(KERN_INFO "PCIe ASPM is disabled\n"); 1342 } else if (!strcmp(str, "force")) { 1343 aspm_force = 1; 1344 printk(KERN_INFO "PCIe ASPM is forcibly enabled\n"); 1345 } 1346 return 1; 1347} 1348 1349__setup("pcie_aspm=", pcie_aspm_disable); 1350 1351void pcie_no_aspm(void) 1352{ 1353 /* 1354 * Disabling ASPM is intended to prevent the kernel from modifying 1355 * existing hardware state, not to clear existing state. To that end: 1356 * (a) set policy to POLICY_DEFAULT in order to avoid changing state 1357 * (b) prevent userspace from changing policy 1358 */ 1359 if (!aspm_force) { 1360 aspm_policy = POLICY_DEFAULT; 1361 aspm_disabled = 1; 1362 } 1363} 1364 1365bool pcie_aspm_support_enabled(void) 1366{ 1367 return aspm_support_enabled; 1368} 1369EXPORT_SYMBOL(pcie_aspm_support_enabled);