Melt butter in a Dutch oven over medium heat; add onion, celery, and garlic, and sauté 10 minutes or until tender. Add broth, potato, and chopped rosemary. Bring to a boil; cover, reduce heat, and simmer 25 minutes or until potato is very tender.
Meanwhile, heat a large nonstick skillet over medium-high heat. Add ham, and cook until browned and crisp on all sides. Remove from heat; set aside.
Process potato mixture, in batches, in a food processor or blender until smooth. Return potato mixture to Dutch oven; stir in peanut butter. Cook over medium-low heat until soup is smooth, stirring often. Stir in whipping cream, salt, and pepper; cook until thoroughly heated.
To serve, ladle soup into individual bowls. Top each serving with ham. Garnish, if desired.