From 9957538d383417425b325e3acc49ee4ba58d4389 Mon Sep 17 00:00:00 2001
From: abejgonzalez <abe.j.gonza@gmail.com>
Date: Thu, 25 Feb 2021 13:54:53 -0800
Subject: [PATCH] Enable support for pullup R's on GPIOs

---
 .../scala/vcu118/bringup/BringupGPIOs.scala   | 26 +++++++++----------
 .../scala/vcu118/bringup/CustomOverlays.scala |  7 ++---
 2 files changed, 17 insertions(+), 16 deletions(-)

diff --git a/fpga/src/main/scala/vcu118/bringup/BringupGPIOs.scala b/fpga/src/main/scala/vcu118/bringup/BringupGPIOs.scala
index 1e11dfa2d4..40c33bfa4e 100644
--- a/fpga/src/main/scala/vcu118/bringup/BringupGPIOs.scala
+++ b/fpga/src/main/scala/vcu118/bringup/BringupGPIOs.scala
@@ -3,21 +3,21 @@ package chipyard.fpga.vcu118.bringup
 import scala.collection.mutable.{LinkedHashMap}
 
 object BringupGPIOs {
-    // map of the pin name (akin to die pin name) to (fpga package pin, IOSTANDARD)
+    // map of the pin name (akin to die pin name) to (fpga package pin, IOSTANDARD, add pullup resistor?)
     val pinMapping = LinkedHashMap(
         // these connect to LEDs and switches on the VCU118 (and use 1.2V)
-        "led0"  -> ("AT32", "LVCMOS12"), // 0
-        "led1"  -> ("AV34", "LVCMOS12"), // 1
-        "led2"  -> ("AY30", "LVCMOS12"), // 2
-        "led3"  -> ("BB32", "LVCMOS12"), // 3
-        "led4"  -> ("BF32", "LVCMOS12"), // 4
-        "led5"  -> ("AU37", "LVCMOS12"), // 5
-        "led6"  -> ("AV36", "LVCMOS12"), // 6
-        "led7"  -> ("BA37", "LVCMOS12"), // 7
-        "sw0"   -> ("B17", "LVCMOS12"), // 8
-        "sw1"   -> ("G16", "LVCMOS12"), // 9
-        "sw2"   -> ("J16", "LVCMOS12"), // 10
-        "sw3"   -> ("D21", "LVCMOS12") // 11
+        "led0"  -> ("AT32", "LVCMOS12", false), // 0
+        "led1"  -> ("AV34", "LVCMOS12", false), // 1
+        "led2"  -> ("AY30", "LVCMOS12", false), // 2
+        "led3"  -> ("BB32", "LVCMOS12", false), // 3
+        "led4"  -> ("BF32", "LVCMOS12", false), // 4
+        "led5"  -> ("AU37", "LVCMOS12", false), // 5
+        "led6"  -> ("AV36", "LVCMOS12", false), // 6
+        "led7"  -> ("BA37", "LVCMOS12", false), // 7
+        "sw0"   -> ("B17", "LVCMOS12", false), // 8
+        "sw1"   -> ("G16", "LVCMOS12", false), // 9
+        "sw2"   -> ("J16", "LVCMOS12", false), // 10
+        "sw3"   -> ("D21", "LVCMOS12", false) // 11
     )
 
     // return list of names (ordered)
diff --git a/fpga/src/main/scala/vcu118/bringup/CustomOverlays.scala b/fpga/src/main/scala/vcu118/bringup/CustomOverlays.scala
index a47a6a3b50..43d559f0d6 100644
--- a/fpga/src/main/scala/vcu118/bringup/CustomOverlays.scala
+++ b/fpga/src/main/scala/vcu118/bringup/CustomOverlays.scala
@@ -94,14 +94,15 @@ class BringupGPIOVCU118PlacedOverlay(val shell: VCU118ShellBasicOverlays, name:
     require(gpioNames.length == io.gpio.length)
 
     val packagePinsWithIOStdWithPackageIOs = (gpioNames zip io.gpio).map { case (name, io) =>
-      val (pin, iostd) = BringupGPIOs.pinMapping(name)
-      (pin, iostd, IOPin(io))
+      val (pin, iostd, pullupEnable) = BringupGPIOs.pinMapping(name)
+      (pin, iostd, pullupEnable, IOPin(io))
     }
 
-    packagePinsWithIOStdWithPackageIOs foreach { case (pin, iostd, io) => {
+    packagePinsWithIOStdWithPackageIOs foreach { case (pin, iostd, pullupEnable, io) => {
       shell.xdc.addPackagePin(io, pin)
       shell.xdc.addIOStandard(io, iostd)
       if (iostd == "LVCMOS12") { shell.xdc.addDriveStrength(io, "8") }
+      if (pullupEnable) { shell.xdc.addPullup(io) }
     } }
   } }
 }