diff --git a/hw/top_earlgrey/data/top_earlgrey.h.tpl b/hw/top_earlgrey/data/top_earlgrey.h.tpl
index 47e7a5d..d20ca5b 100644
--- a/hw/top_earlgrey/data/top_earlgrey.h.tpl
+++ b/hw/top_earlgrey/data/top_earlgrey.h.tpl
@@ -10,46 +10,6 @@
 extern "C" {
 #endif
 
-#define PINMUX_PERIPH_INSEL_IDX_OFFSET 2
-
-// PERIPH_INSEL ranges from 0 to NUM_MIO + 2 -1}
-//  0 and 1 are tied to value 0 and 1
-#define NUM_MIO ${top["pinmux"]["num_mio"]}
-#define NUM_DIO ${sum([x["width"] if "width" in x else 1 for x in top["pinmux"]["dio"]])}
-
-<% offset = 0 %>\
-% for i, sig in enumerate(top["pinmux"]["inouts"] + top["pinmux"]["inputs"]):
-  % if sig["width"] == 1:
-#define PINMUX_${sig["name"].upper()}_IN ${offset + i}
-  % else:
-    % for j in range(sig["width"]):
-#define PINMUX_${sig["name"].upper()}_${j}_IN ${offset + i + j}
-    % endfor
-<% offset += sig["width"] %>\
-  % endif
-% endfor
-
-#define PINMUX_PERIPH_OUTSEL_IDX_OFFSET 3
-
-// PERIPH_OUTSEL ranges from 0 to NUM_MIO + 3 -1}
-// 0, 1 and 2 are tied to value 0, 1 and high-impedance
-
-## offset starts from 3 as 0, 1, 2 are prefixed value
-<% offset = 3 %>\
-#define PINMUX_VALUE_0_OUT 0
-#define PINMUX_VALUE_1_OUT 1
-#define PINMUX_VALUE_Z_OUT 2
-% for i, sig in enumerate(top["pinmux"]["inouts"] + top["pinmux"]["outputs"]):
-  % if sig["width"] == 1:
-#define PINMUX_${sig["name"].upper()}_OUT ${offset + i}
-  % else:
-    % for j in range(sig["width"]):
-#define PINMUX_${sig["name"].upper()}_${j}_OUT ${offset + i + j}
-    % endfor
-<% offset += sig["width"] %>\
-  % endif
-% endfor
-
 % for name, region in helper.modules():
 /**
  * Peripheral base address for ${name} in top ${top["name"]}.
@@ -140,6 +100,35 @@
  */
 ${helper.alert_mapping.render_declaration()}
 
+#define PINMUX_PERIPH_INSEL_IDX_OFFSET 2
+
+// PERIPH_INSEL ranges from 0 to NUM_MIO + 2 -1}
+//  0 and 1 are tied to value 0 and 1
+#define NUM_MIO ${top["pinmux"]["num_mio"]}
+#define NUM_DIO ${sum([x["width"] if "width" in x else 1 for x in top["pinmux"]["dio"]])}
+
+#define PINMUX_PERIPH_OUTSEL_IDX_OFFSET 3
+
+/**
+ * Pinmux Peripheral Input.
+ */
+${helper.pinmux_peripheral_in.render()}
+
+/**
+ * Pinmux MIO Input Selector.
+ */
+${helper.pinmux_insel.render()}
+
+/**
+ * Pinmux MIO Output.
+ */
+${helper.pinmux_mio_out.render()}
+
+/**
+ * Pinmux Peripheral Output Selector.
+ */
+${helper.pinmux_outsel.render()}
+
 // Header Extern Guard
 #ifdef __cplusplus
 }  // extern "C"
