Commit d7875b4b authored by Vadim Fedorenko's avatar Vadim Fedorenko Committed by Paolo Abeni

ptp: ocp: convert serial ports to array

Simplify serial port management code by using array of ports and helpers
to get the name of the port. This change is needed to make the next
patch simplier.
Signed-off-by: default avatarVadim Fedorenko <vadfed@meta.com>
Reviewed-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
parent 2560db6e
...@@ -316,6 +316,15 @@ struct ptp_ocp_serial_port { ...@@ -316,6 +316,15 @@ struct ptp_ocp_serial_port {
#define OCP_SERIAL_LEN 6 #define OCP_SERIAL_LEN 6
#define OCP_SMA_NUM 4 #define OCP_SMA_NUM 4
enum {
PORT_GNSS,
PORT_GNSS2,
PORT_MAC, /* miniature atomic clock */
PORT_NMEA,
__PORT_COUNT,
};
struct ptp_ocp { struct ptp_ocp {
struct pci_dev *pdev; struct pci_dev *pdev;
struct device dev; struct device dev;
...@@ -357,10 +366,7 @@ struct ptp_ocp { ...@@ -357,10 +366,7 @@ struct ptp_ocp {
struct delayed_work sync_work; struct delayed_work sync_work;
int id; int id;
int n_irqs; int n_irqs;
struct ptp_ocp_serial_port gnss_port; struct ptp_ocp_serial_port port[__PORT_COUNT];
struct ptp_ocp_serial_port gnss2_port;
struct ptp_ocp_serial_port mac_port; /* miniature atomic clock */
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;
...@@ -655,28 +661,28 @@ static struct ocp_resource ocp_fb_resource[] = { ...@@ -655,28 +661,28 @@ static struct ocp_resource ocp_fb_resource[] = {
}, },
}, },
{ {
OCP_SERIAL_RESOURCE(gnss_port), OCP_SERIAL_RESOURCE(port[PORT_GNSS]),
.offset = 0x00160000 + 0x1000, .irq_vec = 3, .offset = 0x00160000 + 0x1000, .irq_vec = 3,
.extra = &(struct ptp_ocp_serial_port) { .extra = &(struct ptp_ocp_serial_port) {
.baud = 115200, .baud = 115200,
}, },
}, },
{ {
OCP_SERIAL_RESOURCE(gnss2_port), OCP_SERIAL_RESOURCE(port[PORT_GNSS2]),
.offset = 0x00170000 + 0x1000, .irq_vec = 4, .offset = 0x00170000 + 0x1000, .irq_vec = 4,
.extra = &(struct ptp_ocp_serial_port) { .extra = &(struct ptp_ocp_serial_port) {
.baud = 115200, .baud = 115200,
}, },
}, },
{ {
OCP_SERIAL_RESOURCE(mac_port), OCP_SERIAL_RESOURCE(port[PORT_MAC]),
.offset = 0x00180000 + 0x1000, .irq_vec = 5, .offset = 0x00180000 + 0x1000, .irq_vec = 5,
.extra = &(struct ptp_ocp_serial_port) { .extra = &(struct ptp_ocp_serial_port) {
.baud = 57600, .baud = 57600,
}, },
}, },
{ {
OCP_SERIAL_RESOURCE(nmea_port), OCP_SERIAL_RESOURCE(port[PORT_NMEA]),
.offset = 0x00190000 + 0x1000, .irq_vec = 10, .offset = 0x00190000 + 0x1000, .irq_vec = 10,
}, },
{ {
...@@ -740,7 +746,7 @@ static struct ocp_resource ocp_art_resource[] = { ...@@ -740,7 +746,7 @@ static struct ocp_resource ocp_art_resource[] = {
.offset = 0x01000000, .size = 0x10000, .offset = 0x01000000, .size = 0x10000,
}, },
{ {
OCP_SERIAL_RESOURCE(gnss_port), OCP_SERIAL_RESOURCE(port[PORT_GNSS]),
.offset = 0x00160000 + 0x1000, .irq_vec = 3, .offset = 0x00160000 + 0x1000, .irq_vec = 3,
.extra = &(struct ptp_ocp_serial_port) { .extra = &(struct ptp_ocp_serial_port) {
.baud = 115200, .baud = 115200,
...@@ -839,7 +845,7 @@ static struct ocp_resource ocp_art_resource[] = { ...@@ -839,7 +845,7 @@ static struct ocp_resource ocp_art_resource[] = {
}, },
}, },
{ {
OCP_SERIAL_RESOURCE(mac_port), OCP_SERIAL_RESOURCE(port[PORT_MAC]),
.offset = 0x00190000, .irq_vec = 7, .offset = 0x00190000, .irq_vec = 7,
.extra = &(struct ptp_ocp_serial_port) { .extra = &(struct ptp_ocp_serial_port) {
.baud = 9600, .baud = 9600,
...@@ -950,14 +956,14 @@ static struct ocp_resource ocp_adva_resource[] = { ...@@ -950,14 +956,14 @@ static struct ocp_resource ocp_adva_resource[] = {
.offset = 0x00220000, .size = 0x1000, .offset = 0x00220000, .size = 0x1000,
}, },
{ {
OCP_SERIAL_RESOURCE(gnss_port), OCP_SERIAL_RESOURCE(port[PORT_GNSS]),
.offset = 0x00160000 + 0x1000, .irq_vec = 3, .offset = 0x00160000 + 0x1000, .irq_vec = 3,
.extra = &(struct ptp_ocp_serial_port) { .extra = &(struct ptp_ocp_serial_port) {
.baud = 9600, .baud = 9600,
}, },
}, },
{ {
OCP_SERIAL_RESOURCE(mac_port), OCP_SERIAL_RESOURCE(port[PORT_MAC]),
.offset = 0x00180000 + 0x1000, .irq_vec = 5, .offset = 0x00180000 + 0x1000, .irq_vec = 5,
.extra = &(struct ptp_ocp_serial_port) { .extra = &(struct ptp_ocp_serial_port) {
.baud = 115200, .baud = 115200,
...@@ -1649,6 +1655,15 @@ ptp_ocp_tod_gnss_name(int idx) ...@@ -1649,6 +1655,15 @@ ptp_ocp_tod_gnss_name(int idx)
return gnss_name[idx]; return gnss_name[idx];
} }
static const char *
ptp_ocp_tty_port_name(int idx)
{
static const char * const tty_name[] = {
"GNSS", "GNSS2", "MAC", "NMEA"
};
return tty_name[idx];
}
struct ptp_ocp_nvmem_match_info { struct ptp_ocp_nvmem_match_info {
struct ptp_ocp *bp; struct ptp_ocp *bp;
const void * const tag; const void * const tag;
...@@ -3960,16 +3975,11 @@ ptp_ocp_summary_show(struct seq_file *s, void *data) ...@@ -3960,16 +3975,11 @@ 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.line != -1) for (i = 0; i < __PORT_COUNT; i++) {
seq_printf(s, "%7s: /dev/ttyS%d\n", "GNSS1", if (bp->port[i].line != -1)
bp->gnss_port.line); seq_printf(s, "%7s: /dev/ttyS%d\n", ptp_ocp_tty_port_name(i),
if (bp->gnss2_port.line != -1) bp->port[i].line);
seq_printf(s, "%7s: /dev/ttyS%d\n", "GNSS2", }
bp->gnss2_port.line);
if (bp->mac_port.line != -1)
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) {
...@@ -4279,7 +4289,7 @@ ptp_ocp_dev_release(struct device *dev) ...@@ -4279,7 +4289,7 @@ ptp_ocp_dev_release(struct device *dev)
static int static int
ptp_ocp_device_init(struct ptp_ocp *bp, struct pci_dev *pdev) ptp_ocp_device_init(struct ptp_ocp *bp, struct pci_dev *pdev)
{ {
int err; int i, err;
mutex_lock(&ptp_ocp_lock); mutex_lock(&ptp_ocp_lock);
err = idr_alloc(&ptp_ocp_idr, bp, 0, 0, GFP_KERNEL); err = idr_alloc(&ptp_ocp_idr, bp, 0, 0, GFP_KERNEL);
...@@ -4292,10 +4302,10 @@ ptp_ocp_device_init(struct ptp_ocp *bp, struct pci_dev *pdev) ...@@ -4292,10 +4302,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.line = -1;
bp->gnss2_port.line = -1; for (i = 0; i < __PORT_COUNT; i++)
bp->mac_port.line = -1; bp->port[i].line = -1;
bp->nmea_port.line = -1;
bp->pdev = pdev; bp->pdev = pdev;
device_initialize(&bp->dev); device_initialize(&bp->dev);
...@@ -4351,23 +4361,15 @@ ptp_ocp_complete(struct ptp_ocp *bp) ...@@ -4351,23 +4361,15 @@ ptp_ocp_complete(struct ptp_ocp *bp)
{ {
struct pps_device *pps; struct pps_device *pps;
char buf[32]; char buf[32];
int i;
if (bp->gnss_port.line != -1) { for (i = 0; i < __PORT_COUNT; i++) {
sprintf(buf, "ttyS%d", bp->gnss_port.line); if (bp->port[i].line != -1) {
ptp_ocp_link_child(bp, buf, "ttyGNSS"); sprintf(buf, "ttyS%d", bp->port[i].line);
} ptp_ocp_link_child(bp, buf, ptp_ocp_tty_port_name(i));
if (bp->gnss2_port.line != -1) {
sprintf(buf, "ttyS%d", bp->gnss2_port.line);
ptp_ocp_link_child(bp, buf, "ttyGNSS2");
}
if (bp->mac_port.line != -1) {
sprintf(buf, "ttyS%d", bp->mac_port.line);
ptp_ocp_link_child(bp, buf, "ttyMAC");
} }
if (bp->nmea_port.line != -1) {
sprintf(buf, "ttyS%d", bp->nmea_port.line);
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));
ptp_ocp_link_child(bp, buf, "ptp"); ptp_ocp_link_child(bp, buf, "ptp");
...@@ -4416,23 +4418,20 @@ ptp_ocp_info(struct ptp_ocp *bp) ...@@ -4416,23 +4418,20 @@ ptp_ocp_info(struct ptp_ocp *bp)
}; };
struct device *dev = &bp->pdev->dev; struct device *dev = &bp->pdev->dev;
u32 reg; u32 reg;
int i;
ptp_ocp_phc_info(bp); ptp_ocp_phc_info(bp);
ptp_ocp_serial_info(dev, "GNSS", bp->gnss_port.line, for (i = 0; i < __PORT_COUNT; i++) {
bp->gnss_port.baud); if (i == PORT_NMEA && bp->nmea_out && bp->port[PORT_NMEA].line != -1) {
ptp_ocp_serial_info(dev, "GNSS2", bp->gnss2_port.line, bp->port[PORT_NMEA].baud = -1;
bp->gnss2_port.baud);
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))
bp->nmea_port.baud = nmea_baud[reg]; bp->port[PORT_NMEA].baud = nmea_baud[reg];
}
ptp_ocp_serial_info(dev, "NMEA", bp->nmea_port.line, ptp_ocp_serial_info(dev, ptp_ocp_tty_port_name(i), bp->port[i].line,
bp->nmea_port.baud); bp->port[i].baud);
} }
} }
...@@ -4473,14 +4472,9 @@ ptp_ocp_detach(struct ptp_ocp *bp) ...@@ -4473,14 +4472,9 @@ 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.line != -1) for (i = 0; i < __PORT_COUNT; i++)
serial8250_unregister_port(bp->gnss_port.line); if (bp->port[i].line != -1)
if (bp->gnss2_port.line != -1) serial8250_unregister_port(bp->port[i].line);
serial8250_unregister_port(bp->gnss2_port.line);
if (bp->mac_port.line != -1)
serial8250_unregister_port(bp->mac_port.line);
if (bp->nmea_port.line != -1)
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