Mix yogurt, garlic, ginger, salt, turmeric, and garam masala. Coat chicken pieces well. Marinate for 20 minutes or overnight.
Heat oil in a heavy-bottom pot. Add cumin seeds, then chopped onions. Cook on medium-low heat until deep golden brown.
Add garlic and ginger. Cook for 2 minutes. Add tomatoes and tomato purée. Cover and cook for 15-20 minutes on low heat.
Add salt, turmeric, garam masala, chili powder, and coriander powder. Cook for 4-5 minutes.
Add marinated chicken and 150ml water. Mix well, cover, and cook on low-medium heat for 40-45 minutes. Stir after 15 minutes to prevent sticking.
When oil separates on top, the curry is ready. Turn off heat and let rest for 5 minutes.
Garnish with fresh cilantro and serve hot with basmati rice or naan.