This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
Hi,
Please check if the pinmux for GPMC_A11 that you need does not get overwritten later in the code.
Have you read the actual value of the pinmux register? Address should be 0x44E1_08EC. You can use devmem2 command to read it.
There are 2 different pins where gpmc_a11 can be used. The mux register you're focused on corresponds to R6. It's also pinned out to V17. Which pin is it that you're looking at?
It is designed as generally low-speed (relatively) parallel bus, currently used for UART, general I/O, and SRAM access.
Which chip select is this for? Can you use devmem2 to print out all the corresponding GPMC_CONFIGx registers? Please include the complete printouts so I can see the addresses you're reading.
I suspect that somehow the GPMC may have had its configuration over-written and that you're not in the 8-bit non-multiplexed mode as you expect.
Also, what address are you accessing to read from the GPMC? If for example your math is incorrect with respect to how you're performing the accesses then the GPMC might be using the configuration from another chip select space. Can you confirm that the expected CSn signal is asserted when performing the access?
Hello Brad,
Please see the pin configuration table as requested. The GPMC is used in conjunction with CS3 and CS5. I have cross-checked that all pins were used as intended. As you can see, I am not using the default A11 pin as A11 signal, but the alternate function of the LCD_AC_BIAS_EN pin.
I used GPMC from 0x000 to 0x0fff, i.e. the entire range.
I am able to communicate with the UART chips without issues after masking off the A11 pin, the CS3 and CS5 are working perfectly. In fact A0 to A10 are working perfectly, except A11, which is always HIGH.
Pin | Address | Control Mode | MUX mode | |
Hex | Hex | Number | Name | |
gpmc_ad0 | 44E10800 | 00000030 | 0 | gpmc_ad0 |
gpmc_ad1 | 44E10804 | 00000030 | 0 | gpmc_ad1 |
gpmc_ad2 | 44E10808 | 00000030 | 0 | gpmc_ad2 |
gpmc_ad3 | 44E1080C | 00000030 | 0 | gpmc_ad3 |
gpmc_ad4 | 44E10810 | 00000030 | 0 | gpmc_ad4 |
gpmc_ad5 | 44E10814 | 00000030 | 0 | gpmc_ad5 |
gpmc_ad6 | 44E10818 | 00000030 | 0 | gpmc_ad6 |
gpmc_ad7 | 44E1081C | 00000030 | 0 | gpmc_ad7 |
gpmc_ad8 | 44E10820 | 00000030 | 0 | gpmc_ad8 |
gpmc_ad9 | 44E10824 | 00000030 | 0 | gpmc_ad7 |
gpmc_ad10 | 44E10828 | 00000030 | 0 | gpmc_ad10 |
gpmc_ad11 | 44E1082C | 00000040 | 0 | gpmc_ad11 |
gpmc_ad12 | 44E10830 | 00000040 | 0 | gpmc_ad12 |
gpmc_ad13 | 44E10834 | 00000040 | 0 | gpmc_ad13 |
gpmc_ad14 | 44E10838 | 00000040 | 0 | gpmc_ad14 |
gpmc_ad15 | 44E1083C | 00000040 | 0 | gpmc_ad15 |
gpmc_a0 | 44E10840 | 00000002 | 2 | rgmii2_tctl |
gpmc_a1 | 44E10844 | 00000022 | 2 | rgmii2_rctl |
gpmc_a2 | 44E10848 | 00000002 | 2 | rgmii2_td3 |
gpmc_a3 | 44E1084C | 00000002 | 2 | rgmii2_td2 |
gpmc_a4 | 44E10850 | 00000002 | 2 | rgmii2_td1 |
gpmc_a5 | 44E10854 | 00000002 | 2 | rgmii2_td0 |
gpmc_a6 | 44E10858 | 00000002 | 2 | rgmii2_tclk |
gpmc_a7 | 44E1085C | 00000022 | 2 | rgmii2_rclk |
gpmc_a8 | 44E10860 | 00000022 | 2 | rgmii2_rd3 |
gpmc_a9 | 44E10864 | 00000022 | 2 | rgmii2_rd2 |
gpmc_a10 | 44E10868 | 00000022 | 2 | rgmii2_rd1 |
gpmc_a11 | 44E1086C | 00000022 | 2 | rgmii2_rd0 |
gpmc_wait0 | 44E10870 | 00000030 | 0 | gpmc_wait0 |
gpmc_wpn | 44E10874 | 0000000A | 2 | gpmc_csn5 |
gpmc_ben1 | 44E10878 | 00000008 | 0 | gpmc_ben1_mux0 |
gpmc_csn0 | 44E1087C | 00000008 | 0 | gpmc_csn0 |
gpmc_csn1 | 44E10880 | 00000008 | 0 | gpmc_csn1 |
gpmc_csn2 | 44E10884 | 00000008 | 0 | gpmc_csn2 |
gpmc_csn3 | 44E10888 | 00000008 | 0 | gpmc_csn3 |
gpmc_clk | 44E1088C | 00000017 | 7 | gpio2[1] |
gpmc_advn_ale | 44E10890 | 00000008 | 0 | gpmc_advn_ale |
gpmc_oen_ren | 44E10894 | 00000008 | 0 | gpmc_oen_ren |
gpmc_wen | 44E10898 | 00000008 | 0 | gpmc_wen |
gpmc_ben0_cle | 44E1089C | 00000008 | 0 | gpmc_ben0_cle |
lcd_data0 | 44E108A0 | 00000009 | 1 | gpmc_a0_mux1 |
lcd_data1 | 44E108A4 | 00000009 | 1 | gpmc_a1_mux1 |
lcd_data2 | 44E108A8 | 00000009 | 1 | gpmc_a2_mux1 |
lcd_data3 | 44E108AC | 00000009 | 1 | gpmc_a3_mux1 |
lcd_data4 | 44E108B0 | 00000009 | 1 | gpmc_a4_mux1 |
lcd_data5 | 44E108B4 | 00000009 | 1 | gpmc_a5_mux1 |
lcd_data6 | 44E108B8 | 00000009 | 1 | gpmc_a6_mux1 |
lcd_data7 | 44E108BC | 00000009 | 1 | gpmc_a7_mux1 |
lcd_data8 | 44E108C0 | 00000037 | 7 | gpio2[14] |
lcd_data9 | 44E108C4 | 00000007 | 7 | gpio2[15] |
lcd_data10 | 44E108C8 | 00000017 | 7 | gpio2[16] |
lcd_data11 | 44E108CC | 0000002F | 7 | gpio2[17] |
lcd_data12 | 44E108D0 | 00000007 | 7 | gpio0[8] |
lcd_data13 | 44E108D4 | 00000007 | 7 | gpio0[9] |
lcd_data14 | 44E108D8 | 00000007 | 7 | gpio0[10] |
lcd_data15 | 44E108DC | 00000007 | 7 | gpio0[11] |
lcd_vsync | 44E108E0 | 00000009 | 1 | gpmc_a8_mux1 |
lcd_hsync | 44E108E4 | 00000009 | 1 | gpmc_a9_mux1 |
lcd_pclk | 44E108E8 | 00000009 | 1 | gpmc_a10_mux1 |
lcd_ac_bias_en | 44E108EC | 00000009 | 1 | gpmc_a11_mux1 |
mmc0_dat3 | 44E108F0 | 00000030 | 0 | mmc0_dat3 |
mmc0_dat2 | 44E108F4 | 00000030 | 0 | mmc0_dat2 |
mmc0_dat1 | 44E108F8 | 00000030 | 0 | mmc0_dat1 |
mmc0_dat0 | 44E108FC | 00000030 | 0 | mmc0_dat0 |
mmc0_clk | 44E10900 | 00000030 | 0 | mmc0_clk |
mmc0_cmd | 44E10904 | 00000030 | 0 | mmc0_cmd |
mii1_col | 44E10908 | 00000017 | 7 | gpio3[0] |
mii1_crs | 44E1090C | 00000021 | 1 | rmii1_crs_dv |
mii1_rx_er | 44E10910 | 00000021 | 1 | rmii1_rxer |
mii1_tx_en | 44E10914 | 00000001 | 1 | rmii1_txen |
mii1_rx_dv | 44E10918 | 00000037 | 7 | gpio3[4] |
mii1_txd3 | 44E1091C | 00000007 | 7 | gpio0[16] |
mii1_txd2 | 44E10920 | 00000007 | 7 | gpio0[17] |
mii1_txd1 | 44E10924 | 00000001 | 1 | rmii1_txd1 |
mii1_txd0 | 44E10928 | 00000001 | 1 | rmii1_txd0 |
mii1_tx_clk | 44E1092C | 00000031 | 1 | uart2_rxd_mux0 |
mii1_rx_clk | 44E10930 | 00000001 | 1 | uart2_txd_mux0 |
mii1_rxd3 | 44E10934 | 00000031 | 1 | uart3_rxd |
mii1_rxd2 | 44E10938 | 00000001 | 1 | uart3_txd |
mii1_rxd1 | 44E1093C | 00000021 | 1 | rmii1_rxd1 |
mii1_rxd0 | 44E10940 | 00000021 | 1 | rmii1_rxd0 |
mii1_ref_clk | 44E10944 | 00000020 | 0 | rmii1_refclk |
mdio | 44E10948 | 00000030 | 0 | mdio_data |
mdc | 44E1094C | 00000010 | 0 | mdio_clk |
spi0_sclk | 44E10950 | 00000020 | 0 | spi0_sclk |
spi0_d0 | 44E10954 | 00000030 | 0 | spi0_d0 |
spi0_d1 | 44E10958 | 00000020 | 0 | spi0_d1 |
spi0_cs0 | 44E1095C | 00000030 | 0 | spi0_cs0 |
spi0_cs1 | 44E10960 | 00000037 | 7 | gpio0[6] |
ecap0_in_pwm0_out | 44E10964 | 00000007 | 7 | gpio0[7] |
uart0_ctsn | 44E10968 | 00000007 | 7 | gpio1[8] |
uart0_rtsn | 44E1096C | 00000037 | 7 | gpio1[9] |
uart0_rxd | 44E10970 | 00000030 | 0 | uart0_rxd |
uart0_txd | 44E10974 | 00000000 | 0 | uart0_txd |
uart1_ctsn | 44E10978 | 00000007 | 7 | gpio0[12] |
uart1_rtsn | 44E1097C | 00000007 | 7 | gpio0[13] |
uart1_rxd | 44E10980 | 00000030 | 0 | uart1_rxd |
uart1_txd | 44E10984 | 00000000 | 0 | uart1_txd |
i2c0_sda | 44E10988 | 00000060 | 0 | I2C0_SDA |
i2c0_scl | 44E1098C | 00000060 | 0 | I2C0_SCL |
mcasp0_aclkx | 44E10990 | 00000037 | 7 | gpio3[14] |
mcasp0_fsx | 44E10994 | 00000007 | 7 | gpio3[15] |
mcasp0_axr0 | 44E10998 | 00000007 | 7 | gpio3[16] |
mcasp0_ahclkr | 44E1099C | 00000037 | 7 | gpio3[17] |
mcasp0_aclkr | 44E109A0 | 00000037 | 7 | gpio3[18] |
mcasp0_fsr | 44E109A4 | 00000017 | 7 | gpio3[19] |
mcasp0_axr1 | 44E109A8 | 00000007 | 7 | gpio3[20] |
mcasp0_ahclkx | 44E109AC | 00000007 | 7 | gpio3[21] |
xdma_event_intr0 | 44E109B0 | 00000017 | 7 | gpio0[19] |
xdma_event_intr1 | 44E109B4 | 00000037 | 7 | gpio0[20] |
warmrstn | 44E109B8 | 00000030 | 0 | RTC_porz |
nnmi | 44E109C0 | 00000030 | 0 | nNMI |
tms | 44E109D0 | 00000030 | 0 | TMS |
tdi | 44E109D4 | 00000030 | 0 | TDI |
tdo | 44E109D8 | 00000030 | 0 | TDO |
tck | 44E109DC | 00000030 | 0 | TCK |
trstn | 44E109E0 | 00000020 | 0 | nTRST |
emu0 | 44E109E4 | 00000017 | 7 | gpio3[7] |
emu1 | 44E109E8 | 00000017 | 7 | gpio3[8] |
rtc_pwronrstn | 44E109F8 | 00000030 | 0 | 0 |
pmic_power_en | 44E109FC | 00000028 | 0 | PMIC_POWER_EN |
ext_wakeup | 44E10A00 | 00000028 | 0 | EXT_WAKEUP |
rtc_kaldo_enn | 44E10A04 | 00000020 | 0 | ENZ_KALDO_1P8V |
usb0_drvvbus | 44E10A1C | 00000000 | 0 | USB0_DRVVBUS |
usb1_drvvbus | 44E10A34 | 00000000 | 0 | USB1_DRVVBUS |
That's not the data I was looking for. I want to view your GPMC configuration:
Please use devmem2 to interrogate registers like the ones above corresponding to the chip selects of interest.
K H Tang said:gpmc_ad044E10800000000300gpmc_ad0gpmc_ad144E10804000000300gpmc_ad1gpmc_ad244E10808000000300gpmc_ad2gpmc_ad344E1080C000000300gpmc_ad3gpmc_ad444E10810000000300gpmc_ad4gpmc_ad544E10814000000300gpmc_ad5gpmc_ad644E10818000000300gpmc_ad6gpmc_ad744E1081C000000300gpmc_ad7gpmc_ad844E10820000000300gpmc_ad8gpmc_ad944E10824000000300gpmc_ad7gpmc_ad1044E10828000000300gpmc_ad10gpmc_ad1144E1082C000000400gpmc_ad11gpmc_ad1244E10830000000400gpmc_ad12gpmc_ad1344E10834000000400gpmc_ad13gpmc_ad1444E10838000000400gpmc_ad14gpmc_ad1544E1083C000000400gpmc_ad15
Your chart shows that you're using gpmc_ad0 - gpmc_ad15. Your original post mentions you're trying to use 8-bit non-muxed mode, but your chart looks more like a 16-bit multiplexed mode. In the 16-bit multiplexed mode GPMC_A11 is not used, so your observations match very well with that. And that's why I'd like to see the GPMC register configuration. I want to know whether you're in a muxed mode of operation or non-muxed. Also, I want to know that the chip select is being asserted as expected so that we can be certain that the registers we examine are the ones governing the access.
Brad,
I omitted some detailed info in the previous posts to avoid confusing.
I actually have the following configurations:
CS0 - NAND
CS1 - AD Multiplexed 16-bit
CS2 - AD Multiplexed 16-bit
CS3 - Non-multiplexed 8-bit
CS5 - Non-multiplexed 8-bit
The GPMC configurations are shown below:
Pin | Address | Control Mode |
Hex | Hex | |
GPMC_CONFIG1_0 | 50000060 | 00000800 |
GPMC_CONFIG2_0 | 50000064 | 00030300 |
GPMC_CONFIG3_0 | 50000068 | 00030300 |
GPMC_CONFIG4_0 | 5000006C | 02000311 |
GPMC_CONFIG5_0 | 50000070 | 00030303 |
GPMC_CONFIG6_0 | 50000074 | 03000540 |
GPMC_CONFIG7_0 | 50000078 | 00000F48 |
GPMC_CONFIG1_1 | 50000090 | 00001202 |
GPMC_CONFIG2_1 | 50000094 | 00090901 |
GPMC_CONFIG3_1 | 50000098 | 00090901 |
GPMC_CONFIG4_1 | 5000009C | 08030803 |
GPMC_CONFIG5_1 | 500000A0 | 00090909 |
GPMC_CONFIG6_1 | 500000A4 | 09030080 |
GPMC_CONFIG7_1 | 500000A8 | 00000000 |
GPMC_CONFIG1_2 | 500000C0 | 00001202 |
GPMC_CONFIG2_2 | 500000C4 | 00090901 |
GPMC_CONFIG3_2 | 500000C8 | 00090901 |
GPMC_CONFIG4_2 | 500000CC | 09010901 |
GPMC_CONFIG5_2 | 500000D0 | 00090909 |
GPMC_CONFIG6_2 | 500000D4 | 09030080 |
GPMC_CONFIG7_2 | 500000D8 | 00000000 |
GPMC_CONFIG1_3 | 500000F0 | 00401000 |
GPMC_CONFIG2_3 | 500000F4 | 00101001 |
GPMC_CONFIG3_3 | 500000F8 | 22060514 |
GPMC_CONFIG4_3 | 500000FC | 10057016 |
GPMC_CONFIG5_3 | 50000100 | 010F1111 |
GPMC_CONFIG6_3 | 50000104 | 8F070000 |
GPMC_CONFIG7_3 | 50000108 | 00000F41 |
GPMC_CONFIG1_4 | 50000120 | 00401000 |
GPMC_CONFIG2_4 | 50000124 | 00101001 |
GPMC_CONFIG3_4 | 50000128 | 22060514 |
GPMC_CONFIG4_4 | 5000012C | 10057016 |
GPMC_CONFIG5_4 | 50000130 | 010F1111 |
GPMC_CONFIG6_4 | 50000134 | 8F070000 |
GPMC_CONFIG7_4 | 50000138 | 00000000 |
GPMC_CONFIG1_5 | 50000150 | 00000003 |
GPMC_CONFIG2_5 | 50000154 | 00090901 |
GPMC_CONFIG3_5 | 50000158 | 00090901 |
GPMC_CONFIG4_5 | 5000015C | 08030803 |
GPMC_CONFIG5_5 | 50000160 | 00091F1F |
GPMC_CONFIG6_5 | 50000164 | 09030080 |
GPMC_CONFIG7_5 | 50000168 | 00000F02 |
GPMC_CONFIG1_6 | 50000180 | 00401000 |
GPMC_CONFIG2_6 | 50000184 | 00101001 |
GPMC_CONFIG3_6 | 50000188 | 22060514 |
GPMC_CONFIG4_6 | 5000018C | 10057016 |
GPMC_CONFIG5_6 | 50000190 | 010F1111 |
GPMC_CONFIG6_6 | 50000194 | 8F070000 |
GPMC_CONFIG7_6 | 50000198 | 00000000 |
Are these values being dumped with devmem2 at run-time, or are these the values that you are attempting to program with your code? It is far preferable to see the run-time values with devmem2. In particular for now the GPMC_CONFIG1 values for the chip selects of interest are the most important.
K H Tang said:CS3 - Non-multiplexed 8-bit
K H Tang said:GPMC_CONFIG1_3 500000F0 00401000
Your register value above corresponds to a non-multiplexed 16-bit configuration.
Do you have access to other pins like A12 and higher? Are they operating as expected?
Brad,
Yes, these values are obtained at runtime. I documented them for reference purposes.
Oh sorry the CS3 was a mistake. I shall correct it.
My current design uses up to address A11 only, but I may have chance to pull GPMC_A12 out for testing. I shall experiment it, finger cross.
I have configured ball U2 and U3 to be GPMC_A13 and GPMC_A14 respectively, and the result is the same, they all remain at high level.
It looks like addresses higher than A11 are always high in my case for 8-bit non-muxed.
Any idea?
Did you fix your CS3 configuration?
What other signals do you see toggling? Specifically I would like to know which CSn pin you see asserted while you are looking at these address pins. What is the physical address you're accessing to trigger the access?
Yes, both CS3 and CS5 now look like this:
GPMC_CONFIG1_3 | 500000F0 | 00000002 |
GPMC_CONFIG2_3 | 500000F4 | 00090901 |
GPMC_CONFIG3_3 | 500000F8 | 00090901 |
GPMC_CONFIG4_3 | 500000FC | 08030803 |
GPMC_CONFIG5_3 | 50000100 | 00090909 |
GPMC_CONFIG6_3 | 50000104 | 09030080 |
GPMC_CONFIG7_3 | 50000108 | 00000F41 |
GPMC_CONFIG1_5 | 50000150 | 00000002 |
GPMC_CONFIG2_5 | 50000154 | 00090901 |
GPMC_CONFIG3_5 | 50000158 | 00090901 |
GPMC_CONFIG4_5 | 5000015C | 08030803 |
GPMC_CONFIG5_5 | 50000160 | 00090909 |
GPMC_CONFIG6_5 | 50000164 | 09030080 |
GPMC_CONFIG7_5 | 50000168 | 00000F42 |
When I access CS3 and CS5 at mapbase of 0x1000000 and 0x2000000 respectively, everything seems to work as expected except that A12 (and now A13 as well) are always high. So I have to mask out these address pins (since they are not really being used now) in the PLD. With that I can talk to my 16T654 UART (Linux in-built driver 8250.c) chips perfectly. What I did was to add this device using platform_add_devices function.
Took me some time to update this status.. to busy with other things.
Yes, I confirm this is the answer to my problem. It works now.
Thanks Brad.