iommu/arm-smmu: replace devm_request_and_ioremap by devm_ioremap_resource

Use devm_ioremap_resource instead of devm_request_and_ioremap.

This was partly done using the semantic patch
scripts/coccinelle/api/devm_ioremap_resource.cocci

The error-handling code on the call to platform_get_resource was removed
manually, and the initialization of smmu->size was manually moved lower, to
take advantage of the NULL test on res performed by devm_ioremap_resource.

Signed-off-by: Julia Lawall <Julia.Lawall@lip6.fr>
Signed-off-by: Will Deacon <will.deacon@arm.com>
iommu/arm-smmu: use relaxed accessors where possible

Apart from fault handling and page table manipulation, we don't care
about memory ordering between SMMU control registers and normal,
cacheable memory, so use the _relaxed I/O accessors wherever possible.

Signed-off-by: Will Deacon <will.deacon@arm.com>
iommu/arm-smmu: Switch to subsys_initcall for driver registration

This should ensure that arm-smmu is initialized before other drivers
start handling devices that propably need smmu support.

Signed-off-by: Andreas Herrmann <andreas.herrmann@calxeda.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
iommu/arm-smmu: Refine check for proper size of mapped region

There is already a check to print a warning if the size of SMMU
address space (calculated from SMMU register values) is greater than
the size of the mapped memory region (e.g. passed via DT to the
driver).

Adapt this check to print also a warning in case the mapped region is
larger than the SMMU address space.

Such a mismatch could be intentional (to fix wrong register values).
If its not intentional (e.g. due to wrong DT information) this will
very likely cause a malfunction of the driver as SMMU_CB_BASE is
derived from the size of the mapped region. The warning helps to
identify the root cause in this case.

Signed-off-by: Andreas Herrmann <andreas.herrmann@calxeda.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
iommu/arm-smmu: Check for num_context_irqs > 0 to avoid divide by zero exception

With the right (or wrong;-) definition of v1 SMMU node in DTB it is
possible to trigger a division by zero in arm_smmu_init_domain_context
(if number of context irqs is 0):

       if (smmu->version == 1) {
               root_cfg->irptndx = atomic_inc_return(&smmu->irptndx);
 =>            root_cfg->irptndx %= smmu->num_context_irqs;
       } else {

Avoid this by checking for num_context_irqs > 0 when probing
for SMMU devices.

Signed-off-by: Andreas Herrmann <andreas.herrmann@calxeda.com>
[will: changed to dev_err on probe failure path]
Signed-off-by: Will Deacon <will.deacon@arm.com>
iommu/arm-smmu: Print context fault information

Print context fault information when the fault was not handled by
report_iommu_fault.

Signed-off-by: Andreas Herrmann <andreas.herrmann@calxeda.com>
[will: fixed string formatting]
Signed-off-by: Will Deacon <will.deacon@arm.com>
iommu/arm-smmu: Clear global and context bank fault status registers

After reset these registers have unknown values.
This might cause problems when evaluating SMMU_GFSR and/or SMMU_CB_FSR
in handlers for combined interrupts.

Signed-off-by: Andreas Herrmann <andreas.herrmann@calxeda.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Merge remote-tracking branch 'spi/fix/mcspi' into spi-linus
Merge remote-tracking branch 'spi/fix/modalias' into spi-linus
Merge remote-tracking branch 'spi/fix/s3c64xx' into spi-linus
Merge remote-tracking branch 'spi/topic/atmel' into spi-next
Merge remote-tracking branch 'spi/topic/bfin' into spi-next
Merge remote-tracking branch 'spi/topic/bitbang' into spi-next
Merge remote-tracking branch 'spi/topic/butterfly' into spi-next
Merge remote-tracking branch 'spi/topic/clps711x' into spi-next
Merge remote-tracking branch 'spi/topic/core' into spi-next
Merge remote-tracking branch 'spi/topic/davinci' into spi-next
Merge remote-tracking branch 'spi/topic/designware' into spi-next
Merge remote-tracking branch 'spi/topic/dev' into spi-next
Merge remote-tracking branch 'spi/topic/dspi' into spi-next