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