kernel: make mtd mac address increment more flexible
Allow selecting the byte on which the increment should be added. Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
		| @@ -32,7 +32,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  { |  { | ||||||
|  	struct property *pp = of_find_property(np, name, NULL); |  	struct property *pp = of_find_property(np, name, NULL); | ||||||
|   |   | ||||||
| @@ -47,6 +48,73 @@ static const void *of_get_mac_addr(struc | @@ -47,6 +48,79 @@ static const void *of_get_mac_addr(struc | ||||||
|  	return NULL; |  	return NULL; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -50,6 +50,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
| +	u32 mac_inc = 0; | +	u32 mac_inc = 0; | ||||||
| +	u8 mac[ETH_ALEN]; | +	u8 mac[ETH_ALEN]; | ||||||
| +	void *addr; | +	void *addr; | ||||||
|  | +	u32 inc_idx; | ||||||
| + | + | ||||||
| +	list = of_get_property(np, "mtd-mac-address", &size); | +	list = of_get_property(np, "mtd-mac-address", &size); | ||||||
| +	if (!list || (size != (2 * sizeof(*list)))) | +	if (!list || (size != (2 * sizeof(*list)))) | ||||||
| @@ -73,8 +74,13 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
| +	ret = mtd_read(mtd, be32_to_cpup(list), 6, &retlen, mac); | +	ret = mtd_read(mtd, be32_to_cpup(list), 6, &retlen, mac); | ||||||
| +	put_mtd_device(mtd); | +	put_mtd_device(mtd); | ||||||
| + | + | ||||||
|  | +	if (of_property_read_u32(np, "mtd-mac-address-increment-byte", &inc_idx)) | ||||||
|  | +		inc_idx = 5; | ||||||
|  | +	if (inc_idx > 5) | ||||||
|  | +		return NULL; | ||||||
|  | + | ||||||
| +	if (!of_property_read_u32(np, "mtd-mac-address-increment", &mac_inc)) | +	if (!of_property_read_u32(np, "mtd-mac-address-increment", &mac_inc)) | ||||||
| +		mac[5] += mac_inc; | +		mac[inc_idx] += mac_inc; | ||||||
| + | + | ||||||
| +	if (!is_valid_ether_addr(mac)) | +	if (!is_valid_ether_addr(mac)) | ||||||
| +		return NULL; | +		return NULL; | ||||||
| @@ -106,7 +112,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  /** |  /** | ||||||
|   * Search the device tree for the best MAC address to use.  'mac-address' is |   * Search the device tree for the best MAC address to use.  'mac-address' is | ||||||
|   * checked first, because that is supposed to contain to "most recent" MAC |   * checked first, because that is supposed to contain to "most recent" MAC | ||||||
| @@ -64,11 +132,18 @@ static const void *of_get_mac_addr(struc | @@ -64,11 +138,18 @@ static const void *of_get_mac_addr(struc | ||||||
|   * addresses.  Some older U-Boots only initialized 'local-mac-address'.  In |   * addresses.  Some older U-Boots only initialized 'local-mac-address'.  In | ||||||
|   * this case, the real MAC is in 'local-mac-address', and 'mac-address' exists |   * this case, the real MAC is in 'local-mac-address', and 'mac-address' exists | ||||||
|   * but is all zeros. |   * but is all zeros. | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Felix Fietkau
					Felix Fietkau