coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
usb.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
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>
9 #include <soc/acpi.h>
10 #include <soc/pci_devs.h>
11 #include <soc/southbridge.h>
12 #include <amdblocks/acpimmio.h>
13 
14 static void set_usb_over_current(struct device *dev)
15 {
17 
18  if (dev->path.pci.devfn == XHCI_DEVFN) {
19  if (mainboard_get_xhci_oc_map(&map) == 0) {
23  }
24  }
25 
26  if (dev->path.pci.devfn == EHCI1_DEVFN) {
27  if (mainboard_get_ehci_oc_map(&map) == 0)
29  }
30 }
31 
33 {
34  printk(BIOS_DEBUG, "WEAK: %s/%s called\n", __FILE__, __func__);
35  return -1;
36 }
37 
39 {
40  printk(BIOS_DEBUG, "WEAK: %s/%s called\n", __FILE__, __func__);
41  return -1;
42 }
43 
44 static struct device_operations usb_ops = {
46  .set_resources = pci_dev_set_resources,
47  .enable_resources = pci_dev_enable_resources,
48  .init = set_usb_over_current,
49  .scan_bus = scan_static_bus,
50  .acpi_name = soc_acpi_name,
51  .ops_pci = &pci_dev_ops_pci,
52 };
53 
54 static const unsigned short pci_device_ids[] = {
61  0
62 };
63 
64 static const struct pci_driver usb_0_driver __pci_driver = {
65  .ops = &usb_ops,
66  .vendor = PCI_VID_AMD,
67  .devices = pci_device_ids,
68 };
static void xhci_pm_write32(uint8_t reg, uint32_t value)
Definition: acpimmio.h:311
static void xhci_pm_write16(uint8_t reg, uint16_t value)
Definition: acpimmio.h:306
#define printk(level,...)
Definition: stdlib.h:16
static __always_inline void pci_write_config16(const struct device *dev, u16 reg, u16 val)
Definition: pci_ops.h:70
#define BIOS_DEBUG
BIOS_DEBUG - Verbose output.
Definition: loglevel.h:128
void pci_dev_enable_resources(struct device *dev)
Definition: pci_device.c:721
struct pci_operations pci_dev_ops_pci
Default device operation for PCI devices.
Definition: pci_device.c:911
void pci_dev_set_resources(struct device *dev)
Definition: pci_device.c:691
#define pci_ehci_read_resources
Definition: pci_ehci.h:22
#define PCI_VID_AMD
Definition: pci_ids.h:496
#define PCI_DID_AMD_SB900_USB_18_2
Definition: pci_ids.h:534
#define PCI_DID_AMD_CZ_USB_1
Definition: pci_ids.h:582
#define PCI_DID_AMD_CZ_USB3_0
Definition: pci_ids.h:583
#define PCI_DID_AMD_SB900_USB_18_0
Definition: pci_ids.h:533
#define PCI_DID_AMD_CZ_USB_0
Definition: pci_ids.h:581
#define PCI_DID_AMD_SB900_USB_20_5
Definition: pci_ids.h:537
void scan_static_bus(struct device *bus)
Definition: root_device.c:89
const struct smm_save_state_ops *legacy_ops __weak
Definition: save_state.c:8
static const char * soc_acpi_name(const struct device *dev)
Definition: chip.c:29
#define EHCI1_DEVFN
Definition: pci_devs.h:170
#define XHCI_DEVFN
Definition: pci_devs.h:153
int __weak mainboard_get_xhci_oc_map(uint16_t *map)
Definition: usb.c:32
static struct device_operations usb_ops
Definition: usb.c:44
int __weak mainboard_get_ehci_oc_map(uint16_t *map)
Definition: usb.c:38
static void set_usb_over_current(struct device *dev)
Definition: usb.c:14
static const unsigned short pci_device_ids[]
Definition: usb.c:54
static const struct pci_driver usb_0_driver __pci_driver
Definition: usb.c:64
unsigned short uint16_t
Definition: stdint.h:11
#define USB_OC_DISABLE_ALL
Definition: southbridge.h:121
#define XHCI_PM_INDIRECT_INDEX
Definition: southbridge.h:109
#define XHCI_PM_INDIRECT_DATA
Definition: southbridge.h:110
#define EHCI_OVER_CURRENT_CONTROL
Definition: southbridge.h:127
#define XHCI_OVER_CURRENT_CONTROL
Definition: southbridge.h:111
void(* read_resources)(struct device *dev)
Definition: device.h:39
struct pci_path pci
Definition: path.h:116
Definition: device.h:107
struct device_path path
Definition: device.h:115
unsigned int devfn
Definition: path.h:54