Vladimir Serbinenko | 3129f79 | 2014-10-15 21:51:47 +0200 | [diff] [blame] | 1 | package main |
| 2 | |
Iru Cai | 56360d4 | 2020-04-10 20:56:07 +0800 | [diff] [blame] | 3 | import "fmt" |
| 4 | |
Vladimir Serbinenko | 3129f79 | 2014-10-15 21:51:47 +0200 | [diff] [blame] | 5 | type sandybridgemc struct { |
Vladimir Serbinenko | 3129f79 | 2014-10-15 21:51:47 +0200 | [diff] [blame] | 6 | } |
| 7 | |
| 8 | func (i sandybridgemc) Scan(ctx Context, addr PCIDevData) { |
| 9 | inteltool := ctx.InfoSource.GetInteltool() |
| 10 | |
| 11 | /* FIXME:XX Move this somewhere else. */ |
| 12 | MainboardIncludes = append(MainboardIncludes, "drivers/intel/gma/int15.h") |
Angel Pons | 6779d23 | 2020-01-08 15:05:56 +0100 | [diff] [blame] | 13 | MainboardEnable += (` /* FIXME: fix these values. */ |
Angel Pons | 6541956 | 2019-01-16 01:12:21 +0100 | [diff] [blame] | 14 | install_intel_vga_int15_handler(GMA_INT15_ACTIVE_LFP_INT_LVDS, |
| 15 | GMA_INT15_PANEL_FIT_DEFAULT, |
| 16 | GMA_INT15_BOOT_DISPLAY_DEFAULT, 0); |
Vladimir Serbinenko | 3129f79 | 2014-10-15 21:51:47 +0200 | [diff] [blame] | 17 | `) |
| 18 | |
Vladimir Serbinenko | 3129f79 | 2014-10-15 21:51:47 +0200 | [diff] [blame] | 19 | DevTree = DevTreeNode{ |
| 20 | Chip: "northbridge/intel/sandybridge", |
| 21 | MissingParent: "northbridge", |
Angel Pons | 6779d23 | 2020-01-08 15:05:56 +0100 | [diff] [blame] | 22 | Comment: "FIXME: GPU registers may not always apply.", |
Vladimir Serbinenko | 3129f79 | 2014-10-15 21:51:47 +0200 | [diff] [blame] | 23 | Registers: map[string]string{ |
| 24 | "gpu_dp_b_hotplug": FormatInt32((inteltool.IGD[0xc4030] >> 2) & 7), |
| 25 | "gpu_dp_c_hotplug": FormatInt32((inteltool.IGD[0xc4030] >> 10) & 7), |
| 26 | "gpu_dp_d_hotplug": FormatInt32((inteltool.IGD[0xc4030] >> 18) & 7), |
| 27 | "gpu_panel_port_select": FormatInt32((inteltool.IGD[0xc7208] >> 30) & 3), |
| 28 | "gpu_panel_power_up_delay": FormatInt32((inteltool.IGD[0xc7208] >> 16) & 0x1fff), |
| 29 | "gpu_panel_power_backlight_on_delay": FormatInt32(inteltool.IGD[0xc7208] & 0x1fff), |
| 30 | "gpu_panel_power_down_delay": FormatInt32((inteltool.IGD[0xc720c] >> 16) & 0x1fff), |
| 31 | "gpu_panel_power_backlight_off_delay": FormatInt32(inteltool.IGD[0xc720c] & 0x1fff), |
| 32 | "gpu_panel_power_cycle_delay": FormatInt32(inteltool.IGD[0xc7210] & 0xff), |
| 33 | "gpu_cpu_backlight": FormatHex32(inteltool.IGD[0x48254]), |
| 34 | "gpu_pch_backlight": FormatHex32((inteltool.IGD[0xc8254] >> 16) * 0x10001), |
Iru Cai | 56360d4 | 2020-04-10 20:56:07 +0800 | [diff] [blame] | 35 | "gfx": fmt.Sprintf("GMA_STATIC_DISPLAYS(%d)", (inteltool.IGD[0xc6200] >> 12) & 1), |
Vladimir Serbinenko | 3129f79 | 2014-10-15 21:51:47 +0200 | [diff] [blame] | 36 | }, |
| 37 | Children: []DevTreeNode{ |
| 38 | { |
| 39 | Chip: "cpu_cluster", |
| 40 | Dev: 0, |
| 41 | Children: []DevTreeNode{ |
| 42 | { |
Vladimir Serbinenko | 3129f79 | 2014-10-15 21:51:47 +0200 | [diff] [blame] | 43 | Chip: "cpu/intel/model_206ax", |
| 44 | Comment: "FIXME: check all registers", |
| 45 | Registers: map[string]string{ |
| 46 | /* FIXME:XX hardcoded. */ |
| 47 | "c1_acpower": "1", |
| 48 | "c2_acpower": "3", |
| 49 | "c3_acpower": "5", |
| 50 | "c1_battery": "1", |
| 51 | "c2_battery": "3", |
| 52 | "c3_battery": "5", |
| 53 | }, |
| 54 | Children: []DevTreeNode{ |
| 55 | { |
Arthur Heymans | 7e6946a | 2019-01-21 17:55:02 +0100 | [diff] [blame] | 56 | Chip: "lapic", |
| 57 | Dev: 0, |
| 58 | }, |
| 59 | { |
Vladimir Serbinenko | 3129f79 | 2014-10-15 21:51:47 +0200 | [diff] [blame] | 60 | Chip: "lapic", |
| 61 | Dev: 0xacac, |
| 62 | Disabled: true, |
| 63 | }, |
| 64 | }, |
| 65 | }, |
| 66 | }, |
| 67 | }, |
| 68 | |
| 69 | { |
| 70 | Chip: "domain", |
| 71 | Dev: 0, |
| 72 | PCIController: true, |
| 73 | ChildPCIBus: 0, |
| 74 | PCISlots: []PCISlot{ |
| 75 | PCISlot{PCIAddr: PCIAddr{Dev: 0x0, Func: 0}, writeEmpty: true, additionalComment: "Host bridge"}, |
Angel Pons | 6779d23 | 2020-01-08 15:05:56 +0100 | [diff] [blame] | 76 | PCISlot{PCIAddr: PCIAddr{Dev: 0x1, Func: 0}, writeEmpty: true, additionalComment: "PEG"}, |
| 77 | PCISlot{PCIAddr: PCIAddr{Dev: 0x2, Func: 0}, writeEmpty: true, additionalComment: "iGPU"}, |
Vladimir Serbinenko | 3129f79 | 2014-10-15 21:51:47 +0200 | [diff] [blame] | 78 | }, |
| 79 | }, |
| 80 | }, |
| 81 | } |
| 82 | |
| 83 | PutPCIDev(addr, "Host bridge") |
| 84 | |
Vladimir Serbinenko | 3129f79 | 2014-10-15 21:51:47 +0200 | [diff] [blame] | 85 | /* FIXME:XX some configs are unsupported. */ |
Nico Huber | 772a154 | 2019-05-10 16:48:14 +0200 | [diff] [blame] | 86 | KconfigBool["NORTHBRIDGE_INTEL_SANDYBRIDGE"] = true |
Vladimir Serbinenko | 144eea0 | 2016-02-10 02:36:04 +0100 | [diff] [blame] | 87 | KconfigBool["USE_NATIVE_RAMINIT"] = true |
Vladimir Serbinenko | 3129f79 | 2014-10-15 21:51:47 +0200 | [diff] [blame] | 88 | KconfigBool["INTEL_INT15"] = true |
| 89 | KconfigBool["HAVE_ACPI_TABLES"] = true |
| 90 | KconfigBool["HAVE_ACPI_RESUME"] = true |
| 91 | |
Vladimir Serbinenko | 3129f79 | 2014-10-15 21:51:47 +0200 | [diff] [blame] | 92 | DSDTIncludes = append(DSDTIncludes, DSDTInclude{ |
Angel Pons | 07b6f16 | 2019-01-16 00:18:33 +0100 | [diff] [blame] | 93 | File: "cpu/intel/common/acpi/cpu.asl", |
Vladimir Serbinenko | 3129f79 | 2014-10-15 21:51:47 +0200 | [diff] [blame] | 94 | }) |
| 95 | |
| 96 | DSDTPCI0Includes = append(DSDTPCI0Includes, DSDTInclude{ |
| 97 | File: "northbridge/intel/sandybridge/acpi/sandybridge.asl", |
Nico Huber | 954a55b | 2015-08-27 13:31:46 +0200 | [diff] [blame] | 98 | }, DSDTInclude{ |
| 99 | File: "drivers/intel/gma/acpi/default_brightness_levels.asl", |
Vladimir Serbinenko | 3129f79 | 2014-10-15 21:51:47 +0200 | [diff] [blame] | 100 | }) |
| 101 | } |
| 102 | |
| 103 | func init() { |
Nico Huber | 772a154 | 2019-05-10 16:48:14 +0200 | [diff] [blame] | 104 | RegisterPCI(0x8086, 0x0100, sandybridgemc{}) |
| 105 | RegisterPCI(0x8086, 0x0104, sandybridgemc{}) |
| 106 | RegisterPCI(0x8086, 0x0150, sandybridgemc{}) |
| 107 | RegisterPCI(0x8086, 0x0154, sandybridgemc{}) |
Jonathan A. Kollasch | a1114f6 | 2020-01-10 12:48:20 -0600 | [diff] [blame] | 108 | RegisterPCI(0x8086, 0x0158, sandybridgemc{}) |
Vladimir Serbinenko | 3129f79 | 2014-10-15 21:51:47 +0200 | [diff] [blame] | 109 | for _, id := range []uint16{ |
Nico Huber | 23b93dd | 2017-07-29 01:46:23 +0200 | [diff] [blame] | 110 | 0x0102, 0x0106, 0x010a, |
| 111 | 0x0112, 0x0116, 0x0122, 0x0126, |
| 112 | 0x0152, 0x0156, 0x0162, 0x0166, |
Vladimir Serbinenko | 3129f79 | 2014-10-15 21:51:47 +0200 | [diff] [blame] | 113 | } { |
Angel Pons | 6779d23 | 2020-01-08 15:05:56 +0100 | [diff] [blame] | 114 | RegisterPCI(0x8086, id, GenericVGA{GenericPCI{}}) |
Vladimir Serbinenko | 3129f79 | 2014-10-15 21:51:47 +0200 | [diff] [blame] | 115 | } |
Angel Pons | 8296fdd | 2019-02-10 19:52:51 +0100 | [diff] [blame] | 116 | |
| 117 | /* PCIe bridge */ |
| 118 | for _, id := range []uint16{ |
| 119 | 0x0101, 0x0105, 0x0109, 0x010d, |
| 120 | 0x0151, 0x0155, 0x0159, 0x015d, |
| 121 | } { |
| 122 | RegisterPCI(0x8086, id, GenericPCI{}) |
| 123 | } |
Vladimir Serbinenko | 3129f79 | 2014-10-15 21:51:47 +0200 | [diff] [blame] | 124 | } |