* [PATCH] earlyprintk: Clean up pciserial
@ 2022-08-25 11:36 Peter Zijlstra
2022-08-25 11:48 ` Greg KH
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Peter Zijlstra @ 2022-08-25 11:36 UTC (permalink / raw)
To: x86; +Cc: linux-kernel, bhelgaas, gregkh
While working on a GRUB patch to support PCI-serial, a number of
cleanups were suggested that apply to the code I took inspiration from.
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
---
arch/x86/kernel/early_printk.c | 14 +++++++-------
include/linux/pci_ids.h | 3 +++
2 files changed, 10 insertions(+), 7 deletions(-)
diff --git a/arch/x86/kernel/early_printk.c b/arch/x86/kernel/early_printk.c
index 68b38925a74f..44f937015e1e 100644
--- a/arch/x86/kernel/early_printk.c
+++ b/arch/x86/kernel/early_printk.c
@@ -264,11 +264,11 @@ static __init void early_pci_serial_init(char *s)
bar0 = read_pci_config(bus, slot, func, PCI_BASE_ADDRESS_0);
/*
- * Verify it is a UART type device
+ * Verify it is a 16550-UART type device
*/
if (((classcode >> 16 != PCI_CLASS_COMMUNICATION_MODEM) &&
(classcode >> 16 != PCI_CLASS_COMMUNICATION_SERIAL)) ||
- (((classcode >> 8) & 0xff) != 0x02)) /* 16550 I/F at BAR0 */ {
+ (((classcode >> 8) & 0xff) != PCI_SERIAL_16550_COMPATIBLE)) {
if (!force)
return;
}
@@ -276,22 +276,22 @@ static __init void early_pci_serial_init(char *s)
/*
* Determine if it is IO or memory mapped
*/
- if (bar0 & 0x01) {
+ if ((bar0 & PCI_BASE_ADDRESS_SPACE) == PCI_BASE_ADDRESS_SPACE_IO) {
/* it is IO mapped */
serial_in = io_serial_in;
serial_out = io_serial_out;
- early_serial_base = bar0&0xfffffffc;
+ early_serial_base = bar0 & PCI_BASE_ADDRESS_IO_MASK;
write_pci_config(bus, slot, func, PCI_COMMAND,
- cmdreg|PCI_COMMAND_IO);
+ cmdreg|PCI_COMMAND_IO);
} else {
/* It is memory mapped - assume 32-bit alignment */
serial_in = mem32_serial_in;
serial_out = mem32_serial_out;
/* WARNING! assuming the address is always in the first 4G */
early_serial_base =
- (unsigned long)early_ioremap(bar0 & 0xfffffff0, 0x10);
+ (unsigned long)early_ioremap(bar0 & PCI_BASE_ADDRESS_MEM_MASK, 0x10);
write_pci_config(bus, slot, func, PCI_COMMAND,
- cmdreg|PCI_COMMAND_MEMORY);
+ cmdreg|PCI_COMMAND_MEMORY);
}
/*
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
index 6feade66efdb..1d2c7df8cd41 100644
--- a/include/linux/pci_ids.h
+++ b/include/linux/pci_ids.h
@@ -75,6 +75,9 @@
#define PCI_CLASS_COMMUNICATION_MODEM 0x0703
#define PCI_CLASS_COMMUNICATION_OTHER 0x0780
+/* I/F for SERIAL/MODEM */
+#define PCI_SERIAL_16550_COMPATIBLE 0x02
+
#define PCI_BASE_CLASS_SYSTEM 0x08
#define PCI_CLASS_SYSTEM_PIC 0x0800
#define PCI_CLASS_SYSTEM_PIC_IOAPIC 0x080010
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH] earlyprintk: Clean up pciserial
2022-08-25 11:36 [PATCH] earlyprintk: Clean up pciserial Peter Zijlstra
@ 2022-08-25 11:48 ` Greg KH
2022-08-25 17:39 ` Bjorn Helgaas
2022-08-29 10:52 ` [tip: x86/core] x86/earlyprintk: " tip-bot2 for Peter Zijlstra
2 siblings, 0 replies; 7+ messages in thread
From: Greg KH @ 2022-08-25 11:48 UTC (permalink / raw)
To: Peter Zijlstra; +Cc: x86, linux-kernel, bhelgaas
On Thu, Aug 25, 2022 at 01:36:40PM +0200, Peter Zijlstra wrote:
>
> While working on a GRUB patch to support PCI-serial, a number of
> cleanups were suggested that apply to the code I took inspiration from.
>
> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
> ---
> arch/x86/kernel/early_printk.c | 14 +++++++-------
> include/linux/pci_ids.h | 3 +++
> 2 files changed, 10 insertions(+), 7 deletions(-)
Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] earlyprintk: Clean up pciserial
2022-08-25 11:36 [PATCH] earlyprintk: Clean up pciserial Peter Zijlstra
2022-08-25 11:48 ` Greg KH
@ 2022-08-25 17:39 ` Bjorn Helgaas
2022-08-25 19:36 ` Peter Zijlstra
2022-08-29 10:52 ` [tip: x86/core] x86/earlyprintk: " tip-bot2 for Peter Zijlstra
2 siblings, 1 reply; 7+ messages in thread
From: Bjorn Helgaas @ 2022-08-25 17:39 UTC (permalink / raw)
To: Peter Zijlstra; +Cc: x86, linux-kernel, bhelgaas, gregkh
On Thu, Aug 25, 2022 at 01:36:40PM +0200, Peter Zijlstra wrote:
>
> While working on a GRUB patch to support PCI-serial, a number of
> cleanups were suggested that apply to the code I took inspiration from.
>
> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Acked-by: Bjorn Helgaas <bhelgaas@google.com> # pci_ids.h
> ---
> arch/x86/kernel/early_printk.c | 14 +++++++-------
> include/linux/pci_ids.h | 3 +++
> 2 files changed, 10 insertions(+), 7 deletions(-)
>
> diff --git a/arch/x86/kernel/early_printk.c b/arch/x86/kernel/early_printk.c
> index 68b38925a74f..44f937015e1e 100644
> --- a/arch/x86/kernel/early_printk.c
> +++ b/arch/x86/kernel/early_printk.c
> @@ -264,11 +264,11 @@ static __init void early_pci_serial_init(char *s)
> bar0 = read_pci_config(bus, slot, func, PCI_BASE_ADDRESS_0);
>
> /*
> - * Verify it is a UART type device
> + * Verify it is a 16550-UART type device
> */
> if (((classcode >> 16 != PCI_CLASS_COMMUNICATION_MODEM) &&
> (classcode >> 16 != PCI_CLASS_COMMUNICATION_SERIAL)) ||
> - (((classcode >> 8) & 0xff) != 0x02)) /* 16550 I/F at BAR0 */ {
> + (((classcode >> 8) & 0xff) != PCI_SERIAL_16550_COMPATIBLE)) {
> if (!force)
> return;
> }
> @@ -276,22 +276,22 @@ static __init void early_pci_serial_init(char *s)
> /*
> * Determine if it is IO or memory mapped
> */
> - if (bar0 & 0x01) {
> + if ((bar0 & PCI_BASE_ADDRESS_SPACE) == PCI_BASE_ADDRESS_SPACE_IO) {
> /* it is IO mapped */
> serial_in = io_serial_in;
> serial_out = io_serial_out;
> - early_serial_base = bar0&0xfffffffc;
> + early_serial_base = bar0 & PCI_BASE_ADDRESS_IO_MASK;
> write_pci_config(bus, slot, func, PCI_COMMAND,
> - cmdreg|PCI_COMMAND_IO);
> + cmdreg|PCI_COMMAND_IO);
> } else {
> /* It is memory mapped - assume 32-bit alignment */
> serial_in = mem32_serial_in;
> serial_out = mem32_serial_out;
> /* WARNING! assuming the address is always in the first 4G */
> early_serial_base =
> - (unsigned long)early_ioremap(bar0 & 0xfffffff0, 0x10);
> + (unsigned long)early_ioremap(bar0 & PCI_BASE_ADDRESS_MEM_MASK, 0x10);
> write_pci_config(bus, slot, func, PCI_COMMAND,
> - cmdreg|PCI_COMMAND_MEMORY);
> + cmdreg|PCI_COMMAND_MEMORY);
> }
>
> /*
> diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
> index 6feade66efdb..1d2c7df8cd41 100644
> --- a/include/linux/pci_ids.h
> +++ b/include/linux/pci_ids.h
> @@ -75,6 +75,9 @@
> #define PCI_CLASS_COMMUNICATION_MODEM 0x0703
> #define PCI_CLASS_COMMUNICATION_OTHER 0x0780
>
> +/* I/F for SERIAL/MODEM */
I/F? Grep says it's fairly common, but doesn't seem completely
obvious. I guess it means "interface"?
> +#define PCI_SERIAL_16550_COMPATIBLE 0x02
> +
> #define PCI_BASE_CLASS_SYSTEM 0x08
> #define PCI_CLASS_SYSTEM_PIC 0x0800
> #define PCI_CLASS_SYSTEM_PIC_IOAPIC 0x080010
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] earlyprintk: Clean up pciserial
2022-08-25 17:39 ` Bjorn Helgaas
@ 2022-08-25 19:36 ` Peter Zijlstra
2022-08-25 19:51 ` Bjorn Helgaas
0 siblings, 1 reply; 7+ messages in thread
From: Peter Zijlstra @ 2022-08-25 19:36 UTC (permalink / raw)
To: Bjorn Helgaas; +Cc: x86, linux-kernel, bhelgaas, gregkh
On Thu, Aug 25, 2022 at 12:39:59PM -0500, Bjorn Helgaas wrote:
> > - (((classcode >> 8) & 0xff) != 0x02)) /* 16550 I/F at BAR0 */ {
> > diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
> > index 6feade66efdb..1d2c7df8cd41 100644
> > --- a/include/linux/pci_ids.h
> > +++ b/include/linux/pci_ids.h
> > @@ -75,6 +75,9 @@
> > #define PCI_CLASS_COMMUNICATION_MODEM 0x0703
> > #define PCI_CLASS_COMMUNICATION_OTHER 0x0780
> >
> > +/* I/F for SERIAL/MODEM */
>
> I/F? Grep says it's fairly common, but doesn't seem completely
> obvious. I guess it means "interface"?
It does, I carried the nomenclature from the above line; happy to change
it if you want.
https://wiki.osdev.org/PCI#Class_Codes
Calls it 'Prog IF'.
> > +#define PCI_SERIAL_16550_COMPATIBLE 0x02
> > +
> > #define PCI_BASE_CLASS_SYSTEM 0x08
> > #define PCI_CLASS_SYSTEM_PIC 0x0800
> > #define PCI_CLASS_SYSTEM_PIC_IOAPIC 0x080010
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] earlyprintk: Clean up pciserial
2022-08-25 19:36 ` Peter Zijlstra
@ 2022-08-25 19:51 ` Bjorn Helgaas
2022-08-25 20:08 ` Peter Zijlstra
0 siblings, 1 reply; 7+ messages in thread
From: Bjorn Helgaas @ 2022-08-25 19:51 UTC (permalink / raw)
To: Peter Zijlstra; +Cc: x86, linux-kernel, bhelgaas, gregkh
On Thu, Aug 25, 2022 at 09:36:35PM +0200, Peter Zijlstra wrote:
> On Thu, Aug 25, 2022 at 12:39:59PM -0500, Bjorn Helgaas wrote:
>
> > > - (((classcode >> 8) & 0xff) != 0x02)) /* 16550 I/F at BAR0 */ {
>
> > > diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
> > > index 6feade66efdb..1d2c7df8cd41 100644
> > > --- a/include/linux/pci_ids.h
> > > +++ b/include/linux/pci_ids.h
> > > @@ -75,6 +75,9 @@
> > > #define PCI_CLASS_COMMUNICATION_MODEM 0x0703
> > > #define PCI_CLASS_COMMUNICATION_OTHER 0x0780
> > >
> > > +/* I/F for SERIAL/MODEM */
> >
> > I/F? Grep says it's fairly common, but doesn't seem completely
> > obvious. I guess it means "interface"?
>
> It does, I carried the nomenclature from the above line; happy to change
> it if you want.
>
> https://wiki.osdev.org/PCI#Class_Codes
>
> Calls it 'Prog IF'.
Personally, I would spell it out just to make it less arcane. I
wouldn't know where to find the definition, and the PCI specs don't
seem to use the abbreviation. But no big deal either way.
Bjorn
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] earlyprintk: Clean up pciserial
2022-08-25 19:51 ` Bjorn Helgaas
@ 2022-08-25 20:08 ` Peter Zijlstra
0 siblings, 0 replies; 7+ messages in thread
From: Peter Zijlstra @ 2022-08-25 20:08 UTC (permalink / raw)
To: Bjorn Helgaas; +Cc: x86, linux-kernel, bhelgaas, gregkh
On Thu, Aug 25, 2022 at 02:51:43PM -0500, Bjorn Helgaas wrote:
> On Thu, Aug 25, 2022 at 09:36:35PM +0200, Peter Zijlstra wrote:
> > On Thu, Aug 25, 2022 at 12:39:59PM -0500, Bjorn Helgaas wrote:
> >
> > > > - (((classcode >> 8) & 0xff) != 0x02)) /* 16550 I/F at BAR0 */ {
> >
> > > > diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
> > > > index 6feade66efdb..1d2c7df8cd41 100644
> > > > --- a/include/linux/pci_ids.h
> > > > +++ b/include/linux/pci_ids.h
> > > > @@ -75,6 +75,9 @@
> > > > #define PCI_CLASS_COMMUNICATION_MODEM 0x0703
> > > > #define PCI_CLASS_COMMUNICATION_OTHER 0x0780
> > > >
> > > > +/* I/F for SERIAL/MODEM */
> > >
> > > I/F? Grep says it's fairly common, but doesn't seem completely
> > > obvious. I guess it means "interface"?
> >
> > It does, I carried the nomenclature from the above line; happy to change
> > it if you want.
> >
> > https://wiki.osdev.org/PCI#Class_Codes
> >
> > Calls it 'Prog IF'.
>
> Personally, I would spell it out just to make it less arcane. I
> wouldn't know where to find the definition, and the PCI specs don't
> seem to use the abbreviation. But no big deal either way.
Ok,
/* Interface for SERIAL/MODEM */
it is.
^ permalink raw reply [flat|nested] 7+ messages in thread
* [tip: x86/core] x86/earlyprintk: Clean up pciserial
2022-08-25 11:36 [PATCH] earlyprintk: Clean up pciserial Peter Zijlstra
2022-08-25 11:48 ` Greg KH
2022-08-25 17:39 ` Bjorn Helgaas
@ 2022-08-29 10:52 ` tip-bot2 for Peter Zijlstra
2 siblings, 0 replies; 7+ messages in thread
From: tip-bot2 for Peter Zijlstra @ 2022-08-29 10:52 UTC (permalink / raw)
To: linux-tip-commits
Cc: Peter Zijlstra (Intel), Bjorn Helgaas, Greg Kroah-Hartman, x86,
linux-kernel
The following commit has been merged into the x86/core branch of tip:
Commit-ID: bc12b70f7d216b36bd87701349374a13e486f8eb
Gitweb: https://git.kernel.org/tip/bc12b70f7d216b36bd87701349374a13e486f8eb
Author: Peter Zijlstra <peterz@infradead.org>
AuthorDate: Thu, 25 Aug 2022 13:36:40 +02:00
Committer: Peter Zijlstra <peterz@infradead.org>
CommitterDate: Mon, 29 Aug 2022 12:19:25 +02:00
x86/earlyprintk: Clean up pciserial
While working on a GRUB patch to support PCI-serial, a number of
cleanups were suggested that apply to the code I took inspiration from.
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Acked-by: Bjorn Helgaas <bhelgaas@google.com> # pci_ids.h
Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Link: https://lkml.kernel.org/r/YwdeyCEtW+wa+QhH@worktop.programming.kicks-ass.net
---
arch/x86/kernel/early_printk.c | 14 +++++++-------
include/linux/pci_ids.h | 3 +++
2 files changed, 10 insertions(+), 7 deletions(-)
diff --git a/arch/x86/kernel/early_printk.c b/arch/x86/kernel/early_printk.c
index 68b3892..44f9370 100644
--- a/arch/x86/kernel/early_printk.c
+++ b/arch/x86/kernel/early_printk.c
@@ -264,11 +264,11 @@ static __init void early_pci_serial_init(char *s)
bar0 = read_pci_config(bus, slot, func, PCI_BASE_ADDRESS_0);
/*
- * Verify it is a UART type device
+ * Verify it is a 16550-UART type device
*/
if (((classcode >> 16 != PCI_CLASS_COMMUNICATION_MODEM) &&
(classcode >> 16 != PCI_CLASS_COMMUNICATION_SERIAL)) ||
- (((classcode >> 8) & 0xff) != 0x02)) /* 16550 I/F at BAR0 */ {
+ (((classcode >> 8) & 0xff) != PCI_SERIAL_16550_COMPATIBLE)) {
if (!force)
return;
}
@@ -276,22 +276,22 @@ static __init void early_pci_serial_init(char *s)
/*
* Determine if it is IO or memory mapped
*/
- if (bar0 & 0x01) {
+ if ((bar0 & PCI_BASE_ADDRESS_SPACE) == PCI_BASE_ADDRESS_SPACE_IO) {
/* it is IO mapped */
serial_in = io_serial_in;
serial_out = io_serial_out;
- early_serial_base = bar0&0xfffffffc;
+ early_serial_base = bar0 & PCI_BASE_ADDRESS_IO_MASK;
write_pci_config(bus, slot, func, PCI_COMMAND,
- cmdreg|PCI_COMMAND_IO);
+ cmdreg|PCI_COMMAND_IO);
} else {
/* It is memory mapped - assume 32-bit alignment */
serial_in = mem32_serial_in;
serial_out = mem32_serial_out;
/* WARNING! assuming the address is always in the first 4G */
early_serial_base =
- (unsigned long)early_ioremap(bar0 & 0xfffffff0, 0x10);
+ (unsigned long)early_ioremap(bar0 & PCI_BASE_ADDRESS_MEM_MASK, 0x10);
write_pci_config(bus, slot, func, PCI_COMMAND,
- cmdreg|PCI_COMMAND_MEMORY);
+ cmdreg|PCI_COMMAND_MEMORY);
}
/*
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
index 6feade6..41b3fff 100644
--- a/include/linux/pci_ids.h
+++ b/include/linux/pci_ids.h
@@ -75,6 +75,9 @@
#define PCI_CLASS_COMMUNICATION_MODEM 0x0703
#define PCI_CLASS_COMMUNICATION_OTHER 0x0780
+/* Interface for SERIAL/MODEM */
+#define PCI_SERIAL_16550_COMPATIBLE 0x02
+
#define PCI_BASE_CLASS_SYSTEM 0x08
#define PCI_CLASS_SYSTEM_PIC 0x0800
#define PCI_CLASS_SYSTEM_PIC_IOAPIC 0x080010
^ permalink raw reply related [flat|nested] 7+ messages in thread
end of thread, other threads:[~2022-08-29 10:52 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-08-25 11:36 [PATCH] earlyprintk: Clean up pciserial Peter Zijlstra
2022-08-25 11:48 ` Greg KH
2022-08-25 17:39 ` Bjorn Helgaas
2022-08-25 19:36 ` Peter Zijlstra
2022-08-25 19:51 ` Bjorn Helgaas
2022-08-25 20:08 ` Peter Zijlstra
2022-08-29 10:52 ` [tip: x86/core] x86/earlyprintk: " tip-bot2 for Peter Zijlstra
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.