diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2016-02-17 11:50:53 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-02-17 11:50:53 -0800 |
commit | c28b947d048d6539389309af70be0ac599122ec0 (patch) | |
tree | 47bfd18ffa68cedaf9eb2f3dc15c120ddc6cc70b /drivers/of | |
parent | 35683dd326b89751b5b45cb188978c83b22729c5 (diff) | |
parent | 43f3408261a2fd5054ada359efa15f0b78faf0a7 (diff) |
Merge tag 'devicetree-fixes-for-4.5-2' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux
Pull DeviceTree fixes from Rob Herring:
- Fix irq msi-map calculation for nonzero rid-base.
- Binding doc updates for GICv3, fsl-imx-uart, and S3C RTC.
* tag 'devicetree-fixes-for-4.5-2' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux:
rtc: s3c: Document required clocks in the DT binding
serial: fsl-imx-uart: Fix typo in fsl,dte-mode description
dt-bindings: arm, gic-v3: require that reserved cells are always 0
of/irq: Fix msi-map calculation for nonzero rid-base
Diffstat (limited to 'drivers/of')
-rw-r--r-- | drivers/of/irq.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/of/irq.c b/drivers/of/irq.c index 7ee21ae305ae..e7bfc175b8e1 100644 --- a/drivers/of/irq.c +++ b/drivers/of/irq.c @@ -635,6 +635,13 @@ static u32 __of_msi_map_rid(struct device *dev, struct device_node **np, msi_base = be32_to_cpup(msi_map + 2); rid_len = be32_to_cpup(msi_map + 3); + if (rid_base & ~map_mask) { + dev_err(parent_dev, + "Invalid msi-map translation - msi-map-mask (0x%x) ignores rid-base (0x%x)\n", + map_mask, rid_base); + return rid_out; + } + msi_controller_node = of_find_node_by_phandle(phandle); matched = (masked_rid >= rid_base && @@ -654,7 +661,7 @@ static u32 __of_msi_map_rid(struct device *dev, struct device_node **np, if (!matched) return rid_out; - rid_out = masked_rid + msi_base; + rid_out = masked_rid - rid_base + msi_base; dev_dbg(dev, "msi-map at: %s, using mask %08x, rid-base: %08x, msi-base: %08x, length: %08x, rid: %08x -> %08x\n", dev_name(parent_dev), map_mask, rid_base, msi_base, |