| .. | .. |
|---|
| 2 | 2 | /** |
|---|
| 3 | 3 | * dwc3-pci.c - PCI Specific glue layer |
|---|
| 4 | 4 | * |
|---|
| 5 | | - * Copyright (C) 2010-2011 Texas Instruments Incorporated - http://www.ti.com |
|---|
| 5 | + * Copyright (C) 2010-2011 Texas Instruments Incorporated - https://www.ti.com |
|---|
| 6 | 6 | * |
|---|
| 7 | 7 | * Authors: Felipe Balbi <balbi@ti.com>, |
|---|
| 8 | 8 | * Sebastian Andrzej Siewior <bigeasy@linutronix.de> |
|---|
| .. | .. |
|---|
| 36 | 36 | #define PCI_DEVICE_ID_INTEL_CNPH 0xa36e |
|---|
| 37 | 37 | #define PCI_DEVICE_ID_INTEL_CNPV 0xa3b0 |
|---|
| 38 | 38 | #define PCI_DEVICE_ID_INTEL_ICLLP 0x34ee |
|---|
| 39 | +#define PCI_DEVICE_ID_INTEL_EHLLP 0x4b7e |
|---|
| 40 | +#define PCI_DEVICE_ID_INTEL_TGPLP 0xa0ee |
|---|
| 41 | +#define PCI_DEVICE_ID_INTEL_TGPH 0x43ee |
|---|
| 42 | +#define PCI_DEVICE_ID_INTEL_JSP 0x4dee |
|---|
| 43 | +#define PCI_DEVICE_ID_INTEL_ADLP 0x51ee |
|---|
| 44 | +#define PCI_DEVICE_ID_INTEL_ADLS 0x7ae1 |
|---|
| 45 | +#define PCI_DEVICE_ID_INTEL_TGL 0x9a15 |
|---|
| 39 | 46 | |
|---|
| 40 | 47 | #define PCI_INTEL_BXT_DSM_GUID "732b85d5-b7a7-4a1b-9ba0-4bbd00ffd511" |
|---|
| 41 | 48 | #define PCI_INTEL_BXT_FUNC_PMU_PWR 4 |
|---|
| .. | .. |
|---|
| 113 | 120 | static const struct property_entry dwc3_pci_mrfld_properties[] = { |
|---|
| 114 | 121 | PROPERTY_ENTRY_STRING("dr_mode", "otg"), |
|---|
| 115 | 122 | PROPERTY_ENTRY_STRING("linux,extcon-name", "mrfld_bcove_pwrsrc"), |
|---|
| 123 | + PROPERTY_ENTRY_BOOL("snps,dis_u3_susphy_quirk"), |
|---|
| 124 | + PROPERTY_ENTRY_BOOL("snps,dis_u2_susphy_quirk"), |
|---|
| 125 | + PROPERTY_ENTRY_BOOL("snps,usb2-gadget-lpm-disable"), |
|---|
| 116 | 126 | PROPERTY_ENTRY_BOOL("linux,sysdev_is_parent"), |
|---|
| 117 | 127 | {} |
|---|
| 118 | 128 | }; |
|---|
| .. | .. |
|---|
| 133 | 143 | PROPERTY_ENTRY_BOOL("snps,disable_scramble_quirk"), |
|---|
| 134 | 144 | PROPERTY_ENTRY_BOOL("snps,dis_u3_susphy_quirk"), |
|---|
| 135 | 145 | PROPERTY_ENTRY_BOOL("snps,dis_u2_susphy_quirk"), |
|---|
| 136 | | - PROPERTY_ENTRY_BOOL("snps,usb2-gadget-lpm-disable"), |
|---|
| 137 | 146 | PROPERTY_ENTRY_BOOL("linux,sysdev_is_parent"), |
|---|
| 138 | 147 | {} |
|---|
| 148 | +}; |
|---|
| 149 | + |
|---|
| 150 | +static const struct software_node dwc3_pci_intel_swnode = { |
|---|
| 151 | + .properties = dwc3_pci_intel_properties, |
|---|
| 152 | +}; |
|---|
| 153 | + |
|---|
| 154 | +static const struct software_node dwc3_pci_intel_mrfld_swnode = { |
|---|
| 155 | + .properties = dwc3_pci_mrfld_properties, |
|---|
| 156 | +}; |
|---|
| 157 | + |
|---|
| 158 | +static const struct software_node dwc3_pci_amd_swnode = { |
|---|
| 159 | + .properties = dwc3_pci_amd_properties, |
|---|
| 139 | 160 | }; |
|---|
| 140 | 161 | |
|---|
| 141 | 162 | static int dwc3_pci_quirks(struct dwc3_pci *dwc) |
|---|
| .. | .. |
|---|
| 144 | 165 | |
|---|
| 145 | 166 | if (pdev->vendor == PCI_VENDOR_ID_INTEL) { |
|---|
| 146 | 167 | if (pdev->device == PCI_DEVICE_ID_INTEL_BXT || |
|---|
| 147 | | - pdev->device == PCI_DEVICE_ID_INTEL_BXT_M) { |
|---|
| 168 | + pdev->device == PCI_DEVICE_ID_INTEL_BXT_M || |
|---|
| 169 | + pdev->device == PCI_DEVICE_ID_INTEL_EHLLP) { |
|---|
| 148 | 170 | guid_parse(PCI_INTEL_BXT_DSM_GUID, &dwc->guid); |
|---|
| 149 | 171 | dwc->has_dsm_for_pm = true; |
|---|
| 150 | 172 | } |
|---|
| .. | .. |
|---|
| 165 | 187 | |
|---|
| 166 | 188 | /* |
|---|
| 167 | 189 | * A lot of BYT devices lack ACPI resource entries for |
|---|
| 168 | | - * the GPIOs, add a fallback mapping to the reference |
|---|
| 190 | + * the GPIOs. If the ACPI entry for the GPIO controller |
|---|
| 191 | + * is present add a fallback mapping to the reference |
|---|
| 169 | 192 | * design GPIOs which all boards seem to use. |
|---|
| 170 | 193 | */ |
|---|
| 171 | | - gpiod_add_lookup_table(&platform_bytcr_gpios); |
|---|
| 194 | + if (acpi_dev_present("INT33FC", NULL, -1)) |
|---|
| 195 | + gpiod_add_lookup_table(&platform_bytcr_gpios); |
|---|
| 172 | 196 | |
|---|
| 173 | 197 | /* |
|---|
| 174 | 198 | * These GPIOs will turn on the USB2 PHY. Note that we have to |
|---|
| .. | .. |
|---|
| 205 | 229 | int ret; |
|---|
| 206 | 230 | |
|---|
| 207 | 231 | ret = pm_runtime_get_sync(&dwc3->dev); |
|---|
| 208 | | - if (ret) { |
|---|
| 232 | + if (ret < 0) { |
|---|
| 209 | 233 | pm_runtime_put_sync_autosuspend(&dwc3->dev); |
|---|
| 210 | 234 | return; |
|---|
| 211 | 235 | } |
|---|
| .. | .. |
|---|
| 217 | 241 | |
|---|
| 218 | 242 | static int dwc3_pci_probe(struct pci_dev *pci, const struct pci_device_id *id) |
|---|
| 219 | 243 | { |
|---|
| 220 | | - struct property_entry *p = (struct property_entry *)id->driver_data; |
|---|
| 221 | 244 | struct dwc3_pci *dwc; |
|---|
| 222 | 245 | struct resource res[2]; |
|---|
| 223 | 246 | int ret; |
|---|
| .. | .. |
|---|
| 260 | 283 | dwc->dwc3->dev.parent = dev; |
|---|
| 261 | 284 | ACPI_COMPANION_SET(&dwc->dwc3->dev, ACPI_COMPANION(dev)); |
|---|
| 262 | 285 | |
|---|
| 263 | | - ret = platform_device_add_properties(dwc->dwc3, p); |
|---|
| 286 | + ret = device_add_software_node(&dwc->dwc3->dev, (void *)id->driver_data); |
|---|
| 264 | 287 | if (ret < 0) |
|---|
| 265 | 288 | goto err; |
|---|
| 266 | 289 | |
|---|
| .. | .. |
|---|
| 283 | 306 | |
|---|
| 284 | 307 | return 0; |
|---|
| 285 | 308 | err: |
|---|
| 309 | + device_remove_software_node(&dwc->dwc3->dev); |
|---|
| 286 | 310 | platform_device_put(dwc->dwc3); |
|---|
| 287 | 311 | return ret; |
|---|
| 288 | 312 | } |
|---|
| .. | .. |
|---|
| 299 | 323 | #endif |
|---|
| 300 | 324 | device_init_wakeup(&pci->dev, false); |
|---|
| 301 | 325 | pm_runtime_get(&pci->dev); |
|---|
| 326 | + device_remove_software_node(&dwc->dwc3->dev); |
|---|
| 302 | 327 | platform_device_unregister(dwc->dwc3); |
|---|
| 303 | 328 | } |
|---|
| 304 | 329 | |
|---|
| 305 | 330 | static const struct pci_device_id dwc3_pci_id_table[] = { |
|---|
| 306 | 331 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_BSW), |
|---|
| 307 | | - (kernel_ulong_t) &dwc3_pci_intel_properties }, |
|---|
| 332 | + (kernel_ulong_t) &dwc3_pci_intel_swnode, }, |
|---|
| 308 | 333 | |
|---|
| 309 | 334 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_BYT), |
|---|
| 310 | | - (kernel_ulong_t) &dwc3_pci_intel_properties, }, |
|---|
| 335 | + (kernel_ulong_t) &dwc3_pci_intel_swnode, }, |
|---|
| 311 | 336 | |
|---|
| 312 | 337 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_MRFLD), |
|---|
| 313 | | - (kernel_ulong_t) &dwc3_pci_mrfld_properties, }, |
|---|
| 338 | + (kernel_ulong_t) &dwc3_pci_intel_mrfld_swnode, }, |
|---|
| 314 | 339 | |
|---|
| 315 | 340 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_CMLLP), |
|---|
| 316 | | - (kernel_ulong_t) &dwc3_pci_intel_properties, }, |
|---|
| 341 | + (kernel_ulong_t) &dwc3_pci_intel_swnode, }, |
|---|
| 317 | 342 | |
|---|
| 318 | 343 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_CMLH), |
|---|
| 319 | | - (kernel_ulong_t) &dwc3_pci_intel_properties, }, |
|---|
| 344 | + (kernel_ulong_t) &dwc3_pci_intel_swnode, }, |
|---|
| 320 | 345 | |
|---|
| 321 | 346 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_SPTLP), |
|---|
| 322 | | - (kernel_ulong_t) &dwc3_pci_intel_properties, }, |
|---|
| 347 | + (kernel_ulong_t) &dwc3_pci_intel_swnode, }, |
|---|
| 323 | 348 | |
|---|
| 324 | 349 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_SPTH), |
|---|
| 325 | | - (kernel_ulong_t) &dwc3_pci_intel_properties, }, |
|---|
| 350 | + (kernel_ulong_t) &dwc3_pci_intel_swnode, }, |
|---|
| 326 | 351 | |
|---|
| 327 | 352 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_BXT), |
|---|
| 328 | | - (kernel_ulong_t) &dwc3_pci_intel_properties, }, |
|---|
| 353 | + (kernel_ulong_t) &dwc3_pci_intel_swnode, }, |
|---|
| 329 | 354 | |
|---|
| 330 | 355 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_BXT_M), |
|---|
| 331 | | - (kernel_ulong_t) &dwc3_pci_intel_properties, }, |
|---|
| 356 | + (kernel_ulong_t) &dwc3_pci_intel_swnode, }, |
|---|
| 332 | 357 | |
|---|
| 333 | 358 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_APL), |
|---|
| 334 | | - (kernel_ulong_t) &dwc3_pci_intel_properties, }, |
|---|
| 359 | + (kernel_ulong_t) &dwc3_pci_intel_swnode, }, |
|---|
| 335 | 360 | |
|---|
| 336 | 361 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_KBP), |
|---|
| 337 | | - (kernel_ulong_t) &dwc3_pci_intel_properties, }, |
|---|
| 362 | + (kernel_ulong_t) &dwc3_pci_intel_swnode, }, |
|---|
| 338 | 363 | |
|---|
| 339 | 364 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_GLK), |
|---|
| 340 | | - (kernel_ulong_t) &dwc3_pci_intel_properties, }, |
|---|
| 365 | + (kernel_ulong_t) &dwc3_pci_intel_swnode, }, |
|---|
| 341 | 366 | |
|---|
| 342 | 367 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_CNPLP), |
|---|
| 343 | | - (kernel_ulong_t) &dwc3_pci_intel_properties, }, |
|---|
| 368 | + (kernel_ulong_t) &dwc3_pci_intel_swnode, }, |
|---|
| 344 | 369 | |
|---|
| 345 | 370 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_CNPH), |
|---|
| 346 | | - (kernel_ulong_t) &dwc3_pci_intel_properties, }, |
|---|
| 371 | + (kernel_ulong_t) &dwc3_pci_intel_swnode, }, |
|---|
| 347 | 372 | |
|---|
| 348 | 373 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_CNPV), |
|---|
| 349 | | - (kernel_ulong_t) &dwc3_pci_intel_properties, }, |
|---|
| 374 | + (kernel_ulong_t) &dwc3_pci_intel_swnode, }, |
|---|
| 350 | 375 | |
|---|
| 351 | 376 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_ICLLP), |
|---|
| 352 | | - (kernel_ulong_t) &dwc3_pci_intel_properties, }, |
|---|
| 377 | + (kernel_ulong_t) &dwc3_pci_intel_swnode, }, |
|---|
| 378 | + |
|---|
| 379 | + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_EHLLP), |
|---|
| 380 | + (kernel_ulong_t) &dwc3_pci_intel_swnode }, |
|---|
| 381 | + |
|---|
| 382 | + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_TGPLP), |
|---|
| 383 | + (kernel_ulong_t) &dwc3_pci_intel_swnode, }, |
|---|
| 384 | + |
|---|
| 385 | + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_TGPH), |
|---|
| 386 | + (kernel_ulong_t) &dwc3_pci_intel_swnode, }, |
|---|
| 387 | + |
|---|
| 388 | + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_JSP), |
|---|
| 389 | + (kernel_ulong_t) &dwc3_pci_intel_swnode, }, |
|---|
| 390 | + |
|---|
| 391 | + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_ADLP), |
|---|
| 392 | + (kernel_ulong_t) &dwc3_pci_intel_swnode, }, |
|---|
| 393 | + |
|---|
| 394 | + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_ADLS), |
|---|
| 395 | + (kernel_ulong_t) &dwc3_pci_intel_swnode, }, |
|---|
| 396 | + |
|---|
| 397 | + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_TGL), |
|---|
| 398 | + (kernel_ulong_t) &dwc3_pci_intel_swnode, }, |
|---|
| 353 | 399 | |
|---|
| 354 | 400 | { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_NL_USB), |
|---|
| 355 | | - (kernel_ulong_t) &dwc3_pci_amd_properties, }, |
|---|
| 401 | + (kernel_ulong_t) &dwc3_pci_amd_swnode, }, |
|---|
| 356 | 402 | { } /* Terminating Entry */ |
|---|
| 357 | 403 | }; |
|---|
| 358 | 404 | MODULE_DEVICE_TABLE(pci, dwc3_pci_id_table); |
|---|