Combine garlic, ginger, turmeric, garam masala, coriander, and cumin in a small bowl. In a larger separate bowl, whisk together yogurt, salt, and half of spice mixture. Add chicken and turn to coat. Cover bowl, place it in the refrigerator, and allow chicken to marinate for 4-6 hours.
Heat butter in a large heavy pot over medium heat. Add onion, tomato paste, cardamom, and red pepper flakes and cook, stirring often, until tomato paste has darkened and onion is soft, about 5 minutes. Add remaining half of spice mixture and cook, stirring often, until bottom of pot begins to brown, about 4 minutes.
Add tomatoes with juices. Bring to a boil, reduce heat, and simmer, stirring often and scraping up browned bits from bottom of pot, until sauce thickens, 8-10 minutes.
Add cream and chopped cilantro. Simmer, stirring occasionally, until sauce thickens, 30-40 minutes.
Meanwhile, preheat broiler. Line a rimmed baking sheet with foil and set a wire rack inside sheet. Arrange chicken on rack in a single layer. Broil until chicken starts to blacken in spots, but is not cooked through, about 10 minutes.
Cut chicken into bite-size pieces, add to sauce, and simmer, stirring occasionally, until chicken is cooked through, 8-10 minutes. Serve over basmati with rice and garnish with cilantro, if desired.