[alsa-devel] [sound:topic/asus-e100h-4.10 18/26] drivers/clk/x86/clk-pmc-atom.c:44:16: error: field 'hw' has incomplete type

kbuild test robot fengguang.wu at intel.com
Thu Feb 23 21:20:52 CET 2017


tree:   https://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git topic/asus-e100h-4.10
head:   c86c0067e6111324a39f523c250c8b1089b1d822
commit: 19a80107e5cf1d2d02b678bb086f305a05e4f692 [18/26] clk: x86: Add Atom PMC platform clocks
config: i386-randconfig-i1-02231015 (attached as .config)
compiler: gcc-4.8 (Debian 4.8.4-1) 4.8.4
reproduce:
        git checkout 19a80107e5cf1d2d02b678bb086f305a05e4f692
        # save the attached .config to linux build tree
        make ARCH=i386 

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

>> drivers/clk/x86/clk-pmc-atom.c:44:16: error: field 'hw' has incomplete type
     struct clk_hw hw;
                   ^
   In file included from include/asm-generic/bug.h:13:0,
                    from arch/x86/include/asm/bug.h:35,
                    from include/linux/bug.h:4,
                    from include/linux/io.h:23,
                    from include/linux/clk-provider.h:14,
                    from drivers/clk/x86/clk-pmc-atom.c:17:
   drivers/clk/x86/clk-pmc-atom.c: In function 'plt_clk_set_parent':
   include/linux/kernel.h:850:48: warning: initialization from incompatible pointer type [enabled by default]
     const typeof( ((type *)0)->member ) *__mptr = (ptr); \
                                                   ^
   drivers/clk/x86/clk-pmc-atom.c:51:25: note: in expansion of macro 'container_of'
    #define to_clk_plt(_hw) container_of(_hw, struct clk_plt, hw)
                            ^
   drivers/clk/x86/clk-pmc-atom.c:113:24: note: in expansion of macro 'to_clk_plt'
     struct clk_plt *clk = to_clk_plt(hw);
                           ^
   include/linux/kernel.h:850:48: warning: (near initialization for 'clk') [enabled by default]
     const typeof( ((type *)0)->member ) *__mptr = (ptr); \
                                                   ^
   drivers/clk/x86/clk-pmc-atom.c:51:25: note: in expansion of macro 'container_of'
    #define to_clk_plt(_hw) container_of(_hw, struct clk_plt, hw)
                            ^
   drivers/clk/x86/clk-pmc-atom.c:113:24: note: in expansion of macro 'to_clk_plt'
     struct clk_plt *clk = to_clk_plt(hw);
                           ^
   drivers/clk/x86/clk-pmc-atom.c: In function 'plt_clk_get_parent':
   include/linux/kernel.h:850:48: warning: initialization from incompatible pointer type [enabled by default]
     const typeof( ((type *)0)->member ) *__mptr = (ptr); \
                                                   ^
   drivers/clk/x86/clk-pmc-atom.c:51:25: note: in expansion of macro 'container_of'
    #define to_clk_plt(_hw) container_of(_hw, struct clk_plt, hw)
                            ^
   drivers/clk/x86/clk-pmc-atom.c:122:24: note: in expansion of macro 'to_clk_plt'
     struct clk_plt *clk = to_clk_plt(hw);
                           ^
   include/linux/kernel.h:850:48: warning: (near initialization for 'clk') [enabled by default]
     const typeof( ((type *)0)->member ) *__mptr = (ptr); \
                                                   ^
   drivers/clk/x86/clk-pmc-atom.c:51:25: note: in expansion of macro 'container_of'
    #define to_clk_plt(_hw) container_of(_hw, struct clk_plt, hw)
                            ^
   drivers/clk/x86/clk-pmc-atom.c:122:24: note: in expansion of macro 'to_clk_plt'
     struct clk_plt *clk = to_clk_plt(hw);
                           ^
   drivers/clk/x86/clk-pmc-atom.c: In function 'plt_clk_enable':
   include/linux/kernel.h:850:48: warning: initialization from incompatible pointer type [enabled by default]
     const typeof( ((type *)0)->member ) *__mptr = (ptr); \
                                                   ^
   drivers/clk/x86/clk-pmc-atom.c:51:25: note: in expansion of macro 'container_of'
    #define to_clk_plt(_hw) container_of(_hw, struct clk_plt, hw)
                            ^
   drivers/clk/x86/clk-pmc-atom.c:132:24: note: in expansion of macro 'to_clk_plt'
     struct clk_plt *clk = to_clk_plt(hw);
                           ^
   include/linux/kernel.h:850:48: warning: (near initialization for 'clk') [enabled by default]
     const typeof( ((type *)0)->member ) *__mptr = (ptr); \
                                                   ^
   drivers/clk/x86/clk-pmc-atom.c:51:25: note: in expansion of macro 'container_of'
    #define to_clk_plt(_hw) container_of(_hw, struct clk_plt, hw)
                            ^
   drivers/clk/x86/clk-pmc-atom.c:132:24: note: in expansion of macro 'to_clk_plt'
     struct clk_plt *clk = to_clk_plt(hw);
                           ^
   drivers/clk/x86/clk-pmc-atom.c: In function 'plt_clk_disable':
   include/linux/kernel.h:850:48: warning: initialization from incompatible pointer type [enabled by default]
     const typeof( ((type *)0)->member ) *__mptr = (ptr); \
                                                   ^
   drivers/clk/x86/clk-pmc-atom.c:51:25: note: in expansion of macro 'container_of'
    #define to_clk_plt(_hw) container_of(_hw, struct clk_plt, hw)
                            ^
   drivers/clk/x86/clk-pmc-atom.c:141:24: note: in expansion of macro 'to_clk_plt'
     struct clk_plt *clk = to_clk_plt(hw);
                           ^
   include/linux/kernel.h:850:48: warning: (near initialization for 'clk') [enabled by default]
     const typeof( ((type *)0)->member ) *__mptr = (ptr); \
                                                   ^
   drivers/clk/x86/clk-pmc-atom.c:51:25: note: in expansion of macro 'container_of'
    #define to_clk_plt(_hw) container_of(_hw, struct clk_plt, hw)
                            ^
   drivers/clk/x86/clk-pmc-atom.c:141:24: note: in expansion of macro 'to_clk_plt'
     struct clk_plt *clk = to_clk_plt(hw);
                           ^
   drivers/clk/x86/clk-pmc-atom.c: In function 'plt_clk_is_enabled':
   include/linux/kernel.h:850:48: warning: initialization from incompatible pointer type [enabled by default]
     const typeof( ((type *)0)->member ) *__mptr = (ptr); \
                                                   ^
   drivers/clk/x86/clk-pmc-atom.c:51:25: note: in expansion of macro 'container_of'
    #define to_clk_plt(_hw) container_of(_hw, struct clk_plt, hw)
                            ^
   drivers/clk/x86/clk-pmc-atom.c:148:24: note: in expansion of macro 'to_clk_plt'
     struct clk_plt *clk = to_clk_plt(hw);
                           ^
   include/linux/kernel.h:850:48: warning: (near initialization for 'clk') [enabled by default]
     const typeof( ((type *)0)->member ) *__mptr = (ptr); \
                                                   ^
   drivers/clk/x86/clk-pmc-atom.c:51:25: note: in expansion of macro 'container_of'
    #define to_clk_plt(_hw) container_of(_hw, struct clk_plt, hw)
                            ^
   drivers/clk/x86/clk-pmc-atom.c:148:24: note: in expansion of macro 'to_clk_plt'
     struct clk_plt *clk = to_clk_plt(hw);
                           ^
   drivers/clk/x86/clk-pmc-atom.c: At top level:
