summaryrefslogtreecommitdiff
path: root/src/soc/intel/quark/storage_test.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/soc/intel/quark/storage_test.c')
-rw-r--r--src/soc/intel/quark/storage_test.c244
1 files changed, 0 insertions, 244 deletions
diff --git a/src/soc/intel/quark/storage_test.c b/src/soc/intel/quark/storage_test.c
deleted file mode 100644
index f15d295a61..0000000000
--- a/src/soc/intel/quark/storage_test.c
+++ /dev/null
@@ -1,244 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-
-#include <device/pci_ops.h>
-#include <assert.h>
-#include <cbmem.h>
-#include <commonlib/sdhci.h>
-#include <commonlib/storage.h>
-#include <console/console.h>
-#include <lib.h>
-#include <soc/iomap.h>
-#include <soc/pci_devs.h>
-#include <soc/storage_test.h>
-#include <timer.h>
-#include <string.h>
-
-#if CONFIG(STORAGE_LOG)
-struct log_entry log[LOG_ENTRIES];
-uint8_t log_index;
-int log_full;
-long log_start_time;
-#endif
-
-static uint8_t drivers_storage[256];
-
-#define STORAGE_DEBUG BIOS_DEBUG
-#define LOG_DEBUG (CONFIG(STORAGE_LOG) ? STORAGE_DEBUG : BIOS_NEVER)
-
-#ifdef __SIMPLE_DEVICE__
-uint32_t storage_test_init(pci_devfn_t dev, uint32_t *previous_bar,
- uint16_t *previous_command)
-#else
-uint32_t storage_test_init(struct device *dev, uint32_t *previous_bar,
- uint16_t *previous_command)
-#endif
-{
- uint32_t bar;
-
- /* Display the vendor/device IDs */
- printk(LOG_DEBUG, "Vendor ID: 0x%04x, Device ID: 0x%04x\n",
- pci_read_config16(dev, PCI_VENDOR_ID),
- pci_read_config16(dev, PCI_DEVICE_ID));
-
- /* Set the temporary base address */
- bar = pci_read_config32(dev, PCI_BASE_ADDRESS_0);
- *previous_bar = bar;
- bar &= ~PCI_BASE_ADDRESS_MEM_ATTR_MASK;
- if (!bar) {
- bar = SD_BASE_ADDRESS;
- pci_write_config32(dev, PCI_BASE_ADDRESS_0, bar);
- }
-
- /* Enable the SD/MMC controller */
- *previous_command = pci_read_config16(dev, PCI_COMMAND);
- pci_write_config16(dev, PCI_COMMAND, *previous_command
- | PCI_COMMAND_MEMORY);
-
- /* Return the controller address */
- return bar;
-}
-
-#ifdef __SIMPLE_DEVICE__
-void storage_test_complete(pci_devfn_t dev, uint32_t previous_bar,
- uint16_t previous_command)
-#else
-void storage_test_complete(struct device *dev, uint32_t previous_bar,
- uint16_t previous_command)
-#endif
-{
- pci_write_config16(dev, PCI_COMMAND, previous_command);
- pci_write_config32(dev, PCI_BASE_ADDRESS_0, previous_bar);
-}
-
-#if !ENV_BOOTBLOCK
-static void display_log(void)
-{
- /* Determine the array bounds */
- if (CONFIG(STORAGE_LOG)) {
- long delta;
- uint8_t end;
- uint8_t index;
- uint8_t start;
-
- end = log_index;
- start = log_full ? log_index : 0;
- for (index = start; (log_full || (index != end)); index++) {
- log_full = 0;
- delta = log[index].time.microseconds - log_start_time;
- printk(BIOS_DEBUG, "%3ld.%03ld mSec, cmd: %2d 0x%08x%s",
- delta / 1000, delta % 1000,
- log[index].cmd.cmdidx,
- log[index].cmd.cmdarg,
- log[index].cmd_issued ? "" : "(not issued)");
- if (log[index].response_entries == 1)
- printk(BIOS_DEBUG, ", rsp: 0x%08x",
- log[index].response[0]);
- else if (log[index].response_entries == 4)
- printk(BIOS_DEBUG,
- ", rsp: 0x%08x.%08x.%08x.%08x",
- log[index].response[3],
- log[index].response[2],
- log[index].response[1],
- log[index].response[0]);
- printk(BIOS_DEBUG, ", ret: %d\n", log[index].ret);
- }
- }
-}
-
-void sdhc_log_command(struct mmc_command *cmd)
-{
- if (CONFIG(STORAGE_LOG)) {
- timer_monotonic_get(&log[log_index].time);
- log[log_index].cmd = *cmd;
- log[log_index].cmd_issued = 0;
- log[log_index].response_entries = 0;
- if ((log_index == 0) && (!log_full))
- log_start_time = log[0].time.microseconds;
- }
-}
-
-void sdhc_log_command_issued(void)
-{
- if (CONFIG(STORAGE_LOG)) {
- log[log_index].cmd_issued = 1;
- }
-}
-
-void sdhc_log_response(uint32_t entries, uint32_t *response)
-{
- unsigned int entry;
-
- if (CONFIG(STORAGE_LOG)) {
- log[log_index].response_entries = entries;
- for (entry = 0; entry < entries; entry++)
- log[log_index].response[entry] = response[entry];
- }
-}
-
-void sdhc_log_ret(int ret)
-{
- if (CONFIG(STORAGE_LOG)) {
- log[log_index].ret = ret;
- if (++log_index == 0)
- log_full = 1;
- }
-}
-
-void storage_test(uint32_t bar, int full_initialization)
-{
- uint64_t blocks_read;
- uint8_t buffer[512];
- int err;
- struct storage_media *media;
- const char *name;
- unsigned int partition;
- unsigned int previous_partition;
- struct sdhci_ctrlr *sdhci_ctrlr;
-
- ASSERT(sizeof(struct sdhci_ctrlr) <= sizeof(drivers_storage));
-
- /* Get the structure addresses */
- media = NULL;
- if (ENV_CREATES_CBMEM)
- media = (struct storage_media *)drivers_storage;
- else
- media = cbmem_find(CBMEM_ID_STORAGE_DATA);
- sdhci_ctrlr = (void *)(((uintptr_t)(media + 1) + 0x7) & ~7);
- media->ctrlr = (struct sd_mmc_ctrlr *)sdhci_ctrlr;
- sdhci_ctrlr->ioaddr = (void *)bar;
-
- /* Initialize the controller */
- if (!full_initialization) {
- /* Perform fast initialization */
- sdhci_update_pointers(sdhci_ctrlr);
- sdhci_display_setup(sdhci_ctrlr);
- storage_display_setup(media);
- } else {
- /* Initialize the log */
- if (CONFIG(STORAGE_LOG)) {
- log_index = 0;
- log_full = 0;
- }
-
- printk(LOG_DEBUG, "Initializing the SD/MMC controller\n");
- err = sdhci_controller_init(sdhci_ctrlr, (void *)bar);
- if (err) {
- display_log();
- printk(BIOS_ERR, "Controller failed to initialize, err = %d\n",
- err);
- return;
- }
-
- /* Initialize the SD/MMC/eMMC card or device */
- printk(LOG_DEBUG, "Initializing the device\n");
- err = storage_setup_media(media, &sdhci_ctrlr->sd_mmc_ctrlr);
- if (err) {
- display_log();
- printk(BIOS_ERR, "Device failed to initialize, err = %d\n",
- err);
- return;
- }
- display_log();
- }
-
- /* Save the current partition */
- previous_partition = storage_get_current_partition(media);
-
- /* Read block 0 from each partition */
- for (partition = 0; partition < ARRAY_SIZE(media->capacity);
- partition++) {
- if (media->capacity[partition] == 0)
- continue;
- name = storage_partition_name(media, partition);
- printk(STORAGE_DEBUG, "%s%sReading block 0\n", name,
- name[0] ? ": " : "");
- err = storage_set_partition(media, partition);
- if (err)
- continue;
- blocks_read = storage_block_read(media, 0, 1, &buffer);
- if (blocks_read)
- hexdump(buffer, sizeof(buffer));
- }
-
- /* Restore the previous partition */
- storage_set_partition(media, previous_partition);
-}
-#endif
-
-static void copy_storage_structures(int is_recovery)
-{
- struct storage_media *media;
- struct sdhci_ctrlr *sdhci_ctrlr;
- size_t size = sizeof(drivers_storage);
-
- /* Locate the data structures in CBMEM */
- media = cbmem_add(CBMEM_ID_STORAGE_DATA, size);
- ASSERT(media != NULL);
- sdhci_ctrlr = (void *)(((uintptr_t)(media + 1) + 0x7) & ~7);
-
- /* Migrate the data into CBMEM */
- memcpy(media, drivers_storage, size);
- media->ctrlr = &sdhci_ctrlr->sd_mmc_ctrlr;
-}
-
-CBMEM_CREATION_HOOK(copy_storage_structures);