Move procedures into separate files.
Procedures will now be in procedures/<chip>/.
The next commit will have the procedures register
themselves so they won't be in a hardcoded list.
Change-Id: I0ff90afe2b51aaff25b5c25bf87070c820323e30
Signed-off-by: Matt Spinler <spinler@us.ibm.com>
diff --git a/Makefile.am b/Makefile.am
index 73ea204..57c0e2c 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -6,9 +6,10 @@
openpower_proc_control_SOURCES = \
proc_control.cpp \
cfam_access.cpp \
- p9_procedures.cpp \
filedescriptor.cpp \
- targeting.cpp
+ targeting.cpp \
+ procedures/p9/start_host.cpp \
+ procedures/p9/vcs_workaround.cpp
openpower_proc_control_LDFLAGS = $(PHOSPHOR_LOGGING_LIBS) -lstdc++fs
openpower_proc_control_CXXFLAGS = $(PHOSPHOR_LOGGING_CFLAGS)
diff --git a/p9_procedures.cpp b/procedures/p9/start_host.cpp
similarity index 71%
rename from p9_procedures.cpp
rename to procedures/p9/start_host.cpp
index 188fec0..f781e68 100644
--- a/p9_procedures.cpp
+++ b/procedures/p9/start_host.cpp
@@ -28,6 +28,11 @@
using namespace openpower::cfam::p9;
using namespace openpower::targeting;
+
+/**
+ * @brief Starts the self boot engine on P9 position 0 to kick off a boot.
+ * @return void
+ */
void startHost()
{
Targeting targets;
@@ -36,7 +41,6 @@
log<level::INFO>("Running P9 procedure startHost",
entry("NUM_PROCS=%d", targets.size()));
-
//Ensure asynchronous clock mode is set
writeReg(master, P9_LL_MODE_REG, 0x00000001);
@@ -68,32 +72,6 @@
}
-void vcsWorkaround()
-{
- Targeting targets;
- const auto& master = *(targets.begin());
-
- log<level::INFO>("Running P9 procedure vcsWorkaround",
- entry("NUM_PROCS=%d", targets.size()));
-
- //Set asynchronous clock mode
- writeReg(master, P9_LL_MODE_REG, 0x00000001);
-
- for (const auto& t : targets)
- {
- //Unfence PLL controls
- writeRegWithMask(t, P9_ROOT_CTRL0,
- 0x00000000, 0x00010000);
-
- //Assert Perv chiplet endpoint reset
- writeRegWithMask(t, P9_PERV_CTRL0,
- 0x40000000, 0x40000000);
-
- //Enable Nest PLL
- writeRegWithMask(t, P9_PERV_CTRL0,
- 0x00000001, 0x00000001);
- }
-}
-
}
}
+
diff --git a/p9_procedures.cpp b/procedures/p9/vcs_workaround.cpp
similarity index 61%
copy from p9_procedures.cpp
copy to procedures/p9/vcs_workaround.cpp
index 188fec0..64b41c1 100644
--- a/p9_procedures.cpp
+++ b/procedures/p9/vcs_workaround.cpp
@@ -28,46 +28,11 @@
using namespace openpower::cfam::p9;
using namespace openpower::targeting;
-void startHost()
-{
- Targeting targets;
- const auto& master = *(targets.begin());
- log<level::INFO>("Running P9 procedure startHost",
- entry("NUM_PROCS=%d", targets.size()));
-
-
- //Ensure asynchronous clock mode is set
- writeReg(master, P9_LL_MODE_REG, 0x00000001);
-
- //Clock mux select override
- for (const auto& t : targets)
- {
- writeRegWithMask(t, P9_ROOT_CTRL8,
- 0x0000000C, 0x0000000C);
- }
-
- //Enable P9 checkstop to be reported to the BMC
-
- //Setup FSI2PIB to report checkstop
- writeReg(master, P9_FSI_A_SI1S, 0x20000000);
-
- //Enable Xstop/ATTN interrupt
- writeReg(master, P9_FSI2PIB_TRUE_MASK, 0x60000000);
-
- //Arm it
- writeReg(master, P9_FSI2PIB_INTERRUPT, 0xFFFFFFFF);
-
- //Kick off the SBE to start the boot
-
- //First ensure ISTEP stepping isn't enabled
- writeReg(master, P9_SCRATCH_REGISTER_8, 0x20000000);
-
- //Start the SBE
- writeRegWithMask(master, P9_CBS_CS, 0x80000000, 0x80000000);
-}
-
-
+/**
+ * @brief Performs the 'VCS Workaround' on all P9s in the system.
+ * @return void
+ */
void vcsWorkaround()
{
Targeting targets;