mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-26 08:31:13 +00:00
Merge branch 'fixes-for-arm-soc' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-stericsson into fixes
* 'fixes-for-arm-soc' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-stericsson: mach-ux500: no MMC_CAP_SD_HIGHSPEED on Snowball mach-ux500: enable ARM errata 764369 mach-ux500: do not override outer.inv_all mach-ux500: musb: now musb is always in OTG mode
This commit is contained in:
commit
d8c4cd7463
4 changed files with 10 additions and 47 deletions
|
@ -7,6 +7,7 @@ config UX500_SOC_COMMON
|
||||||
select HAS_MTU
|
select HAS_MTU
|
||||||
select ARM_ERRATA_753970
|
select ARM_ERRATA_753970
|
||||||
select ARM_ERRATA_754322
|
select ARM_ERRATA_754322
|
||||||
|
select ARM_ERRATA_764369
|
||||||
|
|
||||||
menu "Ux500 SoC"
|
menu "Ux500 SoC"
|
||||||
|
|
||||||
|
|
|
@ -261,6 +261,8 @@ void __init mop500_sdi_init(void)
|
||||||
|
|
||||||
void __init snowball_sdi_init(void)
|
void __init snowball_sdi_init(void)
|
||||||
{
|
{
|
||||||
|
/* On Snowball MMC_CAP_SD_HIGHSPEED isn't supported (Hardware issue?) */
|
||||||
|
mop500_sdi0_data.capabilities &= ~MMC_CAP_SD_HIGHSPEED;
|
||||||
/* On-board eMMC */
|
/* On-board eMMC */
|
||||||
db8500_add_sdi4(&mop500_sdi4_data, U8500_SDI_V2_PERIPHID);
|
db8500_add_sdi4(&mop500_sdi4_data, U8500_SDI_V2_PERIPHID);
|
||||||
/* External Micro SD slot */
|
/* External Micro SD slot */
|
||||||
|
|
|
@ -12,44 +12,6 @@
|
||||||
|
|
||||||
static void __iomem *l2x0_base;
|
static void __iomem *l2x0_base;
|
||||||
|
|
||||||
static inline void ux500_cache_wait(void __iomem *reg, unsigned long mask)
|
|
||||||
{
|
|
||||||
/* wait for the operation to complete */
|
|
||||||
while (readl_relaxed(reg) & mask)
|
|
||||||
cpu_relax();
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void ux500_cache_sync(void)
|
|
||||||
{
|
|
||||||
writel_relaxed(0, l2x0_base + L2X0_CACHE_SYNC);
|
|
||||||
ux500_cache_wait(l2x0_base + L2X0_CACHE_SYNC, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The L2 cache cannot be turned off in the non-secure world.
|
|
||||||
* Dummy until a secure service is in place.
|
|
||||||
*/
|
|
||||||
static void ux500_l2x0_disable(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This is only called when doing a kexec, just after turning off the L2
|
|
||||||
* and L1 cache, and it is surrounded by a spinlock in the generic version.
|
|
||||||
* However, we're not really turning off the L2 cache right now and the
|
|
||||||
* PL310 does not support exclusive accesses (used to implement the spinlock).
|
|
||||||
* So, the invalidation needs to be done without the spinlock.
|
|
||||||
*/
|
|
||||||
static void ux500_l2x0_inv_all(void)
|
|
||||||
{
|
|
||||||
uint32_t l2x0_way_mask = (1<<16) - 1; /* Bitmask of active ways */
|
|
||||||
|
|
||||||
/* invalidate all ways */
|
|
||||||
writel_relaxed(l2x0_way_mask, l2x0_base + L2X0_INV_WAY);
|
|
||||||
ux500_cache_wait(l2x0_base + L2X0_INV_WAY, l2x0_way_mask);
|
|
||||||
ux500_cache_sync();
|
|
||||||
}
|
|
||||||
|
|
||||||
static int __init ux500_l2x0_unlock(void)
|
static int __init ux500_l2x0_unlock(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
@ -85,9 +47,13 @@ static int __init ux500_l2x0_init(void)
|
||||||
/* 64KB way size, 8 way associativity, force WA */
|
/* 64KB way size, 8 way associativity, force WA */
|
||||||
l2x0_init(l2x0_base, 0x3e060000, 0xc0000fff);
|
l2x0_init(l2x0_base, 0x3e060000, 0xc0000fff);
|
||||||
|
|
||||||
/* Override invalidate function */
|
/*
|
||||||
outer_cache.disable = ux500_l2x0_disable;
|
* We can't disable l2 as we are in non secure mode, currently
|
||||||
outer_cache.inv_all = ux500_l2x0_inv_all;
|
* this seems be called only during kexec path. So let's
|
||||||
|
* override outer.disable with nasty assignment until we have
|
||||||
|
* some SMI service available.
|
||||||
|
*/
|
||||||
|
outer_cache.disable = NULL;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -95,13 +95,7 @@ static struct musb_hdrc_config musb_hdrc_config = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct musb_hdrc_platform_data musb_platform_data = {
|
static struct musb_hdrc_platform_data musb_platform_data = {
|
||||||
#if defined(CONFIG_USB_MUSB_OTG)
|
|
||||||
.mode = MUSB_OTG,
|
.mode = MUSB_OTG,
|
||||||
#elif defined(CONFIG_USB_MUSB_PERIPHERAL)
|
|
||||||
.mode = MUSB_PERIPHERAL,
|
|
||||||
#else /* defined(CONFIG_USB_MUSB_HOST) */
|
|
||||||
.mode = MUSB_HOST,
|
|
||||||
#endif
|
|
||||||
.config = &musb_hdrc_config,
|
.config = &musb_hdrc_config,
|
||||||
.board_data = &musb_board_data,
|
.board_data = &musb_board_data,
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue