diff --git a/jjb/pipeline/voltha/playground/dmi-build-and-test.groovy b/jjb/pipeline/voltha/playground/dmi-build-and-test.groovy
old mode 100755
new mode 100644
diff --git a/jjb/pipeline/voltha/playground/physical-build.groovy b/jjb/pipeline/voltha/playground/physical-build.groovy
old mode 100755
new mode 100644
index 7501144..b9677c3
--- a/jjb/pipeline/voltha/playground/physical-build.groovy
+++ b/jjb/pipeline/voltha/playground/physical-build.groovy
@@ -1,3 +1,4 @@
+// -*- groovy -*-
 // Copyright 2017-2023 Open Networking Foundation (ONF) and the ONF Contributors
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
@@ -11,8 +12,9 @@
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
-
-// used to deploy VOLTHA and configure ONOS physical PODs
+// -----------------------------------------------------------------------
+// Intent: used to deploy VOLTHA and configure ONOS physical PODs
+// -----------------------------------------------------------------------
 
 // NOTE we are importing the library even if it's global so that it's
 // easier to change the keywords during a replay
@@ -25,43 +27,88 @@
 def infraNamespace = "infra"
 def volthaNamespace = "voltha"
 
+// -----------------------------------------------------------------------
+// -----------------------------------------------------------------------
+def getIam(String func)
+{
+    // Cannot rely on a stack trace due to jenkins manipulation
+    String src = [
+	'jjb',
+	'pipeline',
+	'voltha',
+	'playground',
+	'voltha-tt-physical-functional-tests.groovy'
+    ].join('/')
+    String iam = [src, func].join('::')
+    return iam
+}
+
+// -----------------------------------------------------------------------
+// -----------------------------------------------------------------------
 def deploy_custom_oltAdapterChart(namespace, name, chart, extraHelmFlags) {
   sh """
     helm install --create-namespace --set defaults.image_pullPolicy=Always --namespace ${namespace} ${extraHelmFlags} ${name} ${chart}
    """
 }
 
