[no subject]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I thought the only advantage we define it here is to restrict the DTS
using the priority value between the CMDQ_THR_PRIO_LOWEST and
CMDQ_THR_PRIO_HIGHEST.

> > Or could you give me an example for what should be binding and what
> > should not be binding?
> 
> Look at all clock IDs of recent arm64 SoC clock controllers.
> 

I think clock IDs are the same as the actual bit to set into the
hardware register.

> > 
> > 
> > Considering to these 3 points, I think GCE thread priority is
> > suitable
> > to be part of the Device Tree Binding:
> > 
> > 1. Describing Hardware Properties
> > - The Device Tree is a data structure for describing hardware, and
> > GCE
> > thread priority, as part of the hardware, should be described in
> > the
> > Device Tree.
> 
> I thought we talk about bindings, not DeviceTree. Where is any
> Devicetree here? Please point me to the code which is Devicetree in
> this
> patch.
> 
> 
> > 
> > 2. Driver Usage
> > - Device Tree data is used by drivers to initialize and configure
> > hardware, and GCE thread priority is necessary configuration data
> > for
> > the driver. After parsing the mboxes args from DTS, CMDQ driver use
> > it
> > to configure GCE thread.
> 
> We talk about bindings, so why are you describing something else?
> 
> > 
> > 3. Standardization
> > - Device Tree bindings should be standardized, and GCE thread
> > priority
> > should have consistent meaning and usage across different hardware
> > platforms. Looking into the latest header: mediatek,mt8188-gce.h,
> > mediatek,mt6795-gce.h and mt8195-gce.h, they all have defined GCE
> > thread priority.
> 
> None of above arguments have anything related to the talk here. You
> invent some stuff like "standardization" or "driver usage".
> 

I 'm sorry to keep misunderstanding your question.
Please forget about that.

> > 
> > > > 
> > > > It's hard to find where the priority is used in existing driver
> > > > code
> > > > because we parsed it from DTS.
> > > 
> > > So not a binding.
> > > 
> > > > 
> > > > It is used in all mediaTeks' DTS using the GCE.
> > > > For example, in mt8195.dts:
> > > > 
> > > > vdosys0: syscon@1c01a000 {
> > > >     compatible = "mediatek,mt8195-vdosys0", "mediatek,mt8195-
> > > > mmsys",
> > > > "syscon";
> > > >     reg = <0 0x1c01a000 0 0x1000>;
> > > >     mboxes = <&gce0 0 CMDQ_THR_PRIO_4>;
> > > >     #clock-cells = <1>;
> > > >     mediatek,gce-client-reg = <&gce0 SUBSYS_1c01XXXX 0xa000
> > > > 0x1000>;
> > > > }
> > > > 
> > > > CMDQ driver(mtk-cmdq-mailbox.c) will get the args parsed from
> > > > mboxes
> > > > property in cmdq_xlate() and then it will store CMDQ_THR_PRIO_4
> > > > to
> > > > the
> > > > specific thread structure.
> > > 
> > > So not a binding.
> > > 
> > > > The user of CMDQ driver will send command to CMDQ driver by
> > > > cmdq_mbox_send_data(), and this priority setting will be
> > > > configured
> > > > to
> > > > GCE hardware thread.
> > > 
> > > And other things there are the same, we do not talk only about
> > > this
> > > one
> > > thing. I asked last time to drop which is not a binding.
> > > 
> > > 
> > 
> > I just reference all the previous mediatek,mtXXXX-gce.h to add the
> > same
> > binding. Except for the GPR part I added this time, I don't know
> > what
> > else should be dropped.
> 
> Your commit msg does not help me, either. Why this is supposed to be
> a
> binding? Basically your rationale is: someone added headers, so I
> call
> it binding.
> 
> This is invalid argument.
> 
> Someone added junk, incorrect style or bugs, so you do the same?
> 
> 

Definitely not. I just not understand the meaning of binding.
So I just try to recall your memory why the previous headers are
accepted. Sorry about that.

> > 
> > > ...
> > > 
> > > > > > +
> > > > > > +/*
> > > > > > + * GCE General Purpose Register (GPR) support
> > > > > > + * Leave note for scenario usage here
> > > > > > + */
> > > > > > +/* GCE: write mask */
> > > > > 
> > > > > That's a definite no-go. Register masks are not bindings.
> > > > > 
> > > > 
> > > > I'm sorry to the confusion.
> > > > 
> > > > These defines are the index of GCE General Purpose Register for
> > > > generating instructions, they are not register masks.
> > > 
> > > Index of register is also sounding like register.
> > > 
> > > > 
> > > > The comment "/* GCE: write mask */" is briefly describe that
> > > > the
> > > > usage
> > > > of GCE_GPR_R0 and GCE_GPR_R01 is used to store the register
> > > > mask
> > > > when
> > > > GCE executing the WRITE instruction. And it can also store the
> > > > register
> > > > mask of POLL and READ instruction.
> > > > 
> > > > I will add more words to make this comment clearer, like this:
> > > > /*GCE: store the mask of instruction */
> > > 
> > > Not sure, because I feel you just avoid doing what is right and
> > > keep
> > > pushing your own narrative. Where is it used in the driver?
> > > 
> > > I just looked for "GCE_GPR_R00" - no usage at all. So not a
> > > binding.
> > > 
> > 
> > Currently, GCE_GPR_R15 is used for generating POLL instruction and
> > it
> > has been defined as a MACRO `#define CMDQ_POLL_ADDR_GPR (15)`
> > in mtk-cmdq-helper.c.
> 
> I search for GCE_GPR_R15. No usage at all.
> 

