Re: [PATCH v9 1/7] drm: bridge: Cadence: convert mailbox functions to macro functions

2023-09-28 Thread Sandor Yu
Hi Dmitry,

Thanks your comments,

> -Original Message-
> From: Dmitry Baryshkov 
> Sent: 2023年9月28日 18:39
> 
> On 07/09/2023 04:05, Sandor Yu wrote:
> > MHDP8546 mailbox access functions will be share to other mhdp driver
> > and Cadence HDP-TX HDMI/DP PHY drivers.
> > Move those functions to head file
> > include/drm/bridge/cdns-mhdp-mailbox.h
> > and convert them to macro functions.
> >
> > Signed-off-by: Sandor Yu 
> > ---
> >   .../drm/bridge/cadence/cdns-mhdp8546-core.c   | 195 +-
> >   .../drm/bridge/cadence/cdns-mhdp8546-core.h   |   1 -
> >   include/drm/bridge/cdns-mhdp-mailbox.h| 240
> ++
> >   3 files changed, 241 insertions(+), 195 deletions(-)
> >   create mode 100644 include/drm/bridge/cdns-mhdp-mailbox.h
> >
> > diff --git a/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c
> > b/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c
> > index f6822dfa3805..ddd3c633c7bf 100644
> > --- a/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c
> > +++ b/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c
> > @@ -36,6 +36,7 @@
> >   #include 
> >   #include 
> >
> > +#include 
> >   #include 
> >   #include 
> >   #include 
> > @@ -54,200 +55,6 @@
> >   #include "cdns-mhdp8546-hdcp.h"
> >   #include "cdns-mhdp8546-j721e.h"
> >
> > -static int cdns_mhdp_mailbox_read(struct cdns_mhdp_device *mhdp) -{
> > - int ret, empty;
> > -
> > - WARN_ON(!mutex_is_locked(>mbox_mutex));
> > -
> > - ret = readx_poll_timeout(readl, mhdp->regs +
> CDNS_MAILBOX_EMPTY,
> > -  empty, !empty, MAILBOX_RETRY_US,
> > -  MAILBOX_TIMEOUT_US);
> > - if (ret < 0)
> > - return ret;
> > -
> > - return readl(mhdp->regs + CDNS_MAILBOX_RX_DATA) & 0xff;
> > -}
> > -
> > -static int cdns_mhdp_mailbox_write(struct cdns_mhdp_device *mhdp, u8
> > val) -{
> > - int ret, full;
> > -
> > - WARN_ON(!mutex_is_locked(>mbox_mutex));
> > -
> > - ret = readx_poll_timeout(readl, mhdp->regs +
> CDNS_MAILBOX_FULL,
> > -  full, !full, MAILBOX_RETRY_US,
> > -  MAILBOX_TIMEOUT_US);
> > - if (ret < 0)
> > - return ret;
> > -
> > - writel(val, mhdp->regs + CDNS_MAILBOX_TX_DATA);
> > -
> > - return 0;
> > -}
> > -
> > -static int cdns_mhdp_mailbox_recv_header(struct cdns_mhdp_device
> *mhdp,
> > -  u8 module_id, u8 opcode,
> > -  u16 req_size)
> > -{
> > - u32 mbox_size, i;
> > - u8 header[4];
> > - int ret;
> > -
> > - /* read the header of the message */
> > - for (i = 0; i < sizeof(header); i++) {
> > - ret = cdns_mhdp_mailbox_read(mhdp);
> > - if (ret < 0)
> > - return ret;
> > -
> > - header[i] = ret;
> > - }
> > -
> > - mbox_size = get_unaligned_be16(header + 2);
> > -
> > - if (opcode != header[0] || module_id != header[1] ||
> > - req_size != mbox_size) {
> > - /*
> > -  * If the message in mailbox is not what we want, we need
> to
> > -  * clear the mailbox by reading its contents.
> > -  */
> > - for (i = 0; i < mbox_size; i++)
> > - if (cdns_mhdp_mailbox_read(mhdp) < 0)
> > - break;
> > -
> > - return -EINVAL;
> > - }
> > -
> > - return 0;
> > -}
> > -
> > -static int cdns_mhdp_mailbox_recv_data(struct cdns_mhdp_device
> *mhdp,
> > -u8 *buff, u16 buff_size)
> > -{
> > - u32 i;
> > - int ret;
> > -
> > - for (i = 0; i < buff_size; i++) {
> > - ret = cdns_mhdp_mailbox_read(mhdp);
> > - if (ret < 0)
> > - return ret;
> > -
> > - buff[i] = ret;
> > - }
> > -
> > - return 0;
> > -}
> > -
> > -static int cdns_mhdp_mailbox_send(struct cdns_mhdp_device *mhdp, u8
> module_id,
> > -   u8 opcode, u16 size, u8 *message)
> > -{
> > - u8 header[4];
> > - int ret, i;
> > -
> > - header[0] = opcode;
> > - header[1] = module_id;
> > - put_unaligned_be16(size, header + 2);
> > -
> > - for (i = 0; i < sizeof(header); i++) {
> > - ret = cdns_mhdp_mailbox_write(mhdp, header[i]);
> > - if (ret)
> > - return ret;
> > - }
> > -
> > - for (i = 0; i < size; i++) {
> > - ret = cdns_mhdp_mailbox_write(mhdp, message[i]);
> > - if (ret)
> > - return ret;
> > - }
> > -
> > - return 0;
> > -}
> > -
> > -static
> > -int cdns_mhdp_reg_read(struct cdns_mhdp_device *mhdp, u32 addr, u32
> > *value) -{
> > - u8 msg[4], resp[8];
> > - int ret;
> > -
> > - put_unaligned_be32(addr, msg);
> > -
> > - mutex_lock(>mbox_mutex);
> > -
> > - ret = cdns_mhdp_mailbox_send(mhdp, MB_MODULE_ID_GENERAL,

Re: [PATCH v9 1/7] drm: bridge: Cadence: convert mailbox functions to macro functions

2023-09-28 Thread Dmitry Baryshkov

On 07/09/2023 04:05, Sandor Yu wrote:

MHDP8546 mailbox access functions will be share to other mhdp driver
and Cadence HDP-TX HDMI/DP PHY drivers.
Move those functions to head file include/drm/bridge/cdns-mhdp-mailbox.h
and convert them to macro functions.

Signed-off-by: Sandor Yu 
---
  .../drm/bridge/cadence/cdns-mhdp8546-core.c   | 195 +-
  .../drm/bridge/cadence/cdns-mhdp8546-core.h   |   1 -
  include/drm/bridge/cdns-mhdp-mailbox.h| 240 ++
  3 files changed, 241 insertions(+), 195 deletions(-)
  create mode 100644 include/drm/bridge/cdns-mhdp-mailbox.h

diff --git a/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c 
b/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c
index f6822dfa3805..ddd3c633c7bf 100644
--- a/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c
+++ b/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c
@@ -36,6 +36,7 @@
  #include 
  #include 
  
+#include 

  #include 
  #include 
  #include 
@@ -54,200 +55,6 @@
  #include "cdns-mhdp8546-hdcp.h"
  #include "cdns-mhdp8546-j721e.h"
  
-static int cdns_mhdp_mailbox_read(struct cdns_mhdp_device *mhdp)

-{
-   int ret, empty;
-
-   WARN_ON(!mutex_is_locked(>mbox_mutex));
-
-   ret = readx_poll_timeout(readl, mhdp->regs + CDNS_MAILBOX_EMPTY,
-empty, !empty, MAILBOX_RETRY_US,
-MAILBOX_TIMEOUT_US);
-   if (ret < 0)
-   return ret;
-
-   return readl(mhdp->regs + CDNS_MAILBOX_RX_DATA) & 0xff;
-}
-
-static int cdns_mhdp_mailbox_write(struct cdns_mhdp_device *mhdp, u8 val)
-{
-   int ret, full;
-
-   WARN_ON(!mutex_is_locked(>mbox_mutex));
-
-   ret = readx_poll_timeout(readl, mhdp->regs + CDNS_MAILBOX_FULL,
-full, !full, MAILBOX_RETRY_US,
-MAILBOX_TIMEOUT_US);
-   if (ret < 0)
-   return ret;
-
-   writel(val, mhdp->regs + CDNS_MAILBOX_TX_DATA);
-
-   return 0;
-}
-
-static int cdns_mhdp_mailbox_recv_header(struct cdns_mhdp_device *mhdp,
-u8 module_id, u8 opcode,
-u16 req_size)
-{
-   u32 mbox_size, i;
-   u8 header[4];
-   int ret;
-
-   /* read the header of the message */
-   for (i = 0; i < sizeof(header); i++) {
-   ret = cdns_mhdp_mailbox_read(mhdp);
-   if (ret < 0)
-   return ret;
-
-   header[i] = ret;
-   }
-
-   mbox_size = get_unaligned_be16(header + 2);
-
-   if (opcode != header[0] || module_id != header[1] ||
-   req_size != mbox_size) {
-   /*
-* If the message in mailbox is not what we want, we need to
-* clear the mailbox by reading its contents.
-*/
-   for (i = 0; i < mbox_size; i++)
-   if (cdns_mhdp_mailbox_read(mhdp) < 0)
-   break;
-
-   return -EINVAL;
-   }
-
-   return 0;
-}
-
-static int cdns_mhdp_mailbox_recv_data(struct cdns_mhdp_device *mhdp,
-  u8 *buff, u16 buff_size)
-{
-   u32 i;
-   int ret;
-
-   for (i = 0; i < buff_size; i++) {
-   ret = cdns_mhdp_mailbox_read(mhdp);
-   if (ret < 0)
-   return ret;
-
-   buff[i] = ret;
-   }
-
-   return 0;
-}
-
-static int cdns_mhdp_mailbox_send(struct cdns_mhdp_device *mhdp, u8 module_id,
- u8 opcode, u16 size, u8 *message)
-{
-   u8 header[4];
-   int ret, i;
-
-   header[0] = opcode;
-   header[1] = module_id;
-   put_unaligned_be16(size, header + 2);
-
-   for (i = 0; i < sizeof(header); i++) {
-   ret = cdns_mhdp_mailbox_write(mhdp, header[i]);
-   if (ret)
-   return ret;
-   }
-
-   for (i = 0; i < size; i++) {
-   ret = cdns_mhdp_mailbox_write(mhdp, message[i]);
-   if (ret)
-   return ret;
-   }
-
-   return 0;
-}
-
-static
-int cdns_mhdp_reg_read(struct cdns_mhdp_device *mhdp, u32 addr, u32 *value)
-{
-   u8 msg[4], resp[8];
-   int ret;
-
-   put_unaligned_be32(addr, msg);
-
-   mutex_lock(>mbox_mutex);
-
-   ret = cdns_mhdp_mailbox_send(mhdp, MB_MODULE_ID_GENERAL,
-GENERAL_REGISTER_READ,
-sizeof(msg), msg);
-   if (ret)
-   goto out;
-
-   ret = cdns_mhdp_mailbox_recv_header(mhdp, MB_MODULE_ID_GENERAL,
-   GENERAL_REGISTER_READ,
-   sizeof(resp));
-   if (ret)
-   goto out;
-
-   ret = cdns_mhdp_mailbox_recv_data(mhdp, resp, sizeof(resp));
-   if (ret)
-   goto out;
-
-   /* Returned address value should be the same 

[PATCH v9 1/7] drm: bridge: Cadence: convert mailbox functions to macro functions

2023-09-06 Thread Sandor Yu
MHDP8546 mailbox access functions will be share to other mhdp driver
and Cadence HDP-TX HDMI/DP PHY drivers.
Move those functions to head file include/drm/bridge/cdns-mhdp-mailbox.h
and convert them to macro functions.

Signed-off-by: Sandor Yu 
---
 .../drm/bridge/cadence/cdns-mhdp8546-core.c   | 195 +-
 .../drm/bridge/cadence/cdns-mhdp8546-core.h   |   1 -
 include/drm/bridge/cdns-mhdp-mailbox.h| 240 ++
 3 files changed, 241 insertions(+), 195 deletions(-)
 create mode 100644 include/drm/bridge/cdns-mhdp-mailbox.h

diff --git a/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c 
b/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c
index f6822dfa3805..ddd3c633c7bf 100644
--- a/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c
+++ b/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c
@@ -36,6 +36,7 @@
 #include 
 #include 
 
+#include 
 #include 
 #include 
 #include 
@@ -54,200 +55,6 @@
 #include "cdns-mhdp8546-hdcp.h"
 #include "cdns-mhdp8546-j721e.h"
 
-static int cdns_mhdp_mailbox_read(struct cdns_mhdp_device *mhdp)
-{
-   int ret, empty;
-
-   WARN_ON(!mutex_is_locked(>mbox_mutex));
-
-   ret = readx_poll_timeout(readl, mhdp->regs + CDNS_MAILBOX_EMPTY,
-empty, !empty, MAILBOX_RETRY_US,
-MAILBOX_TIMEOUT_US);
-   if (ret < 0)
-   return ret;
-
-   return readl(mhdp->regs + CDNS_MAILBOX_RX_DATA) & 0xff;
-}
-
-static int cdns_mhdp_mailbox_write(struct cdns_mhdp_device *mhdp, u8 val)
-{
-   int ret, full;
-
-   WARN_ON(!mutex_is_locked(>mbox_mutex));
-
-   ret = readx_poll_timeout(readl, mhdp->regs + CDNS_MAILBOX_FULL,
-full, !full, MAILBOX_RETRY_US,
-MAILBOX_TIMEOUT_US);
-   if (ret < 0)
-   return ret;
-
-   writel(val, mhdp->regs + CDNS_MAILBOX_TX_DATA);
-
-   return 0;
-}
-
-static int cdns_mhdp_mailbox_recv_header(struct cdns_mhdp_device *mhdp,
-u8 module_id, u8 opcode,
-u16 req_size)
-{
-   u32 mbox_size, i;
-   u8 header[4];
-   int ret;
-
-   /* read the header of the message */
-   for (i = 0; i < sizeof(header); i++) {
-   ret = cdns_mhdp_mailbox_read(mhdp);
-   if (ret < 0)
-   return ret;
-
-   header[i] = ret;
-   }
-
-   mbox_size = get_unaligned_be16(header + 2);
-
-   if (opcode != header[0] || module_id != header[1] ||
-   req_size != mbox_size) {
-   /*
-* If the message in mailbox is not what we want, we need to
-* clear the mailbox by reading its contents.
-*/
-   for (i = 0; i < mbox_size; i++)
-   if (cdns_mhdp_mailbox_read(mhdp) < 0)
-   break;
-
-   return -EINVAL;
-   }
-
-   return 0;
-}
-
-static int cdns_mhdp_mailbox_recv_data(struct cdns_mhdp_device *mhdp,
-  u8 *buff, u16 buff_size)
-{
-   u32 i;
-   int ret;
-
-   for (i = 0; i < buff_size; i++) {
-   ret = cdns_mhdp_mailbox_read(mhdp);
-   if (ret < 0)
-   return ret;
-
-   buff[i] = ret;
-   }
-
-   return 0;
-}
-
-static int cdns_mhdp_mailbox_send(struct cdns_mhdp_device *mhdp, u8 module_id,
- u8 opcode, u16 size, u8 *message)
-{
-   u8 header[4];
-   int ret, i;
-
-   header[0] = opcode;
-   header[1] = module_id;
-   put_unaligned_be16(size, header + 2);
-
-   for (i = 0; i < sizeof(header); i++) {
-   ret = cdns_mhdp_mailbox_write(mhdp, header[i]);
-   if (ret)
-   return ret;
-   }
-
-   for (i = 0; i < size; i++) {
-   ret = cdns_mhdp_mailbox_write(mhdp, message[i]);
-   if (ret)
-   return ret;
-   }
-
-   return 0;
-}
-
-static
-int cdns_mhdp_reg_read(struct cdns_mhdp_device *mhdp, u32 addr, u32 *value)
-{
-   u8 msg[4], resp[8];
-   int ret;
-
-   put_unaligned_be32(addr, msg);
-
-   mutex_lock(>mbox_mutex);
-
-   ret = cdns_mhdp_mailbox_send(mhdp, MB_MODULE_ID_GENERAL,
-GENERAL_REGISTER_READ,
-sizeof(msg), msg);
-   if (ret)
-   goto out;
-
-   ret = cdns_mhdp_mailbox_recv_header(mhdp, MB_MODULE_ID_GENERAL,
-   GENERAL_REGISTER_READ,
-   sizeof(resp));
-   if (ret)
-   goto out;
-
-   ret = cdns_mhdp_mailbox_recv_data(mhdp, resp, sizeof(resp));
-   if (ret)
-   goto out;
-
-   /* Returned address value should be the same as requested */
-   if (memcmp(msg, resp,