Skip to contentSkip to conversation

serial: ns16550: da8xx (freon/primus) is not omap-like

PATCH New Matthijs van Duin 3 participants 7 messages Jan 8, 2018 – Jan 19, 2018

lore
Share & tools
lore
#0 lore raw

PATCH 1/4 serial: ns16550: da8xx (freon/primus) is not omap-like

These are SoCs in the lineage of TI C6x DSPs, and as such have the same uart as TI Keystone SoCs.

---
 drivers/serial/ns16550.c | 8 ++++----
 include/ns16550.h        | 2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)
drivers/serial/ns16550.c +4 -4
index c702304e79bd..9cec58c887c8 100644
@@ -36,7 +36,7 @@ DECLARE_GLOBAL_DATA_PTR;
 #endif
 #endif /* !CONFIG_DM_SERIAL */
 
-#if defined(CONFIG_SOC_KEYSTONE)
+#if defined(CONFIG_SOC_KEYSTONE) || defined(CONFIG_SOC_DA8XX)
 #define UART_REG_VAL_PWREMU_MGMT_UART_DISABLE   0
 #define UART_REG_VAL_PWREMU_MGMT_UART_ENABLE ((1 << 14) | (1 << 13) | (1 << 0))
 #undef UART_MCRVAL
@@ -181,12 +181,12 @@ void NS16550_init(NS16550_t com_port, int baud_divisor)
 	serial_out(ns16550_getfcr(com_port), &com_port->fcr);
 	if (baud_divisor != -1)
 		NS16550_setbrg(com_port, baud_divisor);
-#if defined(CONFIG_ARCH_OMAP2PLUS) || defined(CONFIG_SOC_DA8XX)
+#if defined(CONFIG_ARCH_OMAP2PLUS)
 	/* /16 is proper to hit 115200 with 48MHz */
 	serial_out(0, &com_port->mdr1);
 #endif
-#if defined(CONFIG_SOC_KEYSTONE)
-	serial_out(UART_REG_VAL_PWREMU_MGMT_UART_ENABLE, &com_port->regC);
+#if defined(CONFIG_SOC_KEYSTONE) || defined(CONFIG_SOC_DA8XX)
+	serial_out(UART_REG_VAL_PWREMU_MGMT_UART_ENABLE, &com_port->pwr_mgmt);
 #endif
 }
 
include/ns16550.h +1 -1
index 5fcbcd2e74e3..a988d297e144 100644
@@ -71,7 +71,7 @@ struct NS16550 {
 	UART_REG(lsr);		/* 5 */
 	UART_REG(msr);		/* 6 */
 	UART_REG(spr);		/* 7 */
-#ifdef CONFIG_SOC_DA8XX
+#if defined(CONFIG_SOC_KEYSTONE) || defined(CONFIG_SOC_DA8XX)
 	UART_REG(reg8);		/* 8 */
 	UART_REG(reg9);		/* 9 */
 	UART_REG(revid1);	/* A */
Signature · 1 line
2.11.0
#1 lore raw

PATCH 1/4 serial: ns16550: da8xx (freon/primus) is not omap-like

Quoted 27 lines · Matthijs van Duin

These are SoCs in the lineage of TI C6x DSPs, and as such have the same uart as TI Keystone SoCs.

---
 drivers/serial/ns16550.c | 8 ++++----
 include/ns16550.h        | 2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)
drivers/serial/ns16550.c +1 -2
index c702304e79bd..9cec58c887c8 100644
@@ -36,7 +36,7 @@ DECLARE_GLOBAL_DATA_PTR;
 #endif
 #endif /* !CONFIG_DM_SERIAL */
 
-#if defined(CONFIG_SOC_KEYSTONE)
+#if defined(CONFIG_SOC_KEYSTONE) || defined(CONFIG_SOC_DA8XX)
 #define UART_REG_VAL_PWREMU_MGMT_UART_DISABLE   0
 #define UART_REG_VAL_PWREMU_MGMT_UART_ENABLE ((1 << 14) | (1 << 13) | (1 << 0))
 #undef UART_MCRVAL
