| From 2c86f62c4b196ce43f94197018c22dc6ebc58ce6 Mon Sep 17 00:00:00 2001 |
| From: Geert Uytterhoeven <geert+renesas@glider.be> |
| Date: Wed, 16 Oct 2019 16:33:06 +0200 |
| Subject: [PATCH] soc: renesas: Add missing check for non-zero product register |
| address |
| |
| commit 4194b583c104922c6141d6610bfbce26847959df upstream. |
| |
| If the DTB for a device with an RZ/A2 SoC lacks a device node for the |
| BSID register, the ID validation code falls back to using a register at |
| address 0x0, which leads to undefined behavior (e.g. reading back a |
| random value). |
| |
| This could be fixed by letting fam_rza2.reg point to the actual BSID |
| register. However, the hardcoded fallbacks were meant for backwards |
| compatibility with old DTBs only, not for new SoCs. Hence fix this by |
| validating renesas_family.reg before using it. |
| |
| Fixes: 175f435f44b724e3 ("soc: renesas: identify RZ/A2") |
| Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be> |
| Link: https://lore.kernel.org/r/20191016143306.28995-1-geert+renesas@glider.be |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/soc/renesas/renesas-soc.c b/drivers/soc/renesas/renesas-soc.c |
| index 3299cf5365f3..6651755e9f20 100644 |
| --- a/drivers/soc/renesas/renesas-soc.c |
| +++ b/drivers/soc/renesas/renesas-soc.c |
| @@ -326,7 +326,7 @@ static int __init renesas_soc_init(void) |
| if (np) { |
| chipid = of_iomap(np, 0); |
| of_node_put(np); |
| - } else if (soc->id) { |
| + } else if (soc->id && family->reg) { |
| chipid = ioremap(family->reg, 4); |
| } |
| if (chipid) { |
| -- |
| 2.7.4 |
| |