[EXT] Re: [EXTERNAL] [PATCH v6 5/5] firmware: imx: adds miscdev
Pankaj Gupta
pankaj.gupta at nxp.com
Tue Jul 23 02:36:10 PDT 2024
> -----Original Message-----
> From: Amit Singh Tomar <amitsinght at marvell.com>
> Sent: Monday, July 22, 2024 5:08 PM
> To: Pankaj Gupta <pankaj.gupta at nxp.com>; Jonathan Corbet
> <corbet at lwn.net>; Rob Herring <robh at kernel.org>; Krzysztof Kozlowski
> <krzk+dt at kernel.org>; Conor Dooley <conor+dt at kernel.org>; Shawn Guo
> <shawnguo at kernel.org>; Sascha Hauer <s.hauer at pengutronix.de>;
> Pengutronix Kernel Team <kernel at pengutronix.de>; Fabio Estevam
> <festevam at gmail.com>; Rob Herring <robh+dt at kernel.org>
> Cc: linux-doc at vger.kernel.org; linux-kernel at vger.kernel.org;
> devicetree at vger.kernel.org; imx at lists.linux.dev; linux-arm-
> kernel at lists.infradead.org
> Subject: [EXT] Re: [EXTERNAL] [PATCH v6 5/5] firmware: imx: adds miscdev
>
> Caution: This is an external email. Please take care when clicking links or
> opening attachments. When in doubt, report the message using the 'Report
> this email' button
>
>
> Hi Pankaj,
> >
> > Adds the driver for communication interface to secure-enclave, for
> > exchanging messages with NXP secure enclave HW IP(s) like EdgeLock
> > Enclave from:
> > - User-Space Applications via character driver.
> >
> > ABI documentation for the NXP secure-enclave driver.
> >
> > User-space library using this driver:
> > - i.MX Secure Enclave library:
> > --
> >
> URL:https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2F
> > urldefense.proofpoint.com%2Fv2%2Furl%3Fu%3Dhttps-
> 3A__github.com_nxp-2D
> > imx_imx-2Dsecure-
> 2Denclave.git%26d%3DDwICaQ%26c%3DnKjWec2b6R0mOyPaz7xt
> > fQ%26r%3DV_GK7jRuCHDErm6txmgDK1-MbUihtnSQ3gPgB-A-
> JKU%26m%3Dhqz6ztDhob0
> > jujItfaaf7PHhtqSHj4aoWie1-b4nAGXTUrSyBQtV9W-
> WqLaM_utz%26s%3DC67hc24yMA
> >
> TzUglvGvywzpn0Efjurb6sOLm2V_9VpsI%26e%3D&data=05%7C02%7Cpanka
> j.gupta%4
> >
> 0nxp.com%7C5acd31c1cfc14661861c08dcaa42c232%7C686ea1d3bc2b4c6f
> a92cd99c
> >
> 5c301635%7C0%7C0%7C638572450920546605%7CUnknown%7CTWFpbG
> Zsb3d8eyJWIjoi
> >
> MC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C0
> %7C%7C%7
> >
> C&sdata=cV67vBSDb5uPaABT8RDTmtNOtqePRAALqo7QuUaV4QQ%3D&rese
> rved=0
> > <https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Furl
> > defense.proofpoint.com%2Fv2%2Furl%3Fu%3Dhttps-
> 3A__github.com_nxp-2Dimx
> > _imx-2Dsecure-
> 2Denclave.git%26d%3DDwICaQ%26c%3DnKjWec2b6R0mOyPaz7xtfQ%
> > 26r%3DV_GK7jRuCHDErm6txmgDK1-MbUihtnSQ3gPgB-A-
> JKU%26m%3Dhqz6ztDhob0juj
> > Itfaaf7PHhtqSHj4aoWie1-b4nAGXTUrSyBQtV9W-
> WqLaM_utz%26s%3DC67hc24yMATzU
> >
> glvGvywzpn0Efjurb6sOLm2V_9VpsI%26e%3D&data=05%7C02%7Cpankaj.gu
> pta%40nx
> >
> p.com%7C5acd31c1cfc14661861c08dcaa42c232%7C686ea1d3bc2b4c6fa92
> cd99c5c3
> >
> 01635%7C0%7C0%7C638572450920558539%7CUnknown%7CTWFpbGZsb
> 3d8eyJWIjoiMC4
> >
> wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C0%7C
> %7C%7C&s
> >
> data=yrSEmLSlxZrIZG%2Bk4J%2BbDyvzdEams5ux%2F8nKhQBLq74%3D&rese
> rved=0>,
> > - i.MX Secure Middle-Ware:
> > --
> >
> URL:https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2F
> > urldefense.proofpoint.com%2Fv2%2Furl%3Fu%3Dhttps-
> 3A__github.com_nxp-2D
> > imx_imx-
> 2Dsmw.git%26d%3DDwICaQ%26c%3DnKjWec2b6R0mOyPaz7xtfQ%26r%3D
> V_GK
> > 7jRuCHDErm6txmgDK1-MbUihtnSQ3gPgB-A-
> JKU%26m%3Dhqz6ztDhob0jujItfaaf7PHh
> > tqSHj4aoWie1-b4nAGXTUrSyBQtV9W-
> WqLaM_utz%26s%3DNACAFfnEzGKFI7FlqdL4kxl
> >
> t8PtxeXRorc3IWanqgtY%26e%3D&data=05%7C02%7Cpankaj.gupta%40nxp.
> com%7C5a
> >
> cd31c1cfc14661861c08dcaa42c232%7C686ea1d3bc2b4c6fa92cd99c5c3016
> 35%7C0%
> >
> 7C0%7C638572450920566218%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiM
> C4wLjAwMDAiL
> >
> CJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C0%7C%7C%7C&sdat
> a=vuTve
> > lCrdOFlGPGGpwpx0YgA6So%2BRIPJQRSzOjfo2LM%3D&reserved=0
> > <https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Furl
> > defense.proofpoint.com%2Fv2%2Furl%3Fu%3Dhttps-
> 3A__github.com_nxp-2Dimx
> > _imx-
> 2Dsmw.git%26d%3DDwICaQ%26c%3DnKjWec2b6R0mOyPaz7xtfQ%26r%3D
> V_GK7jR
> > uCHDErm6txmgDK1-MbUihtnSQ3gPgB-A-
> JKU%26m%3Dhqz6ztDhob0jujItfaaf7PHhtqS
> > Hj4aoWie1-b4nAGXTUrSyBQtV9W-
> WqLaM_utz%26s%3DNACAFfnEzGKFI7FlqdL4kxlt8P
> >
> txeXRorc3IWanqgtY%26e%3D&data=05%7C02%7Cpankaj.gupta%40nxp.co
> m%7C5acd3
> >
> 1c1cfc14661861c08dcaa42c232%7C686ea1d3bc2b4c6fa92cd99c5c301635
> %7C0%7C0
> > %7C638572450920572062%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC
> 4wLjAwMDAiLCJQ
> >
> IjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C0%7C%7C%7C&sdata=E
> DDL3DFE
> > erSUqrBRGQchaAsN3L0H2nkkRw4AsoNBMqA%3D&reserved=0>
> >
> > Signed-off-by: Pankaj Gupta <pankaj.gupta at nxp.com>
> > ---
> > Documentation/ABI/testing/se-cdev | 43 +++
> > drivers/firmware/imx/ele_common.c | 192 ++++++++++-
> > drivers/firmware/imx/ele_common.h | 4 +
> > drivers/firmware/imx/se_ctrl.c | 677
> ++++++++++++++++++++++++++++++++++++++
> > drivers/firmware/imx/se_ctrl.h | 46 +++
> > include/uapi/linux/se_ioctl.h | 94 ++++++
> > 6 files changed, 1053 insertions(+), 3 deletions(-)
> >
> > diff --git a/Documentation/ABI/testing/se-cdev
> > b/Documentation/ABI/testing/se-cdev
> > new file mode 100644
> > index 000000000000..3451c909ccc4
> > --- /dev/null
> > +++ b/Documentation/ABI/testing/se-cdev
> > @@ -0,0 +1,43 @@
> > +What: /dev/<se>_mu[0-9]+_ch[0-9]+
> > +Date: May 2024
> > +KernelVersion: 6.8
> > +Contact: linux-imx at nxp.com, pankaj.gupta at nxp.com
> > +Description:
> > + NXP offers multiple hardware IP(s) for secure enclaves like EdgeLock-
> > + Enclave(ELE), SECO. The character device file descriptors
> > + /dev/<se>_mu*_ch* are the interface between userspace NXP's
> secure-
> > + enclave shared library and the kernel driver.
> > +
> > + The ioctl(2)-based ABI is defined and documented in
> > + [include]<linux/firmware/imx/ele_mu_ioctl.h>.
> > + ioctl(s) are used primarily for:
> > + - shared memory management
> > + - allocation of I/O buffers
> > + - getting mu info
> > + - setting a dev-ctx as receiver to receive all the commands from
> FW
> > + - getting SoC info
> > + - send command and receive command response
> > +
> > + The following file operations are supported:
> > +
> > + open(2)
> > + Currently the only useful flags are O_RDWR.
> > +
> > + read(2)
> > + Every read() from the opened character device context is waiting on
> > + wait_event_interruptible, that gets set by the registered mailbox
> callback
> > + function, indicating a message received from the firmware on
> message-
> > + unit.
> > +
> > + write(2)
> > + Every write() to the opened character device context needs to
> acquire
> > + mailbox_lock before sending message on to the message unit.
> > +
> > + close(2)
> > + Stops and frees up the I/O contexts that were associated
> > + with the file descriptor.
> > +
> > +Users:
> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Furldef
> ense.proofpoint.com%2Fv2%2Furl%3Fu%3Dhttps-3A__github.com_nxp-
> 2Dimx_imx-2Dsecure-
> 2Denclave.git%26d%3DDwICaQ%26c%3DnKjWec2b6R0mOyPaz7xtfQ%26r%
> 3DV_GK7jRuCHDErm6txmgDK1-MbUihtnSQ3gPgB-A-
> JKU%26m%3Dhqz6ztDhob0jujItfaaf7PHhtqSHj4aoWie1-
> b4nAGXTUrSyBQtV9W-
> WqLaM_utz%26s%3DC67hc24yMATzUglvGvywzpn0Efjurb6sOLm2V_9VpsI%
> 26e%3D&data=05%7C02%7Cpankaj.gupta%40nxp.com%7C5acd31c1cfc146
> 61861c08dcaa42c232%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C
> 0%7C638572450920577297%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4
> wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C0%7C
> %7C%7C&sdata=FvSTP3MVF%2BSghK36fmJ8u%2FySJ80DP7VQjNYAytj9gws
> %3D&reserved=0
> <https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Furld
> efense.proofpoint.com%2Fv2%2Furl%3Fu%3Dhttps-3A__github.com_nxp-
> 2Dimx_imx-2Dsecure-
> 2Denclave.git%26d%3DDwICaQ%26c%3DnKjWec2b6R0mOyPaz7xtfQ%26r%
> 3DV_GK7jRuCHDErm6txmgDK1-MbUihtnSQ3gPgB-A-
> JKU%26m%3Dhqz6ztDhob0jujItfaaf7PHhtqSHj4aoWie1-
> b4nAGXTUrSyBQtV9W-
> WqLaM_utz%26s%3DC67hc24yMATzUglvGvywzpn0Efjurb6sOLm2V_9VpsI%
> 26e%3D&data=05%7C02%7Cpankaj.gupta%40nxp.com%7C5acd31c1cfc146
> 61861c08dcaa42c232%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C
> 0%7C638572450920582198%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4
> wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C0%7C
> %7C%7C&sdata=%2Fb342eydDBBpn451JY9h36udCBWaJmzMbMOQcJHWI%
> 2BQ%3D&reserved=0>,
> > +
> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Furldef
> ense.proofpoint.com%2Fv2%2Furl%3Fu%3Dhttps-3A__github.com_nxp-
> 2Dimx_imx-
> 2Dsmw.git%26d%3DDwICaQ%26c%3DnKjWec2b6R0mOyPaz7xtfQ%26r%3D
> V_GK7jRuCHDErm6txmgDK1-MbUihtnSQ3gPgB-A-
> JKU%26m%3Dhqz6ztDhob0jujItfaaf7PHhtqSHj4aoWie1-
> b4nAGXTUrSyBQtV9W-
> WqLaM_utz%26s%3DNACAFfnEzGKFI7FlqdL4kxlt8PtxeXRorc3IWanqgtY%26e
> %3D&data=05%7C02%7Cpankaj.gupta%40nxp.com%7C5acd31c1cfc146618
> 61c08dcaa42c232%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0%7
> C638572450920586967%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLj
> AwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C0%7C%7C
> %7C&sdata=sXtVRno2qOn6aGvIr2HpJrB0WbhexELpRMNQE8JPUxY%3D&res
> erved=0
> <https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Furld
> efense.proofpoint.com%2Fv2%2Furl%3Fu%3Dhttps-3A__github.com_nxp-
> 2Dimx_imx-
> 2Dsmw.git%26d%3DDwICaQ%26c%3DnKjWec2b6R0mOyPaz7xtfQ%26r%3D
> V_GK7jRuCHDErm6txmgDK1-MbUihtnSQ3gPgB-A-
> JKU%26m%3Dhqz6ztDhob0jujItfaaf7PHhtqSHj4aoWie1-
> b4nAGXTUrSyBQtV9W-
> WqLaM_utz%26s%3DNACAFfnEzGKFI7FlqdL4kxlt8PtxeXRorc3IWanqgtY%26e
> %3D&data=05%7C02%7Cpankaj.gupta%40nxp.com%7C5acd31c1cfc146618
> 61c08dcaa42c232%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0%7
> C638572450920591699%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLj
> AwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C0%7C%7C
> %7C&sdata=XVI6X7w5FBckyuDIklwBvWTvYQ69GJPvR%2FnIvgyWulU%3D&r
> eserved=0>
> > + crypto/skcipher,
> > + drivers/nvmem/imx-ocotp-ele.c
> > diff --git a/drivers/firmware/imx/ele_common.c
> > b/drivers/firmware/imx/ele_common.c
> > index 3a6584d6f6f2..8167ae201b83 100644
> > --- a/drivers/firmware/imx/ele_common.c
> > +++ b/drivers/firmware/imx/ele_common.c
> > @@ -78,6 +78,149 @@ int ele_msg_send_rcv(struct se_if_priv *priv, void
> *tx_msg, void *rx_msg)
> > return err;
> > }
> >
> > +int ele_miscdev_msg_rcv(struct se_if_device_ctx *dev_ctx,
> > + void *rx_buf,
> > + int rx_buf_sz)
> > +{
> > + struct se_msg_hdr *header;
> > + int err;
> > +
> > + err = wait_event_interruptible(dev_ctx->wq, dev_ctx->pending_hdr != 0);
> > + if (err) {
> > + dev_err(dev_ctx->dev,
> > + "%s: Err[0x%x]:Interrupted by signal.\n",
> > + dev_ctx->miscdev.name, err);
> > + goto exit;
> > + }
> > +
> > + header = (struct se_msg_hdr *) dev_ctx->temp_resp;
> > +
> > + if (header->tag == dev_ctx->priv->rsp_tag) {
> > + if (dev_ctx->priv->waiting_rsp_dev && dev_ctx->priv-
> >waiting_rsp_dev != dev_ctx) {
> > + dev_warn(dev_ctx->dev,
> > + "Dev-ctx waiting for response mismatch (%s != %s).\n",
> > + dev_ctx->miscdev.name, dev_ctx->priv->waiting_rsp_dev-
> >miscdev.name);
> > + err = -EPERM;
> > + goto exit;
> > + }
> > + }
> > +
> > + dev_dbg(dev_ctx->dev,
> > + "%s: %s %s\n",
> > + dev_ctx->miscdev.name,
> > + __func__,
> > + "message received, start transmit to user");
> > +
> > + /*
> > + * Check that the size passed as argument is larger than
> > + * the one carried in the message.
> > + *
> > + * In case of US-command/response, the dev_ctx->temp_resp_size
> > + * is set before sending the command.
> > + *
> > + * In case of NVM Slave-command/response, the dev_ctx-
> >temp_resp_size
> > + * is set after receing the message from mailbox.
> > + */
> > + if (dev_ctx->temp_resp_size > rx_buf_sz) {
> > + dev_err(dev_ctx->dev,
> > + "%s: User buffer too small (%d < %d)\n",
> > + dev_ctx->miscdev.name,
> > + rx_buf_sz, dev_ctx->temp_resp_size);
> > + dev_ctx->temp_resp_size = rx_buf_sz;
> > + }
> > +
> > + /* We may need to copy the output data to user before
> > + * delivering the completion message.
> > + */
> > + err = se_dev_ctx_cpy_out_data(dev_ctx, true);
> > + if (err < 0)
> > + goto exit;
> > +
> > + /* Copy data from the buffer */
> > + print_hex_dump_debug("to user ", DUMP_PREFIX_OFFSET, 4, 4,
> > + dev_ctx->temp_resp, dev_ctx->temp_resp_size, false);
> > + if (copy_to_user(rx_buf, dev_ctx->temp_resp, dev_ctx-
> >temp_resp_size)) {
> > + dev_err(dev_ctx->dev,
> > + "%s: Failed to copy to user\n",
> > + dev_ctx->miscdev.name);
> > + err = -EFAULT;
> > + goto exit;
> > + }
> > +
> > + err = dev_ctx->temp_resp_size;
> > +exit:
> > + if (err < 0)
> > + se_dev_ctx_cpy_out_data(dev_ctx, false);
> > +
> > + /* free memory allocated on the shared buffers. */
> > + dev_ctx->secure_mem.pos = 0;
> > + dev_ctx->non_secure_mem.pos = 0;
> > +
> > + dev_ctx->pending_hdr = 0;
> > + se_dev_ctx_shared_mem_cleanup(dev_ctx);
> > +
> > + return err;
> > +}
> > +
> > +int ele_miscdev_msg_send(struct se_if_device_ctx *dev_ctx,
> > + void *tx_msg, int tx_msg_sz) {
> > + struct se_if_priv *priv = dev_ctx->priv;
> > + struct se_msg_hdr *header;
> > + u32 size_to_send;
> > + int err;
> > +
> > + header = (struct se_msg_hdr *) tx_msg;
> > +
> > + /*
> > + * Check that the size passed as argument matches the size
> > + * carried in the message.
> > + */
> > + size_to_send = header->size << 2;
> > +
> > + if (size_to_send != tx_msg_sz) {
> > + err = -EINVAL;
> > + dev_err(priv->dev,
> > + "%s: User buf hdr(0x%x) sz mismatced with input-sz
> (%d != %d).\n",
> > + dev_ctx->miscdev.name, *(u32 *)header, size_to_send,
> tx_msg_sz);
> > + goto exit;
> > + }
> > +
> > + /* Check the message is valid according to tags */
> > + if (header->tag == priv->rsp_tag) {
> > + /* Check the device context can send the command */
> > + if (dev_ctx != priv->cmd_receiver_dev) {
> > + dev_err(priv->dev,
> > + "%s: Channel not configured to send resp to FW.",
> > + dev_ctx->miscdev.name);
> > + err = -EPERM;
> > + goto exit;
> > + }
> > + } else if (header->tag == priv->cmd_tag) {
> > + if (priv->waiting_rsp_dev != dev_ctx) {
> > + dev_err(priv->dev,
> > + "%s: Channel not configured to send cmd to FW.",
> > + dev_ctx->miscdev.name);
> > + err = -EPERM;
> > + goto exit;
> > + }
> > + lockdep_assert_held(&priv->se_if_cmd_lock);
> > + } else {
> > + dev_err(priv->dev,
> > + "%s: The message does not have a valid TAG\n",
> > + dev_ctx->miscdev.name);
> > + err = -EINVAL;
> > + goto exit;
> > + }
> > + err = ele_msg_send(priv, tx_msg);
> > + if (err < 0)
> > + goto exit;
> > +
> > + err = size_to_send;
> > +exit:
> > + return err;
> > +}
> > +
> > static bool exception_for_size(struct se_if_priv *priv,
> > struct se_msg_hdr *header)
> > {
> > @@ -99,6 +242,7 @@ static bool exception_for_size(struct se_if_priv *priv,
> > void se_if_rx_callback(struct mbox_client *mbox_cl, void *msg)
> > {
> > struct device *dev = mbox_cl->dev;
> > + struct se_if_device_ctx *dev_ctx;
> > struct se_if_priv *priv;
> > struct se_msg_hdr *header;
> > u32 rx_msg_sz;
> > @@ -114,8 +258,50 @@ void se_if_rx_callback(struct mbox_client
> *mbox_cl, void *msg)
> > header = msg;
> > rx_msg_sz = header->size << 2;
> >
> > - if (header->tag == priv->rsp_tag) {
> > - if (!priv->waiting_rsp_dev) {
> > + /* Incoming command: wake up the receiver if any. */
> > + if (header->tag == priv->cmd_tag) {
> > + dev_dbg(dev, "Selecting cmd receiver\n");
> > + dev_ctx = priv->cmd_receiver_dev;
> > + /* Pre-allocated buffer of MAX_NVM_MSG_LEN
> > + * as the NVM command are initiated by FW.
> > + * Size is revealed as part of this call function.
> > + */
> > + if (rx_msg_sz > MAX_NVM_MSG_LEN) {
> > + dev_err(dev,
> > + "%s: Msg recvd hdr(0x%x) with greater[%d] than allocated
> buf-sz.\n",
> > + dev_ctx->miscdev.name,
> > + *(u32 *) header,
> > + rx_msg_sz);
> > + } else
> > + memcpy(dev_ctx->temp_resp, msg, rx_msg_sz);
>
> It is categorically stated (in the Linux kernel coding style guide) that this rule
> does not apply if only one branch of a conditional statement consists of a
> single statement. In such cases, you should categorically use braces for both
> branches of the conditional statement:
>
> if (condition) {
> do_this();
> do_that();
> } else {
> otherwise();
> }
Checkpatch.pl donot throw either warning or error, for this.
Adding the braces to else, do not throw error or warning, either.
Thus, will add this change.
>
> Also, made a similar comment on the earlier version (v5) as well:
> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpatch
> work.kernel.org%2Fproject%2Fimx%2Fpatch%2F20240712-imx-se-if-v5-4-
> 66a79903a872%40nxp.com%2F&data=05%7C02%7Cpankaj.gupta%40nxp.c
> om%7C5acd31c1cfc14661861c08dcaa42c232%7C686ea1d3bc2b4c6fa92cd
> 99c5c301635%7C0%7C0%7C638572450920596406%7CUnknown%7CTWF
> pbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJX
> VCI6Mn0%3D%7C0%7C%7C%7C&sdata=nnkWdELMd%2BaYqAcqFoeTaSOib
> VnSoMBegxXsn8PMePc%3D&reserved=0
>
> Thanks
> -Amit
>
More information about the linux-arm-kernel
mailing list