Matthew Garrett has uploaded this change for review.

View Change

SKL: Add ACPI brightness control

Hook up the generic src/drivers/intel/gma ACPI backlight control for
Skylake. Based on a patch by Matt DeVillier <matt.devillier@gmail.com>.

Signed-off-by: Matthew Garrett <mjg59@google.com>
Change-Id: I993770fdcd0a28cee756df2bd6a795498f175952
---
M src/soc/intel/common/block/graphics/graphics.c
M src/soc/intel/common/block/include/intelblocks/graphics.h
M src/soc/intel/skylake/acpi/globalnvs.asl
M src/soc/intel/skylake/acpi/pch.asl
M src/soc/intel/skylake/chip.h
M src/soc/intel/skylake/graphics.c
M src/soc/intel/skylake/include/soc/nvs.h
7 files changed, 40 insertions(+), 1 deletion(-)

git pull ssh://review.coreboot.org:29418/coreboot refs/changes/49/32549/1
diff --git a/src/soc/intel/common/block/graphics/graphics.c b/src/soc/intel/common/block/graphics/graphics.c
index 5d3b4a1..6489e8e 100644
--- a/src/soc/intel/common/block/graphics/graphics.c
+++ b/src/soc/intel/common/block/graphics/graphics.c
@@ -33,6 +33,10 @@
pci_dev_init(dev);
}

+__weak void gma_ssdt(struct device *dev)
+{
+}
+
static uintptr_t graphics_get_bar(unsigned long index)
{
struct device *dev = SA_DEV_IGD;
@@ -104,6 +108,7 @@
.init = graphics_soc_init,
.ops_pci = &pci_dev_ops_pci,
.write_acpi_tables = graphics_soc_write_acpi_opregion,
+ .acpi_fill_ssdt_generator = gma_ssdt,
};

static const unsigned short pci_device_ids[] = {
diff --git a/src/soc/intel/common/block/include/intelblocks/graphics.h b/src/soc/intel/common/block/include/intelblocks/graphics.h
index 6be7661..077f0db 100644
--- a/src/soc/intel/common/block/include/intelblocks/graphics.h
+++ b/src/soc/intel/common/block/include/intelblocks/graphics.h
@@ -51,4 +51,7 @@
void graphics_gtt_rmw(unsigned long reg, uint32_t andmask, uint32_t ormask);
uintptr_t graphics_get_memory_base(void);

+void gma_ssdt(struct device *dev);
+struct i915_gpu_controller_info *intel_igd_get_controller_info(void);
+
#endif /* SOC_INTEL_COMMON_BLOCK_GRAPHICS_H */
diff --git a/src/soc/intel/skylake/acpi/globalnvs.asl b/src/soc/intel/skylake/acpi/globalnvs.asl
index c4544e8..6963f70 100644
--- a/src/soc/intel/skylake/acpi/globalnvs.asl
+++ b/src/soc/intel/skylake/acpi/globalnvs.asl
@@ -70,6 +70,9 @@
EPCS, 8, // 0x43 - SGX Enabled status
EMNA, 64, // 0x44 - 0x4B EPC base address
ELNG, 64, // 0x4C - 0x53 EPC Length
+ BRTL, 32, // 0x54 - 0x57 Brightness Level
+ CSTE, 16, // 0x58 - 0x59 Current display state
+ NSTE, 16, // 0x5a - 0x5b Next display state

/* IGD OpRegion */
Offset (0xb4),
diff --git a/src/soc/intel/skylake/acpi/pch.asl b/src/soc/intel/skylake/acpi/pch.asl
index 0aba2e7..f0095bc 100644
--- a/src/soc/intel/skylake/acpi/pch.asl
+++ b/src/soc/intel/skylake/acpi/pch.asl
@@ -56,6 +56,9 @@
/* USB XHCI 0:14.0 */
#include "xhci.asl"

+/* Graphics */
+#include <drivers/intel/gma/acpi/pch.asl>
+
Method (_OSC, 4)
{
/* Check for proper GUID */
diff --git a/src/soc/intel/skylake/chip.h b/src/soc/intel/skylake/chip.h
index 57d51e7..51bb740 100644
--- a/src/soc/intel/skylake/chip.h
+++ b/src/soc/intel/skylake/chip.h
@@ -22,6 +22,7 @@
#include <arch/acpi_device.h>
#include <device/i2c_simple.h>
#include <drivers/i2c/designware/dw_i2c.h>
+#include <drivers/intel/gma/i915.h>
#include <intelblocks/chip.h>
#include <intelblocks/gspi.h>
#include <intelblocks/lpc_lib.h>
@@ -580,6 +581,8 @@

/* Enable/Disable Sata power optimization */
u8 SataPwrOptEnable;
+
+ struct i915_gpu_controller_info gfx;
};

typedef struct soc_intel_skylake_config config_t;
diff --git a/src/soc/intel/skylake/graphics.c b/src/soc/intel/skylake/graphics.c
index 07ee67a..1be5f9d 100644
--- a/src/soc/intel/skylake/graphics.c
+++ b/src/soc/intel/skylake/graphics.c
@@ -122,3 +122,22 @@
printk(BIOS_DEBUG, "current = %lx\n", current);
return current;
}
+
+struct i915_gpu_controller_info *intel_igd_get_controller_info(void)
+{
+ struct device *dev = dev_find_slot(0, PCI_DEVFN(0x2, 0));
+ if (!dev)
+ return NULL;
+ struct soc_intel_skylake_config *chip = dev->chip_info;
+ return &chip->gfx;
+}
+
+void gma_ssdt(struct device *dev)
+{
+ struct i915_gpu_controller_info *gfx = intel_igd_get_controller_info();
+
+ if (!gfx)
+ return;
+
+ drivers_intel_gma_displays_ssdt_generate(gfx);
+}
diff --git a/src/soc/intel/skylake/include/soc/nvs.h b/src/soc/intel/skylake/include/soc/nvs.h
index 72b1ac9..5a2ca38 100644
--- a/src/soc/intel/skylake/include/soc/nvs.h
+++ b/src/soc/intel/skylake/include/soc/nvs.h
@@ -60,7 +60,10 @@
u8 ecps; /* 0x43 - SGX Enabled status */
u64 emna; /* 0x44 - 0x4B EPC base address */
u64 elng; /* 0x4C - 0x53 EPC Length */
- u8 rsvd[96];
+ u32 brtl; /* 0x54 - 0x57 Brightness Level */
+ u16 cste; /* 0x58 - 0x59 Current display state */
+ u16 nste; /* 0x5a - 0x5b Next display state */
+ u8 rsvd[88];

/* IGD OpRegion */
u32 aslb; /* 0xb4 - IGD OpRegion Base Address */

To view, visit change 32549. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: I993770fdcd0a28cee756df2bd6a795498f175952
Gerrit-Change-Number: 32549
Gerrit-PatchSet: 1
Gerrit-Owner: Matthew Garrett <mjg59@google.com>
Gerrit-MessageType: newchange