I think your problem is probably related to page alignment issues. This
issue was discussed on this mailing list back in April 27/28. Search google
groups for:

"Re: [beagleboard] Official eQEP driver Support"

Regards,
John

From:  Alberto Potenza <[email protected]>
Reply-To:  "[email protected]" <[email protected]>
Date:  Friday, July 18, 2014 at 1:26 AM
To:  "[email protected]" <[email protected]>
Subject:  [beagleboard] mmap SPI1 beaglebone black

> Dear all,
> I have tried to work with SPI1 on the beaglebone black (kernel 3.8) by using
> spidev.
> I saw several guides on that and so, I compiled my own device tree and it
> works:
> I can send and receive packet, change the spi clock frequency and so on.
> This is my device tree file
> 
> 
> /dts-v1/;
> /plugin/;
> 
> / {
>     compatible = "ti,beaglebone", "ti,beaglebone-black";
>     part-number = "BB-SPI1";
>     version = "00A0";
> 
>     fragment@0 {
>         target = <&am33xx_pinmux>;
>         __overlay__ {
>             bone_replicape_spi1_pins: pinmux_replicape_spi1_pins {
>                 pinctrl-single,pins = <
>                     0x190 0x3B    /* P9_31 = mcasp0_aclkx.spi1_sclk
> , NO PULL | MODE3 */
>                     0x194 0x3B    /* P9_29 = mcasp0_fsx.spi1_d0
> , NO PULL  | MODE3 */
>                     0x198 0x1B    /* P9_30 = mcasp0_axr0.spi1_d1
> , NO PULL | MODE3 */
>                     0x19c 0x1B    /* P9_28 = mcasp0_ahclkr.spi1_cs0
> , NO PULL | MODE3 */
>                     0x164 0x0A    /* P9_42 = spi1_cs1
> , NO PULL | MODE2 */
>>                 >;
>             };
>         };
>     };
> 
>     fragment@1 {
>         target = <&spi1>;
>         __overlay__ {
>             #address-cells = <1>;
>             #size-cells = <0>;
>             status            = "okay";
>             pinctrl-names    = "default";
>             pinctrl-0        = <&bone_replicape_spi1_pins>;
>             cs-gpios = <&gpio4 17 0>, <&gpio1 7 0>;
> 
>             cs0-device {
>                 #address-cells = <1>;
>                 #size-cells = <0>;
>                 compatible = "spidev";
>                 reg = <0>;
>                 spi-max-frequency = <16000000>;
>             };
>             cs1-device {
>                 #address-cells = <1>;
>                 #size-cells = <0>;
>                 compatible = "spidev";
>                 reg = <1>;
>                 spi-max-frequency = <16000000>;
>             };
>         };
>     };
> };
> 
> 
> 
> 
> Now I would like to go ahead and try to map it directly by mmap.
> 
> This is my C code:
> 
> #define SPI_BASE 0x481A0000                  // SPI BASE Register
> #define REGLEN 0x400
> #define SPI_REVISION  (0x000/4)
> #define SPI_SYSCONFIG (0x110/4)
> #define SPI_SYSSTATUS (0x114/4)
>      .....
>      .....
>      .....
>      .....
> 
> int main() {
> 
>     volatile unsigned int *data = NULL;
>     volatile unsigned int *spi_addr = NULL;
>     int fd_gp = open("/dev/mem",O_RDWR);
>     spi_addr  =   mmap(NULL, REGLEN, PROT_READ | PROT_WRITE, MAP_SHARED,
> fd_gp, SPI_BASE);
>     data = spi_addr + SPI_REVISION;
>     printf("SPI_REVISION value = 0x%x.\n",*data);
>     return 0;
> }
> 
> As soon as I try to print the SPI_REVISION value, my program gets stuck.
> 
> I am quite sure I am doing a stupid error somewhere but I do not see where.
> 
> Can you help me?
> 
> Thanks.
> 
> Alberto
> 
> -- 
> For more options, visit http://beagleboard.org/discuss
> --- 
> You received this message because you are subscribed to the Google Groups
> "BeagleBoard" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.


-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to