blob: d8c55e09812d85d77bd48b3e8ad326c154978053 [file] [log] [blame]
Angel Pons182dbde2020-04-02 23:49:05 +02001/* SPDX-License-Identifier: GPL-2.0-only */
2/* This file is part of the coreboot project. */
Stefan Reinauerdebb11f2008-10-29 04:46:52 +00003
4#include <console/console.h>
5#include <device/device.h>
6#include <device/pci.h>
Kyösti Mälkkif1b58b72019-03-01 13:43:02 +02007#include <device/pci_ops.h>
Stefan Reinauerdebb11f2008-10-29 04:46:52 +00008#include <device/pci_ids.h>
9#include "i82801gx.h"
10
11static void usb_init(struct device *dev)
12{
Stefan Reinauerdebb11f2008-10-29 04:46:52 +000013 u8 reg8;
14
15 /* USB Specification says the device must be Bus Master */
Stefan Reinauerc02b4fc2010-03-22 11:42:32 +000016 printk(BIOS_DEBUG, "UHCI: Setting up controller.. ");
Stefan Reinauerdebb11f2008-10-29 04:46:52 +000017
Elyes HAOUAS12349252020-04-27 05:08:26 +020018 pci_or_config16(dev, PCI_COMMAND, PCI_COMMAND_MASTER);
Stefan Reinauerdebb11f2008-10-29 04:46:52 +000019
Stefan Reinauer7a3d0952010-01-17 13:49:07 +000020 // Erratum
21 pci_write_config8(dev, 0xca, 0x00);
22
23 // Yes. Another Erratum
Stefan Reinauerdebb11f2008-10-29 04:46:52 +000024 reg8 = pci_read_config8(dev, 0xca);
25 reg8 |= (1 << 0);
26 pci_write_config8(dev, 0xca, reg8);
27
Stefan Reinauerc02b4fc2010-03-22 11:42:32 +000028 printk(BIOS_DEBUG, "done.\n");
Stefan Reinauerdebb11f2008-10-29 04:46:52 +000029}
30
Stefan Reinauera8e11682009-03-11 14:54:18 +000031static struct pci_operations usb_pci_ops = {
Elyes HAOUAS92646ea2020-04-04 13:43:03 +020032 .set_subsystem = pci_dev_set_subsystem,
Stefan Reinauera8e11682009-03-11 14:54:18 +000033};
34
Stefan Reinauerdebb11f2008-10-29 04:46:52 +000035static struct device_operations usb_ops = {
36 .read_resources = pci_dev_read_resources,
37 .set_resources = pci_dev_set_resources,
38 .enable_resources = pci_dev_enable_resources,
39 .init = usb_init,
Stefan Reinauerdebb11f2008-10-29 04:46:52 +000040 .enable = i82801gx_enable,
Stefan Reinauera8e11682009-03-11 14:54:18 +000041 .ops_pci = &usb_pci_ops,
Stefan Reinauerdebb11f2008-10-29 04:46:52 +000042};
43
44/* 82801GB/GR/GDH/GBM/GHM/GU (ICH7/ICH7R/ICH7DH/ICH7-M/ICH7-M DH/ICH7-U) */
45static const struct pci_driver i82801gb_usb1 __pci_driver = {
46 .ops = &usb_ops,
47 .vendor = PCI_VENDOR_ID_INTEL,
Uwe Hermann5d7a1c82008-10-31 18:41:09 +000048 .device = 0x27c8,
Stefan Reinauerdebb11f2008-10-29 04:46:52 +000049};
50
Uwe Hermannbddc6932008-10-29 13:51:31 +000051/* 82801GB/GR/GDH/GBM/GHM/GU (ICH7/ICH7R/ICH7DH/ICH7-M/ICH7-M DH/ICH7-U) */
Stefan Reinauerdebb11f2008-10-29 04:46:52 +000052static const struct pci_driver i82801gb_usb2 __pci_driver = {
53 .ops = &usb_ops,
54 .vendor = PCI_VENDOR_ID_INTEL,
Uwe Hermann5d7a1c82008-10-31 18:41:09 +000055 .device = 0x27c9,
Stefan Reinauerdebb11f2008-10-29 04:46:52 +000056};
57
Uwe Hermannbddc6932008-10-29 13:51:31 +000058/* 82801GB/GR/GDH/GBM/GHM/GU (ICH7/ICH7R/ICH7DH/ICH7-M/ICH7-M DH/ICH7-U) */
Stefan Reinauerdebb11f2008-10-29 04:46:52 +000059static const struct pci_driver i82801gb_usb3 __pci_driver = {
60 .ops = &usb_ops,
61 .vendor = PCI_VENDOR_ID_INTEL,
Uwe Hermann5d7a1c82008-10-31 18:41:09 +000062 .device = 0x27ca,
Stefan Reinauerdebb11f2008-10-29 04:46:52 +000063};
64
Uwe Hermannbddc6932008-10-29 13:51:31 +000065/* 82801GB/GR/GDH/GBM/GHM/GU (ICH7/ICH7R/ICH7DH/ICH7-M/ICH7-M DH/ICH7-U) */
Stefan Reinauerdebb11f2008-10-29 04:46:52 +000066static const struct pci_driver i82801gb_usb4 __pci_driver = {
67 .ops = &usb_ops,
68 .vendor = PCI_VENDOR_ID_INTEL,
Uwe Hermann5d7a1c82008-10-31 18:41:09 +000069 .device = 0x27cb,
Stefan Reinauerdebb11f2008-10-29 04:46:52 +000070};