Davis was interested in acting from the age of eight, He attended the National Youth Theatre and Joan Littlewood's Theatre Workshop.
In 1977, he was cast in the lead role in the play Gotcha! about an under-achieving student.
He later landed the role of midshipman Edward "Ned" Young in The Bounty. He began a long association with Mike Leigh with roles in films including High Hopes.
He has also made numerous television appearances. More recent roles have seen him mainly cast as disreputable characters, Smallweed in the BBC adaptation of Bleak House. He played a main part in the first episode of Sherlock. In 2013 he starred in BBC Three's Being Human.
Davis has one child, Hugo, to a previous relationship in 1996. In 2002, he married actress Eve Matheson and they have one daughter, Amy Elisabeth.