All of lore.kernel.org
 help / color / mirror / Atom feed
* [asahilinux:atcphy-20230219 52/54] drivers/phy/apple/atc-display-crossbar.c:127:25: error: implicit declaration of function 'FIELD_PREP'
@ 2023-02-19 19:29 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2023-02-19 19:29 UTC (permalink / raw)
  To: Sven Peter; +Cc: oe-kbuild-all

tree:   https://github.com/AsahiLinux/linux atcphy-20230219
head:   9928386c36c8def0becc6ce2db8f18f2111f9b3c
commit: aec02a74177421dde96d55515aef500059d6f8ab [52/54] phy: apple: Add display crossbar
config: sh-allmodconfig (https://download.01.org/0day-ci/archive/20230220/202302200341.2ozTYUDS-lkp@intel.com/config)
compiler: sh4-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/aec02a74177421dde96d55515aef500059d6f8ab
        git remote add asahilinux https://github.com/AsahiLinux/linux
        git fetch --no-tags asahilinux atcphy-20230219
        git checkout aec02a74177421dde96d55515aef500059d6f8ab
        # 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=sh olddefconfig
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=sh SHELL=/bin/bash drivers/phy/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/202302200341.2ozTYUDS-lkp@intel.com/

All error/warnings (new ones prefixed by >>):

   drivers/phy/apple/atc-display-crossbar.c: In function 'apple_dpxbar_set':
>> drivers/phy/apple/atc-display-crossbar.c:127:25: error: implicit declaration of function 'FIELD_PREP' [-Werror=implicit-function-declaration]
     127 |                         FIELD_PREP(CROSSBAR_MUX_CTRL_DPPHY_SELECT0, mux_state) |
         |                         ^~~~~~~~~~
   drivers/phy/apple/atc-display-crossbar.c: At top level:
>> drivers/phy/apple/atc-display-crossbar.c:268:1: warning: 'static' is not at beginning of declaration [-Wold-style-declaration]
     268 | const static struct apple_dpxbar_hw apple_dpxbar_hw_t8103 = {
         | ^~~~~
   drivers/phy/apple/atc-display-crossbar.c:273:1: warning: 'static' is not at beginning of declaration [-Wold-style-declaration]
     273 | const static struct apple_dpxbar_hw apple_dpxbar_hw_t6000 = {
         | ^~~~~
   cc1: some warnings being treated as errors


vim +/FIELD_PREP +127 drivers/phy/apple/atc-display-crossbar.c

    93	
    94	static int apple_dpxbar_set(struct mux_control *mux, int state)
    95	{
    96		struct apple_dpxbar *dpxbar = mux_chip_priv(mux->chip);
    97		unsigned int index = mux_control_get_index(mux);
    98		unsigned long flags;
    99		unsigned int mux_state;
   100		unsigned int dispext_bit;
   101		unsigned int atc_bit;
   102		bool enable;
   103		int ret = 0;
   104		u32 mux_mask, mux_set;
   105	
   106		if (state == MUX_IDLE_DISCONNECT) {
   107			/*
   108			 * Technically this will select dispext0,0 in the mux control
   109			 * register. Practically that doesn't matter since everything
   110			 * else is disabled.
   111			 */
   112			mux_state = 0;
   113			enable = false;
   114		} else if (state >= 0 && state < 9) {
   115			dispext_bit = 1 << state;
   116			mux_state = state;
   117			enable = true;
   118		} else {
   119			return -EINVAL;
   120		}
   121	
   122		switch (index) {
   123		case MUX_DPPHY:
   124			mux_mask = CROSSBAR_MUX_CTRL_DPPHY_SELECT0 |
   125				   CROSSBAR_MUX_CTRL_DPPHY_SELECT1;
   126			mux_set =
 > 127				FIELD_PREP(CROSSBAR_MUX_CTRL_DPPHY_SELECT0, mux_state) |
   128				FIELD_PREP(CROSSBAR_MUX_CTRL_DPPHY_SELECT1, mux_state);
   129			atc_bit = ATC_DPPHY;
   130			break;
   131		case MUX_DPIN0:
   132			mux_mask = CROSSBAR_MUX_CTRL_DPIN0_SELECT0 |
   133				   CROSSBAR_MUX_CTRL_DPIN0_SELECT1;
   134			mux_set =
   135				FIELD_PREP(CROSSBAR_MUX_CTRL_DPIN0_SELECT0, mux_state) |
   136				FIELD_PREP(CROSSBAR_MUX_CTRL_DPIN0_SELECT1, mux_state);
   137			atc_bit = ATC_DPIN0;
   138			break;
   139		case MUX_DPIN1:
   140			mux_mask = CROSSBAR_MUX_CTRL_DPIN1_SELECT0 |
   141				   CROSSBAR_MUX_CTRL_DPIN1_SELECT1;
   142			mux_set =
   143				FIELD_PREP(CROSSBAR_MUX_CTRL_DPIN1_SELECT0, mux_state) |
   144				FIELD_PREP(CROSSBAR_MUX_CTRL_DPIN1_SELECT1, mux_state);
   145			atc_bit = ATC_DPIN1;
   146			break;
   147		default:
   148			return -EINVAL;
   149		}
   150	
   151		spin_lock_irqsave(&dpxbar->lock, flags);
   152	
   153		/* ensure the selected dispext isn't already used in this crossbar */
   154		if (enable) {
   155			for (int i = 0; i < MUX_MAX; ++i) {
   156				if (i == index)
   157					continue;
   158				if (dpxbar->selected_dispext[i] == state) {
   159					spin_unlock_irqrestore(&dpxbar->lock, flags);
   160					return -EBUSY;
   161				}
   162			}
   163		}
   164	
   165		dpxbar_set32(dpxbar, OUT_N_CLK_EN, atc_bit);
   166		dpxbar_clear32(dpxbar, OUT_UNK_EN, atc_bit);
   167		dpxbar_clear32(dpxbar, OUT_PCLK1_EN, atc_bit);
   168		dpxbar_clear32(dpxbar, CROSSBAR_ATC_EN, atc_bit);
   169	
   170		if (dpxbar->selected_dispext[index] >= 0) {
   171			u32 prev_dispext_bit = 1 << dpxbar->selected_dispext[index];
   172	
   173			dpxbar_set32(dpxbar, FIFO_WR_N_CLK_EN, prev_dispext_bit);
   174			dpxbar_set32(dpxbar, FIFO_RD_N_CLK_EN, prev_dispext_bit);
   175			dpxbar_clear32(dpxbar, FIFO_WR_UNK_EN, prev_dispext_bit);
   176			dpxbar_clear32(dpxbar, FIFO_RD_UNK_EN, prev_dispext_bit);
   177			dpxbar_clear32(dpxbar, FIFO_WR_DPTX_CLK_EN, prev_dispext_bit);
   178			dpxbar_clear32(dpxbar, FIFO_RD_PCLK1_EN, prev_dispext_bit);
   179			dpxbar_clear32(dpxbar, CROSSBAR_DISPEXT_EN, prev_dispext_bit);
   180	
   181			dpxbar->selected_dispext[index] = -1;
   182		}
   183	
   184		dpxbar_mask32(dpxbar, CROSSBAR_MUX_CTRL, mux_mask, mux_set);
   185	
   186		if (enable) {
   187			dpxbar_clear32(dpxbar, FIFO_WR_N_CLK_EN, dispext_bit);
   188			dpxbar_clear32(dpxbar, FIFO_RD_N_CLK_EN, dispext_bit);
   189			dpxbar_clear32(dpxbar, OUT_N_CLK_EN, atc_bit);
   190			dpxbar_set32(dpxbar, FIFO_WR_UNK_EN, dispext_bit);
   191			dpxbar_set32(dpxbar, FIFO_RD_UNK_EN, dispext_bit);
   192			dpxbar_set32(dpxbar, OUT_UNK_EN, atc_bit);
   193			dpxbar_set32(dpxbar, FIFO_WR_DPTX_CLK_EN, dispext_bit);
   194			dpxbar_set32(dpxbar, FIFO_RD_PCLK1_EN, dispext_bit);
   195			dpxbar_set32(dpxbar, OUT_PCLK1_EN, atc_bit);
   196			dpxbar_set32(dpxbar, CROSSBAR_ATC_EN, atc_bit);
   197			dpxbar_set32(dpxbar, CROSSBAR_DISPEXT_EN, dispext_bit);
   198	
   199			/*
   200			 * This workaround was observed by tracing XNU's memory access
   201			 * and seems to work around some HW quirk:
   202			 * Without toggling the RD_PCLK enable here the connection
   203			 * doesn't come up. Testing has shown that a delay of about
   204			 * 5 usec is required which is doubled here to be on the
   205			 * safe side.
   206			 */
   207			dpxbar_clear32(dpxbar, FIFO_RD_PCLK1_EN, dispext_bit);
   208			udelay(10);
   209			dpxbar_set32(dpxbar, FIFO_RD_PCLK1_EN, dispext_bit);
   210	
   211			dpxbar->selected_dispext[index] = state;
   212		}
   213	
   214		spin_unlock_irqrestore(&dpxbar->lock, flags);
   215	
   216		if (enable)
   217			dev_err(dpxbar->dev, "Switched %s to dispext%u,%u\n",
   218				apple_dpxbar_names[index], mux_state >> 1,
   219				mux_state & 1);
   220		else
   221			dev_err(dpxbar->dev, "Switched %s to disconnected state\n",
   222				apple_dpxbar_names[index]);
   223	
   224		return ret;
   225	}
   226	
   227	static const struct mux_control_ops apple_dpxbar_ops = {
   228		.set = apple_dpxbar_set,
   229	};
   230	
   231	static int apple_dpxbar_probe(struct platform_device *pdev)
   232	{
   233		struct device *dev = &pdev->dev;
   234		struct mux_chip *mux_chip;
   235		struct apple_dpxbar *dpxbar;
   236		const struct apple_dpxbar_hw *hw;
   237		int ret;
   238	
   239		hw = of_device_get_match_data(dev);
   240		mux_chip = devm_mux_chip_alloc(dev, MUX_MAX, sizeof(*dpxbar));
   241		if (IS_ERR(mux_chip))
   242			return PTR_ERR(mux_chip);
   243	
   244		dpxbar = mux_chip_priv(mux_chip);
   245		mux_chip->ops = &apple_dpxbar_ops;
   246		spin_lock_init(&dpxbar->lock);
   247	
   248		dpxbar->dev = dev;
   249		dpxbar->regs = devm_platform_ioremap_resource(pdev, 0);
   250		if (IS_ERR(dpxbar->regs))
   251			return PTR_ERR(dpxbar->regs);
   252	
   253		writel(hw->tunable, dpxbar->regs + UNK_TUNABLE);
   254	
   255		for (unsigned int i = 0; i < MUX_MAX; ++i) {
   256			mux_chip->mux[i].states = hw->n_ufp;
   257			mux_chip->mux[i].idle_state = MUX_IDLE_DISCONNECT;
   258			dpxbar->selected_dispext[i] = -1;
   259		}
   260	
   261		ret = devm_mux_chip_register(dev, mux_chip);
   262		if (ret < 0)
   263			return ret;
   264	
   265		return 0;
   266	}
   267	
 > 268	const static struct apple_dpxbar_hw apple_dpxbar_hw_t8103 = {
   269		.n_ufp = 2,
   270		.tunable = 0,
   271	};
   272	

-- 
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-02-19 19:30 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-02-19 19:29 [asahilinux:atcphy-20230219 52/54] drivers/phy/apple/atc-display-crossbar.c:127:25: 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.