LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* PNPACPI probes serial twice, messes up serial console
@ 2007-03-20  6:46 Keith Owens
  2007-03-20  8:51 ` Russell King
  2007-03-20 14:32 ` Bjorn Helgaas
  0 siblings, 2 replies; 11+ messages in thread
From: Keith Owens @ 2007-03-20  6:46 UTC (permalink / raw)
  To: linux-kernel; +Cc: len.brown

Dell SC1425 x86_64 running in i386 mode (the problem also occurs in
x86_64 mode).  Kernel 2.6.21-rc4, gcc 4.1.0.  Config extract at end.

Booting with 'console=tty console=ttyS0,9600'.  The serial console on
ttyS0 (0x3f8, irq 4) is probed twice, once from serial8250_init() and
again from serial_pnp_probe().  The serial console output is correct
until the second probe (from PNP) gets to these lines in
serial8250_config_port()

	if (flags & UART_CONFIG_TYPE)
		autoconfig(up, probeflags);

After the call to autoconfig(), the serial console starts printing NUL
characters instead of the console output.  The number of NUL characters
corresponds closely with the number of characters written to the VT
console, IOW it outputs each serial character as NUL instead of the
correct character.  When the kernel boots /sbin/init, the console
resets to printing normal characters.

AFAICT, the second probe of the UART is doing something nasty to the
hardware.  This is not a recent problem, I can reproduce the problem on
2.6.16.  Booting with pnpacpi=off removes the problem, but that
supresses all the PNPACPI code, not just the second probe of the serial
devices.

Should pnpacpi probe and setup the serial devices even when thay have
already been setup?  Or this is something strange about the UART in
this particular box?

FWIW, the serial console is plugged into a serial to USB converter
(pl2303), my laptop has no serial ports.  That should not make a
difference, but just in case it does ...

Config extract:

