diff mbox series

[v4] platform: add Raptor Blackbird support

Message ID 20200409061250.95438-1-stewart@flamingspork.com
State Accepted
Headers show
Series [v4] platform: add Raptor Blackbird support | expand

Checks

Context Check Description
snowpatch_ozlabs/apply_patch success Successfully applied on branch master (e991415a88dbfd6c1690c5c2d8840288f45ec925)
snowpatch_ozlabs/snowpatch_job_snowpatch-skiboot success Test snowpatch/job/snowpatch-skiboot on branch master
snowpatch_ozlabs/snowpatch_job_snowpatch-skiboot-dco success Signed-off-by present

Commit Message

Stewart Smith April 9, 2020, 6:12 a.m. UTC
Based off the Raptor patch:
https://git.raptorcs.com/git/blackbird-skiboot/commit/?id=c81f9d66592dc2a7cf7f6c59c3def5cee0638c1f

Notable changes:
- slot names matching what's silkscreened on the board
- Expose IPL Observer over op-panel OPAL calls

  This means you can "printf '\xfe\xfe\xfe' > /dev/op_panel" to
  make the IPL Observer on the Raptor BMC builds to realise it
  can turn on fan control.

Signed-off-by: Stewart Smith <stewart@flamingspork.com>
---
Changes since v3:
  - Expose IPL observer through op_panel
Changes since v2:
  - IPL observer "done booting" removed
Changes since v1:
  - op_display_lpc for IPL observer
Changes since v0 (Raptor):
  - slot names are correct
---
 platforms/astbmc/Makefile.inc |   3 +-
 platforms/astbmc/blackbird.c  | 106 ++++++++++++++++++++++++++++++++++
 2 files changed, 108 insertions(+), 1 deletion(-)
 create mode 100644 platforms/astbmc/blackbird.c

Comments

Dan Horák April 9, 2020, 7:19 a.m. UTC | #1
On Wed,  8 Apr 2020 23:12:50 -0700
Stewart Smith <stewart@flamingspork.com> wrote:

> Based off the Raptor patch:
> https://git.raptorcs.com/git/blackbird-skiboot/commit/?id=c81f9d66592dc2a7cf7f6c59c3def5cee0638c1f
> 
> Notable changes:
> - slot names matching what's silkscreened on the board
> - Expose IPL Observer over op-panel OPAL calls
> 
>   This means you can "printf '\xfe\xfe\xfe' > /dev/op_panel" to
>   make the IPL Observer on the Raptor BMC builds to realise it
>   can turn on fan control.
> 
> Signed-off-by: Stewart Smith <stewart@flamingspork.com>

I like it. Is there any drawback when you write to all 3 addresses
(0x80..0x82) as opposed to the original observer that uses only 0x81,
0x82?


		Dan

