All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: [chenxing:rperier-timer 14/16] drivers/clocksource/timer-msc313e.c:44:28: error: field 'delay' has incomplete type
Date: Sun, 31 Oct 2021 04:44:03 +0800	[thread overview]
Message-ID: <202110310455.FbsMcmr3-lkp@intel.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 7666 bytes --]

tree:   git://github.com/linux-chenxing/linux.git rperier-timer
head:   2c2964b90b3016b69281286af5e9559ccb6fbbcc
commit: fcb8c30c9d205fa8600690505ee8df8ff9c37351 [14/16] clocksource: Add support for timekeeping on MStar MSC313e (WIP)
config: riscv-allyesconfig (attached as .config)
compiler: riscv64-linux-gcc (GCC) 11.2.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/linux-chenxing/linux/commit/fcb8c30c9d205fa8600690505ee8df8ff9c37351
        git remote add chenxing git://github.com/linux-chenxing/linux.git
        git fetch --no-tags chenxing rperier-timer
        git checkout fcb8c30c9d205fa8600690505ee8df8ff9c37351
        # save the attached .config to linux build tree
        mkdir build_dir
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross O=build_dir ARCH=riscv SHELL=/bin/bash drivers/

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

>> drivers/clocksource/timer-msc313e.c:44:28: error: field 'delay' has incomplete type
      44 |         struct delay_timer delay;
         |                            ^~~~~
   drivers/clocksource/timer-msc313e.c: In function 'msc313e_delay_init':
>> drivers/clocksource/timer-msc313e.c:209:9: error: implicit declaration of function 'register_current_timer_delay' [-Werror=implicit-function-declaration]
     209 |         register_current_timer_delay(&msc313e_delay->delay);
         |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   cc1: all warnings being treated as errors


