summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mainboard/siemens/mc_apl1/variants/mc_apl2/mainboard.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/mainboard/siemens/mc_apl1/variants/mc_apl2/mainboard.c b/src/mainboard/siemens/mc_apl1/variants/mc_apl2/mainboard.c
index 0c2418ad27..f52091bced 100644
--- a/src/mainboard/siemens/mc_apl1/variants/mc_apl2/mainboard.c
+++ b/src/mainboard/siemens/mc_apl1/variants/mc_apl2/mainboard.c
@@ -23,6 +23,11 @@
#include <timer.h>
#include <timestamp.h>
#include <baseboard/variants.h>
+#include <soc/pci_devs.h>
+
+#define SD_CAP_BYP 0x810
+#define SD_CAP_BYP_EN 0x5A
+#define SD_CAP_BYP_REG1 0x814
void variant_mainboard_final(void)
{
@@ -36,6 +41,21 @@ void variant_mainboard_final(void)
cmd |= PCI_COMMAND_MASTER;
pci_write_config16(dev, PCI_COMMAND, cmd);
}
+
+ /* Reduce SD-Card speed to DDR50 because of PCB constraints. */
+ dev = pcidev_path_on_root(PCH_DEVFN_SDCARD);
+ if (dev) {
+ uint32_t reg;
+ struct resource *res = find_resource(dev, PCI_BASE_ADDRESS_0);
+ if (!res)
+ return;
+
+ write32(res2mmio(res, SD_CAP_BYP, 0), SD_CAP_BYP_EN);
+ reg = read32(res2mmio(res, SD_CAP_BYP_REG1, 0));
+ /* Disable HS400 and SDR104, keep SDR50 and DDR50 modes. */
+ reg &= ~0x20005800;
+ write32(res2mmio(res, SD_CAP_BYP_REG1, 0), reg);
+ }
}
static void wait_for_legacy_dev(void *unused)