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

Merge tag 'sparc-for-6.9-tag1' of...

Merge tag 'sparc-for-6.9-tag1' of git://git.kernel.org/pub/scm/linux/kernel/git/alarsson/linux-sparc

Pull sparc updates from Andreas Larsson:

 - Fix missing prototype warnings in various places, including switching
   to using generic cmpdi2/ucmpdi2 and parport.h and stop selecting
   unneeded GENERIC_ISA_DMA.

 - Reduce duplicate code by using shared font data, with dependency
   fixup in separate commit touching lib/fonts.

 - Convert sbus drives to use remove callbacks returning void

 - Fix return values of __setup handlers

 - Section mismatch fix for grpci pci drivers

 - Make the vio bus type constant

 - Kconfig cleanups and fixes

 - Typo fixes

* tag 'sparc-for-6.9-tag1' of git://git.kernel.org/pub/scm/linux/kernel/git/alarsson/linux-sparc:
  lib/fonts: Allow Sparc console 8x16 font for sparc64 early boot text console
  sbus: uctrl: Convert to platform remove callback returning void
  sbus: flash: Convert to platform remove callback returning void
  sbus: envctrl: Convert to platform remove callback returning void
  sbus: display7seg: Convert to platform remove callback returning void
  sbus: bbc_i2c: Convert to platform remove callback returning void
  sbus: Add prototype for bbc_envctrl_init and bbc_envctrl_cleanup to header
  sparc32: Fix section mismatch in leon_pci_grpci
  sparc32: Fix parport build with sparc32
  sparc32: Do not select GENERIC_ISA_DMA
  mtd: maps: sun_uflash: Declare uflash_devinit static
  sparc32: Fix build with trapbase
  sparc32: Use generic cmpdi2/ucmpdi2 variants
  sparc: select FRAME_POINTER instead of redefining it
  sparc: vDSO: fix return value of __setup handler
  sparc64: NMI watchdog: fix return value of __setup handler
  sparc: vio: make vio_bus_type const
  sparc: Fix typos
  sparc: Use shared font data
  sparc: remove obsolete config ARCH_ATU