vim +/delay +44 drivers/clocksource/timer-msc313e.c

    41	
    42	struct msc313e_delay {
    43		void __iomem * base;
  > 44		struct delay_timer delay;
    45	};
    46	
    47	static struct timer_of *msc313e_clkevt;
    48	static void __iomem *msc313e_clksrc;
    49	static struct msc313e_delay *msc313e_delay;
    50	
    51	#define to_msc313e_timer(ptr) container_of(ptr, struct msc313e_timer, clksrc)
    52	
    53	static int msc313e_timer_clkevt_shutdown(struct clock_event_device *evt)
    54	{
    55		struct timer_of *timer = to_timer_of(evt);
    56		u16 reg;
    57	
    58		pr_info("shutdown\n");
    59	
    60		reg = readw(timer->of_base.base + REG_CTRL);
    61		reg &= ~CTRL_ENABLE;
    62		writew(reg, timer->of_base.base + REG_CTRL);
    63	
    64		return 0;
    65	}
    66	
    67	static int msc313e_timer_clkevt_set_oneshot(struct clock_event_device *evt)
    68	{
    69		pr_info("%s: one shot\n", __func__);
    70	
    71		//result = readw_relaxed(timer->oftimer.of_base.base + REG_COUNTER_LOW);
    72	
    73		return 0;
    74	}
    75	
    76	static int msc313e_timer_set_periodic(struct clock_event_device *evt)
    77	{
    78		struct timer_of *timer = to_timer_of(evt);
    79	
    80		pr_info("periodic\n");
    81	
    82		writew(CTRL_ENABLE | CTRL_IRQ, timer->of_base.base + REG_CTRL);
    83		return 0;
    84	}
    85	
    86	static int msc313e_timer_clkevt_next_event(unsigned long evt, struct clock_event_device *clkevt)
    87	{
    88		pr_info("%s: next\n", __func__);
    89	
    90		return 0;
    91	}
    92	
    93	static irqreturn_t msc313e_timer_clkevt_irq(int irq, void *dev_id)
    94	{
    95		struct clock_event_device *evt = dev_id;
    96	
    97		evt->event_handler(evt);
    98	
    99		return IRQ_HANDLED;
   100	}
   101	
   102	static u64 msc313e_timer_read(struct clocksource *cs)
   103	{
   104		u64 result = 0;
   105		u16 low;
   106		u16 high;
   107	
   108		low  = readw(msc313e_clksrc + REG_COUNTER_LOW);
   109		high = readw(msc313e_clksrc + REG_COUNTER_HIGH);
   110	
   111		result = (high << 16 ) | low;
   112		return result & cs->mask;
   113	}
   114	
   115	static unsigned long msc313e_read_delay_timer_read(void)
   116	{
   117		unsigned long result;
   118	
   119		result = readw(msc313e_delay->base + REG_COUNTER_LOW);
   120		result |= readw(msc313e_delay->base + REG_COUNTER_HIGH) << 16;
   121	
   122		return result;
   123	}
   124	
   125	static u64 msc313e_timer_sched_clock_read(void)
   126	{
   127		u64 result;
   128	
   129		result = readw(msc313e_clksrc + REG_COUNTER_LOW);
   130		result |= readw(msc313e_clksrc + REG_COUNTER_HIGH) << 16;
   131	
   132		return result;
   133	}
   134	
   135	static int __init msc313e_clkevt_init(struct device_node *np)
   136	{
   137		int ret;
   138	
   139		msc313e_clkevt = kzalloc(sizeof(struct timer_of), GFP_KERNEL);
   140		if (!msc313e_clkevt)
   141			return -ENOMEM;
   142	
   143		msc313e_clkevt->flags = TIMER_OF_IRQ | TIMER_OF_CLOCK | TIMER_OF_BASE,
   144		msc313e_clkevt->clkevt.name = TIMER_NAME,
   145		msc313e_clkevt->clkevt.rating = 300,
   146		msc313e_clkevt->clkevt.features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT;
   147		msc313e_clkevt->clkevt.set_state_shutdown = msc313e_timer_clkevt_shutdown;
   148		msc313e_clkevt->clkevt.set_state_periodic = msc313e_timer_set_periodic;
   149		msc313e_clkevt->clkevt.set_state_oneshot = msc313e_timer_clkevt_set_oneshot;
   150		msc313e_clkevt->clkevt.tick_resume = msc313e_timer_clkevt_shutdown;
   151		msc313e_clkevt->clkevt.set_next_event = msc313e_timer_clkevt_next_event;
   152		msc313e_clkevt->clkevt.cpumask = cpu_possible_mask;
   153		msc313e_clkevt->of_irq.handler = msc313e_timer_clkevt_irq;
   154		msc313e_clkevt->of_irq.flags = IRQF_TIMER | IRQF_IRQPOLL;
   155	
   156		ret = timer_of_init(np, msc313e_clkevt);
   157		if (ret)
   158			return ret;
   159	
   160		clockevents_config_and_register(&msc313e_clkevt->clkevt, timer_of_rate(msc313e_clkevt),
   161						TIMER_SYNC_TICKS, 0xffffffff);
   162		return 0;
   163	}
   164	
   165	static int __init msc313e_clksrc_init(struct device_node *np)
   166	{
   167		struct timer_of to = { 0 };
   168		int ret;
   169		u16 reg;
   170	
   171		to.flags = TIMER_OF_BASE | TIMER_OF_CLOCK;
   172		ret = timer_of_init(np, &to);
   173		if (ret)
   174			return ret;
   175	
   176		msc313e_clksrc = timer_of_base(&to);
   177		reg = readw(msc313e_clksrc + REG_CTRL);
   178		reg |= CTRL_ENABLE;
   179		writew(reg, msc313e_clksrc + REG_CTRL);
   180	
   181		sched_clock_register(msc313e_timer_sched_clock_read, 32, timer_of_rate(&to));
   182		return clocksource_mmio_init(timer_of_base(&to), TIMER_NAME, timer_of_rate(&to), 300, 32,
   183					     msc313e_timer_read);
   184	}
   185	
   186	static int __init msc313e_delay_init(struct device_node *np)
   187	{
   188		struct timer_of to = { 0 };
   189		int ret;
   190		u16 reg;
   191	
   192		to.flags = TIMER_OF_BASE | TIMER_OF_CLOCK;
   193		ret = timer_of_init(np, &to);
   194		if (ret)
   195			return ret;
   196	
   197		msc313e_delay = kzalloc(sizeof(struct msc313e_delay), GFP_KERNEL);
   198		if (!msc313e_delay)
   199			return -ENOMEM;
   200	
   201		msc313e_delay->base = timer_of_base(&to);
   202		msc313e_delay->delay.read_current_timer = msc313e_read_delay_timer_read;
   203		msc313e_delay->delay.freq = timer_of_rate(&to);
   204	
   205		reg = readw(msc313e_delay->base + REG_CTRL);
   206		reg |= CTRL_ENABLE;
   207		writew(reg, msc313e_delay->base + REG_CTRL);
   208	
 > 209		register_current_timer_delay(&msc313e_delay->delay);
   210	
   211		return 0;
   212	}
   213	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 71104 bytes --]

WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: Romain Perier <romain.perier@gmail.com>
Cc: kbuild-all@lists.01.org, linux-kernel@vger.kernel.org
Subject: [chenxing:rperier-timer 14/16] drivers/clocksource/timer-msc313e.c:44:28: error: field 'delay' has incomplete type
Date: Sun, 31 Oct 2021 04:44:03 +0800	[thread overview]
Message-ID: <202110310455.FbsMcmr3-lkp@intel.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 7454 bytes --]

tree:   git://github.com/linux-chenxing/linux.git rperier-timer
head:   2c2964b90b3016b69281286af5e9559ccb6fbbcc
commit: fcb8c30c9d205fa8600690505ee8df8ff9c37351 [14/16] clocksource: Add support for timekeeping on MStar MSC313e (WIP)
config: riscv-allyesconfig (attached as .config)
compiler: riscv64-linux-gcc (GCC) 11.2.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/linux-chenxing/linux/commit/fcb8c30c9d205fa8600690505ee8df8ff9c37351
        git remote add chenxing git://github.com/linux-chenxing/linux.git
        git fetch --no-tags chenxing rperier-timer
        git checkout fcb8c30c9d205fa8600690505ee8df8ff9c37351
        # save the attached .config to linux build tree
        mkdir build_dir
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross O=build_dir ARCH=riscv SHELL=/bin/bash drivers/

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

>> drivers/clocksource/timer-msc313e.c:44:28: error: field 'delay' has incomplete type
      44 |         struct delay_timer delay;
         |                            ^~~~~
   drivers/clocksource/timer-msc313e.c: In function 'msc313e_delay_init':
>> drivers/clocksource/timer-msc313e.c:209:9: error: implicit declaration of function 'register_current_timer_delay' [-Werror=implicit-function-declaration]
     209 |         register_current_timer_delay(&msc313e_delay->delay);
         |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   cc1: all warnings being treated as errors


