Remove the florets from the broccoli and slice them into bite-sized pieces. Slice off any gnarly bits from the stem, then finely dice it.
Melt 2 tbsp butter in a large pot over medium-high heat. Add in the broccoli stem, alongside onion, celery and carrot. Fry until everything has softened and has started to tinge golden, then add in the garlic and fry for 1-2mins longer.
Add in the broccoli florets, then pour in the stock and season with salt & pepper (the stock should barely cover the broccoli). Lower heat, pop on the lid and simmer for around 20mins, or until the broccoli is fork-tender.
Meanwhile, dice the bread into large bite-sized pieces and place on a large greaseproof baking tray. Toss in a good drizzle of olive oil and a hefty pinch of salt & pepper. Toss in parmesan, then sprinkle more over the top. Bake in the oven at 180C/350F for around 10mins, or until deep golden and visibly crispy. I typically just eyeball the measurements for these!
Once the broccoli is tender, turn off the heat and use a hand blender to blitz everything until smooth. It should be fairly thick at this point (thicker soup = cheese melts easier). Stir in cream, then stir in the cheese a handful at a time. Adjust seasoning if needed and stir in more stock a splash at a time to thin out if desired.
Serve soup with croutons and more cheese (optional). Enjoy!