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>
This commit is contained in:
Mario Scheithauer 2019-07-17 09:40:33 +02:00 committed by Werner Zeh
parent 23af8bac72
commit 7815c074b4
2 changed files with 19 additions and 19 deletions

View File

@ -83,6 +83,10 @@
#define SPI_REG_OPMENU_L 0xa8 #define SPI_REG_OPMENU_L 0xa8
#define SPI_REG_OPMENU_H 0xac #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. /** \brief This function can decide if a given MAC address is valid or not.
* Currently, addresses filled with 0xff or 0x00 are not valid. * Currently, addresses filled with 0xff or 0x00 are not valid.
* @param mac Buffer to the MAC address to check * @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)); ((SPI_OPTYPE << 16) | SPI_OPPREFIX));
write32((spi_base + SPI_REG_OPMENU_L), SPI_OPMENU_LOWER); write32((spi_base + SPI_REG_OPMENU_L), SPI_OPMENU_LOWER);
write32((spi_base + SPI_REG_OPMENU_H), SPI_OPMENU_UPPER); 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. */ /* The following function performs board specific things. */

View File

@ -26,10 +26,6 @@
#include <soc/pci_devs.h> #include <soc/pci_devs.h>
#include <types.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) void variant_mainboard_final(void)
{ {
struct device *dev; struct device *dev;
@ -42,21 +38,6 @@ void variant_mainboard_final(void)
cmd |= PCI_COMMAND_MASTER; cmd |= PCI_COMMAND_MASTER;
pci_write_config16(dev, PCI_COMMAND, cmd); 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) static void wait_for_legacy_dev(void *unused)