Melt butter in a large pot over medium heat.
Add chopped onion and sauté until soft.
Stir in minced garlic and cook for 30 seconds.
Add diced potatoes and chicken broth to the pot.
Bring to a boil, then reduce heat and simmer for 15 minutes.
In a small bowl, mix flour with a little milk to make a slurry.
Stir the slurry into the soup to thicken.
Add cooked ham, remaining milk, and heavy cream.
Simmer for another 10 minutes until creamy and heated through.
Season with salt and black pepper, then garnish with green onions.