mirror of
https://xff.cz/git/u-boot/
synced 2025-09-01 16:52:14 +02:00
imx: Move some i.MX common functions into the imx-common directory
This patch moves the following functions into the imx-common directory: - mxs_wait_mask_set() - mxs_wait_mask_clr() - mxs_reset_block() These are currently used by i.MX28. But the upcoming GPMI NAND port for i.MX6 will also use these functions. So lets move them to a common location to re-use them. Signed-off-by: Stefan Roese <sr@denx.de> Cc: Stefano Babic <sbabic@denx.de> Cc: Marek Vasut <marex@denx.de> Cc: Fabio Estevam <fabio.estevam@freescale.com>
This commit is contained in:
committed by
Stefano Babic
parent
0499218dbc
commit
8870e45996
2
Makefile
2
Makefile
@@ -331,7 +331,7 @@ ifneq ($(CONFIG_AM33XX)$(CONFIG_OMAP34XX)$(CONFIG_OMAP44XX)$(CONFIG_OMAP54XX)$(C
|
|||||||
LIBS-y += $(CPUDIR)/omap-common/libomap-common.o
|
LIBS-y += $(CPUDIR)/omap-common/libomap-common.o
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifneq (,$(filter $(SOC), mx25 mx27 mx5 mx6 mx31 mx35))
|
ifneq (,$(filter $(SOC), mx25 mx27 mx5 mx6 mx31 mx35 mxs))
|
||||||
LIBS-y += arch/$(ARCH)/imx-common/libimx-common.o
|
LIBS-y += arch/$(ARCH)/imx-common/libimx-common.o
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@@ -39,12 +39,6 @@
|
|||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
/* 1 second delay should be plenty of time for block reset. */
|
|
||||||
#define RESET_MAX_TIMEOUT 1000000
|
|
||||||
|
|
||||||
#define MXS_BLOCK_SFTRST (1 << 31)
|
|
||||||
#define MXS_BLOCK_CLKGATE (1 << 30)
|
|
||||||
|
|
||||||
/* Lowlevel init isn't used on i.MX28, so just have a dummy here */
|
/* Lowlevel init isn't used on i.MX28, so just have a dummy here */
|
||||||
inline void lowlevel_init(void) {}
|
inline void lowlevel_init(void) {}
|
||||||
|
|
||||||
@@ -82,63 +76,6 @@ void enable_caches(void)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
int mxs_wait_mask_set(struct mxs_register_32 *reg, uint32_t mask, unsigned
|
|
||||||
int timeout)
|
|
||||||
{
|
|
||||||
while (--timeout) {
|
|
||||||
if ((readl(®->reg) & mask) == mask)
|
|
||||||
break;
|
|
||||||
udelay(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return !timeout;
|
|
||||||
}
|
|
||||||
|
|
||||||
int mxs_wait_mask_clr(struct mxs_register_32 *reg, uint32_t mask, unsigned
|
|
||||||
int timeout)
|
|
||||||
{
|
|
||||||
while (--timeout) {
|
|
||||||
if ((readl(®->reg) & mask) == 0)
|
|
||||||
break;
|
|
||||||
udelay(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return !timeout;
|
|
||||||
}
|
|
||||||
|
|
||||||
int mxs_reset_block(struct mxs_register_32 *reg)
|
|
||||||
{
|
|
||||||
/* Clear SFTRST */
|
|
||||||
writel(MXS_BLOCK_SFTRST, ®->reg_clr);
|
|
||||||
|
|
||||||
if (mxs_wait_mask_clr(reg, MXS_BLOCK_SFTRST, RESET_MAX_TIMEOUT))
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
/* Clear CLKGATE */
|
|
||||||
writel(MXS_BLOCK_CLKGATE, ®->reg_clr);
|
|
||||||
|
|
||||||
/* Set SFTRST */
|
|
||||||
writel(MXS_BLOCK_SFTRST, ®->reg_set);
|
|
||||||
|
|
||||||
/* Wait for CLKGATE being set */
|
|
||||||
if (mxs_wait_mask_set(reg, MXS_BLOCK_CLKGATE, RESET_MAX_TIMEOUT))
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
/* Clear SFTRST */
|
|
||||||
writel(MXS_BLOCK_SFTRST, ®->reg_clr);
|
|
||||||
|
|
||||||
if (mxs_wait_mask_clr(reg, MXS_BLOCK_SFTRST, RESET_MAX_TIMEOUT))
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
/* Clear CLKGATE */
|
|
||||||
writel(MXS_BLOCK_CLKGATE, ®->reg_clr);
|
|
||||||
|
|
||||||
if (mxs_wait_mask_clr(reg, MXS_BLOCK_CLKGATE, RESET_MAX_TIMEOUT))
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void mx28_fixup_vt(uint32_t start_addr)
|
void mx28_fixup_vt(uint32_t start_addr)
|
||||||
{
|
{
|
||||||
uint32_t *vt = (uint32_t *)0x20;
|
uint32_t *vt = (uint32_t *)0x20;
|
||||||
|
@@ -31,6 +31,9 @@ ifeq ($(SOC),$(filter $(SOC),mx5 mx6))
|
|||||||
COBJS-y = iomux-v3.o timer.o cpu.o speed.o
|
COBJS-y = iomux-v3.o timer.o cpu.o speed.o
|
||||||
COBJS-$(CONFIG_I2C_MXC) += i2c-mxv7.o
|
COBJS-$(CONFIG_I2C_MXC) += i2c-mxv7.o
|
||||||
endif
|
endif
|
||||||
|
ifeq ($(SOC),$(filter $(SOC),mx6 mxs))
|
||||||
|
COBJS-y += misc.o
|
||||||
|
endif
|
||||||
COBJS-$(CONFIG_CMD_BMODE) += cmd_bmode.o
|
COBJS-$(CONFIG_CMD_BMODE) += cmd_bmode.o
|
||||||
COBJS-$(CONFIG_CMD_HDMIDETECT) += cmd_hdmidet.o
|
COBJS-$(CONFIG_CMD_HDMIDETECT) += cmd_hdmidet.o
|
||||||
COBJS := $(sort $(COBJS-y))
|
COBJS := $(sort $(COBJS-y))
|
||||||
|
84
arch/arm/imx-common/misc.c
Normal file
84
arch/arm/imx-common/misc.c
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2013 Stefan Roese <sr@denx.de>
|
||||||
|
*
|
||||||
|
* See file CREDITS for list of people who contributed to this
|
||||||
|
* project.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation; either version 2 of
|
||||||
|
* the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <common.h>
|
||||||
|
#include <asm/errno.h>
|
||||||
|
#include <asm/io.h>
|
||||||
|
#include <asm/imx-common/regs-common.h>
|
||||||
|
|
||||||
|
/* 1 second delay should be plenty of time for block reset. */
|
||||||
|
#define RESET_MAX_TIMEOUT 1000000
|
||||||
|
|
||||||
|
#define MXS_BLOCK_SFTRST (1 << 31)
|
||||||
|
#define MXS_BLOCK_CLKGATE (1 << 30)
|
||||||
|
|
||||||
|
int mxs_wait_mask_set(struct mxs_register_32 *reg, uint32_t mask, unsigned
|
||||||
|
int timeout)
|
||||||
|
{
|
||||||
|
while (--timeout) {
|
||||||
|
if ((readl(®->reg) & mask) == mask)
|
||||||
|
break;
|
||||||
|
udelay(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return !timeout;
|
||||||
|
}
|
||||||
|
|
||||||
|
int mxs_wait_mask_clr(struct mxs_register_32 *reg, uint32_t mask, unsigned
|
||||||
|
int timeout)
|
||||||
|
{
|
||||||
|
while (--timeout) {
|
||||||
|
if ((readl(®->reg) & mask) == 0)
|
||||||
|
break;
|
||||||
|
udelay(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return !timeout;
|
||||||
|
}
|
||||||
|
|
||||||
|
int mxs_reset_block(struct mxs_register_32 *reg)
|
||||||
|
{
|
||||||
|
/* Clear SFTRST */
|
||||||
|
writel(MXS_BLOCK_SFTRST, ®->reg_clr);
|
||||||
|
|
||||||
|
if (mxs_wait_mask_clr(reg, MXS_BLOCK_SFTRST, RESET_MAX_TIMEOUT))
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
/* Clear CLKGATE */
|
||||||
|
writel(MXS_BLOCK_CLKGATE, ®->reg_clr);
|
||||||
|
|
||||||
|
/* Set SFTRST */
|
||||||
|
writel(MXS_BLOCK_SFTRST, ®->reg_set);
|
||||||
|
|
||||||
|
/* Wait for CLKGATE being set */
|
||||||
|
if (mxs_wait_mask_set(reg, MXS_BLOCK_CLKGATE, RESET_MAX_TIMEOUT))
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
/* Clear SFTRST */
|
||||||
|
writel(MXS_BLOCK_SFTRST, ®->reg_clr);
|
||||||
|
|
||||||
|
if (mxs_wait_mask_clr(reg, MXS_BLOCK_SFTRST, RESET_MAX_TIMEOUT))
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
/* Clear CLKGATE */
|
||||||
|
writel(MXS_BLOCK_CLKGATE, ®->reg_clr);
|
||||||
|
|
||||||
|
if (mxs_wait_mask_clr(reg, MXS_BLOCK_CLKGATE, RESET_MAX_TIMEOUT))
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
@@ -24,6 +24,8 @@
|
|||||||
#ifndef _SYS_PROTO_H_
|
#ifndef _SYS_PROTO_H_
|
||||||
#define _SYS_PROTO_H_
|
#define _SYS_PROTO_H_
|
||||||
|
|
||||||
|
#include <asm/imx-common/regs-common.h>
|
||||||
|
|
||||||
#define MXC_CPU_MX51 0x51
|
#define MXC_CPU_MX51 0x51
|
||||||
#define MXC_CPU_MX53 0x53
|
#define MXC_CPU_MX53 0x53
|
||||||
#define MXC_CPU_MX6SL 0x60
|
#define MXC_CPU_MX6SL 0x60
|
||||||
@@ -46,4 +48,12 @@ void set_vddsoc(u32 mv);
|
|||||||
int fecmxc_initialize(bd_t *bis);
|
int fecmxc_initialize(bd_t *bis);
|
||||||
u32 get_ahb_clk(void);
|
u32 get_ahb_clk(void);
|
||||||
u32 get_periph_clk(void);
|
u32 get_periph_clk(void);
|
||||||
|
|
||||||
|
int mxs_reset_block(struct mxs_register_32 *reg);
|
||||||
|
int mxs_wait_mask_set(struct mxs_register_32 *reg,
|
||||||
|
uint32_t mask,
|
||||||
|
unsigned int timeout);
|
||||||
|
int mxs_wait_mask_clr(struct mxs_register_32 *reg,
|
||||||
|
uint32_t mask,
|
||||||
|
unsigned int timeout);
|
||||||
#endif
|
#endif
|
||||||
|
@@ -94,6 +94,10 @@ LIBS-y += arch/$(ARCH)/cpu/tegra-common/libcputegra-common.o
|
|||||||
LIBS-y += $(CPUDIR)/tegra-common/libtegra-common.o
|
LIBS-y += $(CPUDIR)/tegra-common/libtegra-common.o
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifneq ($(CONFIG_MX23),)
|
||||||
|
LIBS-y += arch/$(ARCH)/imx-common/libimx-common.o
|
||||||
|
endif
|
||||||
|
|
||||||
# Add GCC lib
|
# Add GCC lib
|
||||||
ifeq ("$(USE_PRIVATE_LIBGCC)", "yes")
|
ifeq ("$(USE_PRIVATE_LIBGCC)", "yes")
|
||||||
PLATFORM_LIBGCC = $(SPLTREE)/arch/$(ARCH)/lib/libgcc.o
|
PLATFORM_LIBGCC = $(SPLTREE)/arch/$(ARCH)/lib/libgcc.o
|
||||||
|
Reference in New Issue
Block a user