ide-cf.c 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. /*
  2. * CF IDE addon card code
  3. *
  4. * Enter bugs at http://blackfin.uclinux.org/
  5. *
  6. * Copyright (c) 2005-2009 Analog Devices Inc.
  7. *
  8. * Licensed under the GPL-2 or later.
  9. */
  10. #include <common.h>
  11. #include <config.h>
  12. #include <asm/blackfin.h>
  13. #include "bf533-stamp.h"
  14. void cf_outb(unsigned char val, volatile unsigned char *addr)
  15. {
  16. /* "ETHERNET" means the expansion memory banks */
  17. swap_to(ETHERNET);
  18. *addr = val;
  19. SSYNC();
  20. swap_to(FLASH);
  21. }
  22. unsigned char cf_inb(volatile unsigned char *addr)
  23. {
  24. unsigned char c;
  25. swap_to(ETHERNET);
  26. c = *addr;
  27. SSYNC();
  28. swap_to(FLASH);
  29. return c;
  30. }
  31. void cf_insw(unsigned short *sect_buf, unsigned short *addr, int words)
  32. {
  33. int i;
  34. swap_to(ETHERNET);
  35. for (i = 0; i < words; i++) {
  36. *(sect_buf + i) = *addr;
  37. SSYNC();
  38. }
  39. swap_to(FLASH);
  40. }
  41. void cf_outsw(unsigned short *addr, unsigned short *sect_buf, int words)
  42. {
  43. int i;
  44. swap_to(ETHERNET);
  45. for (i = 0; i < words; i++) {
  46. *addr = *(sect_buf + i);
  47. SSYNC();
  48. }
  49. swap_to(FLASH);
  50. }
  51. void cf_ide_init(void)
  52. {
  53. int i, cf_stat;
  54. /* Check whether CF card is inserted */
  55. bfin_write_FIO_EDGE(FIO_EDGE_CF_BITS);
  56. bfin_write_FIO_POLAR(FIO_POLAR_CF_BITS);
  57. for (i = 0; i < 0x300; i++)
  58. asm volatile("nop;");
  59. cf_stat = bfin_read_FIO_FLAG_S() & CF_STAT_BITS;
  60. bfin_write_FIO_EDGE(FIO_EDGE_BITS);
  61. bfin_write_FIO_POLAR(FIO_POLAR_BITS);
  62. if (!cf_stat) {
  63. for (i = 0; i < 0x3000; i++)
  64. asm volatile("nop;");
  65. ide_init();
  66. }
  67. }