Merge branch '4.14-fixes' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus
Pull MIPS fixes from Ralf Baechle: - Fix a build error on MSP71xx which used to rely on somehow magically <asm/setup.h> being pulled in which no longer happens. - Fix the __write_64bit_c0_split inline assembler where there was the theoretical possibility of GCC interpret the constraints such that bad code could result. - A __init was causing section mismatch errors on Alchemy. Just to be on the safe side, Manuel's patch does away with all of them. - Fix perf event init. * '4.14-fixes' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus: MIPS: PCI: fix pcibios_map_irq section mismatch MIPS: Fix input modify in __write_64bit_c0_split() MIPS: MSP71xx: Include asm/setup.h MIPS: Fix perf event init
This commit is contained in:
commit
7e6d8f8358
@ -1377,29 +1377,32 @@ do { \
|
||||
|
||||
#define __write_64bit_c0_split(source, sel, val) \
|
||||
do { \
|
||||
unsigned long long __tmp; \
|
||||
unsigned long __flags; \
|
||||
\
|
||||
local_irq_save(__flags); \
|
||||
if (sel == 0) \
|
||||
__asm__ __volatile__( \
|
||||
".set\tmips64\n\t" \
|
||||
"dsll\t%L0, %L0, 32\n\t" \
|
||||
"dsll\t%L0, %L1, 32\n\t" \
|
||||
"dsrl\t%L0, %L0, 32\n\t" \
|
||||
"dsll\t%M0, %M0, 32\n\t" \
|
||||
"dsll\t%M0, %M1, 32\n\t" \
|
||||
"or\t%L0, %L0, %M0\n\t" \
|
||||
"dmtc0\t%L0, " #source "\n\t" \
|
||||
".set\tmips0" \
|
||||
: : "r" (val)); \
|
||||
: "=&r,r" (__tmp) \
|
||||
: "r,0" (val)); \
|
||||
else \
|
||||
__asm__ __volatile__( \
|
||||
".set\tmips64\n\t" \
|
||||
"dsll\t%L0, %L0, 32\n\t" \
|
||||
"dsll\t%L0, %L1, 32\n\t" \
|
||||
"dsrl\t%L0, %L0, 32\n\t" \
|
||||
"dsll\t%M0, %M0, 32\n\t" \
|
||||
"dsll\t%M0, %M1, 32\n\t" \
|
||||
"or\t%L0, %L0, %M0\n\t" \
|
||||
"dmtc0\t%L0, " #source ", " #sel "\n\t" \
|
||||
".set\tmips0" \
|
||||
: : "r" (val)); \
|
||||
: "=&r,r" (__tmp) \
|
||||
: "r,0" (val)); \
|
||||
local_irq_restore(__flags); \
|
||||
} while (0)
|
||||
|
||||
|
@ -618,8 +618,7 @@ static int mipspmu_event_init(struct perf_event *event)
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
if ((unsigned int)event->cpu >= nr_cpumask_bits ||
|
||||
(event->cpu >= 0 && !cpu_online(event->cpu)))
|
||||
if (event->cpu >= 0 && !cpu_online(event->cpu))
|
||||
return -ENODEV;
|
||||
|
||||
if (!atomic_inc_not_zero(&active_events)) {
|
||||
|
@ -38,7 +38,7 @@ static char irq_tab_capcella[][5] __initdata = {
|
||||
[14] = { -1, INTA, INTB, INTC, INTD }
|
||||
};
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
return irq_tab_capcella[slot][pin];
|
||||
}
|
||||
|
@ -174,7 +174,7 @@ static char irq_tab_raq2[] __initdata = {
|
||||
[COBALT_PCICONF_ETH1] = ETH1_IRQ
|
||||
};
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
if (cobalt_board_id <= COBALT_BRD_ID_QUBE1)
|
||||
return irq_tab_qube1[slot];
|
||||
|
@ -85,7 +85,7 @@ static void emma2rh_pci_host_fixup(struct pci_dev *dev)
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NEC, PCI_DEVICE_ID_NEC_EMMA2RH,
|
||||
emma2rh_pci_host_fixup);
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
return irq_map[slot][pin];
|
||||
}
|
||||
|
@ -19,7 +19,7 @@
|
||||
/* South bridge slot number is set by the pci probe process */
|
||||
static u8 sb_slot = 5;
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
int irq = 0;
|
||||
|
||||
|
@ -39,7 +39,7 @@ static char irq_tab_mace[][5] __initdata = {
|
||||
* irqs. I suppose a device without a pin A will thank us for doing it
|
||||
* right if there exists such a broken piece of crap.
|
||||
*/
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
return irq_tab_mace[slot][pin];
|
||||
}
|
||||
|
@ -23,7 +23,7 @@ int pcibios_plat_dev_init(struct pci_dev *dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
return of_irq_parse_and_map_pci(dev, slot, pin);
|
||||
}
|
||||
|
@ -51,7 +51,7 @@ static char irq_tab[][5] __initdata = {
|
||||
{0, 0, 0, 0, 0}, /* 27: Unused */
|
||||
};
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
int virq;
|
||||
|
||||
|
@ -32,7 +32,7 @@ static void print_fixup_info(const struct pci_dev *pdev)
|
||||
pdev->vendor, pdev->device, pdev->irq);
|
||||
}
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
print_fixup_info(dev);
|
||||
return dev->irq;
|
||||
|
@ -38,7 +38,7 @@ static char irq_tab[][5] __initdata = {
|
||||
{0, PCID, PCIA, PCIB, PCIC } /* 21: PCI Slot 4 */
|
||||
};
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
int virq;
|
||||
virq = irq_tab[slot][pin];
|
||||
|
@ -34,7 +34,7 @@ static const int irq_tab_mpc30x[] __initconst = {
|
||||
[29] = MQ200_IRQ,
|
||||
};
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
if (slot == 30)
|
||||
return internal_func_irqs[PCI_FUNC(dev->devfn)];
|
||||
|
@ -202,7 +202,7 @@ int pcibios_plat_dev_init(struct pci_dev *dev)
|
||||
* RETURNS: IRQ number
|
||||
*
|
||||
****************************************************************************/
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
#if !defined(CONFIG_PMC_MSP7120_GW) && !defined(CONFIG_PMC_MSP7120_EVAL)
|
||||
printk(KERN_WARNING "PCI: unknown board, no PCI IRQs assigned.\n");
|
||||
|
@ -130,7 +130,7 @@ static inline int is_rm300_revd(void)
|
||||
return (csmsr & 0xa0) == 0x20;
|
||||
}
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
switch (sni_brd_type) {
|
||||
case SNI_BRD_PCI_TOWER_CPLUS:
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
#include <asm/vr41xx/tb0219.h>
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
int irq = -1;
|
||||
|
||||
|
@ -23,7 +23,7 @@
|
||||
#include <asm/vr41xx/giu.h>
|
||||
#include <asm/vr41xx/tb0226.h>
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
int irq = -1;
|
||||
|
||||
|
@ -22,7 +22,7 @@
|
||||
|
||||
#include <asm/vr41xx/tb0287.h>
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
unsigned char bus;
|
||||
int irq = -1;
|
||||
|
@ -522,7 +522,7 @@ static int __init alchemy_pci_init(void)
|
||||
arch_initcall(alchemy_pci_init);
|
||||
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
struct alchemy_pci_context *ctx = dev->sysdata;
|
||||
if (ctx && ctx->board_map_irq)
|
||||
|
@ -28,7 +28,7 @@
|
||||
#include <linux/bcma/bcma.h>
|
||||
#include <bcm47xx.h>
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
@ -61,7 +61,7 @@ arch_initcall(lasat_pci_setup);
|
||||
#define LASAT_IRQ_PCIC (LASAT_IRQ_BASE + 7)
|
||||
#define LASAT_IRQ_PCID (LASAT_IRQ_BASE + 8)
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
switch (slot) {
|
||||
case 1:
|
||||
|
@ -361,7 +361,7 @@ static int mt7620_pci_probe(struct platform_device *pdev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
u16 cmd;
|
||||
u32 val;
|
||||
|
@ -59,7 +59,7 @@ union octeon_pci_address {
|
||||
} s;
|
||||
};
|
||||
|
||||
int __initconst (*octeon_pcibios_map_irq)(const struct pci_dev *dev,
|
||||
int (*octeon_pcibios_map_irq)(const struct pci_dev *dev,
|
||||
u8 slot, u8 pin);
|
||||
enum octeon_dma_bar_type octeon_dma_bar_type = OCTEON_DMA_BAR_TYPE_INVALID;
|
||||
|
||||
@ -74,7 +74,7 @@ enum octeon_dma_bar_type octeon_dma_bar_type = OCTEON_DMA_BAR_TYPE_INVALID;
|
||||
* as it goes through each bridge.
|
||||
* Returns Interrupt number for the device
|
||||
*/
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
if (octeon_pcibios_map_irq)
|
||||
return octeon_pcibios_map_irq(dev, slot, pin);
|
||||
|
@ -181,7 +181,7 @@ static inline void rt2880_pci_write_u32(unsigned long reg, u32 val)
|
||||
spin_unlock_irqrestore(&rt2880_pci_lock, flags);
|
||||
}
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
u16 cmd;
|
||||
int irq = -1;
|
||||
|
@ -564,7 +564,7 @@ err_put_intc_node:
|
||||
return err;
|
||||
}
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
return of_irq_parse_and_map_pci(dev, slot, pin);
|
||||
}
|
||||
|
@ -205,7 +205,7 @@ int xlp_socdev_to_node(const struct pci_dev *lnkdev)
|
||||
return PCI_SLOT(lnkdev->devfn) / 8;
|
||||
}
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
struct pci_dev *lnkdev;
|
||||
int lnkfunc, node;
|
||||
|
@ -315,7 +315,7 @@ static void xls_pcie_ack_b(struct irq_data *d)
|
||||
}
|
||||
}
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
return get_irq_vector(dev);
|
||||
}
|
||||
|
@ -22,6 +22,8 @@
|
||||
#include <linux/smp.h>
|
||||
#include <linux/interrupt.h>
|
||||
|
||||
#include <asm/setup.h>
|
||||
|
||||
#ifdef CONFIG_MIPS_MT_SMP
|
||||
#define MIPS_CPU_IPI_RESCHED_IRQ 0 /* SW int 0 for resched */
|
||||
#define MIPS_CPU_IPI_CALL_IRQ 1 /* SW int 1 for call */
|
||||
|
Loading…
x
Reference in New Issue
Block a user