blob: 860190a2b6da7e1b079bbfbc8adce005d8385cfb [file] [log] [blame]
Angel Ponsb5a2a522020-04-05 13:21:48 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Martin Rothecb44912018-05-24 16:55:10 -06002
3#include <ec/google/chromeec/ec.h>
4#include <baseboard/variants.h>
Peichao Wang4510a8f2019-09-03 07:52:18 +08005#include <boardid.h>
Martin Roth4ae44fc2018-09-17 13:30:51 -06006#include <cbfs.h>
Marc Jones290c4452018-07-14 17:37:30 -06007#include <gpio.h>
Martin Roth4ae44fc2018-09-17 13:30:51 -06008#include <smbios.h>
Marc Jones290c4452018-07-14 17:37:30 -06009#include <variant/gpio.h>
Kyösti Mälkki13f66502019-03-03 08:01:05 +020010#include <device/mmio.h>
Kyösti Mälkkif1b58b72019-03-01 13:43:02 +020011#include <device/pci_ops.h>
Kevin Chiu328ff7d2018-08-27 11:44:46 +080012#include <drivers/generic/bayhub/bh720.h>
Martin Rothecb44912018-05-24 16:55:10 -060013
Peichao Wang4510a8f2019-09-03 07:52:18 +080014uint32_t sku_id(void)
Martin Rothecb44912018-05-24 16:55:10 -060015{
16 static int sku = -1;
17
18 if (sku == -1)
19 sku = google_chromeec_get_sku_id();
20
21 return sku;
22}
Marc Jones290c4452018-07-14 17:37:30 -060023
Peichao Wang4510a8f2019-09-03 07:52:18 +080024uint8_t variant_board_sku(void)
25{
26 return sku_id();
27}
28
Marc Jones290c4452018-07-14 17:37:30 -060029void variant_mainboard_suspend_resume(void)
30{
31 /* Enable backlight - GPIO 133 active low */
32 gpio_set(GPIO_133, 0);
33}
Kevin Chiu328ff7d2018-08-27 11:44:46 +080034
35void board_bh720(struct device *dev)
36{
37 u32 sdbar;
38 u32 bh720_pcr_data;
39
40 sdbar = pci_read_config32(dev, PCI_BASE_ADDRESS_1);
41
42 /* Enable Memory Access Function */
43 write32((void *)(sdbar + BH720_MEM_ACCESS_EN), 0x40000000);
44 write32((void *)(sdbar + BH720_MEM_RW_DATA), 0x80000000);
45 write32((void *)(sdbar + BH720_MEM_RW_ADR), 0x800000D0);
46
47 /* Set EMMC VCCQ 1.8V PCR 0x308[4] */
48 write32((void *)(sdbar + BH720_MEM_RW_ADR),
49 BH720_MEM_RW_READ | BH720_PCR_EMMC_SETTING);
50 bh720_pcr_data = read32((void *)(sdbar + BH720_MEM_RW_DATA));
51 write32((void *)(sdbar + BH720_MEM_RW_DATA),
52 bh720_pcr_data | BH720_PCR_EMMC_SETTING_1_8V);
53 write32((void *)(sdbar + BH720_MEM_RW_ADR),
54 BH720_MEM_RW_WRITE | BH720_PCR_EMMC_SETTING);
55
Raul E Rangel1264d642019-06-12 16:38:15 -060056 /* Set Base clock to 200MHz(PCR 0x304[31:16] = 0x2510) */
57 write32((void *)(sdbar + BH720_MEM_RW_ADR),
58 BH720_MEM_RW_READ | BH720_PCR_DrvStrength_PLL);
59 bh720_pcr_data = read32((void *)(sdbar + BH720_MEM_RW_DATA));
60 bh720_pcr_data &= 0x0000FFFF;
61 bh720_pcr_data |= 0x2510 << 16;
62 write32((void *)(sdbar + BH720_MEM_RW_DATA), bh720_pcr_data);
63 write32((void *)(sdbar + BH720_MEM_RW_ADR),
64 BH720_MEM_RW_WRITE | BH720_PCR_DrvStrength_PLL);
65
66 /* Use PLL Base clock PCR 0x3E4[22] = 1 */
Kevin Chiu328ff7d2018-08-27 11:44:46 +080067 write32((void *)(sdbar + BH720_MEM_RW_ADR),
68 BH720_MEM_RW_READ | BH720_PCR_CSR);
69 bh720_pcr_data = read32((void *)(sdbar + BH720_MEM_RW_DATA));
70 write32((void *)(sdbar + BH720_MEM_RW_DATA),
Raul E Rangel1264d642019-06-12 16:38:15 -060071 bh720_pcr_data | BH720_PCR_CSR_EMMC_MODE_SEL);
Kevin Chiu328ff7d2018-08-27 11:44:46 +080072 write32((void *)(sdbar + BH720_MEM_RW_ADR),
73 BH720_MEM_RW_WRITE | BH720_PCR_CSR);
74
75 /* Disable Memory Access */
76 write32((void *)(sdbar + BH720_MEM_RW_DATA), 0x80000001);
77 write32((void *)(sdbar + BH720_MEM_RW_ADR), 0x800000D0);
78 write32((void *)(sdbar + BH720_MEM_ACCESS_EN), 0x80000000);
79}
Martin Roth4ae44fc2018-09-17 13:30:51 -060080
Martin Roth4ae44fc2018-09-17 13:30:51 -060081const char *smbios_mainboard_manufacturer(void)
82{
Kevin Chiu0fa007b2018-10-03 10:12:44 +080083 static char oem_bin_data[11];
Martin Roth4ae44fc2018-09-17 13:30:51 -060084 static const char *manuf;
85
Julius Wernercd49cce2019-03-05 16:53:33 -080086 if (!CONFIG(USE_OEM_BIN))
Martin Roth4ae44fc2018-09-17 13:30:51 -060087 return CONFIG_MAINBOARD_SMBIOS_MANUFACTURER;
88
89 if (manuf)
90 return manuf;
91
Julius Werner834b3ec2020-03-04 16:52:08 -080092 if (cbfs_load("oem.bin", oem_bin_data, sizeof(oem_bin_data) - 1))
Martin Roth1f42a382018-09-24 15:39:12 -060093 manuf = &oem_bin_data[0];
94 else
Martin Roth4ae44fc2018-09-17 13:30:51 -060095 manuf = CONFIG_MAINBOARD_SMBIOS_MANUFACTURER;
96
97 return manuf;
98}