mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-11 15:37:23 +00:00
Merge branch 'master' of git://git.denx.de/u-boot-mmc
This commit is contained in:
commit
d8a97f934c
4 changed files with 36 additions and 36 deletions
|
@ -92,7 +92,7 @@ static void print_mmcinfo(struct mmc *mmc)
|
||||||
|
|
||||||
printf("Bus Width: %d-bit\n", mmc->bus_width);
|
printf("Bus Width: %d-bit\n", mmc->bus_width);
|
||||||
}
|
}
|
||||||
static struct mmc *init_mmc_device(int dev)
|
static struct mmc *init_mmc_device(int dev, bool force_init)
|
||||||
{
|
{
|
||||||
struct mmc *mmc;
|
struct mmc *mmc;
|
||||||
mmc = find_mmc_device(dev);
|
mmc = find_mmc_device(dev);
|
||||||
|
@ -100,6 +100,8 @@ static struct mmc *init_mmc_device(int dev)
|
||||||
printf("no mmc device at slot %x\n", dev);
|
printf("no mmc device at slot %x\n", dev);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
if (force_init)
|
||||||
|
mmc->has_init = 0;
|
||||||
if (mmc_init(mmc))
|
if (mmc_init(mmc))
|
||||||
return NULL;
|
return NULL;
|
||||||
return mmc;
|
return mmc;
|
||||||
|
@ -117,7 +119,7 @@ static int do_mmcinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mmc = init_mmc_device(curr_device);
|
mmc = init_mmc_device(curr_device, false);
|
||||||
if (!mmc)
|
if (!mmc)
|
||||||
return CMD_RET_FAILURE;
|
return CMD_RET_FAILURE;
|
||||||
|
|
||||||
|
@ -247,7 +249,7 @@ static int do_mmcrpmb(cmd_tbl_t *cmdtp, int flag,
|
||||||
if (flag == CMD_FLAG_REPEAT && !cp->repeatable)
|
if (flag == CMD_FLAG_REPEAT && !cp->repeatable)
|
||||||
return CMD_RET_SUCCESS;
|
return CMD_RET_SUCCESS;
|
||||||
|
|
||||||
mmc = init_mmc_device(curr_device);
|
mmc = init_mmc_device(curr_device, false);
|
||||||
if (!mmc)
|
if (!mmc)
|
||||||
return CMD_RET_FAILURE;
|
return CMD_RET_FAILURE;
|
||||||
|
|
||||||
|
@ -292,7 +294,7 @@ static int do_mmc_read(cmd_tbl_t *cmdtp, int flag,
|
||||||
blk = simple_strtoul(argv[2], NULL, 16);
|
blk = simple_strtoul(argv[2], NULL, 16);
|
||||||
cnt = simple_strtoul(argv[3], NULL, 16);
|
cnt = simple_strtoul(argv[3], NULL, 16);
|
||||||
|
|
||||||
mmc = init_mmc_device(curr_device);
|
mmc = init_mmc_device(curr_device, false);
|
||||||
if (!mmc)
|
if (!mmc)
|
||||||
return CMD_RET_FAILURE;
|
return CMD_RET_FAILURE;
|
||||||
|
|
||||||
|
@ -320,7 +322,7 @@ static int do_mmc_write(cmd_tbl_t *cmdtp, int flag,
|
||||||
blk = simple_strtoul(argv[2], NULL, 16);
|
blk = simple_strtoul(argv[2], NULL, 16);
|
||||||
cnt = simple_strtoul(argv[3], NULL, 16);
|
cnt = simple_strtoul(argv[3], NULL, 16);
|
||||||
|
|
||||||
mmc = init_mmc_device(curr_device);
|
mmc = init_mmc_device(curr_device, false);
|
||||||
if (!mmc)
|
if (!mmc)
|
||||||
return CMD_RET_FAILURE;
|
return CMD_RET_FAILURE;
|
||||||
|
|
||||||
|
@ -348,7 +350,7 @@ static int do_mmc_erase(cmd_tbl_t *cmdtp, int flag,
|
||||||
blk = simple_strtoul(argv[1], NULL, 16);
|
blk = simple_strtoul(argv[1], NULL, 16);
|
||||||
cnt = simple_strtoul(argv[2], NULL, 16);
|
cnt = simple_strtoul(argv[2], NULL, 16);
|
||||||
|
|
||||||
mmc = init_mmc_device(curr_device);
|
mmc = init_mmc_device(curr_device, false);
|
||||||
if (!mmc)
|
if (!mmc)
|
||||||
return CMD_RET_FAILURE;
|
return CMD_RET_FAILURE;
|
||||||
|
|
||||||
|
@ -369,16 +371,10 @@ static int do_mmc_rescan(cmd_tbl_t *cmdtp, int flag,
|
||||||
{
|
{
|
||||||
struct mmc *mmc;
|
struct mmc *mmc;
|
||||||
|
|
||||||
mmc = find_mmc_device(curr_device);
|
mmc = init_mmc_device(curr_device, true);
|
||||||
if (!mmc) {
|
if (!mmc)
|
||||||
printf("no mmc device at slot %x\n", curr_device);
|
|
||||||
return CMD_RET_FAILURE;
|
return CMD_RET_FAILURE;
|
||||||
}
|
|
||||||
|
|
||||||
mmc->has_init = 0;
|
|
||||||
|
|
||||||
if (mmc_init(mmc))
|
|
||||||
return CMD_RET_FAILURE;
|
|
||||||
return CMD_RET_SUCCESS;
|
return CMD_RET_SUCCESS;
|
||||||
}
|
}
|
||||||
static int do_mmc_part(cmd_tbl_t *cmdtp, int flag,
|
static int do_mmc_part(cmd_tbl_t *cmdtp, int flag,
|
||||||
|
@ -387,7 +383,7 @@ static int do_mmc_part(cmd_tbl_t *cmdtp, int flag,
|
||||||
block_dev_desc_t *mmc_dev;
|
block_dev_desc_t *mmc_dev;
|
||||||
struct mmc *mmc;
|
struct mmc *mmc;
|
||||||
|
|
||||||
mmc = init_mmc_device(curr_device);
|
mmc = init_mmc_device(curr_device, false);
|
||||||
if (!mmc)
|
if (!mmc)
|
||||||
return CMD_RET_FAILURE;
|
return CMD_RET_FAILURE;
|
||||||
|
|
||||||
|
@ -403,7 +399,7 @@ static int do_mmc_part(cmd_tbl_t *cmdtp, int flag,
|
||||||
static int do_mmc_dev(cmd_tbl_t *cmdtp, int flag,
|
static int do_mmc_dev(cmd_tbl_t *cmdtp, int flag,
|
||||||
int argc, char * const argv[])
|
int argc, char * const argv[])
|
||||||
{
|
{
|
||||||
int dev, part = -1, ret;
|
int dev, part = 0, ret;
|
||||||
struct mmc *mmc;
|
struct mmc *mmc;
|
||||||
|
|
||||||
if (argc == 1) {
|
if (argc == 1) {
|
||||||
|
@ -422,17 +418,16 @@ static int do_mmc_dev(cmd_tbl_t *cmdtp, int flag,
|
||||||
return CMD_RET_USAGE;
|
return CMD_RET_USAGE;
|
||||||
}
|
}
|
||||||
|
|
||||||
mmc = init_mmc_device(dev);
|
mmc = init_mmc_device(dev, true);
|
||||||
if (!mmc)
|
if (!mmc)
|
||||||
return CMD_RET_FAILURE;
|
return CMD_RET_FAILURE;
|
||||||
|
|
||||||
if (part != -1) {
|
|
||||||
ret = mmc_select_hwpart(dev, part);
|
ret = mmc_select_hwpart(dev, part);
|
||||||
printf("switch to partitions #%d, %s\n",
|
printf("switch to partitions #%d, %s\n",
|
||||||
part, (!ret) ? "OK" : "ERROR");
|
part, (!ret) ? "OK" : "ERROR");
|
||||||
if (ret)
|
if (ret)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
|
||||||
curr_device = dev;
|
curr_device = dev;
|
||||||
if (mmc->part_config == MMCPART_NOAVAILABLE)
|
if (mmc->part_config == MMCPART_NOAVAILABLE)
|
||||||
printf("mmc%d is current device\n", curr_device);
|
printf("mmc%d is current device\n", curr_device);
|
||||||
|
@ -463,7 +458,7 @@ static int do_mmc_bootbus(cmd_tbl_t *cmdtp, int flag,
|
||||||
reset = simple_strtoul(argv[3], NULL, 10);
|
reset = simple_strtoul(argv[3], NULL, 10);
|
||||||
mode = simple_strtoul(argv[4], NULL, 10);
|
mode = simple_strtoul(argv[4], NULL, 10);
|
||||||
|
|
||||||
mmc = init_mmc_device(dev);
|
mmc = init_mmc_device(dev, false);
|
||||||
if (!mmc)
|
if (!mmc)
|
||||||
return CMD_RET_FAILURE;
|
return CMD_RET_FAILURE;
|
||||||
|
|
||||||
|
@ -488,7 +483,7 @@ static int do_mmc_boot_resize(cmd_tbl_t *cmdtp, int flag,
|
||||||
bootsize = simple_strtoul(argv[2], NULL, 10);
|
bootsize = simple_strtoul(argv[2], NULL, 10);
|
||||||
rpmbsize = simple_strtoul(argv[3], NULL, 10);
|
rpmbsize = simple_strtoul(argv[3], NULL, 10);
|
||||||
|
|
||||||
mmc = init_mmc_device(dev);
|
mmc = init_mmc_device(dev, false);
|
||||||
if (!mmc)
|
if (!mmc)
|
||||||
return CMD_RET_FAILURE;
|
return CMD_RET_FAILURE;
|
||||||
|
|
||||||
|
@ -521,7 +516,7 @@ static int do_mmc_partconf(cmd_tbl_t *cmdtp, int flag,
|
||||||
part_num = simple_strtoul(argv[3], NULL, 10);
|
part_num = simple_strtoul(argv[3], NULL, 10);
|
||||||
access = simple_strtoul(argv[4], NULL, 10);
|
access = simple_strtoul(argv[4], NULL, 10);
|
||||||
|
|
||||||
mmc = init_mmc_device(dev);
|
mmc = init_mmc_device(dev, false);
|
||||||
if (!mmc)
|
if (!mmc)
|
||||||
return CMD_RET_FAILURE;
|
return CMD_RET_FAILURE;
|
||||||
|
|
||||||
|
@ -556,7 +551,7 @@ static int do_mmc_rst_func(cmd_tbl_t *cmdtp, int flag,
|
||||||
return CMD_RET_USAGE;
|
return CMD_RET_USAGE;
|
||||||
}
|
}
|
||||||
|
|
||||||
mmc = init_mmc_device(dev);
|
mmc = init_mmc_device(dev, false);
|
||||||
if (!mmc)
|
if (!mmc)
|
||||||
return CMD_RET_FAILURE;
|
return CMD_RET_FAILURE;
|
||||||
|
|
||||||
|
|
|
@ -86,7 +86,7 @@ block_dev_desc_t *get_dev_hwpart(const char *ifname, int dev, int hwpart)
|
||||||
block_dev_desc_t *dev_desc = reloc_get_dev(dev);
|
block_dev_desc_t *dev_desc = reloc_get_dev(dev);
|
||||||
if (!dev_desc)
|
if (!dev_desc)
|
||||||
return NULL;
|
return NULL;
|
||||||
if (hwpart == -1)
|
if (hwpart == 0 && !select_hwpart)
|
||||||
return dev_desc;
|
return dev_desc;
|
||||||
if (!select_hwpart)
|
if (!select_hwpart)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -102,7 +102,7 @@ block_dev_desc_t *get_dev_hwpart(const char *ifname, int dev, int hwpart)
|
||||||
|
|
||||||
block_dev_desc_t *get_dev(const char *ifname, int dev)
|
block_dev_desc_t *get_dev(const char *ifname, int dev)
|
||||||
{
|
{
|
||||||
return get_dev_hwpart(ifname, dev, -1);
|
return get_dev_hwpart(ifname, dev, 0);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
block_dev_desc_t *get_dev_hwpart(const char *ifname, int dev, int hwpart)
|
block_dev_desc_t *get_dev_hwpart(const char *ifname, int dev, int hwpart)
|
||||||
|
@ -460,7 +460,7 @@ int get_device(const char *ifname, const char *dev_hwpart_str,
|
||||||
hwpart_str++;
|
hwpart_str++;
|
||||||
} else {
|
} else {
|
||||||
dev_str = dev_hwpart_str;
|
dev_str = dev_hwpart_str;
|
||||||
hwpart = -1;
|
hwpart = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
dev = simple_strtoul(dev_str, &ep, 16);
|
dev = simple_strtoul(dev_str, &ep, 16);
|
||||||
|
|
|
@ -113,16 +113,20 @@ int kona_sdhci_init(int dev_index, u32 min_clk, u32 quirks)
|
||||||
__func__, dev_index);
|
__func__, dev_index);
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
}
|
}
|
||||||
if (ret)
|
if (ret) {
|
||||||
|
free(host);
|
||||||
return ret;
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
host->name = "kona-sdhci";
|
host->name = "kona-sdhci";
|
||||||
host->ioaddr = reg_base;
|
host->ioaddr = reg_base;
|
||||||
host->quirks = quirks;
|
host->quirks = quirks;
|
||||||
host->host_caps = MMC_MODE_HC;
|
host->host_caps = MMC_MODE_HC;
|
||||||
|
|
||||||
if (init_kona_mmc_core(host))
|
if (init_kona_mmc_core(host)) {
|
||||||
|
free(host);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
if (quirks & SDHCI_QUIRK_REG32_RW)
|
if (quirks & SDHCI_QUIRK_REG32_RW)
|
||||||
host->version = sdhci_readl(host, SDHCI_HOST_VERSION - 2) >> 16;
|
host->version = sdhci_readl(host, SDHCI_HOST_VERSION - 2) >> 16;
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
#include <command.h>
|
#include <command.h>
|
||||||
|
#include <errno.h>
|
||||||
#include <mmc.h>
|
#include <mmc.h>
|
||||||
#include <part.h>
|
#include <part.h>
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
|
@ -564,19 +565,19 @@ int mmc_select_hwpart(int dev_num, int hwpart)
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (!mmc)
|
if (!mmc)
|
||||||
return -1;
|
return -ENODEV;
|
||||||
|
|
||||||
if (mmc->part_num == hwpart)
|
if (mmc->part_num == hwpart)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (mmc->part_config == MMCPART_NOAVAILABLE) {
|
if (mmc->part_config == MMCPART_NOAVAILABLE) {
|
||||||
printf("Card doesn't support part_switch\n");
|
printf("Card doesn't support part_switch\n");
|
||||||
return -1;
|
return -EMEDIUMTYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = mmc_switch_part(dev_num, hwpart);
|
ret = mmc_switch_part(dev_num, hwpart);
|
||||||
if (ret)
|
if (ret)
|
||||||
return -1;
|
return ret;
|
||||||
|
|
||||||
mmc->part_num = hwpart;
|
mmc->part_num = hwpart;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue