[PATCH V5 5/8] soc: imx: add i.MX8MP HDMI blk ctrl HDCP/HRV_MWR

Alexander Stein alexander.stein at ew.tq-group.com
Wed Sep 7 06:49:43 PDT 2022


Hi,

Am Mittwoch, 7. September 2022, 13:53:26 CEST schrieb Peng Fan:
> > Subject: Re: Re: [PATCH V5 5/8] soc: imx: add i.MX8MP HDMI blk ctrl
> > HDCP/HRV_MWR
> > 
> > Hello,
> > 
> > Am Mittwoch, 7. September 2022, 04:41:46 CEST schrieb Peng Fan:
> > > On 9/6/2022 10:37 PM, Alexander Stein wrote:
> > > > Hello,
> > > > 
> > > > Am Montag, 22. August 2022, 08:45:33 CEST schrieb Peng Fan (OSS):
> > > >> From: Peng Fan <peng.fan at nxp.com>
> > > >> 
> > > >> i.MX8MP HDMI supports HDCP and HRV_MWR(HDMI RX Video
> > 
> > Memory Write
> > 
> > > >> Master for RXRX validation), so add them.
> > > >> 
> > > >> Signed-off-by: Peng Fan <peng.fan at nxp.com>
> > > >> ---
> > > >> 
> > > >>   drivers/soc/imx/imx8mp-blk-ctrl.c | 30
> > 
> > ++++++++++++++++++++++++++++++
> > 
> > > >>   1 file changed, 30 insertions(+)
> > > >> 
> > > >> diff --git a/drivers/soc/imx/imx8mp-blk-ctrl.c
> > > >> b/drivers/soc/imx/imx8mp-blk-ctrl.c index
> > > >> 6f983adcb47c..527d45d12a54
> > > >> 100644
> > > >> --- a/drivers/soc/imx/imx8mp-blk-ctrl.c
> > > >> +++ b/drivers/soc/imx/imx8mp-blk-ctrl.c
> > > >> @@ -235,6 +235,13 @@ static void
> > > >> imx8mp_hdmi_blk_ctrl_power_on(struct
> > > >> imx8mp_blk_ctrl *bc, regmap_set_bits(bc->regmap,
> > > >> HDMI_RTX_RESET_CTL0, BIT(12));
> > > >> 
> > > >>   		regmap_clear_bits(bc->regmap, 
HDMI_TX_CONTROL0,
> > 
> > BIT(3));
> > 
> > > >>   		break;
> > > >> 
> > > >> +	case IMX8MP_HDMIBLK_PD_HDCP:
> > > >> +		regmap_set_bits(bc->regmap, HDMI_RTX_CLK_CTL0,
> > 
> > BIT(11));
> > 
> > > >> +		break;
> > > >> +	case IMX8MP_HDMIBLK_PD_HRV:
> > > >> +		regmap_set_bits(bc->regmap, HDMI_RTX_CLK_CTL1, BIT(3)
> > > > 
> > > > BIT(4) | BIT(5));
> > > > 
> > > >> +		regmap_set_bits(bc->regmap, HDMI_RTX_RESET_CTL0,
> > > > 
> > > > BIT(15));
> > > > 
> > > >> +		break;
> > > >> 
> > > >>   	default:
> > > >>   		break;
> > > >>   	
> > > >>   	}
> > > >> 
> > > >> @@ -283,6 +290,13 @@ static void
> > > >> imx8mp_hdmi_blk_ctrl_power_off(struct
> > > >> imx8mp_blk_ctrl *bc, regmap_clear_bits(bc->regmap,
> > > >> HDMI_RTX_RESET_CTL0, BIT(12));
> > > >> 
> > > >>   		regmap_clear_bits(bc->regmap, 
HDMI_RTX_CLK_CTL1,
> > 
> > BIT(22)
> > 
> > > > | BIT(24));
> > > > | 
> > > >>   		break;
> > > >> 
> > > >> +	case IMX8MP_HDMIBLK_PD_HDCP:
> > > >> +		regmap_clear_bits(bc->regmap, HDMI_RTX_CLK_CTL0,
> > > > 
> > > > BIT(11));
> > > > 
> > > >> +		break;
> > > >> +	case IMX8MP_HDMIBLK_PD_HRV:
> > > >> +		regmap_clear_bits(bc->regmap, HDMI_RTX_RESET_CTL0,
> > > > 
> > > > BIT(15));
> > > > 
> > > >> +		regmap_clear_bits(bc->regmap, HDMI_RTX_CLK_CTL1, BIT(3)
> > > >> 
> > > > | BIT(4) |
> > > >> 
> > > >> BIT(5)); +		break;
> > > >> 
> > > >>   	default:
> > > >>   		break;
> > > >>   	
> > > >>   	}
> > > >> 
> > > >> @@ -365,6 +379,22 @@ static const struct
> > > >> imx8mp_blk_ctrl_domain_data imx8mp_hdmi_domain_data[] =
> > 
> > { .num_clks
> > 
> > > >> = 2,
> > > >> 
> > > >>   		.gpc_name = "hdmi-tx-phy",
> > > >>   	
> > > >>   	},
> > > >> 
> > > >> +	[IMX8MP_HDMIBLK_PD_HRV] = {
> > > >> +		.name = "hdmiblk-hrv",
> > > >> +		.clk_names = (const char *[]){ "axi", "apb" },
> > > >> +		.num_clks = 2,
> > > >> +		.gpc_name = "hrv",
> > > >> +		.path_names = (const char *[]){"hrv"},
> > > >> +		.num_paths = 1,
> > > >> +	},
> > > >> +	[IMX8MP_HDMIBLK_PD_HDCP] = {
> > > >> +		.name = "hdmiblk-hdcp",
> > > >> +		.clk_names = (const char *[]){ "axi", "apb" },
> > > >> +		.num_clks = 2,
> > > >> +		.gpc_name = "hdcp",
> > > >> +		.path_names = (const char *[]){"hdcp"},
> > > >> +		.num_paths = 1,
> > > >> +	},
> > > >> 
> > > >>   };
> > > >>   
> > > >>   static const struct imx8mp_blk_ctrl_data
> > 
> > imx8mp_hdmi_blk_ctl_dev_data =
> > 
> > > >>   {
> > > > 
> > > > Something is missing here. Iget the following error during boot:
> > > > [    0.886211] Unable to handle kernel NULL pointer dereference at
> > 
> > virtual
> > 
> > > > address 0000000000000000
> > > > [    0.895043] Mem abort info:
> > > > [    0.897841]   ESR = 0x0000000096000004
> > > > [    0.901606]   EC = 0x25: DABT (current EL), IL = 32 bits
> > > > [    0.906942]   SET = 0, FnV = 0
> > > > [    0.910003]   EA = 0, S1PTW = 0
> > > > [    0.913159]   FSC = 0x04: level 0 translation fault
> > > > [    0.918054] Data abort info:
> > > > [    0.920943]   ISV = 0, ISS = 0x00000004
> > > > [    0.924791]   CM = 0, WnR = 0
> > > > [    0.927761] [0000000000000000] user address but active_mm is
> > 
> > swapper
> > 
> > > > [    0.934157] Internal error: Oops: 96000004 [#1] PREEMPT SMP
> > > > [    0.939749] Modules linked in:
> > > > [    0.942813] CPU: 1 PID: 1 Comm: swapper/0 Not tainted 6.0.0-rc4-
> > > > next-20220906+ #674 2c55fa642ba20b0dbb66c0e78dacc9ca96d5e733
> > > > [    0.954099] Hardware name: TQ-Systems i.MX8MPlus TQMa8MPxL on
> > 
> > MBa8MPxL
> > 
> > > > (DT) [    0.961100] pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -
> > 
> > SSBS
> > 
> > > > BTYPE=--) [    0.968099] pc : kobject_set_name_vargs+0x10/0xd0
> > > > [    0.972823] lr : dev_set_name+0x58/0x80
> > > > [    0.976674] sp : ffff800009c7b860
> > > > [    0.979997] x29: ffff800009c7b860 x28: ffff000002d728f8 x27:
> > > > 0000000000000150
> > > > [    0.987172] x26: 0000000000000009 x25: 0000000000000007 x24:
> > > > ffff800009ab8958
> > > > [    0.994347] x23: ffff0000000a0000 x22: ffff800008eb77d8 x21:
> > > > ffff000000225410
> > > > [    1.001524] x20: ffff800008eb7808 x19: 0000000000000000 x18:
> > > > 0000000000000000
> > > > [    1.008697] x17: 702d78742d696d64 x16: 682d6b6c62696d64 x15:
> > > > 68203a656d616e3e
> > > > [    1.015872] x14: 0000000000000000 x13: 70636468203a656d x12:
> > > > 616e5f6370673e2d
> > > > [    1.023047] x11: 61746164203a6c72 x10: 74632d6b6c622e30 x9 :
> > > > 7274632d6b6c622e
> > > > [    1.030222] x8 : 3030303063663233 x7 : 205d353039393738 x6 :
> > > > ffff800009a240e0
> > > > [    1.037397] x5 : 00000000ffffffd0 x4 : ffff800009c7b920 x3 :
> > > > 00000000ffffffd0
> > > > [    1.044572] x2 : ffff800009c7b8d0 x1 : ffff80000936ca78 x0 :
> > > > 0000000000000000
> > > > [    1.051749] Call trace:
> > > > [    1.054199]  kobject_set_name_vargs+0x10/0xd0
> > > > [    1.058574]  dev_set_name+0x58/0x80
> > > > [    1.062072]  imx8mp_blk_ctrl_probe+0x5c0/0x660
> > > > [    1.066534]  platform_probe+0x64/0x100
> > > > [    1.070297]  call_driver_probe+0x28/0x140
> > > > [    1.074322]  really_probe+0xc0/0x334
> > > > [    1.077909]  __driver_probe_device+0x84/0x144
> > > > [    1.082284]  driver_probe_device+0x38/0x130
> > > > [    1.086486]  __driver_attach+0xac/0x244
> > > > [    1.090334]  bus_for_each_dev+0x6c/0xc0
> > > > [    1.094184]  driver_attach+0x20/0x30
> > > > [    1.097772]  bus_add_driver+0x174/0x244
> > > > [    1.101622]  driver_register+0x74/0x120
> > > > [    1.105474]  __platform_driver_register+0x24/0x30
> > > > [    1.110197]  imx8mp_blk_ctrl_driver_init+0x18/0x20
> > > > [    1.115009]  do_one_initcall+0x58/0x200
> > > > [    1.118861]  do_initcalls+0x164/0x19c
> > > > [    1.122534]  kernel_init_freeable+0x134/0x17c
> > > > [    1.126909]  kernel_init+0x2c/0x150
> > > > [    1.130411]  ret_from_fork+0x10/0x20
> > > > [    1.134003] Code: a9bb7bfd 910003fd a90153f3 aa0003f3 (f9400000)
> > > > [    1.140127] ---[ end trace 0000000000000000 ]---
> > > > 
> > > > Adding some debug out shows:
> > 
> > > > [    0.866795] imx8mp-blk-ctrl 32fc0000.blk-ctrl: domain->power_dev:
> > 0x0
> > 
> > > > [    0.873257] imx8mp-blk-ctrl 32fc0000.blk-ctrl: data->name: hdmiblk-
> > 
> > hdcp
> > 
> > > > [    0.879905] imx8mp-blk-ctrl 32fc0000.blk-ctrl: data->gpc_name: hdcp
> > > > 
> > > > AFAICS the power domains 'hrv' and 'hdcp' are missing in the
> > > > 'hdmi_blk_ctrl: blk-ctrl at 32fc0000' node thus resulting in a NULL
> > > > pointer from calling dev_pm_domain_attach_by_name().
> > > 
> > > The HDMI blk ctrl dts not landed in Shawn's branch, could you share me
> > > your dts change?
> > 
> > I don't have any dts changes for this matter. To get a bootable device,
> > for
> > now, I just removed the IMX8MP_HDMIBLK_PD_HRV and
> > IMX8MP_HDMIBLK_PD_HDCP power domains from
> > imx8mp_hdmi_domain_data.
> 
> Ah. There is no hdmi-blk-ctrl node in linux/next tree. Anyway, let me
> have a check.

This is rather important. Without DT nodes, suspend panics with a NULL pointer 
dereference.

[   57.345915] Unable to handle kernel NULL pointer dereference at virtual 
address 0000000000000300
[   57.354823] Mem abort info:
[   57.357633]   ESR = 0x0000000096000004
[   57.361441]   EC = 0x25: DABT (current EL), IL = 32 bits
[   57.366808]   SET = 0, FnV = 0
[   57.369877]   EA = 0, S1PTW = 0
[   57.373066]   FSC = 0x04: level 0 translation fault
[   57.377997] Data abort info:
[   57.380922]   ISV = 0, ISS = 0x00000004
[   57.384811]   CM = 0, WnR = 0
[   57.387827] user pgtable: 4k pages, 48-bit VAs, pgdp=0000000046d55000
[   57.394347] [0000000000000300] pgd=0000000000000000, p4d=0000000000000000
[   57.401394] Internal error: Oops: 96000004 [#1] PREEMPT SMP
[   57.406972] Modules linked in: cfg80211 8021q garp stp mrp llc mcp320x 
crct10dif_ce governor_userspace imx_bus snd_soc_tlv320aic32
x4_spi imx_sdma snd_soc_tlv320aic32x4_i2c snd_soc_tlv320aic32x4 flexcan 
can_dev clk_renesas_pcie imx8mm_thermal fuse ipv6
[   57.429303] CPU: 2 PID: 422 Comm: sh Not tainted 6.0.0-rc4-next-20220907+ 
#696 f995e5a57a48e9e1bd6cb136b557c332a85db611
[   57.440089] Hardware name: TQ-Systems i.MX8MPlus TQMa8MPxL on MBa8MPxL (DT)
[   57.447051] pstate: 20000005 (nzCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
[   57.454017] pc : __pm_runtime_resume+0x1c/0xa0
[   57.458470] lr : imx8mp_blk_ctrl_suspend+0x60/0x190
[   57.463354] sp : ffff80000bf13810
[   57.466669] x29: ffff80000bf13810 x28: ffff00000036e010 x27: 
ffff800008972d54
[   57.473814] x26: ffff80000a1196f8 x25: 0000000000000000 x24: 
ffff80000ab9e000
[   57.480958] x23: ffff000003fcc080 x22: 00000000000007e8 x21: 
ffff000003fa37d8
[   57.488104] x20: 0000000000000004 x19: 0000000000000000 x18: 
0000000000000000
[   57.495249] x17: 000000008d822290 x16: 00000000fca00fb3 x15: 
000000007a08336e
[   57.502395] x14: 0000000000000000 x13: 6e776f4420736920 x12: 
6b6e694c203a3068
[   57.509540] x11: 0000000000000002 x10: 0000000000000028 x9 : 
0000000000000001
[   57.516683] x8 : ffff000004486ae0 x7 : ffff80000bf137f0 x6 : 
ffff80000bf13800
[   57.523829] x5 : ffff80000bf14000 x4 : 0000000000000005 x3 : 
00000000000000d6
[   57.530974] x2 : 0000000000000001 x1 : 0000000000000004 x0 : 
0000000000000000
[   57.538119] Call trace:
[   57.540566]  __pm_runtime_resume+0x1c/0xa0
[   57.544665]  imx8mp_blk_ctrl_suspend+0x60/0x190
[   57.549200]  platform_pm_suspend+0x28/0x64
[   57.553306]  dpm_run_callback+0x70/0x140
[   57.557231]  __device_suspend+0x11c/0x3e4
[   57.561244]  dpm_suspend+0x15c/0x270
[   57.564826]  dpm_suspend_start+0xa8/0xcc
[   57.568753]  suspend_devices_and_enter+0x138/0x250
[   57.573547]  enter_state+0xf0/0x3b0
[   57.577038]  pm_suspend+0x5c/0x130
[   57.580442]  state_store+0x2c/0x70
[   57.583852]  kobj_attr_store+0x14/0x2c
[   57.587605]  sysfs_kf_write+0x48/0x70
[   57.591271]  kernfs_fop_write_iter+0x118/0x1ac
[   57.595717]  new_sync_write+0x8c/0xf0
[   57.599384]  vfs_write+0x19c/0x1e4
[   57.602793]  ksys_write+0x68/0xf4
[   57.606112]  __arm64_sys_write+0x18/0x20
[   57.610040]  invoke_syscall+0x6c/0xf0
[   57.613710]  el0_svc_common.constprop.0+0xf0/0x110
[   57.618505]  do_el0_svc+0x24/0x30
[   57.621825]  el0_svc+0x38/0x90
[   57.624883]  el0t_64_sync_handler+0xb0/0xb4
[   57.629070]  el0t_64_sync+0x148/0x14c
[   57.632740] Code: aa0003f3 2a0103f4 f90013f5 37000074 (79460000) 
[   57.638835] ---[ end trace 0000000000000000 ]---

So I currently have to disable these two power domains.

> > > And dev_set_name, as I recall, Lucas has a patch to remove that.
> > 
> > Is this removal a fix or just a workaround?
> 
> Fix:
> https://lore.kernel.org/all/20220826191305.3215706-1-l.stach@pengutronix.de/

Ah, I saw this patch, but I was unsure whether I am affected by this. Thanks 
for the link.

Best regards,
Alexander






More information about the linux-arm-kernel mailing list