RPC Calls From Outside of Class

Hello There Community,
I know I wont get the answer but, I’m still in believe that someone could explain me things. I will draw a quick picture.
When I call RPC function from controller of pawn its not working.

player controller / pawn (controlled by ai but owner is controller)

// SomePlayerController.h

  ASomePlayerPawn* OwningPawn;

  UFUNCTION()
  void MarkLocation()

// SomePlayerController.cpp

  void ASomePlayerController::MarkLocation ()
  {
       // below function is RPC
        OwningPawn->MoveToLocation(FVector(0.f,0.f,0.f));
  }

// SomePlayerPawn.h

   UFUNCTION(Server, Reliable, WithValidation)
   MoveToLocation(FVector MoveTo);

// SomePlayerPawn.cpp

   void MoveToLocation_Implementation(FVector MoveTo)
   {
       // bla bla it doesnt call here at all.
   }

but when I call this function an RPC that I made inside player controller, its working.
I wonder whats the issue here.

Is the controller properly possesing the pawn? You can only call RPC’s on actors you are the owner of, and by default the act of posessing a pawn makes you it’s owner.

Actors may only have one owner, and the root of an ownership chain should be the player controller.

Its possessed by ai controller. Its owner is playercontroller

AI Controllers are spawned server-side and they do not replicate, so the client can’t be aware of it unless they spawned the AI controller locally.

If they spawned the AI controller locally, the Server won’t know it exists. The ownership chain has to be set by the Server, not the Client. Having two controllers trying to own a pawn is an odd setup anyway.

Here is my full structure and ownership.
Aicontroller belongs to server. The thing is,
Pawn has been controlled by the AI and AI possesses it.
I have player camera which is owned, controlled and possessed by player controller.
And my player controller has reference of pawn and owns it.

Might be something wrong in my design?!?