* [PATCH] soc: imx: gpc: restrict register range for regmap access
@ 2018-07-16 4:46 Anson Huang
2018-07-16 13:59 ` Fabio Estevam
0 siblings, 1 reply; 2+ messages in thread
From: Anson Huang @ 2018-07-16 4:46 UTC (permalink / raw)
To: shawnguo, s.hauer, kernel, fabio.estevam, linux-arm-kernel, linux-kernel
Cc: Linux-imx
GPC registers are NOT continuous, some registers are
reserved and accessing them from userspace will trigger
external abort, add regmap register access table to
avoid below abort:
root@imx6slevk:~# cat /sys/kernel/debug/regmap/20dc000.gpc/registers
[ 108.480477] Unhandled fault: imprecise external abort (0x1406) at 0xb6db5004
[ 108.487985] pgd = 42b54bfd
[ 108.490741] [b6db5004] *pgd=ba1b7831
[ 108.494386] Internal error: : 1406 [#1] SMP ARM
[ 108.498943] Modules linked in:
[ 108.502043] CPU: 0 PID: 389 Comm: cat Not tainted 4.18.0-rc1-00074-gc9f1f60-dirty #482
[ 108.509982] Hardware name: Freescale i.MX6 SoloLite (Device Tree)
[ 108.516123] PC is at regmap_mmio_read32le+0x20/0x24
[ 108.521031] LR is at regmap_mmio_read+0x40/0x60
[ 108.525586] pc : [<c059cf74>] lr : [<c059d1ac>] psr: 20060093
[ 108.531875] sp : eccf1d98 ip : eccf1da8 fp : eccf1da4
[ 108.537122] r10: ec2d3800 r9 : eccf1f60 r8 : ecfc0000
[ 108.542370] r7 : eccf1e2c r6 : eccf1e2c r5 : 00000028 r4 : ec338e00
[ 108.548920] r3 : 00000000 r2 : eccf1e2c r1 : f0980028 r0 : 00000000
[ 108.555474] Flags: nzCv IRQs off FIQs on Mode SVC_32 ISA ARM Segment none
[ 108.562720] Control: 10c5387d Table: acf4004a DAC: 00000051
[ 108.568491] Process cat (pid: 389, stack limit = 0xd4318a65)
[ 108.574174] Stack: (0xeccf1d98 to 0xeccf2000)
Signed-off-by: Anson Huang <Anson.Huang@nxp.com>
---
drivers/soc/imx/gpc.c | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/drivers/soc/imx/gpc.c b/drivers/soc/imx/gpc.c
index 32f0748..0097a93 100644
--- a/drivers/soc/imx/gpc.c
+++ b/drivers/soc/imx/gpc.c
@@ -27,9 +27,16 @@
#define GPC_PGC_SW2ISO_SHIFT 0x8
#define GPC_PGC_SW_SHIFT 0x0
+#define GPC_PGC_PCI_PDN 0x200
+#define GPC_PGC_PCI_SR 0x20c
+
#define GPC_PGC_GPU_PDN 0x260
#define GPC_PGC_GPU_PUPSCR 0x264
#define GPC_PGC_GPU_PDNSCR 0x268
+#define GPC_PGC_GPU_SR 0x26c
+
+#define GPC_PGC_DISP_PDN 0x240
+#define GPC_PGC_DISP_SR 0x24c
#define GPU_VPU_PUP_REQ BIT(1)
#define GPU_VPU_PDN_REQ BIT(0)
@@ -318,10 +325,24 @@ static const struct of_device_id imx_gpc_dt_ids[] = {
{ }
};
+static const struct regmap_range yes_ranges[] = {
+ regmap_reg_range(GPC_CNTR, GPC_CNTR),
+ regmap_reg_range(GPC_PGC_PCI_PDN, GPC_PGC_PCI_SR),
+ regmap_reg_range(GPC_PGC_GPU_PDN, GPC_PGC_GPU_SR),
+ regmap_reg_range(GPC_PGC_DISP_PDN, GPC_PGC_DISP_SR),
+};
+
+static const struct regmap_access_table access_table = {
+ .yes_ranges = yes_ranges,
+ .n_yes_ranges = ARRAY_SIZE(yes_ranges),
+};
+
static const struct regmap_config imx_gpc_regmap_config = {
.reg_bits = 32,
.val_bits = 32,
.reg_stride = 4,
+ .rd_table = &access_table,
+ .wr_table = &access_table,
.max_register = 0x2ac,
};
--
2.7.4
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] soc: imx: gpc: restrict register range for regmap access
2018-07-16 4:46 [PATCH] soc: imx: gpc: restrict register range for regmap access Anson Huang
@ 2018-07-16 13:59 ` Fabio Estevam
0 siblings, 0 replies; 2+ messages in thread
From: Fabio Estevam @ 2018-07-16 13:59 UTC (permalink / raw)
To: Anson Huang
Cc: Shawn Guo, Sascha Hauer, Sascha Hauer, Fabio Estevam,
moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE,
linux-kernel, NXP Linux Team
Hi Anson,
On Mon, Jul 16, 2018 at 1:46 AM, Anson Huang <Anson.Huang@nxp.com> wrote:
> GPC registers are NOT continuous, some registers are
> reserved and accessing them from userspace will trigger
> external abort, add regmap register access table to
> avoid below abort:
>
> root@imx6slevk:~# cat /sys/kernel/debug/regmap/20dc000.gpc/registers
> [ 108.480477] Unhandled fault: imprecise external abort (0x1406) at 0xb6db5004
> [ 108.487985] pgd = 42b54bfd
> [ 108.490741] [b6db5004] *pgd=ba1b7831
> [ 108.494386] Internal error: : 1406 [#1] SMP ARM
> [ 108.498943] Modules linked in:
> [ 108.502043] CPU: 0 PID: 389 Comm: cat Not tainted 4.18.0-rc1-00074-gc9f1f60-dirty #482
> [ 108.509982] Hardware name: Freescale i.MX6 SoloLite (Device Tree)
> [ 108.516123] PC is at regmap_mmio_read32le+0x20/0x24
> [ 108.521031] LR is at regmap_mmio_read+0x40/0x60
> [ 108.525586] pc : [<c059cf74>] lr : [<c059d1ac>] psr: 20060093
> [ 108.531875] sp : eccf1d98 ip : eccf1da8 fp : eccf1da4
> [ 108.537122] r10: ec2d3800 r9 : eccf1f60 r8 : ecfc0000
> [ 108.542370] r7 : eccf1e2c r6 : eccf1e2c r5 : 00000028 r4 : ec338e00
> [ 108.548920] r3 : 00000000 r2 : eccf1e2c r1 : f0980028 r0 : 00000000
> [ 108.555474] Flags: nzCv IRQs off FIQs on Mode SVC_32 ISA ARM Segment none
> [ 108.562720] Control: 10c5387d Table: acf4004a DAC: 00000051
> [ 108.568491] Process cat (pid: 389, stack limit = 0xd4318a65)
> [ 108.574174] Stack: (0xeccf1d98 to 0xeccf2000)
>
> Signed-off-by: Anson Huang <Anson.Huang@nxp.com>
Thanks for this fix.
Maybe you could add a Fixes tag, so that it can be applied to stable?
Reviewed-by: Fabio Estevam <fabio.estevam@nxp.com>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2018-07-16 13:59 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-07-16 4:46 [PATCH] soc: imx: gpc: restrict register range for regmap access Anson Huang
2018-07-16 13:59 ` Fabio Estevam
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).