Date: Sun, 19 Aug 2018 12:21:01 -0600 From: Ian Lepore <ian@freebsd.org> To: Rajesh Kumar <rajfbsd@gmail.com> Cc: freebsd-drivers@freebsd.org, freebsd-hackers@freebsd.org Subject: Re: Need a clarification regarding I2C bus frequency in FreeBSD Message-ID: <1534702861.27158.36.camel@freebsd.org> In-Reply-To: <CAAO%2BANOs_YVov-d21Em1EHzajQw7wHsxkzZCnsZwkfBr2=mEiA@mail.gmail.com> References: <CAAO%2BANOXwXAzJt%2BBZez6422jqKjrKPboSe_%2BudnOCWxYqE-=sQ@mail.gmail.com> <1534523216.27158.17.camel@freebsd.org> <CAAO%2BANOs_YVov-d21Em1EHzajQw7wHsxkzZCnsZwkfBr2=mEiA@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, 2018-08-19 at 19:23 +0530, Rajesh Kumar wrote: > Hi Ian, > > Basically, I want to set the I2C clock frequency for Designware IP in our > board to 150Mhz. So, I was looking for the way in FreeBSD. > > So, Is this the frequency which is configured through the clock high/low > registers? I see the those register are coded to 100 and 125 currently, I > am not sure how that value is arrived. If it needs to be configured for > 150Mhz, how to derive the appropriate values? I looked at the DW_apb_i2c > databook section 3.11 to understand about it. I am still unclear. I see a > comment saying "Program based on 25000 Hz clock". In my case, should they > be programmed based on 150Mhz clock? Rajesh, Please bottom-post when replying on freebsd mailing lists, mixed top- and bottom-posting is too confusing. What exactly do you mean when you say "the i2c clock frequency"? The datasheet appears to use a term like that to refer to the internal clock used to drive the IP block in the chip. That base clock is then divided down to create the i2c bus frequency on the I2C_SCL line. The IG4_REG_SS_SCL_HCNT and IG4_REG_SS_SCL_LCNT registers are the duration in base clock ticks that the SCL line is held high and low for standard speed. The registers with FS in the name are for high speed mode. The comment block and the values our driver programs into those registers appear to be wildly wrong. There is no way a base clock running at 25KHz can be divided down to create i2c bus speeds of 100KHz and 400KHz for standard and fast modes. If the base clock really is 25KHz then the driver currently sets the i2c bus to run at 111Hz. The hardware default values for the HCNT/LCNT registers, as given in the datasheet referenced by the driver [1], would be consistant with an internal base clock speed of 1GHz. The fact that the header file defines a IG4_REG_CLK_PARMS register, but the datasheet doesn't mention it, makes me think that on some versions of the hardware the speed is fixed and the driver has to know what that is based on the version, or vendor, or something. Other versions of the hardware may have information about the base clock speed in that IG4_REG_CLK_PARMS register. What we need is for someone who has this hardware to put an oscilliscope on the SCL line and get us some real-world truth. [1] http://www.intel.com/content/www/us/en/processors/core/4th-gen-core-family-mobile-i-o-datasheet.html?wapkw=datasheets+4th+generation -- Ian
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1534702861.27158.36.camel>