> ---
> Changes since v3:
>   - Expose IPL observer through op_panel
> Changes since v2:
>   - IPL observer "done booting" removed
> Changes since v1:
>   - op_display_lpc for IPL observer
> Changes since v0 (Raptor):
>   - slot names are correct
> ---
>  platforms/astbmc/Makefile.inc |   3 +-
>  platforms/astbmc/blackbird.c  | 106 +++++++++++++++++++++++++++++++++
> + 2 files changed, 108 insertions(+), 1 deletion(-)
>  create mode 100644 platforms/astbmc/blackbird.c
> 
> diff --git a/platforms/astbmc/Makefile.inc
> b/platforms/astbmc/Makefile.inc index fd4eaeac..e0f8760d 100644
> --- a/platforms/astbmc/Makefile.inc
> +++ b/platforms/astbmc/Makefile.inc
> @@ -6,7 +6,8 @@ ASTBMC_OBJS = pnor.o common.o slots.o \
>  	      garrison.o barreleye.o \
>  	      witherspoon.o zaius.o romulus.o p9dsu.o \
>  	      vesnin.o nicole.o mihawk.o\
> -	      talos.o swift.o
> +	      talos.o blackbird.o \
> +	      swift.o
>  
>  ASTBMC = $(PLATDIR)/astbmc/built-in.a
>  $(ASTBMC): $(ASTBMC_OBJS:%=$(PLATDIR)/astbmc/%)
> diff --git a/platforms/astbmc/blackbird.c
> b/platforms/astbmc/blackbird.c new file mode 100644
> index 00000000..41de010f
> --- /dev/null
> +++ b/platforms/astbmc/blackbird.c
> @@ -0,0 +1,106 @@
> +// SPDX-License-Identifier: Apache-2.0
> +/* Copyright 2017 IBM Corp.
> + * Copyright 2018-2019 Raptor Engineering, LLC
> + * Copyright 2019 Stewart Smith
> + */
> +
> +#include <skiboot.h>
> +#include <device.h>
> +#include <console.h>
> +#include <chip.h>
> +#include <ipmi.h>
> +#include <psi.h>
> +#include <lpc.h>
> +
> +#include "astbmc.h"
> +
> +ST_PLUGGABLE(blackbird_cpu1_slot1, "SLOT1 PCIE 4.0 X16");
> +ST_PLUGGABLE(blackbird_cpu1_slot2, "SLOT2 PCIE 4.0 X8");
> +
> +ST_BUILTIN_DEV(blackbird_builtin_sata, "Builtin SATA");
> +ST_BUILTIN_DEV(blackbird_builtin_usb, "Builtin USB");
> +ST_BUILTIN_DEV(blackbird_builtin_ethernet, "Builtin Ethernet");
> +ST_BUILTIN_DEV(blackbird_builtin_bmc, "BMC");
> +
> +static const struct slot_table_entry blackbird_phb_table[] = {
> +	ST_PHB_ENTRY(0, 0, blackbird_cpu1_slot1),
> +	ST_PHB_ENTRY(0, 1, blackbird_cpu1_slot2),
> +
> +	ST_PHB_ENTRY(0, 2, blackbird_builtin_sata),
> +	ST_PHB_ENTRY(0, 3, blackbird_builtin_usb),
> +	ST_PHB_ENTRY(0, 4, blackbird_builtin_ethernet),
> +	ST_PHB_ENTRY(0, 5, blackbird_builtin_bmc),
> +
> +	{ .etype = st_end },
> +};
> +
> +static bool blackbird_probe(void)
> +{
> +	if (!dt_node_is_compatible(dt_root, "rcs,blackbird"))
> +		return false;
> +
> +	/* Lot of common early inits here */
> +	astbmc_early_init();
> +
> +	/* Setup UART for use by OPAL (Linux hvc) */
> +	uart_set_console_policy(UART_CONSOLE_OPAL);
> +
> +	slot_table_init(blackbird_phb_table);
> +
> +	return true;
> +}
> +
> +static int64_t blackbird_write_oppanel_async(uint64_t async_token
> __unused,
> +					     oppanel_line_t *lines,
> +					     uint64_t num_lines)
> +{
> +	uint8_t *line;
> +	int len;
> +
> +	if (num_lines != 1)
> +		return OPAL_PARAMETER;
> +
> +	line = (void *) be64_to_cpu(lines[0].line);
> +	len = lines[0].line_len;
> +
> +	if (len > 0)
> +		lpc_probe_write(OPAL_LPC_IO, 0x80, line[0], 1);
> +	if (len > 1)
> +		lpc_probe_write(OPAL_LPC_IO, 0x81, line[1], 1);
> +	if (len > 2)
> +		lpc_probe_write(OPAL_LPC_IO, 0x82, line[2], 1);
> +
> +	return OPAL_SUCCESS;
> +}
> +
> +static void blackbird_init(void)
> +{
> +	struct dt_node *oppanel;
> +
> +	astbmc_init();
> +
> +	opal_register(OPAL_WRITE_OPPANEL_ASYNC,
> blackbird_write_oppanel_async, 3); +
> +	oppanel = dt_new(opal_node, "oppanel");
> +	dt_add_property_cells(oppanel, "#length", 3);
> +	dt_add_property_cells(oppanel, "#lines", 1);
> +	dt_add_property_strings(oppanel, "compatible",
> "ibm,opal-oppanel", "rcs,ipl-observer"); +
> +}
> +
> +DECLARE_PLATFORM(blackbird) = {
> +	.name			= "Blackbird",
> +	.probe			= blackbird_probe,
> +	.init			= blackbird_init,
> +	.start_preload_resource	=
> flash_start_preload_resource,
> +	.resource_loaded	= flash_resource_loaded,
> +	.bmc			= &bmc_plat_ast2500_openbmc,
> +	.pci_get_slot_info	= slot_table_get_slot_info,
> +	.pci_probe_complete	= check_all_slot_table,
> +	.cec_power_down         = astbmc_ipmi_power_down,
> +	.cec_reboot             = astbmc_ipmi_reboot,
> +	.elog_commit		= ipmi_elog_commit,
> +	.exit			= astbmc_exit,
> +	.terminate		= ipmi_terminate,
> +	.op_display		= op_display_lpc,
> +};
> -- 
> 2.25.1
>
Stewart Smith April 9, 2020, 7:46 a.m. UTC | #2
On Thu, Apr 9, 2020, at 12:19 AM, Dan Horák wrote:
> On Wed,  8 Apr 2020 23:12:50 -0700
> Stewart Smith <stewart@flamingspork.com> wrote:
> 
> > Based off the Raptor patch:
> > https://git.raptorcs.com/git/blackbird-skiboot/commit/?id=c81f9d66592dc2a7cf7f6c59c3def5cee0638c1f
> > 
> > Notable changes:
> > - slot names matching what's silkscreened on the board
> > - Expose IPL Observer over op-panel OPAL calls
> > 
> >   This means you can "printf '\xfe\xfe\xfe' > /dev/op_panel" to
> >   make the IPL Observer on the Raptor BMC builds to realise it
> >   can turn on fan control.
> > 
> > Signed-off-by: Stewart Smith <stewart@flamingspork.com>
> 
> I like it. Is there any drawback when you write to all 3 addresses
> (0x80..0x82) as opposed to the original observer that uses only 0x81,
> 0x82?