-pipeline {
-
-  /* no label, executor is determined by JJB */
-  agent {
-    label "${params.buildNode}"
-  }
-  options {
-    timeout(time: 35, unit: 'MINUTES')
-  }
-  environment {
-    PATH="$PATH:$WORKSPACE/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
-    KUBECONFIG="$WORKSPACE/${configBaseDir}/${configKubernetesDir}/${configFileName}.conf"
-  }
-
-  stages{
-    stage('Download Code') {
-      steps {
-        getVolthaCode([
-          branch: "${branch}",
-          volthaSystemTestsChange: "${volthaSystemTestsChange}",
-          volthaHelmChartsChange: "${volthaHelmChartsChange}",
-        ])
-      }
+pipeline
+{
+    /* no label, executor is determined by JJB */
+    agent
+    {
+	label "${params.buildNode}"
     }
-    stage ("Parse deployment configuration file") {
-      steps {
-        sh returnStdout: true, script: "rm -rf ${configBaseDir}"
-        sh returnStdout: true, script: "git clone -b ${branch} ${cordRepoUrl}/${configBaseDir}"
-        script {
-          if ( params.workFlow == "DT" ) {
-            deployment_config = readYaml file: "${configBaseDir}/${configDeploymentDir}/${configFileName}-DT.yaml"
+
+    options
+    {
+	timeout(time: 35, unit: 'MINUTES')
+    }
+
+    environment
+    {
+	PATH="$PATH:$WORKSPACE/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
+	KUBECONFIG="$WORKSPACE/${configBaseDir}/${configKubernetesDir}/${configFileName}.conf"
+    }
+
+    stages
+    {
+	stage('IAM')
+	{
+	    String iam = getIam('main')
+            println("** ${iam}: ENTER")
+            println("** ${iam}: LEAVE")
+	}
+
+	stage('Download Code')
+	{
+	    steps {
+		getVolthaCode([
+		    branch: "${branch}",
+		    volthaSystemTestsChange: "${volthaSystemTestsChange}",
+		    volthaHelmChartsChange: "${volthaHelmChartsChange}",
+		])
+	    }
+	}
+
+	stage ("Parse deployment configuration file") {
+	    steps {
+		sh returnStdout: true, script: "rm -rf ${configBaseDir}"
+		sh returnStdout: true, script: "git clone -b ${branch} ${cordRepoUrl}/${configBaseDir}"
+		script {
+		    String conf = "${configBaseDir}/${configDeploymentDir}/${configFileName}"
+		    String flow = params.workFlow
+
+		    conf += (flow == 'DT') ? '-DT.yaml'
+		        : (flow == 'TT') ? '-TT.yaml'
+		        : '.yaml'
+
+		    deployment_config = readYaml file: conf
+		    
+		    /*
+		    if ( params.workFlow == "DT" )
+		    {
+			conf += '-DT.yaml'
+//            deployment_config = readYaml file: "${configBaseDir}/${configDeploymentDir}/${configFileName}-DT.yaml"
           }
           else if ( params.workFlow == "TT" )
           {
@@ -71,9 +118,11 @@
           {
             deployment_config = readYaml file: "${configBaseDir}/${configDeploymentDir}/${configFileName}.yaml"
           }
+		     */
         }
       }
     }
+
     stage('Clean up') {
       steps {
         timeout(15) {
diff --git a/jjb/pipeline/voltha/playground/software-upgrades.groovy b/jjb/pipeline/voltha/playground/software-upgrades.groovy
old mode 100755
new mode 100644
diff --git a/jjb/pipeline/voltha/playground/voltha-tt-physical-functional-tests.groovy b/jjb/pipeline/voltha/playground/voltha-tt-physical-functional-tests.groovy
index 1eacba9..7e8b5d9 100644
--- a/jjb/pipeline/voltha/playground/voltha-tt-physical-functional-tests.groovy
+++ b/jjb/pipeline/voltha/playground/voltha-tt-physical-functional-tests.groovy
@@ -26,89 +26,144 @@
   deployment_config = null
 }
 
+// -----------------------------------------------------------------------
+// -----------------------------------------------------------------------
+def getIam(String func)
+{
+    // Cannot rely on a stack trace due to jenkins manipulation
+    String src = [
+	'jjb',
+	'pipeline',
+	'voltha',
+	'playground',
+	'voltha-tt-physical-functional-tests.groovy'
+    ].join('/')
+    String iam = [src, func].join('::')
+    return iam
+}
+
 def infraNamespace = "infra"
 def volthaNamespace = "voltha"
 
-pipeline {
-  /* no label, executor is determined by JJB */
-  agent {
-    label "${params.buildNode}"
-  }
-  options {
-    timeout(time: "${timeout}", unit: 'MINUTES')
-  }
+pipeline
+{
+    /* no label, executor is determined by JJB */
+    agent
+    {
+	label "${params.buildNode}"
+    }
 
-  environment {
-    KUBECONFIG="$WORKSPACE/${configBaseDir}/${configKubernetesDir}/${configFileName}.conf"
-    VOLTCONFIG="$HOME/.volt/config-minimal"
-    PATH="$WORKSPACE/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
-  }
+    options
+    {
+	timeout(time: "${timeout}", unit: 'MINUTES')
+    }
 
-  stages {
-    stage('Clone voltha-system-tests') {
-      steps {
-        step([$class: 'WsCleanup'])
-        checkout([
-          $class: 'GitSCM',
-          userRemoteConfigs: [[
-            url: "https://gerrit.opencord.org/voltha-system-tests",
-            refspec: "${volthaSystemTestsChange}"
-          ]],
-          branches: [[ name: "${branch}", ]],
-          extensions: [
-            [$class: 'WipeWorkspace'],
-            [$class: 'RelativeTargetDirectory', relativeTargetDir: "voltha-system-tests"],
-            [$class: 'CloneOption', depth: 0, noTags: false, reference: '', shallow: false],
-          ],
-        ])
-        script {
-          sh(script:"""
+    environment
+    {
+	KUBECONFIG="$WORKSPACE/${configBaseDir}/${configKubernetesDir}/${configFileName}.conf"
+	VOLTCONFIG="$HOME/.volt/config-minimal"
+	PATH="$WORKSPACE/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
+    }
+
+    stages {
+
+	// -----------------------------------------------------------------------
+	// -----------------------------------------------------------------------
+	stage('IAM')
+	{
+	    String iam = getIam('main')
+            println("** ${iam}: ENTER")
+            println("** ${iam}: LEAVE")
+	}
+
+	// -----------------------------------------------------------------------
+	// -----------------------------------------------------------------------
+	stage('Clone voltha-system-tests')
+	{
+	    steps
+	    {
+		step([$class: 'WsCleanup'])
+		checkout([
+		    $class: 'GitSCM',
+		    userRemoteConfigs: [[
+			url: "https://gerrit.opencord.org/voltha-system-tests",
+			refspec: "${volthaSystemTestsChange}"
+		    ]],
+		    branches: [[ name: "${branch}" ]],
+		    extensions: [
+			[$class: 'WipeWorkspace'],
+			[$class: 'RelativeTargetDirectory', relativeTargetDir: "voltha-system-tests"],
+			[$class: 'CloneOption', depth: 0, noTags: false, reference: '', shallow: false],
+		    ],
+		]) // checkout
+
+		script
+		{
+		    sh(
+			returnStatus: true,
+			// returnStdout: true,
+			script: """
             if [ '${volthaSystemTestsChange}' != '' ] ; then
-              cd $WORKSPACE/voltha-system-tests;
-              git fetch https://gerrit.opencord.org/voltha-system-tests ${volthaSystemTestsChange} && git checkout FETCH_HEAD
+              cd "$WORKSPACE/voltha-system-tests"
+              git fetch https://gerrit.opencord.org/voltha-system-tests ${volthaSystemTestsChange}
+              git checkout FETCH_HEAD
+              exit 1  # verify fail
             fi
             """)
-        }
-      }
-    }
-    // This checkout allows us to show changes in Jenkins
-    // we only do this on master as we don't branch all the repos for all the releases
-    // (we should compute the difference by tracking the container version, not the code)
-    stage('Download All the VOLTHA repos') {
-      when {
-        expression {
-          return "${branch}" == 'master';
-        }
-      }
-      steps {
-       checkout(changelog: true,
-         poll: false,
-         scm: [$class: 'RepoScm',
-           manifestRepositoryUrl: "${params.manifestUrl}",
-           manifestBranch: "${params.branch}",
-           currentBranch: true,
-           destinationDir: 'voltha',
-           forceSync: true,
-           resetFirst: true,
-           quiet: true,
-           jobs: 4,
-           showAllChanges: true]
-         )
-      }
-    }
-    stage ('Initialize')
-    {
-        steps
-	{
-	    sh returnStdout: false, script: "git clone -b ${branch} ${cordRepoUrl}/${configBaseDir}"
-	    script
-	    {
-		deployment_config = readYaml file: "${configBaseDir}/${configDeploymentDir}/${configFileName}-TT.yaml"
-	    }
-		
-        installVoltctl("${branch}")
+		} // step
+	    } // steps
+	} // stage
 
-        sh returnStdout: false, script: """
+	// -----------------------------------------------------------------------
+	// This checkout allows us to show changes in Jenkins
+	// we only do this on master as we don't branch all the repos for all the releases
+	// (we should compute the difference by tracking the container version, not the code)
+	// -----------------------------------------------------------------------
+	stage('Download All the VOLTHA repos')
+	{
+	    when {
+		expression { return "${branch}" == 'master'; }
+            }
+
+	    steps {
+		checkout(changelog: true,
+			 poll: false,
+			 scm: [$class: 'RepoScm',
+			       manifestRepositoryUrl: "${params.manifestUrl}",
+			       manifestBranch: "${params.branch}",
+			       currentBranch: true,
+			       destinationDir: 'voltha',
+			       forceSync: true,
+			       resetFirst: true,
+			       quiet: true,
+			       jobs: 4,
+			       showAllChanges: true]
+		)
+	    }
+	}
+
+	// -----------------------------------------------------------------------
+	// -----------------------------------------------------------------------
+	stage ('Initialize')
+	{
+            steps
+	    {
+		sh(
+		    returnStatus: true,
+		    returnStdout: false,
+		    script: "git clone -b ${branch} ${cordRepoUrl}/${configBaseDir}"
+		)
+		script
+		{
+		    deployment_config = readYaml file: "${configBaseDir}/${configDeploymentDir}/${configFileName}-TT.yaml"
+		}
+
+		installVoltctl("${branch}")
+
+		sh(
+		    returnStatus: true,
+		    returnStdout: false,
+		    script: """
         mkdir -p "$WORKSPACE/bin"
 
         # install kail
@@ -120,7 +175,6 @@
         if [ "${params.branch}" == "master" ]; then
            set +e
 
-
         # Remove noise from voltha-core logs
            voltctl log level set WARN read-write-core#github.com/opencord/voltha-go/db/model
            voltctl log level set WARN read-write-core#github.com/opencord/voltha-lib-go/v3/pkg/kafka
@@ -129,18 +183,23 @@
            voltctl log level set WARN adapter-open-olt#github.com/opencord/voltha-lib-go/v3/pkg/probe
            voltctl log level set WARN adapter-open-olt#github.com/opencord/voltha-lib-go/v3/pkg/kafka
         fi
-        """
-      }
-    }
+        """)
+	    } // step
+	} // stage
 
-    stage('Functional Tests') {
-      environment {
-        ROBOT_CONFIG_FILE="$WORKSPACE/${configBaseDir}/${configDeploymentDir}/${configFileName}-TT.yaml"
-        ROBOT_FILE="Voltha_TT_PODTests.robot"
-        ROBOT_LOGS_DIR="$WORKSPACE/RobotLogs/tt-workflow/FunctionalTests"
-      }
-      steps {
-        sh """
+	// -----------------------------------------------------------------------
+	// -----------------------------------------------------------------------
+	stage('Functional Tests')
+	{
+	    environment
+	    {
+		ROBOT_CONFIG_FILE="$WORKSPACE/${configBaseDir}/${configDeploymentDir}/${configFileName}-TT.yaml"
+		ROBOT_FILE="Voltha_TT_PODTests.robot"
+		ROBOT_LOGS_DIR="$WORKSPACE/RobotLogs/tt-workflow/FunctionalTests"
+	    }
+
+	    steps {
+		sh("""
         mkdir -p $ROBOT_LOGS_DIR
         if ( ${powerSwitch} ); then
              export ROBOT_MISC_ARGS="--removekeywords wuks -i functionalTT -i PowerSwitch -i sanityTT -i sanityTT-MCAST -e bbsim -e notready -d $ROBOT_LOGS_DIR -v POD_NAME:${configFileName} -v KUBERNETES_CONFIGS_DIR:$WORKSPACE/${configBaseDir}/${configKubernetesDir} -v container_log_dir:$WORKSPACE -v OLT_ADAPTER_APP_LABEL:${oltAdapterAppLabel}"
@@ -151,19 +210,25 @@
              export ROBOT_MISC_ARGS="--removekeywords wuks -i functionalTT -e PowerSwitch -i sanityTT -i sanityTT-MCAST -e bbsim -e notready -d $ROBOT_LOGS_DIR -v POD_NAME:${configFileName} -v KUBERNETES_CONFIGS_DIR:$WORKSPACE/${configBaseDir}/${configKubernetesDir} -v container_log_dir:$WORKSPACE -v OLT_ADAPTER_APP_LABEL:${oltAdapterAppLabel}"
         fi
         ROBOT_MISC_ARGS+=" -v NAMESPACE:${volthaNamespace} -v INFRA_NAMESPACE:${infraNamespace}"
-        make -C $WORKSPACE/voltha-system-tests voltha-tt-test || true
-        """
+        make -C $WORKSPACE/voltha-system-tests voltha-tt-test
+        """)
       }
-    }
+	} // stage
 
-    stage('Failure/Recovery Tests') {
-      environment {
-        ROBOT_CONFIG_FILE="$WORKSPACE/${configBaseDir}/${configDeploymentDir}/${configFileName}-TT.yaml"
-        ROBOT_FILE="Voltha_TT_FailureScenarios.robot"
-        ROBOT_LOGS_DIR="$WORKSPACE/RobotLogs/tt-workflow/FailureScenarios"
-      }
-      steps {
-        sh """
+	// -----------------------------------------------------------------------
+	// -----------------------------------------------------------------------
+	stage('Failure/Recovery Tests')
+	{
+	    environment
+	    {
+		ROBOT_CONFIG_FILE="$WORKSPACE/${configBaseDir}/${configDeploymentDir}/${configFileName}-TT.yaml"
+		ROBOT_FILE="Voltha_TT_FailureScenarios.robot"
+		ROBOT_LOGS_DIR="$WORKSPACE/RobotLogs/tt-workflow/FailureScenarios"
+	    }
+
+	    steps
+	    {
+		sh("""
         mkdir -p $ROBOT_LOGS_DIR
         if [ ${params.enableMultiUni} = false ]; then
           if ( ${powerSwitch} ); then
@@ -174,19 +239,25 @@
           ROBOT_MISC_ARGS+=" -v NAMESPACE:${volthaNamespace} -v INFRA_NAMESPACE:${infraNamespace}"
           make -C $WORKSPACE/voltha-system-tests voltha-tt-test || true
         fi
-        """
-      }
-    }
+        """)
+	    }
+	} // stage
 
-    stage('Multi-Tcont Tests') {
-      environment {
-        ROBOT_CONFIG_FILE="$WORKSPACE/${configBaseDir}/${configDeploymentDir}/${configFileName}-TT.yaml"
-        ROBOT_FILE="Voltha_TT_MultiTcontTests.robot"
-        ROBOT_LOGS_DIR="$WORKSPACE/RobotLogs/tt-workflow/MultiTcontScenarios"
-        ROBOT_TEST_INPUT_FILE="$WORKSPACE/voltha-system-tests/tests/data/${configFileName}-TT-multi-tcont-tests-input.yaml"
-      }
-      steps {
-        sh """
+	// -----------------------------------------------------------------------
+	// -----------------------------------------------------------------------
+	stage('Multi-Tcont Tests')
+	{
+	    environment
+	    {
+		ROBOT_CONFIG_FILE="$WORKSPACE/${configBaseDir}/${configDeploymentDir}/${configFileName}-TT.yaml"
+		ROBOT_FILE="Voltha_TT_MultiTcontTests.robot"
+		ROBOT_LOGS_DIR="$WORKSPACE/RobotLogs/tt-workflow/MultiTcontScenarios"
+		ROBOT_TEST_INPUT_FILE="$WORKSPACE/voltha-system-tests/tests/data/${configFileName}-TT-multi-tcont-tests-input.yaml"
+	    }
+
+	    steps
+	    {
+		sh("""
         mkdir -p $ROBOT_LOGS_DIR
         if [ ${params.enableMultiUni} = false ]; then
           if ( ${powerSwitch} ); then
@@ -197,19 +268,25 @@
           ROBOT_MISC_ARGS+=" -v NAMESPACE:${volthaNamespace} -v INFRA_NAMESPACE:${infraNamespace}"
           make -C $WORKSPACE/voltha-system-tests voltha-tt-test || true
         fi
-        """
-      }
-    }
+        """)
+	    }
+	}
+	
+	// -----------------------------------------------------------------------
+	// -----------------------------------------------------------------------
+	stage('Multicast Tests')
+	{
+	    environment
+	    {
+		ROBOT_CONFIG_FILE="$WORKSPACE/${configBaseDir}/${configDeploymentDir}/${configFileName}-TT.yaml"
+		ROBOT_FILE="Voltha_TT_MulticastTests.robot"
+		ROBOT_LOGS_DIR="$WORKSPACE/RobotLogs/tt-workflow/MulticastTests"
+		ROBOT_TEST_INPUT_FILE="$WORKSPACE/voltha-system-tests/tests/data/${configFileName}-TT-multicast-tests-input.yaml"
+	    }
 
-    stage('Multicast Tests') {
-      environment {
-        ROBOT_CONFIG_FILE="$WORKSPACE/${configBaseDir}/${configDeploymentDir}/${configFileName}-TT.yaml"
-        ROBOT_FILE="Voltha_TT_MulticastTests.robot"
-        ROBOT_LOGS_DIR="$WORKSPACE/RobotLogs/tt-workflow/MulticastTests"
-        ROBOT_TEST_INPUT_FILE="$WORKSPACE/voltha-system-tests/tests/data/${configFileName}-TT-multicast-tests-input.yaml"
-      }
-      steps {
-        sh """
+	    steps
+	    {
+		sh("""
         mkdir -p $ROBOT_LOGS_DIR
         if [ ${params.enableMultiUni} = true ]; then
           if ( ${powerSwitch} ); then
@@ -220,46 +297,53 @@
           ROBOT_MISC_ARGS+=" -v NAMESPACE:${volthaNamespace} -v INFRA_NAMESPACE:${infraNamespace}"
           make -C $WORKSPACE/voltha-system-tests voltha-tt-test || true
         fi
-        """
-      }
+        """)
+	    }
+	}
     }
 
-  }
-  post {
-    always {
-      getPodsInfo("$WORKSPACE/pods")
-      sh returnStdout: false, script: '''
+    post
+    {
+	always
+	{
+	    getPodsInfo("$WORKSPACE/pods")
+	    sh(returnStdout: false, script: '''
       set +e
 
       # collect logs collected in the Robot Framework StartLogging keyword
       cd $WORKSPACE
       gzip *-combined.log || true
       rm *-combined.log || true
-      '''
-      script {
+      ''')
+
+	    script {
         deployment_config.olts.each { olt ->
-          if (olt.type == null || olt.type == "" || olt.type == "openolt") {
-             sh returnStdout: false, script: """
+	if (olt.type == null || olt.type == "" || olt.type == "openolt")
+	{
+		sh(returnStdout: false, script: """
              sshpass -p ${olt.pass} scp ${olt.user}@${olt.sship}:/var/log/openolt.log $WORKSPACE/openolt-${olt.sship}.log || true
              sshpass -p ${olt.pass} scp ${olt.user}@${olt.sship}:/var/log/dev_mgmt_daemon.log $WORKSPACE/dev_mgmt_daemon-${olt.sship}.log || true
              sed -i 's/\\x1b\\[[0-9;]*[a-zA-Z]//g' $WORKSPACE/openolt-${olt.sship}.log  # Remove escape sequences
              sed -i 's/\\x1b\\[[0-9;]*[a-zA-Z]//g' $WORKSPACE/dev_mgmt_daemon-${olt.sship}.log  # Remove escape sequences
-             """
-          }
-        }
-      }
-      step([$class: 'RobotPublisher',
-        disableArchiveOutput: false,
-        logFileName: '**/log*.html',
-        otherFiles: '',
-        outputFileName: '**/output*.xml',
-        outputPath: 'RobotLogs',
-        passThreshold: 100,
-        reportFileName: '**/report*.html',
-        unstableThreshold: 0,
-        onlyCritical: true
-        ]);
-      archiveArtifacts artifacts: '**/*.log,**/*.gz,**/*.tgz,*.txt,pods/*.txt'
-    }
-  }
-}
+             """)
+		    }
+		}
+	    }
+
+	    step([$class: 'RobotPublisher',
+		  disableArchiveOutput: false,
+		  logFileName: '**/log*.html',
+		  otherFiles: '',
+		  outputFileName: '**/output*.xml',
+		  outputPath: 'RobotLogs',
+		  passThreshold: 100,
+		  reportFileName: '**/report*.html',
+		  unstableThreshold: 0,
+		  onlyCritical: true
+            ]);
+	    archiveArtifacts artifacts: '**/*.log,**/*.gz,**/*.tgz,*.txt,pods/*.txt'
+	} // always
+    } // post
+} // pipeline
+
+// [EOF]
diff --git a/jjb/voltha-test/voltha.yaml b/jjb/voltha-test/voltha.yaml
index fe9f6da..da107b2 100644
--- a/jjb/voltha-test/voltha.yaml
+++ b/jjb/voltha-test/voltha.yaml
@@ -911,18 +911,49 @@
           name-extension: '_TT'
           work-flow: 'TT'
           power-switch: true
-          power-cycle-olt: true
+          power-cycle-olt: false
           pipeline-script: 'voltha/master/voltha-tt-physical-functional-tests.groovy'
           test-repo: 'voltha-system-tests'
           profile: 'TP'
           timeout: 360
 
+      # [CORD-3256] TT workflow on XGSPON OLT at Berlin pod - build job
+      - 'build_voltha_pod_release_timer':
+          disable-job: false
+          build-node: 'berlin-community-pod-1'
+          config-pod: 'berlin-community-pod-1-gpon'
+          release: 'voltha-2.11'
+          branch: 'voltha-2.11'
+          name-extension: '_TT'
+          work-flow: 'TT'
+          profile: 'TP'
+          time: '10'
+          VolthaEtcdPort: 9999
+          num-of-onos: '3'
+          num-of-atomix: '3'
+
+      # [CORD-3256] TT workflow on GPON OLT at Berlin pod - test job
+      - 'build_voltha_pod_test':
+          disable-job: false
+          build-node: 'berlin-community-pod-1'
+          config-pod: 'berlin-community-pod-1-gpon'
+          release: 'voltha-2.11'
+          branch: 'voltha-2.11'
+          name-extension: '_TT'
+          work-flow: 'TT'
+          power-switch: true
+          power-cycle-olt: false
+          pipeline-script: 'voltha/voltha-2.11/voltha-tt-physical-functional-tests.groovy'
+          test-repo: 'voltha-system-tests'
+          profile: 'TP'
+          timeout: 360
+
       # TT workflow on Zyxel GPON OLT at Berlin pod - build job (playground)
       - 'build_voltha_pod_release_timer_playground':
           disable-job: false
           build-node: 'berlin-community-pod-1'
           config-pod: 'berlin-community-pod-1-gpon'
-          release: 'master3'
+          release: 'master'
           branch: 'master'
           name-extension: '_TT'
           work-flow: 'TT'
@@ -942,7 +973,7 @@
           name-extension: '_TT'
           work-flow: 'TT'
           power-switch: true
-          power-cycle-olt: true
+          power-cycle-olt: false
           pipeline-script: 'voltha/playground/voltha-tt-physical-functional-tests.groovy'
           test-repo: 'voltha-system-tests'
           profile: 'TP'
