aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuluTHSu <Lulu_Su@wistron.com>2020-10-30 10:22:29 +0800
committerOliver O'Halloran <oohall@gmail.com>2020-11-02 12:37:01 +1100
commit5262cdd1b99f77bca5951fc8132f9795ef0c2b87 (patch)
tree440a2ae6803e3b5cf22d0b62616e31927f8c3fd3
parent233ade2f6ffdfa406100276784eb447d062fe8e7 (diff)
downloadskiboot-5262cdd1b99f77bca5951fc8132f9795ef0c2b87.zip
skiboot-5262cdd1b99f77bca5951fc8132f9795ef0c2b87.tar.gz
skiboot-5262cdd1b99f77bca5951fc8132f9795ef0c2b87.tar.bz2
mowgli: Limit slot1 to Gen3 by default
Refer to the spec. of mowgli, limit the slot to Gen3 speed. For mowgli platform spec. Cc: skiboot-stable@lists.ozlabs.org Signed-off-by: LuluTHSu <Lulu_Su@wistron.com> Signed-off-by: Oliver O'Halloran <oohall@gmail.com>
-rw-r--r--hw/phb4.c21
-rw-r--r--include/phb4.h1
-rw-r--r--platforms/astbmc/mowgli.c16
3 files changed, 38 insertions, 0 deletions
diff --git a/hw/phb4.c b/hw/phb4.c
index 17a233f..de10bb0 100644
--- a/hw/phb4.c
+++ b/hw/phb4.c
@@ -2991,6 +2991,27 @@ static unsigned int phb4_get_max_link_speed(struct phb4 *p, struct dt_node *np)
return max_link_speed;
}
+/*
+ * Has the same effect as the ibm,max-link-speed property.
+ * i.e. sets the default link speed, while allowing NVRAM
+ * overrides, etc to still take effect.
+ */
+void phb4_set_dt_max_link_speed(struct phb4 *p, int new_max)
+{
+ uint64_t scr;
+ int max;
+
+ /* take into account nvram settings, etc */
+ if (pcie_max_link_speed)
+ max = pcie_max_link_speed;
+ else
+ max = new_max;
+
+ scr = phb4_read_reg(p, PHB_PCIE_SCR);
+ scr = SETFIELD(PHB_PCIE_SCR_MAXLINKSPEED, scr, max);
+ phb4_write_reg(p, PHB_PCIE_SCR, scr);
+}
+
static void phb4_assert_perst(struct pci_slot *slot, bool assert)
{
struct phb4 *p = phb_to_phb4(slot->phb);
diff --git a/include/phb4.h b/include/phb4.h
index abba2d9..47a46b7 100644
--- a/include/phb4.h
+++ b/include/phb4.h
@@ -259,4 +259,5 @@ static inline int phb4_get_opal_id(unsigned int chip_id, unsigned int index)
void phb4_pec2_dma_engine_realloc(struct phb4 *p);
+void phb4_set_dt_max_link_speed(struct phb4 *p, int new_max);
#endif /* __PHB4_H */
diff --git a/platforms/astbmc/mowgli.c b/platforms/astbmc/mowgli.c
index 9bfe7a4..0246bff 100644
--- a/platforms/astbmc/mowgli.c
+++ b/platforms/astbmc/mowgli.c
@@ -12,6 +12,8 @@
#include <psi.h>
#include <npu-regs.h>
#include <secvar.h>
+#include <pci.h>
+#include <phb4.h>
#include "astbmc.h"
@@ -71,6 +73,19 @@ static int mowgli_secvar_init(void)
return secvar_main(secboot_tpm_driver, edk2_compatible_v1);
}
+/*
+ * Limit PHB0/(pec0) to gen3 speeds.
+ */
+static void mowgli_setup_phb(struct phb *phb, unsigned int __unused index)
+{
+ struct phb4 *p = phb_to_phb4(phb);
+
+ if (p->pec == 0) {
+ phb4_set_dt_max_link_speed(p, 3);
+ prlog(PR_DEBUG, "Mowgli: Force the PHB%d Speed to Gen3.\n", p->pec);
+ }
+}
+
DECLARE_PLATFORM(mowgli) = {
.name = "Mowgli",
.probe = mowgli_probe,
@@ -80,6 +95,7 @@ DECLARE_PLATFORM(mowgli) = {
.bmc = &bmc_plat_ast2500_openbmc,
.pci_get_slot_info = slot_table_get_slot_info,
.pci_probe_complete = check_all_slot_table,
+ .pci_setup_phb = mowgli_setup_phb,
.cec_power_down = astbmc_ipmi_power_down,
.cec_reboot = astbmc_ipmi_reboot,
.elog_commit = ipmi_elog_commit,