Răsfoiți Sursa

Merge branch 'bugfix/fix_esp32h2_efuse_get_ext_mac_v4.4' into 'release/v4.4'

efuse_table_gen: Fixes wrong joining fields with omitted names (v4.4)

See merge request espressif/esp-idf!15735
Jiang Jiang Jian 4 ani în urmă
părinte
comite
a89ff2677b

+ 3 - 1
components/efuse/efuse_table_gen.py

@@ -98,9 +98,11 @@ class FuseTable(list):
         # fill group
         names = [p.field_name for p in res]
         duplicates = set(n for n in names if names.count(n) > 1)
-        if len(duplicates) != 0:
+        for dname in duplicates:
             i_count = 0
             for p in res:
+                if p.field_name != dname:
+                    continue
                 if len(duplicates.intersection([p.field_name])) != 0:
                     p.group = str(i_count)
                     i_count += 1

+ 5 - 5
components/efuse/esp32h2/esp_efuse_table.c

@@ -9,7 +9,7 @@
 #include <assert.h>
 #include "esp_efuse_table.h"
 
-// md5_digest_table a007943ae37fe41884a23d505a6e7dbb
+// md5_digest_table 6aaac59bd3f6d31bea4aef43b1f0d78a
 // This file was generated from the file esp_efuse_table.csv. DO NOT CHANGE THIS FILE MANUALLY.
 // If you want to change some fields, you need to change esp_efuse_table.csv file
 // then run `efuse_common_table` or `efuse_custom_table` command it will generate this file.
