Fix IO address calculation with Multi-Fintek PCI-to-UART Product
PATCH 1/1 Fix IO address calculation with Multi-Fintek PCI-to-UART Product
--- drivers/tty/serial/8250/8250_pci.c | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-)
drivers/tty/serial/8250/8250_pci.c +24 -13
@@ -1551,28 +1551,31 @@ static int pci_fintek_setup(struct serial_private *priv, {struct pci_dev *pdev = priv->dev;unsigned long base; -unsigned long iobase; +unsigned long iobase =0 ;unsigned long ciobase =0 ;u8 config_base; +u32 bar_data[3 ]; +/* * We are supposed to be able to read these from the PCI config space, * but the values there don't seem to match what we need to use, so * just use these hard-coded values for now, as they are correct. */ +switch (idx) { -case 0 : iobase =0xe000 ; config_base =0x40 ;break ; -case 1 : iobase =0xe008 ; config_base =0x48 ;break ; -case 2 : iobase =0xe010 ; config_base =0x50 ;break ; -case 3 : iobase =0xe018 ; config_base =0x58 ;break ; -case 4 : iobase =0xe020 ; config_base =0x60 ;break ; -case 5 : iobase =0xe028 ; config_base =0x68 ;break ; -case 6 : iobase =0xe030 ; config_base =0x70 ;break ; -case 7 : iobase =0xe038 ; config_base =0x78 ;break ; -case 8 : iobase =0xe040 ; config_base =0x80 ;break ; -case 9 : iobase =0xe048 ; config_base =0x88 ;break ; -case 10 : iobase =0xe050 ; config_base =0x90 ;break ; -case 11 : iobase =0xe058 ; config_base =0x98 ;break ; +case 0 : config_base =0x40 ;break ; +case 1 : config_base =0x48 ;break ; +case 2 : config_base =0x50 ;break ; +case 3 : config_base =0x58 ;break ; +case 4 : config_base =0x60 ;break ; +case 5 : config_base =0x68 ;break ; +case 6 : config_base =0x70 ;break ; +case 7 : config_base =0x78 ;break ; +case 8 : config_base =0x80 ;break ; +case 9 : config_base =0x88 ;break ; +case 10 : config_base =0x90 ;break ; +case 11 : config_base =0x98 ;break ;default :/* Unknown number of ports, get out of here */ return -EINVAL ;
@@ -1583,9 +1586,17 @@ static int pci_fintek_setup(struct serial_private *priv, ciobase = (int )(base + (0x8 * idx)); } +pci_read_config_dword (pdev,0x24 , &bar_data[0 ]); +pci_read_config_dword (pdev,0x20 , &bar_data[1 ]); +pci_read_config_dword (pdev,0x1c , &bar_data[2 ]); + +/* Calculate Real IO Port */ + iobase = (bar_data[idx/4 ] &0xffffffE0 ) + (idx %4 ) *8 ; +dev_dbg (&pdev->dev,"%s: idx=%d iobase=0x%lx ciobase=0x%lx config_base=0x%2x\n" , __func__, idx, iobase, ciobase, config_base); +/* Enable UART I/O port */ pci_write_config_byte (pdev, config_base +0x00 ,0x01 );
Signature · 1 line
1.9.1
Greg KH
maintainerQuoted 1 line · Peter Hung
Signed-off-by Peter Hung <[email protected]>
We need some kind of information in the body of the changelog here.
Quoted 9 lines
--- drivers/tty/serial/8250/8250_pci.c | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-)drivers/tty/serial/8250/8250_pci.c +0
-0
drivers/tty/serial/8250/8250_pci.c static int pci_fintek_setup(struct serial_private *priv, · line 1559
Quoted 10 lines
drivers/tty/serial/8250/8250_pci.c +3
-1@@ -1551,28 +1551,31 @@ static int pci_fintek_setup(struct serial_private *priv, {struct pci_dev *pdev = priv->dev;unsigned long base; -unsigned long iobase; +unsigned long iobase =0 ;unsigned long ciobase =0 ;u8 config_base; +u32 bar_data[3 ]; +
_ALWAYS_ run your patches through checkpatch.pl and fix up the issues it reports so that a grumpy maintainer doesn't reject your patch for obvious issues :(
Quoted 39 lines
drivers/tty/serial/8250/8250_pci.c +14
-12/* * We are supposed to be able to read these from the PCI config space, * but the values there don't seem to match what we need to use, so * just use these hard-coded values for now, as they are correct. */ +switch (idx) { -case 0 : iobase =0xe000 ; config_base =0x40 ;break ; -case 1 : iobase =0xe008 ; config_base =0x48 ;break ; -case 2 : iobase =0xe010 ; config_base =0x50 ;break ; -case 3 : iobase =0xe018 ; config_base =0x58 ;break ; -case 4 : iobase =0xe020 ; config_base =0x60 ;break ; -case 5 : iobase =0xe028 ; config_base =0x68 ;break ; -case 6 : iobase =0xe030 ; config_base =0x70 ;break ; -case 7 : iobase =0xe038 ; config_base =0x78 ;break ; -case 8 : iobase =0xe040 ; config_base =0x80 ;break ; -case 9 : iobase =0xe048 ; config_base =0x88 ;break ; -case 10 : iobase =0xe050 ; config_base =0x90 ;break ; -case 11 : iobase =0xe058 ; config_base =0x98 ;break ; +case 0 : config_base =0x40 ;break ; +case 1 : config_base =0x48 ;break ; +case 2 : config_base =0x50 ;break ; +case 3 : config_base =0x58 ;break ; +case 4 : config_base =0x60 ;break ; +case 5 : config_base =0x68 ;break ; +case 6 : config_base =0x70 ;break ; +case 7 : config_base =0x78 ;break ; +case 8 : config_base =0x80 ;break ; +case 9 : config_base =0x88 ;break ; +case 10 : config_base =0x90 ;break ; +case 11 : config_base =0x98 ;break ;default :/* Unknown number of ports, get out of here */ return -EINVAL ;@@ -1583,9 +1586,17 @@ static int pci_fintek_setup(struct serial_private *priv, ciobase = (int )(base + (0x8 * idx)); } +pci_read_config_dword (pdev,0x24 , &bar_data[0 ]);
drivers/tty/serial/8250/8250_pci.c static int pci_fintek_setup(struct serial_private *priv, · line 1599
Quoted 10 lines
drivers/tty/serial/8250/8250_pci.c +7
-0+pci_read_config_dword (pdev,0x20 , &bar_data[1 ]); +pci_read_config_dword (pdev,0x1c , &bar_data[2 ]); + +/* Calculate Real IO Port */ + iobase = (bar_data[idx/4 ] &0xffffffE0 ) + (idx %4 ) *8 ; +dev_dbg (&pdev->dev,"%s: idx=%d iobase=0x%lx ciobase=0x%lx config_base=0x%2x\n" , __func__, idx, iobase, ciobase, config_base); +
New line added for no reason?
thanks,
greg k-h
Dear Greg KH and Senior Linuxers,
I had some some question, If I submited a patch, but it had rejected, how should I do when fix the patch?
1. send patch by reply original email ?
2. direct send patch with new email again?
3. other ways ?
Live long and prosper
Thanks
Greg KH 於 2014/11/19 上午 12:58 寫道:
Quoted 79 lines · Peter Hung
Quoted 1 line
Signed-off-by Peter Hung <[email protected]>We need some kind of information in the body of the changelog here.
Quoted 9 lines
--- drivers/tty/serial/8250/8250_pci.c | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-)drivers/tty/serial/8250/8250_pci.c +0
-0drivers/tty/serial/8250/8250_pci.c static int pci_fintek_setup(struct serial_private *priv, · line 1559
Quoted 10 lines
drivers/tty/serial/8250/8250_pci.c +3
-1@@ -1551,28 +1551,31 @@ static int pci_fintek_setup(struct serial_private *priv, {struct pci_dev *pdev = priv->dev;unsigned long base; -unsigned long iobase; +unsigned long iobase =0 ;unsigned long ciobase =0 ;u8 config_base; +u32 bar_data[3 ]; +_ALWAYS_ run your patches through checkpatch.pl and fix up the issues it reports so that a grumpy maintainer doesn't reject your patch for obvious issues :(
Quoted 48 lines
drivers/tty/serial/8250/8250_pci.c +20
-12/* * We are supposed to be able to read these from the PCI config space, * but the values there don't seem to match what we need to use, so * just use these hard-coded values for now, as they are correct. */ +switch (idx) { -case 0 : iobase =0xe000 ; config_base =0x40 ;break ; -case 1 : iobase =0xe008 ; config_base =0x48 ;break ; -case 2 : iobase =0xe010 ; config_base =0x50 ;break ; -case 3 : iobase =0xe018 ; config_base =0x58 ;break ; -case 4 : iobase =0xe020 ; config_base =0x60 ;break ; -case 5 : iobase =0xe028 ; config_base =0x68 ;break ; -case 6 : iobase =0xe030 ; config_base =0x70 ;break ; -case 7 : iobase =0xe038 ; config_base =0x78 ;break ; -case 8 : iobase =0xe040 ; config_base =0x80 ;break ; -case 9 : iobase =0xe048 ; config_base =0x88 ;break ; -case 10 : iobase =0xe050 ; config_base =0x90 ;break ; -case 11 : iobase =0xe058 ; config_base =0x98 ;break ; +case 0 : config_base =0x40 ;break ; +case 1 : config_base =0x48 ;break ; +case 2 : config_base =0x50 ;break ; +case 3 : config_base =0x58 ;break ; +case 4 : config_base =0x60 ;break ; +case 5 : config_base =0x68 ;break ; +case 6 : config_base =0x70 ;break ; +case 7 : config_base =0x78 ;break ; +case 8 : config_base =0x80 ;break ; +case 9 : config_base =0x88 ;break ; +case 10 : config_base =0x90 ;break ; +case 11 : config_base =0x98 ;break ;default :/* Unknown number of ports, get out of here */ return -EINVAL ;@@ -1583,9 +1586,17 @@ static int pci_fintek_setup(struct serial_private *priv, ciobase = (int )(base + (0x8 * idx)); } +pci_read_config_dword (pdev,0x24 , &bar_data[0 ]); +pci_read_config_dword (pdev,0x20 , &bar_data[1 ]); +pci_read_config_dword (pdev,0x1c , &bar_data[2 ]); + +/* Calculate Real IO Port */ + iobase = (bar_data[idx/4 ] &0xffffffE0 ) + (idx %4 ) *8 ; +dev_dbg (&pdev->dev,"%s: idx=%d iobase=0x%lx ciobase=0x%lx config_base=0x%2x\n" , __func__, idx, iobase, ciobase, config_base);
Quoted 8 lines
drivers/tty/serial/8250/8250_pci.c static int pci_fintek_setup(struct serial_private *priv, · line 1599
Quoted 1 line
drivers/tty/serial/8250/8250_pci.c +1
-0+New line added for no reason?
thanks,
greg k-h
--
To unsubscribe from this list: send the line "unsubscribe linux-serial" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Greg KH
maintainerQuoted 6 lines · Peter Hung
Dear Greg KH and Senior Linuxers,
I had some some question, If I submited a patch, but it had rejected, how should I do when fix the patch?
1. send patch by reply original email ?
You can do this, with a [PATCH v2] in the subject.
Quoted 1 line
2. direct send patch with new email again?
That works as well, but tell us what changed from the first one please.
thanks,
greg k-h