blob: c57415368241aacf1b348c2925bf5b744a4aac59 [file] [log] [blame]
/*
* Copyright (c) 2018 MediaTek Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files
* (the "Software"), to deal in the Software without restriction,
* including without limitation the rights to use, copy, modify, merge,
* publish, distribute, sublicense, and/or sell copies of the Software,
* and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include <errno.h>
#include <lib/bio.h>
#include <platform/mmc_core.h>
#include <platform/mtk_bio_ioctl.h>
extern void platform_memory_init(void);
struct mmc_card *card;
bool retry_opcond;
void target_early_init(void)
{
#if LK_AS_BL33
card = emmc_init_stage1(&retry_opcond, true);
#else
card = emmc_init_stage1(&retry_opcond, false);
#endif
/* init memory */
platform_memory_init();
}
void target_init(void)
{
if (card) {
#if LK_AS_BL33
emmc_init_stage2(card, retry_opcond, true);
#else
emmc_init_stage2(card, retry_opcond, false);
#endif
}
extern void do_check_mrdump(void) __attribute__((weak));
if (do_check_mrdump)
do_check_mrdump();
}
int target_ab_set_active_bootdev(int slot)
{
bdev_t *dev;
int ret;
/* check slot validity */
if ((slot < 0) || (slot > 1))
return -EINVAL;
dev = bio_open("mmc0");
if (!dev)
return -ENXIO;
slot += 1; /* emmc driver expects slot parameter is 1 or 2 */
ret = bio_ioctl(dev, BIO_IOCTL_MMC_SET_BOOT, &slot);
if (ret < 0)
ret = -EIO;
bio_close(dev);
return ret;
}