@@ -349,8 +349,8 @@ static const esp_efuse_desc_t MAC_FACTORY[] = {
 };
 
 static const esp_efuse_desc_t MAC_EXT[] = {
-    {EFUSE_BLK1, 123, 8}, 	 // Factory MAC addr [6],
-    {EFUSE_BLK1, 131, 8}, 	 // Factory MAC addr [7],
+    {EFUSE_BLK1, 123, 8}, 	 // Extend MAC addr [0],
+    {EFUSE_BLK1, 131, 8}, 	 // Extend MAC addr [1],
 };
 
 static const esp_efuse_desc_t SPI_PAD_CONFIG_CLK[] = {
@@ -913,8 +913,8 @@ const esp_efuse_desc_t* ESP_EFUSE_MAC_FACTORY[] = {
 };
 
 const esp_efuse_desc_t* ESP_EFUSE_MAC_EXT[] = {
-    &MAC_EXT[6],    		// Factory MAC addr [6]
-    &MAC_EXT[7],    		// Factory MAC addr [7]
+    &MAC_EXT[0],    		// Extend MAC addr [0]
+    &MAC_EXT[1],    		// Extend MAC addr [1]
     NULL
 };
 

+ 2 - 2
components/efuse/esp32h2/esp_efuse_table.csv

@@ -115,8 +115,8 @@
     ,                                     EFUSE_BLK1,   16,    8,     Factory MAC addr [3]
     ,                                     EFUSE_BLK1,    8,    8,     Factory MAC addr [4]
     ,                                     EFUSE_BLK1,    0,    8,     Factory MAC addr [5]
-    MAC_EXT,                              EFUSE_BLK1,  123,    8,     Factory MAC addr [6]
-    ,                                     EFUSE_BLK1,  131,    8,     Factory MAC addr [7]
+    MAC_EXT,                              EFUSE_BLK1,  123,    8,     Extend MAC addr [0]
+    ,                                     EFUSE_BLK1,  131,    8,     Extend MAC addr [1]
     SPI_PAD_CONFIG_CLK,                   EFUSE_BLK1,   48,    6,     SPI_PAD_configure CLK
     SPI_PAD_CONFIG_Q_D1,                  EFUSE_BLK1,   54,    6,     SPI_PAD_configure Q(D1)
     SPI_PAD_CONFIG_D_D0,                  EFUSE_BLK1,   60,    6,     SPI_PAD_configure D(D0)

+ 1 - 1
components/efuse/esp32h2/include/esp_efuse_table.h

@@ -9,7 +9,7 @@ extern "C" {
 #endif
 
 
-// md5_digest_table a007943ae37fe41884a23d505a6e7dbb
+// md5_digest_table 6aaac59bd3f6d31bea4aef43b1f0d78a
 // This file was generated from the file esp_efuse_table.csv. DO NOT CHANGE THIS FILE MANUALLY.
 // If you want to change some fields, you need to change esp_efuse_table.csv file
 // then run `efuse_common_table` or `efuse_custom_table` command it will generate this file.

+ 67 - 0
components/efuse/test_efuse_host/efuse_tests.py

@@ -454,6 +454,73 @@ name2.F1,                EFUSE_BLK2,                     22,
         with self.assertRaisesRegex(efuse_table_gen.InputError, 'name2 is not found'):
             t.verify()
 
+    def test_two_fields_with_lists(self):
+        csv = """
+MAC_FACTORY,                          EFUSE_BLK1,   40,    8,     Factory MAC addr [0]
+,                                     EFUSE_BLK1,   32,    8,     Factory MAC addr [1]
+,                                     EFUSE_BLK1,   24,    8,     Factory MAC addr [2]
+,                                     EFUSE_BLK1,   16,    8,     Factory MAC addr [3]
+,                                     EFUSE_BLK1,    8,    8,     Factory MAC addr [4]
+,                                     EFUSE_BLK1,    0,    8,     Factory MAC addr [5]
+MAC_EXT,                              EFUSE_BLK1,  123,    8,     Extend MAC addr [0]
+,                                     EFUSE_BLK1,  131,    8,     Extend MAC addr [1]
+                """
+        t = efuse_table_gen.FuseTable.from_csv(csv)
+        t.verify()
+
+        self.assertEqual(t[0].field_name, 'MAC_FACTORY')
+        self.assertEqual(t[0].group, str(0))
+        self.assertEqual(t[1].field_name, 'MAC_FACTORY')
+        self.assertEqual(t[1].group, str(1))
+        self.assertEqual(t[2].field_name, 'MAC_FACTORY')
+        self.assertEqual(t[2].group, str(2))
+        self.assertEqual(t[3].field_name, 'MAC_FACTORY')
+        self.assertEqual(t[3].group, str(3))
+        self.assertEqual(t[4].field_name, 'MAC_FACTORY')
+        self.assertEqual(t[4].group, str(4))
+        self.assertEqual(t[5].field_name, 'MAC_FACTORY')
+        self.assertEqual(t[5].group, str(5))
+
+        self.assertEqual(t[6].field_name, 'MAC_EXT')
+        self.assertEqual(t[6].group, str(0))
+        self.assertEqual(t[7].field_name, 'MAC_EXT')
+        self.assertEqual(t[7].group, str(1))
+
+    def test_two_fields_with_lists_and_field_between(self):
+        csv = """
+MAC_FACTORY,                          EFUSE_BLK1,   40,    8,     Factory MAC addr [0]
+,                                     EFUSE_BLK1,   32,    8,     Factory MAC addr [1]
+,                                     EFUSE_BLK1,   24,    8,     Factory MAC addr [2]
+,                                     EFUSE_BLK1,   16,    8,     Factory MAC addr [3]
+,                                     EFUSE_BLK1,    8,    8,     Factory MAC addr [4]
+,                                     EFUSE_BLK1,    0,    8,     Factory MAC addr [5]
+name2,                                EFUSE_BLK3,    5,    1,     comment
+MAC_EXT,                              EFUSE_BLK1,  123,    8,     Extend MAC addr [0]
+,                                     EFUSE_BLK1,  131,    8,     Extend MAC addr [1]
+                """
+        t = efuse_table_gen.FuseTable.from_csv(csv)
+        t.verify()
+
+        self.assertEqual(t[0].field_name, 'MAC_FACTORY')
+        self.assertEqual(t[0].group, str(0))
+        self.assertEqual(t[1].field_name, 'MAC_FACTORY')
+        self.assertEqual(t[1].group, str(1))
+        self.assertEqual(t[2].field_name, 'MAC_FACTORY')
+        self.assertEqual(t[2].group, str(2))
+        self.assertEqual(t[3].field_name, 'MAC_FACTORY')
+        self.assertEqual(t[3].group, str(3))
+        self.assertEqual(t[4].field_name, 'MAC_FACTORY')
+        self.assertEqual(t[4].group, str(4))
+        self.assertEqual(t[5].field_name, 'MAC_FACTORY')
+        self.assertEqual(t[5].group, str(5))
+
+        self.assertEqual(t[6].field_name, 'name2')
+
+        self.assertEqual(t[7].field_name, 'MAC_EXT')
+        self.assertEqual(t[7].group, str(0))
+        self.assertEqual(t[8].field_name, 'MAC_EXT')
+        self.assertEqual(t[8].group, str(1))
+
 
 if __name__ == '__main__':
     unittest.main()

+ 4 - 2
components/esp_hw_support/mac_addr.c

@@ -75,8 +75,9 @@ esp_err_t esp_efuse_mac_get_custom(uint8_t *mac)
         return ESP_ERR_INVALID_MAC;
     }
 #if (ESP_MAC_ADDRESS_LEN == 8)
-    err = esp_efuse_read_field_blob(ESP_EFUSE_MAC_EXT, &mac[6], ESP_MAC_ADDRESS_LEN - size);
+    err = esp_efuse_read_field_blob(ESP_EFUSE_MAC_EXT, &mac[6], ESP_MAC_ADDRESS_LEN * 8 - size_bits);
     if (err != ESP_OK) {
+        ESP_LOGE(TAG, "Reading MAC_EXT failed, error=%d", err);
         return err;
     }
 #endif
@@ -111,8 +112,9 @@ esp_err_t esp_efuse_mac_get_default(uint8_t *mac)
         return err;
     }
 #if (ESP_MAC_ADDRESS_LEN == 8)
-    err = esp_efuse_read_field_blob(ESP_EFUSE_MAC_EXT, &mac[6], ESP_MAC_ADDRESS_LEN - size_bits / 8);
+    err = esp_efuse_read_field_blob(ESP_EFUSE_MAC_EXT, &mac[6], ESP_MAC_ADDRESS_LEN * 8 - size_bits);
     if (err != ESP_OK) {
+        ESP_LOGE(TAG, "Reading MAC_EXT failed, error=%d", err);
         return err;
     }
 #endif