X86_32=y
GENERIC_TIME=y
CLOCKSOURCE_WATCHDOG=y
GENERIC_CLOCKEVENTS=y
GENERIC_CLOCKEVENTS_BROADCAST=y
LOCKDEP_SUPPORT=y
STACKTRACE_SUPPORT=y
SEMAPHORE_SLEEPERS=y
X86=y
MMU=y
ZONE_DMA=y
GENERIC_ISA_DMA=y
GENERIC_IOMAP=y
GENERIC_BUG=y
GENERIC_HWEIGHT=y
ARCH_MAY_HAVE_PC_FDC=y
DMI=y
DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
EXPERIMENTAL=y
LOCK_KERNEL=y
INIT_ENV_ARG_LIMIT=32
LOCALVERSION="-i386-kaos"
LOCALVERSION_AUTO=y
SWAP=y
SYSVIPC=y
SYSVIPC_SYSCTL=y
POSIX_MQUEUE=y
IKCONFIG=y
IKCONFIG_PROC=y
SYSFS_DEPRECATED=y
CC_OPTIMIZE_FOR_SIZE=y
SYSCTL=y
EMBEDDED=y
SYSCTL_SYSCALL=y
KALLSYMS=y
KALLSYMS_ALL=y
HOTPLUG=y
PRINTK=y
BUG=y
ELF_CORE=y
BASE_FULL=y
FUTEX=y
EPOLL=y
SHMEM=y
SLAB=y
VM_EVENT_COUNTERS=y
RT_MUTEXES=y
BASE_SMALL=0
MODULES=y
MODULE_UNLOAD=y
KMOD=y
STOP_MACHINE=y
BLOCK=y
LBD=y
LSF=y
IOSCHED_NOOP=y
IOSCHED_AS=y
IOSCHED_DEADLINE=y
IOSCHED_CFQ=y
DEFAULT_DEADLINE=y
DEFAULT_IOSCHED="deadline"
TICK_ONESHOT=y
HIGH_RES_TIMERS=y
SMP=y
X86_PC=y
MPENTIUM4=y
X86_CMPXCHG=y
X86_L1_CACHE_SHIFT=7
RWSEM_XCHGADD_ALGORITHM=y
GENERIC_CALIBRATE_DELAY=y
X86_WP_WORKS_OK=y
X86_INVLPG=y
X86_BSWAP=y
X86_POPAD_OK=y
X86_CMPXCHG64=y
X86_GOOD_APIC=y
X86_INTEL_USERCOPY=y
X86_USE_PPRO_CHECKSUM=y
X86_TSC=y
HPET_TIMER=y
HPET_EMULATE_RTC=y
NR_CPUS=8
SCHED_SMT=y
PREEMPT_NONE=y
X86_LOCAL_APIC=y
X86_IO_APIC=y
X86_MCE=y
X86_MCE_NONFATAL=y
X86_MCE_P4THERMAL=y
MICROCODE=m
MICROCODE_OLD_INTERFACE=y
X86_MSR=m
X86_CPUID=m
HIGHMEM4G=y
VMSPLIT_3G=y
PAGE_OFFSET=0xC0000000
HIGHMEM=y
ARCH_FLATMEM_ENABLE=y
ARCH_SPARSEMEM_ENABLE=y
ARCH_SELECT_MEMORY_MODEL=y
ARCH_POPULATES_NODE_MAP=y
SELECT_MEMORY_MODEL=y
FLATMEM_MANUAL=y
FLATMEM=y
FLAT_NODE_MEM_MAP=y
SPARSEMEM_STATIC=y
SPLIT_PTLOCK_CPUS=4
ZONE_DMA_FLAG=1
MTRR=y
IRQBALANCE=y
HZ_250=y
HZ=250
PHYSICAL_START=0x100000
PHYSICAL_ALIGN=0x100000
COMPAT_VDSO=y
ARCH_ENABLE_MEMORY_HOTPLUG=y
PM=y
ACPI=y
ACPI_PROCFS=y
ACPI_BUTTON=m
ACPI_FAN=m
ACPI_PROCESSOR=m
ACPI_BLACKLIST_YEAR=0
ACPI_EC=y
ACPI_POWER=y
ACPI_SYSTEM=y
PCI=y
PCI_GOANY=y
PCI_BIOS=y
PCI_DIRECT=y
PCI_MMCONFIG=y
PCIEPORTBUS=y
PCIEAER=y
PCI_MSI=y
HT_IRQ=y
ISA_DMA_API=y
BINFMT_ELF=y
BINFMT_MISC=m
NET=y
PACKET=y
PACKET_MMAP=y
UNIX=y
XFRM=y
INET=y
IP_MULTICAST=y
IP_ADVANCED_ROUTER=y
ASK_IP_FIB_HASH=y
IP_FIB_HASH=y
IP_ROUTE_MULTIPATH=y
IP_ROUTE_VERBOSE=y
SYN_COOKIES=y
INET_XFRM_MODE_BEET=y
INET_DIAG=y
INET_TCP_DIAG=y
TCP_CONG_CUBIC=y
DEFAULT_TCP_CONG="cubic"
NETFILTER=y
NETFILTER_NETLINK=m
NETFILTER_NETLINK_LOG=m
NETFILTER_XTABLES=y
NETFILTER_XT_TARGET_CLASSIFY=m
NETFILTER_XT_TARGET_MARK=m
NETFILTER_XT_MATCH_COMMENT=m
NETFILTER_XT_MATCH_DCCP=m
NETFILTER_XT_MATCH_ESP=m
NETFILTER_XT_MATCH_LENGTH=m
NETFILTER_XT_MATCH_LIMIT=m
NETFILTER_XT_MATCH_MAC=m
NETFILTER_XT_MATCH_MARK=m
NETFILTER_XT_MATCH_MULTIPORT=m
NETFILTER_XT_MATCH_PKTTYPE=m
NETFILTER_XT_MATCH_QUOTA=m
NETFILTER_XT_MATCH_REALM=m
NETFILTER_XT_MATCH_SCTP=m
NETFILTER_XT_MATCH_STATISTIC=m
NETFILTER_XT_MATCH_TCPMSS=m
IP_NF_IPTABLES=y
IP_NF_MATCH_IPRANGE=m
IP_NF_MATCH_TOS=m
IP_NF_MATCH_RECENT=m
IP_NF_MATCH_ECN=m
IP_NF_MATCH_AH=m
IP_NF_MATCH_TTL=m
IP_NF_MATCH_OWNER=m
IP_NF_MATCH_ADDRTYPE=m
IP_NF_FILTER=y
IP_NF_TARGET_REJECT=y
IP_NF_TARGET_ULOG=y
VLAN_8021Q=y
NET_CLS_ROUTE=y
STANDALONE=y
PREVENT_FIRMWARE_BUILD=y
FW_LOADER=m
CONNECTOR=m
PNP=y
PNP_DEBUG=y
PNPACPI=y
BLK_DEV_FD=m
BLK_DEV_LOOP=m
IDE=m
IDE_MAX_HWIFS=4
BLK_DEV_IDE=m
BLK_DEV_IDEDISK=m
IDEDISK_MULTI_MODE=y
BLK_DEV_IDECD=m
IDE_TASK_IOCTL=y
BLK_DEV_IDEPCI=y
IDEPCI_SHARE_IRQ=y
BLK_DEV_IDEDMA_PCI=y
IDEDMA_PCI_AUTO=y
BLK_DEV_PIIX=m
BLK_DEV_IDEDMA=y
IDEDMA_AUTO=y
RAID_ATTRS=m
SCSI=y
SCSI_PROC_FS=y
BLK_DEV_SD=y
CHR_DEV_SG=y
SCSI_CONSTANTS=y
SCSI_SPI_ATTRS=y
SCSI_3W_9XXX=y
SCSI_SYM53C8XX_2=y
SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
SCSI_SYM53C8XX_DEFAULT_TAGS=16
SCSI_SYM53C8XX_MAX_TAGS=64
SCSI_SYM53C8XX_MMIO=y
ATA=y
ATA_PIIX=y
SATA_ACPI=y
MD=y
BLK_DEV_MD=y
MD_RAID1=y
BLK_DEV_DM=y
DM_SNAPSHOT=y
DM_MIRROR=y
NETDEVICES=y
DUMMY=m
BONDING=m
E1000=y
E1000_NAPI=y
SKY2=m
NETCONSOLE=m
NETPOLL=y
NET_POLL_CONTROLLER=y
INPUT=y
INPUT_KEYBOARD=y
KEYBOARD_ATKBD=y
SERIO=y
SERIO_I8042=y
SERIO_LIBPS2=y
SERIO_RAW=m
VT=y
VT_CONSOLE=y
HW_CONSOLE=y
SERIAL_8250=y
SERIAL_8250_CONSOLE=y
SERIAL_8250_PCI=m
SERIAL_8250_PNP=y
SERIAL_8250_NR_UARTS=4
SERIAL_8250_RUNTIME_UARTS=4
SERIAL_CORE=y
SERIAL_CORE_CONSOLE=y
UNIX98_PTYS=y
IPMI_HANDLER=y
IPMI_PANIC_EVENT=y
IPMI_DEVICE_INTERFACE=y
IPMI_SI=y
IPMI_WATCHDOG=y
IPMI_POWEROFF=m
WATCHDOG=y
SOFT_WATCHDOG=m
I8XX_TCO=y
NVRAM=m
RTC=y
HPET=y
HPET_MMAP=y
I2C=y
I2C_CHARDEV=m
I2C_ALGOBIT=m
I2C_I801=y
SENSORS_EEPROM=m
HWMON=y
VGA_CONSOLE=y
DUMMY_CONSOLE=y
HID=y
USB_ARCH_HAS_HCD=y
USB_ARCH_HAS_OHCI=y
USB_ARCH_HAS_EHCI=y
USB=y
USB_DEVICEFS=y
USB_EHCI_HCD=y
USB_STORAGE=m
USB_HID=y
USB_MON=y
USB_SERIAL=m
USB_SERIAL_GENERIC=y
USB_SERIAL_PL2303=m
EDAC=y
EDAC_MM_EDAC=y
EDAC_E752X=y
EDAC_POLL=y
EXT2_FS=m
EXT3_FS=y
JBD=y
XFS_FS=y
INOTIFY=y
INOTIFY_USER=y
ISO9660_FS=m
JOLIET=y
UDF_FS=m
UDF_NLS=y
FAT_FS=m
MSDOS_FS=m
VFAT_FS=m
FAT_DEFAULT_CODEPAGE=850
FAT_DEFAULT_IOCHARSET="iso8859-1"
PROC_FS=y
PROC_KCORE=y
PROC_SYSCTL=y
SYSFS=y
TMPFS=y
RAMFS=y
NFS_FS=y
NFS_V3=y
NFSD=y
NFSD_V3=y
LOCKD=y
LOCKD_V4=y
EXPORTFS=y
NFS_COMMON=y
SUNRPC=y
MSDOS_PARTITION=y
NLS=m
NLS_DEFAULT="iso8859-15"
NLS_CODEPAGE_437=m
NLS_CODEPAGE_850=m
NLS_CODEPAGE_865=m
NLS_ASCII=m
NLS_ISO8859_1=m
NLS_ISO8859_15=m
NLS_UTF8=m
TRACE_IRQFLAGS_SUPPORT=y
ENABLE_MUST_CHECK=y
MAGIC_SYSRQ=y
DEBUG_KERNEL=y
LOG_BUF_SHIFT=16
DETECT_SOFTLOCKUP=y
DEBUG_SPINLOCK=y
DEBUG_MUTEXES=y
DEBUG_BUGVERBOSE=y
FORCED_INLINING=y
DEBUG_STACKOVERFLOW=y
DEBUG_RODATA=y
X86_FIND_SMP_CONFIG=y
X86_MPPARSE=y
DOUBLEFAULT=y
KDB=y
KDB_MODULES=y
KDB_CONTINUE_CATASTROPHIC=0
BITREVERSE=y
CRC32=y
PLIST=y
HAS_IOMEM=y
HAS_IOPORT=y
GENERIC_HARDIRQS=y
GENERIC_IRQ_PROBE=y
GENERIC_PENDING_IRQ=y
X86_SMP=y
X86_HT=y
X86_BIOS_REBOOT=y
X86_TRAMPOLINE=y
KTIME_SCALAR=y


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: PNPACPI probes serial twice, messes up serial console
  2007-03-20  6:46 PNPACPI probes serial twice, messes up serial console Keith Owens
