]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
Merge branch 'v5.5-next/cmdq-stable' into v5.5-next/soc
authorMatthias Brugger <matthias.bgg@gmail.com>
Fri, 10 Jan 2020 10:00:45 +0000 (11:00 +0100)
committerMatthias Brugger <matthias.bgg@gmail.com>
Fri, 10 Jan 2020 10:00:45 +0000 (11:00 +0100)
1  2 
drivers/soc/mediatek/mtk-cmdq-helper.c

index 1127c19c4e91ec19af5593dd1db09cc7fbb4146c,9add0fd5fa6cc5964125885d2a3bf81df7fbd195..de20e6cba83b35911699e5bf9e06b2e890dbae32
@@@ -9,10 -9,54 +9,52 @@@
  #include <linux/mailbox_controller.h>
  #include <linux/soc/mediatek/mtk-cmdq.h>
  
- #define CMDQ_ARG_A_WRITE_MASK 0xffff
  #define CMDQ_WRITE_ENABLE_MASK        BIT(0)
+ #define CMDQ_POLL_ENABLE_MASK BIT(0)
  #define CMDQ_EOC_IRQ_EN               BIT(0)
 -#define CMDQ_EOC_CMD          ((u64)((CMDQ_CODE_EOC << CMDQ_OP_CODE_SHIFT)) \
 -                              << 32 | CMDQ_EOC_IRQ_EN)
  
+ struct cmdq_instruction {
+       union {
+               u32 value;
+               u32 mask;
+       };
+       union {
+               u16 offset;
+               u16 event;
+       };
+       u8 subsys;
+       u8 op;
+ };
+ int cmdq_dev_get_client_reg(struct device *dev,
+                           struct cmdq_client_reg *client_reg, int idx)
+ {
+       struct of_phandle_args spec;
+       int err;
+       if (!client_reg)
+               return -ENOENT;
+       err = of_parse_phandle_with_fixed_args(dev->of_node,
+                                              "mediatek,gce-client-reg",
+                                              3, idx, &spec);
+       if (err < 0) {
+               dev_err(dev,
+                       "error %d can't parse gce-client-reg property (%d)",
+                       err, idx);
+               return err;
+       }
+       client_reg->subsys = (u8)spec.args[0];
+       client_reg->offset = (u16)spec.args[1];
+       client_reg->size = (u16)spec.args[2];
+       of_node_put(spec.np);
+       return 0;
+ }
+ EXPORT_SYMBOL(cmdq_dev_get_client_reg);
  static void cmdq_client_timeout(struct timer_list *t)
  {
        struct cmdq_client *client = from_timer(client, t, timer);