91³Ô¹ÏÍø

Watch CBS News

Cal hires Tosh Lupoi as head coach, bringing former player back to lead the Bears

California has hired Oregon defensive coordinator Tosh Lupoi, bringing the former Golden Bears player and assistant back as the head coach.

Lupoi replaces Justin Wilcox, who was fired last month after a lopsided loss to Stanford in the Big Game.

"We couldn't be more thrilled to welcome Tosh and his family back home to Berkeley as our head football coach," general manager Ron Rivera said in a statement Thursday night. "Tosh is a true Golden Bear, and he understands and embraces the challenges and privileges of being a Cal student-athlete. His strong character, tireless work ethic, coaching acumen and recruiting talents all make him the perfect fit to lead us into the next great chapter of Cal football."

Lupoi was born and raised in the Bay Area and played defensive line at Cal from 2000-05. He then spent four years as defensive line coach for the Bears under coach Jeff Tedford before leaving to take an assistant job at Washington in 2012.

Lupoi later went to Alabama where he was on Nick Saban's staff for two national championships, spent three years in the NFL and has been defensive coordinator under Dan Lanning at Oregon the past four seasons.

The Ducks won the Big Ten and made it to the College Football Playoff last season and are in position for another playoff bid this season with a defense that ranks fifth in the nation allowing 4.16 yards per play.

Lupoi is also considered to be one of the better recruiters in college football.

The move is the first major hiring made by Rivera, who was hired earlier this year with the task of getting the Bears back to national prominence. Rivera said after firing Wilcox that the key question any candidate would have to answer before being hired was why they wanted to come to Cal.

It was an easy answer for Lupoi based on his experience as a player and assistant at the school.

Lupoi was part of Tedford's best at Cal in 2004 when the Bears went 10-2 with Aaron Rodgers at quarterback and got as high as fourth in the nation that season.

But the Bears haven't finished the season ranked in the AP poll since 2006.

Wilcox had a 48-55 record with a 26-47 record in conference games in the Pac-12 and ACC. He won more than seven games only once in nine seasons when the Bears went 8-5 in 2019, including a win over Illinois in the Redbox Bowl for their only bowl win under Wilcox.

Cal is 7-5 this season and will be headed to a bowl under interim coach Nick Rolovich.

The most immediate task now for Rivera and Lupoi will be working to retain star freshman quarterback Jaron-Keawe Sagapolutele. Sagapolutele became the first freshman in FBS history to throw for at least 200 yards in his first 12 games and provides reason for optimism at Cal as long as he doesn't transfer.

Sagapolutele threw for 3,117 yards in the regular season with 17 TDs and nine interceptions.

View CBS News In
CBS News App Open
Chrome Safari Continue
const link = doc.createElement('link'); link.rel = 'stylesheet'; link.href = '/fly/fly/bundles/cbsnewscontent/css/cmp-banner.min.css?v=296763317a51cab90faa73f1bb146d5c'; doc.head.appendChild(link); doc.body.innerHTML = CONSENT_MESSAGE; } else { el.insertAdjacentHTML('afterend', CONSENT_MESSAGE); } }); } function hidePrivacyMessage() { // Remove from the main document document.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); // Remove from inside any iframes document.querySelectorAll('iframe').forEach(iframe => { const doc = iframe.contentDocument || iframe.contentWindow.document; doc.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); }); } function activateGatedScripts() { // Handle both new format (cmp-gated-script) and old OneTrust/Ketch format (optanon-category-4) const gatedScripts = Array.from(document.querySelectorAll('script.cmp-gated-script, script.optanon-category-4')); // Activate scripts sequentially with a small delay to avoid timing issues let delay = 0; gatedScripts.forEach(function(placeholder, index) { setTimeout(function() { // Skip if already processed if (placeholder.hasAttribute('data-cmp-processed')) { return; } placeholder.setAttribute('data-cmp-processed', 'true'); const newScript = document.createElement('script'); newScript.type = 'text/javascript'; // Try new format first (data-cmp-src), then fall back to old format (data-src) const src = placeholder.getAttribute('data-cmp-src') || placeholder.getAttribute('data-src'); if (src) { newScript.src = src; } else if (placeholder.textContent) { // Inline script - just copy the content newScript.textContent = placeholder.textContent; } // Handle new format attributes (data-cmp-attrs) - for both inline and external scripts const attrs = placeholder.getAttribute('data-cmp-attrs'); if (attrs) { const tempDiv = document.createElement('div'); tempDiv.innerHTML = '
<\/div>'; const tempAttrs = tempDiv.firstChild.attributes; for (let i = 0; i < tempAttrs.length; i++) { // For external scripts, allow defer/async. For inline scripts, skip them (not valid) if (src || (tempAttrs[i].name !== 'async' && tempAttrs[i].name !== 'defer')) { newScript.setAttribute(tempAttrs[i].name, tempAttrs[i].value); } } } // Copy other attributes from old OneTrust format for (let i = 0; i < placeholder.attributes.length; i++) { const attr = placeholder.attributes[i]; // Skip attributes we've already handled or don't want to copy if (!['class', 'data-src', 'data-type', 'data-cmp-src', 'data-cmp-attrs', 'data-cmp-processed', 'type', 'async', 'defer', 'src'].includes(attr.name)) { newScript.setAttribute(attr.name, attr.value); } } placeholder.parentNode.replaceChild(newScript, placeholder); // If external script, manually trigger window.onload handlers after it loads // This handles widgets that use window.onload for initialization if (src) { newScript.addEventListener('load', function() { // If page already loaded and script set a new onload handler, trigger it if (document.readyState === 'complete' && window.onload) { const originalOnload = window.onload; window.onload = null; // Clear temporarily to prevent loops originalOnload(); // Execute the handler } }); } }, delay); delay += 500; // 500ms delay between each script to allow full loading }); } cbsoptanon.onScriptsReady(function(cmp) { cmp.ot.targetingAllowed(function(allowed) { if (!allowed) { showPrivacyMessage(); } else { activateGatedScripts(); } }); cmp.ot.awaitInitialConsent(function(consent_model) { cmp.ot.addOnConsentChangedHandler(function() { cmp.ot.targetingAllowed(function(allowed) { if (allowed) { hidePrivacyMessage(); activateGatedScripts(); } else { showPrivacyMessage(); } }); }); }); });