mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-31 04:01:48 -04:00
Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc
* 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc: (106 commits) powerpc/p3060qds: Add support for P3060QDS board powerpc/83xx: Add shutdown request support to MCU handling on MPC8349 MITX powerpc/85xx: Make kexec to interate over online cpus powerpc/fsl_booke: Fix comment in head_fsl_booke.S powerpc/85xx: issue 15 EOI after core reset for FSL CoreNet devices powerpc/8xxx: Fix interrupt handling in MPC8xxx GPIO driver powerpc/85xx: Add 'fsl,pq3-gpio' compatiable for GPIO driver powerpc/86xx: Correct Gianfar support for GE boards powerpc/cpm: Clear muram before it is in use. drivers/virt: add ioctl for 32-bit compat on 64-bit to fsl-hv-manager powerpc/fsl_msi: add support for "msi-address-64" property powerpc/85xx: Setup secondary cores PIR with hard SMP id powerpc/fsl-booke: Fix settlbcam for 64-bit powerpc/85xx: Adding DCSR node to dtsi device trees powerpc/85xx: clean up FPGA device tree nodes for Freecsale QorIQ boards powerpc/85xx: fix PHYS_64BIT selection for P1022DS powerpc/fsl-booke: Fix setup_initial_memory_limit to not blindly map powerpc: respect mem= setting for early memory limit setup powerpc: Update corenet64_smp_defconfig powerpc: Update mpc85xx/corenet 32-bit defconfigs ... Fix up trivial conflicts in: - arch/powerpc/configs/40x/hcu4_defconfig removed stale file, edited elsewhere - arch/powerpc/include/asm/udbg.h, arch/powerpc/kernel/udbg.c: added opal and gelic drivers vs added ePAPR driver - drivers/tty/serial/8250.c moved UPIO_TSI to powerpc vs removed UPIO_DWAPB support
This commit is contained in:
commit
1197ab2942
189 changed files with 9410 additions and 979 deletions
|
|
@ -90,6 +90,7 @@ enum apimask_bits {
|
|||
ECC_MASK_ENABLE = (APIMASK_ECC_UE_H | APIMASK_ECC_CE_H |
|
||||
APIMASK_ECC_UE_L | APIMASK_ECC_CE_L),
|
||||
};
|
||||
#define APIMASK_ADI(n) CPC925_BIT(((n)+1))
|
||||
|
||||
/************************************************************
|
||||
* Processor Interface Exception Register (APIEXCP)
|
||||
|
|
@ -581,16 +582,73 @@ static void cpc925_mc_check(struct mem_ctl_info *mci)
|
|||
}
|
||||
|
||||
/******************** CPU err device********************************/
|
||||
static u32 cpc925_cpu_mask_disabled(void)
|
||||
{
|
||||
struct device_node *cpus;
|
||||
struct device_node *cpunode = NULL;
|
||||
static u32 mask = 0;
|
||||
|
||||
/* use cached value if available */
|
||||
if (mask != 0)
|
||||
return mask;
|
||||
|
||||
mask = APIMASK_ADI0 | APIMASK_ADI1;
|
||||
|
||||
cpus = of_find_node_by_path("/cpus");
|
||||
if (cpus == NULL) {
|
||||
cpc925_printk(KERN_DEBUG, "No /cpus node !\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
while ((cpunode = of_get_next_child(cpus, cpunode)) != NULL) {
|
||||
const u32 *reg = of_get_property(cpunode, "reg", NULL);
|
||||
|
||||
if (strcmp(cpunode->type, "cpu")) {
|
||||
cpc925_printk(KERN_ERR, "Not a cpu node in /cpus: %s\n", cpunode->name);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (reg == NULL || *reg > 2) {
|
||||
cpc925_printk(KERN_ERR, "Bad reg value at %s\n", cpunode->full_name);
|
||||
continue;
|
||||
}
|
||||
|
||||
mask &= ~APIMASK_ADI(*reg);
|
||||
}
|
||||
|
||||
if (mask != (APIMASK_ADI0 | APIMASK_ADI1)) {
|
||||
/* We assume that each CPU sits on it's own PI and that
|
||||
* for present CPUs the reg property equals to the PI
|
||||
* interface id */
|
||||
cpc925_printk(KERN_WARNING,
|
||||
"Assuming PI id is equal to CPU MPIC id!\n");
|
||||
}
|
||||
|
||||
of_node_put(cpunode);
|
||||
of_node_put(cpus);
|
||||
|
||||
return mask;
|
||||
}
|
||||
|
||||
/* Enable CPU Errors detection */
|
||||
static void cpc925_cpu_init(struct cpc925_dev_info *dev_info)
|
||||
{
|
||||
u32 apimask;
|
||||
u32 cpumask;
|
||||
|
||||
apimask = __raw_readl(dev_info->vbase + REG_APIMASK_OFFSET);
|
||||
if ((apimask & CPU_MASK_ENABLE) == 0) {
|
||||
apimask |= CPU_MASK_ENABLE;
|
||||
__raw_writel(apimask, dev_info->vbase + REG_APIMASK_OFFSET);
|
||||
|
||||
cpumask = cpc925_cpu_mask_disabled();
|
||||
if (apimask & cpumask) {
|
||||
cpc925_printk(KERN_WARNING, "CPU(s) not present, "
|
||||
"but enabled in APIMASK, disabling\n");
|
||||
apimask &= ~cpumask;
|
||||
}
|
||||
|
||||
if ((apimask & CPU_MASK_ENABLE) == 0)
|
||||
apimask |= CPU_MASK_ENABLE;
|
||||
|
||||
__raw_writel(apimask, dev_info->vbase + REG_APIMASK_OFFSET);
|
||||
}
|
||||
|
||||
/* Disable CPU Errors detection */
|
||||
|
|
@ -622,6 +680,9 @@ static void cpc925_cpu_check(struct edac_device_ctl_info *edac_dev)
|
|||
if ((apiexcp & CPU_EXCP_DETECTED) == 0)
|
||||
return;
|
||||
|
||||
if ((apiexcp & ~cpc925_cpu_mask_disabled()) == 0)
|
||||
return;
|
||||
|
||||
apimask = __raw_readl(dev_info->vbase + REG_APIMASK_OFFSET);
|
||||
cpc925_printk(KERN_INFO, "Processor Interface Fault\n"
|
||||
"Processor Interface register dump:\n");
|
||||
|
|
|
|||
|
|
@ -205,7 +205,7 @@ static struct platform_driver ppc4xx_edac_driver = {
|
|||
.remove = ppc4xx_edac_remove,
|
||||
.driver = {
|
||||
.owner = THIS_MODULE,
|
||||
.name = PPC4XX_EDAC_MODULE_NAME
|
||||
.name = PPC4XX_EDAC_MODULE_NAME,
|
||||
.of_match_table = ppc4xx_edac_match,
|
||||
},
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in a new issue