Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3c376295 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6: (32 commits)
  sh: intc: switch irq_desc iteration to new active IRQ iterator.
  sh: fix up cpu hotplug IRQ migration for irq_data changes.
  sh: oprofile: Make sure the backtrace op is available for timer-fallback.
  sh64: oprofile: Fix up kernel stack pointer size mismatch.
  sh: oprofile: Fix up and extend op_name_from_perf_id().
  sh: lockless get_user_pages_fast()
  sh64: _PAGE_SPECIAL support.
  sound: sh: ctrl_in/outX to __raw_read/writeX conversion.
  sh: disable deprecated genirq support.
  sh: update show_interrupts() for irq_data chip lookup.
  sh: intc: irq_data conversion.
  sh64: irq_data conversion.
  sh64: update for IRQ flag handling naming changes.
  rtc: rtc-rs5c313: ctrl_in/outX to __raw_read/writeX conversion.
  sh: mach-se: irq_data conversion.
  input: hp680_ts_input: ctrl_in/outX to __raw_read/writeX conversion.
  input: jornada680_kbd: ctrl_in/outX to __raw_read/writeX conversion.
  sh: hd64461: irq_data conversion.
  sh: mach-x3proto: irq_data conversion.
  sh: mach-systemh: irq_data conversion.
  ...
parents e9f29c9a 63111a3a
Loading
Loading
Loading
Loading
+4 −10
Original line number Diff line number Diff line
@@ -25,8 +25,11 @@ config SUPERH
	select HAVE_KERNEL_LZO
	select HAVE_SYSCALL_TRACEPOINTS
	select HAVE_REGS_AND_STACK_ACCESS_API
	select HAVE_GENERIC_HARDIRQS
	select HAVE_SPARSE_IRQ
	select RTC_LIB
	select GENERIC_ATOMIC64
	select GENERIC_HARDIRQS_NO_DEPRECATED
	help
	  The SuperH is a RISC processor targeted for use in embedded systems
	  and consumer electronics; it was also used in the Sega Dreamcast
@@ -49,6 +52,7 @@ config SUPERH32
	select HAVE_MIXED_BREAKPOINTS_REGS
	select PERF_EVENTS
	select ARCH_HIBERNATION_POSSIBLE if MMU
	select SPARSE_IRQ

config SUPERH64
	def_bool ARCH = "sh64"
@@ -78,19 +82,9 @@ config GENERIC_FIND_NEXT_BIT
config GENERIC_HWEIGHT
	def_bool y

config GENERIC_HARDIRQS
	def_bool y

config GENERIC_HARDIRQS_NO__DO_IRQ
	def_bool y

config IRQ_PER_CPU
	def_bool y

config SPARSE_IRQ
	def_bool y
	depends on SUPERH32

config GENERIC_GPIO
	def_bool n

+6 −10
Original line number Diff line number Diff line
@@ -55,8 +55,9 @@ static struct irqaction cayman_action_pci2 = {
	.flags		= IRQF_DISABLED,
};

static void enable_cayman_irq(unsigned int irq)
static void enable_cayman_irq(struct irq_data *data)
{
	unsigned int irq = data->irq;
	unsigned long flags;
	unsigned long mask;
	unsigned int reg;
@@ -72,8 +73,9 @@ static void enable_cayman_irq(unsigned int irq)
	local_irq_restore(flags);
}

void disable_cayman_irq(unsigned int irq)
static void disable_cayman_irq(struct irq_data *data)
{
	unsigned int irq = data->irq;
	unsigned long flags;
	unsigned long mask;
	unsigned int reg;
@@ -89,16 +91,10 @@ void disable_cayman_irq(unsigned int irq)
	local_irq_restore(flags);
}

static void ack_cayman_irq(unsigned int irq)
{
	disable_cayman_irq(irq);
}

struct irq_chip cayman_irq_type = {
	.name		= "Cayman-IRQ",
	.unmask 	= enable_cayman_irq,
	.mask		= disable_cayman_irq,
	.mask_ack	= ack_cayman_irq,
	.irq_unmask	= enable_cayman_irq,
	.irq_mask	= disable_cayman_irq,
};

int cayman_irq_demux(int evt)
+10 −7
Original line number Diff line number Diff line
@@ -60,8 +60,9 @@
 */

/* Disable the hardware event by masking its bit in its EMR */
static inline void disable_systemasic_irq(unsigned int irq)
static inline void disable_systemasic_irq(struct irq_data *data)
{
	unsigned int irq = data->irq;
	__u32 emr = EMR_BASE + (LEVEL(irq) << 4) + (LEVEL(irq) << 2);
	__u32 mask;

@@ -71,8 +72,9 @@ static inline void disable_systemasic_irq(unsigned int irq)
}

/* Enable the hardware event by setting its bit in its EMR */
static inline void enable_systemasic_irq(unsigned int irq)
static inline void enable_systemasic_irq(struct irq_data *data)
{
	unsigned int irq = data->irq;
	__u32 emr = EMR_BASE + (LEVEL(irq) << 4) + (LEVEL(irq) << 2);
	__u32 mask;

@@ -82,18 +84,19 @@ static inline void enable_systemasic_irq(unsigned int irq)
}

