Commit d0bf0688 authored by David S. Miller's avatar David S. Miller

Merge nuts.davemloft.net:/disk1/BK/sparcwork-2.6

into nuts.davemloft.net:/disk1/BK/sparc-2.6
parents 6a9f6b3f a7054210
......@@ -55,6 +55,12 @@ void (*pm_idle)(void);
*/
void (*pm_power_off)(void);
/*
* sysctl - toggle power-off restriction for serial console
* systems in machine_power_off()
*/
int scons_pwroff = 1;
extern void fpsave(unsigned long *, unsigned long *, void *, unsigned long *);
struct task_struct *last_task_used_math = NULL;
......@@ -186,7 +192,7 @@ EXPORT_SYMBOL(machine_restart);
void machine_power_off(void)
{
#ifdef CONFIG_SUN_AUXIO
if (auxio_power_register && !serial_console)
if (auxio_power_register && (!serial_console || scons_pwroff))
*auxio_power_register |= AUXIO_POWER_OFF;
#endif
machine_halt();
......
......@@ -20,6 +20,12 @@
#define __KERNEL_SYSCALLS__
#include <linux/unistd.h>
/*
* sysctl - toggle power-off restriction for serial console
* systems in machine_power_off()
*/
int scons_pwroff = 1;
#ifdef CONFIG_PCI
static unsigned long power_reg = 0UL;
......@@ -44,7 +50,7 @@ static void (*poweroff_method)(void) = machine_alt_power_off;
void machine_power_off(void)
{
if (!serial_console) {
if (!serial_console || scons_pwroff) {
#ifdef CONFIG_PCI
if (power_reg != 0UL) {
/* Both register bits seem to have the
......
......@@ -162,8 +162,10 @@ bw2_blank(int blank, struct fb_info *info)
}
static struct sbus_mmap_map bw2_mmap_map[] = {
{ 0, 0, SBUS_MMAP_FBSIZE(1) },
{ 0, 0, 0 }
{
.size = SBUS_MMAP_FBSIZE(1)
},
{ .size = 0 }
};
static int bw2_mmap(struct fb_info *info, struct file *file, struct vm_area_struct *vma)
......
......@@ -367,23 +367,82 @@ static void cg14_init_fix(struct fb_info *info, int linebytes)
}
static struct sbus_mmap_map __cg14_mmap_map[CG14_MMAP_ENTRIES] __initdata = {
{ CG14_REGS, 0x80000000, 0x1000 },
{ CG14_XLUT, 0x80003000, 0x1000 },
{ CG14_CLUT1, 0x80004000, 0x1000 },
{ CG14_CLUT2, 0x80005000, 0x1000 },
{ CG14_CLUT3, 0x80006000, 0x1000 },
{ CG3_MMAP_OFFSET -
0x7000, 0x80000000, 0x7000 },
{ CG3_MMAP_OFFSET, 0x00000000, SBUS_MMAP_FBSIZE(1) },
{ MDI_CURSOR_MAP, 0x80001000, 0x1000 },
{ MDI_CHUNKY_BGR_MAP, 0x01000000, 0x400000 },
{ MDI_PLANAR_X16_MAP, 0x02000000, 0x200000 },
{ MDI_PLANAR_C16_MAP, 0x02800000, 0x200000 },
{ MDI_PLANAR_X32_MAP, 0x03000000, 0x100000 },
{ MDI_PLANAR_B32_MAP, 0x03400000, 0x100000 },
{ MDI_PLANAR_G32_MAP, 0x03800000, 0x100000 },
{ MDI_PLANAR_R32_MAP, 0x03c00000, 0x100000 },
{ 0, 0, 0 }
{
.voff = CG14_REGS,
.poff = 0x80000000,
.size = 0x1000
},
{
.voff = CG14_XLUT,
.poff = 0x80003000,
.size = 0x1000
},
{
.voff = CG14_CLUT1,
.poff = 0x80004000,
.size = 0x1000
},
{
.voff = CG14_CLUT2,
.poff = 0x80005000,
.size = 0x1000
},
{
.voff = CG14_CLUT3,
.poff = 0x80006000,
.size = 0x1000
},
{
.voff = CG3_MMAP_OFFSET - 0x7000,
.poff = 0x80000000,
.size = 0x7000
},
{
.voff = CG3_MMAP_OFFSET,
.poff = 0x00000000,
.size = SBUS_MMAP_FBSIZE(1)
},
{
.voff = MDI_CURSOR_MAP,
.poff = 0x80001000,
.size = 0x1000
},
{
.voff = MDI_CHUNKY_BGR_MAP,
.poff = 0x01000000,
.size = 0x400000
},
{
.voff = MDI_PLANAR_X16_MAP,
.poff = 0x02000000,
.size = 0x200000
},
{
.voff = MDI_PLANAR_C16_MAP,
.poff = 0x02800000,
.size = 0x200000
},
{
.voff = MDI_PLANAR_X32_MAP,
.poff = 0x03000000,
.size = 0x100000
},
{
.voff = MDI_PLANAR_B32_MAP,
.poff = 0x03400000,
.size = 0x100000
},
{
.voff = MDI_PLANAR_G32_MAP,
.poff = 0x03800000,
.size = 0x100000
},
{
.voff = MDI_PLANAR_R32_MAP,
.poff = 0x03c00000,
.size = 0x100000
},
{ .size = 0 }
};
struct all_info {
......
......@@ -221,8 +221,12 @@ cg3_blank(int blank, struct fb_info *info)
}
static struct sbus_mmap_map cg3_mmap_map[] = {
{ CG3_MMAP_OFFSET, CG3_RAM_OFFSET, SBUS_MMAP_FBSIZE(1) },
{ 0, 0, 0 }
{
.poff = CG3_MMAP_OFFSET,
.voff = CG3_RAM_OFFSET,
.size = SBUS_MMAP_FBSIZE(1)
},
{ .size = 0 }
};
static int cg3_mmap(struct fb_info *info, struct file *file, struct vm_area_struct *vma)
......
......@@ -480,15 +480,47 @@ cg6_blank(int blank, struct fb_info *info)
}
static struct sbus_mmap_map cg6_mmap_map[] = {
{ CG6_FBC, CG6_FBC_OFFSET, PAGE_SIZE },
{ CG6_TEC, CG6_TEC_OFFSET, PAGE_SIZE },
{ CG6_BTREGS, CG6_BROOKTREE_OFFSET, PAGE_SIZE },
{ CG6_FHC, CG6_FHC_OFFSET, PAGE_SIZE },
{ CG6_THC, CG6_THC_OFFSET, PAGE_SIZE },
{ CG6_ROM, CG6_ROM_OFFSET, 0x10000 },
{ CG6_RAM, CG6_RAM_OFFSET, SBUS_MMAP_FBSIZE(1) },
{ CG6_DHC, CG6_DHC_OFFSET, 0x40000 },
{ 0, 0, 0 }
{
.voff = CG6_FBC,
.poff = CG6_FBC_OFFSET,
.size = PAGE_SIZE
},
{
.voff = CG6_TEC,
.poff = CG6_TEC_OFFSET,
.size = PAGE_SIZE
},
{
.voff = CG6_BTREGS,
.poff = CG6_BROOKTREE_OFFSET,
.size = PAGE_SIZE
},
{
.voff = CG6_FHC,
.poff = CG6_FHC_OFFSET,
.size = PAGE_SIZE
},
{
.voff = CG6_THC,
.poff = CG6_THC_OFFSET,
.size = PAGE_SIZE
},
{
.voff = CG6_ROM,
.poff = CG6_ROM_OFFSET,
.size = 0x10000
},
{
.voff = CG6_RAM,
.poff = CG6_RAM_OFFSET,
.size = SBUS_MMAP_FBSIZE(1)
},
{
.voff = CG6_DHC,
.poff = CG6_DHC_OFFSET,
.size = 0x40000
},
{ .size = 0 }
};
static int cg6_mmap(struct fb_info *info, struct file *file, struct vm_area_struct *vma)
......
......@@ -769,34 +769,142 @@ ffb_blank(int blank, struct fb_info *info)
}
static struct sbus_mmap_map ffb_mmap_map[] = {
{ FFB_SFB8R_VOFF, FFB_SFB8R_POFF, 0x0400000 },
{ FFB_SFB8G_VOFF, FFB_SFB8G_POFF, 0x0400000 },
{ FFB_SFB8B_VOFF, FFB_SFB8B_POFF, 0x0400000 },
{ FFB_SFB8X_VOFF, FFB_SFB8X_POFF, 0x0400000 },
{ FFB_SFB32_VOFF, FFB_SFB32_POFF, 0x1000000 },
{ FFB_SFB64_VOFF, FFB_SFB64_POFF, 0x2000000 },
{ FFB_FBC_REGS_VOFF, FFB_FBC_REGS_POFF, 0x0002000 },
{ FFB_BM_FBC_REGS_VOFF, FFB_BM_FBC_REGS_POFF, 0x0002000 },
{ FFB_DFB8R_VOFF, FFB_DFB8R_POFF, 0x0400000 },
{ FFB_DFB8G_VOFF, FFB_DFB8G_POFF, 0x0400000 },
{ FFB_DFB8B_VOFF, FFB_DFB8B_POFF, 0x0400000 },
{ FFB_DFB8X_VOFF, FFB_DFB8X_POFF, 0x0400000 },
{ FFB_DFB24_VOFF, FFB_DFB24_POFF, 0x1000000 },
{ FFB_DFB32_VOFF, FFB_DFB32_POFF, 0x1000000 },
{ FFB_FBC_KREGS_VOFF, FFB_FBC_KREGS_POFF, 0x0002000 },
{ FFB_DAC_VOFF, FFB_DAC_POFF, 0x0002000 },
{ FFB_PROM_VOFF, FFB_PROM_POFF, 0x0010000 },
{ FFB_EXP_VOFF, FFB_EXP_POFF, 0x0002000 },
{ FFB_DFB422A_VOFF, FFB_DFB422A_POFF, 0x0800000 },
{ FFB_DFB422AD_VOFF, FFB_DFB422AD_POFF, 0x0800000 },
{ FFB_DFB24B_VOFF, FFB_DFB24B_POFF, 0x1000000 },
{ FFB_DFB422B_VOFF, FFB_DFB422B_POFF, 0x0800000 },
{ FFB_DFB422BD_VOFF, FFB_DFB422BD_POFF, 0x0800000 },
{ FFB_SFB16Z_VOFF, FFB_SFB16Z_POFF, 0x0800000 },
{ FFB_SFB8Z_VOFF, FFB_SFB8Z_POFF, 0x0800000 },
{ FFB_SFB422_VOFF, FFB_SFB422_POFF, 0x0800000 },
{ FFB_SFB422D_VOFF, FFB_SFB422D_POFF, 0x0800000 },
{ 0, 0, 0 }
{
.voff = FFB_SFB8R_VOFF,
.poff = FFB_SFB8R_POFF,
.size = 0x0400000
},
{
.voff = FFB_SFB8G_VOFF,
.poff = FFB_SFB8G_POFF,
.size = 0x0400000
},
{
.voff = FFB_SFB8B_VOFF,
.poff = FFB_SFB8B_POFF,
.size = 0x0400000
},
{
.voff = FFB_SFB8X_VOFF,
.poff = FFB_SFB8X_POFF,
.size = 0x0400000
},
{
.voff = FFB_SFB32_VOFF,
.poff = FFB_SFB32_POFF,
.size = 0x1000000
},
{
.voff = FFB_SFB64_VOFF,
.poff = FFB_SFB64_POFF,
.size = 0x2000000
},
{
.voff = FFB_FBC_REGS_VOFF,
.poff = FFB_FBC_REGS_POFF,
.size = 0x0002000
},
{
.voff = FFB_BM_FBC_REGS_VOFF,
.poff = FFB_BM_FBC_REGS_POFF,
.size = 0x0002000
},
{
.voff = FFB_DFB8R_VOFF,
.poff = FFB_DFB8R_POFF,
.size = 0x0400000
},
{
.voff = FFB_DFB8G_VOFF,
.poff = FFB_DFB8G_POFF,
.size = 0x0400000
},
{
.voff = FFB_DFB8B_VOFF,
.poff = FFB_DFB8B_POFF,
.size = 0x0400000
},
{
.voff = FFB_DFB8X_VOFF,
.poff = FFB_DFB8X_POFF,
.size = 0x0400000
},
{
.voff = FFB_DFB24_VOFF,
.poff = FFB_DFB24_POFF,
.size = 0x1000000
},
{
.voff = FFB_DFB32_VOFF,
.poff = FFB_DFB32_POFF,
.size = 0x1000000
},
{
.voff = FFB_FBC_KREGS_VOFF,
.poff = FFB_FBC_KREGS_POFF,
.size = 0x0002000
},
{
.voff = FFB_DAC_VOFF,
.poff = FFB_DAC_POFF,
.size = 0x0002000
},
{
.voff = FFB_PROM_VOFF,
.poff = FFB_PROM_POFF,
.size = 0x0010000
},
{
.voff = FFB_EXP_VOFF,
.poff = FFB_EXP_POFF,
.size = 0x0002000
},
{
.voff = FFB_DFB422A_VOFF,
.poff = FFB_DFB422A_POFF,
.size = 0x0800000
},
{
.voff = FFB_DFB422AD_VOFF,
.poff = FFB_DFB422AD_POFF,
.size = 0x0800000
},
{
.voff = FFB_DFB24B_VOFF,
.poff = FFB_DFB24B_POFF,
.size = 0x1000000
},
{
.voff = FFB_DFB422B_VOFF,
.poff = FFB_DFB422B_POFF,
.size = 0x0800000
},
{
.voff = FFB_DFB422BD_VOFF,
.poff = FFB_DFB422BD_POFF,
.size = 0x0800000
},
{
.voff = FFB_SFB16Z_VOFF,
.poff = FFB_SFB16Z_POFF,
.size = 0x0800000
},
{
.voff = FFB_SFB8Z_VOFF,
.poff = FFB_SFB8Z_POFF,
.size = 0x0800000
},
{
.voff = FFB_SFB422_VOFF,
.poff = FFB_SFB422_POFF,
.size = 0x0800000
},
{
.voff = FFB_SFB422D_VOFF,
.poff = FFB_SFB422D_POFF,
.size = 0x0800000
},
{ .size = 0 }
};
static int ffb_mmap(struct fb_info *info, struct file *file, struct vm_area_struct *vma)
......
......@@ -294,20 +294,72 @@ static int leo_blank(int blank, struct fb_info *info)
}
static struct sbus_mmap_map leo_mmap_map[] = {
{ LEO_SS0_MAP, LEO_OFF_SS0, 0x800000 },
{ LEO_LC_SS0_USR_MAP, LEO_OFF_LC_SS0_USR, 0x1000 },
{ LEO_LD_SS0_MAP, LEO_OFF_LD_SS0, 0x1000 },
{ LEO_LX_CURSOR_MAP, LEO_OFF_LX_CURSOR, 0x1000 },
{ LEO_SS1_MAP, LEO_OFF_SS1, 0x800000 },
{ LEO_LC_SS1_USR_MAP, LEO_OFF_LC_SS1_USR, 0x1000 },
{ LEO_LD_SS1_MAP, LEO_OFF_LD_SS1, 0x1000 },
{ LEO_UNK_MAP, LEO_OFF_UNK, 0x1000 },
{ LEO_LX_KRN_MAP, LEO_OFF_LX_KRN, 0x1000 },
{ LEO_LC_SS0_KRN_MAP, LEO_OFF_LC_SS0_KRN, 0x1000 },
{ LEO_LC_SS1_KRN_MAP, LEO_OFF_LC_SS1_KRN, 0x1000 },
{ LEO_LD_GBL_MAP, LEO_OFF_LD_GBL, 0x1000 },
{ LEO_UNK2_MAP, LEO_OFF_UNK2, 0x100000 },
{ 0, 0, 0 }
{
.voff = LEO_SS0_MAP,
.poff = LEO_OFF_SS0,
.size = 0x800000
},
{
.voff = LEO_LC_SS0_USR_MAP,
.poff = LEO_OFF_LC_SS0_USR,
.size = 0x1000
},
{
.voff = LEO_LD_SS0_MAP,
.poff = LEO_OFF_LD_SS0,
.size = 0x1000
},
{
.voff = LEO_LX_CURSOR_MAP,
.poff = LEO_OFF_LX_CURSOR,
.size = 0x1000
},
{
.voff = LEO_SS1_MAP,
.poff = LEO_OFF_SS1,
.size = 0x800000
},
{
.voff = LEO_LC_SS1_USR_MAP,
.poff = LEO_OFF_LC_SS1_USR,
.size = 0x1000
},
{
.voff = LEO_LD_SS1_MAP,
.poff = LEO_OFF_LD_SS1,
.size = 0x1000
},
{
.voff = LEO_UNK_MAP,
.poff = LEO_OFF_UNK,
.size = 0x1000
},
{
.voff = LEO_LX_KRN_MAP,
.poff = LEO_OFF_LX_KRN,
.size = 0x1000
},
{
.voff = LEO_LC_SS0_KRN_MAP,
.poff = LEO_OFF_LC_SS0_KRN,
.size = 0x1000
},
{
.voff = LEO_LC_SS1_KRN_MAP,
.poff = LEO_OFF_LC_SS1_KRN,
.size = 0x1000
},
{
.voff = LEO_LD_GBL_MAP,
.poff = LEO_OFF_LD_GBL,
.size = 0x1000
},
{
.voff = LEO_UNK2_MAP,
.poff = LEO_OFF_UNK2,
.size = 0x100000
},
{ .size = 0 }
};
static int leo_mmap(struct fb_info *info, struct file *file, struct vm_area_struct *vma)
......
......@@ -238,20 +238,59 @@ tcx_blank(int blank, struct fb_info *info)
}
static struct sbus_mmap_map __tcx_mmap_map[TCX_MMAP_ENTRIES] = {
{ TCX_RAM8BIT, 0, SBUS_MMAP_FBSIZE(1) },
{ TCX_RAM24BIT, 0, SBUS_MMAP_FBSIZE(4) },
{ TCX_UNK3, 0, SBUS_MMAP_FBSIZE(8) },
{ TCX_UNK4, 0, SBUS_MMAP_FBSIZE(8) },
{ TCX_CONTROLPLANE, 0, SBUS_MMAP_FBSIZE(4) },
{ TCX_UNK6, 0, SBUS_MMAP_FBSIZE(8) },
{ TCX_UNK7, 0, SBUS_MMAP_FBSIZE(8) },
{ TCX_TEC, 0, PAGE_SIZE },
{ TCX_BTREGS, 0, PAGE_SIZE },
{ TCX_THC, 0, PAGE_SIZE },
{ TCX_DHC, 0, PAGE_SIZE },
{ TCX_ALT, 0, PAGE_SIZE },
{ TCX_UNK2, 0, 0x20000 },
{ 0, 0, 0 }
{
.voff = TCX_RAM8BIT,
.size = SBUS_MMAP_FBSIZE(1)
},
{
.voff = TCX_RAM24BIT,
.size = SBUS_MMAP_FBSIZE(4)
},
{
.voff = TCX_UNK3,
.size = SBUS_MMAP_FBSIZE(8)
},
{
.voff = TCX_UNK4,
.size = SBUS_MMAP_FBSIZE(8)
},
{
.voff = TCX_CONTROLPLANE,
.size = SBUS_MMAP_FBSIZE(4)
},
{
.voff = TCX_UNK6,
.size = SBUS_MMAP_FBSIZE(8)
},
{
.voff = TCX_UNK7,
.size = SBUS_MMAP_FBSIZE(8)
},
{
.voff = TCX_TEC,
.size = PAGE_SIZE
},
{
.voff = TCX_BTREGS,
.size = PAGE_SIZE
},
{
.voff = TCX_THC,
.size = PAGE_SIZE
},
{
.voff = TCX_DHC,
.size = PAGE_SIZE
},
{
.voff = TCX_ALT,
.size = PAGE_SIZE
},
{
.voff = TCX_UNK2,
.size = 0x20000
},
{ .size = 0 }
};
static int tcx_mmap(struct fb_info *info, struct file *file, struct vm_area_struct *vma)
......
......@@ -131,6 +131,7 @@ enum
KERN_PRINTK_RATELIMIT_BURST=61, /* int: tune printk ratelimiting */
KERN_PTY=62, /* dir: pty driver */
KERN_NGROUPS_MAX=63, /* int: NGROUPS_MAX */
KERN_SPARC_SCONS_PWROFF=64, /* int: serial console power-off halt */
};
......
......@@ -93,6 +93,7 @@ extern int sem_ctls[];
#ifdef __sparc__
extern char reboot_command [];
extern int stop_a_enabled;
extern int scons_pwroff;
#endif
#ifdef __hppa__
......@@ -325,6 +326,14 @@ static ctl_table kern_table[] = {
.mode = 0644,
.proc_handler = &proc_dointvec,
},
{
.ctl_name = KERN_SPARC_SCONS_PWROFF,
.procname = "scons-poweroff",
.data = &scons_pwroff,
.maxlen = sizeof (int),
.mode = 0644,
.proc_handler = &proc_dointvec,
},
#endif
#ifdef __hppa__
{
......
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