@ 2007-03-20  8:51 ` Russell King
  2007-03-20 14:32 ` Bjorn Helgaas
  1 sibling, 0 replies; 11+ messages in thread
From: Russell King @ 2007-03-20  8:51 UTC (permalink / raw)
  To: Keith Owens; +Cc: linux-kernel, len.brown

On Tue, Mar 20, 2007 at 05:46:46PM +1100, Keith Owens wrote:
> Should pnpacpi probe and setup the serial devices even when thay have
> already been setup?  Or this is something strange about the UART in
> this particular box?

Yes, so it can be associated with the correct device.

No idea why it's affecting your serial console though - the autoconfig
should be transparent once it's completed.  Sure, if you enable
serial debugging (thereby making it produce output during the autoconfig)
it will mess it up, but that's the standard gun and foot scenario.

-- 
Russell King
 Linux kernel    2.6 ARM Linux   - http://www.arm.linux.org.uk/
 maintainer of:

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: PNPACPI probes serial twice, messes up serial console
  2007-03-20  6:46 PNPACPI probes serial twice, messes up serial console Keith Owens
  2007-03-20  8:51 ` Russell King
@ 2007-03-20 14:32 ` Bjorn Helgaas
  2007-03-20 15:14   ` Russell King
  2007-03-21 16:35   ` Bjorn Helgaas
  1 sibling, 2 replies; 11+ messages in thread