>> drivers/clk/x86/clk-pmc-atom.c:156:21: error: variable 'plt_clk_ops' has initializer but incomplete type
    static const struct clk_ops plt_clk_ops = {
                        ^
>> drivers/clk/x86/clk-pmc-atom.c:157:2: error: unknown field 'enable' specified in initializer
     .enable = plt_clk_enable,
     ^
>> drivers/clk/x86/clk-pmc-atom.c:157:2: warning: excess elements in struct initializer [enabled by default]
   drivers/clk/x86/clk-pmc-atom.c:157:2: warning: (near initialization for 'plt_clk_ops') [enabled by default]
>> drivers/clk/x86/clk-pmc-atom.c:158:2: error: unknown field 'disable' specified in initializer
     .disable = plt_clk_disable,
     ^
   drivers/clk/x86/clk-pmc-atom.c:158:2: warning: excess elements in struct initializer [enabled by default]
   drivers/clk/x86/clk-pmc-atom.c:158:2: warning: (near initialization for 'plt_clk_ops') [enabled by default]
>> drivers/clk/x86/clk-pmc-atom.c:159:2: error: unknown field 'is_enabled' specified in initializer
     .is_enabled = plt_clk_is_enabled,
     ^
   drivers/clk/x86/clk-pmc-atom.c:159:2: warning: excess elements in struct initializer [enabled by default]
   drivers/clk/x86/clk-pmc-atom.c:159:2: warning: (near initialization for 'plt_clk_ops') [enabled by default]
>> drivers/clk/x86/clk-pmc-atom.c:160:2: error: unknown field 'get_parent' specified in initializer
     .get_parent = plt_clk_get_parent,
     ^
   drivers/clk/x86/clk-pmc-atom.c:160:2: warning: excess elements in struct initializer [enabled by default]
   drivers/clk/x86/clk-pmc-atom.c:160:2: warning: (near initialization for 'plt_clk_ops') [enabled by default]
>> drivers/clk/x86/clk-pmc-atom.c:161:2: error: unknown field 'set_parent' specified in initializer
     .set_parent = plt_clk_set_parent,
     ^
   drivers/clk/x86/clk-pmc-atom.c:161:2: warning: excess elements in struct initializer [enabled by default]
   drivers/clk/x86/clk-pmc-atom.c:161:2: warning: (near initialization for 'plt_clk_ops') [enabled by default]
>> drivers/clk/x86/clk-pmc-atom.c:162:2: error: unknown field 'determine_rate' specified in initializer
     .determine_rate = __clk_mux_determine_rate,
     ^
>> drivers/clk/x86/clk-pmc-atom.c:162:20: error: '__clk_mux_determine_rate' undeclared here (not in a function)
     .determine_rate = __clk_mux_determine_rate,
                       ^
   drivers/clk/x86/clk-pmc-atom.c:162:2: warning: excess elements in struct initializer [enabled by default]
     .determine_rate = __clk_mux_determine_rate,
     ^
   drivers/clk/x86/clk-pmc-atom.c:162:2: warning: (near initialization for 'plt_clk_ops') [enabled by default]
   drivers/clk/x86/clk-pmc-atom.c: In function 'plt_clk_register':
>> drivers/clk/x86/clk-pmc-atom.c:171:23: error: storage size of 'init' isn't known
     struct clk_init_data init;
                          ^
>> drivers/clk/x86/clk-pmc-atom.c:188:2: error: implicit declaration of function 'devm_clk_hw_register' [-Werror=implicit-function-declaration]
     ret = devm_clk_hw_register(&pdev->dev, &pclk->hw);
     ^
   drivers/clk/x86/clk-pmc-atom.c:171:23: warning: unused variable 'init' [-Wunused-variable]
     struct clk_init_data init;
                          ^
   drivers/clk/x86/clk-pmc-atom.c: In function 'plt_clk_register_fixed_rate':
>> drivers/clk/x86/clk-pmc-atom.c:221:2: error: implicit declaration of function 'clk_hw_register_fixed_rate' [-Werror=implicit-function-declaration]
     pclk->clk = clk_hw_register_fixed_rate(&pdev->dev, name, parent_name,
     ^
>> drivers/clk/x86/clk-pmc-atom.c:221:12: warning: assignment makes pointer from integer without a cast [enabled by default]
     pclk->clk = clk_hw_register_fixed_rate(&pdev->dev, name, parent_name,
               ^
>> drivers/clk/x86/clk-pmc-atom.c:228:3: error: implicit declaration of function 'clk_hw_unregister_fixed_rate' [-Werror=implicit-function-declaration]
      clk_hw_unregister_fixed_rate(pclk->clk);
      ^
   cc1: some warnings being treated as errors

vim +/hw +44 drivers/clk/x86/clk-pmc-atom.c

    38	struct clk_plt_fixed {
    39		struct clk_hw *clk;
    40		struct clk_lookup *lookup;
    41	};
    42	
    43	struct clk_plt {
  > 44		struct clk_hw hw;
    45		void __iomem *reg;
    46		struct clk_lookup *lookup;
    47		/* protect access to PMC registers */
    48		spinlock_t lock;
    49	};
    50	
  > 51	#define to_clk_plt(_hw) container_of(_hw, struct clk_plt, hw)
    52	
    53	struct clk_plt_data {
    54		struct clk_plt_fixed **parents;
    55		u8 nparents;
    56		struct clk_plt *clks[PMC_CLK_NUM];
    57	};
    58	
    59	/* Return an index in parent table */
    60	static inline int plt_reg_to_parent(int reg)
    61	{
    62		switch (reg & PMC_MASK_CLK_FREQ) {
    63		default:
    64		case PMC_CLK_FREQ_XTAL:
    65			return 0;
    66		case PMC_CLK_FREQ_PLL:
    67			return 1;
    68		}
    69	}
    70	
    71	/* Return clk index of parent */
    72	static inline int plt_parent_to_reg(int index)
    73	{
    74		switch (index) {
    75		default:
    76		case 0:
    77			return PMC_CLK_FREQ_XTAL;
    78		case 1:
    79			return PMC_CLK_FREQ_PLL;
    80		}
    81	}
    82	
    83	/* Abstract status in simpler enabled/disabled value */
    84	static inline int plt_reg_to_enabled(int reg)
    85	{
    86		switch (reg & PMC_MASK_CLK_CTL) {
    87		case PMC_CLK_CTL_GATED_ON_D3:
    88		case PMC_CLK_CTL_FORCE_ON:
    89			return 1;	/* enabled */
    90		case PMC_CLK_CTL_FORCE_OFF:
    91		case PMC_CLK_CTL_RESERVED:
    92		default:
    93			return 0;	/* disabled */
    94		}
    95	}
    96	
    97	static void plt_clk_reg_update(struct clk_plt *clk, u32 mask, u32 val)
    98	{
    99		u32 tmp;
   100		unsigned long flags;
   101	
   102		spin_lock_irqsave(&clk->lock, flags);
   103	
   104		tmp = readl(clk->reg);
   105		tmp = (tmp & ~mask) | (val & mask);
   106		writel(tmp, clk->reg);
   107	
   108		spin_unlock_irqrestore(&clk->lock, flags);
   109	}
   110	
   111	static int plt_clk_set_parent(struct clk_hw *hw, u8 index)
   112	{
   113		struct clk_plt *clk = to_clk_plt(hw);
   114	
   115		plt_clk_reg_update(clk, PMC_MASK_CLK_FREQ, plt_parent_to_reg(index));
   116	
   117		return 0;
   118	}
   119	
   120	static u8 plt_clk_get_parent(struct clk_hw *hw)
   121	{
   122		struct clk_plt *clk = to_clk_plt(hw);
   123		u32 value;
   124	
   125		value = readl(clk->reg);
   126	
   127		return plt_reg_to_parent(value);
   128	}
   129	
   130	static int plt_clk_enable(struct clk_hw *hw)
   131	{
   132		struct clk_plt *clk = to_clk_plt(hw);
   133	
   134		plt_clk_reg_update(clk, PMC_MASK_CLK_CTL, PMC_CLK_CTL_FORCE_ON);
   135	
   136		return 0;
   137	}
   138	
   139	static void plt_clk_disable(struct clk_hw *hw)
   140	{
   141		struct clk_plt *clk = to_clk_plt(hw);
   142	
   143		plt_clk_reg_update(clk, PMC_MASK_CLK_CTL, PMC_CLK_CTL_FORCE_OFF);
   144	}
   145	
   146	static int plt_clk_is_enabled(struct clk_hw *hw)
   147	{
 > 148		struct clk_plt *clk = to_clk_plt(hw);
   149		u32 value;
   150	
   151		value = readl(clk->reg);
   152	
   153		return plt_reg_to_enabled(value);
   154	}
   155	
 > 156	static const struct clk_ops plt_clk_ops = {
 > 157		.enable = plt_clk_enable,
 > 158		.disable = plt_clk_disable,
 > 159		.is_enabled = plt_clk_is_enabled,
 > 160		.get_parent = plt_clk_get_parent,
 > 161		.set_parent = plt_clk_set_parent,
 > 162		.determine_rate = __clk_mux_determine_rate,
   163	};
   164	
   165	static struct clk_plt *plt_clk_register(struct platform_device *pdev, int id,
   166						void __iomem *base,
   167						const char **parent_names,
   168						int num_parents)
   169	{
   170		struct clk_plt *pclk;
 > 171		struct clk_init_data init;
   172		int ret;
   173	
   174		pclk = devm_kzalloc(&pdev->dev, sizeof(*pclk), GFP_KERNEL);
   175		if (!pclk)
   176			return ERR_PTR(-ENOMEM);
   177	
   178		init.name =  kasprintf(GFP_KERNEL, "%s_%d", PLT_CLK_NAME_BASE, id);
   179		init.ops = &plt_clk_ops;
   180		init.flags = 0;
   181		init.parent_names = parent_names;
   182		init.num_parents = num_parents;
   183	
   184		pclk->hw.init = &init;
   185		pclk->reg = base + PMC_CLK_CTL_OFFSET + id * PMC_CLK_CTL_SIZE;
   186		spin_lock_init(&pclk->lock);
   187	
 > 188		ret = devm_clk_hw_register(&pdev->dev, &pclk->hw);
   189		if (ret) {
   190			pclk = ERR_PTR(ret);
   191			goto err_free_init;
   192		}
   193	
   194		pclk->lookup = clkdev_hw_create(&pclk->hw, init.name, NULL);
   195		if (!pclk->lookup) {
   196			pclk = ERR_PTR(-ENOMEM);
   197			goto err_free_init;
   198		}
   199	
   200	err_free_init:
   201		kfree(init.name);
   202		return pclk;
   203	}
   204	
   205	static void plt_clk_unregister(struct clk_plt *pclk)
   206	{
   207		clkdev_drop(pclk->lookup);
   208	}
   209	
   210	static struct clk_plt_fixed *plt_clk_register_fixed_rate(struct platform_device *pdev,
   211							 const char *name,
   212							 const char *parent_name,
   213							 unsigned long fixed_rate)
   214	{
   215		struct clk_plt_fixed *pclk;
   216	
   217		pclk = devm_kzalloc(&pdev->dev, sizeof(*pclk), GFP_KERNEL);
   218		if (!pclk)
   219			return ERR_PTR(-ENOMEM);
   220	
 > 221		pclk->clk = clk_hw_register_fixed_rate(&pdev->dev, name, parent_name,
   222						       0, fixed_rate);
   223		if (IS_ERR(pclk->clk))
   224			return ERR_CAST(pclk->clk);
   225	
   226		pclk->lookup = clkdev_hw_create(pclk->clk, name, NULL);
   227		if (!pclk->lookup) {
 > 228			clk_hw_unregister_fixed_rate(pclk->clk);
   229			return ERR_PTR(-ENOMEM);
   230		}
   231	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 20189 bytes
Desc: not available
URL: <http://mailman.alsa-project.org/pipermail/alsa-devel/attachments/20170224/81f6bbda/attachment-0001.bin>


More information about the Alsa-devel mailing list