* [PATCH 6/8] ns16550: PCI initialization adjustments
@ 2012-09-11 10:19 Jan Beulich
2012-09-11 18:14 ` Konrad Rzeszutek Wilk
0 siblings, 1 reply; 3+ messages in thread
From: Jan Beulich @ 2012-09-11 10:19 UTC (permalink / raw)
To: xen-devel
Besides single-port serial cards, also accept multi-port ones and such
providing mixed functionality (e.g. also having a parallel port).
Reading PCI_INTERRUPT_PIN before ACPI gets enabled generally produces
an incorrect IRQ (below 16, whereas after enabling ACPI it frequently
would end up at a higher one), so this is useful (almost) only when a
system already boots in ACPI mode.
Signed-off-by: Jan Beulich <jbeulich@suse.com>
--- a/xen/drivers/char/ns16550.c
+++ b/xen/drivers/char/ns16550.c
@@ -468,7 +468,6 @@ static int __init check_existence(struct
static int
pci_uart_config (struct ns16550 *uart, int skip_amt, int bar_idx)
{
- uint16_t class;
uint32_t bar, len;
int b, d, f;
@@ -479,9 +478,15 @@ pci_uart_config (struct ns16550 *uart, i
{
for ( f = 0; f < 0x8; f++ )
{
- class = pci_conf_read16(0, b, d, f, PCI_CLASS_DEVICE);
- if ( class != 0x700 )
+ switch ( pci_conf_read16(0, b, d, f, PCI_CLASS_DEVICE) )
+ {
+ case 0x0700: /* single port serial */
+ case 0x0702: /* multi port serial */
+ case 0x0780: /* other (e.g serial+parallel) */
+ break;
+ default:
continue;
+ }
bar = pci_conf_read32(0, b, d, f,
PCI_BASE_ADDRESS_0 + bar_idx*4);
@@ -504,7 +509,9 @@ pci_uart_config (struct ns16550 *uart, i
uart->bar = bar;
uart->bar_idx = bar_idx;
uart->io_base = bar & ~PCI_BASE_ADDRESS_SPACE_IO;
- uart->irq = 0;
+ uart->irq = pci_conf_read8(0, b, d, f, PCI_INTERRUPT_PIN) ?
+ pci_conf_read8(0, b, d, f, PCI_INTERRUPT_LINE) : 0;
+printk("COM%d: BAR=%04x IRQ=%d\n", bar_idx + 1, bar, uart->irq);//temp
return 0;
}
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH 6/8] ns16550: PCI initialization adjustments
2012-09-11 10:19 [PATCH 6/8] ns16550: PCI initialization adjustments Jan Beulich
@ 2012-09-11 18:14 ` Konrad Rzeszutek Wilk
2012-09-12 7:39 ` Jan Beulich
0 siblings, 1 reply; 3+ messages in thread
From: Konrad Rzeszutek Wilk @ 2012-09-11 18:14 UTC (permalink / raw)
To: Jan Beulich; +Cc: xen-devel
On Tue, Sep 11, 2012 at 11:19:32AM +0100, Jan Beulich wrote:
> Besides single-port serial cards, also accept multi-port ones and such
> providing mixed functionality (e.g. also having a parallel port).
>
> Reading PCI_INTERRUPT_PIN before ACPI gets enabled generally produces
> an incorrect IRQ (below 16, whereas after enabling ACPI it frequently
> would end up at a higher one), so this is useful (almost) only when a
> system already boots in ACPI mode.
>
> Signed-off-by: Jan Beulich <jbeulich@suse.com>
>
> --- a/xen/drivers/char/ns16550.c
> +++ b/xen/drivers/char/ns16550.c
> @@ -468,7 +468,6 @@ static int __init check_existence(struct
> static int
> pci_uart_config (struct ns16550 *uart, int skip_amt, int bar_idx)
> {
> - uint16_t class;
> uint32_t bar, len;
> int b, d, f;
>
> @@ -479,9 +478,15 @@ pci_uart_config (struct ns16550 *uart, i
> {
> for ( f = 0; f < 0x8; f++ )
> {
> - class = pci_conf_read16(0, b, d, f, PCI_CLASS_DEVICE);
> - if ( class != 0x700 )
> + switch ( pci_conf_read16(0, b, d, f, PCI_CLASS_DEVICE) )
> + {
> + case 0x0700: /* single port serial */
> + case 0x0702: /* multi port serial */
> + case 0x0780: /* other (e.g serial+parallel) */
> + break;
> + default:
> continue;
> + }
>
> bar = pci_conf_read32(0, b, d, f,
> PCI_BASE_ADDRESS_0 + bar_idx*4);
> @@ -504,7 +509,9 @@ pci_uart_config (struct ns16550 *uart, i
> uart->bar = bar;
> uart->bar_idx = bar_idx;
> uart->io_base = bar & ~PCI_BASE_ADDRESS_SPACE_IO;
> - uart->irq = 0;
> + uart->irq = pci_conf_read8(0, b, d, f, PCI_INTERRUPT_PIN) ?
> + pci_conf_read8(0, b, d, f, PCI_INTERRUPT_LINE) : 0;
> +printk("COM%d: BAR=%04x IRQ=%d\n", bar_idx + 1, bar, uart->irq);//temp
printk ?
>
> return 0;
> }
>
>
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> http://lists.xen.org/xen-devel
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH 6/8] ns16550: PCI initialization adjustments
2012-09-11 18:14 ` Konrad Rzeszutek Wilk
@ 2012-09-12 7:39 ` Jan Beulich
0 siblings, 0 replies; 3+ messages in thread
From: Jan Beulich @ 2012-09-12 7:39 UTC (permalink / raw)
To: Konrad Rzeszutek Wilk; +Cc: xen-devel
>>> On 11.09.12 at 20:14, Konrad Rzeszutek Wilk <konrad@kernel.org> wrote:
> On Tue, Sep 11, 2012 at 11:19:32AM +0100, Jan Beulich wrote:
>> Besides single-port serial cards, also accept multi-port ones and such
>> providing mixed functionality (e.g. also having a parallel port).
>>
>> Reading PCI_INTERRUPT_PIN before ACPI gets enabled generally produces
>> an incorrect IRQ (below 16, whereas after enabling ACPI it frequently
>> would end up at a higher one), so this is useful (almost) only when a
>> system already boots in ACPI mode.
>>
>> Signed-off-by: Jan Beulich <jbeulich@suse.com>
>>
>> --- a/xen/drivers/char/ns16550.c
>> +++ b/xen/drivers/char/ns16550.c
>> @@ -468,7 +468,6 @@ static int __init check_existence(struct
>> static int
>> pci_uart_config (struct ns16550 *uart, int skip_amt, int bar_idx)
>> {
>> - uint16_t class;
>> uint32_t bar, len;
>> int b, d, f;
>>
>> @@ -479,9 +478,15 @@ pci_uart_config (struct ns16550 *uart, i
>> {
>> for ( f = 0; f < 0x8; f++ )
>> {
>> - class = pci_conf_read16(0, b, d, f, PCI_CLASS_DEVICE);
>> - if ( class != 0x700 )
>> + switch ( pci_conf_read16(0, b, d, f, PCI_CLASS_DEVICE) )
>> + {
>> + case 0x0700: /* single port serial */
>> + case 0x0702: /* multi port serial */
>> + case 0x0780: /* other (e.g serial+parallel) */
>> + break;
>> + default:
>> continue;
>> + }
>>
>> bar = pci_conf_read32(0, b, d, f,
>> PCI_BASE_ADDRESS_0 + bar_idx*4);
>> @@ -504,7 +509,9 @@ pci_uart_config (struct ns16550 *uart, i
>> uart->bar = bar;
>> uart->bar_idx = bar_idx;
>> uart->io_base = bar & ~PCI_BASE_ADDRESS_SPACE_IO;
>> - uart->irq = 0;
>> + uart->irq = pci_conf_read8(0, b, d, f, PCI_INTERRUPT_PIN) ?
>> + pci_conf_read8(0, b, d, f, PCI_INTERRUPT_LINE) : 0;
>> +printk("COM%d: BAR=%04x IRQ=%d\n", bar_idx + 1, bar, uart->irq);//temp
>
> printk ?
I had spotted this before committing, and removed it in time.
Thanks for noticing anyway,
Jan
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2012-09-12 7:39 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-09-11 10:19 [PATCH 6/8] ns16550: PCI initialization adjustments Jan Beulich
2012-09-11 18:14 ` Konrad Rzeszutek Wilk
2012-09-12 7:39 ` Jan Beulich
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.