Combine the yogurt, crushed garlic and ginger, salt, red chili, garam masala, and cumin powder in a large bowl. Add the chopped beef and turn to coat. Cover and refrigerate for a minimum of 1 hour and up to 8 hours. Once you are ready to cook, remove from the fridge and ideally, let it come to room temperature before cooking it.
Heat oil in a heavy-bottomed pot over medium-low heat until it begins to shimmer. Add the chopped onion and fry until they soften and brown at the edges, about 7 to 10 minutes.
Increase heat to medium-high, and add the beef with the yogurt marinade. Fry until evenly brown, about 5 minutes.
Stir in the crushed tomatoes, and 1 cup of water. Cover and bring to boil.
Lower to a gentle simmer. Let the beef cook, with the lid still on, on low heat for 2 to 2 ½ hours until tender. Stir and add small amounts of water (no more than ¼ cup at a time), occasionally, to prevent it from sticking to the pot.
Once soft, bring heat to medium-high, and briefly stir until the oil begins to separate, about 2 to 3 minutes. Add 1 to 2 tablespoon of water if necessary. Remove from heat and transfer to serving bowl. Garnish with chopped cilantro (optional).