[PATCH] phy: mediatek: Avoid floating point constants

Jon Hunter jonathanh at nvidia.com
Wed May 17 04:59:26 PDT 2023


Hi Vinod,

On 19/04/2023 13:21, Thierry Reding wrote:
> From: Thierry Reding <treding at nvidia.com>
> 
> When building with old versions of GCC (6.3 in this case), the compiler
> stumbles over the floating point constants in this driver:
> 
> 	: In function ‘mtk_hdmi_pll_prepare’:
> 	drivers/phy/mediatek/phy-mtk-hdmi-mt8195.c:331:23: error: ‘-mgeneral-regs-only’ is incompatible with floating-point code
> 	  } else if (pixel_clk >= 74.175 * MEGA && pixel_clk <= 300 * MEGA) {
> 
> 	drivers/phy/mediatek/phy-mtk-hdmi-mt8195.c:361:12: error: ‘-mgeneral-regs-only’ is incompatible with floating-point code
> 	 static int mtk_hdmi_pll_prepare(struct clk_hw *hw)
> 		    ^~~~~~~~~~~~~~~~~~~~
> 	drivers/phy/mediatek/phy-mtk-hdmi-mt8195.c:361:12: error: ‘-mgeneral-regs-only’ is incompatible with floating-point code
> 
> Fix this by switching to the KILO macro instead and multiplying the
> constants by 1000 to get rid of the floating point.
> 
> Fixes: 45810d486bb4 ("phy: mediatek: add support for phy-mtk-hdmi-mt8195")
> Reported-by: Jonathan Hunter <jonathanh at nvidia.com>
> Signed-off-by: Thierry Reding <treding at nvidia.com>
> ---
>   drivers/phy/mediatek/phy-mtk-hdmi-mt8195.c | 8 ++++----
>   1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/phy/mediatek/phy-mtk-hdmi-mt8195.c b/drivers/phy/mediatek/phy-mtk-hdmi-mt8195.c
> index abfc077fb0a8..b10af26cad2f 100644
> --- a/drivers/phy/mediatek/phy-mtk-hdmi-mt8195.c
> +++ b/drivers/phy/mediatek/phy-mtk-hdmi-mt8195.c
> @@ -239,9 +239,9 @@ static int mtk_hdmi_pll_calc(struct mtk_hdmi_phy *hdmi_phy, struct clk_hw *hw,
>   		txposdiv = 8;
>   	else if (tmds_clk >= 54 * MEGA && tmds_clk < 148.35 * MEGA)
>   		txposdiv = 4;
> -	else if (tmds_clk >= 148.35 * MEGA && tmds_clk < 296.7 * MEGA)
> +	else if (tmds_clk >= 148350 * KILO && tmds_clk < 296700 * KILO)
>   		txposdiv = 2;
> -	else if (tmds_clk >= 296.7 * MEGA && tmds_clk <= 594 * MEGA)
> +	else if (tmds_clk >= 296700 * KILO && tmds_clk <= 594 * MEGA)
>   		txposdiv = 1;
>   	else
>   		return -EINVAL;
> @@ -328,12 +328,12 @@ static int mtk_hdmi_pll_drv_setting(struct clk_hw *hw)
>   		clk_channel_bias = 0x34; /* 20mA */
>   		impedance_en = 0xf;
>   		impedance = 0x36; /* 100ohm */
> -	} else if (pixel_clk >= 74.175 * MEGA && pixel_clk <= 300 * MEGA) {
> +	} else if (pixel_clk >= 74175 * KILO && pixel_clk <= 300 * MEGA) {
>   		data_channel_bias = 0x34; /* 20mA */
>   		clk_channel_bias = 0x2c; /* 16mA */
>   		impedance_en = 0xf;
>   		impedance = 0x36; /* 100ohm */
> -	} else if (pixel_clk >= 27 * MEGA && pixel_clk < 74.175 * MEGA) {
> +	} else if (pixel_clk >= 27 * MEGA && pixel_clk < 74175 * KILO) {
>   		data_channel_bias = 0x14; /* 10mA */
>   		clk_channel_bias = 0x14; /* 10mA */
>   		impedance_en = 0x0;


This is breaking kernel compilation with older compilers such as GCC7. 
This is now in the mainline and older compilers cannot build the kernel 
with this driver enabled. The kernel docs say the min version supported 
is GCC 5.1 currently.

Can we get this merged as a fix for v6.4?

Reviewed-by: Jon Hunter <jonathanh at nvidia.com>
Tested-by: Jon Hunter <jonathanh at nvidia.com>

Thanks
Jon

-- 
nvpublic



More information about the linux-arm-kernel mailing list