All of lore.kernel.org
 help / color / mirror / Atom feed
* [asahilinux:bits/010-mailbox 6/10] drivers/soc/apple/mailbox.c:153:24: error: implicit declaration of function 'FIELD_PREP'
@ 2023-03-14 13:20 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2023-03-14 13:20 UTC (permalink / raw)
  To: Hector Martin; +Cc: oe-kbuild-all

tree:   https://github.com/AsahiLinux/linux bits/010-mailbox
head:   6c4ce154f77d8de759ffc90c817b68191a010c18
commit: 5e830b6644fd5f5b8cef306b8754842af5b5c316 [6/10] soc: apple: mailbox: Add ASC/M3 mailbox driver
config: riscv-allmodconfig (https://download.01.org/0day-ci/archive/20230314/202303142108.NTHN5CyI-lkp@intel.com/config)
compiler: riscv64-linux-gcc (GCC) 12.1.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/AsahiLinux/linux/commit/5e830b6644fd5f5b8cef306b8754842af5b5c316
        git remote add asahilinux https://github.com/AsahiLinux/linux
        git fetch --no-tags asahilinux bits/010-mailbox
        git checkout 5e830b6644fd5f5b8cef306b8754842af5b5c316
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=riscv olddefconfig
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=riscv SHELL=/bin/bash drivers/soc/apple/

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
| Link: https://lore.kernel.org/oe-kbuild-all/202303142108.NTHN5CyI-lkp@intel.com/

All errors (new ones prefixed by >>):

   In file included from include/linux/byteorder/little_endian.h:5,
                    from arch/riscv/include/uapi/asm/byteorder.h:10,
                    from include/asm-generic/qrwlock_types.h:6,
                    from ./arch/riscv/include/generated/asm/qrwlock_types.h:1,
                    from include/asm-generic/spinlock_types.h:13,
                    from ./arch/riscv/include/generated/asm/spinlock_types.h:1,
                    from include/linux/spinlock_types_raw.h:7,
                    from include/linux/ratelimit_types.h:7,
                    from include/linux/printk.h:9,
                    from include/asm-generic/bug.h:22,
                    from arch/riscv/include/asm/bug.h:83,
                    from include/linux/bug.h:5,
                    from arch/riscv/include/asm/current.h:13,
                    from include/linux/sched.h:12,
                    from include/linux/delay.h:23,
                    from drivers/soc/apple/mailbox.c:19:
   drivers/soc/apple/mailbox.c: In function 'apple_mbox_send':
>> drivers/soc/apple/mailbox.c:153:24: error: implicit declaration of function 'FIELD_PREP' [-Werror=implicit-function-declaration]
     153 |         writeq_relaxed(FIELD_PREP(APPLE_MBOX_MSG1_MSG, msg.msg1),
         |                        ^~~~~~~~~~
   include/uapi/linux/byteorder/little_endian.h:32:51: note: in definition of macro '__cpu_to_le64'
      32 | #define __cpu_to_le64(x) ((__force __le64)(__u64)(x))
         |                                                   ^
   arch/riscv/include/asm/mmio.h:124:48: note: in expansion of macro 'writeq_cpu'
     124 | #define writeq_relaxed(v, c)    ({ __io_rbw(); writeq_cpu((v), (c)); __io_raw(); })
         |                                                ^~~~~~~~~~
   drivers/soc/apple/mailbox.c:153:9: note: in expansion of macro 'writeq_relaxed'
     153 |         writeq_relaxed(FIELD_PREP(APPLE_MBOX_MSG1_MSG, msg.msg1),
         |         ^~~~~~~~~~~~~~
   drivers/soc/apple/mailbox.c: In function 'apple_mbox_poll_locked':
>> drivers/soc/apple/mailbox.c:190:28: error: implicit declaration of function 'FIELD_GET'; did you mean 'FOLL_GET'? [-Werror=implicit-function-declaration]
     190 |                 msg.msg1 = FIELD_GET(
         |                            ^~~~~~~~~
         |                            FOLL_GET
   cc1: some warnings being treated as errors


vim +/FIELD_PREP +153 drivers/soc/apple/mailbox.c

    97	
    98	int apple_mbox_send(struct apple_mbox *mbox, const struct apple_mbox_msg msg,
    99			    bool atomic)
   100	{
   101		unsigned long flags;
   102		int ret;
   103		u32 mbox_ctrl;
   104		long t;
   105	
   106		spin_lock_irqsave(&mbox->tx_lock, flags);
   107		mbox_ctrl = readl_relaxed(mbox->regs + mbox->hw->a2i_control);
   108	
   109		while (mbox_ctrl & mbox->hw->control_full) {
   110			if (atomic) {
   111				ret = readl_poll_timeout_atomic(
   112					mbox->regs + mbox->hw->a2i_control, mbox_ctrl,
   113					!(mbox_ctrl & mbox->hw->control_full), 100,
   114					APPLE_MBOX_TX_TIMEOUT * 1000);
   115	
   116				if (ret) {
   117					spin_unlock_irqrestore(&mbox->tx_lock, flags);
   118					return ret;
   119				}
   120	
   121				break;
   122			}
   123			/*
   124			 * The interrupt is level triggered and will keep firing as long as the
   125			 * FIFO is empty. It will also keep firing if the FIFO was empty
   126			 * at any point in the past until it has been acknowledged at the
   127			 * mailbox level. By acknowledging it here we can ensure that we will
   128			 * only get the interrupt once the FIFO has been cleared again.
   129			 * If the FIFO is already empty before the ack it will fire again
   130			 * immediately after the ack.
   131			 */
   132			if (mbox->hw->has_irq_controls) {
   133				writel_relaxed(mbox->hw->irq_bit_send_empty,
   134					       mbox->regs + mbox->hw->irq_ack);
   135			}
   136			enable_irq(mbox->irq_send_empty);
   137			reinit_completion(&mbox->tx_empty);
   138			spin_unlock_irqrestore(&mbox->tx_lock, flags);
   139	
   140			t = wait_for_completion_interruptible_timeout(
   141				&mbox->tx_empty,
   142				msecs_to_jiffies(APPLE_MBOX_TX_TIMEOUT));
   143			if (t < 0)
   144				return t;
   145			else if (t == 0)
   146				return -ETIMEDOUT;
   147	
   148			spin_lock_irqsave(&mbox->tx_lock, flags);
   149			mbox_ctrl = readl_relaxed(mbox->regs + mbox->hw->a2i_control);
   150		}
   151	
   152		writeq_relaxed(msg.msg0, mbox->regs + mbox->hw->a2i_send0);
 > 153		writeq_relaxed(FIELD_PREP(APPLE_MBOX_MSG1_MSG, msg.msg1),
   154			       mbox->regs + mbox->hw->a2i_send1);
   155	
   156		spin_unlock_irqrestore(&mbox->tx_lock, flags);
   157	
   158		return 0;
   159	}
   160	EXPORT_SYMBOL(apple_mbox_send);
   161	
   162	static irqreturn_t apple_mbox_send_empty_irq(int irq, void *data)
   163	{
   164		struct apple_mbox *mbox = data;
   165	
   166		/*
   167		 * We don't need to acknowledge the interrupt at the mailbox level
   168		 * here even if supported by the hardware. It will keep firing but that
   169		 * doesn't matter since it's disabled at the main interrupt controller.
   170		 * apple_mbox_send will acknowledge it before enabling
   171		 * it at the main controller again.
   172		 */
   173		spin_lock(&mbox->tx_lock);
   174		disable_irq_nosync(mbox->irq_send_empty);
   175		complete(&mbox->tx_empty);
   176		spin_unlock(&mbox->tx_lock);
   177	
   178		return IRQ_HANDLED;
   179	}
   180	
   181	static int apple_mbox_poll_locked(struct apple_mbox *mbox)
   182	{
   183		struct apple_mbox_msg msg;
   184		int ret = 0;
   185	
   186		u32 mbox_ctrl = readl_relaxed(mbox->regs + mbox->hw->i2a_control);
   187	
   188		while (!(mbox_ctrl & mbox->hw->control_empty)) {
   189			msg.msg0 = readq_relaxed(mbox->regs + mbox->hw->i2a_recv0);
 > 190			msg.msg1 = FIELD_GET(
   191				APPLE_MBOX_MSG1_MSG,
   192				readq_relaxed(mbox->regs + mbox->hw->i2a_recv1));
   193	
   194			mbox->rx(mbox, msg);
   195			ret++;
   196			mbox_ctrl = readl_relaxed(mbox->regs + mbox->hw->i2a_control);
   197		}
   198	
   199		/*
   200		 * The interrupt will keep firing even if there are no more messages
   201		 * unless we also acknowledge it at the mailbox level here.
   202		 * There's no race if a message comes in between the check in the while
   203		 * loop above and the ack below: If a new messages arrives inbetween
   204		 * those two the interrupt will just fire again immediately after the
   205		 * ack since it's level triggered.
   206		 */
   207		if (mbox->hw->has_irq_controls) {
   208			writel_relaxed(mbox->hw->irq_bit_recv_not_empty,
   209				       mbox->regs + mbox->hw->irq_ack);
   210		}
   211	
   212		return ret;
   213	}
   214	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2023-03-14 13:21 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-03-14 13:20 [asahilinux:bits/010-mailbox 6/10] drivers/soc/apple/mailbox.c:153:24: error: implicit declaration of function 'FIELD_PREP' kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.