Message ID | 20200409061250.95438-1-stewart@flamingspork.com |
---|---|
State | Accepted |
Headers | show |
Series | [v4] platform: add Raptor Blackbird support | expand |
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 |
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 >
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.
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 --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, +};
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