[kernel] r16906 - in dists/squeeze/linux-2.6/debian: . patches/bugfix/sparc patches/series
Jurij Smakov
jurij-guest at alioth.debian.org
Thu Feb 17 22:23:15 UTC 2011
Author: jurij-guest
Date: Thu Feb 17 22:22:59 2011
New Revision: 16906
Log:
Add sparc-console-handover.patch to fix kernel hang on sparc machines
using atyfb driver.
Added:
dists/squeeze/linux-2.6/debian/patches/bugfix/sparc/sparc-console-handover.patch
Modified:
dists/squeeze/linux-2.6/debian/changelog
dists/squeeze/linux-2.6/debian/patches/series/31
Modified: dists/squeeze/linux-2.6/debian/changelog
==============================================================================
--- dists/squeeze/linux-2.6/debian/changelog Thu Feb 17 18:18:03 2011 (r16905)
+++ dists/squeeze/linux-2.6/debian/changelog Thu Feb 17 22:22:59 2011 (r16906)
@@ -33,6 +33,13 @@
* Orion: add support for Buffalo LS-CHL (Closes: #590105).
* Kirkwood: initialize PCIE1 for QNAP TS-419P+ (Closes: #613499).
+ [ Jurij Smakov ]
+ * sparc: add sparc-console-handover.patch to address problems with
+ console handover on sparc causing kernel to hang during boot on
+ systems using atyfb driver.
+ Thanks to Fabio M. Di Nitto <fabbione at fabbione.net> for the patch.
+ (Closes: #602853)
+
-- Ian Campbell <ijc at hellion.org.uk> Thu, 13 Jan 2011 07:07:54 +0000
linux-2.6 (2.6.32-30) unstable; urgency=high
Added: dists/squeeze/linux-2.6/debian/patches/bugfix/sparc/sparc-console-handover.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/squeeze/linux-2.6/debian/patches/bugfix/sparc/sparc-console-handover.patch Thu Feb 17 22:22:59 2011 (r16906)
@@ -0,0 +1,729 @@
+diff -Naurd source.orig//arch/sparc/include/asm/openprom.h source/arch/sparc/include/asm/openprom.h
+--- source.orig//arch/sparc/include/asm/openprom.h 2009-12-03 04:51:21.000000000 +0100
++++ source/arch/sparc/include/asm/openprom.h 2011-01-06 10:18:49.000000000 +0100
+@@ -37,7 +37,7 @@
+ int (*v2_dev_open)(char *devpath);
+ void (*v2_dev_close)(int d);
+ int (*v2_dev_read)(int d, char *buf, int nbytes);
+- int (*v2_dev_write)(int d, char *buf, int nbytes);
++ int (*v2_dev_write)(int d, const char *buf, int nbytes);
+ int (*v2_dev_seek)(int d, int hi, int lo);
+
+ /* Never issued (multistage load support) */
+diff -Naurd source.orig//arch/sparc/include/asm/oplib_32.h source/arch/sparc/include/asm/oplib_32.h
+--- source.orig//arch/sparc/include/asm/oplib_32.h 2009-12-03 04:51:21.000000000 +0100
++++ source/arch/sparc/include/asm/oplib_32.h 2011-01-06 10:18:49.000000000 +0100
+@@ -60,25 +60,6 @@
+ extern char *prom_mapio(char *virt_hint, int io_space, unsigned int phys_addr, unsigned int num_bytes);
+ extern void prom_unmapio(char *virt_addr, unsigned int num_bytes);
+
+-/* Device operations. */
+-
+-/* Open the device described by the passed string. Note, that the format
+- * of the string is different on V0 vs. V2->higher proms. The caller must
+- * know what he/she is doing! Returns the device descriptor, an int.
+- */
+-extern int prom_devopen(char *device_string);
+-
+-/* Close a previously opened device described by the passed integer
+- * descriptor.
+- */
+-extern int prom_devclose(int device_handle);
+-
+-/* Do a seek operation on the device described by the passed integer
+- * descriptor.
+- */
+-extern void prom_seek(int device_handle, unsigned int seek_hival,
+- unsigned int seek_lowval);
+-
+ /* Miscellaneous routines, don't really fit in any category per se. */
+
+ /* Reboot the machine with the command line passed. */
+@@ -121,19 +102,8 @@
+ /* Get the prom firmware revision. */
+ extern int prom_getprev(void);
+
+-/* Character operations to/from the console.... */
+-
+-/* Non-blocking get character from console. */
+-extern int prom_nbgetchar(void);
+-
+-/* Non-blocking put character to console. */
+-extern int prom_nbputchar(char character);
+-
+-/* Blocking get character from console. */
+-extern char prom_getchar(void);
+-
+-/* Blocking put character to console. */
+-extern void prom_putchar(char character);
++/* Write a buffer of characters to the console. */
++extern void prom_console_write_buf(const char *buf, int len);
+
+ /* Prom's internal routines, don't use in kernel/boot code. */
+ extern void prom_printf(const char *fmt, ...);
+@@ -238,7 +208,6 @@
+ extern int prom_setprop(int node, const char *prop_name, char *prop_value,
+ int value_size);
+
+-extern int prom_pathtoinode(char *path);
+ extern int prom_inst2pkg(int);
+
+ /* Dorking with Bus ranges... */
+diff -Naurd source.orig//arch/sparc/include/asm/oplib_64.h source/arch/sparc/include/asm/oplib_64.h
+--- source.orig//arch/sparc/include/asm/oplib_64.h 2011-01-06 10:18:05.000000000 +0100
++++ source/arch/sparc/include/asm/oplib_64.h 2011-01-06 10:18:49.000000000 +0100
+@@ -67,27 +67,6 @@
+ /* Boot argument acquisition, returns the boot command line string. */
+ extern char *prom_getbootargs(void);
+
+-/* Device utilities. */
+-
+-/* Device operations. */
+-
+-/* Open the device described by the passed string. Note, that the format
+- * of the string is different on V0 vs. V2->higher proms. The caller must
+- * know what he/she is doing! Returns the device descriptor, an int.
+- */
+-extern int prom_devopen(const char *device_string);
+-
+-/* Close a previously opened device described by the passed integer
+- * descriptor.
+- */
+-extern int prom_devclose(int device_handle);
+-
+-/* Do a seek operation on the device described by the passed integer
+- * descriptor.
+- */
+-extern void prom_seek(int device_handle, unsigned int seek_hival,
+- unsigned int seek_lowval);
+-
+ /* Miscellaneous routines, don't really fit in any category per se. */
+
+ /* Reboot the machine with the command line passed. */
+@@ -109,33 +88,14 @@
+ /* Halt and power-off the machine. */
+ extern void prom_halt_power_off(void) __attribute__ ((noreturn));
+
+-/* Set the PROM 'sync' callback function to the passed function pointer.
+- * When the user gives the 'sync' command at the prom prompt while the
+- * kernel is still active, the prom will call this routine.
+- *
+- */
+-typedef int (*callback_func_t)(long *cmd);
+-extern void prom_setcallback(callback_func_t func_ptr);
+-
+ /* Acquire the IDPROM of the root node in the prom device tree. This
+ * gets passed a buffer where you would like it stuffed. The return value
+ * is the format type of this idprom or 0xff on error.
+ */
+ extern unsigned char prom_get_idprom(char *idp_buffer, int idpbuf_size);
+
+-/* Character operations to/from the console.... */
+-
+-/* Non-blocking get character from console. */
+-extern int prom_nbgetchar(void);
+-
+-/* Non-blocking put character to console. */
+-extern int prom_nbputchar(char character);
+-
+-/* Blocking get character from console. */
+-extern char prom_getchar(void);
+-
+-/* Blocking put character to console. */
+-extern void prom_putchar(char character);
++/* Write a buffer of characters to the console. */
++extern void prom_console_write_buf(const char *buf, int len);
+
+ /* Prom's internal routines, don't use in kernel/boot code. */
+ extern void prom_printf(const char *fmt, ...);
+@@ -278,9 +238,7 @@
+ extern int prom_setprop(int node, const char *prop_name, char *prop_value,
+ int value_size);
+
+-extern int prom_pathtoinode(const char *path);
+ extern int prom_inst2pkg(int);
+-extern int prom_service_exists(const char *service_name);
+ extern void prom_sun4v_guest_soft_state(void);
+
+ extern int prom_ihandle2path(int handle, char *buffer, int bufsize);
+diff -Naurd source.orig//arch/sparc/kernel/leon_kernel.c source/arch/sparc/kernel/leon_kernel.c
+--- source.orig//arch/sparc/kernel/leon_kernel.c 2009-12-03 04:51:21.000000000 +0100
++++ source/arch/sparc/kernel/leon_kernel.c 2011-01-06 10:18:49.000000000 +0100
+@@ -112,7 +112,7 @@
+ if (leon3_gptimer_regs && leon3_irqctrl_regs) {
+ LEON3_BYPASS_STORE_PA(&leon3_gptimer_regs->e[0].val, 0);
+ LEON3_BYPASS_STORE_PA(&leon3_gptimer_regs->e[0].rld,
+- (((1000000 / 100) - 1)));
++ (((1000000 / HZ) - 1)));
+ LEON3_BYPASS_STORE_PA(&leon3_gptimer_regs->e[0].ctrl, 0);
+
+ } else {
+diff -Naurd source.orig//arch/sparc/prom/console_32.c source/arch/sparc/prom/console_32.c
+--- source.orig//arch/sparc/prom/console_32.c 2009-12-03 04:51:21.000000000 +0100
++++ source/arch/sparc/prom/console_32.c 2011-01-06 10:18:49.000000000 +0100
+@@ -16,63 +16,26 @@
+
+ extern void restore_current(void);
+
+-/* Non blocking get character from console input device, returns -1
+- * if no input was taken. This can be used for polling.
+- */
+-int
+-prom_nbgetchar(void)
+-{
+- static char inc;
+- int i = -1;
+- unsigned long flags;
+-
+- spin_lock_irqsave(&prom_lock, flags);
+- switch(prom_vers) {
+- case PROM_V0:
+- i = (*(romvec->pv_nbgetchar))();
+- break;
+- case PROM_V2:
+- case PROM_V3:
+- if( (*(romvec->pv_v2devops).v2_dev_read)(*romvec->pv_v2bootargs.fd_stdin , &inc, 0x1) == 1) {
+- i = inc;
+- } else {
+- i = -1;
+- }
+- break;
+- default:
+- i = -1;
+- break;
+- };
+- restore_current();
+- spin_unlock_irqrestore(&prom_lock, flags);
+- return i; /* Ugh, we could spin forever on unsupported proms ;( */
+-}
+-
+ /* Non blocking put character to console device, returns -1 if
+ * unsuccessful.
+ */
+-int
+-prom_nbputchar(char c)
++static int prom_nbputchar(const char *buf)
+ {
+- static char outc;
+ unsigned long flags;
+ int i = -1;
+
+ spin_lock_irqsave(&prom_lock, flags);
+ switch(prom_vers) {
+ case PROM_V0:
+- i = (*(romvec->pv_nbputchar))(c);
++ i = (*(romvec->pv_nbputchar))(*buf);
+ break;
+ case PROM_V2:
+ case PROM_V3:
+- outc = c;
+- if( (*(romvec->pv_v2devops).v2_dev_write)(*romvec->pv_v2bootargs.fd_stdout, &outc, 0x1) == 1)
++ if ((*(romvec->pv_v2devops).v2_dev_write)(*romvec->pv_v2bootargs.fd_stdout,
++ buf, 0x1) == 1)
+ i = 0;
+- else
+- i = -1;
+ break;
+ default:
+- i = -1;
+ break;
+ };
+ restore_current();
+@@ -80,19 +43,14 @@
+ return i; /* Ugh, we could spin forever on unsupported proms ;( */
+ }
+
+-/* Blocking version of get character routine above. */
+-char
+-prom_getchar(void)
++void prom_console_write_buf(const char *buf, int len)
+ {
+- int character;
+- while((character = prom_nbgetchar()) == -1) ;
+- return (char) character;
++ while (len) {
++ int n = prom_nbputchar(buf);
++ if (n)
++ continue;
++ len--;
++ buf++;
++ }
+ }
+
+-/* Blocking version of put character routine above. */
+-void
+-prom_putchar(char c)
+-{
+- while(prom_nbputchar(c) == -1) ;
+- return;
+-}
+diff -Naurd source.orig//arch/sparc/prom/console_64.c source/arch/sparc/prom/console_64.c
+--- source.orig//arch/sparc/prom/console_64.c 2011-01-06 10:18:05.000000000 +0100
++++ source/arch/sparc/prom/console_64.c 2011-01-06 10:18:49.000000000 +0100
+@@ -15,86 +15,34 @@
+
+ extern int prom_stdin, prom_stdout;
+
+-/* Non blocking get character from console input device, returns -1
+- * if no input was taken. This can be used for polling.
+- */
+-inline int
+-prom_nbgetchar(void)
+-{
+- unsigned long args[7];
+- char inc;
+-
+- args[0] = (unsigned long) "read";
+- args[1] = 3;
+- args[2] = 1;
+- args[3] = (unsigned int) prom_stdin;
+- args[4] = (unsigned long) &inc;
+- args[5] = 1;
+- args[6] = (unsigned long) -1;
+-
+- p1275_cmd_direct(args);
+-
+- if (args[6] == 1)
+- return inc;
+- return -1;
+-}
+-
+-/* Non blocking put character to console device, returns -1 if
+- * unsuccessful.
+- */
+-inline int
+-prom_nbputchar(char c)
++static int __prom_console_write_buf(const char *buf, int len)
+ {
+ unsigned long args[7];
+- char outc;
+-
+- outc = c;
++ int ret;
+
+ args[0] = (unsigned long) "write";
+ args[1] = 3;
+ args[2] = 1;
+ args[3] = (unsigned int) prom_stdout;
+- args[4] = (unsigned long) &outc;
+- args[5] = 1;
++ args[4] = (unsigned long) buf;
++ args[5] = (unsigned int) len;
+ args[6] = (unsigned long) -1;
+
+ p1275_cmd_direct(args);
+
+- if (args[6] == 1)
+- return 0;
+- else
++ ret = (int) args[6];
++ if (ret < 0)
+ return -1;
++ return ret;
+ }
+
+-/* Blocking version of get character routine above. */
+-char
+-prom_getchar(void)
+-{
+- int character;
+- while((character = prom_nbgetchar()) == -1) ;
+- return (char) character;
+-}
+-
+-/* Blocking version of put character routine above. */
+-void
+-prom_putchar(char c)
+-{
+- prom_nbputchar(c);
+- return;
+-}
+-
+-void
+-prom_puts(const char *s, int len)
++void prom_console_write_buf(const char *buf, int len)
+ {
+- unsigned long args[7];
+-
+- args[0] = (unsigned long) "write";
+- args[1] = 3;
+- args[2] = 1;
+- args[3] = (unsigned int) prom_stdout;
+- args[4] = (unsigned long) s;
+- args[5] = len;
+- args[6] = (unsigned long) -1;
+-
+- p1275_cmd_direct(args);
++ while (len) {
++ int n = __prom_console_write_buf(buf, len);
++ if (n < 0)
++ continue;
++ len -= n;
++ buf += len;
++ }
+ }
+diff -Naurd source.orig//arch/sparc/prom/devops_32.c source/arch/sparc/prom/devops_32.c
+--- source.orig//arch/sparc/prom/devops_32.c 2009-12-03 04:51:21.000000000 +0100
++++ source/arch/sparc/prom/devops_32.c 1970-01-01 01:00:00.000000000 +0100
+@@ -1,89 +0,0 @@
+-/*
+- * devops.c: Device operations using the PROM.
+- *
+- * Copyright (C) 1995 David S. Miller (davem at caip.rutgers.edu)
+- */
+-#include <linux/types.h>
+-#include <linux/kernel.h>
+-#include <linux/sched.h>
+-
+-#include <asm/openprom.h>
+-#include <asm/oplib.h>
+-
+-extern void restore_current(void);
+-
+-/* Open the device described by the string 'dstr'. Returns the handle
+- * to that device used for subsequent operations on that device.
+- * Returns -1 on failure.
+- */
+-int
+-prom_devopen(char *dstr)
+-{
+- int handle;
+- unsigned long flags;
+- spin_lock_irqsave(&prom_lock, flags);
+- switch(prom_vers) {
+- case PROM_V0:
+- handle = (*(romvec->pv_v0devops.v0_devopen))(dstr);
+- if(handle == 0) handle = -1;
+- break;
+- case PROM_V2:
+- case PROM_V3:
+- handle = (*(romvec->pv_v2devops.v2_dev_open))(dstr);
+- break;
+- default:
+- handle = -1;
+- break;
+- };
+- restore_current();
+- spin_unlock_irqrestore(&prom_lock, flags);
+-
+- return handle;
+-}
+-
+-/* Close the device described by device handle 'dhandle'. */
+-int
+-prom_devclose(int dhandle)
+-{
+- unsigned long flags;
+- spin_lock_irqsave(&prom_lock, flags);
+- switch(prom_vers) {
+- case PROM_V0:
+- (*(romvec->pv_v0devops.v0_devclose))(dhandle);
+- break;
+- case PROM_V2:
+- case PROM_V3:
+- (*(romvec->pv_v2devops.v2_dev_close))(dhandle);
+- break;
+- default:
+- break;
+- };
+- restore_current();
+- spin_unlock_irqrestore(&prom_lock, flags);
+- return 0;
+-}
+-
+-/* Seek to specified location described by 'seekhi' and 'seeklo'
+- * for device 'dhandle'.
+- */
+-void
+-prom_seek(int dhandle, unsigned int seekhi, unsigned int seeklo)
+-{
+- unsigned long flags;
+- spin_lock_irqsave(&prom_lock, flags);
+- switch(prom_vers) {
+- case PROM_V0:
+- (*(romvec->pv_v0devops.v0_seekdev))(dhandle, seekhi, seeklo);
+- break;
+- case PROM_V2:
+- case PROM_V3:
+- (*(romvec->pv_v2devops.v2_dev_seek))(dhandle, seekhi, seeklo);
+- break;
+- default:
+- break;
+- };
+- restore_current();
+- spin_unlock_irqrestore(&prom_lock, flags);
+-
+- return;
+-}
+diff -Naurd source.orig//arch/sparc/prom/devops_64.c source/arch/sparc/prom/devops_64.c
+--- source.orig//arch/sparc/prom/devops_64.c 2011-01-06 10:18:05.000000000 +0100
++++ source/arch/sparc/prom/devops_64.c 1970-01-01 01:00:00.000000000 +0100
+@@ -1,67 +0,0 @@
+-/*
+- * devops.c: Device operations using the PROM.
+- *
+- * Copyright (C) 1995 David S. Miller (davem at caip.rutgers.edu)
+- * Copyright (C) 1996,1997 Jakub Jelinek (jj at sunsite.mff.cuni.cz)
+- */
+-#include <linux/types.h>
+-#include <linux/kernel.h>
+-#include <linux/sched.h>
+-
+-#include <asm/openprom.h>
+-#include <asm/oplib.h>
+-
+-/* Open the device described by the string 'dstr'. Returns the handle
+- * to that device used for subsequent operations on that device.
+- * Returns 0 on failure.
+- */
+-int
+-prom_devopen(const char *dstr)
+-{
+- unsigned long args[5];
+-
+- args[0] = (unsigned long) "open";
+- args[1] = 1;
+- args[2] = 1;
+- args[3] = (unsigned long) dstr;
+- args[4] = (unsigned long) -1;
+-
+- p1275_cmd_direct(args);
+-
+- return (int) args[4];
+-}
+-
+-/* Close the device described by device handle 'dhandle'. */
+-int
+-prom_devclose(int dhandle)
+-{
+- unsigned long args[4];
+-
+- args[0] = (unsigned long) "close";
+- args[1] = 1;
+- args[2] = 0;
+- args[3] = (unsigned int) dhandle;
+-
+- p1275_cmd_direct(args);
+-
+- return 0;
+-}
+-
+-/* Seek to specified location described by 'seekhi' and 'seeklo'
+- * for device 'dhandle'.
+- */
+-void
+-prom_seek(int dhandle, unsigned int seekhi, unsigned int seeklo)
+-{
+- unsigned long args[7];
+-
+- args[0] = (unsigned long) "seek";
+- args[1] = 3;
+- args[2] = 1;
+- args[3] = (unsigned int) dhandle;
+- args[4] = seekhi;
+- args[5] = seeklo;
+- args[6] = (unsigned long) -1;
+-
+- p1275_cmd_direct(args);
+-}
+diff -Naurd source.orig//arch/sparc/prom/Makefile source/arch/sparc/prom/Makefile
+--- source.orig//arch/sparc/prom/Makefile 2009-12-03 04:51:21.000000000 +0100
++++ source/arch/sparc/prom/Makefile 2011-01-06 10:18:49.000000000 +0100
+@@ -6,7 +6,6 @@
+
+ lib-y := bootstr_$(BITS).o
+ lib-$(CONFIG_SPARC32) += devmap.o
+-lib-y += devops_$(BITS).o
+ lib-y += init_$(BITS).o
+ lib-$(CONFIG_SPARC32) += memory.o
+ lib-y += misc_$(BITS).o
+diff -Naurd source.orig//arch/sparc/prom/misc_64.c source/arch/sparc/prom/misc_64.c
+--- source.orig//arch/sparc/prom/misc_64.c 2011-01-06 10:18:05.000000000 +0100
++++ source/arch/sparc/prom/misc_64.c 2011-01-06 10:18:49.000000000 +0100
+@@ -18,7 +18,7 @@
+ #include <asm/system.h>
+ #include <asm/ldc.h>
+
+-int prom_service_exists(const char *service_name)
++static int prom_service_exists(const char *service_name)
+ {
+ unsigned long args[5];
+
+@@ -150,20 +150,6 @@
+ prom_halt();
+ }
+
+-/* Set prom sync handler to call function 'funcp'. */
+-void prom_setcallback(callback_func_t funcp)
+-{
+- unsigned long args[5];
+- if (!funcp)
+- return;
+- args[0] = (unsigned long) "set-callback";
+- args[1] = 1;
+- args[2] = 1;
+- args[3] = (unsigned long) funcp;
+- args[4] = (unsigned long) -1;
+- p1275_cmd_direct(args);
+-}
+-
+ /* Get the idprom and stuff it into buffer 'idbuf'. Returns the
+ * format type. 'num_bytes' is the number of bytes that your idbuf
+ * has space for. Returns 0xff on error.
+diff -Naurd source.orig//arch/sparc/prom/printf.c source/arch/sparc/prom/printf.c
+--- source.orig//arch/sparc/prom/printf.c 2009-12-03 04:51:21.000000000 +0100
++++ source/arch/sparc/prom/printf.c 2011-01-06 10:23:30.000000000 +0100
+@@ -15,22 +15,45 @@
+
+ #include <linux/kernel.h>
+ #include <linux/compiler.h>
++#include <linux/spinlock.h>
+
+ #include <asm/openprom.h>
+ #include <asm/oplib.h>
+
++#define CONSOLE_WRITE_BUF_SIZE 1024
++
+ static char ppbuf[1024];
++static char console_write_buf[CONSOLE_WRITE_BUF_SIZE];
++static raw_spinlock_t console_write_lock;
+
+ void notrace prom_write(const char *buf, unsigned int n)
+ {
+- char ch;
++ unsigned int dest_len;
++ unsigned long flags;
++ char *dest;
+
+- while (n != 0) {
+- --n;
+- if ((ch = *buf++) == '\n')
+- prom_putchar('\r');
+- prom_putchar(ch);
++ dest = console_write_buf;
++ spin_lock_irqsave(&console_write_lock, flags);
++
++ dest_len = 0;
++ while (n-- != 0) {
++ char ch = *buf++;
++ if (ch == '\n') {
++ *dest++ = '\r';
++ dest_len++;
++ }
++ *dest++ = ch;
++ dest_len++;
++ if (dest_len >= CONSOLE_WRITE_BUF_SIZE - 1) {
++ prom_console_write_buf(console_write_buf, dest_len);
++ dest = console_write_buf;
++ dest_len = 0;
++ }
+ }
++ if (dest_len)
++ prom_console_write_buf(console_write_buf, dest_len);
++
++ spin_unlock_irqrestore(&console_write_lock, flags);
+ }
+
+ void notrace prom_printf(const char *fmt, ...)
+diff -Naurd source.orig//arch/sparc/prom/tree_32.c source/arch/sparc/prom/tree_32.c
+--- source.orig//arch/sparc/prom/tree_32.c 2009-12-03 04:51:21.000000000 +0100
++++ source/arch/sparc/prom/tree_32.c 2011-01-06 10:18:49.000000000 +0100
+@@ -342,18 +342,3 @@
+ if (node == -1) return 0;
+ return node;
+ }
+-
+-/* Return 'node' assigned to a particular prom 'path'
+- * FIXME: Should work for v0 as well
+- */
+-int prom_pathtoinode(char *path)
+-{
+- int node, inst;
+-
+- inst = prom_devopen (path);
+- if (inst == -1) return 0;
+- node = prom_inst2pkg (inst);
+- prom_devclose (inst);
+- if (node == -1) return 0;
+- return node;
+-}
+diff -Naurd source.orig//arch/sparc/prom/tree_64.c source/arch/sparc/prom/tree_64.c
+--- source.orig//arch/sparc/prom/tree_64.c 2011-01-06 10:18:05.000000000 +0100
++++ source/arch/sparc/prom/tree_64.c 2011-01-06 10:18:49.000000000 +0100
+@@ -375,24 +375,6 @@
+ return node;
+ }
+
+-/* Return 'node' assigned to a particular prom 'path'
+- * FIXME: Should work for v0 as well
+- */
+-int
+-prom_pathtoinode(const char *path)
+-{
+- int node, inst;
+-
+- inst = prom_devopen (path);
+- if (inst == 0)
+- return 0;
+- node = prom_inst2pkg(inst);
+- prom_devclose(inst);
+- if (node == -1)
+- return 0;
+- return node;
+-}
+-
+ int prom_ihandle2path(int handle, char *buffer, int bufsize)
+ {
+ unsigned long args[7];
+diff -Naurd source.orig//drivers/video/aty/atyfb_base.c source/drivers/video/aty/atyfb_base.c
+--- source.orig//drivers/video/aty/atyfb_base.c 2009-12-03 04:51:21.000000000 +0100
++++ source/drivers/video/aty/atyfb_base.c 2011-01-06 10:23:56.000000000 +0100
+@@ -2970,9 +2970,8 @@
+ {
+ struct atyfb_par *par = info->par;
+ struct device_node *dp;
+- char prop[128];
+- int node, len, i, j, ret;
+ u32 mem, chip_id;
++ int i, j, ret;
+
+ /*
+ * Map memory-mapped registers.
+@@ -3088,23 +3087,8 @@
+ aty_st_le32(MEM_CNTL, mem, par);
+ }
+
+- /*
+- * If this is the console device, we will set default video
+- * settings to what the PROM left us with.
+- */
+- node = prom_getchild(prom_root_node);
+- node = prom_searchsiblings(node, "aliases");
+- if (node) {
+- len = prom_getproperty(node, "screen", prop, sizeof(prop));
+- if (len > 0) {
+- prop[len] = '\0';
+- node = prom_finddevice(prop);
+- } else
+- node = 0;
+- }
+-
+ dp = pci_device_to_OF_node(pdev);
+- if (node == dp->node) {
++ if (dp == of_console_device) {
+ struct fb_var_screeninfo *var = &default_var;
+ unsigned int N, P, Q, M, T, R;
+ u32 v_total, h_total;
+@@ -3112,9 +3096,9 @@
+ u8 pll_regs[16];
+ u8 clock_cntl;
+
+- crtc.vxres = prom_getintdefault(node, "width", 1024);
+- crtc.vyres = prom_getintdefault(node, "height", 768);
+- var->bits_per_pixel = prom_getintdefault(node, "depth", 8);
++ crtc.vxres = of_getintprop_default(dp, "width", 1024);
++ crtc.vyres = of_getintprop_default(dp, "height", 768);
++ var->bits_per_pixel = of_getintprop_default(dp, "depth", 8);
+ var->xoffset = var->yoffset = 0;
+ crtc.h_tot_disp = aty_ld_le32(CRTC_H_TOTAL_DISP, par);
+ crtc.h_sync_strt_wid = aty_ld_le32(CRTC_H_SYNC_STRT_WID, par);
Modified: dists/squeeze/linux-2.6/debian/patches/series/31
==============================================================================
--- dists/squeeze/linux-2.6/debian/patches/series/31 Thu Feb 17 18:18:03 2011 (r16905)
+++ dists/squeeze/linux-2.6/debian/patches/series/31 Thu Feb 17 22:22:59 2011 (r16906)
@@ -20,3 +20,4 @@
+ features/all/aufs2/aufs-bugfix-separate-the-workqueue-for-preprocessing.patch
+ bugfix/all/rt2500usb-fallback-to-SW-encryption-for-TKIP-AES.patch
+ features/arm/ts419p-plus-pcie1.patch
++ bugfix/sparc/sparc-console-handover.patch
More information about the Kernel-svn-changes
mailing list