linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: peter@hurleysoftware.com (Peter Hurley)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 10/11] tty: amba-pl011: add support for 32-bit register access
Date: Wed, 4 Nov 2015 23:46:25 -0500	[thread overview]
Message-ID: <563ADF21.8000405@hurleysoftware.com> (raw)
In-Reply-To: <20151103161939.GB8644@n2100.arm.linux.org.uk>

On 11/03/2015 11:19 AM, Russell King - ARM Linux wrote:
> On Tue, Nov 03, 2015 at 08:57:05AM -0600, Timur Tabi wrote:
>> Russell King wrote:
>>> -	return readw(uap->port.membase + pl011_reg_to_offset(uap, reg));
>>> +	void __iomem *addr = uap->port.membase + pl011_reg_to_offset(uap, reg);
>>> +
>>> +	return uap->access_32b ? readl(addr) : readw(addr);
>>
>> Ok, ignore my previous email.  I just noticed this.
>>
>> This version is fine, except that it now performs a runtime check for every
>> I/O access.  Isn't that too much overhead?  access_32b will always be either
>> True or False for the life of the entire SOC.
> 
> It's a balance between a few more branches and killing six registers
> (r0 - r3, ip, lr) on every register access due to a function call.
> If GCC was a reasonable compiler, it could be done without incuring
> any branches, merely by using conditional instructions, but GCC on
> ARM really sucks - it wants to reload the base address, offset and
> access_32b flag on every device access despite the struct being
> marked const.

The compiler reloads are probably due to the barriers in readw()/writew();
I think the relaxed i/o accessor variants avoid the reloads.

Regards,
Peter Hurley

  reply	other threads:[~2015-11-05  4:46 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-02 12:24 [PATCH DRAFT 0/2] Sketch for ZTE ZX296702 UART integration Andre Przywara
2015-11-02 12:24 ` [PATCH DRAFT 1/2] drivers: serial: PL011: refactor register access Andre Przywara
2015-11-02 13:27   ` Timur Tabi
2015-11-02 13:40     ` Andre Przywara
2015-11-02 13:44       ` Timur Tabi
2015-11-02 12:24 ` [PATCH DRAFT 2/2] drivers: serial: PL011: [DRAFT] implement register diverson for ZTE UART Andre Przywara
2015-11-03 13:46   ` Russell King - ARM Linux
2015-11-03 13:57     ` Andre Przywara
2015-11-05  9:54     ` Jun Nie
2015-11-03 14:23   ` Russell King - ARM Linux
2015-11-03 14:30     ` Andre Przywara
2015-11-03 13:43 ` [PATCH DRAFT 0/2] Sketch for ZTE ZX296702 UART integration Russell King - ARM Linux
2015-11-03 14:48   ` Russell King - ARM Linux
2015-11-03 14:50   ` [PATCH 01/11] tty: amba-pl011: add register accessor functions Russell King
2015-11-03 14:53     ` Timur Tabi
2015-11-03 15:18       ` Russell King - ARM Linux
2015-11-03 14:51   ` [PATCH 02/11] tty: amba-pl011: convert accessor functions to take uart_amba_port Russell King
2015-11-03 14:51   ` [PATCH 03/11] tty: amba-pl011: add helper to detect split LCRH register Russell King
2015-11-03 14:51   ` [PATCH 04/11] tty: amba-pl011: prepare REG_* register indexes Russell King
2015-11-03 14:51   ` [PATCH 05/11] tty: amba-pl011: add register lookup table Russell King
2015-11-06  0:00     ` Timur Tabi
2015-11-06  0:24       ` Russell King - ARM Linux
2015-11-06  0:27         ` Timur Tabi
2015-12-13  6:03     ` Greg Kroah-Hartman
2015-11-03 14:51   ` [PATCH 06/11] tty: amba-pl011: add register offset table to vendor data Russell King
2015-11-03 14:51   ` [PATCH 07/11] tty: amba-pl011: add ST register offset table Russell King
2015-11-03 14:51   ` [PATCH 08/11] tty: amba-pl011: clean up LCR register offsets Russell King
2015-11-03 14:51   ` [PATCH 09/11] tty: amba-pl011: remove ST micro registers from standard table Russell King
2015-11-03 14:51   ` [PATCH 10/11] tty: amba-pl011: add support for 32-bit register access Russell King
2015-11-03 14:57     ` Timur Tabi
2015-11-03 16:19       ` Russell King - ARM Linux
2015-11-05  4:46         ` Peter Hurley [this message]
2015-11-03 14:51   ` [PATCH 11/11] tty: amba-pl011: add support for ZTE UART (EXPERIMENTAL) Russell King
2015-11-05  8:28     ` Linus Walleij
2015-11-05  9:27       ` Russell King - ARM Linux
2015-11-05  9:54         ` Linus Walleij

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=563ADF21.8000405@hurleysoftware.com \
    --to=peter@hurleysoftware.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /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 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).