diff --git a/hw/top_earlgrey/sw/autogen/top_earlgrey.h b/hw/top_earlgrey/sw/autogen/top_earlgrey.h
index db39d92..ffcd1b3 100644
--- a/hw/top_earlgrey/sw/autogen/top_earlgrey.h
+++ b/hw/top_earlgrey/sw/autogen/top_earlgrey.h
@@ -10,87 +10,6 @@
 extern "C" {
 #endif
 
-#define PINMUX_PERIPH_INSEL_IDX_OFFSET 2
-
-// PERIPH_INSEL ranges from 0 to NUM_MIO + 2 -1}
-//  0 and 1 are tied to value 0 and 1
-#define NUM_MIO 32
-#define NUM_DIO 15
-
-#define PINMUX_GPIO_GPIO_0_IN 0
-#define PINMUX_GPIO_GPIO_1_IN 1
-#define PINMUX_GPIO_GPIO_2_IN 2
-#define PINMUX_GPIO_GPIO_3_IN 3
-#define PINMUX_GPIO_GPIO_4_IN 4
-#define PINMUX_GPIO_GPIO_5_IN 5
-#define PINMUX_GPIO_GPIO_6_IN 6
-#define PINMUX_GPIO_GPIO_7_IN 7
-#define PINMUX_GPIO_GPIO_8_IN 8
-#define PINMUX_GPIO_GPIO_9_IN 9
-#define PINMUX_GPIO_GPIO_10_IN 10
-#define PINMUX_GPIO_GPIO_11_IN 11
-#define PINMUX_GPIO_GPIO_12_IN 12
-#define PINMUX_GPIO_GPIO_13_IN 13
-#define PINMUX_GPIO_GPIO_14_IN 14
-#define PINMUX_GPIO_GPIO_15_IN 15
-#define PINMUX_GPIO_GPIO_16_IN 16
-#define PINMUX_GPIO_GPIO_17_IN 17
-#define PINMUX_GPIO_GPIO_18_IN 18
-#define PINMUX_GPIO_GPIO_19_IN 19
-#define PINMUX_GPIO_GPIO_20_IN 20
-#define PINMUX_GPIO_GPIO_21_IN 21
-#define PINMUX_GPIO_GPIO_22_IN 22
-#define PINMUX_GPIO_GPIO_23_IN 23
-#define PINMUX_GPIO_GPIO_24_IN 24
-#define PINMUX_GPIO_GPIO_25_IN 25
-#define PINMUX_GPIO_GPIO_26_IN 26
-#define PINMUX_GPIO_GPIO_27_IN 27
-#define PINMUX_GPIO_GPIO_28_IN 28
-#define PINMUX_GPIO_GPIO_29_IN 29
-#define PINMUX_GPIO_GPIO_30_IN 30
-#define PINMUX_GPIO_GPIO_31_IN 31
-
-#define PINMUX_PERIPH_OUTSEL_IDX_OFFSET 3
-
-// PERIPH_OUTSEL ranges from 0 to NUM_MIO + 3 -1}
-// 0, 1 and 2 are tied to value 0, 1 and high-impedance
-
-#define PINMUX_VALUE_0_OUT 0
-#define PINMUX_VALUE_1_OUT 1
-#define PINMUX_VALUE_Z_OUT 2
-#define PINMUX_GPIO_GPIO_0_OUT 3
-#define PINMUX_GPIO_GPIO_1_OUT 4
-#define PINMUX_GPIO_GPIO_2_OUT 5
-#define PINMUX_GPIO_GPIO_3_OUT 6
-#define PINMUX_GPIO_GPIO_4_OUT 7
-#define PINMUX_GPIO_GPIO_5_OUT 8
-#define PINMUX_GPIO_GPIO_6_OUT 9
-#define PINMUX_GPIO_GPIO_7_OUT 10
-#define PINMUX_GPIO_GPIO_8_OUT 11
-#define PINMUX_GPIO_GPIO_9_OUT 12
-#define PINMUX_GPIO_GPIO_10_OUT 13
-#define PINMUX_GPIO_GPIO_11_OUT 14
-#define PINMUX_GPIO_GPIO_12_OUT 15
-#define PINMUX_GPIO_GPIO_13_OUT 16
-#define PINMUX_GPIO_GPIO_14_OUT 17
-#define PINMUX_GPIO_GPIO_15_OUT 18
-#define PINMUX_GPIO_GPIO_16_OUT 19
-#define PINMUX_GPIO_GPIO_17_OUT 20
-#define PINMUX_GPIO_GPIO_18_OUT 21
-#define PINMUX_GPIO_GPIO_19_OUT 22
-#define PINMUX_GPIO_GPIO_20_OUT 23
-#define PINMUX_GPIO_GPIO_21_OUT 24
-#define PINMUX_GPIO_GPIO_22_OUT 25
-#define PINMUX_GPIO_GPIO_23_OUT 26
-#define PINMUX_GPIO_GPIO_24_OUT 27
-#define PINMUX_GPIO_GPIO_25_OUT 28
-#define PINMUX_GPIO_GPIO_26_OUT 29
-#define PINMUX_GPIO_GPIO_27_OUT 30
-#define PINMUX_GPIO_GPIO_28_OUT 31
-#define PINMUX_GPIO_GPIO_29_OUT 32
-#define PINMUX_GPIO_GPIO_30_OUT 33
-#define PINMUX_GPIO_GPIO_31_OUT 34
-
 /**
  * Peripheral base address for uart in top earlgrey.
  *
@@ -635,6 +554,176 @@
 extern const top_earlgrey_alert_peripheral_t
     top_earlgrey_alert_for_peripheral[12];
 
+#define PINMUX_PERIPH_INSEL_IDX_OFFSET 2
+
+// PERIPH_INSEL ranges from 0 to NUM_MIO + 2 -1}
+//  0 and 1 are tied to value 0 and 1
+#define NUM_MIO 32
+#define NUM_DIO 15
+
+#define PINMUX_PERIPH_OUTSEL_IDX_OFFSET 3
+
+/**
+ * Pinmux Peripheral Input.
+ */
+typedef enum top_earlgrey_pinmux_peripheral_in {
+  kTopEarlgreyPinmuxPeripheralInGpioGpio0 = 0, /**< gpio_gpio 0 */
+  kTopEarlgreyPinmuxPeripheralInGpioGpio1 = 1, /**< gpio_gpio 1 */
+  kTopEarlgreyPinmuxPeripheralInGpioGpio2 = 2, /**< gpio_gpio 2 */
+  kTopEarlgreyPinmuxPeripheralInGpioGpio3 = 3, /**< gpio_gpio 3 */
+  kTopEarlgreyPinmuxPeripheralInGpioGpio4 = 4, /**< gpio_gpio 4 */
+  kTopEarlgreyPinmuxPeripheralInGpioGpio5 = 5, /**< gpio_gpio 5 */
+  kTopEarlgreyPinmuxPeripheralInGpioGpio6 = 6, /**< gpio_gpio 6 */
+  kTopEarlgreyPinmuxPeripheralInGpioGpio7 = 7, /**< gpio_gpio 7 */
+  kTopEarlgreyPinmuxPeripheralInGpioGpio8 = 8, /**< gpio_gpio 8 */
+  kTopEarlgreyPinmuxPeripheralInGpioGpio9 = 9, /**< gpio_gpio 9 */
+  kTopEarlgreyPinmuxPeripheralInGpioGpio10 = 10, /**< gpio_gpio 10 */
+  kTopEarlgreyPinmuxPeripheralInGpioGpio11 = 11, /**< gpio_gpio 11 */
+  kTopEarlgreyPinmuxPeripheralInGpioGpio12 = 12, /**< gpio_gpio 12 */
+  kTopEarlgreyPinmuxPeripheralInGpioGpio13 = 13, /**< gpio_gpio 13 */
+  kTopEarlgreyPinmuxPeripheralInGpioGpio14 = 14, /**< gpio_gpio 14 */
+  kTopEarlgreyPinmuxPeripheralInGpioGpio15 = 15, /**< gpio_gpio 15 */
+  kTopEarlgreyPinmuxPeripheralInGpioGpio16 = 16, /**< gpio_gpio 16 */
+  kTopEarlgreyPinmuxPeripheralInGpioGpio17 = 17, /**< gpio_gpio 17 */
+  kTopEarlgreyPinmuxPeripheralInGpioGpio18 = 18, /**< gpio_gpio 18 */
+  kTopEarlgreyPinmuxPeripheralInGpioGpio19 = 19, /**< gpio_gpio 19 */
+  kTopEarlgreyPinmuxPeripheralInGpioGpio20 = 20, /**< gpio_gpio 20 */
+  kTopEarlgreyPinmuxPeripheralInGpioGpio21 = 21, /**< gpio_gpio 21 */
+  kTopEarlgreyPinmuxPeripheralInGpioGpio22 = 22, /**< gpio_gpio 22 */
+  kTopEarlgreyPinmuxPeripheralInGpioGpio23 = 23, /**< gpio_gpio 23 */
+  kTopEarlgreyPinmuxPeripheralInGpioGpio24 = 24, /**< gpio_gpio 24 */
+  kTopEarlgreyPinmuxPeripheralInGpioGpio25 = 25, /**< gpio_gpio 25 */
+  kTopEarlgreyPinmuxPeripheralInGpioGpio26 = 26, /**< gpio_gpio 26 */
+  kTopEarlgreyPinmuxPeripheralInGpioGpio27 = 27, /**< gpio_gpio 27 */
+  kTopEarlgreyPinmuxPeripheralInGpioGpio28 = 28, /**< gpio_gpio 28 */
+  kTopEarlgreyPinmuxPeripheralInGpioGpio29 = 29, /**< gpio_gpio 29 */
+  kTopEarlgreyPinmuxPeripheralInGpioGpio30 = 30, /**< gpio_gpio 30 */
+  kTopEarlgreyPinmuxPeripheralInGpioGpio31 = 31, /**< gpio_gpio 31 */
+  kTopEarlgreyPinmuxPeripheralInLast = 31, /**< \internal Last valid peripheral input */
+} top_earlgrey_pinmux_peripheral_in_t;
+
+/**
+ * Pinmux MIO Input Selector.
+ */
+typedef enum top_earlgrey_pinmux_insel {
+  kTopEarlgreyPinmuxInselConstantZero = 0, /**< Tie constantly to zero */
+  kTopEarlgreyPinmuxInselConstantOne = 1, /**< Tie constantly to one */
+  kTopEarlgreyPinmuxInselMio0 = 2, /**< MIO Pad 0 */
+  kTopEarlgreyPinmuxInselMio1 = 3, /**< MIO Pad 1 */
+  kTopEarlgreyPinmuxInselMio2 = 4, /**< MIO Pad 2 */
+  kTopEarlgreyPinmuxInselMio3 = 5, /**< MIO Pad 3 */
+  kTopEarlgreyPinmuxInselMio4 = 6, /**< MIO Pad 4 */
+  kTopEarlgreyPinmuxInselMio5 = 7, /**< MIO Pad 5 */
+  kTopEarlgreyPinmuxInselMio6 = 8, /**< MIO Pad 6 */
+  kTopEarlgreyPinmuxInselMio7 = 9, /**< MIO Pad 7 */
+  kTopEarlgreyPinmuxInselMio8 = 10, /**< MIO Pad 8 */
+  kTopEarlgreyPinmuxInselMio9 = 11, /**< MIO Pad 9 */
+  kTopEarlgreyPinmuxInselMio10 = 12, /**< MIO Pad 10 */
+  kTopEarlgreyPinmuxInselMio11 = 13, /**< MIO Pad 11 */
+  kTopEarlgreyPinmuxInselMio12 = 14, /**< MIO Pad 12 */
+  kTopEarlgreyPinmuxInselMio13 = 15, /**< MIO Pad 13 */
+  kTopEarlgreyPinmuxInselMio14 = 16, /**< MIO Pad 14 */
+  kTopEarlgreyPinmuxInselMio15 = 17, /**< MIO Pad 15 */
+  kTopEarlgreyPinmuxInselMio16 = 18, /**< MIO Pad 16 */
+  kTopEarlgreyPinmuxInselMio17 = 19, /**< MIO Pad 17 */
+  kTopEarlgreyPinmuxInselMio18 = 20, /**< MIO Pad 18 */
+  kTopEarlgreyPinmuxInselMio19 = 21, /**< MIO Pad 19 */
+  kTopEarlgreyPinmuxInselMio20 = 22, /**< MIO Pad 20 */
+  kTopEarlgreyPinmuxInselMio21 = 23, /**< MIO Pad 21 */
+  kTopEarlgreyPinmuxInselMio22 = 24, /**< MIO Pad 22 */
+  kTopEarlgreyPinmuxInselMio23 = 25, /**< MIO Pad 23 */
+  kTopEarlgreyPinmuxInselMio24 = 26, /**< MIO Pad 24 */
+  kTopEarlgreyPinmuxInselMio25 = 27, /**< MIO Pad 25 */
+  kTopEarlgreyPinmuxInselMio26 = 28, /**< MIO Pad 26 */
+  kTopEarlgreyPinmuxInselMio27 = 29, /**< MIO Pad 27 */
+  kTopEarlgreyPinmuxInselMio28 = 30, /**< MIO Pad 28 */
+  kTopEarlgreyPinmuxInselMio29 = 31, /**< MIO Pad 29 */
+  kTopEarlgreyPinmuxInselMio30 = 32, /**< MIO Pad 30 */
+  kTopEarlgreyPinmuxInselMio31 = 33, /**< MIO Pad 31 */
+  kTopEarlgreyPinmuxInselLast = 33, /**< \internal Last valid insel value */
+} top_earlgrey_pinmux_insel_t;
+
+/**
+ * Pinmux MIO Output.
+ */
+typedef enum top_earlgrey_pinmux_mio_out {
+  kTopEarlgreyPinmuxMioOut0 = 0, /**< MIO Pad 0 */
+  kTopEarlgreyPinmuxMioOut1 = 1, /**< MIO Pad 1 */
+  kTopEarlgreyPinmuxMioOut2 = 2, /**< MIO Pad 2 */
+  kTopEarlgreyPinmuxMioOut3 = 3, /**< MIO Pad 3 */
+  kTopEarlgreyPinmuxMioOut4 = 4, /**< MIO Pad 4 */
+  kTopEarlgreyPinmuxMioOut5 = 5, /**< MIO Pad 5 */
+  kTopEarlgreyPinmuxMioOut6 = 6, /**< MIO Pad 6 */
+  kTopEarlgreyPinmuxMioOut7 = 7, /**< MIO Pad 7 */
+  kTopEarlgreyPinmuxMioOut8 = 8, /**< MIO Pad 8 */
+  kTopEarlgreyPinmuxMioOut9 = 9, /**< MIO Pad 9 */
+  kTopEarlgreyPinmuxMioOut10 = 10, /**< MIO Pad 10 */
+  kTopEarlgreyPinmuxMioOut11 = 11, /**< MIO Pad 11 */
+  kTopEarlgreyPinmuxMioOut12 = 12, /**< MIO Pad 12 */
+  kTopEarlgreyPinmuxMioOut13 = 13, /**< MIO Pad 13 */
+  kTopEarlgreyPinmuxMioOut14 = 14, /**< MIO Pad 14 */
+  kTopEarlgreyPinmuxMioOut15 = 15, /**< MIO Pad 15 */
+  kTopEarlgreyPinmuxMioOut16 = 16, /**< MIO Pad 16 */
+  kTopEarlgreyPinmuxMioOut17 = 17, /**< MIO Pad 17 */
+  kTopEarlgreyPinmuxMioOut18 = 18, /**< MIO Pad 18 */
+  kTopEarlgreyPinmuxMioOut19 = 19, /**< MIO Pad 19 */
+  kTopEarlgreyPinmuxMioOut20 = 20, /**< MIO Pad 20 */
+  kTopEarlgreyPinmuxMioOut21 = 21, /**< MIO Pad 21 */
+  kTopEarlgreyPinmuxMioOut22 = 22, /**< MIO Pad 22 */
+  kTopEarlgreyPinmuxMioOut23 = 23, /**< MIO Pad 23 */
+  kTopEarlgreyPinmuxMioOut24 = 24, /**< MIO Pad 24 */
+  kTopEarlgreyPinmuxMioOut25 = 25, /**< MIO Pad 25 */
+  kTopEarlgreyPinmuxMioOut26 = 26, /**< MIO Pad 26 */
+  kTopEarlgreyPinmuxMioOut27 = 27, /**< MIO Pad 27 */
+  kTopEarlgreyPinmuxMioOut28 = 28, /**< MIO Pad 28 */
+  kTopEarlgreyPinmuxMioOut29 = 29, /**< MIO Pad 29 */
+  kTopEarlgreyPinmuxMioOut30 = 30, /**< MIO Pad 30 */
+  kTopEarlgreyPinmuxMioOut31 = 31, /**< MIO Pad 31 */
+  kTopEarlgreyPinmuxMioOutLast = 31, /**< \internal Last valid mio output */
+} top_earlgrey_pinmux_mio_out_t;
+
+/**
+ * Pinmux Peripheral Output Selector.
+ */
+typedef enum top_earlgrey_pinmux_outsel {
+  kTopEarlgreyPinmuxOutselConstantZero = 0, /**< Tie constantly to zero */
+  kTopEarlgreyPinmuxOutselConstantOne = 1, /**< Tie constantly to one */
+  kTopEarlgreyPinmuxOutselConstantHighZ = 2, /**< Tie constantly to high-Z */
+  kTopEarlgreyPinmuxOutselGpioGpio0 = 3, /**< gpio_gpio 0 */
+  kTopEarlgreyPinmuxOutselGpioGpio1 = 4, /**< gpio_gpio 1 */
+  kTopEarlgreyPinmuxOutselGpioGpio2 = 5, /**< gpio_gpio 2 */
+  kTopEarlgreyPinmuxOutselGpioGpio3 = 6, /**< gpio_gpio 3 */
+  kTopEarlgreyPinmuxOutselGpioGpio4 = 7, /**< gpio_gpio 4 */
+  kTopEarlgreyPinmuxOutselGpioGpio5 = 8, /**< gpio_gpio 5 */
+  kTopEarlgreyPinmuxOutselGpioGpio6 = 9, /**< gpio_gpio 6 */
+  kTopEarlgreyPinmuxOutselGpioGpio7 = 10, /**< gpio_gpio 7 */
+  kTopEarlgreyPinmuxOutselGpioGpio8 = 11, /**< gpio_gpio 8 */
+  kTopEarlgreyPinmuxOutselGpioGpio9 = 12, /**< gpio_gpio 9 */
+  kTopEarlgreyPinmuxOutselGpioGpio10 = 13, /**< gpio_gpio 10 */
+  kTopEarlgreyPinmuxOutselGpioGpio11 = 14, /**< gpio_gpio 11 */
+  kTopEarlgreyPinmuxOutselGpioGpio12 = 15, /**< gpio_gpio 12 */
+  kTopEarlgreyPinmuxOutselGpioGpio13 = 16, /**< gpio_gpio 13 */
+  kTopEarlgreyPinmuxOutselGpioGpio14 = 17, /**< gpio_gpio 14 */
+  kTopEarlgreyPinmuxOutselGpioGpio15 = 18, /**< gpio_gpio 15 */
+  kTopEarlgreyPinmuxOutselGpioGpio16 = 19, /**< gpio_gpio 16 */
+  kTopEarlgreyPinmuxOutselGpioGpio17 = 20, /**< gpio_gpio 17 */
+  kTopEarlgreyPinmuxOutselGpioGpio18 = 21, /**< gpio_gpio 18 */
+  kTopEarlgreyPinmuxOutselGpioGpio19 = 22, /**< gpio_gpio 19 */
+  kTopEarlgreyPinmuxOutselGpioGpio20 = 23, /**< gpio_gpio 20 */
+  kTopEarlgreyPinmuxOutselGpioGpio21 = 24, /**< gpio_gpio 21 */
+  kTopEarlgreyPinmuxOutselGpioGpio22 = 25, /**< gpio_gpio 22 */
+  kTopEarlgreyPinmuxOutselGpioGpio23 = 26, /**< gpio_gpio 23 */
+  kTopEarlgreyPinmuxOutselGpioGpio24 = 27, /**< gpio_gpio 24 */
+  kTopEarlgreyPinmuxOutselGpioGpio25 = 28, /**< gpio_gpio 25 */
+  kTopEarlgreyPinmuxOutselGpioGpio26 = 29, /**< gpio_gpio 26 */
+  kTopEarlgreyPinmuxOutselGpioGpio27 = 30, /**< gpio_gpio 27 */
+  kTopEarlgreyPinmuxOutselGpioGpio28 = 31, /**< gpio_gpio 28 */
+  kTopEarlgreyPinmuxOutselGpioGpio29 = 32, /**< gpio_gpio 29 */
+  kTopEarlgreyPinmuxOutselGpioGpio30 = 33, /**< gpio_gpio 30 */
+  kTopEarlgreyPinmuxOutselGpioGpio31 = 34, /**< gpio_gpio 31 */
+  kTopEarlgreyPinmuxOutselLast = 34, /**< \internal Last valid outsel value */
+} top_earlgrey_pinmux_outsel_t;
+
 // Header Extern Guard
 #ifdef __cplusplus
 }  // extern "C"
