Commit 8469700b authored by Masahiro Yamada's avatar Masahiro Yamada

ARM: uniphier: refactor LED function

The macro, led_write(), is now only used in C sources.  There is no
more reason to keep the tricky assembly macro.  Replace it with a
new C function led_puts().

Also, rename board.h to micro-support-card.h.
Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
parent 0b198670
/*
* Copyright (C) 2012-2014 Panasonic Corporation
* Author: Masahiro Yamada <yamada.m@jp.panasonic.com>
* Copyright (C) 2012-2015 Masahiro Yamada <yamada.masahiro@socionext.com>
*
* SPDX-License-Identifier: GPL-2.0+
*/
#include <common.h>
#include <mach/led.h>
#include <mach/micro-support-card.h>
/*
* Routine: board_init
* Description: Early hardware init.
*/
int board_init(void)
{
led_write(U, B, O, O);
led_puts("Uboo");
return 0;
}
/*
* Copyright (C) 2012-2015 Panasonic Corporation
* Author: Masahiro Yamada <yamada.m@jp.panasonic.com>
* Copyright (C) 2012-2015 Masahiro Yamada <yamada.masahiro@socionext.com>
*
* SPDX-License-Identifier: GPL-2.0+
*/
#include <mach/led.h>
#include <mach/board.h>
#include <mach/micro-support-card.h>
void pin_init(void);
void clkrst_init(void);
int board_early_init_f(void)
{
led_write(U, 0, , );
led_puts("U0");
pin_init();
led_write(U, 1, , );
led_puts("U1");
clkrst_init();
led_write(U, 2, , );
led_puts("U2");
return 0;
}
......@@ -5,7 +5,7 @@
*/
#include <common.h>
#include <mach/board.h>
#include <mach/micro-support-card.h>
int board_early_init_r(void)
{
......
/*
* Copyright (C) 2012-2015 Masahiro Yamada <yamada.masahiro@socionext.com>
*
* SPDX-License-Identifier: GPL-2.0+
*/
#ifndef ARCH_LED_H
#define ARCH_LED_H
#include <config.h>
#define LED_CHAR_0 0x7e
#define LED_CHAR_1 0x0c
#define LED_CHAR_2 0xb6
#define LED_CHAR_3 0x9e
#define LED_CHAR_4 0xcc
#define LED_CHAR_5 0xda
#define LED_CHAR_6 0xfa
#define LED_CHAR_7 0x4e
#define LED_CHAR_8 0xfe
#define LED_CHAR_9 0xde
#define LED_CHAR_A 0xee
#define LED_CHAR_B 0xf8
#define LED_CHAR_C 0x72
#define LED_CHAR_D 0xbc
#define LED_CHAR_E 0xf2
#define LED_CHAR_F 0xe2
#define LED_CHAR_G 0x7a
#define LED_CHAR_H 0xe8
#define LED_CHAR_I 0x08
#define LED_CHAR_J 0x3c
#define LED_CHAR_K 0xea
#define LED_CHAR_L 0x70
#define LED_CHAR_M 0x6e
#define LED_CHAR_N 0xa8
#define LED_CHAR_O 0xb8
#define LED_CHAR_P 0xe6
#define LED_CHAR_Q 0xce
#define LED_CHAR_R 0xa0
#define LED_CHAR_S 0xc8
#define LED_CHAR_T 0x8c
#define LED_CHAR_U 0x7c
#define LED_CHAR_V 0x54
#define LED_CHAR_W 0xfc
#define LED_CHAR_X 0xec
#define LED_CHAR_Y 0xdc
#define LED_CHAR_Z 0xa4
#define LED_CHAR_SPACE 0x00
#define LED_CHAR_DOT 0x01
#define LED_CHAR_ (LED_CHAR_SPACE)
/** Macro to translate 4 characters into integer to display led */
#define LED_C2I(C0, C1, C2, C3) \
(~( \
(LED_CHAR_##C0 << 24) | \
(LED_CHAR_##C1 << 16) | \
(LED_CHAR_##C2 << 8) | \
(LED_CHAR_##C3) \
))
#if defined(CONFIG_SUPPORT_CARD_LED_BASE)
#define LED_ADDR CONFIG_SUPPORT_CARD_LED_BASE
#ifdef __ASSEMBLY__
#define led_write(C0, C1, C2, C3) raw_led_write LED_C2I(C0, C1, C2, C3)
.macro raw_led_write data
ldr r0, =\data
ldr r1, =LED_ADDR
str r0, [r1]
.endm
#else /* __ASSEMBLY__ */
#include <linux/io.h>
#define led_write(C0, C1, C2, C3) \
do { \
raw_led_write(LED_C2I(C0, C1, C2, C3)); \
} while (0)
static inline void raw_led_write(u32 data)
{
writel(data, LED_ADDR);
}
#endif /* __ASSEMBLY__ */
#else /* CONFIG_SUPPORT_CARD_LED_BASE */
#define led_write(C0, C1, C2, C3)
#define raw_led_write(x)
#endif /* CONFIG_SUPPORT_CARD_LED_BASE */
#endif /* ARCH_LED_H */
......@@ -12,6 +12,7 @@ void support_card_reset(void);
void support_card_init(void);
void support_card_late_init(void);
int check_support_card(void);
void led_puts(const char *s);
#else
static inline void support_card_reset(void)
{
......@@ -29,6 +30,10 @@ static inline int check_support_card(void)
{
return 0;
}
static inline void led_puts(const char *s)
{
}
#endif
#endif /* ARCH_BOARD_H */
......@@ -8,7 +8,6 @@
#include <linux/linkage.h>
#include <linux/sizes.h>
#include <asm/system.h>
#include <mach/led.h>
#include <mach/arm-mpcore.h>
#include <mach/sbc-regs.h>
#include <mach/ssc-regs.h>
......
......@@ -5,7 +5,7 @@
* SPDX-License-Identifier: GPL-2.0+
*/
#include <mach/board.h>
#include <mach/micro-support-card.h>
int misc_init_f(void)
{
......
......@@ -7,8 +7,7 @@
#include <common.h>
#include <spl.h>
#include <linux/compiler.h>
#include <mach/led.h>
#include <mach/board.h>
#include <mach/micro-support-card.h>
void __weak bcu_init(void)
{
......@@ -46,25 +45,25 @@ void spl_board_init(void)
support_card_init();
led_write(L, 0, , );
led_puts("L0");
memconf_init();
led_write(L, 1, , );
led_puts("L1");
early_clkrst_init();
led_write(L, 2, , );
led_puts("L2");
early_pin_init();
led_write(L, 3, , );
led_puts("L3");
#ifdef CONFIG_SPL_SERIAL_SUPPORT
preloader_console_init();
#endif
led_write(L, 4, , );
led_puts("L4");
{
int res;
......@@ -75,9 +74,10 @@ void spl_board_init(void)
;
}
}
led_write(L, 5, , );
led_puts("L5");
enable_dpll_ssc();
led_write(L, 6, , );
led_puts("L6");
}
......@@ -5,8 +5,9 @@
*/
#include <common.h>
#include <linux/ctype.h>
#include <linux/io.h>
#include <mach/board.h>
#include <mach/micro-support-card.h>
#define MICRO_SUPPORT_CARD_RESET \
((CONFIG_SUPPORT_CARD_BASE) + 0x000D0034)
......@@ -155,3 +156,73 @@ void support_card_late_init(void)
{
detect_num_flash_banks();
}
static const u8 ledval_num[] = {
0x7e, /* 0 */
0x0c, /* 1 */
0xb6, /* 2 */
0x9e, /* 3 */
0xcc, /* 4 */
0xda, /* 5 */
0xfa, /* 6 */
0x4e, /* 7 */
0xfe, /* 8 */
0xde, /* 9 */
};
static const u8 ledval_alpha[] = {
0xee, /* A */
0xf8, /* B */
0x72, /* C */
0xbc, /* D */
0xf2, /* E */
0xe2, /* F */
0x7a, /* G */
0xe8, /* H */
0x08, /* I */
0x3c, /* J */
0xea, /* K */
0x70, /* L */
0x6e, /* M */
0xa8, /* N */
0xb8, /* O */
0xe6, /* P */
0xce, /* Q */
0xa0, /* R */
0xc8, /* S */
0x8c, /* T */
0x7c, /* U */
0x54, /* V */
0xfc, /* W */
0xec, /* X */
0xdc, /* Y */
0xa4, /* Z */
};
static u8 char2ledval(char c)
{
if (isdigit(c))
return ledval_num[c - '0'];
else if (isalpha(c))
return ledval_alpha[toupper(c) - 'A'];
return 0;
}
void led_puts(const char *s)
{
int i;
u32 val = 0;
if (!s)
return;
for (i = 0; i < 4; i++) {
val <<= 8;
val |= char2ledval(*s);
if (*s != '\0')
s++;
}
writel(~val, CONFIG_SUPPORT_CARD_LED_BASE);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment