aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHeikki Krogerus <heikki.krogerus@linux.intel.com>2015-10-13 06:29:02 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2015-10-18 00:18:38 -0400
commitd9eda9bab237259b06690652b145d19e0ce37a77 (patch)
treeeba1ad02fba62858b4c91fe87d6bc271dffbc726
parent1d59b382f1c4111933ab56166eb520ac98676b22 (diff)
serial: 8250_pci: Intel MID UART support to its own driver
Intel MID UART quirks require already quite a bit of code in 8250_pci.c. On new Intel platforms where it is used, the integrated DMA engine no longer has its own PCI device, but is instead configured from the UART's MMIO. That means we will have to add even more code for handling just MID UARTs. Instead of adding that to 8250_pci.c, splitting the support of Intel MID UART into its own driver. Handling of the integrated DMA engine becomes much simpler this way. Own driver will also remove the need for things like specific set_termios hooks for every board using this UART, and simplify the handling of it in general. Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> Acked-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/tty/serial/8250/8250_mid.c258
-rw-r--r--drivers/tty/serial/8250/8250_pci.c228
-rw-r--r--drivers/tty/serial/8250/Kconfig8
-rw-r--r--drivers/tty/serial/8250/Makefile1
4 files changed, 273 insertions, 222 deletions
diff --git a/drivers/tty/serial/8250/8250_mid.c b/drivers/tty/serial/8250/8250_mid.c
new file mode 100644
index 000000000000..61f604c7aeee
--- /dev/null
+++ b/drivers/tty/serial/8250/8250_mid.c
@@ -0,0 +1,258 @@
1/*
2 * 8250_mid.c - Driver for UART on Intel Penwell and various other Intel SOCs
3 *
4 * Copyright (C) 2015 Intel Corporation
5 * Author: Heikki Krogerus <heikki.krogerus@linux.intel.com>
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 */
11
12#include <linux/rational.h>
13#include <linux/module.h>
14#include <linux/pci.h>
15
16#include <linux/dma/hsu.h>
17
18#include "8250.h"
19
20#define PCI_DEVICE_ID_INTEL_PNW_UART1 0x081b
21#define PCI_DEVICE_ID_INTEL_PNW_UART2 0x081c
22#define PCI_DEVICE_ID_INTEL_PNW_UART3 0x081d
23#define PCI_DEVICE_ID_INTEL_TNG_UART 0x1191
24
25/* Intel MID Specific registers */
26#define INTEL_MID_UART_PS 0x30
27#define INTEL_MID_UART_MUL 0x34
28#define INTEL_MID_UART_DIV 0x38
29
30struct mid8250;
31
32struct mid8250_board {
33 unsigned long freq;
34 unsigned int base_baud;
35 int (*setup)(struct mid8250 *, struct uart_port *p);
36};
37
38struct mid8250 {
39 int line;
40 int dma_index;
41 struct pci_dev *dma_dev;
42 struct uart_8250_dma dma;
43 struct mid8250_board *board;
44};
45
46/*****************************************************************************/
47
48static int pnw_setup(struct mid8250 *mid, struct uart_port *p)
49{
50 struct pci_dev *pdev = to_pci_dev(p->dev);
51
52 switch (pdev->device) {
53 case PCI_DEVICE_ID_INTEL_PNW_UART1:
54 mid->dma_index = 0;
55 break;
56 case PCI_DEVICE_ID_INTEL_PNW_UART2:
57 mid->dma_index = 1;
58 break;
59 case PCI_DEVICE_ID_INTEL_PNW_UART3:
60 mid->dma_index = 2;
61 break;
62 default:
63 return -EINVAL;
64 }
65
66 mid->dma_dev = pci_get_slot(pdev->bus,
67 PCI_DEVFN(PCI_SLOT(pdev->devfn), 3));
68 return 0;
69}
70
71static int tng_setup(struct mid8250 *mid, struct uart_port *p)
72{
73 struct pci_dev *pdev = to_pci_dev(p->dev);
74 int index = PCI_FUNC(pdev->devfn);
75
76 /* Currently no support for HSU port0 */
77 if (index-- == 0)
78 return -ENODEV;
79
80 mid->dma_index = index;
81 mid->dma_dev = pci_get_slot(pdev->bus, PCI_DEVFN(5, 0));
82 return 0;
83}
84
85/*****************************************************************************/
86
87static void mid8250_set_termios(struct uart_port *p,
88 struct ktermios *termios,
89 struct ktermios *old)
90{
91 unsigned int baud = tty_termios_baud_rate(termios);
92 struct mid8250 *mid = p->private_data;
93 unsigned short ps = 16;
94 unsigned long fuart = baud * ps;
95 unsigned long w = BIT(24) - 1;
96 unsigned long mul, div;
97
98 if (mid->board->freq < fuart) {
99 /* Find prescaler value that satisfies Fuart < Fref */
100 if (mid->board->freq > baud)
101 ps = mid->board->freq / baud; /* baud rate too high */
102 else
103 ps = 1; /* PLL case */
104 fuart = baud * ps;
105 } else {
106 /* Get Fuart closer to Fref */
107 fuart *= rounddown_pow_of_two(mid->board->freq / fuart);
108 }
109
110 rational_best_approximation(fuart, mid->board->freq, w, w, &mul, &div);
111 p->uartclk = fuart * 16 / ps; /* core uses ps = 16 always */
112
113 writel(ps, p->membase + INTEL_MID_UART_PS); /* set PS */
114 writel(mul, p->membase + INTEL_MID_UART_MUL); /* set MUL */
115 writel(div, p->membase + INTEL_MID_UART_DIV);
116
117 serial8250_do_set_termios(p, termios, old);
118}
119
120static bool mid8250_dma_filter(struct dma_chan *chan, void *param)
121{
122 struct hsu_dma_slave *s = param;
123
124 if (s->dma_dev != chan->device->dev || s->chan_id != chan->chan_id)
125 return false;
126
127 chan->private = s;
128 return true;
129}
130
131static int mid8250_dma_setup(struct mid8250 *mid, struct uart_8250_port *port)
132{
133 struct uart_8250_dma *dma = &mid->dma;
134 struct device *dev = port->port.dev;
135 struct hsu_dma_slave *rx_param;
136 struct hsu_dma_slave *tx_param;
137
138 rx_param = devm_kzalloc(dev, sizeof(*rx_param), GFP_KERNEL);
139 if (!rx_param)
140 return -ENOMEM;
141
142 tx_param = devm_kzalloc(dev, sizeof(*tx_param), GFP_KERNEL);
143 if (!tx_param)
144 return -ENOMEM;
145
146 rx_param->chan_id = mid->dma_index * 2 + 1;
147 tx_param->chan_id = mid->dma_index * 2;
148
149 dma->rxconf.src_maxburst = 64;
150 dma->txconf.dst_maxburst = 64;
151
152 rx_param->dma_dev = &mid->dma_dev->dev;
153 tx_param->dma_dev = &mid->dma_dev->dev;
154
155 dma->fn = mid8250_dma_filter;
156 dma->rx_param = rx_param;
157 dma->tx_param = tx_param;
158
159 port->dma = dma;
160 return 0;
161}
162
163static int mid8250_probe(struct pci_dev *pdev, const struct pci_device_id *id)
164{
165 struct uart_8250_port uart;
166 struct mid8250 *mid;
167 int ret;
168
169 ret = pcim_enable_device(pdev);
170 if (ret)
171 return ret;
172
173 pci_set_master(pdev);
174
175 mid = devm_kzalloc(&pdev->dev, sizeof(*mid), GFP_KERNEL);
176 if (!mid)
177 return -ENOMEM;
178
179 mid->board = (struct mid8250_board *)id->driver_data;
180
181 memset(&uart, 0, sizeof(struct uart_8250_port));
182
183 uart.port.dev = &pdev->dev;
184 uart.port.irq = pdev->irq;
185 uart.port.private_data = mid;
186 uart.port.type = PORT_16750;
187 uart.port.iotype = UPIO_MEM;
188 uart.port.uartclk = mid->board->base_baud * 16;
189 uart.port.flags = UPF_SHARE_IRQ | UPF_FIXED_PORT | UPF_FIXED_TYPE;
190 uart.port.set_termios = mid8250_set_termios;
191
192 uart.port.mapbase = pci_resource_start(pdev, 0);
193 uart.port.membase = pcim_iomap(pdev, 0, 0);
194 if (!uart.port.membase)
195 return -ENOMEM;
196
197 if (mid->board->setup) {
198 ret = mid->board->setup(mid, &uart.port);
199 if (ret)
200 return ret;
201 }
202
203 ret = mid8250_dma_setup(mid, &uart);
204 if (ret)
205 return ret;
206
207 ret = serial8250_register_8250_port(&uart);
208 if (ret < 0)
209 return ret;
210
211 mid->line = ret;
212
213 pci_set_drvdata(pdev, mid);
214 return 0;
215}
216
217static void mid8250_remove(struct pci_dev *pdev)
218{
219 struct mid8250 *mid = pci_get_drvdata(pdev);
220
221 serial8250_unregister_port(mid->line);
222}
223
224static const struct mid8250_board pnw_board = {
225 .freq = 50000000,
226 .base_baud = 115200,
227 .setup = pnw_setup,
228};
229
230static const struct mid8250_board tng_board = {
231 .freq = 38400000,
232 .base_baud = 1843200,
233 .setup = tng_setup,
234};
235
236#define MID_DEVICE(id, board) { PCI_VDEVICE(INTEL, id), (kernel_ulong_t)&board }
237
238static const struct pci_device_id pci_ids[] = {
239 MID_DEVICE(PCI_DEVICE_ID_INTEL_PNW_UART1, pnw_board),
240 MID_DEVICE(PCI_DEVICE_ID_INTEL_PNW_UART2, pnw_board),
241 MID_DEVICE(PCI_DEVICE_ID_INTEL_PNW_UART3, pnw_board),
242 MID_DEVICE(PCI_DEVICE_ID_INTEL_TNG_UART, tng_board),
243 { },
244};
245MODULE_DEVICE_TABLE(pci, pci_ids);
246
247static struct pci_driver mid8250_pci_driver = {
248 .name = "8250_mid",
249 .id_table = pci_ids,
250 .probe = mid8250_probe,
251 .remove = mid8250_remove,
252};
253
254module_pci_driver(mid8250_pci_driver);
255
256MODULE_AUTHOR("Intel Corporation");
257MODULE_LICENSE("GPL v2");
258MODULE_DESCRIPTION("Intel MID UART driver");
diff --git a/drivers/tty/serial/8250/8250_pci.c b/drivers/tty/serial/8250/8250_pci.c
index 68042dd1c525..177eaeafeb3e 100644
--- a/drivers/tty/serial/8250/8250_pci.c
+++ b/drivers/tty/serial/8250/8250_pci.c
@@ -28,7 +28,6 @@
28 28
29#include <linux/dmaengine.h> 29#include <linux/dmaengine.h>
30#include <linux/platform_data/dma-dw.h> 30#include <linux/platform_data/dma-dw.h>
31#include <linux/platform_data/dma-hsu.h>
32 31
33#include "8250.h" 32#include "8250.h"
34 33
@@ -1508,167 +1507,6 @@ byt_serial_setup(struct serial_private *priv,
1508 return ret; 1507 return ret;
1509} 1508}
1510 1509
1511#define INTEL_MID_UART_PS 0x30
1512#define INTEL_MID_UART_MUL 0x34
1513#define INTEL_MID_UART_DIV 0x38
1514
1515static void intel_mid_set_termios(struct uart_port *p,
1516 struct ktermios *termios,
1517 struct ktermios *old,
1518 unsigned long fref)
1519{
1520 unsigned int baud = tty_termios_baud_rate(termios);
1521 unsigned short ps = 16;
1522 unsigned long fuart = baud * ps;
1523 unsigned long w = BIT(24) - 1;
1524 unsigned long mul, div;
1525
1526 if (fref < fuart) {
1527 /* Find prescaler value that satisfies Fuart < Fref */
1528 if (fref > baud)
1529 ps = fref / baud; /* baud rate too high */
1530 else
1531 ps = 1; /* PLL case */
1532 fuart = baud * ps;
1533 } else {
1534 /* Get Fuart closer to Fref */
1535 fuart *= rounddown_pow_of_two(fref / fuart);
1536 }
1537
1538 rational_best_approximation(fuart, fref, w, w, &mul, &div);
1539 p->uartclk = fuart * 16 / ps; /* core uses ps = 16 always */
1540
1541 writel(ps, p->membase + INTEL_MID_UART_PS); /* set PS */
1542 writel(mul, p->membase + INTEL_MID_UART_MUL); /* set MUL */
1543 writel(div, p->membase + INTEL_MID_UART_DIV);
1544
1545 serial8250_do_set_termios(p, termios, old);
1546}
1547
1548static void intel_mid_set_termios_38_4M(struct uart_port *p,
1549 struct ktermios *termios,
1550 struct ktermios *old)
1551{
1552 intel_mid_set_termios(p, termios, old, 38400000);
1553}
1554
1555static void intel_mid_set_termios_50M(struct uart_port *p,
1556 struct ktermios *termios,
1557 struct ktermios *old)
1558{
1559 /*
1560 * The uart clk is 50Mhz, and the baud rate come from:
1561 * baud = 50M * MUL / (DIV * PS * DLAB)
1562 */
1563 intel_mid_set_termios(p, termios, old, 50000000);
1564}
1565
1566static bool intel_mid_dma_filter(struct dma_chan *chan, void *param)
1567{
1568 struct hsu_dma_slave *s = param;
1569
1570 if (s->dma_dev != chan->device->dev || s->chan_id != chan->chan_id)
1571 return false;
1572
1573 chan->private = s;
1574 return true;
1575}
1576
1577static int intel_mid_serial_setup(struct serial_private *priv,
1578 const struct pciserial_board *board,
1579 struct uart_8250_port *port, int idx,
1580 int index, struct pci_dev *dma_dev)
1581{
1582 struct device *dev = port->port.dev;
1583 struct uart_8250_dma *dma;
1584 struct hsu_dma_slave *tx_param, *rx_param;
1585
1586 dma = devm_kzalloc(dev, sizeof(*dma), GFP_KERNEL);
1587 if (!dma)
1588 return -ENOMEM;
1589
1590 tx_param = devm_kzalloc(dev, sizeof(*tx_param), GFP_KERNEL);
1591 if (!tx_param)
1592 return -ENOMEM;
1593
1594 rx_param = devm_kzalloc(dev, sizeof(*rx_param), GFP_KERNEL);
1595 if (!rx_param)
1596 return -ENOMEM;
1597
1598 rx_param->chan_id = index * 2 + 1;
1599 tx_param->chan_id = index * 2;
1600
1601 dma->rxconf.src_maxburst = 64;
1602 dma->txconf.dst_maxburst = 64;
1603
1604 rx_param->dma_dev = &dma_dev->dev;
1605 tx_param->dma_dev = &dma_dev->dev;
1606
1607 dma->fn = intel_mid_dma_filter;
1608 dma->rx_param = rx_param;
1609 dma->tx_param = tx_param;
1610
1611 port->port.type = PORT_16750;
1612 port->port.flags |= UPF_FIXED_PORT | UPF_FIXED_TYPE;
1613 port->dma = dma;
1614
1615 return pci_default_setup(priv, board, port, idx);
1616}
1617
1618#define PCI_DEVICE_ID_INTEL_PNW_UART1 0x081b
1619#define PCI_DEVICE_ID_INTEL_PNW_UART2 0x081c
1620#define PCI_DEVICE_ID_INTEL_PNW_UART3 0x081d
1621
1622static int pnw_serial_setup(struct serial_private *priv,
1623 const struct pciserial_board *board,
1624 struct uart_8250_port *port, int idx)
1625{
1626 struct pci_dev *pdev = priv->dev;
1627 struct pci_dev *dma_dev;
1628 int index;
1629
1630 switch (pdev->device) {
1631 case PCI_DEVICE_ID_INTEL_PNW_UART1:
1632 index = 0;
1633 break;
1634 case PCI_DEVICE_ID_INTEL_PNW_UART2:
1635 index = 1;
1636 break;
1637 case PCI_DEVICE_ID_INTEL_PNW_UART3:
1638 index = 2;
1639 break;
1640 default:
1641 return -EINVAL;
1642 }
1643
1644 dma_dev = pci_get_slot(pdev->bus, PCI_DEVFN(PCI_SLOT(pdev->devfn), 3));
1645
1646 port->port.set_termios = intel_mid_set_termios_50M;
1647
1648 return intel_mid_serial_setup(priv, board, port, idx, index, dma_dev);
1649}
1650
1651#define PCI_DEVICE_ID_INTEL_TNG_UART 0x1191
1652
1653static int tng_serial_setup(struct serial_private *priv,
1654 const struct pciserial_board *board,
1655 struct uart_8250_port *port, int idx)
1656{
1657 struct pci_dev *pdev = priv->dev;
1658 struct pci_dev *dma_dev;
1659 int index = PCI_FUNC(pdev->devfn);
1660
1661 /* Currently no support for HSU port0 */
1662 if (index-- == 0)
1663 return -ENODEV;
1664
1665 dma_dev = pci_get_slot(pdev->bus, PCI_DEVFN(5, 0));
1666
1667 port->port.set_termios = intel_mid_set_termios_38_4M;
1668
1669 return intel_mid_serial_setup(priv, board, port, idx, index, dma_dev);
1670}
1671
1672static int 1510static int
1673pci_omegapci_setup(struct serial_private *priv, 1511pci_omegapci_setup(struct serial_private *priv,
1674 const struct pciserial_board *board, 1512 const struct pciserial_board *board,
@@ -2212,34 +2050,6 @@ static struct pci_serial_quirk pci_serial_quirks[] __refdata = {
2212 }, 2050 },
2213 { 2051 {
2214 .vendor = PCI_VENDOR_ID_INTEL, 2052 .vendor = PCI_VENDOR_ID_INTEL,
2215 .device = PCI_DEVICE_ID_INTEL_PNW_UART1,
2216 .subvendor = PCI_ANY_ID,
2217 .subdevice = PCI_ANY_ID,
2218 .setup = pnw_serial_setup,
2219 },
2220 {
2221 .vendor = PCI_VENDOR_ID_INTEL,
2222 .device = PCI_DEVICE_ID_INTEL_PNW_UART2,
2223 .subvendor = PCI_ANY_ID,
2224 .subdevice = PCI_ANY_ID,
2225 .setup = pnw_serial_setup,
2226 },
2227 {
2228 .vendor = PCI_VENDOR_ID_INTEL,
2229 .device = PCI_DEVICE_ID_INTEL_PNW_UART3,
2230 .subvendor = PCI_ANY_ID,
2231 .subdevice = PCI_ANY_ID,
2232 .setup = pnw_serial_setup,
2233 },
2234 {
2235 .vendor = PCI_VENDOR_ID_INTEL,
2236 .device = PCI_DEVICE_ID_INTEL_TNG_UART,
2237 .subvendor = PCI_ANY_ID,
2238 .subdevice = PCI_ANY_ID,
2239 .setup = tng_serial_setup,
2240 },
2241 {
2242 .vendor = PCI_VENDOR_ID_INTEL,
2243 .device = PCI_DEVICE_ID_INTEL_BSW_UART1, 2053 .device = PCI_DEVICE_ID_INTEL_BSW_UART1,
2244 .subvendor = PCI_ANY_ID, 2054 .subvendor = PCI_ANY_ID,
2245 .subdevice = PCI_ANY_ID, 2055 .subdevice = PCI_ANY_ID,
@@ -3119,8 +2929,6 @@ enum pci_board_num_t {
3119 pbn_ADDIDATA_PCIe_8_3906250, 2929 pbn_ADDIDATA_PCIe_8_3906250,
3120 pbn_ce4100_1_115200, 2930 pbn_ce4100_1_115200,
3121 pbn_byt, 2931 pbn_byt,
3122 pbn_pnw,
3123 pbn_tng,
3124 pbn_qrk, 2932 pbn_qrk,
3125 pbn_omegapci, 2933 pbn_omegapci,
3126 pbn_NETMOS9900_2s_115200, 2934 pbn_NETMOS9900_2s_115200,
@@ -3907,16 +3715,6 @@ static struct pciserial_board pci_boards[] = {
3907 .uart_offset = 0x80, 3715 .uart_offset = 0x80,
3908 .reg_shift = 2, 3716 .reg_shift = 2,
3909 }, 3717 },
3910 [pbn_pnw] = {
3911 .flags = FL_BASE0,
3912 .num_ports = 1,
3913 .base_baud = 115200,
3914 },
3915 [pbn_tng] = {
3916 .flags = FL_BASE0,
3917 .num_ports = 1,
3918 .base_baud = 1843200,
3919 },
3920 [pbn_qrk] = { 3718 [pbn_qrk] = {
3921 .flags = FL_BASE0, 3719 .flags = FL_BASE0,
3922 .num_ports = 1, 3720 .num_ports = 1,
@@ -4005,6 +3803,12 @@ static const struct pci_device_id blacklist[] = {
4005 { PCI_DEVICE(0x4348, 0x5053), }, /* WCH CH353 1S1P */ 3803 { PCI_DEVICE(0x4348, 0x5053), }, /* WCH CH353 1S1P */
4006 { PCI_DEVICE(0x1c00, 0x3250), }, /* WCH CH382 2S1P */ 3804 { PCI_DEVICE(0x1c00, 0x3250), }, /* WCH CH382 2S1P */
4007 { PCI_DEVICE(0x1c00, 0x3470), }, /* WCH CH384 4S */ 3805 { PCI_DEVICE(0x1c00, 0x3470), }, /* WCH CH384 4S */
3806
3807 /* Intel platforms with MID UART */
3808 { PCI_VDEVICE(INTEL, 0x081b), },
3809 { PCI_VDEVICE(INTEL, 0x081c), },
3810 { PCI_VDEVICE(INTEL, 0x081d), },
3811 { PCI_VDEVICE(INTEL, 0x1191), },
4008}; 3812};
4009 3813
4010/* 3814/*
@@ -5702,26 +5506,6 @@ static struct pci_device_id serial_pci_tbl[] = {
5702 pbn_byt }, 5506 pbn_byt },
5703 5507
5704 /* 5508 /*
5705 * Intel Penwell
5706 */
5707 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PNW_UART1,
5708 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
5709 pbn_pnw},
5710 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PNW_UART2,
5711 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
5712 pbn_pnw},
5713 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PNW_UART3,
5714 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
5715 pbn_pnw},
5716
5717 /*
5718 * Intel Tangier
5719 */
5720 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_TNG_UART,
5721 PCI_ANY_ID, PCI_ANY_ID, 0, 0,
5722 pbn_tng},
5723
5724 /*
5725 * Intel Quark x1000 5509 * Intel Quark x1000
5726 */ 5510 */
5727 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_QRK_UART, 5511 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_QRK_UART,
diff --git a/drivers/tty/serial/8250/Kconfig b/drivers/tty/serial/8250/Kconfig
index 43925571e177..f4a689743aa2 100644
--- a/drivers/tty/serial/8250/Kconfig
+++ b/drivers/tty/serial/8250/Kconfig
@@ -367,3 +367,11 @@ config SERIAL_8250_INGENIC
367 help 367 help
368 If you have a system using an Ingenic SoC and wish to make use of 368 If you have a system using an Ingenic SoC and wish to make use of
369 its UARTs, say Y to this option. If unsure, say N. 369 its UARTs, say Y to this option. If unsure, say N.
370
371config SERIAL_8250_MID
372 tristate "Support for serial ports on Intel MID platforms"
373 depends on SERIAL_8250 && PCI
374 help
375 Selecting this option will enable handling of the extra features
376 present on the UART found on Intel Medfield SOC and various other
377 Intel platforms.
diff --git a/drivers/tty/serial/8250/Makefile b/drivers/tty/serial/8250/Makefile
index 39c6d2277570..e177f8681ada 100644
--- a/drivers/tty/serial/8250/Makefile
+++ b/drivers/tty/serial/8250/Makefile
@@ -27,5 +27,6 @@ obj-$(CONFIG_SERIAL_8250_LPC18XX) += 8250_lpc18xx.o
27obj-$(CONFIG_SERIAL_8250_MT6577) += 8250_mtk.o 27obj-$(CONFIG_SERIAL_8250_MT6577) += 8250_mtk.o
28obj-$(CONFIG_SERIAL_8250_UNIPHIER) += 8250_uniphier.o 28obj-$(CONFIG_SERIAL_8250_UNIPHIER) += 8250_uniphier.o
29obj-$(CONFIG_SERIAL_8250_INGENIC) += 8250_ingenic.o 29obj-$(CONFIG_SERIAL_8250_INGENIC) += 8250_ingenic.o
30obj-$(CONFIG_SERIAL_8250_MID) += 8250_mid.o
30 31
31CFLAGS_8250_ingenic.o += -I$(srctree)/scripts/dtc/libfdt 32CFLAGS_8250_ingenic.o += -I$(srctree)/scripts/dtc/libfdt