Hello everyone. As you probably are aware, compiling the radeondrm bits on macppc takes a good long while and a bunch of it is for cards that aren't even used on these machines i.e. above r300.
The following patch makes it possible to build the driver without support for the rest of the cards, reducing compile time a fair bit as well as kernel size. At the moment I simply commented out the files in files.drm but certainly hope there is a more sensible way to do this. Likewise I ifdef'ed here and there using __macppc__ for the lack of a more natural choice. Any feedback is appreciated. P.S. I'm going to look around for further reductions in the drm bits for macppc, perhaps some other bits aren't needed. Best Index: dev/pci/drm//files.drm =================================================================== RCS file: /cvs/src/sys/dev/pci/drm/files.drm,v retrieving revision 1.60 diff -u -p -r1.60 files.drm --- dev/pci/drm//files.drm 4 Aug 2023 08:49:46 -0000 1.60 +++ dev/pci/drm//files.drm 16 Dec 2023 06:01:53 -0000 @@ -465,39 +465,39 @@ file dev/pci/drm/radeon/atombios_crtc.c file dev/pci/drm/radeon/atombios_dp.c radeondrm file dev/pci/drm/radeon/atombios_encoders.c radeondrm file dev/pci/drm/radeon/atombios_i2c.c radeondrm -file dev/pci/drm/radeon/btc_dpm.c radeondrm -file dev/pci/drm/radeon/ci_dpm.c radeondrm -file dev/pci/drm/radeon/ci_smc.c radeondrm -file dev/pci/drm/radeon/cik.c radeondrm -file dev/pci/drm/radeon/cik_sdma.c radeondrm -file dev/pci/drm/radeon/cypress_dpm.c radeondrm -file dev/pci/drm/radeon/dce3_1_afmt.c radeondrm -file dev/pci/drm/radeon/dce6_afmt.c radeondrm -file dev/pci/drm/radeon/evergreen.c radeondrm -file dev/pci/drm/radeon/evergreen_cs.c radeondrm -file dev/pci/drm/radeon/evergreen_dma.c radeondrm -file dev/pci/drm/radeon/evergreen_hdmi.c radeondrm -file dev/pci/drm/radeon/kv_dpm.c radeondrm -file dev/pci/drm/radeon/kv_smc.c radeondrm +#file dev/pci/drm/radeon/btc_dpm.c radeondrm +#file dev/pci/drm/radeon/ci_dpm.c radeondrm +#file dev/pci/drm/radeon/ci_smc.c radeondrm +#file dev/pci/drm/radeon/cik.c radeondrm +#file dev/pci/drm/radeon/cik_sdma.c radeondrm +#file dev/pci/drm/radeon/cypress_dpm.c radeondrm +#file dev/pci/drm/radeon/dce3_1_afmt.c radeondrm +#file dev/pci/drm/radeon/dce6_afmt.c radeondrm +#file dev/pci/drm/radeon/evergreen.c radeondrm +#file dev/pci/drm/radeon/evergreen_cs.c radeondrm +#file dev/pci/drm/radeon/evergreen_dma.c radeondrm +#file dev/pci/drm/radeon/evergreen_hdmi.c radeondrm +#file dev/pci/drm/radeon/kv_dpm.c radeondrm +#file dev/pci/drm/radeon/kv_smc.c radeondrm #file dev/pci/drm/radeon/mkregtable.c radeondrm -file dev/pci/drm/radeon/ni.c radeondrm -file dev/pci/drm/radeon/ni_dma.c radeondrm -file dev/pci/drm/radeon/ni_dpm.c radeondrm +#file dev/pci/drm/radeon/ni.c radeondrm +#file dev/pci/drm/radeon/ni_dma.c radeondrm +#file dev/pci/drm/radeon/ni_dpm.c radeondrm file dev/pci/drm/radeon/r100.c radeondrm file dev/pci/drm/radeon/r200.c radeondrm file dev/pci/drm/radeon/r300.c radeondrm -file dev/pci/drm/radeon/r420.c radeondrm -file dev/pci/drm/radeon/r520.c radeondrm -file dev/pci/drm/radeon/r600.c radeondrm -file dev/pci/drm/radeon/r600_cs.c radeondrm -file dev/pci/drm/radeon/r600_dma.c radeondrm -file dev/pci/drm/radeon/r600_dpm.c radeondrm -file dev/pci/drm/radeon/r600_hdmi.c radeondrm -file dev/pci/drm/radeon/radeon_acpi.c radeondrm & acpi +#file dev/pci/drm/radeon/r420.c radeondrm +#file dev/pci/drm/radeon/r520.c radeondrm +#file dev/pci/drm/radeon/r600.c radeondrm +#file dev/pci/drm/radeon/r600_cs.c radeondrm +#file dev/pci/drm/radeon/r600_dma.c radeondrm +#file dev/pci/drm/radeon/r600_dpm.c radeondrm +#file dev/pci/drm/radeon/r600_hdmi.c radeondrm +#file dev/pci/drm/radeon/radeon_acpi.c radeondrm & acpi file dev/pci/drm/radeon/radeon_agp.c radeondrm file dev/pci/drm/radeon/radeon_asic.c radeondrm file dev/pci/drm/radeon/radeon_atombios.c radeondrm -file dev/pci/drm/radeon/radeon_audio.c radeondrm +#file dev/pci/drm/radeon/radeon_audio.c radeondrm file dev/pci/drm/radeon/radeon_benchmark.c radeondrm file dev/pci/drm/radeon/radeon_bios.c radeondrm file dev/pci/drm/radeon/radeon_clocks.c radeondrm @@ -533,35 +533,35 @@ file dev/pci/drm/radeon/radeon_test.c r #file dev/pci/drm/radeon/radeon_trace_points.c radeondrm file dev/pci/drm/radeon/radeon_ttm.c radeondrm file dev/pci/drm/radeon/radeon_ucode.c radeondrm -file dev/pci/drm/radeon/radeon_uvd.c radeondrm -file dev/pci/drm/radeon/radeon_vce.c radeondrm +#file dev/pci/drm/radeon/radeon_uvd.c radeondrm +#file dev/pci/drm/radeon/radeon_vce.c radeondrm file dev/pci/drm/radeon/radeon_vm.c radeondrm -file dev/pci/drm/radeon/rs400.c radeondrm -file dev/pci/drm/radeon/rs600.c radeondrm -file dev/pci/drm/radeon/rs690.c radeondrm -file dev/pci/drm/radeon/rs780_dpm.c radeondrm -file dev/pci/drm/radeon/rv515.c radeondrm -file dev/pci/drm/radeon/rv6xx_dpm.c radeondrm -file dev/pci/drm/radeon/rv730_dpm.c radeondrm -file dev/pci/drm/radeon/rv740_dpm.c radeondrm -file dev/pci/drm/radeon/rv770.c radeondrm -file dev/pci/drm/radeon/rv770_dma.c radeondrm -file dev/pci/drm/radeon/rv770_dpm.c radeondrm -file dev/pci/drm/radeon/rv770_smc.c radeondrm -file dev/pci/drm/radeon/si.c radeondrm -file dev/pci/drm/radeon/si_dma.c radeondrm -file dev/pci/drm/radeon/si_dpm.c radeondrm -file dev/pci/drm/radeon/si_smc.c radeondrm -file dev/pci/drm/radeon/sumo_dpm.c radeondrm -file dev/pci/drm/radeon/sumo_smc.c radeondrm -file dev/pci/drm/radeon/trinity_dpm.c radeondrm -file dev/pci/drm/radeon/trinity_smc.c radeondrm -file dev/pci/drm/radeon/uvd_v1_0.c radeondrm -file dev/pci/drm/radeon/uvd_v2_2.c radeondrm -file dev/pci/drm/radeon/uvd_v3_1.c radeondrm -file dev/pci/drm/radeon/uvd_v4_2.c radeondrm -file dev/pci/drm/radeon/vce_v1_0.c radeondrm -file dev/pci/drm/radeon/vce_v2_0.c radeondrm +#file dev/pci/drm/radeon/rs400.c radeondrm +#file dev/pci/drm/radeon/rs600.c radeondrm +#file dev/pci/drm/radeon/rs690.c radeondrm +#file dev/pci/drm/radeon/rs780_dpm.c radeondrm +#file dev/pci/drm/radeon/rv515.c radeondrm +#file dev/pci/drm/radeon/rv6xx_dpm.c radeondrm +#file dev/pci/drm/radeon/rv730_dpm.c radeondrm +#file dev/pci/drm/radeon/rv740_dpm.c radeondrm +#file dev/pci/drm/radeon/rv770.c radeondrm +#file dev/pci/drm/radeon/rv770_dma.c radeondrm +#file dev/pci/drm/radeon/rv770_dpm.c radeondrm +#file dev/pci/drm/radeon/rv770_smc.c radeondrm +#file dev/pci/drm/radeon/si.c radeondrm +#file dev/pci/drm/radeon/si_dma.c radeondrm +#file dev/pci/drm/radeon/si_dpm.c radeondrm +#file dev/pci/drm/radeon/si_smc.c radeondrm +#file dev/pci/drm/radeon/sumo_dpm.c radeondrm +#file dev/pci/drm/radeon/sumo_smc.c radeondrm +#file dev/pci/drm/radeon/trinity_dpm.c radeondrm +#file dev/pci/drm/radeon/trinity_smc.c radeondrm +#file dev/pci/drm/radeon/uvd_v1_0.c radeondrm +#file dev/pci/drm/radeon/uvd_v2_2.c radeondrm +#file dev/pci/drm/radeon/uvd_v3_1.c radeondrm +#file dev/pci/drm/radeon/uvd_v4_2.c radeondrm +#file dev/pci/drm/radeon/vce_v1_0.c radeondrm +#file dev/pci/drm/radeon/vce_v2_0.c radeondrm # CONFIG_DRM_AMDGPU_SI define amdgpu_si Index: dev/pci/drm//radeon/atombios_crtc.c =================================================================== RCS file: /cvs/src/sys/dev/pci/drm/radeon/atombios_crtc.c,v retrieving revision 1.14 diff -u -p -r1.14 atombios_crtc.c --- dev/pci/drm//radeon/atombios_crtc.c 1 Jan 2023 01:34:59 -0000 1.14 +++ dev/pci/drm//radeon/atombios_crtc.c 16 Dec 2023 06:01:55 -0000 @@ -159,10 +159,12 @@ static void atombios_scaler_setup(struct } } atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); +#ifndef __macppc__ if ((is_tv || is_cv) && rdev->family >= CHIP_RV515 && rdev->family <= CHIP_R580) { atom_rv515_force_tv_scaler(rdev, radeon_crtc); } +#endif } static void atombios_lock_crtc(struct drm_crtc *crtc, int lock) @@ -1263,6 +1265,7 @@ static int dce4_crtc_do_set_base(struct return -EINVAL; } +#ifndef __macppc__ if (tiling_flags & RADEON_TILING_MACRO) { evergreen_tiling_fields(tiling_flags, &bankw, &bankh, &mtaspect, &tile_split); @@ -1339,7 +1342,7 @@ static int dce4_crtc_do_set_base(struct } } else if (tiling_flags & RADEON_TILING_MICRO) fb_format |= EVERGREEN_GRPH_ARRAY_MODE(EVERGREEN_GRPH_ARRAY_1D_TILED_THIN1); - +#endif if (rdev->family >= CHIP_BONAIRE) { /* Read the pipe config from the 2D TILED SCANOUT mode. * It should be the same for the other modes too, but not all Index: dev/pci/drm//radeon/atombios_encoders.c =================================================================== RCS file: /cvs/src/sys/dev/pci/drm/radeon/atombios_encoders.c,v retrieving revision 1.20 diff -u -p -r1.20 atombios_encoders.c --- dev/pci/drm//radeon/atombios_encoders.c 24 Oct 2023 10:12:09 -0000 1.20 +++ dev/pci/drm//radeon/atombios_encoders.c 16 Dec 2023 06:01:55 -0000 @@ -1770,10 +1770,12 @@ radeon_atom_encoder_dpms(struct drm_enco radeon_encoder->encoder_id, mode, radeon_encoder->devices, radeon_encoder->active_device); +#ifndef __macppc__ if ((radeon_audio != 0) && ((encoder_mode == ATOM_ENCODER_MODE_HDMI) || ENCODER_MODE_IS_DP(encoder_mode))) radeon_audio_dpms(encoder, mode); +#endif switch (radeon_encoder->encoder_id) { case ENCODER_OBJECT_ID_INTERNAL_TMDS1: @@ -2259,11 +2261,13 @@ radeon_atom_encoder_mode_set(struct drm_ atombios_apply_encoder_quirks(encoder, adjusted_mode); +#ifndef __macppc__ encoder_mode = atombios_get_encoder_mode(encoder); if (connector && (radeon_audio != 0) && ((encoder_mode == ATOM_ENCODER_MODE_HDMI) || ENCODER_MODE_IS_DP(encoder_mode))) radeon_audio_mode_set(encoder, adjusted_mode); +#endif } static bool @@ -2458,6 +2462,7 @@ static void radeon_atom_encoder_prepare( /* this is needed for the pll/ss setup to work correctly in some cases */ atombios_set_encoder_crtc_source(encoder); /* set up the FMT blocks */ +#ifndef __macppc__ if (ASIC_IS_DCE8(rdev)) dce8_program_fmt(encoder); else if (ASIC_IS_DCE4(rdev)) @@ -2466,6 +2471,7 @@ static void radeon_atom_encoder_prepare( dce3_program_fmt(encoder); else if (ASIC_IS_AVIVO(rdev)) avivo_program_fmt(encoder); +#endif } static void radeon_atom_encoder_commit(struct drm_encoder *encoder) Index: dev/pci/drm//radeon/radeon_asic.c =================================================================== RCS file: /cvs/src/sys/dev/pci/drm/radeon/radeon_asic.c,v retrieving revision 1.7 diff -u -p -r1.7 radeon_asic.c --- dev/pci/drm//radeon/radeon_asic.c 14 Jan 2022 06:53:15 -0000 1.7 +++ dev/pci/drm//radeon/radeon_asic.c 16 Dec 2023 06:01:56 -0000 @@ -103,6 +103,7 @@ static void radeon_register_accessor_ini rdev->pll_rreg = &r100_pll_rreg; rdev->pll_wreg = &r100_pll_wreg; } +#ifndef __macppc__ if (rdev->family >= CHIP_R420) { rdev->mc_rreg = &r420_mc_rreg; rdev->mc_wreg = &r420_mc_wreg; @@ -135,6 +136,7 @@ static void radeon_register_accessor_ini rdev->pciep_rreg = &r600_pciep_rreg; rdev->pciep_wreg = &r600_pciep_wreg; } +#endif } static int radeon_invalid_get_allowed_info_register(struct radeon_device *rdev, @@ -495,6 +497,7 @@ static struct radeon_asic r300_asic_pcie }, }; +#ifndef __macppc__ static struct radeon_asic r420_asic = { .init = &r420_init, .fini = &r420_fini, @@ -2305,6 +2308,7 @@ static struct radeon_asic kv_asic = { .page_flip_pending = &evergreen_page_flip_pending, }, }; +#endif /** * radeon_asic_init - register asic specific callbacks @@ -2352,6 +2356,7 @@ int radeon_asic_init(struct radeon_devic else rdev->asic = &r300_asic; break; +#ifndef __macppc__ case CHIP_R420: case CHIP_R423: case CHIP_RV410: @@ -2692,6 +2697,7 @@ int radeon_asic_init(struct radeon_devic rdev->has_uvd = true; rdev->has_vce = true; break; +#endif default: /* FIXME: not supported yet */ return -EINVAL; Index: dev/pci/drm//radeon/radeon_connectors.c =================================================================== RCS file: /cvs/src/sys/dev/pci/drm/radeon/radeon_connectors.c,v retrieving revision 1.20 diff -u -p -r1.20 radeon_connectors.c --- dev/pci/drm//radeon/radeon_connectors.c 30 Nov 2023 02:33:55 -0000 1.20 +++ dev/pci/drm//radeon/radeon_connectors.c 16 Dec 2023 06:01:57 -0000 @@ -1405,6 +1405,7 @@ out: /* updated in get modes as well since we need to know if it's analog or digital */ radeon_connector_update_scratch_regs(connector, ret); +#ifndef __macppc__ if ((radeon_audio != 0) && radeon_connector->use_digital) { const struct drm_connector_helper_funcs *connector_funcs = connector->helper_private; @@ -1415,6 +1416,7 @@ out: radeon_audio_detect(connector, encoder, ret); } } +#endif exit: if (!drm_kms_helper_is_poll_worker()) { @@ -1723,10 +1725,12 @@ radeon_dp_detect(struct drm_connector *c radeon_connector_update_scratch_regs(connector, ret); +#ifndef __macppc__ if ((radeon_audio != 0) && encoder) { radeon_connector_get_edid(connector); radeon_audio_detect(connector, encoder, ret); } +#endif out: if (!drm_kms_helper_is_poll_worker()) { Index: dev/pci/drm//radeon/radeon_cs.c =================================================================== RCS file: /cvs/src/sys/dev/pci/drm/radeon/radeon_cs.c,v retrieving revision 1.14 diff -u -p -r1.14 radeon_cs.c --- dev/pci/drm//radeon/radeon_cs.c 28 Jul 2023 06:47:10 -0000 1.14 +++ dev/pci/drm//radeon/radeon_cs.c 16 Dec 2023 06:01:57 -0000 @@ -487,11 +487,13 @@ static int radeon_cs_ib_chunk(struct rad return r; } +#ifndef __macppc__ if (parser->ring == R600_RING_TYPE_UVD_INDEX) radeon_uvd_note_usage(rdev); else if ((parser->ring == TN_RING_TYPE_VCE1_INDEX) || (parser->ring == TN_RING_TYPE_VCE2_INDEX)) radeon_vce_note_usage(rdev); +#endif r = radeon_ib_schedule(rdev, &parser->ib, NULL, true); if (r) { @@ -573,8 +575,10 @@ static int radeon_cs_ib_vm_chunk(struct return r; } +#ifndef __macppc__ if (parser->ring == R600_RING_TYPE_UVD_INDEX) radeon_uvd_note_usage(rdev); +#endif mutex_lock(&vm->mutex); r = radeon_bo_vm_update_pte(parser, vm); Index: dev/pci/drm//radeon/radeon_irq_kms.c =================================================================== RCS file: /cvs/src/sys/dev/pci/drm/radeon/radeon_irq_kms.c,v retrieving revision 1.18 diff -u -p -r1.18 radeon_irq_kms.c --- dev/pci/drm//radeon/radeon_irq_kms.c 16 Jun 2023 00:47:28 -0000 1.18 +++ dev/pci/drm//radeon/radeon_irq_kms.c 16 Dec 2023 06:01:58 -0000 @@ -352,7 +352,9 @@ int radeon_irq_kms_init(struct radeon_de INIT_DELAYED_WORK(&rdev->hotplug_work, radeon_hotplug_work_func); INIT_WORK(&rdev->dp_work, radeon_dp_work_func); +#ifndef __macppc__ INIT_WORK(&rdev->audio_work, r600_audio_update_hdmi); +#endif rdev->irq.installed = true; r = radeon_irq_install(rdev, rdev->pdev->irq); Index: dev/pci/drm//radeon/radeon_kms.c =================================================================== RCS file: /cvs/src/sys/dev/pci/drm/radeon/radeon_kms.c,v retrieving revision 1.92 diff -u -p -r1.92 radeon_kms.c --- dev/pci/drm//radeon/radeon_kms.c 1 Jan 2023 01:34:59 -0000 1.92 +++ dev/pci/drm//radeon/radeon_kms.c 16 Dec 2023 06:01:58 -0000 @@ -752,8 +752,10 @@ void radeon_driver_postclose_kms(struct rdev->cmask_filp = NULL; mutex_unlock(&rdev->gem.mutex); +#ifndef __macppc__ radeon_uvd_free_handles(rdev, file_priv); radeon_vce_free_handles(rdev, file_priv); +#endif /* new gpu have virtual address space support */ if (rdev->family >= CHIP_CAYMAN && file_priv->driver_priv) { Index: dev/pci/drm//radeon/radeon_object.c =================================================================== RCS file: /cvs/src/sys/dev/pci/drm/radeon/radeon_object.c,v retrieving revision 1.19 diff -u -p -r1.19 radeon_object.c --- dev/pci/drm//radeon/radeon_object.c 1 Jan 2023 01:34:59 -0000 1.19 +++ dev/pci/drm//radeon/radeon_object.c 16 Dec 2023 06:01:58 -0000 @@ -528,8 +528,10 @@ int radeon_bo_list_validate(struct radeo retry: radeon_ttm_placement_from_domain(bo, domain); +#ifndef __macppc__ if (ring == R600_RING_TYPE_UVD_INDEX) radeon_uvd_force_into_uvd_segment(bo, allowed); +#endif initial_bytes_moved = atomic64_read(&rdev->num_bytes_moved); r = ttm_bo_validate(&bo->tbo, &bo->placement, &ctx); Index: dev/pci/drm//radeon/radeon_pm.c =================================================================== RCS file: /cvs/src/sys/dev/pci/drm/radeon/radeon_pm.c,v retrieving revision 1.23 diff -u -p -r1.23 radeon_pm.c --- dev/pci/drm//radeon/radeon_pm.c 1 Jan 2023 01:35:00 -0000 1.23 +++ dev/pci/drm//radeon/radeon_pm.c 16 Dec 2023 06:01:59 -0000 @@ -936,8 +936,10 @@ static bool radeon_dpm_single_display(st /* 120hz tends to be problematic even if they are under the * vblank limit. */ +#ifndef __macppc__ if (single_display && (r600_dpm_get_vrefresh(rdev) >= 120)) single_display = false; +#endif return single_display; } Index: dev/pci/drm//radeon/radeon_test.c =================================================================== RCS file: /cvs/src/sys/dev/pci/drm/radeon/radeon_test.c,v retrieving revision 1.9 diff -u -p -r1.9 radeon_test.c --- dev/pci/drm//radeon/radeon_test.c 8 Jun 2020 04:48:16 -0000 1.9 +++ dev/pci/drm//radeon/radeon_test.c 16 Dec 2023 06:01:59 -0000 @@ -266,6 +266,7 @@ static int radeon_test_create_and_emit_f uint32_t handle = ring->idx ^ 0xdeafbeef; int r; +#ifndef __macppc__ if (ring->idx == R600_RING_TYPE_UVD_INDEX) { r = radeon_uvd_get_create_msg(rdev, ring->idx, handle, NULL); if (r) { @@ -294,6 +295,7 @@ static int radeon_test_create_and_emit_f } } else { +#endif r = radeon_ring_lock(rdev, ring, 64); if (r) { DRM_ERROR("Failed to lock ring A %d\n", ring->idx); @@ -306,7 +308,9 @@ static int radeon_test_create_and_emit_f return r; } radeon_ring_unlock_commit(rdev, ring, false); +#ifndef __macppc__ } +#endif return 0; }