If I have things rightly -- English "-sham" place-names derive from very many centuries ago: Anglo-Saxon stuff about somebody's "ham" = home or farmstead. Thus, Topsham: the home / farmstead ("ham") of a chap named something like Toppa.
The pronunciations "Tops-ham", "Favers-ham", etc., could thus be regarded as etymologically / linguistically more correct. Somehow, though -- most people in England seem to go for the alternative pronunciation, with the "sh" as in "shout", or "shrub". "Tops-ham" and such, somehow strikes many of us as precious and pedantic -- as from Phil.'s wife's snobby friend (also Ash Bridge's booking clerk) -- or just plain silly. Maybe a result of nearly everyone having been, for the past century-and-some, able to read and write: we tend to take our pronunciation from the way a word is spelt -- so the "sh" sound, seems the obvious way to go.