Commit 895ac5a5 authored by Vadim Fedorenko's avatar Vadim Fedorenko Committed by David S. Miller

ptp: ocp: upgrade serial line information

Introduce structure to hold serial port line number and the baud rate
it supports.
Acked-by: default avatarJonathan Lemon <jonathan.lemon@gmail.com>
Signed-off-by: default avatarJonathan Lemon <jonathan.lemon@gmail.com>
Signed-off-by: default avatarVadim Fedorenko <vadfed@fb.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 4727bab4
...@@ -278,6 +278,11 @@ struct ptp_ocp_signal { ...@@ -278,6 +278,11 @@ struct ptp_ocp_signal {
bool running; bool running;
}; };
struct ptp_ocp_serial_port {
int line;
int baud;
};
#define OCP_BOARD_ID_LEN 13 #define OCP_BOARD_ID_LEN 13
#define OCP_SERIAL_LEN 6 #define OCP_SERIAL_LEN 6
...@@ -318,10 +323,10 @@ struct ptp_ocp { ...@@ -318,10 +323,10 @@ struct ptp_ocp {
time64_t gnss_lost; time64_t gnss_lost;
int id; int id;
int n_irqs; int n_irqs;
int gnss_port; struct ptp_ocp_serial_port gnss_port;
int gnss2_port; struct ptp_ocp_serial_port gnss2_port;
int mac_port; /* miniature atomic clock */ struct ptp_ocp_serial_port mac_port; /* miniature atomic clock */
int nmea_port; struct ptp_ocp_serial_port nmea_port;
bool fw_loader; bool fw_loader;
u8 fw_tag; u8 fw_tag;
u16 fw_version; u16 fw_version;
...@@ -596,14 +601,23 @@ static struct ocp_resource ocp_fb_resource[] = { ...@@ -596,14 +601,23 @@ static struct ocp_resource ocp_fb_resource[] = {
{ {
OCP_SERIAL_RESOURCE(gnss_port), OCP_SERIAL_RESOURCE(gnss_port),
.offset = 0x00160000 + 0x1000, .irq_vec = 3, .offset = 0x00160000 + 0x1000, .irq_vec = 3,
.extra = &(struct ptp_ocp_serial_port) {
.baud = 115200,
},
}, },
{ {
OCP_SERIAL_RESOURCE(gnss2_port), OCP_SERIAL_RESOURCE(gnss2_port),
.offset = 0x00170000 + 0x1000, .irq_vec = 4, .offset = 0x00170000 + 0x1000, .irq_vec = 4,
.extra = &(struct ptp_ocp_serial_port) {
.baud = 115200,
},
}, },
{ {
OCP_SERIAL_RESOURCE(mac_port), OCP_SERIAL_RESOURCE(mac_port),
.offset = 0x00180000 + 0x1000, .irq_vec = 5, .offset = 0x00180000 + 0x1000, .irq_vec = 5,
.extra = &(struct ptp_ocp_serial_port) {
.baud = 57600,
},
}, },
{ {
OCP_SERIAL_RESOURCE(nmea_port), OCP_SERIAL_RESOURCE(nmea_port),
...@@ -1872,11 +1886,15 @@ ptp_ocp_serial_line(struct ptp_ocp *bp, struct ocp_resource *r) ...@@ -1872,11 +1886,15 @@ ptp_ocp_serial_line(struct ptp_ocp *bp, struct ocp_resource *r)
static int static int
ptp_ocp_register_serial(struct ptp_ocp *bp, struct ocp_resource *r) ptp_ocp_register_serial(struct ptp_ocp *bp, struct ocp_resource *r)
{ {
int port; struct ptp_ocp_serial_port *p = (struct ptp_ocp_serial_port *)r->extra;
struct ptp_ocp_serial_port port = {};
port.line = ptp_ocp_serial_line(bp, r);
if (port.line < 0)
return port.line;
port = ptp_ocp_serial_line(bp, r); if (p)
if (port < 0) port.baud = p->baud;
return port;
bp_assign_entry(bp, r, port); bp_assign_entry(bp, r, port);
...@@ -3177,14 +3195,16 @@ ptp_ocp_summary_show(struct seq_file *s, void *data) ...@@ -3177,14 +3195,16 @@ ptp_ocp_summary_show(struct seq_file *s, void *data)
bp = dev_get_drvdata(dev); bp = dev_get_drvdata(dev);
seq_printf(s, "%7s: /dev/ptp%d\n", "PTP", ptp_clock_index(bp->ptp)); seq_printf(s, "%7s: /dev/ptp%d\n", "PTP", ptp_clock_index(bp->ptp));
if (bp->gnss_port != -1) if (bp->gnss_port.line != -1)
seq_printf(s, "%7s: /dev/ttyS%d\n", "GNSS1", bp->gnss_port); seq_printf(s, "%7s: /dev/ttyS%d\n", "GNSS1",
if (bp->gnss2_port != -1) bp->gnss_port.line);
seq_printf(s, "%7s: /dev/ttyS%d\n", "GNSS2", bp->gnss2_port); if (bp->gnss2_port.line != -1)
if (bp->mac_port != -1) seq_printf(s, "%7s: /dev/ttyS%d\n", "GNSS2",
seq_printf(s, "%7s: /dev/ttyS%d\n", "MAC", bp->mac_port); bp->gnss2_port.line);
if (bp->nmea_port != -1) if (bp->mac_port.line != -1)
seq_printf(s, "%7s: /dev/ttyS%d\n", "NMEA", bp->nmea_port); seq_printf(s, "%7s: /dev/ttyS%d\n", "MAC", bp->mac_port.line);
if (bp->nmea_port.line != -1)
seq_printf(s, "%7s: /dev/ttyS%d\n", "NMEA", bp->nmea_port.line);
memset(sma_val, 0xff, sizeof(sma_val)); memset(sma_val, 0xff, sizeof(sma_val));
if (bp->sma_map1) { if (bp->sma_map1) {
...@@ -3508,10 +3528,10 @@ ptp_ocp_device_init(struct ptp_ocp *bp, struct pci_dev *pdev) ...@@ -3508,10 +3528,10 @@ ptp_ocp_device_init(struct ptp_ocp *bp, struct pci_dev *pdev)
bp->ptp_info = ptp_ocp_clock_info; bp->ptp_info = ptp_ocp_clock_info;
spin_lock_init(&bp->lock); spin_lock_init(&bp->lock);
bp->gnss_port = -1; bp->gnss_port.line = -1;
bp->gnss2_port = -1; bp->gnss2_port.line = -1;
bp->mac_port = -1; bp->mac_port.line = -1;
bp->nmea_port = -1; bp->nmea_port.line = -1;
bp->pdev = pdev; bp->pdev = pdev;
device_initialize(&bp->dev); device_initialize(&bp->dev);
...@@ -3569,20 +3589,20 @@ ptp_ocp_complete(struct ptp_ocp *bp) ...@@ -3569,20 +3589,20 @@ ptp_ocp_complete(struct ptp_ocp *bp)
struct pps_device *pps; struct pps_device *pps;
char buf[32]; char buf[32];
if (bp->gnss_port != -1) { if (bp->gnss_port.line != -1) {
sprintf(buf, "ttyS%d", bp->gnss_port); sprintf(buf, "ttyS%d", bp->gnss_port.line);
ptp_ocp_link_child(bp, buf, "ttyGNSS"); ptp_ocp_link_child(bp, buf, "ttyGNSS");
} }
if (bp->gnss2_port != -1) { if (bp->gnss2_port.line != -1) {
sprintf(buf, "ttyS%d", bp->gnss2_port); sprintf(buf, "ttyS%d", bp->gnss2_port.line);
ptp_ocp_link_child(bp, buf, "ttyGNSS2"); ptp_ocp_link_child(bp, buf, "ttyGNSS2");
} }
if (bp->mac_port != -1) { if (bp->mac_port.line != -1) {
sprintf(buf, "ttyS%d", bp->mac_port); sprintf(buf, "ttyS%d", bp->mac_port.line);
ptp_ocp_link_child(bp, buf, "ttyMAC"); ptp_ocp_link_child(bp, buf, "ttyMAC");
} }
if (bp->nmea_port != -1) { if (bp->nmea_port.line != -1) {
sprintf(buf, "ttyS%d", bp->nmea_port); sprintf(buf, "ttyS%d", bp->nmea_port.line);
ptp_ocp_link_child(bp, buf, "ttyNMEA"); ptp_ocp_link_child(bp, buf, "ttyNMEA");
} }
sprintf(buf, "ptp%d", ptp_clock_index(bp->ptp)); sprintf(buf, "ptp%d", ptp_clock_index(bp->ptp));
...@@ -3638,16 +3658,20 @@ ptp_ocp_info(struct ptp_ocp *bp) ...@@ -3638,16 +3658,20 @@ ptp_ocp_info(struct ptp_ocp *bp)
ptp_ocp_phc_info(bp); ptp_ocp_phc_info(bp);
ptp_ocp_serial_info(dev, "GNSS", bp->gnss_port, 115200); ptp_ocp_serial_info(dev, "GNSS", bp->gnss_port.line,
ptp_ocp_serial_info(dev, "GNSS2", bp->gnss2_port, 115200); bp->gnss_port.baud);
ptp_ocp_serial_info(dev, "MAC", bp->mac_port, 57600); ptp_ocp_serial_info(dev, "GNSS2", bp->gnss2_port.line,
if (bp->nmea_out && bp->nmea_port != -1) { bp->gnss2_port.baud);
int baud = -1; ptp_ocp_serial_info(dev, "MAC", bp->mac_port.line, bp->mac_port.baud);
if (bp->nmea_out && bp->nmea_port.line != -1) {
bp->nmea_port.baud = -1;
reg = ioread32(&bp->nmea_out->uart_baud); reg = ioread32(&bp->nmea_out->uart_baud);
if (reg < ARRAY_SIZE(nmea_baud)) if (reg < ARRAY_SIZE(nmea_baud))
baud = nmea_baud[reg]; bp->nmea_port.baud = nmea_baud[reg];
ptp_ocp_serial_info(dev, "NMEA", bp->nmea_port, baud);
ptp_ocp_serial_info(dev, "NMEA", bp->nmea_port.line,
bp->nmea_port.baud);
} }
} }
...@@ -3688,14 +3712,14 @@ ptp_ocp_detach(struct ptp_ocp *bp) ...@@ -3688,14 +3712,14 @@ ptp_ocp_detach(struct ptp_ocp *bp)
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
if (bp->signal_out[i]) if (bp->signal_out[i])
ptp_ocp_unregister_ext(bp->signal_out[i]); ptp_ocp_unregister_ext(bp->signal_out[i]);
if (bp->gnss_port != -1) if (bp->gnss_port.line != -1)
serial8250_unregister_port(bp->gnss_port); serial8250_unregister_port(bp->gnss_port.line);
if (bp->gnss2_port != -1) if (bp->gnss2_port.line != -1)
serial8250_unregister_port(bp->gnss2_port); serial8250_unregister_port(bp->gnss2_port.line);
if (bp->mac_port != -1) if (bp->mac_port.line != -1)
serial8250_unregister_port(bp->mac_port); serial8250_unregister_port(bp->mac_port.line);
if (bp->nmea_port != -1) if (bp->nmea_port.line != -1)
serial8250_unregister_port(bp->nmea_port); serial8250_unregister_port(bp->nmea_port.line);
platform_device_unregister(bp->spi_flash); platform_device_unregister(bp->spi_flash);
platform_device_unregister(bp->i2c_ctrl); platform_device_unregister(bp->i2c_ctrl);
if (bp->i2c_clk) if (bp->i2c_clk)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment