sim: bfin: fix inverted W1C logic
authorMike Frysinger <vapier@gentoo.org>
Thu, 24 Mar 2011 03:17:14 +0000 (03:17 +0000)
committerMike Frysinger <vapier@gentoo.org>
Thu, 24 Mar 2011 03:17:14 +0000 (03:17 +0000)
When I originally wrote the w1c helper funcs, I used it in a few places.
Then I forgot how it worked and when I later documented it, I described
the 3rd arg in the exact opposite way it is actually used.  This error
propagated to a bunch of devices registers that were not explicitly
tested (a bunch of the devices are stubs which merely exist to say "no
device is connected" to make device drivers happy).

So once the documentation is unscrewed, fix all of the broken call sites.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
14 files changed:
sim/bfin/ChangeLog
sim/bfin/devices.h
sim/bfin/dv-bfin_cec.c
sim/bfin/dv-bfin_emac.c
sim/bfin/dv-bfin_eppi.c
sim/bfin/dv-bfin_gpio.c
sim/bfin/dv-bfin_jtag.c
sim/bfin/dv-bfin_nfc.c
sim/bfin/dv-bfin_otp.c
sim/bfin/dv-bfin_ppi.c
sim/bfin/dv-bfin_rtc.c
sim/bfin/dv-bfin_spi.c
sim/bfin/dv-bfin_twi.c
sim/bfin/dv-bfin_uart2.c

index d3445bc313087b9ce3e2ac29fb2acec771d9f0d5..36c8665f284c23bbaeecf5945ac5df820fa61427 100644 (file)
@@ -1,3 +1,20 @@
+2011-03-23  Mike Frysinger  <vapier@gentoo.org>
+
+       * devices.h (dv_w1c): Fix typos in documentation of "bits" arg.
+       * dv-bfin_cec.c (bfin_cec_io_write_buffer): Pass 0xffee to dv_w1c_4.
+       * dv-bfin_emac.c (bfin_emac_io_write_buffer): Pass 0xe1 to dv_w1c_4
+       for systat MMR and -1 to dv_w1c_4 for [rt]x_stky/mmc_[rt]irqs MMRs.
+       * dv-bfin_eppi.c (bfin_eppi_io_write_buffer): Pass 0x1ff to dv_w1c_2.
+       * dv-bfin_gpio.c (bfin_gpio_io_write_buffer): Invert bits to dv_w1c_2.
+       * dv-bfin_jtag.c (bfin_jtag_io_write_buffer): Invert bits to dv_w1c_4.
+       * dv-bfin_nfc.c (bfin_nfc_io_write_buffer): Invert bits to dv_w1c_2.
+       * dv-bfin_otp.c (bfin_otp_io_write_buffer): Invert bits to dv_w1c_2.
+       * dv-bfin_ppi.c (bfin_ppi_io_write_buffer): Invert bits to dv_w1c_2.
+       * dv-bfin_rtc.c (bfin_rtc_io_write_buffer): Invert bits to dv_w1c_2.
+       * dv-bfin_spi.c (bfin_spi_io_write_buffer): Invert bits to dv_w1c_2.
+       * dv-bfin_twi.c (bfin_twi_io_write_buffer): Invert bits to dv_w1c_2.
+       * dv-bfin_uart2.c (bfin_uart_io_write_buffer): Invert bits to dv_w1c_2.
+
 2011-03-23  Mike Frysinger  <vapier@gentoo.org>
 
        * dv-bfin_uart.h (TFI, BI, FE, PE, OE): Define.
index 76854ed33a4e854fb7861480193fc79794fda3c9..3dc5481a1169c81cf24dc123f9b198621f1f5fcb 100644 (file)
@@ -81,8 +81,8 @@ static inline void dv_store_4 (void *ptr, bu32 val)
   dv_store_2 (ptr, val);
 }
 \f
-/* Helpers for MMRs where all bits are W1C except for the specified
-   bits -- those ones are RO.  */
+/* Helpers for MMRs where only the specified bits are W1C.  The
+   rest are left unmodified.  */
 #define dv_w1c(ptr, val, bits) (*(ptr) &= ~((val) & (bits)))
 static inline void dv_w1c_2 (bu16 *ptr, bu16 val, bu16 bits)
 {
index 85fe6fcd1a3665910ed961c8aa65a8b5b2062b14..0c6a8235a6def71cee85edb8793a9c6a374655fd 100644 (file)
@@ -100,7 +100,7 @@ bfin_cec_io_write_buffer (struct hw *me, const void *source,
       /* Read-only register.  */
       break;
     case mmr_offset(ilat):
-      dv_w1c_4 (&cec->ilat, value, 0);
+      dv_w1c_4 (&cec->ilat, value, 0xffee);
       break;
     case mmr_offset(iprio):
       cec->iprio = (value & IVG_UNMASKABLE_B);
index a64198d45b6205492be31cfeb1ba171f59e6d7ee..af14103ea4fc00bbc9075b78927ca8bbfe1f19cd 100644 (file)
@@ -224,7 +224,7 @@ bfin_emac_io_write_buffer (struct hw *me, const void *source,
       dv_w1c_4_partial (valuep, value, 0xf20);
       break;
     case mmr_offset(systat):
-      dv_w1c_4 (valuep, value, 0x1e);
+      dv_w1c_4 (valuep, value, 0xe1);
       break;
     case mmr_offset(staadd):
       *valuep = value | STABUSY;
@@ -242,7 +242,7 @@ bfin_emac_io_write_buffer (struct hw *me, const void *source,
     case mmr_offset(tx_stky):
     case mmr_offset(mmc_rirqs):
     case mmr_offset(mmc_tirqs):
-      dv_w1c_4 (valuep, value, 0);
+      dv_w1c_4 (valuep, value, -1);
       break;
     case mmr_offset(mmc_ctl):
       /* Writing to bit 0 clears all counters.  */
index df76f97d15548a70e5563de095ccc0daf0aae22f..c151f3cfc1bba5c1b638e7e31fd154950cff03e6 100644 (file)
@@ -106,7 +106,7 @@ bfin_eppi_io_write_buffer (struct hw *me, const void *source,
     {
     case mmr_offset(status):
       dv_bfin_mmr_require_16 (me, addr, nr_bytes, true);
-      dv_w1c_2 (value16p, value, 0);
+      dv_w1c_2 (value16p, value, 0x1ff);
       break;
     case mmr_offset(hcount):
     case mmr_offset(hdelay):
index c4a7481f6a3739de44d10fc28dbc365b1651017c..50baf03e71ceec57fb5e8af015d1230656ca4af2 100644 (file)
@@ -92,7 +92,7 @@ bfin_gpio_io_write_buffer (struct hw *me, const void *source, int space,
     case mmr_offset(clear):
     case mmr_offset(maska_clear):
     case mmr_offset(maskb_clear):
-      dv_w1c_2 (valuep, value, 0);
+      dv_w1c_2 (valuep, value, -1);
       break;
     case mmr_offset(set):
     case mmr_offset(maska_set):
index b4b482438520a8f02ac9d26c1aae0669c9c64f92..e2d105d991f8c5d0716ad97e87bec84dd85f4065 100644 (file)
@@ -63,7 +63,7 @@ bfin_jtag_io_write_buffer (struct hw *me, const void *source, int space,
   switch (mmr_off)
     {
     case mmr_offset(dbgstat):
-      dv_w1c_4 (valuep, value, ~0xc);
+      dv_w1c_4 (valuep, value, 0xc);
       break;
     case mmr_offset(dspid):
       /* Discard writes to these.  */
index 84246c85be02e5b08680e978c90a51898dfa514d..2bd8b9e764a95412932326851143d9ff3ab5effa 100644 (file)
@@ -108,7 +108,7 @@ bfin_nfc_io_write_buffer (struct hw *me, const void *source, int space,
       *valuep = value;
       break;
     case mmr_offset(irqstat):
-      dv_w1c_2 (valuep, value, 0);
+      dv_w1c_2 (valuep, value, -1);
       break;
     default:
       dv_bfin_mmr_invalid (me, addr, nr_bytes, true);
index 34bfb8d6e55a5b8f1a9f51a1ef83437210768106..5b15eeb118917465bd00d4b8124574204477efe3 100644 (file)
@@ -149,7 +149,7 @@ bfin_otp_io_write_buffer (struct hw *me, const void *source, int space,
     case mmr_offset(status):
       dv_bfin_mmr_require_16 (me, addr, nr_bytes, true);
       /* XXX: All bits seem to be W1C.  */
-      dv_w1c_2 (value16p, value, 0);
+      dv_w1c_2 (value16p, value, -1);
       break;
     case mmr_offset(timing):
     case mmr_offset(data0):
index e7b404bcd4b0c980263b86fface95f8ab1aa26e8..e2f829246c3213f1c04745af538fe220b9f0973e 100644 (file)
@@ -105,7 +105,7 @@ bfin_ppi_io_write_buffer (struct hw *me, const void *source, int space,
       *valuep = value;
       break;
     case mmr_offset(status):
-      dv_w1c_2 (valuep, value, (1 << 10));
+      dv_w1c_2 (valuep, value, ~(1 << 10));
       break;
     default:
       dv_bfin_mmr_invalid (me, addr, nr_bytes, true);
index 870d6b10950c3f7f7edeed5b5fe3af453123f2fe..1b201484a7ddd0f4a8ab5d12d4f12704e402a125 100644 (file)
@@ -80,7 +80,7 @@ bfin_rtc_io_write_buffer (struct hw *me, const void *source,
       /* XXX: Ignore these since we are wired to host.  */
       break;
     case mmr_offset(istat):
-      dv_w1c_2 (value16p, value, 1 << 14);
+      dv_w1c_2 (value16p, value, ~(1 << 14));
       break;
     case mmr_offset(alarm):
       break;
index f3e5cf62e5dfcb8f5e9311e53eb375887688bb99..63204ecd1820cea349df27473406ded93e925e40 100644 (file)
@@ -88,7 +88,7 @@ bfin_spi_io_write_buffer (struct hw *me, const void *source, int space,
   switch (mmr_off)
     {
     case mmr_offset(stat):
-      dv_w1c_2 (valuep, value, SPIF | TXS | RXS);
+      dv_w1c_2 (valuep, value, ~(SPIF | TXS | RXS));
       break;
     case mmr_offset(tdbr):
       *valuep = value;
index 8c775e6509bfe57b711c51d3dfd950d1195bc8cd..5d04f23368576c4d75d109b5062b79ffa2ecc79a 100644 (file)
@@ -102,10 +102,10 @@ bfin_twi_io_write_buffer (struct hw *me, const void *source, int space,
       *valuep = value;
       break;
     case mmr_offset(int_stat):
-      dv_w1c_2 (valuep, value, 0);
+      dv_w1c_2 (valuep, value, -1);
       break;
     case mmr_offset(master_stat):
-      dv_w1c_2 (valuep, value, MPROG | SDASEN | SCLSEN | BUSBUSY);
+      dv_w1c_2 (valuep, value, BUFWRERR | BUFRDERR | DNAK | ANAK | LOSTARB);
       break;
     case mmr_offset(slave_stat):
     case mmr_offset(fifo_stat):
index 5b379bb3e5ebe1e7a3012a4559f071b08108eb5d..facde1c6cd24a3c6aaf3a650f7089e39b814eadb 100644 (file)
@@ -97,10 +97,10 @@ bfin_uart_io_write_buffer (struct hw *me, const void *source,
       uart->ier |= value;
       break;
     case mmr_offset(ier_clear):
-      dv_w1c_2 (&uart->ier, value, 0);
+      dv_w1c_2 (&uart->ier, value, -1);
       break;
     case mmr_offset(lsr):
-      dv_w1c_2 (valuep, value, TEMT | THRE | DR);
+      dv_w1c_2 (valuep, value, TFI | BI | FE | PE | OE);
       break;
     case mmr_offset(rbr):
       /* XXX: Writes are ignored ?  */