bpmpfw reliability fix
This commit is contained in:
1 parent
1990b1b66c
commit
ba07273675
3 files changed
+18
-23
No files matched your search
@@ -8,3 +8,4 @@ build
|
||||
Source/hekate
|
||||
dist/*
|
||||
!dist/.gitignore
|
||||
Source/hoc-clk/sysmodule/data/bpmpfw.bin
|
||||
@@ -20,6 +20,15 @@ for arg in "$@"; do
|
||||
done
|
||||
|
||||
echo
|
||||
echo "*** Compiling bpmpfw ***"
|
||||
pushd "$ROOT_DIR/bpmpfw"
|
||||
make -j$CORES
|
||||
popd > /dev/null
|
||||
|
||||
mkdir -p "$ROOT_DIR/sysmodule/data"
|
||||
cp -vf "$ROOT_DIR/bpmpfw/out/bpmpfw.bin" "$ROOT_DIR/sysmodule/data/bpmpfw.bin"
|
||||
echo
|
||||
|
||||
echo "*** Compiling hoc-clk ***"
|
||||
TITLE_ID="$(grep -oP '"title_id":\s*"0x\K(\w+)' "$ROOT_DIR/sysmodule/perms.json")"
|
||||
|
||||
@@ -42,15 +51,6 @@ mkdir -p "$DIST_DIR/switch/.overlays"
|
||||
cp -vf "$ROOT_DIR/overlay/out/horizon-oc-overlay.ovl" "$DIST_DIR/switch/.overlays/horizon-oc-overlay.ovl"
|
||||
echo
|
||||
|
||||
echo "*** Compiling bpmpfw ***"
|
||||
pushd "$ROOT_DIR/bpmpfw"
|
||||
make -j$CORES
|
||||
popd > /dev/null
|
||||
|
||||
mkdir -p "$DIST_DIR/config/horizon-oc"
|
||||
cp -vf "$ROOT_DIR/bpmpfw/out/bpmpfw.bin" "$DIST_DIR/config/horizon-oc/bpmpfw.bin"
|
||||
echo
|
||||
|
||||
echo "*** Copying assets ***"
|
||||
mkdir -p "$DIST_DIR/config/horizon-oc"
|
||||
cp -vf "$ROOT_DIR/config.ini.template" "$DIST_DIR/config/horizon-oc/config.ini.template"
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include <cstdio>
|
||||
#include <cstring>
|
||||
#include <switch.h>
|
||||
|
||||
@@ -25,6 +24,8 @@
|
||||
#include "../mapping/mem_map.hpp"
|
||||
#include "bpmp.hpp"
|
||||
|
||||
#include "bpmpfw_bin.h"
|
||||
|
||||
namespace bpmp {
|
||||
|
||||
namespace {
|
||||
@@ -60,6 +61,7 @@ namespace bpmp {
|
||||
constexpr u32 FwStagingSize = 0x8000;
|
||||
constexpr u64 WorkRamPhysBase = FwIramPhysBase + FwStagingSize; // matches bpmpfw's WorkRamStart
|
||||
|
||||
/* secmon will return error unless we apply thiss workaround */
|
||||
alignas(4096) u8 s_fwStageBuf[FwStagingSize];
|
||||
|
||||
HocClkBpmpSharedInfo s_sharedInfo = {};
|
||||
@@ -108,23 +110,15 @@ namespace bpmp {
|
||||
return (Result)1;
|
||||
}
|
||||
|
||||
std::memset(s_fwStageBuf, 0, sizeof(s_fwStageBuf));
|
||||
|
||||
FILE *f = fopen("sdmc:/config/horizon-oc/bpmpfw.bin", "rb");
|
||||
if (!f) {
|
||||
fileUtils::LogLine("[bpmp] StartBpmfwExecution: bpmpfw.bin not found");
|
||||
const size_t fw_size = bpmpfw_bin_size;
|
||||
if (fw_size == 0 || fw_size > FwStagingSize) {
|
||||
fileUtils::LogLine("[bpmp] StartBpmfwExecution: bpmpfw of %zu bytes is invalid (should not happen)!", fw_size);
|
||||
return (Result)1;
|
||||
}
|
||||
|
||||
const size_t fw_size = fread(s_fwStageBuf, 1, sizeof(s_fwStageBuf), f);
|
||||
fclose(f);
|
||||
std::memcpy(s_fwStageBuf, bpmpfw_bin, fw_size);
|
||||
|
||||
if (fw_size == 0) {
|
||||
fileUtils::LogLine("[bpmp] StartBpmfwExecution: bpmpfw.bin is empty");
|
||||
return (Result)1;
|
||||
}
|
||||
|
||||
fileUtils::LogLine("[bpmp] StartBpmfwExecution: loaded %zu bytes, loading at 0x%llx",
|
||||
fileUtils::LogLine("[bpmp] StartBpmfwExecution: loading %zu bytes at 0x%llx",
|
||||
fw_size, static_cast<unsigned long long>(FwIramPhysBase));
|
||||
|
||||
/* Set BPMP reset */
|
||||
|
||||
Reference in new issue
Block a user