coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
cardbus.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
3 #include <device/device.h>
4 #include <device/pci.h>
5 #include <device/pci_ops.h>
6 #include <console/console.h>
7 #include <device/cardbus.h>
8 #include "pci7420.h"
9 #include "chip.h"
10 
11 static void pci7420_cardbus_init(struct device *dev)
12 {
13  u8 reg8;
14  u16 reg16;
15  u32 reg32;
16 
18  int smartcard_enabled = 0;
19 
20  printk(BIOS_DEBUG, "TI PCI7420/7620 init\n");
21 
22  if (!config) {
23  printk(BIOS_DEBUG, "PCI7420: No configuration found.\n");
24  } else {
25  smartcard_enabled = config->smartcard_enabled;
26  }
27 
28  reg32 = pci_read_config32(dev, SYSCTL);
29  reg32 |= RIMUX;
30  pci_write_config32(dev, SYSCTL, reg32);
31 
32  /* Enable SPKROUT */
33  reg8 = pci_read_config8(dev, CARDCTL);
34  reg8 |= SPKROUTEN;
35  pci_write_config8(dev, CARDCTL, reg8);
36 
37  /* Power switch select and FM disable */
38  reg16 = pci_read_config16(dev, GENCTL);
39  reg16 |= P12V_SW_SEL; // 12V capable power switch
40  if (smartcard_enabled == 0)
41  reg16 |= DISABLE_FM;
42  pci_write_config16(dev, GENCTL, reg16);
43 
44  /* Multifunction routing status */
45  pci_write_config32(dev, MFUNC, 0x018a1b22);
46 }
47 
48 static void pci7420_cardbus_read_resources(struct device *dev)
49 {
51 }
52 
53 static void pci7420_cardbus_set_resources(struct device *dev)
54 {
55  printk(BIOS_DEBUG, "%s In set resources\n",dev_path(dev));
56 
58 
59  printk(BIOS_DEBUG, "%s done set resources\n",dev_path(dev));
60 }
61 
62 static struct device_operations ti_pci7420_ops = {
64  .set_resources = pci7420_cardbus_set_resources,
65  .enable_resources = cardbus_enable_resources,
66  .init = pci7420_cardbus_init,
67  .scan_bus = pci_scan_bridge,
68 };
69 
70 static const struct pci_driver ti_pci7420_driver __pci_driver = {
71  .ops = &ti_pci7420_ops,
72  .vendor = 0x104c,
73  .device = 0xac8e,
74 };
75 
76 static const struct pci_driver ti_pci7620_driver __pci_driver = {
77  .ops = &ti_pci7420_ops,
78  .vendor = 0x104c,
79  .device = 0xac8d,
80 };
81 
83  CHIP_NAME("Texas Instruments PCI7420/7620 Cardbus Controller")
84 };
static void pci7420_cardbus_read_resources(struct device *dev)
Definition: cardbus.c:48
static struct device_operations ti_pci7420_ops
Definition: cardbus.c:62
struct chip_operations southbridge_ti_pci7420_ops
Definition: cardbus.c:82
static void pci7420_cardbus_init(struct device *dev)
Definition: cardbus.c:11
static const struct pci_driver ti_pci7420_driver __pci_driver
Definition: cardbus.c:70
static void pci7420_cardbus_set_resources(struct device *dev)
Definition: cardbus.c:53
void cardbus_enable_resources(struct device *dev)
void cardbus_read_resources(struct device *dev)
#define printk(level,...)
Definition: stdlib.h:16
const char * dev_path(const struct device *dev)
Definition: device_util.c:149
#define CHIP_NAME(X)
Definition: device.h:32
static __always_inline void pci_write_config32(const struct device *dev, u16 reg, u32 val)
Definition: pci_ops.h:76
static __always_inline u16 pci_read_config16(const struct device *dev, u16 reg)
Definition: pci_ops.h:52
static __always_inline u32 pci_read_config32(const struct device *dev, u16 reg)
Definition: pci_ops.h:58
static __always_inline u8 pci_read_config8(const struct device *dev, u16 reg)
Definition: pci_ops.h:46
static __always_inline void pci_write_config16(const struct device *dev, u16 reg, u16 val)
Definition: pci_ops.h:70
static __always_inline void pci_write_config8(const struct device *dev, u16 reg, u8 val)
Definition: pci_ops.h:64
#define BIOS_DEBUG
BIOS_DEBUG - Verbose output.
Definition: loglevel.h:128
enum board_config config
Definition: memory.c:448
#define CARDCTL
Definition: pci7420.h:19
#define MFUNC
Definition: pci7420.h:17
#define P12V_SW_SEL
Definition: pci7420.h:15
#define RIMUX
Definition: pci7420.h:5
#define DISABLE_FM
Definition: pci7420.h:14
#define SYSCTL
Definition: pci7420.h:4
#define SPKROUTEN
Definition: pci7420.h:20
#define GENCTL
Definition: pci7420.h:7
void pci_scan_bridge(struct device *dev)
Scan a PCI bridge and the buses behind the bridge.
Definition: pci_device.c:1598
void pci_dev_set_resources(struct device *dev)
Definition: pci_device.c:691
uint32_t u32
Definition: stdint.h:51
uint16_t u16
Definition: stdint.h:48
uint8_t u8
Definition: stdint.h:45
void(* read_resources)(struct device *dev)
Definition: device.h:39
Definition: device.h:107
DEVTREE_CONST void * chip_info
Definition: device.h:164