Update RK3326 Game Console Device Tree and related configurations

- Modify joypad compatibility to include "archr-joypad" in the device tree source.
- Adjust internal display settings to use the same reset GPIO and add enable GPIO.
- Remove SDIO card detect GPIO and mark it as non-removable.
- Update the joypad driver in the MIPI generator to use "archr-joypad".
- Fix Vulkan custom dispatchers to restrict header version checks.
- Add system manager timeout overrides for improved shutdown performance.
- Update kernel configuration to version 6.12.79 and enable BFQ I/O scheduler.
- Clean up GPU governor settings in post-update scripts.
- Update PPSSPP emulator to version 1.20.2 and apply necessary patches.
- Adjust SDL2 and Mesa package dependencies and versions.
- Update Vulkan headers and loader to version 1.4.347.
- Add udev rules for BFQ scheduler and systemd configuration for shutdown timeout.
- Implement input sense adjustments for better button mapping.
- Add clock speed settings to EmulationStation configuration.
- Disable rumble motor on boot to prevent unwanted vibrations.
This commit is contained in:
Douglas Teles
2026-04-02 12:23:19 -03:00
parent d56a9c4f7f
commit c7017775b1
33 changed files with 164 additions and 82 deletions
@@ -42,7 +42,7 @@
};
joypad: odroidgo3-joypad {
compatible = "odroidgo3-joypad";
compatible = "archr-joypad", "odroidgo3-joypad";
pwms = <&pwm0 0 200000000 0>;
pwm-names = "enable";
rumble-boost-weak = <0x0000>;
@@ -176,13 +176,18 @@
};
};
/* Soysauce panel: different reset GPIO + additional enable GPIO */
/* Soysauce panel: same reset GPIO as base (GPIO3_PC0), add enable GPIO */
&internal_display {
compatible = "archr,generic-dsi", "rocknix,generic-dsi";
reset-gpios = <&gpio3 RK_PB0 GPIO_ACTIVE_LOW>;
enable-gpios = <&gpio1 RK_PC2 GPIO_ACTIVE_HIGH>;
};
/* Soysauce uses GPIO3_PB6 for BTN-A, not sdio card detect */
&sdio {
/delete-property/ cd-gpios;
non-removable;
};
&rk817_codec {
spk-ctl-gpios = <&gpio3 RK_PC4 GPIO_ACTIVE_HIGH>;
};
@@ -215,9 +220,6 @@
};
panel {
panel_reset: panel-reset {
rockchip,pins = <3 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>;
};
panel_enable: panel-enable {
rockchip,pins = <1 RK_PC2 RK_FUNC_GPIO &pcfg_pull_none>;
};
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
# Linux/arm64 6.12.61 Kernel Configuration
# Linux/arm64 6.12.79 Kernel Configuration
#
CONFIG_CC_VERSION_TEXT="aarch64-archr-linux-gnu-gcc-14.2.0 (GCC) 14.2.0"
CONFIG_CC_IS_GCC=y
@@ -818,7 +818,8 @@ CONFIG_BLK_PM=y
#
CONFIG_MQ_IOSCHED_DEADLINE=y
CONFIG_MQ_IOSCHED_KYBER=y
# CONFIG_IOSCHED_BFQ is not set
CONFIG_IOSCHED_BFQ=y
CONFIG_BFQ_GROUP_IOSCHED=y
# end of IO Schedulers
CONFIG_PADATA=y
@@ -105,14 +105,15 @@ get_gpu_performance_level() {
gpu_performance_level() {
case ${1} in
profile_peak)
set_gpu_gov performance
;;
auto|profile_standard)
auto|default)
set_gpu_gov ondemand
;;
low)
set_gpu_gov powersave
*)
set_gpu_gov ${1}
;;
esac
}
get_available_gpu_governors() {
echo "default"; tr " " "\n" < $GPU_FREQ/available_governors | grep \[a-z\]
}
@@ -293,3 +293,8 @@ if [ -e "/storage/.config/duckstation/settings.ini" ]; then
# no confirmation popup
sed -i 's/ConfirmPowerOff = true/ConfirmPowerOff = false/' /storage/.config/duckstation/settings.ini
fi
# Clean old GPU 'governor' values
sed -i '/gpuperf=low/d' /storage/.config/system/configs/system.cfg
sed -i '/gpuperf=profile_standard/d' /storage/.config/system/configs/system.cfg
sed -i '/gpuperf=profile_peak/d' /storage/.config/system/configs/system.cfg
@@ -20,7 +20,7 @@
################################################################################
PKG_NAME="ppsspp-lr"
PKG_VERSION="e49c0bd8836a8a8f678565357773386f1174d3f5"
PKG_VERSION="afbc66a318b86432642b532c575241f3716642ef" # v1.20.2
PKG_LICENSE="GPLv2"
PKG_SITE="https://github.com/hrydgard/ppsspp"
PKG_URL="https://github.com/hrydgard/ppsspp.git"
@@ -1,8 +1,7 @@
diff --git a/Core/System.cpp b/Core/System.cpp
index cb6fc34fa..829a5795a 100644
--- a/Core/System.cpp
+++ b/Core/System.cpp
@@ -619,12 +619,7 @@ std::string PSP_GetLoading() {
diff --git a/Core/Util/PathUtil.cpp b/Core/Util/PathUtil.cpp
--- a/Core/Util/PathUtil.cpp
+++ b/Core/Util/PathUtil.cpp
@@ -45,12 +45,7 @@
Path GetSysDirectory(PSPDirectories directoryType) {
const Path &memStickDirectory = g_Config.memStickDirectory;
Path pspDirectory;
@@ -13,6 +12,6 @@ index cb6fc34fa..829a5795a 100644
- pspDirectory = memStickDirectory / "PSP";
- }
+ pspDirectory = memStickDirectory / "PSP";
switch (directoryType) {
case DIRECTORY_PSP:
@@ -1,10 +1,10 @@
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -395,6 +395,7 @@
@@ -413,6 +413,7 @@
# NEON optimizations in libpng17 seem to cause PNG load errors, see #14485.
add_compile_definitions(PNG_ARM_NEON_OPT=0)
+ add_compile_options(-Ofast -fno-tree-slp-vectorize)
add_compile_options(-Wall -Werror=return-type -Wno-unused-function -Wno-sign-compare -Wno-unused-but-set-variable "$<$<COMPILE_LANGUAGE:CXX>:-Wno-reorder>" -Wno-unknown-pragmas -Wno-unused-value -Wno-unused-variable)
add_compile_options(-Wall -Werror=return-type -Wno-unused-function -Wno-sign-compare -Wno-unused-but-set-variable "$<$<COMPILE_LANGUAGE:CXX>:-Wno-reorder>" -Wno-unknown-pragmas -Wno-unused-value -Wno-unused-variable -Wno-error=incompatible-pointer-types)
if(NOT CLANG)
# This one is very useful but has many false positives.
@@ -1,10 +1,10 @@
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -396,6 +396,7 @@
@@ -414,6 +414,7 @@
add_compile_definitions(PNG_ARM_NEON_OPT=0)
add_compile_options(-Ofast -fno-tree-slp-vectorize)
+ add_compile_options(-mno-outline-atomics)
add_compile_options(-Wall -Werror=return-type -Wno-unused-function -Wno-sign-compare -Wno-unused-but-set-variable "$<$<COMPILE_LANGUAGE:CXX>:-Wno-reorder>" -Wno-unknown-pragmas -Wno-unused-value -Wno-unused-variable)
add_compile_options(-Wall -Werror=return-type -Wno-unused-function -Wno-sign-compare -Wno-unused-but-set-variable "$<$<COMPILE_LANGUAGE:CXX>:-Wno-reorder>" -Wno-unknown-pragmas -Wno-unused-value -Wno-unused-variable -Wno-error=incompatible-pointer-types)
if(NOT CLANG)
# This one is very useful but has many false positives.
@@ -0,0 +1,45 @@
--- a/libretro/libretro_vulkan.cpp
+++ b/libretro/libretro_vulkan.cpp
@@ -109,27 +109,34 @@ static VKAPI_ATTR VkResult VKAPI_CALL vkCreateDevice_libretro(VkPhysicalDevice p
newInfo.enabledExtensionCount = (uint32_t)enabledExtensionNames.size();
newInfo.ppEnabledExtensionNames = newInfo.enabledExtensionCount ? enabledExtensionNames.data() : nullptr;
- // Then check for VkPhysicalDeviceFeatures2 chaining or pEnabledFeatures to enable required features. Note that when both
- // structs are present Features2 takes precedence. vkCreateDevice parameters don't give us a simple way to detect
- // VK_KHR_get_physical_device_properties2 usage so we'll always try both paths.
+ // Check for VkPhysicalDeviceFeatures2 in pNext chain. Per Vulkan spec, pEnabledFeatures
+ // must be NULL when VkPhysicalDeviceFeatures2 is present in pNext.
std::unordered_map<VkPhysicalDeviceFeatures *, VkPhysicalDeviceFeatures> originalFeaturePointers;
VkPhysicalDeviceFeatures placeholderEnabledFeatures{};
+ bool hasFeatures2InChain = false;
for (const VkBaseOutStructure *next = (const VkBaseOutStructure *)pCreateInfo->pNext; next != nullptr;) {
if (next->sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2) {
VkPhysicalDeviceFeatures *enabledFeatures = &((VkPhysicalDeviceFeatures2 *)next)->features;
originalFeaturePointers.try_emplace(enabledFeatures, *enabledFeatures);
+ hasFeatures2InChain = true;
}
next = (const VkBaseOutStructure *)next->pNext;
}
- if (newInfo.pEnabledFeatures) {
- placeholderEnabledFeatures = *newInfo.pEnabledFeatures;
- }
+ if (!hasFeatures2InChain) {
+ // Only use pEnabledFeatures when VkPhysicalDeviceFeatures2 is NOT in pNext chain.
+ if (newInfo.pEnabledFeatures) {
+ placeholderEnabledFeatures = *newInfo.pEnabledFeatures;
+ }
- newInfo.pEnabledFeatures = &placeholderEnabledFeatures;
- originalFeaturePointers.try_emplace((VkPhysicalDeviceFeatures *)newInfo.pEnabledFeatures, *newInfo.pEnabledFeatures);
+ newInfo.pEnabledFeatures = &placeholderEnabledFeatures;
+ originalFeaturePointers.try_emplace((VkPhysicalDeviceFeatures *)newInfo.pEnabledFeatures, *newInfo.pEnabledFeatures);
+ } else {
+ // Ensure pEnabledFeatures is NULL when features2 is used (Vulkan spec requirement).
+ newInfo.pEnabledFeatures = nullptr;
+ }
for (const auto& pair : originalFeaturePointers) {
for (uint32_t i = 0; i < sizeof(VkPhysicalDeviceFeatures) / sizeof(VkBool32); i++) {
@@ -4,7 +4,7 @@
# Copyright (C) 2022-present JELOS (https://github.com/JustEnoughLinuxOS)
. /etc/profile
set_kill set "-9 duckstation-mini"
set_kill set "-9 AppRun.wrapped"
# Filesystem vars
IMMUTABLE_CONF_DIR="/usr/config/duckstation"
@@ -120,7 +120,10 @@ fi
fi
#Retroachievements
/usr/bin/cheevos_duckstation.sh
# Disabled, not working. Seems like Duckstation changed the token encruption...
# /usr/bin/cheevos_duckstation.sh
sed -i '/\[Cheevos\]/,/^\s*$/s/Enabled =.*/Enabled = false/' ${CONF_FILE}
#Run Duckstation
${EMUPERF} duckstation-sa -fullscreen -bigpicture -nogui -- "${1}" > /dev/null 2>&1
@@ -5,7 +5,7 @@
PKG_NAME="ppsspp-sa"
PKG_SITE="https://github.com/hrydgard/ppsspp"
PKG_URL="${PKG_SITE}.git"
PKG_VERSION="eb859735feddf88dbe651763f366a7705612113a" # v1.20.1
PKG_VERSION="afbc66a318b86432642b532c575241f3716642ef" # v1.20.2
CHEAT_DB_VERSION="7c9fe1ae71155626cea767aed53f968de9f4051f" # Update cheat.db (17/01/2026)
PKG_LICENSE="GPLv2"
PKG_DEPENDS_TARGET="toolchain libzip SDL2 zlib zip"
@@ -74,26 +74,22 @@ index 04c16ca7a0..cecc4b7f0f 100644
g_display.pixel_yres = g_DesktopHeight;
}
diff --git a/UI/MainScreen.cpp b/UI/MainScreen.cpp
index d7a97347b1..531997fba0 100644
--- a/UI/MainScreen.cpp
+++ b/UI/MainScreen.cpp
@@ -1454,19 +1454,6 @@ void MainScreen::CreateViews() {
@@ -1459,18 +1459,6 @@
LinearLayout *rightColumnItems = new LinearLayout(ORIENT_VERTICAL, new LinearLayoutParams(FILL_PARENT, WRAP_CONTENT));
rightColumnItems->SetSpacing(0.0f);
ViewGroup *logo = new LogoView(false, new LinearLayoutParams(FILL_PARENT, 80.0f));
-#if !defined(MOBILE_DEVICE)
- auto gr = GetI18NCategory(I18NCat::GRAPHICS);
- ImageID icon(g_Config.bFullScreen ? "I_RESTORE" : "I_FULLSCREEN");
- UI::Button *fullscreenButton = logo->Add(new Button("", icon, new AnchorLayoutParams(48, 48, NONE, 0, 0, NONE, Centering::None)));
- Button *fullscreenButton = logo->Add(new Button("", ImageID(), new AnchorLayoutParams(48, 48, NONE, 0, 0, NONE, Centering::None)));
- fullscreenButton->SetIgnoreText(true);
- fullscreenButton->OnClick.Add([fullscreenButton](UI::EventParams &e) {
- if (fullscreenButton) {
- fullscreenButton->SetImageID(ImageID(!g_Config.bFullScreen ? "I_RESTORE" : "I_FULLSCREEN"));
- }
- fullscreenButton->OnClick.Add([](UI::EventParams &e) {
- g_Config.bFullScreen = !g_Config.bFullScreen;
- System_ApplyFullscreenState();
- });
- fullscreenButton->SetImageIDFunc([]() {
- return g_Config.bFullScreen ? ImageID("I_RESTORE") : ImageID("I_FULLSCREEN");
- });
-#endif
rightColumnItems->Add(logo);
LinearLayout *rightColumnChoices = rightColumnItems;
@@ -29,6 +29,7 @@ IRES=$(get_setting internal_resolution "${PLATFORM}" "${GAME}")
GRENDERER=$(get_setting graphics_backend "${PLATFORM}" "${GAME}")
SKIPB=$(get_setting skip_buffer_effects "${PLATFORM}" "${GAME}")
VSYNC=$(get_setting vsync "${PLATFORM}" "${GAME}")
CLOCK_SPEED=$(get_setting clock_speed "${PLATFORM}" "${GAME}")
#Set the cores to use
CORES=$(get_setting "cores" "${PLATFORM}" "${GAME}")
@@ -89,6 +90,15 @@ fi
sed -i '/^VSyncInterval =/c\VSyncInterval = False' ${CONF_DIR}/${PPSSPP_INI}
fi
#Clock Speed
if [ "${CLOCK_SPEED}" = "222" ]; then
sed -i '/^CPUSpeed =/c\CPUSpeed = 222' ${CONF_DIR}/${PPSSPP_INI}
elif [ "${CLOCK_SPEED}" = "333" ]; then
sed -i '/^CPUSpeed =/c\CPUSpeed = 333' ${CONF_DIR}/${PPSSPP_INI}
else
sed -i '/^CPUSpeed =/c\CPUSpeed = 0' ${CONF_DIR}/${PPSSPP_INI}
fi
#Retroachievements
/usr/bin/cheevos_ppsspp.sh
@@ -10,7 +10,7 @@ PKG_URL="https://www.libsdl.org/release/SDL2-${PKG_VERSION}.tar.gz"
PKG_DEPENDS_TARGET="toolchain alsa-lib systemd dbus pulseaudio libdrm SDL2:host"
PKG_LONGDESC="Simple DirectMedia Layer is a cross-platform development library designed to provide low level access to audio, keyboard, mouse, joystick, and graphics hardware."
PKG_BUILD_FLAGS="+speed"
PKG_DEPENDS_HOST="toolchain:host distutilscross:host"
PKG_DEPENDS_HOST="toolchain:host distutilscross:host libX11:host"
if [ ! "${OPENGL_SUPPORT}" = "no" ]; then
PKG_DEPENDS_TARGET+=" ${OPENGL} glu"
@@ -12,7 +12,7 @@ PKG_DEPENDS_TARGET="toolchain expat libdrm Mako:host pyyaml:host"
PKG_LONGDESC="Mesa is a 3-D graphics library with an API."
PKG_TOOLCHAIN="meson"
PKG_PATCH_DIRS+=" ${DEVICE}"
PKG_VERSION="26.0.2"
PKG_VERSION="26.0.4"
PKG_URL="https://gitlab.freedesktop.org/mesa/mesa/-/archive/mesa-${PKG_VERSION}/mesa-mesa-${PKG_VERSION}.tar.gz"
if listcontains "${GRAPHIC_DRIVERS}" "panfrost"; then
@@ -3,7 +3,7 @@
# Copyright (C) 2021-present Team LibreELEC (https://libreelec.tv)
PKG_NAME="vulkan-headers"
PKG_VERSION="1.4.332"
PKG_VERSION="1.4.347"
PKG_LICENSE="Apache-2.0"
PKG_SITE="https://github.com/KhronosGroup/Vulkan-Headers"
PKG_URL="https://github.com/KhronosGroup/Vulkan-Headers/archive/v${PKG_VERSION}.tar.gz"
@@ -3,7 +3,7 @@
# Copyright (C) 2021-present Team LibreELEC (https://libreelec.tv)
PKG_NAME="vulkan-loader"
PKG_VERSION="1.4.332"
PKG_VERSION="1.4.347"
PKG_LICENSE="Apache-2.0"
PKG_SITE="https://github.com/KhronosGroup/Vulkan-Loader"
PKG_URL="https://github.com/KhronosGroup/Vulkan-Loader/archive/v${PKG_VERSION}.tar.gz"
@@ -3,7 +3,7 @@
# Copyright (C) 2021-present Team LibreELEC (https://libreelec.tv)
PKG_NAME="vulkan-tools"
PKG_VERSION="1.4.332"
PKG_VERSION="1.4.347"
PKG_LICENSE="Apache-2.0"
PKG_SITE="https://github.com/KhronosGroup/Vulkan-Tools"
PKG_URL="https://github.com/KhronosGroup/Vulkan-tools/archive/v${PKG_VERSION}.tar.gz"
@@ -2,22 +2,5 @@
# SPDX-License-Identifier: GPL-2.0
# Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS)
. /etc/profile.d/001-functions
### Set the default performance scaling mode for a few systems.
for SYSTEM in dreamcast n64 ports psp psx saturn gba pcfx cdi
do
CPU_SETTING=$(get_setting ${SYSTEM}.cpugovernor)
if [ -z "${CPU_SETTING}" ]
then
set_setting ${SYSTEM}.cpugovernor performance
fi
GPU_SETTING=$(get_setting ${SYSTEM}.gpuperf)
if [ -z "${GPU_SETTING}" ]
then
set_setting ${SYSTEM}.gpuperf profile_peak
fi
done
# Need to set RA video driver to GL for libmali driver.
sed -i '/video_driver =/c\video_driver = "gl"' /storage/.config/retroarch/retroarch.cfg
@@ -15,7 +15,7 @@ case ${DEVICE} in
PKG_PATCH_DIRS+=" 6.12-LTS"
;;
*)
PKG_VERSION="b1405e8f82d26381ce94d79e47586531ea7a54db"
PKG_VERSION="422e192b7e3aa3140f34de34765b798817c1f749"
PKG_URL="http://github.com/archr/mali_kbase/archive/${PKG_VERSION}.tar.gz"
;;
esac

Some files were not shown because too many files have changed in this diff Show More