From: Bjorn Helgaas @ 2007-03-20 14:32 UTC (permalink / raw)
  To: Keith Owens; +Cc: linux-kernel, len.brown, Andrew Morton, Russell King

On Tuesday 20 March 2007 00:46, Keith Owens wrote:
> Booting with 'console=tty console=ttyS0,9600'.  The serial console on
> ttyS0 (0x3f8, irq 4) is probed twice, once from serial8250_init() and
> again from serial_pnp_probe().

I played with this last summer, but was too timid to finish it
and post it.  My plan was to remove the legacy SERIAL_PORT_DFNS,
make platform devices for them, and only register the platform
devices in the absence of PNP.

My motivation at the time was to prevent 8250 from claiming IRDA
devices that happened to live at legacy UART addresses.  I also
wanted to make IRDA (smsc-ircc2 in my case) smart enough to use
PNP to locate its devices, since 8250 would no longer claim them.

Here's the dusty patch (against 2.6.18-rc1-mm2).  If it seems
like a reasonable thing to do, I can update it, polish it up,
add a changelog, and post it.

Index: work-mm2/drivers/serial/8250_x86.c
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ work-mm2/drivers/serial/8250_x86.c	2006-08-22 16:47:02.000000000 -0600
@@ -0,0 +1,67 @@
+/*
+ * Legacy COM port devices for x86 platforms without PNPBIOS or ACPI.
+ * Data taken from include/asm-i386/serial.h.
+ *
+ * (c) Copyright 2006 Hewlett-Packard Development Company, L.P.
+ *	Bjorn Helgaas <bjorn.helgaas@hp.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/pnp.h>
+#include <linux/serial_8250.h>
+
+/* Standard COM flags (except for COM4, because of the 8514 problem) */
+#ifdef CONFIG_SERIAL_DETECT_IRQ
+#define COM_FLAGS (UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_AUTO_IRQ)
+#define COM4_FLAGS (UPF_BOOT_AUTOCONF | UPF_AUTO_IRQ)
+#else
+#define COM_FLAGS (UPF_BOOT_AUTOCONF | UPF_SKIP_TEST)
+#define COM4_FLAGS UPF_BOOT_AUTOCONF
+#endif
+
+#define PORT(_base,_irq,_flags)				\
+	{						\
+		.iobase		= _base,		\
+		.irq		= _irq,			\
+		.uartclk	= 1843200,		\
+		.iotype		= UPIO_PORT,		\
+		.flags		= _flags,		\
+	}
+
+static struct plat_serial8250_port x86_com_data[] = {
+	PORT(0x3F8, 4, COM_FLAGS),
+	PORT(0x2F8, 3, COM_FLAGS),
+	PORT(0x3E8, 4, COM_FLAGS),
+	PORT(0x2E8, 3, COM4_FLAGS),
+	{ },
+};
+
+static struct platform_device x86_com_device = {
+	.name			= "serial8250",
+	.id			= PLAT8250_DEV_X86,
+	.dev			= {
+		.platform_data	= x86_com_data,
+	},
+};
+
+static int __init serial8250_x86_com_init(void)
+{
+#ifdef CONFIG_SERIAL_8250_PNP
+	extern int serial8250_nopnp;
+
+	if (pnp_platform_devices && !serial8250_nopnp)
+		return 0;
+#endif
+
+	return platform_device_register(&x86_com_device);
+}
+
+module_init(serial8250_x86_com_init);
+
+MODULE_AUTHOR("Bjorn Helgaas");
+MODULE_LICENSE("GPL");
+MODULE_DESCRIPTION("Generic 8250/16x50 legacy probe module");
Index: work-mm2/drivers/serial/Makefile
===================================================================
--- work-mm2.orig/drivers/serial/Makefile	2006-08-22 12:26:25.000000000 -0600
+++ work-mm2/drivers/serial/Makefile	2006-08-22 16:37:36.000000000 -0600
@@ -7,6 +7,7 @@
 obj-$(CONFIG_SERIAL_CORE) += serial_core.o
 obj-$(CONFIG_SERIAL_21285) += 21285.o
 obj-$(CONFIG_SERIAL_8250) += 8250.o
+obj-$(CONFIG_SERIAL_8250_X86) += 8250_x86.o
 obj-$(CONFIG_SERIAL_8250_PNP) += 8250_pnp.o
 obj-$(CONFIG_SERIAL_8250_GSC) += 8250_gsc.o
 obj-$(CONFIG_SERIAL_8250_PCI) += 8250_pci.o
Index: work-mm2/include/linux/serial_8250.h
===================================================================
--- work-mm2.orig/include/linux/serial_8250.h	2006-08-22 12:26:25.000000000 -0600
+++ work-mm2/include/linux/serial_8250.h	2006-08-22 16:37:36.000000000 -0600
@@ -44,6 +44,7 @@
 	PLAT8250_DEV_HUB6,
 	PLAT8250_DEV_MCA,
 	PLAT8250_DEV_AU1X00,
+	PLAT8250_DEV_X86,
 };
 
 /*
Index: work-mm2/include/asm-i386/serial.h
===================================================================
--- work-mm2.orig/include/asm-i386/serial.h	2006-08-22 12:26:25.000000000 -0600
+++ work-mm2/include/asm-i386/serial.h	2006-08-22 16:37:36.000000000 -0600
@@ -11,19 +11,3 @@
  * megabits/second; but this requires the faster clock.
  */
 #define BASE_BAUD ( 1843200 / 16 )