the 0x80 is the "standard" (as in, since the original IBM PC) one. The 81,82 came from the "more than 8 bits of status is useful" discussion we (at least Tim and myself, plus others, I can't remember, it's late) had... oh I can't remember now... but a while ago. Our bigger concern was if writing to 81,82 was going to be okay if nothing was listening.
Oliver O'Halloran April 9, 2020, 11:22 a.m. UTC | #3
On Thu, Apr 9, 2020 at 5:48 PM Stewart Smith <stewart@flamingspork.com> wrote:
>
> On Thu, Apr 9, 2020, at 12:19 AM, Dan Horák wrote:
> > On Wed,  8 Apr 2020 23:12:50 -0700
> > Stewart Smith <stewart@flamingspork.com> wrote:
> >
> > > Based off the Raptor patch:
> > > https://git.raptorcs.com/git/blackbird-skiboot/commit/?id=c81f9d66592dc2a7cf7f6c59c3def5cee0638c1f
> > >
> > > Notable changes:
> > > - slot names matching what's silkscreened on the board
> > > - Expose IPL Observer over op-panel OPAL calls
> > >
> > >   This means you can "printf '\xfe\xfe\xfe' > /dev/op_panel" to
> > >   make the IPL Observer on the Raptor BMC builds to realise it
> > >   can turn on fan control.
> > >
> > > Signed-off-by: Stewart Smith <stewart@flamingspork.com>
> >
> > I like it. Is there any drawback when you write to all 3 addresses
> > (0x80..0x82) as opposed to the original observer that uses only 0x81,
> > 0x82?
>
> the 0x80 is the "standard" (as in, since the original IBM PC) one. The 81,82 came from the "more than 8 bits of status is useful" discussion we (at least Tim and myself, plus others, I can't remember, it's late) had... oh I can't remember now... but a while ago. Our bigger concern was if writing to 81,82 was going to be okay if nothing was listening.

IIRC you'll get one of those "LPC No Sync" errors, but other than that
it doesn't seem to cause any issues.
diff mbox series

Patch

diff --git a/platforms/astbmc/Makefile.inc b/platforms/astbmc/Makefile.inc
index fd4eaeac..e0f8760d 100644
--- a/platforms/astbmc/Makefile.inc
+++ b/platforms/astbmc/Makefile.inc
@@ -6,7 +6,8 @@  ASTBMC_OBJS = pnor.o common.o slots.o \
 	      garrison.o barreleye.o \
 	      witherspoon.o zaius.o romulus.o p9dsu.o \
 	      vesnin.o nicole.o mihawk.o\
-	      talos.o swift.o
+	      talos.o blackbird.o \
+	      swift.o
 
 ASTBMC = $(PLATDIR)/astbmc/built-in.a
 $(ASTBMC): $(ASTBMC_OBJS:%=$(PLATDIR)/astbmc/%)
