Commit 13f9173a authored by Rodrigo Siqueira's avatar Rodrigo Siqueira Committed by Alex Deucher
Browse files

drm/amd/display: Move custom_float from DML folder



The custom_float file does not have any FPU operation, so it should be
inside DML. This commit moves the file to the basic folder.

Reviewed-by: default avatarQingqing Zhuo <Qingqing.Zhuo@amd.com>
Signed-off-by: default avatarRodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent d310d18b
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -29,7 +29,8 @@ BASICS := \
	fixpt31_32.o \
	vector.o \
	dc_common.o \
	dce_calcs.o
	dce_calcs.o \
	custom_float.o

AMD_DAL_BASICS = $(addprefix $(AMDDALPATH)/dc/basics/,$(BASICS))

+33 −57
Original line number Diff line number Diff line
// SPDX-License-Identifier: MIT
/*
 * Copyright 2017 Advanced Micro Devices, Inc.
 * Copyright 2023 Advanced Micro Devices, Inc.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
@@ -25,9 +26,7 @@
#include "dm_services.h"
#include "custom_float.h"


static bool build_custom_float(
	struct fixed31_32 value,
static bool build_custom_float(struct fixed31_32 value,
			       const struct custom_float_format *format,
			       bool *negative,
			       uint32_t *mantissa,
@@ -36,41 +35,32 @@ static bool build_custom_float(
	uint32_t exp_offset = (1 << (format->exponenta_bits - 1)) - 1;

	const struct fixed31_32 mantissa_constant_plus_max_fraction =
		dc_fixpt_from_fraction(
			(1LL << (format->mantissa_bits + 1)) - 1,
		dc_fixpt_from_fraction((1LL << (format->mantissa_bits + 1)) - 1,
				       1LL << format->mantissa_bits);

	struct fixed31_32 mantiss;

	if (dc_fixpt_eq(
		value,
		dc_fixpt_zero)) {
	if (dc_fixpt_eq(value, dc_fixpt_zero)) {
		*negative = false;
		*mantissa = 0;
		*exponenta = 0;
		return true;
	}

	if (dc_fixpt_lt(
		value,
		dc_fixpt_zero)) {
	if (dc_fixpt_lt(value, dc_fixpt_zero)) {
		*negative = format->sign;
		value = dc_fixpt_neg(value);
	} else {
		*negative = false;
	}

	if (dc_fixpt_lt(
		value,
		dc_fixpt_one)) {
	if (dc_fixpt_lt(value, dc_fixpt_one)) {
		uint32_t i = 1;

		do {
			value = dc_fixpt_shl(value, 1);
			++i;
		} while (dc_fixpt_lt(
			value,
			dc_fixpt_one));
		} while (dc_fixpt_lt(value, dc_fixpt_one));

		--i;

@@ -81,46 +71,33 @@ static bool build_custom_float(
		}

		*exponenta = exp_offset - i;
	} else if (dc_fixpt_le(
		mantissa_constant_plus_max_fraction,
		value)) {
	} else if (dc_fixpt_le(mantissa_constant_plus_max_fraction, value)) {
		uint32_t i = 1;

		do {
			value = dc_fixpt_shr(value, 1);
			++i;
		} while (dc_fixpt_lt(
			mantissa_constant_plus_max_fraction,
			value));
		} while (dc_fixpt_lt(mantissa_constant_plus_max_fraction, value));

		*exponenta = exp_offset + i - 1;
	} else {
		*exponenta = exp_offset;
	}

	mantiss = dc_fixpt_sub(
		value,
		dc_fixpt_one);
	mantiss = dc_fixpt_sub(value, dc_fixpt_one);

	if (dc_fixpt_lt(
			mantiss,
			dc_fixpt_zero) ||
		dc_fixpt_lt(
			dc_fixpt_one,
			mantiss))
	if (dc_fixpt_lt(mantiss, dc_fixpt_zero) ||
	    dc_fixpt_lt(dc_fixpt_one, mantiss))
		mantiss = dc_fixpt_zero;
	else
		mantiss = dc_fixpt_shl(
			mantiss,
			format->mantissa_bits);
		mantiss = dc_fixpt_shl(mantiss, format->mantissa_bits);

	*mantissa = dc_fixpt_floor(mantiss);

	return true;
}

static bool setup_custom_float(
	const struct custom_float_format *format,
static bool setup_custom_float(const struct custom_float_format *format,
			       bool negative,
			       uint32_t mantissa,
			       uint32_t exponenta,
@@ -128,7 +105,6 @@ static bool setup_custom_float(
{
	uint32_t i = 0;
	uint32_t j = 0;

	uint32_t value = 0;

	/* verification code:
@@ -179,8 +155,7 @@ static bool setup_custom_float(
	return true;
}

bool convert_to_custom_float_format(
	struct fixed31_32 value,
bool convert_to_custom_float_format(struct fixed31_32 value,
				    const struct custom_float_format *format,
				    uint32_t *result)
{
@@ -188,10 +163,11 @@ bool convert_to_custom_float_format(
	uint32_t exponenta;
	bool negative;

	return build_custom_float(
		value, format, &negative, &mantissa, &exponenta) &&
	setup_custom_float(
		format, negative, mantissa, exponenta, result);
	return build_custom_float(value, format, &negative, &mantissa, &exponenta) &&
				  setup_custom_float(format,
						     negative,
						     mantissa,
						     exponenta,
						     result);
}
+1 −1
Original line number Diff line number Diff line
@@ -134,7 +134,7 @@ CFLAGS_REMOVE_$(AMDDALPATH)/dc/dml/calcs/dcn_calcs.o := $(dml_rcflags)
CFLAGS_REMOVE_$(AMDDALPATH)/dc/dml/calcs/dcn_calc_auto.o := $(dml_rcflags)
CFLAGS_REMOVE_$(AMDDALPATH)/dc/dml/calcs/dcn_calc_math.o := $(dml_rcflags)

DML = calcs/custom_float.o calcs/bw_fixed.o
DML = calcs/bw_fixed.o

ifdef CONFIG_DRM_AMD_DC_FP
DML += display_mode_lib.o display_rq_dlg_helpers.o dml1_display_rq_dlg_calc.o