diff --git a/tools/patman/control.py b/tools/patman/control.py
index b8a4591..990e07f 100644
--- a/tools/patman/control.py
+++ b/tools/patman/control.py
@@ -9,12 +9,21 @@
 """
 
 import os
+import re
 import sys
+import traceback
 
-from patman import checkpatch
-from patman import patchstream
+try:
+    from importlib import resources
+except ImportError:
+    # for Python 3.6
+    import importlib_resources as resources
+
 from u_boot_pylib import gitutil
 from u_boot_pylib import terminal
+from u_boot_pylib import tools
+from patman import checkpatch
+from patman import patchstream
 
 
 def setup():
@@ -245,3 +254,44 @@
     from patman import status
     status.check_patchwork_status(series, found[0], branch, dest_branch, force,
                                   show_comments, url)
+
+
+def do_patman(args):
+    if args.cmd == 'send':
+        # Called from git with a patch filename as argument
+        # Printout a list of additional CC recipients for this patch
+        if args.cc_cmd:
+            re_line = re.compile(r'(\S*) (.*)')
+            with open(args.cc_cmd, 'r', encoding='utf-8') as inf:
+                for line in inf.readlines():
+                    match = re_line.match(line)
+                    if match and match.group(1) == args.patchfiles[0]:
+                        for cca in match.group(2).split('\0'):
+                            cca = cca.strip()
+                            if cca:
+                                print(cca)
+
+        elif args.full_help:
+            with resources.path('patman', 'README.rst') as readme:
+                tools.print_full_help(str(readme))
+        else:
+            # If we are not processing tags, no need to warning about bad ones
+            if not args.process_tags:
+                args.ignore_bad_tags = True
+            send(args)
+
+    # Check status of patches in patchwork
+    elif args.cmd == 'status':
+        ret_code = 0
+        try:
+            patchwork_status(args.branch, args.count, args.start, args.end,
+                             args.dest_branch, args.force, args.show_comments,
+                             args.patchwork_url)
+        except Exception as exc:
+            terminal.tprint(f'patman: {type(exc).__name__}: {exc}',
+                            colour=terminal.Color.RED)
+            if args.debug:
+                print()
+                traceback.print_exc()
+            ret_code = 1
+        sys.exit(ret_code)
