Commit 8e5423e9 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'parisc-for-6.1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux

Pull parisc architecture fixes from Helge Deller:
 "This mostly handles oddities with the serial port 8250_gsc.c driver.

  Although the name suggests it's just for serial ports on the GSC bus
  (e.g. in older PA-RISC machines), it handles serial ports on PA-RISC
  PCI devices (e.g. on the SuperIO chip) as well.

  Thus this renames the driver to 8250_parisc and fixes the config
  dependencies.

  The other change is a cleanup on how the device IDs of devices in a
  PA-RISC machine are shown at startup"

* tag 'parisc-for-6.1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux:
  parisc: Avoid printing the hardware path twice
  parisc: Export iosapic_serial_irq() symbol for serial port driver
  MAINTAINERS: adjust entry after renaming parisc serial driver
  parisc: Use signed char for hardware path in pdc.h
  parisc/serial: Rename 8250_gsc.c to 8250_parisc.c
  parisc: Make 8250_gsc driver dependend on CONFIG_PARISC
parents 31fc92fc 2b6ae096
...@@ -15630,7 +15630,7 @@ F: drivers/input/serio/gscps2.c ...@@ -15630,7 +15630,7 @@ F: drivers/input/serio/gscps2.c
F: drivers/input/serio/hp_sdc* F: drivers/input/serio/hp_sdc*
F: drivers/parisc/ F: drivers/parisc/
F: drivers/parport/parport_gsc.* F: drivers/parport/parport_gsc.*
F: drivers/tty/serial/8250/8250_gsc.c F: drivers/tty/serial/8250/8250_parisc.c
F: drivers/video/console/sti* F: drivers/video/console/sti*
F: drivers/video/fbdev/sti* F: drivers/video/fbdev/sti*
F: drivers/video/logo/logo_parisc* F: drivers/video/logo/logo_parisc*
......
...@@ -10,12 +10,12 @@ ...@@ -10,12 +10,12 @@
#define SVERSION_ANY_ID PA_SVERSION_ANY_ID #define SVERSION_ANY_ID PA_SVERSION_ANY_ID
struct hp_hardware { struct hp_hardware {
unsigned short hw_type:5; /* HPHW_xxx */ unsigned int hw_type:8; /* HPHW_xxx */
unsigned short hversion; unsigned int hversion:12;
unsigned long sversion:28; unsigned int sversion:12;
unsigned short opt; unsigned char opt;
const char name[80]; /* The hardware description */ unsigned char name[59]; /* The hardware description */
}; } __packed;
struct parisc_device; struct parisc_device;
......
...@@ -363,20 +363,25 @@ ...@@ -363,20 +363,25 @@
#if !defined(__ASSEMBLY__) #if !defined(__ASSEMBLY__)
/* flags of the device_path */ /* flags for hardware_path */
#define PF_AUTOBOOT 0x80 #define PF_AUTOBOOT 0x80
#define PF_AUTOSEARCH 0x40 #define PF_AUTOSEARCH 0x40
#define PF_TIMER 0x0F #define PF_TIMER 0x0F
struct device_path { /* page 1-69 */ struct hardware_path {
unsigned char flags; /* flags see above! */ unsigned char flags; /* see bit definitions below */
unsigned char bc[6]; /* bus converter routing info */ signed char bc[6]; /* Bus Converter routing info to a specific */
unsigned char mod; /* I/O adaptor (< 0 means none, > 63 resvd) */
unsigned int layers[6];/* device-specific layer-info */ signed char mod; /* fixed field of specified module */
} __attribute__((aligned(8))) ; };
struct pdc_module_path { /* page 1-69 */
struct hardware_path path;
unsigned int layers[6]; /* device-specific info (ctlr #, unit # ...) */
} __attribute__((aligned(8)));
struct pz_device { struct pz_device {
struct device_path dp; /* see above */ struct pdc_module_path dp; /* see above */
/* struct iomod *hpa; */ /* struct iomod *hpa; */
unsigned int hpa; /* HPA base address */ unsigned int hpa; /* HPA base address */
/* char *spa; */ /* char *spa; */
...@@ -611,21 +616,6 @@ struct pdc_initiator { /* PDC_INITIATOR */ ...@@ -611,21 +616,6 @@ struct pdc_initiator { /* PDC_INITIATOR */
int mode; int mode;
}; };
struct hardware_path {
char flags; /* see bit definitions below */
char bc[6]; /* Bus Converter routing info to a specific */
/* I/O adaptor (< 0 means none, > 63 resvd) */
char mod; /* fixed field of specified module */
};
/*
* Device path specifications used by PDC.
*/
struct pdc_module_path {
struct hardware_path path;
unsigned int layers[6]; /* device-specific info (ctlr #, unit # ...) */
};
/* Only used on some pre-PA2.0 boxes */ /* Only used on some pre-PA2.0 boxes */
struct pdc_memory_map { /* PDC_MEMORY_MAP */ struct pdc_memory_map { /* PDC_MEMORY_MAP */
unsigned long hpa; /* mod's register set address */ unsigned long hpa; /* mod's register set address */
......
...@@ -882,15 +882,13 @@ void __init walk_central_bus(void) ...@@ -882,15 +882,13 @@ void __init walk_central_bus(void)
&root); &root);
} }
static void print_parisc_device(struct parisc_device *dev) static __init void print_parisc_device(struct parisc_device *dev)
{ {
char hw_path[64]; static int count __initdata;
static int count;
print_pa_hwpath(dev, hw_path); pr_info("%d. %s at %pap { type:%d, hv:%#x, sv:%#x, rev:%#x }",
pr_info("%d. %s at %pap [%s] { %d, 0x%x, 0x%.3x, 0x%.5x }", ++count, dev->name, &(dev->hpa.start), dev->id.hw_type,
++count, dev->name, &(dev->hpa.start), hw_path, dev->id.hw_type, dev->id.hversion, dev->id.sversion, dev->id.hversion_rev);
dev->id.hversion_rev, dev->id.hversion, dev->id.sversion);
if (dev->num_addrs) { if (dev->num_addrs) {
int k; int k;
...@@ -1079,7 +1077,7 @@ static __init int qemu_print_iodc_data(struct device *lin_dev, void *data) ...@@ -1079,7 +1077,7 @@ static __init int qemu_print_iodc_data(struct device *lin_dev, void *data)
static int print_one_device(struct device * dev, void * data) static __init int print_one_device(struct device * dev, void * data)
{ {
struct parisc_device * pdev = to_parisc_device(dev); struct parisc_device * pdev = to_parisc_device(dev);
......
...@@ -866,6 +866,7 @@ int iosapic_serial_irq(struct parisc_device *dev) ...@@ -866,6 +866,7 @@ int iosapic_serial_irq(struct parisc_device *dev)
return vi->txn_irq; return vi->txn_irq;
} }
EXPORT_SYMBOL(iosapic_serial_irq);
#endif #endif
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
* all) PA-RISC machines should have them. Anyway, for safety reasons, the * all) PA-RISC machines should have them. Anyway, for safety reasons, the
* following code can deal with just 96 bytes of Stable Storage, and all * following code can deal with just 96 bytes of Stable Storage, and all
* sizes between 96 and 192 bytes (provided they are multiple of struct * sizes between 96 and 192 bytes (provided they are multiple of struct
* device_path size, eg: 128, 160 and 192) to provide full information. * pdc_module_path size, eg: 128, 160 and 192) to provide full information.
* One last word: there's one path we can always count on: the primary path. * One last word: there's one path we can always count on: the primary path.
* Anything above 224 bytes is used for 'osdep2' OS-dependent storage area. * Anything above 224 bytes is used for 'osdep2' OS-dependent storage area.
* *
...@@ -88,7 +88,7 @@ struct pdcspath_entry { ...@@ -88,7 +88,7 @@ struct pdcspath_entry {
short ready; /* entry record is valid if != 0 */ short ready; /* entry record is valid if != 0 */
unsigned long addr; /* entry address in stable storage */ unsigned long addr; /* entry address in stable storage */
char *name; /* entry name */ char *name; /* entry name */
struct device_path devpath; /* device path in parisc representation */ struct pdc_module_path devpath; /* device path in parisc representation */
struct device *dev; /* corresponding device */ struct device *dev; /* corresponding device */
struct kobject kobj; struct kobject kobj;
}; };
...@@ -138,7 +138,7 @@ struct pdcspath_attribute paths_attr_##_name = { \ ...@@ -138,7 +138,7 @@ struct pdcspath_attribute paths_attr_##_name = { \
static int static int
pdcspath_fetch(struct pdcspath_entry *entry) pdcspath_fetch(struct pdcspath_entry *entry)
{ {
struct device_path *devpath; struct pdc_module_path *devpath;
if (!entry) if (!entry)
return -EINVAL; return -EINVAL;
...@@ -153,7 +153,7 @@ pdcspath_fetch(struct pdcspath_entry *entry) ...@@ -153,7 +153,7 @@ pdcspath_fetch(struct pdcspath_entry *entry)
return -EIO; return -EIO;
/* Find the matching device. /* Find the matching device.
NOTE: hardware_path overlays with device_path, so the nice cast can NOTE: hardware_path overlays with pdc_module_path, so the nice cast can
be used */ be used */
entry->dev = hwpath_to_device((struct hardware_path *)devpath); entry->dev = hwpath_to_device((struct hardware_path *)devpath);
...@@ -179,7 +179,7 @@ pdcspath_fetch(struct pdcspath_entry *entry) ...@@ -179,7 +179,7 @@ pdcspath_fetch(struct pdcspath_entry *entry)
static void static void
pdcspath_store(struct pdcspath_entry *entry) pdcspath_store(struct pdcspath_entry *entry)
{ {
struct device_path *devpath; struct pdc_module_path *devpath;
BUG_ON(!entry); BUG_ON(!entry);
...@@ -221,7 +221,7 @@ static ssize_t ...@@ -221,7 +221,7 @@ static ssize_t
pdcspath_hwpath_read(struct pdcspath_entry *entry, char *buf) pdcspath_hwpath_read(struct pdcspath_entry *entry, char *buf)
{ {
char *out = buf; char *out = buf;
struct device_path *devpath; struct pdc_module_path *devpath;
short i; short i;
if (!entry || !buf) if (!entry || !buf)
...@@ -236,11 +236,11 @@ pdcspath_hwpath_read(struct pdcspath_entry *entry, char *buf) ...@@ -236,11 +236,11 @@ pdcspath_hwpath_read(struct pdcspath_entry *entry, char *buf)
return -ENODATA; return -ENODATA;
for (i = 0; i < 6; i++) { for (i = 0; i < 6; i++) {
if (devpath->bc[i] >= 128) if (devpath->path.bc[i] < 0)
continue; continue;
out += sprintf(out, "%u/", (unsigned char)devpath->bc[i]); out += sprintf(out, "%d/", devpath->path.bc[i]);
} }
out += sprintf(out, "%u\n", (unsigned char)devpath->mod); out += sprintf(out, "%u\n", (unsigned char)devpath->path.mod);
return out - buf; return out - buf;
} }
...@@ -296,12 +296,12 @@ pdcspath_hwpath_write(struct pdcspath_entry *entry, const char *buf, size_t coun ...@@ -296,12 +296,12 @@ pdcspath_hwpath_write(struct pdcspath_entry *entry, const char *buf, size_t coun
for (i=5; ((temp = strrchr(in, '/'))) && (temp-in > 0) && (likely(i)); i--) { for (i=5; ((temp = strrchr(in, '/'))) && (temp-in > 0) && (likely(i)); i--) {
hwpath.bc[i] = simple_strtoul(temp+1, NULL, 10); hwpath.bc[i] = simple_strtoul(temp+1, NULL, 10);
in[temp-in] = '\0'; in[temp-in] = '\0';
DPRINTK("%s: bc[%d]: %d\n", __func__, i, hwpath.bc[i]); DPRINTK("%s: bc[%d]: %d\n", __func__, i, hwpath.path.bc[i]);
} }
/* Store the final field */ /* Store the final field */
hwpath.bc[i] = simple_strtoul(in, NULL, 10); hwpath.bc[i] = simple_strtoul(in, NULL, 10);
DPRINTK("%s: bc[%d]: %d\n", __func__, i, hwpath.bc[i]); DPRINTK("%s: bc[%d]: %d\n", __func__, i, hwpath.path.bc[i]);
/* Now we check that the user isn't trying to lure us */ /* Now we check that the user isn't trying to lure us */
if (!(dev = hwpath_to_device((struct hardware_path *)&hwpath))) { if (!(dev = hwpath_to_device((struct hardware_path *)&hwpath))) {
...@@ -342,7 +342,7 @@ static ssize_t ...@@ -342,7 +342,7 @@ static ssize_t
pdcspath_layer_read(struct pdcspath_entry *entry, char *buf) pdcspath_layer_read(struct pdcspath_entry *entry, char *buf)
{ {
char *out = buf; char *out = buf;
struct device_path *devpath; struct pdc_module_path *devpath;
short i; short i;
if (!entry || !buf) if (!entry || !buf)
...@@ -547,7 +547,7 @@ static ssize_t pdcs_auto_read(struct kobject *kobj, ...@@ -547,7 +547,7 @@ static ssize_t pdcs_auto_read(struct kobject *kobj,
pathentry = &pdcspath_entry_primary; pathentry = &pdcspath_entry_primary;
read_lock(&pathentry->rw_lock); read_lock(&pathentry->rw_lock);
out += sprintf(out, "%s\n", (pathentry->devpath.flags & knob) ? out += sprintf(out, "%s\n", (pathentry->devpath.path.flags & knob) ?
"On" : "Off"); "On" : "Off");
read_unlock(&pathentry->rw_lock); read_unlock(&pathentry->rw_lock);
...@@ -594,8 +594,8 @@ static ssize_t pdcs_timer_read(struct kobject *kobj, ...@@ -594,8 +594,8 @@ static ssize_t pdcs_timer_read(struct kobject *kobj,
/* print the timer value in seconds */ /* print the timer value in seconds */
read_lock(&pathentry->rw_lock); read_lock(&pathentry->rw_lock);
out += sprintf(out, "%u\n", (pathentry->devpath.flags & PF_TIMER) ? out += sprintf(out, "%u\n", (pathentry->devpath.path.flags & PF_TIMER) ?
(1 << (pathentry->devpath.flags & PF_TIMER)) : 0); (1 << (pathentry->devpath.path.flags & PF_TIMER)) : 0);
read_unlock(&pathentry->rw_lock); read_unlock(&pathentry->rw_lock);
return out - buf; return out - buf;
...@@ -764,7 +764,7 @@ static ssize_t pdcs_auto_write(struct kobject *kobj, ...@@ -764,7 +764,7 @@ static ssize_t pdcs_auto_write(struct kobject *kobj,
/* Be nice to the existing flag record */ /* Be nice to the existing flag record */
read_lock(&pathentry->rw_lock); read_lock(&pathentry->rw_lock);
flags = pathentry->devpath.flags; flags = pathentry->devpath.path.flags;
read_unlock(&pathentry->rw_lock); read_unlock(&pathentry->rw_lock);
DPRINTK("%s: flags before: 0x%X\n", __func__, flags); DPRINTK("%s: flags before: 0x%X\n", __func__, flags);
...@@ -785,7 +785,7 @@ static ssize_t pdcs_auto_write(struct kobject *kobj, ...@@ -785,7 +785,7 @@ static ssize_t pdcs_auto_write(struct kobject *kobj,
write_lock(&pathentry->rw_lock); write_lock(&pathentry->rw_lock);
/* Change the path entry flags first */ /* Change the path entry flags first */
pathentry->devpath.flags = flags; pathentry->devpath.path.flags = flags;
/* Now, dive in. Write back to the hardware */ /* Now, dive in. Write back to the hardware */
pdcspath_store(pathentry); pdcspath_store(pathentry);
......
...@@ -116,9 +116,9 @@ config SERIAL_8250_CONSOLE ...@@ -116,9 +116,9 @@ config SERIAL_8250_CONSOLE
If unsure, say N. If unsure, say N.
config SERIAL_8250_GSC config SERIAL_8250_PARISC
tristate tristate
depends on SERIAL_8250 && GSC depends on SERIAL_8250 && PARISC
default SERIAL_8250 default SERIAL_8250
config SERIAL_8250_DMA config SERIAL_8250_DMA
......
...@@ -12,7 +12,7 @@ obj-$(CONFIG_SERIAL_8250) += 8250.o 8250_base.o ...@@ -12,7 +12,7 @@ obj-$(CONFIG_SERIAL_8250) += 8250.o 8250_base.o
8250_base-$(CONFIG_SERIAL_8250_DMA) += 8250_dma.o 8250_base-$(CONFIG_SERIAL_8250_DMA) += 8250_dma.o
8250_base-$(CONFIG_SERIAL_8250_DWLIB) += 8250_dwlib.o 8250_base-$(CONFIG_SERIAL_8250_DWLIB) += 8250_dwlib.o
8250_base-$(CONFIG_SERIAL_8250_FINTEK) += 8250_fintek.o 8250_base-$(CONFIG_SERIAL_8250_FINTEK) += 8250_fintek.o
obj-$(CONFIG_SERIAL_8250_GSC) += 8250_gsc.o obj-$(CONFIG_SERIAL_8250_PARISC) += 8250_parisc.o
obj-$(CONFIG_SERIAL_8250_PCI) += 8250_pci.o obj-$(CONFIG_SERIAL_8250_PCI) += 8250_pci.o
obj-$(CONFIG_SERIAL_8250_EXAR) += 8250_exar.o obj-$(CONFIG_SERIAL_8250_EXAR) += 8250_exar.o
obj-$(CONFIG_SERIAL_8250_HP300) += 8250_hp300.o obj-$(CONFIG_SERIAL_8250_HP300) += 8250_hp300.o
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment