Heat the oil in a large saucepan over medium heat and fry the whole spices for about 20 seconds, or until they start to sizzle. Add the onions along with a pinch of salt, and fry gently for around 20 minutes until they become soft, deeply browned, and rich. Do not rush this process, as the overall color of the curry depends on it. Meanwhile, place the chopped tomatoes into a food processor and blitz until smooth, or use a hand blender in a jug. Set aside.
Add the ginger and garlic pastes to the pan and cook for 30 seconds. Add the lamb, 2 teaspoons of black pepper, and the turmeric, stirring well to coat. Cover the pan and cook over medium heat for 15 minutes. Then remove the lid and continue cooking for another 15 minutes until the liquid from the meat has evaporated and the oil rises to the top and side of the pan.
Stir in the ground coriander, cumin, both chili powders, tandoori masala, diced tomatoes, blitzed tomatoes, and tomato purée. Cook for 4-5 minutes until the tomatoes soften and dissolve. Season with salt to taste and add 500ml of water, depending on how thick you want the curry. Simmer for about 1 hour 30 minutes to 1 hour 45 minutes until the meat is tender. If the sauce needs to reduce slightly, simmer uncovered for an additional 15 minutes. Garnish with coriander, sliced chilies, and potatoes (see tip below), and serve with rice or naan.