mob next [ci-skip] [ci skip] [skip ci]
lastFile:machines/anser/patches/aic8800-gpio-power.patch
This commit is contained in:
@@ -1,8 +1,70 @@
|
||||
{
|
||||
inputs,
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
aic8800-src = pkgs.fetchFromGitHub {
|
||||
owner = "radxa-pkg";
|
||||
repo = "aic8800";
|
||||
rev = "c9176c164b3dd154d8fc7ae23c5f0cfd6b6553a3";
|
||||
hash = "sha256-ZamZ+nerZRFiHxaLx9x5vnRaATKvY7FkBsfkzsdL3wc=";
|
||||
};
|
||||
|
||||
# Firmware - flat structure, uncompressed (driver uses filp_open, not request_firmware)
|
||||
aic8800-firmware = pkgs.stdenvNoCC.mkDerivation {
|
||||
pname = "aic8800-firmware";
|
||||
version = "2024.11.19";
|
||||
src = aic8800-src;
|
||||
dontBuild = true;
|
||||
installPhase = ''
|
||||
mkdir -p $out/lib/firmware/aic8800_fw/SDIO
|
||||
cp -r src/SDIO/driver_fw/fw/aic8800D80/* $out/lib/firmware/aic8800_fw/SDIO/
|
||||
'';
|
||||
};
|
||||
|
||||
aic8800-driver = config.boot.kernelPackages.callPackage (
|
||||
{ stdenv, kernel }:
|
||||
stdenv.mkDerivation {
|
||||
pname = "aic8800-driver";
|
||||
version = "2024.11.19-${kernel.version}";
|
||||
src = aic8800-src;
|
||||
nativeBuildInputs = kernel.moduleBuildDependencies;
|
||||
hardeningDisable = [ "pic" ];
|
||||
|
||||
patchPhase = ''
|
||||
runHook prePatch
|
||||
for p in debian/patches/fix-linux-6.1-build.patch \
|
||||
debian/patches/fix-linux-6.5-build.patch \
|
||||
debian/patches/fix-linux-6.7-build.patch \
|
||||
debian/patches/fix-linux-6.9-build.patch \
|
||||
debian/patches/fix-linux-6.12-build.patch \
|
||||
debian/patches/fix-sdio-firmware-path.patch \
|
||||
debian/patches/fix-sdio-fall-through.patch; do
|
||||
[ -f "$p" ] && patch -p1 < "$p" || true
|
||||
done
|
||||
patch -p1 < ${./patches/aic8800-gpio-power.patch} || true
|
||||
runHook postPatch
|
||||
'';
|
||||
|
||||
preBuild = "cd src/SDIO/driver_fw/driver/aic8800";
|
||||
|
||||
buildPhase = ''
|
||||
runHook preBuild
|
||||
make KDIR=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build \
|
||||
ARCH=arm64 CROSS_COMPILE= modules
|
||||
runHook postBuild
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
mkdir -p $out/lib/modules/${kernel.modDirVersion}/kernel/drivers/net/wireless/aic8800
|
||||
find . -name '*.ko' -exec cp {} $out/lib/modules/${kernel.modDirVersion}/kernel/drivers/net/wireless/aic8800/ \;
|
||||
runHook postInstall
|
||||
'';
|
||||
}
|
||||
) { };
|
||||
in
|
||||
{
|
||||
nixpkgs.hostPlatform = {
|
||||
system = "aarch64-linux";
|
||||
@@ -16,6 +78,18 @@
|
||||
boot.loader.grub.enable = false;
|
||||
boot.loader.generic-extlinux-compatible.enable = true;
|
||||
|
||||
boot.extraModulePackages = [ aic8800-driver ];
|
||||
boot.kernelModules = [
|
||||
"aic8800_bsp"
|
||||
"aic8800_fdrv"
|
||||
];
|
||||
|
||||
# Point directly to nix store path - available immediately, no compression
|
||||
boot.extraModprobeConfig = ''
|
||||
options aic8800_bsp aic_fw_path=${aic8800-firmware}/lib/firmware/aic8800_fw/SDIO skip_power_wait=1
|
||||
options aic8800_fdrv aicwf_dbg_level=0
|
||||
'';
|
||||
|
||||
hardware.enableRedistributableFirmware = true;
|
||||
|
||||
boot.kernelParams = [
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
--- a/src/SDIO/driver_fw/driver/aic8800/aic8800_bsp/aicsdio.c
|
||||
+++ b/src/SDIO/driver_fw/driver/aic8800/aic8800_bsp/aicsdio.c
|
||||
@@ -28,6 +28,14 @@
|
||||
#include "aic_bsp_driver.h"
|
||||
#include "aicsdio_txrxif.h"
|
||||
|
||||
+#ifdef CONFIG_PLATFORM_UBUNTU
|
||||
+#include <linux/gpio.h>
|
||||
+#include <linux/mmc/host.h>
|
||||
+static bool skip_power_wait = true;
|
||||
+module_param(skip_power_wait, bool, 0644);
|
||||
+MODULE_PARM_DESC(skip_power_wait, "Skip power sequence wait (card already enumerated by DT)");
|
||||
+#endif
|
||||
+
|
||||
#ifdef CONFIG_PLATFORM_ALLWINNER
|
||||
extern int sunxi_wlan_get_bus_index(void);
|
||||
extern void sunxi_wlan_set_power(int on);
|
||||
@@ -515,6 +523,11 @@ static int aicbsp_platform_power_on(void)
|
||||
rockchip_wifi_set_carddetect(1);
|
||||
#endif /*CONFIG_PLATFORM_ROCKCHIP2*/
|
||||
|
||||
+#ifdef CONFIG_PLATFORM_UBUNTU
|
||||
+ if (skip_power_wait)
|
||||
+ return 0;
|
||||
+#endif
|
||||
+
|
||||
sema_init(&aic_chipup_sem, 0);
|
||||
ret = aicbsp_reg_sdio_notify(&aic_chipup_sem);
|
||||
if (ret) {
|
||||
Reference in New Issue
Block a user