Re: [PATCH v10 1/1] Mailbox: Add support for Platform Communication Channel

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

 



On 9 November 2014 23:13, Jassi Brar <jaswinder.singh@xxxxxxxxxx> wrote:
> On 9 November 2014 22:52, Ashwin Chaugule <ashwin.chaugule@xxxxxxxxxx> wrote:
>> On 9 November 2014 11:18, Jassi Brar <jaswinder.singh@xxxxxxxxxx> wrote:
>>> On 9 November 2014 20:50, Ashwin Chaugule <ashwin.chaugule@xxxxxxxxxx> wrote:
>>>> Hi Jassi,
>>>>
>>>> On 9 November 2014 08:48, Jassi Brar <jaswinder.singh@xxxxxxxxxx> wrote:
>>>>> On 7 November 2014 20:22, Ashwin Chaugule <ashwin.chaugule@xxxxxxxxxx> wrote:
>>>>>> +
>>>>>> +/**
>>>>>> + * pcc_mbox_request_channel - PCC clients call this function to
>>>>>> + *             request a pointer to their PCC subspace, from which they
>>>>>> + *             can get the details of communicating with the remote.
>>>>>> + * @cl: Pointer to Mailbox client, so we know where to bind the
>>>>>> + *             Channel.
>>>>>> + * @index: The PCC Subspace index as parsed in the PCC client
>>>>>> + *             ACPI package. This is used to lookup the array of PCC
>>>>>> + *             subspaces as parsed by the PCC Mailbox controller.
>>>>>> + *
>>>>>> + * Return: Pointer to the Mailbox Channel if successful or
>>>>>> + *             ERR_PTR.
>>>>>> + */
>>>>>> +struct mbox_chan *pcc_mbox_request_channel(struct mbox_client *cl,
>>>>>> +               int index)
>>>>>> +{
>>>>>> +       struct device *dev = pcc_mbox_ctrl.dev;
>>>>>> +       struct mbox_chan *chan;
>>>>>> +       unsigned long flags;
>>>>>> +
>>>>>> +       /*
>>>>>> +        * Each PCC Subspace is a Mailbox Channel.
>>>>>> +        * The PCC Clients get their PCC Subspace ID
>>>>>> +        * from their own tables and pass it here.
>>>>>> +        * This returns a pointer to the PCC subspace
>>>>>> +        * for the Client to operate on.
>>>>>> +        */
>>>>>> +       chan = &pcc_mbox_chan[index];
>>>>>> +
>>>>>> +       if (!chan || chan->cl) {
>>>>>> +               dev_err(dev, "%s: PCC mailbox not free\n", __func__);
>>>>>> +               return ERR_PTR(-EBUSY);
>>>>>> +       }
>>>>>> +
>>>>>> +       spin_lock_irqsave(&chan->lock, flags);
>>>>>> +       chan->msg_free = 0;
>>>>>> +       chan->msg_count = 0;
>>>>>> +       chan->active_req = NULL;
>>>>>> +       chan->cl = cl;
>>>>>> +       init_completion(&chan->tx_complete);
>>>>>> +
>>>>>> +       if (chan->txdone_method == TXDONE_BY_POLL && cl->knows_txdone)
>>>>>> +               chan->txdone_method |= TXDONE_BY_ACK;
>>>>>> +
>>>>>> +       spin_unlock_irqrestore(&chan->lock, flags);
>>>>>> +
>>>>>> +       return chan;
>>>>>> +}
>>>>>> +EXPORT_SYMBOL_GPL(pcc_mbox_request_channel);
>>>>>
>>>>> I have just sent out a patch https://lkml.org/lkml/2014/11/9/75 and
>>>>> kept same people in CC.
>>>>> That patch keeps the api same for DT and ACPI drivers.
>>>>
>>>> Thanks for taking a look.
>>>>
>>>> Your patch looks similar in concept to one of my earlier patches. But
>>>>
>>> Using ifdefs wasn't the right way to enable ACPI channel mapping. The
>>> mailbox core should be able to work with both DT and ACPI at the same
>>> time.
>>
>> Agreed. But my point there was to add an alternative to the DT
>> specific of_xlate, which is exactly what you've done in global_xlate.
>>
> We all have good intentions, the problem is the code :)
>
>>>> based on the discussions that followed since, we decided that its best
>>>> to add a separate PCC lookup and registration API. The main reason
>>>> being, we dont have a way to list all mbox providers in ACPI in a way
>>>> that DT does. e.g. in DT, the client->dev is used to look up mbox
>>>> controllers. In ACPI, a client cant specify which mbox controllers to
>>>> associate with, if it can attach to multiple. With the PCC specific
>>>> API, if the client calls it, the controller knows where to look,
>>>> because that lookup is PCC specific.
>>>>
>>>> In your patch, the assumption that PCC is the only ACPI mbox provider,
>>>> maybe true today, but that can change anytime.
>>>>
>>> Please read my patch again, we can have ACPI as well as DT populated
>>> clients. All that you intend to do with this patch can be done there
>>> and _without_ adding new apis.
>>
>> Read it again. Not arguing that your patch wont work for DT and ACPI,
>> but your assumption that ACPI supports PCC as the only mbox
>> controller, may not hold true. The global_xlate function will work
>> fine for PCC, but may not work for other ACPI (non-DT) mbox
>> controllers. Using the signature field/index byte works only for PCC.
>> We've already been through this discussion with Mark and Arnd and we
>> came up with the PCC API.
>>
> Please read it yet again. There is no assumption that PCC is the only
> mbox in ACPI (though I think that is very likely). The function and
> its argument are both named _global_. 'Signature' is mentioned only as
> an example in case of PCC. The PCC controller driver could expect the
> global_id to be 'signature' of the subspace, similarly another non-DT
> mailbox controller driver will expect its own different 'signature'
> (say 0xdead0000 | id_16bits). In the patch I submitted we try
> .global_xlate() of all such mboxes and only one, which finds its
> id-space specified, will return a channel.
>
> Ideally, global-id space isn't very clean, but for mailbox we anyway
> have to have a direct understanding between controller and client
> drivers. So having global IDs is a great tradeoff if we avoid messing
> up the api.

How is this different than expecting the client to pass a string name
of the mbox controller it wants?

Ashwin
--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux