All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/2] drm/bridge: samsung-dsim: Small cleanups
@ 2025-05-27 14:21 Philipp Zabel
  2025-05-27 14:21 ` [PATCH 1/2] drm/bridge: samsung-dsim: use while loop in samsung_dsim_transfer_start Philipp Zabel
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Philipp Zabel @ 2025-05-27 14:21 UTC (permalink / raw)
  To: Inki Dae, Jagan Teki, Marek Szyprowski, Andrzej Hajda,
	Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman,
	Jernej Skrabec, Maarten Lankhorst, Maxime Ripard,
	Thomas Zimmermann, David Airlie, Simona Vetter
  Cc: dri-devel, linux-kernel, kernel, Philipp Zabel

Replace an open-coded goto-again construct with a while loop and a
custom MHZ macro with the common HZ_PER_MHZ.

Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
---
Philipp Zabel (2):
      drm/bridge: samsung-dsim: use while loop in samsung_dsim_transfer_start
      drm/bridge: samsung-dsim: Use HZ_PER_MHZ macro from units.h

 drivers/gpu/drm/bridge/samsung-dsim.c | 77 +++++++++++++++--------------------
 1 file changed, 33 insertions(+), 44 deletions(-)
---
base-commit: 99764593528f9e0ee9509f9e4a4eb21db99d0681
change-id: 20250527-samsung-dsim-2bae3b45f77b

Best regards,
-- 
Philipp Zabel <p.zabel@pengutronix.de>


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

* [PATCH 1/2] drm/bridge: samsung-dsim: use while loop in samsung_dsim_transfer_start
  2025-05-27 14:21 [PATCH 0/2] drm/bridge: samsung-dsim: Small cleanups Philipp Zabel
@ 2025-05-27 14:21 ` Philipp Zabel
  2025-05-27 14:52   ` Frieder Schrempf
  2025-05-27 15:10   ` Alexander Stein
  2025-05-27 14:21 ` [PATCH 2/2] drm/bridge: samsung-dsim: Use HZ_PER_MHZ macro from units.h Philipp Zabel
  2025-06-27 11:49 ` [PATCH 0/2] drm/bridge: samsung-dsim: Small cleanups Philipp Zabel
  2 siblings, 2 replies; 8+ messages in thread
From: Philipp Zabel @ 2025-05-27 14:21 UTC (permalink / raw)
  To: Inki Dae, Jagan Teki, Marek Szyprowski, Andrzej Hajda,
	Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman,
	Jernej Skrabec, Maarten Lankhorst, Maxime Ripard,
	Thomas Zimmermann, David Airlie, Simona Vetter
  Cc: dri-devel, linux-kernel, kernel, Philipp Zabel

Turn the open-coded goto-again construct into a while loop, to make
samsung_dsim_transfer_start() a bit shorter and easier to read.

Hold the spinlock when looping back around and avoid the duplicated
list_empty() check.

Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
---
 drivers/gpu/drm/bridge/samsung-dsim.c | 51 +++++++++++++++--------------------
 1 file changed, 21 insertions(+), 30 deletions(-)