@@ -181,12 +181,12 @@ void NS16550_init(NS16550_t com_port, int baud_divisor)
 	serial_out(ns16550_getfcr(com_port), &com_port->fcr);
 	if (baud_divisor != -1)
 		NS16550_setbrg(com_port, baud_divisor);
-#if defined(CONFIG_ARCH_OMAP2PLUS) || defined(CONFIG_SOC_DA8XX)

drivers/serial/ns16550.c void NS16550_init(NS16550_t com_port, int baud_divisor) · line 191

Quoted 10 lines
drivers/serial/ns16550.c +3 -2
+#if defined(CONFIG_ARCH_OMAP2PLUS)
 	/* /16 is proper to hit 115200 with 48MHz */
 	serial_out(0, &com_port->mdr1);
 #endif
-#if defined(CONFIG_SOC_KEYSTONE)
-	serial_out(UART_REG_VAL_PWREMU_MGMT_UART_ENABLE, &com_port->regC);
+#if defined(CONFIG_SOC_KEYSTONE) || defined(CONFIG_SOC_DA8XX)
+	serial_out(UART_REG_VAL_PWREMU_MGMT_UART_ENABLE, &com_port->pwr_mgmt);
 #endif
 }

This introduces a warning on all SOC_DA8XX systems because they do not set CONFIG_SYS_NS16550_MEM32 so serial_out is writeb and UART_REG_VAL_PWREMU_MGMT_UART_ENABLE is larger than a u8. Are you able to test SOC_DA8XX platforms? Thanks!

Signature · 8 lines
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20180119/544e1e8e/attachment.sig>
#2 lore raw

PATCH 1/4 serial: ns16550: da8xx (freon/primus) is not omap-like

Quoted 2 lines · Tom Rini

This introduces a warning on all SOC_DA8XX systems because they do not set CONFIG_SYS_NS16550_MEM32 so serial_out is writeb

Well that's a mistake. Its uart uses 32-bit registers, and 8-bit access is not documented to be acceptable.

Apologies for forgetting to at least compile-test this for all affected targets, I really should have done that.

Quoted 1 line

Are you able to test SOC_DA8XX platforms?

No, this was based on my knowledge that freon/primus SoCs (OMAP-L1xx/AM1xxx/TMS320C674x/DA8xx) are architecturally members of the TI C6x family and not remotely related to the OMAP (despite the part code "OMAP-L1xx"), and I double-checked the technical reference
manual: their UART is identical to that on Keystone.

Matthijs

#3 lore raw

PATCH 1/4 serial: ns16550: da8xx (freon/primus) is not omap-like

Quoted 10 lines · Matthijs van Duin
Quoted 2 lines · Tom Rini

This introduces a warning on all SOC_DA8XX systems because they do not set CONFIG_SYS_NS16550_MEM32 so serial_out is writeb

Well that's a mistake. Its uart uses 32-bit registers, and 8-bit access is not documented to be acceptable.

Apologies for forgetting to at least compile-test this for all affected targets, I really should have done that.

Quoted 7 lines
Quoted 1 line

Are you able to test SOC_DA8XX platforms?

No, this was based on my knowledge that freon/primus SoCs (OMAP-L1xx/AM1xxx/TMS320C674x/DA8xx) are architecturally members of the TI C6x family and not remotely related to the OMAP (despite the part code "OMAP-L1xx"), and I double-checked the technical reference
manual: their UART is identical to that on Keystone.

OK. For v2, if you can convert CONFIG_SYS_NS16550_MEM32 to Kconfig as well I'd appreciate it. I'll see about digging out and setting up one of my da8xx platforms for a quick runtime test too. Thanks!

Signature · 8 lines
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20180119/0071f9a5/attachment.sig>
#4 lore raw

