blob: 6f095fa633c6103f6c66b7508d9b663772b2d37c [file] [log] [blame]
Karthikeyan Ramasubramanianfa9e8f92020-11-04 22:22:46 -07001/* SPDX-License-Identifier: GPL-2.0-only */
2
Tim Wawrzynczak56fcfb52020-11-10 13:39:37 -07003#include <device/pci_type.h>
Karthikeyan Ramasubramanianfa9e8f92020-11-04 22:22:46 -07004#include <intelblocks/xhci.h>
Tim Wawrzynczak56fcfb52020-11-10 13:39:37 -07005#include <soc/pci_devs.h>
Karthikeyan Ramasubramanianfa9e8f92020-11-04 22:22:46 -07006
Tim Wawrzynczak56fcfb52020-11-10 13:39:37 -07007#define PCH_XHCI_USB2_PORT_STATUS_REG 0x480
8#define PCH_XHCI_USB3_PORT_STATUS_REG 0x520
9#define PCH_XHCI_USB2_PORT_NUM 10
10#define PCH_XHCI_USB3_PORT_NUM 4
Karthikeyan Ramasubramanianfa9e8f92020-11-04 22:22:46 -070011
Tim Wawrzynczak56fcfb52020-11-10 13:39:37 -070012#define TCSS_XHCI_USB2_PORT_STATUS_REG 0x480
13#define TCSS_XHCI_USB3_PORT_STATUS_REG 0x490
14#define TCSS_XHCI_USB2_PORT_NUM 1
15#define TCSS_XHCI_USB3_PORT_NUM 4
16
17static const struct xhci_usb_info pch_usb_info = {
18 .usb2_port_status_reg = PCH_XHCI_USB2_PORT_STATUS_REG,
19 .num_usb2_ports = PCH_XHCI_USB2_PORT_NUM,
20 .usb3_port_status_reg = PCH_XHCI_USB3_PORT_STATUS_REG,
21 .num_usb3_ports = PCH_XHCI_USB3_PORT_NUM,
Karthikeyan Ramasubramanianfa9e8f92020-11-04 22:22:46 -070022};
23
Tim Wawrzynczak56fcfb52020-11-10 13:39:37 -070024static const struct xhci_usb_info tcss_usb_info = {
25 .usb2_port_status_reg = TCSS_XHCI_USB2_PORT_STATUS_REG,
26 .num_usb2_ports = TCSS_XHCI_USB2_PORT_NUM,
27 .usb3_port_status_reg = TCSS_XHCI_USB3_PORT_STATUS_REG,
28 .num_usb3_ports = TCSS_XHCI_USB3_PORT_NUM,
29};
30
31const struct xhci_usb_info *soc_get_xhci_usb_info(pci_devfn_t xhci_dev)
Karthikeyan Ramasubramanianfa9e8f92020-11-04 22:22:46 -070032{
Tim Wawrzynczak56fcfb52020-11-10 13:39:37 -070033 if (xhci_dev == PCH_DEVFN_XHCI)
34 return &pch_usb_info;
35 else if (xhci_dev == SA_DEVFN_TCSS_XHCI)
36 return &tcss_usb_info;
37
38 return NULL;
Karthikeyan Ramasubramanianfa9e8f92020-11-04 22:22:46 -070039}