Skip to content

Commit

Permalink
Merge branch 'for-linus' of master.kernel.org:/pub/scm/linux/kernel/g…
Browse files Browse the repository at this point in the history
…it/cooloney/blackfin-2.6

* 'for-linus' of master.kernel.org:/pub/scm/linux/kernel/git/cooloney/blackfin-2.6:
  Blackfin arch: fix PORT_J BUG for BF537/6 EMAC driver reported by Kalle Pokki <kalle.pokki@iki.fi>
  Blackfin arch: gpio pinmux and resource allocation API required by BF537 on chip ethernet mac driver
  Blackfin arch: add some missing syscall
  binfmt_flat: checkpatch fixing minimum support for the blackfin relocations
  Binfmt_flat: Add minimum support for the Blackfin relocations
  • Loading branch information
Linus Torvalds committed Oct 3, 2007
2 parents bda0233 + cda6a20 commit 66b1f1a
Show file tree
Hide file tree
Showing 14 changed files with 456 additions and 65 deletions.
285 changes: 249 additions & 36 deletions arch/blackfin/kernel/bfin_gpio.c

Large diffs are not rendered by default.

23 changes: 19 additions & 4 deletions arch/blackfin/mach-common/entry.S
Original file line number Diff line number Diff line change
Expand Up @@ -815,7 +815,7 @@ _extable:

