Thread (33 messages) 33 messages, 5 authors, 2017-05-31

[V2, 2/6] tty: serial: lpuart: add little endian 32 bit register support

From: Dong Aisheng <hidden>
Date: 2017-05-31 07:47:32
Also in: linux-serial, lkml

Hi Andy,

On Wed, May 17, 2017 at 12:55:59PM +0300, Andy Shevchenko wrote:
On Wed, May 17, 2017 at 8:43 AM, Dong Aisheng [off-list ref] wrote:
quoted
On Wed, May 17, 2017 at 08:37:41AM +0300, Nikita Yushchenko wrote:
quoted

17.05.2017 06:39, Dong Aisheng wrote:
quoted
On Tue, May 16, 2017 at 02:15:08PM +0300, Nikita Yushchenko wrote:
quoted
quoted
 static u32 lpuart32_read(void __iomem *addr)
 {
- return ioread32be(addr);
+ return lpuart_is_be ? ioread32be(addr) : readl(addr);
 }

 static void lpuart32_write(u32 val, void __iomem *addr)
 {
- iowrite32be(val, addr);
+ if (lpuart_is_be)
+         iowrite32be(val, addr);
+ else
+         writel(val, addr);
 }
What if this is ever executed on big endian system?
Sorry, not catching the point...

What issues will meet?
Isn't writel() in host endian?
On big endian systems, it is supposed to run iowrite32be.
It looks like you substituting *bus* side with CPU *side* of communication.

If you are talking about CPU side
__raw_readl() / __raw_writel() will do the trick.
Yes, you're right.
To be more accurate, for bus side, if it's BE lpuart it should use
ioread32be/iowrite32be. If it's LE lpuart, it should use readl/writel.

And for CPU side, endian is transparent to driver users as they're
hided in io accessors implementation.

Regards
Dong Aisheng
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help