diff --git a/drivers/gpu/drm/bridge/samsung-dsim.c b/drivers/gpu/drm/bridge/samsung-dsim.c
index 0014c497e3fe7d8349a119dbdda30d65d816cccf..1dfc9710bee5134e0e0114ce52f673c21564b11b 100644
--- a/drivers/gpu/drm/bridge/samsung-dsim.c
+++ b/drivers/gpu/drm/bridge/samsung-dsim.c
@@ -1235,43 +1235,34 @@ static void samsung_dsim_transfer_start(struct samsung_dsim *dsi)
 {
 	unsigned long flags;
 	struct samsung_dsim_transfer *xfer;
-	bool start = false;
 
-again:
 	spin_lock_irqsave(&dsi->transfer_lock, flags);
 
-	if (list_empty(&dsi->transfer_list)) {
+	while (!list_empty(&dsi->transfer_list)) {
+		xfer = list_first_entry(&dsi->transfer_list,
+					struct samsung_dsim_transfer, list);
+
 		spin_unlock_irqrestore(&dsi->transfer_lock, flags);
-		return;
+
+		if (xfer->packet.payload_length &&
+		    xfer->tx_done == xfer->packet.payload_length)
+			/* waiting for RX */
+			return;
+
+		samsung_dsim_send_to_fifo(dsi, xfer);
+
+		if (xfer->packet.payload_length || xfer->rx_len)
+			return;
+
+		xfer->result = 0;
+		complete(&xfer->completed);
+
+		spin_lock_irqsave(&dsi->transfer_lock, flags);
+
+		list_del_init(&xfer->list);
 	}
 
-	xfer = list_first_entry(&dsi->transfer_list,
-				struct samsung_dsim_transfer, list);
-
 	spin_unlock_irqrestore(&dsi->transfer_lock, flags);
-
-	if (xfer->packet.payload_length &&
-	    xfer->tx_done == xfer->packet.payload_length)
-		/* waiting for RX */
-		return;
-
-	samsung_dsim_send_to_fifo(dsi, xfer);
-
-	if (xfer->packet.payload_length || xfer->rx_len)
-		return;
-
-	xfer->result = 0;
-	complete(&xfer->completed);
-
-	spin_lock_irqsave(&dsi->transfer_lock, flags);
-
-	list_del_init(&xfer->list);
-	start = !list_empty(&dsi->transfer_list);
-
-	spin_unlock_irqrestore(&dsi->transfer_lock, flags);
-
-	if (start)
-		goto again;
 }
 
 static bool samsung_dsim_transfer_finish(struct samsung_dsim *dsi)

-- 
2.39.5


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

* [PATCH 2/2] drm/bridge: samsung-dsim: Use HZ_PER_MHZ macro from units.h
  2025-05-27 14:21 [PATCH 0/2] drm/bridge: samsung-dsim: Small cleanups Philipp Zabel
  2025-05-27 14:21 ` [PATCH 1/2] drm/bridge: samsung-dsim: use while loop in samsung_dsim_transfer_start Philipp Zabel
@ 2025-05-27 14:21 ` Philipp Zabel
  2025-05-27 14:53   ` Frieder Schrempf
  2025-05-27 15:12   ` Alexander Stein
  2025-06-27 11:49 ` [PATCH 0/2] drm/bridge: samsung-dsim: Small cleanups Philipp Zabel
  2 siblings, 2 replies; 8+ messages in thread
From: Philipp Zabel @ 2025-05-27 14:21 UTC (permalink / raw)
  To: Inki Dae, Jagan Teki, Marek Szyprowski, Andrzej Hajda,
	Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman,
	Jernej Skrabec, Maarten Lankhorst, Maxime Ripard,
	Thomas Zimmermann, David Airlie, Simona Vetter
  Cc: dri-devel, linux-kernel, kernel, Philipp Zabel

Drop the custom MHZ macro and replace it with HZ_PER_MHZ.

Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
---
 drivers/gpu/drm/bridge/samsung-dsim.c | 26 ++++++++++++--------------
 1 file changed, 12 insertions(+), 14 deletions(-)

diff --git a/drivers/gpu/drm/bridge/samsung-dsim.c b/drivers/gpu/drm/bridge/samsung-dsim.c
index 1dfc9710bee5134e0e0114ce52f673c21564b11b..b7fd5870eba7e4bef3f420ae7cf6de1a700eb41d 100644
--- a/drivers/gpu/drm/bridge/samsung-dsim.c
+++ b/drivers/gpu/drm/bridge/samsung-dsim.c
@@ -19,6 +19,7 @@
 #include <linux/of.h>
 #include <linux/phy/phy.h>
 #include <linux/platform_device.h>
+#include <linux/units.h>
 
 #include <video/mipi_display.h>
 
@@ -557,10 +558,6 @@ static void samsung_dsim_reset(struct samsung_dsim *dsi)
 	samsung_dsim_write(dsi, DSIM_SWRST_REG, reset_val);
 }
 
-#ifndef MHZ
-#define MHZ	(1000 * 1000)
-#endif
-
 static unsigned long samsung_dsim_pll_find_pms(struct samsung_dsim *dsi,
 					       unsigned long fin,
 					       unsigned long fout,
@@ -574,8 +571,8 @@ static unsigned long samsung_dsim_pll_find_pms(struct samsung_dsim *dsi,
 	u16 _m, best_m;
 	u8 _s, best_s;
 
-	p_min = DIV_ROUND_UP(fin, (driver_data->pll_fin_max * MHZ));
-	p_max = fin / (driver_data->pll_fin_min * MHZ);
+	p_min = DIV_ROUND_UP(fin, (driver_data->pll_fin_max * HZ_PER_MHZ));
+	p_max = fin / (driver_data->pll_fin_min * HZ_PER_MHZ);
 
 	for (_p = p_min; _p <= p_max; ++_p) {
 		for (_s = 0; _s <= 5; ++_s) {
@@ -590,8 +587,8 @@ static unsigned long samsung_dsim_pll_find_pms(struct samsung_dsim *dsi,
 
 			tmp = (u64)_m * fin;
 			do_div(tmp, _p);
-			if (tmp < driver_data->min_freq  * MHZ ||
-			    tmp > driver_data->max_freq * MHZ)
+			if (tmp < driver_data->min_freq  * HZ_PER_MHZ ||
+			    tmp > driver_data->max_freq * HZ_PER_MHZ)
 				continue;
 
 			tmp = (u64)_m * fin;
@@ -634,7 +631,7 @@ static unsigned long samsung_dsim_set_pll(struct samsung_dsim *dsi,
 		 * limit.
 		 */
 		fin = clk_get_rate(clk_get_parent(dsi->pll_clk));
-		while (fin > driver_data->pll_fin_max * MHZ)
+		while (fin > driver_data->pll_fin_max * HZ_PER_MHZ)
 			fin /= 2;
 		clk_set_rate(dsi->pll_clk, fin);
 
@@ -660,10 +657,11 @@ static unsigned long samsung_dsim_set_pll(struct samsung_dsim *dsi,
 
 	if (driver_data->has_freqband) {
 		static const unsigned long freq_bands[] = {
-			100 * MHZ, 120 * MHZ, 160 * MHZ, 200 * MHZ,
-			270 * MHZ, 320 * MHZ, 390 * MHZ, 450 * MHZ,
-			510 * MHZ, 560 * MHZ, 640 * MHZ, 690 * MHZ,
-			770 * MHZ, 870 * MHZ, 950 * MHZ,
+			100 * HZ_PER_MHZ, 120 * HZ_PER_MHZ, 160 * HZ_PER_MHZ,
+			200 * HZ_PER_MHZ, 270 * HZ_PER_MHZ, 320 * HZ_PER_MHZ,
+			390 * HZ_PER_MHZ, 450 * HZ_PER_MHZ, 510 * HZ_PER_MHZ,
+			560 * HZ_PER_MHZ, 640 * HZ_PER_MHZ, 690 * HZ_PER_MHZ,
+			770 * HZ_PER_MHZ, 870 * HZ_PER_MHZ, 950 * HZ_PER_MHZ,
 		};
 		int band;
 
@@ -723,7 +721,7 @@ static int samsung_dsim_enable_clock(struct samsung_dsim *dsi)
 	esc_div = DIV_ROUND_UP(byte_clk, dsi->esc_clk_rate);
 	esc_clk = byte_clk / esc_div;
 
-	if (esc_clk > 20 * MHZ) {
+	if (esc_clk > 20 * HZ_PER_MHZ) {
 		++esc_div;
 		esc_clk = byte_clk / esc_div;
 	}

-- 
2.39.5


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

* Re: [PATCH 1/2] drm/bridge: samsung-dsim: use while loop in samsung_dsim_transfer_start
  2025-05-27 14:21 ` [PATCH 1/2] drm/bridge: samsung-dsim: use while loop in samsung_dsim_transfer_start Philipp Zabel
@ 2025-05-27 14:52   ` Frieder Schrempf
  2025-05-27 15:10   ` Alexander Stein
  1 sibling, 0 replies; 8+ messages in thread
From: Frieder Schrempf @ 2025-05-27 14:52 UTC (permalink / raw)
  To: Philipp Zabel, Inki Dae, Jagan Teki, Marek Szyprowski,
	Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
	Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Maxime Ripard,
	Thomas Zimmermann, David Airlie, Simona Vetter
  Cc: dri-devel, linux-kernel, kernel

Am 27.05.25 um 16:21 schrieb Philipp Zabel:
> Turn the open-coded goto-again construct into a while loop, to make
> samsung_dsim_transfer_start() a bit shorter and easier to read.
> 
> Hold the spinlock when looping back around and avoid the duplicated
> list_empty() check.
> 
> Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>

Reviewed-by: Frieder Schrempf <frieder.schrempf@kontron.de>

> ---
>  drivers/gpu/drm/bridge/samsung-dsim.c | 51 +++++++++++++++--------------------
>  1 file changed, 21 insertions(+), 30 deletions(-)
> 
> diff --git a/drivers/gpu/drm/bridge/samsung-dsim.c b/drivers/gpu/drm/bridge/samsung-dsim.c
> index 0014c497e3fe7d8349a119dbdda30d65d816cccf..1dfc9710bee5134e0e0114ce52f673c21564b11b 100644
> --- a/drivers/gpu/drm/bridge/samsung-dsim.c
> +++ b/drivers/gpu/drm/bridge/samsung-dsim.c
> @@ -1235,43 +1235,34 @@ static void samsung_dsim_transfer_start(struct samsung_dsim *dsi)
>  {
>  	unsigned long flags;
>  	struct samsung_dsim_transfer *xfer;
> -	bool start = false;
>  
> -again:
>  	spin_lock_irqsave(&dsi->transfer_lock, flags);
>  
> -	if (list_empty(&dsi->transfer_list)) {
> +	while (!list_empty(&dsi->transfer_list)) {
> +		xfer = list_first_entry(&dsi->transfer_list,
> +					struct samsung_dsim_transfer, list);
> +
>  		spin_unlock_irqrestore(&dsi->transfer_lock, flags);
> -		return;
> +
> +		if (xfer->packet.payload_length &&
> +		    xfer->tx_done == xfer->packet.payload_length)
> +			/* waiting for RX */
> +			return;
> +
> +		samsung_dsim_send_to_fifo(dsi, xfer);
> +
> +		if (xfer->packet.payload_length || xfer->rx_len)
> +			return;
> +
> +		xfer->result = 0;
> +		complete(&xfer->completed);
> +
> +		spin_lock_irqsave(&dsi->transfer_lock, flags);
> +
> +		list_del_init(&xfer->list);
>  	}
>  
> -	xfer = list_first_entry(&dsi->transfer_list,
> -				struct samsung_dsim_transfer, list);
> -
>  	spin_unlock_irqrestore(&dsi->transfer_lock, flags);
> -
> -	if (xfer->packet.payload_length &&
> -	    xfer->tx_done == xfer->packet.payload_length)
> -		/* waiting for RX */
> -		return;
> -
> -	samsung_dsim_send_to_fifo(dsi, xfer);
> -
> -	if (xfer->packet.payload_length || xfer->rx_len)
> -		return;
> -
> -	xfer->result = 0;
> -	complete(&xfer->completed);
> -
> -	spin_lock_irqsave(&dsi->transfer_lock, flags);
> -
> -	list_del_init(&xfer->list);
> -	start = !list_empty(&dsi->transfer_list);
> -
> -	spin_unlock_irqrestore(&dsi->transfer_lock, flags);
> -
> -	if (start)
> -		goto again;
>  }
>  
>  static bool samsung_dsim_transfer_finish(struct samsung_dsim *dsi)
> 


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

* Re: [PATCH 2/2] drm/bridge: samsung-dsim: Use HZ_PER_MHZ macro from units.h
  2025-05-27 14:21 ` [PATCH 2/2] drm/bridge: samsung-dsim: Use HZ_PER_MHZ macro from units.h Philipp Zabel
@ 2025-05-27 14:53   ` Frieder Schrempf
  2025-05-27 15:12   ` Alexander Stein
  1 sibling, 0 replies; 8+ messages in thread
From: Frieder Schrempf @ 2025-05-27 14:53 UTC (permalink / raw)
  To: Philipp Zabel, Inki Dae, Jagan Teki, Marek Szyprowski,
	Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
	Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Maxime Ripard,
	Thomas Zimmermann, David Airlie, Simona Vetter
  Cc: dri-devel, linux-kernel, kernel

Am 27.05.25 um 16:21 schrieb Philipp Zabel:
> Drop the custom MHZ macro and replace it with HZ_PER_MHZ.
> 
> Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>

Reviewed-by: Frieder Schrempf <frieder.schrempf@kontron.de>

> ---
>  drivers/gpu/drm/bridge/samsung-dsim.c | 26 ++++++++++++--------------
>  1 file changed, 12 insertions(+), 14 deletions(-)
> 
> diff --git a/drivers/gpu/drm/bridge/samsung-dsim.c b/drivers/gpu/drm/bridge/samsung-dsim.c
> index 1dfc9710bee5134e0e0114ce52f673c21564b11b..b7fd5870eba7e4bef3f420ae7cf6de1a700eb41d 100644
> --- a/drivers/gpu/drm/bridge/samsung-dsim.c
> +++ b/drivers/gpu/drm/bridge/samsung-dsim.c
> @@ -19,6 +19,7 @@
>  #include <linux/of.h>
>  #include <linux/phy/phy.h>
>  #include <linux/platform_device.h>
> +#include <linux/units.h>
>  
>  #include <video/mipi_display.h>
>  
> @@ -557,10 +558,6 @@ static void samsung_dsim_reset(struct samsung_dsim *dsi)
>  	samsung_dsim_write(dsi, DSIM_SWRST_REG, reset_val);
>  }
>  
> -#ifndef MHZ
> -#define MHZ	(1000 * 1000)
> -#endif
> -
>  static unsigned long samsung_dsim_pll_find_pms(struct samsung_dsim *dsi,
>  					       unsigned long fin,
>  					       unsigned long fout,
> @@ -574,8 +571,8 @@ static unsigned long samsung_dsim_pll_find_pms(struct samsung_dsim *dsi,
>  	u16 _m, best_m;
>  	u8 _s, best_s;
>  
> -	p_min = DIV_ROUND_UP(fin, (driver_data->pll_fin_max * MHZ));
> -	p_max = fin / (driver_data->pll_fin_min * MHZ);
> +	p_min = DIV_ROUND_UP(fin, (driver_data->pll_fin_max * HZ_PER_MHZ));
> +	p_max = fin / (driver_data->pll_fin_min * HZ_PER_MHZ);
>  
>  	for (_p = p_min; _p <= p_max; ++_p) {
>  		for (_s = 0; _s <= 5; ++_s) {
> @@ -590,8 +587,8 @@ static unsigned long samsung_dsim_pll_find_pms(struct samsung_dsim *dsi,
>  
>  			tmp = (u64)_m * fin;
>  			do_div(tmp, _p);
> -			if (tmp < driver_data->min_freq  * MHZ ||
> -			    tmp > driver_data->max_freq * MHZ)
> +			if (tmp < driver_data->min_freq  * HZ_PER_MHZ ||
> +			    tmp > driver_data->max_freq * HZ_PER_MHZ)
>  				continue;
>  
>  			tmp = (u64)_m * fin;
> @@ -634,7 +631,7 @@ static unsigned long samsung_dsim_set_pll(struct samsung_dsim *dsi,
>  		 * limit.
>  		 */
>  		fin = clk_get_rate(clk_get_parent(dsi->pll_clk));
> -		while (fin > driver_data->pll_fin_max * MHZ)
> +		while (fin > driver_data->pll_fin_max * HZ_PER_MHZ)
>  			fin /= 2;
>  		clk_set_rate(dsi->pll_clk, fin);
>  
> @@ -660,10 +657,11 @@ static unsigned long samsung_dsim_set_pll(struct samsung_dsim *dsi,
>  
>  	if (driver_data->has_freqband) {
>  		static const unsigned long freq_bands[] = {
> -			100 * MHZ, 120 * MHZ, 160 * MHZ, 200 * MHZ,
> -			270 * MHZ, 320 * MHZ, 390 * MHZ, 450 * MHZ,
> -			510 * MHZ, 560 * MHZ, 640 * MHZ, 690 * MHZ,
> -			770 * MHZ, 870 * MHZ, 950 * MHZ,
> +			100 * HZ_PER_MHZ, 120 * HZ_PER_MHZ, 160 * HZ_PER_MHZ,
> +			200 * HZ_PER_MHZ, 270 * HZ_PER_MHZ, 320 * HZ_PER_MHZ,
> +			390 * HZ_PER_MHZ, 450 * HZ_PER_MHZ, 510 * HZ_PER_MHZ,
> +			560 * HZ_PER_MHZ, 640 * HZ_PER_MHZ, 690 * HZ_PER_MHZ,
> +			770 * HZ_PER_MHZ, 870 * HZ_PER_MHZ, 950 * HZ_PER_MHZ,
>  		};
>  		int band;
>  
> @@ -723,7 +721,7 @@ static int samsung_dsim_enable_clock(struct samsung_dsim *dsi)
>  	esc_div = DIV_ROUND_UP(byte_clk, dsi->esc_clk_rate);
>  	esc_clk = byte_clk / esc_div;
>  
> -	if (esc_clk > 20 * MHZ) {
> +	if (esc_clk > 20 * HZ_PER_MHZ) {
>  		++esc_div;
>  		esc_clk = byte_clk / esc_div;
>  	}
> 


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

* Re: [PATCH 1/2] drm/bridge: samsung-dsim: use while loop in samsung_dsim_transfer_start
  2025-05-27 14:21 ` [PATCH 1/2] drm/bridge: samsung-dsim: use while loop in samsung_dsim_transfer_start Philipp Zabel
  2025-05-27 14:52   ` Frieder Schrempf
@ 2025-05-27 15:10   ` Alexander Stein
  1 sibling, 0 replies; 8+ messages in thread
From: Alexander Stein @ 2025-05-27 15:10 UTC (permalink / raw)
  To: Inki Dae, Jagan Teki, Marek Szyprowski, Andrzej Hajda,
	Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman,
	Jernej Skrabec, Maarten Lankhorst, Maxime Ripard,
	Thomas Zimmermann, David Airlie, Simona Vetter, dri-devel
  Cc: dri-devel, linux-kernel, kernel, Philipp Zabel, Philipp Zabel

Am Dienstag, 27. Mai 2025, 16:21:47 CEST schrieb Philipp Zabel:
> Turn the open-coded goto-again construct into a while loop, to make
> samsung_dsim_transfer_start() a bit shorter and easier to read.
> 
> Hold the spinlock when looping back around and avoid the duplicated
> list_empty() check.
> 
> Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>

Reviewed-by: Alexander Stein <alexander.stein@ew.tq-group.com>

> ---
>  drivers/gpu/drm/bridge/samsung-dsim.c | 51 +++++++++++++++--------------------
>  1 file changed, 21 insertions(+), 30 deletions(-)
> 
> diff --git a/drivers/gpu/drm/bridge/samsung-dsim.c b/drivers/gpu/drm/bridge/samsung-dsim.c
> index 0014c497e3fe7d8349a119dbdda30d65d816cccf..1dfc9710bee5134e0e0114ce52f673c21564b11b 100644
> --- a/drivers/gpu/drm/bridge/samsung-dsim.c
> +++ b/drivers/gpu/drm/bridge/samsung-dsim.c
> @@ -1235,43 +1235,34 @@ static void samsung_dsim_transfer_start(struct samsung_dsim *dsi)
>  {
>  	unsigned long flags;
>  	struct samsung_dsim_transfer *xfer;
> -	bool start = false;
>  
> -again:
>  	spin_lock_irqsave(&dsi->transfer_lock, flags);
>  
> -	if (list_empty(&dsi->transfer_list)) {
> +	while (!list_empty(&dsi->transfer_list)) {
> +		xfer = list_first_entry(&dsi->transfer_list,
> +					struct samsung_dsim_transfer, list);
> +
>  		spin_unlock_irqrestore(&dsi->transfer_lock, flags);
> -		return;
> +
> +		if (xfer->packet.payload_length &&
> +		    xfer->tx_done == xfer->packet.payload_length)
> +			/* waiting for RX */
> +			return;
> +
> +		samsung_dsim_send_to_fifo(dsi, xfer);
> +
> +		if (xfer->packet.payload_length || xfer->rx_len)
> +			return;
> +
> +		xfer->result = 0;
> +		complete(&xfer->completed);
> +
> +		spin_lock_irqsave(&dsi->transfer_lock, flags);
> +
> +		list_del_init(&xfer->list);
>  	}
>  
> -	xfer = list_first_entry(&dsi->transfer_list,
> -				struct samsung_dsim_transfer, list);
> -
>  	spin_unlock_irqrestore(&dsi->transfer_lock, flags);
> -
> -	if (xfer->packet.payload_length &&
> -	    xfer->tx_done == xfer->packet.payload_length)
> -		/* waiting for RX */
> -		return;
> -
> -	samsung_dsim_send_to_fifo(dsi, xfer);
> -
> -	if (xfer->packet.payload_length || xfer->rx_len)
> -		return;
> -
> -	xfer->result = 0;
> -	complete(&xfer->completed);
> -
> -	spin_lock_irqsave(&dsi->transfer_lock, flags);
> -
> -	list_del_init(&xfer->list);
> -	start = !list_empty(&dsi->transfer_list);
> -
> -	spin_unlock_irqrestore(&dsi->transfer_lock, flags);
> -
> -	if (start)
> -		goto again;
>  }
>  
>  static bool samsung_dsim_transfer_finish(struct samsung_dsim *dsi)
> 
> 


-- 
TQ-Systems GmbH | Mühlstraße 2, Gut Delling | 82229 Seefeld, Germany
Amtsgericht München, HRB 105018
Geschäftsführer: Detlef Schneider, Rüdiger Stahl, Stefan Schneider
http://www.tq-group.com/



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

* Re: [PATCH 2/2] drm/bridge: samsung-dsim: Use HZ_PER_MHZ macro from units.h
  2025-05-27 14:21 ` [PATCH 2/2] drm/bridge: samsung-dsim: Use HZ_PER_MHZ macro from units.h Philipp Zabel
  2025-05-27 14:53   ` Frieder Schrempf
@ 2025-05-27 15:12   ` Alexander Stein
  1 sibling, 0 replies; 8+ messages in thread
From: Alexander Stein @ 2025-05-27 15:12 UTC (permalink / raw)
  To: Inki Dae, Jagan Teki, Marek Szyprowski, Andrzej Hajda,
	Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman,
	Jernej Skrabec, Maarten Lankhorst, Maxime Ripard,
	Thomas Zimmermann, David Airlie, Simona Vetter, dri-devel
  Cc: dri-devel, linux-kernel, kernel, Philipp Zabel, Philipp Zabel

Am Dienstag, 27. Mai 2025, 16:21:48 CEST schrieb Philipp Zabel:
> Drop the custom MHZ macro and replace it with HZ_PER_MHZ.
> 
> Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>

Reviewed-by: Alexander Stein <alexander.stein@ew.tq-group.com>

> ---
>  drivers/gpu/drm/bridge/samsung-dsim.c | 26 ++++++++++++--------------
>  1 file changed, 12 insertions(+), 14 deletions(-)
> 
> diff --git a/drivers/gpu/drm/bridge/samsung-dsim.c b/drivers/gpu/drm/bridge/samsung-dsim.c
> index 1dfc9710bee5134e0e0114ce52f673c21564b11b..b7fd5870eba7e4bef3f420ae7cf6de1a700eb41d 100644
> --- a/drivers/gpu/drm/bridge/samsung-dsim.c
> +++ b/drivers/gpu/drm/bridge/samsung-dsim.c
> @@ -19,6 +19,7 @@
>  #include <linux/of.h>
>  #include <linux/phy/phy.h>
>  #include <linux/platform_device.h>
> +#include <linux/units.h>
>  
>  #include <video/mipi_display.h>
>  
> @@ -557,10 +558,6 @@ static void samsung_dsim_reset(struct samsung_dsim *dsi)
>  	samsung_dsim_write(dsi, DSIM_SWRST_REG, reset_val);
>  }
>  
> -#ifndef MHZ
> -#define MHZ	(1000 * 1000)
> -#endif
> -
>  static unsigned long samsung_dsim_pll_find_pms(struct samsung_dsim *dsi,
>  					       unsigned long fin,
>  					       unsigned long fout,
> @@ -574,8 +571,8 @@ static unsigned long samsung_dsim_pll_find_pms(struct samsung_dsim *dsi,
>  	u16 _m, best_m;
>  	u8 _s, best_s;
>  
> -	p_min = DIV_ROUND_UP(fin, (driver_data->pll_fin_max * MHZ));
> -	p_max = fin / (driver_data->pll_fin_min * MHZ);
> +	p_min = DIV_ROUND_UP(fin, (driver_data->pll_fin_max * HZ_PER_MHZ));
> +	p_max = fin / (driver_data->pll_fin_min * HZ_PER_MHZ);
>  
>  	for (_p = p_min; _p <= p_max; ++_p) {
>  		for (_s = 0; _s <= 5; ++_s) {
> @@ -590,8 +587,8 @@ static unsigned long samsung_dsim_pll_find_pms(struct samsung_dsim *dsi,
>  
>  			tmp = (u64)_m * fin;
>  			do_div(tmp, _p);
> -			if (tmp < driver_data->min_freq  * MHZ ||
> -			    tmp > driver_data->max_freq * MHZ)
> +			if (tmp < driver_data->min_freq  * HZ_PER_MHZ ||
> +			    tmp > driver_data->max_freq * HZ_PER_MHZ)
>  				continue;
>  
>  			tmp = (u64)_m * fin;
> @@ -634,7 +631,7 @@ static unsigned long samsung_dsim_set_pll(struct samsung_dsim *dsi,
>  		 * limit.
>  		 */
>  		fin = clk_get_rate(clk_get_parent(dsi->pll_clk));
> -		while (fin > driver_data->pll_fin_max * MHZ)
> +		while (fin > driver_data->pll_fin_max * HZ_PER_MHZ)
>  			fin /= 2;
>  		clk_set_rate(dsi->pll_clk, fin);
>  
> @@ -660,10 +657,11 @@ static unsigned long samsung_dsim_set_pll(struct samsung_dsim *dsi,
>  
>  	if (driver_data->has_freqband) {
>  		static const unsigned long freq_bands[] = {
> -			100 * MHZ, 120 * MHZ, 160 * MHZ, 200 * MHZ,
> -			270 * MHZ, 320 * MHZ, 390 * MHZ, 450 * MHZ,
> -			510 * MHZ, 560 * MHZ, 640 * MHZ, 690 * MHZ,
> -			770 * MHZ, 870 * MHZ, 950 * MHZ,
> +			100 * HZ_PER_MHZ, 120 * HZ_PER_MHZ, 160 * HZ_PER_MHZ,
> +			200 * HZ_PER_MHZ, 270 * HZ_PER_MHZ, 320 * HZ_PER_MHZ,
> +			390 * HZ_PER_MHZ, 450 * HZ_PER_MHZ, 510 * HZ_PER_MHZ,
> +			560 * HZ_PER_MHZ, 640 * HZ_PER_MHZ, 690 * HZ_PER_MHZ,
> +			770 * HZ_PER_MHZ, 870 * HZ_PER_MHZ, 950 * HZ_PER_MHZ,
>  		};
>  		int band;
>  
> @@ -723,7 +721,7 @@ static int samsung_dsim_enable_clock(struct samsung_dsim *dsi)
>  	esc_div = DIV_ROUND_UP(byte_clk, dsi->esc_clk_rate);
>  	esc_clk = byte_clk / esc_div;
>  
> -	if (esc_clk > 20 * MHZ) {
> +	if (esc_clk > 20 * HZ_PER_MHZ) {
>  		++esc_div;
>  		esc_clk = byte_clk / esc_div;
>  	}
> 
> 


-- 
TQ-Systems GmbH | Mühlstraße 2, Gut Delling | 82229 Seefeld, Germany
Amtsgericht München, HRB 105018
Geschäftsführer: Detlef Schneider, Rüdiger Stahl, Stefan Schneider
http://www.tq-group.com/



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

* Re: [PATCH 0/2] drm/bridge: samsung-dsim: Small cleanups
  2025-05-27 14:21 [PATCH 0/2] drm/bridge: samsung-dsim: Small cleanups Philipp Zabel
  2025-05-27 14:21 ` [PATCH 1/2] drm/bridge: samsung-dsim: use while loop in samsung_dsim_transfer_start Philipp Zabel
  2025-05-27 14:21 ` [PATCH 2/2] drm/bridge: samsung-dsim: Use HZ_PER_MHZ macro from units.h Philipp Zabel
@ 2025-06-27 11:49 ` Philipp Zabel
  2 siblings, 0 replies; 8+ messages in thread
From: Philipp Zabel @ 2025-06-27 11:49 UTC (permalink / raw)
  To: Inki Dae, Jagan Teki, Marek Szyprowski, Andrzej Hajda,
	Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman,
	Jernej Skrabec, Maarten Lankhorst, Maxime Ripard,
	Thomas Zimmermann, David Airlie, Simona Vetter
  Cc: dri-devel, linux-kernel, kernel

On Di, 2025-05-27 at 16:21 +0200, Philipp Zabel wrote:
> Replace an open-coded goto-again construct with a while loop and a
> custom MHZ macro with the common HZ_PER_MHZ.
> 
> Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
> ---
> Philipp Zabel (2):
>       drm/bridge: samsung-dsim: use while loop in samsung_dsim_transfer_start
>       drm/bridge: samsung-dsim: Use HZ_PER_MHZ macro from units.h
> 
>  drivers/gpu/drm/bridge/samsung-dsim.c | 77 +++++++++++++++--------------------
>  1 file changed, 33 insertions(+), 44 deletions(-)
> ---
> base-commit: 99764593528f9e0ee9509f9e4a4eb21db99d0681
> change-id: 20250527-samsung-dsim-2bae3b45f77b
> 
> Best regards,

Applied to drm-misc-next.

[1/2] drm/bridge: samsung-dsim: use while loop in samsung_dsim_transfer_start
      commit: bafc628678796e3a05bd54c30280f4ecdaf3ebba
[2/2] drm/bridge: samsung-dsim: Use HZ_PER_MHZ macro from units.h
      commit: b462b0ef4d788d56f0e575406e58450358dcbd96

regards
Philipp

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

end of thread, other threads:[~2025-06-27 11:49 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-05-27 14:21 [PATCH 0/2] drm/bridge: samsung-dsim: Small cleanups Philipp Zabel
2025-05-27 14:21 ` [PATCH 1/2] drm/bridge: samsung-dsim: use while loop in samsung_dsim_transfer_start Philipp Zabel
2025-05-27 14:52   ` Frieder Schrempf
2025-05-27 15:10   ` Alexander Stein
2025-05-27 14:21 ` [PATCH 2/2] drm/bridge: samsung-dsim: Use HZ_PER_MHZ macro from units.h Philipp Zabel
2025-05-27 14:53   ` Frieder Schrempf
2025-05-27 15:12   ` Alexander Stein
2025-06-27 11:49 ` [PATCH 0/2] drm/bridge: samsung-dsim: Small cleanups Philipp Zabel

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.