parents 54f42d2c 84b76d05
...@@ -58,6 +58,8 @@ config SPARC32 ...@@ -58,6 +58,8 @@ config SPARC32
select CLZ_TAB select CLZ_TAB
select DMA_DIRECT_REMAP select DMA_DIRECT_REMAP
select GENERIC_ATOMIC64 select GENERIC_ATOMIC64
select GENERIC_LIB_CMPDI2
select GENERIC_LIB_UCMPDI2
select HAVE_UID16 select HAVE_UID16
select HAVE_PAGE_SIZE_4KB select HAVE_PAGE_SIZE_4KB
select LOCK_MM_AND_FIND_VMA select LOCK_MM_AND_FIND_VMA
...@@ -115,10 +117,6 @@ config ARCH_PROC_KCORE_TEXT ...@@ -115,10 +117,6 @@ config ARCH_PROC_KCORE_TEXT
config CPU_BIG_ENDIAN config CPU_BIG_ENDIAN
def_bool y def_bool y
config ARCH_ATU
bool
default y if SPARC64
config STACKTRACE_SUPPORT config STACKTRACE_SUPPORT
bool bool
default y if SPARC64 default y if SPARC64
...@@ -143,10 +141,6 @@ config HIGHMEM ...@@ -143,10 +141,6 @@ config HIGHMEM
default y if SPARC32 default y if SPARC32
select KMAP_LOCAL select KMAP_LOCAL
config GENERIC_ISA_DMA
bool
default y if SPARC32
config PGTABLE_LEVELS config PGTABLE_LEVELS
default 4 if 64BIT default 4 if 64BIT
default 3 default 3
...@@ -222,6 +216,8 @@ config EARLYFB ...@@ -222,6 +216,8 @@ config EARLYFB
bool "Support for early boot text console" bool "Support for early boot text console"
default y default y
depends on SPARC64 depends on SPARC64
select FONT_SUN8x16
select FONT_SUPPORT
help help
Say Y here to enable a faster early framebuffer boot console. Say Y here to enable a faster early framebuffer boot console.
......
...@@ -8,11 +8,8 @@ config MCOUNT ...@@ -8,11 +8,8 @@ config MCOUNT
bool bool
depends on SPARC64 depends on SPARC64
depends on FUNCTION_TRACER depends on FUNCTION_TRACER
default y select ARCH_WANT_FRAME_POINTERS
select FRAME_POINTER
config FRAME_POINTER
bool
depends on MCOUNT
default y default y
config HAVE_HARDLOCKUP_DETECTOR_SPARC64 config HAVE_HARDLOCKUP_DETECTOR_SPARC64
......
...@@ -430,7 +430,7 @@ unsigned long sun4v_cpu_mondo_send(unsigned long cpu_count, ...@@ -430,7 +430,7 @@ unsigned long sun4v_cpu_mondo_send(unsigned long cpu_count,
* ERRORS: No errors defined. * ERRORS: No errors defined.
* *
* Return the hypervisor ID handle for the current CPU. Use by a * Return the hypervisor ID handle for the current CPU. Use by a
* virtual CPU to discover it's own identity. * virtual CPU to discover its own identity.
*/ */
#define HV_FAST_CPU_MYID 0x16 #define HV_FAST_CPU_MYID 0x16
...@@ -1221,7 +1221,7 @@ unsigned long sun4v_con_write(unsigned long buffer, ...@@ -1221,7 +1221,7 @@ unsigned long sun4v_con_write(unsigned long buffer,
* EBADALIGNED software state description is not correctly * EBADALIGNED software state description is not correctly
* aligned * aligned
* *
* This allows the guest to report it's soft state to the hypervisor. There * This allows the guest to report its soft state to the hypervisor. There
* are two primary components to this state. The first part states whether * are two primary components to this state. The first part states whether
* the guest software is running or not. The second containts optional * the guest software is running or not. The second containts optional
* details specific to the software. * details specific to the software.
...@@ -1502,7 +1502,7 @@ struct hv_trap_trace_entry { ...@@ -1502,7 +1502,7 @@ struct hv_trap_trace_entry {
* configuration error of some sort. * configuration error of some sort.
* *
* The dump services provide an opaque buffer into which the * The dump services provide an opaque buffer into which the
* hypervisor can place it's internal state in order to assist in * hypervisor can place its internal state in order to assist in
* debugging such situations. The contents are opaque and extremely * debugging such situations. The contents are opaque and extremely
* platform and hypervisor implementation specific. The guest, during * platform and hypervisor implementation specific. The guest, during
* a core dump, requests that the hypervisor update any information in * a core dump, requests that the hypervisor update any information in
......
...@@ -13,7 +13,7 @@ void ldom_power_off(void); ...@@ -13,7 +13,7 @@ void ldom_power_off(void);
* or data becomes available on the receive side. * or data becomes available on the receive side.
* *
* For non-RAW links, if the LDC_EVENT_RESET event arrives the * For non-RAW links, if the LDC_EVENT_RESET event arrives the
* driver should reset all of it's internal state and reinvoke * driver should reset all of its internal state and reinvoke
* ldc_connect() to try and bring the link up again. * ldc_connect() to try and bring the link up again.
* *
* For RAW links, ldc_connect() is not used. Instead the driver * For RAW links, ldc_connect() is not used. Instead the driver
......
...@@ -93,7 +93,7 @@ static inline void switch_mm(struct mm_struct *old_mm, struct mm_struct *mm, str ...@@ -93,7 +93,7 @@ static inline void switch_mm(struct mm_struct *old_mm, struct mm_struct *mm, str
/* We have to be extremely careful here or else we will miss /* We have to be extremely careful here or else we will miss
* a TSB grow if we switch back and forth between a kernel * a TSB grow if we switch back and forth between a kernel
* thread and an address space which has it's TSB size increased * thread and an address space which has its TSB size increased
* on another processor. * on another processor.
* *
* It is possible to play some games in order to optimize the * It is possible to play some games in order to optimize the
...@@ -118,7 +118,7 @@ static inline void switch_mm(struct mm_struct *old_mm, struct mm_struct *mm, str ...@@ -118,7 +118,7 @@ static inline void switch_mm(struct mm_struct *old_mm, struct mm_struct *mm, str
* *
* At that point cpu0 continues to use a stale TSB, the one from * At that point cpu0 continues to use a stale TSB, the one from
* before the TSB grow performed on cpu1. cpu1 did not cross-call * before the TSB grow performed on cpu1. cpu1 did not cross-call
* cpu0 to update it's TSB because at that point the cpu_vm_mask * cpu0 to update its TSB because at that point the cpu_vm_mask
* only had cpu1 set in it. * only had cpu1 set in it.
*/ */
tsb_context_switch_ctx(mm, CTX_HWBITS(mm->context)); tsb_context_switch_ctx(mm, CTX_HWBITS(mm->context));
......
/* SPDX-License-Identifier: GPL-2.0 */ /* SPDX-License-Identifier: GPL-2.0 */
/* parport.h: sparc64 specific parport initialization and dma. #ifndef ___ASM_SPARC_PARPORT_H
* #define ___ASM_SPARC_PARPORT_H
* Copyright (C) 1999 Eddie C. Dost (ecd@skynet.be)
*/
#ifndef _ASM_SPARC64_PARPORT_H #if defined(__sparc__) && defined(__arch64__)
#define _ASM_SPARC64_PARPORT_H 1 #include <asm/parport_64.h>
#else
#include <linux/of.h> #include <asm-generic/parport.h>
#include <linux/platform_device.h> #endif
#include <asm/ebus_dma.h>
#include <asm/ns87303.h>
#include <asm/prom.h>
#define PARPORT_PC_MAX_PORTS PARPORT_MAX
/*
* While sparc64 doesn't have an ISA DMA API, we provide something that looks
* close enough to make parport_pc happy
*/
#define HAS_DMA
#ifdef CONFIG_PARPORT_PC_FIFO
static DEFINE_SPINLOCK(dma_spin_lock);
#define claim_dma_lock() \
({ unsigned long flags; \
spin_lock_irqsave(&dma_spin_lock, flags); \
flags; \
})
#define release_dma_lock(__flags) \
spin_unlock_irqrestore(&dma_spin_lock, __flags);
#endif #endif
static struct sparc_ebus_info {
struct ebus_dma_info info;
unsigned int addr;
unsigned int count;
int lock;
struct parport *port;
} sparc_ebus_dmas[PARPORT_PC_MAX_PORTS];
static DECLARE_BITMAP(dma_slot_map, PARPORT_PC_MAX_PORTS);
static inline int request_dma(unsigned int dmanr, const char *device_id)
{
if (dmanr >= PARPORT_PC_MAX_PORTS)
return -EINVAL;
if (xchg(&sparc_ebus_dmas[dmanr].lock, 1) != 0)
return -EBUSY;
return 0;
}
static inline void free_dma(unsigned int dmanr)
{
if (dmanr >= PARPORT_PC_MAX_PORTS) {
printk(KERN_WARNING "Trying to free DMA%d\n", dmanr);
return;
}
if (xchg(&sparc_ebus_dmas[dmanr].lock, 0) == 0) {
printk(KERN_WARNING "Trying to free free DMA%d\n", dmanr);
return;
}
}
static inline void enable_dma(unsigned int dmanr)
{
ebus_dma_enable(&sparc_ebus_dmas[dmanr].info, 1);
if (ebus_dma_request(&sparc_ebus_dmas[dmanr].info,
sparc_ebus_dmas[dmanr].addr,
sparc_ebus_dmas[dmanr].count))
BUG();
}
static inline void disable_dma(unsigned int dmanr)
{
ebus_dma_enable(&sparc_ebus_dmas[dmanr].info, 0);
}
static inline void clear_dma_ff(unsigned int dmanr)
{
/* nothing */
}
static inline void set_dma_mode(unsigned int dmanr, char mode)
{
ebus_dma_prepare(&sparc_ebus_dmas[dmanr].info, (mode != DMA_MODE_WRITE));
}
static inline void set_dma_addr(unsigned int dmanr, unsigned int addr)
{
sparc_ebus_dmas[dmanr].addr = addr;
}
static inline void set_dma_count(unsigned int dmanr, unsigned int count)
{
sparc_ebus_dmas[dmanr].count = count;
}
static inline unsigned int get_dma_residue(unsigned int dmanr)
{
return ebus_dma_residue(&sparc_ebus_dmas[dmanr].info);
}
static int ecpp_probe(struct platform_device *op)
{
unsigned long base = op->resource[0].start;
unsigned long config = op->resource[1].start;
unsigned long d_base = op->resource[2].start;
unsigned long d_len;
struct device_node *parent;
struct parport *p;
int slot, err;
parent = op->dev.of_node->parent;
if (of_node_name_eq(parent, "dma")) {
p = parport_pc_probe_port(base, base + 0x400,
op->archdata.irqs[0], PARPORT_DMA_NOFIFO,
op->dev.parent->parent, 0);
if (!p)
return -ENOMEM;
dev_set_drvdata(&op->dev, p);
return 0;
}
for (slot = 0; slot < PARPORT_PC_MAX_PORTS; slot++) {
if (!test_and_set_bit(slot, dma_slot_map))
break;
}
err = -ENODEV;
if (slot >= PARPORT_PC_MAX_PORTS)
goto out_err;
spin_lock_init(&sparc_ebus_dmas[slot].info.lock);
d_len = (op->resource[2].end - d_base) + 1UL;
sparc_ebus_dmas[slot].info.regs =
of_ioremap(&op->resource[2], 0, d_len, "ECPP DMA");
if (!sparc_ebus_dmas[slot].info.regs)
goto out_clear_map;
sparc_ebus_dmas[slot].info.flags = 0;
sparc_ebus_dmas[slot].info.callback = NULL;
sparc_ebus_dmas[slot].info.client_cookie = NULL;
sparc_ebus_dmas[slot].info.irq = 0xdeadbeef;
strcpy(sparc_ebus_dmas[slot].info.name, "parport");
if (ebus_dma_register(&sparc_ebus_dmas[slot].info))
goto out_unmap_regs;
ebus_dma_irq_enable(&sparc_ebus_dmas[slot].info, 1);
/* Configure IRQ to Push Pull, Level Low */
/* Enable ECP, set bit 2 of the CTR first */
outb(0x04, base + 0x02);
ns87303_modify(config, PCR,
PCR_EPP_ENABLE |
PCR_IRQ_ODRAIN,
PCR_ECP_ENABLE |
PCR_ECP_CLK_ENA |
PCR_IRQ_POLAR);
/* CTR bit 5 controls direction of port */
ns87303_modify(config, PTR,
0, PTR_LPT_REG_DIR);
p = parport_pc_probe_port(base, base + 0x400,
op->archdata.irqs[0],
slot,
op->dev.parent,
0);
err = -ENOMEM;
if (!p)
goto out_disable_irq;
dev_set_drvdata(&op->dev, p);
return 0;
out_disable_irq:
ebus_dma_irq_enable(&sparc_ebus_dmas[slot].info, 0);
ebus_dma_unregister(&sparc_ebus_dmas[slot].info);
out_unmap_regs:
of_iounmap(&op->resource[2], sparc_ebus_dmas[slot].info.regs, d_len);
out_clear_map:
clear_bit(slot, dma_slot_map);
out_err:
return err;
}
static int ecpp_remove(struct platform_device *op)
{
struct parport *p = dev_get_drvdata(&op->dev);
int slot = p->dma;
parport_pc_unregister_port(p);
if (slot != PARPORT_DMA_NOFIFO) {
unsigned long d_base = op->resource[2].start;
unsigned long d_len;
d_len = (op->resource[2].end - d_base) + 1UL;
ebus_dma_irq_enable(&sparc_ebus_dmas[slot].info, 0);
ebus_dma_unregister(&sparc_ebus_dmas[slot].info);
of_iounmap(&op->resource[2],
sparc_ebus_dmas[slot].info.regs,
d_len);
clear_bit(slot, dma_slot_map);
}
return 0;
}
static const struct of_device_id ecpp_match[] = {
{
.name = "ecpp",
},
{
.name = "parallel",
.compatible = "ecpp",
},
{
.name = "parallel",
.compatible = "ns87317-ecpp",
},
{
.name = "parallel",
.compatible = "pnpALI,1533,3",
},
{},
};
static struct platform_driver ecpp_driver = {
.driver = {
.name = "ecpp",
.of_match_table = ecpp_match,
},
.probe = ecpp_probe,
.remove = ecpp_remove,
};
static int parport_pc_find_nonpci_ports(int autoirq, int autodma)
{
return platform_driver_register(&ecpp_driver);
}
#endif /* !(_ASM_SPARC64_PARPORT_H */
/* SPDX-License-Identifier: GPL-2.0 */
/* parport.h: sparc64 specific parport initialization and dma.
*
* Copyright (C) 1999 Eddie C. Dost (ecd@skynet.be)
*/
#ifndef _ASM_SPARC64_PARPORT_H
#define _ASM_SPARC64_PARPORT_H 1
#include <linux/of.h>
#include <linux/platform_device.h>
#include <asm/ebus_dma.h>
#include <asm/ns87303.h>
#include <asm/prom.h>
#define PARPORT_PC_MAX_PORTS PARPORT_MAX
/*
* While sparc64 doesn't have an ISA DMA API, we provide something that looks
* close enough to make parport_pc happy
*/
#define HAS_DMA
#ifdef CONFIG_PARPORT_PC_FIFO
static DEFINE_SPINLOCK(dma_spin_lock);
#define claim_dma_lock() \
({ unsigned long flags; \
spin_lock_irqsave(&dma_spin_lock, flags); \
flags; \
})
#define release_dma_lock(__flags) \
spin_unlock_irqrestore(&dma_spin_lock, __flags);
#endif
static struct sparc_ebus_info {
struct ebus_dma_info info;
unsigned int addr;
unsigned int count;
int lock;
struct parport *port;
} sparc_ebus_dmas[PARPORT_PC_MAX_PORTS];
static DECLARE_BITMAP(dma_slot_map, PARPORT_PC_MAX_PORTS);
static inline int request_dma(unsigned int dmanr, const char *device_id)
{
if (dmanr >= PARPORT_PC_MAX_PORTS)
return -EINVAL;
if (xchg(&sparc_ebus_dmas[dmanr].lock, 1) != 0)
return -EBUSY;
return 0;
}
static inline void free_dma(unsigned int dmanr)
{
if (dmanr >= PARPORT_PC_MAX_PORTS) {
printk(KERN_WARNING "Trying to free DMA%d\n", dmanr);
return;
}
if (xchg(&sparc_ebus_dmas[dmanr].lock, 0) == 0) {
printk(KERN_WARNING "Trying to free free DMA%d\n", dmanr);
return;
}
}
static inline void enable_dma(unsigned int dmanr)
{
ebus_dma_enable(&sparc_ebus_dmas[dmanr].info, 1);
if (ebus_dma_request(&sparc_ebus_dmas[dmanr].info,
sparc_ebus_dmas[dmanr].addr,
sparc_ebus_dmas[dmanr].count))
BUG();
}
static inline void disable_dma(unsigned int dmanr)
{
ebus_dma_enable(&sparc_ebus_dmas[dmanr].info, 0);
}
static inline void clear_dma_ff(unsigned int dmanr)
{
/* nothing */
}
static inline void set_dma_mode(unsigned int dmanr, char mode)
{
ebus_dma_prepare(&sparc_ebus_dmas[dmanr].info, (mode != DMA_MODE_WRITE));
}
static inline void set_dma_addr(unsigned int dmanr, unsigned int addr)
{
sparc_ebus_dmas[dmanr].addr = addr;
}
static inline void set_dma_count(unsigned int dmanr, unsigned int count)
{
sparc_ebus_dmas[dmanr].count = count;
}
static inline unsigned int get_dma_residue(unsigned int dmanr)
{
return ebus_dma_residue(&sparc_ebus_dmas[dmanr].info);
}
static int ecpp_probe(struct platform_device *op)
{
unsigned long base = op->resource[0].start;
unsigned long config = op->resource[1].start;
unsigned long d_base = op->resource[2].start;
unsigned long d_len;
struct device_node *parent;
struct parport *p;
int slot, err;
parent = op->dev.of_node->parent;
if (of_node_name_eq(parent, "dma")) {
p = parport_pc_probe_port(base, base + 0x400,
op->archdata.irqs[0], PARPORT_DMA_NOFIFO,
op->dev.parent->parent, 0);
if (!p)
return -ENOMEM;
dev_set_drvdata(&op->dev, p);
return 0;
}
for (slot = 0; slot < PARPORT_PC_MAX_PORTS; slot++) {
if (!test_and_set_bit(slot, dma_slot_map))
break;
}
err = -ENODEV;
if (slot >= PARPORT_PC_MAX_PORTS)
goto out_err;
spin_lock_init(&sparc_ebus_dmas[slot].info.lock);
d_len = (op->resource[2].end - d_base) + 1UL;
sparc_ebus_dmas[slot].info.regs =
of_ioremap(&op->resource[2], 0, d_len, "ECPP DMA");
if (!sparc_ebus_dmas[slot].info.regs)
goto out_clear_map;
sparc_ebus_dmas[slot].info.flags = 0;
sparc_ebus_dmas[slot].info.callback = NULL;
sparc_ebus_dmas[slot].info.client_cookie = NULL;
sparc_ebus_dmas[slot].info.irq = 0xdeadbeef;
strcpy(sparc_ebus_dmas[slot].info.name, "parport");
if (ebus_dma_register(&sparc_ebus_dmas[slot].info))
goto out_unmap_regs;
ebus_dma_irq_enable(&sparc_ebus_dmas[slot].info, 1);
/* Configure IRQ to Push Pull, Level Low */
/* Enable ECP, set bit 2 of the CTR first */
outb(0x04, base + 0x02);
ns87303_modify(config, PCR,
PCR_EPP_ENABLE |
PCR_IRQ_ODRAIN,
PCR_ECP_ENABLE |
PCR_ECP_CLK_ENA |
PCR_IRQ_POLAR);
/* CTR bit 5 controls direction of port */
ns87303_modify(config, PTR,
0, PTR_LPT_REG_DIR);
p = parport_pc_probe_port(base, base + 0x400,
op->archdata.irqs[0],
slot,
op->dev.parent,
0);
err = -ENOMEM;
if (!p)
goto out_disable_irq;
dev_set_drvdata(&op->dev, p);
return 0;
out_disable_irq:
ebus_dma_irq_enable(&sparc_ebus_dmas[slot].info, 0);
ebus_dma_unregister(&sparc_ebus_dmas[slot].info);
out_unmap_regs:
of_iounmap(&op->resource[2], sparc_ebus_dmas[slot].info.regs, d_len);
out_clear_map:
clear_bit(slot, dma_slot_map);
out_err:
return err;
}
static int ecpp_remove(struct platform_device *op)
{
struct parport *p = dev_get_drvdata(&op->dev);
int slot = p->dma;
parport_pc_unregister_port(p);
if (slot != PARPORT_DMA_NOFIFO) {
unsigned long d_base = op->resource[2].start;
unsigned long d_len;
d_len = (op->resource[2].end - d_base) + 1UL;
ebus_dma_irq_enable(&sparc_ebus_dmas[slot].info, 0);
ebus_dma_unregister(&sparc_ebus_dmas[slot].info);
of_iounmap(&op->resource[2],
sparc_ebus_dmas[slot].info.regs,
d_len);
clear_bit(slot, dma_slot_map);
}
return 0;
}
static const struct of_device_id ecpp_match[] = {
{
.name = "ecpp",
},
{
.name = "parallel",
.compatible = "ecpp",
},
{
.name = "parallel",
.compatible = "ns87317-ecpp",
},
{
.name = "parallel",
.compatible = "pnpALI,1533,3",
},
{},
};
static struct platform_driver ecpp_driver = {
.driver = {
.name = "ecpp",
.of_match_table = ecpp_match,
},
.probe = ecpp_probe,
.remove = ecpp_remove,
};
static int parport_pc_find_nonpci_ports(int autoirq, int autodma)
{
return platform_driver_register(&ecpp_driver);
}
#endif /* !(_ASM_SPARC64_PARPORT_H */
...@@ -15,7 +15,7 @@ do { \ ...@@ -15,7 +15,7 @@ do { \
* for l0/l1. It will use one for 'next' and the other to hold * for l0/l1. It will use one for 'next' and the other to hold
* the output value of 'last'. 'next' is not referenced again * the output value of 'last'. 'next' is not referenced again
* past the invocation of switch_to in the scheduler, so we need * past the invocation of switch_to in the scheduler, so we need
* not preserve it's value. Hairy, but it lets us remove 2 loads * not preserve its value. Hairy, but it lets us remove 2 loads
* and 2 stores in this critical code path. -DaveM * and 2 stores in this critical code path. -DaveM
*/ */
#define switch_to(prev, next, last) \ #define switch_to(prev, next, last) \
......
This diff is collapsed.
...@@ -268,11 +268,11 @@ int sparc_floppy_request_irq(unsigned int irq, irq_handler_t irq_handler) ...@@ -268,11 +268,11 @@ int sparc_floppy_request_irq(unsigned int irq, irq_handler_t irq_handler)
if (sparc_cpu_model != sparc_leon) { if (sparc_cpu_model != sparc_leon) {
struct tt_entry *trap_table; struct tt_entry *trap_table;
trap_table = &trapbase_cpu1; trap_table = &trapbase_cpu1[0];
INSTANTIATE(trap_table) INSTANTIATE(trap_table)
trap_table = &trapbase_cpu2; trap_table = &trapbase_cpu2[0];
INSTANTIATE(trap_table) INSTANTIATE(trap_table)
trap_table = &trapbase_cpu3; trap_table = &trapbase_cpu3[0];
INSTANTIATE(trap_table) INSTANTIATE(trap_table)
} }
#endif #endif
......
...@@ -980,7 +980,7 @@ void notrace init_irqwork_curcpu(void) ...@@ -980,7 +980,7 @@ void notrace init_irqwork_curcpu(void)
* *
* On SMP this gets invoked from the CPU trampoline before * On SMP this gets invoked from the CPU trampoline before
* the cpu has fully taken over the trap table from OBP, * the cpu has fully taken over the trap table from OBP,
* and it's kernel stack + %g6 thread register state is * and its kernel stack + %g6 thread register state is
* not fully cooked yet. * not fully cooked yet.
* *
* Therefore you cannot make any OBP calls, not even prom_printf, * Therefore you cannot make any OBP calls, not even prom_printf,
......
...@@ -138,10 +138,10 @@ extern unsigned int t_nmi[]; ...@@ -138,10 +138,10 @@ extern unsigned int t_nmi[];
extern unsigned int linux_trap_ipi15_sun4d[]; extern unsigned int linux_trap_ipi15_sun4d[];
extern unsigned int linux_trap_ipi15_sun4m[]; extern unsigned int linux_trap_ipi15_sun4m[];
extern struct tt_entry trapbase; extern struct tt_entry trapbase[];
extern struct tt_entry trapbase_cpu1; extern struct tt_entry trapbase_cpu1[];
extern struct tt_entry trapbase_cpu2; extern struct tt_entry trapbase_cpu2[];
extern struct tt_entry trapbase_cpu3; extern struct tt_entry trapbase_cpu3[];
extern char cputypval[]; extern char cputypval[];
......
...@@ -37,7 +37,7 @@ void pt_regs_to_gdb_regs(unsigned long *gdb_regs, struct pt_regs *regs) ...@@ -37,7 +37,7 @@ void pt_regs_to_gdb_regs(unsigned long *gdb_regs, struct pt_regs *regs)
gdb_regs[GDB_Y] = regs->y; gdb_regs[GDB_Y] = regs->y;
gdb_regs[GDB_PSR] = regs->psr; gdb_regs[GDB_PSR] = regs->psr;
gdb_regs[GDB_WIM] = 0; gdb_regs[GDB_WIM] = 0;
gdb_regs[GDB_TBR] = (unsigned long) &trapbase; gdb_regs[GDB_TBR] = (unsigned long) &trapbase[0];
gdb_regs[GDB_PC] = regs->pc; gdb_regs[GDB_PC] = regs->pc;
gdb_regs[GDB_NPC] = regs->npc; gdb_regs[GDB_NPC] = regs->npc;
gdb_regs[GDB_FSR] = 0; gdb_regs[GDB_FSR] = 0;
...@@ -72,7 +72,7 @@ void sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *p) ...@@ -72,7 +72,7 @@ void sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *p)
gdb_regs[GDB_PSR] = t->kpsr; gdb_regs[GDB_PSR] = t->kpsr;
gdb_regs[GDB_WIM] = t->kwim; gdb_regs[GDB_WIM] = t->kwim;
gdb_regs[GDB_TBR] = (unsigned long) &trapbase; gdb_regs[GDB_TBR] = (unsigned long) &trapbase[0];
gdb_regs[GDB_PC] = t->kpc; gdb_regs[GDB_PC] = t->kpc;
gdb_regs[GDB_NPC] = t->kpc + 4; gdb_regs[GDB_NPC] = t->kpc + 4;
gdb_regs[GDB_FSR] = 0; gdb_regs[GDB_FSR] = 0;
......
...@@ -230,7 +230,7 @@ static unsigned long __kprobes relbranch_fixup(u32 insn, struct kprobe *p, ...@@ -230,7 +230,7 @@ static unsigned long __kprobes relbranch_fixup(u32 insn, struct kprobe *p,
return regs->tnpc; return regs->tnpc;
} }
/* If INSN is an instruction which writes it's PC location /* If INSN is an instruction which writes its PC location
* into a destination register, fix that up. * into a destination register, fix that up.
*/ */
static void __kprobes retpc_fixup(struct pt_regs *regs, u32 insn, static void __kprobes retpc_fixup(struct pt_regs *regs, u32 insn,
......
...@@ -1854,7 +1854,7 @@ static int read_nonraw(struct ldc_channel *lp, void *buf, unsigned int size) ...@@ -1854,7 +1854,7 @@ static int read_nonraw(struct ldc_channel *lp, void *buf, unsigned int size)
* This seems the best behavior because this allows * This seems the best behavior because this allows
* a user of the LDC layer to start with a small * a user of the LDC layer to start with a small
* RX buffer for ldc_read() calls and use -EMSGSIZE * RX buffer for ldc_read() calls and use -EMSGSIZE
* as a cue to enlarge it's read buffer. * as a cue to enlarge its read buffer.
*/ */
err = -EMSGSIZE; err = -EMSGSIZE;
break; break;
......
...@@ -697,7 +697,7 @@ static int grpci1_of_probe(struct platform_device *ofdev) ...@@ -697,7 +697,7 @@ static int grpci1_of_probe(struct platform_device *ofdev)
return err; return err;
} }
static const struct of_device_id grpci1_of_match[] __initconst = { static const struct of_device_id grpci1_of_match[] = {
{ {
.name = "GAISLER_PCIFBRG", .name = "GAISLER_PCIFBRG",
}, },
......
...@@ -586,7 +586,7 @@ static void grpci2_hw_init(struct grpci2_priv *priv) ...@@ -586,7 +586,7 @@ static void grpci2_hw_init(struct grpci2_priv *priv)
REGSTORE(regs->io_map, REGLOAD(regs->io_map) & 0x0000ffff); REGSTORE(regs->io_map, REGLOAD(regs->io_map) & 0x0000ffff);
/* set 1:1 mapping between AHB -> PCI memory space, for all Masters /* set 1:1 mapping between AHB -> PCI memory space, for all Masters
* Each AHB master has it's own mapping registers. Max 16 AHB masters. * Each AHB master has its own mapping registers. Max 16 AHB masters.
*/ */
for (i = 0; i < 16; i++) for (i = 0; i < 16; i++)
REGSTORE(regs->ahbmst_map[i], priv->pci_area); REGSTORE(regs->ahbmst_map[i], priv->pci_area);
...@@ -889,7 +889,7 @@ static int grpci2_of_probe(struct platform_device *ofdev) ...@@ -889,7 +889,7 @@ static int grpci2_of_probe(struct platform_device *ofdev)
return err; return err;
} }
static const struct of_device_id grpci2_of_match[] __initconst = { static const struct of_device_id grpci2_of_match[] = {
{ {
.name = "GAISLER_GRPCI2", .name = "GAISLER_GRPCI2",
}, },
......
...@@ -245,13 +245,13 @@ void __init leon_smp_done(void) ...@@ -245,13 +245,13 @@ void __init leon_smp_done(void)
/* Free unneeded trap tables */ /* Free unneeded trap tables */
if (!cpu_present(1)) { if (!cpu_present(1)) {
free_reserved_page(virt_to_page(&trapbase_cpu1)); free_reserved_page(virt_to_page(&trapbase_cpu1[0]));
} }
if (!cpu_present(2)) { if (!cpu_present(2)) {
free_reserved_page(virt_to_page(&trapbase_cpu2)); free_reserved_page(virt_to_page(&trapbase_cpu2[0]));
} }
if (!cpu_present(3)) { if (!cpu_present(3)) {
free_reserved_page(virt_to_page(&trapbase_cpu3)); free_reserved_page(virt_to_page(&trapbase_cpu3[0]));
} }
/* Ok, they are spinning and ready to go. */ /* Ok, they are spinning and ready to go. */
smp_processors_ready = 1; smp_processors_ready = 1;
......
...@@ -279,7 +279,7 @@ static int __init setup_nmi_watchdog(char *str) ...@@ -279,7 +279,7 @@ static int __init setup_nmi_watchdog(char *str)
if (!strncmp(str, "panic", 5)) if (!strncmp(str, "panic", 5))
panic_on_timeout = 1; panic_on_timeout = 1;
return 0; return 1;
} }
__setup("nmi_watchdog=", setup_nmi_watchdog); __setup("nmi_watchdog=", setup_nmi_watchdog);
......
...@@ -560,7 +560,7 @@ static unsigned int __init build_one_device_irq(struct platform_device *op, ...@@ -560,7 +560,7 @@ static unsigned int __init build_one_device_irq(struct platform_device *op,
* *
* If we hit a bus type or situation we cannot handle, we * If we hit a bus type or situation we cannot handle, we
* stop and assume that the original IRQ number was in a * stop and assume that the original IRQ number was in a
* format which has special meaning to it's immediate parent. * format which has special meaning to its immediate parent.
*/ */
pp = dp->parent; pp = dp->parent;
ip = NULL; ip = NULL;
......
...@@ -311,7 +311,7 @@ static struct pci_dev *of_create_pci_dev(struct pci_pbm_info *pbm, ...@@ -311,7 +311,7 @@ static struct pci_dev *of_create_pci_dev(struct pci_pbm_info *pbm,
/* We can't actually use the firmware value, we have /* We can't actually use the firmware value, we have
* to read what is in the register right now. One * to read what is in the register right now. One
* reason is that in the case of IDE interfaces the * reason is that in the case of IDE interfaces the
* firmware can sample the value before the the IDE * firmware can sample the value before the IDE
* interface is programmed into native mode. * interface is programmed into native mode.
*/ */
pci_read_config_dword(dev, PCI_CLASS_REVISION, &class); pci_read_config_dword(dev, PCI_CLASS_REVISION, &class);
......
...@@ -19,9 +19,9 @@ ...@@ -19,9 +19,9 @@
* each with one (Sabre) or two (PSYCHO/SCHIZO) PCI bus modules * each with one (Sabre) or two (PSYCHO/SCHIZO) PCI bus modules
* underneath. Each PCI bus module uses an IOMMU (shared by both * underneath. Each PCI bus module uses an IOMMU (shared by both
* PBMs of a controller, or per-PBM), and if a streaming buffer * PBMs of a controller, or per-PBM), and if a streaming buffer
* is present, each PCI bus module has it's own. (ie. the IOMMU * is present, each PCI bus module has its own. (ie. the IOMMU
* might be shared between PBMs, the STC is never shared) * might be shared between PBMs, the STC is never shared)
* Furthermore, each PCI bus module controls it's own autonomous * Furthermore, each PCI bus module controls its own autonomous
* PCI bus. * PCI bus.
*/ */
......
...@@ -145,7 +145,7 @@ static void __schizo_check_stc_error_pbm(struct pci_pbm_info *pbm, ...@@ -145,7 +145,7 @@ static void __schizo_check_stc_error_pbm(struct pci_pbm_info *pbm,
/* This is __REALLY__ dangerous. When we put the /* This is __REALLY__ dangerous. When we put the
* streaming buffer into diagnostic mode to probe * streaming buffer into diagnostic mode to probe
* it's tags and error status, we _must_ clear all * its tags and error status, we _must_ clear all
* of the line tag valid bits before re-enabling * of the line tag valid bits before re-enabling
* the streaming buffer. If any dirty data lives * the streaming buffer. If any dirty data lives
* in the STC when we do this, we will end up * in the STC when we do this, we will end up
...@@ -275,7 +275,7 @@ static void schizo_check_iommu_error_pbm(struct pci_pbm_info *pbm, ...@@ -275,7 +275,7 @@ static void schizo_check_iommu_error_pbm(struct pci_pbm_info *pbm,
pbm->name, type_string); pbm->name, type_string);
/* Put the IOMMU into diagnostic mode and probe /* Put the IOMMU into diagnostic mode and probe
* it's TLB for entries with error status. * its TLB for entries with error status.
* *
* It is very possible for another DVMA to occur * It is very possible for another DVMA to occur
* while we do this probe, and corrupt the system * while we do this probe, and corrupt the system
......
...@@ -979,7 +979,7 @@ static void calculate_single_pcr(struct cpu_hw_events *cpuc) ...@@ -979,7 +979,7 @@ static void calculate_single_pcr(struct cpu_hw_events *cpuc)
static void sparc_pmu_start(struct perf_event *event, int flags); static void sparc_pmu_start(struct perf_event *event, int flags);
/* On this PMU each PIC has it's own PCR control register. */ /* On this PMU each PIC has its own PCR control register. */
static void calculate_multiple_pcrs(struct cpu_hw_events *cpuc) static void calculate_multiple_pcrs(struct cpu_hw_events *cpuc)
{ {
int i; int i;
......
...@@ -394,7 +394,7 @@ static unsigned int schizo_irq_build(struct device_node *dp, ...@@ -394,7 +394,7 @@ static unsigned int schizo_irq_build(struct device_node *dp,
iclr = schizo_ino_to_iclr(pbm_regs, ino); iclr = schizo_ino_to_iclr(pbm_regs, ino);
/* On Schizo, no inofixup occurs. This is because each /* On Schizo, no inofixup occurs. This is because each
* INO has it's own IMAP register. On Psycho and Sabre * INO has its own IMAP register. On Psycho and Sabre
* there is only one IMAP register for each PCI slot even * there is only one IMAP register for each PCI slot even
* though four different INOs can be generated by each * though four different INOs can be generated by each
* PCI slot. * PCI slot.
......
...@@ -50,7 +50,7 @@ static void psycho_check_stc_error(struct pci_pbm_info *pbm) ...@@ -50,7 +50,7 @@ static void psycho_check_stc_error(struct pci_pbm_info *pbm)
spin_lock(&stc_buf_lock); spin_lock(&stc_buf_lock);
/* This is __REALLY__ dangerous. When we put the streaming /* This is __REALLY__ dangerous. When we put the streaming
* buffer into diagnostic mode to probe it's tags and error * buffer into diagnostic mode to probe its tags and error
* status, we _must_ clear all of the line tag valid bits * status, we _must_ clear all of the line tag valid bits
* before re-enabling the streaming buffer. If any dirty data * before re-enabling the streaming buffer. If any dirty data
* lives in the STC when we do this, we will end up * lives in the STC when we do this, we will end up
......
...@@ -67,7 +67,7 @@ static void prom_sync_me(void) ...@@ -67,7 +67,7 @@ static void prom_sync_me(void)
__asm__ __volatile__("wr %0, 0x0, %%tbr\n\t" __asm__ __volatile__("wr %0, 0x0, %%tbr\n\t"
"nop\n\t" "nop\n\t"
"nop\n\t" "nop\n\t"
"nop\n\t" : : "r" (&trapbase)); "nop\n\t" : : "r" (&trapbase[0]));
prom_printf("PROM SYNC COMMAND...\n"); prom_printf("PROM SYNC COMMAND...\n");
show_mem(); show_mem();
...@@ -285,7 +285,7 @@ void __init setup_arch(char **cmdline_p) ...@@ -285,7 +285,7 @@ void __init setup_arch(char **cmdline_p)
int i; int i;
unsigned long highest_paddr; unsigned long highest_paddr;
sparc_ttable = &trapbase; sparc_ttable = &trapbase[0];
/* Initialize PROM console and command line. */ /* Initialize PROM console and command line. */
*cmdline_p = prom_getbootargs(); *cmdline_p = prom_getbootargs();
......
...@@ -473,7 +473,7 @@ static void do_signal(struct pt_regs *regs, unsigned long orig_i0) ...@@ -473,7 +473,7 @@ static void do_signal(struct pt_regs *regs, unsigned long orig_i0)
* *
* %g7 is used as the "thread register". %g6 is not used in * %g7 is used as the "thread register". %g6 is not used in
* any fixed manner. %g6 is used as a scratch register and * any fixed manner. %g6 is used as a scratch register and
* a compiler temporary, but it's value is never used across * a compiler temporary, but its value is never used across
* a system call. Therefore %g6 is usable for orig_i0 storage. * a system call. Therefore %g6 is usable for orig_i0 storage.
*/ */
if (pt_regs_is_syscall(regs) && (regs->psr & PSR_C)) if (pt_regs_is_syscall(regs) && (regs->psr & PSR_C))
......
...@@ -494,7 +494,7 @@ static void do_signal(struct pt_regs *regs, unsigned long orig_i0) ...@@ -494,7 +494,7 @@ static void do_signal(struct pt_regs *regs, unsigned long orig_i0)
* *
* %g7 is used as the "thread register". %g6 is not used in * %g7 is used as the "thread register". %g6 is not used in
* any fixed manner. %g6 is used as a scratch register and * any fixed manner. %g6 is used as a scratch register and
* a compiler temporary, but it's value is never used across * a compiler temporary, but its value is never used across
* a system call. Therefore %g6 is usable for orig_i0 storage. * a system call. Therefore %g6 is usable for orig_i0 storage.
*/ */
if (pt_regs_is_syscall(regs) && if (pt_regs_is_syscall(regs) &&
......
...@@ -149,7 +149,7 @@ static struct attribute *vio_dev_attrs[] = { ...@@ -149,7 +149,7 @@ static struct attribute *vio_dev_attrs[] = {
}; };
ATTRIBUTE_GROUPS(vio_dev); ATTRIBUTE_GROUPS(vio_dev);
static struct bus_type vio_bus_type = { static const struct bus_type vio_bus_type = {
.name = "vio", .name = "vio",
.dev_groups = vio_dev_groups, .dev_groups = vio_dev_groups,
.uevent = vio_hotplug, .uevent = vio_hotplug,
......
...@@ -14,7 +14,7 @@ lib-$(CONFIG_SPARC32) += divdi3.o udivdi3.o ...@@ -14,7 +14,7 @@ lib-$(CONFIG_SPARC32) += divdi3.o udivdi3.o
lib-$(CONFIG_SPARC32) += copy_user.o locks.o lib-$(CONFIG_SPARC32) += copy_user.o locks.o
lib-$(CONFIG_SPARC64) += atomic_64.o lib-$(CONFIG_SPARC64) += atomic_64.o
lib-$(CONFIG_SPARC32) += lshrdi3.o ashldi3.o lib-$(CONFIG_SPARC32) += lshrdi3.o ashldi3.o
lib-$(CONFIG_SPARC32) += muldi3.o bitext.o cmpdi2.o lib-$(CONFIG_SPARC32) += muldi3.o bitext.o
lib-$(CONFIG_SPARC64) += multi3.o lib-$(CONFIG_SPARC64) += multi3.o
lib-$(CONFIG_SPARC64) += fls.o lib-$(CONFIG_SPARC64) += fls.o
lib-$(CONFIG_SPARC64) += fls64.o lib-$(CONFIG_SPARC64) += fls64.o
...@@ -51,5 +51,5 @@ lib-$(CONFIG_SPARC64) += copy_in_user.o memmove.o ...@@ -51,5 +51,5 @@ lib-$(CONFIG_SPARC64) += copy_in_user.o memmove.o
lib-$(CONFIG_SPARC64) += mcount.o ipcsum.o xor.o hweight.o ffs.o lib-$(CONFIG_SPARC64) += mcount.o ipcsum.o xor.o hweight.o ffs.o
obj-$(CONFIG_SPARC64) += iomap.o obj-$(CONFIG_SPARC64) += iomap.o
obj-$(CONFIG_SPARC32) += atomic32.o ucmpdi2.o obj-$(CONFIG_SPARC32) += atomic32.o
obj-$(CONFIG_SPARC64) += PeeCeeI.o obj-$(CONFIG_SPARC64) += PeeCeeI.o
// SPDX-License-Identifier: GPL-2.0
#include <linux/module.h>
#include "libgcc.h"
word_type __cmpdi2(long long a, long long b)
{
const DWunion au = {
.ll = a
};
const DWunion bu = {
.ll = b
};
if (au.s.high < bu.s.high)
return 0;
else if (au.s.high > bu.s.high)
return 2;
if ((unsigned int) au.s.low < (unsigned int) bu.s.low)
return 0;
else if ((unsigned int) au.s.low > (unsigned int) bu.s.low)
return 2;
return 1;
}
EXPORT_SYMBOL(__cmpdi2);
// SPDX-License-Identifier: GPL-2.0
#include <linux/module.h>
#include "libgcc.h"
word_type __ucmpdi2(unsigned long long a, unsigned long long b)
{
const DWunion au = {.ll = a};
const DWunion bu = {.ll = b};
if ((unsigned int) au.s.high < (unsigned int) bu.s.high)
return 0;
else if ((unsigned int) au.s.high > (unsigned int) bu.s.high)
return 2;
if ((unsigned int) au.s.low < (unsigned int) bu.s.low)
return 0;
else if ((unsigned int) au.s.low > (unsigned int) bu.s.low)
return 2;
return 1;
}
EXPORT_SYMBOL(__ucmpdi2);
...@@ -1513,7 +1513,7 @@ static void __init init_viking(void) ...@@ -1513,7 +1513,7 @@ static void __init init_viking(void)
/* /*
* We need this to make sure old viking takes no hits * We need this to make sure old viking takes no hits
* on it's cache for dma snoops to workaround the * on its cache for dma snoops to workaround the
* "load from non-cacheable memory" interrupt bug. * "load from non-cacheable memory" interrupt bug.
* This is only necessary because of the new way in * This is only necessary because of the new way in
* which we use the IOMMU. * which we use the IOMMU.
......
...@@ -385,7 +385,7 @@ static unsigned long tsb_size_to_rss_limit(unsigned long new_size) ...@@ -385,7 +385,7 @@ static unsigned long tsb_size_to_rss_limit(unsigned long new_size)
* will not trigger any longer. * will not trigger any longer.
* *
* The TSB can be anywhere from 8K to 1MB in size, in increasing powers * The TSB can be anywhere from 8K to 1MB in size, in increasing powers
* of two. The TSB must be aligned to it's size, so f.e. a 512K TSB * of two. The TSB must be aligned to its size, so f.e. a 512K TSB
* must be 512K aligned. It also must be physically contiguous, so we * must be 512K aligned. It also must be physically contiguous, so we
* cannot use vmalloc(). * cannot use vmalloc().
* *
......
...@@ -300,7 +300,7 @@ do { *prog++ = BR_OPC | WDISP22(OFF); \ ...@@ -300,7 +300,7 @@ do { *prog++ = BR_OPC | WDISP22(OFF); \
* *
* The most common case is to emit a branch at the end of such * The most common case is to emit a branch at the end of such
* a code sequence. So this would be two instructions, the * a code sequence. So this would be two instructions, the
* branch and it's delay slot. * branch and its delay slot.
* *
* Therefore by default the branch emitters calculate the branch * Therefore by default the branch emitters calculate the branch
* offset field as: * offset field as:
...@@ -309,13 +309,13 @@ do { *prog++ = BR_OPC | WDISP22(OFF); \ ...@@ -309,13 +309,13 @@ do { *prog++ = BR_OPC | WDISP22(OFF); \
* *
* This "addrs[i] - 8" is the address of the branch itself or * This "addrs[i] - 8" is the address of the branch itself or
* what "." would be in assembler notation. The "8" part is * what "." would be in assembler notation. The "8" part is
* how we take into consideration the branch and it's delay * how we take into consideration the branch and its delay
* slot mentioned above. * slot mentioned above.
* *
* Sometimes we need to emit a branch earlier in the code * Sometimes we need to emit a branch earlier in the code
* sequence. And in these situations we adjust "destination" * sequence. And in these situations we adjust "destination"
* to accommodate this difference. For example, if we needed * to accommodate this difference. For example, if we needed
* to emit a branch (and it's delay slot) right before the * to emit a branch (and its delay slot) right before the
* final instruction emitted for a BPF opcode, we'd use * final instruction emitted for a BPF opcode, we'd use
* "destination + 4" instead of just plain "destination" above. * "destination + 4" instead of just plain "destination" above.
* *
......
...@@ -449,9 +449,8 @@ static __init int vdso_setup(char *s) ...@@ -449,9 +449,8 @@ static __init int vdso_setup(char *s)
unsigned long val; unsigned long val;
err = kstrtoul(s, 10, &val); err = kstrtoul(s, 10, &val);
if (err) if (!err)
return err; vdso_enabled = val;
vdso_enabled = val; return 1;
return 0;
} }
__setup("vdso=", vdso_setup); __setup("vdso=", vdso_setup);
...@@ -47,7 +47,7 @@ struct map_info uflash_map_templ = { ...@@ -47,7 +47,7 @@ struct map_info uflash_map_templ = {
.bankwidth = UFLASH_BUSWIDTH, .bankwidth = UFLASH_BUSWIDTH,
}; };
int uflash_devinit(struct platform_device *op, struct device_node *dp) static int uflash_devinit(struct platform_device *op, struct device_node *dp)
{ {
struct uflash_dev *up; struct uflash_dev *up;
......
...@@ -358,9 +358,6 @@ static struct bbc_i2c_bus * attach_one_i2c(struct platform_device *op, int index ...@@ -358,9 +358,6 @@ static struct bbc_i2c_bus * attach_one_i2c(struct platform_device *op, int index
return NULL; return NULL;
} }
extern int bbc_envctrl_init(struct bbc_i2c_bus *bp);
extern void bbc_envctrl_cleanup(struct bbc_i2c_bus *bp);
static int bbc_i2c_probe(struct platform_device *op) static int bbc_i2c_probe(struct platform_device *op)
{ {
struct bbc_i2c_bus *bp; struct bbc_i2c_bus *bp;
...@@ -385,7 +382,7 @@ static int bbc_i2c_probe(struct platform_device *op) ...@@ -385,7 +382,7 @@ static int bbc_i2c_probe(struct platform_device *op)
return err; return err;
} }
static int bbc_i2c_remove(struct platform_device *op) static void bbc_i2c_remove(struct platform_device *op)
{ {
struct bbc_i2c_bus *bp = dev_get_drvdata(&op->dev); struct bbc_i2c_bus *bp = dev_get_drvdata(&op->dev);
...@@ -399,8 +396,6 @@ static int bbc_i2c_remove(struct platform_device *op) ...@@ -399,8 +396,6 @@ static int bbc_i2c_remove(struct platform_device *op)
of_iounmap(&op->resource[1], bp->i2c_control_regs, 2); of_iounmap(&op->resource[1], bp->i2c_control_regs, 2);
kfree(bp); kfree(bp);
return 0;
} }
static const struct of_device_id bbc_i2c_match[] = { static const struct of_device_id bbc_i2c_match[] = {
...@@ -418,7 +413,7 @@ static struct platform_driver bbc_i2c_driver = { ...@@ -418,7 +413,7 @@ static struct platform_driver bbc_i2c_driver = {
.of_match_table = bbc_i2c_match, .of_match_table = bbc_i2c_match,
}, },
.probe = bbc_i2c_probe, .probe = bbc_i2c_probe,
.remove = bbc_i2c_remove, .remove_new = bbc_i2c_remove,
}; };
module_platform_driver(bbc_i2c_driver); module_platform_driver(bbc_i2c_driver);
......
...@@ -82,4 +82,7 @@ extern int bbc_i2c_readb(struct bbc_i2c_client *, unsigned char *byte, int off); ...@@ -82,4 +82,7 @@ extern int bbc_i2c_readb(struct bbc_i2c_client *, unsigned char *byte, int off);
extern int bbc_i2c_write_buf(struct bbc_i2c_client *, char *buf, int len, int off); extern int bbc_i2c_write_buf(struct bbc_i2c_client *, char *buf, int len, int off);
extern int bbc_i2c_read_buf(struct bbc_i2c_client *, char *buf, int len, int off); extern int bbc_i2c_read_buf(struct bbc_i2c_client *, char *buf, int len, int off);
extern int bbc_envctrl_init(struct bbc_i2c_bus *bp);
extern void bbc_envctrl_cleanup(struct bbc_i2c_bus *bp);
#endif /* _BBC_I2C_H */ #endif /* _BBC_I2C_H */
...@@ -229,7 +229,7 @@ static int d7s_probe(struct platform_device *op) ...@@ -229,7 +229,7 @@ static int d7s_probe(struct platform_device *op)
goto out; goto out;
} }
static int d7s_remove(struct platform_device *op) static void d7s_remove(struct platform_device *op)
{ {
struct d7s *p = dev_get_drvdata(&op->dev); struct d7s *p = dev_get_drvdata(&op->dev);
u8 regs = readb(p->regs); u8 regs = readb(p->regs);
...@@ -245,8 +245,6 @@ static int d7s_remove(struct platform_device *op) ...@@ -245,8 +245,6 @@ static int d7s_remove(struct platform_device *op)
misc_deregister(&d7s_miscdev); misc_deregister(&d7s_miscdev);
of_iounmap(&op->resource[0], p->regs, sizeof(u8)); of_iounmap(&op->resource[0], p->regs, sizeof(u8));
return 0;
} }
static const struct of_device_id d7s_match[] = { static const struct of_device_id d7s_match[] = {
...@@ -263,7 +261,7 @@ static struct platform_driver d7s_driver = { ...@@ -263,7 +261,7 @@ static struct platform_driver d7s_driver = {
.of_match_table = d7s_match, .of_match_table = d7s_match,
}, },
.probe = d7s_probe, .probe = d7s_probe,
.remove = d7s_remove, .remove_new = d7s_remove,
}; };
module_platform_driver(d7s_driver); module_platform_driver(d7s_driver);
...@@ -1097,7 +1097,7 @@ static int envctrl_probe(struct platform_device *op) ...@@ -1097,7 +1097,7 @@ static int envctrl_probe(struct platform_device *op)
return err; return err;
} }
static int envctrl_remove(struct platform_device *op) static void envctrl_remove(struct platform_device *op)
{ {
int index; int index;
...@@ -1108,8 +1108,6 @@ static int envctrl_remove(struct platform_device *op) ...@@ -1108,8 +1108,6 @@ static int envctrl_remove(struct platform_device *op)
for (index = 0; index < ENVCTRL_MAX_CPU * 2; index++) for (index = 0; index < ENVCTRL_MAX_CPU * 2; index++)
kfree(i2c_childlist[index].tables); kfree(i2c_childlist[index].tables);
return 0;
} }
static const struct of_device_id envctrl_match[] = { static const struct of_device_id envctrl_match[] = {
...@@ -1127,7 +1125,7 @@ static struct platform_driver envctrl_driver = { ...@@ -1127,7 +1125,7 @@ static struct platform_driver envctrl_driver = {
.of_match_table = envctrl_match, .of_match_table = envctrl_match,
}, },
.probe = envctrl_probe, .probe = envctrl_probe,
.remove = envctrl_remove, .remove_new = envctrl_remove,
}; };
module_platform_driver(envctrl_driver); module_platform_driver(envctrl_driver);
......
...@@ -187,11 +187,9 @@ static int flash_probe(struct platform_device *op) ...@@ -187,11 +187,9 @@ static int flash_probe(struct platform_device *op)
return misc_register(&flash_dev); return misc_register(&flash_dev);
} }
static int flash_remove(struct platform_device *op) static void flash_remove(struct platform_device *op)
{ {
misc_deregister(&flash_dev); misc_deregister(&flash_dev);
return 0;
} }
static const struct of_device_id flash_match[] = { static const struct of_device_id flash_match[] = {
...@@ -208,7 +206,7 @@ static struct platform_driver flash_driver = { ...@@ -208,7 +206,7 @@ static struct platform_driver flash_driver = {
.of_match_table = flash_match, .of_match_table = flash_match,
}, },
.probe = flash_probe, .probe = flash_probe,
.remove = flash_remove, .remove_new = flash_remove,
}; };
module_platform_driver(flash_driver); module_platform_driver(flash_driver);
......
...@@ -399,7 +399,7 @@ static int uctrl_probe(struct platform_device *op) ...@@ -399,7 +399,7 @@ static int uctrl_probe(struct platform_device *op)
goto out; goto out;
} }
static int uctrl_remove(struct platform_device *op) static void uctrl_remove(struct platform_device *op)
{ {
struct uctrl_driver *p = dev_get_drvdata(&op->dev); struct uctrl_driver *p = dev_get_drvdata(&op->dev);
...@@ -409,7 +409,6 @@ static int uctrl_remove(struct platform_device *op) ...@@ -409,7 +409,6 @@ static int uctrl_remove(struct platform_device *op)
of_iounmap(&op->resource[0], p->regs, resource_size(&op->resource[0])); of_iounmap(&op->resource[0], p->regs, resource_size(&op->resource[0]));
kfree(p); kfree(p);
} }
return 0;
} }
static const struct of_device_id uctrl_match[] = { static const struct of_device_id uctrl_match[] = {
...@@ -426,7 +425,7 @@ static struct platform_driver uctrl_driver = { ...@@ -426,7 +425,7 @@ static struct platform_driver uctrl_driver = {
.of_match_table = uctrl_match, .of_match_table = uctrl_match,
}, },
.probe = uctrl_probe, .probe = uctrl_probe,
.remove = uctrl_remove, .remove_new = uctrl_remove,
}; };
......
...@@ -98,7 +98,8 @@ config FONT_10x18 ...@@ -98,7 +98,8 @@ config FONT_10x18
config FONT_SUN8x16 config FONT_SUN8x16
bool "Sparc console 8x16 font" bool "Sparc console 8x16 font"
depends on (FRAMEBUFFER_CONSOLE && (FONTS || SPARC)) || BOOTX_TEXT depends on (FRAMEBUFFER_CONSOLE && (FONTS || SPARC)) || \
BOOTX_TEXT || EARLYFB
help help
This is the high resolution console font for Sun machines. Say Y. This is the high resolution console font for Sun machines. Say Y.
......
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