[U-Boot] [PATCH] serial: ns16550: fix different reg size access

Wolfgang Denk
2011-04-01T10:25:26Z

Dear Lei Wen,

In message <AANLkTingSAd=sQH=QbmJjvOFjVbjsCbWH0SFFyKzVrs4@mail.gmail.com> you wrote:
>
> > 3. You say that the current implementation, which uses a writeb() call
> > (i. e. a byte write operation) to this register would not only
> > affect bits 0...7, as expected, but also clear bit 9.
>
> That is not my case. In my case, for writeb, it would affect only
> bits0-7, but leave
> bit 8 untouched. However, I need the bit 8 to be set to be 0, which is
> 1 at the power
> on.
...
> Yes, that is what I want. The bit8 set to 0.

Ah. But this is completely different thing, then.

Your code would only perform this operation by accident, and this is
definitely wrong. Assume some other system where this bit needs to
be set to 1 - then your code would corrupt the setting.

So I think:

1) The current NS16550 driver behaves correctly. It sets up the
NS16550 compatible parts of your chip in the correct way, without
messing with any non-standard bits.

2) If you have additional, non-standard bits in your device, you must
initialize these separately. Eventually you provide a custom
driver which just calls the standard NS16550 driver functions,
except where you have additional need to manipulate the extra,
non-standard bits of your device.

Best regards,

Wolfgang Denk

--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
For every complex problem, there is a solution that is simple, neat,
and wrong. -- H. L. Mencken