Prepare the aromatics: In a large pot, melt butter over medium heat. Add onions and garlic, and sauté until soft and fragrant (about 5 minutes).
Cook the potatoes: Add diced potatoes and broth. Bring to a boil, then reduce heat and simmer until potatoes are tender (15–20 minutes).
Blend the soup: Use an immersion blender or regular blender to puree part or all of the soup until smooth, leaving some potato chunks for texture.
Add cream and seasonings: Stir in milk or cream, season with salt and pepper to taste. Heat gently for 3–5 minutes until warmed through.
Serve: Ladle into bowls and garnish with your choice of cheese, bacon, or green onions. Enjoy warm.