All of lore.kernel.org
 help / color / mirror / Atom feed
From: Krzysztof Kozlowski <k.kozlowski@samsung.com>
To: Matthew Leach <matthew@mattleach.net>,
	Ben Dooks <ben.dooks@codethink.co.uk>
Cc: linux-samsung-soc@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Jiri Slaby <jslaby@suse.com>,
	linux-serial@vger.kernel.org
Subject: Re: [RFC PATCH 06/15] tty: serial: samsung: add byte-order aware bit functions
Date: Fri, 10 Jun 2016 14:17:41 +0200	[thread overview]
Message-ID: <575AAFE5.8020207@samsung.com> (raw)
In-Reply-To: <20160608183110.13851-7-matthew@mattleach.net>

On 06/08/2016 08:31 PM, Matthew Leach wrote:
> This driver makes use of the __set_bit() and __clear_bit() functions.
> When running under big-endian, these functions don't convert the bit
> indexes when working with peripheral registers, leading to the
> incorrect bits being set and cleared when running big-endian.
> 
> Add two new driver functions for setting and clearing bits that are
> byte-order aware.
> 
> Signed-off-by: Matthew Leach <matthew@mattleach.net>
> ---
> CC: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> CC: Jiri Slaby <jslaby@suse.com>
> CC: linux-serial@vger.kernel.org
> CC: linux-kernel@vger.kernel.org
> ---
>  drivers/tty/serial/samsung.c | 16 +++++++---------
>  drivers/tty/serial/samsung.h | 29 +++++++++++++++++++++++++++++
>  2 files changed, 36 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/tty/serial/samsung.c b/drivers/tty/serial/samsung.c
> index 99bb231..e4f53d5 100644
> --- a/drivers/tty/serial/samsung.c
> +++ b/drivers/tty/serial/samsung.c
> @@ -169,8 +169,7 @@ static void s3c24xx_serial_stop_tx(struct uart_port *port)
>  		return;
>  
>  	if (s3c24xx_serial_has_interrupt_mask(port))
> -		__set_bit(S3C64XX_UINTM_TXD,
> -			portaddrl(port, S3C64XX_UINTM));
> +		s3c24xx_set_bit(port, S3C64XX_UINTM_TXD, S3C64XX_UINTM);
>  	else
>  		disable_irq_nosync(ourport->tx_irq);
>  
> @@ -235,8 +234,7 @@ static void enable_tx_dma(struct s3c24xx_uart_port *ourport)
>  
>  	/* Mask Tx interrupt */
>  	if (s3c24xx_serial_has_interrupt_mask(port))
> -		__set_bit(S3C64XX_UINTM_TXD,
> -			  portaddrl(port, S3C64XX_UINTM));
> +		s3c24xx_set_bit(port, S3C64XX_UINTM_TXD, S3C64XX_UINTM);
>  	else
>  		disable_irq_nosync(ourport->tx_irq);
>  
> @@ -269,8 +267,8 @@ static void enable_tx_pio(struct s3c24xx_uart_port *ourport)
>  
>  	/* Unmask Tx interrupt */
>  	if (s3c24xx_serial_has_interrupt_mask(port))
> -		__clear_bit(S3C64XX_UINTM_TXD,
> -			    portaddrl(port, S3C64XX_UINTM));
> +		s3c24xx_clear_bit(port, S3C64XX_UINTM_TXD,
> +				  S3C64XX_UINTM);
>  	else
>  		enable_irq(ourport->tx_irq);
>  
> @@ -397,8 +395,8 @@ static void s3c24xx_serial_stop_rx(struct uart_port *port)
>  	if (rx_enabled(port)) {
>  		dbg("s3c24xx_serial_stop_rx: port=%p\n", port);
>  		if (s3c24xx_serial_has_interrupt_mask(port))
> -			__set_bit(S3C64XX_UINTM_RXD,
> -				portaddrl(port, S3C64XX_UINTM));
> +			s3c24xx_set_bit(port, S3C64XX_UINTM_RXD,
> +					S3C64XX_UINTM);
>  		else
>  			disable_irq_nosync(ourport->rx_irq);
>  		rx_enabled(port) = 0;
> @@ -1069,7 +1067,7 @@ static int s3c64xx_serial_startup(struct uart_port *port)
>  	spin_unlock_irqrestore(&port->lock, flags);
>  
>  	/* Enable Rx Interrupt */
> -	__clear_bit(S3C64XX_UINTM_RXD, portaddrl(port, S3C64XX_UINTM));
> +	s3c24xx_clear_bit(port, S3C64XX_UINTM_RXD, S3C64XX_UINTM);
>  
>  	dbg("s3c64xx_serial_startup ok\n");
>  	return ret;
> diff --git a/drivers/tty/serial/samsung.h b/drivers/tty/serial/samsung.h
> index 8818bdd..e45745a 100644
> --- a/drivers/tty/serial/samsung.h
> +++ b/drivers/tty/serial/samsung.h
> @@ -111,6 +111,7 @@ struct s3c24xx_uart_port {
>  
>  #define s3c24xx_dev_to_port(__dev) dev_get_drvdata(__dev)
>  
> +

This new line looks unnecessary. Beside that it looks okay:

Reviewed-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>

Best regards,
Krzysztof

>  /* register access controls */
>  
>  #define portaddr(port, reg) ((port)->membase + (reg))
> @@ -123,4 +124,32 @@ struct s3c24xx_uart_port {
>  #define wr_regb(port, reg, val) __raw_writeb(val, portaddr(port, reg))
>  #define wr_regl(port, reg, val) writel_relaxed(val, portaddr(port, reg))
>  
> +/* Byte-order aware bit setting/clearing functions. */
> +
> +static inline void s3c24xx_set_bit(struct uart_port *port, int idx,
> +				   unsigned int reg)
> +{
> +	unsigned long flags;
> +	u32 val;
> +
> +	local_irq_save(flags);
> +	val = rd_regl(port, reg);
> +	val |= (1 << idx);
> +	wr_regl(port, reg, val);
> +	local_irq_restore(flags);
> +}
> +
> +static inline void s3c24xx_clear_bit(struct uart_port *port, int idx,
> +				     unsigned int reg)
> +{
> +	unsigned long flags;
> +	u32 val;
> +
> +	local_irq_save(flags);
> +	val = rd_regl(port, reg);
> +	val &= ~(1 << idx);
> +	wr_regl(port, reg, val);
> +	local_irq_restore(flags);
> +}
> +
>  #endif
> 

WARNING: multiple messages have this Message-ID (diff)
From: k.kozlowski@samsung.com (Krzysztof Kozlowski)
To: linux-arm-kernel@lists.infradead.org
Subject: [RFC PATCH 06/15] tty: serial: samsung: add byte-order aware bit functions
Date: Fri, 10 Jun 2016 14:17:41 +0200	[thread overview]
Message-ID: <575AAFE5.8020207@samsung.com> (raw)
In-Reply-To: <20160608183110.13851-7-matthew@mattleach.net>

On 06/08/2016 08:31 PM, Matthew Leach wrote:
> This driver makes use of the __set_bit() and __clear_bit() functions.
> When running under big-endian, these functions don't convert the bit
> indexes when working with peripheral registers, leading to the
> incorrect bits being set and cleared when running big-endian.
> 
> Add two new driver functions for setting and clearing bits that are
> byte-order aware.
> 
> Signed-off-by: Matthew Leach <matthew@mattleach.net>
> ---
> CC: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> CC: Jiri Slaby <jslaby@suse.com>
> CC: linux-serial at vger.kernel.org
> CC: linux-kernel at vger.kernel.org
> ---
>  drivers/tty/serial/samsung.c | 16 +++++++---------
>  drivers/tty/serial/samsung.h | 29 +++++++++++++++++++++++++++++
>  2 files changed, 36 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/tty/serial/samsung.c b/drivers/tty/serial/samsung.c
> index 99bb231..e4f53d5 100644
> --- a/drivers/tty/serial/samsung.c
> +++ b/drivers/tty/serial/samsung.c
> @@ -169,8 +169,7 @@ static void s3c24xx_serial_stop_tx(struct uart_port *port)
>  		return;
>  
>  	if (s3c24xx_serial_has_interrupt_mask(port))
> -		__set_bit(S3C64XX_UINTM_TXD,
> -			portaddrl(port, S3C64XX_UINTM));
> +		s3c24xx_set_bit(port, S3C64XX_UINTM_TXD, S3C64XX_UINTM);
>  	else
>  		disable_irq_nosync(ourport->tx_irq);
>  
> @@ -235,8 +234,7 @@ static void enable_tx_dma(struct s3c24xx_uart_port *ourport)
>  
>  	/* Mask Tx interrupt */
>  	if (s3c24xx_serial_has_interrupt_mask(port))
> -		__set_bit(S3C64XX_UINTM_TXD,
> -			  portaddrl(port, S3C64XX_UINTM));
> +		s3c24xx_set_bit(port, S3C64XX_UINTM_TXD, S3C64XX_UINTM);
>  	else
>  		disable_irq_nosync(ourport->tx_irq);
>  
> @@ -269,8 +267,8 @@ static void enable_tx_pio(struct s3c24xx_uart_port *ourport)
>  
>  	/* Unmask Tx interrupt */
>  	if (s3c24xx_serial_has_interrupt_mask(port))
> -		__clear_bit(S3C64XX_UINTM_TXD,
> -			    portaddrl(port, S3C64XX_UINTM));
> +		s3c24xx_clear_bit(port, S3C64XX_UINTM_TXD,
> +				  S3C64XX_UINTM);
>  	else
>  		enable_irq(ourport->tx_irq);
>  
> @@ -397,8 +395,8 @@ static void s3c24xx_serial_stop_rx(struct uart_port *port)
>  	if (rx_enabled(port)) {
>  		dbg("s3c24xx_serial_stop_rx: port=%p\n", port);
>  		if (s3c24xx_serial_has_interrupt_mask(port))
> -			__set_bit(S3C64XX_UINTM_RXD,
> -				portaddrl(port, S3C64XX_UINTM));
> +			s3c24xx_set_bit(port, S3C64XX_UINTM_RXD,
> +					S3C64XX_UINTM);
>  		else
>  			disable_irq_nosync(ourport->rx_irq);
>  		rx_enabled(port) = 0;
> @@ -1069,7 +1067,7 @@ static int s3c64xx_serial_startup(struct uart_port *port)
>  	spin_unlock_irqrestore(&port->lock, flags);
>  
>  	/* Enable Rx Interrupt */
> -	__clear_bit(S3C64XX_UINTM_RXD, portaddrl(port, S3C64XX_UINTM));
> +	s3c24xx_clear_bit(port, S3C64XX_UINTM_RXD, S3C64XX_UINTM);
>  
>  	dbg("s3c64xx_serial_startup ok\n");
>  	return ret;
> diff --git a/drivers/tty/serial/samsung.h b/drivers/tty/serial/samsung.h
> index 8818bdd..e45745a 100644
> --- a/drivers/tty/serial/samsung.h
> +++ b/drivers/tty/serial/samsung.h
> @@ -111,6 +111,7 @@ struct s3c24xx_uart_port {
>  
>  #define s3c24xx_dev_to_port(__dev) dev_get_drvdata(__dev)
>  
> +

This new line looks unnecessary. Beside that it looks okay:

Reviewed-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>

Best regards,
Krzysztof

>  /* register access controls */
>  
>  #define portaddr(port, reg) ((port)->membase + (reg))
> @@ -123,4 +124,32 @@ struct s3c24xx_uart_port {
>  #define wr_regb(port, reg, val) __raw_writeb(val, portaddr(port, reg))
>  #define wr_regl(port, reg, val) writel_relaxed(val, portaddr(port, reg))
>  
> +/* Byte-order aware bit setting/clearing functions. */
> +
> +static inline void s3c24xx_set_bit(struct uart_port *port, int idx,
> +				   unsigned int reg)
> +{
> +	unsigned long flags;
> +	u32 val;
> +
> +	local_irq_save(flags);
> +	val = rd_regl(port, reg);
> +	val |= (1 << idx);
> +	wr_regl(port, reg, val);
> +	local_irq_restore(flags);
> +}
> +
> +static inline void s3c24xx_clear_bit(struct uart_port *port, int idx,
> +				     unsigned int reg)
> +{
> +	unsigned long flags;
> +	u32 val;
> +
> +	local_irq_save(flags);
> +	val = rd_regl(port, reg);
> +	val &= ~(1 << idx);
> +	wr_regl(port, reg, val);
> +	local_irq_restore(flags);
> +}
> +
>  #endif
> 

  reply	other threads:[~2016-06-10 12:17 UTC|newest]

Thread overview: 78+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-08 18:30 [RFC PATCH 00/15] Exynos big-endian fixes Matthew Leach
2016-06-08 18:30 ` Matthew Leach
2016-06-08 18:30 ` [RFC PATCH 01/15] clock: exynos: fixup endian in pll clk Matthew Leach
2016-06-08 18:30   ` Matthew Leach
2016-06-10  9:51   ` Sylwester Nawrocki
2016-06-10  9:51     ` Sylwester Nawrocki
2016-06-08 18:30 ` [RFC PATCH 02/15] clocksource: samsung_pwm_timer: fix endian accessors Matthew Leach
2016-06-08 18:30   ` Matthew Leach
2016-06-10 11:43   ` Krzysztof Kozlowski
2016-06-10 11:43     ` Krzysztof Kozlowski
2016-06-16 13:23   ` Daniel Lezcano
2016-06-16 13:23     ` Daniel Lezcano
2016-06-08 18:30 ` [RFC PATCH 03/15] clk: samsung: exynos4: fixup reg access on be Matthew Leach
2016-06-08 18:30   ` Matthew Leach
2016-06-10  9:51   ` Sylwester Nawrocki
2016-06-10  9:51     ` Sylwester Nawrocki
2016-06-08 18:30 ` [RFC PATCH 04/15] irqchip: exynos_combiner: " Matthew Leach
2016-06-08 18:30   ` Matthew Leach
2016-06-10 11:44   ` Krzysztof Kozlowski
2016-06-10 11:44     ` Krzysztof Kozlowski
2016-06-08 18:31 ` [RFC PATCH 05/15] tty: serial: samsung: fixup accessors for endian Matthew Leach
2016-06-08 18:31   ` Matthew Leach
2016-06-08 18:31   ` Matthew Leach
2016-06-09  8:12   ` Ben Dooks
2016-06-09  8:12     ` Ben Dooks
2016-06-10 10:13   ` Ben Dooks
2016-06-10 10:13     ` Ben Dooks
2016-06-10 11:47     ` Krzysztof Kozlowski
2016-06-10 11:47       ` Krzysztof Kozlowski
2016-06-08 18:31 ` [RFC PATCH 06/15] tty: serial: samsung: add byte-order aware bit functions Matthew Leach
2016-06-08 18:31   ` Matthew Leach
2016-06-10 12:17   ` Krzysztof Kozlowski [this message]
2016-06-10 12:17     ` Krzysztof Kozlowski
2016-06-08 18:31 ` [RFC PATCH 07/15] ARM: exynos: fixup debug macros for big-endian Matthew Leach
2016-06-08 18:31   ` Matthew Leach
2016-06-08 18:31   ` Matthew Leach
2016-06-10 11:12   ` Ben Dooks
2016-06-10 11:12     ` Ben Dooks
2016-06-10 11:16     ` Krzysztof Kozlowski
2016-06-10 11:16       ` Krzysztof Kozlowski
2016-06-10 12:44       ` Ben Dooks
2016-06-10 12:44         ` Ben Dooks
2016-06-10 13:02       ` Ben Dooks
2016-06-10 13:02         ` Ben Dooks
2016-06-10 13:04         ` Krzysztof Kozlowski
2016-06-10 13:04           ` Krzysztof Kozlowski
2016-06-08 18:31 ` [RFC PATCH 08/15] ARM: samsung: fixup endian issues in cpu detection Matthew Leach
2016-06-08 18:31   ` Matthew Leach
2016-06-08 18:31   ` Matthew Leach
2016-06-08 18:31 ` [RFC PATCH 09/15] ARM: EXYNOS: fixups for big-endian operation Matthew Leach
2016-06-08 18:31   ` Matthew Leach
2016-06-08 18:31   ` Matthew Leach
2016-06-08 18:31 ` [RFC PATCH 10/15] ARM: EXYNOS: fixup endian in pm/pmu Matthew Leach
2016-06-08 18:31   ` Matthew Leach
2016-06-08 18:31 ` [RFC PATCH 11/15] ARM: EXYNOS: Enable ARCH_SUPPORTS_BIG_ENDIAN explicitly Matthew Leach
2016-06-08 18:31   ` Matthew Leach
2016-06-08 18:31   ` Matthew Leach
2016-06-08 18:31 ` [RFC PATCH 12/15] irqchip/s3c24xx: fixup IO accessors for big endian Matthew Leach
2016-06-08 18:31   ` Matthew Leach
2016-06-17  8:56   ` Krzysztof Kozlowski
2016-06-17  8:56     ` Krzysztof Kozlowski
2016-06-08 18:31 ` [RFC PATCH 13/15] memory: samsung: endian fixes for IO Matthew Leach
2016-06-08 18:31   ` Matthew Leach
2016-06-17  8:59   ` Krzysztof Kozlowski
2016-06-17  8:59     ` Krzysztof Kozlowski
2016-06-08 18:31 ` [RFC PATCH 14/15] hwrng: exynos - fixup IO accesors Matthew Leach
2016-06-08 18:31   ` Matthew Leach
2016-06-08 18:31 ` [RFC PATCH 15/15] iommu/exynos: update to use iommu big-endian Matthew Leach
2016-06-08 18:31   ` Matthew Leach
2016-06-09  6:51   ` Marek Szyprowski
2016-06-09  6:51     ` Marek Szyprowski
2016-06-09  8:14     ` Ben Dooks
2016-06-09  8:14       ` Ben Dooks
     [not found]   ` <20160608183110.13851-16-matthew-vFKDGoARCE+LZ21kGMrzwg@public.gmane.org>
2016-06-21  9:59     ` Joerg Roedel
2016-06-21  9:59       ` Joerg Roedel
2016-06-21  9:59       ` Joerg Roedel
2016-06-09  8:09 ` [RFC PATCH 00/15] Exynos big-endian fixes Ben Dooks
2016-06-09  8:09   ` Ben Dooks

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=575AAFE5.8020207@samsung.com \
    --to=k.kozlowski@samsung.com \
    --cc=ben.dooks@codethink.co.uk \
    --cc=gregkh@linuxfoundation.org \
    --cc=jslaby@suse.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-samsung-soc@vger.kernel.org \
    --cc=linux-serial@vger.kernel.org \
    --cc=matthew@mattleach.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.