
Dear Lei Wen,
In message AANLkTinqAyDx7=61FMgPdCg3ULt9nk93jF-y0Sdi=5uX@mail.gmail.com you wrote:
I think my code also could handle this. They only could set the CONFIG_SYS_NS16550_REG_SIZE =A0to be 1 and CONFIG_SYS_NS16550_MAX_REG_SIZE to be 4. Then the other bits is untouched by this driver.
I don't think so. You still use just a single writel() call then. =A0To leave the other bits untouched, you would have to perform a readl() first, then insert one data byte, and then write it back. =A0Your patch does not do that.
My original patch is like below, so where it call writel?... +#elif (CONFIG_SYS_NS16550_REG_SIZE == 1) || (CONFIG_SYS_NS16550_REG_SIZE == -1) +#ifdef CONFIG_SYS_NS16550_PORT_MAPPED +#define serial_out(x, y) outb(x, y) +#define serial_in(y) inb(y) +#else +#define serial_out(x, y) writeb(x, y) +#define serial_in(y) readb(y)
If you use writeb() [as the current driver would do as well}, then how do you expect to set this bit 8 (which is in the next byte) to 0 as you claim you have to?
Either I don't understand what you want, or you don't understand how the ns16550 driver works.
I can see no shortcomings in the existent driver, thus no need to make it more complicated than it already is.
Best regards,
Wolfgang Denk