[Skiboot] [PATCH v2] Witherspoon: Remove old Witherspoon platform definition
Alistair Popple
alistair at popple.id.au
Thu Jan 11 16:02:08 AEDT 2018
An old Witherspoon platform definition was added to aid the transition from
versions of Hostboot which didn't have the correct NVLink HDAT information
available and/or planar VPD. These system should now be updated so remove
the possibly incorrect default assumption.
This may disable NVLink on old out-dated systems but it can easily be
restored with the appropriate FW and/or VPD updates. In any case there is a
a 50% chance the existing default behaviour was incorrect as it only
supports 6 GPU systems. Using an incorrect platform definition leads to
undefined behaviour which is more difficult to detect/debug than not
creating the NVLink devices so remove the possibly incorrect default
behaviour.
Signed-off-by: Alistair Popple <alistair at popple.id.au>
---
Changes from v1:
- Remove checks for NPU node and PCIe slot information in
witherspoon_probe()
platforms/astbmc/witherspoon.c | 356 -----------------------------------------
1 file changed, 356 deletions(-)
diff --git a/platforms/astbmc/witherspoon.c b/platforms/astbmc/witherspoon.c
index b9ed2778..9460b6d1 100644
--- a/platforms/astbmc/witherspoon.c
+++ b/platforms/astbmc/witherspoon.c
@@ -30,317 +30,10 @@
#include "astbmc.h"
-static const struct slot_table_entry witherspoon_slot1[] = {
- {
- .etype = st_pluggable_slot,
- .location = ST_LOC_DEVFN(0,0),
- .name = "SLOT0"
- },
- { .etype = st_end },
-};
-
-static const struct slot_table_entry witherspoon_slot2_shared[] = {
- {
- .etype = st_pluggable_slot,
- .location = ST_LOC_DEVFN(0,0),
- .name = "SLOT1"
- },
- { .etype = st_end },
-};
-
-static const struct slot_table_entry witherspoon_slot3[] = {
- {
- .etype = st_pluggable_slot,
- .location = ST_LOC_DEVFN(0,0),
- .name = "SLOT2"
- },
- { .etype = st_end },
-};
-
-static const struct slot_table_entry witherspoon_slot4[] = {
- {
- .etype = st_pluggable_slot,
- .location = ST_LOC_DEVFN(0,0),
- .name = "SLOT3"
- },
- { .etype = st_end },
-};
-
-static const struct slot_table_entry witherspoon_gpu0[] = {
- {
- .etype = st_pluggable_slot,
- .location = ST_LOC_DEVFN(0x80,0),
- .name = "GPU0",
- },
- { .etype = st_end },
-};
-
-static const struct slot_table_entry witherspoon_gpu1[] = {
- {
- .etype = st_pluggable_slot,
- .location = ST_LOC_DEVFN(0xa0,0),
- .name = "GPU1",
- },
- { .etype = st_end },
-};
-
-static const struct slot_table_entry witherspoon_gpu2[] = {
- {
- .etype = st_pluggable_slot,
- .location = ST_LOC_DEVFN(0xc0,0),
- .name = "GPU2",
- },
- { .etype = st_end },
-};
-
-static const struct slot_table_entry witherspoon_gpu3[] = {
- {
- .etype = st_pluggable_slot,
- .location = ST_LOC_DEVFN(0x60,0),
- .name = "GPU3",
- },
- { .etype = st_end },
-};
-
-static const struct slot_table_entry witherspoon_gpu4[] = {
- {
- .etype = st_pluggable_slot,
- .location = ST_LOC_DEVFN(0x80,0),
- .name = "GPU4",
- },
- { .etype = st_end },
-};
-
-static const struct slot_table_entry witherspoon_gpu5[] = {
- {
- .etype = st_pluggable_slot,
- .location = ST_LOC_DEVFN(0xa0,0),
- .name = "GPU5",
- },
- { .etype = st_end },
-};
-
-static const struct slot_table_entry witherspoon_plx0_down[] = {
- {
- .etype = st_builtin_dev,
- .location = ST_LOC_DEVFN(0x4a,0),
- .children = witherspoon_gpu0,
- .name = "GPU0 down",
- },
- {
- .etype = st_builtin_dev,
- .location = ST_LOC_DEVFN(0x4b,0),
- .children = witherspoon_gpu1,
- .name = "GPU1 down",
- },
- {
- .etype = st_builtin_dev,
- .location = ST_LOC_DEVFN(0x4c,0),
- .children = witherspoon_gpu2,
- .name = "GPU2 down",
- },
- { .etype = st_end },
-};
-
-static const struct slot_table_entry witherspoon_plx1_down[] = {
- {
- .etype = st_builtin_dev,
- .location = ST_LOC_DEVFN(0x44,0),
- .children = witherspoon_gpu3,
- .name = "GPU3 down",
- },
- {
- .etype = st_builtin_dev,
- .location = ST_LOC_DEVFN(0x45,0),
- .children = witherspoon_gpu4,
- .name = "GPU4 down",
- },
- {
- .etype = st_builtin_dev,
- .location = ST_LOC_DEVFN(0x4d,0),
- .children = witherspoon_gpu5,
- .name = "GPU5 down",
- },
- { .etype = st_end },
-};
-
-static const struct slot_table_entry witherspoon_plx0_up[] = {
- {
- .etype = st_builtin_dev,
- .location = ST_LOC_DEVFN(0x20,0),
- .children = witherspoon_plx0_down,
- },
- { .etype = st_end },
-};
-
-static const struct slot_table_entry witherspoon_plx1_up[] = {
- {
- .etype = st_builtin_dev,
- .location = ST_LOC_DEVFN(0x20,0),
- .children = witherspoon_plx1_down,
- },
- { .etype = st_end },
-};
-
-static const struct slot_table_entry witherspoon_plx0_phb[] = {
- {
- .etype = st_builtin_dev,
- .location = ST_LOC_DEVFN(0,0),
- .children = witherspoon_plx0_up,
- },
- { .etype = st_end },
-};
-
-static const struct slot_table_entry witherspoon_plx1_phb[] = {
- {
- .etype = st_builtin_dev,
- .location = ST_LOC_DEVFN(0,0),
- .children = witherspoon_plx1_up,
- },
- { .etype = st_end },
-};
-
-static const struct slot_table_entry witherspoon_npu0_slots[] = {
- {
- .etype = st_npu_slot,
- .location = ST_LOC_NPU_GROUP(0),
- .name = "GPU0",
- },
- {
- .etype = st_npu_slot,
- .location = ST_LOC_NPU_GROUP(1),
- .name = "GPU1",
- },
- {
- .etype = st_npu_slot,
- .location = ST_LOC_NPU_GROUP(2),
- .name = "GPU2",
- },
- { .etype = st_end },
-};
-
-static const struct slot_table_entry witherspoon_npu8_slots[] = {
- {
- .etype = st_npu_slot,
- .location = ST_LOC_NPU_GROUP(0),
- .name = "GPU3",
- },
- {
- .etype = st_npu_slot,
- .location = ST_LOC_NPU_GROUP(1),
- .name = "GPU4",
- },
- {
- .etype = st_npu_slot,
- .location = ST_LOC_NPU_GROUP(2),
- .name = "GPU5",
- },
- { .etype = st_end },
-};
-
-/*
- * Slot numbering:
- *
- * slot 1 - x4 slot
- * slot 2 - shared slot, 8x to each chip's PHB3
- * slot 3 - 16x \w CAPI, second chip
- * slot 4 - 16x \w CAPI, first chip
- */
-
-static const struct slot_table_entry witherspoon_phb_table[] = {
- ST_PHB_ENTRY(0, 0, witherspoon_slot4),
- ST_PHB_ENTRY(0, 3, witherspoon_slot2_shared),
- ST_PHB_ENTRY(0, 4, witherspoon_plx0_phb),
- ST_PHB_ENTRY(0, 7, witherspoon_npu0_slots),
-
- ST_PHB_ENTRY(8, 0, witherspoon_slot3),
- ST_PHB_ENTRY(8, 3, witherspoon_slot2_shared),
- ST_PHB_ENTRY(8, 4, witherspoon_slot1),
- ST_PHB_ENTRY(8, 5, witherspoon_plx1_phb),
- ST_PHB_ENTRY(8, 8, witherspoon_npu8_slots),
-
- { .etype = st_end },
-};
-
-#define NPU_BASE 0x5011000
-#define NPU_SIZE 0x2c
-#define NPU_INDIRECT0 0x8000000009010c3f
-#define NPU_INDIRECT1 0x800000000c010c3f
-
-static void create_link(struct dt_node *npu, int group, int index)
-{
- struct dt_node *link;
- uint32_t lane_mask;
- uint64_t phy;
- char namebuf[32];
-
- snprintf(namebuf, sizeof(namebuf), "link@%x", index);
- link = dt_new(npu, namebuf);
-
- dt_add_property_string(link, "compatible", "ibm,npu-link");
- dt_add_property_cells(link, "ibm,npu-link-index", index);
-
- if (!(index / 3))
- phy = NPU_INDIRECT0;
- else
- phy = NPU_INDIRECT1;
-
- switch (index % 3) {
- case 0:
- lane_mask = 0xf1e000;
- break;
-
- case 1:
- lane_mask = 0x0e1870;
- break;
-
- case 2:
- lane_mask = 0x00078f;
- break;
-
- default:
- assert(0);
- }
-
- dt_add_property_u64s(link, "ibm,npu-phy", phy);
- dt_add_property_cells(link, "ibm,npu-lane-mask", lane_mask);
- dt_add_property_cells(link, "ibm,npu-group-id", group);
-}
-
-static void dt_create_npu2(void)
-{
- struct dt_node *xscom, *npu;
- char namebuf[32];
- int phb_index = 7;
- int npu_index = 0;
-
- dt_for_each_compatible(dt_root, xscom, "ibm,xscom") {
- snprintf(namebuf, sizeof(namebuf), "npu@%x", NPU_BASE);
- npu = dt_new(xscom, namebuf);
- dt_add_property_cells(npu, "reg", NPU_BASE, NPU_SIZE);
- dt_add_property_strings(npu, "compatible", "ibm,power9-npu");
-
- dt_add_property_cells(npu, "ibm,phb-index", phb_index++);
- dt_add_property_cells(npu, "ibm,npu-index", npu_index++);
- dt_add_property_cells(npu, "ibm,npu-links", 6);
-
- create_link(npu, 0, 0);
- create_link(npu, 0, 1);
- create_link(npu, 1, 2);
- create_link(npu, 1, 3);
- create_link(npu, 2, 4);
- create_link(npu, 2, 5);
- }
-}
-
static bool witherspoon_probe(void)
{
if (!dt_node_is_compatible(dt_root, "ibm,witherspoon"))
return false;
- if (!dt_find_by_name(dt_root, "ibm,pcie-slots"))
- return false;
- if (!dt_find_compatible_node(dt_root, NULL, "ibm,power9-npu"))
- return false;
/* Lot of common early inits here */
astbmc_early_init();
@@ -351,37 +44,6 @@ static bool witherspoon_probe(void)
return true;
}
-static bool old_witherspoon_probe(void)
-{
- struct dt_node *slots, *npu;
-
- if (!dt_node_is_compatible(dt_root, "ibm,witherspoon"))
- return false;
-
- slots = dt_find_by_name(dt_root, "ibm,pcie-slots");
- npu = dt_find_compatible_node(dt_root, NULL, "ibm,power9-npu");
-
- if (slots && npu)
- 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);
-
-
- /* Add NPU2 bindings */
- if (!npu)
- dt_create_npu2();
-
- slot_table_init(witherspoon_phb_table);
-
- prerror("!!! Old witherspoon firmware detected. Update hostboot and fix the Planar VPD !!!\n");
-
- return true;
-}
-
static void phb4_activate_shared_slot_witherspoon(struct proc_chip *chip)
{
uint64_t val;
@@ -488,21 +150,3 @@ DECLARE_PLATFORM(witherspoon) = {
.pci_get_slot_info = dt_slot_get_slot_info,
};
-
-DECLARE_PLATFORM(old_witherspoon) = {
- .name = "Witherspoon (old)",
- .probe = old_witherspoon_probe,
- .init = astbmc_init,
- .pre_pci_fixup = witherspoon_pre_pci_fixup,
- .start_preload_resource = flash_start_preload_resource,
- .resource_loaded = flash_resource_loaded,
- .bmc = &astbmc_openbmc,
- .cec_power_down = astbmc_ipmi_power_down,
- .cec_reboot = astbmc_ipmi_reboot,
- .elog_commit = ipmi_elog_commit,
- .exit = ipmi_wdt_final_reset,
- .terminate = ipmi_terminate,
-
- .pci_get_slot_info = slot_table_get_slot_info,
- .pci_probe_complete = check_all_slot_table,
-};
--
2.11.0
More information about the Skiboot
mailing list