All of lore.kernel.org
 help / color / mirror / Atom feed
From: kishon@ti.com (Kishon Vijay Abraham I)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH RESEND v10 3/4] PHY: add APM X-Gene SoC 15Gbps Multi-purpose PHY driver
Date: Thu, 27 Feb 2014 12:17:20 +0530	[thread overview]
Message-ID: <530EDF78.4050408@ti.com> (raw)
In-Reply-To: <CAPw-ZTn=za14-x9fjnDfcY419i5nuFPqsQp_r-75zjyHf11E4w@mail.gmail.com>

On Thursday 27 February 2014 12:11 PM, Loc Ho wrote:
> Hi,
>
>>>>>>> +
>>>>>>> +static void sds_wr(void __iomem *csr_base, u32 indirect_cmd_reg,
>>>>>>> +                  u32 indirect_data_reg, u32 addr, u32 data)
>>>>>>> +{
>>>>>>> +       u32 val;
>>>>>>> +       u32 cmd;
>>>>>>> +
>>>>>>> +       cmd = CFG_IND_WR_CMD_MASK | CFG_IND_CMD_DONE_MASK;
>>>>>>> +       cmd = CFG_IND_ADDR_SET(cmd, addr);
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> This looks hacky. If 'CFG_IND_WR_CMD_MASK | CFG_IND_CMD_DONE_MASK'
>>>>>> should
>>>>>> be set then it should be part of the second argument. From the macro
>>>>>> 'CFG_IND_ADDR_SET' the first argument should be more like the current
>>>>>> value
>>>>>> present in the register right? I feel the macro (CFG_IND_ADDR_SET) is
>>>>>> not
>>>>>> used in the way it is intended to.
>>>>>
>>>>>
>>>>>
>>>>> The macro XXX_SET is intended to update an field within the register.
>>>>> The update field is returned. The first assignment lines are setting
>>>>> another field. Those two lines can be written as:
>>>>>
>>>>> cmd = 0;
>>>>> cmd |= CFG_IND_WR_CMD_MASK;            ==> Set the CMD bit
>>>>> cmd |= CFG_IND_CMD_DONE_MASK;        ==> Set the DONE bit
>>>>> cmd = CFG_IND_ADDR_SET(cmd, addr);    ===> Set the field ADDR
>>>>
>>>>
>>>>
>>>> #define  CFG_IND_ADDR_SET(dst, src) \
>>>>                   (((dst) & ~0x003ffff0) | (((u32)(src)<<4) & 0x003ffff0))
>>>>
>>>>   From this macro the first argument should be the present value in that
>>>> register. Here you reset the address bits and write the new address bits.
>>>
>>>
>>> Yes.. This is correct. I am clearing x number of bit and then set new
>>> value.
>>>
>>>> IMO the first argument should be the value in 'csr_base +
>>>> indirect_cmd_reg'.
>>>> So it resets the address bits in 'csr_base + indirect_cmd_reg' and write
>>>> down the new address bits.
>>>
>>>
>>> Yes.. The above code does just that. In addition, I am also setting
>>> the bits CFG_IND_WR_CMD_MASK and CFG_IND_CMD_DONE_MASK with the two
>>> previous statement. Think of the code flow as follow:
>>>
>>> val = readl(some void * address); /* read the register */
>>
>>
>> Where are you reading the register in your code (before CFG_IND_ADDR_SET)?
>
> I am not reading the register as I will be completely setting them.

Ok. Never-mind then. Sorry for the noise. You code is fine.

Thanks
Kishon

WARNING: multiple messages have this Message-ID (diff)
From: Kishon Vijay Abraham I <kishon@ti.com>
To: Loc Ho <lho@apm.com>
Cc: "devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
	Suman Tripathi <stripathi@apm.com>, Arnd Bergmann <arnd@arndb.de>,
	Jon Masters <jcm@redhat.com>, "patches@apm.com" <patches@apm.com>,
	linux-kernel@vger.kernel.org, Olof Johansson <olof@lixom.net>,
	Don Dutile <ddutile@redhat.com>, Tejun Heo <tj@kernel.org>,
	Tuan Phan <tphan@apm.com>,
	"linux-arm-kernel@lists.infradead.org"
	<linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH RESEND v10 3/4] PHY: add APM X-Gene SoC 15Gbps Multi-purpose PHY driver
Date: Thu, 27 Feb 2014 12:17:20 +0530	[thread overview]
Message-ID: <530EDF78.4050408@ti.com> (raw)
In-Reply-To: <CAPw-ZTn=za14-x9fjnDfcY419i5nuFPqsQp_r-75zjyHf11E4w@mail.gmail.com>

