SOUTH BEND, Ind. -- Michigan State running back Gerald Holmes could not hide his emotions when he learned about the death of his grandmother earlier this week.
"I was in the middle of meetings, and I broke out in tears and ran out," Holmes said. "But I knew I had a game today. I steered the motivation from her to come out here and ball."
Holmes' tribute to his grandmother was unflinching. He rushed for 100 yards and two touchdowns, and No. 12 Michigan State held on for a 36-28 victory over No. 18 Notre Dame on Saturday night.
LJ Scott added 98 rushing yards and one touchdown while quarterback Tyler O'Connor completed 19 of 26 passes for 241 yards and two touchdowns for the Spartans.
Michigan State (2-0) won for the 10th time in its past 13 games against ranked opponents.
"We came down here, and felt like we needed to win on toughness," Michigan State coach Mike Dantonio said. "I thought we did that. We're starting to develop an identity."
Fighting Irish quarterback DeShone Kizer passed for a career-high 344 yards and two touchdowns, and rushed for two more. Notre Dame (1-2) lost for the fourth time in its past five games.
The Spartans scored 36 straight points after surrendering the opening touchdown to grab a 36-7 lead. Notre Dame responded with 21 unanswered points to pull within 36-28 with 6:02 remaining.
Notre Dame coach Brian Kelly said too many mistakes cost his team. The Fighting Irish committed three turnovers, including a botched punt return that led to an early Michigan State touchdown.
"Guys battled really hard," Kelly said. "We got too far behind. When you get yourself in that kind of hole, it's hard to dig out against a really good team."
After leading 15-7 at halftime, Michigan State opened the third quarter with three touchdowns to go up by 29. Holmes scored on runs of 3 yards and 73 yards, and Scott added a 9-yard touchdown against a tired defense.
Kizer rallied the Fighting Irish to make it a one-score game late in the fourth quarter. He connected with wide receiver Equanimeous St. Brown for a 15-yard touchdown with 2:40 remaining in the third quarter. Kizer finished the next series with a 3-yard touchdown run to pull within 36-21.
The Fighting Irish made it a one-score game when Kizer fired a strike to tight end Durham Smythe for a 12-yard touchdown with 6:02 to play. However, Notre Dame's next drive was stifled as Kizer was sacked on third down by Michigan State nose tackle Raequan Williams.
Dantonio said Notre Dame deserved credit for fighting back.
"That wave starts to roll on you," Dantonio said. "It's tough to stop. They get momentum going and they're making some plays. But we found a way."
Notre Dame opened the scoring on a 14-yard rushing touchdown by Kizer with 3:07 remaining in the first quarter. Kizer took the snap out of the shotgun formation and cut toward the left pylon.
Michigan State capitalized on a special-teams miscue by Notre Dame to grab an 8-7 lead with 9:30 to play in the second quarter. The Spartans went three-and-out and punted the ball across midfield, but the ball hit Notre Dame's Miles Boykin in the leg and was recovered by Michigan State.
Given new life, the Spartans' offense scored on the next play. O'Connor lofted a 38-yard pass down the left sideline to wide receiver Donnie Corley, who ripped the ball from Notre Dame cornerback Cole Luke for a touchdown. Michigan State added a two-point conversion as tight end Josiah Price hauled in a pass on a trick play from wide receiver Matt Macksood.
Michigan State increased its lead to 15-7 in the final minute of the first half. O'Connor flipped a pass to wide receiver R.J. Shelton, who swept left to right and raced to the end zone for a 10-yard score.
Notre Dame dropped to 1-2 for the first time since 2011.
"We had a couple turnovers in the second quarter," Kizer said. "In a game like this, you can't do that," Kizer said.
NOTES: Notre Dame WR Torii Hunter Jr. returned to action after sitting out last week's game against Nevada because of a concussion. ... Michigan State LB Jon Reschke made his season debut after he was sidelined last week because of an unspecified injury. ... Notre Dame CB Nick Coleman started in place of CB Shaun Crawford, who ruptured his left Achilles tendon one week earlier. ... Michigan State LB Ed Davis was active for the first time in two seasons. Davis missed all of last season because of a torn ACL. ... Notre Dame honored members of its 1966 championship team during a pregame ceremony.