Skip to content

Commit

Permalink
ARM: mxs: move mxs_get_ocotp() into mach-mxs.c
Browse files Browse the repository at this point in the history
All the users of mxs_get_ocotp() are in mach-mxs.c.  Move the function
into mach-mxs.c, make it a static function, and then remove ocotp.c.

Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
  • Loading branch information
Shawn Guo committed Apr 1, 2013
1 parent 0265b6c commit 1bff2d7
Show file tree
Hide file tree
Showing 4 changed files with 76 additions and 105 deletions.
4 changes: 0 additions & 4 deletions arch/arm/mach-mxs/Makefile
Original file line number Diff line number Diff line change
@@ -1,6 +1,2 @@
# Common support
obj-y := ocotp.o

obj-$(CONFIG_PM) += pm.o

obj-$(CONFIG_MACH_MXS_DT) += mach-mxs.o
1 change: 0 additions & 1 deletion arch/arm/mach-mxs/include/mach/common.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
#ifndef __MACH_MXS_COMMON_H__
#define __MACH_MXS_COMMON_H__

extern const u32 *mxs_get_ocotp(void);
extern int mxs_saif_clkmux_select(unsigned int clkmux);

extern int mx23_clocks_init(void);
Expand Down
76 changes: 76 additions & 0 deletions arch/arm/mach-mxs/mach-mxs.c
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,82 @@ static void __init imx28_timer_init(void)
clocksource_of_init();
}

#define OCOTP_WORD_OFFSET 0x20
#define OCOTP_WORD_COUNT 0x20

#define BM_OCOTP_CTRL_BUSY (1 << 8)
#define BM_OCOTP_CTRL_ERROR (1 << 9)
#define BM_OCOTP_CTRL_RD_BANK_OPEN (1 << 12)

static DEFINE_MUTEX(ocotp_mutex);
static u32 ocotp_words[OCOTP_WORD_COUNT];

static const u32 *mxs_get_ocotp(void)
{
struct device_node *np;
void __iomem *ocotp_base;
int timeout = 0x400;
size_t i;
static int once;

if (once)
return ocotp_words;

np = of_find_compatible_node(NULL, NULL, "fsl,ocotp");
ocotp_base = of_iomap(np, 0);
WARN_ON(!ocotp_base);

mutex_lock(&ocotp_mutex);

/*
* clk_enable(hbus_clk) for ocotp can be skipped
* as it must be on when system is running.
*/

/* try to clear ERROR bit */
__mxs_clrl(BM_OCOTP_CTRL_ERROR, ocotp_base);

/* check both BUSY and ERROR cleared */
while ((__raw_readl(ocotp_base) &
(BM_OCOTP_CTRL_BUSY | BM_OCOTP_CTRL_ERROR)) && --timeout)
cpu_relax();

if (unlikely(!timeout))
goto error_unlock;

/* open OCOTP banks for read */
__mxs_setl(BM_OCOTP_CTRL_RD_BANK_OPEN, ocotp_base);

/* approximately wait 32 hclk cycles */
udelay(1);

/* poll BUSY bit becoming cleared */
timeout = 0x400;
while ((__raw_readl(ocotp_base) & BM_OCOTP_CTRL_BUSY) && --timeout)
cpu_relax();

if (unlikely(!timeout))
goto error_unlock;

for (i = 0; i < OCOTP_WORD_COUNT; i++)
ocotp_words[i] = __raw_readl(ocotp_base + OCOTP_WORD_OFFSET +
i * 0x10);

/* close banks for power saving */
__mxs_clrl(BM_OCOTP_CTRL_RD_BANK_OPEN, ocotp_base);

once = 1;

mutex_unlock(&ocotp_mutex);

return ocotp_words;

error_unlock:
mutex_unlock(&ocotp_mutex);
pr_err("%s: timeout in reading OCOTP\n", __func__);
return NULL;
}

enum mac_oui {
OUI_FSL,
OUI_DENX,
Expand Down
100 changes: 0 additions & 100 deletions arch/arm/mach-mxs/ocotp.c

This file was deleted.

0 comments on commit 1bff2d7

Please sign in to comment.