diff options
author | Duncan Laurie <dlaurie@chromium.org> | 2013-12-10 14:37:42 -0800 |
---|---|---|
committer | Kyösti Mälkki <kyosti.malkki@gmail.com> | 2014-05-10 06:30:36 +0200 |
commit | 430bf0d8a96bf9bb3c343c5cf63c6ae8482c532c (patch) | |
tree | 38c782c8f13db25880d86cd1251a2ff0d2e93724 /src/soc/intel/baytrail/sd.c | |
parent | 0e6be39f8b9411c356f1e10550ba0424c7caddd7 (diff) | |
download | coreboot-430bf0d8a96bf9bb3c343c5cf63c6ae8482c532c.tar.xz |
baytrail: Add support for LPSS and SCC devices in ACPI mode
This adds the option to put LPSS and SCC devices into ACPI mode
by saving their BAR0 and BAR1 base addresses in a new device
NVS structure that is placed at offset 0x1000 within the global
NVS table.
The Chrome NVS strcture is padded out to 0xf00 bytes so there
is a clean offset to work with as it will need to be used by
depthcharge to know what addresses devices live at.
A few ACPI Mode IRQs are fixed up, DMA1 and DMA2 are swapped and
the EMMC 4.5 IRQ is changed to 44.
New ACPI code is provided to instantiate the LPSS and SCC devices
with the magic HID values from Intel so the kernel drivers can
locate and use them.
The default is still for devices to be in PCI mode so this does
not have any real effect without it being enabled in the mainboard
devicetree.
Note: this needs the updated IASL compiler which is in the CQ now
because it uses the FixedDMA() ACPI operator.
BUG=chrome-os-partner:23505,chrome-os-partner:24380
CQ-DEPEND=CL:179459,CL:179364
BRANCH=none
TEST=manual tests on rambi device:
1) build and boot with devices still in PCI mode and ensure that
nothing is changed
2) enable lpss_acpi_mode and see I2C devices detected by the kernel
in ACPI mode. Note that by itself this breaks trackpad probing so
that will need to be implemented before it is enabled.
3) enable scc_acpi_mode and see EMMC and SDCard devices detected by
the kernel in ACPI mode. Note that this breaks depthcharge use of
the EMMC because it is not longer discoverable as a PCI device.
Change-Id: I2a007f3c4e0b06ace5172a15c696a8eaad41ed73
Signed-off-by: Duncan Laurie <dlaurie@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/179481
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Signed-off-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-on: http://review.coreboot.org/5004
Tested-by: build bot (Jenkins)
Reviewed-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
Diffstat (limited to 'src/soc/intel/baytrail/sd.c')
-rw-r--r-- | src/soc/intel/baytrail/sd.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/soc/intel/baytrail/sd.c b/src/soc/intel/baytrail/sd.c index 82833c31c4..97c8628bc9 100644 --- a/src/soc/intel/baytrail/sd.c +++ b/src/soc/intel/baytrail/sd.c @@ -24,6 +24,8 @@ #include <device/pci_ids.h> #include <reg_script.h> +#include <baytrail/iosf.h> +#include <baytrail/nvs.h> #include <baytrail/pci_devs.h> #include <baytrail/ramstage.h> #include "chip.h" @@ -46,6 +48,9 @@ static void sd_init(device_t dev) pci_write_config32(dev, CAP_OVERRIDE_HIGH, config->sdcard_cap_high | USE_CAP_OVERRIDES); } + + if (config->scc_acpi_mode) + scc_enable_acpi_mode(dev, SCC_SD_CTL, SCC_NVS_SD); } static const struct device_operations device_ops = { |