Trim any fat off the chicken thighs, then cut each in half. Put them into a large saucepan with the onions, cardamom, mirchi, cinnamon, garlic, ginger, turmeric, curd and salt to taste.
Place the pan over a medium-high heat and stir until the chicken starts sizzling. Continue to cook, stirring frequently, until the chicken begins to release its juices, then reduce the heat to low, cover the pan and simmer for 12 minutes, stirring occasionally.
Meanwhile, chop the spinach, discarding any thick stems.
Uncover the saucepan and increase the heat to medium-high. Continue cooking for 5-6 minutes until most of the liquid has evaporated and the sauce has thickened, stirring frequently to prevent it sticking to the bottom of the pan.
Stir the tomatoes into the chicken mixture and continue to cook, uncovered, for 1-2 minutes until they are well blended into the sauce.
Add the spinach in batches, stirring well. As soon as the first batch begins to wilt, add the next and keep stirring. Reduce the heat to low and cook, uncovered, for 5 minutes, or until the chicken juices run clear when the pieces are pierced.
Add the cream and garam masala, stirring until well blended. Remove the cinnamon stick and serve.