Merge tag 'powerpc-4.3-1' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux
Pull powerpc updates from Michael Ellerman:
- support "hybrid" iommu/direct DMA ops for coherent_mask < dma_mask
from Benjamin Herrenschmidt
- EEH fixes for SRIOV from Gavin
- introduce rtas_get_sensor_fast() for IRQ handlers from Thomas Huth
- use hardware RNG for arch_get_random_seed_* not arch_get_random_*
from Paul Mackerras
- seccomp filter support from Michael Ellerman
- opal_cec_reboot2() handling for HMIs & machine checks from Mahesh
Salgaonkar
- add powerpc timebase as a trace clock source from Naveen N. Rao
- misc cleanups in the xmon, signal & SLB code from Anshuman Khandual
- add an inline function to update POWER8 HID0 from Gautham R. Shenoy
- fix pte_pagesize_index() crash on 4K w/64K hash from Michael Ellerman
- drop support for 64K local store on 4K kernels from Michael Ellerman
- move dma_get_required_mask() from pnv_phb to pci_controller_ops from
Andrew Donnellan
- initialize distance lookup table from drconf path from Nikunj A
Dadhania
- enable RTC class support from Vaibhav Jain
- disable automatically blocked PCI config from Gavin Shan
- add LEDs driver for PowerNV platform from Vasant Hegde
- fix endianness issues in the HVSI driver from Laurent Dufour
- kexec endian fixes from Samuel Mendoza-Jonas
- fix corrupted pdn list from Gavin Shan
- fix fenced PHB caused by eeh_slot_error_detail() from Gavin Shan
- Freescale updates from Scott: Highlights include 32-bit memcpy/memset
optimizations, checksum optimizations, 85xx config fragments and
updates, device tree updates, e6500 fixes for non-SMP, and misc
cleanup and minor fixes.
- a ton of cxl updates & fixes:
- add explicit precision specifiers from Rasmus Villemoes
- use more common format specifier from Rasmus Villemoes
- destroy cxl_adapter_idr on module_exit from Johannes Thumshirn
- destroy afu->contexts_idr on release of an afu from Johannes
Thumshirn
- compile with -Werror from Daniel Axtens
- EEH support from Daniel Axtens
- plug irq_bitmap getting leaked in cxl_context from Vaibhav Jain
- add alternate MMIO error handling from Ian Munsie
- allow release of contexts which have been OPENED but not STARTED
from Andrew Donnellan
- remove use of macro DEFINE_PCI_DEVICE_TABLE from Vaishali Thakkar
- release irqs if memory allocation fails from Vaibhav Jain
- remove racy attempt to force EEH invocation in reset from Daniel
Axtens
- fix + cleanup error paths in cxl_dev_context_init from Ian Munsie
- fix force unmapping mmaps of contexts allocated through the kernel
api from Ian Munsie
- set up and enable PSL Timebase from Philippe Bergheaud
* tag 'powerpc-4.3-1' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux: (140 commits)
cxl: Set up and enable PSL Timebase
cxl: Fix force unmapping mmaps of contexts allocated through the kernel api
cxl: Fix + cleanup error paths in cxl_dev_context_init
powerpc/eeh: Fix fenced PHB caused by eeh_slot_error_detail()
powerpc/pseries: Cleanup on pci_dn_reconfig_notifier()
powerpc/pseries: Fix corrupted pdn list
powerpc/powernv: Enable LEDS support
powerpc/iommu: Set default DMA offset in dma_dev_setup
cxl: Remove racy attempt to force EEH invocation in reset
cxl: Release irqs if memory allocation fails
cxl: Remove use of macro DEFINE_PCI_DEVICE_TABLE
powerpc/powernv: Fix mis-merge of OPAL support for LEDS driver
powerpc/powernv: Reset HILE before kexec_sequence()
powerpc/kexec: Reset secondary cpu endianness before kexec
powerpc/hvsi: Fix endianness issues in the HVSI driver
leds/powernv: Add driver for PowerNV platform
powerpc/powernv: Create LED platform device
powerpc/powernv: Add OPAL interfaces for accessing and modifying system LED states
powerpc/powernv: Fix the log message when disabling VF
cxl: Allow release of contexts which have been OPENED but not STARTED
...
This commit is contained in:
+30
-13
@@ -62,7 +62,7 @@ int fsl_ifc_find(phys_addr_t addr_base)
|
||||
return -ENODEV;
|
||||
|
||||
for (i = 0; i < fsl_ifc_ctrl_dev->banks; i++) {
|
||||
u32 cspr = in_be32(&fsl_ifc_ctrl_dev->regs->cspr_cs[i].cspr);
|
||||
u32 cspr = ifc_in32(&fsl_ifc_ctrl_dev->regs->cspr_cs[i].cspr);
|
||||
if (cspr & CSPR_V && (cspr & CSPR_BA) ==
|
||||
convert_ifc_address(addr_base))
|
||||
return i;
|
||||
@@ -79,16 +79,16 @@ static int fsl_ifc_ctrl_init(struct fsl_ifc_ctrl *ctrl)
|
||||
/*
|
||||
* Clear all the common status and event registers
|
||||
*/
|
||||
if (in_be32(&ifc->cm_evter_stat) & IFC_CM_EVTER_STAT_CSER)
|
||||
out_be32(&ifc->cm_evter_stat, IFC_CM_EVTER_STAT_CSER);
|
||||
if (ifc_in32(&ifc->cm_evter_stat) & IFC_CM_EVTER_STAT_CSER)
|
||||
ifc_out32(IFC_CM_EVTER_STAT_CSER, &ifc->cm_evter_stat);
|
||||
|
||||
/* enable all error and events */
|
||||
out_be32(&ifc->cm_evter_en, IFC_CM_EVTER_EN_CSEREN);
|
||||
ifc_out32(IFC_CM_EVTER_EN_CSEREN, &ifc->cm_evter_en);
|
||||
|
||||
/* enable all error and event interrupts */
|
||||
out_be32(&ifc->cm_evter_intr_en, IFC_CM_EVTER_INTR_EN_CSERIREN);
|
||||
out_be32(&ifc->cm_erattr0, 0x0);
|
||||
out_be32(&ifc->cm_erattr1, 0x0);
|
||||
ifc_out32(IFC_CM_EVTER_INTR_EN_CSERIREN, &ifc->cm_evter_intr_en);
|
||||
ifc_out32(0x0, &ifc->cm_erattr0);
|
||||
ifc_out32(0x0, &ifc->cm_erattr1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -127,9 +127,9 @@ static u32 check_nand_stat(struct fsl_ifc_ctrl *ctrl)
|
||||
|
||||
spin_lock_irqsave(&nand_irq_lock, flags);
|
||||
|
||||
stat = in_be32(&ifc->ifc_nand.nand_evter_stat);
|
||||
stat = ifc_in32(&ifc->ifc_nand.nand_evter_stat);
|
||||
if (stat) {
|
||||
out_be32(&ifc->ifc_nand.nand_evter_stat, stat);
|
||||
ifc_out32(stat, &ifc->ifc_nand.nand_evter_stat);
|
||||
ctrl->nand_stat = stat;
|
||||
wake_up(&ctrl->nand_wait);
|
||||
}
|
||||
@@ -161,16 +161,16 @@ static irqreturn_t fsl_ifc_ctrl_irq(int irqno, void *data)
|
||||
irqreturn_t ret = IRQ_NONE;
|
||||
|
||||
/* read for chip select error */
|
||||
cs_err = in_be32(&ifc->cm_evter_stat);
|
||||
cs_err = ifc_in32(&ifc->cm_evter_stat);
|
||||
if (cs_err) {
|
||||
dev_err(ctrl->dev, "transaction sent to IFC is not mapped to"
|
||||
"any memory bank 0x%08X\n", cs_err);
|
||||
/* clear the chip select error */
|
||||
out_be32(&ifc->cm_evter_stat, IFC_CM_EVTER_STAT_CSER);
|
||||
ifc_out32(IFC_CM_EVTER_STAT_CSER, &ifc->cm_evter_stat);
|
||||
|
||||
/* read error attribute registers print the error information */
|
||||
status = in_be32(&ifc->cm_erattr0);
|
||||
err_addr = in_be32(&ifc->cm_erattr1);
|
||||
status = ifc_in32(&ifc->cm_erattr0);
|
||||
err_addr = ifc_in32(&ifc->cm_erattr1);
|
||||
|
||||
if (status & IFC_CM_ERATTR0_ERTYP_READ)
|
||||
dev_err(ctrl->dev, "Read transaction error"
|
||||
@@ -231,6 +231,23 @@ static int fsl_ifc_ctrl_probe(struct platform_device *dev)
|
||||
goto err;
|
||||
}
|
||||
|
||||
version = ifc_in32(&fsl_ifc_ctrl_dev->regs->ifc_rev) &
|
||||
FSL_IFC_VERSION_MASK;
|
||||
banks = (version == FSL_IFC_VERSION_1_0_0) ? 4 : 8;
|
||||
dev_info(&dev->dev, "IFC version %d.%d, %d banks\n",
|
||||
version >> 24, (version >> 16) & 0xf, banks);
|
||||
|
||||
fsl_ifc_ctrl_dev->version = version;
|
||||
fsl_ifc_ctrl_dev->banks = banks;
|
||||
|
||||
if (of_property_read_bool(dev->dev.of_node, "little-endian")) {
|
||||
fsl_ifc_ctrl_dev->little_endian = true;
|
||||
dev_dbg(&dev->dev, "IFC REGISTERS are LITTLE endian\n");
|
||||
} else {
|
||||
fsl_ifc_ctrl_dev->little_endian = false;
|
||||
dev_dbg(&dev->dev, "IFC REGISTERS are BIG endian\n");
|
||||
}
|
||||
|
||||
version = ioread32be(&fsl_ifc_ctrl_dev->regs->ifc_rev) &
|
||||
FSL_IFC_VERSION_MASK;
|
||||
banks = (version == FSL_IFC_VERSION_1_0_0) ? 4 : 8;
|
||||
|
||||
Reference in New Issue
Block a user