Embedded Intel Atom® Processors
Technological Conversations about Intel Atom® Hardware, Software, Firmware, Graphics

System Controller Hub

DMolt
Beginner
1,996 Views

I'm having some problem on writing a driver to access the System Controller Hub on Atom Poulsbo.

According to the datasheet specifications I'm accessing the CONFIG_ADDRESS (port I/O 0xcf8h) in order to configure a logical device (such as the LPC bus) and then I read back the requested value from the CONFIG_DATA register (port I/O 0xcfc).

Everything works fine till I try to read a register with an offset different from 0.

For example if I put 0x8000f800 in the CONFIG_ADDRESS (which means Bus 0, Device 31, Function 0, Register 0) I'm correctly able to read the the VID (8086h) and the DID (8119h) of the LPC interface. But If I put a 0x8000f808 in the CONFIG_ADDRESS (which means same device, register 02h) I read back a value that does not match with the DID previously read.

I've also tried with different logical devices but the behavior is always the same.

Am I missing something?

Thanks

0 Kudos
1 Solution
Pawitter_B_Intel
Employee
853 Views

The CONFIG_ADDRESS 0x8000f808 does not mean register 02h. It corresponds to register 08h which is RID - Revision Identification Register.

Since the CONFIG_ADDRESS has lower 2 bits [1:0] hardwired to 2'b00 .. this means that you can only access DWORD aligned address.. i.e. 00h, 04h, 08h, 0Ch etc....

This also means that if you need to read any register with address from 00h to 03h, you just provide lower 8 bits of CONFIG_ADDRESS as 00h.. similar for accessing any register with address from 04h to 07h, you need to program CONFIG_ADDRESS lower 8bits [7:0] as 04h and so on...

Can you try reading with address 0x8000f804 and see it if matches with data that is mentioned in the datasheet (which should be 0003h).

Hope this helps.

View solution in original post

0 Kudos
2 Replies
FMcNu1
Valued Contributor I
853 Views

Hi Davide:

Welcome to the Intel® Embedded Community.

Since you are using Intel® US15W System Controller Hub, I want to make you aware of a special place to go with your technical questions. The Intel e-Help desk is staffed by Intel representatives dedicated to answering embedded Intel® architecture product, design and development questions for select Intel processors, including Atom and US15W.

The Intel e-Help desk is only available to registered Privileged users. Before you can access e-Help, you will first have to upgrade your community membership to Privileged status. Privileged account status also allows you to access special documents and tools at the Intel® Embedded Design Center. Note that it usually takes a few days for the approval process, and it normally requires that your company has a Non-Disclosure Agreement (NDA) with Intel. If you are interested, http://edc.intel.com/My-Account.aspx http://edc.intel.com/My-Account.aspx" target="_self">Click here to go to your 'My Account' page and request Privileged access.

In the meantime, let's see if someone in the community can help you with an answer.

Felix

0 Kudos
Pawitter_B_Intel
Employee
854 Views

The CONFIG_ADDRESS 0x8000f808 does not mean register 02h. It corresponds to register 08h which is RID - Revision Identification Register.

Since the CONFIG_ADDRESS has lower 2 bits [1:0] hardwired to 2'b00 .. this means that you can only access DWORD aligned address.. i.e. 00h, 04h, 08h, 0Ch etc....

This also means that if you need to read any register with address from 00h to 03h, you just provide lower 8 bits of CONFIG_ADDRESS as 00h.. similar for accessing any register with address from 04h to 07h, you need to program CONFIG_ADDRESS lower 8bits [7:0] as 04h and so on...

Can you try reading with address 0x8000f804 and see it if matches with data that is mentioned in the datasheet (which should be 0003h).

Hope this helps.

0 Kudos
Reply