coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
graphics.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
3 #include <stdint.h>
4 #include <commonlib/helpers.h>
5 #include <device/device.h>
6 #include <device/mmio.h>
7 #include <device/pci_def.h>
8 #include <intelblocks/graphics.h>
10 
11 #include "chip.h"
12 
14  const struct i915_gpu_panel_config *const panel_cfg,
15  uint8_t *const mmio, const unsigned int panel_idx)
16 {
17  const unsigned int offset = panel_idx * 0x100;
18  uint32_t reg32;
19 
20  reg32 = ((DIV_ROUND_UP(panel_cfg->cycle_delay_ms, 100) + 1) & 0x1f) << 4;
21  reg32 |= PANEL_POWER_RESET;
22  write32(mmio + PCH_PP_CONTROL + offset, reg32);
23 
24  reg32 = ((panel_cfg->up_delay_ms * 10) & 0x1fff) << 16;
25  reg32 |= (panel_cfg->backlight_on_delay_ms * 10) & 0x1fff;
26  write32(mmio + PCH_PP_ON_DELAYS + offset, reg32);
27 
28  reg32 = ((panel_cfg->down_delay_ms * 10) & 0x1fff) << 16;
29  reg32 |= (panel_cfg->backlight_off_delay_ms * 10) & 0x1fff;
30  write32(mmio + PCH_PP_OFF_DELAYS + offset, reg32);
31 }
32 
34  const struct i915_gpu_panel_config *const panel_cfg,
35  uint8_t *const mmio, const unsigned int panel_idx)
36 {
37  if (!panel_cfg->backlight_pwm_hz)
38  return;
39 
40  const unsigned int pwm_period = 19200 * 1000 / panel_cfg->backlight_pwm_hz;
41  write32(mmio + BXT_BLC_PWM_FREQ(panel_idx), pwm_period);
42  write32(mmio + BXT_BLC_PWM_DUTY(panel_idx), pwm_period / 2);
43  write32(mmio + BXT_BLC_PWM_CTL(panel_idx),
44  panel_cfg->backlight_polarity ? BXT_BLC_PWM_POLARITY : 0);
45 
46  /* Second backlight control uses display utility pin. */
47  if (panel_idx == 1) {
48  write32(mmio + UTIL_PIN_CTL, 0); /* Make sure it's disabled, don't know
49  what FSP might have done already. */
51  }
52 }
53 
54 void graphics_soc_panel_init(struct device *const dev)
55 {
56  const struct soc_intel_apollolake_config *const conf = dev->chip_info;
57  const struct resource *mmio_res;
58  void *mmio;
59  unsigned int i;
60 
61  /* Some hardware configuration first. */
62 
63  if (!conf)
64  return;
65 
67  if (!mmio_res || !mmio_res->base)
68  return;
69  mmio = (void *)(uintptr_t)mmio_res->base;
70 
71  for (i = 0; i < ARRAY_SIZE(conf->panel_cfg); ++i)
72  graphics_configure_panelpower(&conf->panel_cfg[i], mmio, i);
73 
74  for (i = 0; i < ARRAY_SIZE(conf->panel_cfg); ++i)
75  graphics_configure_backlight(&conf->panel_cfg[i], mmio, i);
76 }
77 
78 const struct i915_gpu_controller_info *
80 {
82  return &chip->gfx;
83 }
static void write32(void *addr, uint32_t val)
Definition: mmio.h:40
#define ARRAY_SIZE(a)
Definition: helpers.h:12
#define DIV_ROUND_UP(x, y)
Definition: helpers.h:60
struct resource * probe_resource(const struct device *dev, unsigned int index)
See if a resource structure already exists for a given index.
Definition: device_util.c:323
static size_t offset
Definition: flashconsole.c:16
static struct tpm_chip chip
Definition: tis.c:17
#define UTIL_PIN_ENABLE
Definition: i915_reg.h:1667
#define BXT_BLC_PWM_CTL(controller)
Definition: i915_reg.h:1686
#define UTIL_PIN_CTL
Definition: i915_reg.h:1666
#define BXT_BLC_PWM_POLARITY
Definition: i915_reg.h:1678
#define PCH_PP_OFF_DELAYS
Definition: i915_reg.h:3774
#define PCH_PP_ON_DELAYS
Definition: i915_reg.h:3762
#define BXT_BLC_PWM_FREQ(controller)
Definition: i915_reg.h:1688
#define PANEL_POWER_RESET
Definition: i915_reg.h:3759
#define PCH_PP_CONTROL
Definition: i915_reg.h:3754
#define BXT_BLC_PWM_DUTY(controller)
Definition: i915_reg.h:1690
#define UTIL_PIN_MODE_PWM
Definition: i915_reg.h:1671
static struct resource * mmio_res
Definition: gma.c:42
#define PCI_BASE_ADDRESS_0
Definition: pci_def.h:63
static void graphics_configure_panelpower(const struct i915_gpu_panel_config *const panel_cfg, uint8_t *const mmio, const unsigned int panel_idx)
Definition: graphics.c:13
static void graphics_configure_backlight(const struct i915_gpu_panel_config *const panel_cfg, uint8_t *const mmio, const unsigned int panel_idx)
Definition: graphics.c:33
const struct i915_gpu_controller_info * intel_igd_get_controller_info(const struct device *device)
Definition: graphics.c:79
void graphics_soc_panel_init(struct device *const dev)
Definition: graphics.c:54
unsigned int uint32_t
Definition: stdint.h:14
unsigned long uintptr_t
Definition: stdint.h:21
unsigned char uint8_t
Definition: stdint.h:8
Definition: device.h:107
DEVTREE_CONST void * chip_info
Definition: device.h:164
unsigned int up_delay_ms
Definition: gma.h:16
unsigned int backlight_off_delay_ms
Definition: gma.h:20
unsigned int backlight_on_delay_ms
Definition: gma.h:19
unsigned int cycle_delay_ms
Definition: gma.h:18
enum i915_gpu_panel_config::@68 backlight_polarity
unsigned int down_delay_ms
Definition: gma.h:17
unsigned int backlight_pwm_hz
Definition: gma.h:21
resource_t base
Definition: resource.h:45
struct i915_gpu_panel_config panel_cfg[2]
Definition: chip.h:42