-
-/* Standard COM flags (except for COM4, because of the 8514 problem) */
-#ifdef CONFIG_SERIAL_DETECT_IRQ
-#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST | ASYNC_AUTO_IRQ)
-#define STD_COM4_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_AUTO_IRQ)
-#else
-#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST)
-#define STD_COM4_FLAGS ASYNC_BOOT_AUTOCONF
-#endif
-
-#define SERIAL_PORT_DFNS			\
-	/* UART CLK   PORT IRQ     FLAGS        */			\
-	{ 0, BASE_BAUD, 0x3F8, 4, STD_COM_FLAGS },	/* ttyS0 */	\
-	{ 0, BASE_BAUD, 0x2F8, 3, STD_COM_FLAGS },	/* ttyS1 */	\
-	{ 0, BASE_BAUD, 0x3E8, 4, STD_COM_FLAGS },	/* ttyS2 */	\
-	{ 0, BASE_BAUD, 0x2E8, 3, STD_COM4_FLAGS },	/* ttyS3 */
Index: work-mm2/drivers/serial/Kconfig
===================================================================
--- work-mm2.orig/drivers/serial/Kconfig	2006-08-22 12:26:25.000000000 -0600
+++ work-mm2/drivers/serial/Kconfig	2006-08-22 16:37:36.000000000 -0600
@@ -63,6 +63,22 @@
 
 	  If unsure, say N.
 
+config SERIAL_8250_X86
+	tristate "8250/16550 legacy COM port support" if EMBEDDED
+	depends on SERIAL_8250 && X86
+	default SERIAL_8250
+	help
+	  Say Y here if you have legacy COM ports and PNP is disabled
+	  or not available.
+
+	  This driver is for the legacy COM1, COM2, COM3, and COM4 ports at
+	  I/O ports 0x3f8, 0x2f8, 0x3e8, and 0x2e8.  On machines newer than
+	  1995 or so, these ports are described by PNPBIOS or ACPI, and
+	  8250_pnp should be used instead of this driver.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called 8250_x86.
+
 config SERIAL_8250_GSC
 	tristate
 	depends on SERIAL_8250 && GSC
@@ -73,17 +89,21 @@
 	depends on SERIAL_8250 && PCI
 	default SERIAL_8250
 	help
-	  This builds standard PCI serial support. You may be able to
-	  disable this feature if you only need legacy serial support.
-	  Saves about 9K.
+	  Say Y here if you have PCI serial ports.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called 8250_pci.
 
 config SERIAL_8250_PNP
 	tristate "8250/16550 PNP device support" if EMBEDDED
 	depends on SERIAL_8250 && PNP
 	default SERIAL_8250
 	help
-	  This builds standard PNP serial support. You may be able to
-	  disable this feature if you only need legacy serial support.
+	  Say Y here if you have serial ports described by PNPBIOS or ACPI.
+	  These are typically ports built into the system board.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called 8250_pnp.
 
 config SERIAL_8250_HP300
 	tristate
Index: work-mm2/include/asm-x86_64/serial.h
===================================================================
--- work-mm2.orig/include/asm-x86_64/serial.h	2006-08-22 12:26:25.000000000 -0600
+++ work-mm2/include/asm-x86_64/serial.h	2006-08-22 16:37:36.000000000 -0600
@@ -11,19 +11,3 @@
  * megabits/second; but this requires the faster clock.
  */
 #define BASE_BAUD ( 1843200 / 16 )
-
-/* Standard COM flags (except for COM4, because of the 8514 problem) */
-#ifdef CONFIG_SERIAL_DETECT_IRQ
-#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST | ASYNC_AUTO_IRQ)
-#define STD_COM4_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_AUTO_IRQ)
-#else
-#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST)
-#define STD_COM4_FLAGS ASYNC_BOOT_AUTOCONF
-#endif
-
-#define SERIAL_PORT_DFNS			\
-	/* UART CLK   PORT IRQ     FLAGS        */			\
-	{ 0, BASE_BAUD, 0x3F8, 4, STD_COM_FLAGS },	/* ttyS0 */	\
-	{ 0, BASE_BAUD, 0x2F8, 3, STD_COM_FLAGS },	/* ttyS1 */	\
-	{ 0, BASE_BAUD, 0x3E8, 4, STD_COM_FLAGS },	/* ttyS2 */	\
-	{ 0, BASE_BAUD, 0x2E8, 3, STD_COM4_FLAGS },	/* ttyS3 */
Index: work-mm2/drivers/serial/8250_pnp.c
===================================================================
--- work-mm2.orig/drivers/serial/8250_pnp.c	2006-08-22 12:26:25.000000000 -0600
+++ work-mm2/drivers/serial/8250_pnp.c	2006-08-22 16:49:47.000000000 -0600
@@ -458,8 +458,17 @@
 	.remove		= __devexit_p(serial_pnp_remove),
 };
 