vim +/delay +44 drivers/clocksource/timer-msc313e.c

    41	
    42	struct msc313e_delay {
    43		void __iomem * base;
  > 44		struct delay_timer delay;
    45	};
    46	
    47	static struct timer_of *msc313e_clkevt;
    48	static void __iomem *msc313e_clksrc;
    49	static struct msc313e_delay *msc313e_delay;
    50	
    51	#define to_msc313e_timer(ptr) container_of(ptr, struct msc313e_timer, clksrc)
    52	
    53	static int msc313e_timer_clkevt_shutdown(struct clock_event_device *evt)
    54	{
    55		struct timer_of *timer = to_timer_of(evt);
    56		u16 reg;
    57	
    58		pr_info("shutdown\n");
    59	
    60		reg = readw(timer->of_base.base + REG_CTRL);
    61		reg &= ~CTRL_ENABLE;
    62		writew(reg, timer->of_base.base + REG_CTRL);
    63	
    64		return 0;
    65	}
    66	
    67	static int msc313e_timer_clkevt_set_oneshot(struct clock_event_device *evt)
    68	{
    69		pr_info("%s: one shot\n", __func__);
    70	
    71		//result = readw_relaxed(timer->oftimer.of_base.base + REG_COUNTER_LOW);
    72	
    73		return 0;
    74	}
    75	
    76	static int msc313e_timer_set_periodic(struct clock_event_device *evt)
    77	{
    78		struct timer_of *timer = to_timer_of(evt);
    79	
    80		pr_info("periodic\n");
    81	
    82		writew(CTRL_ENABLE | CTRL_IRQ, timer->of_base.base + REG_CTRL);
    83		return 0;
    84	}
    85	
    86	static int msc313e_timer_clkevt_next_event(unsigned long evt, struct clock_event_device *clkevt)
    87	{
    88		pr_info("%s: next\n", __func__);
    89	
    90		return 0;
    91	}
    92	
    93	static irqreturn_t msc313e_timer_clkevt_irq(int irq, void *dev_id)
    94	{
    95		struct clock_event_device *evt = dev_id;
    96	
    97		evt->event_handler(evt);
    98	
    99		return IRQ_HANDLED;
   100	}
   101	
   102	static u64 msc313e_timer_read(struct clocksource *cs)
   103	{
   104		u64 result = 0;
   105		u16 low;
   106		u16 high;
   107	
   108		low  = readw(msc313e_clksrc + REG_COUNTER_LOW);
   109		high = readw(msc313e_clksrc + REG_COUNTER_HIGH);
   110	
   111		result = (high << 16 ) | low;
   112		return result & cs->mask;
   113	}
   114	
   115	static unsigned long msc313e_read_delay_timer_read(void)
   116	{
   117		unsigned long result;
   118	
   119		result = readw(msc313e_delay->base + REG_COUNTER_LOW);
   120		result |= readw(msc313e_delay->base + REG_COUNTER_HIGH) << 16;
   121	
   122		return result;
   123	}
   124	
   125	static u64 msc313e_timer_sched_clock_read(void)
   126	{
   127		u64 result;
   128	
   129		result = readw(msc313e_clksrc + REG_COUNTER_LOW);
   130		result |= readw(msc313e_clksrc + REG_COUNTER_HIGH) << 16;
   131	
   132		return result;
   133	}
   134	
   135	static int __init msc313e_clkevt_init(struct device_node *np)
   136	{
   137		int ret;
   138	
   139		msc313e_clkevt = kzalloc(sizeof(struct timer_of), GFP_KERNEL);
   140		if (!msc313e_clkevt)
   141			return -ENOMEM;
   142	
   143		msc313e_clkevt->flags = TIMER_OF_IRQ | TIMER_OF_CLOCK | TIMER_OF_BASE,
   144		msc313e_clkevt->clkevt.name = TIMER_NAME,
   145		msc313e_clkevt->clkevt.rating = 300,
   146		msc313e_clkevt->clkevt.features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT;
   147		msc313e_clkevt->clkevt.set_state_shutdown = msc313e_timer_clkevt_shutdown;
   148		msc313e_clkevt->clkevt.set_state_periodic = msc313e_timer_set_periodic;
   149		msc313e_clkevt->clkevt.set_state_oneshot = msc313e_timer_clkevt_set_oneshot;
   150		msc313e_clkevt->clkevt.tick_resume = msc313e_timer_clkevt_shutdown;
   151		msc313e_clkevt->clkevt.set_next_event = msc313e_timer_clkevt_next_event;
   152		msc313e_clkevt->clkevt.cpumask = cpu_possible_mask;
   153		msc313e_clkevt->of_irq.handler = msc313e_timer_clkevt_irq;
   154		msc313e_clkevt->of_irq.flags = IRQF_TIMER | IRQF_IRQPOLL;
   155	
   156		ret = timer_of_init(np, msc313e_clkevt);
   157		if (ret)
   158			return ret;
   159	
   160		clockevents_config_and_register(&msc313e_clkevt->clkevt, timer_of_rate(msc313e_clkevt),
   161						TIMER_SYNC_TICKS, 0xffffffff);
   162		return 0;
   163	}
   164	
   165	static int __init msc313e_clksrc_init(struct device_node *np)
   166	{
   167		struct timer_of to = { 0 };
   168		int ret;
   169		u16 reg;
   170	
   171		to.flags = TIMER_OF_BASE | TIMER_OF_CLOCK;
   172		ret = timer_of_init(np, &to);
   173		if (ret)
   174			return ret;
   175	
   176		msc313e_clksrc = timer_of_base(&to);
   177		reg = readw(msc313e_clksrc + REG_CTRL);
   178		reg |= CTRL_ENABLE;
   179		writew(reg, msc313e_clksrc + REG_CTRL);
   180	
   181		sched_clock_register(msc313e_timer_sched_clock_read, 32, timer_of_rate(&to));
   182		return clocksource_mmio_init(timer_of_base(&to), TIMER_NAME, timer_of_rate(&to), 300, 32,
   183					     msc313e_timer_read);
   184	}
   185	
   186	static int __init msc313e_delay_init(struct device_node *np)
   187	{
   188		struct timer_of to = { 0 };
   189		int ret;
   190		u16 reg;
   191	
   192		to.flags = TIMER_OF_BASE | TIMER_OF_CLOCK;
   193		ret = timer_of_init(np, &to);
   194		if (ret)
   195			return ret;
   196	
   197		msc313e_delay = kzalloc(sizeof(struct msc313e_delay), GFP_KERNEL);
   198		if (!msc313e_delay)
   199			return -ENOMEM;
   200	
   201		msc313e_delay->base = timer_of_base(&to);
   202		msc313e_delay->delay.read_current_timer = msc313e_read_delay_timer_read;
   203		msc313e_delay->delay.freq = timer_of_rate(&to);
   204	
   205		reg = readw(msc313e_delay->base + REG_CTRL);
   206		reg |= CTRL_ENABLE;
   207		writew(reg, msc313e_delay->base + REG_CTRL);
   208	
 > 209		register_current_timer_delay(&msc313e_delay->delay);
   210	
   211		return 0;
   212	}
   213	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 71104 bytes --]

             reply	other threads:[~2021-10-30 20:44 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-30 20:44 kernel test robot [this message]
2021-10-30 20:44 ` [chenxing:rperier-timer 14/16] drivers/clocksource/timer-msc313e.c:44:28: error: field 'delay' has incomplete type kernel test robot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202110310455.FbsMcmr3-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=kbuild-all@lists.01.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.