blob: 977144f06c147912610aeb5682e7d6f93fcc6ee7 [file] [log] [blame]
Angel Ponsae593872020-04-04 18:50:57 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Marc Jones24484842017-05-04 21:17:45 -06002
3#include <console/console.h>
4#include <device/device.h>
5#include <device/pci.h>
6#include <device/pci_ids.h>
7#include <device/pci_ops.h>
8#include <device/pci_ehci.h>
Duncan Laurie32bdffa2018-05-07 15:37:28 -07009#include <soc/acpi.h>
Marc Jonesfb4c7d22017-11-22 22:16:31 -070010#include <soc/pci_devs.h>
Marc Jonesdfeb1c42017-08-07 19:08:24 -060011#include <soc/southbridge.h>
Marshall Dawson69486ca2019-05-02 12:03:45 -060012#include <amdblocks/acpimmio.h>
Marc Jonesfb4c7d22017-11-22 22:16:31 -070013
14static void set_usb_over_current(struct device *dev)
15{
16 uint16_t map = USB_OC_DISABLE_ALL;
17
18 if (dev->path.pci.devfn == XHCI_DEVFN) {
19 if (mainboard_get_xhci_oc_map(&map) == 0) {
20 xhci_pm_write32(XHCI_PM_INDIRECT_INDEX,
21 XHCI_OVER_CURRENT_CONTROL);
22 xhci_pm_write16(XHCI_PM_INDIRECT_DATA, map);
23 }
24 }
25
26 if (dev->path.pci.devfn == EHCI1_DEVFN) {
27 if (mainboard_get_ehci_oc_map(&map) == 0)
28 pci_write_config16(dev, EHCI_OVER_CURRENT_CONTROL, map);
29 }
30}
31
Aaron Durbin64031672018-04-21 14:45:32 -060032int __weak mainboard_get_xhci_oc_map(uint16_t *map)
Marc Jonesfb4c7d22017-11-22 22:16:31 -070033{
34 printk(BIOS_DEBUG, "WEAK: %s/%s called\n", __FILE__, __func__);
35 return -1;
36}
37
Aaron Durbin64031672018-04-21 14:45:32 -060038int __weak mainboard_get_ehci_oc_map(uint16_t *map)
Marc Jonesfb4c7d22017-11-22 22:16:31 -070039{
40 printk(BIOS_DEBUG, "WEAK: %s/%s called\n", __FILE__, __func__);
41 return -1;
42}
43
Felix Held26651c82022-10-13 16:12:40 +020044struct device_operations stoneyridge_usb_ops = {
Marc Jones24484842017-05-04 21:17:45 -060045 .read_resources = pci_ehci_read_resources,
46 .set_resources = pci_dev_set_resources,
47 .enable_resources = pci_dev_enable_resources,
Marc Jonesfb4c7d22017-11-22 22:16:31 -070048 .init = set_usb_over_current,
Nico Hubera89c82e2017-09-14 15:40:28 +020049 .scan_bus = scan_static_bus,
Duncan Laurie32bdffa2018-05-07 15:37:28 -070050 .acpi_name = soc_acpi_name,
Angel Pons1fc0edd2020-05-31 00:03:28 +020051 .ops_pci = &pci_dev_ops_pci,
Marc Jones24484842017-05-04 21:17:45 -060052};