+int serial8250_nopnp;
+module_param_named(nopnp, serial8250_nopnp, bool, 0);
+MODULE_PARM_DESC(nopnp, "Do not use PNP to detect serial ports");
+
 static int __init serial8250_pnp_init(void)
 {
+	if (serial8250_nopnp) {
+		printk("skipping 8250_pnp registration\n");
+		return 0;
+	}
+
 	return pnp_register_driver(&serial_pnp_driver);
 }
 

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: PNPACPI probes serial twice, messes up serial console
  2007-03-20 14:32 ` Bjorn Helgaas
@ 2007-03-20 15:14   ` Russell King
  2007-03-21 16:35   ` Bjorn Helgaas
  1 sibling, 0 replies; 11+ messages in thread
From: Russell King @ 2007-03-20 15:14 UTC (permalink / raw)
  To: Bjorn Helgaas; +Cc: Keith Owens, linux-kernel, len.brown, Andrew Morton

On Tue, Mar 20, 2007 at 08:32:24AM -0600, Bjorn Helgaas wrote:
> Index: work-mm2/include/linux/serial_8250.h
> ===================================================================
> --- work-mm2.orig/include/linux/serial_8250.h	2006-08-22 12:26:25.000000000 -0600
> +++ work-mm2/include/linux/serial_8250.h	2006-08-22 16:37:36.000000000 -0600
> @@ -44,6 +44,7 @@
>  	PLAT8250_DEV_HUB6,
>  	PLAT8250_DEV_MCA,
>  	PLAT8250_DEV_AU1X00,
> +	PLAT8250_DEV_X86,

There's no need for PLAT8250_DEV_X86 if x86 went to the model that ARM
and all the others which I did convert use - iow, PLAT8250_DEV_PLATFORM
and friends.

They're there so that the arch/* code can provide their serial port
information to the 8250 driver instead of using include/asm-*/serial.h

-- 
Russell King
 Linux kernel    2.6 ARM Linux   - http://www.arm.linux.org.uk/
 maintainer of:

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: PNPACPI probes serial twice, messes up serial console
  2007-03-20 14:32 ` Bjorn Helgaas
  2007-03-20 15:14   ` Russell King
@ 2007-03-21 16:35   ` Bjorn Helgaas
  2007-03-21 16:37     ` Russell King
  2007-03-22  4:23     ` Keith Owens
  1 sibling, 2 replies; 11+ messages in thread
From: Bjorn Helgaas @ 2007-03-21 16:35 UTC (permalink / raw)
  To: Keith Owens; +Cc: linux-kernel, len.brown, Andrew Morton, Russell King

On Tuesday 20 March 2007 08:32, Bjorn Helgaas wrote:
> On Tuesday 20 March 2007 00:46, Keith Owens wrote:
> > Booting with 'console=tty console=ttyS0,9600'.  The serial console on
> > ttyS0 (0x3f8, irq 4) is probed twice, once from serial8250_init() and
> > again from serial_pnp_probe().
> 
> I played with this last summer, but was too timid to finish it
> and post it.  My plan was to remove the legacy SERIAL_PORT_DFNS,
> make platform devices for them, and only register the platform
> devices in the absence of PNP.
> 
> My motivation at the time was to prevent 8250 from claiming IRDA
> devices that happened to live at legacy UART addresses.  I also
> wanted to make IRDA (smsc-ircc2 in my case) smart enough to use
> PNP to locate its devices, since 8250 would no longer claim them.
> 
> Here's the dusty patch (against 2.6.18-rc1-mm2).  If it seems
> like a reasonable thing to do, I can update it, polish it up,
> add a changelog, and post it.

Keith, does this patch help?  Russell didn't complain about it, so
if it fixes your problem, maybe we could put it in -mm and see if
it breaks anything else.

Bjorn

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: PNPACPI probes serial twice, messes up serial console
  2007-03-21 16:35   ` Bjorn Helgaas
@ 2007-03-21 16:37     ` Russell King
  2007-03-21 16:40       ` Bjorn Helgaas
  2007-03-22  4:23     ` Keith Owens
  1 sibling, 1 reply; 11+ messages in thread
From: Russell King @ 2007-03-21 16:37 UTC (permalink / raw)
  To: Bjorn Helgaas; +Cc: Keith Owens, linux-kernel, len.brown, Andrew Morton

On Wed, Mar 21, 2007 at 10:35:38AM -0600, Bjorn Helgaas wrote:
> On Tuesday 20 March 2007 08:32, Bjorn Helgaas wrote:
> > On Tuesday 20 March 2007 00:46, Keith Owens wrote:
> > > Booting with 'console=tty console=ttyS0,9600'.  The serial console on
> > > ttyS0 (0x3f8, irq 4) is probed twice, once from serial8250_init() and
> > > again from serial_pnp_probe().
> > 
> > I played with this last summer, but was too timid to finish it
> > and post it.  My plan was to remove the legacy SERIAL_PORT_DFNS,
> > make platform devices for them, and only register the platform
> > devices in the absence of PNP.
> > 
> > My motivation at the time was to prevent 8250 from claiming IRDA
> > devices that happened to live at legacy UART addresses.  I also
> > wanted to make IRDA (smsc-ircc2 in my case) smart enough to use
> > PNP to locate its devices, since 8250 would no longer claim them.
> > 
> > Here's the dusty patch (against 2.6.18-rc1-mm2).  If it seems
> > like a reasonable thing to do, I can update it, polish it up,
> > add a changelog, and post it.
> 
> Keith, does this patch help?  Russell didn't complain about it, so
> if it fixes your problem, maybe we could put it in -mm and see if
> it breaks anything else.

