coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
sd.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <device/pci_ops.h>
4 #include <console/console.h>
5 #include <device/device.h>
6 #include <device/pci.h>
7 #include <device/pci_ids.h>
8 
9 #include <soc/device_nvs.h>
10 #include <soc/iosf.h>
11 #include <soc/pci_devs.h>
12 #include <soc/ramstage.h>
13 #include "chip.h"
14 
15 #define CAP_OVERRIDE_LOW 0xa0
16 #define CAP_OVERRIDE_HIGH 0xa4
17 #define USE_CAP_OVERRIDES (1 << 31)
18 
19 static void sd_init(struct device *dev)
20 {
22 
23  if (config->sdcard_cap_low != 0 || config->sdcard_cap_high != 0) {
24  printk(BIOS_DEBUG, "Overriding SD Card controller caps.\n");
25  pci_write_config32(dev, CAP_OVERRIDE_LOW, config->sdcard_cap_low);
26  pci_write_config32(dev, CAP_OVERRIDE_HIGH, config->sdcard_cap_high |
28  }
29 
30  if (config->scc_acpi_mode)
32 }
33 
34 static const struct device_operations device_ops = {
36  .set_resources = pci_dev_set_resources,
37  .enable_resources = pci_dev_enable_resources,
38  .init = sd_init,
39  .ops_pci = &soc_pci_ops,
40 };
41 
42 static const struct pci_driver southcluster __pci_driver = {
43  .ops = &device_ops,
44  .vendor = PCI_VID_INTEL,
45  .device = SD_DEVID,
46 };
#define SCC_NVS_SD
Definition: device_nvs.h:25
#define SCC_SD_CTL
Definition: iosf.h:284
#define printk(level,...)
Definition: stdlib.h:16
static DEVTREE_CONST void * config_of(const struct device *dev)
Definition: device.h:382
static __always_inline void pci_write_config32(const struct device *dev, u16 reg, u32 val)
Definition: pci_ops.h:76
#define BIOS_DEBUG
BIOS_DEBUG - Verbose output.
Definition: loglevel.h:128
enum board_config config
Definition: memory.c:448
void pci_dev_enable_resources(struct device *dev)
Definition: pci_device.c:721
void pci_dev_read_resources(struct device *dev)
Definition: pci_device.c:534
void pci_dev_set_resources(struct device *dev)
Definition: pci_device.c:691
#define PCI_VID_INTEL
Definition: pci_ids.h:2157
struct pci_operations soc_pci_ops
Definition: chip.c:51
#define SD_DEVID
Definition: pci_devs.h:112
void scc_enable_acpi_mode(struct device *dev, int iosf_reg, int nvs_index)
Definition: scc.c:71
#define CAP_OVERRIDE_LOW
Definition: sd.c:15
static const struct device_operations device_ops
Definition: sd.c:34
static const struct pci_driver southcluster __pci_driver
Definition: sd.c:42
#define CAP_OVERRIDE_HIGH
Definition: sd.c:16
#define USE_CAP_OVERRIDES
Definition: sd.c:17
static void sd_init(struct device *dev)
Definition: sd.c:19
void(* read_resources)(struct device *dev)
Definition: device.h:39
Definition: device.h:107