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;
}