/* Acknowledge a hardware event by writing its bit back to its ESR */
static void mask_ack_systemasic_irq(unsigned int irq)
static void mask_ack_systemasic_irq(struct irq_data *data)
{
	unsigned int irq = data->irq;
	__u32 esr = ESR_BASE + (LEVEL(irq) << 2);
	disable_systemasic_irq(irq);
	disable_systemasic_irq(data);
	outl((1 << EVENT_BIT(irq)), esr);
}

struct irq_chip systemasic_int = {
	.name		= "System ASIC",
	.mask		= disable_systemasic_irq,
	.mask_ack	= mask_ack_systemasic_irq,
	.unmask		= enable_systemasic_irq,
	.irq_mask	= disable_systemasic_irq,
	.irq_mask_ack	= mask_ack_systemasic_irq,
	.irq_unmask	= enable_systemasic_irq,
};

/*
+7 −8
Original line number Diff line number Diff line
@@ -18,25 +18,24 @@
#include <linux/io.h>
#include <mach-landisk/mach/iodata_landisk.h>

static void disable_landisk_irq(unsigned int irq)
static void disable_landisk_irq(struct irq_data *data)
{
	unsigned char mask = 0xff ^ (0x01 << (irq - 5));
	unsigned char mask = 0xff ^ (0x01 << (data->irq - 5));

	__raw_writeb(__raw_readb(PA_IMASK) & mask, PA_IMASK);
}

static void enable_landisk_irq(unsigned int irq)
static void enable_landisk_irq(struct irq_data *data)
{
	unsigned char value = (0x01 << (irq - 5));
	unsigned char value = (0x01 << (data->irq - 5));

	__raw_writeb(__raw_readb(PA_IMASK) | value, PA_IMASK);
}

static struct irq_chip landisk_irq_chip __read_mostly = {
	.name		= "LANDISK",
	.mask		= disable_landisk_irq,
	.unmask		= enable_landisk_irq,
	.mask_ack	= disable_landisk_irq,
	.irq_mask	= disable_landisk_irq,
	.irq_unmask	= enable_landisk_irq,
};

/*
@@ -50,7 +49,7 @@ void __init init_landisk_IRQ(void)
		disable_irq_nosync(i);
		set_irq_chip_and_handler_name(i, &landisk_irq_chip,
					      handle_level_irq, "level");
		enable_landisk_irq(i);
		enable_landisk_irq(irq_get_irq_data(i));
	}
	__raw_writeb(0x00, PA_PWRINT_CLR);
}
+11 −19
Original line number Diff line number Diff line
@@ -65,19 +65,9 @@ static const struct {
#  error Inconsistancy in defining the IRQ# for primary IDE!
#endif

static void enable_microdev_irq(unsigned int irq);
static void disable_microdev_irq(unsigned int irq);
static void mask_and_ack_microdev(unsigned int);

static struct irq_chip microdev_irq_type = {
	.name = "MicroDev-IRQ",
	.unmask = enable_microdev_irq,
	.mask = disable_microdev_irq,
	.ack = mask_and_ack_microdev,
};

static void disable_microdev_irq(unsigned int irq)
static void disable_microdev_irq(struct irq_data *data)
{
	unsigned int irq = data->irq;
	unsigned int fpgaIrq;

	if (irq >= NUM_EXTERNAL_IRQS)
@@ -91,8 +81,9 @@ static void disable_microdev_irq(unsigned int irq)
	__raw_writel(MICRODEV_FPGA_INTC_MASK(fpgaIrq), MICRODEV_FPGA_INTDSB_REG);
}

static void enable_microdev_irq(unsigned int irq)
static void enable_microdev_irq(struct irq_data *data)
{
	unsigned int irq = data->irq;
	unsigned long priorityReg, priorities, pri;
	unsigned int fpgaIrq;

@@ -116,17 +107,18 @@ static void enable_microdev_irq(unsigned int irq)
	__raw_writel(MICRODEV_FPGA_INTC_MASK(fpgaIrq), MICRODEV_FPGA_INTENB_REG);
}

static struct irq_chip microdev_irq_type = {
	.name = "MicroDev-IRQ",
	.irq_unmask = enable_microdev_irq,
	.irq_mask = disable_microdev_irq,
};

/* This function sets the desired irq handler to be a MicroDev type */
static void __init make_microdev_irq(unsigned int irq)
{
	disable_irq_nosync(irq);
	set_irq_chip_and_handler(irq, &microdev_irq_type, handle_level_irq);
	disable_microdev_irq(irq);
}

static void mask_and_ack_microdev(unsigned int irq)
{
	disable_microdev_irq(irq);
	disable_microdev_irq(irq_get_irq_data(irq));
}

extern void __init init_microdev_irq(void)
Loading