Commit b6940927 authored by Linus Torvalds's avatar Linus Torvalds

Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6

* git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6:
  [SPARC64]: Add regs_return_value().
  [SPARC64]: Kill pcic_present().
  [SPARC]: Kill 'prom_palette'.
  [ATYFB]: Kill 'prom_palette' sparc code.
  [SPARC64]: Kill 'prom_keyboard'.
  [SPARC]: Kill extern decl of 'panic_setup'.
  [SPARC64]: Delete 'boot_flags'.
  [SPARC64]: Kill unused function 'kernel_enter_debugger'.
  [SPARC64] arch/sparc64/kernel/unaligned.c: Use time_* macros
  [SPARC64]: Always register a PROM based early console.
  [SPARC64]: Update defconfig.
  [SPARC64]: Add -mtune=ultrasparc3 if possible.
  [SPARC64]: Remove Makefile code for ancient gcc and binutils.
  [SPARC64]: Remove DEBUG_BOOTMEM.
  [SPARC64]: Use shorter "get_zeroed_page" call.
  [SPARC]: Use shorter form of "get_zeroed_page".
  [SPARC]: video/cg14.c and video/sbuslib.c build fixes
parents 07ce198a f6d091e0
...@@ -141,16 +141,12 @@ void cpu_idle(void) ...@@ -141,16 +141,12 @@ void cpu_idle(void)
extern char reboot_command []; extern char reboot_command [];
extern void (*prom_palette)(int);
/* XXX cli/sti -> local_irq_xxx here, check this works once SMP is fixed. */ /* XXX cli/sti -> local_irq_xxx here, check this works once SMP is fixed. */
void machine_halt(void) void machine_halt(void)
{ {
local_irq_enable(); local_irq_enable();
mdelay(8); mdelay(8);
local_irq_disable(); local_irq_disable();
if (prom_palette)
prom_palette (1);
prom_halt(); prom_halt();
panic("Halt failed!"); panic("Halt failed!");
} }
...@@ -165,8 +161,6 @@ void machine_restart(char * cmd) ...@@ -165,8 +161,6 @@ void machine_restart(char * cmd)
p = strchr (reboot_command, '\n'); p = strchr (reboot_command, '\n');
if (p) *p = 0; if (p) *p = 0;
if (prom_palette)
prom_palette (1);
if (cmd) if (cmd)
prom_reboot(cmd); prom_reboot(cmd);
if (*reboot_command) if (*reboot_command)
......
...@@ -65,7 +65,6 @@ struct screen_info screen_info = { ...@@ -65,7 +65,6 @@ struct screen_info screen_info = {
*/ */
extern unsigned long trapbase; extern unsigned long trapbase;
void (*prom_palette)(int);
/* Pretty sick eh? */ /* Pretty sick eh? */
void prom_sync_me(void) void prom_sync_me(void)
...@@ -80,8 +79,6 @@ void prom_sync_me(void) ...@@ -80,8 +79,6 @@ void prom_sync_me(void)
"nop\n\t" "nop\n\t"
"nop\n\t" : : "r" (&trapbase)); "nop\n\t" : : "r" (&trapbase));
if (prom_palette)
prom_palette(1);
prom_printf("PROM SYNC COMMAND...\n"); prom_printf("PROM SYNC COMMAND...\n");
show_free_areas(); show_free_areas();
if(current->pid != 0) { if(current->pid != 0) {
...@@ -191,7 +188,6 @@ extern int prom_probe_memory(void); ...@@ -191,7 +188,6 @@ extern int prom_probe_memory(void);
extern void sun4c_probe_vac(void); extern void sun4c_probe_vac(void);
extern char cputypval; extern char cputypval;
extern unsigned long start, end; extern unsigned long start, end;
extern void panic_setup(char *, int *);
extern unsigned short root_flags; extern unsigned short root_flags;
extern unsigned short root_dev; extern unsigned short root_dev;
......
...@@ -1941,9 +1941,7 @@ static pte_t *sun4c_pte_alloc_one_kernel(struct mm_struct *mm, unsigned long add ...@@ -1941,9 +1941,7 @@ static pte_t *sun4c_pte_alloc_one_kernel(struct mm_struct *mm, unsigned long add
if ((pte = sun4c_pte_alloc_one_fast(mm, address)) != NULL) if ((pte = sun4c_pte_alloc_one_fast(mm, address)) != NULL)
return pte; return pte;
pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT); pte = (pte_t *)get_zeroed_page(GFP_KERNEL|__GFP_REPEAT);
if (pte)
memset(pte, 0, PAGE_SIZE);
return pte; return pte;
} }
......
...@@ -45,9 +45,6 @@ prom_feval(char *fstring) ...@@ -45,9 +45,6 @@ prom_feval(char *fstring)
spin_unlock_irqrestore(&prom_lock, flags); spin_unlock_irqrestore(&prom_lock, flags);
} }
/* We want to do this more nicely some day. */
extern void (*prom_palette)(int);
/* Drop into the prom, with the chance to continue with the 'go' /* Drop into the prom, with the chance to continue with the 'go'
* prom command. * prom command.
*/ */
...@@ -58,8 +55,6 @@ prom_cmdline(void) ...@@ -58,8 +55,6 @@ prom_cmdline(void)
extern void install_linux_ticker(void); extern void install_linux_ticker(void);
unsigned long flags; unsigned long flags;
if (prom_palette)
prom_palette (1);
spin_lock_irqsave(&prom_lock, flags); spin_lock_irqsave(&prom_lock, flags);
install_obp_ticker(); install_obp_ticker();
(*(romvec->pv_abort))(); (*(romvec->pv_abort))();
...@@ -69,8 +64,6 @@ prom_cmdline(void) ...@@ -69,8 +64,6 @@ prom_cmdline(void)
#ifdef CONFIG_SUN_AUXIO #ifdef CONFIG_SUN_AUXIO
set_auxio(AUXIO_LED, 0); set_auxio(AUXIO_LED, 0);
#endif #endif
if (prom_palette)
prom_palette (0);
} }
/* Drop into the prom, but completely terminate the program. /* Drop into the prom, but completely terminate the program.
......
...@@ -23,10 +23,6 @@ config STACK_DEBUG ...@@ -23,10 +23,6 @@ config STACK_DEBUG
depends on DEBUG_KERNEL depends on DEBUG_KERNEL
bool "Stack Overflow Detection Support" bool "Stack Overflow Detection Support"
config DEBUG_BOOTMEM
depends on DEBUG_KERNEL
bool "Debug BOOTMEM initialization"
config DEBUG_PAGEALLOC config DEBUG_PAGEALLOC
bool "Debug page memory allocations" bool "Debug page memory allocations"
depends on DEBUG_KERNEL && !HIBERNATION depends on DEBUG_KERNEL && !HIBERNATION
......
...@@ -12,39 +12,13 @@ CHECKFLAGS += -D__sparc__ -D__sparc_v9__ -m64 ...@@ -12,39 +12,13 @@ CHECKFLAGS += -D__sparc__ -D__sparc_v9__ -m64
CPPFLAGS_vmlinux.lds += -Usparc CPPFLAGS_vmlinux.lds += -Usparc
CC := $(shell if $(CC) -m64 -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo $(CC); else echo sparc64-linux-gcc; fi )
NEW_GCC := $(call cc-option-yn, -m64 -mcmodel=medlow)
NEW_GAS := $(shell if $(LD) -V 2>&1 | grep 'elf64_sparc' > /dev/null; then echo y; else echo n; fi)
UNDECLARED_REGS := $(shell if $(CC) -c -x assembler /dev/null -Wa,--help | grep undeclared-regs > /dev/null; then echo y; else echo n; fi; )
ifneq ($(NEW_GAS),y)
AS = sparc64-linux-as
LD = sparc64-linux-ld
NM = sparc64-linux-nm
AR = sparc64-linux-ar
RANLIB = sparc64-linux-ranlib
else
AS := $(AS) -64
LDFLAGS := -m elf64_sparc LDFLAGS := -m elf64_sparc
endif
ifneq ($(UNDECLARED_REGS),y) KBUILD_CFLAGS += -m64 -pipe -mno-fpu -mcpu=ultrasparc -mcmodel=medlow \
CC_UNDECL = -ffixed-g4 -ffixed-g5 -fcall-used-g7 -Wno-sign-compare \
else -Wa,--undeclared-regs
CC_UNDECL = -Wa,--undeclared-regs KBUILD_CFLAGS += $(call cc-option,-mtune=ultrasparc3)
AS := $(AS) --undeclared-regs KBUILD_AFLAGS += -m64 -mcpu=ultrasparc -Wa,--undeclared-regs
endif
ifneq ($(NEW_GCC),y)
KBUILD_CFLAGS += -pipe -mno-fpu -mtune=ultrasparc -mmedlow \
-ffixed-g4 -ffixed-g5 -fcall-used-g7 -Wno-sign-compare
else
KBUILD_CFLAGS += -m64 -pipe -mno-fpu -mcpu=ultrasparc -mcmodel=medlow \
-ffixed-g4 -ffixed-g5 -fcall-used-g7 -Wno-sign-compare \
$(CC_UNDECL)
KBUILD_AFLAGS += -m64 -mcpu=ultrasparc $(CC_UNDECL)
endif
ifeq ($(CONFIG_MCOUNT),y) ifeq ($(CONFIG_MCOUNT),y)
KBUILD_CFLAGS += -pg KBUILD_CFLAGS += -pg
......
# #
# Automatically generated make config: don't edit # Automatically generated make config: don't edit
# Linux kernel version: 2.6.24 # Linux kernel version: 2.6.25-rc1
# Tue Feb 5 17:28:19 2008 # Sun Feb 17 22:44:12 2008
# #
CONFIG_SPARC=y CONFIG_SPARC=y
CONFIG_SPARC64=y CONFIG_SPARC64=y
...@@ -10,6 +10,7 @@ CONFIG_GENERIC_CMOS_UPDATE=y ...@@ -10,6 +10,7 @@ CONFIG_GENERIC_CMOS_UPDATE=y
CONFIG_GENERIC_CLOCKEVENTS=y CONFIG_GENERIC_CLOCKEVENTS=y
CONFIG_64BIT=y CONFIG_64BIT=y
CONFIG_MMU=y CONFIG_MMU=y
CONFIG_IOMMU_HELPER=y
CONFIG_QUICKLIST=y CONFIG_QUICKLIST=y
CONFIG_STACKTRACE_SUPPORT=y CONFIG_STACKTRACE_SUPPORT=y
CONFIG_LOCKDEP_SUPPORT=y CONFIG_LOCKDEP_SUPPORT=y
...@@ -21,6 +22,7 @@ CONFIG_HAVE_SETUP_PER_CPU_AREA=y ...@@ -21,6 +22,7 @@ CONFIG_HAVE_SETUP_PER_CPU_AREA=y
CONFIG_ARCH_NO_VIRT_TO_BUS=y CONFIG_ARCH_NO_VIRT_TO_BUS=y
CONFIG_OF=y CONFIG_OF=y
CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
CONFIG_ARCH_SUPPORTS_AOUT=y
CONFIG_SPARC64_PAGE_SIZE_8KB=y CONFIG_SPARC64_PAGE_SIZE_8KB=y
# CONFIG_SPARC64_PAGE_SIZE_64KB is not set # CONFIG_SPARC64_PAGE_SIZE_64KB is not set
# CONFIG_SPARC64_PAGE_SIZE_512KB is not set # CONFIG_SPARC64_PAGE_SIZE_512KB is not set
...@@ -49,8 +51,6 @@ CONFIG_SYSVIPC_SYSCTL=y ...@@ -49,8 +51,6 @@ CONFIG_SYSVIPC_SYSCTL=y
CONFIG_POSIX_MQUEUE=y CONFIG_POSIX_MQUEUE=y
# CONFIG_BSD_PROCESS_ACCT is not set # CONFIG_BSD_PROCESS_ACCT is not set
# CONFIG_TASKSTATS is not set # CONFIG_TASKSTATS is not set
# CONFIG_USER_NS is not set
# CONFIG_PID_NS is not set
# CONFIG_AUDIT is not set # CONFIG_AUDIT is not set
# CONFIG_IKCONFIG is not set # CONFIG_IKCONFIG is not set
CONFIG_LOG_BUF_SHIFT=18 CONFIG_LOG_BUF_SHIFT=18
...@@ -60,6 +60,11 @@ CONFIG_FAIR_USER_SCHED=y ...@@ -60,6 +60,11 @@ CONFIG_FAIR_USER_SCHED=y
# CONFIG_FAIR_CGROUP_SCHED is not set # CONFIG_FAIR_CGROUP_SCHED is not set
CONFIG_SYSFS_DEPRECATED=y CONFIG_SYSFS_DEPRECATED=y
CONFIG_RELAY=y CONFIG_RELAY=y
CONFIG_NAMESPACES=y
# CONFIG_UTS_NS is not set
# CONFIG_IPC_NS is not set
# CONFIG_USER_NS is not set
# CONFIG_PID_NS is not set
CONFIG_BLK_DEV_INITRD=y CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE="" CONFIG_INITRAMFS_SOURCE=""
CONFIG_CC_OPTIMIZE_FOR_SIZE=y CONFIG_CC_OPTIMIZE_FOR_SIZE=y
...@@ -74,6 +79,7 @@ CONFIG_HOTPLUG=y ...@@ -74,6 +79,7 @@ CONFIG_HOTPLUG=y
CONFIG_PRINTK=y CONFIG_PRINTK=y
CONFIG_BUG=y CONFIG_BUG=y
CONFIG_ELF_CORE=y CONFIG_ELF_CORE=y
# CONFIG_COMPAT_BRK is not set
CONFIG_BASE_FULL=y CONFIG_BASE_FULL=y
CONFIG_FUTEX=y CONFIG_FUTEX=y
CONFIG_ANON_INODES=y CONFIG_ANON_INODES=y
...@@ -176,13 +182,13 @@ CONFIG_PCI_MSI=y ...@@ -176,13 +182,13 @@ CONFIG_PCI_MSI=y
CONFIG_SUN_OPENPROMFS=m CONFIG_SUN_OPENPROMFS=m
CONFIG_SPARC32_COMPAT=y CONFIG_SPARC32_COMPAT=y
CONFIG_COMPAT=y CONFIG_COMPAT=y
CONFIG_BINFMT_ELF32=y
# CONFIG_BINFMT_AOUT32 is not set # CONFIG_BINFMT_AOUT32 is not set
# #
# Executable file formats # Executable file formats
# #
CONFIG_BINFMT_ELF=y CONFIG_BINFMT_ELF=y
CONFIG_COMPAT_BINFMT_ELF=y
CONFIG_BINFMT_MISC=m CONFIG_BINFMT_MISC=m
CONFIG_SOLARIS_EMUL=y CONFIG_SOLARIS_EMUL=y
CONFIG_SCHED_SMT=y CONFIG_SCHED_SMT=y
...@@ -354,6 +360,8 @@ CONFIG_MISC_DEVICES=y ...@@ -354,6 +360,8 @@ CONFIG_MISC_DEVICES=y
# CONFIG_EEPROM_93CX6 is not set # CONFIG_EEPROM_93CX6 is not set
# CONFIG_SGI_IOC4 is not set # CONFIG_SGI_IOC4 is not set
# CONFIG_TIFM_CORE is not set # CONFIG_TIFM_CORE is not set
# CONFIG_ENCLOSURE_SERVICES is not set
CONFIG_HAVE_IDE=y
CONFIG_IDE=y CONFIG_IDE=y
CONFIG_BLK_DEV_IDE=y CONFIG_BLK_DEV_IDE=y
...@@ -376,6 +384,7 @@ CONFIG_IDE_PROC_FS=y ...@@ -376,6 +384,7 @@ CONFIG_IDE_PROC_FS=y
# #
CONFIG_IDE_GENERIC=y CONFIG_IDE_GENERIC=y
# CONFIG_BLK_DEV_PLATFORM is not set # CONFIG_BLK_DEV_PLATFORM is not set
CONFIG_BLK_DEV_IDEDMA_SFF=y
# #
# PCI IDE chipsets support # PCI IDE chipsets support
...@@ -775,7 +784,6 @@ CONFIG_I2C_ALGOBIT=y ...@@ -775,7 +784,6 @@ CONFIG_I2C_ALGOBIT=y
# CONFIG_SENSORS_EEPROM is not set # CONFIG_SENSORS_EEPROM is not set
# CONFIG_SENSORS_PCF8574 is not set # CONFIG_SENSORS_PCF8574 is not set
# CONFIG_PCF8575 is not set # CONFIG_PCF8575 is not set
# CONFIG_SENSORS_PCA9539 is not set
# CONFIG_SENSORS_PCF8591 is not set # CONFIG_SENSORS_PCF8591 is not set
# CONFIG_TPS65010 is not set # CONFIG_TPS65010 is not set
# CONFIG_SENSORS_MAX6875 is not set # CONFIG_SENSORS_MAX6875 is not set
...@@ -831,6 +839,7 @@ CONFIG_HWMON=y ...@@ -831,6 +839,7 @@ CONFIG_HWMON=y
# CONFIG_SENSORS_SMSC47M1 is not set # CONFIG_SENSORS_SMSC47M1 is not set
# CONFIG_SENSORS_SMSC47M192 is not set # CONFIG_SENSORS_SMSC47M192 is not set
# CONFIG_SENSORS_SMSC47B397 is not set # CONFIG_SENSORS_SMSC47B397 is not set
# CONFIG_SENSORS_ADS7828 is not set
# CONFIG_SENSORS_THMC50 is not set # CONFIG_SENSORS_THMC50 is not set
# CONFIG_SENSORS_VIA686A is not set # CONFIG_SENSORS_VIA686A is not set
# CONFIG_SENSORS_VT1211 is not set # CONFIG_SENSORS_VT1211 is not set
...@@ -840,9 +849,11 @@ CONFIG_HWMON=y ...@@ -840,9 +849,11 @@ CONFIG_HWMON=y
# CONFIG_SENSORS_W83792D is not set # CONFIG_SENSORS_W83792D is not set
# CONFIG_SENSORS_W83793 is not set # CONFIG_SENSORS_W83793 is not set
# CONFIG_SENSORS_W83L785TS is not set # CONFIG_SENSORS_W83L785TS is not set
# CONFIG_SENSORS_W83L786NG is not set
# CONFIG_SENSORS_W83627HF is not set # CONFIG_SENSORS_W83627HF is not set
# CONFIG_SENSORS_W83627EHF is not set # CONFIG_SENSORS_W83627EHF is not set
# CONFIG_HWMON_DEBUG_CHIP is not set # CONFIG_HWMON_DEBUG_CHIP is not set
# CONFIG_THERMAL is not set
# CONFIG_WATCHDOG is not set # CONFIG_WATCHDOG is not set
# #
...@@ -1201,6 +1212,7 @@ CONFIG_USB_STORAGE=m ...@@ -1201,6 +1212,7 @@ CONFIG_USB_STORAGE=m
# CONFIG_USB_TEST is not set # CONFIG_USB_TEST is not set
# CONFIG_USB_GADGET is not set # CONFIG_USB_GADGET is not set
# CONFIG_MMC is not set # CONFIG_MMC is not set
# CONFIG_MEMSTICK is not set
# CONFIG_NEW_LEDS is not set # CONFIG_NEW_LEDS is not set
# CONFIG_INFINIBAND is not set # CONFIG_INFINIBAND is not set
# CONFIG_RTC_CLASS is not set # CONFIG_RTC_CLASS is not set
...@@ -1242,12 +1254,10 @@ CONFIG_FS_POSIX_ACL=y ...@@ -1242,12 +1254,10 @@ CONFIG_FS_POSIX_ACL=y
# CONFIG_XFS_FS is not set # CONFIG_XFS_FS is not set
# CONFIG_GFS2_FS is not set # CONFIG_GFS2_FS is not set
# CONFIG_OCFS2_FS is not set # CONFIG_OCFS2_FS is not set
# CONFIG_MINIX_FS is not set CONFIG_DNOTIFY=y
# CONFIG_ROMFS_FS is not set
CONFIG_INOTIFY=y CONFIG_INOTIFY=y
CONFIG_INOTIFY_USER=y CONFIG_INOTIFY_USER=y
# CONFIG_QUOTA is not set # CONFIG_QUOTA is not set
CONFIG_DNOTIFY=y
# CONFIG_AUTOFS_FS is not set # CONFIG_AUTOFS_FS is not set
# CONFIG_AUTOFS4_FS is not set # CONFIG_AUTOFS4_FS is not set
# CONFIG_FUSE_FS is not set # CONFIG_FUSE_FS is not set
...@@ -1291,8 +1301,10 @@ CONFIG_HUGETLB_PAGE=y ...@@ -1291,8 +1301,10 @@ CONFIG_HUGETLB_PAGE=y
# CONFIG_EFS_FS is not set # CONFIG_EFS_FS is not set
# CONFIG_CRAMFS is not set # CONFIG_CRAMFS is not set
# CONFIG_VXFS_FS is not set # CONFIG_VXFS_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_HPFS_FS is not set # CONFIG_HPFS_FS is not set
# CONFIG_QNX4FS_FS is not set # CONFIG_QNX4FS_FS is not set
# CONFIG_ROMFS_FS is not set
# CONFIG_SYSV_FS is not set # CONFIG_SYSV_FS is not set
# CONFIG_UFS_FS is not set # CONFIG_UFS_FS is not set
CONFIG_NETWORK_FILESYSTEMS=y CONFIG_NETWORK_FILESYSTEMS=y
...@@ -1370,6 +1382,7 @@ CONFIG_DETECT_SOFTLOCKUP=y ...@@ -1370,6 +1382,7 @@ CONFIG_DETECT_SOFTLOCKUP=y
CONFIG_SCHEDSTATS=y CONFIG_SCHEDSTATS=y
# CONFIG_TIMER_STATS is not set # CONFIG_TIMER_STATS is not set
# CONFIG_SLUB_DEBUG_ON is not set # CONFIG_SLUB_DEBUG_ON is not set
# CONFIG_SLUB_STATS is not set
# CONFIG_DEBUG_RT_MUTEXES is not set # CONFIG_DEBUG_RT_MUTEXES is not set
# CONFIG_RT_MUTEX_TESTER is not set # CONFIG_RT_MUTEX_TESTER is not set
# CONFIG_DEBUG_SPINLOCK is not set # CONFIG_DEBUG_SPINLOCK is not set
...@@ -1385,7 +1398,6 @@ CONFIG_DEBUG_BUGVERBOSE=y ...@@ -1385,7 +1398,6 @@ CONFIG_DEBUG_BUGVERBOSE=y
# CONFIG_DEBUG_VM is not set # CONFIG_DEBUG_VM is not set
# CONFIG_DEBUG_LIST is not set # CONFIG_DEBUG_LIST is not set
# CONFIG_DEBUG_SG is not set # CONFIG_DEBUG_SG is not set
CONFIG_FORCED_INLINING=y
# CONFIG_BOOT_PRINTK_DELAY is not set # CONFIG_BOOT_PRINTK_DELAY is not set
# CONFIG_RCU_TORTURE_TEST is not set # CONFIG_RCU_TORTURE_TEST is not set
# CONFIG_KPROBES_SANITY_TEST is not set # CONFIG_KPROBES_SANITY_TEST is not set
...@@ -1396,7 +1408,6 @@ CONFIG_FORCED_INLINING=y ...@@ -1396,7 +1408,6 @@ CONFIG_FORCED_INLINING=y
# CONFIG_DEBUG_STACK_USAGE is not set # CONFIG_DEBUG_STACK_USAGE is not set
# CONFIG_DEBUG_DCFLUSH is not set # CONFIG_DEBUG_DCFLUSH is not set
# CONFIG_STACK_DEBUG is not set # CONFIG_STACK_DEBUG is not set
# CONFIG_DEBUG_BOOTMEM is not set
# CONFIG_DEBUG_PAGEALLOC is not set # CONFIG_DEBUG_PAGEALLOC is not set
# #
......
...@@ -200,12 +200,11 @@ int iommu_table_init(struct iommu *iommu, int tsbsize, ...@@ -200,12 +200,11 @@ int iommu_table_init(struct iommu *iommu, int tsbsize,
/* Allocate and initialize the dummy page which we /* Allocate and initialize the dummy page which we
* set inactive IO PTEs to point to. * set inactive IO PTEs to point to.
*/ */
iommu->dummy_page = __get_free_pages(GFP_KERNEL, 0); iommu->dummy_page = get_zeroed_page(GFP_KERNEL);
if (!iommu->dummy_page) { if (!iommu->dummy_page) {
printk(KERN_ERR "IOMMU: Error, gfp(dummy_page) failed.\n"); printk(KERN_ERR "IOMMU: Error, gfp(dummy_page) failed.\n");
goto out_free_map; goto out_free_map;
} }
memset((void *)iommu->dummy_page, 0, PAGE_SIZE);
iommu->dummy_page_pa = (unsigned long) __pa(iommu->dummy_page); iommu->dummy_page_pa = (unsigned long) __pa(iommu->dummy_page);
/* Now allocate and setup the IOMMU page table itself. */ /* Now allocate and setup the IOMMU page table itself. */
......
...@@ -225,20 +225,6 @@ static int __init pci_controller_init(const char *model_name, int namelen, struc ...@@ -225,20 +225,6 @@ static int __init pci_controller_init(const char *model_name, int namelen, struc
return 0; return 0;
} }
static int __init pci_is_controller(const char *model_name, int namelen, struct device_node *dp)
{
int i;
for (i = 0; i < PCI_NUM_CONTROLLER_TYPES; i++) {
if (!strncmp(model_name,
pci_controller_table[i].model_name,
namelen)) {
return 1;
}
}
return 0;
}
static int __init pci_controller_scan(int (*handler)(const char *, int, struct device_node *)) static int __init pci_controller_scan(int (*handler)(const char *, int, struct device_node *))
{ {
struct device_node *dp; struct device_node *dp;
...@@ -273,13 +259,6 @@ static int __init pci_controller_scan(int (*handler)(const char *, int, struct d ...@@ -273,13 +259,6 @@ static int __init pci_controller_scan(int (*handler)(const char *, int, struct d
return count; return count;
} }
/* Is there some PCI controller in the system? */
int __init pcic_present(void)
{
return pci_controller_scan(pci_is_controller);
}
/* Find each controller in the system, attach and initialize /* Find each controller in the system, attach and initialize
* software state structure for each and link into the * software state structure for each and link into the
* pci_pbm_root. Setup the controller enough such * pci_pbm_root. Setup the controller enough such
......
...@@ -113,16 +113,9 @@ void cpu_idle(void) ...@@ -113,16 +113,9 @@ void cpu_idle(void)
extern char reboot_command []; extern char reboot_command [];
extern void (*prom_palette)(int);
extern void (*prom_keyboard)(void);
void machine_halt(void) void machine_halt(void)
{ {
sstate_halt(); sstate_halt();
if (prom_palette)
prom_palette (1);
if (prom_keyboard)
prom_keyboard();
prom_halt(); prom_halt();
panic("Halt failed!"); panic("Halt failed!");
} }
...@@ -130,10 +123,6 @@ void machine_halt(void) ...@@ -130,10 +123,6 @@ void machine_halt(void)
void machine_alt_power_off(void) void machine_alt_power_off(void)
{ {
sstate_poweroff(); sstate_poweroff();
if (prom_palette)
prom_palette(1);
if (prom_keyboard)
prom_keyboard();
prom_halt_power_off(); prom_halt_power_off();
panic("Power-off failed!"); panic("Power-off failed!");
} }
...@@ -145,10 +134,6 @@ void machine_restart(char * cmd) ...@@ -145,10 +134,6 @@ void machine_restart(char * cmd)
sstate_reboot(); sstate_reboot();
p = strchr (reboot_command, '\n'); p = strchr (reboot_command, '\n');
if (p) *p = 0; if (p) *p = 0;
if (prom_palette)
prom_palette (1);
if (prom_keyboard)
prom_keyboard();
if (cmd) if (cmd)
prom_reboot(cmd); prom_reboot(cmd);
if (*reboot_command) if (*reboot_command)
......
...@@ -1716,7 +1716,6 @@ static void __init of_console_init(void) ...@@ -1716,7 +1716,6 @@ static void __init of_console_init(void)
of_console_device = dp; of_console_device = dp;
prom_printf(msg, of_console_path);
printk(msg, of_console_path); printk(msg, of_console_path);
} }
......
...@@ -68,33 +68,22 @@ struct screen_info screen_info = { ...@@ -68,33 +68,22 @@ struct screen_info screen_info = {
16 /* orig-video-points */ 16 /* orig-video-points */
}; };
void (*prom_palette)(int);
void (*prom_keyboard)(void);
static void static void
prom_console_write(struct console *con, const char *s, unsigned n) prom_console_write(struct console *con, const char *s, unsigned n)
{ {
prom_write(s, n); prom_write(s, n);
} }
unsigned int boot_flags = 0;
#define BOOTME_DEBUG 0x1
/* Exported for mm/init.c:paging_init. */ /* Exported for mm/init.c:paging_init. */
unsigned long cmdline_memory_size = 0; unsigned long cmdline_memory_size = 0;
static struct console prom_debug_console = { static struct console prom_early_console = {
.name = "debug", .name = "earlyprom",
.write = prom_console_write, .write = prom_console_write,
.flags = CON_PRINTBUFFER, .flags = CON_PRINTBUFFER | CON_BOOT,
.index = -1, .index = -1,
}; };
/* XXX Implement this at some point... */
void kernel_enter_debugger(void)
{
}
/* /*
* Process kernel command line switches that are specific to the * Process kernel command line switches that are specific to the
* SPARC or that require special low-level processing. * SPARC or that require special low-level processing.
...@@ -103,8 +92,6 @@ static void __init process_switch(char c) ...@@ -103,8 +92,6 @@ static void __init process_switch(char c)
{ {
switch (c) { switch (c) {
case 'd': case 'd':
boot_flags |= BOOTME_DEBUG;
break;
case 's': case 's':
break; break;
case 'h': case 'h':
...@@ -112,8 +99,7 @@ static void __init process_switch(char c) ...@@ -112,8 +99,7 @@ static void __init process_switch(char c)
prom_halt(); prom_halt();
break; break;
case 'p': case 'p':
/* Use PROM debug console. */ /* Just ignore, this behavior is now the default. */
register_console(&prom_debug_console);
break; break;
case 'P': case 'P':
/* Force UltraSPARC-III P-Cache on. */ /* Force UltraSPARC-III P-Cache on. */
...@@ -168,8 +154,6 @@ static void __init boot_flags_init(char *commands) ...@@ -168,8 +154,6 @@ static void __init boot_flags_init(char *commands)
} }
} }
extern void panic_setup(char *, int *);
extern unsigned short root_flags; extern unsigned short root_flags;
extern unsigned short root_dev; extern unsigned short root_dev;
extern unsigned short ram_flags; extern unsigned short ram_flags;
...@@ -296,6 +280,9 @@ void __init setup_arch(char **cmdline_p) ...@@ -296,6 +280,9 @@ void __init setup_arch(char **cmdline_p)
*cmdline_p = prom_getbootargs(); *cmdline_p = prom_getbootargs();
strcpy(boot_command_line, *cmdline_p); strcpy(boot_command_line, *cmdline_p);
boot_flags_init(*cmdline_p);
register_console(&prom_early_console);
if (tlb_type == hypervisor) if (tlb_type == hypervisor)
printk("ARCH: SUN4V\n"); printk("ARCH: SUN4V\n");
else else
...@@ -307,8 +294,6 @@ void __init setup_arch(char **cmdline_p) ...@@ -307,8 +294,6 @@ void __init setup_arch(char **cmdline_p)
conswitchp = &prom_con; conswitchp = &prom_con;
#endif #endif
boot_flags_init(*cmdline_p);
idprom_init(); idprom_init();
if (!root_flags) if (!root_flags)
......
...@@ -85,7 +85,6 @@ extern int (*handle_mathemu)(struct pt_regs *, struct fpustate *); ...@@ -85,7 +85,6 @@ extern int (*handle_mathemu)(struct pt_regs *, struct fpustate *);
extern long sparc32_open(const char __user * filename, int flags, int mode); extern long sparc32_open(const char __user * filename, int flags, int mode);
extern int io_remap_pfn_range(struct vm_area_struct *vma, unsigned long from, extern int io_remap_pfn_range(struct vm_area_struct *vma, unsigned long from,
unsigned long pfn, unsigned long size, pgprot_t prot); unsigned long pfn, unsigned long size, pgprot_t prot);
extern void (*prom_palette)(int);
extern int __ashrdi3(int, int); extern int __ashrdi3(int, int);
...@@ -355,5 +354,3 @@ EXPORT_SYMBOL(xor_niagara_2); ...@@ -355,5 +354,3 @@ EXPORT_SYMBOL(xor_niagara_2);
EXPORT_SYMBOL(xor_niagara_3); EXPORT_SYMBOL(xor_niagara_3);
EXPORT_SYMBOL(xor_niagara_4); EXPORT_SYMBOL(xor_niagara_4);
EXPORT_SYMBOL(xor_niagara_5); EXPORT_SYMBOL(xor_niagara_5);
EXPORT_SYMBOL(prom_palette);
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
*/ */
#include <linux/jiffies.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/mm.h> #include <linux/mm.h>
...@@ -283,7 +284,7 @@ static void log_unaligned(struct pt_regs *regs) ...@@ -283,7 +284,7 @@ static void log_unaligned(struct pt_regs *regs)
{ {
static unsigned long count, last_time; static unsigned long count, last_time;
if (jiffies - last_time > 5 * HZ) if (time_after(jiffies, last_time + 5 * HZ))
count = 0; count = 0;
if (count < 5) { if (count < 5) {
last_time = jiffies; last_time = jiffies;
......
...@@ -618,9 +618,9 @@ static void __init inherit_prom_mappings(void) ...@@ -618,9 +618,9 @@ static void __init inherit_prom_mappings(void)
read_obp_translations(); read_obp_translations();
/* Now fixup OBP's idea about where we really are mapped. */ /* Now fixup OBP's idea about where we really are mapped. */
prom_printf("Remapping the kernel... "); printk("Remapping the kernel... ");
remap_kernel(); remap_kernel();
prom_printf("done.\n"); printk("done.\n");
} }
void prom_world(int enter) void prom_world(int enter)
...@@ -739,11 +739,6 @@ static unsigned long __init choose_bootmap_pfn(unsigned long start_pfn, ...@@ -739,11 +739,6 @@ static unsigned long __init choose_bootmap_pfn(unsigned long start_pfn,
avoid_end = PAGE_ALIGN(initrd_end); avoid_end = PAGE_ALIGN(initrd_end);
#endif #endif
#ifdef CONFIG_DEBUG_BOOTMEM
prom_printf("choose_bootmap_pfn: kern[%lx:%lx] avoid[%lx:%lx]\n",
kern_base, PAGE_ALIGN(kern_base + kern_size),
avoid_start, avoid_end);
#endif
for (i = 0; i < pavail_ents; i++) { for (i = 0; i < pavail_ents; i++) {
unsigned long start, end; unsigned long start, end;
...@@ -777,10 +772,6 @@ static unsigned long __init choose_bootmap_pfn(unsigned long start_pfn, ...@@ -777,10 +772,6 @@ static unsigned long __init choose_bootmap_pfn(unsigned long start_pfn,
} }
/* OK, it doesn't overlap anything, use it. */ /* OK, it doesn't overlap anything, use it. */
#ifdef CONFIG_DEBUG_BOOTMEM
prom_printf("choose_bootmap_pfn: Using %lx [%lx]\n",
start >> PAGE_SHIFT, start);
#endif
return start >> PAGE_SHIFT; return start >> PAGE_SHIFT;
} }
} }
...@@ -920,10 +911,6 @@ static unsigned long __init bootmem_init(unsigned long *pages_avail, ...@@ -920,10 +911,6 @@ static unsigned long __init bootmem_init(unsigned long *pages_avail,
unsigned long bootmap_pfn, bytes_avail, size; unsigned long bootmap_pfn, bytes_avail, size;
int i; int i;
#ifdef CONFIG_DEBUG_BOOTMEM
prom_printf("bootmem_init: Scan pavail, ");
#endif
bytes_avail = 0UL; bytes_avail = 0UL;
for (i = 0; i < pavail_ents; i++) { for (i = 0; i < pavail_ents; i++) {
end_of_phys_memory = pavail[i].phys_addr + end_of_phys_memory = pavail[i].phys_addr +
...@@ -970,33 +957,20 @@ static unsigned long __init bootmem_init(unsigned long *pages_avail, ...@@ -970,33 +957,20 @@ static unsigned long __init bootmem_init(unsigned long *pages_avail,
bootmap_pfn = choose_bootmap_pfn(min_low_pfn, end_pfn); bootmap_pfn = choose_bootmap_pfn(min_low_pfn, end_pfn);
#ifdef CONFIG_DEBUG_BOOTMEM
prom_printf("init_bootmem(min[%lx], bootmap[%lx], max[%lx])\n",
min_low_pfn, bootmap_pfn, max_low_pfn);
#endif
bootmap_size = init_bootmem_node(NODE_DATA(0), bootmap_pfn, bootmap_size = init_bootmem_node(NODE_DATA(0), bootmap_pfn,
min_low_pfn, end_pfn); min_low_pfn, end_pfn);
/* Now register the available physical memory with the /* Now register the available physical memory with the
* allocator. * allocator.
*/ */
for (i = 0; i < pavail_ents; i++) { for (i = 0; i < pavail_ents; i++)
#ifdef CONFIG_DEBUG_BOOTMEM
prom_printf("free_bootmem(pavail:%d): base[%lx] size[%lx]\n",
i, pavail[i].phys_addr, pavail[i].reg_size);
#endif
free_bootmem(pavail[i].phys_addr, pavail[i].reg_size); free_bootmem(pavail[i].phys_addr, pavail[i].reg_size);
}
#ifdef CONFIG_BLK_DEV_INITRD #ifdef CONFIG_BLK_DEV_INITRD
if (initrd_start) { if (initrd_start) {
size = initrd_end - initrd_start; size = initrd_end - initrd_start;
/* Reserve the initrd image area. */ /* Reserve the initrd image area. */
#ifdef CONFIG_DEBUG_BOOTMEM
prom_printf("reserve_bootmem(initrd): base[%llx] size[%lx]\n",
initrd_start, initrd_end);
#endif
reserve_bootmem(initrd_start, size, BOOTMEM_DEFAULT); reserve_bootmem(initrd_start, size, BOOTMEM_DEFAULT);
initrd_start += PAGE_OFFSET; initrd_start += PAGE_OFFSET;
...@@ -1004,9 +978,6 @@ static unsigned long __init bootmem_init(unsigned long *pages_avail, ...@@ -1004,9 +978,6 @@ static unsigned long __init bootmem_init(unsigned long *pages_avail,
} }
#endif #endif
/* Reserve the kernel text/data/bss. */ /* Reserve the kernel text/data/bss. */
#ifdef CONFIG_DEBUG_BOOTMEM
prom_printf("reserve_bootmem(kernel): base[%lx] size[%lx]\n", kern_base, kern_size);
#endif
reserve_bootmem(kern_base, kern_size, BOOTMEM_DEFAULT); reserve_bootmem(kern_base, kern_size, BOOTMEM_DEFAULT);
*pages_avail -= PAGE_ALIGN(kern_size) >> PAGE_SHIFT; *pages_avail -= PAGE_ALIGN(kern_size) >> PAGE_SHIFT;
...@@ -1020,10 +991,6 @@ static unsigned long __init bootmem_init(unsigned long *pages_avail, ...@@ -1020,10 +991,6 @@ static unsigned long __init bootmem_init(unsigned long *pages_avail,
* in free_all_bootmem. * in free_all_bootmem.
*/ */
size = bootmap_size; size = bootmap_size;
#ifdef CONFIG_DEBUG_BOOTMEM
prom_printf("reserve_bootmem(bootmap): base[%lx] size[%lx]\n",
(bootmap_pfn << PAGE_SHIFT), size);
#endif
reserve_bootmem((bootmap_pfn << PAGE_SHIFT), size, BOOTMEM_DEFAULT); reserve_bootmem((bootmap_pfn << PAGE_SHIFT), size, BOOTMEM_DEFAULT);
for (i = 0; i < pavail_ents; i++) { for (i = 0; i < pavail_ents; i++) {
...@@ -1031,10 +998,6 @@ static unsigned long __init bootmem_init(unsigned long *pages_avail, ...@@ -1031,10 +998,6 @@ static unsigned long __init bootmem_init(unsigned long *pages_avail,
start_pfn = pavail[i].phys_addr >> PAGE_SHIFT; start_pfn = pavail[i].phys_addr >> PAGE_SHIFT;
end_pfn = (start_pfn + (pavail[i].reg_size >> PAGE_SHIFT)); end_pfn = (start_pfn + (pavail[i].reg_size >> PAGE_SHIFT));
#ifdef CONFIG_DEBUG_BOOTMEM
prom_printf("memory_present(0, %lx, %lx)\n",
start_pfn, end_pfn);
#endif
memory_present(0, start_pfn, end_pfn); memory_present(0, start_pfn, end_pfn);
} }
...@@ -1451,7 +1414,7 @@ void __init paging_init(void) ...@@ -1451,7 +1414,7 @@ void __init paging_init(void)
zholes_size); zholes_size);
} }
prom_printf("Booting Linux...\n"); printk("Booting Linux...\n");
central_probe(); central_probe();
cpu_probe(); cpu_probe();
...@@ -1549,10 +1512,6 @@ void __init mem_init(void) ...@@ -1549,10 +1512,6 @@ void __init mem_init(void)
high_memory = __va(last_valid_pfn << PAGE_SHIFT); high_memory = __va(last_valid_pfn << PAGE_SHIFT);
#ifdef CONFIG_DEBUG_BOOTMEM
prom_printf("mem_init: Calling free_all_bootmem().\n");
#endif
/* We subtract one to account for the mem_map_zero page /* We subtract one to account for the mem_map_zero page
* allocated below. * allocated below.
*/ */
......
...@@ -55,9 +55,6 @@ void prom_feval(const char *fstring) ...@@ -55,9 +55,6 @@ void prom_feval(const char *fstring)
P1275_INOUT(1, 1), fstring); P1275_INOUT(1, 1), fstring);
} }
/* We want to do this more nicely some day. */
extern void (*prom_palette)(int);
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
extern void smp_capture(void); extern void smp_capture(void);
extern void smp_release(void); extern void smp_release(void);
...@@ -72,9 +69,6 @@ void prom_cmdline(void) ...@@ -72,9 +69,6 @@ void prom_cmdline(void)
local_irq_save(flags); local_irq_save(flags);
if (prom_palette)
prom_palette(1);
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
smp_capture(); smp_capture();
#endif #endif
...@@ -85,9 +79,6 @@ void prom_cmdline(void) ...@@ -85,9 +79,6 @@ void prom_cmdline(void)
smp_release(); smp_release();
#endif #endif
if (prom_palette)
prom_palette(0);
local_irq_restore(flags); local_irq_restore(flags);
} }
......
...@@ -1913,61 +1913,6 @@ static int atyfb_mmap(struct fb_info *info, struct vm_area_struct *vma) ...@@ -1913,61 +1913,6 @@ static int atyfb_mmap(struct fb_info *info, struct vm_area_struct *vma)
par->mmaped = 1; par->mmaped = 1;
return 0; return 0;
} }
static struct {
u32 yoffset;
u8 r[2][256];
u8 g[2][256];
u8 b[2][256];
} atyfb_save;
static void atyfb_save_palette(struct atyfb_par *par, int enter)
{
int i, tmp;
for (i = 0; i < 256; i++) {
tmp = aty_ld_8(DAC_CNTL, par) & 0xfc;
if (M64_HAS(EXTRA_BRIGHT))
tmp |= 0x2;
aty_st_8(DAC_CNTL, tmp, par);
aty_st_8(DAC_MASK, 0xff, par);
aty_st_8(DAC_R_INDEX, i, par);
atyfb_save.r[enter][i] = aty_ld_8(DAC_DATA, par);
atyfb_save.g[enter][i] = aty_ld_8(DAC_DATA, par);
atyfb_save.b[enter][i] = aty_ld_8(DAC_DATA, par);
aty_st_8(DAC_W_INDEX, i, par);
aty_st_8(DAC_DATA, atyfb_save.r[1 - enter][i], par);
aty_st_8(DAC_DATA, atyfb_save.g[1 - enter][i], par);
aty_st_8(DAC_DATA, atyfb_save.b[1 - enter][i], par);
}
}
static void atyfb_palette(int enter)
{
struct atyfb_par *par;
struct fb_info *info;
int i;
for (i = 0; i < FB_MAX; i++) {
info = registered_fb[i];
if (info && info->fbops == &atyfb_ops) {
par = (struct atyfb_par *) info->par;
atyfb_save_palette(par, enter);
if (enter) {
atyfb_save.yoffset = info->var.yoffset;
info->var.yoffset = 0;
set_off_pitch(par, info);
} else {
info->var.yoffset = atyfb_save.yoffset;
set_off_pitch(par, info);
}
aty_st_le32(CRTC_OFF_PITCH, par->crtc.off_pitch, par);
break;
}
}
}
#endif /* __sparc__ */ #endif /* __sparc__ */
...@@ -2670,10 +2615,6 @@ static int __devinit aty_init(struct fb_info *info) ...@@ -2670,10 +2615,6 @@ static int __devinit aty_init(struct fb_info *info)
goto aty_init_exit; goto aty_init_exit;
} }
#ifdef __sparc__
atyfb_save_palette(par, 0);
#endif
#ifdef CONFIG_FB_ATY_CT #ifdef CONFIG_FB_ATY_CT
if (!noaccel && M64_HAS(INTEGRATED)) if (!noaccel && M64_HAS(INTEGRATED))
aty_init_cursor(info); aty_init_cursor(info);
...@@ -2900,8 +2841,6 @@ static int atyfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, ...@@ -2900,8 +2841,6 @@ static int atyfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
#ifdef __sparc__ #ifdef __sparc__
extern void (*prom_palette) (int);
static int __devinit atyfb_setup_sparc(struct pci_dev *pdev, static int __devinit atyfb_setup_sparc(struct pci_dev *pdev,
struct fb_info *info, unsigned long addr) struct fb_info *info, unsigned long addr)
{ {
...@@ -3536,9 +3475,6 @@ static int __devinit atyfb_pci_probe(struct pci_dev *pdev, const struct pci_devi ...@@ -3536,9 +3475,6 @@ static int __devinit atyfb_pci_probe(struct pci_dev *pdev, const struct pci_devi
goto err_release_io; goto err_release_io;
#ifdef __sparc__ #ifdef __sparc__
if (!prom_palette)
prom_palette = atyfb_palette;
/* /*
* Add /dev/fb mmap values. * Add /dev/fb mmap values.
*/ */
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/fb.h> #include <linux/fb.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/uaccess.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/prom.h> #include <asm/prom.h>
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include <linux/string.h> #include <linux/string.h>
#include <linux/fb.h> #include <linux/fb.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/uaccess.h>
#include <asm/oplib.h> #include <asm/oplib.h>
#include <asm/fbio.h> #include <asm/fbio.h>
......
...@@ -102,6 +102,7 @@ do { current_thread_info()->syscall_noerror = 1; \ ...@@ -102,6 +102,7 @@ do { current_thread_info()->syscall_noerror = 1; \
} while (0) } while (0)
#define user_mode(regs) (!((regs)->tstate & TSTATE_PRIV)) #define user_mode(regs) (!((regs)->tstate & TSTATE_PRIV))
#define instruction_pointer(regs) ((regs)->tpc) #define instruction_pointer(regs) ((regs)->tpc)
#define regs_return_value(regs) ((regs)->u_regs[UREG_I0])
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
extern unsigned long profile_pc(struct pt_regs *); extern unsigned long profile_pc(struct pt_regs *);
#else #else
......
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