Commit 0b021260 authored by Linus Torvalds's avatar Linus Torvalds

Merge bk://kernel.bkbits.net/davem/sparc-2.5

into home.osdl.org:/home/torvalds/v2.5/linux
parents 703d8dae ff97c0a4
...@@ -66,7 +66,7 @@ sparc_ramdisk_image: ...@@ -66,7 +66,7 @@ sparc_ramdisk_image:
sparc_ramdisk_size: sparc_ramdisk_size:
.word 0 .word 0
.xword reboot_command .xword reboot_command
.xword bootstr_len .xword bootstr_info
.word _end .word _end
/* We must be careful, 32-bit OpenBOOT will get confused if it /* We must be careful, 32-bit OpenBOOT will get confused if it
...@@ -740,8 +740,9 @@ swapper_pg_dir: ...@@ -740,8 +740,9 @@ swapper_pg_dir:
.data .data
.align 8 .align 8
.globl prom_tba .globl prom_tba, tlb_type
prom_tba: .xword 0 prom_tba: .xword 0
tlb_type: .word 0 /* Must NOT end up in BSS */
.section ".fixup",#alloc,#execinstr .section ".fixup",#alloc,#execinstr
.globl __ret_efault .globl __ret_efault
__ret_efault: __ret_efault:
......
...@@ -804,25 +804,20 @@ int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma, ...@@ -804,25 +804,20 @@ int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma,
/* Return the domain nuber for this pci bus */ /* Return the domain nuber for this pci bus */
int pci_domain_nr(struct pci_bus *bus) int pci_domain_nr(struct pci_bus *pbus)
{ {
struct pcidev_cookie *cookie = bus->sysdata; struct pci_pbm_info *pbm = pbus->sysdata;
int ret; int ret;
if (cookie != NULL) { if (pbm == NULL || pbm->parent == NULL) {
struct pci_pbm_info *pbm = cookie->pbm;
if (pbm == NULL || pbm->parent == NULL) {
ret = -ENXIO;
} else {
struct pci_controller_info *p = pbm->parent;
ret = p->index;
if (p->pbms_same_domain == 0)
ret = ((ret << 1) +
((pbm == &pbm->parent->pbm_B) ? 1 : 0));
}
} else {
ret = -ENXIO; ret = -ENXIO;
} else {
struct pci_controller_info *p = pbm->parent;
ret = p->index;
if (p->pbms_same_domain == 0)
ret = ((ret << 1) +
((pbm == &pbm->parent->pbm_B) ? 1 : 0));
} }
return ret; return ret;
......
...@@ -48,8 +48,6 @@ unsigned long *sparc64_valid_addr_bitmap; ...@@ -48,8 +48,6 @@ unsigned long *sparc64_valid_addr_bitmap;
unsigned long phys_base; unsigned long phys_base;
unsigned long pfn_base; unsigned long pfn_base;
enum ultra_tlb_layout tlb_type = spitfire;
/* get_new_mmu_context() uses "cache + 1". */ /* get_new_mmu_context() uses "cache + 1". */
spinlock_t ctx_alloc_lock = SPIN_LOCK_UNLOCKED; spinlock_t ctx_alloc_lock = SPIN_LOCK_UNLOCKED;
unsigned long tlb_context_cache = CTX_FIRST_VERSION - 1; unsigned long tlb_context_cache = CTX_FIRST_VERSION - 1;
......
...@@ -15,16 +15,22 @@ ...@@ -15,16 +15,22 @@
*/ */
#define BARG_LEN 256 #define BARG_LEN 256
int bootstr_len = BARG_LEN; struct {
static int bootstr_valid = 0; int bootstr_len;
static char bootstr_buf[BARG_LEN] = { 0 }; int bootstr_valid;
char bootstr_buf[BARG_LEN];
} bootstr_info = {
.bootstr_len = BARG_LEN,
};
char * __init char * __init
prom_getbootargs(void) prom_getbootargs(void)
{ {
/* This check saves us from a panic when bootfd patches args. */ /* This check saves us from a panic when bootfd patches args. */
if (bootstr_valid) return bootstr_buf; if (bootstr_info.bootstr_valid)
prom_getstring(prom_chosen_node, "bootargs", bootstr_buf, BARG_LEN); return bootstr_info.bootstr_buf;
bootstr_valid = 1; prom_getstring(prom_chosen_node, "bootargs",
return bootstr_buf; bootstr_info.bootstr_buf, BARG_LEN);
bootstr_info.bootstr_valid = 1;
return bootstr_info.bootstr_buf;
} }
...@@ -80,8 +80,8 @@ struct sunkbd { ...@@ -80,8 +80,8 @@ struct sunkbd {
char name[64]; char name[64];
char phys[32]; char phys[32];
char type; char type;
char reset; volatile char reset;
char layout; volatile char layout;
}; };
/* /*
......
...@@ -102,6 +102,7 @@ struct uart_sunsu_port { ...@@ -102,6 +102,7 @@ struct uart_sunsu_port {
int l1_down; int l1_down;
#ifdef CONFIG_SERIO #ifdef CONFIG_SERIO
struct serio serio; struct serio serio;
int serio_open;
#endif #endif
}; };
...@@ -1021,12 +1022,13 @@ static int sunsu_serio_write(struct serio *serio, unsigned char ch) ...@@ -1021,12 +1022,13 @@ static int sunsu_serio_write(struct serio *serio, unsigned char ch)
static int sunsu_serio_open(struct serio *serio) static int sunsu_serio_open(struct serio *serio)
{ {
struct uart_sunsu_port *up = serio->driver;
unsigned long flags; unsigned long flags;
int ret; int ret;
spin_lock_irqsave(&sunsu_serio_lock, flags); spin_lock_irqsave(&sunsu_serio_lock, flags);
if (serio->private == NULL) { if (!up->serio_open) {
serio->private = (void *) -1L; up->serio_open = 1;
ret = 0; ret = 0;
} else } else
ret = -EBUSY; ret = -EBUSY;
...@@ -1037,10 +1039,11 @@ static int sunsu_serio_open(struct serio *serio) ...@@ -1037,10 +1039,11 @@ static int sunsu_serio_open(struct serio *serio)
static void sunsu_serio_close(struct serio *serio) static void sunsu_serio_close(struct serio *serio)
{ {
struct uart_sunsu_port *up = serio->driver;
unsigned long flags; unsigned long flags;
spin_lock_irqsave(&sunsu_serio_lock, flags); spin_lock_irqsave(&sunsu_serio_lock, flags);
serio->private = NULL; up->serio_open = 0;
spin_unlock_irqrestore(&sunsu_serio_lock, flags); spin_unlock_irqrestore(&sunsu_serio_lock, flags);
} }
......
...@@ -112,6 +112,7 @@ struct uart_sunzilog_port { ...@@ -112,6 +112,7 @@ struct uart_sunzilog_port {
#ifdef CONFIG_SERIO #ifdef CONFIG_SERIO
struct serio serio; struct serio serio;
int serio_open;
#endif #endif
}; };
...@@ -1311,12 +1312,13 @@ static int sunzilog_serio_write(struct serio *serio, unsigned char ch) ...@@ -1311,12 +1312,13 @@ static int sunzilog_serio_write(struct serio *serio, unsigned char ch)
static int sunzilog_serio_open(struct serio *serio) static int sunzilog_serio_open(struct serio *serio)
{ {
struct uart_sunzilog_port *up = serio->driver;
unsigned long flags; unsigned long flags;
int ret; int ret;
spin_lock_irqsave(&sunzilog_serio_lock, flags); spin_lock_irqsave(&sunzilog_serio_lock, flags);
if (serio->private == NULL) { if (!up->serio_open) {
serio->private = (void *) -1L; up->serio_open = 1;
ret = 0; ret = 0;
} else } else
ret = -EBUSY; ret = -EBUSY;
...@@ -1327,10 +1329,11 @@ static int sunzilog_serio_open(struct serio *serio) ...@@ -1327,10 +1329,11 @@ static int sunzilog_serio_open(struct serio *serio)
static void sunzilog_serio_close(struct serio *serio) static void sunzilog_serio_close(struct serio *serio)
{ {
struct uart_sunzilog_port *up = serio->driver;
unsigned long flags; unsigned long flags;
spin_lock_irqsave(&sunzilog_serio_lock, flags); spin_lock_irqsave(&sunzilog_serio_lock, flags);
serio->private = NULL; up->serio_open = 0;
spin_unlock_irqrestore(&sunzilog_serio_lock, flags); spin_unlock_irqrestore(&sunzilog_serio_lock, flags);
} }
......
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