coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
mmc.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <device/pci.h>
4 #include <device/pci_ids.h>
5 #include <console/console.h>
6 #include <intelblocks/cfg.h>
7 #include <intelblocks/mmc.h>
8 
9 static int mmc_write_dll_reg(void *bar, uint32_t reg, uint32_t val)
10 {
11  int ret = 0;
12  if (val) {
13  write32(bar + reg, val);
14  ret = 1;
15  }
16  return ret;
17 }
18 
19 int set_mmc_dll(void *bar)
20 {
21  const struct soc_intel_common_config *common_config;
22  const struct mmc_dll_params *dll_params;
23  int override = 0;
24 
25  common_config = chip_get_common_soc_structure();
26  dll_params = &common_config->emmc_dll;
27 
29  dll_params->emmc_tx_cmd_cntl);
30 
32  dll_params->emmc_tx_data_cntl1);
33 
35  dll_params->emmc_tx_data_cntl2);
36 
38  dll_params->emmc_rx_cmd_data_cntl1);
39 
41  dll_params->emmc_rx_strobe_cntl);
42 
44  dll_params->emmc_rx_cmd_data_cntl2);
45 
46  if (override == 0) {
47  printk(BIOS_INFO, "Skip Emmc dll value programming\n");
48  return -1;
49  }
50 
51  return 0;
52 }
53 
54 static void mmc_soc_init(struct device *dev)
55 {
56  const struct resource *res;
57 
58  if (!CONFIG(SOC_INTEL_COMMON_MMC_OVERRIDE))
59  return;
60 
62  set_mmc_dll((void *)(uintptr_t)(res->base));
63 }
64 
65 static struct device_operations dev_ops = {
67  .set_resources = pci_dev_set_resources,
68  .enable_resources = pci_dev_enable_resources,
69  .init = mmc_soc_init,
70  .ops_pci = &pci_dev_ops_pci,
71 };
72 
73 static const unsigned short pci_device_ids[] = {
77  0
78 };
79 
80 static const struct pci_driver pch_sd __pci_driver = {
81  .ops = &dev_ops,
82  .vendor = PCI_VID_INTEL,
83  .devices = pci_device_ids,
84 };
static void write32(void *addr, uint32_t val)
Definition: mmio.h:40
#define printk(level,...)
Definition: stdlib.h:16
struct resource * find_resource(const struct device *dev, unsigned int index)
Return an existing resource structure for a given index.
Definition: device_util.c:394
@ CONFIG
Definition: dsi_common.h:201
#define BIOS_INFO
BIOS_INFO - Expected events.
Definition: loglevel.h:113
#define PCI_BASE_ADDRESS_0
Definition: pci_def.h:63
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
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_DID_INTEL_JSP_EMMC
Definition: pci_ids.h:4306
#define PCI_DID_INTEL_CMP_EMMC
Definition: pci_ids.h:4305
#define PCI_DID_INTEL_ADP_EMMC
Definition: pci_ids.h:4307
#define PCI_VID_INTEL
Definition: pci_ids.h:2157
const struct soc_intel_common_config * chip_get_common_soc_structure(void)
Definition: chip.c:5
#define EMMC_TX_CMD_CNTL_OFFSET
Definition: mmc.h:51
#define EMMC_RX_CMD_DATA_CNTL2_OFFSET
Definition: mmc.h:56
#define EMMC_TX_DATA_CNTL1_OFFSET
Definition: mmc.h:52
#define EMMC_RX_STROBE_CNTL_OFFSET
Definition: mmc.h:55
#define EMMC_TX_DATA_CNTL2_OFFSET
Definition: mmc.h:53
#define EMMC_RX_CMD_DATA_CNTL1_OFFSET
Definition: mmc.h:54
static const struct pci_driver pch_sd __pci_driver
Definition: mmc.c:80
static int mmc_write_dll_reg(void *bar, uint32_t reg, uint32_t val)
Definition: mmc.c:9
static void mmc_soc_init(struct device *dev)
Definition: mmc.c:54
static const unsigned short pci_device_ids[]
Definition: mmc.c:73
static struct device_operations dev_ops
Definition: mmc.c:65
int set_mmc_dll(void *bar)
Definition: mmc.c:19
unsigned int uint32_t
Definition: stdint.h:14
unsigned long uintptr_t
Definition: stdint.h:21
void(* read_resources)(struct device *dev)
Definition: device.h:39
Definition: device.h:107
uint32_t emmc_rx_strobe_cntl
Definition: mmc.h:25
uint32_t emmc_tx_cmd_cntl
Definition: mmc.h:26
uint32_t emmc_tx_data_cntl1
Definition: mmc.h:21
uint32_t emmc_rx_cmd_data_cntl1
Definition: mmc.h:23
uint32_t emmc_rx_cmd_data_cntl2
Definition: mmc.h:24
uint32_t emmc_tx_data_cntl2
Definition: mmc.h:22
resource_t base
Definition: resource.h:45
struct mmc_dll_params emmc_dll
Definition: cfg.h:27
u8 val
Definition: sys.c:300