diff --git a/util/topgen/c.py b/util/topgen/c.py
index 17ce546..6edb247 100644
--- a/util/topgen/c.py
+++ b/util/topgen/c.py
@@ -137,6 +137,7 @@
         self._init_plic_targets()
         self._init_plic_mapping()
         self._init_alert_mapping()
+        self._init_pinmux_mapping()
 
     def modules(self):
         return [(m["name"],
@@ -276,3 +277,82 @@
         self.alert_sources = sources
         self.alert_alerts = alerts
         self.alert_mapping = alert_mapping
+
+    def _init_pinmux_mapping(self):
+        """Generate C enums for addressing pinmux registers and in/out selects.
+
+        Inputs are connected in order: inouts, then inputs
+        Outputs are connected in order: inouts, then outputs
+
+        Inputs:
+        - Peripheral chooses register field (pinmux_peripheral_in)
+        - Insel chooses MIO input (pinmux_insel)
+
+        Outputs:
+        - MIO chooses register field (pinmux_mio_out)
+        - Outsel chooses peripheral output (pinmux_outsel)
+
+        Insel and outsel have some special values which are captured here too.
+        """
+        pinmux_info = self.top["pinmux"]
+
+        # Peripheral Inputs
+        peripheral_in = CEnum(self._top_name +
+                              Name(["pinmux", "peripheral", "in"]))
+        for signal in pinmux_info["inouts"] + pinmux_info["inputs"]:
+            if "width" in signal and int(signal["width"]) != 1:
+                for i in range(int(signal["width"])):
+                    name = Name.from_snake_case(
+                        signal["name"]) + Name([str(i)])
+                    peripheral_in.add_constant(name,
+                                               docstring="{} {}".format(
+                                                   signal["name"], i))
+            else:
+                peripheral_in.add_constant(Name.from_snake_case(
+                    signal["name"]),
+                                           docstring=signal["name"])
+        peripheral_in.add_last_constant("Last valid peripheral input")
+
+        # Pinmux Input Selects
+        insel = CEnum(self._top_name + Name(["pinmux", "insel"]))
+        insel.add_constant(Name(["constant", "zero"]),
+                           docstring="Tie constantly to zero")
+        insel.add_constant(Name(["constant", "one"]),
+                           docstring="Tie constantly to one")
+        for i in range(int(pinmux_info["num_mio"])):
+            insel.add_constant(Name(["mio", str(i)]),
+                               docstring="MIO Pad {}".format(i))
+        insel.add_last_constant("Last valid insel value")
+
+        # MIO Outputs
+        mio_out = CEnum(self._top_name + Name(["pinmux", "mio", "out"]))
+        for i in range(int(pinmux_info["num_mio"])):
+            mio_out.add_constant(Name([str(i)]),
+                                 docstring="MIO Pad {}".format(i))
+        mio_out.add_last_constant("Last valid mio output")
+
+        # Pinmux Output Selects
+        outsel = CEnum(self._top_name + Name(["pinmux", "outsel"]))
+        outsel.add_constant(Name(["constant", "zero"]),
+                            docstring="Tie constantly to zero")
+        outsel.add_constant(Name(["constant", "one"]),
+                            docstring="Tie constantly to one")
+        outsel.add_constant(Name(["constant", "high", "z"]),
+                            docstring="Tie constantly to high-Z")
+        for signal in pinmux_info["inouts"] + pinmux_info["outputs"]:
+            if "width" in signal and int(signal["width"]) != 1:
+                for i in range(int(signal["width"])):
+                    name = Name.from_snake_case(
+                        signal["name"]) + Name([str(i)])
+                    outsel.add_constant(name,
+                                        docstring="{} {}".format(
+                                            signal["name"], i))
+            else:
+                outsel.add_constant(Name.from_snake_case(signal["name"]),
+                                    docstring=signal["name"])
+        outsel.add_last_constant("Last valid outsel value")
+
+        self.pinmux_peripheral_in = peripheral_in
+        self.pinmux_insel = insel
+        self.pinmux_mio_out = mio_out
+        self.pinmux_outsel = outsel
