[U-Boot] Antwort: Re: [PATCH] zynq: fix I2C in SPL

Hannes Schmelzer hannes at schmelzer.or.at
Thu Feb 14 13:12:09 UTC 2019



On 2/14/19 1:26 PM, Michal Simek wrote:
> On 14. 02. 19 8:52, Hannes Schmelzer wrote:
>>> Hi,
>> Hi Michal,
>>
>>> first of all I would rephrase subject a little bit.
>>>
>>> Something like:
>>> "ARM: zynq: Add missing i2c get_rate for fixing i2c SPL"
>> OK.
>>
>>> On 14. 02. 19 6:50, Hannes Schmelzer wrote:
>>>> The commit 'f48ef0d81aa837a33020f8d61abb3929ba613774' did break I2C
>>>> support because requesting the clock for the I2C ip-block isn't
>>>> supported during SPL.
>>>>
>>>> To fixup this we add support requesting clocks for:
>>>> - i2c0
>>>> - i2c1
>>>>
>>>> Signed-off-by: Hannes Schmelzer <hannes.schmelzer at br-automation.com>
>>>>
>>>> ---
>>>>
>>>>   drivers/clk/clk_zynq.c | 3 +++
>>>>   1 file changed, 3 insertions(+)
>>>>
>>>> diff --git a/drivers/clk/clk_zynq.c b/drivers/clk/clk_zynq.c
>>>> index 482f093..9a4e949 100644
>>>> --- a/drivers/clk/clk_zynq.c
>>>> +++ b/drivers/clk/clk_zynq.c
>>>> @@ -434,6 +434,9 @@ static ulong zynq_clk_get_rate(struct clk *clk)
>>>>      case lqspi_clk ... pcap_clk:
>>>>      case sdio0_clk ... spi1_clk:
>>>>         return zynq_clk_get_peripheral_rate(priv, id, 0);
>>>> +   case i2c0_aper_clk ... i2c1_aper_clk:
>>>> +      return zynq_clk_get_cpu_rate(priv, cpu_1x_clk);
>>>> +
>>> please remove this empty line.
>> OK. I'll send V2 patch.
>>
>>>>      default:
>>>>         return -ENXIO;
>>>>      }
>>>>
>>> I am also curious why you are enabling I2C in SPL. What are you doing
>>> with that?
>> I have to turn on very early some voltage rails on my board, where i have
>> to communicate with i2c to a resetcontroller.
> ok. How does that code look like?
> Just dm_i2c_write?
>
> I have never tried i2c in spl.
hi michal,

here for example:

int board_init(void)    /* spl stage */
{
     u16 u16buf;
     u8 u8buf;
     int rc;
     struct udevice *dev;

     /* peripheral RESET on PSOC reset-controller */
     rc = i2c_get_chip_for_busnum(0, RSTCTRL_ADDR_PSOC, 1, &dev);
     if (rc == 0) {
         u16buf = RSTCTRL_CTRLSPEC_nPCIRST;
         rc = dm_i2c_write(dev, RSTCTRL_CTRLSPEC,
                   (uint8_t *)&u16buf, sizeof(u16buf));
     } else {
         printf("failed to get i2c chip for PSOC resetcontroller!\n");
     }

     return 0;
}


later on my plan is to push my board mainline once development has been 
finished.
> Thanks,
> Michal
cheers,
Hannes


More information about the U-Boot mailing list