Yes I did.

-- 
Russell King
 Linux kernel    2.6 ARM Linux   - http://www.arm.linux.org.uk/
 maintainer of:

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: PNPACPI probes serial twice, messes up serial console
  2007-03-21 16:37     ` Russell King
@ 2007-03-21 16:40       ` Bjorn Helgaas
  2007-03-24 10:06         ` Russell King
  0 siblings, 1 reply; 11+ messages in thread
From: Bjorn Helgaas @ 2007-03-21 16:40 UTC (permalink / raw)
  To: Russell King; +Cc: Keith Owens, linux-kernel, len.brown, Andrew Morton

On Wednesday 21 March 2007 10:37, Russell King wrote:
> On Wed, Mar 21, 2007 at 10:35:38AM -0600, Bjorn Helgaas wrote:
> > On Tuesday 20 March 2007 08:32, Bjorn Helgaas wrote:
> > > On Tuesday 20 March 2007 00:46, Keith Owens wrote:
> > > > Booting with 'console=tty console=ttyS0,9600'.  The serial console on
> > > > ttyS0 (0x3f8, irq 4) is probed twice, once from serial8250_init() and
> > > > again from serial_pnp_probe().
> > > 
> > > I played with this last summer, but was too timid to finish it
> > > and post it.  My plan was to remove the legacy SERIAL_PORT_DFNS,
> > > make platform devices for them, and only register the platform
> > > devices in the absence of PNP.
> > > 
> > > My motivation at the time was to prevent 8250 from claiming IRDA
> > > devices that happened to live at legacy UART addresses.  I also
> > > wanted to make IRDA (smsc-ircc2 in my case) smart enough to use
> > > PNP to locate its devices, since 8250 would no longer claim them.
> > > 
> > > Here's the dusty patch (against 2.6.18-rc1-mm2).  If it seems
> > > like a reasonable thing to do, I can update it, polish it up,
> > > add a changelog, and post it.
> > 
> > Keith, does this patch help?  Russell didn't complain about it, so
> > if it fixes your problem, maybe we could put it in -mm and see if
> > it breaks anything else.
> 
> Yes I did.

Sorry.  What I should have said was "Russell gave constructive
feedback for a minor improvement, but didn't complain about the
overall approach of converting to platform devices, so if the
patch solves your (Keith's) problem, I'll incorporate Russell's
feedback and send an updated patch to Andrew."

Bjorn

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: PNPACPI probes serial twice, messes up serial console 
  2007-03-21 16:35   ` Bjorn Helgaas
  2007-03-21 16:37     ` Russell King
@ 2007-03-22  4:23     ` Keith Owens
  2007-03-22  5:08       ` Bjorn Helgaas
  2007-04-06 16:25       ` Bjorn Helgaas
  1 sibling, 2 replies; 11+ messages in thread
From: Keith Owens @ 2007-03-22  4:23 UTC (permalink / raw)
  To: Bjorn Helgaas; +Cc: linux-kernel, len.brown, Andrew Morton, Russell King

Bjorn Helgaas (on Wed, 21 Mar 2007 10:35:38 -0600) wrote:
>On Tuesday 20 March 2007 08:32, Bjorn Helgaas wrote:
>> On Tuesday 20 March 2007 00:46, Keith Owens wrote:
>> > Booting with 'console=tty console=ttyS0,9600'.  The serial console on
>> > ttyS0 (0x3f8, irq 4) is probed twice, once from serial8250_init() and
>> > again from serial_pnp_probe().
>> 
>> I played with this last summer, but was too timid to finish it
>> and post it.  My plan was to remove the legacy SERIAL_PORT_DFNS,
>> make platform devices for them, and only register the platform
>> devices in the absence of PNP.
>> 
>> My motivation at the time was to prevent 8250 from claiming IRDA
>> devices that happened to live at legacy UART addresses.  I also
>> wanted to make IRDA (smsc-ircc2 in my case) smart enough to use
>> PNP to locate its devices, since 8250 would no longer claim them.
>> 
>> Here's the dusty patch (against 2.6.18-rc1-mm2).  If it seems
>> like a reasonable thing to do, I can update it, polish it up,
>> add a changelog, and post it.
>
>Keith, does this patch help?  Russell didn't complain about it, so
>if it fixes your problem, maybe we could put it in -mm and see if
>it breaks anything else.

The aim of the patch looks sensible, but it will not compile for
2.6.21-rc4.  8250_x86.c tests pnp_platform_devices, which does not
exist.  Also the combination of CONFIG_SERIAL_8250_X86=y and
CONFIG_SERIAL_8250_PNP=m would result in 8250_x86.o being built into
vmlinux but referring to serial8250_nopnp in module 8250_pnp.o, kernel
to module references are tricky.


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: PNPACPI probes serial twice, messes up serial console
  2007-03-22  4:23     ` Keith Owens
@ 2007-03-22  5:08       ` Bjorn Helgaas
  2007-04-06 16:25       ` Bjorn Helgaas
  1 sibling, 0 replies; 11+ messages in thread
From: Bjorn Helgaas @ 2007-03-22  5:08 UTC (permalink / raw)
  To: Keith Owens; +Cc: linux-kernel, len.brown, Andrew Morton, Russell King

On Wednesday 21 March 2007 22:23, Keith Owens wrote:
> The aim of the patch looks sensible, but it will not compile for
> 2.6.21-rc4.  8250_x86.c tests pnp_platform_devices, which does not
> exist.  Also the combination of CONFIG_SERIAL_8250_X86=y and
> CONFIG_SERIAL_8250_PNP=m would result in 8250_x86.o being built into
> vmlinux but referring to serial8250_nopnp in module 8250_pnp.o, kernel
> to module references are tricky.

OK, I'll rework it and update it.  It will probably take me
a couple weeks though.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: PNPACPI probes serial twice, messes up serial console
  2007-03-21 16:40       ` Bjorn Helgaas
