Update github actions
diff --git a/.github/workflows/microwatt_ci.yml b/.github/workflows/microwatt_ci.yml
new file mode 100644
index 0000000..ca15150
--- /dev/null
+++ b/.github/workflows/microwatt_ci.yml
@@ -0,0 +1,96 @@
+name: CI
+
+on:
+  push:
+  pull_request:
+  schedule:
+    - cron: '0 0 * * 5'
+  workflow_dispatch:
+
+jobs:
+  # We can tape out the multiply_add_64x64 and Microwatt_FP_DFFRFile macros
+  # within github runner CPU and memory limits, but not user_project_wrapper.
+  partial_tape_out:
+    timeout-minutes: 180
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: false
+      max-parallel: 3
+      matrix:
+        task: [
+          "multiply_add_64x64",
+          "Microwatt_FP_DFFRFile",
+        ]
+
+    steps:
+      - uses: actions/checkout@v2
+
+      - name: Create environment variables
+        run: |
+          echo "PDK_ROOT=/home/runner/work/pdk" >> $GITHUB_ENV
+          echo "PDK=sky130A" >> $GITHUB_ENV
+          echo "OPENLANE_ROOT=/home/runner/work/caravel_user_project/openlane" >> $GITHUB_ENV
+
+      - name: Install dependencies
+        run: |
+          sudo mkdir -p ${{ env.PDK_ROOT }}
+          sudo chown -R $USER:$USER ${{ env.PDK_ROOT }}
+          make install
+          make openlane
+          make pdk-with-volare
+
+      - name: Harden using Openlane
+        run: |
+          make ${{ matrix.task }}
+
+      - name: upload failure logs
+        if: failure()
+        uses: actions/upload-artifact@v2
+        with:
+          name: ${{ matrix.task }}.error
+          path: |
+            ${{ github.workspace }}/openlane/${{ matrix.task }}/runs/${{ matrix.task }}/reports/signoff
+
+  rtl_tests:
+    timeout-minutes: 30
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: false
+      max-parallel: 3
+      matrix:
+        task: [
+          "jtag",
+          "minimal",
+          "uart",
+          "memory_test",
+          "spi_flash",
+          "simplebus_minimal",
+          #"simplebus_micropython",
+        ]
+
+    steps:
+      - uses: actions/checkout@v2
+
+      - name: Create environment variables
+        run: |
+          echo "PDK_ROOT=/home/runner/work/pdk" >> $GITHUB_ENV
+          echo "PDK=sky130A" >> $GITHUB_ENV
+          echo "OPENLANE_ROOT=/home/runner/work/caravel_user_project/openlane" >> $GITHUB_ENV
+
+      - name: Install packages
+        run: |
+          sudo apt-get -y install iverilog gcc-powerpc64le-linux-gnu
+
+      - name: Install dependencies
+        run: |
+          sudo mkdir -p ${{ env.PDK_ROOT }}
+          sudo chown -R $USER:$USER ${{ env.PDK_ROOT }}
+          make install
+          make install_mcw
+          make openlane
+          make pdk-with-volare
+
+      - name: Run test
+        run: |
+          cd verilog/dv/microwatt/${{ matrix.task }}
+          make
diff --git a/.github/workflows/microwatt_tapeout_ci.yml b/.github/workflows/microwatt_tapeout_ci.yml
new file mode 100644
index 0000000..d168218
--- /dev/null
+++ b/.github/workflows/microwatt_tapeout_ci.yml
@@ -0,0 +1,101 @@
+name: Tape Out CI
+
+# Tape outs require much more CPU and RAM than github runners provide
+# (currently 2 VCPUs and 7GB RAM), so we run the tape out manually but
+# trigger the tape out CI on push of the GDS.
+
+on:
+  push:
+    paths: 'gds/user_project_wrapper.gds*'
+  pull_request:
+    paths: 'gds/user_project_wrapper.gds*'
+  workflow_dispatch:
+
+jobs:
+  mpw_precheck:
+    timeout-minutes: 720
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v2
+
+      - name: Create environment variables
+        run: |
+          echo "PDK_ROOT=/home/runner/work/pdk" >> $GITHUB_ENV
+          echo "PDK=sky130A" >> $GITHUB_ENV
+          echo "OPENLANE_ROOT=/home/runner/work/caravel_user_project/openlane" >> $GITHUB_ENV
+
+      - name: Install dependencies
+        run: |
+          sudo mkdir -p ${{ env.PDK_ROOT }}
+          sudo chown -R $USER:$USER ${{ env.PDK_ROOT }}
+          make install
+          make openlane
+          make pdk-with-volare
+
+      - name: Run MPW-Precheck
+        run: |
+          export INPUT_DIRECTORY=$(pwd)
+          export PRECHECK_ROOT=$INPUT_DIRECTORY/mpw_precheck
+          export OUTPUT_DIRECTORY=$INPUT_DIRECTORY/mpw_precheck_result
+          export OUTPUT=$OUTPUT_DIRECTORY/logs/precheck.log
+          export PDKPATH=$PDK_ROOT/sky130A
+
+          git clone --depth=1 -b mpw-5b https://github.com/efabless/mpw_precheck.git
+
+          docker run -v "$PRECHECK_ROOT":"$PRECHECK_ROOT" -v "$INPUT_DIRECTORY":"$INPUT_DIRECTORY" -v "${{ env.PDK_ROOT }}":"${{ env.PDK_ROOT }}" -e INPUT_DIRECTORY="$INPUT_DIRECTORY" -e PDK_ROOT="${{ env.PDK_ROOT }}" -e PDKPATH="${{ env.PDKPATH }}" -u $(id -u "$USER"):$(id -g "$USER") efabless/mpw_precheck:latest bash -c "cd $PRECHECK_ROOT; python3 mpw_precheck.py --input_directory $INPUT_DIRECTORY --pdk_root ${{ env.PDK_ROOT }} --output_directory $OUTPUT_DIRECTORY license makefile consistency xor magic_drc klayout_beol klayout_feol klayout_met_min_ca_density klayout_offgrid klayout_pin_label_purposes_overlapping_drawing klayout_zeroarea"
+
+          cnt=$(grep -c "All Checks Passed" "$OUTPUT")
+          if ! [[ $cnt ]]; then cnt=0; fi
+          if [[ $cnt -eq 1 ]]; then exit 0; fi
+          exit 2
+      - name: upload failure logs
+        if: failure()
+        uses: actions/upload-artifact@v2
+        with:
+          name: mpw_precheck.error
+          path: |
+            ${{ github.workspace }}/mpw_precheck_result/logs/*
+
+  gl_tests:
+    timeout-minutes: 60
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: false
+      max-parallel: 3
+      matrix:
+        task: [
+          "jtag",
+          #"minimal",
+          #"uart",
+          #"memory_test",
+          #"spi_flash",
+          #"simplebus_minimal",
+          #"simplebus_micropython",
+        ]
+
+    steps:
+      - uses: actions/checkout@v2
+
+      - name: Create environment variables
+        run: |
+          echo "PDK_ROOT=/home/runner/work/pdk" >> $GITHUB_ENV
+          echo "PDK=sky130A" >> $GITHUB_ENV
+          echo "OPENLANE_ROOT=/home/runner/work/caravel_user_project/openlane" >> $GITHUB_ENV
+
+      - name: Install packages
+        run: |
+          sudo apt-get -y install iverilog gcc-powerpc64le-linux-gnu
+
+      - name: Install dependencies
+        run: |
+          sudo mkdir -p ${{ env.PDK_ROOT }}
+          sudo chown -R $USER:$USER ${{ env.PDK_ROOT }}
+          make install
+          make install_mcw
+          make openlane
+          make pdk-with-volare
+
+      - name: Run test
+        run: |
+          cd verilog/dv/microwatt/${{ matrix.task }}
+          make SIM=GL
diff --git a/.github/workflows/user_project_ci.yml b/.github/workflows/user_project_ci.yml
index d3e9f0c..26fdf5e 100644
--- a/.github/workflows/user_project_ci.yml
+++ b/.github/workflows/user_project_ci.yml
@@ -1,11 +1,12 @@
-name: CI
+name: Upstream CI
 
+# Disable upstream CI
 on:
   # Runs on Every Push
-  push:
+#  push:
   # Runs on Pull Requests
-  pull_request:
-  workflow_dispatch:
+#  pull_request:
+#  workflow_dispatch:
 
 jobs:
   pdk: