linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] phy: mediatek: Avoid floating point constants
@ 2023-04-19 12:21 Thierry Reding
  2023-04-19 12:29 ` AngeloGioacchino Del Regno
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Thierry Reding @ 2023-04-19 12:21 UTC (permalink / raw)
  To: Vinod Koul, Kishon Vijay Abraham I
  Cc: Chun-Kuang Hu, Philipp Zabel, Matthias Brugger,
	AngeloGioacchino Del Regno, Guillaume Ranquet, linux-mediatek,
	linux-phy, linux-arm-kernel, Jonathan Hunter

From: Thierry Reding <treding@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:

	drivers/phy/mediatek/phy-mtk-hdmi-mt8195.c: 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@nvidia.com>
Signed-off-by: Thierry Reding <treding@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;
-- 
2.40.0


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH] phy: mediatek: Avoid floating point constants
  2023-04-19 12:21 [PATCH] phy: mediatek: Avoid floating point constants Thierry Reding
@ 2023-04-19 12:29 ` AngeloGioacchino Del Regno
  2023-04-19 13:52 ` Guillaume Ranquet
  2023-05-17 11:59 ` Jon Hunter
  2 siblings, 0 replies; 5+ messages in thread
From: AngeloGioacchino Del Regno @ 2023-04-19 12:29 UTC (permalink / raw)
  To: Thierry Reding, Vinod Koul, Kishon Vijay Abraham I
  Cc: Chun-Kuang Hu, Philipp Zabel, Matthias Brugger, Guillaume Ranquet,
	linux-mediatek, linux-phy, linux-arm-kernel, Jonathan Hunter

Il 19/04/23 14:21, Thierry Reding ha scritto:
> From: Thierry Reding <treding@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:
> 
> 	drivers/phy/mediatek/phy-mtk-hdmi-mt8195.c: 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@nvidia.com>
> Signed-off-by: Thierry Reding <treding@nvidia.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>



_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] phy: mediatek: Avoid floating point constants
  2023-04-19 12:21 [PATCH] phy: mediatek: Avoid floating point constants Thierry Reding
  2023-04-19 12:29 ` AngeloGioacchino Del Regno
@ 2023-04-19 13:52 ` Guillaume Ranquet
  2023-05-17 11:59 ` Jon Hunter
  2 siblings, 0 replies; 5+ messages in thread
From: Guillaume Ranquet @ 2023-04-19 13:52 UTC (permalink / raw)
  To: Thierry Reding, Vinod Koul, Kishon Vijay Abraham I
  Cc: Chun-Kuang Hu, Philipp Zabel, Matthias Brugger,
	AngeloGioacchino Del Regno, Guillaume Ranquet, linux-mediatek,
	linux-phy, linux-arm-kernel, Jonathan Hunter

On Wed, 19 Apr 2023 14:21, Thierry Reding <thierry.reding@gmail.com> wrote:
>From: Thierry Reding <treding@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:
>
>	drivers/phy/mediatek/phy-mtk-hdmi-mt8195.c: 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@nvidia.com>
>Signed-off-by: Thierry Reding <treding@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;
>--
>2.40.0
>

Thx for the fix!

Reviewed-by: Guillaume Ranquet <granquet@baylibre.com>

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] phy: mediatek: Avoid floating point constants
  2023-04-19 12:21 [PATCH] phy: mediatek: Avoid floating point constants Thierry Reding
  2023-04-19 12:29 ` AngeloGioacchino Del Regno
  2023-04-19 13:52 ` Guillaume Ranquet
@ 2023-05-17 11:59 ` Jon Hunter
  2023-05-17 12:51   ` Vinod Koul
  2 siblings, 1 reply; 5+ messages in thread
From: Jon Hunter @ 2023-05-17 11:59 UTC (permalink / raw)
  To: Thierry Reding, Vinod Koul, Kishon Vijay Abraham I,
	Matthias Brugger, Chun-Kuang Hu
  Cc: Philipp Zabel, AngeloGioacchino Del Regno, Guillaume Ranquet,
	linux-mediatek, linux-phy, linux-arm-kernel,
	linux-tegra@vger.kernel.org

Hi Vinod,

On 19/04/2023 13:21, Thierry Reding wrote:
> From: Thierry Reding <treding@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@nvidia.com>
> Signed-off-by: Thierry Reding <treding@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@nvidia.com>
Tested-by: Jon Hunter <jonathanh@nvidia.com>

Thanks
Jon

-- 
nvpublic

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] phy: mediatek: Avoid floating point constants
  2023-05-17 11:59 ` Jon Hunter
@ 2023-05-17 12:51   ` Vinod Koul
  0 siblings, 0 replies; 5+ messages in thread
From: Vinod Koul @ 2023-05-17 12:51 UTC (permalink / raw)
  To: Jon Hunter
  Cc: Thierry Reding, Kishon Vijay Abraham I, Matthias Brugger,
	Chun-Kuang Hu, Philipp Zabel, AngeloGioacchino Del Regno,
	Guillaume Ranquet, linux-mediatek, linux-phy, linux-arm-kernel,
	linux-tegra@vger.kernel.org

On 17-05-23, 12:59, Jon Hunter wrote:
> Hi Vinod,
> 
> On 19/04/2023 13:21, Thierry Reding wrote:
> > From: Thierry Reding <treding@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@nvidia.com>
> > Signed-off-by: Thierry Reding <treding@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?

Sorry I missed this one but I have already applied 03262a3f5b5b ("phy:
mediatek: rework the floating point comparisons to fixed point") and
this is in linux-next and should be hopefully in Linus's tree in next rc

Thanks
-- 
~Vinod

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2023-05-17 12:52 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-04-19 12:21 [PATCH] phy: mediatek: Avoid floating point constants Thierry Reding
2023-04-19 12:29 ` AngeloGioacchino Del Regno
2023-04-19 13:52 ` Guillaume Ranquet
2023-05-17 11:59 ` Jon Hunter
2023-05-17 12:51   ` Vinod Koul

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).