1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
From 8098310be5887bd5e80830f105b63ed59dc10421 Mon Sep 17 00:00:00 2001
From: Alexander Filippov <a.filippov@yadro.com>
Date: Fri, 22 May 2020 11:45:31 +0300
Subject: [PATCH] aspeed: add bmc position support
There are two Nicoles in one chassis in the Tatlin hardware.
The position is encoded by a pin, read by an MCU, and then translated
to the BMC via GPIO pin GPIOE1.
This reads the GPIO pin state and put is as a bootargs item.
Signed-off-by: Alexander Filippov <a.filippov@yadro.com>
---
arch/arm/mach-aspeed/ast-late-init.c | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/arch/arm/mach-aspeed/ast-late-init.c b/arch/arm/mach-aspeed/ast-late-init.c
index 5646c0e882..7d36dc0d8a 100644
--- a/arch/arm/mach-aspeed/ast-late-init.c
+++ b/arch/arm/mach-aspeed/ast-late-init.c
@@ -7,6 +7,7 @@
#include <asm/arch/ast_scu.h>
#include <asm/arch/regs-scu.h>
+#include <asm/gpio.h>
#include <malloc.h>
static void update_bootargs_cmd(const char *key, const char *value)
@@ -106,9 +107,29 @@ static void set_reset_reason(void)
}
}
+static void set_bmc_position(void)
+{
+ unsigned gpio = ASPEED_GPIO(E, 1);
+
+ /* Init GPIO */
+ if (gpio_request(gpio, "bmcposition") == 0 &&
+ gpio_direction_input(gpio) == 0)
+ {
+ int position = gpio_get_value(gpio);
+ if (position >= 0)
+ {
+ printf("BMC Position: %d\n", position);
+ update_bootargs_cmd("bmcposition", position ? "1" : "0");
+ }
+ }
+
+ gpio_free(gpio);
+}
+
int board_late_init(void)
{
set_reset_reason();
+ set_bmc_position();
return 0;
}
--
2.25.4
|