In a large pot, melt butter over medium heat and sauté onion until softened, about 5 minutes, then add garlic and cook for 1 minute more.
Add diced potatoes, broth, salt, pepper, and thyme, then bring to a boil.
Reduce heat and simmer for 15-20 minutes until potatoes are fork-tender.
Use a potato masher to mash about half the potatoes directly in the pot, leaving the rest chunky for texture.
Stir in milk and heat through for 2-3 minutes without boiling.
Taste and adjust seasoning as needed, then serve hot with optional toppings like shredded cheese, bacon bits, or green onions.