Subject: linux-next: manual merge of the char-misc tree with the drivers-x86 tree

From: Stephen Rothwell <[email-masked]>
Date: Mon, 11 Jan 2021 13:08:51 +1100

Hi all,

Today's linux-next merge of the char-misc tree got conflicts in:

  include/linux/mod_devicetable.h
  scripts/mod/devicetable-offsets.c
  scripts/mod/file2alias.c

between commit:

  eb0e90a82098 ("platform/surface: aggregator: Add dedicated bus and device type")

from the drivers-x86 tree and commits:

  9326eecd9365 ("fpga: dfl: move dfl_device_id to mod_devicetable.h")
  4a224acec597 ("fpga: dfl: add dfl bus support to MODULE_DEVICE_TABLE()")

from the char-misc tree.

I fixed it up (see below) and can carry the fix as necessary. This
is now fixed as far as linux-next is concerned, but any non trivial
conflicts should be mentioned to your upstream maintainer when your tree
is submitted for merging.  You may also want to consider cooperating
with the maintainer of the conflicting tree to minimise any particularly
complex conflicts.

-- 
Cheers,
Stephen Rothwell

diff --cc include/linux/mod_devicetable.h
index 935060955152,b8dae34eca10..000000000000
--- a/include/linux/mod_devicetable.h
+++ b/include/linux/mod_devicetable.h
@@@ -846,22 -846,28 +846,46 @@@ struct auxiliary_device_id 
  	kernel_ulong_t driver_data;
  };
  
 +/* Surface System Aggregator Module */
 +
 +#define SSAM_MATCH_TARGET	0x1
 +#define SSAM_MATCH_INSTANCE	0x2
 +#define SSAM_MATCH_FUNCTION	0x4
 +
 +struct ssam_device_id {
 +	__u8 match_flags;
 +
 +	__u8 domain;
 +	__u8 category;
 +	__u8 target;
 +	__u8 instance;
 +	__u8 function;
 +
 +	kernel_ulong_t driver_data;
 +};
 +
+ /*
+  * DFL (Device Feature List)
+  *
+  * DFL defines a linked list of feature headers within the device MMIO space to
+  * provide an extensible way of adding features. Software can walk through these
+  * predefined data structures to enumerate features. It is now used in the FPGA.
+  * See Documentation/fpga/dfl.rst for more information.
+  *
+  * The dfl bus type is introduced to match the individual feature devices (dfl
+  * devices) for specific dfl drivers.
+  */
+ 
+ /**
+  * struct dfl_device_id -  dfl device identifier
+  * @type: DFL FIU type of the device. See enum dfl_id_type.
+  * @feature_id: feature identifier local to its DFL FIU type.
+  * @driver_data: driver specific data.
+  */
+ struct dfl_device_id {
+ 	__u16 type;
+ 	__u16 feature_id;
+ 	kernel_ulong_t driver_data;
+ };
+ 
  #endif /* LINUX_MOD_DEVICETABLE_H */
diff --cc scripts/mod/devicetable-offsets.c
index f078eeb0a961,1b14f3cde4e5..000000000000
--- a/scripts/mod/devicetable-offsets.c
+++ b/scripts/mod/devicetable-offsets.c
@@@ -246,13 -246,9 +246,17 @@@ int main(void
  	DEVID(auxiliary_device_id);
  	DEVID_FIELD(auxiliary_device_id, name);
  
 +	DEVID(ssam_device_id);
 +	DEVID_FIELD(ssam_device_id, match_flags);
 +	DEVID_FIELD(ssam_device_id, domain);
 +	DEVID_FIELD(ssam_device_id, category);
 +	DEVID_FIELD(ssam_device_id, target);
 +	DEVID_FIELD(ssam_device_id, instance);
 +	DEVID_FIELD(ssam_device_id, function);
 +
+ 	DEVID(dfl_device_id);
+ 	DEVID_FIELD(dfl_device_id, type);
+ 	DEVID_FIELD(dfl_device_id, feature_id);
+ 
  	return 0;
  }
diff --cc scripts/mod/file2alias.c
index d21d2871387b,7ebabeb1e9c9..000000000000
--- a/scripts/mod/file2alias.c
+++ b/scripts/mod/file2alias.c
@@@ -1375,28 -1375,18 +1375,40 @@@ static int do_auxiliary_entry(const cha
  	return 1;
  }
  
 +/*
 + * Looks like: ssam:dNcNtNiNfN
 + *
 + * N is exactly 2 digits, where each is an upper-case hex digit.
 + */
 +static int do_ssam_entry(const char *filename, void *symval, char *alias)
 +{
 +	DEF_FIELD(symval, ssam_device_id, match_flags);
 +	DEF_FIELD(symval, ssam_device_id, domain);
 +	DEF_FIELD(symval, ssam_device_id, category);
 +	DEF_FIELD(symval, ssam_device_id, target);
 +	DEF_FIELD(symval, ssam_device_id, instance);
 +	DEF_FIELD(symval, ssam_device_id, function);
 +
 +	sprintf(alias, "ssam:d%02Xc%02X", domain, category);
 +	ADD(alias, "t", match_flags & SSAM_MATCH_TARGET, target);
 +	ADD(alias, "i", match_flags & SSAM_MATCH_INSTANCE, instance);
 +	ADD(alias, "f", match_flags & SSAM_MATCH_FUNCTION, function);
 +
 +	return 1;
 +}
 +
+ /* Looks like: dfl:tNfN */
+ static int do_dfl_entry(const char *filename, void *symval, char *alias)
+ {
+ 	DEF_FIELD(symval, dfl_device_id, type);
+ 	DEF_FIELD(symval, dfl_device_id, feature_id);
+ 
+ 	sprintf(alias, "dfl:t%04Xf%04X", type, feature_id);
+ 
+ 	add_wildcard(alias);
+ 	return 1;
+ }
+ 
  /* Does namelen bytes of name exactly match the symbol? */
  static bool sym_is(const char *name, unsigned namelen, const char *symbol)
  {
@@@ -1472,7 -1462,7 +1484,8 @@@ static const struct devtable devtable[
  	{"wmi", SIZE_wmi_device_id, do_wmi_entry},
  	{"mhi", SIZE_mhi_device_id, do_mhi_entry},
  	{"auxiliary", SIZE_auxiliary_device_id, do_auxiliary_entry},
 +	{"ssam", SIZE_ssam_device_id, do_ssam_entry},
+ 	{"dfl", SIZE_dfl_device_id, do_dfl_entry},
  };
  
  /* Create MODULE_ALIAS() statements.