[Skiboot] [PATCH 07/12] platform: Add BT to Generic platform

Michael Neuling mikey at neuling.org
Thu Jul 21 17:20:45 AEST 2016


From: Benjamin Herrenschmidt <benh at kernel.crashing.org>

Instantiate if if it's in the device-tree...

Signed-off-by: Benjamin Herrenschmidt <benh at kernel.crashing.org>
Signed-off-by: Michael Neuling <mikey at neuling.org>
---
 core/platform.c                          |  6 ++++++
 doc/device-tree/examples/power9-phb4.dts |  6 ++++++
 hw/bt.c                                  | 10 +++++++---
 3 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/core/platform.c b/core/platform.c
index de6e406..de700e7 100644
--- a/core/platform.c
+++ b/core/platform.c
@@ -23,6 +23,7 @@
 #include <chip.h>
 #include <xscom.h>
 #include <errorlog.h>
+#include <bt.h>
 
 struct platform	platform;
 
@@ -105,6 +106,11 @@ static void generic_platform_init(void)
 		uart_setup_opal_console();
 	else
 		force_dummy_console();
+
+	/* Enable a BT interface if we find one too */
+	bt_init();
+
+	/* Fake a real time clock */
 	fake_rtc_init();
 }
 
diff --git a/doc/device-tree/examples/power9-phb4.dts b/doc/device-tree/examples/power9-phb4.dts
index e5743f3..8da1cbc 100644
--- a/doc/device-tree/examples/power9-phb4.dts
+++ b/doc/device-tree/examples/power9-phb4.dts
@@ -192,6 +192,12 @@
 			clock-frequency = < 1843200 >;
 			interrupts = <4>;
 		    };
+
+		    impi at ie4 {
+			compatible = "ipmi-bt";
+			reg = < 1 0xe4 0x3 >;
+			interrupts = <10>;
+		    };
 		};
 	};
 
diff --git a/hw/bt.c b/hw/bt.c
index 19a34e9..2ecc7d3 100644
--- a/hw/bt.c
+++ b/hw/bt.c
@@ -26,6 +26,7 @@
 #include <timer.h>
 #include <ipmi.h>
 #include <timebase.h>
+#include <chip.h>
 
 /* BT registers */
 #define BT_CTRL			0
@@ -379,8 +380,9 @@ static void bt_expire_old_msg(uint64_t tb)
 
 	bt_msg = list_top(&bt.msgq, struct bt_msg, link);
 
-	if (bt_msg && bt_msg->tb > 0 &&
-	    (tb_compare(tb, bt_msg->tb + secs_to_tb(bt.caps.msg_timeout)) == TB_AAFTERB)) {
+	if (bt_msg && bt_msg->tb > 0 && !chip_quirk(QUIRK_SIMICS) &&
+	    (tb_compare(tb, bt_msg->tb +
+			secs_to_tb(bt.caps.msg_timeout)) == TB_AAFTERB)) {
 		if (bt_msg->send_count <= bt.caps.max_retries) {
 			/* A message timeout is usually due to the BMC
 			 * clearing the H2B_ATN flag without actually
@@ -626,8 +628,10 @@ void bt_init(void)
 
 	/* We support only one */
 	n = dt_find_compatible_node(dt_root, NULL, "ipmi-bt");
-	if (!n)
+	if (!n) {
+		prerror("No BT device\n");
 		return;
+	}
 
 	/* Get IO base */
 	prop = dt_find_property(n, "reg");
-- 
2.7.4



More information about the Skiboot mailing list