diff options
Diffstat (limited to 'arch/mips/loongson/common/cs5536')
| -rw-r--r-- | arch/mips/loongson/common/cs5536/cs5536_acc.c | 4 | ||||
| -rw-r--r-- | arch/mips/loongson/common/cs5536/cs5536_ehci.c | 4 | ||||
| -rw-r--r-- | arch/mips/loongson/common/cs5536/cs5536_ide.c | 4 | ||||
| -rw-r--r-- | arch/mips/loongson/common/cs5536/cs5536_isa.c | 18 | ||||
| -rw-r--r-- | arch/mips/loongson/common/cs5536/cs5536_mfgpt.c | 24 | ||||
| -rw-r--r-- | arch/mips/loongson/common/cs5536/cs5536_ohci.c | 4 | ||||
| -rw-r--r-- | arch/mips/loongson/common/cs5536/cs5536_pci.c | 4 | 
7 files changed, 36 insertions, 26 deletions
diff --git a/arch/mips/loongson/common/cs5536/cs5536_acc.c b/arch/mips/loongson/common/cs5536/cs5536_acc.c index b3fd5eab654..ab4d6cc5738 100644 --- a/arch/mips/loongson/common/cs5536/cs5536_acc.c +++ b/arch/mips/loongson/common/cs5536/cs5536_acc.c @@ -7,8 +7,8 @@   * Copyright (C) 2009 Lemote, Inc.   * Author: Wu Zhangjin, wuzhangjin@gmail.com   * - * This program is free software; you can redistribute  it and/or modify it - * under  the terms of  the GNU General  Public License as published by the + * This program is free software; you can redistribute	it and/or modify it + * under  the terms of	the GNU General	 Public License as published by the   * Free Software Foundation;  either version 2 of the  License, or (at your   * option) any later version.   */ diff --git a/arch/mips/loongson/common/cs5536/cs5536_ehci.c b/arch/mips/loongson/common/cs5536/cs5536_ehci.c index 5b5cbba699b..ec2e360267a 100644 --- a/arch/mips/loongson/common/cs5536/cs5536_ehci.c +++ b/arch/mips/loongson/common/cs5536/cs5536_ehci.c @@ -7,8 +7,8 @@   * Copyright (C) 2009 Lemote, Inc.   * Author: Wu Zhangjin, wuzhangjin@gmail.com   * - * This program is free software; you can redistribute  it and/or modify it - * under  the terms of  the GNU General  Public License as published by the + * This program is free software; you can redistribute	it and/or modify it + * under  the terms of	the GNU General	 Public License as published by the   * Free Software Foundation;  either version 2 of the  License, or (at your   * option) any later version.   */ diff --git a/arch/mips/loongson/common/cs5536/cs5536_ide.c b/arch/mips/loongson/common/cs5536/cs5536_ide.c index 681d1291a2c..a73414d9ee5 100644 --- a/arch/mips/loongson/common/cs5536/cs5536_ide.c +++ b/arch/mips/loongson/common/cs5536/cs5536_ide.c @@ -7,8 +7,8 @@   * Copyright (C) 2009 Lemote, Inc.   * Author: Wu Zhangjin, wuzhangjin@gmail.com   * - * This program is free software; you can redistribute  it and/or modify it - * under  the terms of  the GNU General  Public License as published by the + * This program is free software; you can redistribute	it and/or modify it + * under  the terms of	the GNU General	 Public License as published by the   * Free Software Foundation;  either version 2 of the  License, or (at your   * option) any later version.   */ diff --git a/arch/mips/loongson/common/cs5536/cs5536_isa.c b/arch/mips/loongson/common/cs5536/cs5536_isa.c index 4d9f65abeaf..924be39e773 100644 --- a/arch/mips/loongson/common/cs5536/cs5536_isa.c +++ b/arch/mips/loongson/common/cs5536/cs5536_isa.c @@ -7,12 +7,13 @@   * Copyright (C) 2009 Lemote, Inc.   * Author: Wu Zhangjin, wuzhangjin@gmail.com   * - * This program is free software; you can redistribute  it and/or modify it - * under  the terms of  the GNU General  Public License as published by the + * This program is free software; you can redistribute	it and/or modify it + * under  the terms of	the GNU General	 Public License as published by the   * Free Software Foundation;  either version 2 of the  License, or (at your   * option) any later version.   */ +#include <linux/pci.h>  #include <cs5536/cs5536.h>  #include <cs5536/cs5536_pci.h> @@ -314,3 +315,16 @@ u32 pci_isa_read_reg(int reg)  	return conf_data;  } + +/* + * The mfgpt timer interrupt is running early, so we must keep the south bridge + * mmio always enabled. Otherwise we may race with the PCI configuration which + * may temporarily disable it. When that happens and the timer interrupt fires, + * we are not able to clear it and the system will hang. + */ +static void cs5536_isa_mmio_always_on(struct pci_dev *dev) +{ +	dev->mmio_always_on = 1; +} +DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CS5536_ISA, +	PCI_CLASS_BRIDGE_ISA, 8, cs5536_isa_mmio_always_on); diff --git a/arch/mips/loongson/common/cs5536/cs5536_mfgpt.c b/arch/mips/loongson/common/cs5536/cs5536_mfgpt.c index 8c807c96519..12c75db2342 100644 --- a/arch/mips/loongson/common/cs5536/cs5536_mfgpt.c +++ b/arch/mips/loongson/common/cs5536/cs5536_mfgpt.c @@ -9,9 +9,9 @@   *   * Reference: AMD Geode(TM) CS5536 Companion Device Data Book   * - *  This program is free software; you can redistribute  it and/or modify it - *  under  the terms of  the GNU General  Public License as published by the - *  Free Software Foundation;  either version 2 of the  License, or (at your + *  This program is free software; you can redistribute	 it and/or modify it + *  under  the terms of	 the GNU General  Public License as published by the + *  Free Software Foundation;  either version 2 of the	License, or (at your   *  option) any later version.   */ @@ -27,8 +27,7 @@  #include <cs5536/cs5536_mfgpt.h> -DEFINE_SPINLOCK(mfgpt_lock); -EXPORT_SYMBOL(mfgpt_lock); +static DEFINE_RAW_SPINLOCK(mfgpt_lock);  static u32 mfgpt_base; @@ -55,7 +54,7 @@ EXPORT_SYMBOL(enable_mfgpt0_counter);  static void init_mfgpt_timer(enum clock_event_mode mode,  			     struct clock_event_device *evt)  { -	spin_lock(&mfgpt_lock); +	raw_spin_lock(&mfgpt_lock);  	switch (mode) {  	case CLOCK_EVT_MODE_PERIODIC: @@ -79,7 +78,7 @@ static void init_mfgpt_timer(enum clock_event_mode mode,  		/* Nothing to do here */  		break;  	} -	spin_unlock(&mfgpt_lock); +	raw_spin_unlock(&mfgpt_lock);  }  static struct clock_event_device mfgpt_clockevent = { @@ -111,7 +110,7 @@ static irqreturn_t timer_interrupt(int irq, void *dev_id)  static struct irqaction irq5 = {  	.handler = timer_interrupt, -	.flags = IRQF_DISABLED | IRQF_NOBALANCING | IRQF_TIMER, +	.flags = IRQF_NOBALANCING | IRQF_TIMER,  	.name = "timer"  }; @@ -157,7 +156,7 @@ static cycle_t mfgpt_read(struct clocksource *cs)  	static int old_count;  	static u32 old_jifs; -	spin_lock_irqsave(&mfgpt_lock, flags); +	raw_spin_lock_irqsave(&mfgpt_lock, flags);  	/*  	 * Although our caller may have the read side of xtime_lock,  	 * this is now a seqlock, and we are cheating in this routine @@ -191,7 +190,7 @@ static cycle_t mfgpt_read(struct clocksource *cs)  	old_count = count;  	old_jifs = jifs; -	spin_unlock_irqrestore(&mfgpt_lock, flags); +	raw_spin_unlock_irqrestore(&mfgpt_lock, flags);  	return (cycle_t) (jifs * COMPARE) + count;  } @@ -201,8 +200,6 @@ static struct clocksource clocksource_mfgpt = {  	.rating = 120, /* Functional for real use, but not desired */  	.read = mfgpt_read,  	.mask = CLOCKSOURCE_MASK(32), -	.mult = 0, -	.shift = 22,  };  int __init init_mfgpt_clocksource(void) @@ -210,8 +207,7 @@ int __init init_mfgpt_clocksource(void)  	if (num_possible_cpus() > 1)	/* MFGPT does not scale! */  		return 0; -	clocksource_mfgpt.mult = clocksource_hz2mult(MFGPT_TICK_RATE, 22); -	return clocksource_register(&clocksource_mfgpt); +	return clocksource_register_hz(&clocksource_mfgpt, MFGPT_TICK_RATE);  }  arch_initcall(init_mfgpt_clocksource); diff --git a/arch/mips/loongson/common/cs5536/cs5536_ohci.c b/arch/mips/loongson/common/cs5536/cs5536_ohci.c index bdedf512baf..f7c905e50dc 100644 --- a/arch/mips/loongson/common/cs5536/cs5536_ohci.c +++ b/arch/mips/loongson/common/cs5536/cs5536_ohci.c @@ -7,8 +7,8 @@   * Copyright (C) 2009 Lemote, Inc.   * Author: Wu Zhangjin, wuzhangjin@gmail.com   * - * This program is free software; you can redistribute  it and/or modify it - * under  the terms of  the GNU General  Public License as published by the + * This program is free software; you can redistribute	it and/or modify it + * under  the terms of	the GNU General	 Public License as published by the   * Free Software Foundation;  either version 2 of the  License, or (at your   * option) any later version.   */ diff --git a/arch/mips/loongson/common/cs5536/cs5536_pci.c b/arch/mips/loongson/common/cs5536/cs5536_pci.c index 6dfeab11af0..81bed9d1806 100644 --- a/arch/mips/loongson/common/cs5536/cs5536_pci.c +++ b/arch/mips/loongson/common/cs5536/cs5536_pci.c @@ -7,8 +7,8 @@   * Copyright (C) 2009 Lemote, Inc.   * Author: Wu Zhangjin, wuzhangjin@gmail.com   * - * This program is free software; you can redistribute  it and/or modify it - * under  the terms of  the GNU General  Public License as published by the + * This program is free software; you can redistribute	it and/or modify it + * under  the terms of	the GNU General	 Public License as published by the   * Free Software Foundation;  either version 2 of the  License, or (at your   * option) any later version.   *  | 
