diff options
author | Mario Scheithauer <mario.scheithauer@siemens.com> | 2019-07-17 09:40:33 +0200 |
---|---|---|
committer | Werner Zeh <werner.zeh@siemens.com> | 2019-07-18 11:46:41 +0000 |
commit | 7815c074b4689d858fde7c8e02153c40de79645e (patch) | |
tree | 3201bee12f3e762a9c19a9a71512e9c41afd8b90 /src/mainboard/siemens/mc_apl1 | |
parent | 23af8bac7242955698115c57323879f48b58604d (diff) | |
download | coreboot-7815c074b4689d858fde7c8e02153c40de79645e.tar.xz |
mb/siemens/mc_apl1: Disable all UHS-I SD-Card speed modes
The limitation for SD-Card was originally only made for mc_apl2
mainboard. Since other mc_apl mainboards also use the SD-Card interface,
the speed mode setting is made in the parent mainboard_final.
In additional, all UHS-I bus speed modes are disabled because of a
limitation for industry use cases. This means that only HS mode is
permitted.
Change-Id: I2f1b51f13a53c2507c52d6a169d6384b8570b3bc
Signed-off-by: Mario Scheithauer <mario.scheithauer@siemens.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/34377
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Werner Zeh <werner.zeh@siemens.com>
Diffstat (limited to 'src/mainboard/siemens/mc_apl1')
-rw-r--r-- | src/mainboard/siemens/mc_apl1/mainboard.c | 19 | ||||
-rw-r--r-- | src/mainboard/siemens/mc_apl1/variants/mc_apl2/mainboard.c | 19 |
2 files changed, 19 insertions, 19 deletions
diff --git a/src/mainboard/siemens/mc_apl1/mainboard.c b/src/mainboard/siemens/mc_apl1/mainboard.c index c931e1008a..22d37bfdc2 100644 --- a/src/mainboard/siemens/mc_apl1/mainboard.c +++ b/src/mainboard/siemens/mc_apl1/mainboard.c @@ -83,6 +83,10 @@ #define SPI_REG_OPMENU_L 0xa8 #define SPI_REG_OPMENU_H 0xac +#define SD_CAP_BYP 0x810 +#define SD_CAP_BYP_EN 0x5A +#define SD_CAP_BYP_REG1 0x814 + /** \brief This function can decide if a given MAC address is valid or not. * Currently, addresses filled with 0xff or 0x00 are not valid. * @param mac Buffer to the MAC address to check @@ -265,6 +269,21 @@ static void mainboard_final(void *chip_info) ((SPI_OPTYPE << 16) | SPI_OPPREFIX)); write32((spi_base + SPI_REG_OPMENU_L), SPI_OPMENU_LOWER); write32((spi_base + SPI_REG_OPMENU_H), SPI_OPMENU_UPPER); + + /* Set SD-Card speed to HS mode only. */ + 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 all UHS-I SD-Card speed modes, keep only HS mode. */ + reg &= ~0x2000f800; + write32(res2mmio(res, SD_CAP_BYP_REG1, 0), reg); + } } /* The following function performs board specific things. */ 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 7890ee0211..2502a921fe 100644 --- a/src/mainboard/siemens/mc_apl1/variants/mc_apl2/mainboard.c +++ b/src/mainboard/siemens/mc_apl1/variants/mc_apl2/mainboard.c @@ -26,10 +26,6 @@ #include <soc/pci_devs.h> #include <types.h> -#define SD_CAP_BYP 0x810 -#define SD_CAP_BYP_EN 0x5A -#define SD_CAP_BYP_REG1 0x814 - void variant_mainboard_final(void) { struct device *dev; @@ -42,21 +38,6 @@ 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) |