PATCH 1/4 serial: ns16550: da8xx (freon/primus) is not omap-like

Quoted 2 lines · Tom Rini

OK. For v2, if you can convert CONFIG_SYS_NS16550_MEM32 to Kconfig as well I'd appreciate it.

I'm not hugely comfortable doing that, since that would affect even more targets. To be honest, I don't understand why it even exists as a separate var instead of just testing whether CONFIG_SYS_NS16550_REG_SIZE is 4 or -4. Are there actually some crazy targets that allocate 4 bytes per register yet fail if you use 32-bit access?

Would you object hugely to me just implicitly setting CONFIG_SYS_NS16550_MEM32 in ns16550.h for the c6x uart variant? I think it makes a lot of sense to do so, since in that case the driver itself explicitly depends on being able to write a value that doesn't fit in a byte.

Quoted 2 lines

I'll see about digging out and setting up one of my da8xx platforms for a quick runtime test too.

Thanks!

Matthijs

#5 lore raw

PATCH 1/4 serial: ns16550: da8xx (freon/primus) is not omap-like

Quoted 10 lines · Matthijs van Duin
Quoted 2 lines · Tom Rini

OK. For v2, if you can convert CONFIG_SYS_NS16550_MEM32 to Kconfig as well I'd appreciate it.

I'm not hugely comfortable doing that, since that would affect even more targets. To be honest, I don't understand why it even exists as a separate var instead of just testing whether CONFIG_SYS_NS16550_REG_SIZE is 4 or -4. Are there actually some crazy targets that allocate 4 bytes per register yet fail if you use 32-bit access?

It's most likely a case that just wasn't cleaned up. If you want to correct things by dropping CONFIG_SYS_NS16550_MEM32 and checking CONFIG_SYS_NS16550_REG_SIZE instead, that's fine.

Quoted 5 lines

Would you object hugely to me just implicitly setting CONFIG_SYS_NS16550_MEM32 in ns16550.h for the c6x uart variant? I think it makes a lot of sense to do so, since in that case the driver itself explicitly depends on being able to write a value that doesn't fit in a byte.

Well, it's just SOC_DA8XX that isn't doing it today, and we need to migrate that CONFIG symbol or do away with it.

Signature · 8 lines
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20180119/b0fa3e1a/attachment.sig>
#6 lore raw

PATCH 1/4 serial: ns16550: da8xx (freon/primus) is not omap-like

Quoted 16 lines · Tom Rini
Quoted 10 lines · Matthijs van Duin
Quoted 2 lines · Tom Rini

OK. For v2, if you can convert CONFIG_SYS_NS16550_MEM32 to Kconfig as well I'd appreciate it.

I'm not hugely comfortable doing that, since that would affect even more targets. To be honest, I don't understand why it even exists as a separate var instead of just testing whether CONFIG_SYS_NS16550_REG_SIZE is 4 or -4. Are there actually some crazy targets that allocate 4 bytes per register yet fail if you use 32-bit access?

It's most likely a case that just wasn't cleaned up. If you want to correct things by dropping CONFIG_SYS_NS16550_MEM32 and checking CONFIG_SYS_NS16550_REG_SIZE instead, that's fine.

Quoted 8 lines
Quoted 5 lines

Would you object hugely to me just implicitly setting CONFIG_SYS_NS16550_MEM32 in ns16550.h for the c6x uart variant? I think it makes a lot of sense to do so, since in that case the driver itself explicitly depends on being able to write a value that doesn't fit in a byte.

Well, it's just SOC_DA8XX that isn't doing it today, and we need to migrate that CONFIG symbol or do away with it.

If you want to CC me on the next round of the patch, I can test it on a DA850-EVM.

adam

Quoted 9 lines

--
Tom

_______________________________________________
U-Boot mailing list
U-Boot at lists.denx.de
https://lists.denx.de/listinfo/u-boot