On Thursday 27 February 2014 12:11 PM, Loc Ho wrote:
> Hi,
>
>>>>>>> +
>>>>>>> +static void sds_wr(void __iomem *csr_base, u32 indirect_cmd_reg,
>>>>>>> +                  u32 indirect_data_reg, u32 addr, u32 data)
>>>>>>> +{
>>>>>>> +       u32 val;
>>>>>>> +       u32 cmd;
>>>>>>> +
>>>>>>> +       cmd = CFG_IND_WR_CMD_MASK | CFG_IND_CMD_DONE_MASK;
>>>>>>> +       cmd = CFG_IND_ADDR_SET(cmd, addr);
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> This looks hacky. If 'CFG_IND_WR_CMD_MASK | CFG_IND_CMD_DONE_MASK'
>>>>>> should
>>>>>> be set then it should be part of the second argument. From the macro
>>>>>> 'CFG_IND_ADDR_SET' the first argument should be more like the current
>>>>>> value
>>>>>> present in the register right? I feel the macro (CFG_IND_ADDR_SET) is
>>>>>> not
>>>>>> used in the way it is intended to.
>>>>>
>>>>>
>>>>>
>>>>> The macro XXX_SET is intended to update an field within the register.
>>>>> The update field is returned. The first assignment lines are setting
>>>>> another field. Those two lines can be written as:
>>>>>
>>>>> cmd = 0;
>>>>> cmd |= CFG_IND_WR_CMD_MASK;            ==> Set the CMD bit
>>>>> cmd |= CFG_IND_CMD_DONE_MASK;        ==> Set the DONE bit
>>>>> cmd = CFG_IND_ADDR_SET(cmd, addr);    ===> Set the field ADDR
>>>>
>>>>
>>>>
>>>> #define  CFG_IND_ADDR_SET(dst, src) \
>>>>                   (((dst) & ~0x003ffff0) | (((u32)(src)<<4) & 0x003ffff0))
>>>>
>>>>   From this macro the first argument should be the present value in that
>>>> register. Here you reset the address bits and write the new address bits.
>>>
>>>
>>> Yes.. This is correct. I am clearing x number of bit and then set new
>>> value.
>>>
>>>> IMO the first argument should be the value in 'csr_base +
>>>> indirect_cmd_reg'.
>>>> So it resets the address bits in 'csr_base + indirect_cmd_reg' and write
>>>> down the new address bits.
>>>
>>>
>>> Yes.. The above code does just that. In addition, I am also setting
>>> the bits CFG_IND_WR_CMD_MASK and CFG_IND_CMD_DONE_MASK with the two
>>> previous statement. Think of the code flow as follow:
>>>
>>> val = readl(some void * address); /* read the register */
>>
>>
>> Where are you reading the register in your code (before CFG_IND_ADDR_SET)?
>
> I am not reading the register as I will be completely setting them.

Ok. Never-mind then. Sorry for the noise. You code is fine.

Thanks
Kishon

WARNING: multiple messages have this Message-ID (diff)
From: Kishon Vijay Abraham I <kishon@ti.com>
To: Loc Ho <lho@apm.com>
Cc: Tejun Heo <tj@kernel.org>, Olof Johansson <olof@lixom.net>,
	Arnd Bergmann <arnd@arndb.de>, <linux-kernel@vger.kernel.org>,
	"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
	"linux-arm-kernel@lists.infradead.org" 
	<linux-arm-kernel@lists.infradead.org>,
	Don Dutile <ddutile@redhat.com>, Jon Masters <jcm@redhat.com>,
	"patches@apm.com" <patches@apm.com>, Tuan Phan <tphan@apm.com>,
	Suman Tripathi <stripathi@apm.com>
Subject: Re: [PATCH RESEND v10 3/4] PHY: add APM X-Gene SoC 15Gbps Multi-purpose PHY driver
Date: Thu, 27 Feb 2014 12:17:20 +0530	[thread overview]
Message-ID: <530EDF78.4050408@ti.com> (raw)
In-Reply-To: <CAPw-ZTn=za14-x9fjnDfcY419i5nuFPqsQp_r-75zjyHf11E4w@mail.gmail.com>

On Thursday 27 February 2014 12:11 PM, Loc Ho wrote:
> Hi,
>
>>>>>>> +
>>>>>>> +static void sds_wr(void __iomem *csr_base, u32 indirect_cmd_reg,
>>>>>>> +                  u32 indirect_data_reg, u32 addr, u32 data)
>>>>>>> +{
>>>>>>> +       u32 val;
>>>>>>> +       u32 cmd;
>>>>>>> +
>>>>>>> +       cmd = CFG_IND_WR_CMD_MASK | CFG_IND_CMD_DONE_MASK;
>>>>>>> +       cmd = CFG_IND_ADDR_SET(cmd, addr);
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> This looks hacky. If 'CFG_IND_WR_CMD_MASK | CFG_IND_CMD_DONE_MASK'
>>>>>> should
>>>>>> be set then it should be part of the second argument. From the macro
>>>>>> 'CFG_IND_ADDR_SET' the first argument should be more like the current
>>>>>> value
>>>>>> present in the register right? I feel the macro (CFG_IND_ADDR_SET) is
>>>>>> not
>>>>>> used in the way it is intended to.
>>>>>
>>>>>
>>>>>
>>>>> The macro XXX_SET is intended to update an field within the register.
>>>>> The update field is returned. The first assignment lines are setting
>>>>> another field. Those two lines can be written as:
>>>>>
>>>>> cmd = 0;
>>>>> cmd |= CFG_IND_WR_CMD_MASK;            ==> Set the CMD bit
>>>>> cmd |= CFG_IND_CMD_DONE_MASK;        ==> Set the DONE bit
>>>>> cmd = CFG_IND_ADDR_SET(cmd, addr);    ===> Set the field ADDR
>>>>
>>>>
>>>>
>>>> #define  CFG_IND_ADDR_SET(dst, src) \
>>>>                   (((dst) & ~0x003ffff0) | (((u32)(src)<<4) & 0x003ffff0))
>>>>
>>>>   From this macro the first argument should be the present value in that
>>>> register. Here you reset the address bits and write the new address bits.
>>>
>>>
>>> Yes.. This is correct. I am clearing x number of bit and then set new
>>> value.
>>>
>>>> IMO the first argument should be the value in 'csr_base +
>>>> indirect_cmd_reg'.
>>>> So it resets the address bits in 'csr_base + indirect_cmd_reg' and write
>>>> down the new address bits.
>>>
>>>
>>> Yes.. The above code does just that. In addition, I am also setting
>>> the bits CFG_IND_WR_CMD_MASK and CFG_IND_CMD_DONE_MASK with the two
>>> previous statement. Think of the code flow as follow:
>>>
>>> val = readl(some void * address); /* read the register */
>>
>>
>> Where are you reading the register in your code (before CFG_IND_ADDR_SET)?
>
> I am not reading the register as I will be completely setting them.

Ok. Never-mind then. Sorry for the noise. You code is fine.

Thanks
Kishon

  reply	other threads:[~2014-02-27  6:47 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-02-25  6:14 [PATCH RESEND v10 0/4] PHY: Add APM X-Gene SoC 15Gbps Multi-purpose PHY support Loc Ho
2014-02-25  6:14 ` Loc Ho
2014-02-25  6:14 ` Loc Ho
2014-02-25  6:14 ` [PATCH RESEND v10 1/4] PHY: Add function set_speed to generic PHY framework Loc Ho
2014-02-25  6:14   ` Loc Ho
2014-02-25  6:14   ` Loc Ho
2014-02-25  6:14   ` [PATCH RESEND v10 2/4] Documentation: Add APM X-Gene SoC 15Gbps Multi-purpose PHY driver binding documentation Loc Ho
2014-02-25  6:14     ` Loc Ho
2014-02-25  6:14     ` Loc Ho
2014-02-25  6:14     ` [PATCH RESEND v10 3/4] PHY: add APM X-Gene SoC 15Gbps Multi-purpose PHY driver Loc Ho
2014-02-25  6:14       ` Loc Ho
2014-02-26  9:42       ` Kishon Vijay Abraham I
2014-02-26  9:42         ` Kishon Vijay Abraham I
2014-02-26  9:42         ` Kishon Vijay Abraham I
2014-02-26 20:45         ` Loc Ho
2014-02-26 20:45           ` Loc Ho
2014-02-26 20:45           ` Loc Ho
2014-02-27  6:02           ` Kishon Vijay Abraham I
2014-02-27  6:02             ` Kishon Vijay Abraham I
2014-02-27  6:02             ` Kishon Vijay Abraham I
2014-02-27  6:25             ` Loc Ho
2014-02-27  6:25               ` Loc Ho
2014-02-27  6:25               ` Loc Ho
2014-02-27  6:34               ` Kishon Vijay Abraham I
2014-02-27  6:34                 ` Kishon Vijay Abraham I
2014-02-27  6:34                 ` Kishon Vijay Abraham I
2014-02-27  6:41                 ` Loc Ho
2014-02-27  6:41                   ` Loc Ho
2014-02-27  6:41                   ` Loc Ho
2014-02-27  6:47                   ` Kishon Vijay Abraham I [this message]
2014-02-27  6:47                     ` Kishon Vijay Abraham I
2014-02-27  6:47                     ` Kishon Vijay Abraham I
2014-02-27  6:42                 ` Kishon Vijay Abraham I
2014-02-27  6:42                   ` Kishon Vijay Abraham I
2014-02-27  6:42                   ` Kishon Vijay Abraham I
2014-02-25 13:51     ` [PATCH RESEND v10 2/4] Documentation: Add APM X-Gene SoC 15Gbps Multi-purpose PHY driver binding documentation Kishon Vijay Abraham I
2014-02-25 13:51       ` Kishon Vijay Abraham I
2014-02-25 13:51       ` Kishon Vijay Abraham I
2014-02-25 12:05   ` [PATCH RESEND v10 1/4] PHY: Add function set_speed to generic PHY framework Kishon Vijay Abraham I
2014-02-25 12:05     ` Kishon Vijay Abraham I
2014-02-25 12:05     ` Kishon Vijay Abraham I
2014-02-25 13:45     ` Tejun Heo
2014-02-25 13:45       ` Tejun Heo
2014-02-25 13:45       ` Tejun Heo
2014-02-25 13:50       ` Kishon Vijay Abraham I
2014-02-25 13:50         ` Kishon Vijay Abraham I
2014-02-25 13:50         ` Kishon Vijay Abraham I

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=530EDF78.4050408@ti.com \
    --to=kishon@ti.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.