Yes, GCE_GPR_RXX is not used currently. I'll drop them.

> Point me to specific line in your code. Paste it here.
> 
> Above #define does not use.
> 
> I am finishing replying, because you keep avoiding actual answers and
> bring some false proves forcing me to re-iterate the same over and
> over.
> 
> Point to specific line of code and you point to something else and
> then
> claim this is argument in discussion.
> 

Since mt8196.dtsi has not sent to upstream, I will post the same
bindings in mediatek,mt8188-gce.h from DTS to the CMDQ driver code.

Please help me to check if it can be token into account as a binding.

1. include/dt-bindings/mailbox/mediatek,mt8188-gce.h: line 14:
#define CMDQ_THR_PRIO_4 4

arch/arm64/boot/dts/mediatek/mt8188.dtsi: line 2622:
vdosys0: syscon@1c01d000{
    mboxes = <&gce 0 CMDQ_THR_PRIO_4>;
}

drivers/gpu/drm/mediatek/mtk_crtc.c: line 1069:
mtk_crtc->cmdq_client.chan =
    mbox_request_channel(&mtk_crtc->cmdq_client.client, i);

drivers/mailbox/mailbox.c: line 418:
if (of_parse_phandle_with_args(dev->of_node, "mboxes",
                               "mbox-cells", index, &spec)) {
...
}
chan = mbox->of_xlate(mbox, &spec);

drivers/mailbox/mtk-cmdq-mailbox.c: line 574:
static struct mbox_chan *cmdq_xlate(struct mbox_controller *mbox,
        const struct of_phandle_args *sp){
    thread->priority = sp->arg[1];
}

drivers/mailbox/mtk-cmdq-mailbox.c: line 424:
static int cmdq_mbox_send_data(struct mbox_chan *chan, void *data) {
    writel(thread->priority, thread->base + CMDQ_THR_PRIORITY);
}


2. include/dt-bindings/mailbox/mediatek,mt8188-gce.h: line 21:
#define SUBSYS_1c00XXXX 3

arch/arm64/boot/dts/mediatek/mt8188.dtsi: line 2490:
ovl0: ovl@1c000000 {
    mediatek,gce-client-reg = <&gce SUBSYS_1c00XXXX 0x0000 0x1000>;
}

drivers/gpu/drm/mediatek/mtk_disp_ovl.c: line 621:
ret = cmdq_dev_get_client_reg(dev, &priv->cmdq_reg, 0);

drivers/soc/mediatek/mtk-cmdq-helper.c: line 59:
int cmdq_dev_get_client_reg(struct device *dev,
                        struct cmdq_client_reg *client_reg, int idx) {
    client_reg->subsys = (u8)spec.arg[0];
}

drivers/gpu/drm/mediatek/mtk_disp_ovl.c: line 361:
void mtk_ovl_layer_on(struct device *dev, unsigned int idx,
                      struct cmdq_pkt *cmdq_pkt){
    mtk_ddp_write_mask(cmdq_pkt, BIT(idx), &ovl->cmdq_reg, ovl->regs,
                       DISP_REG_OVL_SRC_CON, BIT(idx));
}

drivers/gpu/drm/mediatek/mtk_ddp_comp.c: line 101:
void mtk_ddp_write_mask(struct cmdq_pkt *cmdq_pkt, unsigned int value,
                struct cmdq_client_reg *cmdq_reg, void __iomem *regs,
                unsigned int offset, unsigned int mask) {
    cmdq_pkt_write_mask(cmdq_pkt, cmdq_reg->subsys,
                        cmdq_reg->offset + offset, value, mask);
}

drivers/soc/mediatek/mtk-cmdq-helper.c: line 177:
cmdq_pkt_write_mask()
cmdq_pkt_write()
cmdq_pkt_append_command() {
// generate instruction to the cmdq buffer that will be executed by GCE
    *cmdq_ptr = inst;
}


3. include/dt-bindings/mailbox/mediatek,mt8188-gce.h: line 526:
#define CMDQ_EVENT_VDO0_DISP_STREAM_DONE_0 574

arch/arm64/boot/dts/mediatek/mt8188.dtsi: line 2597:
mutex0: mutex@1c016000 {
    mediatek,gce-events = <CMDQ_EVENT_VDO0_DISP_STREAM_DONE_0>;
}

drivers/gpu/drm/mediatek/mtk_crtc.c: line 1077:
ret = of_property_read_u32_index(priv->mutex_node,
                                 "mediatek,gce-events",
                                 i,
                                 &mtk_crtc->cmdq_event);

drivers/gpu/drm/mediatek/mtk_crtc.c: line 592:
cmdq_pkt_clear_event(cmdq_handle, mtk_crtc->cmdq_event);

drivers/soc/mediatek/mtk-cmdq-helper.c: line 363:
cmdq_pkt_clear_event(s
truct cmdq_pkt *pkt, u16 event) {
    struct cmdq_instruction inst = {
  
.op = CMDQ_CODE_WFE,
        .value = CMDQ_WFE_UPDATE,
        .event =
event
    };

    if (event >= CMDQ_MAX_EVENT)
        return -EINVAL;

    return cmdq_pkt_append_command(pkt, int);
}

drivers/soc/mediatek/mtk-cmdq-helper.c: line 177:
cmdq_pkt_append_command(struct cmdq_pkt *pkt,
                        struct cmdq_instruction *inst) {
// generate instruction to the cmdq buffer that will be executed by GCE
    *cmdq_ptr = inst;
}


I'm appreciate for your patience. Thanks again.

Regards,
Jason-JH.Lin

> 
> 
> Best regards,
> Krzysztof




[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux