blob: 35e4cf76e641c4861f178dc610312a45ac0cf15a [file] [log] [blame]
Angel Pons6e5aabd2020-03-23 23:44:42 +01001/* SPDX-License-Identifier: GPL-2.0-only */
Stefan Reinauer00636b02012-04-04 00:08:51 +02002
Iru Caid7ee9dd2016-02-24 15:03:58 +08003#ifndef NORTHBRIDGE_INTEL_SANDYBRIDGE_CHIP_H
4#define NORTHBRIDGE_INTEL_SANDYBRIDGE_CHIP_H
5
Vladimir Serbinenkoa71bdc32014-08-30 00:35:39 +02006#include <drivers/intel/gma/i915.h>
Elyes HAOUAS1d6484a2020-07-10 11:18:11 +02007#include <stdbool.h>
8#include <stdint.h>
Vladimir Serbinenkoa71bdc32014-08-30 00:35:39 +02009
Stefan Reinauer00636b02012-04-04 00:08:51 +020010/*
11 * Digital Port Hotplug Enable:
Angel Pons7c49cb82020-03-16 23:17:32 +010012 * 0x04 = Enabled, 2ms short pulse
Stefan Reinauer00636b02012-04-04 00:08:51 +020013 * 0x05 = Enabled, 4.5ms short pulse
Angel Pons7c49cb82020-03-16 23:17:32 +010014 * 0x06 = Enabled, 6ms short pulse
Stefan Reinauer00636b02012-04-04 00:08:51 +020015 * 0x07 = Enabled, 100ms short pulse
16 */
17struct northbridge_intel_sandybridge_config {
18 u8 gpu_dp_b_hotplug; /* Digital Port B Hotplug Config */
19 u8 gpu_dp_c_hotplug; /* Digital Port C Hotplug Config */
20 u8 gpu_dp_d_hotplug; /* Digital Port D Hotplug Config */
21
Angel Ponsdc0c0812020-09-02 19:17:30 +020022 enum {
23 PANEL_PORT_LVDS = 0,
24 PANEL_PORT_DP_A = 1, /* Also known as eDP */
25 PANEL_PORT_DP_C = 2,
26 PANEL_PORT_DP_D = 3,
27 } gpu_panel_port_select;
28
Stefan Reinauer00636b02012-04-04 00:08:51 +020029 u8 gpu_panel_power_cycle_delay; /* T4 time sequence */
30 u16 gpu_panel_power_up_delay; /* T1+T2 time sequence */
31 u16 gpu_panel_power_down_delay; /* T3 time sequence */
32 u16 gpu_panel_power_backlight_on_delay; /* T5 time sequence */
33 u16 gpu_panel_power_backlight_off_delay; /* Tx time sequence */
Duncan Lauriedd585b82012-04-09 12:05:18 -070034
35 u32 gpu_cpu_backlight; /* CPU Backlight PWM value */
36 u32 gpu_pch_backlight; /* PCH Backlight PWM value */
Vladimir Serbinenko1783a3c2014-02-23 00:10:35 +010037
Alexandru Gagniuc8b2c8f12015-02-17 04:31:01 -060038 /*
39 * Maximum memory clock.
40 * For example 666 for DDR3-1333, or 800 for DDR3-1600
41 */
42 u16 max_mem_clock_mhz;
43
Vladimir Serbinenkoa71bdc32014-08-30 00:35:39 +020044 struct i915_gpu_controller_info gfx;
Patrick Rudolph266a1f72016-06-09 18:13:34 +020045
Patrick Rudolph5709e032019-03-25 10:12:14 +010046 /* Data for RAM init */
47
Keith Hui1e9601c2023-07-15 12:08:51 -040048 /* DIMM SPD address. */
Patrick Rudolph5709e032019-03-25 10:12:14 +010049 u8 spd_addresses[4];
50
51 /* PEI data for RAM init and early silicon init */
52 u8 ts_addresses[4];
53
54 bool ec_present;
55 bool ddr3lv_support;
56
Angel Pons7c49cb82020-03-16 23:17:32 +010057 /*
58 * N mode functionality. Leave this setting at 0.
Patrick Rudolph5709e032019-03-25 10:12:14 +010059 * 0 Auto
60 * 1 1N
61 * 2 2N
62 */
63 enum {
64 DDR_NMODE_AUTO = 0,
65 DDR_NMODE_1N,
66 DDR_NMODE_2N,
67 } nmode;
68
Angel Pons7c49cb82020-03-16 23:17:32 +010069 /*
70 * DDR refresh rate config. JEDEC Standard No.21-C Annex K allows for DIMM SPD data to
71 * specify whether double-rate is required for extended operating temperature range.
72 *
73 * 0 Enable double rate based upon temperature thresholds
74 * 1 Normal rate
75 * 2 Always enable double rate
Patrick Rudolph5709e032019-03-25 10:12:14 +010076 */
77 enum {
78 DDR_REFRESH_RATE_TEMP_THRES = 0,
79 DDR_REFRESH_REATE_NORMAL,
80 DDR_REFRESH_RATE_DOUBLE,
81 } ddr_refresh_rate_config;
82
Patrick Rudolph5709e032019-03-25 10:12:14 +010083 struct {
84 /* 0: Disable, 1: Enable, 2: Auto, 3: Smart Auto */
85 u8 mode : 2;
86 /* 4 bit mask, 1: switchable, 0: not switchable */
87 u8 hs_port_switch_mask : 4;
88 /* 0: No xHCI preOS driver, 1: xHCI preOS driver */
89 u8 preboot_support : 1;
90 /* 0: Disable, 1: Enable */
91 u8 xhci_streams : 1;
92 } usb3;
Stefan Reinauer00636b02012-04-04 00:08:51 +020093};
Iru Caid7ee9dd2016-02-24 15:03:58 +080094
95#endif /* NORTHBRIDGE_INTEL_SANDYBRIDGE_CHIP_H */