diff --git a/platforms/astbmc/blackbird.c b/platforms/astbmc/blackbird.c
new file mode 100644
index 00000000..41de010f
--- /dev/null
+++ b/platforms/astbmc/blackbird.c
@@ -0,0 +1,106 @@ 
+// SPDX-License-Identifier: Apache-2.0
+/* Copyright 2017 IBM Corp.
+ * Copyright 2018-2019 Raptor Engineering, LLC
+ * Copyright 2019 Stewart Smith
+ */
+
+#include <skiboot.h>
+#include <device.h>
+#include <console.h>
+#include <chip.h>
+#include <ipmi.h>
+#include <psi.h>
+#include <lpc.h>
+
+#include "astbmc.h"
+
+ST_PLUGGABLE(blackbird_cpu1_slot1, "SLOT1 PCIE 4.0 X16");
+ST_PLUGGABLE(blackbird_cpu1_slot2, "SLOT2 PCIE 4.0 X8");
+
+ST_BUILTIN_DEV(blackbird_builtin_sata, "Builtin SATA");
+ST_BUILTIN_DEV(blackbird_builtin_usb, "Builtin USB");
+ST_BUILTIN_DEV(blackbird_builtin_ethernet, "Builtin Ethernet");
+ST_BUILTIN_DEV(blackbird_builtin_bmc, "BMC");
+
+static const struct slot_table_entry blackbird_phb_table[] = {
+	ST_PHB_ENTRY(0, 0, blackbird_cpu1_slot1),
+	ST_PHB_ENTRY(0, 1, blackbird_cpu1_slot2),
+
+	ST_PHB_ENTRY(0, 2, blackbird_builtin_sata),
+	ST_PHB_ENTRY(0, 3, blackbird_builtin_usb),
+	ST_PHB_ENTRY(0, 4, blackbird_builtin_ethernet),
+	ST_PHB_ENTRY(0, 5, blackbird_builtin_bmc),
+
+	{ .etype = st_end },
+};
+
+static bool blackbird_probe(void)
+{
+	if (!dt_node_is_compatible(dt_root, "rcs,blackbird"))
+		return false;
+
+	/* Lot of common early inits here */
+	astbmc_early_init();
+
+	/* Setup UART for use by OPAL (Linux hvc) */
+	uart_set_console_policy(UART_CONSOLE_OPAL);
+
+	slot_table_init(blackbird_phb_table);
+
+	return true;
+}
+
+static int64_t blackbird_write_oppanel_async(uint64_t async_token __unused,
+					     oppanel_line_t *lines,
+					     uint64_t num_lines)
+{
+	uint8_t *line;
+	int len;
+
+	if (num_lines != 1)
+		return OPAL_PARAMETER;
+
+	line = (void *) be64_to_cpu(lines[0].line);
+	len = lines[0].line_len;
+
+	if (len > 0)
+		lpc_probe_write(OPAL_LPC_IO, 0x80, line[0], 1);
+	if (len > 1)
+		lpc_probe_write(OPAL_LPC_IO, 0x81, line[1], 1);
+	if (len > 2)
+		lpc_probe_write(OPAL_LPC_IO, 0x82, line[2], 1);
+
+	return OPAL_SUCCESS;
+}
+
+static void blackbird_init(void)
+{
+	struct dt_node *oppanel;
+
+	astbmc_init();
+
+	opal_register(OPAL_WRITE_OPPANEL_ASYNC, blackbird_write_oppanel_async, 3);
+
+	oppanel = dt_new(opal_node, "oppanel");
+	dt_add_property_cells(oppanel, "#length", 3);
+	dt_add_property_cells(oppanel, "#lines", 1);
+	dt_add_property_strings(oppanel, "compatible", "ibm,opal-oppanel", "rcs,ipl-observer");
+
+}
+
+DECLARE_PLATFORM(blackbird) = {
+	.name			= "Blackbird",
+	.probe			= blackbird_probe,
+	.init			= blackbird_init,
+	.start_preload_resource	= flash_start_preload_resource,
+	.resource_loaded	= flash_resource_loaded,
+	.bmc			= &bmc_plat_ast2500_openbmc,
+	.pci_get_slot_info	= slot_table_get_slot_info,
+	.pci_probe_complete	= check_all_slot_table,
+	.cec_power_down         = astbmc_ipmi_power_down,
+	.cec_reboot             = astbmc_ipmi_reboot,
+	.elog_commit		= ipmi_elog_commit,
+	.exit			= astbmc_exit,
+	.terminate		= ipmi_terminate,
+	.op_display		= op_display_lpc,
+};