2023-03-30 08:14:59 +00:00
{
stdenv ,
lib ,
buildPackages ,
fetchFromGitHub ,
perl ,
buildLinux ,
rpiVersion ,
. . .
} @ args : let
# NOTE: raspberrypifw & raspberryPiWirelessFirmware should be updated with this
modDirVersion = " 6 . 1 . 2 1 " ;
source = builtins . fromJSON ( builtins . readFile ./source.json ) ;
in
lib . overrideDerivation ( buildLinux ( args
// {
2023-03-30 08:22:44 +00:00
version = " ${ modDirVersion } - r p ${ toString rpiVersion } " ;
2023-03-30 08:14:59 +00:00
inherit modDirVersion ;
src = fetchFromGitHub {
owner = " r a s p b e r r y p i " ;
repo = " l i n u x " ;
inherit ( source ) rev sha256 ;
} ;
defconfig =
{
" 1 " = " b c m r p i _ d e f c o n f i g " ;
" 2 " = " b c m 2 7 0 9 _ d e f c o n f i g " ;
" 3 " =
if stdenv . hostPlatform . isAarch64
then " b c m r p i 3 _ d e f c o n f i g "
else " b c m 2 7 0 9 _ d e f c o n f i g " ;
" 4 " = " b c m 2 7 1 1 _ d e f c o n f i g " ;
}
. ${ toString rpiVersion } ;
features =
{
efiBootStub = false ;
}
// ( args . features or { } ) ;
extraConfig = ''
# ../drivers/gpu/drm/ast/ast_mode.c:851:18: error: initialization of 'void (*)(struct drm_crtc *, struct drm_atomic_state *)' from incompatible pointer type 'void (*)(struct drm_crtc *, struct drm_crtc_state *)' [-Werror=incompatible-pointer-types]
# 851 | .atomic_flush = ast_crtc_helper_atomic_flush,
# | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
# ../drivers/gpu/drm/ast/ast_mode.c:851:18: note: (near initialization for 'ast_crtc_helper_funcs.atomic_flush')
DRM_AST n
# ../drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c: In function 'amdgpu_dm_atomic_commit_tail':
# ../drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:7757:4: error: implicit declaration of function 'is_hdr_metadata_different' [-Werror=implicit-function-declaration]
# 7757 | is_hdr_metadata_different(old_con_state, new_con_state);
# | ^~~~~~~~~~~~~~~~~~~~~~~~~
DRM_AMDGPU n
'' ;
extraMeta =
if ( rpiVersion < 3 )
then {
platforms = with lib . platforms ; arm ;
hydraPlatforms = [ ] ;
}
else {
platforms = with lib . platforms ; arm ++ aarch64 ;
hydraPlatforms = [ " a a r c h 6 4 - l i n u x " ] ;
} ;
}
// ( args . argsOverride or { } ) ) ) ( oldAttrs : {
postConfigure = ''
# The v7 defconfig has this set to '-v7' which screws up our modDirVersion.
sed - i $ buildRoot/.config - e ' s / ^ CONFIG_LOCALVERSION = . * /CONFIG_LOCALVERSION = " " / '
sed - i $ buildRoot/include/config/auto.conf - e ' s / ^ CONFIG_LOCALVERSION = . * /CONFIG_LOCALVERSION = " " / '
'' ;
# Make copies of the DTBs named after the upstream names so that U-Boot finds them.
# This is ugly as heck, but I don't know a better solution so far.
postFixup =
''
dtbDir = $ {
if stdenv . isAarch64
then " $ o u t / d t b s / b r o a d c o m "
else " $ o u t / d t b s "
}
rm $ dtbDir/bcm283 * . dtb
copyDTB ( ) {
cp - v " $ d t b D i r / $ 1 " " $ d t b D i r / $ 2 "
}
''
+ lib . optionalString ( lib . elem stdenv . hostPlatform . system [ " a r m v 6 l - l i n u x " ] ) ''
copyDTB bcm2708-rpi-zero-w . dtb bcm2835-rpi-zero . dtb
copyDTB bcm2708-rpi-zero-w . dtb bcm2835-rpi-zero-w . dtb
copyDTB bcm2708-rpi-b . dtb bcm2835-rpi-a . dtb
copyDTB bcm2708-rpi-b . dtb bcm2835-rpi-b . dtb
copyDTB bcm2708-rpi-b . dtb bcm2835-rpi-b-rev2 . dtb
copyDTB bcm2708-rpi-b-plus . dtb bcm2835-rpi-a-plus . dtb
copyDTB bcm2708-rpi-b-plus . dtb bcm2835-rpi-b-plus . dtb
copyDTB bcm2708-rpi-b-plus . dtb bcm2835-rpi-zero . dtb
copyDTB bcm2708-rpi-cm . dtb bcm2835-rpi-cm . dtb
''
+ lib . optionalString ( lib . elem stdenv . hostPlatform . system [ " a r m v 7 l - l i n u x " ] ) ''
copyDTB bcm2709-rpi-2-b . dtb bcm2836-rpi-2-b . dtb
''
+ lib . optionalString ( lib . elem stdenv . hostPlatform . system [ " a r m v 7 l - l i n u x " " a a r c h 6 4 - l i n u x " ] ) ''
copyDTB bcm2710-rpi-zero-2 . dtb bcm2837-rpi-zero-2 . dtb
copyDTB bcm2710-rpi-3-b . dtb bcm2837-rpi-3-b . dtb
copyDTB bcm2710-rpi-3-b-plus . dtb bcm2837-rpi-3-a-plus . dtb
copyDTB bcm2710-rpi-3-b-plus . dtb bcm2837-rpi-3-b-plus . dtb
copyDTB bcm2710-rpi-cm3 . dtb bcm2837-rpi-cm3 . dtb
copyDTB bcm2711-rpi-4-b . dtb bcm2838-rpi-4-b . dtb
'' ;
} )