ALIGN
ENTRY(_sys_call_table)
.long _sys_ni_syscall /* 0 - old "setup()" system call*/
.long _sys_restart_syscall /* 0 */
.long _sys_exit
.long _sys_fork
.long _sys_read
Expand Down Expand Up @@ -978,13 +978,13 @@ ENTRY(_sys_call_table)
.long _sys_sched_get_priority_min /* 160 */
.long _sys_sched_rr_get_interval
.long _sys_nanosleep
.long _sys_ni_syscall /* sys_mremap */
.long _sys_mremap
.long _sys_setresuid /* setresuid16 */
.long _sys_getresuid /* getresuid16 */ /* 165 */
.long _sys_ni_syscall /* for vm86 */
.long _sys_ni_syscall /* old "query_module" */
.long _sys_ni_syscall /* sys_poll */
.long _sys_ni_syscall /* sys_nfsservctl */
.long _sys_nfsservctl
.long _sys_setresgid /* setresgid16 */ /* 170 */
.long _sys_getresgid /* getresgid16 */
.long _sys_prctl
Expand Down Expand Up @@ -1040,7 +1040,7 @@ ENTRY(_sys_call_table)
.long _sys_ni_syscall /* reserved for TUX */
.long _sys_ni_syscall
.long _sys_gettid
.long _sys_ni_syscall /* 225 */ /* sys_readahead */
.long _sys_readahead /* 225 */
.long _sys_setxattr
.long _sys_lsetxattr
.long _sys_fsetxattr
Expand Down Expand Up @@ -1157,6 +1157,21 @@ ENTRY(_sys_call_table)
.long _sys_shmctl
.long _sys_shmdt /* 340 */
.long _sys_shmget
.long _sys_splice
.long _sys_sync_file_range
.long _sys_tee
.long _sys_vmsplice /* 345 */
.long _sys_epoll_pwait
.long _sys_utimensat
.long _sys_signalfd
.long _sys_timerfd
.long _sys_eventfd /* 350 */
.long _sys_pread64
.long _sys_pwrite64
.long _sys_fadvise64
.long _sys_set_robust_list
.long _sys_get_robust_list /* 355 */
.long _sys_fallocate
.rept NR_syscalls-(.-_sys_call_table)/4
.long _sys_ni_syscall
.endr
Expand Down
6 changes: 5 additions & 1 deletion fs/binfmt_flat.c
Original file line number Diff line number Diff line change
Expand Up @@ -742,13 +742,16 @@ static int load_flat_file(struct linux_binprm * bprm,
* __start to address 4 so that is okay).
*/
if (rev > OLD_FLAT_VERSION) {
unsigned long persistent = 0;
for (i=0; i < relocs; i++) {
unsigned long addr, relval;

/* Get the address of the pointer to be
relocated (of course, the address has to be
relocated first). */
relval = ntohl(reloc[i]);
if (flat_set_persistent (relval, &persistent))
continue;
addr = flat_get_relocate_addr(relval);
rp = (unsigned long *) calc_reloc(addr, libinfo, id, 1);
if (rp == (unsigned long *)RELOC_FAILED) {
Expand All @@ -757,7 +760,8 @@ static int load_flat_file(struct linux_binprm * bprm,
}

/* Get the pointer's value. */
addr = flat_get_addr_from_rp(rp, relval, flags);
addr = flat_get_addr_from_rp(rp, relval, flags,
&persistent);
if (addr != 0) {
/*
* Do the relocation. PIC relocs in the data section are
Expand Down
11 changes: 9 additions & 2 deletions include/asm-blackfin/mach-bf533/bfin_serial_5xx.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#include <linux/serial.h>
#include <asm/dma.h>
#include <asm/portmux.h>

#define NR_PORTS 1

Expand Down Expand Up @@ -92,18 +93,24 @@ struct bfin_serial_res bfin_serial_resource[] = {
}
};

#define DRIVER_NAME "bfin-uart"

int nr_ports = NR_PORTS;
static void bfin_serial_hw_init(struct bfin_serial_port *uart)
{

#ifdef CONFIG_SERIAL_BFIN_UART0
peripheral_request(P_UART0_TX, DRIVER_NAME);
peripheral_request(P_UART0_RX, DRIVER_NAME);
#endif

#ifdef CONFIG_SERIAL_BFIN_CTSRTS
if (uart->cts_pin >= 0) {
gpio_request(uart->cts_pin, NULL);
gpio_request(uart->cts_pin, DRIVER_NAME);
gpio_direction_input(uart->cts_pin);
}
if (uart->rts_pin >= 0) {
gpio_request(uart->rts_pin, NULL);
gpio_request(uart->rts_pin, DRIVER_NAME);
gpio_direction_input(uart->rts_pin);
}
#endif
Expand Down
23 changes: 14 additions & 9 deletions include/asm-blackfin/mach-bf537/bfin_serial_5xx.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#include <linux/serial.h>
#include <asm/dma.h>
#include <asm/portmux.h>

#define NR_PORTS 2

Expand Down Expand Up @@ -122,25 +123,29 @@ struct bfin_serial_res bfin_serial_resource[] = {

int nr_ports = ARRAY_SIZE(bfin_serial_resource);

#define DRIVER_NAME "bfin-uart"

static void bfin_serial_hw_init(struct bfin_serial_port *uart)
{
unsigned short val;
val = bfin_read16(BFIN_PORT_MUX);
val &= ~(PFDE | PFTE);
bfin_write16(BFIN_PORT_MUX, val);

val = bfin_read16(PORTF_FER);
val |= 0xF;
bfin_write16(PORTF_FER, val);
#ifdef CONFIG_SERIAL_BFIN_UART0
peripheral_request(P_UART0_TX, DRIVER_NAME);
peripheral_request(P_UART0_RX, DRIVER_NAME);
#endif

#ifdef CONFIG_SERIAL_BFIN_UART1
peripheral_request(P_UART1_TX, DRIVER_NAME);
peripheral_request(P_UART1_RX, DRIVER_NAME);
#endif

#ifdef CONFIG_SERIAL_BFIN_CTSRTS
if (uart->cts_pin >= 0) {
gpio_request(uart->cts_pin, NULL);
gpio_request(uart->cts_pin, DRIVER_NAME);
gpio_direction_input(uart->cts_pin);
}

if (uart->rts_pin >= 0) {
gpio_request(uart->rts_pin, NULL);
gpio_request(uart->rts_pin, DRIVER_NAME);
gpio_direction_output(uart->rts_pin);
}
#endif
Expand Down
35 changes: 34 additions & 1 deletion include/asm-blackfin/mach-bf537/portmux.h
Original file line number Diff line number Diff line change
Expand Up @@ -106,4 +106,37 @@
#define P_SPI0_SSEL2 (P_DEFINED | P_IDENT(PORT_PJ11) | P_FUNCT(1))
#define P_SPI0_SSEL7 (P_DEFINED | P_IDENT(PORT_PJ5) | P_FUNCT(2))

#endif /* _MACH_PORTMUX_H_ */
#define P_MII0 {\
P_MII0_ETxD0, \
P_MII0_ETxD1, \
P_MII0_ETxD2, \
P_MII0_ETxD3, \
P_MII0_ETxEN, \
P_MII0_TxCLK, \
P_MII0_PHYINT, \
P_MII0_COL, \
P_MII0_ERxD0, \
P_MII0_ERxD1, \
P_MII0_ERxD2, \
P_MII0_ERxD3, \
P_MII0_ERxDV, \
P_MII0_ERxCLK, \
P_MII0_ERxER, \
P_MII0_CRS, \
P_MDC, \
P_MDIO, 0}


#define P_RMII0 {\
P_MII0_ETxD0, \
P_MII0_ETxD1, \
P_MII0_ETxEN, \
P_MII0_ERxD0, \
P_MII0_ERxD1, \
P_MII0_ERxER, \
P_RMII0_REF_CLK, \
P_RMII0_MDINT, \
P_RMII0_CRS_DV, \
P_MDC, \
P_MDIO, 0}
#endif /* _MACH_PORTMUX_H_ */
11 changes: 9 additions & 2 deletions include/asm-blackfin/mach-bf561/bfin_serial_5xx.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#include <linux/serial.h>
#include <asm/dma.h>
#include <asm/portmux.h>

#define NR_PORTS 1

Expand Down Expand Up @@ -92,18 +93,24 @@ struct bfin_serial_res bfin_serial_resource[] = {
}
};

#define DRIVER_NAME "bfin-uart"

int nr_ports = NR_PORTS;
static void bfin_serial_hw_init(struct bfin_serial_port *uart)
{

#ifdef CONFIG_SERIAL_BFIN_UART0
peripheral_request(P_UART0_TX, DRIVER_NAME);
peripheral_request(P_UART0_RX, DRIVER_NAME);
#endif

#ifdef CONFIG_SERIAL_BFIN_CTSRTS
if (uart->cts_pin >= 0) {
gpio_request(uart->cts_pin, NULL);
gpio_request(uart->cts_pin, DRIVER_NAME);
gpio_direction_input(uart->cts_pin);
}
if (uart->rts_pin >= 0) {
gpio_request(uart->rts_pin, NULL);
gpio_request(uart->rts_pin, DRIVER_NAME);
gpio_direction_input(uart->rts_pin);
}
#endif
Expand Down
55 changes: 55 additions & 0 deletions include/asm-blackfin/portmux.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,12 @@
#define P_MAYSHARE 0x2000
#define P_DONTCARE 0x1000


int peripheral_request(unsigned short per, const char *label);
void peripheral_free(unsigned short per);
int peripheral_request_list(unsigned short per[], const char *label);
void peripheral_free_list(unsigned short per[]);

#include <asm/gpio.h>
#include <asm/mach/portmux.h>

Expand Down Expand Up @@ -145,6 +151,22 @@
#define P_SPI2_SSEL3 P_UNDEF
#endif

#ifndef P_SPI2_SSEL4
#define P_SPI2_SSEL4 P_UNDEF
#endif

#ifndef P_SPI2_SSEL5
#define P_SPI2_SSEL5 P_UNDEF
#endif

#ifndef P_SPI2_SSEL6
#define P_SPI2_SSEL6 P_UNDEF
#endif

#ifndef P_SPI2_SSEL7
#define P_SPI2_SSEL7 P_UNDEF
#endif

#ifndef P_SPI2_SCK
#define P_SPI2_SCK P_UNDEF
#endif
Expand Down Expand Up @@ -513,6 +535,22 @@
#define P_SPI0_SSEL3 P_UNDEF
#endif

#ifndef P_SPI0_SSEL4
#define P_SPI0_SSEL4 P_UNDEF
#endif

#ifndef P_SPI0_SSEL5
#define P_SPI0_SSEL5 P_UNDEF
#endif

#ifndef P_SPI0_SSEL6
#define P_SPI0_SSEL6 P_UNDEF
#endif

#ifndef P_SPI0_SSEL7
#define P_SPI0_SSEL7 P_UNDEF
#endif

#ifndef P_UART0_TX
#define P_UART0_TX P_UNDEF
#endif
Expand Down Expand Up @@ -741,6 +779,23 @@
#define P_SPI1_SSEL3 P_UNDEF
#endif


#ifndef P_SPI1_SSEL4
#define P_SPI1_SSEL4 P_UNDEF
#endif

#ifndef P_SPI1_SSEL5
#define P_SPI1_SSEL5 P_UNDEF
#endif

#ifndef P_SPI1_SSEL6
#define P_SPI1_SSEL6 P_UNDEF
#endif

#ifndef P_SPI1_SSEL7
#define P_SPI1_SSEL7 P_UNDEF
#endif

#ifndef P_SPI1_SCK
#define P_SPI1_SCK P_UNDEF
#endif
Expand Down
Loading

0 comments on commit 66b1f1a

Please sign in to comment.