summaryrefslogtreecommitdiff
path: root/src/soc/intel/apollolake/sram.c
diff options
context:
space:
mode:
authorLijian Zhao <lijian.zhao@intel.com>2016-09-06 18:15:29 -0700
committerMartin Roth <martinroth@google.com>2016-09-28 21:56:26 +0200
commit9108680c1c17ec539bbba9525b6d9d62e57d296a (patch)
tree8e82238a3ea05c54ea3c877928ef78aa94cc11c4 /src/soc/intel/apollolake/sram.c
parentf9c41974cd20a392125932c3376c4dfc20455331 (diff)
downloadcoreboot-9108680c1c17ec539bbba9525b6d9d62e57d296a.tar.xz
soc/intel/apollolake: Use fixed resource for SRAM and IPC1
Intel telemetry support will require PMC IPC1 and SRAM devices to be operated in ACPI mode. Then using fixed resources on BAR0, BAR1 and BAR2 (PMC only) for those two devices will help the resource assignment in DSDT stage. BUG=chrome-os-partner:57364 BRANCH=None TEST=Boot up into Chrome OS successfully and check with dmesg to see the driver has been loaded successfully without errors. Change-Id: I8f0983a90728b9148a124ae3443ec29cd7b344ce Signed-off-by: Zhao, Lijian <lijian.zhao@intel.com> Reviewed-on: https://review.coreboot.org/16648 Tested-by: build bot (Jenkins) Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Diffstat (limited to 'src/soc/intel/apollolake/sram.c')
-rw-r--r--src/soc/intel/apollolake/sram.c68
1 files changed, 68 insertions, 0 deletions
diff --git a/src/soc/intel/apollolake/sram.c b/src/soc/intel/apollolake/sram.c
new file mode 100644
index 0000000000..44eb0ee79e
--- /dev/null
+++ b/src/soc/intel/apollolake/sram.c
@@ -0,0 +1,68 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2016 Intel Corp.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#include <device/device.h>
+#include <device/pci.h>
+#include <device/pci_ids.h>
+#include <soc/pci_ids.h>
+#include <soc/pci_devs.h>
+#include <soc/iomap.h>
+
+static void read_resources(device_t dev)
+{
+ struct resource *res;
+ pci_dev_read_resources(dev);
+
+ res = new_resource(dev, PCI_BASE_ADDRESS_0);
+ res->base = PMC_SRAM_BASE_0;
+ res->size = PMC_SRAM_SIZE_0;
+ res->flags = IORESOURCE_MEM | IORESOURCE_ASSIGNED | IORESOURCE_FIXED;
+
+ res = new_resource(dev, PCI_BASE_ADDRESS_2);
+ res->base = PMC_SRAM_BASE_1;
+ res->size = PMC_SRAM_SIZE_1;
+ res->flags = IORESOURCE_MEM | IORESOURCE_ASSIGNED | IORESOURCE_FIXED;
+}
+
+static void set_resources(device_t dev)
+{
+ struct resource *res;
+ pci_dev_set_resources(dev);
+
+ res = find_resource(dev, PCI_BASE_ADDRESS_0);
+ pci_write_config32(dev, res->index, res->base);
+ dev->command |= PCI_COMMAND_MEMORY;
+ res->flags |= IORESOURCE_STORED;
+ report_resource_stored(dev, res, " SRAM BAR 0");
+
+ res = find_resource(dev, PCI_BASE_ADDRESS_2);
+ pci_write_config32(dev, res->index, res->base);
+ dev->command |= PCI_COMMAND_MEMORY;
+ res->flags |= IORESOURCE_STORED;
+ report_resource_stored(dev, res, " SRAM BAR 1");
+}
+
+static const struct device_operations device_ops = {
+ .read_resources = read_resources,
+ .set_resources = set_resources,
+ .enable_resources = pci_dev_enable_resources,
+};
+
+static const struct pci_driver pmc __pci_driver = {
+ .ops = &device_ops,
+ .vendor = PCI_VENDOR_ID_INTEL,
+ .device = PCI_DEVICE_ID_APOLLOLAKE_SRAM,
+};