@ 2007-03-24 10:06         ` Russell King
  0 siblings, 0 replies; 11+ messages in thread
From: Russell King @ 2007-03-24 10:06 UTC (permalink / raw)
  To: Bjorn Helgaas; +Cc: Keith Owens, linux-kernel, len.brown, Andrew Morton

On Wed, Mar 21, 2007 at 10:40:54AM -0600, Bjorn Helgaas wrote:
> On Wednesday 21 March 2007 10:37, Russell King wrote:
> > On Wed, Mar 21, 2007 at 10:35:38AM -0600, Bjorn Helgaas wrote:
> > > On Tuesday 20 March 2007 08:32, Bjorn Helgaas wrote:
> > > > On Tuesday 20 March 2007 00:46, Keith Owens wrote:
> > > > > Booting with 'console=tty console=ttyS0,9600'.  The serial console on
> > > > > ttyS0 (0x3f8, irq 4) is probed twice, once from serial8250_init() and
> > > > > again from serial_pnp_probe().
> > > > 
> > > > I played with this last summer, but was too timid to finish it
> > > > and post it.  My plan was to remove the legacy SERIAL_PORT_DFNS,
> > > > make platform devices for them, and only register the platform
> > > > devices in the absence of PNP.
> > > > 
> > > > My motivation at the time was to prevent 8250 from claiming IRDA
> > > > devices that happened to live at legacy UART addresses.  I also
> > > > wanted to make IRDA (smsc-ircc2 in my case) smart enough to use
> > > > PNP to locate its devices, since 8250 would no longer claim them.
> > > > 
> > > > Here's the dusty patch (against 2.6.18-rc1-mm2).  If it seems
> > > > like a reasonable thing to do, I can update it, polish it up,
> > > > add a changelog, and post it.
> > > 
> > > Keith, does this patch help?  Russell didn't complain about it, so
> > > if it fixes your problem, maybe we could put it in -mm and see if
> > > it breaks anything else.
> > 
> > Yes I did.
> 
> Sorry.  What I should have said was "Russell gave constructive
> feedback for a minor improvement, but didn't complain about the
> overall approach of converting to platform devices, so if the
> patch solves your (Keith's) problem, I'll incorporate Russell's
> feedback and send an updated patch to Andrew."

I did also point out that the autoconfig should be transparent, and if
it isn't there's probably a bug in there somewhere.

So I partly view this patch as a papering over of the real problem, but
for other reasons it's more or less the right direction for stuff to go.
Except that the x86 definitions should be in arch/i386 rather than
drivers/serial, like the other architectures which have been converted
to this model already do.

-- 
Russell King
 Linux kernel    2.6 ARM Linux   - http://www.arm.linux.org.uk/
 maintainer of:

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: PNPACPI probes serial twice, messes up serial console
  2007-03-22  4:23     ` Keith Owens
  2007-03-22  5:08       ` Bjorn Helgaas
@ 2007-04-06 16:25       ` Bjorn Helgaas
  1 sibling, 0 replies; 11+ messages in thread
From: Bjorn Helgaas @ 2007-04-06 16:25 UTC (permalink / raw)
  To: Keith Owens; +Cc: linux-kernel, len.brown, Andrew Morton, Russell King

On Wednesday 21 March 2007 22:23, Keith Owens wrote:
> The aim of the patch looks sensible, but it will not compile for
> 2.6.21-rc4.  8250_x86.c tests pnp_platform_devices, which does not
> exist.  Also the combination of CONFIG_SERIAL_8250_X86=y and
> CONFIG_SERIAL_8250_PNP=m would result in 8250_x86.o being built into
> vmlinux but referring to serial8250_nopnp in module 8250_pnp.o, kernel
> to module references are tricky.

I posted an updated series of patches a couple days ago:
  http://lkml.org/lkml/2007/4/4/540

Let me know whether they work for you.

Bjorn

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2007-04-06 16:25 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-03-20  6:46 PNPACPI probes serial twice, messes up serial console Keith Owens
2007-03-20  8:51 ` Russell King
2007-03-20 14:32 ` Bjorn Helgaas
2007-03-20 15:14   ` Russell King
2007-03-21 16:35   ` Bjorn Helgaas
2007-03-21 16:37     ` Russell King
2007-03-21 16:40       ` Bjorn Helgaas
2007-03-24 10:06         ` Russell King
2007-03-22  4:23     ` Keith Owens
2007-03-22  5:08       ` Bjorn Helgaas
2007-04-06 16:25       ` Bjorn Helgaas

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).